Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  ThisDrawing.SendCommand

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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


Sehen Sie sich das Profil von Martin Kugler2 an!   Senden Sie eine Private Message an Martin Kugler2  Schreiben Sie einen Gästebucheintrag für Martin Kugler2

Beiträge: 5
Registriert: 25.10.2005

erstellt am: 25. Okt. 2005 16:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Martin Kugler2 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Martin Kugler2 an!   Senden Sie eine Private Message an Martin Kugler2  Schreiben Sie einen Gästebucheintrag für Martin Kugler2

Beiträge: 5
Registriert: 25.10.2005

erstellt am: 25. Okt. 2005 21:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Martin Kugler2 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Martin Kugler2 an!   Senden Sie eine Private Message an Martin Kugler2  Schreiben Sie einen Gästebucheintrag für Martin Kugler2

Beiträge: 5
Registriert: 25.10.2005

erstellt am: 26. Okt. 2005 08:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Martin Kugler2 10 Unities + Antwort hilfreich


polylinie_Mit_maske.dvb.txt


maske.jpg

 
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 Long

Sub 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


Sehen Sie sich das Profil von Martin Kugler2 an!   Senden Sie eine Private Message an Martin Kugler2  Schreiben Sie einen Gästebucheintrag für Martin Kugler2

Beiträge: 5
Registriert: 25.10.2005

erstellt am: 26. Okt. 2005 15:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Stelli !

Danke für deine Hilfe, funktioniert gut, schade das bei einem Abbruch mit ESC das Form nicht wieder erscheint, vielleicht fällt mir dazu noch was ein.

Liebe Grüße
Martin 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Martin Kugler2
Mitglied


Sehen Sie sich das Profil von Martin Kugler2 an!   Senden Sie eine Private Message an Martin Kugler2  Schreiben Sie einen Gästebucheintrag für Martin Kugler2

Beiträge: 5
Registriert: 25.10.2005

erstellt am: 27. Okt. 2005 10:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Martin Kugler2 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 27. Okt. 2005 13:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Martin Kugler2 10 Unities + Antwort hilfreich

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.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Martin Kugler2 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz