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

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
编辑 
收藏 
举报  
来源