How to get Features from synchronous document ?

Valued Contributor
Valued Contributor

Hi All

i want to read features from Synchronous document and how should i suppress or unsupress perticular feature from it

 

Posted by: Yogesh Shinde
Post date: 3/14/2012 1:41:53 AM

4 REPLIES

Re: How to get Features from synchronous document ?

Valued Contributor
Valued Contributor

Hi

 

I'm doing this myself at the moment. I'm using Visual Basic. What are you using?

 

Ian

 

Posted by: Ian Burrows
Post date: 5/4/2012 6:02:53 AM

Re: How to get Features from synchronous document ?

Valued Contributor
Valued Contributor

Hi Yogesh

 

Here is a chunk of my code - You might find bit of it useful.

 

Also download SESpy.exe from JasonNewell

 

Imports SolidEdgeFramework

'Imports SolidEdgePart

Imports System.Runtime.InteropServices

Imports System

Imports System.Reflection

Imports System.Reflection.Emit

Imports System.Collections

Imports SolidEdgeConstants

Imports Microsoft.VisualBasic

 

 

 

 

Public Class Form1

Const NumNormalProps = 13

Const MECH_MATERIAL = 9

Const igFinite = 13

 

Public strChild(30) As String

Public strParent(30) As String

Public strPropVal(30) As String

Public strDate As String

Public strTitle As String

Public strSubject As String

Public strDrawn As String

Public strAppr As String

Public strDwgNo As String

Public strProject As String

Public strWeight As String

Public strMaterial As String

Public strPartID As String

Public strMatlID As String

Public strQTY As String

Public strUOM As String

 

Public objDocument As SolidEdgeFramework.SolidEdgeDocument = Nothing

Public objApplication As SolidEdgeFramework.Application = Nothing

Public objPart As SolidEdgePart.PartDocument = Nothing

Public objUOM As SolidEdgeFramework.UnitsOfMeasure = Nothing

 

Public objFeatureGroup As SolidEdgePart.FeatureGroup = Nothing 'Group

Public objFeatureGroups As SolidEdgePart.FeatureGroups = Nothing 'Group

 

Public objfeatures As SolidEdgePart.Features = Nothing 'Features

Public objfeature As SolidEdgeFrameworkSupport.FeatureControlFrame = Nothing

Public objAnyFeature As Object = Nothing

Public TotalFeatures, TotalHoles As Integer

 

 

Public objHoleDataCollection As SolidEdgePart.HoleDataCollection

Public objHoleData As SolidEdgePart.HoleData

 

Public objHoles As SolidEdgePart.Holes

Public objHoleProp As SolidEdgePart.Hole

 

 

Public CancelNow As Boolean

 

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

 

Public Class PartData

Inherits [Object]

Private DataName As String = ""

Friend Members As New ArrayList()

 

Public Sub New(ByVal PartDataName As String)

Me.DataName = PartDataName

End Sub

 

Public Property PartDataName() As String

Get

Return Me.DataName

End Get

Set(ByVal Value As String)

Me.DataName = Value

End Set

End Property

 

Public ReadOnly Property MemberDetails() As ArrayList

Get

Return Me.Members

End Get

End Property

End Class 'End PartData class

 

' Create a new ArrayList to hold the Customer objects.

Private PartDataArray As New ArrayList()

 

 

 

 

 

Dim OStatus As Long

Dim ODensity As Double

Dim OAccuracy As Double

Dim OVolume As Double

Dim OArea As Double

Dim OMass As Double

Dim COG() As Double

Dim COV(10) As Double

Dim EngCOV(10) As Double

Dim GMI(0 To 15) As Double

Dim PMI(0 To 10) As Double

Dim PA(0 To 9) As Double

Dim PA2(0 To 9) As Double

Dim PA3(0 To 9) As Double

Dim ROG(10) As Double

Dim RAA As Double

Dim OUpdateStatus As Boolean

Dim OIsSick As Boolean

 

Private m_application As SolidEdgeFramework.Application

'Dim objDimension As SolidEdgeFrameworkSupport.Dimension

'Dim DimCount As Integer

 

Private Sub Form1_Load(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles MyBase.Load

Try

' Connect to a running instance of Solid Edge

m_application = Marshal.GetActiveObject("SolidEdge.Application")

Catch ex As System.Runtime.InteropServices.COMException

MsgBox("SolidEdge not running")

End

Catch ex As Exception

MessageBox.Show(ex.Message, "Error")

Finally

End Try

End Sub

 

'methods/properties:

'AttachedPropertyTables, AttributeQuery,

'Constructions, CoordinateSystems, DocumentEvents, FamilyMembers,

'HighlightSets, Properties, PropertyTableDefinitions, RoutingSlip, SelectSet,

'Sketches, SummaryInfo, UnitsOfMeasure,

 

Private Sub Button1_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Extract.Click

'Dim objDocument As SolidEdgeFramework.SolidEdgeDocument = Nothing

'Dim objApplication As SolidEdgeFramework.Application = Nothing

 

'Dim objPart As SolidEdgePart.PartDocument = Nothing

Dim objVariables As SolidEdgeFramework.Variables = Nothing

Dim objVariable As SolidEdgeFramework.variable = Nothing

Dim objVariableList As SolidEdgeFramework.VariableList = Nothing

 

Dim objProfileSets As SolidEdgePart.ProfileSets = Nothing

Dim objProfileSet As SolidEdgePart.ProfileSet = Nothing

Dim objProfiles As SolidEdgePart.Profiles = Nothing

Dim objProfile As SolidEdgePart.Profile = Nothing

 

Dim objDimensions As SolidEdgeFrameworkSupport.Dimensions = Nothing

Dim objDimension As SolidEdgeFrameworkSupport.Dimension = Nothing

 

Dim objModels As SolidEdgePart.Models = Nothing

Dim objModel As SolidEdgePart.Model = Nothing

 

Dim VarCount, DimCount, ProfCount, TotalSets, TotalProfs, i, ii As Integer

Dim TotalModels, ModelCount, NextNode, DOCnode, Addhere As Integer

 

 

Dim sName As String

Dim sFormula As String

Dim sValue As String

'Dim dValue, X, Y As Double

'Dim dHexSize As Double

 

 

 

Dim objHole As Object = Nothing

 

 

 

'SolidEdgeFrameworkSupport.DimensionStyle.SmartDepthHoleThru As String

'SolidEdgePart.HoleData.HoleType As SolidEdgePart.FeaturePropertyConstants

'SolidEdgePart.Hole.Depth As Double

 

Dim objFModel As SolidEdgePart.Model = Nothing

 

Dim objSelectSet As SolidEdgeFramework.SelectSet = Nothing

 

Dim objConstructions As SolidEdgePart.Constructions = Nothing

Dim objCopyConstructions As SolidEdgePart.CopyConstructions = Nothing

Dim objBooleanFeatures As SolidEdgePart.BooleanFeatures = Nothing

'The number of solid to do the boolean opertation

Dim NumberOfTools As Integer = 1

'A array which contains these solids

Dim Tools() As Object = Nothing ' {objConstructions.Item(1).Body}

'A member of the BooleanFeatureConstants constant set that specifies the type of Boolean operation to perform.

Dim Operation As SolidEdgePart.BooleanFeatureConstants = Nothing 'SolidEdgePart.BooleanFeatureConstants.seBooleanSubtract

 

Dim objPropCollection As New Microsoft.VisualBasic.Collection()

Dim objProp As SolidEdgePart.PropertyDefinition = Nothing

 

Dim objFaces As SolidEdgeGeometry.Faces = Nothing

 

Dim objGeometry As Object = Nothing

 

Dim objPropertySets As SolidEdgeFramework.PropertySets = Nothing

Dim objProperties As SolidEdgeFramework.Properties = Nothing

Dim objProperty As SolidEdgeFramework.Property = Nothing

 

 

 

 

Try

Variables.Items.Clear()

Dimensions.Items.Clear()

Features.Items.Clear()

 

 

' Get a reference to the active document

objDocument = m_application.ActiveDocument

' Connect to a running instance of Solid Edge

objApplication = Marshal.GetActiveObject("SolidEdge.Application")

' Get a reference to the active document's unit of measure

objUOM = objDocument.UnitsOfMeasure

TextBox1.Text = "123.456"

TextBox3.Text = objDocument.FullName

' Get a reference to the active document

objPart = objApplication.ActiveDocument

 

' Using Type property, determine document type

Select Case objDocument.Type

Case SolidEdgeFramework.DocumentTypeConstants.igAssemblyDocument

TextBox4.Text = "Assembly Document"

Case SolidEdgeFramework.DocumentTypeConstants.igDraftDocument

TextBox4.Text = "Draft Document"

Case SolidEdgeFramework.DocumentTypeConstants.igPartDocument

TextBox4.Text = "Part Document"

Case SolidEdgeFramework.DocumentTypeConstants.igSheetMetalDocument

TextBox4.Text = "SheetMetal Document"

Case SolidEdgeFramework.DocumentTypeConstants.igUnknownDocument

TextBox4.Text = "Unknown Document"

Case SolidEdgeFramework.DocumentTypeConstants.igWeldmentAssemblyDocument

Console.WriteLine("Weldment Assembly Document")

Case SolidEdgeFramework.DocumentTypeConstants.igWeldmentDocument

Console.WriteLine("Weldment Document")

End Select

 

' Attempt to parse the UOM input by user

'dHexSize = objUOM.ParseUnit(UnitTypeConstants.igUnitDistance, TextBox1.Text)

TextBox2.Text = objUOM.FormatUnit(SolidEdgeFramework.UnitTypeConstants.igUnitDistance, TextBox1.Text)

' Update the 2nd textbox with the parsed UOM

'TextBox2.Text = dHexSize.ToString()

 

'Add a variable

' objVariable = objVariables.Add("NewVar", "1.5")

'Change the formula of the variable to a function

' objVariable.Formula = Math.Sin(0.1).ToString()

'Change the name of the variable

' objVariable.Name = "NewName"

'Change the value of the variable. This will not change

'the value of the variable

' objVariable.Value = 123

 

'Variables.Items.Add(objVariables)

'Variables.Items.Add(objDocument.FullName)

 

' Use the Query method to list all all user-defined

' variables and user-named Dimension objects and

' display in the debug window

' objVariableList = objVariables.Query("*")

' For Each objVariable In objVariableList

 

'MsgBox(objVariable.Formula.ToString)

 

'Variables.Items.Add(objVariables.GetName(objVariable)) ' + " " + objVariables.GetFormula(objVariable))

' Next

 

 

'--------------------

' Make column headers.

 

' List the properties.

' Use the class you want to study instead of Form1.

Dim property_value As Object

Dim DOCproperties_info As PropertyInfo() = GetType(SolidEdgeFramework.SolidEdgeDocument).GetProperties()

 

' Suppress repainting the TreeView until all the objects have been created.

' TvwProperties.BeginUpdate()

' Clear the TreeView each time the method is called.

TvwProperties.Nodes.Clear()

TvwProperties.Nodes.Add("DOC " + objDocument.Name)

DOCnode = TvwProperties.GetNodeCount(False) - 1

 

For xxx As Integer = 0 To DOCproperties_info.Length - 1

With DOCproperties_info(xxx)

If .GetIndexParameters().Length = 0 Then

property_value = .GetValue(objDocument, Nothing)

TvwProperties.Nodes(NextNode).Nodes.Add("DOC1", "(Value) " + property_value.ToString, 1)

TvwProperties.Nodes(NextNode).Nodes(xxx).Nodes.Add("DOC2", " (Name) " + .Name, 2)

If property_value Is Nothing Then

TvwProperties.Nodes(NextNode).Nodes(xxx).Nodes(0).Nodes.Add("DOC4", "(Type) " + .PropertyType.ToString, 3)

Else

TvwProperties.Nodes(NextNode).Nodes(xxx).Nodes(0).Nodes.Add("DOC4", "(Type) " + .PropertyType.ToString, 3)

End If

Else

TvwProperties.Nodes(NextNode).Nodes.Add("DOC1", "<array>", 1)

TvwProperties.Nodes(NextNode).Nodes(xxx).Nodes.Add("DOC2", .Name, 2)

TvwProperties.Nodes(NextNode).Nodes(xxx).Nodes(0).Nodes.Add("DOC3", .PropertyType.ToString, 3)

End If

End With

Next xxx

 

NextNode = TvwProperties.GetNodeCount(False) - 1

TvwProperties.Nodes.Add("DOX " + objDocument.Name)

DOCnode = TvwProperties.GetNodeCount(False) - 1

For ii = 1 To 1 'objDocument.Count

objPropertySets = objDocument.Properties

For iii = 1 To objDocument.Properties.count

 

'TvwProperties.Nodes(NextNode).Nodes.Add(objPropertySets.Item(iii).Name + " <<<<<< ")

'customerArray.Add(New Customer("Customer" + x.ToString()))

'PartDataArray.Add(New PartData("PartData" + objPropertySets.Item(iii).Name()))

TvwProperties.Nodes(DOCnode).Nodes.Add("DOX", objPropertySets.Item(iii).Name, 2)

'Addhere = PartData.Current

objProperties = objPropertySets.Item(iii)

For iiii = 1 To objProperties.Count

objProperty = objProperties.Item(iiii)

 

If objProperty.Value Is Nothing Then

sValue = objProperty.Name + " Nothing "

Else

sValue = objProperty.Name + " " + objProperty.Value.ToString

End If

TvwProperties.Nodes(DOCnode).Nodes(iii - 1).Nodes.Add("DOX", sValue, 3)

'PartDataArray.Item(Addhere).MemberDetails.Add(New sValue)

Next iiii

Next iii

Next ii

 

'TvwProperties.ExpandAll()

 

 

' Get a reference to the variables collection

objVariables = objPart.Variables

 

 

TvwProperties.Nodes.Add(New TreeNode("PART"))

NextNode = TvwProperties.GetNodeCount(False) - 1

Dim PartProperties_info As PropertyInfo() = GetType(SolidEdgePart.PartDocument).GetProperties()

 

For xxx As Integer = 0 To PartProperties_info.Length - 1

With PartProperties_info(xxx)

If .GetIndexParameters().Length = 0 Then

property_value = .GetValue(objPart, Nothing)

 

If property_value Is Nothing Then

TvwProperties.Nodes(NextNode).Nodes.Add("PROP", .Name, 1)

Else

TvwProperties.Nodes(NextNode).Nodes.Add("PROP", .Name, 1)

End If

Else

TvwProperties.Nodes(NextNode).Nodes.Add("PROP", "<array>" _

+ " (N) " + .Name _

+ " (T) " + .PropertyType.ToString, 1)

End If

 

Select Case .Name

Case "Models"

 

' Get a reference to the models collection

objModels = objPart.Models

TotalModels = objModels.Count

ModelCount = 1

TvwProperties.Nodes(NextNode).Nodes(0).Nodes.Add("MOD", "Model Data ", 1)

Select Case SelectedFeature.Checked

Case True

'ASSUME - only 1 model

objModel = objModels.Item(1)

Features.Items.Add(String.Format("Assumed Model Item = {0}", 1) + _

" DisplayName=" + objModel.DisplayName + _

" Hole Count =" + objModel.Holes.Count.ToString)

TvwProperties.Nodes(NextNode).Nodes(0).Nodes.Add("MOD1", String.Format("Assumed Model Item = {0}", 1), 2)

Features.Items.Add(" Number of shells ( in Models(i).Body )= " + objModel.Body.Shells.Count.ToString)

TvwProperties.Nodes(NextNode).Nodes(0).Nodes.Add("MOD1", " Number of shells ( in Models(i).Body )= " _

 

Posted by: Ian Burrows
Post date: 5/7/2012 9:14:49 AM

Re: How to get Features from synchronous document ?

Valued Contributor
Valued Contributor

You can pick features by identifying the ones you want by their properties which you can read

 

Posted by: Ian Burrows
Post date: 5/7/2012 12:37:42 PM

Re: How to get Features from synchronous document ?

Valued Contributor
Valued Contributor

I just encountered this the other day. When you get a Sync feature from a PartDocument collection like Rounds or Holes, you actually are getting a FaceSet object, which doesn't support the suppress property.

 

To distinguish the modeling mode, use the ModelingModeType property. If Hole features are added to the part in Ordered mode, then iterating over the Holes collection should give Hole objects instead of FaceSets.

 

Posted by: Jay Carlton
Post date: 5/17/2012 5:12:22 PM