一、参数绘制批注
C#中实现代码说明:
private void DrawComment() { MxDrawComment com = new MxDrawComment(); MxDrawPoint pt = new MxDrawPoint(); pt.x = 200; pt.y = 200; com.basePoint = pt; pt.x = 300; pt.y = 300; com.Position = pt; com.Text = "Test" ; MxDrawPoints pts = new MxDrawPoints(); pts.Add(-100, -100, 0); pts.Add(100, 100, 0); com.Bounding = pts; com.ArrowType = 2; com.BoundingBoxType = 5; com.Bounding = pts; com.ShapRadius = 50; com.TextHeight = 100; axMxDrawX1.DrawEntity(com); axMxDrawX1.ZoomAll(); } |
效果展示:
js中实现代码说明:
自定义实体绘制函数
function ExplodeFun(pCustomEntity, pWorldDraw, txt) { var sGuid = pCustomEntity.Guid; if (sGuid == "TestMxCustomEntity" ) { 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; //标注位置提示多边形的边数. 小于2不绘制,=2绘制圆,大于2绘制多边形 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); //绘制一个圆 //参数一为圆的中心X值 ,参数二为圆的中心Y值, //参数三为半径 pWorldDraw.DrawCircle(ept.x, ept.y, dR); } // 绘制矩形框. else { //绘制一个直线 //参数一直线的开始点x坐标,参数二直线的开始点y坐标,参数三直线的结束点x坐标,参数四直线的结束点y坐标 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 GetGripPointsFun(pCustomEntity) { var sGuid = pCustomEntity.Guid; if (sGuid == "TestMxCustomEntity" ) { if (!pCustomEntity.IsHave( "First" )) return ; var stp = pCustomEntity.GetPoint( "First" ); var ept = pCustomEntity.GetPoint( "BasePoint" ); var dimpt = pCustomEntity.GetPoint( "DimPoint" ); var ret = mxOcx.NewResbuf(); ret.AddPoint(stp); ret.AddPoint(ept); ret.AddPoint(dimpt); mxOcx.SetEventRetEx(ret); } } |
移动自定义实体夹点
function MoveGripPointsFun(pCustomEntity, lGridIndex, dOffsetX, dOffsetY) { var sGuid = pCustomEntity.Guid; if (sGuid == "TestMxCustomEntity" ) { if (!pCustomEntity.IsHave( "First" )) return ; var stp = pCustomEntity.GetPoint( "First" ); var ept = pCustomEntity.GetPoint( "BasePoint" ); var dimpt = pCustomEntity.GetPoint( "DimPoint" ); if (lGridIndex == 0) { stp.x = stp.x + dOffsetX; stp.y = stp.y + dOffsetY; pCustomEntity.SetPoint( "First" , stp); } else if (lGridIndex == 1) { ept.x = ept.x + dOffsetX; ept.y = ept.y + dOffsetY; pCustomEntity.SetPoint( "BasePoint" , ept); } else { dimpt.x = dimpt.x + dOffsetX; dimpt.y = dimpt.y + dOffsetY; pCustomEntity.SetPoint( "DimPoint" , dimpt); } mxOcx.SetEventRet(1); } } |
固定参数绘批注
function DoCommentFix() { var comment = mxOcx.NewEntity( "IMxDrawComment" ); comment.Text = "固定参数绘批注" ; comment.TextHeight = 10; var basepos = mxOcx.NewPoint(); basepos.x = 0; basepos.y = 10; var pos = mxOcx.NewPoint(); pos.x = 20; pos.y = 30; //基点 comment.BasePoint = basepos; //位置 comment.Position = pos; var comobj = mxOcx.ObjectIdToObject( mxOcx.DrawEntity(comment) ); comobj.TextStyle = "MyCommentFont" ; mxOcx.ZoomAll(); } |
效果展示:
二、参数绘制矩形标注
js中实现代码说明:
function DoFixRectComment() { var ent = mxOcx.DrawCustomEntity( "TestMxCustomEntity" , "" ); var basept = mxOcx.NewPoint(); basept.x = 100; basept.y = 100; ent.SetPoint( "BasePoint" , basept); ent.SetString( "Text" , "固定矩形标注" ); ent.SetDouble( "TextHeight" , 100); ent.SetLong( "EdgeNumber" , 2); ent.SetDouble( "ShapRadius" , 1); var dimpt = mxOcx.NewPoint(); dimpt.x = 200; dimpt.y = 200; ent.SetPoint( "DimPoint" , dimpt); var frstPt = mxOcx.NewPoint(); frstPt.x = 0; frstPt.y = 0; ent.SetPoint( "First" , frstPt); ent.TextStyle = "MyCommentFont" ; } |
效果展示:
三、参数绘制圆形标注
js中实现代码说明:
function DoFixCircleComment() { var ent = mxOcx.DrawCustomEntity( "TestMxCustomEntity" , "" ); var basept = mxOcx.NewPoint(); basept.x = 100; basept.y = 100; ent.SetPoint( "BasePoint" , basept); ent.SetString( "Text" , "固定参数绘制圆形标注" ); ent.SetDouble( "TextHeight" , 100); //标注位置提示多边形的边数. 小于2不绘制,=2绘制圆,大于2绘制多边形 ent.SetLong( "EdgeNumber" , 2); ent.SetDouble( "ShapRadius" , 1); var dimpt = mxOcx.NewPoint(); dimpt.x = 200; dimpt.y = 200; ent.SetPoint( "DimPoint" , dimpt); var frstPt = mxOcx.NewPoint(); frstPt.x = 0; frstPt.y = 0; ent.SetPoint( "First" , frstPt); ent.TextStyle = "MyCommentFont" ; ent.SetLong( "isCircle" , 1); } |
效果展示:
四、参数绘制圆形云线标注
js中实现代码说明:
function DoCloudCircleCommentFix() { var comment = mxOcx.NewEntity( "IMxDrawComment" ); comment.Text = "固定参数绘圆形云线标注" ; comment.TextHeight = 50; var frstPt = mxOcx.NewPoint(); frstPt.x = -200; frstPt.y = -200; var basepos = mxOcx.NewPoint(); basepos.x = 0; basepos.y = 10; var pos = mxOcx.NewPoint(); pos.x = 200; pos.y = 300; //基点 comment.BasePoint = basepos; //位置 comment.Position = pos; //标注位置提示多边形的半径 comment.ShapRadius = 50; //标注框类型 comment.BoundingBoxType = 5; //标注箭头类型 comment.ArrowType = 2; var points = mxOcx.NewComObject( "IMxDrawPoints" ); points.Add2(frstPt); points.Add2(basepos); //标注框坐标数据 comment.Bounding = points; var comobj = mxOcx.ObjectIdToObject(mxOcx.DrawEntity(comment)); comobj.TextStyle = "MyCommentFont" ; mxOcx.ZoomAll(); } |
效果展示:
五、交互绘制批注
js中实现代码说明:
动态拖放时的绘制事件:
function DynWorldDrawComment( pCustomEntity, pWorldDraw, curPt) { // 得到绘制参数. var sText = pCustomEntity.GetString( "Text" ); var dTextHeight = pCustomEntity.GetDouble( "TextHeight" ); var iEdgeNumber = pCustomEntity.GetLong( "EdgeNumber" ); var dShapRadius = pCustomEntity.GetDouble( "ShapRadius" ); // 创建一个批注对象. var comment = mxOcx.NewEntity( "IMxDrawComment" ); comment.Text = sText; comment.TextHeight = dTextHeight; comment.EdgeNumber = iEdgeNumber; comment.ShapRadius = dShapRadius; comment.basePoint = curPt; comment.Position = curPt; pWorldDraw.TextStyle = "MyCommentFont" ; // 动态绘制. pWorldDraw.DrawEntity(comment); } |
动态绘制文字:
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 DoComment() { // 出来一个对象,让用户输入文字. var winWidth = 440; var winHeight = 140; var winLeft = (screen.width - winWidth) / 2; var winTop = (screen.height - winHeight) / 2 - 20; var str = 'dialogHeight:' + winHeight + 'px;dialogWidth:' + winWidth + 'px;dialogTop:' + winTop + 'px;dialogLeft:' + winLeft + 'px;resizable:yes;center:yes;status:no;' var rt = window.showModalDialog( "Gettext.htm?tmp=" + Math.random(), "输入文字" , str); var txt; if ( typeof (rt) == "undefined" ) { return ; } else { var arr = rt.split( "," ); txt = arr[0]; } // 加入换行操作符\\P //txt = txt + "\\PTEST"; // 创建一个文字样式,用于批注文字字体. mxOcx.AddTextStyle2( "MyCommentFont" , "黑体" ,0.7); // 创建一个与用户交互取点的对象。 var getPt = mxOcx.NewComObject( "IMxDrawUiPrPoint" ); getPt.message = "输入标注插入基点" ; // 开始取第一个点。 if (getPt.go() != 1) return ; // 创建一个与用户交互取点的对象。 var getSecondPt = mxOcx.NewComObject( "IMxDrawUiPrPoint" ); getSecondPt.message = "输入标注位置点" ; getSecondPt.basePoint = getPt.value(); getSecondPt.setUseBasePt( false ); spDrawData = getSecondPt.InitUserDraw( "DrawComment2" ); // 设置动态绘制参数. spDrawData.SetPoint( "BasePoint" , getPt.value()); spDrawData.SetString( "Text" , txt); spDrawData.SetDouble( "TextHeight" , 100); spDrawData.SetLong( "EdgeNumber" , 0); spDrawData.SetDouble( "ShapRadius" , 300); // 开始取第二个点。 if (getSecondPt.go() != 1) return ; var ret = spDrawData.Draw(); // 设置绘制的批注文字样式。 for ( var i = 0; i < ret.Count; i++) { var ent = ret.AtObject(i); ent.TextStyle = "MyCommentFont" ; ent.colorIndex = 4; } } |
六、交互绘制矩形框批注
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; } |
七、交互绘制圆形标注
js中实现代码说明:
动态拖放时的绘制事件:
function DoDynWorldDrawFun(dX,dY,pWorldDraw,pData) { //自定义实体的GUID标识符 var sGuid = pData.Guid; //设置自定义事件的返回值 mxOcx.SetEventRet(0); var curPt = mxOcx.NewPoint(); curPt.x = dX; curPt.y = dY; if (sGuid == "DrawCircle" ) { var pt1 = pData.GetPoint( "pt1" ); var dR = curPt.DistanceTo(pt1) * 0.5; var vec = curPt.SumVector(pt1); vec.Mult(0.5); pt1.Add(vec); pWorldDraw.DrawCircle(pt1.x, pt1.y, dR); } } |
动态拖放时的绘制事件:
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 DoCircleComment() { var getPt = mxOcx.NewComObject( "IMxDrawUiPrPoint" ); getPt.message = "点取第一点" ; if (getPt.go() != 1) { return ; } var frstPt = getPt.value(); if (frstPt == null ) return ; var getPt2 = mxOcx.NewComObject( "IMxDrawUiPrPoint" ); getPt2.message = "指定第二个点" ; var spDrawData = getPt2.InitUserDraw( "DrawCircle" ); spDrawData.SetPoint( "pt1" , frstPt); if (getPt2.go() != 1) { return ; } var secondPt = getPt2.value(); // 出来一个对象,让用户输入文字. var winWidth = 440; var winHeight = 140; var winLeft = (screen.width - winWidth) / 2; var winTop = (screen.height - winHeight) / 2 - 20; var str = 'dialogHeight:' + winHeight + 'px;dialogWidth:' + winWidth + 'px;dialogTop:' + winTop + 'px;dialogLeft:' + winLeft + 'px;resizable:yes;center:yes;status:no;' var rt = window.showModalDialog( "Gettext.htm?tmp=" + Math.random(), "输入文字" , str); var txt; if ( typeof (rt) == "undefined" ) { return ; } else { var arr = rt.split( "," ); txt = arr[0]; } // 加入换行操作符\\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" , 100); 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" , 100); ent.SetLong( "EdgeNumber" , 2); ent.SetDouble( "ShapRadius" , 1); ent.SetPoint( "DimPoint" , getSecondPt.value()); ent.SetPoint( "First" , frstPt); ent.SetLong( "isCircle" , 1); } |
八、交互绘制云线标注
js中实现代码说明:
动态拖放时的绘制事件:
function DoDynWorldDrawFun(dX,dY,pWorldDraw,pData) { //自定义实体的GUID标识符 var sGuid = pData.Guid; //设置自定义事件的返回值 mxOcx.SetEventRet(0); var curPt = mxOcx.NewPoint(); curPt.x = dX; curPt.y = dY; if (sGuid == "DrawCircle" ) { var pt1 = pData.GetPoint( "pt1" ); var dR = curPt.DistanceTo(pt1) * 0.5; var vec = curPt.SumVector(pt1); vec.Mult(0.5); pt1.Add(vec); pWorldDraw.DrawCircle(pt1.x, pt1.y, dR); } } |
动态拖放时的绘制事件:
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 DoCloudLineComment() { var param = mxOcx.NewResbuf(); param.AddString( "" ); param.AddDouble(100); 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 getPt = mxOcx.NewComObject( "IMxDrawUiPrPoint" ); getPt.message = "输入标注插入基点" ; // 设置动态绘制参数. var spDrawData = getPt.InitUserDraw( "DrawComment" ); spDrawData.SetString( "Text" , txt); spDrawData.SetDouble( "TextHeight" , txtH); spDrawData.SetLong( "EdgeNumber" , 0); spDrawData.SetDouble( "ShapRadius" , 300); // 开始取第一个点。 if (getPt.go() != 1) return ; // 创建一个与用户交互取点的对象。 var getSecondPt = mxOcx.NewComObject( "IMxDrawUiPrPoint" ); getSecondPt.message = "输入标注位置点" ; getSecondPt.basePoint = getPt.value(); getSecondPt.setUseBasePt( false ); spDrawData = getSecondPt.InitUserDraw( "DrawComment2" ); // 设置动态绘制参数. spDrawData.SetPoint( "BasePoint" , getPt.value()); spDrawData.SetString( "Text" , txt); spDrawData.SetDouble( "TextHeight" , txtH); spDrawData.SetLong( "EdgeNumber" , 0); spDrawData.SetDouble( "ShapRadius" , 300); // 开始取第二个点。 if (getSecondPt.go() != 1) return ; var ret = spDrawData.Draw(); // 设置绘制的批注文字样式。 for ( var i = 0; i < ret.Count; i++) { var ent = ret.AtObject(i); ent.TextStyle = "MyCommentFont" ; ent.colorIndex = txtColorIndex; if (ent.ObjectName == "McDbComment" ) { ent.BoundingBoxType = 4; ent.ArrowType = 2; ent.ShapRadius = 40; } } } |
九、交互绘制圆形云线标注
js中实现代码说明:
动态拖放时的绘制事件:
function DoDynWorldDrawFun(dX,dY,pWorldDraw,pData) { //自定义实体的GUID标识符 var sGuid = pData.Guid; //设置自定义事件的返回值 mxOcx.SetEventRet(0); var curPt = mxOcx.NewPoint(); curPt.x = dX; curPt.y = dY; if (sGuid == "DrawCircle" ) { var pt1 = pData.GetPoint( "pt1" ); var dR = curPt.DistanceTo(pt1) * 0.5; var vec = curPt.SumVector(pt1); vec.Mult(0.5); pt1.Add(vec); pWorldDraw.DrawCircle(pt1.x, pt1.y, dR); } } |
动态拖放时的绘制事件:
function DynWorldDrawCloudComment(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 frstPt = pCustomEntity.GetPoint( "frstPt" ); // 创建一个批注对象. var comment = mxOcx.NewEntity( "IMxDrawComment" ); comment.Text = sText; comment.TextHeight = dTextHeight; comment.EdgeNumber = iEdgeNumber; comment.ShapRadius = dShapRadius; comment.basePoint = basePoint; comment.Position = curPt; comment.BoundingBoxType = 5; comment.ArrowType = 2; comment.ShapRadius = 40; var points = mxOcx.NewComObject( "IMxDrawPoints" ); //向点数组中增加一个点坐标 points.Add2(frstPt); points.Add2(basePoint); //标注框坐标数据 comment.Bounding = points; var tmpp = mxOcx.NewResbuf(); tmpp.AddLong(1); comment.SetProp( "isAlwaysShowLineWeight" , tmpp); //线重 comment.Lineweight = 25; //实体的CAD颜色索引值属性 comment.colorIndex = 1; // 设置文字样式。 pWorldDraw.TextStyle = "MyCommentFont" ; // 动态绘制. pWorldDraw.DrawEntity(comment); } |
动态绘制文字:
function DoCloudCircleComment() { var getPt = mxOcx.NewComObject( "IMxDrawUiPrPoint" ); getPt.message = "点取第一点" ; if (getPt.go() != 1) { return ; } var frstPt = getPt.value(); if (frstPt == null ) return ; var getPt2 = mxOcx.NewComObject( "IMxDrawUiPrPoint" ); getPt2.message = "指定第二个点" ; var spDrawData = getPt2.InitUserDraw( "DrawCircle" ); spDrawData.SetPoint( "pt1" , frstPt); if (getPt2.go() != 1) { return ; } var secondPt = getPt2.value(); if (secondPt == null ) return ; var param = mxOcx.NewResbuf(); param.AddString( "" ); param.AddDouble(100); 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( "DrawCloudComment" ); // 设置动态绘制参数. spDrawData.SetPoint( "frstPt" , frstPt); 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 ret = spDrawData.Draw(); // 设置绘制的批注文字样式。 var ent = ret.AtObject(0); ent.colorIndex = 1; } |
十、线型标注
主要用到函数说明:
_DMxDrawX::DrawDimRotated
绘制一个线型标注。详细说明如下:
参数 | 说明 |
---|---|
DOUBLE dExtLine1PointX | 输入第一条界线的起始点X值 |
DOUBLE dExtLine1PointY | 输入第一条界线的起始点Y值 |
DOUBLE dExtLine2PointX | 输入第二条界线的起始点X值 |
DOUBLE dExtLine2PointY | 输入第二条界线的起始点Y值 |
DOUBLE dDimLineLocationX | 输入标注线自身上的点X值 |
DOUBLE dDimLineLocationY | 输入标注线自身上的点Y值 |
DOUBLE dRotationAngle | 输入标注的旋转角 |
C#中实现代码说明:
private void DrawDimRotated() { axMxDrawX1.AddDimStyle( "MyDimStyle" , "41,0.18,141,0.09,40,200" , "77,1,271,3" , "" , "" ); axMxDrawX1.DimStyle = "MyDimStyle" ; //把颜色改回黑白色 axMxDrawX1.DrawCADColorIndex = 0; //把线型改成实线 axMxDrawX1.LineType = "" ; //设置线宽 4 axMxDrawX1.LineWidth = 0; //绘制一个线型标注,参数一为输入第一条界线的起始点X值,参数二为输入第一条界线的起始点Y值 // 参数三为输入第二条界线的起始点X值,参数四为输入第二条界线的起始点Y值 // 参数五为输入标注线自身上的点X值,参数六为输入标注线自身上的点Y值 // 参数七为输入标注的旋转角 axMxDrawX1.DrawDimRotated(0, 70, 50, 70, 25, 71, 0); axMxDrawX1.DrawDimRotated(0, 72, 0, 74, 15, 73, 0.771); //把所有的实体都放到当前显示视区 axMxDrawX1.ZoomAll(); //更新视区显示 axMxDrawX1.UpdateDisplay(); } |
效果展示:
js中实现代码说明:
function DrawDimRotated (){ mxOcx.AddDimStyle( "MyDimStyle" , "41,0.18,141,0.09,40,200" , "77,1,271,3" , "" , "" ); mxOcx.DimStyle = "MyDimStyle" ; //把颜色改回黑白色 mxOcx.DrawColor = 0; //把线型改成实线 mxOcx.LineType = "" ; //设置线宽 4 mxOcx.LineWidth = 0; //绘制一个线型标注,参数一为输入第一条界线的起始点X值,参数二为输入第一条界线的起始点Y值 // 参数三为输入第二条界线的起始点X值,参数四为输入第二条界线的起始点Y值 // 参数五为输入标注线自身上的点X值,参数六为输入标注线自身上的点Y值 // 参数七为输入标注的旋转角 mxOcx.DrawDimRotated(0, 70, 50, 70, 25, 71, 0); mxOcx.DrawDimRotated(0, 72, 0, 74, 15, 73, 0.771); //把所有的实体都放到当前显示视区 mxOcx.ZoomAll(); //更新视区显示 mxOcx.UpdateDisplay(); } |
效果展示:
十一、半径标注
主要用到函数说明:
_DMxDrawX::DrawDimRadial
绘制一个半径标注。详细说明如下:
参数 | 说明 |
---|---|
DOUBLE dCenterX | 被标注的曲线的中点X值 |
DOUBLE dCenterY | 被标注的曲线的中点Y值 |
DOUBLE dChordPointX | 被标注的曲线上的点X值 |
DOUBLE dChordPointY | 被标注的曲线上的点Y值 |
DOUBLE dLeaderLength | 输入箭头长度 |
C#中实现代码说明:
private void DrawDimRadial() { axMxDrawX1.AddDimStyle( "MyDimStyle" , "41,0.18,141,0.09,40,200" , "77,1,271,3" , "" , "" ); axMxDrawX1.DimStyle = "MyDimStyle" ; //把颜色改回黑白色 axMxDrawX1.DrawCADColorIndex = 0; //把线型改成实线 axMxDrawX1.LineType = "" ; //设置线宽 4 axMxDrawX1.LineWidth = 0; //绘制一个半径标注 //参数一为被标注的曲线的中点X值 ,参数二为被标注的曲线的中点Y值 //参数三为被标注的曲线上的点X值,参数四为被标注的曲线上的点Y值 //参数五为输入箭头长度 axMxDrawX1.DrawDimRadial(50, 660, 50, 650, 0); //把所有的实体都放到当前显示视区 axMxDrawX1.ZoomAll(); //更新视区显示 axMxDrawX1.UpdateDisplay(); } |
效果展示:
js中实现代码说明:
function DrawDimRadial(){ mxOcx.AddDimStyle( "MyDimStyle" , "41,0.18,141,0.09,40,200" , "77,1,271,3" , "" , "" ); mxOcx.DimStyle = "MyDimStyle" ; //把颜色改回黑白色 mxOcx.DrawColor = 0; //把线型改成实线 mxOcx.LineType = "" ; //设置线宽 4 mxOcx.LineWidth = 0; //绘制一个半径标注 //参数一为被标注的曲线的中点X值 ,参数二为被标注的曲线的中点Y值 //参数三为被标注的曲线上的点X值,参数四为被标注的曲线上的点Y值 //参数五为输入箭头长度 mxOcx.DrawDimRadial (50, 660, 50, 650, 0); //把所有的实体都放到当前显示视区 mxOcx.ZoomAll(); //更新视区显示 mxOcx.UpdateDisplay(); } |
效果展示:
十二、直径标注
主要用到函数说明:
_DMxDrawX::DrawDimDiametric
绘制一个直径标注。详细说明如下:
参数 | 说明 |
---|---|
DOUBLE dChordPointX | 在被标注的曲线上的第一个点X值 |
DOUBLE dChordPointY | 在被标注的曲线上的第一个点Y值 |
DOUBLE dFarChordPointX | 在被标注的曲线上的第二个点X值,这个点与chordPoint直径相对 |
DOUBLE dFarChordPointY | 在被标注的曲线上的第二个点Y值,这个点与chordPoint直径相对 |
DOUBLE dLeaderLength | 输入箭头长度 |
C#中实现代码说明:
private void DrawDimDiametric() { axMxDrawX1.AddDimStyle( "MyDimStyle" , "41,0.18,141,0.09,40,200" , "77,1,271,3" , "" , "" ); axMxDrawX1.DimStyle = "MyDimStyle" ; //把颜色改回黑白色 axMxDrawX1.DrawCADColor = 0; //把线型改成实线 axMxDrawX1.LineType = "" ; //设置线宽 4 axMxDrawX1.LineWidth = 0; //绘制一个直径标注 //参数一为在被标注的曲线上的第一个点X值 ,参数二为在被标注的曲线上的第一个点Y值 //参数三为在被标注的曲线上的第二个点X值,这个点与chordPoint直径相对 //参数四为在被标注的曲线上的第二个点Y值,这个点与chordPoint直径相对 //参数五为输入箭头长度 axMxDrawX1.DrawDimDiametric(50, 570, 60, 600, 100); //把所有的实体都放到当前显示视区 axMxDrawX1.ZoomAll(); //更新视区显示 axMxDrawX1.UpdateDisplay(); } |
效果展示:
js中实现代码说明:
function DrawDimDiametric(){ mxOcx.AddDimStyle( "MyDimStyle" , "41,0.18,141,0.09,40,200" , "77,1,271,3" , "" , "" ); mxOcx.DimStyle = "MyDimStyle" ; //把颜色改回黑白色 mxOcx.DrawColor = 0; //把线型改成实线 mxOcx.LineType = "" ; //设置线宽 4 mxOcx.LineWidth = 0; //绘制一个直径标注 //参数一为在被标注的曲线上的第一个点X值 ,参数二为在被标注的曲线上的第一个点Y值 //参数三为在被标注的曲线上的第二个点X值,这个点与chordPoint直径相对 //参数四为在被标注的曲线上的第二个点Y值,这个点与chordPoint直径相对 //参数五为输入箭头长度 mxOcx.DrawDimDiametric (50, 570, 60, 600, 100); //把所有的实体都放到当前显示视区 mxOcx.ZoomAll(); //更新视区显示 mxOcx.UpdateDisplay(); } |
效果展示:
十三、对齐标注
主要用到函数说明:
_DMxDrawX::DrawDimAligned
绘制一个对齐标注。详细说明如下:
参数 | 说明 |
---|---|
DOUBLE dExtLine1PointX | 第一条界线开始点X值 |
DOUBLE dExtLine1PointY | 第一条界线开始点Y值 |
DOUBLE dExtLine2PointX | 第二条界线开始点X值 |
DOUBLE dExtLine2PointY | 第二条界线开始点Y值 |
DOUBLE dTextPositionX | 标注使用的指定标注线位置的定义点X值 |
DOUBLE dTextPositionY | 标注使用的指定标注线位置的定义点Y值 |
C#中实现代码说明:
private void DrawDimAligned() { axMxDrawX1.AddDimStyle( "MyDimStyle" , "41,0.18,141,0.09,40,200" , "77,1,271,3" , "" , "" ); axMxDrawX1.DimStyle = "MyDimStyle" ; //把颜色改回黑白色 axMxDrawX1.DrawCADColorIndex = 0; //把线型改成实线 axMxDrawX1.LineType = "" ; //设置线宽 4 axMxDrawX1.LineWidth = 0; //绘制一个对齐标注 //参数一为第一条界线开始点X值,参数二为 第一条界线开始点Y值 //参数三为第二条界线开始点X值 //参数四为第二条界线开始点Y值 //参数五为标注使用的指定标注线位置的定义点X值 //参数六为标注使用的指定标注线位置的定义点Y值 axMxDrawX1.DrawDimAligned(0, 40, 3, 45, 15, 46); //把所有的实体都放到当前显示视区 axMxDrawX1.ZoomAll(); //更新视区显示 axMxDrawX1.UpdateDisplay(); } |
效果展示:
js中实现代码说明:
function DrawDimAligned(){ mxOcx.AddDimStyle( "MyDimStyle" , "41,0.18,141,0.09,40,200" , "77,1,271,3" , "" , "" ); mxOcx.DimStyle = "MyDimStyle" ; //把颜色改回黑白色 mxOcx.DrawColor = 0; //把线型改成实线 mxOcx.LineType = "" ; //设置线宽 4 mxOcx.LineWidth = 0; //绘制一个对齐标注 //参数一为第一条界线开始点X值,参数二为 第一条界线开始点Y值 //参数三为第二条界线开始点X值 //参数四为第二条界线开始点Y值 //参数五为标注使用的指定标注线位置的定义点X值 //参数六为标注使用的指定标注线位置的定义点Y值 mxOcx.DrawDimAligned(0, 40, 3, 45, 15, 46); //把所有的实体都放到当前显示视区 mxOcx.ZoomAll(); //更新视区显示 mxOcx.UpdateDisplay(); } |
效果展示:
十四、角度标注
主要用到函数说明:
_DMxDrawX::DrawDimAngular
绘制一个角度标注。详细说明如下:
参数 | 说明 |
---|---|
DOUBLE dAngleVertexX | 角度标注的顶点的X值 |
DOUBLE dAngleVertexY | 角度标注的顶点的Y值 |
DOUBLE dFirstEndPointX | 角度标注第一个参考线上的点X值 |
DOUBLE dFirstEndPointY | 角度标注第一个参考线上的点Y值 |
DOUBLE dSecondEndPointX | 角度标注第二个参考线上的点X值 |
DOUBLE dSecondEndPointY | 角度标注第二个参考线上的点Y值 |
DOUBLE dTextPointX | 文字位置点X值 |
DOUBLE dTextPointY | 文字位置点Y值 |
C#中实现代码说明:
private void DrawDimAngular() { axMxDrawX1.AddDimStyle( "MyDimStyle" , "41,0.18,141,0.09,40,200" , "77,1,271,3" , "" , "" ); axMxDrawX1.DimStyle = "MyDimStyle" ; //把颜色改回黑白色 axMxDrawX1.DrawCADColorIndex = 0; //把线型改成实线 axMxDrawX1.LineType = "" ; //设置线宽 4 axMxDrawX1.LineWidth = 0; //绘制一个角度标注 //参数一为角度标注的顶点的X值,参数二为角度标注的顶点的Y值 //参数三为角度标注第一个参考线上的点X值,参数四为角度标注第一个参考线上的点Y值 //参数五为角度标注第二个参考线上的点X值 //参数六为角度标注第二个参考线上的点Y值 //参数七为文字位置点X值,参数八为文字位置点Y值 axMxDrawX1.DrawDimAngular(500, 5000, 0, 5500, 1000, 5500, 500, 5500); //把所有的实体都放到当前显示视区 axMxDrawX1.ZoomAll(); //更新视区显示 axMxDrawX1.UpdateDisplay(); } |
效果展示:
js中实现代码说明:
function DrawDimAngular(){ mxOcx.AddDimStyle( "MyDimStyle" , "41,0.18,141,0.09,40,200" , "77,1,271,3" , "" , "" ); mxOcx.DimStyle = "MyDimStyle" ; //把颜色改回黑白色 mxOcx.DrawColor = 0; //把线型改成实线 mxOcx.LineType = "" ; //设置线宽 4 mxOcx.LineWidth = 0; //绘制一个角度标注 //参数一为角度标注的顶点的X值,参数二为角度标注的顶点的Y值 //参数三为角度标注第一个参考线上的点X值,参数四为角度标注第一个参考线上的点Y值 //参数五为角度标注第二个参考线上的点X值 //参数六为角度标注第二个参考线上的点Y值 //参数七为文字位置点X值,参数八为文字位置点Y值 mxOcx.DrawDimAngular(500, 5000, 0, 5500, 1000, 5500, 500, 5500); //把所有的实体都放到当前显示视区 mxOcx.ZoomAll(); //更新视区显示 mxOcx.UpdateDisplay(); } |
效果展示:
十五、梦想CAD标注系统变量说明
主要用到函数说明:
IMxDrawDimension::SetDimVarDouble
设置标注属性的实数类型变量值,详细说明如下:
参数 | 说明 |
---|---|
[in] LONG iType | 该属性的类形值 |
dVal | 设置的值 |
IMxDrawDimension::GetDimVarDouble
返回标注属性的实数类型变量值,详细说明如下:
参数 | 说明 |
---|---|
[in] LONG iType | 该属性的类形值 |
例如: 设置标注文字高度,把文字调度设置成100,140是属性类型,它代表文字高度属性。js代码实现如下:
var id = mxOcx.DrawDimAligned(0,4000,300,4500,150,4600); var dim = mxOcx.ObjectIdToObject(id); dim.SetDimVarDouble(140, 100); dim.RecomputeDimBlock( true ); |
下面将详细介绍标注属性的实数类型变量值,详细说明如下:
变量类型值 | 实数值 | 说明 |
---|---|---|
dimaltf | 143 | 控制换算单位乘数 |
dimasz | 41 | 控制尺寸线、引线箭头的大小。并控制钩线的大小 |
dimcen | 141 | 控制由 DIMCENTER、 DIMDIAMETER 和 DIMRADIUS 命令绘制的圆或圆弧的圆心标记和中心线图形 |
dimdle | 46 | 当使用小斜线代替箭头进行标注时,设置尺寸线超出尺寸界线的距离 |
dimdli | 43 | 控制基线标注中尺寸线的间距 |
dimexe | 44 | 指定尺寸界线超出尺寸线的距离 |
dimexo | 42 | 指定尺寸界线偏移原点的距离 |
dimgap | 147 | 当尺寸线分成段以在两段之间放置标注文字时,设置标注文字周围的距离 |
dimlfac | 144 | 设置线性标注测量值的比例因子 |
dimrnd | 45 | 将所有标注距离舍入到指定值 |
dimscale | 40 | 为标注变量(指定尺寸、距离或偏移量)设置全局比例因子。同时还影响leader 命令创建的引线对象的比例 |
dimtfac | 146 | 按照 dimtxt系统变量的设置,相对于标注文字高度给分数值和公差值的文字高度指定比例因子 |
dimtm | 48 | 在 dimtol 系统变量或 dimlim系统变量为开的情况下,为标注文字设置最小(下)偏差 |
dimtp | 47 | 在dimtol 或 dimlim系统变量设置为开的情况下,为标注文字设置最大(上)偏差。dimtp 接受带符号的值 |
dimtsz | 142 | 指定线性标注、半径标注以及直径标注中替代箭头的小斜线尺寸 |
dimtvp | 145 | 控制尺寸线上方或下方标注文字的垂直位置 |
dimtxt | 140 | 指定标注文字的高度,除非当前文字样式具有固定的高度 |
dimaltrnd | 148 | 舍入换算标注单位 |
十六、梦想CAD标注系统变量说明1
主要用到函数说明:
IMxDrawDimension::SetDimVarInt
设置标注属性的整数类型变量值,详细说明如下:
参数 | 说明 |
---|---|
[in] LONG iType | 该属性的类形值 |
iVal | 设置的值 |
IMxDrawDimension::GetDimVarInt
返回标注属性的整数类型变量值,详细说明如下:
参数 | 说明 |
---|---|
[in] LONG iType | 该属性的类形值 |
例如: 设置标注保留一位小数。js代码实现如下:
var id = mxOcx.DrawDimAligned(0,4000,300,4500,150,4600); var dim = mxOcx.ObjectIdToObject(id); dim.SetDimVarInt(271, 1); dim.RecomputeDimBlock( true ); |
下面将详细介绍标注属性的整数类型变量值,详细说明如下:
变量类型值 | 实数值 | 说明 |
---|---|---|
dimadec | 179 | 1.使用 dimdec 设置的小数位数绘制角度标注;0-8使用 dimadec 设置的小数位数绘制角度标注。(前面带dim的变量都是标注相关的变量,在"标注样式"对话框和"属性框"里都可以设置这些参数) |
dimalt | 70 | 控制标注中换算单位的显示:关.禁用换算单位;开:启用换算单位 |
dimaltd | 171 | 控制换算单位中小数位的位数 |
dimalttd | 274 | 设置标注换算单位公差值小数位的位数 |
dimalttz | 286 | 控制是否对公差值作消零处理 |
dimaltu | 273 | 为所有标注样式族(角度标注除外)换算单位设置单位格式 |
dimaltz | 285 | 控制是否对换算单位标注值作消零处理。dimaltz 值为 0- 3 时只影响英尺-英寸标注 |
dimaunit | 275 | 设置角度标注的单位格式:0.十进制度数 1.度/分/秒2.百分度 3.弧度 |
dimclrd | 176 | 为尺寸线、箭头和标注引线指定颜色。同时控制由 leader命令创建的引线颜色 |
dimclre | 177 | 为尺寸界线指定颜色 |
dimclrt | 178 | 为标注文字指定颜色 |
dimdec | 271 | 设置标注主单位显示的小数位位数。精度基于选定的单位或角度格式 |
dimfit | 287 | 旧式,除用于保留脚本的完整性外没有任何影响。dimfit 被dimatfit 系统变量和 dimtmove 系统变量代替 |
dimjust | 280 | 控制标注文字的水平位置 |
dimlim | 72 | 将极限尺寸生成为默认文字 |
dimsah | 173 | 控制尺寸线箭头块的显示 |
dimsd1 | 281 | 控制是否禁止显示第一条尺寸线 |
dimsd2 | 282 | 控制是否禁止显示第二条尺寸线 |
dimse1 | 75 | 控制是否禁止显示第一条尺寸界线:关.不禁止显示尺寸界线开.禁止显示尺寸界线 |
dimse2 | 76 | 控制是否禁止显示第二条尺寸界线:关.不禁止显示尺寸界线开.禁止显示尺寸界线 |
dimsoxd | 175 | 控制是否允许尺寸线绘制到尺寸界线之外:关.不消除尺寸线开.消除尺寸线 |
dimtad | 77 | 控制文字相对尺寸线的垂直位置 |
dimtdec | 272 | 为标注主单位的公差值设置显示的小数位位数 |
dimtih | 73 | 控制所有标注类型(坐标标注除外)的标注文字在尺寸界线内的位置 |
dimtix | 174 | 在尺寸界线之间绘制文字 |
dimtofl | 172 | 控制是否将尺寸线绘制在尺寸界线之间(即使文字放置在尺寸界线之外) |
dimtoh | 74 | 控制标注文字在尺寸界线外的位置:0或关.将文字与尺寸线对齐1或开.水平绘制文字 |
dimtol | 71 | 将公差附在标注文字之后。将 dimtol 设置为“开”,将关闭dimlim 系统变量 |
dimtolj | 283 | 设置公差值相对名词性标注文字的垂直对正方式:0.下 1.中间2.上 |
dimzin | 78 | 控制是否对主单位值作消零处理 |
dimunit | 270 | 旧式,除用于保留脚本的完整性外没有任何影响。dimunit 被dimlunit 和 dimfrac 系统变量代替 |
dimupt | 288 | 控制用户定位文字的选项。0光标仅控制尺寸线的位置1或开光标控制文字以及尺寸线的位置 |
dimtzin | 284 | 控制是否对公差值作消零处理 |
dimfrac | 276 | 在 dimlunit 系统变量设置为:4(建筑)或5(分数)时设置分数格式,0.水平 1.斜 2.不堆叠 |
dimlunit | 277 | 为所有标注类型(除角度标注外)设置单位制 |
dimatfit | 289 | 当尺寸界线的空间不足以同时放下标注文字和箭头时,本系统变量将确定这两者的排列方式 |
dimtmove | 279 | 设置标注文字的移动规则 |
dimazin | 79 | 对角度标注作消零处理 |
dimdsep | 278 | 指定一个单字符作为创建十进制标注时使用的小数分隔符 |
dimlwd | 371 | 指定尺寸线的线宽。其值是标准线宽。-3.bylayer-2.byblock 整数代表百分之一毫米的倍数 |
dimlwe | 372 | 指定尺寸界线的线宽。其值是标准线宽。-3 bylayer -2byblock 整数代表百分之一毫米的倍数 |
十七、梦想CAD标注系统变量说明2
主要用到函数说明:
IMxDrawDimension::SetDimVarObjectId
设置标注属性的对象id类型变量值,详细说明如下:
参数 | 说明 |
---|---|
[in] LONG iType | 该属性的类形值 |
id | 设置的值 |
IMxDrawDimension::GetDimVarObjectId
返回标注属性的对象id类型变量值,详细说明如下:
参数 | 说明 |
---|---|
[in] LONG iType | 该属性的类形值 |
下面将详细介绍标注样式的对象id类型属性值,详细说明如下:
变量类型值 | 实数值 | 说明 |
---|---|---|
dimblk | 342 | 设置尺寸线或引线末端显示的箭头块 |
dimblk1 | 343 | 当 dimsah系统变量打开时,设置尺寸线第一个端点的箭头 |
dimblk2 | 344 | 当 dimsah系统变量打开时,设置尺寸线第二个端点的箭头 |
dimldrblk | 341 | 指定引线箭头的类型。要返回默认值(实心闭合箭头显示),请输入单个句点 (.) |
dimtxsty | 340 | 指定标注的文字样式 |
十八、梦想CAD标注系统变量说明3
主要用到函数说明:
IMxDrawDimension::SetDimVarString
设置标注属性的字符串类型变量值,详细说明如下:
参数 | 说明 |
---|---|
[in] LONG iType | 该属性的类形值 |
pszVal | 设置的值 |
IMxDrawDimension::GetDimVarString
返回标注属性的字符串类型变量值,详细说明如下:
参数 | 说明 |
---|---|
[in] LONG iType | 该属性的类形值 |
下面将详细介绍标注样式的字符串类型属性值,详细说明如下:
变量类型值 | 实数值 | 说明 |
---|---|---|
dimapost | 4 | 为所有标注类型(角度标注除外)的换算标注测量值指定文字前缀或后缀(或两者都指定) |
dimpost | 3 | 指定标注测量值的文字前缀或后缀(或者两者都指定) |
十九、得到图上所有标注的标注文本
// 定义一个构造选择集对象。 MxDrawSelectionSet ss = new MxDrawSelectionSet(); // 选择图上所有对象. ss.AllSelect(); for ( int i = 0; i < ss.Count;i++) { // 遍历到一个对象。 MxDrawEntity ent = (MxDrawEntity) ss.Item(i); if (ent is MxDrawDimension) { // 如果是一个标注对象. MxDrawDimension dim = (MxDrawDimension)ent; // 得到标注对象文本. String sTxt = dim.DimensionText; if (sTxt.Length == 0) { // 如果文本为空,表示,标注文字是自动生成的 // 打碎标注对象,得到里面的文字对象. MxDrawResbuf ret = dim.GetProp( "ExplodeEx" ); for ( int j = 0; j < ret.Count;j++) { MxDrawMcDbObject obj = ret.AtObject(i); if (obj == null ) continue ; if (obj is MxDrawMText) { // 该对象是个多行文本 // 取到文字对象,得到文字符串. MxDrawMText txt = (MxDrawMText)obj; sTxt = txt.Contents; break ; } else if (obj is MxDrawText) { // 该对象是个单行文本 MxDrawText txt = (MxDrawText)obj; sTxt = txt.TextString; break ; } } } // 显示得到文字内容 MessageBox.Show(sTxt); // 显示对象的线型 MessageBox.Show(ent.LineType); } } |
主要用到函数说明:
IMxDrawSelectionSet::Select2
构造选择集。详细说明如下:
参数 | 说明 |
---|---|
[in] MCAD_McSelect Mode | 构造选择集方式 |
[in] VARIANT point1 | 构造择择集时需要使用到的点对象 |
[in] VARIANT point2 | 构造择择集时需要使用到的点对象 |
[in,optional] VARIANT filterType | 构造选择集的过滤数据的类型 |
[in,optional] VARIANT filterData | 构造选择集的过滤数据 |
可以取如下值 | mcSelectionSetWindow = 0, mcSelectionSetCrossing = 1, mcSelectionSetFence = 2, mcSelectionSetPrevious = 3, mcSelectionSetLast = 4, mcSelectionSetAll = 5, 选择图面上的所有实体 mcSelectionSetWindowPolygon = 6, mcSelectionSetCrossingPolygon = 7, mcSelectionSetUserSelect = 8 mcSelectionImpliedSelectSelect = 9,_I 返回当前图上已经选择的实体 |
js中使用如下:
function GetAllComment() { var ss = mxOcx.NewSelectionSet(); var spFilte = mxOcx.NewResbuf(); // 把批注对象,当着过滤条件. spFilte.AddStringEx( "MxComment,MxDrawXCustomEntity" , 5020); // 得到图上,所有批注对象. ss.Select2(5, null , null , null ,spFilte); // 遍历每个文字. var bFind = false ; for ( var i = 0; i < ss.Count; i++) { var ent = ss.Item(i); if (ent == null ) continue ; if (ent.ObjectName == "McDbComment" ) { // 得到批注对象。 mxOcx.Prompt(ent.Text); var mtxt = mxOcx.NewEntity( "IMxDrawMText" ); // 把多行文字,变成单行文字,去掉里面的控制符。 mtxt.Contents = ent.Text; // 打碎对像. var ret = mtxt.GetProp( "ExplodeEx" ); // 得到打碎后对像里面的文字。 var s; for ( var j = 0; j < ret.Count;j++) { var obj = ret.AtObject(j); if (obj == null ) continue ; if (s == null ){ // s = obj.TextString; } else { var s = '' ; s += obj.TextString; } } mxOcx.Prompt(s); // mxOcx.Prompt(ent.Position.x.toString()); mxOcx.Prompt(ent.Position.y.toString()); mxOcx.Prompt(ent.BasePoint.x.toString()); mxOcx.Prompt(ent.BasePoint.y.toString()); } else if (ent.ObjectName == "MxDrawXCustomEntity" ) { // 得到批注对象。 var stp = ent.GetPoint( "First" ); var ept = ent.GetPoint( "BasePoint" ); var txt = ent.GetString( "Text" ); mxOcx.Prompt(txt); // mxOcx.Prompt(stp.x.toString()); mxOcx.Prompt(stp.y.toString()); mxOcx.Prompt(ept.x.toString()); mxOcx.Prompt(ept.y.toString()); } } } |
二十、修一个标注长度,标注的直线也跟着变化
MxDrawUiPrEntity getEntity = new MxDrawUiPrEntity(); getEntity.message = "选择实体" ; // 设置选择过滤条件. MxDrawResbuf selFilter = new MxDrawResbuf(); // 5020是实体类型的DXF组码. DIM是类型。 selFilter.AddStringEx( "ALIGNEDDIMENSION" ,5020); getEntity.setFilter(selFilter); // 开始选择实体。 if (getEntity.go() != MCAD_McUiPrStatus.mcOk) return ; // 得到选择的实体. MxDrawEntity ent = getEntity.Entity(); if (ent == null ) return ; if (!(ent is MxDrawDimAligned) ) { return ; } // 得到选择的标注. MxDrawDimAligned dimAligned = (MxDrawDimAligned)ent; // 尺寸标注改成60 double dNewDist = 60.0; // 当前标注的两个点坐标。 MxDrawPoint pt1 = dimAligned.XLine1Point; MxDrawPoint pt2 = dimAligned.XLine2Point; // 计算pt1到pt2的向量. MxDrawVector3d vec = pt2.SumVector(pt1); // 把向量单位化 vec.Normalize(); //把向长度变成新距离. vec.Mult(dNewDist); // 算出在新距离下的新的坐标点。 MxDrawPoint newPt = new MxDrawPoint(); newPt.x = pt1.x; newPt.y = pt1.y; newPt.Add(vec); // 修改尺寸标注. dimAligned.XLine2Point = newPt; dimAligned.RecomputeDimBlock( true ); // 查找尺寸标的直线段。并修改它。 MxDrawResbuf filter = new MxDrawResbuf(); filter.AddStringEx( "LINE" ,5020); MxDrawSelectionSet ss = new MxDrawSelectionSet(); // 得到标注的开始点上的实体. // 搜索精度。 double dTol = 10; //axMxDrawX1.ViewLongToDocCoord(3); MxDrawPoint selPt1 = new MxDrawPoint(); MxDrawPoint selPt2 = new MxDrawPoint(); selPt1.x = pt1.x - dTol; selPt1.y = pt1.y - dTol; selPt2.x = pt1.x + dTol; selPt2.y = pt1.y + dTol; ss.Select(MCAD_McSelect.mcSelectionSetCrossing, selPt1, selPt2, filter); // 可能会得到多个实体,遍历所有实体,找到标注的直线对象。 for ( int i = 0; i < ss.Count;i++) { MxDrawEntity findEnt = ss.Item(i); if (!(findEnt is MxDrawLine)) { continue ; } MxDrawLine line = (MxDrawLine)findEnt; // 得到直线的两个点坐标。 MxDrawPoint sPt = line.StartPoint; MxDrawPoint ePt = line.EndPoint; double dDis1 = sPt.DistanceTo(pt1); double dDis2 = ePt.DistanceTo(pt1); if (dDis1 > dDis2) { if (dDis2 > dTol) continue ; if (sPt.DistanceTo(pt2) > dTol) continue ; // 直线的开始点,在pt2附近 line.StartPoint = newPt; break ; } else { if (dDis1 > dTol) continue ; if (ePt.DistanceTo(pt2) > dTol) continue ; // 直线的结束点,在pt2附近 line.EndPoint = newPt; break ; } } axMxDrawX1.ZoomAll(); |
二十一、删除选择的标注
主要用到函数说明:
IMxDrawSelectionSet::Select2
构造选择集。详细说明如下:
参数 | 说明 |
---|---|
[in] MCAD_McSelect Mode | 构造选择集方式 |
[in] VARIANT point1 | 构造择择集时需要使用到的点对象 |
[in] VARIANT point2 | 构造择择集时需要使用到的点对象 |
[in,optional] VARIANT filterType | 构造选择集的过滤数据的类型 |
[in,optional] VARIANT filterData | 构造选择集的过滤数据 |
可以取如下值 | mcSelectionSetWindow = 0, mcSelectionSetCrossing = 1, mcSelectionSetFence = 2, mcSelectionSetPrevious = 3, mcSelectionSetLast = 4, mcSelectionSetAll = 5, 选择图面上的所有实体 mcSelectionSetWindowPolygon = 6, mcSelectionSetCrossingPolygon = 7, mcSelectionSetUserSelect = 8 mcSelectionImpliedSelectSelect = 9,_I 返回当前图上已经选择的实体 |
js中使用如下:
function DelComment() { var ss = mxOcx.NewSelectionSet(); var spFilte = mxOcx.NewResbuf(); // 把批注对象,当着过滤条件. spFilte.AddStringEx( "MxComment,MxDrawXCustomEntity" , 5020); // 与用户交互,得到批注. ss.Select2(8, null , null , null ,spFilte); // 遍历每个文字. var bFind = false ; for ( var i = 0; i < ss.Count; i++) { var ent = ss.Item(i); if (ent == null ) continue ; if (ent.ObjectName == "McDbComment" || ent.ObjectName == "MxDrawXCustomEntity" ) { // 得到批注对象。 ent.Erase(); } } } |
二十二、绘一个文字自动剧中的标注
var MxDrawDatabase1 = mxOcx.GetDatabase(); MxDrawDatabase1.LinetypeScale = 15; var curDimRecord = MxDrawDatabase1.GetDimStyleTable().GetAt(MxDrawDatabase1.CurrentlyDimstyleName, false ); var curTextRecord = MxDrawDatabase1.GetTextStyleTable().GetAt(MxDrawDatabase1.CurrentlyTextStyle, false ); curDimRecord.SetDimVarDouble(40, 1000); //设置缩放比例Dimscale curDimRecord.SetDimVarInt(271, 0); //设置两位小数DimDle curDimRecord.SetDimVarInt(173, 1); //设置需要显示符号 curDimRecord.SetDimVarInt(289, 3); curDimRecord.SetDimVarInt(174, 1); curDimRecord.SetDimVarString(342, "_ARCHTICK" ); //设置建筑标记 curTextRecord.bigFontFileName = "gbcbig.shx" ; curTextRecord.fileName = "tssdeng.shx" ; curTextRecord.Name = "默认样式" ; var dimID = mxOcx.DrawDimRotated(100, 100, 100, 200, 200, 150, 0); var Dim = mxOcx.ObjectIdToObject(dimID); Dim.DimensionText = "12345" ; Dim.SetDimVarInt(173, 1); //设置需要显示符号 Dim.SetDimVarInt(289, 0); Dim.SetDimVarInt(174, 1); Dim.SetDimVarString(342, "_ARCHTICK" ); //设置建筑标记 var textPos = mxOcx.NewPoint(); textPos.x = 200; textPos.y = 150; Dim.TextPosition = textPos; Dim.UsingDefaultTextPosition = false ; Dim.RecomputeDimBlock( true ); mxOcx.UpdateDisplay(); mxOcx.ZoomAll(); |