{ "info": { "author": "David Craven", "author_email": "david@craven.ch", "bugtrack_url": null, "classifiers": [], "description": "[![Build Status](https://travis-ci.org/dvc94ch/pykicad.svg?branch=master)](https://travis-ci.org/dvc94ch/pykicad)\n\n# Routines for generating and parsing KiCAD files\n\nThere are multiple python scripts that read and write kicad file\nformats. Currently there is the problem that each project reimplements\nbasic parsing and serialization of these formats.\n\nThe aim of this project is to provide high quality and well tested\nformat support so that other projects can focus on the interesting\nstuff.\n\n## Status\nComplete support for the kicad_pcb and kicad_mod formats. The schemas of the\nclasses should provide good documentation on the kicad file format. A summary\nof all methods and fields can be found in the section API docs.\n\n## Usage\n```python\nfrom numpy import array\nfrom pykicad.pcb import *\nfrom pykicad.module import *\n\n# Define nets\nvi, vo, gnd = Net('VI'), Net('VO'), Net('GND')\n\n# Load footprints\nr1 = Module.from_library('Resistors_SMD', 'R_0805')\nr2 = Module.from_library('Resistors_SMD', 'R_0805')\n\n# Connect pads\nr1.pads[0].net = vi\nr1.pads[1].net = vo\nr2.pads[0].net = vo\nr2.pads[1].net = gnd\n\n# Place components\nr1.at = [0, 0]\nr2.at = [5, 0]\n\n# Compute positions\nstart = array(r1.pads[1].at) + array(r1.at)\nend = array(r2.pads[0].at) + array(r2.at)\npos = start + (end - start) / 2\n\n# Create vias\nv1 = Via(at=pos.tolist(), size=.8, drill=.6, net=vo.code)\n\n# Create segments\ns1 = Segment(start=start.tolist(), end=pos.tolist(), net=vo.code)\ns2 = Segment(start=pos.tolist(), end=end.tolist(), net=vo.code)\n\n# Create zones\ncoords = [(0, 0), (10, 0), (10, 10), (0, 10)]\ngndplane_top = Zone(net_name='GND', layer='F.Cu', polygon=coords, clearance=0.3)\n\n\nlayers = [\n Layer('F.Cu'),\n Layer('Inner1.Cu'),\n Layer('Inner2.Cu'),\n Layer('B.Cu'),\n Layer('Edge.Cuts', type='user')\n]\n\nfor layer in ['Mask', 'Paste', 'SilkS', 'CrtYd', 'Fab']:\n for side in ['B', 'F']:\n layers.append(Layer('%s.%s' % (side, layer), type='user'))\n\nnc1 = NetClass('default', trace_width=1, nets=['VI', 'VO', 'GND'])\n\n# Create PCB\npcb = Pcb()\npcb.title = 'A title'\npcb.comment1 = 'Comment 1'\npcb.page_type = [20, 20]\npcb.num_nets = 5\npcb.setup = Setup(grid_origin=[10, 10])\npcb.layers = layers\npcb.modules += [r1, r2]\npcb.net_classes += [nc1]\npcb.nets += [vi, vo, gnd]\npcb.segments += [s1, s2]\npcb.vias += [v1]\npcb.zones += [gndplane_top]\n\npcb.to_file('project')\n```\n\n\n## Supported file formats\n\n* Modules (*.pretty, *.kicad_mod) in module.py\n* Pcbnew (*.kicad_pcb) in pcb.py\n\n\n# API docs\n## modules.py\n### Classes\n* Module(name, version, locked, placed, layer, tedit, tstamp, at, descr, tags,\n path, attr, autoplace_cost90, autoplace_cost180, solder_mask_margin,\n solder_paste_margin, solder_paste_ratio, clearance, zone_connect,\n thermal_width, thermal_gap, texts, lines, circles, arcs, curves,\n polygons, pads, models)\n * pads_by_name(name)\n * set_reference(name)\n * set_value(value)\n * geometry()\n * elements_by_layer(layer)\n * courtyard()\n * place(x, y)\n * rotate(angle)\n * connect(pad, net)\n * flip()\n * from_file(cls, path)\n * from_library(cls, lib, name)\n* Pad(name, type, shape, size, at, rect_delta, roundrect_rratio, drill, layers,\n net, die_length, solder_mask_margin, solder_paste_margin, solder_paste_margin_ratio,\n clearance, zone_connect)\n * rotate(angle)\n * flip()\n* Drill(size, offset)\n* Net(code, name)\n* Model(path, at, scale, rotate)\n* Text(type, text, at, layer, size, thickness, bold, italic, justify, hide, tstamp)\n * rotate(angle)\n * flip()\n* Line(start, end, layer, width, tstamp, status)\n * flip()\n* Circle(center, end, layer, width, tstamp, status)\n * flip()\n* Arc(start, end, angle, layer, width, tstamp, status)\n * flip()\n* Polygon(pts, layer, width, tstamp, status)\n * flip()\n* Curve(start, bezier1, bezier2, end, layer, width, tstamp, status)\n * flip()\n\n## pcb.py\n### Classes\n* Pcb(version, host, board_thickness, num_nets, num_no_connects, title, date, rev,\n company, comment1, comment2, comment3, comment4, page_type, portrait,\n setup, layers, nets, net_classes, modules, segments, vias, texts, lines,\n arcs, circles, polygons, curves, zones, targets, dimensions)\n * geometry()\n * elements_by_layer(layer)\n * outline()\n * module_by_reference(name)\n * net_by_code(code)\n * to_file(path)\n * from_file(cls, path)\n* Segment(start, end, net, width, layer, tstamp, status)\n* Text(text, at, layer, size, thickness, bold, italic, justify, hide, tstamp)\n* Line(start, end, width, layer, tstamp, status)\n* Arc(start, end, angle, layer, width)\n* Circle(center, end, layer, width, tstamp, status)\n* Polygon(pts, layer, width, tstamp, status)\n* Curve(start, bezier1, bezier2, end, layer, width, tstamp, status)\n* Via(micro, blind, at, size, drill, layers, net, tstamp, status)\n* Layer(code, name, type, hide)\n* NetClass(name, description, clearance, trace_width, via_dia, via_drill,\n uvia_dia, uvia_drill, diff_pair_width, diff_pair_gap, nets)\n* Zone(net, net_name, layer, tstamp, hatch_type, hatch_size, priority,\n connect_pads, clearance, min_thickness, fill, fill_mode, arc_segments,\n thermal_gap, thermal_bridge_width, smoothing, radius, keepout_tracks,\n keepout_vias, keepout_copperpour, polygon, filled_polygon, fill_segments)\n* Target(shape, at, size, width, layer, tstamp)\n* Dimension(value, width, layer, text, feature1, feature2, crossbar, arrow1a,\n arrow1b, arrow2a, arrow2b, tstamp)\n* Setup(user_trace_width, trace_clearance, zone_clearance, zone_45_only,\n trace_min, segment_width, edge_width, via_size, uvia_size,\n uvia_drill, uvias_allowed, blind_buried_vias_allowed, uvia_min_size,\n uvai_min_drill, pcb_text_width, pcb_text_size, mod_edge_width,\n mod_text_size, mod_text_width, pad_size, pad_drill, pad_to_mask_clearance,\n solder_mask_min_width, pad_to_paste_clearance, solder_to_paste_clearance_ratio,\n grid_origin, visible_elements, pcbplotparams)\n\n### Functions\n* find_library(library)\n* find_module(library, module)\n* list_libraries()\n* list_modules(library)\n* list_all_modules()\n* filter_by_regex()\n* flip_layer()\n\n### Global variables\n* MODULE_SEARCH_PATH\n\n# Project using pykicad\n* [pycircuit] (https://github.com/dvc94ch/pycircuit)\n\n# License\nISC License\n\nCopyright (c) 2017, David Craven\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE\nOR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/dvc94ch/pykicad", "keywords": "kicad,file formats,parser", "license": "ISC", "maintainer": "", "maintainer_email": "", "name": "pykicad", "package_url": "https://pypi.org/project/pykicad/", "platform": "", "project_url": "https://pypi.org/project/pykicad/", "project_urls": { "Homepage": "https://github.com/dvc94ch/pykicad" }, "release_url": "https://pypi.org/project/pykicad/0.1.1/", "requires_dist": null, "requires_python": "", "summary": "Library for working with KiCAD file formats", "version": "0.1.1" }, "last_serial": 3546546, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "aa9042f8f090606da39d0c6065525a69", "sha256": "7473e2caff19eaf7fea796e6db8d0ab15646284ea86cec3376f3c6cf8754c5f8" }, "downloads": -1, "filename": "pykicad-0.0.1.tar.gz", "has_sig": false, "md5_digest": "aa9042f8f090606da39d0c6065525a69", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5110, "upload_time": "2017-04-15T11:33:01", "url": "https://files.pythonhosted.org/packages/4f/c0/1802dbe44e1cb23223b36ac9c954f1d0ce8e58e654e639238f751fedd8a1/pykicad-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "b4ccd1e5835d30891788b5194f9bbe94", "sha256": "2c5ba4d7b9113e4a97dc2d7982a4696490521d1be1dd9e0d376ea7ae5a9c98df" }, "downloads": -1, "filename": "pykicad-0.0.2.tar.gz", "has_sig": false, "md5_digest": "b4ccd1e5835d30891788b5194f9bbe94", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6066, "upload_time": "2017-04-19T15:33:01", "url": "https://files.pythonhosted.org/packages/c4/84/599f46442d462225bb42e4cee0c83c16ee5ce56a9c9f6c24dcd75446ad7e/pykicad-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "5b22a290e67a111be63eb92847f8b86c", "sha256": "cd470b2ce776f5f0c809901728e95bd04c5f58acc90b4a0c46e9c412acae6965" }, "downloads": -1, "filename": "pykicad-0.0.3.tar.gz", "has_sig": false, "md5_digest": "5b22a290e67a111be63eb92847f8b86c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6128, "upload_time": "2017-04-21T15:21:12", "url": "https://files.pythonhosted.org/packages/86/81/6f4bba641773b43574e6d28fa138952b1fa14b32f86e139a9efb6ca0b1c5/pykicad-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "c3e703e0e6db9bce376eebcaf43a7405", "sha256": "0b206b0f5c5bc96985446ffb02e6b7a5ebec352cb6e30f1f7951c579ced60dd0" }, "downloads": -1, "filename": "pykicad-0.0.4.tar.gz", "has_sig": false, "md5_digest": "c3e703e0e6db9bce376eebcaf43a7405", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12448, "upload_time": "2017-07-10T20:34:02", "url": "https://files.pythonhosted.org/packages/7c/e0/c7c1533e9ecd82c420c24d997c997cfa420c167a32e471bb809266c1bc93/pykicad-0.0.4.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "e8685a6aaf50b6d2b8e760e70af6522e", "sha256": "777e7c23053d571967106ffec5d74624f9fe1127d3891332b8b068a3a4eea1b3" }, "downloads": -1, "filename": "pykicad-0.1.0.tar.gz", "has_sig": false, "md5_digest": "e8685a6aaf50b6d2b8e760e70af6522e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14687, "upload_time": "2017-07-12T16:59:24", "url": "https://files.pythonhosted.org/packages/2a/94/1ba5c9b0cf852efdcf625940b8e9e684fd9585251b9e6c72efb6c8305f20/pykicad-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "8025179c1143ba612ce8f35f1f35e1a8", "sha256": "ded058f3af116845d8a0495f3a8ff4b6a7e707e534c5b71ee61b37fb23553923" }, "downloads": -1, "filename": "pykicad-0.1.1.tar.gz", "has_sig": false, "md5_digest": "8025179c1143ba612ce8f35f1f35e1a8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14874, "upload_time": "2018-02-02T18:51:10", "url": "https://files.pythonhosted.org/packages/78/14/05f8bfd39dfd3e708612847a925a9e590f3cfe668ae39accbbc8a4e264a4/pykicad-0.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8025179c1143ba612ce8f35f1f35e1a8", "sha256": "ded058f3af116845d8a0495f3a8ff4b6a7e707e534c5b71ee61b37fb23553923" }, "downloads": -1, "filename": "pykicad-0.1.1.tar.gz", "has_sig": false, "md5_digest": "8025179c1143ba612ce8f35f1f35e1a8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14874, "upload_time": "2018-02-02T18:51:10", "url": "https://files.pythonhosted.org/packages/78/14/05f8bfd39dfd3e708612847a925a9e590f3cfe668ae39accbbc8a4e264a4/pykicad-0.1.1.tar.gz" } ] }