def Points2D(pts): if isinstance(pts, FreeCAD.Vector): return Base.Vector2d(pts.x, pts.y) elif isinstance(pts, (list, tuple)): l = [] for p in pts: l.append(Base.Vector2d(p.x, p.y)) return l else: App.Console.PrintError("Failed to convert points to 2D\n") return None
def setBirailParametrization(self): pts1 = [] pts2 = [] kts = [] for i in range(len(self.knots1)): FreeCAD.Console.PrintMessage("\n param : %f - %f\n"%(self.knots1[i],self.knots2[i])) pts1.append(Base.Vector2d(i, self.knots1[i])) pts2.append(Base.Vector2d(i, self.knots2[i])) kts.append(i) bs1 = Part.Geom2d.BSplineCurve2d() bs1.interpolate(Points = pts1, Parameters = kts) bs2 = Part.Geom2d.BSplineCurve2d() bs2.interpolate(Points = pts2, Parameters = kts) self.birail.paramCurves = (bs1, bs2)
def get_adjacent_edges_tangents(self): """returns the tangents of edges of Face that are connected to Edge""" e1, e2 = self.get_adjacent_edges() pt1 = self.face.Surface.parameter(self.edge.Vertexes[0].Point) cos1 = self.face.curveOnSurface(e1) par1 = cos1[0].parameter(Base.Vector2d(pt1[0], pt1[1])) tan1 = cos1[0].tangent(par1) return (tan1)
def normal2D(self, v): v3 = FreeCAD.Vector(v.x, v.y, 0.0) if self.reverseNormal: z = FreeCAD.Vector(0.0, 0.0, -1.0) else: z = FreeCAD.Vector(0.0, 0.0, 1.0) cr = z.cross(v3) return (Base.Vector2d(cr.x, cr.y))
def __init__(self, surf, ori, param): self.surf = surf self.face = surf.toShape() self.ori = ori self.param = param self.u0, self.u1, self.v0, self.v1 = surf.bounds() if self.ori == 'U': p0 = Base.Vector2d(param, self.v0) p1 = Base.Vector2d(param, self.v1) self.edge3d = surf.uIso(param).toShape() else: p0 = Base.Vector2d(self.u0, param) p1 = Base.Vector2d(self.u1, param) self.edge3d = surf.vIso(param).toShape() self.line2d = Part.Geom2d.Line2dSegment(p0, p1) self.Length = self.edge3d.Length self.FirstParameter = self.edge3d.FirstParameter self.LastParameter = self.edge3d.LastParameter
def toShape(self): bounds = self.faceBounds2d() prange = [0,1] if self.direction == 'U': self.curve = self.face.Surface.uIso(self.parameter) v1 = Base.Vector2d(self.parameter,self.bounds[2]) v2 = Base.Vector2d(self.parameter,self.bounds[3]) l2d = Part.Geom2d.Line2dSegment(v1,v2) pts = self.getIntersectionPoints(l2d,bounds) if pts: sortedPts = sorted(pts,key=itemgetter(1)) prange = [l2d.parameter(Base.Vector2d(sortedPts[0][0], sortedPts[0][1])), l2d.parameter(Base.Vector2d(sortedPts[-1][0], sortedPts[-1][1]))] else: FreeCAD.Console.PrintMessage("No intersection points") elif self.direction == 'V': self.curve = self.face.Surface.vIso(self.parameter) v1 = Base.Vector2d(self.bounds[0], self.parameter) v2 = Base.Vector2d(self.bounds[1], self.parameter) l2d = Part.Geom2d.Line2dSegment(v1,v2) pts = self.getIntersectionPoints(l2d,bounds) if pts: sortedPts = sorted(pts,key=itemgetter(0)) prange = [l2d.parameter(Base.Vector2d(sortedPts[0][0], sortedPts[0][1])), l2d.parameter(Base.Vector2d(sortedPts[-1][0], sortedPts[-1][1]))] else: FreeCAD.Console.PrintMessage("No intersection points") e = l2d.toShape(self.face,prange[0],prange[1]) if isinstance(e, Part.Edge): return(e) else: FreeCAD.Console.PrintMessage("Failed to create isoCurve shape") return(None)
def build_2d(cls, degree, knotvector, control_points, weights=None): n = len(control_points) if weights is None: weights = np.ones((n,)) pts = [Base.Vector2d(t[0], t[1]) for t in control_points] ms = sv_knotvector.to_multiplicity(knotvector) knots = [p[0] for p in ms] mults = [p[1] for p in ms] curve = Geom2d.BSplineCurve2d() curve.buildFromPolesMultsKnots(pts, mults, knots, False, degree, weights) return SvFreeCadNurbsCurve(curve, ndim=2)
def vec_to_data(self, vec): dat = self.value[0] if isinstance(dat, (int, float)): return (vec.x) if isinstance(dat, (list, tuple)): if len(dat) == 1: return ([vec.x]) elif len(dat) == 2: return ([vec.x, vec.y]) elif len(dat) == 3: return ([vec.x, vec.y, vec.z]) if isinstance(dat, Vector2d): return (Base.Vector2d(vec.x, vec.y)) if isinstance(dat, Base.Vector): return (vec)
def get_cross_curves(self, num=10, scale=1.0, untwist=False): pl = self.edge.Placement if scale == 0: scale = 1.0 self.build_param_list(num) if untwist: self.param_list.reverse() curves = list() for p in self.param_list: p0 = self.curve2D.value(p) ta = self.curve2D.tangent(p) no = self.normal2D(ta) fac = scale # * self.orientation(ta,no) p1 = Base.Vector2d(p0.x + no.x * fac, p0.y + no.y * fac) ls1 = Geom2d.Line2dSegment(p0, p1) edge1 = ls1.toShape(self.face, ls1.FirstParameter, ls1.LastParameter) edge1.Placement = pl curves.append(edge1) return(curves)
def mul2d(vec, fac): return Base.Vector2d(vec.x*fac, vec.y*fac)
def add2d(p1,p2): return Base.Vector2d(p1.x+p2.x, p1.y+p2.y)