double Body::calculateVolume(const Scene & theScene) const { double myVolume = 0; //Logger::get().setVerbosity(SEV_DEBUG); AC_DEBUG << " for body " << get<NameTag>() << endl; const Shape & myShape = getShape(); const PrimitiveVector & myPrimitives = myShape.getPrimitives(); //AC_DEBUG << " analyzing " << myShape.get<NameTag>() // << myPrimitives.size() << " primitives " << endl; for (PrimitiveVector::size_type i = 0; i < myPrimitives.size(); ++i) { if ( ! isSupportedPrimitive(*myPrimitives[i])) { /*AC_ERROR << " at shape " << myShape.get<NameTag>() << " skipping unsupported primitive of type " << PrimitiveTypeString[ myPrimitives[i].getType() ] << endl;*/ continue; } const Matrix4f & myBodyMatrix = get<GlobalMatrixTag>(); asl::Ptr<ConstVertexDataAccessor<Vector3f> > myPositionAccessor = myPrimitives[i]->getConstLockingPositionsAccessor(); const VertexData3f & myPositions = myPositionAccessor->get(); AC_DEBUG << " have " << myPositions.size() << " positions " << endl; AC_DEBUG << " applying global transform " << myBodyMatrix << endl; vector<Point3f> myTriangles(myPositions.size()); for(VertexData3f::size_type j = 0;j < myPositions.size(); ++j) { myTriangles[j] = product( asPoint(myPositions[j]), myBodyMatrix); //AC_DEBUG << "P " << myPositions[j] << " - " << myTriangles[j] << endl; } myVolume += calculatePolyhedraVolume(myTriangles); AC_DEBUG << " and got a volume " << endl; } return myVolume; }
void Hero::draw(QGraphicsScene *scene) const { Point corner = asPoint(); scene->addRect(QRectF(corner.x * UNIT_WIDTH, corner.y * UNIT_HEIGHT, UNIT_WIDTH, UNIT_HEIGHT), Qt::NoPen, QBrush(HERO_COLOR)); }
void Robot::draw(QGraphicsScene *scene) const { Point corner = asPoint(); scene->addEllipse(QRectF(corner.x * UNIT_WIDTH, corner.y * UNIT_HEIGHT, JUNK_RADIUS, JUNK_RADIUS), QPen(), QBrush(ROBOT_COLOR)); }