Hi, I am (as you both know) one of the people working on FreeCAD... There's some time I didn't look at the pythoncad code, I'm cloning right now. I have a couple of thoughts on that subject:
First I think trying to behave like AutoCAD is dangerous. AutoCAD is an old prehistoric monster, and its interface is the accumulation of 20 years of features, and I think we can do much better today than the old "command line" that every autocad user says "I can't live without". Being able to do everything with the keyboard is relatively easy, and doesn't necessarily require the same implementation as autocad. In fact, today, even autocad tries to "hide" its command line in favor of that "tooltip" input box. PythonCAD is very simple, and it is an advantage, I think.
About going 3D, I think it is easy and hard at the same time. Adding a Z coordinate to everything (which would basically always be = 0 in the first times) should be easy, specially in python. Having all the 2D tools behaving in 3D is not so easy, but not too difficult either (I just did it for the 2D drawign module of FreeCAD). I think the hardest part would be integrating in another software, because MANY things of PythonCAD will need to be recoded, mostly because you won't draw on your own canvas anymore, and will need to use the host application's object types.
I think one path might be the most interesting: Since many of current open-source 3D applications have a python console, an interesting thing could be to try to turn PythonCAD into an importable python module. Then, you can import PythonCAD into the host application, and play with it from there, create entites, etc. Then, all you would need basically is an "interface" that would convert PythonCAD entities into the host application's entites type. Doing that way would also allow you not to decide which application to support, but test them first and see what fits your needs better.
Another thought I have on that matter: The biggest problem of python is that it is slow. In a CAD application, this is in 90% of the time not important. When you execute a drawing command, you don't care if it takes 2 milliseconds or 5 milliseconds. The only point where it can be important is for example when redrawing the screen. If you have thousands of objects, the redraw will take time. "Hosting" PythonCAD into another (OpenGL-based for example) application would allow you to kill that problem. The host app would take care of fast operations such as screen redraw, etc, and PythonCAD takes care of stuff where speed is not important. So I think your idea makes much sense.
FreeCAD already has a 2D module that's more or less working (I'd be glad if someone here could have a look at it and give me some feedback :), but blender is indeed a project that could be very interesting to look at. The main problem I see is that currently in blender you can add stuff to the scene with python, but not "draw" to the screen. That means, doing things like seeing your line while you draw, or drawing snap marks is quite hard. But that kind of things is expected to change drastically with the new 2.50 release. So it might be a perfect time to try something...
And the blender interface is *extremely* fast...
Sorry for the long bla-bla :)
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Thanks Yorik for your inputs. I Have following to say:
There are 2 issues coming up
1. Adding few features in PythonCAD which helps an AutoCAD user with smallest learning curve can be one of the "Selling point" which can have more users looking at PythonCAD as their first 2D cad option. We may monitor such requests under DIFFERENT TRACKER.
2. Your idea of having pythoncad as 2D editor blender is also good idea which matches Matteo's view. My dream for PythonCAD is if there is 3D-CAD which supports python scripting (like Blender) then:
2.1 Blender user should be able to open a PythonCAD from within blender.
2.2 Create 2D drawing in PythonCAD.
2.3 Once the 2D cadding is done user moves to blender by closing pythoncad window.
2.4 Blender prompts for 3 points (origin, + 2points to defing the plane).
2.5 Drawing created in PytonCAD is now imported in the user defined plane.
We do have a developer on board who have worked on blender hope we can make some progress here.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
In first istance we need to bacame stable and full featured 2d cad..
To move in 3d mens to rewrite in total the structure (for exsample point have just 2d cooords)..
I Know that thare is a project in blender to make a blender a 3d cad...(Written in python)
Pythoncad could be the 2d part of it...
Surfing on sourceforge there are a lot of 3d cad that are only 3d .. the 2d is very poor...
So In my Plan is to join a 3d opensource cad and make pythoncad the 2d part of it..
That is a good thought . . .
Main thing which has kept me monitoring PythonCAD is its
AutoCAD type behavior. ie keyboard and mouse.
Making PythonCAD more to behave like AutoCAD can be our next goal.
Hi, I am (as you both know) one of the people working on FreeCAD... There's some time I didn't look at the pythoncad code, I'm cloning right now. I have a couple of thoughts on that subject:
First I think trying to behave like AutoCAD is dangerous. AutoCAD is an old prehistoric monster, and its interface is the accumulation of 20 years of features, and I think we can do much better today than the old "command line" that every autocad user says "I can't live without". Being able to do everything with the keyboard is relatively easy, and doesn't necessarily require the same implementation as autocad. In fact, today, even autocad tries to "hide" its command line in favor of that "tooltip" input box. PythonCAD is very simple, and it is an advantage, I think.
About going 3D, I think it is easy and hard at the same time. Adding a Z coordinate to everything (which would basically always be = 0 in the first times) should be easy, specially in python. Having all the 2D tools behaving in 3D is not so easy, but not too difficult either (I just did it for the 2D drawign module of FreeCAD). I think the hardest part would be integrating in another software, because MANY things of PythonCAD will need to be recoded, mostly because you won't draw on your own canvas anymore, and will need to use the host application's object types.
I think one path might be the most interesting: Since many of current open-source 3D applications have a python console, an interesting thing could be to try to turn PythonCAD into an importable python module. Then, you can import PythonCAD into the host application, and play with it from there, create entites, etc. Then, all you would need basically is an "interface" that would convert PythonCAD entities into the host application's entites type. Doing that way would also allow you not to decide which application to support, but test them first and see what fits your needs better.
Another thought I have on that matter: The biggest problem of python is that it is slow. In a CAD application, this is in 90% of the time not important. When you execute a drawing command, you don't care if it takes 2 milliseconds or 5 milliseconds. The only point where it can be important is for example when redrawing the screen. If you have thousands of objects, the redraw will take time. "Hosting" PythonCAD into another (OpenGL-based for example) application would allow you to kill that problem. The host app would take care of fast operations such as screen redraw, etc, and PythonCAD takes care of stuff where speed is not important. So I think your idea makes much sense.
FreeCAD already has a 2D module that's more or less working (I'd be glad if someone here could have a look at it and give me some feedback :), but blender is indeed a project that could be very interesting to look at. The main problem I see is that currently in blender you can add stuff to the scene with python, but not "draw" to the screen. That means, doing things like seeing your line while you draw, or drawing snap marks is quite hard. But that kind of things is expected to change drastically with the new 2.50 release. So it might be a perfect time to try something...
And the blender interface is *extremely* fast...
Sorry for the long bla-bla :)
Thanks Yorik for your inputs. I Have following to say:
There are 2 issues coming up
1. Adding few features in PythonCAD which helps an AutoCAD user with smallest learning curve can be one of the "Selling point" which can have more users looking at PythonCAD as their first 2D cad option. We may monitor such requests under DIFFERENT TRACKER.
2. Your idea of having pythoncad as 2D editor blender is also good idea which matches Matteo's view. My dream for PythonCAD is if there is 3D-CAD which supports python scripting (like Blender) then:
2.1 Blender user should be able to open a PythonCAD from within blender.
2.2 Create 2D drawing in PythonCAD.
2.3 Once the 2D cadding is done user moves to blender by closing pythoncad window.
2.4 Blender prompts for 3 points (origin, + 2points to defing the plane).
2.5 Drawing created in PytonCAD is now imported in the user defined plane.
We do have a developer on board who have worked on blender hope we can make some progress here.