def revalidate_bounding_box(self): Vector.revalidate_bounding_box(self) if self.length > 0: self.bounding_box.extend_with_point( numpy.array([-self.radius, -self.radius, 0])) self.bounding_box.extend_with_point( numpy.array([self.radius, self.radius, self.length]))
def define_target(self, reference, new_target): Vector.define_target(self, reference, new_target) self.handlers[new_target] = [ new_target.connect("on_number_changed", self.atom_property_changed), new_target.connect("on_user_radius_changed", self.atom_property_changed), new_target.connect("on_user_color_changed", self.atom_property_changed), ]
def draw(self): Vector.draw(self) ColorMixin.draw(self) vb = context.application.vis_backend if self.length > self.rest_length: l_cyl = self.rest_length l_cone = 0.5*(self.length - l_cyl) if l_cone > 0: vb.draw_cone(self.radius, 0.0, l_cone, self.quality) vb.translate(0.0, 0.0, l_cone) if l_cyl > 0: vb.draw_cone(0.5*self.radius, 0.5*self.radius, l_cyl, self.quality) vb.translate(0.0, 0.0, l_cyl) if l_cone > 0: vb.draw_cone(0.0, self.radius, l_cone, self.quality) else: l_cyl = self.length l_cone = 0.5*(self.rest_length - self.length) if l_cone > 0: vb.translate(0.0, 0.0, -l_cone) vb.draw_cone(0.0, self.radius, l_cone, self.quality) vb.translate(0.0, 0.0, l_cone) if l_cyl > 0: vb.draw_cylinder(0.5*self.radius, l_cyl, self.quality) vb.translate(0.0, 0.0, l_cyl) if l_cone > 0: vb.draw_cone(self.radius, 0.0, l_cone, self.quality)
def draw(self): Vector.draw(self) ColorMixin.draw(self) vb = context.application.vis_backend if self.length > self.rest_length: l_cyl = self.rest_length l_cone = 0.5 * (self.length - l_cyl) if l_cone > 0: vb.draw_cone(self.radius, 0.0, l_cone, self.quality) vb.translate(0.0, 0.0, l_cone) if l_cyl > 0: vb.draw_cone(0.5 * self.radius, 0.5 * self.radius, l_cyl, self.quality) vb.translate(0.0, 0.0, l_cyl) if l_cone > 0: vb.draw_cone(0.0, self.radius, l_cone, self.quality) else: l_cyl = self.length l_cone = 0.5 * (self.rest_length - self.length) if l_cone > 0: vb.translate(0.0, 0.0, -l_cone) vb.draw_cone(0.0, self.radius, l_cone, self.quality) vb.translate(0.0, 0.0, l_cone) if l_cyl > 0: vb.draw_cylinder(0.5 * self.radius, l_cyl, self.quality) vb.translate(0.0, 0.0, l_cyl) if l_cone > 0: vb.draw_cone(self.radius, 0.0, l_cone, self.quality)
def revalidate_bounding_box(self): Vector.revalidate_bounding_box(self) if self.length > 0.0: self.bounding_box.extend_with_corners( numpy.array([[0.0, 0.0, 0.0], [0.0, 0.0, self.length]])) temp = { True: self.radius, False: self.arrow_radius }[self.radius > self.arrow_radius] self.bounding_box.extend_with_corners( numpy.array([[-temp, -temp, 0.0], [temp, temp, 0.0]]))
def revalidate_bounding_box(self): Vector.revalidate_bounding_box(self) if self.length > 0.0: self.bounding_box.extend_with_corners(numpy.array([ [0.0, 0.0, 0.0], [0.0, 0.0, self.length] ])) temp = {True: self.radius, False: self.arrow_radius}[self.radius > self.arrow_radius] self.bounding_box.extend_with_corners(numpy.array([ [-temp, -temp, 0.0], [ temp, temp, 0.0] ]))
def draw(self): Vector.draw(self) if self.length <= 0: return half_length = 0.5 * (self.end_position - self.begin_position) if half_length <= 0: return half_radius = 0.5 * (self.begin_radius + self.end_radius) begin = self.children[0].target end = self.children[1].target vb = context.application.vis_backend vb.set_color(*begin.get_color()) vb.translate(0.0, 0.0, self.begin_position) vb.draw_cone(self.begin_radius, half_radius, half_length, self.quality) vb.translate(0.0, 0.0, half_length) vb.set_color(*end.get_color()) vb.draw_cone(half_radius, self.end_radius, half_length, self.quality)
def calc_vector_dimensions(self): Vector.calc_vector_dimensions(self) begin = self.children[0].target end = self.children[1].target if self.length <= 0.0: return c = (begin.get_radius() - end.get_radius()) / self.length if abs(c) > 1: self.begin_radius = 0 self.end_radius = 0 self.begin_position = 0 self.end_position = 0 else: scale = 0.4 s = math.sqrt(1 - c**2) self.begin_radius = scale * begin.get_radius() * s self.end_radius = scale * end.get_radius() * s self.begin_position = scale * c * begin.get_radius() self.end_position = self.length + scale * c * end.get_radius()
def calc_vector_dimensions(self): Vector.calc_vector_dimensions(self) begin = self.children[0].target end = self.children[1].target if self.length <= 0.0: return c = (begin.get_radius() - end.get_radius()) / self.length if abs(c) > 1: self.begin_radius = 0 self.end_radius = 0 self.begin_position = 0 self.end_position = 0 else: scale = 0.4 s = numpy.sqrt(1 - c**2) self.begin_radius = scale * begin.get_radius() * s self.end_radius = scale * end.get_radius() * s self.begin_position = scale * c * begin.get_radius() self.end_position = self.length + scale * c * end.get_radius()
def draw(self): Vector.draw(self) ColorMixin.draw(self) vb = context.application.vis_backend if self.length == 0.0: return # usefull variable if self.arrow_radius <= 0: arrowtop_length = self.arrow_length else: arrowtop_length = self.arrow_length / self.arrow_radius * self.radius # stick and bottom if (self.length - arrowtop_length > 0) and (self.radius > 0): vb.draw_cylinder(self.radius, self.length - arrowtop_length, self.quality) vb.set_quadric_inside() vb.draw_disk(self.radius, self.quality) # arrowtop if (self.radius > 0): if (arrowtop_length > 0): vb.push_matrix() vb.translate(0.0, 0.0, self.length - arrowtop_length) vb.set_quadric_outside() vb.draw_cone(self.radius, 0, arrowtop_length, self.quality) vb.pop_matrix() else: vb.push_matrix() vb.translate(0.0, 0.0, self.length) vb.set_quadric_outside() vb.draw_disk(self.radius, self.quality) vb.pop_matrix() # arrow if (self.arrow_radius - self.radius > 0) and (self.arrow_length - arrowtop_length) > 0: vb.push_matrix() vb.translate(0.0, 0.0, (self.length - self.arrow_length) * (self.arrow_position)) vb.set_quadric_outside() vb.draw_cone(self.arrow_radius, self.radius, self.arrow_length - arrowtop_length, self.quality) vb.set_quadric_inside() vb.draw_disk(self.arrow_radius, self.quality) vb.pop_matrix() vb.set_quadric_outside()
def draw(self): Vector.draw(self) ColorMixin.draw(self) vb = context.application.vis_backend if self.length == 0.0: return # usefull variable if self.arrow_radius <= 0: arrowtop_length = self.arrow_length else: arrowtop_length = self.arrow_length / self.arrow_radius * self.radius # stick and bottom if (self.length - arrowtop_length > 0) and (self.radius > 0): vb.draw_cylinder(self.radius, self.length - arrowtop_length, self.quality) vb.set_quadric_inside() vb.draw_disk(self.radius, self.quality) # arrowtop if self.radius > 0: if arrowtop_length > 0: vb.push_matrix() vb.translate(0.0, 0.0, self.length - arrowtop_length) vb.set_quadric_outside() vb.draw_cone(self.radius, 0, arrowtop_length, self.quality) vb.pop_matrix() else: vb.push_matrix() vb.translate(0.0, 0.0, self.length) vb.set_quadric_outside() vb.draw_disk(self.radius, self.quality) vb.pop_matrix() # arrow if (self.arrow_radius - self.radius > 0) and (self.arrow_length - arrowtop_length) > 0: vb.push_matrix() vb.translate(0.0, 0.0, (self.length - self.arrow_length) * (self.arrow_position)) vb.set_quadric_outside() vb.draw_cone(self.arrow_radius, self.radius, self.arrow_length - arrowtop_length, self.quality) vb.set_quadric_inside() vb.draw_disk(self.arrow_radius, self.quality) vb.pop_matrix() vb.set_quadric_outside()
def initnonstate(self): Vector.initnonstate(self) self.handlers = {}
def revalidate_bounding_box(self): Vector.revalidate_bounding_box(self) if self.length > 0: temp = {True: self.begin_radius, False: self.end_radius}[self.begin_radius > self.end_radius] self.bounding_box.extend_with_point(numpy.array([-temp, -temp, self.begin_position])) self.bounding_box.extend_with_point(numpy.array([temp, temp, self.end_position]))
def undefine_target(self, reference, old_target): Vector.undefine_target(self, reference, old_target) for handler in self.handlers[old_target]: old_target.disconnect(handler)
def revalidate_bounding_box(self): Vector.revalidate_bounding_box(self) if self.length > 0: self.bounding_box.extend_with_point(numpy.array([-self.radius, -self.radius, 0])) self.bounding_box.extend_with_point(numpy.array([self.radius, self.radius, self.length]))