﻿<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Dev%3A2.4%2FSource%2FPython%2FIpo_Module</id>
	<title>Dev:2.4/Source/Python/Ipo Module - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Dev%3A2.4%2FSource%2FPython%2FIpo_Module"/>
	<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:2.4/Source/Python/Ipo_Module&amp;action=history"/>
	<updated>2026-07-12T17:38:31Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Dev:2.4/Source/Python/Ipo_Module&amp;diff=41934&amp;oldid=prev</id>
		<title>Yamyam: 1版 をインポートしました</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:2.4/Source/Python/Ipo_Module&amp;diff=41934&amp;oldid=prev"/>
		<updated>2018-06-28T17:45:17Z</updated>

		<summary type="html">&lt;p&gt;1版 をインポートしました&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;2018年6月28日 (木) 17:45時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ja&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(相違点なし)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Yamyam</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Dev:2.4/Source/Python/Ipo_Module&amp;diff=41933&amp;oldid=prev</id>
		<title>wiki&gt;Terrywallwork: /* The proposed solution */</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:2.4/Source/Python/Ipo_Module&amp;diff=41933&amp;oldid=prev"/>
		<updated>2010-03-30T20:22:59Z</updated>

		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;The proposed solution&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- [[DeveloperWiki/KenHughes|KenHughes]] - 22 May 2005&lt;br /&gt;
&lt;br /&gt;
= [[BlenderDev/BPython|BPython]] IPO/Curve Module Changes=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page discusses the changes being implemented in the Ipo and Curve&lt;br /&gt;
modules.  It affects the [[BlenderDev/BPython|BPython]] types Ipo, Curve, Ipocurve, CurNurb, and&lt;br /&gt;
BezTriple, and creates a new BNURBPoint type for NURB control points.  As&lt;br /&gt;
of this writing, the changes proposed below have been inplemented are are&lt;br /&gt;
awaiting review and approval.&lt;br /&gt;
&lt;br /&gt;
The major goals of these changes include:&lt;br /&gt;
*making the API for Ipos and Curves as similar as possible&lt;br /&gt;
*making the API for Ipocurves and CurNurbs as similar as possible&lt;br /&gt;
*adding a type for NURB control points similar to the existing BezTriple type&lt;br /&gt;
*begin the deprecation of older methods and attributes&lt;br /&gt;
*add new methods and attributes where needed&lt;br /&gt;
*provide an interface to [[BlenderDev/MTex|MTex]] Ipo attributes (texture channels) for Material, World and Lamp objects&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
== Implementation Plan==&lt;br /&gt;
&lt;br /&gt;
-- [[DeveloperWiki/KenHughes|KenHughes]] - 25 Jun 2005&lt;br /&gt;
&lt;br /&gt;
The implementation plan has been broken into the stages below, along with&lt;br /&gt;
the current status.  When patches are submitted to the tracker, the status&lt;br /&gt;
will indicate this.  The sections which follow describe in more detail&lt;br /&gt;
the changes of that stage.&lt;br /&gt;
&lt;br /&gt;
*. '''Implement a [[BlenderDev/BPoint|BPoint]] module to wrap Blender NURB data.''' Status: posted to patch tracker (#2792), June 28, 2005&lt;br /&gt;
*. '''Implement sequence and iterator operators, append/insert/delete in Ipocurve and CurNurb modules.''' Operators on BezTriples and BPoints.  Status: posted to patch tracker (#2801), July 3, 2005&lt;br /&gt;
*. '''Implement sequence and iterator operators in Ipo module.''' Operators on Ipocurves objects, same as Curves have for CurNurbs. Status: posted to patch tracker (#2807), July 6. 2005&lt;br /&gt;
*. '''Implement dictionary constants for Ipos.''' This presents valid curve names (through module constants) which are used to get/append curves to Ipos.  Status: posted to patch tracker (#2812), July 8 2005&lt;br /&gt;
*. '''Implement access to texture channels IPO curves.'''  This will use a &amp;quot;top-down&amp;quot; access through the material/lamp/world ''' getTextures()''' method to return curves for a specific texture channel.  Status: development in progress&lt;br /&gt;
*. '''Add other methods to BPoint, BezTriple, CurNurb, Ipocurve, Curve and Ipo as needed.''' Status: development in progress&lt;br /&gt;
*. '''Implement instance attributes for certain instance methods.''' Examine which methods in all modules should be replaced by '''tp_getset''' access.  Status: to be done.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
== Stage 1. New [[BlenderDev/BPoint|BPoint]] module: posted to patch tracker (#2792), June 28, 2005==&lt;br /&gt;
&lt;br /&gt;
This modules implements a new [[BlenderDev/BNURBPoint|BNURBPoint]] type and provides two instance&lt;br /&gt;
methods: '''getPoint()''' and '''setPoint()'''.  These methods give and take&lt;br /&gt;
a sequence of 4 floats '''(x,y,z,w)'''.  There are also three instance&lt;br /&gt;
attributes: ''' pt: (read-only), the same thing as ''' getPoint()*&lt;br /&gt;
*tilt: (read/write), the point's tilt&lt;br /&gt;
*weight: (read/write), the point's weight&lt;br /&gt;
The CurNurb methods which used a sequence of floats now use BNURBPoints,&lt;br /&gt;
to make them consistent with BezTriples.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
== Stage 2. Changes to Ipocurve and CurNurb modules: posted to patch tracker (#2801), July 3, 2005==&lt;br /&gt;
&lt;br /&gt;
Ipocurves and CurNurbs now support access to their control points by&lt;br /&gt;
sequence and iterator operators.  Points can also be appended, inserted, and&lt;br /&gt;
deleted from the lists.  The point lists are treated as sequences, which&lt;br /&gt;
also means that some Python slice operations are supported.  Also, some&lt;br /&gt;
of stiv's '''tp_getset''' operations have been implemented, so that attributes&lt;br /&gt;
such as a CurNurb's '''mat_index''' or '''flagU''' can be read or written.&lt;br /&gt;
&lt;br /&gt;
Here is an example of some of the new capabilities:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import Blender&lt;br /&gt;
&lt;br /&gt;
curve = Blender.Curve.Get('curve')&lt;br /&gt;
curnurb = curve[0]&lt;br /&gt;
print len(curnurb), curnurb.flagU&lt;br /&gt;
if curnurb.isNurb: curnurb.append(Blender.BNURBPoint.New((0.0,0.0,0.0,0.1)))&lt;br /&gt;
&lt;br /&gt;
for point in curnurb: print point&lt;br /&gt;
&lt;br /&gt;
ipo = Blender.Ipo.Get('curve')&lt;br /&gt;
ipocurve = ipo.getCurve('LocX')&lt;br /&gt;
print ipocurve[0].getPoints()&lt;br /&gt;
del ipocurve[-1]&lt;br /&gt;
&lt;br /&gt;
ipocurve2 = Blender.Ipo.Get('curve').getCurve('LocY')&lt;br /&gt;
if len(ipocurve) &amp;gt; 3: ipocurve2[0:2] = ipocurve[0:2]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
== Stage 3. Changes to Ipo and Curve module: posted to patch tracker (#2807), July 6, 2005==&lt;br /&gt;
&lt;br /&gt;
The index operator[] was added to the Ipo modules to access Ipocurves.&lt;br /&gt;
Since Ipo curves have names they were implemented as mappings instead&lt;br /&gt;
of sequences, hence the indexing is more like a dictionary.  Append&lt;br /&gt;
and delete operations were also implemented (the Curve module also).&lt;br /&gt;
A lot of effort has also expended to begin deprecating methods which&lt;br /&gt;
were redundant as a result of these changes.  The deprecated methods&lt;br /&gt;
have not been removed to ensure compatibility, instead printing some&lt;br /&gt;
warnings to the console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import Blender&lt;br /&gt;
&lt;br /&gt;
curve = Blender.Curve.Get('curve')&lt;br /&gt;
curve.append(Blender.BNURBPoint.New((0.0,0.0,0.0,0.1)))&lt;br /&gt;
del curve[-1]&lt;br /&gt;
&lt;br /&gt;
curnurb = curve[0]&lt;br /&gt;
print len(curnurb), curnurb.flagU&lt;br /&gt;
if curnurb.isNurb: curnurb.append(Blender.BNURBPoint.New((0.0,0.0,0.0,0.1)))&lt;br /&gt;
&lt;br /&gt;
for point in curnurb: print curve&lt;br /&gt;
&lt;br /&gt;
ipo = Blender.Ipo.Get('curve')&lt;br /&gt;
print len(ipo)&lt;br /&gt;
ipocurve = ipo['LocX']&lt;br /&gt;
print ipocurve[0].getPoints()&lt;br /&gt;
del ipocurve[-1]&lt;br /&gt;
&lt;br /&gt;
ipocurve2 = Blender.Ipo.Get('curve')['LocY']&lt;br /&gt;
if len(ipocurve) &amp;gt; 3: ipocurve2[0:2] = ipocurve[0:2]&lt;br /&gt;
&lt;br /&gt;
del ipo['LocX']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
== Stage 4. Dictionary constants for Ipos: posted to patch tracker (#2812), July 8, 2005==&lt;br /&gt;
&lt;br /&gt;
One issue for Python programmers with Ipos (and many other modules) is&lt;br /&gt;
knowing which curves are defined for each type of Ipo.  Currently strings&lt;br /&gt;
are used in the mapping operator[] (formerly '''getCurves()''') and '''append()'''&lt;br /&gt;
(formerly '''addCurve()''') to specify the curve; however, there was no way&lt;br /&gt;
within a [[BlenderDev/BPython|BPython]] script to know which strings were valid.  Dictionaries and&lt;br /&gt;
module constants have been added to address this problem.&lt;br /&gt;
&lt;br /&gt;
A new instance attribute '''types''' was added which returns a dictionary of&lt;br /&gt;
module constants for the Ipo.  Also, each of the curve types are available&lt;br /&gt;
as a &amp;quot;virtual instance attribute&amp;quot; of the IPO (see example below) which make&lt;br /&gt;
it simple for a script programmer to specify a curve.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import Blender&lt;br /&gt;
&lt;br /&gt;
ipo = Blender.Ipo.Get('curve')&lt;br /&gt;
for name in ipo.types: if ipo[name] != None: print 'has curve ',name.value&lt;br /&gt;
&lt;br /&gt;
LocX = ipo.types['LocX']&lt;br /&gt;
LocY = ipo.LocY&lt;br /&gt;
ipocurve = ipo[LocX]&lt;br /&gt;
ipocurve2 = Blender.Ipo.Get('curve')[LocY]&lt;br /&gt;
if len(ipocurve) &amp;gt; 3: ipocurve2[0:2] = ipocurve[0:2]&lt;br /&gt;
&lt;br /&gt;
del ipo[LocX]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== curve names as attrs, __getitem__ to replace .evaluate(time) ?===&lt;br /&gt;
&lt;br /&gt;
I also thought of dictionaries when this was discussed at the conference (2004), but agreed when someone proposed simply using instance attributes (they are in a dict too of course, the __dict__). Furthermore, have been wondering if the standard list access method would be good to use instead of curipo.evaluate(time). That would be something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#gets the value of that curve at frame 10, equivalent of current ipocurve.evaluate(10)&lt;br /&gt;
obipo.loc_x[10]&lt;br /&gt;
#changes the value or adds a new control point&lt;br /&gt;
obipo.loc_x[20] = 15&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now how does that seem? Non-existing curves would evaluate as None.&lt;br /&gt;
&lt;br /&gt;
-- [[BlenderDev/ToniAlatalo|ToniAlatalo]] - 16 Jun 2005&lt;br /&gt;
&lt;br /&gt;
Stiv's comments from the [[BlenderDev/BPython|BPython]] ML:&lt;br /&gt;
&lt;br /&gt;
An interesting idea.  However, I '''believe''' sometimes Ipos are&lt;br /&gt;
evaluated between frames for things like fields and motion blur.&lt;br /&gt;
This would mean float arguments to [], something python would&lt;br /&gt;
complain about.&lt;br /&gt;
&lt;br /&gt;
A better method might be to use the call operator() for evaluating&lt;br /&gt;
the curve and use the index operator[] to get a sequence of control&lt;br /&gt;
points.  This would fit in with how Curves are implemented&lt;br /&gt;
&lt;br /&gt;
-- [[BlenderDev/KenHughes|KenHughes]] - 08 Jul 2005&lt;br /&gt;
&lt;br /&gt;
how would setting keys/controlpoints work nicely then?&lt;br /&gt;
&lt;br /&gt;
-- [[BlenderDev/ToniAlatalo|ToniAlatalo]] - 28 Oct 2005&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Stage 5. Accessing texture channels IPO curves: development in progress==&lt;br /&gt;
&lt;br /&gt;
The texture channels are referenced inside Blender using by the constants&lt;br /&gt;
MA_MAP1 through MA_MAP10, although the channel numbers displayed&lt;br /&gt;
in the IPO curve editor window for materials, lamps and worlds are 0&lt;br /&gt;
through 9.  Additionally, the curve names displayed in that window don't&lt;br /&gt;
indicate which curves are the texture channels curves and which are not.&lt;br /&gt;
&lt;br /&gt;
=== The problem with the current API===&lt;br /&gt;
&lt;br /&gt;
No distinction between texture channel&lt;br /&gt;
curves and other curves.  If two Col curves exist two different texture&lt;br /&gt;
channels, this code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import Blender&lt;br /&gt;
&lt;br /&gt;
ipo = Blender.Ipo.Get('MatIpo')&lt;br /&gt;
print ipo.getCurves()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gives the output below, with way to discern which curve belongs to which&lt;br /&gt;
texture channel since new curves are always appended to the end of list:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[[IpoCurve &amp;quot;Col&amp;quot;], [IpoCurve &amp;quot;Col&amp;quot;]]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, when a curve is created using '''addCurve()''', it is always added to the first texture channel.&lt;br /&gt;
&lt;br /&gt;
A related comment; the new '''insertIpoKey()''' methods added to modules like&lt;br /&gt;
Lamp, Material, etc., have a similar problem; they only allow adding to&lt;br /&gt;
texture channel 0.  They also need a way to select the texture channel.&lt;br /&gt;
&lt;br /&gt;
=== Comments on Accessing texture channels===&lt;br /&gt;
&lt;br /&gt;
I wonder if the most intuitive way to add texture channel support is from&lt;br /&gt;
the top down thru Materials.  A Material has 10 Textures.  A Texture&lt;br /&gt;
can have an Ipo.  Think of the Outliner display.  Data access would be&lt;br /&gt;
something like:   myMaterial.texture[0].ipo&lt;br /&gt;
&lt;br /&gt;
-- [[BlenderDev/StephenSwaney|StephenSwaney]] - 04 Jun 2005&lt;br /&gt;
==== Blender database structure====&lt;br /&gt;
&lt;br /&gt;
Reading over this makes me think there is a fundamental misunderstanding of&lt;br /&gt;
the blender database structure.&lt;br /&gt;
Reading over this makes me think there is a fundamental misunderstanding of&lt;br /&gt;
the blender database structure.&lt;br /&gt;
&lt;br /&gt;
Blender uses an object structured database.  Scene, Object, ObData ( like&lt;br /&gt;
Mesh, Curve, etc), Material and Texture are all objects.  A particular&lt;br /&gt;
instance of an object can be linked to multiple parents. The same Object can&lt;br /&gt;
be in multiple Scenes, the same Curve can be linked to multiple Objects.&lt;br /&gt;
Similarly with a Texture being linked to multiple Materials.  Ipos are not an&lt;br /&gt;
exception to this.&lt;br /&gt;
&lt;br /&gt;
Because of the linked object nature of the database, the *.Get() methods have&lt;br /&gt;
a somewhat limited use.  These methods return a specific instance of an object&lt;br /&gt;
type, but they do not tell you which of the (possibly many) parent objects&lt;br /&gt;
the returned type is linked to.  This implies that the natural access to an&lt;br /&gt;
instance is from the top down starting for example with an Object.&lt;br /&gt;
&lt;br /&gt;
-- [[BlenderDev/StephenSwaney|StephenSwaney]] - 10 Jul 2005&lt;br /&gt;
&lt;br /&gt;
I don't have a problem getting rid of the *.Get() methods, but realize that a&lt;br /&gt;
top-down access doesn't solve the problem of telling the user which other&lt;br /&gt;
objects may also be linked to that Ipo.&lt;br /&gt;
&lt;br /&gt;
Let me stress again that&lt;br /&gt;
the texture channel '''are not part of the texture'''.  Perhaps we&lt;br /&gt;
should refer to them as the mtex objects, which again isn't accurate since&lt;br /&gt;
it implies &amp;quot;Material Texture&amp;quot;, but mtex's are also part of lamp and world&lt;br /&gt;
objects.   We may not like how that's implemented, but that's how it is.&lt;br /&gt;
&lt;br /&gt;
-- [[DeveloperWiki/KenHughes|KenHughes]] - 10 Jul 2005&lt;br /&gt;
&lt;br /&gt;
=== The proposed solution===&lt;br /&gt;
A &amp;quot;top-down&amp;quot; approach is being implemented to access texture channels from&lt;br /&gt;
a material, lamp or world object; this is done using the [[BlenderDev/BPython|BPython]] [[BlenderDev/MTex|MTex]] type.&lt;br /&gt;
Materials have a ''' getTextures()''' method which returns a list of the&lt;br /&gt;
10 textures linked to the material (the current Bython Lamp and World&lt;br /&gt;
API doesn't have this, but it will be added).  An instance attribute '''ipo'''&lt;br /&gt;
will be implemened which returns a &amp;quot;virtual&amp;quot; Ipo object which has access&lt;br /&gt;
only to the texture channel curves for that particular Ipo type and channel.&lt;br /&gt;
&lt;br /&gt;
An example: this code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import Blender&lt;br /&gt;
&lt;br /&gt;
myMat = Blender.Material.Get('Material')&lt;br /&gt;
mtex = myMat.getTextures()&lt;br /&gt;
# mtex = myMat.textures         # this will also work&lt;br /&gt;
&lt;br /&gt;
if mtex[0] != None: ipo = mtex[0].ipo print 'ipo is ',ipo print 'keys are ',ipo.types.keys()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would output something like this (assuming the first texture channel has a&lt;br /&gt;
texture):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ipo is  [Ipo &amp;quot;Material&amp;quot; (Material)]&lt;br /&gt;
keys are  ['Disp', 'OfsZ', 'OfsX', 'OfsY', 'SizeX', 'SizeY', 'SizeZ', 'texR', 'DefVar', 'Var', 'texG', 'Col', 'Nor', 'texB']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- [[DeveloperWiki/KenHughes|KenHughes]] - 25 Jun 2005&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Stage 6. Adding other methods and attributes: development in progress==&lt;br /&gt;
&lt;br /&gt;
This is an open topic; what else would be useful?&lt;br /&gt;
*jms has requested the ability to get/set the select status of an Ipo or curve&lt;br /&gt;
*Toni had suggested an easy way to get the an Ipo curve's value at a particular time.  Stiv's suggested using the call operator()&lt;br /&gt;
*I'd like to be able to get/set the handle types of BezTriples, and also to change the cyclic setting of curNurbs.  And a method to update an Ipo curve after the control points have changed&lt;br /&gt;
&lt;br /&gt;
Methods vs Attributes:  Our knowlege of Python has grown since the Bpy API was first done.  Of course, Python itself has grown, too.  One big change to Python is the blurring of differences between user defined types (like ours) and regular types and classes.  Historically, we have used methods as the preferred way to access bpy type attributes.  My personal preference is for accessing attributes directly ( myType.some_attr = 1 ) rather than thru methods ( myType.setSomeAttr(1) ).&lt;br /&gt;
&lt;br /&gt;
-- [[BlenderDev/StephenSwaney|StephenSwaney]] - 04 Jun 2005&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
== Other issues -- [[DeveloperWiki/KenHughes|KenHughes]]==&lt;br /&gt;
&lt;br /&gt;
Stivs, teeth and I had a discussion (Joseph also added some input about&lt;br /&gt;
a similar problem with vector wrappers) on the Bf-python ML about what&lt;br /&gt;
(if anything) should be done to keep changes to the point list of an&lt;br /&gt;
Ipocurve or CurNurb from messing up any [[BlenderDev/BPython|BPython]] BezTriple objects.&lt;br /&gt;
I think we agreed there are some nasty things a Python programmer can do&lt;br /&gt;
which they shouldn't, but that it would be better throw an exception at&lt;br /&gt;
them instead of corrupted memory or a segfault.&lt;br /&gt;
&lt;br /&gt;
The solution which has been implemented is for each BezTriple&lt;br /&gt;
and BNURBPoint to check its&lt;br /&gt;
parent curve to see (a) if the parent is a CurNurb or Ipocurve and&lt;br /&gt;
(b) if the point's index in the curve list is larger than the list's&lt;br /&gt;
current size.  This is not fool-proof but better than nothing.&lt;br /&gt;
&lt;br /&gt;
For those interested, the thread appears [[http://projects.blender.org/pipermail/bf-python/2005-June/002793.html|here|on|the|Bf-python|list]]&lt;br /&gt;
&lt;br /&gt;
-- [[DeveloperWiki/KenHughes|KenHughes]] - 19 Jun 2005&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Modules]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Script]]&lt;/div&gt;</summary>
		<author><name>wiki&gt;Terrywallwork</name></author>
		
	</entry>
</feed>