失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C# SolidWorks 二次开发 API-删除工程图中的图片与插入二维码

C# SolidWorks 二次开发 API-删除工程图中的图片与插入二维码

时间:2018-11-08 15:59:26

相关推荐

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, "");#endregionMessageBox.Show("操作完成");}

上界面:

执行完成,出结果,看不到吧。

自己测试吧

如果觉得《C# SolidWorks 二次开发 API-删除工程图中的图片与插入二维码》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。