-
Amira Abdel-Rahman authoredAmira Abdel-Rahman authored
voxelDesigner.js 13.92 KiB
// Amira Abdel-Rahman
// (c) Massachusetts Institute of Technology 2020
var gridSize=10;
var occupancy=[];
function createTruss(truss){ //todo move to geometry library
var setupEmpty={//empty
nodes: [
],
edges: [
],
//material properties - AISI 1095 Carbon Steel (Spring Steel)
ndofs : 3*6,
animation : {
showDisplacement : true,
exaggeration : 20e2,
speed:3.0
},
viz : {
minStress:10e6,
maxStress: -10e6,
colorMaps:[coolwarm,YlGnBu, winter ,jet],
colorMap:0,
},
};
// console.log(setupEmpty)
var setup=JSON.parse(JSON.stringify(setupEmpty));
var material={
area:2.38*2.38/5,
density:0.028,
stiffness:4000
};
var force=new THREE.Vector3(0,0,0);
var restrained=false;
var fixed=[true,true,true,true,true,true];
var free=[false,false,false,true,true,true];
var rollerX=[true,false,false,true,true,true];
var rollerY=[false,true,false,true,true,true];
var rollerZ=[false,false,true,true,true,true];
for(var i=0;i<truss.nnx;i++){
for(var j=0;j<truss.nny;j++){
for(var k=0;k<truss.nnz;k++){
// //3d inverter & gripper
// if((i==(truss.nny-1)/2&& j==0&&k==(truss.nny-1)/2) ){
// force=new THREE.Vector3(0,10,0);
// }else{
// force=new THREE.Vector3(0,0,0);
// }
//3d gripper
if(j==(truss.nny-1)){
if((i==(truss.nny-1)/2&&k==0) ){
force=new THREE.Vector3(0,-10,0);
}else if((i==0&&k==(truss.nny-1)/2) ){
force=new THREE.Vector3(0,-10,0);
}else if((i==(truss.nny-1)/2&&k==(truss.nny-1)) ){
force=new THREE.Vector3(0,-10,0);
}else if((i==(truss.nny-1)&&k==(truss.nny-1)/2) ){
force=new THREE.Vector3(0,-10,0);
}else{
force=new THREE.Vector3(0,0,0);
}
}else{
force=new THREE.Vector3(0,0,0);
}
addNode(setup,new THREE.Vector3(i*truss.dx,j*truss.dy,k*truss.dz),restrained,force,material);
//3d
if(j==(0)){
if((i==(truss.nny-1)/2&&k==0) ){
setup.nodes[setup.nodes.length-1].restrained_degrees_of_freedom=fixed;
}else if((i==0&&k==(truss.nny-1)/2) ){
setup.nodes[setup.nodes.length-1].restrained_degrees_of_freedom=fixed;
}else if((i==(truss.nny-1)/2&&k==(truss.nny-1)) ){
setup.nodes[setup.nodes.length-1].restrained_degrees_of_freedom=fixed;
}else if((i==(truss.nny-1)&k==(truss.nny-1)/2) ){
setup.nodes[setup.nodes.length-1].restrained_degrees_of_freedom=fixed;
}else{
setup.nodes[setup.nodes.length-1].restrained_degrees_of_freedom=free;
}
}else{
setup.nodes[setup.nodes.length-1].restrained_degrees_of_freedom=free;
}
// //3d gripper
// if(j==(truss.nny-1)){
// if((i==(truss.nny-1)/2&&k==0) ){
// setup.nodes[setup.nodes.length-1].fixedDisplacement=new THREE.Vector3(0,0,-1);
// }else if((i==0&&k==(truss.nny-1)/2) ){
// setup.nodes[setup.nodes.length-1].fixedDisplacement=new THREE.Vector3(-1,0,0);
// }else if((i==(truss.nny-1)/2&&k==(truss.nny-1)) ){
// setup.nodes[setup.nodes.length-1].fixedDisplacement=new THREE.Vector3(0,0,1);
// }else if((i==(truss.nny-1)&&k==(truss.nny-1)/2) ){
// setup.nodes[setup.nodes.length-1].fixedDisplacement=new THREE.Vector3(1,0,0);
// }
// }
//auxetic/compliant
// if(j==(truss.nny-1)/2.0){
// if((i==0&&k==0) ){
// setup.nodes[setup.nodes.length-1].fixedDisplacement=new THREE.Vector3(-1,0,-1);
// }else if((i==0&&k==(truss.nny-1)) ){
// setup.nodes[setup.nodes.length-1].fixedDisplacement=new THREE.Vector3(-1,0,1);
// }else if((i==(truss.nny-1)&&k==(truss.nny-1)) ){
// setup.nodes[setup.nodes.length-1].fixedDisplacement=new THREE.Vector3(1,0,1);
// }else if((i==(truss.nny-1)&&k==0) ){
// setup.nodes[setup.nodes.length-1].fixedDisplacement=new THREE.Vector3(1,0,-1);
// }
// }
// //twist
// if(j==(truss.nny-1)/2.0){
// if((i==0&&k==0) ){
// setup.nodes[setup.nodes.length-1].fixedDisplacement=new THREE.Vector3(1,0,0);
// }else if((i==0&&k==(truss.nny-1)) ){
// setup.nodes[setup.nodes.length-1].fixedDisplacement=new THREE.Vector3(0,0,-1);
// }else if((i==(truss.nny-1)&&k==(truss.nny-1)) ){
// setup.nodes[setup.nodes.length-1].fixedDisplacement=new THREE.Vector3(-1,0,0);
// }else if((i==(truss.nny-1)&&k==0) ){
// setup.nodes[setup.nodes.length-1].fixedDisplacement=new THREE.Vector3(0,0,1);
// }
// }
//shear
if(j==(truss.nny-1)/2.0){
if((i==0&&k==0) ){
setup.nodes[setup.nodes.length-1].fixedDisplacement=new THREE.Vector3(1,0,0);
}else if((i==0&&k==(truss.nny-1)) ){
setup.nodes[setup.nodes.length-1].fixedDisplacement=new THREE.Vector3(1,0,0);
}else if((i==(truss.nny-1)&&k==(truss.nny-1)) ){
setup.nodes[setup.nodes.length-1].fixedDisplacement=new THREE.Vector3(1,0,0);
}else if((i==(truss.nny-1)&&k==0) ){
setup.nodes[setup.nodes.length-1].fixedDisplacement=new THREE.Vector3(1,0,0);
}
}
}
}
}
if(truss.localConnections){
for(var i=0;i<truss.nnx*truss.nny*truss.nnz;i++){
var x=parseInt(setup.nodes[i].position.x/truss.dx);
var y=parseInt(setup.nodes[i].position.y/truss.dy);
var z=parseInt(setup.nodes[i].position.z/truss.dz);
if(y!=truss.nny-1){
var x1=x;
var y1=y+1;
var z1=z;
addEdge(setup,x*truss.nnz*truss.nny+y*truss.nnz+z,(x1)*truss.nnz*truss.nny+(y1)*truss.nnz+z1,material);
}
if(x!=truss.nnx-1){
var x1=x+1;
var y1=y;
var z1=z;
addEdge(setup,x*truss.nnz*truss.nny+y*truss.nnz+z,(x1)*truss.nnz*truss.nny+(y1)*truss.nnz+z1,material);
}
if(x!=truss.nnx-1 &&y!=truss.nny-1 ){
var x1=x+1;
var y1=y+1;
var z1=z;
addEdge(setup,x*truss.nnz*truss.nny+y*truss.nnz+z,(x1)*truss.nnz*truss.nny+(y1)*truss.nnz+z1,material);
}
if(x!=truss.nnx-1 && y>0){
var x1=x+1;
var y1=y-1;
var z1=z;
addEdge(setup,x*truss.nnz*truss.nny+y*truss.nnz+z,(x1)*truss.nnz*truss.nny+(y1)*truss.nnz+z1,material);
}
if(z!=truss.nnz-1){
var x1=x;
var y1=y;
var z1=z+1;
addEdge(setup,x*truss.nnz*truss.nny+y*truss.nnz+z,(x1)*truss.nnz*truss.nny+(y1)*truss.nnz+z1,material);
}
if(z!=truss.nnz-1&&y!=truss.nny-1){
var x1=x;
var y1=y+1;
var z1=z+1;
addEdge(setup,x*truss.nnz*truss.nny+y*truss.nnz+z,(x1)*truss.nnz*truss.nny+(y1)*truss.nnz+z1,material);
}
if(z!=truss.nnz-1&&x!=truss.nnx-1){
var x1=x+1;
var y1=y;
var z1=z+1;
addEdge(setup,x*truss.nnz*truss.nny+y*truss.nnz+z,(x1)*truss.nnz*truss.nny+(y1)*truss.nnz+z1,material);
}
if(z!=truss.nnz-1&&y>0){
var x1=x;
var y1=y-1;
var z1=z+1;
addEdge(setup,x*truss.nnz*truss.nny+y*truss.nnz+z,(x1)*truss.nnz*truss.nny+(y1)*truss.nnz+z1,material);
}
if(z!=truss.nnz-1&&x>0){
var x1=x-1;
var y1=y;
var z1=z+1;
addEdge(setup,x*truss.nnz*truss.nny+y*truss.nnz+z,(x1)*truss.nnz*truss.nny+(y1)*truss.nnz+z1,material);
}
if(z!=truss.nnz-1&&y!=truss.nny-1&&x!=truss.nnx-1){
var x1=x+1;
var y1=y+1;
var z1=z+1;
addEdge(setup,x*truss.nnz*truss.nny+y*truss.nnz+z,(x1)*truss.nnz*truss.nny+(y1)*truss.nnz+z1,material);
}
if(z!=truss.nnz-1&&y>0&&x>0){
var x1=x-1;
var y1=y-1;
var z1=z+1;
addEdge(setup,x*truss.nnz*truss.nny+y*truss.nnz+z,(x1)*truss.nnz*truss.nny+(y1)*truss.nnz+z1,material);
}
if(z!=truss.nnz-1&&y>0&&x!=truss.nnx-1){
var x1=x+1;
var y1=y-1;
var z1=z+1;
addEdge(setup,x*truss.nnz*truss.nny+y*truss.nnz+z,(x1)*truss.nnz*truss.nny+(y1)*truss.nnz+z1,material);
}
if(z!=truss.nnz-1&&y!=truss.nny-1&&x>0){
var x1=x-1;
var y1=y+1;
var z1=z+1;
addEdge(setup,x*truss.nnz*truss.nny+y*truss.nnz+z,(x1)*truss.nnz*truss.nny+(y1)*truss.nnz+z1,material);
}
}
}else{
for(var i=0;i<truss.nnx*truss.nny*truss.nnz-1;i++){
for(var j=0;j<truss.nnx*truss.nny*truss.nnz;j++){
if(i!=j){
addEdge(setup,i,j,material);
}
}
}
}
setup.hierarchical=false;
// var data = {
// key: 'value'
// };
truss.setup=setup;
var materials=[];
var supports=[];
var loads=[];
var fixedDisplacements=[];
// setup.materials=json.materials;
// setup.supports=json.supports;
// setup.loads=json.loads;
// setup.fixedDisplacements=json.fixedDisplacements;
// var materials1=json.materials;
// var supports1=json.supports;
// var loads1=json.loads;
// var fixedDisplacements1=json.fixedDisplacements;
// supports=[
// [
// ]
// ];
// var materials1=[];
// var supports1=[];
// var loads1=[];
// var fixedDisplacements1=[];
// for (var i=1;i<materials1.length;i++ ){
// var material1=materials1[i];
// var boundingMaterial=new _rhino3dm.BoundingBox(
// [
// material1[0].min.x,
// material1[0].min.y,
// material1[0].min.z
// ],
// [
// material1[0].max.x,
// material1[0].max.y,
// material1[0].max.z
// ]);
// materials.push([ boundingMaterial,material1[1]]);
// }
// for (var i=0;i<supports1.length;i++ ){
// var support1=supports1[i];
// var boundingSupport=new _rhino3dm.BoundingBox(
// [
// support1[0].min.x,
// support1[0].min.y,
// support1[0].min.z
// ],
// [
// support1[0].max.x,
// support1[0].max.y,
// support1[0].max.z
// ]);
// supports.push([ boundingSupport,support1[1]]);
// }
// for (var i=0;i<loads1.length;i++ ){
// var load1=loads1[i];
// var boundingLoad=new _rhino3dm.BoundingBox(
// [
// load1[0].min.x,
// load1[0].min.y,
// load1[0].min.z
// ],
// [
// load1[0].max.x,
// load1[0].max.y,
// load1[0].max.z
// ]);
// loads.push([ boundingLoad,load1[1]]);
// }
// for (var i=0;i<fixedDisplacements1.length;i++ ){
// var fixedDisplacement1=fixedDisplacements1[i];
// var boundingFixedDisplacement=new _rhino3dm.BoundingBox(
// [
// fixedDisplacement1[0].min.x,
// fixedDisplacement1[0].min.y,
// fixedDisplacement1[0].min.z
// ],
// [
// fixedDisplacement1[0].max.x,
// fixedDisplacement1[0].max.y,
// fixedDisplacement1[0].max.z
// ]);
// fixedDisplacements.push([ boundingFixedDisplacement,fixedDisplacement1[1]]);
// }
// changeMaterialFromBox(setup,materials);
// restrainFromBox(setup,supports);
// loadFromBox(setup,loads);
// displacementFromBox(setup,fixedDisplacements);
// // setup.viz.colorMaps=[YlGnBu,coolwarm, winter ,jet];
// setup.viz.minStress=10e6;
// setup.viz.maxStress=-10e6;
// setup.viz.exaggeration=1.0;
// setup.animation.exaggeration=1.0;
// setup.viz.colorMaps=[];
// setup.numTimeSteps=json.numTimeSteps;
// setup.maxNumFiles=json.maxNumFiles;
// setup.poisson=json.poisson;
// setup.scale=json.scale;
// setup.linear=json.linear;
// setup.globalDamping=json.globalDamping;
// setup.thermal=json.thermal;
// saveJSON();
// console.log(setup)
return setup;
console.log("Success!")
}