Diskuzní fórum a databáze tipů a utilit pro AutoCAD, Inventor, Revit a další produkty Autodesk - od firmy Arkance Systems [www.cadforum.cz]
CZ | SK | EN | DE
Přihlášení
či registrace
   právě nás čte: 7417 
RSS kanál - CAD tipy RSS tipy
RSS diskuze

Diskuze Diskuzní fórum, poradna

 

NápovědaCAD diskuze, rady, výměna zkušeností

 
CAD Fórum - Homepage Veřejné diskuzní fórum k CAD aplikacím - ptejte se na libovolné otázky týkající se oboru CAx, podělte se o vaše znalosti a zkušenosti s programy AutoCAD, Inventor, Revit, Fusion 360, 3ds Max a s dalšími CAD aplikacemi. Zaregistrujte se nebo se přihlašte a zašlete váš příspěvek do odpovídajícího fóra. Viz další informace o CAD Fóru. Nechcete se registrovat? Zeptejte se v naší Facebook poradně.
Fórum nenahrazuje technický support firmy Arkance Systems (CAD Studio) - přímá podpora pro zákazníky funguje na helpdesk.cadstudio.cz
  FAQ FAQ  Prohledat fórum   Události   Registrovat Registrovat  Přihlásit Přihlásit

Téma uzavřenodynamický blok a lisp

 Odpovědět Odpovědět archiv
Autor
chlebovsky Zobrazit panel
Zasloužilý člen
Zasloužilý člen
Avatar

Přihlášen: 18.čer.2007
Lokalita: ČR (JM)
Používám:
Autocad R9 - 2022
Stav: Offline
Bodů: 112
Přímý odkaz na tuto zprávu Téma: dynamický blok a lisp
    Zasláno: 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
Zpět nahoru
PepaR Zobrazit panel
CAD/BIM manager
CAD/BIM manager
Avatar

Přihlášen: 29.lis.2004
Lokalita: ČR (ZL)
Používám:
ruky a hlavu (občas ;)
Stav: Offline
Bodů: 6187
Přímý odkaz na tuto zprávu Zasláno: 10.zář.2007 v 16:54
Zpět nahoru
Vladimír Michl Zobrazit panel
Moderátor
Moderátor
Avatar
Arkance Systems

Přihlášen: 09.zář.2004
Lokalita: ČR (JČ)
Používám:
Dodáváme produkty Autodesk
Stav: Offline
Bodů: 21488
Přímý odkaz na tuto zprávu Zasláno: 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 Systems s.r.o. - www.arkance-systems.cz
(podpora viz hd.cads.cz)
Zpět nahoru
chlebovsky Zobrazit panel
Zasloužilý člen
Zasloužilý člen
Avatar

Přihlášen: 18.čer.2007
Lokalita: ČR (JM)
Používám:
Autocad R9 - 2022
Stav: Offline
Bodů: 112
Přímý odkaz na tuto zprávu Zasláno: 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
Zpět nahoru
DRACON Zobrazit panel
Nováček
Nováček

Přihlášen: 07.čer.2007
Lokalita: ČR (JM)
Používám:
AutoCAD2008
Stav: Offline
Bodů: 7
Přímý odkaz na tuto zprávu Zasláno: 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 !
Zpět nahoru
chlebovsky Zobrazit panel
Zasloužilý člen
Zasloužilý člen
Avatar

Přihlášen: 18.čer.2007
Lokalita: ČR (JM)
Používám:
Autocad R9 - 2022
Stav: Offline
Bodů: 112
Přímý odkaz na tuto zprávu Zasláno: 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
Zpět nahoru
DRACON Zobrazit panel
Nováček
Nováček

Přihlášen: 07.čer.2007
Lokalita: ČR (JM)
Používám:
AutoCAD2008
Stav: Offline
Bodů: 7
Přímý odkaz na tuto zprávu Zasláno: 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))
)
Zpět nahoru

Pro technickou podporu CAD
kontaktujte Helpdesk

Příbuzné CAD tipy:
Tip 7614:Jak vybrat najednou všechny dynamické bloky?
Tip 7582:Výběr dynamických bloků podle dynamické vlastnosti nebo stavu viditelnosti.
Tip 12713:ReplaceBlock = BlockReplace i pro dynamické bloky.
Tip 6118:Ztráta dynamických vlastností (uzlů) bloku.
Tip 13608:Přidání editoru bloků do AutoCAD Web app.
Tip 4338:Rychlejší výběr dynamického bloku pro editaci.


 Odpovědět Odpovědět

Přejít na fórum Oprávnění fóra Zobrazit panel



Stránka byla vygenerována za 0,883 sekund.