公告
自北京时间 10 月 17 日下午 1 点起,Autodesk 社区将进行定期维护,在大约 1 小时内您将无法访问社区网站。感谢您在此期间的耐心等待。
社区
Revit,Navisworks建筑施工BIM讨论区
欢迎访问欧特克Revit, Navisworks论坛!分享知识,发帖提问,浏览论坛热帖。
取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

关于创建角度尺寸标注的问题

2 条回复2
已解决
回复
1 条消息(共 3 条)
Anonymous
663 次查看, 2 条回复

关于创建角度尺寸标注的问题

各位前辈,大家好。

我最近在用API中提供的方法进行创建角度尺寸标注,遇到了如下的问题:

我的流程为:

首先我手动打开了一个空的族文档,然后绘制了一个角度尺寸标注。如下图:

1204986886_0-1617188178114.png

 

接着用如下的代码,将尺寸标注中的曲线信息提取了出来。

Arc arc1=dimension.Curve as Arc;
//这里的曲线是一个圆
XYZ center=arc1.Center;
Double radius = arc1.Radius;
XYZ XDirection=arc1.XDirection;
XYZ YDirection = arc1.YDirection;

在获取完信息后,手动将角度标注删掉,并通过LookUP获取到图中两个参考平面的ID。最后写下方的代码,尝试自己去生成刚刚删掉的角度标注。

Arc arc1 = Arc.Create(center, radius, 0, Math.PI*2, XDirection, YDirection);
//ReferencePlane ID=2744
Reference refer1 = (doc.GetElement(new ElementId(2744)) as ReferencePlane).GetReference();
//ReferencePlane ID=2745
Reference refer2 = (doc.GetElement(new ElementId(2745)) as ReferencePlane).GetReference();
Transaction tran = new Transaction(doc, "create");
tran.Start();
Dimension dimension1 = doc.FamilyCreate.NewAngularDimension(doc.ActiveView, arc1, refer1, refer2);
tran.Commit();

1204986886_1-1617188177959.png

 

结果生成出来的标注是图上的样子,与最上面图片中的不一致。后来也试了好多次,都是这种情况。

我尝试着去设置标注中LeaderEndPosition的属性值来进行修改,结果也不能解决,我觉得应该会有另外一个值或者属性来控制生成的角度是较大的还是较小的。

并且在查看标注的属性中发现,对LeaderEndPosition以及Origin这两个属性值是怎么得出的,产生了不解。因为我试着自己去绘制一个角度标注,然后点开LookUP去看对应的值时,发现给出的点并不是在绘制时鼠标点击的点。

总体来说,我得疑问有两部分:

一、创建时的角度问题。

二、标注的属性值问题。

可能我这个问题并没有什么多大意义,可是它已经困扰了好久,尝试了好多方法都没解决。

所以,非常希望您能给我一些建议或者解决方法。谢谢!

 

2 条回复2
2 条消息(共 3 条)
BIM.Frankliang
回复: Anonymous

你好!

 

首先上代码:

var uidoc = commandData.Application.ActiveUIDocument;
var doc = uidoc.Document;  
var refer1 = uidoc.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element);
var line1 = ((doc.GetElement(refer1) as DetailLine).GeometryCurve) as Line;
var refer2 = uidoc.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element);
var line2 = ((doc.GetElement(refer2) as DetailLine).GeometryCurve) as Line;
var rad = line1.Direction.Normalize().AngleTo(line2.Direction.Normalize());
if (rad < Math.PI)
{
    rad = Math.PI - rad;
}
XYZ center = null;
IntersectionResultArray results; 
SetComparisonResult result = line1.Intersect(line2, out results);
if (results.Size == 1)
{
      center = results.get_Item(0).XYZPoint;
}
if (center != null)
{
      Arc arc1 = Arc.Create(center, 0.5, Math.PI, rad+Math.PI, new XYZ(1, 0, 0), new XYZ(0, 1, 0));
      using (var tran = new Transaction(doc, "Test"))
      {
          tran.Start();
          var dimension1 = doc.FamilyCreate.NewAngularDimension(doc.ActiveView, arc1, refer1, refer2);
          tran.Commit();
       }
}
return Result.Succeeded;

 

使用该代码应该能得到你的效果,LeaderEndPosition是标注引线端点的位置,Origin就是标注的位置。

希望对你有用,祝好!

 

名片.png

3 条消息(共 3 条)
Anonymous
回复: BIM.Frankliang

非常感谢您,梁老师!
看了您的代码使我有了很大的启发,接下来我将进行多方面调试。
祝您常常喜乐,身体健康,工作顺利!

找不到想要的内容?向社区提问或分享您的知识。

到论坛发帖  

”