| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: 3D Volumenkörperhöhe ermitteln und (1040 mal gelesen)
|
loup Mitglied
Beiträge: 4 Registriert: 19.11.2002
|
erstellt am: 19. Nov. 2002 17:34 <-- editieren / zitieren --> Unities abgeben:
Hallo hier ist LOUP ein neuer Lisper!! 1-Ich versuche derzeit die Höhe eines Volumenkörpers zu ermittel um danach eine geschlossene Polylinie auf diese Höhe zu extrudieren. Aber wie kann ich diese Höhe "z" herausfiltern? Ich muss derzeit die HÖhe noch von hand eingeben. Mein code sieht derzeit so aus: ;;; Die Form der Polylinie wird von dem bereits bestehenden Volumenkörper abgezogen (defun C:su1 () (graphscr) (prompt "\nSelect closed polyline you want to subtract: ") (setq po1 (ssget)) (prompt "\nSelect solide : ") (setq so1 (ssget)) (command "_extrude" po1"" pause pause"");;;extrudiert die Polylinie (command "_subtract" so1 "" "_last" "");;;bestehender VK - neuer VK ) ;;;kann ich den Cadbefehl _last nicht durch etwas eleganteres ersetzen? 2-Anders Thema-- Weis jemand wie man mehrere Volumenkörper gleichzeitig "strecken" kann? Man muss alle Flächen verschieben können und vollständige Objekte die sich im Auswahlfenster befinden nur verschieben. Ob das mit LISP wohl geht oder muss da ARX benutzt werden? Ich bin für alle Ratschläge und Verbesserungen dankbar. Danke im Voraus für alle Antworen. Loup
------------------ loup Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 20. Nov. 2002 09:39 <-- editieren / zitieren --> Unities abgeben: Nur für loup
Hallo loup, folgende Zeilen ermitteln die Höhe in Z-Richtung. Zumindest sollte Dir das Prinzip klar sein und mit ein wenig Anpassung kannst Du die Funktion bei Dir passend einbauen.
Code:
(defun SUB (/ obj_3d objTyp aa bb minpt maxpt distz) (while (not (= "3DSOLID" objTyp)) (setq obj_3d (entsel "\nKörper wählen")) (if obj_3d (setq objTyp (cdr (assoc 0 (entget (setq obj_3d(car obj_3d)))))) ) ) (vla-GetBoundingBox (vlax-ename->vla-object obj_3d) 'aa 'bb) (setq minpt (vlax-safearray->list aa) maxpt (vlax-safearray->list bb) distz (- (caddr maxpt) (caddr minpt)) ) )
Bei Fragen ... Grüße Holger
------------------ Holger Brischke CADlon - Lisp over night Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
loup Mitglied
Beiträge: 4 Registriert: 19.11.2002
|
erstellt am: 20. Nov. 2002 16:57 <-- editieren / zitieren --> Unities abgeben:
Hallo HOLGER, erstmal vielen Dank für die schnelle Antwort. Ich habe das Berechnunsprinzip verstanden aber wie baue ich den Wert in z.B. eine extudierung ein. Ich möchte ja nicht das du alles machts aber aller Anfang ist schwer ;-) Loup ------------------ loup Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 21. Nov. 2002 08:49 <-- editieren / zitieren --> Unities abgeben: Nur für loup
Hallo loup, das ganze ein wenig umstellen und dann kommt folgendes raus:
Code:
(defun C:su1 (/ po1 obj objTyp extrhoehe) (graphscr) (prompt "\nSelect closed polyline you want to subtract: ") (setq po1 (ssget)) ;;;(prompt "\nSelect solide : ") (while (not (= "3DSOLID" objTyp)) (setq obj (entsel "\nKörper wählen")) (if obj (setq objTyp (cdr (assoc 0 (entget (setq obj(car obj)))))) ) ) (setq extrhoehe(SUB obj)) ;;;(setq so1 (ssget)) (command "_extrude" po1 "" extrhoehe "" "");;;extrudiert die Polylinie (command "_subtract" obj "" "_last" "");;;bestehender VK - neuer VK ) (defun SUB (obj_3d / objTyp aa bb minpt maxpt distz) ;;; (while (not (= "3DSOLID" objTyp)) ;;; (setq obj_3d (entsel "\nKörper wählen")) ;;; (if obj_3d ;;; (setq objTyp (cdr (assoc 0 (entget (setq obj_3d(car obj_3d)))))) ;;; ) ;;; ) (vla-GetBoundingBox (vlax-ename->vla-object obj_3d) 'aa 'bb) (setq minpt (vlax-safearray->list aa) maxpt (vlax-safearray->list bb) distz (- (caddr maxpt) (caddr minpt)) ) )
Ich habe die unnötigen Zeilen mal ausdokumentiert, damit du den Überblick behältst. Bei Fragen ... Grüße Holger ------------------ Holger Brischke CADlon - Lisp over night Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 21. Nov. 2002 10:46 <-- editieren / zitieren --> Unities abgeben: Nur für loup
Hi Loup, ich mache das oft so, dass ich z einfach mit einem hinreichend grossen Betrag annehme, wenn sichergestellt ist, dass nichts in Z-Richtung darüberliegt. Ich weiss ja nicht, was das wird, aber nehmen wir mal an, es geht um Löcher/Langlöcher ein einer Platte, also Maschinenbau, Masseinheiten mm. Dann mache ich den 'Bohrer' einfach 10000 lang und berechne gar nix. Im Gegensatz zu echten Maschinenbau arbeite ich ja mit rückstandsfreien Einwegbohrern. Gruss, Axel ------------------ http://www.tutorial.autolisp.info
http://www.advanced.autolisp.info
http://www.activex.autolisp.info Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
loup Mitglied
Beiträge: 4 Registriert: 19.11.2002
|
erstellt am: 21. Nov. 2002 10:53 <-- editieren / zitieren --> Unities abgeben:
Danke Holger, klappt wie eine Eins. Ich werde erstmal versuchen alle Befehle in meinen Büchern und den Hilfedateien von Autodesk nachzuschlagen. Und gleichzeitig ein paar Varianten entwickeln. Ich halt Dich und alle Anderen auf dem laufenden.
Gibt es auf CAD.de eine Stelle wo man seine Programme anderen zur verfügung stellt ? Au travail maintenant Loup ------------------ loup Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
loup Mitglied
Beiträge: 4 Registriert: 19.11.2002
|
erstellt am: 21. Nov. 2002 15:34 <-- editieren / zitieren --> Unities abgeben:
Halo Axel, an deinen Lösungsweg habe ich auch schon gedacht aber dann ist es wohl auch sinnvoll alle anderen Objekte zu sperren um eine Bohrung durch sämtliche Objekte zu verhindern.
Ich habe eine Datei angehängt-für den Fall das Du sie noch nicht haben solltest- die alle gewünschten -Objekte zu friert -danach fürst du deine Arbeit aus -und nun setzt du alle vorher augewählten Layer auf den Ausganszustand zurück. Vielen dank für deinen Hinweis. Loup
------------------ loup Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |