C# SolidWorks 二次开发 API —如何修改草图里面的直线
昨天有网友想知道怎么修改草图的内容,今天来带着找一找如何解决。
在之前打开和创建那个命令里面我写过如下代码 :
//选择对应的草图基准面
bool boolstatus = swModel.Extension.SelectByID2("Plane1", "PLANE", 0, 0, 0, false, 0, null, 0);
//创建一个2d草图
swModel.SketchManager.InsertSketch(true);
//画一条线 长度100mm (solidworks 中系统单位是米,所以这里写0.1)
swModel.SketchManager.CreateLine(0, 0, 0, 0, 0.1, 0);
//关闭草图
swModel.SketchManager.InsertSketch(true);
这里面知道了草图管理器是SketchManager.
我们去API帮助里面查找SketchManager.很容易就能找到这里有个官方示例。
这里虽然是VBA的,但是可以大概知道大体步骤,参考这个就能知道如何读取这些信息了,可以先把这个例子弄懂。再来考虑怎么修改,我也就写几行简单的代码,把之前 我在图中画的一条直线长度 和位置修改掉。
默认当前状态:
代码如下:
private void btnCreateSketch_Click(object sender, EventArgs e)
{
//如果没有打开文件,请执行打开和创建的操作:
//BtnOpenAndNew_Click(null, null);
//连接到Solidworks
ISldWorks swApp = Utility.ConnectToSolidWorks();
ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;
//定义草图管理器
SketchManager sketchManager = swModel.SketchManager;
//按名字选择草图
bool boolstatus = swModel.Extension.SelectByID2("Sketch1", "SKETCH", 0, 0, 0, false, 0, null, 0);
if (boolstatus == true)
{
//编辑草图
sketchManager.InsertSketch(false);
//获取当前草图,当获取草图中的Segment对象
Sketch sketch = swModel.GetActiveSketch2();
object[] sketchSegments = sketch.GetSketchSegments();
if (sketchSegments != null)
{
//遍历
foreach (var skSeg in sketchSegments)
{
SketchSegment sketchSegment = (SketchSegment)skSeg;
//判断是直线时执行
if (sketchSegment.GetType() == (int)swSketchSegments_e.swSketchLINE)
{
SketchLine sketchLine = (SketchLine)sketchSegment;
SketchPoint sketchPointStart = sketchLine.GetStartPoint2();
SketchPoint sketchPointEnd = sketchLine.GetEndPoint2();
//这里显示弹出坐标,单位默认是米
MessageBox.Show(sketchPointStart.X.ToString() + "," + sketchPointStart.Y.ToString());
MessageBox.Show(sketchPointEnd.X.ToString() + "," + sketchPointEnd.Y.ToString());
SelectionMgr swSelMgr = swModel.SelectionManager;
//定义选择数据
SelectData swSelData = swSelMgr.CreateSelectData();
//选择此直线
sketchSegment.Select4(false, swSelData);
//删除当前的约束关系
swModel.SketchConstraintsDelAll();
//下在我们来修改坐标
sketchPointStart.X = 0.05;
sketchPointStart.Y = 0.04;
sketchPointEnd.X = 0.2;
sketchPointEnd.Y = 0.2;
}
}
}
//退出草图
sketchManager.InsertSketch(true);
}
}
执行过后,文件中的草图变成了:
这里讲解的就是一个思路,大家应该能看明白吧。
具体的代码可以去我的码云或者github下载,欢迎大家提问。
posted @
2020-03-26 15:40
painezeng 阅读(
174) 评论(
0)
编辑
收藏
举报