| 69 m_compiler = new GLCompiler (this); |
69 m_compiler = new GLCompiler (this); |
| 70 m_toolTipTimer = new QTimer (this); |
70 m_toolTipTimer = new QTimer (this); |
| 71 m_toolTipTimer->setSingleShot (true); |
71 m_toolTipTimer->setSingleShot (true); |
| 72 setAcceptDrops (true); |
72 setAcceptDrops (true); |
| 73 connect (m_toolTipTimer, SIGNAL (timeout()), this, SLOT (showCameraIconTooltip())); |
73 connect (m_toolTipTimer, SIGNAL (timeout()), this, SLOT (showCameraIconTooltip())); |
| 74 connect(model, SIGNAL(aboutToRemoveObject(LDObject*)), this, SLOT(removeObject(LDObject*))); |
|
| 75 resetAllAngles(); |
74 resetAllAngles(); |
| 76 m_needZoomToFit = true; |
75 m_needZoomToFit = true; |
| 77 |
76 |
| 78 // Init camera icons |
77 // Init camera icons |
| 79 for (Camera camera : iterateEnum<Camera>()) |
78 for (Camera camera : iterateEnum<Camera>()) |
| 796 // Restore line thickness |
795 // Restore line thickness |
| 797 glLineWidth(m_config->lineThickness()); |
796 glLineWidth(m_config->lineThickness()); |
| 798 } |
797 } |
| 799 } |
798 } |
| 800 |
799 |
| 801 // ============================================================================= |
|
| 802 // |
|
| 803 void GLRenderer::removeObject(LDObject* object) |
|
| 804 { |
|
| 805 if (m_objectAtCursor == object) |
|
| 806 m_objectAtCursor = nullptr; |
|
| 807 } |
|
| 808 |
|
| 809 /* |
800 /* |
| 810 * Returns an image containing the current render of the scene. |
801 * Returns an image containing the current render of the scene. |
| 811 */ |
802 */ |
| 812 QImage GLRenderer::screenCapture() |
803 QImage GLRenderer::screenCapture() |
| 813 { |
804 { |
| 934 |
925 |
| 935 // ============================================================================= |
926 // ============================================================================= |
| 936 // |
927 // |
| 937 void GLRenderer::highlightCursorObject() |
928 void GLRenderer::highlightCursorObject() |
| 938 { |
929 { |
| 939 if (not m_config->highlightObjectBelowCursor() and objectAtCursor() == nullptr) |
930 if (not m_config->highlightObjectBelowCursor() and not objectAtCursor().isValid()) |
| 940 return; |
931 return; |
| 941 |
932 |
| 942 LDObject* newObject = nullptr; |
933 QModelIndex newIndex; |
| 943 LDObject* oldObject = objectAtCursor(); |
934 QModelIndex oldIndex = m_objectAtCursor; |
| 944 qint32 newIndex; |
935 |
| 945 |
936 if (not m_isCameraMoving and m_config->highlightObjectBelowCursor()) |
| 946 if (m_isCameraMoving or not m_config->highlightObjectBelowCursor()) |
|
| 947 { |
|
| 948 newIndex = 0; |
|
| 949 } |
|
| 950 else |
|
| 951 { |
937 { |
| 952 setPicking (true); |
938 setPicking (true); |
| 953 drawGLScene(); |
939 drawGLScene(); |
| 954 setPicking (false); |
940 setPicking (false); |
| 955 |
941 |
| 956 unsigned char pixel[4]; |
942 unsigned char pixel[4]; |
| 957 glReadPixels (m_mousePosition.x(), height() - m_mousePosition.y(), 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &pixel[0]); |
943 glReadPixels (m_mousePosition.x(), height() - m_mousePosition.y(), 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &pixel[0]); |
| 958 newIndex = pixel[0] * 0x10000 | pixel[1] * 0x100 | pixel[2]; |
944 qint32 id = pixel[0] * 0x10000 | pixel[1] * 0x100 | pixel[2]; |
| 959 } |
945 |
| 960 |
946 if (id != 0) |
| 961 if (newIndex != (oldObject ? oldObject->id() : 0)) |
947 newIndex = model()->indexFromId(id); |
| 962 { |
948 } |
| 963 if (newIndex != 0) |
949 |
| 964 newObject = LDObject::fromID (newIndex); |
950 if (newIndex != oldIndex) |
| 965 |
951 { |
| 966 m_objectAtCursor = newObject; |
952 m_objectAtCursor = newIndex; |
| 967 |
953 emit objectHighlightingChanged(oldIndex, newIndex); |
| 968 if (oldObject) |
|
| 969 emit objectHighlightingChanged(oldObject); |
|
| 970 |
|
| 971 if (newObject) |
|
| 972 emit objectHighlightingChanged(newObject); |
|
| 973 } |
954 } |
| 974 |
955 |
| 975 update(); |
956 update(); |
| 976 } |
957 } |
| 977 |
958 |