| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Gesamtfläche Regionen (289 mal gelesen)
|
Lenzcad Ehrenmitglied Selbständiger Handwerker
Beiträge: 1500 Registriert: 21.10.2003
|
erstellt am: 22. Jul. 2004 13:17 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, ich habe eine 3D-Zeichnung mit mit vielen einzelnen Regionen, alle liegen relativ nah zusammen. Ich brauche die Gesamtfläche aller Regionen. Mit "area" muß ich jedes einzelne Objekt anklicken, das dauert sehr lange und ich weiß zum Teil nicht mehr was ich bereits ausgewählt habe. Weiß jemand eine Lisp oder so was, bei der ich alle Objekte auf einmal auswählen kann. Mit "Suchen" bin ich nicht fündig geworden. Vielen Dank Gruß Lenz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 22. Jul. 2004 13:29 <-- editieren / zitieren --> Unities abgeben: Nur für Lenzcad
evtl sollte du dir den Befehl _area mal genauer ansehen ! Acad spricht mit dir - du mußt nur zuhören (weil das sehr leise ist, solltest du aber eher die Befehls+Statusleiste lesen) Der Befehl kann ADDITIEREN !
------------------ - Sebastian - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Cadzia Ehrenmitglied V.I.P. h.c. CAD/Grafik-Dienstleister
Beiträge: 2912 Registriert: 02.07.2004 AutoCAD 2020 + MAP + WS.LandCAD Bricscad V21 pro
|
erstellt am: 22. Jul. 2004 13:34 <-- editieren / zitieren --> Unities abgeben: Nur für Lenzcad
für sowas verwende ich das geniale Tool "fla_ber" (von der Cadwiesel-Seite) (defun c:fla_ber ( / t_2 Ss)
;;(if ;; (/= (findfile "md_fla.dwg")nil) ;;(progn (setq Ss nil t_2 nil) (setq Ss (ssget ));'((0 . "LWPOLYLINE")))) (if (not Ss) (princ (strcat "\nNichts gewählt.")) (progn (command "_.area" "_a" "_o") (while (setq t_2 (ssname Ss 0)) ;;; (setq md_in (cdr (assoc 10 (entget t_2)))) ;;; (setq md_rnr_in (ssget "X" t_2)) ;;; (setq startp md_in) (command t_2) (setq Ss (ssdel t_2 Ss)) );while (command "" "") (princ "\n") (princ (strcat "\n*****Gesamtfläche: " (rtos (getvar "area") 2 5)))(terpri) ;(command "_.Insert" "md_fla" startp "1" "1" "0" (rtos (getvar "area")2 2)) );endprogn );endif (setq startp (getpoint "Einfügepunkt:")) (command "_text" startp "2.5" "0" (rtos (getvar "area")2 2)) ;;);ende progn ;;);end if (princ) )
------------------ Grüße Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 22. Jul. 2004 14:34 <-- editieren / zitieren -->
Zitat: Original erstellt von Cadzia: für sowas verwende ich das geniale Tool "fla_ber" (von der Cadwiesel-Seite)(command "area" ... (getvar "area")
In Programmen empfiehlt sich besser diese Funktion zur Ermittlung der Fläche: (vlax-get-property object 'area) Die Summenermittlung würde also einfach so aussehen: (defun c:ss-flaeche (/ sset) (if (setq sset (ssget)) (princ (strcat "Summe der Flächen: " (rtos (ss-flaeche sset) 2 10)) ) ) (prin1) ) (defun ss-flaeche (sset / fl fl-l) (foreach obj (ss-s2o sset) (if (and (vlax-property-available-p obj 'area) (setq fl (vlax-get-property obj 'area)) ) (setq fl-l (cons fl fl-l)) ) ) (apply '+ fl-l) ) ;;; Hilfsfunktion: ;;; macht aus einem Auswahlsatz eine Liste von VLA-Objekten (defun ss-s2o (sset / eset counter) (setq counter 0) (if (= 'PICKSET (type sset)) (repeat (sslength sset) (setq eset (cons (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname sset counter))))) eset) counter (1+ counter) ) ) ) eset ) Tom Berger ------------------
|
Cadzia Ehrenmitglied V.I.P. h.c. CAD/Grafik-Dienstleister
Beiträge: 2912 Registriert: 02.07.2004 AutoCAD 2020 + MAP + WS.LandCAD Bricscad V21 pro
|
erstellt am: 22. Jul. 2004 14:45 <-- editieren / zitieren --> Unities abgeben: Nur für Lenzcad
Zitat: Original erstellt von tom.berger: In Programmen empfiehlt sich besser diese Funktion zur Ermittlung der Fläche: (vlax-get-property object 'area)
Warum ist das besser? beide Tools ermitteln exakt das gleiche Ergebnis. Das andere Tool hat zudem den Vorteil, dass man die Summe gleich als Text bekommt. ------------------ Grüße Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 22. Jul. 2004 14:54 <-- editieren / zitieren -->
Zitat: Original erstellt von Cadzia: Warum ist das besser? beide Tools ermitteln exakt das gleiche Ergebnis. Das andere Tool hat zudem den Vorteil, dass man die Summe gleich als Text bekommt.
Es ist für den Normalanwender besser, weil der dann keine störenden Rückmeldungen des Befehls _AREA erhältst, der reagiert nämlich nicht auf CMDECHO usw.. Und dann ist das Ganze natürlich auch aus LISP-Sicht besser, weil sowohl der Endbenutzer-Befehl zur Verfügung steht als auch eine LISP-Funktion, die man überall einbauen kann, wo man sie benötigt. Und dann ist meine Funktion auch noch besser, weil sie prüft, ob für die gewählten Objekte überhaupt eine Flächeneigenschaft vorliegt. Deine Funktion gibt fälschlich die doppelte Kreisfläche zurück, wenn z.B. zuerst ein Kreis und dann eine Linie gewählt wird. Und selbstverständlich wird eine Summe von dieser Funktion als Zahl zurück gegeben. Wer einen String benötigt, der macht das in LISP dann so: (setq summentext (rtos (ss-flaeche sset) 2 10)) Gruß Tom Berger
------------------
|
Lenzcad Ehrenmitglied Selbständiger Handwerker
Beiträge: 1500 Registriert: 21.10.2003
|
erstellt am: 22. Jul. 2004 15:24 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 22. Jul. 2004 15:36 <-- editieren / zitieren -->
Zitat: Original erstellt von Lenzcad: Vielen Dank, für die Menge nützlicher Antworten. Jetzt muß ich erst einmal probieren was bei mir passt.Gruß Lenz
Du kannst ja noch einen Befehl zum Erzeugen eines Textelements hinzufügen, womit auch die Sinnhaftigkeit des modularen Programmiersns nochmals unterstrichen wäre: (defun c:ss-flaechentext (/ sset startp) (if (and (setq sset (ssget)) (setq startp (getpoint "Texteinfügepunkt:")) ) (command "_text" startp "2.5" "0" ((rtos (ss-flaeche sset) 2 10))) ) (prin1) ) Tom Berger ------------------
|