Beispiel #1
0
 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)
Beispiel #2
0
 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)
Beispiel #3
0
 def draw_spike(self):
     ColorMixin.draw(self)
     vb = context.application.vis_backend
     vb.draw_quad_strip((
         numpy.array([0.5773502692, -0.5773502692, -0.5773502692]),
         [numpy.array([self.spike_length, self.spike_length, self.spike_length])]
     ), (
         numpy.array([1, 0, 0]),
         [numpy.array([self.spike_thickness, 0, 0])]
     ), (
         numpy.array([-0.5773502692, 0.5773502692, -0.5773502692]),
         [numpy.array([self.spike_length, self.spike_length, self.spike_length])]
     ), (
         numpy.array([0, 1, 0]),
         [numpy.array([0, self.spike_thickness, 0])]
     ), (
         numpy.array([-0.5773502692, -0.5773502692, 0.5773502692]),
         [numpy.array([self.spike_length, self.spike_length, self.spike_length])]
     ), (
         numpy.array([0, 0, 1]),
         [numpy.array([0, 0, self.spike_thickness])]
     ), (
         numpy.array([0.5773502692, -0.5773502692, -0.5773502692]),
         [numpy.array([self.spike_length, self.spike_length, self.spike_length])]
     ), (
         numpy.array([1, 0, 0]),
         [numpy.array([self.spike_thickness, 0, 0])]
     ))
Beispiel #4
0
    def draw(self):
        GLReferentBase.draw(self)
        ColorMixin.draw(self)
        vb = context.application.vis_backend
        p0,p1,p2,p3 = [target.get_frame_relative_to(self.parent).t for target in self.get_targets()]

        def get_normal(a,b,c,d):
            result = numpy.cross(a-b,c-b)
            norm = numpy.linalg.norm(result)
            if norm < 1e-8:
                return numpy.zeros(3,float)
            else:
                result /= norm
            if numpy.dot(result,d-b) > 0:
                result *= -1
            return result

        vb.draw_triangles((
            get_normal(p0,p1,p2,p3),
            [p0,p1,p2],
        ), (
            get_normal(p1,p2,p3,p0),
            [p1,p2,p3],
        ), (
            get_normal(p2,p3,p0,p1),
            [p2,p3,p0],
        ), (
            get_normal(p3,p0,p1,p2),
            [p3,p0,p1],
        ))
Beispiel #5
0
    def draw(self):
        GLGeometricBase.draw(self)
        ColorMixin.draw(self)
        vb = context.application.vis_backend

        x, y, z = numpy.identity(3)
        sides = numpy.array([(x, y, z, z), (x, y, -z, -z), (y, z, x, x),
                             (y, z, -x, -x), (z, x, y, y), (z, x, -y, -y)],
                            float)
        sides[:, :3] *= 0.5 * self.size

        vb.draw_quads(*[(normal, [
            a + b + c,
            a - b + c,
            -a - b + c,
            -a + b + c,
        ]) for a, b, c, normal in sides])
Beispiel #6
0
 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()
Beispiel #7
0
    def draw(self):
        GLGeometricBase.draw(self)
        ColorMixin.draw(self)
        vb = context.application.vis_backend

        x,y,z = numpy.identity(3)
        sides = numpy.array([(x,y,z,z), (x,y,-z,-z), (y,z,x,x), (y,z,-x,-x), (z,x,y,y), (z,x,-y,-y)], float)
        sides[:,:3] *= 0.5*self.size

        vb.draw_quads(*[
            (
                normal,
                [
                     a+b+c,
                     a-b+c,
                    -a-b+c,
                    -a+b+c,
                ]
            ) for a,b,c,normal in sides
        ])
Beispiel #8
0
 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()
Beispiel #9
0
 def draw(self):
     GLReferentBase.draw(self)
     ColorMixin.draw(self)
     self.update_normal()
     vb = context.application.vis_backend
     vb.draw_quads((
         self.normal,
         [
             self.l_l + 0.001 * self.normal,
             self.l_h + 0.001 * self.normal,
             self.h_h + 0.001 * self.normal,
             self.h_l + 0.001 * self.normal,
         ],
     ), (
         -self.normal,
         [
             self.h_l - 0.001 * self.normal,
             self.h_h - 0.001 * self.normal,
             self.l_h - 0.001 * self.normal,
             self.l_l - 0.001 * self.normal,
         ],
     ))
Beispiel #10
0
 def draw(self):
     GLReferentBase.draw(self)
     ColorMixin.draw(self)
     self.update_normal()
     vb = context.application.vis_backend
     vb.draw_quads((
         self.normal,
         [
             self.l_l + 0.001*self.normal,
             self.l_h + 0.001*self.normal,
             self.h_h + 0.001*self.normal,
             self.h_l + 0.001*self.normal,
         ],
     ), (
         - self.normal,
         [
             self.h_l - 0.001*self.normal,
             self.h_h - 0.001*self.normal,
             self.l_h - 0.001*self.normal,
             self.l_l - 0.001*self.normal,
         ],
     ))
Beispiel #11
0
 def draw_spike(self):
     ColorMixin.draw(self)
     vb = context.application.vis_backend
     vb.draw_quad_strip(
         (numpy.array([0.5773502692, -0.5773502692, -0.5773502692]), [
             numpy.array(
                 [self.spike_length, self.spike_length, self.spike_length])
         ]), (numpy.array([1, 0, 0
                           ]), [numpy.array([self.spike_thickness, 0, 0])]),
         (numpy.array([-0.5773502692, 0.5773502692, -0.5773502692]), [
             numpy.array(
                 [self.spike_length, self.spike_length, self.spike_length])
         ]), (numpy.array([0, 1, 0
                           ]), [numpy.array([0, self.spike_thickness, 0])]),
         (numpy.array([-0.5773502692, -0.5773502692, 0.5773502692]), [
             numpy.array(
                 [self.spike_length, self.spike_length, self.spike_length])
         ]), (numpy.array([0, 0, 1
                           ]), [numpy.array([0, 0, self.spike_thickness])]),
         (numpy.array([0.5773502692, -0.5773502692, -0.5773502692]), [
             numpy.array(
                 [self.spike_length, self.spike_length, self.spike_length])
         ]), (numpy.array([1, 0, 0
                           ]), [numpy.array([self.spike_thickness, 0, 0])]))
Beispiel #12
0
 def draw(self):
     GLGeometricBase.draw(self)
     ColorMixin.draw(self)
     vb = context.application.vis_backend
     vb.draw_sphere(self.radius, self.quality)
Beispiel #13
0
 def draw(self):
     GLGeometricBase.draw(self)
     ColorMixin.draw(self)
     vb = context.application.vis_backend
     vb.draw_sphere(self.radius, self.quality)