This example shows how to use a math transform to rotate, scale, project, and
mirror a Line entity.
//-------------------------------------------------------------------
// Preconditions:
// 1. Create a C# Windows console project.
// 2. Copy and paste this project into the C# IDE.
// 3. Add a reference to:
// install_dir\APISDK\tlb\DraftSight.Interop.dsAutomation.
// 4. Add references to System and System.Windows.Forms.
// 5. Start DraftSight.
// 6. Run the macro.
//
// Postconditions:
// 1. A Line is drawn, rotated, scaled, projected, and
// mirrored.
// 2. The transformation parameters are printed before each
// transformation.
// 3. The Line parameters are printed before and after
// each transformation.
//-------------------------------------------------------------------
using
System;
using
System.Collections.Generic;
using
System.Text;
using
DraftSight.Interop.dsAutomation;
using
System.Windows.Forms;
using
System.Runtime.InteropServices;
using
System.Diagnostics;
namespace
MathFunctionality
{
class
Program
{
private
static
DraftSight.Interop.dsAutomation.Application
dsApp;
static
void Main(string[]
args)
{
//Connect to DraftSight
application
dsApp = ConnectToDraftSight();
if
(null ==
dsApp)
{
return;
}
dsApp.AbortRunningCommand(); // abort any command currently running in DraftSight to avoid nested commands
//Get active document
Document
dsDoc = dsApp.GetActiveDocument();
if
(null ==
dsDoc)
{
MessageBox.Show("There
are no open documents in DraftSight.");
return;
}
//Get math utility
MathUtility
dsMathUtility = dsApp.GetMathUtility();
//Create different
transformations
Dictionary<string,
MathTransform>
transformations = CreateDifferentTransformations(dsMathUtility);
//Draw a
Line
Line
dsLine = DrawLine(dsDoc);
TransformLine(dsLine, transformations);
}
private
static
Dictionary<string,
MathTransform>
CreateDifferentTransformations(MathUtility
dsMathUtility)
{
Dictionary<string,
MathTransform>
transformations = new
Dictionary<string,
MathTransform>();
//Create translation
transformation
MathVector
dsTranslationVector = dsMathUtility.CreateVector(2, 3, 0);
MathTransform
dsTranslationTransformation = dsMathUtility.CreateTransformTranslation(dsTranslationVector);
transformations.Add("translation",
dsTranslationTransformation);
//Create scaling transformation
MathPoint
dsCenterPoint = dsMathUtility.CreatePoint(0, 0, 0);
double
scaleFactor = 1.2;
MathTransform
dsScalingTransformation = dsMathUtility.CreateTransformScaling(dsCenterPoint,
scaleFactor);
transformations.Add("scaling",
dsScalingTransformation);
//Create rotation
transformation
MathVector
dsRotationAxis = dsMathUtility.CreateVector(0, 0, 1);
double
rotationAngle = Math.PI
/ 4; //45 degrees in radians
MathTransform
dsRotationTransformation = dsMathUtility.CreateTransformRotation(dsCenterPoint,
dsRotationAxis,
rotationAngle);
transformations.Add("rotation",
dsRotationTransformation);
//Create mirror transformation
about point
MathPoint
dsMirrorPoint = dsMathUtility.CreatePoint(0, 0, 0);
MathTransform
dsMirrorAboutPointTransformation = dsMathUtility.CreateTransformMirroringAboutPoint(dsMirrorPoint);
transformations.Add("mirror
about point",
dsMirrorAboutPointTransformation);
//Create mirror transformation
about Line
MathLine
dsMirrorLine = dsMathUtility.CreateLine(0, 0, 0, 0, 20, 0,
dsMathLineType_e.dsMathLineType_Bounded);
MathTransform
dsMirrorAboutLineTransformation = dsMathUtility.CreateTransformMirroringAboutLine(dsMirrorLine);
transformations.Add("mirror
about Line",
dsMirrorAboutLineTransformation);
//Create mirror transformation
about plane
MathPlane
dsMirrorPlane = dsMathUtility.CreateZXPlane();
MathTransform
dsMirrorAboutPlaneTransformation = dsMathUtility.CreateTransformMirroringAboutPlane(dsMirrorPlane);
transformations.Add("mirror
about plane",
dsMirrorAboutPlaneTransformation);
//Create projection
transformation
MathPlane
dsProjectionPlane = dsMathUtility.CreateYZPlane();
MathVector
dsProjectionDirection = dsMathUtility.CreateVector(1, 0, 0);
MathTransform
dsProjectionTransformation = dsMathUtility.CreateTransformProjection(dsProjectionPlane,
dsProjectionDirection);
transformations.Add("projection",
dsProjectionTransformation);
return
transformations;
}
private
static
void
TransformLine(Line
dsLine, Dictionary<string,
MathTransform>
transformations)
{
//Get MathLine property of
Line
entity
MathLine
dsMathLine = dsLine.MathLine;
//Print mathematical line parameters
PrintMathLineParameters(dsMathLine);
//Transform
Line using the
created transformations
foreach
(KeyValuePair<string,
MathTransform>
transformationItem in
transformations)
{
//Print transformation
parameters
PrintMathTransformation(transformationItem.Key,
transformationItem.Value);
//Transform mathematical line
dsMathLine.TransformBy(transformationItem.Value);
//Update
Line
dsLine.MathLine =
dsMathLine;
MessageBox.Show("The
" + transformationItem.Key +
" transformation has been applied to a Line.");
//Zoom by window
double[]
lowerLeftCorner = { -10, -10, 0 };
double[]
upperRightCorner = { 10, 10, 0 };
dsApp.Zoom(dsZoomRange_e.dsZoomRange_Window,
lowerLeftCorner, upperRightCorner);
//Print result mathematical line
parameters
PrintMathLineParameters(dsMathLine);
}
}
private
static
Line
DrawLine(Document
dsDoc)
{
//Get model space
Model
dsModel = dsDoc.GetModel();
//Get sketch manager
SketchManager
dsSketchMgr = dsModel.GetSketchManager();
//Draw a
Line
double[]
startPoint = { 1, 1, 0 };
double[]
endPoint = { 5, 1, 0 };
return
dsSketchMgr.InsertLine(startPoint[0], startPoint[1], startPoint[2],
endPoint[0], endPoint[1],
endPoint[2]);
}
private
static
void
PrintMathTransformation(string
transformationName, MathTransform
dsMathTransformation)
{
Debug.Print(Environment.NewLine
+ "The "
+ transformationName + " transformation:");
int
countOfRows = 4;
int
countOfColumns = 4;
for
(int i = 0;
i < countOfRows; ++i)
{
string
rowInformation = "(";
for
(int j = 0;
j < countOfColumns; ++j)
{
rowInformation += dsMathTransformation.GetElementAt(i,
j);
if
(j != countOfColumns - 1)
{
rowInformation +=
" , ";
}
}
rowInformation += ");";
Debug.Print(rowInformation);
}
}
private
static
void
PrintMathLineParameters(MathLine
dsMathLine)
{
Debug.Print(Environment.NewLine
+ "Mathematical line parameters");
Debug.Print(string.Format("Type
= {0};", dsMathLine.GetType().ToString()));
//Get start point
MathPoint
dsPoint = dsMathLine.StartPoint;
double
x, y, z;
dsPoint.GetPosition(out
x, out y,
out z);
Debug.Print(string.Format("StartPoint
({0}, {1}, {2});", x, y, z));
//Get end point
dsPoint = dsMathLine.EndPoint;
dsPoint.GetPosition(out
x, out y,
out z);
Debug.Print(string.Format("EndPoint
({0}, {1}, {2});", x, y, z));
//Get direction
MathVector
dsVector;
dsMathLine.GetDirection(out
dsVector);
dsVector.GetCoordinates(out
x, out y,
out z);
Debug.Print(string.Format("Direction
({0}, {1}, {2});", x, y, z));
Debug.Print(string.Format("Length
= {0};", dsMathLine.GetLength().ToString()));
}
private
static
DraftSight.Interop.dsAutomation.Application
ConnectToDraftSight()
{
DraftSight.Interop.dsAutomation.Application
dsApp = null;
try
{
//Connect to DraftSight
dsApp = (DraftSight.Interop.dsAutomation.Application)Marshal.GetActiveObject("DraftSight.Application");
}
catch
(Exception
ex)
{
MessageBox.Show("Failed
to connect to DraftSight. Cause: " +
ex.Message);
dsApp = null;
}
return
dsApp;
}
}
}