Met een macro, van een Europarlementariër, wil ik het eigendom van de PRT of ASM waarnaar wordt verwezen herstellen

Ik heb een macro gemaakt om een PDF en een DWG van de open MEP in SW te genereren.

Ik maak van de gelegenheid gebruik om het gegenereerde bestand te hernoemen met naam, nummer en hint.

Voor eigenschappen in de MEP gebruik ik Revisie = swModel.CustomInfo("Revisie"), maar welke syntaxis moet ik gebruiken om een eigenschap op te halen uit de PRT of ASM waarnaar in de MEP wordt verwezen.

De macro stelt me in staat om de bestanden afzonderlijk te genereren, of om het aan te roepen met het integratiehulpprogramma om een batch bestanden te verwerken

 

Bij voorbaat dank voor uw antwoorden

Hallo

Ik weet niet zeker of je het rechtstreeks vanuit de MEP kunt doen, maar je kunt de naam van het 3D-model waarnaar wordt verwezen vinden met de functie "GetReferencedModelName()", dit 3D-model openen, de eigenschappen noteren waarin je geïnteresseerd bent, het 3D-model sluiten en vervolgens doorgaan met je verwerking op de MEP, Dit alles natuurlijk op macroniveau.

Vriendelijke groeten

2 likes

Anders een ander voorstel, ik zie dat je de Mycad-tools hebt, en Integratie zou je in staat moeten stellen om al deze functies uit te voeren zonder dat je een macro hoeft te maken.

1 like

Dank u voor uw antwoorden.

Ik beheers macro's niet genoeg om met het voorstel van d.roger aan de slag te gaan.

Met integratie heb ik niet gezien hoe ik pdf of dwg kan genereren. Met Batch Converter werkt het en kan ik de informatie van het onderdeel ophalen!

Maar het is een beetje omslachtig: ik moet Integration starten en vervolgens Batch Converter, en elke keer de lijst met bestanden slepen (niet mogelijk om bijvoorbeeld een lijst met bestanden op te slaan) naar elk hulpprogramma

 

Bedankt allebei, en een fijne dag verder

Hallo

Ongeveer:

Dim sModelName                  As String
Dim ValOut                      As String
Dim ResolvedValOut              As String
Dim sConfigName                 As String
Dim WasResolved                 As Boolean
Dim swModelDocExt               As ModelDocExtension
Dim swCustProp                  As CustomPropertyManager

Sub main()
    
Set swApp = CreateObject("SldWorks.Application")
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
    MsgBox ("Pas de document ouvert")
    Else
        If swModel.GetType <> 3 Then
            MsgBox ("Il ne s'agît pas d'une mise en plan")
        Else
            Set swDraw = swModel
                vSheetName = swDraw.GetSheetNames
                vSheetNameArr = swDraw.GetSheetNames

                For Each vSheetName In vSheetNameArr
        
                    bRet = swDraw.ActivateSheet(vSheetName): Debug.Assert bRet
                    Set swView = swDraw.GetFirstView 'Sélectionne le fond de plan
                    Set swView = swView.GetNextView  'Passe à la vue suivante pour exclure le fond de plan
                    'Debug.Print swView.GetName2
                
                    While Not swView Is Nothing
           
                    ' Determine if this is a view of a part or assembly

                        sModelName = swView.GetReferencedModelName

                        sModelName = LCase(sModelName)
                        
                        sConfigName = swView.ReferencedConfiguration
        
                        FileConnu = False
        
                        If InStr(sModelName, "sldprt") > 0 Then
                            nDocType = swDocPART
                        ElseIf InStr(sModelName, "slasm") > 0 Then
                            nDocType = swDocASSEMBLY
                        Else
                            nDocType = swDocNONE
                            Exit Sub
                        End If
                       
                       If nDocType = 1 Or nDocType = 2 Then
                            Call Export
                       End If
        
                        Set swView = swView.GetNextView
    Wend

Next vSheetName
End If
End If
End Sub

Sub Export()
Set swModel = swApp.OpenDoc6(sModelName, nDocType, swOpenDocOptions_Silent, "", nErrors, nWarnings)
Set swModelDocExt = swModel.Extension
Set swCustProp = swModelDocExt.CustomPropertyManager(sConfigName)
boolstatus = swCustProp.Get5("Revision", False, ValOut, ResolvedValOut, WasResolved)
End Sub

 

Na de boolstatus moet u de waarde ValOut of ResolvedValout ophalen (afhankelijk van het gerepatrieerde veld, het tweede overeenkomt met de waarde die is ingevoerd in de kolom "Geëvalueerde waarde") in een tekenreeksvariabele en deze vervolgens samenvoegen met de registratienaam.

Ik heb niet alle variabelen gezet, je hoeft alleen maar toe te voegen wat je mist aan je macro.

1 like

Super!

Ik zal wat tijd moeten vinden om te proberen het te verfijnen ...

Ik begrijp dit deel van de code echter niet echt:

vSheetName = swDraw.GetSheetNames
vSheetNameArr = swDraw.GetSheetNames
                Voor elke vSheetName in vSheetNameArr
..

Volgende vSheetName

Telt deze lus de verschillende aanzichten van het tekenblad of de tekenbladen? (Sheetname doet me denken aan de naam van het blad (zoals in Excel), maar het zou logisch zijn om in plaats daarvan de tekeningaanzichten te "tellen")

 

Hallo

Voor elke vSheetName in vSheetNameArr: Alle bladen in de tekening.

Hoewel niet swView Is Nothing: Alle weergaven in het blad die worden geanalyseerd.

Dus alle uitzichten van alle lakens....

Vriendelijke groeten

Bedankt

Ja, aan de andere kant heb ik een behandeling zodat ik niet voor niets op hetzelfde bestand loop.