Parts of Horzion EDA are available as a python module for use in scripts.
The python module isn't included in the all target. To build it, run make build/horizon.so. This requires the python 3 headers to be installed. You can then place it in python's sys.path and import it using import horizon.
After following the build instructions for your platform (:doc:`linux<build-linux>`, :doc:`freebsd<build-freebsd>`, :doc:`win32<build-win32>`), it may be necessary to install two additional dependencies:
- pycairo
- osmesa
On Ubuntu obtain these packages using:
sudo apt install python3-cairo-dev libosmesa6-dev
After building on unixes it is possible to inform python of the horizon module location by adding this line to .profile or .zshrc:
export PYTHONPATH=$PYTHONPATH:~/path/to/horizon/build/
import horizon
#open project
p=horizon.Project("/path/to/project.hprj")
#open schematic
sch = p.open_top_schematic()
#export PDF
pdf_settings = sch.get_pdf_export_settings()
pdf_settings['output_filename'] = '/tmp/sch.pdf'
sch.export_pdf(pdf_settings)
#export BOM
bom_settings = sch.get_bom_export_settings()
bom_settings['output_filename'] = '/tmp/bom.csv'
sch.export_bom(bom_settings)
#open board
brd = p.open_board()
#export gerber
gerber_settings = brd.get_gerber_export_settings()
gerber_settings["output_directory"] = "/tmp/gerber"
brd.export_gerber(gerber_settings)
#export pick&place
pnp_settings = brd.get_pnp_export_settings()
pnp_settings["output_directory"] = "/tmp/pnp"
brd.export_pnp(pnp_settings)
#export STEP
step_settings = brd.get_step_export_settings()
step_settings["filename"] = "/tmp/pca.step"
brd.export_step(step_settings)
#run DRC
rules=brd.get_rules()
#modify rules if needed
rule_ids = brd.get_rule_ids()
#if needed, remove unneeded checks from rule_ids
result = brd.run_checks(rules, ids)
#export 3D rendering (see next section)
exporter = brd.export_3d(1920, 1080) #width, height
exporter.view_all()
exporter.load_3d_models() #optional
exporter.render_to_png("brd.png")
To further adjust the export settings, have a look at the dicts returned by the get_*_export_settings methods.
use brd.export_3d(1920, 1080) or similar to get an Image3DExporter object
.. py:class:: Image3DExporter
.. py:method:: render_to_png(filename)
Render to png image
.. py:method:: render_to_surface()
Render to pycairo surface
:rtype: :py:class:`cairo.Surface`
.. py:method:: load_3d_models()
Loads 3D models if available
.. py:method:: view_all()
Resets view to top side
.. py:attribute:: cam_azimuth
:type: float
Camera azimuth angle in degrees
.. py:attribute:: cam_elevation
:type: float
Camera elevation angle in degrees
.. py:attribute:: cam_fov
:type: float
Camera field of view in degrees
.. py:attribute:: cam_distance
:type: float
Camera distance in millimeters
.. py:attribute:: center_x
:type: float
Where the camera looks at (millimeter)
.. py:attribute:: center_y
:type: float
Where the camera looks at (millimeter)
.. py:attribute:: background_top_color
:type: 3-tuple of float
Background color at the top, components range from 0 to 1
.. py:attribute:: background_bottom_color
:type: 3-tuple of float
Background color at the bottom, components range from 0 to 1
.. py:attribute:: solder_mask_color
:type: 3-tuple of float
Solder mask color, components range from 0 to 1
.. py:attribute:: substrate_mask_color
:type: 3-tuple of float
Color of the PCB body, components range from 0 to 1
.. py:attribute:: ortho
:type: bool
Use orthographic projection
.. py:attribute:: show_models
:type: bool
Show 3D models
.. py:attribute:: show_silkscreen
:type: bool
.. py:attribute:: show_solder_mask
:type: bool
.. py:attribute:: show_solder_paste
:type: bool
.. py:attribute:: show_substrate
:type: bool
.. py:attribute:: use_layer_colors
:type: bool
Use layer colors from 2D view for copper layers