Reply

Extracting Material Properties Macro

I guess I should start off by saying I have little to no experience writing code  -__- . I have been trying to use different examples from various sources but I continuously get errors and dont understand how to properly debug them (or if I am even using the correct code for what I want to achieve).

 

I am implementing Radan for our Nesting Software and have been relatively successful with its application for our manufacturing process. The first issue I ran into was how our material templates were set up in Solid Edge. We use all Stainless Steel so our filtering should have been easy, but whoever set up the templates included the gage size and finish in the material type - I.E. 14 Ga SS 2B. After communication with some people at Vero they have generated a DTM plug-in for us that allows Radan to extract file property information from Solid Edge. This has helped us quite a bit and opened alot of doors for us without having to change our template structure.

 

My issue now is that our template does not include the material grade (301, 304, 316)... I would rather not create 2 additional templates so Radan can filter the grade of Stainless. This would require us to edit thousands of parts in our current library and also make duplicate parts of the same thing just to change the material selection as customers might order an upgraded material for a standard machine.

 

I need help writing a Macro (honestly, I dont know how to start) that will extract the material for all of the sheetmetal parts in the desired assembly. Next, I envision a form to pop up and ask the user to select the material grade (301, 304, 316). After the grade has been selected I expect the macro to add the information to the extracted material properties and paste them in the file properties under something like "Keywords".

 

Any and all insight on the matter will be greatly appreciated.

7 REPLIES

Re: Extracting Material Properties Macro

Hi Robert,

 

 

This code gets the material of the sheet-metal part and writes it to a custom propertie named "Keywords". It works for the active document in Solid Edge, so a sheet metal part must be opened to work.

 

Spoiler
Dim objPar As SolidEdgePart.SheetMetalDocument
Dim objPropSet As SolidEdgeFramework.PropertySets
Dim objSubProp As SolidEdgeFramework.Properties
Dim objMyProp As SolidEdgeFramework.Property
Dim MyMaterial As String


objApp = GetObject(, "SolidEdge.Application")
objPar = objApp.ActiveDocument
objPropSet = objPar.Properties
objSubProp = objPropSet.Item("MechanicalModeling")
objMyProp = objSubProp.Item("Material")
MyMaterial = objMyProp.Value

objSubProp = objProp.Item("Custom")
objSubProp.Add("Keywords", MyMaterial)

' MsgBox(MyMaterial & " added to properties")
___________________________
The truth is .... I am Dutch
VB.NET - C# - VS Ex 2015 - ST9

Re: Extracting Material Properties Macro

Would anyone be able to help me with the error I am recieving?

 

Any tips or insight will be greatly appreciated. 

Re: Extracting Material Properties Macro

What line of code is it complaining about? The only thing I see off hand that won't work is this line:

Set objNewProperty = objSubProp.Add("Keywords", MyMaterial)

This is because you can only "Add" properties to the "Custom" property set. The correct code should be 

Set objNewProperty = objSubProp.Item("Keywords")
objNewProperty.Value = MyMaterial
Jason Newell
Applications Architect
www.jasonnewell.net

Re: Extracting Material Properties Macro

Thanks, I appreciate any insight as I am still just learning. However, I am still receiving the compile error, method or data member cannot be found? The de bugger just highlights the Sub Rad_Import?

Re: Extracting Material Properties Macro

The following code is incorrect and should be removed.

 

SolidEdgeFramework.PropertySets = Nothing
SolidEdgeFramework.Properties = Nothing
SolidEdgeFramework.Property = Nothing

I didn't catch it at first glance.

Jason Newell
Applications Architect
www.jasonnewell.net

Re: Extracting Material Properties Macro

I appreciate all of the help. This forum rocks! everything is working as it should and I could'nt be happier. Thanks again

Re: Extracting Material Properties Macro

I would like to start off by saying thanks for all the support, this is my first macro Smiley Happy I used VBA and I have started looking at VB.net (this is the start of something new and exciting for me). Through this forum I have been able to piece together various samples and make this work the way I hoped it would (I am almost 100% satisfied with my code) all while learning more about API. With that said I am having a little trouble with editing sub-occurrences within sub-ocurrences, etc... I have seen various examples pointing to top layers and recursive code working from bottom up but I cant quite grasp it and put it into context. I understand it in theory but I am having a difficult time applying it. If anyone could help point me towards a solution I would be ecstatic. Here is what I have so far (any pointers or constructive criticism would be greatly appreciated as well):

Dim ObjAsm As SolidEdgeAssembly.AssemblyDocument
Dim AsmOcc As SolidEdgeAssembly.Occurrence
Dim ObjOccu As SolidEdgeAssembly.Occurrences
Dim AsmDoc As solidedgeframework.SolidEdgeDocument

Dim SubOcc As SolidEdgeAssembly.SubOccurrences
Dim ObjSubOcc As SolidEdgeAssembly.SubOccurrence

Dim ObjPar As solidedgepart.SheetMetalDocument
Dim ObjPropSet As solidedgeframework.PropertySets
Dim ObjSubProp As solidedgeframework.Properties
Dim ObjMyProp As solidedgeframework.Property
Dim MyMaterial As solidedgeframework.Property
Dim MATtest As solidedgeframework.Property

Dim ObjDocument As solidedgeframework.SolidEdgeDocument
Dim ObjApp As solidedgeframework.Application

Dim i As Integer
Dim j As Integer


Set ObjApp = GetObject(, "solidedge.application")
    Set ObjAsm = ObjApp.ActiveDocument
    Set ObjOccu = ObjAsm.Occurrences
  
For i = 1 To ObjOccu.count

Set AsmOcc = ObjAsm.Occurrences(i)
    
If Right(AsmOcc.OccurrenceFileName, 3) = "psm" Then
    Set AsmDoc = AsmOcc.OccurrenceDocument
    Set ObjPar = AsmDoc
    
        ElseIf Right(AsmOcc.OccurrenceFileName, 3) = "asm" Then
           Set SubOcc = AsmOcc.SubOccurrences
             For j = 1 To SubOcc.count
             Set ObjSubOcc = SubOcc(j)
               If Right(ObjSubOcc.ThisAsOccurrence.OccurrenceFileName, 3) = "psm" Then
                    Set ObjPar = ObjSubOcc.ThisAsOccurrence.OccurrenceDocument
                    Set ObjPropSet = ObjPar.Properties
                    Set ObjSubProp = ObjPropSet.Item("MechanicalModeling")
                    Set ObjMyProp = ObjSubProp.Item("Material")
                    Set MATtest = ObjSubProp.Item("Material")

             Set ObjDocument = ObjPar
        End If


If Left(MATtest.Value, 4) = "12GA" Or Left(MATtest.Value, 4) = "20GA" Or Mid(ObjPar.Name, 4, 3) = "800" Then
    Set ObjSubProp = ObjPropSet.Item("Custom")
    Set MyMaterial = ObjSubProp.Add("RAD_IMPORT", MATtest.Value & " 304")
        Else
           Set ObjSubProp = ObjPropSet.Item("Custom")
           Set MyMaterial = ObjSubProp.Add("RAD_IMPORT", MATtest.Value & " 301")
 
        End If
    Next j
 End If


Set ObjPropSet = ObjPar.Properties
    Set ObjSubProp = ObjPropSet.Item("MechanicalModeling")
    Set ObjMyProp = ObjSubProp.Item("Material")
Set MATtest = ObjSubProp.Item("Material")


Set ObjDocument = ObjPar

If Left(MATtest.Value, 4) = "12GA" Or Left(MATtest.Value, 4) = "20GA" Or Mid(ObjPar.Name, 4, 3) = "800" Then
    Set ObjSubProp = ObjPropSet.Item("Custom")
    Set MyMaterial = ObjSubProp.Add("RAD_IMPORT", MATtest.Value & " 304")
        Else
           Set ObjSubProp = ObjPropSet.Item("Custom")
           Set MyMaterial = ObjSubProp.Add("RAD_IMPORT", MATtest.Value & " 301")
        End If
     Next i

MsgBox (MyMaterial.Value)

    Set ObjSubProp = Nothing
    Set MyMaterial = Nothing
    Set MATtest = Nothing

End Sub