Giter Site home page Giter Site logo

freecad.gears's Introduction

A Gear module for FreeCAD

Liberapay

Requirements

FreeCAD > v0.16
python > 3 (for python2 use branch py2)

Supported gear-types

Cylindric Involute

  • Shifting
  • Helical
  • Double Helical
  • Undercut
  • Fillets

involute-gear

Involute Rack

involute-rack

Cylindric Cycloid

  • Helical
  • Double Helical
  • Fillets

cycloid-gear

Cycloid Rack

cycloid-rack

Spherical Involute Bevel-Gear

  • Spiral

bevel-gear

Crown-Gear

crown-gear

Worm-Gear

worm-gear

Timing-Gear

timing-gear

Lantern-Gear

lantern-gear


Installation

Addon Manager

Starting from v0.17 it's possible to use the built-in FreeCAD Addon Manager located in the Tools > Addon Manager dropdown menu.

pip

pip install https://github.com/looooo/FCGear/archive/master.tar.gz

Important note: Most systems have multiple versions of python installed. Make sure the pip you're using is used by FreeCAD as well.

Usage

Create a gear manually

  • Open freecad
  • Switch to the gear workbench
  • Create new document
  • Create a gear (click on a gear symbol in the toolbar)
  • Change the gear parameters

Scripted gears

Use the power of python to automate your gear modeling:

import FreeCAD as App
import freecad.gears.commands
gear = freecad.gears.commands.CreateInvoluteGear.create()
gear.teeth = 20
gear.beta = 20
gear.height = 10
gear.double_helix = True
App.ActiveDocument.recompute()
Gui.SendMsgToActiveView("ViewFit")

References

  • Elements of Metric Gear Technology (PDF)

FreeCAD Forum threads

These are forum threads where FreeCAD Gears has been discussed. If you want to give Feedback or report a bug please use the below threads. Please make sure that the report hasn't been reported already by browsing this repositories issue queue.

  • "CONTINUED: involute gear generator preview !" (thread)
  • "Bevel gear - module/script/tutorial" (thread)
  • "Gears in FreeCAD: FC Gear" (thread)
  • "FC Gears: Feedback thread" (thread)

License

GNU General Public License v3.0

freecad.gears's People

Contributors

beartm avatar bevinhex avatar bplrfe avatar chennes avatar hasecilu avatar jbaehr avatar kcleung avatar looooo avatar luzpaz avatar maxwxyz avatar realthunder avatar scottmudge avatar syres916 avatar vedderb 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

freecad.gears's Issues

part not updated after parameters are modified

Hi Lorenz,
I have just installed your addon in the very latest version of freecad. I can create cogwheels, but whenever I change any of the parameters, the part is not updated. The only way of making it work is, if I insert a new cogwheel. I don't know if this behaviour is intentional (I don't believe). If not, could you, please, point out, where I have to hack the code to fix this issue? I would really like to have a somewhat prompter visual feedback.
Thanks,
Zoltán

[feature request] improved bevel gears

Although there is already bevel gears in the workbench I'm not sure if this is the ideal way to make them. As far as I can see the bevel gear now are lofted/extruded spur gears at an angle. However, I think the involute profile should be extruded along the contact axis of two gears.

                               

I would also argue that gears, in general, should be designed in pairs. It would be great if we could design gearboxes comprising of two and more gears (e.g., a differential joint). (I will make another feature request for this)

There are apparantly two different systems for bevel gears the Standard and Gleason each with their own formulas (e.g., this reference).

                               

and the parameters for fully defining bevel gears seem to be much more. The refrence I mentioned above considers ∑ (shaft angle) , m (Module), 𝛼 (Reference pressure angle), z (Number of teeth). But it should possible to select any 4 subsets of all the parameters and then calculate the rest from them (this should be a different ticket as well).

import FreeCad does not work

In [1]: import freecad                                                                                                                                                                        

In [2]: import freecad.gears.commands                                                                                                                                                         
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-2-54e84a25927f> in <module>
----> 1 import freecad.gears.commands

/usr/lib/python3.7/site-packages/freecad/gears/commands.py in <module>
     20 
     21 import os
---> 22 import FreeCAD
     23 import FreeCADGui as Gui
     24 from .features import ViewProviderGear, involute_gear, involute_gear_rack

ModuleNotFoundError: No module named 'FreeCAD'

In [3]: import FreeCad                                                                                                                                                                        
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-3-c1a683455da9> in <module>
----> 1 import FreeCad

ModuleNotFoundError: No module named 'FreeCad'

internal gear

It would be great to be able to create internal gear (involute or cycloid teeth), as this would allow the creation of a planetary gear train (by a different function).

I guess it would be great for a piece of gear, it can have two set of gear data, namely internal and external. The one which is not used can be set to null.

Apart from allowing the possibility of creating a planetary gear assembly, the internal gear function can also allow a gear to slide on a toothed axle:

toothed axle - involute external gear with very high height,

gear has internal gear to allow it to drive the axle while sliding along the axle, and external gear for the actual interfacing with other gears.

Getting Shape objects directly

How about making a way to get gears as Shapes without all that FeaturePython complexity?

Something like

def make_gear(teeth: int, module: float, ....) -> Shape:
    # most of the current InvoluteGear.execute goes here

    shape.dw = ... # can't think of a nice way of returning gear properties, maybe subclass Shape
    return shape

This should make it much easier to use the library from python code (less boilerplate code, type hints, etc.).

Larger tooth count on involute gears causes loss of detail on teeth?

I'm trying to set up a couple simple involute gears, but for whatever reason on high "tooth" counts the model drops to a lower accuracy:
image

FreeCAD details:
OS: Linux Mint 18.3 Sylvia Word size of OS: 64-bit Word size of FreeCAD: 64-bit Version: 0.18.15263 (Git) Build type: Release Branch: master Hash: 7ceac311b3c5dc1b89e85b15b310ddd1d1673561 Python version: 2.7.12 Qt version: 4.8.7 Coin version: 4.0.0a OCC version: 7.3.0 Locale: English/UnitedStates (en_US)

Smaller gears, around 30 teeth, work fine. What gives?

FCGear fails to act on axis information

When I create an involute gear, the axis starts off as [0.0, 0.0, 1.0]

However, after I change it to something else, such as [1.0, 0.0, 0.0], FCGear fails to update the axis of the gear.

Internal/ring gears?

Not sure this is the place to put questions, but...

Is it possible to generate internal ring gears for planetary gear systems?

I can generated them with other software, and if the maths is right they should work(!) - but it would be neat to do it all in the place.

Failure to show in menu's in FreeCAD 0.18.0

Debian install (thus not latest).
FreeCAD 0.18.0 version (see above).
A pastebin link of FreeCAD.log
FCgears does not appear in the workbench list but the Addon Manager states its installed.
The only signs are Init.py and InitGui.py are both missing from .FreeCAD/Mod/FCgear (which is ignored).
I tried freenode #freecad but .. anyhow since the last issue closed, another added to that issue 3 days ago they couldn't get "gears" in the menu. I've reinstalled numerous times with the same results.
For some reason I get " Something went really wrong, and we can’t process that file. " when I attempt to attach an image of the menu missing 'the gear'.

[SOLVED] Impossible to install/access to FCGear Workbench

Hello I'm using FreeCad 0.18~pre1+dfsg1-5
FreeCAD 0.18, Libs: 0.18R
On debian 10

I install FCGear workbench from addon manager.
After restarting FreeCad no Gears workbench apears ;(

I cheched in~/.freecad/Mod I've a directory FCGears full
No error message at startup
in log grep FCGear I found
Log: Init: Initializing /home/x/.FreeCAD/Mod/FCGear(Init.py not found)... ignore Log: /home/x/.FreeCAD/Mod/FCGear Log: Init: Initializing /home/x/.FreeCAD/Mod/FCGear(InitGui.py not found)... ignore
I feel install just did'nt work properly

Unable to install on FreeCad 0.18

I cannot find freecad.gears on Addon Manager, I tried using PIP to install which seemed to complete successfully, but after running FreeCad and going into Part Design; I am unable to find the newly installed Gear tool. Any advice please?

Crown gear wrong if "construct=true"

If I create a crown gear with "construct=true", which appears to be the default, it looks like a boolean operation is missing. I get a zylindric ring and objects which should be subtracted from the ring to create the gear. This happens also to the default crown gear created when clicking on the crown gear button in FreeCAD 0.18.4.

If I set "construct=false", the gear looks fine.

Thanks for this great tool!

FreeCAD version:

OS: Windows 10
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.18.4 (GitTag)
Build type: Release
Branch: releases/FreeCAD-0-18
Hash: 980bf9060e28555fecd9e3462f68ca74007b70f8
Python version: 3.6.6
Qt version: 5.6.2
Coin version: 4.0.0a
OCC version: 7.3.0
Locale: English/Germany (en_DE)

FCGear version: installed today with "Addon Manager".

Involute gear thooth profile for use with worm gear

Hi, I have just downloaded this very useful gears mod. I have two issues I can't solve.

  1. How do I alter the tooth profile to cater for spur gears driven by a worm drive?
  2. How do calculate the distance between centres of the worm gear and spur gear for them to mesh properly?

[feature request] Migrating FCgear and the future FCgearbox to assembly4

Given the development of the assembly4 addon, which adds assembly support to FreeCAD in a low cost way, it will make sense to migrate FCgear and the future FCgearbox to use assembly4.

I guess Assembly4 will also facilitate our implemetation of FCgearbox.

Is it a good time to make a fork, where FCgear and FCgearbox will be implemented as assembly?

This fork will depend on Assembly4.

gear train (or gearbox module)

It would be great if we can have a gear train / gearbox module, where users can quickly specify:

*the number of gear axles

  • for each axle, number of gear on that axle, and whether the gear is fixed on the axle, slide on the axle on groove, or freely rotating on the axle on a bearing
  • distance between each axle

This would allow a gearbox or at least a gear train to be created very quickly.

Freecad 0.18 FC gear installed App but no icon in the work bench

Hello
is there somwhere to help me ? I work with an old computer ( 32 bit sony) .
there is win 10 running with freecad 018 build 4( Git Tag)

lots of Add ons are working ( assembly 4 / 2 ,A2Plus)
if i install FCGear my machine tells me i installed sucsesfully but i do not have any Icon in my workbench

Undercut fails due to wroung (outdated?) calls in numpy calls

If the "undercut" is selected for an involute gear and the number of teeth is somewhat greater than 20, then the calculations will call the nearestpts() function in involute_tooth.py, line 109. That function is defined in _functiony.py. It uses the norm() command from numpy.linalg. However, the expected arguments of that numpy function are not identical with the code in _functiony.py which causes an error.

The conflict can be solved by changing the following lines of _functions.py

151: l = norm(i, j)
153: re = norm(i, [0, 0])
154: ru = norm(j, [0, 0])

to

151: l = norm(i - j)
153: re = norm(i)
154: ru = norm(j)

After this modification, the undercut works for any number of teeth.

Screenshots and more elaborate description

Hey @looooo thanks for your work on this addon! I'm volunteering to help improve the addon manager.
Would you mind:

  • adding some screenshots to the README
  • improving the description of this addon
  • tagging this repo with the 'freecad' tag
  • offering a FreeCAD forum link for folks to ask/discuss issues related to this addon

Unable to create an Involute Rack

Hi,

I'm using FreeCAD 0.19 on Manjaro-Gnome with Python 3.8.2 installed.

I installed the Gear workbench using the add-on manager. Everything seems to work properly, except the creation of a rack.

I've got this message in the console:

Traceback (most recent call last):
  File "/home/antoine/.FreeCAD/Mod/FCGear/freecad/gears/features.py", line 249, in execute
    pts = fp.rack.points()
  File "/home/antoine/.FreeCAD/Mod/FCGear/pygears/involute_tooth.py", line 219, in points
    teeth = [ext1.tolist(), ext1.tolist()] + teeth + [ext2.tolist(), ext2.tolist()]
<class 'ValueError'>: operands could not be broadcast together with shapes (2,2) (60,2) 
8.94e-07 <App> Document.cpp(3715): Failed to recompute gears_00#InvoluteRack: operands could not be broadcast together with shapes (2,2) (60,2) 
Recompute failed! Please check report view.

Any idea on what to do?

2D gears

Is it possible to get a 2D gear with no face width? I want to mesh it in my python IDE...

Best regards
Carlos

Errors/Corrections of the Undercut Option

First of all: FCGear is a great workbench!
However, I think the undercut option needs corrections.

As reported in #55, it creates "artefacts" when creating involute gears with a higher number of gears, i.e. the end point of the untercut spline does not match the endpoint of the involute curve. One could argue that you do not need undercuts when using high-number-of-teeth-gears, but in practical applications this is not really true. The situation can be improved by increasing numpoints, but the result is never perfect. This leads to problems if one tries to chamfer the top of bottom of a gear as the the overall path is not closed.

Furthermore, the undercut seems to be non-perfect anyway: Even with the standard 15 teeth gear, the foot radius of the gear is not identical in the versions with undercut and without undercut.

The standard undercuts should be

  • either to quarter circles starting from the involute and ending in the foot radius
  • or half a circle from involute to involute touching the foot radius.

The current solution looks more like an ellipse than circle segments.
I would really appreciate an improvement here!

image

Crown gear not working

Hi, I've generated a crown gear using the FCgear add-on but the pieces that need to cut the main ring don't do it.
I'm running on windows 10 and the latest stable Freecad version as of 9/12/2020.
Screenshot (10)

Rack wrong dedendum

Hi,
I'm new here (and in FreeCAD too :-) ). I'm using FCGear because I need to create a Rack.
I have test FCGear but I found a problem:
In my sample I have try to creatre a rack 24x24 Module 2 but after I have create it I found that the teeth are wrong in fact the teeth addendum and the teeth dedendum are always equal (in my example was alway 2 but the correct is Addendum = 2 and dedendum = 2,5).
How I can solve this important topic ?
Can you please add the possibility to indicate this two paramenters ? It could be useful also in case of teeth modification.
Thank you for your precious work !

Install instructions are wrong! Done for a macro, not a workbench.

Haven't used the software yet - found the built in gears thing were too precise for 3d printing :(

But just installed it in the freecad - mod folder (with other workbenches) and it is showing up -- but the instructions here seem to be for installing a macro...

Cheers!!

Automatic gear alignment tool in WB

Hopefully at some stage aligning two parts can be automated: select two gears ( or rack+gear ) ; click on an icon and they snap into mesh with each other. That would be pretty cool. Setting the perpendicular distance to the gear radius ( or sum of radii in the case of 2 gears would be pretty simple to code ). Then adjust the rotation to this line to set the teeth.

Doesn't show up in workbench menu

Using Arch Linux and FreeCAD 0.16. Did this:

$ cd ~/.FreeCAD
$ git clone https://github.com/looooo/FCGear.git
$ ln -s '/home/user/.FreeCAD/FCGear' /usr/lib/freecad/Mod
$ ln -s '/home/user/.FreeCAD/FCGear' /usr/share/freecad/Mod
$ rm *.cfg

$ ls -alh /usr/lib/freecad/Mod/
total 4.0K
drwxr-xr-x 1 root root  346 Oct  7 22:14 .
drwxr-xr-x 1 root root   18 Apr  2  2017 ..
drwxr-xr-x 1 root root  844 Sep 21 16:07 Arch
drwxr-xr-x 1 root root   34 Sep 21 16:07 Complete
drwxr-xr-x 1 root root  430 Sep 21 16:07 Draft
drwxr-xr-x 1 root root  164 Sep 21 16:07 Drawing
lrwxrwxrwx 1 root root   27 Oct  7 22:14 FCGear -> /home/user/.FreeCAD/FCGear
drwxr-xr-x 1 root root 2.1K Sep 21 16:07 Fem
...

It just doesn't show up in workbench menu:
It just doesn't show up in workbench menu

Undercut option creates artifacts w/ high teeth count and high numpoint precision

Creating a 150 teeth module 2 involute gear showed strange errors when I imported the STEP file into other CAD systems.
On further inspection I saw strange "spikes" in the model:

zoomout
zoomin

They only occur when using high numpoint precision (above 10) and high teeth count. Those are not sane settings someone would use. Just wanted to let you know!

rotatateZ is not working as expected

image
as shown in the image, there is a rotateZ(np.pi/n) , for unknown reason when I input 42 as teeth number it is fine, but 41 is not rotating at all without giving any error
@looooo have any idea?

Version mismatch

Hi,
I recently updated to the newest version of GEARs workbench and got the following issue:
If I open an file containing gears made with an older version (the one without the crown gear icon, I missed the exact version number) than I can not change the teeth count of a previous made gear. I got an red exclamation mark and a python error (something with helical object not there or so, sorry for the unexact description but I installed the prevouis version again and do not want to switch again). Obviously the new version of the GEARS-WB has different number of parameters and the old files can not be changed anymore. You should take in account to check that in the new version. Otherwise older files containig gears can not be modified anymore.
Regards
Stefan

Crown Gear, objects not cut out

Hello Guys,
i have tried your Mod (really great work :)) and i think i have found an error.
When i build a Crown gear than the "negative teeths" are not cut out.
(Die Negativzähne wurden aus dem Zahnkranz nicht ausgeschnitten)

When i change line 329 to:
if not fp.construct:
it is working.
Can you please check it?

It was the first and is the only Mod on my newly installed FreeCAD 0.17 13528

Kind regards
4styler

double helix

Thank you very much for setting up the FCGear module. At the moment, it has the InvoluteGear, rack, cycloide hear and bevel gear.

At the moment, teeth are limited to spur option, yet a lot of gears we see are single and double helical.

It would be great if we can add these two parameters to allow creation of helical gears / racks:

number of helix (1 or 2) - if 2, then double helix with opposite angles
angle of tooth (if between 0 to 90, then it is helical)

Unable to import a rack into assembly2

I start a new document, create a rack, select it and create a body, do a sketch to pocket couple of holes, saved it, all fine.

But when I get into assembly2, importing the rack always results in the rack (base geometry) being visible, no matter if it's saved as not, if it's saved as non-selectable, or if it's fully transparent.

Assembly2 stops complaining about only one visible part per document, and the involute rack always appears as visible.

EDIT: if the file is open (I used the one assembly2 leaves after complaining) and visibility is toggled manually, then hitting import again will use that open file over the one stored on disk.

Thanks,

Worm Gears

Hi,

Firstly I want to thank you for the gear workbench which I have been finding very useful.

My issue has to do with trying to create a worm gear.
For which I get funny edges
worm_issue

Allouth not catastrophic, these edges make 3D printing the worm gear rather messy.

Workbench failure: something is wrong with the numpy installation

My environment is

  • OS: Windows 10
  • Word size of OS: 64-bit
  • Word size of FreeCAD: 64-bit
  • Version: 0.18.16131 (Git)
  • Build type: Release
  • Branch: releases/FreeCAD-0-18
  • Hash: 3129ae4296e40ed20e7b3d460b86e6969acbe1c3
  • Python version: 3.6.6
  • Qt version: 5.6.2
  • Coin version: 4.0.0a
  • OCC version: 7.3.0
  • Locale: English/UnitedStates (en_US)

and I have installed the package through Addon manager, I which it seems to just pull from this repository and copy into the addons folder.

However, when I try to run the workbench I get this error:

                

Workbench failure

Somthing is wrong with the numpy instalation. While importing we detected an old version of numpy in['C:\FreeCAD 0.18\bin\lib\site-packages\numpy']. One method of fixing this is to repeatedly uninstall numpy until none is found, then reinstall this version.

Problem with module in helical rack

I am completely new to FreeCAD and other CAD. In a project to re-create a helical rack by 3D printing, I measured the distance between 3 teeth of a rack and get a value of 4 mm.

So I calculate the module by this formula (4 mm / 3 / pi).

However, the distance between 3 teeth generated by FCgear workbench is 4.26 mm.

image

I noticed that the distance between 3 teeth is 4 mm in a spur rack (beta set to 0).

image

Did I missed out something?

Your help is much appreciated.

Best regards.

KC

Cannot create 3d offset of second cam disk of hypocycloid gear

First generate one hypocycloidgear, then set show pins and show_disk0 to false, now switch to part workbench, click 3d offset, it gives saying BRepOffsetAPI_MakeOffsetShape not done.
I tried to figure it out with code, can't see what could be causing it.
@looooo can you help debugging it? Thank you.

Bevel gears wrong angle?

Hello,
i was playing around with Gear-WB and it seems that the angle of bevel gears is incorrect. I created to identical bevel gears with following params:
image

If i place them together with 90° degree, the angle of the teeth is not matching:
image

[feature request] gear box

I don't think that gears ever exist in solitude in any mechanism. We usually use gears in pairs of two or more to exchange torque and speed or change direction. Right now we have to create different gears separately and place them manually, which is not only very difficult but very error-prone. So it would make sense to have the option to design gearboxes in one run. For example, the workflow would be

  • select the number of connections representing every meshing. for example, a gearbox of 3 gears has two connections. IT could also be considered if the gears will be in paralel ( e.g, differential joint, planetary gear, cycloidal drive) or in series.
  • select the type of each connection
    • parallel axis (distance, gear ratio) --> two spur or helical gears
    • intersecting (angle, gear ratio) --> bevel / cone gears
    • skew axes (angle, distance, gear ratio)
  • select the set controlling parameters. for example for spur gears {m, 𝛼, w}, or {p, 𝛼, w}, or {CP, 𝛼, w} (where w is the width, p is the reference pitch, 𝛼 is the pressure angle, and CP is the circular pitch using the nomenclature of this reference).

Rack Lenght

Dear Lorenz,
Unfortunately I have found another small issue that I hope is very easy for you to solve.
The issue is regarding the total lenght of the rack, on the attached pictures you can see I have defined a rack 29x29 Module 3 with 100 teeth helical teeth 19,528333 Deg. Angle that mean a transversal Module 3,18310 that correspond to pitch 10,0000mm
With the mentioned data the theorical lenght of the result rack it will be 1000mm (we assume that both heads start exactly with half teeth gap).
Unfortunately the result lenght of the rack is 997,898mm, it seems because the rack do not start end end in the middle of teeth gap.
Do you think there is the possibility to solve this issue easely ?
Thank You !
Annotazione 2020-02-05 082630
Annotazione 2020-02-05 082720

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.