How To ... Read Geometry Data From Text File - Part Two

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:

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

)

)

)

 

Step-By-Step

macroScript ImportMesh category:"HowTo"

(

We define a macroScript which 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.

Defining Macro Scripts

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 3 more arrays to store smoothing groups, material ids and edge visibility.

Array Values

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 (in other words the user did not press Cancel), we 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 3 edge visibility values.

Editable_Mesh : GeometryClass and TriMesh : Value

append edge_array #(edge1, edge2, edge3)

In order 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 3 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!

)

)

)

Using the Script

To test the script, use the Output script first to create a file. Then open this script, select File>Evaluate from the MAXScript Editor’s menu or alternatively, press Ctrl+E. The object exported to the file by the other script should 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.

Where to go from here

If you have managed to implement 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" Tutorials Index Page

How To ... Output Geometry Data To Text File - Part Two

How To ... Read Geometry Data From Text File - Part One

How To ... Output Geometry Data To Text File - Part One