<?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: Get matrix3d from Database in .NET Forum</title>
    <link>https://forums.autodesk.com/t5/net-forum/get-matrix3d-from-database/m-p/3322579#M57327</link>
    <description>&lt;P&gt;yeap. now i know the difference.&lt;/P&gt;&lt;P&gt;thx, again&lt;/P&gt;</description>
    <pubDate>Wed, 08 Feb 2012 09:48:37 GMT</pubDate>
    <dc:creator>SergeyShevtsov</dc:creator>
    <dc:date>2012-02-08T09:48:37Z</dc:date>
    <item>
      <title>Get matrix3d from Database</title>
      <link>https://forums.autodesk.com/t5/net-forum/get-matrix3d-from-database/m-p/3322241#M57324</link>
      <description>&lt;P&gt;﻿﻿Hello everyone.&lt;BR /&gt;i gets some coordinates when i use MdiActiveDocument:&lt;/P&gt;&lt;PRE&gt;Document doc = Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
//
...
foreach (ObjectId oi in ids)
{
    Line ln = (Line) tr.GetObject(oi, OpenMode.ForWrite);
    Matrix3d m = doc.Editor.CurrentCoordinateSystem.Inverse();
    Point3d pt = ln.StartPoint.TransformBy(m);
    //some coordinates calculations
    ...
}&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;But in case when i dont use&amp;nbsp; MdiActiveDocument (i have only Database), i cant gets matrix m. Can i get this matrix "m" from db only?&amp;nbsp;&lt;/P&gt;&lt;P&gt;am doing the next:&lt;/P&gt;&lt;PRE&gt;Database db = new Database(false, true);
db.ReadDwgFile("C:\\test.dwg", System.IO.FileShare.ReadWrite, true, "");

...
Matrix3d m = getUcsMatrix(db);
using (Transaction trLn = db.TransactionManager.StartTransaction())
                {
                    try
                    {
                        BlockTable bt = (BlockTable)trLn.GetObject(db.BlockTableId, OpenMode.ForWrite);
                        BlockTableRecord btr = (BlockTableRecord)trLn.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                        
                        foreach (ObjectId objId in btr)
                        {
                            Entity ent = (Entity)trLn.GetObject(objId, OpenMode.ForRead);

                            if (ent.GetType().Name == "Line")
                            {
                                Line ln = ent as Line;
                                //if (ln.Layer == "0")
                                {
                                  
                                    geoPoint = ln.StartPoint.TransformBy(m);
                                    
                                    sRiga = geoPoint.X.ToString() + "," + geoPoint.Y.ToString() + ",";
                                    geoPoint = ln.EndPoint.TransformBy(m);
                                    sRiga += geoPoint.X.ToString() + "," + geoPoint.Y.ToString() + ";";

                                    StreamWriter sw = new StreamWriter(FO, true);
                                    sw.WriteLine("COORDINATE;");
                                    sw.WriteLine(sRiga);
                                    sw.Close();
                                    StreamWriter swFO = new StreamWriter(FOS, true);
                                    swFO.WriteLine("COORDINATE;");
                                    swFO.WriteLine(sRiga);
                                    swFO.Close();
                                }
                            }
                        }
                    }
                    catch (SystemException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                    trLn.Commit();
                }

public static Matrix3d getUcsMatrix (Database db)
        {
            System.Diagnostics.Debug.Assert(db != null);
            Point3d toOrigin;
            Vector3d toXAxis, toYAxis, toZAxis;

            toOrigin = db.Ucsorg;
            toXAxis = db.Ucsxdir;
            toYAxis = db.Ucsydir;
            toZAxis = toXAxis.CrossProduct(toYAxis);

            return Matrix3d.AlignCoordinateSystem(Point3d.Origin, Vector3d.XAxis, Vector3d.YAxis, Vector3d.ZAxis, toOrigin, toXAxis, toYAxis, toZAxis).Inverse(); 
        }&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;Maybe i have some errors in the code?&amp;nbsp;&lt;BR /&gt;i have a little idea, maybe its wrong that i opened Entity object "forRead" only?&lt;BR /&gt;But if i set OpenMode.ForWrite... i have error(&lt;BR /&gt;and with Database my code is not working(&lt;BR /&gt;i wrote 2 variants of code&lt;BR /&gt;- with Editor&lt;BR /&gt;- without Editor&lt;BR /&gt;u can compile them and test on drawing, and u will see that results are differents(&lt;BR /&gt;P.S.: am working only in a Model Space&lt;BR /&gt;&lt;BR /&gt;in first case we have (That's the result of a successful transformation to my UCS):&lt;BR /&gt;COORDINATE;&lt;BR /&gt;1516200.2924,5031892.933,1516385.5636,5031892.8813;&lt;BR /&gt;COORDINATE;&lt;BR /&gt;1516354.1415,5032032.582,1516354.1834,5032182.7509;&lt;BR /&gt;COORDINATE;&lt;BR /&gt;1516210.8185,5032032.622,1516354.1415,5032032.582;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;in second case we have&amp;nbsp;(That's the result of a unsuccessful transformation to my UCS):&lt;BR /&gt;COORDINATE;&lt;BR /&gt;387.0067,315.2043,530.3297,315.2043;&lt;BR /&gt;COORDINATE;&lt;BR /&gt;530.3297,315.2043,530.3297,465.3732;&lt;BR /&gt;COORDINATE;&lt;BR /&gt;376.5197,175.5124,561.7909,175.5124;&lt;/P&gt;</description>
      <pubDate>Wed, 08 Feb 2012 01:15:41 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/get-matrix3d-from-database/m-p/3322241#M57324</guid>
      <dc:creator>SergeyShevtsov</dc:creator>
      <dc:date>2012-02-08T01:15:41Z</dc:date>
    </item>
    <item>
      <title>Re: Get matrix3d from Database</title>
      <link>https://forums.autodesk.com/t5/net-forum/get-matrix3d-from-database/m-p/3322289#M57325</link>
      <description>&lt;P&gt;i think i know where is the problem:&lt;/P&gt;&lt;P&gt;when i use&lt;/P&gt;&lt;PRE&gt;Matrix3d m = getUcsMatrix(db);&lt;/PRE&gt;&lt;P&gt;getUcsMatrix retun for me m = Matrix3d.Identity;&lt;/P&gt;&lt;P&gt;thats why i cant trnslate coordinates.&lt;/P&gt;&lt;P&gt;But the other question why&amp;nbsp;getUcsMatrix return wrong matrix?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 08 Feb 2012 02:13:49 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/get-matrix3d-from-database/m-p/3322289#M57325</guid>
      <dc:creator>SergeyShevtsov</dc:creator>
      <dc:date>2012-02-08T02:13:49Z</dc:date>
    </item>
    <item>
      <title>Re: Get matrix3d from Database</title>
      <link>https://forums.autodesk.com/t5/net-forum/get-matrix3d-from-database/m-p/3322541#M57326</link>
      <description>&lt;P&gt;&lt;SPAN&gt;&lt;SPAN class="hps"&gt;I think&lt;/SPAN&gt; &lt;SPAN class="hps"&gt;you already&lt;/SPAN&gt; &lt;SPAN class="hps"&gt;knew that&lt;/SPAN&gt; &lt;SPAN class="hps"&gt;the difference&lt;/SPAN&gt; &lt;SPAN class="hps"&gt;between active UCS and&lt;/SPAN&gt; &lt;SPAN class="hps"&gt;named&lt;/SPAN&gt; UCS&lt;SPAN class="hps"&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 08 Feb 2012 09:15:08 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/get-matrix3d-from-database/m-p/3322541#M57326</guid>
      <dc:creator>Alexander.Rivilis</dc:creator>
      <dc:date>2012-02-08T09:15:08Z</dc:date>
    </item>
    <item>
      <title>Re: Get matrix3d from Database</title>
      <link>https://forums.autodesk.com/t5/net-forum/get-matrix3d-from-database/m-p/3322579#M57327</link>
      <description>&lt;P&gt;yeap. now i know the difference.&lt;/P&gt;&lt;P&gt;thx, again&lt;/P&gt;</description>
      <pubDate>Wed, 08 Feb 2012 09:48:37 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/get-matrix3d-from-database/m-p/3322579#M57327</guid>
      <dc:creator>SergeyShevtsov</dc:creator>
      <dc:date>2012-02-08T09:48:37Z</dc:date>
    </item>
  </channel>
</rss>

