(* :Title: Trend900 *) (* :Authors: RL Jakschewitz *) (* :Summary: Datenbasis der Ma§e und Preise des Regalsystems Trend System 9000. Alle Preise beziehen sich auf die lackierte AusfŸhrung, TŸren sind glatt, Eckboden-Ma§anfertigung mit 2.2cm Massiv-Platten mit DM 30.- Aufschlag fŸr die SchrŠge und die Verbindungsexzenter. *) (* :Context: Moebel`Databases`Trend9000` wŸrde man sich wŸnschen, aber siehe BeginPackage *) (* :Package Version: 1.1 *) (* :Copyright: Liegt wahrscheinlich bei der Herstellerfirma des Regalsystems *) (* :History: v1.0: Auszug aus der Preisliste Nr. 4, Stand 03/92, April 1992. v1.1: nonStandard-Preise verallgemeinert, nur noch read only-Liste, April 1992. *) (* :Keywords: Mšbel-System, Regal-System, Trend 9000, multi-dimensionale Tabellen *) (* :Mathematica Version: 2.0 *) (* :Limitation: Einige Sonderma§-Formeln (Brett, Wand) fehlen noch. *) (* :Discussion: Die Preisliste teileDB ist strukturiert als Liste von { name_String, standardMa§e:{{__Real}..}, standardPreise_MultiDim, // multi-dimensionale Liste, wobei // Depth[standardPreise] == Length[standardMa§e] nonStandard:{func_PureFunc, preis:{__} } } FŸr den Zugriff auf diese Listenstruktur werden die Indices "dbXxx" definiert. Zur Identifizierung der Bauteile werden die Wšrter "eineWand, einBrett, usw" definiert. Au§erdem werden noch einige Eckdaten (wie "dicke, sockelhoehe, usw") des Bauteil-Systems definiert. Die Package "Moebel`MultiTable`" stellt eine Preis-Analyse-Funktion zur VerfŸgung. *) (* BeginPackage["Moebel`Databases`Trend9000`"] sollte in den Global Kontext eingelesen werden, damit andere Packages, die i r g e n d e i n e DB dieses Typs bedienen sollen, Zugriff auf die Objekte der DB haben. Schšner wŠre allerdings ein "Needs["package", {"UsingPack"..}]", das die UsingPack-Kontexte als Funktionsparameter an das BeginPackage weitergibt. (Durch override Needs machbar: Allerdings um den Preis, da§ alle Anwender-Packages einer DB ohne Package-Klammern geschrieben werden mŸssen. Durch Input-Filterung, um das BeginPackage statement zu modifizieren, aber das ist noch mehr Hack als die anderen Varianten. ) *) resetDB::usage = "\n resetDB[] initialisiert die Preisliste teileDB (neu)." teileDB::usage = "\n teileDB ist die Liste der Preise und Ma§e des Bauteil-\n Systems Trend 9000." dbName::usage = "\n dbName ist der Index des String-Bezeichners eines Bauteils." dbDim::usage = "\n dbDim ist der Index der StandardMa§e-Liste eines Bauteils." dbTbl::usage = "\n dbTbl ist der Index der StandardPreise-Tabelle eines Bauteils." dbVariable::usage = "\n dbVariable ist der Index der nonStandardPreise-Liste eines Bauteils." dbVarFunc::usage = "\n dbVarFunc ist der Index der pureFunction zur Preisberechnung aus der\n Bauteilgrš§e in der nonStandardPreise-Liste eines Bauteils." dbVarPreis::usage = "\n dbVarPreis ist der Index der nonStandard-Preis-Eckdaten\n (Quadratmeterpreis | MeterPreis, Anfertigungszuschlag) \n in der nonStandardPreise-Liste eines Bauteils." einBrett::usage = "\n einBrett ist der Index der Fachboden-Preisliste in teileDB." eineWand::usage = "\n eineWand ist der Index der Stollen-Preisliste in teileDB." einSockel::usage = "\n einSockel ist der Index der Sockelblenden-Preisliste in teileDB." einSchub::usage = "\n einSchub ist der Index der Schubladen-Preisliste in teileDB." eineTuer::usage = "\n eineTuer ist der Index der 'glatte TŸren'-Preisliste in teileDB." eineEcke::usage = "\n eineEcke ist der Index der Eckboden-Preisliste in teileDB." eineFuehrung::usage = "\n eineFuehrung ist der Index der RollschubfŸhrung-Preisliste in teileDB." einGriff::usage = "\n einGriff ist der Index der Griff-Preisliste in teileDB." dicke::usage = "\n dicke ist die Dicke [cm] der Waende und Bretter." bohrung::usage = "\n bohrung ist der Abstand [cm] der Bohlšcher in den Stollen." sockelHoehe::usage = "\n sockelHoehe ist die Hšhe [cm] einer Sockelblende." sockelDicke::usage = "\n sockelDicke ist die Dicke [cm] einer Sockelblende." tuerDicke::usage = "\n tuerDicke ist die Dicke [cm] einer TŸr." halfOff::usage = "\n halfOff ist der horizontale Versatz [cm] einer TŸr bei Auftreten\n als DoppeltŸr." tuerUeberhang::usage = "\n tuerUeberhang: TŸren sind um soviel hšher als die lichte Hšhe\n ihres Innefachs." bohrLoecher::usage = "\n bohrLoecher[Hoehe] gibt die Liste der Positionen der Bohrlšcher\n in einer Wand der Hšhe Hoehe zurŸck." Begin["`Private`"] (* Namen (Indices} der Struktur-Elemente ------------------------------------- *) dbName = 1; (* Name des Teils *) dbDim = 2; (* Dimensionen, Indices der Tabelle *) dbTbl = 3; (* Preis-Tabelle *) dbVariable = 4; (* Liste fŸr nicht-Standard - Preise *) dbVarFunc = 1; (* Pure Function zur Berechnung der nicht-Standard - Preise *) dbVarPreis = 2; (* Liste der Preis-Komponenten *) (* Eckdaten des Trend 9000 - Bauteile-Systems ------------------------------------------ *) dicke = 2.2; (* der Waende & Bretter *) bohrung = 3.2; (* AbstŠnde in den Stollen *) sockelHoehe = 6.9; sockelDicke = 1.8; tuerDicke = 2.0; halfOff = 0.7; (* fŸr Doppel-TŸr/Schub *) tuerUeberhang= 2.0; (* TŸren sind um soviel hšher als die lichte Hšhe *) bohrLoecher[h_] := Table[ sockelHoehe + bohrung i, { i, 0, (h-sockelHoehe)/bohrung } ] resetDB[] := Module[ {}, (* ------------------------ *) teileDB = { { "shelf ", (* ========================================================================= *) { (* Dimensionen : 2 *) (* Breiten *){ 33.3, 39.3, 49.3, 59.3, 80., 100. }, (* Tiefen *) { 23.6, 33.2, 42.8, 58.8 } }, { (* Preistabelle 2D *) { 22., 27., 33., illegal }, { 24., 30., 38., 51. }, { 28., 38., 49., 60. }, { 33., 42., 56., 65. }, { 38., 54., 75., 92. }, { 50., 66., 88., 113. } } }, { "side wall ", (* ========================================================================= *) { (* Dimensionen : 2 *) (* Hoehen *){ 57.4, 79.8, 102.2, 143.8, 175.8, 198.2, 223.8, 246.2 }, (* Tiefen *) { 23.6, 33.2, 42.8, 58.8 } }, { (* Preistabelle 2D *) { 27., 36., 50., 62. }, { 36., 49., 65., 83. }, { 46., 62., 81., 104. }, { 63., 86., 114., 146. }, { 74., 104., 138., 180. }, { 85., 119., 154., 202. }, { 98., 137., 177., 234. }, { 107., 149., 194., 255. } } }, { "base board ", (* ========================================================================= *) { (* Dimensionen : 1 *) (* Breiten *) { 33.3, 39.3, 49.3, 59.3, 80., 100. } }, { (* Preistabelle 1D *) 7.5, 9., 9.5, 10.5, 12., 13.5 }, { (* nicht-Standard Ma§e *) (#2[[1]] #1[[1]] / 100. + #2[[2]])&, { 15., 8. } } }, { "drawer ", (* ========================================================================= *) { (* Dimensionen : 3 *) (* Hšhen *) { 12.6, 22.2 }, (* Breiten *){ 39.3, 49.3, 59.3, 80. }, (* Tiefen *) { 33.2, 42.8, 58.8 } }, { (* Preistabelle 3D *) { { 77., 81., 89. }, { 82., 87., 94. }, { 89., 93., 114. }, { 98., 103., 126. } }, { { 94., 100., 109. }, { 103., 109., 119. }, { 112., 119., 143. }, { 130., 136., 162. } } } }, { "door ", (* ========================================================================= *) { (* Dimensionen : 2 *) (* Hoehen *){ 47.8, 70.2, 92.6, 166.2 }, (* Breiten *) { 39.3, 49.3, 59.3 } }, { (* Preistabelle 2D *) { 89., 99., 109. }, { 116., 123., 145. }, { 151., 162., 204. }, { 227., 258., 279. } }, { (* nicht-Standard Ma§e *) (#2[[1]] (#1[[1]] #1[[2]]) / 10000. + #2[[2]])&, { 250., 55. } } }, { "roll guiding", (* ========================================================================= *) { (* Dimensionen : 1 *) (* Tiefen *) { 33.2, 42.8, 58.8 } }, { (* Preistabelle 1D *) 21., 23., 25. } }, { "handle ", (* ========================================================================= *) { (* Dimensionen : 1 *) (* Durchmesser *) { 3.5, 3.4, 4. } }, { (* Preistabelle 1D *) 6.5, 7., 8. } }, { "corner shelf", (* ========================================================================= *) { (* Dimensionen : 1 *) (* Tiefen *) { 23.6, 33.2 } (* der ansto§enden WŠnde *) }, { (* Preistabelle 1D *) 93., 93. }, { (* nicht-Standard Ma§e *) (#2[[1]] #1[[1]]^2 / 10000. + #2[[2]])&, { 138., 30. } (* Quadratmeterpreise bzgl. Schenkel *) } (* zzgl. DM 30.- fŸr Bohrungen, SchrŠg-Abschnitt *) } (* Telefonat 29.4.92 *) }; (* Indices der Bauteile in dieser teileDB -------------------------------------- *) einBrett = Position[ teileDB, "shelf " ][[1,dbName]]; eineWand = Position[ teileDB, "side wall " ][[1,dbName]]; einSockel = Position[ teileDB, "base board " ][[1,dbName]]; einSchub = Position[ teileDB, "drawer " ][[1,dbName]]; eineTuer = Position[ teileDB, "door " ][[1,dbName]]; eineEcke = Position[ teileDB, "corner shelf" ][[1,dbName]]; einGriff = Position[ teileDB, "handle " ][[1,dbName]]; eineFuehrung= Position[ teileDB, "roll guiding" ][[1,dbName]]; ] resetDB[] End[] Null (* EndPackage[] -- siehe Kommentar BeginPackage *)