const ctx = __CAD_APP; const {commandInterface: oci, io} = ctx.occService; const height = 70; const width = 50; const thickness = 30; const neckradius = thickness / 4; const neckheight = height / 10; const major = 2 * Math.PI; const minor = neckheight / 10; let pi = Math.PI; oci.box("b1", "10.0", "15.0", "20.0"); oci.box("b2", "-min", "5.0", "7.5", "10.0", "-max", "20.0", "25.0", "30.0"); oci.bcut("resultOfCut", "b1", "b2"); oci.bfuse("resultOfUnion", "b1", "b2"); oci.bcommon("resultOfIntersection", "b1", "b2"); oci.vertex("v1", -width / 2, "0", "0") oci.vertex("v2", -width / 2, -thickness / 4, "0") oci.edge("e1", "v1", "v2") oci.point("p2", -width / 2, -thickness / 4, "0") oci.point("p3", "0", -thickness / 2, "0") oci.point("p4", width / 2, -thickness / 4, "0") oci.gcarc("arc", "cir", "p2", "p3", "p4") oci.mkedge("e2", "arc") oci.vertex("v4", width / 2, -thickness / 4, "0") oci.vertex("v5", width / 2, "0", "0") oci.edge("e3", "v4", "v5") oci.wire("w1", "e1", "e2", "e3") oci.copy("w1", "w2") oci.tmirror("w2", "0", "0", "0", "0", "1", "0") oci.wire("w3", "w1", "w2") oci.mkplane("f", "w3") oci.prism("p", "f", "0", "0", height) oci.explode("p", "e") oci.blend("b", "p", thickness / 12, "p_1", thickness / 12, "p_2", thickness / 12, "p_3", thickness / 12, "p_4", thickness / 12, "p_5", thickness / 12, "p_6", thickness / 12, "p_7", thickness / 12, "p_8", thickness / 12, "p_9", thickness / 12, "p_10", thickness / 12, "p_11", thickness / 12, "p_12", thickness / 12, "p_13", thickness / 12, "p_14", thickness / 12, "p_15", thickness / 12, "p_16", thickness / 12, "p_17", thickness / 12, "p_18") oci.pcylinder("c", neckradius, neckheight) oci.ttranslate("c", "0", "0", height) oci.bfuse("f", "b", "c") oci.explode("c", "f") oci.offsetshape("body", "f", -thickness / 50, "1.e-3", "c_2") oci.cylinder("c1", "0", "0", height, "0", "0", "1", neckradius * 0.99) oci.cylinder("c2", "0", "0", height, "0", "0", "1", neckradius * 1.05) oci.ellipse("el1", 2 * pi, neckheight / 2, 2 * pi, neckheight / 4, major, minor) oci.ellipse("el2", 2 * pi, neckheight / 2, 2 * pi, neckheight / 4, major, minor / 4) oci.trim("arc1", "el1", "0", pi) oci.trim("arc2", "el2", "0", pi) oci._2dcvalue("el1", "0", "x1", "y1") oci._2dcvalue("el1", pi, "x2", "y2") oci.line("l", "x1", "y1", "x2-x1", "y2-y1") oci.parameters("l", "x2", "y2", "1.e-9", "U") oci.trim("s", "l", "0", "U") oci.mkedge("E1OnS1", "arc1", "c1", "0", pi) oci.mkedge("E2OnS1", "s", "c1", "0", "U") oci.mkedge("E1OnS2", "arc2", "c2", "0", pi) oci.mkedge("E2OnS2", "s", "c2", "0", "U") oci.wire("tw1", "E1OnS1", "E2OnS1") oci.wire("tw2", "E1OnS2", "E2OnS2") oci.mkedgecurve("tw1", "1.e-5") oci.mkedgecurve("tw2", "1.e-5") oci.thrusections("-N", "thread", "1", "0", "tw1", "tw2") oci.bop("body", "thread") oci.bopfuse("bottle") ctx.services.exposure.addOnScene(io.getShell("bottle"));