Beispiel #1
0
  void Geometry::enable () 
  {
    if (parent->isStatic()) {
      process_error(RTC_INVALID_OPERATION,"static geometries cannot get enabled");
      return;
    }

    if (isDisabled()) {
      atomic_add(&parent->numIntersectionFilters4,(intersectionFilter4 != NULL) + (occlusionFilter4 != NULL));
      atomic_add(&parent->numIntersectionFilters8,(intersectionFilter8 != NULL) + (occlusionFilter8 != NULL));
      atomic_add(&parent->numIntersectionFilters16,(intersectionFilter16 != NULL) + (occlusionFilter16 != NULL));
    }

    switch (state) {
    case ENABLING:
      break;
    case ENABLED:
      break;
    case MODIFIED:
      break;
    case DISABLING: 
      state = MODIFIED;
      enabling();
      break;
    case DISABLED: 
      state = ENABLING;
      enabling();
      break;
    case ERASING:
      break;
    }
  }
  void NativeCurves::setBuffer(RTCBufferType type, void* ptr, size_t offset, size_t stride, size_t size) 
  { 
    if (scene->isStatic() && scene->isBuild())
      throw_RTCError(RTC_INVALID_OPERATION,"static geometries cannot get modified");

    /* verify that all accesses are 4 bytes aligned */
    if (((size_t(ptr) + offset) & 0x3) || (stride & 0x3)) 
      throw_RTCError(RTC_INVALID_OPERATION,"data must be 4 bytes aligned");

    unsigned bid = type & 0xFFFF;
    if (type >= RTC_VERTEX_BUFFER0 && type < RTCBufferType(RTC_VERTEX_BUFFER0 + numTimeSteps)) 
    {
      size_t t = type - RTC_VERTEX_BUFFER0;
      vertices[t].set(ptr,offset,stride,size); 
      vertices[t].checkPadding16();
    } 
    else if (type >= RTC_USER_VERTEX_BUFFER0 && type < RTC_USER_VERTEX_BUFFER0+RTC_MAX_USER_VERTEX_BUFFERS)
    {
      if (bid >= userbuffers.size()) userbuffers.resize(bid+1);
      userbuffers[bid] = APIBuffer<char>(scene->device,numVertices(),stride);
      userbuffers[bid].set(ptr,offset,stride,size);  
      userbuffers[bid].checkPadding16();
    }
    else if (type == RTC_INDEX_BUFFER) 
    {
      if (isEnabled() && size != (size_t)-1) disabling();
      curves.set(ptr,offset,stride,size); 
      setNumPrimitives(size);
      if (isEnabled() && size != (size_t)-1) enabling();
    }
    else 
        throw_RTCError(RTC_INVALID_ARGUMENT,"unknown buffer type"); 
  }
 LineSegments::LineSegments (Scene* parent, RTCGeometryFlags flags, size_t numPrimitives, size_t numVertices, size_t numTimeSteps)
   : Geometry(parent,LINE_SEGMENTS,numPrimitives,numTimeSteps,flags)
 {
   segments.init(parent->device,numPrimitives,sizeof(int));
   for (size_t i=0; i<numTimeSteps; i++) {
     vertices[i].init(parent->device,numVertices,sizeof(Vec3fa));
   }
   enabling();
 }
 TriangleMesh::TriangleMesh (Scene* parent, RTCGeometryFlags flags, size_t numTriangles, size_t numVertices, size_t numTimeSteps)
   : Geometry(parent,TRIANGLE_MESH,numTriangles,numTimeSteps,flags)
 {
   triangles.init(parent->device,numTriangles,sizeof(Triangle));
   for (size_t i=0; i<numTimeSteps; i++) {
     vertices[i].init(parent->device,numVertices,sizeof(Vec3fa));
   }
   enabling();
 }
Beispiel #5
0
 BezierCurves::BezierCurves (Scene* parent, RTCGeometryFlags flags, size_t numPrimitives, size_t numVertices, size_t numTimeSteps) 
   : Geometry(parent,BEZIER_CURVES,numPrimitives,numTimeSteps,flags)
 {
   curves.init(parent->device,numPrimitives,sizeof(int));
   for (size_t i=0; i<numTimeSteps; i++) {
     vertices[i].init(parent->device,numVertices,sizeof(Vec3fa));
   }
   enabling();
 }
Beispiel #6
0
 QuadMesh::QuadMesh (Scene* parent, RTCGeometryFlags flags, size_t numQuads, size_t numVertices, size_t numTimeSteps)
   : Geometry(parent,QUAD_MESH,numQuads,numTimeSteps,flags)
 {
   quads.init(parent->device,numQuads,sizeof(Quad));
   for (size_t i=0; i<numTimeSteps; i++) {
     vertices[i].init(parent->device,numVertices,sizeof(Vec3fa));
   }
   enabling();
 }
 BezierCurves::BezierCurves (Scene* parent, RTCGeometryFlags flags, size_t numCurves, size_t numVertices, size_t numTimeSteps) 
   : Geometry(parent,BEZIER_CURVES,numCurves,flags), 
     mask(-1), numTimeSteps(numTimeSteps), numCurves(numCurves), numVertices(numVertices)
 {
   curves.init(numCurves,sizeof(int));
   for (size_t i=0; i<numTimeSteps; i++) {
     vertices[i].init(numVertices,sizeof(Vertex));
   }
   enabling();
 }
 NativeCurves::NativeCurves (Scene* scene, SubType subtype, Basis basis, RTCGeometryFlags flags, size_t numPrimitives, size_t numVertices, size_t numTimeSteps) 
   : Geometry(scene,BEZIER_CURVES,numPrimitives,numTimeSteps,flags), subtype(subtype), basis(basis), tessellationRate(4)
 {
   curves.init(scene->device,numPrimitives,sizeof(int));
   vertices.resize(numTimeSteps);
   for (size_t i=0; i<numTimeSteps; i++) {
     vertices[i].init(scene->device,numVertices,sizeof(Vec3fa));
   }
   enabling();
 }
Beispiel #9
0
void FeatureEval::enable() {
    if(is_enabled_){
        disable();
        return;
    }

    mw_->options_dock_->show();
    mw_->tooloptions_->setCurrentWidget(settings_);
    emit enabling();
    connect(core_, SIGNAL(endEdit()), this, SLOT(disable()));
    is_enabled_ = true;
}
 QuadraticBezierCurvesScene::QuadraticBezierCurves::QuadraticBezierCurves (Scene* parent, RTCGeometryFlags flags, size_t numCurves, size_t numVertices, size_t numTimeSteps) 
   : Geometry(parent,QUADRATIC_BEZIER_CURVES,numCurves,flags), 
     mask(-1), built(false), numTimeSteps(numTimeSteps),
     numCurves(numCurves), needCurves(false),
     numVertices(numVertices), needVertices(false)
 {
   curves.init(numCurves,sizeof(int));
   for (size_t i=0; i<numTimeSteps; i++) {
     vertices[i].init(numVertices,sizeof(Vertex));
   }
   enabling();
 }
Beispiel #11
0
void Morphology::enable() {
    if(is_enabled_){
        disable();
        return;
    }

    mw_->options_dock_->show();
    mw_->tooloptions_->setCurrentWidget(settings_);
    emit enabling();
    glwidget_->installEventFilter(this);
    flatview_->installEventFilter(this);
    connect(core_, SIGNAL(endEdit()), this, SLOT(disable()));
    is_enabled_ = true;
}
Beispiel #12
0
void Morphology::initialize(Core *core){
    core_= core;
    cl_ = core_->cl_;
    ll_ = core_->ll_;
    glwidget_ = core_->mw_->glwidget_;
    flatview_ = core_->mw_->flatview_;
    mw_ = core_->mw_;

    is_enabled_ = false;
    connect(this, SIGNAL(enabling()), core_, SIGNAL(endEdit()));
    enable_ = new QAction(QIcon(":/morphology.png"), "Enable Morphology", 0);
    enable_->setCheckable(true);
    connect(enable_, SIGNAL(triggered()), this, SLOT(enable()));

    radius_ = 10;

    mw_->toolbar_->addAction(enable_);

    settings_ = new QWidget();
    QVBoxLayout * layout = new QVBoxLayout(settings_);
    settings_->setLayout(layout);

    mw_->tooloptions_->addWidget(settings_);

    QLabel * l = new QLabel(QString("Radius: %1 cm").arg(radius_), settings_);

    QSlider * slider = new QSlider(settings_);
    slider->setOrientation(Qt::Horizontal);
    slider->setRange(1, 300);
    slider->setSingleStep(1);
    slider->setToolTip("Radius in cm");
    slider->setValue(radius_);
    slider->setTickPosition(QSlider::TicksBelow);
    connect(slider, &QSlider::valueChanged, [this, l] (int val){
        radius_ = val;
        l->setText(QString("Radius: %1 cm").arg(radius_));
    });

    QPushButton * open = new QPushButton("Open");
    connect(open, SIGNAL(clicked()), this, SLOT(open()));

    layout->addWidget(l);
    layout->addWidget(slider);
    layout->addWidget(open);
    layout->addStretch();
}
Beispiel #13
0
  void QuadMesh::setBuffer(RTCBufferType type, void* ptr, size_t offset, size_t stride, size_t size) 
  { 
    if (scene->isStatic() && scene->isBuild()) 
      throw_RTCError(RTC_INVALID_OPERATION,"static scenes cannot get modified");

    /* verify that all accesses are 4 bytes aligned */
    if (((size_t(ptr) + offset) & 0x3) || (stride & 0x3)) 
      throw_RTCError(RTC_INVALID_OPERATION,"data must be 4 bytes aligned");

    unsigned bid = type & 0xFFFF;
    if (type >= RTC_VERTEX_BUFFER0 && type < RTCBufferType(RTC_VERTEX_BUFFER0 + numTimeSteps)) 
    {
      size_t t = type - RTC_VERTEX_BUFFER0;
      if (size == -1) size = vertices[t].size();

      /* if buffer is larger than 16GB the premultiplied index optimization does not work */
      if (stride*size > 16ll*1024ll*1024ll*1024ll) 
       throw_RTCError(RTC_INVALID_OPERATION,"vertex buffer can be at most 16GB large");

      vertices[t].set(ptr,offset,stride,size); 
      vertices[t].checkPadding16();
      vertices0 = vertices[0];
    } 
    else if (type >= RTC_USER_VERTEX_BUFFER0 && type < RTC_USER_VERTEX_BUFFER0+RTC_MAX_USER_VERTEX_BUFFERS)
    {
      if (bid >= userbuffers.size()) userbuffers.resize(bid+1);
      userbuffers[bid] = APIBuffer<char>(scene->device,numVertices(),stride);
      userbuffers[bid].set(ptr,offset,stride,size);  
      userbuffers[bid].checkPadding16();
    }
    else if (type == RTC_INDEX_BUFFER) 
    {
      if (size != (size_t)-1) disabling();
      quads.set(ptr,offset,stride,size);
      setNumPrimitives(size);
      if (size != (size_t)-1) enabling();
    }
    else
      throw_RTCError(RTC_INVALID_ARGUMENT,"unknown buffer type");
  }
 AccelSet::AccelSet (Scene* parent, size_t numItems) 
   : Geometry(parent,Geometry::USER_GEOMETRY,numItems,1,RTC_GEOMETRY_STATIC), numItems(numItems) 
 {
   intersectors.ptr = nullptr; 
   enabling();
 }
Beispiel #15
0
void CameraSetter::initialize(Core *core){
    core_= core;
    cl_ = core_->cl_;
    ll_ = core_->ll_;
    glwidget_ = core_->mw_->glwidget_;
    flatview_ = core_->mw_->flatview_;
    mw_ = core_->mw_;

    is_enabled_ = false;
    connect(this, SIGNAL(enabling()), core_, SIGNAL(endEdit()));
    enable_ = new QAction(QIcon(":/camerasetter.png"), "Enable CameraSetter", 0);
    enable_->setCheckable(true);
    connect(enable_, SIGNAL(triggered()), this, SLOT(enable()));

    mw_->toolbar_->addAction(enable_);

    settings_ = new QWidget();
    QVBoxLayout * layout = new QVBoxLayout(settings_);
    settings_->setLayout(layout);
    mw_->tooloptions_->addWidget(settings_);

    QTextEdit * camera_state_text = new QTextEdit();

    auto cameraToText = [this, camera_state_text](){
        auto rot = glwidget_->camera_.getRotation();
        auto pos = glwidget_->camera_.getPosition();
        QString str = QString("%1 %2 %3 \n %4 %5 %6 %7").arg(
                    QString::number(pos.x()),
                    QString::number(pos.y()),
                    QString::number(pos.z()),
                    QString::number(rot.x()),
                    QString::number(rot.y()),
                    QString::number(rot.z()),
                    QString::number(rot.w()));
        camera_state_text->setText(str);
    };

    auto textToCamera = [this, camera_state_text](){
        QString str = camera_state_text->toPlainText().trimmed();

        QStringList sl = str.split(QRegExp("\\s+"), QString::SkipEmptyParts);
        if(sl.size() != 7){
//            qDebug() << "No good";
            camera_state_text->setStyleSheet("QTextEdit { background: #FFCCCC;}");
            return;
        } else {
            camera_state_text->setStyleSheet("QTextEdit { background: #FFFFFF;}");
        }

        QTextStream stream(&str);
        double rx, ry, rz, rw;
        double px, py, pz;

        stream >> px >> py >> pz >> rx >> ry >> rz >> rw;

        Eigen::Quaternion<float> rot(rw, rx, ry, rz);
        Eigen::Vector3f pos(px, py, pz);

        glwidget_->camera_.setRotation(rot);
        glwidget_->camera_.setPosition(pos);
    };

    connect(&glwidget_->camera_, &Camera::modified, cameraToText);
    connect(camera_state_text, &QTextEdit::textChanged, textToCamera);


    seconds_ = 0;
    running_ = false;
    target_ = Eigen::Vector3f(0, 0, 0);

    QLineEdit * elapsed_time_text = new QLineEdit();
    distance_text_ = new QLineEdit();
    QTextEdit * target_text_area = new QTextEdit();
    target_text_area->setText("0 0 0");
    QPushButton * start_button = new QPushButton("Start / Restart");

    connect(target_text_area, &QTextEdit::textChanged, [this, target_text_area](){
        QString str = target_text_area->toPlainText().trimmed();

        QStringList sl = str.split(QRegExp("\\s+"), QString::SkipEmptyParts);
        if(sl.size() != 3){
            target_text_area->setStyleSheet("QTextEdit { background: #FFCCCC;}");
            //qDebug() << "No good";
            return;
        } else {
            target_text_area->setStyleSheet("QTextEdit { background: #FFFFFF;}");
        }

        QTextStream stream(&str);
        double px, py, pz;

        stream >> px >> py >> pz;
        target_ = Eigen::Vector3f(px, py, pz);
    });
 GeometryInstance::GeometryInstance (Scene* scene, Geometry* geom) 
   : Geometry(scene,Type(geom->type | INSTANCE), 1, geom->numTimeSteps, geom->flags), local2world(one), world2local(one), geom(geom) 
 {
   enabling();
 }
 GeometryGroup::GeometryGroup (Scene* scene, RTCGeometryFlags gflags, const std::vector<Geometry*>& geometries) 
   : Geometry(scene,GROUP, geometries.size(), 1, gflags), geometries(geometries)
 {
   enabling();
 }