proj shift variable LSHIFT=50 read tanker.gf report /box:bw `A relatively simple weight curve in the demo: WEIGHT 0.5 @-97.57 , 10 @ -95, 17 @-85.1 , 14 @-85 , 14 @-22.1, 16 @ -22, 16 @ -6.1, 22 @-6.0 , 10 @ 2.898 0 6.5 ADD"Crew and Effects " 4 -1 0 11.5 /MAX 4 ADD"Engine Room Spares" 15 -8 0 2 /MAX 15 ADD"Bosun's Stores " 8 -91.3 0 10.5 /MAX 8 ADD"Hoses and Fittings" 6 -25.88 0 9.899999 `Load some tanks to make a pretty picture: macro tank tank %1 load %2 cont "%3" %4 / .TANK CGC1.C .95 "ALCOHOL" .789 .TANK CGC2* .75 "TURPENTINE" .873 .TANK CGC3.C .98 "LINSEED" .934 .TANK CGC4.C .98 "BENZENE" .879 .TANK CGC5.C .5 "TURPENTINE" .873 .TANK CGC6.C .5 "ALCOHOL" .789 .TANK CGS2* .25 "BENZENE" .879 .TANK CGS4* .5 "TURPENTINE" .873 .TANK CGS5* .65 "LINSEED" .934 .TANK CGS6* .95 "BENZENE" .879 .TANK WBWT1* .95 "SALT WATER" 1.025 .TANK WBWT5* .1 "SALT WATER" 1.025 .TANK WBDB1* 1 "SALT WATER" 1.025 .TANK "WBDB2*, WBDB3*, WBDB4*" 1 "SALT WATER" 1.025 .TANK WBAPK.C .98 "SALT WATER" 1.025 .TANK FODT1* .98 "FUEL OIL" .87 .TANK FOER* .98 "FUEL OIL" .87 .TANK FOSET.P .98 "FUEL OIL" .87 .TANK FODAY.P .98 "FUEL OIL" .87 .TANK DODBER.S .98 "DIESEL OIL" .75 .TANK DODBER.P .98 "DIESEL OIL" .75 .TANK DODAY.S .98 "DIESEL OIL" .75 .TANK LOSYS.C .98 "LUBE OIL" .924 .TANK LOSTO.S .98 "LUBE OIL" .924 .TANK FW.* 1 "FRESH WATER" 1 TANK OFF `Save all weights including tank loads. `This is the original, unshifted origin. if fexist tanker.cnd then erase tanker.cnd /nor write (loads) tanker.cnd macro status solve variable l1=0, l2=100f set l1={l1} plus %1 set l2={l2} plus %1 lwl {l1}, {l2} status fixed, tanks:total, displ display (*) status profile /page%:20 ls /notable:plot /profile / .status 0 `Save heel and trim variable t={TRIM}, h={HEEL} `Shift the geometry: enter pm shift {LSHIFT},0,0 write tanker.gf1 quit pm `The loads must be retrieved from the file `since bringing in the new geometry deleted them: macro case ` / run tanker.cnd /call `Now we're going to be clever and shift the ADDs `automatically. Of course in this case it would be `much quicker to manually edit the ADD commands `(but not as much fun). MACRO ADD IF "%1"="PREFIX" THEN EXIT `ignore that oddball ADD ADD "%1", *, *+{LSHIFT} /NOWARN / variable (str) s, s1 read (data) tanker.cnd macro madd if eof then exit read s /line set s1=item 1, "{s}" if "{s1}"<>"ADD" then exit madd .{s} exit madd / .madd read (data) off heel {h} | trim {t} weight report /all /profile solve depth, lcg `<-- here's where the weight curve gets shifted weight report /all /profile .status {lshift} `Save everything with the shifting done: save tanker.sav print preview /thick:4,6 report off