This is Part Two of the Geometry Import tutorial. It will be able to read the extended data written by the output script developed in How To ... Output Geometry Data To Text File - Part Two.
NATURAL LANGUAGE
Package as macroScript to let the user place the script on a toolbar, QuadMenu, keyboard shortcut, or Menu.
Create three more arrays to store smoothing groups, material ids, and edge visibility.
Let the user select a file to open.
If the user selected a valid file name, go on with the script.
After reading the vertices and faces as in Part One, also read the smoothing groups, material ids, and edge visibility.
Close the file.
Create a new mesh out of the collected vertices and faces.
Apply the smoothing groups, material ids, and edge visibility values to all faces.
Update the mesh to reflect the changes.
MAXSCRIPT
macroScript ImportMesh category: "HowTo" ( vert_array = #() face_array = #() sgroup_array = #() matid_array = #() edge_array = #() in_name = getOpenFileName() if in_name != undefined then ( in_file = openFile in_name if in_file != undefined then ( num_verts = readValue in_file num_faces = readValue in_file for v = 1 to num_verts do append vert_array (readValue in_file) for f = 1 to num_faces do ( append face_array (readValue in_file) append sgroup_array (readValue in_file) append matid_array (readValue in_file) edge1 = readValue in_file edge2 = readValue in_file edge3 = readValue in_file append edge_array #(edge1, edge2, edge3) ) close in_file new_mesh = mesh vertices:vert_array faces:face_array for f = 1 to num_faces do ( setFaceSmoothGroup new_mesh f sgroup_array[f] setFaceMatID new_mesh f matid_array[f] setEdgeVis new_mesh f 1 edge_array[f][1] setEdgeVis new_mesh f 2 edge_array[f][2] setEdgeVis new_mesh f 3 edge_array[f][3] ) update new_mesh )--end if )--end if )--end macroscript
macroScript ImportMesh category: "HowTo"
(
We define a macroScript that will be called ImportMesh
. To use the script, you can go to Customize and drag the script from the category "HowTo" to a toolbar, a menu, a quad menu, or assign to a keyboard shortcut.
vert_array = #()
face_array = #()
We define the arrays to hold the vertex and face arrays like in Part One,
sgroup_array = #()
matid_array = #()
edge_array = #()
but we also define three more arrays to store smoothing groups, material ids, and edge visibility.
in_name = getOpenFileName()
Instead of reading a fixed name, we will let the user pick a file name.
Standard Open and Save File Dialogs
if in_name != undefined then
(
As long as the file name picked is not undefined (the user did not press Cancel), we can continue.
in_file = openFile in_name
if in_file != undefined then
(
num_verts = readValue in_file
num_faces = readValue in_file
for v = 1 to num_verts do
append vert_array (readValue in_file)
for f = 1 to num_faces do
(
append face_array (readValue in_file)
This part of the reading code is identical to Part One, but we also have to read the additional data:
append sgroup_array (readValue in_file)
append matid_array (readValue in_file)
We read the smoothing group value and the material id value from the file and append to the arrays.
edge1 = readValue in_file
edge2 = readValue in_file
edge3 = readValue in_file
Also, we read the three edge visibility values.
Editable_Mesh : GeometryClass and TriMesh : Value
append edge_array #(edge1, edge2, edge3)
To store the edge visibility for later application, we create a new array and append it to our edge array.
)
close in_file
new_mesh = mesh vertices:vert_array faces:face_array
At this point, we have the mesh just like in Part One. Now, we have to apply the additional data to the resulting mesh.
for f = 1 to num_faces do
(
To do so, we start a new loop,
setFaceSmoothGroup new_mesh f sgroup_array[f]
Then, we set the smoothing group of the f-th face of the new_mesh object to the value stored in the sgroup_array at the f-th position.
setFaceMatID new_mesh f matid_array[f]
We set the material id of the f-th face of the new_mesh object to the value stored in the matid_array at the f-th position.
setEdgeVis new_mesh f 1 edge_array[f][1]
setEdgeVis new_mesh f 2 edge_array[f][2]
setEdgeVis new_mesh f 3 edge_array[f][3]
And, we set the edge visibility of each of the three edges in the f-th face of the new_mesh object to the values stored in the sub-array at f-th position in the edge_array
)
update new_mesh
Finally, we have to update the internal mesh caches to get the changes reflected in the scene. This is a very important step.
)
)
)
To test the script, use the Output script first to create a file. Then open this script, select Tools > Evaluate from the Scripting Editor’s menu or alternatively, press Ctrl+E. The object exported to the file by the other script must appear in the scene. Note that it will have to correct position, but its pivot point will be at the world origin as we did not export local coordinates and object transformations.
If you have implemented texture coordinates export in your Geometry Output script as suggested in the Part Two tutorial, you might also want to alter this script to read the additional data.
Back to
How To ... Output Geometry Data To Text File - Part Two