Rekomendowane odpowiedzi

Opublikowano

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.

Opublikowano

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ć.

Opublikowano

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

Opublikowano

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?

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ę