static void Main(string[] args) { SolidEdgeFramework.Application application = null; SolidEdgeFramework.Documents documents = null; SolidEdgeAssembly.AssemblyDocument assemblyDocument = null; SolidEdgeAssembly.Relations3d relations3d = null; try { Console.WriteLine("Registering OleMessageFilter."); // Register with OLE to handle concurrency issues on the current thread. OleMessageFilter.Register(); Console.WriteLine("Connecting to Solid Edge."); // Connect to or start Solid Edge. application = SolidEdgeUtils.Connect(true); // Make sure user can see the GUI. application.Visible = true; // Bring Solid Edge to the foreground. application.Activate(); // Get a reference to the documents collection. documents = application.Documents; Console.WriteLine("Opening Coffee Pot.asm."); string fileName = Path.Combine(SolidEdgeUtils.GetTrainingPath(), "Coffee Pot.asm"); // Create a new assembly document. assemblyDocument = (SolidEdgeAssembly.AssemblyDocument) documents.Open(fileName); // Always a good idea to give SE a chance to breathe. application.DoIdle(); // Get a reference to the Relations3d collection. relations3d = assemblyDocument.Relations3d; ReportRelations3d(relations3d); } catch (System.Exception ex) { #if DEBUG System.Diagnostics.Debugger.Break(); #endif Console.WriteLine(ex.Message); } }
static void ReportRelations3d(SolidEdgeAssembly.Relations3d relations3d) { SolidEdgeAssembly.GroundRelation3d groundRelation3d = null; SolidEdgeAssembly.AxialRelation3d axialRelation3d = null; SolidEdgeAssembly.PlanarRelation3d planarRelation3d = null; for (int i = 1; i <= relations3d.Count; i++) { object relation3d = relations3d.Item(i); // GetInteropType() is a custom method extension! Type t = relation3d.GetInteropType(); Console.WriteLine("Relations3d[{0}] is of type '{1}'.", i, t); // Determine the ObjectType. SolidEdgeFramework.ObjectType relationType = (SolidEdgeFramework.ObjectType)relation3d.GetType().InvokeMember("Type", System.Reflection.BindingFlags.GetProperty, null, relation3d, null); switch (relationType) { case SolidEdgeFramework.ObjectType.igGroundRelation3d: groundRelation3d = (SolidEdgeAssembly.GroundRelation3d)relation3d; break; case SolidEdgeFramework.ObjectType.igAxialRelation3d: axialRelation3d = (SolidEdgeAssembly.AxialRelation3d)relation3d; break; case SolidEdgeFramework.ObjectType.igPlanarRelation3d: planarRelation3d = (SolidEdgeAssembly.PlanarRelation3d)relation3d; break; default: break; } } }
static void Main(string[] args) { SolidEdgeFramework.Application application = null; SolidEdgeAssembly.AssemblyDocument assemblyDocument = null; SolidEdgeAssembly.Relations3d relations3d = null; SolidEdgeAssembly.GroundRelation3d groundRelation3d = null; SolidEdgeAssembly.AxialRelation3d axialRelation3d = null; SolidEdgeAssembly.PlanarRelation3d planarRelation3d = null; SolidEdgeAssembly.Occurrence occurrence1 = null; SolidEdgeAssembly.Occurrence occurrence2 = null; SolidEdgeAssembly.Relation3dDetailedStatusConstants detailedStatus; SolidEdgeAssembly.Relation3dStatusConstants status; try { // Register with OLE to handle concurrency issues on the current thread. SolidEdgeCommunity.OleMessageFilter.Register(); // Connect to or start Solid Edge. application = SolidEdgeCommunity.SolidEdgeUtils.Connect(true, true); // Get a reference to the active document. assemblyDocument = application.GetActiveDocument <SolidEdgeAssembly.AssemblyDocument>(false); // Get a reference to the Relations3d collection. relations3d = assemblyDocument.Relations3d; foreach (var relation3d in relations3d.OfType <object>()) { try { // Not used in this sample but a good example of how to get the runtime type. var relationType = SolidEdgeCommunity.Runtime.InteropServices.ComObject.GetType(relation3d); // Use helper class to get the object type. var relationObjectType = SolidEdgeCommunity.Runtime.InteropServices.ComObject.GetPropertyValue <SolidEdgeFramework.ObjectType>(relation3d, "Type", (SolidEdgeFramework.ObjectType) 0); // Reset statuses. detailedStatus = (SolidEdgeAssembly.Relation3dDetailedStatusConstants) 0; status = (SolidEdgeAssembly.Relation3dStatusConstants) 0; // Handle specific object type. There are other possible relation types... switch (relationObjectType) { case SolidEdgeFramework.ObjectType.igGroundRelation3d: // Cast relation3d object to GroundRelation3d type. groundRelation3d = (SolidEdgeAssembly.GroundRelation3d)relation3d; // Get a reference to the grounded occurrence. occurrence1 = groundRelation3d.Occurrence; // Get the detailed status. detailedStatus = groundRelation3d.DetailedStatus; // Get the status. status = groundRelation3d.Status; break; case SolidEdgeFramework.ObjectType.igAxialRelation3d: // Cast relation3d object to AxialRelation3d type. axialRelation3d = (SolidEdgeAssembly.AxialRelation3d)relation3d; // Get a reference to the related occurrences. occurrence1 = axialRelation3d.Occurrence1; occurrence2 = axialRelation3d.Occurrence2; // Get the detailed status. detailedStatus = axialRelation3d.DetailedStatus; // Get the status. status = axialRelation3d.Status; break; case SolidEdgeFramework.ObjectType.igPlanarRelation3d: // Cast relation3d object to PlanarRelation3d type. planarRelation3d = (SolidEdgeAssembly.PlanarRelation3d)relation3d; // Get a reference to the related occurrences. occurrence1 = planarRelation3d.Occurrence1; occurrence2 = planarRelation3d.Occurrence2; // Get the detailed status. detailedStatus = planarRelation3d.DetailedStatus; // Get the status. status = planarRelation3d.Status; break; default: break; } // Analyze the detailed status. switch (detailedStatus) { case SolidEdgeAssembly.Relation3dDetailedStatusConstants.igRelation3dDetailedStatusBetweenFixed: break; case SolidEdgeAssembly.Relation3dDetailedStatusConstants.igRelation3dDetailedStatusBetweenSetMembers: break; case SolidEdgeAssembly.Relation3dDetailedStatusConstants.igRelation3dDetailedStatusMissingGeometry: break; case SolidEdgeAssembly.Relation3dDetailedStatusConstants.igRelation3dDetailedStatusSolved: break; case SolidEdgeAssembly.Relation3dDetailedStatusConstants.igRelation3dDetailedStatusSuppressed: break; case SolidEdgeAssembly.Relation3dDetailedStatusConstants.igRelation3dDetailedStatusUnknown: break; case SolidEdgeAssembly.Relation3dDetailedStatusConstants.igRelation3dDetailedStatusUnsatisfied: break; } // Analyze the status. switch (status) { case SolidEdgeAssembly.Relation3dStatusConstants.igRelation3dStatusSolved: break; case SolidEdgeAssembly.Relation3dStatusConstants.igRelation3dStatusUnsolved: break; } } catch { } } } catch (System.Exception ex) { Console.WriteLine(ex.Message); } finally { SolidEdgeCommunity.OleMessageFilter.Unregister(); } }
private void OkButton_Click(object sender, EventArgs e) { Log.Debug("assemblyDocument: " + this.Document.Name + " path: " + this.Document.Path); if (string.IsNullOrEmpty(this.Document.Path)) { MessageBox.Show("You must save the current assembly before adding parts"); } else { SolidEdgePart.PartDocument partDocument = (SolidEdgePart.PartDocument) this.Document.Application.Documents.Open(this._filePath, 0x00000008);//, "8"); this.Document.Application.DoIdle(); Log.Debug("partDocument: " + partDocument.Name); // Get file properties of the partDocument SolidEdgeFramework.Properties objProperties = ((SolidEdgeFramework.PropertySets)partDocument.Properties).Item("Custom"); // Handles naming convention when it is not followed int length = partDocument.Name.IndexOf(".par"); if (length <= 0) { Log.Warn("selected file is not a Part Document"); length = partDocument.Name.Length; } string fileName = partDocument.Name.Substring(0, length); string[] variableValuesArray = new string[this._settings.getNumberOfVariables()]; foreach (PartProperty partProperty in this.partPropertyBindingSource) { if (this._settings.isVariableDefined(partProperty.Name)) { // Get a reference to the Variables collection. SolidEdgeFramework.Variables variables = (SolidEdgeFramework.Variables)partDocument.Variables; // Get a reference to the variableList. SolidEdgeFramework.VariableList variableList = (SolidEdgeFramework.VariableList)variables.Query(partProperty.Name, SolidEdgeConstants.VariableNameBy.seVariableNameByBoth, SolidEdgeConstants.VariableVarType.SeVariableVarTypeBoth, false); foreach (var property in variableList) { try { Type type = property.GetType(); SolidEdgeFramework.ObjectType objectType = (SolidEdgeFramework.ObjectType)type.InvokeMember("Type", System.Reflection.BindingFlags.GetProperty, null, property, null); switch (objectType) { case SolidEdgeFramework.ObjectType.igDimension: SolidEdgeFrameworkSupport.Dimension dimension = (SolidEdgeFrameworkSupport.Dimension)property; dimension.Value = partProperty.GetSolidEdgeStoredValue(partDocument.UnitsOfMeasure); Marshal.FinalReleaseComObject(dimension); break; case SolidEdgeFramework.ObjectType.igVariable: SolidEdgeFramework.variable variable = (SolidEdgeFramework.variable)property; variable.Value = partProperty.GetSolidEdgeStoredValue(partDocument.UnitsOfMeasure); Marshal.FinalReleaseComObject(variable); break; } Log.Debug(this._settings.getVariableIndex(partProperty.Name) + " >= " + variableValuesArray.Length); if (this._settings.getVariableIndex(partProperty.Name) >= variableValuesArray.Length) { Array.Resize <string>(ref variableValuesArray, this._settings.getVariableIndex(partProperty.Name) + 1); } variableValuesArray[this._settings.getVariableIndex(partProperty.Name)] = partProperty.Value + " " + partProperty.Units; // Update file property try { // TODO: Fix exception when partProperty.Name is not defined in objProperties.Item SolidEdgeFramework.Property objProperty = objProperties.Item(partProperty.Name); objProperty.set_Value(partProperty.Value.ToString()); Marshal.FinalReleaseComObject(objProperty); } catch (Exception ex) { Log.Warn("no file property exists for " + partProperty.Name + " | " + ex.Message); } } catch (Exception ex) { Log.Error(ex.Message); } } Marshal.FinalReleaseComObject(variables); Marshal.FinalReleaseComObject(variableList); } } objProperties.Save(); Marshal.FinalReleaseComObject(objProperties); // Remove invalid fileName characters fileName = string.Join("", fileName.Split(Path.GetInvalidFileNameChars())); variableValuesArray = variableValuesArray.Where(c => c != null).ToArray(); fileName += "-" + string.Join(this._settings.getFileNameSeparator(), variableValuesArray); Log.Debug("fileName: " + fileName); string fullPathName = this.Document.Path; string assemblyPartFolderName = _settings.getAssemblyPartFolderName(); if (assemblyPartFolderName != null & assemblyPartFolderName != "") { assemblyPartFolderName = string.Join("", assemblyPartFolderName.Split(Path.GetInvalidFileNameChars())); fullPathName += "\\" + assemblyPartFolderName; Directory.CreateDirectory(fullPathName); } fullPathName += "\\" + fileName + ".par"; Log.Debug("fullPathName: " + fullPathName); if (!File.Exists(fullPathName)) { partDocument.SaveCopyAs(fullPathName); } this.Document.Application.DoIdle(); partDocument.Close(false); this.Document.Application.DoIdle(); Marshal.FinalReleaseComObject(partDocument); this.HideConfigurationContainer(); int count = ((SolidEdgeAssembly.AssemblyDocument) this.Document).Occurrences.Count; if (count > 0) { SolidEdgeAssembly.Occurrence occurrence = ((SolidEdgeAssembly.AssemblyDocument) this.Document).Occurrences.Item(count); occurrence.GetTransform(out double OriginX, out double OriginY, out double OriginZ, out double AngleX, out double AngleY, out double AngleZ); Marshal.ReleaseComObject(occurrence); double offset = 0.05; occurrence = ((SolidEdgeAssembly.AssemblyDocument) this.Document).Occurrences.AddWithTransform(fullPathName, OriginX + offset, OriginY + offset, OriginZ + offset, AngleX, AngleY, AngleZ); // delete grounded relationship from occurrence.Relations3d SolidEdgeAssembly.Relations3d relation3d = (SolidEdgeAssembly.Relations3d)occurrence.Relations3d; foreach (var relation in relation3d) { Type type = relation.GetType(); // Get the value of the Type proprety via Reflection SolidEdgeFramework.ObjectType objectType = (SolidEdgeFramework.ObjectType)type.InvokeMember("Type", BindingFlags.GetProperty, null, relation, null); // Determine the relation type switch (objectType) { case SolidEdgeFramework.ObjectType.igGroundRelation3d: SolidEdgeAssembly.GroundRelation3d groundRelation3d = (SolidEdgeAssembly.GroundRelation3d)relation; groundRelation3d.Delete(); break; } } Marshal.FinalReleaseComObject(relation3d); Marshal.FinalReleaseComObject(occurrence); } else { ((SolidEdgeAssembly.AssemblyDocument) this.Document).Occurrences.AddWithTransform(fullPathName, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); } } }