- UID
- 785283
- 积分
- 102
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2019-3-20
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
/// <summary>
/// 实体镜像操作
/// </summary>
/// <param name="entList"实体></param>
public static void TurnMirror(List<Entity> entList)
{
Point3d pt1 = new Point3d();//镜像线两点
Point3d pt2 = new Point3d();//镜像线两点
List<DBText> txts = new List<DBText>();//文本
Point3d ptMax;//文本包围框右上顶点
Point3d ptMin;//文本包围框左下顶点
Point3d ptZ;//文本包围框中心点---二次镜像第一点
Vector3d mVec;//镜像线方向
Point3d ptZs;//文本包围框中心点---二次镜像第二点
foreach (Entity ent in entList)
{
if (ent.GetType() == typeof(Line))//判定是否为直线
{
Line bLine = (Line)ent;
pt1 = bLine.StartPoint;
pt2 = bLine.EndPoint;
}
if (ent.GetType() == typeof(Polyline))//判定是否为文本
{
Polyline pLine = (Polyline)ent;
pt1 = pLine.GetPoint3dAt(pLine.NumberOfVertices - 1);
pt2 = pLine.GetPoint3dAt(pLine.NumberOfVertices - 2);
}
if (ent.GetType() == typeof(DBText))//判定是否为文本
{
txts.Add((DBText)ent);
}
}
//文字镜像不翻转,需设置MIRRTEXT系统变量为0(默认1)
int nMaxSort = Convert.ToInt32(Application.GetSystemVariable("MIRRTEXT"));
if (nMaxSort == 1)
{
Application.SetSystemVariable("MIRRTEXT", 0);
}
//镜像
foreach (var txt in txts)
{
txt.TransformBy(Matrix3d.Mirroring(new Line3d(pt1, pt2)));
//再次镜像---文字镜像后翻转,需再次镜像调整(此处是BUG?开发文档里说明调整MIRRTEXT变量为0可以自动归正,然而并没有)
ptMax = txt.GeometricExtents.MaxPoint;
ptMin = txt.GeometricExtents.MinPoint;
ptZ = new Point3d(ptMin.X + (ptMax.X - ptMin.X) / 2, ptMin.Y + (ptMax.Y - ptMin.Y) / 2, 0);
mVec = pt1.GetVectorTo(pt2);
ptZs = ptZ.Add(mVec.GetNormal() * 10);
txt.TransformBy(Matrix3d.Mirroring(new Line3d(ptZ, ptZs)));
}
} |
|