Add script to generate zone names
This commit is contained in:
parent
f6f498ed95
commit
be11582a17
1 changed files with 68 additions and 0 deletions
68
code/nel/tools/3d/plugin_max/scripts/nel_zone_namer.ms
Normal file
68
code/nel/tools/3d/plugin_max/scripts/nel_zone_namer.ms
Normal file
|
@ -0,0 +1,68 @@
|
|||
-- This script sets proper centered zone positions and generates their names
|
||||
-- Use after cutting the zone into 160m by 160m pieces
|
||||
|
||||
cell_size = 160.0
|
||||
offset_x = 7680 / 2
|
||||
offset_y = -(20480 + (5120 / 2))
|
||||
|
||||
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
|
||||
-- http://proofofprogress.blogspot.be/2011/03/solution-align-pivot-to-world-without.html
|
||||
Function alignPivotToWorld &theObject = (
|
||||
--VLM = Visible Local Matrix.
|
||||
--The matrix/pivot you see when selecting object and "Local" axis is selected as viewable.
|
||||
VLM = theObject.Transform;
|
||||
IP_LocalRot = theObject.objectOffsetRot; --Rotation to be used later.
|
||||
IP_LOCAL = theObject.objectOffsetPos; --Invisible Pivot Local coordinates
|
||||
--In relation to VLM matrix.
|
||||
IP_WORLD = IP_LOCAL * VLM; --World Coordinates of Invisible Pivot. [Local To World Transform]
|
||||
VLM_0 = matrix3 1; --Reset Visible Local matrix coordinates.
|
||||
|
||||
NEW_IP_LOCAL = IP_WORLD * inverse(VLM_0); --[World To local Transform]
|
||||
|
||||
theObject.Transform = VLM_0;
|
||||
theObject.objectOffsetPos = NEW_IP_LOCAL;
|
||||
|
||||
--Now Handle Rotation:
|
||||
--Since rotation of visible local matrix has been zeroed out,
|
||||
--You must add that loss to the invisible pivot rotation.
|
||||
GeomWorldRot = VLM.RotationPart + IP_LocalRot;
|
||||
theObject.objectOffsetRot = GeomWorldRot;
|
||||
)
|
||||
|
||||
-- Convert a coordinate in a name
|
||||
-- name = coordToName #(x, y)
|
||||
fn coordToName coord =
|
||||
(
|
||||
up = floor(coord[1] / 26) + 1
|
||||
down = floor(coord[1] - ((up-1) * 26)) + 1
|
||||
return (((-coord[2] + 1) as integer) as string) + "_" + alphabet[up] + alphabet[down]
|
||||
)
|
||||
|
||||
fn realCoordToName coord =
|
||||
(
|
||||
return coordToName(#(((coord[1] + offset_x) / cell_size) + 0.5, ((coord[2] + offset_y) / cell_size) + 0.5))
|
||||
)
|
||||
|
||||
fn roundedCoord coord =
|
||||
(
|
||||
return #(ceil(coord[1] / cell_size) * cell_size - (cell_size / 2), ceil(coord[2] / cell_size) * cell_size - (cell_size / 2))
|
||||
)
|
||||
|
||||
max select none
|
||||
clearselection()
|
||||
|
||||
for node in geometry do
|
||||
(
|
||||
if (classof node) == RklPatch or (classof node) == Editable_Patch then
|
||||
(
|
||||
newcoords = roundedCoord(#(node.center.x, node.center.y))
|
||||
newname = realCoordToName(newcoords)
|
||||
node.name = newname
|
||||
alignPivotToWorld &node
|
||||
node.pivot.x = newcoords[1]
|
||||
node.pivot.y = newcoords[2]
|
||||
resetxform node
|
||||
maxOps.CollapseNode node off
|
||||
)
|
||||
)
|
Loading…
Reference in a new issue