Commit Graph

266 Commits

Author SHA1 Message Date
Tamito Kajiyama
47960a3d8a Minor docstring fixes. 2013-02-23 03:07:19 +00:00
Tamito Kajiyama
68b0a8e390 Freestyle Python API improvements - part 7.
Fix for PyGetSetDef and proper handling of keyword arguments were done in
UnaryPredicate0D, UnaryPredicate1D, BinaryPredicate1D, and StrokeShader classes.
Style modules were updated accordingly.  Additional code clean-up was also made.
2013-02-23 01:12:23 +00:00
Tamito Kajiyama
0fb83d78fa Fixed typoes in docstrings. 2013-02-23 00:44:39 +00:00
Tamito Kajiyama
025feb240d Code clean-up: removed empty PyMethodDef. 2013-02-22 03:04:52 +00:00
Tamito Kajiyama
a4a7341aef Missing code updates in the previous commit.
Also improved __repr__() so that the .getName() is no longer necessary in user-defined
Function0D and Function1D subclasses.
2013-02-22 02:48:41 +00:00
Tamito Kajiyama
33f34e1a7b Freestyle Python API improvements - part 6.
Fix for PyGetSetDef and proper handling of keyword arguments were done in
Function0D and Function1D classes.  Additional code clean-up was also made.
2013-02-22 01:57:20 +00:00
Tamito Kajiyama
6cd036ab96 Code clean-up: Py_TYPE(self)->tp_name instead of ((PyObject *)self)->ob_type->tp_name. 2013-02-22 01:29:50 +00:00
Tamito Kajiyama
b4e968391d Attribute renaming: .exact_type_name --> .name. Also did a more generic implementation
of the attribute (meant to be a shortcut of .__class__.__name__).
2013-02-21 21:48:52 +00:00
Tamito Kajiyama
39f8c6e189 Freestyle Python API improvements - part 5.
Handling of keyword arguments in Python wrapper class constructors was revised.
This revision is mainly focused on Interface0D, Interface1D, Iterator, and
their subclasses, as well as a few additional view map component classes.

Implementation notes: Because of the extensive use of constructor overloading
in the underlying C++ classes, the corresponding Python wrappers try to parse
arguments through multiple calls of PyArg_ParseTupleAndKeywords() if needed.
The downside of this implementation is that most argument errors result in the
same error message ("invalid argument(s)") without indicating what is wrong.
For now this issue is left for future work.

* Now the instantiation of ViewVertex is prohibited since the underlying
C++ class is an abstract class.

* Removed the .cast_to_interface0diterator() method from CurvePointIterator
and StrokeVertexIterator.  Instead the constructor of Interface0DIterator now
accepts the instances of these two iterator classes to construct a nested
Interface0DIterator instance that can be passed to Function0D functor objects.
Specifically, an iterator 'it' is passed to a functor 'func' as follows:

  func(Interface0DIterator(it))

instead of:

  func(it.cast_to_interface0diterator())

* Boolean arguments of class constructors only accept values of boolean type.
Input values of other types are considered as error.

* Additional code clean-up was made.
2013-02-21 02:57:44 +00:00
Tamito Kajiyama
90ed5ea4ea Fix for pointers to auto variables returned from Python wrapper class methods.
The previous implementation was a quick workaround of C++ const references.

Also removed the unused 'borrowed' flag from the Python wrapper of FrsMaterial.
2013-02-16 17:13:59 +00:00
Tamito Kajiyama
06c51df4db Made code style clean-up and fixed a typo in a docstring. 2013-02-16 14:22:34 +00:00
Tamito Kajiyama
b35a893249 Freestyle Python API improvements - part 4.
Major API updates were made as in part 3 to address code review comments.
This revision focuses on Python wrappers of C++ iterators.

* Most getter/setter methods were reimplemented as attributes using PyGetSetDef.

* The naming of methods and attributes was fixed to follow the naming conventions
of the Blender Python API (i.e., lower case + underscores for methods and attributes,
and CamelCase for classes).  The only irregular naming change is the following, to
better indicate the functionality:

- ChainingIterator: getVertex --> next_vertex

* In addition, some code clean-up was done in both C++ and Python.  Also duplicated
definitions of predicate classes were removed.
2013-02-16 14:21:40 +00:00
Tamito Kajiyama
aa9c01f384 Fix for copy-and-paste bugs in Id rich comparison. Also made code style clean-up. 2013-02-16 14:01:55 +00:00
Bastien Montagne
41a98a59dc Fix compilation on linux (with gcc4.7).
Without const, I had the following error:

/home/i7deb64/blender-2.5-svn/__work__/freestyle/source/blender/freestyle/intern/python/BPy_ViewMap.cpp: In function ‘PyObject* ViewMap_scene_bbox_get(BPy_ViewMap*, void*)’:
/home/i7deb64/blender-2.5-svn/__work__/freestyle/source/blender/freestyle/intern/python/BPy_ViewMap.cpp:120:54: error: invalid initialization of non-const reference of type ‘BBox<VecMat::Vec3<double> >&’ from an rvalue of type ‘BBox<VecMat::Vec3<double> >’
In file included from /home/i7deb64/blender-2.5-svn/__work__/freestyle/source/blender/freestyle/intern/python/BPy_ViewMap.cpp:3:0:
/home/i7deb64/blender-2.5-svn/__work__/freestyle/source/blender/freestyle/intern/python/BPy_Convert.h:81:12: error: in passing argument 1 of ‘PyObject* BPy_BBox_from_BBox(BBox<VecMat::Vec3<double> >&)’
/home/i7deb64/blender-2.5-svn/__work__/freestyle/source/blender/freestyle/intern/python/BPy_ViewMap.cpp:121:1: warning: control reaches end of non-void function [-Wreturn-type]
make[2]: *** [source/blender/freestyle/CMakeFiles/bf_freestyle.dir/intern/python/BPy_ViewMap.cpp.o] Erreur 1
2013-02-15 11:23:07 +00:00
Tamito Kajiyama
8d44c4735e Minor coding style clean-up. 2013-02-14 23:50:30 +00:00
Tamito Kajiyama
731d08d497 Freestyle Python API improvements - part 3.
Major API updates were made to address code review comments.
This revision mostly focuses on Python wrappers of C++ 0D and 1D elements (i.e.,
Interface0D and Interface1D, as well as their subclasses).

* Most getter/setter methods were reimplemented as attributes using PyGetSetDef.
Vector attributes are now implemented based on mathutils callbacks.  Boolean
attributes now only accept boolean values.

* The __getitem__ method was removed and the Sequence protocol was used instead.

* The naming of methods and attributes was fixed to follow the naming conventions
of the Blender Python API (i.e., lower case + underscores for methods and attributes,
and CamelCase for classes).  Some naming inconsistency within the Freestyle Python
API was also addressed.

* The Freestyle API had a number of method names including prefix/suffix "A" and
"B", and their meanings were inconsistent (i.e., referring to different things
depending on the classes).  The names with these two letters were replaced with
more straightforward names.  Also some attribute names were changed so as to indicate
the type of the value (e.g., FEdge.next_fedge instead of FEdge.next_edge) in line
with other names explicitly indicating what the value is (e.g., SVertex.viewvertex).

* In addition, some code clean-up was done in both C++ and Python.

Notes:

In summary, the following irregular naming changes were made through this revision
(those resulting from regular changes of naming conventions are not listed):

- CurvePoint: {A,B} --> {first,second}_svertex
- FEdge: vertex{A,B} --> {first,second}_svertex
- FEdge: {next,previous}Edge --> {next,previous}_fedge
- FEdgeSharp: normal{A,B} --> normal_{right,left}
- FEdgeSharp: {a,b}FaceMark --> face_mark_{right,left}
- FEdgeSharp: {a,b}Material --> material_{right,left}
- FEdgeSharp: {a,b}MaterialIndex --> material_index_{right,left}
- FrsCurve: empty --> is_empty
- FrsCurve: nSegments --> segments_size
- TVertex: mate() --> get_mate()
- ViewEdge: fedge{A,B} --> {first,last}_fedge
- ViewEdge: setaShape, aShape --> occlude
- ViewEdge: {A,B} --> {first,last}_viewvertex
- ViewMap: getScene3dBBox --> scene_bbox
2013-02-14 23:48:34 +00:00
Tamito Kajiyama
3c064f4553 * Added a generic helper function for parsing PyObject arguments as N-dimensional float array.
* Local helpers were replaced with the generic one.  This also fixed a memory leak in the setter
function StrokeVertex_point_set.

* Made minor code style changes.
2013-02-04 00:23:37 +00:00
Tamito Kajiyama
7f8a17118b * Fix for broken StrokeAttribute.visible setter function.
* Fix for a wrong vector element index in StrokeAttribute_mathutils_set
in the case of MATHUTILS_SUBTYPE_COLOR.

* Made minor code style changes.
2013-02-03 23:04:42 +00:00
Tamito Kajiyama
879602d441 Replaced PyTuple_SetItem by PyTuple_SET_ITEM when creating new tuples. 2013-02-03 22:40:10 +00:00
Tamito Kajiyama
7e3e3a2270 Freestyle Python API improvements - part 2.
The API syntax of FrsMaterial was updated by means of getter/setter properties.
Python style modules (including the Parameter Editor) were updated accordingly.
2013-02-03 17:01:21 +00:00
Tamito Kajiyama
6ff0d15e5a Freestyle Python API improvements.
StrokeAttribute class methods were renamed from camel case to lower case plus underscore.
Also made changes to shaders.pyTVertexOrientationShader that uses the affected methods.
2013-01-27 21:51:25 +00:00
Tamito Kajiyama
156acd3370 Freestyle Python API improvements - part 1.
* The API syntax of StrokeVertex and StrokeAttribute was updated by means of getter/setter
properties instead of class methods.  Python style modules (including the Parameter Editor
implementation) were updated accordingly.

* Code clean-up was done for a few Python style modules, mostly by removing duplicated
definitions of stroke shaders and fixing indentation.
2013-01-27 20:17:49 +00:00
Tamito Kajiyama
7f721d06aa Fix for no copy constructor in the Python wrapper of StrokeAttribute. 2013-01-25 07:31:29 +00:00
Tamito Kajiyama
9a109c22ae Fix for BPy_FrsMaterial docstring. 2013-01-09 00:20:48 +00:00
Tamito Kajiyama
3c4987f983 Fix for a number of compiler warnings as well as a bug hidden by the warnings.
Patch contribution by Bastien Montagne, thanks!
2012-12-08 22:24:41 +00:00
Tamito Kajiyama
7afbdff1b6 Fix for a crash due to the changes in the trunk revision 50087 for thread safety in curve evaluation.
Problem report from Vicente Carro with an example .blend file for reproducing the issue.  Thanks!
2012-09-23 15:05:29 +00:00
Tamito Kajiyama
eabf741a8d Fix for the WithinImageBorderUP1D predicate not working with a ViewEdge such that
none of the SVertices are within the image boundary but an FEdge intersects with
the image boundary.

The problem was reported by edna through the BA Freestyle thread, with a .blend
file for reproducing the bug.  Thanks!
2012-05-28 23:53:28 +00:00
Tamito Kajiyama
40f215bbc9 Added SVertex::curvatures() in the Python API to retrieve curvature
information at a given SVertex.
2011-12-17 19:31:30 +00:00
Tamito Kajiyama
b6569ee4e7 Merged changes in the trunk up to revision 42116. 2011-11-26 13:11:55 +00:00
Tamito Kajiyama
f0acdcf135 Fix for stroke rendering instability with stroke geometry shaders.
* Stroke::Resample(int nPoints) was not properly working when a wrong
value was returned from Stroke::getLength2D(), resulting in repeated
warning messages "Warning: incorrect points number" during stroke
rendering.  The main cause was that stroke geometry shaders did not
update the two-dimensional (2D) length (also referred to as curvilinear
abscissa) after they modified the 2D points of stroke vertices.  Now
all stroke geometry shaders make explicit calls for Stroke::UpdateLength()
that has been introduced for recomputing the 2D length.  Many thanks to
Josef who reported the problem together with sample .blend files for
reproducing the issue.

* Missing Python wrapper of Stroke::getLength2D() was added.
2011-10-30 16:00:35 +00:00
Tamito Kajiyama
f84e8e7640 Fine control of feature edge selection with mesh face and edge marks.
New "face marks" and "edge marks" have been introduced in mesh data
blocks.  In the edit mode of a mesh object, face marks can be put
to selected faces by choosing Mesh >> Faces >> Mark Freestyle Face
from the menu of a 3D View window or Ctrl-F >> Mark Freestyle Face
from the context menu.  Similarly, edge marks can be put to selected
edges by Mesh >> Edges >> Mark Freestyle Edge or Ctrl-E >> Mark
Freestyle Edge.  These marks should work fine with the Subdivision
surface modifier.

Moreover, two new conditions for feature edge selection have been
added to the Parameter Editor mode as described below:

1. The Selection by Edge Types option has now the new Edge Mark type,
which can be used to (de)select feature edges having edge marks.
This option can be used to add to (or remove from) the view map
arbitrary edges of mesh objects.

2. Selection by Face Marks option has been newly introduced, in which
face marks are used for feature edge selection in two ways.  One
option is called "One Face" which is to (de)select feature edges if
one of faces on the left and right of each feature edge has a face
mark.  The other option is "Both Faces" to (de)select feature edges
if both faces on the left and right have a face mark.
2011-10-06 02:04:43 +00:00
Tamito Kajiyama
6be21a9125 Implemented a calligraphic thickness modifier in the Parameter Editor mode.
Also fixed a typo in the docstring of the CalligraphicShader.
2011-09-11 19:57:38 +00:00
Tamito Kajiyama
4ec69d5a2b Added an optional argument 'seed' to the Freestyle.Noise class constructor.
The value is used as a seed for random number generation if it is equal to
or greater than zero; otherwise, time is used as a seed.
2011-08-18 23:07:17 +00:00
Tamito Kajiyama
ce03ec4b86 Merged changes in the trunk up to revision 38543.
Conflicts resolved:
doc/python_api/sphinx_doc_gen.py
source/blender/blenkernel/CMakeLists.txt
source/blender/makesdna/DNA_material_types.h
source/blender/render/intern/source/pipeline.c
source/creator/CMakeLists.txt
2011-07-20 23:33:10 +00:00
Tamito Kajiyama
33efa9eeb6 Merged changes in the trunk up to revision 35367.
To branch builders: From this revision Python 3.2 will be used.
Don't forget svn update in the "lib" directory as well.
2011-03-06 12:13:32 +00:00
Tamito Kajiyama
df7f4f639f Two minor fixes:
* Fixed a bug in MaterialF0D::operator() that an error condition was ignored due
to a wrong return value.

* Fixed a typo in the docstring of StrokeVertex::setPoint().
2011-02-22 01:43:08 +00:00
Tamito Kajiyama
949a752ddd Made stroke rendering stability fixes, with the aim of addressing
occasional unexpected long lines.

1. The Parameter Editor mode was extended to prevent strokes from
doing quick U-turns that "enable" a known bug in strip creation
that generates unexpected long lines in question.

2. A verbose warning message was added to make the existence of
the strip creation bug visible to users.  When the bug affects the
stroke rendering, the following warning shows up in the console:

> Warning: problem in strip creation (the strip is most likely doing a U-turn).

3. The extrapolation option of CurveMapping (used in alpha and
thickness modifiers in the Parameter Editor mode) was identified
as another source of unexpected long lines.  Now the extrapolation
option is unconditionally disabled (even when users enable it
through the GUI).
2011-01-31 20:57:39 +00:00
Tamito Kajiyama
2d1bc90eed Added Python wrappers for the following Operators static methods:
- getViewEdgeFromIndex()
- getChainFromIndex()
- getStrokeFromIndex()
2010-12-23 09:21:41 +00:00
Tamito Kajiyama
d8b2d1945a Documentation updates: Added a class hierarchy that shows
inheritance relationships among the classes defined in the
Freestyle module.
2010-08-28 13:52:49 +00:00
Tamito Kajiyama
f510faed6c Python API documentation updates: a description of class hierarchy
was added to the docstrings of most Python extension types.
2010-08-12 12:17:47 +00:00
Tamito Kajiyama
a99a466fee * Made the Parameter Editor mode much more functional. Edge selection
criteria, as well as the color/alpha/thickness Along Stroke modifiers
now work.

* Added more curve blend types.  The default is set to "MIX".
2010-07-28 00:43:45 +00:00
Tamito Kajiyama
1813324544 Added helper functions to the Freestyle module:
* evaluateColorRamp() to evaluate a color ramp at a given point in
the interval 0 to 1.

* evaluateCurveMappingF() to evaluate a curve mapping at a given
point in the interval 0 to 1.
2010-07-26 23:50:32 +00:00
Tamito Kajiyama
db158b42de Documentation updates: Replaced "string" with "str". 2010-05-28 18:42:11 +00:00
Tamito Kajiyama
d15f2b562e Fixed the __call__ method of UnaryFunction0DVectorViewShape and
UnaryFunction1DVectorViewShape.  The __call__ method now returns
a list whose elements are either a ViewShape or None.
2010-05-27 21:12:09 +00:00
Tamito Kajiyama
96e79172a0 Made object names accessible from within style modules.
ViewShape objects in the view map, as well as SShape objects
that can be retrieved with ViewShape::sshape(), now have a
getName() method that returns the name of the object from
which each shape is created.  For instance, visible feature
edges of specific mesh objects (e.g., Cube.001 and Cube.002)
can be selected using custom predicate ObjectNamesUP1D as
follows:

class ObjectNamesUP1D(UnaryPredicate1D):
    def __init__(self, names):
        UnaryPredicate1D.__init__(self)
        self._names = names
    def getName(self):
        return "ObjectNamesUP1D"
    def __call__(self, viewEdge):
        return viewEdge.viewShape().getName() in self._names

upred = AndUP1D(QuantitativeInvisibilityUP1D(0),
                ObjectNamesUP1D(["Cube.001", "Cube.002"]))
Operators.select(upred)
2010-05-23 17:11:44 +00:00
Tamito Kajiyama
2212564f18 Fixed invalid use of PyUnicode_FromFormat() where PyUnicode_FromString()
should have been used.
2010-05-23 12:10:31 +00:00
Tamito Kajiyama
02a4dbeff0 Docstring update for Nature::MATERIAL_BOUNDARY (cf. revision 28919). 2010-05-23 00:09:56 +00:00
Tamito Kajiyama
b85985535d New option for detecting feature edges at material boundaries.
A checkbox "Material Boundaries" has been added to the Freestyle
options in the Layers tab of the Render buttons.  By enabling the
option, any edge between two faces with different materials is
detected as a feature edge.  In style modules, edges at material
boundaries can be tested with pyNatureUP1D(Nature.MATERIAL_BOUNDARY).
2010-05-22 22:21:15 +00:00
Tamito Kajiyama
f76c3aa376 * Fix for a crash in StrokeVertexIterator::getObject().
* Minor docstring fixes.
2010-05-21 21:27:32 +00:00
Tamito Kajiyama
bc993fcd55 Minor docstring fixes. 2010-05-14 21:29:13 +00:00