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 __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
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)
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)