v0.13.2
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | List of all members
print_rollers.RigidBody Class Reference

Public Member Functions

def __init__ (self)
 
def set_body_data_from_vertex (self, body_type_id, orientation_vec, roller_data)
 
def get_body (self, origin)
 

Public Attributes

 body_type
 
 orientation
 
 radius1
 
 inner_radius
 
 height
 
 angle
 
 angle_a
 
 angle_b
 
 resolution
 

Detailed Description

Definition at line 62 of file print_rollers.py.

Constructor & Destructor Documentation

◆ __init__()

def print_rollers.RigidBody.__init__ (   self)

Definition at line 63 of file print_rollers.py.

63 def __init__(self):
64 self.body_type = 'plane'
65 self.orientation = [0, 0, 1]
66 self.radius1 = 5
67 self.inner_radius = 1
68 self.height = 1
69 self.angle = 45
70 self.angle_a = 45
71 self.angle_b = 45
72 self.resolution = 64
73

Member Function Documentation

◆ get_body()

def print_rollers.RigidBody.get_body (   self,
  origin 
)

Definition at line 96 of file print_rollers.py.

96 def get_body(self, origin):
97 # origin=[0, 0, 0]
98 orientation_np = np.array(self.orientation)
99 scale = np.linalg.norm(orientation_np)
100 normz_orien = orientation_np / scale
101
102 body = pv.Box()
103
104 if(self.body_type == 'cylinder'):
105 body = pv.Cylinder(center=origin, direction=self.orientation, radius=self.radius1,
106 height=self.height, resolution=self.resolution)
107 elif(self.body_type == 'sphere'):
108 body = pv.Sphere(center=origin, radius=self.radius1, phi_resolution=self.resolution)
109 elif (self.body_type == 'torus'):
110 pyvista_radius = self.radius1 - self.inner_radius
111 body1 = pv.ParametricTorus(ringradius=pyvista_radius, crosssectionradius=self.inner_radius)
112 body2 = pv.Cylinder(center=[0,0,0], direction=[0, 0, 1], radius=pyvista_radius,
113 height=self.inner_radius*2, resolution=self.resolution)
114 roller = [body1, body2]
115 body = pv.MultiBlock(roller).combine()
116
117
118 angles = get_euler_angles_from_vectors(np.array([0., 0., 1.]), normz_orien)
119 # print(angles[0], angles[1], angles[2])
120 body.rotate_x(angles[0])
121 body.rotate_y(angles[1])
122 body.rotate_z(angles[2])
123
124 transform_matrix = np.array(
125 [[1, 0, 0, origin[0]], [0, 1, 0, origin[1]], [0, 0, 1, origin[2]], [0, 0, 0, 1]])
126 body.transform(transform_matrix, inplace=True)
127
128 elif(self.body_type == 'plane'):
129 body = pv.Plane(center=origin, direction=self.orientation, i_resolution=self.resolution,
130 j_resolution=self.resolution, i_size=scale, j_size=scale)
131
132 elif(self.body_type == 'cone'):
133 body = get_capped_cone(origin, self.orientation, self.radius1, self.angle, self.height, self.resolution)
134 # body.plot(color="tan", smooth_shading=True)
135 # body.save("test_mesh_0.vtu")
136 elif(self.body_type == 'roller'):
137 # torus
138 pyvista_radius = self.radius1 - self.inner_radius
139 body1 = pv.ParametricTorus(ringradius=pyvista_radius, crosssectionradius=self.inner_radius)
140 angles = get_euler_angles_from_vectors(np.array([0., 0., 1.]), normz_orien)
141 body1.rotate_x(angles[0])
142 body1.rotate_y(angles[1])
143 body1.rotate_z(angles[2])
144 transform_matrix = np.array(
145 [[1, 0, 0, origin[0]], [0, 1, 0, origin[1]], [0, 0, 1, origin[2]], [0, 0, 0, 1]])
146 body1.transform(transform_matrix, inplace=True)
147
148 # cone1
149 slope_a = np.tan(self.angle_a * np.pi / 180)
150 offset_a = (self.inner_radius * slope_a / np.sqrt(1 + slope_a * slope_a)) + self.height / 2
151 new_origin = origin + normz_orien * offset_a
152 cone_rad = pyvista_radius + self.inner_radius / np.sqrt(1 + slope_a * slope_a)
153 body2 = get_capped_cone(new_origin, self.orientation, cone_rad, self.angle_a, self.height, self.resolution)
154
155 # cone2
156 slope_b = np.tan(self.angle_b * np.pi / 180)
157 offset_b = (self.inner_radius * slope_b / np.sqrt(1 + slope_b * slope_b)) + self.height / 2
158 new_origin = origin - normz_orien * offset_b
159 cone_rad = pyvista_radius + self.inner_radius / np.sqrt(1 + slope_b * slope_b)
160 orientation_flip = normz_orien * -1
161 body3 = get_capped_cone(new_origin, orientation_flip, cone_rad, self.angle_b, self.height, self.resolution)
162 body = pv.MultiBlock([body1, body2, body3]).combine()
163 else:
164 exit("this body type is not supported")
165
166 # body.plot()
167 return body
168
169
170
if(!static_cast< bool >(ifstream(param_file)))

◆ set_body_data_from_vertex()

def print_rollers.RigidBody.set_body_data_from_vertex (   self,
  body_type_id,
  orientation_vec,
  roller_data 
)

Definition at line 74 of file print_rollers.py.

74 def set_body_data_from_vertex(self, body_type_id, orientation_vec, roller_data):
75 types = {0: 'plane',
76 1: 'sphere',
77 2: 'cylinder',
78 3: 'cone',
79 4: 'torus',
80 5: 'roller',
81 6: 'stl',
82 7: 'nurbs',
83 8: 'last'
84 }
85
86 self.body_type = types[body_type_id]
87 self.orientation = orientation_vec
88 self.radius1 = roller_data[0]
89 self.inner_radius = roller_data[1]
90 # sometimes we use infinite cones or cylinders
91 self.height = roller_data[2] if not np.isinf(roller_data[2]) else self.radius1 * 3
92 self.angle = roller_data[3]
93 self.angle_a = roller_data[4]
94 self.angle_b = roller_data[5]
95

Member Data Documentation

◆ angle

print_rollers.RigidBody.angle

Definition at line 69 of file print_rollers.py.

◆ angle_a

print_rollers.RigidBody.angle_a

Definition at line 70 of file print_rollers.py.

◆ angle_b

print_rollers.RigidBody.angle_b

Definition at line 71 of file print_rollers.py.

◆ body_type

print_rollers.RigidBody.body_type

Definition at line 64 of file print_rollers.py.

◆ height

print_rollers.RigidBody.height

Definition at line 68 of file print_rollers.py.

◆ inner_radius

print_rollers.RigidBody.inner_radius

Definition at line 67 of file print_rollers.py.

◆ orientation

print_rollers.RigidBody.orientation

Definition at line 65 of file print_rollers.py.

◆ radius1

print_rollers.RigidBody.radius1

Definition at line 66 of file print_rollers.py.

◆ resolution

print_rollers.RigidBody.resolution

Definition at line 72 of file print_rollers.py.


The documentation for this class was generated from the following file: