1、CAD繪制圖像的過程中,畫圓的情況是非常常見的,使用者可以在控件視區點取任意一點做為圓心,再動态點取半徑繪制圓。
2、主要用到函數說明:_DMxDrawX::DrawCircle
繪制一個圓。詳細說明如下:
參數 | 說明 |
DOUBLE dCenterX | 圓的中心X值 |
DOUBLE dCenterY | 圓的中心Y值 |
DOUBLE dRadius | 圓的半徑 |
3、IMxDrawCustomEntity::Draw
把實體繪制到圖上。一般用于動态拖放時,在拖放結束時,繪制到圖上。
4、_DMxDrawXEvents::DynWorldDraw
動态拖放時的繪制事件。詳細說明如下:
參數 | 說明 |
DOUBLE dX | 目前滑鼠位置X坐标 |
DOUBLE dY | 目前滑鼠位置Y坐标 |
IDispatch* pWorldDraw | IMxDrawWorldDraw對象,用于動态繪制 |
IDispatch* pData | IMxDrawCustomEntity對象,動态繪制資料 |
5、_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 |
6、IMxDrawPoint::DistanceTo
計算兩個點的距離。
7、js中實作代碼說明:
(1)動态拖放時的繪制事件:
function DoDynWorldDrawFun(dX,dY,pWorldDraw,pData) {
//自定義實體的GUID辨別符
var sGuid = pData.Guid;
//設定自定義事件的傳回值
mxOcx.SetEventRet(0);
var curPt = mxOcx.NewPoint();
curPt.x = dX;
curPt.y = dY;
//畫帶面積周長的圓
if (sGuid == "TestDynDrawCircle") {
var pt1 = pData.GetPoint("pt1");
var dR = curPt.DistanceTo(pt1);
//計算面積(取絕對值)
var arec = dR*dR*Math.PI;
//計算周長
var girth = 2*dR * Math.PI;
//變換視區長度
var dHeigth = mxOcx.ViewLongToDocCoord(15);
//繪制一個單行文字
//參數一為文字的位置的X坐标 ;參數二為文字的位置的Y坐标 ;參數三為文字内容字元串
//參數四為文字高度;參數五為文字的旋轉角度
//參數六為文字的水準對齊方式,0=kTextLeft,1=kTextCenter,2=kTextRight
//參數七文字的豎直對齊方式,1=kTextBottom,2=kTextVertMid,3=kTextTop
pWorldDraw.DrawText(pt1.x, pt1.y, "面積:" + arec.toFixed(2), dHeigth, 0, 1, 1);
pWorldDraw.DrawText(pt1.x, pt1.y, "周長:" + girth.toFixed(2), dHeigth, 0, 1, 3);
pWorldDraw.DrawCircle(pt1.x, pt1.y, dR);
}
}
(2)動态繪制圓:
function DrawCircle() {
// 建立一個與使用者互動取點的對象。
var point1 = mxOcx.GetPoint(false,0,0,"\n 點取圓心:");
if(point1 == null)
{
return;
}
var getSecondPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
getSecondPt.message = "第二點";
getSecondPt.basePoint = point1;
//不開啟皮筋效果
getSecondPt.setUseBasePt(false);
//調用
var spDrawData = getSecondPt.InitUserDraw("TestDynDrawCircle");
// 設定動态繪制參數.
spDrawData.SetPoint("pt1", point1);
// 開始取第二個點。
if (getSecondPt.go() != 1)
return;
var ret = spDrawData.Draw();
}