From 8fff477f16fa78160261079ed0486040e86146b1 Mon Sep 17 00:00:00 2001 From: Jose Luis Cercos-Pita Date: Sat, 3 May 2014 14:50:32 +0200 Subject: [PATCH] Removed tank unused instance --- src/Mod/Ship/CMakeLists.txt | 1 - src/Mod/Ship/Makefile.am | 1 - src/Mod/Ship/TankInstance.py | 775 ----------------------------------- 3 files changed, 777 deletions(-) delete mode 100644 src/Mod/Ship/TankInstance.py diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index 4dd259c0a..1d4ffde56 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -2,7 +2,6 @@ SET(ShipMain_SRCS InitGui.py ShipGui.py Instance.py - TankInstance.py Ship_rc.py ) SOURCE_GROUP("" FILES ${ShipMain_SRCS}) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 91e174eca..1ccc121c9 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -5,7 +5,6 @@ data_DATA = \ InitGui.py \ ShipGui.py \ Instance.py \ - TankInstance.py \ Ship_rc.py nobase_data_DATA = \ diff --git a/src/Mod/Ship/TankInstance.py b/src/Mod/Ship/TankInstance.py deleted file mode 100644 index d85db4856..000000000 --- a/src/Mod/Ship/TankInstance.py +++ /dev/null @@ -1,775 +0,0 @@ -#*************************************************************************** -#* * -#* Copyright (c) 2011, 2012 * -#* Jose Luis Cercos Pita * -#* * -#* 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]]