效果如下:
(使用方法:命令行输入 “netload” 加载此dll插件,然后输入“xx”运行,选择文件夹即可。)
部分代码如下:
#if DEBUG
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.GraphicsInterface;
using IFoxCAD.Cad;
using System.Diagnostics;
using System.Reflection;
using System.Windows;
using System.Windows.Shapes;
namespace IfoxDemo
{
public class Class1
{
[CommandMethod("XX")]
public void Jigworlddraw()
{
//Debugger.Break();
double dist = 5;//横线的长度
double textHeight = 1;
double vertDist = textHeight * 1.2;//坐标标注距离横向的长度
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
Database db = HostApplicationServices.WorkingDatabase;
PromptPointResult ppr = ed.GetPoint("\n请指定坐标点:\n");
if (ppr.Status != PromptStatus.OK)
{
return;
}
Point3d pointStart = ppr.Value;//获取第一个点
var m_Polyline = new Polyline();//定义线
m_Polyline.AddVertexAt(0, new Point2d(pointStart.X, pointStart.Y), 0, 0, 0);
double mpwX = pointStart.X;
double mpwY= pointStart.Y;
m_Polyline.AddVertexAt(1, new Point2d(mpwX, mpwY), 0, 0, 0);
m_Polyline.AddVertexAt(2, new Point2d(mpwX, mpwY), 0, 0, 0);
DBText textx = new DBText()//定义x坐标
{
Height = textHeight,
TextString = Math.Round(pointStart.X, 3).ToString(),
//Position = new Point3d(mpwX + dist / 2, mpwY + vertDist, 0)
};
DBText texty = new DBText()//定义y坐标
{
Height = textHeight,
TextString = Math.Round(pointStart.Y, 3).ToString(),
//Position = new Point3d(mpwX + dist / 2, mpwY - vertDist, 0)
};
Entity[] allentity = new Entity[3] { m_Polyline ,textx,texty};
using var jig = new JigEx((mpw, queue) =>
{
mpwX = mpw.X;
mpwY = mpw.Y;
m_Polyline.SetPointAt(1,new Point2d (mpw.X,mpw.Y));
if (mpw.X >= pointStart.X)
{
m_Polyline.SetPointAt(2, new Point2d(mpw.X + dist, mpw.Y));
textx.Position = new Point3d(mpwX + dist / 2, mpwY + vertDist, 0);
texty.Position = new Point3d(mpwX + dist / 2, mpwY - vertDist, 0);
textx.HorizontalMode = TextHorizontalMode.TextMid;
textx.VerticalMode = TextVerticalMode.TextVerticalMid;
texty.HorizontalMode = TextHorizontalMode.TextMid;
texty.VerticalMode = TextVerticalMode.TextVerticalMid;
textx.AlignmentPoint = textx.Position;
texty.AlignmentPoint = texty.Position;
textx.AdjustAlignment(db);
texty.AdjustAlignment(db);
}
else
{
m_Polyline.SetPointAt(2, new Point2d(mpw.X - dist, mpw.Y));
textx.Position = new Point3d(mpw.X - dist / 2, mpw.Y + vertDist, 0);
texty.Position = new Point3d(mpw.X - dist / 2, mpw.Y - vertDist, 0);
textx.HorizontalMode = TextHorizontalMode.TextMid;
textx.VerticalMode = TextVerticalMode.TextVerticalMid;
texty.HorizontalMode = TextHorizontalMode.TextMid;
texty.VerticalMode = TextVerticalMode.TextVerticalMid;
textx.AlignmentPoint = textx.Position;
texty.AlignmentPoint = texty.Position;
textx.AdjustAlignment(db);
texty.AdjustAlignment(db);
}
});
jig.DatabaseEntityDraw(worlddraw => worlddraw.Geometry.Draw(allentity));
jig.SetOptions("\n选注记点");
var r1 = jig.Drag();
if (r1.Status != PromptStatus.OK)
return;
using var tr = new DBTrans();
tr.CurrentSpace.AddEntity(allentity);
}
[CommandMethod("XXX")]
public void Jig()
{
double dist = 3;//横线的长度
double textHeight = 1;
double vertDist = textHeight*1.2;//坐标标注距离横向的长度
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
Database db = HostApplicationServices.WorkingDatabase;
PromptPointResult ppr = ed.GetPoint("\n请指定坐标点:\n");
if (ppr.Status != PromptStatus.OK)
{
return;
}
Point3d pointStart = ppr.Value;
using var jig = new JigEx((mpw, queue) =>
{
var m_Polyline = new Polyline();
m_Polyline.AddVertexAt(0, new Point2d(pointStart.X, pointStart.Y), 0, 0, 0);
// 初始时,第二和第三个点设置为与第一个点相同(将在Sampler中更新)
m_Polyline.AddVertexAt(1, new Point2d(mpw.X+0.1, mpw.Y+0.1), 0, 0, 0);
DBText textx = new DBText()
{ Height = textHeight, TextString = Math.Round(pointStart.X, 3).ToString(),
//HorizontalMode = TextHorizontalMode.TextMid,VerticalMode = TextVerticalMode.TextVerticalMid
};
DBText texty = new DBText()
{ Height = textHeight, TextString = Math.Round(pointStart.Y, 3).ToString(),
//HorizontalMode = TextHorizontalMode.TextMid,VerticalMode = TextVerticalMode.TextVerticalMid
};
// textx.AdjustAlignment(db);
//texty.AdjustAlignment(db);
if (mpw.X>= pointStart.X)
{
m_Polyline.AddVertexAt(2, new Point2d(mpw.X+ dist, mpw.Y+0.1), 0, 0, 0);
textx.Position = new Point3d(mpw.X + dist / 2, mpw.Y + vertDist, 0);
texty.Position = new Point3d(mpw.X + dist / 2, mpw.Y - vertDist, 0);
textx.HorizontalMode = TextHorizontalMode.TextMid;
textx.VerticalMode = TextVerticalMode.TextVerticalMid;
texty.HorizontalMode = TextHorizontalMode.TextMid;
texty.VerticalMode = TextVerticalMode.TextVerticalMid;
textx.AlignmentPoint = textx.Position;
texty.AlignmentPoint = texty.Position;
textx.AdjustAlignment(db);
texty.AdjustAlignment(db);
}
else
{
m_Polyline.AddVertexAt(2, new Point2d(mpw.X - dist, mpw.Y+0.1), 0, 0, 0);
textx.Position = new Point3d(mpw.X - dist / 2, mpw.Y + vertDist, 0);
texty.Position = new Point3d(mpw.X - dist / 2, mpw.Y - vertDist, 0);
textx.HorizontalMode = TextHorizontalMode.TextMid;
textx.VerticalMode = TextVerticalMode.TextVerticalMid;
texty.HorizontalMode = TextHorizontalMode.TextMid;
texty.VerticalMode = TextVerticalMode.TextVerticalMid;
textx.AlignmentPoint = textx.Position;
texty.AlignmentPoint = texty.Position;
textx.AdjustAlignment(db);
texty.AdjustAlignment(db);
}
m_Polyline.Closed = false; // 确保多段线不是闭合的
queue.Enqueue(m_Polyline);
queue.Enqueue(textx);
queue.Enqueue(texty);
});
jig.SetOptions("\n选下一个点");
var r1 = jig.Drag();
if (r1.Status != PromptStatus.OK)
return;
using var tr = new DBTrans();
tr.CurrentSpace.AddEntity(jig.Entities);
}
}
}
#endif
global using System;
global using IfoxDemo;
global using System.Collections.Generic;
global using System.Linq;
global using System.Text;
global using System.Threading.Tasks;
global using Autodesk.AutoCAD.ApplicationServices;
global using Autodesk.AutoCAD.EditorInput;
global using Autodesk.AutoCAD.Runtime;
global using Autodesk.AutoCAD.Geometry;
global using Autodesk.AutoCAD.DatabaseServices;
global using IFoxCAD.Cad;
global using Application = Autodesk.AutoCAD.ApplicationServices.Application;
global using Polyline = Autodesk.AutoCAD.DatabaseServices.Polyline;
namespace IfoxDemo
{
public class GlobalUsing
{
}
}