在 CAD 设计时, 需要绘制圆弧, 用户可以在图面点圆弧起点, 圆弧上的一点和圆弧的终点, 这样就绘制出圆弧.
主要用到函数说明:
_DMxDrawX::DrawArc2
由圆弧上的三点绘制一个圆弧. 详细说明如下:
参数
| 说明
|
---|---|
DOUBLE dStartPointX
| 开始点 X 坐标
|
DOUBLE dStartPointY
| 开始点 Y 坐标
|
DOUBLE dMidPointX
| 圆弧上的一点 X 坐标
|
DOUBLE dMidPointY
| 圆弧上的一点 Y 坐标
|
DOUBLE dEndPointX
| 结束点 X 坐标
|
DOUBLE dEndPointY
| 结束点 Y 坐标
|
IMxDrawCustomEntity::Draw
把实体绘制到图上. 一般用于动态拖放时, 在拖放结束时, 绘制到图上.
_DMxDrawXEvents::DynWorldDraw
动态拖放时的绘制事件. 详细说明如下:
参数
| 说明
|
---|---|
DOUBLE dX
| 当前鼠标位置 X 坐标
|
DOUBLE dY
| 当前鼠标位置 Y 坐标
|
IDispatch* pWorldDraw
| IMxDrawWorldDraw 对象,用于动态绘制
|
IDispatch* pData
| IMxDrawCustomEntity 对象,动态绘制数据
|
JS 中实现代码说明:
动态拖放时的绘制事件:
- function DoDynWorldDrawFun(dX,dY,pWorldDraw,pData)
- {
- // 自定义实体的 GUID 标识符
- var sGuid = pData.Guid;
- // 设置自定义事件的返回值
- mxOcx.SetEventRet(0);
- if (sGuid == "DrawArc") {
- // 与用户交互到在图上提取一个点
- var pt1 = pData.GetPoint("pt1");
- if (pt1 == null)
- return;
- var pt2 = pData.GetPoint("pt2");
- if (pt2 == null)
- return;
- // 由圆弧上的三点绘制一个圆弧
- // 参数一为开始点 X 坐标 ; 参数二为开始点 Y 坐标 ; 参数三为结束点 X 坐标
- // 参数四为结束点 Y 坐标 ; 参数五为圆弧上的一点 X 坐标 ; 参数六为圆弧上的一点 Y 坐标
- pWorldDraw.DrawArc2(pt1.x, pt1.y, pt2.x, pt2.y, dX, dY);
- }
- }
动态绘制圆弧:
- function DrawArc() {
- // 新建一个 COM 组件对象
- var getPt1 = mxOcx.NewComObject("IMxDrawUiPrPoint");
- getPt1.message = "指定圆弧的起点";
- if (getPt1.go() != 1) {
- return;
- }
- // 新建一个 COM 组件对象
- var getPt2 = mxOcx.NewComObject("IMxDrawUiPrPoint");
- getPt2.message = "指定圆弧的第二个点";
- // 基点
- getPt2.basePoint = getPt1.value();
- // 设置是否启用拖放基点 true: 使用, false: 不使用
- getPt2.setUseBasePt(true);
- if (getPt2.go() != 1) {
- return;
- }
- // 新建一个 COM 组件对象
- var getPt3 = mxOcx.NewComObject("IMxDrawUiPrPoint");
- getPt3.message = "指定圆弧的端点";
- // 初始动态绘制; 动态绘制 Id, 在动态绘制函数里, 这个值用于判断是那个动态绘制
- var spDrawData = getPt3.InitUserDraw("DrawArc");
- // 设置 point 类型的属性
- spDrawData.SetPoint("pt1", getPt1.value());
- spDrawData.SetPoint("pt2", getPt2.value());
- if (getPt3.go() != 1) {
- return;
- }
- // 把实体绘制到图上. 一般用于动态拖放时, 在拖放结束时, 绘制到图上; 返回新绘制的实体的 id
- spDrawData.Draw();
- }
来源: http://www.bubuko.com/infodetail-3102223.html