在所有操作之前,必须要进行引入Solid Edge的dll文件
using SolidEdgeCommunity.Extensions;using SolidEdgeConstants;using SolidEdgeFrameworkSupport;using SolidEdgeGeometry;using SolidEdgePart;using FeaturePropertyConstants = SolidEdgePart.FeaturePropertyConstants;using FeatureStatusConstants = SolidEdgePart.FeatureStatusConstants;using FeatureTopologyQueryTypeConstants = SolidEdgeGeometry.FeatureTopologyQueryTypeConstants;using PatternOffsetTypeConstants = SolidEdgeFrameworkSupport.PatternOffsetTypeConstants;using ProfileValidationType = SolidEdgePart.ProfileValidationType;using ReferenceElementConstants = SolidEdgePart.ReferenceElementConstants;using SEPatternRecognitionLevel = SolidEdgeConstants.SEPatternRecognitionLevel;
private void button1_Click_1(object sender, EventArgs e){ //建立objApp变量,Application是SolidEdgeFrameWork框架结构类型库的子类 private SolidEdgeFramework.Application objApp; //建立objDoc变量,PartDocument是SolidEdgePart的子类,是一个数据文档,包含零件的几何和属性数据。 private SolidEdgePart.PartDocument objDoc; //@1 连接solidedge应用 // Register with OLE to handle concurrency issues on the current thread. SolidEdgeCommunity.OleMessageFilter.Register(); //Connect to or start Solid Edge.这个方法里面的两个参数是开启功能:1、如果未启动就启动一个,2、如果启动了就显示, objApp = SolidEdgeCommunity.SolidEdgeUtils.Connect(true, true); //Creates a new part document. objDoc = objApp.Documents.AddPartDocument(); objApp.DoIdle(); objApp.Visible = true;}
//创建零件文档objApp.Documents.AddPartDocument();//创建装配文档objApp.Documents.AddAssemblyDocument();//创建工程图文档objApp.Documents.AddDraftDocument();
private void button4_Click(object sender, EventArgs e){ OpenFileDialog fileDialog = new OpenFileDialog(); fileDialog.Multiselect = true; fileDialog.Title = "请选择文件"; fileDialog.Filter = "所有文件(*.par)|*.par"; if (fileDialog.ShowDialog() == DialogResult.OK) { string filePath = fileDialog.FileName; //@1 连接solidedge应用 // Register with OLE to handle concurrency issues on the current thread. SolidEdgeCommunity.OleMessageFilter.Register(); //Connect to or start Solid Edge.这个方法里面的两个参数是开启功能:1、如果未启动就启动一个,2、如果启动了就显示, objApp = SolidEdgeCommunity.SolidEdgeUtils.Connect(true, true); //open a new part document. objDoc = objApp.Documents.Open(filePath); objApp.DoIdle(); objApp.Visible = true; } else { MessageBox.Show("路径获取失败", "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Information); }}
objApp.Documents.Open(filePath);
/** * 保存当前活动的文件 */private void button5_Click(object sender, EventArgs e){ FolderBrowserDialog dialog = new FolderBrowserDialog(); dialog.Description = "请选择文件路径"; DateTime dateTime = DateTime.Now; if (dialog.ShowDialog() == DialogResult.OK) { string foldPath = dialog.SelectedPath; string newFilePath = foldPath + @"\" + dateTime.ToString("yyyyMMddHHmmss") + ".par"; //@1 连接solidedge应用 // Register with OLE to handle concurrency issues on the current thread. SolidEdgeCommunity.OleMessageFilter.Register(); //Connect to or start Solid Edge.这个方法里面的两个参数是开启功能:1、如果未启动就启动一个,2、如果启动了就显示, objApp = SolidEdgeCommunity.SolidEdgeUtils.Connect(true, true); //获取当前活动的数据文档,并报错在当前位置的当前文件名,如果是新创建没有文件名的方法不能用这个,得用SaveAs //objApp.GetActiveDocument().Save(); try { objApp.GetActiveDocument().SaveAs(newFilePath); objApp.DoIdle(); objApp.Visible = true; MessageBox.Show("保存成功"); } catch { MessageBox.Show("没有正在活动的文档"); } } else { MessageBox.Show("路径获取失败", "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Information); }}
//获取当前活动的数据文档,并报错在当前位置的当前文件名,如果是新创建没有文件名的方法不能用这个,得用SaveAsobjApp.GetActiveDocument().Save();//没有初始文件名,相当于另存为objApp.GetActiveDocument().SaveAs(newFilePath);
objApp.ActiveDocument.SaveAs(newFilePath);
但是c#中的dll没有这个接口,是通过get方法获取到的。/** * 退出软件 */private void button6_Click(object sender, EventArgs e){ //@1 连接solidedge应用 // Register with OLE to handle concurrency issues on the current thread. SolidEdgeCommunity.OleMessageFilter.Register(); //Connect to or start Solid Edge.这个方法里面的两个参数是开启功能:1、如果未启动就启动一个,2、如果启动了就显示, objApp = SolidEdgeCommunity.SolidEdgeUtils.Connect(true, true); objApp.GetActiveDocument().Save(); objApp.Quit();}
objApp.Quit();
/** * 旋转、偏移平面 */private void button7_Click(object sender, EventArgs e){ //@1 连接solidedge应用 // Register with OLE to handle concurrency issues on the current thread. SolidEdgeCommunity.OleMessageFilter.Register(); //Connect to or start Solid Edge.这个方法里面的两个参数是开启功能:1、如果未启动就启动一个,2、如果启动了就显示, objApp = SolidEdgeCommunity.SolidEdgeUtils.Connect(true, true); //创建装配文档 AssemblyDocument objAssyDoc = objApp.Documents.AddAssemblyDocument(); //获得装配参考面集合对象 AsmRefPlanes asmRefPlanes = objAssyDoc.AsmRefPlanes; //建立与yoz面成120°的参考面 //先选择yoz参考面,作为母平面 AsmRefPlane objPPlane = asmRefPlanes.Item(2); //然后旋转120° AsmRefPlane asmRefPlane = asmRefPlanes.AddAngularByAngle( //设置倾斜的母平面 ParentPlane: objPPlane, //旋转角度 Angle: (2 * PI / 3), //与母平面objPPlane相交来定义倾斜平面的旋转轴 Pivot: asmRefPlanes.Item(1), //定义新参考平面轴的原点 PivotOrigin: ReferenceElementConstants.igPivotEnd, //标识顺时针旋转 NormalSide: ReferenceElementConstants.igNormalSide, //这个打开标识为局部的 Local: true ); //创建零件文档 PartDocument objPartDoc = objApp.Documents.AddPartDocument(); //获得零件参考面集合对象 RefPlanes refPlanes = objPartDoc.RefPlanes; //建立与xoy基准面平行的参考平面 RefPlane refPlane = refPlanes.AddParallelByDistance( //定义母平面为xoy面 ParentPlane: refPlanes.Item(1), //定义和母平面的距离 Distance: 0.1, //定义新增参考面为正向的 NormalSide: ReferenceElementConstants.igNormalSide, //标识不是局部的 Local: false ); objApp.DoIdle(); objApp.Visible = true;}
//获得装配参考面集合对象 AsmRefPlanes asmRefPlanes = objAssyDoc.AsmRefPlanes; //建立与yoz面成120°的参考面 //先选择yoz参考面,作为母平面 AsmRefPlane objPPlane = asmRefPlanes.Item(2); //然后旋转120° AsmRefPlane asmRefPlane = asmRefPlanes.AddAngularByAngle( //设置倾斜的母平面 ParentPlane: objPPlane, //旋转角度 Angle: (2 * PI / 3), //与母平面objPPlane相交来定义倾斜平面的旋转轴 Pivot: asmRefPlanes.Item(1), //定义新参考平面轴的原点 PivotOrigin: ReferenceElementConstants.igPivotEnd, //标识顺时针旋转 NormalSide: ReferenceElementConstants.igNormalSide, //这个打开标识为局部的 Local: true );
操作结果:
/** * 参数化,旋转、偏移平面 */private void button8_Click(object sender, EventArgs e){ //@1 连接solidedge应用 // Register with OLE to handle concurrency issues on the current thread. SolidEdgeCommunity.OleMessageFilter.Register(); //Connect to or start Solid Edge.这个方法里面的两个参数是开启功能:1、如果未启动就启动一个,2、如果启动了就显示, objApp = SolidEdgeCommunity.SolidEdgeUtils.Connect(true, true); //创建零件文档 PartDocument objPartDoc = objApp.Documents.AddPartDocument(); //获得零件参考面集合对象 RefPlanes refPlanes = objPartDoc.RefPlanes; //获取动态参数 string combox1 = comboBox1.Text; double textbox1 = double.Parse(textBox1.Text); string combox2 = comboBox2.Text; //n代表平面代号码,默认为1 int n = 1; //判断平面编号 if (combox1 == "X-Z") { n = 3; } else if (combox1 == "Y-Z") { n = 2; } //m代表平移距离 double m = textbox1 / 1000; //g代表方向 ReferenceElementConstants g = combox2 == "正向" ? ReferenceElementConstants.igNormalSide : ReferenceElementConstants.igReverseNormalSide; //建立与xoy基准面平行的参考平面 RefPlane refPlane = refPlanes.AddParallelByDistance( //定义母平面为xoy面 ParentPlane: refPlanes.Item(n), //定义和母平面的距离 Distance: m, //定义新增参考面为正向的 NormalSide: g, //标识不是局部的 Local: false ); //RefAxes refAxes = objPartDoc.RefAxes; //Profile profile; //RefAxis refAxis = profile.SetAxisOfRevolution(LineForAxis:objLine); objApp.DoIdle(); objApp.Visible = true;}
//获取动态参数 string combox1 = comboBox1.Text; double textbox1 = double.Parse(textBox1.Text); string combox2 = comboBox2.Text; //n代表平面代号码,默认为1 int n = 1; //判断平面编号 if (combox1 == "X-Z") { n = 3; } else if (combox1 == "Y-Z") { n = 2; } //m代表平移距离 double m = textbox1 / 1000; //g代表方向 ReferenceElementConstants g = combox2 == "正向" ? ReferenceElementConstants.igNormalSide : ReferenceElementConstants.igReverseNormalSide;
this.comboBox1.SelectedIndex = 0;
/** * 划直线 */private void button10_Click(object sender, EventArgs e){ //@1 连接solidedge应用 // Register with OLE to handle concurrency issues on the current thread. SolidEdgeCommunity.OleMessageFilter.Register(); //Connect to or start Solid Edge.这个方法里面的两个参数是开启功能:1、如果未启动就启动一个,2、如果启动了就显示, objApp = SolidEdgeCommunity.SolidEdgeUtils.Connect(true, true); //创建零件文档 PartDocument objPartDoc = objApp.Documents.AddPartDocument(); Lines2d lines2d = objPartDoc.ProfileSets.Add().Profiles.Add(pRefPlaneDisp: objPartDoc.RefPlanes.Item(1)).Lines2d; lines2d.AddBy2Points(0, 0, 0.01, 0.01); objApp.DoIdle(); objApp.Visible = true;}
//创建零件文档PartDocument objPartDoc = objApp.Documents.AddPartDocument(); Lines2d lines2d = objPartDoc.ProfileSets.Add().Profiles.Add(pRefPlaneDisp: objPartDoc.RefPlanes.Item(1)).Lines2d; lines2d.AddBy2Points(0, 0, 0.01, 0.01);
结果展示:
/** * 带参-划直线 */private void button12_Click(object sender, EventArgs e){ if (textBox2.Text == "" || textBox3.Text == "") { MessageBox.Show("必填项不能为空"); return; } //@1 连接solidedge应用 // Register with OLE to handle concurrency issues on the current thread. SolidEdgeCommunity.OleMessageFilter.Register(); //Connect to or start Solid Edge.这个方法里面的两个参数是开启功能:1、如果未启动就启动一个,2、如果启动了就显示, objApp = SolidEdgeCommunity.SolidEdgeUtils.Connect(true, true); //创建零件文档 PartDocument objPartDoc = objApp.Documents.AddPartDocument(); Profile objProfile = objPartDoc.ProfileSets.Add().Profiles.Add(objPartDoc.RefPlanes.Item(1)); //获得直线参数 double line_angle = double.Parse(textBox3.Text) * PI / 180; double line_llen = double.Parse(textBox2.Text) / 1000; objProfile.Lines2d.AddByPointAngleLength(0, 0, line_angle, line_llen); objApp.DoIdle(); objApp.Visible = true;}
//获得直线参数double line_angle = double.Parse(textBox3.Text) * PI / 180;double line_llen = double.Parse(textBox2.Text) / 1000; objProfile.Lines2d.AddByPointAngleLength(0, 0, line_angle, line_llen);
/** * 画圆 */private void button11_Click(object sender, EventArgs e){ if (textBox5.Text == "") { MessageBox.Show("必填项不能为空"); return; } //@1 连接solidedge应用 // Register with OLE to handle concurrency issues on the current thread. SolidEdgeCommunity.OleMessageFilter.Register(); //Connect to or start Solid Edge.这个方法里面的两个参数是开启功能:1、如果未启动就启动一个,2、如果启动了就显示, objApp = SolidEdgeCommunity.SolidEdgeUtils.Connect(true, true); //创建零件文档 PartDocument objPartDoc = objApp.Documents.AddPartDocument(); Profile objProfile1 = objPartDoc.ProfileSets.Add().Profiles.Add(objPartDoc.RefPlanes.Item(1)); Profile objProfile2 = objPartDoc.ProfileSets.Add().Profiles.Add(objPartDoc.RefPlanes.Item(2)); Profile objProfile3 = objPartDoc.ProfileSets.Add().Profiles.Add(objPartDoc.RefPlanes.Item(3)); //获得直线参数 double radius = double.Parse(textBox5.Text) / 1000; //原点加半径 objProfile1.Circles2d.AddByCenterRadius(0, 0, radius); objProfile2.Circles2d.AddByCenterRadius(0, 0, radius); objProfile3.Circles2d.AddByCenterRadius(0, 0, radius); objApp.DoIdle(); objApp.Visible = true;}
Profile objProfile1 = objPartDoc.ProfileSets.Add().Profiles.Add(objPartDoc.RefPlanes.Item(1)); //获得直线参数double radius = double.Parse(textBox5.Text) / 1000; //原点加半径objProfile1.Circles2d.AddByCenterRadius(0, 0, radius);
/** * 画弧线 */private void button13_Click(object sender, EventArgs e){ if (textBox4.Text == "" || textBox6.Text == "") { MessageBox.Show("必填项不能为空"); return; } //@1 连接solidedge应用 // Register with OLE to handle concurrency issues on the current thread. SolidEdgeCommunity.OleMessageFilter.Register(); //Connect to or start Solid Edge.这个方法里面的两个参数是开启功能:1、如果未启动就启动一个,2、如果启动了就显示, objApp = SolidEdgeCommunity.SolidEdgeUtils.Connect(true, true); //创建零件文档 PartDocument objPartDoc = objApp.Documents.AddPartDocument(); Profile objProfile = objPartDoc.ProfileSets.Add().Profiles.Add(objPartDoc.RefPlanes.Item(1)); //获得圆的输入参数 double arc_r = double.Parse(textBox4.Text) / 1000; double arc_a = double.Parse(textBox6.Text); //对参数进行数学转换 double point_x = arc_r * Math.Cos(arc_a * PI / 180); double point_y = arc_r * Math.Sin(arc_a * PI / 180); //中心点,起始点,终点坐标 objProfile.Arcs2d.AddByCenterStartEnd( xCenter: 0, yCenter: 0, xStart: arc_r, yStart: 0, xEnd: point_x, yEnd: point_y); objApp.DoIdle(); objApp.Visible = true;}
//获得圆的输入参数 double arc_r = double.Parse(textBox4.Text) / 1000; double arc_a = double.Parse(textBox6.Text); //对参数进行数学转换 double point_x = arc_r * Math.Cos(arc_a * PI / 180); double point_y = arc_r * Math.Sin(arc_a * PI / 180); //中心点,起始点,终点坐标 objProfile.Arcs2d.AddByCenterStartEnd( xCenter: 0, yCenter: 0, xStart: arc_r, yStart: 0, xEnd: point_x, yEnd: point_y);
/** * 画矩形 */private void button14_Click(object sender, EventArgs e){ if (textBox8.Text == "" || textBox7.Text == "") { MessageBox.Show("必填项不能为空"); return; } //@1 连接solidedge应用 // Register with OLE to handle concurrency issues on the current thread. SolidEdgeCommunity.OleMessageFilter.Register(); //Connect to or start Solid Edge.这个方法里面的两个参数是开启功能:1、如果未启动就启动一个,2、如果启动了就显示, objApp = SolidEdgeCommunity.SolidEdgeUtils.Connect(true, true); //创建零件文档 PartDocument objPartDoc = objApp.Documents.AddPartDocument(); Profile objProfile = objPartDoc.ProfileSets.Add().Profiles.Add(objPartDoc.RefPlanes.Item(3)); //获得矩形的输入参数 double objWidth = double.Parse(textBox8.Text) / 1000; double objHeight = double.Parse(textBox7.Text) / 1000; RectangularPattern2d objRPattern = objProfile.RectangularPatterns2d.Add( OriginX: 0, OriginY: 0, Width: objWidth, Height: objHeight, Angle: 0, OffsetType: PatternOffsetTypeConstants.sePatternFillOffset, XCount: 6, YCount: 4, XSpace: 0.015, YSpace: 0.01); objApp.DoIdle(); objApp.Visible = true;}
//获得矩形的输入参数double objWidth = double.Parse(textBox8.Text) / 1000;double objHeight = double.Parse(textBox7.Text) / 1000; RectangularPattern2d objRPattern = objProfile.RectangularPatterns2d.Add( OriginX: 0, OriginY: 0, Width: objWidth, Height: objHeight, Angle: 0, OffsetType: PatternOffsetTypeConstants.sePatternFillOffset, XCount: 6, YCount: 4, XSpace: 0.015, YSpace: 0.01);
/** * 复制图形元素 */private void button16_Click(object sender, EventArgs e){ //@1 连接solidedge应用 // Register with OLE to handle concurrency issues on the current thread. SolidEdgeCommunity.OleMessageFilter.Register(); //Connect to or start Solid Edge.这个方法里面的两个参数是开启功能:1、如果未启动就启动一个,2、如果启动了就显示, objApp = SolidEdgeCommunity.SolidEdgeUtils.Connect(true, true); //创建零件文档 PartDocument objPartDoc = objApp.Documents.AddPartDocument(); Profile objProfile1 = objPartDoc.ProfileSets.Add().Profiles.Add(objPartDoc.RefPlanes.Item(1)); //原点加半径 Circle2d circle2D = objProfile1.Circles2d.AddByCenterRadius(0, 0, 0.08); //复制圆 circle2D.Duplicate(XDistance: 0.1); circle2D.Duplicate(YDistance: 0.1); circle2D.Duplicate(XDistance: 0.1, YDistance: 0.1); objApp.DoIdle(); objApp.Visible = true;}
//原点加半径Circle2d circle2D = objProfile1.Circles2d.AddByCenterRadius(0, 0, 0.08); //复制圆circle2D.Duplicate(XDistance: 0.1);circle2D.Duplicate(YDistance: 0.1);circle2D.Duplicate(XDistance: 0.1, YDistance: 0.1);
/** * 创建圆角 */private void button18_Click(object sender, EventArgs e){ //@1 连接solidedge应用 // Register with OLE to handle concurrency issues on the current thread. SolidEdgeCommunity.OleMessageFilter.Register(); //Connect to or start Solid Edge.这个方法里面的两个参数是开启功能:1、如果未启动就启动一个,2、如果启动了就显示, objApp = SolidEdgeCommunity.SolidEdgeUtils.Connect(true, true); //创建零件文档 PartDocument objPartDoc = objApp.Documents.AddPartDocument(); //先创建轮廓对象集合 Profile profile = objPartDoc.ProfileSets.Add().Profiles.Add(objPartDoc.RefPlanes.Item(1)); //在轮廓里创建直线,用来画长方形,也可以用其他方法划长方形 Line2d line1 = profile.Lines2d.AddBy2Points(0, 0, 0.08, 0); Line2d line2 = profile.Lines2d.AddBy2Points(0.08, 0, 0.08, 0.06); Line2d line3 = profile.Lines2d.AddBy2Points(0.08, 0.06, 0, 0.06); Line2d line4 = profile.Lines2d.AddBy2Points(0, 0.06, 0, 0); //创建圆弧对象集合后创建倒圆角 profile.Arcs2d.AddAsFillet(line1, line2, 0.01, 0.05, 0.15); profile.Arcs2d.AddAsFillet(line2, line3, 0.01, -0.15, -0.05); profile.Arcs2d.AddAsFillet(line3, line4, 0.01, 0.15, 0.05); profile.Arcs2d.AddAsFillet(line4, line1, 0.01, 0.05, 0.15); objApp.DoIdle(); objApp.Visible = true;}
//在轮廓里创建直线,用来画长方形,也可以用其他方法划长方形Line2d line1 = profile.Lines2d.AddBy2Points(0, 0, 0.08, 0);Line2d line2 = profile.Lines2d.AddBy2Points(0.08, 0, 0.08, 0.06);Line2d line3 = profile.Lines2d.AddBy2Points(0.08, 0.06, 0, 0.06);Line2d line4 = profile.Lines2d.AddBy2Points(0, 0.06, 0, 0); //创建圆弧对象集合后创建倒圆角profile.Arcs2d.AddAsFillet(line1, line2, 0.01, 0.05, 0.15);profile.Arcs2d.AddAsFillet(line2, line3, 0.01, -0.15, -0.05);profile.Arcs2d.AddAsFillet(line3, line4, 0.01, 0.15, 0.05);profile.Arcs2d.AddAsFillet(line4, line1, 0.01, 0.05, 0.15);
/** * 平行约束 */private void button17_Click(object sender, EventArgs e){ //@1 连接solidedge应用 // Register with OLE to handle concurrency issues on the current thread. SolidEdgeCommunity.OleMessageFilter.Register(); //Connect to or start Solid Edge.这个方法里面的两个参数是开启功能:1、如果未启动就启动一个,2、如果启动了就显示, objApp = SolidEdgeCommunity.SolidEdgeUtils.Connect(true, true); //创建零件文档 PartDocument objPartDoc = objApp.Documents.AddPartDocument(); Profile profile = objPartDoc.ProfileSets.Add().Profiles.Add(pRefPlaneDisp: objPartDoc.RefPlanes.Item(1)); //弄两直线出来 Line2d line1 = profile.Lines2d.AddBy2Points(-0.03, 0.06, 0.01, 0.04); Line2d line2 = profile.Lines2d.AddBy2Points(-0.05, 0.01, 0.05, 0.03); Relations2d relations2D = (Relations2d)profile.Relations2d; relations2D.AddParallel(line1, line2); //垂直一把 //relations2D.AddVertical(line1); objApp.DoIdle(); objApp.Visible = true;}
//弄两直线出来 Line2d line1 = profile.Lines2d.AddBy2Points(-0.03, 0.06, 0.01, 0.04); Line2d line2 = profile.Lines2d.AddBy2Points(-0.05, 0.01, 0.05, 0.03); Relations2d relations2D = (Relations2d)profile.Relations2d; relations2D.AddParallel(line1, line2);
/** * 画个三角形 */private void button19_Click(object sender, EventArgs e){ //@1 连接solidedge应用 // Register with OLE to handle concurrency issues on the current thread. SolidEdgeCommunity.OleMessageFilter.Register(); //Connect to or start Solid Edge.这个方法里面的两个参数是开启功能:1、如果未启动就启动一个,2、如果启动了就显示, objApp = SolidEdgeCommunity.SolidEdgeUtils.Connect(true, true); //创建零件文档 PartDocument objPartDoc = objApp.Documents.AddPartDocument(); Profile[] objProfiles = new Profile[3]; ///@创建三棱柱 /// //设置参考面 objProfiles[1] = objPartDoc.ProfileSets.Add().Profiles.Add(pRefPlaneDisp: objPartDoc.RefPlanes.Item(3)); Lines2d objLines = objProfiles[1].Lines2d; //绘制三角形轮廓线(由三条直线围成) objLines.AddBy2Points(0, 0.034, -0.03, -0.017); objLines.AddBy2Points(-0.03, -0.017, 0.03, -0.017); objLines.AddBy2Points(0.03, -0.017, 0, 0.034); //使用AddKeypoint方法,使三条直线闭合 Relations2d relations2D = (Relations2d)objProfiles[1].Relations2d; relations2D.AddKeypoint(objLines.Item(1), (int)KeypointIndexConstants.igLineEnd, objLines.Item(2), (int)KeypointIndexConstants.igLineStart); relations2D.AddKeypoint(objLines.Item(2), (int)KeypointIndexConstants.igLineEnd, objLines.Item(3), (int)KeypointIndexConstants.igLineStart); relations2D.AddKeypoint(objLines.Item(3), (int)KeypointIndexConstants.igLineEnd, objLines.Item(1), (int)KeypointIndexConstants.igLineStart); //检查草图轮廓 int lngStatus = objProfiles[1].End(ValidationCriteria: ProfileValidationType.igProfileClosed); if (lngStatus != 0) { MessageBox.Show("Progile not closed"); } // Create a new array of profile objects. Array profileArray = Array.CreateInstance(typeof(Profile), 1); //创建使用 从零开始的索引、具有指定tppe和长度 的一维数组 这里是创建 SolidEdgePart.Profile 类型的只有一个元素的一个一维数组 profileArray.SetValue(objProfiles[1], 0); // 将这个数组的唯一元素的只设置为 profile Model objModel = objPartDoc.Models.AddFiniteExtrudedProtrusion( NumberOfProfiles: profileArray.Length,//指定在创建拉伸体时使用的轮廓的数量的长型 ProfileArray: profileArray, //包含用于拉伸的轮廓的数组,数组中轮廓的数量必须和numberofprofiles参数指定的参数相等 ProfilePlaneSide: FeaturePropertyConstants.igRight,// 拉伸的方向,igright是正向,igleft是负向,igsymmetric是双向 ExtrusionDistance: 0.09); //关闭草图 objProfiles[1].Visible = false; objApp.DoIdle(); objApp.Visible = true;}
///@创建三棱柱 /////绘制三角形轮廓线(由三条直线围成) objLines.AddBy2Points(0, 0.034, -0.03, -0.017); objLines.AddBy2Points(-0.03, -0.017, 0.03, -0.017); objLines.AddBy2Points(0.03, -0.017, 0, 0.034);//使用AddKeypoint方法,使三条直线闭合 Relations2d relations2D = (Relations2d)objProfiles[1].Relations2d; relations2D.AddKeypoint(objLines.Item(1), (int)KeypointIndexConstants.igLineEnd, objLines.Item(2), (int)KeypointIndexConstants.igLineStart); relations2D.AddKeypoint(objLines.Item(2), (int)KeypointIndexConstants.igLineEnd, objLines.Item(3), (int)KeypointIndexConstants.igLineStart); relations2D.AddKeypoint(objLines.Item(3), (int)KeypointIndexConstants.igLineEnd, objLines.Item(1), (int)KeypointIndexConstants.igLineStart); // Create a new array of profile objects. Array profileArray = Array.CreateInstance(typeof(Profile), 1); //创建使用 从零开始的索引、具有指定tppe和长度 的一维数组 这里是创建 SolidEdgePart.Profile 类型的只有一个元素的一个一维数组 profileArray.SetValue(objProfiles[1], 0); // 将这个数组的唯一元素的只设置为 profile Model objModel = objPartDoc.Models.AddFiniteExtrudedProtrusion( NumberOfProfiles: profileArray.Length,//指定在创建拉伸体时使用的轮廓的数量的长型 ProfileArray: profileArray, //包含用于拉伸的轮廓的数组,数组中轮廓的数量必须和numberofprofiles参数指定的参数相等 ProfilePlaneSide: FeaturePropertyConstants.igRight,// 拉伸的方向,igright是正向,igleft是负向,igsymmetric是双向 ExtrusionDistance: 0.09);
/** * 生成实体 */private void button20_Click(object sender, EventArgs e){ //@1 连接solidedge应用 // Register with OLE to handle concurrency issues on the current thread. SolidEdgeCommunity.OleMessageFilter.Register(); //Connect to or start Solid Edge.这个方法里面的两个参数是开启功能:1、如果未启动就启动一个,2、如果启动了就显示, objApp = SolidEdgeCommunity.SolidEdgeUtils.Connect(true, true); //创建零件文档 PartDocument objPartDoc = objApp.Documents.AddPartDocument(); Profile[] objProfiles = new Profile[3]; ///@创建三棱柱 /// //设置参考面 objProfiles[1] = objPartDoc.ProfileSets.Add().Profiles.Add(pRefPlaneDisp: objPartDoc.RefPlanes.Item(3)); Lines2d objLines = objProfiles[1].Lines2d; //绘制三角形轮廓线(由三条直线围成) objLines.AddBy2Points(0, 0.034, -0.03, -0.017); objLines.AddBy2Points(-0.03, -0.017, 0.03, -0.017); objLines.AddBy2Points(0.03, -0.017, 0, 0.034); //使用AddKeypoint方法,使三条直线闭合 Relations2d relations2D = (Relations2d)objProfiles[1].Relations2d; relations2D.AddKeypoint(objLines.Item(1), (int)KeypointIndexConstants.igLineEnd, objLines.Item(2), (int)KeypointIndexConstants.igLineStart); relations2D.AddKeypoint(objLines.Item(2), (int)KeypointIndexConstants.igLineEnd, objLines.Item(3), (int)KeypointIndexConstants.igLineStart); relations2D.AddKeypoint(objLines.Item(3), (int)KeypointIndexConstants.igLineEnd, objLines.Item(1), (int)KeypointIndexConstants.igLineStart); //检查草图轮廓 int lngStatus = objProfiles[1].End(ValidationCriteria: ProfileValidationType.igProfileClosed); if (lngStatus != 0) { MessageBox.Show("objProfiles[1] Progile not closed"); } // Create a new array of profile objects. Array profileArray = Array.CreateInstance(typeof(Profile), 1); //创建使用 从零开始的索引、具有指定tppe和长度 的一维数组 这里是创建 SolidEdgePart.Profile 类型的只有一个元素的一个一维数组 profileArray.SetValue(objProfiles[1], 0); // 将这个数组的唯一元素的只设置为 profile Model objModel = objPartDoc.Models.AddFiniteExtrudedProtrusion( NumberOfProfiles: profileArray.Length,//指定在创建拉伸体时使用的轮廓的数量的长型 ProfileArray: profileArray, //包含用于拉伸的轮廓的数组,数组中轮廓的数量必须和numberofprofiles参数指定的参数相等 ProfilePlaneSide: FeaturePropertyConstants.igRight,// 拉伸的方向,igright是正向,igleft是负向,igsymmetric是双向 ExtrusionDistance: double.Parse(textBox9.Text) / 1000); //关闭草图 objProfiles[1].Visible = false; ///@创建拉伸圆柱 /// Body objBody = (Body)objPartDoc.Models.Item(1).Body; //从模型的体对象中检索所有的面 Faces objFaces = (Faces)objBody.Faces[FeatureTopologyQueryTypeConstants.igQueryAll]; //从面集中得到第1个面复给对象变量objFace Face objFace = (Face)objFaces.Item(1); //用对象变量objFace为基面,设置参考平面objRefPln //采用平行参考面方法设置(距离设置为0) RefPlane objRefPln = objPartDoc.RefPlanes.AddParallelByDistance( ParentPlane: objFace, Distance: 0, NormalSide: ReferenceElementConstants.igNormalSide); //设置参考面,并在参考面上绘制圆 Profile objProf = objPartDoc.ProfileSets.Add().Profiles.Add(objRefPln); objProf.Circles2d.AddByCenterRadius(0, 0, double.Parse(textBox10.Text) / 1000); //检查草图轮廓是否有效 lngStatus = objProf.End(ProfileValidationType.igProfileClosed); if (lngStatus != 0) { MessageBox.Show("objProf Profile not closed"); } //创建拉伸特征(圆柱) objModel.ExtrudedProtrusions.AddFinite( Profile: objProf, ProfileSide: FeaturePropertyConstants.igLeft, ProfilePlaneSide: FeaturePropertyConstants.igRight, Depth: double.Parse(textBox11.Text) / 1000); //显示草图轮廓线 objProf.Visible = true; ///@创建拉伸圆柱2 /// //重新搜索对象中所有的面 objBody = (Body)objPartDoc.Models.Item(1).Body; objFaces = (Faces)objBody.Faces[FeatureTopologyQueryTypeConstants.igQueryAll]; //从面集合中得到第二个面赋值给对象变量objFace1 Face objFace1 = (Face)objFaces.Item(2); //用对象变量objFace1为基面,设置参考平面objRefPln1 //采用平行参考面方法获得参考面(距离设置为0) RefPlane objRefPln1 = objPartDoc.RefPlanes.AddParallelByDistance( ParentPlane: objFace1, Distance: 0, NormalSide: ReferenceElementConstants.igNormalSide); //设置参考面,并在参考面上绘制圆 Profile objProf1 = objPartDoc.ProfileSets.Add().Profiles.Add(objRefPln1); objProf1.Circles2d.AddByCenterRadius(0, 0, double.Parse(textBox10.Text) / 1000); //检查草图轮廓是否有效 lngStatus = objProf1.End(ProfileValidationType.igProfileClosed); if (lngStatus != 0) { MessageBox.Show("objProf2 Profile not closed"); } //创建拉伸实体特征 objModel.ExtrudedProtrusions.AddFinite( Profile: objProf1, ProfileSide: FeaturePropertyConstants.igLeft, ProfilePlaneSide: FeaturePropertyConstants.igRight, Depth: double.Parse(textBox11.Text) / 1000); //显示草图轮廓线 objProf.Visible = true; ///@创建拉伸圆柱3 /// //重新搜索对象中所有的面 objBody = (Body)objPartDoc.Models.Item(1).Body; objFaces = (Faces)objBody.Faces[FeatureTopologyQueryTypeConstants.igQueryAll]; //从面集合中得到第二个面赋值给对象变量objFace2 Face objFace2 = (Face)objFaces.Item(3); //用对象变量objFace2为基面,设置参考平面objRefPln2 //采用平行参考面方法获得参考面(距离设置为0) RefPlane objRefPln2 = objPartDoc.RefPlanes.AddParallelByDistance( ParentPlane: objFace2, Distance: 0, NormalSide: ReferenceElementConstants.igNormalSide); //设置参考面,并在参考面上绘制圆 Profile objProf2 = objPartDoc.ProfileSets.Add().Profiles.Add(objRefPln2); objProf2.Circles2d.AddByCenterRadius(0, 0, double.Parse(textBox10.Text) / 1000); //检查草图轮廓是否有效 lngStatus = objProf2.End(ProfileValidationType.igProfileClosed); if (lngStatus != 0) { MessageBox.Show("objProf2 Profile not closed"); } //创建拉伸实体特征 objModel.ExtrudedProtrusions.AddFinite( Profile: objProf2, ProfileSide: FeaturePropertyConstants.igLeft, ProfilePlaneSide: FeaturePropertyConstants.igRight, Depth: double.Parse(textBox11.Text) / 1000); //显示草图轮廓线 objProf.Visible = true; objApp.DoIdle(); objApp.Visible = true;}
/** * 法兰零件实例 */private void button21_Click(object sender, EventArgs e){ //@1 连接solidedge应用 // Register with OLE to handle concurrency issues on the current thread. SolidEdgeCommunity.OleMessageFilter.Register(); //Connect to or start Solid Edge.这个方法里面的两个参数是开启功能:1、如果未启动就启动一个,2、如果启动了就显示, objApp = SolidEdgeCommunity.SolidEdgeUtils.Connect(true, true); //创建零件文档 PartDocument objDoc = objApp.Documents.AddPartDocument(); ///@声明对象 /// / Create a new array of profile objects. Array objRPProfArray = Array.CreateInstance(typeof(Profile), 1); //创建使用 从零开始的索引、具有指定tppe和长度 的一维数组 这里是创建 SolidEdgePart.Profile 类型的只有一个元素的一个一维数组 //Profile[] objRPProfArray = new Profile[4]; Array objRPProfArray1 = Array.CreateInstance(typeof(Profile), 1); //创建使用 从零开始的索引、具有指定tppe和长度 的一维数组 这里是创建 SolidEdgePart.Profile 类型的只有一个元素的一个一维数组 //Profile[] objRPProfArray1 = new Profile[4]; Array objEdgArr = Array.CreateInstance(typeof(Edge), 1); Array objEdgArray = Array.CreateInstance(typeof(Edge), 1); Array db1RadiusArray = new Double[2]; ///@3用旋转填料创建地盘(大圆) /// //设置参考面 Profile objRPProfile = objDoc.ProfileSets.Add().Profiles.Add(objDoc.RefPlanes.Item(2)); //绘制轴线 objRPProfile.Lines2d.AddBy2Points(0, -0.05, 0, 0.05); //设置参考轴 RefAxis objRPRAxis = (RefAxis)objRPProfile.SetAxisOfRevolution(objRPProfile.Lines2d.Item(1)); //绘制矩形轮廓线 objRPProfile.RectangularPatterns2d.Add( OriginX: 0, OriginY: 0, Width: double.Parse(textBox12.Text) / 1000, Height: double.Parse(textBox13.Text) / 1000, Angle: 0, OffsetType: PatternOffsetTypeConstants.sePatternFillOffset, XCount: 6, YCount: 4, XSpace: 0.015, YSpace: 0.01); //检查草图轮廓是否有效 int lngStatus = 0; if (lngStatus != 0) { MessageBox.Show("objRPProfile Profile for the base feature is self-intersecting"); } //使用旋转填料方法生成特征 objRPProfArray.SetValue(objRPProfile, 0); // 将这个数组的唯一元素的只设置为 profile Model objModel = objDoc.Models.AddFiniteRevolvedProtrusion( NumberOfProfiles: objRPProfArray.Length, ProfileArray: objRPProfArray, ReferenceAxis: objRPRAxis, ProfilePlaneSide: FeaturePropertyConstants.igRight, AngleofRevolution: 2 * PI); //显示草图轮廓线(一般设为隐藏) objRPProfile.Visible = false; ///@4拉伸除料(在底盘打四个小孔) /// ///设置参考线 Profile objProf = objDoc.ProfileSets.Add().Profiles.Add(objDoc.RefPlanes.Item(1)); //绘制轮廓线 objProf.Circles2d.AddByCenterRadius(0, 0.08, double.Parse(textBox14.Text) / 1000); objProf.Circles2d.AddByCenterRadius(0, -0.08, double.Parse(textBox14.Text) / 1000); objProf.Circles2d.AddByCenterRadius(0.08, 0, double.Parse(textBox14.Text) / 1000); objProf.Circles2d.AddByCenterRadius(-0.08, 0, double.Parse(textBox14.Text) / 1000); //检查轮廓线是否封闭 lngStatus = objProf.End(ProfileValidationType.igProfileClosed); if (lngStatus != 0) { MessageBox.Show("objProf Profile not closed"); } //使用拉伸除料防范,除料深度为textBox14.Text objModel.ExtrudedCutouts.AddFinite( Profile: objProf, ProfileSide: FeaturePropertyConstants.igLeft, ProfilePlaneSide: FeaturePropertyConstants.igRight, Depth: double.Parse(textBox13.Text) / 1000); //显示草图轮廓线(一般设为隐藏) objProf.Visible = false; ///@5拉伸填料(创建法兰凸台) /// ///创建平行参考面 RefPlane objRefPln1 = objDoc.RefPlanes.AddParallelByDistance( ParentPlane: objDoc.RefPlanes.Item(1), Distance: 0.02, NormalSide: ReferenceElementConstants.igNormalSide); //设置参考面 Profile objProf1 = objDoc.ProfileSets.Add().Profiles.Add(objRefPln1); //绘制轮廓线圈 objProf1.Circles2d.AddByCenterRadius(0, 0, double.Parse(textBox15.Text) / 1000); //检查轮廓线是否封闭 lngStatus = objProf1.End(ProfileValidationType.igProfileClosed); if (lngStatus != 0) { MessageBox.Show("objProf1 Profile not closed"); } objRPProfArray1.SetValue(objProf1, 0); //创建拉伸特征。拉伸长度由textBox16.Text定义 Model objModel1 = objDoc.Models.AddFiniteExtrudedProtrusion( NumberOfProfiles: objRPProfArray1.Length, ProfileArray: objRPProfArray1, ProfilePlaneSide: FeaturePropertyConstants.igRight, ExtrusionDistance: double.Parse(textBox16.Text) / 1000); //显示草图轮廓线 objRefPln1.Visible = false; ///@6在凸台上做45°倒角 /// ExtrudedProtrusion objExtProt = objModel1.ExtrudedProtrusions.Item(1); //检查特性1的所有边赋给边的集合对象变量 Edges objEdges = (Edges)objExtProt.Edges[FeatureTopologyQueryTypeConstants.igQueryAll]; //将边存到数组 objEdgArr.SetValue(objEdges.Item(1), 0); //检索特征1的所有面赋给集合对象变量 Faces objFacs = (Faces)objExtProt.Faces[FeatureTopologyQueryTypeConstants.igQueryAll]; //创建倒角 Chamfer objChmfr = objModel.Chamfers.AddSetbackAngle( ReferenceFace: objFacs.Item(1), NumberOfEdgeSets: objEdgArr.Length, EdgeSetArray: objEdgArr, SetbackDistance: 0.005, Angle: 45 * PI / 180); ///@7用旋转除料方式形成中心孔 /// //设置参考面 Profile objProf11 = objDoc.ProfileSets.Add().Profiles.Add(objDoc.RefPlanes.Item(3)); //画轮廓线 objProf11.RectangularPatterns2d.Add( OriginX: 0, OriginY: 0, Width: 0.02, Height: 0.08, Angle: 0, OffsetType: PatternOffsetTypeConstants.sePatternFillOffset, XCount: 6, YCount: 4, XSpace: 0.015, YSpace: 0.01); //设置旋转轴 Line2d objCutoutLine = objProf11.Lines2d.AddBy2Points(0, -0.05, 0, 0.05); RefAxis objcutoutRefAxis = (RefAxis)objProf11.SetAxisOfRevolution(objCutoutLine); //使用旋转除料方法打孔 objModel1.RevolvedCutouts.AddFinite( Profile: objProf11, RefAxis: objcutoutRefAxis, ProfileSide: FeaturePropertyConstants.igLeft, ProfilePlaneSide: FeaturePropertyConstants.igRight, AngleofRevolution: (2 * PI)); //隐藏草图轮廓线 objProf11.Visible = false; }
/** * 生成实体特征-长方体槽 */private void button22_Click(object sender, EventArgs e){ //@1 连接solidedge应用 // Register with OLE to handle concurrency issues on the current thread. SolidEdgeCommunity.OleMessageFilter.Register(); //Connect to or start Solid Edge.这个方法里面的两个参数是开启功能:1、如果未启动就启动一个,2、如果启动了就显示, objApp = SolidEdgeCommunity.SolidEdgeUtils.Connect(true, true); //创建零件文档 PartDocument objDoc = objApp.Documents.AddPartDocument(); ///@声明对象 /// / Create a new array of profile objects. Array objEPProfArray = Array.CreateInstance(typeof(Profile), 1); //创建使用 从零开始的索引、具有指定tppe和长度 的一维数组 这里是创建 SolidEdgePart.Profile 类型的只有一个元素的一个一维数组 Array db1RadiusArray = new Double[2]; RefPlane xoy = objDoc.RefPlanes.Item(1); RefPlane yoz = objDoc.RefPlanes.Item(2); RefPlane xoz = objDoc.RefPlanes.Item(3); int lngStatus = 0; ///@3拉伸长方体 /// //创建基本特征的轮廓线-矩形 Profile objEPProfile = objDoc.ProfileSets.Add().Profiles.Add(xoy); objEPProfile.RectangularPatterns2d.Add( OriginX: 0, OriginY: 0, Width: double.Parse(Rect_Length.Text) / 1000, Height: double.Parse(Rect_Width.Text) / 1000, Angle: 0, OffsetType: PatternOffsetTypeConstants.sePatternFillOffset, XCount: 6, YCount: 4, XSpace: 0.015, YSpace: 0.01); //轮廓线校验 lngStatus = objEPProfile.End(ProfileValidationType.igProfileClosed); if (lngStatus != 0) { MessageBox.Show("objEPProfile Profile for the base feature is self-intersecting"); } //创建拉伸 objEPProfArray.SetValue(objEPProfile, 0); Model objModel = objDoc.Models.AddFiniteExtrudedProtrusion( NumberOfProfiles: objEPProfArray.Length, ProfileArray: objEPProfArray, ProfilePlaneSide: FeaturePropertyConstants.igRight, ExtrusionDistance: double.Parse(Rect_Height.Text) / 1000); objEPProfile.Visible = false; ///@4拉伸除料,切出槽 /// if (double.Parse(Rect_Length.Text) > double.Parse(Cut_Length.Text) && double.Parse(Rect_Width.Text) > double.Parse(Cut_Width.Text)) { //建立参考面 RefPlane objRPParallel = objDoc.RefPlanes.AddParallelByDistance( ParentPlane: xoy, Distance: double.Parse(Rect_Height.Text) / 1000, NormalSide: ReferenceElementConstants.igNormalSide); //画槽的轮廓线 objEPProfile = objDoc.ProfileSets.Add().Profiles.Add(objRPParallel); objEPProfile.RectangularPatterns2d.Add( OriginX: 0.01, OriginY: 0.01, Width: double.Parse(Cut_Length.Text) / 1000, Height: double.Parse(Cut_Width.Text) / 1000, Angle: 0, OffsetType: PatternOffsetTypeConstants.sePatternFillOffset, XCount: 6, YCount: 4, XSpace: 0.015, YSpace: 0.01); //创建槽的拉伸除料 ExtrudedCutout objExtCut = objModel.ExtrudedCutouts.AddFinite( Profile: objEPProfile, ProfileSide: FeaturePropertyConstants.igLeft, ProfilePlaneSide: FeaturePropertyConstants.igLeft, Depth: double.Parse(Cut_Height.Text) / 1000); } else { MessageBox.Show("槽的长度超出了实体长,请重新输入"); } objEPProfile.Visible = false; }//获取槽深private void button23_Click(object sender, EventArgs e){ //获取当前活动文档 PartDocument partDocument = (PartDocument)objApp.ActiveDocument; //拾取数据 ExtrudedCutout objcutout = partDocument.Models.Item(1).ExtrudedCutouts.Item(1); if (objcutout.ExtentType == FeaturePropertyConstants.igFinite) { //数据显示 Old_Depth.Text = (objcutout.Depth * 1000).ToString(); } } /** * 修改槽深 */private void button24_Click(object sender, EventArgs e){ if (Chg_Depth.Text == "") { MessageBox.Show("必填项不能为空"); } //获取当前活动文档 PartDocument partDocument = (PartDocument)objApp.ActiveDocument; //修改数据 ExtrudedCutout objcutout = partDocument.Models.Item(1).ExtrudedCutouts.Item(1); if (objcutout.ExtentType == FeaturePropertyConstants.igFinite) { objcutout.Depth = double.Parse(Chg_Depth.Text) / 1000; }}
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删