padon Opublikowano wczoraj o 11:47 Zgłoś Opublikowano wczoraj o 11:47 Witam, potrzebujemy połączyć długość wskazanej polilinii z atrybutem w bloku. Mam dużo polilinii i chcę opisać dowolną wielolinią odniesienia do której mam podpięty blok w którym jednym z atrybutów jest długość wskazanej polilinii. Cytuj
kojacek Opublikowano wczoraj o 12:20 Zgłoś Opublikowano wczoraj o 12:20 https://kojacek.wordpress.com/2018/01/23/etykietowanie-polilinii/ Cytuj
padon Opublikowano wczoraj o 12:59 Autor Zgłoś Opublikowano wczoraj o 12:59 kojacek - dzięki za odzew, oczywiście doszedłem do Twojego forum (od tego zawsze zaczynam 😉 i znam przykład ale jest on dla mnie za "skomplikowany" - pracuję na GstarCAD 2022 i ratuję się też "chatem" "copilotem" i "gemini" i nawet już to wygląda tak jak chcę mam problem z powiązaniem długości polilinii przy zimianie jej długości (oczywiście po regeneracji) się mój lisp sypie - przy wersji bez zmiany długości było OK. Cytuj
padon Opublikowano wczoraj o 13:02 Autor Zgłoś Opublikowano wczoraj o 13:02 ... ewentualnie fragment kodu który powiąże zwykłą wieloliniię odniesienia z zmieniającą się długością polilinii? Cytuj
kojacek Opublikowano wczoraj o 17:21 Zgłoś Opublikowano wczoraj o 17:21 Voila! Musisz mieć wczytany CADPL-Pack. I ten kod: ; -------------------------------------------------------------------- ; ; MLELEN by kojacek 2026 ; -------------------------------------------------------------------- ; (defun C:MLELEN ()(jk:ACX_MLePlineLen)(princ)) ; -------------------------------------------------------------------- ; (defun jk:ACX_MLePlineLen (/ %e %o %s %f %l %m %a %v) (if (and (setq %s (car (setq %e (entsel "\nWskaz polilinie:")))) (= "LWPOLYLINE" (cdr (assoc 0 (entget %s)))) ) (if (setq %e (getpoint (setq %f (cadr %e)) "\nPunkt opisu:")) (progn (setq %l (strcat "%<\\AcObjProp Object(%<\\_ObjId " (GetObjectID (vlax-ename->vla-object %s)(cd:ACX_ADoc)) ">%).Length \\f \"%lu2%pr2\">%" ) %a (angle %f %e) ) (cd:SYS_UndoBegin) (setq %m (jk:ACX_AddMleader (cd:ACX_ASpace) %l %f %e 1) ) (vla-SetDogLegDirection %m 0 (vlax-3D-point (list (if (<= (car %f)(car %e)) 1 -1) 0 0) ) ) (vla-update %m) (vla-Regen (cd:ACX_ADoc) acActiveViewport) (cd:SYS_UndoEnd) ) ) ) ) ; -------------------------------------------------------------------- ; (defun jk:ACX_AddMleader (Space txt Ps Pe Dir / v vo) (if (= (length Ps) 2)(setq Ps (append Ps (list 0.0)))) (if (= (length Pe) 2)(setq Pe (append Pe (list 0.0)))) (setq v (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble '(0 . 5)) (apply 'append (list Ps Pe)) ) ) ) (setq vo (vla-addMleader Space v 0)) (if txt (vla-put-TextString vo txt)) (vla-SetDogLegDirection vo 0 (vlax-3D-point (list Dir 0.0 0.0 ) ) ) (vla-SetLeaderLineVertices vo 0 v) vo ) ; -------------------------------------------------------------------- ; (defun GetObjectID (obj doc) ;; Lee Mac (if (eq "64" (strcase (getenv "PROCESSOR_ARCHITECTURE"))) (vlax-invoke-method (vla-get-Utility doc) 'GetObjectIdString obj :vlax-false) (itoa (vla-get-Objectid obj)) ) ) ; -------------------------------------------------------------------- ; A wygląda to tak: Cytuj
kojacek Opublikowano wczoraj o 17:22 Zgłoś Opublikowano wczoraj o 17:22 Po edycji polilinii zaś (i REGEN) tak: Cytuj
padon Opublikowano wczoraj o 17:32 Autor Zgłoś Opublikowano wczoraj o 17:32 Chapeau bas! Dzięki - o to chodziło! Cytuj
padon Opublikowano 13 godzin temu Autor Zgłoś Opublikowano 13 godzin temu Jeszcze mały problemik jest - wczoraj w domu sprawdzałem skrypt na wersji GstarCAD 2025 PRO, dzisiaj w pracy na wersji GstarCAD2022 PRO skrypt "działa" ale zamiast długości polilinii wyświetla mi: %<cObjProp Object(%<\_ObjId 1355108825392>%).Length - nie wiem w czym rzecz wszystkie biblioteki z CADpacka mam podczytane. Testowe lispy z którymi sam walczyłem mam "wyrzucone" z obszaru podczytywania - sprawdziłem na 2 komputerach. Może być wina wersji samego GstarCADa? Podobne "krzaczki" uzyskałem jak sam pisałem skrypty z AI. Cytuj
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.