<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6522412646466639937</id><updated>2011-07-31T05:53:15.926+05:30</updated><category term='Pro-E'/><category term='Pro-E VB API'/><category term='VB API'/><category term='Pro/E'/><title type='text'>Pro-Engineer VB API</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://proevbapi.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6522412646466639937/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://proevbapi.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Srinivasan</name><uri>http://www.blogger.com/profile/10472349225800059790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_fyiOgJjpkxM/SlXkotLu6YI/AAAAAAAAAl8/4qWvQwPURRQ/S220/srini1.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6522412646466639937.post-700555770682415915</id><published>2008-12-09T16:15:00.008+05:30</published><updated>2009-07-17T11:38:55.684+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pro/E'/><category scheme='http://www.blogger.com/atom/ns#' term='VB API'/><category scheme='http://www.blogger.com/atom/ns#' term='Pro-E'/><category scheme='http://www.blogger.com/atom/ns#' term='Pro-E VB API'/><title type='text'>Pro-E VB API Just got Easy</title><content type='html'>&lt;span style="font-size:130%;color:#cc0000;"&gt;Automatically Replacing parts in Pro/E Assembly&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In this article, I'll walk through sample application written in Visual Basic using the Pro-E VB API. The sample application will connect to a Pro/Engineer session, search for assemblies in the given directory, search for a model in the assembly with the same name as assembly, replace with a specified part, then disconnect from the Pro/Engineer session. My Aim is to tryout an sample assembly program which I thought will be usefull to many people. Iam planning to provide more programs in future. Your comments are much appreciated.&lt;br /&gt;&lt;br /&gt;This program can be enhanced with an Excel interface for information on parts to be replaced.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;color:#cc0000;"&gt;&lt;strong&gt;&lt;em&gt;Auto Assembly Program&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;'Code for Auto Assembly Program&lt;br /&gt;Imports pfcls&lt;br /&gt;Imports System&lt;br /&gt;Imports System.IO&lt;br /&gt;&lt;br /&gt;Public Class Form1&lt;br /&gt;Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs_&lt;br /&gt;)Handles Button1.Click&lt;br /&gt;Dim conn As IpfcAsyncConnection = Nothing&lt;br /&gt;Dim session As IpfcBaseSession&lt;br /&gt;Dim pat, pat1 As String&lt;br /&gt;Dim model As IpfcModel&lt;br /&gt;Dim modelDesc As IpfcModelDescriptor&lt;br /&gt;Dim modelDesc1 As IpfcModelDescriptor&lt;br /&gt;Dim i, k As Integer&lt;br /&gt;Dim win As IpfcWindow&lt;br /&gt;Dim loc As String&lt;br /&gt;Dim modelnames As String() = Nothing&lt;br /&gt;Dim asmModels As Cstringseq&lt;br /&gt;Dim drawingPath As String&lt;br /&gt;Dim drawingName, drawingName1 As String Dim drawingName2() As String&lt;br /&gt;Dim errMsg As String = ""&lt;br /&gt;&lt;br /&gt;'For Assembly constraints&lt;br /&gt;Dim components As IpfcFeatures&lt;br /&gt;Dim component As IpfcComponentFeat&lt;br /&gt;Dim compConstraints As IpfcComponentConstraints&lt;br /&gt;Dim compConstraint As IpfcComponentConstraint&lt;br /&gt;Dim Constraint1 As IpfcComponentConstraint&lt;br /&gt;Dim Constraints1 As ipfcComponentConstraints&lt;br /&gt;Dim assembly As IpfcAssembly&lt;br /&gt;Dim assemblyDatums(2) As String&lt;br /&gt;Dim componentDatums(2) As String&lt;br /&gt;Dim asmReference As IpfcSelection&lt;br /&gt;Dim compReference As IpfcSelection&lt;br /&gt;Dim constraintType As String&lt;br /&gt;Dim componentModel As IpfcSolid&lt;br /&gt;Dim asmcomp As IpfcComponentFeat&lt;br /&gt;&lt;br /&gt;If Not System.Diagnostics.Process.GetProcessesByName("nmsd").Length &gt; 0 Then &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;errMsg =_ "Name service is not running on the system."&lt;br /&gt;End If &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;If System.Environment.GetEnvironmentVariable("PRO_COMM_MSG_EXE") = "" Then&lt;br /&gt;If errMsg = "" Then errMsg = "Environment variable 'PRO_COMM_MSG_EXE' has not been_ set."&lt;br /&gt;Else &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;errMsg = errMsg + Chr(13).ToString + "Environment variable_ 'PRO_COMM_MSG_EXE' has not been set."&lt;br /&gt;&lt;br /&gt;End If&lt;br /&gt;End If&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;If System.Environment.GetEnvironmentVariable("PRO_DIRECTORY") Is Nothing Then &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;If errMsg = "" Then&lt;br /&gt;errMsg = "Environment variable 'PRO_DIRECTORY' has not been set."&lt;br /&gt;Else &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;errMsg = errMsg + Chr(13).ToString + "Environment variable 'PRO_DIRECTORY' has not been set."&lt;br /&gt;&lt;br /&gt;End If &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;End If 'If Services are not running Exit Application &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;If Not errMsg = "" Then &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;errMsg = errMsg + Chr(13).ToString + "These may lead to errors in running the application." &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;MsgBox(errMsg, MsgBoxStyle.Critical) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Else 'Connect to Pro/Engineer &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;If conn Is Nothing OrElse Not conn.IsRunning Then &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;conn = (New CCpfcAsyncConnection).Connect(Nothing, Nothing, Nothing, Nothing)&lt;br /&gt;session = conn.Session &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;If session Is Nothing Then &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Throw New Exception("Session does not exist")&lt;br /&gt;Else &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;session.EraseUndisplayedModels() &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;'Directory for Pro/E Models&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;loc = "d:\proemodels\".ToLower&lt;br /&gt;asmModels = session.ListFiles("*.asm", EpfcFileListOpt.EpfcFILE_LIST_LATEST, loc) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;If asmModels.Count &lt;&gt; 0 Then&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;k = 0 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;For k = 0 To asmModels.Count - 1&lt;br /&gt;drawingPath = asmModels.Item(k)&lt;br /&gt;drawingName = drawingPath.Substring(loc.Length) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;drawingName1 = drawingName.Substring(0, drawingName.Length - 4) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;drawingName2 = drawingName1.Split("-") &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;pat1 = drawingName.Substring(0, 1).ToUpper &amp;amp; "SAMPLE" &amp;amp; drawingName2(1).ToUpper &amp;amp; ".prt"&lt;br /&gt;drawingName1 = drawingName1.Substring(drawingName1.Length - 7, 7).ToUpper&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;modelDesc1 = (New CCpfcModelDescriptor).Create(0, drawingName, Nothing) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;session.RetrieveModel(modelDesc1) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;session.OpenFile(modelDesc1).Activate() &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;model = session.CurrentModel&lt;br /&gt;assembly = CType(model, IpfcAssembly) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;modelDesc = (New CCpfcModelDescriptor).Create(1, pat1, Nothing) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;componentModel = session.RetrieveModel(modelDesc) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;pat1 = pat1.Substring(0, pat1.Length - 4)&lt;br /&gt;components = assembly.ListFeaturesByType(False, EpfcFeatureType.EpfcFEATTYPE_COMPONENT) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;'Search through the models in the current assembly&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;For i = 0 To components.Count - 1 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;component = components.Item(i) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;modelDesc = component.ModelDescr &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;If modelDesc.InstanceName = pat1 Then &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;compConstraints = component.GetConstraints() &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Constraints1 = New CpfcComponentConstraints&lt;br /&gt;asmcomp = assembly.AssembleComponent(componentModel, Nothing) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;For j = 0 To compConstraints.Count - 1&lt;br /&gt;compConstraint = compConstraints.Item(j) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;constraintType = constraintTypeToString(compConstraint.Type) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;asmReference = compConstraint.AssemblyReference &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;compReference = compConstraint.ComponentReference&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Select Case (constraintType) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Case "Mate"&lt;br /&gt;Constraint1 = (New CCpfcComponentConstraint).Create_(EpfcComponentConstraintType.EpfcASM_CONSTRAINT_MATE) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Constraint1.AssemblyReference = asmReference &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Constraint1.ComponentReference = compReference &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Constraints1.Insert(Constraints1.Count, Constraint1)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Case "Align"&lt;br /&gt;Constraint1 = (New CCpfcComponentConstraint).Create_(EpfcComponentConstraintType.EpfcASM_CONSTRAINT_ALIGN_OFF) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Constraint1.AssemblyReference = asmReference &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Constraint1.ComponentReference = compReference &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Constraints1.Insert(Constraints1.Count, Constraint1)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Case "Align Offset"&lt;br /&gt;Constraint1 = (New CCpfcComponentConstraint).Create_(EpfcComponentConstraintType.EpfcASM_CONSTRAINT_ALIGN) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Constraint1.AssemblyReference = asmReference &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Constraint1.ComponentReference = compReference &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Constraint1.Offset = 10 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Constraints1.Insert(Constraints1.Count, Constraint1) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;End Select &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Next &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;asmcomp.SetConstraints(Constraints1, Nothing)&lt;br /&gt;assembly.Regenerate(Nothing)&lt;br /&gt;session.GetModelWindow(assembly).Repaint()&lt;br /&gt;model.Save() &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;End If &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;session.CurrentWindow.Activate()&lt;br /&gt;win = session.CurrentWindow&lt;br /&gt;Next conn.Disconnect(2) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Private Function constraintTypeToString(ByVal type As Integer) As String &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Select Case (type)&lt;br /&gt;&lt;br /&gt;Case EpfcComponentConstraintType.EpfcASM_CONSTRAINT_MATE&lt;br /&gt;Return ("Mate")&lt;br /&gt;&lt;br /&gt;Case EpfcComponentConstraintType.EpfcASM_CONSTRAINT_MATE_OFF&lt;br /&gt;Return ("Mate Offset")&lt;br /&gt;&lt;br /&gt;Case EpfcComponentConstraintType.EpfcASM_CONSTRAINT_ALIGN&lt;br /&gt;Return ("Align")&lt;br /&gt;&lt;br /&gt;Case EpfcComponentConstraintType.EpfcASM_CONSTRAINT_ALIGN_OFF&lt;br /&gt;Return ("Align Offset")&lt;br /&gt;&lt;br /&gt;Case EpfcComponentConstraintType.EpfcASM_CONSTRAINT_INSERT&lt;br /&gt;Return ("Insert")&lt;br /&gt;&lt;br /&gt;Case EpfcComponentConstraintType.EpfcASM_CONSTRAINT_ORIENT&lt;br /&gt;Return ("Orient")&lt;br /&gt;&lt;br /&gt;Case EpfcComponentConstraintType.EpfcASM_CONSTRAINT_CSYS&lt;br /&gt;Return ("Csys")&lt;br /&gt;&lt;br /&gt;Case EpfcComponentConstraintType.EpfcASM_CONSTRAINT_TANGENT&lt;br /&gt;Return ("Tangent")&lt;br /&gt;&lt;br /&gt;Case EpfcComponentConstraintType.EpfcASM_CONSTRAINT_PNT_ON_SRF&lt;br /&gt;Return ("Point on Surf")&lt;br /&gt;&lt;br /&gt;Case EpfcComponentConstraintType.EpfcASM_CONSTRAINT_EDGE_ON_SRF&lt;br /&gt;Return ("Edge on Surf")&lt;br /&gt;&lt;br /&gt;Case EpfcComponentConstraintType.EpfcASM_CONSTRAINT_DEF_PLACEMENT&lt;br /&gt;Return ("Default")&lt;br /&gt;&lt;br /&gt;Case EpfcComponentConstraintType.EpfcASM_CONSTRAINT_SUBSTITUTE&lt;br /&gt;Return ("Substitute")&lt;br /&gt;&lt;br /&gt;Case EpfcComponentConstraintType.EpfcASM_CONSTRAINT_PNT_ON_LINE&lt;br /&gt;Return ("Point on Line")&lt;br /&gt;&lt;br /&gt;Case EpfcComponentConstraintType.EpfcASM_CONSTRAINT_FIX&lt;br /&gt;Return ("Fix")&lt;br /&gt;&lt;br /&gt;Case EpfcComponentConstraintType.EpfcASM_CONSTRAINT_AUTO&lt;br /&gt;Return ("Auto")&lt;br /&gt;&lt;br /&gt;End Select&lt;br /&gt;&lt;br /&gt;Return ("Unrecognized Type")&lt;br /&gt;End Function&lt;br /&gt;End Class&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6522412646466639937-700555770682415915?l=proevbapi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proevbapi.blogspot.com/feeds/700555770682415915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://proevbapi.blogspot.com/2008/07/pro-e-vb-api-just-got-easy.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6522412646466639937/posts/default/700555770682415915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6522412646466639937/posts/default/700555770682415915'/><link rel='alternate' type='text/html' href='http://proevbapi.blogspot.com/2008/07/pro-e-vb-api-just-got-easy.html' title='Pro-E VB API Just got Easy'/><author><name>Srinivasan</name><uri>http://www.blogger.com/profile/10472349225800059790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_fyiOgJjpkxM/SlXkotLu6YI/AAAAAAAAAl8/4qWvQwPURRQ/S220/srini1.JPG'/></author><thr:total>1</thr:total></entry></feed>
