洞察纵观鸿蒙next版本,如何凭借FinClip加强小程序的跨平台管理,确保企业在数字化转型中的高效运营和数据安全?
866
2022-10-29
CAD插入图块
当块保存在所指定的位置后,即可在其他文件中使用图块了。图块的重复使用是通过插入图快的方式实现的。最常用的插入图块方式是用插入图块对话框,可以插入当前图中的图块或者某个DWG文件作为图块,如果要在当前图中插入其他图中的图块,大家比较常见的的方法是打开另一张图,从那张图复制到当前图中。实际上,我们可以不必打开另一张图也可以插入图中的图块,另外还可以将常用的图块保存到工具选项板中,定制成自己的图库,在任意图中调用。
一、调出插入图框对话框的方法有三种:
1、菜单位置:[绘图]→[插入块]
2、工 具 条:[绘制]→[插入块命令]
3、命 令 行:Insert
(1)用户可以在当前图形中插入图块或别的图形。当插入图形时,它是作为一个单个实体。如果改变原始图形,它对当前图形无影响。
4、“插入图块”选项说明:
二、下面介绍关于二次开发插入块的使用方法(以MxDrawCAD为例);分别是参数绘制以及交互绘制中的使用。
1、参数绘制:
(1)参数化绘图在CAD中可以帮助我们极大缩短设计时间,用户可以按照设计意图控制绘图对象,这样即使对象发生了变化,具体的关系和测量数据仍将保持不变,能够对几何图形和标注进行控制,可以帮助用户应对耗时的修改工作。
(2)实现思路:首先通过InsertBlock方法向控件数据库中插入所需的图块,然后再通过DrawBlockReference方法将该图块插入到我们想要插入的位置,同时我们还可以设置该图块的缩放比例和旋转角度。
(3)主要用到函数说明:_DMxDrawX::DrawBlockReference
绘制块引用对象。详细说明如下:
参数 | 说明 |
DOUBLE dPosX | 插入点的X坐标 |
DOUBLE dPosY | 插入点的Y坐标 |
BSTR pszBlkName | 图块名 |
DOUBLE dScale | 图块缩放比例 |
DOUBLE dAng | 图块的旋转角度 |
C#中实现代码说明:
private void DynInsert(){ //把颜色改回黑白色 axMxDrawX1.DrawCADColorIndex = 0; //创建一个图层,名为"BlockLayer" axMxDrawX1.AddLayer("BlockLayer"); //设置当前图层为"BlockLayer" axMxDrawX1.LayerName = "BlockLayer"; var sBlkName = "Tree"; //用户需要出入图块的路径 控件程序在磁盘的文件路径 var sBlkFile = axMxDrawX1.GetOcxAppPath() + "\\Blk\\树.dwg"; //向控件数据库中插入一个图块,不用它插入匿名块 axMxDrawX1.InsertBlock(sBlkFile, "Tree"); //绘制块引用对象 //参数一为插入点的X坐标;参数二为插入点的Y坐标; //参数三为图块名;参数四为图块缩放比例;参数五为图块的旋转角度 axMxDrawX1.DrawBlockReference(0, 3600, "Tree", 1, 0); axMxDrawX1.ZoomAll(); axMxDrawX1.UpdateDisplay();}
网页中实现代码说明:
function DynInsert() { mxOcx.DrawColor = 0; //创建一个图层,名为"BlockLayer" mxOcx.AddLayer ("BlockLayer"); //设置当前图层为"BlockLayer" mxOcx.LayerName = "BlockLayer"; var sBlkName = "Tree"; //用户需要出入图块的路径 控件程序在磁盘的文件路径 var sBlkFile = mxOcx.GetOcxAppPath() + "\\Blk\\树.dwg"; //向控件数据库中插入一个图块,不用它插入匿名块 mxOcx.InsertBlock(sBlkFile, "Tree"); //绘制块引用对象 //参数一为插入点的X坐标;参数二为插入点的Y坐标; //参数三为图块名;参数四为图块缩放比例;参数五为图块的旋转角度 mxOcx.DrawBlockReference(0, 3600, "Tree", 1, 0) ; mxOcx.ZoomAll(); mxOcx.UpdateDisplay();}
2、交互绘制:
(1)实现思路:首先我们需要设置动态施放绘制事件回调函数DoDynWorldDrawFun,然后在此回调函数里面写实现代码。代码同参数绘制图块大同小异,交互绘制的最大区别在于绘制的点是由我们在视区选择,所以在使用DrawBlockReference方法的时候注意插入点的X和Y坐标是由我们在视区取点决定的。
(2)主要用到函数说明:_DMxDrawX::DrawBlockReference
绘制块引用对象。详细说明如下:
参数 | 说明 |
DOUBLE dPosX | 插入点的X坐标 |
DOUBLE dPosY | 插入点的Y坐标 |
BSTR pszBlkName | 图块名 |
DOUBLE dScale | 图块缩放比例 |
DOUBLE dAng | 图块的旋转角度 |
网页中实现代码说明:
function DynInsert() { var sBlkName = "Tree"; var sBlkFile = mxOcx.GetOcxAppPath() + "\Blk\树.dwg"; mxOcx.InsertBlock(sBlkFile, "Tree"); var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint"); getPt.message = "点取插入点"; var spDrawData1 = getPt.InitUserDraw("TestDynDraw1"); spDrawData1.SetString("BlkName","Tree"); if (getPt.go() != 1) { return; } var frstPt = getPt.value(); if (frstPt == null) { return; } var getSecondPt = mxOcx.NewComObject("IMxDrawUiPrPoint"); var spDrawData = getSecondPt.InitUserDraw("TestDynDraw"); getSecondPt.message = "点取旋转角度"; getSecondPt.basePoint = frstPt; getSecondPt.setUseBasePt(true); spDrawData.SetPoint("pt1", frstPt); spDrawData.SetString("BlkName", "Tree"); if (getSecondPt.go() != 1) { return; } var ret = spDrawData.Draw(); // 给属性块写文字. var blkRef = ret.AtObject(0); if (blkRef != null) { var param = mxOcx.NewResbuf(); blkRef.SetProp("createAttribute",param); } } // 设置回调函数 document.getElementById("MxDrawXCtrl").ImpDynWorldDrawFun = DoDynWorldDrawFun; // 函数实现代码 function DoDynWorldDrawFun(dX,dY,pWorldDraw,pData) { var sGuid = pData.Guid; mxOcx.SetEventRet(0); if(sGuid == "TestDynDraw") { // 动态插入图块。 var firstPt = pData.GetPoint("pt1"); if(firstPt == null) return; var sBlkName = pData.GetString("BlkName"); var secondPt = mxOcx.NewPoint(); secondPt.x = dX; secondPt.y = dY; var vec = firstPt.SumVector(secondPt); var dAng = vec.Angle(); pWorldDraw.DrawBlockReference(firstPt.x,firstPt.y,sBlkName,1.0,dAng * 180.0 / 3.14159265 + 90.0); mxOcx.SetEventRet(1); } else if (sGuid == "TestDynDraw1") { var sBlkName = pData.GetString("BlkName"); pWorldDraw.DrawBlockReference(dX, dY, sBlkName, 1.0, 0.0); } }
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~