C# SolidWorks 二次开发 API-删除工程图中的图片与插入二维码
今天有个网友留言说在工程图上删除图片的问题还没解决,说录制可以删除,但再次运行就不行了。
所以就来研究一下工程图里面一些特殊的对象,比如我们截的图,直接粘贴到图纸上的。
想到这个功能,就想到了现在很多企业为了更快的处理信息,会在图纸放上二维一码,在后面通过二维码进行定位,减少输入错误。
作为示例,我就随便拿个图:
第一个功能,删除工程图上之前贴上去的图片。
如下图,一个图片在图纸上,一个图片在图纸格式上。
首先还是录制:
这个可以正常选中图纸上的图片,并可以删除的。只是要先知道图片的位置坐标,不然就会选不中,删除不了 。
通过上面的名称OLEITEM找到了一些方法 GetOLEObjects ,这个就可以直接获取所有OLE对象了,具体什么是OLE,大家可以百度。
有了对象之后 ,我们就比较容易进行删除动作了。
第二部分,开始思路是去创建OLE对象到文档中。
找到了对应的方法CreateOLEObject,但没有成功,因为它里面的参数buffer是MFC的格式,和正常的byte【】不一样。
等后面有空了再研究吧,谁会的麻烦告诉我补全。
那只能想另外的办法了,利用草图里面的插入图片功能。
直接上代码:
/// <summary>
/// 获取工程图中的图片对象,删除后插入一个已经存在的二维码
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnOLEObject_Click(object sender, EventArgs e)
{
var swApp = PStandAlone.GetSolidWorks();
var swModel = (ModelDoc2)swApp.ActiveDoc;
//old对象数量
var oleCountOnThisSheet= swModel.Extension.GetOLEObjectCount((int)swOleObjectOptions_e.swOleObjectOptions_GetOnCurrentSheet);
//获取 old对象
var oleObjects = (object[])swModel.Extension.GetOLEObjects((int)swOleObjectOptions_e.swOleObjectOptions_GetOnCurrentSheet);
//var buf1 = new object();
//循环 按顺序 选中后删除
for (int i = 0; i < oleObjects.Count(); i++)
{
var oldObj=(SwOLEObject)oleObjects[i];
Debug.Print(oldObj.Clsid);
//oldObj.IGetBuffer(oldObj.BufferSize, out byte bData);
Debug.Print(oldObj.Aspect.ToString());
//buf1 = oldObj.Buffer;
//选中
oldObj.Select(false);
//删除
swModel.EditDelete();
}
//重新插入一张图片
//var picPath = @"D:\09_Study\CSharpAndSolidWorks\8888.png";
swModel.Extension.InsertObjectFromFile(picPath, false, 1, 0.1, 0.1, 0);
//var pos = new double[] { 0, 0.2, 0.03,0.23};
//Todo: 如何把文件变成MFC Buffer
//var impBuf = imageToByte(image);
//var newOleObj= swModel.Extension.CreateOLEObject(1, pos, impBuf, out int Err);
//newOleObj.Refresh();
#region 利用草图里的插入图片功能
var picPath = @"D:\09_Study\CSharpAndSolidWorks\v.png";
var skPic = swModel.SketchManager.InsertSketchPicture(picPath);
skPic.SetOrigin(0.2, 0.2); //坐标
skPic.SetSize(0.05, 0.05, true); //大小
//取消属性显示页
swApp.RunCommand(-2, "");
#endregion
MessageBox.Show("操作完成");
}
上界面:
执行完成,出结果,看不到吧。
自己测试吧
posted @
2022-10-14 20:15
painezeng 阅读(
0) 评论(
0)
编辑
收藏
举报
来源