From 152ed0f77cb3ca9af31216a07b385dbdddff4612 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sat, 9 Jun 2012 15:19:57 -0300 Subject: [PATCH 1/7] Start: Small fixes to the start page --- src/Mod/Start/Gui/CMakeLists.txt | 2 ++ src/Mod/Start/StartPage/CMakeLists.txt | 2 ++ src/Mod/Start/StartPage/Makefile.am | 4 +++- src/Mod/Start/StartPage/StartPage.py | 19 ++++++++++++------- src/Mod/Start/StartPage/blank.png | Bin 0 -> 302 bytes src/Mod/Start/StartPage/complete.jpg | Bin 0 -> 12532 bytes 6 files changed, 19 insertions(+), 8 deletions(-) create mode 100755 src/Mod/Start/StartPage/blank.png create mode 100644 src/Mod/Start/StartPage/complete.jpg diff --git a/src/Mod/Start/Gui/CMakeLists.txt b/src/Mod/Start/Gui/CMakeLists.txt index 54bdc5c5e..339c9ad50 100644 --- a/src/Mod/Start/Gui/CMakeLists.txt +++ b/src/Mod/Start/Gui/CMakeLists.txt @@ -54,6 +54,8 @@ SET(StartPage_Resources StartPage/PartDesignExample.png StartPage/ArchExample.png StartPage/web.png + StartPage/blank.png + StartPage/complete.jpg ) add_library(StartGui SHARED ${StartGui_SRCS}) diff --git a/src/Mod/Start/StartPage/CMakeLists.txt b/src/Mod/Start/StartPage/CMakeLists.txt index 19c59fcf3..7a798c98e 100644 --- a/src/Mod/Start/StartPage/CMakeLists.txt +++ b/src/Mod/Start/StartPage/CMakeLists.txt @@ -24,6 +24,8 @@ SET(StartPage_DATA PartDesignExample.png ArchExample.png web.png + blank.png + complete.jpg ) INSTALL(FILES ${StartPage_SRCS} diff --git a/src/Mod/Start/StartPage/Makefile.am b/src/Mod/Start/StartPage/Makefile.am index de35b6d45..57ffd74ee 100644 --- a/src/Mod/Start/StartPage/Makefile.am +++ b/src/Mod/Start/StartPage/Makefile.am @@ -28,7 +28,9 @@ data_DATA = \ Complete.png \ PartDesignExample.png \ ArchExample.png \ - web.png + web.png \ + blank.png \ + complete.jpg EXTRA_DIST = \ $(data_DATA) $(python_DATA) diff --git a/src/Mod/Start/StartPage/StartPage.py b/src/Mod/Start/StartPage/StartPage.py index c3983a86f..978cae6b7 100644 --- a/src/Mod/Start/StartPage/StartPage.py +++ b/src/Mod/Start/StartPage/StartPage.py @@ -309,10 +309,10 @@ def getWebExamples(): def getExamples(): return """ """ def getLinks(): @@ -366,7 +366,7 @@ def getWorkbenches():
  •   \

    This is the """ + text31 + """, \ - """ + text32 + """

    ')" + """ + text32 + """

    ')" onMouseout="show('')" href="DefaultWorkbench.py">""" + text31 + """
  • @@ -399,7 +399,7 @@ def getInfo(filename): html += text35 + " " + getLocalTime(s.st_mtime) + "
    " html += "" + text36 + " " + filename + "

    " # get additional info from fcstd files - if os.path.splitext(filename)[1] in [".fcstd",".FcStd"]: + if os.path.splitext(filename)[1].upper() in [".FCSTD"]: zfile=zipfile.ZipFile(filename) files=zfile.namelist() # check for meta-file if it's really a FreeCAD document @@ -429,7 +429,12 @@ def getRecentFiles(): if i < ct: mr = rf.GetString("MRU%d" % (i)) fn = os.path.basename(mr) - html += '
  • ' diff --git a/src/Mod/Start/StartPage/blank.png b/src/Mod/Start/StartPage/blank.png new file mode 100755 index 0000000000000000000000000000000000000000..4b794044844fceb5d8172c69f0cdf2b0c6fac6e0 GIT binary patch literal 302 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 hTb+dXd?WjVZdccZ^gNO;4na{w4^R4K8B Date: Sat, 9 Jun 2012 15:57:09 -0300 Subject: [PATCH 2/7] Draft: Added exttension X perpendicular snap location --- src/Mod/Draft/DraftSnap.py | 79 ++++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 33 deletions(-) diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index ee2e2aab9..c4bacf77a 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -148,26 +148,7 @@ class Snapper: return None # setup trackers if needed - v = Draft.get3DView() - if v in self.trackers[0]: - i = self.trackers[0].index(v) - self.grid = self.trackers[1][i] - self.tracker = self.trackers[2][i] - self.extLine = self.trackers[3][i] - self.radiusTracker = self.trackers[4][i] - else: - if Draft.getParam("grid"): - self.grid = DraftTrackers.gridTracker() - else: - self.grid = None - self.tracker = DraftTrackers.snapTracker() - self.extLine = DraftTrackers.lineTracker(dotted=True) - self.radiusTracker = DraftTrackers.radiusTracker() - self.trackers[0].append(v) - self.trackers[1].append(self.grid) - self.trackers[2].append(self.tracker) - self.trackers[3].append(self.extLine) - self.trackers[4].append(self.radiusTracker) + self.setTrackers() # getting current snap Radius self.radius = self.getScreenDist(Draft.getParam("snapRange"),screenpos) @@ -175,10 +156,6 @@ class Snapper: self.radiusTracker.update(self.radius) self.radiusTracker.off() - # set the grid - if self.grid and (not self.forceGridOff): - self.grid.set() - # activate snap oldActive = False if Draft.getParam("alwaysSnap"): @@ -362,6 +339,19 @@ class Snapper: self.extLine.on() self.setCursor(tsnap[1]) return tsnap[2],eline + else: + tsnap = self.snapToExtPerpendicular(last) + if tsnap: + if (tsnap[0].sub(point)).Length < self.radius: + if self.tracker: + self.tracker.setCoords(tsnap[2]) + self.tracker.setMarker(self.mk[tsnap[1]]) + self.tracker.on() + if self.extLine: + self.extLine.p2(tsnap[2]) + self.extLine.on() + self.setCursor(tsnap[1]) + return tsnap[2],eline for o in [self.lastObj[1],self.lastObj[0]]: if o: @@ -541,6 +531,14 @@ class Snapper: return None return None + def snapToExtPerpendicular(self,last): + "returns a perpendicular X extension snap location" + if self.isEnabled("extension") and self.isEnabled("perpendicular"): + if last and self.extLine: + tmpEdge = Part.Line(self.extLine.p1(),self.extLine.p2()).toShape() + np = self.getPerpendicular(tmpEdge,last) + return [np,'perpendicular',np] + def snapToElines(self,e1,e2): "returns a snap location at the infinite intersection of the given edges" snaps = [] @@ -920,16 +918,31 @@ class Snapper: mw.addToolBar(self.toolbar) self.toolbar.show() if FreeCADGui.ActiveDocument: - if not self.forceGridOff: - if not self.grid: - self.grid = DraftTrackers.gridTracker() - self.grid.set() + self.setTrackers() - def setGrid(self): - "sets the grid, if visible" - if self.grid and (not self.forceGridOff): - if self.grid.Visible: - self.grid.set() + def setTrackers(self): + v = Draft.get3DView() + if v in self.trackers[0]: + i = self.trackers[0].index(v) + self.grid = self.trackers[1][i] + self.tracker = self.trackers[2][i] + self.extLine = self.trackers[3][i] + self.radiusTracker = self.trackers[4][i] + else: + if Draft.getParam("grid"): + self.grid = DraftTrackers.gridTracker() + else: + self.grid = None + self.tracker = DraftTrackers.snapTracker() + self.extLine = DraftTrackers.lineTracker(dotted=True) + self.radiusTracker = DraftTrackers.radiusTracker() + self.trackers[0].append(v) + self.trackers[1].append(self.grid) + self.trackers[2].append(self.tracker) + self.trackers[3].append(self.extLine) + self.trackers[4].append(self.radiusTracker) + if not self.forceGridOff: + self.grid.set() if not hasattr(FreeCADGui,"Snapper"): FreeCADGui.Snapper = Snapper() From f2c63b90ab03778d038ff393cee2882a999da12f Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 10 Jun 2012 10:18:54 +0200 Subject: [PATCH 3/7] Add icons for loft and sweep --- src/Mod/Part/App/PartFeatures.cpp | 2 +- src/Mod/Part/Gui/Command.cpp | 2 + src/Mod/Part/Gui/Makefile.am | 2 + src/Mod/Part/Gui/Resources/Part.qrc | 2 + .../Part/Gui/Resources/icons/Part_Loft.svg | 280 ++++++++++++++++++ .../Part/Gui/Resources/icons/Part_Sweep.svg | 226 ++++++++++++++ src/Mod/Part/Gui/TaskLoft.cpp | 4 +- src/Mod/Part/Gui/TaskSweep.cpp | 4 +- 8 files changed, 519 insertions(+), 3 deletions(-) create mode 100644 src/Mod/Part/Gui/Resources/icons/Part_Loft.svg create mode 100644 src/Mod/Part/Gui/Resources/icons/Part_Sweep.svg diff --git a/src/Mod/Part/App/PartFeatures.cpp b/src/Mod/Part/App/PartFeatures.cpp index 1bf2ce874..431e15741 100644 --- a/src/Mod/Part/App/PartFeatures.cpp +++ b/src/Mod/Part/App/PartFeatures.cpp @@ -212,7 +212,7 @@ Sweep::Sweep() ADD_PROPERTY_TYPE(Spine,(0),"Sweep",App::Prop_None,"Path to sweep along"); ADD_PROPERTY_TYPE(Solid,(false),"Sweep",App::Prop_None,"Create solid"); ADD_PROPERTY_TYPE(Frenet,(false),"Sweep",App::Prop_None,"Frenet"); - ADD_PROPERTY_TYPE(Transition,(long(0)),"Sweep",App::Prop_None,"Transition mode"); + ADD_PROPERTY_TYPE(Transition,(long(1)),"Sweep",App::Prop_None,"Transition mode"); Transition.setEnums(TransitionEnums); } diff --git a/src/Mod/Part/Gui/Command.cpp b/src/Mod/Part/Gui/Command.cpp index 5020e4872..e713331d9 100644 --- a/src/Mod/Part/Gui/Command.cpp +++ b/src/Mod/Part/Gui/Command.cpp @@ -947,6 +947,7 @@ CmdPartLoft::CmdPartLoft() sToolTipText = QT_TR_NOOP("Advanced utility to lofts"); sWhatsThis = sToolTipText; sStatusTip = sToolTipText; + sPixmap = "Part_Loft"; } void CmdPartLoft::activated(int iMsg) @@ -972,6 +973,7 @@ CmdPartSweep::CmdPartSweep() sToolTipText = QT_TR_NOOP("Advanced utility to sweep"); sWhatsThis = sToolTipText; sStatusTip = sToolTipText; + sPixmap = "Part_Sweep"; } void CmdPartSweep::activated(int iMsg) diff --git a/src/Mod/Part/Gui/Makefile.am b/src/Mod/Part/Gui/Makefile.am index ca433d86f..15a2a094a 100644 --- a/src/Mod/Part/Gui/Makefile.am +++ b/src/Mod/Part/Gui/Makefile.am @@ -200,12 +200,14 @@ EXTRA_DIST = \ Resources/icons/Part_Fillet.svg \ Resources/icons/Part_Revolve.svg \ Resources/icons/Part_Import.svg \ + Resources/icons/Part_Loft.svg \ Resources/icons/Part_Mirror.svg \ Resources/icons/Part_MirrorPNG.png \ Resources/icons/Part_RuledSurface.svg \ Resources/icons/Part_Shapebuilder.png \ Resources/icons/Part_Shapebuilder.svg \ Resources/icons/Part_ShapeInfo.svg \ + Resources/icons/Part_Sweep.svg \ Resources/icons/Tree_Part.svg \ Resources/icons/preferences-part_design.svg \ Resources/icons/PartFeature.svg \ diff --git a/src/Mod/Part/Gui/Resources/Part.qrc b/src/Mod/Part/Gui/Resources/Part.qrc index 82c60f77a..f6fbdf0c3 100644 --- a/src/Mod/Part/Gui/Resources/Part.qrc +++ b/src/Mod/Part/Gui/Resources/Part.qrc @@ -16,6 +16,7 @@ icons/Part_Fillet.svg icons/Part_Fuse.svg icons/Part_Import.svg + icons/Part_Loft.svg icons/Part_Mirror.svg icons/Part_MirrorPNG.png icons/Part_Revolve.svg @@ -24,6 +25,7 @@ icons/Part_Shapebuilder.png icons/Part_ShapeInfo.svg icons/Part_Sphere.svg + icons/Part_Sweep.svg icons/Part_Torus.svg icons/preferences-part_design.svg icons/Tree_Part.svg diff --git a/src/Mod/Part/Gui/Resources/icons/Part_Loft.svg b/src/Mod/Part/Gui/Resources/icons/Part_Loft.svg new file mode 100644 index 000000000..72df9ab92 --- /dev/null +++ b/src/Mod/Part/Gui/Resources/icons/Part_Loft.svg @@ -0,0 +1,280 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/Mod/Part/Gui/Resources/icons/Part_Sweep.svg b/src/Mod/Part/Gui/Resources/icons/Part_Sweep.svg new file mode 100644 index 000000000..33a9f428a --- /dev/null +++ b/src/Mod/Part/Gui/Resources/icons/Part_Sweep.svg @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/Mod/Part/Gui/TaskLoft.cpp b/src/Mod/Part/Gui/TaskLoft.cpp index 96c3417a2..7192c27c4 100644 --- a/src/Mod/Part/Gui/TaskLoft.cpp +++ b/src/Mod/Part/Gui/TaskLoft.cpp @@ -32,6 +32,7 @@ #include "TaskLoft.h" #include +#include #include #include #include @@ -198,7 +199,8 @@ TaskLoft::TaskLoft() { widget = new LoftWidget(); taskbox = new Gui::TaskView::TaskBox( - QPixmap(), widget->windowTitle(), true, 0); + Gui::BitmapFactory().pixmap("Part_Loft"), + widget->windowTitle(), true, 0); taskbox->groupLayout()->addWidget(widget); Content.push_back(taskbox); } diff --git a/src/Mod/Part/Gui/TaskSweep.cpp b/src/Mod/Part/Gui/TaskSweep.cpp index effd5c28b..64e9995e4 100644 --- a/src/Mod/Part/Gui/TaskSweep.cpp +++ b/src/Mod/Part/Gui/TaskSweep.cpp @@ -32,6 +32,7 @@ #include "TaskSweep.h" #include +#include #include #include #include @@ -225,7 +226,8 @@ TaskSweep::TaskSweep() { widget = new SweepWidget(); taskbox = new Gui::TaskView::TaskBox( - QPixmap(), widget->windowTitle(), true, 0); + Gui::BitmapFactory().pixmap("Part_Sweep"), + widget->windowTitle(), true, 0); taskbox->groupLayout()->addWidget(widget); Content.push_back(taskbox); } From 0e1d4fb8cdb1ade915aa0c354e15ca25ffaecaaa Mon Sep 17 00:00:00 2001 From: jriegel Date: Sun, 10 Jun 2012 10:26:57 +0200 Subject: [PATCH 4/7] Add LibPack 8.x detection from Assembly --- CMakeLists.txt | 8 + cMake/UseLibPack8x.cmake | 331 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 339 insertions(+) create mode 100644 cMake/UseLibPack8x.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index b52555629..5ac2f98e5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -104,6 +104,7 @@ if(FREECAD_LIBPACK_USE) # checking for a unique file in LibPack location to make sure the right version of the LibPack is there find_file(FREECAD_LIBPACK_CHECKFILE6X boost_program_options-vc80-mt-gd.lib ${FREECAD_LIBPACK_DIR}/lib ) find_file(FREECAD_LIBPACK_CHECKFILE7X boost_program_options-vc90-mt-gd-1_39.lib ${FREECAD_LIBPACK_DIR}/lib ) + find_file(FREECAD_LIBPACK_CHECKFILE8X boost_program_options-vc90-mt-gd-1_48.lib ${FREECAD_LIBPACK_DIR}/lib ) find_file(FREECAD_LIBPACK_CHECKCUSTOM boost_program_options-vc90-mt-gd-1_41.lib ${FREECAD_LIBPACK_DIR}/lib ) IF(FREECAD_LIBPACK_CHECKFILE6X) include(cMake/UseLibPack6x.cmake) @@ -115,6 +116,13 @@ if(FREECAD_LIBPACK_USE) set(FREECAD_LIBPACK6 NOTFOUND CACHE STRING "Displays if the libpack has been found") MARK_AS_ADVANCED(FORCE FREECAD_LIBPACK6) set(FREECAD_LIBPACK7 FOUND CACHE STRING "Displays if the libpack has been found") + ELSEIF(FREECAD_LIBPACK_CHECKFILE8X) + include(cMake/UseLibPack8x.cmake) + set(FREECAD_LIBPACK6 NOTFOUND CACHE STRING "Displays if the libpack has been found") + set(FREECAD_LIBPACK7 NOTFOUND CACHE STRING "Displays if the libpack has been found") + set(SWIG_EXECUTABLE ${FREECAD_LIBPACK_DIR}/tools/swigwin-1.3.40/swig.exe) + MARK_AS_ADVANCED(FORCE FREECAD_LIBPACK6) + set(FREECAD_LIBPACK8 FOUND CACHE STRING "Displays if the libpack has been found") ELSEIF(FREECAD_LIBPACK_CHECKCUSTOM) include(cMake/UseLibPackCustom.cmake) set(FREECAD_LIBPACKX FOUND CACHE STRING "Displays if the libpack has been found") diff --git a/cMake/UseLibPack8x.cmake b/cMake/UseLibPack8x.cmake new file mode 100644 index 000000000..d75740064 --- /dev/null +++ b/cMake/UseLibPack8x.cmake @@ -0,0 +1,331 @@ +# ================================================================================ +# == Win32 is default behaviour use the LibPack copied in Source tree ============ + +# -------------------------------------------------------------------------------- +# General includes + +link_directories(${FREECAD_LIBPACK_DIR}/lib) +include_directories(${FREECAD_LIBPACK_DIR}/include) + +# OpenGL +set(OPENGL_gl_LIBRARY opengl32 glu32) + +# Python +set(PYTHON_DEBUG_LIBRARY python26_d.lib) +set(PYTHON_LIBRARY python26.lib) +set(PYTHON_INCLUDE_PATH ${FREECAD_LIBPACK_DIR}/include/python) +set(PYTHON_EXECUTABLE ${FREECAD_LIBPACK_DIR}/bin/python.exe) +set(PYTHONLIBS_FOUND TRUE) + +# XercesC +set(XERCESC_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/xercesc) +set(XERCESC_LIBRARIES xerces-c_2.lib) +set(XERCESC_DEBUG_LIBRARIES xerces-c_2D.lib) +set(XERCESC_FOUND TRUE) + +# Boost +set(Boost_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/boost) +set(Boost_LIBRARIES + optimized boost_filesystem-vc90-mt-1_48.lib + optimized boost_system-vc90-mt-1_48.lib + optimized boost_graph-vc90-mt-1_48.lib + optimized boost_program_options-vc90-mt-1_48.lib + optimized boost_regex-vc90-mt-1_48.lib + optimized boost_signals-vc90-mt-1_48.lib + optimized boost_thread-vc90-mt-1_48.lib +) +set(Boost_DEBUG_LIBRARIES + debug boost_filesystem-vc90-mt-gd-1_48.lib + debug boost_date_time-vc90-mt-gd-1_48.lib + debug boost_filesystem-vc90-mt-gd-1_48.lib + debug boost_iostreams-vc90-mt-gd-1_48.lib + debug boost_math_c99f-vc90-mt-gd-1_48.lib + debug boost_math_tr1f-vc90-mt-gd-1_48.lib + debug boost_thread-vc90-mt-gd-1_48.lib + debug boost_system-vc90-mt-gd-1_48.lib + debug boost_graph-vc90-mt-gd-1_48.lib + debug boost_program_options-vc90-mt-gd-1_48.lib + debug boost_regex-vc90-mt-gd-1_48.lib + debug boost_signals-vc90-mt-gd-1_48.lib +) +set(Boost_FOUND TRUE) + +# Zlib +set(ZLIB_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/zlib) +set(ZLIB_LIBRARIES zdll.lib) +set(ZLIB_FOUND TRUE) + +# SMESH +set(SMESH_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/smesh) +set(SMESH_LIBRARIES + StdMeshers.lib + MEFISTO2.lib + SMESH.lib + DriverUNV.lib + SMESHDS.lib + DriverSTL.lib + DriverDAT.lib + Driver.lib + SMDS.lib + ) + +set(SMESH_FOUND TRUE) + +# Coin3D +set(COIN3D_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/coin) +set(COIN3D_LIBRARY_DEBUG coin3d.lib) +set(COIN3D_LIBRARY_RELEASE coin3.lib) +set(COIN3D_FOUND TRUE) + + +# QT +set(QT_INCLUDE_DIR + ${FREECAD_LIBPACK_DIR}/include/QT/ + ${FREECAD_LIBPACK_DIR}/include/QT/Qt + ${FREECAD_LIBPACK_DIR}/include/QT/QtCore + ${FREECAD_LIBPACK_DIR}/include/QT/QtGui + ${FREECAD_LIBPACK_DIR}/include/QT/QtDesigner + ${FREECAD_LIBPACK_DIR}/include/QT/QtSvg + ${FREECAD_LIBPACK_DIR}/include/QT/QtNetwork + ${FREECAD_LIBPACK_DIR}/include/QT/QtSql + ${FREECAD_LIBPACK_DIR}/include/QT/QtTest + ${FREECAD_LIBPACK_DIR}/include/QT/QtUiTools + ${FREECAD_LIBPACK_DIR}/include/QT/QtXml + ${FREECAD_LIBPACK_DIR}/include/QT/QtOpenGl + ${FREECAD_LIBPACK_DIR}/include/QT/QtWebKit + ) + +set(QT_QTCORE_INCLUDE_DIR + ${FREECAD_LIBPACK_DIR}/include/QT/ + ${FREECAD_LIBPACK_DIR}/include/QT/QtCore + ) + +set(QT_LIBRARIES + optimized QtCore4.lib + optimized QtGui4.lib + optimized QtDesigner4.lib + optimized QtSvg4.lib + optimized QtNetwork4.lib + optimized QtSql4.lib + optimized QtTest4.lib + optimized QtXml4.lib + optimized QtOpenGl4.lib + optimized QtWebKit4.lib +) +set(QT_DEBUG_LIBRARIES + debug QtCored4.lib + debug QtGuid4.lib + debug QtDesignerd4.lib + debug QtSvgd4.lib + debug QtNetworkd4.lib + debug QtSqld4.lib + debug QtTestd4.lib + debug QtXmld4.lib + debug QtOpenGld4.lib + debug QtWebKitd4.lib +) + +set(QT_QTCORE_LIBRARY_DEBUG + debug QtCored4.lib + ) + +set(QT_QTCORE_LIBRARY + optimized QtCore4.lib +) + +set(QT_UIC_EXECUTABLE ${FREECAD_LIBPACK_DIR}/bin/uic.exe) +set(QT_MOC_EXECUTABLE ${FREECAD_LIBPACK_DIR}/bin/moc.exe) +set(QT_RCC_EXECUTABLE ${FREECAD_LIBPACK_DIR}/bin/rcc.exe) +set(QT_HELPCOMPILER_EXECUTABLE ${FREECAD_LIBPACK_DIR}/bin/qhelpgenerator.exe) +set(QT_COLLECTIOMGENERATOR_EXECUTABLE ${FREECAD_LIBPACK_DIR}/bin/qcollectiongenerator.exe) + + + +MACRO (QT4_EXTRACT_OPTIONS _qt4_files _qt4_options) + SET(${_qt4_files}) + SET(${_qt4_options}) + #SET(_QT4_DOING_OPTIONS FALSE) + FOREACH(_currentArg ${ARGN}) + # IF ("${_currentArg}" STREQUAL "OPTIONS") + # SET(_QT4_DOING_OPTIONS TRUE) + # ELSE ("${_currentArg}" STREQUAL "OPTIONS") + # IF(_QT4_DOING_OPTIONS) + # LIST(APPEND ${_qt4_options} "${_currentArg}") + # ELSE(_QT4_DOING_OPTIONS) + LIST(APPEND ${_qt4_files} "${_currentArg}") + # ENDIF(_QT4_DOING_OPTIONS) + # ENDIF ("${_currentArg}" STREQUAL "OPTIONS") + ENDFOREACH(_currentArg) +ENDMACRO (QT4_EXTRACT_OPTIONS) + +# macro used to create the names of output files preserving relative dirs +MACRO (QT4_MAKE_OUTPUT_FILE infile prefix ext outfile ) + STRING(LENGTH ${CMAKE_CURRENT_BINARY_DIR} _binlength) + STRING(LENGTH ${infile} _infileLength) + SET(_checkinfile ${CMAKE_CURRENT_SOURCE_DIR}) + IF(_infileLength GREATER _binlength) + STRING(SUBSTRING "${infile}" 0 ${_binlength} _checkinfile) + IF(_checkinfile STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") + FILE(RELATIVE_PATH rel ${CMAKE_CURRENT_BINARY_DIR} ${infile}) + ELSE(_checkinfile STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") + FILE(RELATIVE_PATH rel ${CMAKE_CURRENT_SOURCE_DIR} ${infile}) + ENDIF(_checkinfile STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") + ELSE(_infileLength GREATER _binlength) + FILE(RELATIVE_PATH rel ${CMAKE_CURRENT_SOURCE_DIR} ${infile}) + ENDIF(_infileLength GREATER _binlength) + SET(_outfile "${CMAKE_CURRENT_BINARY_DIR}/${rel}") + STRING(REPLACE ".." "__" _outfile ${_outfile}) + GET_FILENAME_COMPONENT(outpath ${_outfile} PATH) + GET_FILENAME_COMPONENT(_outfile ${_outfile} NAME_WE) + FILE(MAKE_DIRECTORY ${outpath}) + SET(${outfile} ${outpath}/${prefix}${_outfile}.${ext}) +ENDMACRO (QT4_MAKE_OUTPUT_FILE ) + +MACRO (QT4_WRAP_CPP outfiles ) + QT4_EXTRACT_OPTIONS(moc_files moc_options ${ARGN}) + SET(ARGN) + foreach(it ${moc_files}) + get_filename_component(it ${it} ABSOLUTE) + QT4_MAKE_OUTPUT_FILE(${it} moc_ cpp outfile) + ADD_CUSTOM_COMMAND(OUTPUT ${outfile} + COMMAND ${QT_MOC_EXECUTABLE} + ARGS ${moc_options} ${it} -o ${outfile} + MAIN_DEPENDENCY ${it} + ) + SET(${outfiles} ${${outfiles}} ${outfile}) + endforeach(it) +ENDMACRO (QT4_WRAP_CPP) + + +# This is a special version of the built in macro qt4_wrap_cpp +# It is required since moc'ed files are now included instead of being added to projects directly +# It adds a reverse dependency to solve this +# This has the unfortunate side effect that some files are always rebuilt +# There is probably a cleaner solution than this + +include(AddFileDependencies) + +macro(fc_wrap_cpp outfiles ) + QT4_EXTRACT_OPTIONS(moc_files moc_options ${ARGN}) + SET(ARGN) + foreach(it ${moc_files}) + get_filename_component(it ${it} ABSOLUTE) + QT4_MAKE_OUTPUT_FILE(${it} moc_ cpp outfile) + ADD_CUSTOM_COMMAND(OUTPUT ${outfile} + COMMAND ${QT_MOC_EXECUTABLE} + ARGS ${moc_options} ${it} -o ${outfile} + MAIN_DEPENDENCY ${it} + ) + SET(${outfiles} ${${outfiles}} ${outfile}) + add_file_dependencies(${it} ${outfile}) + endforeach(it) +endmacro(fc_wrap_cpp) + + +MACRO (QT4_ADD_RESOURCES outfiles ) + QT4_EXTRACT_OPTIONS(rcc_files rcc_options ${ARGN}) + SET(ARGN) + FOREACH (it ${rcc_files}) + GET_FILENAME_COMPONENT(outfilename ${it} NAME_WE) + GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE) + GET_FILENAME_COMPONENT(rc_path ${infile} PATH) + SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${outfilename}.cxx) + # parse file for dependencies + # all files are absolute paths or relative to the location of the qrc file + FILE(READ "${infile}" _RC_FILE_CONTENTS) + STRING(REGEX MATCHALL "]*>" "" _RC_FILE "${_RC_FILE}") + STRING(REGEX MATCH "^/|([A-Za-z]:/)" _ABS_PATH_INDICATOR "${_RC_FILE}") + IF(NOT _ABS_PATH_INDICATOR) + SET(_RC_FILE "${rc_path}/${_RC_FILE}") + ENDIF(NOT _ABS_PATH_INDICATOR) + SET(_RC_DEPENDS ${_RC_DEPENDS} "${_RC_FILE}") + ENDFOREACH(_RC_FILE) + ADD_CUSTOM_COMMAND(OUTPUT ${outfile} + COMMAND ${QT_RCC_EXECUTABLE} + ARGS ${rcc_options} -name ${outfilename} -o ${outfile} ${infile} + MAIN_DEPENDENCY ${infile} + DEPENDS ${_RC_DEPENDS}) + SET(${outfiles} ${${outfiles}} ${outfile}) + ENDFOREACH (it) +ENDMACRO (QT4_ADD_RESOURCES) + +MACRO (QT4_WRAP_UI outfiles ) +QT4_EXTRACT_OPTIONS(ui_files ui_options ${ARGN}) + +FOREACH (it ${ui_files}) + GET_FILENAME_COMPONENT(outfile ${it} NAME_WE) + GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE) + SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h) + ADD_CUSTOM_COMMAND(OUTPUT ${outfile} + COMMAND ${QT_UIC_EXECUTABLE} + ARGS -o ${outfile} ${infile} + MAIN_DEPENDENCY ${infile}) + SET(${outfiles} ${${outfiles}} ${outfile}) + ENDFOREACH (it) +ENDMACRO (QT4_WRAP_UI) + + +set(QT4_FOUND TRUE) + +# SoQt +set(SOQT_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/soqt) +set(SOQT_LIBRARY_RELEASE soqt1.lib) +set(SOQT_LIBRARY_DEBUG soqt1d.lib) +set(SOQT_FOUND TRUE) + +# OpenCV +set(OPENCV_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/opencv) +set(OPENCV_LIBRARIES cv.lib cvaux.lib cxcore.lib cxts.lib highgui.lib) +set(OPENCV_FOUND TRUE) + +# OCC +set(OCC_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/OpenCascade) +set(OCC_LIBRARIES + TKFillet + TKMesh + TKernel + TKG2d + TKG3d + TKMath + TKIGES + TKSTL + TKShHealing + TKXSBase + TKBool + TKXSBase + TKXCAF + TKLCAF + TKCAF + TKSTEP + TKIGES + TKXDESTEP + TKXDEIGES + TKBO + TKBRep + TKTopAlgo + TKGeomAlgo + TKGeomBase + TKOffset + TKPrim + TKSTEP + TKSTEPBase + TKSTEPAttr + TKHLR +) +set(OCC_LIBRARY_DIR + ${FREECAD_LIBPACK_DIR}/lib +) +set(OCC_FOUND TRUE) + +SET(EIGEN2_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/eigen2) +set(EIGEN2_FOUND TRUE) + +SET(EIGEN3_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/eigen3) +set(EIGEN3_FOUND TRUE) + + + + From 180691db4f68f1bf3e2f8d33250793164c4d2dbd Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 11 Jun 2012 11:12:30 +0200 Subject: [PATCH 5/7] 0000226: Minor Bug with Box and Sphere not drawn correctly, update Sweep icon --- src/Gui/CommandDoc.cpp | 5 ++ src/Mod/Part/Gui/Command.cpp | 6 ++- .../Part/Gui/Resources/icons/Part_Sweep.svg | 48 +++++++++++-------- 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index b9d0ea68b..a445f68c1 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -192,6 +192,11 @@ void StdCmdImport::activated(int iMsg) getActiveGuiDocument()->getDocument()->getName(), it.value().toAscii()); } + + std::list views = getActiveGuiDocument()->getMDIViewsOfType(Gui::View3DInventor::getClassTypeId()); + for (std::list::iterator it = views.begin(); it != views.end(); ++it) { + (*it)->viewAll(); + } } bool StdCmdImport::isActive(void) diff --git a/src/Mod/Part/Gui/Command.cpp b/src/Mod/Part/Gui/Command.cpp index e713331d9..444f5b1e0 100644 --- a/src/Mod/Part/Gui/Command.cpp +++ b/src/Mod/Part/Gui/Command.cpp @@ -442,7 +442,6 @@ CmdPartImport::CmdPartImport() sPixmap = "Part_Import"; } - void CmdPartImport::activated(int iMsg) { QStringList filter; @@ -471,6 +470,11 @@ void CmdPartImport::activated(int iMsg) doCommand(Doc, "Part.insert(\"%s\",\"%s\")", (const char*)fn.toUtf8(), pDoc->getName()); } commitCommand(); + + std::list views = getActiveGuiDocument()->getMDIViewsOfType(Gui::View3DInventor::getClassTypeId()); + for (std::list::iterator it = views.begin(); it != views.end(); ++it) { + (*it)->viewAll(); + } } } diff --git a/src/Mod/Part/Gui/Resources/icons/Part_Sweep.svg b/src/Mod/Part/Gui/Resources/icons/Part_Sweep.svg index 33a9f428a..c5b8ca3c2 100644 --- a/src/Mod/Part/Gui/Resources/icons/Part_Sweep.svg +++ b/src/Mod/Part/Gui/Resources/icons/Part_Sweep.svg @@ -16,7 +16,7 @@ id="svg3364" sodipodi:version="0.32" inkscape:version="0.48.3.1 r9886" - sodipodi:docname="Part_Sweep2.svg" + sodipodi:docname="Part_Sweep_red_thickened_path.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" version="1.1"> @@ -184,7 +184,7 @@ image/svg+xml - + @@ -193,34 +193,40 @@ inkscape:label="Layer 1" inkscape:groupmode="layer"> + + - - + From 6c16628f4e0ed88ca12c05877c43602d71219134 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 11 Jun 2012 11:46:05 +0200 Subject: [PATCH 6/7] Write current date and version number to MIBA --- src/Gui/SoFCOffscreenRenderer.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Gui/SoFCOffscreenRenderer.cpp b/src/Gui/SoFCOffscreenRenderer.cpp index 6ca265ab9..8af4a831b 100644 --- a/src/Gui/SoFCOffscreenRenderer.cpp +++ b/src/Gui/SoFCOffscreenRenderer.cpp @@ -252,6 +252,12 @@ QStringList SoFCOffscreenRenderer::getWriteImageFiletypeInfo() std::string SoFCOffscreenRenderer::createMIBA() const { std::stringstream com; + const std::map& cfg = App::Application::Config(); + std::map::const_iterator it; + it = cfg.find("BuildVersionMajor"); + std::string major = (it != cfg.end() ? it->second : ""); + it = cfg.find("BuildVersionMinor"); + std::string minor = (it != cfg.end() ? it->second : ""); com << setw(7) << setfill(' ') << fixed; com << " \n" ; @@ -266,8 +272,8 @@ std::string SoFCOffscreenRenderer::createMIBA() const com << " \n" ; com << " \n" ; com << " Unknown\n" ; - com << " 2006-07-05T01:11:00\n" ; - com << " FreeCAD 0.5\n" ; + com << " " << QDateTime::currentDateTime().toString().toAscii().constData() << "\n" ; + com << " " << App::GetApplication().getExecutableName() << " " << major << "." << minor << "\n" ; com << " Unknown\n"; com << " 1.0\n"; com << " \n" ; From 5d7061a5b044747ff940e98ea58f64c6477f0bf7 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 11 Jun 2012 13:22:11 +0200 Subject: [PATCH 7/7] Workaround for weird sweeping problem, allow to select several edges as path --- src/Mod/Part/App/PartFeatures.cpp | 19 +++++++++++++------ src/Mod/Part/Gui/TaskSweep.cpp | 28 ++++++++++++++-------------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/Mod/Part/App/PartFeatures.cpp b/src/Mod/Part/App/PartFeatures.cpp index 431e15741..45aec90d8 100644 --- a/src/Mod/Part/App/PartFeatures.cpp +++ b/src/Mod/Part/App/PartFeatures.cpp @@ -244,16 +244,19 @@ App::DocumentObjectExecReturn *Sweep::execute(void) if (!(spine && spine->getTypeId().isDerivedFrom(Part::Feature::getClassTypeId()))) return new App::DocumentObjectExecReturn("No spine linked."); const std::vector& subedge = Spine.getSubValues(); - if (subedge.size() != 1) - return new App::DocumentObjectExecReturn("Not exactly one sub-shape linked."); TopoDS_Shape path; const Part::TopoShape& shape = static_cast(spine)->Shape.getValue(); if (!shape._Shape.IsNull()) { - if (!subedge[0].empty()) { - path = shape.getSubShape(subedge[0].c_str()); + try { + BRepBuilderAPI_MakeWire mkWire; + for (std::vector::const_iterator it = subedge.begin(); it != subedge.end(); ++it) { + TopoDS_Shape subshape = shape.getSubShape(it->c_str()); + mkWire.Add(TopoDS::Edge(subshape)); + } + path = mkWire.Wire(); } - else { + catch (Standard_Failure) { if (shape._Shape.ShapeType() == TopAbs_EDGE) path = shape._Shape; else if (shape._Shape.ShapeType() == TopAbs_WIRE) @@ -273,8 +276,12 @@ App::DocumentObjectExecReturn *Sweep::execute(void) const TopoDS_Shape& shape = static_cast(*it)->Shape.getValue(); if (shape.IsNull()) return new App::DocumentObjectExecReturn("Linked shape is invalid."); + // There is a weird behaviour of BRepOffsetAPI_MakePipeShell when trying to add the wire as is. + // If we re-create the wire then everything works fine. + // https://sourceforge.net/apps/phpbb/free-cad/viewtopic.php?f=10&t=2673&sid=fbcd2ff4589f0b2f79ed899b0b990648#p20268 if (shape.ShapeType() == TopAbs_WIRE) { - profiles.Append(shape); + BRepBuilderAPI_MakeWire mkWire(TopoDS::Wire(shape)); + profiles.Append(mkWire.Wire()); } else if (shape.ShapeType() == TopAbs_EDGE) { BRepBuilderAPI_MakeWire mkWire(TopoDS::Edge(shape)); diff --git a/src/Mod/Part/Gui/TaskSweep.cpp b/src/Mod/Part/Gui/TaskSweep.cpp index 64e9995e4..63839c514 100644 --- a/src/Mod/Part/Gui/TaskSweep.cpp +++ b/src/Mod/Part/Gui/TaskSweep.cpp @@ -118,7 +118,7 @@ void SweepWidget::findShapes() bool SweepWidget::accept() { - Gui::SelectionFilter edgeFilter ("SELECT Part::Feature SUBELEMENT Edge COUNT 1"); + Gui::SelectionFilter edgeFilter ("SELECT Part::Feature SUBELEMENT Edge COUNT 1.."); Gui::SelectionFilter partFilter ("SELECT Part::Feature COUNT 1"); bool matchEdge = edgeFilter.match(); bool matchPart = partFilter.match(); @@ -128,16 +128,14 @@ bool SweepWidget::accept() } // get the selected object - std::string objectName, subShape; + std::string selection; if (matchEdge) { const std::vector& result = edgeFilter.Result[0]; - const std::vector& edges = result[0].getSubNames(); - objectName = result.front().getFeatName(); - subShape = edges.front(); + selection = result.front().getAsPropertyLinkSubString(); } else { const std::vector& result = partFilter.Result[0]; - objectName = result.front().getFeatName(); + selection = result.front().getAsPropertyLinkSubString(); } QString list, solid, frenet; @@ -167,15 +165,17 @@ bool SweepWidget::accept() try { QString cmd; cmd = QString::fromAscii( - "App.getDocument('%6').addObject('Part::Sweep','Sweep')\n" - "App.getDocument('%6').ActiveObject.Sections=[%1]\n" - "App.getDocument('%6').ActiveObject.Spine=(FreeCAD.ActiveDocument.%2,['%3'])\n" - "App.getDocument('%6').ActiveObject.Solid=%4\n" - "App.getDocument('%6').ActiveObject.Frenet=%5\n" + "App.getDocument('%5').addObject('Part::Sweep','Sweep')\n" + "App.getDocument('%5').ActiveObject.Sections=[%1]\n" + "App.getDocument('%5').ActiveObject.Spine=%2\n" + "App.getDocument('%5').ActiveObject.Solid=%3\n" + "App.getDocument('%5').ActiveObject.Frenet=%4\n" ) - .arg(list).arg(QLatin1String(objectName.c_str())) - .arg(QLatin1String(subShape.c_str())) - .arg(solid).arg(frenet).arg(QString::fromAscii(d->document.c_str())); + .arg(list) + .arg(QLatin1String(selection.c_str())) + .arg(solid) + .arg(frenet) + .arg(QString::fromAscii(d->document.c_str())); Gui::Document* doc = Gui::Application::Instance->getDocument(d->document.c_str()); if (!doc) throw Base::Exception("Document doesn't exist anymore");