/** When this method is called, the writer must write the material. * \return The writer should return true, if writing succeeded, false otherwise.*/ bool DocumentImporter::writeMaterial(const COLLADAFW::Material *cmat) { if (mImportStage != General) return true; const std::string& str_mat_id = cmat->getName().size() ? cmat->getName() : cmat->getOriginalId(); Material *ma = BKE_material_add(G.main, (char *)str_mat_id.c_str()); this->uid_effect_map[cmat->getInstantiatedEffect()] = ma; this->uid_material_map[cmat->getUniqueId()] = ma; return true; }
/* /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */ static void get_material_cb(bContext *C, void *poin, void *poin2) { Scene *scene = CTX_data_scene(C); Main *bmain = CTX_data_main(C); bool not_set = true; Object *cur_object; Object *ob; Material *ma; cur_object = scene->basact ? scene->basact->object : 0; if(cur_object->actcol > 0) { ob = (Object*)cur_object; if(cur_object->totcol >= cur_object->actcol && ob->mat[cur_object->actcol - 1]) { bNodeTree *ntree = ob->mat[cur_object->actcol - 1]->nodetree; if(!ob->mat[cur_object->actcol - 1]->use_nodes) ob->mat[cur_object->actcol - 1]->use_nodes = true; if (ntree) { get_material(bmain, C, scene, ntree, (char*)poin, (int)poin2); not_set = false; } } if(not_set) { ID *id_me = cur_object->data; if (GS(id_me->name) == ID_ME) { Mesh *me = (Mesh*)id_me; if(me->totcol >= cur_object->actcol && me->mat[cur_object->actcol - 1]) { bNodeTree *ntree = me->mat[cur_object->actcol - 1]->nodetree; if(!me->mat[cur_object->actcol - 1]->use_nodes) me->mat[cur_object->actcol - 1]->use_nodes = true; if (ntree) { get_material(bmain, C, scene, ntree, (char*)poin, (int)poin2); not_set = false; } } } } } if(not_set) { ob = (Object*)cur_object; ma = BKE_material_add(bmain, DATA_("LDB Material")); ma->use_nodes = true; ma->nodetree = ntreeAddTree(NULL, "Shader Nodetree", ntreeType_Shader->idname); assign_material(ob, ma, ob->totcol + 1, BKE_MAT_ASSIGN_USERPREF); WM_event_add_notifier(C, NC_MATERIAL | NA_ADDED, ma); get_material(bmain, C, scene, ma->nodetree, (char*)poin, (int)poin2); } } /* get_material_cb() */
BlenderStrokeRenderer::BlenderStrokeRenderer(Render *re, int render_count) : StrokeRenderer() { freestyle_bmain = &re->freestyle_bmain; // TEMPORARY - need a texture manager _textureManager = new BlenderTextureManager; _textureManager->load(); // for stroke mesh generation _width = re->winx; _height = re->winy; old_scene = re->scene; char name[MAX_ID_NAME - 2]; BLI_snprintf(name, sizeof(name), "FRS%d_%s", render_count, re->scene->id.name + 2); freestyle_scene = BKE_scene_add(freestyle_bmain, name); freestyle_scene->r.cfra = old_scene->r.cfra; freestyle_scene->r.mode = old_scene->r.mode & ~(R_EDGE_FRS | R_SHADOW | R_SSS | R_PANORAMA | R_ENVMAP | R_MBLUR | R_BORDER); freestyle_scene->r.xsch = re->rectx; // old_scene->r.xsch freestyle_scene->r.ysch = re->recty; // old_scene->r.ysch freestyle_scene->r.xasp = 1.0f; // old_scene->r.xasp; freestyle_scene->r.yasp = 1.0f; // old_scene->r.yasp; freestyle_scene->r.tilex = old_scene->r.tilex; freestyle_scene->r.tiley = old_scene->r.tiley; freestyle_scene->r.size = 100; // old_scene->r.size //freestyle_scene->r.maximsize = old_scene->r.maximsize; /* DEPRECATED */ freestyle_scene->r.ocres = old_scene->r.ocres; freestyle_scene->r.color_mgt_flag = 0; // old_scene->r.color_mgt_flag; freestyle_scene->r.scemode = old_scene->r.scemode & ~(R_SINGLE_LAYER); freestyle_scene->r.flag = old_scene->r.flag; freestyle_scene->r.threads = old_scene->r.threads; freestyle_scene->r.border.xmin = old_scene->r.border.xmin; freestyle_scene->r.border.ymin = old_scene->r.border.ymin; freestyle_scene->r.border.xmax = old_scene->r.border.xmax; freestyle_scene->r.border.ymax = old_scene->r.border.ymax; strcpy(freestyle_scene->r.pic, old_scene->r.pic); freestyle_scene->r.safety.xmin = old_scene->r.safety.xmin; freestyle_scene->r.safety.ymin = old_scene->r.safety.ymin; freestyle_scene->r.safety.xmax = old_scene->r.safety.xmax; freestyle_scene->r.safety.ymax = old_scene->r.safety.ymax; freestyle_scene->r.osa = old_scene->r.osa; freestyle_scene->r.filtertype = old_scene->r.filtertype; freestyle_scene->r.gauss = old_scene->r.gauss; freestyle_scene->r.dither_intensity = old_scene->r.dither_intensity; BLI_strncpy(freestyle_scene->r.engine, old_scene->r.engine, sizeof(freestyle_scene->r.engine)); freestyle_scene->r.im_format.planes = R_IMF_PLANES_RGBA; freestyle_scene->r.im_format.imtype = R_IMF_IMTYPE_PNG; BKE_scene_disable_color_management(freestyle_scene); if (G.debug & G_DEBUG_FREESTYLE) { printf("%s: %d threads\n", __func__, freestyle_scene->r.threads); } // Render layer SceneRenderLayer *srl = (SceneRenderLayer *)freestyle_scene->r.layers.first; srl->layflag = SCE_LAY_SOLID | SCE_LAY_ZTRA; BKE_scene_set_background(freestyle_bmain, freestyle_scene); // Camera Object *object_camera = BKE_object_add(freestyle_bmain, freestyle_scene, OB_CAMERA); Camera *camera = (Camera *)object_camera->data; camera->type = CAM_ORTHO; camera->ortho_scale = max(re->rectx, re->recty); camera->clipsta = 0.1f; camera->clipend = 100.0f; _z_delta = 0.00001f; _z = camera->clipsta + _z_delta; object_camera->loc[0] = re->disprect.xmin + 0.5f * re->rectx; object_camera->loc[1] = re->disprect.ymin + 0.5f * re->recty; object_camera->loc[2] = 1.0f; freestyle_scene->camera = object_camera; // Material material = BKE_material_add(freestyle_bmain, "stroke_material"); material->mode |= MA_VERTEXCOLP; material->mode |= MA_TRANSP; material->mode |= MA_SHLESS; material->vcol_alpha = 1; // Reset serial mesh ID (used for BlenderStrokeRenderer::NewMesh()) _mesh_id = 0xffffffff; }