M_Ł Posted January 7 Report Posted January 7 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. Quote
perlon Posted January 7 Report Posted January 7 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ć. Quote
RobS Posted January 7 Report Posted January 7 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 and pawmal 2 Quote
M_Ł Posted January 9 Author Report Posted January 9 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? Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.