当前位置:知识库 / C#开发 / 详情
如何动态绘制带面积周长的圆?
如何动态绘制带面积周长的圆?
C#开发|黄洪辉|2018-05-14 10:06
回答:

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


计算两个点的距离。


c#中实现代码说明:


动态拖放时的绘制事件:


private void DrawCircle()
{
    // 创建一个与用户交互取点的对象。
    MxDrawUiPrPoint getPt = new MxDrawUiPrPoint();
    getPt.message = "第一点";
    if (getPt.go() != MCAD_McUiPrStatus.mcOk)
        return;
    MxDrawUiPrPoint getSecondPt = new MxDrawUiPrPoint();
    getSecondPt.message = "第二点";
    //调用
    MxDrawCustomEntity spDrawData = getSecondPt.InitUserDraw("TestDynDrawCircle");
    // 设置动态绘制参数.
    spDrawData.SetPoint("BasePoint", getPt.value());
    // 开始取第二个点。
    if (getSecondPt.go() != MCAD_McUiPrStatus.mcOk)
        return;
 
    spDrawData.Draw();
}


动态绘制圆:


if (sGuid == "TestDynDrawCircle")
{
    MxDrawPoint pt1 = pCustomEntity.GetPoint("BasePoint");
 
    double dR = pt1.DistanceTo(curPoint);
    //计算面积(取绝对值)
    double arec = dR * dR * Math.PI;
    //计算周长
    double girth = 2 * dR * Math.PI;
    //变换视区长度
    double dHeigth = axMxDrawX1.ViewLongToDocCoord(15);
    //绘制一个单行文字
    //参数一为文字的位置的X坐标 ;参数二为文字的位置的Y坐标 ;参数三为文字内容字符串
    //参数四为文字高度;参数五为文字的旋转角度
    //参数六为文字的水平对齐方式,0=kTextLeft,1=kTextCenter,2=kTextRight
    //参数七文字的竖直对齐方式,1=kTextBottom,2=kTextVertMid,3=kTextTop
    pWorldDraw.DrawText(pt1.x, pt1.y, "面积:" + arec, dHeigth, 0, 0, MCAD_McVerticalAlignment.mcVerticalAlignmentTop);
    pWorldDraw.DrawText(pt1.x, pt1.y, "周长:" + girth, dHeigth, 0, 0, MCAD_McVerticalAlignment.mcVerticalAlignmentBottom);
    pWorldDraw.DrawCircle(pt1.x, pt1.y, dR);               
}
相关问题
如何动态绘制带面积周长的矩形框?
如何绘制矩形框?
怎么绘制一个标记?
如何实现嵌套打印?
怎么设置点样式?
如何动态绘制一个矩形框?
如何绘制一个箭头?
如何实现自定义实体?
增加一个新的标注样式
如何设置实体显示顺序
梦想CAD是专业的CAD插件(控件),可轻松在网页、手机及BS/CS程序中浏览编辑DWG文件,不需安装AutoCAD即可运行。经十余年累积已非常稳定可靠,有关键的空间搜索算法,并使用汇编优化,可同时处理50万级实体,有非常高的图形显示和处理效率。
联系我们
技术TEL:400-888-5703
185-8173-1060
客服I QQ: 3570505660
技术I QQ: 827867134
技术II QQ:6884123
VIP服务购买
销售TEL:156-8136-8971
销售QQ:710714273
用户交流
控件QQ交流群1:73281982
控件QQ交流群2:112199959
MxCAD软件群 1:515771658
技术I:QQ
827867134
客服I:QQ
3570505660
销售QQ
710714273
联系电话400-888-5703