在revit api中查找基点的坐标

Posted

技术标签:

【中文标题】在revit api中查找基点的坐标【英文标题】:Finding the coordinates for basepoint in revit api 【发布时间】:2012-11-19 15:31:03 【问题描述】:

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

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();

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

【问题讨论】:

【参考方案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);

【讨论】:

以上是关于在revit api中查找基点的坐标的主要内容,如果未能解决你的问题,请参考以下文章

Revit API 正在读取错误的类型参数值

如何在 Tensorflow 对象检测 API 中查找边界框坐标

通过距离和方位从已知位置查找点坐标的地理算法

使用 PHP 从 ATOM 提要中提取数据并使用它反向查找坐标到实际地址

Google Maps Api v3 - 查找最近的标记

Revit二次开发 屏蔽复制构件产生的重复类型提示窗