ADN Open CIS
Сообщество программистов Autodesk в СНГ

20/02/2015

Используем геолокацию с помощью ObjectARX

Это пример кода работы с геолокацией в чертеже AutoCAD. Если вы ищете пример кода на .NET, тогда посмотрите эту статью.

Чтобы попробовать этот код, вы должны быть подписаны на использование Autodesk 360 внутри AutoCAD.

Код - C++: [Выделить]
  1. AcDbDatabase *pDb
  2.      = acdbHostApplicationServices()->workingDatabase();
  3.  
  4.  AcDbBlockTable *pBlockTable;
  5.  pDb->getSymbolTable(pBlockTable, AcDb::kForRead);
  6.  
  7.  AcDbObjectId msId = AcDbObjectId::kNull;
  8.  pBlockTable->getAt(ACDB_MODEL_SPACE, msId);
  9.  pBlockTable->close();
  10.  
  11.  AcDbGeoData *pGeoData = new  AcDbGeoData();
  12.  pGeoData->setBlockTableRecordId(msId);
  13.  AcDbObjectId geodataId = AcDbObjectId::kNull;
  14.  pGeoData->postToDb(geodataId);
  15.  
  16.  // Система координат
  17.  pGeoData->setCoordinateSystem(ACRX_T("WORLD-MERCATOR" ));
  18.  pGeoData->setCoordinateType(AcDbGeoData::kCoordTypGrid);
  19.  
  20.  // Получаем точку в пространстве модели для
  21.  // Широты = 37.8109 и Долготы = -122.4776
  22.  AcGePoint3d geoPoint(-122.4776, 37.8109, 0);
  23.  AcGePoint3d drawingPt = AcGePoint3d::kOrigin;
  24.  pGeoData->transformFromLonLatAlt(geoPoint, drawingPt);
  25.  pGeoData->setHorizontalUnits(AcDb::UnitsValue::kUnitsMeters);
  26.  pGeoData->setVerticalUnits(AcDb::UnitsValue::kUnitsMeters);
  27.  
  28.  // Устанавливаем точку пространства модели;
  29.  pGeoData->setDesignPoint(drawingPt);
  30.  
  31.  // Устанавливаем геолокационную точку.
  32.  pGeoData->setReferencePoint(geoPoint);
  33.  pGeoData->close();
  34.  
  35.  AcApDocument *pDoc = acDocManager->document(
  36.             acdbHostApplicationServices()->workingDatabase());
  37.  
  38.  ACHAR zoomWcommand[200];
  39.  AcGePoint3d pt1 = drawingPt + AcGeVector3d(-5000.0, 5000.0, 0.0);
  40.  AcGePoint3d pt2 = drawingPt + AcGeVector3d(5000.0, -5000.0, 0.0);
  41.  
  42.  acutSPrintf(zoomWcommand,
  43.  ACRX_T("_.ZOOM _W %lf,%lf %lf,%lf " ), pt1.x, pt1.y, pt2.x, pt2.y);
  44.  
  45.  acDocManager->sendStringToExecute(pDoc, zoomWcommand,
  46.                                    false , true , false );
  47.  acDocManager->sendStringToExecute(pDoc,
  48.                  L"_GEOMAP _Road " ,
  49.                  false , true , false );

 

Широта и долгота точки, указанной в коде соответствует началу Моста Золотые Ворота.

А вот и картинка:

 

Источник: http://adndevblog.typepad.com/autocad/2015/02/attaching-geo-location-data-using-objectarx.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=1883

Опубликовано 20.02.2015
Отредактировано 20.02.2015 в 16:17:21