CAD绘制图像的过程中,画圆的情况是非常常见的,用户可以在控件视区点取任意一点做为圆心,再动态点取半径绘制圆。

主要用到函数说明:

_DMxDrawX::DrawCircle

绘制一个圆。详细说明如下:

参数 说明

DOUBLE dCenterX

圆的中心X值

DOUBLE dCenterY

圆的中心Y值

DOUBLE dRadius

圆的半径

IMxDrawCustomEntity::Draw

把实体绘制到图上。一般用于动态拖放时,在拖放结束时,绘制到图上。

_DMxDrawXEvents::DynWorldDraw

动态拖放时的绘制事件。详细说明如下:

参数 说明

DOUBLE dX

当前鼠标位置X坐标

DOUBLE dY

当前鼠标位置Y坐标

IDispatch* pWorldDraw

IMxDrawWorldDraw对象,用于动态绘制

IDispatch* pData

IMxDrawCustomEntity对象,动态绘制数据

_DMxDrawX::DrawText

绘制一个单行文字。详细说明如下:

参数 说明

DOUBLE dPosX

文字的位置的X坐标

DOUBLE dPosY

文字的位置的Y坐标

BSTR pszText

文字内容字符串

DOUBLE dHeight

文字高度

DOUBLE dRotation

文字的旋转角度

SHORT horizontalMode

文字的水平对齐方式,0=kTextLeft,1=kTextCenter,2=kTextRight

SHORT verticalMode

文字的竖直对齐方式,1=kTextBottom,2=kTextVertMid,3=kTextTop

IMxDrawPoint::DistanceTo

计算两个点的距离。

js中实现代码说明:

动态拖放时的绘制事件:

function DoDynWorldDrawFun(dX,dY,pWorldDraw,pData) {
//自定义实体的GUID标识符
var sGuid = pData.Guid;
//设置自定义事件的返回值
mxOcx.SetEventRet(0); var curPt = mxOcx.NewPoint();
curPt.x = dX;
curPt.y = dY; //画带面积周长的圆
if (sGuid == "TestDynDrawCircle") {
var pt1 = pData.GetPoint("pt1");
var dR = curPt.DistanceTo(pt1);
//计算面积(取绝对值)
var arec = dR*dR*Math.PI;
//计算周长
var girth = 2*dR * Math.PI;
//变换视区长度
var dHeigth = mxOcx.ViewLongToDocCoord(15);
//绘制一个单行文字
//参数一为文字的位置的X坐标 ;参数二为文字的位置的Y坐标 ;参数三为文字内容字符串
//参数四为文字高度;参数五为文字的旋转角度
//参数六为文字的水平对齐方式,0=kTextLeft,1=kTextCenter,2=kTextRight
//参数七文字的竖直对齐方式,1=kTextBottom,2=kTextVertMid,3=kTextTop
pWorldDraw.DrawText(pt1.x, pt1.y, "面积:" + arec.toFixed(2), dHeigth, 0, 1, 1);
pWorldDraw.DrawText(pt1.x, pt1.y, "周长:" + girth.toFixed(2), dHeigth, 0, 1, 3);
pWorldDraw.DrawCircle(pt1.x, pt1.y, dR);
} }

动态绘制圆:

function DrawCircle() {
// 创建一个与用户交互取点的对象。
var point1 = mxOcx.GetPoint(false,0,0,"\n 点取圆心:");
if(point1 == null)
{
return;
}
var getSecondPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
getSecondPt.message = "第二点";
getSecondPt.basePoint = point1;
//不开启皮筋效果
getSecondPt.setUseBasePt(false);
//调用
var spDrawData = getSecondPt.InitUserDraw("TestDynDrawCircle");
// 设置动态绘制参数.
spDrawData.SetPoint("pt1", point1);
// 开始取第二个点。
if (getSecondPt.go() != 1)
return;
var ret = spDrawData.Draw();
}

最新文章

  1. SQL SERVER Transactional Replication中添加新表如何不初始化整个快照
  2. 使用n2n在没有公网IP条件下访问树莓派
  3. 深入理解PHP内核(十一)函数-函数的内部结构
  4. FZU5BOYS-Beta版本冲刺计划及安排
  5. 开源入侵检测系统OSSEC搭建之二:客户端安装
  6. 【转】oracle null
  7. AES算法简介
  8. 使用XML文件定义菜单
  9. 通过命令行使用cl.exe编译器
  10. 关于vue如何解决数据渲染完成之前,dom树显示问题
  11. 解决Select标签的Option在IE浏览中display:none不生效的问题
  12. P5284 [十二省联考2019]字符串问题
  13. JavaFTP文件传输上传和下载文件
  14. ES6 实战项目构建 ES6+glup+express
  15. MySQL索引优化看这篇文章就够了!
  16. 解决 Redis 只读不可写的问题
  17. shell脚本[] [[]] -n -z 的含义解析
  18. Saiku缓存处理(七)
  19. uva-10282-枚举
  20. find -exec 与xargs 区别

热门文章

  1. Two
  2. ubuntu下安装vmtool
  3. UVa 1643 Angle and Squares (计算几何)
  4. 【转】PL/SQL 使用技巧
  5. E20180502-hm
  6. 洛谷 - P1034 - 矩形覆盖 - dfs
  7. poj3617【贪心】
  8. python __builtins__ bytes类 (8)
  9. Vant入门
  10. spring boot eureka server