[![基点位置から測量点に移動したときの正しい位置][2]][2]
Revit で navisworks のクラッシュ ポイントを表示するプログラムを作成中ですが、基点が (0,0,0) でない場合、正確な位置に配置するのが難しいと感じています。コードに場所の違いを手動で追加すると、機能します。これをプログラムで解決するにはどうすればよいですか? おそらく簡単な計算があることは理解していますが、それを理解できないようです。私はグーグルでいくつかのアイデアを試してみましたが、役に立ちませんでした。これについてどうすればいいですか?
public static XYZ WorldToLocal(Document document, XYZ coordinate, bool millimeters)
{
ElementCategoryFilter filter = new ElementCategoryFilter(BuiltInCategory.OST_ProjectBasePoint);
FilteredElementCollector collector = new FilteredElementCollector(document);
IList<Element> oProjectBasePoints = collector.WherePasses(filter).ToElements();
Element oProjectBasePoint = null;
foreach (Element bp in oProjectBasePoints)
{
oProjectBasePoint = bp;
break;
}
double x = oProjectBasePoint.get_Parameter(BuiltInParameter.BASEPOINT_EASTWEST_PARAM).AsDouble();
double y = oProjectBasePoint.get_Parameter(BuiltInParameter.BASEPOINT_NORTHSOUTH_PARAM).AsDouble();
double z = oProjectBasePoint.get_Parameter(BuiltInParameter.BASEPOINT_ELEVATION_PARAM).AsDouble();
double r = oProjectBasePoint.get_Parameter(BuiltInParameter.BASEPOINT_ANGLETON_PARAM).AsDouble();
XYZ result = new XYZ(
coordinate.X * Math.Cos(r) - coordinate.Y * Math.Sin(r) ,
coordinate.X * Math.Sin(r) + coordinate.Y * Math.Cos(r),
coordinate.Z);
//Code that makes it work
XYZ newpostion = new XYZ(result.X - 21.943, result.Y +13.410, result.Z);
//ends here
if (millimeters)
{
return newpostion * 304.8;
}
return newpostion;
}