git-svn-id: svn://db.shs.com.ru/libs@660 a8b55f48-bf90-11e4-a774-851b48703e85

This commit is contained in:
2019-12-06 15:04:22 +00:00
parent 6c409d0e12
commit 816c87d101
4 changed files with 427 additions and 240 deletions

View File

@@ -88,6 +88,7 @@ QGLViewWindow::QGLViewWindow(QWidget * parent): QMainWindow(parent), Ui::QGLView
sceneTree->assignQGLView(view->view()); sceneTree->assignQGLView(view->view());
matEditor->assignQGLView(view->view()); matEditor->assignQGLView(view->view());
objectEditor->assignQGLView(view->view()); objectEditor->assignQGLView(view->view());
primitiveEditor->assignQGLView(view->view());
session.load(); session.load();

View File

@@ -1,14 +1,52 @@
#include "primitiveeditor.h" #include "primitiveeditor.h"
#include "ui_primitiveeditor.h" #include "ui_primitiveeditor.h"
#include <QMetaEnum> #include <QMetaEnum>
#include "glprimitives.h"
#include "glmesh.h"
PrimitiveEditor::PrimitiveEditor(QWidget *parent) : QWidget(parent), ui(new Ui::PrimitiveEditor) { PrimitiveEditor::PrimitiveEditor(QWidget *parent) : QWidget(parent), ui(new Ui::PrimitiveEditor) {
view = 0;
ui->setupUi(this); ui->setupUi(this);
editors[Plane] << ui->widgetWidth;
editors[Plane] << ui->widgetLength;
editors[Cube] << ui->widgetWidth;
editors[Cube] << ui->widgetLength;
editors[Cube] << ui->widgetHeight;
editors[Ellipsoid] << ui->widgetWidth;
editors[Ellipsoid] << ui->widgetLength;
editors[Ellipsoid] << ui->widgetHeight;
editors[Ellipsoid] << ui->widgetSegments;
editors[Ellipsoid] << ui->widgetSegments2;
editors[Disc] << ui->widgetWidth;
editors[Disc] << ui->widgetLength;
editors[Disc] << ui->widgetSegments;
editors[Disc] << ui->widgetAngle;
editors[Cone] << ui->widgetWidth;
editors[Cone] << ui->widgetLength;
editors[Cone] << ui->widgetHeight;
editors[Cone] << ui->widgetSegments;
editors[Cylinder] << ui->widgetWidth;
editors[Cylinder] << ui->widgetLength;
editors[Cylinder] << ui->widgetHeight;
editors[Cylinder] << ui->widgetSegments;
editors[Torus] << ui->widgetRadius1;
editors[Torus] << ui->widgetRadius2;
editors[Torus] << ui->widgetSegments;
editors[Torus] << ui->widgetSegments2;
editors[Torus] << ui->widgetAngle;
QSet<QWidget *> all;
QMetaEnum me = metaObject()->enumerator(0); QMetaEnum me = metaObject()->enumerator(0);
for (int i=0; i<me.keyCount(); ++i) for (int i=0; i<me.keyCount(); ++i) {
ui->comboPrimitives->addItem(me.key(i)); ui->comboPrimitives->addItem(me.key(i));
all.unite(editors[(PrimitiveType)me.value(i)].toSet());
}
all_editors = all.toList();
foreach (QWidget * w, all_editors) {
if (w->layout()) w->layout()->setContentsMargins(0, layout()->spacing(), 0, 0);
}
ui->comboPrimitives->setCurrentIndex(Plane);
} }
@@ -22,9 +60,78 @@ void PrimitiveEditor::assignQGLView(QGLView * v) {
// connect(view, SIGNAL(selectionChanged()), this, SLOT(selectionChanged())); // connect(view, SIGNAL(selectionChanged()), this, SLOT(selectionChanged()));
// connect(view, SIGNAL(objectsPositionChanged()), this, SLOT(selectionChanged())); // connect(view, SIGNAL(objectsPositionChanged()), this, SLOT(selectionChanged()));
// connect(view->scene(), SIGNAL(treeChanged()), this, SLOT(selectionChanged())); // connect(view->scene(), SIGNAL(treeChanged()), this, SLOT(selectionChanged()));
// selectionChanged(); // selectionChanged();
} }
void PrimitiveEditor::showEditors() { void PrimitiveEditor::showEditors() {
foreach (QWidget * w, all_editors) w->hide();
PrimitiveType pt = (PrimitiveType)ui->comboPrimitives->currentIndex();
QList<QWidget *> wds = editors[pt];
foreach (QWidget * w, wds) w->show();
}
void PrimitiveEditor::on_buttonAdd_clicked() {
if (!view) return;
Mesh * m = 0;
PrimitiveType pt = (PrimitiveType)ui->comboPrimitives->currentIndex();
switch (pt) {
case Plane:
m = Primitive::plane(ui->spinWidth->value(),
ui->spinLength->value());
break;
case Cube:
m = Primitive::cube(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());
break;
case Disc:
m = Primitive::disc(ui->spinSegments->value(),
ui->spinWidth->value(),
ui->spinLength->value(),
true,
ui->spinAngle->value());
break;
case Cone:
m = Primitive::cone(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());
break;
case Torus:
m = Primitive::torus(ui->spinSegments->value(),
ui->spinSegments2->value(),
ui->spinRadius->value(),
ui->spinRadius2->value(),
ui->spinAngle->value());
break;
}
if (m) {
if (ui->flipNormals->isChecked()) m->flipNormals();
ObjectBase * o = new ObjectBase(m);
o->setColor(ui->colorButton->color());
o->setName(ui->comboPrimitives->currentText());
view->scene()->addObject(o);
view->scene()->selectObject(o);
delete m;
}
}
void PrimitiveEditor::on_comboPrimitives_currentIndexChanged(int index) {
showEditors();
} }

View File

@@ -17,6 +17,10 @@ public:
Plane, Plane,
Cube, Cube,
Ellipsoid, Ellipsoid,
Disc,
Cone,
Cylinder,
Torus
}; };
Q_ENUMS(PrimitiveType) Q_ENUMS(PrimitiveType)
@@ -33,7 +37,11 @@ protected:
Ui::PrimitiveEditor *ui; Ui::PrimitiveEditor *ui;
QGLView * view; QGLView * view;
QMap<PrimitiveType, QList<QWidget *> > editors; QMap<PrimitiveType, QList<QWidget *> > editors;
QList<QWidget *> all_editors;
private slots:
void on_buttonAdd_clicked();
void on_comboPrimitives_currentIndexChanged(int index);
}; };

View File

@@ -6,23 +6,41 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>575</width> <width>360</width>
<height>608</height> <height>536</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string>Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item> <item>
<widget class="EComboBox" name="comboPrimitives"/> <widget class="EComboBox" name="comboPrimitives"/>
</item> </item>
<item> <item>
<widget class="QWidget" name="widgetWidth" native="true"> <widget class="QWidget" name="widgetRows" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin"> <property name="leftMargin">
<number>0</number> <number>0</number>
</property> </property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin"> <property name="rightMargin">
<number>0</number> <number>0</number>
</property> </property>
@@ -30,262 +48,310 @@
<number>0</number> <number>0</number>
</property> </property>
<item> <item>
<widget class="QLabel" name="label"> <widget class="QWidget" name="widgetWidth" native="true">
<property name="text"> <layout class="QHBoxLayout" name="horizontalLayout_2">
<string>Width:</string> <property name="leftMargin">
</property> <number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Width:</string>
</property>
</widget>
</item>
<item>
<widget class="ScrollSpinBox" name="spinWidth">
<property name="value">
<double>1.000000000000000</double>
</property>
</widget>
</item>
</layout>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="ScrollSpinBox" name="spinWidth"> <widget class="QWidget" name="widgetLength" native="true">
<property name="value"> <layout class="QHBoxLayout" name="horizontalLayout_3">
<double>1.000000000000000</double> <property name="leftMargin">
</property> <number>0</number>
</widget> </property>
</item> <property name="rightMargin">
</layout> <number>0</number>
</widget> </property>
</item> <property name="bottomMargin">
<item> <number>0</number>
<widget class="QWidget" name="widgetLength" native="true"> </property>
<layout class="QHBoxLayout" name="horizontalLayout_3"> <item>
<property name="leftMargin"> <widget class="QLabel" name="label_2">
<number>0</number> <property name="text">
</property> <string>Length:</string>
<property name="rightMargin"> </property>
<number>0</number> </widget>
</property> </item>
<property name="bottomMargin"> <item>
<number>0</number> <widget class="ScrollSpinBox" name="spinLength">
</property> <property name="value">
<item> <double>1.000000000000000</double>
<widget class="QLabel" name="label_2"> </property>
<property name="text"> </widget>
<string>Length:</string> </item>
</property> </layout>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="ScrollSpinBox" name="spinLength"> <widget class="QWidget" name="widgetHeight" native="true">
<property name="value"> <layout class="QHBoxLayout" name="horizontalLayout_4">
<double>1.000000000000000</double> <property name="leftMargin">
</property> <number>0</number>
</widget> </property>
</item> <property name="rightMargin">
</layout> <number>0</number>
</widget> </property>
</item> <property name="bottomMargin">
<item> <number>0</number>
<widget class="QWidget" name="widgetHeight" native="true"> </property>
<layout class="QHBoxLayout" name="horizontalLayout_4"> <item>
<property name="leftMargin"> <widget class="QLabel" name="label_3">
<number>0</number> <property name="text">
</property> <string>Height</string>
<property name="rightMargin"> </property>
<number>0</number> </widget>
</property> </item>
<property name="bottomMargin"> <item>
<number>0</number> <widget class="ScrollSpinBox" name="spinHeight">
</property> <property name="value">
<item> <double>1.000000000000000</double>
<widget class="QLabel" name="label_3"> </property>
<property name="text"> </widget>
<string>Height</string> </item>
</property> </layout>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="ScrollSpinBox" name="spinHeight"> <widget class="QWidget" name="widgetRadius1" native="true">
<property name="value"> <layout class="QHBoxLayout" name="horizontalLayout_5">
<double>1.000000000000000</double> <property name="leftMargin">
</property> <number>0</number>
</widget> </property>
</item> <property name="rightMargin">
</layout> <number>0</number>
</widget> </property>
</item> <property name="bottomMargin">
<item> <number>0</number>
<widget class="QWidget" name="widgetRadius1" native="true"> </property>
<layout class="QHBoxLayout" name="horizontalLayout_5"> <item>
<property name="leftMargin"> <widget class="QLabel" name="label_6">
<number>0</number> <property name="text">
</property> <string>Radius 1:</string>
<property name="rightMargin"> </property>
<number>0</number> </widget>
</property> </item>
<property name="bottomMargin"> <item>
<number>0</number> <widget class="ScrollSpinBox" name="spinRadius">
</property> <property name="value">
<item> <double>1.000000000000000</double>
<widget class="QLabel" name="label_6"> </property>
<property name="text"> </widget>
<string>Radius 1:</string> </item>
</property> </layout>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="ScrollSpinBox" name="spinRadius"> <widget class="QWidget" name="widgetRadius2" native="true">
<property name="value"> <layout class="QHBoxLayout" name="horizontalLayout_6">
<double>1.000000000000000</double> <property name="leftMargin">
</property> <number>0</number>
</widget> </property>
</item> <property name="rightMargin">
</layout> <number>0</number>
</widget> </property>
</item> <property name="bottomMargin">
<item> <number>0</number>
<widget class="QWidget" name="widgetRadius2" native="true"> </property>
<layout class="QHBoxLayout" name="horizontalLayout_6"> <item>
<property name="leftMargin"> <widget class="QLabel" name="label_7">
<number>0</number> <property name="text">
</property> <string>Radius 2:</string>
<property name="rightMargin"> </property>
<number>0</number> </widget>
</property> </item>
<property name="bottomMargin"> <item>
<number>0</number> <widget class="ScrollSpinBox" name="spinRadius2">
</property> <property name="value">
<item> <double>1.000000000000000</double>
<widget class="QLabel" name="label_7"> </property>
<property name="text"> </widget>
<string>Radius 2:</string> </item>
</property> </layout>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="ScrollSpinBox" name="spinRadius2"> <widget class="QWidget" name="widgetAngle" native="true">
<property name="value"> <layout class="QHBoxLayout" name="horizontalLayout_7">
<double>1.000000000000000</double> <property name="leftMargin">
</property> <number>0</number>
</widget> </property>
</item> <property name="rightMargin">
</layout> <number>0</number>
</widget> </property>
</item> <property name="bottomMargin">
<item> <number>0</number>
<widget class="QWidget" name="widgetAngle" native="true"> </property>
<layout class="QHBoxLayout" name="horizontalLayout_7"> <item>
<property name="leftMargin"> <widget class="QLabel" name="label_8">
<number>0</number> <property name="text">
</property> <string>Angle:</string>
<property name="rightMargin"> </property>
<number>0</number> </widget>
</property> </item>
<property name="bottomMargin"> <item>
<number>0</number> <widget class="SpinSlider" name="spinAngle">
</property> <property name="maximum">
<item> <double>360.000000000000000</double>
<widget class="QLabel" name="label_8"> </property>
<property name="text"> <property name="value">
<string>Angle:</string> <double>360.000000000000000</double>
</property> </property>
<property name="singleStep">
<double>4.500000000000000</double>
</property>
<property name="pageStep">
<double>90.000000000000000</double>
</property>
<property name="suffix">
<string>°</string>
</property>
<property name="tickPosition">
<enum>QSlider::TicksAbove</enum>
</property>
<property name="tickInterval">
<number>90</number>
</property>
</widget>
</item>
</layout>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="SpinSlider" name="spinAngle"> <widget class="QWidget" name="widgetSegments" native="true">
<property name="maximum"> <layout class="QHBoxLayout" name="horizontalLayout_8">
<double>360.000000000000000</double> <property name="leftMargin">
</property> <number>0</number>
<property name="value"> </property>
<double>360.000000000000000</double> <property name="rightMargin">
</property> <number>0</number>
<property name="singleStep"> </property>
<double>4.500000000000000</double> <property name="bottomMargin">
</property> <number>0</number>
<property name="pageStep"> </property>
<double>90.000000000000000</double> <item>
</property> <widget class="QLabel" name="label_4">
<property name="suffix"> <property name="text">
<string>°</string> <string>Segments:</string>
</property> </property>
<property name="tickPosition"> </widget>
<enum>QSlider::TicksAbove</enum> </item>
</property> <item>
<property name="tickInterval"> <widget class="QSpinBox" name="spinSegments">
<number>90</number> <property name="minimum">
</property> <number>1</number>
</widget> </property>
</item> <property name="maximum">
</layout> <number>1000</number>
</widget> </property>
</item> <property name="singleStep">
<item> <number>1</number>
<widget class="QWidget" name="widgetSegments" native="true"> </property>
<layout class="QHBoxLayout" name="horizontalLayout_8"> <property name="stepType">
<property name="leftMargin"> <enum>QAbstractSpinBox::AdaptiveDecimalStepType</enum>
<number>0</number> </property>
</property> <property name="value">
<property name="rightMargin"> <number>16</number>
<number>0</number> </property>
</property> </widget>
<property name="bottomMargin"> </item>
<number>0</number> </layout>
</property>
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>Segments:</string>
</property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QSpinBox" name="spinSegments"> <widget class="QWidget" name="widgetSegments2" native="true">
<property name="minimum"> <layout class="QHBoxLayout" name="horizontalLayout_9">
<number>2</number> <property name="leftMargin">
</property> <number>0</number>
<property name="maximum"> </property>
<number>1000</number> <property name="rightMargin">
</property> <number>0</number>
<property name="singleStep"> </property>
<number>1</number> <property name="bottomMargin">
</property> <number>0</number>
<property name="stepType"> </property>
<enum>QAbstractSpinBox::AdaptiveDecimalStepType</enum> <item>
</property> <widget class="QLabel" name="label_9">
<property name="value"> <property name="text">
<number>16</number> <string>Segments 2:</string>
</property> </property>
</widget> </widget>
</item> </item>
</layout> <item>
</widget> <widget class="QSpinBox" name="spinSegments2">
</item> <property name="minimum">
<item> <number>1</number>
<widget class="QWidget" name="widgetSegments2" native="true"> </property>
<layout class="QHBoxLayout" name="horizontalLayout_9"> <property name="maximum">
<property name="leftMargin"> <number>1000</number>
<number>0</number> </property>
</property> <property name="singleStep">
<property name="rightMargin"> <number>1</number>
<number>0</number> </property>
</property> <property name="stepType">
<property name="bottomMargin"> <enum>QAbstractSpinBox::AdaptiveDecimalStepType</enum>
<number>0</number> </property>
</property> <property name="value">
<item> <number>16</number>
<widget class="QLabel" name="label_9"> </property>
<property name="text"> </widget>
<string>Segments 2:</string> </item>
</property> </layout>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QSpinBox" name="spinSegments2"> <widget class="QWidget" name="widgetColor" native="true">
<property name="minimum"> <layout class="QHBoxLayout" name="horizontalLayout_10">
<number>2</number> <property name="leftMargin">
</property> <number>0</number>
<property name="maximum"> </property>
<number>1000</number> <property name="rightMargin">
</property> <number>0</number>
<property name="singleStep"> </property>
<number>1</number> <property name="bottomMargin">
</property> <number>0</number>
<property name="stepType"> </property>
<enum>QAbstractSpinBox::AdaptiveDecimalStepType</enum> <item>
</property> <widget class="QLabel" name="label_10">
<property name="value"> <property name="text">
<number>16</number> <string>Color:</string>
</property> </property>
</widget>
</item>
<item>
<widget class="ColorButton" name="colorButton">
<property name="color">
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</property>
</widget>
</item>
</layout>
</widget> </widget>
</item> </item>
</layout> </layout>
@@ -306,7 +372,7 @@
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
<width>20</width> <width>20</width>
<height>220</height> <height>176</height>
</size> </size>
</property> </property>
</spacer> </spacer>
@@ -356,6 +422,11 @@
<extends>QWidget</extends> <extends>QWidget</extends>
<header>spinslider.h</header> <header>spinslider.h</header>
</customwidget> </customwidget>
<customwidget>
<class>ColorButton</class>
<extends>QPushButton</extends>
<header>colorbutton.h</header>
</customwidget>
<customwidget> <customwidget>
<class>EComboBox</class> <class>EComboBox</class>
<extends>QComboBox</extends> <extends>QComboBox</extends>