Dan, The use of C++-like iterators in the Freestyle Python API is a right thing and not something that needs to be addressed. I thought it was a SWIG/C++ dependency and tried to replace it with a better Pythonic syntax [1]. This attempt was not successful for the following reason, and now I think it is an integral part of the API design.
Two main abstract classes of the Freestyle API are 0D and 1D elements. The former is a point, and the latter is a polyline made of a series of 0D elements. The API has several base functor classes for 0D and 1D elements, such as function functors (Function0D and Function1D) and unary predicate functors (PredicateU0D and PredicateU1D). A 0D functor takes an iterator over 0D elements and performs computations on the 0D element pointed by the given iterator. This allows the 0D functor to perform the computation based on not only the given 0D element but also any other 0D elements before and after the 0D element. Suppose that we approximately compute the tangent of a curve at a point. We need to refer to the point as well as its previous and next points. Passing an iterator indicating the point is an elegant way of allowing you to access the three points. [1] http://freestyleintegration.wordpress.com/2010/05/23/weekly-update-may-10-23/ > I'm not suggesting you stop work on the current py-api and wait on my > slow ass or anything, just seeing if there's any interest in this > before starting any work on it. Yes, I took this opportunity to look at the present Python API design from a different perspective (i.e., from the viewpoint of API auto-generation). I really appreciate all the discussions on this matter. I will proceed with the finalization of Freestyle Python API improvements. Thank you, -- KAJIYAMA, Tamito <rd6t-k...@asahi-net.or.jp> -----Original Message----- From: Dan Eicher Sent: Friday, May 25, 2012 6:45 AM To: bf-blender developers Subject: Re: [Bf-committers] Freestyle branch status report May 2012 On Thu, May 24, 2012 at 7:01 PM, Tamito KAJIYAMA <rd6t-k...@asahi-net.or.jp> wrote: > Dan, > > Auto-generation of the Freestyle Python API would be great if that is > feasible and practical. There are about 150 Python wrappers of C++ classes, > and maintaining them manually has been a kinda painful excercise. > > Just for your information, I send you a link to a blog post that summarizes > problems and implemented solutions for improving the Freestyle Python API: > http://freestyleintegration.wordpress.com/2009/08/04/recent-commits-on-the-freestyle-python-api/ > I forward this to you, since there were several subtle issues that needed to > be addressed carefully. Honestly speaking, for this reason I am a bit > reluctant > to do a major revision of the present Python API implementation. > > As implicitly mentioned in the blog post, the C++ class system is quite static > (i.e., user extensions of the present class hierarchy are very unlikely). > There > are a limited number of C++ classes and their methods that are supposed to > be subclassed/overriden by Python subclasses (see Section 3.4 of the blog > article). Exploiting these characteristics of the C++ class system might help > you simplify the Python API auto-generation. > > Regards, > > -- > KAJIYAMA, Tamito <rd6t-k...@asahi-net.or.jp> > Looking over that blog post, freestyle code and pybindgen (which can indeed do iterators, who knew?) the only thing that would really need to change for it all to work would be adding methods like Interface1D.getVertices() which could be wrapped in python as Interface1D.vertices but would need to return the collection instead of the actual iterator. Then python would do the right thing if one were to write: for vert in i1D.vertices: do_stuff(vert) For the borrowed/owned reference stuff, pybindgen throws an exception if you don't specify that on function args and return values that are pointers or references so either way you have to tell it if it's owned or borrowed, no choice. Finally, for python sub-classing, that Just Works. Python can call C++ (non-pure virtual) base class methods, C++ can call overridden py-methods, everyone's happy. I'm not suggesting you stop work on the current py-api and wait on my slow ass or anything, just seeing if there's any interest in this before starting any work on it. Dan _______________________________________________ Bf-committers mailing list Bf-committers@blender.org http://lists.blender.org/mailman/listinfo/bf-committers