<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Transformation Matrix in Inventor Programming Forum</title>
    <link>https://forums.autodesk.com/t5/inventor-programming-forum/transformation-matrix/m-p/763283#M172829</link>
    <description>Charles,&lt;BR /&gt;
&lt;BR /&gt;
You're assuming a very limited case in the occurrence and you actually only&lt;BR /&gt;
need three numbers for this.  The assumption you're making is that the&lt;BR /&gt;
occurrence does not have any rotation,  it is placed so that the parts&lt;BR /&gt;
coordinate systems and the assemblies are completely aligned.  The only&lt;BR /&gt;
thing you're defining is the position of the part within the assembly.  If&lt;BR /&gt;
that's all you need then the X, Y, and Z values are enough.  If you need to&lt;BR /&gt;
account for rotation then you could get by with storing an additional six&lt;BR /&gt;
numbers.  (You really need 9, but the other can be derived from these 6.)&lt;BR /&gt;
&lt;BR /&gt;
The last column of the matrix defines the translation.  You can extract the&lt;BR /&gt;
translation using the following:&lt;BR /&gt;
&lt;BR /&gt;
excelSheet.Cells(rownum, colnum).Value = .TransMat.Cell(1,4)&lt;BR /&gt;
excelSheet.Cells(rownum, colnum).Value = .TransMat.Cell(2,4)&lt;BR /&gt;
excelSheet.Cells(rownum, colnum).Value = .TransMat.Cell(3,4)&lt;BR /&gt;
&lt;BR /&gt;
To use these numbers later, create a new matrix using the CreateMatrix&lt;BR /&gt;
method and then using the Cell property of the Matrix object assign the&lt;BR /&gt;
values you saved back into the matrix.  This matrix can then be used to&lt;BR /&gt;
place a new occurrence or modify an existing one.&lt;BR /&gt;
&lt;BR /&gt;
The rotation information is stored in columns 1, 2, and 3.&lt;BR /&gt;
&lt;BR /&gt;
-Brian&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
"Charles Bliss" &lt;CBLISS&gt; wrote in message&lt;BR /&gt;
news:3D8EC268.2070709@cbliss.com...&lt;BR /&gt;
&amp;gt; I am trying to figure out how to take the numbers in the Transformation&lt;BR /&gt;
&amp;gt; Matrix which is in an occurrence and use the numbers in it to create a&lt;BR /&gt;
&amp;gt; new transformation matrix.&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; This is easy enough to do if you can store the matrix itself but I am&lt;BR /&gt;
&amp;gt; trying to store just the four numbers, Length, X, Y and Z then at a&lt;BR /&gt;
&amp;gt; later date, convert these for use in placing a new component in a new&lt;BR /&gt;
&amp;gt; assembly.&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; pseudo code to get the matrix:&lt;BR /&gt;
&amp;gt; Set .TransMat = IVoccur.Transformation&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Will get the transformation, I next write it out to an Excel Spread&lt;BR /&gt;
&amp;gt; Sheet with:&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Length&lt;BR /&gt;
&amp;gt; excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.X&lt;BR /&gt;
&amp;gt; excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Y&lt;BR /&gt;
&amp;gt; excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Z&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Now I want to take the data from the Excel Spread sheet and convert it&lt;BR /&gt;
&amp;gt; back into a Transformation Matrix so I can use it to place a part:&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; oAsmCompDef.Occurrences.Add("C:\Temp\Part1.ipt", oMatrix)&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Where oMatrix is what I want to define from the Spread Sheet data&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; It would be useful if there was a little more information in help on&lt;BR /&gt;
&amp;gt; this subject.  I suppose the other option would be to get all the data&lt;BR /&gt;
&amp;gt; from GetMatrixData and use PutMatrixData&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Anyone know how to do this?&lt;BR /&gt;
&amp;gt; CBliss&lt;BR /&gt;
&amp;gt;&lt;/CBLISS&gt;</description>
    <pubDate>Mon, 23 Sep 2002 06:53:09 GMT</pubDate>
    <dc:creator>Anonymous</dc:creator>
    <dc:date>2002-09-23T06:53:09Z</dc:date>
    <item>
      <title>Transformation Matrix</title>
      <link>https://forums.autodesk.com/t5/inventor-programming-forum/transformation-matrix/m-p/763282#M172828</link>
      <description>I am trying to figure out how to take the numbers in the Transformation &lt;BR /&gt;
Matrix which is in an occurrence and use the numbers in it to create a &lt;BR /&gt;
new transformation matrix.&lt;BR /&gt;
&lt;BR /&gt;
This is easy enough to do if you can store the matrix itself but I am &lt;BR /&gt;
trying to store just the four numbers, Length, X, Y and Z then at a &lt;BR /&gt;
later date, convert these for use in placing a new component in a new &lt;BR /&gt;
assembly.&lt;BR /&gt;
&lt;BR /&gt;
pseudo code to get the matrix:&lt;BR /&gt;
Set .TransMat = IVoccur.Transformation&lt;BR /&gt;
&lt;BR /&gt;
Will get the transformation, I next write it out to an Excel Spread&lt;BR /&gt;
Sheet with:&lt;BR /&gt;
&lt;BR /&gt;
excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Length&lt;BR /&gt;
excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.X&lt;BR /&gt;
excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Y&lt;BR /&gt;
excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Z&lt;BR /&gt;
&lt;BR /&gt;
Now I want to take the data from the Excel Spread sheet and convert it &lt;BR /&gt;
back into a Transformation Matrix so I can use it to place a part:&lt;BR /&gt;
&lt;BR /&gt;
oAsmCompDef.Occurrences.Add("C:\Temp\Part1.ipt", oMatrix)&lt;BR /&gt;
&lt;BR /&gt;
Where oMatrix is what I want to define from the Spread Sheet data&lt;BR /&gt;
&lt;BR /&gt;
It would be useful if there was a little more information in help on &lt;BR /&gt;
this subject.  I suppose the other option would be to get all the data &lt;BR /&gt;
from GetMatrixData and use PutMatrixData&lt;BR /&gt;
&lt;BR /&gt;
Anyone know how to do this?&lt;BR /&gt;
CBliss</description>
      <pubDate>Sun, 22 Sep 2002 23:27:36 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/inventor-programming-forum/transformation-matrix/m-p/763282#M172828</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2002-09-22T23:27:36Z</dc:date>
    </item>
    <item>
      <title>Re: Transformation Matrix</title>
      <link>https://forums.autodesk.com/t5/inventor-programming-forum/transformation-matrix/m-p/763283#M172829</link>
      <description>Charles,&lt;BR /&gt;
&lt;BR /&gt;
You're assuming a very limited case in the occurrence and you actually only&lt;BR /&gt;
need three numbers for this.  The assumption you're making is that the&lt;BR /&gt;
occurrence does not have any rotation,  it is placed so that the parts&lt;BR /&gt;
coordinate systems and the assemblies are completely aligned.  The only&lt;BR /&gt;
thing you're defining is the position of the part within the assembly.  If&lt;BR /&gt;
that's all you need then the X, Y, and Z values are enough.  If you need to&lt;BR /&gt;
account for rotation then you could get by with storing an additional six&lt;BR /&gt;
numbers.  (You really need 9, but the other can be derived from these 6.)&lt;BR /&gt;
&lt;BR /&gt;
The last column of the matrix defines the translation.  You can extract the&lt;BR /&gt;
translation using the following:&lt;BR /&gt;
&lt;BR /&gt;
excelSheet.Cells(rownum, colnum).Value = .TransMat.Cell(1,4)&lt;BR /&gt;
excelSheet.Cells(rownum, colnum).Value = .TransMat.Cell(2,4)&lt;BR /&gt;
excelSheet.Cells(rownum, colnum).Value = .TransMat.Cell(3,4)&lt;BR /&gt;
&lt;BR /&gt;
To use these numbers later, create a new matrix using the CreateMatrix&lt;BR /&gt;
method and then using the Cell property of the Matrix object assign the&lt;BR /&gt;
values you saved back into the matrix.  This matrix can then be used to&lt;BR /&gt;
place a new occurrence or modify an existing one.&lt;BR /&gt;
&lt;BR /&gt;
The rotation information is stored in columns 1, 2, and 3.&lt;BR /&gt;
&lt;BR /&gt;
-Brian&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
"Charles Bliss" &lt;CBLISS&gt; wrote in message&lt;BR /&gt;
news:3D8EC268.2070709@cbliss.com...&lt;BR /&gt;
&amp;gt; I am trying to figure out how to take the numbers in the Transformation&lt;BR /&gt;
&amp;gt; Matrix which is in an occurrence and use the numbers in it to create a&lt;BR /&gt;
&amp;gt; new transformation matrix.&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; This is easy enough to do if you can store the matrix itself but I am&lt;BR /&gt;
&amp;gt; trying to store just the four numbers, Length, X, Y and Z then at a&lt;BR /&gt;
&amp;gt; later date, convert these for use in placing a new component in a new&lt;BR /&gt;
&amp;gt; assembly.&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; pseudo code to get the matrix:&lt;BR /&gt;
&amp;gt; Set .TransMat = IVoccur.Transformation&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Will get the transformation, I next write it out to an Excel Spread&lt;BR /&gt;
&amp;gt; Sheet with:&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Length&lt;BR /&gt;
&amp;gt; excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.X&lt;BR /&gt;
&amp;gt; excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Y&lt;BR /&gt;
&amp;gt; excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Z&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Now I want to take the data from the Excel Spread sheet and convert it&lt;BR /&gt;
&amp;gt; back into a Transformation Matrix so I can use it to place a part:&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; oAsmCompDef.Occurrences.Add("C:\Temp\Part1.ipt", oMatrix)&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Where oMatrix is what I want to define from the Spread Sheet data&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; It would be useful if there was a little more information in help on&lt;BR /&gt;
&amp;gt; this subject.  I suppose the other option would be to get all the data&lt;BR /&gt;
&amp;gt; from GetMatrixData and use PutMatrixData&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Anyone know how to do this?&lt;BR /&gt;
&amp;gt; CBliss&lt;BR /&gt;
&amp;gt;&lt;/CBLISS&gt;</description>
      <pubDate>Mon, 23 Sep 2002 06:53:09 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/inventor-programming-forum/transformation-matrix/m-p/763283#M172829</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2002-09-23T06:53:09Z</dc:date>
    </item>
    <item>
      <title>Re:</title>
      <link>https://forums.autodesk.com/t5/inventor-programming-forum/transformation-matrix/m-p/763284#M172830</link>
      <description>Still a bit foggy on the concept&lt;BR /&gt;
Position:&lt;BR /&gt;
   X=.TransMat.Cell(1,4)&lt;BR /&gt;
   Y=.TransMat.Cell(2,4)&lt;BR /&gt;
   Z=.TransMat.Cell(3,4)&lt;BR /&gt;
So for Rotation, I would need?&lt;BR /&gt;
   aX=.TransMat.Cell(1,1)&lt;BR /&gt;
   bX=.TransMat.Cell(1,2)&lt;BR /&gt;
   cX=.TransMat.Cell(1,3)&lt;BR /&gt;
&lt;BR /&gt;
   aY=.TransMat.Cell(2,1)&lt;BR /&gt;
   bY=.TransMat.Cell(2,2)&lt;BR /&gt;
   cY=.TransMat.Cell(2,3)&lt;BR /&gt;
&lt;BR /&gt;
   aZ=.TransMat.Cell(3,1)&lt;BR /&gt;
   bZ=.TransMat.Cell(3,2)&lt;BR /&gt;
   cZ=.TransMat.Cell(3,3)&lt;BR /&gt;
Or a total of 12 Numbers?&lt;BR /&gt;
&lt;BR /&gt;
What would I collect and how would I derive from 6?&lt;BR /&gt;
&lt;BR /&gt;
What threw me was that there are only Length, X, Y &amp;amp; Z showing in the &lt;BR /&gt;
Matrix which is shown in the Watch Window.  When I use GetMatrixData, it &lt;BR /&gt;
is an array of 16 numbers.  What are the extra 4 for?  Is there anything &lt;BR /&gt;
I can read somewhere which explains this?&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
Brian Ekins wrote:&lt;BR /&gt;
&amp;gt; Charles,&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; You're assuming a very limited case in the occurrence and you actually only&lt;BR /&gt;
&amp;gt; need three numbers for this.  The assumption you're making is that the&lt;BR /&gt;
&amp;gt; occurrence does not have any rotation,  it is placed so that the parts&lt;BR /&gt;
&amp;gt; coordinate systems and the assemblies are completely aligned.  The only&lt;BR /&gt;
&amp;gt; thing you're defining is the position of the part within the assembly.  If&lt;BR /&gt;
&amp;gt; that's all you need then the X, Y, and Z values are enough.  If you need to&lt;BR /&gt;
&amp;gt; account for rotation then you could get by with storing an additional six&lt;BR /&gt;
&amp;gt; numbers.  (You really need 9, but the other can be derived from these 6.)&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; The last column of the matrix defines the translation.  You can extract the&lt;BR /&gt;
&amp;gt; translation using the following:&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; excelSheet.Cells(rownum, colnum).Value = .TransMat.Cell(1,4)&lt;BR /&gt;
&amp;gt; excelSheet.Cells(rownum, colnum).Value = .TransMat.Cell(2,4)&lt;BR /&gt;
&amp;gt; excelSheet.Cells(rownum, colnum).Value = .TransMat.Cell(3,4)&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; To use these numbers later, create a new matrix using the CreateMatrix&lt;BR /&gt;
&amp;gt; method and then using the Cell property of the Matrix object assign the&lt;BR /&gt;
&amp;gt; values you saved back into the matrix.  This matrix can then be used to&lt;BR /&gt;
&amp;gt; place a new occurrence or modify an existing one.&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; The rotation information is stored in columns 1, 2, and 3.&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; -Brian&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; "Charles Bliss" &lt;CBLISS&gt; wrote in message&lt;BR /&gt;
&amp;gt; news:3D8EC268.2070709@cbliss.com...&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt;&amp;gt;I am trying to figure out how to take the numbers in the Transformation&lt;BR /&gt;
&amp;gt;&amp;gt;Matrix which is in an occurrence and use the numbers in it to create a&lt;BR /&gt;
&amp;gt;&amp;gt;new transformation matrix.&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;This is easy enough to do if you can store the matrix itself but I am&lt;BR /&gt;
&amp;gt;&amp;gt;trying to store just the four numbers, Length, X, Y and Z then at a&lt;BR /&gt;
&amp;gt;&amp;gt;later date, convert these for use in placing a new component in a new&lt;BR /&gt;
&amp;gt;&amp;gt;assembly.&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;pseudo code to get the matrix:&lt;BR /&gt;
&amp;gt;&amp;gt;Set .TransMat = IVoccur.Transformation&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;Will get the transformation, I next write it out to an Excel Spread&lt;BR /&gt;
&amp;gt;&amp;gt;Sheet with:&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Length&lt;BR /&gt;
&amp;gt;&amp;gt;excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.X&lt;BR /&gt;
&amp;gt;&amp;gt;excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Y&lt;BR /&gt;
&amp;gt;&amp;gt;excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Z&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;Now I want to take the data from the Excel Spread sheet and convert it&lt;BR /&gt;
&amp;gt;&amp;gt;back into a Transformation Matrix so I can use it to place a part:&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;oAsmCompDef.Occurrences.Add("C:\Temp\Part1.ipt", oMatrix)&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;Where oMatrix is what I want to define from the Spread Sheet data&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;It would be useful if there was a little more information in help on&lt;BR /&gt;
&amp;gt;&amp;gt;this subject.  I suppose the other option would be to get all the data&lt;BR /&gt;
&amp;gt;&amp;gt;from GetMatrixData and use PutMatrixData&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;Anyone know how to do this?&lt;BR /&gt;
&amp;gt;&amp;gt;CBliss&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt;&lt;/CBLISS&gt;</description>
      <pubDate>Mon, 23 Sep 2002 21:32:46 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/inventor-programming-forum/transformation-matrix/m-p/763284#M172830</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2002-09-23T21:32:46Z</dc:date>
    </item>
    <item>
      <title>Re:</title>
      <link>https://forums.autodesk.com/t5/inventor-programming-forum/transformation-matrix/m-p/763285#M172831</link>
      <description>Hi Charles,&lt;BR /&gt;
    Inventor Matrix is not too bad even if not complete as ARX AcGe...&lt;BR /&gt;
&lt;BR /&gt;
Every time you need a new matrix you need to ask Inventor to provide a new&lt;BR /&gt;
one:&lt;BR /&gt;
&lt;BR /&gt;
Public Function NewMatrix()&lt;BR /&gt;
  Set NewMatrix = oApp.TransientGeometry.CreateMatrix&lt;BR /&gt;
End Function&lt;BR /&gt;
&lt;BR /&gt;
To access lines and row use Cell method...&lt;BR /&gt;
&lt;BR /&gt;
Dim oBackSys As Matrix, r As Long, c As Long&lt;BR /&gt;
Set oBackSys = NewMatrix()&lt;BR /&gt;
For r = 1 To 4&lt;BR /&gt;
    For c = 1 To 4&lt;BR /&gt;
        oBackSys.Cell(r, c) = oSys.Cell(r, c)&lt;BR /&gt;
    Next&lt;BR /&gt;
Next&lt;BR /&gt;
&lt;BR /&gt;
Into the matrix you can store all information about position, rotation, ecc.&lt;BR /&gt;
I just noticed Autodesk guys tend to use matrices to store data in a compact&lt;BR /&gt;
way (as array of vectors).&lt;BR /&gt;
&lt;BR /&gt;
You can find some geom info here&lt;BR /&gt;
http://www.jtaylor1142001.net/calcjat/CFrames/Index00.htm&lt;BR /&gt;
&lt;BR /&gt;
Just one thing is a bit tricky... extracting rotation angle from a 3D&lt;BR /&gt;
matrix. This is an example using quaternions (not really tested onestly!!).&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
Public Function PI() As Double&lt;BR /&gt;
  PI = Atn(1) * 4&lt;BR /&gt;
End Function&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
Public Function Equal(ByVal val1 As Double, ByVal val2 As Double, Optional&lt;BR /&gt;
ByVal tol As Double = 0.00001)&lt;BR /&gt;
  Equal = Abs(val1 - val2) &amp;lt; tol&lt;BR /&gt;
End Function&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
Function Acos(x As Double) As Double&lt;BR /&gt;
' Inverse Cosine&lt;BR /&gt;
  If Equal(x, 1) Then&lt;BR /&gt;
    Acos = 0&lt;BR /&gt;
  ElseIf Equal(x, -1) Then&lt;BR /&gt;
    Acos = PI()&lt;BR /&gt;
    'Acos = -PI()&lt;BR /&gt;
  Else&lt;BR /&gt;
    Acos = (PI() / 2#) - Atn(x / Sqr(1# - (x * x)))&lt;BR /&gt;
    'Acos = Atn(x / Sqr(-x * x + 1)) + PI() / 2&lt;BR /&gt;
  End If&lt;BR /&gt;
End Function&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
Public Function GetMatrixRotationAngle(oMat As Matrix, oAxis As Vector) As&lt;BR /&gt;
Double&lt;BR /&gt;
&lt;BR /&gt;
    ' Be sure the matrix has no scale, mirror or shear...&lt;BR /&gt;
    If Not Equal(oMat.Determinant, 1#) Then&lt;BR /&gt;
        MsgBox "Unable to get piece rotation angle"&lt;BR /&gt;
        GetMatrixRotationAngle = 0#&lt;BR /&gt;
        Exit Function&lt;BR /&gt;
    End If&lt;BR /&gt;
&lt;BR /&gt;
    Dim i As Long&lt;BR /&gt;
    For i = 1 To 3&lt;BR /&gt;
        If Equal(oMat.Cell(i, i), 0#) Then&lt;BR /&gt;
            oMat.Cell(i, i) = 0#&lt;BR /&gt;
        End If&lt;BR /&gt;
    Next&lt;BR /&gt;
&lt;BR /&gt;
    Dim M11 As Double, M22 As Double, M33 As Double&lt;BR /&gt;
    M11 = oMat.Cell(1, 1)&lt;BR /&gt;
    M22 = oMat.Cell(2, 2)&lt;BR /&gt;
    M33 = oMat.Cell(3, 3)&lt;BR /&gt;
&lt;BR /&gt;
    Dim trace As Double&lt;BR /&gt;
    trace = M11 + M22 + M33&lt;BR /&gt;
&lt;BR /&gt;
    Dim s As Double&lt;BR /&gt;
    Dim quat(4) As Double&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
    If trace &amp;gt; 0# Then&lt;BR /&gt;
        s = Sqr(trace + 1#)&lt;BR /&gt;
        quat(0) = s * 0.5&lt;BR /&gt;
        s = 0.5 / s&lt;BR /&gt;
        quat(1) = s * (oMat.Cell(3, 2) - oMat.Cell(2, 3))&lt;BR /&gt;
        quat(2) = s * (oMat.Cell(1, 3) - oMat.Cell(3, 1))&lt;BR /&gt;
        quat(3) = s * (oMat.Cell(2, 1) - oMat.Cell(1, 2))&lt;BR /&gt;
    Else&lt;BR /&gt;
       ' find which column has the greater value&lt;BR /&gt;
       Dim j As Long, k As Long&lt;BR /&gt;
       i = 0&lt;BR /&gt;
       If M22 &amp;gt; M11 Then&lt;BR /&gt;
            i = 1&lt;BR /&gt;
       End If&lt;BR /&gt;
       If M33 &amp;gt; oMat.Cell(i + 1, i + 1) Then&lt;BR /&gt;
            i = 2&lt;BR /&gt;
       End If&lt;BR /&gt;
       j = (i + 1) Mod 3&lt;BR /&gt;
       k = (i + 2) Mod 3&lt;BR /&gt;
&lt;BR /&gt;
       s = Sqr(oMat.Cell(i + 1, i + 1) - (oMat.Cell(j + 1, j + 1) +&lt;BR /&gt;
oMat.Cell(k + 1, k + 1)) + 1#)&lt;BR /&gt;
       quat(i + 1) = s * 0.5&lt;BR /&gt;
       s = 0.5 / s&lt;BR /&gt;
       quat(0) = s * (oMat.Cell(k + 1, j + 1) - oMat.Cell(j + 1, k + 1))&lt;BR /&gt;
       quat(j + 1) = s * (oMat.Cell(j + 1, i + 1) + oMat.Cell(i + 1, j + 1))&lt;BR /&gt;
       quat(k + 1) = s * (oMat.Cell(k + 1, i + 1) + oMat.Cell(i + 1, k + 1))&lt;BR /&gt;
    End If&lt;BR /&gt;
&lt;BR /&gt;
    ' Extract the rotation angle&lt;BR /&gt;
    Dim theta As Double&lt;BR /&gt;
    theta = 2# * Acos(quat(0))&lt;BR /&gt;
&lt;BR /&gt;
    If Not Equal(theta, 0#) Then&lt;BR /&gt;
        Dim factor As Double&lt;BR /&gt;
        factor = 1# / Sin(theta * 0.5)&lt;BR /&gt;
&lt;BR /&gt;
        Dim oTmpAxis As Vector&lt;BR /&gt;
        Set oTmpAxis = NewVector(quat(1) * factor, quat(2) * factor, quat(3)&lt;BR /&gt;
* factor)&lt;BR /&gt;
&lt;BR /&gt;
        'Flip direction if necessary&lt;BR /&gt;
        Dim dotp As Double&lt;BR /&gt;
        dotp = oTmpAxis.DotProduct(oAxis)&lt;BR /&gt;
        If dotp &amp;lt; 0# Then&lt;BR /&gt;
            Call oTmpAxis.ScaleBy(-1#)&lt;BR /&gt;
            theta = PI() * 2# - theta&lt;BR /&gt;
        End If&lt;BR /&gt;
    Else&lt;BR /&gt;
        theta = 0#&lt;BR /&gt;
    End If&lt;BR /&gt;
&lt;BR /&gt;
    GetMatrixRotationAngle = theta&lt;BR /&gt;
&lt;BR /&gt;
End Function&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
Hope this helps,&lt;BR /&gt;
&lt;BR /&gt;
Daniele Piazza&lt;BR /&gt;
AutoCAD-ME10 Translator Customers Support&lt;BR /&gt;
QS Informatica&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
"Charles Bliss" &lt;CBLISS&gt; ha scritto nel messaggio&lt;BR /&gt;
news:3D8FF8FE.9090604@cbliss.com...&lt;BR /&gt;
&amp;gt; Still a bit foggy on the concept&lt;BR /&gt;
&amp;gt; Position:&lt;BR /&gt;
&amp;gt;    X=.TransMat.Cell(1,4)&lt;BR /&gt;
&amp;gt;    Y=.TransMat.Cell(2,4)&lt;BR /&gt;
&amp;gt;    Z=.TransMat.Cell(3,4)&lt;BR /&gt;
&amp;gt; So for Rotation, I would need?&lt;BR /&gt;
&amp;gt;    aX=.TransMat.Cell(1,1)&lt;BR /&gt;
&amp;gt;    bX=.TransMat.Cell(1,2)&lt;BR /&gt;
&amp;gt;    cX=.TransMat.Cell(1,3)&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;    aY=.TransMat.Cell(2,1)&lt;BR /&gt;
&amp;gt;    bY=.TransMat.Cell(2,2)&lt;BR /&gt;
&amp;gt;    cY=.TransMat.Cell(2,3)&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;    aZ=.TransMat.Cell(3,1)&lt;BR /&gt;
&amp;gt;    bZ=.TransMat.Cell(3,2)&lt;BR /&gt;
&amp;gt;    cZ=.TransMat.Cell(3,3)&lt;BR /&gt;
&amp;gt; Or a total of 12 Numbers?&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; What would I collect and how would I derive from 6?&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; What threw me was that there are only Length, X, Y &amp;amp; Z showing in the&lt;BR /&gt;
&amp;gt; Matrix which is shown in the Watch Window.  When I use GetMatrixData, it&lt;BR /&gt;
&amp;gt; is an array of 16 numbers.  What are the extra 4 for?  Is there anything&lt;BR /&gt;
&amp;gt; I can read somewhere which explains this?&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Brian Ekins wrote:&lt;BR /&gt;
&amp;gt; &amp;gt; Charles,&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; You're assuming a very limited case in the occurrence and you actually&lt;BR /&gt;
only&lt;BR /&gt;
&amp;gt; &amp;gt; need three numbers for this.  The assumption you're making is that the&lt;BR /&gt;
&amp;gt; &amp;gt; occurrence does not have any rotation,  it is placed so that the parts&lt;BR /&gt;
&amp;gt; &amp;gt; coordinate systems and the assemblies are completely aligned.  The only&lt;BR /&gt;
&amp;gt; &amp;gt; thing you're defining is the position of the part within the assembly.&lt;BR /&gt;
If&lt;BR /&gt;
&amp;gt; &amp;gt; that's all you need then the X, Y, and Z values are enough.  If you need&lt;BR /&gt;
to&lt;BR /&gt;
&amp;gt; &amp;gt; account for rotation then you could get by with storing an additional&lt;BR /&gt;
six&lt;BR /&gt;
&amp;gt; &amp;gt; numbers.  (You really need 9, but the other can be derived from these&lt;BR /&gt;
6.)&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; The last column of the matrix defines the translation.  You can extract&lt;BR /&gt;
the&lt;BR /&gt;
&amp;gt; &amp;gt; translation using the following:&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; excelSheet.Cells(rownum, colnum).Value = .TransMat.Cell(1,4)&lt;BR /&gt;
&amp;gt; &amp;gt; excelSheet.Cells(rownum, colnum).Value = .TransMat.Cell(2,4)&lt;BR /&gt;
&amp;gt; &amp;gt; excelSheet.Cells(rownum, colnum).Value = .TransMat.Cell(3,4)&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; To use these numbers later, create a new matrix using the CreateMatrix&lt;BR /&gt;
&amp;gt; &amp;gt; method and then using the Cell property of the Matrix object assign the&lt;BR /&gt;
&amp;gt; &amp;gt; values you saved back into the matrix.  This matrix can then be used to&lt;BR /&gt;
&amp;gt; &amp;gt; place a new occurrence or modify an existing one.&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; The rotation information is stored in columns 1, 2, and 3.&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; -Brian&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; "Charles Bliss" &lt;CBLISS&gt; wrote in message&lt;BR /&gt;
&amp;gt; &amp;gt; news:3D8EC268.2070709@cbliss.com...&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;I am trying to figure out how to take the numbers in the Transformation&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;Matrix which is in an occurrence and use the numbers in it to create a&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;new transformation matrix.&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;This is easy enough to do if you can store the matrix itself but I am&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;trying to store just the four numbers, Length, X, Y and Z then at a&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;later date, convert these for use in placing a new component in a new&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;assembly.&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;pseudo code to get the matrix:&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;Set .TransMat = IVoccur.Transformation&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;Will get the transformation, I next write it out to an Excel Spread&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;Sheet with:&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Length&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.X&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Y&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Z&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;Now I want to take the data from the Excel Spread sheet and convert it&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;back into a Transformation Matrix so I can use it to place a part:&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;oAsmCompDef.Occurrences.Add("C:\Temp\Part1.ipt", oMatrix)&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;Where oMatrix is what I want to define from the Spread Sheet data&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;It would be useful if there was a little more information in help on&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;this subject.  I suppose the other option would be to get all the data&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;from GetMatrixData and use PutMatrixData&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;Anyone know how to do this?&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;CBliss&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt;&lt;/CBLISS&gt;&lt;/CBLISS&gt;</description>
      <pubDate>Tue, 24 Sep 2002 00:49:05 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/inventor-programming-forum/transformation-matrix/m-p/763285#M172831</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2002-09-24T00:49:05Z</dc:date>
    </item>
    <item>
      <title>Re:</title>
      <link>https://forums.autodesk.com/t5/inventor-programming-forum/transformation-matrix/m-p/763286#M172832</link>
      <description>Charless,&lt;BR /&gt;
in a 3D world you need the 4X4 transformation matrix to have all the&lt;BR /&gt;
"movements" in a 3D world:&lt;BR /&gt;
1. Translation,&lt;BR /&gt;
2. Rotate X-axis&lt;BR /&gt;
3. Rotate Y-axis&lt;BR /&gt;
4. Rotate Z-axis&lt;BR /&gt;
5. Rotate other axis is a combination of 2..4&lt;BR /&gt;
6. X scaling&lt;BR /&gt;
7 Y scaling&lt;BR /&gt;
8 Z scaling&lt;BR /&gt;
9 special scaling, i.e. perspective scaling (vanishing point)&lt;BR /&gt;
&lt;BR /&gt;
I don't know the exact positions of the Cos(X), SIN(X) etc. elements within&lt;BR /&gt;
the matrix anymore but i wouldn't be supprised if they could be found on the&lt;BR /&gt;
web. What i can remember is that the last element mat(4,4) is the overall&lt;BR /&gt;
scaling factor and this should be 1. The last horizontal row is the&lt;BR /&gt;
perspective row i think but this can also be the last column if the matrix&lt;BR /&gt;
is in fact the transposed matrix of the 3D 'movement'.&lt;BR /&gt;
Further more it is important that all the numbers following some rules so&lt;BR /&gt;
that the inverse matrix can be calculated.&lt;BR /&gt;
&lt;BR /&gt;
Anton</description>
      <pubDate>Tue, 24 Sep 2002 09:28:05 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/inventor-programming-forum/transformation-matrix/m-p/763286#M172832</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2002-09-24T09:28:05Z</dc:date>
    </item>
    <item>
      <title>Re:</title>
      <link>https://forums.autodesk.com/t5/inventor-programming-forum/transformation-matrix/m-p/763287#M172833</link>
      <description>Hi Charles,&lt;BR /&gt;
&lt;BR /&gt;
You can get by with just saving this information.&lt;BR /&gt;
&lt;BR /&gt;
X = .TransMat.Cell(1,4)&lt;BR /&gt;
Y = .TransMat.Cell(2,4)&lt;BR /&gt;
Z = .TransMat.Cell(3,4)&lt;BR /&gt;
&lt;BR /&gt;
Xx=.TransMat.Cell(1,1)&lt;BR /&gt;
Xy=.TransMat.Cell(2,1)&lt;BR /&gt;
Xz=.TransMat.Cell(3,1)&lt;BR /&gt;
&lt;BR /&gt;
Yx=.TransMat.Cell(1,2)&lt;BR /&gt;
Yy=.TransMat.Cell(2,2)&lt;BR /&gt;
Yz=.TransMat.Cell(3,2)&lt;BR /&gt;
&lt;BR /&gt;
To restore the matrix.  Create a new matrix using the CreateMatrix method.&lt;BR /&gt;
This will create an identity matrix.  You can put the values you obtained&lt;BR /&gt;
previously back in the same location you obtained them.  You can derive the&lt;BR /&gt;
Z vector from the X and Y that you saved.  (This only works because your&lt;BR /&gt;
only defining rotation and translation with the matrix, not scaling or othe&lt;BR /&gt;
transforms.)  The code below does this.&lt;BR /&gt;
&lt;BR /&gt;
Dim oTG As TransientGeometry&lt;BR /&gt;
Set oTG = oApp.TransientGeometry&lt;BR /&gt;
&lt;BR /&gt;
Dim oXVec As Vector&lt;BR /&gt;
Set oXVec = oTG.CreateVector(Xx, Xy, Xz)&lt;BR /&gt;
&lt;BR /&gt;
Dim oYVec As Vector&lt;BR /&gt;
Set oYVec = oTG.CreateVector(Yx, Yy, Yz)&lt;BR /&gt;
&lt;BR /&gt;
Dim oZVec As Vector&lt;BR /&gt;
Set oZVec = oXVec.CrossProduct(oYVec)&lt;BR /&gt;
&lt;BR /&gt;
Zx = oZVec.X&lt;BR /&gt;
Zy = oZVec.Y&lt;BR /&gt;
Zz = oZVec.Z&lt;BR /&gt;
&lt;BR /&gt;
The Z vector goes into the 3 column.&lt;BR /&gt;
&lt;BR /&gt;
There's a website that has some information on matrices.&lt;BR /&gt;
&lt;BR /&gt;
http://3dhtml.netzministerium.de/2_basic3dmath.html&lt;BR /&gt;
&lt;BR /&gt;
-Brian&lt;BR /&gt;
"Charles Bliss" &lt;CBLISS&gt; wrote in message&lt;BR /&gt;
news:3D8FF8FE.9090604@cbliss.com...&lt;BR /&gt;
&amp;gt; Still a bit foggy on the concept&lt;BR /&gt;
&amp;gt; Position:&lt;BR /&gt;
&amp;gt;    X=.TransMat.Cell(1,4)&lt;BR /&gt;
&amp;gt;    Y=.TransMat.Cell(2,4)&lt;BR /&gt;
&amp;gt;    Z=.TransMat.Cell(3,4)&lt;BR /&gt;
&amp;gt; So for Rotation, I would need?&lt;BR /&gt;
&amp;gt;    aX=.TransMat.Cell(1,1)&lt;BR /&gt;
&amp;gt;    bX=.TransMat.Cell(1,2)&lt;BR /&gt;
&amp;gt;    cX=.TransMat.Cell(1,3)&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;    aY=.TransMat.Cell(2,1)&lt;BR /&gt;
&amp;gt;    bY=.TransMat.Cell(2,2)&lt;BR /&gt;
&amp;gt;    cY=.TransMat.Cell(2,3)&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;    aZ=.TransMat.Cell(3,1)&lt;BR /&gt;
&amp;gt;    bZ=.TransMat.Cell(3,2)&lt;BR /&gt;
&amp;gt;    cZ=.TransMat.Cell(3,3)&lt;BR /&gt;
&amp;gt; Or a total of 12 Numbers?&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; What would I collect and how would I derive from 6?&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; What threw me was that there are only Length, X, Y &amp;amp; Z showing in the&lt;BR /&gt;
&amp;gt; Matrix which is shown in the Watch Window.  When I use GetMatrixData, it&lt;BR /&gt;
&amp;gt; is an array of 16 numbers.  What are the extra 4 for?  Is there anything&lt;BR /&gt;
&amp;gt; I can read somewhere which explains this?&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt;&lt;BR /&gt;
&amp;gt; Brian Ekins wrote:&lt;BR /&gt;
&amp;gt; &amp;gt; Charles,&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; You're assuming a very limited case in the occurrence and you actually&lt;BR /&gt;
only&lt;BR /&gt;
&amp;gt; &amp;gt; need three numbers for this.  The assumption you're making is that the&lt;BR /&gt;
&amp;gt; &amp;gt; occurrence does not have any rotation,  it is placed so that the parts&lt;BR /&gt;
&amp;gt; &amp;gt; coordinate systems and the assemblies are completely aligned.  The only&lt;BR /&gt;
&amp;gt; &amp;gt; thing you're defining is the position of the part within the assembly.&lt;BR /&gt;
If&lt;BR /&gt;
&amp;gt; &amp;gt; that's all you need then the X, Y, and Z values are enough.  If you need&lt;BR /&gt;
to&lt;BR /&gt;
&amp;gt; &amp;gt; account for rotation then you could get by with storing an additional&lt;BR /&gt;
six&lt;BR /&gt;
&amp;gt; &amp;gt; numbers.  (You really need 9, but the other can be derived from these&lt;BR /&gt;
6.)&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; The last column of the matrix defines the translation.  You can extract&lt;BR /&gt;
the&lt;BR /&gt;
&amp;gt; &amp;gt; translation using the following:&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; excelSheet.Cells(rownum, colnum).Value = .TransMat.Cell(1,4)&lt;BR /&gt;
&amp;gt; &amp;gt; excelSheet.Cells(rownum, colnum).Value = .TransMat.Cell(2,4)&lt;BR /&gt;
&amp;gt; &amp;gt; excelSheet.Cells(rownum, colnum).Value = .TransMat.Cell(3,4)&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; To use these numbers later, create a new matrix using the CreateMatrix&lt;BR /&gt;
&amp;gt; &amp;gt; method and then using the Cell property of the Matrix object assign the&lt;BR /&gt;
&amp;gt; &amp;gt; values you saved back into the matrix.  This matrix can then be used to&lt;BR /&gt;
&amp;gt; &amp;gt; place a new occurrence or modify an existing one.&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; The rotation information is stored in columns 1, 2, and 3.&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; -Brian&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt; "Charles Bliss" &lt;CBLISS&gt; wrote in message&lt;BR /&gt;
&amp;gt; &amp;gt; news:3D8EC268.2070709@cbliss.com...&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;I am trying to figure out how to take the numbers in the Transformation&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;Matrix which is in an occurrence and use the numbers in it to create a&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;new transformation matrix.&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;This is easy enough to do if you can store the matrix itself but I am&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;trying to store just the four numbers, Length, X, Y and Z then at a&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;later date, convert these for use in placing a new component in a new&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;assembly.&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;pseudo code to get the matrix:&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;Set .TransMat = IVoccur.Transformation&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;Will get the transformation, I next write it out to an Excel Spread&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;Sheet with:&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Length&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.X&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Y&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Z&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;Now I want to take the data from the Excel Spread sheet and convert it&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;back into a Transformation Matrix so I can use it to place a part:&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;oAsmCompDef.Occurrences.Add("C:\Temp\Part1.ipt", oMatrix)&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;Where oMatrix is what I want to define from the Spread Sheet data&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;It would be useful if there was a little more information in help on&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;this subject.  I suppose the other option would be to get all the data&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;from GetMatrixData and use PutMatrixData&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;Anyone know how to do this?&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;CBliss&lt;BR /&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt; &amp;gt;&lt;BR /&gt;
&amp;gt;&lt;/CBLISS&gt;&lt;/CBLISS&gt;</description>
      <pubDate>Tue, 24 Sep 2002 15:54:07 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/inventor-programming-forum/transformation-matrix/m-p/763287#M172833</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2002-09-24T15:54:07Z</dc:date>
    </item>
    <item>
      <title>Re:</title>
      <link>https://forums.autodesk.com/t5/inventor-programming-forum/transformation-matrix/m-p/763288#M172834</link>
      <description>Thanks all, it reminds me of things I did in AutoCAD to develop the &lt;BR /&gt;
correct viewport sizes from solids. I slimmd on this one.  I set up an &lt;BR /&gt;
array of doubles (0 to 15) which I filled using GetMatrixData(dblArray) &lt;BR /&gt;
  I then  concatenated it into a string with deliminators and put the &lt;BR /&gt;
resultant string into an Excel cell.  To later place the component, I &lt;BR /&gt;
parse the string back into an array of doubles and use PutMatrixData to &lt;BR /&gt;
populate the matrix.&lt;BR /&gt;
&lt;BR /&gt;
In the process, I discovered that if you put in one wrong number, you &lt;BR /&gt;
can get some pretty interesting geometry.&lt;BR /&gt;
&lt;BR /&gt;
Thanks to all for all the really great information.  I'm sure it will &lt;BR /&gt;
come in handy for other things as well.&lt;BR /&gt;
&lt;BR /&gt;
Brian Ekins wrote:&lt;BR /&gt;
&amp;gt; Hi Charles,&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; You can get by with just saving this information.&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; X = .TransMat.Cell(1,4)&lt;BR /&gt;
&amp;gt; Y = .TransMat.Cell(2,4)&lt;BR /&gt;
&amp;gt; Z = .TransMat.Cell(3,4)&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; Xx=.TransMat.Cell(1,1)&lt;BR /&gt;
&amp;gt; Xy=.TransMat.Cell(2,1)&lt;BR /&gt;
&amp;gt; Xz=.TransMat.Cell(3,1)&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; Yx=.TransMat.Cell(1,2)&lt;BR /&gt;
&amp;gt; Yy=.TransMat.Cell(2,2)&lt;BR /&gt;
&amp;gt; Yz=.TransMat.Cell(3,2)&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; To restore the matrix.  Create a new matrix using the CreateMatrix method.&lt;BR /&gt;
&amp;gt; This will create an identity matrix.  You can put the values you obtained&lt;BR /&gt;
&amp;gt; previously back in the same location you obtained them.  You can derive the&lt;BR /&gt;
&amp;gt; Z vector from the X and Y that you saved.  (This only works because your&lt;BR /&gt;
&amp;gt; only defining rotation and translation with the matrix, not scaling or othe&lt;BR /&gt;
&amp;gt; transforms.)  The code below does this.&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; Dim oTG As TransientGeometry&lt;BR /&gt;
&amp;gt; Set oTG = oApp.TransientGeometry&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; Dim oXVec As Vector&lt;BR /&gt;
&amp;gt; Set oXVec = oTG.CreateVector(Xx, Xy, Xz)&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; Dim oYVec As Vector&lt;BR /&gt;
&amp;gt; Set oYVec = oTG.CreateVector(Yx, Yy, Yz)&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; Dim oZVec As Vector&lt;BR /&gt;
&amp;gt; Set oZVec = oXVec.CrossProduct(oYVec)&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; Zx = oZVec.X&lt;BR /&gt;
&amp;gt; Zy = oZVec.Y&lt;BR /&gt;
&amp;gt; Zz = oZVec.Z&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; The Z vector goes into the 3 column.&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; There's a website that has some information on matrices.&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; http://3dhtml.netzministerium.de/2_basic3dmath.html&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; -Brian&lt;BR /&gt;
&amp;gt; "Charles Bliss" &lt;CBLISS&gt; wrote in message&lt;BR /&gt;
&amp;gt; news:3D8FF8FE.9090604@cbliss.com...&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt;&amp;gt;Still a bit foggy on the concept&lt;BR /&gt;
&amp;gt;&amp;gt;Position:&lt;BR /&gt;
&amp;gt;&amp;gt;   X=.TransMat.Cell(1,4)&lt;BR /&gt;
&amp;gt;&amp;gt;   Y=.TransMat.Cell(2,4)&lt;BR /&gt;
&amp;gt;&amp;gt;   Z=.TransMat.Cell(3,4)&lt;BR /&gt;
&amp;gt;&amp;gt;So for Rotation, I would need?&lt;BR /&gt;
&amp;gt;&amp;gt;   aX=.TransMat.Cell(1,1)&lt;BR /&gt;
&amp;gt;&amp;gt;   bX=.TransMat.Cell(1,2)&lt;BR /&gt;
&amp;gt;&amp;gt;   cX=.TransMat.Cell(1,3)&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;   aY=.TransMat.Cell(2,1)&lt;BR /&gt;
&amp;gt;&amp;gt;   bY=.TransMat.Cell(2,2)&lt;BR /&gt;
&amp;gt;&amp;gt;   cY=.TransMat.Cell(2,3)&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;   aZ=.TransMat.Cell(3,1)&lt;BR /&gt;
&amp;gt;&amp;gt;   bZ=.TransMat.Cell(3,2)&lt;BR /&gt;
&amp;gt;&amp;gt;   cZ=.TransMat.Cell(3,3)&lt;BR /&gt;
&amp;gt;&amp;gt;Or a total of 12 Numbers?&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;What would I collect and how would I derive from 6?&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;What threw me was that there are only Length, X, Y &amp;amp; Z showing in the&lt;BR /&gt;
&amp;gt;&amp;gt;Matrix which is shown in the Watch Window.  When I use GetMatrixData, it&lt;BR /&gt;
&amp;gt;&amp;gt;is an array of 16 numbers.  What are the extra 4 for?  Is there anything&lt;BR /&gt;
&amp;gt;&amp;gt;I can read somewhere which explains this?&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;Brian Ekins wrote:&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;Charles,&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;You're assuming a very limited case in the occurrence and you actually&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; only&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;need three numbers for this.  The assumption you're making is that the&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;occurrence does not have any rotation,  it is placed so that the parts&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;coordinate systems and the assemblies are completely aligned.  The only&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;thing you're defining is the position of the part within the assembly.&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; If&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;that's all you need then the X, Y, and Z values are enough.  If you need&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; to&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;account for rotation then you could get by with storing an additional&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; six&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;numbers.  (You really need 9, but the other can be derived from these&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; 6.)&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;The last column of the matrix defines the translation.  You can extract&lt;BR /&gt;
&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; the&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;translation using the following:&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;excelSheet.Cells(rownum, colnum).Value = .TransMat.Cell(1,4)&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;excelSheet.Cells(rownum, colnum).Value = .TransMat.Cell(2,4)&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;excelSheet.Cells(rownum, colnum).Value = .TransMat.Cell(3,4)&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;To use these numbers later, create a new matrix using the CreateMatrix&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;method and then using the Cell property of the Matrix object assign the&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;values you saved back into the matrix.  This matrix can then be used to&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;place a new occurrence or modify an existing one.&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;The rotation information is stored in columns 1, 2, and 3.&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;-Brian&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;"Charles Bliss" &lt;CBLISS&gt; wrote in message&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;news:3D8EC268.2070709@cbliss.com...&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;I am trying to figure out how to take the numbers in the Transformation&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;Matrix which is in an occurrence and use the numbers in it to create a&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;new transformation matrix.&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;This is easy enough to do if you can store the matrix itself but I am&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;trying to store just the four numbers, Length, X, Y and Z then at a&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;later date, convert these for use in placing a new component in a new&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;assembly.&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;pseudo code to get the matrix:&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;Set .TransMat = IVoccur.Transformation&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;Will get the transformation, I next write it out to an Excel Spread&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;Sheet with:&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Length&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.X&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Y&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;excelSheet.Cells(rownum, colnum).Value = .TransMat.Translation.Z&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;Now I want to take the data from the Excel Spread sheet and convert it&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;back into a Transformation Matrix so I can use it to place a part:&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;oAsmCompDef.Occurrences.Add("C:\Temp\Part1.ipt", oMatrix)&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;Where oMatrix is what I want to define from the Spread Sheet data&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;It would be useful if there was a little more information in help on&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;this subject.  I suppose the other option would be to get all the data&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;from GetMatrixData and use PutMatrixData&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;Anyone know how to do this?&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;CBliss&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt;&amp;gt;&amp;gt;&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt;&lt;/CBLISS&gt;&lt;/CBLISS&gt;</description>
      <pubDate>Tue, 24 Sep 2002 18:22:51 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/inventor-programming-forum/transformation-matrix/m-p/763288#M172834</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2002-09-24T18:22:51Z</dc:date>
    </item>
    <item>
      <title>Re:</title>
      <link>https://forums.autodesk.com/t5/inventor-programming-forum/transformation-matrix/m-p/763289#M172835</link>
      <description>&amp;gt;In the process, I discovered that if you put in one wrong number, you&lt;BR /&gt;
&amp;gt;can get some pretty interesting geometry.&lt;BR /&gt;
&lt;BR /&gt;
He, Charles found new purposes for Inventor: ART.</description>
      <pubDate>Wed, 25 Sep 2002 09:46:12 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/inventor-programming-forum/transformation-matrix/m-p/763289#M172835</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2002-09-25T09:46:12Z</dc:date>
    </item>
    <item>
      <title>Re:</title>
      <link>https://forums.autodesk.com/t5/inventor-programming-forum/transformation-matrix/m-p/763290#M172836</link>
      <description>Go ahead, place a part in an assembly using a messed up matrix.&lt;BR /&gt;
&lt;BR /&gt;
Anton van Buiten wrote:&lt;BR /&gt;
&amp;gt;&amp;gt;In the process, I discovered that if you put in one wrong number, you&lt;BR /&gt;
&amp;gt;&amp;gt;can get some pretty interesting geometry.&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; He, Charles found new purposes for Inventor: ART.&lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt; &lt;BR /&gt;
&amp;gt;</description>
      <pubDate>Wed, 25 Sep 2002 17:53:02 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/inventor-programming-forum/transformation-matrix/m-p/763290#M172836</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2002-09-25T17:53:02Z</dc:date>
    </item>
  </channel>
</rss>

