﻿<?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%3ASundayMeetingAgenda%2FNewDev_meetings%2F2009-12-06th</id>
	<title>Dev:SundayMeetingAgenda/NewDev meetings/2009-12-06th - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Dev%3ASundayMeetingAgenda%2FNewDev_meetings%2F2009-12-06th"/>
	<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:SundayMeetingAgenda/NewDev_meetings/2009-12-06th&amp;action=history"/>
	<updated>2026-06-14T05:36:49Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Dev:SundayMeetingAgenda/NewDev_meetings/2009-12-06th&amp;diff=92021&amp;oldid=prev</id>
		<title>Yamyam: 1版 をインポートしました</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:SundayMeetingAgenda/NewDev_meetings/2009-12-06th&amp;diff=92021&amp;oldid=prev"/>
		<updated>2018-06-28T18:44:33Z</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日 (木) 18:44時点における版&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:SundayMeetingAgenda/NewDev_meetings/2009-12-06th&amp;diff=92020&amp;oldid=prev</id>
		<title>wiki&gt;Mindrones bot: Bot: Fixing redirects; cosmetic changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:SundayMeetingAgenda/NewDev_meetings/2009-12-06th&amp;diff=92020&amp;oldid=prev"/>
		<updated>2011-06-19T17:38:11Z</updated>

		<summary type="html">&lt;p&gt;Bot: Fixing redirects; cosmetic changes&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Doc pages we derived from it = &lt;br /&gt;
&lt;br /&gt;
* [[Dev:2.5/Source/Architecture/DefineProperty|RNA explanation]]&lt;br /&gt;
* [[Dev:2.5/Source/Architecture/Operators/Tutorial|Operators explanation]]&lt;br /&gt;
* [[Dev:2.5/Doc/Blender Source/Files structure|Blender's code file structure]]&lt;br /&gt;
&lt;br /&gt;
= NewDev Useful links =&lt;br /&gt;
&lt;br /&gt;
* [http://www.blender.org/development/architecture/ Blender Architecture]&lt;br /&gt;
* [http://www.blender.org/community/get-involved/ How to get involved]&lt;br /&gt;
&lt;br /&gt;
= Meeting report =&lt;br /&gt;
&lt;br /&gt;
http://lists.blender.org/pipermail/bf-committers/2009-December/025396.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NEW DEV MEETING 2009-12-06th&lt;br /&gt;
&lt;br /&gt;
Mentors: ideasman42, theeth and DingTo&lt;br /&gt;
Log: http://blenderartists.org/~theeth/bf/meeting-newdev-09-12-06.txt&lt;br /&gt;
&lt;br /&gt;
Agenda has been:&lt;br /&gt;
&lt;br /&gt;
1. Decide if talk about 2.49 codebase or 2.5 only&lt;br /&gt;
2. Talking about C codebase or Python?&lt;br /&gt;
3. Mentorships&lt;br /&gt;
4. New devs interests?&lt;br /&gt;
5. Source code comments and documentation&lt;br /&gt;
6. General questions&lt;br /&gt;
  6.1 Blender architecture and how to grasp &amp;quot;the big picture&amp;quot;&lt;br /&gt;
  6.2 Finding things in the code&lt;br /&gt;
  6.3 RNA explanation&lt;br /&gt;
  6.4 Operators explanation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Decide if talk about 2.49 codebase or 2.5 only&lt;br /&gt;
&lt;br /&gt;
  - We agreed not talking 2.4x code.&lt;br /&gt;
&lt;br /&gt;
2. Talking about C codebase or Python?&lt;br /&gt;
&lt;br /&gt;
  - majority wanted C, some C/python,&lt;br /&gt;
&lt;br /&gt;
  - ideasman42 and theeth agreed that:&lt;br /&gt;
    - C/Python is very vague and it depends very much on where developers are&lt;br /&gt;
      interested in working, what problems they try to solve&lt;br /&gt;
     - also, in 2.5, it's not as clear cut as it used to be&lt;br /&gt;
&lt;br /&gt;
  - ideasman42 asked if newdevs are more o C or python:&lt;br /&gt;
    - most are python/C or python with some basic C&lt;br /&gt;
    - one said to be C/C++&lt;br /&gt;
&lt;br /&gt;
3. Mentorships&lt;br /&gt;
&lt;br /&gt;
  - PapaSmurf asked whether experienced developers would like to mentor a new&lt;br /&gt;
    developer, like we did with GSOC: theeth showed interest :)&lt;br /&gt;
&lt;br /&gt;
4. New devs interests?&lt;br /&gt;
&lt;br /&gt;
  - kattkieru: armature and constraints systems, Python import/expoorter&lt;br /&gt;
  - amennelet would like to work on windows manager&lt;br /&gt;
  - djaddison: low level event handling&lt;br /&gt;
  - dmbasso/yoff: physics simulation, specifically muscle simulation -&amp;gt; Campbell&lt;br /&gt;
    answered this is too spesific area .&lt;br /&gt;
  - nfz: interested in &amp;quot;2.5 todo list and bug squashing&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  - Interesting note:&lt;br /&gt;
      &amp;lt;KAHR-Alpha&amp;gt;  isn't bullet C++?&lt;br /&gt;
      &amp;lt;ideasman42&amp;gt;  yes, but it has a C api. Not sure how effective that is though,&lt;br /&gt;
        only used the C++ api&lt;br /&gt;
&lt;br /&gt;
5. Source code comments and documentation&lt;br /&gt;
&lt;br /&gt;
  - matd would like to see important souce code files commented at the  beginning,&lt;br /&gt;
    in order to see what's a certain file for.&lt;br /&gt;
  - PapaSmurf and matd would liek to have _readme in each folder explaining the&lt;br /&gt;
    purpose fo the contents of that folder&lt;br /&gt;
    (at least in the root dir of all important modules like wm, rna, etc ...)&lt;br /&gt;
&lt;br /&gt;
6. General questions&lt;br /&gt;
&lt;br /&gt;
    6.1 BLENDER CODE ARCHITECTURE: &amp;quot;THE BIG PICTURE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    - http://www.blender.org/development/architecture/&lt;br /&gt;
    - http://www.blender.org/community/get-involved/&lt;br /&gt;
    - (!!) theeth has patiently explained most of the folders in the code:&lt;br /&gt;
      http://wiki.blender.org/index.php/Dev:Doc/Blender_Source/Files_structure&lt;br /&gt;
    - Ideasman42 suggestion: &amp;quot;Not sure this is GOOD advice, but I found its good&lt;br /&gt;
      not even to try understand the big picture, just learn one area well&amp;quot;.&lt;br /&gt;
      Theeth agrees.&lt;br /&gt;
    - DingTo started with UI scripts, expanded to RNA and Nodes, nfz too.&lt;br /&gt;
    - General agreement about starting from UI scripts or operators (in files&lt;br /&gt;
      ending in &amp;quot;_ops.c&amp;quot;).&lt;br /&gt;
  &lt;br /&gt;
    6.2 FINDING THINGS IN CODE&lt;br /&gt;
&lt;br /&gt;
    - Campbell asks how people searches in the code&lt;br /&gt;
      - cscope (kh_pylon)&lt;br /&gt;
      - code::blocks (nfz)&lt;br /&gt;
      - kscope, crep, http://wiki.blender.org/index.php/User:Ideasman42#crep (mindrones)&lt;br /&gt;
&lt;br /&gt;
    6.3 RNA EXPLANATION&lt;br /&gt;
        (http://wiki.blender.org/index.php/Dev:Doc/Blender_Source/RNA)&lt;br /&gt;
&lt;br /&gt;
      RNA is a data access and simple operations API. It sits on top of the low&lt;br /&gt;
      level C structs (called DNA).&lt;br /&gt;
      It's very basic stuff, like links between different structures, specific&lt;br /&gt;
      types and range of different members, ...&lt;br /&gt;
      From that, we generate the RNA Python API&lt;br /&gt;
&lt;br /&gt;
      RNA defines not only the name of the property, also it sends an Notifier to&lt;br /&gt;
      tell Blender what has changed, and it contains the UI Text and Tooltip&lt;br /&gt;
      When you change that you also want blender to redraw for instance, or update&lt;br /&gt;
      its childrens location (childrens matrix)&lt;br /&gt;
&lt;br /&gt;
      We dont want to define these update calls for anim/ui/py - so instead each&lt;br /&gt;
      access via rna: &amp;quot;ob.location&amp;quot; in python does an rna lookup, gets the array&lt;br /&gt;
      in C, the python api converts this known rna type to a vector and returns the value.&lt;br /&gt;
      Internally it does py -&amp;gt; coerce into an array -&amp;gt; rna array set function -&amp;gt; DNA array.&lt;br /&gt;
      Probably this is only interesying to py api devs.&lt;br /&gt;
&lt;br /&gt;
      It might be interesting to note that RNA definition is split in two.&lt;br /&gt;
      A compile time generation and runtime code. In the RNA files, this is&lt;br /&gt;
      represented by #ifdef RNA_RUNTIME #ELSE #ENDIF&lt;br /&gt;
&lt;br /&gt;
      If you ever want to look at rna code... you can mouse over the button and&lt;br /&gt;
      see its python variable, so if you mouse over object location youll get its&lt;br /&gt;
      python name, then search for &amp;quot;location&amp;quot;, or &amp;quot;armature_head&amp;quot; or whatever...&lt;br /&gt;
      this is fairly easy way to find the rna code from a button (you can also just&lt;br /&gt;
      search for the tooltip which was people was used to do mostly in 2.4x)&lt;br /&gt;
&lt;br /&gt;
      The rna code is in source/blender/makesrna/&lt;br /&gt;
      The file will start with rna_.&lt;br /&gt;
&lt;br /&gt;
      If you use crep.sh, remember to add the &amp;quot;&amp;quot;'s or you'll get too&lt;br /&gt;
      many hits: for example if you look for &amp;quot;Full screen&amp;quot;, you do:&lt;br /&gt;
      &lt;br /&gt;
      $ ./crep.sh &amp;quot;Full Screen&amp;quot;&lt;br /&gt;
      1 ./source/blender/editors/screen/screendump.c:177:       RNA_def_boolean(ot-&amp;gt;srna, &amp;quot;full&amp;quot;, 1, &amp;quot;Full Screen&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
      2 ./source/blender/editors/screen/screendump.c:331:       RNA_def_boolean(ot-&amp;gt;srna, &amp;quot;full&amp;quot;, 1, &amp;quot;Full Screen&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
      3 ./source/blender/editors/screen/screen_ops.c:1592:      ot-&amp;gt;name = &amp;quot;Toggle Full Screen&amp;quot;;&lt;br /&gt;
      4 ./source/blender/makesrna/intern/rna_scene.c:1387:              {R_OUTPUT_SCREEN, &amp;quot;SCREEN&amp;quot;, 0, &amp;quot;Full Screen&amp;quot;, &amp;quot;Images are rendered in full Screen&amp;quot;},&lt;br /&gt;
      enter a number to edit &amp;gt;&lt;br /&gt;
&lt;br /&gt;
      Basically we have Notifiers and Listeners.&lt;br /&gt;
      RNA props send Notifiers and the different space types &amp;quot;listen&amp;quot; to those&lt;br /&gt;
      Notifiers and do an update/redraw&lt;br /&gt;
      &lt;br /&gt;
      Example and Questions&lt;br /&gt;
      -----------------------------------------------------------------------------&lt;br /&gt;
      So you have an objects location, which is: &lt;br /&gt;
&lt;br /&gt;
      // in DNA_object_types.h&lt;br /&gt;
      float location[3];&lt;br /&gt;
&lt;br /&gt;
      but as well as this you want to access it from the UI and python and animations&lt;br /&gt;
      system of course: see the RNA counterpart below.&lt;br /&gt;
&lt;br /&gt;
      Definition code:&lt;br /&gt;
&lt;br /&gt;
      prop= RNA_def_property(srna, &amp;quot;location&amp;quot;, PROP_FLOAT, PROP_TRANSLATION);&lt;br /&gt;
      RNA_def_property_float_sdna(prop, NULL, &amp;quot;loc&amp;quot;);&lt;br /&gt;
      RNA_def_property_editable_array_func(prop, &amp;quot;rna_Object_location_editable&amp;quot;);&lt;br /&gt;
      RNA_def_property_ui_text(prop, &amp;quot;Location&amp;quot;, &amp;quot;Location of the object.&amp;quot;);&lt;br /&gt;
      RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, &amp;quot;rna_Object_update&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
      Q: Does this RNA specify 3 floats? Or is it not supposed to?&lt;br /&gt;
      A: RNA only references the 3 floats dna defines, the subtype PROP_TRANSLATION&lt;br /&gt;
          does that. For more generic arrays, the size has to be supplied.&lt;br /&gt;
&lt;br /&gt;
      Q: so how does &amp;quot;ob.location = (x,y,z)&amp;quot; or whatever in Python update the DNA values?&lt;br /&gt;
      A: It runs the rna function to set the array from a python array that is converted,&lt;br /&gt;
          then it calls the RNA's update function which will trigger other updates&lt;br /&gt;
          if they are defined for that type.&lt;br /&gt;
&lt;br /&gt;
      Q: Well wait, does that update function get generated automatically or do&lt;br /&gt;
          we have to write it? Is rna_object_update a function somewhere?&lt;br /&gt;
      A: It's done through the call to RNA_def_property_update. &lt;br /&gt;
          In this case we have:&lt;br /&gt;
          RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, &amp;quot;rna_Object_update&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
          - Thats a function at the beginning of the RNA file.&lt;br /&gt;
          - These NC_ and ND_ Notifiers are defined in wm_types.h, inside&lt;br /&gt;
            windowmanager code.&lt;br /&gt;
          - rna_Object_update is defined in the RUNTIME part of the code.&lt;br /&gt;
&lt;br /&gt;
          NOTE:&lt;br /&gt;
          - You don't always need a function, so that can be NULL and only use&lt;br /&gt;
            notifiers flags.&lt;br /&gt;
          - Most of the time you dont needs to write your own update functions,&lt;br /&gt;
            or they can be added later if you get some redraw problems.. its not&lt;br /&gt;
            likely to break if they are not there...&lt;br /&gt;
&lt;br /&gt;
      Q: So if you want to add a new type of object, do you just need to define&lt;br /&gt;
          RNA or also DNA?&lt;br /&gt;
      A: Defining new object types wasn't done in years and you'd also need to be&lt;br /&gt;
          familiar with reading and writing code in blender (readfile.c/writefile.c).&lt;br /&gt;
          Not suggested for beginners.&lt;br /&gt;
&lt;br /&gt;
      -----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    6.4 OPERATORS EXPLANATION&lt;br /&gt;
        (http://wiki.blender.org/index.php/Dev:Doc/Blender_Source/Operators)&lt;br /&gt;
&lt;br /&gt;
      Operators are tools.&lt;br /&gt;
&lt;br /&gt;
      They're a very simple data structure with ID, descript and label strings,&lt;br /&gt;
      as well as a couple of function pointers and flags.&lt;br /&gt;
      The functions will be called when the operator is executed.&lt;br /&gt;
&lt;br /&gt;
      The basics are exec, invoke, poll.&lt;br /&gt;
&lt;br /&gt;
      EXEC&lt;br /&gt;
      It is called to apply the operator using only its parameters.&lt;br /&gt;
      &lt;br /&gt;
      INVOKE&lt;br /&gt;
      It is called when the operator runs interactively, when it needs user input&lt;br /&gt;
      (from a menu, mouse motion, ...)&lt;br /&gt;
&lt;br /&gt;
      POLL&lt;br /&gt;
      This is called when the operator can be run in the current Context.&lt;br /&gt;
      The context is more or less the current state of the UI (where the pointer&lt;br /&gt;
      is, what's selected, ...), we'll talk about context later.&lt;br /&gt;
      For example the poll function is used to grey out buttons and menu entries.&lt;br /&gt;
&lt;br /&gt;
      Exec and invoke are the functions that actually do stuff.&lt;br /&gt;
      For instance invoke() gets the mouse location, execute() assumes the input&lt;br /&gt;
      was alredy assigned as operator options.&lt;br /&gt;
&lt;br /&gt;
      Generic poll functions also exist, you don't have to write your own.&lt;br /&gt;
&lt;br /&gt;
      The operator definition can also include RNA properties, that are used as&lt;br /&gt;
      operator parameters.&lt;br /&gt;
&lt;br /&gt;
      There are around 1000 operators at the moment: you can find out the complete&lt;br /&gt;
      list from the operator cheetsheet in the Help menu.&lt;br /&gt;
&lt;br /&gt;
      NOTE ABOUT TEMPLATES&lt;br /&gt;
      If you want to get started with writing operators, there are python operator&lt;br /&gt;
      templates in the text templates menu, so you can start by loading the template.&lt;br /&gt;
      Running it, it wont appear in the menu but you can access it from the spacebar&lt;br /&gt;
      search.&lt;br /&gt;
&lt;br /&gt;
      Example and Questions&lt;br /&gt;
      -----------------------------------------------------------------------------&lt;br /&gt;
      The make parent operator defines a property for parenting type.&lt;br /&gt;
      Its invoke function displays the parenting menu.&lt;br /&gt;
      Its exec reads the type from the properties and does whatever is needed.&lt;br /&gt;
      For operators that need a menu like that, we have a generic menu function&lt;br /&gt;
      that can be used.&lt;br /&gt;
      Here's the parenting operator:&lt;br /&gt;
      &lt;br /&gt;
      void OBJECT_OT_parent_set(wmOperatorType *ot)&lt;br /&gt;
      {&lt;br /&gt;
        /* identifiers */&lt;br /&gt;
        ot-&amp;gt;name= &amp;quot;Make Parent&amp;quot;;&lt;br /&gt;
        ot-&amp;gt;description = &amp;quot;Set the object's parenting.&amp;quot;;&lt;br /&gt;
        ot-&amp;gt;idname= &amp;quot;OBJECT_OT_parent_set&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        /* api callbacks */&lt;br /&gt;
        ot-&amp;gt;invoke= parent_set_invoke;&lt;br /&gt;
        ot-&amp;gt;exec= parent_set_exec;&lt;br /&gt;
&lt;br /&gt;
        ot-&amp;gt;poll= ED_operator_object_active_editable;&lt;br /&gt;
&lt;br /&gt;
        /* flags */&lt;br /&gt;
        ot-&amp;gt;flag= OPTYPE_REGISTER|OPTYPE_UNDO;&lt;br /&gt;
&lt;br /&gt;
        RNA_def_enum(ot-&amp;gt;srna, &amp;quot;type&amp;quot;, prop_make_parent_types, 0, &amp;quot;Type&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      In this operator:&lt;br /&gt;
      - parent_set_invoke, parent_set_exec, and ED_operator_object_active_editable&lt;br /&gt;
        are functions.&lt;br /&gt;
      - prop_make_parent_types is an array of defined types&lt;br /&gt;
      - the flags are used to specify different behavior:&lt;br /&gt;
        - OPTYPE_REGISTER means it will be displayed in the last operator toolbar&lt;br /&gt;
        - OPTYPE_UNDO means it will set an undo point after it runs&lt;br /&gt;
&lt;br /&gt;
      Q: Undo handled generically? (as it looks to be)&lt;br /&gt;
      A: Yes.&lt;br /&gt;
&lt;br /&gt;
      Q: In this example function where do you get ahold of the Context.&lt;br /&gt;
      A: The context is passed as argument to the invoke, exec and poll function.&lt;br /&gt;
          - The event system will give you the correct context,&lt;br /&gt;
          - invoke gets the context, the operator structure and the caller event,&lt;br /&gt;
          - exec gets the context and the operator&lt;br /&gt;
&lt;br /&gt;
      Q: Is there a difference between python operators and C operators apart from speed?&lt;br /&gt;
      A: No, the python operator creates an operator type struct when registered&lt;br /&gt;
&lt;br /&gt;
      Q: What about for submitting to the code base?  Do the main devs prefer Python&lt;br /&gt;
          or C operators?&lt;br /&gt;
      A: Py defined operators are acceptable as patches tracker.&lt;br /&gt;
          https://projects.blender.org/tracker/?atid=127&amp;amp;group_id=9&amp;amp;func=browse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>wiki&gt;Mindrones bot</name></author>
		
	</entry>
</feed>