js中实现代码说明:
动态拖放时的绘制事件:
function DynWorldDrawComment2( pCustomEntity,pWorldDraw, curPt) { // 得到绘制参数. var sText = pCustomEntity.GetString("Text"); var dTextHeight = pCustomEntity.GetDouble("TextHeight"); var iEdgeNumber = pCustomEntity.GetLong("EdgeNumber"); var dShapRadius = pCustomEntity.GetDouble("ShapRadius"); var basePoint = pCustomEntity.GetPoint("BasePoint"); // 创建一个批注对象. var comment = mxOcx.NewEntity("IMxDrawComment"); comment.Text = sText; comment.TextHeight = dTextHeight; comment.EdgeNumber = iEdgeNumber; comment.ShapRadius = dShapRadius; comment.basePoint = basePoint; comment.Position = curPt; // 设置文字样式。 pWorldDraw.TextStyle = "MyCommentFont"; // 动态绘制. pWorldDraw.DrawEntity(comment); }
动态绘制文字:
function ExplodeFun(pCustomEntity, pWorldDraw, txt) { var sGuid = pCustomEntity.Guid; if (sGuid == "TestMxCustomEntity1") { if (!pCustomEntity.IsHave("First")) return; var stp = pCustomEntity.GetPoint("First"); var ept = pCustomEntity.GetPoint("BasePoint"); var dimpt = pCustomEntity.GetPoint("DimPoint"); var txt = pCustomEntity.GetString("Text"); var textH = pCustomEntity.GetDouble("TextHeight"); var edgeNum = pCustomEntity.GetLong("EdgeNumber"); var shapRadius = pCustomEntity.GetDouble("ShapRadius"); var isCircle = pCustomEntity.GetLong("isCircle"); var comment = mxOcx.NewEntity("IMxDrawComment"); comment.Text = txt; comment.TextHeight = textH; comment.EdgeNumber = edgeNum; comment.ShapRadius = shapRadius; comment.basePoint = ept; comment.Position = dimpt; pWorldDraw.TextStyle = "MyCommentFont"; // 动态绘制. pWorldDraw.DrawEntity(comment); // 绘制矩形框. if (isCircle) { var dR = stp.DistanceTo(ept) * 0.5; var vec = stp.SumVector(ept); vec.Mult(0.5); ept.Add(vec); pWorldDraw.DrawCircle(ept.x, ept.y, dR); } else { pWorldDraw.DrawLine(stp.x, stp.y, stp.x, ept.y); pWorldDraw.DrawLine(stp.x, ept.y, ept.x, ept.y); pWorldDraw.DrawLine(ept.x, ept.y, ept.x, stp.y); pWorldDraw.DrawLine(ept.x, stp.y, stp.x, stp.y); } mxOcx.SetEventRet(1); } }
动态绘制文字:
function DoComment3() { var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint"); getPt.message = "点取第一点"; if (getPt.go() != 1) { return; } var frstPt = getPt.value(); if (frstPt == null) return; var utl = mxOcx.NewUtility(); var secondPt = utl.GetCorner(frstPt, "点取第二点"); if (secondPt == null) return; var param = mxOcx.NewResbuf(); param.AddString(""); param.AddDouble(200); var ret = mxOcx.CallEx("Mx_ShowMTextDialog", param); if (ret.AtString(0) != "Ok") { return; } var txt = ret.AtString(1); var txtH = ret.AtDouble(2); var txtColorIndex = ret.AtLong(3); // 加入换行操作符\\P //txt = txt + "\\PTEST"; // 创建一个文字样式,用于批注文字字体. mxOcx.AddTextStyle2("MyCommentFont", "黑体", 0.7); // 创建一个与用户交互取点的对象。 var getSecondPt = mxOcx.NewComObject("IMxDrawUiPrPoint"); getSecondPt.message = "输入标注位置点"; getSecondPt.basePoint = secondPt; getSecondPt.setUseBasePt(false); spDrawData = getSecondPt.InitUserDraw("DrawComment2"); // 设置动态绘制参数. spDrawData.SetPoint("BasePoint", secondPt); spDrawData.SetString("Text", txt); spDrawData.SetDouble("TextHeight", txtH); spDrawData.SetLong("EdgeNumber", 2); spDrawData.SetDouble("ShapRadius", 1); // 开始取第二个点。 if (getSecondPt.go() != 1) return; var ent = mxOcx.DrawCustomEntity("TestMxCustomEntity1", ""); ent.SetPoint("BasePoint", secondPt); ent.SetString("Text", txt); ent.SetDouble("TextHeight", txtH); ent.SetLong("EdgeNumber", 2); ent.SetDouble("ShapRadius", 1); ent.SetPoint("DimPoint", getSecondPt.value()); ent.SetPoint("First", frstPt); ent.TextStyle = "MyCommentFont"; ent.colorIndex = txtColorIndex; }