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. Cytuj
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ć. Cytuj
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 Cytuj
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? 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ą.