1、 实现步骤: 3

1、 实现步骤:

参考例子 :Src\MxDraw5.2\samples\ie\iedemoTest.htm

1) 增加自定义实体对象

调用DrawCustomEntity函数,绘制一个自定义实体对象

函数说明如下:

JS例子,下面代码绘制一个自定义实体,设置了两个属性,属性名分别” startpoint”,” endpoint”的两个点坐标,

// 插入自定义实体函数

function InsertCustomEntity() {

var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint");

getPt.message = "点取第一点";

if (getPt.go() != 1)

return;

var frstPt = getPt.value();

if (frstPt == null)

return;

var getSecondPt = mxOcx.NewComObject("IMxDrawUiPrPoint");

getSecondPt.message = "点取第二点";

getSecondPt.basePoint = frstPt;

getSecondPt.setUseBasePt(true);

if (getSecondPt.go() != 1)

return;

var secondPt = getSecondPt.value();

if (secondPt == null)

return;

var ent = mxOcx.DrawCustomEntity("TestMxCustomEntity", "");

ent.SetPoint("spt", frstPt);

ent.SetPoint("ept", secondPt);

};

2) 响应自定义事件,绘制自定义实体

需要响应DMxDrawXEvents::CustomEntity_Explode事件

帮助如下:

JS例子,下面例子,得到自实体的数据,根据自定义实体的两个必属,开始点,和结束点绘制一个直线

// 自定义实体绘制函数

function ExplodeFun(pCustomEntity, pWorldDraw) {

var sGuid = pCustomEntity.Guid;

if (sGuid == "TestMxCustomEntity") {

if (!pCustomEntity.IsHave("ept"))

return;

var stp = pCustomEntity.GetPoint("spt");

if (stp == null)

return;

var ept = pCustomEntity.GetPoint("ept");

if (ept == null)

return;

var mxUtility = mxOcx.NewUtility();

var vec = ept.SumVector(stp);

vec.Mult(0.5);

var midPt = mxOcx.NewPoint();

midPt.x = stp.x;

midPt.y = stp.y;

midPt.Add(vec);

var dAng = vec.Angle();

dAng = mxUtility.GetDimAngle(dAng);

var dDis = 0.0;

dDis = stp.DistanceTo(ept);

var sTxt = "L=" + formatNumber(dDis, '#.##');

dAng = dAng * 180.0 / 3.14159265;

vec.RotateByXyPlan(3.14159265 / 2.0);

vec.Normalize();

vec.Mult(10);

stp.Add(vec);

ept.Add(vec);

pWorldDraw.DrawLine(stp.x, stp.y, ept.x, ept.y);

vec.Mult(2);

stp.Sum(vec);

ept.Sum(vec);

pWorldDraw.DrawLine(stp.x, stp.y, ept.x, ept.y);

pWorldDraw.SetColorIndex(1);

pWorldDraw.DrawText(midPt.x, midPt.y, sTxt, 5, dAng,

1, 2);

mxOcx.SetEventRet(1);

}

}

3) 响应自定义事件,返回自定义实体夹点

需要响应_DMxDrawXEvents::CustomEntity_getGripPoints事件

帮助如下:

JS例子,返回自定义实体的开始夹点,和结束夹点。

// 返回自定义实体夹点

function GetGripPointsFun(pCustomEntity) {

var sGuid = pCustomEntity.Guid;

if (sGuid == "TestMxCustomEntity") {

if (!pCustomEntity.IsHave("ept"))

return;

var stp = pCustomEntity.GetPoint("spt");

if (stp == null)

return;

var ept = pCustomEntity.GetPoint("ept");

if (ept == null)

return;

var ret = mxOcx.NewResbuf();

ret.AddPoint(stp);

ret.AddPoint(ept);

mxOcx.SetEventRetEx(ret);

}

}

4) 响应自定义事件,夹点移动后的处理

需要响应CustomEntity_moveGripPointsAt事件

帮助如下:

JS例子,夹点移动后,修改自定义实体的属性

// 移动自定义实体夹点

function MoveGripPointsFun(pCustomEntity, lGridIndex, dOffsetX, dOffsetY) {

var sGuid = pCustomEntity.Guid;

if (sGuid == "TestMxCustomEntity") {

if (!pCustomEntity.IsHave("ept"))

return;

var stp = pCustomEntity.GetPoint("spt");

if (stp == null)

return;

var ept = pCustomEntity.GetPoint("ept");

if (ept == null)

return;

if (lGridIndex == 0) {

stp.x = stp.x + dOffsetX;

stp.y = stp.y + dOffsetY;

pCustomEntity.SetPoint("spt", stp);

}

else {

ept.x = ept.x + dOffsetX;

ept.y = ept.y + dOffsetY;

pCustomEntity.SetPoint("ept", ept);

}

mxOcx.SetEventRet(1);

}

}

CAD控件:COM接口实现自定义实体的更多相关文章

  1. 梦想CAD控件COM接口自定义命令

    在CAD软件操作中,为方便使用者,使用自定义命令发出命令,完成CAD绘图,修改,保存等操作.点击此处下载演示实例. _DMxDrawX::RegistUserCustomCommand 向CAD控件注 ...

  2. 梦想CAD控件网页版关于自定义命令

    在CAD控件操作中,为方便使用者,使用自定义命令发出命令,完成CAD绘图,修改,保存等操作.点击此处在线演示. _DMxDrawX::RegistUserCustomCommand 向CAD控件注册一 ...

  3. 梦想CAD控件COM接口光栅图处理

    在CAD操作过程中,我们在设计绘图时,光栅图像也就是我们常说的图片,应用非常广泛,在CAD中可以直接插入光栅图像,并且可以对光栅图像进行裁剪.透明度调整等一些操作,在网页可以快速实现我们所需功能. 一 ...

  4. 梦想CAD控件COM接口标注样式

    增加标注样式 用户可以增加标注样式到数据库,具体实现c#代码如下: private void CreateDim() { //返回控件的数据库对象 MxDrawDatabase database = ...

  5. 梦想CAD控件com接口扩展数据

    随着CAD应用软件的飞速发展,经常需要保存一些与图形可视性无关的数据,即非图形参数.例如在绘制化验样图中包含品位数据.MxCAD定义了一类参数——实体扩展数据.扩展数据与实体的可视性无关,而是用户根据 ...

  6. 梦想CAD控件COM接口文字样式

    增加文字样式 用户可以增加文字样式到数据库,并设置其字体等属性,具体实现c#代码如下: private void CreateText() { MxDrawApplication app = new ...

  7. 梦想CAD控件COM接口搜索图面上的文字

    点击此处下载演示实例 主要用到函数说明: _DMxDrawX::NewSelectionSet 实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数. _DMxDrawX::NewResbuf ...

  8. CAD控件使用教程 自定义实体的实现

    自定义实体的实现 1 .       自定义实体... 3 1.1      说明... 3 1.2      类的类型信息... 3 1.3      worldDraw.. 4 1.4      ...

  9. 梦想CAD控件图块COM接口知识点

    梦想CAD控件图块COM接口知识点 图块是将多个实体组合成一个整体,并给这个整体命名保存,在以后的图形编辑中图块就被视为一个实体.一个图块包括可见的实体如线.圆.圆弧以及可见或不可见的属性数据.图块的 ...

  10. 梦想CAD控件图层COM接口知识点

    梦想CAD控件图层COM接口知识点 一.新建图层 主要用到函数说明: _DMxDrawX::AddLayer 增加新的图层.详细说明如下: 参数 说明 BSTR pszName 图层名 c#中实现代码 ...

随机推荐

  1. 在Linux上安装zsh

    简单介绍: 相对于绝大多数linux发行版默认的shell--bash,zsh绝对是一个优秀的替代品.zsh是交互型shell,同一时候它也是一个强大的编程语言,很多bash,ksh,tcsh优秀的地 ...

  2. Windows10 Win键失灵的解决方法

    之前在Windows10出来的时候在使用过程中发现:按“Win键”调出开始菜单没有用.一点反应都没有.Win+R等这样的组合键也没用. 后来周年更新后,还是无法使用... 各种方法用尽啊.都不行啊! ...

  3. luogu 3388 【模板】割点(割顶)

    点双. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> ...

  4. oracle中WMSYS.WM_CONCAT函数的版本差异

    昨天在测试的时候发现,开发人员写的一段程序放在开发库中是好的,但是放在测试库中就会有问题.开发人员一直找不到问题的原因在哪里.于是就花了点时间协助开发人员来找问题的根本原因. 通过一些技术手段,定位到 ...

  5. Scala 归约操作- - - - -reduce

    object 归约操作_reduce { def main(args: Array[String]): Unit = { val list=List(,,,,) val result=list.red ...

  6. “ResGen.exe”已退出,代码为 -1073741701 或 “ResGen.exe”已退出,代码为 2。

    解决的办法如下: 1.关闭所有Visual Studio: 2.以管理员的身份打开命令提示窗口:(开始-运行-cmd) 3.更改目录至"CD C:\Program Files (x86)\M ...

  7. POJ 1659 Frogs' Neighborhood (贪心)

    题意:中文题. 析:贪心策略,先让邻居多的选,选的时候也尽量选邻居多的. 代码如下: #pragma comment(linker, "/STACK:1024000000,102400000 ...

  8. bzoj 1755: [Usaco2005 qua]Bank Interest【模拟】

    原来强行转int可以避免四舍五入啊 #include<iostream> #include<cstdio> using namespace std; int r,y; doub ...

  9. TestNG设置用例循环执行

    曾经做过一需求,需要单个集成测试用例循环执行N次,或许你会说for循环就可以了,这当然是可以的.那有没有逼格更高点的方法,当然也是有的.下面我们就说下使用TestNG注解功能实现用例的循环执行. 1. ...

  10. [C和指针] 4-语句、5-操作符和表达式

    第4章 语句 4.1 表达式语句 C并不存在专门的"赋值语句",赋值就是一种操作,就像加法和减法一样,所以赋值就在表达式内进行. 你只要在表达式后面加上一个分号,就可以把表达式转变 ...