Giter Club home page Giter Club logo

freecad.cross's Introduction

CROSS - CAD and ROS, Open-Source Synergy

CROSS is a FreeCAD workbench to generate robot description packages (xacro or URDF) for the Robot Operating System, ROS.

CROSS is a powerful ROS workbench for FreeCAD, a popular open-source 3D parametric modelling software. As the field of robotics continues to evolve rapidly, the need for comprehensive and efficient tools for robot development and simulation has become increasingly essential. CROSS emerges as a versatile solution, empowering engineers, researchers, and hobbyists to leverage the capabilities of both ROS and FreeCAD in a cohesive environment. At the time of writing (June 2023), CROSS is the only available open-source solution to generate robot description files for ROS with a graphical user interface with direct visual feedback.

With CROSS, users gain the ability to combine the flexibility of FreeCAD's 3D modeling capabilities with the extensive functionality of ROS, allowing for seamless collaboration between mechanical design and robotics development. By bridging the gap between these two powerful platforms, CROSS streamlines the process of designing, and visualizing robotic systems, ultimately accelerating the development cycle.

The key features of CROSS are:

  • ROS Integration: CROSS offers native integration with ROS, an open-source framework widely adopted in the robotics community. This integration enables users to leverage the vast ecosystem of ROS packages, libraries, and tools while working within the familiar FreeCAD environment.
  • 3D Modelling and Simulation: FreeCAD's 3D modelling capabilities empower users to design intricate mechanical components and complete robot systems. With CROSS, these designs can be seamlessly integrated with ROS simulations, allowing for realistic and accurate testing of robot behaviors and interactions.
  • Visualization and Analysis: CROSS provides advanced visualization and analysis tools provided by FreeCAD itself, enabling users to inspect, analyze, and validate their robot designs.
  • Collaborative Development: CROSS supports collaborative development by facilitating the sharing of robot models through the use of complex macro written in the Python language where a full robot can be generated by code. This encourages teamwork, knowledge sharing, and accelerates the pace of innovation within the robotics community.
  • Extensibility: As an open-source project, CROSS encourages contributions from the community, allowing users to extend its functionality and adapt it to their specific needs. By leveraging the collective expertise of the ROS and FreeCAD communities, CROSS continues to evolve and provide cutting-edge features for robot development.

Compatibility

Compatible with FreeCAD at least v0.21.2 (use the tag fc_v0.21.1 for earlier FreeCAD versions). Compatible with ROS2 (for now).

Features

  • Export Part::Box, Part::Sphere, and Part::Cylinder as text to be included in a URDF file,
  • Generate an enclosing box or sphere as collision object (only axis-aligned box for now),
  • Build a robot from scratch and generate the URDF file for it,
  • Set a value for each actuated joint of a robot and have the links move accordingly,
  • Import URDF/xacro files,
  • Import xacro definitions, i.e. import xacro files that only define some macros and ask the user to choose a macro and its parameters to generate a full-feature URDF,
  • Export the xacro as xacro that includes (xacro:include) the original xacro file and uses the macro.
  • Combine several xacros files (i.e. also URDF) into a workcell and export them as a xacro file.
  • Get the current planning scene (relies on the /get_planning_scene service of type moveit_msgs/srv/GetPlanningScene)
  • Define a pose and possibly bring a specific link to it. All links that are fixed to this link will follow but the inverse kinematic solutions are not shown.

Installation

You need a recent version of FreeCAD v0.21.2 with the ability to configure custom repositories for the Addon Manager to install the workbench via the Addon Manager. On earlier version you're on your own, see instructions for local install below.

  • In FreeCAD, menu "Edit / Preferences ..."
  • Category "Addon Manager"
  • Add an entry to "Custom repository" by clicking on the "+" sign.
  • Repository URL: https://github.com/galou/freecad.cross.git, branch: main
  • Click on "OK" to close the dialog "Preferences"
  • Back to FreeCAD's main window, menu "Tools / Addon manager"
  • Search and install the workbench via the Addon Manager

Launching FreeCAD with ROS

The CROSS workbench is supposed to load also without ROS, with limited functionality. If this is not the case, please report.

You will probably want to be able to use ROS-related functionalities and this requires launching FreeCAD from the command line:

  • Open a terminal
  • Source your ROS workspace
  • Launch FreeCAD with extra Python modules set by ROS, freecad --module-path ${PYTHONPATH//:/' --module-path '} (replace freecad by your FreeCAD executable). This bash magic will add for example --module-path path1 --module-path path2 if $PYTHONPATH is path1:path2.

Testing/developing the workbench

If you want to work on this workbench you have the following options:

  • Clone the repository directory in FreeCAD's Mod directory: cd ~/.local/share/FreeCAD/Mod && git clone https://github.com/galou/freecad.cross.git on Linux
  • Start FreeCAD from the root-directory of this repository in a terminal (by default freecad.cross)
  • Clone this repository and create a symbolic link to the directory freecad.cross (or the directory containing this repository if you changed the name) to FreeCAD's Mod directory (~/.local/share/FreeCAD/Mod on Linux).
  • pip install -e . adds the root-directory to easy_install.path.

freecad.cross's People

Contributors

drfenixion avatar enzosigma avatar galou avatar maidenone avatar sprhawk 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

Watchers

 avatar  avatar  avatar  avatar

freecad.cross's Issues

New fork named OVERCROSS - includes launcher for Gazebo and inertia auto calc tool and others

Created fork named OVERCROSS with new features:

  1. Material selection of link or whole robot
  2. Auto calculation of mass and inertia
  3. Launcher for Gazebo
  4. New some icons and icons reordering
  5. Bug fixes
  6. Others

OVERCROSS

Tools of FreeCAD OVERCROSS
Tools of FreeCAD OVERCROSS
Launched Rviz and Gazebo from Gazebo launcher
320291505-a46715a0-0dc6-4f6e-b80e-e4c644589477
Generated inertia blocks and centers of mass in Gazebo
320291446-d3d44e65-a9cc-45cc-937a-be5008b98608

Many thanks to Galou for his great job on CROSS what was the basis for my work!

Error when trying to export to urdf

Hi,
when trying to export a .step file from FreeCAD 0.21.1 to urdf using this framework I get the following error:

12:35:50  Running the Python command 'UrdfExport' failed:
Traceback (most recent call last):
  File "/home/hiwi/.local/share/FreeCAD/Mod/freecad.cross/freecad/cross/ui/command_urdf_export.py", line 142, in Activated
    txt += et.tostring(xml).decode('utf-8')
  File "/tmp/.mount_FreeCAOelecY/usr/lib/python3.10/xml/etree/ElementTree.py", line 1102, in tostring
    ElementTree(element).write(stream, encoding,
  File "/tmp/.mount_FreeCAOelecY/usr/lib/python3.10/xml/etree/ElementTree.py", line 741, in write
    qnames, namespaces = _namespaces(self._root, default_namespace)
  File "/tmp/.mount_FreeCAOelecY/usr/lib/python3.10/xml/etree/ElementTree.py", line 842, in _namespaces
    for elem in elem.iter():

'XmlForExport' object has no attribute 'iter'

I have exactly followed the installation guide. Any ideas on how to solve this issue? Thanks in advance!

missing reload `joint_proxy`, `link_proxy`

reload(module)
_reload_module('freecad.cross.assembly4_utils')
_reload_module('freecad.cross.assembly_from_urdf')
_reload_module('freecad.cross.coin_utils')
_reload_module('freecad.cross.deep_copy')
_reload_module('freecad.cross.freecad_utils')
_reload_module('freecad.cross.freecadgui_utils')
_reload_module('freecad.cross.gui_utils')
_reload_module('freecad.cross.import_dae')
_reload_module('freecad.cross.joint')
_reload_module('freecad.cross.link')
_reload_module('freecad.cross.mesh_utils')
_reload_module('freecad.cross.placement_utils')
_reload_module('freecad.cross.planning_scene_proxy')
_reload_module('freecad.cross.planning_scene_utils')
_reload_module('freecad.cross.robot')
_reload_module('freecad.cross.robot_from_urdf')
_reload_module('freecad.cross.ros.node')
_reload_module('freecad.cross.ros.planning_scene')
_reload_module('freecad.cross.ros.utils')
_reload_module('freecad.cross.ui.command_assembly_from_urdf')
_reload_module('freecad.cross.ui.command_box_from_bounding_box')
_reload_module('freecad.cross.ui.command_get_planning_scene')
_reload_module('freecad.cross.ui.command_kk_edit')
_reload_module('freecad.cross.ui.command_new_joint')
_reload_module('freecad.cross.ui.command_new_link')
_reload_module('freecad.cross.ui.command_new_robot')
_reload_module('freecad.cross.ui.command_new_workcell')
_reload_module('freecad.cross.ui.command_new_xacro_object')
_reload_module('freecad.cross.ui.command_reload')
_reload_module('freecad.cross.ui.command_robot_from_urdf')
_reload_module('freecad.cross.ui.command_set_cross_placement')
_reload_module('freecad.cross.ui.command_set_joints')
_reload_module('freecad.cross.ui.command_sphere_from_bounding_box')
_reload_module('freecad.cross.ui.command_urdf_export')
_reload_module('freecad.cross.ui.command_wb_settings')
_reload_module('freecad.cross.ui.file_overwrite_confirmation_dialog')
_reload_module('freecad.cross.ui.set_joints_dialog')
_reload_module('freecad.cross.ui.set_joints_manual_input_table')
_reload_module('freecad.cross.urdf_loader')
_reload_module('freecad.cross.urdf_parser_utils')
_reload_module('freecad.cross.urdf_utils')
_reload_module('freecad.cross.utils')
_reload_module('freecad.cross.version')
_reload_module('freecad.cross.wb_utils')
_reload_module('freecad.cross.workcell')
_reload_module('freecad.cross.xacro_loader')
_reload_module('freecad.cross.xacro_object')

Are joint_proxy, link_proxy missing or there is some reason ?

Error while "Export to URDF"

I press "Export to URDF" and get error. looks wrong path to "wb_globals"

18:58:10  Running the Python command 'UrdfExport' failed:
Traceback (most recent call last):
  File "/home/ubuntu/.local/share/FreeCAD/Mod/freecad.cross/freecad/cross/ui/command_urdf_export.py", line 113, in Activated
    xmls.append(obj.Proxy.export_urdf(interactive=True))
  File "/home/ubuntu/.local/share/FreeCAD/Mod/freecad.cross/freecad/cross/robot_proxy.py", line 514, in export_urdf
    p, output_path = get_rel_and_abs_path(self.robot.OutputPath)
  File "/home/ubuntu/.local/share/FreeCAD/Mod/freecad.cross/freecad/cross/wb_utils.py", line 316, in get_rel_and_abs_path
    p = without_ros_workspace(path)
  File "/home/ubuntu/.local/share/FreeCAD/Mod/freecad.cross/freecad/cross/ros/utils.py", line 145, in without_ros_workspace
    from .wb_globals import g_ros_workspace
  File "/tmp/appimage_extracted_962abe530f3b7f573b8341cbc15de676/usr/lib/python3.10/site-packages/shiboken2/files.dir/shibokensupport/feature.py", line 139, in _import
    return original_import(name, *args, **kwargs)

No module named 'freecad.cross.ros.wb_globals'

I use FreeCAD from ROS2 docker container. As i described here #6
ROS 2 Iron. FreeCAD 0.21.2

Possible symbiosis with xacro part DB feature

This is a request for discussion. I saw your lightning video (Day 1, @36:45) at Roscon2023. URDFs are such a big hurdle for new ROS users so I think your project is a very valuable addition if it helps ease this barrier to entry.

I am also working on a different approach to ease the URDF design barrier. I didn't feel I had the time cycles to complete a visual CAD solution but I felt with a few minor feature additions to the Xacro tool I could create a way for ROS packages to contain a collection of reusable parts. These parts would contain the meshes, collision, inertial and optional "attachment points" already defined. Assembly of a URDF could then be much simpler by attaching these parts together like Lego and linking by their attachment points. Parts are implemented as xacro macros. More details are explained in this Xacro issue post.

I feel like our goals could work together. A few things off the top of my head:

  • Possibly freecad.cross could read meta information in the Parts like the attachment points and offer the user an easy way to attach a new part. (attachment point is basically a saved Pose)
  • It could scan the sourced ROS packages for contained "Parts" (i.e. Part DBs)
  • Provide a toolbox of the available parts from the scanned packages to drag and drop into the assembly

I have the features completed for Xacro but I haven't done a PR yet. I am in the process of developing a few example PartDB packages. I am open to feedback on my approach and any improvements or ways to integrate with freecad.cross, such as providing more meta in the xacro output if a "freecad.cross" parameter is given.

There is bug calculating robot link positions in robot

I'm using this model or this one

image

Left one is result of import urdf or xacro, right one is create assembly from urdf or xacro

And I try to use Set Placement to move some additional models via assembly LCS, but it seems the calculation of Placement is based on parent's Origin, not considered on hierarchy of Links. ( links of transformation of Placements )

Unable to open urdf or xacro with CROSS

After installation in FreeCAD 21.1 on both MAC VM Ubuntu 22.04 aarch64 ROS 2 Humble & on native MAC M1 arm64 OS 17.1:
On MAC VM running g FreeCAD error message there is a "no module named "urdf_parser_py"
ON native MAC, while the Addon Manager reports installed and no error messages.

But in both cases, unable to open .urdf or .xacro files .

Adding a Transformation tool for Joint origin placement. Ask idea - how to

I tried to do fast fix for add transform tool but i dont have experience with FreeCAD dev and need your opinion.

I tried to use App::GeometryPython instead of App::FeaturePython in joint_proxy it looks same but with geometric features. Also added placement property.
That appear transform tool in menu, but tool does not work (without any errors, just does not appear in 3d space).
Also tried various extensions for App::GeometryPython. They also does not give working transform tool.

I tried other objects like App:Part that give working transform tool but it is not right way because they have not proxy property and thus not compatible with current code.

@galou , any idea that i should to use in code for getting working transform tool and also have proxy for compatible?

My current idea is adding transform tool with something like App::GeometryPython (instead of App::FeaturePython in joint_proxy.py) and when it will change placement do sync with origin (for compatible). Also it may be need to fix ciclic update placement<->origin (if will).

Compatibility Issues with CROSS Workbench in Freecad

Dear Developers,

I am writing to express my appreciation for the development and release of the CROSS workbench for Freecad. It seems like a valuable and powerful tool.

As a learner of ROS2 Humble and Freecad, I have followed the installation instructions and successfully installed CROSS in various Freecad versions (0.21.2, various versions within 0.22, and Freecad realthunder). While I am able to utilize CROSS functionality in Freecad 0.22 (both versions), it is not available in Freecad 0.21.2.

However, I have encountered an error related to NumPy in the Curves workbench when working on robot design in Freecad 0.22. This error does not occur in Freecad 0.21.2, but the CROSS workbench is not accessible in this version.

I am seeking your assistance in navigating this situation. I would be grateful if you could provide guidance on the following:

Potential solutions to address the compatibility issue with CROSS in Freecad 0.21.2. Are there any settings or configurations that can enable its functionality or workarounds for using CROSS features in this version?
Troubleshooting advice for the NumPy error encountered in the Curves workbench within Freecad 0.22.

Thank you for your time and consideration. I look forward to your insights and assistance.

Sincerely,
Vijai

Wrong description of "Set placement" tool

"a CROSS::Joint, the "child" LCS on the parent link, and the "parent" LCS on the child link"
If do that joint will be placed in wrong position.
Only working way is a "CROSS::Joint, the "parent" LCS on the child link, and the "child" LCS on the parent link".
Thus should be changed the selection of links LCS.

"CROSS::Joint, the LCS of the parent link, and the LCS of the child link on the same link," - this works ONLY for "centered" supporting LCS (their center positions on 0,0 coordinate of basic axies).
For example if you use cude (from Part workbench) which have 0.0 coordinate on one of his angles (and thos body not "centered") and set LCS on his edge center this selection tip will works wrong (join will be placed in wrong position).
This should be changed to -
"CROSS::Joint, the SUPPORTING LCS of the parent link, and the LCS of the child link on the same link (works only for centered supporting LCS, you must place supporting LCS on 0.0 coordinate of basic axis),"

It is the reason why i couldn't get any useful result before just experimenting a lot.

Corrected tips:
"CROSS::Joint, the "parent" LCS on the child link, and the "child" LCS on the parent link".
"CROSS::Joint, the supporting LCS of the parent link, and the LCS of the child link on the same link (works only for centered supporting LCS, you must place supporting LCS on 0.0 coordinate of basic axis),"

Update. Center rule applicable to all Joint Set position ways. Because if your LCS of child link will not at zero coordinates of axis you will get wrong placement using Set placement tool.

Therefore tip - center of your body link must be in zero coordinate of axis and his LCS must be in same zero coordinate. One more time - LCS must be at zero axis coordinate and it must be center of supposed Joint of this link. If so Set placement tool for joints will work right.

You can move origin by using macro (if you already have wrong builded or imported parts with wrong origin)
https://wiki.freecad.org/Macro_MoveToOrigin
It let you centers body.

"New Link" command can only be excuted when root Robot is selected.

The New Link command can only be used when the Robot root is selected. It is a bit not convenient to use.

It would be better be executed even the children of Robot (Links, Joints, etc) are selected.

And the New Link command shares same keyboard shortcut N,L with Set Placement

Finded a way to run FreeCAD from ROS2 docker container without big overhead.

Finded solution. See my second comment.

For your notation. It have dependency (rclpy) what dont mentioned in repo.

Also i think it is not be best way to direct dependency to ROS because best practice of usage ROS is in Docker. This lead to i dont have ROS in my host system (where installed freecad). Install freecad to docker ROS image will lead to big overhead.
Could you describe why u need to dependency on ROS?

CROSS Workbranch does`t appear and have error logs in report view.

12:33:25  Init: Initializing freecad.cross
12:33:25  The environment variable `ROS_DISTRO` is not set and no ROS installation was found in /opt/ros, some functionalities will be missing
12:33:25  During initialization the error "No module named 'rclpy'" occurred in freecad.cross
12:33:25  --------------------------------------------------------------------------------
12:33:25  Traceback (most recent call last):
  File "<string>", line 226, in InitApplications
  File "/tmp/.mount_FreeCAocHVXG/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/home/user/.local/share/FreeCAD/Mod/freecad.cross/freecad/cross/__init__.py", line 7, in <module>
    from .wb_globals import g_ros_distro
  File "/tmp/.mount_FreeCAocHVXG/usr/lib/python3.10/site-packages/shiboken2/files.dir/shibokensupport/feature.py", line 139, in _import
    return original_import(name, *args, **kwargs)
  File "/home/user/.local/share/FreeCAD/Mod/freecad.cross/freecad/cross/wb_globals.py", line 18, in <module>
    from .ros.node import get_node_and_executor  # noqa: E402.
  File "/tmp/.mount_FreeCAocHVXG/usr/lib/python3.10/site-packages/shiboken2/files.dir/shibokensupport/feature.py", line 139, in _import
    return original_import(name, *args, **kwargs)
  File "/home/user/.local/share/FreeCAD/Mod/freecad.cross/freecad/cross/ros/node.py", line 6, in <module>
    import rclpy
  File "/tmp/.mount_FreeCAocHVXG/usr/lib/python3.10/site-packages/shiboken2/files.dir/shibokensupport/feature.py", line 139, in _import
    return original_import(name, *args, **kwargs)
ModuleNotFoundError: No module named 'rclpy'
12:33:25  --------------------------------------------------------------------------------
12:33:25  Init:      Initializing freecad.cross... failed
12:33:25  --------------------------------------------------------------------------------
12:33:25  Traceback (most recent call last):
  File "<string>", line 226, in InitApplications
  File "/tmp/.mount_FreeCAocHVXG/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/home/user/.local/share/FreeCAD/Mod/freecad.cross/freecad/cross/__init__.py", line 7, in <module>
    from .wb_globals import g_ros_distro
  File "/tmp/.mount_FreeCAocHVXG/usr/lib/python3.10/site-packages/shiboken2/files.dir/shibokensupport/feature.py", line 139, in _import
    return original_import(name, *args, **kwargs)
  File "/home/user/.local/share/FreeCAD/Mod/freecad.cross/freecad/cross/wb_globals.py", line 18, in <module>
    from .ros.node import get_node_and_executor  # noqa: E402.
  File "/tmp/.mount_FreeCAocHVXG/usr/lib/python3.10/site-packages/shiboken2/files.dir/shibokensupport/feature.py", line 139, in _import
    return original_import(name, *args, **kwargs)
  File "/home/user/.local/share/FreeCAD/Mod/freecad.cross/freecad/cross/ros/node.py", line 6, in <module>
    import rclpy
  File "/tmp/.mount_FreeCAocHVXG/usr/lib/python3.10/site-packages/shiboken2/files.dir/shibokensupport/feature.py", line 139, in _import
    return original_import(name, *args, **kwargs)
ModuleNotFoundError: No module named 'rclpy'
12:33:25  --------------------------------------------------------------------------------

Uncatchded bug with joint "Set Placement" tool (it doesn't change placement of child link)

Visually bug looks like nothing happing then you tring to Set placement of joint.

I cant catch source situation (maybe configuration of links, join) but when bug happen "Set placement" tool does not change child link placement (but change joint origin) and visually it looks like nothing happing without any error.

Bug case - select: join, LCS of child link, LCS of partent link. Press Set Placement tool.
If that happens 1 time joint will always buggy.

Fixed by remove links and joint and rebult them again.

I cant reproduce this bug. But very usefull to know if someone faced with it. Just rebuild your links, joint (delete and create again).

Tips for usinkg CROSS for custom build ros with --symlink-install

I built ROS2 under debian bookworm with colcon build --symlink-install

All the ros packages are installed in separate directory hierarchy , and ros_workspace/install/setup.bash will set PYTHONPATH for every packages. But because FreeCAD will erase environment variable PYTHONPATH after startup, I provide here a solution for that:

FreeCAD  -P ${PYTHONPATH//:/' -P '}

BTW: the required libnglib on Debian Bookworm is installed under /usr/lib/x86_64-linux-gnu/netgen, which is not found by FreeCAD. So I need to add

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/netgen:$LD_LIBRARY_PATH

to start FreeCAD + freecad.cross properly

Need demonstration or tutorial how to use "Set placements" tool

I trying to use "Set placement" tool various ways but without any usefull result because I dont undastand how it works.
I cant use freecad.cross without this tool because not other way to change position of joint origin.
Need any demo or tutorial for this "Set placements" tool.
Also it is good to have visual tool like regular Transform (how we do with bodies in FreeCAD) for change origin of Joint.

Feature: Auto calculating of mass and inertia based on link density

I am sure we need auto calc of mass and inertia for links.
Plan:
Add option to choose material of link (or a whole robot and it will inherited by links without material).
Add tool of calc mass and inertial of all links based on material density.
@galou , what do you think? Any suggestion what can help.

missing FeaturePython caused python exception

# obj = doc.addObject('Part::FeaturePython', name)

PropertyPythonObject::toString(): failed for <class 'freecad.cross.robot_proxy.RobotProxy'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type FeaturePython is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.link_proxy.LinkProxy'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type FeaturePython is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.link_proxy.LinkProxy'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type FeaturePython is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.link_proxy.LinkProxy'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type FeaturePython is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.link_proxy.LinkProxy'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type FeaturePython is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.link_proxy.LinkProxy'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type FeaturePython is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.link_proxy.LinkProxy'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type FeaturePython is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.link_proxy.LinkProxy'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type FeaturePython is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.joint_proxy.JointProxy'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type FeaturePython is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.joint_proxy.JointProxy'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type FeaturePython is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.joint_proxy.JointProxy'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type FeaturePython is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.joint_proxy.JointProxy'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type FeaturePython is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.joint_proxy.JointProxy'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type FeaturePython is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.joint_proxy.JointProxy'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type FeaturePython is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.link_proxy._ViewProviderLink'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type ViewProviderDocumentObject is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.link_proxy._ViewProviderLink'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type ViewProviderDocumentObject is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.link_proxy._ViewProviderLink'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type ViewProviderDocumentObject is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.link_proxy._ViewProviderLink'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type ViewProviderDocumentObject is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.joint_proxy._ViewProviderJoint'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type ViewProviderDocumentObject is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.joint_proxy._ViewProviderJoint'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type ViewProviderDocumentObject is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.joint_proxy._ViewProviderJoint'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type ViewProviderDocumentObject is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.joint_proxy._ViewProviderJoint'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type ViewProviderDocumentObject is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.joint_proxy._ViewProviderJoint'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type ViewProviderDocumentObject is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.joint_proxy._ViewProviderJoint'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type ViewProviderDocumentObject is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.link_proxy._ViewProviderLink'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type ViewProviderDocumentObject is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.robot_proxy._ViewProviderRobot'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type ViewProviderDocumentObject is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.link_proxy._ViewProviderLink'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type ViewProviderDocumentObject is not JSON serializable
PropertyPythonObject::toString(): failed for <class 'freecad.cross.link_proxy._ViewProviderLink'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
<class 'TypeError'>: Object of type ViewProviderDocumentObject is not JSON serializable

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.