
This page is a placeholder for keeping a list of desired functionality and improvements to PythonCAD. If there is something that you think is missing in PythonCAD, or something doesn't work like you expect, take a look here and see if it is listed below. This page isn't meant to be a bug-tracking page; think of it more like a sounding board for enhancements to the program.
Here are things that must get added to PythonCAD before the first stable release. This list will most likely grow for a while before it starts getting shorter ...
A must have for any serious CAD package. There is a file in the program that holds the barest fragments of the first explorations as how to code up a hatching routine. The way to make hatching easiest for the user would be to have the program determine the hatch area based on where the mouse button was clicked. Doing that can get complex, as the routine should handle closed areas held within a larger closed area. For example, think of two concentric circles, and the mouse is clicked between at some point between the two. The resulting hatched should then be between the circles, but the area inside the smallest circle should not be included. Things can get much more complex for drawings with lots of lines, circles, etc. A possibly easier to code approach would require the user to select the boundaries for the hatched area by clicking on all the edges, though this approach makes the hatching process more tedious.
Update: The fifth release begins adding changes for implementing hatching. Implementing a robust hatching algorithm is proving to be very difficult though, and references to such algorithms or strategies would be welcomed.
PythonCAD can now print! The seventeenth release of the program can generate a PostScript file that can be sent to a printer or saved to a file. Upcoming releases will enhance the printing abilities as well as address known deficiencies in the initial implementation.
The lack of angular dimensioning must be addressed, and improvements to the existing dimensioning functionality need to be added.
Update: The fourth release adds angular dimensioning
capabilities. The dimension is only available in degrees, but adding
Gradient units is likely. I do not see offering a Radian
unit for angular dimensions as being useful, but it could be added.
The fourth release also adds the ability to display linear dimensions,
and improves the display of the dimension text for all dimension
types.
Update: The fifth release adds the display of dimension markers like arrows, slashes, and circles.
Update: The eighth release adds the ability to set the size of the dimension markers. Furtheremore the setting of the dimension bar colors and dimension text colors are now available.
Update: As of the twenty-eighth release the ability to add and edit dimensions seems complete.
Drawing and saving text is missing at the moment. Adding a text-entry routine, and saving or loading the text to and from a file is believed to be a relatively small task. Unicode support in Python makes supporting non-ASCII alphabets a simpler task than in languages like C, too. The goal in supporting text within PythonCAD should be to imagine working with a file containing text in various languages.
Update: The sixth release add the ability to enter text into a drawing. Text modification is missing, as is the ability to adjust font parameters, but these shortcomings will be addressed in an upcoming release.
Update: The eighth release adds the ability to set the font color.
Update: As of the twenty-eighth release PythonCAD has basic editing abilities for TextBlock objects in a drawing. Future releases will enhance the adjustment of the text in a TextBlock when the text itself is added to a drawing.
Update: The seventeenth release greatly improves the text handling abilities of the program. The text size is no longer specified as points but as a sized object like the other drawing entities. The ability to modify existing text entities in the drawing has been enhanced as well.
What is not clear is just what format should be used to save them. There will be two preference files that will be read - a global preference file, and then a user preference file. The global preference file may have an option where it will tell the program not to load up the user preferences. For sites with lots of users, this could be a useful way to ensure that everyone is running with the same setup. Another idea is limit the ability of individual users loading up their own preferences. This could be useful if a few people have special requirements, or are testing new settings. As none of the preference saving code exists yet, the ideas just presented are nothing more than that.
Update: The fifth release adds the functionality of reading a global and user preferences file. The format of the file is Python code, so it should be simple for anyone with Python experience to read and modify. Also, using Python as the format allows the use of standard Python modules to read and parse the file. The idea mentioned above about the global preference file controlling the reading of the user preference file is implemented. A future release may refine this to be on a per-user basis.
Update: The eighth release has a unified preference dialog box as opposed to the two dialogs in prior releases. It is likely that the layout of the preference dialog will be adjusted over several upcoming releases.
This section lists improvements to features that the program currently offers. This list also should contain suggestions for new features that the program could offer.
Many CAD packages offer a number of linetypes, and not all the lines are meant for drawing the outline of some object. Leader lines are commonly used to point from some text message to a point on the thing being drawn, for example.
Update: Leader lines are available as of the fifth release.
These can be done now by editing the source code, but they really need an interactive means of doing this. The resulting style, linetype, or dimension style should be able to be stored off and reused, so adding these features may have to wait until the Preferences storage and retrieval features are added.
Update: The fifth release adds the global and user preference files, and these files can be used to store and add new styles, linetypes, and dimension styles for drawing. There still is no interactive means of doing this yet, but the preference files do offer a way of adding functionality to the program without having to modify the program code itself.
Update: The sixth release adds the ability to define text styles in the preferences file.
This is close to being moved to the missing functionality section above. The program should be able to make backup copies of whatever file you have open at some interval, and possibly keep multiple backups of each. That way, if both the current file and latest backup get mangled, there would be earlier backups that could be retrieved.
What is needed to add these abilities is coming up with an approach on just how to do it. The program should definitely be able to undo whatever the last action did, and probably allow you to keep undoing things up to some point before that. Anyone care to make a suggestion?
Update: Undo/Redo abilities make their first appearance in the thirteenth release. The fourteenth release improves the undo/redo work found in the thirteenth release greatly.
Update: The seventeenth release improves the undo/redo abilities even more. Planned work for upcoming releases should provide similiar improvements as well.
Update: As of the twenty-eighth release the undo/redo abilities of the program are working well. Future releases will continue to improve this feature as well as address any problems discovered with its use.
This topic is discussed on other pages on this website, and is definitely a feature that PythonCAD should have. Developer time and effort are needed in deciding which formats to import from or export to. Exporting a file to the SVG format would be a great way to make the files viewable from a wide variety of applications outside the CAD environment. As PythonCAD uses XML for storing files, exporting to SVG may be simpler than export to other CAD formats (i.e. DXF). Possibly exporting the files to a bit-mapped file such as PNG may be useful too.
Update: As of the sixth release, I have received mail from people indicating that they were looking at beginning translators for DXF files.
Adding these functions should be relatively simple, so expect them to appear soon in an upcoming release. The code for calculating intersection points is already in place, as is the code to calculate the where on an object the mouse was clicked, so there should be relatively little new code needed for these functions.
Update: Splitting was added in the third release, and seems to work well. The speed of splitting a large number of entities is a bit slow, though, so work to improve this deficiency is needed.
Update: The splitting code has been worked on in the seventh and eighth releases. The code is currently faster and more robust than in the earlier releases, though still more work remains to be done.
Items listed here are similar to enhancements, and could easily be thought of as such. What would be better, though, are ideas that will push PythonCAD to offer features that no other CAD package currently provides. Think of things that you have always wanted to see in a CAD program but never found available, and add them here.
The idea here is to store templates for objects that you commonly draw on one or two machines, and make those templates accessible via some network connection to any number of machines. Suppose that you had a set of templates for various bolts, and these templates were being used by lots of people. One way to give everyone access to the template library is to install the template on a single machine, and have them run the program from that machine. Another approach could be to install the library on a disk that is accessible remotely, perhaps via NFS. A third option is to install the template library on each and every machine that someone who needs access to it uses. These are all acceptable ways of solving this type of problem, but each has problems. If everyone uses the same machine, the machine could get very slow. Remote disk access fails if the access to that disk is lost, and trying to keep a potentially large number of installations updated is non-trivial.
The idea I envision is that the access to the templates could be started at any time after the program starts. The user would select a menu item, the program would connect to whatever template server the user had selected, then a window would appear listing all the templates that server provides. After finding the desired template, the user would select it through some means, PythonCAD would load the template from the server, then the user would place it into the drawing. The template window could be left open if the user needs more templates. Possibly the server could be changed interactively, and the available template list refreshed while the window is open.
At a former job, I was responsible for the CAD software, and the company had numerous sites that used the package. A networked template library like described above would have made keeping all the sites in sync much simpler.