Recommended Posts

Posted

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.

Posted

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

Posted

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

Posted

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?

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...