Hi
Danke für deine Idee war zwar auch schon auf Boundary gekommen
hatte aber ka wie das mit sendcommand zu bewerkstelligen ist.
Folgende Funktion macht jetzt das was es soll.(unter Vb.Net)
Der eine Fehler war in der Reihenfolge des Boundary Kommandos.
der andere im xy Koordinatenstring darf kein Komma in den Zahlen und dazwischen kein Leerzeichen sein. Mit cstr() geht das nicht.
Das mit NOMUTT ist gefährlich, da wenn der Befehl abbricht
Autocad in einem undefinierbaren zustand bleibt und sich die
Befehlsanzeige nicht mehr einschalten läßt.
Function Boundary(ByRef objAcadDWG As AcadDocument, ByVal XYpoint As Object) As AcadLWPolyline
Dim PrevTotal As Long
Dim XYstring As String
Try
'Meldungen unterdrücken
' objAcadDWG.SetVariable("NOMUTT", 1)
'Anzahl der Elemente im Modelspace
PrevTotal = objAcadDWG.ModelSpace.Count
'Leerzeichen im String und Komma in den Zahlen führt zu einem Fehler
XYstring = Trim(Str(XYpoint(0))) & "," & Trim(Str(XYpoint(1)))
'Befehlsablauf
'._-Boundary
'Internen Punkt angeben oder [Optionen]: O
'Option eingeben [Umgrenzungslinien/Inseln erkennen/Objekttyp]: O
'Umgrenzungsobjekttyp eingeben [Region/Polylinie] <Polylinie>: P
'Option eingeben [Umgrenzungslinien/Inseln erkennen/Objekttyp]: U
'Bestimmen Sie einen Satz für Umgrenzung [Neu/Alles] <Alles>: N
'Objekte(wählen)
'Option eingeben [Umgrenzungslinien/Inseln erkennen/Objekttyp]:
'Internen Punkt angeben oder [Optionen]:
objAcadDWG.SendCommand("._-boundary" & vbCr & XYstring & vbCr & "O" & vbCr & "O" & vbCr & "P" & vbCr & "U" & vbCr & "N" & vbCr & vbCr & vbCr & vbCr)
If objAcadDWG.ModelSpace.Count > PrevTotal Then
'Das zuletzt erzeugte zurückgeben
Boundary = objAcadDWG.ModelSpace.Item(objAcadDWG.ModelSpace.Count - 1)
End If
Catch ex As Exception
Finally
Boundary = Nothing
'Meldungen wieder einschalten
' objAcadDWG.SetVariable("NOMUTT", 0)
End Try
End Function
Wenn du noch mehr solcher codesnippets hast immer her damit *g*
------------------
mfg
Klaus Raykowski
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP