各位前辈,大家好。
我最近在用API中提供的方法进行创建角度尺寸标注,遇到了如下的问题:
我的流程为:
首先我手动打开了一个空的族文档,然后绘制了一个角度尺寸标注。如下图:
接着用如下的代码,将尺寸标注中的曲线信息提取了出来。
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();
结果生成出来的标注是图上的样子,与最上面图片中的不一致。后来也试了好多次,都是这种情况。
我尝试着去设置标注中LeaderEndPosition的属性值来进行修改,结果也不能解决,我觉得应该会有另外一个值或者属性来控制生成的角度是较大的还是较小的。
并且在查看标注的属性中发现,对LeaderEndPosition以及Origin这两个属性值是怎么得出的,产生了不解。因为我试着自己去绘制一个角度标注,然后点开LookUP去看对应的值时,发现给出的点并不是在绘制时鼠标点击的点。
总体来说,我得疑问有两部分:
一、创建时的角度问题。
二、标注的属性值问题。
可能我这个问题并没有什么多大意义,可是它已经困扰了好久,尝试了好多方法都没解决。
所以,非常希望您能给我一些建议或者解决方法。谢谢!
已解决! 转到解答。
由 BIM.Frankliang 解答. 转到解答。
你好!
首先上代码:
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就是标注的位置。
希望对你有用,祝好!