| |
| 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: Variable in Koordinaten (2626 mal gelesen)
|
dwg3d Mitglied Techniker- Holztechnik
Beiträge: 63 Registriert: 05.04.2013 Windows 8.1 Professional 64 Bit AutoCAD 2020
|
erstellt am: 03. Jan. 2014 08:48 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 03. Jan. 2014 08:53 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
|
dwg3d Mitglied Techniker- Holztechnik
Beiträge: 63 Registriert: 05.04.2013
|
erstellt am: 03. Jan. 2014 10:54 <-- editieren / zitieren --> Unities abgeben:
Hallo CADmium, danke für deinen Vorschlag. Ich habe es getestet, leider kann AutoCAD das auch nicht verarbeiten. Vielleicht wird hiermit die Grenze des AutoLISP-Universums erreicht Das wäre schade! Gruß Dieter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 03. Jan. 2014 11:06 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
|
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 03. Jan. 2014 11:09 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 03. Jan. 2014 11:11 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
Deine Einschätzungen über irgendwelche Programmiersprachen in allen Ehren, aber lasse das besser die nächsten Jahre noch.. _ CADmiums Post stimmte schon, warum du damit nicht zurecht kommst, ist gerade schwer zu beurteilen. Bei AutoCAD-Befehlen wird als Koordinateneingabe ein String oder eine Liste akzeptiert: "0,0,0" oder erst während der Laufzeit zusammengebaut (strcat "0" "," YWERT "," ZWERT) aber auch eine Liste '(0 0 0) oder auch (list XWERT 0 ZWERT) ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 03. Jan. 2014 13:18 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
Zitat: Original erstellt von dwg3d: Vielleicht wird hiermit die Grenze des AutoLISP-Universums erreicht Das wäre schade!Gruß Dieter
Das ist eigentlich der typische Weckruf, um Dir das Absolvieren eines Programmierkurses zu empfehlen. Das, was Du formulierst, ist tatsächlich kein richtiges Lisp, sondern nur eine Schnittstelle im AutoLisp, mit der man Befehle in AutoCAD ausführen lassen kann. Wenn, dann ist das also das ganz, ganz untere Ende der Möglichkeiten von AutoLisp, und Dir steht die Entdeckung all seiner Möglichkeiten erst noch bevor. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dwg3d Mitglied Techniker- Holztechnik
Beiträge: 63 Registriert: 05.04.2013
|
erstellt am: 03. Jan. 2014 18:02 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, es funktioniert jetzt. Habe all eure Hinweise berücksichtigt: - copymode steht auf 0 - !Variable gibt die richtige Zahl aus - Prüfung im VisualLISP-Editor, bislang habe ich alles im Text-Editor geschrieben, ich bleibe auch wohl erst noch beim Text-Editor - (list XWERT 0 ZWERT), dieses Format funktioniert jetzt - Programmierkurs habe ich allerdings noch nicht gemacht, wäre natürlich auch noch interessant. Danke für eure Tipps. Gruß Dieter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 06. Jan. 2014 20:00 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
|
dwg3d Mitglied Techniker- Holztechnik
Beiträge: 63 Registriert: 05.04.2013
|
erstellt am: 14. Jan. 2014 12:46 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, gibt es eine Möglichkeit vom LISP die letzten 5 in einer Zeichnung erstellten Objekte auswählen zu lassen? Bislang konnte ich dafür noch nichts finden. Gruß Dieter [Diese Nachricht wurde von dwg3d am 14. Jan. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 14. Jan. 2014 13:10 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
|
dwg3d Mitglied Techniker- Holztechnik
Beiträge: 63 Registriert: 05.04.2013
|
erstellt am: 14. Jan. 2014 19:43 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von CADmium: 1. Neues Thema = neuer Thread !
gedacht hatte ich es auch schon. Hallo Thomas, die Objekte (es können auch mal mehr oder weniger als 5 sein) sollen über _arrayrect vervielfältigt werden. Am komfortabelsten wäre es, wenn man sie dazu zusammenfassen könnte, dann wäre nur ein _arrayrect erforderlich für ein zusammengesetztes Bauteil. Könnte es da etwas geben? Gruß Dieter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 14. Jan. 2014 21:11 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
Es hört sich so an als wenn du selbst, oder gar dein "Programm", die 5 Elemente erstell(s)t ? Auch wenn das jetzt den einfachsten Fall zeigt und zuviel über die Entstehung der 5 unbekannt ist: Variante1 - Letztes Objekt vor der Erstellung der 5 merken, alle danach sind dann deine Objekte. Variante2 - Die letzten 5 einfach ermitteln. ENTNEXT durchgehen.. Auch könntest du schauen in welcher Reihenfolge ein Auswahlsatz (ssget "_X" Filter) vorliegt und die letzten 5 so in Erfahrung bringen, ohne zu testen sollte das die Erstellreihenfolge sein, schau mal nach. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1144 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 15. Jan. 2014 08:38 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
|
dwg3d Mitglied Techniker- Holztechnik
Beiträge: 63 Registriert: 05.04.2013
|
erstellt am: 15. Jan. 2014 12:53 <-- editieren / zitieren --> Unities abgeben:
Hallo cadffm, Thomas & alle Interessierten, mein "LISP-Programm" konstruiert ein Möbel (alle Objekte sind Quader), darin gibt es eine Baugruppe (Schubkasten, 5 Quader, 4 Layer), die über arrayrect vervielfältigt werden soll. Bislang hatte ich nach der Erstellung jeweils arrayrect mit entlast ausführen lassen, also 5 mal arrayrect. Schöner wäre natürlich 1 mal arrayrect. Außerdem, wenn ich ein assoziatives Baugruppen-array haben wollte, wäre diese Vorgehensweise nicht mehr möglich. Variante1: muss ich mir das Objekt merken, oder muss LISP es sich merken? Variante 2+3: bislang habe ich kein Beispiel gefunden, wo die letzten z. B. 5 Teile gezählt werden. Gruß Dieter 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: 15. Jan. 2014 13:22 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
Zitat: Original erstellt von dwg3d: Variante1: muss ich mir das Objekt merken, oder muss LISP es sich merken?
Du musst dir das nicht merken ;) Es genügt, wenn du die ObjectIds in einer Variablen speicherst Zitat: Original erstellt von dwg3d: Variante 2+3: bislang habe ich kein Beispiel gefunden, wo die letzten z. B. 5 Teile gezählt werden.
Solche Funktion gibt's nicht, die musst du dir selber programmieren: Ablauf: ;Am Programmstart (setq lastel (entlast));letztes Element der ZeichnungsDatenbank ermitteln (... ) ;Wenn du nun die neusten Elemente brauchst (while (setq el (entnext lastel)) (setq NewElements(cons el NewElements) lastel el) ) ;in NewElements sind jetzt die neu hinzugefügten Elemente, das jüngste als erstes .. da kannst du nun also die ersten 5 Elemente nehmen - das sind die, die du suchst. Bei Fragen ... 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 |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 15. Jan. 2014 14:08 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
Zitat: Original erstellt von Brischke:
Solche Funktion gibt's nicht, die musst du dir selber programmieren: Ablauf: ;Am Programmstart (setq lastel (entlast));letztes Element der ZeichnungsDatenbank ermitteln (... ) ;Wenn du nun die neusten Elemente brauchst (while (setq el (entnext lastel)) (setq NewElements(cons el NewElements) lastel el) ) ;in NewElements sind jetzt die neu hinzugefügten Elemente, das jüngste als erstes .. da kannst du nun also die ersten 5 Elemente nehmen - das sind die, die du suchst. Bei Fragen ... Grüße! Holger
Aber Vorsicht: nicht unbedingt alle mit ENTNEXT gefundenen Elemente will man im Auswahlsatz haben. Bei alten Polylinien gibt's Vertex-Entities, eventuell gibt's Elemente in anderen Viewports usw.. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dwg3d Mitglied Techniker- Holztechnik
Beiträge: 63 Registriert: 05.04.2013
|
erstellt am: 16. Jan. 2014 19:58 <-- editieren / zitieren --> Unities abgeben:
Hallo archtools, über die Wirkungsweise und Möglichkeiten der "ENTNEXT-Funktion" bin ich mir noch nicht im klaren. Wenn in einer Zeichnung aber nur Quader erstellt wurden, kann "ENTNEXT" dort keine Polylinien finden, würde ich vermuten!? Gruß Dieter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dwg3d Mitglied Techniker- Holztechnik
Beiträge: 63 Registriert: 05.04.2013 Windows 8.1 Professional 64 Bit AutoCAD 2020
|
erstellt am: 16. Jan. 2014 20:02 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, deinen Vorschlag habe ich in einen kleinen Testcode eingebaut, leider bekomme ich es nicht ans laufen. (defun c:lastfive () (command "_-view" "_swiso" "") (command "_UCS" "_W") (setvar "osmode" 0) (setq p1 (list 0 0 0 )) (setq p2 (list (+(car p1)100) (-(cadr p1)100) (+(caddr p1)25) )) (command "quader" p1 p2) (setq lastel (entlast)) (command "quader" p1 p2) (command "quader" p1 p2) (command "quader" p1 p2) (command "quader" p1 p2) (while (setq el (entnext lastel)) (setq NewElements(cons el NewElements) lastel el) ) (setq AZ (getint "AnZahl:")) (command"_arrayrect" (NewElements) "" "Spalten" 1 "Zeilen" 1 "Ebenen" (itoa AZ) 100 "Assoziativ" "n" "x") (command "zoom" "g" "") (setvar "osmode" 63) ) AutoCAD fordert auf "Objekte wählen:"! Was kann man machen? Gruß Dieter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 16. Jan. 2014 20:08 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
Zitat: Original erstellt von dwg3d: Hallo archtools,über die Wirkungsweise und Möglichkeiten der "ENTNEXT-Funktion" bin ich mir noch nicht im klaren. Wenn in einer Zeichnung aber nur Quader erstellt wurden, kann "ENTNEXT" dort keine Polylinien finden, würde ich vermuten!?
AutoCAD kennt keinen Entitytyp namens "Quader". Du kannst ja problemlos nachsehen, aus was Deine Quader bestehen. Unabhängig davon sollte man Programme immer so funktional schreiben wie möglich. Es wäre doch unangenehm, wen Du morgen vor einer gleichen Aufgabe stehst und dann vermeidbare Fehlerabbrüche bekommst. Schreib' Dir eine Funktion, die Dir alle seit einem angegebenen Entity neu erzeugten Elemente in eine Liste oder einen Auswahlsatz schreibt. Diese Funktion kannst Du dann immer wieder verwenden.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 16. Jan. 2014 21:07 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
Was die commandZeile angeht: Die Autocadobjektwahl erwartet ein Entityname oder einen Auswahlsatz, eine Liste wird nicht akzeptiert. Du müßtest also einen AWS erst erstellen mit den Objekten deiner Liste. (setq aws (ssadd)) (foreach en meineliste (ssadd en aws)) (command "_move" aws "" "0,0" "20,0") so in der Art. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD 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: 16. Jan. 2014 22:26 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
versuch das: (command"_arrayrect") (mapcar 'command NewElements) (command "" "Spalten" 1 "Zeilen" 1 "Ebenen" (itoa AZ) 100 "Assoziativ" "n" "x") Grüße! Holger PS: nur so kurz, weil's proggen an Handy echt mühsam ist. ------------------ 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 |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 16. Jan. 2014 22:53 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
|
dwg3d Mitglied Techniker- Holztechnik
Beiträge: 63 Registriert: 05.04.2013
|
erstellt am: 17. Jan. 2014 16:53 <-- editieren / zitieren --> Unities abgeben:
Hallo CAD on demand GmbH & archtools, insgeheim hatte ich gehofft eine einfache, fertige Lösung angeboten zu bekommen , da ich ja kein High End LISP-Programmierer bin und dieses zu werden auch nicht mein Ziel war / ist. Eine einfache, fertige Lösung gibt es in diesem Fall ja auch wohl nicht. Ich werd mal sehen wie weit ich mit eurer Programmierhilfe an eine Lösung dieses Problems herankomme, vielleicht wird es noch Fragen geben Gruß Dieter [Diese Nachricht wurde von dwg3d am 17. Jan. 2014 editiert.]
[Diese Nachricht wurde von dwg3d am 17. Jan. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dwg3d Mitglied Techniker- Holztechnik
Beiträge: 63 Registriert: 05.04.2013 Windows 8.1 Professional 64 Bit AutoCAD 2020
|
erstellt am: 21. Jan. 2014 07:51 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, es gibt Fortschritte: mit "entlast" und "ssadd" kann ich das Problem lösen, allerdings müssen diese Funktionen nach Erstellung jedes Einzelteils gesetzt werden. Mit "foreach" bekomme ich nichts ans laufen, ich finde auch nirgendwo ein Beispiel, wie "foreach" in meinem "Programm" aussehen könnte. (command"_arrayrect") (mapcar 'command NewElements) (command "" ...... Bei dieser Lösung wird leider das erste Element nicht in den Auswahlsatz übernommen, aber der Rest funktioniert. Mir ist allerdings nicht klar, warum der Rest funktioniert, vielleicht ist diese Lösung auch eher etwas für fortgeschrittene Lispler? Muss ich mich mit der ersten funktionierenden Lösung zufrieden geben, oder kann man noch etwas machen? Gruß Dieter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1144 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 21. Jan. 2014 08:24 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
Hallo Dieter,
Zitat:
... es gibt Fortschritte: mit "entlast" und "ssadd" kann ich das Problem lösen, allerdings müssen diese Funktionen nach Erstellung jedes Einzelteils gesetzt werden.
Das es Fortschritte gibt, ist doch schon mal schön. Entlast liefert nun mal das zuletzt erzeugte Element. Wenn Du mehrere erzeugen und einsammeln willst, musst Du eben entlast nach jedem Element anwenden. ODER: Du merkst Dir mit entlast das aktuell letzte Element bevor Du die Neuen erzeugst und nutzt dann die Möglichkeiten von entnext (s. z. B. hier) Zitat:
Mit "foreach" bekomme ich nichts ans laufen, ich finde auch nirgendwo ein Beispiel, wie "foreach" in meinem "Programm" aussehen könnte.
Da wir nicht wissen, wie Dein Programm aussieht, können wir hier auch keine konkrete Hilfe leisten, höchsten Allgemeines, aber das findest Du auch in der Hilfe. Also bitte Programm(ausschnitt) hier posten oder hochladen.
Zitat:
(command"_arrayrect") (mapcar 'command NewElements) (command "" ...... Bei dieser Lösung wird leider das erste Element nicht in den Auswahlsatz übernommen, aber der Rest funktioniert. Mir ist allerdings nicht klar, warum der Rest funktioniert, vielleicht ist diese Lösung auch eher etwas für fortgeschrittene Lispler?
Hier ist mir nicht klar, was Du uns damit sagen willst.
Zitat:
Muss ich mich mit der ersten funktionierenden Lösung zufrieden geben, oder kann man noch etwas machen?
Auch hier gilt: "Zeige uns, was Du schon hast und wo es klemmt" und Hilfe wird sicher nicht lange auf sich warten lassen. Gruß Thomas
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 21. Jan. 2014 09:04 <-- editieren / zitieren --> Unities abgeben: Nur für dwg3d
Da du offenbar wirklich an dem Thema dran bist (man sieht hier auch mal andere Sachen): Mit Google arbeiten: wunderschöne Abfragen in Englisch: autocad lisp selectionset last entities oder Deutsch, wobei ich da gerne explizit im CAD.de Lispforum suche: site:cad.de Forum145 letzten objekte Wie auch immer, würde man auf diverse fertige Codes kommen, wie hier zB. 2 ode 3 letzte Objekte hoffe das es jetzt klappt PS: ich bekommen keine fehlerfreie Commandausführung mit arrayrect hin, ich gebe zeilen und spalten an, jedoch kommt 'Erfordert eine Ganzzahl zwischen 1 und 32767 oder einen Optionstitel' Zeilen und Ebenenabstand stimmen nicht/werden nicht wie angegeben übernommen. "" "_row" 7 2 1 "_col" 3 2 "") ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dwg3d Mitglied Techniker- Holztechnik
Beiträge: 63 Registriert: 05.04.2013
|
erstellt am: 27. Jan. 2014 12:39 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, schon wieder gibt es Fortschritte: mit >entlast, ssadd, while + entnext< bekomme ich es auch ans laufen. Vielen Dank für eure Tipps. Zwei funktionierende Lösungen für dieses Problem könnten ausreichen, allerdings ist für mich in diesem Zusammenhang "foreach" immer noch ein Thema. Aber keine Angst das es jetzt langweilig werden könnte, aus gegebenem Anlass habe ich einen neuen Thread eröffnet: Thema Polylinien. Gruß Dieter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |