在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对象,动态绘制数据 |
c#中实现代码说明:
动态拖放时的绘制事件:
private void DrawArc() { //制定圆弧的起点 MxDrawUiPrPoint getPt = new MxDrawUiPrPoint(); getPt.message = "制定圆弧的起点"; if(getPt.go() != MCAD_McUiPrStatus.mcOk) { return; } //制定圆弧的第二点 MxDrawUiPrPoint getSecondPt = new MxDrawUiPrPoint(); getSecondPt.message = "制定圆弧的第二点"; //基点 getSecondPt.basePoint = getPt.value(); //设置是否启用基点 true:使用 false:不使用 if (getSecondPt.go() != MCAD_McUiPrStatus.mcOk) { return; } //制定圆弧的端点 MxDrawUiPrPoint getThreePt = new MxDrawUiPrPoint(); getThreePt.message = "制定圆弧的端点"; MxDrawCustomEntity spDrawData = getThreePt.InitUserDraw("DrawArc"); spDrawData.SetPoint("basepoint", getPt.value()); spDrawData.SetPoint("secondpoint", getSecondPt.value()); if (getThreePt.go() != MCAD_McUiPrStatus.mcOk) return; spDrawData.Draw(); }
动态绘制圆弧:
private void axMxDrawX1_DynWorldDraw(object sender, AxMxDrawXLib._DMxDrawXEvents_DynWorldDrawEvent e) { MxDrawCustomEntity pCustomEntity = (MxDrawCustomEntity)e.pData; MxDrawWorldDraw pWorldDraw = (MxDrawWorldDraw)e.pWorldDraw; string sGuid = pCustomEntity.Guid; MxDrawPoint curPoint = new MxDrawPoint(); curPoint.x = e.dX; curPoint.y = e.dY; if(sGuid == "DrawArc") { MxDrawPoint point1 = pCustomEntity.GetPoint("basepoint"); if (point1 == null) return; MxDrawPoint point2 = pCustomEntity.GetPoint("secondpoint"); if (point2 == null) return; //由圆弧上的三点绘制一个圆弧 //参数一为开始点X坐标 ;参数二为开始点Y坐标 ;参数三为结束点X坐标 //参数四为结束点Y坐标 ;参数五为圆弧上的一点X坐标 ;参数六为圆弧上的一点Y坐标 pWorldDraw.DrawArc2(point1.x, point1.y, point2.x, point2.y, curPoint.x, curPoint.y); } }
原文:https://www.cnblogs.com/yzy0224/p/11064738.html