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