proj ccane clear enter pmx /direct template version "Need update" "PMX version must be %1 or greater." / macro stop %1 pm / macro v if VERSION<%1 then .version %1 exit stop "quit" end / .v 16.48 real r:=10 real d:=2 real x,y,a,a0,da,dl a:=0. da:=RAD(10.) dl:=r*SIN(da/2) a0:=RAD(-90.)+da/2 bool bend: =true macro cr1 `1. make cyl create cane\cx.s class sail inboard -99 cyl 0,-10-r*SIN(da)-10,0, 0,10+r*SIN(da),0, d // `2. trim ends x:=(r+d)*SIN(da/2) y:=(r+d)*COS(da/2)-r create p.s if bend then in -99 loc @ -d = 0,-r, x,y, -x, y loc @ 0+d = 0,-r, x,y, -x, y else ends -d,d top d bot -d out dl in -dl end // modify cane\cx.s fit (int) p.s // delete p.s `3. duplicate create cane\cx2.s shape cane\cx.s // `4. divide create p.s in -99 loc @ -d = -r,-d, -d/2,-d, 0+d/2, d, -r,d loc @ 0+d = -r,-d, -d/2,-d, 0+d/2, d, -r,d // modify cane\cx.s fit (int) p.s // delete p.s create p.s in -99 loc @ -d = -d/2,-d, r,-d, r, d, 0+d/2,d loc @ 0+d = -d/2,-d, r,-d, r, d, 0+d/2,d // modify cane\cx2.s fit (int) p.s // delete p.s / macro cr2 if bend then a:=%1*da+a0 else a:=RAD(90.) end `1. rotate create cane\c%1.s shape cane\cx.s rotate 0,DEG(a),0 // create cane\c%1a.s shape cane\cx2.s rotate 0,DEG(a),0 // `2. relocate if bend then x:=r*SIN(a) y:=r*COS(a) else x:=0-r y:=(n-%1-0.5)*(r*da) end modify cane\c%1.s vector 0,x,y // modify cane\c%1a.s vector 0,x,y // / card n:=2*r-2 .cr1 .cr2 (n,1) 0 delete cane\cx.s delete cane\cx2.s bend:=false card m:=4 card n2:=m*r-n real h:=m*r-(dl*2)+13.162 .cr1 .cr2 (n2,1) n delete cane\cx.s delete cane\cx2.s shift -r, r/2, h modify cane ref -r,-r/2,0 / str ghsos:=PROGFILE("GHSOS.EXE") macro append FOUT (CREATE) "GHSOS.SAV" FOUT () copy "%1", "%2" /APPEND FOUT () quit FOUT (CLOSE) shell {ghsos} / `Note to developers: you really need an APPEND function in GHSX! bool ok macro surf surface (cane\c%1%2.s) surf.$; color:%3 if %1<2 then ok:=COPY("surf.$","%4") else .append "surf.$", "%4" end / n:=(n+n2)/2 .surf (n,2) 0, "", "red", "s1.$" .surf (n,2) 1, "a", "red", "s2.$" .surf (n,2) 0, "a", "white", "s3.$" .surf (n,2) 1, "", "white", "s4.$" read fv.gf real di:=0.2 create stays class sail comp fwd.s inb -99 cyl -53.8, 0, 24.46, -r, -r/2, h, di spacing 0.5 comp afts.s inb -99 cyl 37.5, 11.7, 15.2, -r, -r/2, h, di spacing 0.5 comp aftp.s inb -99 cyl 37.5, -11.7, 15.2, -r, -r/2, h, di spacing 0.5 / macro light create lights\%1.s class sail inb -99 cyl -53.8, 0, 24.46, -r,-r/2,h diam di @ %2, di*5 @ %2+di*5 // / macro lights .light "%2%1", %1*6+%3 / .lights (8,1) 0, "r", 2.0 .lights (8,1) 0, "g", 4.0 .lights (8,1) 0, "b", 6.0 macro surf surface (%1) %2; opacity:1; color:%3 / .surf "hull\hull.c", "hull", "green" .surf "hull\focsle.c", "focsle", "red" .surf "hull\skeg.c", "skeg", "blue" .surf "stays", "stays", "black" .surf "lights\r*", "rfwd", "red" .surf "lights\g*", "gfwd", "green" .surf "lights\b*", "bfwd", "blue" render hull, focsle, skeg, stays, rfwd, gfwd, bfwd, s1.$, s2.$, s3.$, s4.$ surface (cane) write fvcc.gf quit pm report draft 6 vcg 8 solve weight, lcg display wind 100 hmmt wind /band:0.05 hmmt report type (cane) set /swing:-90 hmmt report display status profile:outboard report close /preview