| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Gruppieren mit AutoLISP (2108 / mal gelesen)
|
DivePete Mitglied
Beiträge: 5 Registriert: 22.02.2017
|
erstellt am: 22. Feb. 2017 11:14 <-- editieren / zitieren --> Unities abgeben:
Hallo liebe Foren-Mitglieder Ich habe mich heute in diesem Forum angemeldet, da ich nicht mehr weiter weiss und auch mit Google bin ich nicht mehr weitergekommen. Wir sind im Lüftungsbau tätig und zeichnen daher immer mal wieder Lüftungskanäle. Um den Zeichnungsaufwand zu verringern, habe ich versucht ein kleines LISP-Programm zu schreiben, welches die Kanäle durch Eingabe von Parametern automatisch erzeugt. Das Programm funktioniert gut. Die Kanäle werden häufig in der Zeichnung verschoben. Bis jetzt muss ich immer alle Linien mühsam markieren und manuell gruppieren. Ich möchte gerne, dass die erzeugten Linien automatisch als Gruppe definiert werden. Leider habe ich nicht herausgefunden, wie das gruppieren mit (Auto)LISP möglich ist. Oder stelle ich mir das zu einfach vor? Es wäre super, wenn mir jemand weiterhelfen könnte. Vielen Dank im Voraus Hier noch der Code zu meinem kleine Programm: (defun c:knl( / p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 breite laenge ) (setq p1 (getpoint "\nEinfuegepunkt waehlen: ")) (setq breite (GETREAL "\nKanalbreite eingeben: ")) (setq laenge (GETREAL "\nKanallaenge eingeben: ")) (setq p2 (polar p1 0 laenge)) (setq p3 (polar p2 (/ pi 2) breite)) (setq p4 (polar p1 (/ pi 2) breite)) (setq p5 (polar p4 (/ pi 2) 25)) (setq p6 (polar p1 (/(* pi 3)2) 25)) (setq p7 (polar p3 (/ pi 2) 25)) (setq p8 (polar p2 (/(* pi 3)2) 25)) (setq p9 (polar p4 0 20)) (setq p10 (polar p1 0 20)) (setq p11 (polar p3 pi 20)) (setq p12 (polar p2 pi 20)) (setvar "CLAYER" "0.3 ------------") (command "linie" p1 p10 p12 p2 "" "linie" p4 p9 p11 p3 "" "linie" p5 p6 "" "linie" p7 p8 "") (setvar "CLAYER" "0.2 ------------") (command "linie" p9 p10 "" "linie" p11 p12 "") ) Liebe Grüsse Beat Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 22. Feb. 2017 11:42 <-- editieren / zitieren --> Unities abgeben: Nur für DivePete
|
Rembetiko Mitglied CAD-Konstrukteur
Beiträge: 101 Registriert: 06.10.2015
|
erstellt am: 22. Feb. 2017 11:52 <-- editieren / zitieren --> Unities abgeben: Nur für DivePete
InsertSMI(' %20'); Erschrocken InsertSMI(' %20'); Wer um Himmelswillen kommt heute noch auf die Idee Lüftungskanäle mittels LISP-Routinen zu konstruieren? Oder warum? Das wurde vielleicht mal 1990 so gemacht, es gibt doch hinreichend Tools oder Applikationen die einem diese Arbeit nun wirklich erleichtern.... ------------------ *So spielt das Leben sagte der Clown und malte sich ein Lächeln ins Gesicht* [Diese Nachricht wurde von Rembetiko am 22. Feb. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 22. Feb. 2017 12:30 <-- editieren / zitieren --> Unities abgeben: Nur für DivePete
Abgesehen davon ob man nicht vielleicht mit dem passenden Programm für diese Aufgabe arbeiten sollte. Dynamische Blöcke sicher zum großen Teil sinnvoll eingesetzt werden könnten. Ein normaler Block mit XY-Skalierung auch eine Kompromisslösung darstellt. So würde ich schon mal eine geschlossene Polylinie + Linie den fünf Einzellinien vorziehen. Ob man dann noch eine Gruppierung der 2 Objekte benötigt? Falls ja: Für die Geometrie ist ja schon kein Lisp notwendig, auch nutzt du zum erstellen normale Autocadbefehle(Linie), genau so kannst du auch den Befehl Gruppe benutzen zum gruppieren. Anhand der geposteten Zeilen denke ich aber nicht das dir die Info ausreicht um es selbst umzusetzen? Aber: Ich würde diese Art der Erstellung überhaupt nicht weiter verfolgen, das ist grausam!
------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DivePete Mitglied
Beiträge: 5 Registriert: 22.02.2017
|
erstellt am: 22. Feb. 2017 13:21 <-- editieren / zitieren --> Unities abgeben:
|
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 22. Feb. 2017 13:35 <-- editieren / zitieren --> Unities abgeben: Nur für DivePete
|
DivePete Mitglied
Beiträge: 5 Registriert: 22.02.2017
|
erstellt am: 22. Feb. 2017 13:36 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Rembetiko: InsertSMI(' %20'); Erschrocken InsertSMI(' %20');Wer um Himmelswillen kommt heute noch auf die Idee Lüftungskanäle mittels LISP-Routinen zu konstruieren? Oder warum? Das wurde vielleicht mal 1990 so gemacht, es gibt doch hinreichend Tools oder Applikationen die einem diese Arbeit nun wirklich erleichtern....
Hallo Rembetiko Ich bin auf die Idee gekommen, das so zu erstellen... Von meiner Arbeit sind vlt. 5-10% von welchen ich in die Konstruktion stecke. Und das automatische Erstellen ist für mich bereits eine Verbesserung und Vereinfachung zur bisherigen Arbeitsweise. Leider kenne ich die Tools und Applikationen nicht. Ich arbeite mit ProgeCAD und wenn es Tools gibt, die mich von den Kosten her nicht in den Ruin treiben , schaue ich mir diese gerne an. Vielen Dank für weitere Hinweise und Tipps Gruss Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Rembetiko Mitglied CAD-Konstrukteur
Beiträge: 101 Registriert: 06.10.2015 AutoCAD Rel. 2.6 bis AutoCAD 2018 C.A.T.S. Applikation AutoCAD Design Suite Ultimate 2017 Dell Precision 3620 Intel i7-7700K 4,2 GHz 32 GB Arbeitsspeicher NVidia Quadro M2000 Windows 10 Pro 64-Bit HP Designjet 2500 PS
|
erstellt am: 22. Feb. 2017 13:36 <-- editieren / zitieren --> Unities abgeben: Nur für DivePete
Bei ProgeCAD muß ich passen, ist mir noch nie über den Weg gelaufen und von daher keinen blassen Schimmer was das kann oder nicht..... Es wäre sicher geschickter Deine Systeminfo entsprechend zu ergänzen oder es bei der Thread-Eröffnung zumindest kund zu tun. Soweit ich sehe gibt es hier auch nicht wirklich ein Forum dazu... ------------------ *So spielt das Leben sagte der Clown und malte sich ein Lächeln ins Gesicht* 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: 22. Feb. 2017 14:25 <-- editieren / zitieren --> Unities abgeben: Nur für DivePete
|
DivePete Mitglied
Beiträge: 5 Registriert: 22.02.2017
|
erstellt am: 22. Feb. 2017 14:26 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von cadffm: Abgesehen davon ob man nicht vielleicht mit dem passenden Programm für diese Aufgabe arbeiten sollte.Dynamische Blöcke sicher zum großen Teil sinnvoll eingesetzt werden könnten. Ein normaler Block mit XY-Skalierung auch eine Kompromisslösung darstellt. So würde ich schon mal eine geschlossene Polylinie + Linie den fünf Einzellinien vorziehen. Ob man dann noch eine Gruppierung der 2 Objekte benötigt? Falls ja: Für die Geometrie ist ja schon kein Lisp notwendig, auch nutzt du zum erstellen normale Autocadbefehle(Linie), genau so kannst du auch den Befehl Gruppe benutzen zum gruppieren. Anhand der geposteten Zeilen denke ich aber nicht das dir die Info ausreicht um es selbst umzusetzen? Aber: Ich würde diese Art der Erstellung überhaupt nicht weiter verfolgen, das ist grausam!
Hallo cadffm So wie der Kanal jetzt gezeichnet ist würde man 1 Polylinie und mindestens 4 weitere Linien benötigen (mit überlagerten Linien). Ich denke 5 Objekte zu einer Gruppe zusammenzufassen macht Sinn, wenn ich diese häufiger verschieben muss. Wie Du richtig erkannt hast, befasse ich mich erst neu mit LISP. Ich bin kein Programmierer und daher ist das Programm auch aus einfachsten Funktionen aufgebaut. Mein kleines LISP-Programm macht jedoch was es soll und es hilft mir meine Arbeit ein wenig zu vereinfachen. Jedoch wäre das Programm noch besser, wenn die erzeugten Linien automatisch gruppiert würden. Dies bringe ich mit meinen LISP-Kenntnissen nicht hin. Deshalb habe ich diesen Thread eröffnet. Wenn ich den CAD-Befehl für gruppieren mit Lisp ausführe, muss ich ja trotzdem die Objekte manuell markieren. So komme ich leider auch nicht weiter Für Antworten die mir weiter helfen bin ich wirklich dankbar... Gruss Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter2 Ehrenmitglied V.I.P. h.c.
Beiträge: 3849 Registriert: 15.10.2003 Win 10 bzw. 11 / 64 Pro AutoCAD MAP 3D 2023 BricsCAD 24
|
erstellt am: 22. Feb. 2017 14:52 <-- editieren / zitieren --> Unities abgeben: Nur für DivePete
Zitat: Original erstellt von DivePete: ...muss ich ja trotzdem die Objekte manuell markieren. ...
Nein. Mache dir vor dem Zeichnen der Elemente einen leeren Auswahlsatz (Befehl: ssadd), füge jedes Element nach der Erstellung mit (entlast) dazu und übergib dann dem Gruppenbefehl die Variable, die den Auswahlsatz speichert. ------------------ Für jedes Problem gibt es eine einfache Lösung. Die ist aber meistens falsch. ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 22. Feb. 2017 15:02 <-- editieren / zitieren --> Unities abgeben: Nur für DivePete
Es bleibt dir überlassen die Objekte per Hand zu wählen, oder das Programm so anzupassen das es selbstständig die Objekte ermittelt und dem Gruppen-Befehl übergibt. Ich denke du wirst durch ProgeCAD und Lisp nicht eingeschränkt an dieser Stelle Code: (progn (setq NewElements (ssadd)) (setq ELEM (entlast)) ; hier merken, welches Objekt aktuell "das Letzte" ist (command "_.CIRCLE" "20,20" "5") (command "_.CIRCLE" "20,20" "6") (if ELEM ; Wenn vorher bereits Objekte vorhanden waren (while (setq elem (entnext ELEM)); in einer Schleife alle neuen Elemente in einen Auswahlsatz packen (ssadd) (ssadd ELEM NewElements) ) (setq NewElements (ssget "_X" (list(cons 410 (getvar "CTAB"))))) ) (command "_copy" NewElements "" "0,0" "20,0") )
------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DivePete Mitglied
Beiträge: 5 Registriert: 22.02.2017
|
erstellt am: 22. Feb. 2017 16:50 <-- editieren / zitieren --> Unities abgeben:
Hallo cadffm Vielen Dank für die Hilfe. Mit Deiner Codevorlage habe ich es genau so hinbekommen, wie ich mir es vorgestellt habe! Mit meinen "Programmierkenntnissen" hätte ich das nie und nimmer geschafft. Vielen, vielen Dank Gruss Beat PS: Kann ich den Thread irgendwie als "erledigt" markieren? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 22. Feb. 2017 16:53 <-- editieren / zitieren --> Unities abgeben: Nur für DivePete
|