Revit二次开发 - 算量模块 - 构件预览

下图为一知名算量软件的构件预览的效果,我们自己开发算量软件应该绕不过它,不管是开发还是测试,该功能提供了直观查看和校核结果的途径,话不多说,看实现。

它的参考文档可以查看SDK的中AnalysisVisualizationFramework文件夹下的内容;

也可以直接百度搜Revit二次开发 AVF,能找到和下面相似的代码;

我感觉用AVF能直接解决显示构件的效率问题;

目前未考虑曲面,仅做参考。

接口中参数value可以给1

    static class AVFSolidUtils
    {
        public static void PaintFace(Document doc, Face face, double value, bool bClear = true)
        {
            var sfm = InitAnalysisDisplayStyle(doc.ActiveView);

            if (bClear) sfm.Clear();

            int schemaId = -1;

            var regList = sfm.GetRegisteredResults();
            if (regList.Count == 0)
            {
                var resultSchema1 = new AnalysisResultSchema("visual_Paint", "Description");
                schemaId = sfm.RegisterResult(resultSchema1);
            }
            else schemaId = regList.First();

            //
            var valList = new List<ValueAtPoint>() { new ValueAtPoint(new List<double>() { value }) };
            //
            var vals = new FieldValues(valList);
            //
            var pnts = new FieldDomainPointsByUV(new List<UV>() { face.GetBoundingBox().Min });
            var idx = sfm.AddSpatialFieldPrimitive(face, Transform.Identity);
            sfm.UpdateSpatialFieldPrimitive(idx, pnts, vals, schemaId);
        }
        public static void PaintSolid(this Document doc, Solid soild, double value, bool bClear = true)
        {
            var bClearTmp = bClear;

            foreach (Face face in soild.Faces)
            {
                PaintFace(doc, face, value, bClearTmp);

                bClearTmp = false;
            }
        }
        public static void PaintSolid(this Document doc, Face face, double thickness, double value, bool bClear = true)
        {
            var solid = GeometryCreationUtilities.CreateExtrusionGeometry(face.GetEdgesAsCurveLoops(), (face as PlanarFace).FaceNormal, thickness);

            PaintSolid(doc, solid, value, bClear);
        }

        #region UTILS

        static void CreateAVFDisplayStyle(Document doc, View view)
        {
            var coloredSurfaceSettings = new AnalysisDisplayColoredSurfaceSettings();

            coloredSurfaceSettings.ShowContourLines = true;

            var color = new Color(0xae, 0xc1, 0xe9);
            var colorSettings = new AnalysisDisplayColorSettings()
            {
                MinColor = color,
                MaxColor = color,
            };

            var legendSettings = new AnalysisDisplayLegendSettings() { ShowLegend = false };

            var analysisDisplayStyle = AnalysisDisplayStyle.CreateAnalysisDisplayStyle(
                doc,
                "Paint Solid",
                coloredSurfaceSettings,
                colorSettings,
                legendSettings);

            view.AnalysisDisplayStyleId = analysisDisplayStyle.Id;
        }
        static SpatialFieldManager InitAnalysisDisplayStyle(View view)
        {
            if (view.AnalysisDisplayStyleId == ElementId.InvalidElementId)
                CreateAVFDisplayStyle(view.Document, view);

            var sfm = SpatialFieldManager.GetSpatialFieldManager(view);

            return sfm == null ? SpatialFieldManager.CreateSpatialFieldManager(view, 1) : sfm;
        }

        #endregion
    }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值