Пример #1
0
    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;
    }
Пример #2
0
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));
}
Пример #3
0
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));
}