<?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: Auto snap verts to whole numbers on object move or dragging? in 3ds Max Forum</title>
    <link>https://forums.autodesk.com/t5/3ds-max-forum/auto-snap-verts-to-whole-numbers-on-object-move-or-dragging/m-p/5452945#M91479</link>
    <description>&lt;P&gt;Here's a sample script, handles the correction at viewport redraw to avoid computing it all the time and only works with editable poly active in the modifier panel. Note that it could get quite slow with heavy meshes.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;try destroyDialog positionSnap catch()&lt;BR /&gt;rollout positionSnap "Position Snap" width:125&lt;BR /&gt;(&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;spinner spnSnapMult "Unit: " range:[0,1e6,100] fieldWidth:65 type:#worldUnits align:#left&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;checkButton chbSnap "SNAP" width:100 height:25 align:#left&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;local getPolyVert = polyOp.getVert&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;local setPolyVert = polyOp.setVert&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;local getPolyVertCount = polyOp.getNumVerts&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;local vertsPos&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;fn roundNearest nr mult =&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;(&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if nr &amp;lt; 0 do mult *= -1&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;nr + mult/2 - 1 - mod (nr + mult/2 - 1) mult&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;fn roundVert vert val =&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;(&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;vert.x = roundNearest vert.x val&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;vert.y = roundNearest vert.y val&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;vert.z = roundNearest vert.z val&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;vert&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;fn getRoundedVerts obj =&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;(&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;local vertCount = getPolyVertCount obj&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;local snapVal = spnSnapMult.value&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;vertsPos = for v = 1 to vertCount collect roundVert (getPolyVert obj v) snapVal&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;fn setRoundedVerts obj =&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;setPolyVert obj #all (getRoundedVerts obj)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;fn redefineGeometryHandlers sel =&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;(&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;deleteAllChangeHandlers id:#autoSnapGeometry&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;when geometry sel changes id:#autoSnapGeometry handleAt:#redrawViews obj do setRoundedVerts obj&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;fn removeHandlers =&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;deleteAllChangeHandlers id:#autoSnapGeometry&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;on positionSnap open do&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;removeHandlers()&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;on chbSnap changed state do&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if state then redefineGeometryHandlers (modPanel.getCurrentObject())&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;else removeHandlers()&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;on positionSnap close do&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;removeHandlers()&lt;BR /&gt;)&lt;BR /&gt;createDialog positionSnap&lt;/PRE&gt;</description>
    <pubDate>Thu, 25 Dec 2014 20:40:16 GMT</pubDate>
    <dc:creator>Swordslayer</dc:creator>
    <dc:date>2014-12-25T20:40:16Z</dc:date>
  </channel>
</rss>

