Removed tank unused instance

This commit is contained in:
Jose Luis Cercos-Pita 2014-05-03 14:50:32 +02:00 committed by wmayer
parent 6094db62f2
commit 8fff477f16
3 changed files with 0 additions and 777 deletions

View File

@ -2,7 +2,6 @@ SET(ShipMain_SRCS
InitGui.py
ShipGui.py
Instance.py
TankInstance.py
Ship_rc.py
)
SOURCE_GROUP("" FILES ${ShipMain_SRCS})

View File

@ -5,7 +5,6 @@ data_DATA = \
InitGui.py \
ShipGui.py \
Instance.py \
TankInstance.py \
Ship_rc.py
nobase_data_DATA = \

View File

@ -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]]