Ignore:
Timestamp:
12/16/14 01:51:06 (9 years ago)
Author:
Maciej Komosinski
Message:
  • Model validation checks part/joint shapes for consistency (old/new)
  • Model::getShape() returns new/old style
  • Model shape conversion (old to new) and sample usage in shapeconvert.cpp
File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpp/frams/model/model.cpp

    r247 r269  
    2929f0map=0;
    3030f0genoknown=1;
     31shape=SHAPE_UNKNOWN;
    3132}
    3233
     
    874875int i,k;
    875876int ret=1;
     877shape=SHAPE_UNKNOWN;
    876878if ((parts.size()==0)&&(neurons.size()==0)) return 0;
    877879if (parts.size()==0)
     
    903905        if (p->p.y+p->size > bbmax.y) bbmax.y=p->p.y+p->size;
    904906        if (p->p.z+p->size > bbmax.z) bbmax.z=p->p.z+p->size;
     907        if (shape==SHAPE_UNKNOWN)
     908                shape=(p->shape==Part::SHAPE_DEFAULT)?SHAPE_OLD:SHAPE_NEW;
     909        else if (shape!=SHAPE_ILLEGAL)
     910                {
     911                if ((p->shape==Part::SHAPE_DEFAULT) ^ (shape==SHAPE_OLD))
     912                        {
     913                        shape=SHAPE_ILLEGAL;
     914                        FMprintf("Model","internalCheck",FMLV_WARN,"Inconsistent part shapes (mixed old and new shapes)");
     915                        }
     916                }
    905917        }
    906918size=bbmax-bbmin;
     
    983995                         i,(const char*)geno.getName());
    984996                ret=0;
     997                }
     998        if (shape!=SHAPE_ILLEGAL)
     999                {
     1000                if ((j->shape==Joint::SHAPE_DEFAULT) ^ (shape==SHAPE_OLD))
     1001                        {
     1002                        shape==SHAPE_ILLEGAL;
     1003                        FMprintf("Model","internalCheck",FMLV_WARN,"Inconsistent joint shapes (mixed old and new shapes)");
     1004                        }
    9851005                }
    9861006        }
     
    10821102                }
    10831103        }
     1104if (shape==SHAPE_ILLEGAL)
     1105        ret=0;
    10841106return ret;
    10851107}
     
    12581280        tmpp-=j->part1->p;
    12591281        j->d=j->part2->o.revTransform(tmpp);
     1282        }
     1283}
     1284
     1285void Model::buildUsingNewShapes(const Model& old, Part::Shape default_shape, float thickness)
     1286{
     1287for(int i=0;i<old.getJointCount();i++)
     1288        {
     1289        Joint *oj=old.getJoint(i);
     1290        Part *p = addNewPart(default_shape);
     1291        p->p=(oj->part1->p+oj->part2->p)/2;
     1292        Orient o;
     1293        o.lookAt(oj->part1->p-oj->part2->p);
     1294        p->rot=o.getAngles();
     1295        p->scale.x=oj->part1->p.distanceTo(oj->part2->p)/2;
     1296        p->scale.y = thickness;
     1297        p->scale.z = thickness;
     1298        }
     1299for(int i=0;i<old.getPartCount();i++)
     1300        {
     1301        Part *op=old.getPart(i);
     1302        for(int j=0;j<old.getJointCount();j++)
     1303                {
     1304                Joint *oj=old.getJoint(j);
     1305                if ((oj->part1==op)||(oj->part2==op))
     1306                        {
     1307                        for(int j2=j+1;j2<old.getJointCount();j2++)
     1308                                {
     1309                                Joint *oj2=old.getJoint(j2);
     1310                                if ((oj2->part1==op)||(oj2->part2==op))
     1311                                        {
     1312                                        Joint *newj=addNewJoint(getPart(j),getPart(j2),Joint::SHAPE_SOLID);
     1313                                        }
     1314                                }
     1315                        break;
     1316                        }
     1317                }
    12601318        }
    12611319}
Note: See TracChangeset for help on using the changeset viewer.