FreeCAD .FCStd importer for Blender 2.80

Need help, or want to share a macro? Post here!
Forum rules
Be nice to others! Respect the FreeCAD code of conduct!
User avatar
s-light
Posts: 119
Joined: Thu Feb 12, 2015 11:39 am
Location: Germany, Hofheim am Taunus
Contact:

FreeCAD .FCStd importer for Blender 2.80

Post by s-light »

Hello all :-)

today i allowed me to 'fork' yorikvanhavre great io_import_fcstd blender addon.

i have created a github repository so its easier to manage additions from different people:
https://github.com/s-light/io_import_fcstd

@yorik i hope it is ok for you how i have done this...
(if you like, iam happy to add you as Collaborator)
pleas let me know what you think of it!

This topic should be a 'go to' resource that is also linked from the repository readme..

my first goal is to add some PartDesign support in there in the next days...

sunny greetings
stefan
User avatar
Kunda1
Veteran
Posts: 13434
Joined: Thu Jan 05, 2017 9:03 pm

Re: FreeCAD .FCStd importer for Blender 2.80

Post by Kunda1 »

Very cool. Yea, I wondered why yorik put that in a gist and not in a repo.

BTW, Our forum software is lame when it comes to @mentions. You need to do this thing to get @yorik's attention (which BTW, will only be when he gets back from vacation).
Actually, I'm slightly joking, the most important part is the user_id :point_up_2:
Alone you go faster. Together we go farther
Please mark thread [Solved]
Want to contribute back to FC? Checkout:
'good first issues' | Open TODOs and FIXMEs | How to Help FreeCAD | How to report Bugs
User avatar
s-light
Posts: 119
Joined: Thu Feb 12, 2015 11:39 am
Location: Germany, Hofheim am Taunus
Contact:

Re: FreeCAD .FCStd importer for Blender 2.80

Post by s-light »

thanks Kunda1.

slowly i make progress ;-)
currently split up the 'mega long all in one' function into 'meaningfull' sub-functions..
as i use the 0.19 daily builds i also created some test FreeCAD files with linked together things..

hopefully i am able to get this working ;-)

sunny greetings
User avatar
Kunda1
Veteran
Posts: 13434
Joined: Thu Jan 05, 2017 9:03 pm

Re: FreeCAD .FCStd importer for Blender 2.80

Post by Kunda1 »

s-light wrote: Fri Oct 04, 2019 3:54 pm slowly i make progress ;-)
Great news!
Test files are very much appreciated as well.
Thanks for your work so far.
Cheers!
Alone you go faster. Together we go farther
Please mark thread [Solved]
Want to contribute back to FC? Checkout:
'good first issues' | Open TODOs and FIXMEs | How to Help FreeCAD | How to report Bugs
User avatar
s-light
Posts: 119
Joined: Thu Feb 12, 2015 11:39 am
Location: Germany, Hofheim am Taunus
Contact:

Re: FreeCAD .FCStd importer for Blender 2.80

Post by s-light »

i started to experiment with the 'Part' group things...
but found a major problem:
from the script i can not find the 'body' objects.
more details in
https://forum.freecadweb.org/viewtopic.php?f=22&t=39779
if anybody has a idea why this is the case please let me know...

for the 'body' (aka PartDesign) objects my idea was to let the script just create a 'simple copy' of this and add it then with the existing part-to-mesh function.

for the 'Part' (aka Groups) my idea was to just traverse the group objects recusive - and in this way just import all the objects..

sunny greetings
stefan
vocx
Veteran
Posts: 5197
Joined: Thu Oct 18, 2018 9:18 pm

Re: FreeCAD .FCStd importer for Blender 2.80

Post by vocx »

s-light wrote: Sat Oct 05, 2019 2:54 am ...
from the script i can not find the 'body' objects.
...
I didn't check with detail your tests, but I think you can test for obj.TypeId == "PartDesign::Body".

Each PartDesign Body has a Tip which indicates the last feature that it contains, and therefore the solid object that you want to export. That is, you don't want every intermediate operation in the Body, only its Tip.

Code: Select all

shapes = []
doc = App.ActiveDocument
for obj in doc.Objects:
    if obj.TypeId == "PartDesign::Body":
        print(obj.Label)
        shapes.append(obj.Tip.Shape)
And then you convert all shapes to mesh and export to Blender.
Always add the important information to your posts if you need help. Also see Tutorials and Video tutorials.
To support the documentation effort, and code development, your donation is appreciated: liberapay.com/FreeCAD.
User avatar
s-light
Posts: 119
Joined: Thu Feb 12, 2015 11:39 am
Location: Germany, Hofheim am Taunus
Contact:

Re: FreeCAD .FCStd importer for Blender 2.80

Post by s-light »

hi vocx,

thanks for your reply!
the hint with the tip is very good ;-)

currently iam not getting any "PartDesign::Body" objects if i read the document from a python script outside FreeCAD.
that is my main problem..

i stripped down the test script to a 'basic stand alone script':
https://github.com/s-light/io_import_fc ... _simple.py
(you have just to change the path to FreeCAD.so and to your .FCStd file)

if i copy and past it into the FreeCAD python console i get this output:

Code: Select all

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> objects = doc.Objects
>>> print("doc.Objects", len(objects))
doc.Objects 85
>>> print_objects(objects)
     Name            Label                     TypeId                   p [Parents]  i [InList]  o [OutList]  g [Group]  
obj: Part            my_final_assembly         App::Part                p:0  i:0  o:7  g:6  
obj: Origin          Origin                    App::Origin              p:1  i:1  o:6  
obj: X_Axis          X_Axis                    App::Line                p:0  i:1  o:0  
obj: Y_Axis          Y_Axis                    App::Line                p:0  i:1  o:0  
obj: Z_Axis          Z_Axis                    App::Line                p:0  i:1  o:0  
obj: XY_Plane        XY_Plane                  App::Plane               p:0  i:1  o:0  
obj: XZ_Plane        XZ_Plane                  App::Plane               p:0  i:1  o:0  
obj: YZ_Plane        YZ_Plane                  App::Plane               p:0  i:1  o:0  
obj: Link            box_panel_part            App::Link                p:1  i:1  o:3  g:1  
obj: Link001         front_panel_part          App::Link                p:1  i:1  o:1  g:1  
obj: Link_i0         Link_i0                   App::LinkElement         p:2  i:2  o:3  g:1  
obj: Link_i1         Link_i1                   App::LinkElement         p:2  i:2  o:3  g:1  
obj: Link002         lamp_part                 App::Link                p:2  i:2  o:1  g:2  
obj: Array           lamp_Array                Part::FeaturePython      p:1  i:1  o:3  
obj: Body            floor_body                PartDesign::Body         p:1  i:3  o:5  g:3  
obj: Origin001       Origin001                 App::Origin              p:1  i:1  o:6  
obj: X_Axis001       X_Axis001                 App::Line                p:0  i:1  o:0  
obj: Y_Axis001       Y_Axis001                 App::Line                p:0  i:1  o:0  
obj: Z_Axis001       Z_Axis001                 App::Line                p:0  i:1  o:0  
obj: XY_Plane001     XY_Plane001               App::Plane               p:0  i:2  o:0  
obj: XZ_Plane001     XZ_Plane001               App::Plane               p:0  i:1  o:0  
obj: YZ_Plane001     YZ_Plane001               App::Plane               p:0  i:1  o:0  
obj: Sketch          floor_Sketch              Sketcher::SketchObject   p:1  i:2  o:1  
obj: Pad             floor_Pad                 PartDesign::Pad          p:1  i:3  o:1  
obj: Box             Cube_Hidden               Part::Box                p:0  i:0  o:0  
obj: Sphere          world_sphere              Part::Sphere             p:0  i:0  o:0  
obj: Part001         octagon_part              App::Part                p:0  i:0  o:2  g:1  
obj: Origin002       octagon_Origin            App::Origin              p:1  i:1  o:6  
obj: X_Axis002       X_Axis002                 App::Line                p:0  i:1  o:0  
obj: Y_Axis002       Y_Axis002                 App::Line                p:0  i:1  o:0  
obj: Z_Axis002       Z_Axis002                 App::Line                p:0  i:1  o:0  
obj: XY_Plane002     XY_Plane002               App::Plane               p:0  i:1  o:0  
obj: XZ_Plane002     XZ_Plane002               App::Plane               p:0  i:1  o:0  
obj: YZ_Plane002     YZ_Plane002               App::Plane               p:0  i:1  o:0  
obj: Body001         octagon_body              PartDesign::Body         p:1  i:1  o:5  g:3  
obj: Origin003       Origin003                 App::Origin              p:1  i:1  o:6  
obj: X_Axis003       X_Axis003                 App::Line                p:0  i:1  o:0  
obj: Y_Axis003       Y_Axis003                 App::Line                p:0  i:1  o:0  
obj: Z_Axis003       Z_Axis003                 App::Line                p:0  i:1  o:0  
obj: XY_Plane003     XY_Plane003               App::Plane               p:0  i:2  o:0  
obj: XZ_Plane003     XZ_Plane003               App::Plane               p:0  i:1  o:0  
obj: YZ_Plane003     YZ_Plane003               App::Plane               p:0  i:1  o:0  
obj: Sketch001       octagon_sketch            Sketcher::SketchObject   p:1  i:2  o:1  
obj: Pad001          octagon_Pad               PartDesign::Pad          p:1  i:3  o:1  
obj: Fillet          octagon_Fillet            PartDesign::Fillet       p:2  i:2  o:2  
obj: Fillet001       Fillet001                 PartDesign::Fillet       p:2  i:2  o:2  
obj: Cone            blue_cone                 Part::Cone               p:0  i:0  o:0  
obj: Box001          cube_colorfull            Part::Box                p:0  i:2  o:0  
obj: Part002         floor_part                App::Part                p:0  i:0  o:2  g:1  
obj: Origin004       Origin004                 App::Origin              p:1  i:1  o:6  
obj: X_Axis004       X_Axis004                 App::Line                p:0  i:1  o:0  
obj: Y_Axis004       Y_Axis004                 App::Line                p:0  i:1  o:0  
obj: Z_Axis004       Z_Axis004                 App::Line                p:0  i:1  o:0  
obj: XY_Plane004     XY_Plane004               App::Plane               p:0  i:1  o:0  
obj: XZ_Plane004     XZ_Plane004               App::Plane               p:0  i:1  o:0  
obj: YZ_Plane004     YZ_Plane004               App::Plane               p:0  i:1  o:0  
obj: Body002         root_body                 PartDesign::Body         p:0  i:0  o:5  g:3  
obj: Origin005       Origin005                 App::Origin              p:1  i:1  o:6  
obj: X_Axis005       X_Axis005                 App::Line                p:0  i:1  o:0  
obj: Y_Axis005       Y_Axis005                 App::Line                p:0  i:1  o:0  
obj: Z_Axis005       Z_Axis005                 App::Line                p:0  i:1  o:0  
obj: XY_Plane005     XY_Plane005               App::Plane               p:0  i:2  o:0  
obj: XZ_Plane005     XZ_Plane005               App::Plane               p:0  i:1  o:0  
obj: YZ_Plane005     YZ_Plane005               App::Plane               p:0  i:1  o:0  
obj: Sketch002       Sketch002                 Sketcher::SketchObject   p:1  i:2  o:1  
obj: Pad002          Pad002                    PartDesign::Pad          p:1  i:3  o:1  
obj: Fillet002       Fillet002                 PartDesign::Fillet       p:2  i:2  o:2  
obj: Body003         cube_part_clone_Body      PartDesign::Body         p:0  i:0  o:4  g:1  
obj: Origin006       Origin006                 App::Origin              p:1  i:1  o:6  
obj: X_Axis006       X_Axis006                 App::Line                p:0  i:1  o:0  
obj: Y_Axis006       Y_Axis006                 App::Line                p:0  i:1  o:0  
obj: Z_Axis006       Z_Axis006                 App::Line                p:0  i:1  o:0  
obj: XY_Plane006     XY_Plane006               App::Plane               p:0  i:1  o:0  
obj: XZ_Plane006     XZ_Plane006               App::Plane               p:0  i:1  o:0  
obj: YZ_Plane006     YZ_Plane006               App::Plane               p:0  i:1  o:0  
obj: Clone           cube_part_clone           PartDesign::FeatureBase  p:2  i:2  o:1  
obj: Body004         floor_body_clone_Body     PartDesign::Body         p:0  i:0  o:4  g:1  
obj: Origin007       Origin007                 App::Origin              p:1  i:1  o:6  
obj: X_Axis007       X_Axis007                 App::Line                p:0  i:1  o:0  
obj: Y_Axis007       Y_Axis007                 App::Line                p:0  i:1  o:0  
obj: Z_Axis007       Z_Axis007                 App::Line                p:0  i:1  o:0  
obj: XY_Plane007     XY_Plane007               App::Plane               p:0  i:1  o:0  
obj: XZ_Plane007     XZ_Plane007               App::Plane               p:0  i:1  o:0  
obj: YZ_Plane007     YZ_Plane007               App::Plane               p:0  i:1  o:0  
obj: Clone001        floor_body_clone          PartDesign::FeatureBase  p:2  i:2  o:1  
>>> print("~"*42)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> 
>>> print_obj_with_label(doc, "my_final_assembly")
obj: Part            my_final_assembly         App::Part                p:0  i:0  o:7  g:6  
>>> print_obj_with_label(doc, "octagon_part")
obj: Part001         octagon_part              App::Part                p:0  i:0  o:2  g:1  
>>> print_obj_with_label(doc, "octagon_body")
obj: Body001         octagon_body              PartDesign::Body         p:1  i:1  o:5  g:3  
>>> 
if i run it from commandline:

Code: Select all

stefan@stefan-Latitude-E6510:~/mydata/github/blender/io_import_fcstd/dev (master)$ ./list_objects_simple.py 
Configured FreeCAD path: /usr/lib/freecad-daily-python3/lib
Sheet Metal workbench loaded
FreeCAD version: ['0', '19', '', 'https://code.launchpad.net/~vcs-imports/freecad/trunk', '2019/10/04 07:36:31']
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
doc.Objects 72
     Name            Label                     TypeId                   p [Parents]  i [InList]  o [OutList]  g [Group]  
obj: Part            my_final_assembly         App::Part                p:0  i:0  o:7  g:6  
obj: Origin          Origin                    App::Origin              p:1  i:1  o:6  
obj: X_Axis          X_Axis                    App::Line                p:0  i:1  o:0  
obj: Y_Axis          Y_Axis                    App::Line                p:0  i:1  o:0  
obj: Z_Axis          Z_Axis                    App::Line                p:0  i:1  o:0  
obj: XY_Plane        XY_Plane                  App::Plane               p:0  i:1  o:0  
obj: XZ_Plane        XZ_Plane                  App::Plane               p:0  i:1  o:0  
obj: YZ_Plane        YZ_Plane                  App::Plane               p:0  i:1  o:0  
obj: Link            box_panel_part            App::Link                p:1  i:1  o:3  g:0  
obj: Link001         front_panel_part          App::Link                p:1  i:1  o:1  g:0  
obj: Link_i0         Link_i0                   App::LinkElement         p:2  i:2  o:3  g:0  
obj: Link_i1         Link_i1                   App::LinkElement         p:2  i:2  o:3  g:0  
obj: Link002         lamp_part                 App::Link                p:1  i:2  o:1  g:0  
obj: Array           lamp_Array                Part::FeaturePython      p:1  i:1  o:3  
obj: Origin001       Origin001                 App::Origin              p:0  i:0  o:6  
obj: X_Axis001       X_Axis001                 App::Line                p:0  i:1  o:0  
obj: Y_Axis001       Y_Axis001                 App::Line                p:0  i:1  o:0  
obj: Z_Axis001       Z_Axis001                 App::Line                p:0  i:1  o:0  
obj: XY_Plane001     XY_Plane001               App::Plane               p:0  i:2  o:0  
obj: XZ_Plane001     XZ_Plane001               App::Plane               p:0  i:1  o:0  
obj: YZ_Plane001     YZ_Plane001               App::Plane               p:0  i:1  o:0  
obj: Sketch          floor_Sketch              Sketcher::SketchObject   p:0  i:0  o:1  
obj: Box             Cube_Hidden               Part::Box                p:0  i:0  o:0  
obj: Sphere          world_sphere              Part::Sphere             p:0  i:0  o:0  
obj: Part001         octagon_part              App::Part                p:0  i:0  o:1  g:0  
obj: Origin002       octagon_Origin            App::Origin              p:1  i:1  o:6  
obj: X_Axis002       X_Axis002                 App::Line                p:0  i:1  o:0  
obj: Y_Axis002       Y_Axis002                 App::Line                p:0  i:1  o:0  
obj: Z_Axis002       Z_Axis002                 App::Line                p:0  i:1  o:0  
obj: XY_Plane002     XY_Plane002               App::Plane               p:0  i:1  o:0  
obj: XZ_Plane002     XZ_Plane002               App::Plane               p:0  i:1  o:0  
obj: YZ_Plane002     YZ_Plane002               App::Plane               p:0  i:1  o:0  
obj: Origin003       Origin003                 App::Origin              p:0  i:0  o:6  
obj: X_Axis003       X_Axis003                 App::Line                p:0  i:1  o:0  
obj: Y_Axis003       Y_Axis003                 App::Line                p:0  i:1  o:0  
obj: Z_Axis003       Z_Axis003                 App::Line                p:0  i:1  o:0  
obj: XY_Plane003     XY_Plane003               App::Plane               p:0  i:2  o:0  
obj: XZ_Plane003     XZ_Plane003               App::Plane               p:0  i:1  o:0  
obj: YZ_Plane003     YZ_Plane003               App::Plane               p:0  i:1  o:0  
obj: Sketch001       octagon_sketch            Sketcher::SketchObject   p:0  i:0  o:1  
obj: Cone            blue_cone                 Part::Cone               p:0  i:0  o:0  
obj: Box001          cube_colorfull            Part::Box                p:0  i:0  o:0  
obj: Part002         floor_part                App::Part                p:0  i:0  o:1  g:0  
obj: Origin004       Origin004                 App::Origin              p:1  i:1  o:6  
obj: X_Axis004       X_Axis004                 App::Line                p:0  i:1  o:0  
obj: Y_Axis004       Y_Axis004                 App::Line                p:0  i:1  o:0  
obj: Z_Axis004       Z_Axis004                 App::Line                p:0  i:1  o:0  
obj: XY_Plane004     XY_Plane004               App::Plane               p:0  i:1  o:0  
obj: XZ_Plane004     XZ_Plane004               App::Plane               p:0  i:1  o:0  
obj: YZ_Plane004     YZ_Plane004               App::Plane               p:0  i:1  o:0  
obj: Origin005       Origin005                 App::Origin              p:0  i:0  o:6  
obj: X_Axis005       X_Axis005                 App::Line                p:0  i:1  o:0  
obj: Y_Axis005       Y_Axis005                 App::Line                p:0  i:1  o:0  
obj: Z_Axis005       Z_Axis005                 App::Line                p:0  i:1  o:0  
obj: XY_Plane005     XY_Plane005               App::Plane               p:0  i:2  o:0  
obj: XZ_Plane005     XZ_Plane005               App::Plane               p:0  i:1  o:0  
obj: YZ_Plane005     YZ_Plane005               App::Plane               p:0  i:1  o:0  
obj: Sketch002       Sketch002                 Sketcher::SketchObject   p:0  i:0  o:1  
obj: Origin006       Origin006                 App::Origin              p:0  i:0  o:6  
obj: X_Axis006       X_Axis006                 App::Line                p:0  i:1  o:0  
obj: Y_Axis006       Y_Axis006                 App::Line                p:0  i:1  o:0  
obj: Z_Axis006       Z_Axis006                 App::Line                p:0  i:1  o:0  
obj: XY_Plane006     XY_Plane006               App::Plane               p:0  i:1  o:0  
obj: XZ_Plane006     XZ_Plane006               App::Plane               p:0  i:1  o:0  
obj: YZ_Plane006     YZ_Plane006               App::Plane               p:0  i:1  o:0  
obj: Origin007       Origin007                 App::Origin              p:0  i:0  o:6  
obj: X_Axis007       X_Axis007                 App::Line                p:0  i:1  o:0  
obj: Y_Axis007       Y_Axis007                 App::Line                p:0  i:1  o:0  
obj: Z_Axis007       Z_Axis007                 App::Line                p:0  i:1  o:0  
obj: XY_Plane007     XY_Plane007               App::Plane               p:0  i:1  o:0  
obj: XZ_Plane007     XZ_Plane007               App::Plane               p:0  i:1  o:0  
obj: YZ_Plane007     YZ_Plane007               App::Plane               p:0  i:1  o:0  
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
obj: Part            my_final_assembly         App::Part                p:0  i:0  o:7  g:6  
obj: Part001         octagon_part              App::Part                p:0  i:0  o:1  g:0  
object with label 'octagon_body' not found.
tests done :-)
intern it lists 85 objects.
from extern only 72.

and i also tried with 'doc.getObjectsByLabel'
and the 'octagon_body' is not found if called from extern.

and yes - the hole blender FreeCAD import is finally running from inside blender.
and i would like to not have a second 'exporter' in FreeCAD...
(this would make 'update handling' more difficullt i think..)

iam happy to try anithing to get to the root cause for this :-)

sunny greetigns
stefan
User avatar
pl7i92LCNC
Posts: 208
Joined: Tue Mar 12, 2019 3:03 pm
Location: RLP DE

Re: FreeCAD .FCStd importer for Blender 2.80

Post by pl7i92LCNC »

this will import the whole house projekt
Bayesian
Posts: 90
Joined: Thu Aug 08, 2019 1:49 pm

Re: FreeCAD .FCStd importer for Blender 2.80

Post by Bayesian »

Hm, if anyone is interested, I think that importing FCStd from Blender is not the optimal approach. I think it would be better to export Objects or scenes to something that Blender can handle. Optionally from a FreeCAD instance to a Blender instance through a REST API or some other RPC protocol in Blender, though I have yet to figure out how to put asyncio into FreeCAD. Threaded requests may also work, though.

The reason is that there are so many different usecases for combining Blender and FC:
- Design individual parts in FreeCAD documents, assemble them in Blender, add materials constraints or animations manually: Here I would recommend a macro that exports the objects to STL (or similar), then import them in Blender. Optionally a script inside Blender can refresh the meshes without screwing up anything else.
- Use one of the Assembly Workbenches to assemble the parts, maybe even define their motion and constraints, then create a scene inside Blender to match those. Maybe have a "material" property to assign materials from the Blend File to the objects automatically.
- Similar things apply to the Architecture Workbench.

Key point is that, most of the time, the data from FreeCAD is only a small part of what the Blend File will be. Especially if you want to iterate both in FreeCAD and Blender, you will need some way to reload the FreeCAD data. And the transformation of FreeCAD Data to Blender Data would depend on the usecase. Meshes are most obvious/constant, but colors, transforms, special things like lights and so on are more complicated.
User avatar
s-light
Posts: 119
Joined: Thu Feb 12, 2015 11:39 am
Location: Germany, Hofheim am Taunus
Contact:

Re: FreeCAD .FCStd importer for Blender 2.80

Post by s-light »

Hello all :-),
Hello Bayesian,
thanks for your input and your thoughts!!

i personally will focus on this importer for now - i am already on good way :-)
and its working for me right now ;-)
Thanks to yorik for the hard work of reactivating and porting it to 2.80!

i have added:
- 'App::Parts' (the yellow Part 'group' thing) - they are currently imported as blender 'collection'
- 'App::Link' (the new Link button) (similar as Parts → the get collections and an 'collection instance' is created)
- 'Part::FeaturePhyton' Arrays (the Linked Array Button from the Draft WB) similar to Link: instances are created

TODOs left:
- import 'updated' mesh for the above..
- add automatically parenting (for this we will need Blender Empties for the group objects like Parts/Links/..)

both of the points i am working on :-)

additionally the only thing missing is the import of 'PartDesign::Body' objects -
and here is just the problem as described earlier - currently i can not access them from the script..
(or at least currently i don't know how ;-) )
Bayesian wrote: Wed Oct 09, 2019 7:40 am Optionally a script inside Blender can refresh the meshes without screwing up anything else.
that is my goal for this importer if the 'update' option is set :-)
(and yorik prepared this really well!!)

you can import multiple FreeCAD documents right now -
every import gets its own blender collection - named after the imported file.
the only limitation is: every object needs a unique name.
in blender all objects are at the root level of the document - and are only 'linked' to one ore multiple scenes -
the collections are only a visual helper...
so if one file contains a object with the same name as an earlier file the later will overwrite the earlier one..

it would be easy to add an 'unique name' option. for example just add the document name in front of the object name. (i have already an internal option for a pre string in front of the object names ;-) )

other option would be to import every FreeCAD file as one Blender File and then use Blenders 'inter file linking' to create a combined file...
this way it would be possible to recreate the full FreeCAD linked document tree as Blender Files..
i posted this as an idea issues :-)

i love if you find a way to get things like this running smoother / more user friendly!
so pleas keep your ideas flowing :-)
or/and just create a pull request :D

sunny greetings
stefan
Post Reply