用户可以在控件视区任意位置绘制直线。
主要用到函数说明:
_DMxDrawX::DrawLine
绘制一个直线。详细说明如下:
参数说明
DOUBLE dX1
直线的开始点x坐标
DOUBLE dY1
直线的开始点y坐标
DOUBLE dX2
直线的结束点x坐标
DOUBLE dY2
直线的结束点y坐标
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
c#中实现代码说明:
动态拖放时的绘制事件:
private void DrawDottedLine()
{
//点取第一点
MxDrawUiPrPoint getPt = new MxDrawUiPrPoint();
getPt.message = "点取第一点:";
if (getPt.go() != MCAD_McUiPrStatus.mcOk)
return;
//点取第二点
MxDrawUiPrPoint getSecondPt = new MxDrawUiPrPoint();
getSecondPt.message = "点取第二点:";
MxDrawCustomEntity spDrawData = getSecondPt.InitUserDraw("DrawMyDottedLine");
//设置point类型的属性
spDrawData.SetPoint("startpoint", getPt.value());
//设置线宽
spDrawData.SetDouble("dottedlinewidth", 5);
if (getSecondPt.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 == "DrawMyDottedLine")
{
//与用户交互在图面上提取一个点
MxDrawPoint vBasePt = pCustomEntity.GetPoint("startpoint");
//定义虚线数据据,"MyLineType"是线型名,"6,-8"是虚线的一个单位定义,6是实线长,-8是空格长
axMxDrawX1.AddLinetype("DrawMyDottedLine", "6,-10");
//设计当前线型为"MyLineType"
pWorldDraw.LineType = "DrawMyDottedLine";
double dw = pCustomEntity.GetDouble("dottedlinewidth");
pWorldDraw.LineWidth = dw;
//绘制一个直线
//参数一直线的开始点x坐标,参数二直线的开始点y坐标,参数三直线的结束点x坐标,参数四直线的结束点y坐标
pWorldDraw.DrawLine(vBasePt.x, vBasePt.y, curPoint.x, curPoint.y);
}
}