Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
 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)            
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
 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))
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
    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)
Ejemplo n.º 8
0
 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)
Ejemplo n.º 9
0
 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)
Ejemplo n.º 10
0
def mul2d(vec, fac):
    return Base.Vector2d(vec.x*fac, vec.y*fac)
Ejemplo n.º 11
0
def add2d(p1,p2):
    return Base.Vector2d(p1.x+p2.x, p1.y+p2.y)