Revit中的参数

Revit中的参数

族中参数

  • 族参数——不能出现在明细表
    • 实例参数
    • 类型参数
  • 共享参数——可以出现在明细表

项目的参数

  • 项目参数——可以同时添加到项目多类别图元中
  • 共享参数——和前面族中的共享参数是一样的
  • 全局参数——控制项目中图元的参数
族中创建实例参数
        private void FamDocCreateInstancePrameter(Document famDoc) {

            var manager = famDoc.FamilyManager;
            var instanceParametere1 = default(FamilyParameter);

            using (var trans = new Transaction(famDoc, "创建参数")) {
                trans.Start();
                instanceParametere1 = manager.AddParameter("实例参数1", BuiltInParameterGroup.PG_LENGTH, ParameterType.Length, true);
                trans.Commit();
            }

            //假设这里创建了一个尺寸标注
            var dimension1 = default(Autodesk.Revit.DB.Dimension);
            //尺寸标注和参数做关联,这样等族载入带项目中以后,可以通过参数来驱动尺寸标注,从而实现参数化控制的效果
            dimension1.FamilyLabel = instanceParametere1;

        }

族中创建类型参数

因为一个族文档中可能存在多个族类型,在族文档中创建类型参数时需要明确到底给那个类型添加参数,主要步骤是这样:

  1. 找到需要添加参数的类型
  2. 设置需要添加参数类型为当前类型
  3. 添加参数

下面demo会给族文档中名称带有"AA"字段的类型添加一个类型参数

        private void FamDocCreateSymbolParameter(Document famDoc) {
            var keyWord = "AA";
            var manager = famDoc.FamilyManager;
            var types = manager.Types;
            foreach (var type in types) {
                if (type is FamilyType famType && famType.Name.Contains(keyWord)) {

                    var trans = new Transaction(famDoc, "创建类型参数");
                    trans.Start();

                    //设置当前的族类型
                    manager.CurrentType = famType;
                    //创建参数,最后一个布尔值来确定是类型参数还是实例参数
                    var symbolParameter = manager.AddParameter("类型参数1", BuiltInParameterGroup.PG_LENGTH, ParameterType.Length, false);
                    trans.Commit();
                    trans.Dispose();
                }
            }
        }
创建共享参数
族中使用共享参数
项目中使用共享参数
创建并使用项目参数
创建并使用全局参数

全局参数说白了也是一个参数,可以类比到族参数。族文档中创建了一扇门,宽度做了标注,然后创建了相应的参数以后,我们把族载入到项目中,就可以通过这个参数来控制门的宽度。全局参数其实就是控制项目文档中图元的参数。比如下面的demo实现了用户选择两堵平行墙,然后标注两者之间的距离,然后创建一个全局参数和标注做关联,后期就可以通过这个全局参数来控制这个这两堵墙的宽度了

        private void DocCreateGloablParameter() {
            var ref1 = _uidoc.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element, "select wall1");
            var ref2 = _uidoc.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element, "select wall2");

            var wall1 = _uidoc.Document.GetElement(ref1) as Wall;
            var wall2 = _uidoc.Document.GetElement(ref2) as Wall;

            var line1 = (wall1.Location as LocationCurve).Curve;
            var line2 = (wall2.Location as LocationCurve).Curve;

            var face1 = wall1.GetTargetFace(wall1.Orientation);
            var face2 = wall2.GetTargetFace(wall2.Orientation);

            var array = new ReferenceArray();
            array.Append(face1.Reference);
            array.Append(face2.Reference);


            var parameter = default(GlobalParameter);

            using (var trans = new Transaction(_doc, "创建参数")) {
                trans.Start();
                parameter = GlobalParameter.Create(_doc, "间距", ParameterType.Length);
                trans.Commit();
            }


            var line = Line.CreateBound(line1.GetEndPoint(0), line2.GetEndPoint(0));
            using (var trans = new Transaction(_doc, "创建标注")) {
                trans.Start();
                var dimension = _doc.Create.NewDimension(_uidoc.ActiveGraphicalView, line, array);
                parameter.LabelDimension(dimension.Id);
                trans.Commit();
            }
        }        

		public static PlanarFace GetTargetFace(this Element elem, XYZ normal) {
            var opt = new Options() {
                ComputeReferences = true,
                DetailLevel = ViewDetailLevel.Fine,
                IncludeNonVisibleObjects = true,
            };

            var geometry = elem.get_Geometry(opt);

            foreach (var geoObje in geometry) {
                if (geoObje is Solid solid && solid.Faces.Size > 0) {
                    foreach (var face in solid.Faces) {
                        if (face is PlanarFace pf && pf.FaceNormal.IsAlmostEqualTo(normal)) {
                            return pf;
                        }
                    }
                }
            }
            return default(PlanarFace);
        }

待更新

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值