adrian_SKA Opublikowano 14 Maja 2021 Zgłoś Udostępnij Opublikowano 14 Maja 2021 Cześć, jestem tutaj nowy i chce się przywitać. Czy byłby ktoś w stanie mi pomóc? Mam bloki z atrybutami, chciałbym zrobić aby po wskazaniu polilini automatycznie zczytywało jej długość. Znalazłem potobny temat https://kojacek.wordpress.com/2018/01/23/etykietowanbloki.dwgie-polilinii/ ale potrzebuje to dostosować to swoich bloków. Bardzo dziękuję za pomoc Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
perlon Opublikowano 14 Maja 2021 Zgłoś Udostępnij Opublikowano 14 Maja 2021 A na czym miałaby polegać ta pomoc? Co chcesz konkretnie osiągnąć. Jaki jest związek bloku z atrybutami z polilinią? dmatusz3 1 Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kojacek Opublikowano 15 Maja 2021 Zgłoś Udostępnij Opublikowano 15 Maja 2021 Może tak (czując się wywołanym linkiem): Uproszczony kod: ; -------------------------------------------------------------------------------------- ; ; 2021 by kojacek (defun C:LPOLY (/ GetObjectID getObj l b v i) (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)) ) ) (defun getObj (/ e) (if (setq e (car (entsel "\nWybierz obiekt do zmierzenia: "))) (if (member (cdr (assoc 0 (entget e))) (list "LINE" "ARC" "LWPOLYLINE") ) e ) ) ) (defun GetBlk (BlkList ATT / e d a) (if (setq e (car (entsel "\nWybierz blok opisuący: "))) (if (and (setq d (entget e)) (setq a (mapcar '(lambda (%)(cdr (assoc 2 (entget %)))) (cd:BLK_GetAttEntity e) ) ) (= "INSERT" (cdr (assoc 0 d))) (member (cdr (assoc 2 d)) BlkList ) (member Att a) ) e ) ) ) (if (and (setq l (getObj)) (setq b (GetBlk (list "KABEL" "OBIEKT_OCHRONNY") "MEASURED_LENGTH" ) ) ) (progn (setq v (GetObjectID (vlax-ename->vla-object l) (cd:ACX_ADoc) ) i (strcat "%<\\AcObjProp Object(%<\\_ObjId " v ">%).Length \\f \"%lu2%pr2\">%" ) ) (cd:SYS_UndoBegin) (cd:BLK_SetAttValueVLA b "MEASURED_LENGTH" i ) (vla-Regen (cd:ACX_ADoc) acActiveViewport) (cd:SYS_UndoEnd) ) (princ "\nZły wybór") ) (princ) ) ; -------------------------------------------------------------------------------------------- ; Wymagane jest załadowanie CADPL-Pack'a: https://kojacek.wordpress.com/2015/11/04/cadpl-pack/ Nazwy bloków, tagi atrybutów i format Field-a, trezba sobie "podkręcić" po swojemu. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
adrian_SKA Opublikowano 15 Maja 2021 Autor Zgłoś Udostępnij Opublikowano 15 Maja 2021 (edytowane) Bardzo dziękuję za odpowiedź w temacie. Jesteśmy już bardzo blisko rozwiązania. chciałbym aby to działało podobnie jak byl przykład z etykietowaniem z tą różnicą że zamiast bloku z wielolinią odneisieniaaby były to te moje bloki. Lisp powinien dzialać następująco: kiedy wstawiam blok punktem wstawienia (małe kółeczko) dotykam polilini i wtedy wpisuje sie długośc polilini do atrybutu. Edytowane 15 Maja 2021 przez adrian_SKA Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
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ą.