| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| CIDEON Whitepaper: Elektronik und Mechanik redundanzfrei vereinen: Der Weg zur mechatronischen Stückliste, ein Whitepaper
|
Autor
|
Thema: Export von Koordinaten mittels VBA (1193 / mal gelesen)
|
a.hinke Mitglied
Beiträge: 8 Registriert: 12.07.2021 AutoCAD 2017 Windows 10 Pro i5-9400F Quadro P620
|
erstellt am: 12. Jul. 2021 09:05 <-- editieren / zitieren --> Unities abgeben:
Mein Gehversuche in AutoCAD haben vor nicht all zu langer Zeit begonnen, bin aber grundsätzlich mit vielen unterschiedlichen CAD Systemen vertraut. Ich arbeite in AutoCAD 2017 und möchte gern nachfolgendes Problem lösen. Um es klein anzugehen folgender Modellaufbau im AutoCAD. Es gibt zwei Layer T01 und T02 (Layer "0" ausgenommen). Auf jedem Layer liegt jeweils ein Kreis mit d = 10 mm (obwohl der Durchmesser eher irrelevant ist). Der Kreis im Layer T01 liegt auf der Koordinate (X in mm, Y in mm) "0.0000, 0.0000" und der Kreis im Layer T02 liegt auf der Koordinate (X in mm, Y in mm) "1.234, -1.234". Ich möchte nun diese Informationen in eine Datei im Textformat schreiben, sodass folgender Syntax entsteht. T01 X00000Y00000 T02 X01234Y-1234 Wie ihr seht, gibt es keine Trennzeichen und der Wert wird in tausendstel mm geschrieben. Das Zahlenpaket besteht aus mindestens 5 Zeichen (je nach Bedarf vorlaufende Nullen oder ein "-" und je nach Bedarf vorlaufende Nullen). Ich denke nicht, dass es hierfür einen "simplen" Befehl gibt. Aber mittels eines VBA sollte das Thema eigentlich umsetzbar sein. Mir fehlt nun ein Ansatzpunkt bzw. Hinweise, wo ich Befehle finden kann, welche ich in eine VBA Programmierung verwenden kann. Wenn VBA hier genauso funktioniert wie in Excel, dann bekomme ich das sicherlich hin. In Sachen Excel VBA findet man ja auch jede Menge Beschreibungen und Hilfen im Netz. Für VBA in AutoCAD bin ich mir da nicht so sicher. Aber ehrlicher Weise habe ich hierzu auch noch nicht wirklich gesucht. Danke schon mal im Voraus für all Eure Ideen.
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
|
erstellt am: 12. Jul. 2021 11:00 <-- editieren / zitieren --> Unities abgeben: Nur für a.hinke
|
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Bricscad V11-V23 pro Plateia, Canalis Visual Basic
|
erstellt am: 12. Jul. 2021 11:35 <-- editieren / zitieren --> Unities abgeben: Nur für a.hinke
Hallo a.hinke, willkommen im Forum Hier auf cad.de gibt es unterschiedliche Foren, zur Programmierung zum Beispiel AutoCAD VBA, Diskussionen rund um die AutoCAD VBA Programmierung .. oder Excel, Alles rund um MS-Excel . Ein Beispiel einer Steuerung von Autocad über Excel wäre hier . Wenn Du schon Erfahrung mit Programmierung unter Excel hast, solltest Du Dir das ActiveX-Modell zu Gemüte führen. Wenn Du dort auf das Element tippst bekommst du weitere Hinweise wie Du diese abfrägst, danach kannst Du Dein Programm entsprechend aufbauen. Gibt ja verschiedene Methoden für Deine Anfrage: Durchlaufen der Layer damit alle Kreise darauf hintereinander stehen oder einfach nur Abfrage der Kreise (circleObj.layer, circleObj.Center(0)*1000 ) Wenn Du Probleme mit dem Code hast, kannst Du gerne Deinen Code mit Angabe des Fehlers hier einstellen. Grüße Klaus [edit] Schau Dir auch mal den Developer Guide an. Dort wird die Programmierung unter VBA für Autocad erklärt, Hinweise für den Zugriff auf die Zeichnungselemente gegeben, aber auch wie man mit SelectionSets und Filtern arbeitet. Gerade bei großen Zeichnungen ist das eine große Hilfe und erspart zusätzliche Abfragen. [Diese Nachricht wurde von KlaK am 12. Jul. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
a.hinke Mitglied
Beiträge: 8 Registriert: 12.07.2021 AutoCAD 2017 Windows 10 Pro i5-9400F Quadro P620
|
erstellt am: 12. Jul. 2021 14:46 <-- editieren / zitieren --> Unities abgeben:
|
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Bricscad V11-V23 pro Plateia, Canalis Visual Basic
|
erstellt am: 12. Jul. 2021 22:43 <-- editieren / zitieren --> Unities abgeben: Nur für a.hinke
|
a.hinke Mitglied
Beiträge: 8 Registriert: 12.07.2021 AutoCAD 2017 Windows 10 Pro i5-9400F Quadro P620
|
erstellt am: 13. Jul. 2021 08:00 <-- editieren / zitieren --> Unities abgeben:
Ja, das hatte ich mir auch bereits überlegt. Allerdings muss ich ja dann im Nachgang via VBA im Excel Hand anlegen. Und da dachte ich mir, dass ich es auch einfach gleich über das VBA im AutoCAD machen kann. Sobald ich was brauchbares habe stelle ich es hier gern zur Verfügung. Allerdings kann das alles dauern, da das eher ein Nebenprojekt ist. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 AutoCAD 2.5 - 2025, Civil 3D, MAP 3D, ACADM, ACA Inventor Prof. 2025, AIP 4-2025 Win 11
|
erstellt am: 13. Jul. 2021 09:10 <-- editieren / zitieren --> Unities abgeben: Nur für a.hinke
Die älteste und äußerst kompakte Programmiersprache in AutoCAD ist LISP. Um mal Alternativen zu VBA in AutoCAD aufzuzeigen. Folgenden Code in eine Textdatei mit der Endung LSP kopieren und dann mit APPLOAD laden. Liefert auch das gewünschte Ergebnis. Zeitdauer für die Erstellung ca. 15min. Code:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Lisp Beispiel ;;; CAD.de Formum 13.07.2021 - Udo Hübner - CAD-Huebner.de ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Unterfunktion für das Formatieren der Koordinaten (defun formatnumber (num digits) (setq numstr (rtos (* num 1000) 2 0) numlen (strlen numstr) ) (if (< numlen digits) (if (minusp num) (setq numstr (strcat "-" (substr "0000000000" 1 (- digits numlen)) (substr numstr 2 (1- numlen)))) ;else (setq numstr (strcat (substr "0000000000" 1 (- digits numlen)) numstr)) ) ) numstr ; return value ) ;;; Hauptpropgramm (defun C:NCCode () (prompt "\nwähle Kreise:") (setq AWSkreise (ssget (list (cons 0 "CIRCLE"))) ;; AWS = Auswahlsatz AnzKreise (sslength AWSKreise) ) (write-line "------------------------") (while (>= (setq Anzkreise (1- AnzKreise)) 0) (setq ElisteKreis (entget (ssname AWSKreise Anzkreise)) layer (cdr (assoc 8 ElisteKreis)) Mpkt (cdr (assoc 10 ElisteKreis)) ) (write-line layer) (Write-line (strcat (formatnumber (car Mpkt) 10) "," (formatnumber (cadr Mpkt) 10))) ) (write-line "------------------------") (prin1) )
------------------ Mit freundlichem Gruß
Udo Hübner www.CAD-Huebner.de
[Diese Nachricht wurde von CAD-Huebner am 13. Jul. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Bricscad V11-V23 pro Plateia, Canalis Visual Basic
|
erstellt am: 13. Jul. 2021 12:04 <-- editieren / zitieren --> Unities abgeben: Nur für a.hinke
@a.hinke: Ja, da hast Du sicherlich recht. War nur so eine Idee falls Dir die Zeit fehlen sollte Dich mit dem ActiveX-Objektmodell vertraut zu machen. @Udo: Da hast Du sicherlich recht, dass man sehr kompakten Code schreiben kann. Aber man muß dazu eine völlig andere Programmiersprache erlernen, was auch nicht mal so schnell nebenbei geht In 15 min hätte ich das in Lisp nicht geschafft, da fehlen mir einfach die Grundlagen. Das VBA-Makro dagegen ist in fünf Minuten (mit Testen evtl. 10 min) schnell geschrieben :
Code: Sub Schreib_Liste() Dim ent As AcadObject Dim circleObj As AcadCircle Dim BRefObj As AcadBlockReference Dim X As Double, Y As Double Dim bWrite As Boolean Open "D:\Kreis.txt" For Output As #1 For Each ent In ThisDrawing.ModelSpace bWrite = True Select Case ent.ObjectName Case "AcDbCircle": Set circleObj = ent X = circleObj.Center(0) Y = circleObj.Center(1) Case "AcDbBlockReference": Set BRefObj = ent X = BRefObj.InsertionPoint(0) Y = BRefObj.InsertionPoint(1) Case Else: bWrite = False End Select If bWrite = True Then Print #1, ent.Layer Print #1, Format(Round(X * 1000, 0), "00000"); ","; Format(Round(X * 1000, 0), "00000") End If Next ent Close #1 End Sub
Aber da kenne ich den Syntax auswendig und muß nicht lange nach DXF-Codes suchen. Gut, der SelectionSet fehlt noch, wäre aber auch nicht das Thema. Habe als Beispiel für weitere Objekte noch eine Blockreference eingefügt, in Lisp bliebe es hier ja beim Code 10, müßte nur beim ssget "Insert" ergänzen. Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
a.hinke Mitglied
Beiträge: 8 Registriert: 12.07.2021 AutoCAD 2017 Windows 10 Pro i5-9400F Quadro P620
|
erstellt am: 13. Jul. 2021 14:59 <-- editieren / zitieren --> Unities abgeben:
Hallo CAD - Huebner, danke für den Hinweis auf LISP. Gibt es Vorteile / Nachteile in der Benutzung der jeweiligen Programmiersprache? Ein Vorteil denke ich ist, dass man alle Zeilen auch direkt in die Befehlszeile von AutoCad einfügen kann oder ginge das mit den VBA Zeilen auch? Grundsätzlich habe ich nichts dagegen, mich mit einer weiteren Sprache auseinander zu setzen. Nur wenn es eigentlich nicht nötig ist, würde ich mir die Zeit sparen und meine Kenntnisse eher in VBA verbessern.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Bricscad V11-V23 pro Plateia, Canalis Visual Basic
|
erstellt am: 13. Jul. 2021 17:27 <-- editieren / zitieren --> Unities abgeben: Nur für a.hinke
|
a.hinke Mitglied
Beiträge: 8 Registriert: 12.07.2021 AutoCAD 2017 Windows 10 Pro i5-9400F Quadro P620
|
erstellt am: 14. Jul. 2021 08:10 <-- editieren / zitieren --> Unities abgeben:
Das ging alles schneller als erwartet. Ich bin am Ende bei VBA geblieben, auch wenn ich über LISP das gleiche Ergebnis erzielen konnte. Hier mein VBA -------------------------- Sub Bohrdaten() Dim Obj As AcadObject Dim circleObj As AcadCircle Dim X As String, Y As String Dim layerEntry As AcadLayer Open "<Pfad>\Bohrdaten_AutoCAD.bor" For Output As #1 Print #1, "%3000" For Each layerEntry In ThisDrawing.Layers If layerEntry.LayerOn = True Then Print #1, layerEntry.Name For Each Obj In ThisDrawing.ModelSpace If Obj.Layer = layerEntry.Name And Obj.ObjectName = "AcDbCircle" Then Set circleObj = Obj If circleObj.Center(0) < 0 Then X = Format(Round(circleObj.Center(0) * 1000, 0), "0000") Else X = Format(Round(circleObj.Center(0) * 1000, 0), "00000") End If If circleObj.Center(1) < 0 Then Y = Format(Round(circleObj.Center(1) * 1000, 0), "0000") Else Y = Format(Round(circleObj.Center(1) * 1000, 0), "00000") End If Print #1, "X"; X; "Y"; Y End If Next Obj End If Next layerEntry Close #1 End Sub --------------------------
Ich werde das VBA sicherlich noch um weitere Funktionen erweitern, sodass es am Ende den Anforderungen genügt und ein guter Automatismus zur Verfügung steht. An alle hier recht herzlichen Dank für die Einführung zu diesem Thema und das ihr mir das "Laufen" beigebracht habt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
a.hinke Mitglied
Beiträge: 8 Registriert: 12.07.2021 AutoCAD 2017 Windows 10 Pro i5-9400F Quadro P620
|
erstellt am: 22. Jul. 2021 14:34 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich hab da nun doch nochmal an etwas zu knobeln. Also vom Grundsatz komme ich an die Informationen die ich benötige, sofern dir Kreise nicht innerhalb von Blöcken liegen. Aber wie komme ich jetzt an diese? Über die "AcDbBlockReference" bekomme ich ja nur die Informationen, wo der gesamte Block eingefügt wurde. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Bricscad V11-V23 pro Plateia, Canalis Visual Basic
|
erstellt am: 22. Jul. 2021 16:08 <-- editieren / zitieren --> Unities abgeben: Nur für a.hinke
Hallo, Die Tücken merkt man immer erst beim Testen Aber auch hier gibt es eine Lösung. Über BlockReference.Explode kannst Du den Inhalt der Reference einem neuem Varant-Array zuweisen. Dieses Durchlaufen und die Kreise herausschreiben. Ein Beispiel dazu findest Du hier. Im Gegensatz zum Autocadbefehl _Explode wird hier die ursprüngliche Blockreference nicht aufgelöst sondern im Prinzip eine Kopie davon erzeugt. D.h. Du mußt dann entscheiden ob du die BlockReference oder die kopierten Elemente aus der Zeichnung löscht. Grüße Klaus [Diese Nachricht wurde von KlaK am 22. Jul. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
a.hinke Mitglied
Beiträge: 8 Registriert: 12.07.2021 AutoCAD 2017 Windows 10 Pro i5-9400F Quadro P620
|
erstellt am: 22. Jul. 2021 17:25 <-- editieren / zitieren --> Unities abgeben:
Nabend, wäre es nicht viel einfacher, wenn man wie folgt vorgeht? alle sichtbare Objekte markieren (Es sind ja nur die Layer aktiv, die ich auch exportieren will.) Befehl "Ursprung" in der Befehlsleiste eingeben und Enter drücken Daten exportieren (Soweit funktioniert ja die Routine bereits.) Rückgängig Button klicken Das ganze dann als Script ausführen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Bricscad V11-V23 pro Plateia, Canalis Visual Basic
|
erstellt am: 22. Jul. 2021 22:53 <-- editieren / zitieren --> Unities abgeben: Nur für a.hinke
Klar kann man das auch machen, jeder schreibt das Programm wie er es benutzen möchte. Ich habe auch einige die nur für ganz spezielle Konstellationen funktionieren. Möchte man es vielseitiger wird es komplizierter (Stichwort Block in Block, Block in XRef). Man könnte auch die Zeichnung über Script öffnen, Blöcke auflösen, Programm laufen lassen und Zeichnung ohne Speichern schließen - alles möglich ... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
a.hinke Mitglied
Beiträge: 8 Registriert: 12.07.2021 AutoCAD 2017 Windows 10 Pro i5-9400F Quadro P620
|
erstellt am: 23. Jul. 2021 11:19 <-- editieren / zitieren --> Unities abgeben:
Hallo erneut, meine Idee von gestern lässt sich irgendwie nicht umsetzen. Ich befinde mich zum Start im Layout Bereich. Gebe ich folgende Befehle, ------------------------------------ _.MSPACE _AI_SELALL URSPRUNG _-VBARUN Export.Bohrdaten _.UNDO 4 ------------------------------------ einzeln in die Befehlszeile, dann bekomme ich folgendes Resultat: ------------------------------------ Befehl: _.MSPACE Befehl: _AI_SELALL Objekte werden gewählt...fertig. Befehl: URSPRUNG 387 gefunden 356 konnten nicht aufgelöst werden. Verknüpfung der Bemaßung aufgehoben Verknüpfung der Hilfslinien aufgehoben Verknüpfung der Hilfslinien aufgehoben Verknüpfung der Hilfslinien aufgehoben Verknüpfung der Hilfslinien aufgehoben Verknüpfung der Bemaßung aufgehoben Befehl: _-VBARUN Makroname: Export.Bohrdaten Befehl: _.UNDO Aktuelle Einstellungen: Automatisch = Aus, Steuerung = Alle, Zusammenfügen = Ja, Layer = Ja Anzahl der rückgängig zu machenden Operationen eingeben oder [Auto/Steuern/Beginn/Ende/Markierung/Rück] <1>: 4 -VBAAUSF URSPRUNG AI_SELALL MBEREICH ------------------------------------ Sind die Befehle in der Skriptdatei, bekomme ich folgendes Resultat: ------------------------------------ Befehl: _.MSPACE Befehl: _AI_SELALL Objekte werden gewählt...fertig. Befehl: URSPRUNG Objekt wählen: _-VBARUN *Ungültige Auswahl* Erwartet einen Punkt oder Letztes/ALLE/Gruppe ------------------------------------ Es scheint, dass die ausgewählten Objekte nicht von dem Befehl "URSPRUNG" übernommen werden und dann somit die Aufforderung "Objekt wählen:" kommt. Damit ist natürlich die Routine in die Fritten. Aber warum verhält es sich so? Hat da jemand eine Prompte Idee?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 23. Jul. 2021 11:47 <-- editieren / zitieren --> Unities abgeben: Nur für a.hinke
_.MSPACE _AI_SELALL URSPRUNG _-VBARUN Export.Bohrdaten _.UNDO 4 ------------------------------------>>"einzeln in die Befehlszeile, dann bekomme ich folgendes Resultat:" lööft >>"Sind die Befehle in der Skriptdatei, bekomme ich folgendes Resultat:"
------------------------------------ Befehl: _.MSPACE Befehl: _AI_SELALL Objekte werden gewählt...fertig. Befehl: URSPRUNG Objekt wählen: _-VBARUN *Ungültige Auswahl* Erwartet einen Punkt oder Letztes/ALLE/Gruppe ------------------------------------ >>"Hat da jemand eine Prompte Idee?" Gar Wissen, einige haben >>"Es scheint, dass die ausgewählten Objekte nicht von dem Befehl "URSPRUNG" übernommen werden" >>"und dann somit die Aufforderung "Objekt wählen:" kommt." Korrekt, die hier über ein Script gestartete Befehlversion akzeptiert nur ObjektNachBefehl und kann auch nur ein einziges Objekt auflösen (wie in der Hilfe[F1] dokumentiert). Werden AutoCAD-Befehl durch eine Automation gesteuert - script,macro,(send)command wird in einigen Fällen wo dies eben zutrifft, eine "alte" Version des Befehls gestartet. Auf diese Weise erhält man sich die Kompatibilität von älteren Automationsprozessen. Ohne Erklärungen and Variante, hier gebe ich dir jetzt einfach einen Lispausdruck, du darfst aber auch gerne eine Schleife in VBA bauen welche 1 nach dem anderen auflöst(Performance). Also: Bevor du so einen Befehl aufrufst, sende Folgenes in die Befehlszeile (initcommandversion) Man würde es auch noch durch eine Systemumstellung hinbekommen, aber in AutoCAD im Zusammenhang mit Scripten schlage ich das eher nicht vor. >>"Damit ist natürlich die Routine in die Fritten." Ja, da muß man dann anders vorgehen im Script. Erst Befehl, dann Objektwahl ALLE. Beispiel von PEDIT: PEDIT mehrere ALLE
somit wäre ein "alle Objekte an Befehl übergeben" gelöst. (nur das in diesem besonderen Fall auch das nicht viel hilft) >>"Aber warum verhält es sich so?" Kompatibilitätssicherstellung für Abmillionen von Programmen, Menüdateien und Scripten weltweit.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Bricscad V11-V23 pro Plateia, Canalis Visual Basic
|
erstellt am: 23. Jul. 2021 14:22 <-- editieren / zitieren --> Unities abgeben: Nur für a.hinke
Zitat: Original erstellt von a.hinke: Hallo erneut, meine Idee von gestern lässt sich irgendwie nicht umsetzen.
Aber Du bekommst Du schon einen Hinweis beim Programmablauf:
Zitat: Befehl: _.MSPACE Befehl: _AI_SELALL Objekte werden gewählt...fertig. Befehl: URSPRUNG Objekt wählen: _-VBARUN *Ungültige Auswahl* Erwartet einen Punkt oder Letztes/ALLE/Gruppe
Wenn ich das lese, lasse ich einfach den _AI_SELALL weg und ergänze URSPRUNG Alle Alternativ : Ursprung L (dann muss _AI_SELALL natürlich drin bleiben) Das sollte ja dann klappen. Wichtig dabei: Eine Leerzeile nach dem Befehl damit die Auswahl beendet und die Objekte bearbeitet werden. Manche Befehle verhalten sich im Script anders als im Autocad (wie cadffm schon schrieb). Bzgl. des Programmaufrufs: in Makros wie in Scripten verwende ich hier (Command "VBARUN" "Export.Bohrdaten") bzw. (^C^CCommand "VBARUN" "Export.Bohrdaten") Zweimal ESC damit auch wirklich alle vorherigen Befehle beendet sind. Teste es und berichte, mir fehlt gerade die Zeit dazu [Diese Nachricht wurde von KlaK am 23. Jul. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 23. Jul. 2021 15:28 <-- editieren / zitieren --> Unities abgeben: Nur für a.hinke
Ich wollte es eigentlich nur als PN an KlaK senden, da er aber so wenig Zeit hat um evtl. das Eine oder Andere noch nachzuschieben, hier nun doch direkt im Thread damit a.hinke die Infos schneller hat. >>Alternativ : Ursprung L Würde die Objektwahloption LETZTES starten, also das zuletzt erstellte Objekt wählen >>"dann muss _AI_SELALL natürlich drin bleiben" Richtig wäre V order VORHER, L steht für Letztes (Objekte) und V für Vorherige Auswahl Aber der Befehl Ursprung akzeptiert V leider nicht
>>Wichtig dabei: Eine Leerzeile nach dem Befehl damit die Auswahl beendet und die Objekte bearbeitet werden. Manche Befehle verhalten sich im Script anders als im Autocad. Falls das im direkten Zusammenhang stand: Das ist händisch genau so. Akzeptiert ein Befehl mehrere Objektwahlvorgänge, so beendet man die Objektwahlabfrage mit einer Leerantwort, also Enter. Enter im Script = Zeilenumbruch, alternativ hier (aber kein guter Tip für Anfänger, da schlecht "lesbar" und nicht allgemeingültig: Ein Leerzeichen)
>>"Bzgl. des Programmaufrufs: in Makros wie in Scripten verwende ich hier (Command "VBARUN" "Export.Bohrdaten") " Wer eine Abneidung gegen Lisp-Command hat, kann auch VL-VBARUN nutzen: (vl-vbarun "open_close.dvb!op_cl.REOPEN") Wer eine Abneigung gegen Klammern hat, der kann auch den Befehl VBASTMT nutzen, womit man VBA-Ausdrücke direkt evaluieren lassen kann. _.VBASTMT acadapplication.runmacro "open_close.dvb!op_cl.REOPEN"
>>"bzw. (^C^CCommand "VBARUN" "Export.Bohrdaten") Zweimal ESC damit auch wirklich alle vorherigen Befehle beendet sind." Da war die Eile wohl die Fehlerquelle, ich korrigiere mal: ^C^C(Command "VBARUN" "Export.Bohrdaten")
Ergänzung: In einem Menümakro - und nur da funktioniert das so (nicht das a.hinke sich unnötig abmüht) könnte man schreiben ^C^C^C(Command "VBARUN" "Export.Bohrdaten") Drei Mal ESC(^C) damit sicher ein möglicherweise aktiver Befehl zuvor beendet wird." Gibt es tatsächlich, Befehle mit 3 Ebenen
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |