Changeset View
Changeset View
Standalone View
Standalone View
mesh_inset/triquad.py
| Context not available. | |||||
| v1 = face[(i + 1) % n] | v1 = face[(i + 1) % n] | ||||
| v2 = face[(i + 2) % n] | v2 = face[(i + 2) % n] | ||||
| if vm1 == v0 or v0 == v1: | if vm1 == v0 or v0 == v1: | ||||
| return (mode > 0) | return mode > 0 | ||||
| b = (k == Angconvex or k == Angtangential or k == Ang0) | b = (k == Angconvex or k == Angtangential or k == Ang0) | ||||
| c = _InCone(vm1, v0, v1, v2, angk[(i + 1) % n], points) and \ | c = _InCone(vm1, v0, v1, v2, angk[(i + 1) % n], points) and \ | ||||
| _InCone(v1, vm2, vm1, v0, angk[(i - 1) % n], points) | _InCone(v1, vm2, vm1, v0, angk[(i - 1) % n], points) | ||||
| Context not available. | |||||
| lefti = 0 | lefti = 0 | ||||
| lefthole = holes[0] | lefthole = holes[0] | ||||
| if len(lefthole) == 0: | if len(lefthole) == 0: | ||||
| return (lefthole, lefti) | return lefthole, lefti | ||||
| leftv = lefthole[0] | leftv = lefthole[0] | ||||
| for i in range(1, len(holes)): | for i in range(1, len(holes)): | ||||
| ihole = holes[i] | ihole = holes[i] | ||||
| if len(ihole) == 0: | if len(ihole) == 0: | ||||
| return (ihole, i) | return ihole, i | ||||
| iv = ihole[0] | iv = ihole[0] | ||||
| if points.pos[iv] < points.pos[leftv]: | if points.pos[iv] < points.pos[leftv]: | ||||
| (lefti, lefthole, leftv) = (i, ihole, iv) | (lefti, lefthole, leftv) = (i, ihole, iv) | ||||
| return (lefthole, lefti) | return lefthole, lefti | ||||
| def _FindDiag(face, hv, points): | def _FindDiag(face, hv, points): | ||||
| Context not available. | |||||
| continue | continue | ||||
| weight = ANGFAC * (180.0 - amax) + DEGFAC * (dd[a] + dd[b]) | weight = ANGFAC * (180.0 - amax) + DEGFAC * (dd[a] + dd[b]) | ||||
| ans.append((weight, e, tl, tr)) | ans.append((weight, e, tl, tr)) | ||||
| return (ans, td) | return ans, td | ||||
| def _GreedyMatch(er): | def _GreedyMatch(er): | ||||
| Context not available. | |||||
| """ | """ | ||||
| if not er: | if not er: | ||||
| return ([], 0.0) | return [], 0.0 | ||||
| if len(er) == 1: | if len(er) == 1: | ||||
| return (er, er[0][0]) | return er, er[0][0] | ||||
| match = [] | match = [] | ||||
| matchw = 0.0 | matchw = 0.0 | ||||
| for i in range(0, len(er)): | for i in range(0, len(er)): | ||||
| Context not available. | |||||
| break | break | ||||
| if not match: | if not match: | ||||
| return _EMatch(er) | return _EMatch(er) | ||||
| return (match, matchw) | return match, matchw | ||||
| def _EMatch(er): | def _EMatch(er): | ||||
| Context not available. | |||||
| """ | """ | ||||
| if not er: | if not er: | ||||
| return ([], 0.0) | return [], 0.0 | ||||
| if len(er) == 1: | if len(er) == 1: | ||||
| return (er, er[1][1]) | return er, er[1][1] | ||||
| i = random.randint(0, len(er) - 1) | i = random.randint(0, len(er) - 1) | ||||
| eri = (wi, _, tl, tr) = er[i] | eri = (wi, _, tl, tr) = er[i] | ||||
| # case a: include eri. exlude other edges that touch tl or tr | # case a: include eri. exlude other edges that touch tl or tr | ||||
| Context not available. | |||||
| else: | else: | ||||
| match = bmatch | match = bmatch | ||||
| matchw = wb | matchw = wb | ||||
| return (match, matchw) | return match, matchw | ||||
| def _FindComponents(er, excepti): | def _FindComponents(er, excepti): | ||||
| Context not available. | |||||
| if t not in comp: | if t not in comp: | ||||
| ncomps += 1 | ncomps += 1 | ||||
| _FCVisit(er, excepti, comp, t, ncomps) | _FCVisit(er, excepti, comp, t, ncomps) | ||||
| return (ncomps, comp) | return ncomps, comp | ||||
| def _FCVisit(er, excepti, comp, t, compnum): | def _FCVisit(er, excepti, comp, t, compnum): | ||||
| Context not available. | |||||
| parta.append(er[i]) | parta.append(er[i]) | ||||
| else: | else: | ||||
| partb.append(er[i]) | partb.append(er[i]) | ||||
| return (parta, partb) | return parta, partb | ||||
| def _CopyExcluding(er, s, t): | def _CopyExcluding(er, s, t): | ||||
| Context not available. | |||||
| into points.""" | into points.""" | ||||
| if len(face) < 3: | if len(face) < 3: | ||||
| return (0.0, 0.0, 1.0) # arbitrary, we really have no idea | return 0.0, 0.0, 1.0 # arbitrary, we really have no idea | ||||
| else: | else: | ||||
| coords = [points.pos[i] for i in face] | coords = [points.pos[i] for i in face] | ||||
| return Normal(coords) | return Normal(coords) | ||||
| Context not available. | |||||
| """Return an average Normal vector for the point list, 3d coords.""" | """Return an average Normal vector for the point list, 3d coords.""" | ||||
| if len(coords) < 3: | if len(coords) < 3: | ||||
| return (0.0, 0.0, 1.0) # arbitrary | return 0.0, 0.0, 1.0 # arbitrary | ||||
| (ax, ay, az) = coords[0] | (ax, ay, az) = coords[0] | ||||
| (bx, by, bz) = coords[1] | (bx, by, bz) = coords[1] | ||||
| Context not available. | |||||
| Return (0.0, 0.0, 1.0) if the result is undefined.""" | Return (0.0, 0.0, 1.0) if the result is undefined.""" | ||||
| sqrlen = x * x + y * y + z * z | sqrlen = x * x + y * y + z * z | ||||
| if sqrlen < 1e-100: | if sqrlen < 1e-100: | ||||
| return (0.0, 0.0, 1.0) | return 0.0, 0.0, 1.0 | ||||
| else: | else: | ||||
| try: | try: | ||||
| d = sqrt(sqrlen) | d = sqrt(sqrlen) | ||||
| return (x / d, y / d, z / d) | return x / d, y / d, z / d | ||||
| except: | except: | ||||
| return (0.0, 0.0, 1.0) | return 0.0, 0.0, 1.0 | ||||
| # We're using right-hand coord system, where | # We're using right-hand coord system, where | ||||
| Context not available. | |||||
| (ax, ay, az) = a | (ax, ay, az) = a | ||||
| (bx, by, bz) = b | (bx, by, bz) = b | ||||
| return (ay * bz - az * by, az * bx - ax * bz, ax * by - ay * bx) | return ay * bz - az * by, az * bx - ax * bz, ax * by - ay * bx | ||||
| def Dot2(a, b): | def Dot2(a, b): | ||||
| Context not available. | |||||
| def Sub2(a, b): | def Sub2(a, b): | ||||
| """Return difference of 2d vectors, a-b.""" | """Return difference of 2d vectors, a-b.""" | ||||
| return (a[0] - b[0], a[1] - b[1]) | return a[0] - b[0], a[1] - b[1] | ||||
| def Add2(a, b): | def Add2(a, b): | ||||
| """Return the sum of 2d vectors, a+b.""" | """Return the sum of 2d vectors, a+b.""" | ||||
| return (a[0] + b[0], a[1] + b[1]) | return a[0] + b[0], a[1] + b[1] | ||||
| def Length2(v): | def Length2(v): | ||||
| Context not available. | |||||
| """Return the point alpha of the way from a to b.""" | """Return the point alpha of the way from a to b.""" | ||||
| beta = 1 - alpha | beta = 1 - alpha | ||||
| return (beta * a[0] + alpha * b[0], beta * a[1] + alpha * b[1]) | return beta * a[0] + alpha * b[0], beta * a[1] + alpha * b[1] | ||||
| def Normalized2(p): | def Normalized2(p): | ||||
| Context not available. | |||||
| (x, y) = p | (x, y) = p | ||||
| sqrlen = x * x + y * y | sqrlen = x * x + y * y | ||||
| if sqrlen < 1e-100: | if sqrlen < 1e-100: | ||||
| return (0.0, 1.0) | return 0.0, 1.0 | ||||
| else: | else: | ||||
| try: | try: | ||||
| d = sqrt(sqrlen) | d = sqrt(sqrlen) | ||||
| return (x / d, y / d) | return x / d, y / d | ||||
| except: | except: | ||||
| return (0.0, 1.0) | return 0.0, 1.0 | ||||
| def Angle(a, b, c, points): | def Angle(a, b, c, points): | ||||
| Context not available. | |||||
| def _Icc(p): | def _Icc(p): | ||||
| (x, y) = (p[0], p[1]) | (x, y) = (p[0], p[1]) | ||||
| return (x, y, x * x + y * y) | return x, y, x * x + y * y | ||||
| Context not available. | |||||