How to set the points of a two-point CAD transformation


Summary This topic shows how to set the from and to points of a two-point computer-aided design (CAD) transformation and write their 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.

Setting the points of a two-point CAD transformation

To set the points of a two-point CAD transformation, 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 Polyline feature class is obtained from IFeatureWorkspace.
  5. Cast the IFeatureLayer interface to the ICadTransformations interface.
  6. Instantiate four WKS points (which are two-dimensional points). In this example, pWks1 represents the two "from" points and pWks2 represents the two "to" points.
  7. Set the transformation points using the SetFromToTransform method.
  8. Use the GetFromToTransform method to get the current from and to points of the CAD layer.
  9. Control points define the source and destination coordinates, and this example can now be used to georeference a CAD dataset.
See the following code:
[C#]
// Set variables for the path and filename.
String nameOfPath = "C:\\data\\CAD";
String nameOfCADFile = "PARCELS.DWG";
//Set the Workspace Factory. 
ESRI.ArcGIS.Geodatabase.IWorkspaceFactory pWorkspaceFact = new
    ESRI.ArcGIS.DataSourcesFile.CadWorkspaceFactory();
//Open the workspace.
ESRI.ArcGIS.Geodatabase.IWorkspace pWorkspace = pWorkspaceFact.OpenFromFile
    (nameOfPath, 0);
//Set the feature workspace. 
ESRI.ArcGIS.Geodatabase.IFeatureWorkspace pFeatureWorkspace = 
    (ESRI.ArcGIS.Geodatabase.IFeatureWorkspace)pWorkspace;
//Open the Feature Class. 
ESRI.ArcGIS.Geodatabase.IFeatureClass pFeatClass =
    pFeatureWorkspace.OpenFeatureClass(System.String.Concat(nameOfCADFile, 
    ":Polyline"));
//Set the Feature Layer to the Feature Class.
ESRI.ArcGIS.Carto.IFeatureLayer pFeatLayer = new ESRI.ArcGIS.Carto.CadFeatureLayer()
    as ESRI.ArcGIS.Carto.IFeatureLayer;
pFeatLayer.FeatureClass = pFeatClass;
//Set the CadTransformations. 
ESRI.ArcGIS.DataSourcesFile.ICadTransformations pCadTrans = 
    (ESRI.ArcGIS.DataSourcesFile.ICadTransformations)pFeatLayer;
//Set the WKSPoints.
ESRI.ArcGIS.esriSystem.WKSPoint[] pWks1 = new ESRI.ArcGIS.esriSystem.WKSPoint[2];
ESRI.ArcGIS.esriSystem.WKSPoint[] pWks2 = new ESRI.ArcGIS.esriSystem.WKSPoint[2];
//Store the transformation points.
pWks1[0].X = 1222999.95;
pWks1[0].Y = 177999.94;
pWks2[0].X = 1231999.96;
pWks2[0].Y = 184000.01;
pWks1[1].X = 2222999.95;
pWks1[1].Y = 277999.94;
pWks2[1].X = 2231999.96;
pWks2[1].Y = 284000.01;
//Set the from and to points for a two-point transformation.
pCadTrans.SetFromToTransform(ref pWks1[0], ref pWks2[0], ref pWks1[1], ref pWks2[1]);
//Get the from and to points of the two-point transformation of the CadLayer.
pCadTrans.GetFromToTransform(out pWks1[0], out pWks2[0], out pWks1[1], out pWks2[1]);
Console.WriteLine("GetFromToTransform (From1 x,y) = {0},{1}", pWks1[0].X, pWks1[0].Y)
    ;
Console.WriteLine("GetFromToTransform (From2 x,y) = {0},{1}", pWks2[0].X, pWks2[0].Y)
    ;
Console.WriteLine("GetFromToTransform (To1 x,y) = {0},{1}", pWks1[1].X, pWks1[1].Y);
Console.WriteLine("GetFromToTransform (To2 x,y) = {0},{1}", pWks2[1].X, pWks2[1].Y);
[VB.NET]
' Set variables for filename and feature class.
Dim nameOfPath As String = "C:\\arcgis\\ArcTutor\\Editor\\ExerciseData\\EditingCAD"
Dim nameOfCADFile As String = "PARCELS.DWG"
'Set the Workspace Factory.
Dim pWorkspaceFact As ESRI.ArcGIS.Geodatabase.IWorkspaceFactory = New ESRI.ArcGIS.DataSourcesFile.CadWorkspaceFactory()
'Open the workspace.
Dim pWorkspace As ESRI.ArcGIS.Geodatabase.IWorkspace = pWorkspaceFact.OpenFromFile(nameOfPath, 0)
'Set the feature workspace.
Dim pFeatureWorkspace As ESRI.ArcGIS.Geodatabase.IFeatureWorkspace = DirectCast(pWorkspace, ESRI.ArcGIS.Geodatabase.IFeatureWorkspace)
'Open the Feature Class.
Dim pFeatClass As ESRI.ArcGIS.Geodatabase.IFeatureClass = pFeatureWorkspace.OpenFeatureClass(System.String.Concat(nameOfCADFile, ":Polyline"))
'Set the Feature Layer to the Feature Class.
Dim pFeatLayer As ESRI.ArcGIS.Carto.IFeatureLayer = TryCast(New ESRI.ArcGIS.Carto.CadFeatureLayer(), ESRI.ArcGIS.Carto.IFeatureLayer)
pFeatLayer.FeatureClass = pFeatClass
'Set the CadTransformations.
Dim pCadTrans As ESRI.ArcGIS.DataSourcesFile.ICadTransformations = DirectCast(pFeatLayer, ESRI.ArcGIS.DataSourcesFile.ICadTransformations)
'Set the WKSPoints.
Dim pWks1 As ESRI.ArcGIS.esriSystem.WKSPoint() = New ESRI.ArcGIS.esriSystem.WKSPoint(1) {}
Dim pWks2 As ESRI.ArcGIS.esriSystem.WKSPoint() = New ESRI.ArcGIS.esriSystem.WKSPoint(1) {}
'Store the transformation points.
pWks1(0).X = 1222999.95
pWks1(0).Y = 177999.94
pWks2(0).X = 1231999.96
pWks2(0).Y = 184000.01
pWks1(1).X = 2222999.95
pWks1(1).Y = 277999.94
pWks2(1).X = 2231999.96
pWks2(1).Y = 284000.01
'Set the from and to points for a two-point transformation.
pCadTrans.SetFromToTransform(pWks1(0), pWks2(0), pWks1(1), pWks2(1))
'Get the from and to points of the two-point transformation of the CadLayer.
pCadTrans.GetFromToTransform(pWks1(0), pWks2(0), pWks1(1), pWks2(1))
Console.WriteLine("GetFromToTransform (From1 x,y) = {0},{1}", pWks1(0).X, pWks1(0).Y)
Console.WriteLine("GetFromToTransform (From2 x,y) = {0},{1}", pWks2(0).X, pWks2(0).Y)
Console.WriteLine("GetFromToTransform (To1 x,y) = {0},{1}", pWks1(1).X, pWks1(1).Y)
Console.WriteLine("GetFromToTransform (To2 x,y) = {0},{1}", pWks2(1).X, pWks2(1).Y)






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