diff --git a/common/lc_mesh.cpp b/common/lc_mesh.cpp index 062b5ab6..0279dd7b 100644 --- a/common/lc_mesh.cpp +++ b/common/lc_mesh.cpp @@ -107,109 +107,6 @@ void lcMesh::CreateBox() UpdateBuffers(); } -void lcMesh::Render(int DefaultColorIdx, bool Selected, bool Focused) -{ - char* ElementsOffset; - char* BufferOffset; - - if (GL_HasVertexBufferObject()) - { - glBindBuffer(GL_ARRAY_BUFFER_ARB, mVertexBuffer.mBuffer); - BufferOffset = NULL; - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER_ARB, mIndexBuffer.mBuffer); - ElementsOffset = NULL; - } - else - { - BufferOffset = (char*)mVertexBuffer.mData; - ElementsOffset = (char*)mIndexBuffer.mData; - } - - glVertexPointer(3, GL_FLOAT, 0, BufferOffset); - - for (int SectionIdx = 0; SectionIdx < mNumSections; SectionIdx++) - { - lcMeshSection* Section = &mSections[SectionIdx]; - int ColorIdx = Section->ColorIndex; - - if (Section->PrimitiveType == GL_TRIANGLES) - { - if (ColorIdx == gDefaultColor) - ColorIdx = DefaultColorIdx; - - if (lcIsColorTranslucent(ColorIdx)) - { - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // TODO: cache states - glEnable(GL_BLEND); - glDepthMask(GL_FALSE); - } - else - { - glDepthMask(GL_TRUE); - glDisable(GL_BLEND); - } - - lcSetColor(ColorIdx); - } - else - { - glDepthMask(GL_TRUE); // TODO: cache states - glDisable(GL_BLEND); - - if (Focused) - lcSetColorFocused(); - else if (Selected) - lcSetColorSelected(); - else if (ColorIdx == gEdgeColor) - lcSetEdgeColor(DefaultColorIdx); - else - lcSetColor(ColorIdx); - } - - if (mNumTexturedVertices) - { - if (Section->Texture) // TODO: cache states - { - glVertexPointer(3, GL_FLOAT, sizeof(lcVertexTextured), BufferOffset + (mNumVertices * sizeof(lcVertex))); - glTexCoordPointer(2, GL_FLOAT, sizeof(lcVertexTextured), BufferOffset + ((mNumVertices + 1) * sizeof(lcVertex))); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - glBindTexture(GL_TEXTURE_2D, Section->Texture->mTexture); - glEnable(GL_TEXTURE_2D); - } - else - { - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glVertexPointer(3, GL_FLOAT, 0, BufferOffset); - glTexCoordPointer(2, GL_FLOAT, 0, NULL); - - glDisable(GL_TEXTURE_2D); - } - } - - glDrawElements(Section->PrimitiveType, Section->NumIndices, mIndexType, ElementsOffset + Section->IndexOffset); - } - - glDepthMask(GL_TRUE); // TODO: cache states - glDisable(GL_BLEND); - - if (GL_HasVertexBufferObject()) - { - glBindBuffer(GL_ARRAY_BUFFER_ARB, 0); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); - } - else - glVertexPointer(3, GL_FLOAT, 0, NULL); - - if (mNumTexturedVertices) - { - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glTexCoordPointer(2, GL_FLOAT, 0, NULL); - glDisable(GL_TEXTURE_2D); - } -} - template bool lcMesh::MinIntersectDist(const lcVector3& Start, const lcVector3& End, float& MinDist, lcVector3& Intersection) { diff --git a/common/lc_mesh.h b/common/lc_mesh.h index 900652c7..8d9e5fe8 100644 --- a/common/lc_mesh.h +++ b/common/lc_mesh.h @@ -129,7 +129,6 @@ public: void Create(int NumSections, int NumVertices, int NumTexturedVertices, int NumIndices); void CreateBox(); - void Render(int ColorIdx, bool Selected, bool Focused); bool FileLoad(lcFile& File); void FileSave(lcFile& File); diff --git a/common/piece.cpp b/common/piece.cpp index 4680ac03..92da59a5 100644 --- a/common/piece.cpp +++ b/common/piece.cpp @@ -15,6 +15,7 @@ #include "lc_application.h" #include "lc_library.h" #include "lc_context.h" +#include "lc_qutils.h" #define LC_PIECE_SAVE_VERSION 12 // LeoCAD 0.80 @@ -65,22 +66,9 @@ void lcPiece::SaveLDraw(QTextStream& Stream) const const float* Matrix = mModelWorld; float Numbers[12] = { Matrix[12], -Matrix[14], Matrix[13], Matrix[0], -Matrix[8], Matrix[4], -Matrix[2], Matrix[10], -Matrix[6], Matrix[1], -Matrix[9], Matrix[5] }; + for (int NumberIdx = 0; NumberIdx < 12; NumberIdx++) - { - QString Number = QString::number(Numbers[NumberIdx], 'f', 6); - int Dot = Number.indexOf('.'); - - if (Dot != -1) - { - while (Number.endsWith('0')) - Number.chop(1); - - if (Number.endsWith('.')) - Number.chop(1); - } - - Stream << Number << ' '; - } + Stream << lcFormatValue(Numbers[NumberIdx]) << ' '; Stream << mPieceInfo->GetSaveID() << LineEnding; } diff --git a/qt/lc_qpropertiestree.cpp b/qt/lc_qpropertiestree.cpp index 84ab0db4..87ff877e 100644 --- a/qt/lc_qpropertiestree.cpp +++ b/qt/lc_qpropertiestree.cpp @@ -10,6 +10,7 @@ #include "light.h" #include "pieceinf.h" #include "lc_library.h" +#include "lc_qutils.h" // Draw an icon indicating opened/closing branches static QIcon drawIndicatorIcon(const QPalette &palette, QStyle *style) @@ -17,7 +18,6 @@ static QIcon drawIndicatorIcon(const QPalette &palette, QStyle *style) QPixmap pix(14, 14); pix.fill(Qt::transparent); QStyleOption branchOption; - QRect r(QPoint(0, 0), pix.size()); branchOption.rect = QRect(2, 2, 9, 9); // ### hardcoded in qcommonstyle.cpp branchOption.palette = palette; branchOption.state = QStyle::State_Children; @@ -405,7 +405,7 @@ QWidget *lcQPropertiesTree::createEditor(QWidget *parent, QTreeWidgetItem *item) float value = item->data(0, PropertyValueRole).toFloat(); editor->setValidator(new QDoubleValidator()); - editor->setText(QString::number(value)); + editor->setText(lcFormatValue(value)); connect(editor, SIGNAL(returnPressed()), this, SLOT(slotReturnPressed())); @@ -781,19 +781,19 @@ void lcQPropertiesTree::setPart(lcObject *newFocusObject) lcPiece *part = (lcPiece*)focusObject; lcVector3 position = part->mModelWorld.GetTranslation(); - partPositionX->setText(1, QString::number(position[0])); + partPositionX->setText(1, lcFormatValue(position[0])); partPositionX->setData(0, PropertyValueRole, position[0]); - partPositionY->setText(1, QString::number(position[1])); + partPositionY->setText(1, lcFormatValue(position[1])); partPositionY->setData(0, PropertyValueRole, position[1]); - partPositionZ->setText(1, QString::number(position[2])); + partPositionZ->setText(1, lcFormatValue(position[2])); partPositionZ->setData(0, PropertyValueRole, position[2]); lcVector3 rotation = lcMatrix44ToEulerAngles(part->mModelWorld) * LC_RTOD; - partRotationX->setText(1, QString::number(rotation[0])); + partRotationX->setText(1, lcFormatValue(rotation[0])); partRotationX->setData(0, PropertyValueRole, rotation[0]); - partRotationY->setText(1, QString::number(rotation[1])); + partRotationY->setText(1, lcFormatValue(rotation[1])); partRotationY->setData(0, PropertyValueRole, rotation[1]); - partRotationZ->setText(1, QString::number(rotation[2])); + partRotationZ->setText(1, lcFormatValue(rotation[2])); partRotationZ->setData(0, PropertyValueRole, rotation[2]); lcStep show = part->GetStepShow(); @@ -856,36 +856,36 @@ void lcQPropertiesTree::setCamera(lcObject *newFocusObject) lcCamera *camera = (lcCamera*)focusObject; lcVector3 position = camera->mPosition; - cameraPositionX->setText(1, QString::number(position[0])); + cameraPositionX->setText(1, lcFormatValue(position[0])); cameraPositionX->setData(0, PropertyValueRole, position[0]); - cameraPositionY->setText(1, QString::number(position[1])); + cameraPositionY->setText(1, lcFormatValue(position[1])); cameraPositionY->setData(0, PropertyValueRole, position[1]); - cameraPositionZ->setText(1, QString::number(position[2])); + cameraPositionZ->setText(1, lcFormatValue(position[2])); cameraPositionZ->setData(0, PropertyValueRole, position[2]); lcVector3 target = camera->mTargetPosition; - cameraTargetX->setText(1, QString::number(target[0])); + cameraTargetX->setText(1, lcFormatValue(target[0])); cameraTargetX->setData(0, PropertyValueRole, target[0]); - cameraTargetY->setText(1, QString::number(target[1])); + cameraTargetY->setText(1, lcFormatValue(target[1])); cameraTargetY->setData(0, PropertyValueRole, target[1]); - cameraTargetZ->setText(1, QString::number(target[2])); + cameraTargetZ->setText(1, lcFormatValue(target[2])); cameraTargetZ->setData(0, PropertyValueRole, target[2]); lcVector3 up = camera->mUpVector; - cameraUpX->setText(1, QString::number(up[0])); + cameraUpX->setText(1, lcFormatValue(up[0])); cameraUpX->setData(0, PropertyValueRole, up[0]); - cameraUpY->setText(1, QString::number(up[1])); + cameraUpY->setText(1, lcFormatValue(up[1])); cameraUpY->setData(0, PropertyValueRole, up[1]); - cameraUpZ->setText(1, QString::number(up[2])); + cameraUpZ->setText(1, lcFormatValue(up[2])); cameraUpZ->setData(0, PropertyValueRole, up[2]); cameraOrtho->setText(1, camera->IsOrtho() ? "True" : "False"); cameraOrtho->setData(0, PropertyValueRole, camera->IsOrtho()); - cameraFOV->setText(1, QString::number(camera->m_fovy)); + cameraFOV->setText(1, lcFormatValue(camera->m_fovy)); cameraFOV->setData(0, PropertyValueRole, camera->m_fovy); - cameraNear->setText(1, QString::number(camera->m_zNear)); + cameraNear->setText(1, lcFormatValue(camera->m_zNear)); cameraNear->setData(0, PropertyValueRole, camera->m_zNear); - cameraFar->setText(1, QString::number(camera->m_zFar)); + cameraFar->setText(1, lcFormatValue(camera->m_zFar)); cameraFar->setData(0, PropertyValueRole, camera->m_zFar); cameraName->setText(1, camera->GetName()); diff --git a/qt/lc_qutils.cpp b/qt/lc_qutils.cpp index cfb7f8b5..370cdfd1 100644 --- a/qt/lc_qutils.cpp +++ b/qt/lc_qutils.cpp @@ -4,6 +4,23 @@ #include "lc_library.h" #include "pieceinf.h" +QString lcFormatValue(float Value) +{ + QString String = QString::number(Value, 'f', 6); + int Dot = String.indexOf('.'); + + if (Dot != -1) + { + while (String.endsWith('0')) + String.chop(1); + + if (String.endsWith('.')) + String.chop(1); + } + + return String; +} + // Resize all columns to content except for one stretching column. (taken from QT creator) lcQTreeWidgetColumnStretcher::lcQTreeWidgetColumnStretcher(QTreeWidget *treeWidget, int columnToStretch) : QObject(treeWidget->header()), m_columnToStretch(columnToStretch) diff --git a/qt/lc_qutils.h b/qt/lc_qutils.h index 6b556d04..a444ad31 100644 --- a/qt/lc_qutils.h +++ b/qt/lc_qutils.h @@ -3,6 +3,8 @@ #include +QString lcFormatValue(float Value); + class lcQTreeWidgetColumnStretcher : public QObject { public: