Add script to generate zone names

This commit is contained in:
kaetemi 2014-12-09 23:06:07 +01:00
parent cfba18092d
commit 5edbf6d63d

View 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
)
)