Commit Graph

291 Commits

Author SHA1 Message Date
Tamito Kajiyama ba9943e4a7 * Implemented Python's iterator protocol in Interface0DIterator and
orientedViewEdgeIterator.

* Simplified Python-related error handling in C++ class definitions.
The definitions of the following C++ methods were simplified and most
code segments using the C/Python API were moved to Director.cpp.

  ChainingIterator::init()
  ChainingIterator::traverse()
  UnaryPredicate0D::operator()()
  UnaryPredicate1D::operator()()
  BinaryPredicate0D::operator()()
  BinaryPredicate1D::operator()()
  UnaryFunction0D::operator()()
  UnaryFunction1D::operator()()
  StrokeShader.shade()

* Moved part of the introspection-based automatic type conversion code
from BPy_Interface0DIterator.cpp and Director.cpp to BPy_Convert.cpp
for the sake of better code organization.

* Fixed an uninitialized member in StrokeVertexIterator___init__().
2009-07-31 22:13:48 +00:00
Tamito Kajiyama 6134a41270 Fixed typoes in error messages. 2009-07-31 21:44:59 +00:00
Tamito Kajiyama d62f844b12 Fixed typoes in error messages. 2009-07-31 21:44:02 +00:00
Tamito Kajiyama 4e78dff629 Added Python error handling to StrokeShader::shade(). Also made
a measure to avoid an infinite loop due to non-proper overriding
of the shade method.
2009-07-31 21:03:22 +00:00
Tamito Kajiyama 3771d648d0 Added minor changes. 2009-07-29 18:49:03 +00:00
Tamito Kajiyama 7600037924 Added changes to the AdjacencyIterator type to support Python's
iterator protocol.  Now the following code in the conventional
SWIG-based syntax:

    it = AdjacencyIterator(iter)
    while not it.isEnd():
        ve = it.getObject()
        ...
        it.increment()

can be written using the iterator protocol as follows:

    for ve in AdjacencyIterator(iter):
        ...
2009-07-29 00:18:13 +00:00
Tamito Kajiyama 8eb1064f41 Implemented a measure to avoid an infinite loop triggered when
ChainingIterator::init() and ChainingIterator::traverse() were
not properly overloaded in a subclass.
2009-07-29 00:11:41 +00:00
Tamito Kajiyama bf0365ceb0 * BPy_IntegrationType.cpp: Added a Python wrapper of integrate function.
* Fixed uninitialized fields in the "__init__" methods of UnaryFunction0D
types.  Also added missing argument validation codes to some of the types,
and removed redundant validation error messages.
2009-07-28 00:29:30 +00:00
Tamito Kajiyama fe5b6a556c * Fixed compiler errors in UnaryFunction0DVectorViewShape::__call__()
and UnaryFunction1DVectorViewShape::__call__().

* Added a Python wrapper of ViewEdge::qi().
2009-07-27 19:34:52 +00:00
Tamito Kajiyama 52f639277b Second attempt to fix a null pointer reference in deallocators of
built-in types (the first was in revision 21877).  When an exception
has raised within from the __init__ method of a user-defined class
derived from a built-in type (e.g., UnaryPredicate0D and
BinaryPredicate1D), some member variables of the base type are
left uninitialized, leading to a null pointer reference in the
"__dealloc__" function in the base type.  To avoid this, pointer
checking was added in the deallocators of those built-in types that
can be used to define a subclass by a user.
2009-07-26 20:20:25 +00:00
Tamito Kajiyama 69853d3e40 Reverted the change in revision 21877 in Interface0D___dealloc__(). 2009-07-26 17:29:25 +00:00
Tamito Kajiyama 730fb1021c Made predicate and function types callable in the sense that
callable(I, T) returns True when I is an object of a type T or
of a subtype of T.  Also implemented a measure to avoid an
infinite loop when user-defined predicate and function classes
do not properly overload the __call__ method (including the
cases of directly instantiating the base classes such as
UnaryPredicate0D and BinaryPredicate1D).
2009-07-26 16:15:28 +00:00
Tamito Kajiyama 78ce17fce8 Implemented Python wrappers of context functions (such as GetTimeStampCF). 2009-07-26 11:19:37 +00:00
Tamito Kajiyama fec3ddabb1 * Better support for vector-like objects in method arguments.
Now the following methods in the Freestyle Python API accept
not only Blender.Mathutils.Vector instances but also lists and
tuples having an appropriate number of elements.

  FrsNoise::turbulence2()
  FrsNoise::turbulence3()
  FrsNoise::smoothNoise2()
  FrsNoise::smoothNoise3()
  SVertex::__init__()
  SVertex::setPoint3D()
  SVertex::setPoint2D()
  SVertex::AddNormal()
  FEdgeSharp::setNormalA()
  FEdgeSharp::setNormalB()
  FEdgeSmooth::setNormal()
  CalligraphicShader::__init__()
  StrokeAttribute::setAttributeVec2f()
  StrokeAttribute::setAttributeVec3f()
  StrokeAttribute::setColor()
  StrokeVertex::setPoint()

* Added the following converters for the sake of the improvements
mentioned above.

  Vec2f_ptr_from_PyObject()
  Vec3f_ptr_from_PyObject()
  Vec3r_ptr_from_PyObject()
  Vec2f_ptr_from_PyList()
  Vec3f_ptr_from_PyList()
  Vec3r_ptr_from_PyList()
  Vec2f_ptr_from_PyTuple()
  Vec3f_ptr_from_PyTuple()
  Vec3r_ptr_from_PyTuple()

Those converters with the suffixes _PyList and _PyTuple accept
only lists and tuples having an appropriate number of elements,
respectively, while those with the suffix _PyObject accept lists,
tuples, or Blender.Mathutils.Vector instances.

* Fixed a null pointer reference in Interface0D___dealloc__().

* Corrected the names of 3 methods in the FEdgeSmooth class.
2009-07-25 11:27:18 +00:00
Tamito Kajiyama aff53f5217 Fixed compiler errors caused by the changes in revision 21700. 2009-07-24 23:34:25 +00:00
Tamito Kajiyama f19ae70820 Fixed a refcount bug concerning ChainPredicateIterator. 2009-07-21 19:44:15 +00:00
Tamito Kajiyama 5fed0560d9 * Introspection-based automatic type conversion from a generic C++ object
to a specific Python object.  The conversion takes place in the following
places.
- Interface0DIterator_getObject (BPy_Interface0DIterator.cpp)
- Director_BPy_BinaryPredicate1D___call__ (Director.cpp)
- Director_BPy_UnaryPredicate1D___call__ (Director.cpp)
- SVertex_viewvertex (BPy_SVertex.cpp)
- BPy_FEdge_from_FEdge (BPy_Convert.cpp)
This is a tentative list and more conversions are expected to be added.

* Added the following two converter functions to BPy_Convert.{cpp,h}:
- BPy_NonTVertex_from_NonTVertex_ptr
- BPy_TVertex_from_TVertex_ptr
2009-07-19 23:17:30 +00:00
Tamito Kajiyama 1cb1d0e6e9 Added a missing wrapper for AdjacencyIterator::isIncoming(). 2009-07-19 23:03:26 +00:00
Tamito Kajiyama 770267437b Fixed uninitialized pointers in ViewVertex instances returned by the
castToViewVertex method.
2009-07-19 23:01:25 +00:00
Tamito Kajiyama 47fddb50c5 Fixed uninitialized pointers in Interface0DIterator instances returned by
the castToInterface0DIterator method.
2009-07-19 16:37:55 +00:00
Tamito Kajiyama 2f5e1969ed Improvements on error handling in the Python API. 2009-04-04 15:26:12 +00:00
Tamito Kajiyama bff81e3394 Relaxed type checking concerning boolean arguments so that not only
True and False but also various other boolean expressions (e.g., 0,
1, and None) are accepted.
2009-04-04 14:50:54 +00:00
Tamito Kajiyama acfd7c82ab Relaxed type checking concerning boolean arguments in class constructors
and __call__ methods so that not only True and False but also various
other boolean expressions (e.g., 0, 1, and None) are accepted.
2009-04-03 20:03:09 +00:00
Tamito Kajiyama 67e4d7dc63 Improvements on error handling in the Python API. 2009-03-31 22:45:11 +00:00
Tamito Kajiyama 3c60dd404e * fixed uninitialized variables.
* fixed a bug that was introduced in the last commit.
2009-03-30 19:25:27 +00:00
Tamito Kajiyama a377b74638 Improvements on error handling in the Python API. 2009-03-29 21:50:10 +00:00
Tamito Kajiyama fbd92e985e * improved error handling in CurvePointIterator constructor.
* changed CurvePointIterator::getObject() according to the changes
in revision 19456.
2009-03-29 21:05:03 +00:00
Tamito Kajiyama ded03e34bf * Added BPy_Chain_from_Chain_ptr().
* Changed BPy_CurvePoint_from_CurvePoint( CurvePoint& cp ) to
BPy_CurvePoint_from_CurvePoint_ptr( CurvePoint *cp ) so that it
retains a CurvePoint pointer instead of a CurvePoint instance.
2009-03-29 21:00:26 +00:00
Tamito Kajiyama 6dfcbf166b Fixed a typo in the last commit. 2009-03-29 18:46:17 +00:00
Tamito Kajiyama 68e088f1cf Improvements on error handling in the Python API. 2009-03-29 17:44:14 +00:00
Tamito Kajiyama f86309d672 Removed the declaration of an undefined static function, to suppress a compiler warning.
Also made minor changes to make IntegrationType a subclass of the built-in int type.
2009-03-21 12:09:58 +00:00
Tamito Kajiyama c1611c346f Fixed editing errors in the last commit... 2009-03-20 23:19:47 +00:00
Tamito Kajiyama c5fe802ec8 Fixed an uninitialized variable. 2009-03-20 22:44:04 +00:00
Tamito Kajiyama 85291f0fea Improvements in error handling at Python-C++ boundaries.
Also exported the Operators.chain() function.
2009-03-20 22:42:59 +00:00
Tamito Kajiyama 0c7e5323e8 Improvements in error handling at Python-C++ boundaries. 2009-03-20 22:41:27 +00:00
Tamito Kajiyama 6ba34d18b5 Fixed incorrect argument checking. 2009-03-14 13:27:41 +00:00
Tamito Kajiyama f38183d6b4 Fixed the subclassing of int to define the IntegrationType type.
Also changed the type of integration type constants from int to IntegrationType.
2009-03-14 13:20:06 +00:00
Tamito Kajiyama 52e289ee3b Fixed StrokeVertex::setPoint() to accept a Blender Vector object as the argument.
Now this method accepts 2D coordinates in the following three forms:
a) Python list of 2 real numbers: setPoint([x, y])
b) Blender Vector of 2 elements: setPoint(Vector(x, y))
c) 2 real numbers: setPoint(x, y)

[The log of Revision 19283 had a wrong message...]
2009-03-14 13:11:34 +00:00
Tamito Kajiyama c14e91590e Fixed StrokeVertex::setPoint() to accept a Blender Vector object as the argument.
Now this method accepts 2D coordinates in the following three forms:
a) Python list of 2 real numbers: setPoint([x, y])
b) Blender Vector of 2 elements: setPoint(Vector(x, y))
c) 2 real numbers: setPoint(x, y)
2009-03-14 13:06:09 +00:00
Tamito Kajiyama c8ac7723d6 Fixed memory leaks in passing vectors from Python to C++. 2009-03-13 19:27:00 +00:00
Tamito Kajiyama 2fbcd6c4bd Better error handling in the Python API.
Added error handling to prevent crashes even when errors have occurred in user-defined predicates, stroke shaders, and chaining iterators.
2009-03-13 19:24:05 +00:00
Tamito Kajiyama 17555efed7 Added changes to support Python's native iterator protocol in Stroke and StrokeVertexIterator.
freestyle_init.py
* Added a generic getName() method that allows subclasses to omit the method to return their class names.

BPy_Convert.cpp
BPy_Convert.h
* Added to BPy_StrokeVertexIterator_from_StrokeVertexIterator() a second argument to specify the direction (reversed or not) of the iterator to be created.

BPy_Stroke.cpp
* Added support for Python's native iterator protocol.
* Added code to parse the optional argument of strokeVerticesBegin().

BPy_StrokeVertexIterator.cpp
BPy_StrokeVertexIterator.h
* Added support for Python's native iterator protocol.

Stroke.cpp
* Fixed a null pointer reference.

Stroke.h
* Added new method Stroke::strokeVerticeAt(i) that returns the i-th StrokeVertex of the Stroke.
2008-12-01 11:14:33 +00:00
Tamito Kajiyama a407b65c83 Fixed memory leaks. 2008-12-01 10:49:06 +00:00
Tamito Kajiyama c3b12b5066 Fixed a bug in Nature_Type and BPy_Nature_from_Nature() that broke all nature-related functionalities (e.g. pyNatureUP1D() and CurveNatureF1D()). 2008-11-08 23:56:16 +00:00
Maxime Curioni 4be21b18f8 soc-2008-mxcurioni: corrected texture loading feedback, removed paper textures from the project 2008-09-25 16:35:53 +00:00
Nathan Letwory 449f210c46 * Make sure freestyle branch compiles with SCons/msvc9 on Windows. This was joint operation with mxcurioni :) 2008-09-09 18:03:44 +00:00
Maxime Curioni 9a1217e559 soc-2008-mxcurioni: first version of lib3ds code. It does NOT work yet and has to be debugged. It can be activate in app_blender/api.cpp by replacing the FRS_scene_3ds_export call in FRS_prepare, by FRS_load_mesh.
All of the reference to the original Material class were renamed to FrsMaterial to resolve a name collision with Blender. To keep the window context necessary to draw the strokes after RE_Database_FromScene has been called, the display_clear function is used.
2008-08-07 15:04:25 +00:00
Maxime Curioni e385d69580 soc-2008-mxcurioni: Made crucial corrections to stabilize the system. Most of the original styles are supported: stroke attributes are correctly taken into account, Python shaders are supported. Added SamplingShader. 2008-08-02 07:39:49 +00:00
Maxime Curioni 7565990db2 soc-2008-mxcurioni: made considerable changes to support cross-language polymorphism for UnaryFunction0D, Interface0D, Interface1D. Add to change UnaryFunction1D<void> to static UnaryFunction1D_void. Resolved namespace collision on the Image class (changed to FrsImage). There is greater support for style modules but somehow, some do not show anything yet (japanese_bigbrush being an example). 2008-08-01 21:55:58 +00:00
Maxime Curioni c324f0cbc7 soc-2008-mxcurioni: clean-up #2 2008-08-01 02:25:21 +00:00