1、在CAD设计时,需要绘制圆弧,用户可以在图面点圆弧起点,圆弧上的一点和圆弧的终点,这样就绘制出圆弧。
2、主要用到函数说明:_DMxDrawX::DrawArc2
由圆弧上的三点绘制一个圆弧。详细说明如下:
参数 | 说明 |
---|
DOUBLE dStartPointX | 开始点X坐标 |
DOUBLE dStartPointY | 开始点Y坐标 |
DOUBLE dMidPointX | 圆弧上的一点X坐标 |
DOUBLE dMidPointY | 圆弧上的一点Y坐标 |
DOUBLE dEndPointX | 结束点X坐标 |
DOUBLE dEndPointY | 结束点Y坐标 |
3、IMxDrawCustomEntity::Draw
把实体绘制到图上。一般用于动态拖放时,在拖放结束时,绘制到图上。
4、_DMxDrawXEvents::DynWorldDraw
动态拖放时的绘制事件。详细说明如下:
参数 | 说明 |
---|
DOUBLE dX | 当前鼠标位置X坐标 |
DOUBLE dY | 当前鼠标位置Y坐标 |
IDispatch* pWorldDraw | IMxDrawWorldDraw对象,用于动态绘制 |
IDispatch* pData | IMxDrawCustomEntity对象,动态绘制数据 |
5、js中实现代码说明:
(1)动态拖放时的绘制事件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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); } } |
(2)动态绘制圆弧:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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(); } |
6、效果展示:
用户可以通过点击绘制圆弧按钮,在CAD控件视区点取圆弧的起点,再点取圆弧第二点,最后点取圆弧的终点。如下图所示:
![dydrawarc.png](https://i-blog.csdnimg.cn/blog_migrate/d3a0dd539c1cc069bcad7d6909ab55ab.png)