ViewFromPlacement: fixes
* fix Lattice2 not loading on FC v0.17 * fix look-around when "Rotate At Cursor" is on in preferences.
This commit is contained in:
parent
9afda3fe66
commit
1ce974c5df
|
@ -26,12 +26,77 @@ __author__ = "DeepSOIC"
|
||||||
__url__ = ""
|
__url__ = ""
|
||||||
|
|
||||||
import FreeCAD as App
|
import FreeCAD as App
|
||||||
|
if App.GuiUp:
|
||||||
|
import FreeCADGui as Gui
|
||||||
|
|
||||||
from lattice2Common import *
|
from lattice2Common import *
|
||||||
import lattice2BaseFeature as LBF
|
import lattice2BaseFeature as LBF
|
||||||
import lattice2CompoundExplorer as LCE
|
import lattice2CompoundExplorer as LCE
|
||||||
|
|
||||||
import Show
|
try:
|
||||||
|
import Show
|
||||||
|
except ImportError:
|
||||||
|
Show = None
|
||||||
|
try:
|
||||||
|
from Show.SceneDetail import SceneDetail
|
||||||
|
except ImportError:
|
||||||
|
SceneDetail = None
|
||||||
|
|
||||||
|
from copy import copy
|
||||||
|
|
||||||
|
class SDParameter(SceneDetail if SceneDetail is not None else object):
|
||||||
|
"""SDParameter(param_path, param_name, param_type, param_val = None): Plugin for TempoVis for changing a parameter."""
|
||||||
|
class_id = 'SDParameter'
|
||||||
|
mild_restore = True
|
||||||
|
param_path = ''
|
||||||
|
param_name = ''
|
||||||
|
param_type = ''
|
||||||
|
|
||||||
|
def __init__(self, param_path, param_name, param_type, param_val = None):
|
||||||
|
self.key = '{param_path}/[{param_type}]{param_name}'.format(**vars())
|
||||||
|
self.param_path = param_path
|
||||||
|
self.param_name = param_name
|
||||||
|
self.param_type = param_type
|
||||||
|
if param_val is not None:
|
||||||
|
self.data = param_val
|
||||||
|
|
||||||
|
def scene_value(self):
|
||||||
|
import FreeCAD as App
|
||||||
|
hgrp = App.ParamGet(self.param_path)
|
||||||
|
getter, def1, def2 = {
|
||||||
|
'Bool' : (hgrp.GetBool , True, False),
|
||||||
|
'Float' : (hgrp.GetFloat , 1.0, 2.0 ),
|
||||||
|
'Int' : (hgrp.GetInt , 1, 2 ),
|
||||||
|
'String' : (hgrp.GetString , 'a', 'b' ),
|
||||||
|
'Unsigned': (hgrp.GetUnsigned, 1, 2 ),
|
||||||
|
}[self.param_type]
|
||||||
|
val1 = getter(self.param_name, def1)
|
||||||
|
val2 = getter(self.param_name, def2)
|
||||||
|
absent = val1 == def1 and val2 == def2
|
||||||
|
return val1 if not absent else None
|
||||||
|
|
||||||
|
def apply_data(self, val):
|
||||||
|
import FreeCAD as App
|
||||||
|
hgrp = App.ParamGet(self.param_path)
|
||||||
|
setter = {
|
||||||
|
'Bool' : (hgrp.SetBool ),
|
||||||
|
'Float' : (hgrp.SetFloat ),
|
||||||
|
'Int' : (hgrp.SetInt ),
|
||||||
|
'String' : (hgrp.SetString ),
|
||||||
|
'Unsigned': (hgrp.SetUnsigned),
|
||||||
|
}[self.param_type]
|
||||||
|
deleter = {
|
||||||
|
'Bool' : (hgrp.RemBool ),
|
||||||
|
'Float' : (hgrp.RemFloat ),
|
||||||
|
'Int' : (hgrp.RemInt ),
|
||||||
|
'String' : (hgrp.RemString ),
|
||||||
|
'Unsigned': (hgrp.RemUnsigned),
|
||||||
|
}[self.param_type]
|
||||||
|
if val is None:
|
||||||
|
deleter(self.param_name)
|
||||||
|
else:
|
||||||
|
setter(self.param_name, val)
|
||||||
|
|
||||||
|
|
||||||
def getSelectedPlacement(obj, sub):
|
def getSelectedPlacement(obj, sub):
|
||||||
leaves = LCE.AllLeaves(obj.Shape)
|
leaves = LCE.AllLeaves(obj.Shape)
|
||||||
|
@ -54,6 +119,8 @@ def getSelectedPlacement(obj, sub):
|
||||||
# --------------------------------Gui commands----------------------------------
|
# --------------------------------Gui commands----------------------------------
|
||||||
|
|
||||||
_library = {} #instances of TempoVis, per document
|
_library = {} #instances of TempoVis, per document
|
||||||
|
_old_par = None #original value of DragAtCursor parameter
|
||||||
|
_stack_len = 0 #how many times did we tried to modify the parameter
|
||||||
|
|
||||||
class CommandViewFromPlacement:
|
class CommandViewFromPlacement:
|
||||||
def GetResources(self):
|
def GetResources(self):
|
||||||
|
@ -66,6 +133,9 @@ class CommandViewFromPlacement:
|
||||||
def Activated(self):
|
def Activated(self):
|
||||||
import FreeCADGui as Gui
|
import FreeCADGui as Gui
|
||||||
|
|
||||||
|
global _stack_len
|
||||||
|
global _old_par
|
||||||
|
|
||||||
oldTV = _library.pop(App.ActiveDocument.Name, None)
|
oldTV = _library.pop(App.ActiveDocument.Name, None)
|
||||||
if oldTV is None:
|
if oldTV is None:
|
||||||
V = App.Vector
|
V = App.Vector
|
||||||
|
@ -83,6 +153,14 @@ class CommandViewFromPlacement:
|
||||||
#prepare
|
#prepare
|
||||||
tv = Show.TempoVis(App.ActiveDocument)
|
tv = Show.TempoVis(App.ActiveDocument)
|
||||||
tv.saveCamera()
|
tv.saveCamera()
|
||||||
|
if SceneDetail is not None:
|
||||||
|
tv.modify(SDParameter('User parameter:BaseApp/Preferences/View','DragAtCursor','Bool', False))
|
||||||
|
else:
|
||||||
|
dt = SDParameter('User parameter:BaseApp/Preferences/View','DragAtCursor','Bool', False)
|
||||||
|
if _stack_len == 0:
|
||||||
|
_old_par = dt.scene_value()
|
||||||
|
_stack_len += 1
|
||||||
|
dt.apply_data(dt.data)
|
||||||
|
|
||||||
#set up camera
|
#set up camera
|
||||||
Gui.ActiveDocument.ActiveView.setCameraType('Perspective')
|
Gui.ActiveDocument.ActiveView.setCameraType('Perspective')
|
||||||
|
@ -107,12 +185,17 @@ class CommandViewFromPlacement:
|
||||||
if Gui.ActiveDocument.ActiveView.getCameraType() == 'Perspective':
|
if Gui.ActiveDocument.ActiveView.getCameraType() == 'Perspective':
|
||||||
cam = Gui.ActiveDocument.ActiveView.getCameraNode()
|
cam = Gui.ActiveDocument.ActiveView.getCameraNode()
|
||||||
cam.heightAngle = abs(cam.heightAngle.getValue()) #workaround
|
cam.heightAngle = abs(cam.heightAngle.getValue()) #workaround
|
||||||
|
if SceneDetail is None:
|
||||||
|
_stack_len -= 1
|
||||||
|
if _stack_len == 0:
|
||||||
|
dt = SDParameter('User parameter:BaseApp/Preferences/View','DragAtCursor','Bool', False)
|
||||||
|
dt.apply_data(_old_par)
|
||||||
|
|
||||||
def IsActive(self):
|
def IsActive(self):
|
||||||
if not App.ActiveDocument: return False
|
if Show is None: return False
|
||||||
return True
|
return hasattr(Gui.activeView(), 'getCameraNode')
|
||||||
|
|
||||||
if FreeCAD.GuiUp:
|
if App.GuiUp:
|
||||||
FreeCADGui.addCommand('Lattice2_ViewFromPlacement', CommandViewFromPlacement())
|
FreeCADGui.addCommand('Lattice2_ViewFromPlacement', CommandViewFromPlacement())
|
||||||
|
|
||||||
exportedCommands = [
|
exportedCommands = [
|
||||||
|
|
Loading…
Reference in New Issue
Block a user