| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: 3d-Polylinie in 3d-Fläche konvertieren (2378 / mal gelesen)
|
fralei Mitglied Techniker
Beiträge: 56 Registriert: 24.11.2014
|
erstellt am: 17. Jan. 2022 16:26 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte 3d-Polylinien (Dreiecke) in 3d-Flächen umwandeln. Jetzt bin ich im Internet auf die beiliegende LISP-Routine gestoßen. Leider scheint sie unter Autocad 2020 nicht zu funktionieren. Könnte sie bitte jemand umschreiben bzw. gibt es etwas ähnliches? Soviel ich gefunden habe gibt es auch den Umweg über REGION - NETZGLÄTTE - NETZGLÄTTEENF - URSPRUNG, die LISP-Routine wäre halt weniger umständlich. Danke Franz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Bricscad V11-V23 pro Plateia, Canalis Visual Basic
|
erstellt am: 17. Jan. 2022 17:44 <-- editieren / zitieren --> Unities abgeben: Nur für fralei
Hallo Franz, Du hast doch Civil. Erzeuge aus den 3d-Polylinien ein DGM und extrahiere die Vermaschung (AeccSurfaceExtractObjects), dann erhälst Du automatisch 3D-Flächen. Grüße Klaus PS.: Gerade einmal die Lisp angesehen, die kann gar nicht funktionieren da diese nur LW-Polylines abfrägt und dann den 2D-Punkte die Höhe zuweist. Da müßte man die Lisp erst einmal umschreiben. [Diese Nachricht wurde von KlaK am 17. Jan. 2022 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fralei Mitglied Techniker
Beiträge: 56 Registriert: 24.11.2014
|
erstellt am: 18. Jan. 2022 06:49 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 18. Jan. 2022 07:06 <-- editieren / zitieren --> Unities abgeben: Nur für fralei
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 18. Jan. 2022 07:38 <-- editieren / zitieren --> Unities abgeben: Nur für fralei
|
fralei Mitglied Techniker
Beiträge: 56 Registriert: 24.11.2014
|
erstellt am: 18. Jan. 2022 07:41 <-- editieren / zitieren --> Unities abgeben:
Hallo, jetzt habe ich das gemacht was du gesagt hast ;;;CADALYST 01/06 Tip2084: plines_to_3dfaces.lsp Convert Polylines to 3D Face Objects (c) 2006 Jamie Spartz
;;Written by Jamie Spartz on 5/6/05 ;;Updated on 1/25/06
(defun c:3c (/ *ERROR* clay OSM plines count pl Origin getnormal Normal pl_lay setlay pointlistxy pointcount zvalue pointlist p1 p2 p3 cutlist p4) (setvar "cmdecho" 0) (command "_undo" "_end") (command "_undo" "_group") (setq *ERROR* 3c-end) (setq clay (getvar "clayer")) (setq OSM (getvar "osmode")) (setvar "osmode" 0) (command "_ucs" "_save" "_temp") (if (zerop (getvar "cmdactive")) (princ) (command "_y") ) (princ "\nConvert Polylines into 3DFaces") (setq plines(ssget '((0 . "LWPOLYLINE")))) (setq count 0) (repeat (sslength plines) (setq pl (ssname plines count)) (command "_ucs" "_world") (setq Origin (trans '(0 0 0) 1 pl)) (setq Normal (cdr (assoc 210 (entget pl)))) (command "_ucs" "_za" Origin Normal) (setq pl_lay (massoc 8 (entget pl))) (setq setlay (car pl_lay)) (setvar "clayer" setlay) (setq pointlistxy (massoc 10 (entget pl))) (setq pointcount (massoc 90 (entget pl))) (setq zvalue (massoc 38 (entget pl))) (setq pointlist (mapcar (function (lambda (xy)(append xy zvalue))) pointlistxy)) (cond ((= (car pointcount) 3) (setq p1 (car pointlist)) (setq p2 (cadr pointlist)) (setq p3 (caddr pointlist)) (command "_3dface" p1 p2 p3 "" "") (command "_erase" pl "") (princ "\n3-point 3DFACE was created from polyline") ) ((= (car pointcount) 4) (setq p1 (car pointlist)) (setq p2 (cadr pointlist)) (setq p3 (caddr pointlist)) (setq cutlist (cdr pointlist)) (setq p4 (caddr cutlist)) (command "_3dface" p1 p2 p3 p4 "") (command "_erase" pl "") (princ "\n4-point 3DFACE was created from polyline") ) (T nil) ) (setq count (+ count 1)) ) (command "_ucs" "_restore" "_temp") (if (zerop (getvar "cmdactive")) (princ) (command "") ) (command "_ucs" "_delete" "_temp") (if clay (setvar "clayer" clay)) (if OSM (setvar "osmode" OSM)) (command "_undo" "_end") (setvar "cmdecho" 1) (princ) ) (defun massoc (key alist / x nlist) (foreach x alist (if (eq key (car x)) (setq nlist (cons (cdr x) nlist)) ) ) (reverse nlist) ) ; use like this (massoc 10 YourListOfData) (defun 3c-end (strErr) (command "_ucs" "_restore" "_temp") (if (zerop (getvar "cmdactive")) (princ) (command "") ) (command "_ucs" "_delete" "_temp") (if clay (setvar "clayer" clay)) (if OSM (setvar "osmode" OSM)) (command "_undo" "_end") (setvar "cmdecho" 1) (princ) ) Leider kommt aber immer noch folgende Fehlermeldung raus. Aufrufen von (command) aus *Fehler* nicht möglich, ohne vorheriges Aufrufen von (*push-error-using-command*). Konvertieren von (command)-Aufrufen in (command-s) wird empfohlen.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 18. Jan. 2022 09:07 <-- editieren / zitieren --> Unities abgeben: Nur für fralei
Habs durchgelesen und raff grade auch nicht wo der Fehler ist. Hier mal was schnell runtergetipptes ohne die ganzen commands. (ging schneller) Code: (defun c:3c (/ 3DF_NAME OBJ_NAME P_LIST) (vl-load-com) (defun gather (lst len) ;;; bündelt die angebende Anzahl an Listen-Elementen zu Unterlisten besagter Länge (cond ((null lst) nil) ((> (length lst) len) (cons (n-car len lst) (gather (n-cdr len lst) len)) ) ('sonst (list lst)) ) ) (foreach ent_name (vl-remove-if-not '(lambda (dummy) (= (type dummy) 'ENAME)) (mapcar 'cadr (ssnamex (ssget '((0 . "POLYLINE") (100 . "AcDb3dPolyline"))) ) ) ) (setq obj_name (vlax-ename->vla-object ent_name)) (setq p_list (gather (vlax-safearray->list (vlax-variant-value (vla-get-coordinates obj_name)) ) 3 ) ) (setq 3df_name (vla-Add3DFace (vla-get-modelspace (k_ac-doc)) (VLAX-3D-POINT (nth 0 p_list)) (VLAX-3D-POINT (nth 1 p_list)) (VLAX-3D-POINT (nth 2 p_list)) (VLAX-3D-POINT (last p_list)) ) ) (vla-put-layer 3df_name (vla-get-layer obj_name)) (vla-put-color 3df_name (vla-get-color obj_name)) (vla-delete obj_name) ) )
------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fralei Mitglied Techniker
Beiträge: 56 Registriert: 24.11.2014
|
erstellt am: 18. Jan. 2022 09:44 <-- editieren / zitieren --> Unities abgeben:
|
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 18. Jan. 2022 10:37 <-- editieren / zitieren --> Unities abgeben: Nur für fralei
Oh, da haben noch zwei Funktionen gefehlt. Gather ist keine Funktion von mir, die ist noch vom unerreichbaren Axel Strube-Zettler Einfach noch mit reinkopieren Code: (defun n-car (n lst / res) ;;; liefert die n Elemente vom Anfang einer Liste wieder als Liste zurück (repeat (min n (length lst)) (setq res (cons (car lst) res) lst (cdr lst) ) ) (reverse res) )(defun n-cdr (n lst) ;;; liefert den Rest einer Liste nach den ersten n Elementen wieder als Liste zurück (repeat n (setq lst (cdr lst)) ) )
------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fralei Mitglied Techniker
Beiträge: 56 Registriert: 24.11.2014
|
erstellt am: 18. Jan. 2022 12:11 <-- editieren / zitieren --> Unities abgeben:
Hallo, leider bekomme ich immer noch folgende Fehlermeldung Objekte wählen: 1 gefunden Objekte wählen: ; Fehler: no function definition: K_AC-DOC Kann es sein dass ich den Code falsch zusammenkopiert habe? (defun c:3c (/ 3DF_NAME OBJ_NAME P_LIST) (vl-load-com) (defun gather (lst len) ;;; bündelt die angebende Anzahl an Listen-Elementen zu Unterlisten besagter Länge (cond ((null lst) nil) ((> (length lst) len) (cons (n-car len lst) (gather (n-cdr len lst) len)) ) ('sonst (list lst)) ) ) (foreach ent_name (vl-remove-if-not '(lambda (dummy) (= (type dummy) 'ENAME)) (mapcar 'cadr (ssnamex (ssget '((0 . "POLYLINE") (100 . "AcDb3dPolyline"))) ) ) ) (setq obj_name (vlax-ename->vla-object ent_name)) (setq p_list (gather (vlax-safearray->list (vlax-variant-value (vla-get-coordinates obj_name)) ) 3 ) ) (setq 3df_name (vla-Add3DFace (vla-get-modelspace (k_ac-doc)) (VLAX-3D-POINT (nth 0 p_list)) (VLAX-3D-POINT (nth 1 p_list)) (VLAX-3D-POINT (nth 2 p_list)) (VLAX-3D-POINT (last p_list)) ) ) (vla-put-layer 3df_name (vla-get-layer obj_name)) (vla-put-color 3df_name (vla-get-color obj_name)) (vla-delete obj_name) ) ) (defun n-car (n lst / res) ;;; liefert die n Elemente vom Anfang einer Liste wieder als Liste zurück (repeat (min n (length lst)) (setq res (cons (car lst) res) lst (cdr lst) ) ) (reverse res) ) (defun n-cdr (n lst) ;;; liefert den Rest einer Liste nach den ersten n Elementen wieder als Liste zurück (repeat n (setq lst (cdr lst)) ) )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 18. Jan. 2022 13:58 <-- editieren / zitieren --> Unities abgeben: Nur für fralei
|
fralei Mitglied Techniker
Beiträge: 56 Registriert: 24.11.2014
|
erstellt am: 18. Jan. 2022 14:11 <-- editieren / zitieren --> Unities abgeben:
Perfekt, super Arbeit, vielen Dank Andreas das möchte ich auch gerne mal können Ich stelle nochmal den ganzen Code rein falls ihn jemand brauchen sollte, kann ja sein... (defun c:3c (/ 3DF_NAME OBJ_NAME P_LIST) (vl-load-com) (defun gather (lst len) ;;; bündelt die angebende Anzahl an Listen-Elementen zu Unterlisten besagter Länge (cond ((null lst) nil) ((> (length lst) len) (cons (n-car len lst) (gather (n-cdr len lst) len)) ) ('sonst (list lst)) ) ) (foreach ent_name (vl-remove-if-not '(lambda (dummy) (= (type dummy) 'ENAME)) (mapcar 'cadr (ssnamex (ssget '((0 . "POLYLINE") (100 . "AcDb3dPolyline"))) ) ) ) (setq obj_name (vlax-ename->vla-object ent_name)) (setq p_list (gather (vlax-safearray->list (vlax-variant-value (vla-get-coordinates obj_name)) ) 3 ) ) (setq 3df_name (vla-Add3DFace (vla-get-modelspace (k_ac-doc)) (VLAX-3D-POINT (nth 0 p_list)) (VLAX-3D-POINT (nth 1 p_list)) (VLAX-3D-POINT (nth 2 p_list)) (VLAX-3D-POINT (last p_list)) ) ) (vla-put-layer 3df_name (vla-get-layer obj_name)) (vla-put-color 3df_name (vla-get-color obj_name)) (vla-delete obj_name) ) ) (defun n-car (n lst / res) ;;; liefert die n Elemente vom Anfang einer Liste wieder als Liste zurück (repeat (min n (length lst)) (setq res (cons (car lst) res) lst (cdr lst) ) ) (reverse res) ) (defun n-cdr (n lst) ;;; liefert den Rest einer Liste nach den ersten n Elementen wieder als Liste zurück (repeat n (setq lst (cdr lst)) ) ) (defun k_ac-doc () (vla-get-activedocument (vlax-get-acad-object)) ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |