Affichage de configurations avec tempo

Bonjour,

Je fais une macro pour créer une "animation" me permettant de voir une succession de modifications et des changements de configuration. Je vous joins une partie du code. Mon problème est que l'image ne se met pas à jour (affichage). Le code est pris en compte mais à l'écran il n'y a que la premiere et derniere étape qui sont visible malgré le "boolstatus = Part.ForceRebuild3(True)". 

Avez-vous une idée?

Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

 Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'For 64 Bit Systems


Sub main()
Dim i As Single
Set swApp = _
Application.SldWorks

Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView

'Config Selection
boolstatus = Part.Extension.SelectByID2("Small [55-145mm]", "CONFIGURATIONS", 0, 0, 0, False, 0, Nothing, 0)
boolstatus = Part.ShowConfiguration2("Small [55-145mm]")
'boolstatus = Part.ForceRebuild3(True)

Wait

For i = 0.055 To 0.145 Step 0.005
boolstatus = Part.Extension.SelectByID2("", "FACE", 1.88162450943423E-02, 2.07610918535579E-02, 3.41903065946383E-02, False, 0, Nothing, 0)
Part.ActivateSelectedFeature
boolstatus = Part.Extension.SelectByID2("L inter épau@Sketch1@Flex_flexible-1@EX10610_00000_10_boni", "DIMENSION", 0.516914003349862, 0.726763465357772, 0.299002280968981, False, 0, Nothing, 0)
Dim myDimension As Object
Set myDimension = Part.Parameter("L inter épau@Sketch1@Flex_flexible.Part")
myDimension.SystemValue = i
Part.ClearSelection2 True
boolstatus = Part.ForceRebuild3(True)
Set myModelView = Part.ActiveView
Wait
Next i

'boolstatus = Part.Extension.SelectByID2("Medium [145-170mm]", "CONFIGURATIONS", 0, 0, 0, False, 0, Nothing, 0)
'boolstatus = Part.ShowConfiguration2("Medium [145-170mm]")
'boolstatus = Part.ForceRebuild3(True)
'Wait

'boolstatus = Part.Extension.SelectByID2("Large [>175mm]", "CONFIGURATIONS", 0, 0, 0, False, 0, Nothing, 0)
'boolstatus = Part.ShowConfiguration2("Large [>175mm]")
'boolstatus = Part.ForceRebuild3(True)
'For i = 0.055 To 0.145 Step 0.005

'boolstatus = Part.Extension.SelectByID2("Small@Flex_flexible.SLDPRT", "CONFIGURATIONS", 0, 0, 0, False, 0, Nothing, 0)
'boolstatus = Part.ShowConfiguration2("Small")
'boolstatus = Part.Extension.SelectByID2("L inter épau@Sketch1@Flex_flexible.SLDPRT", "DIMENSION", -7.48434662003883E-02, 0.151717758326748, -7.54569406310026E-02, False, 0, Nothing, 0)
'Dim myDimension As Object

 

'Set myDimension = Part.Parameter("L inter épau@Sketch1")
'myDimension.SystemValue = i
'boolstatus = Part.ForceRebuild3(True)
'Wait
'boolstatus = Part.EditRebuild3()
'Next i

End Sub


   

Sub Wait()
Sleep 200
End Sub

 

 

 

Bonjour,

Il y a des pauses entre chaque "mouvement" ?

Si non, il faut mettre.

Si oui, essayer de les rallonger.

Exemple de pause :

1)

Application.Wait Time + TimeSerial(0, 0, 5) 

2)

Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

 

Sleep 1000

Et pourquoi pas utiliser l'utilitaire SolidWorks Motion ?

Voir ici :

https://www.youtube.com/watch?v=0OT5_ZWrFQM

2 « J'aime »

@.PL: Oui ma fonction wait est en fait un sleep. J'ai essayé d'augmenter ces pauses mais les changements d'une longueur à une autre ne s'affichent toujours pas. 

On peut essayer de mettre EnableGraphicsUpdate à true :

http://help.solidworks.com/2012/English/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IModelView~EnableGraphicsUpdate.html

Ou même dans le wait, mettre une boucle IF pour changer EnableGraphicsUpdate à false puis true.

1 « J'aime »