<?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: Plugin returns negative coordinates in 3ds Max Programming Forum</title>
    <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/plugin-returns-negative-coordinates/m-p/4097436#M24179</link>
    <description>Just out of curiosity &amp;amp;#40;I know nothing about the SDK&amp;amp;#41; is your test cube located at the origin &amp;amp;#40;0,0,0&amp;amp;#41; ?</description>
    <pubDate>Tue, 02 Jun 2009 13:38:38 GMT</pubDate>
    <dc:creator>Anonymous</dc:creator>
    <dc:date>2009-06-02T13:38:38Z</dc:date>
    <item>
      <title>Plugin returns negative coordinates</title>
      <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/plugin-returns-negative-coordinates/m-p/4097435#M24178</link>
      <description>Hello,&lt;BR /&gt;I am trying out a plugin which comes from a book...&lt;BR /&gt;I put a breakpoint to check the vertex coordinate, it always returns some negative &lt;BR /&gt;coordinates. However, in my scene and a very simple scene just consists of a box and a plane &amp;amp;#40;have been converted to editable Mesh &amp;amp;#40;also tried Editable Poly&amp;amp;#41;, there are nothing in that range...&lt;BR /&gt;What strange to me is 3ds max always shows some symmetrical information about the mesh&lt;BR /&gt;For example&lt;BR /&gt;Vert 1 X coordiate = 10.0&lt;BR /&gt;On the other end of the mesh&lt;BR /&gt;it has -10.0&lt;BR /&gt;&lt;BR /&gt;I am really unpleased, but tried to rewrite from scratch... but the same thing happens...&lt;BR /&gt;Here's the code... Would you mind taking the time to check for me? Have been looking at it for days....&lt;BR /&gt;&lt;BR /&gt;&lt;PRE&gt;&lt;BR /&gt;// ========================================================&lt;BR /&gt;// ExpUtil.cpp&lt;BR /&gt;// Scene Export Utility&lt;BR /&gt;// Copyrite ?000, Simon Feltman&lt;BR /&gt;// --------------------------------------------------------&lt;BR /&gt;#include "ExpUtil.h"&lt;BR /&gt;#include "MSF.h"&lt;BR /&gt;&lt;BR /&gt;#define EXPUTIL_CLASS_ID Class_ID&amp;amp;#40;0x39d70798, 0x2b220e8b&amp;amp;#41;&lt;BR /&gt;&lt;BR /&gt;// ========================================================&lt;BR /&gt;void PointToArr&amp;amp;#40;const Point3 &amp;amp;pnt, float arr&amp;amp;#41;&lt;BR /&gt;{&lt;BR /&gt;   arr = pnt.x;&lt;BR /&gt;   arr = pnt.y;&lt;BR /&gt;   arr = pnt.z;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;// ========================================================&lt;BR /&gt;void MatrixToArr&amp;amp;#40;const Matrix3 &amp;amp;tm, float arr&amp;amp;#41;&lt;BR /&gt;{&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;// ========================================================&lt;BR /&gt;bool IsNodeValid&amp;amp;#40;INode *node, int cid&amp;amp;#41;&lt;BR /&gt;{&lt;BR /&gt;   // don't use root or hidden nodes.&lt;BR /&gt;   if&amp;amp;#40;node-&amp;gt;IsRootNode&amp;amp;#40;&amp;amp;#41; || node-&amp;gt;IsNodeHidden&amp;amp;#40;&amp;amp;#41;&amp;amp;#41;&lt;BR /&gt;      return false;&lt;BR /&gt;&lt;BR /&gt; Object *obj = node-&amp;gt;EvalWorldState&amp;amp;#40;0&amp;amp;#41;.obj;&lt;BR /&gt; if&amp;amp;#40;obj &amp;amp;&amp;amp; obj-&amp;gt;CanConvertToType&amp;amp;#40;Class_ID&amp;amp;#40;cid, 0&amp;amp;#41;&amp;amp;#41;&amp;amp;#41;&lt;BR /&gt; return true;&lt;BR /&gt;&lt;BR /&gt; return false;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;// ========================================================&lt;BR /&gt;class ExpUtil : public UtilityObj&lt;BR /&gt;{&lt;BR /&gt;public:&lt;BR /&gt;   HWND         hPanel;&lt;BR /&gt;   IUtil       *iu;&lt;BR /&gt;   Interface   *ip;&lt;BR /&gt;&lt;BR /&gt;   int RecursiveWriteMesh&amp;amp;#40;&lt;BR /&gt;      INode *node,&lt;BR /&gt;      FILE *stream,&lt;BR /&gt;      TimeValue time&amp;amp;#41;&lt;BR /&gt;&lt;BR /&gt;   int RecursiveWriteDummy&amp;amp;#40;&lt;BR /&gt;      INode *node,&lt;BR /&gt;      FILE *stream,&lt;BR /&gt;      TimeValue time&amp;amp;#41;&lt;BR /&gt;&lt;BR /&gt;   int RecursiveWriteLight&amp;amp;#40;&lt;BR /&gt;      INode *node,&lt;BR /&gt;      FILE *stream,&lt;BR /&gt;      TimeValue time&amp;amp;#41;&lt;BR /&gt;&lt;BR /&gt;   int RecursiveWriteCamera&amp;amp;#40;&lt;BR /&gt;      INode *node,&lt;BR /&gt;      FILE *stream,&lt;BR /&gt;      TimeValue time&amp;amp;#41;&lt;BR /&gt;&lt;BR /&gt;   void DoExport&amp;amp;#40;&amp;amp;#41;&lt;BR /&gt;&lt;BR /&gt;   void BeginEditParams&amp;amp;#40;Interface *ip, IUtil *iu&amp;amp;#41;&lt;BR /&gt;   void EndEditParams&amp;amp;#40;Interface *ip, IUtil *iu&amp;amp;#41;&lt;BR /&gt;&lt;BR /&gt;   void Init&amp;amp;#40;HWND hWnd&amp;amp;#41;&lt;BR /&gt;   void Destroy&amp;amp;#40;HWND hWnd&amp;amp;#41;&lt;BR /&gt;&lt;BR /&gt;   void DeleteThis&amp;amp;#40;&amp;amp;#41; { }&lt;BR /&gt;&lt;BR /&gt;   //Constructor/Destructor&lt;BR /&gt;   ExpUtil&amp;amp;#40;&amp;amp;#41;&lt;BR /&gt;   ~ExpUtil&amp;amp;#40;&amp;amp;#41;      &lt;BR /&gt;};&lt;BR /&gt;&lt;BR /&gt;static ExpUtil theExpUtil;&lt;BR /&gt;&lt;BR /&gt;// ========================================================&lt;BR /&gt;class ExpUtilClassDesc : public ClassDesc2&lt;BR /&gt;{&lt;BR /&gt;public:&lt;BR /&gt;   int IsPublic&amp;amp;#40;&amp;amp;#41; {&lt;BR /&gt;      return 1;&lt;BR /&gt;   }&lt;BR /&gt;   void* Create&amp;amp;#40;BOOL loading = FALSE&amp;amp;#41; {&lt;BR /&gt;      return &amp;amp;theExpUtil;&lt;BR /&gt;   }&lt;BR /&gt;   const TCHAR* ClassName&amp;amp;#40;&amp;amp;#41; {&lt;BR /&gt;      return GetString&amp;amp;#40;IDS_CLASS_NAME&amp;amp;#41;&lt;BR /&gt;   }&lt;BR /&gt;   SClass_ID SuperClassID&amp;amp;#40;&amp;amp;#41; {&lt;BR /&gt;      return UTILITY_CLASS_ID;&lt;BR /&gt;   }&lt;BR /&gt;   Class_ID ClassID&amp;amp;#40;&amp;amp;#41; {&lt;BR /&gt;      return EXPUTIL_CLASS_ID;&lt;BR /&gt;   }&lt;BR /&gt;   const TCHAR* Category&amp;amp;#40;&amp;amp;#41; {&lt;BR /&gt;      return GetString&amp;amp;#40;IDS_CATEGORY&amp;amp;#41;&lt;BR /&gt;   }&lt;BR /&gt;   const TCHAR* InternalName&amp;amp;#40;&amp;amp;#41; {&lt;BR /&gt;      return _T&amp;amp;#40;"ExpUtil"&amp;amp;#41;&lt;BR /&gt;   }&lt;BR /&gt;   HINSTANCE HInstance&amp;amp;#40;&amp;amp;#41; {&lt;BR /&gt;      return hInstance;&lt;BR /&gt;   }&lt;BR /&gt;&lt;BR /&gt;    char *GetRsrcString&amp;amp;#40;long l&amp;amp;#41; { return "hello"; }&lt;BR /&gt;};&lt;BR /&gt;&lt;BR /&gt;static ExpUtilClassDesc ExpUtilDesc;&lt;BR /&gt;&lt;BR /&gt;ClassDesc2* GetExpUtilDesc&amp;amp;#40;&amp;amp;#41; {&lt;BR /&gt;   return &amp;amp;ExpUtilDesc;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;// ========================================================&lt;BR /&gt;// For use with GetRenderMesh&lt;BR /&gt;class NullView : public View&lt;BR /&gt;{&lt;BR /&gt;public:&lt;BR /&gt;   Point2 ViewToScreen&amp;amp;#40;Point3 p&amp;amp;#41; {&lt;BR /&gt;      return Point2&amp;amp;#40;p.x,p.y&amp;amp;#41;&lt;BR /&gt;   }&lt;BR /&gt;   NullView&amp;amp;#40;&amp;amp;#41; {&lt;BR /&gt;      worldToView.IdentityMatrix&amp;amp;#40;&amp;amp;#41;&lt;BR /&gt;      screenW = 640.0f; screenH = 480.0f;&lt;BR /&gt;   }&lt;BR /&gt;};&lt;BR /&gt;static NullView nullView;&lt;BR /&gt;&lt;BR /&gt;// ========================================================&lt;BR /&gt;static BOOL CALLBACK ExpUtilDlgProc&amp;amp;#40;&lt;BR /&gt;   HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam&amp;amp;#41;&lt;BR /&gt;{&lt;BR /&gt;   switch&amp;amp;#40;msg&amp;amp;#41;&lt;BR /&gt;   {&lt;BR /&gt;   case WM_INITDIALOG:&lt;BR /&gt;      theExpUtil.Init&amp;amp;#40;hWnd&amp;amp;#41;&lt;BR /&gt;      break;&lt;BR /&gt;&lt;BR /&gt;   case WM_DESTROY:&lt;BR /&gt;      theExpUtil.Destroy&amp;amp;#40;hWnd&amp;amp;#41;&lt;BR /&gt;      break;&lt;BR /&gt;&lt;BR /&gt;   case WM_COMMAND:&lt;BR /&gt;      // Filter out when the IDC_DOEXPORT button is hit.&lt;BR /&gt;      if&amp;amp;#40;LOWORD&amp;amp;#40;wParam&amp;amp;#41; == IDC_DOEXPORT&amp;amp;#41;&lt;BR /&gt;         theExpUtil.DoExport&amp;amp;#40;&amp;amp;#41;&lt;BR /&gt;      break;&lt;BR /&gt;&lt;BR /&gt;   case WM_LBUTTONDOWN:&lt;BR /&gt;   case WM_LBUTTONUP:&lt;BR /&gt;   case WM_MOUSEMOVE:&lt;BR /&gt;      theExpUtil.ip-&amp;gt;RollupMouseMessage&amp;amp;#40;&lt;BR /&gt;         hWnd, msg, wParam, lParam&amp;amp;#41;&lt;BR /&gt;      break;&lt;BR /&gt;&lt;BR /&gt;   default:&lt;BR /&gt;      return FALSE;&lt;BR /&gt;   }&lt;BR /&gt;   return TRUE;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;// ========================================================&lt;BR /&gt;ExpUtil::ExpUtil&amp;amp;#40;&amp;amp;#41;&lt;BR /&gt;{&lt;BR /&gt;   iu = NULL;&lt;BR /&gt;   ip = NULL;   &lt;BR /&gt;   hPanel = NULL;&lt;BR /&gt;}&lt;BR /&gt;ExpUtil::~ExpUtil&amp;amp;#40;&amp;amp;#41; {}&lt;BR /&gt;&lt;BR /&gt;// ========================================================&lt;BR /&gt;void ExpUtil::BeginEditParams&amp;amp;#40;Interface *ip,&lt;BR /&gt;                              IUtil *iu&amp;amp;#41;&lt;BR /&gt;{&lt;BR /&gt;   this-&amp;gt;iu = iu;&lt;BR /&gt;   this-&amp;gt;ip = ip;&lt;BR /&gt;   hPanel = ip-&amp;gt;AddRollupPage&amp;amp;#40;&lt;BR /&gt;      hInstance,&lt;BR /&gt;      MAKEINTRESOURCE&amp;amp;#40;IDD_PANEL&amp;amp;#41;,&lt;BR /&gt;      ExpUtilDlgProc,&lt;BR /&gt;      GetString&amp;amp;#40;IDS_PARAMS&amp;amp;#41;,&lt;BR /&gt;      0&amp;amp;#41;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;// ========================================================&lt;BR /&gt;void ExpUtil::EndEditParams&amp;amp;#40;Interface *ip, IUtil *iu&amp;amp;#41;&lt;BR /&gt;{&lt;BR /&gt;   this-&amp;gt;iu = NULL;&lt;BR /&gt;   this-&amp;gt;ip = NULL;&lt;BR /&gt;   ip-&amp;gt;DeleteRollupPage&amp;amp;#40;hPanel&amp;amp;#41;&lt;BR /&gt;   hPanel = NULL;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;// ========================================================&lt;BR /&gt;void ExpUtil::Init&amp;amp;#40;HWND hWnd&amp;amp;#41; {}&lt;BR /&gt;void ExpUtil::Destroy&amp;amp;#40;HWND hWnd&amp;amp;#41; {}&lt;BR /&gt;&lt;BR /&gt;// ========================================================&lt;BR /&gt;// Function will recurse all nodes filtering only meshes&lt;BR /&gt;int ExpUtil::RecursiveWriteMesh&amp;amp;#40;&lt;BR /&gt;   INode *node,&lt;BR /&gt;   FILE *stream,&lt;BR /&gt;   TimeValue time&amp;amp;#41;&lt;BR /&gt;{&lt;BR /&gt;   int count = 0;&lt;BR /&gt;&lt;BR /&gt;   // Filter out geometry objects.&lt;BR /&gt;   if&amp;amp;#40;IsNodeValid&amp;amp;#40;node, TRIOBJ_CLASS_ID&amp;amp;#41;&amp;amp;#41;&lt;BR /&gt;   {&lt;BR /&gt;     // get a snapshot of the same mesh the renderer uses&lt;BR /&gt;      BOOL needDel = FALSE;&lt;BR /&gt;      ObjectState os = node-&amp;gt;EvalWorldState&amp;amp;#40;time&amp;amp;#41;&lt;BR /&gt;      Mesh *mesh = &amp;amp;#40;&amp;amp;#40;TriObject*&amp;amp;#41;os.obj&amp;amp;#41;-&amp;gt;GetRenderMesh&amp;amp;#40;&lt;BR /&gt;         time, node, nullView, needDel&amp;amp;#41;&lt;BR /&gt;&lt;BR /&gt;      MSF_Mesh msfMesh;&lt;BR /&gt;      memset&amp;amp;#40;&amp;amp;msfMesh, 0, sizeof&amp;amp;#40;MSF_Mesh&amp;amp;#41;&amp;amp;#41;&lt;BR /&gt;&lt;BR /&gt;      // get the node name and color&lt;BR /&gt;      strncpy&amp;amp;#40;msfMesh.name, node-&amp;gt;GetName&amp;amp;#40;&amp;amp;#41;,&lt;BR /&gt;         sizeof&amp;amp;#40;msfMesh.name&amp;amp;#41;&amp;amp;#41;&lt;BR /&gt;      msfMesh.rgb = node-&amp;gt;GetWireColor&amp;amp;#40;&amp;amp;#41;&lt;BR /&gt;&lt;BR /&gt;      // get vert, tvert, and face counts&lt;BR /&gt;      msfMesh.numVerts = mesh-&amp;gt;getNumVerts&amp;amp;#40;&amp;amp;#41;&lt;BR /&gt;      msfMesh.numTVerts = mesh-&amp;gt;getNumTVerts&amp;amp;#40;&amp;amp;#41;&lt;BR /&gt;      msfMesh.numFaces = mesh-&amp;gt;getNumFaces&amp;amp;#40;&amp;amp;#41;&lt;BR /&gt;&lt;BR /&gt;      // write the mesh header&lt;BR /&gt;      fwrite&amp;amp;#40;&amp;amp;msfMesh, sizeof&amp;amp;#40;MSF_Mesh&amp;amp;#41;, 1, stream&amp;amp;#41;&lt;BR /&gt;&lt;BR /&gt;      // write vertices&lt;BR /&gt;      for&amp;amp;#40;int i = 0; i &amp;lt; msfMesh.numVerts; i++&amp;amp;#41;&lt;BR /&gt;      {&lt;BR /&gt;         Vertex vtx;&lt;BR /&gt;         Point3 pnt = mesh-&amp;gt;getVert&amp;amp;#40;i&amp;amp;#41;&lt;BR /&gt;         vtx = pnt.x; vtx = pnt.y; vtx = pnt.z;  &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; here is the problem!!!&lt;BR /&gt;         fwrite&amp;amp;#40;vtx, sizeof&amp;amp;#40;Vertex&amp;amp;#41;, 1, stream&amp;amp;#41;&lt;BR /&gt;      }&lt;BR /&gt;&lt;BR /&gt;      // write texture vertices&lt;BR /&gt;      for&amp;amp;#40;i = 0; i &amp;lt; msfMesh.numTVerts; i++&amp;amp;#41;&lt;BR /&gt;      {&lt;BR /&gt;         TexVtx tv;&lt;BR /&gt;         UVVert uvw = mesh-&amp;gt;getTVert&amp;amp;#40;i&amp;amp;#41;&lt;BR /&gt;         tv = uvw.x; tv = uvw.y;&lt;BR /&gt;         fwrite&amp;amp;#40;tv, sizeof&amp;amp;#40;TexVtx&amp;amp;#41;, 1, stream&amp;amp;#41;&lt;BR /&gt;      }&lt;BR /&gt;&lt;BR /&gt;      // write faces&lt;BR /&gt;      for&amp;amp;#40;i = 0; i &amp;lt; msfMesh.numFaces; i++&amp;amp;#41;&lt;BR /&gt;      {&lt;BR /&gt;         MSF_Face msfFace;&lt;BR /&gt;         memset&amp;amp;#40;&amp;amp;msfFace, 0, sizeof&amp;amp;#40;MSF_Face&amp;amp;#41;&amp;amp;#41;&lt;BR /&gt;&lt;BR /&gt;         // extract face information&lt;BR /&gt;         msfFace.verts = mesh-&amp;gt;faces&lt;I&gt;.v;&lt;BR /&gt;         msfFace.verts = mesh-&amp;gt;faces&lt;I&gt;.v;&lt;BR /&gt;         msfFace.verts = mesh-&amp;gt;faces&lt;I&gt;.v;&lt;BR /&gt;&lt;BR /&gt;         if&amp;amp;#40;msfMesh.numTVerts &amp;gt; 0&amp;amp;#41;&lt;BR /&gt;         {&lt;BR /&gt;            // extract texture face information&lt;BR /&gt;            msfFace.tverts = mesh-&amp;gt;tvFace&lt;I&gt;.t;&lt;BR /&gt;            msfFace.tverts = mesh-&amp;gt;tvFace&lt;I&gt;.t;&lt;BR /&gt;            msfFace.tverts = mesh-&amp;gt;tvFace&lt;I&gt;.t;&lt;BR /&gt;         }&lt;BR /&gt;&lt;BR /&gt;         // write our face structure&lt;BR /&gt;         fwrite&amp;amp;#40;&amp;amp;msfFace, sizeof&amp;amp;#40;MSF_Face&amp;amp;#41;, 1, stream&amp;amp;#41;&lt;BR /&gt;      }&lt;BR /&gt;&lt;BR /&gt;      // delete the mesh if needDel is true&lt;BR /&gt;      if&amp;amp;#40;needDel&amp;amp;#41; mesh-&amp;gt;DeleteThis&amp;amp;#40;&amp;amp;#41;&lt;BR /&gt;&lt;BR /&gt;      count = 1;&lt;BR /&gt;   }&lt;BR /&gt;&lt;BR /&gt;   // recurse children&lt;BR /&gt;   for&amp;amp;#40;int i = 0; i &amp;lt; node-&amp;gt;NumberOfChildren&amp;amp;#40;&amp;amp;#41; i++&amp;amp;#41;&lt;BR /&gt;   {&lt;BR /&gt;      count += RecursiveWriteMesh&amp;amp;#40;&lt;BR /&gt;         node-&amp;gt;GetChildNode&amp;amp;#40;i&amp;amp;#41;,&lt;BR /&gt;         stream, time&amp;amp;#41;&lt;BR /&gt;   }&lt;BR /&gt;&lt;BR /&gt;   return count;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;// ========================================================&lt;BR /&gt;int ExpUtil::RecursiveWriteDummy&amp;amp;#40;&lt;BR /&gt;   INode *node,&lt;BR /&gt;   FILE *stream,&lt;BR /&gt;   TimeValue time&amp;amp;#41;&lt;BR /&gt;{&lt;BR /&gt;   int count = 0;&lt;BR /&gt;&lt;BR /&gt;   // Filter out dummy objects&lt;BR /&gt;   if&amp;amp;#40;IsNodeValid&amp;amp;#40;node, DUMMY_CLASS_ID&amp;amp;#41;&amp;amp;#41;&lt;BR /&gt;   {&lt;BR /&gt;      MSF_Dummy msfDummy;&lt;BR /&gt;      memset&amp;amp;#40;&amp;amp;msfDummy, 0, sizeof&amp;amp;#40;MSF_Light&amp;amp;#41;&amp;amp;#41;&lt;BR /&gt;&lt;BR /&gt;      // get the node name&lt;BR /&gt;      strncpy&amp;amp;#40;msfDummy.name,&lt;BR /&gt;         node-&amp;gt;GetName&amp;amp;#40;&amp;amp;#41;,&lt;BR /&gt;         sizeof&amp;amp;#40;msfDummy.name&amp;amp;#41;&amp;amp;#41;&lt;BR /&gt;&lt;BR /&gt;      // get the objects matrix and store&lt;BR /&gt;      Matrix3 tm = node-&amp;gt;GetObjectTM&amp;amp;#40;time&amp;amp;#41;&lt;BR /&gt;      MatrixToArr&amp;amp;#40;tm, msfDummy.tm&amp;amp;#41;&lt;BR /&gt;&lt;BR /&gt;      // write our dummy object&lt;BR /&gt;      fwrite&amp;amp;#40;&amp;amp;msfDummy, sizeof&amp;amp;#40;MSF_Dummy&amp;amp;#41;, 1, stream&amp;amp;#41;&lt;BR /&gt;      count = 1;&lt;BR /&gt;   }&lt;BR /&gt;&lt;BR /&gt;   // recurse children&lt;BR /&gt;   for&amp;amp;#40;int i = 0; i &amp;lt; node-&amp;gt;NumberOfChildren&amp;amp;#40;&amp;amp;#41; i++&amp;amp;#41;&lt;BR /&gt;   {&lt;BR /&gt;      count += RecursiveWriteDummy&amp;amp;#40;&lt;BR /&gt;         node-&amp;gt;GetChildNode&amp;amp;#40;i&amp;amp;#41;,&lt;BR /&gt;         stream, time&amp;amp;#41;&lt;BR /&gt;   }&lt;BR /&gt;&lt;BR /&gt;   return count;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;Any help would be greatly appreciated&lt;BR /&gt;I am using MAX7 + SDK&lt;BR /&gt;Thanks in advance&lt;BR /&gt;Jack</description>
      <pubDate>Tue, 02 Jun 2009 11:56:51 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/3ds-max-programming-forum/plugin-returns-negative-coordinates/m-p/4097435#M24178</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2009-06-02T11:56:51Z</dc:date>
    </item>
    <item>
      <title>Re: Plugin returns negative coordinates</title>
      <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/plugin-returns-negative-coordinates/m-p/4097436#M24179</link>
      <description>Just out of curiosity &amp;amp;#40;I know nothing about the SDK&amp;amp;#41; is your test cube located at the origin &amp;amp;#40;0,0,0&amp;amp;#41; ?</description>
      <pubDate>Tue, 02 Jun 2009 13:38:38 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/3ds-max-programming-forum/plugin-returns-negative-coordinates/m-p/4097436#M24179</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2009-06-02T13:38:38Z</dc:date>
    </item>
    <item>
      <title>Re: Plugin returns negative coordinates</title>
      <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/plugin-returns-negative-coordinates/m-p/4097437#M24180</link>
      <description>Hi Melting Point,&lt;BR /&gt;Thanks for your reply. Actually, I have moved the test cube around...&lt;BR /&gt;I also checked every vertex coordinate, but they all fall in a positive range.&lt;BR /&gt;One thing I noticed about is all objects have a unknown scene root checked with properties&lt;BR /&gt;Is it where the problem lies?&lt;BR /&gt;Thanks &lt;BR /&gt;Jack</description>
      <pubDate>Wed, 03 Jun 2009 02:02:37 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/3ds-max-programming-forum/plugin-returns-negative-coordinates/m-p/4097437#M24180</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2009-06-03T02:02:37Z</dc:date>
    </item>
    <item>
      <title>Re: Plugin returns negative coordinates</title>
      <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/plugin-returns-negative-coordinates/m-p/4097438#M24181</link>
      <description>I have selected "World" from the top combo box before dragging out a box..&lt;BR /&gt;It was still the same.&lt;BR /&gt;Any further thoughts?&lt;BR /&gt;Sorry about it because I don't know how to work with MAX&lt;BR /&gt;Thanks&lt;BR /&gt;JAc</description>
      <pubDate>Wed, 03 Jun 2009 03:12:21 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/3ds-max-programming-forum/plugin-returns-negative-coordinates/m-p/4097438#M24181</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2009-06-03T03:12:21Z</dc:date>
    </item>
    <item>
      <title>Re: Plugin returns negative coordinates</title>
      <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/plugin-returns-negative-coordinates/m-p/4097439#M24182</link>
      <description>I guess the only other question I have is, does it export usable data? I mean, your exporting it for something right, so does it import into the &amp;amp;#40;game engine?&amp;amp;#41; and if so, is the shape maintained, but in the wrong spot?&lt;BR /&gt;&lt;BR /&gt;You said you moved the cube around, did the values change? or always remain the same? If they're the same, then it would sound like the pivot was being used as the parent. But again since I don't know the SDK, I can't help much, but there must be a way to get the world space coordinates of a mesh.</description>
      <pubDate>Wed, 03 Jun 2009 09:47:21 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/3ds-max-programming-forum/plugin-returns-negative-coordinates/m-p/4097439#M24182</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2009-06-03T09:47:21Z</dc:date>
    </item>
  </channel>
</rss>

