Notatka dotycząca dodawania makra z linkiem właściwości dla części zespołu w MPE

Witam wszystkich,

Pracuję nad makrem, aby dodać notatkę związaną z właściwością. Ten funkcjonuje dla pokoju.

Chcę, aby notatka była wstawiana automatycznie dla wszystkich części obecnych  (ze złożenia) w wybranym widoku.

 

Ktoś ma pomysł?

Oto makro i plik, nad którym pracuję.

Z góry dziękujemy za Twoją opinię


exemple.zip

Witam
Najtrudniejszą częścią jest znalezienie i wybranie elementu , na którym należy umieścić strzałkę. Jest na to kilka metod:   GetVisibleEntities2 i SelectByRay (zwykle w celu uniknięcia, ale szybciej w celu zaznaczenia krawędzi sylwetki)
Następnie wszystko, co musisz zrobić, to wstawić adnotację za pomocą:

Set myNote = swModel.InsertNote("$PRPMODEL:""NUMERO_PLAN""")

I zmień położenie notatki za pomocą:

Set myAnnotation = myNote.GetAnnotation
boolstatus = myAnnotation.SetPosition(0.13, 0.11, 0)

 

1 polubienie

Witaj Hieronim,

Dziękujemy za Twoją opinię. Napisałem to makro, ale działa ono w nieskończoność i nie wstawia żądanej nuty.

Czy masz pojęcie o problemie?

 

Opcja jawna
Dim swApp jako SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw jako SldWorks.DrawingDoc
Przyciemnij swView jako SldWorks.view
Dim Comp As SldWorks.Component2
Dim vComps jako wariant
Dim vComp jako wariant
Przyciemnij krawędzie pionowe jako wariant
Przyciemnij vEdge jako wariant
Przyciemnij swEdge jako SldWorks.Edge
Przyciemnij moją notatkę jako obiekt
Przyciemnij moją adnotację jako obiekt
Dim boolstatus As Boolean
Dim swEntity jako SldWorks.Entity


Sub main()
Ustaw swApp = Application.SldWorks
Ustaw swModel = swApp.ActiveDoc
Ustaw swDraw = swModel
Ustaw swView = swDraw.ActiveDrawingView
swModel.ClearSelection2 Prawda
vComps = swView.GetVisibleComponents
Dla każdej kompozycji vComp W kompozycjach vComp
    Ustaw kompozycję = vComp
    vEdges = swView.GetVisibleEntities(Comp, swViewEntityType_e.swViewEntityType_Edge)
    Dla każdej krawędzi wirtualnej w vEdges
        Ustaw swEdge = vEdge
        Ustaw swEntity = swEdge
        swEntity.Select4 Prawda, Nic
            Ustaw myNote = swModel.InsertNote("$PRPMODEL:""NUMERO_PLAN""")
            Ustaw myAnnotation = myNote.GetAnnotation
            boolstatus = myAnnotation.SetPosition(0.13, 0.11, 0)

    Następny
Następny

 

Koniec subwoofera

Spróbuj tego:

Uwaga: Strzałki są umieszczane losowo na największej powierzchni. Aby umieścić je dokładniej, musiałbyś znaleźć współrzędne żądanego  punktu w komponencie, następnie przekształcić w układ współrzędnych złożenia (biorąc pod uwagę rozstrzeloną figurę), a następnie przekształcić w układ współrzędnych widoku. Następnie użyj SelectByRay

Option Explicit
Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swDrawing As SldWorks.DrawingDoc
    Dim swView As SldWorks.View
    Dim swComp As SldWorks.Component2
    Dim swEnt As SldWorks.Entity
    Dim CompCount As Long
    Dim vComps As Variant
    Dim vFaces As Variant
    Dim swFace As SldWorks.Face2
    Dim i As Long
    Dim j As Long
    Dim boolstatus As Boolean
    Dim MaxArea As Double
    Dim swNote As SldWorks.Note
    Dim swAnn As SldWorks.Annotation
    Dim CompNames As Object
    Dim vPos As Variant
    
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swDrawing = swModel
    Set swView = swDrawing.ActiveDrawingView
    Set CompNames = CreateObject("Scripting.Dictionary")
   
    swModel.ClearSelection2 True
    Debug.Assert Not swView Is Nothing

    CompCount = swView.GetVisibleComponentCount
    Debug.Assert CompCount <> 0
    Debug.Print "Nombre de composants = " & CompCount

    vComps = swView.GetVisibleComponents
    For i = 0 To UBound(vComps)
        Set swComp = vComps(i)
        Debug.Print "Fichier du composant " & i & ": " & swComp.GetPathName
        vFaces = swView.GetVisibleEntities2(swComp, swViewEntityType_e.swViewEntityType_Face)
        If Not IsEmpty(vFaces) Then
            Debug.Print "   Ce composant a " & UBound(vFaces) + 1 & " faces visible dans cette vue"
            MaxArea = 0
            For j = 0 To UBound(vFaces)
                Set swFace = vFaces(j)
                If swFace.GetArea > MaxArea Then
                    MaxArea = swFace.GetArea
                    Set swEnt = swFace
                End If
            Next j
            If Not CompNames.Exists(swComp.GetPathName) Or MaxArea > 0.001 Then
                If Not CompNames.Exists(swComp.GetPathName) Then CompNames.Add swComp.GetPathName, 1
                boolstatus = swEnt.Select4(False, Nothing)
                Set swNote = swModel.InsertNote("$PRPMODEL:""NUMERO_PLAN""")
                Set swAnn = swNote.GetAnnotation
                vPos = swAnn.GetPosition
                boolstatus = swAnn.SetPosition(0.18, vPos(1), 0)
            End If
        End If
    Next
End Sub

 

Dziękuję Jerome 

1 polubienie