| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: Unterscheiden zwischen Blöcken und externen Referenzen (1372 mal gelesen)
|
Gloem Mitglied Geoinformatiker
 
 Beiträge: 181 Registriert: 07.12.2007 Windows 10 - 64 Bit, mindestens 16 GB RAM <P>AutoCAD Map 2020, VBA, Dot-Net
|
erstellt am: 26. Mrz. 2010 18:52 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich möchte dem Anwender per editor.getEntity eine BlockReferenz auswählen lassen, jedoch bekomm ich hier auch Externe Referenzen. Kann man das irgendwie einschränken? Code: ' Blockreferencen auch auf gesperrten Layern und Keywords: Name Dim getBlockReferenceOptions As New PromptEntityOptions(ControlChars.CrLf & "Bitte eine der zu ändernden Blockreferenzen auswählen oder: ") getBlockReferenceOptions.SetRejectMessage(ControlChars.CrLf & "Es sind nur Blockreferenzen erlaubt") getBlockReferenceOptions.AddAllowedClass(GetType(BlockReference), False) getBlockReferenceOptions.AllowObjectOnLockedLayer = True getBlockReferenceOptions.AllowNone = False getBlockReferenceOptions.Keywords.Add("Name") ' Auswahl eine der Blockreferenzen durch den Benutzer Dim getBlockReferenceResult As PromptEntityResult = editor.GetEntity(getBlockReferenceOptions)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
Ex-Mitglied
|
erstellt am: 26. Mrz. 2010 20:22 <-- editieren / zitieren -->
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 |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |