Firstly, I have to explain that my editor consists of 2 interfaces : script (setting up nodes) and visual interface (changing node's transform only). It means, in your script, you have to mark the nodes which you want to edit visually. Next, during runtime, if you enable edit session, you would be able to change their transform visually.






I already included a World class which implements this. You could open to see the entire details.


1. You have to create only 1 instance of AutoSaveAspect2d class.

In, I simply put the instance (A2Ded) in builtins dictionary, so it can be used by any class you have.


# start AutoSaveAspect2d up, load previously saved dictionary

# from file : "" (ASCII) or "project_A2D.bin" (binary).

# If you don't want to enable edit session,

# set enableEditSession = False

__builtins__.A2Ded = AutoSaveAspect2d(



loadASCII=1, saveBinaryToo=1,

enableEditSession=True )


The arguments are :

It's the filename (without extension) to save the transform setting of the nodes.

It's the button key to start edit session. You could change it if you need that key for something else.

It means to load the setting from the ASCII file, rather than the binary one. If the ASCII file not found, it would try to load the binary one, and if both not found, it uses the transform as it is (from script only). Set this argument to 0 to load the binary one.

By default, the transform setting always stored as ASCII file. If this argument is set to 1, the transform setting also stored as binary file.

If set to 0 or False, you wouldn't be able to start edit session.


2. Once you want to save your node's transform, call : yourNodePath, hardcoded_ID )


The arguments are :


The NodePath you wish to edit visually.


It's a unique everlasting identification number or string, which is used to mark the node. It acts as a link between the node and the saved transform in file. I just don't want to use the node's name, since there could be multiple nodes having the same name, and I'd like to use node's name for more general purposes. In fact, that ID is used as tag on the node.

Any children node under yourNodePath, if is not tagged already, will be tagged according to its parent's tag.

Example : if the parent is tagged with "1234" number, the not-tagged children will be tagged with "1234-#", which # means child's index. It will be "1234-0", "1234-1", "1234-2", and so on.

WARNING : if there are several nodes having the same ID, they would share the same transform. It's your own responsibility to avoid that.

Additional arguments :

The default is 1 (True), which means to use the saved transform in file. Set it to 0 to use the transform from script only.

The default behaviour is recursive, so you should use this argument only if you don't want yourNodePath's child(ren) to be editable.

You could pass :

  1 (True) : if you want to exclude all yourNodePath's children, or

  the children's index list : only children with those index are excluded (pack the index in a list).

Example in is Dialog3 :,87546,excludeChildren=1) # don't save buttons' transform













To enter Edit Session, press the passed enterEditSessionKey when creating AutoSaveAspect2d instance, the default is F5.


Edit session started with some preparation process, which may takes 1 second or 2. Once completed, you would see something like this :



indicating that you can start changing the transform of previously marked nodes visually.


Press F1 to read the main help.




What you just saw is the Select Mode. In this mode, you could select which node you want to edit, just by pointing your mouse on the node. Then, the node would be highlighted (changing color to red) and the bounding box would be drawn (the cycling dashed-line box), also itself and its parents would be displayed on a selectable list. On the list, the red-highlighted button is the currently selected node. The selected node's relative position (to render2d) is displayed on the screen edges.



You can select one of the parent node in the list by clicking the button, or using keyboard :


Alternatively, you could use the Aspect2dSceneGraph tree, press CapsLock to toggle. The hover-on-node select is disabled when you're using it. The non-editable nodes are grayed.



You still able to use keyboard keys to select node/parent. To scroll the window, drag the white thumb bar on the left, or use Ctrl-MouseWheel.





Once you have selected the desired node, you can start editing them in Edit Mode. To enter Edit Mode, press SPACE, or click the highlighted button on the list. Once in the Edit Mode, the node's highlight changes from red to green. The node's origin is represented by the intersection of the yellow-black lines. There is additional help for Edit Mode, displayed following the mouse cursor, press H to toggle.


Currently, the editable node's transform are only translation and scale.



To drag the node around, use LeftMouseButton.

To scale it, use Ctrl-LeftMouseButton.

Once you're satisfied with the transform, you can keep it by pressing SPACE, or discard it by pressing ESCAPE. Both would bring you back to Select Mode.



There are several snap targets available :







Other Node's

Edited Node's

On snap


Other-type node origin


GeomNode origin


GeomNode bounding box corner


GeomNode bounding box mid-point


Other-type node bounding box corner


Other-type node bounding box mid-point



You can snap to these markers both for dragging and scaling.

For all snapped target during Edit Mode, there are also extension lines and point-marker (to distinguish which target has extension lines). The extension lines extend from the snap point to 2 directions, horisontal & vertical, displayed only when your "dropping-point" is close to them. It's the black and white dashed line.

If the "dropping-point" is close to the intersection of 2 extension lines, it would be snapped to the intersection point, which would be marked with red cross.


The rules :

Example (dragging) :


Example (dragging) :


Example (scaling) :

(For scaling, if you snap to node's corner or mid-point marker, the scale anchor would be automatically set on the opposite snap target. Don't be confused with the corner & mid-point markers of the node's children, since once you press Ctrl, all snap markers of the node's children would be temporarily hidden, and re-drawed once you release Ctrl.)


Example (scaling & snap to grid) :


You also able to enable/disable snap target's extension lines by clicking inside the marker, using RightMouseButton.




There is other way in editing the node's transform, which is by typing the transform numbers directly. You can do this using Properties Panel, press ~ (tilde) to toggle.


You could input the numbers as you like. The input box (customized DirectEntry) has value validity-check, so if your input is invalid (in this case e.g. a string), an "INVALID" notification text would be displayed, as well as the expected value-type reminder.

You can cancel the input by pressing ESCAPE.


You also able to copy & paste the transform to other node. The copy process copies the whole transform, while the paste process uses the XYZ filters. Only the checked filters transform would be overriden. You could use the COPY & PASTE button on the panel, as well as Ctrl-C and Ctrl-V.


Properties Panel is available both in Select Mode and Edit Mode, so transferring the transform is this easy :