| | | 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: Blöcke verbinden (2982 mal gelesen)
|
O2CAD Mitglied
Beiträge: 4 Registriert: 12.07.2010 Autocad wechselnde Versionen von 2004 - 2010
|
erstellt am: 11. Apr. 2011 14:09 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 11. Apr. 2011 14:32 <-- editieren / zitieren --> Unities abgeben: Nur für O2CAD
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
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 11. Apr. 2011 15:14 <-- editieren / zitieren --> Unities abgeben: Nur für O2CAD
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
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 11. Apr. 2011 16:25 <-- editieren / zitieren --> Unities abgeben: Nur für O2CAD
|
O2CAD Mitglied
Beiträge: 4 Registriert: 12.07.2010 Autocad wechselnde Versionen von 2004 - 2010
|
erstellt am: 11. Apr. 2011 16:40 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 11. Apr. 2011 17:56 <-- editieren / zitieren --> Unities abgeben: Nur für O2CAD
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
Beiträge: 4 Registriert: 12.07.2010 Autocad wechselnde Versionen von 2004 - 2010
|
erstellt am: 11. Apr. 2011 18:37 <-- editieren / zitieren --> Unities abgeben:
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 >>)
|