Building Coder 链接:http://thebuildingcoder.typepad.com/blog/2010/07/family-element-visibility.html
Revit 二次开发论坛链接:http://revit.5d6d.com/viewthread.php?tid=1295&extra=
有人提到一个如何在族文档中设置元素可见性的问题。
问题:
我需要为一个 Family Feature(例如:extrusion)的可见性属性分派一个Yes/No参数。目的是隐藏特定类型的 extrusion。Revit 用户界面中我可以通过如下方式手动实现:
1. 选定 Feature;
2. 在属性视图中切换 Visibility 的 ON/OFF状态。
但是我如何通过编程方式实现这一点呢?
回答:
为了测试,我利用 Metric Generic Model 模板新建了一个族,其中只有一个 extrusion 元素。在 extrusion 元素的属性视图中,我在 Graphics 组下找到了你提到的 Visible
属性。它的值是一个核选框。
当我使用 RevitLookup 工具分析这个 extrusion 对象时,我发现 Visible 属性是以元素参数的形式存在的。它对应的内置参数是 IS_VISIBLE_PARAM。
Add-Ins > Revit Lookup > Snoop Current Selection > Extrusion > Parameters > Visible
你可以通过对 extrusion 元素调用标准的参数访问方法 get_Parameter() 来获取它。
实际上我在之前 DWG and DWF family creation 的讨论中就曾利用 Visible 属性来控制 Family Feature 的显示/隐藏。那时我使用一个自定义的族参数来映射相关
Family Feature 的可见性。这样我的族在被实例化之后,我就可以通过控制这个自定义的族参数来控制相关族部件的可见性了。
如果你想对 Family Feature 的可见性有更深入地控制,还可以利用 FamilyElementVisibility 类。Revit API 帮助文档中包含了对该类的描述和一些例程。简单地说就是该类
还可以帮助你设置相关的 Family Feature 在哪些细节层和视图中会被显示。
public void CreateAndSetVisibility(Autodesk.Revit.DB.Document familyDocument, SketchPlane sketchPlane)
{
// create a new ModelCurve in the family document
XYZ p0 = new XYZ(1, 1, 0);
XYZ p1 = new XYZ(5, 1, 0);
Line line1 = familyDocument.Application.Create.NewLineBound(p0, p1);
ModelCurve modelCurve1 = familyDocument.FamilyCreate.NewModelCurve(line1, sketchPlane);
// create a new ModelText along ModelCurve line
ModelText text = familyDocument.FamilyCreate.NewModelText("Hello World", null, sketchPlane, p0, HorizontalAlign.Center, 0.1);
// set visibility for text
FamilyElementVisibility textVisibility = new FamilyElementVisibility(FamilyElementVisibilityType.Model);
textVisibility.IsShownInTopBottom = false;
text.SetVisibility(textVisibility);
// set visibility for line
FamilyElementVisibility curveVisibility = new FamilyElementVisibility(FamilyElementVisibilityType.Model);
curveVisibility.IsShownInCoarse = false;
modelCurve1.SetVisibility(curveVisibility);
}
译者注:FamilyElementVisibility 类提供一组属性用于控制元素在指定细节层或者视图中是否被显示。这些属性如下:
IsShownInCoarse:是否在“粗糙”细节层中显示(只限项目文档);
IsShownInMedium:是否在“中度”细节层中显示(只限项目文档);
IsShownInFine:是否在“精细”细节层中显示(只限项目文档);
IsShownInFrontBack:是否在“前/后”视图中显示(只限项目文档);
IsShownInLeftRight 是否在“左/右”视图中显示(只限项目文档);
IsShownInTopBottom:是否在“顶/底”视图中显示(只限项目文档);
IsShownInPlanRCPCut:当在 Plan/RCP 中被剪切时是否显示(如果其类别允许的话);
IsShownOnlyWhenCut:是否只在其被剪切时显示;
VisibilityType:FamilyElementVisibilityType 枚举值
- Model:只在3D视图中显示;
- ViewSpecific:只在创建视图中显示,一般用于细节组件、注释以及针对视图的导入