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();
- }
来源: http://www.bubuko.com/infodetail-3102235.html