Conformal Lattice
Contents
Conformal Lattice#
Conformal lattice in Artisan is considered the mini morphing of the lattice to the given lattice domain. The domain can be a hexahedron or tetrahedron shape. The lattice in definition is therefore considered as the reference status, and the morphed lattice structure is in a deformed status. The mesh used in FEA/CFD computation are utilized for domain discretization, then the task of lattice generation becomes the morphing of the unit lattice into the lattice domain defined by individual element.
Lattice in hexahedron domain#
The conformal lattice here is the mesh based conformal lattice. Artisan requires an user input of mesh, e.g. FEA mesh, to generate the conformal lattice. For using lattice in hexahedron domain, please note that,
Only the hexahedron element containing 8 nodes and 6 faces are supported at this stage.
The supported mesh file format includes Salome
.med
, Abaqus.inp
and Nastranbdf
.
User may use Salome software to generate the mesh, and export the mesh as MED file.
The JSON setup is very similar to the mesh lattice. Example below demonstrates the combinations of conformal TPMS and conformal strut lattice.
{"Setup":{ "Type" : "Geometry",
"Geomfile": ".//sample-obj//Parts02//Parts02.stl",
"Rot" : [0.0,0.0,0.0],
"res":[0.4,0.4,0.4],
"Padding": 3,
"onGPU": false,
"memorylimit": 16106127360
},
"WorkFlow":{
"1": {"Add_Lattice":{
"la_name": ".//Test_json//Parts02_Strut_Infill_LR_conformal.mld", "size": [15.0,15.0,15.0], "thk":1.5, "Rot":[0.0, 0.0, 0.0], "Trans":[0.0, 0.0, 0.0],
"Inv": false, "Fill": false, "Cube_Request": {}
}
},
"2" :{"HS_Interpolate" : {
"la_name": ".//Test_json//Parts02_TPMS_Infill_LR_conformal.mld",
"size": [15.0,15.0,15.0],
"thk": 1.5, "pt":[0.0,0.0,0.0], "Rot":[0.0, 0.0, 0.0], "Trans":[0.0, 0.0, 0.0],
"n_vec":[-1.0,0.0,0.0], "Fill": false, "Cube_Request": {}
}},
"3":{"Export": {"outfile": ".//Test_results/Parts02_Combined_Infill_02.stl"}}
},
"PostProcess":{"CombineMeshes": true,
"RemovePartitionMeshFile": false,
"RemoveIsolatedParts": true,
"ExportLazPts": false}
}
The lattice file .//Test_json//Parts02_Strut_Infill_LR_conformal.mld
defines the mesh file and the type of strut lattice.
{
"type": "ConformalLattice",
"definition": {
"meshfile": ".//sample-obj//Parts02//Parts02.med",
"la_name" : "BCCubic"
}
}
Similarly, the lattice file .//Test_json//Parts02_TPMS_Infill_LR_conformal.mld
defines the mesh file and the type of TPMS lattice. You may also apply the customized lattice definition here by changing la_name
to the customized lattice definition file. Please note that, the customized geometric shape lattice is not supported at this stage.
{
"type": "ConformalLattice",
"definition": {
"meshfile": ".//sample-obj//Parts02//Parts02.med",
"la_name" : "SchwarzPrimitive"
}
}
Then, we could generate a combined conformal lattice infill.

Lattice in tetrahedron domain#
Tetrahedron mesh is widely used for domain discretization. It can be applied to most of difficult geometric shape, and has much higher chance of generating the mesh. Unlike the hexahedron element generation which often involves manual domain partition, the tetrahedron element requires less efforts on the domain partition.
We use a sole of shoes to demonstrate how tetrahedron lattice domain infill works on difficult geometry. Here is the main JSON.
{"Setup":{ "Type" : "Geometry",
"Geomfile": ".//sample-obj//Shore//Shoes_02.stl",
"Rot" : [0.0,0.0,0.0],
"res":[0.4,0.4,0.4],
"Padding": 5,
"onGPU": true,
"memorylimit": 16106127360
},
"WorkFlow":{
"1": {"Add_Lattice":{
"la_name": ".//Test_json//Shoe_TetConformal_Infill_LR.mld",
"size": [18.0,18.0,18.0], "thk":1.2, "Rot":[0.0, 0.0, 0.0], "Trans":[0.0, 0.0, 0.0],
"Inv": false, "Fill": false, "Cube_Request": {}
}
},
"2":{
"Export": {"outfile": ".//Test_results/Shoe_TetConformal_Infill_LR.stl"}}
},
"PostProcess":{"CombineMeshes": true,
"RemovePartitionMeshFile": false,
"RemoveIsolatedParts": false,
"ExportLazPts": false}
}
And the conformal lattice definition "la_name": ".//Test_json//Shoe_TetConformal_Infill_LR.mld"
is below.
{
"type": "ConformalLattice",
"definition": {
"meshfile": ".//sample-obj//Shore//Shoes_02.med",
"la_name" : "Icosahedral"
}
}
The filled geometry has strong visual presentation, as shown below.

The custom lattice definition also supported in tetrahedron mesh infill. In general it has exact same parameter meaning as the periodic lattice, but only need to change "la_domain"
to "Tet"
. The strut nodes should be defined in a standard tetrahedron domain (covered by 4 nodes, (0,0,0)
, (1,0,0)
, (0,1,0)
and (0,0,1)
). Artisan will not check whether the coordinates of nodes in the range, anything beyond the tetrahedron can cause irregular lattice distribution.
Above main JSON can be pushed further that makes the model to be ready for production, as shown below.
{"Setup":{ "Type" : "Geometry",
"Geomfile": ".//sample-obj//Shore//Shoes.stl",
"Rot" : [0.0,0.0,0.0],
"res":[0.4,0.4,0.4],
"Padding": 5,
"onGPU": false,
"memorylimit": 16106127360
},
"WorkFlow":{
"1": {"Add_Lattice":{
"la_name": ".//Test_json//Shoe_TetConformal_Infill_LR.mld",
"size": [18.0,18.0,18.0], "thk":0.8, "Rot":[0.0, 0.0, 0.0], "Trans":[0.0, 0.0, 0.0],
"Inv": false, "Fill": false, "Cube_Request": {}
}
},
"2":{"Substract_Surf_Plate":{
"Surffile": ".//sample-obj//Shore//Shoes_Top.stl","thk":3.5,
"GeomTrim": false}},
"3":{"Add_Surf_Plate":{
"Surffile": ".//sample-obj//Shore//Shoes_Top.stl","thk":3.51,
"GeomTrim": true}},
"4":{"Add_Surf_Plate":{
"Surffile": ".//sample-obj//Shore//Shoes_Btm.stl","thk":2.0,
"GeomTrim": true}},
"6":{"Export": {"outfile": ".//Test_results/Shoe_TetConformal_Infill_LR.stl"}}
},
"PostProcess":{"CombineMeshes": true,
"RemovePartitionMeshFile": false,
"RemoveIsolatedParts": true,
"ExportLazPts": false}
}
The model showed the better presentation. The keywords Add_Surf_Plate
and Substract_Surf_Plate
read the geometric surface and apply thickness to create a solid plate, and then perform add or substract operation on the lattice field. The parameter GeomTrim
controls whether the solid plate to do the cutting operation with the domain geometry.



Conformal Geometric Shape Lattice#
The custom geometric shape lattice is also supported. The example below showed the conformal custom geometric shape lattice infill of the twisted bar.
{"Setup":{ "Type" : "Geometry",
"Geomfile": ".//sample-obj//Twisted_Bar//Twisted_Bar.stl",
"Rot" : [0.0,0.0,0.0],
"res":[2.0,2.0,2.0],
"Padding": 3,
"onGPU": false,
"memorylimit": 16106127360
},
"WorkFlow":{
"1": {"Add_Lattice":{
"la_name": ".//Test_json//Twisted_Bar_ConformalCustomLattice.mld",
"size": [200.0,200.0,200.0], "thk":3.8, "Rot":[0.0, 0.0, 0.0], "Trans":[0.0, 0.0, 0.0],
"Inv": false, "Fill": false, "Cube_Request": {}
}
},
"3":{"Export": {"outfile": ".//Test_results/Twisted_Bar_ConformalCustomLattice.stl"}}
},
"PostProcess":{"CombineMeshes": true,
"RemovePartitionMeshFile": false,
"RemoveIsolatedParts": false,
"ExportLazPts": false}
}
The custom lattice is defined as below.
{
"type": "ConformalLattice",
"definition": {
"meshfile": ".//sample-obj//Twisted_Bar//Twisted_Bar.med",
"la_name" : ".//Test_json//CustomLattice_Geom.txt"
}
}
The twisted bar shall be filled by a series of boxframe.obj
shape. Due to current algorithm limitation, user are required to give the input of thickness parameter thk
(in this case, "thk":3.8
). User may try different thickness level at the low resolution model before moving to the high resolution model generation.
