Revit创建链接模型尺寸标注

创建链接模型标注

创建Floor等有实体形状的标注

今天在回答Revit API Forum的问题的时候发现一个问题,如何获取链接模型的reference从而实现标注Reference to Grid and Level from link,我便使用CreateLinkReference(doc)这个方法直接获取,结果创建dimension失败
报错有无效的reference,后来debug直接获取手动创建的link reference成功标注,觉得是获取的reference的问题,后台查阅refernce的strign字符串发现不一致
在这里插入图片描述
后来看到这篇文章Revit处理链接文件标注Reference,修改后创建dimension成功,应该是转换的refernce-stable出现问题所以直接获取创建失败。

var floor = RevitCommandData.Document.GetElement(5676918) as Floor;
            var reference = floor.GetTopFaceReferences().First();

            var linkInstance = RevitCommandData.Document.GetElement(5678360) as RevitLinkInstance;
            var linkDoc = linkInstance.GetLinkDocument();
            var targetLinkEle = linkDoc.GetElement(5677607) as Floor;
            var linkFace =
                targetLinkEle.GetGeometryObjectFromReference(HostObjectUtils.GetTopFaces(targetLinkEle).First()) as
                    Face;
            var linkRef = HostObjectUtils.GetTopFaces(targetLinkEle).First().CreateLinkReference(linkInstance);
            var str = linkRef.ConvertToStableRepresentation(RevitCommandData.Document);
            var str2 = referenceLink.ConvertToStableRepresentation(RevitCommandData.Document);
            var strs = str.Split(':').ToList();
            var newStr = $"{strs[0]}:0:RVTLINK:{strs[2]}:{strs[3]}:{strs[4]}";
            var newReference = Reference.ParseFromStableRepresentation(RevitCommandData.Document, newStr);
            var testRef = newReference.ConvertToStableRepresentation(RevitCommandData.Document);
          
            TransactionUtils.Execute(RevitCommandData.Document,new Action<IDisposable>(x =>
            {
                var referenceArray = new ReferenceArray();
                referenceArray.Append(reference);
                referenceArray.Append(newReference);
                var fakeLine = Line.CreateUnbound(new XYZ(-49.469472958128, 1769.33005941939, 209.147513214079),
                    -XYZ.BasisZ);
                var dim = RevitCommandData.Document.Create.NewDimension(RevitCommandData.ActiveView, fakeLine,
                    referenceArray);
            }),"test");

创建Level Grid等没有实体形状的标注

 #region Create Link Level And Grid Dimension
            //ModelLine
            // var line = RevitCommandData.Document.GetElement(5679235) as ModelLine;
            // var linkInstance = RevitCommandData.Document.GetElement(5678360) as RevitLinkInstance;
            // var linkDoc = linkInstance.GetLinkDocument();
            // var referenceLine = line.GeometryCurve.Reference;
            // //Linked Grid
            // var linkGrid = linkDoc.GetElement(5684684) as Autodesk.Revit.DB.Grid;
            // var linkGridRefLine = (linkGrid.Curve.Reference).CreateLinkReference(linkInstance);
            // var linkGridStr = linkGridRefLine.ConvertToStableRepresentation(RevitCommandData.Document);
            // var strs = linkGridStr.Split(':').ToList();
            // var completeGridRef = $"{strs[0]}:0:RVTLINK:{strs[2]}:{strs[3]}:{strs[4]}";
            // var targetRef = Reference.ParseFromStableRepresentation(RevitCommandData.Document, completeGridRef);
            // // Local Level
            // var level = RevitCommandData.Document.GetElement(5672502) as Level;
            // var levelRefPlane = new Reference(level);
            // //Link Level
            // var linkLevel = linkDoc.GetElement(5672528) as Level;
            // var linkLevelRefLine = (new Reference(linkLevel)).CreateLinkReference(linkInstance);
            // var linkLevelStr = linkLevelRefLine.ConvertToStableRepresentation(RevitCommandData.Document);
            // var linkRefSplits = linkLevelStr.Split(':');
            // var completeLevelRef = $"{linkRefSplits[0]}:0:RVTLINK:{linkRefSplits[2]}:0:SURFACE";
            // var targetLevelRef = Reference.ParseFromStableRepresentation(RevitCommandData.Document, completeLevelRef);
            //
            //
            // TransactionUtils.Execute(RevitCommandData.Document , new Action<IDisposable>(x =>
            // {
            //     //Create Link-Level And Local-Level
            //     // var array = new ReferenceArray();
            //     // array.Append(levelRefPlane);
            //     // array.Append(targetLevelRef);
            //     // var l = Line.CreateUnbound(new XYZ(160.658709208543, -55.1818640250467, 39.7924116653103), -XYZ.BasisZ);
            //     // var dimLevel = RevitCommandData.Document.Create.NewDimension(RevitCommandData.ActiveView, l, array);
            //     //Create Link-Grid And ModelLine
            //     var array2 = new ReferenceArray();
            //     array2.Append(referenceLine);
            //     array2.Append(targetRef);
            //     var l2 = Line.CreateUnbound(new XYZ(34.4348591859389, 52.0854280621026, 0), XYZ.BasisY);
            //     var dimGrid = RevitCommandData.Document.Create.NewDimension(RevitCommandData.ActiveView, l2, array2);
            // }),"test");
            

            #endregion
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值