Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  3d-Polylinie in 3d-Fläche konvertieren

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  3d-Polylinie in 3d-Fläche konvertieren (1887 mal gelesen)
fralei
Mitglied
Techniker


Sehen Sie sich das Profil von fralei an!   Senden Sie eine Private Message an fralei  Schreiben Sie einen Gästebucheintrag für fralei

Beiträge: 51
Registriert: 24.11.2014

erstellt am: 17. Jan. 2022 16:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


plines_to_3dfaces.lsp

 
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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Bricscad V11-V21 pro
Plateia, Canalis
Visual Basic

erstellt am: 17. Jan. 2022 17:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für fralei 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von fralei an!   Senden Sie eine Private Message an fralei  Schreiben Sie einen Gästebucheintrag für fralei

Beiträge: 51
Registriert: 24.11.2014

erstellt am: 18. Jan. 2022 06:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Klaus,
vielen Dank für deine Antwort. Das mit Civil war leider bei letzten Arbeitsstelle, momentan nur noch Autocad und Solidworks.
Danke trotzdem

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für fralei 10 Unities + Antwort hilfreich

zur Lisp .... ungetestet ... da sind sehr viele commands drin, die den englischen Befehlsaufruf nutzen ... z.B. (command "undo" "end")  ... falls du ein "deutsches" ACAD hast, ändere mal dies in den "internationalen"  Aufruf mit Unterstrich davor ... --> (command "_undo" "_end")

------------------
Also ich finde Unities gut ... und andere sicher auch
---------------------------------------
  - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 18. Jan. 2022 07:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für fralei 10 Unities + Antwort hilfreich

OT
Zitat:
Original erstellt von fralei:
Das mit Civil war leider bei letzten Arbeitsstelle,

Dann passe doch bitte deine System-Info in deinem CAD.de Profil an, thx.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

fralei
Mitglied
Techniker


Sehen Sie sich das Profil von fralei an!   Senden Sie eine Private Message an fralei  Schreiben Sie einen Gästebucheintrag für fralei

Beiträge: 51
Registriert: 24.11.2014

erstellt am: 18. Jan. 2022 07:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

Win 10
ACAD 2022

erstellt am: 18. Jan. 2022 09:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für fralei 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von fralei an!   Senden Sie eine Private Message an fralei  Schreiben Sie einen Gästebucheintrag für fralei

Beiträge: 51
Registriert: 24.11.2014

erstellt am: 18. Jan. 2022 09:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank für deine Bemühung Andreas,
leider bekomme ich folgende Fehlermeldung

Objekte wählen:
; Fehler: no function definition: N-CAR
Befehl:

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

Win 10
ACAD 2022

erstellt am: 18. Jan. 2022 10:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für fralei 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von fralei an!   Senden Sie eine Private Message an fralei  Schreiben Sie einen Gästebucheintrag für fralei

Beiträge: 51
Registriert: 24.11.2014

erstellt am: 18. Jan. 2022 12:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

Win 10
ACAD 2022

erstellt am: 18. Jan. 2022 13:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für fralei 10 Unities + Antwort hilfreich

Ich bin aber auch ein Schussel heute.

Code:
(defun k_ac-doc ()
  (vla-get-activedocument (vlax-get-acad-object))
)

------------------
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


Sehen Sie sich das Profil von fralei an!   Senden Sie eine Private Message an fralei  Schreiben Sie einen Gästebucheintrag für fralei

Beiträge: 51
Registriert: 24.11.2014

erstellt am: 18. Jan. 2022 14:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz