API Problem - Get thickness from Sheet metal part

I am trying to get the thickness from a sheet metal part. When I run
the code, I get a Run-time error 424. Object required.
Here is the code:
START CODE
-------------------------------
Dim swApp As Object
Dim Thickness As Double
Dim model As ModelDoc2
Sub main()
Set swApp = Application.SldWorks
Set model = swApp.ActiveDoc
Thickness = SheetMetalFeatureData.Thickness
End Sub
-------------------------------
END CODE
Reply to
SW Monkey
Loading thread data ...
Hello SW Monkey,
I have a code that gets this value, although I cannot check it right now. I will look for the code next week.
What you have to do is iterate the features and get the sheetmetal feature type (could be named differently). Then set the sheetmetal featuredata object and you can get the info.
Kind regards,
JJ
formatting link

SW M> I am trying to get the thickness from a sheet metal part. When I run
Reply to
JJ
Dim swsheetmetal As SldWorks.SheetMetalFeatureData
Dim swapp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
sub main() Set swapp=createobject("Sldworks.application") Set swmodel=swapp.activedoc Set swfeat = swModel.FirstFeature While Not swfeat Is Nothing 'Debug.Print swfeat.Name & " - " & swfeat.GetTypeName
If swfeat.GetTypeName = "SheetMetal" Then Set swsheetmetal = swfeat.GetDefinition Thickness = swsheetmetal.Thickness
End If
Set swfeat = swfeat.GetNextFeature Wend end sub
Reply to
JJ
Thanks, that works.
Im trying to get the thickness and also the volume so I can calculate the sq area in feet for the sheetmetal part. This is used in our MRP system for material qty. I tried to convert the thickness value to inches, but how can I display only 3 decimal places (it currently shows 6)
Next up, figuring out how to get the volume of the part.
Reply to
SW Monkey
Hello SW Monkey,
You can get the volume using API, or you can iterate all faces and get the largest face.
The first one is the easiest.
Else: this one is from the API help
Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModDocExt As SldWorks.ModelDocExtension
Dim swMass As SldWorks.MassProperty
Dim vCofG As Variant
Dim vXaxis As Variant
Dim vYAxis As Variant
Dim vZAxis As Variant
Dim swSkCofG As SldWorks.SketchPoint
Dim swSkXaxis As SldWorks.SketchLine
Dim swSkYaxis As SldWorks.SketchLine
Dim swSkSegXaxis As SldWorks.SketchSegment
Dim swSkSegYaxis As SldWorks.SketchSegment
Dim swSelMgr As SldWorks.SelectionMgr
Dim swSelData As SldWorks.SelectData
Dim bRet As Boolean
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swSelMgr = swModel.SelectionManager
Set swSelData = swSelMgr.CreateSelectData
Set swModDocExt = swModel.Extension
Set swMass = swModDocExt.CreateMassProperty
vCofG = swMass.CenterOfMass
vXaxis = swMass.PrincipleAxesOfInertia(0)
vYAxis = swMass.PrincipleAxesOfInertia(1)
vZAxis = swMass.PrincipleAxesOfInertia(2)
Debug.Print "File = " & swModel.GetPathName
Debug.Print " Mass = " & swMass.Mass * 1000# & " g"
Debug.Print " Surface Area = " & swMass.SurfaceArea *
1000000# & " mm^2"
Debug.Print " Volume = " & swMass.Volume * 1000000000# & " mm^3"
Debug.Print " Density = " & swMass.Density & " kg/m^3"
Debug.Print " CenterOfMass = (" & vCofG(0) * 1000# & ", " & vCofG(1) * 1000# & ", " & vCofG(2) * 1000# & ") mm"
Debug.Print " X axis = (" & vXaxis(0) & ", " & vXaxis(1) & ", " & vXaxis(2) & ")"
Debug.Print " Y axis = (" & vYAxis(0) & ", " & vYAxis(1) & ", " & vYAxis(2) & ")"
Debug.Print " Z axis = (" & vZAxis(0) & ", " & vZAxis(1) & ", " & vZAxis(2) & ")"
swModel.Insert3DSketch2 False
swModel.SetAddToDB True
Set swSkCofG = swModel.CreatePoint2(vCofG(0), vCofG(1), vCofG(2))
Set swSkXaxis = swModel.CreateLine2( _
vCofG(0), vCofG(1), vCofG(2), _
vCofG(0) + vXaxis(0), vCofG(1) + vXaxis(1), vCofG(2) + vXaxis(2))
Set swSkYaxis = swModel.CreateLine2( _
vCofG(0), vCofG(1), vCofG(2), _
vCofG(0) + vYAxis(0), vCofG(1) + vYAxis(1), vCofG(2) + vYAxis(2))
Set swSkSegXaxis = swSkXaxis
Set swSkSegYaxis = swSkYaxis
swModel.SetAddToDB False
swModel.Insert3DSketch2 True
swModel.ClearSelection2 True
swSelData.mark = 1
bRet = swSkCofG.Select4(True, swSelData): Debug.Assert bRet
swSelData.mark = 2
bRet = swSkSegXaxis.Select4(True, swSelData): Debug.Assert bRet
swSelData.mark = 4
bRet = swSkSegYaxis.Select4(True, swSelData): Debug.Assert bRet
bRet = swModel.InsertCoordinateSystem(False, False, False): Debug.Assert bRet
End Sub
Kind regards,
JJ
formatting link

Reply to
JJ
JJ,
I would rather use
retval = MassProperty.Volume (VB Get property)
but I cant seem to get it to work correctly. I know that I can create a custom property called VOLUME, and the value is " snipped-for-privacy@filename.SLDPRT". This will show the volume of the part in a custom property. How do I get this in my API?
So far here is my code to get the thickness and show it in a message box.
Dim swsheetmetal As SldWorks.SheetMetalFeatureData Dim swapp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim conv As Double Sub main() Set swapp = CreateObject("Sldworks.application") Set swModel = swapp.ActiveDoc Set swfeat = swModel.FirstFeature While Not swfeat Is Nothing 'Debug.Print swfeat.Name & " - " & swfeat.GetTypeName If swfeat.GetTypeName = "SheetMetal" Then Set swsheetmetal = swfeat.GetDefinition Thickness = swsheetmetal.Thickness End If Set swfeat = swfeat.GetNextFeature Wend conv = 39.37 'metric conversion factor Thickness = Thickness * conv Thickness = FormatNumber(Thickness, 3) MsgBox ("Thickness is" & Chr(13) & Thickness) End Sub
Reply to
SW Monkey

PolyTech Forum website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.