| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: ACAD-Befehl abwarten, dann VBA fortführen (1782 mal gelesen)
|
sarotti Mitglied Bauingenieur

 Beiträge: 74 Registriert: 14.07.2005 AutoCad 2022 64Bit Windows 10-64Bit mit 32 GByte
|
erstellt am: 27. Feb. 2012 16:45 <-- editieren / zitieren --> Unities abgeben:         
Hallo liebe Leute im Forum, ich hab da wohl ein kleines Verständnisproblem bei Ablauf von AutoCAD und VBA. Ein Programm soll Koordinaten von Polylinien einlesen. Es kann vorkommen das eine Linie keine Polylinie ist sondern vom Anwender vom Typ Linie erstellt wurde. Also im Programm den Befehl "pedit" einbauen damit das VBA-Programm nicht erst beendet werden muss um den Befehl auszuführen. Nur leider funktioniert dieses nicht so wie unten dargestellt. Das Programm läuft weiter ohne den Befehl abzuwarten. Was muss ich hier anderes machen? frm_Hauptform.Hide ThisDrawing.SendCommand ("_pedit" + Chr(13)) frm_Hauptform.Show im voraus Danke für Eure Hilfe Sarotti
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ManfredPS Mitglied
 
 Beiträge: 118 Registriert: 23.08.2011 ..
|
erstellt am: 27. Feb. 2012 17:43 <-- editieren / zitieren --> Unities abgeben:          Nur für sarotti
Zitat: Das Programm läuft weiter ohne den Befehl abzuwarten
Das Programm hat seine Pflicht erfüllt, du hast es angewiesen, dass es PEDIT und ENTER in die Befehlszeile schickt, und das hat es getan. Verwende beispielsweise diesen Event (im nachfolgenden Code), damit du deine Form dann wieder aktivierst. Der startet an, wenn der Anwender den PEDIT-Befehl beendet hat (ob per ENTER oder ESC). In jedem Fall musst du aber prüfen, ob es richtig abgelaufen ist, nur SendCommand schicken und dann anzunehmen, dass es passt, kann schon mal zu viel Vertrauen sein. ;) Code: Private Sub AcadDocument_EndCommand(ByVal CommandName As String) frm_Hauptform.Show End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sarotti Mitglied Bauingenieur

 Beiträge: 74 Registriert: 14.07.2005 AutoCad 2022 64Bit Windows 10-64Bit mit 32 GByte
|
erstellt am: 28. Feb. 2012 16:46 <-- editieren / zitieren --> Unities abgeben:         
Hallo Manfred, ich komm mit Deiner Lösung nicht richtig weiter. Wenn ich es so mache funktioniert es nicht. sub xxx frm_Hauptform.hide acaddocument_endcommand() end sub Private Sub AcadDocument_EndCommand(ByVal CommandName As String) ThisDrawing.SendCommand ("_pedit" + Chr(13)) frm_Hauptform.Show End Sub Kannst Du mir bitte auf die Sprünge helfen. Danke Gruß Sarotti Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
reltro Mitglied student
 
 Beiträge: 125 Registriert: 08.11.2009 Acad 2012 - VBA,Lisp Revit 2012 3dsMax 2012 Rhino 5 - GH,Pyhton,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3
|
erstellt am: 28. Feb. 2012 18:51 <-- editieren / zitieren --> Unities abgeben:          Nur für sarotti
Um in ManfredPs's Überlegung zu bleiben: Code:
sub xxx() frm_hauptform.hide thisDrawing.sendcommand ("_pedit" & vbcr) end sub '-------------------------------------------------------------------- Private Sub AcadDocument_EndCommand(ByVal CommandName As String) If StrComp(CommandName, "pedit", vbTextCompare) = 0 _ Then frm_Hauptform.Show end if End Sub
Die Sub "AcadDocument_EndCommand" ist ein Event bezogen auf das aktive Document und benötigt keinen Aufruf, sondern wird jedes mal ausgeführt wenn ein Command beendet wird. Desswegen braucht das Ding auch eine überprüfung welcher Befehl gerade beendet wurde. Debugge das konstrukt schrittweise (F8) und schau dir an welche CommandName's dort auftauchen. lg reltro Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
reltro Mitglied student
 
 Beiträge: 125 Registriert: 08.11.2009 Acad 2012 - VBA,Lisp Revit 2012 3dsMax 2012 Rhino 5 - GH,Pyhton,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3
|
erstellt am: 28. Feb. 2012 18:59 <-- editieren / zitieren --> Unities abgeben:          Nur für sarotti
Allerdings würde ich überprüfen ob das gewählte bzw. der zur Bearbeitung übergebene Element eine PolyLinie ist oder eben nicht. If ... then ... else oder auch Code:
Dim obj as acadobjectSelect Case obj.objectName Case "AcDbPolyline" .... Case "AcDbLine" end Select
du kannst nähmlich auch die Koordinaten von Linien auslesen  lg reltro
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
reltro Mitglied student
 
 Beiträge: 125 Registriert: 08.11.2009 Acad 2012 - VBA,Lisp Revit 2012 3dsMax 2012 Rhino 5 - GH,Pyhton,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3
|
erstellt am: 28. Feb. 2012 19:04 <-- editieren / zitieren --> Unities abgeben:          Nur für sarotti
ähm, das überprüfen machst du sowieso, sonst könntest das "_pedit" ja nicht im richtigen moment ansetzen naja. lies doch einfach die koordinaten der Linie ein/aus. Dabei ist zu beachten welche KoordinatenStruktur dabei zurückkommt. u know LWPolyline: XY / kein Z Line: XYZ hope it help lg reltro Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sarotti Mitglied Bauingenieur

 Beiträge: 74 Registriert: 14.07.2005 AutoCad 2022 64Bit Windows 10-64Bit mit 32 GByte
|
erstellt am: 28. Feb. 2012 19:37 <-- editieren / zitieren --> Unities abgeben:         
Danke reltro, jetzt habe ich verstanden wie Manfred das meinte. Es funktioniert so wie es sollte. Das mit dem pedit im Programm ist eine Notlösung. Wenn es nur immer eine Linie wäre, dann würde ich auch die Koordinaten auslesen und umstellen. Aber einige Anwender die eine Polylinie zeichnen wollen zeichnen nicht eine Polylinie sondern mehrere Linien hintereinander. Das sieht zwar genauso aus, das Programm kann aber nicht erkennen wieviel Linien zusammen gehören und dann wird es kompliziert. Vielen Dank für eure Hilfe! Gruß Sarotti Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |