Zobrazit plnou verzi příspěvku: plocha, objem telies

mikeborecek
20.02.2024, 13:50
Zdravímviem nejako automaticky vytiahnúť do výkresu veľkosti plôch 3D objektov, ktoré sú vymodelované? Pomohli by aj objemy. 

Vladimír Michl
20.02.2024, 14:48
Pokud v AutoCADu, tak objemy lze zobrazovat automatickou popiskou fArea (fProp) - viz https://www.cadforum.cz/cz/dynamicke-zobrazeni-libovolne-vlastnosti-objektu-jako-pole-tip9481

mikeborecek
20.02.2024, 15:56
funguje to, ale každý  objekt musím "nastaviť" samostatne. viem potom cez field zrátať všetky položky?Alebo je nejaká možnosť naraz vyviesť plochy označených 3D objektov?

mikeborecek
20.02.2024, 15:57
ako viem potom informáciu o celkovej ploche objektov vyviesť do výkresu?

Vladimír Michl
20.02.2024, 18:59
Můžete zkusit naši utilitu 3Dprops (viz Download). Výsledný objem či povrch vypíše a uloží do proměnné USERR1. Tu můžete zobrazit např. pomocí textového pole.

mikeborecek
20.02.2024, 20:04
Možno je to banálna otázka, ale ako dokážem USERR1 dať do textu? Je potom táto informácia o objeme/ploche adaptabilná - ak zmením veľkosť objektu zmení sa aj hodnota?Viem použiť na 2 separátne objekty? Teda aby som mal 2 rôzne adaptabilné hodnoty napr, plocha všetkých stien a plocha strechy?

Vladimír Michl
20.02.2024, 22:39
Do textu ji vložíte kódem:%<\AcVar userr1>%Ale není to adaptivní, to by bylo komplikovanější. Pokud by mělo sloužit pro více různých výběrů, tak by se asi musely ukládat i ty výběry, plus jejich výsledky.

mikeborecek
21.02.2024, 07:55
Dakujem za info v mojom prípade asi skôr využijem fArea  ktoré je adaptívne a viem ho dostať do výkresu. Co by som ešte potreboval je nejakým spôsobom zrátať viac hodnôt takto dostaných cez field do výkresu. viem to urobiť v textovom poli?

Vladimír Michl
21.02.2024, 07:57
Tohle je LISP kód té aplikace. Pokud by někoho napadla rozumná cesta jak ukládat a aktualizovat vlastnosti jednotlivých výběrů těles.;Display sum of 3D props
;ARKANCE, 2024 - www.cadforum.cz

(defun C:3DPROPS ( / ss ssl en obj cmde i vals valsum minpt maxpt height width depth volume area)

(vl-load-com)

(princ "\nSelect 3D Solids <all>: ")
(setq ss (ssget '((0 . "3DSOLID"))))
(if (not ss) (setq ss (ssget "_X" '((0 . "3DSOLID")))))
(if (and ss (setq ssl (sslength ss)))(progn
(initget "Height Volume Surface")
(setq kwd (getkword "\nReport solids property [Volume/Surface/Height] <Volume>: "))
(if (not kwd)(setq kwd "Volume"))
(setq i 0 vals "" valsum 0)
;(princ "\nSearching... ")
(repeat ssl
(setq en (ssname ss i)
obj (vlax-ename->vla-object en)
)
(vla-getboundingbox obj 'minpt 'maxpt)
(setq minpt (vlax-safearray->list minpt) maxpt (vlax-safearray->list maxpt))
(setq width (- (car maxpt)(car minpt)))
(setq depth (- (cadr maxpt)(cadr minpt)))
(setq height (- (caddr maxpt)(caddr minpt)))
(setq volume (vl-catch-all-apply 'vla-get-volume (list obj )))
(if (vl-catch-all-error-p volume)(setq volume nil))
(if (= kwd "Surface")(progn
(setq cmde (getvar "CMDECHO")) (setvar "CMDECHO" 0)
(command "_AREA" "_Obj" en)(setq area (getvar "AREA"))
(setvar "CMDECHO" cmde)
))

(cond
((= kwd "Height") (setq vals (strcat vals (rtos height 2) "+") valsum (+ valsum height)))
((= kwd "Volume") (if volume (setq vals (strcat vals (rtos volume 2) "+") valsum (+ valsum volume))))
((= kwd "Surface") (setq vals (strcat vals (rtos area 2) "+") valsum (+ valsum area)))
)
(setq i (1+ i))
);rep

(princ (strcat "\nTotal " kwd "=" (rtos valsum 2) " (" (substr vals 1 (1- (strlen vals))) ") - see USERR1"))
(setvar "USERR1" valsum)
));if
(princ)
) ;defun


(princ "\n3Dprops command loaded.")

Vladimír Michl
21.02.2024, 10:30
Tak ještě jedna iterace, obecnější. V nové verzi (1.1) lze promítnout objem do vlastnosti "Měřítko typu čáry", která už jde standardně vykazovat, včetně tabulek (a sumarizací) příkazu EXTRDATA. Reaktor na příkazu REGEN se postará o aktualizace této vlastnosti při případných změnách těles.Viz:

mikeborecek
23.02.2024, 08:53
zistil som že regen nefungujemusím nanovo spustiť 3dprops, potom dať updatedataextrakt až potom to obnoví

Vladimír Michl
23.02.2024, 10:38
Na objemy by fungovat měl. Ale musíte v každém sezení "nahodit" ten reaktor - volba "Use object's LTscale" v příkazu 3DProps. Asi by také šlo nějak zautomatizovat.

mikeborecek
23.02.2024, 10:42
aaa ja som to skúšal použiť na plochu, asi preto to nešlo automaticky

mikeborecek
26.02.2024, 09:11
je možné dostať z 3D objektov maximálne rozmery? Objekty budú vždy hranaté

Vladimír Michl
26.02.2024, 13:30
Myslíte ohraničující kvádr? Pokud bude stačit bez otáčení, tedy kvádr v globálních osách XYZ, pak ano, ale asi bez toho dynamického vykazování (už není, kam ty 3 souřadnice ukládat aby to byly vykazovatelné vlastnosti).

mikeborecek
26.02.2024, 13:41
niektoré objekty mám natočené aj o 45° , takže výsledok bude nesprávny 

Vladimír Michl
26.02.2024, 19:06
Ta "kartézská" verze bounding-boxů (tedy bez pootáčení) je k dispozici ve verzi 1.2. Ta také už umí dynamické aktualizace povrchů a automaticky aktivuje reaktor (po načtení aplikace) pokud byl v daném DWG zapnut.

mikeborecek
06.03.2024, 16:38
fareaviem nejakým spôsobom zmeniť formát výsledku? teraz to hádže číselnú hodnotu v mm na 4 desatinné miesta a na konci m2napr5555555.5555 m2viem upraviť lisp tak aby výsledok bol bez jednotiek na 2 desatinné miesta a číselná hodnota v metroch? napr5.55viem že sa to dá v nastaveniach pri spustení v konkrétnom výkrese, ale je potrebné to robiť pri každom novom výkrese 

Vladimír Michl
06.03.2024, 18:43
Počet des.míst (nejen pro tuto funkci) lze nastavit v šabloně, nebo vytvořením automaticky načítaného LSP souboru s řádkem (setvar "LUPREC" 2).Jestli to ale chcete jen pro výkazovou tabulku, tam můžete formát nastavit přímo v DXE šabloně - v průvodci klikněte pravým tlačítkem na název sloupce a zvolte požadovaný formát.

mikeborecek
06.03.2024, 19:14
Teraz sa to ssnažím dostať len do textu a ten cez field do textu vo výkrese.desatinné miesto sa mi podarilo zmeniť, ale ako by sa dalo vyhodiť m2 a vynásobiť to 0.000001 aby bola vyrátaná plocha  v metroch?

mikeborecek
06.03.2024, 19:16
ale teraz som si všimol, že aj to " (setvar "LUPREC" 2)." je potrebné robiť pri každom spustení autocadu [QUOTE=Vladimír Michl]Počet des.míst (nejen pro tuto funkci) lze nastavit v šabloně, nebo vytvořením automaticky načítaného LSP souboru s řádkem (setvar "LUPREC" 2).Jestli to ale chcete jen pro výkazovou tabulku, tam můžete formát nastavit přímo v DXE šabloně - v průvodci klikněte pravým tlačítkem na název sloupce a zvolte požadovaný formát.[/QUOTE]

Vladimír Michl
06.03.2024, 21:41
Dokonce při každém otevření výkresu, proto také navrhuji ten automaticky načítaný soubor - např. ACADDOC.LSP. Tím se to zařídí "samo".V textovém poli také můžete použít přepočítávací koeficient a počet desetinných míst. Viz pole Přesnost a Doplňkový formát v dialogu Pole (Field).

mikeborecek
07.03.2024, 07:44
akým spôsobom sa zadávajú príkazy do textu, ako macro? ^C^Cfarea;s;.;0.000001;2;;

Vladimír Michl
07.03.2024, 12:21
Ano, buď takto, nebo ty hodnoty přednastavit programově, podobně jako u toho LUPREC. Zde konkrétně:(setq _FAREASUFFIX "")(setq _FAREAFACTOR 0.000001)(setq _FAREAPREC 2)