Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  über API Kantenzug auswählen

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 SOLIDWORKS
  
AMB
Autor Thema:  über API Kantenzug auswählen (280 mal gelesen)
P.Reidel
Mitglied



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

Beiträge: 53
Registriert: 17.12.2004

SolidWorks 2007

erstellt am: 16. Dez. 2005 12:36    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 APIler,

ich habe ein kleines Problem mit einer Programmierung:
es sollen mehrere zusammenhängende Kanten markiert werden, aber der Benutzer soll nur den Anfangs- und End-Eckpunkt am 3D-Modell anwählen.
Zum besseren Verständnis: Der Kanztenzug liegt auf einer Ebene im Raum.

Ich habe folgenden Ansatz:
Es werden 2 Vertices (per Hand) markiert, die über den selectionManager gespeichert werden.
Jetzt fange ich mit dem ersten Vertex an und suche über Vertex.GetEdges die dazugehörigen Edges.
Ich wollte über Edge.GetStartVertex und Edge.GetEndVertex die Anfangs- und End-Vertices herausfinden und über Abstandsmessung mit Part.ClosestDistance (mit der Ebene) herausfinden, welche(r) Edge/Vertex richtig ist und mit dem weitermachen, bis ich auf den zweiten (per Hand markierten) Vertex treffe.
Das Problem dabei ist, dass über Edge.GetStart/EndVertex nicht zwangsläufig zwei Vertices ausgegeben werden (mangels Richtung der Edge).

Ein anderer Weg ist nach den Edges erst einmal die CoEdges (über Edge.GetCoEdges) zu suchen und über CoEdge.GetCurveParams den Anfangs- und End-Punkt zu suchen. Damit habe ich aber nur ein paar Koordinaten und noch kein Objekt, welches ich in Part.ClosestDistance verwenden könnte. Ich habe auch noch keinen Befehl gefunden, mit dem ich aus diesen Koordinaten den dazugehörigen Vertex bekomme oder sonst den Abstand eines Punktes zur Ebene ausmessen kann.

Ich hoffe, da blickt irgendjemand noch durch und hat ein paar Ansätze für mich. Ich wäre sehr dankbar für alle möglichen Ideen.

Petra

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bastl braucht hilfe
Mitglied



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

Beiträge: 32
Registriert: 09.08.2005

erstellt am: 16. Dez. 2005 13:22    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 P.Reidel 10 Unities + Antwort hilfreich

Hallo Perta!


Hatte vor kurzer Zeit ein ähnliches Problem, damals wollte ich Geometrie auf einer Oberfläche greifen.
Hierzu bin ich über den Loop, also den Kantenzug gegangen!

Hierzu gibt es in der API-Hilfe folgendes Beispiel:

Select Loop of Edges Example (VB)
This example shows how to use various geometry- and topology-related APIs to select a set of edges that form a closed loop around a face.

'------------------------------------------------------------------

'

' Problem:

'      In the SolidWorks user-interface for parts and assemblies,

'      you can select an option to select a set of edges that form

'      a closed loop exists. If there is a choice of loops, an icon is

'      displayed to allow choosing between the alternatives.

'      In general, there is a choice if the edge is

'      shared between two faces, as in an edge on a solid

'      body.

'

' Preconditions:

'      (1) Part or assembly is open.

'      (2) Edge is the first selected item.

'      (3) Optionally, a face, adjacent to the edge

'          is the second selected item.

'

' Postconditions: Loop of edges on face is selected.

'

'------------------------------------------------------------------

Option Explicit

Sub SelectLoop _

( _

    swApp As SldWorks.SldWorks, _

    swModel As SldWorks.ModelDoc2, _

    swLoop As SldWorks.Loop2, _

    swSelData As SldWorks.SelectData _

)

    Dim vEdgeArr                As Variant

    Dim vEdge                  As Variant

    Dim swEdge                  As SldWorks.Edge

    Dim swEnt                  As SldWorks.entity

    Dim bRet                    As Boolean

   

    vEdgeArr = swLoop.GetEdges

    Debug.Assert Not IsEmpty(vEdgeArr)

    For Each vEdge In vEdgeArr

        Set swEdge = vEdge

        Set swEnt = swEdge

       

        bRet = swEnt.Select4(True, swSelData): Debug.Assert bRet

    Next

End Sub

Sub main()

    Dim swApp                  As SldWorks.SldWorks

    Dim swModel                As SldWorks.ModelDoc2

    Dim swSelMgr                As SldWorks.SelectionMgr

    Dim swEdge                  As SldWorks.Edge

    Dim swFace                  As SldWorks.face2

    Dim swSelData              As SldWorks.SelectData

    Dim vCoEdgeArr              As Variant

    Dim vCoEdge                As Variant

    Dim swCoEdge                As SldWorks.CoEdge

    Dim swLoop                  As SldWorks.Loop2

   

    Set swApp = Application.SldWorks

    Set swModel = swApp.ActiveDoc

    Set swSelMgr = swModel.SelectionManager

    Set swEdge = swSelMgr.GetSelectedObject5(1)

    Set swSelData = swSelMgr.CreateSelectData

    Set swFace = swSelMgr.GetSelectedObject5(2)

       

    swModel.ClearSelection2 True

   

    vCoEdgeArr = swEdge.GetCoEdges

    Debug.Assert Not IsEmpty(vCoEdgeArr)

   

    ' 1 or 2    coedges for an edge on a surface body

    ' 2        coedges for an edge on a solid body

    Debug.Assert UBound(vCoEdgeArr) >= 0

   

    If 0 = UBound(vCoEdgeArr) Then

        Set swCoEdge = vCoEdgeArr(0)

       

        ' no ambiguity, so select

        Set swLoop = swCoEdge.GetLoop

       

        SelectLoop (swApp, swModel, swLoop, swSelData)

        Exit Sub

    End If

   

    ' 2 coedges, so must have face to resolve ambiguity

    Debug.Assert Not swFace Is Nothing

   

    For Each vCoEdge In vCoEdgeArr

        Set swCoEdge = vCoEdge

       

        If swEdge Is swCoEdge.GetEdge Then

            Set swLoop = swCoEdge.GetLoop

           

            If swFace Is swLoop.GetFace Then

                SelectLoop (swApp, swModel, swLoop, swSelData)

            End If

        End If

    Next

End Sub

'--------------------------------------------

Select Loop ist der Aufruf der Funktion Select Loop!
Das Beispiel läuft nicht, du musst noch die Variablen die in Select Loop übergeben werden sollen in der Funktion einbringen, die Zeilenumbrüche führen im Beispiel zu Fehlern!
Also folgendes anstelle der vielen Zeilenumbrüche verwenden!
Select loop(swApp, swModel, swLoop, swSelData)

Wie gesagt, geh über den Loop und schau alle Kanten durch, prüfe dann jede Kante und schau ob sie mit deiner Auswahl zu tun hat!

Hoffe konnte dir etwas Helfen!

Gruß Sebastian

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

P.Reidel
Mitglied



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

Beiträge: 53
Registriert: 17.12.2004

SolidWorks 2007

erstellt am: 19. Dez. 2005 09:08    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 Sebastian,

danke für deine schnelle Antwort, ich werde deinen Vorschlag mal testen.

Petra

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

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)2024 CAD.de | Impressum | Datenschutz