Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Autodesk Map 5, VBA-Erweiterung, interessantes Rätsel

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 wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
Autor Thema:  Autodesk Map 5, VBA-Erweiterung, interessantes Rätsel (1512 mal gelesen)
hendersson
Mitglied
GeoInformatiker


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

Beiträge: 27
Registriert: 12.08.2004

erstellt am: 26. Okt. 2004 18:01    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 liebe Gemeinde,
ich habe heute ein recht interessantes Problem, mit dem ich absolut nicht klar komme. Ich gebe Euch am besten eine Beschreibung und entsprechenden Code dazu.
Wir arbeiten an einer Applikation für ein Vermessungsbüro, bei der das INIT-modul zu Beginn nach einem Zeichnungsnamen fragt und aus dem übergebenen Wert dann den Pfadnamen für den Alias macht und die Zeichnung entsprechend in das Projekt einbindet. Im nächsten Schritt hat der User dann die Möglichkeit, über einen Zaun (kreuzen) den Auswahlsatz für seine Zeichnung zu bestimmen.
Jetzt das Problem: Wenn ich Autocad (Map) neu starte und den Befehl zur Init ausführe, kommt NACH dem Standarddialog für den Dateinamen die Meldung, daß in der aktuellen Zeichnung noch ein Befehl aktiv sei.  Mit mehrerem Drück von RETURN geht es dann weiter.
Ich kann mir keinen Reim darauf machen, aber vielleicht Ihr???

Eine Besonderheit gibt es noch: Unsere VBA-Befehle haben wir in einer LISP - Datei aufgeführt, damit diese auch mit der RETURN-Taste wiederholt werden können (Wichtig: Kurzes Beispiel ganz unten).

Vielleicht weiß auch noch jemand, wie ich mir die Zeile

  ThisDrawing.SendCommand "ADEQVIEWDWGS" & vbCr

sparen und den Befehl in VBA umsetzen kann??? Bin dankbar für jeden Hinweis, zumal ich in diesem SendCommand auch die Fehlerquelle vermute (zusammen mit den LISP-Einbindungen unserer Befehle).

Jetzt noch der Code:

Public Sub ArbeitsbereichInit()

  Dim strAliasnamen, strQuelldatei, strQuellpfad, strBearbeitung As String
  Dim alsAlias As Alias
  Dim amapAcadMap As AcadMap
  Dim intIndex As Integer
  Dim booAliasOK As Boolean
     
  'setzt den Vorgabewert für booAliasOK auf FALSE
  booAliasOK = False
 
  'Verbindet die aktuelle Zeichnung mit dem Projekt
  Set amapAcadMap = ThisDrawing.Application.GetInterfaceObject("AutoCADMap.Application")

  'gibt den Aliasnamen vor
  strAliasnamen = "QUELLZEICHNUNGEN"
 
 
'''Abfrage nach Quellzeichnung
'''
  If amapAcadMap.Projects(ThisDrawing).DrawingSet.Count = 0 Then
      frmQuelldatei.Show
     
      'Übergibt den eingegebenen Dateinamen in eine Bearbeitungsvariable
      strBearbeitung = frmQuelldatei.textboxQuelldatei
     
      ''Prüft jedes Zeichen der Dateiangabe ausgehend von rechts und trennt die
      ''Angabe in Dateinamen und -pfad, wenn ein "\" gefunden wird
      ''
      intIndex = Len(strBearbeitung)
      While intIndex > 1

        If Mid(strBearbeitung, intIndex, 1) = "\" Then
            strQuelldatei = Mid(strBearbeitung, intIndex + 1)
            strQuellpfad = Mid(strBearbeitung, 1, Len(strBearbeitung) - Len(strQuelldatei))
            'Sprungbefehl zur Marke abfragebreak:
            GoTo abfragebreak
        End If
       
        intIndex = intIndex - 1
     
      Wend
     
'Sprungmarke
abfragebreak:
     
      Set alsAlias = amapAcadMap.Aliases.Add(strAliasnamen, strQuellpfad)
      amapAcadMap.Projects(ThisDrawing).DrawingSet.Add (strAliasnamen & ":\" & strQuelldatei)
 
  End If

'''Zoomt die Zeichnung auf die Grenzen
'''
  ThisDrawing.SendCommand "ADEQVIEWDWGS" & vbCr

'''---------------------------------------------------------
'''Ab hier: Selektion der zu bearbeitenden Zeichenelemente per
'''Auswahlfenster auf dem Bildschirm
'''

'''AcadMAP- und Projekt-Objekt
  Dim prj As Project
  Set prj = amapAcadMap.Projects(ThisDrawing)

'''Abfrage generieren
  'Dim qry As Query
  'Set qry = prj.CurrQuery
 
  ''Löscht aktuelle Abfrage
  prj.CurrQuery.Clear
 
  ''Leere Abfragedefinition holen
  Dim mainqrybr As QueryBranch
  'Set mainqrybr = qry.QueryBranch
  Set mainqrybr = prj.CurrQuery.QueryBranch
 
  ''Layout der Abfrage definieren
  Dim qrylf As QueryLeaf
  Set qrylf = mainqrybr.Add(kLocationCondition, kOperatorAnd)

 
'''Auswahl der Koordinaten
 
  ''Koord. für das Abfragefenster
  Dim mapu As MapUtil
  Dim boolVal As Boolean
  Dim wind As WindowBound
 
  ''Definition des Bearbeitungsausschnittes am Bildschirm
  Dim pktPunkt1, rectBox1 As Variant
     
  'User definiert in der Zeichnung den Bearbeitungsbereich mit einem Rectangle im Modus "kreuzen"
  'ThisDrawing.Activate
  pktPunkt1 = ThisDrawing.Utility.GetPoint(, "Linken unteren Punkt definieren...")
  rectBox1 = ThisDrawing.Utility.GetCorner(pktPunkt1, "Rechten oberen Punkt definieren...")
 
  Set mapu = prj.MapUtil
  Set wind = mapu.NewWindow(mapu.NewPoint3d(pktPunkt1(0), pktPunkt1(1), 0), mapu.NewPoint3d(rectBox1(0), rectBox1(1), 0))

  'Legt das zuvor definierte Fenster als Bearb.-Bereich fest
  boolVal = qrylf.SetLocationCond(kLocationCrossing, wind)

  'Legt die Modus der Abfrage fest als Zeichnung
  prj.CurrQuery.Mode = kQueryDraw
 
  'Definiert die Abfrage
  boolVal = prj.CurrQuery.Define(mainqrybr)
 
  'Startet die Abfrage
  boolVal = prj.CurrQuery.Execute
 
  'boolVal = KePlProject.CurrQuery.Execute
  ThisDrawing.Application.ZoomExtents

End Sub

__________________________
Der Code-Schnippel aus der LSP-Datei:

;; Arbeitsbereich definieren
( defun c:TdITArbeitsbereichDef()
  (vl-vbarun "Subs.TdITArbeitsbereichDef")
)
__________________________

Viel Spaß damit !!!

------------------
----------------------------
  .~.
  /V\  L  I  N  U  X
/( )\ >Phear the Penguin<
^^-^^

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

hendersson
Mitglied
GeoInformatiker


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

Beiträge: 27
Registriert: 12.08.2004

erstellt am: 26. Okt. 2004 18: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

...ist es möglich, dass das Problem mit einer goto Anweisung innerhalb einer IF-Abfrage zusammenhängt, die wiederum in einer WHILE-WEND-Schleife hängt ???

------------------
----------------------------
  .~.
  /V\  L  I  N  U  X
/( )\ >Phear the Penguin<
^^-^^

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

wild_thing
Mitglied



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

Beiträge: 52
Registriert: 29.09.2004

erstellt am: 26. Okt. 2004 18:20    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 hendersson 10 Unities + Antwort hilfreich

keine Ahnung, versuchs halt mal mit do while und exit do ;-)

------------------
wild greet[h]ings

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Die Phönizier haben das Geld erfunden - aber warum so wenig?
(Johann Nepomuk Nestroy)

erstellt am: 26. Okt. 2004 21:04    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 hendersson 10 Unities + Antwort hilfreich

Wenn das mit dem Goto auch nicht so nach meinem Geschmack ist (ich benutze lieber kein Goto mehr, in VB7 ist es sowieso verdunstet, soweit ich weiss), so glaube ich doch nicht, dass da der Fehler liegt.

Ich habe aber ein anderes Problem: Ich kenne mich mit MAP kaum aus. Im Moment hätte ich nur ein MAP 2004 zur Verfügung. Ich nehme an, dass MAP 5 die Vorgängerversion ist (2002), oder sehe ich das falsch?

Gruß, Axel Strube-Zettler

------------------
(defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat
Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze

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

Cadzia
Ehrenmitglied V.I.P. h.c.
CAD/Grafik-Dienstleister



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

Beiträge: 2917
Registriert: 02.07.2004

erstellt am: 26. Okt. 2004 21:13    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 hendersson 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von mapcar:

Ich habe aber ein anderes Problem: Ich kenne mich mit MAP kaum aus. Im Moment hätte ich nur ein MAP 2004 zur Verfügung. Ich nehme an, dass MAP 5 die Vorgängerversion ist (2002), oder sehe ich das falsch?

Nö - genau richtig. MAP5 und MAP6 basieren auf Acad 2002.

------------------
Grüße Karin

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

BloodyMess
Mitglied
Applicationingenieur


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

Beiträge: 604
Registriert: 06.06.2002

AutoCAD Map 3D 2005
Win XP pro

erstellt am: 30. Okt. 2004 17:04    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 hendersson 10 Unities + Antwort hilfreich

Hallo Hendersson,

was mir so beim ersten drüberschauen aufgefallen ist.

Code:
Dim strAliasnamen, strQuelldatei, strQuellpfad, strBearbeitung As String

deklariert strAliasnamen, strQuelldatei, strQuellpfad als Variant und nicht wie sicherlich vorgesehen als String.

Was passiert eigentlich wenn der Alias schon vorhanden ist? Dein Programm wird sicher crashen!
Ein Alias ist für mich dazu da um Netzlaufwerken einen Pfad zu geben, da standardmaessig nur der Alias auf C: gesetzt ist und man nur ueber den Alias an diese Laufwerke kommt.

Hast Du mal versucht eine Zeichnung in einem Unterverzeichnis mit deinem Code zu oeffnen? Es crasht!

Code:
Sub test()
Dim amapAcadMap As AcadMap

Set amapAcadMap = ThisDrawing.Application.GetInterfaceObject("AutoCADMap.Application")
amapAcadMap.Projects(ThisDrawing).DrawingSet.Add ("C:\BJPrinter\Drawing_bear.dwg")

ThisDrawing.SendCommand "ADEQVIEWDWGS" & vbCr

End Sub



Dieser Code macht genau das selbe, wie Deiner, nur das er nicht ueber den Alias geht.

Deinen yweiten Teil hab ich mir noch nicht angeschaut, vielleicht spaeter.

Mit deinem Befehl, der noch aktiv ist. Da solltest Du mal schauen, welcher Befehl das ist. Es hoert sich sehr nach einem SENDCOMMAND an, welches kein Enter bekommen hat oder ein anderer Befehl, der noch auf eine Eingabe wartet.

Einen Autocaddialog aus VBA ohne SENDCOMMAND abzusetzen wuesst ich auch nicht, wie das sonst gehen sollte.

schoenes verlaengertes WE

Gruss TP

------------------

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)2024 CAD.de | Impressum | Datenschutz