天天看點

CAD互動繪制塊引用對象(網頁版)

主要用到函數說明:

_DMxDrawX::DrawBlockReference

繪制塊引用對象。詳細說明如下:

參數 說明
DOUBLE dPosX 插入點的X坐标
DOUBLE dPosY 插入點的Y坐标
BSTR pszBlkName 圖塊名
DOUBLE dScale 圖塊縮放比例
DOUBLE dAng 圖塊的旋轉角度

js中實作代碼說明:

動态拖放時的繪制事件:

function DoDynWorldDrawFun(dX,dY,pWorldDraw,pData)
{
var sGuid = pData.Guid;
mxOcx.SetEventRet(0);
if(sGuid == "TestDynDraw")
{
//動态插入圖塊
// 與使用者互動到在圖上提取一個點
var firstPt =  pData.GetPoint("pt1");
if(firstPt == null)
return;
//與使用者互動,從指令中取字元串
var sBlkName =  pData.GetString("BlkName");
var secondPt = mxOcx.NewPoint();
secondPt.x = dX;
secondPt.y = dY;
//計算this點減去pPoint,得到的向量
var vec = firstPt.SumVector(secondPt);
//傳回向量順時針轉到與X軸的角度.[0,2PI)
var dAng = vec.Angle();
//繪制塊引用對象
//參數一為插入點的X坐标;參數二為插入點的Y坐标;
//參數三為圖塊名;參數四為圖塊縮放比例;參數五為圖塊的旋轉角度
pWorldDraw.DrawBlockReference(firstPt.x,firstPt.y,sBlkName,1.0,dAng * 180.0 / 3.14159265 + 90.0);
//設定自定義事件的傳回值
mxOcx.SetEventRet(1);
}
else if (sGuid == "TestDynDraw1") {
var sBlkName = pData.GetString("BlkName");
//繪制塊引用對象
pWorldDraw.DrawBlockReference(dX, dY, sBlkName, 1.0, 0.0);
}
 
}      

動态插入圖塊:

function DynInsert() {
var sBlkName = "Tree";
//使用者需要出入圖塊的路徑   控件程式在磁盤的檔案路徑
var sBlkFile = mxOcx.GetOcxAppPath() + "\\Blk\\樹.dwg";
//向控件資料庫中插入一個圖塊,不用它插入匿名塊
mxOcx.InsertBlock(sBlkFile, "Tree");
//建立一個COM元件對象
var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
getPt.message = "點取插入點";
//初始動态繪制
var spDrawData1 = getPt.InitUserDraw("TestDynDraw1");
//設定string類型的屬性
spDrawData1.SetString("BlkName","Tree");
if (getPt.go() != 1) {
return;
}
var frstPt = getPt.value();
if (frstPt == null) {
return;
}
var getSecondPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
var spDrawData = getSecondPt.InitUserDraw("TestDynDraw");
getSecondPt.message = "點取旋轉角度";
//得到點時的拖放基點
getSecondPt.basePoint = frstPt;
//設定是否啟用拖放基點   true:使用,false:不使用
getSecondPt.setUseBasePt(true);
//設定point類型的屬性
spDrawData.SetPoint("pt1", frstPt);
//設定string類型的屬性
spDrawData.SetString("BlkName", "Tree");
if (getSecondPt.go() != 1) {
return;
}
//把實體繪制到圖上。一般用于動态拖放時,在拖放結束時,繪制到圖上
var ret = spDrawData.Draw();
// 給屬性塊寫文字.
var blkRef = ret.AtObject(0);
if (blkRef != null)
{
var param = mxOcx.NewResbuf();
blkRef.SetProp("createAttribute",param);
}
}