A DeclaraCAD file is a file with a
.enaml extension. When one is created from within DeclaraCAD it will look like this:
# Created in DeclaraCAD
from declaracad.occ.api import *
attr width: float = 10.0
position = (0, 0, 0)
dx = width
This just creates a simple 1 x 1 x 1 cube at the origin as shown below (the color depends on your settings).
The first line,
# Created in DeclaraCAD is a comment. Just like in python everything after a
# is a comment and is ignored.
The second line,
from declaracad.occ.api import * is importing all of the DeclaraCAD declarations available in the declaracad.occ.api module. These are also listed in the
Toolbox tab within DeclaraCAD. The toolbox pane can be expanded to see attributes that can be used.
The next line,
enamldef Assembly(Part): is creating an "enamldef" named
Assembly that extends the
Part declaration. An "enamldef" is analogous to python's "class" and behave similary once defined. The name
Assembly is special in DeclaraCAD. When DeclaraCAD opens a file it looks for the definition named
Assembly and will render it into the viewer whenever the file is saved or run.
In DeclaraCAD every enamldef creates a single shape, with one exception. The
Part is special as it can contain any number of shapes and when rendered will display each subshape (in this case the
attr width: float = 10 is defining a new attribute. Similarly to a variable or attributes can be used for storing values or defining parameters your part can take.
Note: Within an
enamldefblock, enaml uses a lazily evaluated depedency graph. Unlike python, the order of references does not matter as long as there are no dependency loops. In the above example the width attribute could be after the Box node and still work as it looks "up" in the scope.
Box: line is adding a Box (or Cube) into our part at position assigned on the next line. The
mybox after the
Box: is a reference designator that can be used to access that node and any attributes of it similar to any python variable.
That's about it in terms of special things that DeclaraCAD does, the rest is just python and enaml. If you haven't read up on enaml syntax, I suggest doing so as it's used throughout the docs here although it's quite easy to pick up just by looking at examples.
Let's now jump over to OpenCASCADE for a minute.