【问题标题】:Revit API Can not create new sweep in generic model adaptive family documentRevit API 无法在通用模型自适应族文档中创建新扫描
【发布时间】:2018-12-20 10:32:10
【问题描述】:

我刚刚开始使用 Revit API 很短时间,一直在为这个问题摸不着头脑。我想使用“通用模型自适应”族模板创建一个包含实体形式的族。但是,似乎我无法使用

在家庭文档中创建扫描
Autodesk.Revit.Creation.FamilyItemFactory.NewSweep()

因为我不断收到以下异常:

Autodesk.Revit.Exceptions.InvalidOperationException
The attempted operation is not permitted in this type of family.

这个错误的原因是什么?为什么我一直在处理新创建的家庭文档,但不允许操作? 这是我的代码:

// sweepPath is a CurveByPoints instance.
if (null != sweepPath)
            {
                acTrans.Start("Cable");
                // create a circle as bottom shape for the cable
                IList<XYZ> points = sweepPath.GeometryCurve.Tessellate();
                XYZ center = points[0];
                Plane workingPlane = Plane.CreateByNormalAndOrigin(XYZ.BasisZ, center);
                Arc bottomShape = Arc.Create(workingPlane, _radius, 0, 2 * Math.PI);

                // create profile
                CurveArray curveArray = new CurveArray();
                curveArray.Append(bottomShape);
                CurveArrArray arrArray = new CurveArrArray();
                arrArray.Append(curveArray);
                SweepProfile profile = _rvApp.Create.NewCurveLoopsProfile(arrArray) as SweepProfile;

                // create path
                XYZ sweepPathDirection = points[1] - points[0];
                double angle = sweepPathDirection.AngleTo(XYZ.BasisZ);
                XYZ direction = sweepPathDirection.CrossProduct(XYZ.BasisZ);
                Line axis = Line.CreateUnbound(center, direction);
                ElementTransformUtils.RotateElement(familydoc, sweepPath.Id, axis, angle);
                CurveArray path = new CurveArray();
                path.Append(sweepPath.GeometryCurve);

                // create sketch plane
                Plane plane = Plane.CreateByNormalAndOrigin(new XYZ(10, 0, 0), refPointArray.get_Item(0).Position);
                SketchPlane pathPlane = SketchPlane.Create(familydoc, plane);

                // create the cable
                // Sweep sweep = familydoc.FamilyCreate.NewSweep(true, curveArray, pathPlane, profile, 0, ProfilePlaneLocation.Start);
                ReferenceArray refArray = new ReferenceArray();
                refArray.Append(sweepPath.GeometryCurve.Reference);
                Sweep sweep = familydoc.FamilyCreate.NewSweep(true, refArray, profile, 0, ProfilePlaneLocation.Start);
                acTrans.Commit();
            }

编辑1:我一开始以为是家庭文档没有激活,所以我尝试了

Application.OpenDocumentFile(file_path_for_my_family_document);

但它没有成功。即使我尝试从 SDK 中创建家庭文档扫描的示例代码,同样的错误仍然会发生。

【问题讨论】:

    标签: c# visual-studio-2017 revit-api


    【解决方案1】:

    结果证明这是个坏主意,因为 revit api 不支持在自适应族文档中特别是创建扫描和一般实体。我不知道这背后的原因,但即使我可以在普通的通用家庭文档中做同样的事情,它也是无法实现的。我必须改为加载现有的自适应族。

    我想知道是什么导致了这种差异?

    如果你密集使用家族或者家族复杂,加载一个会带来很好的性能和更简单的代码编写。

    如果你只在非常有限的情况下使用一个简单的族,从 api 创建一个是一个很好的解决方案。如果您需要许多相同类型但自适应点数量不同的家庭,这可能是一项繁琐的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-29
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      相关资源
      最近更新 更多