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("操作完成");
        }
 
上界面:

 执行完成,出结果,看不到吧。
 自己测试吧

                    
                
                
            
        
浙公网安备 33010602011771号