Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Blöcke verbinden

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:  Blöcke verbinden (2931 mal gelesen)
O2CAD
Mitglied


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

Beiträge: 4
Registriert: 12.07.2010

Autocad wechselnde Versionen von 2004 - 2010

erstellt am: 11. Apr. 2011 14:09    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,

versuche gerade mein erstes, richtiges, eigenes Autolisp-Programm zu schreiben und hab da mal einige Fragen dazu.

1. Ausgangssituation

Habe eine DXF-Datei mit hunderten von Blöcken, wobei jeder Block jeweils einen Messpunkt darstellt. Diese haben alle 1 Attribut, das die Punktnummer angibt. Diese ist immer folgendermaßen aufgebaut:
zuerst eine Ziffer von 1-9, dann 2 Großbuchstaben, dann eine 3 bis 5-stellige Zahl, dann ein Trennzeichen (im Original ein / , aber das könnte sehr leicht durch irgendein anderes Zeichen geändert werden etwa _ oder - etc.) und zum Schluß der Zähler d.h. eine Zahl mit 1-3 Stellen.
Beispiel: 1BG2036/1  1BG2036/2 1BG2036/3 ... 1BG2036/44
          3SN3011/1  3SN3011/2 ...
          usw.
(Kurze Erläuterung: Die erste Zahl gibt das Höhenniveau an, die beiden Buchstaben sind das Kürzel für die eingemessene Objektgruppe, die nächste Zahl gibt die Nummer des Objektes an und die Zahl nach dem / nummeriert einfach die einzelnen Messpunkte durch, mit denen das Objekt eingemessen wurde.)

2. Ziel

Das Lisp-Programm soll jetzt (im ersten Schritt) alle Blöcke, die vor dem / das gleiche stehen haben mit einer Polylinie verbinden und zwar in der Reihenfolge wie sie durch die Zahl nach dem / angegeben wird. Wenn die höchste Zahl erreicht ist soll die Polylinie geschlossen werden. Das Ganze soll natürlich mit allen Blöcken automatisch durchlaufen werden.

Also: Eine Polylinie beginnend bei 1BG2036/1 durch 1BG2036/2 durch 1BG2036/3 ... bis zu 1BG2036/44 , dann schließen und das gleiche mit 3SN3011/1 ...usw.
Als Scheitelpunkte sollen die Einfügepunkte der Blöcke genommen werden.

)In einem nächsten Schritt sollen dann für jedes Höhenniveau (1-9) und jede Objektgruppe (etwa BG, SN, FG, etc.) ein eigenes Layer erstellt werden auf das die zugehörige Polylinie gezeichnet werden soll.)

3. So jetzt endlich zu meinen Fragen

Ich arbeite mich gerade mithilfe des Autolisp-Tutorials von Mapcar (bin gerade bei Lektion 7) in Autolisp ein.
Ist diese Tutorial noch aktuel bzw. gibt´s andere Empfehlungen?
Wie lange würde denn ein erfahrener Lisp-Programmierer schätzen, daß ich brauchen werde bis ich diese Sprache so weit beherrsche um oben genannte Aufgabe zu programmieren?
Ist das überhaupt ein realistischer Plan oder ist das eine Programmiereraufgabe für Experten und mein Plan das selbst zu schreiben für einen Anfänger völlig utopisch?
Tipps zur Umsetzung? (bitte nicht einfach Lispcodes schicken (ich hab mittlerweile gesehen, daß es hier Leute im Forum gibt für die ein solches Programm vermutlich kein Problem wäre), ich möchte das Ganze gerne verstehen, nachvollziehen können und falls möglich gerne selbst schreiben.)

Besten Dank im voraus...

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 11. Apr. 2011 14:32    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 O2CAD 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von O2CAD:
Ich arbeite mich gerade mithilfe des Autolisp-Tutorials von Mapcar (bin gerade bei Lektion 7) in Autolisp ein.
Ist diese Tutorial noch aktuel bzw. gibt´s andere Empfehlungen?

ja ist aktuell - andere Empfehlung - Hilfe der vlide... und www

Zitat:
Original erstellt von O2CAD:
Wie lange würde denn ein erfahrener Lisp-Programmierer schätzen, daß ich brauchen werde bis ich diese Sprache so weit beherrsche um oben genannte Aufgabe zu programmieren?

Kommt ganz auf den Vorkenntnisse und auf dein Auffassungsvermögen und die reine Zeite für's Erlernen an ;)


Zitat:
Original erstellt von O2CAD:
Ist das überhaupt ein realistischer Plan oder ist das eine Programmiereraufgabe für Experten und mein Plan das selbst zu schreiben für einen Anfänger völlig utopisch?

Nunja - man muss Ziele haben - utopisch ist relativ...


Tipp:
Bringe den Code den du hast und stelle gezielt fragen, zerlege die Aufgabe in kleine Teile und baue dir nach und nach alles auf.
Verstehe erstmal das Grundprinzip so leidlich. Und wenn du es schnell brauchst (dieses Jahr noch), dann geh zum Experten.

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 11. Apr. 2011 15:14    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 O2CAD 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von O2CAD:
... Wie lange würde denn ein erfahrener Lisp-Programmierer schätzen, daß ich brauchen werde bis ich diese Sprache so weit beherrsche um oben genannte Aufgabe zu programmieren?


es führen viele Wege nach Rom. Willst du quick und dirty Rom erreichen, dann schätze ich den Zeitaufwand zum alleinigen erlernen mal auf 3-4 Wochen (reine Lernzeit). Danach wirst du allerdings noch viele Fragen offen haben.
Was du für diese Aufgabe benötigst ist für einen Anfänger nicht ganz trivial.
Du musst dich durch das DXF-Objektmodell durchhecheln. Auswahlsätze bilden und filtern können. String-Handling-Funktionen, und dann noch das Erzeugen von neuen Elementen, entweder via Command-Programmierung oder via (entXXX-Funktionen. Letzteres ist eleganter, schneller und sicherer. Hinzu kommen noch die Listenfunktionen und Sortier-Geschichten.
Unter Anleitung, also jemanden an der Seite, der dir den entsprechenden Programmaufbau vorgibt und dich durch die dafür notwendigen Funktionen durchschickt, sollten eigentlich 3-5 Tage genügen.
Zitat:
Original erstellt von O2CAD:
... Ist das überhaupt ein realistischer Plan oder ist das eine Programmiereraufgabe für Experten und mein Plan das selbst zu schreiben für einen Anfänger völlig utopisch?


Utopisch sicher nicht, allerdings auch nicht ohne Anspruch.
Zitat:
Original erstellt von O2CAD:
... Tipps zur Umsetzung? (bitte nicht einfach Lispcodes schicken (ich hab mittlerweile gesehen, daß es hier Leute im Forum gibt für die ein solches Programm vermutlich kein Problem wäre), ich möchte das Ganze gerne verstehen, nachvollziehen können und falls möglich gerne selbst schreiben.)


Ablauf könnte folgender sein:
1. (ssget ...) Auswahlsatz über die Blöcke bilden
2. gefundene Blocknamen aufsplitten (Text und Zahlen) und das Ergebnis in Zahlen wandeln und sortieren. Dabei darf der Bezug zum Original-Blocknamen jedoch nicht verloren gehen (cons ..)
3. Aus den Blöcken die Koordinaten auslesen, so dass die resultierende Koordinaten liste gleich in der richtigen Reihenfolge ist
4. Polylinie zeichen (command ..) wäre das Einfachste
[/B][/QUOTE]

Fang am besten an und bei Fragen, gibts ja das Forum

Grüße Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!

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: 11. Apr. 2011 16:25    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 O2CAD 10 Unities + Antwort hilfreich

Das hat mir mal sehr geholfen,

Klick

vielleicht kannst du damit was anfangen beim Listen bearbeiten.

------------------
Geht nicht, gibts nicht

Gruß
Andreas
http://kraus-cad.de

[Diese Nachricht wurde von Andreas Kraus am 11. Apr. 2011 editiert.]

[Diese Nachricht wurde von Andreas Kraus am 11. Apr. 2011 editiert.]

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

O2CAD
Mitglied


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

Beiträge: 4
Registriert: 12.07.2010

Autocad wechselnde Versionen von 2004 - 2010

erstellt am: 11. Apr. 2011 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

Danke erstmal für die Antworten.
Bevor ich anfangen wollte einen Code zu schreiben wollte ich mir erstmal soetwas wie einen Programmablaufplan erstellen und mir überlegen welche "Programmierwerkzeuge" ich brauche und wie das Ganze ablaufen soll. Das sieht bisher in etwa so aus:
Da ich bisher diese Aufgabe über Skripte erledigt habe (was mir aber zu umständlich auf Dauer erscheint) war meine Idee, mit einer Lisp-Funktion automatisch ein solches Skript zu erstellen und ablaufen zu lassen.
Also:
Alle Blöcke einlesen, Sortieren, dann an den Anfang der Liste den Befehl zum Polylinien zeichnen stellen und dann jeweile vor jedes Element der Liste das eine 1 hinter dem / hat den Befehl zum Polylinie schließen stellen. Ich wollte also etwa so etwas erzeugen:

_pline
1XX1111/1
1xx1111/2
1xx1111/3
schließen
4yy2222/1
4yy2222/2
4yy2222/3
schließen
2ss3333/1
usw.
Macht das Sinn, bzw. kann das funktionieren?

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

CADwiesel
Moderator
CAD4FM UG




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

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 11. Apr. 2011 17:56    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 O2CAD 10 Unities + Antwort hilfreich

Also die Idee per Lisp ein script zu erstellen halte ich nicht für Sinnfoll, da du schon per lisp die Aufgabe lösen kannst.
Halt dich doch an den Vorschlag von defun.
Außerdem: warum soll die Polylinie denn geschlossen werden? Wenn alle Punkte auf einer Geraden liegen, macht eine geschlossene PL ja keinen Sinn.
Die Schwierigkeit steckt in dem Detail:
Zitat:
Alle Blöcke einlesen, Sortieren,

Wenn du das erstmal hast, Alle Blöcke sortiert, dann ist das malen der PL ja nur noch eine Kleinigkeit.

------------------
Gruß
CADwiesel
Besucht uns im CHAT

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

O2CAD
Mitglied


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

Beiträge: 4
Registriert: 12.07.2010

Autocad wechselnde Versionen von 2004 - 2010

erstellt am: 11. Apr. 2011 18: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

Vielleicht ein Missverständnis, aber die Punkte (bzw. Blöcke) liegen nie auf einer Gerade sondern bilden die Eckpunkte von völlig unregelmäßigen Polygonen, die als geschlossene Polylinien dargestellt werden.
Aber stimmt schon: Das eigentliche Zeichnen der Polylinie (Und dann schließen) ist wohl das kleinste Problem.
Muss die Blöcke erstmal einlesen und richtig sortieren...
Werd mich jetzt erstmal darauf konzentrieren und mal sehen wie weit ich komme.

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