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