Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Auswahl zweier Zeichenelemente durch Benutzer

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Auswahl zweier Zeichenelemente durch Benutzer (799 mal gelesen)
herhans
Mitglied


Sehen Sie sich das Profil von herhans an!   Senden Sie eine Private Message an herhans  Schreiben Sie einen Gästebucheintrag für herhans

Beiträge: 8
Registriert: 31.05.2010

ACAD 2007, .net, C#

erstellt am: 02. Mrz. 2011 11:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 02. Mrz. 2011 12:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für herhans 10 Unities + Antwort hilfreich

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz