Beispiel #1
0
    def __init__(self, a, b):
        """
        Define the directed line from L{Node} a to L{Node} b.

        @param a: Starting point on line.
        @type a: L{Node} object
        @param b: Finishing point on line.
        @type b: L{Node} object
        """
        assert isinstance(a, Node)
        assert isinstance(b, Node)
        self.np = 2
        if use_libgeom():
            self.pap = libgeom.create_point_3D_array(self.np)
            ppa = libgeom.get_point_3D_ptr(self.pap, 0)
            libgeom.point_3D_set_label(ppa, a.label)
            ppa.x = a.x
            ppa.y = a.y
            ppa.z = a.z
            ppb = libgeom.get_point_3D_ptr(self.pap, 1)
            libgeom.point_3D_set_label(ppb, b.label)
            ppb.x = b.x
            ppb.y = b.y
            ppb.z = b.z
            self.elementType = libgeom.GPATH_LINE
        else:
            self.pa = a.copy()
            self.pb = b.copy()
        return
Beispiel #2
0
 def __str__(self):
     """
     String representation of the line.
     """
     if use_libgeom():
         ppa = libgeom.get_point_3D_ptr(self.pap, 0)
         ppb = libgeom.get_point_3D_ptr(self.pap, 1)
         xa = ppa.x
         ya = ppa.y
         za = ppa.z
         labela = ppa.label
         xb = ppb.x
         yb = ppb.y
         zb = ppb.z
         labelb = ppb.label
     else:
         xa = self.pa.x
         ya = self.pa.y
         za = self.pa.z
         labela = self.pa.label
         xb = self.pb.x
         yb = self.pb.y
         zb = self.pb.z
         labelb = self.pb.label
     text = "Line(" + \
            ("Node(%g,%g,%g,\"%s\")," % (xa, ya, za, labela)) + \
            ("Node(%g,%g,%g,\"%s\"))" % (xb, yb, zb, labelb))
     return text
Beispiel #3
0
    def __init__(self, B):
        """
        Defines a Bezier polynomial of order N=len(B)-1.

        @param B: The control nodes of the curve,  B[0] --> B[-1].
        @type B: list of L{Node} objects
        """
        assert type(B) == type(list())
        self.np = len(B)
        assert self.np >= 2
        self.N = self.np - 1
        for i in range(self.np):
            assert isinstance(B[i], Node)
        if use_libgeom():
            self.pap = libgeom.create_point_3D_array(self.np)
            for i in range(self.np):
                pp = libgeom.get_point_3D_ptr(self.pap, i)
                libgeom.point_3D_set_label(pp, B[i].label)
                pp.x = B[i].x
                pp.y = B[i].y
                pp.z = B[i].z
            self.elementType = libgeom.GPATH_BEZIER
        else:
            self.B = []
            for node in B:
                # Note that we duplicate the Node objects completely.
                self.B.append(node.copy())
        return
Beispiel #4
0
    def __init__(self, a, b, c):
        """
        @param a: Starting point for arc.
        @type a: L{Node} object
        @param b: Finish point for arc. 
        @type b: L{Node} object
        @param c: Centre of curvature.
        @type c: L{Node} object

        @note: The radii c-->a and c-->b must match closely.
        """
        assert isinstance(a, Node), "First point should be a Node object."
        assert isinstance(b, Node), "Final point should be a Node object."
        assert isinstance(c, Node), "Centre point should be a Node object."
        self.np = 3
        dx1 = a.x - c.x
        dy1 = a.y - c.y
        dz1 = a.z - c.z
        r1 = math.sqrt(dx1 * dx1 + dy1 * dy1 + dz1 * dz1)
        dx2 = b.x - c.x
        dy2 = b.y - c.y
        dz2 = b.z - c.z
        r2 = math.sqrt(dx2 * dx2 + dy2 * dy2 + dz2 * dz2)
        assert abs(r1 - r2) / (r1 + 1.0) < 1.0e-5
        if use_libgeom():
            self.pap = libgeom.create_point_3D_array(self.np)
            ppa = libgeom.get_point_3D_ptr(self.pap, 0)
            libgeom.point_3D_set_label(ppa, a.label)
            ppa.x = a.x
            ppa.y = a.y
            ppa.z = a.z
            ppb = libgeom.get_point_3D_ptr(self.pap, 1)
            libgeom.point_3D_set_label(ppb, b.label)
            ppb.x = b.x
            ppb.y = b.y
            ppb.z = b.z
            ppc = libgeom.get_point_3D_ptr(self.pap, 2)
            libgeom.point_3D_set_label(ppc, c.label)
            ppc.x = c.x
            ppc.y = c.y
            ppc.z = c.z
            self.elementType = libgeom.GPATH_ARC
        else:
            self.pa = a.copy()
            self.pb = b.copy()
            self.pc = c.copy()
        return
Beispiel #5
0
 def __str__(self):
     """
     String representation of arc.
     """
     if use_libgeom():
         ppa = libgeom.get_point_3D_ptr(self.pap, 0)
         ppb = libgeom.get_point_3D_ptr(self.pap, 1)
         ppc = libgeom.get_point_3D_ptr(self.pap, 2)
         xa = ppa.x
         ya = ppa.y
         za = ppa.z
         labela = ppa.label
         xb = ppb.x
         yb = ppb.y
         zb = ppb.z
         labelb = ppb.label
         xc = ppc.x
         yc = ppc.y
         zc = ppc.z
         labelc = ppb.label
     else:
         xa = self.pa.x
         ya = self.pa.y
         za = self.pa.z
         labela = self.pa.label
         xb = self.pb.x
         yb = self.pb.y
         zb = self.pb.z
         labelb = self.pb.label
         xc = self.pc.x
         yc = self.pc.y
         zc = self.pc.z
         labelc = self.pc.label
     text = "Arc(" + \
            ("Node(%g,%g,%g,\"%s\")," % (xa, ya, za, labela)) + \
            ("Node(%g,%g,%g,\"%s\")," % (xa, ya, za, labelb)) + \
            ("Node(%g,%g,%g,\"%s\"))" % (xc, yc, zc, labelc))
     return text
Beispiel #6
0
 def __str__(self):
     """
     String representation of the Bezier curve.
     """
     string_rep = "Bezier(["
     for i in range(self.np):
         if use_libgeom():
             pp = libgeom.get_point_3D_ptr(self.pap, i)
         else:
             pp = self.B[i]
         string_rep += ("Node(%g,%g,%g,\"%s\")," %
                        (pp.x, pp.y, pp.z, pp.label))
     string_rep += "])"
     return string_rep