Add script to generate zone names
This commit is contained in:
parent
cfba18092d
commit
5edbf6d63d
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