天天看點

CAD互動繪制圓弧(網頁版)

1、在CAD設計時,需要繪制圓弧,使用者可以在圖面點圓弧起點,圓弧上的一點和圓弧的終點,這樣就繪制出圓弧。

2、主要用到函數說明:_DMxDrawX::DrawArc2

由圓弧上的三點繪制一個圓弧。詳細說明如下:

參數 說明
DOUBLE dStartPointX 開始點X坐标
DOUBLE dStartPointY 開始點Y坐标
DOUBLE dMidPointX 圓弧上的一點X坐标
DOUBLE dMidPointY 圓弧上的一點Y坐标
DOUBLE dEndPointX 結束點X坐标
DOUBLE dEndPointY 結束點Y坐标

3、IMxDrawCustomEntity::Draw

把實體繪制到圖上。一般用于動态拖放時,在拖放結束時,繪制到圖上。

4、_DMxDrawXEvents::DynWorldDraw

動态拖放時的繪制事件。詳細說明如下:

參數 說明
DOUBLE dX 目前滑鼠位置X坐标
DOUBLE dY 目前滑鼠位置Y坐标
IDispatch* pWorldDraw IMxDrawWorldDraw對象,用于動态繪制
IDispatch* pData IMxDrawCustomEntity對象,動态繪制資料

5、js中實作代碼說明:

(1)動态拖放時的繪制事件:

​​function​​​ ​​DoDynWorldDrawFun(dX,dY,pWorldDraw,pData)​​
​​{​​
​​//自定義實體的GUID辨別符​​
​​var​​​ ​​sGuid = pData.Guid;​​
​​//設定自定義事件的傳回值​​
​​mxOcx.SetEventRet(0);​​
​​if​​​ ​​(sGuid == ​​​​"DrawArc"​​​​) {​​
​​//與使用者互動到在圖上提取一個點​​
​​var​​​ ​​pt1 = pData.GetPoint(​​​​"pt1"​​​​);​​
​​if​​​ ​​(pt1 == ​​​​null​​​​)​​
​​return​​​​;​​
​​var​​​ ​​pt2 = pData.GetPoint(​​​​"pt2"​​​​);​​
​​if​​​ ​​(pt2 == ​​​​null​​​​)​​
​​return​​​​;​​
​​//由圓弧上的三點繪制一個圓弧​​
​​//參數一為開始點X坐标 ;參數二為開始點Y坐标 ;參數三為結束點X坐标​​
​​//參數四為結束點Y坐标 ;參數五為圓弧上的一點X坐标 ;參數六為圓弧上的一點Y坐标​​
​​pWorldDraw.DrawArc2(pt1.x, pt1.y, pt2.x, pt2.y, dX, dY);​​
​​}​​
​​}​​      

(2)動态繪制圓弧:

function​​​ ​​DrawArc() {​​
​​// 建立一個COM元件對象​​
​​var​​​ ​​getPt1 = mxOcx.NewComObject(​​​​"IMxDrawUiPrPoint"​​​​);​​
​​getPt1.message = ​​​​"指定圓弧的起點"​​​​;​​
​​if​​​ ​​(getPt1.go() != 1) {​​
​​return​​​​;​​
​​}​​
​​// 建立一個COM元件對象​​
​​var​​​ ​​getPt2 = mxOcx.NewComObject(​​​​"IMxDrawUiPrPoint"​​​​);​​
​​getPt2.message = ​​​​"指定圓弧的第二個點"​​​​;​​
​​//基點​​
​​getPt2.basePoint = getPt1.value();​​
​​//設定是否啟用拖放基點  true:使用,false:不使用​​
​​getPt2.setUseBasePt(​​​​true​​​​);​​
​​if​​​ ​​(getPt2.go() != 1) {​​
​​return​​​​;​​
​​}​​
​​// 建立一個COM元件對象​​
​​var​​​ ​​getPt3 = mxOcx.NewComObject(​​​​"IMxDrawUiPrPoint"​​​​);​​
​​getPt3.message = ​​​​"指定圓弧的端點"​​​​;​​
​​//初始動态繪制;  動态繪制Id,在動态繪制函數裡,這個值用于判斷是那個動态繪制​​
​​var​​​ ​​spDrawData = getPt3.InitUserDraw(​​​​"DrawArc"​​​​);​​
​​//設定point類型的屬性​​
​​spDrawData.SetPoint(​​​​"pt1"​​​​, getPt1.value());​​
​​spDrawData.SetPoint(​​​​"pt2"​​​​, getPt2.value());​​
​​if​​​ ​​(getPt3.go() != 1) {​​
​​return​​​​;​​
​​}​​
​​//把實體繪制到圖上。一般用于動态拖放時,在拖放結束時,繪制到圖上;傳回新繪制的實體的id​​
​​spDrawData.Draw();​​
​​}​​      

繼續閱讀