<?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: My First Controller Plug-in... Questions-- in 3ds Max Programming Forum</title>
    <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5611739#M15500</link>
    <description>&lt;P&gt;Lucas,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;None of the files or folders&amp;nbsp;in the Zip file you just provided contains the missing header and resource file for the FootStep control project you cited earlier.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I created a FootStepControl wizard project and copied in the footstep.cpp file as my FootStepControl.cpp file.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The FootStep Control file ( footstep.cpp ) is located in the folder:&amp;nbsp; &lt;STRONG&gt;..\maxsdk\howto\SourceCodeExamples&amp;nbsp;&lt;/STRONG&gt; -- but there is no header file or resource.h file for the footstep.cpp thus I get scores of errors due to unknown resource strings when I try to compile it.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I think all I need is the actual FootStep resource.h file to replace the default one the&amp;nbsp;wizard has created for me.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Output Window errors:&lt;/P&gt;&lt;PRE&gt;Compiling...
FootStepControl.cpp
FootStepControl.cpp(115) : error C2065: 'IDS_RB_FOOTSTEPSAMPLE' : undeclared identifier
FootStepControl.cpp(115) : error C3861: 'GetResString': identifier not found, even with argument-dependent lookup
FootStepControl.cpp(579) : error C2065: 'IDC_SHOWFOOTPRINTS' : undeclared identifier
FootStepControl.cpp(588) : error C2065: 'IDC_ACTIVE_X' : undeclared identifier
FootStepControl.cpp(588) : error C2051: case expression not constant
FootStepControl.cpp(590) : error C2065: 'IDC_ACTIVE_Y' : undeclared identifier
FootStepControl.cpp(590) : error C2051: case expression not constant
FootStepControl.cpp(592) : error C2065: 'IDC_ACTIVE_Z' : undeclared identifier
FootStepControl.cpp(592) : error C2051: case expression not constant
FootStepControl.cpp(594) : error C2065: 'IDC_ACTIVE_XY' : undeclared identifier
FootStepControl.cpp(594) : error C2051: case expression not constant
FootStepControl.cpp(596) : error C2065: 'IDC_ACTIVE_YZ' : undeclared identifier
FootStepControl.cpp(596) : error C2051: case expression not constant
FootStepControl.cpp(598) : error C2065: 'IDC_ACTIVE_ZX' : undeclared identifier
FootStepControl.cpp(598) : error C2051: case expression not constant
FootStepControl.cpp(601) : error C2065: 'IDC_ACTIVE_SYS' : undeclared identifier
FootStepControl.cpp(601) : error C2051: case expression not constant
FootStepControl.cpp(603) : error C2065: 'IDC_ACTIVE_SEL' : undeclared identifier
FootStepControl.cpp(603) : error C2051: case expression not constant
FootStepControl.cpp(605) : error C2065: 'IDC_ACTIVE_LOCAL' : undeclared identifier
FootStepControl.cpp(605) : error C2051: case expression not constant
FootStepControl.cpp(608) : error C2065: 'IDC_ACTIVE_VIEW' : undeclared identifier
FootStepControl.cpp(608) : error C2051: case expression not constant
FootStepControl.cpp(610) : error C2065: 'IDC_ACTIVE_SCREEN' : undeclared identifier
FootStepControl.cpp(610) : error C2051: case expression not constant
FootStepControl.cpp(612) : error C2065: 'IDC_ACTIVE_WORLD' : undeclared identifier
FootStepControl.cpp(612) : error C2051: case expression not constant
FootStepControl.cpp(614) : error C2065: 'IDC_ACTIVE_PARENT' : undeclared identifier
FootStepControl.cpp(614) : error C2051: case expression not constant
FootStepControl.cpp(616) : error C2065: 'IDC_ACTIVE_LOCALSYS' : undeclared identifier
FootStepControl.cpp(616) : error C2051: case expression not constant
FootStepControl.cpp(618) : error C2065: 'IDC_ACTIVE_OBJECT' : undeclared identifier
FootStepControl.cpp(618) : error C2051: case expression not constant
FootStepControl.cpp(622) : error C2065: 'IDC_ENABLE_X' : undeclared identifier
FootStepControl.cpp(622) : error C2051: case expression not constant
FootStepControl.cpp(626) : error C2065: 'IDC_ENABLE_Y' : undeclared identifier
FootStepControl.cpp(626) : error C2051: case expression not constant
FootStepControl.cpp(630) : error C2065: 'IDC_ENABLE_Z' : undeclared identifier
FootStepControl.cpp(630) : error C2051: case expression not constant
FootStepControl.cpp(634) : error C2065: 'IDC_ENABLE_XY' : undeclared identifier
FootStepControl.cpp(634) : error C2051: case expression not constant
FootStepControl.cpp(635) : error C2065: 'IDC_ENABLE_YZ' : undeclared identifier
FootStepControl.cpp(635) : error C2051: case expression not constant
FootStepControl.cpp(636) : error C2065: 'IDC_ENABLE_ZX' : undeclared identifier
FootStepControl.cpp(636) : error C2051: case expression not constant
FootStepControl.cpp(641) : error C2065: 'IDC_ENABLE_SYS' : undeclared identifier
FootStepControl.cpp(641) : error C2051: case expression not constant
FootStepControl.cpp(642) : error C2065: 'IDC_ENABLE_SEL' : undeclared identifier
FootStepControl.cpp(642) : error C2051: case expression not constant
FootStepControl.cpp(643) : error C2065: 'IDC_ENABLE_LOCAL' : undeclared identifier
FootStepControl.cpp(643) : error C2051: case expression not constant
FootStepControl.cpp(648) : error C2065: 'IDC_ENABLE_VIEW' : undeclared identifier
FootStepControl.cpp(648) : error C2051: case expression not constant
FootStepControl.cpp(649) : error C2065: 'IDC_ENABLE_SCREEN' : undeclared identifier
FootStepControl.cpp(649) : error C2051: case expression not constant
FootStepControl.cpp(650) : error C2065: 'IDC_ENABLE_WORLD' : undeclared identifier
FootStepControl.cpp(650) : error C2051: case expression not constant
FootStepControl.cpp(651) : error C2065: 'IDC_ENABLE_PARENT' : undeclared identifier
FootStepControl.cpp(651) : error C2051: case expression not constant
FootStepControl.cpp(652) : error C2065: 'IDC_ENABLE_LOCALSYS' : undeclared identifier
FootStepControl.cpp(652) : error C2051: case expression not constant
FootStepControl.cpp(653) : error C2065: 'IDC_ENABLE_OBJECT' : undeclared identifier
FootStepControl.cpp(653) : error C2051: case expression not constant
FootStepControl.cpp(659) : error C3861: 'IDC_SHOWFOOTPRINTS': identifier not found, even with argument-dependent lookup
FootStepControl.cpp(659) : error C2051: case expression not constant
FootStepControl.cpp(660) : error C3861: 'IDC_SHOWFOOTPRINTS': identifier not found, even with argument-dependent lookup
FootStepControl.cpp(666) : warning C4060: switch statement contains no 'case' or 'default' labels
FootStepControl.cpp(680) : error C2228: left of '.getHInst' must have class/struct/union type
        type is ''unknown-type''
FootStepControl.cpp(680) : error C2065: 'RES_ID_RB' : undeclared identifier
FootStepControl.cpp(681) : error C2065: 'IDD_FOOTSTEPPARAMS' : undeclared identifier
FootStepControl.cpp(683) : error C2065: 'IDS_RB_FOOTSTEPPARAMS' : undeclared identifier
FootStepControl.cpp(680) : error C3861: 'getResMgr': identifier not found, even with argument-dependent lookup
FootStepControl.cpp(683) : error C3861: 'GetResString': identifier not found, even with argument-dependent lookup
FootStepControl.cpp(694) : error C2065: 'IDS_RB_FOOTPRINT' : undeclared identifier
FootStepControl.cpp(694) : error C3861: 'GetResString': identifier not found, even with argument-dependent lookup
DllEntry.cpp&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Can you please provide the necessary resource file for the FootStep control ( ...which you cited as reference for me to look at... ) so that I can get it to build.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;</description>
    <pubDate>Tue, 28 Apr 2015 21:39:48 GMT</pubDate>
    <dc:creator>michael_lawler</dc:creator>
    <dc:date>2015-04-28T21:39:48Z</dc:date>
    <item>
      <title>My First Controller Plug-in... Questions--</title>
      <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5555004#M15494</link>
      <description>&lt;P&gt;Ok, so I've been reviewing/reading the SDK and I have some questions as I attempt my first controller plug-in (starting out as an ASCII win32 project). So here goes (a question may have multiple parts):&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;Question 1.&lt;/STRONG&gt;&lt;BR /&gt;(a) Is it possible to customize the controller gizmo apparatus?&lt;BR /&gt;&lt;BR /&gt;(b) Is the controller gizmo governed by gizmo.h (there are a few gizmo type headers-- I'm not sure which one relates to controller gizmos)?&lt;BR /&gt;&lt;BR /&gt;(c) If it is possible to modify, how would I go about adding a resultant vector arrow for the position move tool mode/position controller (rather than hitting/manipulating X, Y, or Z axis or grabbing a "plane")? (e.g., using the LookAt() legacy matrix3 controller, what I want to achieve is a position mode vector that would point at the LookAt target from the camera node and hitting and manipulating this vector would allow you to modify the targetDistance parameter along the "LookAt Radial axis" and thus move the camera accordingly.)&lt;/P&gt;</description>
      <pubDate>Tue, 24 Mar 2015 14:33:45 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5555004#M15494</guid>
      <dc:creator>michael_lawler</dc:creator>
      <dc:date>2015-03-24T14:33:45Z</dc:date>
    </item>
    <item>
      <title>Re: My First Controller Plug-in... Questions--</title>
      <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5557151#M15495</link>
      <description>&lt;P&gt;So I found in the SDK the&amp;nbsp;answer to question 1(a) is yes.&amp;nbsp; Specifically the SDK states:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;P&gt;&lt;STRONG&gt;Controllers that want to have a gizmo (apparatus) available in the scene will implement these methods&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="mk:@MSITStore:C:\Program%20Files\Autodesk\3ds%20Max%202010%20SDK\maxsdk\help\3dsMaxSDKRef.chm::/class_control.html#a80" target="_blank"&gt;Control :: Display&lt;/A&gt;(TimeValue t, INode* inode, &amp;nbsp;&lt;A href="mk:@MSITStore:C:\Program%20Files\Autodesk\3ds%20Max%202010%20SDK\maxsdk\help\3dsMaxSDKRef.chm::/class_view_exp.html" target="_blank"&gt;ViewExp&lt;/A&gt; *vpt, int flags)&lt;/P&gt;&lt;P&gt;&lt;A href="mk:@MSITStore:C:\Program%20Files\Autodesk\3ds%20Max%202010%20SDK\maxsdk\help\3dsMaxSDKRef.chm::/class_control.html#a81" target="_blank"&gt;Control :: HitTest&lt;/A&gt;(TimeValue t, INode* inode, int type, &amp;nbsp;int crossing, int flags, &lt;A href="mk:@MSITStore:C:\Program%20Files\Autodesk\3ds%20Max%202010%20SDK\maxsdk\help\3dsMaxSDKRef.chm::/class_i_point2.html" target="_blank"&gt;IPoint2&lt;/A&gt; *p, &lt;A href="mk:@MSITStore:C:\Program%20Files\Autodesk\3ds%20Max%202010%20SDK\maxsdk\help\3dsMaxSDKRef.chm::/class_view_exp.html" target="_blank"&gt;ViewExp&lt;/A&gt; *vpt)&lt;/P&gt;&lt;P&gt;&lt;A href="mk:@MSITStore:C:\Program%20Files\Autodesk\3ds%20Max%202010%20SDK\maxsdk\help\3dsMaxSDKRef.chm::/class_control.html#a82" target="_blank"&gt;Control :: GetWorldBoundBox&lt;/A&gt;(TimeValue t,INode* inode, &amp;nbsp;&lt;A href="mk:@MSITStore:C:\Program%20Files\Autodesk\3ds%20Max%202010%20SDK\maxsdk\help\3dsMaxSDKRef.chm::/class_view_exp.html" target="_blank"&gt;ViewExp&lt;/A&gt; *vpt, &lt;A href="mk:@MSITStore:C:\Program%20Files\Autodesk\3ds%20Max%202010%20SDK\maxsdk\help\3dsMaxSDKRef.chm::/class_box3.html" target="_blank"&gt;Box3&lt;/A&gt;&amp;amp; box)&lt;/P&gt;&lt;P&gt;&lt;A href="mk:@MSITStore:C:\Program%20Files\Autodesk\3ds%20Max%202010%20SDK\maxsdk\help\3dsMaxSDKRef.chm::/class_control.html#a83" target="_blank"&gt;Control :: ActivateSubobjSel(int level, XFormModes&amp;amp; modes)&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="mk:@MSITStore:C:\Program%20Files\Autodesk\3ds%20Max%202010%20SDK\maxsdk\help\3dsMaxSDKRef.chm::/class_control.html#a84" target="_blank"&gt;Control :: SelectSubComponent&lt;/A&gt;(&lt;A href="mk:@MSITStore:C:\Program%20Files\Autodesk\3ds%20Max%202010%20SDK\maxsdk\help\3dsMaxSDKRef.chm::/class_ctrl_hit_record.html" target="_blank"&gt;CtrlHitRecord&lt;/A&gt; *hitRec, &amp;nbsp;BOOL selected, BOOL all, BOOL invert=FALSE)&lt;/P&gt;&lt;P&gt;&lt;A href="mk:@MSITStore:C:\Program%20Files\Autodesk\3ds%20Max%202010%20SDK\maxsdk\help\3dsMaxSDKRef.chm::/class_control.html#a85" target="_blank"&gt;Control :: ClearSelection(int selLevel)&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="mk:@MSITStore:C:\Program%20Files\Autodesk\3ds%20Max%202010%20SDK\maxsdk\help\3dsMaxSDKRef.chm::/class_control.html#a86" target="_blank"&gt;Control :: SubObjectIndex(CtrlHitRecord *hitRec)&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="mk:@MSITStore:C:\Program%20Files\Autodesk\3ds%20Max%202010%20SDK\maxsdk\help\3dsMaxSDKRef.chm::/class_control.html#a87" target="_blank"&gt;Control :: SelectAll(int selLevel)&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="mk:@MSITStore:C:\Program%20Files\Autodesk\3ds%20Max%202010%20SDK\maxsdk\help\3dsMaxSDKRef.chm::/class_control.html#a88" target="_blank"&gt;Control :: InvertSelection(int selLevel)&lt;/A&gt;&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;So my new controller would need to implement its own &lt;STRONG&gt;Display()&lt;/STRONG&gt; and &lt;STRONG&gt;HitTest()&lt;/STRONG&gt; methods &lt;EM&gt;(but are those the only two?)&lt;/EM&gt; ...what about the &lt;STRONG&gt;"Modify Sub-object apparatuses"&lt;/STRONG&gt; that the SDK discusses (i.e., &lt;EM&gt;&lt;STRONG&gt;SubMove&lt;/STRONG&gt;&lt;/EM&gt;, &lt;EM&gt;&lt;STRONG&gt;Subrotate&lt;/STRONG&gt;&lt;/EM&gt;, &lt;EM&gt;&lt;STRONG&gt;SubScale&lt;/STRONG&gt;&lt;/EM&gt;...)?&amp;nbsp; Are those needed by a controller gizmo or are they only for Modifier-type gizmos?&lt;/P&gt;</description>
      <pubDate>Wed, 25 Mar 2015 16:31:09 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5557151#M15495</guid>
      <dc:creator>michael_lawler</dc:creator>
      <dc:date>2015-03-25T16:31:09Z</dc:date>
    </item>
    <item>
      <title>Re: My First Controller Plug-in... Questions--</title>
      <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5557775#M15496</link>
      <description>&lt;P&gt;So continuing my search for bread crumbs within the SDK documentation... I found some classes in &lt;STRONG&gt;"objmode.h"&lt;/STRONG&gt; pertaining to the control apparatus:&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;class MoveCtrlApparatus&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;class RotateCtrlApparatus&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;class ScaleCtrlApparatus&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;class SelectCtrlApparatus&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;class TransformCtrlApparatus&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;All of these take a pointer to a Control as a formal parameter... so it seems these classes are what are responsible for updating user interactions (Move, Rotate, Scale, Select) with a controller's transform gizmo-- am I correct???&lt;BR /&gt;&lt;BR /&gt;I don't like to experiment "in-the-blind" but I guess I will just have to try and implement a "LookAt vector" (similar to the X,Y, Z arrows) to append to the move gizmo for the legacy LookAt Matrix3 controller (as a test case)... then figure out how to HitTest it.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Any guidance from another Controller developer would be greatly appreciated.&amp;nbsp; Thanks.&lt;/P&gt;</description>
      <pubDate>Wed, 25 Mar 2015 23:48:41 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5557775#M15496</guid>
      <dc:creator>michael_lawler</dc:creator>
      <dc:date>2015-03-25T23:48:41Z</dc:date>
    </item>
    <item>
      <title>Re: My First Controller Plug-in... Questions--</title>
      <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5576257#M15497</link>
      <description>&lt;P&gt;Let me answer the questions about several Control methods and HitTest.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;1.&lt;/P&gt;
&lt;P&gt;Control:: GetWorldBoundBox(TimeValue t,INode* inode, ViewExp *vpt, Box3&amp;amp; box)&lt;BR /&gt;Control:: ActivateSubobjSel(int level, XFormModes&amp;amp; modes)&lt;BR /&gt;Control:: SelectSubComponent(CtrlHitRecord *hitRec, BOOL selected, BOOL all, BOOL invert=FALSE)&lt;BR /&gt;Control:: ClearSelection(int selLevel)&lt;BR /&gt;Control:: SubObjectIndex(CtrlHitRecord *hitRec)&lt;BR /&gt;Control:: SelectAll(int selLevel)&lt;BR /&gt;Control:: InvertSelection(int selLevel)&lt;/P&gt;
&lt;P&gt;All above functions have default implementation, but you can implement your specific function.&lt;/P&gt;
&lt;P&gt;Also here are some examples in the SDK directory, they would help for you:&lt;/P&gt;
&lt;P&gt;samples\controllers\exprctrl.cpp&lt;/P&gt;
&lt;P&gt;samples\controllers\indescale.cpp&lt;BR /&gt;samples\controllers\block&lt;BR /&gt;samples\controllers\spring&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;2. &amp;nbsp;HitTest:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Following is an example about Gizmo Hit Testing using Polylines&lt;BR /&gt;&lt;A href="http://help.autodesk.com/view/3DSMAX/2015/ENU/?guid=__files_GUID_0B01E195_BCA5_4058_9502_03CBCDE23E44_htm" target="_blank"&gt;http://help.autodesk.com/view/3DSMAX/2015/ENU/?guid=__files_GUID_0B01E195_BCA5_4058_9502_03CBCDE23E44_htm&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Following is Sub-Object Hit Testing&lt;BR /&gt;&lt;A href="http://help.autodesk.com/view/3DSMAX/2015/ENU/?guid=__files_GUID_1435A4DC_878D_420F_A4FF_8F4B1E3E1D03_htm" target="_blank"&gt;http://help.autodesk.com/view/3DSMAX/2015/ENU/?guid=__files_GUID_1435A4DC_878D_420F_A4FF_8F4B1E3E1D03_htm&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;More details about the Hit testing in the following link:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://help.autodesk.com/view/3DSMAX/2015/ENU/?guid=__files_GUID_C545DC05_32C5_4947_A067_CC27534BF6DE_htm" target="_blank"&gt;http://help.autodesk.com/view/3DSMAX/2015/ENU/?guid=__files_GUID_C545DC05_32C5_4947_A067_CC27534BF6DE_htm&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now let me answer the question b and c&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Answer for question b:&lt;/P&gt;
&lt;P&gt;Is the controller gizmo governed by gizmo.h (there are a few gizmo type headers-- I'm not sure which one&amp;nbsp;&lt;/P&gt;
&lt;P&gt;relates to controller gizmos)?&lt;/P&gt;
&lt;P&gt;You can see that the method Control::GetWorldBoundBox also can be used to calculated for the world space&amp;nbsp;&lt;/P&gt;
&lt;P&gt;bounding box of the controllers gizmo, thus gizmo.h is not the only one to related to the controller gizmos.&lt;/P&gt;
&lt;P&gt;Answer for question c:&lt;/P&gt;
&lt;P&gt;I can give a new idea about deciding the distance between moving camera and the hit point.&lt;/P&gt;
&lt;P&gt;You can try to use the Ray&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://help.autodesk.com/view/3DSMAX/2015/ENU/?guid=__cpp_ref_class_ray_html" target="_blank"&gt;http://help.autodesk.com/view/3DSMAX/2015/ENU/?guid=__cpp_ref_class_ray_html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;This class has two data members: Point p(point of origin) and Point dir(direction vector)&lt;/P&gt;
&lt;P&gt;After you have these two points, you can use the formula&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ptDistance = ray.p + ray.dir * distance to compute the targetDistance;&lt;/P&gt;
&lt;P&gt;I wish this can help you. Thank you very much.&lt;/P&gt;</description>
      <pubDate>Wed, 08 Apr 2015 18:13:43 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5576257#M15497</guid>
      <dc:creator>lucas.yang</dc:creator>
      <dc:date>2015-04-08T18:13:43Z</dc:date>
    </item>
    <item>
      <title>Re: My First Controller Plug-in... Questions--</title>
      <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5581020#M15498</link>
      <description>&lt;P&gt;Thanks Lucas... I will take a deeper look at the references you provided and will post any follow-up questions I have.&lt;/P&gt;</description>
      <pubDate>Fri, 10 Apr 2015 17:48:53 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5581020#M15498</guid>
      <dc:creator>michael_lawler</dc:creator>
      <dc:date>2015-04-10T17:48:53Z</dc:date>
    </item>
    <item>
      <title>Re: My First Controller Plug-in... Questions--</title>
      <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5611644#M15499</link>
      <description>&lt;P&gt;Please check the sample code in the sdk 2015&lt;/P&gt;
&lt;P&gt;Thanks&lt;/P&gt;</description>
      <pubDate>Tue, 28 Apr 2015 20:35:51 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5611644#M15499</guid>
      <dc:creator>lucas.yang</dc:creator>
      <dc:date>2015-04-28T20:35:51Z</dc:date>
    </item>
    <item>
      <title>Re: My First Controller Plug-in... Questions--</title>
      <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5611739#M15500</link>
      <description>&lt;P&gt;Lucas,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;None of the files or folders&amp;nbsp;in the Zip file you just provided contains the missing header and resource file for the FootStep control project you cited earlier.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I created a FootStepControl wizard project and copied in the footstep.cpp file as my FootStepControl.cpp file.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The FootStep Control file ( footstep.cpp ) is located in the folder:&amp;nbsp; &lt;STRONG&gt;..\maxsdk\howto\SourceCodeExamples&amp;nbsp;&lt;/STRONG&gt; -- but there is no header file or resource.h file for the footstep.cpp thus I get scores of errors due to unknown resource strings when I try to compile it.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I think all I need is the actual FootStep resource.h file to replace the default one the&amp;nbsp;wizard has created for me.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Output Window errors:&lt;/P&gt;&lt;PRE&gt;Compiling...
FootStepControl.cpp
FootStepControl.cpp(115) : error C2065: 'IDS_RB_FOOTSTEPSAMPLE' : undeclared identifier
FootStepControl.cpp(115) : error C3861: 'GetResString': identifier not found, even with argument-dependent lookup
FootStepControl.cpp(579) : error C2065: 'IDC_SHOWFOOTPRINTS' : undeclared identifier
FootStepControl.cpp(588) : error C2065: 'IDC_ACTIVE_X' : undeclared identifier
FootStepControl.cpp(588) : error C2051: case expression not constant
FootStepControl.cpp(590) : error C2065: 'IDC_ACTIVE_Y' : undeclared identifier
FootStepControl.cpp(590) : error C2051: case expression not constant
FootStepControl.cpp(592) : error C2065: 'IDC_ACTIVE_Z' : undeclared identifier
FootStepControl.cpp(592) : error C2051: case expression not constant
FootStepControl.cpp(594) : error C2065: 'IDC_ACTIVE_XY' : undeclared identifier
FootStepControl.cpp(594) : error C2051: case expression not constant
FootStepControl.cpp(596) : error C2065: 'IDC_ACTIVE_YZ' : undeclared identifier
FootStepControl.cpp(596) : error C2051: case expression not constant
FootStepControl.cpp(598) : error C2065: 'IDC_ACTIVE_ZX' : undeclared identifier
FootStepControl.cpp(598) : error C2051: case expression not constant
FootStepControl.cpp(601) : error C2065: 'IDC_ACTIVE_SYS' : undeclared identifier
FootStepControl.cpp(601) : error C2051: case expression not constant
FootStepControl.cpp(603) : error C2065: 'IDC_ACTIVE_SEL' : undeclared identifier
FootStepControl.cpp(603) : error C2051: case expression not constant
FootStepControl.cpp(605) : error C2065: 'IDC_ACTIVE_LOCAL' : undeclared identifier
FootStepControl.cpp(605) : error C2051: case expression not constant
FootStepControl.cpp(608) : error C2065: 'IDC_ACTIVE_VIEW' : undeclared identifier
FootStepControl.cpp(608) : error C2051: case expression not constant
FootStepControl.cpp(610) : error C2065: 'IDC_ACTIVE_SCREEN' : undeclared identifier
FootStepControl.cpp(610) : error C2051: case expression not constant
FootStepControl.cpp(612) : error C2065: 'IDC_ACTIVE_WORLD' : undeclared identifier
FootStepControl.cpp(612) : error C2051: case expression not constant
FootStepControl.cpp(614) : error C2065: 'IDC_ACTIVE_PARENT' : undeclared identifier
FootStepControl.cpp(614) : error C2051: case expression not constant
FootStepControl.cpp(616) : error C2065: 'IDC_ACTIVE_LOCALSYS' : undeclared identifier
FootStepControl.cpp(616) : error C2051: case expression not constant
FootStepControl.cpp(618) : error C2065: 'IDC_ACTIVE_OBJECT' : undeclared identifier
FootStepControl.cpp(618) : error C2051: case expression not constant
FootStepControl.cpp(622) : error C2065: 'IDC_ENABLE_X' : undeclared identifier
FootStepControl.cpp(622) : error C2051: case expression not constant
FootStepControl.cpp(626) : error C2065: 'IDC_ENABLE_Y' : undeclared identifier
FootStepControl.cpp(626) : error C2051: case expression not constant
FootStepControl.cpp(630) : error C2065: 'IDC_ENABLE_Z' : undeclared identifier
FootStepControl.cpp(630) : error C2051: case expression not constant
FootStepControl.cpp(634) : error C2065: 'IDC_ENABLE_XY' : undeclared identifier
FootStepControl.cpp(634) : error C2051: case expression not constant
FootStepControl.cpp(635) : error C2065: 'IDC_ENABLE_YZ' : undeclared identifier
FootStepControl.cpp(635) : error C2051: case expression not constant
FootStepControl.cpp(636) : error C2065: 'IDC_ENABLE_ZX' : undeclared identifier
FootStepControl.cpp(636) : error C2051: case expression not constant
FootStepControl.cpp(641) : error C2065: 'IDC_ENABLE_SYS' : undeclared identifier
FootStepControl.cpp(641) : error C2051: case expression not constant
FootStepControl.cpp(642) : error C2065: 'IDC_ENABLE_SEL' : undeclared identifier
FootStepControl.cpp(642) : error C2051: case expression not constant
FootStepControl.cpp(643) : error C2065: 'IDC_ENABLE_LOCAL' : undeclared identifier
FootStepControl.cpp(643) : error C2051: case expression not constant
FootStepControl.cpp(648) : error C2065: 'IDC_ENABLE_VIEW' : undeclared identifier
FootStepControl.cpp(648) : error C2051: case expression not constant
FootStepControl.cpp(649) : error C2065: 'IDC_ENABLE_SCREEN' : undeclared identifier
FootStepControl.cpp(649) : error C2051: case expression not constant
FootStepControl.cpp(650) : error C2065: 'IDC_ENABLE_WORLD' : undeclared identifier
FootStepControl.cpp(650) : error C2051: case expression not constant
FootStepControl.cpp(651) : error C2065: 'IDC_ENABLE_PARENT' : undeclared identifier
FootStepControl.cpp(651) : error C2051: case expression not constant
FootStepControl.cpp(652) : error C2065: 'IDC_ENABLE_LOCALSYS' : undeclared identifier
FootStepControl.cpp(652) : error C2051: case expression not constant
FootStepControl.cpp(653) : error C2065: 'IDC_ENABLE_OBJECT' : undeclared identifier
FootStepControl.cpp(653) : error C2051: case expression not constant
FootStepControl.cpp(659) : error C3861: 'IDC_SHOWFOOTPRINTS': identifier not found, even with argument-dependent lookup
FootStepControl.cpp(659) : error C2051: case expression not constant
FootStepControl.cpp(660) : error C3861: 'IDC_SHOWFOOTPRINTS': identifier not found, even with argument-dependent lookup
FootStepControl.cpp(666) : warning C4060: switch statement contains no 'case' or 'default' labels
FootStepControl.cpp(680) : error C2228: left of '.getHInst' must have class/struct/union type
        type is ''unknown-type''
FootStepControl.cpp(680) : error C2065: 'RES_ID_RB' : undeclared identifier
FootStepControl.cpp(681) : error C2065: 'IDD_FOOTSTEPPARAMS' : undeclared identifier
FootStepControl.cpp(683) : error C2065: 'IDS_RB_FOOTSTEPPARAMS' : undeclared identifier
FootStepControl.cpp(680) : error C3861: 'getResMgr': identifier not found, even with argument-dependent lookup
FootStepControl.cpp(683) : error C3861: 'GetResString': identifier not found, even with argument-dependent lookup
FootStepControl.cpp(694) : error C2065: 'IDS_RB_FOOTPRINT' : undeclared identifier
FootStepControl.cpp(694) : error C3861: 'GetResString': identifier not found, even with argument-dependent lookup
DllEntry.cpp&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Can you please provide the necessary resource file for the FootStep control ( ...which you cited as reference for me to look at... ) so that I can get it to build.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;</description>
      <pubDate>Tue, 28 Apr 2015 21:39:48 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5611739#M15500</guid>
      <dc:creator>michael_lawler</dc:creator>
      <dc:date>2015-04-28T21:39:48Z</dc:date>
    </item>
    <item>
      <title>Re: My First Controller Plug-in... Questions--</title>
      <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5620202#M15501</link>
      <description>&lt;P&gt;Sorry, still working on this....&lt;/P&gt;</description>
      <pubDate>Mon, 04 May 2015 18:11:54 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5620202#M15501</guid>
      <dc:creator>lucas.yang</dc:creator>
      <dc:date>2015-05-04T18:11:54Z</dc:date>
    </item>
    <item>
      <title>Re: My First Controller Plug-in... Questions--</title>
      <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5620493#M15502</link>
      <description>&lt;P&gt;Thanks Lucas,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;With the legacy "FootStep" resource files you provided I was able to copy over the missing resources I needed to overcome the errors and&amp;nbsp;get the FootStep Control "howto" sample to compile (..but it doesn't really seem to do much except draw a pattern of footprints).&amp;nbsp; The only dialog it has in the motion panel is the "FootStep Parameters" (maybe I missed some?).&amp;nbsp; Still...&amp;nbsp;it should help me with some of my questions regarding display() and hittest() methods for my real first controller project.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I appreciate you digging up these example files.&lt;/P&gt;</description>
      <pubDate>Mon, 04 May 2015 20:58:15 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5620493#M15502</guid>
      <dc:creator>michael_lawler</dc:creator>
      <dc:date>2015-05-04T20:58:15Z</dc:date>
    </item>
    <item>
      <title>Re: My First Controller Plug-in... Questions--</title>
      <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5785551#M15503</link>
      <description>&lt;P&gt;Lucas,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I still need some help/guidance on parameter block coding with the SDK... I don't find any kind of tutorials or examples of "how-to" properly code a parameter and controller UI rollout within the Motion Panel.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Currently I am stuck trying to fully comprehend parameter blocks in the SDK.&amp;nbsp; In Maxscript parameter blocks and rollout UI are easily grasped-- but to me there seems to be a lack of tutorial/example material of doing parameter blocks in the SDK.&lt;/P&gt;&lt;P&gt;Lucas, in the&amp;nbsp; "footstep control" example project that I sent you...&amp;nbsp; using that sample project to flesh out some behavior for my first controller project...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I modified the "translation" gizmo handling such that any translation (or combinations thereof) would result in the node being moved along (i.e., projected along...) a target vector.&amp;nbsp; I also added code so that the node could not be dragged thru the target location along the target vector (i.e., avoid the flip side)... this makes it stop at the target location and coincident.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What I want to do now is have a "targetDistance" parameter (like objects with targets-- I found the UpdateTargDistance() function in Camera Object...) with a float spinner in the controller's motion panel UIl... such that changes to this targetDistance parameter would also affect node translation along the target vector.&amp;nbsp; Does that make sense?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm confused as to how to achieve this?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So to summarize... currently:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;manipulating the translation gizmo in Move Mode (along any axis or combinations of axes) causes the node to move along the target vector between the node's current position and a target node (currently I was just using the origin-- but I'm in the process of adding a selectable target node)... and the user cannot move it thru the target location (it stops there).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I also want to have a controller UI parameter block FLOAT spinner for "targetDistance" that would also move the node along the target vector... I've been studying the parameter blocks and enums of the other constraint controllers, but I'm not sure how to achieve the above.&amp;nbsp; Secondly, I'm not sure if these two move methods should be related?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;How is the best way to go about achieving this?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Mon, 24 Aug 2015 19:52:55 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5785551#M15503</guid>
      <dc:creator>michael_lawler</dc:creator>
      <dc:date>2015-08-24T19:52:55Z</dc:date>
    </item>
    <item>
      <title>Re: My First Controller Plug-in... Questions--</title>
      <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5786516#M15504</link>
      <description>&lt;P&gt;I am currently studying the 3ds Max 2012 July2012 Webcast on plugin development-- specifically Module 5, Parameter Blocks.&amp;nbsp; Hopefully this will&amp;nbsp;remedy my ignorance.&lt;/P&gt;</description>
      <pubDate>Tue, 25 Aug 2015 12:02:18 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5786516#M15504</guid>
      <dc:creator>michael_lawler</dc:creator>
      <dc:date>2015-08-25T12:02:18Z</dc:date>
    </item>
    <item>
      <title>Re: My First Controller Plug-in... Questions--</title>
      <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5812694#M15505</link>
      <description>&lt;P&gt;Ok... so I have the parameter block and its UI working... I&amp;nbsp;also have added the PRS Key Info Dialog Rollout and the Inheritance LinkInfo Dialog Rollout (borrowed from the PRS controller).&amp;nbsp; But attempting to interact with either the KeyInfo or LinkInfo dialogs results in a crash because I don't have the *pos, *rot, *scl controllers implemented yet... they're just NULL.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;...and this is where I need to chat with an Autodesk Plugin Programmer-- preferrably one with experience writing Transform Controller plugins; because I know what I want to achieve, and so I've got to make some architectural decisions on the inner workings of my controller and I need advice.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Fri, 11 Sep 2015 13:31:21 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5812694#M15505</guid>
      <dc:creator>michael_lawler</dc:creator>
      <dc:date>2015-09-11T13:31:21Z</dc:date>
    </item>
    <item>
      <title>Re: My First Controller Plug-in... Questions--</title>
      <link>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5817586#M15506</link>
      <description>&lt;P&gt;Ok... so I have my matrix3 transform controller loading now when it is assigned to a node from the "Assign Controller" rollout on the Motion Panel. The controller's UI is mostly functional-- at least when it comes to adding/deleting target nodes to the listbox &lt;EM&gt;(as done in the LookAt, Position, and Orientation Constraints).&lt;/EM&gt;&lt;BR /&gt;&lt;BR /&gt;I've also added the "PRS Key Info" and "Inheritance Link Info" Dialogs (taken from the PRS controller's code)... I've gotten these additional dialogs showing up as additional rollouts (on their respective panels).&lt;BR /&gt;&lt;BR /&gt;What I don't like, &lt;I&gt;and would like to&amp;nbsp;change&lt;/I&gt;, is how when I add a node to the listbox it appends its respective weight controller as a sub-anim directly to the main transform controller, like so (assuming 3 nodes have been added to the target listbox):&lt;BR /&gt;&lt;BR /&gt;(-) Transform: myController&lt;BR /&gt;&amp;nbsp;└-- myController Weight 0&lt;BR /&gt;&amp;nbsp;└-- myController Weight 1&lt;BR /&gt;&amp;nbsp;└-- myController Weight 2&lt;BR /&gt;&amp;nbsp;└(+) Position: Position XYZ&lt;BR /&gt;&amp;nbsp;└(+) Rotation: Euler XYZ&lt;BR /&gt;&amp;nbsp;└-- Scale: Bezier Scale&lt;BR /&gt;&lt;BR /&gt;All of the constraint controllers behave this way &lt;EM&gt;(that is to say-- adding the individual weight controllers directly underneath the owning controller)&lt;/EM&gt;... and since my transform controller is based mostly on the LookAt and Link Constraint controllers' code, it behaves this same way.&lt;BR /&gt;&lt;BR /&gt;...whereas, I would rather all these weight controllers, associated with their respective nodes in the listbox, to appear under a "&lt;STRONG&gt;Weights:&lt;/STRONG&gt;" hierarchy like this:&lt;BR /&gt;&lt;BR /&gt;(-) Transform: myController&lt;BR /&gt;&amp;nbsp;├(-) Weights:&amp;nbsp;&lt;BR /&gt;&amp;nbsp;│ └-- myController Weight 0&lt;BR /&gt;&amp;nbsp;│ └-- myController Weight 1&lt;BR /&gt;&amp;nbsp;│ └-- myController Weight 2&lt;BR /&gt;&amp;nbsp;└(+) Position: Position XYZ&lt;BR /&gt;&amp;nbsp;└(+) Rotation: Euler XYZ&lt;BR /&gt;&amp;nbsp;└-- Scale: Bezier Scale&lt;BR /&gt;&lt;BR /&gt;Does that make sense? So if you look at&amp;nbsp;any of the&amp;nbsp;LookAt, Position, or Orientation constraint's code then the solution would equally apply to my own controller.&lt;BR /&gt;&lt;BR /&gt;So how would I re-structure the Parameter Block to rollup the weight controllers like that-- rather than have them all individually listed directly under the main transform controller?&lt;/P&gt;</description>
      <pubDate>Tue, 15 Sep 2015 13:51:49 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/3ds-max-programming-forum/my-first-controller-plug-in-questions/m-p/5817586#M15506</guid>
      <dc:creator>michael_lawler</dc:creator>
      <dc:date>2015-09-15T13:51:49Z</dc:date>
    </item>
  </channel>
</rss>

