Setting CAD transformation properties
To set the CAD transformation properties (from, to, angle, and scale), follow these steps:
-
Instantiate a CAD Workspace Factory.
-
Get the file workspace by accessing the directory that contains the CAD file.
-
Cast the IWorkspace interface to IFeatureWorkspace.
-
Get the feature classes present in the CAD file. In this example, the Point feature class is obtained from IFeatureWorkspace.
-
Cast the IFeatureLayer interface to the ICadTransformations interface.
-
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.
-
Set two double variables representing angle and scale.
-
Use the SetTransform method (containing the from point, to point, angle, and scale parameters) to set the transformation. This transforms the CAD layer accordingly.
-
Use the GetTransform method to get the current transformation settings of the CAD layer.
-
Rotate and set the scale of the desired 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.
ESRI.ArcGIS.esriSystem.WKSPoint[] pWks1=new ESRI.ArcGIS.esriSystem.WKSPoint[1];
ESRI.ArcGIS.esriSystem.WKSPoint[] pWks2=new ESRI.ArcGIS.esriSystem.WKSPoint[1];
//Store the transformation values.
pWks1[0].X=1222999.95;
pWks1[0].Y=177999.94;
pWks2[0].X=2222999.95;
pWks2[0].Y=277999.94;
double dblAngle=90;
double dblScale=2;
//Set rotation, scale, and translation.
pCadTrans.SetTransformation(ref pWks1[0], ref pWks2[0], dblAngle, dblScale);
//Get and print rotation, scale, and translation values.
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 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.
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) {}
'Store the transformation values.
pWks1(0).X=1222999.95
pWks1(0).Y=177999.94
pWks2(0).X=2222999.95
pWks2(0).Y=277999.94
Dim dblAngle As Double=90
Dim dblScale As Double=2
'Set rotation, scale, and translation.
pCadTrans.SetTransformation(pWks1(0), pWks2(0), dblAngle, dblScale)
'Get and print rotation, scale, and translation values.
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):
- ESRI.ArcGIS.System (ESRI.ArcGIS.esriSystem)
- ESRI.ArcGIS.Version (ESRI.ArcGIS)
- ESRI.ArcGIS.Geodatabase
- ESRI.ArcGIS.DataSourcesFile
- ESRI.ArcGIS.Carto
Development licensing | Deployment licensing |
---|---|
ArcGIS Desktop Basic | ArcGIS Desktop Basic |
ArcGIS Desktop Standard | ArcGIS Desktop Standard |
ArcGIS Desktop Advanced | ArcGIS Desktop Advanced |