天天看點

CAD互動繪制圓(網頁版)

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();​​
​​}​​