M_Ł Opublikowano 7 Stycznia Zgłoś Opublikowano 7 Stycznia Witam Czy jest możliwość stworzenia lispa, który miałby następującą funkcję: W bloku o nazwie "kwadrat" jest zdefioniowany atrybut o nazwie "przepisz" Program miałby automatycznie odczytać wartość tego atrybutu, dodać do bloku hiperlink i wstawić w niego wartość atrybutu.
perlon Opublikowano 7 Stycznia Zgłoś Opublikowano 7 Stycznia Może coś w ten deseń: (defun c:UpdateBlockHyperlinks ( / ss i obj att-value url) (setq ss (ssget "_X" (list (cons 2 "kwadrat")))) (if ss (progn (setq i 0) (while (< i (sslength ss)) (setq obj (vlax-ename->vla-object (ssname ss i)) att-value (GetAttributeValue obj "przepisz") ) (vlax-for x (vla-get-hyperlinks obj) (vla-delete x)) (if att-value (progn (setq url (strcat "http://" att-value) hlinks (vlax-get-property obj 'Hyperlinks) ) (vla-add hlinks url) ) ) (setq i (1+ i)) ) (princ "\nBloki zaktualizowane.") ) (princ "\nNie znaleziono bloków o nazwie „kwadrat”.") ) (princ) ) (defun GetAttributeValue (block attribute-name) (setq attributes (vlax-invoke block 'GetAttributes)) (if attributes (vl-some (function (lambda (att) (if (equal (strcase (vla-get-TagString att)) (strcase attribute-name)) (vla-get-TextString att) ) ) ) attributes ) ) ) Ten hyperlink oczywiście jakoś do swoich potrzeb trzeba zaadaptować.
RobS Opublikowano 7 Stycznia Zgłoś Opublikowano 7 Stycznia Hej, Napisałem skrypt który przepisuje wartość atrybutu o wskazanej nazwie do hiperłącza w wybranych blokach. Zwróć uwagę na wielkość liter w nazwach, ponieważ ma ona znaczenie. Skrypt uruchamia polecenie PrzepiszDoHiperlinku. (vl-load-com) (princ (strcat " Copyright © 2000 — 2025 Usługi Informatyczne Szansa www.zwcad.pl Dostępne polecenia: PRZEPISZDOHIPERLINKU - skrypt automatycznie przepisuje wartość wskazanego atrybutu do hiperłącza w wybranych blokach ") ) (defun LM:vl-getattributevalue ( blk tag ) (setq tag (strcase tag)) (vl-some '(lambda ( ATT ) (if (= tag (strcase (vla-get-tagstring att))) (vla-get-textstring att))) (vlax-invoke blk 'getattributes)) ) (defun C:PRZEPISZDOHIPERLINKU (/ blockName przepiszVal ss i ent val) (setq blockName (getstring t "\nWpisz nazwę bloku: ")) (setq attName (getstring t "\nWpisz nazwę atrybutu: ")) (setq ss (ssget "_X" (list (cons 2 blockName)))) (setq i 0) (repeat (sslength ss) (setq ent (ssname ss i)) (setq obj (vlax-ename->vla-object ent)) (setq val (LM:vl-getattributevalue obj attName)) (vla-add (vla-get-hyperlinks obj) val (vl-filename-base val)) (setq i (+ i 1)) ) (princ) ) PrzepiszDoHiperlinku.lsp dmatusz3 i pawmal 2
M_Ł Opublikowano 9 Stycznia Autor Zgłoś Opublikowano 9 Stycznia Bardzo dziękuje. Lisp działa w zakresie, o którym pisałem. Ale mam jeszcze jedno pytanie. W AC w oknie dialogowym "Wstaw hiperłącze" jest do zaznaczenia opcja: "Przekształć hiperłącza DWG na DWF" Czy jest możliwość, aby lisp wymusił zaznaczenie tej opcji dla każdego wstawienia bloku?
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się