|
www.mxdraw.com
|
多段线类型
[ object, uuid(0D5B311A-21E4-44B7-B6EB-71489F920077), dual, nonextensible, helpstring("IMxDrawPolyline interface"), pointer_default(unique) ]
interface IMxDrawPolyline : IMxDrawCurve;MxDrawPolyline.idl
例如:C# 绘制一个3dPL线,并设置它的Z值.
// 开始绘制 axMxDrawX1.PathMoveTo(10, 10); axMxDrawX1.PathLineTo(200, 200); Int64 lId = axMxDrawX1.DrawPathToPolyline(); // 得到新绘制的PL线对象 MxDrawPolyline pl = (MxDrawPolyline)axMxDrawX1.ObjectIdToObject(lId); //得到它的当前类型 // MxDrawResbuf ret = pl.GetProp("Type"); // MessageBox.Show(ret.AtLong(0).ToString()); //PL线的类型,可以是如下3个值 // enum PolylineType // { // kLwPolyline = 0, // k2dPolyline = 1, // k3dPolyline = 2 // }; MxDrawResbuf param = new MxDrawResbuf(); // 把PL线的类设置成k3dPolyline param.AddLong(2); pl.SetProp("Type", param); // 设置PL线的z值。 MxDrawPoint pt = pl.GetPointAt(0); pt.z = 100; pl.SetPointAt(0, pt); // pt = pl.GetPointAt(1); pt.z = 200; pl.SetPointAt(1, pt);
例如: C#得到多线的端点,并成填充对象。
private void TestFill(String sHandle) { MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase(); MxDrawMcDbObject obj = database.HandleToObject(sHandle); if (obj == null) return; if (obj is MxDrawPolyline) { MxDrawPolyline poly = (MxDrawPolyline)obj; int i = 0; for (; i < poly.NumVerts; i++) { MxDrawPoint pt = (MxDrawPoint)poly.GetPointAt(i); double dBulge = poly.GetBulgeAt(i); if (i == 0) axMxDrawX1.PathMoveTo(pt.x, pt.y); else axMxDrawX1.PathLineToEx(pt.x, pt.y, 0.0, 0.0, dBulge); } if (i >= 3) { axMxDrawX1.PathMakeClosed(); axMxDrawX1.DrawPathToHatch(1.0); } } }
例如: JS 通过打碎函数,得到pl线的坐标信息
function GetPolyline() {
var ent = mxOcx.GetEntity("选择pl线:");
if (ent == null) {
return;
}
if (ent.ObjectName != "McDbPolyline") {
return;
}
var param = mxOcx.NewResbuf();
param.AddObjectId(ent.ObjectID);
var ret = mxOcx.CallEx('Mx_Explode', param);
var jj = 1;
for(;jj < ret.Count;jj++) {
var tmp = ret.AtObject(jj);
if (tmp.ObjectName == "McDbLine") {
// 是个直线。 得到直线的开始点坐标,和结束点坐标。
var spt = tmp.StartPoint;
var ept = tmp.EndPoint;
alert(spt.x)
alert(spt.y)
alert(ept.x)
alert(ept.y)
}
else if (tmp.ObjectName == "McDbArc") {
// 是个圆弧
var cen = tmp.Center;
var sAng = tmp.StartAngle;
var eAng = tmp.EndAngle;
var r = tmp.Radius;
alert(r);
}
tmp.Erase();
}
}
例如:得到pl线所在区域里,离区域中心位置最近的文本。
MxDrawResbuf ret = pl.GetProp("FindText");
if(ret.Count != 0)
{
MxDrawMcDbObject obj = ret.AtObject(0);
if(obj == null)
continue;
axMxDrawX1.TwinkeEnt (obj.ObjectID);
}