<?xml encoding=”UTF-8″>By Balaji Ramamoorthy
Here is a code snippet to create geo-location data in an AutoCAD drawing. If you are looking for a .Net code sample, please refer to this blog post.
To try this code, you will need to be signed-in using Autodesk 360 login credentials inside AutoCAD.
AcDbDatabase *pDb
= acdbHostApplicationServices()->workingDatabase();
AcDbBlockTable *pBlockTable;
pDb->getSymbolTable(pBlockTable, AcDb::kForRead);
AcDbObjectId msId = AcDbObjectId::kNull;
pBlockTable->getAt(ACDB_MODEL_SPACE, msId);
pBlockTable->close();
AcDbGeoData *pGeoData = <span>new</span><span> AcDbGeoData();</span>
pGeoData->setBlockTableRecordId(msId);
AcDbObjectId geodataId = AcDbObjectId::kNull;
pGeoData->postToDb(geodataId);
<span>//coordinate system</span><span> </span>
pGeoData->setCoordinateSystem(ACRX_T(<span>"WORLD-MERCATOR"</span><span> ));</span>
pGeoData->setCoordinateType(AcDbGeoData::kCoordTypGrid);
<span>//Get the model space point for </span><span> </span>
<span>// LATITUDE = 37.8109 & LONGITUDE = -122.4776</span><span> </span>
AcGePoint3d geoPoint(-122.4776, 37.8109, 0);
AcGePoint3d drawingPt = AcGePoint3d::kOrigin;
pGeoData->transformFromLonLatAlt(geoPoint, drawingPt);
pGeoData->setHorizontalUnits(AcDb::UnitsValue::kUnitsMeters);
pGeoData->setVerticalUnits(AcDb::UnitsValue::kUnitsMeters);
<span>//set the model space point;</span><span> </span>
pGeoData->setDesignPoint(drawingPt);
<span>//set the geo point.</span><span> </span>
pGeoData->setReferencePoint(geoPoint);
pGeoData->close();
AcApDocument *pDoc = acDocManager->document(
acdbHostApplicationServices()->workingDatabase());
ACHAR zoomWcommand[200];
AcGePoint3d pt1 = drawingPt + AcGeVector3d(-5000.0, 5000.0, 0.0);
AcGePoint3d pt2 = drawingPt + AcGeVector3d(5000.0, -5000.0, 0.0);
acutSPrintf(zoomWcommand,
ACRX_T(<span>"_.Zoom W %lf,%lf %lf,%lf "</span><span> ), pt1.x, pt1.y, pt2.x, pt2.y); </span>
acDocManager->sendStringToExecute(pDoc, zoomWcommand,
<span>false</span><span> , <span>true</span><span> , <span>false</span><span> ); </span></span></span>
acDocManager->sendStringToExecute(pDoc,
L<span>"_geomap Road "</span><span> , </span>
<span>false</span><span> , <span>true</span><span> , <span>false</span><span> );</span></span></span>
The Latitude and longitude values in the code snippet are for geo-locating the drawing origin to the Golden Gate bridge.
Here is a screenshot :


Leave a Reply