I have been looking at the possibility of using Solidworks to generate positions for actuators by dragging a model (multi axis robot) to a required position, let SW calculate the lengths of the actuators then save them as a line in a CSV file.
In order to avoid having to configure the macro for each model, I did this by using Distance & Angle limit mates and renaming the ones I'm interested in as Axis1, Axis2 etc. The macro can parse the mates folder to find any called Axis# then build a CSV based on that. That bit seems to work OK.
The bit that has floored me is reading back the CSV and forcing the model to move correspondingly. If I change the mate type to ordinary distance mates - I can write a value to the distance and the model moves when I force an update. However, like that, you cannot move the model by dragging - Hence using limit mates.
I can write a value to the distance, read it back and it appears to have changed. However when I rebuild the model - the value changes back to what it was set to before and the model does not move!
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeat As SldWorks.Feature
Dim swMate As SldWorks.Mate2
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
Set swFeat = swModel.FeatureByName("Axis1")
If swFeat Is Nothing Then
Set swMate = swFeat.GetSpecificFeature2
Dim swDispDim As SldWorks.DisplayDimension
Dim swDim As SldWorks.Dimension
Set swDispDim = swMate.DisplayDimension2(0)
Set swDim = swDispDim.GetDimension2(0)
Dim val As Double
val = swDim.GetSystemValue3(swInConfigurationOpts_e.swThisConfiguration, "")(0)
Debug.Print "Original Distance = " & val
val = val + 0.005 'Add 5mm to distance
swDim.SetSystemValue3 val, swInConfigurationOpts_e.swAllConfiguration, ""
Debug.Print "New Distance value = " & swDim.GetSystemValue3(swInConfigurationOpts_e.swThisConfiguration, "")(0)
Debug.Print "New Distance value after rebuild = " & swDim.GetSystemValue3(swInConfigurationOpts_e.swThisConfiguration, "")(0)
Which outputs the following:
Original Distance = 3.64127446215382E-02
New Distance value = 4.14127446215382E-02
New Distance value after rebuild = 3.64127446215564E-02
Is there some 'issue' with the API implementation of Distance Limit Mates? I've only tried it in 2015 - but we're sticking with 2015 for the time being so it has to work in that!
Thanks in advance,