Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  Erzeugen von 3D-Flächen mittels AutoLISP

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:  Erzeugen von 3D-Flächen mittels AutoLISP (845 mal gelesen)
Big M
Mitglied



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

Beiträge: 32
Registriert: 19.03.2003

Pentium D 3.4GHz 2GB RAM
Windows NT 5.1 Workstation
Unigraphics NX 5.0.3.2
Mechanical Desktop 6
Inventor 6
21-Zoll-Monitor, Tastatur, Maus, Teetasse, etc.<P>Motto: Lies das verdammte Handbuch!

erstellt am: 19. Mrz. 2003 15:31    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


Vorher.jpg


Nachher_Fragment.jpg


Ansichten.zip

 
Liebe CAD.DE-Gemeinde

für die Erstellung von 3D-Flächen in MD5 mittels Befehl AMLOFTUV suche ich ein kurzes, möglichst kommentiertes (ich hoffe noch zu lernen!) AutoLISP-Skript. Leider übersteigt das Problem meine syntaktischen Programmierfähigkeiten in AutoLISP ein wenig. Also zu den Details:
In eine Teiledatei werden über ein Script (*.scr) mittels Befehl IGESIN ca. 100 Polylinien eingelesen (siehe Anhang). Diese PLs haben eventuell eine unterschiedliche Anzahl von Kontrollpunkten. Zur Benutzung des Befehls AMLOFTUV werden nun noch die V-Drähte (oder waren es die U-Drähte?  ) benötigt. Diese sollen mittels Befehl 3DPOLY in einem AutoLISP-Script aus den jeweils n-ten Kontrollpunkten der vorhandenen Polylinie erstellt werden (Erste neue 3D-Polylinie vom 1.KP der 1.Polylinie über den 1.KP der zweiten Polylinie usw. bis zum 1.KP der letzten Polylinie; Zweite neue 3D-Polylinie dann vom 2.KP der ersten Polylinie über den 2.Kp der zweiten Polylinie ... u.s.w.).

Vielleicht findet sich jemand, der mir mit einem leichtverständlichen Programm helfen kann.

------------------
Hiermit erkläre ich meinen Ausstieg aus der aktuelle deutschen Rechtschreibung.

Ich hasse UG!

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

scj
Mitglied
 


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

Beiträge: 554
Registriert: 09.08.2001

erstellt am: 19. Mrz. 2003 16:40    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 Big M 10 Unities + Antwort hilfreich

Die jeweiligen Punktkoordinaten auf den 3d-Polylinien kann man durch den Befehl "TEILEN" bekommen. Die Koordinaten müßten in eine Liste übernommen werden und dann nur entsprechend (doppelt indiziert) ausgelesen werden.
Soll das Ergebnis nur eine Koordinatenliste für AMLOFTUV (habe nur wenig Ahnung von MDTMechanical Desktop) werden, willst Du ein PMESH (3D-Netz) in AutoCAD oder interessiert Dich ein SOLID (Volumen) in AutoCAD??
Schreib mir mal; ich könnte Dir - zumindestens in AutoCAD und LISP - helfen.
Beste Grüße
Jochen www.black-cad.de

 

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

Big M
Mitglied



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

Beiträge: 32
Registriert: 19.03.2003

Pentium D 3.4GHz 2GB RAM
Windows NT 5.1 Workstation
Unigraphics NX 5.0.3.2
Mechanical Desktop 6
Inventor 6
21-Zoll-Monitor, Tastatur, Maus, Teetasse, etc.<P>Motto: Lies das verdammte Handbuch!

erstellt am: 20. Mrz. 2003 08:10    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


Vorher.zip


Nachher.zip

 
@scj
Nee,nee,nee.
Die Lösung des Problems ist weder vom MD5 noch vom Befehl AMLOFTUV abhängig. Mit Ahnung in AutoLISP steht man schon mal auf der richtigen Seite:
Die existierenden 3D-Polylinien (bestehen nur aus Linien) sind im 3D-Raum auf fast parallelen Ebenen angeordnet, haben also Kontrollpunkte mit Koordinaten für x,y und z (siehe Vorher2000.DWG oder VorherR14.DWG in Vorher.ZIP). Was ich benötige ist ein Script oder eine LISP-Routine zur Erzeugung von 3D-Polylinien quer über alle existierenden 3D-Polylinien genau in den Kontrollpunkten (teilweise angedeutet in Nachher2000.DWG bzw. NachherR14.DWG (Nachher.ZIP)). Die Auswahl der jeweils 1.Kontrollpunkte, dann im nächsten Durchlauf der jeweils 2.Kontrollpunkte, bis zur Auswahl der letzten Kontrollpunkte sind für mich (noch?) nicht zu programmieren.

------------------
Hiermit erkläre ich meinen Ausstieg aus der aktuelle deutschen Rechtschreibung.

Ich hasse UG!

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 20. Mrz. 2003 13: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 Nur für Big M 10 Unities + Antwort hilfreich

Eigentlich kein Problem, wenn noch zwei Dinge klar sind:

a)Kann man sich darauf verlassen, dass die PLs sich in Richtung einwandfrei sortieren kann (im Beispiel Z-Achse)?

b)Was soll mit unterschiedlicher Anzahl von Stützpunkten passieren?
Das wirft nämlich einige Fragen auf: Was ist, wenn der Y-Input an zwei Stützpunkten hintereinander gleich war - sind dann zwei Segmente vorhanden oder nur eines, das doppelt lang ist? Das würde zu Verschiebungen führen.

Alternative wäre möglich, die PLs rechnerisch in n gleiche Segmente zu zerteilen. Dann bleiben wenigstens keine Stützpunkte übrig...

------------------
Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze
Meine Überzeugung...

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 20. Mrz. 2003 14:55    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 Big M 10 Unities + Antwort hilfreich

Hier mal eine Rohfassung, wie man sowas machen kann:
-----------------Anfang Datei----------------------
(defun ss2list(ss / i tl)
  (setq i -1)
  (if ss
    (repeat(sslength ss)
      (setq tl(cons(ssname ss(setq i(1+ i)))tl))
    )
  )
  (reverse tl)
)

(defun flip(l / )
  (if(car l)
    (append
      (list(mapcar'car l))
      (flip(mapcar'cdr l))
    )
  )
)

(defun extract(ent / pts)
  (while(="VERTEX"(cdr(assoc 0(entget(setq ent(entnext ent))))))
    (setq pts(cons(cdr(assoc 10(entget ent)))pts))
  )
  pts
)

(defun sort(pls / )
  (vl-sort pls
  '(lambda(e f)
      (apply'>
        (mapcar
        '(lambda(g / )
            ; nach GC 10 des 1. Vertex sortieren
            (caddr(cdr(assoc 10(entget(entnext g)))))
          )
          (list e f)
        )
      )
    )
  )
)

(defun c:ingrid( / )
  (foreach pl(flip(mapcar'extract(sort(ss2list(ssget)))))
    (command"_3dpoly")
    (mapcar'command pl)
    (command)
  )
)
-------------------Ende Datei----------------------
Laden und 'ingrid' eingeben. Ofang vorher ausschalten!

------------------
Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze
Meine Überzeugung...

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

Big M
Mitglied



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

Beiträge: 32
Registriert: 19.03.2003

erstellt am: 21. Mrz. 2003 12:28    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

@mapcar:
Vorab vielen Dank für die schnelle und umfassende Antwort.
Zu Frage a): Die Polylinien werden durch 'Meßmaschine' (sowas gibt es wirklich) in wählbaren Abständen Bahn für Bahn von Muster abgenommen und von mir dann mittels Skript und Befehl IGESIN in die Zeichnung eingeladen.
Zu Frage b): Die PL fangen alle ungefähr auf einer 3D-Ebene an, laufen als Kontur mit halbwegs gleichen Abständen zwischen den Kontrollpunkte um das Muster, enden dann nicht genau definiert. Wenn man wie von mir vorgeschlagen am Anfang der PL mit dem Erzeugen der Quer-PL anfängt, dann würde eine Erzeugen bis zum "Ausgehen der KP" an einer beliebigen PL (natürlich der mit den wenigsten KP) schon fast die gesamte Oberfläche des Musters durch die dann zu erzeugende Fläche dargestellt.
Den von Dir vorgeschlagene Lösungsansatz, die PL mit der gleichen Anzahl von KP zu versehen, habe ich an einem sonnigen Herbsttag schon mal im Liegestuhl rein programmiertheoretisch sowie mathematisch korrekt zu Papier gebracht. Leider reicht meine AutoLISP-Routine (nettes Wortspiel) nicht zur schnellen Umsetzung der Idee, das heißt, ich verliere schnell die Lust am Programmieren.

Komme wahrscheinlich heute nicht mehr zum Ausprobieren der LISP-Routine. Melde mich dann nochmal.


PS: Wer ist eigentlich Ingrid? 

------------------
Hiermit erkläre ich meinen Ausstieg aus der aktuelle deutschen Rechtschreibung.

Ich hasse UG!

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 21. Mrz. 2003 14:01    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 Big M 10 Unities + Antwort hilfreich

Big M
Mitglied



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

Beiträge: 32
Registriert: 19.03.2003

erstellt am: 02. Apr. 2003 16:10    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


Bilder2.zip

 
@mapcar:
Besser spät, als gar nicht: Nochmals Danke für die LISP-Routine. Sie funktioniert 'anfangs' noch ganz gut (siehe Anhang). Doch irgendwas geht dann schief!
Obwohl ich gerne Gast auf Deinen Web-Sites (mein Favorit: www.flaschenboden.de*) bin, muß ich gestehen, daß meine LISP-Fähigkeiten sich bis heute nur beim asymmetrischen Skalieren von Höhenpunkten oder im Austausch von Punktsymbolen auf Karten austoben durften. Zu einem tieferen Verständnis fehlte mir bisher die Zeit, da ich auch vorliegendes grafisches Problem nur nebenBeruflich in Frühstücks- oder Mittagspause bearbeite.
Vielleicht könntest Du Dir das Problem ja noch einmal zur Brust nehmen. Könnte der Grund quantitativer Natur sein? Die Erzeugung der Quer-Pl fängt auf der falschen Seite an, die Linien sind von der anderen Seite erzeugt worden (halbwegs gleicher Z-Wert!). Im Anhang die Originaldaten als "Rohdaten.dwg", in den Dateien "1 INGRID..." bis "4 INGRID..." die jeweiligen Ablaufschritte und das Ergebnis in Datei "Quer-PL erzeugt.dwg". Viel Spaß an Dich oder wer immer sich daran versucht.

* Hiermit distanziere ich mich aus juristischen Gründen ausdrücklich von den Inhalten aller angegebenen Links, Rechts  sowie der Mitte sowieso!!! Siehe im WWW unter den Stichworten Hamburg, Amtsgericht oder Urteil

------------------
Hiermit erkläre ich meinen Ausstieg aus der aktuelle deutschen Rechtschreibung.

Ich hasse UG!

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

Big M
Mitglied



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

Beiträge: 32
Registriert: 19.03.2003

Pentium D 3.4GHz 2GB RAM
Windows NT 5.1 Workstation
Unigraphics NX 5.0.3.2
Mechanical Desktop 6
Inventor 6
21-Zoll-Monitor, Tastatur, Maus, Teetasse, etc.<P>Motto: Lies das verdammte Handbuch!

erstellt am: 02. Apr. 2003 16:22    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


Bilder1.zip


Daten.zip

 
@mapcar:
Die zwei Anhänge noch hinterher! Irgendwas läuft hier schief.

What You See, Is What You Never Get! 

------------------
Hiermit erkläre ich meinen Ausstieg aus der aktuelle deutschen Rechtschreibung.

Ich hasse UG!

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 03. Apr. 2003 15: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 Big M 10 Unities + Antwort hilfreich

Die Probleme enstehen lediglich daraus, dass du die Polylinien jetzt anders im Raum liegen hast. Bei deiner Probezeichnung lagen die Polylinien in der XY-Ebene, daher sortiert das Programm in Z-Richtung. In deiner Rohdaten-Zeichnung liegen sie aber in der YZ-Ebene, und daher muss in X-Richtung sortiert werden. Die Sortierrichtung lässt sich aber in der Sort-Funktion einstellen:

(defun sort(pls / )
  (vl-sort pls
  '(lambda(e f)
      ;(apply'<  ;nach -X, -Y, -Z sortieren
      (apply'>    ;nach +X, +Y, +Z sortieren
        (mapcar
        '(lambda(g / )
            ; nach GC 10 des 1. Vertex sortieren
            ; car= X-Sortierung, cadr=Y, caddr=Z
            (car(cdr(assoc 10(entget(entnext g)))))
            ;(cadr(cdr(assoc 10(entget(entnext g)))))
            ;(caddr(cdr(assoc 10(entget(entnext g)))))
          )
          (list e f)
        )
      )
    )
  )
)

Wenn du das einstellst, läuft das Programm soweit es kann. Es bleibt aber das Problem bestehen, dass die U-PLs eine unterschiedliche Anzahl von Stützpunkten haben. Du kannst dir zum Zählen
noch diese Funktion in die Datei kopieren:

(defun pl-length(pl / )
  (length(extract pl))
)

Wenn du (pl-length(car(entsel))) eingibst, kannst du die Anzahl der vertices einer PL ermitteln.

In der Rohdaten-Datei schwankt diese Zahl zwischen 42 und 74. Da kann man natürlich nicht mehr 1:1 verbinden. Es gibt aber mehrere Modelle, wie man vorgehen könnte.

1) Die Datengewinnung so abändern, dass eine konstante Anzahl Punkte vorliegt

2) Interpolation - d.h. die Polylinien so abändern, dass die Anzahl der Vertices abgeändert wird. Das wäre allerdings mit einem Verlust an Genauig behaftet, der um so grösser wird, je stärker die Schwankungen innerhalb der Daten sind.

3) Ein weiteres Modell wäre, immer in der Mitte einer U-Polylinie anzufangen und sich in beiden Richtungen nach aussen vorzuarbeiten. Das hiesse aber, dass die zu erzeugenden V-Pls im Randbereich ggf. unterbrochen werden

4) Der letzte Vorschlag wäre, alle U-PLs (ausser der längsten) aussen so zu verlängern, dass Gleichheit da ist. Diese Verlängerung wäre in der XY-Ebene vorzunehmen. Der Effekt wäre eine 'Tiefziehfolie', die in der Draufsicht rechteckig ist.

Ich frage mich übrigens, was du überhaupt mit den 3D-Polylinien willst. Eigentlich schreit das Ganze geradezu nach einer Konvertierung von Rasterdaten aus ein Textdatei in ein PMESH - das
kann man wenigstens rendern usw. Mit den 3D-PLs bleibt's aber alles Wireframe.

Ich kann dich weiterhin gerne beraten und dir mal helfen, wenn du dich selbst daran versuchen willst. Ich kann das Programm aber auch für dich schreiben - allerdings nicht ohne Gegenleistung, da das nicht mal schnell in der Mittagspause zwischen zwei Zigaretten erledigt ist. Gegen eine Spendenquittung von 100 Euro (für die Kriegsopfer im Irak) schreibe ich es und setze es dann komplett hier rein - es wird dadurch aber nicht zum Eigentum deines Auftraggebers. Es ist dann Public Domain, und jeder andere kann es hier auch herunterladen.

Gruss, Axel

------------------
Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze
Meine Überzeugung...

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

Big M
Mitglied



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

Beiträge: 32
Registriert: 19.03.2003

erstellt am: 03. Apr. 2003 16:20    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

@mapcar:
Noch schnell vor'm Feierabend: Danke schön!
Sieht theoretisch schon mal sehr gut aus. Ausführlicheres in einigen Stunden, eventuell auch Tagen. Schönen Abend bzw. erholsames WE.

------------------
Hiermit erkläre ich meinen Ausstieg aus der aktuelle deutschen Rechtschreibung.

Ich hasse UG!

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