| | |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | |  | Inventor Schulung mit IHK-Zertifizierung , ein Kurs (bis zu 100% förderbar mit Bildungsgutschein)
|
|
Autor
|
Thema: Auswahl zweier Zeichenelemente durch Benutzer (943 mal gelesen)
|
herhans Mitglied
 Beiträge: 8 Registriert: 31.05.2010 ACAD 2007, .net, C#
|
erstellt am: 02. Mrz. 2011 11:20 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich würde gerne den Benutzer zwischen zwei (manchmal auch mehr) Zeichenelementen (i.d.R. Linien) wählen lassen. Ich habe versucht die Auswahl über einen entsprechenen SelectionFilter einzuschränken, auf folgende Weise (der Gedanke ist, dass ich nach den Handle der Linien mit einem Ausschließenden-Oder verknüpfe): Code: TypedValue[] selFilElems = new TypedValue[4]; selFilElems[0] = new TypedValue((int)DxfCode.Operator, "<XOR"); selFilElems[1] = new TypedValue((int)DxfCode.Handle, firstHandle); selFilElems[2] = new TypedValue((int)DxfCode.Handle, secondHandle); selFilElems[3] = new TypedValue((int)DxfCode.Operator, "XOR>");PromptSelectionResult selRes = editor.GetSelection(new SelectionFilter(selFilElems));
Das Problem ist, dass ich nicht auswählen kann und der Status in selRes direkt Error ist. Möglicherweise ist mein Gedankengang auch Blödsinn. Würde mich über Tipps sehr freuen. Besten Dank! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
       

 Beiträge: 4201 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 02. Mrz. 2011 12:39 <-- editieren / zitieren --> Unities abgeben:          Nur für herhans
Hallo, auf die Handle kannst du keinen Selectionset filtern. Darum solltest du die Elemente ausleuchten und nach der Objektwahl (ohne den Handle-Filter) prüfen, ob eines der Objekte eine der zulässigen Handles ist. Falls nicht .. das ganze noch einmal. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
Ex-Mitglied
|
erstellt am: 02. Mrz. 2011 23:26 <-- editieren / zitieren -->
Hi, probier mal dieses Beispiel! Es zeigt die Möglichkeit, mit einem Event die aktuelle Objektwahl-Klicks zu überwachen und bei Bedarf 'nicht erlaubte' Elemente bereits beim Klick des Selektierens wieder wegzufiltern. In diesem Beispiel wird zwei mal selektiert. - beim ersten Select zeigst Du die Elemente, die nachher 'als zu selektieren erlaubt sein sollten' - beim zweiten Select siehst Du dann die Auswirkung, dass nur zuvor selektierte Elemente auch jetzt 'angenommen werden'
Code: <Autodesk.AutoCAD.Runtime.CommandMethod("CADde_getSelectionFilteredToHandle")> _ Public Shared Sub CADde_getSelectionFilteredToHandle() Dim tAcadDoc As ApplicationServices.Document = ApplicationServices.Application.DocumentManager.MdiActiveDocument Dim tAcadDocED As EditorInput.Editor = tAcadDoc.Editor Try 'zuerst selektieren wir (nur fürs Beispiel) die Elemente, die bei der ' nächsten Selection 'erlaubt' sein sollen Dim tPromptAllowed As EditorInput.PromptSelectionOptions = New EditorInput.PromptSelectionOptions tPromptAllowed.MessageForAdding = "Erlaubte Elemente wählen: " Dim tSelResAllowed As EditorInput.PromptSelectionResult = tAcadDocED.GetSelection(tPromptAllowed) If (tSelResAllowed.Status = EditorInput.PromptStatus.OK) AndAlso (tSelResAllowed.Value.Count > 0) Then 'dann speichern wir die 'erlaubten/wählbaren' Elemente pAllowedObjectIDs = tSelResAllowed.Value.GetObjectIds 'und jetzt die Testselektion, um zu sehen, ob tatsächlich auf obige Elemente gefiltert wird Try AddHandler tAcadDocED.SelectionAdded, AddressOf SelectionAddedHandler Dim tSelRes As EditorInput.PromptSelectionResult = tAcadDocED.GetSelection() If (tSelRes.Status = EditorInput.PromptStatus.OK) AndAlso (tSelRes.Value.Count > 0) Then Debug.Print(tSelRes.Value.Count.ToString & " Objekte selektiert") End If Catch ex2 As Exception Call MsgBox("Unbekannter Fehler aufgetreten" & vbNewLine & ex2.Message) Finally RemoveHandler tAcadDocED.SelectionAdded, AddressOf SelectionAddedHandler End Try Else Debug.Print("nix gewählt") End If Catch ex As Exception Call MsgBox("Unbekannter Fehler aufgetreten" & vbNewLine & ex.Message) End Try End Sub Private Shared pAllowedObjectIDs() As DatabaseServices.ObjectId = Nothing
Private Shared Sub SelectionAddedHandler(ByVal sender As Object, ByVal e As EditorInput.SelectionAddedEventArgs) If (pAllowedObjectIDs IsNot Nothing) AndAlso (pAllowedObjectIDs.Count > 0) AndAlso (e.AddedObjects.Count > 0) Then Dim tSelectedObjectIDs() As DatabaseServices.ObjectId = e.AddedObjects.GetObjectIds For i As Integer = tSelectedObjectIDs.GetUpperBound(0) To tSelectedObjectIDs.GetLowerBound(0) Step -1 If Not pAllowedObjectIDs.Contains(tSelectedObjectIDs(i)) Then 'dieses Element steht nicht in der Liste der zugelassenen Objekte ==> also tschüss e.Remove(i) End If Next End If End Sub
HTH, - alfred -
------------------ www.hollaus.at |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |