[X3D-Ecosystem] Loading into X3DPSAIL (for Maya and Blender)
John Carlson
yottzumm at gmail.com
Tue Jan 27 11:52:17 PST 2026
To export all vertex groups and their associated data (vertex indices and
weights) to XML in Blender (2026), you can iterate through an object's
vertex_groups and its mesh vertices.
Blender Python XML Export for Vertex Groups
The following script creates a standalone XML file that lists every vertex
group for the selected object, including the weight for every vertex
assigned to each group.
python
import bpyimport xml.etree.ElementTree as ET
def export_vertex_groups_xml(filepath):
# Create XML root
root = ET.Element("BlenderVertexGroupExport", date="2026-01-27")
# Target the active mesh object
obj = bpy.context.active_object
if not obj or obj.type != 'MESH':
print("Please select a Mesh object.")
return
obj_node = ET.SubElement(root, "Object", name=obj.name)
groups_node = ET.SubElement(obj_node, "VertexGroups")
# 1. Map group indices to names for easier lookup
group_map = {g.index: g.name for g in obj.vertex_groups}
# 2. Iterate through all vertices in the mesh
# Each vertex has a 'groups' collection of VertexGroupElements
for v in obj.data.vertices:
for g_element in v.groups:
group_name = group_map.get(g_element.group, "Unknown")
# Find or create the specific Group node in XML
group_node = groups_node.find(f"./Group[@name='{group_name}']")
if group_node is None:
group_node = ET.SubElement(groups_node, "Group", {
"name": group_name,
"index": str(g_element.group)
})
# Add the vertex index and its weight (0.0 to 1.0)
ET.SubElement(group_node, "Vertex", {
"id": str(v.index),
"weight": f"{g_element.weight:.4f}"
})
# Save to file
tree = ET.ElementTree(root)
ET.indent(tree, space=" ")
tree.write(filepath, encoding="utf-8", xml_declaration=True)
print(f"Vertex groups exported to: {filepath}")
# Usage: Update path as needed
export_vertex_groups_xml("C:/path/to/vertex_groups.xml")
On Tue, Jan 27, 2026 at 1:38 PM John Carlson <yottzumm at gmail.com> wrote:
> Note, W index is 0 in quaternions. Could be critical!
>
>
> John
>
> To export Non-Linear Animation (NLA) with detailed
> *X, Y, Z coordinates* (and other channels) as XML in Blender (2026), you
> must iterate through the fcurves of each action linked to an NLA strip.
> In Blender
> <https://blenderartists.org/t/list-all-keyframes-of-an-action/632353>,
> transform data is stored in fcurves. Each curve has a data_path(e.g.,
> "location") and an array_index (0 for X, 1 for Y, 2 for Z).
> XML Export Script with Keyframe Data
> This script iterates through all objects, their NLA tracks, and every
> individual keyframe point within those tracks.
> python
>
> import bpyimport xml.etree.ElementTree as ET
> def export_nla_detailed_xml(filepath):
> root = ET.Element("BlenderNLAExport", date="2026-01-27")
>
> for obj in bpy.context.scene.objects:
> if not (obj.animation_data and obj.animation_data.nla_tracks):
> continue
>
> obj_node = ET.SubElement(root, "Object", name=obj.name)
>
> for track in obj.animation_data.nla_tracks:
> track_node = ET.SubElement(obj_node, "Track", name=track.name)
>
> for strip in track.strips:
> if not strip.action:
> continue
>
> strip_node = ET.SubElement(track_node, "Strip", {
> "name": strip.name,
> "action": strip.action.name,
> "start": str(strip.frame_start),
> "end": str(strip.frame_end)
> })
>
> # Iterate through F-Curves for X, Y, Z and other data
> for fcu in strip.action.fcurves:
> channel_node = ET.SubElement(strip_node, "Channel", {
> "path": fcu.data_path,
> "index": str(fcu.array_index) # 0=X, 1=Y, 2=Z
> })
>
> # Extract every keyframe point (Time, Value)
> for kp in fcu.keyframe_points:
> ET.SubElement(channel_node, "Keyframe", {
> "frame": str(round(kp.co[0], 4)),
> "value": str(round(kp.co[1], 4)),
> "interpolation": kp.interpolation
> })
>
> # Save with formatting
> tree = ET.ElementTree(root)
> ET.indent(tree, space=" ")
> tree.write(filepath, encoding="utf-8", xml_declaration=True)
> print(f"Detailed NLA XML exported to: {filepath}")
> # Usage
> export_nla_detailed_xml("C:/path/to/animation_data.xml")
>
> Use code with caution.
> Key Technical Notes
>
> - *Coordinate Mapping:* In the keyframe_points property, kp.co[0] is
> the frame number (time), and kp.co[1] is the actual value (e.g.,
> location in meters or rotation in radians).
> - *Array Indices:*
> - *Location/Scale:* 0 = X, 1 = Y, 2 = Z.
> - *Rotation (Quaternion):* 0 = W, 1 = X, 2 = Y, 3 = Z.
> - *Local vs. Global:* NLA strips store *local* action data. If you
> move an NLA strip in the timeline, the kp.co[0]values do *not* change
> automatically. To get the "world" frame, you must add the strip's
> frame_start to the keyframe's time.
> - *Baking for Complex Data:* If your animation uses *Constraints* or
> *Drivers*, the keyframes won't exist in the fcurves directly. You must
> use Bake Action first to convert these into raw keyframes before running
> the script.
>
> Would you like to include *bone hierarchy data* in the XML as well, or is
> object-level transform data sufficient?
>
> On Tue, Jan 27, 2026 at 1:19 PM John Carlson <yottzumm at gmail.com> wrote:
>
>> 1. Object Parent/Child Hierarchy
>> To traverse the parenting structure (e.g., a car body with child wheels),
>> use a recursive function that accesses object.children.
>> python
>>
>> import bpy
>> def traverse_objects(obj, depth=0):
>> print(" " * depth + obj.name)
>> for child in obj.children:
>> traverse_objects(child, depth + 1)
>> # Start from root objects in the scene (objects without parents)roots = [o for o in bpy.context.scene.objects if not o.parent]for root in roots:
>> traverse_objects(root)
>>
>> Use code with caution.
>> 2. Collection Hierarchy
>> To traverse the organizational structure of collections in the Outliner,
>> use a similar recursive approach on collection.children.
>> python
>>
>> import bpy
>> def traverse_collections(col, depth=0):
>> print(" " * depth + col.name)
>> # Perform actions on objects within this collection
>> for obj in col.objects:
>> print(" " * (depth + 1) + f"Object: {obj.name}")
>>
>> # Recurse into sub-collections
>> for child in col.children:
>> traverse_collections(child, depth + 1)
>> # Start from the Scene's Master Collection
>> traverse_collections(bpy.context.scene.collection)
>>
>>
>>
>> On Tue, Jan 27, 2026 at 1:16 PM John Carlson <yottzumm at gmail.com> wrote:
>>
>>> Well, just asked Google, duh!
>>>
>>> The most prominent top-level data-block types, which can be accessed
>>> directly from bpy.data, include:
>>>
>>> - *bpy.data.objects*: Contains all Object instances in the scene
>>> (meshes, cameras, lights, etc.).
>>> - *bpy.data.scenes*: Contains all Scenes.
>>> - *bpy.data.collections*: Contains all Collections (used to organize
>>> objects).
>>> - *bpy.data.meshes*: Contains mesh data-blocks.
>>> - *bpy.data.materials*: Contains material data-blocks.
>>> - *bpy.data.images*: Contains loaded images.
>>> - *bpy.data.armatures*: Contains armature data.
>>> - *bpy.data.curves*: Contains curve data.
>>> - *bpy.data.worlds*: Contains world data.
>>>
>>>
>>> Traversing all hierarchies in Blender—spanning objects, bone chains,
>>> animation data, and node trees—requires a recursive Python approach using
>>> the
>>> bpy module to navigate bpy.data and parent-child relationships.
>>> Here is a comprehensive guide on how to traverse these hierarchies,
>>> categorized by data type.
>>> 1. Scene Object Hierarchy (Parents & Children)
>>> To traverse all objects, including their child objects (recursive
>>> structure), use the following script.
>>> python
>>>
>>> import bpy
>>> def traverse_objects(obj, level=0):
>>> print(" " * level + "Object:", obj.name, "Type:", obj.type)
>>>
>>> # Traverse children
>>> for child in obj.children:
>>> traverse_objects(child, level + 1)
>>> # Start traversal from root objects (objects with no parent)for obj in bpy.context.scene.objects:
>>> if obj.parent is None:
>>> traverse_objects(obj)
>>>
>>> 2. Armature Bone Hierarchy (Rigging)
>>> Bones exist within armature data. You must iterate through the bonescollection,
>>> focusing on root bones (those without a parent) and navigating down.
>>> python
>>>
>>> import bpy
>>> def traverse_bones(bone, level=0):
>>> print(" " * level + "Bone:", bone.name)
>>> # Traverse children
>>> for child in bone.children:
>>> traverse_bones(child, level + 1)
>>> # Assumes an Armature object is selectedarm_obj = bpy.context.active_objectif arm_obj and arm_obj.type == 'ARMATURE':
>>> # Use bone.parent is None to find root bones
>>> for bone in arm_obj.data.bones:
>>> if bone.parent is None:
>>> traverse_bones(bone)
>>>
>>> 3. Animation Hierarchy (Actions & Keyframes)
>>> Animations are stored in bpy.data.actions and linked to objects via
>>> animation_data. To traverse keyframes within an action:
>>> python
>>>
>>> import bpy
>>> # Traverse all actions in the blend filefor action in bpy.data.actions:
>>> print("Action:", action.name)
>>> # Traverse F-Curves (animation channels)
>>> for fcurve in action.fcurves:
>>> print(" FCurve:", fcurve.data_path, "Array Index:", fcurve.array_index)
>>> # Traverse keyframe points
>>> for keyframe in fcurve.keyframe_points:
>>> print(" Keyframe:", keyframe.co)
>>>
>>> 4. Node Hierarchy (Shader/Geometry Nodes)
>>> Nodes are structured within tree structures. You can traverse node trees
>>> in material nodes or geometry nodes.
>>> python
>>>
>>> import bpy
>>> def traverse_nodes(node_tree):
>>> if node_tree is None: return
>>> print("Node Tree:", node_tree.name)
>>> for node in node_tree.nodes:
>>> print(" Node:", node.name, "Type:", node.type)
>>> # Check for node groups
>>> if node.type == 'GROUP' and node.node_tree:
>>> traverse_nodes(node.node_tree)
>>> # Example: Traversing active object's material nodesobj = bpy.context.active_objectif obj and obj.material_slots:
>>> for slot in obj.material_slots:
>>> if slot.material and slot.material.use_nodes:
>>> traverse_nodes(slot.material.node_tree)
>>>
>>>
>>>
>>> On Tue, Jan 27, 2026 at 1:06 PM John Carlson <yottzumm at gmail.com> wrote:
>>>
>>>> Aaron, it would be helpful to me to get the top-level Blender objects
>>>> that hold the scene:
>>>>
>>>> The object hierarchy.
>>>> The actions, key frames and animations.
>>>> The node graph roots (materials)
>>>> Anything else you can think of relevant to X3D.
>>>>
>>>> Thanks,
>>>>
>>>> John
>>>>
>>>> On Tue, Jan 27, 2026 at 12:17 PM John Carlson <yottzumm at gmail.com>
>>>> wrote:
>>>>
>>>>> I am now considering traversing the Blender object hierarchy and
>>>>> exporting “Blender XML,” such that I can translate Blender object
>>>>> structures directly to XML. Then I will work towards translating X3D XML
>>>>> to Blender XML for loading using Blender XML examples, and write a Blender
>>>>> XML import for Blender. Maybe I should use JSON? What extension
>>>>> should I use?
>>>>>
>>>>> Somehow this seems very brittle.
>>>>>
>>>>> H**k,
>>>>>
>>>>> John
>>>>>
>>>>> On Tue, Jan 27, 2026 at 11:16 AM John Carlson <yottzumm at gmail.com>
>>>>> wrote:
>>>>>
>>>>>> I’m totally on board with that for X3D encodings in general, but I’m
>>>>>> currently narrowing down to using an X3D Python “encoding,” not a binding.
>>>>>>
>>>>>> On Tue, Jan 27, 2026 at 10:39 AM Bergstrom, Aaron <
>>>>>> aaron.bergstrom at und.edu> wrote:
>>>>>>
>>>>>>> All,
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> I keep a python dictionary that I pass a node type to in the form of
>>>>>>> a string, and it returns an x3d.py node object.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> I keep a custom version of x3d.py to which I’ve added CGE, X_ITE,
>>>>>>> and X3DOM (sort of) node classes, so I can also export experimental nodes
>>>>>>> such as a CGE Skin, X_ITE material extensions, or X3DOM CommonSurfaceShader.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> The dictionary includes all of the X3D 4.0 node types, as well as a
>>>>>>> variety of pending 4.1 nodes and browser specific nodes as described above.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> It basically looks like this:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> def instantiateNodeFromString(x3dType):
>>>>>>>
>>>>>>> x3dNodeMapping = {
>>>>>>>
>>>>>>> ####################################### A
>>>>>>>
>>>>>>> 'AcousticProperties':AcousticProperties,
>>>>>>>
>>>>>>> 'Analyser':Analyser,
>>>>>>>
>>>>>>> 'Anchor':Anchor,
>>>>>>>
>>>>>>> 'AnisotropyMaterialExtension':AnisotropyMaterialExtension, #
>>>>>>> X_ITE - glTF extension
>>>>>>>
>>>>>>> ***snip***
>>>>>>>
>>>>>>> 'VolumeData':VolumeData,
>>>>>>>
>>>>>>> 'VolumeEmitter':VolumeEmitter,
>>>>>>>
>>>>>>> 'VolumePickSensor':VolumePickSensor,
>>>>>>>
>>>>>>> ####################################### W
>>>>>>>
>>>>>>> 'WaveShaper':WaveShaper,
>>>>>>>
>>>>>>> 'WindPhysicsModel':WindPhysicsModel,
>>>>>>>
>>>>>>> 'WorldInfo':WorldInfo
>>>>>>>
>>>>>>> }
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> return x3dNodeMapping[x3dType]()
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Aaron
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> *From:* John Carlson <yottzumm at gmail.com>
>>>>>>> *Sent:* Tuesday, January 27, 2026 1:30 AM
>>>>>>> *To:* Don Brutzman <don.brutzman at gmail.com>
>>>>>>> *Cc:* Bergstrom, Aaron <aaron.bergstrom at und.edu>; X3D Ecosystem
>>>>>>> public discussion <x3d-ecosystem at web3d.org>
>>>>>>> *Subject:* Re: Loading into X3DPSAIL (for Maya and Blender)
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> I think that Aaron was writing something that converted class names
>>>>>>> into X3D Python classes (and to scene graph objects?), but I haven’t heard
>>>>>>> much about it or if he imports X3D directly into Maya or some X3DPSAIL
>>>>>>> derivative (and then to Maya). I am will to work on something that
>>>>>>> generates a XML Python loader (from X3DUOM), just realize I haven’t decided
>>>>>>> on a single loader class or multiple loader classes. Opinions? At least I
>>>>>>> can take a first crack at it. I probably won’t use AI at all. I’ll study
>>>>>>> the structure of the Java version, but I do prefer ElementTree over DOM for
>>>>>>> this use case.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Likely, it will be an adjunct to X3DPSAIL.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> I think the best test for reliability is to do roundtrip testing on
>>>>>>> the archive, which will also test XML output.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> John
>>>>>>>
>>>>>>> On Mon, Jan 26, 2026 at 6:01 PM Don Brutzman <don.brutzman at gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>> Yes "X3DLoaderDOM.java (load DOM into scenegraph)" was difficult to
>>>>>>> write, requires manual coding and time-consuming to debug. It works and
>>>>>>> the generator for it is checked into open source as a key part of X3DJSAIL.
>>>>>>>
>>>>>>> -
>>>>>>> https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/X3DLoaderDOM.html
>>>>>>> - (on web3d.org but direct access is blocked, library not is
>>>>>>> version control since it is large and changeable; copy attached)
>>>>>>>
>>>>>>> The PythonX3dSmokeTests.py program builds a lot of snippets of
>>>>>>> python scene graph. The same approach might be used to walk any X3D tree
>>>>>>> and construct a python scene graph. If such code works, and is reliable,
>>>>>>> we can promote that code and integrate it as part of the x3d.py
>>>>>>> distribution.
>>>>>>>
>>>>>>> -
>>>>>>> https://www.web3d.org/x3d/stylesheets/python/examples/PythonX3dSmokeTests.py
>>>>>>>
>>>>>>> all the best, Don
>>>>>>>
>>>>>>> --
>>>>>>>
>>>>>>> X3D Graphics, Maritime Robotics, Distributed Simulation
>>>>>>>
>>>>>>> Relative Motion Consulting https://RelativeMotion.info
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Mon, Jan 26, 2026 at 2:54 PM John Carlson <yottzumm at gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>> Thanks for fixing the TODO to add XML!
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> I have tried to add Python code which loads JSON into an X3DPSAIL
>>>>>>> scene graph and failed. I have zero confidence in my ability to load stuff
>>>>>>> into in memory scene graphs, preferring to load things into DOM first.
>>>>>>> This applies to much of my work, including JSON validation with X3D XML
>>>>>>> schema.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> I am attempting to load JSON into a CGE scene graph, but there’s no
>>>>>>> real evidence that it works yet. I have a mostly working DOM solution.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> I realize X3DLoaderDOM.java (load DOM into scenegraph) is a lot of
>>>>>>> work, and if this was mostly automated, please tell us how if it’s
>>>>>>> not a national secret. If we have that, then Python might be a lot easier!
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> My overall plan is to push JSON things into DOM for loading, but
>>>>>>> Aaron might have a good solution for all encodings!
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> I am reminded how Xj3D translated XML into a VRML scene graph. Not
>>>>>>> ideal, but.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> My priorities are first CGE, then Blender import. I realize my
>>>>>>> priorities change a lot. If we had a way to export into Blender from
>>>>>>> X3DPSAIL, this would make working on X3DPSAIL import much more attractive.
>>>>>>> Easier said than done.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> John
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Mon, Jan 26, 2026 at 3:51 PM Don Brutzman <don.brutzman at gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>> Regarding C/C++/C# open source, no such library has yet been
>>>>>>> shared. As with our autogenerated Java and Python libraries, these are
>>>>>>> strong candidates for autogeneration once proper design patterns are
>>>>>>> written. Once written, library testing using the X3D Example Archives
>>>>>>> would be essential for success and straightforward to perform.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Regarding X3D loaders in Python for X3DPSAIL, none has been written
>>>>>>> yet. Please be aware that .x3d files are written in valid XML. Refreshed
>>>>>>> TODO list:
>>>>>>>
>>>>>>> - Python X3D Package x3d.py, X3D Python Scene Access Interface
>>>>>>> Library (X3DPSAIL)
>>>>>>> - The x3d.py Python X3D Package supports programmers with Python
>>>>>>> interfaces and objects for standards-based X3D programming, all as open
>>>>>>> source.
>>>>>>> - https://www.web3d.org/x3d/stylesheets/python/python.html#TODO
>>>>>>>
>>>>>>> 🔖 <https://www.web3d.org/x3d/stylesheets/python/python.html#TODO>
>>>>>>> TODO
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> Lots! Much progress continues. For a release-summary log, please see *history
>>>>>>> log for this page*.
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>>
>>>>>>> - *TODO: clean up x3d.html documentation autogenerated by pydoc.
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>*
>>>>>>> - *TODO: We need a "Getting Started" tutorial on this page.
>>>>>>> This is a good opportunity... who wants to help?!
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>*
>>>>>>> - *TODO: utility support for loaders from XML (.x3d or .xml),
>>>>>>> ClassicVRML (.x3dv), VRML97 (.wrl), and JSON (.json or .x3dj) files.
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>*
>>>>>>> - *TODO: distribution support for Jupyter Notebook (initial
>>>>>>> example works), Apache Zeppelin notebook, Anaconda distribution of Python,
>>>>>>> and other data-science platforms.
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>*
>>>>>>>
>>>>>>> To facilitate library review, I was recently able to autogenerate
>>>>>>> Python documentation for x3d.py using the pydoc tool.
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> - *https://www.web3d.org/x3d/stylesheets/python/x3d.html*
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> Please note that each X3D node has the following methods listed.
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> Methods defined here:
>>>>>>> *HTML5*(self, indentLevel=0)
>>>>>>> Provide HTML5 output serialization using modified
>>>>>>> XML encoding with no singleton self-closing elements.
>>>>>>> *JSON*(self, indentLevel=0, syntax='JSON')
>>>>>>> Provide *X3D*
>>>>>>> output serialization using JSON encoding (usable for .json file suffix).
>>>>>>> *VRML*(self, indentLevel=0, VRML97=False)
>>>>>>> Provide *X3D*
>>>>>>> output serialization using VRML encoding (usable for .x3dv or .wrl file suffix).
>>>>>>> *XML*(self, indentLevel=0, syntax='XML')
>>>>>>> Provide Canonical *X3D*
>>>>>>> output serialization using XML encoding (usable for .x3d file suffix).
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> Am thinking the HTML5 method is no longer needed, this was written
>>>>>>> when X3DOM had trouble with self-closing elements.
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> Thanks for all efforts that might improve x3d.py.
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> all the best, Don
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> -- <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> X3D Graphics, Maritime Robotics, Distributed Simulation
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> Relative Motion Consulting *https://RelativeMotion.info*
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> On Sun, Jan 25, 2026 at 4:18 AM John Carlson <*yottzumm at gmail.com*>
>>>>>>> wrote: <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> I guess I didn't send this earlier.
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> I did see the standards progress page. For C/C++/C#, are any
>>>>>>> libraries open source? I’m thinking COIN 3D, OpenInventor, H3D. Maybe
>>>>>>> others. I see there’s an ISO documentation for each language, but
>>>>>>> apparently the standard isn’t open source???? I’m looking for
>>>>>>> opportunities for X3DJSONLD serialization. OpenInventor (COIN 3D) looks
>>>>>>> super complex.
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> For X3DPSAIL, can you point me at an example of loading XML or DOM
>>>>>>> into a scenegraph? Maybe I missed something???? I’m looking for something
>>>>>>> like CreateX3DFromString()??? I realized I can create Python from XML,
>>>>>>> just like my tools can go from JSON to DOM to Python; but my toolchain
>>>>>>> isn’t Python. Running stylesheets in Python would be a great example.
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> Looking here:
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>>
>>>>>>> *https://www.web3d.org/x3d/stylesheets/python/examples/PythonX3dSmokeTests.py*
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> On Sun, Jan 25, 2026 at 12:19 AM Don Brutzman <
>>>>>>> *don.brutzman at gmail.com*> wrote:
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> Standards planning status appears on the following page.
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> - *X3D Standards Progress | Web3D Consortium*
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>> - *https://www.web3d.org/x3d/progress*
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> Scroll past overview prose to find links to each version completed,
>>>>>>> in progress and planned.
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> all the best, Don
>>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>> -- <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>>
>>>>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-ecosystem_web3d.org/attachments/20260127/22d8efbe/attachment-0001.html>
More information about the X3D-Ecosystem
mailing list