using Autodesk.Revit.DB; using Autodesk.Revit.UI; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Text; using System.Runtime.CompilerServices; using System.Windows.Forms; using Color = System.Drawing.Color; namespace HYJig { public class XLineJig : XUiJigBase, IDisposable { public XLineJig(UIDocument uiDoc) : base(uiDoc) { this.JigStage = XLineJig.EStage.eNoOper; this.ResetPoint = XUiJigBase.EResetPoint.eNoOper; this.DragLineColor = Color.FromArgb(175, 222, 239); this.PointAlignType = XLineJig.AlignType.eMiddle; this.MutilLineDist = new List(); this.DrawEndLine = false; this.DrawSize = false; int height = Screen.PrimaryScreen.Bounds.Height; XLineJig.SizeOffset = (int)(0.006 * (double)height); XLineJig.BorderLength = (int)(0.04 * (double)height); XLineJig.SizeFont = new Font("Arial", 2.5f * (float)XLineJig.SizeOffset, GraphicsUnit.Pixel); XLineJig.TextFormat = new StringFormat(StringFormatFlags.NoClip); XLineJig.TextFormat.Alignment = StringAlignment.Center; XLineJig.TextFormat.LineAlignment = StringAlignment.Center; XLineJig.SizeLineColor = Color.FromArgb(126, 163, 255); XLineJig.SizeTextBrush = new SolidBrush(base.JigPen.Color); this.OnMouseLeaveFormClientEvent = (WndMsgManager.MouseLeaveFormClientEvnetHandler)Delegate.Combine(this.OnMouseLeaveFormClientEvent, new WndMsgManager.MouseLeaveFormClientEvnetHandler(this.method_13)); this.OnMouseMoveIntoFormClientEvent = (WndMsgManager.MouseMoveIntoFormClientEvnetHandler)Delegate.Combine(this.OnMouseMoveIntoFormClientEvent, new WndMsgManager.MouseMoveIntoFormClientEvnetHandler(this.method_14)); } public XLineJig(UIDocument uiDoc, System.Windows.Forms.Form userForm) : base(uiDoc) { this.JigStage = XLineJig.EStage.eNoOper; this.ResetPoint = XUiJigBase.EResetPoint.eNoOper; this.DragLineColor = Color.FromArgb(175, 222, 239); this.PointAlignType = XLineJig.AlignType.eMiddle; this.MutilLineDist = new List(); this.DrawEndLine = false; this.DrawSize = false; int height = Screen.PrimaryScreen.Bounds.Height; XLineJig.SizeOffset = (int)(0.006 * (double)height); XLineJig.BorderLength = (int)(0.04 * (double)height); XLineJig.SizeFont = new Font("Arial", 2.5f * (float)XLineJig.SizeOffset, GraphicsUnit.Pixel); XLineJig.TextFormat = new StringFormat(StringFormatFlags.NoClip); XLineJig.TextFormat.Alignment = StringAlignment.Center; XLineJig.TextFormat.LineAlignment = StringAlignment.Center; XLineJig.SizeLineColor = Color.FromArgb(126, 163, 255); XLineJig.SizeTextBrush = new SolidBrush(base.JigPen.Color); this.OnMouseLeaveFormClientEvent = (WndMsgManager.MouseLeaveFormClientEvnetHandler)Delegate.Combine(this.OnMouseLeaveFormClientEvent, new WndMsgManager.MouseLeaveFormClientEvnetHandler(this.method_13)); this.OnMouseMoveIntoFormClientEvent = (WndMsgManager.MouseMoveIntoFormClientEvnetHandler)Delegate.Combine(this.OnMouseMoveIntoFormClientEvent, new WndMsgManager.MouseMoveIntoFormClientEvnetHandler(this.method_14)); this.m_UserForm = userForm; } public new void Dispose() { base.Dispose(); XLineJig.SizeFont.Dispose(); XLineJig.TextFormat.Dispose(); XLineJig.SizeTextBrush.Dispose(); this.OnMouseLeaveFormClientEvent = (WndMsgManager.MouseLeaveFormClientEvnetHandler)Delegate.Remove(this.OnMouseLeaveFormClientEvent, new WndMsgManager.MouseLeaveFormClientEvnetHandler(this.method_13)); this.OnMouseMoveIntoFormClientEvent = (WndMsgManager.MouseMoveIntoFormClientEvnetHandler)Delegate.Remove(this.OnMouseMoveIntoFormClientEvent, new WndMsgManager.MouseMoveIntoFormClientEvnetHandler(this.method_14)); } private void method_13(object sender, EventArgs e) { if (this.m_UserForm == null) { } } private void method_14(object sender, EventArgs e) { if (this.m_UserForm == null) { } } public XYZ PickStartPoint(string strPrompt = "请确定直线起点:") { try { this.JigStage = XLineJig.EStage.eStartPt; this.StartPoint = base.UiDoc.Selection.PickPoint(strPrompt); } catch { this.StartPoint = null; } this.JigStage = XLineJig.EStage.eNoOper; return this.StartPoint; } public XYZ PickEndPoint(XYZ ptStart, string strPrompt = "请确定直线终点:") { try { this.JigStage = XLineJig.EStage.eEndPt; this.StartPoint = ptStart; this.EndPoint = base.UiDoc.Selection.PickPoint(strPrompt); this.EndPoint = this.GetResetPoint(this.StartPoint, this.EndPoint); } catch { if (this.m_prompDlg != null && base.CmdEndType == XUiJigBase.ECmdEndType.eEnter) { base.CmdEndType = XUiJigBase.ECmdEndType.eOther; XYZ xyz = base.Client2Revit(this.m_ptCur); Line line = Line.CreateUnbound(xyz, base.UiDoc.ActiveView.ViewDirection); xyz = line.Project(this.StartPoint).XYZPoint; xyz = this.GetResetPoint(this.StartPoint, xyz); string inputValue = this.m_prompDlg.GetInputValue(); double num = Convert.ToDouble(inputValue) / 304.8; XYZ xyz2 = (xyz - this.StartPoint).Normalize(); this.EndPoint = this.StartPoint + xyz2 * num; } else { this.EndPoint = null; } } this.JigStage = XLineJig.EStage.eNoOper; return this.EndPoint; } public XYZ GetResetPoint(XYZ ptBase, XYZ ptUser) { XYZ xyz = ptUser; if (this.ResetPoint == XUiJigBase.EResetPoint.eByAngle) { xyz = JigFuncs.GetProjectPoint(base.UiDoc, ptUser, ptBase, this.LineAngle); } else if (this.ResetPoint == XUiJigBase.EResetPoint.eByOrtho) { xyz = JigFuncs.GetOrthoPoint(base.UiDoc, ptUser, ptBase); } else if (this.ResetPoint == XUiJigBase.EResetPoint.eByAxis) { XYZ axisPoint = JigFuncs.GetAxisPoint(base.UiDoc, ptUser, ptBase); if (axisPoint != null) { xyz = axisPoint; } } return xyz; } public override void Draw(PaintEventArgs paintEventArgs) { base.Draw(paintEventArgs); if (!this.m_ptCur.IsEmpty && this.JigStage == XLineJig.EStage.eEndPt) { XYZ xyz = base.Client2Revit(this.m_ptCur); if (this.ResetPoint == XUiJigBase.EResetPoint.eByAngle) { xyz = JigFuncs.GetProjectPoint(base.UiDoc, xyz, this.StartPoint, this.LineAngle); this.m_ptCur = base.Revit2Client(xyz); } else if (this.ResetPoint == XUiJigBase.EResetPoint.eByOrtho) { xyz = JigFuncs.GetOrthoPoint(base.UiDoc, xyz, this.StartPoint); this.m_ptCur = base.Revit2Client(xyz); } else if (this.ResetPoint == XUiJigBase.EResetPoint.eByAxis) { XYZ axisPoint = JigFuncs.GetAxisPoint(base.UiDoc, xyz, this.StartPoint); if (axisPoint != null) { xyz = axisPoint; this.m_ptCur = base.Revit2Client(xyz); base.DrawAxisLine(paintEventArgs.Graphics, this.StartPoint, xyz); } } XGraphics xgraphics = new XGraphics(paintEventArgs.Graphics, base.JigPen); Color color = xgraphics.m_pen.Color; xgraphics.m_pen.Color = this.DragLineColor; if (this.MutilLineDist.Count < 1) { XLine2D xline2D = new XLine2D(base.Revit2Client(this.StartPoint), this.m_ptCur); xline2D.Draw(xgraphics); if (this.DrawSize) { double num = this.StartPoint.DistanceTo(xyz); string text = string.Format("{0:F1}", num * 304.8); XLineJig.DrawLineSize(base.Revit2Client(this.StartPoint), base.Revit2Client(xyz), text, xgraphics); } } else { this.DrawMutilLine(this.StartPoint, xyz, xgraphics); } xgraphics.m_pen.Color = color; } } public override List CreateCurves() { List list = new List(); try { if (this.StartPoint != null && this.EndPoint != null) { if (this.MutilLineDist.Count < 1) { list.Add(Line.CreateBound(this.StartPoint, this.EndPoint)); } else { XYZ xyz = this.StartPoint; XYZ xyz2 = this.EndPoint; XYZ xyz3 = (xyz2 - xyz).Normalize(); Transform transform = Transform.CreateRotation(base.UiDoc.ActiveView.ViewDirection, -1.5707963267948966); XYZ xyz4 = transform.OfVector(xyz3); double num = 0.0; foreach (double num2 in this.MutilLineDist) { num += num2; } double num3 = 0.0; if (this.PointAlignType == XLineJig.AlignType.eRight) { num3 = num; } else if (this.PointAlignType == XLineJig.AlignType.eMiddle) { num3 = num / 2.0; } xyz -= xyz4 * num3; xyz2 -= xyz4 * num3; if (this.DrawEndLine) { XYZ xyz5 = xyz + xyz4 * num; XYZ xyz6 = xyz2 + xyz4 * num; list.Add(Line.CreateBound(xyz, xyz5)); list.Add(Line.CreateBound(xyz2, xyz6)); } list.Add(Line.CreateBound(xyz, xyz2)); foreach (double num4 in this.MutilLineDist) { xyz += xyz4 * num4; xyz2 += xyz4 * num4; list.Add(Line.CreateBound(xyz, xyz2)); } } } } catch { } return list; } public double LineAngle { get; set; } public XYZ StartPoint { get; set; } public XYZ EndPoint { get; set; } public XLineJig.EStage JigStage { get; set; } public XUiJigBase.EResetPoint ResetPoint { get; set; } public Color DragLineColor { get; set; } public XLineJig.AlignType PointAlignType { get; set; } public List MutilLineDist { get; set; } public void DrawMutilLine(XYZ ptBaseS, XYZ ptBaseE, XGraphics graphics) { Transform transform = Transform.CreateRotation(base.UiDoc.ActiveView.ViewDirection, -1.5707963267948966); XYZ xyz = (ptBaseE - ptBaseS).Normalize(); XYZ xyz2 = transform.OfVector(xyz); double num = 0.0; foreach (double num2 in this.MutilLineDist) { num += num2; } double num3 = 0.0; if (this.PointAlignType == XLineJig.AlignType.eRight) { num3 = num; } else if (this.PointAlignType == XLineJig.AlignType.eMiddle) { num3 = num / 2.0; } ptBaseS -= xyz2 * num3; ptBaseE -= xyz2 * num3; if (this.DrawEndLine) { XYZ xyz3 = ptBaseS + xyz2 * num; XYZ xyz4 = ptBaseE + xyz2 * num; XLine2D xline2D = new XLine2D(base.Revit2Client(ptBaseS), base.Revit2Client(xyz3)); XLine2D xline2D2 = new XLine2D(base.Revit2Client(ptBaseE), base.Revit2Client(xyz4)); xline2D.Draw(graphics); xline2D2.Draw(graphics); } XLine2D xline2D3 = new XLine2D(base.Revit2Client(ptBaseS), base.Revit2Client(ptBaseE)); xline2D3.Draw(graphics); foreach (double num4 in this.MutilLineDist) { ptBaseS += xyz2 * num4; ptBaseE += xyz2 * num4; xline2D3 = new XLine2D(base.Revit2Client(ptBaseS), base.Revit2Client(ptBaseE)); xline2D3.Draw(graphics); } } public bool DrawEndLine { get; set; } public bool DrawSize { get; set; } public static int SizeOffset { get; set; } public static int BorderLength { get; set; } public static Font SizeFont { get; set; } public static StringFormat TextFormat { get; set; } public static SolidBrush SizeTextBrush { get; set; } public static Color SizeLineColor { get; set; } public static void DrawLineSize(Point ptStart, Point ptEnd, string strSizeText, XGraphics graphics) { XUiJigBase.SortTwoPoint(ref ptStart, ref ptEnd); if (XUiJigBase.TwoPointDist(ptStart, ptEnd) >= 10) { double num = XUiJigBase.TwoPointAngle(ptStart, ptEnd); double num2 = num + 1.5707963267948966; Color color = graphics.m_pen.Color; graphics.m_pen.Color = XLineJig.SizeLineColor; Point point = XUiJigBase.OffsetPoint(ptStart, num2, XLineJig.int_0); Point point2 = XUiJigBase.OffsetPoint(ptEnd, num2, XLineJig.int_0); Point point3 = XUiJigBase.OffsetPoint(point, num2, XLineJig.int_1); XLine2D xline2D = new XLine2D(point, point3); xline2D.Draw(graphics); Point point4 = XUiJigBase.OffsetPoint(point2, num2, XLineJig.int_1); XLine2D xline2D2 = new XLine2D(point2, point4); xline2D2.Draw(graphics); Point point5 = XUiJigBase.OffsetPoint(point, num2, XLineJig.int_1 - XLineJig.int_0); Point point6 = XUiJigBase.OffsetPoint(point2, num2, XLineJig.int_1 - XLineJig.int_0); XLine2D xline2D3 = new XLine2D(XUiJigBase.OffsetPoint(point5, num, -XLineJig.int_0), XUiJigBase.OffsetPoint(point6, num, XLineJig.int_0)); xline2D3.Draw(graphics); XLine2D xline2D4 = new XLine2D(XUiJigBase.OffsetPoint(point5, num + 45.0, XLineJig.int_0), XUiJigBase.OffsetPoint(point5, num + 45.0, -XLineJig.int_0)); xline2D4.Draw(graphics); XLine2D xline2D5 = new XLine2D(XUiJigBase.OffsetPoint(point6, num + 45.0, XLineJig.int_0), XUiJigBase.OffsetPoint(point6, num + 45.0, -XLineJig.int_0)); xline2D5.Draw(graphics); Point point7 = XUiJigBase.OffsetPoint(point, num, XUiJigBase.TwoPointDist(ptStart, ptEnd) / 2); Point point8 = XUiJigBase.OffsetPoint(point7, num2, (int)((double)XLineJig.int_1 + (double)XLineJig.SizeFont.Height / 2.0)); PointF pointF = new PointF((float)point8.X, (float)point8.Y); float num3 = -(float)(num / Math.PI * 180.0); graphics.m_graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixel; Matrix transform = graphics.m_graphics.Transform; Matrix transform2 = graphics.m_graphics.Transform; transform2.RotateAt(num3, pointF); graphics.m_graphics.Transform = transform2; graphics.m_graphics.DrawString(strSizeText, XLineJig.SizeFont, XLineJig.SizeTextBrush, pointF, XLineJig.TextFormat); graphics.m_graphics.Transform = transform; graphics.m_pen.Color = color; } } public static void DrawLinesSize(Point ptStart, Point ptEnd, string strSizeText, XGraphics graphics, XYZ pt, XYZ ptCur) { XUiJigBase.SortTwoPoint(ref ptStart, ref ptEnd); if (XUiJigBase.TwoPointDist(ptStart, ptEnd) >= 10) { double num = XUiJigBase.TwoPointAngle(ptStart, ptEnd); double num2 = num + 1.5707963267948966; Color color = graphics.m_pen.Color; graphics.m_pen.Color = XLineJig.SizeLineColor; Point point = XUiJigBase.OffsetPoint(ptStart, num2, XLineJig.int_0); Point point2 = XUiJigBase.OffsetPoint(ptEnd, num2, XLineJig.int_0); Point point3 = XUiJigBase.OffsetPoint(point, num2, XLineJig.int_1); XLine2D xline2D = new XLine2D(point, point3); xline2D.Draw(graphics); Point point4 = XUiJigBase.OffsetPoint(point2, num2, XLineJig.int_1); XLine2D xline2D2 = new XLine2D(point2, point4); xline2D2.Draw(graphics); Point point5 = XUiJigBase.OffsetPoint(point, num2, XLineJig.int_1 - XLineJig.int_0); Point point6 = XUiJigBase.OffsetPoint(point2, num2, XLineJig.int_1 - XLineJig.int_0); XLine2D xline2D3 = new XLine2D(XUiJigBase.OffsetPoint(point5, num, -XLineJig.int_0), XUiJigBase.OffsetPoint(point6, num, XLineJig.int_0)); xline2D3.Draw(graphics); XLine2D xline2D4 = new XLine2D(XUiJigBase.OffsetPoint(point5, num + 45.0, XLineJig.int_0), XUiJigBase.OffsetPoint(point5, num + 45.0, -XLineJig.int_0)); xline2D4.Draw(graphics); XLine2D xline2D5 = new XLine2D(XUiJigBase.OffsetPoint(point6, num + 45.0, XLineJig.int_0), XUiJigBase.OffsetPoint(point6, num + 45.0, -XLineJig.int_0)); xline2D5.Draw(graphics); Point point7 = XUiJigBase.OffsetPoint(point, num, XUiJigBase.TwoPointDist(ptStart, ptEnd) / 2); Point point8 = XUiJigBase.OffsetPoint(point7, num2, (int)((double)XLineJig.int_1 + (double)XLineJig.SizeFont.Height / 2.0)); PointF pointF = new PointF((float)point8.X, (float)point8.Y); float num3 = -(float)(num / Math.PI * 180.0); graphics.m_graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixel; Matrix transform = graphics.m_graphics.Transform; Matrix transform2 = graphics.m_graphics.Transform; transform2.RotateAt(num3, pointF); graphics.m_graphics.Transform = transform2; graphics.m_graphics.DrawString(strSizeText, XLineJig.SizeFont, XLineJig.SizeTextBrush, pointF, XLineJig.TextFormat); graphics.m_graphics.Transform = transform; graphics.m_pen.Color = color; } } [CompilerGenerated] private static int int_0; [CompilerGenerated] private static int int_1; public enum EStage { eNoOper, eStartPt, eEndPt } public enum AlignType { eMiddle, eLeft, eRight } } }