Vytisknout stránku | Zavřít okno

dynamický blok a lisp

Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: CAD programování
Popis fóra: Otázky programování - nadstavby a utility pro CAD a GIS aplikace Autodesk (VBA, AutoLISP, ARX/C++, .Net, JavaScript, Python, MEL...)
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=5120
Datum vytištění: 11.čer.2026 v 02:50


Téma: dynamický blok a lisp
Odeslal: chlebovsky
Předmět: dynamický blok a lisp
Datum odeslání: 10.zář.2007 v 11:25
Zdravím všechny.
Lze nějak pomoci lispu pracovat s dynamickým blokem, např s viditelností, upravovat a číst jaká je, otočení, délka... i další parametry....
 
Lze to nějak jednoduše ovládat a zjišťovat aktuální nastavení ???
 
Nemyslím základní parametry bloku, ale jeho dynamičnost... asi reaktory...
 
Dík moc předem Martin.


-------------
Ing. Martin Chlebovský

www.kde-je-auto.cz

GPS monitoring provozu vozidel a osob.

WebDeveloper.

Programátor aplikací pro Autocad a MS Office.

Tvorba WWW aplikací.

Modelování domů a staveb.&l



Odpovědi:
Odeslal: PepaR
Datum odeslání: 10.zář.2007 v 16:54
Snad by mohlo pomoci následující fórum: http://discussion.autodesk.com/search.jspa?numResults=25&inputEntered=true&source=thread-threaded%7C154&q=lisp&objID=f154" rel="nofollow - http://discussion.autodesk.com/search.jspa?numResults=25&inputEntered=true&source=thread-threaded%7C154&q=lisp&objID=f154

-------------
PepaR
https://www.jremes.cz" rel="nofollow - jremes.cz | https://www.stavlab.cz" rel="nofollow - stavlab.cz


Odeslal: Vladimír Michl
Datum odeslání: 10.zář.2007 v 19:40
Zde jsou užitečné funkce pro práci s dynamickými bloky z VLISPu (upraveno z diskusní skupiny):

;;Dynamic block functions - Allen Johnson
;;
;;------------------------------------------------- ---------------------
; shows what variables there are in your block
(defun c:tdb ()
(setq obj (vlax-ename->vla-object (car (entsel))))
(if (= (vlax-get-property obj 'isdynamicblock) :vlax-true)
(progn
(setq v (vla-getdynamicblockproperties obj))
(setq vval (vlax-variant-value v))
(setq sal (vlax-safearray->list vval))
(setq salnth (length sal))
(setq count 0)
(while (/= count salnth)
(vlax-dump-object (nth count sal))
(setq count (+ count 1))
)
)
(print "Not a dynamic block")
)
(setq count nil)
(princ)
)

;;
;;----------------------------------------------- -----------------------
;; changes a given variable in your block
(defun chgdynprop (e propname newval / obj v vval sal tot i)
(setq obj (if (= (type e) 'vla-object) e (vlax-ename->vla-object e)))
(if (= (vlax-get-property obj 'isdynamicblock) :vlax-true)
(progn
(setq v (vla-getdynamicblockproperties obj)
vval (vlax-variant-value v)
sal (vlax-safearray->list vval)
tot (length sal)
i 0
)
(while (< i tot)
(if (= (vlax-get-property (nth i sal) "PropertyName") propname)
(progn
(vlax-put-property (nth i sal) "Value" newval)
(setq i tot)
)
(setq i (1+ i))
)
)
)
)
)
;;
;;--------------------------------------------------------- -------------
;; reads a given variable in your block
(defun getdynprop (e propname / obj v vval sal tot i curval)
(setq obj (if (= (type e) 'vla-object) e (vlax-ename->vla-object e)))
(if (= (vlax-get-property obj 'isdynamicblock) :vlax-true)
(progn
(setq v (vla-getdynamicblockproperties obj)
vval (vlax-variant-value v)
sal (vlax-safearray->list vval)
tot (length sal)
i 0
)
(while (< i tot)
(if (= (vlax-get-property (nth i sal) "PropertyName") propname)
(progn (setq curval (vlax-get-property (nth i sal) "Value")) (setq i tot))
(setq i (1+ i))
)
)
)
)
(if curval (vlax-variant-value curval))
)
 
;;
;;------------------------------------------ ----------------------------
;; returns a selection set of blocks with the same effectivename
;; example use:
;; (setq dbselset (ssdblk "MyDynBlockName"))
;;
(defun ssdblk (effname / ssx ssf c en)
(setq ssx (ssget "_X" (list (cons 2 (strcat effname ",`*U*")))))
(setq ssf (ssadd)
c 0
)
(if ssx
(repeat (sslength ssx)
(setq en (ssname ssx c)
c (1+ c)
)
(if (= (print (vla-get-effectivename (vlax-ename->vla-object en))) effname)
(ssadd en ssf)
)
)
)
ssf
)

;;
;;--------------------------------------------------- -------------------
;;
;; find dynamick blocks
;; a command line function to select all dynamic blocks
;; with the same "effectivename"
(defun c:fdb (/ en obj effname)
(setq en (car (entsel)))
(if en
(progn (setq obj (vlax-ename->vla-object en))
(if (vlax-property-available-p obj 'effectivename)
(progn (setq effname (vlax-get-property obj "effectivename"))
(command "_Select" (ssdblk effname))
)
(prompt "\nNot a block.\n")
)
)
)
(princ)
)
;;
;;--------------------------------------------------- -------------------
;;  
;sample - set/change visibility:
;
;(command "_-Insert" shapename ipt 1 1 0)
;(setq obj (entlast))
;(chgdynprop obj "BeamSizes" "Beam99")
;(entupd obj)
;
;where "BeamSizes" is the name of a visibility state and "Beam99" one of the visibility state names


-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)


Odeslal: chlebovsky
Datum odeslání: 11.zář.2007 v 09:47
Chlapy, dík moc.
Obrovská pomoc, naprosto vyčerpávající odpovědi. Mám přesně co jsem potřeboval, díky díky díky.
 
Martin.


-------------
Ing. Martin Chlebovský

www.kde-je-auto.cz

GPS monitoring provozu vozidel a osob.

WebDeveloper.

Programátor aplikací pro Autocad a MS Office.

Tvorba WWW aplikací.

Modelování domů a staveb.&l


Odeslal: DRACON
Datum odeslání: 21.zář.2007 v 09:59
Pěkný, ale zasek jsem se na chgdynprop

(vlax-get-property (nth i sal) "Value") mi vrací #<variant 2 0>

ale #<variant 2 1> do (vlax-put-property (nth i sal) "Value" newval) nemůžu dostat
- prostě nevím co je zač to #< .. > a jak to do newval dostat

poraďte prosím !


Odeslal: chlebovsky
Datum odeslání: 24.zář.2007 v 14:57
mě to funguje bezvadně, jestli není problém ve vstupních parametrech :
jsou tři :
e               = jméno entity bloku, napr (car (entsel))
propname = jméno parametru (dle bloku)
newval      = nová hodnota parametru
například dyn blok bude mít parametr viditelnosti s označením KONEC a bude mít jako by tři typy viditelností - SROUB/VRUT/TYCOVINA
pak propname = "KONEC" a newval = "SROUB"
 
a spoustí se to pak :
(chgdynprop ((car (entsel)) "KONEC" "SROUB")
pozor blok musí mít parametr daného jména a danou hodnotu 


-------------
Ing. Martin Chlebovský

www.kde-je-auto.cz

GPS monitoring provozu vozidel a osob.

WebDeveloper.

Programátor aplikací pro Autocad a MS Office.

Tvorba WWW aplikací.

Modelování domů a staveb.&l


Odeslal: DRACON
Datum odeslání: 24.zář.2007 v 16:08
Děkuji za pomoc - sice to nebylo ono, ale vyburcovalo mě to k lepšímu popisu toho co řeším
a výsledkem bylo řešení :)

jednalo se mi o ovládnutí překlápění d.bloku LISPem.
Novou hodnotu newval pro chgdynprop,
kterou jsem potřeboval ve tvaru #<variant 2 1>,
je třeba vytvořit příkazem (vlax-make-var value type)

Přiložený prográmek "překlápí" d.blok tam a zpět.
Pro výpočet stavu překlopení (stav 0 nebo 1) je použita poněkud matoucí finta zbytku po dělení dvěma původního stavu po přičtení jedničky
(zbytek (1+1)/2)=0 , (zbytek (0+1)/2)=1

(defun c:kuku ( / obj a )
(vl-load-com)
(setq obj (car (entsel)))
(setq a (getdynprop obj "Stav překlopení1"))
(chgdynprop obj "Stav překlopení1" (vlax-make-variant (rem (1+ a) 2) vlax-vbInteger))
)



Vytisknout stránku | Zavřít okno