2

我创建了一个插件来计算网格之间的交点。交点计算的坐标使用基点位置作为坐标的原点。我想将坐标转换为测量点位置。我尝试使用以下代码获取基点的坐标:

ElementCategoryFilter filter = new ElementCategoryFilter(BuiltInCategory.OST_ProjectBasePoint);

FilteredElementCollector collector = new FilteredElementCollector(doc);
IList<Element> elements = collector.WherePasses(filter).ToElements();

foreach (Element element in elements)
{
    double x = element.get_Parameter(BuiltInParameter.BASEPOINT_EASTWEST_PARAM).AsDouble();
    double y = element.get_Parameter(BuiltInParameter.BASEPOINT_NORTHSOUTH_PARAM).AsDouble();
    double elevation = element.get_Parameter  (BuiltInParameter.BASEPOINT_ELEVATION_PARAM).AsDouble();
}

我想使用基点坐标来调整我在交点计算中找到的坐标,以使用测量点作为原点。但我不知道如何使用基点的值来调整坐标。似乎基点中的值不是使用测量点作为原点,而是可能是内部坐标。或者我可能误解了基点中的值。有什么我可以尝试的指针吗?

4

1 回答 1

1

经过几天的工作,我终于找到了我的错误和我的问题的答案。对于与我有相同问题的任何人,这就是我将坐标转换为正确坐标的方式:

  • 我从基点获取的值是距测量点的偏移量,但我的错误是我是欧洲人:p 我从基点获得的值使用英尺作为单位,而我的项目以毫米为单位。所以我创建了一个转换函数来将我从 revit api 获得的所有值(在我的例子中:基点值和网格相交函数)转换为项目单位(毫米)。这是一篇关于该主题的精彩博客文章 http://thebuildingcoder.typepad.com/blog/2011/12/unit-conversion-and-display-string-formatting.html

  • 我要做的第二件事是使用基点偏移量变换坐​​标。但是基点坐标系可能有旋转。所以我不得不先旋转坐标

    double x = (pos.X * Math.Cos(angle)) - (pos.Y * Math.Sin(angle));
    double y = (pos.X * Math.Sin(angle)) + (pos.Y * Math.Cos(angle));
    

然后我可以变换坐标:

new XYZ(position.X + projectBasePoint.X, newPos.Y + projectBasePoint.Y, 0);
于 2012-11-22T07:26:50.963 回答