2012-11-19 3 views
2

그리드 간의 교차점을 계산하는 플러그인을 만들었습니다. 교차 계산의 좌표는 기준점 위치를 좌표의 원점으로 사용합니다. 좌표를 측량점 위치로 변환하고 싶습니다. 이 코드와 기준점의 좌표를 가져 오기 위해 시도 :revit api의 basepoint 좌표 찾기

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

나는 기준점 내가이 원점으로 설문 조사 포인트를 이용할 수 있도록 교차 계산에있는 좌표를 조정하는 좌표를 사용하고 싶었다. 그러나 좌표를 조정하기 위해 기준점의 값을 사용하는 방법을 파악할 수 없습니다. 베이스 포인트의 값은 측량 점을 원점으로 사용하지 않고 아마도 내부 좌표로 사용하는 것 같습니다. 아니면 내가 basepoint의 값을 오해했을 수도 있습니다. 내가 시도 할 수있는 모든 포인터?

답변

1

며칠 후에 나는 마침내 내 실수와 내 대답에 대한 대답을 발견했습니다.

  • 기준점에서 내가 가져 값은 조사 지점에서 오프셋,하지만 내 실수가 날 것입니다 : 내가 같은 문제가 누군가에게이 올바른 좌표에 내가 좌표를 변환하는 방법입니다 a European : p베이스 포인트에서 얻은 값은 피트를 단위로 사용하고 프로젝트는 밀리미터를 단위로 사용합니다. 그래서 나는 revit api (내 경우 : basepoint 값과 그리드 교차 함수)에서 얻은 모든 값을 프로젝트 단위 (밀리미터)로 변환하는 변환 함수를 만들었습니다. 이 주제에 대한 위대한 블로그 게시물입니다. http://thebuildingcoder.typepad.com/blog/2011/12/unit-conversion-and-display-string-formatting.html

  • 두 번째로해야 할 일은 기준점 오프셋을 사용하여 좌표를 변환하는 것입니다. 그러나베이스 포인트 좌표계에는 회전이있을 수 있습니다.

    new XYZ(position.X + projectBasePoint.X, newPos.Y + projectBasePoint.Y, 0); 
    
    : 그래서 좌표

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

좌표 그리고 내가 변환 할 수 첫번째 회전했다