Module voxelfuse_examples.basic_strength_test_coupon.strength_test_coupon
Generate a coupon for tensile testing.
Includes options for generating molds and fixtures for casting the center coupon region.
Copyright 2019 - Cole Brauer, Dan Aukes
Expand source code
"""
Generate a coupon for tensile testing.
Includes options for generating molds and fixtures for casting the center coupon region.
----
Copyright 2019 - Cole Brauer, Dan Aukes
"""
import time
import numpy as np
from voxelfuse.voxel_model import VoxelModel, Axes
from voxelfuse.mesh import Mesh
from voxelfuse.materials import material_properties
if __name__=='__main__':
# Settings
stl = True
highRes = False
blur = True
blurRadius = 2
mold = True
moldWallThickness = 2
moldGap = 1
fixture = True
fixtureWallThickness = 5
fixtureGap = 1
export = False
# Import coupon components
print('Importing Files')
if stl:
if highRes:
end1 = VoxelModel.fromMeshFile('end1x10.stl', (0, 0, 0), 1)
center = VoxelModel.fromMeshFile('centerx10.stl', (670, 30, 0), 2)
end2 = VoxelModel.fromMeshFile('end2x10.stl', (980, 0, 0), 1)
else:
end1 = VoxelModel.fromMeshFile('end1.stl', (0, 0, 0), 1)
center = VoxelModel.fromMeshFile('center.stl', (66, 4, 0), 2)
end2 = VoxelModel.fromMeshFile('end2.stl', (98, 0, 0), 1)
# Combine components
coupon = end1 | center | end2
else: # use vox file
coupon = VoxelModel.fromVoxFile('coupon.vox') # Should use materials 1 and 2 (red and green)
start = time.time()
if blur: # Blur materials
print('Blurring')
coupon = coupon.blur(blurRadius)
coupon = coupon.scaleValues()
coupon = coupon.round()
coupon = coupon.removeDuplicateMaterials()
if mold: # Generate mold feature around material 2
print('Generating Mold')
# Find all voxels containing <50% material 2
material_vector = np.zeros(len(material_properties) + 1)
material_vector[0] = 1
material_vector[3] = 0.5
printed_components = coupon - coupon.setMaterialVector(material_vector)
printed_components.materials = np.around(printed_components.materials, 0)
printed_components = printed_components.scaleValues()
# Generate mold body
mold_model = coupon.difference(printed_components).dilate(moldWallThickness+1, plane=Axes.XY)
# Find clearance to prevent mold from sticking to model and apply clearance to body
mold_model = mold_model.difference(printed_components.dilate(moldGap, plane=Axes.XY))
if fixture: # Generate a fixture around the full part to support mold
print('Generating Fixture')
coupon = coupon | coupon.web('laser', 1, 5).setMaterial(3)
# Add mold to coupon model
coupon = coupon | mold_model.setMaterial(3)
end = time.time()
processingTime = (end - start)
print("Processing time = %s" % processingTime)
# Create mesh data
print('Meshing')
mesh1 = Mesh.fromVoxelModel(coupon)
if export:
print('Exporting')
# Get non-cast components
# Find all voxels containing <50% material 2
material_vector = np.zeros(len(material_properties) + 1)
material_vector[0] = 1
material_vector[3] = 0.5
printed_components = coupon - coupon.setMaterialVector(material_vector)
printed_components.materials = np.around(printed_components.materials, 0)
printed_components = printed_components.scaleValues()
printed_components = printed_components.setMaterial(1)
mesh2 = Mesh.fromVoxelModel(printed_components)
mesh2.export('modified-coupon.stl')
# Create plot
print('Plotting')
mesh1.viewer()