Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2008-07-30soc-2008-mxcurioni: Tested SWIG-less environment more and understood why the ↵Maxime Curioni
former predicate methods were not working. As Stéphane had mentioned a few months ago, Freestyle uses SWIG directors to provide cross-language polymorphism. The API and the system I had provided did not support that feature and only implementations in C++ were supported. To correct the problem, after researching how directors are implemented in SWIG, I provided the same functionality. So far, I only provided the code for the UnaryPredicate1D class and it works. The implementation is in intern/python/Director.cpp and Operators.cpp. I will port the remaining directors tonight and continue to test it. To prevent strokes from piling up after each render, I clear the canvas at each render now (as it should have been all along)
2008-07-29soc-2008-mxcurioni: corrected problems in API with UnaryFunction1DVoid ↵Maxime Curioni
subclasses and Curvature2DAngleF1D. Understood that Curve and Noise classes cannot be defined in Freestyle's API because they are already given by Blender's API. Will rename to FrsCurve and FrsNoise and change the corresponding style modules.
2008-07-29soc-2008-mxcurioni: SWIG replacement is effective and the native Freestyle ↵Maxime Curioni
API renders a correct result for the test style module 'contour.py'. More testing needs to be done to make sure my work was correct. To make it work, I had to: - update Operators to include all of its methods in the Python API - redefine the Freestyle modules as local classes, allowing predicates to support the __call__ method (I found out that Python does not allow modules to be callable). The API is defined in the new freestyle_init.py file. - remove all references to former Python Freestyle API (located in source/blender/freestyle/python/, under the Freestyle.py file) and replace it with the new API file. - normalize all constants related to the Nature class - redefine the logical_operators.py file so that AndUP1D, OrUP1D and NotUP1D would be subclasses of a UnaryPredicate1D subclass having a operator() implementation. Using UnaryPredicate1D as a superclass would somehow prevent calls to the operator(). For the time being, I chose ContourUP1D (even though it does not really matter which subclass it is, since the __call__ method is redefined in all of these classes). I will implement this classes in C++ to get rid of the problem altogether. - turn off a few classes that somehow are not well recognized (Noise, Curve...). I will reenable them later once I understand what's going on.
2008-07-29soc-2008-mxcurioni: finished porting the Freestyle API. All of the original ↵Maxime Curioni
classes, except EdgeModifier and TimestampModifier (which aren't even ported via SWIG), are available under the Blender.Freestyle module. Testing of the porting will now begin to make sure the SWIG-less system works as the original. Quite a few modifications were made to finish the API: - Freestyle's SConscript was modified to catch all files within the intern/python directory, allowing integration of future shaders implemented in C++. - the Operators class was ported, with a special care of making its methods static (using the METH_STATIC flag in the tp_methods method definitions) - all of the type-checking functions [ BPy_[class name]_Check(obj) ] were changed to allow subclasses to be seen as that type too: instead on looking at the ob_type value, the PyObject_IsInstance function is used. - all of the iterators can now retrieve the object pointed to by the operator, using the getObject() method. A directedViewEdge pair is returned as a list of the two elements in the pair. - all of the style modules were copied to a style_modules_blender/ folder and were modified to use Freestyle as a Blender's submodule. IntegrationType and MediumType was also integrated (for example, changing MEAN to IntegrationType.MEAN). Testing now begins. If everything works correctly, I'll move on to lib3ds removal right away.
2008-07-29 soc-2008-mxcurioni: add all predicate subclasses( BinaryPredicate1D, ↵Maxime Curioni
UnaryPredicate{0D,1D} ). There is just one more class remaining to port (and probably the most important): Operators. After that, I'll be able to test whether Freestyle functions well without SWIG.
2008-07-27soc-2008-mxcurioni: implemented and integrated all 21 original stroke shaders.Maxime Curioni
2008-07-27soc-2008-mxcurioni: ported ALL 1D unary functions, representing 32 new classes.Maxime Curioni
2008-07-27soc-2008-mxcurioni: ported ALL 0D unary functions, representing 34 new ↵Maxime Curioni
classes. I will do the same for the 1D unary functions.
2008-07-27soc-2008-mxcurioni: implemented and tested unary predicates. The good news ↵Maxime Curioni
is that My approach seems to works (even though it is not fully testable as it needs Freestyle to be running). I will now port the 80 predicate subclasses left. In this commit, UnaryPredicate0DDouble and its subclasses DensityF0D and LocalAverageDepthF0D are implemented and integrated in the API.
2008-07-27soc-2008-mxcurioni: added (but did not test) ViewMap and Noise classes. ↵Maxime Curioni
Updated ViewShape class accordingly
2008-07-27soc-2008-mxcurioni: implemented (but did not test) ChainPredicateIterator ↵Maxime Curioni
and ChainSilhouetteIterator
2008-07-26soc-2008-mxcurioni: completed implementing ViewEdgeIterator and ↵Maxime Curioni
ChainingIterator. Updated UnaryPredicate{0D,1D}
2008-07-26soc-2008-mxcurioni: implemented (but did not test) the following classes: ↵Maxime Curioni
Material, Chain, FEdgeSharp, FEdgeSmooth. All Interface1D classes have now been fully implemented.
2008-07-26soc-2008-mxcurioni: added (but did not test) NonTVertex and TVertex classes. ↵Maxime Curioni
All Interface0D structures have been implemented
2008-07-25soc-2008-mxcurioni: fully implemented (but did not test) Curve class.Maxime Curioni
2008-07-25soc-2008-mxcurioni: fully implemented (but did not test) ViewEdge class. ↵Maxime Curioni
Modified functions accross API taking input boolean values.
2008-07-25soc-2008-mxcurioni: Added iterator capability to FEdge and Stroke. Recoded ↵Maxime Curioni
parts of ViewVertex, SVertex and Convert to support these changes.
2008-07-25soc-2008-mxcurioni: found and fixed all potential issues iterating over ↵Maxime Curioni
internal view-map data. The internal namespaces (ViewEdgeInternal, ViewVertexInternal, CurveInternal, StrokeInternal...) should NOT be included to prevent redefintion errors.
2008-07-25soc-2008-mxcurioni: cleaned up the Convert header file to prevent cyclic or ↵Maxime Curioni
header positioning problems and adapted classes accordingly
2008-07-24soc-2008-mxcurioni: added (without testing) the following classes: BBox, ↵Maxime Curioni
SShape, ViewShape. Also corrected a few typos (Get#->get#).
2008-07-24soc-2008-mxcurioni: Added first batch of Iterators: AdjacencyIterator, ↵Maxime Curioni
Interface0DIterator, CurvePointIterator, StrokeVertexIterator, SVertexIterator, orientedViewEdgeIterator.
2008-07-23soc-2008-mxcurioni: added Iterator class, base class for all iterators in ↵Maxime Curioni
Freestyle (on the C++ side). Created the equivalent in Python BPy_Iterator with the simple interface: - getExactTypeName() - increment() - decrement() - isBegin() - isEnd() Contrary to previously stated, I am reverting back to implementing iterators in the (Python) API, for different reasons: - it will make testing quicker to achieve, as I won't have to recode a big chunk of the original Python files - it will be a base for API refactoring - it won't prevent the use a list-based approach later (it is simple to get it from the Iterator)
2008-07-23soc-2008-mxcurioni: renamed all Freestyle API related files with 'BPy_' ↵Maxime Curioni
prefix to avoid library name collision. Included MediumType's initialization at proper time to avoid Blender's crash.
2008-07-23soc-2008-mxcurioni: implemented (without testing) StrokeShader, Stroke and ↵Maxime Curioni
MediumType (used by Stroke to define medium types) classes. The Stroke class is missing the InsertVertex method. Before porting other classes, I'll resolve the List (Python) <=> Iterator (C++) correspondence problem by implementing a general class appropriately suited for the task.
2008-07-22soc-2008-mxcurioni: filled and tested StrokeVertex classMaxime Curioni
2008-07-22soc-2008-mxcurioni: corrected StrokeAttribute, verified with test case.Maxime Curioni
I realized today that it will not be possible to implement getter/setter functionality easily for our Freestyle API. The reason is that Python does not support function overloading as-is. It is possible to 'fake' overloading by taking a general argument object and count the number of arguments in the object (rgbTuple_setCol in Blender's API is a good example of how to go about it). For the time being, we'll get around that problem. The tangible effect of that constraint is that all API setter functions return a 'None' PyObject, instead of returning an integer status code. It is important to note that this problem is due to Freestyle's API being C++ in nature. Fortunately, this shouldn't really impact the usage of the API. If the Blender Python group wants me to correct that, I'll be able to do it. It is just going to take me quite some time correcting it, writing support functions for methods having different types of arguments.
2008-07-22Added StrokeAttribute class. Beginning of StrokeVertex.Maxime Curioni
IMPORTANT: The setters functions' names were normalized due to constant confusion regarding capitalization. All the function names start with set... instead of Set.... This convention was changed all throughout Freestyle. To use Freestyle as an external renderer, the SWIG library MUST be regenerated.
2008-07-20soc-2008-mxcurioni: updated support for Nature class.Maxime Curioni
2008-07-19soc-2008-mxcurioni: Added IntegrationType and Nature classes, used to store ↵Maxime Curioni
constants used throughout Freestyle
2008-07-18soc-2008-mxcurioni: canvas for UnaryFunction0D, UnaryFunction1D, ↵Maxime Curioni
UnaryPredicate0D, UnaryPredicate1D. UnaryFunction0D and UnaryFunction1D implementations are going to be really challenging due to the changes in the infrastructure: UnaryFunction0D<T> and UnaryFunction0D<T> are templates and must be determined for compile-time. The easiest solution is to support each type individually; unfortunately, it removes the benefit of using an interface. To find a middle ground, a general unary function Python object type was created for 0D and 1D. In both cases, the types have a void* pointer keeping the address of the current unary function type. I am not sure yet if it will work. Interface0DIterator being removed by a list type, the t() and u() coordinate functions will to be transferred somehow, probably directly at the Interface0D level.
2008-07-18soc-2008-mxcurioni: FEdge class added. Modifed converting functions to ↵Maxime Curioni
passing-by-reference format. Improved the type checking for FEdge and CurvePoint. Modified FEdge C++ class to test for null vertices. Updated previous classes to support FEdge. So far, whenever a Python object is created from its corresponding C++ object, the input object reference is copied into a new object. Due to Freestyle's functions (especially regarding the way it is iterated), it is currently impossible to deal with a pointer-based Python object. It is not a real drawback, just an aspect to keep in mind.
2008-07-17soc-2008-mxcurioni: SWIG removal - completed SVertex and CurvePoint classes ↵Maxime Curioni
migration. Stabilized a lot of the code for C++ -> Python conversion. Added the correct rich comparison operator and tested it. Corrected 'dupplicate' typo and changde to __copy__ for Python API. From now on, when a set should be output (PySet_Type), it is given as a list (PyList_Type). The reason is that it doesn't really matter what we bring back to the Python interpreter. The set is guaranteed in memory on the C++ side. For the CurvePoint class, the userdata variable is not yet ported (and will probably available as a list or a dictionary). The CurvePoint implementation works except for the initialization from other CurvePoints: somehow, the inner variables don't seem to be correctly handled. I do not know if it is a bug in Freestyle or if the CurvePoint object's state is correct for my test case. CurvePoint needs more testing.
2008-07-15soc-2008-mxcurioni: reimplemented the initialization/allocation for base ↵Maxime Curioni
classes. The Python object type tp_new slot is now set to PyType_GenericNew, instead of the former custom functions. As a note, by default, Python does not set this slot: it is therefore mandatory for the base classes. For children classes, only __init__ is needed. To make our base classes subclasses, the Py_TPFLAGS_BASETYPE flag was added to the object type tp_flags slot. Finally, I began to implement CurvePoint, descendant of Interface0D. This commit allowed me to verify that my SWIG replacement method works: interfaces are well taken into account by children. For a test, use the following code: ================================ import Blender from Blender import Freestyle from Blender.Freestyle import * print Interface0D() print CurvePoint() ================================ The __repr__ method is only implemented in Interface0D: PyObject * Interface0D___repr__(BPy_Interface0D* self) { return PyString_FromFormat("type: %s - address: %p", self->if0D->getExactTypeName().c_str(), self->if0D );} and the result is of the form: type: Interface0D - address: 0x18e5ccc0 type: CurvePoint - address: 0x18e473f0 As you can see, the correct getExactTypeName of the class is called.
2008-07-15soc-2008-mxcurioni: Reimplemented the Freestyle Python API's files to be ↵Maxime Curioni
correctly used as classes and not submodules. Added and integrated object lifecycle functions (__new__, __alloc__, __repr__) for the previous classes: BinaryPredicate0D, BinaryPredicate1D, Id, Interface0D, Interface1D. All of these classes were tested within Blender's Python interpreter with simple test cases and their getter/setters were corrected. Interface0DIterator was modified to allow BPy_Interface1D to be instantiated: verticesBegin(), verticesEnd(), pointsBegin(float) and pointsEnd(float) are not pure virtual functions anymore. If they are called directly from BPy_Interface1D (instead of its subclasses), an error message is displayed.
2008-07-12soc-2008-mxcurioni: first part of the Freestyle Python implementation. A new ↵Maxime Curioni
Freestyle module is added. The following modules are implemented: BinaryPredicate0D, BinaryPredicate1D, Id, Interface0D, Interface1D. I added a Convert module to help in the creation of Python objects for Freestyle's data structures. I also added a missing file for guarded_alloc needed for compilation on Windows.
2008-07-09soc-mx-2008: SWIG dependency - wrapper functions extracted from ↵Maxime Curioni
ModuleWrapper.cpp
2008-07-09soc-2008-mxcurioni: first (blank) file upload for SWIG removal, in ↵Maxime Curioni
source/blender/freestyle/intern/python. The migration will be based on source/blender/freestyle/intern/swig/ModuleWrapper.{cpp,h}