How to get CAD transformation properties (from, to, angle, and scale)


Summary This topic shows how to get the rotation, scale, and translation computer-aided design (CAD) transformation properties and write the properties to the console. This topic uses the Parcels.DWG file (installed with the ArcGIS tutorial); however, the sample code will work with any CAD file.

Getting CAD transformation properties

To get the transformation properties (from, to, angle, and scale) of a CAD file, follow these steps:
  1. Instantiate a CAD Workspace Factory.
  2. Get the file workspace by accessing the directory that contains the CAD file.
  3. Cast the IWorkspace interface to IFeatureWorkspace.
  4. Get the feature classes present in the CAD file. In this example, the Point feature class is obtained from IFeatureWorkspace.
  5. Cast the IFeatureLayer interface to the ICadTransformations interface.
  6. Instantiate two WKS points (which are two-dimensional points). In this example, pWks1 represents the from point and pWks2 represents the to point.
  7. Use the GetTransformation method to obtain the from point, to point, angle, and scale of the CAD layer. 
See the following code:
[C#]
// Set variables for the path and filename.
String nameOfPath = "C:\\data\\CAD";
String nameOfCADFile = "PARCELS.DWG";
//Instantiate a CADWorkspaceFactory.
ESRI.ArcGIS.Geodatabase.IWorkspaceFactory pWorkspaceFact = new
    ESRI.ArcGIS.DataSourcesFile.CadWorkspaceFactory();
//Get the file's workspace.
ESRI.ArcGIS.Geodatabase.IWorkspace pWorkspace = pWorkspaceFact.OpenFromFile
    (nameOfPath, 0);
//Get the feature's workspace.
ESRI.ArcGIS.Geodatabase.IFeatureWorkspace pFeatureWorkspace;
pFeatureWorkspace = (ESRI.ArcGIS.Geodatabase.IFeatureWorkspace)pWorkspace;
//Open the Feature Class interface.
ESRI.ArcGIS.Geodatabase.IFeatureClass pFeatClass =
    pFeatureWorkspace.OpenFeatureClass(System.String.Concat(nameOfCADFile, ":Point"))
    ;
//Get the CAD Feature Layer interface.
ESRI.ArcGIS.Carto.IFeatureLayer pFeatLayer = new ESRI.ArcGIS.Carto.CadFeatureLayer()
    as ESRI.ArcGIS.Carto.IFeatureLayer;
pFeatLayer.FeatureClass = pFeatClass;
//Get the CadTransformations interface. 
ESRI.ArcGIS.DataSourcesFile.ICadTransformations pCadTrans = 
    (ESRI.ArcGIS.DataSourcesFile.ICadTransformations)pFeatLayer;
//Set the WKSPoints, angle, and scale.
ESRI.ArcGIS.esriSystem.WKSPoint[] pWks1 = new ESRI.ArcGIS.esriSystem.WKSPoint[1];
ESRI.ArcGIS.esriSystem.WKSPoint[] pWks2 = new ESRI.ArcGIS.esriSystem.WKSPoint[1];
double dblAngle = 0;
double dblScale = 0;
//Get and print the transformation properties.
pCadTrans.GetTransformation(out pWks1[0], out pWks2[0], out dblAngle, out dblScale);
Console.WriteLine("GetTransformation(from x,y) = {0},{1}", pWks1[0].X, pWks1[0].Y);
Console.WriteLine("GetTransformation(to x,y) = {0},{1}", pWks2[0].X, pWks2[0].Y);
Console.WriteLine("GetTransformation(angle) = {0}", dblAngle);
Console.WriteLine("GetTransformation(scale) = {0}", dblScale);
[VB.NET]
'Set variables for the filename and feature class.
Dim nameOfPath As String = "C:\\data\\CAD"
Dim nameOfCADFile As String = "PARCELS.DWG"
'Instantiate a CADWorkspaceFactory.
Dim pWorkspaceFact As ESRI.ArcGIS.Geodatabase.IWorkspaceFactory = New ESRI.ArcGIS.DataSourcesFile.CadWorkspaceFactory()
'Get the file's workspace.
Dim pWorkspace As ESRI.ArcGIS.Geodatabase.IWorkspace = pWorkspaceFact.OpenFromFile(nameOfPath, 0)
'Get the feature's workspace.
Dim pFeatureWorkspace As ESRI.ArcGIS.Geodatabase.IFeatureWorkspace
pFeatureWorkspace = DirectCast(pWorkspace, ESRI.ArcGIS.Geodatabase.IFeatureWorkspace)
'Open the Feature Class interface.
Dim pFeatClass As ESRI.ArcGIS.Geodatabase.IFeatureClass = pFeatureWorkspace.OpenFeatureClass(System.String.Concat(nameOfCADFile, ":Point"))
'Get the CAD Feature Layer interface.
Dim pFeatLayer As ESRI.ArcGIS.Carto.IFeatureLayer = TryCast(New ESRI.ArcGIS.Carto.CadFeatureLayer(), ESRI.ArcGIS.Carto.IFeatureLayer)
pFeatLayer.FeatureClass = pFeatClass
'Get the CadTransformations interface.
Dim pCadTrans As ESRI.ArcGIS.DataSourcesFile.ICadTransformations = DirectCast(pFeatLayer, ESRI.ArcGIS.DataSourcesFile.ICadTransformations)
'Set the WKSPoints, angle, and scale.
Dim pWks1 As ESRI.ArcGIS.esriSystem.WKSPoint() = New ESRI.ArcGIS.esriSystem.WKSPoint(0) {}
Dim pWks2 As ESRI.ArcGIS.esriSystem.WKSPoint() = New ESRI.ArcGIS.esriSystem.WKSPoint(0) {}
Dim dblAngle As Double = 0
Dim dblScale As Double = 0
'Get and print the transformation properties.
pCadTrans.GetTransformation(pWks1(0), pWks2(0), dblAngle, dblScale)
Console.WriteLine("GetTransformation(from x,y) = {0},{1}", pWks1(0).X, pWks1(0).Y)
Console.WriteLine("GetTransformation(to x,y) = {0},{1}", pWks2(0).X, pWks2(0).Y)
Console.WriteLine("GetTransformation(angle) = {0}", dblAngle)
Console.WriteLine("GetTransformation(scale) = {0}", dblScale)






To use the code in this topic, reference the following assemblies in your Visual Studio project. In the code files, you will need using (C#) or Imports (VB .NET) directives for the corresponding namespaces (given in parenthesis below if different from the assembly name):
Development licensing Deployment licensing
ArcView ArcView
ArcEditor ArcEditor
ArcInfo ArcInfo