Removed tank unused instance
This commit is contained in:
parent
6094db62f2
commit
8fff477f16
|
@ -2,7 +2,6 @@ SET(ShipMain_SRCS
|
|||
InitGui.py
|
||||
ShipGui.py
|
||||
Instance.py
|
||||
TankInstance.py
|
||||
Ship_rc.py
|
||||
)
|
||||
SOURCE_GROUP("" FILES ${ShipMain_SRCS})
|
||||
|
|
|
@ -5,7 +5,6 @@ data_DATA = \
|
|||
InitGui.py \
|
||||
ShipGui.py \
|
||||
Instance.py \
|
||||
TankInstance.py \
|
||||
Ship_rc.py
|
||||
|
||||
nobase_data_DATA = \
|
||||
|
|
|
@ -1,775 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
import time
|
||||
|
||||
# Qt library
|
||||
from PyQt4 import QtGui,QtCore
|
||||
|
||||
# COIN
|
||||
from pivy.coin import *
|
||||
from pivy import coin
|
||||
|
||||
# FreeCAD
|
||||
import FreeCAD,FreeCADGui
|
||||
from FreeCAD import Base, Vector
|
||||
import Part
|
||||
|
||||
# Ship design module
|
||||
from shipUtils import Paths, Math
|
||||
|
||||
class ShipTank:
|
||||
def __init__(self, obj, solid, level=0, density=998.0):
|
||||
""" Creates a new tank on active document.
|
||||
@param obj Created Part::FeaturePython object.
|
||||
@param solid Solid shape that represent the tank.
|
||||
@param level Tank filling level.
|
||||
@param density Fluid density.
|
||||
"""
|
||||
# Add uniqueness property to identify Tank instances
|
||||
tooltip = str(QtGui.QApplication.translate("Ship","True if is a valid ship tank instance",
|
||||
None,QtGui.QApplication.UnicodeUTF8))
|
||||
obj.addProperty("App::PropertyBool","IsShipTank","ShipTank", tooltip).IsShipTank=True
|
||||
# Add general options
|
||||
tooltip = str(QtGui.QApplication.translate("Ship","Fluid filling level percentage",
|
||||
None,QtGui.QApplication.UnicodeUTF8))
|
||||
obj.addProperty("App::PropertyFloat","Level","ShipTank", tooltip).Level=level
|
||||
tooltip = str(QtGui.QApplication.translate("Ship","Inside fluid density",
|
||||
None,QtGui.QApplication.UnicodeUTF8))
|
||||
obj.addProperty("App::PropertyFloat","Density","ShipTank", tooltip).Density=density
|
||||
# Add shapes
|
||||
shape = self.computeShape(solid)
|
||||
if not shape:
|
||||
obj.IsShipTank=False
|
||||
return
|
||||
obj.Shape = shape
|
||||
obj.Proxy = self
|
||||
|
||||
def onChanged(self, fp, prop):
|
||||
""" Property changed, tank must be recomputed """
|
||||
if prop == "IsShipTank":
|
||||
FreeCAD.Console.PrintWarning("Ussually you don't want to modify manually this option.\n")
|
||||
elif prop == "Level":
|
||||
if fp.Level > 100.0:
|
||||
fp.Level = 100.0
|
||||
elif fp.Level < 0.0:
|
||||
fp.Level = 0.0
|
||||
|
||||
def execute(self, obj):
|
||||
""" Shape recomputation called """
|
||||
obj.Shape = self.computeShape(obj.Shape)
|
||||
|
||||
def computeShape(self, solid):
|
||||
""" Create faces shape. This method also calls to generate boxes.
|
||||
@param solid Solid shape that represent the tank.
|
||||
@return Computed solid shape. None if can't build it.
|
||||
"""
|
||||
# Study input to try to build a solid
|
||||
if solid.isDerivedFrom('Part::Feature'):
|
||||
# Get shape
|
||||
shape = solid.Shape
|
||||
if not shape:
|
||||
return None
|
||||
solid = shape
|
||||
if not solid.isDerivedFrom('Part::TopoShape'):
|
||||
return None
|
||||
# Get shells
|
||||
shells = solid.Shells
|
||||
if not shells:
|
||||
return None
|
||||
# Build solids
|
||||
solids = []
|
||||
for s in shells:
|
||||
solid = Part.Solid(s)
|
||||
if solid.Volume < 0.0:
|
||||
solid.reverse()
|
||||
solids.append(solid)
|
||||
# Create compound
|
||||
shape = Part.CompSolid(solids)
|
||||
return shape
|
||||
|
||||
class ViewProviderShipTank:
|
||||
def __init__(self, obj):
|
||||
""" Set this object to the proxy object of the actual view provider """
|
||||
obj.Proxy = self
|
||||
|
||||
def attach(self, obj):
|
||||
""" Setup the scene sub-graph of the view provider, this method is mandatory """
|
||||
return
|
||||
|
||||
def updateData(self, fp, prop):
|
||||
""" If a property of the handled feature has changed we have the chance to handle this here """
|
||||
return
|
||||
|
||||
def getDisplayModes(self,obj):
|
||||
''' Return a list of display modes. '''
|
||||
modes=[]
|
||||
return modes
|
||||
|
||||
def getDefaultDisplayMode(self):
|
||||
''' Return the name of the default display mode. It must be defined in getDisplayModes. '''
|
||||
return "Shaded"
|
||||
|
||||
def setDisplayMode(self,mode):
|
||||
''' Map the display mode defined in attach with those defined in getDisplayModes.
|
||||
Since they have the same names nothing needs to be done. This method is optinal.
|
||||
'''
|
||||
return mode
|
||||
|
||||
def onChanged(self, vp, prop):
|
||||
''' Print the name of the property that has changed '''
|
||||
# FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n")
|
||||
|
||||
def __getstate__(self):
|
||||
''' When saving the document this object gets stored using Python's cPickle module.
|
||||
Since we have some un-pickable here -- the Coin stuff -- we must define this method
|
||||
to return a tuple of all pickable objects or None.
|
||||
'''
|
||||
return None
|
||||
|
||||
def __setstate__(self,state):
|
||||
''' When restoring the pickled object from document we have the chance to set some
|
||||
internals here. Since no data were pickled nothing needs to be done here.
|
||||
'''
|
||||
return None
|
||||
|
||||
def getIcon(self):
|
||||
return """
|
||||
/* XPM */
|
||||
static char * TankS_xpm[] = {
|
||||
"32 32 516 2",
|
||||
" c None",
|
||||
". c #2A2A2A",
|
||||
"+ c #6D6C6D",
|
||||
"@ c #434343",
|
||||
"# c #000000",
|
||||
"$ c #3C3C3C",
|
||||
"% c #878787",
|
||||
"& c #DADADA",
|
||||
"* c #D1D2D1",
|
||||
"= c #DBDBDC",
|
||||
"- c #DDDDDD",
|
||||
"; c #777677",
|
||||
"> c #636363",
|
||||
", c #3D3D3D",
|
||||
"' c #D2D2D1",
|
||||
") c #CBCBCB",
|
||||
"! c #CECECE",
|
||||
"~ c #D2D2D2",
|
||||
"{ c #D5D5D5",
|
||||
"] c #D8D9D9",
|
||||
"^ c #DCDCDC",
|
||||
"/ c #E6E6E6",
|
||||
"( c #ACADAC",
|
||||
"_ c #949494",
|
||||
": c #2B2A2B",
|
||||
"< c #202020",
|
||||
"[ c #838383",
|
||||
"} c #D0D0D1",
|
||||
"| c #C4C3C3",
|
||||
"1 c #C7C7C7",
|
||||
"2 c #CACACA",
|
||||
"3 c #D1D1D1",
|
||||
"4 c #D5D4D5",
|
||||
"5 c #D8D8D8",
|
||||
"6 c #DEDEDE",
|
||||
"7 c #E2E2E2",
|
||||
"8 c #E5E5E5",
|
||||
"9 c #F5F5F6",
|
||||
"0 c #B5B5B5",
|
||||
"a c #747474",
|
||||
"b c #393939",
|
||||
"c c #7E7E7E",
|
||||
"d c #7B7B7B",
|
||||
"e c #7C7C7C",
|
||||
"f c #D3D3D3",
|
||||
"g c #CCCCCC",
|
||||
"h c #CDCDCD",
|
||||
"i c #D4D4D4",
|
||||
"j c #DBDBDA",
|
||||
"k c #DEDFDF",
|
||||
"l c #E2E2E1",
|
||||
"m c #E5E4E5",
|
||||
"n c #E9E8E8",
|
||||
"o c #ECECEC",
|
||||
"p c #F2F2F1",
|
||||
"q c #FEFEFE",
|
||||
"r c #989898",
|
||||
"s c #737373",
|
||||
"t c #ADADAD",
|
||||
"u c #AAAAAA",
|
||||
"v c #5A5A5A",
|
||||
"w c #717171",
|
||||
"x c #9D9D9D",
|
||||
"y c #D7D7D7",
|
||||
"z c #DBDBDB",
|
||||
"A c #DEDDDD",
|
||||
"B c #E1E1E1",
|
||||
"C c #E4E5E4",
|
||||
"D c #E8E8E8",
|
||||
"E c #EBEBEC",
|
||||
"F c #EFEFEF",
|
||||
"G c #F1F1F1",
|
||||
"H c #F0F0F0",
|
||||
"I c #FFFFFF",
|
||||
"J c #666666",
|
||||
"K c #5E5E5E",
|
||||
"L c #4D4D4D",
|
||||
"M c #D8D7D8",
|
||||
"N c #D7D7D6",
|
||||
"O c #E3E3E3",
|
||||
"P c #797979",
|
||||
"Q c #656565",
|
||||
"R c #A9AAAA",
|
||||
"S c #707070",
|
||||
"T c #949493",
|
||||
"U c #C3C3C3",
|
||||
"V c #E0E0E0",
|
||||
"W c #E1E0E0",
|
||||
"X c #E4E4E4",
|
||||
"Y c #E7E7E7",
|
||||
"Z c #EBEBEB",
|
||||
"` c #EEEDED",
|
||||
" . c #585858",
|
||||
".. c #5B5B5B",
|
||||
"+. c #C3C4C3",
|
||||
"@. c #D3D3D2",
|
||||
"#. c #D3D3D4",
|
||||
"$. c #D5D5D4",
|
||||
"%. c #DFDFDF",
|
||||
"&. c #474747",
|
||||
"*. c #858585",
|
||||
"=. c #505050",
|
||||
"-. c #606060",
|
||||
";. c #848485",
|
||||
">. c #F4F4F5",
|
||||
",. c #6F6F6F",
|
||||
"'. c #909090",
|
||||
"). c #D9DAD9",
|
||||
"!. c #D4D3D4",
|
||||
"~. c #D6D6D5",
|
||||
"{. c #525252",
|
||||
"]. c #ADACAD",
|
||||
"^. c #323232",
|
||||
"/. c #ABABAA",
|
||||
"(. c #D0CFCF",
|
||||
"_. c #D1D0D1",
|
||||
":. c #D1D2D2",
|
||||
"<. c #D3D4D3",
|
||||
"[. c #D5D5D6",
|
||||
"}. c #D6D6D6",
|
||||
"|. c #1B1B1B",
|
||||
"1. c #494949",
|
||||
"2. c #919191",
|
||||
"3. c #CFCFCF",
|
||||
"4. c #D2D3D2",
|
||||
"5. c #D4D5D4",
|
||||
"6. c #848384",
|
||||
"7. c #B2B2B2",
|
||||
"8. c #B3B2B2",
|
||||
"9. c #A7A7A7",
|
||||
"0. c #444344",
|
||||
"a. c #CCCFD1",
|
||||
"b. c #ABC2D5",
|
||||
"c. c #94BBD9",
|
||||
"d. c #A9C4D7",
|
||||
"e. c #C1CFD8",
|
||||
"f. c #D0D1D1",
|
||||
"g. c #2D2D2D",
|
||||
"h. c #CDCECD",
|
||||
"i. c #C5C5C5",
|
||||
"j. c #C9C9C9",
|
||||
"k. c #CBCBCA",
|
||||
"l. c #CDCECE",
|
||||
"m. c #CFCFD0",
|
||||
"n. c #818181",
|
||||
"o. c #B0B0B0",
|
||||
"p. c #B1B1B1",
|
||||
"q. c #9FA4AA",
|
||||
"r. c #4D6782",
|
||||
"s. c #557CA0",
|
||||
"t. c #90B7DB",
|
||||
"u. c #8DB5D7",
|
||||
"v. c #8FB7D7",
|
||||
"w. c #91BAD9",
|
||||
"x. c #93BCD9",
|
||||
"y. c #BCD3E1",
|
||||
"z. c #747C81",
|
||||
"A. c #BDBCBC",
|
||||
"B. c #BEBEBE",
|
||||
"C. c #C0C0C0",
|
||||
"D. c #C2C2C2",
|
||||
"E. c #C4C4C4",
|
||||
"F. c #C6C6C6",
|
||||
"G. c #C7C8C7",
|
||||
"H. c #CAC9C9",
|
||||
"I. c #7D7D7E",
|
||||
"J. c #828281",
|
||||
"K. c #AEAEAD",
|
||||
"L. c #ADADAE",
|
||||
"M. c #A6AAB1",
|
||||
"N. c #7C9ABF",
|
||||
"O. c #7699C2",
|
||||
"P. c #769BC3",
|
||||
"Q. c #789DC3",
|
||||
"R. c #6288AE",
|
||||
"S. c #4F7799",
|
||||
"T. c #5981A3",
|
||||
"U. c #94BDDC",
|
||||
"V. c #8FB9D8",
|
||||
"W. c #537E9A",
|
||||
"X. c #87B2CE",
|
||||
"Y. c #8AB0C7",
|
||||
"Z. c #A8B6BE",
|
||||
"`. c #B7BABB",
|
||||
" + c #BDBDBD",
|
||||
".+ c #BFBFBF",
|
||||
"++ c #C1C1C1",
|
||||
"@+ c #C2C3C3",
|
||||
"#+ c #C4C4C5",
|
||||
"$+ c #C7C7C6",
|
||||
"%+ c #7A7A7B",
|
||||
"&+ c #7F8080",
|
||||
"*+ c #A8AAAB",
|
||||
"=+ c #9EA6AF",
|
||||
"-+ c #7594BE",
|
||||
";+ c #7192C0",
|
||||
">+ c #7293C0",
|
||||
",+ c #7395C1",
|
||||
"'+ c #7498C1",
|
||||
")+ c #7599C1",
|
||||
"!+ c #779CC2",
|
||||
"~+ c #779EC3",
|
||||
"{+ c #769DC0",
|
||||
"]+ c #638BAD",
|
||||
"^+ c #4F7897",
|
||||
"/+ c #4F7D9F",
|
||||
"(+ c #7DA7C4",
|
||||
"_+ c #7FAAC6",
|
||||
":+ c #80ADC7",
|
||||
"<+ c #83B0C8",
|
||||
"[+ c #8EB4C6",
|
||||
"}+ c #B5B9BB",
|
||||
"|+ c #BABBBC",
|
||||
"1+ c #787878",
|
||||
"2+ c #717B89",
|
||||
"3+ c #6F90BD",
|
||||
"4+ c #6F91BD",
|
||||
"5+ c #6F90BE",
|
||||
"6+ c #7091BE",
|
||||
"7+ c #7192BF",
|
||||
"8+ c #7194BF",
|
||||
"9+ c #7396C0",
|
||||
"0+ c #7498C0",
|
||||
"a+ c #759AC1",
|
||||
"b+ c #769CC1",
|
||||
"c+ c #789FC2",
|
||||
"d+ c #79A1C3",
|
||||
"e+ c #4A7CA2",
|
||||
"f+ c #7AA3C2",
|
||||
"g+ c #7BA5C2",
|
||||
"h+ c #7DA8C4",
|
||||
"i+ c #7FABC5",
|
||||
"j+ c #81AEC6",
|
||||
"k+ c #83B1C8",
|
||||
"l+ c #85B4C9",
|
||||
"m+ c #98B7C4",
|
||||
"n+ c #BABABB",
|
||||
"o+ c #747576",
|
||||
"p+ c #5B71A4",
|
||||
"q+ c #6D89BE",
|
||||
"r+ c #678BBF",
|
||||
"s+ c #6D8EBD",
|
||||
"t+ c #6D8FBD",
|
||||
"u+ c #6E90BD",
|
||||
"v+ c #7091BD",
|
||||
"w+ c #7193BE",
|
||||
"x+ c #7296BF",
|
||||
"y+ c #7397C0",
|
||||
"z+ c #7499C0",
|
||||
"A+ c #759BC1",
|
||||
"B+ c #779EC1",
|
||||
"C+ c #4979A1",
|
||||
"D+ c #769FBF",
|
||||
"E+ c #78A0C0",
|
||||
"F+ c #79A4C1",
|
||||
"G+ c #7BA6C2",
|
||||
"H+ c #7DAAC3",
|
||||
"I+ c #80ACC5",
|
||||
"J+ c #82B0C6",
|
||||
"K+ c #84B2C7",
|
||||
"L+ c #89B4C6",
|
||||
"M+ c #95AFC1",
|
||||
"N+ c #59819C",
|
||||
"O+ c #5A6FA3",
|
||||
"P+ c #7388BC",
|
||||
"Q+ c #7489BC",
|
||||
"R+ c #7189BD",
|
||||
"S+ c #6B89BE",
|
||||
"T+ c #678BBE",
|
||||
"U+ c #6D8EBC",
|
||||
"V+ c #6E8FBC",
|
||||
"W+ c #6F92BE",
|
||||
"X+ c #7194BE",
|
||||
"Y+ c #7398BF",
|
||||
"Z+ c #759BBF",
|
||||
"`+ c #46759F",
|
||||
" @ c #729ABC",
|
||||
".@ c #749CBD",
|
||||
"+@ c #769FBE",
|
||||
"@@ c #77A2BF",
|
||||
"#@ c #79A5C0",
|
||||
"$@ c #7BA7C2",
|
||||
"%@ c #7CA9C2",
|
||||
"&@ c #7AA5C3",
|
||||
"*@ c #7CA6C4",
|
||||
"=@ c #7DA7C5",
|
||||
"-@ c #577E98",
|
||||
";@ c #586CA2",
|
||||
">@ c #7184BA",
|
||||
",@ c #7185BB",
|
||||
"'@ c #7286BB",
|
||||
")@ c #7287BB",
|
||||
"!@ c #7388BB",
|
||||
"~@ c #6C86BD",
|
||||
"{@ c #6486BF",
|
||||
"]@ c #6B8DBB",
|
||||
"^@ c #6D8FBB",
|
||||
"/@ c #6E91BC",
|
||||
"(@ c #7093BC",
|
||||
"_@ c #7195BD",
|
||||
":@ c #7297BD",
|
||||
"<@ c #43719D",
|
||||
"[@ c #6E95B8",
|
||||
"}@ c #7098BA",
|
||||
"|@ c #729BBB",
|
||||
"1@ c #749DBC",
|
||||
"2@ c #799EB9",
|
||||
"3@ c #719CBF",
|
||||
"4@ c #769EBF",
|
||||
"5@ c #77A0C0",
|
||||
"6@ c #78A2C1",
|
||||
"7@ c #7AA3C3",
|
||||
"8@ c #557B96",
|
||||
"9@ c #576AA1",
|
||||
"0@ c #6F82B9",
|
||||
"a@ c #7083BA",
|
||||
"b@ c #7084BA",
|
||||
"c@ c #7185BA",
|
||||
"d@ c #7285BB",
|
||||
"e@ c #7187BC",
|
||||
"f@ c #6985BF",
|
||||
"g@ c #6387C0",
|
||||
"h@ c #6E90BC",
|
||||
"i@ c #6F92BB",
|
||||
"j@ c #7095BC",
|
||||
"k@ c #416D9B",
|
||||
"l@ c #6A90B5",
|
||||
"m@ c #6A92B7",
|
||||
"n@ c #6393BD",
|
||||
"o@ c #6D95B9",
|
||||
"p@ c #7097BA",
|
||||
"q@ c #7199BA",
|
||||
"r@ c #729ABB",
|
||||
"s@ c #739BBD",
|
||||
"t@ c #759DBE",
|
||||
"u@ c #779FBE",
|
||||
"v@ c #527794",
|
||||
"w@ c #5567A0",
|
||||
"x@ c #6D7EB7",
|
||||
"y@ c #6D7FB7",
|
||||
"z@ c #6E81B8",
|
||||
"A@ c #6F82B8",
|
||||
"B@ c #6F83B9",
|
||||
"C@ c #7186BA",
|
||||
"D@ c #6F85BB",
|
||||
"E@ c #6183C2",
|
||||
"F@ c #698DBC",
|
||||
"G@ c #3D6A9A",
|
||||
"H@ c #5E8BB7",
|
||||
"I@ c #688EB3",
|
||||
"J@ c #6A90B4",
|
||||
"K@ c #6B91B5",
|
||||
"L@ c #6C93B6",
|
||||
"M@ c #6F97B8",
|
||||
"N@ c #7199BB",
|
||||
"O@ c #739BBC",
|
||||
"P@ c #507492",
|
||||
"Q@ c #52639E",
|
||||
"R@ c #6A7BB5",
|
||||
"S@ c #6A7CB6",
|
||||
"T@ c #6B7DB6",
|
||||
"U@ c #6C7EB7",
|
||||
"V@ c #6D7FB8",
|
||||
"W@ c #6D80B7",
|
||||
"X@ c #6F83BA",
|
||||
"Y@ c #436587",
|
||||
"Z@ c #6388AF",
|
||||
"`@ c #658AB0",
|
||||
" # c #668CB1",
|
||||
".# c #688DB3",
|
||||
"+# c #698FB4",
|
||||
"@# c #6C92B6",
|
||||
"## c #6D94B7",
|
||||
"$# c #6F96B9",
|
||||
"%# c #4E7190",
|
||||
"&# c #50619D",
|
||||
"*# c #6778B4",
|
||||
"=# c #6878B4",
|
||||
"-# c #6979B4",
|
||||
";# c #697BB5",
|
||||
"># c #6A7CB7",
|
||||
",# c #6A7DB7",
|
||||
"'# c #6B7EB7",
|
||||
")# c #6C7FB7",
|
||||
"!# c #6E80B8",
|
||||
"~# c #416285",
|
||||
"{# c #6084AC",
|
||||
"]# c #6186AD",
|
||||
"^# c #6389B0",
|
||||
"/# c #668BB0",
|
||||
"(# c #678CB1",
|
||||
"_# c #6B91B4",
|
||||
":# c #4B6E8E",
|
||||
"<# c #4F5F9D",
|
||||
"[# c #6575B2",
|
||||
"}# c #6675B2",
|
||||
"|# c #6676B3",
|
||||
"1# c #6776B3",
|
||||
"2# c #6777B4",
|
||||
"3# c #6879B4",
|
||||
"4# c #697AB5",
|
||||
"5# c #6A7DB6",
|
||||
"6# c #6B7DB7",
|
||||
"7# c #6C7EB6",
|
||||
"8# c #3E5E83",
|
||||
"9# c #5C80A9",
|
||||
"0# c #5D81AA",
|
||||
"a# c #5F83AB",
|
||||
"b# c #6085AC",
|
||||
"c# c #6388AE",
|
||||
"d# c #648AAF",
|
||||
"e# c #668BB1",
|
||||
"f# c #678CB2",
|
||||
"g# c #688EB4",
|
||||
"h# c #486B8C",
|
||||
"i# c #233077",
|
||||
"j# c #314293",
|
||||
"k# c #6574B5",
|
||||
"l# c #6573B2",
|
||||
"m# c #6473B2",
|
||||
"n# c #6575B3",
|
||||
"o# c #6676B2",
|
||||
"p# c #697AB4",
|
||||
"q# c #3C5B81",
|
||||
"r# c #587CA5",
|
||||
"s# c #5A7DA7",
|
||||
"t# c #5B7FA8",
|
||||
"u# c #5D80A9",
|
||||
"v# c #5D82AA",
|
||||
"w# c #6185AD",
|
||||
"x# c #6287AE",
|
||||
"y# c #6389AF",
|
||||
"z# c #678CB3",
|
||||
"A# c #385C80",
|
||||
"B# c #2A3576",
|
||||
"C# c #35418C",
|
||||
"D# c #253584",
|
||||
"E# c #4F5FA4",
|
||||
"F# c #6574B3",
|
||||
"G# c #6372B1",
|
||||
"H# c #6473B1",
|
||||
"I# c #6474B2",
|
||||
"J# c #6576B3",
|
||||
"K# c #6777B3",
|
||||
"L# c #3A587F",
|
||||
"M# c #5578A3",
|
||||
"N# c #5779A3",
|
||||
"O# c #577BA5",
|
||||
"P# c #597CA6",
|
||||
"Q# c #5B7EA7",
|
||||
"R# c #5C7FA8",
|
||||
"S# c #5E82AA",
|
||||
"T# c #4D7299",
|
||||
"U# c #0C1A71",
|
||||
"V# c #1E2A74",
|
||||
"W# c #38448D",
|
||||
"X# c #2E3D90",
|
||||
"Y# c #33428C",
|
||||
"Z# c #5D6AAC",
|
||||
"`# c #6371B2",
|
||||
" $ c #6270B0",
|
||||
".$ c #6372B0",
|
||||
"+$ c #37557D",
|
||||
"@$ c #52739F",
|
||||
"#$ c #5274A1",
|
||||
"$$ c #5577A3",
|
||||
"%$ c #577AA4",
|
||||
"&$ c #587CA6",
|
||||
"*$ c #597DA6",
|
||||
"=$ c #5C7FA9",
|
||||
"-$ c #5478A1",
|
||||
";$ c #21466F",
|
||||
">$ c #111F72",
|
||||
",$ c #2B377D",
|
||||
"'$ c #34428F",
|
||||
")$ c #303F8D",
|
||||
"!$ c #455293",
|
||||
"~$ c #6572B3",
|
||||
"{$ c #616FB0",
|
||||
"]$ c #626FB0",
|
||||
"^$ c #34537B",
|
||||
"/$ c #4E709D",
|
||||
"($ c #50719E",
|
||||
"_$ c #50729F",
|
||||
":$ c #5174A0",
|
||||
"<$ c #5375A1",
|
||||
"[$ c #577AA5",
|
||||
"}$ c #3F618C",
|
||||
"|$ c #2F5786",
|
||||
"1$ c #0C315B",
|
||||
"2$ c #182678",
|
||||
"3$ c #1C2872",
|
||||
"4$ c #354087",
|
||||
"5$ c #2C3A88",
|
||||
"6$ c #36448A",
|
||||
"7$ c #5562A4",
|
||||
"8$ c #6370B1",
|
||||
"9$ c #34527A",
|
||||
"0$ c #4C6D9B",
|
||||
"a$ c #4D6E9C",
|
||||
"b$ c #51739F",
|
||||
"c$ c #385A87",
|
||||
"d$ c #254672",
|
||||
"e$ c #1F2A6F",
|
||||
"f$ c #2A367A",
|
||||
"g$ c #334088",
|
||||
"h$ c #33428D",
|
||||
"i$ c #254673",
|
||||
"j$ c #4F709E",
|
||||
"k$ c #375886",
|
||||
"l$ c #224473",
|
||||
"m$ c #09155A",
|
||||
"n$ c #2A3577",
|
||||
"o$ c #1E275A",
|
||||
"p$ c #244676",
|
||||
"q$ c #1F4373",
|
||||
" ",
|
||||
" . + @ # ",
|
||||
" $ % & * = - ; > ",
|
||||
" , % ' ) ! ~ { ] ^ / ( _ : ",
|
||||
" < [ } | 1 2 ! 3 4 5 = 6 7 8 9 0 a # ",
|
||||
" b c d e e f g h 3 i 5 j k l m n o p q r s # ",
|
||||
" # t 7 u v _ w w x & f y z A B C D E F G H I J K ",
|
||||
" L M f i N O P Q R S T U V 6 W X Y Z ` I d _ - V . ",
|
||||
" ..+.3 3 @.#.$.5 %.&.*.=.-.;.8 Z Y >.,.'.).!.~.5 Y {. ",
|
||||
" % ].^./.(._.:.<.!.[.}.V |.# # 1.Q 2.} g h 3._.4.5.6. ",
|
||||
" *.7.8.t 9.0.N ' a.b.c.d.e.f.'.g.h.U i.1 j.k.g l.m.n. ",
|
||||
" [ o.o.p.p.7.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.k.I. ",
|
||||
" J.t K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +.+++@+#+$+%+ ",
|
||||
" &+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+B.C.++1+ ",
|
||||
" 2+3+4+5+6+6+7+8+9+0+a+b+c+d+e+f+g+h+i+j+k+l+m+n+A.o+ ",
|
||||
" p+q+r+s+t+u+u+v+w+x+y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+ ",
|
||||
" O+P+Q+R+S+T+U+V+3+W+X+x+Y+Z+`+ @.@+@@@#@$@%@&@*@=@-@ ",
|
||||
" ;@>@,@'@)@!@~@{@]@^@/@(@_@:@<@[@}@|@1@2@3@4@5@6@7@8@ ",
|
||||
" 9@0@a@b@c@d@'@'@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@ ",
|
||||
" w@x@y@z@z@A@B@b@b@,@C@D@E@F@G@H@I@J@K@L@[@M@p@N@O@P@ ",
|
||||
" Q@R@S@T@U@U@V@W@z@z@0@X@b@c@Y@Z@`@ #.#+#J@@###[@$#%# ",
|
||||
" &#*#=#-#;#R@>#,#'#U@)#W@!#z@~#{#]#R.^#/#(#I@+#_#@#:# ",
|
||||
" <#[#}#|#1#2#=#3#4#;#S@5#6#7#8#9#0#a#b#]#c#d#e#f#g#h# ",
|
||||
" i#j#k#l#m#[#n#o#|#2#*#3#p#4#q#r#s#t#u#v#a#w#x#y#z#A# ",
|
||||
" B#C#D#E#F#G#G#H#I#[#J#|#K#L#M#N#O#P#Q#R#0#S#{#T# ",
|
||||
" U#V#W#X#Y#Z#`# $.$G#H#I#+$@$#$$$M#%$&$*$=$-$;$ ",
|
||||
" >$,$'$)$!$~${$]$ $^$/$($_$:$<$[$}$|$1$ ",
|
||||
" 2$3$4$5$6$7$8$9$0$a$a$b$c$d$ ",
|
||||
" e$f$g$h$i$_$j$k$l$ ",
|
||||
" m$n$o$p$q$ ",
|
||||
" ",
|
||||
" "};
|
||||
"""
|
||||
|
||||
def tankWeight(obj, angles=Vector(0.0,0.0,0.0), cor=Vector(0.0,0.0,0.0)):
|
||||
""" Compute tank fluid weight and their center of gravity.
|
||||
@param obj Tank object.
|
||||
@param angles Tank angles, Roll, Pitch and Yaw.
|
||||
@param cor Center or rotation.
|
||||
@return Weight and center of gravity. None if errors detected
|
||||
"""
|
||||
# Test if is a tank instance
|
||||
props = obj.PropertiesList
|
||||
try:
|
||||
props.index("IsShipTank")
|
||||
except ValueError:
|
||||
return None
|
||||
if not obj.IsShipTank:
|
||||
return None
|
||||
# Get object solids
|
||||
Solids = obj.Shape.Solids
|
||||
W = [0.0, 0.0, 0.0, 0.0]
|
||||
for s in Solids:
|
||||
# Get fluid volume
|
||||
bbox = s.BoundBox
|
||||
z0 = bbox.ZMin
|
||||
z1 = bbox.ZMax
|
||||
dz = obj.Level/100.0 * (z1-z0)
|
||||
z = z0 + dz
|
||||
dx = bbox.XMax-bbox.XMin
|
||||
dy = bbox.YMax-bbox.YMin
|
||||
try:
|
||||
box = Part.makeBox(3.0*(dx), 3.0*(dy), (z1-z0)+dz, Vector(bbox.XMin-dx, bbox.YMin-dy, bbox.ZMin-(z1-z0)))
|
||||
fluid = s.common(box)
|
||||
vol = fluid.Volume
|
||||
except:
|
||||
vol = 0.0
|
||||
W[0] = W[0] + vol*obj.Density
|
||||
# Compute fluid solid in rotated position (non linear rotation
|
||||
# are ussually computed as Roll -> Pitch -> Yaw).
|
||||
s.rotate(cor, Vector(1.0,0.0,0.0), angles.x)
|
||||
s.rotate(cor, Vector(0.0,1.0,0.0), angles.y)
|
||||
s.rotate(cor, Vector(0.0,0.0,1.0), angles.z)
|
||||
bbox = s.BoundBox
|
||||
z0 = bbox.ZMin
|
||||
z1 = bbox.ZMax
|
||||
dx = bbox.XMax-bbox.XMin
|
||||
dy = bbox.YMax-bbox.YMin
|
||||
Error = 0.01*vol
|
||||
z = 0.0
|
||||
v = 0.0
|
||||
while(abs(vol - v) > Error):
|
||||
z = z + (vol - v) / (dx*dy)
|
||||
dz = z - z0
|
||||
try:
|
||||
box = Part.makeBox(3.0*(dx), 3.0*(dy), (z1-z0)+dz, Vector(bbox.XMin-dx, bbox.YMin-dy, bbox.ZMin-(z1-z0)))
|
||||
fluid = s.common(box)
|
||||
v = fluid.Volume
|
||||
except:
|
||||
v = 0.0
|
||||
if(abs(vol - v) / (dx*dy) <= 0.000001):
|
||||
break
|
||||
# Add fluid moments
|
||||
for f in fluid.Solids:
|
||||
cog = f.CenterOfMass
|
||||
W[1] = W[1] + f.Volume*obj.Density*cog.x
|
||||
W[2] = W[2] + f.Volume*obj.Density*cog.y
|
||||
W[3] = W[3] + f.Volume*obj.Density*cog.z
|
||||
return [W[0], W[1]/W[0], W[2]/W[0], W[3]/W[0]]
|
Loading…
Reference in New Issue
Block a user