コード例 #1
0
    def _init_base(self):

        # set attributes
        self.setAttribute('virtual')

        # add pads
        small_hole_size = 3.048
        large_hole_size = 3.9878
        top_offset = -6.985
        bottom_offset = 8.225
        offset = self.lu_table[self.size]['offset']
        layers = ['*.Cu', '*.Mask']

        # create pads
        self.append(
            Pad(number="~",
                type=Pad.TYPE_NPTH,
                shape=Pad.SHAPE_CIRCLE,
                at=[-offset, top_offset],
                size=small_hole_size,
                drill=small_hole_size,
                layers=layers))
        self.append(
            Pad(number="~",
                type=Pad.TYPE_NPTH,
                shape=Pad.SHAPE_CIRCLE,
                at=[offset, top_offset],
                size=small_hole_size,
                drill=small_hole_size,
                layers=layers))
        self.append(
            Pad(number="~",
                type=Pad.TYPE_NPTH,
                shape=Pad.SHAPE_CIRCLE,
                at=[-offset, bottom_offset],
                size=large_hole_size,
                drill=large_hole_size,
                layers=layers))
        self.append(
            Pad(number="~",
                type=Pad.TYPE_NPTH,
                shape=Pad.SHAPE_CIRCLE,
                at=[offset, bottom_offset],
                size=large_hole_size,
                drill=large_hole_size,
                layers=layers))

        # create reference center point
        self.append(
            Line(start=[0, 2], end=[0, -2], layer='Dwgs.User', width=0.1))
        self.append(
            Line(start=[-2, 0], end=[2, 0], layer='Dwgs.User', width=0.1))
コード例 #2
0
    def intersectTwoNodes(*nodes):
        import KicadModTree.nodes.base.Line
        if len(nodes) < 2 or len(nodes) > 3:
            raise KeyError("intersectTwoNodes expects two node objects or a node and two vectors")

        circles = []
        lines = []
        vectors = []

        for n in nodes:
            if hasattr(n, 'getRadius') and hasattr(n, 'center_pos'):
                circles.append(n)
            elif hasattr(n, 'end_pos') and hasattr(n, 'start_pos'):
                lines.append(n)
            else:
                vectors.append(n)

        if len(vectors) == 2:
            lines.append(Line(start=vectors[0], end=vectors[1]))

        if len(lines) == 2:
            return BaseNodeIntersection.intersectTwoLines(*lines)
        if len(circles) == 2:
            raise NotImplementedError('intersection between circles is not supported')
        if len(lines) == 1 and len(circles) == 1:
            return BaseNodeIntersection.intersectLineWithCircle(lines[0], circles[0])

        print(lines)
        print(circles)
        raise NotImplementedError('unsupported combination of parameter types')
コード例 #3
0
    def _createChildNodes(self, start_pos, end_pos, layer, width):
        nodes = []

        cur_y_pos = min([start_pos.y, end_pos.y])
        max_y_pos = max([start_pos.y, end_pos.y])

        while (cur_y_pos + width) < max_y_pos:
            cur_y_pos += width
            new_node = Line(start=Vector2D(start_pos.x, cur_y_pos),
                            end=Vector2D(end_pos.x, cur_y_pos),
                            layer=layer,
                            width=width)
            new_node._parent = self
            nodes.append(new_node)

        return nodes
コード例 #4
0
 def _line(self, x, y):
     if self.keepout != None:
         segments = self.keepout.processLine(self.x, self.y, self.x + x,
                                             self.y + y)
         for line in segments:  # TODO: move grid alignment to keepout code?
             line[0] = self._align(line[0])
             line[1] = self._align(line[1])
             line[2] = self._align(line[2])
             line[3] = self._align(line[3])
             self.footprint.append(
                 Line(start=[line[0], line[1]],
                      end=[line[2], line[3]],
                      layer=self.layer,
                      width=self.line_width))
     else:
         self.footprint.append(
             Line(start=[self.x, self.y],
                  end=[self.x + x, self.y + y],
                  layer=self.layer,
                  width=self.line_width))
コード例 #5
0
    def _init_switch(self):

        # set attributes
        self.setAttribute('smd')

        # create fab outline (keyswitch)
        self.append(
            RectLine(start=[-self.kailh_hs_w / 2, -self.kailh_hs_h / 2],
                     end=[self.kailh_hs_w / 2, self.kailh_hs_h / 2],
                     layer='F.Fab',
                     width=0.1))

        # create fab outline (socket)
        self.append(
            Line(start=[-4, -6.8], end=[4.8, -6.8], layer='B.Fab', width=0.12))
        self.append(
            Line(start=[4.8, -6.8], end=[4.8, -2.8], layer='B.Fab',
                 width=0.12))
        self.append(
            Line(start=[-0.3, -2.8],
                 end=[4.8, -2.8],
                 layer='B.Fab',
                 width=0.12))
        self.append(
            Line(start=[-6, -0.8], end=[-2.3, -0.8], layer='B.Fab',
                 width=0.12))
        self.append(
            Line(start=[-6, -0.8], end=[-6, -4.8], layer='B.Fab', width=0.12))
        self.append(
            Arc(center=[-4, -4.8],
                start=[-4, -6.8],
                angle=-90,
                layer='B.Fab',
                width=0.12))
        self.append(
            Arc(center=[-0.3, -0.8],
                start=[-0.3, -2.8],
                angle=-90,
                layer='B.Fab',
                width=0.12))

        # create silkscreen (keyswitch)
        self.append(
            RectLine(start=[-self.kailh_hs_w / 2, -self.kailh_hs_h / 2],
                     end=[self.kailh_hs_w / 2, self.kailh_hs_h / 2],
                     layer='F.SilkS',
                     width=0.12,
                     offset=0.1))

        # create silkscreen (socket)
        self.append(
            Line(start=[-4.1, -6.9],
                 end=[1, -6.9],
                 layer='B.SilkS',
                 width=0.12))
        self.append(
            Line(start=[-0.2, -2.7],
                 end=[4.9, -2.7],
                 layer='B.SilkS',
                 width=0.12))
        self.append(
            Arc(center=[-4.1, -4.9],
                start=[-4.1, -6.9],
                angle=-90,
                layer='B.SilkS',
                width=0.12))
        self.append(
            Arc(center=[-0.2, -0.7],
                start=[-0.2, -2.7],
                angle=-90,
                layer='B.SilkS',
                width=0.12))

        # create courtyard (keyswitch)
        self.append(
            RectLine(start=[-self.kailh_hs_w / 2, -self.kailh_hs_h / 2],
                     end=[self.kailh_hs_w / 2, self.kailh_hs_h / 2],
                     layer='F.CrtYd',
                     width=0.05,
                     offset=0.25))

        # create courtyard (socket)
        # !TODO: add KLC correct offset (0.25)
        self.append(
            Line(start=[-4, -6.8],
                 end=[4.8, -6.8],
                 layer='B.CrtYd',
                 width=0.05))
        self.append(
            Line(start=[4.8, -6.8],
                 end=[4.8, -2.8],
                 layer='B.CrtYd',
                 width=0.05))
        self.append(
            Line(start=[-0.3, -2.8],
                 end=[4.8, -2.8],
                 layer='B.CrtYd',
                 width=0.05))
        self.append(
            Line(start=[-6, -0.8],
                 end=[-2.3, -0.8],
                 layer='B.CrtYd',
                 width=0.05))
        self.append(
            Line(start=[-6, -0.8], end=[-6, -4.8], layer='B.CrtYd',
                 width=0.05))
        self.append(
            Arc(center=[-4, -4.8],
                start=[-4, -6.8],
                angle=-90,
                layer='B.CrtYd',
                width=0.05))
        self.append(
            Arc(center=[-0.3, -0.8],
                start=[-0.3, -2.8],
                angle=-90,
                layer='B.CrtYd',
                width=0.05))

        # create pads
        if self.plated_th is True:
            self.append(
                Pad(number=1,
                    type=Pad.TYPE_THT,
                    shape=Pad.SHAPE_CIRCLE,
                    at=[-3.81, -2.54],
                    size=[3.6, 3.6],
                    drill=3.05,
                    layers=['*.Cu', 'B.Mask']))
            self.append(
                Pad(number=2,
                    type=Pad.TYPE_THT,
                    shape=Pad.SHAPE_CIRCLE,
                    at=[2.54, -5.08],
                    size=[3.6, 3.6],
                    drill=3.05,
                    layers=['*.Cu', 'B.Mask']))

            self.append(
                Pad(number=1,
                    type=Pad.TYPE_SMT,
                    shape=Pad.SHAPE_ROUNDRECT,
                    at=[-6.585, -2.54],
                    size=[3.55, 2.5],
                    round_radius_exact=0.25,
                    layers=['B.Cu']))
            self.append(
                Pad(number=2,
                    type=Pad.TYPE_SMT,
                    shape=Pad.SHAPE_ROUNDRECT,
                    at=[5.32, -5.08],
                    size=[3.55, 2.5],
                    round_radius_exact=0.25,
                    layers=['B.Cu']))

            self.append(
                Pad(type=Pad.TYPE_SMT,
                    shape=Pad.SHAPE_ROUNDRECT,
                    at=[-7.085, -2.54],
                    size=[2.55, 2.5],
                    round_radius_exact=0.25,
                    layers=['B.Mask', 'B.Paste']))
            self.append(
                Pad(type=Pad.TYPE_SMT,
                    shape=Pad.SHAPE_ROUNDRECT,
                    at=[5.842, -5.08],
                    size=[2.55, 2.5],
                    round_radius_exact=0.25,
                    layers=['B.Mask', 'B.Paste']))
        else:
            self.append(
                Pad(type=Pad.TYPE_NPTH,
                    shape=Pad.SHAPE_CIRCLE,
                    at=[-3.81, -2.54],
                    size=[3.05, 3.05],
                    drill=3.05,
                    layers=['*.Cu', '*.Mask']))
            self.append(
                Pad(type=Pad.TYPE_NPTH,
                    shape=Pad.SHAPE_CIRCLE,
                    at=[2.54, -5.08],
                    size=[3.05, 3.05],
                    drill=3.05,
                    layers=['*.Cu', '*.Mask']))

            self.append(
                Pad(number=1,
                    type=Pad.TYPE_SMT,
                    shape=Pad.SHAPE_ROUNDRECT,
                    at=[-7.085, -2.54],
                    size=[2.55, 2.5],
                    round_radius_exact=0.25,
                    layers=['B.Cu', 'B.Mask', 'B.Paste']))
            self.append(
                Pad(number=2,
                    type=Pad.TYPE_SMT,
                    shape=Pad.SHAPE_ROUNDRECT,
                    at=[5.842, -5.08],
                    size=[2.55, 2.5],
                    round_radius_exact=0.25,
                    layers=['B.Cu', 'B.Mask', 'B.Paste']))

        self.append(
            Pad(type=Pad.TYPE_NPTH,
                shape=Pad.SHAPE_CIRCLE,
                at=[0, 0],
                size=[4, 4],
                drill=4,
                layers=['*.Cu', '*.Mask']))
        self.append(
            Pad(type=Pad.TYPE_NPTH,
                shape=Pad.SHAPE_CIRCLE,
                at=[-5.08, 0],
                size=[1.75, 1.75],
                drill=1.75,
                layers=['*.Cu', '*.Mask']))
        self.append(
            Pad(type=Pad.TYPE_NPTH,
                shape=Pad.SHAPE_CIRCLE,
                at=[5.08, 0],
                size=[1.75, 1.75],
                drill=1.75,
                layers=['*.Cu', '*.Mask']))