← Back to team overview

kicad-developers team mailing list archive

Re: future developments: shared libraries and dynamic plugins

 

Hi Cirilo and Stefano,

Altium 3D viewer is more interactive than kicad 3d-viewer...
It has the ability to move the 3D models directly in the viewer and can check a enclosure clearance or even collisions dinamically...

But you can have some similar features also in kicad if you e.g. import your enclosure in 3d-viewer and place it beside the pcb... here an example of the board with assemblies with and without the enclosure visible in 3D
https://lists.launchpad.net/kicad-developers/pngmiJa_et4ei.png
https://lists.launchpad.net/kicad-developers/pngBxSJOlsdSm.png

Mario Luzeiro (which is a (co)author of the 3d-viewer) told me that probably in the next 3d-viewer it will be possible to turn ON and OFF some modules (e.g. mechanical parts or enclosures) to let the designing process easier, in a way that at the moment I do in my build of kicad pcbnew with 'virtual models'

to do an ECAD MCAD collaboration with an accurate representation in kicad VRML 3d-viewer, you may need to generate your VRML models from STEP or 3D mechanical models e.g. through FreeCAD

Moreover you can do a bidirectional collaboration with the ECAD sw (kicad) and the MCAD environment (e.g. FreeCAD or whatevar MCAD you have) through my kicad StepUp script
http://sourceforge.net/projects/kicadstepup/

If you export the kicad pcb in IDF through Cirilo routines (already available with the RC 'stable' release) and launch the script, you can obtain a 3D model of pcb and assemblies to be used in MCAD sw for a more precise enclosure clearance and collisions check.

here an example of board and assemblies exported by the script to MCAD for mechanical enclosure design
http://www.eevblog.com/forum/open-source-kicad-geda/kicad-photo-realistic-3d-rendering/?action=dlattach;attach=175778;image

If you are interested, I have also done a library of 3D parametric models to be used for a real 'WYSIWYG' designing process...

Please feel free too contact me if you need more information about the script

Maurice

On 29/10/2015 20.53, Cirilo Bernardo wrote:


On Thu, Oct 29, 2015 at 10:56 PM, Stefano Rossi
<chimera.stefano@xxxxxxxxx <mailto:chimera.stefano@xxxxxxxxx>> wrote:

    Cirilo,

    That sounds great. IMHO this goes along hand in hand with CERN's
    wishes of making the different parts of kicad loadable libraries
    such as eeschema and pcbnew.

    I don't really have much programming experience to recommend an
    approach, but studying what already exists could help. Altium has
    had for as long as I can remember Importer/Exporter plugins that add
    to cost of package.

    I wonder how they pass data around. Maybe they defined a common
    structure for data. Raw data is passes over to the plugins and the
    plugins open export dialog options.

    One example that comes to mind is the hyperlynx export and the step
    export of boards. Same File - Export but brings up different dialogs
    for export features.

    A question about the 3D viewer comes up and that is, how interactive
    is it? As in how many hoops would a designer go through switching
    between 2D and 3D. Can having a detached 3D viewer allow for future
    features such as enclosure clearance DRC?

I don't foresee any changes in 2D/3D views - the pcb layout will always
be 2D and if you want
to see 3D you run the 3D viewer. The only thing planned which is
different is a 3D preview while
browsing 3D model files.

KiCad will never have a tool for checking enclosure clearance or even
for checking
for collisions of board components (drill hole too small for THT pin
etc); that is the
responsibility of the Geometry Kernel of an MCAD.

- Cirilo

    Making parts of Kicad pluggable is the best idea ever. It let's core
    development team stay in focus while plugins for a myriad of
    different formats left to other people, maybe even have commercial
    plugins.

    On Oct 29, 2015 04:29, "Cirilo Bernardo" <cirilo.bernardo@xxxxxxxxx
    <mailto:cirilo.bernardo@xxxxxxxxx>> wrote:

        Work so far on my part of the 3D refactor has resulted in the
        development of a
        dynamic plugin scheme which has been shown to work on Linux,
        OSX, and
        MSWin. Although no plugins are currently implemented which
        provide an actual
        useful function I think the improvements provided by the 3D
        model filename
        resolver would be worth merging into the main branch soon after
        the release
        since they finally resolve many longstanding issues with 3D
        model loading
        and selection - but that's a topic for debate at a later date.

        WARNING: this is a long email but it is a genuine technical
        document with
        the fundamental ideas already implemented and tested, it is not some
        philosophical document about wild unimplementable ideas.

        What I would like to present here are some ideas for the
        implementation of
        dynamic plugins within KiCad to improve code maintainability and
        provide
        an easy means of extending KiCad's features. For example, at the
        moment
        if I wish to implement an Export function in pcbnew (such as
        VRML export,
        IDF export, or the IGES export that I'm itching to get into
        KiCad) I need to
        touch numerous files, add a static menu item to File->Exporter,
        extend the
        PCB_BASE_FRAME interface, etc then recompile *all* of pcbnew since I
        touched PCB_BASE_FRAME which is a fundamental class which affects
        so many other classes. With a dynamic plugin system we would be
        able to
        compile an exporter out-of-tree if necessary and the Export item
        would be
        dynamically added to File->Export. There would be no need to
        make invasive
        modifications/extensions to PCB_BASE_FRAME just to service one more
        Export function (all Export items will be passed by
        PCB_BASE_FRAME to
        an Export Manager which is responsible for loading the
        appropriate plugin etc).
        One fantastic thing here is that there is no need to recompile
        all of pcbnew,
        which is a desirable effect especially as an Export Plugin is
        being developed
        and debugged.

        One item to consider is the use of dynamic libraries within
        KiCad; at the
        moment all KiCad source is statically linked although we do dynamic
        linking to external libraries like wxWidgets. I would like to
        know if there is
        any fundamental opposition to parts of kicad being linked to as
        shared objects instead. The reason for this is that shared
        objects may
        make it much easier to link KiCad and dynamic plugins to code
        modules
        which may be required by various tools within kicad.

        Anyway, on to the lengthy details which I want people to think
        about and
        comment on:

        In a typical implementation a dynamic plugin will provide a
        simple interface to
        provide KiCad with a list of functions which can be invoked to
        provide the
        desired feature. For example the 3D plugins provide a function
        to list the
        file types supported by the plugin, the associated filters
        required for browsing
        files, and a Load() function to process a 3D file and return a
        data structure
        which KiCad can use in the 3D rendering process. The set of
        functions provided
        by a plugin shall be referred to here as the Plugin Interface.
        Every plugin
        must be a derived class of at least one type of abstract plugin
        declared in the
        header files. All implementations of a plugin interface
        constitute an actual plugin;
        the various KiCad tools such as pcbnew and eeschema contain no
        actual
        implementation of the plugin interfaces.

        Plugins also need to interact with KiCad and its internal data
        while knowing
        essentially nothing of the complex structures within KiCad. To
        make this possible
        each type of dynamic plugin must interact with at least one type
        of API which
        provides functions to create, inspect, and manipulate the
        complex data structures
        within KiCad. These APIs shall be declared in an api
        subdirectory and must be
        implemented within each KiCad tool which services the related
        plugin type. For
        example the 3D plugins must produce the intermediate scene graph
        data for use
        by the 3D renderer; to accomplish this an API is required to
        provide each 3D
        plugin with a method for creating the data structures required
        by pcbnew and
        cvpcb. In the implementation detail the API may be implemented
        once in the common
        static library of pcbnew or it can be implemented as a runtime
        shared library
        which can then be linked to by pcbnew. cvpcb, or even eeschema.

        Plugin specialization: To keep APIs and plugin interfaces as
        simple as possible
        it is necessary for plugins to be specialized (have different
        types). While it
        is possible to define only one plugin interface and one API for
        any and all
        plugins to use, this would result in a very large API which is
        difficult to
        maintain. Having specialized plugins and APIs ensures better
        maintainability
        of the code; a specific plugin may implement multiple plugin
        interfaces or
        interact with multiple APIs if it makes sense to do so. At least
        two plugin
        interfaces have been identified for implementation at this
        point: the 3D
        Plugin Interface and the PCBExport interface. The 3D Plugin
        Interface shall
        provide a method for processing supported 3D model types and
        returning an
        intermediate scene graph representation which a renderer can use
        to create a
        visual representation of the model. The PCBExport interface
        shall provide a
        means of exporting PCB data to a variety of formats such as
        Specctra DSN for
        the consumption of autorouters, GenCAD, VRML for visualization
        of the board
        using external tools, and IDF and IGES for interacting with
        mechanical designers
        and MCAD software. Other exporters such as netlist exporters or
        even BoM
        exporters should be possible. A PCBImport Interface is also a
        possibility but
        is currently a low priority item since there are currently only
        two import
        functions implemented (Specctra result import and DXF import)
        and a significant
        amount of work is required to implement the PCBImport API.

        Plugin management: Since plugins are specialized, each type
        should also be
        loaded and managed by a specialized plugin manager which has
        responsibilities
        for ensuring integration of the plugin with KiCad.  For example the
        3d_plugin_manager searches a list of paths to identify and load
        plugins which
        implement the 3D Plugin Interface. The 3D manager extracts
        information from
        each 3D plugin such as the types of 3D formats supported and the
        associated
        file extensions; the manager also responds to a Load() request
        by activating
        the appropriate 3D plugin and executing that plugin's Load()
        function. In the
        case of the Export Plugin Interface, a specific exporter would
        enumerate the
        plugins, add a menu item to the File->Export list, load and
        invoke a plugin's
        Export() function at the user's request, and unload the plugin
        when the
        Export() function completes.

        - Cirilo


        _______________________________________________
        Mailing list: https://launchpad.net/~kicad-developers
        Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
        <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
        Unsubscribe : https://launchpad.net/~kicad-developers
        More help   : https://help.launchpad.net/ListHelp




_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp

Attachment: hackrf-one-3D-MCAD-collaboration.png
Description: PNG image


Follow ups

References