Hi,
Grundübel für diese Thematik ist, dass die Information, ob es ein XRef ist oder nicht, nicht in der BlockReference ersichtlich ist, damit geht auch kein Filter, weil es keine 'IchBinXRef'-Eigenschaft gibt. Diese Information steht nur in der Blockdefinition und auf diese Info's kann nicht gefiltert werden.
Wenn Du bei der Selektion das Highlighting der Objektwahl verhindern willst, dann hab ich nur eine (dumme, aber einfache) Idee:
- BlockTable durchscannen durch alle Blockdefinitionen
- beurteilen, welche XRef's (bzw. Layouts oder unnamed) sind und welche nicht, dabei die Blocknamen sammeln
- in SelectionSet einen Filter einbauen, der diese Blocknamen prüft
Beispiel: hier werden die Blockreferenzen (nur aus Modellbereich) mit dem Blocknamen 'A', 'B', 'C' und 'X' zulässig, alle anderen Objektarten und alle anderen Blockreferenzen werden schon von vornherein ausgeschlossen (und damit auch kein Highlight)
Code:
Dim tSelRes As EditorInput.PromptSelectionResult
Dim tDxfFilter As ResultBuffer = New DatabaseServices.ResultBuffer
'filter mal zurechtlegen
tDxfFilter.Add(New TypedValue(DxfCode.LayoutName, "Model")) 'nur Modellbereich
tDxfFilter.Add(New TypedValue(DxfCode.Start, "INSERT"))
tDxfFilter.Add(New TypedValue(DxfCode.BlockName, "A,B,C,X"))Dim tPromptSelOpts As EditorInput.PromptSelectionOptions = New EditorInput.PromptSelectionOptions
tPromptSelOpts.MessageForAdding = "Objekte hinzufügen"
Dim tSelFilter As New EditorInput.SelectionFilter(tDxfFilter.AsArray)
tSelRes = tAcadDoc.Editor.GetSelection(tPromptSelOpts, tSelFilter)
Eine zweite Variante wäre, einen Event zu bauen, der während des getSelection aktiv ist, die Objektwahl-Hinzufügung abfängt, prüft, ob es sich um ein XRef handelt und wenn ja, dann die Selection dessen canceled.
----------
Ist das Highlighting egal während der Selection, kannst Du ja beim Durcharbeiten der selektierten Elemente immer noch die XRef's rausschmeissen.
HTH, - alfred -
------------------
www.hollaus.at