This example shows how to use a math transform to rotate, scale, project, and
mirror a Line entity.
'--------------------------------------------------------------
' Preconditions:
' 1. Create a VB.NET Windows console project.
' 2. Copy and paste this project into the VB.NET 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.
'----------------------------------------------------------------
Imports
System.Collections.Generic
Imports
System.Text
Imports
DraftSight.Interop.dsAutomation
Imports
System.Windows.Forms
Imports
System.Runtime.InteropServices
Imports
System.Diagnostics
Module
Module1
Dim
dsApp As
DraftSight.Interop.dsAutomation.Application
Sub
Main(ByVal
args As
String())
'Connect to DraftSight application
dsApp = ConnectToDraftSight()
If
dsApp Is
Nothing
Then
Return
End
If
dsApp.AbortRunningCommand() ' abort any command currently running in DraftSight to avoid nested commands
'Get
active document
Dim
dsDoc As
Document = dsApp.GetActiveDocument()
If
dsDoc Is
Nothing
Then
MessageBox.Show("There
are no open documents in DraftSight.")
Return
End
If
'Get
math utility
Dim
dsMathUtility As
MathUtility = dsApp.GetMathUtility()
'Create different transformations
Dim
transformations As
Dictionary(Of
String,
MathTransform) = CreateDifferentTransformations(dsMathUtility)
'Draw a
Line
Dim
dsLine As
Line = DrawLine(dsDoc)
TransformLine(dsLine, transformations)
End
Sub
Function
CreateDifferentTransformations(ByVal
dsMathUtility As
MathUtility) As
Dictionary(Of
String,
MathTransform)
Dim
transformations As
New
Dictionary(Of
String,
MathTransform)()
'Create translation transformation
Dim
dsTranslationVector As
MathVector = dsMathUtility.CreateVector(2, 3, 0)
Dim
dsTranslationTransformation As
MathTransform = dsMathUtility.CreateTransformTranslation(dsTranslationVector)
transformations.Add("translation",
dsTranslationTransformation)
'Create scaling transformation
Dim
dsCenterPoint As
MathPoint = dsMathUtility.CreatePoint(0, 0, 0)
Dim
scaleFactor As
Double =
1.2
Dim
dsScalingTransformation As
MathTransform = dsMathUtility.CreateTransformScaling(dsCenterPoint,
scaleFactor)
transformations.Add("scaling",
dsScalingTransformation)
'Create rotation transformation
Dim
dsRotationAxis As
MathVector = dsMathUtility.CreateVector(0, 0, 1)
Dim
rotationAngle As
Double =
Math.PI / 4
'45 degrees in radians
Dim
dsRotationTransformation As
MathTransform = dsMathUtility.CreateTransformRotation(dsCenterPoint,
dsRotationAxis, rotationAngle)
transformations.Add("rotation",
dsRotationTransformation)
'Create mirror transformation about
point
Dim
dsMirrorPoint As
MathPoint = dsMathUtility.CreatePoint(0, 0, 0)
Dim
dsMirrorAboutPointTransformation As
MathTransform = dsMathUtility.CreateTransformMirroringAboutPoint(dsMirrorPoint)
transformations.Add("mirror about
point", dsMirrorAboutPointTransformation)
'Create mirror transformation about
Line
Dim
dsMirrorLine As
MathLine = dsMathUtility.CreateLine(0, 0, 0, 0, 20, 0, _
dsMathLineType_e.dsMathLineType_Bounded)
Dim
dsMirrorAboutLineTransformation As
MathTransform = dsMathUtility.CreateTransformMirroringAboutLine(dsMirrorLine)
transformations.Add("mirror about
Line", dsMirrorAboutLineTransformation)
'Create mirror transformation about
plane
Dim
dsMirrorPlane As
MathPlane = dsMathUtility.CreateZXPlane()
Dim
dsMirrorAboutPlaneTransformation As
MathTransform = dsMathUtility.CreateTransformMirroringAboutPlane(dsMirrorPlane)
transformations.Add("mirror about
plane", dsMirrorAboutPlaneTransformation)
'Create projection transformation
Dim
dsProjectionPlane As
MathPlane = dsMathUtility.CreateYZPlane()
Dim
dsProjectionDirection As
MathVector = dsMathUtility.CreateVector(1, 0, 0)
Dim
dsProjectionTransformation As
MathTransform = dsMathUtility.CreateTransformProjection(dsProjectionPlane,
dsProjectionDirection)
transformations.Add("projection",
dsProjectionTransformation)
Return
transformations
End
Function
Sub
TransformLine(ByVal
dsLine As
Line, ByVal
transformations As
Dictionary(Of
String,
MathTransform))
'Get MathLine property of
Line
entity
Dim
dsMathLine As
MathLine = dsLine.MathLine
'Print mathematical line parameters
PrintMathLineParameters(dsMathLine)
'Transform
Line using the created
transformations
For
Each
transformationItem As
KeyValuePair(Of
String,
MathTransform) 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
Dim
lowerLeftCorner As
Double() =
{-10, -10, 0}
Dim
upperRightCorner As
Double() =
{10, 10, 0}
dsApp.Zoom(dsZoomRange_e.dsZoomRange_Window,
lowerLeftCorner, upperRightCorner)
'Print result mathematical line
parameters
PrintMathLineParameters(dsMathLine)
Next
End
Sub
Function
DrawLine(ByVal
dsDoc As
Document) As
Line
'Get model space
Dim
dsModel As
Model = dsDoc.GetModel()
'Get sketch manager
Dim
dsSketchMgr As
SketchManager = dsModel.GetSketchManager()
'Draw a
Line
Dim
startPoint As
Double() =
{1, 1, 0}
Dim
endPoint As
Double() =
{5, 1, 0}
Return
dsSketchMgr.InsertLine(startPoint(0), startPoint(1), startPoint(2),
endPoint(0), endPoint(1), endPoint(2))
End
Function
Sub
PrintMathTransformation(ByVal
transformationName As
String,
ByVal
dsMathTransformation As
MathTransform)
Debug.Print(Environment.NewLine &
"The " &
transformationName & " transformation:")
Dim
countOfRows As
Integer = 4
Dim
countOfColumns As
Integer = 4
For
i As
Integer = 0
To countOfRows - 1
Dim
rowInformation As
String =
"("
For
j As
Integer = 0
To countOfColumns
- 1
rowInformation += dsMathTransformation.GetElementAt(i,
j).ToString()
If
j <> countOfColumns - 1 Then
rowInformation +=
" , "
End
If
Next
rowInformation +=
");"
Debug.Print(rowInformation)
Next
End
Sub
Sub
PrintMathLineParameters(ByVal
dsMathLine As
MathLine)
Debug.Print(Environment.NewLine &
"Mathematical line parameters")
Debug.Print(String.Format("Type
= {0};", dsMathLine.[GetType]().ToString()))
'Get start point
Dim
dsPoint As
MathPoint = dsMathLine.StartPoint
Dim
x As
Double, y
As
Double, z
As
Double
dsPoint.GetPosition(x, y, z)
Debug.Print(String.Format("StartPoint
({0}, {1}, {2});", x, y, z))
'Get end point
dsPoint = dsMathLine.EndPoint
dsPoint.GetPosition(x, y, z)
Debug.Print(String.Format("EndPoint
({0}, {1}, {2});", x, y, z))
'Get direction
Dim
dsVector As
MathVector = Nothing
dsMathLine.GetDirection(dsVector)
dsVector.GetCoordinates(x, y, z)
Debug.Print(String.Format("Direction
({0}, {1}, {2});", x, y, z))
Debug.Print(String.Format("Length
= {0};", dsMathLine.GetLength().ToString()))
End
Sub
Function
ConnectToDraftSight() As
DraftSight.Interop.dsAutomation.Application
Dim
dsApp As
DraftSight.Interop.dsAutomation.Application =
Nothing
Try
'Connect
to DraftSight
dsApp =
DirectCast(Marshal.GetActiveObject("DraftSight.Application"),
DraftSight.Interop.dsAutomation.Application)
Catch
ex As
Exception
MessageBox.Show("Failed to
connect to DraftSight. Cause: " &
ex.Message)
dsApp = Nothing
End
Try
Return
dsApp
End
Function
End Module