Ik heb in 2018 een eenvoudige macro gemaakt die heel goed werkt en met de nieuwe 2020-versie werkt het niet meer.
De functie retourneert niets en rine gebeurt niet
Bedankt voor je hulp
Het maken van de schaal myModelView dimmen als object Stel myModelView = Deel.ActiveView in myModelView.FrameState = swWindowState_e.swWindowMaximized boolstatus = Part.Extension.SelectByID2("Geïmporteerd-Surface1", "REFSURFACE", 0, 0, 0, True, 0, Nothing, 0) Dim fonction_echelle als object Set fonction_echelle = Part.FeatureManager.InsertScale(0, True, 1.5, 1.5, 1.5)
Door variabelen te declareren in plaats van ze in objecttype te laten staan (fonction_echelle als SldWorks.Feature bijvoorbeeld) denk ik dat het beter zal gaan.
Ik denk dat we daarna een deel van de code missen, dus we zouden het stap voor stap moeten doorlopen om te zien waar het vastloopt (het kan bijvoorbeeld afkomstig zijn van de entiteitsselectie die leeg is).
Daarna moeten we de macroreferenties controleren als SW2020 wordt vermeld.
Volgens de documentatie werkt de InsertScale-functie alleen op vaste of oppervlaktelichamen. Maar "REFSURFACE" verwijst naar de functie die het lichaam heeft geschapen, niet naar het lichaam zelf. Het feit dat het oppervlaktelichaam dezelfde naam heeft als de functie, zou kunnen verklaren waarom het in 2016 nog steeds werkte.
Dit werkt voor mij in 2020:
Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeat As SldWorks.Feature
Dim boolstatus As Boolean
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
boolstatus = swModel.Extension.SelectByID2("Surface-Importée1", "SURFACEBODY", 0, 0, 0, False, 0, Nothing, 0)
Set swFeat = swModel.FeatureManager.InsertScale(swScaleType_e.swScaleAboutCentroid, True, 1.5, 0, 0)
End Sub
Opmerking: de laatste twee termen van de functie InsertScale worden niet in aanmerking genomen wanneer de tweede term "True" is (uniforme schaal)
Hallo, hier is mijn code en mijn onderdeel dat ik open is een geïmporteerd oppervlak.
XT-formaat
Sub hoofd()
Stel swApp = Toepassing.SldWorks in
Stel ModelDoc in = swApp.ActiveDoc
Deel instellen = swApp.ActiveDoc
Lijn 100: '-------------------------------------------------------------------------------------------------------------------- Dim choix_matiere als snaar Dim coef_echelle Ace Dubbel choix_matiere = InputBox("Wat is het materiaal? 1-APET 2-PS 3-PP") Als choix_matiere = "1" dan coef_echelle = 1.004 Als choix_matiere = "2" Dan coef_echelle = 1.006 Als choix_matiere = "3" dan coef_echelle = 1.015 Als choix_matiere <> "1" en choix_matiere <> "2" en choix_matiere <> "3" dan MsgBox ("Voer alleen 1, 2 of 3 in") Ga naar line100 Einde als
Het maken van de schaal myModelView dimmen als object
Dus wat ik heb getest en gevonden, als het geïmporteerde oppervlak een complex oppervlak is (d.w.z.: bijna gesloten), werkt de macro niet (Set fonction_echelle retourneert niets).
Door de macro op te nemen en de manipulatie uit te voeren, bespaart het me wel een equivalente code, maar het werkt niet meer en geeft ook niets terug.
Edit: het werkt op een offset oppervlak van een volume model, het werkt niet op geïmporteerde oppervlakken. Waarschijnlijk een regressie als het eerder werkte.