示例#1
0
文件: Srf.py 项目: uceearq/polymode-1
 def __init__(self, crv1, crv2):
     if not isinstance(crv1, Crv.Crv):
         raise NURBSError, 'Parameter crv1 not derived from Crv class!'
     if not isinstance(crv2, Crv.Crv):
         raise NURBSError, 'Parameter crv2 not derived from Crv class!'
     # ensure both curves have a common degree
     d = max(crv1.degree, crv2.degree)
     crv1.degelev(d - crv1.degree)
     crv2.degelev(d - crv2.degree)
     # merge the knot vectors, to obtain a common knot vector
     k1 = crv1.uknots
     k2 = crv2.uknots
     ku = []
     for item in k1:
         if not numerix.sometrue(numerix.equal(k2, item)):
             if item not in ku:
                 ku.append(item)
     for item in k2:
         if not numerix.sometrue(numerix.equal(k1, item)):
             if item not in ku:
                 ku.append(item)
     ku = numerix.sort(numerix.asarray(ku, numerix.Float))
     n = ku.shape[0]
     ka = numerix.array([], numerix.Float)
     kb = numerix.array([], numerix.Float)
     for i in range(0, n):
         i1 = numerix.compress(numerix.equal(k1, ku[i]), k1).shape[0]
         i2 = numerix.compress(numerix.equal(k2, ku[i]), k2).shape[0]
         m = max(i1, i2)
         ka = numerix.concatenate((ka, ku[i] * numerix.ones(
             (m - i1, ), numerix.Float)))
         kb = numerix.concatenate((kb, ku[i] * numerix.ones(
             (m - i2, ), numerix.Float)))
     crv1.kntins(ka)
     crv2.kntins(kb)
     coefs = numerix.zeros((4, crv1.cntrl.shape[1], 2), numerix.Float)
     coefs[:, :, 0] = crv1.cntrl
     coefs[:, :, 1] = crv2.cntrl
     Srf.__init__(self, coefs, crv1.uknots, [0., 0., 1., 1.])
示例#2
0
文件: Srf.py 项目: adocherty/polymode
 def __init__(self, crv1, crv2):
     if not isinstance(crv1, Crv.Crv):
             raise NURBSError, 'Parameter crv1 not derived from Crv class!'
     if not isinstance(crv2, Crv.Crv):
             raise NURBSError, 'Parameter crv2 not derived from Crv class!'
     # ensure both curves have a common degree
     d = max(crv1.degree, crv2.degree)
     crv1.degelev(d - crv1.degree)
     crv2.degelev(d - crv2.degree)
     # merge the knot vectors, to obtain a common knot vector
     k1 = crv1.uknots
     k2 = crv2.uknots
     ku = []
     for item in k1:
         if not numerix.sometrue(numerix.equal(k2, item)):
             if item not in ku:
                 ku.append(item)
     for item in k2:
         if not numerix.sometrue(numerix.equal(k1, item)):
             if item not in ku:
                 ku.append(item)
     ku = numerix.sort(numerix.asarray(ku, numerix.Float))
     n = ku.shape[0]
     ka = numerix.array([], numerix.Float)
     kb = numerix.array([], numerix.Float)
     for i in range(0, n):
         i1 = numerix.compress(numerix.equal(k1, ku[i]), k1).shape[0]
         i2 = numerix.compress(numerix.equal(k2, ku[i]), k2).shape[0]
         m = max(i1, i2)
         ka = numerix.concatenate((ka , ku[i] * numerix.ones((m - i1,), numerix.Float)))
         kb = numerix.concatenate((kb , ku[i] * numerix.ones((m - i2,), numerix.Float)))
     crv1.kntins(ka)
     crv2.kntins(kb)
     coefs = numerix.zeros((4, crv1.cntrl.shape[1], 2), numerix.Float)
     coefs[:,:,0] = crv1.cntrl
     coefs[:,:,1] = crv2.cntrl
     Srf.__init__(self, coefs, crv1.uknots, [0., 0., 1., 1.])
    def UpdatePointLabel(self, mDataDict):
        """Updates the pointLabel point on screen with data contained in
            mDataDict.

            mDataDict will be passed to your function set by
            SetPointLabelFunc.  It can contain anything you
            want to display on the screen at the scaledXY point
            you specify.

            This function can be called from parent window with onClick,
            onMotion events etc.            
        """
        if self.last_PointLabel != None:
            #compare pointXY
            if _Numeric.sometrue(mDataDict["pointXY"] != self.last_PointLabel["pointXY"]):
                #closest changed
                self._drawPointLabel(self.last_PointLabel) #erase old
                self._drawPointLabel(mDataDict) #plot new
        else:
            #just plot new with no erase
            self._drawPointLabel(mDataDict) #plot new
        #save for next erase
        self.last_PointLabel = mDataDict
示例#4
0
文件: Srf.py 项目: uceearq/polymode-1
    def __init__(self, u1, u2, v1, v2):
        if not isinstance(u1, Crv.Crv):
            raise NURBSError, 'Parameter u1 not derived from Crv class!'
        if not isinstance(u2, Crv.Crv):
            raise NURBSError, 'Parameter u2 not derived from Crv class!'
        if not isinstance(v1, Crv.Crv):
            raise NURBSError, 'Parameter v1 not derived from Crv class!'
        if not isinstance(v2, Crv.Crv):
            raise NURBSError, 'Parameter v2 not derived from Crv class!'
        r1 = Ruled(u1, u2)
        r2 = Ruled(v1, v2)
        r2.swapuv()
        t = Bilinear(u1.cntrl[:, 0], u1.cntrl[:, -1], u2.cntrl[:, 0],
                     u2.cntrl[:, -1])
        # Raise all surfaces to a common degree
        du = max(r1.degree[0], r2.degree[0], t.degree[0])
        dv = max(r1.degree[1], r2.degree[1], t.degree[1])
        r1.degelev(du - r1.degree[0], dv - r1.degree[1])
        r2.degelev(du - r2.degree[0], dv - r2.degree[1])
        t.degelev(du - t.degree[0], dv - t.degree[1])
        # Merge the knot vectors, to obtain a common knot vector
        # uknots:
        k1 = r1.uknots
        k2 = r2.uknots
        k3 = t.uknots
        k = []
        for item in k1:
            if not numerix.sometrue(numerix.equal(k2, item)):
                if not numerix.sometrue(numerix.equal(k3, item)):
                    if item not in k:
                        k.append(item)
        for item in k2:
            if not numerix.sometrue(numerix.equal(k1, item)):
                if not numerix.sometrue(numerix.equal(k3, item)):
                    if item not in k:
                        k.append(item)
        for item in k3:
            if not numerix.sometrue(numerix.equal(k1, item)):
                if not numerix.sometrue(numerix.equal(k2, item)):
                    if item not in k:
                        k.append(item)
        k = numerix.sort(numerix.asarray(k, numerix.Float))
        n = k.shape[0]
        kua = numerix.array([], numerix.Float)
        kub = numerix.array([], numerix.Float)
        kuc = numerix.array([], numerix.Float)
        for i in range(0, n):
            i1 = numerix.compress(numerix.equal(k1, k[i]), k1).shape[0]
            i2 = numerix.compress(numerix.equal(k2, k[i]), k2).shape[0]
            i3 = numerix.compress(numerix.equal(k3, k[i]), k3).shape[0]
            m = max(i1, i2, i3)
            kua = numerix.concatenate((kua, k[i] * numerix.ones(
                (m - i1, ), numerix.Float)))
            kub = numerix.concatenate((kub, k[i] * numerix.ones(
                (m - i2, ), numerix.Float)))
            kuc = numerix.concatenate((kuc, k[i] * numerix.ones(
                (m - i3, ), numerix.Float)))

        # vknots:
        k1 = r1.vknots
        k2 = r2.vknots
        k3 = t.vknots
        k = []
        for item in k1:
            if not numerix.sometrue(numerix.equal(k2, item)):
                if not numerix.sometrue(numerix.equal(k3, item)):
                    if item not in k:
                        k.append(item)
        for item in k2:
            if not numerix.sometrue(numerix.equal(k1, item)):
                if not numerix.sometrue(numerix.equal(k3, item)):
                    if item not in k:
                        k.append(item)
        for item in k3:
            if not numerix.sometrue(numerix.equal(k1, item)):
                if not numerix.sometrue(numerix.equal(k2, item)):
                    if item not in k:
                        k.append(item)
        k = numerix.sort(numerix.asarray(k, numerix.Float))
        n = k.shape[0]
        kva = numerix.array([], numerix.Float)
        kvb = numerix.array([], numerix.Float)
        kvc = numerix.array([], numerix.Float)
        for i in range(0, n):
            i1 = numerix.compress(numerix.equal(k1, k[i]), k1).shape[0]
            i2 = numerix.compress(numerix.equal(k2, k[i]), k2).shape[0]
            i3 = numerix.compress(numerix.equal(k3, k[i]), k3).shape[0]
            m = max(i1, i2, i3)
            kva = numerix.concatenate((kva, k[i] * numerix.ones(
                (m - i1, ), numerix.Float)))
            kvb = numerix.concatenate((kvb, k[i] * numerix.ones(
                (m - i2, ), numerix.Float)))
            kvc = numerix.concatenate((kvc, k[i] * numerix.ones(
                (m - i3, ), numerix.Float)))

        r1.kntins(kua, kva)
        r2.kntins(kub, kvb)
        t.kntins(kuc, kvc)
        coefs = numerix.zeros((4, t.cntrl.shape[1], t.cntrl.shape[2]),
                              numerix.Float)
        coefs[
            0, :, :] = r1.cntrl[0, :, :] + r2.cntrl[0, :, :] - t.cntrl[0, :, :]
        coefs[
            1, :, :] = r1.cntrl[1, :, :] + r2.cntrl[1, :, :] - t.cntrl[1, :, :]
        coefs[
            2, :, :] = r1.cntrl[2, :, :] + r2.cntrl[2, :, :] - t.cntrl[2, :, :]
        coefs[
            3, :, :] = r1.cntrl[3, :, :] + r2.cntrl[3, :, :] - t.cntrl[3, :, :]
        Srf.__init__(self, coefs, r1.uknots, r1.vknots)
示例#5
0
文件: Srf.py 项目: adocherty/polymode
    def __init__(self, u1, u2, v1, v2):
        if not isinstance(u1, Crv.Crv):
                raise NURBSError, 'Parameter u1 not derived from Crv class!'
        if not isinstance(u2, Crv.Crv):
                raise NURBSError, 'Parameter u2 not derived from Crv class!'
        if not isinstance(v1, Crv.Crv):
                raise NURBSError, 'Parameter v1 not derived from Crv class!'
        if not isinstance(v2, Crv.Crv):
                raise NURBSError, 'Parameter v2 not derived from Crv class!'
        r1 = Ruled(u1, u2)
        r2 = Ruled(v1, v2)
        r2.swapuv()
        t = Bilinear(u1.cntrl[:,0], u1.cntrl[:,-1], u2.cntrl[:,0], u2.cntrl[:,-1])
        # Raise all surfaces to a common degree
        du = max(r1.degree[0], r2.degree[0], t.degree[0])
        dv = max(r1.degree[1], r2.degree[1], t.degree[1])
        r1.degelev(du - r1.degree[0], dv - r1.degree[1])
        r2.degelev(du - r2.degree[0], dv - r2.degree[1])
        t.degelev(du - t.degree[0], dv - t.degree[1])
        # Merge the knot vectors, to obtain a common knot vector
        # uknots:
        k1 = r1.uknots
        k2 = r2.uknots
        k3 = t.uknots
        k = []
        for item in k1:
            if not numerix.sometrue(numerix.equal(k2, item)):
                if not numerix.sometrue(numerix.equal(k3, item)):
                    if item not in k:
                        k.append(item)
        for item in k2:
            if not numerix.sometrue(numerix.equal(k1, item)):
                if not numerix.sometrue(numerix.equal(k3, item)):
                    if item not in k:
                        k.append(item)
        for item in k3:
            if not numerix.sometrue(numerix.equal(k1, item)):
                if not numerix.sometrue(numerix.equal(k2, item)):
                    if item not in k:
                        k.append(item)        
        k = numerix.sort(numerix.asarray(k, numerix.Float))
        n = k.shape[0]
        kua = numerix.array([], numerix.Float)
        kub = numerix.array([], numerix.Float)
        kuc = numerix.array([], numerix.Float)
        for i in range(0, n):
            i1 = numerix.compress(numerix.equal(k1, k[i]), k1).shape[0]
            i2 = numerix.compress(numerix.equal(k2, k[i]), k2).shape[0]
            i3 = numerix.compress(numerix.equal(k3, k[i]), k3).shape[0]
            m = max(i1, i2, i3)
            kua = numerix.concatenate((kua , k[i] * numerix.ones((m - i1,), numerix.Float)))
            kub = numerix.concatenate((kub , k[i] * numerix.ones((m - i2,), numerix.Float)))
            kuc = numerix.concatenate((kuc , k[i] * numerix.ones((m - i3,), numerix.Float)))

        # vknots:
        k1 = r1.vknots
        k2 = r2.vknots
        k3 = t.vknots
        k = []
        for item in k1:
            if not numerix.sometrue(numerix.equal(k2, item)):
                if not numerix.sometrue(numerix.equal(k3, item)):
                    if item not in k:
                        k.append(item)
        for item in k2:
            if not numerix.sometrue(numerix.equal(k1, item)):
                if not numerix.sometrue(numerix.equal(k3, item)):
                    if item not in k:
                        k.append(item)
        for item in k3:
            if not numerix.sometrue(numerix.equal(k1, item)):
                if not numerix.sometrue(numerix.equal(k2, item)):
                    if item not in k:
                        k.append(item)        
        k = numerix.sort(numerix.asarray(k, numerix.Float))
        n = k.shape[0]
        kva = numerix.array([], numerix.Float)
        kvb = numerix.array([], numerix.Float)
        kvc = numerix.array([], numerix.Float)
        for i in range(0, n):
            i1 = numerix.compress(numerix.equal(k1, k[i]), k1).shape[0]
            i2 = numerix.compress(numerix.equal(k2, k[i]), k2).shape[0]
            i3 = numerix.compress(numerix.equal(k3, k[i]), k3).shape[0]
            m = max(i1, i2, i3)
            kva = numerix.concatenate((kva , k[i] * numerix.ones((m - i1,), numerix.Float)))
            kvb = numerix.concatenate((kvb , k[i] * numerix.ones((m - i2,), numerix.Float)))
            kvc = numerix.concatenate((kvc , k[i] * numerix.ones((m - i3,), numerix.Float)))

        r1.kntins(kua, kva)
        r2.kntins(kub, kvb)
        t.kntins(kuc, kvc)
        coefs = numerix.zeros((4 , t.cntrl.shape[1], t.cntrl.shape[2]), numerix.Float)
        coefs[0,:,:] = r1.cntrl[0,:,:] + r2.cntrl[0,:,:] - t.cntrl[0,:,:]
        coefs[1,:,:] = r1.cntrl[1,:,:] + r2.cntrl[1,:,:] - t.cntrl[1,:,:]
        coefs[2,:,:] = r1.cntrl[2,:,:] + r2.cntrl[2,:,:] - t.cntrl[2,:,:]
        coefs[3,:,:] = r1.cntrl[3,:,:] + r2.cntrl[3,:,:] - t.cntrl[3,:,:]
        Srf.__init__(self, coefs, r1.uknots, r1.vknots)