Beispiel #1
0
    def overpadsBounds(self, pads=None):

        bb = BoundingBox()

        if pads == None:
            pads = self.pads

        for pad in pads:
            pos = pad['pos']
            px = pos['x']
            py = pos['y']

            # Pad outer dimensions
            sx = pad['size']['x']
            sy = pad['size']['y']

            angle = pad['pos']['orientation']

            # Add each "corner" of the pad (even for oval shapes)

            p1 = _rotatePoint({'x': -sx / 2, 'y': -sy / 2}, angle)
            p2 = _rotatePoint({'x': -sx / 2, 'y': +sy / 2}, angle)
            p3 = _rotatePoint({'x': +sx / 2, 'y': +sy / 2}, angle)
            p4 = _rotatePoint({'x': +sx / 2, 'y': -sy / 2}, angle)

            points = [p1, p2, p3, p4]

            for p in points:
                x = px + p['x']
                y = py + p['y']
                bb.addPoint(x, y)

        return bb
 def overpadsBounds(self, pads=None):
 
     bb = BoundingBox()
     
     if pads == None:
         pads = self.pads
         
     for pad in pads:
         pos = pad['pos']
         px = pos['x']
         py = pos['y']
         
         # Pad outer dimensions
         sx = pad['size']['x']
         sy = pad['size']['y']
         
         angle = pad['pos']['orientation']
         
         # Add each "corner" of the pad (even for oval shapes)
         
         p1 = _rotatePoint({'x': -sx/2, 'y': -sy/2}, angle)
         p2 = _rotatePoint({'x': -sx/2, 'y': +sy/2}, angle)
         p3 = _rotatePoint({'x': +sx/2, 'y': +sy/2}, angle)
         p4 = _rotatePoint({'x': +sx/2, 'y': -sy/2}, angle)
         
         points = [p1, p2, p3, p4]
         
         for p in points:
             x = px + p['x']
             y = py + p['y']
             bb.addPoint(x,y)
                     
     return bb
Beispiel #3
0
    def geometricBoundingBox(self, layer):

        bb = BoundingBox()

        # Add all lines
        lines = self.filterLines(layer)
        for l in lines:
            bb.addPoint(l['start']['x'], l['start']['y'])
            bb.addPoint(l['end']['x'], l['end']['y'])

        # Add all circles
        circles=self.filterCircles(layer)
        for c in circles:
            cx = c['center']['x']
            cy = c['center']['y']
            ex = c['end']['x']
            ey = c['end']['y']

            dx = ex - cx
            dy = ey - cy

            r = math.sqrt(dx*dx + dy*dy)

            bb.addPoint(cx, cy, radius=r)

        # Add all arcs
        arcs=self.filterArcs(layer)
        for c in arcs:
            cx = c['start']['x']
            cy = c['start']['y']
            ex = c['end']['x']
            ey = c['end']['y']

            dx = ex - cx
            dy = ey - cy

            r = math.sqrt(dx*dx + dy*dy)

            dalpha=1
            alphaend=c['angle']
            if math.fabs(alphaend)<1:
                dalpha=math.fabs(alphaend)/5
            if alphaend<0:
                dalpha=-dalpha
            if math.fabs(alphaend)>0:
                a=0
                c0=[ ex - cx, ey - cy ]
                #print("c0 = ",c0)
                while (alphaend>0 and a<=alphaend) or (alphaend<0 and a>=alphaend):
                    c1=[0,0]
                    c1[0]=math.cos(a/180*3.1415)*c0[0]-math.sin(a/180*3.1415)*c0[1]
                    c1[1]=math.sin(a/180*3.1415)*c0[0]+math.cos(a/180*3.1415)*c0[1]

                    bb.addPoint(cx + c1[0], cy + c1[1])
                    a=a+dalpha

            bb.addPoint(ex, None)

        return bb
    def geometricBoundingBox(self, layer):
    
        bb = BoundingBox()
        
        # Add all lines
        lines = self.filterLines(layer)
        for l in lines:
            bb.addPoint(l['start']['x'], l['start']['y'])
            bb.addPoint(l['end']['x'], l['end']['y'])
        
        # Add all circles
        circles=self.filterCircles(layer)
        for c in circles:
            cx = c['center']['x']
            cy = c['center']['y']
            ex = c['end']['x']
            ey = c['end']['y']
            
            dx = ex - cx
            dy = ey - cy
            
            r = math.sqrt(dx*dx + dy*dy)
            
            bb.addPoint(cx, cy, radius=r)
            
        # Add all arcs
        arcs=self.filterArcs(layer)
        for c in arcs:
            cx = c['start']['x']
            cy = c['start']['y']
            ex = c['end']['x']
            ey = c['end']['y']
            
            dx = ex - cx
            dy = ey - cy
            
            r = math.sqrt(dx*dx + dy*dy)
            
            dalpha=1
            alphaend=c['angle']
            if math.fabs(alphaend)<1:
                dalpha=math.fabs(alphaend)/5
            if alphaend<0:
                dalpha=-dalpha
            if math.fabs(alphaend)>0:
                a=0
                c0=[ ex - cx, ey - cy ]
                #print("c0 = ",c0)
                while (alphaend>0 and a<=alphaend) or (alphaend<0 and a>=alphaend):
                    c1=[0,0]
                    c1[0]=math.cos(a/180*3.1415)*c0[0]-math.sin(a/180*3.1415)*c0[1]
                    c1[1]=math.sin(a/180*3.1415)*c0[0]+math.cos(a/180*3.1415)*c0[1]
                    
                    bb.addPoint(cx + c1[0], cy + c1[1])
                    a=a+dalpha
                
            bb.addPoint(ex, None)

        return bb
Beispiel #5
0
    def padsBounds(self, pads=None):

        bb = BoundingBox()

        if pads == None:
            pads = self.pads

        for pad in pads:
            pos = pad['pos']
            bb.addPoint(pos['x'], pos['y'])

        return bb
Beispiel #6
0
    def padsBounds(self, pads=None):

        bb = BoundingBox()

        if pads == None:
            pads = self.pads

        for pad in pads:
            pos = pad['pos']
            bb.addPoint(pos['x'], pos['y'])

        return bb
    def padsBounds(self,
                   pads: Optional[List[Dict[str, Any]]] = None) -> BoundingBox:

        bb = BoundingBox()

        if pads is None:
            pads = self.pads

        for pad in pads:
            pos = pad["pos"]
            bb.addPoint(pos["x"], pos["y"])

        return bb
Beispiel #8
0
 def boundingBox(self):
     """Return the bounding box of the control polygon.
     """
     bb = BoundingBox()
     for i, p in enumerate(self.pnts):
         bb.addPoint(p)
         bb.addPoint(p + self.intangents[i])
         bb.addPoint(p + self.outtangents[i])
     return bb
Beispiel #9
0
 def boundingBox(self):
     """Return the bounding box of the control polygon.
     """
     bb = BoundingBox()
     for i,p in enumerate(self.pnts):
         bb.addPoint(p)
         bb.addPoint(p+self.intangents[i])
         bb.addPoint(p+self.outtangents[i])
     return bb
Beispiel #10
0
    def overpadsBounds(self, pads=None):

        bb = BoundingBox()

        if pads == None:
            pads = self.pads

        for pad in pads:
            pos = pad['pos']
            px = pos['x']
            py = pos['y']

            # Pad outer dimensions
            sx = pad['size']['x']
            sy = pad['size']['y']

            angle = -pad['pos']['orientation']

            # Add each "corner" of the pad (even for oval shapes)

            p1 = _rotatePoint({'x': -sx / 2, 'y': -sy / 2}, angle)
            p2 = _rotatePoint({'x': -sx / 2, 'y': +sy / 2}, angle)
            p3 = _rotatePoint({'x': +sx / 2, 'y': +sy / 2}, angle)
            p4 = _rotatePoint({'x': +sx / 2, 'y': -sy / 2}, angle)

            points = [p1, p2, p3, p4]

            # Add more points for custom pad shapes
            if pad['shape'] == 'custom':
                for p in pad['primitives']:
                    if p['type'] == 'gr_poly':
                        # Add polygon points
                        for point in p['pts']:
                            points.append(_rotatePoint(point, angle))
                    elif p['type'] == 'gr_line':
                        # Add line points
                        s = _rotatePoint(p['start'], angle)
                        e = _rotatePoint(p['end'], angle)
                        w = p['width']
                        points.append(_movePoint(s, {
                            'x': -w / 2,
                            'y': -w / 2
                        }))
                        points.append(_movePoint(s, {
                            'x': -w / 2,
                            'y': +w / 2
                        }))
                        points.append(_movePoint(s, {
                            'x': +w / 2,
                            'y': +w / 2
                        }))
                        points.append(_movePoint(s, {
                            'x': +w / 2,
                            'y': -w / 2
                        }))
                        points.append(_movePoint(e, {
                            'x': -w / 2,
                            'y': -w / 2
                        }))
                        points.append(_movePoint(e, {
                            'x': -w / 2,
                            'y': +w / 2
                        }))
                        points.append(_movePoint(e, {
                            'x': +w / 2,
                            'y': +w / 2
                        }))
                        points.append(_movePoint(e, {
                            'x': +w / 2,
                            'y': -w / 2
                        }))
                    elif p['type'] == 'gr_arc':
                        # Add arc points
                        # TODO
                        pass
                    elif p['type'] == 'gr_circle':
                        # Add circle points
                        c = _rotatePoint(p['center'], angle)
                        e = _rotatePoint(p['end'], angle)
                        r = math.sqrt((e['x'] - c['x'])**2 +
                                      (e['y'] - c['y'])**2)
                        w = p['width']
                        points.append(_movePoint(c, {'x': -r - w / 2, 'y': 0}))
                        points.append(_movePoint(c, {'x': +r + w / 2, 'y': 0}))
                        points.append(_movePoint(c, {'x': 0, 'y': -r - w / 2}))
                        points.append(_movePoint(c, {'x': 0, 'y': +r + w / 2}))

            for p in points:
                x = px + p['x']
                y = py + p['y']
                bb.addPoint(x, y)

        return bb
Beispiel #11
0
    def overpadsBounds(self, pads=None):

        bb = BoundingBox()

        if pads == None:
            pads = self.pads

        for pad in pads:
            pos = pad['pos']
            px = pos['x']
            py = pos['y']

            # Pad outer dimensions
            sx = pad['size']['x']
            sy = pad['size']['y']

            angle = -pad['pos']['orientation']

            # Add each "corner" of the pad (even for oval shapes)

            p1 = _rotatePoint({'x': -sx/2, 'y': -sy/2}, angle)
            p2 = _rotatePoint({'x': -sx/2, 'y': +sy/2}, angle)
            p3 = _rotatePoint({'x': +sx/2, 'y': +sy/2}, angle)
            p4 = _rotatePoint({'x': +sx/2, 'y': -sy/2}, angle)

            points = [p1, p2, p3, p4]

            # Add more points for custom pad shapes
            if pad['shape'] == 'custom':
                for p in pad['primitives']:
                    if p['type'] == 'gr_poly':
                        # Add polygon points
                        for point in p['pts']:
                            points.append(_rotatePoint(point, angle))
                    elif p['type'] == 'gr_line':
                        # Add line points
                        s = _rotatePoint(p['start'], angle)
                        e = _rotatePoint(p['end'], angle)
                        w = p['width']
                        points.append(_movePoint(s, {'x': -w/2, 'y': -w/2}))
                        points.append(_movePoint(s, {'x': -w/2, 'y': +w/2}))
                        points.append(_movePoint(s, {'x': +w/2, 'y': +w/2}))
                        points.append(_movePoint(s, {'x': +w/2, 'y': -w/2}))
                        points.append(_movePoint(e, {'x': -w/2, 'y': -w/2}))
                        points.append(_movePoint(e, {'x': -w/2, 'y': +w/2}))
                        points.append(_movePoint(e, {'x': +w/2, 'y': +w/2}))
                        points.append(_movePoint(e, {'x': +w/2, 'y': -w/2}))
                    elif p['type'] == 'gr_arc':
                        # Add arc points
                        # TODO
                        pass
                    elif p['type'] == 'gr_circle':
                        # Add circle points
                        c = _rotatePoint(p['center'], angle)
                        e = _rotatePoint(p['end'], angle)
                        r = math.sqrt((e['x']-c['x'])**2 + (e['y']-c['y'])**2)
                        w = p['width']
                        points.append(_movePoint(c, {'x': -r-w/2, 'y': 0}))
                        points.append(_movePoint(c, {'x': +r+w/2, 'y': 0}))
                        points.append(_movePoint(c, {'x': 0, 'y': -r-w/2}))
                        points.append(_movePoint(c, {'x': 0, 'y': +r+w/2}))

            for p in points:
                x = px + p['x']
                y = py + p['y']
                bb.addPoint(x,y)

        return bb
    def overpadsBounds(self,
                       pads: Optional[List[Dict[str,
                                                Any]]] = None) -> BoundingBox:

        bb = BoundingBox()

        if pads is None:
            pads = self.pads

        for pad in pads:
            pos = pad["pos"]
            px = pos["x"]
            py = pos["y"]

            # Pad outer dimensions
            sx = pad["size"]["x"]
            sy = pad["size"]["y"]

            angle = -pad["pos"]["orientation"]

            # Add each "corner" of the pad (even for oval shapes)

            p1 = _rotatePoint({"x": -sx / 2, "y": -sy / 2}, angle)
            p2 = _rotatePoint({"x": -sx / 2, "y": +sy / 2}, angle)
            p3 = _rotatePoint({"x": +sx / 2, "y": +sy / 2}, angle)
            p4 = _rotatePoint({"x": +sx / 2, "y": -sy / 2}, angle)

            points = [p1, p2, p3, p4]

            # Add more points for custom pad shapes
            if pad["shape"] == "custom":
                for p in pad["primitives"]:
                    if p["type"] == "gr_poly":
                        # Add polygon points
                        for point in p["pts"]:
                            points.append(_rotatePoint(point, angle))
                    elif p["type"] == "gr_line":
                        # Add line points
                        s = _rotatePoint(p["start"], angle)
                        e = _rotatePoint(p["end"], angle)
                        w = p["width"]
                        points.append(_movePoint(s, {
                            "x": -w / 2,
                            "y": -w / 2
                        }))
                        points.append(_movePoint(s, {
                            "x": -w / 2,
                            "y": +w / 2
                        }))
                        points.append(_movePoint(s, {
                            "x": +w / 2,
                            "y": +w / 2
                        }))
                        points.append(_movePoint(s, {
                            "x": +w / 2,
                            "y": -w / 2
                        }))
                        points.append(_movePoint(e, {
                            "x": -w / 2,
                            "y": -w / 2
                        }))
                        points.append(_movePoint(e, {
                            "x": -w / 2,
                            "y": +w / 2
                        }))
                        points.append(_movePoint(e, {
                            "x": +w / 2,
                            "y": +w / 2
                        }))
                        points.append(_movePoint(e, {
                            "x": +w / 2,
                            "y": -w / 2
                        }))
                    elif p["type"] == "gr_arc":
                        # Add arc points
                        # TODO
                        pass
                    elif p["type"] == "gr_circle":
                        # Add circle points
                        c = _rotatePoint(p["center"], angle)
                        e = _rotatePoint(p["end"], angle)
                        r = math.sqrt((e["x"] - c["x"])**2 +
                                      (e["y"] - c["y"])**2)
                        w = p["width"]
                        points.append(_movePoint(c, {"x": -r - w / 2, "y": 0}))
                        points.append(_movePoint(c, {"x": +r + w / 2, "y": 0}))
                        points.append(_movePoint(c, {"x": 0, "y": -r - w / 2}))
                        points.append(_movePoint(c, {"x": 0, "y": +r + w / 2}))

            for p in points:
                x = px + p["x"]
                y = py + p["y"]
                bb.addPoint(x, y)

        return bb
    def geometricBoundingBox(self, layer: str) -> BoundingBox:

        bb = BoundingBox()

        # Add all lines
        lines = self.filterLines(layer)
        for line in lines:
            bb.addPoint(line["start"]["x"], line["start"]["y"])
            bb.addPoint(line["end"]["x"], line["end"]["y"])

        # Add all rects
        rects = self.filterRects(layer)
        for r in rects:
            bb.addPoint(r["start"]["x"], r["start"]["y"])
            bb.addPoint(r["end"]["x"], r["end"]["y"])

        # Add all circles
        circles = self.filterCircles(layer)
        for c in circles:
            cx = c["center"]["x"]
            cy = c["center"]["y"]
            ex = c["end"]["x"]
            ey = c["end"]["y"]

            dx = ex - cx
            dy = ey - cy

            r = math.sqrt(dx * dx + dy * dy)

            bb.addPoint(cx, cy, radius=r)

        polys = self.filterPolys(layer)
        for p in polys:
            for pt in p["points"]:
                bb.addPoint(pt["x"], pt["y"])

        # Add all arcs
        arcs = self.filterArcs(layer)
        for c in arcs:
            cx = c["start"]["x"]
            cy = c["start"]["y"]
            ex = c["end"]["x"]
            ey = c["end"]["y"]

            dx = ex - cx
            dy = ey - cy

            r = math.sqrt(dx * dx + dy * dy)

            dalpha = 1
            alphaend = c["angle"]
            if math.fabs(alphaend) < 1:
                dalpha = math.fabs(alphaend) / 5
            if alphaend < 0:
                dalpha = -dalpha
            if math.fabs(alphaend) > 0:
                a = 0
                c0 = [ex - cx, ey - cy]
                # print("c0 = ",c0)
                while (alphaend > 0 and a <= alphaend) or (alphaend < 0
                                                           and a >= alphaend):
                    c1 = [0, 0]
                    c1[0] = (math.cos(a / 180 * 3.1415) * c0[0] -
                             math.sin(a / 180 * 3.1415) * c0[1])
                    c1[1] = (math.sin(a / 180 * 3.1415) * c0[0] +
                             math.cos(a / 180 * 3.1415) * c0[1])

                    bb.addPoint(cx + c1[0], cy + c1[1])
                    a = a + dalpha

            bb.addPoint(ex, None)

        return bb