Code Monkey home page Code Monkey logo

horizon's Introduction

Horizon EDA

Horizon EDA is an Electronic Design Automation package supporting an integrated end-to-end workflow for printed circuit board design including parts management and schematic entry.

See the docs for an overview of horizon's top features.

Wanna chat about the project? Join #horizon-eda on libera.chat

collage

Features for users so far

  • Complete design flow from schematic entry to gerber export
  • Sane library management
  • Unified editor for everything from symbol to board
  • Netlist-aware schematic editor
  • KiCad's awesome interactive router
  • Lag- and glitch-free rendering
  • Rule-based DRC
  • Hierarchical schematics
  • Undo/redo
  • Copy/paste for some objects
  • Builds and runs on Linux and Windows

Features for developers

  • Written in modern C++, legacy-free codebase!
  • Uses JSON as on-disk format
  • Uses Gtkmm3 for GUI
  • OpenGL 3 accelerated rendering
  • Everything is referenced by UUIDs

Getting Started

See the the docs.

Included third-party software

Directory in 3rd_party Project Version URL License
nlohmann JSON for Modern C++ 3.10.3 https://github.com/nlohmann/json/ MIT
clipper Clipper 6.4.2 http://www.angusj.com/delphi/clipper.php Boost
polypartition polypartition 7bdffb428b2b19ad1c43aa44c714dcc104177e84 https://github.com/ivanfratric/polypartition/ MIT
poly2tri poly2tri d949f3cd6f85b20728af0bdc454b090226068c73 https://github.com/jhasse/poly2tri 3-Clause BSD
dxflib dxflib 3.26.4 https://qcad.org/en/90-dxflib GPLv2
alphanum The Alphanum Algorithm 1.3 http://www.davekoelle.com/alphanum.html MIT
delaunator Delaunator C++ 6f2879967bc96a9bcdbacf418e560e9f2e170ace https://github.com/abellgithub/delaunator-cpp MIT
footag footag 99116328abe8f53e71831b446d35e93ee7128ef3 https://github.com/endofexclusive/footag GPLv3
router KiCad router 6.0.4 https://gitlab.com/kicad/code/kicad/-/tree/6.0.4/pcbnew/router GPLv3
sexpr KiCad s-expression parser 6.0.4 https://gitlab.com/kicad/code/kicad/-/tree/6.0.4/libs/sexpr GPLv3
catch2 Catch2 3.0.1 https://github.com/catchorg/Catch2/releases/tag/v3.0.1 Boost
range-v3 range-v3 0.12.0 https://github.com/ericniebler/range-v3/releases/tag/0.12.0 Boost

horizon's People

Contributors

anuejn avatar atoav avatar carrotindustries avatar endofexclusive avatar eqvinox avatar ericonr avatar frmdstryr avatar fruchti avatar guserav avatar iovaris avatar jackie365 avatar jmgao avatar kamtar avatar katyo avatar korken89 avatar m-byte avatar marsik avatar moritz-meier avatar oxplot avatar peterus avatar phlmn avatar rnestler avatar rroohhh avatar valpackett avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

horizon's Issues

add install and dist target to makefile

I propose to add an 'install' and 'dist' target to the makefile. That would ease the creation of debian packages.

PREFIX=/usr
VERSION=$(shell git log -1 --date="format:%Y%m%d" --pretty="format:%cd")

install: install-bin

install-bin:
install -d $(DESTDIR)$(PREFIX)/bin
install -m 755 horizon-imp horizon-pool horizon-prj horizon-pool-update-parametric horizon-prj-mgr horizon-pgm-test horizon-pool-mgr $(DESTDIR)$(PREFIX)/bin

dist:
tar -C .. -cJv --exclude=debian --exclude=horizon-$(VERSION).tar.xz --exclude-vcs --exclude-vcs-ignore --transform='s/horizon/horizon-$(VERSION)/' -f ../horizon-$(VERSION).tar.xz horizon

Arcs are always created on the top copper layer

I can draw lines and text on the top silk layer, but I can't do it with arcs. The command help on the bottom line instructs me to set the from, to and center point, but the arc doesn't appear. Doing it on the top copper layer works and setting the layer afterwards to top silk layer also works.

Pool manager: Does not rember last opened pool

Restarting the pool manager does not rember the old used pools. As you like to have only one pool it would be best if you would start directly into the pool.

Also it would be nice to have a button "get pool" and "update pool" to get it from git.

grafik

Crash when trying to add-part

I got a crash when I tried to add a part on a schematics:

% gdb ./horizon-prj-mgr 
GNU gdb (GDB) 8.0.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./horizon-prj-mgr...done.
(gdb) run
Starting program: ~/projects/horizon/horizon-prj-mgr 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
[New Thread 0x7fffea33a700 (LWP 16497)]
[New Thread 0x7fffe9b39700 (LWP 16498)]
[New Thread 0x7fffe9126700 (LWP 16499)]
[New Thread 0x7fffe8925700 (LWP 16500)]
[New Thread 0x7fffdbde2700 (LWP 16502)]
[New Thread 0x7fffdb3db700 (LWP 16503)]
[New Thread 0x7fffdabda700 (LWP 16504)]
[New Thread 0x7fffda1cc700 (LWP 16505)]
[New Thread 0x7fffd99cb700 (LWP 16506)]
[New Thread 0x7fffd91ca700 (LWP 16507)]
[New Thread 0x7fffc0ece700 (LWP 16509)]
[Thread 0x7fffdabda700 (LWP 16504) exited]
[Thread 0x7fffdbde2700 (LWP 16502) exited]
[Thread 0x7fffd91ca700 (LWP 16507) exited]
[Thread 0x7fffdb3db700 (LWP 16503) exited]
[New Thread 0x7fffdb3db700 (LWP 16511)]
[New Thread 0x7fffd91ca700 (LWP 16512)]
[New Thread 0x7fffdbde2700 (LWP 16513)]
[New Thread 0x7fffdabda700 (LWP 16514)]
[New Thread 0x7fffa7fff700 (LWP 16515)]
[New Thread 0x7fff9f7fe700 (LWP 16516)]
[New Thread 0x7fffa77fe700 (LWP 16517)]
[New Thread 0x7fffa6ffd700 (LWP 16518)]
[New Thread 0x7fffa67fc700 (LWP 16519)]
[Thread 0x7fffdbde2700 (LWP 16513) exited]
[Thread 0x7fffd91ca700 (LWP 16512) exited]
[Thread 0x7fffdb3db700 (LWP 16511) exited]
[Thread 0x7fffa7fff700 (LWP 16515) exited]
[Thread 0x7fffdabda700 (LWP 16514) exited]
[Thread 0x7fff9f7fe700 (LWP 16516) exited]
[Thread 0x7fffa67fc700 (LWP 16519) exited]
[Thread 0x7fffd99cb700 (LWP 16506) exited]
[Thread 0x7fffa6ffd700 (LWP 16518) exited]
[New Thread 0x7fffa6ffd700 (LWP 16520)]
[New Thread 0x7fffd99cb700 (LWP 16521)]
[New Thread 0x7fffa67fc700 (LWP 16522)]
[New Thread 0x7fff9f7fe700 (LWP 16523)]
[New Thread 0x7fffdbde2700 (LWP 16524)]
[New Thread 0x7fffdb3db700 (LWP 16525)]
[New Thread 0x7fffdabda700 (LWP 16526)]
[Thread 0x7fffdb3db700 (LWP 16525) exited]
[Thread 0x7fff9f7fe700 (LWP 16523) exited]
[Thread 0x7fffa77fe700 (LWP 16517) exited]
[Thread 0x7fffdabda700 (LWP 16526) exited]
[Thread 0x7fffa67fc700 (LWP 16522) exited]
[Thread 0x7fffa6ffd700 (LWP 16520) exited]
[Thread 0x7fffd99cb700 (LWP 16521) exited]
[New Thread 0x7fffd99cb700 (LWP 16529)]
[New Thread 0x7fffa6ffd700 (LWP 16530)]
[New Thread 0x7fffa67fc700 (LWP 16531)]
[New Thread 0x7fffdabda700 (LWP 16532)]
[New Thread 0x7fffdb3db700 (LWP 16533)]
[New Thread 0x7fffd91ca700 (LWP 16534)]
[New Thread 0x7fffa7fff700 (LWP 16535)]
[New Thread 0x7fffa77fe700 (LWP 16536)]
[New Thread 0x7fffa5ffb700 (LWP 16537)]
[Thread 0x7fffdb3db700 (LWP 16533) exited]
[Thread 0x7fffa67fc700 (LWP 16531) exited]
[Thread 0x7fffd99cb700 (LWP 16529) exited]
[Thread 0x7fffdbde2700 (LWP 16524) exited]
[Thread 0x7fffa77fe700 (LWP 16536) exited]
[Thread 0x7fffa5ffb700 (LWP 16537) exited]
[Thread 0x7fffa7fff700 (LWP 16535) exited]
[Thread 0x7fffd91ca700 (LWP 16534) exited]
[Thread 0x7fffa6ffd700 (LWP 16530) exited]
[New Thread 0x7fffa6ffd700 (LWP 16538)]
[Thread 0x7fffdabda700 (LWP 16532) exited]
[New Thread 0x7fffdabda700 (LWP 16539)]
[Thread 0x7fffa6ffd700 (LWP 16538) exited]
SELECT parts.uuid, parts.MPN, parts.manufacturer, packages.name, GROUP_CONCAT(tags.tag, ' '), parts.filename FROM parts LEFT JOIN tags ON tags.uuid = parts.uuid LEFT JOIN packages ON packages.uuid = parts.package WHERE parts.MPN LIKE ? AND parts.manufacturer LIKE ? AND (parts.entity=? or ?) GROUP BY parts.uuid  ORDER BY parts.MPN COLLATE naturalCompare ASC
col 2
create proc
spawn /home/roughl/proggen/projects/horizon/horizon-imp -c /home/roughl/proggen/projects/horizon/projects/foobar/top_sch.json /home/roughl/proggen/projects/horizon/projects/foobar/top_block.json 
[Thread 0x7fffdabda700 (LWP 16539) exited]
[New Thread 0x7fffdabda700 (LWP 16549)]
imp rx null
place part 29043bfd-c944-47cb-ae49-8dc6e1cf7257
tool add part

(horizon-prj-mgr:16493): glibmm-ERROR **: 
unhandled exception (type std::exception) in signal handler:
what: not found


Thread 1 "horizon-prj-mgr" received signal SIGTRAP, Trace/breakpoint trap.
0x00007ffff3916cd2 in ?? () from /usr/lib/libglib-2.0.so.0
(gdb) bt
#0  0x00007ffff3916cd2 in  () at /usr/lib/libglib-2.0.so.0
#1  0x00007ffff3916ecd in g_log_default_handler () at /usr/lib/libglib-2.0.so.0
#2  0x00007ffff39174ef in g_logv () at /usr/lib/libglib-2.0.so.0
#3  0x00007ffff3917680 in g_log () at /usr/lib/libglib-2.0.so.0
#4  0x00007ffff6023852 in Glib::exception_handlers_invoke() () at /usr/lib/libglibmm-2.4.so.1
#5  0x00007ffff6024c44 in  () at /usr/lib/libglibmm-2.4.so.1
#6  0x00007ffff390c0be in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0
#7  0x00007ffff390df69 in  () at /usr/lib/libglib-2.0.so.0
#8  0x00007ffff390dfae in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#9  0x00007ffff47cd5ae in g_application_run () at /usr/lib/libgio-2.0.so.0
#10 0x000055555559bfc9 in main(int, char**) (argc=1, argv=0x7fffffffdba8) at prj-mgr/prj-mgr-main.cpp:13

Building under Windows using msys

I followed the wiki to try to compile, however I do not know msys.
Packages are updated, however, there seem to miss a few.
LTIPC2082+Michael@LTIPC2082 MSYS ~/horizon $ make Package gio-2.0 was not found in the pkg-config search path. Perhaps you should add the directory containinggio-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gio-2.0' found
/bin/sh: --: Ungültige Option
Aufruf: /bin/sh [Lange GNU Option] [Option] ...
/bin/sh [Lange GNU Option] [Option] Script-Datei ...
Lange GNU Optionen:
--debug
--debugger
--dump-po-strings
--dump-strings
--help
--init-file
--login
--noediting
--noprofile
--norc
--posix
--protected
--rcfile
--restricted
--verbose
--version
--wordexp
Shell-Optionen:
-ilrsD oder -c Kommando oder -O shopt_option (Nur Aufruf)
-abefhkmnptuvxBCHP oder Option -o
Package sqlite3 was not found in the pkg-config search path.
Perhaps you should add the directory containing sqlite3.pc' to the PKG_CONFIG_PATH environment variable No package 'sqlite3' found Package yaml-cpp was not found in the pkg-config search path. Perhaps you should add the directory containing yaml-cpp.pc'
to the PKG_CONFIG_PATH environment variable
No package 'yaml-cpp' found
Package gtkmm-3.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing gtkmm-3.0.pc' to the PKG_CONFIG_PATH environment variable No package 'gtkmm-3.0' found Package epoxy was not found in the pkg-config search path. Perhaps you should add the directory containing epoxy.pc'
to the PKG_CONFIG_PATH environment variable
No package 'epoxy' found
Package cairomm-pdf-1.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing cairomm-pdf-1.0.pc' to the PKG_CONFIG_PATH environment variable No package 'cairomm-pdf-1.0' found Package librsvg-2.0 was not found in the pkg-config search path. Perhaps you should add the directory containing librsvg-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'librsvg-2.0' found
Package libzmq was not found in the pkg-config search path.
Perhaps you should add the directory containing libzmq.pc' to the PKG_CONFIG_PATH environment variable No package 'libzmq' found g++ -c -I. -Iblock -Iboard -Icommon -Iimp -Ipackage -Ipool -Ischematic -Iutil -Iconstraints -g3 -D_USE_MATH_DEFINES -DWIN32_UUID -fdata-sections -ffunction-sections -MP -MMD -pthread -Wall -Wshadow -std=c++14 -O3 util/uuid.cpp -o util/uuid.o make: g++: Kommando nicht gefunden make: *** [Makefile:454: util/uuid.o] Fehler 127

Please support what to do. I seem to be quite unlucky compiling.

Note that all previous commands and instructions failed without an issue.

Unit editor doesn't save Alt. Names

The alternative names cannot be changed in the editor. Modifying the .json file is possible and the alt. names at least show up in the unit editor after updating the pool.

New logo?

I'd propose the idea of a new logo for the program, as it advanches so fast, a new logo would look more professional. I was playing with logo maker for a minute, and they seem to have good logos to offer (as far as i see for free...)
grafik
https://www.logomaker.com/

Of cause, it will not be as good as a designed one, however, i think for the moment it would look quite nice...

This logo is just a very very quick idea

make clean should remove *.d files

I'm not sure but shouldn't

./imp/rules/rule_editor_clearance_copper_non_copper.d
./board/rule_clearance_copper_non_copper.d

be removed with 'make clean' ?

Pool manager: GTK warnings

I get the following warnings from GTK when opening the pool manager, clicking on one pool, clicking there on packages, and then closing it.

The output i get is below. I'm aware, that these are only warnings, but they seem to be new, so maybe you find a possibility to fix this.

$ ./horizon-pool-mgr.exe
SELECT parts.uuid, parts.MPN, parts.manufacturer, packages.name, GROUP_CONCAT(tags.tag, ' '), parts.filename, parts.description FROM parts LEFT JOIN tags ON tags.uuid = parts.uuid LEFT JOIN packages ON packages.uuid = parts.package WHERE parts.MPN LIKE ? AND parts.manufacturer LIKE ? AND (parts.entity=? or ?) GROUP BY parts.uuid ORDER BY parts.MPN COLLATE naturalCompare ASC
SELECT parts.uuid, parts.MPN, parts.manufacturer, packages.name, GROUP_CONCAT(tags.tag, ' '), parts.filename, parts.description FROM parts LEFT JOIN tags ON tags.uuid = parts.uuid LEFT JOIN packages ON packages.uuid = parts.package WHERE parts.MPN LIKE ? AND parts.manufacturer LIKE ? AND (parts.entity=? or ?) GROUP BY parts.uuid ORDER BY parts.MPN COLLATE naturalCompare ASC
close

(horizon-pool-mgr.exe:16964): Gtk-WARNING **: Allocating size to gtkmm__GtkBox 00000000185d1420 without calling gtk_widget_get_preferred_width/height(). How does the code know the size to allocate?

Windows exe display issue

Interesting project, has a few issues with display on my system the top menu buttons appear behind the windows application bar.

horizon

Possibly relevant info: the computers graphics card is a GTX 1050 with the resolution at 1910x1080 i also have the the windows recommended scaling disabled.

Pool manager: Manually editing pool causes crash

I renamed a little bit of the datastructure to organize it. However, i figured out that there's a database which seems not to be loving this.

When clicking on the part, where the folder was changed, the program crashes. The following message is displayed in msys.

$ ./horizon-pool-mgr.exe
SELECT parts.uuid, parts.MPN, parts.manufacturer, packages.name, GROUP_CONCAT(tags.tag, ' '), parts.filename FROM parts LEFT JOIN tags ON tags.uuid = parts.uuid LEFT JOIN packages ON packages.uuid = parts.package WHERE parts.MPN LIKE ? AND parts.manufacturer LIKE ? AND (parts.entity=? or ?) GROUP BY parts.uuid ORDER BY parts.MPN COLLATE naturalCompare ASC
SELECT parts.uuid, parts.MPN, parts.manufacturer, packages.name, GROUP_CONCAT(tags.tag, ' '), parts.filename FROM parts LEFT JOIN tags ON tags.uuid = parts.uuid LEFT JOIN packages ON packages.uuid = parts.package WHERE parts.MPN LIKE ? AND parts.manufacturer LIKE ? AND (parts.entity=? or ?) GROUP BY parts.uuid ORDER BY parts.MPN COLLATE naturalCompare ASC

Can you fix that it does not crash and just removes the part (after asking)? And then there should be a convient option to add the part again.

Package editor: Line properties

It would be handy to have a start and a end position directly modifyable using a text entry.
grafik
Second, it would be nice to have a default line width.

See the pic for a rough scetch.

Appveyor CI

So far I'm manually building the windows zip every now and then. Having CI for windows would make things easier.

Part Editor: Add datasheet field

It would be nice to have a datasheet field. As you are requested to add non-generic parts, the datasheet would be required to verify the correct footprint. Also a datasheet helps to in the verification process during schematics creation.
grafik

crash because some error in schematic

After modifying some symbols in the pool I can't start the schematic editor anymore. I can tell what I precisely did, but maybe this backtrace helps

Thread 1 "horizon-imp" received signal SIGABRT, Aborted. __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51 51 ../sysdeps/unix/sysv/linux/raise.c: Datei oder Verzeichnis nicht gefunden. (gdb) bt #0 0x00007ffff22cba70 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51 #1 0x00007ffff22cd19a in __GI_abort () at abort.c:89 #2 0x00007ffff28e3b85 in __gnu_cxx::__verbose_terminate_handler() () at /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #3 0x00007ffff28e1956 in () at /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #4 0x00007ffff28e19a1 in () at /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #5 0x00007ffff28e1be4 in () at /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #6 0x00007ffff290a15f in std::__throw_out_of_range(char const*) () at /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #7 0x0000000100213aa0 in std::map<horizon::UUID, horizon::SchematicSymbol, std::less<horizon::UUID>, std::allocator<std::pair<horizon::UUID const, horizon::SchematicSymbol> > >::at(horizon::UUID const&) (__k=..., this=<optimized out>) at /usr/include/c++/7/bits/stl_map.h:533 #8 0x0000000100213aa0 in horizon::LineNet::Connection::Connection(nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer> const&, horizon::Sheet*) (this=0x7fffffffcca8, j=..., sheet=<optimized out>) at schematic/line_net.cpp:18 #9 0x000000010021461a in horizon::LineNet::LineNet(horizon::UUID const&, nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer> const&, horizon::Sheet*) (this=0x7fffffffcc50, uu=..., j=..., sheet=0x7fffffffd180) at schematic/line_net.cpp:164 #10 0x000000010020b34d in horizon::Sheet::Sheet(horizon::UUID const&, nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer> const&, horizon::Block&, horizon::Pool&) (this=0x7fffffffd180, uu=..., j=..., block=..., pool=...) at schematic/sheet.cpp:70 #11 0x00000001001fa327 in horizon::Schematic::Schematic(horizon::UUID const&, nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer> const&, horizon::Block&, horizon::Pool&) (this=0x10085ddb8, uu=..., j=..., iblock=..., pool=...) at schematic/schematic.cpp:49

Create new pool (without cloning one)

It would be nice to have in the pool-manager a button, where you can create your own pool, without cloning it from existing one. So one can create independet pools.

Value in parameters seems to have no effect

When creating a padstack and using parameters, they will not be used under certain circumstances when you apply the script. This happens for example, when you already have a script and parameters but haven't assigned a parameter class to a shape. If you set the parameter class afterwards an apply the script, then it will not change the shape. You have to explicitly change a parameter value and apply the script again.

Package editor: Rule checker

I'd propose to add a rule checker when creating packages. As many people should later create packages, "wildwuchs" (deutsch: rank-grove) would result, as everybody would do things slightly diffrently.

The package checker could do e.g. those things:

  1. Check if a name for the part is given
  2. Check if a $RD tag is on the footprint
  3. Check if $RD tag has the same size arrording to the standard (0.15mm line width - 1mm height)
  4. Check if Countyard is present
  5. Check if silkscreen is present
    ... This could be extended, when more using it, more ideas will come...

Only if this DRC checks are passed, a merge to the repository should be allowed.

Backward compatibility (loading old files)

For now, it not tragic: But by adding the part description, it causes file corruptions. Maybe you find a method to fix this (maybe if something is not found, leave it empty...)
grafik

Placing parts with 2 and more units

Placing a part in the schematic editor with an entity which has more than 1 unit, the second unit will be identical to the first unit. Once all units are placed the second unit also disappears. Take the PIC32MZ2064DAH176-I/2J, which has 4 units. The first unit is placed, the second one seems to be identical to the first one (when placed), the third and fourth unit look ok (as far as I can tell). Once the last unit is placed, the second unit disappears.

wiki update for "Building-horizon-on-Linux.md"

Hi!

I was compiling horizon on Arch Linux and wanted to add my dependencies to the wiki. Here is what i wanted to add:

On Arch Linux run (list may not be complete):

sudo pacman -S yaml-cpp sqlite librsvg libepoxy gtkmm boost glm libcurl-gnutls

Current git crashes when updating pool

I just called the pool mgr and updated it. I'm running horizon on debian sid

./horizon-pool-mgr
SELECT parts.uuid, parts.MPN, parts.manufacturer, packages.name, GROUP_CONCAT(tags.tag, ' '), parts.filename FROM parts LEFT JOIN tags ON tags.uuid = parts.uuid LEFT JOIN packages ON packages.uuid = parts.package WHERE parts.MPN LIKE ? AND parts.manufacturer LIKE ? AND (parts.entity=? or ?) GROUP BY parts.uuid ORDER BY parts.MPN ASC
SELECT parts.uuid, parts.MPN, parts.manufacturer, packages.name, GROUP_CONCAT(tags.tag, ' '), parts.filename FROM parts LEFT JOIN tags ON tags.uuid = parts.uuid LEFT JOIN packages ON packages.uuid = parts.package WHERE parts.MPN LIKE ? AND parts.manufacturer LIKE ? AND (parts.entity=? or ?) GROUP BY parts.uuid ORDER BY parts.MPN ASC
hello from thread
tags
entities
symbols
terminate called after throwing an instance of 'std::out_of_range'
what(): key 'unit' not found
Abgebrochen

Compile fails

Compile process fails on Ubuntu.

g++ -c -I. -Iblock -Iboard -Icommon -Iimp -Ipackage -Ipool -Ischematic -Iutil -Iconstraints -g3 -D_USE_MATH_DEFINES -fdata-sections -ffunction-sections -pthread -std=c++11 -pthread -I/usr/include/uuid -I/usr/include/gtkmm-3.0 -I/usr/lib/x86_64-linux-gnu/gtkmm-3.0/include -I/usr/include/atkmm-1.6 -I/usr/include/gtk-3.0/unix-print -I/usr/include/gdkmm-3.0 -I/usr/lib/x86_64-linux-gnu/gdkmm-3.0/include -I/usr/include/giomm-2.4 -I/usr/lib/x86_64-linux-gnu/giomm-2.4/include -I/usr/include/pangomm-1.4 -I/usr/lib/x86_64-linux-gnu/pangomm-1.4/include -I/usr/include/glibmm-2.4 -I/usr/lib/x86_64-linux-gnu/glibmm-2.4/include -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/mirclient -I/usr/include/mircore -I/usr/include/mircookie -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/cairomm-1.0 -I/usr/lib/x86_64-linux-gnu/cairomm-1.0/include -I/usr/include/sigc++-2.0 -I/usr/lib/x86_64-linux-gnu/sigc++-2.0/include -I/usr/include/cairo -I/usr/include/librsvg-2.0 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng12 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -MP -MMD -pthread -Wall -Wshadow -std=c++14 -O3 imp/imp_schematic.cpp -o imp/imp_schematic.o imp/imp_schematic.cpp: In member function ‘void horizon::ImpSchematic::handle_export_pdf()’: imp/imp_schematic.cpp:330:3: error: ‘GtkFileChooserNative’ was not declared in this scope GtkFileChooserNative *native = gtk_file_chooser_native_new ("Save PDF", ^ imp/imp_schematic.cpp:330:25: error: ‘native’ was not declared in this scope GtkFileChooserNative *native = gtk_file_chooser_native_new ("Save PDF", ^ imp/imp_schematic.cpp:334:13: error: ‘gtk_file_chooser_native_new’ was not declared in this scope "_Cancel"); ^ imp/imp_schematic.cpp:344:54: error: ‘GTK_NATIVE_DIALOG’ was not declared in this scope if(gtk_native_dialog_run (GTK_NATIVE_DIALOG (native))==GTK_RESPONSE_ACCEPT) { ^ imp/imp_schematic.cpp:344:55: error: ‘gtk_native_dialog_run’ was not declared in this scope if(gtk_native_dialog_run (GTK_NATIVE_DIALOG (native))==GTK_RESPONSE_ACCEPT) { ^ Makefile:454: recipe for target 'imp/imp_schematic.o' failed make: *** [imp/imp_schematic.o] Error 1

Package editor: Countyard wizzard

When adding pads to the repository, it would be handy to have a wizzard, that automatically creates the countyard for the user.
I'd propose to add an option "Create Countyard" (like "DXF import") that looks for the outer edges of the pad. Then it creates automatically the countyard. Currently the procedure described in the wiki seems to be a quite time intensive task. Maybe one could automate this and save time (and more important reduce human errors!)

Interactive router crashes when board contains polygon pad

If a padstack contains a polygon, the board editor immediately crashes when pressing 'x' with the following message:

tool route track
NODE::create 0x5610426f93c0

!!!sync world
horizon-imp: router/pns_horizon_iface.cpp:475: std::unique_ptr<PNS::SOLID> PNS::PNS_HORIZON_IFACE::syncPad(const horizon::BoardPackage*, const horizon::Pad*): Assertion `poly_union.size()==1' failed.
end proc 1868
exit stat 134

This can be reproduced easily if one pad's padstack in a package is replaced with a polygon-containing padstack. I used polygon-test.json, which has a polygon as a square on the top copper layer.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.