Merge branch 'master' into blender2.8
This commit is contained in:
@@ -70,14 +70,14 @@ void GeometryExporter::exportGeom(struct Depsgraph *depsgraph, Scene *sce)
|
||||
}
|
||||
|
||||
void GeometryExporter::operator()(Object *ob)
|
||||
{
|
||||
{
|
||||
// XXX don't use DerivedMesh, Mesh instead?
|
||||
#if 0
|
||||
#if 0
|
||||
DerivedMesh *dm = mesh_get_derived_final(mScene, ob, CD_MASK_BAREMESH);
|
||||
#endif
|
||||
|
||||
bool use_instantiation = this->export_settings->use_object_instantiation;
|
||||
Mesh *me = bc_get_mesh_copy(mDepsgraph, mScene,
|
||||
Mesh *me = bc_get_mesh_copy(mDepsgraph, mScene,
|
||||
ob,
|
||||
this->export_settings->export_mesh_type,
|
||||
this->export_settings->apply_modifiers,
|
||||
@@ -88,7 +88,7 @@ void GeometryExporter::operator()(Object *ob)
|
||||
std::vector<BCPolygonNormalsIndices> norind;
|
||||
|
||||
// Skip if linked geometry was already exported from another reference
|
||||
if (use_instantiation &&
|
||||
if (use_instantiation &&
|
||||
exportedGeometry.find(geom_id) != exportedGeometry.end())
|
||||
{
|
||||
return;
|
||||
@@ -104,15 +104,15 @@ void GeometryExporter::operator()(Object *ob)
|
||||
|
||||
// openMesh(geoId, geoName, meshId)
|
||||
openMesh(geom_id, geom_name);
|
||||
|
||||
|
||||
// writes <source> for vertex coords
|
||||
createVertsSource(geom_id, me);
|
||||
|
||||
|
||||
// writes <source> for normal coords
|
||||
createNormalsSource(geom_id, me, nor);
|
||||
|
||||
bool has_uvs = (bool)CustomData_has_layer(&me->fdata, CD_MTFACE);
|
||||
|
||||
|
||||
// writes <source> for uv coords if mesh has uv coords
|
||||
if (has_uvs) {
|
||||
createTexcoordsSource(geom_id, me);
|
||||
@@ -144,9 +144,9 @@ void GeometryExporter::operator()(Object *ob)
|
||||
createPolylist(0, has_uvs, has_color, ob, me, geom_id, norind);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
closeMesh();
|
||||
|
||||
|
||||
if (me->flag & ME_TWOSIDED) {
|
||||
mSW->appendTextBlock("<extra><technique profile=\"MAYA\"><double_sided>1</double_sided></technique></extra>");
|
||||
}
|
||||
@@ -175,7 +175,7 @@ void GeometryExporter::export_key_mesh(Object *ob, Mesh *me, KeyBlock *kb)
|
||||
std::string geom_id = get_geometry_id(ob, false) + "_morph_" + translate_id(kb->name);
|
||||
std::vector<Normal> nor;
|
||||
std::vector<BCPolygonNormalsIndices> norind;
|
||||
|
||||
|
||||
if (exportedGeometry.find(geom_id) != exportedGeometry.end())
|
||||
{
|
||||
return;
|
||||
@@ -191,15 +191,15 @@ void GeometryExporter::export_key_mesh(Object *ob, Mesh *me, KeyBlock *kb)
|
||||
|
||||
// openMesh(geoId, geoName, meshId)
|
||||
openMesh(geom_id, geom_name);
|
||||
|
||||
|
||||
// writes <source> for vertex coords
|
||||
createVertsSource(geom_id, me);
|
||||
|
||||
|
||||
// writes <source> for normal coords
|
||||
createNormalsSource(geom_id, me, nor);
|
||||
|
||||
bool has_uvs = (bool)CustomData_has_layer(&me->fdata, CD_MTFACE);
|
||||
|
||||
|
||||
// writes <source> for uv coords if mesh has uv coords
|
||||
if (has_uvs) {
|
||||
createTexcoordsSource(geom_id, me);
|
||||
@@ -220,7 +220,7 @@ void GeometryExporter::export_key_mesh(Object *ob, Mesh *me, KeyBlock *kb)
|
||||
|
||||
//createLooseEdgeList(ob, me, geom_id, norind);
|
||||
|
||||
// XXX slow
|
||||
// XXX slow
|
||||
if (ob->totcol) {
|
||||
for (int a = 0; a < ob->totcol; a++) {
|
||||
createPolylist(a, has_uvs, has_color, ob, me, geom_id, norind);
|
||||
@@ -229,9 +229,9 @@ void GeometryExporter::export_key_mesh(Object *ob, Mesh *me, KeyBlock *kb)
|
||||
else {
|
||||
createPolylist(0, has_uvs, has_color, ob, me, geom_id, norind);
|
||||
}
|
||||
|
||||
|
||||
closeMesh();
|
||||
|
||||
|
||||
if (me->flag & ME_TWOSIDED) {
|
||||
mSW->appendTextBlock("<extra><technique profile=\"MAYA\"><double_sided>1</double_sided></technique></extra>");
|
||||
}
|
||||
@@ -250,9 +250,9 @@ void GeometryExporter::createLooseEdgeList(Object *ob,
|
||||
std::vector<unsigned int> edge_list;
|
||||
int index;
|
||||
|
||||
// Find all loose edges in Mesh
|
||||
// Find all loose edges in Mesh
|
||||
// and save vertex indices in edge_list
|
||||
for (index = 0; index < totedges; index++)
|
||||
for (index = 0; index < totedges; index++)
|
||||
{
|
||||
MEdge *edge = &medges[index];
|
||||
|
||||
@@ -273,14 +273,14 @@ void GeometryExporter::createLooseEdgeList(Object *ob,
|
||||
|
||||
|
||||
COLLADASW::InputList &til = lines.getInputList();
|
||||
|
||||
// creates <input> in <lines> for vertices
|
||||
|
||||
// creates <input> in <lines> for vertices
|
||||
COLLADASW::Input input1(COLLADASW::InputSemantic::VERTEX, getUrlBySemantics(geom_id, COLLADASW::InputSemantic::VERTEX), 0);
|
||||
til.push_back(input1);
|
||||
|
||||
lines.prepareToAppendValues();
|
||||
|
||||
for (index = 0; index < edges_in_linelist; index++)
|
||||
for (index = 0; index < edges_in_linelist; index++)
|
||||
{
|
||||
lines.appendValues(edge_list[2 * index + 1]);
|
||||
lines.appendValues(edge_list[2 * index]);
|
||||
@@ -318,7 +318,7 @@ void GeometryExporter::createPolylist(short material_index,
|
||||
// count faces with this material
|
||||
for (i = 0; i < totpolys; i++) {
|
||||
MPoly *p = &mpolys[i];
|
||||
|
||||
|
||||
if (p->mat_nr == material_index) {
|
||||
faces_in_polylist++;
|
||||
vcount_list.push_back(p->totloop);
|
||||
@@ -330,13 +330,13 @@ void GeometryExporter::createPolylist(short material_index,
|
||||
fprintf(stderr, "%s: material with index %d is not used.\n", id_name(ob).c_str(), material_index);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Material *ma = ob->totcol ? give_current_material(ob, material_index + 1) : NULL;
|
||||
COLLADASW::Polylist polylist(mSW);
|
||||
|
||||
|
||||
// sets count attribute in <polylist>
|
||||
polylist.setCount(faces_in_polylist);
|
||||
|
||||
|
||||
// sets material name
|
||||
if (ma) {
|
||||
std::string material_id = get_material_id(ma);
|
||||
@@ -344,18 +344,18 @@ void GeometryExporter::createPolylist(short material_index,
|
||||
ostr << translate_id(material_id);
|
||||
polylist.setMaterial(ostr.str());
|
||||
}
|
||||
|
||||
|
||||
COLLADASW::InputList &til = polylist.getInputList();
|
||||
|
||||
// creates <input> in <polylist> for vertices
|
||||
|
||||
// creates <input> in <polylist> for vertices
|
||||
COLLADASW::Input input1(COLLADASW::InputSemantic::VERTEX, getUrlBySemantics(geom_id, COLLADASW::InputSemantic::VERTEX), 0);
|
||||
|
||||
|
||||
// creates <input> in <polylist> for normals
|
||||
COLLADASW::Input input2(COLLADASW::InputSemantic::NORMAL, getUrlBySemantics(geom_id, COLLADASW::InputSemantic::NORMAL), 1);
|
||||
|
||||
|
||||
til.push_back(input1);
|
||||
til.push_back(input2);
|
||||
|
||||
|
||||
// if mesh has uv coords writes <input> for TEXCOORD
|
||||
int num_layers = CustomData_number_of_layers(&me->fdata, CD_MTFACE);
|
||||
int active_uv_index = CustomData_get_active_layer_index(&me->fdata, CD_MTFACE)-1;
|
||||
@@ -387,13 +387,13 @@ void GeometryExporter::createPolylist(short material_index,
|
||||
map_index++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// sets <vcount>
|
||||
polylist.setVCountList(vcount_list);
|
||||
|
||||
|
||||
// performs the actual writing
|
||||
polylist.prepareToAppendValues();
|
||||
|
||||
|
||||
// <p>
|
||||
int texindex = 0;
|
||||
for (i = 0; i < totpolys; i++) {
|
||||
@@ -417,7 +417,7 @@ void GeometryExporter::createPolylist(short material_index,
|
||||
|
||||
texindex += loop_count;
|
||||
}
|
||||
|
||||
|
||||
polylist.finish();
|
||||
}
|
||||
|
||||
@@ -430,7 +430,7 @@ void GeometryExporter::createVertsSource(std::string geom_id, Mesh *me)
|
||||
#endif
|
||||
int totverts = me->totvert;
|
||||
MVert *verts = me->mvert;
|
||||
|
||||
|
||||
COLLADASW::FloatSourceF source(mSW);
|
||||
source.setId(getIdBySemantics(geom_id, COLLADASW::InputSemantic::POSITION));
|
||||
source.setArrayId(getIdBySemantics(geom_id, COLLADASW::InputSemantic::POSITION) +
|
||||
@@ -450,7 +450,7 @@ void GeometryExporter::createVertsSource(std::string geom_id, Mesh *me)
|
||||
for (i = 0; i < totverts; i++) {
|
||||
source.appendValues(verts[i].co[0], verts[i].co[1], verts[i].co[2]);
|
||||
}
|
||||
|
||||
|
||||
source.finish();
|
||||
|
||||
}
|
||||
@@ -502,7 +502,7 @@ void GeometryExporter::createVertexColorSource(std::string geom_id, Mesh *me)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
source.finish();
|
||||
}
|
||||
}
|
||||
@@ -537,20 +537,20 @@ void GeometryExporter::createTexcoordsSource(std::string geom_id, Mesh *me)
|
||||
int layer_index = CustomData_get_layer_index_n(&me->ldata, CD_MLOOPUV, a);
|
||||
if (!this->export_settings->active_uv_only || layer_index == active_uv_index) {
|
||||
MLoopUV *mloops = (MLoopUV *)CustomData_get_layer_n(&me->ldata, CD_MLOOPUV, a);
|
||||
|
||||
|
||||
COLLADASW::FloatSourceF source(mSW);
|
||||
std::string layer_id = makeTexcoordSourceId(geom_id, a, this->export_settings->active_uv_only);
|
||||
source.setId(layer_id);
|
||||
source.setArrayId(layer_id + ARRAY_ID_SUFFIX);
|
||||
|
||||
|
||||
source.setAccessorCount(totuv);
|
||||
source.setAccessorStride(2);
|
||||
COLLADASW::SourceBase::ParameterNameList ¶m = source.getParameterNameList();
|
||||
param.push_back("S");
|
||||
param.push_back("T");
|
||||
|
||||
|
||||
source.prepareToAppendValues();
|
||||
|
||||
|
||||
for (int index = 0; index < totpoly; index++) {
|
||||
MPoly *mpoly = mpolys+index;
|
||||
MLoopUV *mloop = mloops+mpoly->loopstart;
|
||||
@@ -559,7 +559,7 @@ void GeometryExporter::createTexcoordsSource(std::string geom_id, Mesh *me)
|
||||
mloop[j].uv[1]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
source.finish();
|
||||
}
|
||||
}
|
||||
@@ -589,7 +589,7 @@ void GeometryExporter::createNormalsSource(std::string geom_id, Mesh *me, std::v
|
||||
param.push_back("X");
|
||||
param.push_back("Y");
|
||||
param.push_back("Z");
|
||||
|
||||
|
||||
source.prepareToAppendValues();
|
||||
|
||||
std::vector<Normal>::iterator it;
|
||||
@@ -674,10 +674,10 @@ std::string GeometryExporter::getIdBySemantics(std::string geom_id, COLLADASW::I
|
||||
|
||||
COLLADASW::URI GeometryExporter::getUrlBySemantics(std::string geom_id, COLLADASW::InputSemantic::Semantics type, std::string other_suffix)
|
||||
{
|
||||
|
||||
|
||||
std::string id(getIdBySemantics(geom_id, type, other_suffix));
|
||||
return COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, id);
|
||||
|
||||
|
||||
}
|
||||
|
||||
COLLADASW::URI GeometryExporter::makeUrl(std::string id)
|
||||
|
||||
Reference in New Issue
Block a user