[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20685] branches/bb_dev: LOD system part 1 : UI+backend for multiple mesh selection per object.
Benoit Bolsee
benoit.bolsee at online.be
Sat Jun 6 21:50:13 CEST 2009
Revision: 20685
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20685
Author: ben2610
Date: 2009-06-06 21:50:09 +0200 (Sat, 06 Jun 2009)
Log Message:
-----------
LOD system part 1: UI+backend for multiple mesh selection per object.
Modified Paths:
--------------
branches/bb_dev/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj
branches/bb_dev/projectfiles_vc9/blender/makesdna/DNA_makesdna.vcproj
branches/bb_dev/source/blender/blenkernel/intern/mesh.c
branches/bb_dev/source/blender/blenkernel/intern/object.c
branches/bb_dev/source/blender/blenloader/intern/readfile.c
branches/bb_dev/source/blender/blenloader/intern/writefile.c
branches/bb_dev/source/blender/include/butspace.h
branches/bb_dev/source/blender/makesdna/DNA_object_types.h
branches/bb_dev/source/blender/makesdna/intern/makesdna.c
branches/bb_dev/source/blender/src/buttons_editing.c
branches/bb_dev/source/blender/src/editobject.c
Added Paths:
-----------
branches/bb_dev/source/blender/blenkernel/BKE_lod.h
branches/bb_dev/source/blender/blenkernel/intern/lod.c
branches/bb_dev/source/blender/makesdna/DNA_lod_types.h
Modified: branches/bb_dev/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj
===================================================================
--- branches/bb_dev/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj 2009-06-06 19:32:18 UTC (rev 20684)
+++ branches/bb_dev/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj 2009-06-06 19:50:09 UTC (rev 20685)
@@ -4,6 +4,7 @@
Version="9,00"
Name="BKE_blenkernel"
ProjectGUID="{CAE37E91-6570-43AC-A4B4-7A37A4B0FC94}"
+ RootNamespace="BKE_blenkernel"
TargetFrameworkVersion="131072"
>
<Platforms>
@@ -629,6 +630,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\blenkernel\intern\lod.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\blenkernel\intern\material.c"
>
</File>
@@ -930,6 +935,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\blenkernel\BKE_lod.h"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\blenkernel\BKE_main.h"
>
</File>
Modified: branches/bb_dev/projectfiles_vc9/blender/makesdna/DNA_makesdna.vcproj
===================================================================
--- branches/bb_dev/projectfiles_vc9/blender/makesdna/DNA_makesdna.vcproj 2009-06-06 19:32:18 UTC (rev 20684)
+++ branches/bb_dev/projectfiles_vc9/blender/makesdna/DNA_makesdna.vcproj 2009-06-06 19:50:09 UTC (rev 20685)
@@ -689,6 +689,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\makesdna\DNA_lod_types.h"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\makesdna\DNA_material_types.h"
>
</File>
Added: branches/bb_dev/source/blender/blenkernel/BKE_lod.h
===================================================================
--- branches/bb_dev/source/blender/blenkernel/BKE_lod.h (rev 0)
+++ branches/bb_dev/source/blender/blenkernel/BKE_lod.h 2009-06-06 19:50:09 UTC (rev 20685)
@@ -0,0 +1,68 @@
+/**
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef BKE_LOD_H
+#define BKE_LOD_H
+
+struct bLodLevel;
+struct Object;
+struct ID;
+struct ListBase;
+
+
+/* allocates and initializes general main data */
+extern struct bLodLevel *lodNew(void);
+
+/* frees internal data and lod level itself */
+extern void lodFree(struct bLodLevel *sb);
+
+/* duplicate lod level plus internal data, maintain use count */
+struct bLodLevel *lodCopy(struct bLodLevel *lod);
+
+/* return the current level according ob->lodlevel */
+struct bLodLevel *lodGetCurrent(struct Object *ob);
+
+/* replace the data block in the current lod level, maintain usage count */
+void lodUpdateCurrent(struct Object *ob, struct ID *newid);
+
+/* remove current lod level and make next one current */
+void lodDeleteCurrent(struct Object *ob);
+
+/* returns the number of LOD levels */
+int lodLevelCount(struct Object *ob);
+
+/* make the object data pointed by current LOD level the active object data.
+ returns 1 if object data was changed */
+int lodChangeLevel(struct Object *ob, short newlevel);
+
+void free_lodlevels(struct ListBase *lb);
+void copy_lodlevels(struct ListBase *lbn, struct ListBase *lbo);
+
+#endif
+
Property changes on: branches/bb_dev/source/blender/blenkernel/BKE_lod.h
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: branches/bb_dev/source/blender/blenkernel/intern/lod.c
===================================================================
--- branches/bb_dev/source/blender/blenkernel/intern/lod.c (rev 0)
+++ branches/bb_dev/source/blender/blenkernel/intern/lod.c 2009-06-06 19:50:09 UTC (rev 20685)
@@ -0,0 +1,197 @@
+/*
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) Blender Foundation
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "MEM_guardedalloc.h"
+
+/* types */
+#include "DNA_lod_types.h"
+#include "DNA_object_types.h"
+#include "DNA_ID.h"
+#include "DNA_mesh_types.h"
+
+#include "BKE_library.h"
+#include "BKE_mesh.h"
+#include "BKE_lod.h"
+#include "BKE_utildefines.h"
+
+#include "BLI_blenlib.h"
+
+/* ************ Object level, exported functions *************** */
+
+/* allocates and initializes general main data */
+bLodLevel *lodNew(void)
+{
+ bLodLevel *lod;
+
+ lod= MEM_callocN(sizeof(bLodLevel), "bLodLevel");
+
+ return lod;
+}
+
+/* frees all */
+void lodFree(bLodLevel *lod)
+{
+ if (lod->flag & LOD_US) {
+ ID *id = lod->data;
+ id->us--;
+ if (id->us == 0) {
+ switch (GS(id->name)) {
+ case ID_ME:
+ unlink_mesh((Mesh*)id);
+ break;
+ }
+ }
+ }
+ MEM_freeN(lod);
+}
+
+bLodLevel *lodCopy(bLodLevel *lod)
+{
+ bLodLevel *lodn;
+
+ lodn= MEM_dupallocN(lod);
+ if (lodn->flag & LOD_US)
+ id_us_plus((ID *)lodn->data);
+ return lodn;
+}
+
+int lodLevelCount(Object *ob)
+{
+ return BLI_countlist(&ob->lodlevels);
+}
+
+int lodChangeLevel(Object *ob, short newlevel)
+{
+ bLodLevel *lod = lodGetCurrent(ob);
+ if (!lod ||
+ ob->lodlevel == newlevel ||
+ newlevel >= lodLevelCount(ob) ||
+ newlevel < 0)
+ return 0;
+ if (!(lod->flag & LOD_US) && lod->data) {
+ /* there is only one level without LOD_US, if we leave it, must increment the count */
+ id_us_plus((ID *)lod->data);
+ lod->flag |= LOD_US;
+ }
+ ob->lodlevel = newlevel;
+ lod = lodGetCurrent(ob);
+ if (lod->data) {
+ if (lod->data == ob->data) {
+ if (lod->flag & LOD_US) {
+ ((ID *)lod->data)->us--;
+ lod->flag &= ~LOD_US;
+ }
+ return 0;
+ }
+ switch (ob->type) {
+ case OB_MESH:
+ set_mesh(ob, lod->data);
+ return 1;
+ }
+ }
+ return 0;
+}
+
+bLodLevel *lodGetCurrent(Object *ob)
+{
+ short lodlevel;
+ bLodLevel *lod;
+ for (lodlevel=0, lod=ob->lodlevels.first; lodlevel!=ob->lodlevel && lod; lod=lod->next, ++lodlevel);
+ if (!lod) {
+ /* reached the end without finding the correct level, use last */
+ lod = ob->lodlevels.last;
+ if (lodlevel)
+ --lodlevel;
+ ob->lodlevel = lodlevel;
+ }
+ return lod;
+}
+
+void lodUpdateCurrent(Object *ob, ID *newid)
+{
+ bLodLevel *lod = lodGetCurrent(ob);
+ ID *old;
+
+ if (lod) {
+ old =lod->data;
+ if (old && (lod->flag & LOD_US))
+ old->us--;
+ lod->data= newid;
+ if (newid == ob->data)
+ lod->flag &= ~LOD_US;
+ else {
+ lod->flag |= LOD_US;
+ id_us_plus(newid);
+ }
+ }
+}
+
+void lodDeleteCurrent(struct Object *ob)
+{
+ bLodLevel *lod = lodGetCurrent(ob);
+ short newlevel;
+
+ if (lod) {
+ if (lod->next) {
+ newlevel = ob->lodlevel+1;
+ } else if (lod->prev) {
+ newlevel = ob->lodlevel-1;
+ } else {
+ newlevel = -1;
+ }
+ lodChangeLevel(ob, newlevel);
+ BLI_remlink(&ob->lodlevels, lod);
+ lodFree(lod);
+ lodGetCurrent(ob);
+ }
+}
+
+void free_lodlevels(ListBase *lb)
+{
+ bLodLevel *lod;
+
+ while((lod= lb->first)) {
+ BLI_remlink(lb, lod);
+ lodFree(lod);
+ }
+}
+
+void copy_lodlevels(struct ListBase *lbn, struct ListBase *lbo)
+{
+ bLodLevel *lod, *lodn;
+
+ lbn->first= lbn->last= 0;
+ lod= lbo->first;
+ while(lod) {
+ lodn= lodCopy(lod);
+ BLI_addtail(lbn, lodn);
+ lod= lod->next;
+ }
+}
Property changes on: branches/bb_dev/source/blender/blenkernel/intern/lod.c
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Modified: branches/bb_dev/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/bb_dev/source/blender/blenkernel/intern/mesh.c 2009-06-06 19:32:18 UTC (rev 20684)
+++ branches/bb_dev/source/blender/blenkernel/intern/mesh.c 2009-06-06 19:50:09 UTC (rev 20685)
@@ -70,6 +70,7 @@
#include "BKE_object.h"
#include "BKE_utildefines.h"
#include "BKE_bad_level_calls.h"
+#include "BKE_lod.h"
#ifdef WITH_VERSE
#include "BKE_verse.h"
@@ -553,6 +554,7 @@
old->id.us--;
ob->data= me;
id_us_plus((ID *)me);
+ lodUpdateCurrent(ob, (ID *)me);
}
test_object_materials((ID *)me);
Modified: branches/bb_dev/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/bb_dev/source/blender/blenkernel/intern/object.c 2009-06-06 19:32:18 UTC (rev 20684)
+++ branches/bb_dev/source/blender/blenkernel/intern/object.c 2009-06-06 19:50:09 UTC (rev 20685)
@@ -108,6 +108,7 @@
#include "BKE_scene.h"
#include "BKE_screen.h"
#include "BKE_softbody.h"
+#include "BKE_lod.h"
#include "LBM_fluidsim.h"
@@ -267,7 +268,8 @@
free_sensors(&ob->sensors);
free_controllers(&ob->controllers);
free_actuators(&ob->actuators);
-
+ free_lodlevels(&ob->lodlevels);
+
free_constraints(&ob->constraints);
free_constraint_channels(&ob->constraintChannels);
free_nlastrips(&ob->nlastrips);
@@ -1227,7 +1229,8 @@
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list