当前位置 : 主页 > 编程语言 > java >

CAD插入图块

来源:互联网 收集:自由互联 发布时间:2022-07-22
当块保存在所指定的位置后,即可在其他文件中使用图块了。图块的重复使用是通过插入图快的方式实现的。最常用的插入图块方式是用插入图块对话框,可以插入当前图中的图块或者


当块保存在所指定的位置后,即可在其他文件中使用图块了。图块的重复使用是通过插入图快的方式实现的。最常用的插入图块方式是用插入图块对话框,可以插入当前图中的图块或者某个DWG文件作为图块,如果要在当前图中插入其他图中的图块,大家比较常见的的方法是打开另一张图,从那张图复制到当前图中。实际上,我们可以不必打开另一张图也可以插入图中的图块,另外还可以将常用的图块保存到工具选项板中,定制成自己的图库,在任意图中调用。

一、调出插入图框对话框的方法有三种:

1、菜单位置:[绘图]→[插入块]

2、工 具 条:[绘制]→[插入块命令]

3、命 令 行:Insert

(1)用户可以在当前图形中插入图块或别的图形。当插入图形时,它是作为一个单个实体。如果改变原始图形,它对当前图形无影响。

    

CAD插入图块_缩放比例

(2)缺省的使用方法是执行“插入块”命令后,系统弹出如图所示的“插入图块”对话框,在对话框中选择块的名称后,点击“插入”按钮。回到图形窗口后,根据命令行提示输入块的插入点、比例、旋转角。回车就完成插入图块命令。

4、“插入图块”选项说明:

浏览:此项用来选取要插入的外部块,单击“浏览”,选择要插入的外部图块文件名称,点击“打开”。

名称:该下拉列表框中选择预插入的内部块名。

在屏幕上指定:勾选此复选框,将在插入时对图块定位、比例因子、旋转角度。不勾选此框,则需要在命令行中输入坐标比例因子和旋转角度。

插入点(X,Y,Z):此三项输入框用于输入坐标值确定在图形中的插入点。当勾选“在屏幕上指定”后,三项呈灰色,不可用。

缩放比例(X,Y,Z):此三项输入框用于预先输入图块在X轴、Y轴、Z轴方向上缩放的比例因子。此三项比例因子可以相同,也可以不同,缺省值为1,当勾选“在屏幕上指定”后,三项呈灰色,不可用。

旋转(R):图块在图形中可以任意改变角度。在此输入图块的旋转角度。当勾选“在屏幕上指定”后,三项呈灰色,不可用。

二、下面介绍关于二次开发插入块的使用方法(以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);
}
}

 

上一篇:CAD绘圆命令
下一篇:没有了
网友评论