fix reported bugs

- compile on windows
- fix cursors
This commit is contained in:
Stefan Tröger 2014-09-10 06:32:42 +02:00 committed by wmayer
parent b18ebc9064
commit ad1bfc32fb
17 changed files with 128 additions and 26 deletions

View File

@ -260,10 +260,12 @@ typedef unsigned __int64 uint64_t;
//**************************************************************************
// Coin3D
#if defined (FC_OS_WIN32) || defined(FC_OS_CYGWIN)
# ifndef FCGui //COIN_DLL is defined in the FreeCADGui target
# ifndef COIN_DLL
# define COIN_DLL
# endif
# endif
#endif
//**************************************************************************
// SoQt
@ -273,6 +275,16 @@ typedef unsigned __int64 uint64_t;
# endif
#endif
//**************************************************************************
// Quarter
#if defined (FC_OS_WIN32) || defined(FC_OS_CYGWIN)
# ifndef QUARTER_INTERNAL
# ifndef QUARTER_DLL
# define QUARTER_DLL
# endif
# endif
#endif
// stops inclusion of the QT 3 header through the SoQT header...
//#define __Qt3All__

View File

@ -1,7 +1,7 @@
#add_subdirectory(Icons)
if(WIN32)
add_definitions(-DFCGui -DQIIS_MAKEDLL -DOVR_OS_WIN32)
add_definitions(-DFCGui -DQIIS_MAKEDLL -DOVR_OS_WIN32 -DQUARTER_INTERNAL -DQUARTER_MAKE_DLL -DCOIN_DLL)
endif(WIN32)
if (FREECAD_USE_3DCONNEXION)
@ -684,7 +684,7 @@ SOURCE_GROUP("View3D" FILES ${View3D_SRCS})
#quarter sources
FILE(GLOB_RECURSE Quarter_CPP_SRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} Quarter/*.cpp)
FILE(GLOB_RECURSE Quarter_H_SRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} Quarter/*.h)
fc_wrap_cpp(Quarter_MOC_SRCS ${Quarter_H_SRC})
qt4_wrap_cpp(Quarter_MOC_SRCS ${Quarter_H_SRC})
SET(Quarter_SRCS
${Quarter_CPP_SRC}
${Quarter_H_SRC}
@ -954,7 +954,6 @@ if(MSVC)
${Editor_CPP_SRCS}
${Help_CPP_SRCS}
${Inventor_CPP_SRCS}
${Quarter_SRCS}
${View3D_CPP_SRCS}
${Viewprovider_CPP_SRCS}
${Widget_CPP_SRCS}

View File

@ -151,9 +151,6 @@
#include <Inventor/sensors/SoNodeSensor.h>
#include <Inventor/VRMLnodes/SoVRMLGroup.h>
#include <Inventor/Qt/SoQt.h>
#include <Inventor/Qt/SoQtCursor.h>
#include <Inventor/Qt/viewers/SoQtExaminerViewer.h>
#endif

View File

@ -51,6 +51,7 @@
#ifdef FC_OS_WIN32
#define WIN32_LEAN_AND_MEAN
#define NOMINMAX
#include <windows.h>
#include <io.h>
#include <shellapi.h>

View File

@ -2,7 +2,9 @@
#define QUARTER_QUARTERP_H
#include <Inventor/SbName.h>
#include <QtGui/QCursor>
#ifndef _MSC_VER
#include <config.h>
#endif
template <class Key, class T> class QMap;

View File

@ -121,6 +121,10 @@ using namespace SIM::Coin3D::Quarter;
#define PRIVATE(obj) obj->pimpl
#ifndef GL_MULTISAMPLE_BIT_EXT
#define GL_MULTISAMPLE_BIT_EXT 0x20000000
#endif
/*! constructor */
QuarterWidget::QuarterWidget(const QGLFormat & format, QWidget * parent, const QGLWidget * sharewidget, Qt::WindowFlags f)
: inherited(parent)
@ -1021,7 +1025,11 @@ QuarterWidget::setNavigationModeFile(const QUrl & url)
QFile file(filenametmp);
if (file.open(QIODevice::ReadOnly)){
QByteArray fileContents = file.readAll();
#if COIN_MAJOR_VERSION >= 4
stateMachine = ScXML::readBuffer(SbByteBuffer(fileContents.size(), fileContents.constData()));
#else
stateMachine = ScXML::readBuffer(fileContents.constData());
#endif
file.close();
}
}

View File

@ -51,7 +51,7 @@ public:
void trigger(void);
void stopThread(void);
signals:
Q_SIGNALS:
void triggerSignal(void);

View File

@ -18,10 +18,9 @@
*
*/
#include "SoQTQuarterAdaptor.h"
#include "PreCompiled.h"
#include "SoQTQuarterAdaptor.h"
#include <Base/Console.h>
#include <Inventor/Qt/SoQt.h>
#include <Inventor/nodes/SoPerspectiveCamera.h>
#include <Inventor/nodes/SoOrthographicCamera.h>
#include <Inventor/nodes/SoSeparator.h>

View File

@ -26,7 +26,6 @@
#include <Inventor/SbSphere.h>
#include <Inventor/SoType.h>
#include <Inventor/events/SoKeyboardEvent.h>
#include <Inventor/Qt/SoQtCursor.h>
#include <Inventor/lists/SoCallbackList.h>
#include <Inventor/sensors/SoTimerSensor.h>
#include <Inventor/actions/SoGetMatrixAction.h>

View File

@ -128,6 +128,7 @@ View3DInventor::View3DInventor(Gui::Document* pcDocument, QWidget* parent, Qt::W
break;
case View3DInventorViewer::None:
default:
f.setSamples(1);
break;
};

View File

@ -126,6 +126,74 @@
using namespace Gui;
/*** zoom-style cursor ******/
#define ZOOM_WIDTH 16
#define ZOOM_HEIGHT 16
#define ZOOM_BYTES ((ZOOM_WIDTH + 7) / 8) * ZOOM_HEIGHT
#define ZOOM_HOT_X 5
#define ZOOM_HOT_Y 7
static unsigned char zoom_bitmap[ZOOM_BYTES] =
{
0x00, 0x0f, 0x80, 0x1c, 0x40, 0x38, 0x20, 0x70,
0x90, 0xe4, 0xc0, 0xcc, 0xf0, 0xfc, 0x00, 0x0c,
0x00, 0x0c, 0xf0, 0xfc, 0xc0, 0xcc, 0x90, 0xe4,
0x20, 0x70, 0x40, 0x38, 0x80, 0x1c, 0x00, 0x0f
};
static unsigned char zoom_mask_bitmap[ZOOM_BYTES] =
{
0x00,0x0f,0x80,0x1f,0xc0,0x3f,0xe0,0x7f,0xf0,0xff,0xf0,0xff,0xf0,0xff,0x00,
0x0f,0x00,0x0f,0xf0,0xff,0xf0,0xff,0xf0,0xff,0xe0,0x7f,0xc0,0x3f,0x80,0x1f,
0x00,0x0f
};
/*** pan-style cursor *******/
#define PAN_WIDTH 16
#define PAN_HEIGHT 16
#define PAN_BYTES ((PAN_WIDTH + 7) / 8) * PAN_HEIGHT
#define PAN_HOT_X 7
#define PAN_HOT_Y 7
static unsigned char pan_bitmap[PAN_BYTES] =
{
0xc0, 0x03, 0x60, 0x02, 0x20, 0x04, 0x10, 0x08,
0x68, 0x16, 0x54, 0x2a, 0x73, 0xce, 0x01, 0x80,
0x01, 0x80, 0x73, 0xce, 0x54, 0x2a, 0x68, 0x16,
0x10, 0x08, 0x20, 0x04, 0x40, 0x02, 0xc0, 0x03
};
static unsigned char pan_mask_bitmap[PAN_BYTES] =
{
0xc0,0x03,0xe0,0x03,0xe0,0x07,0xf0,0x0f,0xe8,0x17,0xdc,0x3b,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xdc,0x3b,0xe8,0x17,0xf0,0x0f,0xe0,0x07,0xc0,0x03,
0xc0,0x03
};
/*** rotate-style cursor ****/
#define ROTATE_WIDTH 16
#define ROTATE_HEIGHT 16
#define ROTATE_BYTES ((ROTATE_WIDTH + 7) / 8) * ROTATE_HEIGHT
#define ROTATE_HOT_X 6
#define ROTATE_HOT_Y 8
static unsigned char rotate_bitmap[ROTATE_BYTES] = {
0xf0, 0xef, 0x18, 0xb8, 0x0c, 0x90, 0xe4, 0x83,
0x34, 0x86, 0x1c, 0x83, 0x00, 0x81, 0x00, 0xff,
0xff, 0x00, 0x81, 0x00, 0xc1, 0x38, 0x61, 0x2c,
0xc1, 0x27, 0x09, 0x30, 0x1d, 0x18, 0xf7, 0x0f
};
static unsigned char rotate_mask_bitmap[ROTATE_BYTES] = {
0xf0,0xef,0xf8,0xff,0xfc,0xff,0xfc,0xff,0x3c,0xfe,0x1c,0xff,0x00,0xff,0x00,
0xff,0xff,0x00,0xff,0x00,0xff,0x38,0x7f,0x3c,0xff,0x3f,0xff,0x3f,0xff,0x1f,
0xf7,0x0f
};
/*!
As ProgressBar has no chance to control the incoming Qt events of Quarter so we need to stop
the event handling to prevent the scenegraph from being selected or deselected
@ -388,6 +456,19 @@ void View3DInventorViewer::init()
viewerEventFilter = new ViewerEventFilter;
installEventFilter(viewerEventFilter);
getEventFilter()->registerInputDevice(new SpaceNavigatorDevice);
//create the cursors
QBitmap cursor = QBitmap::fromData(QSize(ROTATE_WIDTH, ROTATE_HEIGHT), rotate_bitmap);
QBitmap mask = QBitmap::fromData(QSize(ROTATE_WIDTH, ROTATE_HEIGHT), rotate_mask_bitmap);
spinCursor = QCursor(cursor, mask, ROTATE_HOT_X, ROTATE_HOT_Y);
cursor = QBitmap::fromData(QSize(ZOOM_WIDTH, ZOOM_HEIGHT), zoom_bitmap);
mask = QBitmap::fromData(QSize(ZOOM_WIDTH, ZOOM_HEIGHT), zoom_mask_bitmap);
zoomCursor = QCursor(cursor, mask, ZOOM_HOT_X, ZOOM_HOT_Y);
cursor = QBitmap::fromData(QSize(PAN_WIDTH, PAN_HEIGHT), pan_bitmap);
mask = QBitmap::fromData(QSize(PAN_WIDTH, PAN_HEIGHT), pan_mask_bitmap);
panCursor = QCursor(cursor, mask, PAN_HOT_X, PAN_HOT_Y);
}
View3DInventorViewer::~View3DInventorViewer()
@ -1393,7 +1474,7 @@ void View3DInventorViewer::selectAll()
}
bool View3DInventorViewer::processSoEvent(const SoEvent* const ev)
bool View3DInventorViewer::processSoEvent(const SoEvent* ev)
{
if(isRedirectedToSceneGraph()) {
SbBool processed = inherited::processSoEvent(ev);
@ -2365,14 +2446,12 @@ void View3DInventorViewer::setCursorRepresentation(int modearg)
case NavigationStyle::DRAGGING:
case NavigationStyle::SPINNING:
//TODO: add qcursor spinning cursor
//this->getWidget()->setCursor(getNativeCursor(SoQtCursor::getRotateCursor().getCustomCursor()));
this->getWidget()->setCursor(spinCursor);
break;
case NavigationStyle::ZOOMING:
{
//TODO:add qcursor zoom cursor
//this->getWidget()->setCursor(getNativeCursor(SoQtCursor::getZoomCursor().getCustomCursor()));
this->getWidget()->setCursor(zoomCursor);
}
break;
@ -2385,8 +2464,7 @@ void View3DInventorViewer::setCursorRepresentation(int modearg)
break;
case NavigationStyle::PANNING:
//TODO: add qcursor pan cursor
//this->getWidget()->setCursor(getNativeCursor(SoQtCursor::getPanCursor().getCustomCursor()));
this->getWidget()->setCursor(panCursor);
break;
case NavigationStyle::SELECTION:
@ -2589,7 +2667,7 @@ void View3DInventorViewer::setAntiAliasingMode(View3DInventorViewer::AntiAliasin
if(getSoRenderManager()->getGLRenderAction()->isSmoothing() != smoothing)
getSoRenderManager()->getGLRenderAction()->setSmoothing(smoothing);
if(static_cast<QGLWidget*>(this->viewport())->format().sampleBuffers() != buffers)
if(static_cast<QGLWidget*>(this->viewport())->format().samples() != buffers)
Base::Console().Message("To change multisampling settings please close and open the 3d view again");
}
@ -2599,7 +2677,7 @@ View3DInventorViewer::AntiAliasing View3DInventorViewer::getAntiAliasingMode() c
if(getSoRenderManager()->getGLRenderAction()->isSmoothing())
return Smoothing;
int buffers = static_cast<QGLWidget*>(this->viewport())->format().sampleBuffers();
int buffers = static_cast<QGLWidget*>(this->viewport())->format().samples();
switch(buffers) {
case 1:

View File

@ -354,7 +354,7 @@ protected:
virtual void actualRedraw(void);
virtual void setSeekMode(SbBool enable);
virtual void afterRealizeHook(void);
virtual bool processSoEvent(const SoEvent * const ev);
virtual bool processSoEvent(const SoEvent * ev);
SbBool processSoEventBase(const SoEvent * const ev);
void printDimension();
void selectAll();
@ -402,7 +402,7 @@ private:
SbBool editing;
QCursor editCursor;
QCursor editCursor, zoomCursor, panCursor, spinCursor;
SbBool redirected;
SbBool allowredir;

View File

@ -26,6 +26,7 @@
#include <Base/PyObjectBase.h>
#include <CXX/Extensions.hxx>
#include <list>
namespace Gui {

View File

@ -825,13 +825,13 @@ class Snapper:
if self.selectMode:
mw = FreeCADGui.getMainWindow()
for w in mw.findChild(QtGui.QMdiArea).findChildren(QtGui.QWidget):
if w.metaObject().className() == "SoQtGLArea":
if w.metaObject().className() == "SIM::Coin3D::Quarter::QuarterWidget":
w.unsetCursor()
self.cursorMode = None
elif not mode:
mw = FreeCADGui.getMainWindow()
for w in mw.findChild(QtGui.QMdiArea).findChildren(QtGui.QWidget):
if w.metaObject().className() == "SoQtGLArea":
if w.metaObject().className() == "SIM::Coin3D::Quarter::QuarterWidget":
w.unsetCursor()
self.cursorMode = None
else:
@ -849,7 +849,7 @@ class Snapper:
cur = QtGui.QCursor(newicon,8,8)
mw = FreeCADGui.getMainWindow()
for w in mw.findChild(QtGui.QMdiArea).findChildren(QtGui.QWidget):
if w.metaObject().className() == "SoQtGLArea":
if w.metaObject().className() == "SIM::Coin3D::Quarter::QuarterWidget":
w.setCursor(cur)
self.cursorMode = mode

View File

@ -27,6 +27,8 @@
# include <algorithm>
# include <QMenu>
# include <QTimer>
# include <Inventor/SbLine.h>
# include <Inventor/SbPlane.h>
# include <Inventor/SoPickedPoint.h>
# include <Inventor/details/SoFaceDetail.h>
# include <Inventor/details/SoPointDetail.h>

View File

@ -83,6 +83,7 @@
#endif
#elif defined(FC_OS_WIN32)
#define NOMINMAX
#include <windows.h>
#endif //_PreComp_

View File

@ -26,6 +26,8 @@
#ifndef _PreComp_
# include <QMenu>
# include <Inventor/SbBox2s.h>
# include <Inventor/SbLine.h>
# include <Inventor/SbPlane.h>
# include <Inventor/SoPickedPoint.h>
# include <Inventor/actions/SoToVRML2Action.h>
# include <Inventor/VRMLnodes/SoVRMLGroup.h>