【发布时间】:2020-07-24 16:48:03
【问题描述】:
我正在做的是尝试在 Revit 中的工作表上放置视图,无论是中心页面还是四个象限之一的中心。但是我没有建立课程的经验,而且我很挣扎。 我想在初始化时设置我的所有属性,一旦绘制了选择框轮廓,它们就不应更改。
-
我可以使用 ViewPortOutline(UIDocument UIDoc) 绘制选择框,如果我使用 taskDialog,pickBox.Min.X 将返回其值
-
但是当我到达“setXYZParameter”时,这会将我锁定在选择框中,并且不会移动到对话框中
-
如果我注释掉“setXYZParameter”,代码会向前移动到对话框,但 ReturnOutline() pickBox.Min.X 为空,因为“setXYZParameter”被注释掉了。
公共类 ViewPortOutline { 公共静态 XYZ VP_CenterPoint { 获取;放; } 公共静态 XYZ VP_CenterPoint_Q1 { 获取;放; } 公共静态 XYZ VP_CenterPoint_Q2 { 获取;放; } 公共静态 XYZ VP_CenterPoint_Q3 { 获取;放; } 公共静态 XYZ VP_CenterPoint_Q4 { 获取;放; } 私有静态 UIDocument _UIDoc { 获取;放; } 公共静态 PickedBox pickBox { 获取;放; }
public ViewPortOutline(UIDocument UIDoc) { _UIDoc = UIDoc; PickBox(); } public static void PickBox() { Selection selection = _UIDoc.Selection; PickedBox pickBox = selection.PickBox(PickBoxStyle.Directional);//<<< Problem Here setXYZParameters(); } public static Outline ReturnOutline() { double minX = pickBox.Min.X;//<<< Null double minY = pickBox.Min.Y; double maxX = pickBox.Max.X; double maxY = pickBox.Max.Y; double sminX = Math.Min(minX, maxX); double sminY = Math.Min(minY, maxY); double smaxX = Math.Max(minX, maxX); double smaxY = Math.Max(minY, maxY); Outline outline = new Outline(new XYZ(sminX, sminY, 0), new XYZ(smaxX, smaxY, 0)); return outline; } public static void ReturnCenterPoints(UIDocument uidoc, Outline outline, out XYZ midpoint, out XYZ q1c, out XYZ q2c, out XYZ q3c, out XYZ q4c) { double outlineDiagonal = outline.GetDiagonalLength(); double outlineCenter = outline.GetDiagonalLength() / 2; XYZ bottomleft = (outline.MinimumPoint); XYZ topleft = new XYZ(outline.MinimumPoint[0], outline.MaximumPoint[1], 0); XYZ topright = (outline.MaximumPoint); XYZ bottomright = new XYZ(outline.MaximumPoint[0], outline.MinimumPoint[1], 0); midpoint = new XYZ((outline.MaximumPoint[0]) / 2, (outline.MaximumPoint[1]) / 2, 0); XYZ midleft = new XYZ(outline.MinimumPoint[0], outline.MaximumPoint[1] / 2, 0); XYZ midtop = new XYZ(outline.MaximumPoint[0] / 2, outline.MaximumPoint[1], 0); XYZ midright = new XYZ(outline.MaximumPoint[0], outline.MaximumPoint[1] / 2, 0); XYZ midbottom = new XYZ(outline.MaximumPoint[0] / 2, outline.MinimumPoint[1], 0); Outline q1 = new Outline(midpoint, topright); q1c = new XYZ( q1.MaximumPoint[0] / 2, q1.MaximumPoint[1] / 2, 0); Outline q2 = new Outline(midleft, midtop); q2c = new XYZ( q2.MaximumPoint[0] / 2, q2.MaximumPoint[1] / 2, 0); Outline q3 = new Outline(bottomleft, midpoint); q3c = new XYZ( q3.MaximumPoint[0] / 2, q3.MaximumPoint[1] / 2, 0); Outline q4 = new Outline(midbottom, midright); q4c = new XYZ( q4.MaximumPoint[0] / 2, q4.MaximumPoint[1] / 2, 0); } public static void setXYZParameters() { XYZ mp; XYZ q1c; XYZ q2c; XYZ q3c; XYZ q4c; ReturnCenterPoints(_UIDoc, ReturnOutline(), out mp, out q1c, out q2c, out q3c, out q4c); VP_CenterPoint = mp; VP_CenterPoint_Q1 = q1c; VP_CenterPoint_Q2 = q2c; VP_CenterPoint_Q3 = q3c; VP_CenterPoint_Q4 = q4c; }}
ViewPortOutline outline = new ViewPortOutline(uidoc); UnitSetup_Form form = new UnitSetup_Form(commandData); form.ShowDialog();
【问题讨论】:
标签: c# class constructor revit