National War Museum
Design Competition Entry

//Ashoka Chakra
chkC1=Circle.ByCenterPointRadius(Point.Origin(),190);
chkPc1=PolyCurve.ByPoints(Point.PruneDuplicates(Flatten(Point.ByCoordinates
({-4.3182,-2.9278,-1.6079,-5.552,0,5.552,1.6079,2.9278,4.3182},
{32.8,32.8903,33.4260,65.2,157.6,65.2,33.4260,32.8903,32.8})<1>.
Rotate(Point.Origin(),Vector.ZAxis(),(360..0..#25)<2>)),0.001),true);
chkA1=Arc.ByThreePoints(Point.ByCoordinates(-8.5,166.5),Point.ByCoordinates(0,158),
Point.ByCoordinates(8.5,166.5));
chkA2=List.DropItems(chkA1.Rotate(Point.Origin(),Vector.ZAxis(),360..0..#25),1).
Rotate(Point.Origin(),Vector.ZAxis(),7.5);
chkL2=Line.ByStartPointEndPoint(List.ShiftIndices(chkA2.StartPoint,-1),chkA2.EndPoint);
chkPc2=PolyCurve.ByJoinedCurves(Flatten(Transpose({chkA2,chkL2})));
chkSld1=chkPc1.ExtrudeAsSolid(Vector.ZAxis(),1).Union(chkC1.ExtrudeAsSolid
(Vector.ZAxis(),1).Difference(chkPc2.ExtrudeAsSolid(Vector.ZAxis(),1)));
chkSrf1=chkSld1.Intersect(Plane.XY());
//Data file
fil1=File.FromPath("..\DataExtraction\\boundaries.xls");
//Boundary
exl4=Excel.ReadFromFile(fil1,("Boundary"+(1..2))<1>,true);
exl5=List.DropItems(List.Transpose(exl4<1>)<1><2>,1);
exl6=Math.Round(String.ToNumber(exl5),3);
minXDed=718180;
minYDed=3167444;
enx2=List.GetItemAtIndex(exl6<1>,0)-minXDed;
eny2=List.GetItemAtIndex(exl6<1>,1)-minYDed;
stx2=List.GetItemAtIndex(exl6<1>,3)-minXDed;
sty2=List.GetItemAtIndex(exl6<1>,4)-minYDed;
ep2=Point.ByCoordinates(enx2,eny2);
sp2=Point.ByCoordinates(stx2,sty2);
bdpn1=List.SortByKey(sp2[0],{0,1,11,9,10,2,8,6,7,5,4,3});
bdry1=Polygon.ByPoints(bdpn1["sorted list"]);
bdpn2=List.SortByKey(sp2[1],{0,1,6,5,4,3,2});
bdry2=Polygon.ByPoints(bdpn2["sorted list"]);
bdry3=Polygon.ByPoints(Flatten({bdpn1["sorted list"][9..10],bdpn2["sorted list"][{1,0,6}]}));
bdry4=PolySurface.ByJoinedSurfaces({bdry1.Patch(),bdry3.Patch(),bdry2.Patch()}).PerimeterCurves();
//Trees
exl7=String.ToNumber(Transpose(Excel.ReadFromFile(fil1,("trees"),true)));
trpt1=List.FirstItem(List.SortByKey(Point.ByCoordinates(exl7[0]-minXDed,exl7[1]-minYDed,0),exl7[3]));
trbl1=bdry1.ContainmentTest(trpt1)||bdry2.ContainmentTest(trpt1);
trpt2=List.FilterByBoolMask(trpt1,trbl1)["in"];
trsl1=(Circle.ByCenterPointRadius(trpt2,0.5)).ExtrudeAsSolid(Vector.ZAxis(),0.5);
//Existing Buildings
exl1=Excel.ReadFromFile(fil1, ("Building"+(1..18))<1>,true);
exl2=List.DropItems(List.Transpose(exl1<1>)<1><2>,1);
exl3=Math.Round(String.ToNumber(exl2),3);
enx1=List.GetItemAtIndex(exl3<1>,0)-minXDed;
eny1=List.GetItemAtIndex(exl3<1>,1)-minYDed;
stx1=List.GetItemAtIndex(exl3<1>,3)-minXDed;
sty1=List.GetItemAtIndex(exl3<1>,4)-minYDed;
ep1=Point.ByCoordinates(enx1,eny1);
sp1=Point.ByCoordinates(stx1,sty1);
Line.ByStartPointEndPoint(sp1,ep1);
//Building 0
bg1dr1=Vector.ByTwoPoints(sp1[0][2],sp1[0][1]);
bg1pt1=sp1[0][1].Translate(bg1dr1,9);
bg1pt2=sp1[0][28].Translate(bg1dr1,2);
bg1pt3=sp1[0][19].Translate(bg1dr1,1);
bg1pt4=bg1pt3.Translate(18,-30,0);
bg1pt5=bg1pt4.Translate(0,0,12);
//Amphiteater
ampcir1=Circle.ByCenterPointRadius(bg1pt4,20).ExtrudeAsSolid(Vector.ZAxis(),-4);
ampcir2=Circle.ByCenterPointRadius(bg1pt4.Translate(Vector.ZAxis(),-4),12).ExtrudeAsSolid(Vector.ZAxis(),-1);
site1=PolyCurve.ByJoinedCurves(bdry4).ExtrudeAsSolid(Vector.ZAxis(),-8);
site2=(site1.Difference(ampcir1)).Difference(ampcir2);
//Corridor
crdDir1=Vector.ByTwoPoints(sp1[1][3],sp1[2][2]);
crdDir2=Vector.ByTwoPoints(sp1[14][0],sp1[1][3]);
crdPnt1=sp1[14][0].Translate(crdDir1,3).Translate(crdDir2,-45);
crdPln1=Plane.ByOriginNormal(crdPnt1,crdDir2);
crdSld1=Rectangle.ByWidthLength(crdPln1,9,6).Translate(0,0,4.5).ExtrudeAsSolid(crdDir2,290);
crdPnt2=crdPnt1.Translate(crdDir2,290).Translate(0,0,-2);
//Tunnel 1
tn1Dir1=Vector.ByTwoPoints(crdPnt2,bg1pt4.Translate(0,0,-2.25));
tn1Pln1=Plane.ByOriginNormal(crdPnt2,tn1Dir1);
tn1Sld1=Rectangle.ByWidthLength(tn1Pln1,3.5,6).ExtrudeAsSolid(tn1Dir1);
tn1Sld2=tn1Sld1.Difference(ampcir1);
//Tunnel 2
tn2Dir1=Vector.ByTwoPoints(bg1pt4.Translate(0,0,-2.25),sp2[0][1].Translate(0,0,-2.25));
tn2Pln1=Plane.ByOriginNormal(bg1pt4.Translate(0,0,-2),tn2Dir1);
tn2Sld1=Rectangle.ByWidthLength(tn2Pln1,3.5,6).ExtrudeAsSolid(tn2Dir1);
tn2Sld2=tn2Sld1.Difference(ampcir1);
//Vertical Transition
vt1Sld1=Circle.ByCenterPointRadius(crdPnt2.Translate(0,0,-2),8).ExtrudeAsSolid(Vector.ZAxis(),14);
crdSld2=Solid.ByUnion({crdSld1,tn1Sld2,vt1Sld1,tn2Sld2});
crdSld3=Solid.ByUnion({crdSld1,vt1Sld1});
site3=site2.Difference(crdSld2);
site4=site3.Explode()[10];
site5=site3.Explode()[0..9];
site6=site3.Explode()[12..15];
//Main Chakra
chkSrf2=chkSrf1.Scale(0.1).Translate(bg1pt4.X,bg1pt4.Y,11).Thicken(0.5);
chkSrf2A=chkSrf1.Scale(0.1).Translate(bg1pt4.X,bg1pt4.Y,11);
bg1dr2=Vector.ByTwoPoints(bg1pt1,bg1pt4);
bg1dr3=Vector.ByTwoPoints(bg1pt3,bg1pt4);
bg1dr4=Vector.ByTwoPoints(bg1pt2,bg1pt4);
bg1dr10=Vector.ByTwoPoints(sp1[0][10],sp1[0][15]);
bg1pt10=sp1[0][10].Translate(bg1dr10,-50);
bg1pt11=sp1[0][15].Translate(bg1dr10,20);
bg1dr11=Vector.ByTwoPoints(bg1pt4,bg1pt10);
bg1dr12=Vector.ByTwoPoints(bg1pt4,bg1pt11);