Created
February 21, 2020 00:32
-
-
Save pschatzmann/425dab2d4b4d7ed8101e734bffca9731 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| {"cells":[{"metadata":{},"cell_type":"markdown","source":"# A Parameterized 3D Quadrotor\nI was struggling quite a bit to integrate the parameters into the Scad4J API.\nHere is an example which demonstrates how we can use the Scad4J library to build an simple RC quad.\n\n## Setup\nFirst we need to install the scad4j library with the help of maven"},{"metadata":{"trusted":true},"cell_type":"code","source":"%classpath config resolver maven-public https://software.pschatzmann.ch/repository/maven-public/\n%classpath add mvn ch.pschatzmann:scad4j:0.0.1-SNAPSHOT","execution_count":1,"outputs":[{"output_type":"stream","text":"Added new repo: maven-public\n","name":"stdout"},{"output_type":"display_data","data":{"method":"display_data","application/vnd.jupyter.widget-view+json":{"version_minor":0,"model_id":"","version_major":2}},"metadata":{}},{"output_type":"display_data","data":{"method":"display_data","application/vnd.jupyter.widget-view+json":{"version_minor":0,"model_id":"e6c8332c-7e5b-4380-a9bc-398f4d517c51","version_major":2}},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"All classes that we will use are in the module ch.pschatzmann.scad4j. So we import all classes:"},{"metadata":{"trusted":true},"cell_type":"code","source":"import ch.pschatzmann.scad4j._\n","execution_count":2,"outputs":[{"output_type":"execute_result","execution_count":2,"data":{"text/plain":"import ch.pschatzmann.scad4j._\n"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"We will use the locally installed openscad as renderer and display the result with simple 2D graphincs "},{"metadata":{"trusted":true},"cell_type":"code","source":"SCAD.setFormatter(new ch.pschatzmann.scad4j.format.OpenSCADFormatter())\nSCAD.setDisplay3D(false)\n\nvar model = new SCAD()\n","execution_count":3,"outputs":[{"output_type":"execute_result","execution_count":3,"data":{"text/plain":"scad4j V0.1"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"# A Quadrotor \nWe will base our design of a single motor section on a hollow cylinder "},{"metadata":{"trusted":true},"cell_type":"code","source":"model.addParameter(\"motorDiameter\",8.6)\n .addParameter(\"heightMotor\",6)\n .addParameter(\"pinHeight\",10)\n .addParameter(\"outerRingDiameter\",75)\n .addParameter(\"quadHeight\",3)\n .addParameter(\"quadWidth\",1)\n .addParameter(\"$fn\",80)\n\n\nvar motorRing = model.difference(\n model.cylinder().height(\"quadHeight\").diameter(\"outerRingDiameter\").center(),\n model.cylinder().height(\"quadHeight*2\").diameter(\"outerRingDiameter-(quadWidth*2)\").center()\n ).toModule(\"motorRing\")\n\nmotorRing.display","execution_count":4,"outputs":[{"output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 2 elements\n","name":"stderr"},{"output_type":"execute_result","execution_count":4,"data":{"image/png":"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"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"The motor will me mounted on a inner cylinder"},{"metadata":{"trusted":true},"cell_type":"code","source":"var motorInnerRing = model.cylinder().height(\"heightMotor\").diameter(\"motorDiameter\").center\n .translate.values(\"0\",\"0\",\"-(quadHeight/2)\").toModule(\"motorInnerRing\")\n\nmotorInnerRing.display","execution_count":5,"outputs":[{"output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 1 elements\n","name":"stderr"},{"output_type":"execute_result","execution_count":5,"data":{"image/png":"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"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"We add the two rings and generate some spikes with the help of rotated cubes"},{"metadata":{"trusted":true},"cell_type":"code","source":"var motorBase = model.union(\n motorRing,\n motorInnerRing,\n model.cube().size(\"outerRingDiameter\",\"quadWidth\",\"quadHeight\").center,\n model.cube().size(\"outerRingDiameter\",\"quadWidth\",\"quadHeight\").center\n .rotate.values(0,0,45),\n model.cube().size(\"quadWidth\",\"outerRingDiameter\",\"quadHeight\").center,\n model.cube().size(\"quadWidth\",\"outerRingDiameter\",\"quadHeight\").center\n .rotate.values(0,0,45)\n).toModule(\"motorBase\")\n \nmotorBase.display","execution_count":6,"outputs":[{"output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 7 elements\n","name":"stderr"},{"output_type":"execute_result","execution_count":6,"data":{"image/png":"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"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"Now we cut a hole in the center"},{"metadata":{"trusted":true},"cell_type":"code","source":"var motor = model.difference(\n motorBase,\n model.cylinder().height(\"heightMotor*3\").diameter(\"motorDiameter-(quadWidth*3)\").center\n).toModule(\"motor\")\n \nmotor.display","execution_count":7,"outputs":[{"output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 13 elements\n","name":"stderr"},{"output_type":"execute_result","execution_count":7,"data":{"image/png":"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"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"We are almost done - we just copy the motor into the 4 corners"},{"metadata":{"trusted":true},"cell_type":"code","source":"var quad = model.group (\n model.command(\"motorDistance = outerRingDiameter/2;\"),\n model.ref(\"motor\").translate.values(\"motorDistance\",\"motorDistance\",\"0\"),\n model.ref(\"motor\").translate.values(\"-motorDistance\",\"-motorDistance\",\"0\"),\n model.ref(\"motor\").translate.values(\"motorDistance\",\"-motorDistance\",\"0\"),\n model.ref(\"motor\").translate.values(\"-motorDistance\",\"motorDistance\",\"0\")\n).toModule(\"quad\")\n\nquad.display ","execution_count":8,"outputs":[{"output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 52 elements\n","name":"stderr"},{"output_type":"execute_result","execution_count":8,"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAIAAAB7GkOtAAAssElEQVR42u3d3a9Wxb3AcW4NJWQHFA4IbDYJUSLBylsQNxBDDNIYQjTUhEBK00DwJbupFYmC9KKYBmPUUmMJaERr6suF8aJeaNKmpvZvOP/A+SfODWc8047TmVnzrLeZ9Zu1vsn3gijs/ey11/P7rFnP86y17M6d/yEiogm2jE1ARAQAREQEAEREBABERAQAREQEAEREBABERAQAREQEAEREBABERAQAREQEAEREBABERAQAREQEAEREBABERAQAREQEAEREBABERAQAREQEAEREBABERAQAREQEAEREAEBERABAREQAQEREAEBERABAREQAQEREAEBERABAREQAQEREAEBERABAREQAQEREAEBERABAREQAQEREAEBERABAREQAQEREAEBERABAREQAQEREAEBERABARAQAbAUiIgAgIiIAICIiACAiIgAgIiIAICIiACAiIgAgIiIAICIiACAiIgAgIiIAICIiACAiIgAgIiIAICIiACAiIgAgIiIAICIiACAiIgAgIiIAICIiACAiIgAgIiIAICICACIiAgAiIgIAIiICACIiAgAiIgIAIiICACIiAgAiIgIAIiICACIiAgAiIgIAIiICACIiAgAiIgIAIiICACIiAgAiIgIAIiICACIiAgAiIgIAIiICACIiAgAiIgBgKxARAQAREQEAEREBABERAQAREQEAEREBABERAQAREQEAEREBABERAQAREQEAEREBABERAQAREQEAEREBABERAQAREQEAEREBABERAQAREQEAEREBABERAQAREQEAEREAEBERABAREQAQEREAEBERABAREQAQEREAEBERABAREQAQEREAEBERABAREQAQEREAEBERABAREQAQEREAEBERABAREQAQEREAEBERABAREQAQEREAEBERABARAQAREQEAEREBABERAQAREQEAUbP+978fSBEblggAqIBBf9/O1XY7Ftc67XnsXqfFY/NOh5/eYocNRABAgsb91h+vnt825+RM/74AUP3kZ1udjp/fhgdEAEDJh/72h9eYuW8aHACnn/5yOx4QAQB1Hfq7Dq9XQ9+uCABMLA6IAICaDX07B4DvPtviGCAWAPMTnbr4oA4JiACAAnN//xObVM70jwBgDKgPQP0H1h0A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7E4AQFS2BDUB0P1maY0qcuws7ceMPFTVo/t+pJs5/R0A2H8AgGgMDLQAwCk+ZPPfrCbSI7uW27UAgH0GAIjGVhcALpy926nOLM7QzgfusnOmvwHAmf5BANhDAIBoEhJ0B0D33KlVTokG/cE9y+2cud8FAPYHACCaYikA0J15ai7YiaMrgx09tCKYM/d7BIDfPgAQkYvBiAHgtwwARDSjkQHAL5QAgKg9BmUBwG+NAIAoSQIB4JdCAEA0WHkAYDsTABAREQAQEREAEBERABAREQAQEQEAm4CICACIiAgAiIgIAIiICACIiAgAiIgIAIiICACIiAgAiIgIAIiICACIiAgAiIgIAIiICACIiAgAiIgIAIiICACIiAgAiIgIAIiICACIiAgAiIgIAIiICACIiAgAiIgAgIiIAICIiACAiIgAgIiIAICIiACAiIgAgIiIAICIiACAiIgAgIiIAICIiACAiIgAgIiIAICIiACAiIgAgIiIAICIiACAiIgAgIiIAICIiACAiIgAgIiIAICICADYCkREAEBERABAREQAQEREAEBERABAREQAQEREAEBERABAREQAQEREAEBERABAREQAQEREAEBERABAREQAQEREAEBERABAREQAQEREAEBERABAREQAQEREAEBERABARAQAREQEAEREBABERAQAREQEAEREBABERAQAREQEAEREBABERAQAREQEAEREBABERAQAREQEAEREBABERAQAREQEAEREBABERAQAREQEAEREBABERAQAREQEAEREAMBWICICACIiAgAiIgIAIiICACIiAgAiIgIAIiICACIiAgAiIgIAIiICACIiAgAiIgIAIiICACIiAgAiIgIAIiICACIiAgAiIgIAIiICACIiAgAiIqrq/wB7Iz9vBd2SYwAAAABJRU5ErkJggg=="},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"Finally we can display the generated OpenSCAD source code:"},{"metadata":{"trusted":true},"cell_type":"code","source":"quad","execution_count":9,"outputs":[{"output_type":"execute_result","execution_count":9,"data":{"text/plain":"\n$fn = 80;\nheightMotor = 6;\nmotorDiameter = 8.6;\nouterRingDiameter = 75;\npinHeight = 10;\nquadHeight = 3;\nquadWidth = 1;\n\n\nmodule motor() {\n \n difference() {\n motorBase();\n cylinder(h=heightMotor*3,d=motorDiameter-(quadWidth*3),center=true); \n } \n}\n\nmodule motorBase() {\n \n union() {\n motorRing();\n motorInnerRing();\n cube([outerRingDiameter,quadWidth,quadHeight],center=true); \n rotate(a=[0,0,45]) cube([outerRingDiameter,quadWidth,quadHeight],center=true); \n cube([quadWidth,outerRingDiameter,quadHeight],center=true); \n rotate(a=[0,0,45]) cube([quadWidth,outerRingDiameter,quadHeight],center=true); \n } \n}\n\nmodule motorInnerRing() {\n translate([0,0,-(quadHeight/2)]) cylinder(h=heightMotor,d=motorDiameter,center=true); \n}\n\nmodule motorRing() {\n \n difference() {\n cylinder(h=quadHeight,d=outerRingDiameter,center=true); \n cylinder(h=quadHeight*2,d=outerRingDiameter-(quadWidth*2),center=true); \n } \n}\n\nmodule quad() {\n {\n motorDistance = outerRingDiameter/2;\n translate([motorDistance,motorDistance,0]) motor();\n translate([-motorDistance,-motorDistance,0]) motor();\n translate([motorDistance,-motorDistance,0]) motor();\n translate([-motorDistance,motorDistance,0]) motor();\n } \n}\n\nquad();"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"## Motor Holder\nThe motor holder will mount the motor and fit into the motor holes on the frame. We want to generate this separatly so we create a new model object."},{"metadata":{"trusted":true},"cell_type":"code","source":"var model1 = new SCAD()\n\nmodel1.addParameters(model)\n .addParameter(\"heightMotor\",15)\n .addParameter(\"pinWidth\",5.75)\n .addParameter(\"cutWidth\",1)\n .addParameter(\"width\",1)\n\nvar motorHolder = model1.group(\n model1.cylinder()\n .height(\"pinHeight\")\n .diameter(\"pinWidth\"),\n model1.difference(\n model1.cylinder()\n .height(\"heightMotor\")\n .diameter(\"motorDiameter+(width*2)\"),\n model1.cylinder() \n .height(\"heightMotor\")\n .diameter(\"motorDiameter\")\n .translate.values(0.0,0.0,3.0)\n ).translate.values(\"0.0\",\"0.0\",\"pinHeight\")\n).toModule(\"motorHolder\")\n\n\nmotorHolder.display","execution_count":10,"outputs":[{"output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 3 elements\n","name":"stderr"},{"output_type":"execute_result","execution_count":10,"data":{"image/png":"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"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"In order to be able to fit the motor with the wires we cut out a section on the side of the cylinder"},{"metadata":{"trusted":true},"cell_type":"code","source":"var cutout = model1.cube().size(\"cutWidth\",\"motorDiameter\",\"1000\").center()\n .translate().values(\"0\",\"motorDiameter/2-1\",\"0\")\n\nvar motorHolderWithCut = model1.difference(motorHolder, cutout)\n .toModule(\"motorHolderWithCut\")\n\nmotorHolderWithCut.display","execution_count":11,"outputs":[{"output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 5 elements\n","name":"stderr"},{"output_type":"execute_result","execution_count":11,"data":{"image/png":"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"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"Here is the generated OpenSCAD code for the motor mount. We need to print this 4 times..."},{"metadata":{"trusted":true},"cell_type":"code","source":"motorHolderWithCut","execution_count":12,"outputs":[{"output_type":"execute_result","execution_count":12,"data":{"text/plain":"\n$fn = 80;\ncutWidth = 1;\nheightMotor = 15;\nmotorDiameter = 8.6;\nouterRingDiameter = 75;\npinHeight = 10;\npinWidth = 5.75;\nquadHeight = 3;\nquadWidth = 1;\nwidth = 1;\n\n\nmodule motorHolder() {\n {\n cylinder(h=pinHeight,d=pinWidth); \n translate([0.0,0.0,pinHeight]) \n difference() {\n cylinder(h=heightMotor,d=motorDiameter+(width*2)); \n translate([0.0,0.0,3.0]) cylinder(h=heightMotor,d=motorDiameter); \n } \n } \n}\n\nmodule motorHolderWithCut() {\n \n difference() {\n motorHolder();\n translate([0,motorDiameter/2-1,0]) cube([cutWidth,motorDiameter,1000],center=true); \n } \n}\n\nmotorHolderWithCut();"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"# Mount for the Flight Controller\n\nAs our last example I will just add a Rasperry PI Zero mount to demonstrate how we can extend the frame, that we have defined in the first chapter. We load the mount into a STL file.\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"import java.net.URL\n\nvar model2 = new SCAD()\nvar urlPI = new URL(\"https://raw.githubusercontent.com/pschatzmann/openscad-models/master/SimpleStackablePi-Zero-Case.scad\")\nmodel2.setParameterValue(\"numberOfPis\",\"1\").setParameterValue(\"corkRadiusBack\",\"10\")\nvar pi = model2.scad(urlPI)\n\npi.display\n","execution_count":13,"outputs":[{"output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 22 elements\n","name":"stderr"},{"output_type":"execute_result","execution_count":13,"data":{"image/png":"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"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"We include the PI into the quad defintion to combine the two designs:"},{"metadata":{"trusted":true},"cell_type":"code","source":"quad.translate().values(\"widthOfPi/2\",\"depthOfPi/2\",\"0\")\nquad.importDocument(pi)\nquad.display","execution_count":14,"outputs":[{"output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 74 elements\n","name":"stderr"},{"output_type":"execute_result","execution_count":14,"data":{"image/png":"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"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"quad","execution_count":15,"outputs":[{"output_type":"execute_result","execution_count":15,"data":{"text/plain":"\n$fn = 80;\nheightMotor = 6;\nmotorDiameter = 8.6;\nouterRingDiameter = 75;\npinHeight = 10;\nquadHeight = 3;\nquadWidth = 1;\n\n\nmodule motor() {\n \n difference() {\n motorBase();\n cylinder(h=heightMotor*3,d=motorDiameter-(quadWidth*3),center=true); \n } \n}\n\nmodule motorBase() {\n \n union() {\n motorRing();\n motorInnerRing();\n cube([outerRingDiameter,quadWidth,quadHeight],center=true); \n rotate(a=[0,0,45]) cube([outerRingDiameter,quadWidth,quadHeight],center=true); \n cube([quadWidth,outerRingDiameter,quadHeight],center=true); \n rotate(a=[0,0,45]) cube([quadWidth,outerRingDiameter,quadHeight],center=true); \n } \n}\n\nmodule motorInnerRing() {\n translate([0,0,-(quadHeight/2)]) cylinder(h=heightMotor,d=motorDiameter,center=true); \n}\n\nmodule motorRing() {\n \n difference() {\n cylinder(h=quadHeight,d=outerRingDiameter,center=true); \n cylinder(h=quadHeight*2,d=outerRingDiameter-(quadWidth*2),center=true); \n } \n}\n\nmodule quad() {\n {\n motorDistance = outerRingDiameter/2;\n translate([motorDistance,motorDistance,0]) motor();\n translate([-motorDistance,-motorDistance,0]) motor();\n translate([motorDistance,-motorDistance,0]) motor();\n translate([-motorDistance,motorDistance,0]) motor();\n } \n}\n\n/**\n A simple stackable Rasperry PI Zero case. In the parameter you can indicate the number of levels. \n \n*/\n\nnumberOfPis=1; // number of PIs to be stacked\nwidthOfPi=63.5; // x width of a rawspberry pi\ndepthOfPi=28.7; // y depth of a rawspberry pi\nroundedCornersDiam=0; // minkowski on cover\ncoverHeight=1.5; // height of cover\nholePos=3; // x,y position of right hole\npinDiameter=2.4; // diameter of pin & hole\nholeDiameterOffset=0.7; // make hole bigger then pin\nconnectorHeight=9; // height of the connector pin\nspacerBottomHeight=5; // height of the bottom spacer\nspacerTopHeight=7; // height of the top spacer\npartOffset=30; // we draw the parts by 3cm separated\nholeWidthPos=widthOfPi-holePos;// x position of left hole\n\n// the base of the top and bottom\nmodule base() {\n minkowski() {\n cube([widthOfPi,depthOfPi,coverHeight]);\n sphere(roundedCornersDiam,$fn=20);\n }\n}\n\n// print a single connector pin\nmodule connector(height) {\n cylinder(height, d=pinDiameter, $fn=100);\n}\n\n// print a connector pin\nmodule connectors(connectorHeight) {\n translate([holePos,holePos,0]) \n connector(connectorHeight);\n translate([holePos,depthOfPi-holePos,0]) \n connector(connectorHeight);\n translate([holeWidthPos,depthOfPi-holePos,0]) \n connector(connectorHeight);\n translate([holeWidthPos,holePos,0]) \n connector(connectorHeight);\n}\n\n// prints a single spacer (with a hole)\nmodule spacer(height) {\n difference() {\n size = holePos*2;\n cube([size, size, height]);\n \n translate([holePos,holePos,0]) \n cylinder(height, d=pinDiameter+holeDiameterOffset,$fn=100);\n }\n}\n\n// prints all spacers\nmodule spacers(height, offset) {\n size = holePos*2;\n translate([0,0,offset]) \n spacer(height);\n translate([0,depthOfPi-size,offset]) \n spacer(height);\n translate([holeWidthPos-holePos,depthOfPi-size,offset]) \n spacer(height);\n translate([holeWidthPos-holePos,0,offset]) \n spacer(height);\n}\n\n// bommtom of a case\nmodule piCaseBottom() {\n union() {\n base(); \n spacers(spacerBottomHeight,0);\n connectors(connectorHeight);\n }\n}\n\n// top of a pi case with an optional ornament pattern\nmodule piCaseTop() {\n union() {\n base();\n spacers(spacerTopHeight,-spacerTopHeight);\n }\n}\n\n\n// center of a stackable pi with top and buttom spacers\nmodule piCaseCenter() {\n union() {\n piCaseBottom();\n piCaseTop();\n }\n}\n\n// print of a final case with n (parts) pi's\nmodule piStackedCase(parts=1){\n piCaseBottom();\n if (parts>1) {\n for (i = [2 : parts]) {\n translate([0, 0,partOffset*(i-1)]) \n piCaseCenter(); \n }\n }\n translate([0, 0, partOffset*parts]) \n piCaseTop();\n}\n\n\n// print of a final single case\nmodule piCase() {\n piStackedCase(1);\n}\n\n\n// test print to make sure that the spacer and connector fit\nmodule testSpacerAndPin() {\n spacer(5,5);\n \n translate([10,0,0]) {\n union() {\n spacer(5,5);\n translate([holePos,holePos,0]) \n connector(connectorHeight);\n }\n }\n }\n \n // test print to check the location of the holes in the pi\n module testDimensions() {\n spacers(1,0);\n connectors(4);\n }\n\n\n//piCaseBottom(); \n// piCaseTop();\n// testDimensions();\n// testSpacerAndPin();\npiStackedCase(numberOfPis);\ntranslate([widthOfPi/2,depthOfPi/2,0]) quad();"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"name":"scala","display_name":"Scala","language":"scala"},"language_info":{"nbconverter_exporter":"","codemirror_mode":"text/x-scala","name":"Scala","mimetype":"","file_extension":".scala","version":"2.11.12"},"widgets":{"application/vnd.jupyter.widget-state+json":{"state":{"03fa4a97-5afc-4c0d-ae66-aed3fa435474":{"model_module":"beakerx","model_module_version":"*","model_name":"BxHTMLModel","state":{"background_color":null,"color":null,"font_family":"","font_size":"","font_style":"","font_weight":"","layout":"IPY_MODEL_0b1d2b8d-5a2f-4a0c-a280-c7a9f70ab6d7","msg_throttle":3,"placeholder":"","value":"scad4j-0.0.1-SNAPSHOT.jar","visible":true}},"0b1d2b8d-5a2f-4a0c-a280-c7a9f70ab6d7":{"model_module":"@jupyter-widgets/base","model_module_version":"*","model_name":"LayoutModel","state":{"_model_module_version":"*","_view_module_version":"*","align_content":"","align_self":"","border":"","bottom":"","flex":"","height":"","justify_content":"","left":"","margin":"","max_height":"","max_width":"","min_height":"","min_width":"","msg_throttle":3,"overflow":"","overflow_x":"","overflow_y":"","padding":"","right":"","top":""}},"3f10ad70-b0d1-4412-90e9-4491005bfb53":{"model_module":"@jupyter-widgets/base","model_module_version":"*","model_name":"LayoutModel","state":{"_model_module_version":"*","_view_module_version":"*","align_content":"","align_self":"","border":"","bottom":"","flex":"","height":"","justify_content":"","left":"","margin":"","max_height":"","max_width":"","min_height":"","min_width":"","msg_throttle":3,"overflow":"","overflow_x":"","overflow_y":"","padding":"","right":"","top":""}},"8f5f5310-a202-4d56-aa66-c432c61ff2e1":{"model_module":"@jupyter-widgets/base","model_module_version":"*","model_name":"LayoutModel","state":{"_model_module_version":"*","_view_module_version":"*","align_content":"","align_self":"","border":"","bottom":"","flex":"","height":"","justify_content":"","left":"","margin":"","max_height":"","max_width":"","min_height":"","min_width":"","msg_throttle":3,"overflow":"","overflow_x":"","overflow_y":"","padding":"","right":"","top":""}},"9cea906e-8812-433c-8291-002e80c3e0e9":{"model_module":"@jupyter-widgets/base","model_module_version":"*","model_name":"LayoutModel","state":{"_model_module_version":"*","_view_module_version":"*","align_content":"","align_self":"","border":"","bottom":"","flex":"","height":"","justify_content":"","left":"","margin":"","max_height":"","max_width":"","min_height":"","min_width":"","msg_throttle":3,"overflow":"","overflow_x":"","overflow_y":"","padding":"","right":"","top":""}},"ed3e6487-0c67-4fac-855c-6274fc126195":{"model_module":"beakerx","model_module_version":"*","model_name":"FoldoutModel","state":{"background_color":null,"children":["IPY_MODEL_03fa4a97-5afc-4c0d-ae66-aed3fa435474"],"color":null,"description":"","disabled":false,"font_family":"","font_size":"","font_style":"","font_weight":"","headerLabel":"Added jar: ","hidePreview":false,"layout":"IPY_MODEL_9cea906e-8812-433c-8291-002e80c3e0e9","msg_throttle":3,"visible":true}},"efdb14bf-f02c-4cc1-829c-b68e23d38b5e":{"model_module":"@jupyter-widgets/base","model_module_version":"*","model_name":"LayoutModel","state":{"_model_module_version":"*","_view_module_version":"*","align_content":"","align_self":"","border":"","bottom":"","flex":"","height":"","justify_content":"","left":"","margin":"","max_height":"","max_width":"","min_height":"","min_width":"","msg_throttle":3,"overflow":"","overflow_x":"","overflow_y":"","padding":"","right":"","top":""}}},"version_major":2,"version_minor":0}},"toc":{"nav_menu":{},"number_sections":false,"sideBar":false,"skip_h1_title":false,"base_numbering":1,"title_cell":"Table of Contents","title_sidebar":"Contents","toc_cell":false,"toc_position":{},"toc_section_display":false,"toc_window_display":false}},"nbformat":4,"nbformat_minor":4} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment