qglengine: direct primitive editor
git-svn-id: svn://db.shs.com.ru/libs@687 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
|
||||
PrimitiveEditor::PrimitiveEditor(QWidget *parent) : QWidget(parent), ui(new Ui::PrimitiveEditor) {
|
||||
view = 0;
|
||||
can_replace = false;
|
||||
ui->setupUi(this);
|
||||
editors[Plane] << ui->widgetWidth;
|
||||
editors[Plane] << ui->widgetLength;
|
||||
@@ -18,6 +19,7 @@ PrimitiveEditor::PrimitiveEditor(QWidget *parent) : QWidget(parent), ui(new Ui::
|
||||
editors[Ellipsoid] << ui->widgetHeight;
|
||||
editors[Ellipsoid] << ui->widgetSegments;
|
||||
editors[Ellipsoid] << ui->widgetSegments2;
|
||||
editors[Ellipsoid] << ui->widgetAngle;
|
||||
editors[Disc] << ui->widgetWidth;
|
||||
editors[Disc] << ui->widgetLength;
|
||||
editors[Disc] << ui->widgetSegments;
|
||||
@@ -30,6 +32,7 @@ PrimitiveEditor::PrimitiveEditor(QWidget *parent) : QWidget(parent), ui(new Ui::
|
||||
editors[Cylinder] << ui->widgetLength;
|
||||
editors[Cylinder] << ui->widgetHeight;
|
||||
editors[Cylinder] << ui->widgetSegments;
|
||||
editors[Cylinder] << ui->widgetAngle;
|
||||
editors[Torus] << ui->widgetRadius1;
|
||||
editors[Torus] << ui->widgetRadius2;
|
||||
editors[Torus] << ui->widgetSegments;
|
||||
@@ -63,44 +66,70 @@ void PrimitiveEditor::assignQGLView(QGLView * v) {
|
||||
}
|
||||
|
||||
|
||||
Mesh * PrimitiveEditor::createMesh() {
|
||||
Mesh * PrimitiveEditor::createMesh(QVariantList & params) {
|
||||
Mesh * m = 0;
|
||||
PrimitiveType pt = (PrimitiveType)ui->comboPrimitives->currentIndex();
|
||||
params << pt;
|
||||
switch (pt) {
|
||||
case Plane:
|
||||
m = Primitive::plane(ui->spinWidth->value(),
|
||||
ui->spinLength->value());
|
||||
params << ui->spinWidth->value()
|
||||
<< ui->spinLength->value();
|
||||
break;
|
||||
case Cube:
|
||||
m = Primitive::cube(ui->spinWidth->value(),
|
||||
ui->spinLength->value(),
|
||||
ui->spinHeight->value());
|
||||
params << ui->spinWidth->value()
|
||||
<< ui->spinLength->value()
|
||||
<< ui->spinHeight->value();
|
||||
break;
|
||||
case Ellipsoid:
|
||||
m = Primitive::ellipsoid(ui->spinSegments->value(),
|
||||
ui->spinSegments2->value(),
|
||||
ui->spinWidth->value(),
|
||||
ui->spinLength->value(),
|
||||
ui->spinHeight->value());
|
||||
ui->spinHeight->value(),
|
||||
ui->spinAngle->value());
|
||||
params << ui->spinSegments->value()
|
||||
<< ui->spinSegments2->value()
|
||||
<< ui->spinWidth->value()
|
||||
<< ui->spinLength->value()
|
||||
<< ui->spinHeight->value()
|
||||
<< ui->spinAngle->value();
|
||||
break;
|
||||
case Disc:
|
||||
m = Primitive::disc(ui->spinSegments->value(),
|
||||
ui->spinWidth->value(),
|
||||
ui->spinLength->value(),
|
||||
true,
|
||||
ui->spinAngle->value());
|
||||
params << ui->spinSegments->value()
|
||||
<< ui->spinWidth->value()
|
||||
<< ui->spinLength->value()
|
||||
<< ui->spinAngle->value();
|
||||
break;
|
||||
case Cone:
|
||||
m = Primitive::cone(ui->spinSegments->value(),
|
||||
ui->spinWidth->value(),
|
||||
ui->spinLength->value(),
|
||||
ui->spinHeight->value());
|
||||
params << ui->spinSegments->value()
|
||||
<< ui->spinWidth->value()
|
||||
<< ui->spinLength->value()
|
||||
<< ui->spinHeight->value();
|
||||
break;
|
||||
case Cylinder:
|
||||
m = Primitive::cylinder(ui->spinSegments->value(),
|
||||
ui->spinWidth->value(),
|
||||
ui->spinLength->value(),
|
||||
ui->spinHeight->value());
|
||||
ui->spinHeight->value(),
|
||||
ui->spinAngle->value());
|
||||
params << ui->spinSegments->value()
|
||||
<< ui->spinWidth->value()
|
||||
<< ui->spinLength->value()
|
||||
<< ui->spinHeight->value()
|
||||
<< ui->spinAngle->value();
|
||||
break;
|
||||
case Torus:
|
||||
m = Primitive::torus(ui->spinSegments->value(),
|
||||
@@ -108,9 +137,16 @@ Mesh * PrimitiveEditor::createMesh() {
|
||||
ui->spinRadius->value(),
|
||||
ui->spinRadius2->value(),
|
||||
ui->spinAngle->value());
|
||||
params << ui->spinSegments->value()
|
||||
<< ui->spinSegments2->value()
|
||||
<< ui->spinRadius->value()
|
||||
<< ui->spinRadius2->value()
|
||||
<< ui->spinAngle->value();
|
||||
break;
|
||||
default: return 0;
|
||||
}
|
||||
params << ui->flipNormals->isChecked();
|
||||
params << ui->colorButton->color();
|
||||
if (ui->flipNormals->isChecked())
|
||||
m->flipNormals();
|
||||
return m;
|
||||
@@ -126,32 +162,90 @@ void PrimitiveEditor::showEditors() {
|
||||
|
||||
|
||||
void PrimitiveEditor::selectionChanged() {
|
||||
ObjectBase * so = view->selectedObject();
|
||||
bool has_1 = so;
|
||||
ui->buttonReplace->setEnabled(has_1);
|
||||
ObjectBase * so = view->selectedObject();\
|
||||
can_replace = false;
|
||||
if (so) {
|
||||
QVariantList vl = so->property("primitive", &can_replace).toList();
|
||||
if (can_replace && !vl.isEmpty()) {
|
||||
PrimitiveType pt = (PrimitiveType)vl.takeFirst().toInt();
|
||||
ui->comboPrimitives->setCurrentIndex(pt);
|
||||
switch (pt) {
|
||||
case Plane:
|
||||
ui->spinWidth->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinLength->setValue(vl.takeFirst().toDouble());
|
||||
break;
|
||||
case Cube:
|
||||
ui->spinWidth->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinLength->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinHeight->setValue(vl.takeFirst().toDouble());
|
||||
break;
|
||||
case Ellipsoid:
|
||||
ui->spinSegments->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinSegments2->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinWidth->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinLength->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinHeight->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinAngle->setValue(vl.takeFirst().toDouble());
|
||||
break;
|
||||
case Disc:
|
||||
ui->spinSegments->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinWidth->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinLength->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinAngle->setValue(vl.takeFirst().toDouble());
|
||||
break;
|
||||
case Cone:
|
||||
ui->spinSegments->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinWidth->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinLength->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinHeight->setValue(vl.takeFirst().toDouble());
|
||||
break;
|
||||
case Cylinder:
|
||||
ui->spinSegments->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinWidth->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinLength->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinHeight->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinAngle->setValue(vl.takeFirst().toDouble());
|
||||
break;
|
||||
case Torus:
|
||||
ui->spinSegments->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinSegments2->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinRadius->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinRadius2->setValue(vl.takeFirst().toDouble());
|
||||
ui->spinAngle->setValue(vl.takeFirst().toDouble());
|
||||
break;
|
||||
}
|
||||
ui->flipNormals->setChecked(vl.takeFirst().toBool());
|
||||
ui->colorButton->setColor(vl.takeFirst().value<QColor>());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void PrimitiveEditor::replaceMesh() {
|
||||
if (!view) return;
|
||||
if (!ui->buttonReplace->isEnabled() || !ui->buttonReplace->isChecked()) return;
|
||||
if (!can_replace) return;
|
||||
ObjectBase * so = view->selectedObject();
|
||||
if (!so) return;
|
||||
Mesh * m = createMesh();
|
||||
QVariantList params;
|
||||
Mesh * m = createMesh(params);
|
||||
if (!m) return;
|
||||
so->setMesh(m);
|
||||
so->setColor(ui->colorButton->color());
|
||||
so->setName(ui->comboPrimitives->currentText());
|
||||
so->setProperty("primitive", params);
|
||||
delete m;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void PrimitiveEditor::on_buttonAdd_clicked() {
|
||||
if (!view) return;
|
||||
Mesh * m = createMesh();
|
||||
QVariantList params;
|
||||
Mesh * m = createMesh(params);
|
||||
if (!m) return;
|
||||
ObjectBase * o = new ObjectBase(m);
|
||||
o->setColor(ui->colorButton->color());
|
||||
o->setName(ui->comboPrimitives->currentText());
|
||||
o->setProperty("primitive", params);
|
||||
view->scene()->addObject(o);
|
||||
view->scene()->selectObject(o);
|
||||
delete m;
|
||||
|
||||
Reference in New Issue
Block a user