| |
 | 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 PRO Elite™ High Endurance microSD-Flash-Speicherkarten für Videoüberwachung und kontinuierliche Aufzeichnung, eine Pressemitteilung
|
Autor
|
Thema: ThisDrawing.SendCommand (3286 mal gelesen)
|
Martin Kugler2 Mitglied
 Beiträge: 5 Registriert: 25.10.2005
|
erstellt am: 25. Okt. 2005 16:06 <-- editieren / zitieren --> Unities abgeben:         
Hallo ! Ich habe folgendes Problem: Ich möchte in ACAD2006 aus einem Userform heraus den SendCommand Befehl ausführen. Nachdem ich eine Polyline gezeichnet habe, soll das Userform wieder erscheinen hier der Code den ich dafür geschrieben habe: Me.Hide ThisDrawing.SendCommand "_pline" & vbCr Me.Show Leider schließt das Userform und öffnet danach gleich wieder, ohne das ich die Polyline zeichnen kann. D.h. ich kann schon zeichnen, aber erst wenn ich das Userform wieder geschlossen habe. Weiß jemand eine Lösung dafür? Ich hätte die gezeichnete Polyline danach auch gerne als Objekt verfügbar. Vielen Dank für alle Antworten im Voraus Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 25. Okt. 2005 17:36 <-- editieren / zitieren --> Unities abgeben:          Nur für Martin Kugler2
Hallo Martin, ich weiss nicht was du mit deinem Programm bezwecken willst. Da es so wie du es vorhast nicht geht muss ein anderer Weg gefunden werden. z.B. -Du erzeugts die Linie komplett mit VBA -du verwendest den Event "ObjectAdded" -oder eine Kombination Schreib doch mal was du machen willst. Stelli ------------------ Warum lisp'eln wenn's auch anders geht.  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Martin Kugler2 Mitglied
 Beiträge: 5 Registriert: 25.10.2005
|
erstellt am: 25. Okt. 2005 21:11 <-- editieren / zitieren --> Unities abgeben:         
Hallo ! Ich möchte das der Anwender die Möglichkeit erhält von einem Userform ausgehend einen Polygonzug zu zeichnen. Die Daten dieses Polygonzuges (Länge, ...) möchte ich dann weiterverwenden. Ich habe es bereits so probiert: " Dim objEnt As AcadLWPolyline Dim dblStart(0 To 3) As Double Dim dblNew(0 To 1) As Double Dim lngLastVertex As Long Dim VarPickFirst As Variant Dim VarPickSecond As Variant Dim varPick As Variant Dim varWCS As Variant Me.Hide With ThisDrawing.Utility VarPickFirst = .GetPoint(, vbCr & "Klick den Anfangspunkt: ") VarPickSecond = .GetPoint(VarPickFirst, vbCr & "Zweiter Punkt: ") dblStart(0) = VarPickFirst(0): dblStart(1) = VarPickFirst(1) dblStart(2) = VarPickSecond(0): dblStart(3) = VarPickSecond(1) If ThisDrawing.ActiveSpace = acModelSpace Then Set objEnt = ThisDrawing.ModelSpace.AddLightWeightPolyline(dblStart) Else Set objEnt = ThisDrawing.PaperSpace.AddLightWeightPolyline(dblStart) End If objEnt.Update ... " Das funktioniert auch, aber ich kann damit leider nur gerade Linien zeichnen. Mit der Funktion "_pline" kann man ja auch Kreisbogen und andere Krümmungen in den Polygonzug einbringen. Und die brauche ich umbedingt Deswegen wollte ich es mit "ThisDrawing.SendCommand" probieren. Was hat es denn mit dem Event "ObjectAdded" auf sich? Viele Dank für deine Hilfe Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 25. Okt. 2005 22:10 <-- editieren / zitieren --> Unities abgeben:          Nur für Martin Kugler2
Hallo Martin, dass du eine Polylinie mit Radien zeichnen willst hab ich schon verstanden. Eigentlich meinte ich den Grund aus dem du das machen willst. Man bekommt das von dir beschriebene Szenario schon über Klimmzüge ungefähr hin, aber vielleicht wäre eine andere Lösung ohne Klimmzüge besser. Morgen kann ich dir ein Beispiel geben wie das mit dem Klimmzug gemeint ist. Vielleicht schilderts du inzwischen mal deine Aufgabenstellung Stelli ------------------ Warum lisp'eln wenn's auch anders geht.  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Martin Kugler2 Mitglied
 Beiträge: 5 Registriert: 25.10.2005
|
erstellt am: 26. Okt. 2005 08:25 <-- editieren / zitieren --> Unities abgeben:         
Hallo Stelli ! Wir sind dabei eine Art Wizzard zu programmieren, mit welchem der Anwender geführt wird und dabei verschiedene Eingaben machen soll. Unter anderem soll er eben auf einer bereits existierenden Karte mit dem Polygonzug einen Weg einzeichnen. Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 26. Okt. 2005 12:17 <-- editieren / zitieren --> Unities abgeben:          Nur für Martin Kugler2
Hallo Martin, ich hab da mal einen Lösungsansatz. Damit kannt du in einer Form per Button die Funktion Polylinie ausführen. Wurde die Linie gezeichnet werden in der Form die Koordinaten mit Bulgefaktor und die Länge angezeigt. dvb - siehe Anlage
Code:
' ** Modul mit Funktionsstart Option Explicit Public vgbo_Zeichnen As Boolean Public ogac_Polyline As AcadLWPolyline Public vglo_AnzahlEntity As LongSub Polylinie_mit_Form() frmPolylinie.Show End Sub ' UserForm mit Button und Listenfeld Option Explicit Private Sub BT_PolyLinieZeichnen_Click() ' Flag setzen => Zeichnen wurde gewählt vgbo_Zeichnen = True ' Anzahl der vorhandenen Elemente merken vglo_AnzahlEntity = ThisDrawing.ModelSpace.Count ' Befehl in ACAD anstossen ThisDrawing.SendCommand "_pline" & vbCr ' Form verbergen Me.Hide End Sub Private Sub UserForm_Activate() Dim Punkte As Variant Dim i As Integer ' War zeichnen gewählt If vgbo_Zeichnen = True Then ' Liste löschen Me.lst_Punkte.Clear ' Ist was in der Polylinie If Not ogac_Polyline Is Nothing Then ' Punkte lesen Punkte = ogac_Polyline.Coordinates ' Alle Punkte [Index, Rechts, Hoch, Bulge] ' in Listenfeld schreiben For i = 0 To UBound(Punkte) Step 2 Me.lst_Punkte.AddItem Int(i / 2) + 1 & " " & Format(Punkte(i), "0.000") & " " & Format(Punkte(i + 1), "0.000") & " " & Format(ogac_Polyline.GetBulge(Int(i / 2)), "0.000") Next i ' Länge als Form Caption Me.Caption = "Polylinie mit Länge: " & Format(ogac_Polyline.Length, "0.000") Else Me.Caption = "Nichts gewählt " End If End If ' Flag zurücksetzen vgbo_Zeichnen = False End Sub ' Thisdrawing (Ereignisbehandlung) Private Sub AcadDocument_EndCommand(ByVal CommandName As String) Dim Entity As AcadEntity ' Läuft immer wenn ein Befehl abgeschlossen wurde ' leider nicht bei Abbruch ' Wurde zeichnen gewählt und das Kommando war PLINE If vgbo_Zeichnen = True And CommandName = "PLINE" Then ' Wurde was gezeichnet If ThisDrawing.ModelSpace.Count > vglo_AnzahlEntity Then ' letztes Objekt holen Set Entity = ThisDrawing.ModelSpace(ThisDrawing.ModelSpace.Count - 1) ' Als globales Objekt speichern damit in der Form ' darauf zugegriffen werden kann Set ogac_Polyline = Entity End If ' Form wieder anzeigen frmPolylinie.Show End If End Sub
Finde ich so nicht gut, würde ich anderes machen und das Zeichnen von der Berechnung entkoppeln. Also per Auswahlbutton vorhandene Zeichnungselemente für verschiedne Funktionen wählen. Willst du etwas konstruieren, sollest du nur die Punkte und Parameter in der Form abfragen und dann per VBA zeichnen. Stelli ------------------ Warum lisp'eln wenn's auch anders geht.  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Martin Kugler2 Mitglied
 Beiträge: 5 Registriert: 25.10.2005
|
erstellt am: 26. Okt. 2005 15:28 <-- editieren / zitieren --> Unities abgeben:         
|
Martin Kugler2 Mitglied
 Beiträge: 5 Registriert: 25.10.2005
|
erstellt am: 27. Okt. 2005 10:59 <-- editieren / zitieren --> Unities abgeben:         
Hallo Stelli! Ich hab jetzt ein neues Problem mit meinem Programm: Wenn ich die Funktion so ausführe wie du sie mir zugesand hast und danach aus dem gleichen Form heraus die Funktion "ThisDrawing.Utility.GetEntity" oder "ThisDrawing.Utility.GetPoint" ausführe, zeigt er mir auf der ACAD Arbeitsfläche keinen Cursor an und ich kann kein Objekt auswählen. Oder er bringt mir die Fehlermeldung: "Die Methode GetPoint für das Object IACADUtility ist fehlgeschlagen" Hast du eine Idee woran das liegen könnte. Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 27. Okt. 2005 12:23 <-- editieren / zitieren --> Unities abgeben:          Nur für Martin Kugler2
Hallo Martin, wenn du die Form (die hört sich halt besser an) mit frmMeineForm.show startes wird sie Modal angezeigt. Das heisst du kannt nur Eingaben in dieser Form machen. Willst du was in AutoCAD bewegen, musst du die Form entladen (unload frmMeineForm) oder verbergen (frmMeineForm.hide). Dann kannt du in AutoCAD wieder Eingaben machen und der Cursur erscheint.
Code:
Private Sub bt_Punkt_Click() Dim punkt As Variant Me.Hide punkt = ThisDrawing.Utility.GetPoint(, Chr$(10) & "Bitte Punkt klicken: ") Me.Show End Sub
Übringens musst du bei .GetPoint eine Fehlerbehandlung einbauen für den Fall das der Benutzer nicht das macht was er soll und einfach z.B. ESC drückt.Stelli ------------------ Warum lisp'eln wenn's auch anders geht.  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 27. Okt. 2005 13:48 <-- editieren / zitieren --> Unities abgeben:          Nur für Martin Kugler2
Zitat: Original erstellt von Stelli1: wenn du die Form (die hört sich halt besser an) mit
Zitat: frmMeineForm.show startes wird sie Modal angezeigt.
genau, und wenn du die Form mit: Code:
frmMeineForm.show 0 'oder auch false für 0
startest, wird sie nonmodal angezeigt;-)Gruss Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 27. Okt. 2005 14:54 <-- editieren / zitieren --> Unities abgeben:          Nur für Martin Kugler2
Zitat: Original erstellt von startrek: [QUOTE]Original erstellt von Stelli1: [b]wenn du die Form (die hört sich halt besser an) mit
Zitat: frmMeineForm.show startes wird sie Modal angezeigt.
genau, und wenn du die Form mit: Code:
frmMeineForm.show 0 'oder auch false für 0
startest, wird sie nonmodal angezeigt;-)...[/B][/QUOTE] dann hast du ein Problem bei der EIngabe von Werten. Stelli ------------------ Warum lisp'eln wenn's auch anders geht.  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |