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?

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

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie