less copy protection, more size visualization
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 

925 satır
45 KiB

  1. function makeObject(name, viewInfo, sizes = []) {
  2. views = {};
  3. Object.entries(viewInfo).forEach(([key, value]) => {
  4. views[key] = {
  5. attributes: {
  6. height: {
  7. name: "Height",
  8. power: 1,
  9. type: "length",
  10. base: value.height
  11. }
  12. },
  13. image: value.image,
  14. name: value.name,
  15. rename: value.rename
  16. }
  17. if (value.mass) {
  18. views[key].attributes.mass = {
  19. name: "Mass",
  20. power: 3,
  21. type: "mass",
  22. base: value.mass
  23. };
  24. }
  25. if (value.volume) {
  26. views[key].attributes.capacity = {
  27. name: "Volume",
  28. power: 3,
  29. type: "volume",
  30. base: value.volume
  31. }
  32. }
  33. if (value.energy) {
  34. views[key].attributes.capacity = {
  35. name: "Energy",
  36. power: 3,
  37. type: "energy",
  38. base: value.energy
  39. }
  40. }
  41. });
  42. return makeEntity({ name: name }, views, sizes);
  43. }
  44. function makeHeight(info, category, prefix = "", type = "objects", rename = true) {
  45. const views = {};
  46. info.forEach(object => {
  47. let src;
  48. // this lets us provide our own source if needed
  49. // useful for reusing existing art
  50. if (object[3]) {
  51. src = object[3];
  52. } else {
  53. src = "./media/" + type + "/" + category.replace(/ /g, "-").toLowerCase() + "/" + prefix + object[0] + ".svg";
  54. }
  55. views[object[0]] = {
  56. height: math.unit(object[1], object[2]),
  57. image: { source: src },
  58. name: rename ? object[0].replace(/-/g, " ").replace(/\b\w/g, x => x.toUpperCase()).replace(/'[A-Z]/g, x => x.toLowerCase()) : object[0],
  59. rename: true
  60. }
  61. if (object[4] !== undefined) {
  62. views[object[0]].volume = object[4]
  63. }
  64. });
  65. return {
  66. name: category,
  67. constructor: () => makeObject(
  68. category,
  69. views
  70. )
  71. }
  72. }
  73. function makeHeightWeight(info, category, prefix = "", type = "objects") {
  74. const views = {};
  75. info.forEach(object => {
  76. let src;
  77. // this lets us provide our own source if needed
  78. // useful for reusing existing art
  79. if (object[5]) {
  80. src = object[5];
  81. } else {
  82. src = "./media/" + type + "/" + category.replace(/ /g, "-").toLowerCase() + "/" + prefix + object[0] + ".svg";
  83. }
  84. views[object[0]] = {
  85. height: math.unit(object[1], object[2]),
  86. mass: math.unit(object[3], object[4]),
  87. image: { source: src },
  88. name: object[0].replace(/-/g, " ").replace(/\b\w/g, x => x.toUpperCase()),
  89. rename: true
  90. }
  91. });
  92. return {
  93. name: category,
  94. constructor: () => makeObject(
  95. category,
  96. views
  97. )
  98. }
  99. }
  100. function makeHeightWeightSphere(info, category, prefix = "", type = "objects") {
  101. const views = {};
  102. info.forEach(object => {
  103. let src;
  104. // this lets us provide our own source if needed
  105. // useful for reusing existing art
  106. if (object[5]) {
  107. src = object[5];
  108. } else {
  109. src = "./media/" + type + "/" + category.replace(/ /g, "-").toLowerCase() + "/" + prefix + object[0] + ".svg";
  110. }
  111. views[object[0]] = {
  112. height: math.unit(object[1], object[2]),
  113. mass: math.unit(object[3], object[4]),
  114. volume: math.unit(Math.PI * 4 / 3 * Math.pow((object[1]/2), 3), object[2] + "^3"),
  115. image: { source: src },
  116. name: object[0].replace(/-/g, " ").replace(/\b\w/g, x => x.toUpperCase()),
  117. rename: true
  118. }
  119. if (object[6]) {
  120. views[object[0]].image.extra = object[6]
  121. views[object[0]].image.bottom = object[7]
  122. }
  123. });
  124. return {
  125. name: category,
  126. constructor: () => makeObject(
  127. category,
  128. views
  129. )
  130. }
  131. }
  132. function makeModel(data) {
  133. const views = {};
  134. const forms = {};
  135. data.forms.forEach(form => {
  136. forms[form.name] = { name: form.name, rename: true }
  137. form.views.forEach(view => {
  138. const viewId = form.name + view.name
  139. views[viewId] = {
  140. name: view.name,
  141. attributes: {
  142. height: {
  143. name: "Height",
  144. power: 1,
  145. type: "length",
  146. base: math.unit(view.height, "meters")
  147. }
  148. },
  149. form: form.name
  150. }
  151. if (view.area) {
  152. views[viewId].attributes["area"] = {
  153. name: "Area",
  154. power: 2,
  155. type: "area",
  156. base: math.unit(view.area, "m^2")
  157. }
  158. }
  159. if (view.volume) {
  160. views[viewId].attributes["volume"] = {
  161. name: "Volume",
  162. power: 3,
  163. type: "volume",
  164. base: math.unit(view.volume, "m^3")
  165. }
  166. }
  167. if (view.mass) {
  168. views[viewId].attributes["weight"] = {
  169. name: "Mass",
  170. power: 3,
  171. type: "mass",
  172. base: math.unit(view.mass, "kg")
  173. }
  174. }
  175. if (view.image) {
  176. views[viewId].image = view.image
  177. } else {
  178. views[viewId].image = {
  179. source: "./media/" + data.kind + "/" + data.name + "/" + form.name + "-" + view.name + ".svg"
  180. }
  181. }
  182. })
  183. });
  184. return {
  185. name: data.name,
  186. constructor: () => makeEntity(
  187. {name: data.name},
  188. views,
  189. [],
  190. forms
  191. )
  192. }
  193. }
  194. function makeObjects() {
  195. const results = [];
  196. results.push({
  197. name: "Soda Can",
  198. constructor: () => makeObject(
  199. "Soda Can",
  200. {
  201. front: {
  202. height: math.unit(4.83, "inches"),
  203. mass: math.unit(15, "grams"),
  204. image: { source: "./media/objects/soda-can.svg" },
  205. name: "Side"
  206. }
  207. }
  208. )
  209. });
  210. results.push({
  211. name: "Sewing Pin",
  212. constructor: () => makeObject(
  213. "Sewing Pin",
  214. {
  215. side: {
  216. height: math.unit(1.5, "inches"),
  217. image: { source: "./media/objects/sewing-pin.svg" },
  218. name: "Side"
  219. },
  220. top: {
  221. height: math.unit(2, "millimeters"),
  222. image: { source: "./media/objects/pin-head.svg" },
  223. name: "Head"
  224. }
  225. }
  226. )
  227. });
  228. results.push({
  229. name: "Lamp",
  230. constructor: () => makeObject(
  231. "Lamp",
  232. {
  233. lamp: {
  234. height: math.unit(30, "inches"),
  235. mass: math.unit(10, "lbs"),
  236. image: { source: "./media/objects/lamp.svg" },
  237. name: "Lamp"
  238. }
  239. }
  240. )
  241. });
  242. results.push({
  243. name: "Nail Polish",
  244. constructor: () => makeObject(
  245. "Nail Polish",
  246. {
  247. bottle: {
  248. height: math.unit(3.25, "inches"),
  249. mass: math.unit(66, "g"),
  250. image: { source: "./media/objects/nail-polish.svg" },
  251. name: "Bottle"
  252. }
  253. }
  254. )
  255. });
  256. results.push({
  257. name: "Shot Glass",
  258. constructor: () => makeObject(
  259. "Shot Glass",
  260. {
  261. glass: {
  262. height: math.unit(2 + 3 / 8, "inches"),
  263. mass: math.unit(75, "g"),
  264. image: { source: "./media/objects/shot-glass.svg" },
  265. name: "Bottle"
  266. }
  267. }
  268. )
  269. });
  270. results.push({
  271. name: "Beer Bottle",
  272. constructor: () => makeObject(
  273. "Beer Bottle",
  274. {
  275. longneck: {
  276. height: math.unit(9, "inches"),
  277. mass: math.unit(200, "g"),
  278. image: { source: "./media/objects/beer-bottle.svg" },
  279. name: "Longneck Bottle"
  280. }
  281. }
  282. )
  283. });
  284. results.push({
  285. name: "Pencil",
  286. constructor: () => makeObject(
  287. "Pencil",
  288. {
  289. pencil: {
  290. height: math.unit(7.5, "inches"),
  291. mass: math.unit(7, "g"),
  292. image: { source: "./media/objects/pencil.svg" },
  293. name: "Pencil"
  294. }
  295. }
  296. )
  297. });
  298. results.push({
  299. name: "Balls",
  300. constructor: () => makeObject(
  301. "Balls",
  302. {
  303. football: {
  304. height: math.unit("6.7", "inches"),
  305. mass: math.unit(415, "grams"),
  306. image: { source: "./media/objects/balls/football.svg"},
  307. name: "Football",
  308. rename: true
  309. },
  310. golf: {
  311. height: math.unit(1.62, "inches"),
  312. mass: math.unit(45, "g"),
  313. image: { source: "./media/objects/circle.svg" },
  314. name: "Golfball",
  315. rename: true
  316. },
  317. tennis: {
  318. height: math.unit(2.6, "inches"),
  319. mass: math.unit(57, "g"),
  320. image: { source: "./media/objects/circle.svg" },
  321. name: "Tennisball",
  322. rename: true
  323. },
  324. baseball: {
  325. height: math.unit(2.9, "inches"),
  326. mass: math.unit(145, "g"),
  327. image: { source: "./media/objects/circle.svg" },
  328. name: "Baseball",
  329. rename: true
  330. },
  331. volleyball: {
  332. height: math.unit(8, "inches"),
  333. mass: math.unit(270, "g"),
  334. image: { source: "./media/objects/circle.svg" },
  335. name: "Volleyball",
  336. rename: true
  337. }
  338. }
  339. )
  340. });
  341. results.push({
  342. name: "Paperclip",
  343. constructor: () => makeObject(
  344. "Paperclip",
  345. {
  346. paperclip: {
  347. height: math.unit(1.834, "inches"),
  348. mass: math.unit(1, "g"),
  349. image: { source: "./media/objects/paperclip.svg" },
  350. name: "Paperclip"
  351. }
  352. }
  353. )
  354. });
  355. results.push({
  356. name: "Pebbles",
  357. constructor: () => makeObject(
  358. "Pebbles",
  359. {
  360. gravelGrain: {
  361. height: math.unit(20, "mm"),
  362. image: { source: "./media/objects/pebble.svg" },
  363. name: "Grain of gravel",
  364. rename: true
  365. },
  366. sandGrain: {
  367. height: math.unit(0.5, "mm"),
  368. image: { source: "./media/objects/pebble.svg" },
  369. name: "Grain of sand",
  370. rename: true
  371. },
  372. siltGrain: {
  373. height: math.unit(0.03, "mm"),
  374. image: { source: "./media/objects/pebble.svg" },
  375. name: "Grain of silt",
  376. rename: true
  377. },
  378. }
  379. )
  380. });
  381. results.push({
  382. name: "Credit Card",
  383. constructor: () => makeObject(
  384. "Credit Card",
  385. {
  386. creditCard: {
  387. height: math.unit(53.98, "mm"),
  388. image: { source: "./media/objects/credit-card.svg" },
  389. name: "Credit card",
  390. },
  391. creditCardVertical: {
  392. height: math.unit(85.60, "mm"),
  393. image: { source: "./media/objects/credit-card-vertical.svg" },
  394. name: "Credit card (vertical)",
  395. },
  396. }
  397. )
  398. });
  399. results.push({
  400. name: "Molecular",
  401. constructor: () => makeObject(
  402. "Molecular",
  403. {
  404. hydrogen: {
  405. height: math.unit(1.06e-10, "m"),
  406. mass: math.unit(1, "dalton"),
  407. image: { source: "./media/objects/circle.svg" },
  408. name: "Hydrogen atom",
  409. rename: true
  410. },
  411. proton: {
  412. height: math.unit(0.877e-15, "m"),
  413. mass: math.unit(1, "dalton"),
  414. image: { source: "./media/objects/circle.svg" },
  415. name: "Proton",
  416. rename: true
  417. },
  418. }
  419. )
  420. });
  421. results.push({
  422. name: "Flagpole",
  423. constructor: () => makeObject(
  424. "Flagpole",
  425. {
  426. residential: {
  427. height: math.unit(20, "feet"),
  428. image: { source: "./media/objects/flagpole.svg" },
  429. name: "Residential"
  430. },
  431. medium: {
  432. height: math.unit(50, "feet"),
  433. image: { source: "./media/objects/flagpole.svg" },
  434. name: "Medium"
  435. },
  436. large: {
  437. height: math.unit(100, "feet"),
  438. image: { source: "./media/objects/flagpole.svg" },
  439. name: "Large"
  440. },
  441. }
  442. )
  443. });
  444. results.push({
  445. name: "Vending Machine",
  446. constructor: () => makeObject(
  447. "Vending Machine",
  448. {
  449. object: {
  450. height: math.unit(183, "cm"),
  451. mass: math.unit(347, "kg"),
  452. image: { source: "./media/objects/vending-machine.svg" },
  453. name: "Vending Machine"
  454. }
  455. }
  456. )
  457. })
  458. results.push({
  459. name: "International Space Station",
  460. constructor: () => makeObject(
  461. "International Space Station",
  462. {
  463. object: {
  464. height: math.unit(209, "feet"),
  465. mass: math.unit(925300, "lbs"),
  466. image: { source: "./media/objects/international-space-station.svg" },
  467. name: "International Space Station"
  468. }
  469. }
  470. )
  471. })
  472. results.push(makeHeight(
  473. [
  474. ["king", 4, "inches"],
  475. ["queen", 351 / 407 * 4, "inches"],
  476. ["bishop", 340 / 407 * 4, "inches"],
  477. ["knight", 309 / 407 * 4, "inches"],
  478. ["rook", 271 / 407 * 4, "inches"],
  479. ["pawn", 197 / 407 * 4, "inches"],
  480. ],
  481. "Chess Pieces",
  482. "chess_"
  483. ));
  484. results.push({
  485. name: "Strand",
  486. constructor: () => {
  487. views = {};
  488. viewInfo = {
  489. opticalFibre: {
  490. name: "Optical Fibre",
  491. thickness: math.unit(0.375, "mm")
  492. },
  493. hair: {
  494. name: "Hair",
  495. thickness: math.unit(0.07, "mm")
  496. },
  497. spiderSilk: {
  498. name: "Spider Silk",
  499. thickness: math.unit(0.003, "mm")
  500. },
  501. suspensionCables: {
  502. name: "Suspension Bridge Cables",
  503. thickness: math.unit(3, "feet")
  504. },
  505. capillary: {
  506. name: "Capillary",
  507. thickness: math.unit(7.5, "micrometers")
  508. },
  509. vein: {
  510. name: "Vein",
  511. thickness: math.unit(10, "mm")
  512. },
  513. thread: {
  514. name: "Thread",
  515. thickness: math.unit(0.4, "mm")
  516. },
  517. powerCord: {
  518. name: "Power Cord",
  519. thickness: math.unit(0.25, "inches")
  520. },
  521. pianoWireBass: {
  522. name: "Piano Wire (Bass)",
  523. thickness: math.unit(8.5, "mm")
  524. },
  525. pianoWireTreble: {
  526. name: "Piano Wire (Treble)",
  527. thickness: math.unit(0.85, "mm")
  528. },
  529. guitarString: {
  530. name: "Guitar String",
  531. thickness: math.unit(0.03, "inches")
  532. },
  533. powerLineThin: {
  534. name: "Power Line (Thin)",
  535. thickness: math.unit(0.325, "inches")
  536. },
  537. powerLineThick: {
  538. name: "Power Line (Thick)",
  539. thickness: math.unit(0.720, "inches")
  540. },
  541. carbonNanotube: {
  542. name: "Carbon Nanotube",
  543. thickness: math.unit(4, "nm")
  544. }
  545. }
  546. Object.entries(viewInfo).forEach(([key, value]) => {
  547. views[key] = {
  548. attributes: {
  549. height: {
  550. name: "Height",
  551. power: 1,
  552. type: "length",
  553. base: math.multiply(value.thickness, 253.4385 / 5)
  554. },
  555. thickness: {
  556. name: "Thickness",
  557. power: 1,
  558. type: "length",
  559. base: value.thickness
  560. },
  561. },
  562. image: {
  563. source: "./media/objects/strand.svg"
  564. },
  565. name: value.name,
  566. rename: true
  567. }
  568. if (value.mass) {
  569. views[key].attributes.mass = {
  570. name: "Mass",
  571. power: 3,
  572. type: "mass",
  573. base: value.mass
  574. };
  575. }
  576. });
  577. return makeEntity({ name: "Strand" }, views);
  578. }
  579. })
  580. results.push(makeHeight(
  581. [
  582. ["mitochondria", 0.5, "micrometer"],
  583. ["bacteria", 0.3, "micrometer"],
  584. ["sperm", 4.65, "micrometers"],
  585. ["red-blood-cell", 6.5, "micrometer"],
  586. ["white-blood-cell", 13, "micrometer"],
  587. ["animal-cell", 25, "micrometers"],
  588. ["plant-cell", 75, "micrometers"],
  589. ["amoeba-proteus", 500, "micrometers"],
  590. ["chaos-carolinensis", 1500, "micrometers"],
  591. ],
  592. "Cells",
  593. "cell_"
  594. ))
  595. results.push(makeHeight(
  596. [
  597. ["stop-sign", 36, "inches"],
  598. ["yield-sign", 36, "inches"],
  599. ["pedestrian-crossing", 30, "inches"],
  600. ["highway-exit", 150, "inches"]
  601. ],
  602. "Signs",
  603. ""
  604. ))
  605. results.push({
  606. name: "Game Consoles",
  607. constructor: () => makeVehicleGroup([
  608. {
  609. name: "Switch",
  610. mass: math.unit(10.48, "ounces"),
  611. sides: {
  612. "Front": { height: math.unit(4.01, "inches") },
  613. "Top": { height: math.unit(1.13, "inches") },
  614. "Side": { height: math.unit(4.01, "inches") },
  615. }
  616. }
  617. ],
  618. "Game Consoles",
  619. "",
  620. "objects")
  621. })
  622. results.push({
  623. name: "Electromagnetic Waves",
  624. constructor: () => {
  625. views = {};
  626. viewInfo = [
  627. ["Gamma rays", math.unit(1, "pm")],
  628. ["Hard X-rays", math.unit(20, "pm")],
  629. ["Soft X-rays", math.unit(1, "nm")],
  630. ["Extreme-ultraviolet", math.unit(50, "nm")],
  631. ["UVC", math.unit(200, "nm")],
  632. ["UVB", math.unit(295, "nm")],
  633. ["UVA", math.unit(350, "nm")],
  634. ["Violet", math.unit(415, "nm")],
  635. ["Blue", math.unit(470, "nm")],
  636. ["Cyan", math.unit(490, "nm")],
  637. ["Green", math.unit(530, "nm")],
  638. ["Yellow", math.unit(580, "nm")],
  639. ["Orange", math.unit(610, "nm")],
  640. ["Red", math.unit(690, "nm")],
  641. ["Near-infrared", math.unit(1.2, "um")],
  642. ["Short-wavelength infrared", math.unit(2.2, "um")],
  643. ["Mid-wavelength infrared", math.unit(6.5, "um")],
  644. ["Long-wavelength infrared", math.unit(12, "um")],
  645. ["Far infrared", math.unit(500, "um")],
  646. ["D-band microwaves (mm-wave)", math.unit(2, "mm")],
  647. ["S-band microwaves (ovens, wifi)", math.unit(11, "cm")],
  648. ["L-band microwaves (GPS)", math.unit(22, "cm")],
  649. ["UHF", math.unit(50, "cm")],
  650. ["FM radio", math.unit(3.5, "m")],
  651. ["VHF", math.unit(5, "m")],
  652. ["HF", math.unit(50, "m")],
  653. ["AM radio", math.unit(250, "m")],
  654. ["MF", math.unit(500, "m")],
  655. ["LF", math.unit(5, "km")],
  656. ["VLF", math.unit(50, "km")],
  657. ["ULF", math.unit(500, "km")],
  658. ["SLF", math.unit(5000, "km")],
  659. ["ELF", math.unit(50000, "km")],
  660. ]
  661. viewInfo.forEach(([name, length]) => {
  662. views[name] = {
  663. attributes: {
  664. height: {
  665. name: "Height",
  666. power: 1,
  667. type: "length",
  668. base: math.multiply(length, 2)
  669. }
  670. },
  671. image: {
  672. source: "./media/objects/sine-wave.svg"
  673. },
  674. name: name,
  675. rename: true,
  676. default: name === "Green"
  677. }
  678. });
  679. return makeEntity({ name: "Electromagnetic Waves" }, views);
  680. }
  681. })
  682. results.push(makeHeight(
  683. [
  684. [".308 Winchester", 71.374, "mm", "./media/objects/ammunition/.308 Winchester.svg"],
  685. [".22 LR", 25.40, "mm", "./media/objects/ammunition/.22 LR.svg"],
  686. ["9mm Luger", 29.69, "mm", "./media/objects/ammunition/9mm Luger.svg"],
  687. [".223 Remington", 2.260, "inches", "./media/objects/ammunition/.223 Remington.svg"],
  688. [".30-06 Springfield", 3.340, "inches", "./media/objects/ammunition/.30-06 Springfield.svg"],
  689. ],
  690. "Ammunition",
  691. "",
  692. "objects",
  693. false
  694. ))
  695. results.push(makeHeight(
  696. [
  697. ["No. 1 (11 Oz.)", 4, "inches", "./media/objects/tin-cans/No. 1 (11 Oz.).svg"],
  698. ["No. 2 (20 Oz.)", 4 + 9/16, "inches", "./media/objects/tin-cans/No. 2 (20 Oz.).svg"],
  699. ["No. 3 (52 Oz.)", 7, "inches", "./media/objects/tin-cans/No. 3 (52 Oz.).svg"],
  700. ["No. 5 (60 Oz.)", 5 + 5/8, "inches", "./media/objects/tin-cans/No. 5 (60 Oz.).svg"],
  701. ["No. 10 (110 Oz.)", 7, "inches", "./media/objects/tin-cans/No. 10 (110 Oz.).svg"],
  702. ],
  703. "Tin Cans",
  704. ""
  705. ))
  706. results.push(makeHeight(
  707. [
  708. ["Garden Hose", 0.875, "inches"],
  709. ["1 Inch Fire Hose", 1.25, "inches"],
  710. ["1.5 Inch Fire Hose", 1.85, "inches"],
  711. ["1.75 Inch Fire Hose", 2.1, "inches"],
  712. ["2.5 Inch Fire Hose", 3, "inches"],
  713. ["4 Inch Fire Hose", 4.5, "inches"],
  714. ["5 Inch Fire Hose", 5.6, "inches"],
  715. ],
  716. "Hoses",
  717. ""
  718. ))
  719. results.push(makeHeight(
  720. [
  721. ["12 Inch Culvert", 14.75, "inches"],
  722. ["24 Inch Culvert", 26.75, "inches"],
  723. ],
  724. "Pipes",
  725. ""
  726. ))
  727. results.push(makeHeight(
  728. [
  729. ["000 Capsule", 26.1, "mm"],
  730. ["00E Capsule", 25.3, "mm"],
  731. ["00 Capsule", 23.4, "mm"],
  732. ["0E Capsule", 23.5, "mm"],
  733. ["0 Capsule", 21.6, "mm"],
  734. ["1 Capsule", 19.4, "mm"],
  735. ["2 Capsule", 17.6, "mm"],
  736. ["3 Capsule", 15.7, "mm"],
  737. ["4 Capsule", 14.3, "mm"],
  738. ["5 Capsule", 11.1, "mm"],
  739. ],
  740. "Pills",
  741. ""
  742. ));
  743. results.push(makeHeight(
  744. [
  745. ["10' Container", 8 + 6/12, "feet", "./media/objects/shipping-containers/10-foot.svg", math.unit(536.3, "ft^3")],
  746. ["20' Container", 8 + 6/12, "feet", "./media/objects/shipping-containers/20-foot.svg", math.unit(1169, "ft^3")],
  747. ["40' Container", 8 + 6/12, "feet", "./media/objects/shipping-containers/40-foot.svg", math.unit(2385, "ft^3")],
  748. ["40' High Cube Container", 9 + 6/12, "feet", "./media/objects/shipping-containers/40-foot-high-cube.svg", math.unit(2660, "ft^3")],
  749. ["45' High Cube Container", 9 + 6/12, "feet", "./media/objects/shipping-containers/45-foot-high-cube.svg", math.unit(3040, "ft^3")],
  750. ["Container Front", 8 + 6/12, "feet", "./media/objects/shipping-containers/front-normal.svg", math.unit(2385, "ft^3")],
  751. ["High Cube Container Front", 9 + 6/12, "feet", "./media/objects/shipping-containers/front-high-cube.svg", math.unit(2660, "ft^3")],
  752. ],
  753. "Shipping Containers",
  754. ""
  755. ));
  756. results.push(makeHeight(
  757. [
  758. ["AA", 50, "mm"],
  759. ["AAA", 44.1, "mm"]
  760. ],
  761. "Batteries",
  762. ""
  763. ));
  764. results.push(makeHeight(
  765. [
  766. ["Regular", 32, "mm"],
  767. ["Micro", 15, "mm"]
  768. ],
  769. "SD Cards",
  770. ""
  771. ))
  772. results.push(makeModel({"name": "Dice", "kind": "objects", "forms": [{"name": "D6 Dotted", "views": [{"name": "Front", "height": 0.01415012776851654}, {"name": "Side", "height": 0.01415012776851654}, {"name": "Top", "height": 0.01415012776851654}]}, {"name": "D4", "views": [{"name": "Front", "height": 0.01699800044298172}, {"name": "Side", "height": 0.01699800044298172}, {"name": "Top", "height": 0.017878876999020576}]}, {"name": "D8", "views": [{"name": "Front", "height": 0.013862096704542637}, {"name": "Side", "height": 0.013862096704542637}, {"name": "Top", "height": 0.01808309182524681}]}, {"name": "D10", "views": [{"name": "Front", "height": 0.015351179987192154}, {"name": "Side", "height": 0.015351179987192154}, {"name": "Top", "height": 0.016876159235835075}]}, {"name": "D10 Percentile", "views": [{"name": "Front", "height": 0.015358946286141872}, {"name": "Side", "height": 0.015358946286141872}, {"name": "Top", "height": 0.016862813383340836}]}, {"name": "D12", "views": [{"name": "Front", "height": 0.017607660964131355}, {"name": "Side", "height": 0.017607660964131355}, {"name": "Top", "height": 0.02110980451107025}]}, {"name": "D20", "views": [{"name": "Front", "height": 0.01964765228331089}, {"name": "Side", "height": 0.01964765228331089}, {"name": "Top", "height": 0.023235414177179337}]}, {"name": "D6 Numbered", "views": [{"name": "Front", "height": 0.014152487739920616}, {"name": "Side", "height": 0.014152487739920616}, {"name": "Top", "height": 0.014152484014630318}]}]}))
  773. results.push(makeModel({"name": "Kitchenware", "kind": "objects", "forms": [{"name": "Fork", "views": [{"name": "Front", "height": 0.2818719744682312}, {"name": "Side", "height": 0.2818719744682312}, {"name": "Top", "height": 0.016759976744651794}]}, {"name": "Knife", "views": [{"name": "Front", "height": 0.3395436704158783}, {"name": "Side", "height": 0.3395436704158783}, {"name": "Top", "height": 0.010758467018604279}]}, {"name": "Spoon", "views": [{"name": "Front", "height": 0.2750821113586426}, {"name": "Side", "height": 0.2750821113586426}, {"name": "Top", "height": 0.019756551831960678}]}, {"name": "Wine Bottle", "views": [{"name": "Front", "height": 0.5660512447357178}, {"name": "Side", "height": 0.5660512447357178}, {"name": "Top", "height": 0.15603119134902954}]}, {"name": "Wooden Spoon", "views": [{"name": "Front", "height": 0.6168732643127441}, {"name": "Side", "height": 0.6168732643127441}, {"name": "Top", "height": 0.0339566171169281}]}, {"name": "Cutting Board", "views": [{"name": "Front", "height": 0.021497011184692383}, {"name": "Side", "height": 0.021497011184692383}, {"name": "Top", "height": 0.7172588109970093}]}, {"name": "Plate", "views": [{"name": "Front", "height": 0.05160319805145264}, {"name": "Side", "height": 0.05160319805145264}, {"name": "Top", "height": 0.40615978837013245}]}, {"name": "Bowl", "views": [{"name": "Front", "height": 0.1036841869354248}, {"name": "Side", "height": 0.1036841869354248}, {"name": "Top", "height": 0.24168895184993744}]}, {"name": "Coffee Cup", "views": [{"name": "Front", "height": 0.12534868717193604}, {"name": "Side", "height": 0.12534868717193604}, {"name": "Top", "height": 0.11728732287883759}]}, {"name": "Tea Cup", "views": [{"name": "Front", "height": 0.08793330192565918}, {"name": "Side", "height": 0.08793330192565918}, {"name": "Top", "height": 0.10884171724319458}]}]}))
  774. results.push(makeModel({"name": "Condoms", "kind": "objects", "forms": [{"name": "Narrow", "views": [{"name": "Front", "height": 0.196}]}, {"name": "Standard", "views": [{"name": "Front", "height": 0.208}]}, {"name": "Large", "views": [{"name": "Front", "height": 0.221}]}, {"name": "XL", "views": [{"name": "Front", "height": 0.229}]}]}))
  775. results.push(makeModel({
  776. "name": "Flat Shapes",
  777. "kind": "objects",
  778. "forms": [
  779. {
  780. "name": "Circle",
  781. "views": [
  782. {
  783. "name": "Top",
  784. "height": 1,
  785. "area": 0.78539816339
  786. }
  787. ]
  788. },
  789. {
  790. "name": "Square",
  791. "views": [
  792. {
  793. "name": "Top",
  794. "height": 1,
  795. "area": 1
  796. }
  797. ]
  798. },
  799. ]
  800. }))
  801. results.push(makeModel({
  802. "name": "Optical Disc Tracks",
  803. "kind": "objects",
  804. "forms": [
  805. {
  806. "name": "CD",
  807. "views": [
  808. {
  809. "name": "Top",
  810. "height": 3800e-9
  811. }
  812. ]
  813. },
  814. {
  815. "name": "DVD",
  816. "views": [
  817. {
  818. "name": "Top",
  819. "height": 1800e-9
  820. }
  821. ]
  822. },
  823. {
  824. "name": "HD-DVD",
  825. "views": [
  826. {
  827. "name": "Top",
  828. "height": 1400e-9
  829. }
  830. ]
  831. },
  832. {
  833. "name": "Blu-ray",
  834. "views": [
  835. {
  836. "name": "Top",
  837. "height": 1090e-9
  838. }
  839. ]
  840. },
  841. ]
  842. }))
  843. /* ***Glassware*** */ results.push(makeModel({"name": "Glassware", "kind": "objects", "forms": [{"name": "Erlenmeyer 250mL", "views": [{"name": "Front", "height": 0.13200001418590546}, {"name": "Side", "height": 0.13200001418590546}, {"name": "Top", "height": 0.0820000022649765}]}, {"name": "Erlenmeyer 50mL", "views": [{"name": "Front", "height": 0.07800000160932541}, {"name": "Side", "height": 0.07800000160932541}, {"name": "Top", "height": 0.050999999046325684}]}, {"name": "Florence 250mL", "views": [{"name": "Front", "height": 0.1444360464811325}, {"name": "Side", "height": 0.1444360464811325}, {"name": "Top", "height": 0.08079908788204193}]}, {"name": "Watch Glass", "views": [{"name": "Front", "height": 0.012000001035630703}, {"name": "Side", "height": 0.012000001035630703}, {"name": "Top", "height": 0.1213480606675148}]}, {"name": "Petri Dish 60mm", "views": [{"name": "Front", "height": 0.012477035634219646}, {"name": "Side", "height": 0.012477035634219646}, {"name": "Top", "height": 0.06493081152439117}]}, {"name": "Petri Dish 100mm", "views": [{"name": "Front", "height": 0.014974183402955532}, {"name": "Side", "height": 0.014974183402955532}, {"name": "Top", "height": 0.10384059697389603}]}]}));
  844. /* ***Shapes*** */ results.push(makeModel({"name": "Shapes", "kind": "objects", "forms": [{"name": "Cube", "views": [{"name": "Front", "height": 1.0, "volume": 0.9999999999999999}, {"name": "Side", "height": 1.0, "volume": 0.9999999999999999}, {"name": "Top", "height": 1.0, "volume": 0.9999999999999999}]}, {"name": "Sphere", "views": [{"name": "Front", "height": 1.0, "volume": 0.5242280941679499}, {"name": "Side", "height": 1.0, "volume": 0.5242280941679499}, {"name": "Top", "height": 0.9999998807907104, "volume": 0.5242280941679499}]}, {"name": "Cone", "views": [{"name": "Front", "height": 1.0, "volume": 0.26169426348501956}, {"name": "Side", "height": 1.0, "volume": 0.26169426348501956}, {"name": "Top", "height": 1.0, "volume": 0.26169426348501956}]}, {"name": "Cylinder", "views": [{"name": "Front", "height": 1.0, "volume": 0.7850827506448366}, {"name": "Side", "height": 1.0, "volume": 0.7850827506448366}, {"name": "Top", "height": 0.9999399781227112, "volume": 0.7850827506448366}]}]}));
  845. /* ***PO Boxes*** */ results.push(makeModel({"name": "PO Boxes", "kind": "objects", "forms": [{"name": "XS", "views": [{"name": "Front", "height": 0.07620000094175339, "volume": 0.003988201638571948}, {"name": "Side", "height": 0.07620000094175339, "volume": 0.003988201638571948}, {"name": "Top", "height": 0.3746500015258789, "volume": 0.003988201638571948}]}, {"name": "S", "views": [{"name": "Front", "height": 0.12700000405311584, "volume": 0.006647002860937575}, {"name": "Side", "height": 0.12700000405311584, "volume": 0.006647002860937575}, {"name": "Top", "height": 0.3746500015258789, "volume": 0.006647002860937575}]}, {"name": "M", "views": [{"name": "Front", "height": 0.1396999955177307, "volume": 0.014623405358175506}, {"name": "Side", "height": 0.1396999955177307, "volume": 0.014623405358175506}, {"name": "Top", "height": 0.3746500015258789, "volume": 0.014623405358175506}]}, {"name": "L", "views": [{"name": "Front", "height": 0.2793999910354614, "volume": 0.02924681071635101}, {"name": "Side", "height": 0.2793999910354614, "volume": 0.02924681071635101}, {"name": "Top", "height": 0.3746500015258789, "volume": 0.02924681071635101}]}, {"name": "XL", "views": [{"name": "Front", "height": 0.30480000376701355, "volume": 0.06526148383352366}, {"name": "Side", "height": 0.30480000376701355, "volume": 0.06526148383352366}, {"name": "Top", "height": 0.3746500015258789, "volume": 0.06526148383352366}]}]}));
  846. /* ***Sex Toys*** */ results.push(makeModel({"name": "Sex Toys", "kind": "objects", "forms": [{"name": "Chance", "views": [{"name": "Front", "height": 0.44450023770332336, "volume": 0.0024940192673095084}, {"name": "Side", "height": 0.44450023770332336, "volume": 0.0024940192673095084}, {"name": "Top", "height": 0.18736252188682556, "volume": 0.0024940192673095084}]}, {"name": "Fenrir", "views": [{"name": "Front", "height": 0.32130947709083557, "volume": 0.0014611460855557515}, {"name": "Side", "height": 0.32130947709083557, "volume": 0.0014611460855557515}, {"name": "Top", "height": 0.11701348423957825, "volume": 0.0014611460855557515}]}]}));
  847. /* ***LEGO*** */ results.push(makeModel({"name": "LEGO", "kind": "objects", "forms": [{"name": "1x1", "views": [{"name": "Front", "height": 0.01119999960064888, "volume": 3.3640754098503267e-07}, {"name": "Angled", "height": 0.01119999960064888, "volume": 3.3640754098503267e-07}, {"name": "Side", "height": 0.01119999960064888, "volume": 3.3640754098503267e-07}, {"name": "Top", "height": 0.00800000037997961, "volume": 3.3640754098503267e-07}, {"name": "Bottom", "height": 0.00800000037997961, "volume": 3.3640754098503267e-07}]}, {"name": "1x2", "views": [{"name": "Front", "height": 0.011200000531971455, "volume": 5.669391684500056e-07}, {"name": "Angled", "height": 0.011200000531971455, "volume": 5.669391684500056e-07}, {"name": "Side", "height": 0.011200000531971455, "volume": 5.669391684500056e-07}, {"name": "Top", "height": 0.00800000037997961, "volume": 5.669391684500056e-07}, {"name": "Bottom", "height": 0.00800000037997961, "volume": 5.669391684500056e-07}]}, {"name": "2x2", "views": [{"name": "Front", "height": 0.01119999960064888, "volume": 1.0245981619502385e-06}, {"name": "Angled", "height": 0.01119999960064888, "volume": 1.0245981619502385e-06}, {"name": "Side", "height": 0.01119999960064888, "volume": 1.0245981619502385e-06}, {"name": "Top", "height": 0.01600000075995922, "volume": 1.0245981619502385e-06}, {"name": "Bottom", "height": 0.01600000075995922, "volume": 1.0245981619502385e-06}]}, {"name": "2x4", "views": [{"name": "Front", "height": 0.011200000531971455, "volume": 1.939916458324457e-06}, {"name": "Angled", "height": 0.011200000531971455, "volume": 1.939916458324457e-06}, {"name": "Side", "height": 0.011200000531971455, "volume": 1.939916458324457e-06}, {"name": "Top", "height": 0.01600000075995922, "volume": 1.939916458324457e-06}, {"name": "Bottom", "height": 0.01600000075995922, "volume": 1.939916458324457e-06}]}]}));
  848. /* ***Bricks*** */ results.push(makeModel({"name": "Bricks", "kind": "objects", "forms": [{"name": "Cinderblock", "views": [{"name": "Front", "height": 0.1936749964952469, "volume": 0.0072986710396893105}, {"name": "Angled", "height": 0.1936749964952469, "volume": 0.0072986710396893105}, {"name": "Side", "height": 0.1936749964952469, "volume": 0.0072986710396893105}, {"name": "Top", "height": 0.1936749964952469, "volume": 0.0072986710396893105}]}, {"name": "Clay Brick", "views": [{"name": "Front", "height": 0.05714999884366989, "volume": 0.0008421204681292792}, {"name": "Angled", "height": 0.05714999884366989, "volume": 0.0008421204681292792}, {"name": "Side", "height": 0.05714999884366989, "volume": 0.0008421204681292792}, {"name": "Top", "height": 0.10159999877214432, "volume": 0.0008421204681292792}]}]}));
  849. /* ***Barrels*** */ results.push(makeModel({"name": "Barrels", "kind": "objects", "forms": [{"name": "55 Gallon Drum", "views": [{"name": "Front", "height": 0.8716663122177124, "volume": 0.20819799602031708}, {"name": "Top", "height": 0.617232084274292, "volume": 0.20819799602031708}]}, {"name": "Sixer Keg", "views": [{"name": "Front", "height": 0.5937249660491943, "volume": 0.02345781959593296}, {"name": "Top", "height": 0.2349499762058258, "volume": 0.02345781959593296}]}, {"name": "Half Barrel Keg", "views": [{"name": "Front", "height": 0.5937249660491943, "volume": 0.07046438753604889}, {"name": "Top", "height": 0.42044833302497864, "volume": 0.07046438753604889}]}]}));
  850. /* ***Pipettes*** */ results.push(makeModel({"name": "Pipettes", "kind": "objects", "forms": [{"name": "Transfer Pipette", "views": [{"name": "Front", "height": 0.1491980254650116, "volume": 0.20819799602031708}, {"name": "Top", "height": 0.010719738900661469, "volume": 0.20819799602031708}, {"name": "Bottom", "height": 0.010719738900661469, "volume": 0.20819799602031708}]}]}));
  851. /* ***Straws*** */ results.push(makeModel({"name": "Straws", "kind": "objects", "forms": [{"name": "Normal", "views": [{"name": "Front", "height": 0.2159000039100647}, {"name": "Top", "height": 0.006095999851822853}]}, {"name": "Wide", "views": [{"name": "Front", "height": 0.2159000039100647}, {"name": "Top", "height": 0.008127997629344463}]}, {"name": "Smoothie", "views": [{"name": "Front", "height": 0.2159000039100647}, {"name": "Top", "height": 0.00914399977773428}]}, {"name": "Boba", "views": [{"name": "Front", "height": 0.2159000039100647}, {"name": "Top", "height": 0.012191999703645706}]}]}));
  852. /* ***Coins*** */ results.push(makeModel({"name": "Coins", "kind": "objects", "forms": [{"name": "U.S. Dollar", "views": [{"name": "Top", "height": 0.026492198929190636, "mass": 0.008100000210106373}, {"name": "Side", "height": 0.0020000000949949026, "mass": 0.008100000210106373}]}, {"name": "U.S. Half Dollar", "views": [{"name": "Top", "height": 0.03060699999332428, "mass": 0.011339999735355377}, {"name": "Side", "height": 0.00215000007301569, "mass": 0.011339999735355377}]}, {"name": "U.S. Quarter", "views": [{"name": "Top", "height": 0.024257000535726547, "mass": 0.005669999867677689}, {"name": "Side", "height": 0.0017500000540167093, "mass": 0.005669999867677689}]}, {"name": "U.S. Dime", "views": [{"name": "Top", "height": 0.017906999215483665, "mass": 0.002268000040203333}, {"name": "Side", "height": 0.0013500000350177288, "mass": 0.002268000040203333}]}, {"name": "U.S. Nickel", "views": [{"name": "Top", "height": 0.021208999678492546, "mass": 0.004999999888241291}, {"name": "Side", "height": 0.0019500000635161996, "mass": 0.004999999888241291}]}, {"name": "U.S. Penny", "views": [{"name": "Top", "height": 0.019050000235438347, "mass": 0.0024999999441206455}, {"name": "Side", "height": 0.0015200000489130616, "mass": 0.0024999999441206455}]}, {"name": "UK \u00a35", "views": [{"name": "Top", "height": 0.028400002047419548, "mass": 0.028279999271035194}, {"name": "Side", "height": 0.0028900043107569218, "mass": 0.028279999271035194}]}, {"name": "UK \u00a32", "views": [{"name": "Top", "height": 0.028400002047419548, "mass": 0.012000000104308128}, {"name": "Side", "height": 0.0025000039022415876, "mass": 0.012000000104308128}]}, {"name": "UK \u00a31", "views": [{"name": "Top", "height": 0.023430000990629196, "mass": 0.008750000037252903}, {"name": "Side", "height": 0.0028000001329928637, "mass": 0.008750000037252903}]}, {"name": "UK 50p", "views": [{"name": "Top", "height": 0.027300003916025162, "mass": 0.00800000037997961}, {"name": "Side", "height": 0.0017800000496208668, "mass": 0.00800000037997961}]}, {"name": "UK 20p", "views": [{"name": "Top", "height": 0.021400000900030136, "mass": 0.004999999888241291}, {"name": "Side", "height": 0.0017000001389533281, "mass": 0.004999999888241291}]}, {"name": "UK 10p", "views": [{"name": "Top", "height": 0.024500001221895218, "mass": 0.006500000134110451}, {"name": "Side", "height": 0.0018500001169741154, "mass": 0.006500000134110451}]}, {"name": "UK 5p", "views": [{"name": "Top", "height": 0.018000001087784767, "mass": 0.0032500000670552254}, {"name": "Side", "height": 0.0017000001389533281, "mass": 0.0032500000670552254}]}, {"name": "UK 2p", "views": [{"name": "Top", "height": 0.02590000070631504, "mass": 0.007120000198483467}, {"name": "Side", "height": 0.00203000009059906, "mass": 0.007120000198483467}]}, {"name": "UK 1p", "views": [{"name": "Top", "height": 0.0203000009059906, "mass": 0.0035600000992417336}, {"name": "Side", "height": 0.0016500001074746251, "mass": 0.0035600000992417336}]}, {"name": "Canadian Two Dollar", "views": [{"name": "Top", "height": 0.02800000086426735, "mass": 0.007300000172108412}, {"name": "Side", "height": 0.0018000000854954123, "mass": 0.007300000172108412}]}, {"name": "Canadian Dollar", "views": [{"name": "Top", "height": 0.026500001549720764, "mass": 0.0062699997797608376}, {"name": "Side", "height": 0.0019500007620081306, "mass": 0.0062699997797608376}]}, {"name": "2 Euro", "views": [{"name": "Top", "height": 0.02575000189244747, "mass": 0.008500000461935997}, {"name": "Side", "height": 0.0022000002209097147, "mass": 0.008500000461935997}]}, {"name": "1 Euro", "views": [{"name": "Top", "height": 0.023250000551342964, "mass": 0.007499999832361937}, {"name": "Side", "height": 0.0023300000466406345, "mass": 0.007499999832361937}]}, {"name": "500 Yen", "views": [{"name": "Top", "height": 0.026500001549720764, "mass": 0.0071000000461936}, {"name": "Side", "height": 0.0018100000452250242, "mass": 0.0071000000461936}]}, {"name": "50 Yen", "views": [{"name": "Top", "height": 0.021000003442168236, "mass": 0.004000000189989805}, {"name": "Side", "height": 0.0015100002055987716, "mass": 0.004000000189989805}]}, {"name": "5 Yen", "views": [{"name": "Top", "height": 0.02200000174343586, "mass": 0.0037499999161809683}, {"name": "Side", "height": 0.0015100002055987716, "mass": 0.0037499999161809683}]}]}));
  853. /* ***Doors*** */ results.push(makeModel({"name": "Doors", "kind": "objects", "forms": [{"name": "6 Panel Door", "views": [{"name": "Front", "height": 2.0320000648498535, "mass": 11.793399810791016}, {"name": "Angled", "height": 2.0320000648498535, "mass": 11.793399810791016}, {"name": "Side", "height": 2.0320000648498535, "mass": 11.793399810791016}, {"name": "Top", "height": 0.03492499887943268, "mass": 11.793399810791016}]}, {"name": "French Door", "views": [{"name": "Front", "height": 2.0320000648498535, "mass": 31.75149917602539}, {"name": "Angled", "height": 2.0320000648498535, "mass": 31.75149917602539}, {"name": "Side", "height": 2.0320000648498535, "mass": 31.75149917602539}, {"name": "Top", "height": 0.03492499887943268, "mass": 31.75149917602539}]}, {"name": "Fire Door", "views": [{"name": "Front", "height": 2.0320000648498535, "mass": 54.54545593261719}, {"name": "Angled", "height": 2.0320000648498535, "mass": 54.54545593261719}, {"name": "Side", "height": 2.0320000648498535, "mass": 54.54545593261719}, {"name": "Top", "height": 0.10518216341733932, "mass": 54.54545593261719}]}]}));
  854. /* ***INSERT HERE*** */
  855. return results;
  856. }