Revision: 22271
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22271
Author:   chingachgook
Date:     2009-08-06 20:30:44 +0200 (Thu, 06 Aug 2009)

Log Message:
-----------
Added lamp options export/import.

Modified Paths:
--------------
    branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp
    branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp

Modified: 
branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp
===================================================================
--- branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp  
2009-08-06 18:22:41 UTC (rev 22270)
+++ branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp  
2009-08-06 18:30:44 UTC (rev 22271)
@@ -184,7 +184,7 @@
                Object *ob = base->object;
                        
                if (ob->type == OB_CAMERA && ob->data) {
-                       f(ob);
+                       f(ob, sce);
                }
                base= base->next;
        }
@@ -1561,29 +1561,29 @@
                
                closeLibrary();
        }
-       void operator()(Object *ob)
+       void operator()(Object *ob, Scene *sce)
        {
                // XXX add other params later
                Camera *cam = (Camera*)ob->data;
-               std::string cam_name(id_name(ob));
+               std::string cam_id(id_name(ob));
+               char *name = cam->id.name;
+               
                if (cam->type == CAM_PERSP) {
                        COLLADASW::PerspectiveOptic persp(mSW);
                        persp.setXFov(1.0);
-                       //persp.setYFov(1.0);
-                       persp.setAspectRatio(1.0);
+                       persp.setAspectRatio(0.1);
                        persp.setZFar(cam->clipend);
                        persp.setZNear(cam->clipsta);
-                       COLLADASW::Camera ccam(mSW, &persp, cam_name);
+                       COLLADASW::Camera ccam(mSW, &persp, cam_id, name);
                        addCamera(ccam);
                }
                else {
                        COLLADASW::OrthographicOptic ortho(mSW);
                        ortho.setXMag(1.0);
-                       //ortho.setYMag(1.0, true);
-                       ortho.setAspectRatio(1.0);
+                       ortho.setAspectRatio(0.1);
                        ortho.setZFar(cam->clipend);
                        ortho.setZNear(cam->clipsta);
-                       COLLADASW::Camera ccam(mSW, &ortho, cam_name);
+                       COLLADASW::Camera ccam(mSW, &ortho, cam_id, name);
                        addCamera(ccam);
                }
        }       
@@ -1604,37 +1604,49 @@
        void operator()(Object *ob)
        {
                Lamp *la = (Lamp*)ob->data;
-               std::string la_name(id_name(ob));
+               std::string la_id(id_name(ob));
+               char *la_name = la->id.name;
                COLLADASW::Color col(la->r, la->g, la->b);
+               float e = la->energy;
                
                // sun
                if (la->type == LA_SUN) {
-                       COLLADASW::DirectionalLight cla(mSW, la_name, "", 
la->energy);
+                       COLLADASW::DirectionalLight cla(mSW, la_id, la_name, e);
                        cla.setColor(col);
                        addLight(cla);
                }
                // hemi
                else if (la->type == LA_HEMI) {
-                       COLLADASW::AmbientLight cla(mSW, la_name, "", 
la->energy);
+                       COLLADASW::AmbientLight cla(mSW, la_id, la_name, e);
                        cla.setColor(col);
                        addLight(cla);
                }
                // spot
                // XXX add other params later
                else if (la->type == LA_SPOT) {
-                       COLLADASW::SpotLight cla(mSW, la_name, "", la->energy);
+                       COLLADASW::SpotLight cla(mSW, la_id, la_name, e);
                        cla.setColor(col);
+                       cla.setFallOffAngle(la->spotsize);
+                       cla.setLinearAttenuation(la->att1);
+                       cla.setQuadraticAttenuation(la->att2);
                        addLight(cla);
                }
                // lamp
-               else if (la->type != LA_AREA) {
-                       COLLADASW::PointLight cla(mSW, la_name, "", la->energy);
+               else if (la->type == LA_LOCAL) {
+                       COLLADASW::PointLight cla(mSW, la_id, la_name, e);
                        cla.setColor(col);
+                       cla.setLinearAttenuation(la->att1);
+                       cla.setQuadraticAttenuation(la->att2);
                        addLight(cla);
                }
+               // area lamp is not supported
+               // it will be exported as a local lamp
                else {
-                       // XXX write error
-                       return;
+                       COLLADASW::PointLight cla(mSW, la_id, la_name, e);
+                       cla.setColor(col);
+                       cla.setLinearAttenuation(la->att1);
+                       cla.setQuadraticAttenuation(la->att2);
+                       addLight(cla);
                }
        }
 };

Modified: 
branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp
===================================================================
--- branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp  
2009-08-06 18:22:41 UTC (rev 22270)
+++ branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp  
2009-08-06 18:30:44 UTC (rev 22271)
@@ -1181,7 +1181,7 @@
                                for(int j = 0; j < vca.getCount(); j++){
                                        int count = vca[j];
                                        if (count < 3) {
-                                               fprintf(stderr, "Primitive %s 
in %s has at least one face with vertex count < 3 or > 4\n",
+                                               fprintf(stderr, "Primitive %s 
in %s has at least one face with vertex count < 3\n",
                                                                type_str, name);
                                                return false;
                                        }
@@ -2499,12 +2499,17 @@
                @return The writer should return true, if writing succeeded, 
false otherwise.*/
        virtual bool writeCamera( const COLLADAFW::Camera* camera ) 
        {
-               std::string name = camera->getOriginalId();
-               Camera *cam = (Camera*)add_camera((char*)name.c_str());
+               Camera *cam;
+               std::string cam_id = camera->getOriginalId();
+               std::string cam_name = camera->getName();
+               if (cam_name.size()) cam = 
(Camera*)add_camera((char*)cam_name.c_str());
+               else cam = (Camera*)add_camera((char*)cam_id.c_str());
+               
                if (!cam) {
                        fprintf(stderr, "Cannot create camera. \n");
                        return true;
                }
+               
                COLLADAFW::Camera::CameraType type = camera->getCameraType();
                switch(type) {
                case COLLADAFW::Camera::ORTHOGRAPHIC:
@@ -2555,12 +2560,22 @@
                @return The writer should return true, if writing succeeded, 
false otherwise.*/
        virtual bool writeLight( const COLLADAFW::Light* light ) 
        {
-               std::string name = light->getOriginalId();
-               Lamp *lamp = (Lamp*)add_lamp((char*)name.c_str());
+               Lamp *lamp;
+               std::string la_id = light->getOriginalId();
+               std::string la_name = light->getName();
+               if (la_name.size()) lamp = 
(Lamp*)add_lamp((char*)la_name.c_str());
+               else lamp = (Lamp*)add_lamp((char*)la_id.c_str());
+               
                if (!lamp) {
                        fprintf(stderr, "Cannot create lamp. \n");
                        return true;
                }
+               if (light->getColor().isValid()) {
+                       COLLADAFW::Color col = light->getColor();
+                       lamp->r = col.getRed();
+                       lamp->g = col.getGreen();
+                       lamp->b = col.getBlue();
+               }
                COLLADAFW::Light::LightType type = light->getLightType();
                switch(type) {
                case COLLADAFW::Light::AMBIENT_LIGHT:
@@ -2571,6 +2586,9 @@
                case COLLADAFW::Light::SPOT_LIGHT:
                        {
                                lamp->type = LA_SPOT;
+                               lamp->att1 = 
light->getLinearAttenuation().getValue();
+                               lamp->att2 = 
light->getQuadraticAttenuation().getValue();
+                               lamp->spotsize = 
light->getFallOffAngle().getValue();
                        }
                        break;
                case COLLADAFW::Light::DIRECTIONAL_LIGHT:
@@ -2580,7 +2598,9 @@
                        break;
                case COLLADAFW::Light::POINT_LIGHT:
                        {
-                               lamp->type = LA_AREA;
+                               lamp->type = LA_LOCAL;
+                               lamp->att1 = 
light->getLinearAttenuation().getValue();
+                               lamp->att2 = 
light->getQuadraticAttenuation().getValue();
                        }
                        break;
                case COLLADAFW::Light::UNDEFINED:
@@ -2592,8 +2612,6 @@
                }
                        
                this->uid_lamp_map[light->getUniqueId()] = lamp;
-               
-               // XXX import light options*/
                return true;
        }
        


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to