在类内设置参数,Null 对象
Posted
技术标签:
【中文标题】在类内设置参数,Null 对象【英文标题】:Setting parameters inside the class, Null object 【发布时间】: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();
【问题讨论】:
【参考方案1】:我没有通过我的论点...
setXYZParameters(pickBox);
public static Outline ReturnOutline(PickedBox pickBox)
public static void setXYZParameters(PickedBox pickBox)
ReturnCenterPoints(_UIDoc, ReturnOutline(pickBox),
out midpoint, out q1c, out q2c, out q3c, out q4c);
编程压力很大,我花更多时间调试然后创建...
【讨论】:
调试是编程的一部分。即使是专业人士。很少写东西并且第一次就让它工作。坚持下去! =)以上是关于在类内设置参数,Null 对象的主要内容,如果未能解决你的问题,请参考以下文章