summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff-webhosting.net>2020-08-08 11:53:00 +0200
committerJörg Frings-Fürst <debian@jff-webhosting.net>2020-08-08 11:53:00 +0200
commitb623f5953691b2a0614e6f1f4def86bdbb9a4113 (patch)
tree18102bd36f7e22eb2ba2b9f880e4cb29346f4cb8
parent359b557176b9bb2ff1aed2082641eed39c358d0d (diff)
New upstream version 5.2.0Beta2.1upstream/5.2.0Beta2.1upstream
-rw-r--r--.hgtags27
-rw-r--r--CMake/FindCMocka.cmake9
-rw-r--r--CMake/FindFreeImage.cmake58
-rw-r--r--CMake/FindLibzip.cmake61
-rw-r--r--CMake/FindZlib.cmake43
-rw-r--r--CMake/NSIS.template.in988
-rw-r--r--CMakeLists.txt42
-rw-r--r--app/CMakeLists.txt5
-rw-r--r--app/bin/CMakeLists.txt110
-rw-r--r--app/bin/acclkeys.h12
-rw-r--r--app/bin/appdefaults.c25
-rw-r--r--app/bin/archive.c454
-rw-r--r--app/bin/archive.h15
-rw-r--r--app/bin/bdf2xtp.c9
-rw-r--r--app/bin/bitmaps/SVG/star.svg124
-rw-r--r--app/bin/bitmaps/XCF/bluedot.xcfbin0 -> 2124 bytes
-rw-r--r--app/bin/bitmaps/XCF/greendot.xcfbin0 -> 2024 bytes
-rw-r--r--app/bin/bitmaps/XCF/greydot.xcfbin0 -> 2022 bytes
-rw-r--r--app/bin/bitmaps/XCF/reddot.xcfbin0 -> 2124 bytes
-rw-r--r--app/bin/bitmaps/XCF/yellowdot.xcfbin0 -> 1854 bytes
-rw-r--r--app/bin/bitmaps/arrow0.xbm14
-rw-r--r--app/bin/bitmaps/arrow0_ctl.xbm9
-rw-r--r--app/bin/bitmaps/arrow0_shift.xbm9
-rw-r--r--app/bin/bitmaps/arrow3.xbm2
-rw-r--r--app/bin/bitmaps/arrow3_ctl.xbm9
-rw-r--r--app/bin/bitmaps/arrow3_shift.xbm9
-rw-r--r--app/bin/bitmaps/arrowr3.xbm9
-rw-r--r--app/bin/bitmaps/arrowr3_ctl.xbm9
-rw-r--r--app/bin/bitmaps/arrowr3_shift.xbm9
-rw-r--r--app/bin/bitmaps/arrows.xbm2
-rw-r--r--app/bin/bitmaps/background.xpm155
-rw-r--r--app/bin/bitmaps/bluedot.xpm26
-rw-r--r--app/bin/bitmaps/bma0.xbm2
-rw-r--r--app/bin/bitmaps/bma135.xbm2
-rw-r--r--app/bin/bitmaps/bma45.xbm2
-rw-r--r--app/bin/bitmaps/bma90.xbm2
-rw-r--r--app/bin/bitmaps/bmendpt.xbm2
-rw-r--r--app/bin/bitmaps/bridge.xpm22
-rw-r--r--app/bin/bitmaps/clip.xbm6
-rw-r--r--app/bin/bitmaps/convertfr.xpm23
-rw-r--r--app/bin/bitmaps/convertto.xpm23
-rw-r--r--app/bin/bitmaps/cornu.xpm23
-rw-r--r--app/bin/bitmaps/cross0.xbm2
-rw-r--r--app/bin/bitmaps/delete.xpm39
-rw-r--r--app/bin/bitmaps/document-export.xpm90
-rw-r--r--app/bin/bitmaps/document-exportdxf.xpm84
-rw-r--r--app/bin/bitmaps/document-import.xpm92
-rw-r--r--app/bin/bitmaps/document-importmod.xpm71
-rw-r--r--app/bin/bitmaps/dpolyline.xpm23
-rw-r--r--app/bin/bitmaps/export.xpm21
-rw-r--r--app/bin/bitmaps/flash.xbm2
-rw-r--r--app/bin/bitmaps/greendot.xpm23
-rw-r--r--app/bin/bitmaps/greenstar.xpm69
-rw-r--r--app/bin/bitmaps/greydot.xpm25
-rw-r--r--app/bin/bitmaps/greystar.xpm69
-rw-r--r--app/bin/bitmaps/import.xpm21
-rw-r--r--app/bin/bitmaps/joinline.xpm22
-rw-r--r--app/bin/bitmaps/link.xbm6
-rw-r--r--app/bin/bitmaps/magnet.xpm22
-rw-r--r--app/bin/bitmaps/magnifier.xpm89
-rw-r--r--app/bin/bitmaps/note.xbm8
-rw-r--r--app/bin/bitmaps/pan.xpm2
-rw-r--r--app/bin/bitmaps/parallel-line.xpm22
-rw-r--r--app/bin/bitmaps/parallel.xpm15
-rw-r--r--app/bin/bitmaps/reddot.xpm26
-rw-r--r--app/bin/bitmaps/redstar.xpm67
-rw-r--r--app/bin/bitmaps/sticky-note-chain.xpm84
-rw-r--r--app/bin/bitmaps/sticky-note-clip.xpm99
-rw-r--r--app/bin/bitmaps/sticky-note-text.xpm86
-rw-r--r--app/bin/bitmaps/tunnel.xpm19
-rw-r--r--app/bin/bitmaps/yellowdot.xpm27
-rw-r--r--app/bin/bitmaps/yellowstar.xpm67
-rwxr-xr-xapp/bin/cJSON.c2932
-rwxr-xr-xapp/bin/cJSON.h285
-rw-r--r--app/bin/cbezier.c233
-rw-r--r--app/bin/cbezier.h7
-rw-r--r--app/bin/cblock.c184
-rw-r--r--app/bin/ccontrol.c42
-rw-r--r--app/bin/ccornu.c2515
-rw-r--r--app/bin/ccornu.h11
-rw-r--r--app/bin/ccurve.c637
-rw-r--r--app/bin/ccurve.h8
-rw-r--r--app/bin/cdraw.c1814
-rw-r--r--app/bin/celev.c364
-rw-r--r--app/bin/cgroup.c495
-rw-r--r--app/bin/chndldto.c14
-rw-r--r--app/bin/chotbar.c119
-rw-r--r--app/bin/cjoin.c610
-rw-r--r--app/bin/cmisc.c114
-rw-r--r--app/bin/cmodify.c490
-rw-r--r--app/bin/cnote.c430
-rw-r--r--app/bin/common.h22
-rw-r--r--app/bin/compound.c285
-rw-r--r--app/bin/compound.h24
-rw-r--r--app/bin/cparalle.c370
-rw-r--r--app/bin/cprint.c516
-rw-r--r--app/bin/cprofile.c2314
-rw-r--r--app/bin/cpull.c263
-rw-r--r--app/bin/cruler.c22
-rw-r--r--app/bin/cselect.c2238
-rw-r--r--app/bin/cselect.h12
-rw-r--r--app/bin/csensor.c42
-rw-r--r--app/bin/csignal.c47
-rw-r--r--app/bin/csnap.c32
-rw-r--r--app/bin/csplit.c89
-rw-r--r--app/bin/cstraigh.c77
-rw-r--r--app/bin/cstruct.c421
-rw-r--r--app/bin/cswitchmotor.c108
-rw-r--r--app/bin/ctext.c71
-rw-r--r--app/bin/ctodesgn.c1515
-rw-r--r--app/bin/ctrain.c139
-rw-r--r--app/bin/ctrain.h20
-rw-r--r--app/bin/cturnout.c1186
-rw-r--r--app/bin/cturntbl.c115
-rw-r--r--app/bin/custom.c51
-rw-r--r--app/bin/custom.h14
-rw-r--r--app/bin/dbench.c2
-rw-r--r--app/bin/dbitmap.c14
-rw-r--r--app/bin/dcar.c625
-rw-r--r--app/bin/dcmpnd.c33
-rw-r--r--app/bin/dcontmgm.c5
-rw-r--r--app/bin/dcustmgm.c73
-rw-r--r--app/bin/dease.c2
-rw-r--r--app/bin/directory.c162
-rw-r--r--app/bin/directory.h6
-rw-r--r--app/bin/dlayer.c143
-rw-r--r--app/bin/doption.c90
-rw-r--r--app/bin/dpricels.c2
-rw-r--r--app/bin/dprmfile.c757
-rw-r--r--app/bin/draw.c1612
-rw-r--r--app/bin/draw.h262
-rw-r--r--app/bin/drawgeom.c2347
-rw-r--r--app/bin/drawgeom.h65
-rw-r--r--app/bin/dxfoutput.c16
-rw-r--r--app/bin/elev.c42
-rw-r--r--app/bin/file2uri.c83
-rw-r--r--app/bin/file2uri.h27
-rw-r--r--app/bin/fileio.c963
-rw-r--r--app/bin/fileio.h68
-rw-r--r--app/bin/filenoteui.c330
-rw-r--r--app/bin/helphelper.c1
-rw-r--r--app/bin/include/dirent.h1254
-rw-r--r--app/bin/include/paramfile.h26
-rw-r--r--app/bin/include/paramfilelist.h32
-rw-r--r--app/bin/include/partcatalog.h70
-rw-r--r--app/bin/include/stringxtc.h8
-rw-r--r--app/bin/include/utf8convert.h24
-rw-r--r--app/bin/layout.c364
-rw-r--r--app/bin/layout.h20
-rw-r--r--app/bin/linknoteui.c260
-rw-r--r--app/bin/macro.c501
-rw-r--r--app/bin/manifest.c176
-rw-r--r--app/bin/manifest.h6
-rw-r--r--app/bin/misc.c2972
-rw-r--r--app/bin/misc.h87
-rw-r--r--app/bin/misc2.c16
-rw-r--r--app/bin/misc2.h14
-rw-r--r--app/bin/note.h110
-rw-r--r--app/bin/param.c213
-rw-r--r--app/bin/param.h2
-rw-r--r--app/bin/paramfile.c393
-rw-r--r--app/bin/paramfilelist.c496
-rw-r--r--app/bin/paramfilesearch_ui.c426
-rw-r--r--app/bin/partcatalog.c846
-rw-r--r--app/bin/paths.c39
-rw-r--r--app/bin/paths.h2
-rw-r--r--app/bin/shortentext.c92
-rw-r--r--app/bin/shortentext.h28
-rw-r--r--app/bin/smalldlg.c17
-rw-r--r--app/bin/stringxtc.c106
-rw-r--r--app/bin/tbezier.c389
-rw-r--r--app/bin/tbezier.h6
-rw-r--r--app/bin/tcornu.c377
-rw-r--r--app/bin/tcornu.h6
-rw-r--r--app/bin/tcurve.c231
-rw-r--r--app/bin/tease.c232
-rw-r--r--app/bin/textnoteui.c243
-rw-r--r--app/bin/tocornu.src21
-rw-r--r--app/bin/tocornu3way.src33
-rw-r--r--app/bin/tocornuwye.src24
-rw-r--r--app/bin/track.c900
-rw-r--r--app/bin/track.h161
-rw-r--r--app/bin/trackx.h2
-rw-r--r--app/bin/trknote.c720
-rw-r--r--app/bin/trkseg.c558
-rw-r--r--app/bin/tstraigh.c108
-rw-r--r--app/bin/unittest/CMakeLists.txt36
-rw-r--r--app/bin/unittest/catalogtest.c124
-rw-r--r--app/bin/unittest/defaultstest.c8
-rw-r--r--app/bin/unittest/pathstest.c5
-rw-r--r--app/bin/unittest/shortentest.c152
-rw-r--r--app/bin/unittest/testfiles/HO-Peco-Code83.xtp236
-rw-r--r--app/bin/unittest/testfiles/atl83ho.xtp561
-rw-r--r--app/bin/unittest/testfiles/atlasn.xtp (renamed from app/lib/params/atlasn.xtp)30
-rw-r--r--app/bin/utf8convert.c96
-rw-r--r--app/bin/utility.c171
-rw-r--r--app/bin/utility.h4
-rw-r--r--app/bin/validator.c87
-rw-r--r--app/bin/validator.h29
-rw-r--r--app/cornu/bezctx_xtrkcad.c13
-rw-r--r--app/cornu/bezctx_xtrkcad.h2
-rw-r--r--app/doc/CMakeLists.txt11
-rw-r--r--app/doc/addm.but312
-rw-r--r--app/doc/appendix.but26
-rw-r--r--app/doc/changem.but679
-rw-r--r--app/doc/drawm.but436
-rw-r--r--app/doc/editm.but58
-rw-r--r--app/doc/filem.but184
-rw-r--r--app/doc/helpm.but16
-rw-r--r--app/doc/hotbar.but38
-rw-r--r--app/doc/intro.but.in192
-rw-r--r--app/doc/managem.but27
-rw-r--r--app/doc/navigation.but156
-rw-r--r--app/doc/optionm.but67
-rw-r--r--app/doc/png.d/bcornu.pngbin0 -> 4346 bytes
-rw-r--r--app/doc/png.d/bfile.pngbin0 -> 681 bytes
-rw-r--r--app/doc/png.d/bjoin.pngbin277 -> 4433 bytes
-rw-r--r--app/doc/png.d/bjoinline.pngbin0 -> 4329 bytes
-rw-r--r--app/doc/png.d/blayer.pngbin1620 -> 70247 bytes
-rw-r--r--app/doc/png.d/blink.pngbin0 -> 626 bytes
-rw-r--r--app/doc/png.d/bnote.pngbin250 -> 600 bytes
-rw-r--r--app/doc/png.d/bparalle.pngbin239 -> 0 bytes
-rw-r--r--app/doc/png.d/bparallel.pngbin0 -> 4402 bytes
-rw-r--r--app/doc/png.d/bparalleline.pngbin0 -> 4357 bytes
-rw-r--r--app/doc/png.d/cmdopt.pngbin19624 -> 7407 bytes
-rw-r--r--app/doc/png.d/convertfrom.pngbin0 -> 4169 bytes
-rw-r--r--app/doc/png.d/convertto.pngbin0 -> 4169 bytes
-rw-r--r--app/doc/png.d/cornuendanchor.pngbin0 -> 5312 bytes
-rw-r--r--app/doc/png.d/dcprofile.pngbin8234 -> 11508 bytes
-rw-r--r--app/doc/png.d/displayopt.pngbin68298 -> 86476 bytes
-rw-r--r--app/doc/png.d/dprmfile.pngbin24735 -> 13308 bytes
-rw-r--r--app/doc/png.d/greendot.pngbin0 -> 301 bytes
-rw-r--r--app/doc/png.d/greenstar.pngbin0 -> 415 bytes
-rw-r--r--app/doc/png.d/greydot.pngbin0 -> 262 bytes
-rw-r--r--app/doc/png.d/greystar.pngbin0 -> 431 bytes
-rw-r--r--app/doc/png.d/iconfile.pngbin0 -> 165 bytes
-rw-r--r--app/doc/png.d/iconlink.PNGbin0 -> 230 bytes
-rw-r--r--app/doc/png.d/iconnote.pngbin479 -> 211 bytes
-rw-r--r--app/doc/png.d/layout.pngbin13213 -> 72958 bytes
-rw-r--r--app/doc/png.d/madd.pngbin7895 -> 13693 bytes
-rw-r--r--app/doc/png.d/main.pngbin36744 -> 397486 bytes
-rw-r--r--app/doc/png.d/maintagged.pngbin0 -> 400969 bytes
-rw-r--r--app/doc/png.d/mmovedraw.pngbin1037 -> 0 bytes
-rw-r--r--app/doc/png.d/mnote.pngbin0 -> 1392 bytes
-rw-r--r--app/doc/png.d/notefile.pngbin0 -> 6830 bytes
-rw-r--r--app/doc/png.d/notelink.pngbin0 -> 6780 bytes
-rw-r--r--app/doc/png.d/notetext.pngbin0 -> 6928 bytes
-rw-r--r--app/doc/png.d/paramsearch.pngbin0 -> 14516 bytes
-rw-r--r--app/doc/png.d/print.pngbin14306 -> 46869 bytes
-rw-r--r--app/doc/png.d/printmargin.pngbin0 -> 10613 bytes
-rw-r--r--app/doc/png.d/reddot.pngbin0 -> 301 bytes
-rw-r--r--app/doc/png.d/redstar.pngbin0 -> 364 bytes
-rw-r--r--app/doc/png.d/satusbarparallel.pngbin1617 -> 0 bytes
-rw-r--r--app/doc/png.d/statusbarparallel.pngbin0 -> 12964 bytes
-rw-r--r--app/doc/png.d/yellowdot.pngbin0 -> 326 bytes
-rw-r--r--app/doc/png.d/yellowstar.pngbin0 -> 414 bytes
-rw-r--r--app/doc/statusbar.but13
-rw-r--r--app/doc/upgrade.but74
-rw-r--r--app/doc/view_winm.but25
-rw-r--r--app/dynstring/dynstring.c17
-rw-r--r--app/dynstring/dynstring.h89
-rw-r--r--app/help/CMakeLists.txt5
-rw-r--r--app/help/cJSON.c2932
-rw-r--r--app/help/cJSON.h285
-rw-r--r--app/help/genhelp.c286
-rw-r--r--app/help/genhelp.in728
-rw-r--r--app/help/genhelp.json681
-rw-r--r--app/help/messages.in244
-rw-r--r--app/help/xtrkcad.info1123
-rw-r--r--app/help/xtrkcad.tip65
-rw-r--r--app/i18n/CMakeLists.txt12
-rw-r--r--app/i18n/de_DE.po29324
-rw-r--r--app/i18n/fi.po28654
-rw-r--r--app/i18n/fr_FR.po16142
-rw-r--r--app/i18n/pt_BR.po26391
-rw-r--r--app/i18n/stripmsg.c23
-rw-r--r--app/lib/CHANGELOG.md360
-rw-r--r--app/lib/CMakeLists.txt6
-rw-r--r--app/lib/Readme.md45
-rw-r--r--app/lib/demos/dmadjend.xtr622
-rw-r--r--app/lib/demos/dmbench.xtr8
-rw-r--r--app/lib/demos/dmcancel.xtr52
-rw-r--r--app/lib/demos/dmcircle.xtr9
-rw-r--r--app/lib/demos/dmconn1.xtr336
-rw-r--r--app/lib/demos/dmconn2.xtr236
-rw-r--r--app/lib/demos/dmcrvtrk.xtr32
-rw-r--r--app/lib/demos/dmctlpnl.xtr1082
-rw-r--r--app/lib/demos/dmdelund.xtr10
-rw-r--r--app/lib/demos/dmdialog.xtr13
-rw-r--r--app/lib/demos/dmdimlin.xtr138
-rw-r--r--app/lib/demos/dmease.xtr162
-rw-r--r--app/lib/demos/dmelev.xtr239
-rw-r--r--app/lib/demos/dmexcept.xtr52
-rw-r--r--app/lib/demos/dmextend.xtr49
-rw-r--r--app/lib/demos/dmflip.xtr3
-rw-r--r--app/lib/demos/dmgroup.xtr158
-rw-r--r--app/lib/demos/dmhelix.xtr33
-rw-r--r--app/lib/demos/dmhndld.xtr66
-rw-r--r--app/lib/demos/dmintro.xtr24
-rw-r--r--app/lib/demos/dmjcir.xtr34
-rw-r--r--app/lib/demos/dmjnabut.xtr16
-rw-r--r--app/lib/demos/dmjncs.xtr44
-rw-r--r--app/lib/demos/dmjnmove.xtr27
-rw-r--r--app/lib/demos/dmjnss.xtr225
-rw-r--r--app/lib/demos/dmjntt.xtr34
-rw-r--r--app/lib/demos/dmlines.xtr132
-rw-r--r--app/lib/demos/dmlines2.xtr149
-rw-r--r--app/lib/demos/dmmouse.xtr232
-rw-r--r--app/lib/demos/dmmovabt.xtr3
-rw-r--r--app/lib/demos/dmnotes.xtr7
-rw-r--r--app/lib/demos/dmparall.xtr41
-rw-r--r--app/lib/demos/dmplymod.xtr88
-rw-r--r--app/lib/demos/dmprof.xtr164
-rw-r--r--app/lib/demos/dmrescal.xtr129
-rw-r--r--app/lib/demos/dmrotate.xtr913
-rw-r--r--app/lib/demos/dmruler.xtr3
-rw-r--r--app/lib/demos/dmselect.xtr468
-rw-r--r--app/lib/demos/dmsplit.xtr42
-rw-r--r--app/lib/demos/dmstrtrk.xtr6
-rw-r--r--app/lib/demos/dmtbledg.xtr59
-rw-r--r--app/lib/demos/dmtosel.xtr99
-rw-r--r--app/lib/demos/dmtotrim.xtr28
-rw-r--r--app/lib/demos/dmtoyard.xtr159
-rw-r--r--app/lib/demos/dmtrkwid.xtr134
-rw-r--r--app/lib/demos/dmtrntab.xtr4
-rw-r--r--app/lib/examples/psr.xtc14
-rw-r--r--app/lib/params/Any-AtlasControllers.xtp571
-rw-r--r--app/lib/params/Any-CTC_panel.xtp24
-rw-r--r--app/lib/params/BachmannEZ-N.xtp2
-rw-r--r--app/lib/params/CMakeLists.txt11
-rw-r--r--app/lib/params/FastTrack-HO.xtp4
-rw-r--r--app/lib/params/FastTrack_n.xtp2
-rw-r--r--app/lib/params/G-MicroEngineeringTrack.xtp142
-rw-r--r--app/lib/params/G-NQD-AMAX Plastic.xtp4
-rw-r--r--app/lib/params/G-Peco G45 Track.xtp46
-rw-r--r--app/lib/params/G-aristo.xtp2
-rw-r--r--app/lib/params/Gn15-nmra.xtp2
-rw-r--r--app/lib/params/H0_ncb-Roads.xtp1098
-rw-r--r--app/lib/params/HO-CentralValley Bridges.xtp407
-rw-r--r--app/lib/params/HO-DapolHOOO.xtp8
-rw-r--r--app/lib/params/HO-EndoRailwayTrackSystem.xtp228
-rw-r--r--app/lib/params/HO-HornbyHO.xtp271
-rw-r--r--app/lib/params/HO-Marklin C-Track.xtp (renamed from app/lib/params/mrklnhoc.xtp)1064
-rw-r--r--app/lib/params/HO-Marklin K-track.xtp (renamed from app/lib/params/mrklnhok.xtp)928
-rw-r--r--app/lib/params/HO-Marklin M-Track.xtp (renamed from app/lib/params/mrklnhom.xtp)1978
-rw-r--r--app/lib/params/HO-MetcalfeHOOO.xtp4
-rw-r--r--app/lib/params/HO-MicroEngineering-Bridges.xtp736
-rw-r--r--app/lib/params/HO-MicroEngineering.xtp2
-rw-r--r--app/lib/params/HO-Peco-Code100Streamline.xtp130
-rw-r--r--app/lib/params/HO-Peco-Code75Finescale.xtp101
-rw-r--r--app/lib/params/HO-RatioHOOO.xtp6
-rw-r--r--app/lib/params/HO-Roco HO Code 83.xtp469
-rw-r--r--app/lib/params/HO-Slot-Car-AFX-Track.xtp46
-rw-r--r--app/lib/params/HO-Slot-Cars.xtp5
-rw-r--r--app/lib/params/HO-Walthers Cornerstone Engineered Bridge System.xtp624
-rw-r--r--app/lib/params/HO-Weinert-Code75.xtp42
-rw-r--r--app/lib/params/HO-WillsHOOO.xtp8
-rw-r--r--app/lib/params/HO-atl100ho.xtp72
-rw-r--r--app/lib/params/HO-cmr-ho.xtp2
-rw-r--r--app/lib/params/HO_toolkit-Roads.xtp2
-rw-r--r--app/lib/params/HOn3-MicroEngineering-Bridges.xtp377
-rw-r--r--app/lib/params/HOn3-MicroEngineering.xtp50
-rw-r--r--app/lib/params/HOn30_Minitrains.xtp2
-rw-r--r--app/lib/params/Hornby Dublo 2 Rail.xtp2
-rw-r--r--app/lib/params/Hornby Dublo 3 Rail with Turntable.xtp4
-rw-r--r--app/lib/params/Hornby Dublo Signals.xtp2
-rw-r--r--app/lib/params/Hornby Dublo Wood Buildings.xtp2
-rw-r--r--app/lib/params/HornbyOO.xtp221
-rw-r--r--app/lib/params/LifeLike-N.xtp66
-rw-r--r--app/lib/params/Lionel-O.xtp6
-rw-r--r--app/lib/params/Lionel27.xtp6
-rw-r--r--app/lib/params/N-AtlasTrueTrack.xtp26
-rw-r--r--app/lib/params/N-Bonus Generic Industrial Structures.xtp3
-rw-r--r--app/lib/params/N-CentralValley Bridges.xtp123
-rw-r--r--app/lib/params/N-Kato Track and Structures.xtp (renamed from app/lib/params/N-kato.xtp)3445
-rw-r--r--app/lib/params/N-Kato-Unitram.xtp7
-rw-r--r--app/lib/params/N-Katocn.xtp2
-rw-r--r--app/lib/params/N-LifeLike Power-Loc.xtp2
-rw-r--r--app/lib/params/N-ME Structures.xtp3
-rw-r--r--app/lib/params/N-MicroEngineering-Bridges.xtp318
-rw-r--r--app/lib/params/N-NULINE.xtp2
-rw-r--r--app/lib/params/N-PecoCode55Finescale.xtp50
-rw-r--r--app/lib/params/N-PecoCode80Streamline.xtp50
-rw-r--r--app/lib/params/N-Rix-Pikestuff.xtp2
-rw-r--r--app/lib/params/N-Shinohara70.xtp4
-rw-r--r--app/lib/params/N-Tomix Track.xtp (renamed from app/lib/params/tomix-n.xtp)3394
-rw-r--r--app/lib/params/N-atlasn55.xtp27
-rw-r--r--app/lib/params/N-atlasn80.xtp845
-rw-r--r--app/lib/params/N-cmr.xtp2
-rw-r--r--app/lib/params/N-kato-n-gl-trk.xtp567
-rw-r--r--app/lib/params/N-kato-turntable.xtp16
-rw-r--r--app/lib/params/N-me.xtp2
-rw-r--r--app/lib/params/Newqida.xtp43
-rw-r--r--app/lib/params/Nn3-FastTrack.xtp2
-rw-r--r--app/lib/params/O-Atlas2Rail.xtp296
-rw-r--r--app/lib/params/O-Atlas2RailObsolete.xtp120
-rw-r--r--app/lib/params/O-Atlas3Rail Roadbed.xtp340
-rw-r--r--app/lib/params/O-Atlas3Rrail.xtp617
-rw-r--r--app/lib/params/O-AtlasIndustrial3Rail.xtp151
-rw-r--r--app/lib/params/O-Bassett-Lowke (discontinued).xtp6
-rw-r--r--app/lib/params/O-ETS TramTrack.xtp2
-rw-r--r--app/lib/params/O-Lehnhardt Tramrails.xtp2
-rw-r--r--app/lib/params/O-atlaso3rail.xtp6
-rw-r--r--app/lib/params/On30-FastTrack.xtp2
-rw-r--r--app/lib/params/On30-MicroEngineering.xtp50
-rw-r--r--app/lib/params/Proto-AmSlotCar.xtp2
-rw-r--r--app/lib/params/RemcoMightyCasey.xtp42
-rw-r--r--app/lib/params/S-Lionel AF Fastrack.xtp306
-rw-r--r--app/lib/params/S_ACG_18.824in Radius Track.xtp2
-rw-r--r--app/lib/params/S_ACG_20.000 Track.xtp2
-rw-r--r--app/lib/params/TT-Kuehn.xtp20
-rw-r--r--app/lib/params/TT-TilligAdvBeddingTrack.xtp9
-rw-r--r--app/lib/params/TT-Trak Modules.xtp3
-rw-r--r--app/lib/params/TilligAdvTT.xtp9
-rw-r--r--app/lib/params/TilligH0EliteCode83.xtp2
-rw-r--r--app/lib/params/TilligH0e.xtp2
-rw-r--r--app/lib/params/TilligH0m.xtp2
-rw-r--r--app/lib/params/USA-G.xtp2
-rw-r--r--app/lib/params/Z-Fasttrack.xtp4
-rw-r--r--app/lib/params/Z-Rokuhan.xtp21
-rw-r--r--app/lib/params/Z-T-Trak.xtp9
-rw-r--r--app/lib/params/arnold.xtp5
-rw-r--r--app/lib/params/atl83ho.xtp2
-rw-r--r--app/lib/params/atlaso2rail.xtp3
-rw-r--r--app/lib/params/br.xtp2
-rw-r--r--app/lib/params/dpm-ho.xtp2
-rw-r--r--app/lib/params/eu.xtp2
-rw-r--r--app/lib/params/ho-amb.xtp4
-rwxr-xr-xapp/lib/params/ho-ncb-roads.xtp2
-rw-r--r--app/lib/params/hon3cars.xtp9
-rw-r--r--app/lib/params/hubner1.xtp6
-rw-r--r--app/lib/params/kato-ho.xtp4
-rw-r--r--app/lib/params/kato-n-DblTrk.xtp369
-rw-r--r--app/lib/params/kato-n.xtp1639
-rw-r--r--app/lib/params/lgb.xtp2
-rw-r--r--app/lib/params/me-ho.xtp47
-rw-r--r--app/lib/params/minitrix.xtp2
-rw-r--r--app/lib/params/mrkhomde.xtp2
-rw-r--r--app/lib/params/mrkln1.xtp2
-rw-r--r--app/lib/params/mrklnhoc-de.xtp4
-rw-r--r--app/lib/params/mrklnz.xtp4
-rw-r--r--app/lib/params/nmra-0-lapped.xtp76
-rw-r--r--app/lib/params/nmra-ho.xtp2
-rw-r--r--app/lib/params/nmra-ho3.xtp2
-rw-r--r--app/lib/params/nmra-n.xtp4
-rw-r--r--app/lib/params/nmra-o.xtp2
-rw-r--r--app/lib/params/nmra-s.xtp2
-rw-r--r--app/lib/params/nmra-tt.to2
-rw-r--r--app/lib/params/nmra-tt.xtp2
-rw-r--r--app/lib/params/nmra-z.xtp2
-rw-r--r--app/lib/params/pecohom.xtp2
-rw-r--r--app/lib/params/pecohon30.xtp2
-rw-r--r--app/lib/params/proto-ng.xtp29
-rw-r--r--app/lib/params/protoam.xtp2
-rw-r--r--app/lib/params/protosteam.xtp2
-rw-r--r--app/lib/params/rocho100.xtp5
-rw-r--r--app/lib/params/rocho83.xtp293
-rw-r--r--app/lib/params/supero.xtp2
-rw-r--r--app/lib/params/toolkit-n.xtp2
-rw-r--r--app/lib/params/walth-n.xtp2686
-rw-r--r--app/lib/params/wlthho10.xtp2
-rw-r--r--app/lib/params/wlthho83.xtp4
-rw-r--r--app/lib/xtrkcad.xtq18
-rw-r--r--app/tools/HACKING4
-rw-r--r--app/wlib/gtklib/CMakeLists.txt48
-rw-r--r--app/wlib/gtklib/browserhelp.c59
-rw-r--r--app/wlib/gtklib/button.c44
-rw-r--r--app/wlib/gtklib/color.c11
-rw-r--r--app/wlib/gtklib/control.c59
-rw-r--r--app/wlib/gtklib/droplist.c75
-rw-r--r--app/wlib/gtklib/filesel.c238
-rw-r--r--app/wlib/gtklib/font.c17
-rw-r--r--app/wlib/gtklib/gtkdraw-cairo.c995
-rw-r--r--app/wlib/gtklib/gtkint.h24
-rw-r--r--app/wlib/gtklib/help.c16
-rw-r--r--app/wlib/gtklib/ixhelp.c10
-rw-r--r--app/wlib/gtklib/list.c5
-rw-r--r--app/wlib/gtklib/liststore.c2
-rw-r--r--app/wlib/gtklib/menu.c8
-rw-r--r--app/wlib/gtklib/notice.c18
-rw-r--r--app/wlib/gtklib/opendocument.c117
-rw-r--r--app/wlib/gtklib/osxhelp.c67
-rw-r--r--app/wlib/gtklib/print.c233
-rw-r--r--app/wlib/gtklib/single.c82
-rw-r--r--app/wlib/gtklib/splash.c12
-rw-r--r--app/wlib/gtklib/statusbar.c6
-rw-r--r--app/wlib/gtklib/text.c24
-rw-r--r--app/wlib/gtklib/timer.c3
-rw-r--r--app/wlib/gtklib/util.c88
-rw-r--r--app/wlib/gtklib/window.c204
-rw-r--r--app/wlib/gtklib/wpref.c10
-rw-r--r--app/wlib/include/mswlib.h2
-rw-r--r--app/wlib/include/wlib.h103
-rw-r--r--app/wlib/mswlib/CMakeLists.txt19
-rw-r--r--app/wlib/mswlib/backgnd.c220
-rw-r--r--app/wlib/mswlib/mswbitmap.c46
-rw-r--r--app/wlib/mswlib/mswbutt.c21
-rw-r--r--app/wlib/mswlib/mswchksm.c125
-rw-r--r--app/wlib/mswlib/mswdraw.c833
-rw-r--r--app/wlib/mswlib/mswedit.c210
-rw-r--r--app/wlib/mswlib/mswint.h23
-rw-r--r--app/wlib/mswlib/mswlist.c2
-rw-r--r--app/wlib/mswlib/mswmenu.c8
-rw-r--r--app/wlib/mswlib/mswmisc.c266
-rw-r--r--app/wlib/mswlib/mswmsg.c9
-rw-r--r--app/wlib/mswlib/mswpref.c1
-rw-r--r--app/wlib/mswlib/mswprint.c46
-rw-r--r--app/wlib/mswlib/mswsplash.c8
-rw-r--r--app/wlib/mswlib/mswtext.c63
-rw-r--r--app/wlib/mswlib/simple-gettext.c3
-rw-r--r--app/wlib/mswlib/unittest/CMakeLists.txt11
-rw-r--r--app/wlib/mswlib/unittest/utf8test.c65
-rw-r--r--app/wlib/mswlib/utf8conv.c210
-rw-r--r--distribution/CMakeLists.txt3
-rw-r--r--distribution/osx/CMakeLists.txt2
-rwxr-xr-xdistribution/osx/gtk-bundle/xtrkcad-launcher.sh4
-rw-r--r--distribution/osx/gtk-bundle/xtrkcad-template.dmg.zipbin3990654 -> 2641265 bytes
-rw-r--r--distribution/posix/CMakeLists.txt42
-rw-r--r--distribution/win32/nsis/CMakeLists.txt12
-rw-r--r--distribution/win32/nsis/install.nsh27
-rw-r--r--distribution/win32/nsis/uninstall.nsh29
-rw-r--r--xtrkcad-config.h.in4
522 files changed, 128125 insertions, 65908 deletions
diff --git a/.hgtags b/.hgtags
index 52dcbcb..5c1cc48 100644
--- a/.hgtags
+++ b/.hgtags
@@ -46,3 +46,30 @@ ff3eb7eadadae951cb63fe770ca51cf89ec3d53d Release_5_1_0
e93612ade2a32f2ba0fe8fdcfb92e59c14265466 Release_5_1_2
e93612ade2a32f2ba0fe8fdcfb92e59c14265466 Release_5_1_2
4562e9b122b2b2e58ce9355a83b9cd23e17ed138 Release_5_1_2
+0000000000000000000000000000000000000000 Release_5_1_2a
+41d5525d954622bedb12bc9eb9516e3d8848a9d6 Release_5_1_2a
+fc632b33222d1cd00c15342fe2ce91466a27a2b4 V5.2 Beta 1.0 Release
+2111ec67392603645062dff2b3b2c76ff9d6e1a7 V5.2 Beta 2.0 Release
+2111ec67392603645062dff2b3b2c76ff9d6e1a7 V5.2 Beta 2.0 Release
+7b4f25593473721116c49a4cd426482eb8cf1655 V5.2 Beta 2.0 Release
+7b4f25593473721116c49a4cd426482eb8cf1655 V5.2 Beta 2.0 Release
+a7fd6e03aa2680a5c958d103e13aa38ef5b0dde3 V5.2 Beta 2.0 Release
+a7fd6e03aa2680a5c958d103e13aa38ef5b0dde3 V5.2 Beta 2.0 Release
+f47114e7bba8af38f1a9228ff619ba88cee01709 V5.2 Beta 2.0 Release
+f47114e7bba8af38f1a9228ff619ba88cee01709 V5.2 Beta 2.0 Release
+f605edb2081daf4882dd8eb2d25b1830e4521400 V5.2 Beta 2.0 Release
+f605edb2081daf4882dd8eb2d25b1830e4521400 V5.2 Beta 2.0 Release
+3e5f9ebcc29acb009fd3a04950761bef568ee8bf V5.2 Beta 2.0 Release
+3e5f9ebcc29acb009fd3a04950761bef568ee8bf V5.2 Beta 2.0 Release
+a5a2221e59d57cb7227de4df566fb49643c4799b V5.2 Beta 2.0 Release
+a5a2221e59d57cb7227de4df566fb49643c4799b V5.2 Beta 2.0 Release
+1f1e18e8765d75150651a0cf33fadaf1050c8f16 V5.2 Beta 2.0 Release
+1f1e18e8765d75150651a0cf33fadaf1050c8f16 V5.2 Beta 2.0 Release
+4541599c0b238eb62d848c65f340bfa7059e8d4f V5.2 Beta 2.0 Release
+2959e327915b2c1573da0bd817f9cc5a27f0e9d6 V5.2 Beta 2.1 Release
+2959e327915b2c1573da0bd817f9cc5a27f0e9d6 V5.2 Beta 2.1 Release
+19b72cf126d107f3f499d3bff0f231a6089b7115 V5.2 Beta 2.1 Release
+19b72cf126d107f3f499d3bff0f231a6089b7115 V5.2 Beta 2.1 Release
+a9688ed807416e3a239268e05f2a26940f96eea7 V5.2 Beta 2.1 Release
+a9688ed807416e3a239268e05f2a26940f96eea7 V5.2 Beta 2.1 Release
+33627b1df2f6f96acecb26f402c918dd4c9ff3e0 V5.2 Beta 2.1 Release
diff --git a/CMake/FindCMocka.cmake b/CMake/FindCMocka.cmake
index bec2905..6a5484e 100644
--- a/CMake/FindCMocka.cmake
+++ b/CMake/FindCMocka.cmake
@@ -23,24 +23,23 @@
set (CMOCKA_ROOT_DIR
- "C:/Users/Martin/Documents/CMocka")
+ "../../external/x86/cmocka")
find_path(CMOCKA_INCLUDE_DIR
NAMES
cmocka.h
PATHS
${CMOCKA_ROOT_DIR}/include
- "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Andreas Schneider\\cmocka]/include"
)
find_library(CMOCKA_LIBRARY
NAMES
- cmocka
+ cmocka-static
PATHS
${CMOCKA_ROOT_DIR}/lib
- "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Andreas Schneider\\cmocka]/lib"
)
+
if (CMOCKA_LIBRARY)
set(CMOCKA_LIBRARIES
${CMOCKA_LIBRARIES}
@@ -52,4 +51,4 @@ include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(CMocka DEFAULT_MSG CMOCKA_LIBRARY CMOCKA_INCLUDE_DIR)
# show the CMOCKA_INCLUDE_DIR and CMOCKA_LIBRARIES variables only in the advanced view
-mark_as_advanced(CMOCKA_INCLUDE_DIR CMOCKA_LIBRARY CMOCKA_LIBRARIES) \ No newline at end of file
+mark_as_advanced(CMOCKA_INCLUDE_DIR CMOCKA_LIBRARY CMOCKA_LIBRARIES)
diff --git a/CMake/FindFreeImage.cmake b/CMake/FindFreeImage.cmake
new file mode 100644
index 0000000..6073916
--- /dev/null
+++ b/CMake/FindFreeImage.cmake
@@ -0,0 +1,58 @@
+#
+# Try to find the FreeImage library and include path.
+# Once done this will define
+#
+# FREEIMAGE_FOUND
+# FREEIMAGE_INCLUDE_PATH
+# FREEIMAGE_LIBRARY
+# FREEIMAGE_SHAREDLIB (Win32 only)
+#
+# There is no default installation for FreeImage on Windows so a
+# XTrackCAD specific directory tree is assumed
+#
+
+if (WIN32)
+ find_path( FREEIMAGE_INCLUDE_PATH FreeImage.h
+ PATHS
+ $ENV{XTCEXTERNALROOT}/x86/FreeImage
+ DOC "The directory where FreeImage.h resides")
+ find_library( FREEIMAGE_LIBRARY
+ NAMES FreeImage freeimage
+ PATHS
+ $ENV{XTCEXTERNALROOT}/x86/FreeImage
+ DOC "The FreeImage library")
+ find_file( FREEIMAGE_SHAREDLIB
+ NAMES freeimage.DLL
+ PATHS
+ $ENV{XTCEXTERNALROOT}/x86/FreeImage
+ )
+else (WIN32)
+ find_path( FREEIMAGE_INCLUDE_PATH FreeImage.h
+ /usr/include
+ /usr/local/include
+ /sw/include
+ /opt/local/include
+ DOC "The directory where FreeImage.h resides")
+ find_library( FREEIMAGE_LIBRARY
+ NAMES FreeImage freeimage
+ PATHS
+ /usr/lib64
+ /usr/lib
+ /usr/local/lib64
+ /usr/local/lib
+ /sw/lib
+ /opt/local/lib
+ DOC "The FreeImage library")
+endif (WIN32)
+
+find_package_handle_standard_args( FreeImage
+ DEFAULT_MSG
+ FREEIMAGE_LIBRARY
+ FREEIMAGE_INCLUDE_PATH
+)
+
+mark_as_advanced(
+ FREEIMAGE_FOUND
+ FREEIMAGE_LIBRARY
+ FREEIMAGE_INCLUDE_PATH
+ FREEIMAGE_SHAREDLIB)
diff --git a/CMake/FindLibzip.cmake b/CMake/FindLibzip.cmake
new file mode 100644
index 0000000..b6f1a9e
--- /dev/null
+++ b/CMake/FindLibzip.cmake
@@ -0,0 +1,61 @@
+# Finds libzip.
+#
+# This module defines:
+# LIBZIP_INCLUDE_DIR_ZIP
+# LIBZIP_INCLUDE_DIR_ZIPCONF
+# LIBZIP_LIBRARY
+#
+# There is no default installation for libzip on Windows so a
+# XTrackCAD specific directory tree is assumed
+#
+
+if(WIN32)
+ find_path( LIBZIP_INCLUDE_DIR_ZIP zip.h
+ PATHS
+ $ENV{XTCEXTERNALROOT}/x86/libzip
+ DOC "The directory where zip.h resides")
+ find_path( LIBZIP_INCLUDE_DIR_ZIPCONF zipconf.h
+ PATHS
+ $ENV{XTCEXTERNALROOT}/x86/libzip
+ DOC "The directory where zip.h resides")
+ find_library( LIBZIP_LIBRARY
+ NAMES zip Zip
+ PATHS
+ $ENV{XTCEXTERNALROOT}/x86/libzip
+ DOC "The libzip library")
+ find_file( LIBZIP_SHAREDLIB
+ NAMES zip.dll Zip.dll
+ PATHS
+ $ENV{XTCEXTERNALROOT}/x86/libzip)
+else(WIN32)
+ find_package(PkgConfig)
+ pkg_check_modules(PC_LIBZIP QUIET libzip)
+
+ find_path(LIBZIP_INCLUDE_DIR_ZIP
+ NAMES zip.h
+ HINTS ${PC_LIBZIP_INCLUDE_DIRS})
+
+ find_path(LIBZIP_INCLUDE_DIR_ZIPCONF
+ NAMES zipconf.h
+ HINTS ${PC_LIBZIP_INCLUDE_DIRS})
+
+ find_library(LIBZIP_LIBRARY
+ NAMES zip)
+endif(WIN32)
+
+include(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(
+ LIBZIP DEFAULT_MSG
+ LIBZIP_LIBRARY LIBZIP_INCLUDE_DIR_ZIP LIBZIP_INCLUDE_DIR_ZIPCONF)
+
+set(LIBZIP_VERSION 0)
+
+if (LIBZIP_INCLUDE_DIR_ZIPCONF)
+ FILE(READ "${LIBZIP_INCLUDE_DIR_ZIPCONF}/zipconf.h" _LIBZIP_VERSION_CONTENTS)
+ if (_LIBZIP_VERSION_CONTENTS)
+ STRING(REGEX REPLACE ".*#define LIBZIP_VERSION \"([0-9a-z.]+)\".*" "\\1" LIBZIP_VERSION "${_LIBZIP_VERSION_CONTENTS}")
+ endif ()
+endif ()
+
+set(LIBZIP_VERSION ${LIBZIP_VERSION} CACHE STRING "Version number of libzip")
+mark_as_advanced(LIBZIP_LIBRARY LIBZIP_INCLUDE_DIR_ZIP LIBZIP_INCLUDE_DIR_ZIPCONF LIBZIP_SHAREDLIB)
diff --git a/CMake/FindZlib.cmake b/CMake/FindZlib.cmake
new file mode 100644
index 0000000..3305ee3
--- /dev/null
+++ b/CMake/FindZlib.cmake
@@ -0,0 +1,43 @@
+# Finds zlib.
+#
+# This module defines:
+# zlib_INCLUDE_DIR_ZIP
+# zlib_INCLUDE_DIR_ZIPCONF
+# zlib_LIBRARY
+#
+# There is no default installation for zlib on Windows so a
+# XTrackCAD specific directory tree is assumed
+#
+
+if(WIN32)
+ find_path( ZLIB_INCLUDE_DIR zlib.h
+ PATHS
+ $ENV{XTCEXTERNALROOT}/x86/zlib
+ DOC "The directory where zip.h resides")
+ find_library( ZLIB_LIBRARY
+ NAMES zlib Zlib
+ PATHS
+ $ENV{XTCEXTERNALROOT}/x86/zlib
+ DOC "The zlib library")
+ find_file( ZLIB_SHAREDLIB
+ NAMES zlib.dll Zlib.dll
+ PATHS
+ $ENV{XTCEXTERNALROOT}/x86/zlib)
+else(WIN32)
+ find_package(PkgConfig)
+ pkg_check_modules(PC_ZLIB QUIET zlib)
+
+ find_path(ZLIB_INCLUDE_DIR
+ NAMES zlib.h
+ HINTS ${PC_ZLIB_INCLUDE_DIRS})
+
+ find_library(ZLIB_LIBRARY
+ NAMES z)
+endif(WIN32)
+
+include(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(
+ ZLIB DEFAULT_MSG
+ ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
+
+mark_as_advanced(ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
diff --git a/CMake/NSIS.template.in b/CMake/NSIS.template.in
new file mode 100644
index 0000000..ebadf87
--- /dev/null
+++ b/CMake/NSIS.template.in
@@ -0,0 +1,988 @@
+; CPack install script designed for a nmake build
+
+;--------------------------------
+; You must define these values
+
+ !define VERSION "@CPACK_PACKAGE_VERSION@"
+ !define PATCH "@CPACK_PACKAGE_VERSION_PATCH@"
+ !define INST_DIR "@CPACK_TEMPORARY_DIRECTORY@"
+
+;--------------------------------
+;Variables
+
+ Var MUI_TEMP
+ Var STARTMENU_FOLDER
+ Var SV_ALLUSERS
+ Var START_MENU
+ Var DO_NOT_ADD_TO_PATH
+ Var ADD_TO_PATH_ALL_USERS
+ Var ADD_TO_PATH_CURRENT_USER
+ Var INSTALL_DESKTOP
+ Var IS_DEFAULT_INSTALLDIR
+;--------------------------------
+;Include Modern UI
+
+ !include "MUI.nsh"
+
+ ;Default installation folder
+ InstallDir "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
+
+;--------------------------------
+;General
+
+ ;Name and file
+ Name "@CPACK_NSIS_PACKAGE_NAME@"
+ OutFile "@CPACK_TOPLEVEL_DIRECTORY@/@CPACK_OUTPUT_FILE_NAME@"
+
+ ;Set compression
+ SetCompressor @CPACK_NSIS_COMPRESSOR@
+
+ ;Require administrator access
+ RequestExecutionLevel admin
+
+@CPACK_NSIS_DEFINES@
+
+ !include Sections.nsh
+
+;--- Component support macros: ---
+; The code for the add/remove functionality is from:
+; http://nsis.sourceforge.net/Add/Remove_Functionality
+; It has been modified slightly and extended to provide
+; inter-component dependencies.
+Var AR_SecFlags
+Var AR_RegFlags
+@CPACK_NSIS_SECTION_SELECTED_VARS@
+
+; Loads the "selected" flag for the section named SecName into the
+; variable VarName.
+!macro LoadSectionSelectedIntoVar SecName VarName
+ SectionGetFlags ${${SecName}} $${VarName}
+ IntOp $${VarName} $${VarName} & ${SF_SELECTED} ;Turn off all other bits
+!macroend
+
+; Loads the value of a variable... can we get around this?
+!macro LoadVar VarName
+ IntOp $R0 0 + $${VarName}
+!macroend
+
+; Sets the value of a variable
+!macro StoreVar VarName IntValue
+ IntOp $${VarName} 0 + ${IntValue}
+!macroend
+
+!macro InitSection SecName
+ ; This macro reads component installed flag from the registry and
+ ;changes checked state of the section on the components page.
+ ;Input: section index constant name specified in Section command.
+
+ ClearErrors
+ ;Reading component status from registry
+ ReadRegDWORD $AR_RegFlags HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" "Installed"
+ IfErrors "default_${SecName}"
+ ;Status will stay default if registry value not found
+ ;(component was never installed)
+ IntOp $AR_RegFlags $AR_RegFlags & ${SF_SELECTED} ;Turn off all other bits
+ SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading default section flags
+ IntOp $AR_SecFlags $AR_SecFlags & 0xFFFE ;Turn lowest (enabled) bit off
+ IntOp $AR_SecFlags $AR_RegFlags | $AR_SecFlags ;Change lowest bit
+
+ ; Note whether this component was installed before
+ !insertmacro StoreVar ${SecName}_was_installed $AR_RegFlags
+ IntOp $R0 $AR_RegFlags & $AR_RegFlags
+
+ ;Writing modified flags
+ SectionSetFlags ${${SecName}} $AR_SecFlags
+
+ "default_${SecName}:"
+ !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected
+!macroend
+
+!macro FinishSection SecName
+ ; This macro reads section flag set by user and removes the section
+ ;if it is not selected.
+ ;Then it writes component installed flag to registry
+ ;Input: section index constant name specified in Section command.
+
+ SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading section flags
+ ;Checking lowest bit:
+ IntOp $AR_SecFlags $AR_SecFlags & ${SF_SELECTED}
+ IntCmp $AR_SecFlags 1 "leave_${SecName}"
+ ;Section is not selected:
+ ;Calling Section uninstall macro and writing zero installed flag
+ !insertmacro "Remove_${${SecName}}"
+ WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \
+ "Installed" 0
+ Goto "exit_${SecName}"
+
+ "leave_${SecName}:"
+ ;Section is selected:
+ WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \
+ "Installed" 1
+
+ "exit_${SecName}:"
+!macroend
+
+!macro RemoveSection_CPack SecName
+ ; This macro is used to call section's Remove_... macro
+ ;from the uninstaller.
+ ;Input: section index constant name specified in Section command.
+
+ !insertmacro "Remove_${${SecName}}"
+!macroend
+
+; Determine whether the selection of SecName changed
+!macro MaybeSelectionChanged SecName
+ !insertmacro LoadVar ${SecName}_selected
+ SectionGetFlags ${${SecName}} $R1
+ IntOp $R1 $R1 & ${SF_SELECTED} ;Turn off all other bits
+
+ ; See if the status has changed:
+ IntCmp $R0 $R1 "${SecName}_unchanged"
+ !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected
+
+ IntCmp $R1 ${SF_SELECTED} "${SecName}_was_selected"
+ !insertmacro "Deselect_required_by_${SecName}"
+ goto "${SecName}_unchanged"
+
+ "${SecName}_was_selected:"
+ !insertmacro "Select_${SecName}_depends"
+
+ "${SecName}_unchanged:"
+!macroend
+;--- End of Add/Remove macros ---
+
+;--------------------------------
+;Interface Settings
+
+ !define MUI_HEADERIMAGE
+ !define MUI_ABORTWARNING
+
+;----------------------------------------
+; based upon a script of "Written by KiCHiK 2003-01-18 05:57:02"
+;----------------------------------------
+!verbose 3
+!include "WinMessages.NSH"
+!verbose 4
+;====================================================
+; get_NT_environment
+; Returns: the selected environment
+; Output : head of the stack
+;====================================================
+!macro select_NT_profile UN
+Function ${UN}select_NT_profile
+ StrCmp $ADD_TO_PATH_ALL_USERS "1" 0 environment_single
+ DetailPrint "Selected environment for all users"
+ Push "all"
+ Return
+ environment_single:
+ DetailPrint "Selected environment for current user only."
+ Push "current"
+ Return
+FunctionEnd
+!macroend
+!insertmacro select_NT_profile ""
+!insertmacro select_NT_profile "un."
+;----------------------------------------------------
+!define NT_current_env 'HKCU "Environment"'
+!define NT_all_env 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'
+
+!ifndef WriteEnvStr_RegKey
+ !ifdef ALL_USERS
+ !define WriteEnvStr_RegKey \
+ 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'
+ !else
+ !define WriteEnvStr_RegKey 'HKCU "Environment"'
+ !endif
+!endif
+
+; AddToPath - Adds the given dir to the search path.
+; Input - head of the stack
+; Note - Win9x systems requires reboot
+
+Function AddToPath
+ Exch $0
+ Push $1
+ Push $2
+ Push $3
+
+ # don't add if the path doesn't exist
+ IfFileExists "$0\*.*" "" AddToPath_done
+
+ ReadEnvStr $1 PATH
+ ; if the path is too long for a NSIS variable NSIS will return a 0
+ ; length string. If we find that, then warn and skip any path
+ ; modification as it will trash the existing path.
+ StrLen $2 $1
+ IntCmp $2 0 CheckPathLength_ShowPathWarning CheckPathLength_Done CheckPathLength_Done
+ CheckPathLength_ShowPathWarning:
+ Messagebox MB_OK|MB_ICONEXCLAMATION "Warning! PATH too long installer unable to modify PATH!"
+ Goto AddToPath_done
+ CheckPathLength_Done:
+ Push "$1;"
+ Push "$0;"
+ Call StrStr
+ Pop $2
+ StrCmp $2 "" "" AddToPath_done
+ Push "$1;"
+ Push "$0\;"
+ Call StrStr
+ Pop $2
+ StrCmp $2 "" "" AddToPath_done
+ GetFullPathName /SHORT $3 $0
+ Push "$1;"
+ Push "$3;"
+ Call StrStr
+ Pop $2
+ StrCmp $2 "" "" AddToPath_done
+ Push "$1;"
+ Push "$3\;"
+ Call StrStr
+ Pop $2
+ StrCmp $2 "" "" AddToPath_done
+
+ Call IsNT
+ Pop $1
+ StrCmp $1 1 AddToPath_NT
+ ; Not on NT
+ StrCpy $1 $WINDIR 2
+ FileOpen $1 "$1\autoexec.bat" a
+ FileSeek $1 -1 END
+ FileReadByte $1 $2
+ IntCmp $2 26 0 +2 +2 # DOS EOF
+ FileSeek $1 -1 END # write over EOF
+ FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n"
+ FileClose $1
+ SetRebootFlag true
+ Goto AddToPath_done
+
+ AddToPath_NT:
+ StrCmp $ADD_TO_PATH_ALL_USERS "1" ReadAllKey
+ ReadRegStr $1 ${NT_current_env} "PATH"
+ Goto DoTrim
+ ReadAllKey:
+ ReadRegStr $1 ${NT_all_env} "PATH"
+ DoTrim:
+ StrCmp $1 "" AddToPath_NTdoIt
+ Push $1
+ Call Trim
+ Pop $1
+ StrCpy $0 "$1;$0"
+ AddToPath_NTdoIt:
+ StrCmp $ADD_TO_PATH_ALL_USERS "1" WriteAllKey
+ WriteRegExpandStr ${NT_current_env} "PATH" $0
+ Goto DoSend
+ WriteAllKey:
+ WriteRegExpandStr ${NT_all_env} "PATH" $0
+ DoSend:
+ SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
+
+ AddToPath_done:
+ Pop $3
+ Pop $2
+ Pop $1
+ Pop $0
+FunctionEnd
+
+
+; RemoveFromPath - Remove a given dir from the path
+; Input: head of the stack
+
+Function un.RemoveFromPath
+ Exch $0
+ Push $1
+ Push $2
+ Push $3
+ Push $4
+ Push $5
+ Push $6
+
+ IntFmt $6 "%c" 26 # DOS EOF
+
+ Call un.IsNT
+ Pop $1
+ StrCmp $1 1 unRemoveFromPath_NT
+ ; Not on NT
+ StrCpy $1 $WINDIR 2
+ FileOpen $1 "$1\autoexec.bat" r
+ GetTempFileName $4
+ FileOpen $2 $4 w
+ GetFullPathName /SHORT $0 $0
+ StrCpy $0 "SET PATH=%PATH%;$0"
+ Goto unRemoveFromPath_dosLoop
+
+ unRemoveFromPath_dosLoop:
+ FileRead $1 $3
+ StrCpy $5 $3 1 -1 # read last char
+ StrCmp $5 $6 0 +2 # if DOS EOF
+ StrCpy $3 $3 -1 # remove DOS EOF so we can compare
+ StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine
+ StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine
+ StrCmp $3 "$0" unRemoveFromPath_dosLoopRemoveLine
+ StrCmp $3 "" unRemoveFromPath_dosLoopEnd
+ FileWrite $2 $3
+ Goto unRemoveFromPath_dosLoop
+ unRemoveFromPath_dosLoopRemoveLine:
+ SetRebootFlag true
+ Goto unRemoveFromPath_dosLoop
+
+ unRemoveFromPath_dosLoopEnd:
+ FileClose $2
+ FileClose $1
+ StrCpy $1 $WINDIR 2
+ Delete "$1\autoexec.bat"
+ CopyFiles /SILENT $4 "$1\autoexec.bat"
+ Delete $4
+ Goto unRemoveFromPath_done
+
+ unRemoveFromPath_NT:
+ StrCmp $ADD_TO_PATH_ALL_USERS "1" unReadAllKey
+ ReadRegStr $1 ${NT_current_env} "PATH"
+ Goto unDoTrim
+ unReadAllKey:
+ ReadRegStr $1 ${NT_all_env} "PATH"
+ unDoTrim:
+ StrCpy $5 $1 1 -1 # copy last char
+ StrCmp $5 ";" +2 # if last char != ;
+ StrCpy $1 "$1;" # append ;
+ Push $1
+ Push "$0;"
+ Call un.StrStr ; Find `$0;` in $1
+ Pop $2 ; pos of our dir
+ StrCmp $2 "" unRemoveFromPath_done
+ ; else, it is in path
+ # $0 - path to add
+ # $1 - path var
+ StrLen $3 "$0;"
+ StrLen $4 $2
+ StrCpy $5 $1 -$4 # $5 is now the part before the path to remove
+ StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove
+ StrCpy $3 $5$6
+
+ StrCpy $5 $3 1 -1 # copy last char
+ StrCmp $5 ";" 0 +2 # if last char == ;
+ StrCpy $3 $3 -1 # remove last char
+
+ StrCmp $ADD_TO_PATH_ALL_USERS "1" unWriteAllKey
+ WriteRegExpandStr ${NT_current_env} "PATH" $3
+ Goto unDoSend
+ unWriteAllKey:
+ WriteRegExpandStr ${NT_all_env} "PATH" $3
+ unDoSend:
+ SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
+
+ unRemoveFromPath_done:
+ Pop $6
+ Pop $5
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Pop $0
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Uninstall sutff
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+###########################################
+# Utility Functions #
+###########################################
+
+;====================================================
+; IsNT - Returns 1 if the current system is NT, 0
+; otherwise.
+; Output: head of the stack
+;====================================================
+; IsNT
+; no input
+; output, top of the stack = 1 if NT or 0 if not
+;
+; Usage:
+; Call IsNT
+; Pop $R0
+; ($R0 at this point is 1 or 0)
+
+!macro IsNT un
+Function ${un}IsNT
+ Push $0
+ ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
+ StrCmp $0 "" 0 IsNT_yes
+ ; we are not NT.
+ Pop $0
+ Push 0
+ Return
+
+ IsNT_yes:
+ ; NT!!!
+ Pop $0
+ Push 1
+FunctionEnd
+!macroend
+!insertmacro IsNT ""
+!insertmacro IsNT "un."
+
+; StrStr
+; input, top of stack = string to search for
+; top of stack-1 = string to search in
+; output, top of stack (replaces with the portion of the string remaining)
+; modifies no other variables.
+;
+; Usage:
+; Push "this is a long ass string"
+; Push "ass"
+; Call StrStr
+; Pop $R0
+; ($R0 at this point is "ass string")
+
+!macro StrStr un
+Function ${un}StrStr
+Exch $R1 ; st=haystack,old$R1, $R1=needle
+ Exch ; st=old$R1,haystack
+ Exch $R2 ; st=old$R1,old$R2, $R2=haystack
+ Push $R3
+ Push $R4
+ Push $R5
+ StrLen $R3 $R1
+ StrCpy $R4 0
+ ; $R1=needle
+ ; $R2=haystack
+ ; $R3=len(needle)
+ ; $R4=cnt
+ ; $R5=tmp
+ loop:
+ StrCpy $R5 $R2 $R3 $R4
+ StrCmp $R5 $R1 done
+ StrCmp $R5 "" done
+ IntOp $R4 $R4 + 1
+ Goto loop
+done:
+ StrCpy $R1 $R2 "" $R4
+ Pop $R5
+ Pop $R4
+ Pop $R3
+ Pop $R2
+ Exch $R1
+FunctionEnd
+!macroend
+!insertmacro StrStr ""
+!insertmacro StrStr "un."
+
+Function Trim ; Added by Pelaca
+ Exch $R1
+ Push $R2
+Loop:
+ StrCpy $R2 "$R1" 1 -1
+ StrCmp "$R2" " " RTrim
+ StrCmp "$R2" "$\n" RTrim
+ StrCmp "$R2" "$\r" RTrim
+ StrCmp "$R2" ";" RTrim
+ GoTo Done
+RTrim:
+ StrCpy $R1 "$R1" -1
+ Goto Loop
+Done:
+ Pop $R2
+ Exch $R1
+FunctionEnd
+
+Function ConditionalAddToRegisty
+ Pop $0
+ Pop $1
+ StrCmp "$0" "" ConditionalAddToRegisty_EmptyString
+ WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" \
+ "$1" "$0"
+ ;MessageBox MB_OK "Set Registry: '$1' to '$0'"
+ DetailPrint "Set install registry entry: '$1' to '$0'"
+ ConditionalAddToRegisty_EmptyString:
+FunctionEnd
+
+;--------------------------------
+
+!ifdef CPACK_USES_DOWNLOAD
+Function DownloadFile
+ IfFileExists $INSTDIR\* +2
+ CreateDirectory $INSTDIR
+ Pop $0
+
+ ; Skip if already downloaded
+ IfFileExists $INSTDIR\$0 0 +2
+ Return
+
+ StrCpy $1 "@CPACK_DOWNLOAD_SITE@"
+
+ try_again:
+ NSISdl::download "$1/$0" "$INSTDIR\$0"
+
+ Pop $1
+ StrCmp $1 "success" success
+ StrCmp $1 "Cancelled" cancel
+ MessageBox MB_OK "Download failed: $1"
+ cancel:
+ Return
+ success:
+FunctionEnd
+!endif
+
+;--------------------------------
+; Create desktop icon
+
+Function finishpageaction
+ CreateShortcut "$desktop\@CPACK_NSIS_DISPLAY_NAME@.lnk" "$instdir\@CPACK_NSIS_EXECUTABLE_NAME@"
+FunctionEnd
+
+;--------------------------------
+; Installation types
+@CPACK_NSIS_INSTALLATION_TYPES@
+
+;--------------------------------
+; Component sections
+@CPACK_NSIS_COMPONENT_SECTIONS@
+
+;--------------------------------
+; Define some macro setting for the gui
+@CPACK_NSIS_INSTALLER_MUI_ICON_CODE@
+@CPACK_NSIS_INSTALLER_ICON_CODE@
+@CPACK_NSIS_INSTALLER_MUI_WELCOMEFINISH_CODE@
+@CPACK_NSIS_INSTALLER_MUI_UNWELCOMEFINISH_CODE@
+@CPACK_NSIS_INSTALLER_MUI_COMPONENTS_DESC@
+@CPACK_NSIS_INSTALLER_MUI_FINISHPAGE_RUN_CODE@
+
+;--------------------------------
+;Pages
+ !insertmacro MUI_PAGE_WELCOME
+
+ !insertmacro MUI_PAGE_LICENSE "@CPACK_RESOURCE_FILE_LICENSE@"
+ Page custom InstallOptionsPage
+ !insertmacro MUI_PAGE_DIRECTORY
+
+ ;Start Menu Folder Page Configuration
+ !define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX"
+ !define MUI_STARTMENUPAGE_DEFAULTFOLDER "@CPACK_NSIS_STARTMENU_FOLDER@"
+ !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
+ !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
+ !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
+
+ ; Finish page
+ !define MUI_FINISHPAGE_SHOWREADME ""
+ !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
+ !define MUI_FINISHPAGE_SHOWREADME_TEXT "Create Desktop Shortcut"
+ !define MUI_FINISHPAGE_SHOWREADME_FUNCTION finishpageaction
+
+ @CPACK_NSIS_PAGE_COMPONENTS@
+
+ !insertmacro MUI_PAGE_INSTFILES
+ !insertmacro MUI_PAGE_FINISH
+
+ !insertmacro MUI_UNPAGE_CONFIRM
+ !insertmacro MUI_UNPAGE_INSTFILES
+
+;--------------------------------
+;Languages
+
+ !insertmacro MUI_LANGUAGE "English" ;first language is the default language
+ !insertmacro MUI_LANGUAGE "Albanian"
+ !insertmacro MUI_LANGUAGE "Arabic"
+ !insertmacro MUI_LANGUAGE "Basque"
+ !insertmacro MUI_LANGUAGE "Belarusian"
+ !insertmacro MUI_LANGUAGE "Bosnian"
+ !insertmacro MUI_LANGUAGE "Breton"
+ !insertmacro MUI_LANGUAGE "Bulgarian"
+ !insertmacro MUI_LANGUAGE "Croatian"
+ !insertmacro MUI_LANGUAGE "Czech"
+ !insertmacro MUI_LANGUAGE "Danish"
+ !insertmacro MUI_LANGUAGE "Dutch"
+ !insertmacro MUI_LANGUAGE "Estonian"
+ !insertmacro MUI_LANGUAGE "Farsi"
+ !insertmacro MUI_LANGUAGE "Finnish"
+ !insertmacro MUI_LANGUAGE "French"
+ !insertmacro MUI_LANGUAGE "German"
+ !insertmacro MUI_LANGUAGE "Greek"
+ !insertmacro MUI_LANGUAGE "Hebrew"
+ !insertmacro MUI_LANGUAGE "Hungarian"
+ !insertmacro MUI_LANGUAGE "Icelandic"
+ !insertmacro MUI_LANGUAGE "Indonesian"
+ !insertmacro MUI_LANGUAGE "Irish"
+ !insertmacro MUI_LANGUAGE "Italian"
+ !insertmacro MUI_LANGUAGE "Japanese"
+ !insertmacro MUI_LANGUAGE "Korean"
+ !insertmacro MUI_LANGUAGE "Kurdish"
+ !insertmacro MUI_LANGUAGE "Latvian"
+ !insertmacro MUI_LANGUAGE "Lithuanian"
+ !insertmacro MUI_LANGUAGE "Luxembourgish"
+ !insertmacro MUI_LANGUAGE "Macedonian"
+ !insertmacro MUI_LANGUAGE "Malay"
+ !insertmacro MUI_LANGUAGE "Mongolian"
+ !insertmacro MUI_LANGUAGE "Norwegian"
+ !insertmacro MUI_LANGUAGE "Polish"
+ !insertmacro MUI_LANGUAGE "Portuguese"
+ !insertmacro MUI_LANGUAGE "PortugueseBR"
+ !insertmacro MUI_LANGUAGE "Romanian"
+ !insertmacro MUI_LANGUAGE "Russian"
+ !insertmacro MUI_LANGUAGE "Serbian"
+ !insertmacro MUI_LANGUAGE "SerbianLatin"
+ !insertmacro MUI_LANGUAGE "SimpChinese"
+ !insertmacro MUI_LANGUAGE "Slovak"
+ !insertmacro MUI_LANGUAGE "Slovenian"
+ !insertmacro MUI_LANGUAGE "Spanish"
+ !insertmacro MUI_LANGUAGE "Swedish"
+ !insertmacro MUI_LANGUAGE "Thai"
+ !insertmacro MUI_LANGUAGE "TradChinese"
+ !insertmacro MUI_LANGUAGE "Turkish"
+ !insertmacro MUI_LANGUAGE "Ukrainian"
+ !insertmacro MUI_LANGUAGE "Welsh"
+
+
+;--------------------------------
+;Reserve Files
+
+ ;These files should be inserted before other files in the data block
+ ;Keep these lines before any File command
+ ;Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA)
+
+ ReserveFile "NSIS.InstallOptions.ini"
+ !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
+
+;--------------------------------
+;Installer Sections
+
+Section "-Core installation"
+ ;Use the entire tree produced by the INSTALL target. Keep the
+ ;list of directories here in sync with the RMDir commands below.
+ SetOutPath "$INSTDIR"
+ @CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS@
+ @CPACK_NSIS_FULL_INSTALL@
+
+ SetShellVarContext all
+
+ ;Store installation folder
+ WriteRegStr SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "" $INSTDIR
+
+ ;Create uninstaller
+ WriteUninstaller "$INSTDIR\Uninstall.exe"
+ Push "DisplayName"
+ Push "@CPACK_NSIS_DISPLAY_NAME@"
+ Call ConditionalAddToRegisty
+ Push "DisplayVersion"
+ Push "@CPACK_PACKAGE_VERSION@"
+ Call ConditionalAddToRegisty
+ Push "Publisher"
+ Push "@CPACK_PACKAGE_VENDOR@"
+ Call ConditionalAddToRegisty
+ Push "UninstallString"
+ Push "$INSTDIR\Uninstall.exe"
+ Call ConditionalAddToRegisty
+ Push "NoRepair"
+ Push "1"
+ Call ConditionalAddToRegisty
+
+ !ifdef CPACK_NSIS_ADD_REMOVE
+ ;Create add/remove functionality
+ Push "ModifyPath"
+ Push "$INSTDIR\AddRemove.exe"
+ Call ConditionalAddToRegisty
+ !else
+ Push "NoModify"
+ Push "1"
+ Call ConditionalAddToRegisty
+ !endif
+
+ ; Optional registration
+ Push "DisplayIcon"
+ Push "$INSTDIR\@CPACK_NSIS_INSTALLED_ICON_NAME@"
+ Call ConditionalAddToRegisty
+ Push "HelpLink"
+ Push "@CPACK_NSIS_HELP_LINK@"
+ Call ConditionalAddToRegisty
+ Push "URLInfoAbout"
+ Push "@CPACK_NSIS_URL_INFO_ABOUT@"
+ Call ConditionalAddToRegisty
+ Push "Contact"
+ Push "@CPACK_NSIS_CONTACT@"
+ Call ConditionalAddToRegisty
+ !insertmacro MUI_INSTALLOPTIONS_READ $INSTALL_DESKTOP "NSIS.InstallOptions.ini" "Field 5" "State"
+ !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
+
+ ;Create shortcuts
+ CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER"
+@CPACK_NSIS_CREATE_ICONS@
+@CPACK_NSIS_CREATE_ICONS_EXTRA@
+ CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
+
+ ;Read a value from an InstallOptions INI file
+ !insertmacro MUI_INSTALLOPTIONS_READ $DO_NOT_ADD_TO_PATH "NSIS.InstallOptions.ini" "Field 2" "State"
+ !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_ALL_USERS "NSIS.InstallOptions.ini" "Field 3" "State"
+ !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_CURRENT_USER "NSIS.InstallOptions.ini" "Field 4" "State"
+
+ ; Write special uninstall registry entries
+ Push "StartMenu"
+ Push "$STARTMENU_FOLDER"
+ Call ConditionalAddToRegisty
+ Push "DoNotAddToPath"
+ Push "$DO_NOT_ADD_TO_PATH"
+ Call ConditionalAddToRegisty
+ Push "AddToPathAllUsers"
+ Push "$ADD_TO_PATH_ALL_USERS"
+ Call ConditionalAddToRegisty
+ Push "AddToPathCurrentUser"
+ Push "$ADD_TO_PATH_CURRENT_USER"
+ Call ConditionalAddToRegisty
+ Push "InstallToDesktop"
+ Push "$INSTALL_DESKTOP"
+ Call ConditionalAddToRegisty
+
+ !insertmacro MUI_STARTMENU_WRITE_END
+
+@CPACK_NSIS_EXTRA_INSTALL_COMMANDS@
+
+SectionEnd
+
+Section "-Add to path"
+ Push $INSTDIR\bin
+ StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 doNotAddToPath
+ StrCmp $DO_NOT_ADD_TO_PATH "1" doNotAddToPath 0
+ Call AddToPath
+ doNotAddToPath:
+SectionEnd
+
+;--------------------------------
+; Create custom pages
+Function InstallOptionsPage
+ !insertmacro MUI_HEADER_TEXT "Install Options" "Choose options for installing @CPACK_NSIS_PACKAGE_NAME@"
+ !insertmacro MUI_INSTALLOPTIONS_DISPLAY "NSIS.InstallOptions.ini"
+
+FunctionEnd
+
+;--------------------------------
+; determine admin versus local install
+Function un.onInit
+
+ ClearErrors
+ UserInfo::GetName
+ IfErrors noLM
+ Pop $0
+ UserInfo::GetAccountType
+ Pop $1
+ StrCmp $1 "Admin" 0 +3
+ SetShellVarContext all
+ ;MessageBox MB_OK 'User "$0" is in the Admin group'
+ Goto done
+ StrCmp $1 "Power" 0 +3
+ SetShellVarContext all
+ ;MessageBox MB_OK 'User "$0" is in the Power Users group'
+ Goto done
+
+ noLM:
+ ;Get installation folder from registry if available
+
+ done:
+
+FunctionEnd
+
+;--- Add/Remove callback functions: ---
+!macro SectionList MacroName
+ ;This macro used to perform operation on multiple sections.
+ ;List all of your components in following manner here.
+@CPACK_NSIS_COMPONENT_SECTION_LIST@
+!macroend
+
+Section -FinishComponents
+ ;Removes unselected components and writes component status to registry
+ !insertmacro SectionList "FinishSection"
+
+!ifdef CPACK_NSIS_ADD_REMOVE
+ ; Get the name of the installer executable
+ System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1'
+ StrCpy $R3 $R0
+
+ ; Strip off the last 13 characters, to see if we have AddRemove.exe
+ StrLen $R1 $R0
+ IntOp $R1 $R0 - 13
+ StrCpy $R2 $R0 13 $R1
+ StrCmp $R2 "AddRemove.exe" addremove_installed
+
+ ; We're not running AddRemove.exe, so install it
+ CopyFiles $R3 $INSTDIR\AddRemove.exe
+
+ addremove_installed:
+!endif
+SectionEnd
+;--- End of Add/Remove callback functions ---
+
+;--------------------------------
+; Component dependencies
+Function .onSelChange
+ !insertmacro SectionList MaybeSelectionChanged
+FunctionEnd
+
+;--------------------------------
+;Uninstaller Section
+
+Section "Uninstall"
+ ReadRegStr $START_MENU SHCTX \
+ "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "StartMenu"
+ ;MessageBox MB_OK "Start menu is in: $START_MENU"
+ ReadRegStr $DO_NOT_ADD_TO_PATH SHCTX \
+ "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "DoNotAddToPath"
+ ReadRegStr $ADD_TO_PATH_ALL_USERS SHCTX \
+ "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathAllUsers"
+ ReadRegStr $ADD_TO_PATH_CURRENT_USER SHCTX \
+ "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathCurrentUser"
+ ;MessageBox MB_OK "Add to path: $DO_NOT_ADD_TO_PATH all users: $ADD_TO_PATH_ALL_USERS"
+ ReadRegStr $INSTALL_DESKTOP SHCTX \
+ "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "InstallToDesktop"
+ ;MessageBox MB_OK "Install to desktop: $INSTALL_DESKTOP "
+
+@CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS@
+
+ ;Remove files we installed.
+ ;Keep the list of directories here in sync with the File commands above.
+@CPACK_NSIS_DELETE_FILES@
+@CPACK_NSIS_DELETE_DIRECTORIES@
+
+!ifdef CPACK_NSIS_ADD_REMOVE
+ ;Remove the add/remove program
+ Delete "$INSTDIR\AddRemove.exe"
+!endif
+
+ ;Remove the uninstaller itself.
+ Delete "$INSTDIR\Uninstall.exe"
+ DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
+
+ ;Remove the installation directory if it is empty.
+ RMDir "$INSTDIR"
+
+ ; Remove the registry entries.
+ DeleteRegKey SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
+
+ ; Removes all optional components
+ !insertmacro SectionList "RemoveSection_CPack"
+
+ !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
+
+ Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
+@CPACK_NSIS_DELETE_ICONS@
+@CPACK_NSIS_DELETE_ICONS_EXTRA@
+
+ ;Delete empty start menu parent diretories
+ StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
+
+ startMenuDeleteLoop:
+ ClearErrors
+ RMDir $MUI_TEMP
+ GetFullPathName $MUI_TEMP "$MUI_TEMP\.."
+
+ IfErrors startMenuDeleteLoopDone
+
+ StrCmp "$MUI_TEMP" "$SMPROGRAMS" startMenuDeleteLoopDone startMenuDeleteLoop
+ startMenuDeleteLoopDone:
+
+ ; If the user changed the shortcut, then untinstall may not work. This should
+ ; try to fix it.
+ StrCpy $MUI_TEMP "$START_MENU"
+ Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
+@CPACK_NSIS_DELETE_ICONS_EXTRA@
+
+ ;Delete empty start menu parent diretories
+ StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
+
+ secondStartMenuDeleteLoop:
+ ClearErrors
+ RMDir $MUI_TEMP
+ GetFullPathName $MUI_TEMP "$MUI_TEMP\.."
+
+ IfErrors secondStartMenuDeleteLoopDone
+
+ StrCmp "$MUI_TEMP" "$SMPROGRAMS" secondStartMenuDeleteLoopDone secondStartMenuDeleteLoop
+ secondStartMenuDeleteLoopDone:
+
+ DeleteRegKey /ifempty SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
+
+ Push $INSTDIR\bin
+ StrCmp $DO_NOT_ADD_TO_PATH_ "1" doNotRemoveFromPath 0
+ Call un.RemoveFromPath
+ doNotRemoveFromPath:
+SectionEnd
+
+;--------------------------------
+; determine admin versus local install
+; Is install for "AllUsers" or "JustMe"?
+; Default to "JustMe" - set to "AllUsers" if admin or on Win9x
+; This function is used for the very first "custom page" of the installer.
+; This custom page does not show up visibly, but it executes prior to the
+; first visible page and sets up $INSTDIR properly...
+; Choose different default installation folder based on SV_ALLUSERS...
+; "Program Files" for AllUsers, "My Documents" for JustMe...
+
+Function .onInit
+ StrCmp "@CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL@" "ON" 0 inst
+
+ ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "UninstallString"
+ StrCmp $0 "" inst
+
+ MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \
+ "@CPACK_NSIS_PACKAGE_NAME@ is already installed. $\n$\nDo you want to uninstall the old version before installing the new one?" \
+ /SD IDYES IDYES uninst IDNO inst
+ Abort
+
+;Run the uninstaller
+uninst:
+ ClearErrors
+ StrLen $2 "\Uninstall.exe"
+ StrCpy $3 $0 -$2 # remove "\Uninstall.exe" from UninstallString to get path
+ ExecWait '"$0" /S _?=$3' ;Do not copy the uninstaller to a temp file
+
+ IfErrors uninst_failed inst
+uninst_failed:
+ MessageBox MB_OK|MB_ICONSTOP "Uninstall failed."
+ Abort
+
+
+inst:
+ ; Reads components status for registry
+ !insertmacro SectionList "InitSection"
+
+ ; check to see if /D has been used to change
+ ; the install directory by comparing it to the
+ ; install directory that is expected to be the
+ ; default
+ StrCpy $IS_DEFAULT_INSTALLDIR 0
+ StrCmp "$INSTDIR" "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" 0 +2
+ StrCpy $IS_DEFAULT_INSTALLDIR 1
+
+ StrCpy $SV_ALLUSERS "JustMe"
+ ; if default install dir then change the default
+ ; if it is installed for JustMe
+ StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2
+ StrCpy $INSTDIR "$DOCUMENTS\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
+
+ ClearErrors
+ UserInfo::GetName
+ IfErrors noLM
+ Pop $0
+ UserInfo::GetAccountType
+ Pop $1
+ StrCmp $1 "Admin" 0 +4
+ SetShellVarContext all
+ ;MessageBox MB_OK 'User "$0" is in the Admin group'
+ StrCpy $SV_ALLUSERS "AllUsers"
+ Goto done
+ StrCmp $1 "Power" 0 +4
+ SetShellVarContext all
+ ;MessageBox MB_OK 'User "$0" is in the Power Users group'
+ StrCpy $SV_ALLUSERS "AllUsers"
+ Goto done
+
+ noLM:
+ StrCpy $SV_ALLUSERS "AllUsers"
+ ;Get installation folder from registry if available
+
+ done:
+ StrCmp $SV_ALLUSERS "AllUsers" 0 +3
+ StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2
+ StrCpy $INSTDIR "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
+
+ StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 noOptionsPage
+ !insertmacro MUI_INSTALLOPTIONS_EXTRACT "NSIS.InstallOptions.ini"
+
+ noOptionsPage:
+FunctionEnd
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9d07364..0128295 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,7 @@
PROJECT(XTrkCAD)
enable_testing()
cmake_minimum_required(VERSION 2.8)
+set(CMAKE_MACOSX_RPATH 0)
# where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked
@@ -11,20 +12,23 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMake")
if(UNIX)
include(FindPkgConfig)
set(XTRKCAD_USE_GTK_DEFAULT ON)
- if(APPLE)
+ if(APPLE)
SET(XTRKCAD_USE_GETTEXT_DEFAULT OFF)
- else()
- set(XTRKCAD_USE_GETTEXT_DEFAULT ON)
- add_compile_options("-std=gnu99")
- PKG_CHECK_MODULES(GTK_WEBKIT "webkit-1.0")
+ SET(XTRKCAD_USE_APPLEHELP_DEFAULT ON)
+ PKG_CHECK_MODULES(GTK_WEBKIT "webkit-1.0" QUIET)
if(GTK_WEBKIT_FOUND)
set(XTRKCAD_USE_BROWSER_DEFAULT OFF)
else()
set(XTRKCAD_USE_BROWSER_DEFAULT ON)
endif()
- endif(APPLE)
+ else()
+ set(XTRKCAD_USE_BROWSER_DEFAULT ON)
+ endif(APPLE)
endif(UNIX)
+find_package(Libzip)
+find_package(Zlib)
+
IF(WIN32)
SET(XTRKCAD_USE_GTK_DEFAULT OFF)
SET(XTRKCAD_USE_GETTEXT_DEFAULT ON)
@@ -41,7 +45,7 @@ ENDIF(WIN32)
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
if( POLICY CMP0026 )
- cmake_policy(SET CMP0026 OLD)
+ cmake_policy(SET CMP0026 NEW)
endif( POLICY CMP0026 )
endif(COMMAND cmake_policy)
@@ -54,6 +58,11 @@ if(UNIX AND NOT APPLE)
option(XTRKCAD_USE_BROWSER "Show help in default browser" ${XTRKCAD_USE_BROWSER_DEFAULT})
endif()
+if(APPLE)
+ option(XTRKCAD_USE_APPLEHELP "Show help in Apple Help" ${XTRKCAD_USE_APPLEHELP_DEFAULT})
+ option(XTRKCAD_USE_BROWSER "Show help in default browser" ${XTRKCAD_USE_BROWSER_DEFAULT})
+endif()
+
IF(UNIX)
PKG_CHECK_MODULES(GTK REQUIRED "gtk+-2.0")
ENDIF()
@@ -85,9 +94,9 @@ ENDIF(XTRKCAD_USE_PACKAGEMAKER)
# Find unit testing framework
find_package(CMocka)
if(CMOCKA_FOUND)
- include_directories(${CMOCKA_INCLUDE_DIR})
- set(LIBS ${LIBS} ${CMOCKA_LIBRARIES})
- option( XTRKCAD_TESTING "Build unittests" ON)
+ include_directories(${CMOCKA_INCLUDE_DIR})
+ set(LIBS ${LIBS} ${CMOCKA_LIBRARIES})
+ option( XTRKCAD_TESTING "Build unittests" ON)
endif()
# Find document conversion tool
@@ -100,9 +109,9 @@ CHECK_INCLUDE_FILES (malloc.h HAVE_MALLOC_H)
# Setup some global options for installation ...
SET(XTRKCAD_MAJOR_VERSION "5")
-SET(XTRKCAD_MINOR_VERSION "1")
-SET(XTRKCAD_RELEASE_VERSION "2")
-SET(XTRKCAD_VERSION_MODIFIER "a")
+SET(XTRKCAD_MINOR_VERSION "2")
+SET(XTRKCAD_RELEASE_VERSION "0")
+SET(XTRKCAD_VERSION_MODIFIER "Beta2.1")
SET(XTRKCAD_VERSION "${XTRKCAD_MAJOR_VERSION}.${XTRKCAD_MINOR_VERSION}.${XTRKCAD_RELEASE_VERSION}${XTRKCAD_VERSION_MODIFIER}")
IF(WIN32)
@@ -136,6 +145,13 @@ IF(XTRKCAD_USE_GETTEXT)
endif(INTL_PATH)
endif()
ENDIF(WIN32)
+ iF(APPLE)
+ find_path ( INTL_PATH libintl.h )
+ if(INTL_PATH)
+ message( STATUS "Use installed gettext module" )
+ INCLUDE_DIRECTORIES(${INTL_PATH})
+ endif(INTL_PATH)
+ ENDIF(APPLE)
ELSE(XTRKCAD_USE_GETTEXT)
SET(GENHELP_OPTS "-bh")
ENDIF(XTRKCAD_USE_GETTEXT)
diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt
index 5791fa2..72ca170 100644
--- a/app/CMakeLists.txt
+++ b/app/CMakeLists.txt
@@ -1,7 +1,9 @@
+
# "bin/i18n.h" is widely used
INCLUDE_DIRECTORIES(bin)
include_directories(dynstring)
include_directories(cornu)
+include_directories(libzip)
# Setup the rest of the build ...
add_subdirectory(dynstring)
@@ -15,5 +17,4 @@ ADD_SUBDIRECTORY(cornu)
IF(XTRKCAD_USE_GETTEXT)
ADD_SUBDIRECTORY(i18n)
-ENDIF(XTRKCAD_USE_GETTEXT)
-
+ENDIF(XTRKCAD_USE_GETTEXT) \ No newline at end of file
diff --git a/app/bin/CMakeLists.txt b/app/bin/CMakeLists.txt
index 74b1bc8..2dea1bc 100644
--- a/app/bin/CMakeLists.txt
+++ b/app/bin/CMakeLists.txt
@@ -1,5 +1,6 @@
+include( CheckSymbolExists )
+
ADD_EXECUTABLE(cnvdsgn cnvdsgn.c utility.c)
-GET_TARGET_PROPERTY(cnvdsgn_EXE cnvdsgn LOCATION)
IF(NOT WIN32)
TARGET_LINK_LIBRARIES(cnvdsgn m)
ENDIF(NOT WIN32)
@@ -8,7 +9,7 @@ MACRO(GENERATE_LIN lin_name)
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${lin_name}.lin
DEPENDS cnvdsgn ${CMAKE_CURRENT_SOURCE_DIR}/${lin_name}.src
- COMMAND ${cnvdsgn_EXE} < ${CMAKE_CURRENT_SOURCE_DIR}/${lin_name}.src > ${CMAKE_CURRENT_BINARY_DIR}/${lin_name}.lin
+ COMMAND cnvdsgn < ${CMAKE_CURRENT_SOURCE_DIR}/${lin_name}.src > ${CMAKE_CURRENT_BINARY_DIR}/${lin_name}.lin
)
ENDMACRO(GENERATE_LIN)
@@ -24,6 +25,9 @@ GENERATE_LIN(tosslip)
GENERATE_LIN(tostrsct)
GENERATE_LIN(towye)
GENERATE_LIN(toxing)
+GENERATE_LIN(tocornu)
+GENERATE_LIN(tocornuwye)
+GENERATE_LIN(tocornu3way)
SET(LIN_SOURCES
${CMAKE_CURRENT_BINARY_DIR}/to3way.lin
@@ -38,19 +42,21 @@ SET(LIN_SOURCES
${CMAKE_CURRENT_BINARY_DIR}/tostrsct.lin
${CMAKE_CURRENT_BINARY_DIR}/towye.lin
${CMAKE_CURRENT_BINARY_DIR}/toxing.lin
+ ${CMAKE_CURRENT_BINARY_DIR}/tocornu.lin
+ ${CMAKE_CURRENT_BINARY_DIR}/tocornuwye.lin
+ ${CMAKE_CURRENT_BINARY_DIR}/tocornu3way.lin
)
-GET_TARGET_PROPERTY(genhelp_EXE genhelp LOCATION)
-
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/bllnhlp.c
- DEPENDS genhelp ${help_SOURCE_DIR}/genhelp.in
- COMMAND ${genhelp_EXE} ${GENHELP_OPTS} ${help_SOURCE_DIR}/genhelp.in ${CMAKE_CURRENT_BINARY_DIR}/bllnhlp.c
+ DEPENDS genhelp ${help_SOURCE_DIR}/genhelp.json
+ COMMAND genhelp ${GENHELP_OPTS} ${help_SOURCE_DIR}/genhelp.json ${CMAKE_CURRENT_BINARY_DIR}/bllnhlp.c
)
SET(SOURCES
${LIN_SOURCES}
appdefaults.c
+ archive.c
bllnhlp.c
cbezier.c
cblock.c
@@ -95,6 +101,7 @@ SET(SOURCES
dcontmgm.c
dease.c
denum.c
+ directory.c
dlayer.c
doption.c
dpricels.c
@@ -104,33 +111,72 @@ SET(SOURCES
dxfformat.c
dxfoutput.c
elev.c
+ file2uri.c
+ file2uri.h
fileio.c
+ filenoteui.c
i18n.c
layout.c
+ linknoteui.c
lprintf.c
macro.c
+ manifest.c
misc2.c
param.c
+ paramfile.c
+ paramfilelist.c
+ paramfilesearch_ui.c
+ partcatalog.c
paths.c
+ shortentext.c
shrtpath.c
smalldlg.c
+ stringxtc.c
tbezier.c
tcornu.c
tcurve.c
tease.c
+ textnoteui.c
track.c
+ trknote.c
trkseg.c
tstraigh.c
utility.c
+ validator.c
+ cJSON.c
+ archive.h
+ directory.h
+ manifest.h
+ validator.h
)
+# add UTF-8 conversion utilities on Windows
+if(WIN32)
+ set( SOURCES
+ ${SOURCES}
+ utf8convert.c
+ include/utf8convert.h
+ )
+endif(WIN32)
+
+set (SOURCES
+ ${SOURCES}
+ include/dirent.h
+ include/paramfile.h
+ include/paramfilelist.h
+)
+
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
INCLUDE_DIRECTORIES(${XTrkCAD_BINARY_DIR})
INCLUDE_DIRECTORIES(${help_BINARY_DIR})
INCLUDE_DIRECTORIES(${wlib_SOURCE_DIR}/include)
+include_directories(${FREEIMAGE_INCLUDE_PATH})
+INCLUDE_DIRECTORIES(${LIBZIP_INCLUDE_DIR_ZIP})
+INCLUDE_DIRECTORIES(${CJSON_INCLUDE})
LINK_DIRECTORIES(${GTK_LIBRARY_DIRS})
LINK_DIRECTORIES(${GTK_WEBKIT_LIBRARY_DIRS})
+LINK_DIRECTORIES(${LIBZIP_LIBZIP_LIBRARY})
ADD_LIBRARY(xtrkcad-lib ${SOURCES})
@@ -145,18 +191,22 @@ TARGET_LINK_LIBRARIES(xtrkcad xtrkcad-lib)
TARGET_LINK_LIBRARIES(xtrkcad xtrkcad-wlib)
TARGET_LINK_LIBRARIES(xtrkcad xtrkcad-cornu)
TARGET_LINK_LIBRARIES(xtrkcad dynstring)
+target_link_libraries(xtrkcad ${LIBZIP_LIBRARY} ${LIBZIP_LIBRARIES})
ADD_EXECUTABLE(mkturnout
${LIN_SOURCES}
ctodesgn.c
utility.c
+
)
SET_TARGET_PROPERTIES(mkturnout PROPERTIES COMPILE_FLAGS -DMKTURNOUT)
+TARGET_LINK_LIBRARIES(mkturnout xtrkcad-cornu)
+
IF(NOT WIN32)
TARGET_LINK_LIBRARIES(mkturnout m)
TARGET_LINK_LIBRARIES(xtrkcad m)
-
+
# Link libintl for systems where it is a separate library
find_library( INTL_LIBRARY intl )
if(INTL_LIBRARY)
@@ -164,25 +214,57 @@ IF(NOT WIN32)
endif(INTL_LIBRARY)
ELSE(NOT WIN32)
TARGET_LINK_LIBRARIES(mkturnout xtrkcad-wlib)
-ENDIF(NOT WIN32)
+
+ # copy dlls into the build dir for easier debugging
+ add_custom_command(
+ TARGET xtrkcad POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${FREEIMAGE_SHAREDLIB}
+ ${CMAKE_CURRENT_BINARY_DIR}
+ )
+
+ add_custom_command(
+ TARGET xtrkcad POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${LIBZIP_SHAREDLIB}
+ ${CMAKE_CURRENT_BINARY_DIR}
+ )
+
+ add_custom_command(
+ TARGET xtrkcad POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${ZLIB_SHAREDLIB}
+ ${CMAKE_CURRENT_BINARY_DIR}
+ )
+
+ # add dll to install package
+ install(FILES
+ ${LIBZIP_SHAREDLIB}
+ DESTINATION ${XTRKCAD_BIN_INSTALL_DIR}
+ )
+ install(FILES
+ ${ZLIB_SHAREDLIB}
+ DESTINATION ${XTRKCAD_BIN_INSTALL_DIR}
+ )
+ENDIF(NOT WIN32)
# for testing only, should be IF(APPLE) ...
IF(APPLE)
- ADD_EXECUTABLE( helphelper helphelper.c )
+ ADD_EXECUTABLE( helphelper helphelper.c )
FIND_LIBRARY(COREFOUNDATION_LIBRARY CoreFoundation)
- FIND_LIBRARY(CARBON_LIBRARY Carbon)
+ FIND_LIBRARY(CARBON_LIBRARY Carbon)
TARGET_lINK_LIBRARIES(helphelper ${COREFOUNDATION_LIBRARY} ${CARBON_LIBRARY})
INSTALL(
TARGETS helphelper
RUNTIME DESTINATION ${XTRKCAD_BIN_INSTALL_DIR}
)
ENDIF(APPLE)
-
+
INSTALL(
TARGETS xtrkcad
RUNTIME DESTINATION ${XTRKCAD_BIN_INSTALL_DIR}
)
-
-if(XTRKCAD_TESTING AND CMOCKA_FOUND)
+
+if(XTRKCAD_TESTING AND CMOCKA_FOUND)
add_subdirectory( unittest )
-endif()
+endif()
diff --git a/app/bin/acclkeys.h b/app/bin/acclkeys.h
index 1cbdf00..4dd80fc 100644
--- a/app/bin/acclkeys.h
+++ b/app/bin/acclkeys.h
@@ -40,6 +40,9 @@
#define ACCL_CIRCLE2 (WCTL+'9')
#define ACCL_CIRCLE3 (WCTL+'0')
#define ACCL_BEZIER (0)
+#define ACCL_CORNU (0)
+#define ACCL_CONVERTTO (0)
+#define ACCL_CONVERTFR (0)
#define ACCL_TURNOUT (WCTL+'t')
#define ACCL_TURNTABLE (WCTL+WSHIFT+'n')
#define ACCL_PARALLEL (WCTL+WSHIFT+'p')
@@ -56,6 +59,8 @@
#define ACCL_PROFILE (WCTL+WSHIFT+'f')
#define ACCL_DELETE (WCTL+'d')
#define ACCL_TUNNEL (WCTL+WSHIFT+'t')
+#define ACCL_BRIDGE (0)
+#define ACCL_TIES (0)
#define ACCL_HNDLDTO (WCTL+WSHIFT+'i')
#define ACCL_TEXT (WCTL+WSHIFT+'x')
#define ACCL_DRAWLINE (WCTL+WSHIFT+'1')
@@ -75,8 +80,10 @@
#define ACCL_DRAWBEZLINE (0)
#define ACCL_DRAWBOX (WCTL+WSHIFT+'[')
#define ACCL_DRAWFILLBOX (WALT+WCTL+'[')
-#define ACCL_DRAWPOLYLINE (WCTL+WSHIFT+'2')
+#define ACCL_DRAWPOLYLINE (0)
#define ACCL_DRAWPOLYGON (WALT+WCTL+'2')
+#define ACCL_DRAWPOLY (0)
+#define ACCL_DRAWFILLPOLYGON (WCTL+WSHIFT+'2')
#define ACCL_NOTE (WALT+WCTL+'n')
#define ACCL_STRUCTURE (WCTL+WSHIFT+'c')
#define ACCL_ABOVE (WCTL+WSHIFT+'b')
@@ -104,6 +111,7 @@
#define ACCL_COPY (WCTL+'c')
#define ACCL_CUT (WCTL+'x')
#define ACCL_PASTE (WCTL+'v')
+#define ACCL_CLONE (0)
#define ACCL_SELECTALL (WCTL+WSHIFT+'a')
#define ACCL_DESELECTALL (0)
#define ACCL_THIN (WCTL+'1')
@@ -111,6 +119,7 @@
#define ACCL_THICK (WCTL+'3')
#define ACCL_EXPORT (WALT+WCTL+'x')
#define ACCL_IMPORT (WALT+WCTL+'i')
+#define ACCL_IMPORT_MOD (0)
#define ACCL_EXPORTDXF (0)
#define ACCL_LOOSEN (WCTL+WSHIFT+'k')
#define ACCL_GROUP (WCTL+WSHIFT+'g')
@@ -149,6 +158,7 @@
#define ACCL_PLAYBACK (WALT+WCTL+'b')
#define ACCL_BRIDGE (0)
+#define ACCL_TIES (0)
/* Blocks */
#define ACCL_BLOCK1 (0)
diff --git a/app/bin/appdefaults.c b/app/bin/appdefaults.c
index a2dd885..55a2201 100644
--- a/app/bin/appdefaults.c
+++ b/app/bin/appdefaults.c
@@ -82,7 +82,10 @@ static char *GetParamPrototype(struct appDefault *ptrDefault,
*/
struct appDefault xtcDefaults[] = {
- { "DialogItem.cmdopt-preselect", 0, INTEGERCONSTANT,{ .intValue = 1 } }, /**< default command is select */
+ { "DialogItem.cmdopt-preselect", 0, INTEGERCONSTANT,{ .intValue = 1 } }, /**< default command is select */
+ { "DialogItem.cmdopt-rightclickmode", 0, INTEGERCONSTANT,{ .intValue = 1 } }, /**< swap default to context */
+ { "DialogItem.cmdopt-selectmode", 0, INTEGERCONSTANT,{ .intValue = 0 } }, /**< 'Only' mode */
+ { "DialogItem.cmdopt-selectzero", 0, INTEGERCONSTANT,{ .intValue = 1 } }, /**< 'On' mode */
{ "DialogItem.grid-horzenable", 0, INTEGERCONSTANT, { .intValue = 0 }},
{ "DialogItem.grid-vertenable", 0, INTEGERCONSTANT,{ .intValue = 0 } },
{ "DialogItem.pref-dstfmt", 0, INTEGERFUNCTION,{ .intFunction = GetLocalDistanceFormat } }, /**< number format for distances */
@@ -227,6 +230,14 @@ InitializeRegionCode(void)
}
/**
+ * Use Metric measures everywhere except United States and Canada\
+ */
+static bool UseMetric()
+{
+ return ( strcmp( regionCode, "US" ) != 0 &&
+ strcmp( regionCode, "CA" ) != 0 );
+}
+/**
* For the US the classical 4x8 sheet is used as default size. in the metric world 1,25x2,0m is used.
*/
@@ -234,11 +245,11 @@ static double
GetLocalRoomSize(struct appDefault *ptrDefault, void *data)
{
if (!strcmp(ptrDefault->defaultKey, "draw.roomsizeY")) {
- return (strcmp(regionCode, "US") ? 125.0/2.54 : 48);
+ return (UseMetric() ? 125.0/2.54 : 48);
}
if (!strcmp(ptrDefault->defaultKey, "draw.roomsizeX")) {
- return (strcmp(regionCode, "US") ? 200.0 / 2.54 : 96);
+ return (UseMetric() ? 200.0 / 2.54 : 96);
}
return (0.0); // should never get here
@@ -255,21 +266,21 @@ GetLocalPopularScale(struct appDefault *ptrDefault, void *data)
}
/**
- * The measurement system is english for the US and metric elsewhere
+ * The measurement system is english for the US and Canada and metric elsewhere
*/
static int
GetLocalMeasureSystem(struct appDefault *ptrDefault, void *data)
{
- return (strcmp(regionCode, "US") ? 1 : 0);
+ return (UseMetric() ? 1 : 0);
}
/**
-* The distance format is 999.9 cm for metric and ?? for english
+* The distance format is 999.9 cm for metric and 999.99 for english
*/
static int
GetLocalDistanceFormat(struct appDefault *ptrDefault, void *data)
{
- return (strcmp(regionCode, "US") ? 8 : 5);
+ return (UseMetric() ? 8 : 4);
}
/**
diff --git a/app/bin/archive.c b/app/bin/archive.c
new file mode 100644
index 0000000..4e82bd3
--- /dev/null
+++ b/app/bin/archive.c
@@ -0,0 +1,454 @@
+/** \file archive.c
+ * ARCHIVE PROCESSING
+ */
+
+/* XTrkCad - Model Railroad CAD
+ * Copyright (C) 2018 Adam Richards and Martin Fischer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <errno.h>
+#include <fcntl.h>
+
+#include <string.h>
+#include <stdint.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <zip.h>
+
+#ifdef WINDOWS
+ #include "include/dirent.h"
+ #include <direct.h>
+ #include <io.h>
+ #include <process.h>
+ #define unlink(a) _unlink((a))
+ #define rmdir(a) _rmdir((a))
+ #define open(name, flag, mode) _open((name), (flag), (mode))
+ #define write(file, buffer, count) _write((file),(buffer), (count))
+ #define close(file) _close((file))
+ #define getpid() _getpid()
+#else
+ #include <dirent.h>
+ #include <unistd.h>
+#endif
+
+#include <wlib.h>
+#include "archive.h"
+#include "directory.h"
+#include "dynstring.h"
+#include "i18n.h"
+#include "messages.h"
+#include "misc.h"
+#include "misc2.h"
+#include "paths.h"
+#include "include/utf8convert.h"
+
+int log_zip = 0;
+
+//char *
+//NativeToUtf8(const char *nativeString)
+//{
+//
+//#ifdef WINDOWS
+//
+// int cnt = 2 * (strlen(nativeString) + 1);
+// char *tempBuffer = MyMalloc( cnt );
+// char *destBuffer = MyMalloc( cnt );
+//
+// //// find the
+// //cnt = MultiByteToWideChar(CP_ACP,
+// // 0,
+// // nativeString,
+// // -1,
+// // tempBuffer,
+// // 0);
+//
+// //tempBuffer = realloc(tempBuffer, cnt * 2 + 4);
+//
+// // convert to wide character (UTF16)
+// MultiByteToWideChar(CP_ACP,
+// 0,
+// nativeString,
+// -1,
+// (LPWSTR)tempBuffer,
+// cnt);
+//
+// // convert from wide char to UTF-8
+// WideCharToMultiByte(CP_UTF8,
+// 0,
+// (LPCWCH)tempBuffer,
+// -1,
+// (LPSTR)destBuffer,
+// cnt,
+// NULL,
+// NULL);
+//
+// MyFree(tempBuffer);
+//#else
+// char * destBuffer = MyStrdup(nativeString);
+//#endif
+//
+// return(destBuffer);
+//}
+
+/**
+ * Create the full path for temporary directories used in zip archive operations
+ *
+ * \param archive operation
+ * \return pointer to full path, must be free'd by caller
+ */
+
+char *
+GetZipDirectoryName(enum ArchiveOps op)
+{
+ char *opDesc;
+ char *directory;
+ DynString zipDirectory;
+
+ DynStringMalloc(&zipDirectory, 0);
+
+ switch (op) {
+ case ARCHIVE_READ:
+ opDesc = "in";
+ break;
+ case ARCHIVE_WRITE:
+ opDesc = "out";
+ break;
+ default:
+ opDesc = "err";
+ break;
+ }
+
+ DynStringPrintf(&zipDirectory,
+ "%s" FILE_SEP_CHAR "zip_%s.%d",
+ workingDir,
+ opDesc,
+ getpid());
+
+ directory = strdup(DynStringToCStr(&zipDirectory));
+ DynStringFree(&zipDirectory);
+ return (directory);
+}
+
+/*****************************************************************************
+ * Add directory to archive
+ *
+ * \param IN zip The open zip archive handle
+ * \param IN dir_path The path to add
+ * \param IN prefix The prefix in the archive
+ *
+ * \returns TRUE if OK
+ */
+
+BOOL_T AddDirectoryToArchive(
+ struct zip * za,
+ const char * dir_path,
+ const char * prefix)
+{
+
+ char *full_path;
+ char *arch_path;
+ DIR *dir;
+ const char * buf;
+ struct stat stat_path, stat_entry;
+ struct dirent *entry;
+
+ zip_source_t * zt;
+
+ // stat for the path
+ stat(dir_path, &stat_path);
+
+ // if path does not exists or is not dir - exit with status -1
+ if (S_ISDIR(stat_path.st_mode) == 0) {
+ NoticeMessage(MSG_NOT_DIR_FAIL,
+ _("Continue"), NULL, dir_path);
+ return FALSE;
+ }
+
+ // if not possible to read the directory for this user
+ if ((dir = opendir(dir_path)) == NULL) {
+ NoticeMessage(MSG_OPEN_DIR_FAIL,
+ _("Continue"), NULL, dir_path);
+ return FALSE;
+ }
+
+ // iteration through entries in the directory
+ while ((entry = readdir(dir)) != NULL) {
+ // skip entries "." and ".."
+ if (!strcmp(entry->d_name, ".") || !strcmp(entry->d_name, "..")) {
+ continue;
+ }
+
+ // determinate a full path of an entry
+ MakeFullpath(&full_path, dir_path, entry->d_name, NULL);
+
+ // stat for the entry
+ stat(full_path, &stat_entry);
+
+ if (prefix && prefix[0]) {
+ MakeFullpath(&arch_path, prefix, entry->d_name, NULL);
+ } else {
+ MakeFullpath(&arch_path, entry->d_name, NULL);
+ }
+
+ // recursively add a nested directory
+ if (S_ISDIR(stat_entry.st_mode) != 0) {
+ if (zip_dir_add(za, arch_path, 0) < 0) {
+ zip_error_t *ziperr = zip_get_error(za);
+ buf = zip_error_strerror(ziperr);
+ NoticeMessage(MSG_ZIP_DIR_ADD_FAIL,
+ _("Continue"), NULL, arch_path, buf);
+#if DEBUG
+ printf("Added Directory %s \n", arch_path);
+#endif
+ }
+
+ if (AddDirectoryToArchive(za, full_path, arch_path) != TRUE) {
+ free(full_path);
+ free(arch_path);
+ return FALSE;
+ }
+ free(arch_path);
+ continue;
+ } else {
+ char *archPathUtf8 = MyStrdup(arch_path);
+ char *fullPathUtf8 = MyStrdup(full_path);
+#ifdef WINDOWS
+ archPathUtf8 = Convert2UTF8(archPathUtf8);
+ fullPathUtf8 = Convert2UTF8(fullPathUtf8);
+ ConvertPathForward(archPathUtf8);
+#endif // WINDOWS
+ zt = zip_source_file(za, fullPathUtf8, 0, -1);
+ if (zip_file_add(za, archPathUtf8, zt, ZIP_FL_ENC_UTF_8) == -1) {
+ zip_error_t *ziperr = zip_get_error(za);
+ buf = zip_error_strerror(ziperr);
+ NoticeMessage(MSG_ZIP_FILE_ADD_FAIL, _("Continue"), NULL, full_path, arch_path,
+ buf);
+ free(full_path);
+ free(arch_path);
+ MyFree(fullPathUtf8);
+ MyFree(archPathUtf8);
+ return FALSE;
+ }
+ MyFree(fullPathUtf8);
+ MyFree(archPathUtf8);
+#if DEBUG
+ printf("Added File %s", full_path);
+#endif
+ }
+ free(arch_path);
+ free(full_path);
+ }
+
+ closedir(dir);
+ return TRUE;
+}
+
+/***********************************************************************
+ * Create Archive
+ *
+ * \param IN dir_path The place to create the archive
+ * \param IN fileName The name of the archive
+ *
+ * \return TRUE if ok
+ */
+
+BOOL_T CreateArchive(
+ const char * dir_path,
+ const char * fileName)
+{
+ struct zip *za;
+ int err;
+ char buf[100];
+
+ char * archive = MyStrdup(fileName); // Because of const char
+ char * archive_name = FindFilename(archive);
+ char * archive_path;
+ char * archiveUtf8;
+
+ MakeFullpath(&archive_path, workingDir, archive_name, NULL);
+
+ archiveUtf8 = MyStrdup(archive_path);
+#ifdef WINDOWS
+ archiveUtf8 = Convert2UTF8(archiveUtf8);
+#endif // WINDOWS
+
+ MyFree(archive);
+
+ if ((za = zip_open(archiveUtf8, ZIP_CREATE, &err)) == NULL) {
+ zip_error_to_str(buf, sizeof(buf), err, errno);
+ NoticeMessage(MSG_ZIP_CREATE_FAIL, _("Continue"), NULL, archiveUtf8, buf);
+ MyFree(archiveUtf8);
+ return FALSE;
+ }
+#if DEBUG
+ printf("====================== \n");
+ printf("Started Archive %s", archive_path);
+#endif
+
+ AddDirectoryToArchive(za, dir_path, "");
+
+ if (zip_close(za) == -1) {
+ zip_error_to_str(buf, sizeof(buf), err, errno);
+ NoticeMessage(MSG_ZIP_CLOSE_FAIL, _("Continue"), NULL, archiveUtf8, buf);
+ free(archive_path);
+ MyFree(archiveUtf8);
+ return FALSE;
+ }
+
+ unlink(fileName); //Delete Old
+ if (rename(archive_path, fileName) == -1) { //Move zip into place
+ NoticeMessage(MSG_ZIP_RENAME_FAIL, _("Continue"), NULL, archiveUtf8, fileName,
+ strerror(errno));
+ free(archive_path);
+ MyFree(archiveUtf8);
+ return FALSE;
+ }
+ free(archive_path);
+ MyFree(archiveUtf8);
+
+#if DEBUG
+ printf("Moved Archive to %s", fileName);
+ printf("====================== \n");
+#endif
+ return TRUE;
+}
+
+/**************************************************************************
+ * Unpack_Archive_for
+ *
+ * \param IN pathName the name of the archive
+ * \param IN fileName just the filename and extension of the layout
+ * \param IN tempDir The directory to use to unpack into
+ *
+ * \returns TRUE if all worked
+ */
+BOOL_T UnpackArchiveFor(
+ const char * pathName, /*Full name of archive*/
+ const char * fileName, /*Layout name and extension */
+ const char * tempDir, /*Directory to unpack into */
+ BOOL_T file_only)
+{
+ char *dirName;
+ struct zip *za;
+ struct zip_file *zf;
+ struct zip_stat sb;
+ char buf[100];
+ int err;
+ int i;
+ int64_t len;
+ FILE *fd;
+ long long sum;
+
+ char *destBuffer = MyStrdup(pathName);
+#ifdef WINDOWS
+ destBuffer = Convert2UTF8(destBuffer);
+#endif // WINDOWS
+
+
+ if ((za = zip_open(destBuffer, 0, &err)) == NULL) {
+ zip_error_to_str(buf, sizeof(buf), err, errno);
+ NoticeMessage(MSG_ZIP_OPEN_FAIL, _("Continue"), NULL, pathName, buf);
+ fprintf(stderr, "xtrkcad: can't open xtrkcad zip archive `%s': %s \n",
+ pathName, buf);
+
+ MyFree(destBuffer);
+ return FALSE;
+ }
+
+ for (i = 0; i < zip_get_num_entries(za, 0); i++) {
+ if (zip_stat_index(za, i, 0, &sb) == 0) {
+ len = strlen(sb.name);
+
+#if DEBUG
+ printf("==================\n");
+ printf("Name: [%s], ", sb.name);
+ printf("Size: [%llu], ", sb.size);
+ printf("mtime: [%u]\n", (unsigned int)sb.mtime);
+ printf("mtime: [%u]\n", (unsigned int)sb.mtime);
+#endif
+
+ LOG(log_zip, 1, ("================= \n"))
+ LOG(log_zip, 1, ("Zip-Name [%s] \n", sb.name))
+ LOG(log_zip, 1, ("Zip-Size [%llu] \n", sb.size))
+ LOG(log_zip, 1, ("Zip-mtime [%u] \n", (unsigned int)sb.mtime))
+
+ if (sb.name[len - 1] == '/' && !file_only) {
+ MakeFullpath(&dirName, tempDir, &sb.name[0], NULL);
+ if (SafeCreateDir(dirName) != TRUE) {
+ free(dirName);
+ return FALSE;
+ }
+ free(dirName);
+ } else {
+ zf = zip_fopen_index(za, i, 0);
+ if (!zf) {
+ NoticeMessage(MSG_ZIP_INDEX_FAIL, _("Continue"), NULL);
+ fprintf(stderr, "xtrkcad zip archive open index error \n");
+ return FALSE;
+ }
+
+ if (file_only) {
+ if (strncmp(sb.name, fileName, strlen(fileName)) != 0) {
+ continue; /* Ignore any other files than the one we asked for */
+ }
+ }
+ MakeFullpath(&dirName, tempDir, &sb.name[0], NULL);
+#ifdef WINDOWS
+ ConvertUTF8ToSystem(dirName);
+#endif // WINDOWS
+ fd = fopen(dirName, "wb");
+ if (!fd) {
+ NoticeMessage(MSG_ZIP_FILE_OPEN_FAIL, _("Continue"), NULL, dirName,
+ strerror(errno));
+ free(dirName);
+ return FALSE;
+ }
+
+ sum = 0;
+ while (sum != sb.size) {
+ len = zip_fread(zf, buf, 100);
+ if (len < 0) {
+ NoticeMessage(MSG_ZIP_READ_FAIL, _("Continue"), NULL, dirName, &sb.name[0]);
+ free(dirName);
+ fclose(fd);
+ return FALSE;
+ }
+ fwrite(buf, 1, (unsigned int)len, fd);
+ sum += len;
+ }
+ fclose(fd);
+ free(dirName);
+ zip_fclose(zf);
+ }
+ } else {
+ LOG(log_zip, 1, ("Zip-Unknown File[%s] Line[%d] \n", __FILE__, __LINE__))
+#if DEBUG
+ printf("File[%s] Line[%d]\n", __FILE__, __LINE__);
+#endif
+ }
+ }
+
+ MyFree(destBuffer);
+
+ if (zip_close(za) == -1) {
+ NoticeMessage(MSG_ZIP_CLOSE_FAIL, _("Continue"), NULL, dirName, &sb.name[0]);
+ return FALSE;
+ }
+ return TRUE;
+}
+
diff --git a/app/bin/archive.h b/app/bin/archive.h
new file mode 100644
index 0000000..cfbb642
--- /dev/null
+++ b/app/bin/archive.h
@@ -0,0 +1,15 @@
+#ifndef HAVE_ARCHIVE_H
+#define HAVE_ARCHIVE_H
+#include <zip.h>
+#include "common.h"
+
+enum ArchiveOps { ARCHIVE_READ, ARCHIVE_WRITE }; // has to be contiguous, see CleanupFiles()!
+
+extern int log_zip;
+extern const char *workingDir;
+
+char *GetZipDirectoryName(enum ArchiveOps op);
+BOOL_T AddDirectoryToArchive(struct zip * za, const char * dir_path, const char * prefix);
+BOOL_T CreateArchive(const char * dir_path, const char * fileName);
+BOOL_T UnpackArchiveFor(const char * pathName, const char * fileName, const char * tempDir, BOOL_T file_only);
+#endif
diff --git a/app/bin/bdf2xtp.c b/app/bin/bdf2xtp.c
index 76fb31a..c979aa3 100644
--- a/app/bin/bdf2xtp.c
+++ b/app/bin/bdf2xtp.c
@@ -9,6 +9,7 @@
#include <math.h>
#ifndef _MSDOS
#include <unistd.h>
+#include "fileio.h"
#else
#define M_PI 3.14159265358979323846
#define strncasecmp strnicmp
@@ -563,7 +564,7 @@ void generateTurnout( void )
fprintf( fout, "\tC 0 0 %0.6f %0.6f %0.6f %0.6f %0.6f\n",
X(sp->radius), X(center.x), X(center.y), X(a0), X(a1) );
}
- fprintf( fout, "\tEND\n" );
+ fprintf( fout, "\t%s\n", END_SEGS );
}
@@ -875,7 +876,7 @@ void process( tokenDesc_t * tp, arg_t *args )
break;
}
}
- fprintf( fout, "\tEND\n" );
+ fprintf( fout, "\t%s\n", END_SEGS );
break;
case ACT_TRANSFERTABLE:
@@ -928,7 +929,7 @@ void process( tokenDesc_t * tp, arg_t *args )
}
offset += length2;
}
- fprintf( fout, "\tEND\n");
+ fprintf( fout, "\t%s\n", END_SEGS);
break;
case ACT_ENDTRANSFERTABLE:
@@ -956,7 +957,7 @@ void process( tokenDesc_t * tp, arg_t *args )
break;
}
}
- fprintf( fout, "\tEND\n" );
+ fprintf( fout, "\t%s\n", END_SEGS );
break;
case ACT_FILL_POINT:
diff --git a/app/bin/bitmaps/SVG/star.svg b/app/bin/bitmaps/SVG/star.svg
new file mode 100644
index 0000000..13f0914
--- /dev/null
+++ b/app/bin/bitmaps/SVG/star.svg
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="64"
+ height="64"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ version="1.0"
+ inkscape:export-filename="C:\Users\mf\Desktop\star.png"
+ inkscape:export-xdpi="22.5"
+ inkscape:export-ydpi="22.5"
+ sodipodi:docbase="C:\Users\mf\Documents\XTrackCAD\src\work\app\bin\bitmaps\SVG"
+ sodipodi:docname="star.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient3159">
+ <stop
+ style="stop-color:#808080;stop-opacity:1;"
+ offset="0"
+ id="stop3161" />
+ <stop
+ id="stop3167"
+ offset="1"
+ style="stop-color:#404040;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3153">
+ <stop
+ id="stop3155"
+ offset="0"
+ style="stop-color:#ffff00;stop-opacity:1;" />
+ <stop
+ id="stop3157"
+ offset="1"
+ style="stop-color:#ffff00;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3136">
+ <stop
+ style="stop-color:#ffff00;stop-opacity:1;"
+ offset="0"
+ id="stop3138" />
+ <stop
+ style="stop-color:#ffff00;stop-opacity:0;"
+ offset="1"
+ id="stop3140" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3159"
+ id="radialGradient3165"
+ cx="37.931442"
+ cy="34.408134"
+ fx="37.931442"
+ fy="34.408134"
+ r="35.324765"
+ gradientTransform="matrix(1,0,0,0.956027,0,1.7894602)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.8"
+ inkscape:cx="61.305799"
+ inkscape:cy="40.157191"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ width="64px"
+ height="64px"
+ inkscape:window-width="765"
+ inkscape:window-height="575"
+ inkscape:window-x="785"
+ inkscape:window-y="236" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <path
+ sodipodi:type="star"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.27731241;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1.0;fill:url(#radialGradient3165)"
+ id="path2160"
+ sodipodi:sides="5"
+ sodipodi:cx="43.214287"
+ sodipodi:cy="44"
+ sodipodi:r1="35.801678"
+ sodipodi:r2="14.088029"
+ sodipodi:arg1="-2.8166875"
+ sodipodi:arg2="-2.1460669"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="M 9.2857168,32.571428 L 35.549528,32.179508 L 43.599,8.2003894 L 52.087702,33.057648 L 77.380623,33.303196 L 56.363118,49.057747 L 63.94553,73.188622 L 42.467296,58.068211 L 21.860564,72.736365 L 29.60379,47.636886 L 9.2857168,32.571428 z "
+ transform="matrix(0.793397,0,0,0.7725297,-2.475811,0.6853635)" />
+ </g>
+</svg>
diff --git a/app/bin/bitmaps/XCF/bluedot.xcf b/app/bin/bitmaps/XCF/bluedot.xcf
new file mode 100644
index 0000000..30d323e
--- /dev/null
+++ b/app/bin/bitmaps/XCF/bluedot.xcf
Binary files differ
diff --git a/app/bin/bitmaps/XCF/greendot.xcf b/app/bin/bitmaps/XCF/greendot.xcf
new file mode 100644
index 0000000..f59311a
--- /dev/null
+++ b/app/bin/bitmaps/XCF/greendot.xcf
Binary files differ
diff --git a/app/bin/bitmaps/XCF/greydot.xcf b/app/bin/bitmaps/XCF/greydot.xcf
new file mode 100644
index 0000000..7e795a5
--- /dev/null
+++ b/app/bin/bitmaps/XCF/greydot.xcf
Binary files differ
diff --git a/app/bin/bitmaps/XCF/reddot.xcf b/app/bin/bitmaps/XCF/reddot.xcf
new file mode 100644
index 0000000..449581f
--- /dev/null
+++ b/app/bin/bitmaps/XCF/reddot.xcf
Binary files differ
diff --git a/app/bin/bitmaps/XCF/yellowdot.xcf b/app/bin/bitmaps/XCF/yellowdot.xcf
new file mode 100644
index 0000000..9395645
--- /dev/null
+++ b/app/bin/bitmaps/XCF/yellowdot.xcf
Binary files differ
diff --git a/app/bin/bitmaps/arrow0.xbm b/app/bin/bitmaps/arrow0.xbm
index 60fb2aa..f07a9e4 100644
--- a/app/bin/bitmaps/arrow0.xbm
+++ b/app/bin/bitmaps/arrow0.xbm
@@ -1,9 +1,9 @@
#define arrow0_width 24
#define arrow0_height 24
-static char arrow0_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x04, 0x02,
- 0x00, 0x04, 0x01, 0x00, 0x84, 0x00, 0x00, 0x04, 0x01, 0x00, 0x24, 0x02,
- 0x00, 0x54, 0x04, 0x00, 0x8c, 0x08, 0x00, 0x04, 0x11, 0x00, 0x00, 0x22,
- 0x00, 0x00, 0x44, 0x00, 0x00, 0x88, 0x00, 0x00, 0x50, 0x00, 0x00, 0x20};
+static unsigned char arrow0_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x24, 0x00,
+0x00, 0x42, 0x00, 0x00, 0x81, 0x00, 0x80, 0x00, 0x01, 0xc0, 0xe7, 0x03,
+0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00,
+0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x3c, 0x00};
diff --git a/app/bin/bitmaps/arrow0_ctl.xbm b/app/bin/bitmaps/arrow0_ctl.xbm
new file mode 100644
index 0000000..3b535c4
--- /dev/null
+++ b/app/bin/bitmaps/arrow0_ctl.xbm
@@ -0,0 +1,9 @@
+#define arrow0_ctl_width 24
+#define arrow0_ctl_height 24
+static unsigned char arrow0_ctl_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x3c, 0x00,
+0x00, 0x7e, 0x00, 0x00, 0xff, 0x00, 0x80, 0xff, 0x01, 0xc0, 0xff, 0x03,
+0x00, 0x24, 0x00, 0x00, 0x24, 0x06, 0x00, 0x24, 0x09, 0x00, 0x24, 0x01,
+0x00, 0x24, 0x01, 0x00, 0x24, 0x09, 0x00, 0x24, 0x06, 0x00, 0x3c, 0x00}; \ No newline at end of file
diff --git a/app/bin/bitmaps/arrow0_shift.xbm b/app/bin/bitmaps/arrow0_shift.xbm
new file mode 100644
index 0000000..683f7e3
--- /dev/null
+++ b/app/bin/bitmaps/arrow0_shift.xbm
@@ -0,0 +1,9 @@
+#define arrow0_shift_width 24
+#define arrow0_shift_height 24
+static unsigned char arrow0_shift_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x18, 0x00, 0x00, 0x24, 0x00, 0x00, 0x5a, 0x00, 0x00, 0xa5, 0x00,
+0x80, 0x42, 0x01, 0x40, 0x81, 0x02, 0xa0, 0x00, 0x05, 0xd0, 0xe7, 0x0b,
+0x10, 0x24, 0x08, 0xe0, 0xa5, 0x67, 0x00, 0xa5, 0x90, 0x00, 0xa5, 0x10,
+0x00, 0xa5, 0x60, 0x00, 0xa5, 0x80, 0x00, 0xa5, 0x90, 0x00, 0xbd, 0x60}; \ No newline at end of file
diff --git a/app/bin/bitmaps/arrow3.xbm b/app/bin/bitmaps/arrow3.xbm
index 5f85bc0..aeac91f 100644
--- a/app/bin/bitmaps/arrow3.xbm
+++ b/app/bin/bitmaps/arrow3.xbm
@@ -1,6 +1,6 @@
#define arrow3_width 24
#define arrow3_height 24
-static char arrow3_bits[] = {
+static unsigned char arrow3_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0x00, 0xfc, 0x03,
diff --git a/app/bin/bitmaps/arrow3_ctl.xbm b/app/bin/bitmaps/arrow3_ctl.xbm
new file mode 100644
index 0000000..e87279a
--- /dev/null
+++ b/app/bin/bitmaps/arrow3_ctl.xbm
@@ -0,0 +1,9 @@
+#define arrow3_ctl_width 24
+#define arrow3_ctl_height 24
+static unsigned char arrow3_ctl_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x04, 0x02,
+0x00, 0x04, 0x01, 0x00, 0x84, 0x00, 0x00, 0xc4, 0x01, 0x00, 0xe4, 0x03,
+0xc0, 0xd4, 0x07, 0x20, 0x8d, 0x0f, 0x20, 0x04, 0x1f, 0x20, 0x00, 0x3e,
+0x20, 0x00, 0x7c, 0x20, 0x01, 0xf8, 0xc0, 0x00, 0x70, 0x00, 0x00, 0x20 }; \ No newline at end of file
diff --git a/app/bin/bitmaps/arrow3_shift.xbm b/app/bin/bitmaps/arrow3_shift.xbm
new file mode 100644
index 0000000..d2ee571
--- /dev/null
+++ b/app/bin/bitmaps/arrow3_shift.xbm
@@ -0,0 +1,9 @@
+#define arrow3_shift_width 24
+#define arrow3_shift_height 24
+static unsigned char arrow3_shift_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xff, 0x0f, 0x00, 0x01, 0x10, 0x00, 0xfd, 0x17, 0x00, 0xfd, 0x0b,
+0x00, 0xfd, 0x05, 0x00, 0xfd, 0x02, 0x00, 0xfd, 0x05, 0x00, 0xfd, 0x0b,
+0x30, 0xdd, 0x17, 0x48, 0xad, 0x2f, 0x08, 0x55, 0x5f, 0x30, 0x89, 0xbe,
+0x40, 0x06, 0x7d, 0x48, 0x00, 0xfa, 0x30, 0x00, 0x74, 0x00, 0x00, 0xa8}; \ No newline at end of file
diff --git a/app/bin/bitmaps/arrowr3.xbm b/app/bin/bitmaps/arrowr3.xbm
new file mode 100644
index 0000000..e63a39b
--- /dev/null
+++ b/app/bin/bitmaps/arrowr3.xbm
@@ -0,0 +1,9 @@
+#define arrowr3_width 24
+#define arrowr3_height 24
+static unsigned char arrowr3_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0xc0, 0x3f, 0x00,
+0x80, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x80, 0x3f, 0x00, 0xc0, 0x3f, 0x00,
+0xe0, 0x3b, 0x00, 0xf0, 0x31, 0x00, 0xf8, 0x20, 0x00, 0x7c, 0x00, 0x00,
+0x3e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x04, 0x00, 0x00}; \ No newline at end of file
diff --git a/app/bin/bitmaps/arrowr3_ctl.xbm b/app/bin/bitmaps/arrowr3_ctl.xbm
new file mode 100644
index 0000000..f7bd770
--- /dev/null
+++ b/app/bin/bitmaps/arrowr3_ctl.xbm
@@ -0,0 +1,9 @@
+#define arrowr3_ctl_width 24
+#define arrowr3_ctl_height 24
+static unsigned char arrowr3_ctl_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x40, 0x20, 0x00,
+0x80, 0x20, 0x00, 0x00, 0x21, 0x00, 0x80, 0x23, 0x00, 0xc0, 0x27, 0x00,
+0xe0, 0x2b, 0x00, 0xf0, 0x31, 0x06, 0xf8, 0x20, 0x09, 0x7c, 0x00, 0x01,
+0x3e, 0x00, 0x01, 0x1f, 0x00, 0x09, 0x0e, 0x00, 0x06, 0x04, 0x00, 0x00}; \ No newline at end of file
diff --git a/app/bin/bitmaps/arrowr3_shift.xbm b/app/bin/bitmaps/arrowr3_shift.xbm
new file mode 100644
index 0000000..1b10ea9
--- /dev/null
+++ b/app/bin/bitmaps/arrowr3_shift.xbm
@@ -0,0 +1,9 @@
+#define arrowr3_shift_width 24
+#define arrowr3_shift_height 24
+static unsigned char arrowr3_shift_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0x00, 0x08, 0x80, 0x00, 0xe8, 0xbf, 0x00, 0xd0, 0xbf, 0x00,
+0xa0, 0xbf, 0x00, 0x40, 0xbf, 0x00, 0xa0, 0xbf, 0x00, 0xd0, 0xbf, 0x00,
+0xe8, 0xbb, 0x00, 0xf4, 0xb5, 0x0c, 0xfa, 0xaa, 0x12, 0x7d, 0x91, 0x02,
+0xbe, 0x60, 0x0c, 0x5f, 0x00, 0x10, 0x2e, 0x00, 0x12, 0x15, 0x00, 0x0c}; \ No newline at end of file
diff --git a/app/bin/bitmaps/arrows.xbm b/app/bin/bitmaps/arrows.xbm
index 494b8de..7ac3113 100644
--- a/app/bin/bitmaps/arrows.xbm
+++ b/app/bin/bitmaps/arrows.xbm
@@ -1,7 +1,7 @@
#define arrows_width 24
#define arrows_height 24
// static unsigned char arrows_bits[] = {
-static char arrows_bits[] = {
+static unsigned char arrows_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0x1f, 0x00, 0x01, 0x10, 0x00, 0xfd, 0x17, 0x00, 0xfd, 0x13,
diff --git a/app/bin/bitmaps/background.xpm b/app/bin/bitmaps/background.xpm
new file mode 100644
index 0000000..4859734
--- /dev/null
+++ b/app/bin/bitmaps/background.xpm
@@ -0,0 +1,155 @@
+/* XPM */
+static char *background[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 133 2 ",
+" c #0B2B2B",
+". c #183A3A",
+"X c #789757",
+"o c #799358",
+"O c #7E9068",
+"+ c #86A068",
+"@ c #9BA77A",
+"# c #99B073",
+"$ c #9DB777",
+"% c #98B67E",
+"& c #A6BD7F",
+"* c #A4BE7E",
+"= c #77AAA8",
+"- c #5FA7D7",
+"; c #58A1DB",
+": c #59A2DB",
+"> c #5AA3DA",
+", c #5BA4DB",
+"< c #5CA4D9",
+"1 c #5DA5DB",
+"2 c #66ACD3",
+"3 c #62A9D5",
+"4 c #69AED1",
+"5 c #60A9DB",
+"6 c #63ACDB",
+"7 c #64ACDA",
+"8 c #66AFDB",
+"9 c #62ACDE",
+"0 c #67B0DC",
+"q c #67B0DE",
+"w c #68B1DB",
+"e c #6BB4DB",
+"r c #6EB7DB",
+"t c #6FBADF",
+"y c #71B9DB",
+"u c #71BADB",
+"i c #74BEDE",
+"p c #6FBAE0",
+"a c #6EB9E3",
+"s c #73BEE3",
+"d c #74BEE0",
+"f c #72BEE4",
+"g c #70BCE7",
+"h c #6BBFFF",
+"j c #7CC9E9",
+"k c #7CCAEC",
+"l c #6EC2FF",
+"z c #6FC4FF",
+"x c #73C8FF",
+"c c #74C9FF",
+"v c #78CDFF",
+"b c #79CEFF",
+"n c #7DD2FF",
+"m c #7ED3FF",
+"M c #809786",
+"N c #84AC98",
+"B c #93A492",
+"V c #A1AD8E",
+"C c #A3B587",
+"Z c #A7B787",
+"A c #ABB584",
+"S c #A2B389",
+"D c #A3B988",
+"F c #A8BA94",
+"G c #ACBD97",
+"H c #B5BC90",
+"J c #8EA8A8",
+"K c #97BEAB",
+"L c #8BADB7",
+"P c #80B2B8",
+"I c #91B5B6",
+"U c #AFBFA9",
+"Y c #A4C182",
+"T c #B5C987",
+"R c #B2C088",
+"E c #BAD08E",
+"W c #AFC491",
+"Q c #B6CB97",
+"! c #BED190",
+"~ c #AFCEAA",
+"^ c #BBCAA0",
+"/ c #BECFA1",
+"( c #BDCEA7",
+") c #B5C7A9",
+"_ c #BFD0AE",
+"` c #BFD1AF",
+"' c #A8CDBF",
+"] c #C2CC95",
+"[ c #C7D798",
+"{ c #C3D19D",
+"} c #C6D898",
+"| c #CDD8A6",
+" . c #D0DDA6",
+".. c #C4DCB6",
+"X. c #D3E0A2",
+"o. c #D0E4B9",
+"O. c #DBE5B9",
+"+. c #D9E5BD",
+"@. c #E2ECB3",
+"#. c #E4EDB0",
+"$. c #87B8C5",
+"%. c #96CFDB",
+"&. c #9CD1D5",
+"*. c #98D1DF",
+"=. c #A4CDC4",
+"-. c #ADD7D0",
+";. c #B0D1D5",
+":. c #82D6FF",
+">. c #83D7FF",
+",. c #83D8FF",
+"<. c #8CDEFF",
+"1. c #95DEFC",
+"2. c #99E1F6",
+"3. c #A8E4ED",
+"4. c #B6E6E2",
+"5. c #BDEAE6",
+"6. c #ADE7F8",
+"7. c #E2EBCA",
+"8. c #E2F3F3",
+"9. c #E4F4F4",
+"0. c #E6F5F5",
+"q. c #E9F6F6",
+"w. c #EBF7F7",
+"e. c #E9F9F9",
+"r. c #EEF8F8",
+"t. c #F1F9F9",
+"y. c #F4FBFB",
+"u. c #F7FCFC",
+"i. c #F9FDFD",
+"p. c #FCFEFE",
+"a. c #FEFFFF",
+"s. c #FFFFFF",
+"d. c None",
+/* pixels */
+"d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.",
+"d.s.s.s.s.s.s.s.s.s.s.s.s.s.d.d.",
+"d.s.; ; , < 5 6 7 w e r r s.d.d.",
+"d.s.; l l 9 x v a m ,.1.k s.d.d.",
+"d.i.< z x q b m j ,.3.5.-.i.d.d.",
+"d.u.- 7 q g p s %.*.%.=.{ u.d.d.",
+"d.y.3 b m t :.5.| @.o...K u.d.d.",
+"d.t.2 m :.i 2.#._ .} ! = t.d.d.",
+"d.w.4 u i k ' ] / W * $ = w.d.d.",
+"d.q.$.<.6.;.7.+.^ ~ D % N q.d.d.",
+"d.w.H O. .R T * D _ ) F I q.d.d.",
+"d.q.A [ ! # Q ( F F ) V L 0.d.d.",
+"d.0.@ Z C S + X o O B M J 0.d.d.",
+". e.8.8.8.8.8.8.8.8.8.8.8.e.. d.",
+"d. d.d.",
+"d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d."
+};
diff --git a/app/bin/bitmaps/bluedot.xpm b/app/bin/bitmaps/bluedot.xpm
new file mode 100644
index 0000000..5c1df4c
--- /dev/null
+++ b/app/bin/bitmaps/bluedot.xpm
@@ -0,0 +1,26 @@
+/* XPM */
+static char * bluedot[] = {
+"16 16 7 1",
+" c None",
+". c #000000",
+"+ c #3465A4",
+"@ c #3565A4",
+"# c #4465A1",
+"$ c #5A649B",
+"% c #4C79BA",
+" ",
+" ",
+" .... ",
+" ..#@@#.. ",
+" .$%%%+++$. ",
+" .%%%%%+++. ",
+" .#%%%%%+++#. ",
+" .@%%%%%+++@. ",
+" .@+%%%++++@. ",
+" .#++++++++#. ",
+" .++++++++. ",
+" .$++++++$. ",
+" ..#@@#.. ",
+" .... ",
+" ",
+" "};
diff --git a/app/bin/bitmaps/bma0.xbm b/app/bin/bitmaps/bma0.xbm
index e0a2815..6986b0f 100644
--- a/app/bin/bitmaps/bma0.xbm
+++ b/app/bin/bitmaps/bma0.xbm
@@ -1,6 +1,6 @@
#define bma0_width 16
#define bma0_height 16
-static char bma0_bits[] = {
+static unsigned char bma0_bits[] = {
0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00,
0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00,
0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00};
diff --git a/app/bin/bitmaps/bma135.xbm b/app/bin/bitmaps/bma135.xbm
index e0c5f4a..5a3ffcb 100644
--- a/app/bin/bitmaps/bma135.xbm
+++ b/app/bin/bitmaps/bma135.xbm
@@ -1,6 +1,6 @@
#define bma135_width 16
#define bma135_height 16
-static char bma135_bits[] = {
+static unsigned char bma135_bits[] = {
0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00,
0x40, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08,
0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x00};
diff --git a/app/bin/bitmaps/bma45.xbm b/app/bin/bitmaps/bma45.xbm
index c4717b4..6a943f0 100644
--- a/app/bin/bitmaps/bma45.xbm
+++ b/app/bin/bitmaps/bma45.xbm
@@ -1,6 +1,6 @@
#define bma45_width 16
#define bma45_height 16
-static char bma45_bits[] = {
+static unsigned char bma45_bits[] = {
0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02,
0x00, 0x01, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00,
0x04, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00};
diff --git a/app/bin/bitmaps/bma90.xbm b/app/bin/bitmaps/bma90.xbm
index cf03ee3..007a8d5 100644
--- a/app/bin/bitmaps/bma90.xbm
+++ b/app/bin/bitmaps/bma90.xbm
@@ -1,6 +1,6 @@
#define bma90_width 16
#define bma90_height 16
-static char bma90_bits[] = {
+static unsigned char bma90_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/app/bin/bitmaps/bmendpt.xbm b/app/bin/bitmaps/bmendpt.xbm
index 1bea7b7..7572d17 100644
--- a/app/bin/bitmaps/bmendpt.xbm
+++ b/app/bin/bitmaps/bmendpt.xbm
@@ -1,6 +1,6 @@
#define bmendpt_width 16
#define bmendpt_height 16
-static char bmendpt_bits[] = {
+static unsigned char bmendpt_bits[] = {
0x81, 0x40, 0x82, 0x20, 0x84, 0x10, 0x88, 0x08, 0x90, 0x04, 0xa0, 0x02,
0xc0, 0x01, 0xff, 0x7f, 0xc0, 0x01, 0xa0, 0x02, 0x90, 0x04, 0x88, 0x08,
0x84, 0x10, 0x82, 0x20, 0x81, 0x40, 0x00, 0x00};
diff --git a/app/bin/bitmaps/bridge.xpm b/app/bin/bitmaps/bridge.xpm
new file mode 100644
index 0000000..446f055
--- /dev/null
+++ b/app/bin/bitmaps/bridge.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char * bridge_xpm[] = {
+"16 16 3 1",
+" c None",
+". c #00FFFF",
+"+ c #000000",
+".. ..",
+" .. .. ",
+" ............ ",
+" .......... ",
+"+ + + + ",
+"+++++++++++++++ ",
+"+ + + + ",
+"+ + + + ",
+"+ + + + ",
+"+++++++++++++++ ",
+"+ + + + ",
+" .......... ",
+" ............ ",
+" .. .. ",
+".. ..",
+" "};
diff --git a/app/bin/bitmaps/clip.xbm b/app/bin/bitmaps/clip.xbm
new file mode 100644
index 0000000..6bffd55
--- /dev/null
+++ b/app/bin/bitmaps/clip.xbm
@@ -0,0 +1,6 @@
+#define clip_width 16
+#define clip_height 16
+static unsigned char clip_bits[] = {
+ 0xff, 0x03, 0x01, 0x06, 0x01, 0x0a, 0x01, 0x12, 0x01, 0x22, 0x01, 0x7e,
+ 0x01, 0x40, 0xf9, 0x5f, 0x05, 0x60, 0x13, 0x60, 0xf3, 0x7f, 0x05, 0x60,
+ 0xf9, 0x5f, 0x01, 0x40, 0x01, 0x40, 0xff, 0x7f };
diff --git a/app/bin/bitmaps/convertfr.xpm b/app/bin/bitmaps/convertfr.xpm
new file mode 100644
index 0000000..7f141c8
--- /dev/null
+++ b/app/bin/bitmaps/convertfr.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * convertfr_xpm[] = {
+"16 16 4 1",
+" c None",
+"! c #000000000000",
+"# c #FFFF00000000",
+"$ c #808080000000",
+" !!! !!!! ",
+" !! !!! !!",
+" !! !! !! ",
+" !!!! # !!! ",
+" # ",
+" ## # ## ",
+" ####### ",
+" ### ",
+" # ",
+" ",
+" !!!!!! ",
+" !! ",
+" !!!! ",
+" !! ",
+" !! ",
+" "}; \ No newline at end of file
diff --git a/app/bin/bitmaps/convertto.xpm b/app/bin/bitmaps/convertto.xpm
new file mode 100644
index 0000000..f0fead2
--- /dev/null
+++ b/app/bin/bitmaps/convertto.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * convertto_xpm[] = {
+"16 16 4 1",
+" c None",
+"! c #000000000000",
+"# c #FFFF00000000",
+"$ c #808080000000",
+" !!! !!!! ",
+" !! !!! !!",
+" !! !! !! ",
+" !!!! # !!! ",
+" ### ",
+" ####### ",
+" ## # ## ",
+" # ",
+" # ",
+" ",
+" !!!!!! ",
+" !! ",
+" !!!! ",
+" !! ",
+" !! ",
+" "}; \ No newline at end of file
diff --git a/app/bin/bitmaps/cornu.xpm b/app/bin/bitmaps/cornu.xpm
new file mode 100644
index 0000000..bd3a2ed
--- /dev/null
+++ b/app/bin/bitmaps/cornu.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * cornu_xpm[] = {
+"16 16 4 1",
+" c None",
+"! c #000000000000",
+"# c #FFFF00000000",
+"$ c #808080000000",
+" !!$!!!! ",
+" !! $ !! ",
+" !! $!!! $$$",
+" $! !!$ $$ !!",
+" !! $! ! !!",
+"!! !! !! !! ",
+"! !! $###$ ",
+"$$$$ # # ",
+"! !! ### ",
+"! !! ",
+"! !$ ",
+"!!$$! ",
+"!$ !! ",
+"$! $!!!$!!$###",
+" !! $ $ # #",
+" $!!!!!$!!$###"};
diff --git a/app/bin/bitmaps/cross0.xbm b/app/bin/bitmaps/cross0.xbm
index 373d897..8f2e35d 100644
--- a/app/bin/bitmaps/cross0.xbm
+++ b/app/bin/bitmaps/cross0.xbm
@@ -1,5 +1,5 @@
#define cross0_width 8
#define cross0_height 8
//static unsigned char cross0_bits[] = {
-static char cross0_bits[] = {
+static unsigned char cross0_bits[] = {
0x04, 0x04, 0x1f, 0x04, 0x04, 0x00, 0x00, 0x00};
diff --git a/app/bin/bitmaps/delete.xpm b/app/bin/bitmaps/delete.xpm
index 1e88b80..63b875a 100644
--- a/app/bin/bitmaps/delete.xpm
+++ b/app/bin/bitmaps/delete.xpm
@@ -1,21 +1,22 @@
/* XPM */
static char * delete_xpm[] = {
-"16 16 2 1",
-". c None",
-" c #000000000000",
-" ............ .",
-" ......... ..",
-".. ...... ...",
-"... .... ....",
-".. .. .. .. ..",
-" .. . ",
-".. ... ... ..",
-".. .... .... ..",
-".. ... ... ..",
-" . . . ",
-".. . .... . ..",
-"... ...... ...",
-".. ........ ..",
-". ........... .",
-" .............",
-". ............. "};
+"16 16 3 1",
+" c None",
+". c #FF0000",
+"+ c #000000",
+" .. .. ",
+" .. .. ",
+" .. .. ",
+" .. .. ",
+" + .. .. + ",
+"++++++....++++++",
+" + +..+ + ",
+" + +..+ + ",
+" + .... + ",
+"+++++..++..+++++",
+" + .. .. + ",
+" .. .. ",
+" .. .. ",
+" .. .. ",
+".. ..",
+" "};
diff --git a/app/bin/bitmaps/document-export.xpm b/app/bin/bitmaps/document-export.xpm
new file mode 100644
index 0000000..8d632de
--- /dev/null
+++ b/app/bin/bitmaps/document-export.xpm
@@ -0,0 +1,90 @@
+/* XPM */
+static char * export_xpm[] = {
+"16 16 71 1",
+" c None",
+". c #406C98",
+"+ c #DDF0FB",
+"@ c #D4E9F7",
+"# c #D1E7F5",
+"$ c #CEE4F4",
+"% c #CCE2F3",
+"& c #CCE1F2",
+"* c #A7C2DC",
+"= c #D6EBF7",
+"- c #C5DFEF",
+"; c #C1DBED",
+"> c #BCD6EA",
+", c #B6D0E8",
+"' c #B3CDE6",
+") c #B2CCE5",
+"! c #9AB6D2",
+"~ c #E5F6FF",
+"{ c #D7ECF8",
+"] c #C7E1EF",
+"^ c #85A4C2",
+"/ c #D7EDF8",
+"( c #C8E2F0",
+"_ c #D8EEF8",
+": c #CAE4F1",
+"< c #D9EEF9",
+"[ c #CBE5F2",
+"} c #8FAFCF",
+"| c #83A5C7",
+"1 c #DAEFF9",
+"2 c #CDE7F2",
+"3 c #81A3C5",
+"4 c #105293",
+"5 c #DAF0F9",
+"6 c #CEE8F3",
+"7 c #C0DAEB",
+"8 c #AFCCE0",
+"9 c #9AB9D4",
+"0 c #88A9C9",
+"a c #7FA1C3",
+"b c #CCE1F0",
+"c c #155493",
+"d c #DBF0FA",
+"e c #D0EAF4",
+"f c #CFE8F3",
+"g c #D4EAF6",
+"h c #E1F3FD",
+"i c #195793",
+"j c #DBF1FA",
+"k c #D1EBF4",
+"l c #C1DCEB",
+"m c #AFCBE0",
+"n c #98B7D1",
+"o c #84A4C4",
+"p c #799BBD",
+"q c #CBE0EF",
+"r c #1E5993",
+"s c #DCF1FA",
+"t c #D2ECF5",
+"u c #7597B9",
+"v c #275D94",
+"w c #DCF2FB",
+"x c #D3EDF5",
+"y c #84A4C0",
+"z c #6B8DAF",
+"A c #3D71A5",
+"B c #DDF2FB",
+"C c #D4EEF6",
+"D c #D8EDF8",
+"E c #E1F4FD",
+"F c #DFF2FC",
+" ......... ",
+" .+@#$%&&*. ",
+" .=-;>,')!~. ",
+" .{]-;>,'^^^. ",
+" ./(]-;>,')&. ",
+" ._:(]-;>,'&. ",
+" .<[:(]-;>}| ",
+" .12[:(]-;3~4 ",
+" .562[7890ab~c ",
+" .de62fg1h~~~~i",
+" .jke6lmnopq~r ",
+" .stke62[:u~v ",
+" .wxtke62[yzA ",
+" .BCxtke62[D. ",
+" .EBwsjd51<F. ",
+" ............ "};
diff --git a/app/bin/bitmaps/document-exportdxf.xpm b/app/bin/bitmaps/document-exportdxf.xpm
new file mode 100644
index 0000000..fc4071b
--- /dev/null
+++ b/app/bin/bitmaps/document-exportdxf.xpm
@@ -0,0 +1,84 @@
+/* XPM */
+static char * export_dxf_xpm[] = {
+"16 16 65 1",
+" c None",
+". c #406C98",
+"+ c #DDF0FB",
+"@ c #D4E9F7",
+"# c #11CC22",
+"$ c #CEE4F4",
+"% c #CCE2F3",
+"& c #CCE1F2",
+"* c #A7C2DC",
+"= c #D6EBF7",
+"- c #C5DFEF",
+"; c #BCD6EA",
+"> c #B6D0E8",
+", c #B3CDE6",
+"' c #9AB6D2",
+") c #E5F6FF",
+"! c #D7ECF8",
+"~ c #C7E1EF",
+"{ c #C1DBED",
+"] c #85A4C2",
+"^ c #D8EEF8",
+"/ c #CAE4F1",
+"( c #D9EEF9",
+"_ c #CBE5F2",
+": c #C8E2F0",
+"< c #8FAFCF",
+"[ c #83A5C7",
+"} c #DAEFF9",
+"| c #CDE7F2",
+"1 c #81A3C5",
+"2 c #105293",
+"3 c #AFCCE0",
+"4 c #9AB9D4",
+"5 c #88A9C9",
+"6 c #7FA1C3",
+"7 c #CCE1F0",
+"8 c #155493",
+"9 c #DBF0FA",
+"0 c #D0EAF4",
+"a c #CFE8F3",
+"b c #D4EAF6",
+"c c #E1F3FD",
+"d c #195793",
+"e c #DBF1FA",
+"f c #D1EBF4",
+"g c #CEE8F3",
+"h c #C1DCEB",
+"i c #AFCBE0",
+"j c #98B7D1",
+"k c #84A4C4",
+"l c #799BBD",
+"m c #CBE0EF",
+"n c #1E5993",
+"o c #DCF1FA",
+"p c #D2ECF5",
+"q c #7597B9",
+"r c #275D94",
+"s c #84A4C0",
+"t c #6B8DAF",
+"u c #3D71A5",
+"v c #DDF2FB",
+"w c #D4EEF6",
+"x c #D8EDF8",
+"y c #E1F4FD",
+"z c #DFF2FC",
+" ......... ",
+" .+@#$%&#*. ",
+" .=-#;>,#'). ",
+" .!~#{;>#]]]. ",
+" .##########. ",
+" .^/#~-{#>,&. ",
+" .(_#:~-#;<[ ",
+" .}|#/:~#{1)2 ",
+" .#####34567)8 ",
+" .90#|ab}c))))d",
+" .ef#ghijklm)n ",
+" .op#0g|#/q)r ",
+" .########stu ",
+" .vw#pf0#|_x. ",
+" .yv#oe9#}(z. ",
+" ............ "};
diff --git a/app/bin/bitmaps/document-import.xpm b/app/bin/bitmaps/document-import.xpm
new file mode 100644
index 0000000..28dc3c8
--- /dev/null
+++ b/app/bin/bitmaps/document-import.xpm
@@ -0,0 +1,92 @@
+/* XPM */
+static char * import_xpm[] = {
+"16 16 73 1",
+" c None",
+". c #406C98",
+"+ c #DDF0FB",
+"@ c #D4E9F7",
+"# c #D1E7F5",
+"$ c #CEE4F4",
+"% c #CCE2F3",
+"& c #CCE1F2",
+"* c #A7C2DC",
+"= c #D6EBF7",
+"- c #C5DFEF",
+"; c #C1DBED",
+"> c #BCD6EA",
+", c #B6D0E8",
+"' c #B3CDE6",
+") c #B2CCE5",
+"! c #9AB6D2",
+"~ c #E5F6FF",
+"{ c #D7ECF8",
+"] c #C7E1EF",
+"^ c #85A4C2",
+"/ c #D7EDF8",
+"( c #C8E2F0",
+"_ c #D8EEF8",
+": c #94B4D1",
+"< c #86A7C9",
+"[ c #AECBE1",
+"} c #D9EEF9",
+"| c #81A3C5",
+"1 c #E4F6FF",
+"2 c #93B2D0",
+"3 c #B6D2E6",
+"4 c #155493",
+"5 c #7FA1C3",
+"6 c #CBE1F0",
+"7 c #DEF2FC",
+"8 c #A5C3DA",
+"9 c #BED9EA",
+"0 c #195793",
+"a c #DFF2FC",
+"b c #CFE7F4",
+"c c #1E5993",
+"d c #799BBD",
+"e c #CAE0EF",
+"f c #A4C2D9",
+"g c #C0DBEB",
+"h c #D4EAF7",
+"i c #DBF1FA",
+"j c #7597B9",
+"k c #8BABC7",
+"l c #B8D4E6",
+"m c #CBE5F2",
+"n c #CAE4F1",
+"o c #D5EBF7",
+"p c #DCF1FA",
+"q c #86A6C1",
+"r c #6F91B2",
+"s c #ACC9DC",
+"t c #CEE8F3",
+"u c #CDE7F2",
+"v c #D6ECF7",
+"w c #DCF2FB",
+"x c #D3EDF5",
+"y c #D2ECF5",
+"z c #D1EBF4",
+"A c #D0EAF4",
+"B c #DDF2FB",
+"C c #D4EEF6",
+"D c #D8EDF8",
+"E c #E1F4FD",
+"F c #DBF0FA",
+"G c #DAF0F9",
+"H c #DAEFF9",
+" ......... ",
+" .+@#$%&&* ",
+" .=-;>,')!~ ",
+" .{]-;>,'^^^. ",
+" ./(]-;>,')&. ",
+" ._:<[-;>,'&. ",
+" .}|123-;>,%. ",
+" 44556789-;>$. ",
+"0~~~~1a/b]-;#. ",
+" ccddeafg(]-h. ",
+" .ij1klmn(]o. ",
+" .pqrstumn(v. ",
+" .wxyzAtumn{. ",
+" .BCxyzAtumD. ",
+" .EBwpiFGH}a. ",
+" ............ "};
diff --git a/app/bin/bitmaps/document-importmod.xpm b/app/bin/bitmaps/document-importmod.xpm
new file mode 100644
index 0000000..d0efd02
--- /dev/null
+++ b/app/bin/bitmaps/document-importmod.xpm
@@ -0,0 +1,71 @@
+/* XPM */
+static char *importmod_xpm[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 49 1 ",
+" c #27795F",
+". c #305173",
+"X c #1A6878",
+"o c #07900F",
+"O c #0E8E14",
+"+ c #0B9C17",
+"@ c #10971E",
+"# c #0BA619",
+"$ c #10A51D",
+"% c #0DB61C",
+"& c #159E22",
+"* c #209E2D",
+"= c #18A727",
+"- c #16B627",
+"; c #27AB35",
+": c #30AF3B",
+"> c #2AB437",
+", c #31B63E",
+"< c #36BD46",
+"1 c #3CC44C",
+"2 c #40C94E",
+"3 c #44CB54",
+"4 c #54DB64",
+"5 c #195793",
+"6 c #3B6D8D",
+"7 c #39798B",
+"8 c #3F6E9C",
+"9 c #377C97",
+"0 c #3D77A6",
+"q c #3F7FBC",
+"w c #37878B",
+"e c #38938E",
+"r c #378399",
+"t c #3983A7",
+"y c #6F91B2",
+"u c #789ABC",
+"i c #7FA1C3",
+"p c #86A6C4",
+"a c #96B4D1",
+"s c #A7C4DB",
+"d c #AECBE1",
+"f c #B9D5E7",
+"g c #C0DBEB",
+"h c #C9E1EF",
+"j c #CDE4F2",
+"k c #D7EDF8",
+"l c #DFF2FC",
+"z c #E5F6FF",
+"x c None",
+/* pixels */
+"xxqqqqqqqqqxxxxx",
+"xxt3111;<>sqxxxx",
+"xxq1<<:O;<a;qxxx",
+"xxq<;;&x=2pppqxx",
+"xxq===$o+;>#xxxx",
+"xxq=aid=$=,1>txx",
+"xxq=ilaf->44>txx",
+"x5qiijlsg-31=0xx",
+"5zzzzzzkjh1,#rxx",
+"x5Xuuhlsf1111exx",
+"xxw<uzpf211;:exx",
+"xx9;pys1<<;$+9xx",
+"xx0@&@=<;;=%#9xx",
+"xx8;<;;===$##7xx",
+"xx8*<<==+@++#7xx",
+"xx.677776667w xx"
+};
diff --git a/app/bin/bitmaps/dpolyline.xpm b/app/bin/bitmaps/dpolyline.xpm
new file mode 100644
index 0000000..7f01bda
--- /dev/null
+++ b/app/bin/bitmaps/dpolyline.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * dpolyline_xpm[] = {
+"16 16 3 1",
+"X c None",
+" c #FFFF00000000",
+". c #000000000000",
+"XXXXXXXXXXXXXXXX",
+"XXXXXXX .... XXX",
+"XXXXXXXXXX..XXXX",
+"XXXXXXXXX.XXXXXX",
+"XXXXXXX..XXXXXXX",
+"XXXXXX.XXXXXXXXX",
+"XXXX..XXXXXXXXXX",
+"XXX ...XXXXXXXXX",
+"XXXXXXX......XXX",
+" XXXXXXXXXXXX.. ",
+"X.XXXXXXXXXXXX.X",
+"X.XXXXXXXXXX..XX",
+"XX.XXXXXXXX.XXXX",
+"XXX.XXXXXX.XXXXX",
+"XXX.XXXX..XXXXXX",
+"XXXX .. XXXXXXXX"};
+
diff --git a/app/bin/bitmaps/export.xpm b/app/bin/bitmaps/export.xpm
deleted file mode 100644
index f6bc7d3..0000000
--- a/app/bin/bitmaps/export.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static char * export_xpm[] = {
-"16 16 2 1",
-" c None",
-". c #000000000000",
-" .........",
-" . .",
-" . . .",
-" . . .",
-"...... . .",
-" .. .",
-" .. .",
-"...... . .",
-" . . .. .",
-" . .. . ..",
-" . .. ",
-" ",
-" . . ... .",
-" . . .",
-" . . . . .",
-" "};
diff --git a/app/bin/bitmaps/flash.xbm b/app/bin/bitmaps/flash.xbm
index 677978d..d135b2f 100644
--- a/app/bin/bitmaps/flash.xbm
+++ b/app/bin/bitmaps/flash.xbm
@@ -1,6 +1,6 @@
#define flash_width 24
#define flash_height 24
-static char flash_bits[] = {
+static unsigned char flash_bits[] = {
0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x04, 0x08, 0x04, 0x02,
0x10, 0x04, 0x01, 0x20, 0x84, 0x00, 0x40, 0x44, 0x00, 0x80, 0x24, 0x00,
0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf5, 0x1f, 0x00, 0x00, 0x00,
diff --git a/app/bin/bitmaps/greendot.xpm b/app/bin/bitmaps/greendot.xpm
new file mode 100644
index 0000000..8c44035
--- /dev/null
+++ b/app/bin/bitmaps/greendot.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * greendot[] = {
+"16 16 4 1",
+" c None",
+". c #000000",
+"+ c #4E9A06",
+"@ c #59A51A",
+" ",
+" ",
+" .... ",
+" ..++++.. ",
+" .+@@@++++. ",
+" .@@@@@+++. ",
+" .+@@@@@++++. ",
+" .+@@@@@++++. ",
+" .++@@@+++++. ",
+" .++++++++++. ",
+" .++++++++. ",
+" .++++++++. ",
+" ..++++.. ",
+" .... ",
+" ",
+" "};
diff --git a/app/bin/bitmaps/greenstar.xpm b/app/bin/bitmaps/greenstar.xpm
new file mode 100644
index 0000000..b83a4b9
--- /dev/null
+++ b/app/bin/bitmaps/greenstar.xpm
@@ -0,0 +1,69 @@
+/* XPM */
+static char * greenstar[] = {
+"16 16 50 1",
+" c None",
+". c #264706",
+"+ c #274906",
+"@ c #346408",
+"# c #386C09",
+"$ c #478A0D",
+"% c #46880C",
+"& c #224007",
+"* c #131D0A",
+"= c #234207",
+"- c #274B06",
+"; c #2D5306",
+"> c #305A07",
+", c #3A700A",
+"' c #4D960E",
+") c #4A900D",
+"! c #356508",
+"~ c #264806",
+"{ c #203B07",
+"] c #1C3508",
+"^ c #203C07",
+"/ c #42800C",
+"( c #478B0D",
+"_ c #529E0F",
+": c #4C940E",
+"< c #46890D",
+"[ c #417E0B",
+"} c #3C730A",
+"| c #1B3208",
+"1 c #346208",
+"2 c #4B920E",
+"3 c #498F0D",
+"4 c #45850C",
+"5 c #407C0B",
+"6 c #315B07",
+"7 c #336108",
+"8 c #44840C",
+"9 c #2E5507",
+"0 c #3F7A0B",
+"a c #3F790B",
+"b c #3C740A",
+"c c #2B5106",
+"d c #1F3808",
+"e c #386B09",
+"f c #234107",
+"g c #2A4F06",
+"h c #182C09",
+"i c #2E5707",
+"j c #1A3008",
+"k c #172B09",
+" ",
+" ",
+" ",
+" .+ ",
+" @# ",
+" $%& ",
+" *=-;>,')!~={] ",
+" ^#/('_:<[}@| ",
+" 1%)23456 ",
+" 74%8[9 ",
+" ,05abc ",
+" deef;e1 ",
+" &gh di| ",
+" j k ",
+" ",
+" "};
diff --git a/app/bin/bitmaps/greydot.xpm b/app/bin/bitmaps/greydot.xpm
new file mode 100644
index 0000000..771a096
--- /dev/null
+++ b/app/bin/bitmaps/greydot.xpm
@@ -0,0 +1,25 @@
+/* XPM */
+static char * greydot[] = {
+"16 16 6 1",
+" c None",
+". c #000000",
+"+ c #30312F",
+"@ c #959792",
+"# c #888A85",
+"$ c #A2A49F",
+" ",
+" ",
+" .... ",
+" .+@@@@+. ",
+" .#$$$@@@#. ",
+" +$$$$$@@@+ ",
+" .@$$$$$@@@@. ",
+" .@$$$$$@@@@. ",
+" .@@$$$@@@@@. ",
+" .@@@@@@@@@@. ",
+" +@@@@@@@@+ ",
+" .#@@@@@@#. ",
+" .+@@@@+. ",
+" .... ",
+" ",
+" "};
diff --git a/app/bin/bitmaps/greystar.xpm b/app/bin/bitmaps/greystar.xpm
new file mode 100644
index 0000000..e7c5300
--- /dev/null
+++ b/app/bin/bitmaps/greystar.xpm
@@ -0,0 +1,69 @@
+/* XPM */
+static char * greystar[] = {
+"16 16 50 1",
+" c None",
+". c #5A5B57",
+"+ c #5B5D59",
+"@ c #6D6F6A",
+"# c #73756F",
+"$ c #878984",
+"% c #868882",
+"& c #555652",
+"* c #3D3F3C",
+"= c #565854",
+"- c #5C5E59",
+"; c #62645F",
+"> c #676964",
+", c #757772",
+"' c #8F918C",
+") c #8B8D88",
+"! c #6E706A",
+"~ c #5A5C58",
+"{ c #51534F",
+"] c #4D4F4B",
+"^ c #525450",
+"/ c #81837D",
+"( c #888A84",
+"_ c #959792",
+": c #8E908A",
+"< c #868983",
+"[ c #7F817B",
+"} c #787A74",
+"| c #4C4D49",
+"1 c #6C6E69",
+"2 c #8D8F8A",
+"3 c #8B8D87",
+"4 c #848680",
+"5 c #7D807A",
+"6 c #686A65",
+"7 c #6B6D68",
+"8 c #83857F",
+"9 c #646561",
+"0 c #7D7F79",
+"a c #7C7E78",
+"b c #787B75",
+"c c #60625D",
+"d c #50514D",
+"e c #72746E",
+"f c #565753",
+"g c #5F615D",
+"h c #474945",
+"i c #646661",
+"j c #4A4B48",
+"k c #474844",
+" ",
+" ",
+" ",
+" .+ ",
+" @# ",
+" $%& ",
+" *=-;>,')!~={] ",
+" ^#/('_:<[}@| ",
+" 1%)23456 ",
+" 74%8[9 ",
+" ,05abc ",
+" deef;e1 ",
+" &gh di| ",
+" j k ",
+" ",
+" "};
diff --git a/app/bin/bitmaps/import.xpm b/app/bin/bitmaps/import.xpm
deleted file mode 100644
index f048333..0000000
--- a/app/bin/bitmaps/import.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static char * import_xpm[] = {
-"16 16 2 1",
-" c None",
-". c #FFFFFFFFFFFF",
-" .......",
-" ....... .......",
-" ....... ... ...",
-" ....... .... ..",
-" ....... . .",
-" ....... ...... ",
-" ....... ...... ",
-" ....... . .",
-" . .... .... ..",
-" .. .. ... ...",
-" .... .........",
-"................",
-".. . . . .....",
-"... ... .. .....",
-" . . .. .. .....",
-"................"};
diff --git a/app/bin/bitmaps/joinline.xpm b/app/bin/bitmaps/joinline.xpm
new file mode 100644
index 0000000..06e22f8
--- /dev/null
+++ b/app/bin/bitmaps/joinline.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char * joinline_xpm[] = {
+"16 16 3 1",
+" c None",
+". c #000000000000",
+"X c #FFFF00000000",
+" ",
+" ",
+" ",
+" .",
+" ..",
+" ...",
+" ... ",
+" ... ",
+" XXX ",
+" X X ",
+" X X X ",
+".....X X ",
+".....XXXX ",
+"..... X ",
+" X ",
+" "}; \ No newline at end of file
diff --git a/app/bin/bitmaps/link.xbm b/app/bin/bitmaps/link.xbm
new file mode 100644
index 0000000..199256e
--- /dev/null
+++ b/app/bin/bitmaps/link.xbm
@@ -0,0 +1,6 @@
+#define link_width 16
+#define link_height 16
+static unsigned char link_bits[] = {
+ 0xff, 0x03, 0x01, 0x06, 0x01, 0x0a, 0x01, 0x12, 0x01, 0x22, 0x01, 0x7e,
+ 0x01, 0x40, 0x01, 0x40, 0x3d, 0x5e, 0x43, 0x61, 0xf3, 0x67, 0x43, 0x61,
+ 0x3d, 0x5e, 0x01, 0x40, 0x01, 0x40, 0xff, 0x7f };
diff --git a/app/bin/bitmaps/magnet.xpm b/app/bin/bitmaps/magnet.xpm
new file mode 100644
index 0000000..99a31db
--- /dev/null
+++ b/app/bin/bitmaps/magnet.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char * magnet_xpm[] = {
+"16 16 3 1",
+" c #FF0000",
+". c None",
+"X c #FFFF00",
+"................",
+"........ ......",
+"....... ....",
+"...... ...",
+"..... ..",
+"..... . .",
+".... ... .",
+"... ... .",
+"..XXX ... ..",
+".XXXXX... ..",
+"..XXXX.. ...",
+"...XX..XX ....",
+"......XXXXX ....",
+"......XXXXX.....",
+"........XX......",
+"................"};
diff --git a/app/bin/bitmaps/magnifier.xpm b/app/bin/bitmaps/magnifier.xpm
new file mode 100644
index 0000000..69a3faa
--- /dev/null
+++ b/app/bin/bitmaps/magnifier.xpm
@@ -0,0 +1,89 @@
+/* XPM */
+static char * magnifier_xpm[] = {
+"16 16 70 1",
+" c None",
+". c #545454",
+"+ c #555555",
+"@ c #515151",
+"# c #5E6063",
+"$ c #94A3B1",
+"% c #C5D5E6",
+"& c #DFEAF4",
+"* c #D9E3ED",
+"= c #A2ACB6",
+"- c #4D4D4D",
+"; c #5A5D5F",
+"> c #AEC1D5",
+", c #C4D8EB",
+"' c #E2ECF6",
+") c #E4EDF6",
+"! c #B8C8D9",
+"~ c #5B5D60",
+"{ c #494949",
+"] c #919FAD",
+"^ c #BBD2E8",
+"/ c #D5E3F1",
+"( c #D6E4F2",
+"_ c #97A4B0",
+": c #434343",
+"< c #B6CBE0",
+"[ c #C1D3E4",
+"} c #3E3E3E",
+"| c #BED4E9",
+"1 c #C8DBED",
+"2 c #383838",
+"3 c #BCCFE1",
+"4 c #CAD8E7",
+"5 c #313131",
+"6 c #939DA8",
+"7 c #BFD5EA",
+"8 c #DFE9F5",
+"9 c #9EA6AD",
+"0 c #373737",
+"a c #444647",
+"b c #C4D1DE",
+"c c #D9E6F3",
+"d c #E6EFF7",
+"e c #D3D9DF",
+"f c #3B3C3D",
+"g c #262626",
+"h c #3B3B3B",
+"i c #3C3C3C",
+"j c #ADADAF",
+"k c #28292B",
+"l c #91979D",
+"m c #E3E8EE",
+"n c #EDF3F9",
+"o c #E5EAEF",
+"p c #9EA0A3",
+"q c #282829",
+"r c #464647",
+"s c #B8B8BC",
+"t c #151516",
+"u c #141414",
+"v c #3D3D3D",
+"w c #515153",
+"x c #C4C4CC",
+"y c #212122",
+"z c #606064",
+"A c #D1D1DD",
+"B c #2E2E30",
+"C c #DADAEA",
+"D c #3F3F43",
+"E c #151515",
+" .+++++. ",
+" @#$%&*=#@ ",
+" -;>,'))'!~-",
+" {]^/))))(_{",
+" :<^^^^^^^[:",
+" }|^^)))))1}",
+" 23^))))))42",
+" 5678))))'95",
+" 0abc)))defg",
+" hijklmnopq ",
+" irst uuuuu ",
+" vwxy ",
+" }zAB ",
+" 0CD ",
+" Eu ",
+" "};
diff --git a/app/bin/bitmaps/note.xbm b/app/bin/bitmaps/note.xbm
index 7ca281a..3d2cac9 100644
--- a/app/bin/bitmaps/note.xbm
+++ b/app/bin/bitmaps/note.xbm
@@ -1,6 +1,6 @@
#define note_width 16
#define note_height 16
-static char note_bits[] = {
- 0xff, 0x03, 0x01, 0x06, 0x81, 0x0a, 0x81, 0x12, 0x81, 0x22, 0x81, 0x7e,
- 0x81, 0x40, 0x81, 0x40, 0x81, 0x40, 0x81, 0x40, 0x81, 0x40, 0x01, 0x40,
- 0x81, 0x40, 0x01, 0x40, 0x01, 0x40, 0xff, 0x7f};
+static unsigned char note_bits[] = {
+ 0xff, 0x03, 0x01, 0x06, 0x01, 0x0a, 0x01, 0x12, 0x01, 0x22, 0x01, 0x7e,
+ 0x01, 0x40, 0xbd, 0x43, 0x01, 0x40, 0x01, 0x40, 0xfd, 0x5e, 0x01, 0x40,
+ 0x01, 0x40, 0xbd, 0x4f, 0x01, 0x40, 0xff, 0x7f };
diff --git a/app/bin/bitmaps/pan.xpm b/app/bin/bitmaps/pan.xpm
index 8782714..9575ec5 100644
--- a/app/bin/bitmaps/pan.xpm
+++ b/app/bin/bitmaps/pan.xpm
@@ -14,7 +14,7 @@ static char * pan_xpm[] = {
" XXXXXXXXXXXXXX ",
" XXXXXXXXXXXXXX ",
" XX XX XX ",
-" XX ",
+" XX ",
" XX XX XX ",
" XXXXXX ",
" XXXX ",
diff --git a/app/bin/bitmaps/parallel-line.xpm b/app/bin/bitmaps/parallel-line.xpm
new file mode 100644
index 0000000..4ac471d
--- /dev/null
+++ b/app/bin/bitmaps/parallel-line.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char * parallel_line_xpm[] = {
+"16 16 3 1",
+" c None",
+". c #000000000000",
+"X c #FFFF00000000",
+" ",
+" ",
+" ",
+"................",
+" X ",
+" X X ",
+" X X ",
+" ",
+" ",
+" . . . ",
+"................",
+" . . . ",
+" . . . ",
+" . . . ",
+"................",
+" . . . "};
diff --git a/app/bin/bitmaps/parallel.xpm b/app/bin/bitmaps/parallel.xpm
index 3fe5591..eb816dc 100644
--- a/app/bin/bitmaps/parallel.xpm
+++ b/app/bin/bitmaps/parallel.xpm
@@ -1,15 +1,16 @@
/* XPM */
static char * parallel_xpm[] = {
-"16 16 2 1",
+"16 16 3 1",
" c None",
". c #000000000000",
-" ",
-" ",
-" ",
+"X c #FFFF00000000",
+"................",
+" . . . ",
+" . . . ",
"................",
-" . ",
-" . . ",
-" . . ",
+" . X . ",
+" X X ",
+" X X ",
" ",
" ",
" . . . ",
diff --git a/app/bin/bitmaps/reddot.xpm b/app/bin/bitmaps/reddot.xpm
new file mode 100644
index 0000000..14529bf
--- /dev/null
+++ b/app/bin/bitmaps/reddot.xpm
@@ -0,0 +1,26 @@
+/* XPM */
+static char * reddot[] = {
+"16 16 7 1",
+" c None",
+". c #000000",
+"+ c #CC0000",
+"@ c #CA1F1E",
+"# c #E62E16",
+"$ c #C04E4B",
+"% c #B25F5B",
+" ",
+" ",
+" .... ",
+" ..$@@$.. ",
+" .%###+++%. ",
+" .#####+++. ",
+" .$#####+++$. ",
+" .@#####+++@. ",
+" .@+###++++@. ",
+" .$++++++++$. ",
+" .++++++++. ",
+" .%++++++%. ",
+" ..$@@$.. ",
+" .... ",
+" ",
+" "};
diff --git a/app/bin/bitmaps/redstar.xpm b/app/bin/bitmaps/redstar.xpm
new file mode 100644
index 0000000..b9f51f9
--- /dev/null
+++ b/app/bin/bitmaps/redstar.xpm
@@ -0,0 +1,67 @@
+/* XPM */
+static char * redstar[] = {
+"16 16 48 1",
+" c None",
+". c #950800",
+"+ c #980800",
+"@ c #B50A00",
+"# c #BF0A00",
+"$ c #E00C00",
+"% c #DE0C00",
+"& c #8D0800",
+"* c #670600",
+"= c #900800",
+"- c #990800",
+"; c #A30900",
+"> c #AC0900",
+", c #C30B00",
+"' c #ED0D00",
+") c #E70C00",
+"! c #B70A00",
+"~ c #960800",
+"{ c #870700",
+"] c #810700",
+"^ c #890700",
+"/ c #D60C00",
+"( c #E20C00",
+"_ c #F70D00",
+": c #EC0D00",
+"< c #D30B00",
+"[ c #C70B00",
+"} c #7E0700",
+"| c #B40A00",
+"1 c #EA0D00",
+"2 c #DB0C00",
+"3 c #D10B00",
+"4 c #AD0900",
+"5 c #B20A00",
+"6 c #D90C00",
+"7 c #A50900",
+"8 c #D00B00",
+"9 c #CE0B00",
+"0 c #C90B00",
+"a c #A00900",
+"b c #850700",
+"c c #BE0A00",
+"d c #8E0800",
+"e c #9E0900",
+"f c #770600",
+"g c #A70900",
+"h c #7B0700",
+"i c #760600",
+" ",
+" ",
+" ",
+" .+ ",
+" @# ",
+" $%& ",
+" *=-;>,')!~={] ",
+" ^#/('_:$<[@} ",
+" |%)1)234 ",
+" 52%6<7 ",
+" ,8390a ",
+" bccd;c| ",
+" &ef bg} ",
+" h i ",
+" ",
+" "};
diff --git a/app/bin/bitmaps/sticky-note-chain.xpm b/app/bin/bitmaps/sticky-note-chain.xpm
new file mode 100644
index 0000000..aa9445a
--- /dev/null
+++ b/app/bin/bitmaps/sticky-note-chain.xpm
@@ -0,0 +1,84 @@
+/* XPM */
+static char * sticky_note_chain_bits[] = {
+"16 16 65 1",
+" c None",
+". c #CCB301",
+"+ c #CAB101",
+"@ c #FBEF9C",
+"# c #F9EB8F",
+"$ c #F8EA8D",
+"% c #F8E98A",
+"& c #F6E785",
+"* c #F3E37C",
+"= c #F0E074",
+"- c #EEDD6F",
+"; c #D5C44D",
+"> c #C8AF01",
+", c #FBED95",
+"' c #F7E67E",
+") c #F6E57C",
+"! c #F5E47B",
+"~ c #F4E379",
+"{ c #F1E075",
+"] c #ECDB70",
+"^ c #E8D76A",
+"/ c #E6D567",
+"( c #CDBC45",
+"_ c #FFF6BB",
+": c #C6AD01",
+"< c #FCEB84",
+"[ c #B7A73A",
+"} c #BFAE37",
+"| c #AC9401",
+"1 c #C3AA01",
+"2 c #FBED97",
+"3 c #EEDD7B",
+"4 c #9D96F6",
+"5 c #E1D26F",
+"6 c #C0A701",
+"7 c #006E6E",
+"8 c #00FFFF",
+"9 c #BCA401",
+"0 c #AFA358",
+"a c #ADA054",
+"b c #B9A101",
+"c c #B59E01",
+"d c #FEF19E",
+"e c #EDDD7C",
+"f c #E5D575",
+"g c #E5D571",
+"h c #B29A01",
+"i c #FFF2A1",
+"j c #FEED87",
+"k c #FDEC86",
+"l c #FDEC85",
+"m c #FBEA82",
+"n c #FAE981",
+"o c #F8E77F",
+"p c #A89100",
+"q c #FFF4AF",
+"r c #FFF1A0",
+"s c #FDF09C",
+"t c #FDEF9B",
+"u c #FCEE99",
+"v c #FAEC92",
+"w c #F9EA90",
+"x c #FAEC96",
+"y c #9D8600",
+"z c #9C8500",
+" ",
+" ",
+" ........... ",
+" +@#$%&*=--;+ ",
+" >,')!~{]^/(_> ",
+" :<<<<<<<<<[}}| ",
+" 1234445444''-1 ",
+" 647887478874-6 ",
+" 94800878a084=9 ",
+" b47887478874*b ",
+" cde444f444g{&c ",
+" hijkl<mno')!%h ",
+" pqirdstu2,vwxp ",
+" yzzzzzzzzzzzzy ",
+" ",
+" "};
diff --git a/app/bin/bitmaps/sticky-note-clip.xpm b/app/bin/bitmaps/sticky-note-clip.xpm
new file mode 100644
index 0000000..c74c64d
--- /dev/null
+++ b/app/bin/bitmaps/sticky-note-clip.xpm
@@ -0,0 +1,99 @@
+/* XPM */
+static char * sticky_note_clip_bits[] = {
+"16 16 80 1",
+" c None",
+". c #CCB301",
+"+ c #CAB101",
+"@ c #FBEF9C",
+"# c #F9EB8F",
+"$ c #F8EA8D",
+"% c #F8E98A",
+"& c #F7E992",
+"* c #EDE1A3",
+"= c #555753",
+"- c #DFCF67",
+"; c #D5C44D",
+"> c #C8AF01",
+", c #FBED95",
+"' c #F7E67E",
+") c #F6E57C",
+"! c #F6E68A",
+"~ c #ECE0A0",
+"{ c #BABDB6",
+"] c #EFE3A7",
+"^ c #CDBC45",
+"/ c #FFF6BB",
+"( c #C6AD01",
+"_ c #FBED97",
+": c #F8E77F",
+"< c #F8E88D",
+"[ c #EDE0A0",
+"} c #F5E68F",
+"| c #F0E39B",
+"1 c #888A85",
+"2 c #BFAE37",
+"3 c #AC9401",
+"4 c #C3AA01",
+"5 c #FCEE99",
+"6 c #F7E78B",
+"7 c #EBDE9C",
+"8 c #F8EBA2",
+"9 c #ECDB70",
+"0 c #E8D76A",
+"a c #E6D567",
+"b c #EEDD6F",
+"c c #C0A701",
+"d c #FDF0A5",
+"e c #DCD695",
+"f c #EAE29B",
+"g c #E8E098",
+"h c #DACB69",
+"i c #BCA401",
+"j c #FDF3B6",
+"k c #B9A101",
+"l c #FEF4B7",
+"m c #E0D986",
+"n c #F5E47B",
+"o c #F4E379",
+"p c #F1E075",
+"q c #F3E37C",
+"r c #B59E01",
+"s c #FFF3B4",
+"t c #DECF6F",
+"u c #F4E47D",
+"v c #F5E47C",
+"w c #F6E785",
+"x c #B29A01",
+"y c #FFF2A3",
+"z c #FBEDA4",
+"A c #F0E07C",
+"B c #F3E27C",
+"C c #F5E47D",
+"D c #A89100",
+"E c #FFF4AF",
+"F c #FFF2A1",
+"G c #FFF1A0",
+"H c #FEF19E",
+"I c #FDF09C",
+"J c #FDEF9B",
+"K c #FAEC92",
+"L c #F9EA90",
+"M c #FAEC96",
+"N c #9D8600",
+"O c #9C8500",
+" ",
+" ",
+" ........... ",
+" +@#$%&*==-;+ ",
+" >,')!~={]=^/> ",
+" (_:<[=}=|1{223 ",
+" 4567=8=8=90ab4 ",
+" cde=f=g=}h90bc ",
+" ij1818=8={)))i ",
+" kl=m=1f={nopqk ",
+" rs1t)8={uvnowr ",
+" xyz1=1{ABC)n%x ",
+" DEFGHIJ5_,KLMD ",
+" NOOOOOOOOOOOON ",
+" ",
+" "};
diff --git a/app/bin/bitmaps/sticky-note-text.xpm b/app/bin/bitmaps/sticky-note-text.xpm
new file mode 100644
index 0000000..119f39b
--- /dev/null
+++ b/app/bin/bitmaps/sticky-note-text.xpm
@@ -0,0 +1,86 @@
+/* XPM */
+static char * sticky_note_text_bits[] = {
+"16 16 67 1",
+" c None",
+". c #CCB301",
+"+ c #CAB101",
+"@ c #FBEF9C",
+"# c #F9EB8F",
+"$ c #F8EA8D",
+"% c #F8E98A",
+"& c #F6E785",
+"* c #F3E37C",
+"= c #F0E074",
+"- c #EEDD6F",
+"; c #D5C44D",
+"> c #C8AF01",
+", c #FBED95",
+"' c #F7E67E",
+") c #F6E57C",
+"! c #F5E47B",
+"~ c #F4E379",
+"{ c #F1E075",
+"] c #ECDB70",
+"^ c #E8D76A",
+"/ c #E6D567",
+"( c #CDBC45",
+"_ c #FFF6BB",
+": c #C6AD01",
+"< c #FBED97",
+"[ c #F8E77F",
+"} c #BFAE37",
+"| c #AC9401",
+"1 c #C3AA01",
+"2 c #FCEE99",
+"3 c #7E7E7E",
+"4 c #979797",
+"5 c #C0A701",
+"6 c #FDEF9B",
+"7 c #E5DC75",
+"8 c #E4DB73",
+"9 c #E4DA70",
+"0 c #E3D86D",
+"a c #E2D769",
+"b c #EBDC70",
+"c c #BCA401",
+"d c #FDF09D",
+"e c #B9A101",
+"f c #FEF19E",
+"g c #E5DD77",
+"h c #EDDF75",
+"i c #B59E01",
+"j c #FFF1A0",
+"k c #DED273",
+"l c #E1D078",
+"m c #B29A01",
+"n c #FFF2A1",
+"o c #FEED87",
+"p c #FDEC86",
+"q c #FDEC85",
+"r c #FCEB84",
+"s c #FBEA82",
+"t c #FAE981",
+"u c #A89100",
+"v c #FFF4AF",
+"w c #FDF09C",
+"x c #FAEC92",
+"y c #F9EA90",
+"z c #FAEC96",
+"A c #9D8600",
+"B c #9C8500",
+" ",
+" ",
+" ........... ",
+" +@#$%&*=--;+ ",
+" >,')!~{]^/(_> ",
+" :<[')!~{]^}}}| ",
+" 12334344{]^/-1 ",
+" 567890ab~{]^-5 ",
+" cd3334333443=c ",
+" efgg789h)!~{*e ",
+" ij3343kl')!~&i ",
+" mnopqrst[')!%m ",
+" uvnjfw62<,xyzu ",
+" ABBBBBBBBBBBBA ",
+" ",
+" "};
diff --git a/app/bin/bitmaps/tunnel.xpm b/app/bin/bitmaps/tunnel.xpm
index 79aed20..449080e 100644
--- a/app/bin/bitmaps/tunnel.xpm
+++ b/app/bin/bitmaps/tunnel.xpm
@@ -1,19 +1,20 @@
/* XPM */
static char * tunnel_xpm[] = {
-"16 16 2 1",
+"16 16 3 1",
" c None",
-". c #000000000000",
+". c #00FFFF",
+"+ c #000000",
" .. ",
" .. ",
" .. ",
" .. ",
-". . .. ",
-".......... . . ",
-". . .. ",
-". . .. ",
-". . .. ",
-".......... . . ",
-". . .. ",
+"+ + .. ",
+"++++++++.. + + ",
+"+ + .. ",
+"+ + .. ",
+"+ + .. ",
+"++++++++.. + + ",
+"+ + .. ",
" .. ",
" .. ",
" .. ",
diff --git a/app/bin/bitmaps/yellowdot.xpm b/app/bin/bitmaps/yellowdot.xpm
new file mode 100644
index 0000000..da0dddf
--- /dev/null
+++ b/app/bin/bitmaps/yellowdot.xpm
@@ -0,0 +1,27 @@
+/* XPM */
+static char * yellowdot[] = {
+"16 16 8 1",
+" c None",
+". c #000000",
+"+ c #B69A19",
+"@ c #E0C504",
+"# c #EBD200",
+"$ c #CFB410",
+"% c #EFD947",
+"& c #EDD400",
+" ",
+" ",
+" .... ",
+" .+@##@+. ",
+" .$%%%&&&$. ",
+" +%%%%%&&&+ ",
+" .@%%%%%&&&@. ",
+" .#%%%%%&&&#. ",
+" .#&%%%&&&&#. ",
+" .@&&&&&&&&@. ",
+" +&&&&&&&&+ ",
+" .$&&&&&&$. ",
+" .+@##@+. ",
+" .... ",
+" ",
+" "};
diff --git a/app/bin/bitmaps/yellowstar.xpm b/app/bin/bitmaps/yellowstar.xpm
new file mode 100644
index 0000000..637ad9c
--- /dev/null
+++ b/app/bin/bitmaps/yellowstar.xpm
@@ -0,0 +1,67 @@
+/* XPM */
+static char * yellowstar[] = {
+"16 16 48 1",
+" c None",
+". c #AB9600",
+"+ c #AE9900",
+"@ c #D0B600",
+"# c #DBC000",
+"$ c #FFDF02",
+"% c #FFDF00",
+"& c #A28D00",
+"* c #766700",
+"= c #A59000",
+"- c #B09A00",
+"; c #BBA400",
+"> c #C5AC00",
+", c #DFC300",
+"' c #FFE111",
+") c #FFE00A",
+"! c #D2B800",
+"~ c #AC9700",
+"{ c #9B8800",
+"] c #948100",
+"^ c #9D8A00",
+"/ c #F6D700",
+"( c #FFE004",
+"_ c #FFE31D",
+": c #FFE10F",
+"< c #F2D400",
+"[ c #E5C800",
+"} c #917F00",
+"| c #CEB500",
+"1 c #FFE10E",
+"2 c #FCDC00",
+"3 c #F0D200",
+"4 c #C7AE00",
+"5 c #CCB300",
+"6 c #FADB00",
+"7 c #BEA600",
+"8 c #EED100",
+"9 c #ECCF00",
+"0 c #E6CA00",
+"a c #B8A100",
+"b c #988500",
+"c c #DABE00",
+"d c #A38F00",
+"e c #B69F00",
+"f c #897800",
+"g c #BFA700",
+"h c #8D7B00",
+"i c #877600",
+" ",
+" ",
+" ",
+" .+ ",
+" @# ",
+" $%& ",
+" *=-;>,')!~={] ",
+" ^#/('_:$<[@} ",
+" |%)1)234 ",
+" 52%6<7 ",
+" ,8390a ",
+" bccd;c| ",
+" &ef bg} ",
+" h i ",
+" ",
+" "};
diff --git a/app/bin/cJSON.c b/app/bin/cJSON.c
new file mode 100755
index 0000000..1733811
--- /dev/null
+++ b/app/bin/cJSON.c
@@ -0,0 +1,2932 @@
+/*
+ Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+*/
+
+/* cJSON */
+/* JSON parser in C. */
+
+/* disable warnings about old C89 functions in MSVC */
+#if !defined(_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER)
+#define _CRT_SECURE_NO_DEPRECATE
+#endif
+
+#ifdef __GNUC__
+#pragma GCC visibility push(default)
+#endif
+#if defined(_MSC_VER)
+#pragma warning (push)
+/* disable warning about single line comments in system headers */
+#pragma warning (disable : 4001)
+#endif
+
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <ctype.h>
+
+#ifdef ENABLE_LOCALES
+#include <locale.h>
+#endif
+
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+#ifdef __GNUC__
+#pragma GCC visibility pop
+#endif
+
+#include "cJSON.h"
+
+/* define our own boolean type */
+#define true ((cJSON_bool)1)
+#define false ((cJSON_bool)0)
+
+typedef struct {
+ const unsigned char *json;
+ size_t position;
+} error;
+static error global_error = { NULL, 0 };
+
+CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void)
+{
+ return (const char*) (global_error.json + global_error.position);
+}
+
+CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item) {
+ if (!cJSON_IsString(item)) {
+ return NULL;
+ }
+
+ return item->valuestring;
+}
+
+/* This is a safeguard to prevent copy-pasters from using incompatible C and header files */
+#if (CJSON_VERSION_MAJOR != 1) || (CJSON_VERSION_MINOR != 7) || (CJSON_VERSION_PATCH != 8)
+ #error cJSON.h and cJSON.c have different versions. Make sure that both have the same.
+#endif
+
+CJSON_PUBLIC(const char*) cJSON_Version(void)
+{
+ static char version[15];
+ sprintf(version, "%i.%i.%i", CJSON_VERSION_MAJOR, CJSON_VERSION_MINOR, CJSON_VERSION_PATCH);
+
+ return version;
+}
+
+/* Case insensitive string comparison, doesn't consider two NULL pointers equal though */
+static int case_insensitive_strcmp(const unsigned char *string1, const unsigned char *string2)
+{
+ if ((string1 == NULL) || (string2 == NULL))
+ {
+ return 1;
+ }
+
+ if (string1 == string2)
+ {
+ return 0;
+ }
+
+ for(; tolower(*string1) == tolower(*string2); (void)string1++, string2++)
+ {
+ if (*string1 == '\0')
+ {
+ return 0;
+ }
+ }
+
+ return tolower(*string1) - tolower(*string2);
+}
+
+typedef struct internal_hooks
+{
+ void *(CJSON_CDECL *allocate)(size_t size);
+ void (CJSON_CDECL *deallocate)(void *pointer);
+ void *(CJSON_CDECL *reallocate)(void *pointer, size_t size);
+} internal_hooks;
+
+#if defined(_MSC_VER)
+/* work around MSVC error C2322: '...' address of dillimport '...' is not static */
+static void * CJSON_CDECL internal_malloc(size_t size)
+{
+ return malloc(size);
+}
+static void CJSON_CDECL internal_free(void *pointer)
+{
+ free(pointer);
+}
+static void * CJSON_CDECL internal_realloc(void *pointer, size_t size)
+{
+ return realloc(pointer, size);
+}
+#else
+#define internal_malloc malloc
+#define internal_free free
+#define internal_realloc realloc
+#endif
+
+static internal_hooks global_hooks = { internal_malloc, internal_free, internal_realloc };
+
+static unsigned char* cJSON_strdup(const unsigned char* string, const internal_hooks * const hooks)
+{
+ size_t length = 0;
+ unsigned char *copy = NULL;
+
+ if (string == NULL)
+ {
+ return NULL;
+ }
+
+ length = strlen((const char*)string) + sizeof("");
+ copy = (unsigned char*)hooks->allocate(length);
+ if (copy == NULL)
+ {
+ return NULL;
+ }
+ memcpy(copy, string, length);
+
+ return copy;
+}
+
+CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks)
+{
+ if (hooks == NULL)
+ {
+ /* Reset hooks */
+ global_hooks.allocate = malloc;
+ global_hooks.deallocate = free;
+ global_hooks.reallocate = realloc;
+ return;
+ }
+
+ global_hooks.allocate = malloc;
+ if (hooks->malloc_fn != NULL)
+ {
+ global_hooks.allocate = hooks->malloc_fn;
+ }
+
+ global_hooks.deallocate = free;
+ if (hooks->free_fn != NULL)
+ {
+ global_hooks.deallocate = hooks->free_fn;
+ }
+
+ /* use realloc only if both free and malloc are used */
+ global_hooks.reallocate = NULL;
+ if ((global_hooks.allocate == malloc) && (global_hooks.deallocate == free))
+ {
+ global_hooks.reallocate = realloc;
+ }
+}
+
+/* Internal constructor. */
+static cJSON *cJSON_New_Item(const internal_hooks * const hooks)
+{
+ cJSON* node = (cJSON*)hooks->allocate(sizeof(cJSON));
+ if (node)
+ {
+ memset(node, '\0', sizeof(cJSON));
+ }
+
+ return node;
+}
+
+/* Delete a cJSON structure. */
+CJSON_PUBLIC(void) cJSON_Delete(cJSON *item)
+{
+ cJSON *next = NULL;
+ while (item != NULL)
+ {
+ next = item->next;
+ if (!(item->type & cJSON_IsReference) && (item->child != NULL))
+ {
+ cJSON_Delete(item->child);
+ }
+ if (!(item->type & cJSON_IsReference) && (item->valuestring != NULL))
+ {
+ global_hooks.deallocate(item->valuestring);
+ }
+ if (!(item->type & cJSON_StringIsConst) && (item->string != NULL))
+ {
+ global_hooks.deallocate(item->string);
+ }
+ global_hooks.deallocate(item);
+ item = next;
+ }
+}
+
+/* get the decimal point character of the current locale */
+static unsigned char get_decimal_point(void)
+{
+#ifdef ENABLE_LOCALES
+ struct lconv *lconv = localeconv();
+ return (unsigned char) lconv->decimal_point[0];
+#else
+ return '.';
+#endif
+}
+
+typedef struct
+{
+ const unsigned char *content;
+ size_t length;
+ size_t offset;
+ size_t depth; /* How deeply nested (in arrays/objects) is the input at the current offset. */
+ internal_hooks hooks;
+} parse_buffer;
+
+/* check if the given size is left to read in a given parse buffer (starting with 1) */
+#define can_read(buffer, size) ((buffer != NULL) && (((buffer)->offset + size) <= (buffer)->length))
+/* check if the buffer can be accessed at the given index (starting with 0) */
+#define can_access_at_index(buffer, index) ((buffer != NULL) && (((buffer)->offset + index) < (buffer)->length))
+#define cannot_access_at_index(buffer, index) (!can_access_at_index(buffer, index))
+/* get a pointer to the buffer at the position */
+#define buffer_at_offset(buffer) ((buffer)->content + (buffer)->offset)
+
+/* Parse the input text to generate a number, and populate the result into item. */
+static cJSON_bool parse_number(cJSON * const item, parse_buffer * const input_buffer)
+{
+ double number = 0;
+ unsigned char *after_end = NULL;
+ unsigned char number_c_string[64];
+ unsigned char decimal_point = get_decimal_point();
+ size_t i = 0;
+
+ if ((input_buffer == NULL) || (input_buffer->content == NULL))
+ {
+ return false;
+ }
+
+ /* copy the number into a temporary buffer and replace '.' with the decimal point
+ * of the current locale (for strtod)
+ * This also takes care of '\0' not necessarily being available for marking the end of the input */
+ for (i = 0; (i < (sizeof(number_c_string) - 1)) && can_access_at_index(input_buffer, i); i++)
+ {
+ switch (buffer_at_offset(input_buffer)[i])
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case '+':
+ case '-':
+ case 'e':
+ case 'E':
+ number_c_string[i] = buffer_at_offset(input_buffer)[i];
+ break;
+
+ case '.':
+ number_c_string[i] = decimal_point;
+ break;
+
+ default:
+ goto loop_end;
+ }
+ }
+loop_end:
+ number_c_string[i] = '\0';
+
+ number = strtod((const char*)number_c_string, (char**)&after_end);
+ if (number_c_string == after_end)
+ {
+ return false; /* parse_error */
+ }
+
+ item->valuedouble = number;
+
+ /* use saturation in case of overflow */
+ if (number >= INT_MAX)
+ {
+ item->valueint = INT_MAX;
+ }
+ else if (number <= (double)INT_MIN)
+ {
+ item->valueint = INT_MIN;
+ }
+ else
+ {
+ item->valueint = (int)number;
+ }
+
+ item->type = cJSON_Number;
+
+ input_buffer->offset += (size_t)(after_end - number_c_string);
+ return true;
+}
+
+/* don't ask me, but the original cJSON_SetNumberValue returns an integer or double */
+CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number)
+{
+ if (number >= INT_MAX)
+ {
+ object->valueint = INT_MAX;
+ }
+ else if (number <= (double)INT_MIN)
+ {
+ object->valueint = INT_MIN;
+ }
+ else
+ {
+ object->valueint = (int)number;
+ }
+
+ return object->valuedouble = number;
+}
+
+typedef struct
+{
+ unsigned char *buffer;
+ size_t length;
+ size_t offset;
+ size_t depth; /* current nesting depth (for formatted printing) */
+ cJSON_bool noalloc;
+ cJSON_bool format; /* is this print a formatted print */
+ internal_hooks hooks;
+} printbuffer;
+
+/* realloc printbuffer if necessary to have at least "needed" bytes more */
+static unsigned char* ensure(printbuffer * const p, size_t needed)
+{
+ unsigned char *newbuffer = NULL;
+ size_t newsize = 0;
+
+ if ((p == NULL) || (p->buffer == NULL))
+ {
+ return NULL;
+ }
+
+ if ((p->length > 0) && (p->offset >= p->length))
+ {
+ /* make sure that offset is valid */
+ return NULL;
+ }
+
+ if (needed > INT_MAX)
+ {
+ /* sizes bigger than INT_MAX are currently not supported */
+ return NULL;
+ }
+
+ needed += p->offset + 1;
+ if (needed <= p->length)
+ {
+ return p->buffer + p->offset;
+ }
+
+ if (p->noalloc) {
+ return NULL;
+ }
+
+ /* calculate new buffer size */
+ if (needed > (INT_MAX / 2))
+ {
+ /* overflow of int, use INT_MAX if possible */
+ if (needed <= INT_MAX)
+ {
+ newsize = INT_MAX;
+ }
+ else
+ {
+ return NULL;
+ }
+ }
+ else
+ {
+ newsize = needed * 2;
+ }
+
+ if (p->hooks.reallocate != NULL)
+ {
+ /* reallocate with realloc if available */
+ newbuffer = (unsigned char*)p->hooks.reallocate(p->buffer, newsize);
+ if (newbuffer == NULL)
+ {
+ p->hooks.deallocate(p->buffer);
+ p->length = 0;
+ p->buffer = NULL;
+
+ return NULL;
+ }
+ }
+ else
+ {
+ /* otherwise reallocate manually */
+ newbuffer = (unsigned char*)p->hooks.allocate(newsize);
+ if (!newbuffer)
+ {
+ p->hooks.deallocate(p->buffer);
+ p->length = 0;
+ p->buffer = NULL;
+
+ return NULL;
+ }
+ if (newbuffer)
+ {
+ memcpy(newbuffer, p->buffer, p->offset + 1);
+ }
+ p->hooks.deallocate(p->buffer);
+ }
+ p->length = newsize;
+ p->buffer = newbuffer;
+
+ return newbuffer + p->offset;
+}
+
+/* calculate the new length of the string in a printbuffer and update the offset */
+static void update_offset(printbuffer * const buffer)
+{
+ const unsigned char *buffer_pointer = NULL;
+ if ((buffer == NULL) || (buffer->buffer == NULL))
+ {
+ return;
+ }
+ buffer_pointer = buffer->buffer + buffer->offset;
+
+ buffer->offset += strlen((const char*)buffer_pointer);
+}
+
+/* Render the number nicely from the given item into a string. */
+static cJSON_bool print_number(const cJSON * const item, printbuffer * const output_buffer)
+{
+ unsigned char *output_pointer = NULL;
+ double d = item->valuedouble;
+ int length = 0;
+ size_t i = 0;
+ unsigned char number_buffer[26]; /* temporary buffer to print the number into */
+ unsigned char decimal_point = get_decimal_point();
+ double test;
+
+ if (output_buffer == NULL)
+ {
+ return false;
+ }
+
+ /* This checks for NaN and Infinity */
+ if ((d * 0) != 0)
+ {
+ length = sprintf((char*)number_buffer, "null");
+ }
+ else
+ {
+ /* Try 15 decimal places of precision to avoid nonsignificant nonzero digits */
+ length = sprintf((char*)number_buffer, "%1.15g", d);
+
+ /* Check whether the original double can be recovered */
+ if ((sscanf((char*)number_buffer, "%lg", &test) != 1) || ((double)test != d))
+ {
+ /* If not, print with 17 decimal places of precision */
+ length = sprintf((char*)number_buffer, "%1.17g", d);
+ }
+ }
+
+ /* sprintf failed or buffer overrun occured */
+ if ((length < 0) || (length > (int)(sizeof(number_buffer) - 1)))
+ {
+ return false;
+ }
+
+ /* reserve appropriate space in the output */
+ output_pointer = ensure(output_buffer, (size_t)length + sizeof(""));
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+
+ /* copy the printed number to the output and replace locale
+ * dependent decimal point with '.' */
+ for (i = 0; i < ((size_t)length); i++)
+ {
+ if (number_buffer[i] == decimal_point)
+ {
+ output_pointer[i] = '.';
+ continue;
+ }
+
+ output_pointer[i] = number_buffer[i];
+ }
+ output_pointer[i] = '\0';
+
+ output_buffer->offset += (size_t)length;
+
+ return true;
+}
+
+/* parse 4 digit hexadecimal number */
+static unsigned parse_hex4(const unsigned char * const input)
+{
+ unsigned int h = 0;
+ size_t i = 0;
+
+ for (i = 0; i < 4; i++)
+ {
+ /* parse digit */
+ if ((input[i] >= '0') && (input[i] <= '9'))
+ {
+ h += (unsigned int) input[i] - '0';
+ }
+ else if ((input[i] >= 'A') && (input[i] <= 'F'))
+ {
+ h += (unsigned int) 10 + input[i] - 'A';
+ }
+ else if ((input[i] >= 'a') && (input[i] <= 'f'))
+ {
+ h += (unsigned int) 10 + input[i] - 'a';
+ }
+ else /* invalid */
+ {
+ return 0;
+ }
+
+ if (i < 3)
+ {
+ /* shift left to make place for the next nibble */
+ h = h << 4;
+ }
+ }
+
+ return h;
+}
+
+/* converts a UTF-16 literal to UTF-8
+ * A literal can be one or two sequences of the form \uXXXX */
+static unsigned char utf16_literal_to_utf8(const unsigned char * const input_pointer, const unsigned char * const input_end, unsigned char **output_pointer)
+{
+ long unsigned int codepoint = 0;
+ unsigned int first_code = 0;
+ const unsigned char *first_sequence = input_pointer;
+ unsigned char utf8_length = 0;
+ unsigned char utf8_position = 0;
+ unsigned char sequence_length = 0;
+ unsigned char first_byte_mark = 0;
+
+ if ((input_end - first_sequence) < 6)
+ {
+ /* input ends unexpectedly */
+ goto fail;
+ }
+
+ /* get the first utf16 sequence */
+ first_code = parse_hex4(first_sequence + 2);
+
+ /* check that the code is valid */
+ if (((first_code >= 0xDC00) && (first_code <= 0xDFFF)))
+ {
+ goto fail;
+ }
+
+ /* UTF16 surrogate pair */
+ if ((first_code >= 0xD800) && (first_code <= 0xDBFF))
+ {
+ const unsigned char *second_sequence = first_sequence + 6;
+ unsigned int second_code = 0;
+ sequence_length = 12; /* \uXXXX\uXXXX */
+
+ if ((input_end - second_sequence) < 6)
+ {
+ /* input ends unexpectedly */
+ goto fail;
+ }
+
+ if ((second_sequence[0] != '\\') || (second_sequence[1] != 'u'))
+ {
+ /* missing second half of the surrogate pair */
+ goto fail;
+ }
+
+ /* get the second utf16 sequence */
+ second_code = parse_hex4(second_sequence + 2);
+ /* check that the code is valid */
+ if ((second_code < 0xDC00) || (second_code > 0xDFFF))
+ {
+ /* invalid second half of the surrogate pair */
+ goto fail;
+ }
+
+
+ /* calculate the unicode codepoint from the surrogate pair */
+ codepoint = 0x10000 + (((first_code & 0x3FF) << 10) | (second_code & 0x3FF));
+ }
+ else
+ {
+ sequence_length = 6; /* \uXXXX */
+ codepoint = first_code;
+ }
+
+ /* encode as UTF-8
+ * takes at maximum 4 bytes to encode:
+ * 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
+ if (codepoint < 0x80)
+ {
+ /* normal ascii, encoding 0xxxxxxx */
+ utf8_length = 1;
+ }
+ else if (codepoint < 0x800)
+ {
+ /* two bytes, encoding 110xxxxx 10xxxxxx */
+ utf8_length = 2;
+ first_byte_mark = 0xC0; /* 11000000 */
+ }
+ else if (codepoint < 0x10000)
+ {
+ /* three bytes, encoding 1110xxxx 10xxxxxx 10xxxxxx */
+ utf8_length = 3;
+ first_byte_mark = 0xE0; /* 11100000 */
+ }
+ else if (codepoint <= 0x10FFFF)
+ {
+ /* four bytes, encoding 1110xxxx 10xxxxxx 10xxxxxx 10xxxxxx */
+ utf8_length = 4;
+ first_byte_mark = 0xF0; /* 11110000 */
+ }
+ else
+ {
+ /* invalid unicode codepoint */
+ goto fail;
+ }
+
+ /* encode as utf8 */
+ for (utf8_position = (unsigned char)(utf8_length - 1); utf8_position > 0; utf8_position--)
+ {
+ /* 10xxxxxx */
+ (*output_pointer)[utf8_position] = (unsigned char)((codepoint | 0x80) & 0xBF);
+ codepoint >>= 6;
+ }
+ /* encode first byte */
+ if (utf8_length > 1)
+ {
+ (*output_pointer)[0] = (unsigned char)((codepoint | first_byte_mark) & 0xFF);
+ }
+ else
+ {
+ (*output_pointer)[0] = (unsigned char)(codepoint & 0x7F);
+ }
+
+ *output_pointer += utf8_length;
+
+ return sequence_length;
+
+fail:
+ return 0;
+}
+
+/* Parse the input text into an unescaped cinput, and populate item. */
+static cJSON_bool parse_string(cJSON * const item, parse_buffer * const input_buffer)
+{
+ const unsigned char *input_pointer = buffer_at_offset(input_buffer) + 1;
+ const unsigned char *input_end = buffer_at_offset(input_buffer) + 1;
+ unsigned char *output_pointer = NULL;
+ unsigned char *output = NULL;
+
+ /* not a string */
+ if (buffer_at_offset(input_buffer)[0] != '\"')
+ {
+ goto fail;
+ }
+
+ {
+ /* calculate approximate size of the output (overestimate) */
+ size_t allocation_length = 0;
+ size_t skipped_bytes = 0;
+ while (((size_t)(input_end - input_buffer->content) < input_buffer->length) && (*input_end != '\"'))
+ {
+ /* is escape sequence */
+ if (input_end[0] == '\\')
+ {
+ if ((size_t)(input_end + 1 - input_buffer->content) >= input_buffer->length)
+ {
+ /* prevent buffer overflow when last input character is a backslash */
+ goto fail;
+ }
+ skipped_bytes++;
+ input_end++;
+ }
+ input_end++;
+ }
+ if (((size_t)(input_end - input_buffer->content) >= input_buffer->length) || (*input_end != '\"'))
+ {
+ goto fail; /* string ended unexpectedly */
+ }
+
+ /* This is at most how much we need for the output */
+ allocation_length = (size_t) (input_end - buffer_at_offset(input_buffer)) - skipped_bytes;
+ output = (unsigned char*)input_buffer->hooks.allocate(allocation_length + sizeof(""));
+ if (output == NULL)
+ {
+ goto fail; /* allocation failure */
+ }
+ }
+
+ output_pointer = output;
+ /* loop through the string literal */
+ while (input_pointer < input_end)
+ {
+ if (*input_pointer != '\\')
+ {
+ *output_pointer++ = *input_pointer++;
+ }
+ /* escape sequence */
+ else
+ {
+ unsigned char sequence_length = 2;
+ if ((input_end - input_pointer) < 1)
+ {
+ goto fail;
+ }
+
+ switch (input_pointer[1])
+ {
+ case 'b':
+ *output_pointer++ = '\b';
+ break;
+ case 'f':
+ *output_pointer++ = '\f';
+ break;
+ case 'n':
+ *output_pointer++ = '\n';
+ break;
+ case 'r':
+ *output_pointer++ = '\r';
+ break;
+ case 't':
+ *output_pointer++ = '\t';
+ break;
+ case '\"':
+ case '\\':
+ case '/':
+ *output_pointer++ = input_pointer[1];
+ break;
+
+ /* UTF-16 literal */
+ case 'u':
+ sequence_length = utf16_literal_to_utf8(input_pointer, input_end, &output_pointer);
+ if (sequence_length == 0)
+ {
+ /* failed to convert UTF16-literal to UTF-8 */
+ goto fail;
+ }
+ break;
+
+ default:
+ goto fail;
+ }
+ input_pointer += sequence_length;
+ }
+ }
+
+ /* zero terminate the output */
+ *output_pointer = '\0';
+
+ item->type = cJSON_String;
+ item->valuestring = (char*)output;
+
+ input_buffer->offset = (size_t) (input_end - input_buffer->content);
+ input_buffer->offset++;
+
+ return true;
+
+fail:
+ if (output != NULL)
+ {
+ input_buffer->hooks.deallocate(output);
+ }
+
+ if (input_pointer != NULL)
+ {
+ input_buffer->offset = (size_t)(input_pointer - input_buffer->content);
+ }
+
+ return false;
+}
+
+/* Render the cstring provided to an escaped version that can be printed. */
+static cJSON_bool print_string_ptr(const unsigned char * const input, printbuffer * const output_buffer)
+{
+ const unsigned char *input_pointer = NULL;
+ unsigned char *output = NULL;
+ unsigned char *output_pointer = NULL;
+ size_t output_length = 0;
+ /* numbers of additional characters needed for escaping */
+ size_t escape_characters = 0;
+
+ if (output_buffer == NULL)
+ {
+ return false;
+ }
+
+ /* empty string */
+ if (input == NULL)
+ {
+ output = ensure(output_buffer, sizeof("\"\""));
+ if (output == NULL)
+ {
+ return false;
+ }
+ strcpy((char*)output, "\"\"");
+
+ return true;
+ }
+
+ /* set "flag" to 1 if something needs to be escaped */
+ for (input_pointer = input; *input_pointer; input_pointer++)
+ {
+ switch (*input_pointer)
+ {
+ case '\"':
+ case '\\':
+ case '\b':
+ case '\f':
+ case '\n':
+ case '\r':
+ case '\t':
+ /* one character escape sequence */
+ escape_characters++;
+ break;
+ default:
+ if (*input_pointer < 32)
+ {
+ /* UTF-16 escape sequence uXXXX */
+ escape_characters += 5;
+ }
+ break;
+ }
+ }
+ output_length = (size_t)(input_pointer - input) + escape_characters;
+
+ output = ensure(output_buffer, output_length + sizeof("\"\""));
+ if (output == NULL)
+ {
+ return false;
+ }
+
+ /* no characters have to be escaped */
+ if (escape_characters == 0)
+ {
+ output[0] = '\"';
+ memcpy(output + 1, input, output_length);
+ output[output_length + 1] = '\"';
+ output[output_length + 2] = '\0';
+
+ return true;
+ }
+
+ output[0] = '\"';
+ output_pointer = output + 1;
+ /* copy the string */
+ for (input_pointer = input; *input_pointer != '\0'; (void)input_pointer++, output_pointer++)
+ {
+ if ((*input_pointer > 31) && (*input_pointer != '\"') && (*input_pointer != '\\'))
+ {
+ /* normal character, copy */
+ *output_pointer = *input_pointer;
+ }
+ else
+ {
+ /* character needs to be escaped */
+ *output_pointer++ = '\\';
+ switch (*input_pointer)
+ {
+ case '\\':
+ *output_pointer = '\\';
+ break;
+ case '\"':
+ *output_pointer = '\"';
+ break;
+ case '\b':
+ *output_pointer = 'b';
+ break;
+ case '\f':
+ *output_pointer = 'f';
+ break;
+ case '\n':
+ *output_pointer = 'n';
+ break;
+ case '\r':
+ *output_pointer = 'r';
+ break;
+ case '\t':
+ *output_pointer = 't';
+ break;
+ default:
+ /* escape and print as unicode codepoint */
+ sprintf((char*)output_pointer, "u%04x", *input_pointer);
+ output_pointer += 4;
+ break;
+ }
+ }
+ }
+ output[output_length + 1] = '\"';
+ output[output_length + 2] = '\0';
+
+ return true;
+}
+
+/* Invoke print_string_ptr (which is useful) on an item. */
+static cJSON_bool print_string(const cJSON * const item, printbuffer * const p)
+{
+ return print_string_ptr((unsigned char*)item->valuestring, p);
+}
+
+/* Predeclare these prototypes. */
+static cJSON_bool parse_value(cJSON * const item, parse_buffer * const input_buffer);
+static cJSON_bool print_value(const cJSON * const item, printbuffer * const output_buffer);
+static cJSON_bool parse_array(cJSON * const item, parse_buffer * const input_buffer);
+static cJSON_bool print_array(const cJSON * const item, printbuffer * const output_buffer);
+static cJSON_bool parse_object(cJSON * const item, parse_buffer * const input_buffer);
+static cJSON_bool print_object(const cJSON * const item, printbuffer * const output_buffer);
+
+/* Utility to jump whitespace and cr/lf */
+static parse_buffer *buffer_skip_whitespace(parse_buffer * const buffer)
+{
+ if ((buffer == NULL) || (buffer->content == NULL))
+ {
+ return NULL;
+ }
+
+ while (can_access_at_index(buffer, 0) && (buffer_at_offset(buffer)[0] <= 32))
+ {
+ buffer->offset++;
+ }
+
+ if (buffer->offset == buffer->length)
+ {
+ buffer->offset--;
+ }
+
+ return buffer;
+}
+
+/* skip the UTF-8 BOM (byte order mark) if it is at the beginning of a buffer */
+static parse_buffer *skip_utf8_bom(parse_buffer * const buffer)
+{
+ if ((buffer == NULL) || (buffer->content == NULL) || (buffer->offset != 0))
+ {
+ return NULL;
+ }
+
+ if (can_access_at_index(buffer, 4) && (strncmp((const char*)buffer_at_offset(buffer), "\xEF\xBB\xBF", 3) == 0))
+ {
+ buffer->offset += 3;
+ }
+
+ return buffer;
+}
+
+/* Parse an object - create a new root, and populate. */
+CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated)
+{
+ parse_buffer buffer = { 0, 0, 0, 0, { 0, 0, 0 } };
+ cJSON *item = NULL;
+
+ /* reset error position */
+ global_error.json = NULL;
+ global_error.position = 0;
+
+ if (value == NULL)
+ {
+ goto fail;
+ }
+
+ buffer.content = (const unsigned char*)value;
+ buffer.length = strlen((const char*)value) + sizeof("");
+ buffer.offset = 0;
+ buffer.hooks = global_hooks;
+
+ item = cJSON_New_Item(&global_hooks);
+ if (item == NULL) /* memory fail */
+ {
+ goto fail;
+ }
+
+ if (!parse_value(item, buffer_skip_whitespace(skip_utf8_bom(&buffer))))
+ {
+ /* parse failure. ep is set. */
+ goto fail;
+ }
+
+ /* if we require null-terminated JSON without appended garbage, skip and then check for a null terminator */
+ if (require_null_terminated)
+ {
+ buffer_skip_whitespace(&buffer);
+ if ((buffer.offset >= buffer.length) || buffer_at_offset(&buffer)[0] != '\0')
+ {
+ goto fail;
+ }
+ }
+ if (return_parse_end)
+ {
+ *return_parse_end = (const char*)buffer_at_offset(&buffer);
+ }
+
+ return item;
+
+fail:
+ if (item != NULL)
+ {
+ cJSON_Delete(item);
+ }
+
+ if (value != NULL)
+ {
+ error local_error;
+ local_error.json = (const unsigned char*)value;
+ local_error.position = 0;
+
+ if (buffer.offset < buffer.length)
+ {
+ local_error.position = buffer.offset;
+ }
+ else if (buffer.length > 0)
+ {
+ local_error.position = buffer.length - 1;
+ }
+
+ if (return_parse_end != NULL)
+ {
+ *return_parse_end = (const char*)local_error.json + local_error.position;
+ }
+
+ global_error = local_error;
+ }
+
+ return NULL;
+}
+
+/* Default options for cJSON_Parse */
+CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value)
+{
+ return cJSON_ParseWithOpts(value, 0, 0);
+}
+
+#define cjson_min(a, b) ((a < b) ? a : b)
+
+static unsigned char *print(const cJSON * const item, cJSON_bool format, const internal_hooks * const hooks)
+{
+ static const size_t default_buffer_size = 256;
+ printbuffer buffer[1];
+ unsigned char *printed = NULL;
+
+ memset(buffer, 0, sizeof(buffer));
+
+ /* create buffer */
+ buffer->buffer = (unsigned char*) hooks->allocate(default_buffer_size);
+ buffer->length = default_buffer_size;
+ buffer->format = format;
+ buffer->hooks = *hooks;
+ if (buffer->buffer == NULL)
+ {
+ goto fail;
+ }
+
+ /* print the value */
+ if (!print_value(item, buffer))
+ {
+ goto fail;
+ }
+ update_offset(buffer);
+
+ /* check if reallocate is available */
+ if (hooks->reallocate != NULL)
+ {
+ printed = (unsigned char*) hooks->reallocate(buffer->buffer, buffer->offset + 1);
+ if (printed == NULL) {
+ goto fail;
+ }
+ buffer->buffer = NULL;
+ }
+ else /* otherwise copy the JSON over to a new buffer */
+ {
+ printed = (unsigned char*) hooks->allocate(buffer->offset + 1);
+ if (printed == NULL)
+ {
+ goto fail;
+ }
+ memcpy(printed, buffer->buffer, cjson_min(buffer->length, buffer->offset + 1));
+ printed[buffer->offset] = '\0'; /* just to be sure */
+
+ /* free the buffer */
+ hooks->deallocate(buffer->buffer);
+ }
+
+ return printed;
+
+fail:
+ if (buffer->buffer != NULL)
+ {
+ hooks->deallocate(buffer->buffer);
+ }
+
+ if (printed != NULL)
+ {
+ hooks->deallocate(printed);
+ }
+
+ return NULL;
+}
+
+/* Render a cJSON item/entity/structure to text. */
+CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item)
+{
+ return (char*)print(item, true, &global_hooks);
+}
+
+CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item)
+{
+ return (char*)print(item, false, &global_hooks);
+}
+
+CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt)
+{
+ printbuffer p = { 0, 0, 0, 0, 0, 0, { 0, 0, 0 } };
+
+ if (prebuffer < 0)
+ {
+ return NULL;
+ }
+
+ p.buffer = (unsigned char*)global_hooks.allocate((size_t)prebuffer);
+ if (!p.buffer)
+ {
+ return NULL;
+ }
+
+ p.length = (size_t)prebuffer;
+ p.offset = 0;
+ p.noalloc = false;
+ p.format = fmt;
+ p.hooks = global_hooks;
+
+ if (!print_value(item, &p))
+ {
+ global_hooks.deallocate(p.buffer);
+ return NULL;
+ }
+
+ return (char*)p.buffer;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buf, const int len, const cJSON_bool fmt)
+{
+ printbuffer p = { 0, 0, 0, 0, 0, 0, { 0, 0, 0 } };
+
+ if ((len < 0) || (buf == NULL))
+ {
+ return false;
+ }
+
+ p.buffer = (unsigned char*)buf;
+ p.length = (size_t)len;
+ p.offset = 0;
+ p.noalloc = true;
+ p.format = fmt;
+ p.hooks = global_hooks;
+
+ return print_value(item, &p);
+}
+
+/* Parser core - when encountering text, process appropriately. */
+static cJSON_bool parse_value(cJSON * const item, parse_buffer * const input_buffer)
+{
+ if ((input_buffer == NULL) || (input_buffer->content == NULL))
+ {
+ return false; /* no input */
+ }
+
+ /* parse the different types of values */
+ /* null */
+ if (can_read(input_buffer, 4) && (strncmp((const char*)buffer_at_offset(input_buffer), "null", 4) == 0))
+ {
+ item->type = cJSON_NULL;
+ input_buffer->offset += 4;
+ return true;
+ }
+ /* false */
+ if (can_read(input_buffer, 5) && (strncmp((const char*)buffer_at_offset(input_buffer), "false", 5) == 0))
+ {
+ item->type = cJSON_False;
+ input_buffer->offset += 5;
+ return true;
+ }
+ /* true */
+ if (can_read(input_buffer, 4) && (strncmp((const char*)buffer_at_offset(input_buffer), "true", 4) == 0))
+ {
+ item->type = cJSON_True;
+ item->valueint = 1;
+ input_buffer->offset += 4;
+ return true;
+ }
+ /* string */
+ if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '\"'))
+ {
+ return parse_string(item, input_buffer);
+ }
+ /* number */
+ if (can_access_at_index(input_buffer, 0) && ((buffer_at_offset(input_buffer)[0] == '-') || ((buffer_at_offset(input_buffer)[0] >= '0') && (buffer_at_offset(input_buffer)[0] <= '9'))))
+ {
+ return parse_number(item, input_buffer);
+ }
+ /* array */
+ if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '['))
+ {
+ return parse_array(item, input_buffer);
+ }
+ /* object */
+ if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '{'))
+ {
+ return parse_object(item, input_buffer);
+ }
+
+ return false;
+}
+
+/* Render a value to text. */
+static cJSON_bool print_value(const cJSON * const item, printbuffer * const output_buffer)
+{
+ unsigned char *output = NULL;
+
+ if ((item == NULL) || (output_buffer == NULL))
+ {
+ return false;
+ }
+
+ switch ((item->type) & 0xFF)
+ {
+ case cJSON_NULL:
+ output = ensure(output_buffer, 5);
+ if (output == NULL)
+ {
+ return false;
+ }
+ strcpy((char*)output, "null");
+ return true;
+
+ case cJSON_False:
+ output = ensure(output_buffer, 6);
+ if (output == NULL)
+ {
+ return false;
+ }
+ strcpy((char*)output, "false");
+ return true;
+
+ case cJSON_True:
+ output = ensure(output_buffer, 5);
+ if (output == NULL)
+ {
+ return false;
+ }
+ strcpy((char*)output, "true");
+ return true;
+
+ case cJSON_Number:
+ return print_number(item, output_buffer);
+
+ case cJSON_Raw:
+ {
+ size_t raw_length = 0;
+ if (item->valuestring == NULL)
+ {
+ return false;
+ }
+
+ raw_length = strlen(item->valuestring) + sizeof("");
+ output = ensure(output_buffer, raw_length);
+ if (output == NULL)
+ {
+ return false;
+ }
+ memcpy(output, item->valuestring, raw_length);
+ return true;
+ }
+
+ case cJSON_String:
+ return print_string(item, output_buffer);
+
+ case cJSON_Array:
+ return print_array(item, output_buffer);
+
+ case cJSON_Object:
+ return print_object(item, output_buffer);
+
+ default:
+ return false;
+ }
+}
+
+/* Build an array from input text. */
+static cJSON_bool parse_array(cJSON * const item, parse_buffer * const input_buffer)
+{
+ cJSON *head = NULL; /* head of the linked list */
+ cJSON *current_item = NULL;
+
+ if (input_buffer->depth >= CJSON_NESTING_LIMIT)
+ {
+ return false; /* to deeply nested */
+ }
+ input_buffer->depth++;
+
+ if (buffer_at_offset(input_buffer)[0] != '[')
+ {
+ /* not an array */
+ goto fail;
+ }
+
+ input_buffer->offset++;
+ buffer_skip_whitespace(input_buffer);
+ if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == ']'))
+ {
+ /* empty array */
+ goto success;
+ }
+
+ /* check if we skipped to the end of the buffer */
+ if (cannot_access_at_index(input_buffer, 0))
+ {
+ input_buffer->offset--;
+ goto fail;
+ }
+
+ /* step back to character in front of the first element */
+ input_buffer->offset--;
+ /* loop through the comma separated array elements */
+ do
+ {
+ /* allocate next item */
+ cJSON *new_item = cJSON_New_Item(&(input_buffer->hooks));
+ if (new_item == NULL)
+ {
+ goto fail; /* allocation failure */
+ }
+
+ /* attach next item to list */
+ if (head == NULL)
+ {
+ /* start the linked list */
+ current_item = head = new_item;
+ }
+ else
+ {
+ /* add to the end and advance */
+ current_item->next = new_item;
+ new_item->prev = current_item;
+ current_item = new_item;
+ }
+
+ /* parse next value */
+ input_buffer->offset++;
+ buffer_skip_whitespace(input_buffer);
+ if (!parse_value(current_item, input_buffer))
+ {
+ goto fail; /* failed to parse value */
+ }
+ buffer_skip_whitespace(input_buffer);
+ }
+ while (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == ','));
+
+ if (cannot_access_at_index(input_buffer, 0) || buffer_at_offset(input_buffer)[0] != ']')
+ {
+ goto fail; /* expected end of array */
+ }
+
+success:
+ input_buffer->depth--;
+
+ item->type = cJSON_Array;
+ item->child = head;
+
+ input_buffer->offset++;
+
+ return true;
+
+fail:
+ if (head != NULL)
+ {
+ cJSON_Delete(head);
+ }
+
+ return false;
+}
+
+/* Render an array to text */
+static cJSON_bool print_array(const cJSON * const item, printbuffer * const output_buffer)
+{
+ unsigned char *output_pointer = NULL;
+ size_t length = 0;
+ cJSON *current_element = item->child;
+
+ if (output_buffer == NULL)
+ {
+ return false;
+ }
+
+ /* Compose the output array. */
+ /* opening square bracket */
+ output_pointer = ensure(output_buffer, 1);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+
+ *output_pointer = '[';
+ output_buffer->offset++;
+ output_buffer->depth++;
+
+ while (current_element != NULL)
+ {
+ if (!print_value(current_element, output_buffer))
+ {
+ return false;
+ }
+ update_offset(output_buffer);
+ if (current_element->next)
+ {
+ length = (size_t) (output_buffer->format ? 2 : 1);
+ output_pointer = ensure(output_buffer, length + 1);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+ *output_pointer++ = ',';
+ if(output_buffer->format)
+ {
+ *output_pointer++ = ' ';
+ }
+ *output_pointer = '\0';
+ output_buffer->offset += length;
+ }
+ current_element = current_element->next;
+ }
+
+ output_pointer = ensure(output_buffer, 2);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+ *output_pointer++ = ']';
+ *output_pointer = '\0';
+ output_buffer->depth--;
+
+ return true;
+}
+
+/* Build an object from the text. */
+static cJSON_bool parse_object(cJSON * const item, parse_buffer * const input_buffer)
+{
+ cJSON *head = NULL; /* linked list head */
+ cJSON *current_item = NULL;
+
+ if (input_buffer->depth >= CJSON_NESTING_LIMIT)
+ {
+ return false; /* to deeply nested */
+ }
+ input_buffer->depth++;
+
+ if (cannot_access_at_index(input_buffer, 0) || (buffer_at_offset(input_buffer)[0] != '{'))
+ {
+ goto fail; /* not an object */
+ }
+
+ input_buffer->offset++;
+ buffer_skip_whitespace(input_buffer);
+ if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '}'))
+ {
+ goto success; /* empty object */
+ }
+
+ /* check if we skipped to the end of the buffer */
+ if (cannot_access_at_index(input_buffer, 0))
+ {
+ input_buffer->offset--;
+ goto fail;
+ }
+
+ /* step back to character in front of the first element */
+ input_buffer->offset--;
+ /* loop through the comma separated array elements */
+ do
+ {
+ /* allocate next item */
+ cJSON *new_item = cJSON_New_Item(&(input_buffer->hooks));
+ if (new_item == NULL)
+ {
+ goto fail; /* allocation failure */
+ }
+
+ /* attach next item to list */
+ if (head == NULL)
+ {
+ /* start the linked list */
+ current_item = head = new_item;
+ }
+ else
+ {
+ /* add to the end and advance */
+ current_item->next = new_item;
+ new_item->prev = current_item;
+ current_item = new_item;
+ }
+
+ /* parse the name of the child */
+ input_buffer->offset++;
+ buffer_skip_whitespace(input_buffer);
+ if (!parse_string(current_item, input_buffer))
+ {
+ goto fail; /* faile to parse name */
+ }
+ buffer_skip_whitespace(input_buffer);
+
+ /* swap valuestring and string, because we parsed the name */
+ current_item->string = current_item->valuestring;
+ current_item->valuestring = NULL;
+
+ if (cannot_access_at_index(input_buffer, 0) || (buffer_at_offset(input_buffer)[0] != ':'))
+ {
+ goto fail; /* invalid object */
+ }
+
+ /* parse the value */
+ input_buffer->offset++;
+ buffer_skip_whitespace(input_buffer);
+ if (!parse_value(current_item, input_buffer))
+ {
+ goto fail; /* failed to parse value */
+ }
+ buffer_skip_whitespace(input_buffer);
+ }
+ while (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == ','));
+
+ if (cannot_access_at_index(input_buffer, 0) || (buffer_at_offset(input_buffer)[0] != '}'))
+ {
+ goto fail; /* expected end of object */
+ }
+
+success:
+ input_buffer->depth--;
+
+ item->type = cJSON_Object;
+ item->child = head;
+
+ input_buffer->offset++;
+ return true;
+
+fail:
+ if (head != NULL)
+ {
+ cJSON_Delete(head);
+ }
+
+ return false;
+}
+
+/* Render an object to text. */
+static cJSON_bool print_object(const cJSON * const item, printbuffer * const output_buffer)
+{
+ unsigned char *output_pointer = NULL;
+ size_t length = 0;
+ cJSON *current_item = item->child;
+
+ if (output_buffer == NULL)
+ {
+ return false;
+ }
+
+ /* Compose the output: */
+ length = (size_t) (output_buffer->format ? 2 : 1); /* fmt: {\n */
+ output_pointer = ensure(output_buffer, length + 1);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+
+ *output_pointer++ = '{';
+ output_buffer->depth++;
+ if (output_buffer->format)
+ {
+ *output_pointer++ = '\n';
+ }
+ output_buffer->offset += length;
+
+ while (current_item)
+ {
+ if (output_buffer->format)
+ {
+ size_t i;
+ output_pointer = ensure(output_buffer, output_buffer->depth);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+ for (i = 0; i < output_buffer->depth; i++)
+ {
+ *output_pointer++ = '\t';
+ }
+ output_buffer->offset += output_buffer->depth;
+ }
+
+ /* print key */
+ if (!print_string_ptr((unsigned char*)current_item->string, output_buffer))
+ {
+ return false;
+ }
+ update_offset(output_buffer);
+
+ length = (size_t) (output_buffer->format ? 2 : 1);
+ output_pointer = ensure(output_buffer, length);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+ *output_pointer++ = ':';
+ if (output_buffer->format)
+ {
+ *output_pointer++ = '\t';
+ }
+ output_buffer->offset += length;
+
+ /* print value */
+ if (!print_value(current_item, output_buffer))
+ {
+ return false;
+ }
+ update_offset(output_buffer);
+
+ /* print comma if not last */
+ length = ((size_t)(output_buffer->format ? 1 : 0) + (size_t)(current_item->next ? 1 : 0));
+ output_pointer = ensure(output_buffer, length + 1);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+ if (current_item->next)
+ {
+ *output_pointer++ = ',';
+ }
+
+ if (output_buffer->format)
+ {
+ *output_pointer++ = '\n';
+ }
+ *output_pointer = '\0';
+ output_buffer->offset += length;
+
+ current_item = current_item->next;
+ }
+
+ output_pointer = ensure(output_buffer, output_buffer->format ? (output_buffer->depth + 1) : 2);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+ if (output_buffer->format)
+ {
+ size_t i;
+ for (i = 0; i < (output_buffer->depth - 1); i++)
+ {
+ *output_pointer++ = '\t';
+ }
+ }
+ *output_pointer++ = '}';
+ *output_pointer = '\0';
+ output_buffer->depth--;
+
+ return true;
+}
+
+/* Get Array size/item / object item. */
+CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array)
+{
+ cJSON *child = NULL;
+ size_t size = 0;
+
+ if (array == NULL)
+ {
+ return 0;
+ }
+
+ child = array->child;
+
+ while(child != NULL)
+ {
+ size++;
+ child = child->next;
+ }
+
+ /* FIXME: Can overflow here. Cannot be fixed without breaking the API */
+
+ return (int)size;
+}
+
+static cJSON* get_array_item(const cJSON *array, size_t index)
+{
+ cJSON *current_child = NULL;
+
+ if (array == NULL)
+ {
+ return NULL;
+ }
+
+ current_child = array->child;
+ while ((current_child != NULL) && (index > 0))
+ {
+ index--;
+ current_child = current_child->next;
+ }
+
+ return current_child;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index)
+{
+ if (index < 0)
+ {
+ return NULL;
+ }
+
+ return get_array_item(array, (size_t)index);
+}
+
+static cJSON *get_object_item(const cJSON * const object, const char * const name, const cJSON_bool case_sensitive)
+{
+ cJSON *current_element = NULL;
+
+ if ((object == NULL) || (name == NULL))
+ {
+ return NULL;
+ }
+
+ current_element = object->child;
+ if (case_sensitive)
+ {
+ while ((current_element != NULL) && (strcmp(name, current_element->string) != 0))
+ {
+ current_element = current_element->next;
+ }
+ }
+ else
+ {
+ while ((current_element != NULL) && (case_insensitive_strcmp((const unsigned char*)name, (const unsigned char*)(current_element->string)) != 0))
+ {
+ current_element = current_element->next;
+ }
+ }
+
+ return current_element;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string)
+{
+ return get_object_item(object, string, false);
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const string)
+{
+ return get_object_item(object, string, true);
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string)
+{
+ return cJSON_GetObjectItem(object, string) ? 1 : 0;
+}
+
+/* Utility for array list handling. */
+static void suffix_object(cJSON *prev, cJSON *item)
+{
+ prev->next = item;
+ item->prev = prev;
+}
+
+/* Utility for handling references. */
+static cJSON *create_reference(const cJSON *item, const internal_hooks * const hooks)
+{
+ cJSON *reference = NULL;
+ if (item == NULL)
+ {
+ return NULL;
+ }
+
+ reference = cJSON_New_Item(hooks);
+ if (reference == NULL)
+ {
+ return NULL;
+ }
+
+ memcpy(reference, item, sizeof(cJSON));
+ reference->string = NULL;
+ reference->type |= cJSON_IsReference;
+ reference->next = reference->prev = NULL;
+ return reference;
+}
+
+static cJSON_bool add_item_to_array(cJSON *array, cJSON *item)
+{
+ cJSON *child = NULL;
+
+ if ((item == NULL) || (array == NULL))
+ {
+ return false;
+ }
+
+ child = array->child;
+
+ if (child == NULL)
+ {
+ /* list is empty, start new one */
+ array->child = item;
+ }
+ else
+ {
+ /* append to the end */
+ while (child->next)
+ {
+ child = child->next;
+ }
+ suffix_object(child, item);
+ }
+
+ return true;
+}
+
+/* Add item to array/object. */
+CJSON_PUBLIC(void) cJSON_AddItemToArray(cJSON *array, cJSON *item)
+{
+ add_item_to_array(array, item);
+}
+
+#if defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5))))
+ #pragma GCC diagnostic push
+#endif
+#ifdef __GNUC__
+#pragma GCC diagnostic ignored "-Wcast-qual"
+#endif
+/* helper function to cast away const */
+static void* cast_away_const(const void* string)
+{
+ return (void*)string;
+}
+#if defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5))))
+ #pragma GCC diagnostic pop
+#endif
+
+
+static cJSON_bool add_item_to_object(cJSON * const object, const char * const string, cJSON * const item, const internal_hooks * const hooks, const cJSON_bool constant_key)
+{
+ char *new_key = NULL;
+ int new_type = cJSON_Invalid;
+
+ if ((object == NULL) || (string == NULL) || (item == NULL))
+ {
+ return false;
+ }
+
+ if (constant_key)
+ {
+ new_key = (char*)cast_away_const(string);
+ new_type = item->type | cJSON_StringIsConst;
+ }
+ else
+ {
+ new_key = (char*)cJSON_strdup((const unsigned char*)string, hooks);
+ if (new_key == NULL)
+ {
+ return false;
+ }
+
+ new_type = item->type & ~cJSON_StringIsConst;
+ }
+
+ if (!(item->type & cJSON_StringIsConst) && (item->string != NULL))
+ {
+ hooks->deallocate(item->string);
+ }
+
+ item->string = new_key;
+ item->type = new_type;
+
+ return add_item_to_array(object, item);
+}
+
+CJSON_PUBLIC(void) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item)
+{
+ add_item_to_object(object, string, item, &global_hooks, false);
+}
+
+/* Add an item to an object with constant string as key */
+CJSON_PUBLIC(void) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item)
+{
+ add_item_to_object(object, string, item, &global_hooks, true);
+}
+
+CJSON_PUBLIC(void) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item)
+{
+ if (array == NULL)
+ {
+ return;
+ }
+
+ add_item_to_array(array, create_reference(item, &global_hooks));
+}
+
+CJSON_PUBLIC(void) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item)
+{
+ if ((object == NULL) || (string == NULL))
+ {
+ return;
+ }
+
+ add_item_to_object(object, string, create_reference(item, &global_hooks), &global_hooks, false);
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name)
+{
+ cJSON *null = cJSON_CreateNull();
+ if (add_item_to_object(object, name, null, &global_hooks, false))
+ {
+ return null;
+ }
+
+ cJSON_Delete(null);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name)
+{
+ cJSON *true_item = cJSON_CreateTrue();
+ if (add_item_to_object(object, name, true_item, &global_hooks, false))
+ {
+ return true_item;
+ }
+
+ cJSON_Delete(true_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name)
+{
+ cJSON *false_item = cJSON_CreateFalse();
+ if (add_item_to_object(object, name, false_item, &global_hooks, false))
+ {
+ return false_item;
+ }
+
+ cJSON_Delete(false_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const char * const name, const cJSON_bool boolean)
+{
+ cJSON *bool_item = cJSON_CreateBool(boolean);
+ if (add_item_to_object(object, name, bool_item, &global_hooks, false))
+ {
+ return bool_item;
+ }
+
+ cJSON_Delete(bool_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number)
+{
+ cJSON *number_item = cJSON_CreateNumber(number);
+ if (add_item_to_object(object, name, number_item, &global_hooks, false))
+ {
+ return number_item;
+ }
+
+ cJSON_Delete(number_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string)
+{
+ cJSON *string_item = cJSON_CreateString(string);
+ if (add_item_to_object(object, name, string_item, &global_hooks, false))
+ {
+ return string_item;
+ }
+
+ cJSON_Delete(string_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddRawToObject(cJSON * const object, const char * const name, const char * const raw)
+{
+ cJSON *raw_item = cJSON_CreateRaw(raw);
+ if (add_item_to_object(object, name, raw_item, &global_hooks, false))
+ {
+ return raw_item;
+ }
+
+ cJSON_Delete(raw_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const char * const name)
+{
+ cJSON *object_item = cJSON_CreateObject();
+ if (add_item_to_object(object, name, object_item, &global_hooks, false))
+ {
+ return object_item;
+ }
+
+ cJSON_Delete(object_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const char * const name)
+{
+ cJSON *array = cJSON_CreateArray();
+ if (add_item_to_object(object, name, array, &global_hooks, false))
+ {
+ return array;
+ }
+
+ cJSON_Delete(array);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item)
+{
+ if ((parent == NULL) || (item == NULL))
+ {
+ return NULL;
+ }
+
+ if (item->prev != NULL)
+ {
+ /* not the first element */
+ item->prev->next = item->next;
+ }
+ if (item->next != NULL)
+ {
+ /* not the last element */
+ item->next->prev = item->prev;
+ }
+
+ if (item == parent->child)
+ {
+ /* first element */
+ parent->child = item->next;
+ }
+ /* make sure the detached item doesn't point anywhere anymore */
+ item->prev = NULL;
+ item->next = NULL;
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which)
+{
+ if (which < 0)
+ {
+ return NULL;
+ }
+
+ return cJSON_DetachItemViaPointer(array, get_array_item(array, (size_t)which));
+}
+
+CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which)
+{
+ cJSON_Delete(cJSON_DetachItemFromArray(array, which));
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char *string)
+{
+ cJSON *to_detach = cJSON_GetObjectItem(object, string);
+
+ return cJSON_DetachItemViaPointer(object, to_detach);
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *object, const char *string)
+{
+ cJSON *to_detach = cJSON_GetObjectItemCaseSensitive(object, string);
+
+ return cJSON_DetachItemViaPointer(object, to_detach);
+}
+
+CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char *string)
+{
+ cJSON_Delete(cJSON_DetachItemFromObject(object, string));
+}
+
+CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object, const char *string)
+{
+ cJSON_Delete(cJSON_DetachItemFromObjectCaseSensitive(object, string));
+}
+
+/* Replace array/object items with new ones. */
+CJSON_PUBLIC(void) cJSON_InsertItemInArray(cJSON *array, int which, cJSON *newitem)
+{
+ cJSON *after_inserted = NULL;
+
+ if (which < 0)
+ {
+ return;
+ }
+
+ after_inserted = get_array_item(array, (size_t)which);
+ if (after_inserted == NULL)
+ {
+ add_item_to_array(array, newitem);
+ return;
+ }
+
+ newitem->next = after_inserted;
+ newitem->prev = after_inserted->prev;
+ after_inserted->prev = newitem;
+ if (after_inserted == array->child)
+ {
+ array->child = newitem;
+ }
+ else
+ {
+ newitem->prev->next = newitem;
+ }
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent, cJSON * const item, cJSON * replacement)
+{
+ if ((parent == NULL) || (replacement == NULL) || (item == NULL))
+ {
+ return false;
+ }
+
+ if (replacement == item)
+ {
+ return true;
+ }
+
+ replacement->next = item->next;
+ replacement->prev = item->prev;
+
+ if (replacement->next != NULL)
+ {
+ replacement->next->prev = replacement;
+ }
+ if (replacement->prev != NULL)
+ {
+ replacement->prev->next = replacement;
+ }
+ if (parent->child == item)
+ {
+ parent->child = replacement;
+ }
+
+ item->next = NULL;
+ item->prev = NULL;
+ cJSON_Delete(item);
+
+ return true;
+}
+
+CJSON_PUBLIC(void) cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newitem)
+{
+ if (which < 0)
+ {
+ return;
+ }
+
+ cJSON_ReplaceItemViaPointer(array, get_array_item(array, (size_t)which), newitem);
+}
+
+static cJSON_bool replace_item_in_object(cJSON *object, const char *string, cJSON *replacement, cJSON_bool case_sensitive)
+{
+ if ((replacement == NULL) || (string == NULL))
+ {
+ return false;
+ }
+
+ /* replace the name in the replacement */
+ if (!(replacement->type & cJSON_StringIsConst) && (replacement->string != NULL))
+ {
+ cJSON_free(replacement->string);
+ }
+ replacement->string = (char*)cJSON_strdup((const unsigned char*)string, &global_hooks);
+ replacement->type &= ~cJSON_StringIsConst;
+
+ cJSON_ReplaceItemViaPointer(object, get_object_item(object, string, case_sensitive), replacement);
+
+ return true;
+}
+
+CJSON_PUBLIC(void) cJSON_ReplaceItemInObject(cJSON *object, const char *string, cJSON *newitem)
+{
+ replace_item_in_object(object, string, newitem, false);
+}
+
+CJSON_PUBLIC(void) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *object, const char *string, cJSON *newitem)
+{
+ replace_item_in_object(object, string, newitem, true);
+}
+
+/* Create basic types: */
+CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = cJSON_NULL;
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = cJSON_True;
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = cJSON_False;
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool b)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = b ? cJSON_True : cJSON_False;
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = cJSON_Number;
+ item->valuedouble = num;
+
+ /* use saturation in case of overflow */
+ if (num >= INT_MAX)
+ {
+ item->valueint = INT_MAX;
+ }
+ else if (num <= (double)INT_MIN)
+ {
+ item->valueint = INT_MIN;
+ }
+ else
+ {
+ item->valueint = (int)num;
+ }
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = cJSON_String;
+ item->valuestring = (char*)cJSON_strdup((const unsigned char*)string, &global_hooks);
+ if(!item->valuestring)
+ {
+ cJSON_Delete(item);
+ return NULL;
+ }
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateStringReference(const char *string)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if (item != NULL)
+ {
+ item->type = cJSON_String | cJSON_IsReference;
+ item->valuestring = (char*)cast_away_const(string);
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateObjectReference(const cJSON *child)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if (item != NULL) {
+ item->type = cJSON_Object | cJSON_IsReference;
+ item->child = (cJSON*)cast_away_const(child);
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateArrayReference(const cJSON *child) {
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if (item != NULL) {
+ item->type = cJSON_Array | cJSON_IsReference;
+ item->child = (cJSON*)cast_away_const(child);
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = cJSON_Raw;
+ item->valuestring = (char*)cJSON_strdup((const unsigned char*)raw, &global_hooks);
+ if(!item->valuestring)
+ {
+ cJSON_Delete(item);
+ return NULL;
+ }
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type=cJSON_Array;
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if (item)
+ {
+ item->type = cJSON_Object;
+ }
+
+ return item;
+}
+
+/* Create Arrays: */
+CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count)
+{
+ size_t i = 0;
+ cJSON *n = NULL;
+ cJSON *p = NULL;
+ cJSON *a = NULL;
+
+ if ((count < 0) || (numbers == NULL))
+ {
+ return NULL;
+ }
+
+ a = cJSON_CreateArray();
+ for(i = 0; a && (i < (size_t)count); i++)
+ {
+ n = cJSON_CreateNumber(numbers[i]);
+ if (!n)
+ {
+ cJSON_Delete(a);
+ return NULL;
+ }
+ if(!i)
+ {
+ a->child = n;
+ }
+ else
+ {
+ suffix_object(p, n);
+ }
+ p = n;
+ }
+
+ return a;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count)
+{
+ size_t i = 0;
+ cJSON *n = NULL;
+ cJSON *p = NULL;
+ cJSON *a = NULL;
+
+ if ((count < 0) || (numbers == NULL))
+ {
+ return NULL;
+ }
+
+ a = cJSON_CreateArray();
+
+ for(i = 0; a && (i < (size_t)count); i++)
+ {
+ n = cJSON_CreateNumber((double)numbers[i]);
+ if(!n)
+ {
+ cJSON_Delete(a);
+ return NULL;
+ }
+ if(!i)
+ {
+ a->child = n;
+ }
+ else
+ {
+ suffix_object(p, n);
+ }
+ p = n;
+ }
+
+ return a;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count)
+{
+ size_t i = 0;
+ cJSON *n = NULL;
+ cJSON *p = NULL;
+ cJSON *a = NULL;
+
+ if ((count < 0) || (numbers == NULL))
+ {
+ return NULL;
+ }
+
+ a = cJSON_CreateArray();
+
+ for(i = 0;a && (i < (size_t)count); i++)
+ {
+ n = cJSON_CreateNumber(numbers[i]);
+ if(!n)
+ {
+ cJSON_Delete(a);
+ return NULL;
+ }
+ if(!i)
+ {
+ a->child = n;
+ }
+ else
+ {
+ suffix_object(p, n);
+ }
+ p = n;
+ }
+
+ return a;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char **strings, int count)
+{
+ size_t i = 0;
+ cJSON *n = NULL;
+ cJSON *p = NULL;
+ cJSON *a = NULL;
+
+ if ((count < 0) || (strings == NULL))
+ {
+ return NULL;
+ }
+
+ a = cJSON_CreateArray();
+
+ for (i = 0; a && (i < (size_t)count); i++)
+ {
+ n = cJSON_CreateString(strings[i]);
+ if(!n)
+ {
+ cJSON_Delete(a);
+ return NULL;
+ }
+ if(!i)
+ {
+ a->child = n;
+ }
+ else
+ {
+ suffix_object(p,n);
+ }
+ p = n;
+ }
+
+ return a;
+}
+
+/* Duplication */
+CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse)
+{
+ cJSON *newitem = NULL;
+ cJSON *child = NULL;
+ cJSON *next = NULL;
+ cJSON *newchild = NULL;
+
+ /* Bail on bad ptr */
+ if (!item)
+ {
+ goto fail;
+ }
+ /* Create new item */
+ newitem = cJSON_New_Item(&global_hooks);
+ if (!newitem)
+ {
+ goto fail;
+ }
+ /* Copy over all vars */
+ newitem->type = item->type & (~cJSON_IsReference);
+ newitem->valueint = item->valueint;
+ newitem->valuedouble = item->valuedouble;
+ if (item->valuestring)
+ {
+ newitem->valuestring = (char*)cJSON_strdup((unsigned char*)item->valuestring, &global_hooks);
+ if (!newitem->valuestring)
+ {
+ goto fail;
+ }
+ }
+ if (item->string)
+ {
+ newitem->string = (item->type&cJSON_StringIsConst) ? item->string : (char*)cJSON_strdup((unsigned char*)item->string, &global_hooks);
+ if (!newitem->string)
+ {
+ goto fail;
+ }
+ }
+ /* If non-recursive, then we're done! */
+ if (!recurse)
+ {
+ return newitem;
+ }
+ /* Walk the ->next chain for the child. */
+ child = item->child;
+ while (child != NULL)
+ {
+ newchild = cJSON_Duplicate(child, true); /* Duplicate (with recurse) each item in the ->next chain */
+ if (!newchild)
+ {
+ goto fail;
+ }
+ if (next != NULL)
+ {
+ /* If newitem->child already set, then crosswire ->prev and ->next and move on */
+ next->next = newchild;
+ newchild->prev = next;
+ next = newchild;
+ }
+ else
+ {
+ /* Set newitem->child and move to it */
+ newitem->child = newchild;
+ next = newchild;
+ }
+ child = child->next;
+ }
+
+ return newitem;
+
+fail:
+ if (newitem != NULL)
+ {
+ cJSON_Delete(newitem);
+ }
+
+ return NULL;
+}
+
+CJSON_PUBLIC(void) cJSON_Minify(char *json)
+{
+ unsigned char *into = (unsigned char*)json;
+
+ if (json == NULL)
+ {
+ return;
+ }
+
+ while (*json)
+ {
+ if (*json == ' ')
+ {
+ json++;
+ }
+ else if (*json == '\t')
+ {
+ /* Whitespace characters. */
+ json++;
+ }
+ else if (*json == '\r')
+ {
+ json++;
+ }
+ else if (*json=='\n')
+ {
+ json++;
+ }
+ else if ((*json == '/') && (json[1] == '/'))
+ {
+ /* double-slash comments, to end of line. */
+ while (*json && (*json != '\n'))
+ {
+ json++;
+ }
+ }
+ else if ((*json == '/') && (json[1] == '*'))
+ {
+ /* multiline comments. */
+ while (*json && !((*json == '*') && (json[1] == '/')))
+ {
+ json++;
+ }
+ json += 2;
+ }
+ else if (*json == '\"')
+ {
+ /* string literals, which are \" sensitive. */
+ *into++ = (unsigned char)*json++;
+ while (*json && (*json != '\"'))
+ {
+ if (*json == '\\')
+ {
+ *into++ = (unsigned char)*json++;
+ }
+ *into++ = (unsigned char)*json++;
+ }
+ *into++ = (unsigned char)*json++;
+ }
+ else
+ {
+ /* All other characters. */
+ *into++ = (unsigned char)*json++;
+ }
+ }
+
+ /* and null-terminate. */
+ *into = '\0';
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_Invalid;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_False;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xff) == cJSON_True;
+}
+
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & (cJSON_True | cJSON_False)) != 0;
+}
+CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_NULL;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_Number;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_String;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_Array;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_Object;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_Raw;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * const b, const cJSON_bool case_sensitive)
+{
+ if ((a == NULL) || (b == NULL) || ((a->type & 0xFF) != (b->type & 0xFF)) || cJSON_IsInvalid(a))
+ {
+ return false;
+ }
+
+ /* check if type is valid */
+ switch (a->type & 0xFF)
+ {
+ case cJSON_False:
+ case cJSON_True:
+ case cJSON_NULL:
+ case cJSON_Number:
+ case cJSON_String:
+ case cJSON_Raw:
+ case cJSON_Array:
+ case cJSON_Object:
+ break;
+
+ default:
+ return false;
+ }
+
+ /* identical objects are equal */
+ if (a == b)
+ {
+ return true;
+ }
+
+ switch (a->type & 0xFF)
+ {
+ /* in these cases and equal type is enough */
+ case cJSON_False:
+ case cJSON_True:
+ case cJSON_NULL:
+ return true;
+
+ case cJSON_Number:
+ if (a->valuedouble == b->valuedouble)
+ {
+ return true;
+ }
+ return false;
+
+ case cJSON_String:
+ case cJSON_Raw:
+ if ((a->valuestring == NULL) || (b->valuestring == NULL))
+ {
+ return false;
+ }
+ if (strcmp(a->valuestring, b->valuestring) == 0)
+ {
+ return true;
+ }
+
+ return false;
+
+ case cJSON_Array:
+ {
+ cJSON *a_element = a->child;
+ cJSON *b_element = b->child;
+
+ for (; (a_element != NULL) && (b_element != NULL);)
+ {
+ if (!cJSON_Compare(a_element, b_element, case_sensitive))
+ {
+ return false;
+ }
+
+ a_element = a_element->next;
+ b_element = b_element->next;
+ }
+
+ /* one of the arrays is longer than the other */
+ if (a_element != b_element) {
+ return false;
+ }
+
+ return true;
+ }
+
+ case cJSON_Object:
+ {
+ cJSON *a_element = NULL;
+ cJSON *b_element = NULL;
+ cJSON_ArrayForEach(a_element, a)
+ {
+ /* TODO This has O(n^2) runtime, which is horrible! */
+ b_element = get_object_item(b, a_element->string, case_sensitive);
+ if (b_element == NULL)
+ {
+ return false;
+ }
+
+ if (!cJSON_Compare(a_element, b_element, case_sensitive))
+ {
+ return false;
+ }
+ }
+
+ /* doing this twice, once on a and b to prevent true comparison if a subset of b
+ * TODO: Do this the proper way, this is just a fix for now */
+ cJSON_ArrayForEach(b_element, b)
+ {
+ a_element = get_object_item(a, b_element->string, case_sensitive);
+ if (a_element == NULL)
+ {
+ return false;
+ }
+
+ if (!cJSON_Compare(b_element, a_element, case_sensitive))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ default:
+ return false;
+ }
+}
+
+CJSON_PUBLIC(void *) cJSON_malloc(size_t size)
+{
+ return global_hooks.allocate(size);
+}
+
+CJSON_PUBLIC(void) cJSON_free(void *object)
+{
+ global_hooks.deallocate(object);
+}
diff --git a/app/bin/cJSON.h b/app/bin/cJSON.h
new file mode 100755
index 0000000..8d45390
--- /dev/null
+++ b/app/bin/cJSON.h
@@ -0,0 +1,285 @@
+/*
+ Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+*/
+
+#ifndef cJSON__h
+#define cJSON__h
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#if !defined(__WINDOWS__) && (defined(WIN32) || defined(WIN64) || defined(_MSC_VER) || defined(_WIN32))
+#define __WINDOWS__
+#endif
+
+#ifdef __WINDOWS__
+
+/* When compiling for windows, we specify a specific calling convention to avoid issues where we are being called from a project with a different default calling convention. For windows you have 3 define options:
+
+CJSON_HIDE_SYMBOLS - Define this in the case where you don't want to ever dllexport symbols
+CJSON_EXPORT_SYMBOLS - Define this on library build when you want to dllexport symbols (default)
+CJSON_IMPORT_SYMBOLS - Define this if you want to dllimport symbol
+
+For *nix builds that support visibility attribute, you can define similar behavior by
+
+setting default visibility to hidden by adding
+-fvisibility=hidden (for gcc)
+or
+-xldscope=hidden (for sun cc)
+to CFLAGS
+
+then using the CJSON_API_VISIBILITY flag to "export" the same symbols the way CJSON_EXPORT_SYMBOLS does
+
+*/
+
+#define CJSON_CDECL __cdecl
+#define CJSON_STDCALL __stdcall
+
+/* export symbols by default, this is necessary for copy pasting the C and header file */
+#if !defined(CJSON_HIDE_SYMBOLS) && !defined(CJSON_IMPORT_SYMBOLS) && !defined(CJSON_EXPORT_SYMBOLS)
+#define CJSON_EXPORT_SYMBOLS
+#endif
+
+#if defined(CJSON_HIDE_SYMBOLS)
+#define CJSON_PUBLIC(type) type CJSON_STDCALL
+#elif defined(CJSON_EXPORT_SYMBOLS)
+#define CJSON_PUBLIC(type) __declspec(dllexport) type CJSON_STDCALL
+#elif defined(CJSON_IMPORT_SYMBOLS)
+#define CJSON_PUBLIC(type) __declspec(dllimport) type CJSON_STDCALL
+#endif
+#else /* !__WINDOWS__ */
+#define CJSON_CDECL
+#define CJSON_STDCALL
+
+#if (defined(__GNUC__) || defined(__SUNPRO_CC) || defined (__SUNPRO_C)) && defined(CJSON_API_VISIBILITY)
+#define CJSON_PUBLIC(type) __attribute__((visibility("default"))) type
+#else
+#define CJSON_PUBLIC(type) type
+#endif
+#endif
+
+/* project version */
+#define CJSON_VERSION_MAJOR 1
+#define CJSON_VERSION_MINOR 7
+#define CJSON_VERSION_PATCH 8
+
+#include <stddef.h>
+
+/* cJSON Types: */
+#define cJSON_Invalid (0)
+#define cJSON_False (1 << 0)
+#define cJSON_True (1 << 1)
+#define cJSON_NULL (1 << 2)
+#define cJSON_Number (1 << 3)
+#define cJSON_String (1 << 4)
+#define cJSON_Array (1 << 5)
+#define cJSON_Object (1 << 6)
+#define cJSON_Raw (1 << 7) /* raw json */
+
+#define cJSON_IsReference 256
+#define cJSON_StringIsConst 512
+
+/* The cJSON structure: */
+typedef struct cJSON
+{
+ /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */
+ struct cJSON *next;
+ struct cJSON *prev;
+ /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */
+ struct cJSON *child;
+
+ /* The type of the item, as above. */
+ int type;
+
+ /* The item's string, if type==cJSON_String and type == cJSON_Raw */
+ char *valuestring;
+ /* writing to valueint is DEPRECATED, use cJSON_SetNumberValue instead */
+ int valueint;
+ /* The item's number, if type==cJSON_Number */
+ double valuedouble;
+
+ /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */
+ char *string;
+} cJSON;
+
+typedef struct cJSON_Hooks
+{
+ /* malloc/free are CDECL on Windows regardless of the default calling convention of the compiler, so ensure the hooks allow passing those functions directly. */
+ void *(CJSON_CDECL *malloc_fn)(size_t sz);
+ void (CJSON_CDECL *free_fn)(void *ptr);
+} cJSON_Hooks;
+
+typedef int cJSON_bool;
+
+/* Limits how deeply nested arrays/objects can be before cJSON rejects to parse them.
+ * This is to prevent stack overflows. */
+#ifndef CJSON_NESTING_LIMIT
+#define CJSON_NESTING_LIMIT 1000
+#endif
+
+/* returns the version of cJSON as a string */
+CJSON_PUBLIC(const char*) cJSON_Version(void);
+
+/* Supply malloc, realloc and free functions to cJSON */
+CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks);
+
+/* Memory Management: the caller is always responsible to free the results from all variants of cJSON_Parse (with cJSON_Delete) and cJSON_Print (with stdlib free, cJSON_Hooks.free_fn, or cJSON_free as appropriate). The exception is cJSON_PrintPreallocated, where the caller has full responsibility of the buffer. */
+/* Supply a block of JSON, and this returns a cJSON object you can interrogate. */
+CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value);
+/* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */
+/* If you supply a ptr in return_parse_end and parsing fails, then return_parse_end will contain a pointer to the error so will match cJSON_GetErrorPtr(). */
+CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated);
+
+/* Render a cJSON entity to text for transfer/storage. */
+CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item);
+/* Render a cJSON entity to text for transfer/storage without any formatting. */
+CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item);
+/* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces reallocation. fmt=0 gives unformatted, =1 gives formatted */
+CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt);
+/* Render a cJSON entity to text using a buffer already allocated in memory with given length. Returns 1 on success and 0 on failure. */
+/* NOTE: cJSON is not always 100% accurate in estimating how much memory it will use, so to be safe allocate 5 bytes more than you actually need */
+CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buffer, const int length, const cJSON_bool format);
+/* Delete a cJSON entity and all subentities. */
+CJSON_PUBLIC(void) cJSON_Delete(cJSON *c);
+
+/* Returns the number of items in an array (or object). */
+CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array);
+/* Retrieve item number "index" from array "array". Returns NULL if unsuccessful. */
+CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index);
+/* Get item "string" from object. Case insensitive. */
+CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string);
+CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const string);
+CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string);
+/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */
+CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void);
+
+/* Check if the item is a string and return its valuestring */
+CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item);
+
+/* These functions check the type of an item */
+CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item);
+
+/* These calls create a cJSON item of the appropriate type. */
+CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void);
+CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void);
+CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void);
+CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool boolean);
+CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num);
+CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string);
+/* raw json */
+CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw);
+CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void);
+CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void);
+
+/* Create a string where valuestring references a string so
+ * it will not be freed by cJSON_Delete */
+CJSON_PUBLIC(cJSON *) cJSON_CreateStringReference(const char *string);
+/* Create an object/arrray that only references it's elements so
+ * they will not be freed by cJSON_Delete */
+CJSON_PUBLIC(cJSON *) cJSON_CreateObjectReference(const cJSON *child);
+CJSON_PUBLIC(cJSON *) cJSON_CreateArrayReference(const cJSON *child);
+
+/* These utilities create an Array of count items. */
+CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count);
+CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count);
+CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count);
+CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char **strings, int count);
+
+/* Append item to the specified array/object. */
+CJSON_PUBLIC(void) cJSON_AddItemToArray(cJSON *array, cJSON *item);
+CJSON_PUBLIC(void) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);
+/* Use this when string is definitely const (i.e. a literal, or as good as), and will definitely survive the cJSON object.
+ * WARNING: When this function was used, make sure to always check that (item->type & cJSON_StringIsConst) is zero before
+ * writing to `item->string` */
+CJSON_PUBLIC(void) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item);
+/* Append reference to item to the specified array/object. Use this when you want to add an existing cJSON to a new cJSON, but don't want to corrupt your existing cJSON. */
+CJSON_PUBLIC(void) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item);
+CJSON_PUBLIC(void) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item);
+
+/* Remove/Detatch items from Arrays/Objects. */
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item);
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which);
+CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which);
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char *string);
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *object, const char *string);
+CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char *string);
+CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object, const char *string);
+
+/* Update array items. */
+CJSON_PUBLIC(void) cJSON_InsertItemInArray(cJSON *array, int which, cJSON *newitem); /* Shifts pre-existing items to the right. */
+CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent, cJSON * const item, cJSON * replacement);
+CJSON_PUBLIC(void) cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newitem);
+CJSON_PUBLIC(void) cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem);
+CJSON_PUBLIC(void) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *object,const char *string,cJSON *newitem);
+
+/* Duplicate a cJSON item */
+CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse);
+/* Duplicate will create a new, identical cJSON item to the one you pass, in new memory that will
+need to be released. With recurse!=0, it will duplicate any children connected to the item.
+The item->next and ->prev pointers are always zero on return from Duplicate. */
+/* Recursively compare two cJSON items for equality. If either a or b is NULL or invalid, they will be considered unequal.
+ * case_sensitive determines if object keys are treated case sensitive (1) or case insensitive (0) */
+CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * const b, const cJSON_bool case_sensitive);
+
+
+CJSON_PUBLIC(void) cJSON_Minify(char *json);
+
+/* Helper functions for creating and adding items to an object at the same time.
+ * They return the added item or NULL on failure. */
+CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name);
+CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name);
+CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name);
+CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const char * const name, const cJSON_bool boolean);
+CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number);
+CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string);
+CJSON_PUBLIC(cJSON*) cJSON_AddRawToObject(cJSON * const object, const char * const name, const char * const raw);
+CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const char * const name);
+CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const char * const name);
+
+/* When assigning an integer value, it needs to be propagated to valuedouble too. */
+#define cJSON_SetIntValue(object, number) ((object) ? (object)->valueint = (object)->valuedouble = (number) : (number))
+/* helper for the cJSON_SetNumberValue macro */
+CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number);
+#define cJSON_SetNumberValue(object, number) ((object != NULL) ? cJSON_SetNumberHelper(object, (double)number) : (number))
+
+/* Macro for iterating over an array or object */
+#define cJSON_ArrayForEach(element, array) for(element = (array != NULL) ? (array)->child : NULL; element != NULL; element = element->next)
+
+/* malloc/free objects using the malloc/free functions that have been set with cJSON_InitHooks */
+CJSON_PUBLIC(void *) cJSON_malloc(size_t size);
+CJSON_PUBLIC(void) cJSON_free(void *object);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/app/bin/cbezier.c b/app/bin/cbezier.c
index b91a81e..7f90a27 100644
--- a/app/bin/cbezier.c
+++ b/app/bin/cbezier.c
@@ -104,7 +104,8 @@ static struct {
DIST_T trackGauge;
} Da;
-
+static dynArr_t anchors_da;
+#define anchors(N) DYNARR_N(trkSeg_t,anchors_da,N)
/**
* Draw a ControlArm.
@@ -233,17 +234,16 @@ double BezErrorLine(coOrd pos[4], coOrd start_point, coOrd end_point, double sta
/*
* Add element to DYNARR pointed to by caller from segment handed in
*/
-void addSegBezier(dynArr_t * const array_p, trkSeg_p seg) {
+void addSegBezier(dynArr_t * array_p, trkSeg_p seg) {
trkSeg_p s;
- DYNARR_APPEND(trkSeg_t, * array_p, 1); //Adds 1 to cnt
- s = &DYNARR_N(trkSeg_t,* array_p,array_p->cnt-1);
+ DYNARR_APPEND(trkSeg_t,* array_p, 1); //Adds 1 to cnt
+ s = &DYNARR_N(trkSeg_t,*array_p,(array_p->cnt)-1);
s->type = seg->type;
s->color = seg->color;
s->width = seg->width;
s->bezSegs.cnt = 0;
- if (s->bezSegs.ptr) MyFree(s->bezSegs.ptr);
s->bezSegs.ptr=NULL;
s->bezSegs.max = 0;
if ((s->type == SEG_BEZLIN || s->type == SEG_BEZTRK) && seg->bezSegs.cnt) {
@@ -394,15 +394,15 @@ EXPORT BOOL_T ConvertToArcs (coOrd pos[4], dynArr_t * segs, BOOL_T track, wDrawC
if (arc.curveData.type == curveTypeStraight) {
double error = BezErrorLine(pos,start_point,end_point, t_s, t_e);
- curr_good = (error <= errorThreshold/2);
- arc.curveData.a0 = FindAngle(start_point,end_point);
- arc.curveData.a1 = FindAngle(end_point,start_point);
+ curr_good = (error <= errorThreshold/4);
+ //arc.curveData.a0 = FindAngle(start_point,end_point);
+ //arc.curveData.a1 = FindAngle(end_point,start_point);
} else if (arc.curveData.type == curveTypeNone) {
return FALSE; //Something wrong
} else {
double error = BezError(pos, arc.curveData.curvePos, start_point, t_s, t_e);
- curr_good = (error <= errorThreshold/2);
+ curr_good = (error <= errorThreshold/4);
};
done = prev_good && !curr_good; //Was better than this last time?
@@ -449,7 +449,7 @@ EXPORT BOOL_T ConvertToArcs (coOrd pos[4], dynArr_t * segs, BOOL_T track, wDrawC
curveSeg.width = track?0:width;
if ( prev_arc.curveData.type == curveTypeCurve ) {
if (track)
- curveSeg.color = (fabs(prev_arc.curveData.curveRadius)<(GetLayoutMinTrackRadius()-EPSILON))?wDrawColorRed:wDrawColorBlack;
+ curveSeg.color = (fabs(prev_arc.curveData.curveRadius)<(GetLayoutMinTrackRadius()-EPSILON))?exceptionColor:normalColor;
else
curveSeg.color = color;
curveSeg.type = track?SEG_CRVTRK:SEG_CRVLIN;
@@ -466,7 +466,7 @@ EXPORT BOOL_T ConvertToArcs (coOrd pos[4], dynArr_t * segs, BOOL_T track, wDrawC
curveSeg.color = wDrawColorBlack;
else
curveSeg.color = color;
- curveSeg.u.l.angle = prev_arc.curveData.a1;
+ curveSeg.u.l.angle = FindAngle(prev_arc.pos0,prev_arc.pos1);
curveSeg.u.l.pos[0] = prev_arc.pos0;
curveSeg.u.l.pos[1] = prev_arc.pos1;
curveSeg.u.l.option = 0;
@@ -483,7 +483,7 @@ EXPORT BOOL_T ConvertToArcs (coOrd pos[4], dynArr_t * segs, BOOL_T track, wDrawC
*
*/
-EXPORT void DrawBezCurve(trkSeg_p control_arm1,
+static void DrawBezCurve(trkSeg_p control_arm1,
int cp1Segs_cnt,
trkSeg_p control_arm2,
int cp2Segs_cnt,
@@ -491,28 +491,24 @@ EXPORT void DrawBezCurve(trkSeg_p control_arm1,
int crvSegs_cnt,
wDrawColor color
) {
- long oldDrawOptions = tempD.funcs->options;
- tempD.funcs->options = wDrawOptTemp;
- long oldOptions = tempD.options;
- tempD.options = DC_TICKS;
- tempD.orig = mainD.orig;
- tempD.angle = mainD.angle;
if (crvSegs_cnt && curveSegs)
DrawSegs( &tempD, zero, 0.0, curveSegs, crvSegs_cnt, Da.trackGauge, color );
if (cp1Segs_cnt && control_arm1)
DrawSegs( &tempD, zero, 0.0, control_arm1, cp1Segs_cnt, Da.trackGauge, drawColorBlack );
if (cp2Segs_cnt && control_arm2)
DrawSegs( &tempD, zero, 0.0, control_arm2, cp2Segs_cnt, Da.trackGauge, drawColorBlack );
- tempD.funcs->options = oldDrawOptions;
- tempD.options = oldOptions;
}
/*
+ * Undraw the temp Bezier
+ */
+
+/*
* If Track, make it red if the radius is below minimum
*/
void DrawTempBezier(BOOL_T track) {
- if (track) DrawBezCurve(Da.cp1Segs_da,Da.cp1Segs_da_cnt,Da.cp2Segs_da,Da.cp2Segs_da_cnt, (trkSeg_t *)Da.crvSegs_da.ptr,Da.crvSegs_da_cnt,Da.minRadius<(GetLayoutMinTrackRadius()-EPSILON)?drawColorRed:drawColorBlack);
+ if (track) DrawBezCurve(Da.cp1Segs_da,Da.cp1Segs_da_cnt,Da.cp2Segs_da,Da.cp2Segs_da_cnt, (trkSeg_t *)Da.crvSegs_da.ptr,Da.crvSegs_da_cnt,fabs(Da.minRadius)<(GetLayoutMinTrackRadius()-EPSILON)?exceptionColor:normalColor);
else
DrawBezCurve(Da.cp1Segs_da,Da.cp1Segs_da_cnt,Da.cp2Segs_da,Da.cp2Segs_da_cnt, (trkSeg_t *)Da.crvSegs_da.ptr,Da.crvSegs_da_cnt,drawColorBlack); //Add Second Arm
}
@@ -542,6 +538,19 @@ void CreateBothControlArms(int selectPoint, BOOL_T track) {
}
}
+void CreateMoveAnchor(coOrd pos,BOOL_T fill) {
+ double d = tempD.scale*0.15;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int inx = anchors_da.cnt-1;
+ anchors(inx).type = fill?SEG_FILCRCL:SEG_CRVLIN;
+ anchors(inx).u.c.a0 = 0.0;
+ anchors(inx).u.c.a1 = 360.0;
+ anchors(inx).width = 0;
+ anchors(inx).color = wDrawColorBlue;
+ anchors(inx).u.c.radius = d/4;
+ anchors(inx).u.c.center = pos;
+}
+
/*
* AdjustBezCurve
*
@@ -590,14 +599,24 @@ EXPORT STATUS_T AdjustBezCurve(
InfoMessage( _("Select End-Point - Ctrl unlocks end-point") );
else
InfoMessage( _("Select End-Point") );
- DrawTempBezier(Da.track);
return C_CONTINUE;
+ case wActionMove:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ if (Da.state != PICK_POINT) return C_CONTINUE;
+ if (Da.state != PICK_POINT) return C_CONTINUE;
+ for (int i=0;i<4;i++) {
+ if (i==0 && Da.trk[0]) continue;
+ if (i==3 && Da.trk[1]) continue; //ignore locked points
+ d = FindDistance(Da.pos[i],pos);
+ if (IsClose(d)) CreateMoveAnchor(Da.pos[i],TRUE);
+ }
+ break;
+
case C_DOWN:
if (Da.state != PICK_POINT) return C_CONTINUE;
dd = 10000.0;
Da.selectPoint = -1;
- DrawTempBezier(Da.track); //wipe out
for (int i=0;i<4;i++) {
d = FindDistance(Da.pos[i],pos);
if (d < dd) {
@@ -609,19 +628,19 @@ EXPORT STATUS_T AdjustBezCurve(
}
if (!IsClose(dd) ) Da.selectPoint = -1;
+ DYNARR_RESET(trkSeg_t,anchors_da);
if (Da.selectPoint == -1) {
InfoMessage( _("Not close enough to any valid, selectable point, reselect") );
- DrawTempBezier(Da.track);
return C_CONTINUE;
} else {
pos = Da.pos[Da.selectPoint];
+ CreateMoveAnchor(pos,TRUE);
Da.state = POINT_PICKED;
InfoMessage( _("Drag point %d to new location and release it"),Da.selectPoint+1 );
}
CreateBothControlArms(Da.selectPoint, track);
if (ConvertToArcs(Da.pos, &Da.crvSegs_da, track, color,Da.width)) Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
Da.minRadius = BezierMinRadius(Da.pos, Da.crvSegs_da);
- DrawTempBezier(Da.track);
return C_CONTINUE;
case C_MOVE:
@@ -629,8 +648,8 @@ EXPORT STATUS_T AdjustBezCurve(
InfoMessage(_("Pick any circle to adjust it - Enter to confirm, ESC to abort"));
return C_CONTINUE;
}
+ DYNARR_RESET(trkSeg_t,anchors_da);
//If locked, reset pos to be on line from other track
- DrawTempBezier(Da.track); //wipe out
if (Da.selectPoint == 1 || Da.selectPoint == 2) { //CPs
int controlArm = Da.selectPoint-1; //Snap to direction of track
if (Da.trk[controlArm]) {
@@ -642,6 +661,7 @@ EXPORT STATUS_T AdjustBezCurve(
} // Dont Snap control points
} else SnapPos(&pos);
Da.pos[Da.selectPoint] = pos;
+ CreateMoveAnchor(pos,TRUE);
CreateBothControlArms(Da.selectPoint, track);
if (ConvertToArcs(Da.pos,&Da.crvSegs_da,track, color, Da.width)) Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
Da.minRadius = BezierMinRadius(Da.pos,Da.crvSegs_da);
@@ -666,7 +686,6 @@ EXPORT STATUS_T AdjustBezCurve(
InfoMessage( _("Bezier %s : Min Radius=%s Length=%s"),track?"Track":"Line",
FormatDistance(Da.minRadius>=100000?0:Da.minRadius),
FormatDistance(BezierLength(Da.pos,Da.crvSegs_da)));
- DrawTempBezier(Da.track);
return C_CONTINUE;
case C_UP:
@@ -674,11 +693,8 @@ EXPORT STATUS_T AdjustBezCurve(
//Take last pos and decide if it should be snapped to a track because SHIFT is held (pos0 and pos3)
ep = 0;
BOOL_T found = FALSE;
-
- DrawTempBezier(Da.track); //wipe out
-
+ DYNARR_RESET(trkSeg_t,anchors_da);
p = pos;
-
if (track && (Da.selectPoint == 0 || Da.selectPoint == 3)) { //EPs
if ((MyGetKeyState() & WKEY_SHIFT) != 0) { //Snap Track
if ((t = OnTrackIgnore(&p, FALSE, TRUE, Da.selectTrack)) != NULL) { //Snap to endPoint
@@ -701,6 +717,7 @@ EXPORT STATUS_T AdjustBezCurve(
angle2 = NormalizeAngle(FindAngle(pos, pos0)-angle1);
Translate(&Da.pos[Da.selectPoint==0?1:2], Da.pos[Da.selectPoint==0?0:3], angle1, FindDistance(Da.pos[Da.selectPoint==0?1:2],pos)*cos(D2R(angle2)));
}
+
Da.selectPoint = -1;
CreateBothControlArms(Da.selectPoint,track);
if (ConvertToArcs(Da.pos,&Da.crvSegs_da,track,color,Da.width)) Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
@@ -722,7 +739,6 @@ EXPORT STATUS_T AdjustBezCurve(
InfoMessage(_("Pick any circle to adjust it - Enter to confirm, ESC to abort"));
} else
InfoMessage(_("Pick any circle to adjust it - Enter to confirm, ESC to abort"));
- DrawTempBezier(Da.track);
Da.state = PICK_POINT;
return C_CONTINUE;
@@ -751,7 +767,6 @@ EXPORT STATUS_T AdjustBezCurve(
}
}
Da.minRadius = BezierMinRadius(Da.pos,Da.crvSegs_da);
- DrawTempBezier(Da.track);
UndoStart( _("Create Bezier"), "newBezier - CR" );
if (Da.track) {
t = NewBezierTrack( Da.pos, (trkSeg_p)Da.crvSegs_da.ptr, Da.crvSegs_da.cnt);
@@ -761,26 +776,30 @@ EXPORT STATUS_T AdjustBezCurve(
else t = NewBezierLine(Da.pos, (trkSeg_p)Da.crvSegs_da.ptr, Da.crvSegs_da.cnt,color,width);
UndoEnd();
if (Da.crvSegs_da.ptr) MyFree(Da.crvSegs_da.ptr);
+ DYNARR_RESET(trkSeg_t,anchors_da);
Da.crvSegs_da.ptr = NULL;
Da.crvSegs_da.cnt = 0;
Da.crvSegs_da.max = 0;
DrawNewTrack(t);
Da.state = NONE;
- MainRedraw();
- MapRedraw();
return C_TERMINATE;
}
return C_CONTINUE;
case C_REDRAW:
- DrawTempBezier(Da.track);
+ if (Da.state != NONE)
+ DrawTempBezier(Da.track);
+ if (anchors_da.cnt>0)
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
return C_CONTINUE;
default:
return C_CONTINUE;
}
+ return C_CONTINUE;
+
}
@@ -824,14 +843,16 @@ STATUS_T CmdBezModify (track_p trk, wAction_t action, coOrd pos, DIST_T trackG)
Da.selectPoint = -1;
Da.selectTrack = NULL;
- if (IsTrack(trk)) Da.track = TRUE;
+ if (IsTrack(trk)) {
+ Da.track = TRUE;
+ Da.trk[0] = GetTrkEndTrk( trk, 0 );
+ if (Da.trk[0]) Da.ep[0] = GetEndPtConnectedToMe(Da.trk[0],trk);
+ Da.trk[1] = GetTrkEndTrk( trk, 1 );
+ if (Da.trk[1]) Da.ep[1] = GetEndPtConnectedToMe(Da.trk[1],trk);
+ }
else Da.track = FALSE;
Da.selectTrack = trk;
- Da.trk[0] = GetTrkEndTrk( trk, 0 );
- if (Da.trk[0]) Da.ep[0] = GetEndPtConnectedToMe(Da.trk[0],trk);
- Da.trk[1] = GetTrkEndTrk( trk, 1 );
- if (Da.trk[1]) Da.ep[1] = GetEndPtConnectedToMe(Da.trk[1],trk);
for (int i=0;i<4;i++) Da.pos[i] = xx->bezierData.pos[i]; //Copy parms from old trk
InfoMessage(_("%s picked - now select a Point"),track?"Track":"Line");
@@ -839,8 +860,12 @@ STATUS_T CmdBezModify (track_p trk, wAction_t action, coOrd pos, DIST_T trackG)
DrawTrack(Da.selectTrack,&mainD,wDrawColorWhite); //Wipe out real track, draw replacement
return AdjustBezCurve(C_START, pos, Da.track, xx->bezierData.segsColor, xx->bezierData.segsWidth, InfoMessage);
+ case wActionMove:
+ if (Da.state == NONE) return C_CONTINUE;
+ return AdjustBezCurve(wActionMove, pos, Da.track, xx->bezierData.segsColor, xx->bezierData.segsWidth, InfoMessage);
case C_DOWN:
if (Da.state == TRACK_SELECTED) return C_CONTINUE; //Ignore until first up
+ UndrawNewTrack( Da.selectTrack );
return AdjustBezCurve(C_DOWN, pos, Da.track, xx->bezierData.segsColor, xx->bezierData.segsWidth, InfoMessage);
@@ -867,9 +892,10 @@ STATUS_T CmdBezModify (track_p trk, wAction_t action, coOrd pos, DIST_T trackG)
UndoStart( _("Modify Bezier"), "newBezier - CR" );
if (Da.track) t = NewBezierTrack( Da.pos, (trkSeg_p)Da.crvSegs_da.ptr, Da.crvSegs_da.cnt);
else t = NewBezierLine(Da.pos, (trkSeg_p)Da.crvSegs_da.ptr, Da.crvSegs_da.cnt,xx->bezierData.segsColor,xx->bezierData.segsWidth);
-
+
if (Da.track) CopyAttributes( trk, t );
+ Da.state = NONE; //Must do before Delete for redraw
DeleteTrack(trk, TRUE);
if (Da.track) {
@@ -879,16 +905,14 @@ STATUS_T CmdBezModify (track_p trk, wAction_t action, coOrd pos, DIST_T trackG)
}
}
}
+ DrawNewTrack( t );
UndoEnd();
- InfoMessage(_("Modify Bezier Complete - select another"));
- Da.state = NONE;
+ InfoMessage(_("Modify Bezier Complete"));
return C_TERMINATE;
case C_CANCEL:
InfoMessage(_("Modify Bezier Cancelled"));
Da.state = NONE;
- MainRedraw();
- MapRedraw();
return C_TERMINATE;
case C_REDRAW:
@@ -919,6 +943,23 @@ DIST_T BezierLength(coOrd pos[4],dynArr_t segs) {
return dd;
}
+DIST_T BezierOffsetLength(dynArr_t segs, double offset) {
+ DIST_T dd = 0.0;
+ if (segs.cnt == 0 ) return dd;
+ for (int i = 0;i<segs.cnt;i++) {
+ trkSeg_t t = DYNARR_N(trkSeg_t, segs, i);
+ if (t.type == SEG_CRVTRK || t.type == SEG_CRVLIN) {
+ dd += fabs((t.u.c.radius+(t.u.c.radius>0?offset:-offset))*D2R(t.u.c.a1));
+ } else if (t.type == SEG_BEZLIN || t.type == SEG_BEZTRK) {
+ dd +=BezierOffsetLength(t.bezSegs,offset);
+ } else if (t.type == SEG_STRLIN || t.type == SEG_STRTRK ) {
+ dd += FindDistance(t.u.l.pos[0],t.u.l.pos[1]);
+ }
+ }
+ return dd;
+}
+
+
DIST_T BezierMinRadius(coOrd pos[4],dynArr_t segs) {
DIST_T r = 100000.0, rr;
if (segs.cnt == 0 ) return r;
@@ -934,6 +975,20 @@ DIST_T BezierMinRadius(coOrd pos[4],dynArr_t segs) {
return r;
}
+static void CreateEndAnchor(coOrd p, wBool_t lock) {
+ DIST_T d = tempD.scale*0.15;
+
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = lock?SEG_FILCRCL:SEG_CRVLIN;
+ anchors(i).color = wDrawColorBlue;
+ anchors(i).u.c.center = p;
+ anchors(i).u.c.radius = d/2;
+ anchors(i).u.c.a0 = 0.0;
+ anchors(i).u.c.a1 = 360.0;
+ anchors(i).width = 0;
+}
+
/*
* Create a Bezier Curve (Track or Line)
* Sequence is
@@ -955,7 +1010,6 @@ STATUS_T CmdBezCurve( wAction_t action, coOrd pos )
cmd = action>>8;
} else cmd = (long)commandContext;
- Da.color = lineColor;
Da.width = (double)lineWidth/mainD.dpi;
Da.trackGauge = trackGauge;
@@ -965,6 +1019,10 @@ STATUS_T CmdBezCurve( wAction_t action, coOrd pos )
case C_START:
Da.track = (cmd == bezCmdModifyTrack || cmd == bezCmdCreateTrack)?TRUE:FALSE;
+ if (Da.track )
+ Da.color = wDrawColorBlack;
+ else
+ Da.color = lineColor;
Da.state = POS_1;
Da. selectPoint = -1;
@@ -977,44 +1035,43 @@ STATUS_T CmdBezCurve( wAction_t action, coOrd pos )
DYNARR_RESET(trkSeg_t,Da.crvSegs_da);
Da.cp1Segs_da_cnt = 0;
Da.cp2Segs_da_cnt = 0;
- InfoMessage( _("Place 1st end point of Bezier + Shift -> snap to %s end"), Da.track?"Unconnected Track":"Line" );
+ InfoMessage( _("Place 1st endpoint of Bezier - snap to %s"), Da.track?"unconnected Track":"line" );
return C_CONTINUE;
case C_DOWN:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if ( Da.state == POS_1 || Da.state == POS_2) { //Set the first or third point
coOrd p = pos;
BOOL_T found = FALSE;
int end = Da.state==POS_1?0:1;
EPINX_T ep;
if (Da.track) {
- if ((MyGetKeyState() & WKEY_SHIFT) != 0) { //Snap Track
+ if ((MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL|WKEY_ALT)) == 0) { //Snap Track
if ((t = OnTrack(&p, FALSE, TRUE)) != NULL) {
ep = PickUnconnectedEndPointSilent(p, t);
if (ep != -1) {
- Da.trk[end] = t;
- Da.ep[end] = ep;
- pos = GetTrkEndPos(t, ep);
- found = TRUE;
+ if (GetTrkGauge(t) != GetScaleTrackGauge(GetLayoutCurScale())) {
+ wBeep();
+ InfoMessage(_("Track is different gauge"));
+ ep = -1;
+ t = NULL;
+ } else {
+ Da.trk[end] = t;
+ Da.ep[end] = ep;
+ pos = GetTrkEndPos(t, ep);
+ found = TRUE;
+ }
}
}
- if (!found) {
- wBeep();
- InfoMessage(_("Shift used, but no Unconnected Track End there"));
- return C_CONTINUE;
- }
}
} else { //Snap Bez Line to Lines
- if ((MyGetKeyState() & WKEY_SHIFT) != 0) {
+ if ((MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL|WKEY_ALT)) == 0) {
if ((t = OnTrack(&p,FALSE, FALSE)) != NULL) {
if (GetClosestEndPt(t,&p)) {
pos = p;
found = TRUE;
}
- } else {
- wBeep();
- InfoMessage(_("Shift used, but no Line End there"));
- return C_CONTINUE;
}
}
}
@@ -1024,37 +1081,58 @@ STATUS_T CmdBezCurve( wAction_t action, coOrd pos )
Da.pos[1] = pos;
Da.state = CONTROL_ARM_1; //Draw the first control arm
Da.selectPoint = 1;
- InfoMessage( _("Drag end of first Control Arm") );
+ InfoMessage( _("Drag end of first control arm") );
Da.cp1Segs_da_cnt = createControlArm(Da.cp1Segs_da, Da.pos[0], Da.pos[1], Da.track,TRUE,Da.trk[1]!=NULL,1,wDrawColorBlack);
- DrawBezCurve(Da.cp1Segs_da,Da.cp1Segs_da_cnt,NULL,0,NULL,0,drawColorBlack);
- } else {
+ } else {
Da.pos[3] = pos; //2nd End Point
Da.pos[2] = pos; //2nd Ctl Point
Da.state = POINT_PICKED; // Drag out the second control arm
Da.selectPoint = 2;
- InfoMessage( _("Drag end of second Control Arm") );
- DrawBezCurve(Da.cp1Segs_da,Da.cp1Segs_da_cnt,NULL,0,NULL,0,drawColorBlack); //Wipe out initial Arm
+ InfoMessage( _("Drag end of second control arm") );
Da.cp1Segs_da_cnt = createControlArm(Da.cp1Segs_da, Da.pos[0], Da.pos[1], Da.track,FALSE,Da.trk[0]!=NULL,-1,wDrawColorBlack);
Da.cp2Segs_da_cnt = createControlArm(Da.cp2Segs_da, Da.pos[3], Da.pos[2], Da.track,TRUE,Da.trk[1]!=NULL,1,wDrawColorBlack);
if (ConvertToArcs(Da.pos,&Da.crvSegs_da,Da.track,Da.color,Da.width)) Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
- DrawTempBezier(Da.track);
}
return C_CONTINUE;
} else {
return AdjustBezCurve( action&0xFF, pos, Da.track, Da.color, Da.width, InfoMessage );
}
return C_CONTINUE;
+
+ case wActionMove:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ if ( Da.state != POS_1 && Da.state != POS_2) return C_CONTINUE;
+ if (Da.track) {
+ if ((MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL|WKEY_ALT)) == 0) {
+ if ((t = OnTrack(&pos, FALSE, TRUE)) != NULL) {
+ EPINX_T ep = PickUnconnectedEndPointSilent(pos, t);
+ if (ep != -1) {
+ if (GetTrkGauge(t) == GetScaleTrackGauge(GetLayoutCurScale())) {
+ pos = GetTrkEndPos(t, ep);
+ CreateEndAnchor(pos,FALSE);
+ }
+ }
+ }
+ }
+ } else {
+ if ((MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL|WKEY_ALT)) == 0) {
+ if ((t = OnTrack(&pos,FALSE, FALSE)) != NULL) {
+ CreateEndAnchor(pos,TRUE);
+ }
+ }
+ }
+ if (anchors_da.cnt)
+ return C_CONTINUE;
case C_MOVE:
if (Da.state == POS_1) {
- InfoMessage( _("Place 1st end point of Bezier + Shift -> snap to %s end"), Da.track?"Unconnected Track":"Line" );
+ InfoMessage( _("Place 1st endpoint of Bezier - snap to %s"), Da.track?"unconnected track":"line" );
return C_CONTINUE;
}
if (Da.state == POS_2) {
- InfoMessage( _("Select other end of Bezier, +Shift -> snap to %s end"), Da.track?"Unconnected Track":"Line" );
+ InfoMessage( _("Select other end of Bezier - snap to %s end"), Da.track?"unconnected track":"line" );
}
if (Da.state == CONTROL_ARM_1 ) {
- DrawBezCurve(Da.cp1Segs_da,Da.cp1Segs_da_cnt,NULL,0,NULL,0,drawColorBlack);
if (Da.trk[0]) {
EPINX_T ep = 0;
ANGLE_T angle1,angle2;
@@ -1066,7 +1144,6 @@ STATUS_T CmdBezCurve( wAction_t action, coOrd pos )
} // Don't Snap control points
Da.pos[1] = pos;
Da.cp1Segs_da_cnt = createControlArm(Da.cp1Segs_da, Da.pos[0], Da.pos[1], Da.track, TRUE, Da.trk[0]!=NULL, 1, wDrawColorBlack);
- DrawBezCurve(Da.cp1Segs_da,Da.cp1Segs_da_cnt,NULL,0,NULL,0,drawColorBlack);
} else {
return AdjustBezCurve( action&0xFF, pos, Da.track, Da.color, Da.width, InfoMessage );
}
@@ -1074,7 +1151,6 @@ STATUS_T CmdBezCurve( wAction_t action, coOrd pos )
case C_UP:
if (Da.state == CONTROL_ARM_1) {
- DrawBezCurve(Da.cp1Segs_da,Da.cp1Segs_da_cnt,NULL,0,NULL,0,drawColorBlack);
if (Da.trk[0]) {
EPINX_T ep = Da.ep[0];
ANGLE_T angle1,angle2;
@@ -1091,9 +1167,8 @@ STATUS_T CmdBezCurve( wAction_t action, coOrd pos )
return C_CONTINUE;
}
Da.state = POS_2;
- InfoMessage( _("Select other end of Bezier, +Shift -> snap to %s end"), Da.track?"Unconnected Track":"Line" );
+ InfoMessage( _("Select other end of Bezier - snap to %s end"), Da.track?"Unconnected Track":"Line" );
Da.cp1Segs_da_cnt = createControlArm(Da.cp1Segs_da, Da.pos[0], Da.pos[1], Da.track, FALSE, Da.trk[0]!=NULL, -1, wDrawColorBlack);
- DrawBezCurve(Da.cp1Segs_da,Da.cp1Segs_da_cnt,NULL,0,NULL,0,drawColorBlack);
return C_CONTINUE;
} else {
return AdjustBezCurve( action&0xFF, pos, Da.track, Da.color, Da.width, InfoMessage );
@@ -1108,14 +1183,14 @@ STATUS_T CmdBezCurve( wAction_t action, coOrd pos )
case C_REDRAW:
if ( Da.state != NONE ) {
-
DrawBezCurve(Da.cp1Segs_da,Da.cp1Segs_da_cnt,Da.cp2Segs_da,Da.cp2Segs_da_cnt,(trkSeg_t *)Da.crvSegs_da.ptr,Da.crvSegs_da.cnt, Da.color);
}
+ if (anchors_da.cnt)
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
return C_CONTINUE;
case C_CANCEL:
if (Da.state != NONE) {
- DrawBezCurve(Da.cp1Segs_da,Da.cp1Segs_da_cnt,Da.cp2Segs_da,Da.cp2Segs_da_cnt,(trkSeg_t *)Da.crvSegs_da.ptr,Da.crvSegs_da.cnt, Da.color);
Da.cp1Segs_da_cnt = 0;
Da.cp2Segs_da_cnt = 0;
Da.crvSegs_da_cnt = 0;
@@ -1139,13 +1214,13 @@ STATUS_T CmdBezCurve( wAction_t action, coOrd pos )
}
void UpdateParms(wDrawColor color,long width) {
- DrawTempBezier(Da.track);
Da.color = lineColor;
Da.width = (double)lineWidth/mainD.dpi;
if (Da.crvSegs_da.cnt) {
ConvertToArcs(Da.pos,&Da.crvSegs_da,Da.track,Da.color,Da.width);
}
DrawTempBezier(Da.track);
+
}
diff --git a/app/bin/cbezier.h b/app/bin/cbezier.h
index 8d0dde8..49b818f 100644
--- a/app/bin/cbezier.h
+++ b/app/bin/cbezier.h
@@ -25,7 +25,7 @@
#include "utility.h"
-dynArr_t tempEndPts_da;
+extern dynArr_t tempEndPts_da;
#define BezSegs(N) DYNARR_N( trkEndPt_t, tempEndPts_da, N )
#define bezCmdNone (0)
@@ -42,12 +42,15 @@ STATUS_T CmdBezCurve( wAction_t, coOrd);
STATUS_T CmdBezModify(track_p, wAction_t, coOrd, DIST_T);
STATUS_T CreateBezier( wAction_t, coOrd, BOOL_T, wDrawColor, DIST_T, long, bezMessageProc );
-DIST_T BezierDescriptionDistance( coOrd, track_p );
+DIST_T BezierDescriptionDistance( coOrd, track_p, coOrd *, BOOL_T, BOOL_T * );
STATUS_T BezierDescriptionMove( track_p, wAction_t, coOrd );
BOOL_T GetBezierMiddle( track_p, coOrd * );
BOOL_T ConvertToArcs (coOrd[4], dynArr_t *, BOOL_T, wDrawColor, DIST_T);
track_p NewBezierTrack(coOrd[4], trkSeg_t *, int);
double BezierLength(coOrd[4], dynArr_t);
+double BezierOffsetLength(dynArr_t,double offset);
double BezierMinRadius(coOrd[4],dynArr_t);
void UpdateParms(wDrawColor color,long width);
+void addSegBezier(dynArr_t * array_p, trkSeg_p seg);
+
diff --git a/app/bin/cblock.c b/app/bin/cblock.c
index 4c4895c..b395306 100644
--- a/app/bin/cblock.c
+++ b/app/bin/cblock.c
@@ -61,6 +61,10 @@
#include "trackx.h"
#include "utility.h"
+#ifdef WINDOWS
+#include "include/utf8convert.h"
+#endif // WINDOWS
+
EXPORT TRKTYP_T T_BLOCK = -1;
static int log_block = 0;
@@ -74,8 +78,8 @@ static void NoDrawString( drawCmd_p d, coOrd p, ANGLE_T a, char * s,
wFont_p fp, FONTSIZE_T fontSize, wDrawColor color ) {}
static void NoDrawBitMap( drawCmd_p d, coOrd p, wDrawBitMap_p bm,
wDrawColor color) {}
-static void NoDrawFillPoly( drawCmd_p d, int cnt, coOrd * pts,
- wDrawColor color ) {}
+static void NoDrawFillPoly( drawCmd_p d, int cnt, coOrd * pts, int * types,
+ wDrawColor color, wDrawWidth width, int fill, int open) {}
static void NoDrawFillCircle( drawCmd_p d, coOrd p, DIST_T r,
wDrawColor color ) {}
@@ -100,6 +104,8 @@ static drawCmd_t blockD = {
static char blockName[STR_SHORT_SIZE];
static char blockScript[STR_LONG_SIZE];
static long blockElementCount;
+static track_p first_block;
+static track_p last_block;
static paramData_t blockPLs[] = {
/*0*/ { PD_STRING, blockName, "name", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)200, N_("Name"), 0, 0, sizeof( blockName )},
@@ -116,7 +122,7 @@ static track_p blockEditTrack;
static paramData_t blockEditPLs[] = {
/*0*/ { PD_STRING, blockEditName, "name", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)200, N_("Name"), 0, 0, sizeof(blockEditName)},
/*1*/ { PD_STRING, blockEditScript, "script", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)350, N_("Script"), 0, 0, sizeof(blockEditScript)},
-/*2*/ { PD_STRING, blockEditSegs, "segments", PDO_NOPREF, (void*)350, N_("Segments"), BO_READONLY },
+/*2*/ { PD_STRING, blockEditSegs, "segments", PDO_NOPREF, (void*)350, N_("Segments"), BO_READONLY },
};
static paramGroup_t blockEditPG = { "block", 0, blockEditPLs, sizeof blockEditPLs/sizeof blockEditPLs[0] };
static wWin_p blockEditW;
@@ -129,12 +135,14 @@ typedef struct btrackinfo_t {
static dynArr_t blockTrk_da;
#define blockTrk(N) DYNARR_N( btrackinfo_t , blockTrk_da, N )
+#define tracklist(N) (&(xx->trackList))[N]
typedef struct blockData_t {
char * name;
char * script;
BOOL_T IsHilite;
+ track_p next_block;
wIndex_t numTracks;
btrackinfo_t trackList;
} blockData_t, *blockData_p;
@@ -221,10 +229,11 @@ static DIST_T DistanceBlock (track_p t, coOrd * p )
DIST_T closest, current;
int iTrk = 1;
coOrd pos = *p;
- closest = GetTrkDistance ((&(xx->trackList))[0].t, &pos);
+ closest = 99999.0;
coOrd best_pos = pos;
- for (; iTrk < xx->numTracks; iTrk++) {
+ for (iTrk = 0; iTrk < xx->numTracks; iTrk++) {
pos = *p;
+ if ((&(xx->trackList))[iTrk].t == NULL) continue;
current = GetTrkDistance ((&(xx->trackList))[iTrk].t, &pos);
if (current < closest) {
closest = current;
@@ -252,22 +261,25 @@ static void DescribeBlock (track_p trk, char * str, CSIZE_T len )
*str = tolower((unsigned char)*str);
str++;
}
- sprintf( str, _("(%d): Layer=%d %s"),
+ sprintf( str, _("(%d): Layer=%u %s"),
GetTrkIndex(trk), GetTrkLayer(trk)+1, message );
blockData.name[0] = '\0';
strncat(blockData.name,xx->name,STR_SHORT_SIZE-1);
blockData.script[0] = '\0';
strncat(blockData.script,xx->script,STR_LONG_SIZE-1);
blockData.length = 0;
- if (xx->numTracks > 0) {
- blockData.endPt[0] = GetTrkEndPos((&(xx->trackList))[0].t,0);
- }
+ BOOL_T first = TRUE;
for (tcount = 0; tcount < xx->numTracks; tcount++) {
- if ((&(xx->trackList))[tcount].t == NULL) continue;
- blockData.length += GetTrkLength((&(xx->trackList))[tcount].t,0,1);
- lastTrk = (&(xx->trackList))[tcount].t;
+ if ((&(xx->trackList))[tcount].t == NULL) continue;
+ if (first) {
+ blockData.endPt[0] = GetTrkEndPos((&(xx->trackList))[tcount].t,0);
+ first = FALSE;
+ }
+ blockData.endPt[1] = GetTrkEndPos((&(xx->trackList))[tcount].t,1);
+ blockData.length += GetTrkLength((&(xx->trackList))[tcount].t,0,1);
+ tcount++;
+ break;
}
- if (lastTrk != NULL) blockData.endPt[1] = GetTrkEndPos(lastTrk,1);
blockDesc[E0].mode =
blockDesc[E1].mode =
blockDesc[LN].mode = DESC_RO;
@@ -347,13 +359,31 @@ static BOOL_T blockCheckContigiousPath()
static void DeleteBlock ( track_p t )
{
- LOG( log_block, 1, ("*** DeleteBlock(%p)\n",t))
- blockData_p xx = GetblockData(t);
- LOG( log_block, 1, ("*** DeleteBlock(): index is %d\n",GetTrkIndex(t)))
- LOG( log_block, 1, ("*** DeleteBlock(): xx = %p, xx->name = %p, xx->script = %p\n",
+ track_p trk1;
+ blockData_p xx1;
+
+ LOG( log_block, 1, ("*** DeleteBlock(%p)\n",t))
+ blockData_p xx = GetblockData(t);
+ LOG( log_block, 1, ("*** DeleteBlock(): index is %d\n",GetTrkIndex(t)))
+ LOG( log_block, 1, ("*** DeleteBlock(): xx = %p, xx->name = %p, xx->script = %p\n",
xx,xx->name,xx->script))
MyFree(xx->name); xx->name = NULL;
MyFree(xx->script); xx->script = NULL;
+
+ if (first_block == t)
+ first_block = xx->next_block;
+ trk1 = first_block;
+ while(trk1) {
+ xx1 = GetblockData (trk1);
+ if (xx1->next_block == t) {
+ xx1->next_block = xx->next_block;
+ break;
+ }
+ trk1 = xx1->next_block;
+ }
+ if (t == last_block)
+ last_block = trk1;
+
}
static BOOL_T WriteBlock ( track_p t, FILE * f )
@@ -361,25 +391,31 @@ static BOOL_T WriteBlock ( track_p t, FILE * f )
BOOL_T rc = TRUE;
wIndex_t iTrack;
blockData_p xx = GetblockData(t);
+ char *blockName = MyStrdup(xx->name);
+
+#ifdef WINDOWS
+ blockName = Convert2UTF8(blockName);
+#endif // WINDOWS
rc &= fprintf(f, "BLOCK %d \"%s\" \"%s\"\n",
- GetTrkIndex(t), xx->name, xx->script)>0;
+ GetTrkIndex(t), blockName, xx->script)>0;
for (iTrack = 0; iTrack < xx->numTracks && rc; iTrack++) {
if ((&(xx->trackList))[iTrack].t == NULL) continue;
rc &= fprintf(f, "\tTRK %d\n",
GetTrkIndex((&(xx->trackList))[iTrack].t))>0;
}
- rc &= fprintf( f, "\tEND\n" )>0;
+ rc &= fprintf( f, "\t%s\n", END_BLOCK )>0;
+ MyFree(blockName);
return rc;
}
-static void ReadBlock ( char * line )
+static BOOL_T ReadBlock ( char * line )
{
TRKINX_T trkindex;
wIndex_t index;
- track_p trk;
+ track_p trk, trk1;
char * cp = NULL;
- blockData_p xx;
+ blockData_p xx,xx1;
wIndex_t iTrack;
EPINX_T ep;
trkEndPt_p endPtP;
@@ -387,19 +423,24 @@ static void ReadBlock ( char * line )
LOG( log_block, 1, ("*** ReadBlock: line is '%s'\n",line))
if (!GetArgs(line+6,"dqq",&index,&name,&script)) {
- return;
+ return FALSE;
}
+
+#ifdef WINDOWS
+ ConvertUTF8ToSystem(name);
+#endif // WINDOWS
+
DYNARR_RESET( btrackinfo_p , blockTrk_da );
while ( (cp = GetNextLine()) != NULL ) {
- while (isspace((unsigned char)*cp)) cp++;
- if ( strncmp( cp, "END", 3 ) == 0 ) {
+ if ( IsEND( END_BLOCK ) ) {
break;
}
+ while (isspace((unsigned char)*cp)) cp++;
if ( *cp == '\n' || *cp == '#' ) {
continue;
}
if ( strncmp( cp, "TRK", 3 ) == 0 ) {
- if (!GetArgs(cp+4,"d",&trkindex)) return;
+ if (!GetArgs(cp+4,"d",&trkindex)) return FALSE;
/*trk = FindTrack(trkindex);*/
DYNARR_APPEND( btrackinfo_p *, blockTrk_da, 10 );
blockTrk(blockTrk_da.cnt-1).i = trkindex;
@@ -411,18 +452,28 @@ static void ReadBlock ( char * line )
endPtP = &tempEndPts(ep);
SetTrkEndPoint( trk, ep, endPtP->pos, endPtP->angle );
}
- xx = GetblockData( trk );
- LOG( log_block, 1, ("*** ReadBlock(): trk = %p (%d), xx = %p\n",trk,GetTrkIndex(trk),xx))
- LOG( log_block, 1, ("*** ReadBlock(): name = %p, script = %p\n",name,script))
- xx->name = name;
- xx->script = script;
- xx->IsHilite = FALSE;
+ xx = GetblockData( trk );
+ LOG( log_block, 1, ("*** ReadBlock(): trk = %p (%d), xx = %p\n",trk,GetTrkIndex(trk),xx))
+ LOG( log_block, 1, ("*** ReadBlock(): name = %p, script = %p\n",name,script))
+ xx->name = name;
+ xx->script = script;
+ xx->IsHilite = FALSE;
xx->numTracks = blockTrk_da.cnt;
+ trk1 = last_block;
+ if (!trk1) first_block = trk;
+ else {
+ xx1 = GetblockData(trk1);
+ xx1->next_block = trk;
+ }
+ xx->next_block = NULL;
+ last_block = trk;
for (iTrack = 0; iTrack < blockTrk_da.cnt; iTrack++) {
- LOG( log_block, 1, ("*** ReadBlock(): copying track T%d\n",GetTrkIndex(blockTrk(iTrack).t)))
- memcpy((void*)&((&(xx->trackList))[iTrack]),(void*)&(blockTrk(iTrack)),sizeof(btrackinfo_t));
+ LOG( log_block, 1, ("*** ReadBlock(): copying track T%d\n",blockTrk(iTrack).i))
+ tracklist(iTrack).i = blockTrk(iTrack).i;
+ tracklist(iTrack).t = NULL; // Not resolved yet!! //
}
blockDebug(trk);
+ return TRUE;
}
EXPORT void ResolveBlockTrack ( track_p trk )
@@ -435,12 +486,12 @@ EXPORT void ResolveBlockTrack ( track_p trk )
LOG( log_block, 1, ("*** ResolveBlockTrack(%d)\n",GetTrkIndex(trk)))
xx = GetblockData(trk);
for (iTrack = 0; iTrack < xx->numTracks; iTrack++) {
- t_trk = FindTrack((&(xx->trackList))[iTrack].i);
+ t_trk = FindTrack(tracklist(iTrack).i);
if (t_trk == NULL) {
- NoticeMessage( _("resolveBlockTrack: T%d[%d]: T%d doesn't exist"), _("Continue"), NULL, GetTrkIndex(trk), iTrack, (&(xx->trackList))[iTrack].i );
+ NoticeMessage( _("resolveBlockTrack: T%d[%d]: T%d doesn't exist"), _("Continue"), NULL, GetTrkIndex(trk), iTrack, tracklist(iTrack).i,t_trk );
}
- (&(xx->trackList))[iTrack].t = t_trk;
- LOG( log_block, 1, ("*** ResolveBlockTrack(): %d (%d): %p\n",iTrack,(&(xx->trackList))[iTrack].i,t_trk))
+ tracklist(iTrack).t = t_trk;
+ LOG( log_block, 1, ("*** ResolveBlockTrack(): %d (%d): %p\n",iTrack,tracklist(iTrack).i,t_trk))
}
}
@@ -494,17 +545,24 @@ static BOOL_T TrackInBlock (track_p trk, track_p blk) {
static track_p FindBlock (track_p trk) {
track_p a_trk;
- for (a_trk = NULL; TrackIterate( &a_trk ) ;) {
- if (GetTrkType(a_trk) == T_BLOCK &&
- TrackInBlock(trk,a_trk)) return a_trk;
+ blockData_p xx;
+ if (!first_block) return NULL;
+ a_trk = first_block;
+ while (a_trk) {
+ if (!IsTrackDeleted(a_trk)) {
+ if (GetTrkType(a_trk) == T_BLOCK &&
+ TrackInBlock(trk,a_trk)) return a_trk;
+ }
+ xx = GetblockData(a_trk);
+ a_trk = xx->next_block;
}
return NULL;
}
static void BlockOk ( void * junk )
{
- blockData_p xx;
- track_p trk;
+ blockData_p xx,xx1;
+ track_p trk,trk1;
wIndex_t iTrack;
EPINX_T ep;
trkEndPt_p endPtP;
@@ -525,10 +583,11 @@ static void BlockOk ( void * junk )
while ( TrackIterate( &trk ) ) {
if ( GetTrkSelected( trk ) ) {
if ( IsTrack(trk) ) {
- DYNARR_APPEND( btrackinfo_p *, blockTrk_da, 10 );
+ DYNARR_APPEND( btrackinfo_t, blockTrk_da, 10 );
+ blockTrk(blockTrk_da.cnt - 1).t = trk;
+ blockTrk(blockTrk_da.cnt - 1).i = GetTrkIndex(trk);
LOG( log_block, 1, ("*** BlockOk(): adding track T%d\n",GetTrkIndex(trk)))
- blockTrk(blockTrk_da.cnt-1).t = trk;
- blockTrk(blockTrk_da.cnt-1).i = GetTrkIndex(trk);
+
}
}
}
@@ -556,15 +615,26 @@ static void BlockOk ( void * junk )
SetTrkEndPoint( trk, ep, endPtP->pos, endPtP->angle );
}
- xx = GetblockData( trk );
- LOG(log_block, 1, ("*** BlockOk(): trk = %p (%d), xx = %p\n", trk, GetTrkIndex(trk), xx))
+ xx = GetblockData( trk );
+ LOG(log_block, 1, ("*** BlockOk(): trk = %p (%d), xx = %p\n", trk, GetTrkIndex(trk), xx))
xx->name = MyStrdup(blockName);
xx->script = MyStrdup(blockScript);
- xx->IsHilite = FALSE;
+ xx->IsHilite = FALSE;
xx->numTracks = blockTrk_da.cnt;
+ trk1 = last_block;
+ if (!trk1) {
+ first_block = trk;
+ }
+ else {
+ xx1 = GetblockData(trk1);
+ xx1->next_block = trk;
+ }
+ xx->next_block = NULL;
+ last_block = trk;
for (iTrack = 0; iTrack < blockTrk_da.cnt; iTrack++) {
- LOG( log_block, 1, ("*** BlockOk(): copying track T%d\n",GetTrkIndex(blockTrk(iTrack).t)))
- memcpy((void*)&(&(xx->trackList))[iTrack],(void*)&blockTrk(iTrack),sizeof(btrackinfo_t));
+ LOG( log_block, 1, ("*** BlockOk(): copying track T%d\n",tracklist(iTrack).i))
+ tracklist(iTrack).i = blockTrk(iTrack).i;
+ tracklist(iTrack).t = blockTrk(iTrack).t;
}
blockDebug(trk);
UndoEnd();
@@ -710,13 +780,17 @@ static STATUS_T CmdBlock (wAction_t action, coOrd pos )
}
#endif
-EXPORT void CheckDeleteBlock (track_p t)
+void CheckDeleteBlock(track_p t)
{
track_p blk;
blockData_p xx;
-
+ if (!IsTrack(t)) {
+ return;
+ }
blk = FindBlock(t);
- if (blk == NULL) return;
+ if (blk == NULL) {
+ return;
+ }
xx = GetblockData(blk);
NoticeMessage(_("Deleting block %s"),_("Ok"),NULL,xx->name);
DeleteTrack(blk,FALSE);
@@ -789,7 +863,7 @@ static void DrawBlockTrackHilite( void )
w = (wPos_t)((blkhiliteSize.x/mainD.scale)*mainD.dpi+0.5);
h = (wPos_t)((blkhiliteSize.y/mainD.scale)*mainD.dpi+0.5);
mainD.CoOrd2Pix(&mainD,blkhiliteOrig,&x,&y);
- wDrawFilledRectangle( mainD.d, x, y, w, h, blkhiliteColor, wDrawOptTemp );
+ wDrawFilledRectangle( mainD.d, x, y, w, h, blkhiliteColor, wDrawOptTemp|wDrawOptTransparent );
}
diff --git a/app/bin/ccontrol.c b/app/bin/ccontrol.c
index fb02fdf..793acc3 100644
--- a/app/bin/ccontrol.c
+++ b/app/bin/ccontrol.c
@@ -58,6 +58,9 @@ static const char rcsid[] = "@(#) : $Id$";
#include "param.h"
#include "track.h"
#include "trackx.h"
+#ifdef WINDOWS
+#include "include/utf8convert.h"
+#endif // WINDOWS
#include "utility.h"
#include "messages.h"
@@ -276,7 +279,7 @@ static void DescribeControl (track_p trk, char * str, CSIZE_T len )
*str = tolower((unsigned char)*str);
str++;
}
- sprintf( str, _("(%d [%s]): Layer=%d, at %0.3f,%0.3f"),
+ sprintf( str, _("(%d [%s]): Layer=%u, at %0.3f,%0.3f"),
GetTrkIndex(trk),
xx->name,GetTrkLayer(trk)+1, xx->orig.x, xx->orig.y);
strncpy(controlProperties.name,xx->name,STR_SHORT_SIZE-1);
@@ -305,14 +308,22 @@ static BOOL_T WriteControl ( track_p t, FILE * f )
{
BOOL_T rc = TRUE;
controlData_p xx = GetcontrolData(t);
- rc &= fprintf(f, "CONTROL %d %d %s %d %0.6f %0.6f \"%s\" \"%s\" \"%s\"\n",
+ char *controlName = MyStrdup(xx->name);
+
+#ifdef WINDOWS
+ controlName = Convert2UTF8(controlName);
+#endif // WINDOWS
+
+ rc &= fprintf(f, "CONTROL %d %u %s %d %0.6f %0.6f \"%s\" \"%s\" \"%s\"\n",
GetTrkIndex(t), GetTrkLayer(t), GetTrkScaleName(t),
- GetTrkVisible(t), xx->orig.x, xx->orig.y, xx->name,
+ GetTrkVisible(t), xx->orig.x, xx->orig.y, controlName,
xx->onscript, xx->offscript)>0;
+
+ MyFree(controlName);
return rc;
}
-static void ReadControl ( char * line )
+static BOOL_T ReadControl ( char * line )
{
wIndex_t index;
/*TRKINX_T trkindex;*/
@@ -326,8 +337,13 @@ static void ReadControl ( char * line )
wIndex_t layer;
controlData_p xx;
if (!GetArgs(line+7,"dLsdpqqq",&index,&layer,scale, &visible, &orig,&name,&onscript,&offscript)) {
- return;
+ return FALSE;
}
+
+#ifdef WINDOWS
+ ConvertUTF8ToSystem(name);
+#endif // WINDOWS
+
trk = NewTrack(index, T_CONTROL, 0, sizeof(controlData_t));
SetTrkVisible(trk, visible);
SetTrkScale(trk, LookupScale( scale ));
@@ -338,6 +354,7 @@ static void ReadControl ( char * line )
xx->onscript = onscript;
xx->offscript = offscript;
ComputeControlBoundingBox(trk);
+ return TRUE;
}
static void MoveControl (track_p trk, coOrd orig )
@@ -502,24 +519,29 @@ static void CreateNewControl (coOrd orig)
static STATUS_T CmdControl ( wAction_t action, coOrd pos )
{
-
+ static coOrd control_pos;
+ static BOOL_T create;
switch (action) {
case C_START:
InfoMessage(_("Place control"));
+ create = FALSE;
return C_CONTINUE;
case C_DOWN:
+ create = TRUE;
+ /* no break */
case C_MOVE:
SnapPos(&pos);
- DDrawControl( &tempD, pos, GetScaleRatio(GetLayoutCurScale()), wDrawColorBlack );
+ control_pos = pos;
return C_CONTINUE;
case C_UP:
SnapPos(&pos);
- DDrawControl( &tempD, pos, GetScaleRatio(GetLayoutCurScale()), wDrawColorBlack );
CreateNewControl(pos);
return C_TERMINATE;
case C_REDRAW:
+ if (create)
+ DDrawControl( &tempD, control_pos, GetScaleRatio(GetLayoutCurScale()), wDrawColorBlack );
+ return C_CONTINUE;
case C_CANCEL:
- DDrawControl( &tempD, pos, GetScaleRatio(GetLayoutCurScale()), wDrawColorBlack );
return C_CONTINUE;
default:
return C_CONTINUE;
@@ -537,7 +559,7 @@ static void DrawControlTrackHilite( void )
w = (wPos_t)((ctlhiliteSize.x/mainD.scale)*mainD.dpi+0.5);
h = (wPos_t)((ctlhiliteSize.y/mainD.scale)*mainD.dpi+0.5);
mainD.CoOrd2Pix(&mainD,ctlhiliteOrig,&x,&y);
- wDrawFilledRectangle( mainD.d, x, y, w, h, ctlhiliteColor, wDrawOptTemp );
+ wDrawFilledRectangle( mainD.d, x, y, w, h, ctlhiliteColor, wDrawOptTemp|wDrawOptTransparent );
}
static int ControlMgmProc ( int cmd, void * data )
diff --git a/app/bin/ccornu.c b/app/bin/ccornu.c
index 9bdb0d0..fd51755 100644
--- a/app/bin/ccornu.c
+++ b/app/bin/ccornu.c
@@ -1,3 +1,7 @@
+
+
+
+
/** \file ccornu.c
* Cornu Command. Draw or modify a Cornu Easement Track.
*/
@@ -71,6 +75,7 @@
#include "ccurve.h"
#include "ccornu.h"
#include "tcornu.h"
+#include "tbezier.h"
#include "cstraigh.h"
#include "drawgeom.h"
#include "cjoin.h"
@@ -83,12 +88,24 @@
#include "cundo.h"
#include "messages.h"
#include "cselect.h"
+#include "fileio.h"
+
+#include <stdint.h>
extern drawCmd_t tempD;
extern TRKTYP_T T_BEZIER;
extern TRKTYP_T T_CORNU;
-
+typedef struct {
+ coOrd end_center;
+ coOrd end_curve;
+ DIST_T mid_disp;
+ BOOL_T end_valid;
+ BOOL_T angle_selected;
+ BOOL_T radius_selected;
+ BOOL_T last_selected;
+ ANGLE_T arc_angle;
+} endHandle;
/*
* STATE INFO
@@ -101,11 +118,18 @@ enum Cornu_States { NONE,
POINT_PICKED,
TRACK_SELECTED };
+typedef enum {CORNU_MODIFY, CORNU_CREATE} cornuCmdType_e;
+
+
static struct {
enum Cornu_States state;
coOrd pos[2];
- int selectPoint;
- wDrawColor color;
+ int number_of_points;
+ int selectEndPoint;
+ int selectMidPoint;
+ int selectEndHandle;
+ int prevSelected;
+ int prevEndPoint;
DIST_T width;
track_p trk[2];
EPINX_T ep[2];
@@ -119,9 +143,9 @@ static struct {
BOOL_T extend[2];
trkSeg_t extendSeg[2];
- trkSeg_t ep1Segs[2];
+ trkSeg_t ep1Segs[11];
int ep1Segs_da_cnt;
- trkSeg_t ep2Segs[2];
+ trkSeg_t ep2Segs[11];
int ep2Segs_da_cnt;
dynArr_t crvSegs_da;
int crvSegs_da_cnt;
@@ -132,9 +156,143 @@ static struct {
BOOL_T circleorHelix[2];
DIST_T trackGauge;
+ int cmdType;
+
+ dynArr_t midSegs;
+
+ dynArr_t mid_points;
+ dynArr_t tracks;
+ BOOL_T ends[2];
+
+ endHandle endHandle[2];
+
bezctx * bezc;
+
+ cornuCmdType_e commandType;
+
} Da;
+static trkSeg_p curCornu;
+static wIndex_t cornuHotBarCmdInx;
+
+static struct {
+ trkSeg_t st;
+ trkSeg_t back;
+ trkSeg_t txt;
+ int count;
+} hotB;
+
+
+static char * CmdCornuHotBarProc(
+ hotBarProc_e op,
+ void * data,
+ drawCmd_p d,
+ coOrd * origP )
+{
+ trkSeg_p trkseg = &hotB.st;
+ switch ( op ) {
+ case HB_SELECT:
+ CmdCornu( C_CANCEL, zero );
+ curCornu = trkseg;
+ DoCommandB( (void*)(intptr_t)cornuHotBarCmdInx );
+ return NULL;
+ case HB_LISTTITLE:
+ sprintf(message,_("%s FlexTrack"),GetScaleName(GetLayoutCurScale()));
+ return message;
+ case HB_BARTITLE:
+ sprintf(message,_("%s FlexTrack"),GetScaleName(GetLayoutCurScale()));
+ return message;
+ case HB_FULLTITLE:
+ sprintf(message,_("%s FlexTrack"),GetScaleName(GetLayoutCurScale()));
+ return message;
+ case HB_DRAW:
+ DrawSegs( d, *origP, 0.0, trkseg, hotB.count, trackGauge, wDrawColorBlack );
+ return NULL;
+ }
+ return NULL;
+}
+
+static pts_t pts[4];
+
+
+EXPORT void AddHotBarCornu( void )
+{
+ hotB.st.type = SEG_STRTRK;
+ hotB.st.color = wDrawColorBlack;
+ hotB.st.u.l.pos[0] = zero;
+ DIST_T ratio = 75.0/curScaleRatio;
+ Translate(&hotB.st.u.l.pos[1],zero,45.0,15.0*ratio);
+ hotB.st.u.l.angle = 45.0;
+
+ pts[0].pt_type = wPolyLineStraight;
+ pts[0].pt.x = 1.0*ratio;
+ pts[0].pt.y = 5.0*ratio;
+ pts[1].pt_type = wPolyLineStraight;
+ pts[1].pt.x = 1.0*ratio;
+ pts[1].pt.y = 8.0*ratio;
+ pts[2].pt_type = wPolyLineStraight;
+ pts[2].pt.x = 13.0*ratio;
+ pts[2].pt.y = 8.0*ratio;
+ pts[3].pt_type = wPolyLineStraight;
+ pts[3].pt.x = 13.0*ratio;
+ pts[3].pt.y = 5.0*ratio;
+
+ hotB.back.type = SEG_FILPOLY;
+ hotB.back.color = wDrawColorWhite;
+ hotB.back.u.p.orig.x = 0.0;
+ hotB.back.u.p.orig.y = 0.0;
+ hotB.back.u.p.cnt = 4;
+ hotB.back.u.p.angle = 0.0;
+ hotB.back.u.p.polyType = RECTANGLE;
+ hotB.back.u.p.pts = &pts[0];
+
+ hotB.txt.type = SEG_TEXT;
+ hotB.txt.color = wDrawColorBlack;
+ hotB.txt.u.t.pos.x = 1.0*ratio;
+ hotB.txt.u.t.pos.y = 5.0*ratio;
+ hotB.txt.u.t.boxed = TRUE;
+ hotB.txt.u.t.string = MyStrdup(_(" FLEX "));
+ hotB.txt.u.t.fontP = NULL;
+ hotB.txt.u.t.fontSize = 160.0*ratio;
+ hotB.txt.u.t.angle = 0.0;
+
+ char * label = MyMalloc(256);
+ sprintf(label,_("%s FlexTrack"),GetScaleName(GetLayoutCurScale()));
+ coOrd end;
+ end = hotB.st.u.l.pos[1];
+ //end.x = 21.25;
+ //end.y = 21.25;
+ hotB.count = 3;
+ //hotB.st.u.l.pos[1] = end;
+ AddHotBarElement( label, end, zero, TRUE, TRUE, curBarScale>0?curBarScale:-1, &hotB, CmdCornuHotBarProc );
+}
+
+int createMidPoint(dynArr_t * ap,
+ coOrd pos0, //end on curve
+ BOOL_T point_selected,
+ BOOL_T point_selectable,
+ BOOL_T track_modifyable
+ )
+{
+ DIST_T d, w;
+ d = tempD.scale*0.25;
+ w = tempD.scale/tempD.dpi; /*double width*/
+
+ DYNARR_APPEND(trkSeg_t,*ap,1);
+
+ trkSeg_p sp = &DYNARR_LAST(trkSeg_t,*ap);
+
+ sp->u.c.center = pos0;
+ sp->u.c.a0 = 0.0;
+ sp->u.c.a1 = 360.0;
+ sp->u.c.radius = d/2;
+ sp->type = point_selected?SEG_FILCRCL:SEG_CRVLIN;
+ sp->width = w;
+ sp->color = drawColorBlack;
+
+ return 1;
+
+}
/**
@@ -146,35 +304,208 @@ int createEndPoint(
coOrd pos0, //end on curve
BOOL_T point_selected,
BOOL_T point_selectable,
- BOOL_T track_modifyable
+ BOOL_T track_modifyable,
+ BOOL_T track_present,
+ ANGLE_T angle,
+ DIST_T radius,
+ coOrd centert,
+ endHandle * endHandle
)
{
DIST_T d, w;
+ int num =0;
d = tempD.scale*0.25;
w = tempD.scale/tempD.dpi; /*double width*/
+ num = 1;
+ if (point_selectable) {
+ sp[1].u.c.center = pos0;
+ sp[1].u.c.a0 = 0.0;
+ sp[1].u.c.a1 = 360.0;
+ sp[1].u.c.radius = d/2;
+ sp[1].type = SEG_CRVLIN;
+ sp[1].width = w;
+ sp[1].color = point_selected?drawColorBlue:drawColorRed;
+ num = 2;
+ }
sp[0].u.c.center = pos0;
sp[0].u.c.a0 = 0.0;
sp[0].u.c.a1 = 360.0;
sp[0].width = w;
sp[0].u.c.radius = d/4;
- sp[0].color = (point_selected>=0)?drawColorRed:drawColorBlack;
+ sp[0].color = point_selected?drawColorBlue:drawColorRed;
if (track_modifyable)
sp[0].type = SEG_CRVLIN;
else
sp[0].type = SEG_FILCRCL;
- if (point_selectable) {
- sp[1].u.c.center = pos0;
- sp[1].u.c.a0 = 0.0;
- sp[1].u.c.a1 = 360.0;
- sp[1].u.c.radius = d/2;
- sp[1].type = SEG_CRVLIN;
- sp[1].width = w;
- sp[1].color = drawColorRed;
- return 2;
+ if (!track_present && endHandle ) {
+ endHandle->end_center = zero;
+ endHandle->end_curve = zero;
+ endHandle->end_valid = TRUE;
+ endHandle->mid_disp = 0.0;
+ DIST_T end_length = 20*trackGauge;
+ Translate(&endHandle->end_curve,pos0,angle,end_length);
+ Translate(&endHandle->end_center,pos0,angle,end_length/2);
+ if (radius>0.0) {
+ ANGLE_T a1 = R2D(end_length/radius);
+ if (DifferenceBetweenAngles(angle,FindAngle(centert,pos0))>0.0) {
+ a1 = -a1;
+ }
+ PointOnCircle( &endHandle->end_curve, centert,radius,NormalizeAngle(FindAngle(centert,pos0)+a1));
+ PointOnCircle( &endHandle->end_center,centert,radius,NormalizeAngle(FindAngle(centert,pos0)+(a1/2.0)));
+ coOrd cm;
+ cm = endHandle->end_center;
+ ANGLE_T a = FindAngle(endHandle->end_curve,pos0);
+ Rotate(&cm,endHandle->end_curve,-a );
+ endHandle->mid_disp = cm.x-endHandle->end_curve.x;
+ curveData_t curveData;
+ PlotCurve(crvCmdFromCenter,pos0,endHandle->end_center, endHandle->end_curve, &curveData, FALSE);
+ if (curveData.type == curveTypeStraight) {
+ coOrd pos_line[2];
+ Translate(&pos_line[0],pos0,FindAngle(pos0,endHandle->end_curve)+90,trackGauge/2);
+ Translate(&pos_line[1],endHandle->end_curve,FindAngle(pos0,endHandle->end_curve)+90,trackGauge/2);
+ sp[num].type = SEG_STRLIN;
+ sp[num].width = w;
+ sp[num].u.l.pos[0] = pos_line[0];
+ sp[num].u.l.pos[1] = pos_line[1];
+ sp[num].color = (endHandle->last_selected||endHandle->radius_selected)?drawColorBlue:drawColorRed;
+ num++;
+ Translate(&pos_line[0],pos0,FindAngle(pos0,endHandle->end_curve)-90,trackGauge/2);
+ Translate(&pos_line[1],endHandle->end_curve,FindAngle(pos0,endHandle->end_curve)-90,trackGauge/2);
+ sp[num].type = SEG_STRLIN;
+ sp[num].width = w;
+ sp[num].u.l.pos[0] = pos_line[0];
+ sp[num].u.l.pos[1] = pos_line[1];
+ sp[num].color = (endHandle->last_selected||endHandle->radius_selected)?drawColorBlue:drawColorRed;
+ num++;
+ pos_line[0]= pos0;
+ Translate(&pos_line[1],pos0,-FindAngle(pos0,endHandle->end_curve),end_length);
+ sp[num].type = SEG_STRLIN;
+ sp[num].width = w;
+ sp[num].u.l.pos[0] = pos_line[0];
+ sp[num].u.l.pos[1] = pos_line[1];
+ sp[num].color = drawColorRed;
+ num++;
+ } else {
+ DIST_T pos_rad;
+ pos_rad = radius+trackGauge/2;
+ sp[num].type = SEG_CRVLIN;
+ sp[num].width = w;
+ sp[num].u.c.center = centert;
+ sp[num].u.c.radius = pos_rad;
+ ANGLE_T an0 = FindAngle(centert,pos0);
+ ANGLE_T an1 = FindAngle(centert,endHandle->end_curve);
+ if (DifferenceBetweenAngles(an0,an1)>0) {
+ sp[num].u.c.a1 = DifferenceBetweenAngles(an0,an1);
+ sp[num].u.c.a0 = an0;
+ } else {
+ sp[num].u.c.a1 = -DifferenceBetweenAngles(an0,an1);
+ sp[num].u.c.a0 = an1;
+ }
+ endHandle->arc_angle = sp[num].u.c.a1;
+ sp[num].color = (endHandle->last_selected||endHandle->radius_selected)?drawColorBlue:drawColorRed;
+ num++;
+ pos_rad = radius-trackGauge/2;
+ sp[num].type = SEG_CRVLIN;
+ sp[num].width = w;
+ sp[num].u.c.center = centert;
+ sp[num].u.c.radius = pos_rad;
+ sp[num].u.c.a1 = sp[num-1].u.c.a1;
+ sp[num].u.c.a0 = sp[num-1].u.c.a0;
+ sp[num].color = (endHandle->last_selected||endHandle->radius_selected)?drawColorBlue:drawColorRed;
+ num++;
+ }
+ } else {
+ coOrd pos_line[2];
+ Translate(&pos_line[0],pos0,FindAngle(pos0,endHandle->end_curve)+90,trackGauge/2);
+ Translate(&pos_line[1],endHandle->end_curve,FindAngle(pos0,endHandle->end_curve)+90,trackGauge/2);
+ sp[num].type = SEG_STRLIN;
+ sp[num].width = w;
+ sp[num].u.l.pos[0] = pos_line[0];
+ sp[num].u.l.pos[1] = pos_line[1];
+ sp[num].color = (endHandle->last_selected||endHandle->radius_selected)?drawColorBlue:drawColorRed;
+ num++;
+ Translate(&pos_line[0],pos0,FindAngle(pos0,endHandle->end_curve)-90,trackGauge/2);
+ Translate(&pos_line[1],endHandle->end_curve,FindAngle(pos0,endHandle->end_curve)-90,trackGauge/2);
+ sp[num].type = SEG_STRLIN;
+ sp[num].width = w;
+ sp[num].u.l.pos[0] = pos_line[0];
+ sp[num].u.l.pos[1] = pos_line[1];
+ sp[num].color = (endHandle->last_selected||endHandle->radius_selected)?drawColorBlue:drawColorRed;
+ num++;
+
+ }
+ coOrd pos_line[2];
+ pos_line[0]= pos0;
+ Translate(&pos_line[1],pos0,angle+180,end_length);
+ sp[num].type = SEG_STRLIN;
+ sp[num].width = w;
+ sp[num].u.l.pos[0] = pos_line[0];
+ sp[num].u.l.pos[1] = pos_line[1];
+ sp[num].color = drawColorRed;
+ num++;
+ sp[num].type = SEG_CRVLIN;
+ sp[num].u.c.center = endHandle->end_curve;
+ sp[num].u.c.a0 = 0.0;
+ sp[num].u.c.a1 = 360.0;
+ sp[num].width = w;
+ sp[num].u.c.radius = d/4;
+ sp[num].color = endHandle->angle_selected?drawColorBlue:drawColorRed;
+ num++;
+ if (radius<=0.0)
+ DrawArrowHeads(&sp[num],endHandle->end_center,angle+90.0,TRUE,endHandle->radius_selected?drawColorBlue:drawColorRed);
+ else
+ DrawArrowHeads(&sp[num],endHandle->end_center,FindAngle(centert,endHandle->end_center),TRUE,endHandle->radius_selected?drawColorBlue:drawColorRed);
+ num=num+5;
+ } else if (endHandle) {
+ endHandle->end_valid=FALSE;
}
- return 1;
+ return num;
+}
+
+static dynArr_t anchors_da;
+#define anchors(N) DYNARR_N(trkSeg_t,anchors_da,N)
+
+static void CreateCornuEndAnchor(coOrd p, wBool_t lock) {
+ DIST_T d = tempD.scale*0.15;
+
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = lock?SEG_FILCRCL:SEG_CRVLIN;
+ anchors(i).color = wDrawColorBlue;
+ anchors(i).u.c.center = p;
+ anchors(i).u.c.radius = d/2;
+ anchors(i).u.c.a0 = 0.0;
+ anchors(i).u.c.a1 = 360.0;
+ anchors(i).width = 0;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ i = anchors_da.cnt-1;
+ anchors(i).type = SEG_CRVLIN;
+ anchors(i).color = wDrawColorBlue;
+ anchors(i).u.c.center = p;
+ anchors(i).u.c.radius = d;
+ anchors(i).u.c.a0 = 0.0;
+ anchors(i).u.c.a1 = 360.0;
+ anchors(i).width = 0;
+
+}
+
+static void CreateCornuExtendAnchor(coOrd p, ANGLE_T a, wBool_t selected) {
+ DYNARR_SET(trkSeg_t,anchors_da,anchors_da.cnt+5);
+ DrawArrowHeads(&DYNARR_N(trkSeg_t,anchors_da,anchors_da.cnt-5),p,a,FALSE,wDrawColorBlue);
}
+static void CreateCornuAnchor(coOrd p, wBool_t open) {
+ DIST_T d = tempD.scale*0.15;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = open?SEG_CRVLIN:SEG_FILCRCL;
+ anchors(i).color = wDrawColorBlue;
+ anchors(i).u.c.center = p;
+ anchors(i).u.c.radius = d/2;
+ anchors(i).u.c.a0 = 0.0;
+ anchors(i).u.c.a1 = 360.0;
+ anchors(i).width = 0;
+}
/*
* Add element to DYNARR pointed to by caller from segment handed in
@@ -182,7 +513,6 @@ int createEndPoint(
void addSegCornu(dynArr_t * const array_p, trkSeg_p seg) {
trkSeg_p s;
-
DYNARR_APPEND(trkSeg_t, * array_p, 10); //Adds 1 to cnt
s = &DYNARR_N(trkSeg_t,* array_p,array_p->cnt-1);
s->type = seg->type;
@@ -206,20 +536,105 @@ void addSegCornu(dynArr_t * const array_p, trkSeg_p seg) {
s->u = seg->u;
}
}
-EXPORT void SetKnots(spiro_cp knots[6], coOrd posk[6]) {
- for (int i = 0; i < 6; i++) {
+EXPORT void SetKnots(spiro_cp knots[], coOrd posk[], char type[], int count) {
+ for (int i = 0; i < count; i++) {
knots[i].x = posk[i].x;
knots[i].y = posk[i].y;
+ knots[i].ty = type[i];
+ }
+}
+
+typedef struct {
+ coOrd pos;
+ char ty;
+} points_t;
+
+// Take in extra points within Cornu
+// G2 (position only k1'' = k2'' = 0); Also Cornu <-> Cornu
+// G4 (position only - splitable for Cornu - a G4 point) k1''= k2''
+
+BOOL_T CallCornuM(dynArr_t extra_points, BOOL_T end[2], coOrd pos[2], cornuParm_t * cp, dynArr_t * array_p, BOOL_T spots) {
+ array_p->cnt = 0;
+ //Create LH knots
+ //Find remote end point of track, create start knot
+ int ends[2];
+ ends[0] = (end[0]?2:0); ends[1] = (end[0]?3:1)+extra_points.cnt;
+ spiro_cp * knots;
+ coOrd * posk;
+ char * type;
+ posk = MyMalloc((6+extra_points.cnt)*sizeof(coOrd));
+ knots = MyMalloc((6+extra_points.cnt)*sizeof(spiro_cp));
+ type = MyMalloc((6+extra_points.cnt)*sizeof(char));
+ BOOL_T back;
+ ANGLE_T angle1;
+
+ if (Da.bezc) free(Da.bezc);
+
+ Da.bezc = new_bezctx_xtrkcad(array_p,ends,spots,tempD.scale*0.15/4);
+
+ coOrd pos0 = pos[0];
+
+ if (end[0]) {
+ type[0] = SPIRO_OPEN_CONTOUR;
+ type[1] = SPIRO_G2;
+ type[2] = SPIRO_RIGHT;
+ if (cp->radius[0] == 0.0) {
+ Translate(&posk[0],pos0,cp->angle[0],10);
+ Translate(&posk[1],pos0,cp->angle[0],5);
+ } else {
+ angle1 = FindAngle(cp->center[0],pos[0]);
+ if (NormalizeAngle(angle1 - cp->angle[0])<180) back = TRUE;
+ else back = FALSE;
+ posk[0] = pos[0];
+ Rotate(&posk[0],cp->center[0],(back)?-10:10);
+ posk[1] = pos[0];
+ Rotate(&posk[1],cp->center[0],(back)?-5:5);
+ }
+ posk[2] = pos[0];
+ } else {
+ type[0] = SPIRO_OPEN_CONTOUR;
+ posk[0] = pos[0];
+ }
+
+ for (int i=0;i<extra_points.cnt;i++) {
+ posk[(end[0]?3:1)+i] = DYNARR_N(coOrd,extra_points,i);
+ type[(end[0]?3:1)+i] = SPIRO_G4;
+ }
+
+ posk[(end[0]?3:1)+extra_points.cnt] = pos[1];
+ coOrd pos1 = pos[1];
+
+ if (end[1]) {
+ type[(end[0]?3:1)+extra_points.cnt] = SPIRO_LEFT;
+ type[(end[0]?3:1)+extra_points.cnt+1] = SPIRO_G2;
+ type[(end[0]?3:1)+extra_points.cnt+2] = SPIRO_END_OPEN_CONTOUR;
+ if (cp->radius[1] == 0.0) {
+ Translate(&posk[(end[0]?3:1)+extra_points.cnt+1],pos1,cp->angle[1],5);
+ Translate(&posk[(end[0]?3:1)+extra_points.cnt+2],pos1,cp->angle[1],10);
+ } else {
+ angle1 = FindAngle(cp->center[1],pos[1]);
+ if (NormalizeAngle(angle1 - cp->angle[1])>180) back = TRUE;
+ else back = FALSE;
+ posk[(end[0]?3:1)+extra_points.cnt+1] = pos[1];
+ Rotate(&posk[(end[0]?3:1)+extra_points.cnt+1],cp->center[1],(back)?5:-5);
+ posk[(end[0]?3:1)+extra_points.cnt+2] = pos[1];
+ Rotate(&posk[(end[0]?3:1)+extra_points.cnt+2],cp->center[1],(back)?10:-10);
+ }
+ } else {
+ type[(end[0]?3:1)+extra_points.cnt] = SPIRO_END_OPEN_CONTOUR;
}
- knots[0].ty = SPIRO_OPEN_CONTOUR;
- knots[1].ty = SPIRO_G2;
- knots[2].ty = SPIRO_RIGHT;
- knots[3].ty = SPIRO_LEFT;
- knots[4].ty = SPIRO_G2;
- knots[5].ty = SPIRO_END_OPEN_CONTOUR;
+ SetKnots(knots, posk, type, ((end[0]?3:1)+(end[1]?3:1)+extra_points.cnt));
+ TaggedSpiroCPsToBezier(knots,Da.bezc);
+ MyFree(posk);
+ MyFree(knots);
+ MyFree(type);
+ if (!bezctx_xtrkcad_close(Da.bezc)) {
+ return FALSE;
+ }
+ return TRUE;
}
-BOOL_T CallCornu0(coOrd pos[2], coOrd center[2], ANGLE_T angle[2], DIST_T radius[2], dynArr_t * array_p, BOOL_T spots) {
+EXPORT BOOL_T CallCornu0(coOrd pos[2], coOrd center[2], ANGLE_T angle[2], DIST_T radius[2], dynArr_t * array_p, BOOL_T spots) {
array_p->cnt = 0;
//Create LH knots
//Find remote end point of track, create start knot
@@ -227,14 +642,17 @@ BOOL_T CallCornu0(coOrd pos[2], coOrd center[2], ANGLE_T angle[2], DIST_T radius
ends[0] = 2; ends[1] = 3;
spiro_cp knots[6];
coOrd posk[6];
+ char type[6];
BOOL_T back;
ANGLE_T angle1;
if (Da.bezc) free(Da.bezc);
- Da.bezc = new_bezctx_xtrkcad(array_p,ends,spots);
+ Da.bezc = new_bezctx_xtrkcad(array_p,ends,spots,tempD.scale*0.15/4);
coOrd pos0 = pos[0];
+ type[0] = SPIRO_OPEN_CONTOUR;
+
if (radius[0] == 0.0) {
Translate(&posk[0],pos0,angle[0],10);
@@ -248,9 +666,12 @@ BOOL_T CallCornu0(coOrd pos[2], coOrd center[2], ANGLE_T angle[2], DIST_T radius
posk[1] = pos[0];
Rotate(&posk[1],center[0],(back)?-5:5);
}
+ type[1] = SPIRO_G2;
posk[2] = pos[0];
+ type[2] = SPIRO_RIGHT;
posk[3] = pos[1];
+ type[3] = SPIRO_LEFT;
coOrd pos1 = pos[1];
@@ -266,7 +687,10 @@ BOOL_T CallCornu0(coOrd pos[2], coOrd center[2], ANGLE_T angle[2], DIST_T radius
posk[5] = pos[1];
Rotate(&posk[5],center[1],(back)?10:-10);
}
- SetKnots(knots,posk);
+ type[4] = SPIRO_G2;
+ type[5] = SPIRO_END_OPEN_CONTOUR;
+
+ SetKnots(knots, posk, type, 6);
TaggedSpiroCPsToBezier(knots,Da.bezc);
if (!bezctx_xtrkcad_close(Da.bezc)) {
return FALSE;
@@ -290,19 +714,19 @@ BOOL_T CallCornu(coOrd pos[2], track_p trk[2], EPINX_T ep[2], dynArr_t * array_p
if (Da.circleorHelix[i]) { //Helix/Circle only
cp->radius[i] = params.arcR;
cp->center[i] = params.arcP;
- cp->angle[i] = NormalizeAngle(params.track_angle+(ep[i]?180:0));
+ if (ep && ep[i]>=0) cp->angle[i] = NormalizeAngle(params.track_angle+(ep[i]?180:0));
} else if (params.type == curveTypeStraight) {
cp->angle[i] = NormalizeAngle(angle+180); //Because end always backwards
cp->radius[i] = 0.0;
} else if ((params.type == curveTypeCornu || params.type == curveTypeBezier) && params.arcR == 0.0 ) {
cp->radius[i] = 0.0;
- cp->angle[i] = NormalizeAngle(params.track_angle+(ep[i]?180:0)); //Use point not end
+ if (ep && ep[i]>=0) cp->angle[i] = NormalizeAngle(params.track_angle+(ep[i]?180:0)); //Use point not end
} else if (params.type == curveTypeCurve) {
- cp->angle[i] = NormalizeAngle(params.track_angle+(ep[i]?180:0));
+ if (ep && ep[i]>=0) cp->angle[i] = NormalizeAngle(params.track_angle+(ep[i]?180:0));
cp->radius[i] = params.arcR;
cp->center[i] = params.arcP;
} else if ((params.type == curveTypeCornu || params.type == curveTypeBezier) && params.arcR != 0.0 ){
- cp->angle[i] = NormalizeAngle(params.track_angle+(ep[i]?180:0));
+ if (ep && ep[i]>=0) cp->angle[i] = NormalizeAngle(params.track_angle+(ep[i]?180:0));
cp->radius[i] = params.arcR;
cp->center[i] = params.arcP;
} else {
@@ -317,6 +741,7 @@ BOOL_T CallCornu(coOrd pos[2], track_p trk[2], EPINX_T ep[2], dynArr_t * array_p
}
+
/*
* Draw Cornu while editing it. It consists of up to five elements - the ends, the curve and one or two End Points.
*
@@ -333,30 +758,26 @@ EXPORT void DrawCornuCurve(
trkSeg_p second_trk,
trkSeg_p extend1_trk,
trkSeg_p extend2_trk,
+ trkSeg_p mids,
+ int midSegs_cnt,
wDrawColor color
) {
- long oldDrawOptions = tempD.funcs->options;
- tempD.funcs->options = wDrawOptTemp;
- long oldOptions = tempD.options;
- tempD.options = DC_TICKS;
- tempD.orig = mainD.orig;
- tempD.angle = mainD.angle;
if (first_trk)
DrawSegs( &tempD, zero, 0.0, first_trk, 1, Da.trackGauge, drawColorBlack );
- if (crvSegs_cnt && curveSegs)
+ if (crvSegs_cnt>0 && curveSegs)
DrawSegs( &tempD, zero, 0.0, curveSegs, crvSegs_cnt, Da.trackGauge, color );
if (second_trk)
DrawSegs( &tempD, zero, 0.0, second_trk, 1, Da.trackGauge, drawColorBlack );
- if (ep1Segs_cnt && point1)
+ if (ep1Segs_cnt>0 && point1)
DrawSegs( &tempD, zero, 0.0, point1, ep1Segs_cnt, Da.trackGauge, drawColorBlack );
- if (ep2Segs_cnt && point2)
+ if (ep2Segs_cnt>0 && point2)
DrawSegs( &tempD, zero, 0.0, point2, ep2Segs_cnt, Da.trackGauge, drawColorBlack );
+ if (midSegs_cnt>0 && mids)
+ DrawSegs( &tempD, zero, 0.0, mids, midSegs_cnt, Da.trackGauge, drawColorBlack );
if (extend1_trk)
DrawSegs( &tempD, zero, 0.0, extend1_trk, 1, Da.trackGauge, drawColorBlack);
if (extend2_trk)
DrawSegs( &tempD, zero, 0.0, extend2_trk, 1, Da.trackGauge, drawColorBlack);
- tempD.funcs->options = oldDrawOptions;
- tempD.options = oldOptions;
}
@@ -373,35 +794,53 @@ void DrawTempCornu() {
&Da.trk2Seg,
Da.extend[0]?&Da.extendSeg[0]:NULL,
Da.extend[1]?&Da.extendSeg[1]:NULL,
- Da.minRadius<(GetLayoutMinTrackRadius()-EPSILON)?drawColorRed:drawColorBlack);
+ (trkSeg_t *)Da.midSegs.ptr,Da.midSegs.cnt,
+ fabs(Da.minRadius)<(GetLayoutMinTrackRadius()-EPSILON)?exceptionColor:normalColor);
}
-void CreateBothEnds(int selectPoint) {
+void CreateBothEnds(int selectEndPoint, int selectMidPoint, int selectEndHandle, int lastSelected ) {
BOOL_T selectable[2],modifyable[2];
selectable[0] = !Da.trk[0] || (
Da.trk[0] && !QueryTrack(Da.trk[0],Q_IS_CORNU) && !QueryTrack(Da.trk[0],Q_CAN_MODIFY_CONTROL_POINTS));
modifyable[0] = !Da.trk[0] || (
Da.trk[0] && QueryTrack(Da.trk[0],Q_CORNU_CAN_MODIFY));
selectable[1] = !Da.trk[1] || (
- Da.trk[1] && !QueryTrack(Da.trk[1],Q_IS_CORNU) && !QueryTrack(Da.trk[0],Q_CAN_MODIFY_CONTROL_POINTS));
+ Da.trk[1] && !QueryTrack(Da.trk[1],Q_IS_CORNU) && !QueryTrack(Da.trk[1],Q_CAN_MODIFY_CONTROL_POINTS));
modifyable[1] = !Da.trk[1] || (
Da.trk[1] && QueryTrack(Da.trk[1],Q_CORNU_CAN_MODIFY));
- if (selectPoint == -1) {
- Da.ep1Segs_da_cnt = createEndPoint(Da.ep1Segs, Da.pos[0],FALSE,selectable[0],modifyable[0]);
- Da.ep2Segs_da_cnt = createEndPoint(Da.ep2Segs, Da.pos[1],FALSE,selectable[1],modifyable[1]);
- } else if (selectPoint == 0 || selectPoint == 1) {
- Da.ep1Segs_da_cnt = createEndPoint(Da.ep1Segs, Da.pos[0],selectPoint == 0,selectable[0],modifyable[0]);
- Da.ep2Segs_da_cnt = createEndPoint(Da.ep2Segs, Da.pos[1],selectPoint == 1,selectable[1],modifyable[1]);
+
+ Da.endHandle[0].angle_selected = (selectEndHandle==1)?TRUE:FALSE;
+ Da.endHandle[0].radius_selected = (selectEndHandle==0)?TRUE:FALSE;
+ Da.endHandle[1].angle_selected = (selectEndHandle==3)?TRUE:FALSE;
+ Da.endHandle[1].radius_selected = (selectEndHandle==2)?TRUE:FALSE;
+ Da.endHandle[0].last_selected = lastSelected==0?TRUE:FALSE;
+ Da.endHandle[1].last_selected = lastSelected==1?TRUE:FALSE;
+ if (selectEndPoint == -1) {
+ Da.ep1Segs_da_cnt = createEndPoint(Da.ep1Segs, Da.pos[0],FALSE,selectable[0],modifyable[0],Da.trk[0]!=NULL,Da.angle[0],Da.radius[0],Da.center[0],Da.extend[0]?NULL:&Da.endHandle[0]);
+ Da.ep2Segs_da_cnt = createEndPoint(Da.ep2Segs, Da.pos[1],FALSE,selectable[1],modifyable[1],Da.trk[1]!=NULL,Da.angle[1],Da.radius[1],Da.center[1],Da.extend[1]?NULL:&Da.endHandle[1]);
} else {
- Da.ep1Segs_da_cnt = createEndPoint(Da.ep1Segs, Da.pos[0],FALSE,selectable[0],modifyable[0]);
- Da.ep2Segs_da_cnt = createEndPoint(Da.ep2Segs, Da.pos[1],FALSE,selectable[1],modifyable[1]);
+ Da.ep1Segs_da_cnt = createEndPoint(Da.ep1Segs, Da.pos[0],selectEndPoint == 0,selectable[0],modifyable[0],Da.trk[0]!=NULL,Da.angle[0],Da.radius[0],Da.center[0],Da.extend[0]?NULL:&Da.endHandle[0]);
+ Da.ep2Segs_da_cnt = createEndPoint(Da.ep2Segs, Da.pos[1],selectEndPoint == 1,selectable[1],modifyable[1],Da.trk[1]!=NULL,Da.angle[1],Da.radius[1],Da.center[1],Da.extend[1]?NULL:&Da.endHandle[1]);
}
+ Da.endHandle[0].end_valid = !Da.extend[0];
+ Da.endHandle[1].end_valid = !Da.extend[1];
+ DYNARR_RESET(trkSeg_t,Da.midSegs);
+ for (int i=0;i<Da.mid_points.cnt;i++) {
+ createMidPoint(&Da.midSegs, DYNARR_N(coOrd,Da.mid_points,i),selectMidPoint == i,TRUE, TRUE );
+ }
+ if (Da.radius[0] >=0.0) Da.ends[0] = TRUE;
+ else Da.ends[0] = FALSE;
+ if (Da.radius[1] >=0.0) Da.ends[1] = TRUE;
+ else Da.ends[1] = FALSE;
}
-BOOL_T GetConnectedTrackParms(track_p t, const coOrd pos, int end, EPINX_T track_end) {
+BOOL_T GetConnectedTrackParms(track_p t, const coOrd pos, int end, EPINX_T track_end, wBool_t extend) {
trackParams_t trackParams;
- if (!GetTrackParams(PARAMS_CORNU, t, pos, &trackParams)) return FALSE;
+ coOrd pos1;
+ if ((track_end>=0) && extend) pos1 = GetTrkEndPos(t,track_end);
+ else pos1 = pos;
+ if (!GetTrackParams(PARAMS_CORNU, t, pos1, &trackParams)) return FALSE;
Da.radius[end] = 0.0;
Da.center[end] = zero;
Da.circleorHelix[end] = FALSE;
@@ -415,7 +854,8 @@ BOOL_T GetConnectedTrackParms(track_p t, const coOrd pos, int end, EPINX_T track
Da.circleorHelix[end] = TRUE;
Da.angle[end] = trackParams.track_angle; //For Now
} else {
- Da.angle[end] = NormalizeAngle(trackParams.track_angle + (track_end?180:0));
+ Da.angle[end] = NormalizeAngle(GetTrkEndAngle(t,track_end)+180);
+ //Da.angle[end] = NormalizeAngle(trackParams.track_angle + (track_end?180:0));
}
} else if (trackParams.type == curveTypeBezier) {
Da.angle[end] = NormalizeAngle(trackParams.track_angle+(track_end?180:0));
@@ -430,12 +870,12 @@ BOOL_T GetConnectedTrackParms(track_p t, const coOrd pos, int end, EPINX_T track
}
} else if (trackParams.type == curveTypeCornu) {
int ep = trackParams.ep;
- Da.angle[end] = NormalizeAngle(trackParams.cornuAngle[ep]+(track_end?180:0));
+ Da.angle[end] = NormalizeAngle(trackParams.cornuAngle[ep]+180);
Da.radius[end] = trackParams.cornuRadius[ep];
Da.pos[end] = trackParams.cornuEnd[ep];
Da.center[end] = trackParams.cornuCenter[ep];
} else if (trackParams.type == curveTypeStraight) {
- if (Da.ep[end]>=0)
+ if (trackParams.ep>=0)
Da.angle[end] = NormalizeAngle(GetTrkEndAngle(t,track_end)+180); //Ignore params.angle because it gives from nearest end
else {
Da.angle[end] = NormalizeAngle(trackParams.angle+180); //Turntable
@@ -483,11 +923,106 @@ void SetUpCornuParms(cornuParm_t * cp) {
cp->radius[1] = Da.radius[1];
}
+track_p CreateCornuFromPoints(coOrd pos[2],BOOL_T track_end[2]) {
+ coOrd center[2];
+ DIST_T radius[2];
+ ANGLE_T angle[2];
+ BOOL_T back, neg;
+ cornuParm_t new;
+ int inx,subinx;
+ coOrd pos_temp[2];
+
+ for (int i=0;i<2;i++) {
+ pos_temp[i] = pos[i];
+
+ if (!track_end[i] || (Da.radius[i]==-1.0)) {
+
+ angle[i] = GetAngleSegs(Da.crvSegs_da.cnt,(trkSeg_t *)(Da.crvSegs_da.ptr),&pos_temp[i],&inx,NULL,&back,&subinx,&neg);
+
+ trkSeg_p segPtr = &DYNARR_N(trkSeg_t, Da.crvSegs_da, inx);
+
+ if (segPtr->type == SEG_BEZTRK)
+ segPtr = &DYNARR_N(trkSeg_t, segPtr->bezSegs, subinx);
+
+ if (i==0) {
+ if (neg==back) angle[i] = NormalizeAngle(angle[i]+180);
+ } else {
+ if (!(neg==back)) angle[i] = NormalizeAngle(angle[i]+180);
+ }
+
+ if (segPtr->type == SEG_STRTRK) {
+ radius[i] = 0.0;
+ center[i] = zero;
+ } else if (segPtr->type == SEG_CRVTRK) {
+ center[i] = segPtr->u.c.center;
+ radius[i] = fabs(segPtr->u.c.radius);
+ }
+ } else {
+ pos[i] = Da.pos[i];
+ radius[i] = Da.radius[i];
+ center[i] = Da.center[i];
+ angle[i] = Da.angle[i];
+ neg = FALSE;
+ back = FALSE;
+ }
+ }
+ new.pos[0] = pos[0];
+ new.pos[1] = pos[1];
+ new.angle[0] = angle[0];
+ new.angle[1] = angle[1];
+ new.center[0] = center[0];
+ new.center[1] = center[1];
+ new.radius[0] = radius[0];
+ new.radius[1] = radius[1];
+
+ track_p trk1 = NewCornuTrack(new.pos,new.center,new.angle,new.radius,NULL,0);
+ if (trk1==NULL) {
+ wBeep();
+ InfoMessage(_("Cornu Create Failed for p1[%0.3f,%0.3f] p2[%0.3f,%0.3f], c1[%0.3f,%0.3f] c2[%0.3f,%0.3f], a1=%0.3f a2=%0.3f, r1=%s r2=%s"),
+ new.pos[0].x,new.pos[0].y,
+ new.pos[1].x,new.pos[1].y,
+ new.center[0].x,new.center[0].y,
+ new.center[1].x,new.center[1].y,
+ new.angle[0],new.angle[1],
+ FormatDistance(new.radius[0]),FormatDistance(new.radius[1]));
+ UndoEnd();
+ return NULL;
+ }
+ return trk1;
+}
+
struct extraData {
cornuData_t cornuData;
};
+ANGLE_T GetOpenAngle(coOrd pos[2],ANGLE_T angle[2],int moved) {
+ ANGLE_T a = FindAngle(pos[1-moved],pos[moved]);
+ ANGLE_T diff = (180+a)-angle[1-moved]; //Difference between input and line
+ return a+diff; //Change to line plus this at the other end
+}
+
+static struct {
+ ANGLE_T angle;
+ DIST_T radius;
+
+} cornuModCmdContext;
+
+static BOOL_T infoSubst = FALSE;
+
+static paramFloatRange_t r10000_10000 = {-10000, 10000};
+static paramFloatRange_t r0_360 = { 0, 360, 80 };
+
+static paramData_t cornuModPLs[] = {
+
+#define cornuModEndAnglePD (cornuModPLs[0])
+#define cornuModEndAngle 0
+ { PD_FLOAT, &cornuModCmdContext.angle, "End Angle", PDO_NORECORD|BO_ENTER, &r0_360, N_("End Angle") },
+#define cornuModEndRadiusPD (cornuModPLs[1])
+#define cornuModEndRadius 1
+ { PD_FLOAT, &cornuModCmdContext.radius, "End Radius", PDO_DIM|PDO_NORECORD|BO_ENTER, &r10000_10000, N_("End Radius") },
+};
+static paramGroup_t cornuModPG = { "cornuMod", 0, cornuModPLs, sizeof cornuModPLs/sizeof cornuModPLs[0] };
/*
* AdjustCornuCurve
@@ -509,221 +1044,535 @@ EXPORT STATUS_T AdjustCornuCurve(
track_p t;
DIST_T d;
ANGLE_T a, a2;
- DIST_T dd;
EPINX_T ep;
cornuParm_t cp;
+ wControl_p controls[5]; //Always needs a NULL last entry
+ char * labels[4];
+
+ Da.cmdType = (long)commandContext;
+
if (Da.state != PICK_POINT && Da.state != POINT_PICKED && Da.state != TRACK_SELECTED) return C_CONTINUE;
switch ( action & 0xFF) {
case C_START:
- Da.selectPoint = -1;
- Da.extend[0] = FALSE;
- Da.extend[1] = FALSE;
- CreateBothEnds(Da.selectPoint);
- Da.crvSegs_da.cnt = 0;
- SetUpCornuParms(&cp);
- if (CallCornu(Da.pos,Da.trk,Da.ep,&Da.crvSegs_da,&cp)) Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
- else Da.crvSegs_da_cnt = 0;
- Da.minRadius = CornuMinRadius(Da.pos,Da.crvSegs_da);
- InfoMessage( _("Select End-Point") );
- DrawTempCornu();
- return C_CONTINUE;
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ infoSubst = FALSE;
+ Da.selectEndPoint = -1;
+ Da.selectMidPoint = -1;
+ Da.selectEndHandle = -1;
+ Da.prevSelected = -1;
+ Da.prevEndPoint = -1;
+ Da.extend[0] = FALSE;
+ Da.extend[1] = FALSE;
+ CreateBothEnds(Da.selectEndPoint, Da.selectMidPoint,Da.selectEndHandle,Da.prevSelected);
+ Da.crvSegs_da.cnt = 0;
+ SetUpCornuParms(&cp);
+ if (CallCornuM(Da.mid_points,Da.ends,Da.pos,&cp,&Da.crvSegs_da,TRUE)) Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
+ else Da.crvSegs_da_cnt = 0;
+ Da.minRadius = CornuMinRadius(Da.pos,Da.crvSegs_da);
+ InfoMessage( _("Select Point, or Add Point") );
+ TempRedraw(); // AdjustCornuCurve C_START
+ return C_CONTINUE;
+
+ case C_UPDATE:
+ if (Da.state != PICK_POINT && Da.prevSelected>-1) return C_CONTINUE;
+ int sel = Da.prevSelected;
+ if (Da.trk[sel]) return C_CONTINUE; //Track Here - should never happen
+ Da.radius[sel] = fabs(cornuModCmdContext.radius);
+ Da.angle[sel] = cornuModCmdContext.angle;
+ if (cornuModCmdContext.radius!=0)
+ Translate(&Da.center[sel],Da.pos[sel],Da.angle[sel]+90,cornuModCmdContext.radius);
+ CreateBothEnds(Da.prevSelected,-1,-1,Da.prevSelected);
+ SetUpCornuParms(&cp);
+ if (CallCornuM(Da.mid_points,Da.ends,Da.pos,&cp,&Da.crvSegs_da,TRUE)) Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
+ else Da.crvSegs_da_cnt = 0;
+ Da.minRadius = CornuMinRadius(Da.pos,Da.crvSegs_da);
+ return C_CONTINUE;
+ break;
+
+ case wActionMove:
+ if (Da.state == NONE || Da.state == PICK_POINT) {
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ for(int i=0;i<2;i++) {
+ if (IsClose(FindDistance(pos,Da.pos[i]))) {
+ if (((MyGetKeyState() & WKEY_SHIFT) != 0) && Da.selectTrack) {
+ CreateCornuExtendAnchor(Da.pos[i], Da.angle[i], FALSE);
+ return C_CONTINUE;
+ } else {
+ CreateCornuAnchor(Da.pos[i], FALSE);
+ return C_CONTINUE;
+ }
+ }
+ }
+ CreateBothEnds(Da.selectEndPoint,Da.selectMidPoint,Da.selectEndHandle,Da.prevSelected);
+ Da.selectEndPoint = -1;
+ for (int i=0;i<Da.mid_points.cnt;i++) {
+ d = FindDistance(DYNARR_N(coOrd,Da.mid_points,i),pos);
+ if (IsClose(d)) {
+ CreateCornuAnchor(DYNARR_N(coOrd,Da.mid_points,i),FALSE);
+ return C_CONTINUE;
+ }
+ }
+ for (int i=0;i<2;i++) {
+ if (Da.endHandle[i].end_valid == FALSE) continue;
+ d = FindDistance(Da.endHandle[i].end_center,pos);
+ if (IsClose(d)) {
+ CreateCornuAnchor(Da.endHandle[i].end_center, FALSE);
+ return C_CONTINUE;
+ }
+ }
+ for (int i=0;i<2;i++) {
+ if (Da.endHandle[i].end_valid == FALSE) continue;
+ d = FindDistance(Da.endHandle[i].end_curve,pos);
+ if (IsClose(d)) {
+ CreateCornuAnchor(Da.endHandle[i].end_curve, FALSE);
+ return C_CONTINUE;
+ }
+ }
+ coOrd temp_pos = pos;
+ if (IsClose(DistanceSegs(zero,0.0,Da.crvSegs_da.cnt,(trkSeg_p)Da.crvSegs_da.ptr,&temp_pos,NULL))) {
+ CreateCornuAnchor(temp_pos, TRUE);
+ }
+ }
+ return C_CONTINUE;
case C_DOWN:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if (Da.state != PICK_POINT) return C_CONTINUE;
- dd = 10000.0;
- Da.selectPoint = -1;
+ Da.selectEndPoint = -1;
+ Da.selectMidPoint = -1;
+ Da.selectEndHandle = -1;
+ Da.prevSelected = -1;
+ if (infoSubst) {
+ InfoSubstituteControls( NULL, NULL );
+ infoSubst = FALSE;
+ }
for (int i=0;i<2;i++) {
d = FindDistance(Da.pos[i],pos);
- if (d < dd) {
- dd = d;
- Da.selectPoint = i;
+ if (IsClose(d)) {
+ Da.selectEndPoint = i;
+ CreateCornuAnchor(Da.pos[i],FALSE);
+ break;
}
}
- if (!IsClose(dd) ) Da.selectPoint = -1;
- if (Da.selectPoint == -1) {
+ if (Da.selectEndPoint == -1) {
+ for (int i=0;i<Da.mid_points.cnt;i++) {
+ d = FindDistance(DYNARR_N(coOrd,Da.mid_points,i),pos);
+ if (IsClose(d)) {
+ Da.selectMidPoint = i;
+ Da.selectEndPoint = -1;
+ CreateCornuAnchor(DYNARR_N(coOrd,Da.mid_points,i),FALSE);
+ break;
+ }
+ }
+ if (Da.selectMidPoint == -1 ) {
+ for (int i=0;i<2;i++) {
+ if (Da.endHandle[i].end_valid == FALSE) continue;
+ d = FindDistance(Da.endHandle[i].end_center,pos);
+ if (IsClose(d)) {
+ Da.selectEndHandle = i*2;
+ Da.selectEndPoint = -1;
+ Da.selectMidPoint = -1;
+ CreateCornuAnchor(Da.endHandle[i].end_center,i);
+ break;
+ }
+ }
+ if (Da.selectEndHandle == -1) {
+ for (int i=0;i<2;i++) {
+ if (Da.endHandle[i].end_valid == FALSE) continue;
+ d = FindDistance(Da.endHandle[i].end_curve,pos);
+ if (IsClose(d)) {
+ Da.selectEndHandle = 1+i*2;
+ Da.selectEndPoint = -1;
+ Da.selectMidPoint = -1;
+ CreateCornuAnchor(Da.endHandle[i].end_curve,i);
+ break;
+ }
+ }
+ }
+ }
+ } else { //We picked an end point
+ if (!Da.trk[Da.selectEndPoint] && ((MyGetKeyState() & WKEY_SHIFT) != 0) && Da.selectTrack) { //With Shift no track -> Extend
+ Da.extend[Da.selectEndPoint] = TRUE; //Adding to end Point
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ CreateCornuExtendAnchor(Da.pos[Da.selectEndPoint], Da.angle[Da.selectEndPoint], FALSE);
+ }
+ }
+ if (Da.selectMidPoint ==-1 && Da.selectEndPoint ==-1 && Da.selectEndHandle ==-1) {
+ coOrd temp_pos = pos;
+ wIndex_t index;
+ if (IsClose(DistanceSegs(zero,0.0,Da.crvSegs_da.cnt,(trkSeg_p)Da.crvSegs_da.ptr,&temp_pos,&index))) {
+ //Add Point between two other points
+ //Find closest two points along Track
+ int closest = -1;
+ wIndex_t pIndex, nIndex;
+ temp_pos = Da.pos[0];
+ DistanceSegs(zero,0.0,Da.crvSegs_da.cnt,(trkSeg_p)Da.crvSegs_da.ptr,&temp_pos,&pIndex);
+ if (Da.mid_points.cnt>0) {
+ for (int i=0;i<Da.mid_points.cnt;i++) {
+ temp_pos = DYNARR_N(coOrd ,Da.mid_points,i);
+ DistanceSegs(zero,0.0,Da.crvSegs_da.cnt,(trkSeg_p)Da.crvSegs_da.ptr,&temp_pos,&nIndex);
+ if (((pIndex<=index) && (nIndex>=index))) {
+ closest = i;
+ break;
+ }
+ pIndex = nIndex;
+ }
+ temp_pos = Da.pos[1];
+ DistanceSegs(zero,0.0,Da.crvSegs_da.cnt,(trkSeg_p)Da.crvSegs_da.ptr,&temp_pos,&nIndex);
+ if (index == nIndex) closest = Da.mid_points.cnt;
+ if (closest == -1)
+ closest = Da.mid_points.cnt;
+ } else closest = 0;
+ DYNARR_APPEND(coOrd,Da.mid_points,1);
+ for (int i=Da.mid_points.cnt-1;i>closest;i--) {
+ DYNARR_N(coOrd,Da.mid_points,i) = DYNARR_N(coOrd ,Da.mid_points,i-1);
+ }
+ DYNARR_N(coOrd,Da.mid_points,closest) = pos;
+ Da.selectMidPoint = closest;
+ Da.number_of_points++;
+ CreateCornuAnchor(pos,FALSE);
+ InfoMessage("Pin Point Added");
+ } else {
+ wBeep();
+ InfoMessage("Add Point Is Not on Track");
+ return C_CONTINUE;
+ }
+ }
+ if (Da.selectEndPoint == -1 && Da.selectMidPoint == -1 && Da.selectEndHandle ==-1) {
wBeep();
- InfoMessage( _("Not close enough to end point, reselect") );
+ InfoMessage( _("Not close enough to track or point, reselect") );
return C_CONTINUE;
} else {
- pos = Da.pos[Da.selectPoint];
+ if (Da.selectEndPoint >=0 ) {
+ pos = Da.pos[Da.selectEndPoint];
+ if (Da.extend[Da.selectEndPoint])
+ InfoMessage( _("Drag out end of Cornu"));
+ else if (Da.trk[Da.selectEndPoint]) {
+ InfoMessage( _("Drag along end of track"));
+ } else
+ InfoMessage( _("Drag to move"));
+ } else if (Da.selectMidPoint >=0 ) {
+ pos = DYNARR_N(coOrd,Da.mid_points,Da.selectMidPoint);
+ InfoMessage( _("Drag point to new location, Delete to remove"));
+ } else {
+ if (Da.selectEndHandle%2 == 0) {
+ pos = Da.endHandle[Da.selectEndHandle/2].end_center;
+ InfoMessage( _("Drag to change end radius"));
+ } else {
+ pos = Da.endHandle[Da.selectEndHandle/2].end_curve;
+ InfoMessage( _("Drag to change end angle"));
+ }
+ }
Da.state = POINT_PICKED;
- InfoMessage( _("Drag point %d to new location and release it"),Da.selectPoint+1 );
}
- DrawTempCornu(); //wipe out
- CreateBothEnds(Da.selectPoint);
+ CreateBothEnds(Da.selectEndPoint,Da.selectMidPoint,Da.selectEndHandle,Da.prevSelected);
SetUpCornuParms(&cp);
- if (CallCornu(Da.pos, Da.trk,Da.ep, &Da.crvSegs_da, &cp)) Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
+ if (CallCornuM(Da.mid_points,Da.ends,Da.pos,&cp,&Da.crvSegs_da,TRUE)) Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
else Da.crvSegs_da_cnt = 0;
Da.minRadius = CornuMinRadius(Da.pos, Da.crvSegs_da);
- DrawTempCornu();
return C_CONTINUE;
case C_MOVE:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if (Da.state != POINT_PICKED) {
- InfoMessage(_("Pick any circle to adjust it by dragging - Enter to accept, Esc to cancel"));
+ InfoMessage(_("Pick any circle to adjust or add - Enter to accept, Esc to cancel"));
return C_CONTINUE;
}
- //If locked, reset pos to be on line from other track
- int sel = Da.selectPoint;
- coOrd pos2 = pos;
- BOOL_T inside = FALSE;
- if (Da.trk[sel]) { //There is a track
- if (OnTrack(&pos,FALSE,TRUE) == Da.trk[sel]) { //And the pos is on it
- inside = TRUE;
- if (!QueryTrack(Da.trk[Da.selectPoint],Q_CORNU_CAN_MODIFY)) { //Turnouts
- InfoMessage(_("Track can't be split"));
- if (Da.ep[sel]>=0) //Ignore if turntable
- pos = GetTrkEndPos(Da.trk[sel],Da.ep[sel]);
+ if (Da.selectEndPoint >= 0) {
+ //If locked, reset pos to be on line from other track
+ int sel = Da.selectEndPoint;
+ coOrd pos2 = pos;
+ BOOL_T inside = FALSE;
+ if (Da.trk[sel]) { //Track
+ if (OnTrack(&pos,FALSE,TRUE) == Da.trk[sel]) { //And the pos is on it
+ inside = TRUE;
+ if (!QueryTrack(Da.trk[Da.selectEndPoint],Q_CORNU_CAN_MODIFY)) { //Turnouts
+ InfoMessage(_("Track can't be split"));
+ inside = FALSE;
+ if (Da.ep[sel]>=0) { //If not turntable
+ Da.pos[sel] = pos = GetTrkEndPos(Da.trk[sel],Da.ep[sel]);
+ } else {
+ if (QueryTrack(Da.trk[sel],Q_CAN_ADD_ENDPOINTS)){ //Turntable
+ trackParams_t tp;
+ if (!GetTrackParams(PARAMS_CORNU, Da.trk[sel], pos, &tp)) return C_CONTINUE;
+ ANGLE_T a = tp.angle;
+ Translate(&pos,tp.ttcenter,a,tp.ttradius);
+ Da.angle[sel] = NormalizeAngle(a+180);
+ SetUpCornuParms(&cp);
+ if (CallCornuM(Da.mid_points,Da.ends,Da.pos,&cp,&Da.crvSegs_da,TRUE)) Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
+ else Da.crvSegs_da_cnt = 0;
+ } else return C_CONTINUE;
+ }
+ }
+ } else {
+ pos = pos2; //Put Back to original position as outside track
}
- } else {
- pos = pos2; //Put Back to original position as outside track
- }
- // Stop the user extending right through the other track
- if (Da.ep[sel]>=0 && QueryTrack(Da.trk[sel],Q_CORNU_CAN_MODIFY)) { //For non-turnouts
- if ((!QueryTrack(Da.trk[sel],Q_CAN_ADD_ENDPOINTS)) // But Not Helix or Circle
- && (!QueryTrack(Da.trk[sel],Q_HAS_VARIABLE_ENDPOINTS))) { // Not a Turntable
- DIST_T ab = FindDistance(GetTrkEndPos(Da.trk[sel],Da.ep[sel]),GetTrkEndPos(Da.trk[sel],1-Da.ep[sel]));
- DIST_T ac = FindDistance(GetTrkEndPos(Da.trk[sel],Da.ep[sel]),pos);
- DIST_T cb = FindDistance(GetTrkEndPos(Da.trk[sel],1-Da.ep[sel]), pos);
- if (cb<minLength) {
- InfoMessage(_("Too close to other end of selected Track"));
- return C_CONTINUE;
+ if (!inside) {
+ if (Da.ep[sel]>=0) { //Track defined end point
+ ANGLE_T diff = NormalizeAngle(GetTrkEndAngle(Da.trk[sel],Da.ep[sel])-FindAngle(GetTrkEndPos(Da.trk[sel],Da.ep[sel]),pos));
+ if (diff>90.0 && diff<270.0) { //The point is not on track but outside cone of end angle+/-90
+ Da.pos[sel] = pos = GetTrkEndPos(Da.trk[sel],Da.ep[sel]);
+ CreateBothEnds(Da.selectEndPoint,Da.selectMidPoint,Da.selectEndHandle,Da.prevSelected);
+ return C_CONTINUE;
+ }
+ } else { //Not an end point
+ if (QueryTrack(Da.trk[sel],Q_CAN_ADD_ENDPOINTS)){ //Turntable
+ trackParams_t tp;
+ if (!GetTrackParams(PARAMS_CORNU, Da.trk[sel], pos, &tp)) return C_CONTINUE;
+ ANGLE_T a = tp.angle;
+ coOrd edge;
+ Translate(&edge,tp.ttcenter,a,tp.ttradius);
+ ANGLE_T da = DifferenceBetweenAngles(FindAngle(edge,pos),a);
+ DIST_T d = fabs(FindDistance(edge,pos)*cos(R2D(da)));
+ Translate(&pos,edge,a,d);
+ Da.angle[sel] = NormalizeAngle(a+180);
+ Da.pos[sel] = pos;
+ CreateBothEnds(Da.selectEndPoint,Da.selectMidPoint,Da.selectEndHandle,Da.prevSelected);
+ Da.extendSeg[sel].type = SEG_STRTRK;
+ Da.extendSeg[sel].width = 0;
+ Da.extendSeg[sel].color = wDrawColorBlack;
+ Da.extendSeg[sel].u.l.pos[1-sel] = pos;
+ Da.extendSeg[sel].u.l.pos[sel] = edge;
+ Da.extend[sel] = TRUE;
+ SetUpCornuParms(&cp);
+ if (CallCornuM(Da.mid_points,Da.ends,Da.pos,&cp,&Da.crvSegs_da,TRUE)) Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
+ else Da.crvSegs_da_cnt = 0;
+ return C_CONTINUE; //Stop moving end point
+ } else return C_CONTINUE;
+ }
}
- if ((ac>=cb) && (ac>=ab)) { //Closer to far end and as long as the track
- pos = GetTrkEndPos(Da.trk[sel],1-Da.ep[sel]); //Make other end of track
+ // Stop the user extending right through the other track
+ if (Da.ep[sel]>=0 && QueryTrack(Da.trk[sel],Q_CORNU_CAN_MODIFY)) { //For non-turnouts
+ if ((!QueryTrack(Da.trk[sel],Q_CAN_ADD_ENDPOINTS)) // Not Turntable - may not be needed
+ && (!QueryTrack(Da.trk[sel],Q_HAS_VARIABLE_ENDPOINTS))) { // Not Helix or a Circle
+ DIST_T ab = FindDistance(GetTrkEndPos(Da.trk[sel],Da.ep[sel]),GetTrkEndPos(Da.trk[sel],1-Da.ep[sel]));
+ DIST_T ac = FindDistance(GetTrkEndPos(Da.trk[sel],Da.ep[sel]),pos);
+ DIST_T cb = FindDistance(GetTrkEndPos(Da.trk[sel],1-Da.ep[sel]),pos);
+ if (cb<minLength) {
+ InfoMessage(_("Too close to other end of selected Track"));
+ return C_CONTINUE;
+ }
+ if ((ac>=cb) && (ac>=ab)) { //Closer to far end and as long as the track
+ pos = GetTrkEndPos(Da.trk[sel],1-Da.ep[sel]); //Make other end of track
+ }
+ }
+ } else if (Da.ep[sel]>=0 && inside) { //Has a point and inside track
+ InfoMessage(_("Can't move end inside a turnout")); //Turnouts are stuck to end-point
+ Da.pos[sel] = pos = GetTrkEndPos(Da.trk[sel],Da.ep[sel]);
+ CreateBothEnds(Da.selectEndPoint,Da.selectMidPoint,Da.selectEndHandle,Da.prevSelected);
+ return C_CONTINUE;
}
}
- }
- }
- DrawTempCornu(); //wipe out old
- Da.extend[sel] = FALSE;
- if(!Da.trk[sel]) { //Cornu with no ends
- struct extraData *xx = GetTrkExtraData(Da.selectTrack);
- Da.pos[sel] = xx->cornuData.pos[sel]; //Re-Copy parms from old trk
- Da.radius[sel] = xx->cornuData.r[sel];
- Da.angle[sel] = xx->cornuData.a[sel];
- Da.center[sel] = xx->cornuData.c[sel];
- if (Da.radius[sel] == 0) { //Straight
- Da.extendSeg[sel].type = SEG_STRTRK;
- Da.extendSeg[sel].width = 0;
- Da.extendSeg[sel].color = wDrawColorBlack;
- Da.extendSeg[sel].u.l.pos[1-sel] = Da.pos[sel];
- d = FindDistance( Da.extendSeg[sel].u.l.pos[1-sel], pos );
- a = NormalizeAngle(Da.angle[sel]-FindAngle(pos,Da.pos[sel]));
- if (cos(D2R(a))<=0) {
- Translate( &Da.extendSeg[sel].u.l.pos[sel],
- Da.extendSeg[sel].u.l.pos[1-sel],
- Da.angle[sel], - d * cos(D2R(a)));
- pos = Da.extendSeg[sel].u.l.pos[1-sel];
- Da.extend[sel] = TRUE;
- }
- } else { //Curve
- Da.extendSeg[sel].type = SEG_CRVTRK;
- Da.extendSeg[sel].width = 0;
- Da.extendSeg[sel].color = wDrawColorBlack;
- Da.extendSeg[sel].u.c.center = Da.center[sel];
- Da.extendSeg[sel].u.c.radius = Da.radius[sel];
- a = FindAngle( Da.center[sel], pos );
- PointOnCircle( &pos, Da.center[sel], Da.radius[sel], a );
- a2 = FindAngle(Da.center[sel],Da.pos[sel]);
- if (((Da.angle[sel] < 180) && (a2>90 && a2<270)) ||
- ((Da.angle[sel] > 180) && (a2<90 || a2>270))) {
- Da.extendSeg[sel].u.c.a0 = a;
- Da.extendSeg[sel].u.c.a1 = NormalizeAngle(a2-a);
+ if(!Da.trk[sel]) { //Cornu with no end
+ if (((MyGetKeyState() & WKEY_SHIFT) != 0) && Da.selectTrack) { //Extend end locked
+ SetUpCornuParms(&cp);
+ CallCornuM(Da.mid_points,Da.ends,Da.pos,&cp,&Da.crvSegs_da,FALSE);
+ struct extraData *xx = GetTrkExtraData(Da.selectTrack);
+ if (Da.radius[sel] == 0) { //Straight
+ Da.extendSeg[sel].type = SEG_STRTRK;
+ Da.extendSeg[sel].width = 0;
+ Da.extendSeg[sel].color = wDrawColorBlack;
+ Da.extendSeg[sel].u.l.pos[1-sel] = Da.pos[sel];
+ d = FindDistance( Da.extendSeg[sel].u.l.pos[1-sel], pos );
+ a = NormalizeAngle(Da.angle[sel]-FindAngle(pos,Da.pos[sel]));
+ if (cos(D2R(a))<=0) {
+ Translate( &Da.extendSeg[sel].u.l.pos[sel],
+ Da.extendSeg[sel].u.l.pos[1-sel],
+ Da.angle[sel], - d * cos(D2R(a)));
+ pos = Da.extendSeg[sel].u.l.pos[sel];
+ Da.extend[sel] = TRUE;
+ } else Da.extend[sel] = FALSE;
+ } else { //Curve
+ Da.extendSeg[sel].type = SEG_CRVTRK;
+ Da.extendSeg[sel].width = 0;
+ Da.extendSeg[sel].color = wDrawColorBlack;
+ Da.extendSeg[sel].u.c.center = Da.center[sel];
+ Da.extendSeg[sel].u.c.radius = Da.radius[sel];
+ a = FindAngle( Da.center[sel], pos );
+ PointOnCircle( &pos, Da.extendSeg[sel].u.c.center, Da.radius[sel], a );
+ a2 = FindAngle(Da.extendSeg[sel].u.c.center,Da.pos[sel]);
+ if (((Da.angle[sel] < 180) && (a2>90 && a2<270)) ||
+ ((Da.angle[sel] > 180) && (a2<90 || a2>270))) {
+ Da.extendSeg[sel].u.c.a0 = a;
+ Da.extendSeg[sel].u.c.a1 = NormalizeAngle(a2-a);
+ } else {
+ Da.extendSeg[sel].u.c.a0 = a2;
+ Da.extendSeg[sel].u.c.a1 = NormalizeAngle(a-a2);
+ }
+ if (Da.extendSeg[sel].u.c.a1 == 0 || Da.extendSeg[sel].u.c.a1 >180 )
+ Da.extend[sel] = FALSE;
+ else
+ Da.extend[sel] = TRUE;
+ }
} else {
- Da.extendSeg[sel].u.c.a0 = a2;
- Da.extendSeg[sel].u.c.a1 = NormalizeAngle(a-a2);
- }
- if (Da.extendSeg[sel].u.c.a1 == 0 || Da.extendSeg[sel].u.c.a1 >180 )
Da.extend[sel] = FALSE;
- else
- Da.extend[sel] = TRUE;
- }
- if (Da.extend[sel] == FALSE) { // Not extending - so trim along our own Cornu
- GetCornuParmsNear(Da.selectTrack, sel, &pos, &Da.center[sel], &Da.angle[sel], &Da.radius[sel] );
- Da.pos[sel] = pos;
- }
- } else { //Cornu with ends
- if (inside) Da.pos[sel] = pos;
- if (!GetConnectedTrackParms(Da.trk[sel],pos,sel,Da.ep[sel])) {
- DrawTempCornu();
- wBeep();
- return C_CONTINUE; //Stop drawing
- }
- CorrectHelixAngles();
- if (!inside) { //Extend the track
- if (Da.trackType[sel] == curveTypeStraight) { //Extend with a straight
- Da.extendSeg[sel].type = SEG_STRTRK;
- Da.extendSeg[sel].width = 0;
- Da.extendSeg[sel].color = wDrawColorBlack;
- if (Da.ep[sel]>=0) {
- Da.extendSeg[sel].u.l.pos[0] = GetTrkEndPos( Da.trk[sel], Da.ep[sel] );
- a = NormalizeAngle(Da.angle[sel]-FindAngle(pos,GetTrkEndPos(Da.trk[sel],Da.ep[sel])));
- } else { //Turntable when unconnected
- Da.extendSeg[sel].u.l.pos[0] = Da.pos[sel];
- a = NormalizeAngle(Da.angle[sel]-FindAngle(pos,Da.pos[sel]));
+ coOrd offset; //Just move end (no shift)
+ offset.x = pos.x-Da.pos[sel].x;
+ offset.y = pos.y-Da.pos[sel].y;
+ Da.pos[sel] = pos;
+ if (Da.radius[sel] >0.0) {
+ Da.center[sel].x += offset.x;
+ Da.center[sel].y += offset.y;
}
- // Remove any extend in opposite direction for Turntable/Turnouts
- if ((QueryTrack(Da.trk[sel],Q_CAN_ADD_ENDPOINTS) && Da.ep[sel]>=0)
- && (!QueryTrack(Da.trk[sel],Q_CORNU_CAN_MODIFY))
- && (a>90 && a<270)) {
- Da.extend[sel] = FALSE; //Turntable with point and extension is other side of well
- Da.pos[sel] = GetTrkEndPos(Da.trk[sel],Da.ep[sel]);
- } else {
- Da.extend[sel] = TRUE;
- d = FindDistance( Da.extendSeg[sel].u.l.pos[0], pos );
- Translate( &Da.extendSeg[sel].u.l.pos[1],
- Da.extendSeg[sel].u.l.pos[0],
- Da.angle[sel], -d * cos(D2R(a)));
- Da.pos[sel] = pos = Da.extendSeg[sel].u.l.pos[1];
+ if (Da.selectTrack) { //We have track
+ if (!Da.trk[sel] && ((t = OnTrackIgnore(&pos,FALSE,TRUE,Da.selectTrack))!= NULL) ) {
+ if ((ep = PickUnconnectedEndPointSilent(pos,t))>=0) {
+ pos = GetTrkEndPos(t,ep);
+ if (IsClose(FindDistance(pos,pos)/2)) {
+ CreateCornuEndAnchor(pos,FALSE);
+ }
+ }
+ }
+ } else { //Not yet a track
+ coOrd p = pos;
+ Da.angle[sel] = GetOpenAngle(Da.pos,Da.angle,sel);
+ if ((t = OnTrack(&p,FALSE,TRUE)) !=NULL ) {
+ if ((ep = PickUnconnectedEndPointSilent(pos,t))>=0) {
+ p = GetTrkEndPos(t,ep);
+ if (IsClose(FindDistance(p,pos)/2)) {
+ CreateCornuEndAnchor(p,FALSE);
+ }
+ }
+ }
}
- } else if (Da.trackType[sel] == curveTypeCurve) { //Extend with temp curve
- Da.extendSeg[sel].type = SEG_CRVTRK;
- Da.extendSeg[sel].width = 0;
- Da.extendSeg[sel].color = wDrawColorBlack;
- Da.extendSeg[sel].u.c.center = Da.center[sel];
- Da.extendSeg[sel].u.c.radius = Da.radius[sel];
- a = FindAngle( Da.center[sel], pos );
- PointOnCircle( &pos, Da.center[sel], Da.radius[sel], a );
- a2 = FindAngle(Da.center[sel],GetTrkEndPos(Da.trk[sel],Da.ep[sel]));
- if ((Da.angle[sel] < 180 && (a2>90 && a2 <270)) ||
- (Da.angle[sel] > 180 && (a2<90 || a2 >270))) {
- Da.extendSeg[sel].u.c.a0 = a2;
- Da.extendSeg[sel].u.c.a1 = NormalizeAngle(a-a2);
- } else {
- Da.extendSeg[sel].u.c.a0 = a;
- Da.extendSeg[sel].u.c.a1 = NormalizeAngle(a2-a);
+ }
+ } else { //Cornu with ends
+ if (inside) Da.pos[sel] = pos;
+ if (!GetConnectedTrackParms(Da.trk[sel],pos,sel,Da.ep[sel],inside?FALSE:TRUE)) {
+ wBeep();
+ return C_CONTINUE; //Stop drawing
+ }
+ CorrectHelixAngles();
+ if (!inside) { //Extend the track
+ if (Da.trackType[sel] == curveTypeStraight) { //Extend with a straight
+ Da.extendSeg[sel].type = SEG_STRTRK;
+ Da.extendSeg[sel].width = 0;
+ Da.extendSeg[sel].color = wDrawColorBlack;
+ if (Da.ep[sel]>=0) {
+ Da.extendSeg[sel].u.l.pos[0] = GetTrkEndPos( Da.trk[sel], Da.ep[sel] );
+ a = NormalizeAngle(Da.angle[sel]-FindAngle(pos,GetTrkEndPos(Da.trk[sel],Da.ep[sel])));
+ } else { //Turntable when unconnected
+ Da.extendSeg[sel].u.l.pos[0] = Da.pos[sel];
+ a = NormalizeAngle(Da.angle[sel]-FindAngle(pos,Da.pos[sel]));
+ }
+ // Remove any extend in opposite direction for Turntable/Turnouts
+ if ((QueryTrack(Da.trk[sel],Q_CAN_ADD_ENDPOINTS) && Da.ep[sel]>=0)
+ && (!QueryTrack(Da.trk[sel],Q_CORNU_CAN_MODIFY))
+ && (a>90 && a<270)) {
+ Da.extend[sel] = FALSE; //Turntable with point and extension is other side of well
+ Da.pos[sel] = GetTrkEndPos(Da.trk[sel],Da.ep[sel]);
+ } else {
+ Da.extend[sel] = TRUE;
+ d = FindDistance( Da.extendSeg[sel].u.l.pos[0], pos );
+ Translate( &Da.extendSeg[sel].u.l.pos[1],
+ Da.extendSeg[sel].u.l.pos[0],
+ Da.angle[sel], -d * cos(D2R(a)));
+ Da.pos[sel] = pos = Da.extendSeg[sel].u.l.pos[1];
+ }
+ } else if (Da.trackType[sel] == curveTypeCurve) { //Extend with temp curve
+ Da.extendSeg[sel].type = SEG_CRVTRK;
+ Da.extendSeg[sel].width = 0;
+ Da.extendSeg[sel].color = wDrawColorBlack;
+ Da.extendSeg[sel].u.c.center = Da.center[sel];
+ Da.extendSeg[sel].u.c.radius = Da.radius[sel];
+ a = FindAngle( Da.center[sel], pos );
+ PointOnCircle( &pos, Da.center[sel], Da.radius[sel], a );
+ a2 = FindAngle(Da.center[sel],GetTrkEndPos(Da.trk[sel],Da.ep[sel]));
+ if ((Da.angle[sel] < 180 && (a2>90 && a2 <270)) ||
+ (Da.angle[sel] > 180 && (a2<90 || a2 >270))) {
+ Da.extendSeg[sel].u.c.a0 = a2;
+ Da.extendSeg[sel].u.c.a1 = NormalizeAngle(a-a2);
+ } else {
+ Da.extendSeg[sel].u.c.a0 = a;
+ Da.extendSeg[sel].u.c.a1 = NormalizeAngle(a2-a);
+ }
+ if (Da.extendSeg[sel].u.c.a1 == 0.0 || Da.extendSeg[sel].u.c.a1 >180
+ || (Da.extendSeg[sel].u.c.a0 >= Da.arcA0[sel] && Da.extendSeg[sel].u.c.a0 < Da.arcA0[sel]+Da.arcA1[sel]
+ && Da.extendSeg[sel].u.c.a0 + Da.extendSeg[sel].u.c.a1 <= Da.arcA0[sel] + Da.arcA1[sel])
+ ) {
+ Da.extend[sel] = FALSE;
+ Da.pos[sel] = pos;
+ } else {
+ Da.extend[sel] = TRUE;
+ Da.pos[sel] = pos;
+ }
+
+ } else { //Bezier and Cornu that we are joining TO can't extend
+ wBeep();
+ InfoMessage(_("Can't extend connected Bezier or Cornu"));
+ pos = GetTrkEndPos(Da.trk[sel],Da.ep[sel]);
+ return C_CONTINUE;
}
- if (Da.extendSeg[sel].u.c.a1 == 0.0 || Da.extendSeg[sel].u.c.a1 >180
- || (Da.extendSeg[sel].u.c.a0 >= Da.arcA0[sel] && Da.extendSeg[sel].u.c.a0 < Da.arcA0[sel]+Da.arcA1[sel]
- && Da.extendSeg[sel].u.c.a0 + Da.extendSeg[sel].u.c.a1 <= Da.arcA0[sel] + Da.arcA1[sel])
- ) {
- Da.extend[sel] = FALSE;
- Da.pos[sel] = pos;
- } else {
- Da.extend[sel] = TRUE;
- Da.pos[sel] = pos;
+ } else Da.pos[sel] = pos;
+ }
+ } else if (Da.selectMidPoint >=0){
+ DYNARR_N(coOrd,Da.mid_points,Da.selectMidPoint) = pos;
+ } else if (Da.selectEndHandle >=0) { //Cornu has no end, so has handles
+ int end = Da.selectEndHandle/2;
+ if (Da.selectEndHandle%2 == 0) { //Radius
+ coOrd p0 = Da.pos[end]; //Start
+ coOrd p1 = Da.endHandle[end].end_curve; //End
+ ANGLE_T a0 = FindAngle( p1, p0 );
+ DIST_T d0 = FindDistance( p0, p1 )/2.0; //Distance to Middle of Chord
+ coOrd pos2 = pos; //New pos
+ Rotate( &pos2, p1, -a0 );
+ pos2.x -= p1.x; //Deflection at right angles to Chord
+ DIST_T r = 1000.0;
+ if ( fabs(pos2.x) >= 0.01 ) { //Not zero
+ double d2 = sqrt( d0*d0 + pos2.x*pos2.x )/2.0;
+ r = d2*d2*2.0/pos2.x;
+ if ( fabs(r) > 1000.0 ) { //Limit Radius
+ r = 0.0;
+ //r = ((r > 0) ? 1 : -1 ) *1000.0;
}
-
- } else { //Bezier and Cornu that we are joining TO can't extend
- DrawTempCornu(); //put back
- wBeep();
- InfoMessage(_("Can't extend connected Bezier or Cornu"));
- pos = GetTrkEndPos(Da.trk[sel],Da.ep[sel]);
- return C_CONTINUE;
+ } else {
+ r = 0.0;
+ //r = ((r > 0) ? 1 : -1 ) *1000.0;
}
+ coOrd posx; //Middle of chord
+ posx.x = (p1.x-p0.x)/2.0 + p0.x;
+ posx.y = (p1.y-p0.y)/2.0 + p0.y;
+ a0 -= 90.0;
+ if (r<0) { //Negative radius means other side
+ coOrd pt = p0;
+ p0 = p1;
+ p1 = pt;
+ a0 += 180.0;
+ }
+ coOrd pc;
+ if (r == 0.0) {
+ Da.center[end] = zero;
+ Da.radius[end] = 0.0;
+ Da.angle[end] = FindAngle(Da.pos[end],Da.endHandle[end].end_curve);
+ } else {
+ Translate( &pc, posx, a0, fabs(r) - fabs(pos2.x) ); //Move Radius less Deflection to get to center
+ Da.center[end] = pc;
+ if (DifferenceBetweenAngles(FindAngle(Da.center[end],Da.pos[end]),FindAngle(Da.center[end],Da.endHandle[end].end_curve))>0.0)
+ Da.angle[end] = NormalizeAngle(FindAngle(Da.center[end],Da.pos[end])+90.0);
+ else
+ Da.angle[end] = NormalizeAngle(FindAngle(Da.center[end],Da.pos[end])-90.0);
+ Da.radius[end] = fabs(r);
+ }
+ } else {
+ Da.angle[end] = FindAngle(Da.pos[end],pos);
+ Da.radius[end] = 0.0;
+ Translate(&Da.center[end],Da.pos[end],NormalizeAngle(Da.angle[end]+90.0),Da.radius[end]);
}
}
-
- CreateBothEnds(Da.selectPoint);
+ CreateBothEnds(Da.selectEndPoint,Da.selectMidPoint,Da.selectEndHandle,Da.prevSelected);
SetUpCornuParms(&cp); //In case we want to use these because the ends are not on the track
-
- if (CallCornu(Da.pos, Da.trk, Da.ep, &Da.crvSegs_da,&cp)) Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
+ if (CallCornuM(Da.mid_points,Da.ends,Da.pos,&cp,&Da.crvSegs_da,TRUE)) Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
else Da.crvSegs_da_cnt = 0;
+ for (int i=0;i<2;i++) {
+ if (Da.trk[i] || Da.ends[i]) continue;
+ coOrd p = Da.pos[i];
+ Da.angle[i] = NormalizeAngle((i?0:180)+GetAngleSegs( Da.crvSegs_da_cnt, Da.crvSegs_da.ptr, &p, NULL, NULL, NULL, NULL, NULL));
+ Da.radius[i] = 0.0;
+ }
Da.minRadius = CornuMinRadius(Da.pos,Da.crvSegs_da);
DIST_T rin = Da.radius[0];
InfoMessage( _("Cornu : Min Radius=%s MaxRateofCurveChange/Scale=%s Length=%s Winding Arc=%s"),
@@ -731,25 +1580,121 @@ EXPORT STATUS_T AdjustCornuCurve(
FormatFloat(CornuMaxRateofChangeofCurvature(Da.pos,Da.crvSegs_da,&rin)*GetScaleRatio(GetLayoutCurScale())),
FormatDistance(CornuLength(Da.pos,Da.crvSegs_da)),
FormatDistance(CornuTotalWindingArc(Da.pos,Da.crvSegs_da)));
- DrawTempCornu();
return C_CONTINUE;
case C_UP:
- if (Da.state != POINT_PICKED) return C_CONTINUE;
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ if (Da.state != POINT_PICKED) {
+ Da.state = PICK_POINT;
+ return C_CONTINUE;
+ }
ep = 0;
- DrawTempCornu(); //wipe out
- Da.selectPoint = -1;
- CreateBothEnds(Da.selectPoint);
+ if (Da.selectMidPoint!=-1) Da.prevSelected = Da.selectMidPoint;
+ else if (Da.selectEndPoint!=-1) {
+ if (!Da.trk[Da.selectEndPoint] &&
+ (t=OnTrack(&pos,FALSE,TRUE)) != NULL && t != Da.selectTrack ) {
+ EPINX_T ep = PickUnconnectedEndPoint(pos,t);
+ if (ep>=0) {
+ if (QueryTrack(t,Q_HAS_VARIABLE_ENDPOINTS)) { //Circle/Helix find if there is an open slot and where
+ if ((GetTrkEndTrk(t,0) != NULL) && (GetTrkEndTrk(t,1) != NULL)) {
+ InfoMessage(_("Helix Already Connected"));
+ return C_CONTINUE;
+ }
+ ep = -1; //Not a real ep yet
+ } else ep = PickUnconnectedEndPointSilent(pos, t); //EP
+ if (ep>=0 && QueryTrack(t,Q_CAN_ADD_ENDPOINTS)) {
+ ep=-1; //Don't attach to Turntable
+ trackParams_t tp;
+ if (!GetTrackParams(PARAMS_CORNU, t, pos, &tp)) return C_CONTINUE;
+ ANGLE_T a = tp.angle;
+ Translate(&pos,tp.ttcenter,a,tp.ttradius);
+ }
+ if ( ep==-1 && (!QueryTrack(t,Q_CAN_ADD_ENDPOINTS) && !QueryTrack(t,Q_HAS_VARIABLE_ENDPOINTS))) { //No endpoints and not Turntable or Helix/Circle
+ wBeep();
+ InfoMessage(_("No Valid end point on that track"));
+ return C_CONTINUE;
+ }
+ if (GetTrkScale(t) != (char)GetLayoutCurScale()) {
+ wBeep();
+ InfoMessage(_("Track is different scale"));
+ return C_CONTINUE;
+ }
+ }
+ if (ep>=0 && t) { //Real end point, real track
+ Da.trk[Da.selectEndPoint] = t;
+ Da.ep[Da.selectEndPoint] = ep; // Note: -1 for Turntable or Circle
+ pos = GetTrkEndPos(t,ep);
+ Da.pos[Da.selectEndPoint] = pos;
+ if (!GetConnectedTrackParms(t,pos,Da.selectEndPoint,ep,FALSE)) return C_CONTINUE;
+ }
+ } else {
+ cornuModCmdContext.angle = NormalizeAngle(Da.angle[Da.selectEndPoint]);
+ cornuModCmdContext.radius = Da.radius[Da.selectEndPoint];
+ if (DifferenceBetweenAngles(FindAngle(Da.center[Da.selectEndPoint],Da.pos[Da.selectEndPoint]),Da.angle[Da.selectEndPoint])<0.0)
+ cornuModCmdContext.radius = -cornuModCmdContext.radius;
+ controls[0] = cornuModEndRadiusPD.control;
+ controls[1] = cornuModEndAnglePD.control;
+ controls[2] = NULL;
+ labels[0] = N_("End Radius");
+ labels[1] = N_("End Angle");
+ ParamLoadControls( &cornuModPG );
+ InfoSubstituteControls( controls, labels );
+ cornuModEndRadiusPD.option &= ~PDO_NORECORD;
+ cornuModEndAnglePD.option &= ~PDO_NORECORD;
+ infoSubst = TRUE;
+ Da.prevSelected = Da.selectEndPoint;
+ Da.selectEndHandle = -1;
+ }
+ } else if (Da.selectEndHandle!=-1) {
+ Da.prevSelected = Da.selectEndHandle>2?1:0;
+ cornuModCmdContext.angle = NormalizeAngle(Da.angle[Da.prevSelected]);
+ cornuModCmdContext.radius = Da.radius[Da.prevSelected];
+ if (DifferenceBetweenAngles(FindAngle(Da.center[Da.prevSelected],Da.pos[Da.prevSelected]),Da.angle[Da.prevSelected])<0.0)
+ cornuModCmdContext.radius = -cornuModCmdContext.radius;
+ controls[0] = cornuModEndRadiusPD.control;
+ controls[1] = cornuModEndAnglePD.control;
+ controls[2] = NULL;
+ labels[0] = N_("End Radius");
+ labels[1] = N_("End Angle");
+ ParamLoadControls( &cornuModPG );
+ InfoSubstituteControls( controls, labels );
+ cornuModEndRadiusPD.option &= ~PDO_NORECORD;
+ cornuModEndAnglePD.option &= ~PDO_NORECORD;
+ infoSubst = TRUE;
+ Da.selectEndHandle = -1;
+ }
+ Da.selectEndPoint = -1; Da.selectMidPoint = -1;
+ CreateBothEnds(Da.selectEndPoint,Da.selectMidPoint,Da.selectEndHandle,Da.prevSelected);
SetUpCornuParms(&cp);
- if (CallCornu(Da.pos,Da.trk,Da.ep,&Da.crvSegs_da,&cp)) Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
+ if (CallCornuM(Da.mid_points,Da.ends,Da.pos,&cp,&Da.crvSegs_da,TRUE)) Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
else Da.crvSegs_da_cnt = 0;
Da.minRadius = CornuMinRadius(Da.pos,Da.crvSegs_da);
- InfoMessage(_("Pick on point to adjust it along track - Enter to confirm, ESC to abort"));
- DrawTempCornu();
+ InfoMessage(_("Pick on point to adjust it along track - Delete to remove, Enter to confirm, ESC to abort"));
Da.state = PICK_POINT;
return C_CONTINUE;
+ case C_TEXT:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ //Delete or backspace deletes last selected index
+ if (action>>8 == 127 || action>>8 == 8) {
+ if ((Da.state == PICK_POINT) && Da.prevSelected !=-1) {
+ for (int i=Da.prevSelected;i<Da.mid_points.cnt;i++) {
+ DYNARR_N(coOrd,Da.mid_points,i) = DYNARR_N(coOrd,Da.mid_points,i+1);
+ }
+ Da.mid_points.cnt--;
+ }
+ Da.prevSelected = -1;
+ CreateBothEnds(Da.selectEndPoint,Da.selectMidPoint,Da.selectEndHandle,Da.prevSelected);
+ cornuParm_t cp;
+ SetUpCornuParms(&cp);
+ if (CallCornuM(Da.mid_points,Da.ends,Da.pos,&cp,&Da.crvSegs_da,TRUE)) Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
+ else Da.crvSegs_da_cnt = 0;
+ return C_CONTINUE;
+ }
+ return C_CONTINUE;
+
case C_OK: //C_OK is not called by Modify.
+ DYNARR_RESET(trkSeg_t,anchors_da);
if ( Da.state == PICK_POINT ) {
Da.minRadius = CornuMinRadius(Da.pos,Da.crvSegs_da);
if (CornuTotalWindingArc(Da.pos,Da.crvSegs_da)>4*360) {
@@ -762,63 +1707,109 @@ EXPORT STATUS_T AdjustCornuCurve(
return C_CONTINUE;
}
for (int i=0;i<2;i++) {
- if (!(QueryTrack(Da.trk[i],Q_CAN_ADD_ENDPOINTS))) { // Not Turntable
+ if (Da.trk[i] && !(QueryTrack(Da.trk[i],Q_CAN_ADD_ENDPOINTS))) { // Not Turntable
if (FindDistance(Da.pos[i],GetTrkEndPos(Da.trk[i],1-Da.ep[i])) < minLength) {
wBeep();
- InfoMessage(_("Cornu end %d too close to other end of connect track - reposition it"),i+1);
+ InfoMessage(_("Cornu point %d too close to other end of connect track - reposition it"),i+1);
return C_CONTINUE;
}
}
}
-
- DrawTempCornu();
- UndoStart( _("Create Cornu"),"newCornu curve");
- t = NewCornuTrack( Da.pos, Da.center, Da.angle, Da.radius,(trkSeg_p)Da.crvSegs_da.ptr, Da.crvSegs_da.cnt);
- if (t==NULL) {
- wBeep();
- InfoMessage(_("Cornu Create Failed for p1[%0.3f,%0.3f] p2[%0.3f,%0.3f], c1[%0.3f,%0.3f] c2[%0.3f,%0.3f], a1=%0.3f a2=%0.3f, r1=%s r2=%s"),
- Da.pos[0].x,Da.pos[0].y,
- Da.pos[1].x,Da.pos[1].y,
- Da.center[0].x,Da.center[0].y,
- Da.center[1].x,Da.center[1].y,
- Da.angle[0],Da.angle[1],
- FormatDistance(Da.radius[0]),FormatDistance(Da.radius[1]));
- return C_TERMINATE;
+ UndoStart( _("Create Cornu"),"newCornu curves");
+ BOOL_T end_point[2];
+ end_point[0] = TRUE;
+ end_point[1] = FALSE;
+ coOrd sub_pos[2];
+ sub_pos[0] = Da.pos[0];
+ if (Da.radius[0] == -1) end_point[0] = FALSE;
+ track_p first_trk= NULL,trk1=NULL,trk2 = NULL;
+
+ for (int i=0;i<Da.mid_points.cnt;i++) {
+ sub_pos[1] = DYNARR_N(coOrd,Da.mid_points,i);
+ if ((trk1 = CreateCornuFromPoints(sub_pos,end_point))== NULL) return C_TERMINATE;
+ if (Da.trk[0]) {
+ CopyAttributes( Da.trk[0], trk1 );
+ } else if (Da.trk[1]) {
+ CopyAttributes( Da.trk[1], trk1 );
+ } else {
+ SetTrkScale( trk1, GetLayoutCurScale() );
+ SetTrkBits( trk1, TB_HIDEDESC );
+ }
+ DrawNewTrack(trk1);
+ if (first_trk == NULL) first_trk = trk1;
+ if (trk2) ConnectTracks(trk1,0,trk2,1);
+ trk2 = trk1;
+ end_point[0] = FALSE;
+ sub_pos[0] = DYNARR_N(coOrd,Da.mid_points,i);
}
-
- CopyAttributes( Da.trk[0], t );
+ sub_pos[1] = Da.pos[1];
+ end_point[1] = TRUE;
+ if (Da.radius[1] == -1) end_point[1] = FALSE;
+ if ((trk1 = CreateCornuFromPoints(sub_pos,end_point)) == NULL) return C_TERMINATE;
+ if (Da.trk[0]) {
+ CopyAttributes( Da.trk[0], trk1 );
+ } else if (Da.trk[1]){
+ CopyAttributes( Da.trk[1], trk1 );
+ } else {
+ SetTrkScale( trk1, GetLayoutCurScale() );
+ SetTrkBits( trk1, TB_HIDEDESC );
+ }
+ if (trk2) ConnectTracks(trk1,0,trk2,1);
+ if (first_trk == NULL) first_trk = trk1;
+ //t = NewCornuTrack( Da.pos, Da.center, Da.angle, Da.radius,(trkSeg_p)Da.crvSegs_da.ptr, Da.crvSegs_da.cnt);
for (int i=0;i<2;i++) {
- UndoModify(Da.trk[i]);
- MoveEndPt(&Da.trk[i],&Da.ep[i],Da.pos[i],0);
- if ((GetTrkType(Da.trk[i])==T_BEZIER) || (GetTrkType(Da.trk[i])==T_CORNU)) { //Bezier split position not precise, so readjust Cornu
- GetConnectedTrackParms(Da.trk[i],GetTrkEndPos(Da.trk[i],Da.ep[i]),i,Da.ep[i]);
+ if (Da.trk[i]) {
+ UndoModify(Da.trk[i]);
+ MoveEndPt(&Da.trk[i],&Da.ep[i],Da.pos[i],0);
+ //End position not precise, so readjust Cornu
+ GetConnectedTrackParms(Da.trk[i],GetTrkEndPos(Da.trk[i],Da.ep[i]),i,Da.ep[i],FALSE);
ANGLE_T endAngle = NormalizeAngle(GetTrkEndAngle(Da.trk[i],Da.ep[i])+180);
- SetCornuEndPt(t,i,GetTrkEndPos(Da.trk[i],Da.ep[i]),Da.center[i],endAngle,Da.radius[i]);
+ SetCornuEndPt(i==0?first_trk:trk1,i,GetTrkEndPos(Da.trk[i],Da.ep[i]),Da.center[i],endAngle,Da.radius[i]);
+ if (Da.ep[i]>=0)
+ ConnectTracks(Da.trk[i],Da.ep[i],i==0?first_trk:trk1,i);
}
- if (Da.ep[i]>=0)
- ConnectTracks(Da.trk[i],Da.ep[i],t,i);
}
UndoEnd();
- DrawNewTrack(t);
+ if (infoSubst) {
+ InfoSubstituteControls( NULL, NULL );
+ infoSubst = FALSE;
+ }
Da.state = NONE;
- MainRedraw();
- MapRedraw();
return C_TERMINATE;
}
return C_CONTINUE;
case C_REDRAW:
+ if (Da.state == NONE) return C_CONTINUE;
DrawTempCornu();
+ if (anchors_da.cnt) {
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
+ }
return C_CONTINUE;
+ case C_CANCEL:
+ case C_FINISH:
+ break;
default:
return C_CONTINUE;
}
+ return C_CONTINUE;
}
+static void cornuModDlgUpdate(
+ paramGroup_p pg,
+ int inx,
+ void * valueP )
+{
+ AdjustCornuCurve(C_UPDATE, zero, InfoMessage);
+ ParamLoadControl(&cornuModPG,cornuModEndRadius); // Make sure Radius updated
+ ParamLoadControl(&cornuModPG,cornuModEndAngle); //Relative Angle as well
+ TempRedraw();
+
+}
/**
* CmdCornuModify
@@ -835,11 +1826,12 @@ EXPORT STATUS_T AdjustCornuCurve(
*
*/
STATUS_T CmdCornuModify (track_p trk, wAction_t action, coOrd pos, DIST_T trackG ) {
- track_p t;
struct extraData *xx = GetTrkExtraData(trk);
Da.trackGauge = trackG;
+ Da.commandType = CORNU_MODIFY;
+
switch (action&0xFF) {
case C_START:
Da.state = NONE;
@@ -847,42 +1839,90 @@ STATUS_T CmdCornuModify (track_p trk, wAction_t action, coOrd pos, DIST_T trackG
Da.ep1Segs_da_cnt = 0;
Da.ep2Segs_da_cnt = 0;
Da.crvSegs_da_cnt = 0;
+ Da.midSegs.cnt = 0;
Da.extend[0] = FALSE;
Da.extend[1] = FALSE;
- Da.selectPoint = -1;
+ Da.selectEndPoint = -1;
Da.selectTrack = NULL;
+ DYNARR_RESET(coOrd,Da.mid_points);
+ DYNARR_RESET(track_p,Da.tracks);
Da.selectTrack = trk;
+ DYNARR_APPEND(track_p,Da.tracks,1);
+ DYNARR_LAST(track_p,Da.tracks) = trk;
Da.trk[0] = GetTrkEndTrk( trk, 0 );
+ track_p prior = trk;
if (Da.trk[0]) Da.ep[0] = GetEndPtConnectedToMe(Da.trk[0],trk);
- Da.trk[1] = GetTrkEndTrk( trk, 1 );
- if (Da.trk[1]) Da.ep[1] = GetEndPtConnectedToMe(Da.trk[1],trk);
+ EPINX_T ep0 = 0;
+ //Move down the LHS adding tracks until no more Cornu
+ while (Da.trk[0] && QueryTrack(Da.trk[0],Q_IS_CORNU)) {
+ prior = Da.trk[0];
+ ep0 = 1-Da.ep[0];
+ DYNARR_APPEND(track_p,Da.tracks,1);
+ DYNARR_LAST(track_p,Da.tracks) = prior;
+ DYNARR_APPEND(coOrd,Da.mid_points,1);
+ for (int i=Da.mid_points.cnt-1;i>0;i--) {
+ DYNARR_N(coOrd,Da.mid_points,i) = DYNARR_N(coOrd,Da.mid_points,i-1);
+ }
+ DYNARR_N(coOrd,Da.mid_points,0) = GetTrkEndPos(prior,1-ep0);
+ Da.trk[0] = GetTrkEndTrk( prior, ep0 );
+ if (Da.trk[0]) Da.ep[0] = GetEndPtConnectedToMe(Da.trk[0],prior);
+ else Da.ep[0] = -1;
+ }
+ if (prior) {
+ struct extraData *xx0 = GetTrkExtraData(prior);
+ Da.pos[0] = xx0->cornuData.pos[ep0]; //Copy parms from FIRST CORNU trk
+ Da.radius[0] = xx0->cornuData.r[ep0];
+ Da.angle[0] = xx0->cornuData.a[ep0];
+ Da.center[0] = xx0->cornuData.c[ep0];
+ }
- for (int i=0;i<2;i++) {
- Da.pos[i] = xx->cornuData.pos[i]; //Copy parms from old trk
- Da.radius[i] = xx->cornuData.r[i];
- Da.angle[i] = xx->cornuData.a[i];
- Da.center[i] = xx->cornuData.c[i];
- }
+ //Move to RHS
+ Da.trk[1] = GetTrkEndTrk( trk, 1 );
+ track_p next = trk;
+ EPINX_T ep1 = 1;
+ if (Da.trk[1]) Da.ep[1] = GetEndPtConnectedToMe(Da.trk[1],trk);
+ //Move down RHS adding tracks until no more Cornu
+ while (Da.trk[1] && QueryTrack(Da.trk[1],Q_IS_CORNU)) {
+ next = Da.trk[1];
+ ep1 = 1-Da.ep[1];
+ DYNARR_APPEND(track_p,Da.tracks,1);
+ DYNARR_LAST(track_p,Da.tracks) = next;
+ DYNARR_APPEND(coOrd,Da.mid_points,1);
+ DYNARR_LAST(coOrd,Da.mid_points) = GetTrkEndPos(next,1-ep1);
+ Da.trk[1] = GetTrkEndTrk( next, ep1 );
+ if (Da.trk[1]) Da.ep[1] = GetEndPtConnectedToMe(Da.trk[1],next);
+ }
- if ((Da.trk[0] && (!QueryTrack(Da.trk[0],Q_CORNU_CAN_MODIFY) && !QueryTrack(Da.trk[0],Q_CAN_EXTEND))) &&
- (Da.trk[1] && (!QueryTrack(Da.trk[1],Q_CORNU_CAN_MODIFY) && !QueryTrack(Da.trk[1],Q_CAN_EXTEND)))) {
- wBeep();
- ErrorMessage("Both Ends of this Cornu are UnAdjustable");
- return C_TERMINATE;
- }
+ if (next) {
+ struct extraData *xx1 = GetTrkExtraData(next);
+ Da.pos[1] = xx1->cornuData.pos[ep1]; //Copy parms from LAST CORNU trk
+ Da.radius[1] = xx1->cornuData.r[ep1];
+ Da.angle[1] = xx1->cornuData.a[ep1];
+ Da.center[1] = xx1->cornuData.c[ep1];
+ }
- InfoMessage(_("Track picked - now select a Point"));
+ InfoMessage(_("Now Select or Add (+Shift) a Point"));
Da.state = TRACK_SELECTED;
- DrawTrack(Da.selectTrack,&mainD,wDrawColorWhite); //Wipe out real track, draw replacement
+ for (int i=0;i<Da.tracks.cnt;i++) {
+ DrawTrack(DYNARR_N(track_p,Da.tracks,i),&mainD,wDrawColorWhite); //Wipe out real tracks, draw replacement
+ }
return AdjustCornuCurve(C_START, pos, InfoMessage);
+ case wActionMove:
+ return AdjustCornuCurve(wActionMove, pos, InfoMessage);
+ break;
+
case C_DOWN:
if (Da.state == TRACK_SELECTED) return C_CONTINUE; //Ignore until first up
return AdjustCornuCurve(C_DOWN, pos, InfoMessage);
+ case C_LCLICK:
+ if (Da.state == TRACK_SELECTED) return C_CONTINUE; //Ignore until first up
+ AdjustCornuCurve(C_DOWN, pos, InfoMessage);
+ return AdjustCornuCurve(C_UP, pos, InfoMessage);
case C_MOVE:
if (Da.state == TRACK_SELECTED) return C_CONTINUE; //Ignore until first up and down
@@ -895,10 +1935,19 @@ STATUS_T CmdCornuModify (track_p trk, wAction_t action, coOrd pos, DIST_T trackG
return AdjustCornuCurve(C_UP, pos, InfoMessage); //Run Adjust
case C_TEXT:
- if ((action>>8) != 32)
+ //Delete or backspace deletes last selected index
+ if (action>>8 == 127 || action>>8 == 8) {
+ return AdjustCornuCurve(action, pos, InfoMessage);
+ }
+ //Space bar or enter means done
+ if ( (action>>8 != ' ') && (action>>8 != 13) )
return C_CONTINUE;
/* no break */
case C_OK:
+ if (infoSubst) {
+ InfoSubstituteControls( NULL, NULL );
+ infoSubst = FALSE;
+ }
if (Da.state != PICK_POINT) { //Too early - abandon
InfoMessage(_("No changes made"));
Da.state = NONE;
@@ -928,23 +1977,59 @@ STATUS_T CmdCornuModify (track_p trk, wAction_t action, coOrd pos, DIST_T trackG
} else {
Da.trk[i] = NewCurvedTrack(Da.extendSeg[i].u.c.center,fabs(Da.extendSeg[i].u.c.radius),
Da.extendSeg[i].u.c.a0,Da.extendSeg[i].u.c.a1,FALSE);
-
- if (Da.angle[i]>180)
- Da.ep[i] = (Da.extendSeg[i].u.c.a0>90 && Da.extendSeg[i].u.c.a0<270)?0:1;
- else
- Da.ep[i] = (Da.extendSeg[i].u.c.a0>90 && Da.extendSeg[i].u.c.a0<270)?1:0;
+ if (FindDistance(GetTrkEndPos(Da.trk[i],0),Da.pos[i])<=connectDistance) {
+ Da.ep[i] = 0;
+ } else Da.ep[i] = 1;
}
if (!Da.trk[i]) {
wBeep();
InfoMessage(_("Cornu Extension Create Failed for end %d"),i);
+ Da.state = NONE;
return C_TERMINATE;
}
}
}
-
- t = NewCornuTrack( Da.pos, Da.center, Da.angle, Da.radius, (trkSeg_p)Da.crvSegs_da.ptr, Da.crvSegs_da.cnt);
- if (t==NULL) {
+ BOOL_T end_point[2];
+ end_point[0] = TRUE;
+ end_point[1] = FALSE;
+ coOrd sub_pos[2];
+ sub_pos[0] = Da.pos[0];
+
+ track_p first_trk= NULL,trk1=NULL,trk2 = NULL;
+ for (int i=0;i<Da.mid_points.cnt;i++) {
+ sub_pos[1] = DYNARR_N(coOrd,Da.mid_points,i);
+ if ((trk1 = CreateCornuFromPoints(sub_pos, end_point))== NULL) {
+ wBeep();
+ InfoMessage(_("Cornu Create Failed for p1[%0.3f,%0.3f] p2[%0.3f,%0.3f], c1[%0.3f,%0.3f] c2[%0.3f,%0.3f], a1=%0.3f a2=%0.3f, r1=%s r2=%s"),
+ Da.pos[0].x,Da.pos[0].y,
+ Da.pos[1].x,Da.pos[1].y,
+ Da.center[0].x,Da.center[0].y,
+ Da.center[1].x,Da.center[1].y,
+ Da.angle[0],Da.angle[1],
+ FormatDistance(Da.radius[0]),FormatDistance(Da.radius[1]));
+ UndoUndo();
+ Da.state = NONE;
+ return C_TERMINATE;
+ }
+ if (Da.trk[0]) {
+ CopyAttributes( Da.trk[0], trk1 );
+ } else if (Da.trk[1]) {
+ CopyAttributes( Da.trk[1], trk1 );
+ } else {
+ SetTrkScale( trk1, GetLayoutCurScale() );
+ SetTrkBits( trk1, TB_HIDEDESC );
+ }
+ DrawNewTrack(trk1);
+ if (first_trk == NULL) first_trk = trk1;
+ if (trk2) ConnectTracks(trk1,0,trk2,1);
+ trk2 = trk1;
+ end_point[0] = FALSE;
+ sub_pos[0] = DYNARR_N(coOrd,Da.mid_points,i);
+ }
+ sub_pos[1] = Da.pos[1];
+ end_point[1] = TRUE;
+ if ((trk1 = CreateCornuFromPoints(sub_pos,end_point)) == NULL) {
wBeep();
InfoMessage(_("Cornu Create Failed for p1[%0.3f,%0.3f] p2[%0.3f,%0.3f], c1[%0.3f,%0.3f] c2[%0.3f,%0.3f], a1=%0.3f a2=%0.3f, r1=%s r2=%s"),
Da.pos[0].x,Da.pos[0].y,
@@ -954,15 +2039,26 @@ STATUS_T CmdCornuModify (track_p trk, wAction_t action, coOrd pos, DIST_T trackG
Da.angle[0],Da.angle[1],
FormatDistance(Da.radius[0]),FormatDistance(Da.radius[1]));
UndoUndo();
- MainRedraw();
- MapRedraw();
- //DYNARR_FREE(trkSeg_t,Da.crvSegs_da);
+ Da.state = NONE;
return C_TERMINATE;
}
+ DrawNewTrack(trk1);
+ if (Da.trk[0]) {
+ CopyAttributes( Da.trk[0], trk1 );
+ } else if (Da.trk[1]) {
+ CopyAttributes( Da.trk[1], trk1 );
+ } else {
+ SetTrkScale( trk1, GetLayoutCurScale() );
+ SetTrkBits( trk1, TB_HIDEDESC );
+ }
+ if (trk2) ConnectTracks(trk1,0,trk2,1);
+ if (first_trk == NULL) first_trk = trk1;
- CopyAttributes( trk, t );
+ Da.state = NONE; //Must do before Delete
- DeleteTrack(trk, TRUE);
+ for (int i=0;i<Da.tracks.cnt;i++) {
+ DeleteTrack(DYNARR_N(track_p,Da.tracks,i), TRUE);
+ }
if (Da.trk[0]) UndoModify(Da.trk[0]);
if (Da.trk[1]) UndoModify(Da.trk[1]);
@@ -970,13 +2066,12 @@ STATUS_T CmdCornuModify (track_p trk, wAction_t action, coOrd pos, DIST_T trackG
for (int i=0;i<2;i++) { //Attach new track
if (Da.trk[i] && Da.ep[i] != -1) { //Like the old track
if (MoveEndPt(&Da.trk[i],&Da.ep[i],Da.pos[i],0)) {
- if (GetTrkType(Da.trk[i])==T_BEZIER) { //Bezier split position not precise, so readjust Cornu
- GetConnectedTrackParms(Da.trk[i],GetTrkEndPos(Da.trk[i],Da.ep[i]),i,Da.ep[i]);
- ANGLE_T endAngle = NormalizeAngle(GetTrkEndAngle(Da.trk[i],Da.ep[i])+180);
- SetCornuEndPt(t,i,GetTrkEndPos(Da.trk[i],Da.ep[i]),Da.center[i],endAngle,Da.radius[i]);
- }
+ //Bezier split position not precise, so readjust Cornu
+ GetConnectedTrackParms(Da.trk[i],GetTrkEndPos(Da.trk[i],Da.ep[i]),i,Da.ep[i],FALSE);
+ ANGLE_T endAngle = NormalizeAngle(GetTrkEndAngle(Da.trk[i],Da.ep[i])+180);
+ SetCornuEndPt(i==0?first_trk:trk1,i,GetTrkEndPos(Da.trk[i],Da.ep[i]),Da.center[i],endAngle,Da.radius[i]);
if (Da.ep[i]>= 0)
- ConnectTracks(t,i,Da.trk[i],Da.ep[i]);
+ ConnectTracks(i==0?first_trk:trk1,i,Da.trk[i],Da.ep[i]);
} else {
UndoUndo();
wBeep();
@@ -986,18 +2081,18 @@ STATUS_T CmdCornuModify (track_p trk, wAction_t action, coOrd pos, DIST_T trackG
}
}
UndoEnd();
- MainRedraw();
- MapRedraw();
Da.state = NONE;
- //DYNARR_FREE(trkSeg_t,Da.crvSegs_da);
+ //DYNARR_FREE(trkSeg_t,Da.crvSegs_da)
return C_TERMINATE;
case C_CANCEL:
InfoMessage(_("Modify Cornu Cancelled"));
Da.state = NONE;
+ if (infoSubst) {
+ InfoSubstituteControls( NULL, NULL );
+ infoSubst = FALSE;
+ }
//DYNARR_FREE(trkSeg_t,Da.crvSegs_da);
- MainRedraw();
- MapRedraw();
return C_TERMINATE;
case C_REDRAW:
@@ -1028,6 +2123,22 @@ DIST_T CornuLength(coOrd pos[4],dynArr_t segs) {
return dd;
}
+DIST_T CornuOffsetLength(dynArr_t segs, double offset) {
+ DIST_T dd = 0.0;
+ if (segs.cnt == 0 ) return dd;
+ for (int i = 0;i<segs.cnt;i++) {
+ trkSeg_t t = DYNARR_N(trkSeg_t, segs, i);
+ if (t.type == SEG_CRVTRK || t.type == SEG_CRVLIN) {
+ dd += fabs((t.u.c.radius+(t.u.c.radius>0?offset:-offset))*D2R(t.u.c.a1));
+ } else if (t.type == SEG_BEZLIN || t.type == SEG_BEZTRK) {
+ dd +=CornuOffsetLength(t.bezSegs,offset);
+ } else if (t.type == SEG_STRLIN || t.type == SEG_STRTRK ) {
+ dd += FindDistance(t.u.l.pos[0],t.u.l.pos[1]);
+ }
+ }
+ return dd;
+}
+
DIST_T CornuMinRadius(coOrd pos[4],dynArr_t segs) {
DIST_T r = 100000.0, rr;
if (segs.cnt == 0 ) return r;
@@ -1081,6 +2192,9 @@ DIST_T CornuMaxRateofChangeofCurvature(coOrd pos[4], dynArr_t segs, DIST_T * las
return r_max;
}
+
+
+
/*
* Create a Cornu Curve Track
* Sequence is
@@ -1091,167 +2205,359 @@ DIST_T CornuMaxRateofChangeofCurvature(coOrd pos[4], dynArr_t segs, DIST_T * las
*/
STATUS_T CmdCornu( wAction_t action, coOrd pos )
{
- track_p t;
+ track_p t = NULL;
cornuParm_t cp;
- Da.color = lineColor;
+ Da.commandType = CORNU_CREATE;
+
Da.width = (double)lineWidth/mainD.dpi;
Da.trackGauge = trackGauge;
+ Da.selectTrack = NULL;
switch (action&0xFF) {
case C_START:
+ Da.cmdType = (long)commandContext;
Da.state = NONE;
- Da. selectPoint = -1;
+ Da.selectEndPoint = -1;
+ Da.selectMidPoint = -1;
+ Da.endHandle[0].end_valid = FALSE;
+ Da.endHandle[1].end_valid = FALSE;
for (int i=0;i<2;i++) {
+ Da.ends[i] = FALSE;
Da.pos[i] = zero;
+ Da.angle[i] = 0.0;
+ Da.radius[i] = -1.0;
}
Da.trk[0] = Da.trk[1] = NULL;
//tempD.orig = mainD.orig;
-
DYNARR_RESET(trkSeg_t,Da.crvSegs_da);
Da.ep1Segs_da_cnt = 0;
Da.ep2Segs_da_cnt = 0;
+ Da.crvSegs_da_cnt = 0;
+ Da.midSegs.cnt = 0;
+ DYNARR_RESET(coOrd,Da.mid_points);
+ DYNARR_RESET(track_p,Da.tracks);
+ DYNARR_RESET(trkSeg_t,anchors_da);
Da.extend[0] = FALSE;
Da.extend[1] = FALSE;
- if (selectedTrackCount==0)
- InfoMessage( _("Left click - join with Cornu track") );
- else
- InfoMessage( _("Left click - join with Cornu track, Shift Left click - move to join") );
+ if (Da.cmdType == cornuCmdCreateTrack)
+ InfoMessage( _("Left click - Start Cornu track") );
+ else if (Da.cmdType == cornuCmdHotBar) {
+ InfoMessage( _("Left click - Place Flextrack") );
+ } else {
+ if (selectedTrackCount==0)
+ InfoMessage( _("Left click - join with Cornu track") );
+ else
+ InfoMessage( _("Left click - join with Cornu track, Shift Left click - move to join") );
+ }
return C_CONTINUE;
case C_DOWN:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if ( Da.state == NONE || Da.state == LOC_2) { //Set the first or second point
coOrd p = pos;
- int end = Da.state==NONE?0:1;
- EPINX_T ep;
- if ((t = OnTrack(&p, FALSE, TRUE)) != NULL) {
- if (QueryTrack(t,Q_HAS_VARIABLE_ENDPOINTS)) { //Circle/Helix find if there is an open slot and where
- if ((GetTrkEndTrk(t,0) != NULL) && (GetTrkEndTrk(t,1) != NULL)) {
+ t = NULL;
+ int end = 0;
+ if (Da.state != NONE) end=1;
+ EPINX_T ep = -1;
+ //Lock to endpoint if one is available and under pointer
+ if ((t = OnTrack(&p, FALSE, TRUE)) != NULL && t != Da.selectTrack) {
+ if (QueryTrack(t,Q_HAS_VARIABLE_ENDPOINTS)) { //Circle/Helix find if there is an open slot and where
+ if ((GetTrkEndTrk(t,0) != NULL) && (GetTrkEndTrk(t,1) != NULL)) {
+ wBeep();
InfoMessage(_("Helix Already Connected"));
- return C_CONTINUE;
+ t= NULL;
}
ep = -1; //Not a real ep yet
- } else ep = PickUnconnectedEndPointSilent(p, t);
- if (ep>=0 && QueryTrack(t,Q_CAN_ADD_ENDPOINTS)) ep=-1; //Ignore Turntable Unconnected
- else if (ep==-1 && (!QueryTrack(t,Q_CAN_ADD_ENDPOINTS) && !QueryTrack(t,Q_HAS_VARIABLE_ENDPOINTS))) { //No endpoints and not Turntable or Helix/Circle
- wBeep();
- InfoMessage(_("No Unconnected end point on that track"));
- return C_CONTINUE;
+ } else if (QueryTrack(t,Q_CAN_ADD_ENDPOINTS)) {
+ ep=-1; //Don't attach to existing Turntable ep
+ trackParams_t tp;
+ if (!GetTrackParams(PARAMS_CORNU, t, pos, &tp)) return C_CONTINUE;
+ ANGLE_T a = tp.angle;
+ Translate(&pos,tp.ttcenter,a,tp.ttradius);
+ p = pos; //Fix to wall of turntable initially
+ } else ep = PickUnconnectedEndPointSilent(p, t); //EP
+ if ( t && ep==-1 && (!QueryTrack(t,Q_CAN_ADD_ENDPOINTS) && !QueryTrack(t,Q_HAS_VARIABLE_ENDPOINTS))) { //No endpoints and not Turntable or Helix/Circle
+ wBeep();
+ InfoMessage(_("No valid open endpoint on that track"));
+ t = NULL;
+ }
+ if (t && GetTrkGauge(t) != GetScaleTrackGauge(GetLayoutCurScale())) {
+ wBeep();
+ InfoMessage(_("Track is different gauge"));
+ t = NULL;
}
+ }
+ if (ep>=0 && t) { //Real end point, real track
Da.trk[end] = t;
Da.ep[end] = ep; // Note: -1 for Turntable or Circle
- if (ep ==-1) pos = p;
- else pos = GetTrkEndPos(t,ep);
+ pos = GetTrkEndPos(t,ep);
Da.pos[end] = pos;
- InfoMessage( _("Place 2nd end point of Cornu track on track with an unconnected end-point") );
- } else {
+ Da.angle[end] = GetTrkEndAngle(t,ep);
+ } else if (t == NULL) { //end not on Track, OK for CreateCornu -> empty end point
+ pos = p; //Reset to initial
+ SnapPos( &pos );
+ if (Da.cmdType == cornuCmdCreateTrack || Da.cmdType == cornuCmdHotBar) {
+ Da.trk[end] = NULL;
+ Da.pos[end] = pos;
+ Da.radius[end] = -1.0; //No End Rad for open
+ if (Da.state == NONE ) {
+ Da.state = POS_1;
+ Da.angle[0] = 270.0;
+ Da.radius[0] = 0.0;
+ Da.ep1Segs_da_cnt = createEndPoint(Da.ep1Segs, Da.pos[0], FALSE,TRUE,TRUE,FALSE,Da.angle[0],Da.radius[0],zero,&Da.endHandle[0]);
+ Da.ep2Segs_da_cnt = 0;
+ InfoMessage( _("Drag arm in the direction of track") );
+ return C_CONTINUE;
+ }
+ Da.state = POS_2; //Now this is second end and it is open
+ Da.selectEndPoint = 1;
+ Da.mid_points.cnt=0;
+ Da.angle[1] = GetOpenAngle(Da.pos,Da.angle,1);
+ Da.radius[1] = 0.0;
+ CreateBothEnds(1,-1,-1,-1);
+ SetUpCornuParms(&cp);
+ if (CallCornuM(Da.mid_points,Da.ends,Da.pos,&cp,&Da.crvSegs_da,TRUE))
+ Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
+ InfoMessage( _("Drag arm in the direction of track") );
+ return C_CONTINUE;
+ }
wBeep();
- InfoMessage(_("No Unconnected Track End there"));
+ InfoMessage(_("No Unconnected Track End there")); //Not creating a Cornu - Join can't be open
return C_CONTINUE;
+ } else {
+ Da.pos[end] = p;
+ //Either a real end or a track but no end
}
if (Da.state == NONE) {
- if (!GetConnectedTrackParms(t, pos, 0, Da.ep[0])) {
+ if (!GetConnectedTrackParms(t, pos, 0, Da.ep[0],FALSE)) { //Must get parms
Da.trk[0] = NULL;
+ Da.ep[0] = -1;
+ wBeep();
+ InfoMessage(_("No Valid Track End there"));
return C_CONTINUE;
}
+ if (ep<0) {
+ Da.trk[0] = t;
+ Da.pos[0] = p;
+ Da.ep[0] = ep;
+ }
Da.state = POS_1;
- Da.selectPoint = 0;
- Da.ep1Segs_da_cnt = createEndPoint(Da.ep1Segs, Da.pos[0], FALSE, !QueryTrack(Da.trk[0],Q_IS_CORNU),QueryTrack(Da.trk[0],Q_CORNU_CAN_MODIFY));
- DrawCornuCurve(NULL,Da.ep1Segs,Da.ep1Segs_da_cnt,NULL,0,NULL,0,NULL,NULL,NULL,drawColorBlack);
- InfoMessage( _("Move 1st end point of Cornu track along track 1") );
- } else {
- if ( Da.trk[0] == t) {
+ Da.selectEndPoint = 0; //Select first end point
+ Da.ep1Segs_da_cnt = createEndPoint(Da.ep1Segs, Da.pos[0], FALSE, !QueryTrack(Da.trk[0],Q_IS_CORNU),QueryTrack(Da.trk[0],Q_CORNU_CAN_MODIFY),
+ Da.trk[0]!=NULL,Da.angle[0],Da.radius[0],Da.center[0],NULL);
+ InfoMessage( _("Locked - Move 1st end point of Cornu track along track 1") );
+ return C_CONTINUE;
+ } else { //Second Point
+ if (Da.trk[0] == t) {
ErrorMessage( MSG_JOIN_CORNU_SAME );
Da.trk[1] = NULL;
+ Da.ep[1] = -1;
return C_CONTINUE;
}
- if (!GetConnectedTrackParms(t, pos, 1, Da.ep[1])) {
+ if (!GetConnectedTrackParms(t, pos, 1, Da.ep[1],FALSE)) {
Da.trk[1] = NULL; //Turntable Fail
+ wBeep();
+ InfoMessage(_("No Valid Track End there"));
return C_CONTINUE;
}
+ if (ep<0) {
+ Da.trk[1] = t;
+ Da.pos[1] = p;
+ Da.ep[1] = -1;
+ Da.radius[1] = 0.0;
+ }
CorrectHelixAngles();
- Da.selectPoint = 1;
+ Da.selectEndPoint = 1; //Select second end point
Da.state = POINT_PICKED;
- DrawCornuCurve(NULL,Da.ep1Segs,Da.ep1Segs_da_cnt,NULL,0,NULL,0,NULL,NULL,NULL,drawColorBlack); //Wipe out initial Arm
- CreateBothEnds(1);
- if (CallCornu(Da.pos,Da.trk,Da.ep,&Da.crvSegs_da, &cp))
- Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
- DrawTempCornu();
- InfoMessage( _("Move 2nd end point of Cornu track along track 2") );
+ InfoMessage( _("Locked - Move 2nd end point of Cornu track along track 2") );
}
+ CreateBothEnds(1,-1,-1,-1);
+ SetUpCornuParms(&cp);
+ if (CallCornuM(Da.mid_points,Da.ends,Da.pos,&cp,&Da.crvSegs_da,TRUE))
+ Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
return C_CONTINUE;
- } else {
+ } else { //This is after both ends exist
return AdjustCornuCurve( action&0xFF, pos, InfoMessage );
}
return C_CONTINUE;
+
+ case wActionMove:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ if (Da.state != NONE && Da.state != LOC_2) return C_CONTINUE;
+ if (Da.trk[0] && Da.trk[1]) return C_CONTINUE;
+ EPINX_T ep = -1;
+ t = NULL;
+ if (((MyGetKeyState() & WKEY_ALT) == 0) == magneticSnap) {
+ //Lock to endpoint if one is available and under pointer
+ if ((t = OnTrack(&pos, FALSE, TRUE)) != NULL && t != Da.selectTrack) {
+ if (QueryTrack(t,Q_HAS_VARIABLE_ENDPOINTS)) { //Circle/Helix find if there is an open slot and where
+ if ((GetTrkEndTrk(t,0) != NULL) && (GetTrkEndTrk(t,1) != NULL)) {
+ return C_CONTINUE;
+ }
+ ep = -1; //Not a real ep yet
+ } else ep = PickUnconnectedEndPointSilent(pos, t); //EP
+ if (ep>=0 && QueryTrack(t,Q_CAN_ADD_ENDPOINTS)) ep=-1; //Don't attach to Turntable
+ if ( ep==-1 && (!QueryTrack(t,Q_CAN_ADD_ENDPOINTS) && !QueryTrack(t,Q_HAS_VARIABLE_ENDPOINTS))) { //No endpoints and not Turntable or Helix/Circle
+ return C_CONTINUE;
+ }
+ if (GetTrkGauge(t) != GetScaleTrackGauge(GetLayoutCurScale())) {
+ return C_CONTINUE;
+ }
+ if (Da.state != NONE && t==Da.trk[0]) return C_CONTINUE;
+ }
+ }
+ if (ep>=0 && t) {
+ pos = GetTrkEndPos(t,ep);
+ CreateCornuEndAnchor(pos,TRUE);
+ } else if (t) {
+ trackParams_t tp; //Turntable or extendable track
+ if (!GetTrackParams(PARAMS_CORNU, t, pos, &tp)) return C_CONTINUE;
+ if (QueryTrack(t,Q_CAN_ADD_ENDPOINTS)) {
+ if (!GetTrackParams(PARAMS_CORNU, t, pos, &tp)) return C_CONTINUE;
+ ANGLE_T a = tp.angle;
+ Translate(&pos,tp.ttcenter,a,tp.ttradius);
+ CreateCornuEndAnchor(pos,TRUE);
+ } else CreateCornuEndAnchor(pos,TRUE);
+ }
+
+ return C_CONTINUE;
case C_MOVE:
- if (Da.state == NONE) {
- InfoMessage("Place 1st end point of Cornu track on unconnected end-point");
+ if (Da.state == NONE) { //First point not created
+ if (Da.cmdType == cornuCmdCreateTrack || Da.cmdType == cornuCmdHotBar) {
+ InfoMessage("Place 1st end point of Cornu track");
+ } else
+ InfoMessage("Place 1st end point of Cornu track on unconnected end-point");
return C_CONTINUE;
}
- if (Da.state == POS_1) {
+ if (Da.state == POS_1) { //First point has been created
+ if ((Da.cmdType == cornuCmdCreateTrack || Da.cmdType == cornuCmdHotBar) && !Da.trk[0]) { //OK for CreateCornu -> No track selected
+ if (IsClose(FindDistance(pos,Da.pos[0]))) return C_CONTINUE;
+ Da.selectEndPoint = 0;
+ Da.angle[0] = NormalizeAngle(FindAngle(Da.pos[0],pos)+180);
+ Da.ep1Segs_da_cnt = createEndPoint(Da.ep1Segs, Da.pos[0],TRUE,TRUE,TRUE,FALSE,Da.angle[0],0.0,zero,&Da.endHandle[0]);
+ Da.radius[1] = -1.0; /*No end*/
+ return C_CONTINUE;
+ }
EPINX_T ep = 0;
BOOL_T found = FALSE;
int end = Da.state==POS_1?0:1;
if(!QueryTrack(Da.trk[0],Q_CORNU_CAN_MODIFY) && !QueryTrack(Da.trk[0],Q_CAN_ADD_ENDPOINTS)) {
- InfoMessage(_("Can't Split - Locked to End Point"));
+ InfoMessage(_("Track can't be split - so locked to endpoint"));
return C_CONTINUE;
}
if (Da.trk[0] != OnTrack(&pos, FALSE, TRUE)) {
wBeep();
InfoMessage(_("Point not on track 1"));
Da.state = POS_1;
- Da.selectPoint = 1;
+ Da.selectEndPoint = 0;
return C_CONTINUE;
}
t = Da.trk[0];
- DrawCornuCurve(NULL,Da.ep1Segs,Da.ep1Segs_da_cnt,NULL,0,NULL,0,NULL,NULL,NULL,drawColorBlack);
- if (!GetConnectedTrackParms(t, pos, ep, Da.ep[ep])) {
+ if (!GetConnectedTrackParms(t, pos, ep, Da.ep[ep],FALSE)) {
Da.state = POS_1;
- Da.selectPoint = 1;
+ Da.selectEndPoint = 0;
return C_CONTINUE;
}
Da.pos[ep] = pos;
- Da.ep1Segs_da_cnt = createEndPoint(Da.ep1Segs, Da.pos[0],TRUE,!QueryTrack(Da.trk[0],Q_IS_CORNU),QueryTrack(Da.trk[0],Q_CORNU_CAN_MODIFY));
- DrawCornuCurve(NULL,Da.ep1Segs,Da.ep1Segs_da_cnt,NULL,0,NULL,0,NULL,NULL,NULL,drawColorBlack);
- } else {
+ Da.ep1Segs_da_cnt = createEndPoint(Da.ep1Segs,Da.pos[0],TRUE,!QueryTrack(Da.trk[0],Q_IS_CORNU),QueryTrack(Da.trk[0],Q_CORNU_CAN_MODIFY),
+ Da.trk[0]!=NULL,Da.angle[0],Da.radius[0],Da.center[0],NULL);
+ } else if (Da.state == POS_2 &&
+ (Da.cmdType == cornuCmdCreateTrack || Da.cmdType == cornuCmdHotBar) && !Da.trk[1]) { //OK for CreateCornu -> No track selected
+ if (IsClose(FindDistance(pos,Da.pos[1]))) return C_CONTINUE;
+ Da.selectEndPoint = 1;
+ Da.angle[1] = NormalizeAngle(FindAngle(Da.pos[1],pos)+180);
+ Da.radius[1] = 0.0; /*No end*/
+ Da.ep1Segs_da_cnt = createEndPoint(Da.ep2Segs,Da.pos[1],TRUE,TRUE,TRUE,FALSE,Da.angle[1],0.0,zero,&Da.endHandle[1]);
+ SetUpCornuParms(&cp);
+ if (CallCornuM(Da.mid_points,Da.ends,Da.pos,&cp,&Da.crvSegs_da,TRUE)) Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
+ else Da.crvSegs_da_cnt = 0;
+ CreateBothEnds(-1,-1,-1,-1);
+ Da.minRadius = CornuMinRadius(Da.pos,Da.crvSegs_da);
+ return C_CONTINUE;
+ } else { //Second Point Has Been Created and aligned
return AdjustCornuCurve( action&0xFF, pos, InfoMessage );
}
return C_CONTINUE;
case C_UP:
- if (Da.state == POS_1 && Da.trk[0]) {
- DrawCornuCurve(NULL,Da.ep1Segs,Da.ep1Segs_da_cnt,NULL,0,NULL,0,NULL,NULL,NULL,drawColorBlack);
+ if (Da.state == POS_1 && (Da.cmdType == cornuCmdCreateTrack || Da.cmdType == cornuCmdHotBar || Da.trk[0])) {
Da.state = LOC_2;
+ Da.selectEndPoint = -1;
+ if (Da.cmdType == cornuCmdCreateTrack || Da.cmdType == cornuCmdHotBar) {
+ if (Da.cmdType == cornuCmdCreateTrack)
+ InfoMessage( _("Pick other end of Cornu") );
+ else
+ InfoMessage( _("Select flextrack ends or anchors and drag, Enter to approve, Esc to Cancel") );
+ Da.ep1Segs_da_cnt = createEndPoint(Da.ep1Segs, Da.pos[0],FALSE,TRUE,TRUE,FALSE,0.0,0.0,zero,NULL);
+ return C_CONTINUE;
+ }
InfoMessage( _("Put other end of Cornu on a track with an unconnected end point") );
- Da.ep1Segs_da_cnt = createEndPoint(Da.ep1Segs, Da.pos[0], FALSE,!QueryTrack(Da.trk[0],Q_IS_CORNU),QueryTrack(Da.trk[0],Q_CORNU_CAN_MODIFY));
- DrawCornuCurve(NULL,Da.ep1Segs,Da.ep1Segs_da_cnt,NULL,0,NULL,0,NULL,NULL,NULL,drawColorBlack);
+ if (Da.trk[0])
+ Da.ep1Segs_da_cnt = createEndPoint(Da.ep1Segs, Da.pos[0], FALSE,!QueryTrack(Da.trk[0],Q_IS_CORNU),QueryTrack(Da.trk[0],Q_CORNU_CAN_MODIFY),
+ Da.trk[0]!=NULL,Da.angle[0],Da.radius[0],Da.center[0],NULL);
+ else
+ Da.ep1Segs_da_cnt = createEndPoint(Da.ep1Segs, Da.pos[0], FALSE,TRUE,TRUE,FALSE, Da.angle[0],Da.radius[0],Da.center[0],&Da.endHandle[0]);
+ return C_CONTINUE;
+ } else if (Da.state == POS_2 && (Da.cmdType == cornuCmdCreateTrack || Da.cmdType == cornuCmdHotBar || Da.trk[1] )){
+ Da.state = PICK_POINT;
+ Da.selectEndPoint = -1;
+ Da.prevEndPoint = 1;
+ Da.prevSelected = -1;
+ SetUpCornuParms(&cp);
+ if (CallCornuM(Da.mid_points,Da.ends,Da.pos,&cp,&Da.crvSegs_da,TRUE)) Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
+ else Da.crvSegs_da_cnt = 0;
+ CreateBothEnds(-1,-1,-1,-1);
+ Da.minRadius = CornuMinRadius(Da.pos,Da.crvSegs_da);
return C_CONTINUE;
} else {
return AdjustCornuCurve( action&0xFF, pos, InfoMessage );
}
+ return C_CONTINUE;
+ break;
case C_TEXT:
- if (Da.state != PICK_POINT || (action>>8) != 32) //Space is same as Enter.
+ if (Da.state != PICK_POINT) return C_CONTINUE;
+ if ((action>>8 == 127) || (action>>8 == 8)) //
+ return AdjustCornuCurve(action, pos, InfoMessage);
+ if (!(action>>8 == 32 )) //Space is same as Enter.
return C_CONTINUE;
/* no break */
case C_OK:
if (Da.state != PICK_POINT) return C_CONTINUE;
- return AdjustCornuCurve( C_OK, pos, InfoMessage);
+ STATUS_T rc = AdjustCornuCurve( C_OK, pos, InfoMessage);
+ if (rc == C_TERMINATE) {
+ Da.state = NONE;
+ Da.ep1Segs_da_cnt = 0;
+ Da.ep2Segs_da_cnt = 0;
+ Da.crvSegs_da_cnt = 0;
+ for (int i=0;i<2;i++) {
+ Da.radius[i] = 0.0;
+ Da.angle[i] = 0.0;
+ Da.center[i] = zero;
+ Da.trk[i] = NULL;
+ Da.ep[i] = -1;
+ Da.pos[i] = zero;
+ Da.endHandle[i].end_valid = FALSE;
+ }
+ }
+ return rc;
case C_REDRAW:
if ( Da.state != NONE ) {
- DrawCornuCurve(NULL,Da.ep1Segs,Da.ep1Segs_da_cnt,Da.ep2Segs,Da.ep2Segs_da_cnt,(trkSeg_t *)Da.crvSegs_da.ptr,Da.crvSegs_da.cnt, NULL,
- Da.extend[0]?&Da.extendSeg[0]:NULL,Da.extend[1]?&Da.extendSeg[1]:NULL,Da.color);
+ DrawCornuCurve(NULL,Da.ep1Segs,Da.ep1Segs_da_cnt,Da.ep2Segs,Da.ep2Segs_da_cnt,(trkSeg_t *)Da.crvSegs_da.ptr,Da.crvSegs_da_cnt, NULL,
+ Da.extend[0]?&Da.extendSeg[0]:NULL,Da.extend[1]?&Da.extendSeg[1]:NULL,(trkSeg_t *)Da.midSegs.ptr,Da.midSegs.cnt,wDrawColorBlack);
}
+ if (anchors_da.cnt)
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
+ if (MyGetKeyState()&WKEY_SHIFT) DrawHighlightBoxes(FALSE,FALSE,NULL);
+
return C_CONTINUE;
case C_CANCEL:
if (Da.state != NONE) {
- DrawCornuCurve(NULL,Da.ep1Segs,Da.ep1Segs_da_cnt,Da.ep2Segs,Da.ep2Segs_da_cnt,(trkSeg_t *)Da.crvSegs_da.ptr,Da.crvSegs_da.cnt, NULL,
- Da.extend[0]?&Da.extendSeg[0]:NULL,Da.extend[1]?&Da.extendSeg[1]:NULL,Da.color);
Da.ep1Segs_da_cnt = 0;
Da.ep2Segs_da_cnt = 0;
Da.crvSegs_da_cnt = 0;
@@ -1262,21 +2568,486 @@ STATUS_T CmdCornu( wAction_t action, coOrd pos )
Da.trk[i] = NULL;
Da.ep[i] = -1;
Da.pos[i] = zero;
+ Da.endHandle[i].end_valid = FALSE;
}
//DYNARR_FREE(trkSeg_t,Da.crvSegs_da);
}
Da.state = NONE;
+ if (infoSubst) {
+ InfoSubstituteControls( NULL, NULL );
+ infoSubst = FALSE;
+ }
return C_CONTINUE;
default:
return C_CONTINUE;
}
+ return C_CONTINUE;
+}
+BOOL_T GetTracksFromCornuTrack(track_p trk, track_p newTracks[2]) {
+ track_p trk_old = NULL;
+ newTracks[0] = NULL, newTracks[1] = NULL;
+ struct extraData * xx = GetTrkExtraData(trk);
+ if (!IsTrack(trk)) return FALSE;
+ for (int i=0; i<xx->cornuData.arcSegs.cnt;i++) {
+ track_p bezTrack[2];
+ bezTrack[0] = NULL, bezTrack[1] = NULL;
+ trkSeg_p seg = &DYNARR_N(trkSeg_t,xx->cornuData.arcSegs,i);
+ if (seg->type == SEG_BEZTRK) {
+ DYNARR_RESET(trkSeg_t,seg->bezSegs);
+ FixUpBezierSeg(seg->u.b.pos,seg,TRUE);
+ GetTracksFromBezierSegment(seg, bezTrack, trk);
+ if (newTracks[0] == NULL) newTracks[0] = bezTrack[0];
+ newTracks[1] = bezTrack[1];
+ if (trk_old) {
+ for (int i=0;i<2;i++) {
+ if (GetTrkEndTrk(trk_old,i)==NULL) {
+ coOrd pos = GetTrkEndPos(trk_old,i);
+ EPINX_T ep_n = PickUnconnectedEndPoint(pos,bezTrack[0]);
+ if ((connectDistance >= FindDistance(GetTrkEndPos(trk_old,i),GetTrkEndPos(bezTrack[0],ep_n))) &&
+ (connectAngle >= fabs(DifferenceBetweenAngles(GetTrkEndAngle(trk_old,i),GetTrkEndAngle(bezTrack[0],ep_n)+180))) ) {
+ ConnectTracks(trk_old,i,bezTrack[0],ep_n);
+ break;
+ }
+ }
+ }
+ }
+ trk_old = newTracks[1];
+ } else {
+ track_p new_trk;
+ if (seg->type == SEG_CRVTRK)
+ new_trk = NewCurvedTrack(seg->u.c.center,seg->u.c.radius,seg->u.c.a0,seg->u.c.a1,0);
+ else if (seg->type == SEG_STRTRK)
+ new_trk = NewStraightTrack(seg->u.l.pos[0],seg->u.l.pos[1]);
+ if (newTracks[0] == NULL) newTracks[0] = new_trk;
+ CopyAttributes( trk, new_trk );
+ newTracks[1] = new_trk;
+ if (trk_old) {
+ for (int i=0;i<2;i++) {
+ if (GetTrkEndTrk(trk_old,i)==NULL) {
+ coOrd pos = GetTrkEndPos(trk_old,i);
+ EPINX_T ep_n = PickUnconnectedEndPoint(pos,new_trk);
+ if ((connectDistance >= FindDistance(GetTrkEndPos(trk_old,i),GetTrkEndPos(new_trk,ep_n))) &&
+ (connectAngle >= fabs(DifferenceBetweenAngles(GetTrkEndAngle(trk_old,i),GetTrkEndAngle(new_trk,ep_n)+180)))) {
+ ConnectTracks(trk_old,i,new_trk,ep_n);
+ break;
+ }
+ }
+ }
+ }
+ trk_old = new_trk;
+ }
+ }
+ return TRUE;
+
+}
+
+static STATUS_T cmdCornuCreate(
+ wAction_t action,
+ coOrd pos ) {
+ static int createState = 0;
+ int rc = 0;
+
+ switch(action&0xFF) {
+
+ case C_DOWN:
+ return CmdCornu(C_DOWN,pos);
+ case C_UP:
+ rc = CmdCornu(C_UP,pos);
+ return rc;
+ case C_FINISH:
+ if (createState != 0 ) {
+ createState = 0;
+ CmdCornu( C_OK, pos );
+ } else
+ CmdCornu( C_CANCEL, pos );
+ Da.prevSelected = -1;
+ Da.selectEndHandle = -1;
+ Da.selectEndPoint = -1;
+ Da.selectMidPoint = -1;
+ Da.selectTrack = NULL;
+ Da.trk[0] = NULL; Da.trk[1] = NULL;
+ Da.radius[0] = Da.radius[1] = -1.0;
+ Da.angle[0] = Da.angle[1] = 0.0;
+ Da.ends[0] = Da.ends[1] = FALSE;
+ Da.endHandle[0].end_valid = Da.endHandle[1].end_valid = FALSE;
+ return C_TERMINATE;
+ case C_TEXT:
+ if ((action>>8) != ' ' && (action>>8) != 32)
+ return CmdCornu(action,pos);
+ /*no break*/
+ case C_OK:
+ CmdCornu(C_OK,pos);
+ MainRedraw();
+ return C_CONTINUE;
+ case C_CANCEL:
+ HotBarCancel();
+ CmdCornu(C_CANCEL, pos);
+ createState = 0;
+ rc = C_TERMINATE;
+ /* no break */
+ case C_START:
+ createState = 0;
+ commandContext = (void *)cornuCmdHotBar;
+ rc = CmdCornu(C_START, pos);
+ Da.prevSelected = -1;
+ Da.selectEndHandle = -1;
+ Da.selectEndPoint = -1;
+ Da.selectMidPoint = -1;
+ Da.selectTrack = NULL;
+ Da.trk[0] = NULL; Da.trk[1] = NULL;
+ Da.radius[0] = Da.radius[1] = -1.0;
+ Da.angle[0] = Da.angle[1] = 0.0;
+ Da.ends[0] = Da.ends[1] = FALSE;
+ Da.endHandle[0].end_valid = Da.endHandle[1].end_valid = FALSE;
+ return rc;
+ default:
+ return CmdCornu(action,pos);
+ }
+ return C_CONTINUE;
}
+static STATUS_T CmdConvertTo(
+ wAction_t action,
+ coOrd pos )
+{
+ static track_p trk;
+ cornuParm_t cp;
+ switch (action) {
+
+ case wActionMove:
+ if ((trk = OnTrack(&pos,FALSE,TRUE)) == NULL) return C_CONTINUE;
+ if (!QueryTrack(trk, Q_CORNU_CAN_MODIFY) && //Not Fixed Track/Turnout/Turntable
+ !QueryTrack(trk, Q_IGNORE_EASEMENT_ON_EXTEND ))
+ trk = NULL;
+ return C_CONTINUE;
+
+ case C_LCLICK:
+ if ((trk = OnTrack(&pos,FALSE,TRUE))!=NULL) {
+ SetTrkBits(trk,TB_SELECTED);
+ selectedTrackCount = 1;
+ } else {
+ wBeep();
+ InfoMessage( _("Not on a Track") );
+ return C_CONTINUE;
+ }
+ trk = NULL;
+
+ /* no break */
+ case C_START:
+ if (selectedTrackCount==0) {
+ InfoMessage( _("Select a Track To Convert") );
+ return C_CONTINUE;
+ }
+ else if (selectedTrackCount>1) {
+ if (NoticeMessage(_("Convert all Selected Tracks to Cornu Tracks?"), _("Yes"), _("No"))<=0) {
+ SetAllTrackSelect(FALSE);
+ return C_TERMINATE;
+ }
+ }
+ UndoStart( _("Convert Cornu"),"newCornu curves");
+ trk = NULL;
+ int converted=0, not_convertable = 0, created=0, deleted=0;
+ DYNARR_RESET(track_p,Da.tracks);
+ while ( TrackIterate( &trk ) ) {
+ if (!GetTrkSelected( trk )) continue; //Only selected
+ if (!QueryTrack(trk, Q_CORNU_CAN_MODIFY) && //Not Fixed Track/Turnout/Turntable
+ !QueryTrack( trk, Q_IGNORE_EASEMENT_ON_EXTEND )) { //But Yes to Easement
+ not_convertable++;
+ continue;
+ }
+ converted++;
+ DYNARR_RESET(trkSeg_t,Da.crvSegs_da);
+ Da.ep1Segs_da_cnt = 0;
+ Da.ep2Segs_da_cnt = 0;
+ Da.midSegs.cnt = 0;
+ Da.extend[0] = FALSE;
+ Da.extend[1] = FALSE;
+ Da.selectEndPoint = -1;
+ Da.selectTrack = NULL;
+ DYNARR_RESET(coOrd,Da.mid_points);
+ ClrTrkBits( trk, TB_SELECTED ); //Done with this one
+ Da.selectTrack = trk;
+ DYNARR_APPEND(track_p,Da.tracks,1);
+ DYNARR_LAST(track_p,Da.tracks) = trk;
+ Da.trk[0] = GetTrkEndTrk( trk, 0 );
+ track_p prior = trk;
+ if (Da.trk[0]) Da.ep[0] = GetEndPtConnectedToMe(Da.trk[0],trk);
+ else Da.ep[0] = -1;
+ EPINX_T ep0 = 0;
+ //Move down the LHS adding tracks until no more Selected or not modifyable
+ while (Da.trk[0] && GetTrkSelected( Da.trk[0]) && IsTrack(Da.trk[0]) && (QueryTrack(Da.trk[0], Q_CORNU_CAN_MODIFY) || QueryTrack(Da.trk[0], Q_IS_CORNU)) ) {
+ prior = Da.trk[0];
+ ep0 = 1-Da.ep[0];
+ ClrTrkBits( Da.trk[0], TB_SELECTED ); //Done with this one
+ if (selectedTrackCount>0) selectedTrackCount--;
+ DYNARR_APPEND(track_p,Da.tracks,1);
+ DYNARR_LAST(track_p,Da.tracks) = prior;
+ DYNARR_APPEND(coOrd,Da.mid_points,1);
+ for (int i=Da.mid_points.cnt-1;i>1;i--) {
+ DYNARR_N(coOrd,Da.mid_points,i) = DYNARR_N(coOrd,Da.mid_points,i-1);
+ }
+ DYNARR_N(coOrd,Da.mid_points,0) = GetTrkEndPos(prior,1-ep0);
+ Da.trk[0] = GetTrkEndTrk( prior, ep0 );
+ if (Da.trk[0]) Da.ep[0] = GetEndPtConnectedToMe(Da.trk[0],prior);
+ else Da.ep[0] = -1;
+ converted++;
+ }
+ Da.radius[0] = -1.0; //Initialize with no end
+ Da.ends[0] = FALSE;
+ Da.center[0] = zero;
+ Da.pos[0] = GetTrkEndPos(prior,ep0);
+ if (Da.trk[0] && Da.ep[0]>=0) {
+ GetConnectedTrackParms(Da.trk[0],GetTrkEndPos(Da.trk[0],Da.ep[0]),0,Da.ep[0],FALSE);
+ }
+
+ //Move to RHS
+
+ Da.trk[1] = GetTrkEndTrk( trk, 1 );
+ track_p next = trk;
+ EPINX_T ep1 = 1;
+ if (Da.trk[1]) Da.ep[1] = GetEndPtConnectedToMe(Da.trk[1],trk);
+ else Da.ep[1] = -1;
+ //Move down RHS adding tracks until no more Selected or not modifyable
+ while (Da.trk[1] && GetTrkSelected( Da.trk[1]) && (QueryTrack(Da.trk[1], Q_CORNU_CAN_MODIFY) || QueryTrack(Da.trk[1], Q_IS_CORNU))) {
+ next = Da.trk[1];
+ ep1 = 1-Da.ep[1];
+ if (selectedTrackCount>0) selectedTrackCount--;
+ ClrTrkBits( Da.trk[1], TB_SELECTED ); //Done with this one
+ DYNARR_APPEND(track_p,Da.tracks,1);
+ DYNARR_LAST(track_p,Da.tracks) = next;
+ DYNARR_APPEND(coOrd,Da.mid_points,1);
+ DYNARR_LAST(coOrd,Da.mid_points) = GetTrkEndPos(next,1-ep1);
+ Da.trk[1] = GetTrkEndTrk( next, ep1 );
+ if (Da.trk[1]) Da.ep[1] = GetEndPtConnectedToMe(Da.trk[1],next);
+ converted++;
+ }
+ Da.radius[1] = -1.0; //Initialize with no end
+ Da.ends[1] = FALSE;
+ Da.center[1] = zero;
+ Da.pos[1] = GetTrkEndPos(next,ep1);
+ if (Da.trk[1] && Da.ep[1]>=0) {
+ GetConnectedTrackParms(Da.trk[1],GetTrkEndPos(Da.trk[1],Da.ep[1]),1,Da.ep[1],FALSE);
+ }
+ SetUpCornuParms(&cp);
+ if (CallCornuM(Da.mid_points,Da.ends,Da.pos,&cp,&Da.crvSegs_da,TRUE)) Da.crvSegs_da_cnt = Da.crvSegs_da.cnt;
+ else continue; //Checks that a solution can be found
+
+ // Do the deed - Create a replacement Cornu
+
+ BOOL_T end_point[2];
+ end_point[0] = TRUE;
+ end_point[1] = FALSE;
+ coOrd sub_pos[2];
+ sub_pos[0] = Da.pos[0];
+ if (Da.radius[0] == -1) end_point[0] = FALSE;
+ track_p first_trk= NULL,trk1=NULL,trk2 = NULL;
+
+ for (int i=0;i<Da.mid_points.cnt;i++) {
+ sub_pos[1] = DYNARR_N(coOrd,Da.mid_points,i);
+ if ((trk1 = CreateCornuFromPoints(sub_pos,end_point))== NULL) continue;
+ if (Da.trk[0]) {
+ CopyAttributes( Da.trk[0], trk1 );
+ } else if (Da.trk[1]) {
+ CopyAttributes( Da.trk[1], trk1 );
+ } else {
+ SetTrkScale( trk1, GetLayoutCurScale() );
+ SetTrkBits( trk1, TB_HIDEDESC );
+ }
+ DrawNewTrack(trk1);
+ if (first_trk == NULL) first_trk = trk1;
+ if (trk2) ConnectTracks(trk1,0,trk2,1);
+ trk2 = trk1;
+ end_point[0] = FALSE;
+ sub_pos[0] = DYNARR_N(coOrd,Da.mid_points,i);
+ }
+ sub_pos[1] = Da.pos[1];
+ end_point[1] = TRUE;
+ if (Da.radius[1] == -1) end_point[1] = FALSE;
+ if ((trk1 = CreateCornuFromPoints(sub_pos,end_point)) == NULL) continue;
+ created++;
+ DrawNewTrack(trk1);
+ if (Da.trk[0]) {
+ CopyAttributes( Da.trk[0], trk1 );
+ } else if (Da.trk[1]){
+ CopyAttributes( Da.trk[1], trk1 );
+ } else {
+ SetTrkScale( trk1, GetLayoutCurScale() );
+ SetTrkBits( trk1, TB_HIDEDESC );
+ }
+ if (trk2) ConnectTracks(trk1,0,trk2,1);
+ if (first_trk == NULL) first_trk = trk1;
+
+ for (int i=0;i<2;i++) {
+ if (Da.ep[i]>=0 && Da.trk[i]) {
+ track_p trk_old = GetTrkEndTrk(Da.trk[i],Da.ep[i]);
+ EPINX_T old_ep = GetEndPtConnectedToMe(trk_old,Da.trk[i]);
+ DisconnectTracks(Da.trk[i],Da.ep[i],trk_old,old_ep);
+ if (Da.ep[i]>=0 && Da.trk[i])
+ ConnectTracks(Da.trk[i],Da.ep[i],i==0?first_trk:trk1,i);
+ }
+ }
+
+ } //Find next track
+ SetAllTrackSelect(FALSE);
+ //Get rid of old tracks
+ for (int i = 0; i<Da.tracks.cnt;i++) {
+ DeleteTrack(DYNARR_N(track_p,Da.tracks,i),FALSE);
+ deleted++;
+ }
+
+ UndoEnd(); //Stop accumulating
+ NoticeMessage(_("Tracks Counts: %d converted %d unconvertible %d created %d deleted"),_("OK"),NULL,converted,not_convertable,created,deleted);
+
+ return C_TERMINATE;
+
+ case C_REDRAW:
+ if (trk) {
+ DrawTrack(trk,&tempD,wDrawColorPreviewSelected);
+ }
+ return C_CONTINUE;
+
+ case C_CANCEL:
+ return C_TERMINATE;
+
+ case C_OK:
+ return C_TERMINATE;
+
+ case C_CONFIRM:
+ return C_CONTINUE;
+
+ default:
+ return C_CONTINUE;
+ }
+}
+static STATUS_T CmdConvertFrom(
+ wAction_t action,
+ coOrd pos )
+{
+ static track_p trk;
+ track_p trk1,trk2;
+ switch (action) {
+
+ case wActionMove:
+ if ((trk = OnTrack(&pos,FALSE,TRUE)) == NULL) return C_CONTINUE;
+ if ((!(GetTrkType(trk) == T_CORNU)) ||
+ (!(GetTrkType(trk) == T_BEZIER)))
+ trk = NULL;
+ return C_CONTINUE;
+
+ case C_LCLICK:
+ if ((trk = OnTrack(&pos,FALSE,TRUE))!=NULL) {
+ SetTrkBits(trk,TB_SELECTED);
+ selectedTrackCount = 1;
+ trk = NULL;
+ } else {
+ wBeep();
+ InfoMessage( _("Not on a Track") );
+ trk = NULL;
+ return C_CONTINUE;
+ }
+ /* no break */
+ case C_START:
+ if (selectedTrackCount==0) {
+ InfoMessage( _("Select a Cornu or Bezier Track To Convert to Fixed") );
+ return C_CONTINUE;
+ }
+ else if (selectedTrackCount>1) {
+ if (NoticeMessage(_("Convert all Selected Tracks to Fixed Tracks?"), _("Yes"), _("No"))<=0) {
+ SetAllTrackSelect(FALSE);
+ return C_TERMINATE;
+ }
+ }
+ dynArr_t trackSegs_da;
+ DYNARR_RESET(trkSeg_t,trackSegs_da);
+ trk1 = NULL;
+ trk2 = NULL;
+ trk = NULL;
+ UndoStart( _("Convert Bezier and Cornu"),"Try to convert all selected tracks");
+ track_p tracks[2];
+ DYNARR_RESET(track_p,Da.tracks);
+ int converted=0, not_convertable = 0, created=0, deleted=0;
+ while ( TrackIterate( &trk1 ) ) {
+ if ( GetTrkSelected( trk1 ) && IsTrack( trk1 ) ) {
+ //Only Cornu or Bezier
+ tracks[0] = NULL, tracks[1] = NULL;
+ if (selectedTrackCount>0) selectedTrackCount--;
+ ClrTrkBits( trk1, TB_SELECTED ); //Done with this one
+ if (GetTrkType(trk1) == T_CORNU) {
+ GetTracksFromCornuTrack(trk1,tracks);
+ DYNARR_APPEND(track_p,Da.tracks,1);
+ DYNARR_LAST(track_p,Da.tracks) = trk1;
+ converted++;
+ } else if (GetTrkType(trk1) == T_BEZIER) {
+ GetTracksFromBezierTrack(trk1,tracks);
+ DYNARR_APPEND(track_p,Da.tracks,1);
+ DYNARR_LAST(track_p,Da.tracks) = trk1;
+ converted++;
+ } else {
+ not_convertable++;
+ continue;
+ }
+ for (int i=0;i<2;i++) {
+ track_p trk2 = GetTrkEndTrk(trk1,i);
+ if (trk2) {
+ EPINX_T ep1 = GetEndPtConnectedToMe( trk2, trk1 );
+ DisconnectTracks(trk2,ep1,trk1,i);
+ pos = GetTrkEndPos(trk2,ep1);
+ for (int j=0;j<2;j++) {
+ EPINX_T ep2 = PickUnconnectedEndPointSilent( pos, tracks[j] );
+ coOrd ep_pos;
+ if (ep2<0) continue;
+ ep_pos = GetTrkEndPos(tracks[j],ep2);
+ if (connectDistance>=FindDistance(pos,ep_pos) &&
+ connectAngle >= fabs(DifferenceBetweenAngles(GetTrkEndAngle(tracks[j],ep2),GetTrkEndAngle(trk2,ep1)+180))) {
+ ConnectTracks(trk2,ep1,tracks[j],ep2);
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ SetAllTrackSelect(FALSE);
+ for (int i = 0; i<Da.tracks.cnt;i++) {
+ DeleteTrack(DYNARR_N(track_p,Da.tracks,i),FALSE);
+ deleted++;
+ }
+ UndoEnd();
+ NoticeMessage(_("Tracks Counts: %d converted %d unconvertible %d deleted"),_("OK"),NULL,converted,not_convertable,deleted);
+ return C_TERMINATE;
+
+ case C_REDRAW:
+ if (trk) {
+ DrawTrack(trk,&tempD,wDrawColorPreviewSelected);
+ }
+ return C_CONTINUE;
+
+ case C_CANCEL:
+ return C_TERMINATE;
+
+ case C_OK:
+ return C_TERMINATE;
+
+ case C_CONFIRM:
+ return C_CONTINUE;
+
+ default:
+ return C_CONTINUE;
+ }
+}
+
+#include "bitmaps/convertto.xpm"
+#include "bitmaps/convertfr.xpm"
EXPORT void InitCmdCornu( wMenu_p menu )
{
-
+ ButtonGroupBegin( _("Convert"), "cmdConvertSetCmd", _("Convert") );
+ AddMenuButton( menu, CmdConvertTo, "cmdConvertTo", _("Convert To Cornu"), wIconCreatePixMap(convertto_xpm), LEVEL0_50, IC_STICKY|IC_LCLICK|IC_POPUP3|IC_WANT_MOVE,ACCL_CONVERTTO, NULL );
+ AddMenuButton( menu, CmdConvertFrom, "cmdConvertFrom", _("Convert From Cornu"), wIconCreatePixMap(convertfr_xpm), LEVEL0_50, IC_STICKY|IC_LCLICK|IC_POPUP3|IC_WANT_MOVE,ACCL_CONVERTFR, NULL );
+ cornuHotBarCmdInx = AddMenuButton(menu, cmdCornuCreate, "cmdCornuCreate", "", NULL, LEVEL0_50, IC_STICKY|IC_POPUP3|IC_WANT_MOVE, 0, NULL);
+ ButtonGroupEnd();
+ ParamCreateControls( &cornuModPG, cornuModDlgUpdate) ;
}
diff --git a/app/bin/ccornu.h b/app/bin/ccornu.h
index b279cb4..2bd1f49 100644
--- a/app/bin/ccornu.h
+++ b/app/bin/ccornu.h
@@ -11,13 +11,24 @@
typedef void (*cornuMessageProc)( char *, ... );
+#define cornuCmdNone (0)
+#define cornuJoinTrack (1)
+#define cornuCmdCreateTrack (2)
+#define cornuCmdHotBar (3)
+
#endif /* APP_BIN_CCORNU_H_ */
STATUS_T CmdCornu( wAction_t action, coOrd pos );
+BOOL_T CallCornu0(coOrd pos[2], coOrd center[2], ANGLE_T angle[2], DIST_T radius[2], dynArr_t * array_p, BOOL_T spots);
DIST_T CornuMinRadius(coOrd pos[4],dynArr_t segs);
DIST_T CornuMaxRateofChangeofCurvature(coOrd pos[4],dynArr_t segs,DIST_T * last_c);
DIST_T CornuLength(coOrd pos[4],dynArr_t segs);
+DIST_T CornuOffsetLength(dynArr_t segs, double offset);
DIST_T CornuTotalWindingArc(coOrd pos[4],dynArr_t segs);
STATUS_T CmdCornuModify (track_p trk, wAction_t action, coOrd pos, DIST_T trackG);
+
+void InitCmdCornu( wMenu_p menu );
+
+void AddHotBarCornu( void );
diff --git a/app/bin/ccurve.c b/app/bin/ccurve.c
index 58bb5c1..e119610 100644
--- a/app/bin/ccurve.c
+++ b/app/bin/ccurve.c
@@ -39,57 +39,102 @@
#include "utility.h"
#include "wlib.h"
#include "cbezier.h"
+#include "ccornu.h"
+#include "layout.h"
/*
* STATE INFO
*/
+typedef enum createState_e {NOCURVE,FIRSTEND_DEF,SECONDEND_DEF,CENTER_DEF} createState_e;
+
static struct {
STATE_T state;
+ createState_e create_state;
coOrd pos0;
coOrd pos1;
curveData_t curveData;
track_p trk;
EPINX_T ep;
BOOL_T down;
+ BOOL_T lock0;
+ coOrd middle;
+ coOrd end0;
+ coOrd end1;
} Da;
static long curveMode;
+static dynArr_t anchors_da;
+#define anchors(N) DYNARR_N(trkSeg_t,anchors_da,N)
+#define array_anchor(N) DYNARR_N(trkSeg_t,*anchor_array,N)
+
-EXPORT void DrawArrowHeads(
+EXPORT int DrawArrowHeads(
trkSeg_p sp,
coOrd pos,
ANGLE_T angle,
BOOL_T bidirectional,
wDrawColor color )
{
- coOrd p0, p1;
- DIST_T d, w;
- int inx;
- d = mainD.scale*0.25;
- w = mainD.scale/mainD.dpi*2;
- for ( inx=0; inx<5; inx++ ) {
- sp[inx].type = SEG_STRLIN;
- sp[inx].width = w;
- sp[inx].color = color;
- }
- Translate( &p0, pos, angle, d );
- Translate( &p1, pos, angle+180, bidirectional?d:(d/2.0) );
- sp[0].u.l.pos[0] = p0;
- sp[0].u.l.pos[1] = p1;
- sp[1].u.l.pos[0] = p0;
- Translate( &sp[1].u.l.pos[1], p0, angle+135, d/2.0 );
- sp[2].u.l.pos[0] = p0;
- Translate( &sp[2].u.l.pos[1], p0, angle-135, d/2.0 );
- if (bidirectional) {
- sp[3].u.l.pos[0] = p1;
- Translate( &sp[3].u.l.pos[1], p1, angle-45, d/2.0 );
- sp[4].u.l.pos[0] = p1;
- Translate( &sp[4].u.l.pos[1], p1, angle+45, d/2.0 );
- }
+ coOrd p0, p1;
+ DIST_T d, w;
+ int inx;
+ d = mainD.scale*0.25;
+ w = mainD.scale/mainD.dpi*2;
+ for ( inx=0; inx<5; inx++ ) {
+ sp[inx].type = SEG_STRLIN;
+ sp[inx].width = w;
+ sp[inx].color = color;
+ }
+ Translate( &p0, pos, angle, d );
+ Translate( &p1, pos, angle+180, bidirectional?d:(d/2.0) );
+ sp[0].u.l.pos[0] = p0;
+ sp[0].u.l.pos[1] = p1;
+ sp[1].u.l.pos[0] = p0;
+ Translate( &sp[1].u.l.pos[1], p0, angle+135, d/2.0 );
+ sp[2].u.l.pos[0] = p0;
+ Translate( &sp[2].u.l.pos[1], p0, angle-135, d/2.0 );
+ if (bidirectional) {
+ sp[3].u.l.pos[0] = p1;
+ Translate( &sp[3].u.l.pos[1], p1, angle-45, d/2.0 );
+ sp[4].u.l.pos[0] = p1;
+ Translate( &sp[4].u.l.pos[1], p1, angle+45, d/2.0 );
+ } else {
+ sp[3].u.l.pos[0] = p1;
+ sp[3].u.l.pos[1] = p1;
+ sp[4].u.l.pos[0] = p1;
+ sp[4].u.l.pos[1] = p1;
+ }
+ return 5;
}
+EXPORT int DrawArrowHeadsArray(
+ dynArr_t *anchor_array,
+ coOrd pos,
+ ANGLE_T angle,
+ BOOL_T bidirectional,
+ wDrawColor color )
+{
+ int i = (*anchor_array).cnt;
+ DYNARR_SET(trkSeg_t,*anchor_array,i+5)
+ return DrawArrowHeads(&DYNARR_N(trkSeg_t,*anchor_array,i),pos,angle,bidirectional,color);
+
+}
+
+static void CreateEndAnchor(coOrd p, dynArr_t * anchor_array, wBool_t lock) {
+ DIST_T d = tempD.scale*0.15;
+
+ DYNARR_APPEND(trkSeg_t,*anchor_array,1);
+ int i = (*anchor_array).cnt-1;
+ array_anchor(i).type = lock?SEG_FILCRCL:SEG_CRVLIN;
+ array_anchor(i).color = wDrawColorBlue;
+ array_anchor(i).u.c.center = p;
+ array_anchor(i).u.c.radius = d/2;
+ array_anchor(i).u.c.a0 = 0.0;
+ array_anchor(i).u.c.a1 = 360.0;
+ array_anchor(i).width = 0;
+}
@@ -100,6 +145,7 @@ EXPORT STATUS_T CreateCurve(
wDrawColor color,
DIST_T width,
long mode,
+ dynArr_t * anchor_array,
curveMessageProc message )
{
track_p t;
@@ -110,23 +156,28 @@ EXPORT STATUS_T CreateCurve(
switch ( action ) {
case C_START:
- DYNARR_SET( trkSeg_t, tempSegs_da, 8 );
+ DYNARR_RESET(trkSeg_t,*anchor_array);
+ DYNARR_SET( trkSeg_t, tempSegs_da, 1 );
+ Da.create_state = NOCURVE;
+ tempSegs_da.cnt = 0;
Da.down = FALSE; //Not got a valid start yet
+ Da.pos0 = zero;
+ Da.pos1 = zero;
switch ( curveMode ) {
case crvCmdFromEP1:
if (track)
- message(_("Drag from End-Point in direction of curve - Shift locks to track open end-point") );
+ message(_("Drag from endpoint in direction of curve - lock to track open endpoint") );
else
- message (_("Drag from End-Point in direction of curve") );
+ message (_("Drag from endpoint in direction of curve") );
break;
case crvCmdFromTangent:
if (track)
- message(_("Drag from End-Point to Center - Shift locks to track open end-point") );
+ message(_("Drag from endpoint to center - lock to track open endpoint") );
else
- message(_("Drag from End-Point to Center") );
+ message(_("Drag from endpoint to center") );
break;
case crvCmdFromCenter:
- message(_("Drag from Center to End-Point") );
+ message(_("Drag from center to endpoint") );
break;
case crvCmdFromChord:
message(_("Drag from one to other end of chord") );
@@ -134,6 +185,7 @@ EXPORT STATUS_T CreateCurve(
}
return C_CONTINUE;
case C_DOWN:
+ DYNARR_RESET(trkSeg_t, *anchor_array);
for ( inx=0; inx<8; inx++ ) {
tempSegs(inx).color = wDrawColorBlack;
tempSegs(inx).width = 0;
@@ -141,150 +193,212 @@ EXPORT STATUS_T CreateCurve(
tempSegs_da.cnt = 0;
p = pos;
BOOL_T found = FALSE;
- Da.trk = NULL;
- if ((mode == crvCmdFromEP1 || mode == crvCmdFromTangent) && track && (MyGetKeyState() & WKEY_SHIFT) != 0) {
- if ((t = OnTrack(&p, FALSE, TRUE)) != NULL) {
- EPINX_T ep = PickUnconnectedEndPointSilent(p, t);
- if (ep != -1) {
- Da.trk = t;
- Da.ep = ep;
- pos = GetTrkEndPos(t, ep);
- found = TRUE;
- } else {
- Da.pos0=pos;
- message(_("No unconnected end-point on track - Try again or release Shift and click"));
- return C_CONTINUE;
- }
- } else {
- Da.pos0=pos;
- message(_("Not on a track - Try again or release Shift and click"));
- return C_CONTINUE;
+ Da.trk = NULL;
+ if (track) {
+ if ((mode == crvCmdFromEP1 || mode == crvCmdFromTangent || (mode == crvCmdFromChord)) &&
+ ((MyGetKeyState() & WKEY_ALT) == 0 ) == magneticSnap) {
+ if ((t = OnTrack(&p, FALSE, TRUE)) != NULL) {
+ EPINX_T ep = PickUnconnectedEndPointSilent(p, t);
+ if (ep != -1) {
+ if (GetTrkScale(t) != (char)GetLayoutCurScale()) {
+ wBeep();
+ InfoMessage(_("Track is different gauge"));
+ return C_CONTINUE;
+ }
+ Da.trk = t;
+ Da.ep = ep;
+ pos = GetTrkEndPos(t, ep);
+ found = TRUE;
+ }
+ }
}
- Da.down = TRUE;
- }
+ } else {
+ if ((t = OnTrack(&p, FALSE, FALSE)) != NULL) {
+ if (!IsTrack(t)) {
+ pos = p;
+ found = TRUE;
+ }
+ }
+ }
Da.down = TRUE;
if (!found) SnapPos( &pos );
- pos0 = pos;
- Da.pos0 = pos;
+ Da.lock0 = found;
+
+ if (Da.create_state == NOCURVE)
+ Da.pos0 = pos;
+ else
+ Da.pos1 = pos;
+
+ tempSegs_da.cnt = 1;
switch (mode) {
case crvCmdFromEP1:
tempSegs(0).type = (track?SEG_STRTRK:SEG_STRLIN);
tempSegs(0).color = color;
tempSegs(0).width = width;
- if (Da.trk) message(_("End Locked: Drag out curve start"));
+ Da.create_state = FIRSTEND_DEF;
+ Da.end0 = pos;
+ CreateEndAnchor(pos,anchor_array,found);
+ if (Da.trk && !(MyGetKeyState() & WKEY_SHIFT)) message(_("End locked: Drag out curve start"));
+ else if (Da.trk) message(_("End Position locked: Drag out curve start with Shift"));
else message(_("Drag along curve start") );
break;
case crvCmdFromTangent:
+ Da.create_state = FIRSTEND_DEF;
+ tempSegs(0).type = SEG_STRLIN;
+ tempSegs(0).color = color;
+ Da.create_state = CENTER_DEF;
+ CreateEndAnchor(pos,anchor_array,found);
+ if (Da.trk && !(MyGetKeyState() & WKEY_SHIFT)) message(_("End locked: Drag out curve center"));
+ else if (Da.trk) message(_("End Position locked: Drag out curve start with Shift"));
+ else message(_("Drag out curve center") );
+ break;
case crvCmdFromCenter:
tempSegs(0).type = SEG_STRLIN;
- tempSegs(1).type = SEG_CRVLIN;
- tempSegs(1).u.c.radius = mainD.scale*0.05;
- tempSegs(1).u.c.a0 = 0;
- tempSegs(1).u.c.a1 = 360;
- tempSegs(2).type = SEG_STRLIN;
- if (Da.trk && mode==crvCmdFromTangent) message(_("End Locked: Drag out to center"));
- else
- message( mode==crvCmdFromTangent?_("Drag from End-Point to Center"):_("Drag from Center to End-Point") );
+ tempSegs(0).color = color;
+ Da.create_state = CENTER_DEF;
+ CreateEndAnchor(pos,anchor_array,FALSE);
+ message(_("Drag out from center to endpoint"));
break;
case crvCmdFromChord:
tempSegs(0).type = (track?SEG_STRTRK:SEG_STRLIN);
tempSegs(0).color = color;
tempSegs(0).width = width;
- message( _("Drag to other end of chord") );
+ CreateEndAnchor(pos,anchor_array,FALSE);
+ Da.create_state = FIRSTEND_DEF;
+ if (Da.trk && !(MyGetKeyState() & WKEY_SHIFT))
+ message( _("End locked: Drag to other end of chord") );
+ else if (Da.trk) message(_("End Position locked: Drag out curve start with Shift"));
+ else
+ message( _("Drag to other end of chord") );
break;
}
- tempSegs(0).u.l.pos[0] = pos;
+ tempSegs(0).u.l.pos[0] = tempSegs(0).u.l.pos[1] = pos;
return C_CONTINUE;
case C_MOVE:
+ DYNARR_RESET(trkSeg_t,*anchor_array);
+ DYNARR_APPEND(trkSeg_t,*anchor_array,1);
if (!Da.down) return C_CONTINUE;
- if (Da.trk) {
+ if (Da.trk && !(MyGetKeyState() & WKEY_SHIFT)) { //Shift inhibits direction lock
angle1 = NormalizeAngle(GetTrkEndAngle(Da.trk, Da.ep));
- angle2 = NormalizeAngle(FindAngle(pos, pos0)-angle1);
- if (mode ==crvCmdFromEP1) {
+ angle2 = NormalizeAngle(FindAngle(pos, Da.pos0)-angle1);
+ if (mode ==crvCmdFromEP1 ) {
if (angle2 > 90.0 && angle2 < 270.0)
- Translate( &pos, pos0, angle1, -FindDistance( pos0, pos )*cos(D2R(angle2)) );
- else pos = pos0;
- } else {
- DIST_T dp = -FindDistance(pos0, pos)*sin(D2R(angle2));
- if (angle2 > 180.0)
- Translate( &pos, pos0, angle1+90.0, dp );
+ Translate( &pos, Da.pos0, angle1, -FindDistance( Da.pos0, pos )*cos(D2R(angle2)) );
+ else pos = Da.pos0;
+ } else if ( mode == crvCmdFromChord ) {
+ DIST_T dp = -FindDistance(Da.pos0, pos)*sin(D2R(angle2));
+ if (DifferenceBetweenAngles(FindAngle(Da.pos0,pos),angle1)>0)
+ Translate( &pos, Da.pos0, angle1+90, dp );
+ else
+ Translate( &pos, Da.pos0, angle1-90, -dp );
+ } else if (mode == crvCmdFromCenter) {
+ DIST_T dp = -FindDistance(Da.pos0, pos)*sin(D2R(angle2));
+ if (angle2 > 90 && angle2 < 270.0)
+ Translate( &pos, Da.pos0, angle1+90.0, dp );
else
- Translate( &pos, pos0, angle1-90.0, dp );
+ Translate( &pos, Da.pos0, angle1-90.0, dp );
+ } else if (mode == crvCmdFromTangent) {
+ DIST_T dp = FindDistance(Da.pos0, pos)*sin(D2R(angle2));
+ Translate( &pos, Da.pos0, angle1-90.0, dp );
}
} else SnapPos(&pos);
- tempSegs(0).u.l.pos[1] = pos;
- d = FindDistance( pos0, pos );
- a = FindAngle( pos0, pos );
+ tempSegs_da.cnt =1;
+ if (Da.trk && mode == crvCmdFromChord) {
+ tempSegs(0).type = SEG_CRVTRK;
+ tempSegs(0).u.c.center.x = (pos.x+Da.pos0.x)/2.0;
+ tempSegs(0).u.c.center.y = (pos.y+Da.pos0.y)/2.0;
+ tempSegs(0).u.c.radius = FindDistance(pos,Da.pos0)/2;
+ ANGLE_T a0 = FindAngle(tempSegs(0).u.c.center,Da.pos0);
+ ANGLE_T a1 = FindAngle(tempSegs(0).u.c.center,pos);
+ if (NormalizeAngle(a0+90-GetTrkEndAngle(Da.trk,Da.ep))<90) {
+ tempSegs(0).u.c.a0 = a0;
+ } else {
+ tempSegs(0).u.c.a0 = a1;
+ }
+ tempSegs(0).u.c.a1 = 180.0;
+ } else tempSegs(0).u.l.pos[1] = pos;
+ Da.pos1 = pos;
+
+ d = FindDistance( Da.pos0, Da.pos1 );
+ a = FindAngle( Da.pos0, Da.pos1 );
switch ( mode ) {
case crvCmdFromEP1:
if (Da.trk) message( _("Start Locked: Drag out curve start - Angle=%0.3f"), PutAngle(a));
else message( _("Drag out curve start - Angle=%0.3f"), PutAngle(a) );
+ CreateEndAnchor(Da.pos0,anchor_array,Da.lock0);
+ DrawArrowHeadsArray( anchor_array, pos, FindAngle(Da.pos0,Da.pos1)+90, TRUE, wDrawColorBlue );
tempSegs_da.cnt = 1;
break;
case crvCmdFromTangent:
- if (Da.trk) message( _("Tangent Locked: Drag out center - Radius=%s Angle=%0.3f"), FormatDistance(d), PutAngle(a) );
+ if (Da.trk) message( _("Tangent locked: Drag out center - Radius=%s Angle=%0.3f"), FormatDistance(d), PutAngle(a) );
else message( _("Drag out center - Radius=%s Angle=%0.3f"), FormatDistance(d), PutAngle(a) );
- tempSegs(1).u.c.center = pos;
- DrawArrowHeads( &tempSegs(2), pos0, FindAngle(pos0,pos)+90, TRUE, wDrawColorBlack );
- tempSegs_da.cnt = 7;
+ CreateEndAnchor(Da.pos1,anchor_array,TRUE);
+ DrawArrowHeadsArray( anchor_array, Da.pos0, FindAngle(Da.pos0,Da.pos1)+90, TRUE, wDrawColorBlue );
+ tempSegs_da.cnt = 1;
break;
case crvCmdFromCenter:
- message( _("Radius=%s Angle=%0.3f"), FormatDistance(d), PutAngle(a) );
- tempSegs(1).u.c.center = pos0;
- DrawArrowHeads( &tempSegs(2), pos, FindAngle(pos,pos0)+90, TRUE, wDrawColorBlack );
- tempSegs_da.cnt = 7;
+ message( _("Drag to Edge: Radius=%s Angle=%0.3f"), FormatDistance(d), PutAngle(a) );
+ CreateEndAnchor(Da.pos0,anchor_array,Da.lock0);
+ DrawArrowHeadsArray( anchor_array, Da.pos1, FindAngle(Da.pos1,Da.pos0)+90, TRUE, wDrawColorBlue );
+ tempSegs_da.cnt = 1;
break;
case crvCmdFromChord:
- message( _("Length=%s Angle=%0.3f"), FormatDistance(d), PutAngle(a) );
- if ( d > mainD.scale*0.25 ) {
- pos.x = (pos.x+pos0.x)/2.0;
- pos.y = (pos.y+pos0.y)/2.0;
- DrawArrowHeads( &tempSegs(1), pos, FindAngle(pos,pos0)+90, TRUE, wDrawColorBlack );
- tempSegs_da.cnt = 6;
- } else {
- tempSegs_da.cnt = 1;
+ if (Da.trk) message( _("Start locked: Drag out chord length=%s angle=%0.3f"), FormatDistance(d), PutAngle(a) );
+ else message( _("Drag out chord length=%s angle=%0.3f"), FormatDistance(d), PutAngle(a) );
+ Da.middle.x = (Da.pos1.x+Da.pos0.x)/2.0;
+ Da.middle.y = (Da.pos1.y+Da.pos0.y)/2.0;
+ if (track && Da.trk) {
+ ANGLE_T ea = GetTrkEndAngle(Da.trk,Da.ep);
+ Translate(&Da.middle,Da.middle,ea,FindDistance(Da.middle,Da.pos0));
}
+ CreateEndAnchor(Da.pos0,anchor_array,TRUE);
+ CreateEndAnchor(Da.pos1,anchor_array,FALSE);
+ if (!track || !Da.trk)
+ DrawArrowHeadsArray( anchor_array, Da.middle, FindAngle(Da.pos0,Da.pos1)+90, TRUE, wDrawColorBlue );
break;
}
return C_CONTINUE;
case C_UP:
+ /* Note - no anchor reset - assumes run after Down/Move */
if (!Da.down) return C_CONTINUE;
if (Da.trk) {
angle1 = NormalizeAngle(GetTrkEndAngle(Da.trk, Da.ep));
- angle2 = NormalizeAngle(FindAngle(pos, pos0)-angle1);
+ angle2 = NormalizeAngle(FindAngle(pos, Da.pos0)-angle1);
if (mode == crvCmdFromEP1) {
if (angle2 > 90.0 && angle2 < 270.0) {
- Translate( &pos, pos0, angle1, -FindDistance( pos0, pos )*cos(D2R(angle2)) );
+ Translate( &pos, Da.pos0, angle1, -FindDistance( Da.pos0, pos )*cos(D2R(angle2)) );
Da.pos1 = pos;
} else {
ErrorMessage( MSG_TRK_TOO_SHORT, "Curved ", PutDim(0.0) );
return C_TERMINATE;
}
+ } else if (mode == crvCmdFromTangent) {
+ DIST_T dp = FindDistance(Da.pos0, pos)*sin(D2R(angle2));
+ Translate( &pos, Da.pos0, angle1-90.0, dp );
+ Da.pos1 = pos;
} else {
- DIST_T dp = -FindDistance(pos0, pos)*sin(D2R(angle2));
+ DIST_T dp = -FindDistance(Da.pos0, pos)*sin(D2R(angle2));
if (angle2 > 180.0)
- Translate( &pos, pos0, angle1+90.0, dp );
+ Translate( &pos, Da.pos0, angle1+90.0, dp );
else
- Translate( &pos, pos0, angle1-90.0, dp );
+ Translate( &pos, Da.pos0, angle1-90.0, dp );
Da.pos1 = pos;
}
+ if (FindDistance(Da.pos0,Da.pos1)<minLength) {
+ ErrorMessage( MSG_TRK_TOO_SHORT, "Curved ", PutDim(FindDistance(Da.pos0,Da.pos1)) );
+ return C_TERMINATE;
+ }
}
switch (mode) {
case crvCmdFromEP1:
- DrawArrowHeads( &tempSegs(1), pos, FindAngle(pos,pos0)+90, TRUE, drawColorRed );
- tempSegs_da.cnt = 6;
- break;
- case crvCmdFromChord:
- tempSegs(1).color = drawColorRed;
case crvCmdFromTangent:
case crvCmdFromCenter:
- tempSegs(2).color = drawColorRed;
- tempSegs(3).color = drawColorRed;
- tempSegs(4).color = drawColorRed;
- tempSegs(5).color = drawColorRed;
- tempSegs(6).color = drawColorRed;
- break;
+ case crvCmdFromChord:
+ for (int i=0;i<(*anchor_array).cnt;i++) {
+ DYNARR_N(trkSeg_t,*anchor_array,i).color = drawColorRed;
+ }
+ break;
}
message( _("Drag on Red arrows to adjust curve") );
return C_CONTINUE;
@@ -296,6 +410,7 @@ EXPORT STATUS_T CreateCurve(
}
+
static STATUS_T CmdCurve( wAction_t action, coOrd pos )
{
track_p t;
@@ -310,38 +425,71 @@ static STATUS_T CmdCurve( wAction_t action, coOrd pos )
Da.state = -1;
Da.pos0 = pos;
tempSegs_da.cnt = 0;
+ segCnt = 0;
STATUS_T rcode;
- return CreateCurve( action, pos, TRUE, wDrawColorBlack, 0, curveMode, InfoMessage );
-
- case C_TEXT:
- if ( Da.state == 0 )
- return CreateCurve( action, pos, TRUE, wDrawColorBlack, 0, curveMode, InfoMessage );
- else
- return C_CONTINUE;
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ return CreateCurve( action, pos, TRUE, wDrawColorBlack, 0, curveMode, &anchors_da, InfoMessage );
case C_DOWN:
- if ( Da.state == -1 ) {
- //SnapPos( &pos );
- Da.pos0 = pos;
+ if (Da.state == -1) {
+ BOOL_T found = FALSE;
+ if (curveMode != crvCmdFromCenter ) {
+ if (((MyGetKeyState() & WKEY_ALT)==0) == magneticSnap) {
+ if ((t = OnTrack(&pos,FALSE,TRUE))!=NULL) {
+ EPINX_T ep = PickUnconnectedEndPointSilent(pos, t);
+ if (ep != -1) {
+ if (GetTrkGauge(t) != GetScaleTrackGauge(GetLayoutCurScale())) {
+ wBeep();
+ InfoMessage(_("Track is different gauge"));
+ return C_CONTINUE;
+ }
+ pos = GetTrkEndPos(t, ep);
+ found = TRUE;
+ }
+ }
+ }
+ }
+ if (!found) SnapPos( &pos );
+ Da.pos0 = Da.pos1 = pos;
Da.state = 0;
- rcode = CreateCurve( action, pos, TRUE, wDrawColorBlack, 0, curveMode, InfoMessage );
+ rcode = CreateCurve( action, pos, TRUE, wDrawColorBlack, 0, curveMode, &anchors_da, InfoMessage );
+ segCnt = tempSegs_da.cnt ;
if (!Da.down) Da.state = -1;
return rcode;
//Da.pos0 = pos;
- } else {
- tempSegs_da.cnt = segCnt;
- return C_CONTINUE;
}
+ //This is where the user could adjust - if we allow that?
+ tempSegs_da.cnt = segCnt;
+ return C_CONTINUE;
+
+
+ case wActionMove:
+ if ((Da.state<0) && (curveMode != crvCmdFromCenter)) {
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ if (((MyGetKeyState() & WKEY_ALT)==0) == magneticSnap) {
+ if ((t=OnTrack(&pos,FALSE,TRUE))!= NULL) {
+ if (GetTrkGauge(t) == GetScaleTrackGauge(GetLayoutCurScale())) {
+ EPINX_T ep = PickUnconnectedEndPointSilent(pos, t);
+ if (ep != -1) {
+ pos = GetTrkEndPos(t, ep);
+ CreateEndAnchor(pos,&anchors_da,FALSE);
+ }
+ }
+ }
+ }
+ }
+ return C_CONTINUE;
case C_MOVE:
if (Da.state<0) return C_CONTINUE;
- mainD.funcs->options = wDrawOptTemp;
- DrawSegs( &mainD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
if ( Da.state == 0 ) {
Da.pos1 = pos;
- rc = CreateCurve( action, pos, TRUE, wDrawColorBlack, 0, curveMode, InfoMessage );
+ rc = CreateCurve( action, pos, TRUE, wDrawColorBlack, 0, curveMode, &anchors_da, InfoMessage );
+ segCnt = tempSegs_da.cnt ;
} else {
+ DYNARR_RESET(trkSeg_t,anchors_da);
// SnapPos( &pos );
+ tempSegs_da.cnt = segCnt;
if (Da.trk) PlotCurve( curveMode, Da.pos0, Da.pos1, pos, &Da.curveData, FALSE );
else PlotCurve( curveMode, Da.pos0, Da.pos1, pos, &Da.curveData, TRUE );
if (Da.curveData.type == curveTypeStraight) {
@@ -349,11 +497,14 @@ static STATUS_T CmdCurve( wAction_t action, coOrd pos )
tempSegs(0).u.l.pos[0] = Da.pos0;
tempSegs(0).u.l.pos[1] = Da.curveData.pos1;
tempSegs_da.cnt = 1;
+ segCnt = 1;
InfoMessage( _("Straight Track: Length=%s Angle=%0.3f"),
FormatDistance(FindDistance( Da.pos0, Da.curveData.pos1 )),
PutAngle(FindAngle( Da.pos0, Da.curveData.pos1 )) );
+ DrawArrowHeadsArray(&anchors_da,Da.curveData.pos1,FindAngle(Da.pos0, Da.curveData.pos1)+90,TRUE,wDrawColorRed);
} else if (Da.curveData.type == curveTypeNone) {
tempSegs_da.cnt = 0;
+ segCnt = 0;
InfoMessage( _("Back") );
} else if (Da.curveData.type == curveTypeCurve) {
tempSegs(0).type = SEG_CRVTRK;
@@ -362,6 +513,7 @@ static STATUS_T CmdCurve( wAction_t action, coOrd pos )
tempSegs(0).u.c.a0 = Da.curveData.a0;
tempSegs(0).u.c.a1 = Da.curveData.a1;
tempSegs_da.cnt = 1;
+ segCnt = 1;
d = D2R(Da.curveData.a1);
if (d < 0.0)
d = 2*M_PI+d;
@@ -375,80 +527,101 @@ static STATUS_T CmdCurve( wAction_t action, coOrd pos )
InfoMessage( _("Curved Track: Radius=%s Angle=%0.3f Length=%s"),
FormatDistance(Da.curveData.curveRadius), Da.curveData.a1,
FormatDistance(Da.curveData.curveRadius*d) );
+ coOrd pos1;
+ Translate(&pos1,Da.curveData.curvePos,Da.curveData.a0+Da.curveData.a1,Da.curveData.curveRadius);
+ if (curveMode == crvCmdFromEP1 || curveMode == crvCmdFromChord)
+ DrawArrowHeadsArray(&anchors_da,pos,FindAngle(Da.curveData.curvePos,pos),TRUE,wDrawColorRed);
+ else if (curveMode == crvCmdFromTangent || curveMode == crvCmdFromCenter) {
+ CreateEndAnchor(Da.curveData.pos2,&anchors_da,FALSE);
+ DrawArrowHeadsArray(&anchors_da,Da.curveData.pos2,FindAngle(Da.curveData.curvePos,Da.curveData.pos2)+90,TRUE,wDrawColorRed);
+ }
+ CreateEndAnchor(Da.curveData.curvePos,&anchors_da,TRUE);
}
}
- DrawSegs( &mainD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
mainD.funcs->options = 0;
return rc;
-
-
+ case C_TEXT:
+ if ( Da.state == 0 )
+ return CreateCurve( action, pos, TRUE, wDrawColorBlack, 0, curveMode, &anchors_da, InfoMessage );
+ /*no break*/
case C_UP:
if (Da.state<0) return C_CONTINUE;
- mainD.funcs->options = wDrawOptTemp;
- DrawSegs( &mainD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
- if (Da.state == 0) {
+ if (Da.state == 0 && ((curveMode != crvCmdFromChord) || (curveMode == crvCmdFromChord && !Da.trk))) {
SnapPos( &pos );
Da.pos1 = pos;
+ if ((d = FindDistance(Da.pos0,Da.pos1))<minLength) {
+ ErrorMessage( MSG_TRK_TOO_SHORT, "Curved ", PutDim(fabs(minLength-d)) );
+ return C_TERMINATE;
+ }
Da.state = 1;
- CreateCurve( action, pos, TRUE, wDrawColorBlack, 0, curveMode, InfoMessage );
- DrawSegs( &mainD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
+ CreateCurve( action, pos, TRUE, wDrawColorBlack, 0, curveMode, &anchors_da, InfoMessage );
+ tempSegs_da.cnt = 1;
mainD.funcs->options = 0;
segCnt = tempSegs_da.cnt;
InfoMessage( _("Drag on Red arrows to adjust curve") );
return C_CONTINUE;
- } else {
- mainD.funcs->options = 0;
- tempSegs_da.cnt = 0;
- Da.state = -1;
- if (Da.curveData.type == curveTypeStraight) {
- if ((d=FindDistance( Da.pos0, Da.curveData.pos1 )) <= minLength) {
- ErrorMessage( MSG_TRK_TOO_SHORT, "Curved ", PutDim(fabs(minLength-d)) );
- return C_TERMINATE;
- }
- UndoStart( _("Create Straight Track"), "newCurve - straight" );
- t = NewStraightTrack( Da.pos0, Da.curveData.pos1 );
- if (Da.trk) {
- EPINX_T ep = PickUnconnectedEndPoint(Da.pos0, t);
- if (ep != -1) ConnectTracks(Da.trk, Da.ep, t, ep);
- }
- UndoEnd();
- } else if (Da.curveData.type == curveTypeCurve) {
- if ((d= Da.curveData.curveRadius * Da.curveData.a1 *2.0*M_PI/360.0) <= minLength) {
- ErrorMessage( MSG_TRK_TOO_SHORT, "Curved ", PutDim(fabs(minLength-d)) );
- return C_TERMINATE;
- }
- UndoStart( _("Create Curved Track"), "newCurve - curve" );
- t = NewCurvedTrack( Da.curveData.curvePos, Da.curveData.curveRadius,
- Da.curveData.a0, Da.curveData.a1, 0 );
- if (Da.trk) {
- EPINX_T ep = PickUnconnectedEndPoint(Da.pos0, t);
- if (ep != -1) ConnectTracks(Da.trk, Da.ep, t, ep);
- }
- UndoEnd();
- } else {
- return C_ERROR;
+ } else if ((curveMode == crvCmdFromChord && Da.state == 0 && Da.trk)) {
+ pos = Da.middle;
+ if ((d = FindDistance(Da.pos0,Da.pos1))<minLength) {
+ ErrorMessage( MSG_TRK_TOO_SHORT, "Curved ", PutDim(fabs(minLength-d)) );
+ return C_TERMINATE;
+ }
+ PlotCurve( curveMode, Da.pos0, Da.pos1, Da.middle, &Da.curveData, TRUE );
+ }
+ mainD.funcs->options = 0;
+ tempSegs_da.cnt = 0;
+ segCnt = 0;
+ Da.state = -1;
+ DYNARR_RESET(trkSeg_t,anchors_da); // No More anchors for this one
+ if (Da.curveData.type == curveTypeStraight) {
+ if ((d = FindDistance( Da.pos0, Da.curveData.pos1 )) < minLength) {
+ ErrorMessage( MSG_TRK_TOO_SHORT, "Curved ", PutDim(fabs(minLength-d)) );
+ return C_TERMINATE;
+ }
+ UndoStart( _("Create Straight Track"), "newCurve - straight" );
+ t = NewStraightTrack( Da.pos0, Da.curveData.pos1 );
+ if (Da.trk && !(MyGetKeyState() & WKEY_SHIFT)) {
+ EPINX_T ep = PickUnconnectedEndPoint(Da.pos0, t);
+ if (ep != -1) ConnectTracks(Da.trk, Da.ep, t, ep);
+ }
+ UndoEnd();
+ } else if (Da.curveData.type == curveTypeCurve) {
+ if ((d = Da.curveData.curveRadius * Da.curveData.a1 *2.0*M_PI/360.0) < minLength) {
+ ErrorMessage( MSG_TRK_TOO_SHORT, "Curved ", PutDim(fabs(minLength-d)) );
+ return C_TERMINATE;
+ }
+ UndoStart( _("Create Curved Track"), "newCurve - curve" );
+ t = NewCurvedTrack( Da.curveData.curvePos, Da.curveData.curveRadius,
+ Da.curveData.a0, Da.curveData.a1, 0 );
+ if (Da.trk && !(MyGetKeyState() & WKEY_SHIFT)) {
+ EPINX_T ep = PickUnconnectedEndPoint(Da.pos0, t);
+ if (ep != -1) ConnectTracks(Da.trk, Da.ep, t, ep);
}
- DrawNewTrack( t );
- return C_TERMINATE;
+ UndoEnd();
+ } else {
+ return C_ERROR;
}
+ DrawNewTrack( t );
+ return C_TERMINATE;
case C_REDRAW:
if ( Da.state >= 0 ) {
- mainD.funcs->options = wDrawOptTemp;
- DrawSegs( &mainD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
+ DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
mainD.funcs->options = 0;
}
+ if (anchors_da.cnt)
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
return C_CONTINUE;
case C_CANCEL:
if (Da.state == 1) {
- mainD.funcs->options = wDrawOptTemp;
- DrawSegs( &mainD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
- mainD.funcs->options = 0;
tempSegs_da.cnt = 0;
Da.trk = NULL;
}
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ DYNARR_RESET(trkSeg_t,tempSegs_da);
Da.state = -1;
+ segCnt = 0;
return C_CONTINUE;
}
@@ -581,7 +754,6 @@ static void ComputeHelix(
static void HelixCancel( wWin_p win )
{
wHide( helixW );
- Reset();
}
@@ -610,30 +782,30 @@ static STATUS_T CmdCircleCommon( wAction_t action, coOrd pos, BOOL_T helix )
case C_START:
if (helix) {
if (helixW == NULL)
- helixW = ParamCreateDialog( &helixPG, MakeWindowTitle(_("Helix")), NULL, NULL, HelixCancel, TRUE, NULL, 0, ComputeHelix );
- ParamLoadControls( &helixPG );
- ParamGroupRecord( &helixPG );
- ComputeHelix( NULL, 6, NULL );
- wShow( helixW );
- memset( h_orders, 0, sizeof h_orders );
+ helixW = ParamCreateDialog(&helixPG, MakeWindowTitle(_("Helix")), NULL, NULL, HelixCancel, TRUE, NULL, 0, ComputeHelix);
+ ParamLoadControls(&helixPG);
+ ParamGroupRecord(&helixPG);
+ ComputeHelix(NULL, 6, NULL);
+ wShow(helixW);
+ memset(h_orders, 0, sizeof h_orders);
h_clock = 0;
} else {
- ParamLoadControls( &circleRadiusPG );
- ParamGroupRecord( &circleRadiusPG );
- switch ( circleMode ) {
+ ParamLoadControls(&circleRadiusPG);
+ ParamGroupRecord(&circleRadiusPG);
+ switch (circleMode) {
case circleCmdFixedRadius:
controls[0] = circleRadiusPLs[0].control;
controls[1] = NULL;
labels[0] = N_("Circle Radius");
- InfoSubstituteControls( controls, labels );
+ InfoSubstituteControls(controls, labels);
break;
case circleCmdFromTangent:
- InfoSubstituteControls( NULL, NULL );
- InfoMessage( _("Click on Circle Edge") );
+ InfoSubstituteControls(NULL, NULL);
+ InfoMessage(_("Click on Circle Edge"));
break;
case circleCmdFromCenter:
- InfoSubstituteControls( NULL, NULL );
- InfoMessage( _("Click on Circle Center") );
+ InfoSubstituteControls(NULL, NULL);
+ InfoMessage(_("Click on Circle Center"));
break;
}
}
@@ -641,98 +813,95 @@ static STATUS_T CmdCircleCommon( wAction_t action, coOrd pos, BOOL_T helix )
return C_CONTINUE;
case C_DOWN:
- DYNARR_SET( trkSeg_t, tempSegs_da, 1 );
+ DYNARR_SET(trkSeg_t, tempSegs_da, 1);
tempSegs_da.cnt = 0;
if (helix) {
if (helixRadius <= 0.0) {
- ErrorMessage( MSG_RADIUS_GTR_0 );
+ ErrorMessage(MSG_RADIUS_GTR_0);
return C_ERROR;
}
if (helixTurns <= 0) {
- ErrorMessage( MSG_HELIX_TURNS_GTR_0 );
+ ErrorMessage(MSG_HELIX_TURNS_GTR_0);
return C_ERROR;
}
- ParamLoadData( &helixPG );
+ ParamLoadData(&helixPG);
} else {
- ParamLoadData( &circleRadiusPG );
- switch( circleMode ) {
+ ParamLoadData(&circleRadiusPG);
+ switch (circleMode) {
case circleCmdFixedRadius:
if (circleRadius <= 0.0) {
- ErrorMessage( MSG_RADIUS_GTR_0 );
+ ErrorMessage(MSG_RADIUS_GTR_0);
return C_ERROR;
}
break;
case circleCmdFromTangent:
- InfoSubstituteControls( NULL, NULL );
- InfoMessage( _("Drag to Center") );
+ InfoSubstituteControls(NULL, NULL);
+ InfoMessage(_("Drag to Center"));
break;
case circleCmdFromCenter:
- InfoSubstituteControls( NULL, NULL );
- InfoMessage( _("Drag to Edge") );
+ InfoSubstituteControls(NULL, NULL);
+ InfoMessage(_("Drag to Edge"));
break;
}
}
- SnapPos( &pos );
+ SnapPos(&pos);
tempSegs(0).u.c.center = pos0 = pos;
tempSegs(0).color = wDrawColorBlack;
tempSegs(0).width = 0;
return C_CONTINUE;
case C_MOVE:
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
- SnapPos( &pos );
+ SnapPos(&pos);
tempSegs(0).u.c.center = pos;
- if ( !helix ) {
- switch ( circleMode ) {
+ if (!helix) {
+ switch (circleMode) {
case circleCmdFixedRadius:
break;
case circleCmdFromCenter:
tempSegs(0).u.c.center = pos0;
- circleRadius = FindDistance( tempSegs(0).u.c.center, pos );
- InfoMessage( _("Radius=%s"), FormatDistance(circleRadius) );
+ circleRadius = FindDistance(tempSegs(0).u.c.center, pos);
+ InfoMessage(_("Radius=%s"), FormatDistance(circleRadius));
break;
case circleCmdFromTangent:
- circleRadius = FindDistance( tempSegs(0).u.c.center, pos0 );
- InfoMessage( _("Radius=%s"), FormatDistance(circleRadius) );
+ circleRadius = FindDistance(tempSegs(0).u.c.center, pos0);
+ InfoMessage(_("Radius=%s"), FormatDistance(circleRadius));
break;
}
}
tempSegs(0).type = SEG_CRVTRK;
- tempSegs(0).u.c.radius = helix?helixRadius:circleRadius;
+ tempSegs(0).u.c.radius = helix ? helixRadius : circleRadius;
tempSegs(0).u.c.a0 = 0.0;
tempSegs(0).u.c.a1 = 360.0;
tempSegs_da.cnt = 1;
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
return C_CONTINUE;
case C_UP:
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
- if (helixRadius > mapD.size.x && helixRadius > mapD.size.y) {
- ErrorMessage( MSG_RADIUS_TOO_BIG );
- return C_ERROR;
- }
- if (circleRadius > mapD.size.x && circleRadius > mapD.size.y) {
- ErrorMessage( MSG_RADIUS_TOO_BIG );
- return C_ERROR;
- }
- if ( helix ) {
+ if (helix) {
+ if (helixRadius > mapD.size.x || helixRadius > mapD.size.y) {
+ ErrorMessage(MSG_RADIUS_TOO_BIG);
+ return C_ERROR;
+ }
if (helixRadius > 10000) {
- ErrorMessage( MSG_RADIUS_GTR_10000 );
+ ErrorMessage(MSG_RADIUS_GTR_10000);
return C_ERROR;
}
- UndoStart( _("Create Helix Track"), "newHelix" );
- t = NewCurvedTrack( tempSegs(0).u.c.center, helixRadius, 0.0, 0.0, helixTurns );
+ UndoStart(_("Create Helix Track"), "newHelix");
+ t = NewCurvedTrack(tempSegs(0).u.c.center, helixRadius, 0.0, 0.0, helixTurns);
} else {
- if ( circleRadius <= 0 ) {
- ErrorMessage( MSG_RADIUS_GTR_0 );
+ if (circleRadius > mapD.size.x || circleRadius > mapD.size.y) {
+ ErrorMessage(MSG_RADIUS_TOO_BIG);
+ return C_ERROR;
+ }
+ if (circleRadius <= 0) {
+ ErrorMessage(MSG_RADIUS_GTR_0);
return C_ERROR;
}
if ((circleRadius > 100000) || (helixRadius > 10000)) {
- ErrorMessage( MSG_RADIUS_GTR_10000 );
+ ErrorMessage(MSG_RADIUS_GTR_10000);
return C_ERROR;
}
- UndoStart( _("Create Circle Track"), "newCircle" );
- t = NewCurvedTrack( tempSegs(0).u.c.center, circleRadius, 0.0, 0.0, 0 );
+ UndoStart(_("Create Circle Track"), "newCircle");
+ t = NewCurvedTrack(tempSegs(0).u.c.center, circleRadius, 0.0, 0.0, 0);
}
UndoEnd();
DrawNewTrack(t);
@@ -779,19 +948,21 @@ static STATUS_T CmdHelix( wAction_t action, coOrd pos )
#include "bitmaps/curve3.xpm"
#include "bitmaps/curve4.xpm"
#include "bitmaps/bezier.xpm"
+#include "bitmaps/cornu.xpm"
#include "bitmaps/circle1.xpm"
#include "bitmaps/circle2.xpm"
#include "bitmaps/circle3.xpm"
EXPORT void InitCmdCurve( wMenu_p menu )
{
+ AddMenuButton( menu, CmdCornu, "cmdCornu", _("Cornu Curve"), wIconCreatePixMap(cornu_xpm), LEVEL0_50, IC_STICKY|IC_POPUP2|IC_WANT_MOVE, ACCL_CORNU, (void*)cornuCmdCreateTrack);
ButtonGroupBegin( _("Curve Track"), "cmdCircleSetCmd", _("Curve Tracks") );
- AddMenuButton( menu, CmdCurve, "cmdCurveEndPt", _("Curve from End-Pt"), wIconCreatePixMap( curve1_xpm ), LEVEL0_50, IC_STICKY|IC_POPUP2, ACCL_CURVE1, (void*)0 );
- AddMenuButton( menu, CmdCurve, "cmdCurveTangent", _("Curve from Tangent"), wIconCreatePixMap( curve2_xpm ), LEVEL0_50, IC_STICKY|IC_POPUP2, ACCL_CURVE2, (void*)1 );
- AddMenuButton( menu, CmdCurve, "cmdCurveCenter", _("Curve from Center"), wIconCreatePixMap( curve3_xpm ), LEVEL0_50, IC_STICKY|IC_POPUP2, ACCL_CURVE3, (void*)2 );
- AddMenuButton( menu, CmdCurve, "cmdCurveChord", _("Curve from Chord"), wIconCreatePixMap( curve4_xpm ), LEVEL0_50, IC_STICKY|IC_POPUP2, ACCL_CURVE4, (void*)3 );
- AddMenuButton( menu, CmdBezCurve, "cmdBezier", _("Bezier Curve"), wIconCreatePixMap(bezier_xpm), LEVEL0_50, IC_STICKY|IC_POPUP2, ACCL_BEZIER, (void*)bezCmdCreateTrack );
+ AddMenuButton( menu, CmdCurve, "cmdCurveEndPt", _("Curve from End-Pt"), wIconCreatePixMap( curve1_xpm ), LEVEL0_50, IC_STICKY|IC_POPUP2|IC_WANT_MOVE, ACCL_CURVE1, (void*)0 );
+ AddMenuButton( menu, CmdCurve, "cmdCurveTangent", _("Curve from Tangent"), wIconCreatePixMap( curve2_xpm ), LEVEL0_50, IC_STICKY|IC_POPUP2|IC_WANT_MOVE, ACCL_CURVE2, (void*)1 );
+ AddMenuButton( menu, CmdCurve, "cmdCurveCenter", _("Curve from Center"), wIconCreatePixMap( curve3_xpm ), LEVEL0_50, IC_STICKY|IC_POPUP2|IC_WANT_MOVE, ACCL_CURVE3, (void*)2 );
+ AddMenuButton( menu, CmdCurve, "cmdCurveChord", _("Curve from Chord"), wIconCreatePixMap( curve4_xpm ), LEVEL0_50, IC_STICKY|IC_POPUP2|IC_WANT_MOVE, ACCL_CURVE4, (void*)3 );
+ AddMenuButton( menu, CmdBezCurve, "cmdBezier", _("Bezier Curve"), wIconCreatePixMap(bezier_xpm), LEVEL0_50, IC_STICKY|IC_POPUP2|IC_WANT_MOVE, ACCL_BEZIER, (void*)bezCmdCreateTrack );
ButtonGroupEnd();
ButtonGroupBegin( _("Circle Track"), "cmdCurveSetCmd", _("Circle Tracks") );
@@ -816,7 +987,7 @@ EXPORT void InitCmdCurve( wMenu_p menu )
void InitCmdHelix(wMenu_p menu)
{
AddMenuButton(menu, CmdHelix, "cmdHelix", _("Helix"), NULL, LEVEL0_50,
- IC_STICKY|IC_POPUP2, ACCL_HELIX, NULL);
+ IC_STICKY|IC_INITNOTSTICKY|IC_POPUP2, ACCL_HELIX, NULL);
ParamRegister(&helixPG);
RegisterChangeNotification(ChangeHelixW);
}
diff --git a/app/bin/ccurve.h b/app/bin/ccurve.h
index c9d1c8c..0c00c46 100644
--- a/app/bin/ccurve.h
+++ b/app/bin/ccurve.h
@@ -32,6 +32,7 @@ typedef struct {
curveType_e type;
coOrd curvePos;
coOrd pos1;
+ coOrd pos2;
DIST_T curveRadius;
ANGLE_T a0, a1;
BOOL_T negative;
@@ -48,13 +49,14 @@ typedef struct {
#define circleCmdFromCenter (2)
typedef void (*curveMessageProc)( char *, ... );
-STATUS_T CreateCurve( wAction_t, coOrd, BOOL_T, wDrawColor, DIST_T, long, curveMessageProc );
+STATUS_T CreateCurve( wAction_t, coOrd, BOOL_T, wDrawColor, DIST_T, long, dynArr_t *,curveMessageProc );
int IsCurveCircle( track_p );
void PlotCurve( long, coOrd, coOrd, coOrd, curveData_t *, BOOL_T );
track_p NewCurvedTrack( coOrd, DIST_T, ANGLE_T, ANGLE_T, long );
-DIST_T CurveDescriptionDistance( coOrd, track_p );
+DIST_T CurveDescriptionDistance( coOrd, track_p, coOrd *, BOOL_T, BOOL_T * );
STATUS_T CurveDescriptionMove( track_p, wAction_t, coOrd );
BOOL_T GetCurveMiddle( track_p , coOrd * );
-void DrawArrowHeads(trkSeg_p sp, coOrd pos, ANGLE_T angle, BOOL_T bidirectional, wDrawColor color );
+int DrawArrowHeads(trkSeg_p sp, coOrd pos, ANGLE_T angle, BOOL_T bidirectional, wDrawColor color );
+int DrawArrowHeadsArray(dynArr_t *anchor_array,coOrd pos,ANGLE_T angle,BOOL_T bidirectional,wDrawColor color );
#endif // !HAVE_CCURVE_H
diff --git a/app/bin/cdraw.c b/app/bin/cdraw.c
index 9bddcaf..6bb4c4a 100644
--- a/app/bin/cdraw.c
+++ b/app/bin/cdraw.c
@@ -23,6 +23,7 @@
#include <math.h>
#include <stdint.h>
#include <string.h>
+#include "wlib.h"
#include "ccurve.h"
#include "cbezier.h"
@@ -37,7 +38,31 @@
extern TRKTYP_T T_BZRLIN;
-extern void wSetSelectedFontSize(int size);
+static wMenu_p drawModDelMI;
+static wMenu_p drawModLinMI;
+static wMenuPush_p drawModDel;
+static wMenuPush_p drawModSmooth;
+static wMenuPush_p drawModVertex;
+static wMenuPush_p drawModRound;
+static wMenuPush_p drawModriginMode;
+static wMenuPush_p drawModPointsMode;
+static wMenuPush_p drawModOrigin;
+static wMenuPush_p drawModLast;
+static wMenuPush_p drawModCenter;
+static wMenuPush_p drawModClose;
+static wMenuPush_p drawModOpen;
+static wMenuPush_p drawModFill;
+static wMenuPush_p drawModEmpty;
+static wMenuPush_p drawModSolid;
+static wMenuPush_p drawModDot;
+static wMenuPush_p drawModDash;
+static wMenuPush_p drawModDashDot;
+static wMenuPush_p drawModDashDotDot;
+static wMenuPush_p drawModCenterDot;
+static wMenuPush_p drawModPhantom;
+
+
+extern void wSetSelectedFontSize(wFontSize_t size);
static long fontSizeList[] = {
4, 5, 6, 7, 8, 10, 12, 14, 16, 18, 20, 24, 28, 32, 36,
@@ -111,7 +136,7 @@ EXPORT void UpdateFontSizeList(
*fontSizeR = fontSize;
/* inform gtkfont dialog from change */
- wSetSelectedFontSize((int)fontSize);
+ wSetSelectedFontSize((wFontSize_t)fontSize);
/*LoadFontSizeList( list, *fontSizeR );*/
} else {
sprintf( message, "%ld", *fontSizeR );
@@ -128,9 +153,11 @@ EXPORT void UpdateFontSizeList(
*
*/
+
struct extraData {
coOrd orig;
ANGLE_T angle;
+ drawLineType_e lineType;
wIndex_t segCnt;
trkSeg_t segs[1];
};
@@ -167,12 +194,13 @@ static track_p MakeDrawFromSeg1(
xx->orig = pos;
xx->angle = angle;
xx->segCnt = 1;
+ xx->lineType = DRAWLINESOLID;
memcpy( xx->segs, sp, sizeof *(trkSeg_p)0 );
if (xx->segs[0].type == SEG_POLY ||
- xx->segs[0].type == SEG_FILPOLY) {
- xx->segs[0].u.p.pts = (coOrd*)MyMalloc( (sp->u.p.cnt) * sizeof (coOrd) );
- memcpy(xx->segs[0].u.p.pts, sp->u.p.pts, sp->u.p.cnt * sizeof (coOrd) );
+ xx->segs[0].type == SEG_FILPOLY ) {
+ xx->segs[0].u.p.pts = (pts_t*)MyMalloc( (sp->u.p.cnt) * sizeof (pts_t) );
+ memcpy(xx->segs[0].u.p.pts, sp->u.p.pts, sp->u.p.cnt * sizeof (pts_t) );
}
if (xx->segs[0].type == SEG_TEXT) {
xx->segs[0].u.t.string = MyStrdup(sp->u.t.string);
@@ -189,6 +217,254 @@ EXPORT track_p MakeDrawFromSeg(
return MakeDrawFromSeg1( 0, pos, angle, sp );
}
+int SliceCuts(ANGLE_T a, DIST_T radius) {
+ double Error = 0.05;
+ double Error_angle = acos(1-(Error/fabs(radius)));
+ if (Error_angle <0.0001) return 0;
+ return (int)(floor(D2R(a)/(2*Error_angle)));
+}
+
+/* Only straight, curved and PolyLine */
+EXPORT track_p MakePolyLineFromSegs(
+ coOrd pos,
+ ANGLE_T angle,
+ dynArr_t * segsArr)
+{
+ struct extraData * xx;
+ track_p trk;
+ trk = NewTrack( 0, T_DRAW, 0, sizeof *xx );
+ xx = GetTrkExtraData( trk );
+ xx->orig = pos;
+ xx->angle = angle;
+ xx->lineType = DRAWLINESOLID;
+ xx->segCnt = 1;
+ xx->segs[0].type = SEG_POLY;
+ xx->segs[0].width = 0;
+ xx->segs[0].u.p.polyType = POLYLINE;
+ xx->segs[0].color = wDrawColorBlack;
+ coOrd last;
+ BOOL_T first = TRUE;
+ int cnt = 0;
+ for (int i=0;i<segsArr->cnt;i++) {
+ trkSeg_p sp = &DYNARR_N(trkSeg_t,*segsArr,i);
+ if (sp->type == SEG_BEZLIN || sp->type == SEG_BEZTRK ) {
+ for (int j=0;j<sp->bezSegs.cnt;j++) {
+ trkSeg_p spb = &DYNARR_N(trkSeg_t,sp->bezSegs,j);
+ if (spb->type == SEG_STRLIN || spb->type == SEG_STRTRK) {
+ if (!first && IsClose(FindDistance(spb->u.l.pos[0], last)))
+ cnt++;
+ else
+ cnt=cnt+2;
+ last = spb->u.l.pos[1];
+ first = FALSE;
+ }
+ else if (spb->type == SEG_CRVLIN || spb->type == SEG_CRVTRK) {
+ coOrd this;
+ if (spb->u.c.radius >= 0.0)
+ Translate(&this, spb->u.c.center, spb->u.c.a0, fabs(spb->u.c.radius));
+ else
+ Translate(&this, spb->u.c.center, spb->u.c.a0+spb->u.c.a1, fabs(spb->u.c.radius));
+ if (first || !IsClose(FindDistance(this, last))) {
+ cnt++; //Add first point
+ }
+ cnt += 1 + SliceCuts(spb->u.c.a1,spb->u.c.radius);
+ if (spb->u.c.radius >= 0.0)
+ Translate(&last, spb->u.c.center, spb->u.c.a0+spb->u.c.a1, fabs(spb->u.c.radius));
+ else
+ Translate(&last, spb->u.c.center, spb->u.c.a0, fabs(spb->u.c.radius));
+ first = FALSE;
+ }
+ }
+ }
+ else if (sp->type == SEG_STRLIN || sp->type == SEG_STRTRK) {
+ if (!first && IsClose(FindDistance(sp->u.l.pos[0], last)))
+ cnt++;
+ else
+ cnt=cnt+2;
+ last = sp->u.l.pos[1];
+ first = FALSE;
+ }
+ else if (sp->type == SEG_CRVLIN || sp->type == SEG_CRVTRK) {
+ coOrd this;
+ if (sp->u.c.radius >= 0.0)
+ Translate(&this, sp->u.c.center, sp->u.c.a0, fabs(sp->u.c.radius));
+ else
+ Translate(&this, sp->u.c.center, sp->u.c.a0+sp->u.c.a1, fabs(sp->u.c.radius));
+ if (first || !IsClose(FindDistance(this, last))) {
+ cnt++; //Add first point
+ }
+ cnt += 1+ SliceCuts(sp->u.c.a1,sp->u.c.radius);
+ if (sp->u.c.radius >= 0.0)
+ Translate(&last, sp->u.c.center, sp->u.c.a0+sp->u.c.a1, fabs(sp->u.c.radius));
+ else
+ Translate(&last, sp->u.c.center, sp->u.c.a0, fabs(sp->u.c.radius));
+ first = FALSE;
+ }
+ else if (sp->type == SEG_POLY) {
+ if (!first && IsClose(FindDistance(sp->u.p.pts[0].pt, last)))
+ cnt = cnt + sp->u.p.cnt-1;
+ else
+ cnt = cnt + sp->u.p.cnt;
+ last = sp->u.p.pts[sp->u.p.cnt-1].pt;
+ first = FALSE;
+ }
+ }
+ xx->segs[0].u.p.cnt = cnt;
+ xx->segs[0].u.p.pts = (pts_t*)MyMalloc( (cnt) * sizeof (pts_t) );
+ first = TRUE;
+ int j =0;
+ for (int i=0;i<segsArr->cnt;i++) {
+ trkSeg_p sp = &DYNARR_N(trkSeg_t,*segsArr,i);
+ if (sp->type == SEG_BEZLIN || sp->type == SEG_BEZTRK ) {
+ for (int l=0;l<sp->bezSegs.cnt;l++) {
+ trkSeg_p spb = &DYNARR_N(trkSeg_t,sp->bezSegs,l);
+ if (spb->type == SEG_STRLIN || spb->type == SEG_STRTRK) {
+ if (first || !IsClose(FindDistance(spb->u.l.pos[0], last))) {
+ xx->segs[0].u.p.pts[j].pt = spb->u.l.pos[0];
+ xx->segs[0].u.p.pts[j].pt_type = wPolyLineStraight;
+ j++;
+ }
+ xx->segs[0].u.p.pts[j].pt = spb->u.l.pos[1];
+ xx->segs[0].u.p.pts[j].pt_type = wPolyLineStraight;
+ last = xx->segs[0].u.p.pts[j].pt;
+ j ++;
+ first = FALSE;
+ }
+ if (spb->type == SEG_CRVLIN || spb->type == SEG_CRVTRK) {
+ coOrd this;
+ if (spb->u.c.radius>=0.0)
+ Translate(&this, spb->u.c.center, spb->u.c.a0, fabs(spb->u.c.radius));
+ else
+ Translate(&this, spb->u.c.center, spb->u.c.a0+spb->u.c.a1, fabs(spb->u.c.radius));
+ if (first || !IsClose(FindDistance(this, last))) {
+ xx->segs[0].u.p.pts[j].pt= this;
+ xx->segs[0].u.p.pts[j].pt_type = wPolyLineStraight;
+ j++;
+ }
+ int slices = SliceCuts(spb->u.c.a1,spb->u.c.radius);
+ for (int k=1; k<slices;k++) {
+ if (spb->u.c.radius>=0.0)
+ Translate(&xx->segs[0].u.p.pts[j].pt, spb->u.c.center, spb->u.c.a0+(k*(spb->u.c.a1/(slices))), fabs(spb->u.c.radius));
+ else
+ Translate(&xx->segs[0].u.p.pts[j].pt, spb->u.c.center, spb->u.c.a0+((slices-k)*(spb->u.c.a1/(slices))), fabs(spb->u.c.radius));
+ xx->segs[0].u.p.pts[j].pt_type = wPolyLineSmooth;
+ j++;
+ }
+ if (spb->u.c.radius>=0.0)
+ Translate(&xx->segs[0].u.p.pts[j].pt, spb->u.c.center, spb->u.c.a0+spb->u.c.a1, fabs(spb->u.c.radius));
+ else
+ Translate(&xx->segs[0].u.p.pts[j].pt, spb->u.c.center, spb->u.c.a0, fabs(spb->u.c.radius));
+
+ xx->segs[0].u.p.pts[j].pt_type = wPolyLineStraight;
+ last = xx->segs[0].u.p.pts[j].pt;
+ j++;
+ first = FALSE;
+ }
+ }
+ }
+ if (sp->type == SEG_STRLIN || sp->type == SEG_STRTRK) {
+ if (first || !IsClose(FindDistance(sp->u.l.pos[0], last))) {
+ xx->segs[0].u.p.pts[j].pt = sp->u.l.pos[0];
+ xx->segs[0].u.p.pts[j].pt_type = wPolyLineStraight;
+ j++;
+ }
+ xx->segs[0].u.p.pts[j].pt = last = sp->u.l.pos[1];
+ xx->segs[0].u.p.pts[j].pt_type = wPolyLineStraight;
+ last = xx->segs[0].u.p.pts[j].pt;
+ j++;
+ first = FALSE;
+ }
+ if (sp->type == SEG_CRVLIN || sp->type == SEG_CRVTRK) {
+ coOrd this;
+ if (sp->u.c.radius>0)
+ Translate(&this, sp->u.c.center, sp->u.c.a0, fabs(sp->u.c.radius));
+ else
+ Translate(&this, sp->u.c.center, sp->u.c.a0+sp->u.c.a1, fabs(sp->u.c.radius));
+ if (first || !IsClose(FindDistance(this, last))) {
+ xx->segs[0].u.p.pts[j].pt= this;
+ xx->segs[0].u.p.pts[j].pt_type = wPolyLineStraight;
+ j++;
+ }
+ int slices = SliceCuts(sp->u.c.a1,sp->u.c.radius);
+
+ for (int k=1; k<slices;k++) {
+ if (sp->u.c.radius>0)
+ Translate(&xx->segs[0].u.p.pts[j].pt, sp->u.c.center, sp->u.c.a0+(k*(sp->u.c.a1/(slices))), fabs(sp->u.c.radius));
+ else
+ Translate(&xx->segs[0].u.p.pts[j].pt, sp->u.c.center, sp->u.c.a0+((slices-k)*(sp->u.c.a1/(slices))), fabs(sp->u.c.radius));
+ xx->segs[0].u.p.pts[j].pt_type = wPolyLineSmooth;
+ j++;
+ }
+ if (sp->u.c.radius>0)
+ Translate(&xx->segs[0].u.p.pts[j].pt, sp->u.c.center, sp->u.c.a0+sp->u.c.a1, fabs(sp->u.c.radius));
+ else
+ Translate(&xx->segs[0].u.p.pts[j].pt, sp->u.c.center, sp->u.c.a0, fabs(sp->u.c.radius));
+
+ xx->segs[0].u.p.pts[j].pt_type = wPolyLineStraight;
+ last = xx->segs[0].u.p.pts[j].pt;
+ j++;
+ first = FALSE;
+ }
+ if (sp->type == SEG_POLY) {
+ if (first || !IsClose(FindDistance(sp->u.p.pts[0].pt, last))) {
+ xx->segs[0].u.p.pts[j] = sp->u.p.pts[0];
+ j++;
+ }
+ memcpy(&xx->segs[0].u.p.pts[j],&sp->u.p.pts[1], (sp->u.p.cnt-1) * sizeof (pts_t));
+ last = xx->segs[0].u.p.pts[sp->u.p.cnt-1].pt;
+ j +=sp->u.p.cnt-1;
+ first = FALSE;
+ }
+ ASSERT(j<=cnt);
+
+ }
+ xx->segs[0].u.p.cnt = j;
+
+ if (IsClose(FindDistance(xx->segs[0].u.p.pts[0].pt,xx->segs[0].u.p.pts[xx->segs[0].u.p.cnt-1].pt))) {
+ xx->segs[0].u.p.polyType = FREEFORM;
+ xx->segs[0].u.p.cnt = xx->segs[0].u.p.cnt-1;
+ }
+
+ ComputeDrawBoundingBox( trk );
+ return trk;
+}
+
+
+static dynArr_t anchors_da;
+#define anchors(N) DYNARR_N(trkSeg_t,anchors_da,N)
+
+void static CreateOriginAnchor(coOrd origin, wBool_t trans_selected) {
+ double d = tempD.scale*0.15;
+ DYNARR_APPEND(trkSeg_t,anchors_da,2);
+ int i = anchors_da.cnt-1;
+ coOrd p0,p1;
+ Translate(&p0,origin,0,d*4);
+ Translate(&p1,origin,0,-d*4);
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).u.l.pos[0] = p0;
+ anchors(i).u.l.pos[1] = p1;
+ anchors(i).color = wDrawColorBlue;
+ anchors(i).width = 0;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ Translate(&p0,origin,90,d*4);
+ Translate(&p1,origin,90,-d*4);
+ i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).u.l.pos[0] = p0;
+ anchors(i).u.l.pos[1] = p1;
+ anchors(i).color = wDrawColorBlue;
+ anchors(i).width = 0;
+}
+
+EXPORT void DrawOriginAnchor(track_p trk) {
+ if (!trk || GetTrkType(trk) != T_DRAW) return;
+ struct extraData * xx = GetTrkExtraData(trk);
+ if ((xx->orig.x != 0.0) || (xx->orig.y !=0.0) ) {
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ CreateOriginAnchor(xx->orig,FALSE);
+ DrawSegs(&tempD, zero, 0.0, anchors_da.ptr, anchors_da.cnt, trackGauge, wDrawColorBlue);
+ }
+}
@@ -204,15 +480,27 @@ static DIST_T DistanceDraw( track_p t, coOrd * p )
static struct {
- coOrd endPt[2];
+ coOrd endPt[4];
+ coOrd origin;
+ coOrd oldOrigin;
+ coOrd oldE0;
+ coOrd oldE1;
FLOAT_T length;
+ FLOAT_T height;
+ FLOAT_T width;
coOrd center;
DIST_T radius;
ANGLE_T angle0;
ANGLE_T angle1;
ANGLE_T angle;
+ ANGLE_T rotate_angle;
+ ANGLE_T oldAngle;
long pointCount;
long lineWidth;
+ BOOL_T boxed;
+ BOOL_T filled;
+ BOOL_T open;
+ BOOL_T lock_origin;
wDrawColor color;
wIndex_t benchChoice;
wIndex_t benchOrient;
@@ -221,21 +509,31 @@ static struct {
wIndex_t fontSizeInx;
char text[STR_LONG_SIZE];
unsigned int layer;
- char polyType[STR_SIZE];
+ wIndex_t lineType;
} drawData;
-typedef enum { E0, E1, CE, RA, LN, AL, A1, A2, VC, LW, CO, BE, OR, DS, TP, TA, TS, TX, PV, LY, PT } drawDesc_e;
+typedef enum { E0, E1, PP, CE, AL, A1, A2, RD, LN, HT, WT, LK, OI, RA, VC, LW, LT, CO, FL, OP, BX, BE, OR, DS, TP, TA, TS, TX, PV, LY } drawDesc_e;
static descData_t drawDesc[] = {
/*E0*/ { DESC_POS, N_("End Pt 1: X,Y"), &drawData.endPt[0] },
/*E1*/ { DESC_POS, N_("End Pt 2: X,Y"), &drawData.endPt[1] },
+/*PP*/ { DESC_POS, N_("First Point: X,Y"), &drawData.endPt[0] },
/*CE*/ { DESC_POS, N_("Center: X,Y"), &drawData.center },
-/*RA*/ { DESC_DIM, N_("Radius"), &drawData.radius },
-/*LN*/ { DESC_DIM, N_("Length"), &drawData.length },
/*AL*/ { DESC_FLOAT, N_("Angle"), &drawData.angle },
/*A1*/ { DESC_ANGLE, N_("CCW Angle"), &drawData.angle0 },
/*A2*/ { DESC_ANGLE, N_("CW Angle"), &drawData.angle1 },
+/*RD*/ { DESC_DIM, N_("Radius"), &drawData.radius },
+/*LN*/ { DESC_DIM, N_("Length"), &drawData.length },
+/*HT*/ { DESC_DIM, N_("Height"), &drawData.height },
+/*WT*/ { DESC_DIM, N_("Width"), &drawData.width },
+/*LK*/ { DESC_BOXED, N_("Keep Origin Relative"), &drawData.lock_origin},
+/*OI*/ { DESC_POS, N_("Rot Origin: X,Y"), &drawData.origin },
+/*RA*/ { DESC_FLOAT, N_("Rotate Angle"), &drawData.angle },
/*VC*/ { DESC_LONG, N_("Point Count"), &drawData.pointCount },
/*LW*/ { DESC_LONG, N_("Line Width"), &drawData.lineWidth },
+/*LT*/ { DESC_LIST, N_("Line Type"), &drawData.lineType },
/*CO*/ { DESC_COLOR, N_("Color"), &drawData.color },
+/*FL*/ { DESC_BOXED, N_("Filled"), &drawData.filled },
+/*OP*/ { DESC_BOXED, N_("Open End"), &drawData.open },
+/*BX*/ { DESC_BOXED, N_("Boxed"), &drawData.boxed },
/*BE*/ { DESC_LIST, N_("Lumber"), &drawData.benchChoice },
/*OR*/ { DESC_LIST, N_("Orientation"), &drawData.benchOrient },
/*DS*/ { DESC_LIST, N_("Size"), &drawData.dimenSize },
@@ -245,9 +543,8 @@ static descData_t drawDesc[] = {
/*TX*/ { DESC_TEXT, N_("Text"), &drawData.text },
/*PV*/ { DESC_PIVOT, N_("Pivot"), &drawData.pivot },
/*LY*/ { DESC_LAYER, N_("Layer"), &drawData.layer },
-/*PT*/ { DESC_STRING, N_("Type"), &drawData.polyType },
{ DESC_NULL } };
-int drawSegInx;
+static int drawSegInx;
#define UNREORIGIN( Q, P, A, O ) { \
(Q) = (P); \
@@ -257,6 +554,23 @@ int drawSegInx;
Rotate( &(Q), zero, -(A) ); \
}
+/*
+ * Notes -
+ *
+ * In V5.1, Origin was always {0,0} and Angle 0.0 after editing a Draw object.
+ * This did not allow for the use of the objects in other contexts (such as Signal Arms).
+ *
+ * In V5.2 -
+ *
+ * OI - Origin will be adjusted if it is locked to remain relative to the end point - this equally applies when moving the object points.
+ * If not locked, the object points will be set relative to the new origin value,
+ * so that the object remains at the same place as the user specifies.
+ * If the edit starts with origin {0,0}, it will be set unlocked, otherwise set locked.
+ *
+ * AL- Angle will be set to 0.0 when the object is modified. The points of the objects will be rotated so that
+ * rotated and adjusted so they don't need rotation to lie where the user left them.
+ *
+ */
static void UpdateDraw( track_p trk, int inx, descData_p descUpd, BOOL_T final )
{
struct extraData *xx = GetTrkExtraData(trk);
@@ -271,9 +585,9 @@ static void UpdateDraw( track_p trk, int inx, descData_p descUpd, BOOL_T final )
if (segPtr->type != SEG_TEXT) return;
else inx = TX; //Always look at TextField for SEG_TEXT on "Done"
}
- MainRedraw();
- MapRedraw();
UndrawNewTrack( trk );
+ coOrd pt;
+ coOrd off;
switch ( inx ) {
case LW:
segPtr->width = drawData.lineWidth/mainD.dpi;
@@ -284,37 +598,251 @@ static void UpdateDraw( track_p trk, int inx, descData_p descUpd, BOOL_T final )
case E0:
case E1:
if ( inx == E0 ) {
- UNREORIGIN( segPtr->u.l.pos[0], drawData.endPt[0], xx->angle, xx->orig );
- } else {
- UNREORIGIN( segPtr->u.l.pos[1], drawData.endPt[1], xx->angle, xx->orig );
+ coOrd off;
+ off.x = drawData.endPt[0].x - drawData.oldE0.x;
+ off.y = drawData.endPt[0].y - drawData.oldE0.y;
+ if (drawData.lock_origin) {
+ xx->orig.x +=off.x;
+ xx->orig.y +=off.y;
+ drawDesc[OI].mode |= DESC_CHANGE;
+ } else {
+ switch(segPtr->type) { //E0 does not alter length - translates
+ case SEG_STRLIN:
+ case SEG_DIMLIN:
+ case SEG_BENCH:
+ case SEG_TBLEDGE:
+ UNREORIGIN( segPtr->u.l.pos[0], drawData.endPt[0], xx->angle, xx->orig );
+ drawData.endPt[1].x = off.x+drawData.endPt[1].x;
+ drawData.endPt[1].y = off.y+drawData.endPt[1].y;
+ UNREORIGIN( segPtr->u.l.pos[1], drawData.endPt[1], xx->angle, xx->orig );
+ drawDesc[E1].mode |= DESC_CHANGE;
+ break;
+ case SEG_CRVLIN:
+ case SEG_FILCRCL:
+ UNREORIGIN( segPtr->u.c.center, drawData.endPt[0], xx->angle, xx->orig );
+ break;
+ case SEG_TEXT:
+ UNREORIGIN( segPtr->u.t.pos, drawData.endPt[0], xx->angle, xx->orig );
+ break;
+ case SEG_POLY:
+ case SEG_FILPOLY:
+ break; //Note not used by POLYGONS
+ default:;
+ }
+ }
+ } else { //E1 - alters length
+ off.x = drawData.endPt[1].x - drawData.oldE1.x;
+ off.y = drawData.endPt[1].y - drawData.oldE1.y;
+ drawDesc[E1].mode |= DESC_CHANGE;
+ if (drawData.lock_origin) {
+ xx->orig.x +=off.x;
+ xx->orig.y +=off.y;
+ drawDesc[OI].mode |= DESC_CHANGE;
+ } else {
+ UNREORIGIN( segPtr->u.l.pos[1], drawData.endPt[1], xx->angle, xx->orig );
+ }
}
drawData.length = FindDistance( drawData.endPt[0], drawData.endPt[1] );
- drawData.angle = FindAngle( drawData.endPt[0], drawData.endPt[1] );
drawDesc[LN].mode |= DESC_CHANGE;
- drawDesc[AL].mode |= DESC_CHANGE;
break;
- case LN:
- case AL:
- if ( segPtr->type == SEG_CRVLIN && inx == AL ) {
- if ( drawData.angle <= 0.0 || drawData.angle >= 360.0 ) {
- ErrorMessage( MSG_CURVE_OUT_OF_RANGE );
- drawData.angle = segPtr->u.c.a1;
- drawDesc[AL].mode |= DESC_CHANGE;
+ case OI:
+ off.x = drawData.origin.x - drawData.oldOrigin.x;
+ off.y = drawData.origin.y - drawData.oldOrigin.y;
+ xx->orig = drawData.origin;
+ if (!drawData.lock_origin) {
+ switch(segPtr->type) {
+ case SEG_POLY:
+ case SEG_FILPOLY:
+ for (int i=0;i<segPtr->u.p.cnt;i++) {
+ REORIGIN( pt, segPtr->u.p.pts[i].pt, xx->angle, drawData.oldOrigin);
+ UNREORIGIN( segPtr->u.p.pts[i].pt, pt, xx->angle, xx->orig );
+ }
break;
+ case SEG_STRLIN:
+ case SEG_DIMLIN:
+ case SEG_BENCH:
+ case SEG_TBLEDGE:
+ for (int i=0;i<2;i++) {
+ UNREORIGIN( segPtr->u.l.pos[i], drawData.endPt[i], xx->angle, xx->orig );
+ }
+ break;
+ case SEG_CRVLIN:
+ case SEG_FILCRCL:
+ UNREORIGIN( segPtr->u.c.center, drawData.center, xx->angle, xx->orig );
+ break;
+ case SEG_TEXT:
+ UNREORIGIN( segPtr->u.t.pos, drawData.endPt[0], xx->angle, xx->orig );
+ break;
+ default:;
}
} else {
- if ( drawData.length <= minLength ) {
- ErrorMessage( MSG_OBJECT_TOO_SHORT );
- if ( segPtr->type != SEG_CRVLIN ) {
- drawData.length = FindDistance( drawData.endPt[0], drawData.endPt[1] );
+ drawData.endPt[0].x += off.x;
+ drawData.endPt[0].y += off.y;
+ switch(segPtr->type) {
+ case SEG_STRLIN:
+ case SEG_DIMLIN:
+ case SEG_BENCH:
+ case SEG_TBLEDGE:
+ drawDesc[E0].mode |= DESC_CHANGE;
+ UNREORIGIN( segPtr->u.l.pos[0], drawData.endPt[0], xx->angle, xx->orig );
+ drawData.endPt[1].x = off.x+drawData.endPt[1].x;
+ drawData.endPt[1].y = off.y+drawData.endPt[1].y;
+ UNREORIGIN( segPtr->u.l.pos[1], drawData.endPt[1], xx->angle, xx->orig );
+ drawDesc[E1].mode |= DESC_CHANGE;
+ break;
+ case SEG_CRVLIN:
+ case SEG_FILCRCL:
+ UNREORIGIN( segPtr->u.c.center, drawData.endPt[0], xx->angle, xx->orig );
+ drawDesc[E0].mode |= DESC_CHANGE;
+ break;
+ case SEG_TEXT:
+ UNREORIGIN( segPtr->u.t.pos, drawData.endPt[0], xx->angle, xx->orig );
+ drawDesc[E0].mode |= DESC_CHANGE;
+ break;
+ case SEG_POLY:
+ case SEG_FILPOLY:
+ for (int i=0;i<segPtr->u.p.cnt;i++) {
+ REORIGIN( pt, segPtr->u.p.pts[i].pt, xx->angle, drawData.oldOrigin);
+ pt.x += off.x;
+ pt.y += off.y;
+ UNREORIGIN( segPtr->u.p.pts[i].pt, pt, xx->angle, xx->orig );
+ }
+ drawDesc[PP].mode |= DESC_CHANGE;
+ break;
+ default:;
+ }
+ }
+ break;
+ case HT:
+ case WT:
+ if ((segPtr->type == SEG_POLY) || (segPtr->type == SEG_FILPOLY)) {
+ if (segPtr->u.p.polyType == RECTANGLE) {
+ if (inx == HT) {
+ ANGLE_T angle = NormalizeAngle(FindAngle(drawData.endPt[0],drawData.endPt[3]));
+ Translate( &drawData.endPt[3], drawData.endPt[0], angle, drawData.height);
+ UNREORIGIN( segPtr->u.p.pts[3].pt, drawData.endPt[3], xx->angle, xx->orig );
+ Translate( &drawData.endPt[2], drawData.endPt[1], angle, drawData.height);
+ UNREORIGIN( segPtr->u.p.pts[2].pt, drawData.endPt[2], xx->angle, xx->orig );
} else {
- drawData.length = fabs(segPtr->u.c.radius)*2*M_PI*segPtr->u.c.a1/360.0;
+ ANGLE_T angle = NormalizeAngle(FindAngle(drawData.endPt[0],drawData.endPt[1]));;
+ Translate( &drawData.endPt[1], drawData.endPt[0], angle, drawData.width);
+ UNREORIGIN( segPtr->u.p.pts[1].pt, drawData.endPt[1], xx->angle, xx->orig );
+ Translate( &drawData.endPt[2], drawData.endPt[3], angle, drawData.width);
+ UNREORIGIN( segPtr->u.p.pts[2].pt, drawData.endPt[2], xx->angle, xx->orig );
}
- drawDesc[LN].mode |= DESC_CHANGE;
+ drawDesc[E0].mode |= DESC_CHANGE;
+ }
+ }
+ break;
+ case RA:;
+ ANGLE_T angle = NormalizeAngle(drawData.rotate_angle);
+ switch(segPtr->type) {
+ case SEG_POLY:
+ case SEG_FILPOLY:
+ for (int i=0;i<segPtr->u.p.cnt;i++) {
+ REORIGIN(pt,segPtr->u.p.pts[i].pt, angle, xx->orig);
+ if (i == 0) drawData.endPt[0] = pt;
+ UNREORIGIN(segPtr->u.p.pts[i].pt, pt, 0.0, xx->orig);
+ }
+ drawDesc[PP].mode |= DESC_CHANGE;
break;
+ case SEG_CRVLIN:;
+ coOrd end0, end1;
+ Translate(&end0,segPtr->u.c.center,segPtr->u.c.a0,segPtr->u.c.radius);
+ Translate(&end1,segPtr->u.c.center,segPtr->u.c.a0+segPtr->u.c.a1,segPtr->u.c.radius);
+ REORIGIN(end0, end0, angle, xx->orig );
+ REORIGIN(end1, end1, angle, xx->orig );
+ REORIGIN( drawData.center,segPtr->u.c.center, angle, xx->orig );
+ drawData.angle0 = FindAngle( drawData.center, end0);
+ drawData.angle1 = FindAngle( drawData.center, end1);
+ drawDesc[CE].mode |= DESC_CHANGE;
+ drawDesc[A1].mode |= DESC_CHANGE;
+ drawDesc[A2].mode |= DESC_CHANGE;
+ /*no break*/
+ case SEG_FILCRCL:
+ REORIGIN( drawData.center,segPtr->u.c.center, angle, xx->orig );
+ UNREORIGIN( segPtr->u.c.center, drawData.center, 0.0, xx->orig); //Remove angle
+ drawDesc[CE].mode |= DESC_CHANGE;
+ break;
+ case SEG_STRLIN:
+ case SEG_DIMLIN:
+ case SEG_BENCH:
+ case SEG_TBLEDGE:
+ for (int i=0;i<2;i++) {
+ REORIGIN( drawData.endPt[i], segPtr->u.l.pos[i], angle, xx->orig );
+ UNREORIGIN(segPtr->u.l.pos[i], drawData.endPt[i], 0.0, xx->orig );
+ }
+ drawDesc[E0].mode |= DESC_CHANGE;
+ drawDesc[E1].mode |= DESC_CHANGE;
+ break;
+ case SEG_TEXT:
+
+ break;
+ default:;
+ }
+ xx->angle = drawData.rotate_angle = 0.0;
+ drawDesc[RA].mode |= DESC_CHANGE;
+ break;
+ case AL:;
+ angle = NormalizeAngle(drawData.angle);
+ switch(segPtr->type) {
+ case SEG_POLY:
+ case SEG_FILPOLY:
+ break; //Doesn't Use
+ case SEG_CRVLIN:
+ switch ( drawData.pivot ) {
+ case DESC_PIVOT_FIRST:
+ segPtr->u.c.a1 = drawData.angle;
+ drawData.angle1 = NormalizeAngle( drawData.angle0+segPtr->u.c.a1 );
+ drawDesc[A2].mode |= DESC_CHANGE;
+ break;
+ case DESC_PIVOT_SECOND:
+ segPtr->u.c.a0 = NormalizeAngle( segPtr->u.c.a1+segPtr->u.c.a0-drawData.angle);
+ segPtr->u.c.a1 = drawData.angle;
+ drawData.angle0 = NormalizeAngle( segPtr->u.c.a0+xx->angle );
+ drawData.angle1 = NormalizeAngle( drawData.angle0+segPtr->u.c.a1 );
+ drawDesc[A1].mode |= DESC_CHANGE;
+ drawDesc[A2].mode |= DESC_CHANGE;
+ break;
+ case DESC_PIVOT_MID:
+ segPtr->u.c.a0 = NormalizeAngle( segPtr->u.c.a0+segPtr->u.c.a1/2.0-drawData.angle/2.0);
+ segPtr->u.c.a1 = drawData.angle;
+ drawData.angle0 = NormalizeAngle( segPtr->u.c.a0+xx->angle );
+ drawData.angle1 = NormalizeAngle( drawData.angle0+segPtr->u.c.a1 );
+ drawDesc[A1].mode |= DESC_CHANGE;
+ drawDesc[A2].mode |= DESC_CHANGE;
+ break;
+ default:
+ break;
+ }
+ break;
+ case SEG_FILCRCL:
+ break; //Doesn't Use
+ case SEG_STRLIN:
+ case SEG_DIMLIN:
+ case SEG_BENCH:
+ case SEG_TBLEDGE:
+ Translate(&drawData.endPt[1],drawData.endPt[0],angle,drawData.length);
+ UNREORIGIN(segPtr->u.l.pos[1], drawData.endPt[1], xx->angle, xx->orig );
+ drawDesc[E1].mode |= DESC_CHANGE;
+ break;
+ case SEG_TEXT:
+ break; //Doesnt Use
+ default:;
+ }
+ break;
+ case LN:
+ if ( drawData.length <= minLength ) {
+ ErrorMessage( MSG_OBJECT_TOO_SHORT );
+ if ( segPtr->type != SEG_CRVLIN ) {
+ drawData.length = FindDistance( drawData.endPt[0], drawData.endPt[1] );
+ } else {
+ drawData.length = fabs(segPtr->u.c.radius)*2*M_PI*segPtr->u.c.a1/360.0;
}
+ drawDesc[LN].mode |= DESC_CHANGE;
+ break;
}
- if ( segPtr->type != SEG_CRVLIN ) {
+ if ( segPtr->type != SEG_CRVLIN ) {
switch ( drawData.pivot ) {
case DESC_PIVOT_FIRST:
Translate( &drawData.endPt[1], drawData.endPt[0], drawData.angle, drawData.length );
@@ -340,6 +868,7 @@ static void UpdateDraw( track_p trk, int inx, descData_p descUpd, BOOL_T final )
break;
}
} else {
+
if ( drawData.angle < 0.0 || drawData.angle >= 360.0 ) {
ErrorMessage( MSG_CURVE_OUT_OF_RANGE );
drawData.angle = segPtr->u.c.a1;
@@ -357,13 +886,44 @@ static void UpdateDraw( track_p trk, int inx, descData_p descUpd, BOOL_T final )
case CE:
UNREORIGIN( segPtr->u.c.center, drawData.center, xx->angle, xx->orig );
break;
- case RA:
+ case RD:
+ if ( drawData.pivot == DESC_PIVOT_FIRST ) {
+ Translate( &segPtr->u.c.center, segPtr->u.c.center, segPtr->u.c.a0, segPtr->u.c.radius-drawData.radius );
+ } else if ( drawData.pivot == DESC_PIVOT_SECOND ) {
+ Translate( &segPtr->u.c.center, segPtr->u.c.center, segPtr->u.c.a0+segPtr->u.c.a1, segPtr->u.c.radius-drawData.radius );
+ } else {
+ Translate( &segPtr->u.c.center, segPtr->u.c.center, (segPtr->u.c.a0+segPtr->u.c.a1)/2.0, segPtr->u.c.radius-drawData.radius );
+ }
+ drawDesc[CE].mode |= DESC_CHANGE;
segPtr->u.c.radius = drawData.radius;
+ drawDesc[LN].mode |= DESC_CHANGE;
break;
case A1:
- segPtr->u.c.a0 = NormalizeAngle( drawData.angle0-xx->angle );
- drawData.angle1 = NormalizeAngle( drawData.angle0+drawData.angle );
- drawDesc[A2].mode |= DESC_CHANGE;
+ switch ( drawData.pivot ) {
+ case DESC_PIVOT_FIRST:
+ segPtr->u.c.a1 = drawData.angle;
+ drawData.angle1 = NormalizeAngle( drawData.angle0+segPtr->u.c.a1 );
+ drawDesc[A2].mode |= DESC_CHANGE;
+ break;
+ case DESC_PIVOT_SECOND:
+ segPtr->u.c.a0 = NormalizeAngle( segPtr->u.c.a1+segPtr->u.c.a0-drawData.angle);
+ segPtr->u.c.a1 = drawData.angle;
+ drawData.angle0 = NormalizeAngle( segPtr->u.c.a0+xx->angle );
+ drawData.angle1 = NormalizeAngle( drawData.angle0+segPtr->u.c.a1 );
+ drawDesc[A1].mode |= DESC_CHANGE;
+ drawDesc[A2].mode |= DESC_CHANGE;
+ break;
+ case DESC_PIVOT_MID:
+ segPtr->u.c.a0 = NormalizeAngle( segPtr->u.c.a0+segPtr->u.c.a1/2.0-drawData.angle/2.0);
+ segPtr->u.c.a1 = drawData.angle;
+ drawData.angle0 = NormalizeAngle( segPtr->u.c.a0+xx->angle );
+ drawData.angle1 = NormalizeAngle( drawData.angle0+segPtr->u.c.a1 );
+ drawDesc[A1].mode |= DESC_CHANGE;
+ drawDesc[A2].mode |= DESC_CHANGE;
+ break;
+ default:
+ break;
+ }
break;
case A2:
segPtr->u.c.a0 = NormalizeAngle( drawData.angle1-segPtr->u.c.a1-xx->angle );
@@ -387,6 +947,28 @@ static void UpdateDraw( track_p trk, int inx, descData_p descUpd, BOOL_T final )
case TP:
UNREORIGIN( segPtr->u.t.pos, drawData.endPt[0], xx->angle, xx->orig );
break;
+ case PP:
+ off.x = drawData.endPt[0].x - drawData.oldE0.x;
+ off.y = drawData.endPt[0].y - drawData.oldE0.y;
+ if (drawData.lock_origin) {
+ xx->orig.x +=off.x;
+ xx->orig.y +=off.y;
+ drawData.origin = xx->orig;
+ drawDesc[OI].mode |= DESC_CHANGE;
+ drawDesc[E0].mode |= DESC_CHANGE;
+ break;
+ } else {
+ for (int i=0;i<segPtr->u.p.cnt;i++) {
+ REORIGIN( pt, segPtr->u.p.pts[i].pt, xx->angle, xx->orig );
+ pt.x += off.x;
+ pt.y += off.y;
+ if (i<5) drawData.endPt[i] = pt;
+ UNREORIGIN( segPtr->u.p.pts[i].pt, pt, 0.0, xx->orig );
+ }
+ xx->angle = 0.0;
+ drawDesc[AL].mode |= DESC_CHANGE;
+ }
+ break;
case TA:
//segPtr->u.t.angle = NormalizeAngle( drawData.angle );
xx->angle = NormalizeAngle( drawData.angle );
@@ -396,6 +978,39 @@ static void UpdateDraw( track_p trk, int inx, descData_p descUpd, BOOL_T final )
UpdateFontSizeList( &fontSize, (wList_p)drawDesc[TS].control0, drawData.fontSizeInx );
segPtr->u.t.fontSize = fontSize;
break;
+ case FL:
+ if (segPtr->type == SEG_POLY && drawData.open) {
+ drawData.filled = FALSE;
+ drawDesc[FL].mode |= DESC_CHANGE;
+ break;
+ }
+ if(drawData.filled) {
+ if (segPtr->type == SEG_POLY) segPtr->type = SEG_FILPOLY;
+ if (segPtr->type == SEG_CRVLIN) segPtr->type = SEG_FILCRCL;
+ } else {
+ if (segPtr->type == SEG_FILPOLY) segPtr->type = SEG_POLY;
+ if (segPtr->type == SEG_FILCRCL) {
+ segPtr->type = SEG_CRVLIN;
+ segPtr->u.c.a0 = 0.0;
+ segPtr->u.c.a1 = 360.0;
+ }
+ }
+ break;
+ case OP:
+ if (drawData.filled || (segPtr->type != SEG_POLY)) {
+ drawData.open = FALSE;
+ drawDesc[OP].mode |= DESC_CHANGE;
+ break;
+ }
+ if (drawData.open) {
+ if (segPtr->type == SEG_POLY && segPtr->u.p.polyType == FREEFORM) segPtr->u.p.polyType = POLYLINE;
+ } else {
+ if (segPtr->type == SEG_POLY && segPtr->u.p.polyType == POLYLINE) segPtr->u.p.polyType = FREEFORM;
+ }
+ break;
+ case BX:
+ segPtr->u.t.boxed = drawData.boxed;
+ break;
case TX:
if ( wTextGetModified((wText_p)drawDesc[TX].control0 )) {
int len = wTextGetSize((wText_p)drawDesc[TX].control0);
@@ -409,14 +1024,25 @@ static void UpdateDraw( track_p trk, int inx, descData_p descUpd, BOOL_T final )
case LY:
SetTrkLayer( trk, drawData.layer);
break;
+ case LK:
+ break;
+ case LT:
+ xx->lineType = drawData.lineType;
+ break;
default:
AbortProg( "bad op" );
}
+ drawData.oldE0 = drawData.endPt[0];
+ drawData.oldE1 = drawData.endPt[1];
+ drawData.oldAngle = drawData.angle;
+ drawData.oldOrigin = drawData.origin;
ComputeDrawBoundingBox( trk );
DrawNewTrack( trk );
- DoCurCommand( C_REDRAW, zero );
+ TempRedraw(); // UpdateDraw
}
+extern BOOL_T inDescribeCmd;
+
static void DescribeDraw( track_p trk, char * str, CSIZE_T len )
{
struct extraData *xx = GetTrkExtraData(trk);
@@ -443,8 +1069,17 @@ static void DescribeDraw( track_p trk, char * str, CSIZE_T len )
drawDesc[LY].mode = DESC_NOREDRAW;
drawDesc[BE].mode =
drawDesc[OR].mode =
+ drawDesc[LT].mode =
drawDesc[DS].mode = DESC_IGNORE;
drawData.pivot = DESC_PIVOT_MID;
+
+ if ((xx->orig.x == 0.0) && (xx->orig.y == 0.0)) drawData.lock_origin = FALSE;
+ else drawData.lock_origin = TRUE;
+
+ drawData.rotate_angle = xx->angle;
+
+ drawDesc[LK].mode = 0;
+
switch ( segPtr->type ) {
case SEG_STRLIN:
case SEG_DIMLIN:
@@ -454,24 +1089,35 @@ static void DescribeDraw( track_p trk, char * str, CSIZE_T len )
REORIGIN( drawData.endPt[1], segPtr->u.l.pos[1], xx->angle, xx->orig );
drawData.length = FindDistance( drawData.endPt[0], drawData.endPt[1] );
drawData.angle = FindAngle( drawData.endPt[0], drawData.endPt[1] );
+ drawData.origin = xx->orig;
drawDesc[LN].mode =
drawDesc[AL].mode =
drawDesc[PV].mode = 0;
drawDesc[E0].mode =
+ drawDesc[OI].mode = 0;
drawDesc[E1].mode = 0;
+ drawDesc[RA].mode = 0;
switch (segPtr->type) {
case SEG_STRLIN:
title = _("Straight Line");
+ drawDesc[LT].mode = 0;
+ drawData.lineType = (wIndex_t)xx->lineType;
break;
case SEG_DIMLIN:
title = _("Dimension Line");
- drawDesc[CO].mode = DESC_IGNORE;
- drawDesc[LW].mode = DESC_IGNORE;
+ drawDesc[CO].mode =
+ drawDesc[LW].mode =
+ drawDesc[LK].mode =
+ drawDesc[OI].mode =
+ drawDesc[RA].mode = DESC_IGNORE;
drawData.dimenSize = (wIndex_t)segPtr->u.l.option;
drawDesc[DS].mode = 0;
break;
case SEG_BENCH:
title = _("Lumber");
+ drawDesc[LK].mode =
+ drawDesc[OI].mode =
+ drawDesc[RA].mode =
drawDesc[LW].mode = DESC_IGNORE;
drawDesc[BE].mode =
drawDesc[OR].mode = 0;
@@ -480,6 +1126,9 @@ static void DescribeDraw( track_p trk, char * str, CSIZE_T len )
break;
case SEG_TBLEDGE:
title = _("Table Edge");
+ drawDesc[LK].mode =
+ drawDesc[OI].mode =
+ drawDesc[RA].mode = DESC_IGNORE;
drawDesc[CO].mode = DESC_IGNORE;
drawDesc[LW].mode = DESC_IGNORE;
break;
@@ -488,10 +1137,17 @@ static void DescribeDraw( track_p trk, char * str, CSIZE_T len )
case SEG_CRVLIN:
REORIGIN( drawData.center, segPtr->u.c.center, xx->angle, xx->orig );
drawData.radius = fabs(segPtr->u.c.radius);
+ drawData.origin = xx->orig;
+ drawDesc[OI].mode = 0;
+ drawDesc[RA].mode =
drawDesc[CE].mode =
- drawDesc[RA].mode = 0;
+ drawDesc[RD].mode = 0;
+ drawDesc[LT].mode = 0;
+ drawData.lineType = (wIndex_t)xx->lineType;
if ( segPtr->u.c.a1 >= 360.0 ) {
title = _("Circle");
+ drawDesc[FL].mode = 0;
+ drawData.filled = FALSE;
} else {
drawData.angle = segPtr->u.c.a1;
drawData.angle0 = NormalizeAngle( segPtr->u.c.a0+xx->angle );
@@ -499,64 +1155,127 @@ static void DescribeDraw( track_p trk, char * str, CSIZE_T len )
drawDesc[AL].mode =
drawDesc[A1].mode =
drawDesc[A2].mode = 0;
+ drawDesc[PV].mode = 0;
title = _("Curved Line");
}
break;
case SEG_FILCRCL:
REORIGIN( drawData.center, segPtr->u.c.center, xx->angle, xx->orig );
drawData.radius = fabs(segPtr->u.c.radius);
+ drawData.origin = xx->orig;
+ drawDesc[OI].mode =
+ drawDesc[RA].mode =
+ drawDesc[FL].mode = 0;
+ drawData.filled = TRUE;
drawDesc[CE].mode =
- drawDesc[RA].mode = 0;
+ drawDesc[RD].mode = 0;
+ drawDesc[PV].mode = 0;
+ drawDesc[OI].mode = 0;
drawDesc[LW].mode = DESC_IGNORE;
title = _("Filled Circle");
break;
case SEG_POLY:
+ REORIGIN(drawData.endPt[0],segPtr->u.p.pts[0].pt, xx->angle, xx->orig);
+ drawDesc[PP].mode = 0;
drawData.pointCount = segPtr->u.p.cnt;
drawDesc[VC].mode = DESC_RO;
- drawDesc[PT].mode = DESC_RO;
+ drawData.filled = FALSE;
+ drawDesc[FL].mode = 0;
+ drawData.angle = 0.0;
+ drawDesc[RA].mode = 0;
+ drawData.origin = xx->orig;
+ drawDesc[OI].mode = 0;
+ drawData.open=FALSE;
+ drawDesc[OP].mode = 0;
+ drawDesc[LT].mode = 0;
+ drawData.lineType = (wIndex_t)xx->lineType;
switch (segPtr->u.p.polyType) {
case RECTANGLE:
- polyType = _("Rectangle");
+ title = _("Rectangle");
+ drawDesc[OP].mode = DESC_IGNORE;
+ drawDesc[VC].mode = DESC_IGNORE;
+ drawData.width = FindDistance(segPtr->u.p.pts[0].pt, segPtr->u.p.pts[1].pt);
+ drawDesc[WT].mode = 0;
+ drawData.height = FindDistance(segPtr->u.p.pts[0].pt, segPtr->u.p.pts[3].pt);
+ drawDesc[HT].mode = 0;
+ for(int i=0;i<4;i++) {
+ REORIGIN( drawData.endPt[i], segPtr->u.p.pts[i].pt, xx->angle, xx->orig );
+ }
+ drawDesc[E0].mode = DESC_IGNORE;
+ drawData.origin = xx->orig;
+ break;
+ case POLYLINE:
+ title = _("Polyline");
+ drawData.open=TRUE;
break;
default:
- polyType = _("Freeform");
+ title = _("Polygon");
}
- strncpy( drawData.polyType, polyType, sizeof drawData.polyType );
- title = _("Polygonal Line");
break;
case SEG_FILPOLY:
+ REORIGIN(drawData.endPt[0],segPtr->u.p.pts[0].pt, xx->angle, xx->orig);
+ drawDesc[PP].mode = 0;
drawData.pointCount = segPtr->u.p.cnt;
drawDesc[VC].mode = DESC_RO;
+ drawData.filled = TRUE;
+ drawDesc[FL].mode = 0;
drawDesc[LW].mode = DESC_IGNORE;
- drawDesc[PT].mode = DESC_RO;
+ drawData.angle = xx->angle;
+ drawDesc[RA].mode = 0;
+ drawData.origin = xx->orig;
+ drawDesc[OI].mode = DESC_RO;
+ drawData.open = FALSE;
switch (segPtr->u.p.polyType) {
case RECTANGLE:
- polyType =_("Rectangle");
+ title =_("Filled Rectangle");
+ drawDesc[VC].mode = DESC_IGNORE;
+ drawData.width = FindDistance(segPtr->u.p.pts[0].pt, segPtr->u.p.pts[1].pt);
+ drawDesc[WT].mode = 0;
+ drawData.height = FindDistance(segPtr->u.p.pts[0].pt, segPtr->u.p.pts[3].pt);
+ drawDesc[HT].mode = 0;
+ for(int i=0;i<4;i++) {
+ REORIGIN( drawData.endPt[i], segPtr->u.p.pts[i].pt, xx->angle, xx->orig );
+ }
+ drawDesc[E0].mode = DESC_IGNORE;
+ drawData.origin = xx->orig;
break;
default:
- polyType = _("Freeform");
+ title = _("Filled Polygon");
}
- strncpy( drawData.polyType, polyType, sizeof drawData.polyType );
- title = _("Polygon");
break;
case SEG_TEXT:
REORIGIN( drawData.endPt[0], segPtr->u.t.pos, xx->angle, xx->orig );
drawData.angle = NormalizeAngle( xx->angle );
strncpy( drawData.text, segPtr->u.t.string, sizeof drawData.text );
drawData.text[sizeof drawData.text-1] ='\0';
+ drawData.boxed = segPtr->u.t.boxed;
+ drawData.origin = xx->orig;
+ drawDesc[E0].mode =
drawDesc[TP].mode =
drawDesc[TS].mode =
drawDesc[TX].mode =
- drawDesc[TA].mode =
+ drawDesc[TA].mode =
+ drawDesc[BX].mode =
+ drawDesc[RA].mode =
+ drawDesc[OI].mode = 0;
drawDesc[CO].mode = 0; /*Allow Text color setting*/
drawDesc[LW].mode = DESC_IGNORE;
title = _("Text");
break;
default:
- AbortProg( "bad seg type" );
+ ;
}
- sprintf( str, _("%s: Layer=%d"), title, GetTrkLayer(trk)+1 );
+ snprintf( str, len, _("%s(%d) Layer=%d"), title, GetTrkIndex(trk), GetTrkLayer(trk)+1 );
+
+ if (!inDescribeCmd) return;
+
+ drawData.oldE0 = drawData.endPt[0];
+ drawData.oldE1 = drawData.endPt[1];
+ drawData.oldAngle = drawData.angle;
+ drawData.oldOrigin = drawData.origin;
+
+
DoDescribe( title, trk, drawDesc, UpdateDraw );
if ( segPtr->type==SEG_BENCH && drawDesc[BE].control0!=NULL && drawDesc[OR].control0!=NULL) {
@@ -565,6 +1284,17 @@ static void DescribeDraw( track_p trk, char * str, CSIZE_T len )
BenchUpdateOrientationList( (long)wListGetItemContext((wList_p)drawDesc[BE].control0, drawData.benchChoice ), (wList_p)drawDesc[OR].control0 );
wListSetIndex( (wList_p)drawDesc[OR].control0, drawData.benchOrient );
}
+ if ( (segPtr->type==SEG_STRLIN || segPtr->type==SEG_CRVLIN || segPtr->type==SEG_POLY) && drawDesc[LT].control0!=NULL) {
+ wListClear( (wList_p)drawDesc[LT].control0 );
+ wListAddValue( (wList_p)drawDesc[LT].control0, _("Solid"), NULL, (void*)0 );
+ wListAddValue( (wList_p)drawDesc[LT].control0, _("Dash"), NULL, (void*)1 );
+ wListAddValue( (wList_p)drawDesc[LT].control0, _("Dot"), NULL, (void*)2 );
+ wListAddValue( (wList_p)drawDesc[LT].control0, _("DashDot"), NULL, (void*)3 );
+ wListAddValue( (wList_p)drawDesc[LT].control0, _("DashDotDot"), NULL, (void*)4 );
+ wListAddValue( (wList_p)drawDesc[LT].control0, _("CenterDot"), NULL, (void*)5 );
+ wListAddValue( (wList_p)drawDesc[LT].control0, _("PhantomDot"), NULL, (void*)6 );
+ wListSetIndex( (wList_p)drawDesc[LT].control0, drawData.lineType );
+ }
if ( segPtr->type==SEG_DIMLIN && drawDesc[DS].control0!=NULL ) {
wListClear( (wList_p)drawDesc[DS].control0 );
wListAddValue( (wList_p)drawDesc[DS].control0, _("Tiny"), NULL, (void*)0 );
@@ -582,8 +1312,17 @@ static void DescribeDraw( track_p trk, char * str, CSIZE_T len )
static void DrawDraw( track_p t, drawCmd_p d, wDrawColor color )
{
struct extraData * xx = GetTrkExtraData(t);
- if ( (d->funcs->options&DC_QUICK) == 0 )
- DrawSegs( d, xx->orig, xx->angle, xx->segs, xx->segCnt, 0.0, color );
+ unsigned long NotSolid = ~(DC_NOTSOLIDLINE);
+ d->options &= NotSolid;
+ if (xx->lineType == DRAWLINESOLID) {}
+ else if (xx->lineType == DRAWLINEDASH) d->options |= DC_DASH;
+ else if (xx->lineType == DRAWLINEDOT) d->options |= DC_DOT;
+ else if (xx->lineType == DRAWLINEDASHDOT) d->options |= DC_DASHDOT;
+ else if (xx->lineType == DRAWLINEDASHDOTDOT) d->options |= DC_DASHDOTDOT;
+ else if (xx->lineType == DRAWLINECENTER) d->options |= DC_CENTER;
+ else if (xx->lineType == DRAWLINEPHANTOM) d->options |= DC_PHANTOM;
+ DrawSegs( d, xx->orig, xx->angle, xx->segs, xx->segCnt, 0.0, color );
+ d->options = d->options&~(DC_NOTSOLIDLINE);
}
@@ -594,6 +1333,7 @@ static void DeleteDraw( track_p t )
if (xx->segs[0].type == SEG_POLY ||
xx->segs[0].type == SEG_FILPOLY) {
MyFree(xx->segs[0].u.p.pts);
+ xx->segs[0].u.p.pts = NULL;
}
}
@@ -602,14 +1342,15 @@ static BOOL_T WriteDraw( track_p t, FILE * f )
{
struct extraData * xx = GetTrkExtraData(t);
BOOL_T rc = TRUE;
- rc &= fprintf(f, "DRAW %d %d 0 0 0 %0.6f %0.6f 0 %0.6f\n", GetTrkIndex(t), GetTrkLayer(t),
+ rc &= fprintf(f, "DRAW %d %d %d 0 0 %0.6f %0.6f 0 %0.6f\n", GetTrkIndex(t), GetTrkLayer(t),
+ xx->lineType,
xx->orig.x, xx->orig.y, xx->angle )>0;
rc &= WriteSegs( f, xx->segCnt, xx->segs );
return rc;
}
-static void ReadDraw( char * header )
+static BOOL_T ReadDraw( char * header )
{
track_p trk;
wIndex_t index;
@@ -617,12 +1358,14 @@ static void ReadDraw( char * header )
DIST_T elev;
ANGLE_T angle;
wIndex_t layer;
+ int lineType;
struct extraData * xx;
- if ( !GetArgs( header+5, paramVersion<3?"dXpYf":paramVersion<9?"dL000pYf":"dL000pff",
- &index, &layer, &orig, &elev, &angle ) )
- return;
- ReadSegs();
+ if ( !GetArgs( header+5, paramVersion<3?"dXXpYf":paramVersion<9?"dLX00pYf":"dLd00pff",
+ &index, &layer, &lineType, &orig, &elev, &angle ) )
+ return FALSE;
+ if ( !ReadSegs() )
+ return FALSE;
if (tempSegs_da.cnt == 1) {
trk = MakeDrawFromSeg1( index, orig, angle, &tempSegs(0) );
SetTrkLayer( trk, layer );
@@ -633,9 +1376,11 @@ static void ReadDraw( char * header )
xx->orig = orig;
xx->angle = angle;
xx->segCnt = tempSegs_da.cnt;
+ xx->lineType = lineType;
memcpy( xx->segs, tempSegs_da.ptr, tempSegs_da.cnt * sizeof *(trkSeg_p)0 );
ComputeDrawBoundingBox( trk );
}
+ return TRUE;
}
@@ -665,22 +1410,283 @@ static void RescaleDraw( track_p trk, FLOAT_T ratio )
RescaleSegs( xx->segCnt, xx->segs, ratio, ratio, ratio );
}
+static void DoConvertFill(void) {
+
+}
+
+static drawModContext_t drawModCmdContext = {
+ InfoMessage,
+ DoRedraw,
+ &mainD};
+
+
+static BOOL_T infoSubst = FALSE;
+
+static paramIntegerRange_t i0_100 = { 0, 100, 25 };
+static paramFloatRange_t r1_10000 = { 1, 10000 };
+static paramFloatRange_t r0_10000 = { 0, 10000 };
+static paramFloatRange_t r10000_10000 = {-10000, 10000};
+static paramFloatRange_t r360_360 = { -360, 360, 80 };
+static paramFloatRange_t r0_360 = { 0, 360, 80 };
+static paramData_t drawModPLs[] = {
+
+#define drawModLengthPD (drawModPLs[0])
+ { PD_FLOAT, &drawModCmdContext.length, "Length", PDO_DIM|PDO_NORECORD|BO_ENTER, &r0_10000, N_("Length") },
+#define drawModAnglePD (drawModPLs[1])
+ { PD_FLOAT, &drawModCmdContext.abs_angle, "Angle", PDO_NORECORD|BO_ENTER, &r360_360, N_("Angle") },
+#define drawModRelAnglePD (drawModPLs[2])
+#define drawModRelAngle 2
+ { PD_FLOAT, &drawModCmdContext.rel_angle, "Rel Angle", PDO_NORECORD|BO_ENTER, &r360_360, N_("Relative Angle") },
+#define drawModWidthPD (drawModPLs[3])
+ { PD_FLOAT, &drawModCmdContext.width, "Width", PDO_DIM|PDO_NORECORD|BO_ENTER, &r0_10000, N_("Width") },
+#define drawModHeightPD (drawModPLs[4])
+ { PD_FLOAT, &drawModCmdContext.height, "Height", PDO_DIM|PDO_NORECORD|BO_ENTER, &r0_10000, N_("Height") },
+#define drawModRadiusPD (drawModPLs[5])
+#define drawModRadius 5
+ { PD_FLOAT, &drawModCmdContext.radius, "Radius", PDO_DIM|PDO_NORECORD|BO_ENTER, &r10000_10000, N_("Radius") },
+#define drawModArcAnglePD (drawModPLs[6])
+ { PD_FLOAT, &drawModCmdContext.arc_angle, "ArcAngle", PDO_NORECORD|BO_ENTER, &r360_360, N_("Arc Angle") },
+#define drawModRotAnglePD (drawModPLs[7)
+ { PD_FLOAT, &drawModCmdContext.rot_angle, "Rot Angle", PDO_NORECORD|BO_ENTER, &r0_360, N_("Rotate Angle") },
+#define drawModRotCenterXPD (drawModPLs[8])
+#define drawModRotCenterInx 8
+ { PD_FLOAT, &drawModCmdContext.rot_center.x, "Rot Center X,Y", PDO_NORECORD|BO_ENTER, &r0_10000, N_("Rot Center X") },
+#define drawModRotCenterYPD (drawModPLs[9])
+ { PD_FLOAT, &drawModCmdContext.rot_center.y, " ", PDO_NORECORD|BO_ENTER, &r0_10000, N_("Rot Center Y") },
+
+};
+static paramGroup_t drawModPG = { "drawMod", 0, drawModPLs, sizeof drawModPLs/sizeof drawModPLs[0] };
+
+static void DrawModDlgUpdate(
+ paramGroup_p pg,
+ int inx,
+ void * valueP )
+{
+ DrawGeomModify(C_UPDATE,zero,&drawModCmdContext);
+ ParamLoadControl(&drawModPG,drawModRotCenterInx-1); //Make sure the angle is updated in case center moved
+ ParamLoadControl(&drawModPG,drawModRadius); // Make sure Radius updated
+ ParamLoadControl(&drawModPG,drawModRelAngle); //Relative Angle as well
+ MainRedraw();
+
+}
static STATUS_T ModifyDraw( track_p trk, wAction_t action, coOrd pos )
{
struct extraData * xx = GetTrkExtraData(trk);
- STATUS_T rc;
+ STATUS_T rc = C_CONTINUE;
- if (action == C_DOWN) {
- //UndrawNewTrack( trk );
- }
- if ( action == C_MOVE )
+ wControl_p controls[5]; //Always needs a NULL last entry
+ char * labels[4];
+
+ drawModCmdContext.trk = trk;
+ drawModCmdContext.orig = xx->orig;
+ drawModCmdContext.angle = xx->angle;
+ drawModCmdContext.segCnt = xx->segCnt;
+ drawModCmdContext.segPtr = xx->segs;
+ drawModCmdContext.selected = GetTrkSelected(trk);
+
+
+ switch(action&0xFF) { //Remove Text value
+ case C_START:
+ drawModCmdContext.type = xx->segs[0].type;
+ switch(drawModCmdContext.type) {
+ case SEG_POLY:
+ case SEG_FILPOLY:
+ drawModCmdContext.filled = (drawModCmdContext.type==SEG_FILPOLY)?TRUE:FALSE;
+ drawModCmdContext.subtype = xx->segs[0].u.p.polyType;
+ drawModCmdContext.open = (drawModCmdContext.subtype==POLYLINE)?TRUE:FALSE;
+ break;
+ case SEG_TEXT:
+ InfoMessage("Text can only be modified in Describe Mode");
+ wBeep();
+ return C_ERROR;
+ default:
+ break;
+
+ }
+ drawModCmdContext.rot_moved = FALSE;
+ drawModCmdContext.rotate_state = FALSE;
+
+ infoSubst = FALSE;
+ rc = DrawGeomModify( C_START, pos, &drawModCmdContext );
+ break;
+ case C_DOWN:
+ rc = DrawGeomModify( C_DOWN, pos, &drawModCmdContext );
+ if ( infoSubst ) {
+ InfoSubstituteControls( NULL, NULL );
+ infoSubst = FALSE;
+ }
+ break;
+ case C_LDOUBLE:
+ rc = DrawGeomModify( C_LDOUBLE, pos, &drawModCmdContext );
+ if ( infoSubst ) {
+ InfoSubstituteControls( NULL, NULL );
+ infoSubst = FALSE;
+ }
+ break;
+ case wActionMove:
+ rc = DrawGeomModify( action, pos, &drawModCmdContext );
+ break;
+ case C_REDRAW:
+ rc = DrawGeomModify( action, pos, &drawModCmdContext );
+ break;
+ case C_MOVE:
+ ignoredDraw = trk;
+ rc = DrawGeomModify( action, pos, &drawModCmdContext );
+ ignoredDraw = NULL;
+ break;
+ case C_UP:
+ ignoredDraw = trk;
+ rc = DrawGeomModify( action, pos, &drawModCmdContext );
+ ignoredDraw = NULL;
+ ComputeDrawBoundingBox( trk );
+ if (drawModCmdContext.state == MOD_AFTER_PT) {
+ switch(drawModCmdContext.type) {
+ case SEG_POLY:
+ case SEG_FILPOLY:
+ if (xx->segs[0].u.p.polyType != RECTANGLE) {
+ if (drawModCmdContext.prev_inx >= 0) {
+ controls[0] = drawModLengthPD.control;
+ controls[1] = drawModRelAnglePD.control;
+ controls[2] = NULL;
+ labels[0] = N_("Seg Lth");
+ labels[1] = N_("Rel Ang");
+ ParamLoadControls( &drawModPG );
+ InfoSubstituteControls( controls, labels );
+ drawModLengthPD.option &= ~PDO_NORECORD;
+ drawModRelAnglePD.option &= ~PDO_NORECORD;
+ infoSubst = TRUE;
+ }
+ } else {
+ controls[0] = drawModWidthPD.control;
+ controls[1] = drawModHeightPD.control;
+ controls[2] = NULL;
+ labels[0] = N_("Width");
+ labels[1] = N_("Height");
+ ParamLoadControls( &drawModPG );
+ InfoSubstituteControls( controls, labels );
+ drawModWidthPD.option &= ~PDO_NORECORD;
+ drawModHeightPD.option &= ~PDO_NORECORD;
+ infoSubst = TRUE;
+ }
+ break;
+ case SEG_STRLIN:
+ case SEG_BENCH:
+ case SEG_DIMLIN:
+ case SEG_TBLEDGE:
+ controls[0] = drawModLengthPD.control;
+ controls[1] = drawModAnglePD.control;
+ controls[2] = NULL;
+ labels[0] = N_("Length");
+ labels[1] = N_("Angle");
+ ParamLoadControls( &drawModPG );
+ InfoSubstituteControls( controls, labels );
+ drawModLengthPD.option &= ~PDO_NORECORD;
+ drawModAnglePD.option &= ~PDO_NORECORD;
+ infoSubst = TRUE;
+ break;
+ case SEG_CRVLIN:
+ case SEG_FILCRCL:
+ controls[0] = drawModRadiusPD.control;
+ controls[1] = NULL;
+ labels[0] = N_("Radius");
+ if ((drawModCmdContext.type == SEG_CRVLIN) && xx->segs[0].u.c.a1>0.0 && xx->segs[0].u.c.a1 <360.0) {
+ controls[1] = drawModArcAnglePD.control;
+ controls[2] = NULL;
+ labels[1] = N_("Arc Angle");
+ }
+ ParamLoadControls( &drawModPG );
+ InfoSubstituteControls( controls, labels );
+ drawModArcAnglePD.option &= ~PDO_NORECORD;
+ if (drawModCmdContext.type == SEG_CRVLIN)
+ drawModArcAnglePD.option &= ~PDO_NORECORD;
+ infoSubst = TRUE;
+ break;
+ default:
+ InfoSubstituteControls( NULL, NULL );
+ infoSubst = FALSE;
+ break;
+ }
+ } else {
+ InfoSubstituteControls( NULL, NULL );
+ infoSubst = FALSE;
+ }
+ break;
+ case C_CMDMENU:
+ menuPos = pos;
+ wMenuPopupShow( drawModDelMI );
+ wMenuPushEnable( drawModPointsMode,drawModCmdContext.rotate_state);
+ wMenuPushEnable( drawModriginMode,!drawModCmdContext.rotate_state);
+ wMenuPushEnable( drawModRound, FALSE);
+ wMenuPushEnable( drawModVertex, FALSE);
+ wMenuPushEnable( drawModSmooth, FALSE);
+ wMenuPushEnable( drawModDel, FALSE);
+ wMenuPushEnable( drawModFill, FALSE);
+ wMenuPushEnable( drawModEmpty, FALSE);
+ wMenuPushEnable( drawModClose, FALSE);
+ wMenuPushEnable( drawModOpen, FALSE);
+ wMenuPushEnable( drawModSolid, TRUE);
+ wMenuPushEnable( drawModDot, TRUE);
+ wMenuPushEnable( drawModDash, TRUE);
+ wMenuPushEnable( drawModDashDot, TRUE);
+ wMenuPushEnable( drawModDashDotDot, TRUE);
+ wMenuPushEnable( drawModCenterDot, TRUE);
+ wMenuPushEnable( drawModPhantom, TRUE);
+ if (!drawModCmdContext.rotate_state && (drawModCmdContext.type == SEG_POLY || drawModCmdContext.type == SEG_FILPOLY)) {
+ wMenuPushEnable( drawModDel,drawModCmdContext.prev_inx>=0);
+ if ((!drawModCmdContext.open && drawModCmdContext.prev_inx>=0) ||
+ ((drawModCmdContext.prev_inx>0) && (drawModCmdContext.prev_inx<drawModCmdContext.max_inx))) {
+ wMenuPushEnable( drawModRound,TRUE);
+ wMenuPushEnable( drawModVertex, TRUE);
+ wMenuPushEnable( drawModSmooth, TRUE);
+ }
+ wMenuPushEnable( drawModFill, (!drawModCmdContext.open) && (!drawModCmdContext.filled));
+ wMenuPushEnable( drawModEmpty, (!drawModCmdContext.open) && (drawModCmdContext.filled));
+ wMenuPushEnable( drawModClose, drawModCmdContext.open);
+ wMenuPushEnable( drawModOpen, !drawModCmdContext.open);
+ }
+ wMenuPushEnable( drawModOrigin,drawModCmdContext.rotate_state);
+ wMenuPushEnable( drawModLast,drawModCmdContext.rotate_state && (drawModCmdContext.prev_inx>=0));
+ wMenuPushEnable( drawModCenter,drawModCmdContext.rotate_state);
+ break;
+ case C_TEXT:
+ ignoredDraw = trk ;
+ rc = DrawGeomModify( action, pos, &drawModCmdContext );
+ if ( infoSubst ) {
+ InfoSubstituteControls( NULL, NULL );
+ infoSubst = FALSE;
+ }
+ ignoredDraw = NULL;
+ if (rc == C_CONTINUE) break;
+ /* no break*/
+ case C_FINISH:
ignoredDraw = trk;
- rc = DrawGeomModify( xx->orig, xx->angle, xx->segCnt, xx->segs, action, pos, GetTrkSelected(trk) );
- ignoredDraw = NULL;
- if (action == C_UP) {
+ rc = DrawGeomModify( C_FINISH, pos, &drawModCmdContext );
+ xx->angle = drawModCmdContext.angle;
+ xx->orig = drawModCmdContext.orig;
+ ignoredDraw = NULL;
ComputeDrawBoundingBox( trk );
- DrawNewTrack( trk );
+ DYNARR_RESET(trkSeg_t,tempSegs_da);
+ if ( infoSubst ) {
+ InfoSubstituteControls( NULL, NULL );
+ infoSubst = FALSE;
+ }
+ break;
+ case C_CANCEL:
+ case C_CONFIRM:
+ case C_TERMINATE:
+ rc = DrawGeomModify( action, pos, &drawModCmdContext );
+ drawModCmdContext.state = MOD_NONE;
+ DYNARR_RESET(trkSeg_t,tempSegs_da);
+ if ( infoSubst ) {
+ InfoSubstituteControls( NULL, NULL );
+ infoSubst = FALSE;
+ }
+ break;
+
+ default:
+
+ break;
}
return rc;
}
@@ -768,7 +1774,7 @@ static BOOL_T StoreDraw(
if (xx->segs[0].type == SEG_POLY ||
xx->segs[0].type == SEG_FILPOLY) {
*data = xx->segs[0].u.p.pts;
- *len = xx->segs[0].u.p.cnt* sizeof (coOrd);
+ *len = xx->segs[0].u.p.cnt* sizeof (pts_t);
return TRUE;
}
return FALSE;
@@ -789,6 +1795,275 @@ static BOOL_T ReplayDraw(
return FALSE;
}
+static BOOL_T QueryDraw( track_p trk, int query )
+{
+ struct extraData * xx = GetTrkExtraData(trk);
+ switch(query) {
+ case Q_IS_DRAW:
+ return TRUE;
+ case Q_IS_POLY:
+ if ((xx->segs[0].type == SEG_POLY) || (xx->segs[0].type == SEG_FILPOLY) ) {
+ return TRUE;
+ }
+ else
+ return FALSE;
+ case Q_IS_TEXT:
+ if (xx->segs[0].type== SEG_TEXT) return TRUE;
+ else return FALSE;
+ case Q_GET_NODES:
+ return TRUE;
+ case Q_CAN_PARALLEL:
+ if ((xx->segs[0].type == SEG_STRLIN) || (xx->segs[0].type == SEG_CRVLIN ||
+ ((xx->segs[0].type == SEG_POLY) && (xx->segs[0].u.p.polyType == POLYLINE))
+ )) return TRUE;
+ else return FALSE;
+ default:
+ return FALSE;
+ }
+}
+
+static wBool_t CompareDraw( track_cp trk1, track_cp trk2 )
+{
+ struct extraData *xx1 = GetTrkExtraData( trk1 );
+ struct extraData *xx2 = GetTrkExtraData( trk2 );
+ char * cp = message + strlen(message);
+ REGRESS_CHECK_POS( "Orig", xx1, xx2, orig )
+ REGRESS_CHECK_ANGLE( "Angle", xx1, xx2, angle )
+ REGRESS_CHECK_INT( "LineType", xx1, xx2, lineType )
+ return CompareSegs( xx1->segs, xx1->segCnt, xx2->segs, xx2->segCnt );
+}
+
+static BOOL_T GetParamsDraw( int inx, track_p trk, coOrd pos, trackParams_t * params ) {
+
+ struct extraData * xx = GetTrkExtraData(trk);
+ if (inx != PARAMS_NODES ) return FALSE;
+ DYNARR_RESET(coOrd,params->nodes);
+ BOOL_T back = FALSE;
+ coOrd start,end;
+ switch (xx->segs[0].type) {
+ case SEG_POLY:
+ if (xx->segs[0].u.p.polyType != POLYLINE) return FALSE;
+ REORIGIN(start,xx->segs[0].u.p.pts[0].pt,xx->angle,xx->orig);
+ REORIGIN(end,xx->segs[0].u.p.pts[xx->segs[0].u.p.cnt-1].pt,xx->angle,xx->orig);
+ if (FindDistance(pos,start)>FindDistance(pos,end)) back = TRUE;
+ for (int i=0;i<xx->segs[0].u.p.cnt;i++) {
+ DYNARR_APPEND(coOrd,params->nodes,xx->segs[0].u.p.cnt);
+ if (back)
+ DYNARR_LAST(coOrd,params->nodes) = xx->segs[0].u.p.pts[xx->segs[0].u.p.cnt-1-i].pt;
+ else
+ DYNARR_LAST(coOrd,params->nodes) = xx->segs[0].u.p.pts[i].pt;
+ REORIGIN(DYNARR_LAST(coOrd,params->nodes),DYNARR_LAST(coOrd,params->nodes),xx->angle,xx->orig);
+ }
+ params->lineOrig = DYNARR_N(coOrd,params->nodes,0);
+ params->lineEnd = DYNARR_LAST(coOrd,params->nodes);
+ return TRUE;
+
+ case SEG_STRLIN:;
+ REORIGIN(start,xx->segs[0].u.l.pos[0],xx->angle,xx->orig);
+ REORIGIN(end,xx->segs[0].u.l.pos[1],xx->angle,xx->orig);
+ if (FindDistance(pos,start)>FindDistance(pos,end)) back = TRUE;
+ for (int i=0;i<2;i++) {
+ DYNARR_APPEND(coOrd,params->nodes,2);
+ REORIGIN(DYNARR_LAST(coOrd,params->nodes),xx->segs[0].u.l.pos[back?1-i:i],xx->angle,xx->orig);
+ }
+ params->lineOrig = DYNARR_N(coOrd,params->nodes,0);
+ params->lineEnd = DYNARR_LAST(coOrd,params->nodes);
+ return TRUE;
+
+ case SEG_CRVLIN:;
+ Translate(&start,xx->segs[0].u.c.center,xx->segs[0].u.c.a0,fabs(xx->segs[0].u.c.radius));
+ REORIGIN(start,start,xx->angle,xx->orig);
+ Translate(&end,xx->segs[0].u.c.center,xx->segs[0].u.c.a0+xx->segs[0].u.c.a1,fabs(xx->segs[0].u.c.radius));
+ REORIGIN(end,end,xx->angle,xx->orig);
+ if (FindDistance(start,pos) > FindDistance(end,pos)) back = TRUE;
+ if (fabs(xx->segs[0].u.c.radius) > 0.5) {
+ double min_angle = R2D(2*acos(1.0-(0.1/fabs(xx->segs[0].u.c.radius)))); //Error max is 0.1"
+ int number = (int) ceil(xx->segs[0].u.c.a1/min_angle);
+ double arc_size = xx->segs[0].u.c.a1/number;
+ for (int i=0;i<=number;i++) {
+ DYNARR_APPEND(coOrd,params->nodes,number);
+ if (back)
+ Translate(&DYNARR_LAST(coOrd,params->nodes),xx->segs[0].u.c.center,xx->segs[0].u.c.a0+xx->segs[0].u.c.a1-(i*arc_size),fabs(xx->segs[0].u.c.radius));
+ else
+ Translate(&DYNARR_LAST(coOrd,params->nodes),xx->segs[0].u.c.center,xx->segs[0].u.c.a0+(i*arc_size),fabs(xx->segs[0].u.c.radius));
+ REORIGIN(DYNARR_LAST(coOrd,params->nodes),DYNARR_LAST(coOrd,params->nodes),xx->angle,xx->orig);
+ }
+ } else {
+ DYNARR_APPEND(coOrd,params->nodes,2);
+ REORIGIN(DYNARR_LAST(coOrd,params->nodes),back?end:start,xx->angle,xx->orig);
+ DYNARR_APPEND(coOrd,params->nodes,2);
+ REORIGIN(DYNARR_LAST(coOrd,params->nodes),back?start:end,xx->angle,xx->orig);
+ }
+ params->lineOrig = DYNARR_N(coOrd,params->nodes,0);
+ params->lineEnd = DYNARR_LAST(coOrd,params->nodes);
+ return TRUE;
+
+ case SEG_BEZLIN:
+ REORIGIN(start,xx->segs[0].u.b.pos[0],xx->angle,xx->orig);
+ REORIGIN(end,xx->segs[0].u.b.pos[3],xx->angle,xx->orig);
+ if (FindDistance(pos,start) < FindDistance(pos,end))
+ params->ep = 0;
+ else params->ep = 1;
+ BOOL_T back = FALSE;
+ coOrd curr_pos = params->bezierPoints[params->ep*3];
+ BOOL_T first = TRUE;
+ for (int i = 0; i<xx->segs[0].bezSegs.cnt;i++) {
+ trkSeg_p segPtr = &DYNARR_N(trkSeg_t,xx->segs[0].bezSegs,params->ep?xx->segs[0].bezSegs.cnt-1-i:i);
+ if (segPtr->type == SEG_STRLIN) {
+ back = FindDistance(segPtr->u.l.pos[0],curr_pos)>FindDistance(segPtr->u.l.pos[1],curr_pos);
+ if (first) {
+ first = FALSE;
+ DYNARR_APPEND(coOrd,params->nodes,2);
+ REORIGIN(DYNARR_LAST(coOrd,params->nodes),segPtr->u.l.pos[back],xx->angle,xx->orig);
+ }
+ DYNARR_APPEND(coOrd,params->nodes,2);
+ REORIGIN(DYNARR_LAST(coOrd,params->nodes),segPtr->u.l.pos[1-back],xx->angle,xx->orig);
+ curr_pos = DYNARR_LAST(coOrd,params->nodes);
+ } else {
+ coOrd start,end;
+ Translate(&start,segPtr->u.c.center,segPtr->u.c.a0,segPtr->u.c.radius);
+ Translate(&end,segPtr->u.c.center,segPtr->u.c.a0+segPtr->u.c.a1,segPtr->u.c.radius);
+ back = FindDistance(start,curr_pos)>FindDistance(end,curr_pos);
+ if (fabs(segPtr->u.c.radius) > 0.2) {
+ double min_angle = 360*acos(1.0-(0.1/fabs(segPtr->u.c.radius)))/M_PI; //Error max is 0.1"
+ int number = (int)ceil(segPtr->u.c.a1/min_angle);
+ double arc_size = segPtr->u.c.a1/number;
+ for (int j=1-first;j<number;j++) {
+ DYNARR_APPEND(coOrd,params->nodes,number-first);
+ if (back == params->ep)
+ Translate(&DYNARR_LAST(coOrd,params->nodes),segPtr->u.c.center,segPtr->u.c.a0+(j*arc_size),fabs(segPtr->u.c.radius) );
+ else
+ Translate(&DYNARR_LAST(coOrd,params->nodes),segPtr->u.c.center,segPtr->u.c.a0+segPtr->u.c.a1-(j*arc_size),fabs(segPtr->u.c.radius) );
+ REORIGIN(DYNARR_LAST(coOrd,params->nodes),DYNARR_LAST(coOrd,params->nodes),xx->angle,xx->orig);
+ }
+ first = FALSE;
+ } else {
+ if (first) {
+ first = FALSE;
+ DYNARR_APPEND(coOrd,params->nodes,2);
+ REORIGIN(DYNARR_LAST(coOrd,params->nodes),start,xx->angle,xx->orig);
+ }
+ DYNARR_APPEND(coOrd,params->nodes,1);
+ REORIGIN(DYNARR_LAST(coOrd,params->nodes),end,xx->angle,xx->orig);
+ first = FALSE;
+ }
+ curr_pos = DYNARR_LAST(coOrd,params->nodes);
+ }
+ }
+ params->lineOrig = DYNARR_N(coOrd,params->nodes,0);
+ params->lineEnd = DYNARR_LAST(coOrd,params->nodes);
+ return TRUE;
+
+ default:
+ return FALSE;
+ }
+ return FALSE;
+
+
+}
+
+static BOOL_T MakeParallelDraw(
+ track_p trk,
+ coOrd pos,
+ DIST_T sep,
+ DIST_T factor,
+ track_p * newTrkR,
+ coOrd * p0R,
+ coOrd * p1R,
+ BOOL_T track)
+{
+ if (track) return FALSE;
+ struct extraData * xx = GetTrkExtraData(trk);
+
+ ANGLE_T angle;
+ DIST_T rad;
+ coOrd p0,p1;
+
+ switch (xx->segs[0].type) {
+ case SEG_STRLIN:
+ angle = FindAngle(xx->segs[0].u.l.pos[0],xx->segs[0].u.l.pos[1]);
+ if ( NormalizeAngle( FindAngle( xx->segs[0].u.l.pos[0], pos ) - angle ) < 180.0 )
+ angle += 90;
+ else
+ angle -= 90;
+ Translate(&p0,xx->segs[0].u.l.pos[0], angle, sep);
+ Translate(&p1,xx->segs[0].u.l.pos[1], angle, sep);
+ tempSegs(0).color = xx->segs[0].color;
+ tempSegs(0).width = xx->segs[0].width;
+ tempSegs_da.cnt = 1;
+ tempSegs(0).type = SEG_STRLIN;
+ tempSegs(0).u.l.pos[0] = p0;
+ tempSegs(0).u.l.pos[1] = p1;
+ if (newTrkR) {
+ *newTrkR = MakeDrawFromSeg( zero, 0.0, &tempSegs(0) );
+ struct extraData * yy = GetTrkExtraData(*newTrkR);
+ yy->lineType = xx->lineType;
+ }
+
+ if ( p0R ) *p0R = p0;
+ if ( p1R ) *p1R = p1;
+ return TRUE;
+ break;
+ case SEG_CRVLIN:
+ rad = FindDistance( pos, xx->segs[0].u.c.center );
+ if ( rad > xx->segs[0].u.c.radius )
+ rad = xx->segs[0].u.c.radius + sep;
+ else
+ rad = xx->segs[0].u.c.radius - sep;
+ tempSegs(0).color = xx->segs[0].color;
+ tempSegs(0).width = xx->segs[0].width;
+ tempSegs_da.cnt = 1;
+ tempSegs(0).type = SEG_CRVLIN;
+ tempSegs(0).u.c.center = xx->segs[0].u.c.center;
+ tempSegs(0).u.c.radius = rad;
+ tempSegs(0).u.c.a0 = xx->segs[0].u.c.a0;
+ tempSegs(0).u.c.a1 = xx->segs[0].u.c.a1;
+ if (newTrkR) {
+ *newTrkR = MakeDrawFromSeg( zero, 0.0, &tempSegs(0) );
+ struct extraData * yy = GetTrkExtraData(*newTrkR);
+ yy->lineType = xx->lineType;
+ }
+ if ( p0R ) PointOnCircle( p0R, xx->segs[0].u.c.center, rad, xx->segs[0].u.c.a0 );
+ if ( p1R ) PointOnCircle( p1R, xx->segs[0].u.c.center, rad, xx->segs[0].u.c.a0+xx->segs[0].u.c.a1 );
+ return TRUE;
+ break;
+ case SEG_POLY:
+ if (xx->segs[0].u.p.polyType != POLYLINE) return FALSE;
+ int inx2;
+ coOrd p = pos;
+ angle = GetAngleSegs(1,&xx->segs[0],&p,NULL,NULL,NULL,&inx2,NULL);
+ if ( NormalizeAngle( FindAngle( p, pos ) - angle ) < 180.0 ) {
+ sep = sep*1.0;
+ angle += 90;
+ } else {
+ angle -= 90;
+ sep = sep*1.0;
+ }
+ tempSegs(0).color = xx->segs[0].color;
+ tempSegs(0).width = xx->segs[0].width;
+ tempSegs_da.cnt = 1;
+ tempSegs(0).type = SEG_POLY;
+ tempSegs(0).u.p.polyType = POLYLINE;
+ tempSegs(0).u.p.pts = memdup( xx->segs[0].u.p.pts, xx->segs[0].u.p.cnt*sizeof (pts_t) );
+ tempSegs(0).u.p.cnt = xx->segs[0].u.p.cnt;
+ for (int i=0;i<xx->segs[0].u.p.cnt;i++) {
+ Translate(&tempSegs(0).u.p.pts[i].pt,tempSegs(0).u.p.pts[i].pt,angle,sep);
+ }
+ if (newTrkR) {
+ *newTrkR = MakeDrawFromSeg( zero, 0.0, &tempSegs(0) );
+ struct extraData * yy = GetTrkExtraData(*newTrkR);
+ yy->lineType = xx->lineType;
+ if (tempSegs(0).u.p.pts) MyFree(tempSegs(0).u.p.pts);
+ }
+ if (p0R) *p0R = tempSegs(0).u.p.pts[0].pt;
+ if (p1R) *p1R = tempSegs(0).u.p.pts[tempSegs(0).u.p.cnt-1].pt;
+ return TRUE;
+ break;
+ default:
+ return FALSE;
+ }
+ return FALSE;
+}
static trackCmd_t drawCmds = {
"DRAW",
@@ -811,19 +2086,21 @@ static trackCmd_t drawCmds = {
NULL, /* merge */
ModifyDraw,
NULL, /* getLength */
- NULL, /* getTrackParams */
+ GetParamsDraw, /* getTrackParams */
NULL, /* moveEndPt */
- NULL, /* query */
+ QueryDraw, /* query */
UngroupDraw,
FlipDraw,
NULL,
NULL,
NULL,
- NULL, /*Parallel*/
+ MakeParallelDraw, /*Parallel*/
NULL,
NULL, /*MakeSegs*/
ReplayDraw,
- StoreDraw
+ StoreDraw,
+ NULL,
+ CompareDraw
};
EXPORT BOOL_T OnTableEdgeEndPt( track_p trk, coOrd * pos )
@@ -918,19 +2195,12 @@ EXPORT BOOL_T GetClosestEndPt( track_p trk, coOrd * pos)
}
-static void DrawRedraw(void);
static drawContext_t drawCmdContext = {
InfoMessage,
- DrawRedraw,
+ DoRedraw,
&mainD,
OP_LINE };
-static void DrawRedraw( void )
-{
- MainRedraw();
- MapRedraw();
-}
-
static wIndex_t benchChoice;
static wIndex_t benchOrient;
static wIndex_t dimArrowSize;
@@ -939,10 +2209,10 @@ long lineWidth = 0;
static wDrawColor benchColor;
-static paramIntegerRange_t i0_100 = { 0, 100, 25 };
+
static paramData_t drawPLs[] = {
-#define drawWidthPD (drawPLs[0])
- { PD_LONG, &drawCmdContext.Width, "linewidth", PDO_NORECORD, &i0_100, N_("Line Width") },
+#define drawLineWidthPD (drawPLs[0])
+ { PD_LONG, &drawCmdContext.line_Width, "linewidth", PDO_NORECORD, &i0_100, N_("Line Width") },
#define drawColorPD (drawPLs[1])
{ PD_COLORLIST, &lineColor, "linecolor", PDO_NORECORD, NULL, N_("Color") },
#define drawBenchColorPD (drawPLs[2])
@@ -960,7 +2230,19 @@ static paramData_t drawPLs[] = {
{ PD_DROPLIST, &benchOrient, "benchorient", PDO_NOPREF|PDO_NORECORD|PDO_LISTINDEX, (void*)105, "", 0 },
#endif
#define drawDimArrowSizePD (drawPLs[5])
- { PD_DROPLIST, &dimArrowSize, "arrowsize", PDO_NORECORD|PDO_LISTINDEX, (void*)80, N_("Size") } };
+ { PD_DROPLIST, &dimArrowSize, "arrowsize", PDO_NORECORD|PDO_LISTINDEX, (void*)80, N_("Size") },
+#define drawLengthPD (drawPLs[6])
+ { PD_FLOAT, &drawCmdContext.length, "Length", PDO_DIM|PDO_NORECORD|BO_ENTER, &r0_10000, N_("Length") },
+#define drawWidthPD (drawPLs[7])
+ { PD_FLOAT, &drawCmdContext.width, "BoxWidth", PDO_DIM|PDO_NORECORD|BO_ENTER, &r0_10000, N_("Width") },
+#define drawAnglePD (drawPLs[8])
+#define drawAngleInx 8
+ { PD_FLOAT, &drawCmdContext.angle, "Angle", PDO_NORECORD|BO_ENTER, &r360_360, N_("Angle") },
+#define drawRadiusPD (drawPLs[9])
+ { PD_FLOAT, &drawCmdContext.radius, "Radius", PDO_DIM|PDO_NORECORD|BO_ENTER, &r0_10000, N_("Radius") },
+#define drawLineTypePD (drawPLs[10])
+ { PD_DROPLIST, &drawCmdContext.lineType, "Type", PDO_DIM|PDO_NORECORD|BO_ENTER, (void*)0, N_("Line Type") },
+};
static paramGroup_t drawPG = { "draw", 0, drawPLs, sizeof drawPLs/sizeof drawPLs[0] };
static char * objectName[] = {
@@ -976,21 +2258,22 @@ static char * objectName[] = {
N_("Circle"),
N_("Circle"),
N_("Box"),
- N_("Polyline"),
+ N_("Polygon"),
N_("Filled Circle"),
N_("Filled Circle"),
N_("Filled Circle"),
N_("Filled Box"),
- N_("Polygon"),
+ N_("Filled Polygon"),
N_("Bezier Line"),
+ N_("Polyline"),
NULL};
static STATUS_T CmdDraw( wAction_t action, coOrd pos )
{
static BOOL_T infoSubst = FALSE;
- wControl_p controls[4];
- char * labels[3];
+ wControl_p controls[5]; //Always needs a NULL last entry
+ char * labels[4];
static char labelName[40];
wAction_t act2 = (action&0xFF) | (bezCmdCreateLine<<8);
@@ -1000,7 +2283,7 @@ static STATUS_T CmdDraw( wAction_t action, coOrd pos )
case C_START:
ParamLoadControls( &drawPG );
/*drawContext = &drawCmdContext;*/
- drawWidthPD.option |= PDO_NORECORD;
+ drawLineWidthPD.option |= PDO_NORECORD;
drawColorPD.option |= PDO_NORECORD;
drawBenchColorPD.option |= PDO_NORECORD;
drawBenchChoicePD.option |= PDO_NORECORD;
@@ -1021,19 +2304,29 @@ static STATUS_T CmdDraw( wAction_t action, coOrd pos )
case OP_CURVE4:
case OP_CIRCLE2:
case OP_CIRCLE3:
+ case OP_BEZLIN:
case OP_BOX:
case OP_POLY:
- case OP_BEZLIN:
- controls[0] = drawWidthPD.control;
+ case OP_POLYLINE:
+ controls[0] = drawLineWidthPD.control;
controls[1] = drawColorPD.control;
+ controls[2] = drawLineTypePD.control;
controls[2] = NULL;
sprintf( labelName, _("%s Line Width"), _(objectName[drawCmdContext.Op]) );
labels[0] = labelName;
labels[1] = N_("Color");
+ labels[2] = N_("Type");
+ if ( wListGetCount( (wList_p)drawLineTypePD.control ) == 0 ) {
+ wListAddValue( (wList_p)drawLineTypePD.control, _("Solid"), NULL, NULL );
+ wListAddValue( (wList_p)drawLineTypePD.control, _("Dot"), NULL, NULL );
+ wListAddValue( (wList_p)drawLineTypePD.control, _("Dash"), NULL, NULL );
+ wListAddValue( (wList_p)drawLineTypePD.control, _("Dash-Dot"), NULL, NULL );
+ wListAddValue( (wList_p)drawLineTypePD.control, _("Dash-Dot-Dot"), NULL, NULL );
+ }
InfoSubstituteControls( controls, labels );
- drawWidthPD.option &= ~PDO_NORECORD;
+ drawLineWidthPD.option &= ~PDO_NORECORD;
drawColorPD.option &= ~PDO_NORECORD;
- lineWidth = drawCmdContext.Width;
+ drawLineTypePD.option &= ~PDO_NORECORD;
break;
case OP_FILLCIRCLE2:
case OP_FILLCIRCLE3:
@@ -1065,6 +2358,7 @@ static STATUS_T CmdDraw( wAction_t action, coOrd pos )
drawBenchColorPD.option &= ~PDO_NORECORD;
drawBenchChoicePD.option &= ~PDO_NORECORD;
drawBenchOrientPD.option &= ~PDO_NORECORD;
+ drawLengthPD.option &= ~PDO_NORECORD;
break;
case OP_DIMLINE:
controls[0] = drawDimArrowSizePD.control;
@@ -1081,9 +2375,7 @@ static STATUS_T CmdDraw( wAction_t action, coOrd pos )
drawDimArrowSizePD.option &= ~PDO_NORECORD;
break;
case OP_TBLEDGE:
- InfoSubstituteControls( NULL, NULL );
InfoMessage( _("Drag to create Table Edge") );
- drawColorPD.option &= ~PDO_NORECORD;
break;
default:
InfoSubstituteControls( NULL, NULL );
@@ -1091,8 +2383,7 @@ static STATUS_T CmdDraw( wAction_t action, coOrd pos )
}
ParamGroupRecord( &drawPG );
if (drawCmdContext.Op == OP_BEZLIN) return CmdBezCurve(act2, pos);
- DrawGeomMouse( C_START, pos, &drawCmdContext );
-
+ DrawGeomMouse( C_START, pos, &drawCmdContext);
return C_CONTINUE;
case wActionLDown:
@@ -1106,7 +2397,10 @@ static STATUS_T CmdDraw( wAction_t action, coOrd pos )
drawCmdContext.Color = benchColor;
} else if ( drawCmdContext.Op == OP_DIMLINE ) {
+ drawCmdContext.Color = wDrawColorBlack;
drawCmdContext.benchOption = dimArrowSize;
+ } else if ( drawCmdContext.Op == OP_TBLEDGE ) {
+ drawCmdContext.Color = wDrawColorBlack;
} else {
drawCmdContext.Color = lineColor;
}
@@ -1114,39 +2408,132 @@ static STATUS_T CmdDraw( wAction_t action, coOrd pos )
InfoSubstituteControls( NULL, NULL );
infoSubst = FALSE;
}
+ /* no break */
case wActionLDrag:
ParamLoadData( &drawPG );
+ /* no break */
case wActionMove:
- case wActionLUp:
case wActionRDown:
case wActionRDrag:
- case wActionRUp:
- case wActionText:
- case C_CMDMENU:
if (drawCmdContext.Op == OP_BEZLIN) return CmdBezCurve(act2, pos);
- if (!((MyGetKeyState() & WKEY_SHIFT) != 0)) {
+ if (!((MyGetKeyState() & WKEY_ALT) != magneticSnap)) {
SnapPos( &pos );
}
- return DrawGeomMouse( action, pos, &drawCmdContext );
+ return DrawGeomMouse( action, pos, &drawCmdContext);
+ case wActionLUp:
+ case wActionRUp:
+ if (drawCmdContext.Op == OP_BEZLIN) return CmdBezCurve(act2, pos);
+ //if (!((MyGetKeyState() & WKEY_SHIFT) != 0)) {
+ // SnapPos( &pos ); Remove Snap at end of action - it will have been imposed in Geom if needed
+ //}
+ int rc = DrawGeomMouse( action, pos, &drawCmdContext);
+ // Put up text entry boxes ready for updates if the result was continue
+ if (rc == C_CONTINUE) {
+ switch( drawCmdContext.Op ) {
+ case OP_CIRCLE1:
+ case OP_CIRCLE2:
+ case OP_CIRCLE3:
+ case OP_FILLCIRCLE1:
+ case OP_FILLCIRCLE2:
+ case OP_FILLCIRCLE3:
+ controls[0] = drawRadiusPD.control;
+ controls[1] = NULL;
+ labels[0] = N_("Radius");
+ ParamLoadControls( &drawPG );
+ InfoSubstituteControls( controls, labels );
+ drawRadiusPD.option &= ~PDO_NORECORD;
+ infoSubst = TRUE;
+ break;
+ case OP_CURVE1:
+ case OP_CURVE2:
+ case OP_CURVE3:
+ case OP_CURVE4:
+ if (drawCmdContext.ArcData.type == curveTypeCurve) {
+ controls[0] = drawRadiusPD.control;
+ controls[1] = drawAnglePD.control;
+ controls[2] = NULL;
+ labels[0] = N_("Radius");
+ labels[1] = N_("Arc Angle");
+ } else {
+ controls[0] = drawLengthPD.control;
+ controls[1] = drawAnglePD.control;
+ controls[2] = NULL;
+ labels[0] = N_("Length");
+ labels[1] = N_("Angle");
+ }
+ ParamLoadControls( &drawPG );
+ InfoSubstituteControls( controls, labels );
+ drawLengthPD.option &= ~PDO_NORECORD;
+ drawRadiusPD.option &= ~PDO_NORECORD;
+ drawAnglePD.option &= ~PDO_NORECORD;
+ infoSubst = TRUE;
+ break;
+ case OP_LINE:
+ case OP_BENCH:
+ case OP_TBLEDGE:
+ case OP_POLY:
+ case OP_FILLPOLY:
+ case OP_POLYLINE:
+ controls[0] = drawLengthPD.control;
+ controls[1] = drawAnglePD.control;
+ controls[2] = NULL;
+ labels[0] = N_("Seg Length");
+ if (drawCmdContext.Op == OP_LINE || drawCmdContext.Op == OP_BENCH || drawCmdContext.Op == OP_TBLEDGE)
+ labels[1] = N_("Angle");
+ else if (drawCmdContext.index > 0 )
+ labels[1] = N_("Rel Angle");
+ else
+ labels[1] = N_("Angle");
+ ParamLoadControls( &drawPG );
+ InfoSubstituteControls( controls, labels );
+ drawLengthPD.option &= ~PDO_NORECORD;
+ drawAnglePD.option &= ~PDO_NORECORD;
+ infoSubst = TRUE;
+ break;
+ case OP_BOX:
+ case OP_FILLBOX:
+ controls[0] = drawLengthPD.control;
+ controls[1] = drawWidthPD.control;
+ controls[2] = NULL;
+ labels[0] = N_("Length");
+ labels[1] = N_("Width");
+ ParamLoadControls( &drawPG );
+ InfoSubstituteControls( controls, labels );
+ drawLengthPD.option &= ~PDO_NORECORD;
+ drawWidthPD.option &= ~PDO_NORECORD;
+ infoSubst = TRUE;
+ break;
+ default:
+ break;
+ }
+ }
+ return rc;
case C_CANCEL:
InfoSubstituteControls( NULL, NULL );
if (drawCmdContext.Op == OP_BEZLIN) return CmdBezCurve(act2, pos);
- return DrawGeomMouse( action, pos, &drawCmdContext );
-
+ return DrawGeomMouse( action, pos, &drawCmdContext);
+ case C_TEXT:
+ if (drawCmdContext.Op == OP_BEZLIN) return CmdBezCurve(action, pos);
+ return DrawGeomMouse( action, pos, &drawCmdContext);
case C_OK:
if (drawCmdContext.Op == OP_BEZLIN) return CmdBezCurve(act2, pos);
- return DrawGeomMouse( (0x0D<<8|wActionText), pos, &drawCmdContext );
+ return DrawGeomMouse( (0x0D<<8|wActionText), pos, &drawCmdContext);
+
/*DrawOk( NULL );*/
case C_FINISH:
if (drawCmdContext.Op == OP_BEZLIN) return CmdBezCurve(act2, pos);
- return DrawGeomMouse( (0x0D<<8|wActionText), pos, &drawCmdContext );
+ return DrawGeomMouse( (0x0D<<8|wActionText), pos, &drawCmdContext);
/*DrawOk( NULL );*/
case C_REDRAW:
if (drawCmdContext.Op == OP_BEZLIN) return CmdBezCurve(act2, pos);
- return DrawGeomMouse( action, pos, &drawCmdContext );
+ return DrawGeomMouse( action, pos, &drawCmdContext);
+
+ case C_CMDMENU:
+ if (drawCmdContext.Op == OP_BEZLIN) return C_CONTINUE;
+ return DrawGeomMouse( action, pos, &drawCmdContext);
default:
return C_CONTINUE;
@@ -1172,6 +2559,7 @@ static STATUS_T CmdDraw( wAction_t action, coOrd pos )
#include "bitmaps/dpoly.xpm"
#include "bitmaps/dfilpoly.xpm"
#include "bitmaps/dbezier.xpm"
+#include "bitmaps/dpolyline.xpm"
typedef struct {
char **xpm;
@@ -1195,16 +2583,18 @@ static drawData_t dcurveCmds[] = {
{ dbezier_xpm, OP_BEZLIN, N_("Bezier Curve"), N_("Draw Bezier"), "cmdDrawBezierCurve", ACCL_DRAWBEZLINE } };
static drawData_t dcircleCmds[] = {
/*{ dcircle1_xpm, OP_CIRCLE1, "Circle Fixed Radius", "Draw Fixed Radius Circle", "cmdDrawCircleFixedRadius", ACCL_DRAWCIRCLE1 },*/
- { dcircle2_xpm, OP_CIRCLE3, N_("Circle Tangent"), N_("Draw Circle from Tangent"), "cmdDrawCircleTangent", ACCL_DRAWCIRCLE2 },
- { dcircle3_xpm, OP_CIRCLE2, N_("Circle Center"), N_("Draw Circle from Center"), "cmdDrawCircleCenter", ACCL_DRAWCIRCLE3 },
+ { dcircle3_xpm, OP_CIRCLE3, N_("Circle Tangent"), N_("Draw Circle from Tangent"), "cmdDrawCircleTangent", ACCL_DRAWCIRCLE2 },
+ { dcircle2_xpm, OP_CIRCLE2, N_("Circle Center"), N_("Draw Circle from Center"), "cmdDrawCircleCenter", ACCL_DRAWCIRCLE3 },
/*{ dflcrcl1_xpm, OP_FILLCIRCLE1, "Circle Filled Fixed Radius", "Draw Fixed Radius Filled Circle", "cmdDrawFilledCircleFixedRadius", ACCL_DRAWFILLCIRCLE1 },*/
- { dflcrcl2_xpm, OP_FILLCIRCLE3, N_("Circle Filled Tangent"), N_("Draw Filled Circle from Tangent"), "cmdDrawFilledCircleTangent", ACCL_DRAWFILLCIRCLE2 },
- { dflcrcl3_xpm, OP_FILLCIRCLE2, N_("Circle Filled Center"), N_("Draw Filled Circle from Center"), "cmdDrawFilledCircleCenter", ACCL_DRAWFILLCIRCLE3 } };
+ { dflcrcl3_xpm, OP_FILLCIRCLE3, N_("Circle Filled Tangent"), N_("Draw Filled Circle from Tangent"), "cmdDrawFilledCircleTangent", ACCL_DRAWFILLCIRCLE2 },
+ { dflcrcl2_xpm, OP_FILLCIRCLE2, N_("Circle Filled Center"), N_("Draw Filled Circle from Center"), "cmdDrawFilledCircleCenter", ACCL_DRAWFILLCIRCLE3 } };
static drawData_t dshapeCmds[] = {
{ dbox_xpm, OP_BOX, N_("Box"), N_("Draw Box"), "cmdDrawBox", ACCL_DRAWBOX },
{ dfilbox_xpm, OP_FILLBOX, N_("Filled Box"), N_("Draw Filled Box"), "cmdDrawFilledBox", ACCL_DRAWFILLBOX },
- { dpoly_xpm, OP_POLY, N_("Poly Line"), N_("Draw Polyline"), "cmdDrawPolyline", ACCL_DRAWPOLYLINE },
- { dfilpoly_xpm, OP_FILLPOLY, N_("Polygon"), N_("Draw Polygon"), "cmdDrawPolygon", ACCL_DRAWPOLYGON } };
+ { dpoly_xpm, OP_POLY, N_("Polygon"), N_("Draw Polygon"), "cmdDrawPolygon", ACCL_DRAWPOLY },
+ { dfilpoly_xpm, OP_FILLPOLY, N_("Filled Polygon"), N_("Draw Filled Polygon"), "cmdDrawFilledPolygon", ACCL_DRAWFILLPOLYGON },
+ { dpolyline_xpm, OP_POLYLINE, N_("PolyLine"), N_("Draw PolyLine"), "cmdDrawPolyline", ACCL_DRAWPOLYLINE },
+};
typedef struct {
char * helpKey;
@@ -1223,7 +2613,7 @@ static drawStuff_t drawStuff[4] = {
{ "cmdDrawLineSetCmd", N_("Straight Objects"), N_("Draw Straight Objects"), 4, dlineCmds },
{ "cmdDrawCurveSetCmd", N_("Curved Lines"), N_("Draw Curved Lines"), 5, dcurveCmds },
{ "cmdDrawCircleSetCmd", N_("Circle Lines"), N_("Draw Circles"), 4, dcircleCmds },
- { "cmdDrawShapeSetCmd", N_("Shapes"), N_("Draw Shapes"), 4, dshapeCmds} };
+ { "cmdDrawShapeSetCmd", N_("Shapes"), N_("Draw Shapes"), 5, dshapeCmds} };
static void ChangeDraw( long changes )
@@ -1247,13 +2637,58 @@ static void DrawDlgUpdate(
int inx,
void * valueP )
{
- if (drawCmdContext.Op == OP_BEZLIN) {
- if ( (inx == 0 && pg->paramPtr[inx].valueP == &drawCmdContext.Width) ||
- (inx == 1 && pg->paramPtr[inx].valueP == &lineColor))
- {
- lineWidth = drawCmdContext.Width;
- UpdateParms(lineColor, lineWidth);
- }
+ if (inx==3) {
+ if (drawCmdContext.Op == OP_BEZLIN) {
+ if ( (inx == 0 && pg->paramPtr[inx].valueP == &drawCmdContext.line_Width) ||
+ (inx == 1 && pg->paramPtr[inx].valueP == &lineColor))
+ {
+ lineWidth = drawCmdContext.line_Width;
+ UpdateParms(lineColor, lineWidth);
+ }
+ }
+ }
+ if (inx >=6 ) {
+ if (drawCmdContext.Op == OP_CIRCLE1 ||
+ drawCmdContext.Op == OP_FILLCIRCLE1 ||
+ drawCmdContext.Op == OP_CIRCLE2 ||
+ drawCmdContext.Op == OP_FILLCIRCLE2 ||
+ drawCmdContext.Op == OP_CIRCLE3 ||
+ drawCmdContext.Op == OP_FILLCIRCLE3) {
+ coOrd pos = zero;
+ DrawGeomMouse(C_UPDATE,pos,&drawCmdContext);
+ }
+ if (drawCmdContext.Op == OP_CURVE1 ||
+ drawCmdContext.Op == OP_CURVE2 ||
+ drawCmdContext.Op == OP_CURVE3 ||
+ drawCmdContext.Op == OP_CURVE4 ) {
+ coOrd pos = zero;
+ DrawGeomMouse(C_UPDATE,pos,&drawCmdContext);
+ }
+ if (drawCmdContext.Op == OP_LINE ||
+ drawCmdContext.Op == OP_BENCH||
+ drawCmdContext.Op == OP_TBLEDGE) {
+ coOrd pos = zero;
+ DrawGeomMouse(C_UPDATE,pos,&drawCmdContext);
+ }
+
+ if (drawCmdContext.Op == OP_BOX ||
+ drawCmdContext.Op == OP_FILLBOX ){
+ coOrd pos = zero;
+ DrawGeomMouse(C_UPDATE,pos,&drawCmdContext);
+ }
+
+ if (drawCmdContext.Op == OP_POLY ||
+ drawCmdContext.Op == OP_FILLPOLY ||
+ drawCmdContext.Op == OP_POLYLINE) {
+ coOrd pos = zero;
+ DrawGeomMouse(C_UPDATE,pos,&drawCmdContext);
+ }
+ ParamLoadControl(&drawPG,drawAngleInx); //Force Angle change out
+ //if (pg->paramPtr[inx].enter_pressed) {
+ // coOrd pos = zero;
+ // DrawGeomMouse((0x0D<<8)|(C_TEXT&0xFF),pos,&drawCmdContext);
+ // CmdDraw(C_START,pos);
+ //}
}
if ( inx >= 0 && pg->paramPtr[inx].valueP == &benchChoice )
@@ -1272,13 +2707,15 @@ EXPORT void InitCmdDraw( wMenu_p menu )
benchColor = wDrawFindColor( wRGB(255,192,0) );
ParamCreateControls( &drawPG, DrawDlgUpdate );
+ ParamCreateControls( &drawModPG, DrawModDlgUpdate) ;
+
for ( inx1=0; inx1<4; inx1++ ) {
dsp = &drawStuff[inx1];
ButtonGroupBegin( _(dsp->menuTitle), dsp->helpKey, _(dsp->stickyLabel) );
for ( inx2=0; inx2<dsp->cnt; inx2++ ) {
ddp = &dsp->data[inx2];
icon = wIconCreatePixMap( ddp->xpm );
- AddMenuButton( menu, CmdDraw, ddp->helpKey, _(ddp->cmdName), icon, LEVEL0_50, IC_STICKY|IC_POPUP2, ddp->acclKey, (void *)(intptr_t)ddp->OP );
+ AddMenuButton( menu, CmdDraw, ddp->helpKey, _(ddp->cmdName), icon, LEVEL0_50, IC_STICKY|IC_POPUP2|IC_WANT_MOVE, ddp->acclKey, (void *)(intptr_t)ddp->OP );
}
ButtonGroupEnd();
}
@@ -1327,7 +2764,8 @@ EXPORT track_p NewText(
ANGLE_T angle,
char * text,
CSIZE_T textSize,
- wDrawColor color )
+ wDrawColor color,
+ BOOL_T boxed)
{
trkSeg_t tempSeg;
track_p trk;
@@ -1339,6 +2777,7 @@ EXPORT track_p NewText(
tempSeg.u.t.fontP = NULL;
tempSeg.u.t.fontSize = textSize;
tempSeg.u.t.string = MyStrdup( text );
+ tempSeg.u.t.boxed = boxed;
trk = MakeDrawFromSeg1( index, pos, angle, &tempSeg );
return trk;
}
@@ -1364,20 +2803,127 @@ EXPORT BOOL_T ReadText( char * line )
return FALSE;
}
- char * old = text;
- text = ConvertFromEscapedText(text);
- MyFree(old);
-
- trk = NewText( index, pos, angle, text, textSize, color );
+ trk = NewText( index, pos, angle, text, textSize, color, FALSE );
SetTrkLayer( trk, layer );
MyFree(text);
return TRUE;
}
+void MenuMode(int mode) {
+ if ( infoSubst ) {
+ InfoSubstituteControls( NULL, NULL );
+ infoSubst = FALSE;
+ }
+ if (mode == 1) {
+ DrawGeomOriginMove(C_START,zero,&drawModCmdContext);
+ InfoMessage("Origin Mode");
+ } else {
+ DrawGeomModify(C_START,zero,&drawModCmdContext);
+ InfoMessage("Points Mode");
+ }
+}
+
+void MenuEnter(int key) {
+ int action;
+ action = C_TEXT;
+ action |= key<<8;
+ if (drawModCmdContext.rotate_state)
+ DrawGeomOriginMove(action,zero,&drawModCmdContext);
+ else
+ DrawGeomModify(action,zero,&drawModCmdContext);
+}
+
+void MenuLine(int key) {
+ struct extraData * xx = GetTrkExtraData(drawModCmdContext.trk);
+ if ( drawModCmdContext.type==SEG_STRLIN || drawModCmdContext.type==SEG_CRVLIN || drawModCmdContext.type==SEG_POLY ) {
+ switch(key) {
+ case '0':
+ xx->lineType = DRAWLINESOLID;
+ break;
+ case '1':
+ xx->lineType = DRAWLINEDASH;
+ break;
+ case '2':
+ xx->lineType = DRAWLINEDOT;
+ break;
+ case '3':
+ xx->lineType = DRAWLINEDASHDOT;
+ break;
+ case '4':
+ xx->lineType = DRAWLINEDASHDOTDOT;
+ break;
+ case '5':
+ xx->lineType = DRAWLINECENTER;
+ break;
+ case '6':
+ xx->lineType = DRAWLINEPHANTOM;
+ break;
+ }
+ MainRedraw(); // MenuLine
+ }
+}
+
+EXPORT void SetLineType( track_p trk, int width ) {
+ if (QueryTrack(trk, Q_IS_DRAW)) {
+ struct extraData * xx = GetTrkExtraData(trk);
+ if ( xx->segs[0].type==SEG_STRLIN || xx->segs[0].type==SEG_CRVLIN || xx->segs[0].type==SEG_POLY) {
+ switch(width) {
+ case 0:
+ xx->lineType = DRAWLINESOLID;
+ break;
+ case 1:
+ xx->lineType = DRAWLINEDASH;
+ break;
+ case 2:
+ xx->lineType = DRAWLINEDOT;
+ break;
+ case 3:
+ xx->lineType = DRAWLINEDASHDOT;
+ break;
+ case 4:
+ xx->lineType = DRAWLINEDASHDOTDOT;
+ break;
+ case 5:
+ xx->lineType = DRAWLINECENTER;
+ break;
+ case 6:
+ xx->lineType = DRAWLINEPHANTOM;
+ break;
+ }
+ }
+ }
+}
EXPORT void InitTrkDraw( void )
{
T_DRAW = InitObject( &drawCmds );
AddParam( "TABLEEDGE", ReadTableEdge );
AddParam( "TEXT", ReadText );
+
+ drawModDelMI = MenuRegister( "Modify Draw Edit Menu" );
+ drawModClose = wMenuPushCreate( drawModDelMI, "", _("Close Polygon - 'g'"), 0, (wMenuCallBack_p)MenuEnter, (void*) 'g');
+ drawModOpen = wMenuPushCreate( drawModDelMI, "", _("Make PolyLine - 'l'"), 0, (wMenuCallBack_p)MenuEnter, (void*) 'l');
+ drawModFill = wMenuPushCreate( drawModDelMI, "", _("Fill Polygon - 'f'"), 0, (wMenuCallBack_p)MenuEnter, (void*) 'f');
+ drawModEmpty = wMenuPushCreate( drawModDelMI, "", _("Empty Polygon - 'u'"), 0, (wMenuCallBack_p)MenuEnter, (void*) 'u');
+ wMenuSeparatorCreate( drawModDelMI );
+ drawModPointsMode = wMenuPushCreate( drawModDelMI, "", _("Points Mode - 'p'"), 0, (wMenuCallBack_p)MenuMode, (void*) 0 );
+ drawModDel = wMenuPushCreate( drawModDelMI, "", _("Delete Selected Point - 'Del'"), 0, (wMenuCallBack_p)MenuEnter, (void*) 127 );
+ drawModVertex = wMenuPushCreate( drawModDelMI, "", _("Vertex Point - 'v'"), 0, (wMenuCallBack_p)MenuEnter, (void*) 'v' );
+ drawModRound = wMenuPushCreate( drawModDelMI, "", _("Round Corner - 'r'"), 0, (wMenuCallBack_p)MenuEnter, (void*) 'r' );
+ drawModSmooth = wMenuPushCreate( drawModDelMI, "", _("Smooth Corner - 's'"), 0, (wMenuCallBack_p)MenuEnter, (void*) 's' );
+ wMenuSeparatorCreate( drawModDelMI );
+ drawModLinMI = wMenuMenuCreate( drawModDelMI, "", _("LineType...") );
+ drawModSolid = wMenuPushCreate( drawModLinMI, "", _("Solid Line"), 0, (wMenuCallBack_p)MenuLine, (void*) '0' );
+ drawModDot = wMenuPushCreate( drawModLinMI, "", _("Dashed Line"), 0, (wMenuCallBack_p)MenuLine, (void*) '1' );
+ drawModDash = wMenuPushCreate( drawModLinMI, "", _("Dotted Line"), 0, (wMenuCallBack_p)MenuLine, (void*) '2' );
+ drawModDashDot = wMenuPushCreate( drawModLinMI, "", _("Dash-Dot Line"), 0, (wMenuCallBack_p)MenuLine, (void*) '3' );
+ drawModDashDotDot = wMenuPushCreate( drawModLinMI, "", _("Dash-Dot-Dot Line"), 0, (wMenuCallBack_p)MenuLine, (void*) '4' );
+ drawModCenterDot = wMenuPushCreate( drawModLinMI, "", _("Center-Dot Line"), 0, (wMenuCallBack_p)MenuLine, (void*) '5' );
+ drawModPhantom = wMenuPushCreate( drawModLinMI, "", _("Phantom-Dot Line"), 0, (wMenuCallBack_p)MenuLine, (void*) '6' );
+ wMenuSeparatorCreate( drawModDelMI );
+ drawModriginMode = wMenuPushCreate( drawModDelMI, "", _("Origin Mode - 'o'"), 0, (wMenuCallBack_p)MenuMode, (void*) 1 );
+ drawModOrigin = wMenuPushCreate( drawModDelMI, "", _("Reset Origin - '0'"), 0, (wMenuCallBack_p)MenuEnter, (void*) '0' );
+ drawModLast = wMenuPushCreate( drawModDelMI, "", _("Origin to Selected - 'l'"), 0, (wMenuCallBack_p)MenuEnter, (void*) 'l' );
+ drawModCenter = wMenuPushCreate( drawModDelMI, "", _("Origin to Middle - 'm'"), 0, (wMenuCallBack_p)MenuEnter, (void*) 'm');
+
}
diff --git a/app/bin/celev.c b/app/bin/celev.c
index 5a63a3a..1da4b22 100644
--- a/app/bin/celev.c
+++ b/app/bin/celev.c
@@ -29,6 +29,8 @@
#include "i18n.h"
#include "param.h"
#include "track.h"
+#include "ccurve.h"
+#include "utility.h"
static wWin_p elevW;
@@ -58,6 +60,71 @@ static paramData_t elevationPLs[] = {
{ PD_STRING, elevStationV, "station", PDO_DLGUNDERCMDBUTT|PDO_STRINGLIMITLENGTH, (void*)200, NULL, 0, 0, sizeof(elevStationV)} };
static paramGroup_t elevationPG = { "elev", 0, elevationPLs, sizeof elevationPLs/sizeof elevationPLs[0] };
+static dynArr_t anchors_da;
+#define anchors(N) DYNARR_N(trkSeg_t,anchors_da,N)
+
+static void CreateSquareAnchor(coOrd p) {
+ DIST_T d = tempD.scale*0.25;
+ int i = anchors_da.cnt;
+ DYNARR_SET(trkSeg_t,anchors_da,i+4);
+ for (int j =0; j<4;j++) {
+ anchors(i+j).type = SEG_STRLIN;
+ anchors(i+j).color = wDrawColorBlue;
+ anchors(i+j).width = 0;
+ }
+ anchors(i).u.l.pos[0].x = anchors(i+2).u.l.pos[1].x =
+ anchors(i+3).u.l.pos[0].x = anchors(i+3).u.l.pos[1].x = p.x-d/2;
+
+ anchors(i).u.l.pos[0].y = anchors(i).u.l.pos[1].y =
+ anchors(i+1).u.l.pos[0].y = anchors(i+3).u.l.pos[1].y = p.y-d/2;
+
+ anchors(i).u.l.pos[1].x =
+ anchors(i+1).u.l.pos[0].x = anchors(i+1).u.l.pos[1].x =
+ anchors(i+2).u.l.pos[0].x = p.x+d/2;
+
+ anchors(i+1).u.l.pos[1].y =
+ anchors(i+2).u.l.pos[0].y = anchors(i+2).u.l.pos[1].y =
+ anchors(i+3).u.l.pos[0].y = p.y+d/2;
+}
+
+static void CreateEndAnchor(coOrd p, wBool_t lock) {
+ DIST_T d = tempD.scale*0.15;
+
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = lock?SEG_FILCRCL:SEG_CRVLIN;
+ anchors(i).color = wDrawColorBlue;
+ anchors(i).u.c.center = p;
+ anchors(i).u.c.radius = d/2;
+ anchors(i).u.c.a0 = 0.0;
+ anchors(i).u.c.a1 = 360.0;
+ anchors(i).width = 0;
+}
+
+static void CreateSplitAnchor(coOrd pos, track_p t) {
+ DIST_T d = tempD.scale*0.1;
+ DIST_T w = tempD.scale/tempD.dpi*4;
+ int i;
+ ANGLE_T a = NormalizeAngle(GetAngleAtPoint(t,pos,NULL,NULL)+90.0);
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).color = wDrawColorBlue;
+ Translate(&anchors(i).u.l.pos[0],pos,a,GetTrkGauge(t));
+ Translate(&anchors(i).u.l.pos[1],pos,a,-GetTrkGauge(t));
+ anchors(i).width = w;
+
+}
+
+
+void static CreateMoveAnchor(coOrd pos) {
+ DYNARR_SET(trkSeg_t,anchors_da,anchors_da.cnt+5);
+ DrawArrowHeads(&DYNARR_N(trkSeg_t,anchors_da,anchors_da.cnt-5),pos,0,TRUE,wDrawColorBlue);
+ DYNARR_SET(trkSeg_t,anchors_da,anchors_da.cnt+5);
+ DrawArrowHeads(&DYNARR_N(trkSeg_t,anchors_da,anchors_da.cnt-5),pos,90,TRUE,wDrawColorBlue);
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ CreateSquareAnchor(pos);
+}
static void LayoutElevW(
paramData_t * pd,
@@ -97,59 +164,16 @@ static int GetElevMode( void )
}
-#ifdef LATER
-static void DoElevRadio( long mode, void * context )
-{
- if ( mode < 0 || mode >= 7 )
- return;
-#ifdef ELEVM
- ParamLoadMessage( elevMessageM, "" );
-#endif
- ParamControlActive( &elevationPG, I_HEIGHT, FALSE );
- ParamControlActive( &elevationPG, I_STATION, FALSE );
- switch ( mode ) {
- case 0:
- break;
- case 1:
- case 2:
- ParamControlActive( &elevationPG, I_HEIGHT, TRUE );
- break;
- case 3:
- case 4:
-#ifdef OLDELEV
- if ( !( (rc0 == FDE_DEF && rc1 == FDE_DEF) ||
- (rc0 == FDE_DEF && rc1 == FDE_END) ||
- (rc0 == FDE_END && rc1 == FDE_DEF) ) ) {
- ParamLoadMessage( &elevationPG, I_MSG, _("There are no reachable Defined Elevations") );
- ParamLoadControl( &elevationPG, I_MODE );
- return;
- }
-#endif
- break;
- case 5:
- wControlActive( (wControl_p)elevStationS, TRUE );
- break;
- }
- elevModeV = mode;
- DoElevUpdate( NULL, 1, NULL );
-}
-#endif
-
static void DoElevUpdate( paramGroup_p pg, int inx, void * valueP )
{
int oldMode, newMode;
- coOrd pos;
DIST_T elevNewValue, elevOldValue, diff;
- DIST_T radius;
if ( inx == 0 ) {
long mode = *(long*)valueP;
if ( mode < 0 || mode >= 7 )
return;
-#ifdef ELEVM
- ParamLoadMessage( elevMessageM, "" );
-#endif
ParamControlActive( &elevationPG, I_HEIGHT, FALSE );
ParamControlActive( &elevationPG, I_STATION, FALSE );
switch ( mode ) {
@@ -161,15 +185,6 @@ static void DoElevUpdate( paramGroup_p pg, int inx, void * valueP )
break;
case 3:
case 4:
-#ifdef OLDELEV
- if ( !( (rc0 == FDE_DEF && rc1 == FDE_DEF) ||
- (rc0 == FDE_DEF && rc1 == FDE_END) ||
- (rc0 == FDE_END && rc1 == FDE_DEF) ) ) {
- ParamLoadMessage( &elevationPG, I_MSG, _("There are no reachable Defined Elevations") );
- ParamLoadControl( &elevationPG, I_MODE );
- return;
- }
-#endif
break;
case 5:
ParamControlActive( &elevationPG, I_STATION, TRUE );
@@ -204,27 +219,14 @@ static void DoElevUpdate( paramGroup_p pg, int inx, void * valueP )
UndoStart( _("Set Elevation"), "Set Elevation" );
elevUndo = TRUE;
}
- pos = GetTrkEndPos( elevTrk, elevEp );
- radius = 0.05*mainD.scale;
- if ( radius < trackGauge/2.0 )
- radius = trackGauge/2.0;
- if ( (oldMode&ELEV_MASK)==ELEV_DEF || (oldMode&ELEV_MASK)==ELEV_IGNORE )
- DrawFillCircle( &tempD, pos, radius,
- ((oldMode&ELEV_MASK)==ELEV_DEF?elevColorDefined:elevColorIgnore));
- HilightSelectedEndPt(FALSE, elevTrk, elevEp);
UpdateTrkEndElev( elevTrk, elevEp, newMode, elevNewValue, elevStationV );
- HilightSelectedEndPt(TRUE, elevTrk, elevEp);
- if ( (newMode&ELEV_MASK)==ELEV_DEF || (newMode&ELEV_MASK)==ELEV_IGNORE )
- DrawFillCircle( &tempD, pos, radius,
- ((newMode&ELEV_MASK)==ELEV_DEF?elevColorDefined:elevColorIgnore));
+ TempRedraw(); // DoElevUpdate
}
static void DoElevDone( void * arg )
{
DoElevUpdate( NULL, 1, NULL );
- HilightElevations( FALSE );
- HilightSelectedEndPt( FALSE, elevTrk, elevEp );
elevTrk = NULL;
Reset();
}
@@ -250,7 +252,6 @@ static void ElevSelect( track_p trk, EPINX_T ep )
elevOldValue = 0.0;
elevHeightV = 0.0;
elevStationV[0] = 0;
- HilightSelectedEndPt(FALSE, elevTrk, elevEp);
elevTrk = trk;
elevEp = ep;
mode = GetTrkEndElevUnmaskedMode( trk, ep );
@@ -294,89 +295,26 @@ static void ElevSelect( track_p trk, EPINX_T ep )
}
elevModeV = radio;
ParamLoadControl( &elevationPG, I_MODE );
-#ifdef OLDELEV
-if (oldElevationEvaluation) {
- int dir;
- ANGLE_T a;
- int rc0, rc1;
- DIST_T elev0, elev1, dist0, dist1;
- a = GetTrkEndAngle( trk, ep );
- dir = ( a > 270 || a < 90 );
- rc0 = FindDefinedElev( trk, ep, dir, FALSE, &elev0, &dist0 );
- rc1 = FindDefinedElev( trk, ep, 1-dir, FALSE, &elev1, &dist1 );
- if ( rc0 == FDE_DEF ) {
- sprintf( message, _("Elev = %s"), FormatDistance(elev0) );
- ParamLoadMessage( elev1ElevM, message );
- sprintf( message, _("Dist = %s"), FormatDistance(dist0) );
- ParamLoadMessage( elev1DistM, message );
-#ifdef LATER
- if (dist0 > 0.1)
- sprintf( message, "%0.1f%%", elev0/dist0 );
- else
- sprintf( message, _("Undefined") );
- ParamLoadMessage( elev1GradeM, message );
-#endif
- } else {
- ParamLoadMessage( elev1ElevM, "" );
- ParamLoadMessage( elev1DistM, "" );
- /*ParamLoadMessage( elev1GradeM, "" );*/
- }
- if ( rc1 == FDE_DEF ) {
- sprintf( message, _("Elev = %s"), FormatDistance(elev1) );
- ParamLoadMessage( elev2ElevM, message );
- sprintf( message, _("Dist = %s"), FormatDistance(dist1) );
- ParamLoadMessage( elev2DistM, message );
-#ifdef LATER
- if (dist1 > 0.1)
- sprintf( message, "%0.1f%%", elev1/dist1 );
- else
- sprintf( message, _("Undefined") );
- ParamLoadMessage( elev2GradeM, message );
-#endif
- } else {
- ParamLoadMessage( elev2ElevM, "" );
- ParamLoadMessage( elev2DistM, "" );
- /*ParamLoadMessage( elev2GradeM, "" );*/
- }
+ gradeOk = ComputeElev( trk, ep, FALSE, &elevX, &grade, TRUE );
computedOk = TRUE;
- if (rc0 == FDE_DEF && rc1 == FDE_DEF) {
- grade = (elev1-elev0)/(dist0+dist1);
- elevX = elev0 + grade*dist0;
- } else if (rc0 == FDE_DEF && rc1 == FDE_END) {
- grade = 0.0;
- elevX = elev0;
- } else if (rc0 == FDE_END && rc1 == FDE_DEF) {
- elevX = elev1;
- grade = 0.0;
- } else {
- gradeOk = FALSE;
- computedOk = FALSE;
- }
-} else {
-#endif
- gradeOk = ComputeElev( trk, ep, FALSE, &elevX, &grade );
- computedOk = TRUE;
-#ifdef OLDELEV
-}
-#endif
if (oldElevationEvaluation || computedOk) {
- sprintf( message, "%0.2f%s", PutDim( elevX ), (units==UNITS_METRIC?"cm":"\"") );
+ sprintf( message, "%0.2f%s", round(PutDim( elevX )*100.0)/100.0, (units==UNITS_METRIC?"cm":"\"") );
ParamLoadMessage( &elevationPG, I_COMPUTED, message );
if (gradeOk) {
- sprintf( message, "%0.1f%%", fabs(grade*100) );
+ sprintf( message, "%0.1f%%", fabs(round(grade*1000.0)/10.0) );
} else {
if ( EndPtIsDefinedElev(trk,ep) ) {
elev = GetElevation(trk);
dist = GetTrkLength(trk,ep,-1);
if (dist>0.1)
- sprintf( message, "%0.1f%%", fabs((elev-elevX)/dist)*100.0 );
+ sprintf( message, "%0.1f%%", fabs(round((elev-elevX)/dist)*1000.0)/10.0 );
else
sprintf( message, _("Undefined") );
if ( (trk1=GetTrkEndTrk(trk,ep)) && (ep1=GetEndPtConnectedToMe(trk1,trk))>=0 ) {
elev = GetElevation(trk1);
dist = GetTrkLength(trk1,ep1,-1);
if (dist>0.1)
- sprintf( message+strlen(message), " - %0.1f%%", fabs((elev-elevX)/dist)*100.0 );
+ sprintf( message+strlen(message), " - %0.1f%%", fabs(round((elev-elevX)/dist)*1000.0)/10.0 );
else
sprintf( message+strlen(message), " - %s", _("Undefined") );
}
@@ -390,7 +328,41 @@ if (oldElevationEvaluation) {
ParamLoadControl( &elevationPG, I_HEIGHT );
}
}
- HilightSelectedEndPt(TRUE, elevTrk, elevEp);
+ wShow(elevW);
+}
+
+static BOOL_T GetPointElev(track_p trk, coOrd pos, DIST_T * height) {
+ DIST_T len, len1, elev0, elev1, dist0, dist1;
+ if ( IsTrack( trk ) && GetTrkEndPtCnt(trk) == 2 ) {
+ dist0 = FindDistance(pos,GetTrkEndPos(trk,0));
+ dist1 = FindDistance(pos,GetTrkEndPos(trk,1));
+ if (EndPtIsDefinedElev(trk,0))
+ elev0 = GetTrkEndElevHeight(trk,0);
+ else {
+ if (!GetTrkEndElevCachedHeight(trk,0,&elev0,&len)) {
+ if (GetTrkLength( trk, 0, 1 )<0.1) return FALSE;
+ ComputeElev( trk, 0, FALSE, &elev0, NULL, TRUE );
+ }
+ }
+ if (EndPtIsDefinedElev(trk,1))
+ elev1 = GetTrkEndElevHeight(trk,1);
+ else {
+ if (!GetTrkEndElevCachedHeight(trk,1,&elev1,&len1)) {
+ if (GetTrkLength( trk, 0, 1 )<0.1) return FALSE;
+ ComputeElev( trk, 0, FALSE, &elev0, NULL, TRUE );
+ }
+ }
+ if (dist1+dist0 < 0.1) {
+ *height = elev0;
+ return TRUE;
+ }
+ *height = ((elev1-elev0)*(dist0/(dist0+dist1)))+elev0;
+ return TRUE;
+ } else if (GetTrkEndPtCnt(trk) == 1 && GetTrkEndElevCachedHeight(trk,0,&elev0,&len)) {
+ *height = elev0;
+ return TRUE;
+ }
+ return FALSE;
}
@@ -403,59 +375,129 @@ static STATUS_T CmdElevation( wAction_t action, coOrd pos )
switch (action) {
case C_START:
if ( elevW == NULL )
- elevW = ParamCreateDialog( &elevationPG, MakeWindowTitle(_("Elevation")), _("Done"), DoElevDone, NULL, TRUE, LayoutElevW, 0, DoElevUpdate );
+ elevW = ParamCreateDialog( &elevationPG, MakeWindowTitle(_("Elevation")), _("Done"), DoElevDone, wHide, TRUE, LayoutElevW, 0, DoElevUpdate );
elevModeV = 0;
elevHeightV = 0.0;
elevStationV[0] = 0;
ParamLoadControls( &elevationPG );
ParamGroupRecord( &elevationPG );
- wShow( elevW );
+ //wShow( elevW );
ParamControlActive( &elevationPG, I_MODE, FALSE );
ParamControlActive( &elevationPG, I_HEIGHT, FALSE );
ParamControlActive( &elevationPG, I_STATION, FALSE );
ParamLoadMessage( &elevationPG, I_COMPUTED, "" );
ParamLoadMessage( &elevationPG, I_GRADE, "" );
- InfoMessage( _("Select End-Point") );
- HilightElevations( TRUE );
+ InfoMessage( _("Click on end, +Shift to split, +Ctrl to move description") );
elevTrk = NULL;
elevUndo = FALSE;
+ CmdMoveDescription( action, pos );
+ TempRedraw(); // CmdElevation C_START
return C_CONTINUE;
- case C_RDOWN:
- case C_RMOVE:
- case C_RUP:
- CmdMoveDescription( action-C_RDOWN+C_DOWN, pos );
- return C_CONTINUE;
- case C_LCLICK:
- if ((trk0 = OnTrack( &pos, TRUE, TRUE )) == NULL) {
+ case wActionMove:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ if (MyGetKeyState()&WKEY_CTRL) {
+ commandContext = (void*) 1; //Just end points
+ CmdMoveDescription( action, pos );
return C_CONTINUE;
}
- if ( (MyGetKeyState()&WKEY_SHIFT) ) {
- ep0 = PickEndPoint( pos, trk0 );
- UndoStart( _("Split Track"), "SplitTrack( T%d[%d] )", GetTrkIndex(trk0), ep0 );
- oldTrackCount = trackCount;
- if (!SplitTrack( trk0, pos, ep0, &trk1, FALSE ))
+ BOOL_T xing = FALSE;
+ coOrd p0 = pos, p2=pos;
+ if ((trk0 = OnTrack2(&p0,FALSE, TRUE, FALSE, NULL)) != NULL) {
+ EPINX_T ep0 = 0, ep1 = 1;
+ DIST_T elev0, elev1;
+ if (GetTrkEndPtCnt(trk0) == 2) {
+ if (!GetPointElev(trk0,p0,&elev0)) {
+ InfoMessage( _("Move to end or track crossing +Shift to split") );
+ return C_CONTINUE;
+ }
+ } else {
+ InfoMessage( _("Move to end or track crossing") );
return C_CONTINUE;
- ElevSelect( trk0, ep0 );
- UndoEnd();
- elevUndo = FALSE;
- } else {
- ep0 = PickEndPoint( pos, trk0 );
- ElevSelect( trk0, ep0 );
+ }
+ if ((trk1 = OnTrack2(&p2,FALSE, TRUE, FALSE, trk0)) != NULL) {
+ if (IsClose(FindDistance(p0,p2))) {
+ if (GetEndPtConnectedToMe(trk0,trk1) == -1) { //Not simply connected to each other!!!
+ if (GetTrkEndPtCnt(trk1) == 2) {
+ if (GetPointElev(trk1,p2,&elev1)) {
+ if (MyGetKeyState()&WKEY_SHIFT) {
+ InfoMessage (_("Crossing - First %0.3f, Second %0.3f, Clearance %0.3f - Click to Split"), PutDim(elev0), PutDim(elev1), PutDim(fabs(elev0-elev1)));
+ } else
+ InfoMessage (_("Crossing - First %0.3f, Second %0.3f, Clearance %0.3f"), PutDim(elev0), PutDim(elev1), PutDim(fabs(elev0-elev1)));
+ }
+ CreateSquareAnchor(p2);
+ return C_CONTINUE;
+ }
+ }
+ }
+ }
+ if ((ep0 = PickEndPoint( p0, trk0 )) != -1) {
+ if (IsClose(FindDistance(GetTrkEndPos(trk0,ep0),pos))) {
+ CreateEndAnchor(GetTrkEndPos(trk0,ep0),FALSE);
+ InfoMessage (_("Track End elevation %0.3f"), PutDim(elev0));
+ } else if ((MyGetKeyState()&WKEY_SHIFT) && QueryTrack(trk0,Q_MODIFY_CAN_SPLIT)
+ && !(QueryTrack(trk0,Q_IS_TURNOUT))) {
+ InfoMessage( _("Click to split here - elevation %0.3f"), PutDim(elev0));
+ CreateSplitAnchor(p0,trk0);
+ } else {
+ InfoMessage( _("Track Point elevation %0.3f"), PutDim(elev0));
+ CreateEndAnchor(p0,TRUE);
+ }
+ } else InfoMessage( _("Click on end, +Shift to split, +Ctrl to move description") );
+ } else
+ InfoMessage( _("Click on end, +Shift to split, +Ctrl to move description") );
+ return C_CONTINUE;
+ case C_DOWN:
+ case C_MOVE:
+ case C_UP:
+ if (MyGetKeyState()&WKEY_CTRL) {
+ commandContext = (void*) 1; //Just end points
+ CmdMoveDescription( action, pos );
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ elevTrk = NULL;
return C_CONTINUE;
}
+ /*no break*/
+ case C_LCLICK:
+ ;
+ p0= pos;
+ if ((trk0 = OnTrack( &p0, TRUE, TRUE )) == NULL) {
+ wHide(elevW);
+ elevTrk = NULL;
+ InfoMessage( _("Click on end, +Shift to split, +Ctrl to move description") );
+ } else {
+ ep0 = PickEndPoint( p0, trk0 );
+ if (IsClose(FindDistance(GetTrkEndPos(trk0,ep0),pos))) {
+ InfoMessage( _("Point selected!") );
+ ElevSelect( trk0, ep0 );
+ } else if ( (MyGetKeyState()&WKEY_SHIFT) ) {
+ UndoStart( _("Split track"), "SplitTrack( T%d[%d] )", GetTrkIndex(trk0), ep0 );
+ oldTrackCount = trackCount;
+ if (!QueryTrack(trk0,Q_IS_TURNOUT) &&
+ !SplitTrack( trk0, p0, ep0, &trk1, FALSE ))
+ return C_CONTINUE;
+ InfoMessage( _("Track split!") );
+ ElevSelect( trk0, ep0 );
+ UndoEnd();
+ elevUndo = FALSE;
+ }
+ }
+ DYNARR_RESET(trkSeg_t,anchors_da);
return C_CONTINUE;
case C_OK:
DoElevDone(NULL);
+ InfoMessage( "" );
return C_TERMINATE;
case C_CANCEL:
- HilightElevations( FALSE );
- HilightSelectedEndPt( FALSE, elevTrk, elevEp );
elevTrk = NULL;
wHide( elevW );
+ InfoMessage( "" );
return C_TERMINATE;
case C_REDRAW:
DoElevHilight( NULL );
HilightSelectedEndPt( TRUE, elevTrk, elevEp );
+ if (anchors_da.cnt)
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
+ CmdMoveDescription( action, pos );
return C_CONTINUE;
}
return C_CONTINUE;
@@ -469,6 +511,6 @@ static STATUS_T CmdElevation( wAction_t action, coOrd pos )
EXPORT void InitCmdElevation( wMenu_p menu )
{
ParamRegister( &elevationPG );
- AddMenuButton( menu, CmdElevation, "cmdElevation", _("Elevation"), wIconCreatePixMap(elev_xpm), LEVEL0_50, IC_POPUP|IC_LCLICK, ACCL_ELEVATION, NULL );
+ AddMenuButton( menu, CmdElevation, "cmdElevation", _("Elevation"), wIconCreatePixMap(elev_xpm), LEVEL0_50, IC_POPUP|IC_LCLICK|IC_RCLICK|IC_WANT_MOVE, ACCL_ELEVATION, NULL );
}
diff --git a/app/bin/cgroup.c b/app/bin/cgroup.c
index 0094564..1183e76 100644
--- a/app/bin/cgroup.c
+++ b/app/bin/cgroup.c
@@ -472,11 +472,12 @@ LOG( log_group, 1, ( " EP%d = [%0.3f %0.3f] A%0.3f T%d.%d\n", ep, epp->pos.x, ep
Rotate( &orig, zero, xx->angle );
orig.x = xx->orig.x - orig.x;
orig.y = xx->orig.y - orig.y;
- trk1 = NewCompound( T_TURNOUT, 0, orig, xx->angle, xx->title, tempEndPts_da.cnt-epCnt1, &tempEndPts(epCnt1), pathPtr_da.cnt, &pathPtr(0), tempSegs_da.cnt, &tempSegs(0) );
+ trk1 = NewCompound( T_TURNOUT, 0, orig, xx->angle, xx->title, tempEndPts_da.cnt-epCnt1, &tempEndPts(epCnt1), NULL, pathPtr_da.cnt, &pathPtr(0), tempSegs_da.cnt, &tempSegs(0) );
xx1 = GetTrkExtraData(trk1);
xx1->ungrouped = TRUE;
SetTrkVisible( trk1, TRUE );
+ SetTrkNoTies( trk1, FALSE );
SetTrkBits( trk1, TB_SELECTED );
for ( segInx=0; segInx<segCnt; segInx++ ) {
if ( refCount(segInx) == inx ) {
@@ -608,19 +609,25 @@ EXPORT void DoUngroup( void )
static drawCmd_t groupD = {
- NULL, &tempSegDrawFuncs, DC_GROUP, 1, 0.0, {0.0, 0.0}, {0.0, 0.0}, Pix2CoOrd, CoOrd2Pix };
+ NULL, &tempSegDrawFuncs, DC_SEGTRACK, 1, 0.0, {0.0, 0.0}, {0.0, 0.0}, Pix2CoOrd, CoOrd2Pix };
static long groupSegCnt;
static long groupReplace;
+static double groupOriginX;
+static double groupOriginY;
char * groupReplaceLabels[] = { N_("Replace with new group?"), NULL };
static wWin_p groupW;
static paramIntegerRange_t r0_999999 = { 0, 999999 };
+static paramFloatRange_t r_1000_1000 = { -1000.0, 1000.0, 80 };
static paramData_t groupPLs[] = {
/*0*/ { PD_STRING, groupManuf, "manuf", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)350, N_("Manufacturer"), 0, 0, sizeof(groupManuf)},
/*1*/ { PD_STRING, groupDesc, "desc", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)230, N_("Description"), 0, 0, sizeof(groupDesc)},
/*2*/ { PD_STRING, groupPartno, "partno", PDO_NOPREF|PDO_DLGHORZ|PDO_DLGIGNORELABELWIDTH|PDO_STRINGLIMITLENGTH, (void*)100, N_("#"), 0, 0, sizeof(groupPartno)},
/*3*/ { PD_LONG, &groupSegCnt, "segcnt", PDO_NOPREF, &r0_999999, N_("# Segments"), BO_READONLY },
-/*4*/ { PD_TOGGLE, &groupReplace, "replace", 0, groupReplaceLabels, "", BC_HORZ|BC_NOBORDER } };
+#define I_GROUP_ORIGIN_OFFSET 4 /* Need to change if add above */
+/*4*/ { PD_FLOAT, &groupOriginX, "orig", PDO_DIM, &r_1000_1000, N_("Offset X,Y:")},
+/*5*/ { PD_FLOAT, &groupOriginY, "origy",PDO_DIM | PDO_DLGHORZ, &r_1000_1000, ""},
+/*6*/ { PD_TOGGLE, &groupReplace, "replace", 0, groupReplaceLabels, "", BC_HORZ|BC_NOBORDER } };
static paramGroup_t groupPG = { "group", 0, groupPLs, sizeof groupPLs/sizeof groupPLs[0] };
@@ -652,18 +659,14 @@ static dynArr_t pathElem_da;
static int pathElemStart;
-static BOOL_T CheckTurnoutEndPoint(
- trkSeg_p segs,
- coOrd pos,
- int end )
-{
- coOrd pos1;
- DIST_T d;
- pos1 = GetSegEndPt( segs, end, FALSE, NULL );
- d = FindDistance( pos, pos1 );
- return ( d < connectDistance );
-}
-
+/*
+ * Find sub-path that connects the 2 EPs for the given track
+ *
+ * \param trk IN Track
+ * \param ep1, ep2 IN EndPt index
+ * \param BOOL_T *flip OUT whether path is flipped
+ * \return sub-path that connects the 2 EPs
+ */
static char * FindPathBtwEP(
track_p trk,
EPINX_T ep1,
@@ -671,12 +674,11 @@ static char * FindPathBtwEP(
BOOL_T * flip )
{
struct extraData * xx = GetTrkExtraData( trk );
- char * cp, *cp0;
- int epN;
- coOrd pos1, pos2;
- int segInx;
- EPINX_T segEP;
+ char * cp;
+ coOrd trkPos[2];
+
+ LOG( log_group, 3, (" FindPathBtwEP: T%d .%d .%d = ", trk?GetTrkIndex(trk):-1, ep1, ep2 ));
if ( GetTrkType(trk) != T_TURNOUT ) {
if ( ep1+ep2 != 1 )
AbortProg( "findPathBtwEP" );
@@ -685,40 +687,63 @@ static char * FindPathBtwEP(
cp = CreateSegPathList(trk); // Make path
LOG( log_group, 2, ( " Group: Cornu path:%s \n", cp ) )
} else cp = "\1\0\0"; //One segment (but could be a Bezier)
+ LOG( log_group, 3, (" Flip:%s Path= Seg=%d-\n", *flip?"T":"F", *cp ) );
return cp;
}
cp = (char *)xx->paths;
- pos1 = GetTrkEndPos(trk,ep1);
- Rotate( &pos1, xx->orig, -xx->angle );
- pos1.x -= xx->orig.x;
- pos1.y -= xx->orig.y;
- pos2 = GetTrkEndPos(trk,ep2);
- Rotate( &pos2, xx->orig, -xx->angle );
- pos2.x -= xx->orig.x;
- pos2.y -= xx->orig.y;
+ trkPos[0] = GetTrkEndPos(trk,ep1);
+ Rotate( &trkPos[0], xx->orig, -xx->angle );
+ trkPos[0].x -= xx->orig.x;
+ trkPos[0].y -= xx->orig.y;
+ trkPos[1] = GetTrkEndPos(trk,ep2);
+ Rotate( &trkPos[1], xx->orig, -xx->angle );
+ trkPos[1].x -= xx->orig.x;
+ trkPos[1].y -= xx->orig.y;
+ DIST_T dist = 1000.0;
+ char * path = NULL;
+ char * pName = "Not Found";
while ( cp[0] ) {
- cp += strlen(cp)+1; //Ignore Path Name
+ char * pName1 = cp; // Save path name
+ cp += strlen(cp)+1;
while ( cp[0] ) {
- cp0 = cp;
- epN = -1;
+ int segInx;
+ int segEP;
+ coOrd segPos[2];
+ // Check if this sub-path endpts match the requested endpts
+ char * path1 = cp;
+
+ // get the seg indices for the start and end
GetSegInxEP( cp[0], &segInx, &segEP );
- if ( CheckTurnoutEndPoint( &xx->segs[segInx], pos1, segEP ) )
- epN = 1;
- else if ( CheckTurnoutEndPoint( &xx->segs[segInx], pos2, segEP ) )
- epN = 0;
+ segPos[0] = GetSegEndPt( &xx->segs[segInx], segEP, FALSE, NULL );
cp += strlen(cp);
- if ( epN != -1 ) {
- GetSegInxEP( cp[-1], &segInx, &segEP );
- if ( CheckTurnoutEndPoint( &xx->segs[segInx], epN==0?pos1:pos2, 1-segEP ) ) {
- *flip = epN==0; // If its reversed, set up to be flipped or noted
- return cp0; //Found path between EPs
+ GetSegInxEP( cp[-1], &segInx, &segEP );
+ segPos[1] = GetSegEndPt( &xx->segs[segInx], 1-segEP, FALSE, NULL );
+
+ // Find the closest seg end
+ for ( int inx = 0; inx<2; inx++ ) {
+ // Check 1st end
+ DIST_T dist1 = FindDistance( trkPos[0], segPos[inx] );
+ if ( dist1 < connectDistance && dist1 < dist ) {
+ // Closest so far, Check 2nd end
+ DIST_T dist2 = FindDistance( trkPos[1], segPos[1-inx] );
+ if ( dist2 > dist1 )
+ // 2nd end is further away
+ dist1 = dist2;
+ if ( dist1 < connectDistance && dist1 < dist ) {
+ // both ends are closest
+ dist = dist1;
+ path = path1;
+ pName = pName1;
+ *flip = (inx==1);
+ }
}
}
cp++;
}
cp++;
}
- return NULL;
+LOG( log_group, 3, (" %s: %d..%d Flip:%s\n", pName, path?path[0]:-1, path?path[strlen(path)-1]:-1, *flip?"T":"F" ) );
+ return path;
}
@@ -754,7 +779,7 @@ static int GroupShortestPathFunc(
return -1;
case SPTC_ADD_TRK:
-if (log_shortPath<=0||logTable(log_shortPath).level<4) LOG( log_group, 2, ( " T%d[%d]\n", GetTrkIndex(trk), ep2 ) )
+ LOG( log_group, 4, ( " Add T%d[%d]\n", GetTrkIndex(trk), ep2 ) )
DYNARR_APPEND( pathElem_t, pathElem_da, 10 );
ppp = &pathElem(pathElem_da.cnt-1);
for ( inx=0; inx<groupTrk_da.cnt; inx++ ) {
@@ -793,7 +818,7 @@ if (log_shortPath<=0||logTable(log_shortPath).level<4) LOG( log_group, 2, ( "
}
}
if ( ep1<0 || ep2<0 ) {
-LOG( log_group, 2, ( " Remove: ep not found\n" ) )
+LOG( log_group, 4, ( " Remove: ep not found\n" ) )
pathElem_da.cnt = pathElemStart;
return 0;
}
@@ -801,7 +826,7 @@ LOG( log_group, 2, ( " Remove: ep not found\n" ) )
pp = &path(inx);
if ( ( ep1 < 0 || ( pp->ep1 == ep1 || pp->ep2 == ep1 ) ) &&
( ep2 < 0 || ( pp->ep1 == ep2 || pp->ep2 == ep2 ) ) ) {
-LOG( log_group, 2, ( " Remove: duplicate path P%d\n", inx ) )
+LOG( log_group, 4, ( " Remove: duplicate path P%d\n", inx ) )
pathElem_da.cnt = pathElemStart;
return 0;
}
@@ -814,7 +839,7 @@ LOG( log_group, 2, ( " Remove: duplicate path P%d\n", inx ) )
pp->ep1 = ep1;
pp->ep2 = ep2;
pathElemStart = pathElem_da.cnt;
-LOG( log_group, 2, ( " Keep\n" ) )
+LOG( log_group, 4, ( " Keep\n" ) )
return 0;
case SPTC_IGNNXTTRK:
@@ -917,6 +942,87 @@ static BOOL_T CheckForBumper(
return TRUE;
}
+typedef struct {
+ int inx;
+ wBool_t track;
+} segInMap_t;
+static dynArr_t segInMap_da;
+#define segInMap(N) DYNARR_N( segInMap_t, segInMap_da, N)
+
+void AddToSegMap(int inx,wBool_t track) {
+ DYNARR_APPEND(segInMap_t,segInMap_da,10);
+ DYNARR_LAST(segInMap_t,segInMap_da).inx = inx;
+ DYNARR_LAST(segInMap_t,segInMap_da).track = track;
+}
+
+void AddSegsToSegMap(int start, int end, wBool_t track) {
+ for (int i = start; i<= end; i++) {
+ AddToSegMap(i,track);
+ }
+}
+
+static dynArr_t trackSegs_da;
+#define trackSegs(N) DYNARR_N( trkSeg_t, trackSegs_da, N )
+
+
+trkSeg_p GetSegFromSegMap(int index) {
+ if (DYNARR_N( segInMap_t, segInMap_da, index).track) {
+ return &DYNARR_N(trkSeg_t,trackSegs_da,DYNARR_N( segInMap_t, segInMap_da, index).inx);
+ } else
+ return &DYNARR_N(trkSeg_t,tempSegs_da,DYNARR_N( segInMap_t, segInMap_da, index).inx);
+}
+
+static dynArr_t outputSegs_da;
+#define outputSegs(N) DYNARR_N( trkSeg_t, outputSegs_da, N)
+
+static void LogSeg(
+ trkSeg_p segP )
+{
+ if ( segP == NULL ) {
+ LogPrintf( "<NULL>\n" );
+ return;
+ }
+ LogPrintf( "%c: ", segP->type );
+ switch ( segP->type ) {
+ case SEG_STRTRK:
+ case SEG_STRLIN:
+ case SEG_DIMLIN:
+ case SEG_BENCH:
+ case SEG_TBLEDGE:
+ LogPrintf( "[ %0.3f %0.3f ] [ %0.3f %0.3f ]\n",
+ segP->u.l.pos[0].x, segP->u.l.pos[0].y,
+ segP->u.l.pos[1].x, segP->u.l.pos[1].y );
+ break;
+ case SEG_CRVLIN:
+ case SEG_CRVTRK:
+ LogPrintf( "R:%0.3f [ %0.3f %0.3f } A0:%0.3f A1:%0.3f\n",
+ segP->u.c.radius,
+ segP->u.c.center.x, segP->u.c.center.y,
+ segP->u.c.a0, segP->u.c.a1 );
+ break;
+ default:
+ LogPrintf( "%c:\n", segP->type );
+ }
+}
+/*
+ * GroupOk: create a TURNOUT or STRUCTURE from the selected objects
+ * 1 - Add selected tracks to groupTrk[]
+ * - Add each group trk's segments to trackSeg[] or tempSegs[]
+ * - Add all segs to segInMap[]
+ * - if no track segments goto step 9
+ * 2 - Collect boundary endPts and sort them in tempEndPts[]
+ * 3 - Find shortest path between all endPts (if it exists)
+ * - For each track we add to the shortest path tree
+ * capture the sub-path elements (FindPathBtwEP) in pathElem[]
+ * 4 - Flip tracks so sub-path elements match up
+ * 5 - Create conflict map
+ * 6 - Flip paths to minimize the number of flipped segments
+ * 7 - Build the path ('P') string
+ * 8 - Build segment list, adjust endPts in tempEndPts[]
+ * 9 - create new TURNOUT/STRUCTURE definition
+ * 10 - write defn to xtrkcad.cus
+ * 11 - optionally replace grouped tracks with new defn
+ */
static void GroupOk( void * junk )
{
@@ -925,7 +1031,6 @@ static void GroupOk( void * junk )
int inx;
EPINX_T ep, epCnt, epN;
coOrd orig, size;
- long oldOptions;
FILE * f = NULL;
BOOL_T rc = TRUE;
track_p trk, trk1;
@@ -937,17 +1042,7 @@ static void GroupOk( void * junk )
ANGLE_T angle, angleN;
pathElem_t pathElemTemp;
char * cp=NULL;
-#ifdef SEGMAP
- pathElem_p ppp1, ppp2;
- int segInx1, segInx2;
- coOrd pos1, pos2;
- static dynArr_t segMap_da;
-#define segMap(I,J) DYNARR_N( char, segMap_da, (2*(I)+0)*trackSegs_da.cnt+(J) )
-#define segAcc(I,J) DYNARR_N( char, segMap_da, (2*(I)+1)*trackSegs_da.cnt+(J) )
-#define segSum(I,J) DYNARR_N( char, segMap_da, (2*(groupTrk_da.cnt)+0)*trackSegs_da.cnt+(J) )
-#endif
- static dynArr_t trackSegs_da;
-#define trackSegs(N) DYNARR_N( trkSeg_t, trackSegs_da, N )
+
trkSeg_p segPtr;
int segCnt;
static dynArr_t conflictMap_da;
@@ -965,9 +1060,6 @@ static void GroupOk( void * junk )
signed char pathChar;
char *oldLocale = NULL;
-#ifdef SEGMAP
- DYNARR_RESET( char, segMap_da );
-#endif
DYNARR_RESET( trkSeg_t, trackSegs_da );
DYNARR_RESET( trkSeg_t, tempSegs_da );
DYNARR_RESET( groupTrk_t, groupTrk_da );
@@ -976,6 +1068,8 @@ static void GroupOk( void * junk )
DYNARR_RESET( trkEndPt_t, tempEndPts_da );
DYNARR_RESET( char, pathPtr_da );
+ DYNARR_RESET( segInMap_t, segInMap_da);
+
ParamUpdate( &groupPG );
if ( groupManuf[0]==0 || groupDesc[0]==0 || groupPartno[0]==0 ) {
NoticeMessage2( 0, MSG_GROUP_NONBLANK, _("Ok"), NULL );
@@ -991,9 +1085,10 @@ static void GroupOk( void * junk )
wDrawDelayUpdate( mainD.d, TRUE );
/*
- * Collect tracks
+ * 1: Collect tracks
*/
trk = NULL;
+ int InInx = -1;
while ( TrackIterate( &trk ) ) {
if ( GetTrkSelected( trk ) ) {
if ( IsTrack(trk) ) {
@@ -1008,41 +1103,82 @@ static void GroupOk( void * junk )
if ( IsSegTrack(segPtr) ) {
DYNARR_APPEND( trkSeg_t, trackSegs_da, 10 );
trackSegs(trackSegs_da.cnt-1) = *segPtr;
+
+ AddToSegMap(trackSegs_da.cnt-1,TRUE); /* Single Track Seg - Note no Cornu*/
+
RotateSegs( 1, &trackSegs(trackSegs_da.cnt-1), zero, xx->angle );
MoveSegs( 1, &trackSegs(trackSegs_da.cnt-1), xx->orig );
+
} else {
+ int start = tempSegs_da.cnt;
DrawSegs( &groupD, xx->orig, xx->angle, segPtr, 1, trackGauge, wDrawColorBlack );
+
+ AddSegsToSegMap(start,tempSegs_da.cnt-1,FALSE); /* Multiple Non-Track Segs */
}
}
} else if (GetTrkType(trk) == T_BEZIER || GetTrkType(trk) == T_BZRLIN ) {
DYNARR_APPEND(trkSeg_t, trackSegs_da, 10);
segPtr = &trackSegs(trackSegs_da.cnt-1);
+
GetBezierSegmentFromTrack(trk,segPtr);
+
+ AddToSegMap(trackSegs_da.cnt-1,TRUE); // Add Single Bezier Track
+
} else if (GetTrkType(trk) == T_CORNU) {
- GetBezierSegmentsFromCornu(trk,&trackSegs_da); //Only give back Bezier - cant be undone
+
+ int start = trackSegs_da.cnt;
+
+ GetBezierSegmentsFromCornu(trk,&trackSegs_da,TRUE); //Only give back Bezier - cant be undone
+
+ AddSegsToSegMap(start,trackSegs_da.cnt-1,TRUE); /* Add Multiple Track Segs */
+
} else {
segCnt = tempSegs_da.cnt;
- oldOptions = groupD.options;
- groupD.options |= (DC_QUICK|DC_SIMPLE|DC_SEGTRACK);
DrawTrack( trk, &groupD, wDrawColorBlack );
- groupD.options = oldOptions;
DYNARR_APPEND( trkSeg_t, trackSegs_da, 10 );
segPtr = &trackSegs(trackSegs_da.cnt-1);
*segPtr = tempSegs( segCnt );
+
+ AddToSegMap(trackSegs_da.cnt-1,TRUE); // Add One Track
+
if ( tempSegs_da.cnt != segCnt+1 ||
!IsSegTrack(segPtr) ) {
NoticeMessage2( 0, MSG_CANNOT_GROUP_TRACK, _("Ok"), NULL );
wHide( groupW );
return;
}
+
tempSegs_da.cnt = segCnt;
}
groupP->segEnd = trackSegs_da.cnt-1;
} else {
+ int start = tempSegs_da.cnt;
+
DrawTrack( trk, &groupD, wDrawColorBlack );
+
+ AddSegsToSegMap(start,tempSegs_da.cnt-1,FALSE); /* Multiple Non-Track Segs */
}
}
}
+if ( log_group >= 1 && logTable(log_group).level >= 4 ) {
+ LogPrintf( "Track Segs:\n");
+ for ( int inx = 0; inx < trackSegs_da.cnt; inx++ ) {
+ LogPrintf( " %d: ", inx+1 );
+ LogSeg( &trackSegs(inx) );
+ }
+ LogPrintf( "Other Segs:\n");
+ for ( int inx = 0; inx < tempSegs_da.cnt; inx++ ) {
+ LogPrintf( " %d: ", inx+1 );
+ LogSeg( &tempSegs(inx) );
+ }
+}
+if ( log_group >= 1 && logTable(log_group).level >= 3 ) {
+ LogPrintf( "Combined Segs:\n" );
+ for ( int inx = 0; inx<segInMap_da.cnt; inx++ ) {
+ LogPrintf( "%d: %s X%d - ", inx+1, segInMap(inx).track?"Track":"Other", segInMap(inx).inx );
+ LogSeg( GetSegFromSegMap( inx ) );
+ }
+}
if ( groupTrk_da.cnt>0 ) {
if ( groupTrk_da.cnt > 128 ) {
@@ -1084,6 +1220,17 @@ static void GroupOk( void * junk )
}
}
}
+if ( log_group >= 1 && logTable(log_group).level >= 4 ) {
+ LogPrintf( "EndPts:\n" );
+ for ( int inx=0; inx<tempEndPts_da.cnt; inx++ ) {
+ endPtP = &tempEndPts(inx);
+ LogPrintf( " [ %0.3f %0.3f ] A:%0.3f, T:%d.%d\n",
+ endPtP->pos.x, endPtP->pos.y, endPtP->angle, endPtP->track?GetTrkIndex(endPtP->track):-1, endPtP->index );
+ }
+}
+ /*
+ * 2: Collect EndPts
+ */
if ( tempEndPts_da.cnt <= 0 ) {
NoticeMessage( _("No endpts"), _("Ok"), NULL );
wDrawDelayUpdate( mainD.d, FALSE );
@@ -1140,10 +1287,7 @@ static void GroupOk( void * junk )
qsort( tempEndPts_da.ptr, tempEndPts_da.cnt, sizeof *endPtP, CmpEndPtAngle );
if ( NormalizeAngle( tempEndPts(0).angle - tempEndPts(tempEndPts_da.cnt-1).angle ) >
NormalizeAngle( tempEndPts(1).angle - tempEndPts(0).angle ) ) {
-#ifdef LATER
- if ( endPtAngle-FindAngle(endPtOrig,tempEndPts(tempEndPts_da.cnt-1).pos) >
- FindAngle(endPtOrig,tempEndPts(1).pos)-endPtAngle ) {
-#endif
+
for ( ep=1; ep<(tempEndPts_da.cnt+1)/2; ep++ ) {
trkEndPt_t tempEndPt;
tempEndPt = tempEndPts(ep);
@@ -1151,9 +1295,17 @@ static void GroupOk( void * junk )
tempEndPts(tempEndPts_da.cnt-ep) = tempEndPt;
}
}
+if ( log_group >= 1 && logTable(log_group).level >= 3 ) {
+ LogPrintf( "Sorted EndPts:\n" );
+ for ( int inx=0; inx<tempEndPts_da.cnt; inx++ ) {
+ endPtP = &tempEndPts(inx);
+ LogPrintf( " [ %0.3f %0.3f ] A:%0.3f, T:%d.%d\n",
+ endPtP->pos.x, endPtP->pos.y, endPtP->angle, endPtP->track?GetTrkIndex(endPtP->track):-1, endPtP->index );
+ }
+}
/*
- * Find shortest Paths
+ * 3: Find shortest Paths
*/
for ( inx=0; inx<groupTrk_da.cnt; inx++ ) {
trk = groupTrk(inx).trk;
@@ -1162,13 +1314,37 @@ static void GroupOk( void * junk )
trk1 = GetTrkEndTrk(trk,ep);
if ( trk1 == NULL || !GetTrkSelected(trk1) ) {
/* boundary EP */
+ LOG( log_group, 3, ("FindShortPath: T%d.%d\n", GetTrkIndex(trk), ep ) );
rc = FindShortestPath( trk, ep, FALSE, GroupShortestPathFunc, NULL );
}
}
}
-
+if ( log_group >= 1 && logTable(log_group).level >= 3 ) {
+ LogPrintf( "Shortest path:\n Group Tracks\n" );
+ for ( int inx=0; inx<groupTrk_da.cnt; inx++ ) {
+ groupTrk_p gtp = &groupTrk(inx);
+ LogPrintf( " %d: T%d S%d-%d\n", inx, GetTrkIndex( gtp->trk ), gtp->segStart+1, gtp->segEnd+1 );
+ }
+ LogPrintf( " Path Elem\n" );
+ for ( int inx=0; inx<pathElem_da.cnt; inx++ ) {
+ ppp = &pathElem(inx);
+ LogPrintf( " %d: GTx: %d, EP: %d %d, F:%s, P:",
+ inx, ppp->groupInx, ppp->ep1, ppp->ep2, ppp->flip?"T":"F" );
+ for ( PATHPTR_T cp = ppp->path; cp[0] || cp[1]; cp++ ) {
+ LogPrintf( " %d", *cp );
+ }
+ LogPrintf( " 0\n" );
+ }
+ LogPrintf( " Path\n" );
+ for ( int inx=0; inx<path_da.cnt; inx++ ) {
+ path_p pp = &path(inx);
+ LogPrintf( " %d: PE: %d-%d, EP: %d-%d, Conf: %d, InGrp: %s, Done: %s\n",
+ inx, pp->pathElemStart, pp->pathElemEnd, pp->ep1, pp->ep2,
+ pp->conflicts, pp->inGroup?"T":"F", pp->done?"T":"F" );
+ }
+}
/*
- * Flip paths so they align
+ * 4: Flip paths so they align
*/
if ( path_da.cnt == 0 ) {
NoticeMessage( _("No paths"), _("Ok"), NULL );
@@ -1226,11 +1402,11 @@ LOG( log_group, 1, ( "P%d aligns flipped with P%d\n", pinx, pinx2 ) );
path(inx).done = TRUE;
}
}
-if ( log_group >= 1 && logTable(log_group).level > log_group ) {
+if ( log_group >= 1 && logTable(log_group).level >= 1 ) {
LogPrintf( "Group Paths\n" );
for ( pinx=0; pinx<path_da.cnt; pinx++ ) {
pp = &path(pinx);
- LogPrintf( "P%2d:%d.%d ", pinx, pp->ep1, pp->ep2 );
+ LogPrintf( " P%2d:%d.%d ", pinx, pp->ep1, pp->ep2 );
for ( pinx2=pp->pathElemEnd; pinx2>=pp->pathElemStart; pinx2-- ) {
ppp = &pathElem(pinx2);
LogPrintf( " %sT%d:%d.%d", ppp->flip?"-":"", GetTrkIndex(groupTrk(ppp->groupInx).trk), ppp->ep1, ppp->ep2 );
@@ -1239,62 +1415,9 @@ if ( log_group >= 1 && logTable(log_group).level > log_group ) {
}
}
-#ifdef SEGMAP
- DYNARR_SET( char, segMap_da, 2 * trackSegs_da.cnt * path_da.cnt + 2 );
- memset( segMap_da.ptr, 0, segMap_da.max * sizeof segMap(0,0) );
- for ( inx=0; inx<path_da.cnt; inx++ ) {
- pp = &path(inx);
- for ( inx2=pp->pathElem_da.cnt-1; inx2>=0; inx2-- ) {
- ppp = &pathElem(pp->pathElemStart+inx2);
- groupP = &groupTrk(ppp->groupInx);
- if ( GetTrkEndPtCnt(groupP->trk) == 2 ) {
- segMap(inx,groupP->segStart) = 1;
- continue;
- }
- cp = ppp->path;
- if ( cp == NULL )
- continue;
- segInx1 = cp[0]-1;
- for ( ; *cp; cp++ )
- segMap(inx,groupP->segInx+cp[0]-1) = 1;
- segInx2 = cp[-1]-1;
- pos1 = GetSegEndPt( &trackSegs(groupP->segInx+segInx1), ppp->flip?1:0, FALSE, NULL );
- pos2 = GetSegEndPt( &trackSegs(groupP->segInx+segInx2), ppp->flip?0:1, FALSE, NULL );
- for ( inx3=0; inx3<groupP->segCnt; inx3++ ) {
- if ( inx3 == segInx1 || inx3 == segInx2 ) continue;
- if ( segMap(inx,groupP->segInx+inx3) != 0 ) continue;
- if ( CheckTurnoutEndPoint( &trackSegs(groupP->segInx+inx3), pos1, 0 ) )
- segMap(inx,inx3) = 2;
- else if ( CheckTurnoutEndPoint( &trackSegs(groupP->segInx+inx3), pos2, 0 ) )
- segMap(inx,groupP->segInx+inx3) = 2;
- }
- }
- }
-if ( log_group >= 1 && logTable(log_group).level > log_group ) {
- LogPrintf( "Path to Segment Map\n ");
- for ( inx=0; inx<groupTrk_da.cnt; inx++ ) {
- groupP = &groupTrk(inx);
- LogPrintf( "%2d", GetTrkIndex(groupP->trk) );
- for ( inx2=1; inx2<groupP->segCnt; inx2++ ) LogPrintf( "--" );
- }
- LogPrintf( "\n " );
- for ( inx=0; inx<groupTrk_da.cnt; inx++ ) {
- groupP = &groupTrk(inx);
- for ( inx2=0; inx2<groupP->segCnt; inx2++ )
- LogPrintf( "%2d", inx2+1 );
- }
- LogPrintf( "\n" );
- for ( inx=0; inx<path_da.cnt; inx++ ) {
- LogPrintf( "%2d ", inx );
- for ( inx2=0; inx2<trackSegs_da.cnt; inx2++ )
- LogPrintf( "%2d", segMap(inx,inx2) );
- LogPrintf("\n");
- }
-}
-#endif
/*
- * Create Conflict Map
+ * 5: Create Conflict Map
*/
DYNARR_SET( int, conflictMap_da, path_da.cnt*path_da.cnt );
memset( conflictMap_da.ptr, 0, conflictMap_da.max * sizeof conflictMap(0,0) );
@@ -1353,42 +1476,18 @@ if ( log_group >= 1 && logTable(log_group).level > log_group ) {
}
}
-if ( log_group >= 1 && logTable(log_group).level > log_group ) {
+if ( log_group >= 1 && logTable(log_group).level >= 3 ) {
LogPrintf( "Group Map\n");
for ( pinx=0; pinx<groupCnt; pinx++ ) {
LogPrintf( "G%d:", pinx );
for ( ginx=0; groupMap(pinx,ginx) >= 0; ginx++ )
- LogPrintf( " %d", groupMap(pinx,ginx) );
+ LogPrintf( " %d: %d", ginx, groupMap(pinx,ginx) );
LogPrintf( "\n" );
}
}
-#ifdef SEGMAP
- for ( inx=0; inx<path_da.cnt; inx++ ) {
- for ( inx2=0; inx2<tempSegs_da.cnt; inx2++ ) {
- groupInx = 0;
- memset( &SegTotal(0), 0, tempSegs_da.cnt * sizeof SegAcc(0) );
- while (1) {
- memcpy( &SegAcc(0), &SegTotal(0), tempSegs_da.cnt * sizeof SegAcc(0) );
- collision = FALSE;
- for ( inx=0; inx<path_da.cnt; inx++ ) {
- pp = path(0);
- if ( pp->groupInx < 0 ) continue;
- for ( inx2=0; inx2<tempSegs_da.cnt; inx2++ ) {
- if ( !segMap(inx,inx2) ) continue;
- if ( SegAcc(inx2) ) {
- collision = TRUE;
- break;
- }
- SegAcc(inx2) = TRUE;
- }
- }
- if ( collision )
- }
-#endif
-
/*
- * Count number of times each segment is used as flipped
+ * 6: Count number of times each segment is used as flipped
*/
DYNARR_SET( int, conflictMap_da, trackSegs_da.cnt );
memset( &segFlip(0), 0, trackSegs_da.cnt * sizeof segFlip(0) );
@@ -1414,15 +1513,17 @@ if ( log_group >= 1 && logTable(log_group).level > log_group ) {
/*
* Flip each segment that is used as flipped more than not
*/
+LOG( log_group, 3, ( "Flipping Segments:" ) );
for ( pinx=0; pinx<trackSegs_da.cnt; pinx++ ) {
if ( segFlip(pinx) < 0 ) {
-LOG( log_group, 1, ( "Flipping Segment %d\n", pinx+1 ) );
SegProc( SEGPROC_FLIP, &trackSegs(pinx), NULL );
+LOG( log_group, 3, ( " %d", pinx ) );
}
}
+LOG( log_group, 3, ( "\n" ) );
/*
- * Output Path lists
+ * 7: Output Path lists
*/
for ( pinx=0; pinx<groupCnt; pinx++ ) {
sprintf( message, "P%d", pinx );
@@ -1431,8 +1532,10 @@ LOG( log_group, 1, ( "Flipping Segment %d\n", pinx+1 ) );
memcpy( &pathPtr(inx), message, pathPtr_da.cnt-inx );
for ( ginx=0; groupMap(pinx,ginx) >= 0; ginx++ ) {
pp = &path(groupMap(pinx,ginx));
+ LOG( log_group, 3, (" Group Map(%d, %d): elem %d-%d, EP %d %d, Conflicts %d, inGrp %d, Done: %s\n", pinx, ginx, pp->pathElemStart, pp->pathElemEnd, pp->ep1, pp->ep2, pp->conflicts, pp->inGroup, pp->done?"T":"F" ) );
for ( pinx2=pp->pathElemEnd; pinx2>=pp->pathElemStart; pinx2-- ) {
ppp = &pathElem( pinx2 );
+ LOG( log_group, 3, (" PE %d: GI %d, EP %d %d, Flip %d =", pinx2, ppp->groupInx, ppp->ep1, ppp->ep2, ppp->flip ));
groupP = &groupTrk( ppp->groupInx );
path = ppp->path;
flip = ppp->flip;
@@ -1453,7 +1556,9 @@ LOG( log_group, 1, ( "Flipping Segment %d\n", pinx+1 ) );
if ( flip1 ) pathChar = - pathChar;
pathPtr(pathPtr_da.cnt-1) = pathChar;
path += (flip?-1:1);
+ LOG( log_group, 3, (" %d", pathChar ) );
}
+ LOG( log_group, 3, ("\n") );
}
DYNARR_APPEND( char, pathPtr_da, 10 );
pathPtr(pathPtr_da.cnt-1) = 0;
@@ -1468,43 +1573,49 @@ LOG( log_group, 1, ( "Flipping Segment %d\n", pinx+1 ) );
groupSimpleTurnout:
/*
- * Copy and Reorigin Segments
+ * 8: Copy and Reorigin Segments - Start by putting them out in the original order
*/
- if ( tempSegs_da.cnt > 0 ) {
- inx = trackSegs_da.cnt;
- DYNARR_SET( trkSeg_t, trackSegs_da, trackSegs_da.cnt+tempSegs_da.cnt );
- memcpy( &trackSegs(inx), tempSegs_da.ptr, tempSegs_da.cnt*sizeof trackSegs(0) );
- CloneFilledDraw( tempSegs_da.cnt, &trackSegs(inx), TRUE );
+
+
+ DYNARR_RESET(trkSeg_t, outputSegs_da);
+ for (int i=0; i<segInMap_da.cnt;i++) {
+ DYNARR_APPEND(trkSeg_t,outputSegs_da,10);
+ trkSeg_p from_p = GetSegFromSegMap(i);
+ trkSeg_p to_p = &DYNARR_LAST(trkSeg_t, outputSegs_da);
+ memcpy((void *)to_p,(void *)from_p,sizeof( trkSeg_t));
}
- GetSegBounds( zero, 0, trackSegs_da.cnt, &trackSegs(0), &orig, &size );
+ CloneFilledDraw( outputSegs_da.cnt, outputSegs_da.ptr, FALSE );
+
+ GetSegBounds( zero, 0, outputSegs_da.cnt, &outputSegs(0), &orig, &size );
orig.x = - tempEndPts(0).pos.x;
orig.y = - tempEndPts(0).pos.y;
- MoveSegs( trackSegs_da.cnt, &trackSegs(0), orig );
+ MoveSegs( outputSegs_da.cnt, &outputSegs(0), orig );
for ( ep=0; ep<tempEndPts_da.cnt; ep++ ) {
tempEndPts(ep).pos.x += orig.x;
tempEndPts(ep).pos.y += orig.y;
}
/*
- * Final: create new definition
+ * 9: Final: create new definition
+ */
+
+ CheckPaths( outputSegs_da.cnt, &outputSegs(0), path );
+
+ to = CreateNewTurnout( curScaleName, groupTitle, outputSegs_da.cnt, &outputSegs(0), pathLen, path, tempEndPts_da.cnt, &tempEndPts(0), NULL, TRUE );
+
+ /*
+ * 10: Write defn to xtrkcad.cus
*/
- CheckPaths( trackSegs_da.cnt, &trackSegs(0), path );
- to = CreateNewTurnout( curScaleName, groupTitle, trackSegs_da.cnt, &trackSegs(0), pathLen, path, tempEndPts_da.cnt, &tempEndPts(0), TRUE );
-#ifdef LATER
- if ( xx )
- to->customInfo = xx->customInfo;
-#endif
f = OpenCustom("a");
if (f && to) {
oldLocale = SaveLocale("C");
rc &= fprintf( f, "TURNOUT %s \"%s\"\n", curScaleName, PutTitle(to->title) )>0;
-#ifdef LATER
- if ( to->customInfo )
- rc &= fprintf( f, "\tU %s\n", to->customInfo )>0;
-#endif
- rc &= WriteCompoundPathsEndPtsSegs( f, path, trackSegs_da.cnt, &trackSegs(0), tempEndPts_da.cnt, &tempEndPts(0) );
+ rc &= WriteCompoundPathsEndPtsSegs( f, path, outputSegs_da.cnt, &outputSegs(0), tempEndPts_da.cnt, &tempEndPts(0) );
}
if ( groupReplace ) {
+ /*
+ * 11: Replace defn
+ */
UndoStart( _("Group Tracks"), "group" );
orig.x = - orig.x;
orig.y = - orig.y;
@@ -1528,8 +1639,7 @@ groupSimpleTurnout:
trackCount--;
}
}
- trk = NewCompound( T_TURNOUT, 0, orig, 0.0, to->title, tempEndPts_da.cnt, &tempEndPts(0), pathLen, (char *)path, trackSegs_da.cnt, &trackSegs(0) );
- SetTrkVisible( trk, TRUE );
+ trk = NewCompound( T_TURNOUT, 0, orig, 0.0, to->title, tempEndPts_da.cnt, &tempEndPts(0), NULL, pathLen, (char *)path, outputSegs_da.cnt, &outputSegs(0) );
SetTrkVisible( trk, TRUE );
for ( ep=0; ep<tempEndPts_da.cnt; ep++ ) {
@@ -1544,18 +1654,15 @@ groupSimpleTurnout:
} else {
CloneFilledDraw( tempSegs_da.cnt, &tempSegs(0), TRUE );
GetSegBounds( zero, 0, tempSegs_da.cnt, &tempSegs(0), &orig, &size );
- orig.x = - orig.x;
- orig.y = - orig.y;
+
+ orig.x = - orig.x-groupOriginX; //Include orig offset
+ orig.y = - orig.y-groupOriginY;
MoveSegs( tempSegs_da.cnt, &tempSegs(0), orig );
to = CreateNewStructure( curScaleName, groupTitle, tempSegs_da.cnt, &tempSegs(0), TRUE );
f = OpenCustom("a");
if (f && to) {
oldLocale = SaveLocale("C");
rc &= fprintf( f, "STRUCTURE %s \"%s\"\n", curScaleName, PutTitle(groupTitle) )>0;
-#ifdef LATER
- if ( to->customInfo )
- rc &= fprintf( f, "\tU %s\n", to->customInfo )>0;
-#endif
rc &= WriteSegs( f, tempSegs_da.cnt, &tempSegs(0) );
}
if ( groupReplace ) {
@@ -1570,7 +1677,7 @@ groupSimpleTurnout:
}
orig.x = - orig.x;
orig.y = - orig.y;
- trk = NewCompound( T_STRUCTURE, 0, orig, 0.0, groupTitle, 0, NULL, 0, "", tempSegs_da.cnt, &tempSegs(0) );
+ trk = NewCompound( T_STRUCTURE, 0, orig, 0.0, groupTitle, 0, NULL, NULL, 0, "", tempSegs_da.cnt, &tempSegs(0) );
SetTrkVisible( trk, TRUE );
DrawNewTrack( trk );
EnableCommands();
@@ -1594,10 +1701,14 @@ EXPORT void DoGroup( void )
xx = NULL;
groupSegCnt = 0;
groupCompoundCount = 0;
+ groupOriginX = 0.0;
+ groupOriginY = 0.0;
+ BOOL_T isTurnout = FALSE;
while ( TrackIterate( &trk ) ) {
if ( GetTrkSelected( trk ) ) {
trkType = GetTrkType(trk);
+ if ( IsTrack(trk) ) isTurnout = TRUE;
if ( trkType == T_TURNOUT || trkType == T_STRUCTURE ) {
xx = GetTrkExtraData(trk);
groupSegCnt += xx->segCnt;
@@ -1618,6 +1729,18 @@ EXPORT void DoGroup( void )
groupW = ParamCreateDialog( &groupPG, MakeWindowTitle(_("Group Objects")), _("Ok"), GroupOk, wHide, TRUE, NULL, F_BLOCK, NULL );
groupD.dpi = mainD.dpi;
}
+ if (isTurnout) {
+ groupPLs[4].option |= PDO_DLGIGNORE;
+ wControlShow( groupPLs[4].control, FALSE );
+ groupPLs[5].option |= PDO_DLGIGNORE;
+ wControlShow( groupPLs[5].control, FALSE );
+ } else {
+ groupPLs[4].option &= ~PDO_DLGIGNORE;
+ wControlShow( groupPLs[4].control, TRUE );
+ groupPLs[5].option &= ~PDO_DLGIGNORE;
+ wControlShow( groupPLs[5].control, TRUE );
+ }
+
ParamLoadControls( &groupPG );
wShow( groupW );
}
diff --git a/app/bin/chndldto.c b/app/bin/chndldto.c
index fa88398..a0f2d6b 100644
--- a/app/bin/chndldto.c
+++ b/app/bin/chndldto.c
@@ -91,7 +91,6 @@ static STATUS_T CmdHandLaidTurnout( wAction_t action, coOrd pos )
Dhlt.normalP = Dhlt.reverseP = Dhlt.reverseP1 = pos;
Dhlt.normalA = GetAngleAtPoint( Dhlt.normalT, Dhlt.normalP, NULL, NULL );
InfoMessage( _("Drag to set angle") );
- DrawLine( &tempD, Dhlt.reverseP, Dhlt.reverseP1, 0, wDrawColorBlack );
Dhlt.state = 1;
pointC = pointP = pointP1 = reverseC = zero;
return C_CONTINUE;
@@ -102,7 +101,6 @@ static STATUS_T CmdHandLaidTurnout( wAction_t action, coOrd pos )
if (Dhlt.normalT == NULL)
break;
if (Dhlt.state == 1) {
- DrawLine( &tempD, Dhlt.reverseP, Dhlt.reverseP1, 0, wDrawColorBlack );
Dhlt.reverseP1 = pos;
Dhlt.reverseA = FindAngle( Dhlt.reverseP, Dhlt.reverseP1 );
Dhlt.frogA = NormalizeAngle( Dhlt.reverseA - Dhlt.normalA );
@@ -141,10 +139,8 @@ static STATUS_T CmdHandLaidTurnout( wAction_t action, coOrd pos )
Translate( &Dhlt.reverseP, Dhlt.reverseP, Dhlt.normalA+(right?+90:-90), trackGauge );
Translate( &Dhlt.reverseP1, Dhlt.reverseP1, Dhlt.normalA+(right?+90:-90), trackGauge );
}
- DrawLine( &tempD, Dhlt.reverseP, Dhlt.reverseP1, 0, wDrawColorBlack );
return C_CONTINUE;
} else if ( Dhlt.state == 2 ) {
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
tempSegs_da.cnt = 0;
pointP = pos;
if ((pointT = OnTrack( &pointP, TRUE, TRUE )) == NULL)
@@ -273,7 +269,6 @@ PTRACE(( " a2=%0.1f rA1=%0.1f\n", angle2, reverseA1 ))
if (action != C_UP) {
dist = FindDistance( pointP, Dhlt.normalP );
InfoMessage( _("Length = %0.2f Angle = %0.2f Frog# = %0.2f"), dist, Dhlt.frogA, Dhlt.frogNo );
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
return C_CONTINUE;
}
UndoStart( _("Create Hand Laid Turnout"), "Hndldto( T%d[%d] )", GetTrkIndex(pointT), pointEp0 );
@@ -334,7 +329,6 @@ PTRACE(( " a2=%0.1f rA1=%0.1f\n", angle2, reverseA1 ))
DrawTrack( trk, &mainD, wDrawColorBlack );
for (trkpp=trks; *trkpp; trkpp++)
DrawTrack( *trkpp, &mainD, wDrawColorBlack );
- DrawLine( &tempD, Dhlt.reverseP, Dhlt.reverseP1, 0, wDrawColorBlack );
Dhlt.state = 0;
return C_TERMINATE;
@@ -348,12 +342,6 @@ PTRACE(( " a2=%0.1f rA1=%0.1f\n", angle2, reverseA1 ))
return C_CONTINUE;
case C_CANCEL:
- if (Dhlt.state >= 1)
- DrawLine( &tempD, Dhlt.reverseP, Dhlt.reverseP1, 0, wDrawColorBlack );
- if (Dhlt.state >= 2) {
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
- tempSegs_da.cnt = 0;
- }
return C_CONTINUE;
}
@@ -367,5 +355,5 @@ PTRACE(( " a2=%0.1f rA1=%0.1f\n", angle2, reverseA1 ))
EXPORT void InitCmdHandLaidTurnout( wMenu_p menu )
{
- AddMenuButton( menu, CmdHandLaidTurnout, "cmdHandLaidTurnout", _("HandLaidTurnout"), wIconCreatePixMap(hndldto_xpm), LEVEL0_50, IC_STICKY|IC_POPUP2, ACCL_HNDLDTO, NULL );
+ AddMenuButton( menu, CmdHandLaidTurnout, "cmdHandLaidTurnout", _("HandLaidTurnout"), wIconCreatePixMap(hndldto_xpm), LEVEL0_50, IC_STICKY|IC_INITNOTSTICKY|IC_POPUP2, ACCL_HNDLDTO, NULL );
}
diff --git a/app/bin/chotbar.c b/app/bin/chotbar.c
index 31a19ad..0b9a327 100644
--- a/app/bin/chotbar.c
+++ b/app/bin/chotbar.c
@@ -27,6 +27,7 @@
#include "compound.h"
#include "fileio.h"
#include "messages.h"
+#include "ccornu.h"
#include "track.h"
EXPORT DIST_T curBarScale = -1;
@@ -57,7 +58,7 @@ typedef struct {
DIST_T labelW;
coOrd size;
coOrd orig;
- BOOL_T isTrack;
+ BOOL_T isFixed;
void * context;
hotBarProc_t proc;
DIST_T barScale;
@@ -72,12 +73,15 @@ static int hotBarCurrEnds[2] = { -1, -1 };
#define hotBarCurrEnd (hotBarCurrEnds[programMode])
static DIST_T hotBarWidth = 0.0;
-static void HotBarHighlight( int inx )
+static void HotBarHighlight( int inx, DIST_T fixed_x )
{
wPos_t x0;
- if ( inx >= hotBarCurrStart && inx < hotBarCurrEnd ) {
- x0 = (wPos_t)((hotBarMap(inx).x-hotBarMap((int)hotBarCurrStart).x)*hotBarD.dpi);
- wDrawFilledRectangle( hotBarD.d, x0, 0, (wPos_t)(hotBarMap(inx).w*hotBarD.dpi-2), hotBarHeight, wDrawColorBlack, wDrawOptTemp );
+ if ( inx == 0 && hotBarMap_da.cnt>0 && hotBarMap(0).isFixed) {
+ x0 = (wPos_t)0;
+ wDrawFilledRectangle( hotBarD.d, x0, 0, (wPos_t)(hotBarMap(0).w*hotBarD.dpi-2), hotBarHeight, wDrawColorBlack, wDrawOptTransparent );
+ } else if ( inx >= hotBarCurrStart && inx < hotBarCurrEnd ) {
+ x0 = (wPos_t)((hotBarMap(inx).x-hotBarMap((int)hotBarCurrStart).x + (inx>0?fixed_x:0))*hotBarD.dpi);
+ wDrawFilledRectangle( hotBarD.d, x0, 0, (wPos_t)(hotBarMap(inx).w*hotBarD.dpi-2), hotBarHeight, wDrawColorBlack, wDrawOptTransparent );
}
}
@@ -105,11 +109,38 @@ static void RedrawHotBar( wDraw_p dd, void * data, wPos_t w, wPos_t h )
if ( hotBarLabels && !hotBarFp )
hotBarFp = wStandardFont( F_HELV, FALSE, FALSE );
wPos_t textSize = wMessageGetHeight(0L);
+ DIST_T fixed_x = 0.0;
+ if (hotBarCurrStart>0 && hotBarMap_da.cnt>0 && hotBarMap(0).isFixed) { //Do fixed element first - Cornu
+ tbm = &hotBarMap(0);
+ barScale = tbm->barScale;
+ x = 0.0;
+ orig.y = hh/2.0*barScale - tbm->size.y/2.0 - tbm->orig.y;
+ if ( hotBarLabels ) {
+ orig.y += textSize/hotBarD.dpi*barScale;
+ if ( tbm->labelW > tbm->objectW ) {
+ fixed_x = tbm->labelW;
+ x += (tbm->labelW-tbm->objectW)/2;
+ } else fixed_x = tbm->objectW;
+ } else fixed_x = tbm->objectW;
+ x *= barScale;
+ orig.x = x;
+ hotBarD.scale = barScale;
+ hotBarD.size.x = barWidth*barScale;
+ hotBarD.size.y = barHeight*barScale;
+ tbm->proc( HB_DRAW, tbm->context, &hotBarD, &orig );
+ if ( hotBarLabels ) {
+ hotBarD.scale = 1.0;
+ orig.x = 0.0;
+ orig.y = 2.0/hotBarD.dpi; //Draw Label under icon
+ DrawString( &hotBarD, orig, 0.0, tbm->proc( HB_BARTITLE, tbm->context, NULL, NULL ), hotBarFp, hotBarFs, drawColorBlack );
+ }
+
+ }
for ( inx=hotBarCurrStart; inx < hotBarMap_da.cnt; inx++ ) {
tbm = &hotBarMap(inx);
barScale = tbm->barScale;
- x = tbm->x - hotBarMap(hotBarCurrStart).x;
- if ( x + tbm->w > barWidth ) {
+ x = tbm->x - hotBarMap(hotBarCurrStart).x + fixed_x; //Add space for fixed at start
+ if ( x + tbm->w + fixed_x > barWidth ) {
break;
}
orig.y = hh/2.0*barScale - tbm->size.y/2.0 - tbm->orig.y;
@@ -120,6 +151,7 @@ static void RedrawHotBar( wDraw_p dd, void * data, wPos_t w, wPos_t h )
}
}
x *= barScale;
+ x -= tbm->orig.x;
orig.x = x;
hotBarD.scale = barScale;
hotBarD.size.x = barWidth*barScale;
@@ -127,14 +159,15 @@ static void RedrawHotBar( wDraw_p dd, void * data, wPos_t w, wPos_t h )
tbm->proc( HB_DRAW, tbm->context, &hotBarD, &orig );
if ( hotBarLabels ) {
hotBarD.scale = 1.0;
- orig.x = tbm->x - hotBarMap(hotBarCurrStart).x;
+ orig.x = tbm->x - hotBarMap(hotBarCurrStart).x + fixed_x;
orig.y = 2.0/hotBarD.dpi; //Draw Label under icon
DrawString( &hotBarD, orig, 0.0, tbm->proc( HB_BARTITLE, tbm->context, NULL, NULL ), hotBarFp, hotBarFs, drawColorBlack );
}
}
hotBarCurrEnd = inx;
- if (hotBarCurrSelect >= hotBarCurrStart && hotBarCurrSelect < hotBarCurrEnd )
- HotBarHighlight( hotBarCurrSelect );
+ if ((hotBarCurrSelect==0 && hotBarMap_da.cnt>0 && hotBarMap(0).isFixed) ||
+ ((hotBarCurrSelect >= hotBarCurrStart) && (hotBarCurrSelect < hotBarCurrEnd)) )
+ HotBarHighlight( hotBarCurrSelect, fixed_x );
/* else
hotBarCurrSelect = -1;*/
wControlActive( (wControl_p)hotBarRightB, hotBarCurrEnd < hotBarMap_da.cnt );
@@ -223,17 +256,33 @@ static void SelectHotBar( wDraw_p d, void * context, wAction_t action, wPos_t w,
wMenuPopupShow( hotbarPopupM );
return;
}
- x = w/hotBarD.dpi + hotBarMap(hotBarCurrStart).x;
- for ( inx=hotBarCurrStart; inx<hotBarCurrEnd; inx++ ) {
- if ((x >= hotBarMap(inx).x) && //leave spaces between buttons
- (x <= hotBarMap(inx).x + hotBarMap(inx).w )) {
- break;
+ inx = -1;
+ x = hotBarMap(0).x;
+ DIST_T fixed_x = 0.0;
+ if (hotBarCurrStart>0 && hotBarMap_da.cnt>0 && hotBarMap(0).isFixed) {
+ fixed_x = hotBarMap(0).w;
+ x = w/hotBarD.dpi + hotBarMap(0).x;
+ if ( (x>= hotBarMap(0).x) &&
+ (x <=hotBarMap(0).w )) inx = 0; //Match on fixed
+ }
+ if (inx<0){ //NoMatch
+ x = w/hotBarD.dpi + hotBarMap(hotBarCurrStart).x;
+ for ( inx=hotBarCurrStart; inx<hotBarCurrEnd; inx++ ) {
+ if ((x >= hotBarMap(inx).x + fixed_x) && //leave spaces between buttons
+ (x <= hotBarMap(inx).x + hotBarMap(inx).w + fixed_x )) {
+ break;
+ }
}
}
+
if (inx >= hotBarCurrEnd)
return;
tbm = &hotBarMap(inx);
- px = (wPos_t)((tbm->x-hotBarMap(hotBarCurrStart).x)*hotBarD.dpi);
+ if (inx==0) {
+ px = (wPos_t)((tbm->x-hotBarMap(0).x)*hotBarD.dpi);
+ } else {
+ px = (wPos_t)(((tbm->x-hotBarMap(hotBarCurrStart).x)+fixed_x)*hotBarD.dpi);
+ }
px += (wPos_t)(tbm->w*hotBarD.dpi/2);
titleP = tbm->proc( HB_LISTTITLE, tbm->context, NULL, NULL );
px -= wLabelWidth( titleP ) / 2;
@@ -243,12 +292,14 @@ static void SelectHotBar( wDraw_p d, void * context, wAction_t action, wPos_t w,
pos.x = mainD.size.x+mainD.orig.x;
pos.y = mainD.size.y+mainD.orig.y;
if ( hotBarCurrSelect >= 0 ) {
- HotBarHighlight( hotBarCurrSelect );
+ //HotBarHighlight( hotBarCurrSelect );
hotBarCurrSelect = -1;
+ RedrawHotBar(hotBarD.d, NULL, 0, 0 );
}
+
tbm->proc( HB_SELECT, tbm->context, NULL, NULL );
hotBarCurrSelect = inx;
- HotBarHighlight( hotBarCurrSelect );
+ HotBarHighlight( hotBarCurrSelect, fixed_x );
if (recordF) {
fprintf( recordF, "HOTBARSELECT %s\n", tbm->proc( HB_FULLTITLE, tbm->context, NULL, NULL ) );
}
@@ -296,8 +347,9 @@ static void SelectHotBar( wDraw_p d, void * context, wAction_t action, wPos_t w,
EXPORT void HotBarCancel( void )
{
if ( hotBarCurrSelect >= 0 )
- HotBarHighlight( hotBarCurrSelect );
+ //HotBarHighlight( hotBarCurrSelect );
hotBarCurrSelect = -1;
+ RedrawHotBar(hotBarD.d, NULL, 0, 0 );
}
@@ -306,18 +358,23 @@ static BOOL_T HotBarSelectPlayback( char * line )
int inx;
hotBarMap_t * tbm;
while (*line && isspace((unsigned char)*line) ) line++;
+ DIST_T fixed_x = 0;
for ( inx=0; inx<hotBarMap_da.cnt; inx++ ) {
tbm = &hotBarMap(inx);
+ if (inx == 0 && hotBarMap_da.cnt>0 && hotBarMap(0).isFixed) {
+ fixed_x = hotBarMap(0).w;
+ }
if ( strcmp( tbm->proc( HB_FULLTITLE, tbm->context, NULL, NULL ), line) == 0) {
if ( hotBarCurrSelect >= 0 ) {
- HotBarHighlight( hotBarCurrSelect );
+ //HotBarHighlight( hotBarCurrSelect );
+ RedrawHotBar(hotBarD.d, NULL, 0, 0 );
}
hotBarCurrSelect = inx;
if ( hotBarCurrSelect < hotBarCurrStart || hotBarCurrSelect > hotBarCurrEnd ) {
hotBarCurrStart = hotBarCurrSelect;
RedrawHotBar( hotBarD.d, NULL, 0, 0 );
}
- HotBarHighlight( hotBarCurrSelect );
+ HotBarHighlight( hotBarCurrSelect, fixed_x );
hotBarMap(inx).proc( HB_SELECT, hotBarMap(inx).context, NULL, NULL );
FakeDownMouseState();
return TRUE;
@@ -347,6 +404,7 @@ EXPORT void AddHotBarElement(
coOrd size,
coOrd orig,
BOOL_T isTrack,
+ BOOL_T isFixed,
DIST_T barScale,
void * context,
hotBarProc_t proc_p )
@@ -360,10 +418,13 @@ EXPORT void AddHotBarElement(
}
if (barScale <= 0) {
- if (isTrack)
+ if (!isTrack)
+ barScale = size.y/((double)hotBarDrawHeight/hotBarD.dpi);
+ else if (isTrack) {
barScale = (trackGauge>0.1)?trackGauge*24:10;
- else
- barScale = size.y/((double)hotBarDrawHeight/hotBarD.dpi-0.07);
+ if (size.y >= size.x)
+ barScale = size.y/((double)hotBarDrawHeight/hotBarD.dpi);
+ }
}
DYNARR_APPEND( hotBarMap_t, hotBarMap_da, 10 );
tbm = &hotBarMap(hotBarMap_da.cnt-1);
@@ -376,6 +437,7 @@ EXPORT void AddHotBarElement(
tbm->orig = orig;
tbm->proc = proc_p;
tbm->barScale = barScale;
+ tbm->isFixed = isFixed;
tbm->w = tbm->objectW = size.x/barScale + 5.0/hotBarD.dpi;
tbm->labelW = 0;
tbm->x = hotBarWidth;
@@ -409,6 +471,8 @@ static void ChangeHotBar( long changes )
DYNARR_RESET( hotBarMap_t, hotBarMap_da );
curContentsLabel[0] = '\0';
if ( programMode == MODE_DESIGN ) {
+ if (showFlexTrack)
+ AddHotBarCornu();
AddHotBarTurnouts();
AddHotBarStructures();
} else {
@@ -446,6 +510,13 @@ EXPORT void LayoutHotBar( void * redraw )
wWinGetSize( mainW, &winWidth, &winHeight );
hotBarHeight = hotBarDrawHeight;
+ double scaleicon;
+ wPrefGetFloat(PREFSECTION, LARGEICON, &scaleicon, 1.0);
+ if (scaleicon<1.0) scaleicon=1.0;
+ if (scaleicon>2.0) scaleicon=2.0;
+ if (scaleicon>1.0) {
+ hotBarHeight = hotBarHeight*scaleicon;
+ }
if ( hotBarLabels) {
hotBarHeight += wMessageGetHeight(0L);
}
diff --git a/app/bin/cjoin.c b/app/bin/cjoin.c
index 8cfa3d4..71f4dae 100644
--- a/app/bin/cjoin.c
+++ b/app/bin/cjoin.c
@@ -1,5 +1,5 @@
/*
- * $Header: /home/dmarkle/xtrkcad-fork-cvs/xtrkcad/app/bin/cjoin.c,v 1.4 2008-03-06 19:35:05 m_fischer Exp $
+ * $Header: /home/dave/Source/xtrkcad_5_1_2a/app/bin/RCS/cjoin.c,v 1.3 2019/07/24 15:11:51 dave Exp $
*
* JOINS
*
@@ -39,7 +39,7 @@
#include "cselect.h"
#include "fileio.h"
-
+static BOOL_T debug = 0;
static int log_join = 0;
typedef struct {
curveType_e type;
@@ -53,25 +53,18 @@ typedef struct {
static struct {
STATE_T state;
int joinMoveState;
+ BOOL_T cornuMode;
struct {
TRKTYP_T realType;
track_p trk;
coOrd pos;
EPINX_T ep;
trackParams_t params;
-#ifdef LATER
- curveType_e type;
- ANGLE_T angle;
- coOrd lineOrig;
- coOrd lineEnd;
- coOrd arcP;
- DIST_T arcR;
- ANGLE_T arcA0, arcA1;
-#endif
} inp[2];
joinRes_t jRes;
coOrd inp_pos[2];
easementData_t jointD[2];
+ dynArr_t anchors;
} Dj;
@@ -169,7 +162,8 @@ LOG( log_join, 2, (" = CURVE @ Pc=[%0.3f %0.3f] R=%0.3f A0=%0.3f A1=%0.3f Fli
d = D2R(res->arcA1);
if (d < 0.0)
d = 2*M_PI + d;
- InfoMessage( _("Curved Track: Radius=%s Length=%s"),
+ if (!debug)
+ InfoMessage( _("Curved Track: Radius=%s Length=%s"),
FormatDistance(res->arcR), FormatDistance(res->arcR*d) );
return TRUE;
@@ -213,7 +207,7 @@ LOG( log_join, 3, (" p1=[%0.3f %0.3f] aa=%0.3f a=%0.3f\n",
/* Straight: */
PointOnCircle( &pt, pos0, r0, a1);
LOG( log_join, 2, (" = STRAIGHT [%0.3f %0.3f] [%0.3f %0.3f]\n", pt.x, pt.y, pos1.x, pos1.y ) )
- InfoMessage( _("Straight Track: Length=%s Angle=%0.3f"),
+ if (!debug) InfoMessage( _("Straight Track: Length=%s Angle=%0.3f"),
FormatDistance(FindDistance( pt, pos1 )), PutAngle(FindAngle( pt, pos1 )) );
res->type = curveTypeStraight;
res->pos[0]=pt;
@@ -255,7 +249,7 @@ LOG( log_join, 3, (" A0=%0.3f A1=%0.3f R=%0.3f\n", res->arcA0, res->arcA1,
d = D2R(res->arcA1);
if (d < 0.0)
d = 2*M_PI + d;
- InfoMessage( _("Curved Track: Radius=%s Length=%s Angle=%0.3f"),
+ if (!debug) InfoMessage( _("Curved Track: Radius=%s Length=%s Angle=%0.3f"),
FormatDistance(res->arcR), FormatDistance(res->arcR*d), PutAngle(res->arcA1) );
res->type = curveTypeCurve;
}
@@ -302,11 +296,11 @@ static STATUS_T AdjustJoint(
switch ( Dj.inp[0].params.type ) {
case curveTypeCurve:
if (adjust) {
- a0 = FindAngle( Dj.inp[0].params.arcP, Dj.jRes.pos[0] ) +
- ((Dj.jointD[0].Scurve==TRUE || Dj.jointD[0].flip==FALSE)?0:+180);
+ a0 = FindAngle( Dj.inp[0].params.arcP, Dj.jRes.pos[0] );
Translate( &pc, Dj.inp[0].params.arcP, a0, Dj.jointD[0].x );
-LOG( log_join, 2, (" Move P0 X%0.3f A%0.3f P1 X%0.3f A%0.3f)\n",
- Dj.jointD[0].x, a0, Dj.jointD[1].x, a1 ) )
+LOG( log_join, 2, (" Move P0 X%0.3f A%0.3f P1 X%0.3f A%0.3f SC%d FL%d\n",
+ Dj.jointD[0].x, a0, Dj.jointD[1].x, a1,
+ Dj.jointD[0].Scurve, Dj.jointD[0].flip ) )
} else {
pc = Dj.inp[0].params.arcP;
}
@@ -368,7 +362,8 @@ LOG( log_join, 2, (" Move P0 X%0.3f A%0.3f P1 X%0.3f A%0.3f\n",
}
d -= l;
if ( d <= minLength ) {
- InfoMessage( _("Connecting track is too short by %0.3f"), PutDim(fabs(minLength-d)) );
+ if (!debug)
+ InfoMessage( _("Connecting track is too short by %0.3f"), PutDim(fabs(minLength-d)) );
return FALSE;
}
@@ -415,7 +410,6 @@ static STATUS_T DoMoveToJoin( coOrd pos )
_("Click on an unselected End-Point"):
_("Click on a selected End-Point") );
Dj.inp[0].pos = pos;
- DrawFillCircle( &tempD, Dj.inp[0].pos, 0.10*mainD.scale, selectedColor );
return C_CONTINUE;
}
if ( GetTrkSelected(Dj.inp[0].trk) == GetTrkSelected(Dj.inp[1].trk) ) {
@@ -423,7 +417,6 @@ static STATUS_T DoMoveToJoin( coOrd pos )
? _("unselected") : _("selected") );
return C_CONTINUE;
}
- DrawFillCircle( &tempD, Dj.inp[0].pos, 0.10*mainD.scale, selectedColor );
if (GetTrkSelected(Dj.inp[0].trk))
MoveToJoin( Dj.inp[0].trk, Dj.inp[0].params.ep, Dj.inp[1].trk, Dj.inp[1].params.ep );
else
@@ -432,6 +425,372 @@ static STATUS_T DoMoveToJoin( coOrd pos )
return C_TERMINATE;
}
+typedef enum {NO_LINE,FIRST_END,HAVE_LINE,HAVE_SECOND_LINE} LineState_t;
+
+static struct {
+ LineState_t line_state;
+ int joinMoveState;
+ track_p curr_line;
+ struct {
+ TRKTYP_T realType;
+ track_p line;
+ coOrd pos;
+ coOrd end;
+ int cnt;
+ } inp[2];
+ joinRes_t jRes;
+ coOrd inp_pos[2];
+ dynArr_t anchors_da;
+ trackParams_t params;
+ dynArr_t newLine;
+ } Dl;
+
+#define anchors(N) DYNARR_N(trkSeg_t,Dl.anchors_da,N)
+
+void AddAnchorEnd(coOrd p) {
+ DIST_T d = tempD.scale*0.15;
+ DYNARR_APPEND(trkSeg_t,Dl.anchors_da,1);
+ trkSeg_p a = &DYNARR_LAST(trkSeg_t,Dl.anchors_da);
+ a->type = SEG_CRVLIN;
+ a->width = 0;
+ a->u.c.a0 = 0.0;
+ a->u.c.a1 = 360.0;
+ a->u.c.center = p;
+ a->u.c.radius = d/2;
+ a->color = wDrawColorPowderedBlue;
+}
+
+
+static STATUS_T CmdJoinLine(
+ wAction_t action,
+ coOrd pos )
+/*
+ * Join 2 lines.
+ */
+{
+
+ switch (action&0xFF) {
+ case C_START:
+ InfoMessage( _("Left click - Select first draw object end") );
+ Dl.line_state = NO_LINE;
+ Dl.joinMoveState = 0;
+ tempSegs_da.cnt = 0;
+ DYNARR_RESET(trkSeg_t,Dl.newLine);
+ Dl.curr_line = NULL;
+ return C_CONTINUE;
+ case wActionMove:
+ DYNARR_RESET(trkSeg_t,Dl.anchors_da);
+ Dl.curr_line = NULL;
+ coOrd pos1= pos;
+ Dl.curr_line = OnTrack( &pos1, FALSE, FALSE );
+ if (!Dl.curr_line) return C_CONTINUE;
+ if (IsTrack(Dl.curr_line)) {
+ Dl.curr_line = NULL;
+ return C_CONTINUE;
+ }
+ if (!QueryTrack(Dl.curr_line,Q_GET_NODES)) {
+ Dl.curr_line = NULL;
+ return C_CONTINUE;
+ }
+ if (!GetTrackParams(PARAMS_NODES,Dl.curr_line,pos,&Dl.params)) {
+ Dl.curr_line = NULL;
+ return C_CONTINUE;
+ }
+ if ( (Dl.line_state != NO_LINE) &&
+ (Dl.inp[0].line == Dl.curr_line) &&
+ (IsClose(FindDistance(Dl.inp[0].pos,Dl.params.lineOrig)) ) ) {
+ Dl.curr_line = NULL;
+ } else {
+ AddAnchorEnd(Dl.params.lineOrig);
+ }
+ break;
+ case C_DOWN:
+ DYNARR_RESET(trkSeg_t,Dl.anchors_da);
+ Dl.curr_line = NULL;
+ if (Dl.line_state == NO_LINE) {
+ Dl.curr_line = OnTrack( &pos, FALSE, FALSE);
+ if (!Dl.curr_line || IsTrack(Dl.curr_line)) {
+ InfoMessage( _("Not a line - Try again") );
+ return C_CONTINUE;
+ }
+ if (!QueryTrack(Dl.curr_line,Q_GET_NODES)) return C_CONTINUE;
+ if (!GetTrackParams(PARAMS_NODES,Dl.curr_line,pos,&Dl.params)) return C_CONTINUE;
+ Dl.line_state = HAVE_LINE;
+ Dl.inp[0].line = Dl.curr_line;
+ Dl.inp[0].pos = Dl.params.lineOrig;
+ Dl.inp[0].end = Dl.params.lineEnd;
+ DYNARR_SET(trkSeg_t,Dl.newLine,1);
+
+ DYNARR_LAST(trkSeg_t,Dl.newLine).type = SEG_POLY;
+ DYNARR_LAST(trkSeg_t,Dl.newLine).color = wDrawColorBlack;
+ DYNARR_LAST(trkSeg_t,Dl.newLine).width = 0;
+ DYNARR_LAST(trkSeg_t,Dl.newLine).u.p.polyType = POLYLINE;
+ DYNARR_LAST(trkSeg_t,Dl.newLine).u.p.pts = MyMalloc(sizeof(pts_t)*Dl.params.nodes.cnt);
+ DYNARR_LAST(trkSeg_t,Dl.newLine).u.p.cnt = Dl.params.nodes.cnt;
+ //Copy in reverse as we want this point to be last
+ for (int i=0;i<Dl.params.nodes.cnt;i++) {
+ DYNARR_LAST(trkSeg_t,Dl.newLine).u.p.pts[i].pt = DYNARR_N(coOrd,Dl.params.nodes,Dl.params.nodes.cnt-1-i);
+ DYNARR_LAST(trkSeg_t,Dl.newLine).u.p.pts[i].pt_type = wPolyLineStraight;
+ }
+ InfoMessage( _("Left click - Select second object end") );
+ } else {
+ Dl.curr_line = OnTrack( &pos, FALSE, FALSE );
+ if (!Dl.curr_line || IsTrack(Dl.curr_line)) {
+ InfoMessage( _("Not a line - Try again") );
+ return C_CONTINUE;
+ }
+ if (!QueryTrack(Dl.curr_line,Q_GET_NODES)) return C_CONTINUE;
+ if (!GetTrackParams(PARAMS_NODES,Dl.curr_line,pos,&Dl.params)) return C_CONTINUE;
+ if (Dl.curr_line == Dl.inp[0].line) {
+ if ((Dl.params.lineOrig.x == Dl.inp[0].pos.x) &&
+ (Dl.params.lineOrig.y == Dl.inp[0].pos.y)) {
+ InfoMessage( _("Same draw object and same endpoint - Try again") );
+ return C_CONTINUE;
+ }
+ }
+ Dl.line_state = HAVE_SECOND_LINE;
+ Dl.inp[1].line = Dl.curr_line;
+ Dl.inp[1].pos = Dl.params.lineOrig;
+ Dl.inp[1].end = Dl.params.lineEnd;
+ int old_cnt = DYNARR_LAST(trkSeg_t,Dl.newLine).u.p.cnt;
+ BOOL_T join_near = FALSE;
+ if (Dl.inp[1].line == Dl.inp[0].line) {
+ DYNARR_LAST(trkSeg_t,Dl.newLine).u.p.pts = MyRealloc(DYNARR_LAST(trkSeg_t,Dl.newLine).u.p.pts,sizeof(pts_t)*(old_cnt+1));
+ DYNARR_LAST(trkSeg_t,Dl.newLine).u.p.pts[old_cnt] = DYNARR_LAST(trkSeg_t,Dl.newLine).u.p.pts[0]; // Joined up Polygon
+ DYNARR_LAST(trkSeg_t,Dl.newLine).u.p.cnt += 1;
+ } else {
+ if (IsClose(FindDistance(Dl.inp[0].pos,Dl.inp[1].pos)))
+ join_near = TRUE;
+ DYNARR_LAST(trkSeg_t,Dl.newLine).u.p.pts = MyRealloc(DYNARR_LAST(trkSeg_t,Dl.newLine).u.p.pts,sizeof(pts_t)*(old_cnt+Dl.params.nodes.cnt-join_near));
+ //Copy forwards as this point is first
+ for (int i=join_near;i<Dl.params.nodes.cnt;i++) {
+ DYNARR_LAST(trkSeg_t,Dl.newLine).u.p.pts[i-join_near+old_cnt].pt = DYNARR_N(coOrd,Dl.params.nodes,i);
+ DYNARR_LAST(trkSeg_t,Dl.newLine).u.p.pts[i-join_near+old_cnt].pt_type = wPolyLineStraight;
+ }
+ DYNARR_LAST(trkSeg_t,Dl.newLine).u.p.cnt += Dl.params.nodes.cnt-join_near;
+ }
+ }
+ UndrawNewTrack(Dl.curr_line);
+ Dl.curr_line = NULL;
+ break;
+ case C_MOVE:
+ break;
+ case C_UP:
+ if (Dl.line_state != HAVE_SECOND_LINE) return C_CONTINUE;
+ Dl.line_state = NO_LINE;
+ UndoStart(_("Create PolyLine"), "newPolyLine");
+ track_p newTrack = MakePolyLineFromSegs( zero, 0.0, &Dl.newLine );
+ DeleteTrack(Dl.inp[0].line,FALSE);
+ if (Dl.inp[0].line != Dl.inp[1].line)
+ DeleteTrack(Dl.inp[1].line,FALSE);
+ UndoEnd();
+ DrawNewTrack(newTrack);
+ CleanSegs(&Dl.newLine);
+ Dl.curr_line = NULL;
+ return C_TERMINATE;
+ break;
+ case C_CANCEL:
+ CleanSegs(&Dl.newLine);
+ Dl.line_state = NO_LINE;
+ Dl.curr_line = NULL;
+ break;
+ case C_REDRAW:
+ if (Dl.line_state != NO_LINE) DrawSegs(&tempD,zero,0.0,((trkSeg_t*)Dl.newLine.ptr), Dl.newLine.cnt, trackGauge, wDrawColorPreviewSelected);
+ if (Dl.curr_line) DrawTrack(Dl.curr_line,&tempD,wDrawColorPreviewSelected);
+ if (Dl.anchors_da.cnt>0)
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), Dl.anchors_da.cnt, trackGauge, wDrawColorPreviewSelected );
+ break;
+ case C_TEXT:
+ case C_OK:
+ default:;
+
+ }
+
+
+ return C_CONTINUE;
+
+}
+
+void AnchorTempLine(coOrd p0, coOrd p1) {
+ DYNARR_APPEND(trkSeg_t,Dj.anchors,1);
+ trkSeg_p p = &DYNARR_LAST(trkSeg_t,Dj.anchors);
+ p->type = SEG_STRLIN;
+ p->color = wDrawColorBlue;
+ p->width = 0.0;
+ p->u.l.pos[0] = p0;
+ p->u.l.pos[1] = p1;
+}
+
+void AnchorTempCircle(coOrd center,DIST_T radius, ANGLE_T a0, ANGLE_T a1) {
+ DYNARR_APPEND(trkSeg_t,Dj.anchors,1);
+ trkSeg_p p = &DYNARR_LAST(trkSeg_t,Dj.anchors);
+ p->type = SEG_CRVLIN;
+ p->color = wDrawColorBlue;
+ p->width = 0.0;
+ p->u.c.a0 =a0;
+ p->u.c.a1 = a1;
+ p->u.c.radius = radius;
+ p->u.c.center = center;
+}
+
+void AnchorPoint(coOrd center) {
+ DYNARR_APPEND(trkSeg_t,Dj.anchors,1);
+ trkSeg_p p = &DYNARR_LAST(trkSeg_t,Dj.anchors);
+ p->type = SEG_CRVLIN;
+ p->color = wDrawColorAqua;
+ p->width = 0.0;
+ p->u.c.a0 =0.0;
+ p->u.c.a1 = 360.0;
+ p->u.c.radius = mainD.scale/4;
+ p->u.c.center = center;
+}
+
+static DIST_T desired_radius = 0.0;
+
+static paramFloatRange_t r_0_10000 = { 0.0, 100000.0 };
+static paramData_t joinPLs[] = {
+#define joinRadPD (joinPLs[0])
+#define joinRadI 0
+ { PD_FLOAT, &desired_radius, "radius", PDO_DIM, &r_0_10000, N_("Desired Radius") }
+};
+static paramGroup_t joinPG = { "join-fixed", 0, joinPLs, sizeof joinPLs/sizeof joinPLs[0] };
+
+
+
+BOOL_T AdjustPosToRadius(coOrd *pos, DIST_T desired_radius, ANGLE_T an0, ANGLE_T an1) {
+ coOrd point1,point2;
+ switch ( Dj.inp[1].params.type ) {
+ case curveTypeCurve:
+ if (Dj.inp[0].params.type == curveTypeStraight) {
+ coOrd newP, newP1;
+ //Offset curve by desired_radius
+ DIST_T newR1;
+ newR1 = Dj.inp[1].params.arcR + desired_radius*((fabs(an1-Dj.inp[1].params.arcA0)<1.0)?1:-1);
+ if (newR1<=0.0) {
+ if (debug) InfoMessage("Zero Radius C1");
+ return FALSE;
+ }
+ //Offset line by desired_radius
+ Translate(&newP,Dj.inp[0].params.lineEnd,an0,desired_radius);
+ Translate(&newP1,Dj.inp[0].params.lineOrig,an0,desired_radius);
+ if (debug)
+ AnchorTempLine(newP,newP1);
+ //Intersect - this is the joining curve center
+ if (debug)
+ AnchorTempCircle(Dj.inp[1].params.arcP,newR1,Dj.inp[1].params.arcA0,Dj.inp[1].params.arcA1);
+ if (!FindArcAndLineIntersections(&point1,&point2,Dj.inp[1].params.arcP,newR1,newP,newP1))
+ return FALSE;
+ } else if (Dj.inp[0].params.type == curveTypeCurve) {
+ //Offset curve by desired_radius
+ DIST_T newR0;
+ newR0 = Dj.inp[0].params.arcR + desired_radius*((fabs(an0-Dj.inp[0].params.arcA0)<1.0)?1:-1);
+ if (newR0<=0.0) {
+ if (debug) InfoMessage("Zero Radius C0");
+ return FALSE;
+ }
+ //Offset curve by desired_radius
+ if (debug)
+ AnchorTempCircle(Dj.inp[0].params.arcP,newR0,Dj.inp[0].params.arcA0,Dj.inp[0].params.arcA1);
+ DIST_T newR1;
+ newR1 = Dj.inp[1].params.arcR + desired_radius*((fabs(an1-Dj.inp[1].params.arcA0)<1.0)?1:-1);
+ if (newR1<=0.0) {
+ if (debug) InfoMessage("Zero Radius C1");
+ return FALSE;
+ }
+ //Intersect - this is the joining curve center
+ if (debug)
+ AnchorTempCircle(Dj.inp[1].params.arcP,newR1,Dj.inp[1].params.arcA0,Dj.inp[1].params.arcA1);
+ if (!FindArcIntersections(&point1,&point2,Dj.inp[0].params.arcP,newR0,Dj.inp[1].params.arcP,newR1))
+ return FALSE;
+ }
+ if (debug) {
+ AnchorPoint(point1);
+ AnchorPoint(point2);
+ }
+ break;
+ case curveTypeStraight:
+ if (Dj.inp[0].params.type == curveTypeStraight) {
+ coOrd newI,newP0,newP01, newP1, newP11;
+ //Offset line1 by desired_radius
+ Translate(&newP0,Dj.inp[0].params.lineEnd,an0,desired_radius);
+ Translate(&newP01,Dj.inp[0].params.lineOrig,an0,desired_radius);
+ if (debug)
+ AnchorTempLine(newP0,newP01);
+ //Offset line2 by desired_radius
+ Translate(&newP1,Dj.inp[1].params.lineEnd,an1,desired_radius);
+ Translate(&newP11,Dj.inp[1].params.lineOrig,an1,desired_radius);
+ if (debug)
+ AnchorTempLine(newP1,newP11);
+ if (!FindIntersection(&newI,newP0,Dj.inp[0].params.angle,newP1,Dj.inp[1].params.angle))
+ return FALSE;
+ point1 = point2 = newI;
+ } else if (Dj.inp[0].params.type == curveTypeCurve) {
+ coOrd newP, newP1;
+ //Offset curve by desired_radius
+ DIST_T newR0;
+ newR0 = Dj.inp[0].params.arcR + desired_radius*((fabs(an0-Dj.inp[0].params.arcA0)<1.0)?1:-1);
+ if (newR0<=0.0) {
+ if (debug) InfoMessage("Zero Radius C0");
+ return FALSE;
+ }
+ if (debug)
+ AnchorTempCircle(Dj.inp[0].params.arcP,newR0,Dj.inp[0].params.arcA0,Dj.inp[0].params.arcA1);
+ //Offset line by desired_radius
+ Translate(&newP,Dj.inp[1].params.lineEnd,an1,desired_radius);
+ Translate(&newP1,Dj.inp[1].params.lineOrig,an1,desired_radius);
+ if (debug)
+ AnchorTempLine(newP,newP1);
+ //Intersect - this is the joining curve center
+ if (!FindArcAndLineIntersections(&point1,&point2,Dj.inp[0].params.arcP,newR0,newP,newP1))
+ return FALSE;
+ }
+ if (debug) {
+ AnchorPoint(point1);
+ AnchorPoint(point2);
+ }
+ break;
+ default:
+ return FALSE;
+ }
+ if (FindDistance(*pos,point1)<=FindDistance(*pos,point2)) {
+ if (Dj.inp[1].params.type == curveTypeCurve) {
+ ANGLE_T a = FindAngle(Dj.inp[1].params.arcP,point1);
+ Translate(pos,Dj.inp[1].params.arcP,a,Dj.inp[1].params.arcR);
+ } else {
+ Translate(pos,point1,NormalizeAngle(an1+180),desired_radius);
+ }
+ } else {
+ if (Dj.inp[1].params.type == curveTypeCurve) {
+ ANGLE_T a = FindAngle(Dj.inp[1].params.arcP,point2);
+ Translate(pos,Dj.inp[1].params.arcP,a,Dj.inp[1].params.arcR);
+ } else
+ Translate(pos,point2,NormalizeAngle(an1+180),desired_radius);
+ }
+
+ return TRUE;
+
+}
+
+void AddAnchorJoin(coOrd pos, ANGLE_T angle) {
+ DIST_T d = tempD.scale*0.15;
+ DYNARR_APPEND(trkSeg_t,Dj.anchors,1);
+ trkSeg_p a = &DYNARR_LAST(trkSeg_t,Dj.anchors);
+ a->type = SEG_CRVLIN;
+ a->width = 0;
+ a->u.c.a0 = 0.0;
+ a->u.c.a1 = 360.0;
+ a->u.c.center = pos;
+ a->u.c.radius = d/2;
+ a->color = wDrawColorBlue;
+ DYNARR_SET(trkSeg_t,Dj.anchors,Dj.anchors.cnt+5);
+ DrawArrowHeads(&DYNARR_N(trkSeg_t,Dj.anchors,Dj.anchors.cnt-5),pos,angle,FALSE,wDrawColorBlue);
+
+}
+
+static BOOL_T infoSubst = FALSE;
+static track_p anchor_trk;
+static coOrd anchor_pos;
+static ANGLE_T anchor_angle = 0.0;
static STATUS_T CmdJoin(
wAction_t action,
@@ -451,26 +810,63 @@ static STATUS_T CmdJoin(
ANGLE_T a, a1;
DIST_T eR[2];
BOOL_T ok;
+ wControl_p controls[2];
+ char * labels[1];
switch (action&0xFF) {
case C_START:
+ if (joinPLs[0].control==NULL) {
+ ParamCreateControls(&joinPG, NULL);
+ }
if (selectedTrackCount==0)
InfoMessage( _("Left click - join with track") );
else
InfoMessage( _("Left click - join with track, Shift Left click - move to join") );
+ DYNARR_RESET(trkSeg_t,Dj.anchors);
Dj.state = 0;
Dj.joinMoveState = 0;
+ Dj.cornuMode = FALSE;
/*ParamGroupRecord( &easementPG );*/
- if (easementVal < 0)
+ infoSubst = FALSE;
+ anchor_trk = NULL;
+ if (easementVal < 0.0)
return CmdCornu(action, pos);
return C_CONTINUE;
+
+ case wActionMove:
+ anchor_trk = NULL;
+ DYNARR_RESET(rkSeg_t,Dj.anchors);
+ if ((easementVal < 0) && Dj.joinMoveState == 0 )
+ return CmdCornu(action, pos);
+ if ( Dj.state >= 2) return C_CONTINUE;
+ if ( (trk = OnTrack( &pos, FALSE, TRUE )) == NULL)
+ return C_CONTINUE;
+ if (!CheckTrackLayer( trk ) )
+ return C_CONTINUE;
+ if ((Dj.state > 0) && (trk == Dj.inp[0].trk))
+ return C_CONTINUE;
+ trackParams_t moveParams;
+ if (!GetTrackParams( PARAMS_1ST_JOIN, trk, pos, &moveParams ))
+ return C_CONTINUE;
+ ep = PickUnconnectedEndPointSilent(pos,trk);
+ if (ep <0) return C_CONTINUE;
+ if (IsClose(FindDistance(GetTrkEndPos(trk,ep),pos)))
+ anchor_angle = GetTrkEndAngle(trk,ep);
+ else
+ anchor_angle = FindAngle(pos,GetTrkEndPos(trk,ep));
+ anchor_trk = trk;
+ anchor_pos = pos;
+ AddAnchorJoin(pos,anchor_angle);
+ break;
case C_DOWN:
- if ( (Dj.state == 0 && (MyGetKeyState() & WKEY_SHIFT) != 0) || Dj.joinMoveState != 0 )
+ if ( !Dj.cornuMode && ((Dj.state == 0 && (MyGetKeyState() & WKEY_SHIFT) != 0) || Dj.joinMoveState != 0) )
return DoMoveToJoin( pos );
- if (easementVal < 0.0)
+ if (easementVal < 0.0 && Dj.joinMoveState == 0) {
+ Dj.cornuMode = TRUE;
return CmdCornu(action, pos);
+ }
DYNARR_SET( trkSeg_t, tempSegs_da, 3 );
tempSegs(0).color = drawColorBlack;
@@ -495,10 +891,18 @@ LOG( log_join, 1, ("JOIN: 1st track %d @[%0.3f %0.3f]\n",
Dj.inp[0].realType = GetTrkType(Dj.inp[0].trk);
InfoMessage( _("Select 2nd track") );
Dj.state = 1;
- DrawFillCircle( &tempD, Dj.inp[0].pos, 0.10*mainD.scale, selectedColor );
+ wPrefGetFloat("misc", "desired_radius", &desired_radius, desired_radius);
+ controls[0] = joinRadPD.control;
+ controls[1] = NULL;
+ labels[0] = N_("Desired Radius");
+ InfoSubstituteControls(controls, labels);
+ infoSubst = TRUE;
+ joinRadPD.option |= PDO_NORECORD;
+ ParamLoadControls(&joinPG);
+ ParamGroupRecord(&joinPG);
return C_CONTINUE;
} else {
- if ( (Dj.inp[1].trk = OnTrack( &pos, TRUE, TRUE )) == NULL)
+ if ( (Dj.inp[1].trk = OnTrack( &pos, FALSE, TRUE )) == NULL)
return C_CONTINUE;
if (!CheckTrackLayer( Dj.inp[1].trk ) )
return C_CONTINUE;
@@ -509,6 +913,10 @@ LOG( log_join, 1, ("JOIN: 1st track %d @[%0.3f %0.3f]\n",
ErrorMessage( MSG_JOIN_SAME );
return C_CONTINUE;
}
+ if (infoSubst)
+ InfoSubstituteControls(NULL, NULL);
+ infoSubst = FALSE;
+
Dj.inp[1].realType = GetTrkType(Dj.inp[1].trk);
if ( IsCurveCircle( Dj.inp[0].trk ) )
Dj.inp[0].params.ep = PickArcEndPt( Dj.inp[0].params.arcP, Dj.inp[0].pos, pos );
@@ -519,21 +927,30 @@ LOG( log_join, 1, (" 2nd track %d, @[%0.3f %0.3f] EP0=%d EP1=%d\n",
GetTrkIndex(Dj.inp[1].trk), Dj.inp[1].pos.x, Dj.inp[1].pos.y,
Dj.inp[0].params.ep, Dj.inp[1].params.ep ) )
LOG( log_join, 1, ("P1=[%0.3f %0.3f]\n", pos.x, pos.y ) )
- if ( GetTrkEndTrk(Dj.inp[0].trk,Dj.inp[0].params.ep) != NULL) {
- ErrorMessage( MSG_TRK_ALREADY_CONN, _("First") );
- return C_CONTINUE;
+ BOOL_T only_merge = FALSE;
+ if ( (Dj.inp[0].params.ep >=0) &&
+ (GetTrkEndTrk(Dj.inp[0].trk,Dj.inp[0].params.ep) != NULL)) {
+ if (GetTrkEndTrk(Dj.inp[0].trk,Dj.inp[0].params.ep) != Dj.inp[1].trk) {
+ only_merge = TRUE;
+ ErrorMessage( MSG_TRK_ALREADY_CONN, _("First") );
+ return C_CONTINUE;
+ }
}
- if ( Dj.inp[1].params.ep >= 0 &&
- GetTrkEndTrk(Dj.inp[1].trk,Dj.inp[1].params.ep) != NULL) {
- ErrorMessage( MSG_TRK_ALREADY_CONN, _("Second") );
- return C_CONTINUE;
+ if ( (Dj.inp[1].params.ep >= 0) &&
+ (GetTrkEndTrk(Dj.inp[1].trk,Dj.inp[1].params.ep) != NULL)) {
+ if (GetTrkEndTrk(Dj.inp[1].trk,Dj.inp[1].params.ep) != Dj.inp[0].trk) {
+ only_merge = TRUE;
+ ErrorMessage( MSG_TRK_ALREADY_CONN, _("Second") );
+ return C_CONTINUE;
+ }
}
-
rc = C_CONTINUE;
if ( MergeTracks( Dj.inp[0].trk, Dj.inp[0].params.ep,
- Dj.inp[1].trk, Dj.inp[1].params.ep ) )
+ Dj.inp[1].trk, Dj.inp[1].params.ep ) ) {
+ rc = C_TERMINATE;
+ } else if (only_merge) {
rc = C_TERMINATE;
- else if ( Dj.inp[0].params.ep >= 0 && Dj.inp[1].params.ep >= 0 ) {
+ } else if ( Dj.inp[0].params.ep >= 0 && Dj.inp[1].params.ep >= 0 ) {
if ( Dj.inp[0].params.type == curveTypeStraight &&
Dj.inp[1].params.type == curveTypeStraight &&
ExtendStraightToJoin( Dj.inp[0].trk, Dj.inp[0].params.ep,
@@ -544,7 +961,6 @@ LOG( log_join, 1, ("P1=[%0.3f %0.3f]\n", pos.x, pos.y ) )
rc = C_TERMINATE;
}
if ( rc == C_TERMINATE ) {
- DrawFillCircle( &tempD, Dj.inp[0].pos, 0.10*mainD.scale, selectedColor );
return rc;
}
if ( QueryTrack( Dj.inp[0].trk, Q_CANNOT_BE_ON_END ) ||
@@ -553,30 +969,103 @@ LOG( log_join, 1, ("P1=[%0.3f %0.3f]\n", pos.x, pos.y ) )
return C_CONTINUE;
}
- DrawFillCircle( &tempD, Dj.inp[0].pos, 0.10*mainD.scale, selectedColor );
Dj.state = 2;
Dj.jRes.flip = FALSE;
}
tempSegs_da.cnt = 0;
+ /* no break */
case C_MOVE:
- if (easementVal < 0)
+ if (easementVal < 0 && Dj.cornuMode)
return CmdCornu(action, pos);
LOG( log_join, 3, ("P1=[%0.3f %0.3f]\n", pos.x, pos.y ) )
if (Dj.state != 2)
return C_CONTINUE;
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, drawColorBlack );
+ DYNARR_RESET(trkSeg_t,Dj.anchors);
+
+
+ //Fix Pos onto the line of the second track
+ if (Dj.inp[1].params.type == curveTypeStraight) {
+ ANGLE_T a = NormalizeAngle(FindAngle(Dj.inp[1].params.lineOrig,pos)-Dj.inp[1].params.angle);
+ DIST_T d = FindDistance(Dj.inp[1].params.lineOrig,pos);
+ Translate(&pos,Dj.inp[1].params.lineOrig,Dj.inp[1].params.angle,d*cos(D2R(a)));
+ } else {
+ ANGLE_T a = FindAngle(Dj.inp[1].params.arcP,pos);
+ Translate(&pos,Dj.inp[1].params.arcP,a,Dj.inp[1].params.arcR);
+ }
+
+ if ((desired_radius != 0.0) &&
+ ((Dj.inp[0].params.type == curveTypeStraight) || (Dj.inp[0].params.type == curveTypeCurve)) &&
+ ((Dj.inp[1].params.type == curveTypeStraight) || (Dj.inp[1].params.type == curveTypeCurve)) &&
+ Dj.jRes.type==curveTypeCurve
+ ) {
+ ANGLE_T na0=0.0,na1=0.0;
+ coOrd end0, end1;
+ ANGLE_T a0,a1;
+ end0 = GetTrkEndPos(Dj.inp[0].trk,Dj.inp[0].params.ep);
+ end1 = GetTrkEndPos(Dj.inp[1].trk,Dj.inp[1].params.ep);
+ if (Dj.inp[0].params.type == curveTypeStraight) {
+ a0 = DifferenceBetweenAngles(Dj.inp[0].params.angle,FindAngle(Dj.jRes.pos[0], pos));
+ na0 = NormalizeAngle( Dj.inp[0].params.angle +
+ ((a0>0.0)?90.0:-90.0));
+ } else {
+ na0 = Dj.inp[0].params.arcA0;
+ if (FindDistance(Dj.inp[0].params.arcP,pos)<Dj.inp[0].params.arcR)
+ na0 = NormalizeAngle(na0+180.0);
+ }
+ //Now Second Line offset
+ if (Dj.inp[1].params.type == curveTypeStraight) {
+ a1 = DifferenceBetweenAngles(Dj.inp[1].params.angle,FindAngle(pos, Dj.jRes.pos[0]));
+ na1 = NormalizeAngle( Dj.inp[1].params.angle +
+ ((a1>0.0)?90.0:-90.0));
+ } else {
+ na1 = Dj.inp[1].params.arcA0;
+ if (FindDistance(Dj.inp[1].params.arcP,Dj.jRes.pos[0])<Dj.inp[1].params.arcR)
+ na1 = NormalizeAngle(na1+180.0);
+ }
+ coOrd pos1 = pos;
+ if (AdjustPosToRadius(&pos1,desired_radius+(Dj.jointD[0].x), na0, na1)) {
+ if (Dj.inp[1].params.type == curveTypeStraight) {
+ FindPos( &off, &beyond, pos1, Dj.inp[1].params.lineOrig, Dj.inp[1].params.angle,
+ FindDistance(Dj.inp[1].params.lineOrig,Dj.inp[1].params.lineEnd) );
+ } else if (Dj.inp[1].params.type == curveTypeCurve) {
+ ANGLE_T a = FindAngle(Dj.inp[1].params.arcP,pos1);
+ if ((a>Dj.inp[1].params.arcA0+Dj.inp[1].params.arcA1) || (a< Dj.inp[1].params.arcA0)) {
+ beyond = 1.0;
+ }
+ }
+ //Suppress result unless on track and close to user position (when on track)
+ if (beyond>-0.01 && IsClose(FindDistance(pos,pos1))) {
+ pos = pos1;
+ DYNARR_APPEND(trkSeg_t,Dj.anchors,1);
+ trkSeg_p p = &DYNARR_LAST(trkSeg_t,Dj.anchors);
+ p->type= SEG_CRVLIN;
+ p->width = 0;
+ p->color = wDrawColorBlue;
+ p->u.c.center = pos;
+ p->u.c.a1= 360.0;
+ p->u.c.a0 = 0.0;
+ p->u.c.radius = tempD.scale*0.25/2;
+ }
+ }
+
+ }
+
+
tempSegs_da.cnt = 0;
tempSegs(0).color = drawColorBlack;
ok = FALSE;
/* Populate (Dj.inp[1]) */
+
if ( QueryTrack(Dj.inp[1].trk,Q_REFRESH_JOIN_PARAMS_ON_MOVE) ) {
if ( !GetTrackParams( PARAMS_2ND_JOIN, Dj.inp[1].trk, pos, &Dj.inp[1].params ) )
return C_CONTINUE;
}
+
+
beyond = 1.0;
switch ( Dj.inp[1].params.type ) {
case curveTypeCurve:
@@ -798,16 +1287,14 @@ errorReturn:
default:
AbortProg( "Bad track type %d", Dj.jRes.type );
}
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, drawColorBlack );
if (!ok)
Dj.jRes.type = curveTypeNone;
return C_CONTINUE;
case C_UP:
-
if (Dj.state == 0) {
- if (easementVal<0)
- return CmdCornu(action, pos);
+ if (easementVal<0 && Dj.cornuMode)
+ return CmdCornu(action, pos);
else
return C_CONTINUE;
}
@@ -815,12 +1302,10 @@ errorReturn:
InfoMessage( _("Select 2nd track") );
return C_CONTINUE;
}
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, drawColorBlack );
tempSegs(0).color = drawColorBlack;
tempSegs_da.cnt = 0;
if (Dj.jRes.type == curveTypeNone) {
Dj.state = 1;
- DrawFillCircle( &tempD, Dj.inp[0].pos, 0.10*mainD.scale, selectedColor );
InfoMessage( _("Select 2nd track") );
return C_CONTINUE;
}
@@ -845,7 +1330,10 @@ errorReturn:
UndrawNewTrack( Dj.inp[1].trk );
ep = Dj.jRes.flip?1:0;
Dj.state = 0;
+ DYNARR_RESET(trkSeg_t,Dj.anchors);
rc = C_TERMINATE;
+ if (easementVal == 0.0)
+ wPrefSetFloat("misc", "desired_radius", desired_radius);
if ( (!JoinTracks( Dj.inp[0].trk, Dj.inp[0].params.ep, Dj.inp_pos[0],
trk, ep, Dj.jRes.pos[0], &Dj.jointD[0] ) ) ||
(!JoinTracks( Dj.inp[1].trk, Dj.inp[1].params.ep, Dj.inp_pos[1],
@@ -856,24 +1344,34 @@ errorReturn:
DrawNewTrack( Dj.inp[0].trk );
DrawNewTrack( Dj.inp[1].trk );
DrawNewTrack( trk );
+ if (infoSubst)
+ InfoSubstituteControls(NULL, NULL);
+ infoSubst = FALSE;
return rc;
case C_CANCEL:
- case C_REDRAW:
-
+ if (infoSubst)
+ InfoSubstituteControls(NULL, NULL);
+ infoSubst = FALSE;
+ break;
+ case C_REDRAW:
if ( Dj.joinMoveState == 1 || Dj.state == 1 ) {
DrawFillCircle( &tempD, Dj.inp[0].pos, 0.10*mainD.scale, selectedColor );
- } else if (easementVal<0 )
- return CmdCornu(action,pos);
-
+ } else if (easementVal<0 && Dj.joinMoveState == 0)
+ return CmdCornu(action,pos);
+ if (Dj.anchors.cnt)
+ DrawSegs(&tempD, zero, 0.0, &(((trkSeg_t *)Dj.anchors.ptr)[0]), Dj.anchors.cnt,trackGauge,wDrawColorBlack);
DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
break;
case C_TEXT:
case C_OK:
- if (easementVal<0 )
- return CmdCornu(action,pos);
+ if (easementVal<0 && Dj.cornuMode)
+ return CmdCornu(action,pos);
+ if (infoSubst)
+ InfoSubstituteControls(NULL, NULL);
+ infoSubst = FALSE;
}
@@ -889,10 +1387,14 @@ errorReturn:
*/
#include "bitmaps/join.xpm"
+#include "bitmaps/joinline.xpm"
void InitCmdJoin( wMenu_p menu )
{
- joinCmdInx = AddMenuButton( menu, CmdJoin, "cmdJoin", _("Join"), wIconCreatePixMap(join_xpm), LEVEL0_50, IC_STICKY|IC_POPUP, ACCL_JOIN, NULL );
+ ButtonGroupBegin( _("Join"), "cmdJoinSetCmd", _("Join") );
+ joinCmdInx = AddMenuButton( menu, CmdJoin, "cmdJoinTrack", _("Join Track"), wIconCreatePixMap(join_xpm), LEVEL0_50, IC_STICKY|IC_POPUP|IC_WANT_MOVE, ACCL_JOIN, NULL );
+ AddMenuButton( menu, CmdJoinLine, "cmdJoinLine", _("Join Lines"), wIconCreatePixMap(joinline_xpm), LEVEL0_50, IC_STICKY|IC_POPUP|IC_WANT_MOVE, ACCL_JOIN, NULL );
+ ButtonGroupEnd();
log_join = LogFindIndex( "join" );
}
diff --git a/app/bin/cmisc.c b/app/bin/cmisc.c
index a353530..b41ae42 100644
--- a/app/bin/cmisc.c
+++ b/app/bin/cmisc.c
@@ -23,6 +23,7 @@
#include <stdint.h>
#include "common.h"
+#include "utility.h"
#include "cundo.h"
#include "i18n.h"
#include "messages.h"
@@ -32,6 +33,10 @@
EXPORT wIndex_t describeCmdInx;
EXPORT BOOL_T inDescribeCmd;
+extern wIndex_t selectCmdInx;
+extern wIndex_t joinCmdInx;
+extern wIndex_t modifyCmdInx;
+
static track_p descTrk;
static descData_p descData;
static descUpdate_t descUpdateFunc;
@@ -43,13 +48,16 @@ static BOOL_T descNeedDrawHilite;
static wPos_t describeW_posy;
static wPos_t describeCmdButtonEnd;
+static wMenu_p descPopupM;
+
static unsigned int editableLayerList[NUM_LAYERS]; /**< list of non-frozen layers */
static int * layerValue; /**pointer to current Layer (int *) */
static paramFloatRange_t rdata = { 0, 0, 100, PDO_NORANGECHECK_HIGH|PDO_NORANGECHECK_LOW };
static paramIntegerRange_t idata = { 0, 0, 100, PDO_NORANGECHECK_HIGH|PDO_NORANGECHECK_LOW };
static paramTextData_t tdata = { 300, 150 };
-static char * pivotLabels[] = { N_("First"), N_("Middle"), N_("Second"), NULL };
+static char * pivotLabels[] = { N_("First"), N_("Middle"), N_("End"), NULL };
+static char * boxLabels[] = { "", NULL };
static paramData_t describePLs[] = {
#define I_FLOAT_0 (0)
{ PD_FLOAT, NULL, "F1", 0, &rdata },
@@ -114,13 +122,15 @@ static paramData_t describePLs[] = {
#define I_LAYER_N I_LAYER_0+1
#define I_COLOR_0 I_LAYER_N
- { PD_COLORLIST, NULL, "C1", 0, NULL, N_("Color") },
+ { PD_COLORLIST, NULL, "C1", PDO_NOPREF, NULL, N_("Color"), BC_HORZ|BC_NOBORDER },
#define I_COLOR_N I_COLOR_0+1
#define I_LIST_0 I_COLOR_N
{ PD_DROPLIST, NULL, "L1", 0, (void*)150, NULL, 0 },
{ PD_DROPLIST, NULL, "L2", 0, (void*)150, NULL, 0 },
-#define I_LIST_N I_LIST_0+2
+ { PD_DROPLIST, NULL, "L3", 0, (void*)150, NULL, 0 },
+ { PD_DROPLIST, NULL, "L4", 0, (void*)150, NULL, 0 },
+#define I_LIST_N I_LIST_0+4
#define I_EDITLIST_0 I_LIST_N
{ PD_DROPLIST, NULL, "LE1", 0, (void*)150, NULL, BL_EDITABLE },
@@ -131,8 +141,15 @@ static paramData_t describePLs[] = {
#define I_TEXT_N I_TEXT_0+1
#define I_PIVOT_0 I_TEXT_N
- { PD_RADIO, NULL, "P1", 0, pivotLabels, N_("Pivot"), BC_HORZ|BC_NOBORDER, 0 }
+ { PD_RADIO, NULL, "P1", 0, pivotLabels, N_("Pivot"), BC_HORZ|BC_NOBORDER, 0 },
#define I_PIVOT_N I_PIVOT_0+1
+
+#define I_TOGGLE_0 I_PIVOT_N
+ { PD_TOGGLE, NULL, "boxed1", PDO_NOPREF|PDO_DLGHORZ, boxLabels, N_("Boxed"), BC_HORZ|BC_NOBORDER },
+ { PD_TOGGLE, NULL, "boxed2", PDO_NOPREF|PDO_DLGHORZ, boxLabels, N_("Boxed"), BC_HORZ|BC_NOBORDER },
+ { PD_TOGGLE, NULL, "boxed3", PDO_NOPREF|PDO_DLGHORZ, boxLabels, N_("Boxed"), BC_HORZ|BC_NOBORDER },
+ { PD_TOGGLE, NULL, "boxed4", PDO_NOPREF|PDO_DLGHORZ, boxLabels, N_("Boxed"), BC_HORZ|BC_NOBORDER },
+#define I_TOGGLE_N I_TOGGLE_0+4
};
static paramGroup_t describePG = { "describe", 0, describePLs, sizeof describePLs/sizeof describePLs[0] };
@@ -149,7 +166,7 @@ CreateEditableLayersList()
int i = 0;
int j = 0;
- while (i <= NUM_LAYERS) {
+ while (i < NUM_LAYERS) {
if (!GetLayerFrozen(i)) {
editableLayerList[j++] = i;
}
@@ -179,7 +196,7 @@ SearchEditableLayerList(unsigned int layer)
return (-1);
}
-static void DrawDescHilite(void)
+static void DrawDescHilite(BOOL_T selected)
{
wPos_t x, y, w, h;
@@ -194,7 +211,7 @@ static void DrawDescHilite(void)
w = (wPos_t)((descSize.x/mainD.scale)*mainD.dpi+0.5);
h = (wPos_t)((descSize.y/mainD.scale)*mainD.dpi+0.5);
mainD.CoOrd2Pix(&mainD,descOrig,&x,&y);
- wDrawFilledRectangle(mainD.d, x, y, w, h, descColor, wDrawOptTemp);
+ wDrawFilledRectangle(tempD.d, x, y, w, h, selected?descColor:wDrawColorBlue, wDrawOptTemp|wDrawOptTransparent);
}
@@ -221,10 +238,6 @@ static void DescribeUpdate(
return;
}
- if ((ddp->mode&DESC_NOREDRAW) == 0) {
- DrawDescHilite();
- }
-
if (!descUndoStarted) {
UndoStart(_("Change Track"), "Change Track");
descUndoStarted = TRUE;
@@ -252,7 +265,6 @@ static void DescribeUpdate(
descOrig.y -= descBorder;
descSize.x -= descOrig.x-descBorder;
descSize.y -= descOrig.y-descBorder;
- DrawDescHilite();
}
for (inx = 0; inx < sizeof describePLs/sizeof describePLs[0]; inx++) {
@@ -288,9 +300,6 @@ static void DescOk(void * junk)
{
wHide(describePG.win);
- if (descTrk) {
- DrawDescHilite();
- }
if (layerValue && *layerValue>=0) {
SetTrkLayer(descTrk, editableLayerList[*layerValue]); //int found that is really in the parm controls.
}
@@ -304,7 +313,7 @@ static void DescOk(void * junk)
}
descNeedDrawHilite = FALSE;
- Reset();
+ Reset(); // DescOk
}
@@ -326,10 +335,22 @@ static struct {
/*STRING*/ { PD_STRING,0, I_STRING_0, I_STRING_N },
/*TEXT*/ { PD_TEXT, PDO_DLGNOLABELALIGN, I_TEXT_0, I_TEXT_N },
/*LIST*/ { PD_DROPLIST, PDO_LISTINDEX, I_LIST_0, I_LIST_N },
- /*EDITABLELIST*/{ PD_DROPLIST, 0, I_EDITLIST_0, I_EDITLIST_N }
+ /*EDITABLELIST*/{ PD_DROPLIST, 0, I_EDITLIST_0, I_EDITLIST_N },
+ /*BOXED*/ { PD_TOGGLE, 0, I_TOGGLE_0, I_TOGGLE_N },
};
-static wControl_p AllocateButt(descData_p ddp, void * valueP, char * label,
+/**
+ * An unused param element is selected from the list of pre-defined param elements and initialized
+ * for an element specific param.
+ *
+ * \param ddp Element specific param
+ * \param valueP the value pointer used by the element
+ * \param label the label assigned by the element
+ * \param sep ?
+ * \return the selected widget
+ */
+
+static wControl_p AssignParamToDescribeDialog(descData_p ddp, void * valueP, char * label,
wPos_t sep)
{
int inx;
@@ -364,7 +385,7 @@ static wControl_p AllocateButt(descData_p ddp, void * valueP, char * label,
}
}
- AbortProg("allocateButt: can't find %d", ddp->type);
+ AbortProg("AssignParamToDescribeDialog: can't find %d", ddp->type);
return NULL;
}
@@ -465,13 +486,13 @@ void DoDescribe(char * title, track_p trk, descData_p data, descUpdate_t update)
label = _(ddp->label);
ddp->posy = describeW_posy;
- ddp->control0 = AllocateButt(ddp, ddp->valueP, label,
+ ddp->control0 = AssignParamToDescribeDialog(ddp, ddp->valueP, label,
(ddp->type == DESC_POS?3:3));
wControlActive(ddp->control0, ((ddp->mode|ro_mode)&DESC_RO)==0);
switch (ddp->type) {
case DESC_POS:
- ddp->control1 = AllocateButt(ddp,
+ ddp->control1 = AssignParamToDescribeDialog(ddp,
&((coOrd*)(ddp->valueP))->y,
NULL,
0);
@@ -523,9 +544,10 @@ EXPORT void DescribeCancel(void)
{
if (describePG.win && wWinIsVisible(describePG.win)) {
if (descTrk) {
- descUpdateFunc(descTrk, -1, descData, TRUE);
- descTrk = NULL;
- DrawDescHilite();
+ if (!IsTrackDeleted(descTrk))
+ descUpdateFunc(descTrk, -1, descData, TRUE);
+ descTrk = NULL;
+
}
wHide(describePG.win);
@@ -540,21 +562,27 @@ EXPORT void DescribeCancel(void)
}
-static STATUS_T CmdDescribe(wAction_t action, coOrd pos)
+EXPORT STATUS_T CmdDescribe(wAction_t action, coOrd pos)
{
- track_p trk;
+ static track_p trk;
char msg[STR_SIZE];
switch (action) {
case C_START:
InfoMessage(_("Select track to describe"));
+ wSetCursor(mainD.d,wCursorQuestion);
descUndoStarted = FALSE;
+ trk = NULL;
return C_CONTINUE;
+ case wActionMove:
+ trk = OnTrack(&pos, FALSE, FALSE);
+ return C_CONTINUE;
+
+
case C_DOWN:
if ((trk = OnTrack(&pos, FALSE, FALSE)) != NULL) {
if (describePG.win && wWinIsVisible(describePG.win) && descTrk) {
- DrawDescHilite();
descUpdateFunc(descTrk, -1, descData, TRUE);
descTrk = NULL;
}
@@ -572,10 +600,10 @@ static STATUS_T CmdDescribe(wAction_t action, coOrd pos)
descSize.x -= descOrig.x-descBorder;
descSize.y -= descOrig.y-descBorder;
descNeedDrawHilite = TRUE;
- DrawDescHilite();
DescribeTrack(trk, msg, 255);
inDescribeCmd = FALSE;
InfoMessage(msg);
+ trk = NULL;
} else {
InfoMessage("");
}
@@ -583,17 +611,31 @@ static STATUS_T CmdDescribe(wAction_t action, coOrd pos)
return C_CONTINUE;
case C_REDRAW:
+
if (describePG.win && wWinIsVisible(describePG.win) && descTrk) {
- DrawDescHilite();
+ DrawDescHilite(TRUE);
+ if (descTrk && QueryTrack(descTrk, Q_IS_DRAW)) {
+ DrawOriginAnchor(descTrk);
+ }
+ } else if (trk){
+ DrawTrack(trk,&tempD,wDrawColorPreviewSelected);
}
+
break;
case C_CANCEL:
DescribeCancel();
+ wSetCursor(mainD.d,defaultCursor);
return C_CONTINUE;
+
+ case C_CMDMENU:
+ menuPos = pos;
+ if (!trk) wMenuPopupShow(descPopupM);
+ return C_CONTINUE;
}
+
return C_CONTINUE;
}
@@ -601,11 +643,23 @@ static STATUS_T CmdDescribe(wAction_t action, coOrd pos)
#include "bitmaps/describe.xpm"
+extern wIndex_t selectCmdInx;
+extern wIndex_t modifyCmdInx;
+extern wIndex_t panCmdInx;
+
void InitCmdDescribe(wMenu_p menu)
{
describeCmdInx = AddMenuButton(menu, CmdDescribe, "cmdDescribe",
_("Properties"), wIconCreatePixMap(describe_xpm),
- LEVEL0, IC_CANCEL|IC_POPUP, ACCL_DESCRIBE, NULL);
+ LEVEL0, IC_CANCEL|IC_POPUP|IC_WANT_MOVE|IC_CMDMENU, ACCL_DESCRIBE, NULL);
RegisterChangeNotification(DescChange);
ParamRegister(&describePG);
}
+void InitCmdDescribe2(wMenu_p menu)
+{
+ descPopupM = MenuRegister( "Describe Context Menu" );
+ wMenuPushCreate(descPopupM, "cmdSelectMode", GetBalloonHelpStr("cmdSelectMode"), 0, DoCommandB, (void*) (intptr_t) selectCmdInx);
+ wMenuPushCreate(descPopupM, "cmdModifyMode", GetBalloonHelpStr("cmdModifyMode"), 0, DoCommandB, (void*) (intptr_t) modifyCmdInx);
+ wMenuPushCreate(descPopupM, "cmdPanMode", GetBalloonHelpStr("cmdPanMode"), 0, DoCommandB, (void*) (intptr_t) panCmdInx);
+
+}
diff --git a/app/bin/cmodify.c b/app/bin/cmodify.c
index 11f4c06..8f82012 100644
--- a/app/bin/cmodify.c
+++ b/app/bin/cmodify.c
@@ -34,6 +34,9 @@
#include "param.h"
#include "track.h"
#include "utility.h"
+#include "drawgeom.h"
+#include "common.h"
+#include "layout.h"
static struct {
track_p Trk;
@@ -47,10 +50,65 @@ static struct {
BOOL_T first;
} Dex;
+static wMenu_p modPopupM;
+
+extern wIndex_t selectCmdInx;
+extern wIndex_t joinCmdInx;
+extern wIndex_t describeCmdInx;
+
+static dynArr_t anchors_da;
+#define anchors(N) DYNARR_N(trkSeg_t,anchors_da,N)
static int log_modify;
static BOOL_T modifyBezierMode;
static BOOL_T modifyCornuMode;
+static BOOL_T modifyDrawMode;
+static BOOL_T modifyRulerMode;
+static BOOL_T modifyExtendMode;
+
+
+static void CreateEndAnchor(coOrd p, wBool_t lock) {
+ DIST_T d = tempD.scale*0.15;
+
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = lock?SEG_FILCRCL:SEG_CRVLIN;
+ anchors(i).color = wDrawColorBlue;
+ anchors(i).u.c.center = p;
+ anchors(i).u.c.radius = d/2;
+ anchors(i).u.c.a0 = 0.0;
+ anchors(i).u.c.a1 = 360.0;
+ anchors(i).width = 0;
+}
+
+static void CreateCornuAnchor(coOrd p, wBool_t lock) {
+ DIST_T d = tempD.scale*0.15;
+
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = lock?SEG_FILCRCL:SEG_CRVLIN;
+ anchors(i).color = wDrawColorBlue;
+ anchors(i).u.c.center = p;
+ anchors(i).u.c.radius = d/2;
+ anchors(i).u.c.a0 = 0.0;
+ anchors(i).u.c.a1 = 360.0;
+ anchors(i).width = 0;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ i = anchors_da.cnt-1;
+ anchors(i).type = SEG_CRVLIN;
+ anchors(i).color = wDrawColorBlue;
+ anchors(i).u.c.center = p;
+ anchors(i).u.c.radius = d;
+ anchors(i).u.c.a0 = 0.0;
+ anchors(i).u.c.a1 = 360.0;
+ anchors(i).width = 0;
+}
+
+
+static void CreateRadiusAnchor(coOrd p, ANGLE_T a, BOOL_T bi) {
+ DYNARR_SET(trkSeg_t,anchors_da,anchors_da.cnt+5);
+ DrawArrowHeads(&DYNARR_N(trkSeg_t,anchors_da,anchors_da.cnt-5),p,a,bi,wDrawColorBlue);
+}
/*
* Call cbezier.c CmdBezModify to alter Bezier Track and Lines.
@@ -66,6 +124,7 @@ static STATUS_T ModifyBezier(wAction_t action, coOrd pos) {
case C_UP:
case C_OK:
case C_TEXT:
+ case wActionMove:
trackGauge = (IsTrack(Dex.Trk)?GetTrkGauge(Dex.Trk):0.0);
rc = CmdBezModify(Dex.Trk, action, pos, trackGauge);
break;
@@ -89,12 +148,14 @@ static STATUS_T ModifyCornu(wAction_t action, coOrd pos) {
STATUS_T rc = C_CONTINUE;
if (Dex.Trk == NULL) return C_ERROR; //No track picked yet!
switch (action&0xFF) {
+ case C_LCLICK:
case C_START:
case C_DOWN:
case C_MOVE:
case C_UP:
case C_OK:
case C_TEXT:
+ case wActionMove:
trackGauge = (IsTrack(Dex.Trk)?GetTrkGauge(Dex.Trk):0.0);
rc = CmdCornuModify(Dex.Trk, action, pos, trackGauge);
break;
@@ -110,7 +171,61 @@ static STATUS_T ModifyCornu(wAction_t action, coOrd pos) {
return rc;
}
-static STATUS_T CmdModify(
+/*
+ * Picking a DRAW will allow point modifications until terminated with "Enter"
+ */
+static STATUS_T ModifyDraw(wAction_t action, coOrd pos) {
+ STATUS_T rc = C_CONTINUE;
+ if (Dex.Trk == NULL) return C_ERROR; //No item picked yet!
+ switch (action&0xFF) {
+ case C_START:
+ case C_DOWN:
+ case C_MOVE:
+ case C_UP:
+ rc = ModifyTrack( Dex.Trk, action, pos );
+ break;
+ case wActionMove:
+ rc = ModifyTrack( Dex.Trk, action, pos );
+ break;
+ case C_TEXT:
+ //Delete or '0' - continues
+ if ((action>>8 !=32) && (action >>8 !=13))
+ return ModifyTrack( Dex.Trk, action, pos );
+ //Enter/Space does not
+ if ((action>>8 !=32) && (action>>8 != 13)) return C_CONTINUE;
+ /*no break*/
+ case C_OK:
+ UndoStart( _("Modify Track"), "Modify( T%d[%d] )", GetTrkIndex(Dex.Trk), Dex.params.ep );
+ UndoModify( Dex.Trk );
+ rc = ModifyTrack( Dex.Trk, C_TEXT | (13<<8), pos );
+ if (rc != C_CONTINUE) modifyDrawMode = FALSE;
+ UndoEnd();
+ break;
+ case C_CANCEL:
+ case C_FINISH:
+ case C_CONFIRM:
+ case C_TERMINATE:
+ rc = ModifyTrack( Dex.Trk, action, pos );
+ Dex.Trk = NULL;
+ modifyDrawMode = FALSE;
+ tempSegs_da.cnt = 0;
+ rc = C_CONTINUE;
+ break;
+ case C_REDRAW:
+ rc = ModifyTrack( Dex.Trk, action, pos );
+ break;
+ case C_CMDMENU:
+ menuPos = pos;
+ rc = ModifyTrack( Dex.Trk, action, pos );
+ break;
+ default:
+ break;
+ }
+ return rc;
+}
+
+
+STATUS_T CmdModify(
wAction_t action,
coOrd pos )
/*
@@ -128,7 +243,7 @@ static STATUS_T CmdModify(
EPINX_T inx;
curveType_e curveType;
static BOOL_T changeTrackMode;
- static BOOL_T modifyRulerMode;
+
STATUS_T rc;
static DIST_T trackGauge;
@@ -143,7 +258,8 @@ static STATUS_T CmdModify(
switch (action&0xFF) {
case C_START:
- InfoMessage( _("Select track to modify") );
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ InfoMessage( _("Select a track to modify, Left-Click change length, Right-Click to add flextrack") );
Dex.Trk = NULL;
tempSegs_da.cnt = 0;
/*ChangeParameter( &easementPD );*/
@@ -151,21 +267,28 @@ static STATUS_T CmdModify(
changeTrackMode = modifyRulerMode = FALSE;
modifyBezierMode = FALSE;
modifyCornuMode = FALSE;
+ modifyDrawMode = FALSE;
+ modifyExtendMode = FALSE;
return C_CONTINUE;
case C_DOWN:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if (modifyBezierMode)
return ModifyBezier(C_DOWN, pos);
if (modifyCornuMode)
return ModifyCornu(C_DOWN, pos);
+ if (modifyDrawMode)
+ return ModifyDraw(C_DOWN, pos);
+ /*no break*/
+ case C_LDOUBLE:
DYNARR_SET( trkSeg_t, tempSegs_da, 2 );
tempSegs(0).color = wDrawColorBlack;
tempSegs(0).width = 0;
tempSegs(1).color = wDrawColorBlack;
tempSegs(1).width = 0;
tempSegs_da.cnt = 0;
- SnapPos( &pos );
Dex.Trk = OnTrack( &pos, TRUE, FALSE );
+ //Dex.Trk = trk;
if (Dex.Trk == NULL) {
if ( ModifyRuler( C_DOWN, pos ) == C_CONTINUE )
modifyRulerMode = TRUE;
@@ -173,6 +296,7 @@ static STATUS_T CmdModify(
}
if (!CheckTrackLayer( Dex.Trk ) ) {
Dex.Trk = NULL;
+
return C_CONTINUE;
}
trackGauge = (IsTrack(Dex.Trk)?GetTrkGauge(Dex.Trk):0.0);
@@ -185,21 +309,38 @@ static STATUS_T CmdModify(
}
return C_CONTINUE; //That's it
}
- if (QueryTrack( Dex.Trk, Q_IS_CORNU )) { //Bezier
+ if (QueryTrack( Dex.Trk, Q_IS_CORNU )) { //Cornu
modifyCornuMode = TRUE;
if (ModifyCornu(C_START, pos) != C_CONTINUE) { //Call Start with track
- modifyCornuMode = FALSE; //Function rejected Bezier
+ modifyCornuMode = FALSE; //Function rejected Cornu
Dex.Trk =NULL;
tempSegs_da.cnt = 0;
+
}
return C_CONTINUE; //That's it
}
- if ( (MyGetKeyState()&WKEY_SHIFT) &&
+ if (QueryTrack( Dex.Trk, Q_IS_DRAW )) {
+ modifyDrawMode = TRUE;
+ if (ModifyDraw(C_START, pos) != C_CONTINUE) {
+ modifyDrawMode = FALSE;
+ Dex.Trk = NULL;
+ tempSegs_da.cnt = 0;
+ }
+ return C_CONTINUE;
+ }
+
+ if ((action&0xFF) == C_LDOUBLE) return C_ERROR;
+
+ if ((MyGetKeyState()&WKEY_CTRL)) goto extendTrack;
+
+
+
+ if ( (MyGetKeyState()&WKEY_SHIFT) && //Free to change radius
QueryTrack( Dex.Trk, Q_CAN_MODIFYRADIUS )&&
- (inx=PickUnconnectedEndPoint(pos,Dex.Trk)) >= 0 ) {
+ ((inx=PickUnconnectedEndPoint(pos,Dex.Trk)) >= 0 )) {
trk = Dex.Trk;
- while ( (trk1=GetTrkEndTrk(trk,1-inx)) &&
+ while ( (trk1=GetTrkEndTrk(trk,1-inx)) && //Means next track to mine even if can be end...
QueryTrack(trk1, Q_CANNOT_BE_ON_END) ) {
inx = GetEndPtConnectedToMe( trk1, trk );
trk = trk1;
@@ -208,7 +349,8 @@ static STATUS_T CmdModify(
UndoStart( _("Change Track"), "Change( T%d[%d] )", GetTrkIndex(Dex.Trk), Dex.params.ep );
inx = GetEndPtConnectedToMe( trk1, trk );
Dex.Trk = NULL;
- DeleteTrack(trk, TRUE);
+ UndrawNewTrack( trk );
+ DeleteTrack(trk, TRUE); //Get rid of original track
if ( !GetTrkEndTrk( trk1, inx ) ) {
Dex.Trk = trk1;
Dex.pos00 = GetTrkEndPos( Dex.Trk, inx );
@@ -218,16 +360,70 @@ static STATUS_T CmdModify(
}
ErrorMessage( MSG_CANNOT_CHANGE );
}
+ ModifyTrack(Dex.Trk, C_START, pos); //Basically trim via Modify...
rc = ModifyTrack( Dex.Trk, C_DOWN, pos );
if ( rc != C_CONTINUE ) {
Dex.Trk = NULL;
rc = C_CONTINUE;
}
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
- MainRedraw();
- MapRedraw();
return rc;
+ case wActionMove:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ if (modifyCornuMode) return ModifyCornu(wActionMove,pos);
+ if (modifyDrawMode) return ModifyDraw(wActionMove,pos);
+ if (modifyBezierMode) return ModifyBezier(wActionMove, pos);
+ track_p t;
+ if (((t=OnTrack(&pos,FALSE,TRUE))!= NULL) && CheckTrackLayerSilent( t )) {
+ EPINX_T ep = PickUnconnectedEndPointSilent(pos, t);
+ if (QueryTrack( t, Q_IS_CORNU )) {
+ CreateCornuAnchor(pos,FALSE);
+ } else if ( QueryTrack( t, Q_CAN_MODIFY_CONTROL_POINTS )) {
+ CreateRadiusAnchor(pos,NormalizeAngle(GetAngleAtPoint(t,pos,NULL,NULL)+90.0),TRUE);
+ CreateEndAnchor(pos,FALSE);
+ } else if (QueryTrack(t,Q_CAN_ADD_ENDPOINTS)){ //Turntable
+ trackParams_t tp;
+ if (!GetTrackParams(PARAMS_CORNU, t, pos, &tp)) return C_CONTINUE;
+ ANGLE_T a = tp.angle;
+ Translate(&pos,tp.ttcenter,a,tp.ttradius);
+ CreateRadiusAnchor(pos,a,FALSE);
+ } else if (QueryTrack(t,Q_CAN_EXTEND)) {
+ if (ep != -1) {
+ if (MyGetKeyState()&WKEY_CTRL) {
+ pos = GetTrkEndPos(t,ep);
+ CreateEndAnchor(pos,FALSE);
+ CreateRadiusAnchor(pos,GetTrkEndAngle(t,ep),FALSE);
+ CreateRadiusAnchor(pos,GetTrkEndAngle(t,ep)+90,TRUE);
+ } else {
+ CreateEndAnchor(pos,FALSE);
+ if ((MyGetKeyState()&WKEY_SHIFT) && //Shift Down
+ QueryTrack( t, Q_CAN_MODIFYRADIUS ) && // Straight or Curve
+ ((inx=PickUnconnectedEndPointSilent(pos,t)) >= 0 )) { //Which has an open end
+ if (GetTrkEndTrk(t,1-inx)) // Has to have a track on other end
+ CreateRadiusAnchor(pos,NormalizeAngle(GetAngleAtPoint(t,pos,NULL,NULL)+90.0),TRUE);
+ }
+ CreateRadiusAnchor(pos,GetAngleAtPoint(t,pos,NULL,NULL),TRUE);
+ }
+ }
+ } else if (ep>=0){ //Turnout
+ pos = GetTrkEndPos(t, ep);
+ CreateEndAnchor(pos,TRUE);
+ if ( (MyGetKeyState()&WKEY_CTRL)) {
+ CreateRadiusAnchor(pos,NormalizeAngle(GetTrkEndAngle(t,ep)),FALSE);
+ CreateRadiusAnchor(pos,GetTrkEndAngle(t,ep)+90,TRUE);
+ CreateEndAnchor(pos,TRUE);
+ } else {
+ CreateRadiusAnchor(pos,NormalizeAngle(GetTrkEndAngle(t,ep)),FALSE);
+ CreateEndAnchor(pos,TRUE);
+ }
+ }
+ } else if (((t=OnTrack(&pos,FALSE,FALSE))!= NULL)
+ && (!(GetLayerFrozen(GetTrkLayer(t)) && GetLayerModule(GetTrkLayer(t))))
+ && (QueryTrack(t, Q_IS_DRAW ) && !QueryTrack(t, Q_IS_TEXT)) ) {
+ CreateEndAnchor(pos,FALSE);
+ }
+ return C_CONTINUE;
+
case C_MOVE:
if ( modifyRulerMode )
return ModifyRuler( C_MOVE, pos );
@@ -237,21 +433,22 @@ static STATUS_T CmdModify(
return ModifyBezier(C_MOVE, pos);
if ( modifyCornuMode )
return ModifyCornu(C_MOVE, pos);
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
+ if ( modifyDrawMode)
+ return ModifyDraw(C_MOVE, pos);
+ if (modifyExtendMode && (MyGetKeyState()&WKEY_CTRL))
+ goto extendTrackMove;
tempSegs_da.cnt = 0;
+
SnapPos( &pos );
rc = ModifyTrack( Dex.Trk, C_MOVE, pos );
if ( rc != C_CONTINUE ) {
rc = C_CONTINUE;
Dex.Trk = NULL;
}
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
- MainRedraw();
- MapRedraw();
return rc;
-
case C_UP:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if (Dex.Trk == NULL)
return C_CONTINUE;
if ( modifyRulerMode )
@@ -260,58 +457,71 @@ static STATUS_T CmdModify(
return ModifyBezier( C_UP, pos);
if (modifyCornuMode)
return ModifyCornu(C_UP, pos);
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
+ if (modifyDrawMode)
+ return ModifyDraw(C_UP, pos);
+ if ((MyGetKeyState()&WKEY_CTRL)) goto extendTrackUp;
+
tempSegs_da.cnt = 0;
+
SnapPos( &pos );
UndoStart( _("Modify Track"), "Modify( T%d[%d] )", GetTrkIndex(Dex.Trk), Dex.params.ep );
UndoModify( Dex.Trk );
rc = ModifyTrack( Dex.Trk, C_UP, pos );
UndoEnd();
- //changeTrackMode = FALSE;
Dex.Trk = NULL;
- MainRedraw();
- MapRedraw();
return rc;
- case C_RDOWN:
+ case C_RDOWN: //This is same as context menu....
+extendTrack:
+ DYNARR_RESET(trkSeg_t,anchors_da);
changeTrackMode = TRUE;
+ modifyExtendMode = TRUE;
modifyRulerMode = FALSE;
modifyBezierMode = FALSE;
modifyCornuMode = FALSE;
- Dex.Trk = OnTrack( &pos, TRUE, TRUE );
- if (Dex.Trk) {
- if (!CheckTrackLayer( Dex.Trk ) ) {
- Dex.Trk = NULL;
- return C_CONTINUE;
- }
- trackGauge = GetTrkGauge( Dex.Trk );
- Dex.pos00 = pos;
-CHANGE_TRACK:
- if (GetTrackParams( PARAMS_EXTEND, Dex.Trk, Dex.pos00, &Dex.params)) {
- if (Dex.params.ep == -1) {
+ modifyDrawMode = FALSE;
+ Dex.first = FALSE;
+ if (((action&0xFF) == C_RDOWN) || ((action&0xFF)== C_DOWN)) {
+ Dex.Trk = OnTrack( &pos, TRUE, TRUE );
+ if (Dex.Trk) {
+ if (!CheckTrackLayer( Dex.Trk ) ) {
Dex.Trk = NULL;
return C_CONTINUE;
- break;
}
- if (Dex.params.ep == 0) {
- Dex.params.arcR = -Dex.params.arcR;
+ trackGauge = GetTrkGauge( Dex.Trk );
+ Dex.pos00 = pos;
+ CHANGE_TRACK:
+ if (GetTrackParams( PARAMS_EXTEND, Dex.Trk, Dex.pos00, &Dex.params)) {
+ if (Dex.params.ep == -1) {
+ Dex.Trk = NULL;
+ return C_CONTINUE;
+ break;
+ }
+ if (Dex.params.ep == 0) {
+ Dex.params.arcR = -Dex.params.arcR;
+ }
+ Dex.pos00 = GetTrkEndPos(Dex.Trk,Dex.params.ep);
+ Dex.angle = GetTrkEndAngle( Dex.Trk,Dex.params.ep);
+ Translate( &Dex.pos00x, Dex.pos00, Dex.angle, 10.0 );
+ LOG( log_modify, 1, ("extend endPt[%d] = [%0.3f %0.3f] A%0.3f\n",
+ Dex.params.ep, Dex.pos00.x, Dex.pos00.y, Dex.angle ) )
+ InfoMessage( _("Drag to add flex track") );
+ } else {
+ return C_ERROR;
}
- Dex.pos00 = GetTrkEndPos(Dex.Trk,Dex.params.ep);
- Dex.angle = GetTrkEndAngle( Dex.Trk,Dex.params.ep);
- Translate( &Dex.pos00x, Dex.pos00, Dex.angle, 10.0 );
-LOG( log_modify, 1, ("extend endPt[%d] = [%0.3f %0.3f] A%0.3f\n",
- Dex.params.ep, Dex.pos00.x, Dex.pos00.y, Dex.angle ) )
- InfoMessage( _("Drag to create new track segment") );
} else {
+ InfoMessage ( _("No track to extend"));
return C_ERROR;
}
+ Dex.first = TRUE;
+ } else if (!Dex.Trk) {
+ InfoMessage ( _("No track selected"));
+ return C_ERROR;
}
- Dex.first = TRUE;
- MainRedraw();
- MapRedraw();
/* no break */
case C_RMOVE:
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
+extendTrackMove:
+ DYNARR_RESET(trkSeg_t,anchors_da);
tempSegs_da.cnt = 0;
Dex.valid = FALSE;
if (Dex.Trk == NULL) return C_CONTINUE;
@@ -320,7 +530,8 @@ LOG( log_modify, 1, ("extend endPt[%d] = [%0.3f %0.3f] A%0.3f\n",
return C_CONTINUE;
Dex.first = FALSE;
Dex.pos01 = Dex.pos00;
- if (Dex.params.type == curveTypeCornu) { //Restrict Cornu drag out to match end
+
+ if (Dex.params.type == curveTypeCornu) { //Always Restrict Cornu drag out to match end
ANGLE_T angle2 = NormalizeAngle(FindAngle(pos, Dex.pos00)-Dex.angle);
if (angle2 > 90.0 && angle2 < 270.0) {
if (Dex.params.cornuRadius[Dex.params.ep] == 0) {
@@ -346,11 +557,6 @@ LOG( log_modify, 1, ("extend endPt[%d] = [%0.3f %0.3f] A%0.3f\n",
ErrorMessage( MSG_TRK_TOO_SHORT, "First ", PutDim(fabs(minLength-d)) );
return C_CONTINUE;
}
- a0 = Dex.angle + (Dex.jointD.negate?-90.0:+90.0);
- Translate( &Dex.pos01, Dex.pos00, a0, Dex.jointD.x );
- Translate( &Dex.curveData.pos1, Dex.curveData.pos1,
- a0, Dex.jointD.x );
-LOG( log_modify, 2, ("A=%0.3f X=%0.3f\n", a0, Dex.jointD.x ) )
} else {
Dex.jointD.d1 = 0.0;
}
@@ -376,44 +582,55 @@ LOG( log_modify, 2, ("A=%0.3f X=%0.3f\n", a0, Dex.jointD.x ) )
return C_CONTINUE;
} else if ( curveType == curveTypeCurve ) {
Dex.r1 = Dex.curveData.curveRadius;
- if ( easeR > 0.0 && Dex.r1 < easeR ) {
- ErrorMessage( MSG_RADIUS_LSS_EASE_MIN,
- FormatDistance( Dex.r1 ), FormatDistance( easeR ) );
- return C_CONTINUE;
- }
- if ( Dex.r1*2.0*M_PI*Dex.curveData.a1/360.0 > mapD.size.x+mapD.size.y ) {
- ErrorMessage( MSG_CURVE_TOO_LARGE );
- return C_CONTINUE;
- }
- if ( NormalizeAngle( FindAngle( Dex.pos00, pos ) - Dex.angle ) > 180.0 )
- Dex.r1 = -Dex.r1;
if ( QueryTrack( Dex.Trk, Q_IGNORE_EASEMENT_ON_EXTEND ) ) {
- /* Ignore easements when extending turnouts */
+ /* Ignore easements when extending turnouts or turntables */
Dex.jointD.x =
Dex.jointD.r0 = Dex.jointD.r1 =
Dex.jointD.l0 = Dex.jointD.l1 =
Dex.jointD.d0 = Dex.jointD.d1 = 0.0;
Dex.jointD.flip = Dex.jointD.negate = Dex.jointD.Scurve = FALSE;
- } else {
- if (ComputeJoint( Dex.params.arcR, Dex.r1, &Dex.jointD ) == E_ERROR)
- return C_CONTINUE;
- d = Dex.params.len - Dex.jointD.d0;
- if (d <= minLength) {
- ErrorMessage( MSG_TRK_TOO_SHORT, "First ", PutDim(fabs(minLength-d)) );
- return C_CONTINUE;
+ d = Dex.curveData.curveRadius * Dex.curveData.a1 * 2.0*M_PI/360.0;
+ } else { /* Easement code */
+ if (easementVal<0.0) { //Cornu Join - need to estimate a "good" easement length
+ d = Dex.curveData.curveRadius * Dex.curveData.a1 * 2.0*M_PI/360.0;
+ Dex.jointD.d0 = Dex.jointD.d1 =0.75*72*12/GetTrkScale(Dex.Trk); //Easement 1.5 cars long to start
+ if (Dex.jointD.d0>(GetTrkLength(Dex.Trk,0,1)/2))
+ Dex.jointD.d0 = GetTrkLength(Dex.Trk,0,1)/2;
+ if (Dex.jointD.d1>d/2)
+ Dex.jointD.d1 = d/2;
+ Dex.jointD.negate = DifferenceBetweenAngles(Dex.angle,FindAngle(Dex.pos00,pos))<0.0;
+ Dex.jointD.x = 2*trackGauge; //Signal an easement present to JoinTracks
+ } else {
+ if ( easeR > 0.0 && Dex.r1 < easeR ) {
+ ErrorMessage( MSG_RADIUS_LSS_EASE_MIN,
+ FormatDistance( Dex.r1 ), FormatDistance( easeR ) );
+ return C_CONTINUE;
+ }
+ if ( Dex.r1*2.0*M_PI*Dex.curveData.a1/360.0 > mapD.size.x+mapD.size.y ) {
+ ErrorMessage( MSG_CURVE_TOO_LARGE );
+ return C_CONTINUE;
+ }
+ if ( NormalizeAngle( FindAngle( Dex.pos00, pos ) - Dex.angle ) > 180.0 )
+ Dex.r1 = - Dex.r1;
+ if (ComputeJoint( Dex.params.arcR, Dex.r1, &Dex.jointD ) == E_ERROR)
+ return C_CONTINUE;
+ d = Dex.params.len - Dex.jointD.d0;
+ if (d <= minLength) {
+ ErrorMessage( MSG_TRK_TOO_SHORT, "First ", PutDim(fabs(minLength-d)) );
+ return C_CONTINUE;
+ }
}
+ d -= Dex.jointD.d1;
+ a0 = Dex.angle + (Dex.jointD.negate?-90.0:+90.0);
+ Translate( &Dex.pos01, Dex.pos00, a0, Dex.jointD.x );
+ Translate( &Dex.curveData.curvePos, Dex.curveData.curvePos,
+ a0, Dex.jointD.x );
+LOG( log_modify, 2, ("A=%0.3f X=%0.3f\n", a0, Dex.jointD.x ) )
}
- d = Dex.curveData.curveRadius * Dex.curveData.a1 * 2.0*M_PI/360.0;
- d -= Dex.jointD.d1;
if (d <= minLength) {
ErrorMessage( MSG_TRK_TOO_SHORT, "Extending ", PutDim(fabs(minLength-d)) );
return C_CONTINUE;
}
- a0 = Dex.angle + (Dex.jointD.negate?-90.0:+90.0);
- Translate( &Dex.pos01, Dex.pos00, a0, Dex.jointD.x );
- Translate( &Dex.curveData.curvePos, Dex.curveData.curvePos,
- a0, Dex.jointD.x );
-LOG( log_modify, 2, ("A=%0.3f X=%0.3f\n", a0, Dex.jointD.x ) )
tempSegs(0).type = SEG_CRVTRK;
tempSegs(0).width = 0;
tempSegs(0).u.c.center = Dex.curveData.curvePos;
@@ -421,9 +638,9 @@ LOG( log_modify, 2, ("A=%0.3f X=%0.3f\n", a0, Dex.jointD.x ) )
tempSegs(0).u.c.a0 = Dex.curveData.a0;
tempSegs(0).u.c.a1 = Dex.curveData.a1;
tempSegs_da.cnt = 1;
- d = D2R(Dex.curveData.a1);
- if (d < 0.0)
- d = 2*M_PI + d;
+ double da = D2R(Dex.curveData.a1);
+ if (da < 0.0)
+ da = 2*M_PI + da;
a = NormalizeAngle( Dex.angle - FindAngle( Dex.pos00, Dex.curveData.curvePos ) );
if ( a < 180.0 )
a = NormalizeAngle( Dex.curveData.a0-90 );
@@ -433,17 +650,15 @@ LOG( log_modify, 2, ("A=%0.3f X=%0.3f\n", a0, Dex.jointD.x ) )
if (action != C_RDOWN)
InfoMessage( _("Curve Track: Radius=%s Length=%s Angle=%0.3f"),
FormatDistance( Dex.curveData.curveRadius ),
- FormatDistance( Dex.curveData.curveRadius * d),
+ FormatDistance( Dex.curveData.curveRadius * da),
Dex.curveData.a1 );
}
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
- MainRedraw();
- MapRedraw();
return C_CONTINUE;
case C_RUP:
+extendTrackUp:
changeTrackMode = FALSE;
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
+ modifyExtendMode = FALSE;
tempSegs_da.cnt = 0;
if (Dex.Trk == NULL) return C_CONTINUE;
if (!Dex.valid)
@@ -453,22 +668,24 @@ LOG( log_modify, 2, ("A=%0.3f X=%0.3f\n", a0, Dex.jointD.x ) )
curveType = Dex.curveData.type;
if ( curveType == curveTypeStraight ) {
- if ( Dex.params.type == curveTypeStraight && Dex.params.len > 0 ) {
- //UndrawNewTrack( Dex.Trk );
- UndoModify( Dex.Trk );
- AdjustStraightEndPt( Dex.Trk, Dex.params.ep, Dex.curveData.pos1 );
- UndoEnd();
- DrawNewTrack(Dex.Trk );
- MainRedraw();
- MapRedraw();
- return C_TERMINATE;
+ if (QueryTrack(Dex.Trk,Q_CAN_EXTEND)) //Check it isn't a turnout end....
+ if ( Dex.params.type == curveTypeStraight &&
+ FindDistance(Dex.pos01, Dex.curveData.pos1) > 0 ) {
+ UndoModify( Dex.Trk );
+ AdjustStraightEndPt( Dex.Trk, Dex.params.ep, Dex.curveData.pos1 );
+ UndoEnd();
+ DrawNewTrack(Dex.Trk );
+ return C_TERMINATE;
}
+ if (FindDistance(Dex.pos01, Dex.curveData.pos1) == 0) return C_ERROR;
+LOG( log_modify, 1, ("L = %0.3f, P0 = %0.3f, P1 = %0.3f\n",
+ Dex.params.len, Dex.pos01, Dex.curveData.pos1 ) )
trk = NewStraightTrack( Dex.pos01, Dex.curveData.pos1 );
inx = 0;
} else if ( curveType == curveTypeCurve ) {
-LOG( log_modify, 1, ("A0 = %0.3f, A1 = %0.3f\n",
- Dex.curveData.a0, Dex.curveData.a1 ) )
+LOG( log_modify, 1, ("R = %0.3f, A0 = %0.3f, A1 = %0.3f\n",
+ Dex.curveData.curveRadius, Dex.curveData.a0, Dex.curveData.a1 ) )
trk = NewCurvedTrack( Dex.curveData.curvePos, Dex.curveData.curveRadius,
Dex.curveData.a0, Dex.curveData.a1, 0 );
inx = PickUnconnectedEndPoint( Dex.pos01, trk );
@@ -478,39 +695,86 @@ LOG( log_modify, 1, ("A0 = %0.3f, A1 = %0.3f\n",
} else {
return C_ERROR;
}
- //UndrawNewTrack( Dex.Trk );
CopyAttributes( Dex.Trk, trk );
- JoinTracks( Dex.Trk, Dex.params.ep, Dex.pos00, trk, inx, Dex.pos01, &Dex.jointD );
+ if (Dex.jointD.d1 == 0) {
+ DrawEndPt( &mainD, Dex.Trk, Dex.params.ep, wDrawColorWhite );
+ ConnectTracks(Dex.Trk, Dex.params.ep, trk, inx);
+ DrawEndPt( &mainD, Dex.Trk, Dex.params.ep, wDrawColorBlack );
+ } else {
+ UndrawNewTrack( Dex.Trk );
+ JoinTracks( Dex.Trk, Dex.params.ep, Dex.pos00, trk, inx, Dex.pos01, &Dex.jointD );
+ DrawNewTrack( Dex.Trk );
+ }
UndoEnd();
+ tempSegs_da.cnt = 0;
DrawNewTrack( trk );
- DrawNewTrack( Dex.Trk );
- Dex.Trk = NULL;
- MainRedraw();
- MapRedraw();
return C_TERMINATE;
case C_REDRAW:
if (modifyBezierMode) return ModifyBezier(C_REDRAW, pos);
if (modifyCornuMode) return ModifyCornu(C_REDRAW, pos);
- if ( (!changeTrackMode) && Dex.Trk && !QueryTrack( Dex.Trk, Q_MODIFY_REDRAW_DONT_UNDRAW_TRACK ) )
- UndrawNewTrack( Dex.Trk );
+ if (modifyDrawMode) return ModifyDraw(C_REDRAW, pos);
DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
+ if (anchors_da.cnt)
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
+
return C_CONTINUE;
case C_TEXT:
+ if ((action>>8) == 'c') {
+ panCenter = pos;
+ LOG( log_pan, 2, ( "PanCenter:Mod-%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ PanHere((void*)0);
+ return C_CONTINUE;
+ }
+ if ((action>>8) == 'e') {
+ DoZoomExtents(0);
+ }
+ if ((action>>8) == '0' || (action>>8 == 'o')) {
+ PanMenuEnter('o');
+ }
if ( !Dex.Trk )
return C_CONTINUE;
if (modifyBezierMode)
return ModifyBezier(action, pos);
if (modifyCornuMode)
return ModifyCornu(action, pos);
+ if (modifyDrawMode)
+ return ModifyDraw(action, pos);
+ return ModifyTrack( Dex.Trk, action, pos );
+
+ case C_CMDMENU:
+ if ( !Dex.Trk ) {
+ menuPos = pos;
+ wMenuPopupShow(modPopupM);
+ return C_CONTINUE;
+ }
+ if (modifyBezierMode)
+ return ModifyBezier(action, pos);
+ if (modifyCornuMode)
+ return ModifyCornu(action, pos);
+ if (modifyDrawMode)
+ return ModifyDraw(action, pos);
return ModifyTrack( Dex.Trk, action, pos );
+ case C_LCLICK:
+ if ( modifyDrawMode) {
+ rc = ModifyDraw(C_DOWN, pos);
+ if (rc == C_CONTINUE)
+ return ModifyDraw(C_UP, pos);
+ }
+ if (modifyCornuMode)
+ return ModifyCornu(action, pos);
+ /*no break*/
default:
if (modifyBezierMode) return ModifyBezier(action, pos);
if (modifyCornuMode) return ModifyCornu(action, pos);
+ if (modifyDrawMode) return ModifyDraw(action, pos);
+ if (Dex.Trk)
+ return ModifyTrack( Dex.Trk, action, pos );
return C_CONTINUE;
}
+ return C_CONTINUE;
}
@@ -521,9 +785,21 @@ LOG( log_modify, 1, ("A0 = %0.3f, A1 = %0.3f\n",
*/
#include "bitmaps/extend.xpm"
+extern wIndex_t panCmdInx;
+extern wIndex_t selectCmdInx;
+extern wIndex_t describeCmdInx;
+
void InitCmdModify( wMenu_p menu )
{
- modifyCmdInx = AddMenuButton( menu, CmdModify, "cmdModify", _("Modify"), wIconCreatePixMap(extend_xpm), LEVEL0_50, IC_STICKY|IC_POPUP, ACCL_MODIFY, NULL );
+ modifyCmdInx = AddMenuButton( menu, CmdModify, "cmdModify", _("Modify"), wIconCreatePixMap(extend_xpm), LEVEL0_50, IC_STICKY|IC_POPUP|IC_WANT_MOVE|IC_CMDMENU, ACCL_MODIFY, NULL );
log_modify = LogFindIndex( "modify" );
+ modPopupM = MenuRegister( "Modify Context Menu" );
+ wMenuPushCreate(modPopupM, "cmdSelectMode", GetBalloonHelpStr("cmdSelectMode"), 0, DoCommandB, (void*) (intptr_t) selectCmdInx);
+ wMenuPushCreate(modPopupM, "cmdDescribeMode", GetBalloonHelpStr("cmdDescribeMode"), 0, DoCommandB, (void*) (intptr_t) describeCmdInx);
+ wMenuPushCreate(modPopupM, "cmdPanMode", GetBalloonHelpStr("cmdPanMode"), 0, DoCommandB, (void*) (intptr_t) panCmdInx);
+ wMenuSeparatorCreate(modPopupM);
+ wMenuPushCreate(modPopupM, "", _("Zoom In"), 0,(wMenuCallBack_p) DoZoomUp, (void*) 1);
+ wMenuPushCreate(modPopupM, "", _("Zoom Out"), 0, (wMenuCallBack_p) DoZoomDown, (void*) 1);
+ wMenuPushCreate(modPopupM, "", _("Pan center - 'c'"), 0, (wMenuCallBack_p) PanHere, (void*) 3);
}
diff --git a/app/bin/cnote.c b/app/bin/cnote.c
index 3cbd28d..0a015f1 100644
--- a/app/bin/cnote.c
+++ b/app/bin/cnote.c
@@ -1,5 +1,5 @@
/** \file cnote.c
- * NOTE
+ * Main layout note
*/
/* XTrkCad - Model Railroad CAD
@@ -21,26 +21,13 @@
*/
#include <string.h>
-#include "cundo.h"
#include "custom.h"
+#include "dynstring.h"
#include "fileio.h"
#include "i18n.h"
+#include "misc.h"
#include "param.h"
-#include "track.h"
-#include "utility.h"
-
-static TRKTYP_T T_NOTE = -1;
-
-static wDrawBitMap_p note_bm;
-struct extraData {
- coOrd pos;
- char * text;
-};
-
-extern BOOL_T inDescribeCmd;
-
-#define NOTEHIDE "CNOTE HIDE"
-#define NOTEDONE "CNOTE DONE"
+#include "include/utf8convert.h"
static char * mainText = NULL;
static wWin_p noteW;
@@ -54,18 +41,6 @@ static paramData_t notePLs[] = {
static paramGroup_t notePG = { "note", 0, notePLs, sizeof notePLs/sizeof notePLs[0] };
-static track_p NewNote(wIndex_t index, coOrd p, long size)
-{
- track_p t;
- struct extraData * xx;
- t = NewTrack(index, T_NOTE, 0, sizeof *xx);
- xx = GetTrkExtraData(t);
- xx->pos = p;
- xx->text = (char*)MyMalloc((int)size + 2);
- SetBoundingBox(t, p, p);
- return t;
-}
-
void ClearNote(void)
{
if (mainText) {
@@ -82,12 +57,6 @@ static void NoteOk(void * junk)
len = wTextGetSize(noteT);
mainText = (char*)MyMalloc(len+2);
wTextGetText(noteT, mainText, len);
-
- if (mainText[len-1] != '\n') {
- mainText[len++] = '\n';
- }
-
- mainText[len] = '\0';
}
wHide(noteW);
@@ -98,7 +67,7 @@ void DoNote(void)
{
if (noteW == NULL) {
noteW = ParamCreateDialog(&notePG, MakeWindowTitle(_("Note")), _("Ok"), NoteOk,
- NULL, FALSE, NULL, F_RESIZE, NULL);
+ wHide, FALSE, NULL, F_NOTTRANSIENT|F_RESIZE, NULL);
}
wTextClear(noteT);
@@ -109,365 +78,66 @@ void DoNote(void)
}
-
-/*****************************************************************************
- * NOTE OBJECT
- */
-
-static void DrawNote(track_p t, drawCmd_p d, wDrawColor color)
-{
- struct extraData *xx = GetTrkExtraData(t);
- coOrd p[4];
-
- if (d->scale >= 16) {
- return;
- }
-
- if ((d->funcs->options & wDrawOptTemp) == 0) {
- DrawBitMap(d, xx->pos, note_bm, color);
- } else {
- DIST_T dist;
- dist = 0.1*d->scale;
- p[0].x = p[1].x = xx->pos.x-dist;
- p[2].x = p[3].x = xx->pos.x+dist;
- p[1].y = p[2].y = xx->pos.y-dist;
- p[3].y = p[0].y = xx->pos.y+dist;
- DrawLine(d, p[0], p[1], 0, color);
- DrawLine(d, p[1], p[2], 0, color);
- DrawLine(d, p[2], p[3], 0, color);
- DrawLine(d, p[3], p[0], 0, color);
- }
-}
-
-static DIST_T DistanceNote(track_p t, coOrd * p)
-{
- struct extraData *xx = GetTrkExtraData(t);
- DIST_T d;
- d = FindDistance(*p, xx->pos);
-
- if (d < 1.0) {
- return d;
- }
-
- return 100000.0;
-}
-
-
-static struct {
- coOrd pos;
- unsigned int layer;
-} noteData;
-typedef enum { OR, LY, TX } noteDesc_e;
-static descData_t noteDesc[] = {
- /*OR*/ { DESC_POS, N_("Position"), &noteData.pos },
- /*LY*/ { DESC_LAYER, N_("Layer"), &noteData.layer },
- /*TX*/ { DESC_TEXT, NULL, NULL },
- { DESC_NULL }
-};
-
-static void UpdateNote(track_p trk, int inx, descData_p descUpd,
- BOOL_T needUndoStart)
-{
- struct extraData *xx = GetTrkExtraData(trk);
-
- switch (inx) {
- case OR:
- xx->pos = noteData.pos;
- SetBoundingBox(trk, xx->pos, xx->pos);
- MainRedraw();
- break;
-
- case LY:
- SetTrkLayer(trk, noteData.layer);
- MainRedraw();
- break;
-
- case -1:
- if (wTextGetModified((wText_p)noteDesc[TX].control0)) {
- int len;
-
- if (needUndoStart) {
- UndoStart(_("Change Track"), "Change Track");
- }
-
- UndoModify(trk);
- MyFree(xx->text);
- len = wTextGetSize((wText_p)noteDesc[TX].control0);
- xx->text = (char*)MyMalloc(len+2);
- wTextGetText((wText_p)noteDesc[TX].control0, xx->text, len);
-
- if (xx->text[len-1] != '\n') {
- xx->text[len++] = '\n';
- }
-
- xx->text[len] = '\0';
- }
- MainRedraw();
- break;
-
- default:
- break;
- }
-}
-
-
-static void DescribeNote(track_p trk, char * str, CSIZE_T len)
-{
- struct extraData * xx = GetTrkExtraData(trk);
- strcpy(str, _("Note: "));
- len -= strlen(_("Note: "));
- str += strlen(_("Note: "));
- strncpy(str, xx->text, len);
-
- for (; *str; str++) {
- if (*str=='\n') {
- *str = ' ';
- }
- }
-
- noteData.pos = xx->pos;
- noteDesc[TX].valueP = xx->text;
- noteDesc[OR].mode = 0;
- noteDesc[TX].mode = 0;
- noteDesc[LY].mode = DESC_NOREDRAW;
- DoDescribe(_("Note"), trk, noteDesc, UpdateNote);
-}
-
-static void DeleteNote(track_p t)
-{
- struct extraData *xx = GetTrkExtraData(t);
-
- if (xx->text) {
- MyFree(xx->text);
- }
-}
-
-static BOOL_T WriteNote(track_p t, FILE * f)
+BOOL_T WriteMainNote(FILE* f)
{
- struct extraData *xx = GetTrkExtraData(t);
- int len;
- BOOL_T addNL = FALSE;
BOOL_T rc = TRUE;
- len = strlen(xx->text);
-
- if (xx->text[len-1] != '\n') {
- len++;
- addNL = TRUE;
+ char *noteText = mainText;
+
+ if (noteText && *noteText) {
+#ifdef WINDOWS
+ char *out = NULL;
+ if (RequiresConvToUTF8(mainText)) {
+ unsigned cnt = strlen(mainText) * 2 + 1;
+ out = MyMalloc(cnt);
+ wSystemToUTF8(mainText, out, cnt);
+ noteText = out;
+ }
+#endif // WINDOWS
+
+
+ char * sText = ConvertToEscapedText( noteText );
+ rc &= fprintf(f, "NOTE MAIN 0 0 0 0 0 \"%s\"\n", sText )>0;
+ MyFree( sText );
+
+#ifdef WINDOWS
+ if (out) {
+ MyFree(out);
+ }
+#endif // WINDOWS
}
-
- rc &= fprintf(f, "NOTE %d %d 0 0 %0.6f %0.6f 0 %d\n", GetTrkIndex(t),
- GetTrkLayer(t),
- xx->pos.x, xx->pos.y, len)>0;
- rc &= fprintf(f, "%s%s", xx->text, addNL?"\n":"")>0;
- rc &= fprintf(f, " END\n")>0;
return rc;
}
+/**
+ * Read the layout main note
+ *
+ * \param line complete NOTE statement
+ */
-static void ReadNote(char * line)
+BOOL_T ReadMainNote(char *line)
{
- coOrd pos;
- DIST_T elev;
- CSIZE_T size;
- char * cp;
- struct extraData *xx;
- wIndex_t index;
- wIndex_t layer;
- int lineCount;
-
- if (strncmp(line, "NOTE MAIN", 9) == 0) {
- if (!GetArgs(line+9, paramVersion<3?"d":"0000d", &size)) {
- return;
- }
+ long size;
+ char * sNote = NULL;
- if (mainText) {
- MyFree(mainText);
- }
-
- mainText = (char*)MyMalloc(size+2);
- cp = mainText;
- } else {
- track_p t;
-
- if (!GetArgs(line+5, paramVersion<3?"XXpYd":paramVersion<9?"dL00pYd":"dL00pfd",
- &index, &layer, &pos, &elev, &size)) {
- return;
- }
-
- t = NewNote(index, pos, size+2);
- SetTrkLayer(t, layer);
- xx = GetTrkExtraData(t);
- cp = xx->text;
- }
-
- lineCount = 0;
-
- while (1) {
- int len;
- line = GetNextLine();
-
- if (strncmp(line, " END", 7) == 0) {
- break;
- }
-
- len = strlen(line);
-
- if (size > 0 && size < len) {
- InputError("NOTE text overflow", TRUE);
- size = -1;
- }
-
- if (size > 0) {
- if (lineCount != 0) {
- strcat(cp, "\n");
- cp++;
- size--;
- }
-
- strcpy(cp, line);
- cp += len;
- size -= len;
- }
-
- lineCount++;
- }
-
- if (cp[-1] != '\n') {
- *cp++ = '\n';
+ if (!GetArgs(line + 9,
+ paramVersion < 3 ? "l" :
+ paramVersion < 12 ? "0000l":
+ "0000lq", &size, &sNote)) {
+ return FALSE;
}
- *cp = '\0';
-}
-
-
-static void MoveNote(track_p trk, coOrd orig)
-{
- struct extraData * xx = GetTrkExtraData(trk);
- xx->pos.x += orig.x;
- xx->pos.y += orig.y;
- SetBoundingBox(trk, xx->pos, xx->pos);
-}
-
-
-static void RotateNote(track_p trk, coOrd orig, ANGLE_T angle)
-{
- struct extraData * xx = GetTrkExtraData(trk);
- Rotate(&xx->pos, orig, angle);
- SetBoundingBox(trk, xx->pos, xx->pos);
-}
-
-static void RescaleNote(track_p trk, FLOAT_T ratio)
-{
- struct extraData * xx = GetTrkExtraData(trk);
- xx->pos.x *= ratio;
- xx->pos.y *= ratio;
-}
-
-
-static trackCmd_t noteCmds = {
- "NOTE",
- DrawNote,
- DistanceNote,
- DescribeNote,
- DeleteNote,
- WriteNote,
- ReadNote,
- MoveNote,
- RotateNote,
- RescaleNote,
- NULL, /* audit */
- NULL, /* getAngle */
- NULL, /* split */
- NULL, /* traverse */
- NULL, /* enumerate */
- NULL /* redraw */
-};
-
-
-BOOL_T WriteMainNote(FILE* f)
-{
- BOOL_T rc = TRUE;
-
- if (mainText && *mainText) {
- rc &= fprintf(f, "NOTE MAIN 0 0 0 0 %lu\n", strlen(mainText))>0;
- rc &= fprintf(f, "%s", mainText)>0;
- rc &= fprintf(f, " END\n")>0;
+ if (mainText) {
+ MyFree(mainText);
}
- return rc;
+ if ( paramVersion < 12 )
+ mainText = ReadMultilineText();
+ else
+ mainText = sNote;
+ return TRUE;
}
-/*****************************************************************************
- * NOTE COMMAND
- */
-
-
-
-static STATUS_T CmdNote(wAction_t action, coOrd pos)
-{
- static coOrd oldPos;
- track_p trk;
- struct extraData * xx;
- const char* tmpPtrText;
- static int state_on = FALSE;
-
- switch (action) {
- case C_START:
- InfoMessage(_("Place a note on the layout"));
- return C_CONTINUE;
-
- case C_DOWN:
- state_on = TRUE;
- oldPos = pos;
- MainRedraw();
- return C_CONTINUE;
-
- case C_MOVE:
- oldPos = pos;
- MainRedraw();
- return C_CONTINUE;
- break;
-
- case C_UP:
- UndoStart(_("New Note"), "New Note");
- state_on = FALSE;
- MainRedraw();
- trk = NewNote(-1, pos, 2);
- DrawNewTrack(trk);
- xx = GetTrkExtraData(trk);
- tmpPtrText = _("Replace this text with your note");
- xx->text = (char*)MyMalloc(strlen(tmpPtrText) + 1);
- strcpy(xx->text, tmpPtrText);
- inDescribeCmd = TRUE;
- DescribeNote(trk, message, sizeof message);
- inDescribeCmd = FALSE;
- return C_CONTINUE;
-
- case C_REDRAW:
- if (state_on) DrawBitMap(&tempD, oldPos, note_bm, normalColor);
- return C_CONTINUE;
-
- case C_CANCEL:
- DescribeCancel();
- return C_CONTINUE;
- }
-
- return C_INFO;
-}
-
-
-#include "bitmaps/note.xbm"
-#include "bitmaps/cnote.xpm"
-
-void InitCmdNote(wMenu_p menu)
+void InitCmdNote()
{
ParamRegister(&notePG);
- AddMenuButton(menu, CmdNote, "cmdNote", _("Note"), wIconCreatePixMap(cnote_xpm),
- LEVEL0_50, IC_POPUP2, ACCL_NOTE, NULL);
-}
-
-void InitTrkNote(void)
-{
- note_bm = wDrawBitMapCreate(mainD.d, note_width, note_width, 8, 8, note_bits);
- T_NOTE = InitObject(&noteCmds);
}
diff --git a/app/bin/common.h b/app/bin/common.h
index 255e8d7..2db961f 100644
--- a/app/bin/common.h
+++ b/app/bin/common.h
@@ -24,6 +24,7 @@
#define COMMON_H
#include <stdlib.h>
+#include <stdint.h>
#ifndef TRUE
#define TRUE (1)
@@ -46,6 +47,11 @@ typedef struct {
POS_T x,y;
} coOrd;
+typedef struct {
+ coOrd pt;
+ int pt_type;
+} pts_t;
+
typedef int INT_T;
typedef int BOOL_T;
@@ -61,6 +67,11 @@ typedef int TRKINX_T;
typedef long DEBUGF_T;
typedef int REGION_T;
+enum paramFileState { PARAMFILE_UNLOADED = 0, PARAMFILE_NOTUSABLE, PARAMFILE_COMPATIBLE, PARAMFILE_FIT, PARAMFILE_MAXSTATE };
+
+#define SCALE_ANY (-2)
+#define SCALE_DEMO (-1)
+
typedef struct {
int cnt;
int max;
@@ -108,6 +119,17 @@ typedef struct {
} \
(DA).max = 0; \
(DA).cnt = 0; }
+#define DYNARR_REMOVE(T,DA,I) \
+ { \
+ { if ((DA).cnt-1 > I) { \
+ for (int i=I;i<(DA).cnt-1;i++) { \
+ (((T*)(DA).ptr)[i])= (((T*)(DA).ptr)[i+1]); \
+ } \
+ } \
+ } \
+ if ((DA.cnt)>=I) (DA).cnt--; \
+ }
+
#ifdef WINDOWS
#define M_PI 3.14159
diff --git a/app/bin/compound.c b/app/bin/compound.c
index d1a16f5..627d2ef 100644
--- a/app/bin/compound.c
+++ b/app/bin/compound.c
@@ -38,6 +38,7 @@
#include "track.h"
#include "utility.h"
#include "messages.h"
+#include "include/paramfile.h"
/*****************************************************************************
*
@@ -45,6 +46,25 @@
*
*/
+//Convert the internal path segment into the external one - which is based on the index count of only the track segments
+
+char ConvertPathSegToExternal(char signed pp, int segCnt,trkSeg_p segs) {
+
+ char signed new_pp;
+ int old_inx;
+ EPINX_T old_EP;
+ GetSegInxEP(pp,&old_inx,&old_EP);
+ int j = old_inx;
+ for (int i=0;i<old_inx;i++) {
+ if ( !IsSegTrack(&segs[i]) ) {
+ j--;
+ }
+ }
+ SetSegInxEP(&new_pp,j,old_EP);
+ return new_pp;
+
+}
+
BOOL_T WriteCompoundPathsEndPtsSegs(
FILE * f,
PATHPTR_T paths,
@@ -55,11 +75,12 @@ BOOL_T WriteCompoundPathsEndPtsSegs(
{
int i;
PATHPTR_T pp;
+
BOOL_T rc = TRUE;
for ( pp=paths; *pp; pp+=2 ) {
rc &= fprintf( f, "\tP \"%s\"", pp )>0;
- for ( pp+=strlen((char *)pp)+1; pp[0]!=0||pp[1]!=0; pp++ )
- rc &= fprintf( f, " %d", *pp )>0;
+ for ( pp+=strlen((char *)pp)+1; pp[0]!=0 || pp[1]!=0; pp++ )
+ rc &= fprintf( f, " %d", ConvertPathSegToExternal(pp[0],segCnt,segs) )>0;
rc &= fprintf( f, "\n" )>0;
}
for ( i=0; i<endPtCnt; i++ )
@@ -315,7 +336,7 @@ void DrawCompoundDescription(
return;
if ((labelEnable&LABELENABLE_TRKDESC)==0)
return;
- if ( (d->options&DC_GROUP) )
+ if ( (d->options&DC_SIMPLE) )
return;
if ( xx->special == TOpier ) {
desc = xx->u.pier.name;
@@ -340,18 +361,25 @@ void DrawCompoundDescription(
DIST_T CompoundDescriptionDistance(
coOrd pos,
- track_p trk )
+ track_p trk,
+ coOrd * dpos,
+ BOOL_T show_hidden,
+ BOOL_T * hidden)
{
struct extraData *xx = GetTrkExtraData(trk);
coOrd p1;
if (GetTrkType(trk) != T_TURNOUT && GetTrkType(trk) != T_STRUCTURE)
return 100000;
- if ( (GetTrkBits( trk ) & TB_HIDEDESC) != 0 )
+ if ( ((GetTrkBits( trk ) & TB_HIDEDESC) != 0 ) && !show_hidden)
return 100000;
p1 = xx->descriptionOrig;
+ coOrd offset = xx->descriptionOff;
+ if ( (GetTrkBits( trk ) & TB_HIDEDESC) != 0 ) offset = zero;
Rotate( &p1, zero, xx->angle );
- p1.x += xx->orig.x + xx->descriptionOff.x;
- p1.y += xx->orig.y + xx->descriptionOff.y;
+ p1.x += xx->orig.x + offset.x;
+ p1.y += xx->orig.y + offset.y;
+ if (hidden) *hidden = (GetTrkBits( trk ) & TB_HIDEDESC);
+ *dpos = p1;
return FindDistance( p1, pos );
}
@@ -370,6 +398,7 @@ STATUS_T CompoundDescriptionMove(
case C_DOWN:
editMode = TRUE;
REORIGIN( p0, xx->descriptionOrig, xx->angle, xx->orig )
+ DrawCompoundDescription( trk, &mainD, wDrawColorWhite );
case C_MOVE:
case C_UP:
@@ -383,13 +412,15 @@ STATUS_T CompoundDescriptionMove(
if (action == C_UP) {
editMode = FALSE;
}
- MainRedraw();
- MapRedraw();
+ if ( action == C_UP ) {
+ DrawCompoundDescription( trk, &mainD, color );
+ }
return action==C_UP?C_TERMINATE:C_CONTINUE;
break;
case C_REDRAW:
if (editMode) {
- DrawLine( &tempD, p0, p1, 0, wDrawColorBlack );
+ DrawCompoundDescription( trk, &tempD, wDrawColorBlue );
+ DrawLine( &tempD, p0, p1, 0, wDrawColorBlue );
}
}
@@ -405,6 +436,18 @@ STATUS_T CompoundDescriptionMove(
*
*/
+EXPORT void SetSegInxEP(
+ signed char * segChar,
+ int segInx,
+ EPINX_T segEP )
+{
+ if (segEP == 1) {
+ * segChar = -(segInx+1);
+ } else {
+ * segChar = (segInx+1);
+ }
+
+}
EXPORT void GetSegInxEP(
signed char segChar,
@@ -482,6 +525,7 @@ static struct {
FLOAT_T elev[4];
coOrd orig;
ANGLE_T angle;
+ descPivot_t pivot;
char manuf[STR_SIZE];
char name[STR_SIZE];
char partno[STR_SIZE];
@@ -490,9 +534,10 @@ static struct {
long pathCnt;
FLOAT_T grade;
DIST_T length;
+ drawLineType_e linetype;
unsigned int layerNumber;
} compoundData;
-typedef enum { E0, A0, C0, R0, Z0, E1, A1, C1, R1, Z1, E2, A2, C2, R2, Z2, E3, A3, C3, R3, Z3, GR, OR, AN, MN, NM, PN, EC, SC, LY } compoundDesc_e;
+typedef enum { E0, A0, C0, R0, Z0, E1, A1, C1, R1, Z1, E2, A2, C2, R2, Z2, E3, A3, C3, R3, Z3, GR, OR, AN, PV, MN, NM, PN, LT, SC, LY } compoundDesc_e;
static descData_t compoundDesc[] = {
/*E0*/ { DESC_POS, N_("End Pt 1: X,Y"), &compoundData.endPt[0] },
/*A0*/ { DESC_ANGLE, N_("Angle"), &compoundData.endAngle[0] },
@@ -517,10 +562,11 @@ static descData_t compoundDesc[] = {
/*GR*/ { DESC_FLOAT, N_("Grade"), &compoundData.grade },
/*OR*/ { DESC_POS, N_("Origin: X,Y"), &compoundData.orig },
/*AN*/ { DESC_ANGLE, N_("Angle"), &compoundData.angle },
+/*PV*/ { DESC_PIVOT, N_("Pivot"), &compoundData.pivot },
/*MN*/ { DESC_STRING, N_("Manufacturer"), &compoundData.manuf, sizeof(compoundData.manuf)},
/*NM*/ { DESC_STRING, N_("Name"), &compoundData.name, sizeof(compoundData.name) },
/*PN*/ { DESC_STRING, N_("Part No"), &compoundData.partno, sizeof(compoundData.partno)},
-/*EC*/ { DESC_LONG, N_("# End Pts"), &compoundData.epCnt },
+/*LT*/ { DESC_LIST, N_("LineType"), &compoundData.linetype },
/*SC*/ { DESC_LONG, N_("# Segments"), &compoundData.segCnt },
/*LY*/ { DESC_LAYER, N_("Layer"), &compoundData.layerNumber },
{ DESC_NULL } };
@@ -539,7 +585,11 @@ static void UpdateCompound( track_p trk, int inx, descData_p descUpd, BOOL_T nee
BOOL_T titleChanged, flipped, ungrouped, split;
char * newTitle;
- if ( inx == -1 ) {
+ switch ( inx ) {
+ case -1:
+ case MN:
+ case NM:
+ case PN:
titleChanged = FALSE;
ParseCompoundTitle( xtitle(xx), &mP, &mL, &nP, &nL, &pP, &pL );
if (mP == NULL) mP = "";
@@ -616,7 +666,7 @@ static void UpdateCompound( track_p trk, int inx, descData_p descUpd, BOOL_T nee
GetBoundingBox( trk, &hi, &lo );
if ( labelScale >= mainD.scale &&
!OFF_MAIND( lo, hi ) ) {
- DrawCompoundDescription( trk, &tempD, GetTrkColor(trk,&tempD) );
+ DrawCompoundDescription( trk, &mainD, wDrawColorWhite );
}
/*sprintf( message, "%s\t%s\t%s", manufS, nameS, partnoS );*/
if (xx->title) MyFree(xx->title);
@@ -626,12 +676,13 @@ static void UpdateCompound( track_p trk, int inx, descData_p descUpd, BOOL_T nee
xx->split = split;
if ( labelScale >= mainD.scale &&
!OFF_MAIND( lo, hi ) ) {
- DrawCompoundDescription( trk, &tempD, GetTrkColor(trk,&tempD) );
+ DrawCompoundDescription( trk, &mainD, GetTrkColor(trk,&tempD) );
}
return;
}
UndrawNewTrack( trk );
+ coOrd orig;
switch ( inx ) {
case OR:
pos.x = compoundData.orig.x - xx->orig.x;
@@ -643,17 +694,31 @@ static void UpdateCompound( track_p trk, int inx, descData_p descUpd, BOOL_T nee
case A1:
case A2:
case A3:
- if (inx==E3) ep=3;
- else if (inx==E2) ep=2;
- else if (inx==E1) ep=1;
+ if (inx==A3) ep=3;
+ else if (inx==A2) ep=2;
+ else if (inx==A1) ep=1;
else ep=0;
- RotateTrack( trk, xx->orig, NormalizeAngle( compoundData.endAngle[ep]-xx->angle ) );
+ RotateTrack( trk, GetTrkEndPos(trk,ep), NormalizeAngle( compoundData.endAngle[ep]-GetTrkEndAngle(trk,ep) ) );
ComputeCompoundBoundingBox( trk );
- compoundData.angle = xx->angle;
- compoundDesc[AN].mode |= DESC_CHANGE;
break;
case AN:
- RotateTrack( trk, xx->orig, NormalizeAngle( compoundData.angle-xx->angle ) );
+ orig = xx->orig;
+ GetBoundingBox(trk,&hi,&lo);
+ switch (compoundData.pivot) {
+ case DESC_PIVOT_MID:
+ orig.x = (hi.x-lo.x)/2+lo.x;
+ orig.y = (hi.y-lo.y)/2+lo.y;
+ break;
+ case DESC_PIVOT_SECOND:
+ orig.x = (hi.x-lo.x)/2+lo.x;
+ orig.y = (hi.y-lo.y)/2+lo.y;
+ orig.x = (orig.x - xx->orig.x)*2+xx->orig.x;
+ orig.y = (orig.y - xx->orig.y)*2+xx->orig.y;
+ break;
+ default:
+ break;
+ }
+ RotateTrack( trk, orig, NormalizeAngle( compoundData.angle-xx->angle ) );
ComputeCompoundBoundingBox( trk );
break;
case E0:
@@ -680,7 +745,7 @@ static void UpdateCompound( track_p trk, int inx, descData_p descUpd, BOOL_T nee
break;
for (int i=0;i<compoundData.epCnt;i++) {
if (i==ep) continue;
- ComputeElev( trk, i, FALSE, &compoundData.elev[i], NULL );
+ ComputeElev( trk, i, FALSE, &compoundData.elev[i], NULL, TRUE );
}
if ( compoundData.length > minLength )
compoundData.grade = fabs( (compoundData.elev[0]-compoundData.elev[1])/compoundData.length )*100.0;
@@ -719,6 +784,13 @@ static void UpdateCompound( track_p trk, int inx, descData_p descUpd, BOOL_T nee
compoundDesc[i*(E1-E0)+C0].mode |= DESC_CHANGE;
}
}
+ compoundData.orig = xx->orig;
+ compoundDesc[OR].mode |= DESC_CHANGE;
+ compoundData.angle = xx->angle;
+ compoundDesc[AN].mode |= DESC_CHANGE;
+ break;
+ case LT:
+ xx->lineType = compoundData.linetype;
break;
default:
break;
@@ -839,9 +911,10 @@ void DescribeCompound(
compoundDesc[MN].mode =
compoundDesc[NM].mode =
compoundDesc[PN].mode = 0 /*DESC_NOREDRAW*/;
- compoundDesc[EC].mode =
compoundDesc[SC].mode = DESC_RO;
compoundDesc[LY].mode = DESC_NOREDRAW;
+ compoundDesc[PV].mode = 0;
+ compoundData.pivot = DESC_PIVOT_FIRST;
if (compoundData.epCnt >0) {
for (int i=0;(i<compoundData.epCnt)&&(i<MAX_DESCRIBE_ENDS);i++) {
compoundDesc[A0+(E1-E0)*i].mode = (int)mode;
@@ -859,18 +932,37 @@ void DescribeCompound(
compoundDesc[C0+(E1-E0)*i].mode = DESC_IGNORE;
compoundDesc[R0+(E1-E0)*i].mode = DESC_IGNORE;
}
- ComputeElev( trk, i, FALSE, &compoundData.elev[i], NULL );
+ ComputeElev( trk, i, FALSE, &compoundData.elev[i], NULL, FALSE );
compoundDesc[Z0+(E1-E0)*i].mode = (EndPtIsDefinedElev(trk,i)?0:DESC_RO)|DESC_NOREDRAW;
}
compoundDesc[GR].mode = DESC_RO;
}
+ if ( compoundData.epCnt == 2 )
+ compoundData.length = GetTrkLength( trk, 0, 1 );
if ( compoundData.length > minLength && compoundData.epCnt > 1)
compoundData.grade = fabs( (compoundData.elev[0]-compoundData.elev[1])/compoundData.length )*100.0;
else
compoundData.grade = 0.0;
+ if (GetTrkEndPtCnt(trk) == 0) {
+ compoundDesc[LT].mode = 0;
+ } else
+ compoundDesc[LT].mode = DESC_IGNORE;
+
DoDescribe(trackType, trk, compoundDesc, UpdateCompound);
+ if ( compoundDesc[LT].control0!=NULL) {
+ wListClear( (wList_p)compoundDesc[LT].control0 );
+ wListAddValue( (wList_p)compoundDesc[LT].control0, _("Solid"), NULL, (void*)0 );
+ wListAddValue( (wList_p)compoundDesc[LT].control0, _("Dash"), NULL, (void*)1 );
+ wListAddValue( (wList_p)compoundDesc[LT].control0, _("Dot"), NULL, (void*)2 );
+ wListAddValue( (wList_p)compoundDesc[LT].control0, _("DashDot"), NULL, (void*)3 );
+ wListAddValue( (wList_p)compoundDesc[LT].control0, _("DashDotDot"), NULL, (void*)4 );
+ wListAddValue( (wList_p)compoundDesc[LT].control0, _("CenterDot"), NULL, (void*)5 );
+ wListAddValue( (wList_p)compoundDesc[LT].control0, _("PhantomDot"), NULL, (void*)6 );
+ wListSetIndex( (wList_p)compoundDesc[LT].control0, compoundData.linetype );
+ }
+
}
@@ -880,6 +972,7 @@ void DeleteCompound(
struct extraData *xx = GetTrkExtraData(t);
FreeFilledDraw( xx->segCnt, xx->segs );
MyFree( xx->segs );
+ xx->segs = NULL;
}
@@ -891,6 +984,7 @@ BOOL_T WriteCompound(
EPINX_T ep, epCnt;
long options;
long position = 0;
+ drawLineType_e lineType = 0;
PATHPTR_T path;
BOOL_T rc = TRUE;
@@ -918,10 +1012,11 @@ BOOL_T WriteCompound(
position++;
}
}
- rc &= fprintf(f, "%s %d %d %ld %ld 0 %s %d %0.6f %0.6f 0 %0.6f \"%s\"\n",
+ lineType = xx->lineType;
+ rc &= fprintf(f, "%s %d %d %ld %ld %d %s %d %0.6f %0.6f 0 %0.6f \"%s\"\n",
GetTrkTypeName(t),
- GetTrkIndex(t), GetTrkLayer(t), options, position,
- GetTrkScaleName(t), GetTrkVisible(t),
+ GetTrkIndex(t), GetTrkLayer(t), options, position, lineType,
+ GetTrkScaleName(t), GetTrkVisible(t)|(GetTrkNoTies(t)?1<<2:0)|(GetTrkBridge(t)?1<<3:0),
xx->orig.x, xx->orig.y, xx->angle,
PutTitle(xtitle(xx)) )>0;
for (ep=0; ep<epCnt; ep++ )
@@ -933,6 +1028,8 @@ BOOL_T WriteCompound(
break;
case TOpier:
rc &= fprintf( f, "\tX %s %0.6f \"%s\"\n", PIER, xx->u.pier.height, xx->u.pier.name )>0;
+ break;
+
default:
;
}
@@ -950,6 +1047,34 @@ BOOL_T WriteCompound(
*
*/
+EXPORT void SetCompoundLineType( track_p trk, int width ) {
+ struct extraData * xx = GetTrkExtraData(trk);
+ switch(width) {
+ case 0:
+ xx->lineType = DRAWLINESOLID;
+ break;
+ case 1:
+ xx->lineType = DRAWLINEDASH;
+ break;
+ case 2:
+ xx->lineType = DRAWLINEDOT;
+ break;
+ case 3:
+ xx->lineType = DRAWLINEDASHDOT;
+ break;
+ case 4:
+ xx->lineType = DRAWLINEDASHDOTDOT;
+ break;
+ case 5:
+ xx->lineType = DRAWLINECENTER;
+ break;
+ case 6:
+ xx->lineType = DRAWLINEPHANTOM;
+ break;
+ }
+}
+
+
EXPORT track_p NewCompound(
TRKTYP_T trkType,
@@ -959,6 +1084,7 @@ EXPORT track_p NewCompound(
char * title,
EPINX_T epCnt,
trkEndPt_t * epp,
+ DIST_T * radii,
int pathLen,
char * paths,
wIndex_t segCnt,
@@ -994,13 +1120,23 @@ EXPORT track_p NewCompound(
FixUpBezierSegs(xx->segs,xx->segCnt);
ComputeCompoundBoundingBox( trk );
SetDescriptionOrig( trk );
- for ( ep=0; ep<epCnt; ep++ )
+// if (radii) {
+// xx->special = TOcurved;
+// xx->u.curved.radii.max = 0;
+// xx->u.curved.radii.cnt = 0;
+// DYNARR_SET(DIST_T,xx->u.curved.radii,epCnt);
+// }
+ for ( ep=0; ep<epCnt; ep++ ) {
SetTrkEndPoint( trk, ep, epp[ep].pos, epp[ep].angle );
+// if (radii) {
+// DYNARR_N(DIST_T,xx->u.curved.radii,ep) = radii[ep];
+// }
+ }
return trk;
}
-void ReadCompound(
+BOOL_T ReadCompound(
char * line,
TRKTYP_T trkType )
{
@@ -1017,26 +1153,28 @@ void ReadCompound(
char *cp;
long options = 0;
long position = 0;
+ long lineType = 0;
PATHPTR_T path=NULL;
if (paramVersion<3) {
if ( !GetArgs( line, "dXsdpfq",
&index, &layer, scale, &visible, &orig, &angle, &title ) )
- return;
+ return FALSE;
} else if (paramVersion <= 5 && trkType == T_STRUCTURE) {
if ( !GetArgs( line, "dL00sdpfq",
&index, &layer, scale, &visible, &orig, &angle, &title ) )
- return;
+ return FALSE;
} else {
- if ( !GetArgs( line, paramVersion<9?"dLll0sdpYfq":"dLll0sdpffq",
- &index, &layer, &options, &position, scale, &visible, &orig, &elev, &angle, &title ) )
- return;
+ if ( !GetArgs( line, paramVersion<9?"dLlldsdpYfq":"dLlldsdpffq",
+ &index, &layer, &options, &position, &lineType, scale, &visible, &orig, &elev, &angle, &title ) )
+ return FALSE;
}
if (paramVersion >=3 && paramVersion <= 5 && trkType == T_STRUCTURE)
strcpy( scale, curScaleName );
DYNARR_RESET( trkEndPt_t, tempEndPts_da );
pathCnt = 0;
- ReadSegs();
+ if ( !ReadSegs() )
+ return FALSE;
path = pathPtr;
if ( tempEndPts_da.cnt > 0 && pathCnt <= 1 ) {
pathCnt = 10;
@@ -1051,9 +1189,17 @@ void ReadCompound(
UpdateTitleMark( title, LookupScale(scale) );
}
}
- trk = NewCompound( trkType, index, orig, angle, title, 0, NULL, pathCnt, (char *)path, tempSegs_da.cnt, &tempSegs(0) );
+ trk = NewCompound( trkType, index, orig, angle, title, 0, NULL, NULL, pathCnt, (char *)path, tempSegs_da.cnt, &tempSegs(0) );
SetEndPts( trk, 0 );
- SetTrkVisible(trk, visible);
+ if ( paramVersion < 3 ) {
+ SetTrkVisible(trk, visible!=0);
+ SetTrkNoTies(trk, FALSE);
+ SetTrkBridge(trk, FALSE);
+ } else {
+ SetTrkVisible(trk, visible&2);
+ SetTrkNoTies(trk, visible&4);
+ SetTrkBridge(trk, visible&8);
+ }
SetTrkScale(trk, LookupScale( scale ));
SetTrkLayer(trk, layer);
SetTrkWidth(trk, (int)(options&3));
@@ -1062,68 +1208,27 @@ void ReadCompound(
xx->flipped = (int)((options&0x10)!=0);
xx->ungrouped = (int)((options&0x20)!=0);
xx->split = (int)((options&0x40)!=0);
+ xx->lineType = lineType;
xx->descriptionOff = descriptionOff;
if ( ( options & 0x80 ) != 0 )
SetTrkBits( trk, TB_HIDEDESC );
-#ifdef LATER
- trk = NewTrack( index, trkType, 0, sizeof (*xx) + 1 );
- SetEndPts( trk, 0 );
- xx = GetTrkExtraData(trk);
- SetTrkVisible(trk, visible);
- SetTrkScale(trk, LookupScale( scale ));
- SetTrkLayer(trk, layer);
- SetTrkWidth(trk, (int)(options&3));
- xx->orig = orig;
- xx->angle = angle;
- xx->customInfo = NULL;
- xx->handlaid = (int)((options>>3)&0x01);
- xx->flipped = (int)((options>>4)&0x01);
- xx->segCnt = tempSegs_da.cnt;
- xx->segs = MyMalloc( (tempSegs_da.cnt)*sizeof xx->segs[0] );
- if (paramVersion<6 && strlen( title ) > 2) {
- cp = strchr( title, '\t' );
- if (cp != NULL) {
- cp = strchr( cp, '\t' );
- }
- if (cp == NULL) {
- UpdateTitleMark(title, GetTrkScale(trk));
- }
- }
- xx->title = title;
- if ( GetTrkEndPtCnt(trk) > 0 && pathCnt <= 1 ) {
- xx->pathLen = 10;
- xx->paths = xx->pathCurr = (PATHPTR_T)Malloc( xx->pathLen );
- memcpy( xx->paths, "Normal\01\0\0", xx->pathLen );
- } else {
- xx->pathLen = pathCnt;
- if (pathCnt > 0) {
- xx->paths = xx->pathCurr = (PATHPTR_T)Malloc( pathCnt );
- memcpy( xpaths(xx), pathPtr, pathCnt );
- } else {
- xx->paths = xx->pathCurr = NULL;
- }
- }
- xx->segCnt = tempSegs_da.cnt;
- memcpy( xx->segs, tempSegs_da.ptr, tempSegs_da.cnt * sizeof *xx->segs );
-
- ComputeCompoundBoundingBox( trk );
- SetDescriptionOrig( trk );
- xx->descriptionOff = descriptionOff;
-#endif
if (tempSpecial[0] != '\0') {
if (strncmp( tempSpecial, ADJUSTABLE, strlen(ADJUSTABLE) ) == 0) {
xx->special = TOadjustable;
- GetArgs( tempSpecial+strlen(ADJUSTABLE), "ff",
- &xx->u.adjustable.minD, &xx->u.adjustable.maxD );
+ if ( !GetArgs( tempSpecial+strlen(ADJUSTABLE), "ff",
+ &xx->u.adjustable.minD, &xx->u.adjustable.maxD ) )
+ return FALSE;
} else if (strncmp( tempSpecial, PIER, strlen(PIER) ) == 0) {
xx->special = TOpier;
- GetArgs( tempSpecial+strlen(PIER), "fq",
- &xx->u.pier.height, &xx->u.pier.name );
+ if ( !GetArgs( tempSpecial+strlen(PIER), "fq",
+ &xx->u.pier.height, &xx->u.pier.name ) )
+ return FALSE;
} else {
InputError("Unknown special case", TRUE);
+ return FALSE;
}
}
if (pathCnt > 0) {
@@ -1138,7 +1243,7 @@ void ReadCompound(
}
}
xx->pathCurr = path;
-
+ return TRUE;
}
void MoveCompound(
@@ -1217,12 +1322,12 @@ void FlipCompound(
mP && strcmp( mP, mfg ) == 0 && nP && pP ) {
if ( strcmp( nP, descL ) == 0 && strcmp( pP, partL ) == 0 ) {
sprintf( message, "%s\t%s\t%s", mfg, descR, partR );
- xx->title = strdup( message );
+ xx->title = MyStrdup( message );
return;
}
if ( strcmp( nP, descR ) == 0 && strcmp( pP, partR ) == 0 ) {
sprintf( message, "%s\t%s\t%s", mfg, descL, partL );
- xx->title = strdup( message );
+ xx->title = MyStrdup( message );
return;
}
}
diff --git a/app/bin/compound.h b/app/bin/compound.h
index 4845f78..b4c63ca 100644
--- a/app/bin/compound.h
+++ b/app/bin/compound.h
@@ -26,7 +26,7 @@
#include "common.h"
#include "track.h"
-typedef enum { TOnormal, TOadjustable, TOpierInfo, TOpier, TOcarDesc, TOlast } TOspecial_e;
+typedef enum { TOnormal, TOadjustable, TOpierInfo, TOpier, TOcarDesc, TOlast, TOcurved } TOspecial_e;
typedef struct {
char * name;
@@ -44,6 +44,9 @@ typedef union {
FLOAT_T height;
char * name;
} pier;
+ struct {
+ dynArr_t radii;
+ } curved;
} turnoutInfo_u;
typedef struct turnoutInfo_t{
@@ -91,6 +94,8 @@ struct extraData {
PATHPTR_T pathCurr;
wIndex_t segCnt;
trkSeg_t * segs;
+ DIST_T * radii;
+ drawLineType_e lineType;
};
#endif
@@ -111,6 +116,7 @@ extern turnoutInfo_t * curStructure;
#define ADJUSTABLE "adjustable"
#define PIER "pier"
+#define CURVED "curvedends"
/* compound.c */
#define FIND_TURNOUT (1<<11)
@@ -129,14 +135,15 @@ void DrawCompoundDescription( track_p, drawCmd_p, wDrawColor );
DIST_T DistanceCompound( track_p, coOrd * );
void DescribeCompound( track_p, char *, CSIZE_T );
void DeleteCompound( track_p );
-track_p NewCompound( TRKTYP_T, TRKINX_T, coOrd, ANGLE_T, char *, EPINX_T, trkEndPt_t *, int, char *, wIndex_t, trkSeg_p );
+track_p NewCompound( TRKTYP_T, TRKINX_T, coOrd, ANGLE_T, char *, EPINX_T, trkEndPt_t *, DIST_T *, int, char *, wIndex_t, trkSeg_p );
BOOL_T WriteCompound( track_p, FILE * );
-void ReadCompound( char *, TRKTYP_T );
+BOOL_T ReadCompound( char *, TRKTYP_T );
void MoveCompound( track_p, coOrd );
void RotateCompound( track_p, coOrd, ANGLE_T );
void RescaleCompound( track_p, FLOAT_T );
void FlipCompound( track_p, coOrd, ANGLE_T );
BOOL_T EnumerateCompound( track_p );
+void SetCompoundLineType( track_p trk, int width );
/* cgroup.c */
void UngroupCompound( track_p );
@@ -147,27 +154,34 @@ void DoGroup( void );
void UpdateTitleMark( char *, SCALEINX_T );
void DoUpdateTitles( void );
BOOL_T RefreshCompound( track_p, BOOL_T );
+wIndex_t FindListItemByContext( wList_p, void *);
+
/* cturnout.c */
EPINX_T TurnoutPickEndPt( coOrd p, track_p );
+BOOL_T SplitTurnoutCheck(track_p,coOrd,EPINX_T ep,track_p *,EPINX_T *,EPINX_T *,BOOL_T check, coOrd *, ANGLE_T *);
void GetSegInxEP( signed char, int *, EPINX_T * );
+void SetSegInxEP( signed char *, int, EPINX_T) ;
wIndex_t CheckPaths( wIndex_t, trkSeg_p, PATHPTR_T );
-turnoutInfo_t * CreateNewTurnout( char *, char *, wIndex_t, trkSeg_p, wIndex_t, PATHPTR_T, EPINX_T, trkEndPt_t *, wBool_t );
+turnoutInfo_t * CreateNewTurnout( char *, char *, wIndex_t, trkSeg_p, wIndex_t, PATHPTR_T, EPINX_T, trkEndPt_t *, DIST_T *, wBool_t );
+void DeleteTurnoutParams(int fileInx);
turnoutInfo_t * TurnoutAdd( long, SCALEINX_T, wList_p, coOrd *, EPINX_T );
STATUS_T CmdTurnoutAction( wAction_t, coOrd );
BOOL_T ConnectAdjustableTracks( track_p trk1, EPINX_T ep1, track_p trk2, EPINX_T ep2 );
track_p NewHandLaidTurnout( coOrd, ANGLE_T, coOrd, ANGLE_T, coOrd, ANGLE_T, ANGLE_T );
void NextTurnoutPosition( track_p trk );
-
+enum paramFileState GetTrackCompatibility(int paramFileIndex, SCALEINX_T scaleIndex);
/* ctodesgn.c */
void EditCustomTurnout( turnoutInfo_t *, turnoutInfo_t * );
long ComputeTurnoutRoadbedSide( trkSeg_p, int, int, ANGLE_T, DIST_T );
/* cstruct.c */
turnoutInfo_t * CreateNewStructure( char *, char *, wIndex_t, trkSeg_p, BOOL_T );
+enum paramFileState GetStructureCompatibility(int paramFileIndex, SCALEINX_T scaleIndex);
turnoutInfo_t * StructAdd( long, SCALEINX_T, wList_p, coOrd * );
STATUS_T CmdStructureAction( wAction_t, coOrd );
BOOL_T StructLoadCarDescList( wList_p );
+void DeleteStructures(int fileIndex);
/* cstrdsgn.c */
void EditCustomStructure( turnoutInfo_t * );
diff --git a/app/bin/cparalle.c b/app/bin/cparalle.c
index 8e70408..27276b1 100644
--- a/app/bin/cparalle.c
+++ b/app/bin/cparalle.c
@@ -30,162 +30,274 @@
#include "param.h"
#include "track.h"
#include "utility.h"
+#include "layout.h"
static struct {
track_p Trk;
coOrd orig;
+ track_p anchor_Trk;
} Dpa;
static DIST_T parSeparation = 1.0;
+static double parSepFactor = 0.0;
+static long parType = 0;
-static paramFloatRange_t r_0o1_100 = { 0.1, 100.0, 100 };
+enum PAR_TYPE_E { PAR_TRACK, PAR_LINE };
+
+static paramFloatRange_t r_0o1_100 = { 0.0, 100.0, 100 };
+static paramFloatRange_t r_0_10 = { 0.0, 10.0 };
static paramData_t parSepPLs[] = {
#define parSepPD (parSepPLs[0])
- { PD_FLOAT, &parSeparation, "separation", PDO_DIM|PDO_NOPREF|PDO_NOPREF, &r_0o1_100, N_("Separation") } };
+#define parSepI 0
+ { PD_FLOAT, &parSeparation, "separation", PDO_DIM, &r_0o1_100, N_("Separation") },
+#define parFactorPD (parSepPLs[1])
+#define parFactorI 1
+ { PD_FLOAT, &parSepFactor, "factor", 0, &r_0_10, N_("Radius Factor") }
+};
static paramGroup_t parSepPG = { "parallel", 0, parSepPLs, sizeof parSepPLs/sizeof parSepPLs[0] };
-static STATUS_T CmdParallel( wAction_t action, coOrd pos )
+static STATUS_T CmdParallel(wAction_t action, coOrd pos)
{
- DIST_T d;
- track_p t=NULL;
- coOrd p;
- static coOrd p0, p1;
- ANGLE_T a;
- track_p t0, t1;
- EPINX_T ep0=-1, ep1=-1;
- wControl_p controls[2];
- char * labels[1];
-
- switch (action) {
-
- case C_START:
- if (parSepPD.control==NULL) {
- ParamCreateControls( &parSepPG, NULL );
- }
- sprintf( message, "parallel-separation-%s", curScaleName );
- parSeparation = ceil(13.0*12.0/curScaleRatio);
- wPrefGetFloat( "misc", message, &parSeparation, parSeparation );
- ParamLoadControls( &parSepPG );
- ParamGroupRecord( &parSepPG );
- controls[0] = parSepPD.control;
- controls[1] = NULL;
- labels[0] = N_("Separation");
- InfoSubstituteControls( controls, labels );
- /*InfoMessage( "Select track" );*/
- return C_CONTINUE;
-
- case C_DOWN:
- if ( parSeparation <= 0.0 ) {
- ErrorMessage( MSG_PARALLEL_SEP_GTR_0 );
- return C_ERROR;
- }
- controls[0] = parSepPD.control;
- controls[1] = NULL;
- labels[0] = N_("Separation");
- InfoSubstituteControls( controls, labels );
- ParamLoadData( &parSepPG );
- Dpa.orig = pos;
- Dpa.Trk = OnTrack( &Dpa.orig, TRUE, TRUE );
- if (!Dpa.Trk) {
- return C_CONTINUE;
- }
- if ( !QueryTrack( Dpa.Trk, Q_CAN_PARALLEL ) ) {
- Dpa.Trk = NULL;
- InfoMessage(_(" Track doesn't support parallel"));
- return C_CONTINUE;
- }
- /* in case query has changed things (eg joint) */
- /*
- * this seems to cause problems so I commented it out
- * until further investigation shows the necessity
- */
- //Dpa.Trk = OnTrack( &Dpa.orig, TRUE, TRUE );
- tempSegs_da.cnt = 0;
-
- case C_MOVE:
-
- if (Dpa.Trk == NULL) return C_CONTINUE;
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
- if ( !MakeParallelTrack( Dpa.Trk, pos, parSeparation, NULL, &p0, &p1 ) ) {
- Dpa.Trk = NULL;
- return C_CONTINUE;
- }
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
- return C_CONTINUE;
-
- case C_UP:
- if (Dpa.Trk == NULL) return C_CONTINUE;
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
- p = p0;
- if ((t0=OnTrack( &p, FALSE, TRUE )) != NULL) {
- ep0 = PickEndPoint( p, t0 );
- if ( GetTrkEndTrk(t0,ep0) != NULL ) {
- t0 = NULL;
- } else {
- p = GetTrkEndPos( t0, ep0 );
- d = FindDistance( p, p0 );
- if ( d > connectDistance )
+ DIST_T d;
+ track_p t=NULL;
+ coOrd p;
+ static coOrd p0, p1;
+ ANGLE_T a;
+ track_p t0, t1;
+ EPINX_T ep0=-1, ep1=-1;
+ wControl_p controls[4];
+ char * labels[3];
+ static DIST_T parRFactor;
+
+ parType = (long)commandContext;
+
+ switch (action&0xFF) {
+
+ case C_START:
+ if (parSepPLs[0].control==NULL) {
+ ParamCreateControls(&parSepPG, NULL);
+ }
+ if (parType == PAR_TRACK) {
+ sprintf(message, "parallel-separation-%s", curScaleName);
+ parSeparation = ceil(13.0*12.0/curScaleRatio);
+ } else {
+ sprintf(message, "parallel-line-separation-%s", curScaleName);
+ parSeparation = 5.0*12.0/curScaleRatio;
+ }
+ wPrefGetFloat("misc", message, &parSeparation, parSeparation);
+ ParamLoadControls(&parSepPG);
+ ParamGroupRecord(&parSepPG);
+ parSepPD.option |= PDO_NORECORD;
+ parFactorPD.option |= PDO_NORECORD;
+ controls[0] = parSepPD.control;
+ if (parType == PAR_TRACK)
+ controls[1] = parFactorPD.control;
+ else
+ controls[1] = NULL;
+ controls[2] = NULL;
+ labels[0] = N_("Separation");
+ labels[1] = N_("Radius Factor");
+ InfoSubstituteControls(controls, labels);
+ parSepPD.option &= ~PDO_NORECORD;
+ parFactorPD.option &= ~PDO_NORECORD;
+ Dpa.anchor_Trk = NULL;
+ tempSegs_da.cnt = 0;
+ return C_CONTINUE;
+
+ case wActionMove:
+ tempSegs_da.cnt = 0;
+ Dpa.anchor_Trk = NULL;
+ if (parType == PAR_TRACK)
+ Dpa.anchor_Trk = OnTrack(&pos, FALSE, TRUE);
+ else
+ Dpa.anchor_Trk = OnTrack(&pos, FALSE, FALSE);
+
+ if (!Dpa.anchor_Trk) {
+ return C_CONTINUE;
+ }
+ if (Dpa.anchor_Trk && !CheckTrackLayerSilent(Dpa.anchor_Trk)) {
+ Dpa.anchor_Trk = NULL;
+ return C_CONTINUE;
+ }
+ if (!QueryTrack(Dpa.anchor_Trk, Q_CAN_PARALLEL)) {
+ Dpa.anchor_Trk = NULL;
+ return C_CONTINUE;
+ }
+ break;
+ case C_DOWN:
+ Dpa.anchor_Trk = NULL;
+ tempSegs_da.cnt = 0;
+ if (parSeparation < 0.0) {
+ ErrorMessage(MSG_PARALLEL_SEP_GTR_0);
+ return C_ERROR;
+ }
+
+ controls[0] = parSepPD.control;
+ controls[1] = parFactorPD.control;
+ controls[2] = NULL;
+ labels[0] = N_("Separation");
+ labels[1] = N_("Radius factor");
+ InfoSubstituteControls(controls, labels);
+ ParamLoadData(&parSepPG);
+ Dpa.orig = pos;
+ if (parType == PAR_TRACK)
+ Dpa.Trk = OnTrack(&pos, FALSE, TRUE);
+ else
+ Dpa.Trk = OnTrack(&pos, FALSE, FALSE); //Also lines for line
+ if (!Dpa.Trk) {
+ return C_CONTINUE;
+ }
+ if (!QueryTrack(Dpa.Trk, Q_CAN_PARALLEL)) {
+ Dpa.Trk = NULL;
+ InfoMessage(_(" Track/Line doesn't support parallel"));
+ wBeep();
+ return C_CONTINUE;
+ }
+
+ parRFactor = (2864.0*(double)parSepFactor)/curScaleRatio;
+
+ if ((parType == PAR_TRACK) && (parSeparation == 0.0)) {
+ DIST_T orig_gauge = GetTrkGauge(Dpa.Trk);
+ DIST_T new_gauge = GetScaleTrackGauge(GetLayoutCurScale());
+ if (orig_gauge == new_gauge) {
+ ErrorMessage(MSG_PARALLEL_SEP_GTR_0);
+ return C_ERROR;
+ }
+ parSeparation = fabs(orig_gauge/2-new_gauge/2);
+ parRFactor = 0.0;
+ } else if (parType != PAR_TRACK)
+ parRFactor = 0.0;
+ /* in case query has changed things (eg joint) */
+ /*
+ * this seems to cause problems so I commented it out
+ * until further investigation shows the necessity
+ */
+ //Dpa.Trk = OnTrack( &Dpa.orig, TRUE, TRUE );
+ tempSegs_da.cnt = 0;
+ /* no break */
+
+ case C_MOVE:
+ if (Dpa.Trk == NULL) {
+ return C_CONTINUE;
+ }
+ tempSegs_da.cnt = 0;
+ if (!MakeParallelTrack(Dpa.Trk, pos, parSeparation, parRFactor, NULL, &p0, &p1,
+ parType == PAR_TRACK)) {
+ Dpa.Trk = NULL;
+ return C_CONTINUE;
+ }
+ return C_CONTINUE;
+
+ case C_UP:
+ Dpa.anchor_Trk = NULL;
+ if (Dpa.Trk == NULL) {
+ return C_CONTINUE;
+ }
+ t0=t1=NULL;
+ if (parType == PAR_TRACK) {
+ p = p0;
+ tempSegs_da.cnt = 0;
+ if ((t0=OnTrack(&p, FALSE, TRUE)) != NULL) {
+ ep0 = PickEndPoint(p, t0);
+ if (GetTrkEndTrk(t0,ep0) != NULL) {
t0 = NULL;
+ } else {
+ p = GetTrkEndPos(t0, ep0);
+ d = FindDistance(p, p0);
+ if (d > connectDistance) {
+ t0 = NULL;
+ }
+ }
}
- }
- p = p1;
- if ((t1=OnTrack( &p, FALSE, TRUE )) != NULL) {
- ep1 = PickEndPoint( p, t1 );
- if ( GetTrkEndTrk(t1,ep1) != NULL ) {
- t1 = NULL;
- } else {
- p = GetTrkEndPos( t1, ep1 );
- d = FindDistance( p, p1 );
- if ( d > connectDistance )
+ p = p1;
+ if ((t1=OnTrack(&p, FALSE, TRUE)) != NULL) {
+ ep1 = PickEndPoint(p, t1);
+ if (GetTrkEndTrk(t1,ep1) != NULL) {
t1 = NULL;
+ } else {
+ p = GetTrkEndPos(t1, ep1);
+ d = FindDistance(p, p1);
+ if (d > connectDistance) {
+ t1 = NULL;
+ }
+ }
}
- }
- UndoStart( _("Create Parallel Track"), "newParallel" );
- if ( !MakeParallelTrack( Dpa.Trk, pos, parSeparation, &t, NULL, NULL ) ) {
- return C_TERMINATE;
- }
- CopyAttributes( Dpa.Trk, t );
- if ( t0 ) {
- a = NormalizeAngle( GetTrkEndAngle( t0, ep0 ) - GetTrkEndAngle( t, 0 ) + (180.0+connectAngle/2.0) );
- if (a < connectAngle) {
- DrawEndPt( &mainD, t0, ep0, wDrawColorWhite );
- ConnectTracks( t0, ep0, t, 0 );
- DrawEndPt( &mainD, t0, ep0, wDrawColorBlack );
+ }
+ UndoStart(_("Create Parallel Track"), "newParallel");
+ if (!MakeParallelTrack(Dpa.Trk, pos, parSeparation, parRFactor, &t, NULL, NULL,
+ parType == PAR_TRACK)) {
+ tempSegs_da.cnt = 0;
+ return C_TERMINATE;
+ }
+ if (parType == PAR_TRACK) {
+ if (GetTrkGauge(Dpa.Trk)> parSeparation) {
+ SetTrkNoTies(t, TRUE);
+ }
+ //CopyAttributes( Dpa.Trk, t ); Don't force scale or track width or Layer
+ SetTrkBits(t,(GetTrkBits(t)&TB_HIDEDESC) | (GetTrkBits(Dpa.Trk)&~TB_HIDEDESC));
+
+ if (t0) {
+ a = NormalizeAngle(GetTrkEndAngle(t0, ep0) - GetTrkEndAngle(t,
+ 0) + (180.0+connectAngle/2.0));
+ if (a < connectAngle) {
+ DrawEndPt(&mainD, t0, ep0, wDrawColorWhite);
+ ConnectTracks(t0, ep0, t, 0);
+ DrawEndPt(&mainD, t0, ep0, wDrawColorBlack);
+ }
}
- }
- if ( t1 ) {
- a = NormalizeAngle( GetTrkEndAngle( t1, ep1 ) - GetTrkEndAngle( t, 1 ) + (180.0+connectAngle/2.0) );
- if (a < connectAngle) {
- DrawEndPt( &mainD, t1, ep1, wDrawColorWhite );
- ConnectTracks( t1, ep1, t, 1 );
- DrawEndPt( &mainD, t1, ep1, wDrawColorBlack );
+ if (t1) {
+ a = NormalizeAngle(GetTrkEndAngle(t1, ep1) - GetTrkEndAngle(t,
+ 1) + (180.0+connectAngle/2.0));
+ if (a < connectAngle) {
+ DrawEndPt(&mainD, t1, ep1, wDrawColorWhite);
+ ConnectTracks(t1, ep1, t, 1);
+ DrawEndPt(&mainD, t1, ep1, wDrawColorBlack);
+ }
}
- }
- DrawNewTrack( t );
- UndoEnd();
- InfoSubstituteControls( NULL, NULL );
- sprintf( message, "parallel-separation-%s", curScaleName );
- wPrefSetFloat( "misc", message, parSeparation );
- return C_TERMINATE;
-
- case C_REDRAW:
- return C_CONTINUE;
-
- case C_CANCEL:
- InfoSubstituteControls( NULL, NULL );
- return C_TERMINATE;
-
- }
- return C_CONTINUE;
+ }
+ DrawNewTrack(t);
+ UndoEnd();
+ InfoSubstituteControls(NULL, NULL);
+ if (parType == PAR_TRACK)
+ sprintf(message, "parallel-separation-%s", curScaleName);
+ else
+ sprintf(message, "parallel-line-separation-%s", curScaleName);
+ wPrefSetFloat("misc", message, parSeparation);
+ tempSegs_da.cnt = 0;
+ return C_TERMINATE;
+
+ case C_REDRAW:
+ if (Dpa.anchor_Trk) {
+ DrawTrack(Dpa.anchor_Trk,&tempD,
+ wDrawColorPreviewSelected); //Special color means THICK3 as well
+ }
+ if (tempSegs_da.cnt>0) {
+ DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge,
+ wDrawColorBlack );
+ }
+ return C_CONTINUE;
+
+ case C_CANCEL:
+ Dpa.anchor_Trk = NULL;
+ tempSegs_da.cnt = 0;
+ InfoSubstituteControls(NULL, NULL);
+ return C_TERMINATE;
+
+ }
+ return C_CONTINUE;
}
#include "bitmaps/parallel.xpm"
+#include "bitmaps/parallel-line.xpm"
EXPORT void InitCmdParallel( wMenu_p menu )
{
- AddMenuButton( menu, CmdParallel, "cmdParallel", _("Parallel"), wIconCreatePixMap(parallel_xpm), LEVEL0_50, IC_STICKY|IC_POPUP, ACCL_PARALLEL, NULL );
+ ButtonGroupBegin( _("Parallel"), "cmdParallelSetCmd", _("Parallel") );
+ AddMenuButton( menu, CmdParallel, "cmdParallelTrack", _("Parallel Track"), wIconCreatePixMap(parallel_xpm), LEVEL0_50, IC_STICKY|IC_POPUP|IC_WANT_MOVE, ACCL_PARALLEL, (void*)0 );
+ AddMenuButton( menu, CmdParallel, "cmdParallelLine", _("Parallel Line"), wIconCreatePixMap(parallel_line_xpm), LEVEL0_50, IC_STICKY|IC_POPUP|IC_WANT_MOVE, ACCL_PARALLEL, (void*)1 );
+ ButtonGroupEnd();
ParamRegister( &parSepPG );
}
diff --git a/app/bin/cprint.c b/app/bin/cprint.c
index 88a9151..066e649 100644
--- a/app/bin/cprint.c
+++ b/app/bin/cprint.c
@@ -25,8 +25,10 @@
#include <string.h>
#include <ctype.h>
#include <math.h>
+#include <stdbool.h>
#include "custom.h"
+#include "dynstring.h"
#include "fileio.h"
#include "i18n.h"
#include "layout.h"
@@ -69,6 +71,7 @@ struct {
static long printGaudy = 1;
static long printRegistrationMarks = 1;
+static long printPageNumbers = 1;
static long printPhysSize = FALSE;
static long printFormat = PORTRAIT;
static long printOrder = 0;
@@ -85,7 +88,8 @@ static long iPrintScale = 16;
static coOrd maxPageSize;
static coOrd realPageSize;
-static wWin_p printWin;
+static wWin_p printWin = NULL;
+static wWin_p printMarginWin = NULL;
static wMenu_p printGridPopupM;
@@ -98,16 +102,21 @@ static void DoResetGrid( void );
static void DoPrintSetup( void );
static void PrintClear( void );
static void PrintMaxPageSize( void );
+static void SelectAllPages(void);
+static void DoPrintMargin(void);
+static bool PrintPageNumber( wPos_t x, wPos_t y, DIST_T width, DIST_T height );
+static bool PrintNextPageNumbers(int x, int y, DIST_T pageW, DIST_T pageH);
static char * printFormatLabels[] = { N_("Portrait"), N_("Landscape"), NULL };
static char * printOrderLabels[] = { N_("Normal"), N_("Reverse"), NULL };
static char * printGaudyLabels[] = { N_("Engineering Data"), NULL };
-static char * printRegistrationMarksLabels[] = { N_("Print Registration Marks"), NULL };
+static char * printRegistrationMarksLabels[] = { N_("Registration Marks (in 1:1 scale only)"), NULL };
+static char * printPageNumberLabels[] = { N_("Page Numbers"), NULL };
static char * printPhysSizeLabels[] = { N_("Ignore Page Margins"), NULL };
-static char * printGridLabels[] = { N_("Print Snap Grid"), NULL };
-static char * printRulerLabels[] = { N_("Print Rulers"), NULL };
-static char * printRoadbedLabels[] = { N_("Print Roadbed Outline"), NULL };
-static char * printCenterLineLabels[] = { N_("Print Centerline below Scale 1:1"), NULL };
+static char * printGridLabels[] = { N_("Snap Grid"), NULL };
+static char * printRulerLabels[] = { N_("Rulers"), NULL };
+static char * printRoadbedLabels[] = { N_("Roadbed Outline"), NULL };
+static char * printCenterLineLabels[] = { N_("Centerline below Scale 1:1"), NULL };
static paramIntegerRange_t rminScale_999 = { 1, 999, 0, PDO_NORANGECHECK_HIGH };
static paramFloatRange_t r0_ = { 0, 0, 0, PDO_NORANGECHECK_HIGH };
static paramFloatRange_t r1_ = { 1, 0, 0, PDO_NORANGECHECK_HIGH };
@@ -122,34 +131,41 @@ static paramData_t printPLs[] = {
/*4*/ { PD_BUTTON, (void*)PrintSnapShot, "snapshot", PDO_DLGHORZ, NULL, N_("Snap Shot") },
/*5*/ { PD_RADIO, &printFormat, "format", 0, printFormatLabels, N_("Page Format"), BC_HORZ|BC_NOBORDER, (void*)1 },
/*6*/ { PD_RADIO, &printOrder, "order", PDO_DLGBOXEND, printOrderLabels, N_("Print Order"), BC_HORZ|BC_NOBORDER },
-
-/*7*/ { PD_TOGGLE, &printGaudy, "style", PDO_DLGNOLABELALIGN, printGaudyLabels, NULL, BC_HORZ|BC_NOBORDER, (void*)1 },
-/*8*/ { PD_TOGGLE, &printPhysSize, "physsize", PDO_DLGNOLABELALIGN, printPhysSizeLabels, NULL, BC_HORZ|BC_NOBORDER, (void*)1 },
+/*7*/ { PD_MESSAGE, N_("Print "), NULL, PDO_DLGRESETMARGIN| PDO_DLGNOLABELALIGN, (void*)0 },
+/*8*/ { PD_TOGGLE, &printGaudy, "style", PDO_DLGNOLABELALIGN, printGaudyLabels, NULL, BC_HORZ|BC_NOBORDER, (void*)1 },
#define I_REGMARKS (9)
/*9*/ { PD_TOGGLE, &printRegistrationMarks, "registrationMarks", PDO_DLGNOLABELALIGN, printRegistrationMarksLabels, NULL, BC_HORZ|BC_NOBORDER },
-#define I_GRID (10)
-/*10*/ { PD_TOGGLE, &printGrid, "grid", PDO_DLGNOLABELALIGN, printGridLabels, NULL, BC_HORZ|BC_NOBORDER },
-#define I_RULER (11)
-/*11*/ { PD_TOGGLE, &printRuler, "ruler", PDO_DLGNOLABELALIGN, printRulerLabels, NULL, BC_HORZ|BC_NOBORDER },
-#define I_CENTERLINE (12)
-/*12*/ { PD_TOGGLE, &printCenterLine, "centerLine", PDO_DLGNOLABELALIGN, printCenterLineLabels, NULL, BC_HORZ|BC_NOBORDER },
-#define I_ROADBED (13)
-/*13*/{ PD_TOGGLE, &printRoadbed, "roadbed", PDO_DLGNOLABELALIGN, printRoadbedLabels, NULL, BC_HORZ|BC_NOBORDER },
-#define I_ROADBEDWIDTH (14)
-/*14*/{ PD_FLOAT, &printRoadbedWidth, "roadbedWidth", PDO_DIM|PDO_DLGBOXEND, &r0_, N_("Width") },
-/*15*/{ PD_FLOAT, &newPrintGrid.orig.x, "origx", PDO_DIM|PDO_DLGRESETMARGIN, &r_10_99999, N_("Origin: X"), 0, (void*)2 },
-/*16*/ { PD_FLOAT, &newPrintGrid.orig.y, "origy", PDO_DIM, &r_10_99999, N_("Y"), 0, (void*)2 },
-/*17*/ { PD_BUTTON, (void*)DoResetGrid, "reset", PDO_DLGHORZ, NULL, N_("Reset") },
-/*18*/ { PD_FLOAT, &newPrintGrid.angle, "origa", PDO_ANGLE|PDO_DLGBOXEND, &r0_360, N_("Angle"), 0, (void*)2 },
-/*19*/ { PD_BUTTON, (void*)DoPrintSetup, "setup", PDO_DLGCMDBUTTON, NULL, N_("Setup") },
-/*20*/ { PD_BUTTON, (void*)PrintClear, "clear", 0, NULL, N_("Clear") },
-#define I_PAGECNT (21)
-/*21*/ { PD_MESSAGE, N_("0 pages"), NULL, 0, (void*)80 },
-/*22*/ { PD_MESSAGE, N_("selected"), NULL, 0, (void*)80 }
+#define I_PAGENUMBERS (10)
+/*10*/ { PD_TOGGLE, &printPageNumbers, "pageNumbers", PDO_DLGNOLABELALIGN, printPageNumberLabels, NULL, BC_HORZ | BC_NOBORDER },
+#define I_GRID (11)
+/*11*/ { PD_TOGGLE, &printGrid, "grid", PDO_DLGNOLABELALIGN, printGridLabels, NULL, BC_HORZ|BC_NOBORDER },
+#define I_RULER (12)
+/*12*/ { PD_TOGGLE, &printRuler, "ruler", PDO_DLGNOLABELALIGN, printRulerLabels, NULL, BC_HORZ|BC_NOBORDER },
+#define I_CENTERLINE (13)
+/*13*/ { PD_TOGGLE, &printCenterLine, "centerLine", PDO_DLGNOLABELALIGN, printCenterLineLabels, NULL, BC_HORZ|BC_NOBORDER },
+#define I_ROADBED (14)
+/*14*/{ PD_TOGGLE, &printRoadbed, "roadbed", PDO_DLGNOLABELALIGN, printRoadbedLabels, NULL, BC_HORZ|BC_NOBORDER },
+#define I_ROADBEDWIDTH (15)
+/*15*/{ PD_FLOAT, &printRoadbedWidth, "roadbedWidth", PDO_DIM , &r0_, N_(" Width") },
+/*16*/ { PD_TOGGLE, &printPhysSize, "physsize", PDO_DLGNOLABELALIGN, printPhysSizeLabels, NULL, BC_HORZ | BC_NOBORDER, (void*)1 },
+/*17*/ { PD_BUTTON, (void*)DoPrintMargin, "margin", PDO_DLGHORZ|PDO_DLGBOXEND, NULL, N_("Margins") },
+/*18*/{ PD_FLOAT, &newPrintGrid.orig.x, "origx", PDO_DIM|PDO_DLGRESETMARGIN, &r_10_99999, N_("Origin: X"), 0, (void*)2 },
+/*19*/ { PD_FLOAT, &newPrintGrid.orig.y, "origy", PDO_DIM, &r_10_99999, N_("Y"), 0, (void*)2 },
+/*20*/ { PD_BUTTON, (void*)DoResetGrid, "reset", PDO_DLGHORZ, NULL, N_("Reset") },
+/*21*/ { PD_FLOAT, &newPrintGrid.angle, "origa", PDO_ANGLE|PDO_DLGBOXEND, &r0_360, N_("Angle"), 0, (void*)2 },
+/*22*/ { PD_BUTTON, (void*)DoPrintSetup, "setup", PDO_DLGCMDBUTTON, NULL, N_("Setup") },
+/*23*/ { PD_BUTTON, (void*)SelectAllPages, "selall", 0, NULL, N_("Select All") },
+/*24*/ { PD_BUTTON, (void*)PrintClear, "clear", 0, NULL, N_("Clear") },
+#define I_PAGECNT (25)
+/*25*/ { PD_MESSAGE, N_("0 pages"), NULL, 0, (void*)80 },
+/*26*/ { PD_MESSAGE, N_("selected"), NULL, 0, (void*)80 }
};
static paramGroup_t printPG = { "print", PGO_PREFMISCGROUP, printPLs, sizeof printPLs/sizeof printPLs[0] };
+static struct {
+ double top, right, bottom, left;
+} printMargin = { 0.0, 0.0, 0.0, 0.0 };
/*****************************************************************************
*
@@ -157,6 +173,23 @@ static paramGroup_t printPG = { "print", PGO_PREFMISCGROUP, printPLs, sizeof pri
*
*/
+/**
+ * Update the dialog with the current number of selected pages.
+ *
+ */
+
+static void
+UpdatePageCount()
+{
+ DynString msg;
+ DynStringMalloc(&msg, 0);
+
+ DynStringPrintf(&msg, (pageCount == 1?_("%d page"):_("%d pages")), pageCount);
+ ParamLoadMessage(&printPG, I_PAGECNT, DynStringToCStr(&msg));
+ ParamDialogOkActive(&printPG, pageCount != 0);
+
+ DynStringFree(&msg);
+}
static void ChangeDim( void )
{
@@ -208,9 +241,7 @@ static void ChangeDim( void )
bm.orig = currPrintGrid.orig;
bm.size = currPrintGrid.size;
bm.angle = currPrintGrid.angle;
- sprintf( message, _("%d pages"), pageCount );
- ParamLoadMessage( &printPG, I_PAGECNT, message );
- ParamDialogOkActive( &printPG, pageCount!=0 );
+ UpdatePageCount();
}
@@ -237,7 +268,7 @@ LOG1( log_print, ( "MarkPage( %d, %d )\n", x, y) )
Rotate( &p[2], currPrintGrid.orig, currPrintGrid.angle );
Rotate( &p[3], currPrintGrid.orig, currPrintGrid.angle );
LOG( log_print, 2, ( "MP(%d,%d) [%0.3f %0.3f] x [%0.3f %0.3f]\n", x, y, p[0].x, p[0].y, p[2].x, p[2].y ) )
- DrawHilightPolygon( &mainD, p, 4 );
+ DrawHilightPolygon( &tempD, p, 4 );
}
@@ -256,10 +287,7 @@ static void SelectPage( coOrd pos )
selected = BITMAP( bm, x, y );
pageCount += (selected?-1:1);
BITMAP( bm, x, y ) = !selected;
- MarkPage( x, y );
- sprintf( message, _("%d pages"), pageCount );
- ParamLoadMessage( &printPG, I_PAGECNT, message );
- ParamDialogOkActive( &printPG, pageCount!=0 );
+ UpdatePageCount();
}
@@ -351,11 +379,11 @@ static void PrintGaudyBox(
DrawLine( &page_d, p00, p10, 0, wDrawColorBlack );
p00.y = p10.y = 0.5;
DrawLine( &page_d, p00, p10, 0, wDrawColorBlack );
- p00.y = 0.5;
- p01.y = 1.0;
+ //p00.y = 0.5;
+ //p01.y = 1.0;
p00.x = 0.05; p00.y = 0.5+0.05;
fp = wStandardFont( F_TIMES, TRUE, TRUE );
- DrawString( &page_d, p00, 0.0, sProdName, fp, 30.0, wDrawColorBlack );
+ DrawString( &page_d, p00, 0.0, sProdName, fp, 22.0, wDrawColorBlack );
p00.y = 0.5; p01.y = 1.0;
p00.x = p01.x = (157.0/72.0)+0.1;
@@ -365,17 +393,17 @@ static void PrintGaudyBox(
fp = wStandardFont( F_TIMES, FALSE, FALSE );
p00.x = pageW-((157.0/72.0)+0.05); p00.y = 0.5+0.25+0.05;
- DrawString( &page_d, p00, 0.0, dat, fp, 16.0, wDrawColorBlack );
+ DrawString( &page_d, p00, 0.0, dat, fp, 14.0, wDrawColorBlack );
p00.y = 0.5+0.05;
- DrawTextSize( &mainD, GetLayoutTitle(), fp, 16.0, FALSE, &textsize );
+ DrawTextSize( &mainD, GetLayoutTitle(), fp, 14.0, FALSE, &textsize );
p00.x = (pageW/2.0)-(textsize.x/2.0);
p00.y = 0.75+0.05;
- DrawString( &page_d, p00, 0.0, GetLayoutTitle(), fp, 16.0, wDrawColorBlack );
- DrawTextSize( &mainD, GetLayoutSubtitle(), fp, 16.0, FALSE, &textsize );
+ DrawString( &page_d, p00, 0.0, GetLayoutTitle(), fp, 14.0, wDrawColorBlack );
+ DrawTextSize( &mainD, GetLayoutSubtitle(), fp, 14.0, FALSE, &textsize );
p00.x = (pageW/2.0)-(textsize.x/2.0);
p00.y = 0.50+0.05;
- DrawString( &page_d, p00, 0.0, GetLayoutSubtitle(), fp, 16.0, wDrawColorBlack );
+ DrawString( &page_d, p00, 0.0, GetLayoutSubtitle(), fp, 12.0, wDrawColorBlack );
sprintf( dat, _("PrintScale 1:%ld Room %s x %s Model Scale %s File %s"),
(long)printScale,
@@ -383,7 +411,7 @@ static void PrintGaudyBox(
FormatDistance( roomSize.y ),
curScaleName, GetLayoutFilename() );
p00.x = 0.05; p00.y = 0.25+0.05;
- DrawString( &page_d, p00, 0.0, dat, fp, 16.0, wDrawColorBlack );
+ DrawString( &page_d, p00, 0.0, dat, fp, 14.0, wDrawColorBlack );
}
@@ -414,12 +442,7 @@ static void PrintPlainBox(
DrawLine( &page_d, p11, p01, 0, wDrawColorBlack );
DrawLine( &page_d, p01, p00, 0, wDrawColorBlack );
- fp = wStandardFont( F_HELV, FALSE, FALSE );
- sprintf( tmp, "[%d,%d]", x, y );
- p00.x = pageW/2.0 - 20.0/72.0;
- p00.y = pageH - 10.0/72.0;
- DrawString( &page_d, p00, 0.0, tmp, fp, 4.0, wDrawColorBlack );
-
+ fp = wStandardFont(F_HELV, FALSE, FALSE);
sprintf( tmp, "[%0.2f,%0.2f]", corners[0].x, corners[0].y );
p00.x = 4.0/72.0;
p00.y = 4.0/72.0;
@@ -482,7 +505,6 @@ static void PrintUpdate( int inx0 )
{
int inx;
- DrawPrintGrid();
ParamLoadData( &printPG );
if (newPrintGrid.size.x > maxPageSize.x+0.01 ||
@@ -504,17 +526,17 @@ static void PrintUpdate( int inx0 )
ParamLoadControl( &printPG, inx );
}
ChangeDim();
- DrawPrintGrid();
}
static void SetPageSize( BOOL_T doScale )
{
WDOUBLE_T temp, x, y;
- if (printPhysSize)
- wPrintGetPhysSize( &x, &y );
- else
- wPrintGetPageSize( &x, &y );
+ wPrintGetPageSize( &x, &y );
+ if (!printPhysSize) {
+ x -= (printMargin.left+printMargin.right);
+ y -= (printMargin.top+printMargin.bottom);
+ }
maxPageSize.x = x;
maxPageSize.y = y;
realPageSize = maxPageSize;
@@ -534,6 +556,22 @@ static void SetPageSize( BOOL_T doScale )
}
}
+/**
+ * Select all pages for printing.
+ *
+ */
+
+static void SelectAllPages(void)
+{
+ for (int y = bm.y0; y < bm.y1; y++) {
+ for (int x = bm.x0; x < bm.x1; x++) {
+ BITMAP(bm, x, y) = TRUE;
+ }
+ }
+ pageCount = (bm.x1 - bm.x0) * (bm.y1 - bm.y0);
+ UpdatePageCount();
+ TempRedraw(); // SelectAllPages
+}
static void PrintMaxPageSize( void )
/*
@@ -542,13 +580,12 @@ static void PrintMaxPageSize( void )
* (depending on paper size, scale and orientation)
*/
{
- DrawPrintGrid();
SetPageSize( TRUE );
currPrintGrid.size = maxPageSize;
newPrintGrid = currPrintGrid;
ParamLoadControls( &printPG );
ChangeDim();
- DrawPrintGrid();
+ TempRedraw(); // PrintMaxSize
wShow( printWin);
}
@@ -563,10 +600,152 @@ static void DoPrintScale( void )
PrintEnableControls();
}
+/*
+ * Printer Margins
+ */
+
+static void PrintMarginReset();
+
+static paramFloatRange_t r0_1 = { 0.0, 1.0, 50 };
+static paramData_t printMarginPLs[] = {
+#define I_PM_FIRST (0)
+ { PD_FLOAT, &printMargin.top, "marginT", PDO_DIM|PDO_NOPREF, &r0_1, NULL, 0, NULL },
+ { PD_FLOAT, &printMargin.right, "marginR", PDO_DIM|PDO_NOPREF, &r0_1, NULL, 0, NULL },
+ { PD_FLOAT, &printMargin.bottom, "marginB", PDO_DIM|PDO_NOPREF, &r0_1, NULL, 0, NULL },
+ { PD_FLOAT, &printMargin.left, "marginL", PDO_DIM|PDO_NOPREF, &r0_1, NULL, 0, NULL },
+#define I_PM_COUNT (4)
+#define I_PM_MESSAGE (4)
+ { PD_MESSAGE, NULL, NULL, 0, NULL },
+#define I_PM_RESET (5)
+ { PD_BUTTON, (void*) PrintMarginReset, "marginReset", PDO_DLGCMDBUTTON, NULL, N_("Reset") } };
+static paramGroup_t printMarginPG = { "printMargin", PGO_PREFMISCGROUP|PGO_NODEFAULTPROC, printMarginPLs, sizeof printMarginPLs/sizeof printMarginPLs[0] };
+
+static wLines_t aPmLines[] = {
+ { 1, 25, 11, 94, 11 },
+ { 1, 94, 11, 94, 111 },
+ { 1, 94, 111, 25, 111 },
+ { 1, 25, 111, 25, 11 }};
+static int pmxoff=14;
+static int pmyoff=5;
+
+static void PrintMarginLayout(
+ paramData_t * pd,
+ int index,
+ wPos_t colX,
+ wPos_t * w,
+ wPos_t * h )
+{
+ if ( index < I_PM_FIRST || index > (I_PM_MESSAGE) )
+ return;
+ if ( index == I_PM_MESSAGE ) {
+ *h = wControlGetPosY( printMarginPLs[I_PM_FIRST+2].control ) + wControlGetHeight( printMarginPLs[I_PM_FIRST+2].control );
+ return;
+ }
+ wPos_t x0, y0;
+ x0 = (aPmLines[index-I_PM_FIRST].x0+aPmLines[index-I_PM_FIRST].x1)/2;
+ y0 = (aPmLines[index-I_PM_FIRST].y0+aPmLines[index-I_PM_FIRST].y1)/2;
+ x0 -= pmxoff;
+ y0 -= pmyoff;
+// y0 += wControlGetPosY( printMarginPLs[0].control ) + wControlGetHeight( printMarginPLs[0].control );
+// x0 -= wControlGetWidth( printMarginPLs[index-I_PM_FIRST].control )/2;
+// y0 -= wControlGetHeight( printMarginPLs[index-I_PM_FIRST].control )/2;
+ *w = x0;
+ *h = y0;
+}
+
+
+static const char * sPrinterName = NULL;
+
+static BOOL_T SetMargins()
+{
+ double top, right, bottom, left;
+ wPrintGetMargins( &top, &right, &bottom, &left );
+ sprintf( message, "%s-marginT", sPrinterName );
+ wPrefGetFloat( "printer", message, &printMargin.top, top );
+ sprintf( message, "%s-marginR", sPrinterName );
+ wPrefGetFloat( "printer", message, &printMargin.right, right );
+ sprintf( message, "%s-marginB", sPrinterName );
+ wPrefGetFloat( "printer", message, &printMargin.bottom, bottom );
+ sprintf( message, "%s-marginL", sPrinterName );
+ wPrefGetFloat( "printer", message, &printMargin.left, left );
+ ParamLoadControls( &printMarginPG );
+ return
+ fabs( top - printMargin.top ) >= 0.001 ||
+ fabs( right - printMargin.right ) >= 0.001 ||
+ fabs( bottom - printMargin.bottom ) >= 0.001 ||
+ fabs( left - printMargin.left ) >= 0.001;
+}
+
+
+static void DoPrintMarginOk( void * context )
+{
+ wHide( printMarginWin );
+ sprintf( message, "%s-marginT", sPrinterName );
+ wPrefSetFloat( "printer", message, printMargin.top );
+ sprintf( message, "%s-marginR", sPrinterName );
+ wPrefSetFloat( "printer", message, printMargin.right );
+ sprintf( message, "%s-marginB", sPrinterName );
+ wPrefSetFloat( "printer", message, printMargin.bottom );
+ sprintf( message, "%s-marginL", sPrinterName );
+ wPrefSetFloat( "printer", message, printMargin.left );
+ SetPageSize( TRUE );
+ for ( int inx = 0; inx < sizeof printPLs/sizeof printPLs[0]; inx++ ) {
+ if ( printPLs[inx].context == (void*)2 )
+ ParamLoadControl( &printPG, inx );
+ }
+ DoPrintScale();
+}
+
+static void PrintMarginDlgUpdate( paramGroup_p pg, int index, void * context )
+{
+ wControlActive( printMarginPLs[I_PM_RESET].control, TRUE );
+}
+
+static void PrintMarginReset()
+{
+ wPrintGetMargins( &printMargin.top, &printMargin.right, &printMargin.bottom, &printMargin.left );
+ ParamLoadControls( &printMarginPG );
+ wControlActive( printMarginPLs[I_PM_RESET].control, FALSE );
+}
+
+static void DoPrintMargin( void )
+{
+ sPrinterName = wPrintGetName();
+ while ( *sPrinterName == '\0' ) {
+ int rc = NoticeMessage( MSG_NO_PRINTER_SELECTED, _("Ok"), _("Cancel") );
+ if ( rc <= 0 )
+ return;
+ DoPrintSetup();
+ }
+ if ( printMarginWin == NULL ) {
+ wPos_t x=10, y=10;
+ printMarginWin = ParamCreateDialog( &printMarginPG, MakeWindowTitle(_("Print Margins")), _("Ok"), DoPrintMarginOk, NULL, TRUE, PrintMarginLayout, F_BLOCK, PrintMarginDlgUpdate );
+ if ( printMarginWin == NULL )
+ return;
+ for ( int i=0; i<sizeof aPmLines / sizeof aPmLines[0]; i++ ) {
+ aPmLines[i].x0 += x;
+ aPmLines[i].x1 += x;
+ aPmLines[i].y0 += y;
+ aPmLines[i].y1 += y;
+ }
+ wLineCreate( printMarginWin, NULL, sizeof aPmLines / sizeof aPmLines[0], aPmLines );
+ }
+ wMessageSetValue( (wMessage_p)printMarginPLs[I_PM_MESSAGE].control, sPrinterName );
+ // Enable Reset button if we've changed anything
+ wControlActive( printMarginPLs[I_PM_RESET].control, SetMargins() );
+ wShow( printMarginWin );
+
+}
+
+/*
+ * Misc buttons
+ */
static void DoPrintSetup( void )
{
wPrintSetup( (wPrintSetupCallBack_p)DoPrintScale );
+ sPrinterName = wPrintGetName();
+ SetPageSize( TRUE );
}
@@ -582,11 +761,10 @@ static void PrintClear( void )
for (x=bm.x0; x<bm.x1; x++)
if (BITMAP(bm,x,y)) {
BITMAP(bm,x,y) = 0;
- MarkPage( x, y );
}
pageCount = 0;
- ParamLoadMessage( &printPG, I_PAGECNT, _("0 pages") );
- ParamDialogOkActive( &printPG, FALSE );
+ UpdatePageCount();
+ TempRedraw(); // PrintClear
}
@@ -604,7 +782,6 @@ static void PrintSnapShot( void )
POS_T t;
PrintClear();
- DrawPrintGrid();
SetPageSize( FALSE );
pageSize = realPageSize;
if (pageSize.x > pageSize.y) {
@@ -665,11 +842,10 @@ static void PrintSnapShot( void )
ChangeDim();
pageCount = 1;
BITMAP(bm,0,0) = TRUE;
- DrawPrintGrid();
- ParamLoadMessage( &printPG, I_PAGECNT, _("1 page") );
- ParamDialogOkActive( &printPG, TRUE );
+ UpdatePageCount();
PrintEnableControls();
wShow( printWin );
+ TempRedraw(); // PrintSnapShot
}
@@ -729,20 +905,167 @@ static void DrawRegistrationMarks( drawCmd_p d )
}
}
+/**
+ * Format the page coordinates. Also handle cases where the coordinates are
+ * out of range.
+ *
+ * \param x x position
+ * \param y y position
+ * \return TRUE
+ */
+
+static char *
+FormatPageNumber(int x, int y)
+{
+ DynString formatted;
+ char *result;
+
+ DynStringMalloc(&formatted, 16);
+ if (x > 0 && x <= bm.x1 && y > 0 && y <= bm.y1) {
+ DynStringPrintf(&formatted, "(%d/%d)", x, y);
+ } else {
+ DynStringCatCStr(&formatted, "(-/-)");
+ }
+
+ result = strdup(DynStringToCStr(&formatted));
+ DynStringFree(&formatted);
+
+ return (result);
+}
+
+/**
+ * Print the page number in the center of the page
+ *
+ * \param x page index x-direction
+ * \param y page index y-direction
+ * \param width page width
+ * \param height page height
+ * \return TRUE
+ */
+
+static bool
+PrintPageNumber(wPos_t x, wPos_t y, DIST_T width, DIST_T height)
+{
+ coOrd printPosition;
+ coOrd textSize;
+
+ char *positionText;
+ wFont_p fp = wStandardFont(F_HELV, TRUE, FALSE);
+ wFontSize_t fs = 64.0;
+
+ positionText = FormatPageNumber(x + 1, y + 1);
+
+ // even though we're printing into page_d, mainD must be used here
+ DrawTextSize(&mainD, positionText, fp, fs, TRUE, &textSize);
+
+ if (printFormat == PORTRAIT) {
+ printPosition.x = (width - textSize.x) / 2;
+ printPosition.y = (height - textSize.y) / 2;
+ } else {
+ printPosition.x = (height - textSize.x) / 2;
+ printPosition.y = (width - textSize.y) / 2;
+ }
+
+ page_d.funcs->options |= wDrawOutlineFont;
+ DrawString(&page_d, printPosition, 0.0, positionText, fp, fs,
+ wDrawColorGray(70));
+ page_d.funcs->options &= ~wDrawOutlineFont;
+
+ free(positionText);
+
+ return (TRUE);
+}
+
+/**
+ * Print the page number of an adjoining page at a specified position
+ *
+ * \param x page index x-direction
+ * \param y page index y-direction
+ * \param position page position
+ */
+
+void
+PrintNextPageNumberAt(int x, int y, coOrd position)
+{
+ char *pageNumber;
+ wFont_p fp = wStandardFont(F_HELV, FALSE, FALSE);
+ wFontSize_t fs = 8.0;
+
+ pageNumber = FormatPageNumber(x, y);
+ DrawString(&page_d, position, 0.0, pageNumber, fp, fs, wDrawColorBlack);
+ free(pageNumber);
+}
+
+/**
+ * Print the page numbers of all four adjoining pages (left, right, above, below)
+ *
+ * \param x page index of current page x
+ * \param y page index of current page y
+ * \param pageW width of page
+ * \param pageH height of page
+ *
+ * \return TRUE
+ */
+
+static bool
+PrintNextPageNumbers(int x, int y, DIST_T pageW, DIST_T pageH)
+{
+ coOrd p00;
+
+ // above
+ if (printFormat == PORTRAIT) {
+ p00.x = pageW / 2.0 - 20.0 / 72.0;
+ p00.y = pageH - 10.0 / 72.0;
+ } else {
+ p00.x = pageH / 2.0 - 20.0 / 72.0;
+ p00.y = pageW - 10.0 / 72.0;
+ }
+ PrintNextPageNumberAt(x + 1, y + 2, p00);
+
+ // below
+ if (printFormat == PORTRAIT) {
+ p00.y = 10.0 / 72.0;
+ } else {
+ p00.y = 10.0 / 72.0;
+ }
+ PrintNextPageNumberAt(x + 1, y, p00);
+
+ // right
+ if (printFormat == PORTRAIT) {
+ p00.y = pageH / 2 + 10.0 / 72.0;
+ p00.x = pageW - 20.0 / 72.0;
+ } else {
+ p00.y = pageW / 2 + 10.0 / 72.0;
+ p00.x = pageH - 20.0 / 72.0;
+ }
+ PrintNextPageNumberAt(x + 2, y + 1, p00);
+
+ // left
+ if (printFormat == PORTRAIT) {
+ p00.x = 10.0 / 72.0;
+ } else {
+ p00.x = 10.0 / 72.0;
+ }
+ PrintNextPageNumberAt(x, y + 1, p00);
+ return (TRUE);
+}
static BOOL_T PrintPage(
int x,
int y )
{
- coOrd orig, p[4], minP, maxP;
+ coOrd orig, p[4], psave[4], minP, maxP;
int i;
coOrd clipOrig, clipSize;
- wFont_p fp;
coOrd roomSize;
if (BITMAP(bm,x,y)) {
orig.x = currPrintGrid.orig.x + x*currPrintGrid.size.x;
orig.y = currPrintGrid.orig.y + y*currPrintGrid.size.y;
+ if (printPhysSize) {
+ orig.x += printMargin.left;
+ orig.y += printMargin.bottom;
+ }
Rotate( &orig, currPrintGrid.orig, currPrintGrid.angle );
p[0] = p[1] = p[2] = p[3] = orig;
p[1].x = p[2].x = orig.x + currPrintGrid.size.x;
@@ -774,6 +1097,9 @@ static BOOL_T PrintPage(
Translate( &print_d.orig, orig, currPrintGrid.angle+180.0, printScale );
print_d.size.y += printScale;
}
+ for (int i=0;i<4;i++) {
+ psave[i] = p[i];
+ }
if (printRotate) {
rotateCW = (printFormat != PORTRAIT);
if (rotateCW) {
@@ -798,7 +1124,7 @@ static BOOL_T PrintPage(
page_d.size.x = print_d.size.x/printScale;
page_d.size.y = print_d.size.y/printScale;
}
- wSetCursor( wCursorWait );
+ wSetCursor( mainD.d, wCursorWait );
print_d.scale = printScale;
if (print_d.d == NULL)
AbortProg( "wPrintPageStart" );
@@ -814,8 +1140,7 @@ static BOOL_T PrintPage(
if (printRotate && rotateCW) {
print_d.size.x += printScale;
}
- } else if (printRegistrationMarks)
- PrintPlainBox( x, y, p );
+ }
if (printRotate) {
wPrintClip( (wPos_t)(clipOrig.y*print_d.dpi), (wPos_t)(clipOrig.x*print_d.dpi),
(wPos_t)(clipSize.y*print_d.dpi), (wPos_t)(clipSize.x*print_d.dpi) );
@@ -827,7 +1152,7 @@ static BOOL_T PrintPage(
p[1].x = p[2].x = roomSize.x;
p[0].y = p[1].y = 0.0;
p[2].y = p[3].y = roomSize.y;
- fp = wStandardFont( F_TIMES, FALSE, FALSE );
+
DrawRuler( &print_d, p[0], p[1], 0.0, TRUE, FALSE, wDrawColorBlack );
DrawRuler( &print_d, p[0], p[3], 0.0, TRUE, TRUE, wDrawColorBlack );
DrawRuler( &print_d, p[1], p[2], 0.0, FALSE, FALSE, wDrawColorBlack );
@@ -885,6 +1210,7 @@ static BOOL_T PrintPage(
DrawRuler( &print_d, p[0], p[1], minP.x, FALSE, TRUE, wDrawColorBlack );
}
}
+
if (printGrid)
DrawSnapGrid( &print_d, mapD.size, FALSE );
roadbedWidth = printRoadbed?printRoadbedWidth:0.0;
@@ -892,10 +1218,15 @@ static BOOL_T PrintPage(
DrawTracks( &print_d, print_d.scale, minP, maxP );
if (printRegistrationMarks && printScale == 1)
DrawRegistrationMarks( &print_d );
+ if (printRegistrationMarks)
+ PrintPlainBox( x, y, psave );
+
+ if (printPageNumbers) {
+ PrintPageNumber(x, y, page_d.size.x, page_d.size.y);
+ PrintNextPageNumbers(x, y, page_d.size.x, page_d.size.y);
+ }
if ( !wPrintPageEnd( print_d.d ) )
return FALSE;
- /*BITMAP(bm,x,y) = 0;*/
- MarkPage( x, y );
}
return TRUE;
}
@@ -920,9 +1251,9 @@ static void DoPrintPrint( void * junk )
wPrefGetInteger( "print", "nodecoration", &noDecoration, 0 );
print_d.CoOrd2Pix = page_d.CoOrd2Pix = mainD.CoOrd2Pix;
- wSetCursor( wCursorWait );
+ wSetCursor( mainD.d, wCursorWait );
if (!wPrintDocStart(GetLayoutTitle(), pageCount, &copies )) {
- wSetCursor( wCursorNormal );
+ wSetCursor( mainD.d, defaultCursor );
return;
}
if (copies <= 0)
@@ -940,42 +1271,38 @@ static void DoPrintPrint( void * junk )
for (y=bm.y0; y<bm.y1; y++)
for (x=bm.x0; x<bm.x1; x++)
if (BITMAP(bm,x,y)) {
- if (copy < copies)
- MarkPage( x, y );
- else
+ if (copy >= copies)
BITMAP(bm,x,y) = 0;
}
}
quitPrinting:
wPrintDocEnd();
- wSetCursor( wCursorNormal );
+ wSetCursor( mainD.d, defaultCursor );
Reset(); /* undraws grid, resets pagecount, etc */
}
static void DoResetGrid( void )
{
- DrawPrintGrid();
currPrintGrid.orig = zero;
currPrintGrid.angle = 0.0;
ChangeDim();
newPrintGrid = currPrintGrid;
ParamLoadControls( &printPG );
- DrawPrintGrid();
+ TempRedraw(); // DoResetGrid
}
static void PrintGridRotate( void * pangle )
{
ANGLE_T angle = (ANGLE_T)(long)pangle;
- DrawPrintGrid();
currPrintGrid.orig = cmdMenuPos;
- currPrintGrid.angle += angle;
+ currPrintGrid.angle += angle/1000;
newPrintGrid = currPrintGrid;
ParamLoadControls( &printPG );
ChangeDim();
- DrawPrintGrid();
+ TempRedraw(); // PrintGridRotate
}
/*****************************************************************************
@@ -1008,6 +1335,7 @@ static void PrintDlgUpdate(
else if ( pg->paramPtr[inx].context == (void*)2 )
PrintUpdate( inx );
ParamControlActive( &printPG, I_RULER, currPrintGrid.angle == 0 );
+ TempRedraw(); // PrintDlgUpdate
}
static STATUS_T CmdPrint(
@@ -1038,6 +1366,8 @@ static STATUS_T CmdPrint(
print_d.scale = printScale;
printWin = ParamCreateDialog( &printPG, MakeWindowTitle(_("Print")), _("Print"), DoPrintPrint, (paramActionCancelProc)Reset, TRUE, NULL, 0, PrintDlgUpdate );
}
+ sPrinterName = wPrintGetName();
+ SetMargins();
wShow( printWin );
SetPageSize( TRUE );
if (currPrintGrid.size.x == 0.0) {
@@ -1050,17 +1380,15 @@ static STATUS_T CmdPrint(
currPrintGrid.size.y = maxPageSize.y;
newPrintGrid = currPrintGrid;
ParamLoadControls( &printPG );
- DrawPrintGrid();
pageCount = 0;
+ UpdatePageCount();
LOG( log_print, 2, ( "Page size = %0.3f %0.3f\n", currPrintGrid.size.x, currPrintGrid.size.y ) )
PrintChange( CHANGE_MAP|CHANGE_UNITS );
- ParamGroupRecord( &printPG );
- ParamLoadMessage( &printPG, I_PAGECNT, "0 pages" );
- ParamDialogOkActive( &printPG, FALSE );
ChangeDim();
InfoMessage( _("Select pages to print, or drag to move print grid") );
downShift = FALSE;
ParamControlActive( &printPG, I_RULER, currPrintGrid.angle == 0 );
+ TempRedraw(); // CmdPrint C_START
return C_CONTINUE;
case C_DOWN:
@@ -1083,10 +1411,8 @@ LOG( log_print, 2, ( "Page size = %0.3f %0.3f\n", currPrintGrid.size.x, currPrin
if (downShift) {
rc = GridAction( action, pos, &newPrintGrid.orig, &newPrintGrid.angle );
ParamLoadControls( &printPG );
- DrawPrintGrid();
currPrintGrid = newPrintGrid;
ChangeDim();
- DrawPrintGrid();
downShift = FALSE;
}
return C_CONTINUE;
@@ -1115,10 +1441,8 @@ LOG( log_print, 2, ( "Page size = %0.3f %0.3f\n", currPrintGrid.size.x, currPrin
if (downShift) {
rc = GridAction( action, pos, &newPrintGrid.orig, &newPrintGrid.angle );
ParamLoadControls( &printPG );
- DrawPrintGrid();
currPrintGrid = newPrintGrid;
ChangeDim();
- DrawPrintGrid();
downShift = FALSE;
ParamControlActive( &printPG, I_RULER, currPrintGrid.angle == 0 );
}
@@ -1126,13 +1450,13 @@ LOG( log_print, 2, ( "Page size = %0.3f %0.3f\n", currPrintGrid.size.x, currPrin
case C_REDRAW:
DrawPrintGrid();
+ rc = GridAction( action, pos, &newPrintGrid.orig, &newPrintGrid.angle );
return C_TERMINATE;
case C_CANCEL:
if (printWin == NULL)
return C_TERMINATE;
PrintClear();
- DrawPrintGrid();
wHide( printWin );
return C_TERMINATE;
@@ -1141,6 +1465,7 @@ LOG( log_print, 2, ( "Page size = %0.3f %0.3f\n", currPrintGrid.size.x, currPrin
return C_TERMINATE;
case C_CMDMENU:
+ menuPos = pos;
wMenuPopupShow( printGridPopupM );
return C_CONTINUE;
@@ -1157,7 +1482,8 @@ EXPORT wIndex_t InitCmdPrint( wMenu_p menu )
RegisterChangeNotification( PrintChange );
printGridPopupM = MenuRegister( "Print Grid Rotate" );
AddRotateMenu( printGridPopupM, PrintGridRotate );
- return InitCommand( menu, CmdPrint, N_("Print..."), NULL, LEVEL0, IC_LCLICK|IC_POPUP2|IC_CMDMENU, ACCL_PRINT );
+ ParamRegister( &printMarginPG );
+ return InitCommand( menu, CmdPrint, N_("Print..."), NULL, LEVEL0, IC_LCLICK|IC_POPUP3|IC_CMDMENU, ACCL_PRINT );
}
/*****************************************************************************
diff --git a/app/bin/cprofile.c b/app/bin/cprofile.c
index 49c3289..4f375ed 100644
--- a/app/bin/cprofile.c
+++ b/app/bin/cprofile.c
@@ -21,6 +21,7 @@
*/
#include <math.h>
+#include <stdbool.h>
#include "custom.h"
#include "cselect.h"
@@ -105,19 +106,21 @@ static BOOL_T printVert = TRUE;
static wMenu_p profilePopupM;
static track_p profilePopupTrk;
static EPINX_T profilePopupEp;
-static wMenuToggle_p profilePopupToggles[3];
+static wMenuToggle_p profilePopupToggles[3];
-static int log_profile = 0;
+static int log_profile = 0;
#define LABELH (labelH*fontSize/screenProfileFontSize)
+#define LABELW (labelW*fontSize/screenProfileFontSize)
#define PBB(FS) (2.0*(labelH*(FS)/screenProfileFontSize+3.0/mainD.dpi))
#define PBT (10.0/mainD.dpi)
-#define PBR (30.0/mainD.dpi)
-#define PBL (20.0/mainD.dpi)
+#define PBR(FS) (1.0*(labelW*(FS)/screenProfileFontSize+3.0/mainD.dpi))
+#define PBL(FS) (1.0*(labelW*(FS)/screenProfileFontSize+3.0/mainD.dpi))
static FLOAT_T labelH;
+static FLOAT_T labelW;
-track_p pathStartTrk;
+track_p pathStartTrk;
EPINX_T pathStartEp;
track_p pathEndTrk;
EPINX_T pathEndEp;
@@ -126,330 +129,467 @@ EPINX_T pathEndEp;
#define NOP
typedef struct {
- track_p trk;
- EPINX_T ep;
- DIST_T elev;
- DIST_T dist;
- BOOL_T defined; /* from prev PE to current */
- } profElem_t, *profElem_p;
-static dynArr_t profElem_da;
-#define profElem(N) DYNARR_N( profElem_t, profElem_da, N )
+ track_p trk;
+ EPINX_T ep;
+ DIST_T elev;
+ DIST_T dist;
+ BOOL_T defined; /* from prev PE to current */
+} profElem_t, *profElem_p;
+
+static dynArr_t profElem_da;
+static profElem_p copyOfprofElem;
+
+#define profElem(N) DYNARR_N( profElem_t, profElem_da, N )
typedef struct {
- DIST_T dist;
- char * name;
- } station_t, *station_p;
-static dynArr_t station_da;
+ DIST_T dist;
+ char * name;
+} station_t, *station_p;
+static dynArr_t station_da;
+
#define station(N) DYNARR_N( station_t, station_da, N )
+
struct {
- DIST_T totalD, minE;
- int minC, maxC, incrC;
- DIST_T scaleX, scaleY;
- } prof;
-static void DrawProfile( drawCmd_p D, wFontSize_t fontSize, BOOL_T printVert )
+ DIST_T totalD, minE;
+ int minC, maxC, incrC;
+ DIST_T scaleX, scaleY;
+} prof;
+
+
+/**
+ * Creates a copy of profile elements
+ */
+
+static void
+CreateCopyProfileElements()
{
- coOrd pl, pt, pb;
- int inx;
- DIST_T grade;
- wFont_p fp;
- static dynArr_t points_da;
-#define points(N) DYNARR_N( coOrd, points_da, N )
- wDrawWidth lw;
- station_p ps;
- coOrd textsize;
-
- lw = (wDrawWidth)(D->dpi*2.0/mainD.dpi);
- fp = wStandardFont( F_HELV, FALSE, FALSE );
- DYNARR_RESET( coOrd, points_da );
-
- pb.x = pt.x = 0;
- pb.y = prof.minE; pt.y = GetDim(prof.maxC);
- DrawLine( D, pb, pt, 0, snapGridColor );
- pb.x = pt.x = prof.totalD;
- DrawLine( D, pb, pt, 0, snapGridColor );
- pb.x = 0;
- pt.x = prof.totalD;
- for (inx=prof.minC; inx<=prof.maxC; inx+=prof.incrC) {
- pt.y = pb.y = GetDim(inx);
- DrawLine( D, pb, pt, 0, snapGridColor );
- pl.x = -(PBL-3.0/mainD.dpi)/prof.scaleX*D->scale;
- pl.y = pb.y-LABELH/2/prof.scaleY*D->scale;
- sprintf( message, "%d", inx );
- DrawString( D, pl, 0.0, message, fp, fontSize*D->scale, borderColor );
- }
- if ( profElem_da.cnt <= 0 )
- return;
-
- for (inx=0; inx<profElem_da.cnt; inx++ ) {
- pt.y = profElem(inx).elev;
- pt.x = profElem(inx).dist;
- DYNARR_APPEND( coOrd, points_da, 10 );
- points(points_da.cnt-1) = pt;
- }
- pb.y = pt.y = prof.minE;
- if ( points_da.cnt > 1 ) {
- DYNARR_APPEND( coOrd, points_da, 10 );
- pt.x = prof.totalD;
- points(points_da.cnt-1) = pt;
- DYNARR_APPEND( coOrd, points_da, 10 );
- pb.x = 0;
- points(points_da.cnt-1) = pb;
- DrawFillPoly( D, points_da.cnt, &points(0), profileColorFill );
- DrawLine( D, pb, pt, lw, borderColor );
- }
+ if (copyOfprofElem) {
+ MyFree(copyOfprofElem);
+ }
+
+ copyOfprofElem = MyMalloc(profElem_da.cnt * sizeof(profElem_t));
+ if (!copyOfprofElem) {
+ AbortProg("Couldn't allocate memory for profile copy\n");
+ }
+ for (int i = 0; i < profElem_da.cnt; i++) {
+ copyOfprofElem[i] = profElem(i);
+ }
+}
- pt.y = prof.minE-(2*LABELH+3.0/mainD.dpi)/prof.scaleY*D->scale;
- for (inx=0; inx<station_da.cnt; inx++ ) {
- ps = &station(inx);
- DrawTextSize( &mainD, ps->name, fp, fontSize, FALSE, &textsize );
- pt.x = ps->dist - textsize.x/2.0/prof.scaleX*D->scale;
- if (pt.x < -PBR)
- pt.x = -(PBR-3/mainD.dpi)/prof.scaleX*D->scale;
- else if (pt.x+textsize.x > prof.totalD)
- pt.x = prof.totalD-(textsize.x-3/mainD.dpi)/prof.scaleX*D->scale;
- DrawString( D, pt, 0.0, ps->name, fp, fontSize*D->scale, borderColor );
- }
+/**
+ * Destroys the copy of profile elements
+ */
- pb.x = 0.0; pb.y = prof.minE;
- pt = points(0);
- DrawLine( D, pb, pt, lw, borderColor );
- sprintf( message, "%0.1f", PutDim(profElem(0).elev) );
- if (printVert) {
- pl.x = pt.x + LABELH/2.0/prof.scaleX*D->scale;
- pl.y = pt.y + 2.0/mainD.dpi/prof.scaleY*D->scale;
- DrawString( D, pl, 270.0, message, fp, fontSize*D->scale, borderColor );
- } else {
- pl.x = pt.x+2.0/mainD.dpi/prof.scaleX*D->scale;
- pl.y = pt.y;
- if (profElem_da.cnt>1 && profElem(0).elev < profElem(1).elev )
- pl.y -= LABELH/prof.scaleY*D->scale;
- DrawString( D, pl, 0.0, message, fp, fontSize*D->scale, borderColor );
- }
- pl = pt;
-
- for (inx=1; inx<profElem_da.cnt; inx++ ) {
- pt.y = profElem(inx).elev;
- pb.x = pt.x = profElem(inx).dist;
- pt = points(inx);
- pb.x = pt.x;
- DrawLine( D, pl, pt, lw, (profElem(inx).defined?profileColorDefinedProfile:profileColorUndefinedProfile) );
- DrawLine( D, pb, pt, lw, borderColor );
- if (profElem(inx).dist > 0.1) {
- grade = fabs(profElem(inx).elev-profElem(inx-1).elev)/
- (profElem(inx).dist-profElem(inx-1).dist);
- sprintf( message, "%0.1f%%", grade*100.0 );
- DrawTextSize( &mainD, message, fp, fontSize, FALSE, &textsize );
- pl.x = (points(inx).x+points(inx-1).x)/2.0;
- pl.y = (points(inx).y+points(inx-1).y)/2.0;
- if (printVert) {
- pl.x += (LABELH/2)/prof.scaleX*D->scale;
- pl.y += ((LABELH/2)*grade/prof.scaleX + 2.0/mainD.dpi/prof.scaleY)*D->scale;
- DrawString( D, pl, 270.0, message, fp, fontSize*D->scale, borderColor );
- } else {
- pl.x -= (textsize.x/2)/prof.scaleX*D->scale;
- pl.y += (textsize.x/2)*grade/prof.scaleX*D->scale;
- DrawString( D, pl, 0.0, message, fp, fontSize*D->scale, borderColor );
- }
- }
- if (units==UNITS_ENGLISH) {
- if (prof.totalD > 240)
- sprintf( message, "%d'", ((int)floor(profElem(inx).dist)+6)/12 );
- else
- sprintf( message, "%d'%d\"", ((int)floor(profElem(inx).dist+0.5))/12, ((int)floor(profElem(inx).dist+0.5))%12 );
- } else {
- if (PutDim(prof.totalD) > 10000)
- sprintf( message, "%0.0fm", (PutDim(profElem(inx).dist)+50)/100.0 );
- else if (PutDim(prof.totalD) > 100)
- sprintf( message, "%0.1fm", (PutDim(profElem(inx).dist)+5)/100.0 );
- else
- sprintf( message, "%0.2fm", (PutDim(profElem(inx).dist)+0.5)/100.0 );
- }
- DrawTextSize( &mainD, message, fp, fontSize, FALSE, &textsize );
- pl.x = pb.x-(textsize.x/2)/prof.scaleX*D->scale;
- pl.y = prof.minE-(LABELH+3.0/mainD.dpi)/prof.scaleY*D->scale;
- DrawString( D, pl, 0.0, message, fp, fontSize*D->scale, borderColor );
- sprintf( message, "%0.1f", PutDim(profElem(inx).elev) );
- if (printVert) {
- pl.x = pt.x + LABELH/2.0/prof.scaleX*D->scale;
- pl.y = pt.y + 2.0/mainD.dpi/prof.scaleY*D->scale;
- DrawString( D, pl, 270.0, message, fp, fontSize*D->scale, borderColor );
- } else {
- pl.x = pt.x + 2.0/mainD.dpi/prof.scaleX*D->scale;
- pl.y = pt.y;
- if ( inx != profElem_da.cnt-1 && profElem(inx).elev < profElem(inx+1).elev )
- pl.y -= LABELH/prof.scaleY*D->scale;
- DrawString( D, pl, 0.0, message, fp, fontSize*D->scale, borderColor );
+static void
+DestroyCopyOfProfileElements()
+{
+ if (copyOfprofElem) {
+ MyFree(copyOfprofElem);
+ copyOfprofElem = NULL;
+ }
+}
+
+
+/**
+ * Draw profile
+ *
+ * \param D The drawCmd_p to use.
+ * \param fontSize Size of the font.
+ * \param printVert print vertical.
+ */
+
+static void DrawProfile(drawCmd_p D, wFontSize_t fontSize, BOOL_T printVert)
+{
+ coOrd pl, pt, pb;
+ int inx;
+ DIST_T grade;
+ wFont_p fp;
+ static dynArr_t points_da;
+#define points(N) DYNARR_N( coOrd, points_da, N )
+ wDrawWidth lw;
+ station_p ps;
+ coOrd textsize;
+
+ lw = (wDrawWidth)(D->dpi*1.0/mainD.dpi);
+ fp = wStandardFont(F_HELV, FALSE, FALSE);
+ DYNARR_RESET(pts_t, points_da);
+
+ pb.x = pt.x = 0;
+ pb.y = prof.minE;
+ pt.y = GetDim(prof.maxC);
+ DrawLine(D, pb, pt, 0, snapGridColor);
+ pb.x = pt.x = prof.totalD;
+ DrawLine(D, pb, pt, 0, snapGridColor);
+ pb.x = 0;
+ pt.x = prof.totalD;
+
+ // Draw horizontal grid and y scale
+ for (inx=prof.minC; inx<=prof.maxC; inx+=prof.incrC) {
+ coOrd textsize;
+ // grid line
+ pt.y = pb.y = GetDim(inx);
+ DrawLine(D, pb, pt, 0, snapGridColor);
+ // scale
+ sprintf(message, "%d", inx);
+ DrawTextSize(&mainD, message, wStandardFont(F_HELV, FALSE, FALSE),
+ screenProfileFontSize, FALSE, &textsize);
+ pl.x = ((-3.0/mainD.dpi) - textsize.y*0.5 - textsize.x) / prof.scaleX*D->scale;
+ pl.y = pb.y-LABELH/2/prof.scaleY*D->scale;
+
+ DrawString(D, pl, 0.0, message, fp, fontSize*D->scale, borderColor);
+ }
+
+ // show the measurement units
+ sprintf(message, "%s", units == UNITS_ENGLISH ? "in." : "cm");
+ DrawTextSize(&mainD, message, wStandardFont(F_HELV, FALSE, FALSE),
+ screenProfileFontSize, FALSE, &textsize);
+ pl.x = ((-3.0 / mainD.dpi) - textsize.y*0.5 - textsize.x) /
+ prof.scaleX*D->scale;
+ pl.y += LABELH * 1.5 / prof.scaleY*D->scale;
+ DrawString(D, pl, 0.0, message, fp, fontSize*D->scale, borderColor);
+
+ if (profElem_da.cnt <= 0) {
+ return;
+ }
+
+ for (inx=0; inx<profElem_da.cnt; inx++) {
+ pt.y = profElem(inx).elev;
+ pt.x = profElem(inx).dist;
+ DYNARR_APPEND(pts_t, points_da, 10);
+ points(points_da.cnt-1) = pt;
+ }
+ pb.y = pt.y = prof.minE;
+ if (points_da.cnt > 1) {
+ DYNARR_APPEND(coOrd, points_da, 10);
+ pt.x = prof.totalD;
+ points(points_da.cnt-1) = pt;
+ DYNARR_APPEND(pts_t, points_da, 10);
+ pb.x = 0;
+ points(points_da.cnt-1) = pb;
+ DrawPoly(D, points_da.cnt, points_da.ptr, NULL, profileColorFill, 1, 1, 0);
+ }
+
+ pt.y = prof.minE-(2*LABELH+3.0/mainD.dpi)/prof.scaleY*D->scale;
+ for (inx=0; inx<station_da.cnt; inx++) {
+ ps = &station(inx);
+ DrawTextSize(&mainD, ps->name, fp, fontSize, FALSE, &textsize);
+ pt.x = ps->dist - textsize.x/2.0/prof.scaleX*D->scale;
+ if (pt.x < -PBR(screenProfileFontSize)) {
+ pt.x = -(PBR(screenProfileFontSize)-3/mainD.dpi)/prof.scaleX*D->scale;
+ } else if (pt.x+textsize.x > prof.totalD) {
+ pt.x = prof.totalD-(textsize.x-3/mainD.dpi)/prof.scaleX*D->scale;
+ }
+ DrawString(D, pt, 0.0, ps->name, fp, fontSize*D->scale, borderColor);
+ }
+
+ pb.x = 0.0;
+ pb.y = prof.minE;
+
+ // mark the starting point for the profile
+ pt = points(0);
+ DrawLine(D, pb, pt, lw, snapGridColor);
+ DrawArc(D, pt, 0.05, 0, 360, TRUE, 2, wDrawColorGrey40);
+ if (units==UNITS_ENGLISH) {
+ sprintf(message, "%0.1f", PutDim(profElem(0).elev)+0.05);
+ } else {
+ sprintf(message, "%0.1f", PutDim(profElem(0).elev)+0.05);
+ }
+ if (printVert) {
+ pl.x = pt.x + LABELH/2.0/prof.scaleX*D->scale;
+ pl.y = pt.y + 2.0/mainD.dpi/prof.scaleY*D->scale + GetDim(prof.incrC) / 16;;
+ DrawString(D, pl, 270.0, message, fp, fontSize*D->scale, borderColor);
+ } else {
+ pl.x = pt.x+2.0/mainD.dpi/prof.scaleX*D->scale + GetDim(prof.incrC) / 16;;
+ pl.y = pt.y;
+ if (profElem_da.cnt>1 && profElem(0).elev < profElem(1).elev) {
+ pl.y -= LABELH/prof.scaleY*D->scale;
+ }
+ DrawString(D, pl, 0.0, message, fp, fontSize*D->scale, borderColor);
+ }
+ pl = pt;
+
+ for (inx=1; inx<profElem_da.cnt; inx++) {
+ pt.y = profElem(inx).elev;
+ pb.x = pt.x = profElem(inx).dist;
+ pt = points(inx);
+
+ // draw line to x-axis for intermediate elevation points
+ if (inx != profElem_da.cnt - 1) {
+ unsigned long oldOptions = D->options;
+
+ D->options = D->options | DC_DOT;
+ DrawLine(D, pb, pt, lw, borderColor);
+ D->options = oldOptions;
}
- pl = pt;
- }
+
+ // draw grade line
+ DrawLine(D, pl, pt, lw*2, (profElem(inx).defined ? profileColorDefinedProfile :
+ profileColorUndefinedProfile));
+ // draw the markers
+ DrawArc(D, pt, 0.05, 0, 360, TRUE, 2, wDrawColorGrey40);
+
+ if (profElem(inx).dist > 0.1) {
+ grade = fabs(profElem(inx).elev-profElem(inx-1).elev)/
+ (profElem(inx).dist-profElem(inx-1).dist);
+ sprintf(message, "%0.1f%%", round(grade*1000.0)/10.0);
+ DrawTextSize(&mainD, message, fp, fontSize, FALSE, &textsize);
+ pl.x = (points(inx).x+points(inx-1).x)/2.0;
+ pl.y = (points(inx).y+points(inx-1).y)/2.0;
+ if (printVert) {
+ pl.x += (LABELH/2)/prof.scaleX*D->scale;
+ pl.y += ((LABELH/2)*grade/prof.scaleX + 2.0/mainD.dpi/prof.scaleY)*D->scale;
+ DrawString(D, pl, 270.0, message, fp, fontSize*D->scale, borderColor);
+ } else {
+ pl.x -= (textsize.x/2)/prof.scaleX*D->scale;
+ pl.y += (textsize.x/2)*grade/prof.scaleX*D->scale;
+ DrawString(D, pl, 0.0, message, fp, fontSize*D->scale, borderColor);
+ }
+ }
+ if (units==UNITS_ENGLISH) {
+ if (prof.totalD > 240) {
+ sprintf(message, "%0.1f'", (round((profElem(inx).dist/12.0)*10.0)/10.0));
+ } else {
+ sprintf(message, "%d'%0.1f\"", (int)floor((profElem(inx).dist)/12.0),
+ round(fmod(profElem(inx).dist,12.0)*10.0)/10.0);
+ }
+ } else {
+ if (PutDim(prof.totalD) > 10000) {
+ sprintf(message, "%0.1fm", (round(PutDim(profElem(inx).dist)/10.0)/10.0));
+ } else if (PutDim(prof.totalD) > 100) {
+ sprintf(message, "%0.2fm", (round(PutDim(profElem(inx).dist))/100.0));
+ } else {
+ sprintf(message, "%0.1fcm", round(PutDim(profElem(inx).dist)+0.5));
+ }
+ }
+ DrawTextSize(&mainD, message, fp, fontSize, FALSE, &textsize);
+ pl.x = pb.x-(textsize.x/2)/prof.scaleX*D->scale;
+ pl.y = prof.minE-(LABELH+3.0/mainD.dpi)/prof.scaleY*D->scale;
+ DrawString(D, pl, 0.0, message, fp, fontSize*D->scale, borderColor);
+ sprintf(message, "%0.1f", round(PutDim(profElem(inx).elev)*100.0)/100.0);
+ if (printVert) {
+ pl.x = pt.x + LABELH/2.0/prof.scaleX*D->scale;
+ pl.y = pt.y + 2.0/mainD.dpi/prof.scaleY*D->scale+GetDim(prof.incrC) / 16;
+ DrawString(D, pl, 270.0, message, fp, fontSize*D->scale, borderColor);
+ } else {
+ pl.x = pt.x + 2.0/mainD.dpi/prof.scaleX*D->scale + GetDim(prof.incrC) / 16;
+ pl.y = pt.y;
+ if (inx != profElem_da.cnt-1 && profElem(inx).elev < profElem(inx+1).elev) {
+ pl.y -= LABELH/prof.scaleY*D->scale;
+ }
+ DrawString(D, pl, 0.0, message, fp, fontSize*D->scale, borderColor);
+ }
+ pl = pt;
+ }
}
-static void ProfilePix2CoOrd( drawCmd_p, wPos_t, wPos_t, coOrd * );
-static void ProfileCoOrd2Pix( drawCmd_p, coOrd, wPos_t*, wPos_t* );
+static void ProfilePix2CoOrd(drawCmd_p, wPos_t, wPos_t, coOrd *);
+static void ProfileCoOrd2Pix(drawCmd_p, coOrd, wPos_t*, wPos_t*);
static drawCmd_t screenProfileD = {
- NULL,
- &screenDrawFuncs,
- DC_NOCLIP,
- 1.0,
- 0.0,
- {0.0,0.0}, {0.0,0.0},
- ProfilePix2CoOrd, ProfileCoOrd2Pix };
+ NULL,
+ &screenDrawFuncs,
+ DC_NOCLIP,
+ 1.0,
+ 0.0,
+ {0.0,0.0}, {0.0,0.0},
+ ProfilePix2CoOrd, ProfileCoOrd2Pix
+};
static void ProfilePix2CoOrd(
- drawCmd_p d,
- wPos_t xx,
- wPos_t yy,
- coOrd * pos )
+ drawCmd_p d,
+ wPos_t xx,
+ wPos_t yy,
+ coOrd * pos)
{
- pos->x = (xx/d->dpi+d->orig.x)/prof.scaleX;
- pos->y = (yy/d->dpi+d->orig.y)/prof.scaleY+prof.minE;
+ pos->x = (xx/d->dpi+d->orig.x)/prof.scaleX;
+ pos->y = (yy/d->dpi+d->orig.y)/prof.scaleY+prof.minE;
}
+
static void ProfileCoOrd2Pix(
- drawCmd_p d,
- coOrd pos,
- wPos_t *xx,
- wPos_t *yy )
+ drawCmd_p d,
+ coOrd pos,
+ wPos_t *xx,
+ wPos_t *yy)
{
- wPos_t x, y;
- x = (wPos_t)((((pos.x*prof.scaleX)/d->scale-d->orig.x)*d->dpi+0.5));
- y = (wPos_t)(((((pos.y-prof.minE)*prof.scaleY)/d->scale-d->orig.y)*d->dpi+0.5));
- if ( d->angle == 0 ) {
- *xx = x;
- *yy = y;
- } else if ( d->angle == -90.0 ) {
- /* L->P */
- *xx = y;
- *yy = -x;
- } else {
- /* P->L */
- *xx = -y;
- *yy = x;
- }
+ wPos_t x, y;
+ x = (wPos_t)((((pos.x*prof.scaleX)/d->scale-d->orig.x)*d->dpi+0.5));
+ y = (wPos_t)(((((pos.y-prof.minE)*prof.scaleY)/d->scale-d->orig.y)*d->dpi+0.5));
+ if (d->angle == 0) {
+ *xx = x;
+ *yy = y;
+ } else if (d->angle == -90.0) {
+ /* L->P */
+ *xx = y;
+ *yy = -x;
+ } else {
+ /* P->L */
+ *xx = -y;
+ *yy = x;
+ }
}
+/**
+ * Redraw profile window
+ */
-static void RedrawProfileW( void )
+static void RedrawProfileW(void)
{
- wPos_t ww, hh;
- coOrd size;
- int inx, divC;
- DIST_T maxE, rngE;
- profElem_t *p;
- wFont_p fp;
- POS_T w;
- coOrd textsize;
-
- wDrawClear( screenProfileD.d );
- wDrawGetSize( screenProfileD.d, &ww, &hh );
- screenProfileD.size.x = (ww)/screenProfileD.dpi;
- screenProfileD.size.y = (hh)/screenProfileD.dpi;
- screenProfileD.orig.x = -PBL;
- screenProfileD.orig.y = -PBB(screenProfileFontSize);
-
- /* Calculate usable dimension of canvas */
- size = screenProfileD.size;
- size.x -= (PBL);
- size.y -= (PBB(screenProfileFontSize));
+ wPos_t ww, hh;
+ coOrd size;
+ int divC;
+ DIST_T maxE, rngE;
+ profElem_t *p;
+ wFont_p fp;
+ POS_T w;
+ coOrd textsize;
+ char *pTestString;
+
+ wDrawDelayUpdate(screenProfileD.d, TRUE);
+ wDrawClear(screenProfileD.d);
+
+ // get the size of the window area in pixels and convert to inches
+ wDrawGetSize(screenProfileD.d, &ww, &hh);
+ screenProfileD.size.x = (ww)/screenProfileD.dpi;
+ screenProfileD.size.y = (hh)/screenProfileD.dpi;
+
+ // calculate positions for labels???
+ fp = wStandardFont(F_HELV, FALSE, FALSE);
+ screenProfileD.orig.x = -PBL(screenProfileFontSize);
+ screenProfileD.orig.y = -PBB(screenProfileFontSize);
+
+ /* Calculate usable dimension of canvas in inches */
+ size = screenProfileD.size;
+ size.x -= (PBL(screenProfileFontSize));
+ size.y -= (PBB(screenProfileFontSize));
+
+ /* make sure there is enough space to show the rightmost coordinate value*/
+ if (units == UNITS_ENGLISH) {
+ if (prof.totalD > 240.0) {
+ pTestString = "9999'";
+ } else {
+ pTestString = "999'11\"";
+ }
+ } else {
+ if (PutDim(prof.totalD) > 10000.0) {
+ pTestString = "999m";
+ } else {
+ if (PutDim(prof.totalD) > 100.0) {
+ pTestString = "99.9m";
+ } else {
+ pTestString = "9.99m";
+ }
+ }
+ }
+ DrawTextSize(&mainD, pTestString, fp, screenProfileFontSize, FALSE, &textsize);
+ size.x -= textsize.x / 2;
+ size.y -= textsize.y * 1.5 ;
+
+
+ // now we have the size of the profile area
#ifdef WINDOWS
- if (printVert) {
- size.x -= PBR/4.0;
- size.y -= PBT;
- } else
+ if (printVert) {
+ size.x -= PBR(screenProfileFontSize)/4.0;
+ size.y -= PBT;
+ } else
#endif
- {
- size.x -= PBR;
- size.y -= PBT;
- }
- if ( size.x < 0.1 || size.y < 0.1 )
- return;
-
- /* Calculate range of data values */
- if (profElem_da.cnt<=0) {
- prof.totalD = 0.0;
- prof.minE = 0.0;
- maxE = 1.0;
- } else {
- maxE = prof.minE = profElem(0).elev;
- prof.totalD = profElem(profElem_da.cnt-1).dist;
- for (inx=1; inx<profElem_da.cnt; inx++ ) {
- p = &profElem(inx);
- if (p->elev<prof.minE)
- prof.minE = p->elev;
- if (p->elev>maxE)
- maxE = p->elev;
- }
- }
-
- /* Calculate number of grid lines */
- prof.minC = (int)floor(PutDim(prof.minE));
- prof.maxC = (int)ceil(PutDim(maxE));
- if ( prof.maxC-prof.minC <= 0 )
- prof.maxC = prof.minC+1;
- divC = (int)floor(size.y/labelH);
- if ( divC < 1 )
- divC = 1;
- prof.incrC = (prof.maxC-prof.minC+divC-1)/divC;
- if ( prof.incrC < 1 )
- prof.incrC = 1;
- prof.maxC = prof.minC + (prof.maxC-prof.minC+prof.incrC-1)/prof.incrC * prof.incrC;
-
- /* Reset bounds based on intergal values */
- prof.minE = GetDim(prof.minC);
- rngE = GetDim(prof.maxC) - prof.minE;
- if (rngE < 1.0)
- rngE = 1.0;
-
- /* Compute vert scale */
- prof.scaleY = size.y/rngE;
- sprintf( message, "%0.2f", maxE );
- fp = wStandardFont( F_HELV, FALSE, FALSE );
- DrawTextSize( &mainD, message, fp, screenProfileFontSize, FALSE, &textsize );
- w = textsize.x;
- w -= PBT;
- w += 4.0/screenProfileD.dpi;
- w -= (GetDim(prof.maxC)-maxE)*prof.scaleY;
- if (w > 0) {
- size.y -= w;
- prof.scaleY = size.y/rngE;
- }
-
- /* Compute horz scale */
- if (prof.totalD <= 0.1) {
- prof.totalD = size.x;
- }
- prof.scaleX = size.x/prof.totalD;
-
-#ifdef LATER
- D->size.x /= prof.scaleX;
- D->size.x -= D->orig.x;
- D->size.y /= prof.scaleY;
- D->size.y -= D->orig.y;
- D->size.y += prof.minE;
-#endif
-
- DrawProfile( &screenProfileD, screenProfileFontSize,
+ {
+ size.x -= PBR(screenProfileFontSize);
+ size.y -= PBT;
+ }
+
+ if (size.x < 0.1 || size.y < 0.1) {
+ wDrawDelayUpdate(screenProfileD.d, FALSE);
+ return;
+ }
+
+ /* Calculate range of data values */
+ if (profElem_da.cnt<=0) {
+ prof.totalD = 0.0;
+ prof.minE = 0.0;
+ maxE = 1.0;
+ } else {
+ maxE = prof.minE = profElem(0).elev;
+ prof.totalD = profElem(profElem_da.cnt-1).dist;
+ for (int inx=1; inx<profElem_da.cnt; inx++) {
+ p = &profElem(inx);
+ if (p->elev<prof.minE) {
+ prof.minE = p->elev;
+ }
+ if (p->elev>maxE) {
+ maxE = p->elev;
+ }
+ }
+ }
+
+ /* Calculate number of grid lines */
+ prof.minC = (int)floor(PutDim(prof.minE));
+ prof.maxC = (int)ceil(PutDim(maxE));
+ if (prof.maxC-prof.minC <= 0) {
+ prof.maxC = prof.minC+1;
+ }
+ divC = (int)floor(size.y/labelH);
+ if (divC < 1) {
+ divC = 1;
+ }
+ prof.incrC = (prof.maxC-prof.minC+divC-1)/divC;
+ if (prof.incrC < 1) {
+ prof.incrC = 1;
+ }
+ prof.maxC = prof.minC + (prof.maxC-prof.minC+prof.incrC-1)/prof.incrC *
+ prof.incrC;
+
+ /* Reset bounds based on intergal values */
+ prof.minE = GetDim(prof.minC);
+ rngE = GetDim(prof.maxC) - prof.minE;
+ if (rngE < 1.0) {
+ rngE = 1.0;
+ }
+
+ /* Compute vert scale */
+ prof.scaleY = size.y/rngE;
+ sprintf(message, "%0.2f", maxE);
+
+ DrawTextSize(&mainD, message, fp, screenProfileFontSize, FALSE, &textsize);
+ w = textsize.x;
+ w -= PBT;
+ w += 4.0/screenProfileD.dpi;
+ w -= (GetDim(prof.maxC)-maxE)*prof.scaleY;
+ if (w > 0) {
+ size.y -= w;
+ prof.scaleY = size.y/rngE;
+ }
+
+ /* Compute horz scale */
+ if (prof.totalD <= 0.1) {
+ prof.totalD = size.x;
+ }
+ prof.scaleX = size.x/prof.totalD;
+
+ DrawProfile(&screenProfileD, screenProfileFontSize,
#ifdef WINDOWS
- printVert
+ printVert
#else
- FALSE
+ FALSE
#endif
- );
+ );
+ wDrawDelayUpdate(screenProfileD.d, FALSE);
}
+
static drawCmd_t printProfileD = {
- NULL,
- &printDrawFuncs,
- DC_PRINT|DC_NOCLIP,
- 1.0,
- 0.0,
- {0.0,0.0}, {1.0,1.0},
- ProfilePix2CoOrd, ProfileCoOrd2Pix };
+ NULL,
+ &printDrawFuncs,
+ DC_PRINT | DC_NOCLIP,
+ 1.0,
+ 0.0,
+ {0.0,0.0}, {1.0,1.0},
+ ProfilePix2CoOrd, ProfileCoOrd2Pix
+};
/**
* This is the print function for the track height profile. The paper
@@ -457,94 +597,95 @@ static drawCmd_t printProfileD = {
* Eg. is the windows is wider than high, the printout will be in
* landscape.
* \todo Rework the layout of the printout
- * This function is (at least for me) hard to comprehend with all the
- * fiddling around with the ccordinates. Also the filled area is a
- * waste of toner or ink.
*
* \param junk IN
* \return
*/
-static void DoProfilePrint( void * junk )
+static void DoProfilePrint(void * junk)
{
- coOrd size, p[4];
- int copies;
- WDOUBLE_T w, h, screenRatio, printRatio, titleH;
- wFont_p fp;
- coOrd screenSize;
- coOrd textsize;
-
- if (!wPrintDocStart( _("Profile"), 1, &copies ))
- return;
- printProfileD.d = wPrintPageStart();
- if (printProfileD.d == NULL)
- return;
- printProfileD.dpi = wDrawGetDPI( printProfileD.d );
- wPrintGetPageSize( &w, &h );
- printProfileD.orig.x = -PBL;
- printProfileD.orig.y = -PBB(printProfileFontSize);
- printProfileD.angle = 0.0;
- screenRatio = screenProfileD.size.y/screenProfileD.size.x;
- screenSize.x = prof.totalD*prof.scaleX;
- screenSize.y = GetDim(prof.maxC-prof.minC)*prof.scaleY;
- screenRatio = screenSize.y/screenSize.x;
- printProfileD.size.x = w;
- printProfileD.size.y = h;
- sprintf( message, _("%s Profile: %s"), sProdName, GetLayoutTitle() );
- fp = wStandardFont( F_TIMES, FALSE, FALSE );
- DrawTextSize( &mainD, message, fp, 24, FALSE, &textsize );
- titleH = textsize.y + 6.0/mainD.dpi;
- if (screenRatio < 1.0 && w < h ) {
- /* Landscape -> Portrait */
- printProfileD.angle = -90.0;
- printProfileD.orig.x += h;
- size.x = h;
- size.y = w;
- } else if (screenRatio > 1.0 && w > h ) {
- /* Portrait -> Landscape */
- printProfileD.angle = 90.0;
- printProfileD.orig.y += w;
- size.x = h;
- size.y = w;
- } else {
- size.x = w;
- size.y = h;
- }
- size.y -= titleH+(printVert?PBT*2:PBT)+PBB(printProfileFontSize);
- size.x -= 4.0/mainD.dpi+PBL+(printVert?PBR/4.0:PBR);
- printRatio = size.y/size.x;
- if (printRatio < screenRatio) {
- printProfileD.scale = screenSize.y/size.y;
- size.x = screenSize.x/printProfileD.scale;
- } else {
- printProfileD.scale = screenSize.x/size.x;
- printProfileD.orig.y -= size.y;
- size.y = screenSize.y/printProfileD.scale;
- printProfileD.orig.y += size.y;
- }
+ coOrd size, p[4];
+ int copies;
+ WDOUBLE_T w, h, screenRatio, printRatio, titleH;
+ wFont_p fp;
+ coOrd screenSize;
+ coOrd textsize;
+
+ if (!wPrintDocStart(_("Profile"), 1, &copies)) {
+ return;
+ }
+ printProfileD.d = wPrintPageStart();
+ if (printProfileD.d == NULL) {
+ return;
+ }
+ printProfileD.dpi = wDrawGetDPI(printProfileD.d);
+ wPrintGetPageSize(&w, &h);
+ printProfileD.orig.x = -PBL(printProfileFontSize);
+ printProfileD.orig.y = -PBB(printProfileFontSize);
+ printProfileD.angle = 0.0;
+ screenRatio = screenProfileD.size.y/screenProfileD.size.x;
+ screenSize.x = prof.totalD*prof.scaleX;
+ screenSize.y = GetDim(prof.maxC-prof.minC)*prof.scaleY;
+ screenRatio = screenSize.y/screenSize.x;
+ printProfileD.size.x = w;
+ printProfileD.size.y = h;
+ sprintf(message, _("%s Profile: %s"), sProdName, GetLayoutTitle());
+ fp = wStandardFont(F_TIMES, FALSE, FALSE);
+ DrawTextSize(&mainD, message, fp, 24, FALSE, &textsize);
+ titleH = textsize.y + 6.0/mainD.dpi;
+ if (screenRatio < 1.0 && w < h) {
+ /* Landscape -> Portrait */
+ printProfileD.angle = -90.0;
+ printProfileD.orig.x += h;
+ size.x = h;
+ size.y = w;
+ } else if (screenRatio > 1.0 && w > h) {
+ /* Portrait -> Landscape */
+ printProfileD.angle = 90.0;
+ printProfileD.orig.y += w;
+ size.x = h;
+ size.y = w;
+ } else {
+ size.x = w;
+ size.y = h;
+ }
+ size.y -= titleH+(printVert?PBT*2:PBT)+PBB(printProfileFontSize);
+ size.x -= 4.0/mainD.dpi+PBL(printProfileFontSize)+(printVert?PBR(
+ printProfileFontSize)/4.0:PBR(printProfileFontSize));
+ printRatio = size.y/size.x;
+ if (printRatio < screenRatio) {
+ printProfileD.scale = screenSize.y/size.y;
+ size.x = screenSize.x/printProfileD.scale;
+ } else {
+ printProfileD.scale = screenSize.x/size.x;
+ printProfileD.orig.y -= size.y;
+ size.y = screenSize.y/printProfileD.scale;
+ printProfileD.orig.y += size.y;
+ }
#define PRINT_ABS2PAGEX(X) (((X)*printProfileD.scale)/prof.scaleX)
#define PRINT_ABS2PAGEY(Y) (((Y)*printProfileD.scale)/prof.scaleY+prof.minE)
- p[0].y = PRINT_ABS2PAGEY(size.y+(printVert?PBT*2:PBT)+0.05);
- p[0].x = PRINT_ABS2PAGEX((size.x-textsize.x)/2.0);
- if ( p[0].x < 0 )
- p[0].x = 0;
- DrawString( &printProfileD, p[0], 0, message, fp, 24*printProfileD.scale, borderColor );
- p[0].x = p[3].x = PRINT_ABS2PAGEX((-PBL)+2.0/mainD.dpi);
- p[0].y = p[1].y = PRINT_ABS2PAGEY(-PBB(printProfileFontSize));
- p[1].x = p[2].x = PRINT_ABS2PAGEX(size.x+(printVert?PBR/4.0:PBR));
- p[2].y = p[3].y = PRINT_ABS2PAGEY(size.y+(printVert?PBT*2:PBT));
- DrawLine( &printProfileD, p[0], p[1], 0, drawColorBlack );
- DrawLine( &printProfileD, p[1], p[2], 0, drawColorBlack );
- DrawLine( &printProfileD, p[2], p[3], 0, drawColorBlack );
- DrawLine( &printProfileD, p[3], p[0], 0, drawColorBlack );
-
- DrawProfile( &printProfileD, printProfileFontSize, printVert );
- wPrintPageEnd( printProfileD.d );
- wPrintDocEnd();
+ p[0].y = PRINT_ABS2PAGEY(size.y+(printVert?PBT*2:PBT)+0.05);
+ p[0].x = PRINT_ABS2PAGEX((size.x-textsize.x)/2.0);
+ if (p[0].x < 0) {
+ p[0].x = 0;
+ }
+ DrawString(&printProfileD, p[0], 0, message, fp, 24*printProfileD.scale,
+ borderColor);
+ p[0].x = p[3].x = PRINT_ABS2PAGEX((-PBL(printProfileFontSize))+2.0/mainD.dpi);
+ p[0].y = p[1].y = PRINT_ABS2PAGEY(-PBB(printProfileFontSize));
+ p[1].x = p[2].x = PRINT_ABS2PAGEX(size.x+(printVert?PBR(
+ printProfileFontSize)/4.0:PBR(printProfileFontSize)));
+ p[2].y = p[3].y = PRINT_ABS2PAGEY(size.y+(printVert?PBT*2:PBT));
+ DrawLine(&printProfileD, p[0], p[1], 0, drawColorBlack);
+ DrawLine(&printProfileD, p[1], p[2], 0, drawColorBlack);
+ DrawLine(&printProfileD, p[2], p[3], 0, drawColorBlack);
+ DrawLine(&printProfileD, p[3], p[0], 0, drawColorBlack);
+
+ DrawProfile(&printProfileD, printProfileFontSize, printVert);
+ wPrintPageEnd(printProfileD.d);
+ wPrintDocEnd();
}
-
-
/**************************************************************************
*
* Window Handlers
@@ -553,201 +694,218 @@ static void DoProfilePrint( void * junk )
static wWin_p profileW;
-
static BOOL_T profileUndo = FALSE;
-static void DoProfileDone( void * );
-static void DoProfileClear( void * );
-static void DoProfilePrint( void * );
-static void DoProfileChangeMode( void * );
-static void SelProfileW( wIndex_t, coOrd );
+static void DoProfileChange(void *junk);
+static void DoProfileReset(void *junk);
+static void DoProfileDone(void *);
+static void DoProfileClear(void *);
+static void DoProfilePrint(void *);
+static void DoProfileChangeMode(void *);
+static void SelProfileW(wIndex_t, coOrd);
+static void CloseProfileWindow(paramGroup_p pg, int event, void *data);
static paramDrawData_t profileDrawData = { 300, 150, (wDrawRedrawCallBack_p)RedrawProfileW, SelProfileW, &screenProfileD };
static paramData_t profilePLs[] = {
- { PD_DRAW, NULL, "canvas", PDO_DLGRESIZE, &profileDrawData },
+ { PD_DRAW, NULL, "canvas", PDO_DLGRESIZE, &profileDrawData },
#define I_PROFILEMSG (1)
- { PD_MESSAGE, NULL, NULL, PDO_DLGIGNOREX, (void*)300 },
- { PD_BUTTON, (void*)DoProfileClear, "clear", PDO_DLGCMDBUTTON, NULL, N_("Clear") },
- { PD_BUTTON, (void*)DoProfilePrint, "print", 0, NULL, N_("Print") } };
+ { PD_MESSAGE, NULL, NULL, PDO_DLGIGNOREX, (void*)300 },
+#define I_CHANGEBUTTON 2
+ { PD_BUTTON, (void*)DoProfileChange, "change", PDO_DLGCMDBUTTON, NULL, N_("Change") },
+#define I_RESETBUTTON 3
+ { PD_BUTTON, (void*)DoProfileReset, "reset", PDO_DLGCMDBUTTON, NULL, N_("Reset") },
+#define I_CLEARBUTTON 4
+ { PD_BUTTON, (void*)DoProfileClear, "clear", PDO_DLGCMDBUTTON, NULL, N_("Clear") },
+#define I_PRINTBUTTON 5
+ { PD_BUTTON, (void*)DoProfilePrint, "print", 0, NULL, N_("Print") }
+};
static paramGroup_t profilePG = { "profile", 0, profilePLs, sizeof profilePLs/sizeof profilePLs[0] };
+#define CHANGEBUTTON ((wButton_p)profilePLs[I_CHANGEBUTTON].control)
+#define RESETBUTTON ((wButton_p)profilePLs[I_RESETBUTTON].control)
+#define CLEARBUTTON ((wButton_p)profilePLs[I_CLEARBUTTON].control)
+#define PRINTBUTTON ((wButton_p)profilePLs[I_PRINTBUTTON].control)
-static void ProfileTempDraw( int inx, DIST_T elev )
+static void SelProfileW(
+ wIndex_t action,
+ coOrd pos)
{
- coOrd p0, p1;
-#ifdef LATER
- p0.x = profElem(inx).dist*prof.scaleX;
- p0.y = (elev-prof.minE)*prof.scaleY;
- screenProfileD.funcs = &tempDrawFuncs;
- if (inx > 0) {
- p1.x = profElem(inx-1).dist*prof.scaleX;
- p1.y = (profElem(inx-1).elev-prof.minE)*prof.scaleY;
- DrawLine( &screenProfileD, p0, p1, 2, borderColor );
- }
- if (inx < profElem_da.cnt-1) {
- p1.x = profElem(inx+1).dist*prof.scaleX;
- p1.y = (profElem(inx+1).elev-prof.minE)*prof.scaleY;
- DrawLine( &screenProfileD, p0, p1, 2, borderColor );
- }
- screenProfileD.funcs = &screenDrawFuncs;
-#endif
- p0.x = profElem(inx).dist;
- p0.y = elev;
- screenProfileD.funcs = &tempDrawFuncs;
- if (inx > 0) {
- p1.x = profElem(inx-1).dist;
- p1.y = profElem(inx-1).elev;
- DrawLine( &screenProfileD, p0, p1, 2, borderColor );
- }
- if (inx < profElem_da.cnt-1) {
- p1.x = profElem(inx+1).dist;
- p1.y = profElem(inx+1).elev;
- DrawLine( &screenProfileD, p0, p1, 2, borderColor );
- }
- screenProfileD.funcs = &screenDrawFuncs;
+ DIST_T dist;
+ static DIST_T oldElev;
+ static int inx;
+ DIST_T elev;
+
+ if (profElem_da.cnt <= 0) {
+ return;
+ }
+
+ dist = pos.x;
+ elev = pos.y;
+
+ switch (action&0xFF) {
+ case C_DOWN:
+ for (inx=0; inx<profElem_da.cnt; inx++) {
+ if (dist <= profElem(inx).dist) {
+ if (inx!=0 && profElem(inx).dist-dist > dist-profElem(inx-1).dist) {
+ inx--;
+ }
+ break;
+ }
+ }
+ if (inx >= profElem_da.cnt) {
+ inx = profElem_da.cnt-1;
+ }
+ sprintf(message, _("Elev = %0.1f"), round(PutDim(elev)*10.0)/10.0);
+ ParamLoadMessage(&profilePG, I_PROFILEMSG, message);
+ oldElev = elev;
+ RedrawProfileW();
+ break;
+ case C_MOVE:
+ if (inx < 0) {
+ break;
+ }
+ if (profElem_da.cnt == 1) {
+ sprintf(message, _("Elev = %0.1f"), round(PutDim(elev)*10.0)/10.0);
+ } else if (inx == 0) {
+ sprintf(message, _("Elev=%0.2f %0.1f%%"),
+ round(PutDim(elev)*100.0)/100.0,
+ round(fabs(((profElem(inx+1).elev-elev) / (profElem(inx+1).dist-profElem(
+ inx).dist)) * 1000.0))/10.0);
+ } else if (inx == profElem_da.cnt-1) {
+ sprintf(message, _("%0.1f%% Elev = %0.2f"),
+ round(fabs(((profElem(inx-1).elev-elev) / (profElem(inx).dist-profElem(
+ inx-1).dist)) * 1000.0))/10.0,
+ round(PutDim(elev)*100.0)/100.0);
+ } else {
+ sprintf(message, _("%0.1f%% Elev = %0.2f %0.1f%%"),
+ round(fabs(((profElem(inx-1).elev-elev) / (profElem(inx).dist-profElem(
+ inx-1).dist)) * 1000.0))/10.0,
+ round(PutDim(elev)*100.0)/100.0,
+ round(fabs((profElem(inx+1).elev-elev) / (profElem(inx+1).dist-profElem(
+ inx).dist)) * 1000.0)/10.0);
+ }
+ ParamLoadMessage(&profilePG, I_PROFILEMSG, message);
+ oldElev = elev;
+ profElem(inx).elev = oldElev;
+ RedrawProfileW();
+ wPause(500l);
+ break;
+ case C_UP:
+ if (profileUndo == FALSE) {
+ UndoStart(_("Profile Command"), "Profile - set elevation");
+ profileUndo = TRUE;
+ }
+ if (profElem(inx).trk) {
+ UpdateTrkEndElev(profElem(inx).trk, profElem(inx).ep, ELEV_DEF|ELEV_VISIBLE,
+ oldElev, NULL);
+ }
+ profElem(inx).elev = oldElev;
+ RedrawProfileW();
+ ParamLoadMessage(&profilePG, I_PROFILEMSG, _("Drag to change Elevation"));
+ inx = -1;
+ break;
+ default:
+ break;
+ }
}
-
-static void SelProfileW(
- wIndex_t action,
- coOrd pos )
+static void HilightProfileElevations(BOOL_T show)
{
- DIST_T dist;
- static DIST_T oldElev;
- static int inx;
- DIST_T elev;
-
- if (profElem_da.cnt <= 0)
- return;
+ /*if ( profElem_da.cnt <= 0 ) {*/
+ HilightElevations(show);
+ /*} else {
+ }*/
+}
- dist = pos.x;
- elev = pos.y;
+/**
+ *
+ *
+ * \param pg The page.
+ * \param event The event.
+ * \param [in,out] data If non-null, the data.
+ */
+void
+CloseProfileWindow(paramGroup_p pg, int event, void *data)
+{
+ Reset();
+ return;
+}
-#ifdef LATER
- if (recordF)
- RecordMouse( "PROFILEMOUSE", action, dist, elev );
-#endif
- switch (action&0xFF) {
- case C_DOWN:
- for (inx=0; inx<profElem_da.cnt; inx++) {
- if (dist <= profElem(inx).dist) {
- if (inx!=0 && profElem(inx).dist-dist > dist-profElem(inx-1).dist)
- inx--;
- break;
+/**
+ * Undo the changes made in the profile window to the layout.
+ */
+
+static void
+ResetChanges()
+{
+ if (copyOfprofElem) {
+ for (int i = 0; i < profElem_da.cnt; i++) {
+ profElem(i) = copyOfprofElem[i];
+ if (profElem(i).trk) {
+ UpdateTrkEndElev(profElem(i).trk, profElem(i).ep, ELEV_DEF | ELEV_VISIBLE,
+ copyOfprofElem[i].elev, NULL);
}
}
- if (inx >= profElem_da.cnt)
- inx = profElem_da.cnt-1;
- sprintf(message, _("Elev = %0.1f"), PutDim(elev) );
- ParamLoadMessage( &profilePG, I_PROFILEMSG, message );
- oldElev = elev;
- ProfileTempDraw( inx, elev );
- break;
- case C_MOVE:
- if ( inx < 0 )
- break;
- ProfileTempDraw( inx, oldElev );
- if (profElem_da.cnt == 1 ) {
- sprintf(message, _("Elev = %0.1f"), PutDim(elev) );
- } else if (inx == 0) {
- sprintf( message, _("Elev=%0.2f %0.1f%%"),
- PutDim(elev),
- fabs( profElem(inx+1).elev-elev ) / (profElem(inx+1).dist-profElem(inx).dist) * 100.0 );
- } else if (inx == profElem_da.cnt-1) {
- sprintf( message, _("%0.1f%% Elev = %0.2f"),
- fabs( profElem(inx-1).elev-elev ) / (profElem(inx).dist-profElem(inx-1).dist) * 100.0,
- PutDim(elev) );
- } else {
- sprintf( message, _("%0.1f%% Elev = %0.2f %0.1f%%"),
- fabs( profElem(inx-1).elev-elev ) / (profElem(inx).dist-profElem(inx-1).dist) * 100.0,
- PutDim(elev),
- fabs( profElem(inx+1).elev-elev ) / (profElem(inx+1).dist-profElem(inx).dist) * 100.0 );
- }
- ParamLoadMessage( &profilePG, I_PROFILEMSG, message );
- oldElev = elev;
- ProfileTempDraw( inx, oldElev );
- break;
- case C_UP:
- if (profileUndo == FALSE) {
- UndoStart( _("Profile Command"), "Profile - set elevation" );
- profileUndo = TRUE;
- }
- if (profElem(inx).trk) {
- UpdateTrkEndElev( profElem(inx).trk, profElem(inx).ep, ELEV_DEF|ELEV_VISIBLE, oldElev, NULL );
- }
- profElem(inx).elev = oldElev;
- RedrawProfileW();
- ParamLoadMessage( &profilePG, I_PROFILEMSG, _("Drag to change Elevation") );
- inx = -1;
- break;
- default:
- break;
}
}
+/**
+ * Executes the profile reset operation. All elevations are copied from the
+ * backup, the main drawing area and the profile window are updated
+ *
+ * \param [in,out] junk
+ */
-#ifdef LATER
-static BOOL_T ProfilePlayback( char * line )
+static void
+DoProfileReset(void *junk)
{
- int action;
- wPos_t x, y;
- coOrd pos;
-
- if ( !GetArgs( line, "dp", &action, &pos ) ) {
- return FALSE;
- } else {
- x = (wPos_t)(((pos.x*prof.scaleX)-screenProfileD.orig.x)*screenProfileD.dpi+0.5);
- y = (wPos_t)((((pos.y-prof.minE)*prof.scaleY)-screenProfileD.orig.y)*screenProfileD.dpi+0.5);
- PlaybackMouse( selProfileW, &screenProfileD, (wAction_t)action, x, y, drawColorBlack );
+ if (profileUndo == 0) {
+ profileUndo = TRUE;
+ UndoStart(_("Profile Command"), "Profile");
}
- return TRUE;
+ ResetChanges();
+ RedrawProfileW();
+ TempRedraw();
}
-#endif
-
+/**
+ * Confirm the changes made in the profile window
+ *
+ * \param [in,out] junk If non-null, the junk.
+ */
-static void HilightProfileElevations( BOOL_T show )
+static void
+DoProfileChange(void *junk)
{
- /*if ( profElem_da.cnt <= 0 ) {*/
- HilightElevations( show );
- /*} else {
- }*/
+ DestroyCopyOfProfileElements();
+ TempRedraw();
}
-static void DoProfileDone( void * junk )
+static void DoProfileDone(void * junk)
{
-#ifdef LATER
- HilightProfileElevations( FALSE );
- wHide( profileW );
- ClrAllTrkBits( TB_PROFILEPATH );
- MainRedraw();
- MapRedraw();
-#endif
- Reset();
+ Reset();
}
-static void DoProfileClear( void * junk )
+static void DoProfileClear(void * junk)
{
- profElem_da.cnt = 0;
- station_da.cnt = 0;
- if (ClrAllTrkBits( TB_PROFILEPATH )) {
- MainRedraw();
- MapRedraw();
- }
- pathStartTrk = pathEndTrk = NULL;
- RedrawProfileW();
+ ResetChanges();
+ profElem_da.cnt = 0;
+ station_da.cnt = 0;
+ ClrAllTrkBitsRedraw(TB_PROFILEPATH, TRUE);
+ pathStartTrk = pathEndTrk = NULL;
+ RedrawProfileW();
}
-static void DoProfileChangeMode( void * junk )
+static void DoProfileChangeMode(void * junk)
{
- if (profElem_da.cnt<=0) {
- InfoMessage( _("Select a Defined Elevation to start Profile") );
- } else {
- InfoMessage( _("Select a Defined Elevation to extend Profile") );
- }
+ if (profElem_da.cnt<=0) {
+ InfoMessage(_("Select a Defined Elevation to start Profile"));
+ } else {
+ InfoMessage(_("Select a Defined Elevation to extend Profile"));
+ }
}
/**************************************************************************
@@ -756,17 +914,17 @@ static void DoProfileChangeMode( void * junk )
*
**************************************************************************/
-static BOOL_T PathListEmpty( void )
+static BOOL_T PathListEmpty(void)
{
- return pathStartTrk == NULL;
+ return pathStartTrk == NULL;
}
-static BOOL_T PathListSingle( void )
+static BOOL_T PathListSingle(void)
{
- return pathStartTrk != NULL &&
- ( pathEndTrk == NULL ||
- ( GetTrkEndTrk(pathEndTrk,pathEndEp) == pathStartTrk &&
- GetTrkEndTrk(pathStartTrk,pathStartEp) == pathEndTrk ) );
+ return pathStartTrk != NULL &&
+ (pathEndTrk == NULL ||
+ (GetTrkEndTrk(pathEndTrk,pathEndEp) == pathStartTrk &&
+ GetTrkEndTrk(pathStartTrk,pathStartEp) == pathEndTrk));
}
@@ -774,102 +932,106 @@ static int profileShortestPathMatch;
static DIST_T profileShortestPathDist;
static int ProfileShortestPathFunc(
- SPTF_CMD cmd,
- track_p trk,
- EPINX_T ep,
- EPINX_T ep0,
- DIST_T dist,
- void * data )
+ SPTF_CMD cmd,
+ track_p trk,
+ EPINX_T ep,
+ EPINX_T ep0,
+ DIST_T dist,
+ void * data)
{
- track_p trkN;
- EPINX_T epN;
- int rc0=0;
- int pathMatch;
-
- switch (cmd) {
- case SPTC_TERMINATE:
- rc0 = 1;
- break;
-
- case SPTC_MATCH:
- if ( EndPtIsIgnoredElev(trk,ep) )
- break;
- if ( PathListSingle() ) {
- if ( trk == pathStartTrk && ep == pathStartEp ) {
- pathMatch = 2;
- } else if ( trk == pathEndTrk && ep == pathEndEp ) {
- pathMatch = 3;
- } else {
- break;
- }
- } else if ( ( trkN = GetTrkEndTrk(trk,ep) ) == NULL ) {
- break;
- } else {
- epN = GetEndPtConnectedToMe( trkN, trk );
- if ( trkN == pathStartTrk && epN == pathStartEp ) {
- pathMatch = 1;
- } else if ( trkN == pathEndTrk && epN == pathEndEp ) {
- pathMatch = 2;
- } else if ( trkN == pathStartTrk && trkN == pathEndTrk ) {
- pathMatch = 2;
- } else if ( trkN == pathStartTrk ) {
- pathMatch = 1;
- } else if ( trkN == pathEndTrk ) {
- pathMatch = 2;
- } else {
- break;
- }
- }
- if ( profileShortestPathMatch < 0 || profileShortestPathDist > dist ) {
-LOG( log_shortPath, 4, ( " Match=%d", pathMatch ) )
- profileShortestPathMatch = pathMatch;
- profileShortestPathDist = dist;
- }
- rc0 = 1;
- break;
-
- case SPTC_MATCHANY:
- rc0 = -1;
- break;
-
- case SPTC_IGNNXTTRK:
- if ( EndPtIsIgnoredElev(trk,ep) )
- rc0 = 1;
- else if ( (GetTrkBits(trk)&TB_PROFILEPATH)!=0 )
- rc0 = 1;
- else if ( (!EndPtIsDefinedElev(trk,ep)) && GetTrkEndTrk(trk,ep)==NULL )
- rc0 = 1;
- else
- rc0 = 0;
- break;
-
- case SPTC_ADD_TRK:
-if (log_shortPath<=0||logTable(log_shortPath).level<4) LOG( log_profile, 4, ( " ADD_TRK T%d:%d", GetTrkIndex(trk), ep ) )
- SetTrkBits( trk, TB_PROFILEPATH );
- DrawTrack( trk, &mainD, profilePathColor );
- rc0 = 0;
- break;
-
- case SPTC_VALID:
- rc0 = 1;
- break;
-
- default:
- break;
- }
- return rc0;
+ int rc0=0;
+ int pathMatch;
+
+ switch (cmd) {
+ track_p trkN;
+ case SPTC_TERMINATE:
+ rc0 = 1;
+ break;
+
+ case SPTC_MATCH:
+ if (EndPtIsIgnoredElev(trk,ep)) {
+ break;
+ }
+ if (PathListSingle()) {
+ if (trk == pathStartTrk && ep == pathStartEp) {
+ pathMatch = 2;
+ } else if (trk == pathEndTrk && ep == pathEndEp) {
+ pathMatch = 3;
+ } else {
+ break;
+ }
+ } else if ((trkN = GetTrkEndTrk(trk,ep)) == NULL) {
+ break;
+ } else {
+ EPINX_T epN;
+ epN = GetEndPtConnectedToMe(trkN, trk);
+ if (trkN == pathStartTrk && epN == pathStartEp) {
+ pathMatch = 1;
+ } else if (trkN == pathEndTrk && epN == pathEndEp) {
+ pathMatch = 2;
+ } else if (trkN == pathStartTrk && trkN == pathEndTrk) {
+ pathMatch = 2;
+ } else if (trkN == pathStartTrk) {
+ pathMatch = 1;
+ } else if (trkN == pathEndTrk) {
+ pathMatch = 2;
+ } else {
+ break;
+ }
+ }
+ if (profileShortestPathMatch < 0 || profileShortestPathDist > dist) {
+ LOG(log_shortPath, 4, (" Match=%d", pathMatch))
+ profileShortestPathMatch = pathMatch;
+ profileShortestPathDist = dist;
+ }
+ rc0 = 1;
+ break;
+
+ case SPTC_MATCHANY:
+ rc0 = -1;
+ break;
+
+ case SPTC_IGNNXTTRK:
+ if (EndPtIsIgnoredElev(trk,ep)) {
+ rc0 = 1;
+ } else if ((GetTrkBits(trk)&TB_PROFILEPATH)!=0) {
+ rc0 = 1;
+ } else if ((!EndPtIsDefinedElev(trk,ep)) && GetTrkEndTrk(trk,ep)==NULL) {
+ rc0 = 1;
+ } else {
+ rc0 = 0;
+ }
+ break;
+
+ case SPTC_ADD_TRK:
+ if (log_shortPath<=0||
+ logTable(log_shortPath).level<4) LOG(log_profile, 4, (" ADD_TRK T%d:%d",
+ GetTrkIndex(trk), ep))
+ SetTrkBits(trk, TB_PROFILEPATH);
+ DrawTrack(trk, &mainD, profilePathColor);
+ rc0 = 0;
+ break;
+
+ case SPTC_VALID:
+ rc0 = 1;
+ break;
+
+ default:
+ break;
+ }
+ return rc0;
}
static int FindProfileShortestPath(
- track_p trkN,
- EPINX_T epN )
+ track_p trkN,
+ EPINX_T epN)
{
-LOG( log_profile, 4, ( "Searching from T%d:%d to T%d:%d or T%d:%d\n",
- GetTrkIndex(trkN), epN,
- pathStartTrk?GetTrkIndex(pathStartTrk):-1, pathStartTrk?pathStartEp:-1,
- pathEndTrk?GetTrkIndex(pathEndTrk):-1, pathEndTrk?pathEndEp:-1 ) )
- profileShortestPathMatch = -1;
- return FindShortestPath( trkN, epN, TRUE, ProfileShortestPathFunc, NULL );
+ LOG(log_profile, 4, ("Searching from T%d:%d to T%d:%d or T%d:%d\n",
+ GetTrkIndex(trkN), epN,
+ pathStartTrk?GetTrkIndex(pathStartTrk):-1, pathStartTrk?pathStartEp:-1,
+ pathEndTrk?GetTrkIndex(pathEndTrk):-1, pathEndTrk?pathEndEp:-1))
+ profileShortestPathMatch = -1;
+ return FindShortestPath(trkN, epN, TRUE, ProfileShortestPathFunc, NULL);
}
@@ -884,502 +1046,494 @@ LOG( log_profile, 4, ( "Searching from T%d:%d to T%d:%d or T%d:%d\n",
#define ONPATH_END (1<<1)
#define ONPATH_MID (1<<2)
#define ONPATH_BRANCH (1<<3)
-static int OnPath( track_p trk, EPINX_T ep )
+static int OnPath(track_p trk, EPINX_T ep)
{
- track_p trk0;
- if ( GetTrkBits(trk)&TB_PROFILEPATH ) {
- trk0 = GetTrkEndTrk( profilePopupTrk, profilePopupEp );
- if ( trk0 && (GetTrkBits(trk0)&TB_PROFILEPATH) ) {
- return ONPATH_MID;
- }
- if ( ( trk == pathStartTrk && ep == pathStartEp ) ||
- ( trk == pathStartTrk && ep == pathStartEp ) ) {
- return ONPATH_END;
- }
- return ONPATH_BRANCH;
- }
- return ONPATH_NOT;
+ if (GetTrkBits(trk)&TB_PROFILEPATH) {
+ track_p trk0;
+ trk0 = GetTrkEndTrk(profilePopupTrk, profilePopupEp);
+ if (trk0 && (GetTrkBits(trk0)&TB_PROFILEPATH)) {
+ return ONPATH_MID;
+ }
+ if (trk == pathStartTrk && ep == pathStartEp) {
+ return ONPATH_END;
+ }
+ return ONPATH_BRANCH;
+ }
+ return ONPATH_NOT;
}
-static BOOL_T PathListCheck( void )
+static BOOL_T PathListCheck(void)
{
- track_p trk;
- if (PathListEmpty() || PathListSingle())
- return TRUE;
- if (!(GetTrkBits(pathStartTrk)&TB_PROFILEPATH)) {
- ErrorMessage( MSG_PST_NOT_ON_PATH );
- return FALSE;
- }
- if (!(GetTrkBits(pathEndTrk)&TB_PROFILEPATH)) {
- ErrorMessage( MSG_PET_NOT_ON_PATH );
- return FALSE;
- }
- trk = GetTrkEndTrk(pathStartTrk,pathStartEp);
- if (trk && (GetTrkBits(trk)&TB_PROFILEPATH)) {
- ErrorMessage( MSG_INV_PST_ON_PATH );
- return FALSE;
- }
- trk = GetTrkEndTrk(pathEndTrk,pathEndEp);
- if (trk && (GetTrkBits(trk)&TB_PROFILEPATH)) {
- ErrorMessage( MSG_INV_PET_ON_PATH );
- return FALSE;
- }
- return TRUE;
+ track_p trk;
+ if (PathListEmpty() || PathListSingle()) {
+ return TRUE;
+ }
+ if (!(GetTrkBits(pathStartTrk)&TB_PROFILEPATH)) {
+ ErrorMessage(MSG_PST_NOT_ON_PATH);
+ return FALSE;
+ }
+ if (!(GetTrkBits(pathEndTrk)&TB_PROFILEPATH)) {
+ ErrorMessage(MSG_PET_NOT_ON_PATH);
+ return FALSE;
+ }
+ trk = GetTrkEndTrk(pathStartTrk,pathStartEp);
+ if (trk && (GetTrkBits(trk)&TB_PROFILEPATH)) {
+ ErrorMessage(MSG_INV_PST_ON_PATH);
+ return FALSE;
+ }
+ trk = GetTrkEndTrk(pathEndTrk,pathEndEp);
+ if (trk && (GetTrkBits(trk)&TB_PROFILEPATH)) {
+ ErrorMessage(MSG_INV_PET_ON_PATH);
+ return FALSE;
+ }
+ return TRUE;
}
static void RemoveTracksFromPath(
- track_p *Rtrk,
- EPINX_T *Rep,
- track_p trkEnd,
- EPINX_T epEnd )
+ track_p *Rtrk,
+ EPINX_T *Rep,
+ track_p trkEnd,
+ EPINX_T epEnd)
{
- EPINX_T ep2;
- track_p trk = *Rtrk, trkN;
- EPINX_T ep = *Rep;
-
- PASSERT( "removeTracksFromPath", trk, NOP );
- PASSERT( "removeTracksFromPath", !PathListSingle(), NOP );
- while (1) {
- DrawTrack( trk, &mainD, drawColorWhite );
- ClrTrkBits( trk, TB_PROFILEPATH );
- DrawTrack( trk, &mainD, drawColorBlack );
-
- if (trk == trkEnd) {
- pathStartTrk = trkEnd;
- pathStartEp = epEnd;
- pathEndTrk = GetTrkEndTrk(pathStartTrk,pathStartEp);
- if (pathEndTrk)
- pathEndEp = GetEndPtConnectedToMe(pathEndTrk,pathStartTrk);
- return;
- }
-
- ep2 = GetNextTrkOnPath( trk, ep );
- PASSERT( "removeTracksFromPath", ep2 >= 0,NOP );
- trkN = GetTrkEndTrk(trk,ep2);
- PASSERT( "removeTracksFromPath", trkN != NULL, NOP );
- ep = GetEndPtConnectedToMe(trkN,trk);
- trk = trkN;
- if (EndPtIsDefinedElev(trk,ep)) {
- *Rtrk = trk;
- *Rep = ep;
- return;
- }
- }
+ track_p trk = *Rtrk, trkN;
+ EPINX_T ep = *Rep;
+
+ PASSERT("removeTracksFromPath", trk, NOP);
+ PASSERT("removeTracksFromPath", !PathListSingle(), NOP);
+ while (1) {
+ EPINX_T ep2;
+ DrawTrack(trk, &mainD, drawColorWhite);
+ ClrTrkBits(trk, TB_PROFILEPATH);
+ DrawTrack(trk, &mainD, drawColorBlack);
+
+ if (trk == trkEnd) {
+ pathStartTrk = trkEnd;
+ pathStartEp = epEnd;
+ pathEndTrk = GetTrkEndTrk(pathStartTrk,pathStartEp);
+ if (pathEndTrk) {
+ pathEndEp = GetEndPtConnectedToMe(pathEndTrk,pathStartTrk);
+ }
+ return;
+ }
+
+ ep2 = GetNextTrkOnPath(trk, ep);
+ PASSERT("removeTracksFromPath", ep2 >= 0,NOP);
+ trkN = GetTrkEndTrk(trk,ep2);
+ PASSERT("removeTracksFromPath", trkN != NULL, NOP);
+ ep = GetEndPtConnectedToMe(trkN,trk);
+ trk = trkN;
+ if (EndPtIsDefinedElev(trk,ep)) {
+ *Rtrk = trk;
+ *Rep = ep;
+ return;
+ }
+ }
}
-static void ChkElev( track_p trk, EPINX_T ep, EPINX_T ep2, DIST_T dist, BOOL_T * defined )
+static void ChkElev(track_p trk, EPINX_T ep, EPINX_T ep2, DIST_T dist,
+ BOOL_T * defined)
{
- profElem_p p;
- station_p s;
- EPINX_T epDefElev = -1, ep1;
- int mode;
- BOOL_T undefined;
-
- mode = GetTrkEndElevMode( trk, ep );
- if (mode == ELEV_DEF) {
- epDefElev = ep;
- } else if (mode == ELEV_STATION) {
- DYNARR_APPEND( station_t, station_da, 10 );
- s = &station(station_da.cnt-1);
- s->dist = dist;
- s->name = GetTrkEndElevStation(trk,ep);
- }
- undefined = FALSE;
- if (epDefElev<0) {
- if ( (trk == pathStartTrk && ep == pathStartEp) ||
- (trk == pathEndTrk && ep == pathEndEp) ) {
- epDefElev = ep;
- }
- }
- if (epDefElev<0) {
- if (ep == ep2 ||
- GetTrkEndElevMode(trk,ep2) != ELEV_DEF )
- for ( ep1=0; ep1<GetTrkEndPtCnt(trk); ep1++ ) {
- if ( ep1==ep || ep1==ep2 )
- continue;
- if (EndPtIsDefinedElev(trk,ep1)) {
- epDefElev = ep1;
- dist -= GetTrkLength( trk, ep, ep1 );
- break;
- }
- if (GetTrkEndTrk(trk,ep1)) {
- if (!EndPtIsIgnoredElev(trk,ep1))
- undefined = TRUE;
- }
- }
- }
-
- if (epDefElev>=0) {
- DYNARR_APPEND( profElem_t, profElem_da, 10 );
- p = &profElem(profElem_da.cnt-1);
- p->trk = trk;
- p->ep = epDefElev;
- p->dist = dist;
- if (GetTrkEndElevMode(trk,epDefElev) == ELEV_DEF)
- p->elev = GetTrkEndElevHeight(trk,epDefElev);
- else
- ComputeElev( trk, epDefElev, TRUE, &p->elev, NULL );
- p->defined = *defined;
- *defined = TRUE;
- } else if (undefined) {
- *defined = FALSE;
- }
+ profElem_p p;
+ station_p s;
+ EPINX_T epDefElev = -1;
+ int mode;
+ BOOL_T undefined;
+
+ mode = GetTrkEndElevMode(trk, ep);
+ if (mode == ELEV_DEF) {
+ epDefElev = ep;
+ } else if (mode == ELEV_STATION) {
+ DYNARR_APPEND(station_t, station_da, 10);
+ s = &station(station_da.cnt-1);
+ s->dist = dist;
+ s->name = GetTrkEndElevStation(trk,ep);
+ }
+ undefined = FALSE;
+ if (epDefElev<0) {
+ if ((trk == pathStartTrk && ep == pathStartEp) ||
+ (trk == pathEndTrk && ep == pathEndEp)) {
+ epDefElev = ep;
+ }
+ }
+ if (epDefElev<0) {
+ if (ep == ep2 ||
+ GetTrkEndElevMode(trk,ep2) != ELEV_DEF)
+ for (EPINX_T ep1=0; ep1<GetTrkEndPtCnt(trk); ep1++) {
+ if (ep1==ep || ep1==ep2) {
+ continue;
+ }
+ if (EndPtIsDefinedElev(trk,ep1)) {
+ epDefElev = ep1;
+ dist -= GetTrkLength(trk, ep, ep1);
+ break;
+ }
+ if (GetTrkEndTrk(trk,ep1)) {
+ if (!EndPtIsIgnoredElev(trk,ep1)) {
+ undefined = TRUE;
+ }
+ }
+ }
+ }
+
+ if (epDefElev>=0) {
+ DYNARR_APPEND(profElem_t, profElem_da, 10);
+ p = &profElem(profElem_da.cnt-1);
+ p->trk = trk;
+ p->ep = epDefElev;
+ p->dist = dist;
+ if (GetTrkEndElevMode(trk,epDefElev) == ELEV_DEF) {
+ p->elev = GetTrkEndElevHeight(trk,epDefElev);
+ } else {
+ ComputeElev(trk, epDefElev, TRUE, &p->elev, NULL, TRUE);
+ }
+ p->defined = *defined;
+ *defined = TRUE;
+ } else if (undefined) {
+ *defined = FALSE;
+ }
}
-static void ComputeProfElem( void )
+static void ComputeProfElem(void)
{
- track_p trk = pathStartTrk, trkN;
- EPINX_T ep = pathStartEp, ep2;
- BOOL_T go;
- DIST_T dist;
- BOOL_T defined;
-
- profElem_da.cnt = 0;
- station_da.cnt = 0;
- dist = 0;
- defined = TRUE;
- if (PathListEmpty())
- return;
- ChkElev( trk, ep, ep, dist, &defined );
- if (PathListSingle())
- return;
- go = TRUE;
- while ( go ) {
- if (trk == pathEndTrk) {
- go = FALSE;
- ep2 = pathEndEp;
- } else {
- ep2 = GetNextTrkOnPath( trk, ep );
- PASSERT( "computeProfElem", ep2 >= 0, NOP );
- }
- dist += GetTrkLength( trk, ep, ep2 );
- ChkElev( trk, ep2, ep, dist, &defined );
- if (!go)
- break;
- trkN = GetTrkEndTrk(trk,ep2);
- ep = GetEndPtConnectedToMe(trkN,trk);
- trk = trkN;
- }
+ track_p trk = pathStartTrk, trkN;
+ EPINX_T ep = pathStartEp, ep2;
+ BOOL_T go;
+ DIST_T dist;
+ BOOL_T defined;
+
+ profElem_da.cnt = 0;
+ station_da.cnt = 0;
+ dist = 0;
+ defined = TRUE;
+ if (PathListEmpty()) {
+ return;
+ }
+ ChkElev(trk, ep, ep, dist, &defined);
+ if (PathListSingle()) {
+ return;
+ }
+ go = TRUE;
+ while (go) {
+ if (trk == pathEndTrk) {
+ go = FALSE;
+ ep2 = pathEndEp;
+ } else {
+ ep2 = GetNextTrkOnPath(trk, ep);
+ //PASSERT( "computeProfElem", ep2 >= 0, NOP );
+ }
+ dist += GetTrkLength(trk, ep, ep2);
+ ChkElev(trk, ep2, ep, dist, &defined);
+ if (!go) {
+ break;
+ }
+ trkN = GetTrkEndTrk(trk,ep2);
+ ep = GetEndPtConnectedToMe(trkN,trk);
+ trk = trkN;
+ }
}
-static void DumpProfElems( void )
+static void DumpProfElems(void)
{
- track_p trk, trkN;
- EPINX_T ep, ep2;
- BOOL_T go;
-
- trk = pathStartTrk;
- ep = pathStartEp;
-
- if (pathStartTrk==NULL) lprintf( "s--:- e--:-" );
- else if (pathEndTrk == NULL) lprintf( "sT%d:%d e--:-", GetTrkIndex(pathStartTrk), pathStartEp );
- else lprintf( "sT%d:%d eT%d:%d", GetTrkIndex(pathStartTrk), pathStartEp, GetTrkIndex(pathEndTrk), pathEndEp );
- lprintf( " { " );
- go = TRUE;
- if (!PathListSingle())
- while ( trk ) {
- if (trk==pathEndTrk) {
- ep2 = pathEndEp;
- go = FALSE;
- } else {
- ep2 = GetNextTrkOnPath( trk, ep );
- PASSERT( "computeProfElem", ep2 >= 0, NOP );
- }
- lprintf( "T%d:%d:%d ", GetTrkIndex(trk), ep, ep2 );
- if (!go)
- break;
- trkN = GetTrkEndTrk(trk,ep2);
- ep = GetEndPtConnectedToMe(trkN,trk);
- trk = trkN;
- }
- lprintf( "}" );
+ track_p trk, trkN;
+ EPINX_T ep;
+ BOOL_T go;
+
+ trk = pathStartTrk;
+ ep = pathStartEp;
+
+ if (pathStartTrk==NULL) {
+ lprintf("s--:- e--:-");
+ } else if (pathEndTrk == NULL) {
+ lprintf("sT%d:%d e--:-", GetTrkIndex(pathStartTrk), pathStartEp);
+ } else {
+ lprintf("sT%d:%d eT%d:%d", GetTrkIndex(pathStartTrk), pathStartEp,
+ GetTrkIndex(pathEndTrk), pathEndEp);
+ }
+ lprintf(" { ");
+ go = TRUE;
+ if (!PathListSingle())
+ while (trk) {
+ EPINX_T ep2;
+ if (trk==pathEndTrk) {
+ ep2 = pathEndEp;
+ go = FALSE;
+ } else {
+ ep2 = GetNextTrkOnPath(trk, ep);
+ PASSERT("computeProfElem", ep2 >= 0, NOP);
+ }
+ lprintf("T%d:%d:%d ", GetTrkIndex(trk), ep, ep2);
+ if (!go) {
+ break;
+ }
+ trkN = GetTrkEndTrk(trk,ep2);
+ ep = GetEndPtConnectedToMe(trkN,trk);
+ trk = trkN;
+ }
+ lprintf("}");
}
-static void ProfileSelect( track_p trkN, EPINX_T epN )
+static void ProfileSelect(track_p trkN, EPINX_T epN)
{
- track_p trkP;
- EPINX_T epP=-1;
- int rc;
-
-if (log_profile>=1) {
- DumpProfElems();
- lprintf( " @ T%d:%d ", GetTrkIndex(trkN), epN );
- if (log_profile>=2) lprintf("\n");
- }
-
-#ifdef LATER
- if (!EndPtIsDefinedElev(trkN, epN)) {
- ErrorMessage( MSG_EP_NOT_DEP );
- return;
- }
-#endif
-
- trkP = GetTrkEndTrk( trkN, epN );
- if (trkP)
- epP = GetEndPtConnectedToMe( trkP, trkN );
-
- if (!PathListCheck())
- return;
-
- HilightProfileElevations( FALSE );
-
- if ( PathListEmpty() ) {
- pathStartTrk = trkN;
- pathStartEp = epN;
- pathEndTrk = trkP;
- pathEndEp = epP;
-LOG( log_profile, 2, ("Adding first element\n") )
-
- } else if ( PathListSingle() &&
- ( ( trkN == pathStartTrk && epN == pathStartEp ) ||
- ( trkP && trkP == pathStartTrk && epP == pathStartEp ) ) ) {
- pathStartTrk = pathEndTrk = NULL;
-LOG( log_profile, 2, ("Clearing list\n") )
-
- } else if ( (trkN == pathStartTrk && epN == pathStartEp ) ||
- (trkP && trkP == pathStartTrk && epP == pathStartEp) ) {
- RemoveTracksFromPath( &pathStartTrk, &pathStartEp, pathEndTrk, pathEndEp );
-LOG( log_profile, 2, ("Removing first element\n") )
-
- } else if ( (trkN == pathEndTrk && epN == pathEndEp) ||
- (trkP && trkP == pathEndTrk && epP == pathEndEp) ) {
- RemoveTracksFromPath( &pathEndTrk, &pathEndEp, pathStartTrk, pathStartEp );
-LOG( log_profile, 2, ("Removing last element\n") )
-
- } else if ( (GetTrkBits(trkN)&TB_PROFILEPATH) || (trkP && (GetTrkBits(trkP)&TB_PROFILEPATH)) ) {
- ErrorMessage( MSG_EP_ON_PATH );
- HilightProfileElevations( TRUE );
- return;
-
- } else if ( ( rc = FindProfileShortestPath( trkN, epN ) ) > 0 ) {
- if (!(GetTrkBits(trkN)&TB_PROFILEPATH)) {
- PASSERT( "profileSelect", trkP != NULL, NOP );
- trkN = trkP;
- epN = epP;
-LOG( log_profile, 2, ("Invert selected EP\n") )
- }
-
- switch (profileShortestPathMatch) {
- case 1:
- /* extend Start */
- pathStartTrk = trkN;
- pathStartEp = epN;
-LOG( log_profile, 2, ( "Prepending Path\n" ) )
- break;
- case 2:
- /* extend End */
- pathEndTrk = trkN;
- pathEndEp = epN;
-LOG( log_profile, 2, ( "Appending Path\n" ) )
- break;
- case 3:
- /* need to flip */
- pathStartTrk = pathEndTrk;
- pathStartEp = pathEndEp;
- pathEndTrk = trkN;
- pathEndEp = epN;
-LOG( log_profile, 2, ( "Flip/Appending Path\n" ) )
- break;
- default:
- AbortProg( "findPaths:1" );
- }
-
- } else {
- ErrorMessage( MSG_NO_PATH_TO_EP );
- HilightProfileElevations( TRUE );
- return;
- }
-
- HilightProfileElevations( TRUE );
- ComputeProfElem();
- RedrawProfileW();
- DoProfileChangeMode( NULL );
-if (log_profile>=1) {
- lprintf( " = " );
- DumpProfElems();
- lprintf( "\n" );
- }
- PathListCheck();
+ track_p trkP;
+ EPINX_T epP=-1;
+ int rc;
+
+ if (log_profile>=1) {
+ DumpProfElems();
+ lprintf(" @ T%d:%d ", GetTrkIndex(trkN), epN);
+ if (log_profile>=2) {
+ lprintf("\n");
+ }
+ }
+
+ trkP = GetTrkEndTrk(trkN, epN);
+ if (trkP) {
+ epP = GetEndPtConnectedToMe(trkP, trkN);
+ }
+
+ if (!PathListCheck()) {
+ return;
+ }
+
+ if (PathListEmpty()) {
+ pathStartTrk = trkN;
+ pathStartEp = epN;
+ pathEndTrk = trkP;
+ pathEndEp = epP;
+ LOG(log_profile, 2, ("Adding first element\n"))
+
+ } else if (PathListSingle() &&
+ ((trkN == pathStartTrk && epN == pathStartEp) ||
+ (trkP && trkP == pathStartTrk && epP == pathStartEp))) {
+ pathStartTrk = pathEndTrk = NULL;
+ LOG(log_profile, 2, ("Clearing list\n"))
+
+ } else if ((trkN == pathStartTrk && epN == pathStartEp) ||
+ (trkP && trkP == pathStartTrk && epP == pathStartEp)) {
+ RemoveTracksFromPath(&pathStartTrk, &pathStartEp, pathEndTrk, pathEndEp);
+ LOG(log_profile, 2, ("Removing first element\n"))
+
+ } else if ((trkN == pathEndTrk && epN == pathEndEp) ||
+ (trkP && trkP == pathEndTrk && epP == pathEndEp)) {
+ RemoveTracksFromPath(&pathEndTrk, &pathEndEp, pathStartTrk, pathStartEp);
+ LOG(log_profile, 2, ("Removing last element\n"))
+
+ } else if ((GetTrkBits(trkN)&TB_PROFILEPATH) || (trkP &&
+ (GetTrkBits(trkP)&TB_PROFILEPATH))) {
+ ErrorMessage(MSG_EP_ON_PATH);
+ return;
+
+ } else if ((rc = FindProfileShortestPath(trkN, epN)) > 0) {
+ if (!(GetTrkBits(trkN)&TB_PROFILEPATH)) {
+ PASSERT("profileSelect", trkP != NULL, NOP);
+ trkN = trkP;
+ epN = epP;
+ LOG(log_profile, 2, ("Invert selected EP\n"))
+ }
+
+ switch (profileShortestPathMatch) {
+ case 1:
+ /* extend Start */
+ pathStartTrk = trkN;
+ pathStartEp = epN;
+ LOG(log_profile, 2, ("Prepending Path\n"))
+ break;
+ case 2:
+ /* extend End */
+ pathEndTrk = trkN;
+ pathEndEp = epN;
+ LOG(log_profile, 2, ("Appending Path\n"))
+ break;
+ case 3:
+ /* need to flip */
+ pathStartTrk = pathEndTrk;
+ pathStartEp = pathEndEp;
+ pathEndTrk = trkN;
+ pathEndEp = epN;
+ LOG(log_profile, 2, ("Flip/Appending Path\n"))
+ break;
+ default:
+ AbortProg("findPaths:1");
+ }
+
+ } else {
+ ErrorMessage(MSG_NO_PATH_TO_EP);
+ return;
+ }
+
+ DestroyCopyOfProfileElements();
+ ComputeProfElem();
+ CreateCopyProfileElements();
+
+ RedrawProfileW();
+ DoProfileChangeMode(NULL);
+ if (log_profile>=1) {
+ lprintf(" = ");
+ DumpProfElems();
+ lprintf("\n");
+ }
+ PathListCheck();
}
-static void ProfileSubCommand( wBool_t set, void* pcmd )
+static void ProfileSubCommand(wBool_t set, void* pcmd)
{
- long cmd = (long)pcmd;
- int mode;
- coOrd pos = oldMarker;
- DIST_T elev;
- DIST_T radius;
-
- if ((profilePopupTrk = OnTrack( &pos, TRUE, TRUE )) == NULL ||
- (profilePopupEp = PickEndPoint( pos, profilePopupTrk )) < 0)
- return;
- if (profileUndo==0) {
- profileUndo = TRUE;
- UndoStart(_("Profile Command"), "Profile");
- }
- radius = 0.05*mainD.scale;
- if ( radius < trackGauge/2.0 )
- radius = trackGauge/2.0;
- pos = GetTrkEndPos( profilePopupTrk, profilePopupEp );
- mode = GetTrkEndElevMode( profilePopupTrk, profilePopupEp );
- if ( (mode&ELEV_MASK)==ELEV_DEF || (mode&ELEV_MASK)==ELEV_IGNORE )
- DrawFillCircle( &tempD, pos, radius,
- ((mode&ELEV_MASK)==ELEV_DEF?elevColorDefined:elevColorIgnore));
- if ( (mode&ELEV_MASK)==ELEV_DEF )
-
- DrawEndPt2( &mainD, profilePopupTrk, profilePopupEp, drawColorWhite );
- elev = 0.0;
- switch (cmd) {
- case 0:
- /* define */
- ComputeElev( profilePopupTrk, profilePopupEp, TRUE, &elev, NULL );
- mode = ELEV_DEF|ELEV_VISIBLE;
- break;
- case 1:
- /* ignore */
- mode = ELEV_IGNORE|ELEV_VISIBLE;
- break;
- case 2:
- default:
- /* none */
- mode = ELEV_NONE;
- break;
- }
- UpdateTrkEndElev( profilePopupTrk, profilePopupEp, mode, elev, NULL );
- if ( (mode&ELEV_MASK)==ELEV_DEF || (mode&ELEV_MASK)==ELEV_IGNORE )
- DrawFillCircle( &tempD, pos, radius,
- ((mode&ELEV_MASK)==ELEV_DEF?elevColorDefined:elevColorIgnore));
- ComputeProfElem();
- RedrawProfileW();
+ long cmd = (long)pcmd;
+ int mode;
+ coOrd pos = oldMarker;
+ DIST_T elev;
+ DIST_T radius;
+
+ if ((profilePopupTrk = OnTrack(&pos, TRUE, TRUE)) == NULL ||
+ (profilePopupEp = PickEndPoint(pos, profilePopupTrk)) < 0) {
+ return;
+ }
+ if (profileUndo==0) {
+ profileUndo = TRUE;
+ UndoStart(_("Profile Command"), "Profile");
+ }
+ radius = 0.05*mainD.scale;
+ if (radius < trackGauge/2.0) {
+ radius = trackGauge/2.0;
+ }
+ pos = GetTrkEndPos(profilePopupTrk, profilePopupEp);
+ mode = GetTrkEndElevMode(profilePopupTrk, profilePopupEp);
+
+ elev = 0.0;
+ switch (cmd) {
+ case 0:
+ /* define */
+ ComputeElev(profilePopupTrk, profilePopupEp, TRUE, &elev, NULL, TRUE);
+ mode = ELEV_DEF|ELEV_VISIBLE;
+ break;
+ case 1:
+ /* ignore */
+ mode = ELEV_IGNORE|ELEV_VISIBLE;
+ break;
+ case 2:
+ default:
+ /* none */
+ mode = ELEV_NONE;
+ break;
+ }
+ UpdateTrkEndElev(profilePopupTrk, profilePopupEp, mode, elev, NULL);
+ ComputeProfElem();
+ RedrawProfileW();
+ TempRedraw(); // ProfileSubCommand
}
-static STATUS_T CmdProfile( wAction_t action, coOrd pos )
+static STATUS_T CmdProfile(wAction_t action, coOrd pos)
{
- track_p trk0;
- EPINX_T ep0;
- coOrd textsize;
-
- switch (action) {
- case C_START:
- if ( profileW == NULL ) {
- profileColorDefinedProfile = drawColorBlue;
- profileColorUndefinedProfile = drawColorRed;
- profileColorFill = drawColorAqua;
- DrawTextSize( &mainD, "999", wStandardFont( F_HELV, FALSE, FALSE ), screenProfileFontSize, FALSE, &textsize );
- labelH = textsize.y;
- profileW = ParamCreateDialog( &profilePG, MakeWindowTitle(_("Profile")), _("Done"), DoProfileDone, (paramActionCancelProc)Reset, TRUE, NULL, F_RESIZE, NULL );
- }
- ParamLoadControls( &profilePG );
- ParamGroupRecord( &profilePG );
- wShow( profileW );
- ParamLoadMessage( &profilePG, I_PROFILEMSG, _("Drag to change Elevation") );
- HilightProfileElevations( TRUE );
- profElem_da.cnt = 0;
- station_da.cnt = 0;
- RedrawProfileW();
- if ( ClrAllTrkBits( TB_PROFILEPATH ) ) {
- MainRedraw();
- MapRedraw();
- }
- pathStartTrk = NULL;
- SetAllTrackSelect( FALSE );
- profileUndo = FALSE;
- InfoMessage( _("Select a Defined Elevation to start profile") );
- return C_CONTINUE;
- case C_LCLICK:
- InfoMessage( "" );
- if ((trk0 = OnTrack( &pos, TRUE, TRUE )) != NULL) {
- ep0 = PickEndPoint( pos, trk0 );
- if ( ep0 >= 0 ) {
- ProfileSelect( trk0, ep0 );
- }
- }
- return C_CONTINUE;
- case C_CMDMENU:
- if ((profilePopupTrk = OnTrack( &pos, TRUE, TRUE )) != NULL ) {
- profilePopupEp = PickEndPoint( pos, profilePopupTrk );
- if (profilePopupEp >= 0) {
- int mode;
- mode = GetTrkEndElevMode( profilePopupTrk, profilePopupEp );
- if (mode != ELEV_DEF && mode != ELEV_IGNORE && mode != ELEV_NONE ) {
- ErrorMessage( MSG_CHANGE_ELEV_MODE );
- } else {
- wMenuToggleEnable( profilePopupToggles[1], TRUE );
- if ( OnPath( profilePopupTrk, profilePopupEp ) & (ONPATH_END|ONPATH_MID) )
- wMenuToggleEnable( profilePopupToggles[1], FALSE );
- wMenuToggleSet( profilePopupToggles[0], mode == ELEV_DEF );
- wMenuToggleSet( profilePopupToggles[1], mode == ELEV_IGNORE );
- wMenuToggleSet( profilePopupToggles[2], mode == ELEV_NONE );
- wMenuPopupShow( profilePopupM );
- }
- }
- }
-#ifdef LATER
- InfoMessage( "" );
- if ((trk0 = OnTrack( &pos, TRUE, TRUE )) == NULL)
- return C_CONTINUE;
- ep0 = PickEndPoint( pos, trk0 );
- if (ep0 < 0)
- return C_CONTINUE;
- if (profileMode == 0) {
- ;
- } else {
- ProfileIgnore( trk0, ep0 );
- }
- DoProfileChangeMode( NULL );
-#endif
- return C_CONTINUE;
- case C_OK:
- DoProfileDone(NULL);
- return C_TERMINATE;
- case C_CANCEL:
- wHide(profileW);
- HilightProfileElevations( FALSE );
- if (ClrAllTrkBits(TB_PROFILEPATH)) {
- MainRedraw();
- MapRedraw();
- }
- return C_TERMINATE;
- case C_REDRAW:
- if ( wWinIsVisible(profileW) ) {
- HilightProfileElevations( wWinIsVisible(profileW) );
- /*RedrawProfileW();*/
- }
- return C_CONTINUE;
- }
- return C_CONTINUE;
+ track_p trk0;
+ coOrd textsize;
+
+ switch (action) {
+ case C_START:
+ if (profileW == NULL) {
+ profileColorDefinedProfile = drawColorBlue;
+ profileColorUndefinedProfile = drawColorRed;
+ profileColorFill = drawColorGrey80;
+ DrawTextSize(&mainD, "999.9", wStandardFont(F_HELV, FALSE, FALSE),
+ screenProfileFontSize, FALSE, &textsize);
+ labelH = textsize.y;
+ labelW = textsize.x;
+ profileW = ParamCreateDialog(&profilePG, MakeWindowTitle(_("Profile")), NULL,
+ NULL, wHide, TRUE, NULL, F_RESIZE, CloseProfileWindow);
+ }
+ ParamLoadControls(&profilePG);
+ ParamGroupRecord(&profilePG);
+ wShow(profileW);
+ ParamLoadMessage(&profilePG, I_PROFILEMSG, _("Drag to change Elevation"));
+ profElem_da.cnt = 0;
+ station_da.cnt = 0;
+ RedrawProfileW();
+ ClrAllTrkBitsRedraw(TB_PROFILEPATH, TRUE);
+ pathStartTrk = NULL;
+ SetAllTrackSelect(FALSE);
+ profileUndo = FALSE;
+ InfoMessage(_("Select a Defined Elevation to start profile"));
+ TempRedraw(); // CmdProfile C_START
+ return C_CONTINUE;
+ case C_LCLICK:
+ InfoMessage("");
+ if ((trk0 = OnTrack(&pos, TRUE, TRUE)) != NULL) {
+ EPINX_T ep0;
+ ep0 = PickEndPoint(pos, trk0);
+ if (ep0 >= 0) {
+ ProfileSelect(trk0, ep0);
+ }
+ }
+ return C_CONTINUE;
+ case C_CMDMENU:
+ if ((profilePopupTrk = OnTrack(&pos, TRUE, TRUE)) != NULL) {
+ profilePopupEp = PickEndPoint(pos, profilePopupTrk);
+ if (profilePopupEp >= 0) {
+ int mode;
+ mode = GetTrkEndElevMode(profilePopupTrk, profilePopupEp);
+ if (mode != ELEV_DEF && mode != ELEV_IGNORE && mode != ELEV_NONE) {
+ ErrorMessage(MSG_CHANGE_ELEV_MODE);
+ } else {
+ wMenuToggleEnable(profilePopupToggles[1], TRUE);
+ if (OnPath(profilePopupTrk, profilePopupEp) & (ONPATH_END|ONPATH_MID)) {
+ wMenuToggleEnable(profilePopupToggles[1], FALSE);
+ }
+ wMenuToggleSet(profilePopupToggles[0], mode == ELEV_DEF);
+ wMenuToggleSet(profilePopupToggles[1], mode == ELEV_IGNORE);
+ wMenuToggleSet(profilePopupToggles[2], mode == ELEV_NONE);
+ menuPos = pos;
+ wMenuPopupShow(profilePopupM);
+ }
+ }
+ }
+ return C_CONTINUE;
+ case C_OK:
+ DoProfileDone(NULL);
+ return C_TERMINATE;
+ case C_CANCEL:
+ wHide(profileW);
+ ClrAllTrkBitsRedraw(TB_PROFILEPATH, TRUE);
+ return C_TERMINATE;
+ case C_REDRAW:
+ if (wWinIsVisible(profileW)) {
+ HilightProfileElevations(wWinIsVisible(profileW));
+ }
+ return C_CONTINUE;
+ }
+ return C_CONTINUE;
}
-static void ProfileChange( long changes )
+static void ProfileChange(long changes)
{
- if ( (changes & CHANGE_UNITS) && screenProfileD.d )
- RedrawProfileW();
+ if ((changes & CHANGE_UNITS) && screenProfileD.d) {
+ RedrawProfileW();
+ }
}
-
#include "bitmaps/profile.xpm"
-EXPORT void InitCmdProfile( wMenu_p menu )
+EXPORT void InitCmdProfile(wMenu_p menu)
{
- log_profile = LogFindIndex( "profile" );
- ParamRegister( &profilePG );
-#ifdef LATER
- AddPlaybackProc( "PROFILEMOUSE", (playbackProc_p)profilePlayback, NULL );
-#endif
- AddMenuButton( menu, CmdProfile, "cmdProfile", _("Profile"), wIconCreatePixMap(profile_xpm), LEVEL0_50, IC_LCLICK|IC_CMDMENU|IC_POPUP2, ACCL_PROFILE, NULL );
- profilePopupM = MenuRegister( "Profile Mode" );
- profilePopupToggles[0] = wMenuToggleCreate( profilePopupM, "", _("Define"), 0, FALSE, ProfileSubCommand, (void*)0 );
- profilePopupToggles[1] = wMenuToggleCreate( profilePopupM, "", _("Ignore"), 0, FALSE, ProfileSubCommand, (void*)1 );
- profilePopupToggles[2] = wMenuToggleCreate( profilePopupM, "", _("None"), 0, FALSE, ProfileSubCommand, (void*)2 );
- RegisterChangeNotification( ProfileChange );
+ log_profile = LogFindIndex("profile");
+ ParamRegister(&profilePG);
+
+ AddMenuButton(menu, CmdProfile, "cmdProfile", _("Profile"),
+ wIconCreatePixMap(profile_xpm), LEVEL0_50, IC_LCLICK|IC_CMDMENU|IC_POPUP3,
+ ACCL_PROFILE, NULL);
+ profilePopupM = MenuRegister("Profile Mode");
+ profilePopupToggles[0] = wMenuToggleCreate(profilePopupM, "", _("Define"), 0,
+ FALSE, ProfileSubCommand, (void*)0);
+ profilePopupToggles[1] = wMenuToggleCreate(profilePopupM, "", _("Ignore"), 0,
+ FALSE, ProfileSubCommand, (void*)1);
+ profilePopupToggles[2] = wMenuToggleCreate(profilePopupM, "", _("None"), 0,
+ FALSE, ProfileSubCommand, (void*)2);
+ RegisterChangeNotification(ProfileChange);
}
diff --git a/app/bin/cpull.c b/app/bin/cpull.c
index d7f7c80..7f27864 100644
--- a/app/bin/cpull.c
+++ b/app/bin/cpull.c
@@ -60,6 +60,9 @@ static dynArr_t section_da;
#define section(N) DYNARR_N( section_t, section_da, N )
static double contribL, contribR;
+static dynArr_t anchors_da;
+#define anchors(N) DYNARR_N(trkSeg_t,anchors_da,N)
+
typedef enum { freeEnd, connectedEnd, loopEnd } ending_e;
@@ -452,12 +455,15 @@ static void PullTracks(
int cnt1, cnt2;
int rc;
- if (QueryTrack(trk1,Q_CAN_ADD_ENDPOINTS) || QueryTrack(trk2,Q_CAN_ADD_ENDPOINTS)) {
+ if (QueryTrack(trk1,Q_CAN_ADD_ENDPOINTS)) {
ConnectTurntableTracks(trk1, ep1, trk2, ep2 );
return;
+ } else if (QueryTrack(trk2,Q_CAN_ADD_ENDPOINTS)) {
+ ConnectTurntableTracks(trk2, ep2, trk1, ep1 );
+ return;
}
- if (ep1<0 || ep1<0 ) return;
+ if (ep1<0 || ep2<0 ) return;
if (ConnectAbuttingTracks( trk1, ep1, trk2, ep2 ))
return;
@@ -589,57 +595,202 @@ printf("T%d [%0.3f %0.3f %0.3f]\n", GetTrkIndex(trk1), p1.x, p1.y, a1 );
InfoMessage( _("%d tracks moved"), cnt );
}
+static void CreateConnectAnchor(EPINX_T ep, track_p t, BOOL_T shift) {
+ coOrd pos = GetTrkEndPos(t,ep);
+ DIST_T d = tempD.scale*0.15;
+ DIST_T w = tempD.scale/tempD.dpi*4;
+ ANGLE_T a = GetTrkEndAngle(t,ep);
+ int i;
+ if (!shift) {
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).color = wDrawColorBlue;
+ anchors(i).u.l.pos[0] = pos;
+ Translate(&anchors(i).u.l.pos[1],pos,a+90,-GetTrkGauge(t));
+ Translate(&anchors(i).u.l.pos[1],anchors(i).u.l.pos[1],a,-d);
+ anchors(i).width = w;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).color = wDrawColorBlue;
+ anchors(i).u.l.pos[0] = pos;
+ Translate(&anchors(i).u.l.pos[1],pos,a+90,GetTrkGauge(t));
+ Translate(&anchors(i).u.l.pos[1],anchors(i).u.l.pos[1],a,-d);
+ anchors(i).width = w;
+ } else {
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).color = wDrawColorBlue;
+ Translate(&anchors(i).u.l.pos[0],pos,a+90,GetTrkGauge(t));
+ Translate(&anchors(i).u.l.pos[0],anchors(i).u.l.pos[0],a,d);
+ Translate(&anchors(i).u.l.pos[1],pos,a+90,-GetTrkGauge(t));
+ Translate(&anchors(i).u.l.pos[1],anchors(i).u.l.pos[1],a,-d);
+ anchors(i).width = w;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).color = wDrawColorBlue;
+ Translate(&anchors(i).u.l.pos[0],pos,a+90,GetTrkGauge(t));
+ Translate(&anchors(i).u.l.pos[0],anchors(i).u.l.pos[0],a,-d);
+ Translate(&anchors(i).u.l.pos[1],pos,a+90,-GetTrkGauge(t));
+ Translate(&anchors(i).u.l.pos[1],anchors(i).u.l.pos[1],a,d);
+ anchors(i).width = w;
+ }
+}
+
+STATUS_T ConnectMultiple() {
+ int countTracksR0 =0,countTracksR1 =0, possibleEndPoints =0;
+ if (selectedTrackCount==0) {
+ ErrorMessage(_("Connect Multiple Tracks - Select multiple tracks to join first"));
+ return C_CONTINUE;
+ }
+ if (NoticeMessage(_("Try to Connect all Selected Tracks?"), _("Yes"), _("No"))<=0) return C_CONTINUE;
+ track_p trk1 = NULL;
+ track_p trk2 = NULL;
+ EPINX_T ep1,ep2;
+ ANGLE_T a;
+ DIST_T d;
+ UndoStart( _("ReConnect"),"Try to reconnect all selected tracks");
+ for (int i=0;i<2;i++) { // Try twice - in case later joins help earlier ones and to try close ones first
+ while ( TrackIterate( &trk1 ) ) {
+ BOOL_T found = FALSE;
+ if ( GetTrkSelected( trk1 ) ) {
+ for (ep1=0; ep1<GetTrkEndPtCnt(trk1); ep1++) {
+ if (!GetTrkEndTrk( trk1, ep1 )) {
+ trk2 = NULL;
+ while (!found && TrackIterate(&trk2) ) {
+ if (trk1 == trk2) continue;
+ for (ep2=0; ep2<GetTrkEndPtCnt(trk2); ep2++) {
+ if (GetTrkEndTrk( trk2, ep2 )) continue;
+ d = FindDistance(GetTrkEndPos(trk1,ep1),GetTrkEndPos(trk2,ep2));
+ a = NormalizeAngle( 180+GetTrkEndAngle( trk1, ep1 ) - GetTrkEndAngle( trk2, ep2 )+(connectAngle/2.0));
+ // Take two passes. In round one favor closer connections. In round two try anything.
+ if ( (i==0 && (d < connectDistance) && (a < connectAngle)) ||
+ (i>0 && (d<3.0 && a<7.5))) { // Match PullTracks criteria in round 2
+ PullTracks(trk1,ep1,trk2,ep2);
+ if (GetTrkEndTrk( trk2, ep2 )) {
+ found = TRUE;
+ if (i==0)
+ countTracksR0++;
+ else
+ countTracksR1++;
+ break; //Stop looking
+ } else if (i==1) possibleEndPoints++;
+ }
+ }
+ }
+ if (found) break; //Next EndPoint
+ }
+ }
+ }
+ }
+ }
+ UndoEnd();
+ NoticeMessage(_("Round 1 %d and Round 2 %d tracks connected, %d close pairs of end Points were not connected"), _("Ok"), NULL, countTracksR0, countTracksR1, possibleEndPoints);
+ return C_TERMINATE;
+}
+
+static wMenu_p pullPopupM;
static STATUS_T CmdPull(
wAction_t action,
coOrd pos )
{
- static track_p trk1;
- static EPINX_T ep1;
+ static track_p trk1, t1, t2;
+ static BOOL_T t_turn1, t_turn2;
+ static EPINX_T ep1, t_ep1, t_ep2;
track_p trk2;
EPINX_T ep2;
static BOOL_T turntable;
int countTracksR0 = 0, countTracksR1 = 0, possibleEndPoints = 0;
BOOL_T found = FALSE;
- ANGLE_T a;
- DIST_T d;
- switch (action) {
+ switch (action&0xFF) {
case C_START:
if (selectedTrackCount==0)
- InfoMessage( _("Select first end-point to connect") );
+ InfoMessage( _("Select first endpoint or turntable to connect, +Shift to tighten") );
else
- InfoMessage( _("Select first end-point to connect, or Right-Click for connecting selected tracks") );
+ InfoMessage( _("Select first endpoint to connect, or Right-Click for connecting selected tracks (not turntable)") );
trk1 = NULL;
turntable = FALSE;
+ t1 = t2 = NULL;
+ t_turn1 = t_turn2 = FALSE;
return C_CONTINUE;
+ case wActionMove:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ if ((MyGetKeyState() & WKEY_SHIFT) == 0 ) {
+ if (trk1 == NULL) {
+ if ((t1= OnTrack( &pos, FALSE, TRUE )) != NULL) {
+ if ((t_ep1 = PickUnconnectedEndPointSilent( pos, t1 )) < 0) {
+ if (QueryTrack(t1, Q_CAN_ADD_ENDPOINTS)) {
+ DrawTrack(t1,&mainD,wDrawColorBlue);
+ t_turn1 = TRUE;
+ } else t1 = NULL;
+ }
+ if (t1 && t_ep1 >=0)
+ CreateConnectAnchor(t_ep1,t1,FALSE);
+ }
+ } else {
+ if (t1 != NULL) {
+ if (t_turn1) DrawTrack(t1,&mainD,wDrawColorBlue);
+ else CreateConnectAnchor(t_ep1,t1,FALSE);
+ }
+ if ((t2= OnTrackIgnore( &pos, FALSE, TRUE, t1 )) != NULL) {
+ if ((t_ep2 = PickUnconnectedEndPointSilent( pos, t2 )) < 0) {
+ if (QueryTrack(t2, Q_CAN_ADD_ENDPOINTS)) {
+ DrawTrack(t2,&mainD,wDrawColorBlue);
+ t_turn2 = TRUE;
+ } else t2 = NULL;
+ }
+ if (t2 && t_ep2 >=0)
+ CreateConnectAnchor(t_ep2,t2,FALSE);
+ }
+
+ }
+ } else { //Shift, tighten
+ t1 = OnTrack( &pos, FALSE, TRUE );
+ if (t1 == NULL)
+ return C_CONTINUE;
+ t_ep1 = PickUnconnectedEndPointSilent( pos, t1 );
+ if ( t_ep1 < 0 )
+ return C_CONTINUE;
+ CreateConnectAnchor(t_ep1,t1,TRUE);
+ }
+ break;
+
case C_LCLICK:
- if ( (MyGetKeyState() & WKEY_SHIFT) == 0 ) {
+ if ( (MyGetKeyState() & WKEY_SHIFT) == 0 ) { //No shift - try and join
if (trk1 == NULL) {
- if ((trk1 = OnTrack( &pos, TRUE, FALSE )) != NULL) {
+ if ((trk1 = OnTrack( &pos, TRUE, TRUE )) != NULL) {
if ((ep1 = PickUnconnectedEndPoint( pos, trk1 )) < 0) {
if (QueryTrack(trk1, Q_CAN_ADD_ENDPOINTS)) {
turntable = TRUE;
ep1 = -1;
} else trk1 = NULL;
} else {
- InfoMessage( _("Select second end-point to connect") );
+ InfoMessage( _("Select second endpoint or turntable to connect") );
}
}
} else {
- if ((trk2 = OnTrack( &pos, TRUE, FALSE )) != NULL) {
+ if ((trk2 = OnTrackIgnore( &pos, TRUE, TRUE, trk1 )) != NULL) {
+ if (trk2 == trk1) {
+ InfoMessage( _("Same Track! - please select another") );
+ return C_CONTINUE;
+ }
if ((ep2 = PickUnconnectedEndPoint( pos, trk2 )) >= 0 ) {
PullTracks( trk1, ep1, trk2, ep2 );
trk1 = NULL;
inError = TRUE;
return C_TERMINATE;
}
- if (!turntable && QueryTrack(trk2, Q_CAN_ADD_ENDPOINTS)) {
+ if (!turntable && QueryTrack(trk2, Q_CAN_ADD_ENDPOINTS)) { /*Second end a turntable */
ep2 = -1;
turntable = TRUE;
PullTracks( trk2, ep2, trk1, ep1);
@@ -651,7 +802,7 @@ static STATUS_T CmdPull(
}
}
} else {
- trk1 = OnTrack( &pos, TRUE, FALSE );
+ trk1 = OnTrack( &pos, TRUE, TRUE );
if (trk1 == NULL)
return C_CONTINUE;
ep1 = PickUnconnectedEndPoint( pos, trk1 );
@@ -664,56 +815,23 @@ static STATUS_T CmdPull(
}
return C_CONTINUE;
- case C_RCLICK:
- if (selectedTrackCount==0) {
- ErrorMessage(_("Connect Multiple Tracks - Select multiple tracks to join first"));
- return C_CONTINUE;
- }
- if (NoticeMessage(_("Try to Connect all Selected Tracks?"), _("Yes"), _("No"))<=0) return C_CONTINUE;
- trk1 = NULL;
- trk2 = NULL;
- UndoStart( _("ReConnect"),"Try to reconnect all selected tracks");
- for (int i=0;i<2;i++) { // Try twice - in case later joins help earlier ones and to try close ones first
- while ( TrackIterate( &trk1 ) ) {
- found = FALSE;
- if ( GetTrkSelected( trk1 ) ) {
- for (ep1=0; ep1<GetTrkEndPtCnt(trk1); ep1++) {
- if (!GetTrkEndTrk( trk1, ep1 )) {
- trk2 = NULL;
- while (!found && TrackIterate(&trk2) ) {
- if (trk1 == trk2) continue;
- for (ep2=0; ep2<GetTrkEndPtCnt(trk2); ep2++) {
- if (GetTrkEndTrk( trk2, ep2 )) continue;
- d = FindDistance(GetTrkEndPos(trk1,ep1),GetTrkEndPos(trk2,ep2));
- a = NormalizeAngle( 180+GetTrkEndAngle( trk1, ep1 ) - GetTrkEndAngle( trk2, ep2 )+(connectAngle/2.0));
- // Take two passes. In round one favor closer connections. In round two try anything.
- if ( (i==0 && (d < connectDistance) && (a < connectAngle)) ||
- (i>0 && (d<3.0 && a<7.5))) { // Match PullTracks criteria in round 2
- PullTracks(trk1,ep1,trk2,ep2);
- if (GetTrkEndTrk( trk2, ep2 )) {
- found = TRUE;
- if (i==0)
- countTracksR0++;
- else
- countTracksR1++;
- break; //Stop looking
- } else if (i==1) possibleEndPoints++;
- }
- }
- }
- if (found) break; //Next EndPoint
- }
- }
- }
- }
- }
- UndoEnd();
- NoticeMessage(_("Round 1 %d and Round 2 %d tracks connected, %d close pairs of end Points were not connected"), _("Ok"), NULL, countTracksR0, countTracksR1, possibleEndPoints);
- return C_TERMINATE;
-
case C_REDRAW:
+ if (anchors_da.cnt)
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
+ if (t1 && t_turn1)
+ DrawTrack(t1,&tempD,wDrawColorBlue);
+ if (t2 && t_turn2)
+ DrawTrack(t2,&tempD,wDrawColorBlue);
return C_CONTINUE;
+ case C_TEXT:
+ if (action>>8 == 'S') {
+ wBool_t rc = ConnectMultiple();
+ MainRedraw(); // CmdPull: ConnectMultiple
+ return rc;
+ }
+ break;
+
case C_CANCEL:
return C_TERMINATE;
@@ -723,16 +841,35 @@ static STATUS_T CmdPull(
case C_CONFIRM:
return C_CONTINUE;
+ case C_CMDMENU:
+ menuPos = pos;
+ wMenuPopupShow( pullPopupM );
+ return C_CONTINUE;
+ break;
+
+
default:
return C_CONTINUE;
}
+ return C_CONTINUE;
}
#include "bitmaps/pull.xpm"
+wMenuPush_p pullConnectMultiple;
+
+void pullMenuEnter(int key) {
+ int action;
+ action = C_TEXT;
+ action |= key<<8;
+ CmdPull(action,zero);
+}
+
void InitCmdPull( wMenu_p menu )
{
- AddMenuButton( menu, CmdPull, "cmdConnect", _("Connect Two Tracks"), wIconCreatePixMap(pull_xpm), LEVEL0_50, IC_STICKY|IC_LCLICK|IC_POPUP2|IC_RCLICK, ACCL_CONNECT, NULL );
+ AddMenuButton( menu, CmdPull, "cmdConnect", _("Connect Two Tracks"), wIconCreatePixMap(pull_xpm), LEVEL0_50, IC_STICKY|IC_INITNOTSTICKY|IC_LCLICK|IC_POPUP3|IC_CMDMENU|IC_WANT_MOVE, ACCL_CONNECT, NULL );
+ pullPopupM = MenuRegister( "Connect Options" );
+ pullConnectMultiple = wMenuPushCreate( pullPopupM, "", _("Connect All Selected - 'S'"), 0, (wMenuCallBack_p)pullMenuEnter, (void*) 'S');
}
diff --git a/app/bin/cruler.c b/app/bin/cruler.c
index b1addc6..d3f2926 100644
--- a/app/bin/cruler.c
+++ b/app/bin/cruler.c
@@ -62,43 +62,34 @@ static STATUS_T CmdRuler( wAction_t action, coOrd pos )
case C_START:
switch (Dr.state) {
case DR_OFF:
- DrawRuler( &tempD, Dr.pos0, Dr.pos1, 0.0, TRUE, TRUE, wDrawColorBlack );
Dr.state = DR_ON;
InfoMessage( "%s", FormatDistance( FindDistance( Dr.pos0, Dr.pos1 ) ) );
break;
case DR_ON:
- DrawRuler( &tempD, Dr.pos0, Dr.pos1, 0.0, TRUE, TRUE, wDrawColorBlack );
Dr.state = DR_OFF;
break;
}
- MainRedraw();
return C_CONTINUE;
case C_DOWN:
- if (Dr.state == DR_ON) {
- DrawRuler( &tempD, Dr.pos0, Dr.pos1, 0.0, TRUE, TRUE, wDrawColorBlack );
- }
Dr.pos0 = Dr.pos1 = pos;
Dr.state = DR_ON;
- DrawRuler( &tempD, Dr.pos0, Dr.pos1, 0.0, TRUE, TRUE, wDrawColorBlack );
InfoMessage( "0.0" );
- MainRedraw();
return C_CONTINUE;
case C_MOVE:
- DrawRuler( &tempD, Dr.pos0, Dr.pos1, 0.0, TRUE, TRUE, wDrawColorBlack );
Dr.pos1 = pos;
- DrawRuler( &tempD, Dr.pos0, Dr.pos1, 0.0, TRUE, TRUE, wDrawColorBlack );
InfoMessage( "%s", FormatDistance( FindDistance( Dr.pos0, Dr.pos1 ) ) );
- MainRedraw();
return C_CONTINUE;
case C_UP:
inError = TRUE;
- MainRedraw();
return C_TERMINATE;
case C_REDRAW:
+ if (Dr.state == DR_ON) {
+ DrawRuler( &tempD, Dr.pos0, Dr.pos1, 0.0, TRUE, TRUE, wDrawColorBlack );
+ }
return C_CONTINUE;
case C_CANCEL:
@@ -126,21 +117,22 @@ STATUS_T ModifyRuler(
return C_ERROR;
}
case C_MOVE:
- DrawRuler( &tempD, Dr.pos0, Dr.pos1, 0.0, TRUE, TRUE, wDrawColorBlack );
if ( Dr.modifyingEnd == 0 ) {
Dr.pos0 = pos;
} else {
Dr.pos1 = pos;
}
- DrawRuler( &tempD, Dr.pos0, Dr.pos1, 0.0, TRUE, TRUE, wDrawColorBlack );
InfoMessage( "%s", FormatDistance( FindDistance( Dr.pos0, Dr.pos1 ) ) );
- MainRedraw();
return C_CONTINUE;
case C_UP:
return C_CONTINUE;
+ case C_REDRAW:
+ DrawRuler( &tempD, Dr.pos0, Dr.pos1, 0.0, TRUE, TRUE, wDrawColorBlack );
+ break;
default:
return C_ERROR;
}
+ return C_CONTINUE;
}
diff --git a/app/bin/cselect.c b/app/bin/cselect.c
index 8ff68c0..4e4e8eb 100644
--- a/app/bin/cselect.c
+++ b/app/bin/cselect.c
@@ -23,9 +23,11 @@
#include <math.h>
#include <string.h>
+#include "draw.h"
#include "ccurve.h"
#include "tcornu.h"
#include "tbezier.h"
+#include "track.h"
#define PRIVATE_EXTRADATA
#include "compound.h"
#include "cselect.h"
@@ -38,6 +40,10 @@
#include "param.h"
#include "track.h"
#include "utility.h"
+#include "draw.h"
+#include "misc.h"
+#include "trackx.h"
+
#include "bitmaps/bmendpt.xbm"
#include "bitmaps/bma0.xbm"
@@ -59,10 +65,12 @@ struct extraData { char junk[2000]; };
static wDrawBitMap_p endpt_bm;
static wDrawBitMap_p angle_bm[4];
+track_p IsInsideABox(coOrd pos);
- long quickMove = 0;
- BOOL_T importMove = 0;
- int incrementalDrawLimit = 20;
+static track_p moveDescTrk;
+static coOrd moveDescPos;
+
+int incrementalDrawLimit = 20;
static int microCount = 0;
static dynArr_t tlist_da;
@@ -71,12 +79,169 @@ static dynArr_t tlist_da;
#define TlistAppend( T ) \
{ DYNARR_APPEND( track_p, tlist_da, 10 );\
Tlist(tlist_da.cnt-1) = T; }
-static track_p *tlist2 = NULL;
+
+BOOL_T TListSearch(track_p T) {
+ for (int i=0;i<tlist_da.cnt-1;i++) { \
+ if (Tlist(i) == T) return TRUE;
+ }
+ return FALSE;
+}
static wMenu_p selectPopup1M;
+static wMenu_p selectPopup1CM;
static wMenu_p selectPopup2M;
+static wMenu_p selectPopup2CM;
+static wMenu_p selectPopup2RM;
+static wMenu_p selectPopup2TM;
+static wMenu_p selectPopup2TYM;
+static wMenuPush_p menuPushModify;
+static wMenuPush_p rotateAlignMI;
+static wMenuPush_p descriptionMI;
+static wMenuPush_p hideMI;
+static wMenuPush_p bridgeMI;
+static wMenuPush_p tiesMI;
+
+
+static BOOL_T doingAlign = FALSE;
+static enum { AREA, MOVE } mode;
+static void SelectOneTrack(
+ track_p trk,
+ wBool_t selected );
static void DrawSelectedTracksD( drawCmd_p d, wDrawColor color );
+
+static dynArr_t anchors_da;
+#define anchors(N) DYNARR_N(trkSeg_t,anchors_da,N)
+
+void CreateArrowAnchor(coOrd pos,ANGLE_T a,DIST_T len) {
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).width = 0;
+ anchors(i).u.l.pos[0] = pos;
+ Translate(&anchors(i).u.l.pos[1],pos,NormalizeAngle(a+135),len);
+ anchors(i).color = wDrawColorBlue;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).width = 0;
+ anchors(i).u.l.pos[0] = pos;
+ Translate(&anchors(i).u.l.pos[1],pos,NormalizeAngle(a-135),len);
+ anchors(i).color = wDrawColorBlue;
+}
+
+void static CreateRotateAnchor(coOrd pos) {
+ DIST_T d = tempD.scale*0.15;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = SEG_CRVLIN;
+ anchors(i).width = d/8;
+ anchors(i).u.c.center = pos;
+ anchors(i).u.c.a0 = 180.0;
+ anchors(i).u.c.a1 = 360.0;
+ anchors(i).u.c.radius = d*2;
+ anchors(i).color = wDrawColorAqua;
+ coOrd head; //Arrows
+ for (int j=0;j<3;j++) {
+ Translate(&head,pos,j*120,d*2);
+ CreateArrowAnchor(head,NormalizeAngle((j*120)+90),d);
+ }
+}
+
+void static CreateModifyAnchor(coOrd pos) {
+ DIST_T d = tempD.scale*0.15;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = SEG_FILCRCL;
+ anchors(i).width = 0;
+ anchors(i).u.c.center = pos;
+ anchors(i).u.c.a0 = 180.0;
+ anchors(i).u.c.a1 = 360.0;
+ anchors(i).u.c.radius = d/2;
+ anchors(i).color = wDrawColorPowderedBlue;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ i = anchors_da.cnt-1;
+ anchors(i).type = SEG_CRVLIN;
+ anchors(i).width = 0;
+ anchors(i).u.c.center = pos;
+ anchors(i).u.c.a0 = 180.0;
+ anchors(i).u.c.a1 = 360.0;
+ anchors(i).u.c.radius = d;
+ anchors(i).color = wDrawColorPowderedBlue;
+
+}
+
+void CreateDescribeAnchor(coOrd pos) {
+ DIST_T d = tempD.scale*0.15;
+ for (int j=0;j<2;j++) {
+ pos.x += j*d*3/4;
+ pos.y += j*d/2;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = SEG_CRVLIN;
+ anchors(i).width = d/4;
+ anchors(i).u.c.center = pos;
+ anchors(i).u.c.a0 = 270.0;
+ anchors(i).u.c.a1 = 270.0;
+ anchors(i).u.c.radius = d*3/4;
+ anchors(i).color = wDrawColorPowderedBlue;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).width = d/4;
+ Translate(&anchors(i).u.l.pos[0],pos,180.0,d*3/4);
+ Translate(&anchors(i).u.l.pos[1],pos,180.0,d*1.5);
+ anchors(i).color = wDrawColorPowderedBlue;
+ }
+}
+
+void CreateActivateAnchor(coOrd pos) {
+ DIST_T d = tempD.scale*0.15;
+ coOrd c = pos;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = SEG_CRVLIN;
+ anchors(i).width = 0;
+ c.x -= d*3/4;
+ anchors(i).u.c.center = c;
+ anchors(i).u.c.a0 = 0.0;
+ anchors(i).u.c.a1 = 360.0;
+ anchors(i).u.c.radius = d;
+ anchors(i).color = wDrawColorPowderedBlue;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ i = anchors_da.cnt-1;
+ c.x += d*1.5;
+ anchors(i).type = SEG_CRVLIN;
+ anchors(i).width = 0;
+ anchors(i).u.c.center = pos;
+ anchors(i).u.c.a0 = 0.0;
+ anchors(i).u.c.a1 = 360.0;
+ anchors(i).u.c.radius = d;
+ anchors(i).color = wDrawColorPowderedBlue;
+}
+
+void static CreateMoveAnchor(coOrd pos) {
+ DYNARR_SET(trkSeg_t,anchors_da,anchors_da.cnt+5);
+ DrawArrowHeads(&DYNARR_N(trkSeg_t,anchors_da,anchors_da.cnt-5),pos,0,TRUE,wDrawColorBlue);
+ DYNARR_SET(trkSeg_t,anchors_da,anchors_da.cnt+5);
+ DrawArrowHeads(&DYNARR_N(trkSeg_t,anchors_da,anchors_da.cnt-5),pos,90,TRUE,wDrawColorBlue);
+}
+
+void CreateEndAnchor(coOrd p, wBool_t lock) {
+ DIST_T d = tempD.scale*0.15;
+
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = lock?SEG_FILCRCL:SEG_CRVLIN;
+ anchors(i).color = wDrawColorBlue;
+ anchors(i).u.c.center = p;
+ anchors(i).u.c.radius = d/2;
+ anchors(i).u.c.a0 = 0.0;
+ anchors(i).u.c.a1 = 360.0;
+ anchors(i).width = 0;
+}
+
+
/*****************************************************************************
*
@@ -122,6 +287,88 @@ static void DrawTrackAndEndPts(
}
+
+static void RedrawSelectedTracksBoundary()
+{
+/* Truth table: 4 cases for a track trk, connected to trk1
+ * SELREDRAW
+ * trk, trk1: F, F - No changes, nothing to draw
+ * T, F - trk changes but trk1 didn't, flip drawing of select boundary marker
+ * F, T - trk didn't change but trk1 did, handle redrawing when we get to 2nd track
+ * T, T - both changed, but we don't need to redraw anything
+ * unfortunately we will do a redundant redraw when we get to the 2nd track
+ */
+// if (importTrack != NULL)
+// return;
+ track_p trk;
+ TRK_ITERATE( trk ) {
+ if ( GetTrkBits(trk) & TB_SELREDRAW ) {
+ // This track has changed
+ for ( EPINX_T ep = 0; ep < GetTrkEndPtCnt(trk); ep++ ) {
+ track_p trk1 = GetTrkEndTrk( trk, ep );
+ if ( trk1 == NULL )
+ continue;
+
+// if ( GetTrkIndex( trk ) < GetTrkIndex( trk1 )
+// continue;
+ if ( ( GetTrkBits(trk1) & TB_SELREDRAW ) == 0 ) {
+ // Connected track hasn't changed
+ wDrawColor color = selectedColor;
+ if ( ( GetTrkBits(trk) & TB_SELECTED ) == ( GetTrkBits(trk1) & TB_SELECTED ) ) {
+ // There was a select boundary here, but not now.
+ // Undraw old X
+ color = wDrawColorWhite;
+ }
+ DIST_T len;
+ coOrd p = GetTrkEndPos( trk, ep );
+ ANGLE_T a = GetTrkEndAngle( trk, ep );
+ coOrd p0, p1, p2;
+ len = GetTrkGauge(trk)*2.0;
+ if (len < 0.10*mainD.scale)
+ len = 0.10*mainD.scale;
+ Translate( &p1, p, a+45, len );
+ Translate( &p2, p, a+225, len );
+ DrawLine( &mainD, p1, p2, 2, color );
+ Translate( &p1, p, a-45, len );
+ Translate( &p2, p, a-225, len );
+ DrawLine( &mainD, p1, p2, 2, color );
+ if ( color == wDrawColorWhite ) {
+ // Fill in holes by undraw cross
+ DIST_T len2 = sqrt( GetTrkGauge(trk)*GetTrkGauge(trk)/2.0 );
+ DIST_T len3 = 0.1*mainD.scale;
+ color = GetTrkColor( trk, &mainD );
+ if ( mainD.scale < twoRailScale ) {
+ Translate( &p0, p, a-225, len2 );
+ Translate( &p1, p0, a, len3 );
+ Translate( &p2, p0, a+180, len3 );
+ DrawLine( &mainD, p1, p2, GetTrkWidth(trk), color );
+ Translate( &p0, p, a+225, len2 );
+ Translate( &p1, p0, a, len3 );
+ Translate( &p2, p0, a+180, len3 );
+ DrawLine( &mainD, p1, p2, GetTrkWidth(trk), color );
+ color = GetTrkColor( trk1, &mainD );
+ Translate( &p0, p, a-45, len2 );
+ Translate( &p1, p0, a, len3 );
+ Translate( &p2, p0, a+180, len3 );
+ DrawLine( &mainD, p1, p2, GetTrkWidth(trk1), color );
+ Translate( &p0, p, a+45, len2 );
+ Translate( &p1, p0, a, len3 );
+ Translate( &p2, p0, a+180, len3 );
+ DrawLine( &mainD, p1, p2, GetTrkWidth(trk1), color );
+ } else {
+ Translate( &p1, p, a, len3 );
+ Translate( &p2, p, a+180, len3 );
+ DrawLine( &mainD, p1, p2, GetTrkWidth(trk), color );
+ }
+ }
+ }
+ }
+ ClrTrkBits( trk, TB_SELREDRAW );
+ }
+ }
+}
+
+
EXPORT void SetAllTrackSelect( BOOL_T select )
{
track_p trk;
@@ -139,27 +386,26 @@ EXPORT void SetAllTrackSelect( BOOL_T select )
if (select)
selectedTrackCount++;
if ((GetTrkSelected(trk)!=0) != select) {
- if (!doRedraw)
- DrawTrackAndEndPts( trk, wDrawColorWhite );
if (select)
SetTrkBits( trk, TB_SELECTED );
else
ClrTrkBits( trk, TB_SELECTED );
if (!doRedraw)
+ SetTrkBits( trk, TB_SELREDRAW );
DrawTrackAndEndPts( trk, wDrawColorBlack );
}
}
}
SelectedTrackCountChange();
if (doRedraw) {
- MainRedraw();
- MapRedraw();
+ MainRedraw(); // SetAllTrackSelect
} else {
+ RedrawSelectedTracksBoundary();
wDrawDelayUpdate( mainD.d, FALSE );
}
}
-/* Invert selected state of all visible objects.
+/* Invert selected state of all visible non-module objects.
*
* \param none
* \return none
@@ -171,21 +417,15 @@ EXPORT void InvertTrackSelect( void *ptr )
trk = NULL;
while ( TrackIterate( &trk ) ) {
- if (GetLayerVisible( GetTrkLayer( trk ))) {
- if (GetTrkSelected(trk))
- {
- ClrTrkBits( trk, TB_SELECTED );
- selectedTrackCount--;
- }
- else
- SetTrkBits( trk, TB_SELECTED );
- selectedTrackCount++;
+ if (GetLayerVisible( GetTrkLayer( trk )) &&
+ !GetLayerModule(GetTrkLayer( trk ))) {
+ SelectOneTrack( trk, GetTrkSelected(trk)==0 );
}
}
+ RedrawSelectedTracksBoundary();
SelectedTrackCountChange();
- MainRedraw();
- MapRedraw();
+ MainRedraw(); // InvertTrackSelect
}
/* Select orphaned (ie single) track pieces.
@@ -204,7 +444,7 @@ EXPORT void OrphanedTrackSelect( void *ptr )
while( TrackIterate( &trk ) ) {
cnt = 0;
- if( GetLayerVisible( GetTrkLayer( trk ))) {
+ if( GetLayerVisible( GetTrkLayer( trk ) && !GetLayerModule(GetTrkLayer(trk)))) {
for( ep = 0; ep < GetTrkEndPtCnt( trk ); ep++ ) {
if( GetTrkEndTrk( trk, ep ) )
cnt++;
@@ -217,17 +457,21 @@ EXPORT void OrphanedTrackSelect( void *ptr )
}
}
}
+ RedrawSelectedTracksBoundary();
SelectedTrackCountChange();
- MainRedraw();
- MapRedraw();
+ MainRedraw(); // OrphanTrackSelect
}
-
static void SelectOneTrack(
track_p trk,
wBool_t selected )
{
- DrawTrackAndEndPts( trk, wDrawColorWhite );
+ BOOL_T bRedraw = (GetTrkSelected(trk) != 0) != selected;
+ if ( !bRedraw ) {
+ ClrTrkBits( trk, TB_SELREDRAW );
+ return;
+ }
+ SetTrkBits( trk, TB_SELREDRAW );
if (selected) {
SetTrkBits( trk, TB_SELECTED );
selectedTrackCount++;
@@ -240,8 +484,27 @@ static void SelectOneTrack(
}
+static void HighlightSelectedTracks(
+ track_p trk_ignore, BOOL_T box, BOOL_T invert )
+{
+ track_p trk = NULL;
+ if ( selectedTrackCount == 0 )
+ return;
+ while ( TrackIterate( &trk ) ) {
+ if (trk == trk_ignore) continue;
+ if(GetTrkSelected(trk)) {
+ if (!GetLayerVisible( GetTrkLayer( trk ))) continue;
+ if (invert)
+ DrawTrack(trk,&tempD,wDrawColorPreviewUnselected);
+ else
+ DrawTrack(trk,&tempD,wDrawColorPreviewSelected );
+ }
+ }
+
+}
+
static void SelectConnectedTracks(
- track_p trk )
+ track_p trk, BOOL_T display_only )
{
track_p trk1;
int inx;
@@ -249,32 +512,65 @@ static void SelectConnectedTracks(
tlist_da.cnt = 0;
TlistAppend( trk );
InfoCount( 0 );
- wDrawDelayUpdate( mainD.d, FALSE );
+ if (!display_only) wDrawDelayUpdate( mainD.d, FALSE );
for (inx=0; inx<tlist_da.cnt; inx++) {
- if ( inx > 0 && selectedTrackCount == 0 )
+ if ( inx > 0 && (selectedTrackCount == 0) && !display_only )
return;
trk = Tlist(inx);
if (inx!=0 &&
- GetTrkSelected(trk))
+ GetTrkSelected(trk)) {
+ if (display_only)
+ DrawTrack(trk,&tempD,wDrawColorPreviewSelected );
continue;
+ } else if (GetTrkSelected(trk)) {
+ if (display_only)
+ DrawTrack(trk,&tempD,wDrawColorPreviewUnselected);
+ continue;
+ }
for (ep=0; ep<GetTrkEndPtCnt(trk); ep++) {
trk1 = GetTrkEndTrk( trk, ep );
- if (trk1 && (!GetTrkSelected(trk1)) && GetLayerVisible( GetTrkLayer( trk1 )) ) {
- TlistAppend( trk1 )
+ if (trk1 && !TListSearch(trk1) && GetLayerVisible( GetTrkLayer( trk1 ))) {
+ if (GetTrkSelected(trk1)) {
+ if (display_only) DrawTrack(trk1,&tempD,wDrawColorPreviewSelected );
+ } else TlistAppend( trk1 );
}
}
- if (!GetTrkSelected(trk)) {
- SelectOneTrack( trk, TRUE );
- InfoCount( inx+1 );
+ if (display_only) DrawTrack(trk,&tempD,wDrawColorPreviewSelected );
+ else if (!GetTrkSelected(trk)) {
+ if (GetLayerModule(GetTrkLayer(trk))) {
+ continue;
+ } else {
+ SelectOneTrack( trk, TRUE );
+ InfoCount( inx+1 );
+ }
}
- SetTrkBits(trk, TB_SELECTED);
}
- wDrawDelayUpdate( mainD.d, TRUE );
- wFlush();
- InfoCount( trackCount );
+ if (!display_only) {
+ RedrawSelectedTracksBoundary();
+ wDrawDelayUpdate( mainD.d, TRUE );
+ wFlush();
+ InfoCount( trackCount );
+ }
}
+typedef void (*doModuleTrackCallBack_t)(track_p, BOOL_T);
+static int DoModuleTracks( int moduleLayer, doModuleTrackCallBack_t doit, BOOL_T val)
+{
+ track_p trk;
+ trk = NULL;
+ int cnt = 0;
+ while ( TrackIterate( &trk ) ) {
+ if (GetTrkLayer(trk) == moduleLayer) {
+ doit( trk, val );
+ cnt++;
+ }
+ }
+ return cnt;
+}
+static void DrawSingleTrack(track_p trk, BOOL_T bit) {
+ DrawTrack(trk,&tempD,bit?wDrawColorPreviewSelected:wDrawColorPreviewUnselected);
+}
typedef BOOL_T (*doSelectedTrackCallBack_t)(track_p, BOOL_T);
static void DoSelectedTracks( doSelectedTrackCallBack_t doit )
@@ -331,9 +627,41 @@ EXPORT void SelectTrackWidth( void* width )
UndoEnd();
}
+EXPORT void SelectLineType( void* width )
+{
+ track_p trk;
+ if (SelectedTracksAreFrozen())
+ return;
+ if (selectedTrackCount<=0) {
+ ErrorMessage( MSG_NO_SELECTED_TRK );
+ return;
+ }
+ UndoStart( _("Change Line Type"), "linetype" );
+ trk = NULL;
+ wDrawDelayUpdate( mainD.d, TRUE );
+ while ( TrackIterate( &trk ) ) {
+ if (GetTrkSelected(trk)) {
+ UndoModify( trk );
+ if (QueryTrack(trk, Q_CAN_MODIFY_CONTROL_POINTS))
+ SetBezierLineType(trk, (int) (long) width);
+ else if (QueryTrack(trk, Q_IS_DRAW))
+ SetLineType( trk, (int)(long)width );
+ else if (QueryTrack(trk, Q_IS_STRUCTURE)) {
+ SetCompoundLineType(trk, (int)(long)width);
+ }
+ }
+ }
+ wDrawDelayUpdate( mainD.d, FALSE );
+ UndoEnd();
+}
+
+static BOOL_T doingDouble;
EXPORT void SelectDelete( void )
{
+ if (GetCurrentCommand() != selectCmdInx) return;
+ if (doingDouble) return;
+
if (SelectedTracksAreFrozen())
return;
if (selectedTrackCount>0) {
@@ -341,6 +669,7 @@ EXPORT void SelectDelete( void )
wDrawDelayUpdate( mainD.d, TRUE );
wDrawDelayUpdate( mapD.d, TRUE );
DoSelectedTracks( DeleteTrack );
+ DoRedraw(); // SelectDelete
wDrawDelayUpdate( mainD.d, FALSE );
wDrawDelayUpdate( mapD.d, FALSE );
selectedTrackCount = 0;
@@ -368,8 +697,10 @@ static BOOL_T FlipHidden( track_p trk, BOOL_T junk )
if ( drawTunnel == 0 )
flipHiddenDoSelectRecount = TRUE;
if (GetTrkVisible(trk)) {
- ClrTrkBits( trk, TB_VISIBLE|(drawTunnel==0?TB_SELECTED:0) );
- } else {
+ ClrTrkBits( trk, TB_VISIBLE|(drawTunnel==0?(TB_SELECTED|TB_SELREDRAW):0) );
+ ClrTrkBits (trk, TB_BRIDGE);
+ ClrTrkBits (trk, TB_NOTIES);
+; } else {
SetTrkBits( trk, TB_VISIBLE );
}
/*DrawNewTrack( trk );*/
@@ -382,6 +713,29 @@ static BOOL_T FlipHidden( track_p trk, BOOL_T junk )
return TRUE;
}
+static BOOL_T FlipBridge( track_p trk, BOOL_T junk )
+{
+ UndoModify( trk );
+ if (GetTrkBridge(trk)) {
+ ClrTrkBits( trk, TB_BRIDGE );
+ } else {
+ SetTrkBits( trk, TB_BRIDGE );
+ SetTrkBits( trk, TB_VISIBLE);
+ }
+ return TRUE;
+}
+
+static BOOL_T FlipTies( track_p trk, BOOL_T junk )
+{
+ UndoModify( trk );
+ if (GetTrkNoTies(trk)) {
+ ClrTrkBits( trk, TB_NOTIES );
+ } else {
+ SetTrkBits( trk, TB_NOTIES );
+ SetTrkBits( trk, TB_VISIBLE );
+ }
+ return TRUE;
+}
EXPORT void SelectTunnel( void )
{
@@ -401,6 +755,39 @@ EXPORT void SelectTunnel( void )
SelectRecount();
}
+EXPORT void SelectBridge( void )
+{
+ if (SelectedTracksAreFrozen())
+ return;
+ if (selectedTrackCount>0) {
+ flipHiddenDoSelectRecount = FALSE;
+ UndoStart( _("Bridge Tracks "), "bridge" );
+ wDrawDelayUpdate( mainD.d, TRUE );
+ DoSelectedTracks( FlipBridge );
+ wDrawDelayUpdate( mainD.d, FALSE );
+ UndoEnd();
+ } else {
+ ErrorMessage( MSG_NO_SELECTED_TRK );
+ }
+ MainRedraw(); // SelectBridge
+}
+
+EXPORT void SelectTies( void )
+{
+ if (SelectedTracksAreFrozen())
+ return;
+ if (selectedTrackCount>0) {
+ flipHiddenDoSelectRecount = FALSE;
+ UndoStart( _("Ties Tracks "), "noties" );
+ wDrawDelayUpdate( mainD.d, TRUE );
+ DoSelectedTracks( FlipTies );
+ wDrawDelayUpdate( mainD.d, FALSE );
+ UndoEnd();
+ } else {
+ ErrorMessage( MSG_NO_SELECTED_TRK );
+ }
+ MainRedraw(); // SelectTies
+}
void SelectRecount( void )
{
@@ -445,6 +832,7 @@ EXPORT void SelectCurrentLayer( void )
SelectOneTrack( trk, TRUE );
}
}
+ RedrawSelectedTracksBoundary();
}
@@ -530,8 +918,7 @@ EXPORT void DoRefreshCompound( void )
DoSelectedTracks( RefreshCompound );
RefreshCompound( NULL, FALSE );
UndoEnd();
- MainRedraw();
- MapRedraw();
+ MainRedraw(); // DoRefreshCompound
} else {
ErrorMessage( MSG_NO_SELECTED_TRK );
}
@@ -539,15 +926,12 @@ EXPORT void DoRefreshCompound( void )
static drawCmd_t tempSegsD = {
- NULL, &tempSegDrawFuncs, DC_GROUP, 1, 0.0, {0.0, 0.0}, {0.0, 0.0}, Pix2CoOrd, CoOrd2Pix };
+ NULL, &tempSegDrawFuncs, 0, 1, 0.0, {0.0, 0.0}, {0.0, 0.0}, Pix2CoOrd, CoOrd2Pix };
EXPORT void WriteSelectedTracksToTempSegs( void )
{
track_p trk;
- long oldOptions;
DYNARR_RESET( trkSeg_t, tempSegs_da );
tempSegsD.dpi = mainD.dpi;
- oldOptions = tempSegDrawFuncs.options;
- tempSegDrawFuncs.options = wDrawOptTemp;
for ( trk=NULL; TrackIterate(&trk); ) {
if ( GetTrkSelected( trk ) ) {
if ( IsTrack( trk ) )
@@ -557,7 +941,6 @@ EXPORT void WriteSelectedTracksToTempSegs( void )
SetTrkBits( trk, TB_SELECTED );
}
}
- tempSegDrawFuncs.options = oldOptions;
}
static char rescaleFromScale[20];
@@ -619,6 +1002,7 @@ static BOOL_T RescaleDoIt( track_p trk, BOOL_T junk )
{
EPINX_T ep, ep1;
track_p trk1;
+ UndrawNewTrack( trk );
UndoModify(trk);
if ( rescalePercent != 100.0 ) {
for (ep=0; ep<GetTrkEndPtCnt(trk); ep++) {
@@ -636,6 +1020,7 @@ static BOOL_T RescaleDoIt( track_p trk, BOOL_T junk )
if ( rescaleMode==0 )
SetTrkScale( trk, rescaleToInx );
getboundsCount++;
+ DrawNewTrack( trk );
return TRUE;
}
@@ -688,7 +1073,6 @@ static void RescaleDlgOk(
rescaleToInx = GetScaleInx( rescaleToScaleInx, rescaleToGaugeInx );
DoSelectedTracks( RescaleDoIt );
- DoRedraw();
wHide( rescalePG.win );
}
@@ -799,38 +1183,6 @@ EXPORT void DoRescale( void )
wShow( rescalePG.win );
}
-
-
-#define MOVE_NORMAL (0)
-#define MOVE_FAST (1)
-#define MOVE_QUICK (2)
-static char *quickMoveMsgs[] = {
- N_("Draw moving track normally"),
- N_("Draw moving track simply"),
- N_("Draw moving track as end-points") };
-static wMenuToggle_p quickMove1M[3];
-static wMenuToggle_p quickMove2M[3];
-
-static void ChangeQuickMove( wBool_t set, void * mode )
-{
- long inx;
- quickMove = (long)mode;
- InfoMessage( quickMoveMsgs[quickMove] );
- DoChangeNotification( CHANGE_CMDOPT );
- for (inx = 0; inx<3; inx++) {
- wMenuToggleSet( quickMove1M[inx], quickMove == inx );
- wMenuToggleSet( quickMove2M[inx], quickMove == inx );
- }
-}
-
-EXPORT void UpdateQuickMove( void * junk )
-{
- long inx;
- for (inx = 0; inx<3; inx++) {
- wMenuToggleSet( quickMove1M[inx], quickMove == inx );
- wMenuToggleSet( quickMove2M[inx], quickMove == inx );
- }
-}
static void DrawSelectedTracksD( drawCmd_p d, wDrawColor color )
@@ -846,7 +1198,11 @@ static void DrawSelectedTracksD( drawCmd_p d, wDrawColor color )
if ( OFF_D( d->orig, d->size, lo, hi ) )
continue;
}
+ if (color != wDrawColorWhite)
+ ClrTrkBits(trk, TB_UNDRAWN);
DrawTrack( trk, d, color );
+ if (color == wDrawColorWhite)
+ SetTrkBits( trk, TB_UNDRAWN );
}
/*wDrawDelayUpdate( d->d, FALSE );*/
}
@@ -865,7 +1221,7 @@ static ANGLE_T moveAngle;
static coOrd moveD_hi, moveD_lo;
static drawCmd_t moveD = {
- NULL, &tempDrawFuncs, DC_SIMPLE, 1, 0.0, {0.0, 0.0}, {0.0, 0.0}, Pix2CoOrd, CoOrd2Pix };
+ NULL, &tempSegDrawFuncs, DC_SIMPLE, 1, 0.0, {0.0, 0.0}, {0.0, 0.0}, Pix2CoOrd, CoOrd2Pix };
@@ -884,61 +1240,56 @@ static void AccumulateTracks( void )
coOrd lo, hi;
/*wDrawDelayUpdate( moveD.d, TRUE );*/
- if (quickMove == MOVE_FAST)
- moveD.options |= DC_QUICK;
- for ( inx = 0; inx<tlist_da.cnt; inx++ ) {
- trk = tlist2[inx];
- if (trk) {
- GetBoundingBox( trk, &hi, &lo );
- if (lo.x <= moveD_hi.x && hi.x >= moveD_lo.x &&
- lo.y <= moveD_hi.y && hi.y >= moveD_lo.y ) {
- if (quickMove != MOVE_QUICK) {
-#if defined(WINDOWS) && ! defined(WIN32)
- if ( tempSegs_da.cnt+100 > 65500 / sizeof(*(trkSeg_p)NULL) ) {
- ErrorMessage( MSG_TOO_MANY_SEL_TRKS );
-
- quickMove = MOVE_QUICK;
- } else
-#endif
- DrawTrack( trk, &moveD, wDrawColorBlack );
- }
- tlist2[inx] = NULL;
- movedCnt++;
+ movedCnt =0;
+ for ( inx = 0; inx<tlist_da.cnt; inx++ ) {
+ trk = Tlist(inx);
+ if (trk) {
+ GetBoundingBox( trk, &hi, &lo );
+ if (lo.x <= moveD_hi.x && hi.x >= moveD_lo.x &&
+ lo.y <= moveD_hi.y && hi.y >= moveD_lo.y ) {
+ if (!QueryTrack(trk,Q_IS_CORNU))
+ DrawTrack( trk, &moveD, wDrawColorBlack );
}
+ movedCnt++;
}
- }
- moveD.options &= ~DC_QUICK;
+ }
InfoCount( movedCnt );
/*wDrawDelayUpdate( moveD.d, FALSE );*/
}
+static void AddEndCornus() {
+ for (int i=0;i<tlist_da.cnt;i++) {
+ track_p trk = DYNARR_N(track_p,tlist_da,i);
+ track_p tc;
+ for (int j=GetTrkEndPtCnt(trk)-1;j>=0;j--) {
+ tc = GetTrkEndTrk(trk,j);
+ if (tc && !GetTrkSelected(tc) && QueryTrack(tc,Q_IS_CORNU) && !QueryTrack(trk,Q_IS_CORNU)) { //On end and cornu
+ SelectOneTrack( tc, TRUE );
+ DYNARR_APPEND(track_p,tlist_da,1); //Add to selected list
+ DYNARR_LAST(track_p,tlist_da) = tc;
+ }
+ }
+ }
+}
+
static void GetMovedTracks( BOOL_T undraw )
{
- wSetCursor( wCursorWait );
+ wSetCursor( mainD.d, wCursorWait );
DYNARR_RESET( track_p, tlist_da );
DoSelectedTracks( AddSelectedTrack );
- tlist2 = (track_p*)MyRealloc( tlist2, (tlist_da.cnt+1) * sizeof *(track_p*)0 );
- if (tlist_da.ptr)
- memcpy( tlist2, tlist_da.ptr, (tlist_da.cnt) * sizeof *(track_p*)0 );
- tlist2[tlist_da.cnt] = NULL;
+ AddEndCornus(); //Include Cornus that are attached at ends of selected
DYNARR_RESET( trkSeg_p, tempSegs_da );
- moveD = mainD;
- moveD.funcs = &tempSegDrawFuncs;
- moveD.options = DC_SIMPLE;
- tempSegDrawFuncs.options = wDrawOptTemp;
moveOrig = mainD.orig;
movedCnt = 0;
InfoCount(0);
- wSetCursor( wCursorNormal );
+ wSetCursor( mainD.d, defaultCursor );
moveD_hi = moveD_lo = mainD.orig;
moveD_hi.x += mainD.size.x;
moveD_hi.y += mainD.size.y;
AccumulateTracks();
if (undraw) {
DrawSelectedTracksD( &mainD, wDrawColorWhite );
- /*DrawSegs( &mainD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt,
- trackGauge, wDrawColorBlack );*/
}
}
@@ -989,48 +1340,50 @@ static void DrawMovedTracks( void )
{
int inx;
track_p trk;
- track_p other;
- EPINX_T i;
- coOrd pos;
- wDrawBitMap_p bm;
- ANGLE_T a;
- int ia;
-
- if ( quickMove != MOVE_QUICK) {
- DrawSegs( &tempD, moveOrig, moveAngle, &tempSegs(0), tempSegs_da.cnt,
- 0.0, wDrawColorBlack );
- return;
- }
+ dynArr_t cornu_segs;
+
+ DrawSegs( &tempD, moveOrig, moveAngle, &tempSegs(0), tempSegs_da.cnt,
+ 0.0, wDrawColorBlack );
+
for ( inx=0; inx<tlist_da.cnt; inx++ ) {
trk = Tlist(inx);
- if (tlist2[inx] != NULL)
- continue;
- for (i=GetTrkEndPtCnt(trk)-1; i>=0; i--) {
- pos = GetTrkEndPos(trk,i);
- if (!move0B) {
- Rotate( &pos, zero, moveAngle );
- }
- pos.x += moveOrig.x;
- pos.y += moveOrig.y;
- if ((other=GetTrkEndTrk(trk,i)) == NULL ||
- !GetTrkSelected(other)) {
- bm = endpt_bm;
- } else if (other != NULL && GetTrkIndex(trk) < GetTrkIndex(other)) {
- a = GetTrkEndAngle(trk,i)+22.5;
- if (!move0B)
- a += moveAngle;
- a = NormalizeAngle( a );
- if (a>=180.0)
- a -= 180.0;
- ia = (int)(a/45.0);
- bm = angle_bm[ia];
- } else {
- continue;
+ if (QueryTrack(trk,Q_IS_CORNU)) {
+ DYNARR_RESET(trkSeg_t,cornu_segs);
+ coOrd pos[2];
+ DIST_T radius[2];
+ ANGLE_T angle[2];
+ coOrd center[2];
+ trackParams_t trackParams;
+ if (GetTrackParams(PARAMS_CORNU, trk, zero, &trackParams)) {
+ for (int i=0;i<2;i++) {
+ pos[i] = trackParams.cornuEnd[i];
+ center[i] = trackParams.cornuCenter[i];
+ angle[i] = trackParams.cornuAngle[i];
+ radius[i] = trackParams.cornuRadius[i];
+ if (!GetTrkEndTrk(trk,i) ||
+ (GetTrkEndTrk(trk,i) && GetTrkSelected(GetTrkEndTrk(trk,i)))) {
+ if (!move0B) {
+ Rotate( &pos[i], zero, moveAngle );
+ Rotate( &center[i],zero, moveAngle );
+ angle[i] = NormalizeAngle(angle[i]+moveAngle);
+ }
+ pos[i].x += moveOrig.x;
+ pos[i].y += moveOrig.y;
+ center[i].x +=moveOrig.x;
+ center[i].y +=moveOrig.y;
+ }
+ }
+ CallCornu0(&pos[0],&center[0],&angle[0],&radius[0],&cornu_segs, FALSE);
+ trkSeg_p cornu_p = &DYNARR_N(trkSeg_t,cornu_segs,0);
+
+ DrawSegsO(&tempD, trk, zero, 0.0, cornu_p,cornu_segs.cnt,
+ GetTrkGauge(trk), wDrawColorBlack, DTS_LEFT|DTS_RIGHT );
}
- if ( !OFF_MAIND( pos, pos ) )
- DrawBitMap( &tempD, pos, bm, selectedColor );
+
}
+
}
+ return;
}
@@ -1041,7 +1394,8 @@ static void MoveTracks(
BOOL_T rotate,
coOrd base,
coOrd orig,
- ANGLE_T angle )
+ ANGLE_T angle,
+ BOOL_T undo)
{
track_p trk, trk1;
EPINX_T ep, ep1;
@@ -1051,48 +1405,47 @@ static void MoveTracks(
DIST_T endRadius;
coOrd endCenter;
- wSetCursor( wCursorWait );
+ wSetCursor( mainD.d, wCursorWait );
/*UndoStart( "Move/Rotate Tracks", "move/rotate" );*/
if (tlist_da.cnt <= incrementalDrawLimit) {
- DrawMapBoundingBox( FALSE );
- if (eraseFirst)
+ if (eraseFirst) {
DrawSelectedTracksD( &mainD, wDrawColorWhite );
- DrawSelectedTracksD( &mapD, wDrawColorWhite );
+ DrawSelectedTracksD( &mapD, wDrawColorWhite );
+ }
}
for ( inx=0; inx<tlist_da.cnt; inx++ ) {
trk = Tlist(inx);
UndoModify( trk );
- if (move)
- MoveTrack( trk, base );
- if (rotate)
- RotateTrack( trk, orig, angle );
- for (ep=0; ep<GetTrkEndPtCnt(trk); ep++) {
- if ((trk1 = GetTrkEndTrk(trk,ep)) != NULL &&
- !GetTrkSelected(trk1)) {
- ep1 = GetEndPtConnectedToMe( trk1, trk );
- DisconnectTracks( trk, ep, trk1, ep1 );
- if (QueryTrack(trk1,Q_IS_CORNU)) { //Cornu at end stays connected
- GetTrackParams(PARAMS_CORNU,trk,GetTrkEndPos(trk,ep),&trackParms);
- if (trackParms.type == curveTypeStraight) {
- endRadius = 0;
- endCenter = zero;
- } else {
- endRadius = trackParms.arcR;
- endCenter = trackParms.arcP;
- }
- DrawTrack(trk1,&mainD,wDrawColorWhite);
- DrawTrack(trk1,&mapD,wDrawColorWhite);
- endAngle = NormalizeAngle(GetTrkEndAngle(trk,ep)+180);
- if (SetCornuEndPt(trk1,ep1,GetTrkEndPos(trk,ep),endCenter,endAngle,endRadius)) {
- ConnectTracks(trk,ep,trk1,ep1);
- DrawTrack(trk1,&mainD,wDrawColorBlack);
- DrawTrack(trk1,&mapD,wDrawColorBlack);
- } else {
- DeleteTrack(trk1,TRUE);
- ErrorMessage(_("Cornu too tight - it was deleted"));
- }
- } else {
- if (QueryTrack(trk,Q_IS_CORNU)) { //I am a Cornu myself!
+ BOOL_T fixed_end;
+ fixed_end = FALSE;
+ if (QueryTrack(trk, Q_IS_CORNU)) {
+ for (int i=0;i<2;i++) {
+ track_p te;
+ if ((te = GetTrkEndTrk(trk,i)) && !GetTrkSelected(te)) {
+ fixed_end = TRUE;
+ }
+ }
+ }
+
+ if (!fixed_end) {
+ if (move)
+ MoveTrack( trk, base );
+ if (rotate)
+ RotateTrack( trk, orig, angle );
+ for (ep=0; ep<GetTrkEndPtCnt(trk); ep++) {
+ if ((trk1 = GetTrkEndTrk(trk,ep)) != NULL &&
+ !GetTrkSelected(trk1)) {
+ ep1 = GetEndPtConnectedToMe( trk1, trk );
+ DisconnectTracks( trk, ep, trk1, ep1 );
+ DrawEndPt( &mainD, trk1, ep1, wDrawColorBlack );
+ }
+ }
+ } else {
+ if (QueryTrack(trk, Q_IS_CORNU)) { //Cornu will be at the end of selected set
+ for (int i=0;i<2;i++) {
+ if ((trk1 = GetTrkEndTrk(trk,i)) && GetTrkSelected(trk1)) {
+ ep1 = GetEndPtConnectedToMe( trk1, trk );
+ DisconnectTracks(trk,i,trk1,ep1);
GetTrackParams(PARAMS_CORNU,trk1,GetTrkEndPos(trk1,ep1),&trackParms);
if (trackParms.type == curveTypeStraight) {
endRadius = 0;
@@ -1102,39 +1455,55 @@ static void MoveTracks(
endCenter = trackParms.arcP;
}
DrawTrack(trk,&mainD,wDrawColorWhite);
- DrawTrack(trk1,&mapD,wDrawColorWhite);
+ DrawTrack(trk,&mapD,wDrawColorWhite);
endAngle = NormalizeAngle(GetTrkEndAngle(trk1,ep1)+180);
- if (SetCornuEndPt(trk,ep,GetTrkEndPos(trk1,ep1),endCenter,endAngle,endRadius)) {
- ConnectTracks(trk,ep,trk1,ep1);
+ if (SetCornuEndPt(trk,i,GetTrkEndPos(trk1,ep1),endCenter,endAngle,endRadius)) {
+ ConnectTracks(trk,i,trk1,ep1);
DrawTrack(trk,&mainD,wDrawColorBlack);
DrawTrack(trk,&mapD,wDrawColorBlack);
} else {
- ErrorMessage(_("Cornu selected too tight after move - it was left alone"));
- DrawTrack(trk,&mainD,wDrawColorBlack);
- DrawTrack(trk,&mapD,wDrawColorBlack);
+ DeleteTrack(trk,TRUE);
+ ErrorMessage(_("Cornu too tight - it was deleted"));
+ DoRedraw(); // MoveTracks: Cornu/delete
+ return;
+ }
+ } else if (!trk1) { //No end track
+ DrawTrack(trk,&mainD,wDrawColorWhite);
+ DrawTrack(trk,&mapD,wDrawColorWhite);
+ GetTrackParams(PARAMS_CORNU,trk,GetTrkEndPos(trk,i),&trackParms);
+ if (move) {
+ coOrd end_pos, end_center;
+ end_pos = trackParms.cornuEnd[i];
+ end_pos.x += base.x;
+ end_pos.y += base.y;
+ end_center = trackParms.cornuCenter[i];
+ end_center.x += base.x;
+ end_center.y += base.y;
+ SetCornuEndPt(trk,i,end_pos,end_center,trackParms.cornuAngle[i],trackParms.cornuRadius[i]);
+ }
+ if (rotate) {
+ coOrd end_pos, end_center;
+ ANGLE_T end_angle;
+ end_pos = trackParms.cornuEnd[i];
+ end_center = trackParms.cornuCenter[i];
+ Rotate(&end_pos, orig, angle);
+ Rotate(&end_center, orig, angle);
+ end_angle = NormalizeAngle( trackParms.cornuAngle[i] + angle );
+ SetCornuEndPt(trk,i,end_pos,end_center,end_angle,trackParms.cornuRadius[i]);
}
+ DrawTrack(trk,&mainD,wDrawColorBlack);
+ DrawTrack(trk,&mapD,wDrawColorBlack);
}
}
- DrawEndPt( &mainD, trk1, ep1, wDrawColorBlack );
}
- }
+ }
InfoCount( inx );
-#ifdef LATER
- if (tlist_da.cnt <= incrementalDrawLimit)
- DrawNewTrack( trk );
-#endif
- }
- if (tlist_da.cnt > incrementalDrawLimit) {
- DoRedraw();
- } else {
- DrawSelectedTracksD( &mainD, wDrawColorBlack );
- DrawSelectedTracksD( &mapD, wDrawColorBlack );
- DrawMapBoundingBox( TRUE );
}
- wSetCursor( wCursorNormal );
- UndoEnd();
- tempSegDrawFuncs.options = 0;
+ ClrAllTrkBits(TB_UNDRAWN);
+ DoRedraw();
+ wSetCursor( mainD.d, defaultCursor );
+ if (undo) UndoEnd();
InfoCount( trackCount );
}
@@ -1159,7 +1528,7 @@ void MoveToJoin(
angle += 180.0;
angle = NormalizeAngle( angle );
GetMovedTracks( FALSE );
- MoveTracks( TRUE, TRUE, TRUE, base, orig, angle );
+ MoveTracks( TRUE, TRUE, TRUE, base, orig, angle, TRUE );
UndrawNewTrack( trk0 );
UndrawNewTrack( trk1 );
ConnectTracks( trk0, ep0, trk1, ep1 );
@@ -1176,6 +1545,145 @@ void FreeTempStrings() {
}
}
}
+
+
+wBool_t FindEndIntersection(coOrd base, coOrd orig, ANGLE_T angle, track_p * t1, EPINX_T * ep1, track_p * t2, EPINX_T * ep2) {
+ *ep1 = -1;
+ *ep2 = -1;
+ *t1 = NULL;
+ *t2 = NULL;
+ for ( int inx=0; inx<tlist_da.cnt; inx++ ) { //All selected
+ track_p ts = Tlist(inx);
+ for (int i=0; i<GetTrkEndPtCnt(ts); i++) { //All EndPoints
+ track_p ct;
+ if ((ct = GetTrkEndTrk(ts,i))!=NULL) {
+ if (GetTrkSelected(ct) || QueryTrack(ts,Q_IS_CORNU)) continue; // Another selected track or Cornu - ignore
+ }
+
+ coOrd pos1 = GetTrkEndPos(ts,i);
+ if (angle != 0.0)
+ Rotate(&pos1,orig,angle);
+ else {
+ pos1.x +=base.x;
+ pos1.y +=base.y;
+ }
+ coOrd pos2;
+ pos2 = pos1;
+ track_p tt;
+ if ((tt=OnTrackIgnore(&pos2,FALSE,TRUE,ts))!=NULL) {
+ if (GetTrkGauge(ts) != GetTrkGauge(tt)) continue; //Ignore if different gauges
+ if (!GetTrkSelected(tt)) { //Ignore if new track is selected
+ EPINX_T epp = PickUnconnectedEndPointSilent(pos2, tt);
+ if (epp>=0) {
+ DIST_T d = FindDistance(pos1,GetTrkEndPos(tt,epp));
+ if (IsClose(d)) {
+ *ep1 = epp;
+ *ep2 = i;
+ *t1 = tt;
+ *t2 = ts;
+ return TRUE;
+ }
+ } else {
+ epp = PickEndPoint(pos2,tt); //Any close end point (even joined)
+ if (epp>=0) {
+ ct = GetTrkEndTrk(tt,epp);
+ if (ct && GetTrkSelected(ct)) { //Point is junction to selected track - so will be broken
+ DIST_T d = FindDistance(pos1,GetTrkEndPos(tt,epp));
+ if (IsClose(d)) {
+ *ep1 = epp;
+ *ep2 = i;
+ *t1 = tt;
+ *t2 = ts;
+ return TRUE;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return FALSE;
+}
+
+void DrawHighlightLayer(int layer) {
+ track_p ts = NULL;
+ BOOL_T initial = TRUE;
+ coOrd layer_hi = zero,layer_lo = zero;
+ while ( TrackIterate( &ts ) ) {
+ if ( !GetLayerVisible( GetTrkLayer( ts))) continue;
+ if (!GetTrkSelected(ts)) continue;
+ if (GetTrkLayer(ts) != layer) continue;
+ coOrd hi,lo;
+ GetBoundingBox(ts, &hi, &lo);
+ if (initial) {
+ layer_hi = hi;
+ layer_lo = lo;
+ initial = FALSE;
+ } else {
+ if (layer_hi.x < hi.x ) layer_hi.x = hi.x;
+ if (layer_hi.y < hi.y ) layer_hi.y = hi.y;
+ if (layer_lo.x > lo.x ) layer_lo.x = lo.x;
+ if (layer_lo.y > lo.y ) layer_lo.y = lo.y;
+ }
+ }
+ wPos_t margin = (wPos_t)(10.5*mainD.scale/mainD.dpi);
+ layer_hi.x +=margin;
+ layer_hi.y +=margin;
+ layer_lo.x -=margin;
+ layer_lo.y -=margin;
+
+ wPos_t rect[4][2];
+ int type[4];
+ coOrd top_left, bot_right;
+ top_left.x = layer_lo.x; top_left.y = layer_hi.y;
+ bot_right.x = layer_hi.x; bot_right.y = layer_lo.y;
+ type[0] = type[1] = type[2] = type[3] = 0;
+ mainD.CoOrd2Pix(&mainD,layer_lo,&rect[0][0],&rect[0][1]);
+ mainD.CoOrd2Pix(&mainD,top_left,&rect[1][0],&rect[1][1]);
+ mainD.CoOrd2Pix(&mainD,layer_hi,&rect[2][0],&rect[2][1]);
+ mainD.CoOrd2Pix(&mainD,bot_right,&rect[3][0],&rect[3][1]);
+ wDrawPolygon(tempD.d,rect,(wPolyLine_e *)type,4,wDrawColorPowderedBlue,0,wDrawLineDash,wDrawOptTemp,0,0);
+}
+
+void SetUpMenu2(coOrd pos, track_p trk) {
+ wMenuPushEnable( menuPushModify,FALSE);
+ wMenuPushEnable(descriptionMI,FALSE);
+ wMenuPushEnable( rotateAlignMI, FALSE );
+ wMenuPushEnable( hideMI, FALSE );
+ wMenuPushEnable( bridgeMI, FALSE );
+ wMenuPushEnable( tiesMI, FALSE );
+ if ((trk) &&
+ QueryTrack(trk,Q_CAN_ADD_ENDPOINTS)) { //Turntable snap to center if within 1/4 radius
+ trackParams_t trackParams;
+ if (GetTrackParams(PARAMS_CORNU, trk, pos, &trackParams)) {
+ DIST_T dist = FindDistance(pos, trackParams.ttcenter);
+ if (dist < trackParams.ttradius/4) {
+ cmdMenuPos = trackParams.ttcenter;
+ }
+ }
+ }
+ if (trk && !QueryTrack( trk, Q_IS_DRAW )) {
+ wMenuPushEnable( hideMI, TRUE );
+ wMenuPushEnable( bridgeMI, TRUE );
+ wMenuPushEnable( tiesMI, TRUE );
+ }
+ if (trk) {
+ wMenuPushEnable( menuPushModify,
+ (QueryTrack( trk, Q_CAN_MODIFY_CONTROL_POINTS ) ||
+ QueryTrack( trk, Q_IS_CORNU ) ||
+ (QueryTrack( trk, Q_IS_DRAW ) && !QueryTrack( trk, Q_IS_TEXT )) ||
+ QueryTrack( trk, Q_IS_ACTIVATEABLE)));
+ }
+ if ((trk)) {
+ wMenuPushEnable(descriptionMI, QueryTrack( trk, Q_HAS_DESC ));
+ moveDescTrk = trk;
+ moveDescPos = pos;
+ }
+ if (selectedTrackCount>0)
+ wMenuPushEnable( rotateAlignMI, TRUE );
+}
+
static STATUS_T CmdMove(
wAction_t action,
@@ -1185,9 +1693,16 @@ static STATUS_T CmdMove(
static coOrd orig;
static int state;
- switch( action&0xFF) {
+ static EPINX_T ep1;
+ static EPINX_T ep2;
+ static track_p t1;
+ static track_p t2;
+ static BOOL_T doingMove;
+
+ switch( action & 0xFF) {
case C_START:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if (selectedTrackCount == 0) {
ErrorMessage( MSG_NO_SELECTED_TRK );
return C_TERMINATE;
@@ -1197,63 +1712,123 @@ static STATUS_T CmdMove(
}
InfoMessage( _("Drag to move selected tracks - Shift+Ctrl+Arrow micro-steps the move") );
state = 0;
+ ep1 = -1;
+ ep2 = -1;
+ doingMove = FALSE;
+ break;
+
+ case wActionMove:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ CreateMoveAnchor(pos);
break;
case C_DOWN:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ if (doingMove) {
+ doingMove = FALSE;
+ UndoEnd();
+ }
+
if (SelectedTracksAreFrozen()) {
return C_TERMINATE;
}
UndoStart( _("Move Tracks"), "move" );
base = zero;
orig = pos;
- GetMovedTracks(quickMove != MOVE_QUICK);
+
+ GetMovedTracks(TRUE);
SetMoveD( TRUE, base, 0.0 );
- //DrawMovedTracks();
drawCount = 0;
state = 1;
- MainRedraw();
- MapRedraw();
return C_CONTINUE;
case C_MOVE:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ ep1=-1;
+ ep2=-1;
drawEnable = enableMoveDraw;
- //DrawMovedTracks();
base.x = pos.x - orig.x;
base.y = pos.y - orig.y;
SnapPos( &base );
SetMoveD( TRUE, base, 0.0 );
- //DrawMovedTracks();
+ if (((MyGetKeyState()&(WKEY_ALT)) == 0) == magneticSnap) { // ALT
+ if (FindEndIntersection(base,zero,0.0,&t1,&ep1,&t2,&ep2)) {
+ coOrd pos2 = GetTrkEndPos(t2,ep2);
+ pos2.x +=base.x;
+ pos2.y +=base.y;
+ CreateEndAnchor(pos2,FALSE);
+ CreateEndAnchor(GetTrkEndPos(t1,ep1),TRUE);
+ }
+ }
#ifdef DRAWCOUNT
InfoMessage( " [%s %s] #%ld", FormatDistance(base.x), FormatDistance(base.y), drawCount );
#else
InfoMessage( " [%s %s]", FormatDistance(base.x), FormatDistance(base.y) );
#endif
drawEnable = TRUE;
- MainRedraw();
- MapRedraw();
return C_CONTINUE;
case C_UP:
+ DYNARR_RESET(trkSeg_t,anchors_da);
state = 0;
- //DrawMovedTracks();
FreeTempStrings();
- MoveTracks( quickMove==MOVE_QUICK, TRUE, FALSE, base, zero, 0.0 );
+ if (t1 && ep1>=0 && t2 && ep2>=0) {
+ MoveToJoin(t2,ep2,t1,ep1);
+ } else {
+ MoveTracks( FALSE, TRUE, FALSE, base, zero, 0.0, TRUE );
+ }
+ ep1 = -1;
+ ep2 = -1;
+ tlist_da.cnt = 0;
return C_TERMINATE;
case C_CMDMENU:
- wMenuPopupShow( selectPopup1M );
+ if (doingMove) UndoEnd();
+ doingMove = FALSE;
+ base = pos;
+ track_p trk = OnTrack(&pos, FALSE, FALSE); //Note pollutes pos if turntable
+ if ((trk) &&
+ QueryTrack(trk,Q_CAN_ADD_ENDPOINTS)) { //Turntable snap to center if within 1/4 radius
+ trackParams_t trackParams;
+ if (GetTrackParams(PARAMS_CORNU, trk, pos, &trackParams)) {
+ DIST_T dist = FindDistance(base, trackParams.ttcenter);
+ if (dist < trackParams.ttradius/4) {
+ cmdMenuPos = trackParams.ttcenter;
+ }
+ }
+ }
+ moveDescPos = pos;
+ moveDescTrk = trk;
+ SetUpMenu2(pos,trk);
+ menuPos = pos;
+ wMenuPopupShow( selectPopup2M );
return C_CONTINUE;
+ case C_TEXT:
+ if ((action>>8) == 'c') {
+ panCenter = pos;
+ LOG( log_pan, 2, ( "PanCenter:Sel-%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ PanHere((void*)0);
+ }
+ if ((action>>8) == 'e') {
+ DoZoomExtents(0);
+ }
+ if ((action>>8) == '0' || (action>>8 == 'o')) {
+ PanMenuEnter('o');
+ }
+ break;
case C_REDRAW:
/* DO_REDRAW */
+ if (anchors_da.cnt)
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
if ( state == 0 )
break;
- DrawSelectedTracksD( &mainD, wDrawColorWhite );
DrawMovedTracks();
+
break;
case wActionExtKey:
if (state) return C_CONTINUE;
if (SelectedTracksAreFrozen()) return C_TERMINATE;
if ((MyGetKeyState() &
- (WKEY_SHIFT | WKEY_CTRL)) == (WKEY_SHIFT | WKEY_CTRL)) {
+ (WKEY_SHIFT | WKEY_CTRL)) == (WKEY_SHIFT | WKEY_CTRL)) { //Both
base = zero;
DIST_T w = tempD.scale/tempD.dpi;
switch((wAccelKey_e) action>>8) {
@@ -1275,21 +1850,35 @@ static STATUS_T CmdMove(
}
drawEnable = enableMoveDraw;
- GetMovedTracks(quickMove!=MOVE_QUICK);
- UndoStart( _("Move Tracks"), "move" );
+ GetMovedTracks(TRUE);
+ if (!doingMove) UndoStart( _("Move Tracks"), "move" );
+ doingMove = TRUE;
SetMoveD( TRUE, base, 0.0 );
- DrawSelectedTracksD( &mainD, wDrawColorWhite );
- MoveTracks( quickMove==MOVE_QUICK, TRUE, FALSE, base, zero, 0.0 );
+ MoveTracks( FALSE, TRUE, FALSE, base, zero, 0.0, FALSE );
++microCount;
if (microCount>5) {
microCount = 0;
- MainRedraw();
- MapRedraw();
+ MainRedraw(); // Micro step move
}
return C_CONTINUE;
}
break;
+ case C_FINISH:
+ if (doingMove) {
+ doingMove = FALSE;
+ UndoEnd();
+ }
+ tlist_da.cnt = 0;
+ break;
+ case C_CONFIRM:
+ case C_CANCEL:
+ if (doingMove) {
+ doingMove = FALSE;
+ UndoUndo();
+ }
+ tlist_da.cnt = 0;
+ break;
default:
break;
}
@@ -1297,13 +1886,18 @@ static STATUS_T CmdMove(
}
-wMenuPush_p rotateAlignMI;
-int rotateAlignState = 0;
-static void RotateAlign( void )
+static int rotateAlignState = 0;
+
+static void RotateAlign( BOOL_T align )
{
- rotateAlignState = 1;
- InfoMessage( _("Click on selected object to align") );
+ rotateAlignState = 0;
+ if (align) {
+ rotateAlignState = 1;
+ doingAlign = TRUE;
+ mode = MOVE;
+ InfoMessage( _("Align: Click on a selected object to be aligned") );
+ }
}
static STATUS_T CmdRotate(
@@ -1311,18 +1905,27 @@ static STATUS_T CmdRotate(
coOrd pos )
{
static coOrd base;
+ static coOrd orig_base;
static coOrd orig;
static ANGLE_T angle;
static BOOL_T drawnAngle;
static ANGLE_T baseAngle;
+ static BOOL_T clockwise;
+ static BOOL_T direction_set;
static track_p trk;
ANGLE_T angle1;
coOrd pos1;
static int state;
+ static EPINX_T ep1;
+ static EPINX_T ep2;
+ static track_p t1;
+ static track_p t2;
+
switch( action ) {
case C_START:
+ DYNARR_RESET(trkSeg_t,anchors_da);
state = 0;
if (selectedTrackCount == 0) {
ErrorMessage( MSG_NO_SELECTED_TRK );
@@ -1334,8 +1937,15 @@ static STATUS_T CmdRotate(
InfoMessage( _("Drag to rotate selected tracks, Shift+RightClick for QuickRotate Menu") );
wMenuPushEnable( rotateAlignMI, TRUE );
rotateAlignState = 0;
+ ep1 = -1;
+ ep2 = -1;
+ break;
+ case wActionMove:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ CreateRotateAnchor(pos);
break;
case C_DOWN:
+ DYNARR_RESET(trkSeg_t,anchors_da);
state = 1;
if (SelectedTracksAreFrozen()) {
return C_TERMINATE;
@@ -1357,12 +1967,15 @@ static STATUS_T CmdRotate(
}
}
}
- GetMovedTracks(FALSE);
+ CreateRotateAnchor(orig);
+ GetMovedTracks(TRUE);
SetMoveD( FALSE, base, angle );
+
/*DrawLine( &mainD, base, orig, 0, wDrawColorBlack );
DrawMovedTracks(FALSE, orig, angle);*/
} else {
pos1 = pos;
+ drawnAngle = FALSE;
onTrackInSplit = TRUE;
trk = OnTrack( &pos, TRUE, FALSE );
onTrackInSplit = FALSE;
@@ -1396,13 +2009,13 @@ static STATUS_T CmdRotate(
}
GetMovedTracks(TRUE);
SetMoveD( FALSE, orig, angle );
- //DrawMovedTracks();
}
}
- MainRedraw();
- MapRedraw();
return C_CONTINUE;
case C_MOVE:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ ep1=-1;
+ ep2=-1;
if ( rotateAlignState == 1 )
return C_CONTINUE;
if ( rotateAlignState == 2 ) {
@@ -1416,7 +2029,6 @@ static STATUS_T CmdRotate(
ErrorMessage( MSG_2ND_TRACK_MUST_BE_UNSELECTED );
return C_CONTINUE;
}
- //DrawMovedTracks();
angle1 = NormalizeAngle( GetAngleAtPoint( trk, pos, NULL, NULL ) );
angle = NormalizeAngle(angle1-baseAngle);
if ( angle > 90 && angle < 270 )
@@ -1427,65 +2039,95 @@ static STATUS_T CmdRotate(
InfoMessage( _("Angle %0.3f"), angle1 );
SetMoveD( FALSE, orig, angle );
/*printf( "angle 2 = %0.3f\n", angle );*/
- //DrawMovedTracks();
- MainRedraw();
- MapRedraw();
return C_CONTINUE;
}
- if ( FindDistance( orig, pos ) > (6.0/75.0)*mainD.scale ) {
- drawEnable = enableMoveDraw;
- if (drawnAngle) {
- DrawLine( &tempD, base, orig, 0, wDrawColorBlack );
- DrawMovedTracks();
- } else if (quickMove != MOVE_QUICK) {
- DrawSelectedTracksD( &mainD, wDrawColorWhite );
- }
+ ANGLE_T diff_angle = 0.0;
+ base = pos;
+ drawEnable = enableMoveDraw;
+ if ( FindDistance( orig, pos ) > (20.0/75.0)*mainD.scale ) {
+ ANGLE_T old_angle = angle;
angle = FindAngle( orig, pos );
if (!drawnAngle) {
baseAngle = angle;
drawnAngle = TRUE;
+ direction_set = FALSE;
+ } else {
+ if (!direction_set) {
+ if (DifferenceBetweenAngles(baseAngle,angle)>=0) clockwise = TRUE;
+ else clockwise = FALSE;
+ direction_set = TRUE;
+ } else {
+ if (clockwise) {
+ if (DifferenceBetweenAngles(baseAngle,angle)<0 && fabs(DifferenceBetweenAngles(baseAngle, old_angle))<5)
+ clockwise = FALSE;
+ } else {
+ if (DifferenceBetweenAngles(baseAngle,angle)>=0 && fabs(DifferenceBetweenAngles(baseAngle,old_angle))<5)
+ clockwise = TRUE;
+ }
+ }
}
- base = pos;
- angle = NormalizeAngle( angle-baseAngle );
- if ( MyGetKeyState()&WKEY_CTRL ) {
- angle = NormalizeAngle(floor((angle+7.5)/15.0)*15.0);
- Translate( &base, orig, angle+baseAngle, FindDistance(orig,pos) );
+ orig_base = base = pos;
+ //angle = NormalizeAngle( angle-baseAngle );
+ diff_angle = DifferenceBetweenAngles(baseAngle,angle);
+ if ( (MyGetKeyState() & (WKEY_CTRL|WKEY_SHIFT)) == (WKEY_CTRL|WKEY_SHIFT) ) { //Both Shift+Ctrl
+ if (clockwise) {
+ if (diff_angle<0) diff_angle+=360;
+ } else {
+ if (diff_angle>0) diff_angle-=360;
+ }
+ diff_angle = floor((diff_angle+7.5)/15.0)*15.0;
+ angle = baseAngle+diff_angle;
}
- DrawLine( &tempD, base, orig, 0, wDrawColorBlack );
- SetMoveD( FALSE, orig, angle );
- //DrawMovedTracks();
+ Translate( &base, orig, angle, FindDistance(orig,pos) ); //Line one
+ Translate( &orig_base,orig, baseAngle, FindDistance(orig,pos)<=(60.0/75.00*mainD.scale)?FindDistance(orig,pos):60.0/75.00*mainD.scale ); //Line two
+ SetMoveD( FALSE, orig, NormalizeAngle( angle-baseAngle ) );
+ if (((MyGetKeyState()&(WKEY_ALT)) == WKEY_ALT) != magneticSnap) { //Just Shift
+ if (FindEndIntersection(zero,orig,NormalizeAngle( angle-baseAngle ),&t1,&ep1,&t2,&ep2)) {
+ coOrd pos2 = GetTrkEndPos(t2,ep2);
+ coOrd pos1 = GetTrkEndPos(t1,ep1);
+ Rotate(&pos2,orig,NormalizeAngle( angle-baseAngle ));
+ CreateEndAnchor(pos2,FALSE);
+ CreateEndAnchor(pos1,TRUE);
+ }
+ }
+
#ifdef DRAWCOUNT
- InfoMessage( _(" Angle %0.3f #%ld"), angle, drawCount );
+ InfoMessage( _("Angle %0.3f #%ld"), fabs(diff_angle), drawCount );
#else
- InfoMessage( _(" Angle %0.3f"), angle );
+ InfoMessage( _("Angle %0.3f %s"), fabs(diff_angle), clockwise?"Clockwise":"Counter-Clockwise" );
#endif
wFlush();
drawEnable = TRUE;
- }
- MainRedraw();
- MapRedraw();
+ } else
+ InfoMessage( _("Origin Set. Drag away to set start angle"));
+
return C_CONTINUE;
+
case C_UP:
+ DYNARR_RESET(trkSeg_t,anchors_da);
state = 0;
- if ( rotateAlignState == 1 ) {
- if ( trk && GetTrkSelected(trk) ) {
- InfoMessage( _("Click on the 2nd Unselected object") );
- rotateAlignState = 2;
- }
- return C_CONTINUE;
- }
- FreeTempStrings();
- if ( rotateAlignState == 2 ) {
- //DrawMovedTracks();
- MoveTracks( quickMove==MOVE_QUICK, FALSE, TRUE, zero, orig, angle );
+ if (t1 && ep1>=0 && t2 && ep2>=0) {
+ MoveToJoin(t2,ep2,t1,ep1);
+ CleanSegs(&tempSegs_da);
rotateAlignState = 0;
- } else if (drawnAngle) {
- DrawLine( &tempD, base, orig, 0, wDrawColorBlack );
- //DrawMovedTracks();
- MoveTracks( quickMove==MOVE_QUICK, FALSE, TRUE, zero, orig, angle );
+ } else {
+ if ( rotateAlignState == 1 ) {
+ if ( trk && GetTrkSelected(trk) ) {
+ InfoMessage( _("Align: Click on the 2nd unselected object") );
+ rotateAlignState = 2;
+ }
+ return C_CONTINUE;
+ }
+ CleanSegs(&tempSegs_da);
+ if ( rotateAlignState == 2 ) {
+ MoveTracks( FALSE, FALSE, TRUE, zero, orig, angle, TRUE );
+ rotateAlignState = 0;
+ } else if (drawnAngle) {
+ MoveTracks( FALSE, FALSE, TRUE, zero, orig, NormalizeAngle( angle-baseAngle ), TRUE );
+ }
}
- MainRedraw();
- MapRedraw();
+ UndoEnd();
+ tlist_da.cnt = 0;
return C_TERMINATE;
case C_CMDMENU:
@@ -1501,16 +2143,65 @@ static STATUS_T CmdRotate(
}
}
}
+ moveDescPos = pos;
+ moveDescTrk = trk;
+ SetUpMenu2(pos,trk);
+ menuPos = pos;
wMenuPopupShow( selectPopup2M );
return C_CONTINUE;
+ case C_TEXT:
+ if ((action>>8) == 'd') {
+ panCenter = pos;
+ LOG( log_pan, 2, ( "PanCenter:Sel-%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ PanHere((void*)0);
+ }
+ if ((action>>8) == 'e') {
+ DoZoomExtents(0);
+ }
+ if ((action>>8) == '0' || (action>>8 == 'o')) {
+ PanMenuEnter('o');
+ }
+ break;
case C_REDRAW:
+ if (anchors_da.cnt)
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
/* DO_REDRAW */
if ( state == 0 )
break;
- if ( rotateAlignState != 2 )
- DrawLine( &tempD, base, orig, 0, wDrawColorBlack );
- DrawSelectedTracksD( &mainD, wDrawColorWhite );
+ if ( rotateAlignState != 2 ) {
+ DIST_T width = mainD.scale*0.5;
+ DrawLine( &tempD, base, orig, 0, wDrawColorBlue );
+ if (drawnAngle) {
+ DrawLine( &tempD, orig_base, orig, (wDrawWidth)width, wDrawColorBlue );
+ ANGLE_T a = DifferenceBetweenAngles(FindAngle(orig, orig_base),FindAngle(orig, base));
+
+ DIST_T dist = FindDistance(orig,base);
+ if (dist>(60.0/75.0)*mainD.scale) dist = (60.0/75.0)*mainD.scale;
+
+ if (direction_set) {
+ if (clockwise) {
+ if (a<0) a = a + 360;
+ DrawArc( &tempD, orig, dist/2, FindAngle(orig,orig_base), a, FALSE, 0, wDrawColorBlue);
+ } else {
+ if (a>0) a = a - 360;
+ DrawArc( &tempD, orig, dist/2, FindAngle(orig,base), fabs(a), FALSE, 0, wDrawColorBlue);
+ }
+ DIST_T d;
+ d = mainD.scale*0.25;
+ ANGLE_T arrow_a = NormalizeAngle(FindAngle(orig,orig_base)+a/2);
+ coOrd arr1,arr2,arr3;
+ Translate(&arr2,orig,arrow_a,dist/2);
+ if (clockwise) arrow_a +=90;
+ else arrow_a -=90;
+ Translate(&arr1,arr2,arrow_a+135,d/2);
+ Translate(&arr3,arr2,arrow_a-135,d/2);
+ DrawLine( &tempD, arr1, arr2, 0, wDrawColorBlue );
+ DrawLine( &tempD, arr2, arr3, 0, wDrawColorBlue );
+ }
+ }
+
+ }
DrawMovedTracks();
break;
@@ -1524,12 +2215,9 @@ static void QuickMove( void* pos) {
return;
wDrawDelayUpdate( mainD.d, TRUE );
GetMovedTracks(FALSE);
- DrawSelectedTracksD( &mainD, wDrawColorWhite );
UndoStart( _("Move Tracks"), "Move Tracks" );
- MoveTracks( quickMove==MOVE_QUICK, TRUE, FALSE, move_pos, zero, 0.0 );
+ MoveTracks( TRUE, TRUE, FALSE, move_pos, zero, 0.0, TRUE );
wDrawDelayUpdate( mainD.d, FALSE );
- MainRedraw();
- MapRedraw();
}
static void QuickRotate( void* pangle )
@@ -1539,18 +2227,16 @@ static void QuickRotate( void* pangle )
return;
wDrawDelayUpdate( mainD.d, TRUE );
GetMovedTracks(FALSE);
- DrawSelectedTracksD( &mainD, wDrawColorWhite );
+ //DrawSelectedTracksD( &mainD, wDrawColorWhite );
UndoStart( _("Rotate Tracks"), "Rotate Tracks" );
- MoveTracks( quickMove==MOVE_QUICK, FALSE, TRUE, zero, cmdMenuPos, angle );
+ MoveTracks( TRUE, FALSE, TRUE, zero, cmdMenuPos, (double)angle/1000, TRUE);
wDrawDelayUpdate( mainD.d, FALSE );
- MainRedraw();
- MapRedraw();
}
static wMenu_p moveDescM;
static wMenuToggle_p moveDescMI;
-static track_p moveDescTrk;
+
static void ChangeDescFlag( wBool_t set, void * mode )
{
wDrawDelayUpdate( mainD.d, TRUE );
@@ -1565,113 +2251,228 @@ static void ChangeDescFlag( wBool_t set, void * mode )
wDrawDelayUpdate( mainD.d, FALSE );
}
-STATUS_T CmdMoveDescription(
- wAction_t action,
- coOrd pos )
-{
- static track_p trk;
- static EPINX_T ep;
- track_p trk1;
- EPINX_T ep1;
- DIST_T d, dd;
- static int mode;
-
- switch (action) {
- case C_START:
- if ( labelWhen < 2 || mainD.scale > labelScale ||
- (labelEnable&(LABELENABLE_TRKDESC|LABELENABLE_LENGTHS|LABELENABLE_ENDPT_ELEV))==0 ) {
- ErrorMessage( MSG_DESC_NOT_VISIBLE );
- return C_TERMINATE;
- }
- InfoMessage( _("Select and drag a description") );
- break;
- case C_DOWN:
- if ( labelWhen < 2 || mainD.scale > labelScale )
- return C_TERMINATE;
- trk = NULL;
- dd = 10000;
- trk1 = NULL;
+track_p FindTrackDescription(coOrd pos, EPINX_T * ep_o, int * mode_o, BOOL_T show_hidden, BOOL_T * hidden_o) {
+ track_p trk = NULL;
+ DIST_T d, dd = 10000;
+ track_p trk1 = NULL;
+ EPINX_T ep1=-1, ep=-1;
+ BOOL_T hidden_t, hidden;
+ coOrd dpos = pos;
+ coOrd cpos;
+ int mode = -1;
while ( TrackIterate( &trk1 ) ) {
if ( !GetLayerVisible(GetTrkLayer(trk1)) )
continue;
if ( (!GetTrkVisible(trk1)) && drawTunnel==0 )
continue;
- for ( ep1=0; ep1<GetTrkEndPtCnt(trk1); ep1++ ) {
- d = EndPtDescriptionDistance( pos, trk1, ep1 );
- if ( d < dd ) {
- dd = d;
- trk = trk1;
- ep = ep1;
- mode = 0;
+ if ( (labelEnable&LABELENABLE_ENDPT_ELEV)!=0 && *mode_o <= 0) {
+ for ( ep1=0; ep1<GetTrkEndPtCnt(trk1); ep1++ ) {
+ d = EndPtDescriptionDistance( pos, trk1, ep1, &dpos, FALSE, NULL ); //No hidden
+ if ( d < dd ) {
+ dd = d;
+ trk = trk1;
+ ep = ep1;
+ mode = 0;
+ hidden = FALSE;
+ cpos= dpos;
+ }
}
}
- if ( !QueryTrack( trk1, Q_HAS_DESC ) )
+ if ( !QueryTrack( trk1, Q_HAS_DESC ) && (mode <0 || mode > 0) )
continue;
- if ( ( GetTrkBits( trk1 ) & TB_HIDEDESC ) != 0 )
+ if ((labelEnable&LABELENABLE_TRKDESC)==0)
continue;
- d = CompoundDescriptionDistance( pos, trk1 );
+ if ( ( GetTrkBits( trk1 ) & TB_HIDEDESC ) != 0 ) {
+ if ( !show_hidden ) continue;
+ }
+ d = CompoundDescriptionDistance( pos, trk1, &dpos, show_hidden, &hidden_t );
if ( d < dd ) {
dd = d;
trk = trk1;
ep = -1;
mode = 1;
+ hidden = hidden_t;
+ cpos = dpos;
}
- d = CurveDescriptionDistance( pos, trk1 );
+ d = CurveDescriptionDistance( pos, trk1, &dpos, show_hidden, &hidden_t );
if ( d < dd ) {
dd = d;
trk = trk1;
ep = -1;
mode = 2;
+ hidden = hidden_t;
+ cpos = dpos;
}
- d = CornuDescriptionDistance( pos, trk1 );
+ d = CornuDescriptionDistance( pos, trk1, &dpos, show_hidden, &hidden_t );
if ( d < dd ) {
dd = d;
trk = trk1;
ep = -1;
mode = 3;
+ hidden = hidden_t;
+ cpos = dpos;
}
- d = BezierDescriptionDistance( pos, trk1 );
+ d = BezierDescriptionDistance( pos, trk1, &dpos, show_hidden, &hidden_t );
if ( d < dd ) {
dd = d;
trk = trk1;
ep = -1;
mode = 4;
+ hidden = hidden_t;
+ cpos = dpos;
}
}
- if (trk != NULL) {
- UndoStart( _("Move Label"), "Modedesc( T%d )", GetTrkIndex(trk) );
- UndoModify( trk );
+ if ((trk != NULL && (trk == OnTrack(&pos, FALSE, FALSE))) ||
+ IsClose(d) || IsClose(FindDistance( pos, cpos) )) { //Only when close to a label or the track - not anywhere on layout!
+ if (ep_o) *ep_o = ep;
+ if (mode_o) *mode_o = mode;
+ if (hidden_o) *hidden_o = hidden;
+ return trk;
+ }
+ else return NULL;
+}
+
+static long moveDescMode;
+
+STATUS_T CmdMoveDescription(
+ wAction_t action,
+ coOrd pos )
+{
+ static track_p trk;
+ static EPINX_T ep;
+ static BOOL_T hidden;
+ static int mode;
+ BOOL_T bChanged;
+
+ moveDescMode = (long)commandContext; //Context 0 = everything, 1 means elevations, 2 means descriptions
+
+ bChanged = FALSE;
+ switch (action&0xFF) {
+ case C_START:
+ moveDescTrk = NULL;
+ moveDescPos = zero;
+ trk = NULL;
+ hidden = FALSE;
+ mode = -1;
+ if ( labelWhen < 2 || mainD.scale > labelScale ||
+ (labelEnable&(LABELENABLE_TRKDESC|LABELENABLE_ENDPT_ELEV))==0 ) {
+ ErrorMessage( MSG_DESC_NOT_VISIBLE );
+ return C_TERMINATE;
+ }
+ InfoMessage( _("Select and drag a description") );
+ break;
+ case C_TEXT:
+ if (!moveDescTrk) return C_CONTINUE;
+ bChanged = FALSE;
+ if (action>>8 == 's') {
+ if ( ( GetTrkBits( moveDescTrk ) & TB_HIDEDESC) != 0 )
+ bChanged = TRUE;
+ ClrTrkBits( moveDescTrk, TB_HIDEDESC );
+ } else if (action>>8 == 'h') {
+ if ( ( GetTrkBits( moveDescTrk ) & TB_HIDEDESC) == 0 )
+ bChanged = TRUE;
+ SetTrkBits( moveDescTrk, TB_HIDEDESC );
+ }
+ if ( bChanged ) {
+ // We should push the draw/undraw of the description down
+ // but there is no clear way to do that
+ MainRedraw(); // CmdMoveDescription
+ }
+ /*no break*/
+ case wActionMove:
+ if ( labelWhen < 2 || mainD.scale > labelScale ) return C_CONTINUE;
+ mode = moveDescMode-1; // -1 means everything, 0 means elevations only, 1 means descriptions only
+ if ((trk=FindTrackDescription(pos,&ep,&mode,TRUE,&hidden))!=NULL) {
+ if (mode==0) {
+ InfoMessage(_("Elevation description"));
+ } else {
+ if (hidden) {
+ InfoMessage(_("Hidden description - 's' to Show"));
+ moveDescTrk = trk;
+ moveDescPos = pos;
+ } else {
+ InfoMessage(_("Shown description - 'h' to Hide"));
+ moveDescTrk = trk;
+ moveDescPos = pos;
+ }
+ }
+ return C_CONTINUE;
+ }
+ InfoMessage( _("Select and drag a description") );
+ break;
+ case C_DOWN:
+ if (( labelWhen < 2 || mainD.scale > labelScale ) ||
+ (labelEnable&(LABELENABLE_TRKDESC|LABELENABLE_ENDPT_ELEV))==0 ) {
+ ErrorMessage( MSG_DESC_NOT_VISIBLE );
+ return C_TERMINATE;
+ }
+ mode = moveDescMode-1;
+ trk = FindTrackDescription(pos,&ep,&mode,TRUE,&hidden);
+ if (trk == NULL )
+ return C_CONTINUE;
+ if (hidden) {
+ ClrTrkBits( trk, TB_HIDEDESC );
+ InfoMessage(_("Hidden Label - Drag to reveal"));
+ } else {
+ InfoMessage(_("Drag label"));
}
+ UndoStart( _("Move Label"), "Modedesc( T%d )", GetTrkIndex(trk) );
+ UndoModify( trk );
/* no break */
case C_MOVE:
case C_UP:
case C_REDRAW:
if ( labelWhen < 2 || mainD.scale > labelScale )
return C_TERMINATE;
- if (trk != NULL) {
- switch (mode) {
- case 0:
- return EndPtDescriptionMove( trk, ep, action, pos );
- case 1:
- return CompoundDescriptionMove( trk, action, pos );
- case 2:
- return CurveDescriptionMove( trk, action, pos );
- case 3:
- return CornuDescriptionMove( trk, action, pos );
- case 4:
- return BezierDescriptionMove( trk, action, pos );
+ if ( trk == NULL )
+ return C_CONTINUE;
+ STATUS_T status = C_ERROR;
+ if ( action == C_REDRAW ) {
+ if (mode==0) {
+ DrawEndPt2( &tempD, trk, ep, wDrawColorBlue );
+ } else {
+ if (hidden) {
+ DrawTrack( trk,&tempD,wDrawColorAqua);
+ } else {
+ DrawTrack( trk,&tempD,wDrawColorBlue);
+ }
}
}
+ switch (mode) {
+ case 0:
+ return EndPtDescriptionMove( trk, ep, action, pos );
+ case 1:
+ return CompoundDescriptionMove( trk, action, pos );
+ case 2:
+ return CurveDescriptionMove( trk, action, pos );
+ case 3:
+ return CornuDescriptionMove( trk, action, pos );
+ case 4:
+ return BezierDescriptionMove( trk, action, pos );
+ }
+ hidden = FALSE;
+ if ( action == C_UP ) {
+ trk = NULL;
+ InfoMessage(_("To Hide, use Context Menu"));
+ }
break;
+
case C_CMDMENU:
- moveDescTrk = OnTrack( &pos, TRUE, FALSE );
+ if (trk == NULL) {
+ moveDescTrk = OnTrack( &pos, TRUE, FALSE );
+ moveDescPos = pos;
+ } else {
+ moveDescTrk = trk;
+ moveDescPos = pos;
+ }
if ( moveDescTrk == NULL ) break;
if ( ! QueryTrack( moveDescTrk, Q_HAS_DESC ) ) break;
if ( moveDescM == NULL ) {
moveDescM = MenuRegister( "Move Desc Toggle" );
- moveDescMI = wMenuToggleCreate( moveDescM, "", _("Show Description"), 0, TRUE, ChangeDescFlag, NULL );
+ moveDescMI = wMenuToggleCreate( moveDescM, "", _("Show/Hide Description"), 0, TRUE, ChangeDescFlag, NULL );
}
wMenuToggleSet( moveDescMI, ( GetTrkBits( moveDescTrk ) & TB_HIDEDESC ) == 0 );
+ menuPos = pos;
wMenuPopupShow( moveDescM );
break;
@@ -1690,10 +2491,9 @@ static void FlipTracks(
track_p trk, trk1;
EPINX_T ep, ep1;
- wSetCursor( wCursorWait );
+ wSetCursor( mainD.d, wCursorWait );
/*UndoStart( "Move/Rotate Tracks", "move/rotate" );*/
if (selectedTrackCount <= incrementalDrawLimit) {
- DrawMapBoundingBox( FALSE );
wDrawDelayUpdate( mainD.d, TRUE );
wDrawDelayUpdate( mapD.d, TRUE );
}
@@ -1724,12 +2524,10 @@ static void FlipTracks(
} else {
wDrawDelayUpdate( mainD.d, FALSE );
wDrawDelayUpdate( mapD.d, FALSE );
- DrawMapBoundingBox( TRUE );
}
- wSetCursor( wCursorNormal );
+ wSetCursor( mainD.d, defaultCursor );
UndoEnd();
InfoCount( trackCount );
- MainRedraw();
}
@@ -1759,25 +2557,15 @@ static STATUS_T CmdFlip(
return C_TERMINATE;
}
pos0 = pos1 = pos;
- DrawLine( &tempD, pos0, pos1, 0, wDrawColorBlack );
- MainRedraw();
- MapRedraw();
return C_CONTINUE;
case C_MOVE:
- DrawLine( &tempD, pos0, pos1, 0, wDrawColorBlack );
pos1 = pos;
- DrawLine( &tempD, pos0, pos1, 0, wDrawColorBlack );
InfoMessage( _("Angle %0.2f"), FindAngle( pos0, pos1 ) );
- MainRedraw();
- MapRedraw();
return C_CONTINUE;
case C_UP:
- DrawLine( &tempD, pos0, pos1, 0, wDrawColorBlack );
UndoStart( _("Flip Tracks"), "flip" );
FlipTracks( pos0, FindAngle( pos0, pos1 ) );
state = 0;
- MainRedraw();
- MapRedraw();
return C_TERMINATE;
#ifdef LATER
@@ -1795,13 +2583,15 @@ static STATUS_T CmdFlip(
return C_CONTINUE;
}
-static STATUS_T SelectArea(
+static BOOL_T SelectArea(
wAction_t action,
coOrd pos )
{
static coOrd pos0;
static int state;
static coOrd base, size, lo, hi;
+ static BOOL_T add;
+ static BOOL_T subtract;
int cnt;
track_p trk;
@@ -1810,19 +2600,21 @@ static STATUS_T SelectArea(
case C_START:
state = 0;
- return C_CONTINUE;
+ add = FALSE;
+ subtract = FALSE;
+ return FALSE;
case C_DOWN:
case C_RDOWN:
pos0 = pos;
- return C_CONTINUE;
+ add = (action == C_DOWN);
+ subtract = (action == C_RDOWN);
+ return TRUE;
case C_MOVE:
case C_RMOVE:
if (state == 0) {
state = 1;
- } else {
- DrawHilight( &mainD, base, size );
}
base = pos0;
size.x = pos.x - pos0.x;
@@ -1835,24 +2627,24 @@ static STATUS_T SelectArea(
size.y = - size.y;
base.y = pos.y;
}
- DrawHilight( &mainD, base, size );
- return C_CONTINUE;
+ return TRUE;
case C_UP:
case C_RUP:
if (state == 1) {
state = 0;
- DrawHilight( &mainD, base, size );
+ add = (action == C_UP);
+ subtract = (action == C_RUP);
cnt = 0;
trk = NULL;
+ if (add && (selectMode == 0)) SetAllTrackSelect( FALSE ); //Remove all tracks first
while ( TrackIterate( &trk ) ) {
GetBoundingBox( trk, &hi, &lo );
if (GetLayerVisible( GetTrkLayer( trk ) ) &&
lo.x >= base.x && hi.x <= base.x+size.x &&
lo.y >= base.y && hi.y <= base.y+size.y) {
- if ( (GetTrkSelected( trk )==0) == (action==C_UP) ) {
- cnt++;
- }
+ if ( (GetTrkSelected( trk )==0) == (action==C_UP) )
+ cnt++;
}
}
trk = NULL;
@@ -1862,41 +2654,85 @@ static STATUS_T SelectArea(
lo.x >= base.x && hi.x <= base.x+size.x &&
lo.y >= base.y && hi.y <= base.y+size.y) {
if ( (GetTrkSelected( trk )==0) == (action==C_UP) ) {
- if (cnt > incrementalDrawLimit) {
+ if (GetLayerModule(GetTrkLayer(trk))) {
+ if (add)
+ DoModuleTracks(GetTrkLayer(trk),SelectOneTrack,TRUE);
+ else
+ DoModuleTracks(GetTrkLayer(trk),SelectOneTrack,FALSE);
+ } else if (cnt > incrementalDrawLimit) {
selectedTrackCount += (action==C_UP?1:-1);
- if (action==C_UP)
+ if (add)
SetTrkBits( trk, TB_SELECTED );
else
ClrTrkBits( trk, TB_SELECTED );
} else {
- SelectOneTrack( trk, action==C_UP );
+ SelectOneTrack( trk, add );
}
}
}
}
+ add = FALSE;
+ subtract = FALSE;
+ if (cnt > incrementalDrawLimit) {
+ MainRedraw(); // SelectArea C_UP
+ } else {
+ RedrawSelectedTracksBoundary();
+ }
SelectedTrackCountChange();
- if (cnt > incrementalDrawLimit)
- MainRedraw();
}
- return C_CONTINUE;
+ return FALSE;
case C_CANCEL:
- if (state == 1) {
- DrawHilight( &mainD, base, size );
- state = 0;
- }
+ state = 0;
+ add = FALSE;
+ subtract = FALSE;
break;
case C_REDRAW:
if (state == 0)
break;
- DrawHilight( &mainD, base, size );
+ //Draw to-be selected tracks versus not.
+ trk = NULL;
+ if (selectMode == 0 && add) HighlightSelectedTracks(NULL, TRUE, TRUE);
+ while ( TrackIterate( &trk ) ) {
+ GetBoundingBox( trk, &hi, &lo );
+ if (GetLayerVisible( GetTrkLayer( trk ) ) &&
+ lo.x >= base.x && hi.x <= base.x+size.x &&
+ lo.y >= base.y && hi.y <= base.y+size.y) {
+ if (GetLayerModule(GetTrkLayer(trk))) {
+ if (add)
+ DoModuleTracks(GetTrkLayer(trk),DrawSingleTrack,TRUE);
+ else if (subtract)
+ DoModuleTracks(GetTrkLayer(trk),DrawSingleTrack,FALSE);
+ } else {
+ if (add) {
+ if (selectMode == 0 && add)
+ DrawTrack(trk,&tempD,wDrawColorPreviewSelected);
+ if (!GetTrkSelected(trk))
+ DrawTrack(trk,&tempD,wDrawColorPreviewSelected);
+ }
+ else if (subtract) {
+ if (GetTrkSelected(trk))
+ DrawTrack(trk,&tempD,wDrawColorPreviewUnselected);
+ }
+ }
+ }
+ }
+ if (add || subtract) {
+ DrawHilight( &tempD, base, size, add );
+ return TRUE;
+ }
break;
}
- return C_CONTINUE;
+ return FALSE;
}
+extern BOOL_T inDescribeCmd;
+extern wIndex_t modifyCmdInx;
+extern wIndex_t describeCmdInx;
+extern wIndex_t panCmdInx;
+extern wIndex_t trainCmdInx;
static STATUS_T SelectTrack(
coOrd pos )
@@ -1904,124 +2740,515 @@ static STATUS_T SelectTrack(
track_p trk;
char msg[STR_SIZE];
- if ((trk = OnTrack( &pos, TRUE, FALSE )) == NULL) {
- return C_CONTINUE;
+ if (((trk = OnTrack( &pos, FALSE, FALSE )) == NULL) && selectZero) { //If option set and !ctrl or unset and ctrl
+ SetAllTrackSelect( FALSE ); //Unselect all
+ return C_CONTINUE;
}
+ if (trk == NULL) return C_CONTINUE;
+ inDescribeCmd = FALSE;
DescribeTrack( trk, msg, sizeof msg );
InfoMessage( msg );
- if (MyGetKeyState() & WKEY_SHIFT) {
- SelectConnectedTracks( trk );
+ if (GetLayerModule(GetTrkLayer(trk))) {
+ if (((MyGetKeyState() & WKEY_CTRL) && (selectMode==0)) || (!(MyGetKeyState() & WKEY_CTRL) && (selectMode==1)) ) {
+ DoModuleTracks(GetTrkLayer(trk),SelectOneTrack,!GetTrkSelected(trk));
+ } else {
+ SetAllTrackSelect( FALSE ); //Just this Track if selectMode = 0 and !CTRL or selectMode = 1 and CTRL
+ DoModuleTracks(GetTrkLayer(trk),SelectOneTrack,TRUE);
+ }
+ RedrawSelectedTracksBoundary();
+ return C_CONTINUE;
+ }
+ if (MyGetKeyState() & WKEY_SHIFT) { //All track up to
+ SelectConnectedTracks( trk, FALSE );
+ } else if ((MyGetKeyState() & WKEY_CTRL) && (selectMode==0)) {
+ SelectOneTrack( trk, !GetTrkSelected(trk) );
+ } else if (!(MyGetKeyState() & WKEY_CTRL) && (selectMode==1)) {
+ SelectOneTrack( trk, !GetTrkSelected(trk) );
} else {
+ SetAllTrackSelect( FALSE ); //Just this Track
SelectOneTrack( trk, !GetTrkSelected(trk) );
}
+ RedrawSelectedTracksBoundary();
+
return C_CONTINUE;
}
+static STATUS_T Activate( coOrd pos) {
+ track_p trk;
+ if ((trk = OnTrack( &pos, TRUE, FALSE )) == NULL) {
+ return C_CONTINUE;
+ }
+ if (GetLayerModule(GetTrkLayer(trk))) {
+ return C_CONTINUE;
+ }
+ if (QueryTrack(trk,Q_IS_ACTIVATEABLE)) ActivateTrack(trk);
+
+ return C_CONTINUE;
+
+}
+
+track_p IsInsideABox(coOrd pos) {
+ track_p ts = NULL;
+ while ( TrackIterate( &ts ) ) {
+ if (!GetLayerVisible( GetTrkLayer( ts))) continue;
+ if (!GetTrkSelected(ts)) continue;
+ coOrd hi,lo;
+ GetBoundingBox(ts, &hi, &lo);
+ double boundary = mainD.scale*5/mainD.dpi;
+ if ((pos.x>=lo.x-boundary && pos.x<=hi.x+boundary) && (pos.y>=lo.y-boundary && pos.y<=hi.y+boundary)) {
+ return ts;
+ }
+ }
+ return NULL;
+}
+
+void DrawHighlightBoxes(BOOL_T highlight_selected, BOOL_T select, track_p not_this) {
+ track_p ts = NULL;
+ coOrd origin,max;
+ BOOL_T first = TRUE;
+ while ( TrackIterate( &ts ) ) {
+ if ( !GetLayerVisible( GetTrkLayer( ts))) continue;
+ if (!GetTrkSelected(ts)) continue;
+ if (GetLayerModule(GetTrkLayer(ts))) {
+ DrawHighlightLayer(GetTrkLayer(ts));
+ }
+ coOrd hi,lo;
+ if (highlight_selected && (ts != not_this)) DrawTrack(ts,&tempD,select?wDrawColorPreviewSelected:wDrawColorPreviewUnselected );
+ GetBoundingBox(ts, &hi, &lo);
+ if (first) {
+ origin = lo;
+ max = hi;
+ first = FALSE;
+ } else {
+ if (lo.x <origin.x) origin.x = lo.x;
+ if (lo.y <origin.y) origin.y = lo.y;
+ if (hi.x >max.x) max.x = hi.x;
+ if (hi.y >max.y) max.y = hi.y;
+ }
+ }
+ if (!first) {
+ coOrd size;
+ size.x = max.x-origin.x;
+ size.y = max.y-origin.y;
+ wPos_t w,h;
+ w = (wPos_t)((size.x/mainD.scale)*mainD.dpi+0.5+10);
+ h = (wPos_t)((size.y/mainD.scale)*mainD.dpi+0.5+10);
+ wPos_t x, y;
+ tempD.CoOrd2Pix(&tempD,origin,&x,&y);
+ wDrawFilledRectangle(tempD.d, x-5, y-5, w, h, wDrawColorPowderedBlue, wDrawOptTemp|wDrawOptTransparent);
+ }
+
+}
+
+static STATUS_T CallModify(wAction_t action,
+ coOrd pos ) {
+ int rc = CmdModify(action,pos);
+ if (rc != C_CONTINUE)
+ doingDouble = FALSE;
+ return rc;
+}
+
+static STATUS_T CallDescribe(wAction_t action, coOrd pos) {
+ int rc = CmdDescribe(action, pos);
+ return rc;
+}
+
+static void CallPushDescribe(void * func) {
+ if (moveDescTrk) {
+ CallDescribe(C_START, moveDescPos);
+ CallDescribe(C_DOWN, moveDescPos);
+ CallDescribe(C_UP, moveDescPos);
+ }
+ return;
+}
+
+static STATUS_T CmdSelect(wAction_t,coOrd);
+
+static void CallPushModify(void * func) {
+ if (moveDescTrk) {
+ CmdSelect(C_LDOUBLE, moveDescPos);
+ }
+ return;
+}
static STATUS_T CmdSelect(
wAction_t action,
coOrd pos )
{
- static enum { AREA, MOVE, MOVEDESC, NONE } mode;
- static BOOL_T doingMove = TRUE;
- STATUS_T rc=C_CONTINUE;
- if ( (action == C_DOWN || action == C_RDOWN) ) {
- mode = AREA;
- if (MyGetKeyState() & WKEY_SHIFT) {
- mode = MOVE;
- } else if (MyGetKeyState() & WKEY_CTRL) {
- mode = MOVEDESC;
+ static BOOL_T doingMove;
+ static BOOL_T doingRotate;
+
+
+
+ STATUS_T rc=C_CONTINUE;
+ static track_p trk = NULL;
+ typedef enum {NOSHOW,SHOWMOVE,SHOWROTATE,SHOWMODIFY,SHOWACTIVATE} showType;
+ static showType showMode;
+
+ mode = AREA;
+ if (doingAlign || doingRotate || doingMove )
+ mode = MOVE;
+ else {
+ if ( (action == C_DOWN) || (action == C_RDOWN) || ((action&0xFF) == wActionExtKey) ) {
+ mode = AREA;
+ if ( ((action&0xFF) == wActionExtKey) || ( //Moves don't need to be in a box
+ ( MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL|WKEY_ALT)) && IsInsideABox(pos)) ) //But cursors do
+ {
+ mode = MOVE;
+ }
}
}
- switch (action) {
+
+ switch (action&0xFF) {
case C_START:
- InfoMessage( _("Select tracks") );
-#ifdef LATER
- if ((!importMove) && selectedTrackCount > 0) {
- SetAllTrackSelect( FALSE );
- }
-#endif
- importMove = FALSE;
+ InfoMessage( _("Select track") );
+ doingMove = FALSE;
+ doingRotate = FALSE;
+ doingAlign = FALSE;
+ doingDouble = FALSE;
+ showMode = NOSHOW;
SelectArea( action, pos );
wMenuPushEnable( rotateAlignMI, FALSE );
+ wSetCursor(mainD.d,defaultCursor);
+ mode = AREA;
+ trk = NULL;
+ break;
+
+ case wActionModKey:
+ case wActionMove:
+ if (doingDouble) {
+ return CallModify(action,pos);
+ }
+ showMode = NOSHOW;
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ coOrd p = pos;
+ trk = OnTrack( &p, FALSE, FALSE );
+ track_p ht;
+ if ((selectedTrackCount==0) && (trk == NULL)) return C_CONTINUE;
+ if (trk && !CheckTrackLayerSilent( trk ) ) {
+ if (GetLayerFrozen(GetTrkLayer(trk)) ) {
+ trk = NULL;
+ InfoMessage(_("Track is in Frozen Layer"));
+ return C_CONTINUE;
+ }
+ }
+ if (selectedTrackCount>0) {
+ if ((ht = IsInsideABox(pos)) != NULL) {
+ if ((MyGetKeyState()&WKEY_SHIFT)) {
+ CreateMoveAnchor(pos);
+ showMode = SHOWMOVE;
+ } else if ((MyGetKeyState()&WKEY_CTRL)) {
+ CreateRotateAnchor(pos);
+ showMode = SHOWROTATE;
+ } else if (!GetLayerModule(GetTrkLayer(ht))) {
+ if (QueryTrack( ht, Q_CAN_MODIFY_CONTROL_POINTS ) ||
+ QueryTrack( ht, Q_IS_CORNU ) ||
+ (QueryTrack( ht, Q_IS_DRAW ) && !QueryTrack( ht, Q_IS_TEXT))) {
+ CreateModifyAnchor(pos);
+ showMode = SHOWMODIFY;
+ } else {
+ if (QueryTrack(ht,Q_IS_ACTIVATEABLE))
+ CreateActivateAnchor(pos);
+ showMode = SHOWACTIVATE;
+ }
+ }
+ }
+ }
break;
case C_DOWN:
- case C_UP:
- case C_MOVE:
case C_RDOWN:
- case C_RUP:
- case C_RMOVE:
- case C_REDRAW:
+ if (doingDouble) {
+ return CallModify(action,pos);
+ }
+ DYNARR_RESET(trkSeg_t,anchors_da);
switch (mode) {
+ rc = C_CONTINUE;
case MOVE:
- if (SelectedTracksAreFrozen()) {
+ if (SelectedTracksAreFrozen() || (selectedTrackCount==0)) {
rc = C_TERMINATE;
- mode = NONE;
- } else if (action >= C_DOWN && action <= C_UP) {
- rc = CmdMove( action, pos );
- doingMove = TRUE;
- } else if (action >= C_RDOWN && action <= C_RUP) {
- rc = CmdRotate( action-C_RDOWN+C_DOWN, pos );
doingMove = FALSE;
- } else if (action == C_REDRAW) {
- if (doingMove) {
- rc = CmdMove( C_REDRAW, pos );
- } else {
- rc = CmdRotate( C_REDRAW, pos );
- }
+ } else if ((MyGetKeyState()&(WKEY_CTRL|WKEY_SHIFT))==WKEY_CTRL) {
+ doingRotate = TRUE;
+ doingMove = FALSE;
+ RotateAlign( FALSE );
+ rc = CmdRotate( action, pos );
+ } else if ((MyGetKeyState()&(WKEY_SHIFT|WKEY_CTRL))==WKEY_SHIFT) {
+ doingMove = TRUE;
+ doingRotate = FALSE;
+ rc = CmdMove( action, pos );
}
break;
- case MOVEDESC:
- rc = CmdMoveDescription( action, pos );
+ case AREA:
+ doingMove = FALSE;
+ doingRotate = FALSE;
+ SelectArea( action, pos );
+ break;
+ default: ;
+ }
+ trk = NULL;
+ return rc;
+ break;
+ case wActionExtKey:
+ case C_RMOVE:
+ case C_MOVE:
+ if (doingDouble) {
+ return CallModify(action,pos);
+ }
+ if ((action&0xFF) == wActionExtKey && ((MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL)) == (WKEY_SHIFT|WKEY_CTRL))) { //Both + arrow
+ doingMove = TRUE;
+ mode = MOVE;
+ }
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ switch (mode) {
+ case MOVE:
+ if (SelectedTracksAreFrozen() || (selectedTrackCount==0)) {
+ rc = C_TERMINATE;
+ tlist_da.cnt = 0;
+ doingMove = FALSE;
+ doingRotate = FALSE;
+ } else if (doingRotate == TRUE) {
+ RotateAlign( FALSE );
+ rc = CmdRotate( action, pos );
+ } else if (doingMove == TRUE) {
+ rc = CmdMove( action, pos );
+ }
break;
case AREA:
- rc = SelectArea( action, pos );
+ doingMove = FALSE;
+ doingRotate = FALSE;
+ SelectArea( action, pos );
+ break;
+ default: ;
+ }
+ if ((action&0xFF) == wActionExtKey && ((MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL)) == (WKEY_SHIFT|WKEY_CTRL))) //Both
+ doingMove = FALSE;
+ return rc;
+ break;
+ case C_RUP:
+ case C_UP:
+ if (doingDouble) {
+ return CallModify(action,pos);
+ }
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ switch (mode) {
+ case MOVE:
+ if (SelectedTracksAreFrozen() || (selectedTrackCount==0)) {
+ rc = C_TERMINATE;
+ doingMove = FALSE;
+ doingRotate = FALSE;
+ } else if (doingRotate == TRUE) {
+ RotateAlign( FALSE );
+ rc = CmdRotate( action, pos );
+ } else if (doingMove == TRUE) {
+ rc = CmdMove( action, pos );
+ }
break;
- case NONE:
+ case AREA:
+ doingMove = FALSE;
+ doingRotate = FALSE;
+ SelectArea( action, pos );
+ rc = C_CONTINUE;
break;
+ default: ;
}
- if (action == C_UP || action == C_RUP)
- mode = AREA;
+ doingMove = FALSE;
+ doingRotate = FALSE;
+ mode = AREA;
return rc;
-
- case wActionMove:
break;
+ case C_REDRAW:
+ if (doingDouble) {
+ return CallModify(action,pos);
+ }
+ if (doingMove) {
+ rc = CmdMove( C_REDRAW, pos );
+ } else if (doingRotate) {
+ rc = CmdRotate( C_REDRAW, pos );
+ }
+
+ //Once doing a move or a rotate, make an early exit
+ if (doingMove || doingRotate) {
+ if (anchors_da.cnt) {
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
+ }
+ return C_CONTINUE;
+ }
+ BOOL_T AreaSelect = FALSE;
+ // Draw the selected area, no-op if none selected
+ if (mode==AREA) {
+ AreaSelect = SelectArea( action, pos );
+ if (AreaSelect) return C_CONTINUE;
+ }
+
+ // Highlight a whole Module's worth of tracks if we are hovering over one
+ if (trk && GetLayerModule(GetTrkLayer(trk))) {
+ if ( (selectMode == 1) && ((MyGetKeyState() & (WKEY_CTRL|WKEY_SHIFT)) != WKEY_CTRL) )
+ DoModuleTracks(GetTrkLayer(trk),DrawSingleTrack,!GetTrkSelected(trk)); //Toggle
+ else
+ DoModuleTracks(GetTrkLayer(trk),DrawSingleTrack,TRUE);
+ DrawHighlightLayer(GetTrkLayer(trk));
+ }
+
+ //Draw all existing highlight boxes only
+ DrawHighlightBoxes(FALSE, FALSE, trk);
+
+ // If not on a track, show all tracks as going to be de-selected if selectZero on
+ if (!trk && selectZero ) {
+ HighlightSelectedTracks(NULL, TRUE, TRUE);
+ //Handle the SHIFT+ which means SelectAllConnected case
+ } else if ( trk && !IsTrackDeleted(trk)) {
+ if ((MyGetKeyState() & WKEY_SHIFT) )
+ SelectConnectedTracks(trk, TRUE); //Highlight all connected
+ //Normal case - handle track we are hovering over
+ else {
+ //Select=Add
+ if (selectMode == 1) {
+ if ((MyGetKeyState() & (WKEY_CTRL|WKEY_SHIFT)) == WKEY_CTRL) {
+ //Only Highlight if adding
+ if (!GetTrkSelected(trk))
+ DrawTrack(trk,&tempD,wDrawColorPreviewSelected);
+ } else {
+ if (GetTrkSelected(trk))
+ DrawTrack(trk,&tempD,wDrawColorPreviewUnselected); //Toggle
+ else
+ DrawTrack(trk,&tempD,wDrawColorPreviewSelected);
+ }
+ //Select=Only
+ } else {
+ if ((MyGetKeyState() & (WKEY_CTRL|WKEY_SHIFT)) == WKEY_CTRL) {
+ if (GetTrkSelected(trk))
+ DrawTrack(trk,&tempD,wDrawColorPreviewUnselected); //Toggle
+ else
+ DrawTrack(trk,&tempD,wDrawColorPreviewSelected);
+ } else {
+ //Only Highlight if adding
+ if (!GetTrkSelected(trk))
+ DrawTrack(trk,&tempD,wDrawColorPreviewSelected );
+ }
+ }
+ }
+ // Now Highlight the rest of the tracks or Module
+ if (GetLayerModule(GetTrkLayer(trk))) {
+ if (selectMode == 1 && ((MyGetKeyState() & (WKEY_CTRL|WKEY_SHIFT)) != WKEY_CTRL) )
+ DoModuleTracks(GetTrkLayer(trk),DrawSingleTrack,!GetTrkSelected(trk)); //Toggle
+ else
+ DoModuleTracks(GetTrkLayer(trk),DrawSingleTrack,TRUE);
+ DrawHighlightLayer(GetTrkLayer(trk));
+ } else {
+ //Select=Add
+ if (selectMode == 1) {
+ if (((MyGetKeyState() & (WKEY_CTRL|WKEY_SHIFT)) == WKEY_CTRL))
+ HighlightSelectedTracks(trk, TRUE, TRUE);
+ //else
+ // HighlightSelectedTracks(trk, TRUE, FALSE); Highlight all selected
+ //Select=Only
+ } else {
+ if (((MyGetKeyState() & (WKEY_CTRL|WKEY_SHIFT)) != WKEY_CTRL))
+ HighlightSelectedTracks(trk, TRUE, TRUE);
+ //else
+ // HighlightSelectedTracks(trk, TRUE, TRUE); Highlight all selected
+ }
+ }
+ }
+ //Finally add the anchors for any actions or snaps
+ if (anchors_da.cnt) {
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
+ }
+
+ return rc;
+
case C_LCLICK:
+ if (doingDouble) {
+ return CallModify(action,pos);
+ }
switch (mode) {
case MOVE:
- case MOVEDESC:
- break;
case AREA:
- case NONE:
- return SelectTrack( pos );
+ if (doingAlign) {
+ rc = CmdRotate (C_DOWN, pos);
+ rc = CmdRotate (C_UP, pos);
+ } else
+ rc = SelectTrack( pos );
+ doingRotate = FALSE;
+ doingMove = FALSE;
+ return rc;
}
mode = AREA;
break;
+ case C_LDOUBLE:
+ if (doingDouble) {
+ return C_CONTINUE;
+ }
+ switch (mode) {
+ case AREA:
+ if ((ht = OnTrack(&pos,FALSE,FALSE))!=NULL) {
+ if (QueryTrack( ht, Q_CAN_MODIFY_CONTROL_POINTS ) ||
+ QueryTrack( ht, Q_IS_CORNU ) ||
+ (QueryTrack( ht, Q_IS_DRAW ) && !QueryTrack( ht, Q_IS_TEXT ))) {
+ doingDouble = TRUE;
+ CallModify(C_START,pos);
+ if (doingDouble == FALSE) return C_CONTINUE;
+ CallModify(C_LDOUBLE,pos);
+ } else if (QueryTrack( ht, Q_IS_ACTIVATEABLE)){
+ return Activate(pos);
+ }
+ }
+ break;
+ case MOVE:
+ default:
+ break;
+ }
+ break;
+
case C_CMDMENU:
+ if (doingDouble) {
+ return CallModify(action,pos);
+ }
+ menuPos = pos;
if (selectedTrackCount <= 0) {
wMenuPopupShow( selectPopup1M );
} else {
- coOrd base = pos;
track_p trk = OnTrack(&pos, FALSE, FALSE); //Note pollutes pos if turntable
- if ((trk) &&
- QueryTrack(trk,Q_CAN_ADD_ENDPOINTS)) { //Turntable snap to center if within 1/4 radius
- trackParams_t trackParams;
- if (GetTrackParams(PARAMS_CORNU, trk, pos, &trackParams)) {
- DIST_T dist = FindDistance(base, trackParams.ttcenter);
- if (dist < trackParams.ttradius/4) {
- cmdMenuPos = trackParams.ttcenter;
- }
- }
- }
+ SetUpMenu2(pos,trk);
wMenuPopupShow( selectPopup2M );
}
return C_CONTINUE;
+ case C_TEXT:
+ if (doingDouble) {
+ return CallModify(action,pos);
+ }
+ if ((action>>8) == 'c') {
+ panCenter = pos;
+ LOG( log_pan, 2, ( "PanCenter:Sel-%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ PanHere((void*)0);
+ }
+ if ((action>>8) == 'e') {
+ DoZoomExtents(0);
+ }
+ if ((action>>8) == '0' || (action>>8 == 'o')) {
+ PanMenuEnter('o');
+ }
+ if ((action>>8) == '?') {
+ if((moveDescTrk = OnTrack(&pos,FALSE,FALSE)) != NULL)
+ moveDescPos = pos;
+ CallPushDescribe((void*)0);
+ wSetCursor(mainD.d,defaultCursor);
+ moveDescTrk = NULL;
+ }
+ break;
+ case C_FINISH:
+ if (doingMove) UndoEnd();
+ doingDouble = FALSE;
+ break;
+ default:
+ if (doingDouble) return CallModify(action, pos);
}
+
return C_CONTINUE;
}
@@ -2029,6 +3256,7 @@ static STATUS_T CmdSelect(
#include "bitmaps/select.xpm"
#include "bitmaps/delete.xpm"
#include "bitmaps/tunnel.xpm"
+#include "bitmaps/bridge.xpm"
#include "bitmaps/move.xpm"
#include "bitmaps/rotate.xpm"
#include "bitmaps/flip.xpm"
@@ -2044,11 +3272,27 @@ static void SetMoveMode( char * line )
enableMoveDraw = ((tmp&0x10) == 0);
}
+static void moveDescription( void ) {
+ if (!moveDescTrk) return;
+ int hidden = GetTrkBits( moveDescTrk) &TB_HIDEDESC ;
+ if (hidden)
+ ClrTrkBits( moveDescTrk, TB_HIDEDESC );
+ else
+ SetTrkBits( moveDescTrk, TB_HIDEDESC );
+}
+
EXPORT void InitCmdSelect( wMenu_p menu )
{
selectCmdInx = AddMenuButton( menu, CmdSelect, "cmdSelect", _("Select"), wIconCreatePixMap(select_xpm),
- LEVEL0, IC_CANCEL|IC_POPUP|IC_LCLICK|IC_CMDMENU, ACCL_SELECT, NULL );
+ LEVEL0, IC_CANCEL|IC_POPUP|IC_LCLICK|IC_CMDMENU|IC_WANT_MOVE|IC_WANT_MODKEYS, ACCL_SELECT, NULL );
+}
+
+extern wIndex_t trainCmdInx;
+
+EXPORT void InitCmdSelect2( wMenu_p menu ) {
+
+
endpt_bm = wDrawBitMapCreate( mainD.d, bmendpt_width, bmendpt_width, 7, 7, bmendpt_bits );
angle_bm[0] = wDrawBitMapCreate( mainD.d, bma90_width, bma90_width, 7, 7, bma90_bits );
angle_bm[1] = wDrawBitMapCreate( mainD.d, bma135_width, bma135_width, 7, 7, bma135_bits );
@@ -2058,24 +3302,76 @@ EXPORT void InitCmdSelect( wMenu_p menu )
wPrefGetInteger( "draw", "movemode", &moveMode, MAXMOVEMODE );
if (moveMode > MAXMOVEMODE || moveMode < 0)
moveMode = MAXMOVEMODE;
-
- selectPopup1M = MenuRegister( "Move Draw Mode" );
- quickMove1M[0] = wMenuToggleCreate( selectPopup1M, "", _("Normal"), 0, quickMove==0, ChangeQuickMove, (void *) 0 );
- quickMove1M[1] = wMenuToggleCreate( selectPopup1M, "", _("Simple"), 0, quickMove==1, ChangeQuickMove, (void *) 1 );
- quickMove1M[2] = wMenuToggleCreate( selectPopup1M, "", _("End Points"), 0, quickMove==2, ChangeQuickMove, (void *) 2 );
- selectPopup2M = MenuRegister( "Move Draw Mode " );
- quickMove2M[0] = wMenuToggleCreate( selectPopup2M, "", _("Normal"), 0, quickMove==0, ChangeQuickMove, (void *) 0 );
- quickMove2M[1] = wMenuToggleCreate( selectPopup2M, "", _("Simple"), 0, quickMove==1, ChangeQuickMove, (void *) 1 );
- quickMove2M[2] = wMenuToggleCreate( selectPopup2M, "", _("End Points"), 0, quickMove==2, ChangeQuickMove, (void *) 2 );
+ selectPopup1M = MenuRegister( "Select Mode Menu" );
+ wMenuPushCreate(selectPopup1M, "", _("Undo"), 0,(wMenuCallBack_p) UndoUndo, (void *) 0);
+ wMenuPushCreate(selectPopup1M, "", _("Redo"), 0,(wMenuCallBack_p) UndoRedo, (void *) 0);
+ wMenuSeparatorCreate( selectPopup1M );
+ wMenuPushCreate(selectPopup1M, "cmdDescribeMode", GetBalloonHelpStr("cmdModifyMode"), 0, DoCommandB, (void*) (intptr_t) modifyCmdInx);
+ wMenuPushCreate(selectPopup1M, "cmdPanMode", GetBalloonHelpStr("cmdPanMode"), 0, DoCommandB, (void*) (intptr_t) panCmdInx);
+ wMenuPushCreate(selectPopup1M, "cmdTrainMode", GetBalloonHelpStr("cmdTrainMode"), 0, DoCommandB, (void*) (intptr_t) trainCmdInx);
+ wMenuSeparatorCreate( selectPopup1M );
+ wMenuPushCreate(selectPopup1M, "", _("Zoom In"), 0,(wMenuCallBack_p) DoZoomUp, (void*) 1);
+ wMenuPushCreate( selectPopup1M, "", _("Zoom to extents - 'e'"), 0, (wMenuCallBack_p)DoZoomExtents, (void*) 0);
+ wMenu_p zoomPop1 = wMenuMenuCreate(selectPopup1M, "", _("&Zoom"));
+ InitCmdZoom(NULL, NULL, zoomPop1, NULL);
+ wMenuPushCreate(selectPopup1M, "", _("Zoom Out"), 0, (wMenuCallBack_p) DoZoomDown, (void*) 1);
+ wMenuPushCreate(selectPopup1M, "", _("Pan to Origin - 'o'/'0'"), 0, (wMenuCallBack_p) PanMenuEnter, (void*) 'o');
+ wMenuPushCreate(selectPopup1M, "", _("Pan Center Here - 'c'"), 0, (wMenuCallBack_p) PanHere, (void*) 3);
+ wMenuSeparatorCreate( selectPopup1M );
+ wMenuPushCreate(selectPopup1M, "", _("Select All"), 0,(wMenuCallBack_p) SetAllTrackSelect, (void *) 1);
+ wMenuPushCreate(selectPopup1M, "",_("Select Current Layer"), 0,(wMenuCallBack_p) SelectCurrentLayer, (void *) 0);
+ wMenuSeparatorCreate( selectPopup1M );
+
+ selectPopup2M = MenuRegister( "Track Selected Menu " );
+ wMenuPushCreate(selectPopup2M, "", _("Undo"), 0,(wMenuCallBack_p) UndoUndo, (void *) 0);
+ wMenuPushCreate(selectPopup2M, "", _("Redo"), 0,(wMenuCallBack_p) UndoRedo, (void *) 0);
+ wMenuSeparatorCreate( selectPopup2M );
+ wMenuPushCreate(selectPopup2M, "", _("Zoom In"), 0,(wMenuCallBack_p) DoZoomUp, (void*) 1);
+ wMenuPushCreate(selectPopup2M, "", _("Zoom Out"), 0, (wMenuCallBack_p) DoZoomDown, (void*) 1);
+ wMenuPushCreate(selectPopup2M, "", _("Pan Center Here - 'c'"), 0, (wMenuCallBack_p) PanHere, (void*) 3);
wMenuSeparatorCreate( selectPopup2M );
+ wMenuPushCreate(selectPopup2M, "", _("Deselect All"), 0, (wMenuCallBack_p) SetAllTrackSelect, (void *) 0);
+ wMenuSeparatorCreate( selectPopup2M );
+ wMenuPushCreate(selectPopup2M, "", _("Properties -'?'"), 0,(wMenuCallBack_p) CallPushDescribe, (void*)0);
+ menuPushModify = wMenuPushCreate(selectPopup2M, "", _("Modify/Activate Track"), 0,(wMenuCallBack_p) CallPushModify, (void*)0);
+ wMenuSeparatorCreate( selectPopup2M );
+ wMenuPushCreate(selectPopup2M, "", _("Cut"), 0,(wMenuCallBack_p) EditCut, (void *) 0);
+ wMenuPushCreate(selectPopup2M, "", _("Copy"), 0,(wMenuCallBack_p) EditCopy, (void *) 0);
+ wMenuPushCreate(selectPopup2M, "", _("Paste"), 0, (wMenuCallBack_p) EditPaste, (void *) 0);
+ wMenuPushCreate(selectPopup2M, "", _("Clone"), 0, (wMenuCallBack_p) EditClone, (void *) 0);
AddMoveMenu( selectPopup2M, QuickMove);
+ selectPopup2RM = wMenuMenuCreate(selectPopup2M, "", _("Rotate..."));
+ AddRotateMenu( selectPopup2RM, QuickRotate );
+ rotateAlignMI = wMenuPushCreate( selectPopup2RM, "", _("Align"), 0, (wMenuCallBack_p)RotateAlign, (void* ) 1 );
+ wMenuSeparatorCreate( selectPopup2M );
+ descriptionMI = wMenuPushCreate(selectPopup2M, "cmdMoveLabel", _("Show/Hide Description"), 0, (wMenuCallBack_p)moveDescription, (void*) 0);
+ wMenuSeparatorCreate( selectPopup2M );
+ hideMI = wMenuPushCreate(selectPopup2M, "", _("Hide/NoHide"), 0,(wMenuCallBack_p) SelectTunnel, (void *) 0);
+ bridgeMI = wMenuPushCreate(selectPopup2M, "", _("Bridge/NoBridge"), 0,(wMenuCallBack_p) SelectBridge, (void *) 0);
+ tiesMI = wMenuPushCreate(selectPopup2M, "", _("NoTies/Ties"), 0,(wMenuCallBack_p) SelectTies, (void *) 0);
+ selectPopup2TM = wMenuMenuCreate(selectPopup2M, "", _("Thickness..."));
+ wMenuPushCreate( selectPopup2TM, "", _("Thin Tracks"), 0, (void*)(wMenuCallBack_p)SelectTrackWidth, (void *)0 );
+ wMenuPushCreate( selectPopup2TM, "", _("Medium Tracks"), 0, (void*)(wMenuCallBack_p)SelectTrackWidth, (void *)2 );
+ wMenuPushCreate( selectPopup2TM, "", _("Thick Tracks"), 0, (void*)(wMenuCallBack_p)SelectTrackWidth, (void *)3 );
+ selectPopup2TYM = wMenuMenuCreate( selectPopup2M, "", _("LineType...") );
+ wMenuPushCreate( selectPopup2TYM, "", _("Solid Line"), 0, (wMenuCallBack_p)SelectLineType, (void*)0 );
+ wMenuPushCreate( selectPopup2TYM, "", _("Dashed Line"), 0, (wMenuCallBack_p)SelectLineType, (void*)1 );
+ wMenuPushCreate( selectPopup2TYM, "", _("Dotted Line"), 0, (wMenuCallBack_p)SelectLineType, (void*)2 );
+ wMenuPushCreate( selectPopup2TYM, "", _("Dash-Dotted Line"), 0, (wMenuCallBack_p)SelectLineType, (void*)3 );
+ wMenuPushCreate( selectPopup2TYM, "", _("Dash-Dot-Dotted Line"), 0, (wMenuCallBack_p)SelectLineType, (void*)4 );
+ wMenuSeparatorCreate( selectPopup2M );
+ wMenuPushCreate(selectPopup2M, "", _("Move To Front"), 0,(wMenuCallBack_p) SelectAbove,(void *) 0);
+ wMenuPushCreate(selectPopup2M, "", _("Move To Back"), 0,(wMenuCallBack_p) SelectBelow, (void *) 0);
wMenuSeparatorCreate( selectPopup2M );
- AddRotateMenu( selectPopup2M, QuickRotate );
- rotateAlignMI = wMenuPushCreate( selectPopup2M, "", _("Align"), 0, (wMenuCallBack_p)RotateAlign, NULL );
+ wMenuPushCreate(selectPopup2M, "", _("Group"), 0,(wMenuCallBack_p) DoGroup, (void *) 0);
+ wMenuPushCreate(selectPopup2M, "", _("UnGroup"), 0,(wMenuCallBack_p) DoUngroup, (void *) 0);
+ wMenuSeparatorCreate( selectPopup2M );
+
ParamRegister( &rescalePG );
}
+
EXPORT void InitCmdDelete( void )
{
wIcon_p icon;
@@ -2091,27 +3387,29 @@ EXPORT void InitCmdTunnel( void )
wIcon_p icon;
icon = wIconCreatePixMap( tunnel_xpm );
AddToolbarButton( "cmdTunnel", icon, IC_SELECTED|IC_POPUP, (addButtonCallBack_t)SelectTunnel, NULL );
-#ifdef LATER
- tunnelCmdInx = AddButton( "cmdTunnel", _("Tunnel"),
- (addButtonCallBack_t)SelectTunnel, NULL, IC_SELECTED|IC_POPUP, NULL, LEVEL0_50, ACCL_TUNNEL,
- (wControl_p)wButtonCreate(mainW, 0, 0, "cmdTunnel", (char*)bm_p, BO_ICON, 0, (wButtonCallBack_p)SelectTunnel, 0 ) );
-#endif
+}
+
+EXPORT void InitCmdBridge( void)
+{
+ wIcon_p icon;
+ icon = wIconCreatePixMap( bridge_xpm );
+ AddToolbarButton( "cmdBridge", icon, IC_SELECTED|IC_POPUP, (addButtonCallBack_t)SelectBridge, NULL );
}
EXPORT void InitCmdMoveDescription( wMenu_p menu )
{
AddMenuButton( menu, CmdMoveDescription, "cmdMoveLabel", _("Move Description"), wIconCreatePixMap(movedesc_xpm),
- LEVEL0, IC_STICKY|IC_POPUP|IC_CMDMENU, ACCL_MOVEDESC, NULL );
+ LEVEL0, IC_STICKY|IC_POPUP3|IC_CMDMENU|IC_WANT_MOVE, ACCL_MOVEDESC, (void*) 0 );
}
EXPORT void InitCmdMove( wMenu_p menu )
{
moveCmdInx = AddMenuButton( menu, CmdMove, "cmdMove", _("Move"), wIconCreatePixMap(move_xpm),
- LEVEL0, IC_STICKY|IC_SELECTED|IC_CMDMENU, ACCL_MOVE, NULL );
+ LEVEL0, IC_STICKY|IC_SELECTED|IC_CMDMENU|IC_WANT_MOVE, ACCL_MOVE, NULL );
rotateCmdInx = AddMenuButton( menu, CmdRotate, "cmdRotate", _("Rotate"), wIconCreatePixMap(rotate_xpm),
- LEVEL0, IC_STICKY|IC_SELECTED|IC_CMDMENU, ACCL_ROTATE, NULL );
+ LEVEL0, IC_STICKY|IC_SELECTED|IC_CMDMENU|IC_WANT_MOVE, ACCL_ROTATE, NULL );
/*flipCmdInx =*/ AddMenuButton( menu, CmdFlip, "cmdFlip", _("Flip"), wIconCreatePixMap(flip_xpm),
LEVEL0, IC_STICKY|IC_SELECTED|IC_CMDMENU, ACCL_FLIP, NULL );
}
diff --git a/app/bin/cselect.h b/app/bin/cselect.h
index c02cc1c..a9913bf 100644
--- a/app/bin/cselect.h
+++ b/app/bin/cselect.h
@@ -25,11 +25,9 @@
#include "common.h"
#include "track.h"
-wIndex_t selectCmdInx;
-wIndex_t moveCmdInx;
-wIndex_t rotateCmdInx;
-long quickMove;
-BOOL_T importMove;
+extern wIndex_t selectCmdInx;
+extern wIndex_t moveCmdInx;
+extern wIndex_t rotateCmdInx;
extern int incrementalDrawLimit;
extern long selectedTrackCount;
@@ -37,6 +35,8 @@ void InvertTrackSelect( void * );
void OrphanedTrackSelect( void * );
void SetAllTrackSelect( BOOL_T );
void SelectTunnel( void );
+void SelectBridge( void );
+void SelectTies( void );
void SelectRecount( void );
void SelectTrackWidth( void* );
void SelectDelete( void );
@@ -49,6 +49,6 @@ void DoRefreshCompound( void );
void WriteSelectedTracksToTempSegs( void );
void DoRescale( void );
STATUS_T CmdMoveDescription( wAction_t, coOrd );
-void UpdateQuickMove( void * );
+void DrawHighlightBoxes(BOOL_T, BOOL_T,track_p);
#endif
diff --git a/app/bin/csensor.c b/app/bin/csensor.c
index 871b8d6..4f395c2 100644
--- a/app/bin/csensor.c
+++ b/app/bin/csensor.c
@@ -58,6 +58,9 @@ static const char rcsid[] = "@(#) : $Id$";
#include "param.h"
#include "track.h"
#include "trackx.h"
+#ifdef WINDOWS
+#include "include/utf8convert.h"
+#endif // WINDOWS
#include "utility.h"
#include "messages.h"
@@ -246,7 +249,7 @@ static void DescribeSensor (track_p trk, char * str, CSIZE_T len )
*str = tolower((unsigned char)*str);
str++;
}
- sprintf( str, _("(%d [%s]): Layer=%d, at %0.3f,%0.3f"),
+ sprintf( str, _("(%d [%s]): Layer=%u, at %0.3f,%0.3f"),
GetTrkIndex(trk),
xx->name,GetTrkLayer(trk)+1, xx->orig.x, xx->orig.y);
strncpy(sensorProperties.name,xx->name,STR_SHORT_SIZE-1);
@@ -270,14 +273,22 @@ static BOOL_T WriteSensor ( track_p t, FILE * f )
{
BOOL_T rc = TRUE;
sensorData_p xx = GetsensorData(t);
- rc &= fprintf(f, "SENSOR %d %d %s %d %0.6f %0.6f \"%s\" \"%s\"\n",
+ char *sensorName = MyStrdup(xx->name);
+
+#ifdef WINDOWS
+ sensorName = Convert2UTF8(sensorName);
+#endif // WINDOWS
+
+ rc &= fprintf(f, "SENSOR %d %u %s %d %0.6f %0.6f \"%s\" \"%s\"\n",
GetTrkIndex(t), GetTrkLayer(t), GetTrkScaleName(t),
- GetTrkVisible(t), xx->orig.x, xx->orig.y, xx->name,
+ GetTrkVisible(t), xx->orig.x, xx->orig.y, sensorName,
xx->script)>0;
+
+ MyFree(sensorName);
return rc;
}
-static void ReadSensor ( char * line )
+static BOOL_T ReadSensor ( char * line )
{
wIndex_t index;
/*TRKINX_T trkindex;*/
@@ -291,8 +302,13 @@ static void ReadSensor ( char * line )
wIndex_t layer;
sensorData_p xx;
if (!GetArgs(line+7,"dLsdpqq",&index,&layer,scale, &visible, &orig,&name,&script)) {
- return;
+ return FALSE;
}
+
+#ifdef WINDOWS
+ ConvertUTF8ToSystem(name);
+#endif // WINDOWS
+
trk = NewTrack(index, T_SENSOR, 0, sizeof(sensorData_t));
SetTrkVisible(trk, visible);
SetTrkScale(trk, LookupScale( scale ));
@@ -302,6 +318,7 @@ static void ReadSensor ( char * line )
xx->orig = orig;
xx->script = script;
ComputeSensorBoundingBox(trk);
+ return TRUE;
}
static void MoveSensor (track_p trk, coOrd orig )
@@ -457,23 +474,30 @@ static void CreateNewSensor (coOrd orig)
static STATUS_T CmdSensor ( wAction_t action, coOrd pos )
{
+ static coOrd sensor_pos;
+ static BOOL_T create;
switch (action) {
case C_START:
InfoMessage(_("Place sensor"));
+ create = FALSE;
return C_CONTINUE;
case C_DOWN:
+ create = TRUE;
+ /* no break */
case C_MOVE:
SnapPos(&pos);
- DDrawSensor( &tempD, pos, GetScaleRatio(GetLayoutCurScale()), wDrawColorBlack );
+ sensor_pos = pos;
return C_CONTINUE;
case C_UP:
SnapPos(&pos);
- DDrawSensor( &tempD, pos, GetScaleRatio(GetLayoutCurScale()), wDrawColorBlack );
CreateNewSensor(pos);
return C_TERMINATE;
case C_REDRAW:
+ if (create)
+ DDrawSensor( &tempD, sensor_pos, GetScaleRatio(GetLayoutCurScale()), wDrawColorBlack );
+ return C_CONTINUE;
case C_CANCEL:
- DDrawSensor( &tempD, pos, GetScaleRatio(GetLayoutCurScale()), wDrawColorBlack );
+ create = FALSE;
return C_CONTINUE;
default:
return C_CONTINUE;
@@ -491,7 +515,7 @@ static void DrawSensorTrackHilite( void )
w = (wPos_t)((ctlhiliteSize.x/mainD.scale)*mainD.dpi+0.5);
h = (wPos_t)((ctlhiliteSize.y/mainD.scale)*mainD.dpi+0.5);
mainD.CoOrd2Pix(&mainD,ctlhiliteOrig,&x,&y);
- wDrawFilledRectangle( mainD.d, x, y, w, h, ctlhiliteColor, wDrawOptTemp );
+ wDrawFilledRectangle( tempD.d, x, y, w, h, ctlhiliteColor, wDrawOptTemp|wDrawOptTransparent );
}
static int SensorMgmProc ( int cmd, void * data )
diff --git a/app/bin/csignal.c b/app/bin/csignal.c
index fb9bee8..0fc09e6 100644
--- a/app/bin/csignal.c
+++ b/app/bin/csignal.c
@@ -59,6 +59,9 @@ static const char rcsid[] = "@(#) : $Id$";
#include "param.h"
#include "track.h"
#include "trackx.h"
+#ifdef WINDOWS
+#include "include/utf8convert.h"
+#endif // WINDOWS
#include "utility.h"
#include "messages.h"
@@ -308,7 +311,7 @@ static void DescribeSignal (track_p trk, char * str, CSIZE_T len )
*str = tolower((unsigned char)*str);
str++;
}
- sprintf( str, _("(%d [%s]): Layer=%d, %d heads at %0.3f,%0.3f A%0.3f"),
+ sprintf( str, _("(%d [%s]): Layer=%u, %d heads at %0.3f,%0.3f A%0.3f"),
GetTrkIndex(trk),
xx->name,GetTrkLayer(trk)+1, xx->numHeads,
xx->orig.x, xx->orig.y,xx->angle );
@@ -338,20 +341,28 @@ static BOOL_T WriteSignal ( track_p t, FILE * f )
BOOL_T rc = TRUE;
wIndex_t ia;
signalData_p xx = GetsignalData(t);
- rc &= fprintf(f, "SIGNAL %d %d %s %d %0.6f %0.6f %0.6f %d \"%s\"\n",
+ char *signalName = MyStrdup(xx->name);
+
+#ifdef WINDOWS
+ signalName = Convert2UTF8(signalName);
+#endif // WINDOWS
+
+ rc &= fprintf(f, "SIGNAL %d %u %s %d %0.6f %0.6f %0.6f %d \"%s\"\n",
GetTrkIndex(t), GetTrkLayer(t), GetTrkScaleName(t),
GetTrkVisible(t), xx->orig.x, xx->orig.y, xx->angle,
- xx->numHeads, xx->name)>0;
+ xx->numHeads, signalName)>0;
for (ia = 0; ia < xx->numAspects; ia++) {
rc &= fprintf(f, "\tASPECT \"%s\" \"%s\"\n",
(&(xx->aspectList))[ia].aspectName,
(&(xx->aspectList))[ia].aspectScript)>0;
}
- rc &= fprintf( f, "\tEND\n" )>0;
+ rc &= fprintf( f, "\t%s\n",END_SIGNAL )>0;
+
+ MyFree(signalName);
return rc;
}
-static void ReadSignal ( char * line )
+static BOOL_T ReadSignal ( char * line )
{
/*TRKINX_T trkindex;*/
wIndex_t index;
@@ -369,19 +380,24 @@ static void ReadSignal ( char * line )
signalData_p xx;
if (!GetArgs(line+6,"dLsdpfdq",&index,&layer,scale, &visible, &orig,
&angle, &numHeads,&name)) {
- return;
+ return FALSE;
}
+
+#ifdef WINDOWS
+ ConvertUTF8ToSystem(name);
+#endif // WINDOWS
+
DYNARR_RESET( signalAspect_p, signalAspect_da );
while ( (cp = GetNextLine()) != NULL ) {
- while (isspace((unsigned char)*cp)) cp++;
- if ( strncmp( cp, "END", 3 ) == 0 ) {
+ if ( IsEND( END_SIGNAL) ) {
break;
}
+ while (isspace((unsigned char)*cp)) cp++;
if ( *cp == '\n' || *cp == '#' ) {
continue;
}
if ( strncmp( cp, "ASPECT", 6 ) == 0 ) {
- if (!GetArgs(cp+4,"qq",&aspname,&aspscript)) return;
+ if (!GetArgs(cp+4,"qq",&aspname,&aspscript)) return FALSE;
DYNARR_APPEND( signalAspect_p *, signalAspect_da, 10 );
signalAspect(signalAspect_da.cnt-1).aspectName = aspname;
signalAspect(signalAspect_da.cnt-1).aspectScript = aspscript;
@@ -402,6 +418,7 @@ static void ReadSignal ( char * line )
(&(xx->aspectList))[ia].aspectScript = signalAspect(ia).aspectScript;
}
ComputeSignalBoundingBox(trk);
+ return TRUE;
}
static void MoveSignal (track_p trk, coOrd orig )
@@ -772,20 +789,21 @@ static ANGLE_T orient;
static STATUS_T CmdSignal ( wAction_t action, coOrd pos )
{
-
+ static BOOL_T create;
switch (action) {
case C_START:
InfoMessage(_("Place base of signal"));
+ create = FALSE;
return C_CONTINUE;
case C_DOWN:
SnapPos(&pos);
pos0 = pos;
+ create = TRUE;
InfoMessage(_("Drag to orient signal"));
return C_CONTINUE;
case C_MOVE:
SnapPos(&pos);
orient = FindAngle(pos0,pos);
- DDrawSignal( &tempD, pos0, orient, 1, GetScaleRatio(GetLayoutCurScale()), wDrawColorBlack );
return C_CONTINUE;
case C_UP:
SnapPos(&pos);
@@ -793,8 +811,11 @@ static STATUS_T CmdSignal ( wAction_t action, coOrd pos )
CreateNewSignal(pos0,orient);
return C_TERMINATE;
case C_REDRAW:
+ if (create)
+ DDrawSignal( &tempD, pos0, orient, 1, GetScaleRatio(GetLayoutCurScale()), wDrawColorBlack );
+ return C_CONTINUE;
case C_CANCEL:
- DDrawSignal( &tempD, pos0, orient, 1, GetScaleRatio(GetLayoutCurScale()), wDrawColorBlack );
+ create = FALSE;
return C_CONTINUE;
default:
return C_CONTINUE;
@@ -812,7 +833,7 @@ static void DrawSignalTrackHilite( void )
w = (wPos_t)((sighiliteSize.x/mainD.scale)*mainD.dpi+0.5);
h = (wPos_t)((sighiliteSize.y/mainD.scale)*mainD.dpi+0.5);
mainD.CoOrd2Pix(&mainD,sighiliteOrig,&x,&y);
- wDrawFilledRectangle( mainD.d, x, y, w, h, sighiliteColor, wDrawOptTemp );
+ wDrawFilledRectangle( tempD.d, x, y, w, h, sighiliteColor, wDrawOptTemp|wDrawOptTransparent );
}
static int SignalMgmProc ( int cmd, void * data )
diff --git a/app/bin/csnap.c b/app/bin/csnap.c
index 4c4d948..eb58bc4 100644
--- a/app/bin/csnap.c
+++ b/app/bin/csnap.c
@@ -209,7 +209,7 @@ EXPORT void DrawGrid(
cross0_bm = wDrawBitMapCreate( mainD.d, cross0_width, cross0_height, 2, 2, cross0_bits );
#endif
- wSetCursor( wCursorWait );
+ wSetCursor( mainD.d, wCursorWait );
dpi = D->dpi/D->scale;
Gdx = cos(D2R(Gangle));
Gdy = sin(D2R(Gangle));
@@ -329,7 +329,7 @@ EXPORT void DrawGrid(
done:
- wSetCursor( wCursorNormal );
+ wSetCursor( mainD.d, defaultCursor );
}
@@ -368,45 +368,41 @@ EXPORT STATUS_T GridAction(
switch (action) {
case C_DOWN:
pos1 = pos;
- DrawBigCross( pos1, *angle );
return C_CONTINUE;
case C_MOVE:
- DrawBigCross( pos1, *angle );
*orig = pos1 = pos;
- DrawBigCross( pos1, *angle );
return C_CONTINUE;
case C_UP:
- DrawBigCross( pos1, *angle );
*orig = pos1;
return C_CONTINUE;
case C_RDOWN:
pos0 = pos1 = pos;
oldAngle = newAngle = *angle;
- DrawBigCross( pos0, newAngle );
return C_CONTINUE;
case C_RMOVE:
if ( FindDistance(pos0, pos) > 0.1*mainD.scale ) {
- DrawBigCross( pos0, newAngle );
pos1 = pos;
newAngle = FindAngle( pos0, pos1 );
if (angleSystem!=ANGLE_POLAR)
newAngle = newAngle-90.0;
newAngle = NormalizeAngle( floor( newAngle*10.0 ) / 10.0 );
*angle = newAngle;
- DrawBigCross( pos0, newAngle );
}
return C_CONTINUE;
case C_RUP:
- DrawBigCross( pos0, newAngle );
Rotate( orig, pos0, newAngle-oldAngle );
*orig = pos0;
*angle = newAngle;
return C_CONTINUE;
+
+ case C_REDRAW:
+ DrawBigCross( *orig, *angle );
+ break;
}
return C_CONTINUE;
}
@@ -564,8 +560,7 @@ static void RedrawGrid( void )
if (grid.Show != oldGrid.Show ||
GridChanged() ) {
wDrawDelayUpdate( tempD.d, TRUE );
- DrawASnapGrid( &oldGrid, &tempD, mapD.size, TRUE );
- DrawASnapGrid( &grid, &tempD, mapD.size, TRUE );
+ MainRedraw(); // RedrawGrid
wDrawDelayUpdate( tempD.d, FALSE );
}
}
@@ -674,12 +669,9 @@ static void GridDlgUpdate(
GridButtonUpdate( CHK_SHOW );
break;
default:
- wDrawDelayUpdate( tempD.d, TRUE );
- DrawASnapGrid( &oldGrid, &tempD, mapD.size, TRUE );
ParamLoadData( &gridPG );
GridButtonUpdate( 0 );
- DrawASnapGrid( &grid, &tempD, mapD.size, TRUE );
- wDrawDelayUpdate( tempD.d, FALSE );
+ MainRedraw(); // GridDlgUpdate
}
}
@@ -688,9 +680,8 @@ static void SnapGridRotate( void * pangle )
{
ANGLE_T angle = (ANGLE_T)(long)pangle;
wDrawDelayUpdate( tempD.d, TRUE );
- DrawASnapGrid( &oldGrid, &tempD, mapD.size, TRUE );
grid.Orig = cmdMenuPos;
- grid.Angle += angle;
+ grid.Angle += angle/1000;
oldGrid = grid;
DrawASnapGrid( &grid, &tempD, mapD.size, TRUE );
wDrawDelayUpdate( tempD.d, FALSE );
@@ -719,12 +710,12 @@ EXPORT STATUS_T CmdGrid(
return C_CONTINUE;
case C_REDRAW:
- return C_TERMINATE;
+ DrawBigCross( grid.Orig, grid.Angle );
+ return C_CONTINUE;
case C_CANCEL:
grid = oldGrid;
wHide( gridW );
- MainRedraw();
return C_TERMINATE;
case C_OK:
@@ -767,6 +758,7 @@ EXPORT STATUS_T CmdGrid(
return rc;
case C_CMDMENU:
+ menuPos = pos;
wMenuPopupShow( snapGridPopupM );
break;
}
diff --git a/app/bin/csplit.c b/app/bin/csplit.c
index 6cfdcc8..c2b516a 100644
--- a/app/bin/csplit.c
+++ b/app/bin/csplit.c
@@ -21,16 +21,20 @@
*/
#include "cundo.h"
+#include "compound.h"
#include "i18n.h"
#include "messages.h"
#include "track.h"
#include "utility.h"
+#include "fileio.h"
static wMenu_p splitPopupM[2];
static wMenuToggle_p splitPopupMI[2][4];
static track_p splitTrkTrk[2];
static EPINX_T splitTrkEP[2];
static BOOL_T splitTrkFlip;
+static dynArr_t anchors_da;
+#define anchors(N) DYNARR_N(trkSeg_t,anchors_da,N)
static void ChangeSplitEPMode( wBool_t set, void * mode )
{
@@ -55,6 +59,45 @@ static void ChangeSplitEPMode( wBool_t set, void * mode )
DrawEndPt( &mainD, splitTrkTrk[1], splitTrkEP[1], wDrawColorBlack );
}
+static void CreateSplitAnchorAngle(coOrd pos, track_p t, BOOL_T end, ANGLE_T a) {
+ DIST_T d = tempD.scale*0.1;
+ DIST_T w = tempD.scale/tempD.dpi*4;
+ int i;
+ if (!end) {
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).color = wDrawColorBlue;
+ Translate(&anchors(i).u.l.pos[0],pos,a,GetTrkGauge(t));
+ Translate(&anchors(i).u.l.pos[1],pos,a,-GetTrkGauge(t));
+ anchors(i).width = w;
+ } else {
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).color = wDrawColorBlue;
+ Translate(&anchors(i).u.l.pos[0],pos,a,GetTrkGauge(t));
+ Translate(&anchors(i).u.l.pos[0],anchors(i).u.l.pos[0],a+90,d);
+ Translate(&anchors(i).u.l.pos[1],pos,a,-GetTrkGauge(t));
+ Translate(&anchors(i).u.l.pos[1],anchors(i).u.l.pos[1],a+90,-d);
+ anchors(i).width = w;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).color = wDrawColorBlue;
+ Translate(&anchors(i).u.l.pos[0],pos,a,GetTrkGauge(t));
+ Translate(&anchors(i).u.l.pos[0],anchors(i).u.l.pos[0],a+90,-d);
+ Translate(&anchors(i).u.l.pos[1],pos,a,-GetTrkGauge(t));
+ Translate(&anchors(i).u.l.pos[1],anchors(i).u.l.pos[1],a+90,d);
+ anchors(i).width = w;
+ }
+}
+
+static void CreateSplitAnchor(coOrd pos, track_p t, BOOL_T end) {
+ ANGLE_T a = NormalizeAngle(GetAngleAtPoint(t,pos,NULL,NULL)+90.0);
+ CreateSplitAnchorAngle(pos,t,end,a);
+}
+
static STATUS_T CmdSplitTrack( wAction_t action, coOrd pos )
{
track_p trk0, trk1;
@@ -66,6 +109,7 @@ static STATUS_T CmdSplitTrack( wAction_t action, coOrd pos )
switch (action) {
case C_START:
InfoMessage( _("Select track to split") );
+ DYNARR_RESET(trkSeg_t,anchors_da);
/* no break */
case C_DOWN:
case C_MOVE:
@@ -79,12 +123,16 @@ static STATUS_T CmdSplitTrack( wAction_t action, coOrd pos )
onTrackInSplit = FALSE;
return C_TERMINATE;
}
- if (!QueryTrack(trk0,Q_MODIFY_CAN_SPLIT)) {
- onTrackInSplit = FALSE;
- InfoMessage(_("Can't Split that Track"));
- return C_CONTINUE;
- }
ep0 = PickEndPoint( pos, trk0 );
+ if (IsClose(FindDistance(GetTrkEndPos(trk0,ep0),pos)) && (GetTrkEndTrk(trk0,ep0)!=NULL)) {
+ pos = GetTrkEndPos(trk0,ep0);
+ } else {
+ if (!QueryTrack(trk0,Q_MODIFY_CAN_SPLIT)) {
+ onTrackInSplit = FALSE;
+ InfoMessage(_("Can't Split that Track"));
+ return C_CONTINUE;
+ }
+ }
onTrackInSplit = FALSE;
if (ep0 < 0) {
return C_CONTINUE;
@@ -139,9 +187,38 @@ static STATUS_T CmdSplitTrack( wAction_t action, coOrd pos )
mode |= 1;
for ( inx=0; inx<4; inx++ )
wMenuToggleSet( splitPopupMI[quad&1][inx], mode == inx );
+ menuPos = pos;
wMenuPopupShow( splitPopupM[quad&1] );
break;
+ case wActionMove:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ onTrackInSplit = TRUE;
+ if ((trk0 = OnTrack( &pos, FALSE, TRUE ))!=NULL && CheckTrackLayerSilent( trk0 )) {
+ ep0 = PickEndPoint( pos, trk0 );
+ if (IsClose(FindDistance(GetTrkEndPos(trk0,ep0),pos)) && (GetTrkEndTrk(trk0,ep0)!=NULL)) {
+ CreateSplitAnchor(GetTrkEndPos(trk0,ep0),trk0,TRUE);
+ } else if (QueryTrack(trk0,Q_IS_TURNOUT)) {
+ if ((MyGetKeyState()&WKEY_SHIFT) != 0 ) {
+ if (SplitTurnoutCheck(trk0,pos,ep0,NULL,NULL,NULL,TRUE,&pos,&angle)) {
+ angle = NormalizeAngle(angle+90);
+ CreateSplitAnchorAngle(pos,trk0,FALSE,angle);
+ }
+ } else {
+ CreateSplitAnchor(GetTrkEndPos(trk0,ep0),trk0,TRUE);
+ }
+ break;
+ } else if (QueryTrack(trk0,Q_MODIFY_CAN_SPLIT)) {
+ CreateSplitAnchor(pos,trk0,FALSE);
+ }
+ }
+ onTrackInSplit = FALSE;
+ break;
+ case C_REDRAW:
+ if (anchors_da.cnt)
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
+ break;
}
+
return C_CONTINUE;
}
@@ -152,6 +229,6 @@ static STATUS_T CmdSplitTrack( wAction_t action, coOrd pos )
void InitCmdSplit( wMenu_p menu )
{
- AddMenuButton( menu, CmdSplitTrack, "cmdSplitTrack", _("Split Track"), wIconCreatePixMap(splittrk_xpm), LEVEL0_50, IC_STICKY|IC_POPUP|IC_CMDMENU, ACCL_SPLIT, NULL );
+ AddMenuButton( menu, CmdSplitTrack, "cmdSplitTrack", _("Split Track"), wIconCreatePixMap(splittrk_xpm), LEVEL0_50, IC_STICKY|IC_POPUP|IC_CMDMENU|IC_WANT_MOVE, ACCL_SPLIT, NULL );
}
diff --git a/app/bin/cstraigh.c b/app/bin/cstraigh.c
index 7be25ee..464f16e 100644
--- a/app/bin/cstraigh.c
+++ b/app/bin/cstraigh.c
@@ -29,6 +29,7 @@
#include "param.h"
#include "track.h"
#include "utility.h"
+#include "layout.h"
/*
* STATE INFO
@@ -40,6 +41,23 @@ static struct {
BOOL_T down;
} Dl;
+static dynArr_t anchors_da;
+#define anchors(N) DYNARR_N(trkSeg_t,anchors_da,N)
+
+static void CreateEndAnchor(coOrd p, wBool_t lock) {
+ DIST_T d = tempD.scale*0.15;
+
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = lock?SEG_FILCRCL:SEG_CRVLIN;
+ anchors(i).color = wDrawColorBlue;
+ anchors(i).u.c.center = p;
+ anchors(i).u.c.radius = d/2;
+ anchors(i).u.c.a0 = 0.0;
+ anchors(i).u.c.a1 = 360.0;
+ anchors(i).width = 0;
+}
+
static STATUS_T CmdStraight( wAction_t action, coOrd pos )
{
@@ -47,40 +65,37 @@ static STATUS_T CmdStraight( wAction_t action, coOrd pos )
DIST_T dist;
coOrd p;
- switch (action) {
+ switch (action&0xFF) {
case C_START:
+ DYNARR_RESET(trkSeg_t,anchors_da);
Dl.pos0=pos;
Dl.pos1=pos;
Dl.trk = NULL;
Dl.ep=-1;
Dl.down = FALSE;
- InfoMessage( _("Place 1st end point of straight track + Shift -> snap to unconnected endpoint") );
+ InfoMessage( _("Place 1st endpoint of straight track, snap to unconnected endpoint") );
return C_CONTINUE;
case C_DOWN:
+ DYNARR_RESET(trkSeg_t,anchors_da);
p = pos;
BOOL_T found = FALSE;
Dl.trk = NULL;
- if ((MyGetKeyState() & WKEY_SHIFT) != 0) {
+ if (((MyGetKeyState() & WKEY_ALT) == 0) == magneticSnap) {
if ((t = OnTrack(&p, FALSE, TRUE)) != NULL) {
EPINX_T ep = PickUnconnectedEndPointSilent(p, t);
if (ep != -1) {
+ if (GetTrkGauge(t) != GetScaleTrackGauge(GetLayoutCurScale())) {
+ wBeep();
+ InfoMessage(_("Track is different gauge"));
+ return C_CONTINUE;
+ }
Dl.trk = t;
Dl.ep = ep;
pos = GetTrkEndPos(t, ep);
found = TRUE;
- } else {
- InfoMessage(_("No unconnected end-point on track - Try again or release Shift and click"));
- Dl.pos0=pos;
- Dl.pos1=pos;
- return C_CONTINUE;
}
- } else {
- InfoMessage(_("Not on a track - Try again or release Shift and click"));
- Dl.pos0=pos;
- Dl.pos1=pos;
- return C_CONTINUE;
}
}
Dl.down = TRUE;
@@ -96,10 +111,25 @@ static STATUS_T CmdStraight( wAction_t action, coOrd pos )
return C_CONTINUE;
case C_MOVE:
- if (!Dl.down) return C_CONTINUE;
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
+ case wActionMove:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ if (!Dl.down) {
+ if (((MyGetKeyState() & WKEY_ALT) == 0) == magneticSnap) {
+ p = pos;
+ if ((t = OnTrack(&p, FALSE, TRUE)) != NULL) {
+ if (GetTrkGauge(t) == GetScaleTrackGauge(GetLayoutCurScale())) {
+ EPINX_T ep = PickUnconnectedEndPointSilent(pos, t);
+ if (ep != -1) {
+ if (GetTrkGauge(t) == GetScaleTrackGauge(GetLayoutCurScale()))
+ CreateEndAnchor(GetTrkEndPos(t,ep),FALSE);
+ }
+ }
+ }
+ }
+ return C_CONTINUE;
+ }
ANGLE_T angle, angle2;
- if (Dl.trk) {
+ if (Dl.trk && !(MyGetKeyState() & WKEY_SHIFT)) {
angle = NormalizeAngle(GetTrkEndAngle( Dl.trk, Dl.ep));
angle2 = NormalizeAngle(FindAngle(pos, Dl.pos0)-angle);
if (angle2 > 90.0 && angle2 < 270.0)
@@ -112,14 +142,13 @@ static STATUS_T CmdStraight( wAction_t action, coOrd pos )
PutAngle(FindAngle( Dl.pos0, pos )) );
tempSegs(0).u.l.pos[1] = pos;
tempSegs_da.cnt = 1;
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
return C_CONTINUE;
case C_UP:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if (!Dl.down) return C_CONTINUE;
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
tempSegs_da.cnt = 0;
- if (Dl.trk) {
+ if (Dl.trk && !(MyGetKeyState() & WKEY_SHIFT)) {
angle = NormalizeAngle(GetTrkEndAngle( Dl.trk, Dl.ep));
angle2 = NormalizeAngle(FindAngle(pos, Dl.pos0)-angle);
if (angle2 > 90.0 && angle2 < 270.0)
@@ -132,7 +161,7 @@ static STATUS_T CmdStraight( wAction_t action, coOrd pos )
}
UndoStart( _("Create Straight Track"), "newStraight" );
t = NewStraightTrack( Dl.pos0, pos );
- if (Dl.trk) {
+ if (Dl.trk && !(MyGetKeyState() & WKEY_SHIFT)) {
ConnectTracks(Dl.trk, Dl.ep, t, 0);
}
UndoEnd();
@@ -140,8 +169,12 @@ static STATUS_T CmdStraight( wAction_t action, coOrd pos )
return C_TERMINATE;
case C_REDRAW:
+ if (anchors_da.cnt)
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
+ if (Dl.down)
+ DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
+ return C_CONTINUE;
case C_CANCEL:
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
Dl.down = FALSE;
return C_CONTINUE;
@@ -155,5 +188,5 @@ static STATUS_T CmdStraight( wAction_t action, coOrd pos )
void InitCmdStraight( wMenu_p menu )
{
- AddMenuButton( menu, CmdStraight, "cmdStraight", _("Straight Track"), wIconCreatePixMap(straight_xpm), LEVEL0_50, IC_STICKY|IC_POPUP2, ACCL_STRAIGHT, NULL );
+ AddMenuButton( menu, CmdStraight, "cmdStraight", _("Straight Track"), wIconCreatePixMap(straight_xpm), LEVEL0_50, IC_STICKY|IC_POPUP2|IC_WANT_MOVE, ACCL_STRAIGHT, NULL );
}
diff --git a/app/bin/cstruct.c b/app/bin/cstruct.c
index 6ad240c..6907e2c 100644
--- a/app/bin/cstruct.c
+++ b/app/bin/cstruct.c
@@ -33,13 +33,13 @@
#include "layout.h"
#include "messages.h"
#include "param.h"
+#include "include/paramfile.h"
#include "track.h"
#include "utility.h"
+#include "ccurve.h"
EXPORT TRKTYP_T T_STRUCTURE = -1;
-#define STRUCTCMD
-
EXPORT dynArr_t structureInfo_da;
typedef struct compoundData extraData;
@@ -51,7 +51,6 @@ static int log_structure = 0;
static wMenu_p structPopupM;
-#ifdef STRUCTCMD
static drawCmd_t structureD = {
NULL,
&screenDrawFuncs,
@@ -86,7 +85,7 @@ static paramData_t structurePLs[] = {
#define I_MSGHEIGHT (5)
{ PD_MESSAGE, NULL, NULL, 0, (void*)80 } };
static paramGroup_t structurePG = { "structure", 0, structurePLs, sizeof structurePLs/sizeof structurePLs[0] };
-#endif
+
/****************************************
@@ -133,24 +132,103 @@ EXPORT turnoutInfo_t * CreateNewStructure(
#endif
to->paramFileIndex = curParamFileIndex;
if (curParamFileIndex == PARAM_CUSTOM)
- to->contentsLabel = "Custom Structures";
+ to->contentsLabel = MyStrdup("Custom Structures");
else
to->contentsLabel = curSubContents;
to->endCnt = 0;
to->pathLen = 0;
to->paths = (PATHPTR_T)"";
-#ifdef STRUCTCMD
if (updateList && structureListL != NULL) {
FormatCompoundTitle( LABEL_TABBED|LABEL_MANUF|LABEL_PARTNO|LABEL_DESCR, to->title );
if (message[0] != '\0')
wListAddValue( structureListL, message, NULL, to );
}
-#endif
to->barScale = curBarScale>0?curBarScale:-1;
return to;
}
+/**
+ * Delete a structure definition from memory.
+ * \TODO Find a better way to handle Custom Structures (see CreateNewStructure)
+ *
+ * \param [IN] structure the structure to be deleted
+ */
+
+BOOL_T
+StructureDelete(void *structure)
+{
+ turnoutInfo_t * to = (turnoutInfo_t *)structure;
+ MyFree(to->title);
+ MyFree(to->segs);
+
+ MyFree(to);
+ return(TRUE);
+}
+
+/**
+ * Delete all structure definitions that came from a specific parameter
+ * file. Due to the way the definitions are loaded from file it is safe to
+ * assume that they form a contiguous block in the array.
+ *
+ * \param fileIndex parameter file.
+ */
+
+void
+DeleteStructures(int fileIndex)
+{
+ int inx = 0;
+ int startInx = -1;
+ int cnt = 0;
+
+ // go to the start of the block
+ while (inx < structureInfo_da.cnt &&
+ structureInfo(inx)->paramFileIndex != fileIndex) {
+ startInx = inx++;
+ }
+
+ // delete them
+ for (; inx < structureInfo_da.cnt &&
+ structureInfo(inx)->paramFileIndex == fileIndex; inx++) {
+ turnoutInfo_t * to = structureInfo(inx);
+ if (to->paramFileIndex == fileIndex) {
+ StructureDelete(to);
+ cnt++;
+ }
+ }
+
+ // copy down the rest of the list to fill the gap
+ startInx++;
+ while (inx < structureInfo_da.cnt) {
+ structureInfo(startInx++) = structureInfo(inx++);
+ }
+
+ // and reduce the actual number
+ structureInfo_da.cnt -= cnt;
+}
+
+enum paramFileState
+GetStructureCompatibility(int paramFileIndex, SCALEINX_T scaleIndex)
+{
+ int i;
+ enum paramFileState ret = PARAMFILE_NOTUSABLE;
+ DIST_T ratio = GetScaleRatio(scaleIndex);
+
+ if (!IsParamValid(paramFileIndex)) {
+ return(PARAMFILE_UNLOADED);
+ }
+
+ for (i = 0; i < structureInfo_da.cnt; i++) {
+ turnoutInfo_t *to = structureInfo(i);
+ if (to->paramFileIndex == paramFileIndex) {
+ if (GetScaleRatio(to->scaleInx) == ratio || to->scaleInx == SCALE_ANY) {
+ ret = PARAMFILE_FIT;
+ break;
+ }
+ }
+ }
+ return(ret);
+}
static BOOL_T ReadStructureParam(
char * firstLine )
@@ -164,7 +242,8 @@ static dynArr_t pierInfo_da;
if ( !GetArgs( firstLine+10, "sq", scale, &title ) )
return FALSE;
- ReadSegs();
+ if ( !ReadSegs() )
+ return FALSE;
to = CreateNewStructure( scale, title, tempSegs_da.cnt, &tempSegs(0), FALSE );
if (to == NULL)
return FALSE;
@@ -175,7 +254,8 @@ static dynArr_t pierInfo_da;
cp = tempSpecial+strlen(PIER);
while (cp) {
DYNARR_APPEND( pierInfo_t, pierInfo_da, 10 );
- GetArgs( cp, "fqc", &pierInfo(pierInfo_da.cnt-1).height, &pierInfo(pierInfo_da.cnt-1).name, &cp );
+ if ( !GetArgs( cp, "fqc", &pierInfo(pierInfo_da.cnt-1).height, &pierInfo(pierInfo_da.cnt-1).name, &cp ) )
+ return FALSE;
}
to->u.pierInfo.cnt = pierInfo_da.cnt;
to->u.pierInfo.info = (pierInfo_t*)MyMalloc( pierInfo_da.cnt * sizeof *(pierInfo_t*)NULL );
@@ -196,6 +276,7 @@ EXPORT turnoutInfo_t * StructAdd( long mode, SCALEINX_T scale, wList_p list, coO
{
wIndex_t inx;
turnoutInfo_t * to, *to1=NULL;
+ structureInx = 0;
for ( inx = 0; inx < structureInfo_da.cnt; inx++ ) {
to = structureInfo(inx);
if ( IsParamValid(to->paramFileIndex) &&
@@ -204,6 +285,10 @@ EXPORT turnoutInfo_t * StructAdd( long mode, SCALEINX_T scale, wList_p list, coO
to->segCnt != 0 ) {
if (to1 == NULL)
to1 = to;
+ if ( to == curStructure ) {
+ to1 = to;
+ structureInx = wListGetCount( list );
+ }
FormatCompoundTitle( mode, to->title );
if (message[0] != '\0') {
wListAddValue( list, message, NULL, to );
@@ -232,38 +317,45 @@ static void DrawStructure(
wDrawColor color )
{
struct extraData *xx = GetTrkExtraData(t);
- coOrd p00, px0, pxy, p0y, orig, size;
-
- if (d->options&DC_QUICK) {
- GetSegBounds( zero, 0.0, xx->segCnt, xx->segs, &orig, &size );
- p00.x = p0y.x = orig.x;
- p00.y = px0.y = orig.y;
- px0.x = pxy.x = orig.x + size.x;
- p0y.y = pxy.y = orig.y + size.y;
- REORIGIN1( p00, xx->angle, xx->orig )
- REORIGIN1( px0, xx->angle, xx->orig )
- REORIGIN1( p0y, xx->angle, xx->orig )
- REORIGIN1( pxy, xx->angle, xx->orig )
- DrawLine( d, p00, px0, 0, color );
- DrawLine( d, px0, pxy, 0, color );
- DrawLine( d, pxy, p0y, 0, color );
- DrawLine( d, p0y, p00, 0, color );
- } else {
- DrawSegs( d, xx->orig, xx->angle, xx->segs, xx->segCnt, 0.0, color );
- if ( ((d->funcs->options&wDrawOptTemp)==0) &&
- (labelWhen == 2 || (labelWhen == 1 && (d->options&DC_PRINT))) &&
- labelScale >= d->scale &&
- ( GetTrkBits( t ) & TB_HIDEDESC ) == 0 ) {
- DrawCompoundDescription( t, d, color );
- }
+
+ d->options &= ~DC_NOTSOLIDLINE;
+ switch(xx->lineType) {
+ case DRAWLINESOLID:
+ break;
+ case DRAWLINEDASH:
+ d->options |= DC_DASH;
+ break;
+ case DRAWLINEDOT:
+ d->options |= DC_DOT;
+ break;
+ case DRAWLINEDASHDOT:
+ d->options |= DC_DASHDOT;
+ break;
+ case DRAWLINEDASHDOTDOT:
+ d->options |= DC_DASHDOTDOT;
+ break;
+ case DRAWLINECENTER:
+ d->options |= DC_CENTER;
+ break;
+ case DRAWLINEPHANTOM:
+ d->options |= DC_CENTER;
+ break;
+ }
+ DrawSegs( d, xx->orig, xx->angle, xx->segs, xx->segCnt, 0.0, color );
+ d->options &= ~DC_NOTSOLIDLINE;
+ if ( ((d->options & DC_SIMPLE)==0) &&
+ (labelWhen == 2 || (labelWhen == 1 && (d->options&DC_PRINT))) &&
+ labelScale >= d->scale &&
+ ( GetTrkBits( t ) & TB_HIDEDESC ) == 0 ) {
+ DrawCompoundDescription( t, d, color );
}
}
-static void ReadStructure(
+static BOOL_T ReadStructure(
char * line )
{
- ReadCompound( line+10, T_STRUCTURE );
+ return ReadCompound( line+10, T_STRUCTURE );
}
@@ -291,12 +383,31 @@ static BOOL_T QueryStructure( track_p trk, int query )
switch ( query ) {
case Q_HAS_DESC:
return TRUE;
+ case Q_IS_STRUCTURE:
+ return TRUE;
default:
return FALSE;
}
}
+static wBool_t CompareStruct( track_cp trk1, track_cp trk2 )
+{
+ struct extraData *xx1 = GetTrkExtraData( trk1 );
+ struct extraData *xx2 = GetTrkExtraData( trk2 );
+ char * cp = message + strlen(message);
+ REGRESS_CHECK_POS( "Orig", xx1, xx2, orig )
+ REGRESS_CHECK_ANGLE( "Angle", xx1, xx2, angle )
+ REGRESS_CHECK_INT( "Flipped", xx1, xx2, flipped )
+ REGRESS_CHECK_INT( "Ungrouped", xx1, xx2, ungrouped )
+ REGRESS_CHECK_INT( "Split", xx1, xx2, split )
+ /* desc orig is not stable
+ REGRESS_CHECK_POS( "DescOrig", xx1, xx2, descriptionOrig ) */
+ REGRESS_CHECK_POS( "DescOff", xx1, xx2, descriptionOff )
+ REGRESS_CHECK_POS( "DescSize", xx1, xx2, descriptionSize )
+ return CompareSegs( xx1->segs, xx1->segCnt, xx1->segs, xx1->segCnt );
+}
+
static trackCmd_t structureCmds = {
"STRUCTURE",
DrawStructure,
@@ -322,7 +433,17 @@ static trackCmd_t structureCmds = {
NULL, /* moveEndPt */
QueryStructure,
UngroupCompound,
- FlipCompound };
+ FlipCompound,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ CompareStruct };
static paramData_t pierPLs[] = {
{ PD_DROPLIST, &pierListInx, "inx", 0, (void*)50, N_("Pier Number") } };
@@ -360,7 +481,6 @@ static void ShowPierL( void )
}
-#ifdef STRUCTCMD
/*****************************************
*
* Structure Dialog
@@ -404,13 +524,14 @@ static void structureChange( long changes )
(changes&CHANGE_PARAMS) == 0 ) )
return;
lastScaleName = curScaleName;
- curStructure = NULL;
+ //curStructure = NULL;
wControlShow( (wControl_p)structureListL, FALSE );
wListClear( structureListL );
maxStructureDim.x = maxStructureDim.y = 0.0;
if (structureInfo_da.cnt <= 0)
return;
curStructure = StructAdd( LABEL_TABBED|LABEL_MANUF|LABEL_PARTNO|LABEL_DESCR, GetLayoutCurScale(), structureListL, &maxStructureDim );
+ wListSetIndex( structureListL, structureInx );
wControlShow( (wControl_p)structureListL, TRUE );
if (curStructure == NULL) {
wDrawClear( structureD.d );
@@ -468,7 +589,7 @@ static void DoStructOk( void )
Reset();
}
-#endif
+
/****************************************
*
@@ -488,6 +609,51 @@ static struct {
static track_p pierTrk;
static EPINX_T pierEp;
+static dynArr_t anchors_da;
+#define anchors(N) DYNARR_N(trkSeg_t,anchors_da,N)
+
+void static CreateArrowAnchor(coOrd pos,ANGLE_T a,DIST_T len) {
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).width = 0;
+ anchors(i).u.l.pos[0] = pos;
+ Translate(&anchors(i).u.l.pos[1],pos,NormalizeAngle(a+135),len);
+ anchors(i).color = wDrawColorBlue;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).width = 0;
+ anchors(i).u.l.pos[0] = pos;
+ Translate(&anchors(i).u.l.pos[1],pos,NormalizeAngle(a-135),len);
+ anchors(i).color = wDrawColorBlue;
+}
+
+void static CreateRotateAnchor(coOrd pos) {
+ DIST_T d = tempD.scale*0.15;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = SEG_CRVLIN;
+ anchors(i).width = 0.5;
+ anchors(i).u.c.center = pos;
+ anchors(i).u.c.a0 = 180.0;
+ anchors(i).u.c.a1 = 360.0;
+ anchors(i).u.c.radius = d*2;
+ anchors(i).color = wDrawColorAqua;
+ coOrd head; //Arrows
+ for (int j=0;j<3;j++) {
+ Translate(&head,pos,j*120,d*2);
+ CreateArrowAnchor(head,NormalizeAngle((j*120)+90),d);
+ }
+}
+
+void static CreateMoveAnchor(coOrd pos) {
+ DYNARR_SET(trkSeg_t,anchors_da,anchors_da.cnt+5);
+ DrawArrowHeads(&DYNARR_N(trkSeg_t,anchors_da,anchors_da.cnt-5),pos,0,TRUE,wDrawColorBlue);
+ DYNARR_SET(trkSeg_t,anchors_da,anchors_da.cnt+5);
+ DrawArrowHeads(&DYNARR_N(trkSeg_t,anchors_da,anchors_da.cnt-5),pos,90,TRUE,wDrawColorBlue);
+}
+
static ANGLE_T PlaceStructure(
coOrd p0,
coOrd p1,
@@ -537,11 +703,9 @@ static void NewStructure( void )
wListGetIndex(pierL) == -1) {
return;
}
- DrawSegs( &tempD, Dst.pos, Dst.angle,
- curStructure->segs, curStructure->segCnt, 0.0, wDrawColorBlack );
UndoStart( _("Place Structure"), "newStruct" );
titleLen = strlen( curStructure->title );
- trk = NewCompound( T_STRUCTURE, 0, Dst.pos, Dst.angle, curStructure->title, 0, NULL, 0, "", curStructure->segCnt, curStructure->segs );
+ trk = NewCompound( T_STRUCTURE, 0, Dst.pos, Dst.angle, curStructure->title, 0, NULL, NULL, 0, "", curStructure->segCnt, curStructure->segs );
xx = GetTrkExtraData(trk);
#ifdef LATER
trk = NewTrack( 0, T_STRUCTURE, 0, sizeof (*xx) + 1 );
@@ -581,6 +745,8 @@ static void NewStructure( void )
}
SetTrkVisible( trk, TRUE );
+ SetTrkNoTies( trk, FALSE);
+ SetTrkBridge( trk, FALSE);
#ifdef LATER
ComputeCompoundBoundingBox( trk );
@@ -600,17 +766,14 @@ static void NewStructure( void )
static void StructRotate( void * pangle )
{
+ if (Dst.state == 0)
+ return;
ANGLE_T angle = (ANGLE_T)(long)pangle;
- if (Dst.state == 1)
- DrawSegs( &tempD, Dst.pos, Dst.angle,
- curStructure->segs, curStructure->segCnt, 0.0, wDrawColorBlack );
- else
- Dst.pos = cmdMenuPos;
+ angle /= 1000.0;
+ Dst.pos = cmdMenuPos;
Rotate( &Dst.pos, cmdMenuPos, angle );
Dst.angle += angle;
- DrawSegs( &tempD, Dst.pos, Dst.angle,
- curStructure->segs, curStructure->segCnt, 0.0, wDrawColorBlack );
- Dst.state = 1;
+ TempRedraw(); // StructRotate
}
@@ -629,64 +792,62 @@ EXPORT STATUS_T CmdStructureAction(
switch (action & 0xFF) {
case C_START:
+ DYNARR_RESET(trkSeg_t,anchors_da);
Dst.state = 0;
Dst.angle = 00.0;
ShowPierL();
+ InfoMessage(_("Left-Drag to place, Ctrl+Left-Drag or Right-Drag to Rotate, Space or Enter to accept, Esc to Cancel"));
return C_CONTINUE;
+ case wActionMove:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ if (Dst.state && (MyGetKeyState()&WKEY_CTRL)) {
+ CreateRotateAnchor(pos);
+ } else {
+ CreateMoveAnchor(pos);
+ }
+ return C_CONTINUE;
+ break;
+
case C_DOWN:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if ( curStructure == NULL ) return C_CONTINUE;
ShowPierL();
- if (Dst.state == 1) {
- DrawSegs( &tempD, Dst.pos, Dst.angle,
- curStructure->segs, curStructure->segCnt, 0.0, wDrawColorBlack );
- } else {
- Dst.pos = pos;
- }
+ Dst.pos = pos;
rot0 = pos;
origPos = Dst.pos;
PlaceStructure( rot0, pos, origPos, &Dst.pos, &Dst.angle );
Dst.state = 1;
- DrawSegs( &tempD, Dst.pos, Dst.angle,
- curStructure->segs, curStructure->segCnt, 0.0, wDrawColorBlack );
InfoMessage( _("Drag to place") );
+ CreateMoveAnchor(pos);
return C_CONTINUE;
case C_MOVE:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if ( curStructure == NULL ) return C_CONTINUE;
- DrawSegs( &tempD, Dst.pos, Dst.angle,
- curStructure->segs, curStructure->segCnt, 0.0, wDrawColorBlack );
PlaceStructure( rot0, pos, origPos, &Dst.pos, &Dst.angle );
- DrawSegs( &tempD, Dst.pos, Dst.angle,
- curStructure->segs, curStructure->segCnt, 0.0, wDrawColorBlack );
- MainRedraw();
- MapRedraw();
+ CreateMoveAnchor(pos);
InfoMessage( "[ %0.3f %0.3f ]", pos.x - origPos.x, pos.y - origPos.y );
return C_CONTINUE;
case C_RDOWN:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if ( curStructure == NULL ) return C_CONTINUE;
- if (Dst.state == 1)
- DrawSegs( &tempD, Dst.pos, Dst.angle,
- curStructure->segs, curStructure->segCnt, 0.0, wDrawColorBlack );
- else
- Dst.pos = pos;
+ if (Dst.state == 0) {
+ Dst.pos = pos; // If first, use pos, otherwise use current
+ }
rot0 = rot1 = pos;
- DrawLine( &tempD, rot0, rot1, 0, wDrawColorBlack );
- Dst.state = 1;
- DrawSegs( &tempD, Dst.pos, Dst.angle,
- curStructure->segs, curStructure->segCnt, 0.0, wDrawColorBlack );
+ CreateRotateAnchor(pos);
origPos = Dst.pos;
origAngle = Dst.angle;
InfoMessage( _("Drag to rotate") );
+ Dst.state = 2;
validAngle = FALSE;
return C_CONTINUE;
case C_RMOVE:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if ( curStructure == NULL ) return C_CONTINUE;
- DrawSegs( &tempD, Dst.pos, Dst.angle,
- curStructure->segs, curStructure->segCnt, 0.0, wDrawColorBlack );
- DrawLine( &tempD, rot0, rot1, 0, wDrawColorBlack );
rot1 = pos;
if ( FindDistance( rot0, rot1 ) > (6.0/75.0)*mainD.scale ) {
angle = FindAngle( rot0, rot1 );
@@ -700,36 +861,37 @@ EXPORT STATUS_T CmdStructureAction(
Rotate( &Dst.pos, rot0, angle );
}
InfoMessage( _("Angle = %0.3f"), Dst.angle );
- DrawLine( &tempD, rot0, rot1, 0, wDrawColorBlack );
- DrawSegs( &tempD, Dst.pos, Dst.angle,
- curStructure->segs, curStructure->segCnt, 0.0, wDrawColorBlack );
+ Dst.state = 2;
+ CreateRotateAnchor(rot0);
return C_CONTINUE;
case C_RUP:
- DrawLine( &tempD, rot0, rot1, 0, wDrawColorBlack );
case C_UP:
- MainRedraw();
- MapRedraw();
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ CreateMoveAnchor(pos);
+ Dst.state = 1;
+ InfoMessage(_("Left-Drag to place, Ctrl+Left-Drag or Right-Drag to Rotate, Space or Enter to accept, Esc to Cancel"));
return C_CONTINUE;
case C_CMDMENU:
- if ( structPopupM == NULL ) {
- structPopupM = MenuRegister( "Structure Rotate" );
- AddRotateMenu( structPopupM, StructRotate );
- }
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ menuPos = pos;
wMenuPopupShow( structPopupM );
return C_CONTINUE;
case C_REDRAW:
- if (Dst.state == 1)
+ if (Dst.state)
DrawSegs( &tempD, Dst.pos, Dst.angle,
- curStructure->segs, curStructure->segCnt, 0.0, wDrawColorBlack );
+ curStructure->segs, curStructure->segCnt, 0.0, wDrawColorBlue );
+ if (anchors_da.cnt>0) {
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
+ }
+ if (Dst.state == 2)
+ DrawLine( &tempD, rot0, rot1, 0, wDrawColorBlack );
return C_CONTINUE;
case C_CANCEL:
- if (Dst.state == 1)
- DrawSegs( &tempD, Dst.pos, Dst.angle,
- curStructure->segs, curStructure->segCnt, 0.0, wDrawColorBlack );
+ DYNARR_RESET(trkSeg_t,anchors_da);
Dst.state = 0;
InfoSubstituteControls( NULL, NULL );
HotBarCancel();
@@ -739,12 +901,15 @@ EXPORT STATUS_T CmdStructureAction(
case C_TEXT:
if ((action>>8) != ' ')
return C_CONTINUE;
+ /*no break*/
case C_OK:
+ DYNARR_RESET(trkSeg_t,anchors_da);
NewStructure();
InfoSubstituteControls( NULL, NULL );
return C_TERMINATE;
case C_FINISH:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if (Dst.state != 0)
CmdStructureAction( C_OK, pos );
else
@@ -791,17 +956,37 @@ static STATUS_T CmdStructure(
ParamGroupRecord( &structurePG );
return CmdStructureAction( action, pos );
+ case wActionMove:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ if (Dst.state && (MyGetKeyState()&WKEY_CTRL)) {
+ CreateRotateAnchor(pos);
+ } else {
+ CreateMoveAnchor(pos);
+ }
+ return C_CONTINUE;
+ break;
case C_DOWN:
+ if (MyGetKeyState()&WKEY_CTRL) {
+ return CmdStructureAction( C_RDOWN, pos );
+ }
+ /* no break*/
case C_RDOWN:
ParamDialogOkActive( &structurePG, TRUE );
if (hideStructureWindow)
wHide( structureW );
+ return CmdStructureAction( action, pos );
case C_MOVE:
+ if (MyGetKeyState()&WKEY_CTRL) {
+ return CmdStructureAction( C_RMOVE, pos );
+ }
+ /*no break*/
case C_RMOVE:
return CmdStructureAction( action, pos );
-
case C_RUP:
case C_UP:
+ if (MyGetKeyState()&WKEY_CTRL) {
+ return CmdStructureAction( C_RUP, pos );
+ }
if (hideStructureWindow)
wShow( structureW );
InfoMessage( _("Left drag to move, right drag to rotate, or press Return or click Ok to finalize") );
@@ -810,11 +995,12 @@ static STATUS_T CmdStructure(
case C_CANCEL:
wHide( structureW );
+ /*no break*/
+ case C_REDRAW:
case C_TEXT:
case C_OK:
case C_FINISH:
case C_CMDMENU:
- case C_REDRAW:
return CmdStructureAction( action, pos );
default:
@@ -848,6 +1034,8 @@ static char * CmdStructureHotBarProc(
case HB_FULLTITLE:
return to->title;
case HB_DRAW:
+ origP->x -= to->orig.x;
+ origP->y -= to->orig.y;
DrawSegs( d, *origP, 0.0, to->segs, to->segCnt, trackGauge, wDrawColorBlack );
return NULL;
}
@@ -867,7 +1055,7 @@ EXPORT void AddHotBarStructures( void )
/*( (strcmp( to->scale, "*" ) == 0 && strcasecmp( curScaleName, "DEMO" ) != 0 ) ||
strncasecmp( to->scale, curScaleName, strlen(to->scale) ) == 0 ) ) )*/
continue;
- AddHotBarElement( to->contentsLabel, to->size, to->orig, FALSE, to->barScale, to, CmdStructureHotBarProc );
+ AddHotBarElement( to->contentsLabel, to->size, to->orig, FALSE, FALSE, to->barScale, to, CmdStructureHotBarProc );
}
}
@@ -885,47 +1073,72 @@ static STATUS_T CmdStructureHotBar(
}
FormatCompoundTitle( listLabels|LABEL_DESCR, curStructure->title );
InfoMessage( _("Place %s and draw into position"), message );
- ParamLoadControls( &structurePG );
- ParamGroupRecord( &structurePG );
+ wIndex_t listIndex = FindListItemByContext( structureListL, curStructure );
+ if ( listIndex > 0 )
+ structureInx = listIndex;
+ //ParamLoadControls( &structurePG );
+ //ParamGroupRecord( &structurePG );
+ return CmdStructureAction( action, pos );
+
+ case wActionMove:
+ return CmdStructureAction( action, pos );
+
+ case C_RDOWN:
+ case C_DOWN:
+ if (MyGetKeyState()&WKEY_CTRL) {
+ return CmdStructureAction( C_RDOWN, pos );
+ }
+ return CmdStructureAction( action, pos );
+
+ case C_RMOVE:
+ case C_MOVE:
+ if (MyGetKeyState()&WKEY_CTRL) {
+ return CmdStructureAction( C_RMOVE, pos );
+ }
return CmdStructureAction( action, pos );
case C_RUP:
case C_UP:
- InfoMessage( _("Left drag to move, right drag to rotate, or press Return or click Ok to finalize") );
+ if (MyGetKeyState()&WKEY_CTRL) {
+ return CmdStructureAction( C_RUP, pos );
+ }
+ InfoMessage( _("Left-Drag to place, Ctrl+Left-Drag or Right-Drag to Rotate, Space or Enter to accept, Esc to Cancel") );
return CmdStructureAction( action, pos );
case C_TEXT:
if ((action>>8) != ' ')
return C_CONTINUE;
+ /*no break*/
case C_OK:
CmdStructureAction( action, pos );
return C_CONTINUE;
case C_CANCEL:
HotBarCancel();
+ /* no break*/
default:
return CmdStructureAction( action, pos );
}
}
-
-#ifdef STRUCTCMD
#include "bitmaps/struct.xpm"
EXPORT void InitCmdStruct( wMenu_p menu )
{
- AddMenuButton( menu, CmdStructure, "cmdStructure", _("Structure"), wIconCreatePixMap(struct_xpm), LEVEL0_50, IC_STICKY|IC_CMDMENU|IC_POPUP2, ACCL_STRUCTURE, NULL );
- structureHotBarCmdInx = AddMenuButton( menu, CmdStructureHotBar, "cmdStructureHotBar", "", NULL, LEVEL0_50, IC_STICKY|IC_CMDMENU|IC_POPUP2, 0, NULL );
+ AddMenuButton( menu, CmdStructure, "cmdStructure", _("Structure"), wIconCreatePixMap(struct_xpm), LEVEL0_50, IC_WANT_MOVE|IC_STICKY|IC_CMDMENU|IC_POPUP2, ACCL_STRUCTURE, NULL );
+ structureHotBarCmdInx = AddMenuButton( menu, CmdStructureHotBar, "cmdStructureHotBar", "", NULL, LEVEL0_50, IC_WANT_MOVE|IC_STICKY|IC_CMDMENU|IC_POPUP2, 0, NULL );
ParamRegister( &structurePG );
+ if ( structPopupM == NULL ) {
+ structPopupM = MenuRegister( "Structure Rotate" );
+ AddRotateMenu( structPopupM, StructRotate );
+ }
}
-#endif
-
EXPORT void InitTrkStruct( void )
{
T_STRUCTURE = InitObject( &structureCmds );
log_structure = LogFindIndex( "Structure" );
- AddParam( "STRUCTURE ", ReadStructureParam );
+ AddParam( "STRUCTURE ", ReadStructureParam);
ParamRegister( &pierPG );
}
diff --git a/app/bin/cswitchmotor.c b/app/bin/cswitchmotor.c
index 09e6709..a8e1c54 100644
--- a/app/bin/cswitchmotor.c
+++ b/app/bin/cswitchmotor.c
@@ -60,6 +60,9 @@
#include "param.h"
#include "track.h"
#include "trackx.h"
+#ifdef WINDOWS
+#include "include/utf8convert.h"
+#endif // WINDOWS
#include "utility.h"
#include "messages.h"
@@ -83,6 +86,9 @@ static char switchmotorReverse[STR_LONG_SIZE];
static char switchmotorPointSense[STR_LONG_SIZE];
static track_p switchmotorTurnout;
+static track_p last_motor;
+static track_p first_motor;
+
static paramData_t switchmotorPLs[] = {
/*0*/ { PD_STRING, switchmotorName, "name", PDO_NOPREF|PDO_STRINGLIMITLENGTH, (void*)200, N_("Name"), 0, 0, sizeof(switchmotorName)},
/*1*/ { PD_STRING, switchmotorNormal, "normal", PDO_NOPREF|PDO_STRINGLIMITLENGTH, (void*)350, N_("Normal"), 0, 0, sizeof(switchmotorNormal)},
@@ -126,6 +132,7 @@ typedef struct switchmotorData_t {
BOOL_T IsHilite;
TRKINX_T turnindx;
track_p turnout;
+ track_p next_motor;
} switchmotorData_t, *switchmotorData_p;
static switchmotorData_p GetswitchmotorData ( track_p trk )
@@ -201,7 +208,7 @@ static void DrawSwitchMotor (track_p t, drawCmd_p d, wDrawColor color )
Translate (&p[iPoint], orig, x_angle, switchmotorPoly_Pix[iPoint].x * switchmotorPoly_SF / scaleRatio );
Translate (&p[iPoint], p[iPoint], y_angle, (10+switchmotorPoly_Pix[iPoint].y) * switchmotorPoly_SF / scaleRatio );
}
- DrawFillPoly(d, switchmotorPoly_CNT, p, wDrawColorBlack);
+ DrawPoly(d, switchmotorPoly_CNT, p, NULL, color, 0, 1, 0);
}
static struct {
@@ -308,7 +315,13 @@ static DIST_T DistanceSwitchMotor (track_p t, coOrd * p )
{
switchmotorData_p xx = GetswitchmotorData(t);
if (xx->turnout == NULL) return 0;
- return GetTrkDistance(xx->turnout,p);
+ coOrd center,hi,lo;
+ GetBoundingBox(t,&hi,&lo);
+ center.x = (hi.x+lo.x)/2;
+ center.y = (hi.y+lo.y)/2;
+ DIST_T d = FindDistance(center,*p);
+ *p = center;
+ return d;
}
static void DescribeSwitchMotor (track_p trk, char * str, CSIZE_T len )
@@ -326,7 +339,7 @@ static void DescribeSwitchMotor (track_p trk, char * str, CSIZE_T len )
*str = tolower((unsigned char)*str);
str++;
}
- sprintf( str, _("(%d): Layer=%d %s"),
+ sprintf( str, _("(%d): Layer=%u %s"),
GetTrkIndex(trk), GetTrkLayer(trk)+1, message );
strncpy(switchmotorData.name,xx->name,STR_SHORT_SIZE-1);
switchmotorData.name[STR_SHORT_SIZE-1] = '\0';
@@ -364,52 +377,89 @@ static void switchmotorDebug (track_p trk)
static void DeleteSwitchMotor ( track_p trk )
{
- LOG( log_switchmotor, 1,("*** DeleteSwitchMotor(%p)\n",trk))
- LOG( log_switchmotor, 1,("*** DeleteSwitchMotor(): index is %d\n",GetTrkIndex(trk)))
- switchmotorData_p xx = GetswitchmotorData(trk);
- LOG( log_switchmotor, 1,("*** DeleteSwitchMotor(): xx = %p, xx->name = %p, xx->normal = %p, xx->reverse = %p, xx->pointsense = %p\n",
+
+ track_p trk1;
+ switchmotorData_p xx1;
+
+ LOG( log_switchmotor, 1,("*** DeleteSwitchMotor(%p)\n",trk))
+ LOG( log_switchmotor, 1,("*** DeleteSwitchMotor(): index is %d\n",GetTrkIndex(trk)))
+ switchmotorData_p xx = GetswitchmotorData(trk);
+ LOG( log_switchmotor, 1,("*** DeleteSwitchMotor(): xx = %p, xx->name = %p, xx->normal = %p, xx->reverse = %p, xx->pointsense = %p\n",
xx,xx->name,xx->normal,xx->reverse,xx->pointsense))
MyFree(xx->name); xx->name = NULL;
MyFree(xx->normal); xx->normal = NULL;
MyFree(xx->reverse); xx->reverse = NULL;
MyFree(xx->pointsense); xx->pointsense = NULL;
+ if (first_motor == trk)
+ first_motor = xx->next_motor;
+ trk1 = first_motor;
+ while(trk1) {
+ xx1 = GetswitchmotorData (trk1);
+ if (xx1->next_motor == trk) {
+ xx1->next_motor = xx->next_motor;
+ break;
+ }
+ trk1 = xx1->next_motor;
+ }
+ if (trk == last_motor)
+ last_motor = trk1;
}
static BOOL_T WriteSwitchMotor ( track_p t, FILE * f )
{
BOOL_T rc = TRUE;
switchmotorData_p xx = GetswitchmotorData(t);
+ char *switchMotorName = MyStrdup(xx->name);
- if (xx->turnout == NULL) return FALSE;
+#ifdef WINDOWS
+ switchMotorName = Convert2UTF8(switchMotorName);
+#endif // WINDOWS
+
+ if (xx->turnout == NULL)
+ return FALSE;
rc &= fprintf(f, "SWITCHMOTOR %d %d \"%s\" \"%s\" \"%s\" \"%s\"\n",
- GetTrkIndex(t), GetTrkIndex(xx->turnout), xx->name,
+ GetTrkIndex(t), GetTrkIndex(xx->turnout), switchMotorName,
xx->normal, xx->reverse, xx->pointsense)>0;
+
+ MyFree(switchMotorName);
return rc;
}
-static void ReadSwitchMotor ( char * line )
+static BOOL_T ReadSwitchMotor ( char * line )
{
TRKINX_T trkindex;
wIndex_t index;
- track_p trk;
- switchmotorData_p xx;
+ track_p trk,last_trk;
+ switchmotorData_p xx,xx1;
char *name, *normal, *reverse, *pointsense;
LOG( log_switchmotor, 1, ("*** ReadSwitchMotor: line is '%s'\n",line))
if (!GetArgs(line+12,"ddqqqq",&index,&trkindex,&name,&normal,&reverse,&pointsense)) {
- return;
+ return FALSE;
}
+#ifdef WINDOWS
+ ConvertUTF8ToSystem(name);
+#endif // WINDOWS
trk = NewTrack(index, T_SWITCHMOTOR, 0, sizeof(switchmotorData_t)+1);
xx = GetswitchmotorData( trk );
xx->name = name;
xx->normal = normal;
xx->reverse = reverse;
xx->pointsense = pointsense;
- xx->turnindx = trkindex;
+ xx->turnindx = trkindex;
+ if (last_motor) {
+ last_trk = last_motor;
+ xx1 = GetswitchmotorData(last_trk);
+ xx1->next_motor = trk;
+ } else first_motor = trk;
+ xx->next_motor = NULL;
+ last_motor = trk;
+
LOG( log_switchmotor, 1,("*** ReadSwitchMotor(): trk = %p (%d), xx = %p\n",trk,GetTrkIndex(trk),xx))
LOG( log_switchmotor, 1,("*** ReadSwitchMotor(): name = %p, normal = %p, reverse = %p, pointsense = %p\n",
name,normal,reverse,pointsense))
switchmotorDebug(trk);
+ return TRUE;
}
EXPORT void ResolveSwitchmotorTurnout ( track_p trk )
@@ -472,19 +522,21 @@ static track_p FindSwitchMotor (track_p trk)
track_p a_trk;
switchmotorData_p xx;
- for (a_trk = NULL; TrackIterate( &a_trk ) ;) {
- if (GetTrkType(a_trk) == T_SWITCHMOTOR) {
- xx = GetswitchmotorData(a_trk);
+ a_trk = first_motor;
+ while (a_trk) {
+ xx = GetswitchmotorData(a_trk);
+ if (!IsTrackDeleted(a_trk)) {
if (xx->turnout == trk) return a_trk;
}
+ a_trk = xx->next_motor;
}
return NULL;
}
static void SwitchMotorOk ( void * junk )
{
- switchmotorData_p xx;
- track_p trk;
+ switchmotorData_p xx,xx1;
+ track_p trk,trk1;
LOG( log_switchmotor, 1, ("*** SwitchMotorOk()\n"))
ParamUpdate (&switchmotorPG );
@@ -502,12 +554,19 @@ static void SwitchMotorOk ( void * junk )
xx->reverse = MyStrdup(switchmotorReverse);
xx->pointsense = MyStrdup(switchmotorPointSense);
xx->turnout = switchmotorTurnout;
- LOG( log_switchmotor, 1,("*** SwitchMotorOk(): trk = %p (%d), xx = %p\n",trk,GetTrkIndex(trk),xx))
+ trk1 = last_motor;
+ if (trk1) {
+ xx1 = GetswitchmotorData( trk1 );
+ xx1->next_motor = trk;
+ } else first_motor = trk;
+ xx->next_motor = NULL;
+ last_motor = trk;
+ LOG( log_switchmotor, 1,("*** SwitchMotorOk(): trk = %p (%d), xx = %p\n",trk,GetTrkIndex(trk),xx))
switchmotorDebug(trk);
UndoEnd();
- wHide( switchmotorW );
- ComputeSwitchMotorBoundingBox(trk);
- DrawNewTrack(trk);
+ wHide( switchmotorW );
+ ComputeSwitchMotorBoundingBox(trk);
+ DrawNewTrack(trk);
}
static void NewSwitchMotorDialog(track_p trk)
@@ -704,7 +763,7 @@ static void DrawSWMotorTrackHilite( void )
w = (wPos_t)((swmhiliteSize.x/mainD.scale)*mainD.dpi+0.5);
h = (wPos_t)((swmhiliteSize.y/mainD.scale)*mainD.dpi+0.5);
mainD.CoOrd2Pix(&mainD,swmhiliteOrig,&x,&y);
- wDrawFilledRectangle( mainD.d, x, y, w, h, swmhiliteColor, wDrawOptTemp );
+ wDrawFilledRectangle( mainD.d, x, y, w, h, swmhiliteColor, wDrawOptTemp|wDrawOptTransparent );
}
static int SwitchmotorMgmProc ( int cmd, void * data )
@@ -805,6 +864,7 @@ EXPORT void CheckDeleteSwitchmotor(track_p t)
{
track_p sm;
switchmotorData_p xx;
+ if (GetTrkType( t ) != T_TURNOUT) return; // SMs only on turnouts
while ((sm = FindSwitchMotor( t ))) { //Cope with multiple motors for one Turnout!
xx = GetswitchmotorData (sm);
diff --git a/app/bin/ctext.c b/app/bin/ctext.c
index ca0c7c7..c292d1c 100644
--- a/app/bin/ctext.c
+++ b/app/bin/ctext.c
@@ -30,7 +30,7 @@
#include "draw.h"
#include "misc.h"
-track_p NewText( wIndex_t index, coOrd p, ANGLE_T angle, char * text, CSIZE_T textSize, wDrawColor color );
+track_p NewText( wIndex_t index, coOrd p, ANGLE_T angle, char * text, CSIZE_T textSize, wDrawColor color, BOOL_T boxed );
void LoadFontSizeList( wList_p, long );
void UpdateFontSizeList( long *, wList_p, wIndex_t );
@@ -57,13 +57,17 @@ static struct {
wIndex_t fontSizeInx;
char text[STR_LONG_SIZE];
wDrawColor color;
+ BOOL_T boxed;
} Dt;
+static char * boxLabels[] = { "", NULL };
static paramData_t textPLs[] = {
#define textPD (textPLs[0])
- { PD_DROPLIST, &Dt.fontSizeInx, "fontsize", 0, NULL, N_("Font Size"), BL_EDITABLE },
+ { PD_DROPLIST, &Dt.fontSizeInx, "Fontsize", 0, NULL, N_("Font Size"), BL_EDITABLE },
#define colorPD (textPLs[1])
- { PD_COLORLIST, &Dt.color, "color", PDO_NORECORD, NULL, N_("Color") }
+ { PD_COLORLIST, &Dt.color, "Color", PDO_NORECORD, NULL, N_("Color") },
+#define boxPD (textPLs[2])
+ { PD_TOGGLE, &Dt.boxed, "Boxed", 0, boxLabels, N_("Boxed"), 0 }
};
static paramGroup_t textPG = { "text", 0, textPLs, sizeof textPLs/sizeof textPLs[0] };
@@ -83,29 +87,21 @@ static void TextDlgUpdate(
switch (inx) {
case 0:
case 1:
- if ( Dt.state == SHOW_TEXT) {
- DrawMultiString( &tempD, Dt.pos, Dt.text, NULL, (FONTSIZE_T)Dt.size, Dt.color, 0, NULL, NULL );
- DrawLine( &tempD, Dt.cursPos0, Dt.cursPos1, 0, Dt.color );
- }
+ case 2:
UpdateFontSizeList( &Dt.size, (wList_p)textPLs[0].control, Dt.fontSizeInx );
- /*wWinSetBusy( mainW, TRUE );*/
if ( Dt.state == SHOW_TEXT) {
DrawMultiLineTextSize( &mainD, Dt.text, NULL, Dt.size, TRUE, &size, &lastline);
Dt.textLen = size.x;
Dt.lastLineLen = lastline.x;
Dt.lastLineOffset = lastline.y;
}
+ wSetSelectedFontSize((wFontSize_t)Dt.size); //Update for next time
DrawTextSize( &mainD, "Aquilp", NULL, Dt.size, TRUE, &size );
Dt.cursHeight = size.y;
- /*wWinSetBusy( mainW, FALSE );*/
if ( Dt.state == SHOW_TEXT) {
Dt.cursPos0.x = Dt.cursPos1.x = Dt.pos.x+Dt.lastLineLen;
Dt.cursPos1.y = Dt.pos.y+Dt.cursHeight+Dt.lastLineOffset;
- DrawLine( &tempD, Dt.cursPos0, Dt.cursPos1, 0, Dt.color );
- DrawMultiString( &tempD, Dt.pos, Dt.text, NULL, (FONTSIZE_T)Dt.size, Dt.color, 0, NULL, NULL );
}
- MainRedraw();
- MapRedraw();
break;
}
}
@@ -115,8 +111,8 @@ static STATUS_T CmdText( wAction_t action, coOrd pos )
{
track_p t;
unsigned char c;
- wControl_p controls[3];
- char * labels[2];
+ wControl_p controls[4];
+ char * labels[3];
coOrd size, lastline;
switch (action & 0xFF) {
@@ -141,23 +137,21 @@ static STATUS_T CmdText( wAction_t action, coOrd pos )
ParamLoadControls(&textPG);
ParamGroupRecord( &textPG );
- if (!inPlayback)
- wWinSetBusy(mainW, TRUE);
DrawTextSize(&mainD, "Aquilp", NULL, Dt.size, TRUE, &size);
Dt.cursHeight = size.y;
- if (!inPlayback)
- wWinSetBusy(mainW, FALSE);
controls[0] = textPD.control;
controls[1] = colorPD.control;
- controls[2] = 0;
+ controls[2] = boxPD.control;
+ controls[3] = 0;
labels[0] = N_("Font Size");
labels[1] = N_("Color");
+ labels[2] = N_("Boxed");
InfoSubstituteControls( controls, labels );
return C_CONTINUE;
break;
case C_DOWN:
- if (Dt.state != 0) {
+ if (Dt.state != POSITION_TEXT) {
}
Dt.pos = pos;
Dt.cursPos0.y = Dt.cursPos1.y = pos.y + Dt.lastLineOffset;
@@ -165,21 +159,13 @@ static STATUS_T CmdText( wAction_t action, coOrd pos )
DrawTextSize(&mainD, "Aquilp", NULL, Dt.size, TRUE, &size); //In case fontsize change
Dt.cursHeight = size.y;
Dt.cursPos1.y += Dt.cursHeight;
- DrawLine( &tempD, Dt.cursPos0, Dt.cursPos1, 0, Dt.color );
- DrawMultiString(&tempD, Dt.pos, Dt.text, NULL, (FONTSIZE_T)Dt.size, Dt.color, 0.0, NULL, NULL );
Dt.state = SHOW_TEXT;
- MainRedraw();
- MapRedraw();
return C_CONTINUE;
case C_MOVE:
Dt.pos = pos;
Dt.cursPos0.y = Dt.cursPos1.y = pos.y + Dt.lastLineOffset;
Dt.cursPos0.x = Dt.cursPos1.x = pos.x + Dt.lastLineLen;
Dt.cursPos1.y += Dt.cursHeight;
- DrawLine( &tempD, Dt.cursPos0, Dt.cursPos1, 0, wDrawColorBlack );
- DrawMultiString(&tempD, Dt.pos, Dt.text, NULL, (FONTSIZE_T)Dt.size, Dt.color, 0.0, NULL, NULL );
- MainRedraw();
- MapRedraw();
return C_CONTINUE;
case C_UP:
return C_CONTINUE;
@@ -188,8 +174,7 @@ static STATUS_T CmdText( wAction_t action, coOrd pos )
NoticeMessage( MSG_SEL_POS_FIRST, _("Ok"), NULL );
return C_CONTINUE;
}
- DrawLine( &tempD, Dt.cursPos0, Dt.cursPos1, 0, Dt.color );
- DrawMultiString(&tempD, Dt.pos, Dt.text, NULL, (FONTSIZE_T)Dt.size, Dt.color, 0.0, NULL, NULL );
+
c = (unsigned char)(action >> 8);
switch (c) {
case '\b':
@@ -209,7 +194,7 @@ static STATUS_T CmdText( wAction_t action, coOrd pos )
break;
case '\015':
UndoStart( _("Create Text"), "newText - CR" );
- t = NewText( 0, Dt.pos, Dt.angle, Dt.text, (CSIZE_T)Dt.size, Dt.color );
+ t = NewText( 0, Dt.pos, Dt.angle, Dt.text, (CSIZE_T)Dt.size, Dt.color, Dt.boxed );
UndoEnd();
DrawNewTrack(t);
Dt.state = POSITION_TEXT;
@@ -227,42 +212,33 @@ static STATUS_T CmdText( wAction_t action, coOrd pos )
Dt.lastLineOffset = lastline.y;
Dt.cursPos0.x = Dt.cursPos1.x = Dt.pos.x + Dt.lastLineLen;
Dt.cursPos0.y = Dt.cursPos1.y = Dt.pos.y + Dt.lastLineOffset;
- DrawTextSize(&mainD, "Aquilp", NULL, Dt.size, TRUE, &size); //In case fontsize change
+ POS_T descent, ascent;
+ DrawTextSize2(&mainD, "Aquilp", NULL, Dt.size, TRUE, &size, &descent, &ascent); //In case fontsize change
Dt.cursHeight = size.y;
+ Dt.cursPos0.y -=descent;
Dt.cursPos1.y +=Dt.cursHeight;
- MainRedraw();
- MapRedraw();
- //DrawLine( &tempD, Dt.cursPos0, Dt.cursPos1, 0, Dt.color );
- //DrawMultiString(&tempD, Dt.pos, Dt.text, NULL, (FONTSIZE_T)Dt.size, Dt.color, 0.0, NULL, NULL );
return C_CONTINUE;
case C_REDRAW:
- if (Dt.state == 1) {
- DrawLine( &tempD, Dt.cursPos0, Dt.cursPos1, 0, Dt.color );
- DrawMultiString(&tempD, Dt.pos, Dt.text, NULL, (FONTSIZE_T)Dt.size, Dt.color, 0.0, NULL, NULL );
- }
+ DrawLine( &tempD, Dt.cursPos0, Dt.cursPos1, 0, Dt.color );
+ DrawMultiString(&tempD, Dt.pos, Dt.text, NULL, (FONTSIZE_T)Dt.size, Dt.color, 0.0, NULL, NULL, Dt.boxed );
return C_CONTINUE;
case C_CANCEL:
if (Dt.state != POSITION_TEXT) {
Dt.state = POSITION_TEXT;
}
InfoSubstituteControls( NULL, NULL );
- MainRedraw();
- MapRedraw();
return C_TERMINATE;
case C_OK:
if (Dt.state != POSITION_TEXT) {
- DrawLine( &tempD, Dt.cursPos0, Dt.cursPos1, 0, Dt.color );
Dt.state = POSITION_TEXT;
if (Dt.len) {
UndoStart( _("Create Text"), "newText - OK" );
- t = NewText( 0, Dt.pos, Dt.angle, Dt.text, (CSIZE_T)Dt.size, Dt.color );
+ t = NewText( 0, Dt.pos, Dt.angle, Dt.text, (CSIZE_T)Dt.size, Dt.color, Dt.boxed );
UndoEnd();
DrawNewTrack(t);
}
}
InfoSubstituteControls( NULL, NULL );
- MainRedraw();
- MapRedraw();
return C_TERMINATE;
case C_FINISH:
@@ -273,6 +249,7 @@ static STATUS_T CmdText( wAction_t action, coOrd pos )
return C_TERMINATE;
case C_CMDMENU:
+ menuPos = pos;
wMenuPopupShow( textPopupM );
return C_CONTINUE;
}
diff --git a/app/bin/ctodesgn.c b/app/bin/ctodesgn.c
index 27acbb6..dc118a1 100644
--- a/app/bin/ctodesgn.c
+++ b/app/bin/ctodesgn.c
@@ -41,9 +41,17 @@
#include "param.h"
#include "track.h"
#include "utility.h"
+#include "ccornu.h"
+#include "cbezier.h"
+#include "misc.h"
+
+dynArr_t tempSegs_da;
+dynArr_t tempEndPts_da;
+char tempCustom[4096];
#define TURNOUTDESIGNER "CTURNOUT DESIGNER"
+dynArr_t tempSegs_da;
/*****************************************
@@ -67,6 +75,9 @@
#define NTO_CRV_SECTION (12)
#define NTO_BUMPER (13)
#define NTO_TURNTABLE (14)
+#define NTO_CORNU (15)
+#define NTO_CORNUWYE (16)
+#define NTO_CORNU3WAY (17)
#define FLOAT (1)
@@ -78,7 +89,7 @@ typedef struct {
int index;
char * winLabel;
char * printLabel;
- enum { Dim_e, Frog_e, Angle_e } mode;
+ enum { Dim_e, Frog_e, Angle_e, Rad_e } mode;
} toDesignFloat_t;
typedef struct {
@@ -97,27 +108,48 @@ typedef struct {
toDesignSchema_t * paths;
int angleModeCnt;
wLine_p lineC;
+ wBool_t slipmode;
} toDesignDesc_t;
static wWin_p newTurnW;
+
+static FLOAT_T newTurnRad0;
+static FLOAT_T newTurnAngle0;
static FLOAT_T newTurnLen0;
+static FLOAT_T newTurnOff0;
+
+static FLOAT_T newTurnRad1;
+static FLOAT_T newTurnAngle1;
static FLOAT_T newTurnLen1;
static FLOAT_T newTurnOff1;
-static FLOAT_T newTurnAngle1;
+
+static FLOAT_T newTurnRad2;
+static FLOAT_T newTurnAngle2;
static FLOAT_T newTurnLen2;
static FLOAT_T newTurnOff2;
-static FLOAT_T newTurnAngle2;
+
+static FLOAT_T newTurnRad3;
+static FLOAT_T newTurnAngle3;
+static FLOAT_T newTurnOff3;
+static FLOAT_T newTurnLen3;
+
+static FLOAT_T newTurnToeL;
+static FLOAT_T newTurnToeR;
+
static long newTurnAngleMode = 1;
+static long newTurnSlipMode = 0;
static char newTurnRightDesc[STR_SIZE], newTurnLeftDesc[STR_SIZE];
static char newTurnRightPartno[STR_SIZE], newTurnLeftPartno[STR_SIZE];
static char newTurnManufacturer[STR_SIZE];
static char *newTurnAngleModeLabels[] = { N_("Frog #"), N_("Degrees"), NULL };
+static char *newTurnSlipModeLabels[] = { N_("Dual Path"), N_("Quad Path"), NULL };
static DIST_T newTurnRoadbedWidth;
static long newTurnRoadbedLineWidth = 0;
static wDrawColor roadbedColor;
static DIST_T newTurnTrackGauge;
static char * newTurnScaleName;
static paramFloatRange_t r0_10000 = { 0, 10000, 80 };
+static paramFloatRange_t r_10000_10000 = {-10000, 10000, 80 };
static paramFloatRange_t r0_360 = { 0, 360, 80 };
static paramFloatRange_t r0_100 = { 0, 100, 80 };
static paramIntegerRange_t i0_100 = { 0, 100, 40 };
@@ -126,7 +158,13 @@ static void ShowTurnoutDesigner( void * );
static coOrd points[20];
-static DIST_T radii[10] = { 0.0 };
+static coOrd end_points[20];
+static coOrd end_centers[20];
+static double end_arcs[20];
+static double end_angles[20];
+static DIST_T radii[10];
+static double angles[10];
+
#define POSX(X) ((wPos_t)((X)*newTurnout_d.dpi))
#define POSY(Y) ((wPos_t)((Y)*newTurnout_d.dpi))
@@ -134,22 +172,35 @@ static DIST_T radii[10] = { 0.0 };
static paramData_t turnDesignPLs[] = {
#define I_TOLENGTH (0)
#define I_TO_FIRST_FLOAT (0)
+ { PD_FLOAT, &newTurnLen0, "len0", PDO_DIM|PDO_DLGIGNORELABELWIDTH, &r0_10000, N_("Length") },
{ PD_FLOAT, &newTurnLen1, "len1", PDO_DIM|PDO_DLGIGNORELABELWIDTH, &r0_10000, N_("Length") },
{ PD_FLOAT, &newTurnLen2, "len2", PDO_DIM|PDO_DLGIGNORELABELWIDTH, &r0_10000, N_("Length") },
- { PD_FLOAT, &newTurnLen0, "len0", PDO_DIM|PDO_DLGIGNORELABELWIDTH, &r0_10000, N_("Length") },
-#define I_TOOFFSET (3)
- { PD_FLOAT, &newTurnOff1, "off1", PDO_DIM|PDO_DLGIGNORELABELWIDTH, &r0_10000, N_("Offset") },
- { PD_FLOAT, &newTurnOff2, "off2", PDO_DIM|PDO_DLGIGNORELABELWIDTH, &r0_10000, N_("Offset") },
-#define I_TOANGLE (5)
+ { PD_FLOAT, &newTurnLen3, "len3", PDO_DIM|PDO_DLGIGNORELABELWIDTH, &r0_10000, N_("Length") },
+#define I_TOOFFSET (4)
+ { PD_FLOAT, &newTurnOff0, "off0", PDO_DIM|PDO_DLGIGNORELABELWIDTH, &r_10000_10000, N_("Offset") },
+ { PD_FLOAT, &newTurnOff1, "off1", PDO_DIM|PDO_DLGIGNORELABELWIDTH, &r_10000_10000, N_("Offset") },
+ { PD_FLOAT, &newTurnOff2, "off2", PDO_DIM|PDO_DLGIGNORELABELWIDTH, &r_10000_10000, N_("Offset") },
+ { PD_FLOAT, &newTurnOff3, "off3", PDO_DIM|PDO_DLGIGNORELABELWIDTH, &r_10000_10000, N_("Offset") },
+#define I_TORAD (8)
+ { PD_FLOAT, &newTurnRad0, "rad0", PDO_DIM|PDO_DLGIGNORELABELWIDTH, &r_10000_10000, N_("Radius") },
+ { PD_FLOAT, &newTurnRad1, "rad1", PDO_DIM|PDO_DLGIGNORELABELWIDTH, &r_10000_10000, N_("Radius") },
+ { PD_FLOAT, &newTurnRad2, "rad2", PDO_DIM|PDO_DLGIGNORELABELWIDTH, &r_10000_10000, N_("Radius") },
+ { PD_FLOAT, &newTurnRad3, "rad3", PDO_DIM|PDO_DLGIGNORELABELWIDTH, &r_10000_10000, N_("Radius") },
+#define I_TOTOELENGTH (12)
+ { PD_FLOAT, &newTurnToeL, "toeL", PDO_DIM|PDO_DLGIGNORELABELWIDTH, &r0_10000, N_("Length") },
+ { PD_FLOAT, &newTurnToeR, "toeR", PDO_DIM|PDO_DLGIGNORELABELWIDTH, &r0_10000, N_("Length") },
+#define I_TOANGLE (14)
+ { PD_FLOAT, &newTurnAngle0, "angle0", PDO_DLGIGNORELABELWIDTH, &r0_360, N_("Angle") },
{ PD_FLOAT, &newTurnAngle1, "angle1", PDO_DLGIGNORELABELWIDTH, &r0_360, N_("Angle") },
-#define I_TO_LAST_FLOAT (6)
{ PD_FLOAT, &newTurnAngle2, "angle2", PDO_DLGIGNORELABELWIDTH, &r0_360, N_("Angle") },
-#define I_TOMANUF (7)
+#define I_TO_LAST_FLOAT (17)
+ { PD_FLOAT, &newTurnAngle3, "angle3", PDO_DLGIGNORELABELWIDTH, &r0_360, N_("Angle") },
+#define I_TOMANUF (18)
{ PD_STRING, &newTurnManufacturer, "manuf", PDO_STRINGLIMITLENGTH, NULL, N_("Manufacturer"), 0, 0, sizeof(newTurnManufacturer)},
-#define I_TOLDESC (8)
+#define I_TOLDESC (19)
{ PD_STRING, &newTurnLeftDesc, "desc1", PDO_STRINGLIMITLENGTH, NULL, N_("Left Description"), 0, 0, sizeof(newTurnLeftDesc)},
{ PD_STRING, &newTurnLeftPartno, "partno1", PDO_DLGHORZ | PDO_STRINGLIMITLENGTH, NULL, N_(" #"), 0, 0, sizeof(newTurnLeftPartno)},
-#define I_TORDESC (10)
+#define I_TORDESC (21)
{ PD_STRING, &newTurnRightDesc, "desc2", PDO_STRINGLIMITLENGTH, NULL, N_("Right Description"),0, 0, sizeof(newTurnRightDesc)},
{ PD_STRING, &newTurnRightPartno, "partno2", PDO_DLGHORZ | PDO_STRINGLIMITLENGTH, NULL, N_(" #"),0, 0, sizeof(newTurnRightPartno)},
{ PD_FLOAT, &newTurnRoadbedWidth, "roadbedWidth", PDO_DIM, &r0_100, N_("Roadbed Width") },
@@ -157,11 +208,13 @@ static paramData_t turnDesignPLs[] = {
{ PD_COLORLIST, &roadbedColor, "color", PDO_DLGHORZ|PDO_DLGBOXEND, NULL, N_("Color") },
{ PD_BUTTON, (void*)NewTurnOk, "done", PDO_DLGCMDBUTTON, NULL, N_("Ok") },
{ PD_BUTTON, (void*)wPrintSetup, "printsetup", 0, NULL, N_("Print Setup") },
-#define I_TOANGMODE (17)
- { PD_RADIO, &newTurnAngleMode, "angleMode", 0, newTurnAngleModeLabels }
+#define I_TOANGMODE (28)
+ { PD_RADIO, &newTurnAngleMode, "angleMode", 0, newTurnAngleModeLabels },
+#define I_TOSLIPMODE (29)
+ { PD_RADIO, &newTurnSlipMode, "slipMode", 0, newTurnSlipModeLabels }
};
-
#ifndef MKTURNOUT
+
static paramGroup_t turnDesignPG = { "turnoutNew", 0, turnDesignPLs, sizeof turnDesignPLs/sizeof turnDesignPLs[0] };
static turnoutInfo_t * customTurnout1, * customTurnout2;
@@ -188,7 +241,7 @@ static toDesignFloat_t RegFloats[] = {
{ { 175, 10 }, I_TOLENGTH+0, N_("Length"), N_("Diverging Length"), Dim_e },
{ { 400, 28 }, I_TOANGLE+0, N_("Angle"), N_("Diverging Angle"), Frog_e },
{ { 325, 68 }, I_TOOFFSET+0, N_("Offset"), N_("Diverging Offset"), Dim_e },
-{ { 100, 120 }, I_TOLENGTH+2, N_("Length"), N_("Overall Length"), Dim_e },
+{ { 100, 120 }, I_TOLENGTH+1, N_("Length"), N_("Overall Length"), Dim_e },
};
static signed char RegPaths[] = {
'N', 'o', 'r', 'm', 'a', 'l', 0, 1, 2, 0, 0,
@@ -241,6 +294,34 @@ static toDesignDesc_t CrvDesc = {
sizeof CrvFloats/sizeof CrvFloats[0], CrvFloats,
&Crv1Schema, 1 };
+static wLines_t CornuLines[] = {
+#include "tocornu.lin"
+ };
+static toDesignFloat_t CornuFloats[] = {
+{ { 175, 10 }, I_TOLENGTH+0, N_("Length"), N_("Inner Length"), Dim_e },
+{ { 375, 0 }, I_TOANGLE+0, N_("Angle"), N_("Inner Angle"), Frog_e },
+{ { 375, 22 }, I_TOOFFSET+0, N_("Offset"), N_("Inner Offset"), Dim_e },
+{ { 375, 44 }, I_TORAD+0, N_("Radius"), N_("Inner Radius"), Dim_e },
+{ { 400, 62 }, I_TOANGLE+1, N_("Angle"), N_("Outer Angle"), Frog_e },
+{ { 400, 84 }, I_TOOFFSET+1, N_("Offset"), N_("Outer Offset"), Dim_e },
+{ { 400, 106 }, I_TORAD+1, N_("Radius"), N_("Outer Radius"), Dim_e },
+{ { 175, 120 }, I_TOLENGTH+1, N_("Length"), N_("Outer Length"), Dim_e },
+{ { 50, 90 }, I_TORAD+2, N_("Radius"), N_("Toe Radius"), Dim_e },
+{ { 50, 40 }, I_TOTOELENGTH+0, N_("Length"), N_("Toe Length"), Dim_e } };
+static signed char CornuPaths[] = {
+ 'N', 'o', 'r', 'm', 'a', 'l', 0, 1, 4, 0, 0, 0,
+ 'R', 'e', 'v', 'e', 'r', 's', 'e', 0, 1, 2, 0, 0, 0, 0 };
+static toDesignSchema_t CornuSchema = {
+ CornuPaths,
+ "033" "343" "413" };
+
+static toDesignDesc_t CornuDesc = {
+ NTO_CORNU,
+ N_("Cornu Curved Turnout"),
+ 2,
+ sizeof CornuLines/sizeof CornuLines[0], CornuLines,
+ sizeof CornuFloats/sizeof CornuFloats[0], CornuFloats,
+ &CornuSchema, 1 };
static wLines_t WyeLines[] = {
#include "towye.lin"
@@ -279,6 +360,35 @@ static toDesignDesc_t WyeDesc = {
sizeof WyeFloats/sizeof WyeFloats[0], WyeFloats,
NULL, 1 };
+static wLines_t CornuWyeLines[] = {
+#include "tocornuwye.lin"
+ };
+static toDesignFloat_t CornuWyeFloats[] = {
+{ { 175, 10 }, I_TOLENGTH+0, N_("Length"), N_("Left Length"), Dim_e },
+{ { 400, 28 }, I_TOANGLE+0, N_("Angle"), N_("Left Angle"), Frog_e },
+{ { 400, 48 }, I_TOOFFSET+0, N_("Offset"), N_("Left Offset"), Dim_e },
+{ { 400, 68 }, I_TORAD+0, N_("Radius"), N_("Left Radius"), Dim_e },
+{ { 400, 108 }, I_TORAD+1, N_("Radius"), N_("Right Radius"), Dim_e },
+{ { 400, 128 }, I_TOOFFSET+1, N_("Offset"), N_("Right Offset"), Dim_e },
+{ { 400, 148 }, I_TOANGLE+1, N_("Angle"), N_("Right Angle"), Frog_e },
+{ { 175, 170 }, I_TOLENGTH+1, N_("Length"), N_("Right Length"), Dim_e },
+{ { 80, 48 }, I_TOTOELENGTH+0, N_("Length"), N_("Toe Length"), Dim_e },
+{ { 80, 28 }, I_TORAD+2, N_("Radius"), N_("Toe Radius"), Dim_e },
+ };
+static signed char CornuWyePaths[] = {
+ 'L', 'e', 'f', 't', 0, 1, 2, 3, 0, 0,
+ 'R', 'i', 'g', 'h', 't', 0, 1, 4, 5, 0, 0, 0 }; /* Not Used */
+static toDesignSchema_t CornuWyeSchema = {
+ CornuWyePaths,
+ "030" "341" "410" "362" "620" }; /* Not Used */
+static toDesignDesc_t CornuWyeDesc = {
+ NTO_CORNUWYE,
+ N_("Cornu Wye Turnout"),
+ 1,
+ sizeof CornuWyeLines/sizeof CornuWyeLines[0], CornuWyeLines,
+ sizeof CornuWyeFloats/sizeof CornuWyeFloats[0], CornuWyeFloats,
+ NULL, 1 };
+
static wLines_t ThreewayLines[] = {
#include "to3way.lin"
};
@@ -320,6 +430,41 @@ static toDesignDesc_t ThreewayDesc = {
sizeof ThreewayFloats/sizeof ThreewayFloats[0], ThreewayFloats,
NULL, 1 };
+static wLines_t CornuThreewayLines[] = {
+#include "tocornu3way.lin"
+ };
+static toDesignFloat_t CornuThreewayFloats[] = {
+{ { 175, 10 }, I_TOLENGTH+0, N_("Length"), N_("Left Length"), Dim_e },
+{ { 380, 10 }, I_TOANGLE+0, N_("Angle"), N_("Left Angle"), Frog_e },
+{ { 380, 50 }, I_TOOFFSET+0, N_("Offset"), N_("Left Offset"), Dim_e },
+{ { 380, 30 }, I_TORAD+0, N_("Radius"), N_("Left Radius"), Dim_e },
+{ { 130, 90 }, I_TOLENGTH+3, N_("Length"), N_("Center Length"), Dim_e },
+{ { 400, 70 }, I_TOANGLE+3, N_("Angle"), N_("Center Angle"), Dim_e },
+{ { 400, 90}, I_TOOFFSET+3, N_("Offset"), N_("Center Offset"), Dim_e },
+{ { 400, 110 }, I_TORAD+3, N_("Radius"), N_("Center Radius"), Dim_e },
+{ { 420, 150 }, I_TORAD+1, N_("Radius"), N_("Right Radius"), Dim_e },
+{ { 420, 130 }, I_TOOFFSET+1, N_("Offset"), N_("Right Offset"), Dim_e },
+{ { 420, 170 }, I_TOANGLE+1, N_("Angle"), N_("Right Angle"), Frog_e },
+{ { 175, 170 }, I_TOLENGTH+1, N_("Length"), N_("Right Length"), Dim_e },
+{ { 45, 50 }, I_TOTOELENGTH+0, N_("Length"), N_("Toe Length Left"), Dim_e },
+{ { 55, 140 }, I_TOTOELENGTH+1, N_("Length"), N_("Toe Length Right"), Dim_e },
+{ { 40, 105 }, I_TORAD+2, N_("Radius"), N_("Toe Radius"), Dim_e },
+ };
+static signed char CornuTriPaths[] = {
+ 'L', 'e', 'f', 't', 0, 1, 2, 3, 0, 0,
+ 'N', 'o', 'r', 'm', 'a', 'l', 0, 1, 6, 0, 0,
+ 'R', 'i', 'g', 'h', 't', 0, 1, 4, 5, 0, 0, 0 };
+static toDesignSchema_t CornuTriSchema = {
+ CornuTriPaths,
+ "030" "341" "410" "362" "620" "370" };
+static toDesignDesc_t CornuThreewayDesc = {
+ NTO_CORNU3WAY,
+ N_("Cornu 3-way Turnout"),
+ 1,
+ sizeof CornuThreewayLines/sizeof CornuThreewayLines[0], CornuThreewayLines,
+ sizeof CornuThreewayFloats/sizeof CornuThreewayFloats[0], CornuThreewayFloats,
+ NULL, 1 };
+
static wLines_t CrossingLines[] = {
#include "toxing.lin"
};
@@ -371,9 +516,17 @@ static toDesignFloat_t DoubleSlipFloats[] = {
static signed char DoubleSlipPaths[] = {
'N', 'o', 'r', 'm', 'a', 'l', 0, 1, 2, 3, 0, 4, 5, 6, 0, 0,
'R', 'e', 'v', 'e', 'r', 's', 'e', 0, 1, 7, 6, 0, 4, 8, 3, 0, 0, 0 };
+static signed char DoubleSlipPaths2[] = {
+ 'C', 'r', 'o', 's', 's', '1', 0, 1, 2, 3, 0, 0,
+ 'C', 'r', 'o', 's', 's', '2', 0, 4, 5, 6, 0, 0,
+ 'S', 'l', 'i', 'p', '1', 0, 1, 7, 6, 0, 0,
+ 'S', 'l', 'i', 'p', '2', 0, 4, 8, 3, 0, 0, 0 };
static toDesignSchema_t DoubleSlipSchema = {
DoubleSlipPaths,
"040" "460" "610" "270" "750" "530" "451" "762" };
+static toDesignSchema_t DoubleSlipSchema2 = {
+ DoubleSlipPaths2,
+ "040" "460" "610" "270" "750" "530" "451" "762" };
static toDesignDesc_t DoubleSlipDesc = {
NTO_D_SLIP,
N_("Double Slipswitch"),
@@ -595,8 +748,11 @@ static toDesignDesc_t TurntableDesc = {
static toDesignDesc_t * designDescs[] = {
&RegDesc,
&CrvDesc,
+ &CornuDesc,
&WyeDesc,
+ &CornuWyeDesc,
&ThreewayDesc,
+ &CornuThreewayDesc,
&CrossingDesc,
&SingleSlipDesc,
&DoubleSlipDesc,
@@ -1059,6 +1215,73 @@ static BOOL_T ComputeCurve(
return TRUE;
}
+#ifndef MKTURNOUT
+/* For Bezier Segs we need to duplicate the subSegs Array as well */
+void AppendSegs(dynArr_t * target, dynArr_t * source) {
+
+#define sourceSegs(N) DYNARR_N( trkSeg_t, *source, N )
+#define targetSegs(N) DYNARR_N( trkSeg_t, *target, N )
+
+ trkSeg_p src;
+
+ for (int i=0;i<source->cnt; i++) {
+ src = &sourceSegs(i);
+ addSegBezier(target, src);
+ }
+}
+
+/* Bezier Segs will have subSegs Array - free it before resetting the array */
+void ClearSegs(dynArr_t * target) {
+ for (int i=0;i<(*target).cnt;i++) {
+ if (targetSegs(i).type == SEG_BEZTRK)
+ if (targetSegs(i).bezSegs.ptr) MyFree(targetSegs(i).bezSegs.ptr);
+ targetSegs(i).bezSegs.ptr = NULL;
+ targetSegs(i).bezSegs.cnt = 0;
+ targetSegs(i).bezSegs.max = 0;
+ }
+ DYNARR_RESET( trkSeg_t, *target );
+}
+
+BOOL_T CallCornuNoBez(coOrd pos[2], coOrd center[2], ANGLE_T angle[2], DIST_T radius[2], dynArr_t * array_p) {
+
+ dynArr_t temp_array;
+ DYNARR_RESET(trkSeg_t,temp_array);
+ temp_array.ptr=0;
+ temp_array.max=0;
+
+
+ wBool_t rc = CallCornu0(pos,center,angle,radius, &temp_array, FALSE);
+
+ if (!rc) return FALSE;
+
+ for (int i=0;i<temp_array.cnt;i++) {
+ trkSeg_p from_seg = &DYNARR_N(trkSeg_t,temp_array,i);
+ if ((from_seg->type == SEG_BEZTRK) || (from_seg->type == SEG_BEZLIN)) {
+ for (int j=0;j<from_seg->bezSegs.cnt;j++) {
+ trkSeg_p sub_seg = &DYNARR_N(trkSeg_t,from_seg->bezSegs,j);
+ DYNARR_APPEND(trkSeg_t,*array_p,5);
+ trkSeg_p to_seg = &DYNARR_N(trkSeg_t,*array_p,(*array_p).cnt-1);
+ to_seg->u = sub_seg->u;
+ to_seg->type = sub_seg->type;
+ to_seg->color = wDrawColorBlack;
+ to_seg->width = sub_seg->width;
+ }
+ } else {
+ DYNARR_APPEND(trkSeg_t,*array_p,5);
+ trkSeg_p to_seg = &DYNARR_N(trkSeg_t,*array_p,(*array_p).cnt-1);
+ to_seg->u = from_seg->u;
+ to_seg->type = from_seg->type;
+ to_seg->color = wDrawColorBlack;
+ to_seg->width = from_seg->width;
+ }
+ }
+
+ ClearSegs(&temp_array);
+
+ return TRUE;
+}
+
+#endif
static toDesignSchema_t * LoadSegs(
@@ -1076,52 +1299,72 @@ static toDesignSchema_t * LoadSegs(
char *segOrder;
coOrd pos;
wIndex_t segCnt;
- ANGLE_T angle1, angle2;
+ ANGLE_T angle0, angle1, angle2, angle3;
trkSeg_p segPtr;
+#ifndef MKTURNOUT
+ struct {
+ coOrd pos[10];
+ coOrd center[10];
+ DIST_T radius[10];
+ DIST_T angle[10];
+ } cornuData;
+#endif
DYNARR_RESET( trkSeg_t, tempSegs_da );
+ angle0 = newTurnAngle0;
angle1 = newTurnAngle1;
angle2 = newTurnAngle2;
+ angle3 = newTurnAngle3;
+
+
if ( newTurnAngleMode == 0 && dp->type != NTO_CRV_SECTION ) {
/* convert from Frog Num to degrees */
+ if ( angle0 > 0 )
+ angle0 = R2D(asin(1.0 / angle0));
if ( angle1 > 0 )
angle1 = R2D(asin(1.0 / angle1));
if ( angle2 > 0 )
angle2 = R2D(asin(1.0 / angle2));
+ if ( angle3 > 0 )
+ angle3 = R2D(asin(1.0 / angle3));
}
pp = dp->paths;
if (loadPoints) {
DYNARR_RESET( trkEndPt_t, tempEndPts_da );
for ( i=0; i<dp->floatCnt; i++ )
- if ( *(FLOAT_T*)(turnDesignPLs[dp->floats[i].index].valueP) == 0.0 ) {
- NoticeMessage( MSG_TODSGN_VALUES_GTR_0, _("Ok"), NULL );
- return NULL;
+ if ( *(FLOAT_T*)(turnDesignPLs[dp->floats[i].index].valueP) == 0.0 )
+ if (dp->type != NTO_CORNU &&
+ dp->type != NTO_CORNUWYE &&
+ dp->type != NTO_CORNU3WAY
+ ) {
+ NoticeMessage( MSG_TODSGN_VALUES_GTR_0, _("Ok"), NULL );
+ return NULL;
}
switch (dp->type) {
case NTO_REGULAR:
DYNARR_SET( trkEndPt_t, tempEndPts_da, 3 );
if ( !ComputeCurve( &points[3], &points[4], &radii[0],
- (newTurnLen1), (newTurnOff1), angle1 ) )
+ (newTurnLen0), fabs(newTurnOff0), angle0 ) )
return NULL;
radii[0] = - radii[0];
points[0].x = points[0].y = points[1].y = 0.0;
- points[1].x = (newTurnLen0);
- points[2].y = (newTurnOff1);
- points[2].x = (newTurnLen1);
+ points[1].x = (newTurnLen1);
+ points[2].y = fabs(newTurnOff0);
+ points[2].x = (newTurnLen0);
tempEndPts(0).pos = points[0]; tempEndPts(0).angle = 270.0;
tempEndPts(1).pos = points[1]; tempEndPts(1).angle = 90.0;
- tempEndPts(2).pos = points[2]; tempEndPts(2).angle = 90.0-angle1;
+ tempEndPts(2).pos = points[2]; tempEndPts(2).angle = 90.0-angle0;
break;
case NTO_CURVED:
DYNARR_SET( trkEndPt_t, tempEndPts_da, 3 );
if ( !ComputeCurve( &points[3], &points[4], &radii[0],
- (newTurnLen1), (newTurnOff1), angle1 ) )
+ (newTurnLen0), fabs(newTurnOff0), angle0 ) )
return NULL;
if ( !ComputeCurve( &points[5], &points[6], &radii[1],
- (newTurnLen2), (newTurnOff2), angle2 ) )
+ (newTurnLen1), fabs(newTurnOff1), angle1 ) )
return NULL;
d = points[3].x - points[5].x;
if ( d < -0.10 )
@@ -1133,32 +1376,51 @@ static toDesignSchema_t * LoadSegs(
radii[0] = - radii[0];
radii[1] = - radii[1];
points[0].x = points[0].y = 0.0;
- points[1].y = (newTurnOff1); points[1].x = (newTurnLen1);
- points[2].y = (newTurnOff2); points[2].x = (newTurnLen2);
+ points[1].y = fabs(newTurnOff0); points[1].x = (newTurnLen0);
+ points[2].y = fabs(newTurnOff1); points[2].x = (newTurnLen1);
tempEndPts(0).pos = points[0]; tempEndPts(0).angle = 270.0;
- tempEndPts(2).pos = points[1]; tempEndPts(2).angle = 90.0-angle1;
- tempEndPts(1).pos = points[2]; tempEndPts(1).angle = 90.0-angle2;
+ tempEndPts(2).pos = points[1]; tempEndPts(2).angle = 90.0-angle0;
+ tempEndPts(1).pos = points[2]; tempEndPts(1).angle = 90.0-angle1;
break;
+#ifndef MKTURNOUT
+ case NTO_CORNU:
+
+ radii[0] = fabs(newTurnRad2); /*Toe*/
+ radii[1] = fabs(newTurnRad0); /*Inner*/
+ radii[2] = fabs(newTurnRad1); /*Outer*/
+ angles[0] = 0.0; /*Base*/
+ angles[1] = newTurnAngle0; /*Inner*/
+ angles[2] = newTurnAngle1; /*Outer*/
+ pp = &CornuSchema;
+ points[0].x = points[0].y = 0.0;
+ points[1].y = (newTurnOff0); points[1].x = (newTurnLen0); /*Inner*/
+ points[2].y = (newTurnOff1); points[2].x = (newTurnLen1); /*Outer*/
+
+ tempEndPts(0).pos = points[0]; tempEndPts(0).angle = 270.0;
+ tempEndPts(2).pos = points[1]; tempEndPts(2).angle = 90.0-angles[1];
+ tempEndPts(1).pos = points[2]; tempEndPts(1).angle = 90.0-angles[2];
+ break;
+#endif
case NTO_WYE:
case NTO_3WAY:
DYNARR_SET( trkEndPt_t, tempEndPts_da, (dp->type==NTO_3WAY)?4:3 );
if ( !ComputeCurve( &points[3], &points[4], &radii[0],
- (newTurnLen1), (newTurnOff1), angle1 ) )
+ (newTurnLen0), fabs(newTurnOff0), angle0 ) )
return NULL;
if ( !ComputeCurve( &points[5], &points[6], &radii[1],
- (newTurnLen2), (newTurnOff2), angle2 ) )
+ (newTurnLen1), fabs(newTurnOff1), angle1 ) )
return NULL;
points[5].y = - points[5].y;
points[6].y = - points[6].y;
radii[0] = - radii[0];
points[0].x = points[0].y = 0.0;
- points[1].y = (newTurnOff1);
- points[1].x = (newTurnLen1);
- points[2].y = -(newTurnOff2);
- points[2].x = (newTurnLen2);
+ points[1].y = fabs(newTurnOff0);
+ points[1].x = (newTurnLen0);
+ points[2].y = -fabs(newTurnOff1);
+ points[2].x = (newTurnLen1);
points[7].y = 0;
- points[7].x = (newTurnLen0);
+ points[7].x = (newTurnLen2);
d = points[3].x - points[5].x;
if ( d < -0.10 ) {
pp = (dp->type==NTO_3WAY ? &Tri3Schema : &Wye3Schema );
@@ -1168,63 +1430,644 @@ static toDesignSchema_t * LoadSegs(
pp = (dp->type==NTO_3WAY ? &Tri1Schema : &Wye1Schema );
}
tempEndPts(0).pos = points[0]; tempEndPts(0).angle = 270.0;
- tempEndPts(1).pos = points[1]; tempEndPts(1).angle = 90.0-angle1;
- tempEndPts(2).pos = points[2]; tempEndPts(2).angle = 90.0+angle2;
+ tempEndPts(1).pos = points[1]; tempEndPts(1).angle = 90.0-angle0;
+ tempEndPts(2).pos = points[2]; tempEndPts(2).angle = 90.0+angle1;
if (dp->type == NTO_3WAY) {
tempEndPts(3).pos = points[7]; tempEndPts(3).angle = 90.0;
}
break;
+#ifndef MKTURNOUT
+ case NTO_CORNUWYE:
+ case NTO_CORNU3WAY:
+ DYNARR_SET( trkEndPt_t, tempEndPts_da, (dp->type==NTO_CORNU3WAY)?4:3 );
+
+ /*
+ * Construct Wye and 3 Way Turnouts with Cornu curves
+ * 1. Establish where the joint(s) (Toes) are by using the main curve
+ * 2. Rebuild the segments into a single set using those points
+ * 3. Build Path statements to suit the segments
+ * ---------------------------------------------------------------------------------------------
+ * 7 CornuData. Cheat Sheet - segment array parts
+ * =============+ Note - 6-7 is at Toe2 and 8-9 at Toe1 if RH comes before LH
+ * // Toe 2 - Toe2 and Toe1 are the same (no 2-3) if co-incident
+ * 0 6+ 3 4 5 - Toe2, 2-3 and 4-5 all only exist for 3WAY not WYE
+ * +=====+ +=====+ +==================+ - If zero radius at 0, curve starts at Toe 1
+ * 1 2 8+
+ * Toe 1 \\ 9
+ * =========+
+ *
+ * ---------------------------------------------------------------------------------------------
+ */
+
+ radii[0] = (newTurnRad2); /*Base*/
+ radii[1] = (newTurnRad0); /*Left*/
+ radii[2] = (newTurnRad1); /*Right*/
+ radii[3] = (newTurnRad3); /*Center*/
+ angles[0] = 0.0; /*Base*/
+ angles[1] = newTurnAngle0; /*Left*/
+ angles[2] = newTurnAngle1; /*Right*/
+ angles[3] = newTurnAngle3; /*Center*/
+ points[0].x = points[0].y = 0.0; /*Base*/
+ points[1].y = (newTurnOff0); /* Left */
+ points[1].x = (newTurnLen0);
+ points[2].y = -(newTurnOff1); /* Right */
+ points[2].x = (newTurnLen1);
+ if (dp->type==NTO_CORNU3WAY) {
+ points[3].y = (newTurnOff3); /* Center */
+ points[3].x = (newTurnLen3);
+ }
+
+ pp = (dp->type==NTO_CORNU3WAY ? &CornuTriSchema : &CornuWyeSchema );
+
+ tempEndPts(0).pos = points[0]; tempEndPts(0).angle = 270.0;
+
+ if (newTurnRad0<0.0) {
+ tempEndPts(1).pos = points[1]; tempEndPts(1).angle = 90.0+angles[1];
+ } else {
+ tempEndPts(1).pos = points[1]; tempEndPts(1).angle = 90.0-angles[1];
+ }
+ if (newTurnRad1<0.0) {
+ tempEndPts(2).pos = points[2]; tempEndPts(2).angle = 90.0-angles[2];
+ } else {
+ tempEndPts(2).pos = points[2]; tempEndPts(2).angle = 90.0+angles[2];
+ }
+ if (dp->type == NTO_CORNU3WAY) {
+ if (newTurnRad3<0.0) {
+ tempEndPts(3).pos = points[3]; tempEndPts(3).angle = 90.0+angles[3];
+ } else {
+ tempEndPts(3).pos = points[3]; tempEndPts(3).angle = 90.0-angles[3];
+ }
+ }
+
+ DIST_T end_length = minLength/2;
+
+ for (int i=0;i<((dp->type==NTO_CORNU3WAY)?4:3);i++) {
+ if (radii[i] == 0.0) {
+ Translate(&end_points[i], points[i], 90-angles[i]+(i==0?0:180), end_length);
+ end_angles[i] = angles[i];
+ } else {
+ if (((i==0) && radii[0]>0.0) || ((i==1 || i==3) && radii[i]>0.0)|| ((i==2) && radii[i]<0.0))
+ Translate(&end_centers[i], points[i], -angles[i], fabs(radii[i]));
+ else
+ Translate(&end_centers[i], points[i], angles[i], fabs(radii[i]));
+ end_arcs[i] = (radii[i]>=0?1:-1)*R2D(end_length/fabs(radii[i]));
+ end_points[i] = points[i];
+ Rotate(&end_points[i],end_centers[i],((i==0||i==3)?-1:1)*end_arcs[i]);
+ end_angles[i] = angles[i]-((i==0||i==3)?-1:1)*end_arcs[i];
+ }
+LogPrintf( "ctoDes0-%d: EP(%f,%f) NEP(%f,%f) EA(%f) NEA(%f) R(%f) ARC(%f) EC(%f,%f) \n",
+ i+1,points[i].x,points[i].y,end_points[i].x,end_points[i].y,angles[i],end_angles[i],radii[i],end_arcs[i],
+ end_centers[i].x,end_centers[i].y);
+ }
+
+ wBool_t LH_main = TRUE, LH_first = TRUE;
+
+ cornuData.pos[0] = end_points[0]; /*Start*/
+ if (dp->type == NTO_CORNU3WAY) {
+ if (newTurnToeR < newTurnToeL) LH_first = FALSE;
+ cornuData.pos[1] = end_points[3]; /*Center for First Time */
+ cornuData.pos[5] = end_points[3]; /*Center for last time*/
+ } else if (newTurnRad1>=0.0) {
+ cornuData.pos[1] = end_points[1]; /*Left is dominant curve */
+ newTurnToeR = newTurnToeL;
+ } else {
+ cornuData.pos[1] = end_points[2]; /*Right is dominant */
+ newTurnToeR = newTurnToeL;
+ LH_main = FALSE;
+ }
+
+ cornuData.pos[7] = end_points[1]; /*Left*/
+ cornuData.pos[9] = end_points[2]; /*Right*/
+ if (dp->type == NTO_CORNU3WAY) {
+ cornuData.pos[5] = end_points[3]; /*Center */
+ }
+
+ if (radii[0] == 0.0) /* Base */
+ cornuData.center[0] = zero;
+ else {
+ cornuData.center[0].x = end_points[0].x;
+ cornuData.center[0].y = end_points[0].y + radii[0];
+ }
+ if (radii[1] == 0.0) /* Left */
+ cornuData.center[7] = zero;
+ else if (radii[1] >0.0)
+ Translate(&cornuData.center[7], cornuData.pos[7], -end_angles[1], radii[1]);
+ else
+ Translate(&cornuData.center[7], cornuData.pos[7], 180.0+end_angles[1], radii[1]);
+
+ if (radii[2] == 0.0) /* Right */
+ cornuData.center[9] = zero;
+ else if (radii[2] >0.0)
+ Translate(&cornuData.center[9], cornuData.pos[9], 180.0+end_angles[2], radii[2]);
+ else
+ Translate(&cornuData.center[9], cornuData.pos[9], -end_angles[2], radii[2]);
+
+ if (dp->type == NTO_CORNU3WAY) {
+ if (radii[3] == 0.0) /* Center */
+ cornuData.center[5] = zero;
+ else if (radii[3] >0.0)
+ Translate(&cornuData.center[5], cornuData.pos[5], -end_angles[3], radii[3]);
+ else
+ Translate(&cornuData.center[5], cornuData.pos[5], 180.0+end_angles[3], radii[3]);
+ }
+
+ /* Set up for calculation of Toe(s) */
+
+ if (dp->type == NTO_CORNU3WAY) {
+ cornuData.center[1] = cornuData.center[5]; /*For Toe1 calc always use center */
+ cornuData.center[3] = cornuData.center[5]; /*For Toe2 calc always use center*/
+ } else if (LH_main) {
+ cornuData.center[1] = cornuData.center[7]; /* Dominant Curve Left */
+ } else
+ cornuData.center[1] = cornuData.center[9]; /* Right */
+
+ cornuData.angle[0] = 270.0; /*Always*/
+ if (dp->type == NTO_CORNU3WAY) {
+ cornuData.angle[1] = 90.0-end_angles[3];
+ cornuData.angle[3] = 90.0-end_angles[3];
+ cornuData.angle[5] = 90.0-end_angles[3]; /* Only used for 3way */
+ } else if (LH_main) {
+ cornuData.angle[1] = 90.0-end_angles[1];
+ } else {
+ cornuData.angle[1] = 90.0+end_angles[2];
+ }
+ cornuData.angle[7] = 90.0-end_angles[1]; /*Left*/
+ cornuData.angle[9] = 90.0+end_angles[2]; /*Right*/
+
+ cornuData.radius[0] = fabs(radii[0]);
+ if (dp->type == NTO_CORNU3WAY) {
+ cornuData.radius[1] = fabs(radii[3]);
+ cornuData.radius[3] = fabs(radii[3]);
+ cornuData.radius[5] = fabs(radii[3]);
+ } else if (LH_main) {
+ cornuData.radius[1] = fabs(radii[1]);
+ } else {
+ cornuData.radius[1] = fabs(radii[2]);
+ }
+ cornuData.radius[7] = fabs(radii[1]); /*Left*/
+ cornuData.radius[9] = fabs(radii[2]); /*Right*/
+
+ /* Ready to find Toe points */
+
+ DYNARR_RESET( trkSeg_t, tempSegs_da );
+ trkSeg_t * temp_p;
+ temp_p = &tempSegs(0);
+
+
+ DIST_T radius;
+ coOrd center;
+ ANGLE_T angle;
+ int inx,subSeg;
+ wBool_t back, neg;
+
+ CallCornu0(&cornuData.pos[0],&cornuData.center[0],&cornuData.angle[0],&cornuData.radius[0],&tempSegs_da, FALSE);
+
+ /* Override if a "Y" has zero radius at base to be a straight until the Toe
+ * We set the start of the curve to be at the Toe position */
+ if (cornuData.radius[0] == 0.0) {
+ pos.x = end_points[0].x+(LH_first?newTurnToeL:newTurnToeR);
+ pos.y = 0.0;
+ angle = 90.0;
+ radius = 0.0;
+ center = zero;
+
+ } else {
+
+ /*Find Toe 1 from curve */
+
+ /*Get ToeAngle/Radius/Center for first toe */
+ pos.x = end_points[0].x+(LH_first?newTurnToeL:newTurnToeR);
+ pos.y = end_points[0].y; /* This will be close to but not on the curve */
+ angle = GetAngleSegs(tempSegs_da.cnt,(trkSeg_t *)(tempSegs_da.ptr),&pos,&inx,NULL,&back,&subSeg,&neg);
+ segPtr = &DYNARR_N(trkSeg_t, tempSegs_da, inx);
+
+ if (segPtr->type == SEG_BEZTRK) {
+ segPtr = &DYNARR_N(trkSeg_t,segPtr->bezSegs,subSeg);
+ }
+
+ if (segPtr->type == SEG_STRTRK) {
+ radius = 0.0;
+ center = zero;
+ } else if (segPtr->type == SEG_CRVTRK) {
+ center = segPtr->u.c.center;
+ radius = fabs(segPtr->u.c.radius);
+ }
+ }
+
+ /* Set up 2-3 even if we don't use it */
+ cornuData.pos[1] = pos;
+ cornuData.center[1] = center;
+ cornuData.angle[1] = angle;
+ cornuData.radius[1] = radius;
+
+ cornuData.pos[2] = pos;
+ cornuData.center[2] = center;
+ cornuData.angle[2] = NormalizeAngle(180.0+angle);
+ cornuData.radius[2] = radius;
+
+ if ((dp->type == NTO_CORNU3WAY) && (newTurnToeR!=newTurnToeL)) {
+ if (LH_first) {
+ cornuData.pos[6] = pos;
+ cornuData.center[6] = center;
+ cornuData.angle[6] = NormalizeAngle(180.0+angle);
+ cornuData.radius[6] = radius;
+ } else {
+ cornuData.pos[8] = pos;
+ cornuData.center[8] = center;
+ cornuData.angle[8] = NormalizeAngle(180.0+angle);
+ cornuData.radius[8] = radius;
+ }
+ } else { /* Just one toe */
+ cornuData.pos[8] = pos;
+ cornuData.center[8] = center;
+ cornuData.angle[8] = NormalizeAngle(180.0+angle);
+ cornuData.radius[8] = radius;
+
+ cornuData.pos[6] = pos;
+ cornuData.center[6] = center;
+ cornuData.angle[6] = NormalizeAngle(180.0+angle);
+ cornuData.radius[6] = radius;
+ }
+
+ if (dp->type == NTO_CORNU3WAY) {
+ if (newTurnToeR!=newTurnToeL) {
+ /* Second Toe */
+ pos.x = end_points[0].x+(LH_first?newTurnToeR:newTurnToeL);
+ pos.y = end_points[0].y; /* This will be close to but not on the curve */
+ angle = GetAngleSegs(tempSegs_da.cnt,(trkSeg_t *)(tempSegs_da.ptr),&pos,&inx,NULL,&back,&subSeg,&neg);
+ segPtr = &DYNARR_N(trkSeg_t, tempSegs_da, inx);
+
+ if (segPtr->type == SEG_BEZTRK) {
+ segPtr = &DYNARR_N(trkSeg_t,segPtr->bezSegs,subSeg);
+ }
+
+ if (segPtr->type == SEG_STRTRK) {
+ radius = 0.0;
+ center = zero;
+ } else if (segPtr->type == SEG_CRVTRK) {
+ center = segPtr->u.c.center;
+ radius = fabs(segPtr->u.c.radius);
+ }
+ cornuData.pos[3] = pos;
+ cornuData.center[3] = center;
+ cornuData.angle[3] = angle;
+ cornuData.radius[3] = radius;
+
+ cornuData.pos[4] = pos;
+ cornuData.center[4] = center;
+ cornuData.angle[4] = NormalizeAngle(180.0+angle);
+ cornuData.radius[4] = radius;
+
+ if (LH_first) {
+ cornuData.pos[8] = pos;
+ cornuData.center[8] = center;
+ cornuData.angle[8] = NormalizeAngle(180.0+angle);
+ cornuData.radius[8] = radius;
+
+ cornuData.pos[4] = pos;
+ cornuData.center[4] = center;
+ cornuData.angle[4] = NormalizeAngle(180.0+angle);
+ cornuData.radius[4] = radius;
+ } else {
+ cornuData.pos[6] = pos;
+ cornuData.center[6] = center;
+ cornuData.angle[6] = NormalizeAngle(180.0+angle);
+ cornuData.radius[6] = radius;
+
+ cornuData.pos[4] = pos;
+ cornuData.center[4] = center;
+ cornuData.angle[4] = NormalizeAngle(180.0+angle);
+ cornuData.radius[4] = radius;
+ }
+ } else { //Set next center start to same place
+ cornuData.pos[4] = pos;
+ cornuData.center[4] = center;
+ cornuData.angle[4] = NormalizeAngle(180.0+angle);
+ cornuData.radius[4] = radius;
+ }
+ }
+
+ static dynArr_t cornuSegs_da;
+
+ ClearSegs(&tempSegs_da);
+ ClearSegs(&cornuSegs_da);
+
+ int Toe1Seg = 0 , Toe2Seg = 0, CenterEndSeg = 0, LeftEndSeg = 0, RightEndSeg = 0;
+
+ /* Override if at zero radius at base don't compute end */
+ if (cornuData.radius[0] == 0.0) {
+ DYNARR_APPEND(trkSeg_t,tempSegs_da,1);
+ temp_p = &DYNARR_LAST(trkSeg_t,tempSegs_da);
+ temp_p->type = SEG_STRTRK;
+ temp_p->color = wDrawColorBlack;
+ temp_p->width = 0.0;
+ temp_p->u.l.pos[0] = zero;
+ temp_p->u.l.pos[1] = cornuData.pos[0];
+LogPrintf( "ctoDes1: P0(%f,%f) P1(%f,%f) \n",
+ temp_p->u.l.pos[0].x,temp_p->u.l.pos[0].y,temp_p->u.l.pos[1].x,temp_p->u.l.pos[1].y );
+ } else {
+ DYNARR_APPEND(trkSeg_t,tempSegs_da,1);
+ temp_p = &DYNARR_LAST(trkSeg_t,tempSegs_da);
+ temp_p->type = SEG_CRVTRK;
+ temp_p->color = wDrawColorBlack;
+ temp_p->width = 0.0;
+ temp_p->u.c.radius = fabs(radii[0]);;
+ if (radii[0]>0.0)
+ temp_p->u.c.a0 = FindAngle(end_centers[0],end_points[0]);
+ else
+ temp_p->u.c.a0 = FindAngle(end_centers[0],points[0]);
+ temp_p->u.c.a1 = fabs(end_arcs[0]);
+ temp_p->u.c.center = end_centers[0];
+ coOrd rp0,rp1;
+ Translate(&rp0,temp_p->u.c.center,temp_p->u.c.a0,temp_p->u.c.radius);
+ Translate(&rp1,temp_p->u.c.center,temp_p->u.c.a0+temp_p->u.c.a1,temp_p->u.c.radius);
+LogPrintf( "ctoDes1: R(%f) A0(%f) A1(%f) C(%f,%f) P(%f,%f), EP(%f,%f) RP0(%f,%f) RP1(%f,%f)\n",
+ temp_p->u.c.radius,temp_p->u.c.a0,temp_p->u.c.a1,temp_p->u.c.center.x,temp_p->u.c.center.y,
+ points[0].x,points[0].y,end_points[0].x,end_points[0].y,
+ rp0.x,rp0.y,rp1.x,rp1.y);
+ }
+
+ if ((cornuData.pos[0].x != cornuData.pos[1].x) ||
+ (cornuData.pos[0].y != cornuData.pos[1].y) )
+ CallCornuNoBez(&cornuData.pos[0],&cornuData.center[0],&cornuData.angle[0],&cornuData.radius[0],&tempSegs_da);
+ Toe1Seg = tempSegs_da.cnt;
+
+ if (dp->type == NTO_CORNU3WAY) {
+ if (newTurnToeR!=newTurnToeL) {
+ /* Toe1 to Toe2 in tempSegs array */
+ if ((cornuData.pos[2].x != cornuData.pos[3].x) ||
+ (cornuData.pos[2].y != cornuData.pos[3].y) )
+ CallCornuNoBez(&cornuData.pos[2],&cornuData.center[2],&cornuData.angle[2],&cornuData.radius[2],&cornuSegs_da);
+
+ Toe2Seg = cornuSegs_da.cnt+Toe1Seg;
+ /* Add to second cornu to tempSegs array */
+ AppendSegs(&tempSegs_da,&cornuSegs_da);
+ /* Get ready to reuse cornuSegs array*/
+ ClearSegs(&cornuSegs_da);
+ } else {
+ Toe2Seg = Toe1Seg; //No Toe2
+ }
+ /* Toe2 to Center in cornuSegs array */
+ CallCornuNoBez(&cornuData.pos[4],&cornuData.center[4],&cornuData.angle[4],&cornuData.radius[4],&cornuSegs_da);
+
+ if (cornuData.radius[5] == 0.0) {
+ DYNARR_APPEND(trkSeg_t,cornuSegs_da,1);
+ temp_p = &DYNARR_LAST(trkSeg_t,cornuSegs_da);
+ temp_p->type = SEG_STRTRK;
+ temp_p->color = wDrawColorBlack;
+ temp_p->width = 0.0;
+ temp_p->u.l.pos[0] = cornuData.pos[5];
+ temp_p->u.l.pos[1] = end_points[3];
+ LogPrintf( "ctoDes2: P0(%f,%f) P1(%f,%f) \n",
+ temp_p->u.l.pos[0].x,temp_p->u.l.pos[0].y,temp_p->u.l.pos[1].x,temp_p->u.l.pos[1].y );
+ } else {
+ DYNARR_APPEND(trkSeg_t,cornuSegs_da,1);
+ temp_p = &DYNARR_LAST(trkSeg_t,cornuSegs_da);
+ temp_p->type = SEG_CRVTRK;
+ temp_p->color = wDrawColorBlack;
+ temp_p->width = 0.0;
+ temp_p->u.c.radius = fabs(radii[3]);
+ if (radii[3]>0)
+ temp_p->u.c.a0 = FindAngle(end_centers[3],points[3]);
+ else
+ temp_p->u.c.a0 = FindAngle(end_centers[3],end_points[3]);
+ temp_p->u.c.a1 = fabs(end_arcs[3]);
+ temp_p->u.c.center = end_centers[3];
+ coOrd rp0,rp1;
+ Translate(&rp0,temp_p->u.c.center,temp_p->u.c.a0,temp_p->u.c.radius);
+ Translate(&rp1,temp_p->u.c.center,temp_p->u.c.a0+temp_p->u.c.a1,temp_p->u.c.radius);
+ LogPrintf( "ctoDes2: R(%f) A0(%f) A1(%f) C(%f,%f) P(%f,%f) EP(%f,%f) RP0(%f,%f) RP1(%f,%f)\n",
+ temp_p->u.c.radius,temp_p->u.c.a0,temp_p->u.c.a1,temp_p->u.c.center.x,temp_p->u.c.center.y,
+ points[3].x,points[3].y,end_points[3].x,end_points[3].y,
+ rp0.x,rp0.y,rp1.x,rp1.y);
+ }
+
+ CenterEndSeg = cornuSegs_da.cnt+Toe2Seg;
+ /* Add to second cornu to tempSegs array */
+ AppendSegs(&tempSegs_da,&cornuSegs_da);
+ /* Get ready to reuse cornuSegs array*/
+ ClearSegs(&cornuSegs_da);
+ } else {
+ CenterEndSeg = Toe2Seg = Toe1Seg; //No Toe2, No Center
+ }
+
+ /* Left in cornuSegs array*/
+ CallCornuNoBez(&cornuData.pos[6],&cornuData.center[6],&cornuData.angle[6],&cornuData.radius[6],&cornuSegs_da);
+
+ if (cornuData.radius[7] == 0.0) {
+ DYNARR_APPEND(trkSeg_t,cornuSegs_da,1);
+ temp_p = &DYNARR_LAST(trkSeg_t,cornuSegs_da);
+ temp_p->type = SEG_STRTRK;
+ temp_p->color = wDrawColorBlack;
+ temp_p->width = 0.0;
+ temp_p->u.l.pos[0] = cornuData.pos[7];
+ temp_p->u.l.pos[1] = end_points[1];
+LogPrintf( "ctoDes2: P0(%f,%f) P1(%f,%f) \n",
+ temp_p->u.l.pos[0].x,temp_p->u.l.pos[0].y,temp_p->u.l.pos[1].x,temp_p->u.l.pos[1].y );
+ } else {
+ DYNARR_APPEND(trkSeg_t,cornuSegs_da,1);
+ temp_p = &DYNARR_LAST(trkSeg_t,cornuSegs_da);
+ temp_p->type = SEG_CRVTRK;
+ temp_p->color = wDrawColorBlack;
+ temp_p->width = 0.0;
+ temp_p->u.c.radius = fabs(radii[1]);
+ if (radii[1]>0)
+ temp_p->u.c.a0 = FindAngle(end_centers[1],points[1]);
+ else
+ temp_p->u.c.a0 = FindAngle(end_centers[1],end_points[1]);
+ temp_p->u.c.a1 = fabs(end_arcs[1]);
+ temp_p->u.c.center = end_centers[1];
+ coOrd rp0,rp1;
+ Translate(&rp0,temp_p->u.c.center,temp_p->u.c.a0,temp_p->u.c.radius);
+ Translate(&rp1,temp_p->u.c.center,temp_p->u.c.a0+temp_p->u.c.a1,temp_p->u.c.radius);
+LogPrintf( "ctoDes2: R(%f) A0(%f) A1(%f) C(%f,%f) P(%f,%f) EP(%f,%f) RP0(%f,%f) RP1(%f,%f)\n",
+ temp_p->u.c.radius,temp_p->u.c.a0,temp_p->u.c.a1,temp_p->u.c.center.x,temp_p->u.c.center.y,
+ points[1].x,points[1].y,end_points[1].x,end_points[1].y,
+ rp0.x,rp0.y,rp1.x,rp1.y);
+ }
+
+ LeftEndSeg = cornuSegs_da.cnt+CenterEndSeg;
+
+ /* Add to second cornu to tempSegs array */
+ AppendSegs(&tempSegs_da,&cornuSegs_da);
+ /* Get ready to reuse cornuSegs array*/
+ ClearSegs(&cornuSegs_da);
+
+ /* Right in cornuSegs array*/
+ CallCornuNoBez(&cornuData.pos[8],&cornuData.center[8],&cornuData.angle[8],&cornuData.radius[8],&cornuSegs_da);
+
+ if (cornuData.radius[9] == 0.0) {
+ DYNARR_APPEND(trkSeg_t,cornuSegs_da,1);
+ temp_p = &DYNARR_LAST(trkSeg_t,cornuSegs_da);
+ temp_p->type = SEG_STRTRK;
+ temp_p->color = wDrawColorBlack;
+ temp_p->width = 0.0;
+ temp_p->u.l.pos[0] = cornuData.pos[9];
+ temp_p->u.l.pos[1] = end_points[2];
+LogPrintf( "ctoDes2: P0(%f,%f) P1(%f,%f) \n",
+ temp_p->u.l.pos[0].x,temp_p->u.l.pos[0].y,temp_p->u.l.pos[1].x,temp_p->u.l.pos[1].y );
+ } else {
+ DYNARR_APPEND(trkSeg_t,cornuSegs_da,1);
+ temp_p = &DYNARR_LAST(trkSeg_t,cornuSegs_da);
+ temp_p->type = SEG_CRVTRK;
+ temp_p->color = wDrawColorBlack;
+ temp_p->width = 0.0;
+ temp_p->u.c.radius = fabs(radii[2]);
+ if (radii[2]<0)
+ temp_p->u.c.a0 = FindAngle(end_centers[2],points[2]);
+ else
+ temp_p->u.c.a0 = FindAngle(end_centers[2],end_points[2]);
+ temp_p->u.c.a1 = fabs(end_arcs[2]);
+ temp_p->u.c.center = end_centers[2];
+ coOrd rp0,rp1;
+ Translate(&rp0,temp_p->u.c.center,temp_p->u.c.a0,temp_p->u.c.radius);
+ Translate(&rp1,temp_p->u.c.center,temp_p->u.c.a0+temp_p->u.c.a1,temp_p->u.c.radius);
+LogPrintf( "ctoDes2: R(%f) A0(%f) A1(%f) C(%f,%f) P(%f,%f) EP(%f,%f) RP0(%f,%f) RP1(%f,%f)\n",
+ temp_p->u.c.radius,temp_p->u.c.a0,temp_p->u.c.a1,temp_p->u.c.center.x,temp_p->u.c.center.y,
+ points[2].x,points[2].y,end_points[2].x,end_points[2].y,
+ rp0.x,rp0.y,rp1.x,rp1.y);
+ }
+
+ RightEndSeg = cornuSegs_da.cnt+LeftEndSeg;
+
+ /*Add Third Part to tempSegs Array */
+ AppendSegs(&tempSegs_da,&cornuSegs_da);
+ /* Safety - clear out cornu Array */
+ ClearSegs(&cornuSegs_da);
+
+ if (tempSegs_da.cnt >128 ) {
+ NoticeMessage( MSG_TODSGN_CORNU_TOO_COMPLEX, _("Ok"), NULL );
+ return NULL;
+ }
+
+ /* Generate Paths */
+
+ static char pathChar[512];
+ if (dp->type == NTO_CORNU3WAY) {
+ strcpy(pathChar,"Normal"); /* Also resets array */
+ pathLen = strlen(pathChar)+1;
+ for (uint8_t i=0;i<CenterEndSeg;i++) {
+ pathChar[pathLen] = i+1;
+ pathLen++;
+ }
+ pathChar[pathLen] = 0;
+ pathLen++;
+ pathChar[pathLen] = 0;
+ pathLen++;
+ sprintf(&pathChar[pathLen],"%s","Left");
+ pathLen += strlen(&pathChar[pathLen])+1;
+ } else {
+ strcpy(pathChar,"Left");
+ pathLen = strlen(pathChar)+1;
+ }
+ for (uint8_t i=0;i<Toe1Seg;i++) {
+ pathChar[pathLen] = i+1;
+ pathLen++;
+ }
+ if ((dp->type == NTO_CORNU3WAY) && !LH_first && (newTurnToeR != newTurnToeL)) {
+ for (uint8_t i=Toe1Seg;i<Toe2Seg;i++) {
+ pathChar[pathLen] = i+1;
+ pathLen++;
+ }
+ }
+
+ for (uint8_t i=CenterEndSeg;i<LeftEndSeg;i++) {
+ pathChar[pathLen] = i+1;
+ pathLen++;
+ }
+
+ pathChar[pathLen] = 0;
+ pathLen++;
+ pathChar[pathLen] = 0;
+ pathLen++;
+
+ sprintf(&pathChar[pathLen],"%s","Right");
+ pathLen += strlen(&pathChar[pathLen])+1;
+
+ for (uint8_t i=0;i<Toe1Seg;i++) {
+ pathChar[pathLen] = i+1;
+ pathLen++;
+ }
+ if ((dp->type == NTO_CORNU3WAY) && LH_first && (newTurnToeR != newTurnToeL)) {
+ for (uint8_t i=Toe1Seg;i<Toe2Seg;i++) {
+ pathChar[pathLen] = i+1;
+ pathLen++;
+ }
+ }
+ for (uint8_t i=LeftEndSeg;i<RightEndSeg;i++) {
+ pathChar[pathLen] = i+1;
+ pathLen++;
+ }
+ pathChar[pathLen] = 0;
+ pathLen++;
+ pathChar[pathLen] = 0;
+ pathLen++;
+ pathChar[pathLen] = 0;
+ pathLen++;
+
+ pp->paths = (signed char *)pathChar;
+ segCnt = tempSegs_da.cnt;
+
+ break;
+#endif
case NTO_D_SLIP:
case NTO_S_SLIP:
case NTO_CROSSING:
+ if (dp->type == NTO_D_SLIP) {
+ if (newTurnSlipMode == 1)
+ pp = &DoubleSlipSchema2;
+ else
+ pp = &DoubleSlipSchema;
+ }
DYNARR_SET( trkEndPt_t, tempEndPts_da, 4 );
points[0].x = points[0].y = points[1].y = 0.0;
- points[1].x = (newTurnLen1);
- pos.y = 0; pos.x = (newTurnLen1)/2.0;
- Translate( &points[3], pos, 90.0+angle1, (newTurnLen2)/2.0 );
+ points[1].x = (newTurnLen0);
+ pos.y = 0; pos.x = (newTurnLen0)/2.0;
+ coOrd cpos = pos;
+ Translate( &points[3], pos, 90.0+angle0, (newTurnLen1)/2.0 );
points[2].y = - points[3].y;
- points[2].x = (newTurnLen1)-points[3].x;
+ points[2].x = pos.x-(points[3].x-pos.x);
if (dp->type != NTO_CROSSING) {
- Translate( &pos, points[3], 90.0+angle1, -newTurnTrackGauge );
+ Translate( &pos, points[3], 90.0+angle0, -newTurnTrackGauge );
if (!ComputeCurve( &points[4], &points[5], &radii[0],
- pos.x, fabs(pos.y), angle1 )) /*???*/
+ pos.x, fabs(pos.y), angle0 )) /*???*/
return NULL;
radii[1] = - radii[0];
points[5].y = - points[5].y;
- points[6].y = 0; points[6].x = (newTurnLen1)-points[4].x;
+ points[6].y = 0; points[6].x = cpos.x-(points[4].x-cpos.x);
points[7].y = -points[5].y;
- points[7].x = (newTurnLen1)-points[5].x;
+ points[7].x = cpos.x-(points[5].x-cpos.x);
}
tempEndPts(0).pos = points[0]; tempEndPts(0).angle = 270.0;
tempEndPts(1).pos = points[1]; tempEndPts(1).angle = 90.0;
- tempEndPts(2).pos = points[2]; tempEndPts(2).angle = 270.0+angle1;
- tempEndPts(3).pos = points[3]; tempEndPts(3).angle = 90.0+angle1;
+ tempEndPts(2).pos = points[2]; tempEndPts(2).angle = 270.0+angle0;
+ tempEndPts(3).pos = points[3]; tempEndPts(3).angle = 90.0+angle0;
break;
case NTO_R_CROSSOVER:
case NTO_L_CROSSOVER:
case NTO_D_CROSSOVER:
DYNARR_SET( trkEndPt_t, tempEndPts_da, 4 );
- d = (newTurnLen1)/2.0 - newTurnTrackGauge;
+ d = (newTurnLen0)/2.0 - newTurnTrackGauge;
if (d < 0.0) {
NoticeMessage( MSG_TODSGN_CROSSOVER_TOO_SHORT, _("Ok"), NULL );
return NULL;
}
- angle1 = R2D( atan2( (newTurnOff1), d ) );
+ angle0 = R2D( atan2( fabs(newTurnOff0), d ) );
points[0].y = 0.0; points[0].x = 0.0;
- points[1].y = 0.0; points[1].x = (newTurnLen1);
- points[2].y = (newTurnOff1); points[2].x = 0.0;
- points[3].y = (newTurnOff1); points[3].x = (newTurnLen1);
+ points[1].y = 0.0; points[1].x = (newTurnLen0);
+ points[2].y = fabs(newTurnOff0); points[2].x = 0.0;
+ points[3].y = fabs(newTurnOff0); points[3].x = (newTurnLen0);
if (!ComputeCurve( &points[4], &points[5], &radii[1],
- (newTurnLen1)/2.0, (newTurnOff1)/2.0, angle1 ) )
+ (newTurnLen0)/2.0, fabs(newTurnOff0)/2.0, angle0 ) )
return NULL;
radii[0] = - radii[1];
- points[6].y = 0.0; points[6].x = (newTurnLen1)-points[4].x;
- points[7].y = points[5].y; points[7].x = (newTurnLen1)-points[5].x;
- points[8].y = (newTurnOff1); points[8].x = points[4].x;
- points[9].y = (newTurnOff1)-points[5].y; points[9].x = points[5].x;
- points[10].y = (newTurnOff1); points[10].x = points[6].x;
+ points[6].y = 0.0; points[6].x = (newTurnLen0)-points[4].x;
+ points[7].y = points[5].y; points[7].x = (newTurnLen0)-points[5].x;
+ points[8].y = fabs(newTurnOff0); points[8].x = points[4].x;
+ points[9].y = fabs(newTurnOff0)-points[5].y; points[9].x = points[5].x;
+ points[10].y = fabs(newTurnOff0); points[10].x = points[6].x;
points[11].y = points[9].y; points[11].x = points[7].x;
tempEndPts(0).pos = points[0]; tempEndPts(0).angle = 270.0;
tempEndPts(1).pos = points[1]; tempEndPts(1).angle = 90.0;
@@ -1235,7 +2078,7 @@ static toDesignSchema_t * LoadSegs(
case NTO_STR_SECTION:
DYNARR_SET( trkEndPt_t, tempEndPts_da, 2 );
points[0].y = points[0].x = 0;
- points[1].y = 0/*(newTurnOff1)*/; points[1].x = (newTurnLen1);
+ points[1].y = 0/*(newTurnOff1)*/; points[1].x = (newTurnLen0);
tempEndPts(0).pos = points[0]; tempEndPts(0).angle = 270.0;
tempEndPts(1).pos = points[1]; tempEndPts(1).angle = 90.0;
break;
@@ -1243,17 +2086,17 @@ static toDesignSchema_t * LoadSegs(
case NTO_CRV_SECTION:
DYNARR_SET( trkEndPt_t, tempEndPts_da, 2 );
points[0].y = points[0].x = 0;
- points[1].y = (newTurnLen1) * (1.0 - cos( D2R(angle1) ) );
- points[1].x = (newTurnLen1) * sin( D2R(angle1) );
- radii[0] = -(newTurnLen1);
+ points[1].y = (newTurnLen0) * (1.0 - cos( D2R(angle0) ) );
+ points[1].x = (newTurnLen0) * sin( D2R(angle0) );
+ radii[0] = -(newTurnLen0);
tempEndPts(0).pos = points[0]; tempEndPts(0).angle = 270.0;
- tempEndPts(1).pos = points[1]; tempEndPts(1).angle = 90.0-angle1;
+ tempEndPts(1).pos = points[1]; tempEndPts(1).angle = 90.0-angle0;
break;
case NTO_BUMPER:
DYNARR_SET( trkEndPt_t, tempEndPts_da, 1 );
points[0].y = points[0].x = 0;
- points[1].y = 0/*(newTurnOff1)*/; points[1].x = (newTurnLen1);
+ points[1].y = 0/*(newTurnOff1)*/; points[1].x = (newTurnLen0);
tempEndPts(0).pos = points[0]; tempEndPts(0).angle = 270.0;
break;
@@ -1274,33 +2117,312 @@ static toDesignSchema_t * LoadSegs(
}
}
- segOrder = pp->segOrder;
- segCnt = strlen( segOrder );
- if (segCnt%3 != 0)
- AbortProg( dp->label );
- segCnt /= 3;
- DYNARR_SET( trkSeg_t, tempSegs_da, segCnt );
- tempSegs_da.cnt = segCnt;
- memset( &tempSegs(0), 0, segCnt * sizeof tempSegs(0) );
- for ( s=0; s<segCnt; s++ ) {
- segPtr = &tempSegs(s);
- segPtr->color = wDrawColorBlack;
- if (*segOrder <= '9')
- p0 = *segOrder++ - '0';
- else
- p0 = *segOrder++ - 'A' + 10;
- if (*segOrder <= '9')
- p1 = *segOrder++ - '0';
- else
- p1 = *segOrder++ - 'A' + 10;
- p = *segOrder++ - '0';
- if (p != 0) {
- segPtr->type = SEG_CRVTRK;
- ComputeCurvedSeg( segPtr, radii[p-1], points[p0], points[p1] );
- } else {
- segPtr->type = SEG_STRTRK;
- segPtr->u.l.pos[0] = points[p0];
- segPtr->u.l.pos[1] = points[p1];
+#ifndef MKTURNOUT
+ if(dp->type == NTO_CORNU) {
+ DYNARR_SET( trkEndPt_t, tempEndPts_da, 3 );
+
+ DIST_T end_length = minLength/2;
+
+ // Adjust end_points to impose small fixed end segments
+
+ for (int i=0;i<3;i++) {
+ if (radii[i] == 0.0) {
+ Translate(&end_points[i], points[i], 90-angles[i]+(i==0?0:180), end_length);
+ end_angles[i] = angles[i];
+ } else {
+ Translate(&end_centers[i], points[i], -angles[i], radii[i]);
+ end_arcs[i] = (radii[i]>=0?1:-1)*R2D(end_length/fabs(radii[i]));
+ end_points[i] = points[i];
+ Rotate(&end_points[i],end_centers[i],(i>0?1:-1)*end_arcs[i]);
+ end_angles[i] = angles[i]-(i>0?1:-1)*end_arcs[i];
+ }
+LogPrintf( "ctoDes0-%d: EP(%f,%f) NEP(%f,%f) EA(%f) NEA(%f) R(%f) ARC(%f) EC(%f,%f) \n",
+ i+1,points[i].x,points[i].y,end_points[i].x,end_points[i].y,angles[i],end_angles[i],radii[i],end_arcs[i],
+ end_centers[i].x,end_centers[i].y);
+ }
+
+
+ cornuData.pos[0] = end_points[0]; /*Start*/
+ cornuData.pos[1] = end_points[2]; /*Outer*/
+ cornuData.pos[3] = end_points[2]; /*Outer for second time*/
+ cornuData.pos[5] = end_points[1]; /*Inner*/
+
+
+ if (radii[0] == 0.0) /* Toe */
+ cornuData.center[0] = zero;
+ else {
+ cornuData.center[0].x = end_points[0].x;
+ cornuData.center[0].y = end_points[0].y + radii[0];
+ }
+ if (radii[1] == 0.0) /* Inner */
+ cornuData.center[5] = zero;
+ else
+ Translate(&cornuData.center[5], cornuData.pos[5], -end_angles[1], radii[1]);
+
+ if (radii[2] == 0.0) /* Outer */
+ cornuData.center[1] = zero;
+ else
+ Translate(&cornuData.center[1], cornuData.pos[1], -end_angles[2], radii[2]);
+ cornuData.center[3] = cornuData.center[1];
+
+ cornuData.angle[0] = 270.0;
+ cornuData.angle[1] = 90.0-end_angles[2];
+ cornuData.angle[3] = 90.0-end_angles[2];
+ cornuData.angle[5] = 90.0-end_angles[1]; /*Inner*/
+
+ cornuData.radius[0] = fabs(radii[0]);
+ cornuData.radius[1] = fabs(radii[2]);
+ cornuData.radius[3] = fabs(radii[2]);
+ cornuData.radius[5] = fabs(radii[1]); /*Inner*/
+
+ DYNARR_RESET( trkSeg_t, tempSegs_da );
+ trkSeg_t * temp_p, * cornu_p;
+ temp_p = &tempSegs(0);
+
+ /*Map out the full outer curve */
+
+ CallCornu0(&cornuData.pos[0],&cornuData.center[0],&cornuData.angle[0],&cornuData.radius[0],&tempSegs_da, FALSE);
+
+ /*Get ToeAngle/Radius/Center */
+ int inx,subSeg;
+ wBool_t back, neg;
+ DIST_T radius;
+ coOrd center;
+ pos.x = end_points[0].x+newTurnToeL;
+ pos.y = end_points[0].y; /* This will be close to but not on the curve */
+ ANGLE_T angle = GetAngleSegs(tempSegs_da.cnt,(trkSeg_t *)(tempSegs_da.ptr),&pos,&inx,NULL,&back,&subSeg,&neg);
+ segPtr = &DYNARR_N(trkSeg_t, tempSegs_da, inx);
+
+ if (segPtr->type == SEG_BEZTRK) {
+ segPtr = &DYNARR_N(trkSeg_t,segPtr->bezSegs,subSeg);
+ }
+
+ if (segPtr->type == SEG_STRTRK) {
+ radius = 0.0;
+ center = zero;
+ } else if (segPtr->type == SEG_CRVTRK) {
+ center = segPtr->u.c.center;
+ radius = fabs(segPtr->u.c.radius);
+ }
+ cornuData.pos[1] = pos;
+ cornuData.center[1] = center;
+ cornuData.angle[1] = angle;
+ cornuData.radius[1] = radius;
+ cornuData.pos[2] = pos;
+ cornuData.center[2] = center;
+ cornuData.angle[2] = NormalizeAngle(180.0+angle);
+ cornuData.radius[2] = radius;
+ cornuData.pos[4] = pos;
+ cornuData.center[4] = center;
+ cornuData.angle[4] = NormalizeAngle(180.0+angle);
+ cornuData.radius[4] = radius;
+
+ static dynArr_t cornuSegs_da;
+
+ ClearSegs(&tempSegs_da);
+ ClearSegs(&cornuSegs_da);
+
+ /* Override if at zero radius at base don't compute end */
+ if (cornuData.radius[0] == 0.0) {
+ DYNARR_APPEND(trkSeg_t,tempSegs_da,1);
+ temp_p = &DYNARR_LAST(trkSeg_t,tempSegs_da);
+ temp_p->type = SEG_STRTRK;
+ temp_p->color = wDrawColorBlack;
+ temp_p->width = 0.0;
+ temp_p->u.l.pos[0] = zero;
+ temp_p->u.l.pos[1] = cornuData.pos[1];
+LogPrintf( "ctoDes1: P0(%f,%f) P1(%f,%f) \n",
+ temp_p->u.l.pos[0].x,temp_p->u.l.pos[0].y,temp_p->u.l.pos[1].x,temp_p->u.l.pos[1].y );
+ } else {
+ DYNARR_APPEND(trkSeg_t,tempSegs_da,1);
+ temp_p = &DYNARR_LAST(trkSeg_t,tempSegs_da);
+ temp_p->type = SEG_CRVTRK;
+ temp_p->color = wDrawColorBlack;
+ temp_p->width = 0.0;
+ temp_p->u.c.radius = fabs(radii[0]);;
+ if (radii[0]>0.0)
+ temp_p->u.c.a0 = FindAngle(end_centers[0],end_points[0]);
+ else
+ temp_p->u.c.a0 = FindAngle(end_centers[0],points[0]);
+ temp_p->u.c.a1 = fabs(end_arcs[0]);
+ temp_p->u.c.center = end_centers[0];
+ coOrd rp0,rp1;
+ Translate(&rp0,temp_p->u.c.center,temp_p->u.c.a0,temp_p->u.c.radius);
+ Translate(&rp1,temp_p->u.c.center,temp_p->u.c.a0+temp_p->u.c.a1,temp_p->u.c.radius);
+LogPrintf( "ctoDes1: R(%f) A0(%f) A1(%f) C(%f,%f) P(%f,%f), EP(%f,%f) RP0(%f,%f) RP1(%f,%f)\n",
+ temp_p->u.c.radius,temp_p->u.c.a0,temp_p->u.c.a1,temp_p->u.c.center.x,temp_p->u.c.center.y,
+ points[0].x,points[0].y,end_points[0].x,end_points[0].y,
+ rp0.x,rp0.y,rp1.x,rp1.y);
+
+ /* Base to Toe in tempSegs array */
+ CallCornuNoBez(&cornuData.pos[0],&cornuData.center[0],& cornuData.angle[0],&cornuData.radius[0],&tempSegs_da);
+ }
+
+ int ToeSeg = tempSegs_da.cnt;
+
+ /* Toe to Outer in cornuSegs array */
+ CallCornuNoBez(&cornuData.pos[2],&cornuData.center[2],&cornuData.angle[2],&cornuData.radius[2],&cornuSegs_da);
+
+ cornu_p = (trkSeg_p)cornuSegs_da.ptr;
+
+ if (cornuData.radius[3] == 0.0) {
+ DYNARR_APPEND(trkSeg_t,cornuSegs_da,1);
+ temp_p = &DYNARR_LAST(trkSeg_t,cornuSegs_da);
+ temp_p->type = SEG_STRTRK;
+ temp_p->color = wDrawColorBlack;
+ temp_p->width = 0.0;
+ temp_p->u.l.pos[0] = cornuData.pos[3];
+ temp_p->u.l.pos[1] = end_points[2];
+LogPrintf( "ctoDes2: P0(%f,%f) P1(%f,%f) \n",
+ temp_p->u.l.pos[0].x,temp_p->u.l.pos[0].y,temp_p->u.l.pos[1].x,temp_p->u.l.pos[1].y );
+ } else {
+ DYNARR_APPEND(trkSeg_t,cornuSegs_da,1);
+ temp_p = &DYNARR_LAST(trkSeg_t,cornuSegs_da);
+ temp_p->type = SEG_CRVTRK;
+ temp_p->color = wDrawColorBlack;
+ temp_p->width = 0.0;
+ temp_p->u.c.radius = fabs(radii[2]);
+ if (radii[2]>0)
+ temp_p->u.c.a0 = FindAngle(end_centers[2],points[2]);
+ else
+ temp_p->u.c.a0 = FindAngle(end_centers[2],end_points[2]);
+ temp_p->u.c.a1 = fabs(end_arcs[2]);
+ temp_p->u.c.center = end_centers[2];
+ coOrd rp0,rp1;
+ Translate(&rp0,temp_p->u.c.center,temp_p->u.c.a0,temp_p->u.c.radius);
+ Translate(&rp1,temp_p->u.c.center,temp_p->u.c.a0+temp_p->u.c.a1,temp_p->u.c.radius);
+LogPrintf( "ctoDes2: R(%f) A0(%f) A1(%f) C(%f,%f) P(%f,%f) EP(%f,%f) RP0(%f,%f) RP1(%f,%f)\n",
+ temp_p->u.c.radius,temp_p->u.c.a0,temp_p->u.c.a1,temp_p->u.c.center.x,temp_p->u.c.center.y,
+ points[2].x,points[2].y,end_points[2].x,end_points[2].y,
+ rp0.x,rp0.y,rp1.x,rp1.y);
+ }
+
+ int OuterEndSeg = cornuSegs_da.cnt + ToeSeg;
+
+ /* Add to second cornu to tempSegs array */
+ AppendSegs(&tempSegs_da,&cornuSegs_da);
+
+ /* Get ready to reuse cornuSegs array*/
+ ClearSegs(&cornuSegs_da);
+
+ /* Toe to Inner in cornuSegs array*/
+ CallCornuNoBez(&cornuData.pos[4],&cornuData.center[4],&cornuData.angle[4],&cornuData.radius[4],&cornuSegs_da);
+
+ if (cornuData.radius[5] == 0.0) {
+ DYNARR_APPEND(trkSeg_t,cornuSegs_da,1);
+ temp_p = &DYNARR_LAST(trkSeg_t,cornuSegs_da);
+ temp_p->type = SEG_STRTRK;
+ temp_p->color = wDrawColorBlack;
+ temp_p->width = 0.0;
+ temp_p->u.l.pos[0] = cornuData.pos[5];
+ temp_p->u.l.pos[1] = points[1];
+LogPrintf( "ctoDes3: P0(%f,%f) P1(%f,%f) \n",
+ temp_p->u.l.pos[0].x,temp_p->u.l.pos[0].y,temp_p->u.l.pos[1].x,temp_p->u.l.pos[1].y );
+ } else {
+ DYNARR_APPEND(trkSeg_t,cornuSegs_da,1);
+ temp_p = &DYNARR_LAST(trkSeg_t,cornuSegs_da);
+ temp_p->type = SEG_CRVTRK;
+ temp_p->color = wDrawColorBlack;
+ temp_p->width = 0.0;
+ temp_p->u.c.radius = fabs(radii[1]);
+ if (radii[1]>0)
+ temp_p->u.c.a0 = FindAngle(end_centers[1],points[1]);
+ else
+ temp_p->u.c.a0 = FindAngle(end_centers[1],end_points[1]);
+ temp_p->u.c.a1 = fabs(end_arcs[1]);
+ temp_p->u.c.center = end_centers[1];
+ coOrd rp0,rp1;
+ Translate(&rp0,temp_p->u.c.center,temp_p->u.c.a0,temp_p->u.c.radius);
+ Translate(&rp1,temp_p->u.c.center,temp_p->u.c.a0+temp_p->u.c.a1,temp_p->u.c.radius);
+LogPrintf( "ctoDes3: R(%f) A0(%f) A1(%f) C(%f,%f) P(%f,%f) EP(%f,%f) RP0(%f,%f) RP1(%f,%f)\n",
+ temp_p->u.c.radius,temp_p->u.c.a0,temp_p->u.c.a1,temp_p->u.c.center.x,temp_p->u.c.center.y,
+ points[1].x,points[1].y,end_points[1].x,end_points[1].y,
+ rp0.x,rp0.y,rp1.x,rp1.y);
+ }
+
+ int InnerEndSeg = cornuSegs_da.cnt + OuterEndSeg;
+
+ /*Add Third Part to tempSegs Array */
+ AppendSegs(&tempSegs_da,&cornuSegs_da);
+
+
+ /* Safety - clear out cornu Array */
+ ClearSegs(&cornuSegs_da);
+
+ if (tempSegs_da.cnt >128 ) {
+ NoticeMessage( MSG_TODSGN_CORNU_TOO_COMPLEX, _("Ok"), NULL );
+ return NULL;
+ }
+
+ static char pathChar[512];
+ strcpy(pathChar,"Normal"); /* Also resets array */
+
+ pathLen = strlen(pathChar)+1;
+
+ for (uint8_t i=0;i<OuterEndSeg;i++) {
+ pathChar[pathLen] = i+1;
+ pathLen++;
+ }
+ pathChar[pathLen] = 0;
+ pathLen++;
+ pathChar[pathLen] = 0;
+ pathLen++;
+
+ sprintf(&pathChar[pathLen],"%s","Reverse");
+
+ pathLen += strlen(&pathChar[pathLen])+1;
+ for (uint8_t i=0;i<ToeSeg;i++) {
+ pathChar[pathLen] = i+1;
+ pathLen++;
+ }
+ for (uint8_t i=OuterEndSeg;i<InnerEndSeg;i++) {
+ pathChar[pathLen] = i+1;
+ pathLen++;
+ }
+ pathChar[pathLen] = 0;
+ pathLen++;
+ pathChar[pathLen] = 0;
+ pathLen++;
+ pathChar[pathLen] = 0;
+ pathLen++;
+
+ pp->paths = (signed char *)pathChar;
+ segCnt = tempSegs_da.cnt;
+ }
+#endif
+
+ if (!( (dp->type== NTO_CORNU) || (dp->type == NTO_CORNUWYE) || (dp->type == NTO_CORNU3WAY))) {
+ segOrder = pp->segOrder;
+ segCnt = strlen( segOrder );
+ if (segCnt%3 != 0)
+ AbortProg( dp->label );
+ segCnt /= 3;
+ DYNARR_SET( trkSeg_t, tempSegs_da, segCnt );
+ tempSegs_da.cnt = segCnt;
+ memset( &tempSegs(0), 0, segCnt * sizeof tempSegs(0) );
+ for ( s=0; s<segCnt; s++ ) {
+ segPtr = &tempSegs(s);
+ segPtr->color = wDrawColorBlack;
+ if (*segOrder <= '9')
+ p0 = *segOrder++ - '0';
+ else
+ p0 = *segOrder++ - 'A' + 10;
+ if (*segOrder <= '9')
+ p1 = *segOrder++ - '0';
+ else
+ p1 = *segOrder++ - 'A' + 10;
+ p = *segOrder++ - '0';
+ if (p == 3) {
+ /* cornu */
+ } else if (p != 0) {
+ segPtr->type = SEG_CRVTRK;
+ ComputeCurvedSeg( segPtr, radii[p-1], points[p0], points[p1] );
+ } else {
+ segPtr->type = SEG_STRTRK;
+ segPtr->u.l.pos[0] = points[p0];
+ segPtr->u.l.pos[1] = points[p1];
+
+ }
}
}
@@ -1321,7 +2443,7 @@ static void CopyNonTracks( turnoutInfo_t * to )
{
trkSeg_p sp0;
for ( sp0=to->segs; sp0<&to->segs[to->segCnt]; sp0++ ) {
- if ( sp0->type != SEG_STRTRK && sp0->type != SEG_CRVTRK ) {
+ if ( sp0->type != SEG_STRTRK && sp0->type != SEG_CRVTRK && sp0->type != SEG_BEZTRK ) {
DYNARR_APPEND( trkSeg_t, tempSegs_da, 10 );
tempSegs(tempSegs_da.cnt-1) = *sp0;
}
@@ -1477,7 +2599,7 @@ static void NewTurnPrint(
newTurnout_d.size.y/2.0 );
DrawStraightTrack( &newTurnout_d, pos, p0,
tempEndPts(ep).angle+270.0,
- NULL, newTurnTrackGauge, wDrawColorBlack, 0 );
+ NULL, wDrawColorBlack, 0 );
}
if ( !wPrintPageEnd( newTurnout_d.d ) )
@@ -1538,7 +2660,7 @@ static void NewTurnOk( void * context )
cp = Strcpytrimed( cp, newTurnLeftPartno, TRUE );
strcpy( cp, "\"" );
cp += 1;
- if (curDesign->type == NTO_REGULAR || curDesign->type == NTO_CURVED) {
+ if (curDesign->type == NTO_REGULAR || curDesign->type == NTO_CURVED || curDesign->type == NTO_CORNU ) {
strcpy( cp, " \"" );
cp += 2;
cp = Strcpytrimed( cp, newTurnRightDesc, TRUE );
@@ -1553,15 +2675,17 @@ static void NewTurnOk( void * context )
for ( i=0; i<curDesign->floatCnt; i++ ) {
flt = *(FLOAT_T*)(turnDesignPLs[curDesign->floats[i].index].valueP);
switch( curDesign->floats[i].mode ) {
- case Dim_e:
- flt = ( flt );
- break;
- case Frog_e:
- if (newTurnAngleMode == 0 && flt > 0.0)
- flt = R2D(asin(1.0/flt));
- break;
- case Angle_e:
- break;
+ case Dim_e:
+ flt = ( flt );
+ break;
+ case Frog_e:
+ if (newTurnAngleMode == 0 && flt > 0.0)
+ flt = R2D(asin(1.0/flt));
+ break;
+ case Angle_e:
+ break;
+ case Rad_e:
+ break;
}
sprintf( cp, " %0.6f", flt );
cp += strlen(cp);
@@ -1576,8 +2700,17 @@ static void NewTurnOk( void * context )
CopyNonTracks( customTurnout1 );
if ( customTurnout1 )
customTurnout1->segCnt = 0;
+
+ DIST_T * radii_ends = NULL;
+
+ if ((curDesign->type == NTO_CORNU) ||
+ (curDesign->type == NTO_CORNUWYE) ||
+ (curDesign->type == NTO_CORNU3WAY)) {
+ radii_ends = &radii[0];
+ }
+
to = CreateNewTurnout( newTurnScaleName, tempCustom, tempSegs_da.cnt, &tempSegs(0),
- pathLen, pp->paths, tempEndPts_da.cnt, &tempEndPts(0), FALSE );
+ pathLen, pp->paths, tempEndPts_da.cnt, &tempEndPts(0), radii, FALSE );
to->customInfo = customInfoP;
#endif
if (f) {
@@ -1593,6 +2726,7 @@ static void NewTurnOk( void * context )
switch (curDesign->type) {
case NTO_REGULAR:
points[2].y = - points[2].y;
+ points[3].y = - points[3].y;
points[4].y = - points[4].y;
radii[0] = - radii[0];
LoadSegs( curDesign, FALSE, &pathLen );
@@ -1606,7 +2740,7 @@ static void NewTurnOk( void * context )
if ( customTurnout2 )
customTurnout2->segCnt = 0;
to = CreateNewTurnout( newTurnScaleName, tempCustom, tempSegs_da.cnt, &tempSegs(0),
- pathLen, pp->paths, tempEndPts_da.cnt, &tempEndPts(0), FALSE );
+ pathLen, pp->paths, tempEndPts_da.cnt, &tempEndPts(0), NULL, FALSE );
to->customInfo = customInfoP;
#endif
if (f) {
@@ -1619,26 +2753,41 @@ static void NewTurnOk( void * context )
}
break;
case NTO_CURVED:
- points[1].y = - points[1].y;
+ case NTO_CORNU:
points[2].y = - points[2].y;
+ points[1].y = - points[1].y;
+ points[3].y = - points[3].y;
points[4].y = - points[4].y;
+ points[5].y = - points[5].y;
points[6].y = - points[6].y;
- radii[0] = - radii[0];
- radii[1] = - radii[1];
+ radii[0] = -radii[0];
+ radii[1] = -radii[1];
+ radii[2] = -radii[2];
+ radii[3] = -radii[3];
+ radii[4] = -radii[4];
+ radii[5] = -radii[5];
+ radii[6] = -radii[6];
+ angles[0] = -angles[0];
+ angles[1] = -angles[1];
+ angles[2] = -angles[2];
+ angles[3] = -angles[3];
+ angles[4] = -angles[4];
+ angles[5] = -angles[5];
+ angles[6] = -angles[6];
LoadSegs( curDesign, FALSE, &pathLen );
tempEndPts(1).pos.y = - tempEndPts(1).pos.y;
tempEndPts(1).angle = 180.0 - tempEndPts(1).angle;
tempEndPts(2).pos.y = - tempEndPts(2).pos.y;
tempEndPts(2).angle = 180.0 - tempEndPts(2).angle;
BuildTrimedTitle( tempCustom, "\t", newTurnManufacturer, newTurnRightDesc, newTurnRightPartno );
- tempSegs_da.cnt = segCnt;
+ //tempSegs_da.cnt = segCnt;
#ifndef MKTURNOUT
if (includeNontrackSegments && customTurnout2)
CopyNonTracks( customTurnout2 );
if ( customTurnout2 )
customTurnout2->segCnt = 0;
to = CreateNewTurnout( newTurnScaleName, tempCustom, tempSegs_da.cnt, &tempSegs(0),
- pathLen, pp->paths, tempEndPts_da.cnt, &tempEndPts(0), FALSE );
+ pathLen, pp->paths, tempEndPts_da.cnt, &tempEndPts(0), NULL, FALSE );
to->customInfo = customInfoP;
#endif
if (f) {
@@ -1782,6 +2931,13 @@ static void SetupTurnoutDesignerW( toDesignDesc_t * newDesign )
turnDesignPLs[I_TOANGMODE].option |= PDO_DLGIGNORE;
wControlShow( turnDesignPLs[I_TOANGMODE].control, FALSE );
}
+ if (curDesign->type == NTO_D_SLIP) {
+ turnDesignPLs[I_TOSLIPMODE].option &= ~PDO_DLGIGNORE;
+ wControlShow( turnDesignPLs[I_TOSLIPMODE].control, TRUE );
+ } else {
+ turnDesignPLs[I_TOSLIPMODE].option |= PDO_DLGIGNORE;
+ wControlShow( turnDesignPLs[I_TOSLIPMODE].control, FALSE );
+ }
w = turnDesignWidth-w;
wStringSetWidth( (wString_p)turnDesignPLs[I_TOMANUF].control, w );
@@ -1795,18 +2951,25 @@ static void SetupTurnoutDesignerW( toDesignDesc_t * newDesign )
static void ShowTurnoutDesigner( void * context )
{
+ wBool_t sameTurnout = FALSE;
if (recordF)
fprintf( recordF, TURNOUTDESIGNER " SHOW %s\n", ((toDesignDesc_t*)context)->label );
newTurnScaleName = curScaleName;
newTurnTrackGauge = trackGauge;
+ if (context && (curDesign == context))
+ sameTurnout = TRUE;
SetupTurnoutDesignerW( (toDesignDesc_t*)context );
- newTurnRightDesc[0] = '\0';
- newTurnRightPartno[0] = '\0';
- newTurnLeftDesc[0] = '\0';
- newTurnLeftPartno[0] = '\0';
- newTurnLen0 =
- newTurnOff1 = newTurnLen1 = newTurnAngle1 =
- newTurnOff2 = newTurnLen2 = newTurnAngle2 = 0.0;
+ if (!sameTurnout) { /* Clear Values unless same as last time */
+ newTurnRightDesc[0] = '\0';
+ newTurnRightPartno[0] = '\0';
+ newTurnLeftDesc[0] = '\0';
+ newTurnLeftPartno[0] = '\0';
+ newTurnOff0 = newTurnLen0 = newTurnAngle0 = newTurnRad0 =
+ newTurnOff1 = newTurnLen1 = newTurnAngle1 = newTurnRad1 =
+ newTurnOff2 = newTurnLen2 = newTurnAngle2 = newTurnRad2 =
+ newTurnOff3 = newTurnLen3 = newTurnAngle3 = newTurnRad3 =
+ newTurnToeL = newTurnToeR = 0.0;
+ }
ParamLoadControls( &turnDesignPG );
ParamGroupRecord( &turnDesignPG );
customTurnout1 = NULL;
@@ -1849,7 +3012,7 @@ EXPORT void EditCustomTurnout( turnoutInfo_t * to, turnoutInfo_t * to1 )
strcpy( newTurnManufacturer, mfg );
strcpy( newTurnLeftDesc, descL );
strcpy( newTurnLeftPartno, partL );
- if (dp->type == NTO_REGULAR || dp->type == NTO_CURVED) {
+ if (dp->type == NTO_REGULAR || dp->type == NTO_CURVED || dp->type == NTO_CORNU) {
if ( ! GetArgs( cp, "qqc", &descR, &partR, &cp ))
return;
strcpy( newTurnRightDesc, descR );
@@ -1872,6 +3035,8 @@ EXPORT void EditCustomTurnout( turnoutInfo_t * to, turnoutInfo_t * to1 )
break;
case Angle_e:
break;
+ case Rad_e:
+ break;
}
}
rgb = 0;
@@ -1917,6 +3082,7 @@ EXPORT void EditCustomTurnout( turnoutInfo_t * to, turnoutInfo_t * to1 )
break;
case SEG_STRTRK:
case SEG_CRVTRK:
+ case SEG_BEZTRK:
break;
default:
segsDiff = TRUE;
@@ -1924,34 +3090,42 @@ EXPORT void EditCustomTurnout( turnoutInfo_t * to, turnoutInfo_t * to1 )
}
} else {
for ( sp0=to->segs; (!segsDiff) && sp0<&to->segs[to->segCnt]; sp0++ ) {
- if ( sp0->type != SEG_STRTRK && sp0->type != SEG_CRVTRK )
+ if ( sp0->type != SEG_STRTRK && sp0->type != SEG_CRVTRK && sp0->type != SEG_BEZTRK)
segsDiff = TRUE;
}
}
}
- if ( (!segsDiff) && to1 && (dp->type==NTO_REGULAR||dp->type==NTO_CURVED) ) {
+ if ( (!segsDiff) && to1 && (dp->type==NTO_REGULAR||dp->type==NTO_CURVED||dp->type == NTO_CORNU) ) {
if ( dp->type==NTO_REGULAR ) {
points[2].y = - points[2].y;
- points[4].y = - points[4].y;
radii[0] = - radii[0];
- } else {
+ } else if (dp->type == NTO_CURVED) {
points[1].y = - points[1].y;
points[2].y = - points[2].y;
- points[4].y = - points[4].y;
- points[6].y = - points[6].y;
+ radii[0] = - radii[0];
+ radii[1] = - radii[1];
+ } else {
+ points[2].y = - points[2].y;
+ points[1].y = - points[1].y;
+ angles[1] = -angles[1];
+ angles[2] = -angles[2];
radii[0] = - radii[0];
radii[1] = - radii[1];
}
LoadSegs( dp, FALSE, &pathLen );
if ( dp->type==NTO_REGULAR ) {
points[2].y = - points[2].y;
- points[4].y = - points[4].y;
radii[0] = - radii[0];
- } else {
+ } else if (dp->type == NTO_CURVED) {
points[1].y = - points[1].y;
points[2].y = - points[2].y;
- points[4].y = - points[4].y;
- points[6].y = - points[6].y;
+ radii[0] = - radii[0];
+ radii[1] = - radii[1];
+ } else {
+ points[2].y = - points[2].y;
+ points[1].y = - points[1].y;
+ angles[1] = -angles[1];
+ angles[2] = -angles[2];
radii[0] = - radii[0];
radii[1] = - radii[1];
}
@@ -1982,6 +3156,7 @@ EXPORT void EditCustomTurnout( turnoutInfo_t * to, turnoutInfo_t * to1 )
break;
case SEG_STRTRK:
case SEG_CRVTRK:
+ case SEG_BEZTRK:
break;
default:
segsDiff = TRUE;
@@ -1989,7 +3164,7 @@ EXPORT void EditCustomTurnout( turnoutInfo_t * to, turnoutInfo_t * to1 )
}
} else {
for ( sp0=to1->segs; (!segsDiff) && sp0<&to1->segs[to1->segCnt]; sp0++ ) {
- if ( sp0->type != SEG_STRTRK && sp0->type != SEG_CRVTRK )
+ if ( sp0->type != SEG_STRTRK && sp0->type != SEG_CRVTRK && sp0->type != SEG_BEZTRK)
segsDiff = TRUE;
}
}
@@ -2033,7 +3208,7 @@ EXPORT void InitNewTurn( wMenu_p m )
#include <stdio.h>
#include <stdarg.h>
-char message[1024];
+char message[STR_HUGE_SIZE];
char * curScaleName;
double trackGauge;
long units = 0;
@@ -2201,11 +3376,11 @@ EXPORT BOOL_T WriteSegs(
segs[i].u.p.cnt )>0;
for ( j=0; j<segs[i].u.p.cnt; j++ )
rc &= fprintf( f, "\t\t%0.6f %0.6f\n",
- segs[i].u.p.pts[j].x, segs[i].u.p.pts[j].y )>0;
+ segs[i].u.p.pts[j].pt.x, segs[i].u.p.pts[j].pt.y )>0;
break;
}
}
- rc &= fprintf( f, "\tEND\n" )>0;
+ rc &= fprintf( f, "\t%s\n", END_SEGS )>0;
return rc;
}
@@ -2344,7 +3519,7 @@ int main ( int argc, char * argv[] )
if (argc != 7) Usage(argc0,argv0);
strcpy( newTurnLeftDesc, *argv++ );
strcpy( newTurnLeftPartno, *argv++ );
- newTurnLen1 = GetDim(atof( *argv++ ));
+ newTurnLen0 = GetDim(atof( *argv++ ));
curDesign = &StrSectionDesc;
NewTurnOk( &StrSectionDesc );
break;
@@ -2352,7 +3527,7 @@ int main ( int argc, char * argv[] )
if (argc != 7) Usage(argc0,argv0);
strcpy( newTurnLeftDesc, *argv++ );
strcpy( newTurnLeftPartno, *argv++ );
- newTurnLen1 = GetDim(atof( *argv++ ));
+ newTurnLen0 = GetDim(atof( *argv++ ));
curDesign = &StrSectionDesc;
NewTurnOk( &StrSectionDesc );
break;
@@ -2360,9 +3535,9 @@ int main ( int argc, char * argv[] )
if (argc != 8) Usage(argc0,argv0);
strcpy( newTurnLeftDesc, *argv++ );
strcpy( newTurnLeftPartno, *argv++ );
+ newTurnLen0 = GetDim(atof( *argv++ ));
newTurnLen1 = GetDim(atof( *argv++ ));
- newTurnLen2 = GetDim(atof( *argv++ ));
- sprintf( specialLine, "\tX adjustable %0.6f %0.6f", newTurnLen1, newTurnLen2 );
+ sprintf( specialLine, "\tX adjustable %0.6f %0.6f", newTurnLen0, newTurnLen1 );
curDesign = &StrSectionDesc;
NewTurnOk( &StrSectionDesc );
break;
@@ -2370,8 +3545,8 @@ int main ( int argc, char * argv[] )
if (argc != 8) Usage(argc0,argv0);
strcpy( newTurnLeftDesc, *argv++ );
strcpy( newTurnLeftPartno, *argv++ );
- newTurnLen1 = GetDim(atof( *argv++ ));
- newTurnAngle1 = atof( *argv++ );
+ newTurnLen0 = GetDim(atof( *argv++ ));
+ newTurnAngle0 = atof( *argv++ );
curDesign = &CrvSectionDesc;
NewTurnOk( &CrvSectionDesc );
break;
@@ -2381,10 +3556,10 @@ int main ( int argc, char * argv[] )
strcpy( newTurnLeftPartno, *argv++ );
strcpy( newTurnRightDesc, *argv++ );
strcpy( newTurnRightPartno, *argv++ );
- newTurnLen1 = GetDim(atof( *argv++ ));
- newTurnAngle1 = atof( *argv++ );
- newTurnOff1 = GetDim(atof( *argv++ ));
newTurnLen0 = GetDim(atof( *argv++ ));
+ newTurnAngle0 = atof( *argv++ );
+ newTurnOff0 = GetDim(atof( *argv++ ));
+ newTurnLen1 = GetDim(atof( *argv++ ));
curDesign = &RegDesc;
NewTurnOk( &RegDesc );
break;
@@ -2395,9 +3570,9 @@ int main ( int argc, char * argv[] )
strcpy( newTurnRightDesc, *argv++ );
strcpy( newTurnRightPartno, *argv++ );
radius = GetDim(atof( *argv++ ));
- newTurnAngle1 = atof( *argv++ );
+ newTurnAngle0 = atof( *argv++ );
newTurnLen0 = GetDim(atof( *argv++ ));
- newTurnLen1 = radius * sin(D2R(newTurnAngle1));
+ newTurnLen1 = radius * sin(D2R(newTurnAngle0));
newTurnOff1 = radius * (1-cos(D2R(newTurnAngle1)));
curDesign = &RegDesc;
NewTurnOk( &RegDesc );
@@ -2408,12 +3583,12 @@ int main ( int argc, char * argv[] )
strcpy( newTurnLeftPartno, *argv++ );
strcpy( newTurnRightDesc, *argv++ );
strcpy( newTurnRightPartno, *argv++ );
- newTurnLen2 = GetDim(atof( *argv++ ));
- newTurnAngle2 = atof( *argv++ );
- newTurnOff2 = GetDim(atof( *argv++ ));
newTurnLen1 = GetDim(atof( *argv++ ));
newTurnAngle1 = atof( *argv++ );
newTurnOff1 = GetDim(atof( *argv++ ));
+ newTurnLen0 = GetDim(atof( *argv++ ));
+ newTurnAngle0 = atof( *argv++ );
+ newTurnOff0 = GetDim(atof( *argv++ ));
curDesign = &CrvDesc;
NewTurnOk( &CrvDesc );
break;
@@ -2424,13 +3599,13 @@ int main ( int argc, char * argv[] )
strcpy( newTurnRightDesc, *argv++ );
strcpy( newTurnRightPartno, *argv++ );
radius = GetDim(atof( *argv++ ));
+ newTurnAngle0 = atof( *argv++ );
+ newTurnLen0 = radius * sin(D2R(newTurnAngle0));
+ newTurnOff0 = radius * (1-cos(D2R(newTurnAngle0)));
+ radius = GetDim(atof( *argv++ ));
newTurnAngle1 = atof( *argv++ );
newTurnLen1 = radius * sin(D2R(newTurnAngle1));
newTurnOff1 = radius * (1-cos(D2R(newTurnAngle1)));
- radius = GetDim(atof( *argv++ ));
- newTurnAngle2 = atof( *argv++ );
- newTurnLen2 = radius * sin(D2R(newTurnAngle2));
- newTurnOff2 = radius * (1-cos(D2R(newTurnAngle2)));
curDesign = &CrvDesc;
NewTurnOk( &CrvDesc );
break;
@@ -2440,12 +3615,12 @@ int main ( int argc, char * argv[] )
strcpy( newTurnLeftPartno, *argv++ );
strcpy( newTurnRightDesc, *argv++ );
strcpy( newTurnRightPartno, *argv++ );
+ newTurnLen0 = GetDim(atof( *argv++ ));
+ newTurnAngle0 = atof( *argv++ );
+ newTurnOff0 = GetDim(atof( *argv++ ));
newTurnLen1 = GetDim(atof( *argv++ ));
newTurnAngle1 = atof( *argv++ );
newTurnOff1 = GetDim(atof( *argv++ ));
- newTurnLen2 = GetDim(atof( *argv++ ));
- newTurnAngle2 = atof( *argv++ );
- newTurnOff2 = GetDim(atof( *argv++ ));
curDesign = &WyeDesc;
NewTurnOk( &WyeDesc );
break;
@@ -2453,13 +3628,13 @@ int main ( int argc, char * argv[] )
if (argc != 13) Usage(argc0,argv0);
strcpy( newTurnLeftDesc, *argv++ );
strcpy( newTurnLeftPartno, *argv++ );
+ newTurnLen2 = GetDim(atof( *argv++ ));
newTurnLen0 = GetDim(atof( *argv++ ));
+ newTurnAngle0 = atof( *argv++ );
+ newTurnOff0 = GetDim(atof( *argv++ ));
newTurnLen1 = GetDim(atof( *argv++ ));
newTurnAngle1 = atof( *argv++ );
newTurnOff1 = GetDim(atof( *argv++ ));
- newTurnLen2 = GetDim(atof( *argv++ ));
- newTurnAngle2 = atof( *argv++ );
- newTurnOff2 = GetDim(atof( *argv++ ));
curDesign = &ThreewayDesc;
NewTurnOk( &ThreewayDesc );
break;
@@ -2467,9 +3642,9 @@ int main ( int argc, char * argv[] )
if (argc<9) Usage(argc0,argv0);
strcpy( newTurnLeftDesc, *argv++ );
strcpy( newTurnLeftPartno, *argv++ );
+ newTurnLen0 = GetDim(atof( *argv++ ));
+ newTurnAngle0 = atof( *argv++ );
newTurnLen1 = GetDim(atof( *argv++ ));
- newTurnAngle1 = atof( *argv++ );
- newTurnLen2 = GetDim(atof( *argv++ ));
curDesign = &CrossingDesc;
NewTurnOk( &CrossingDesc );
break;
@@ -2477,9 +3652,9 @@ int main ( int argc, char * argv[] )
if (argc<9) Usage(argc0,argv0);
strcpy( newTurnLeftDesc, *argv++ );
strcpy( newTurnLeftPartno, *argv++ );
+ newTurnLen0 = GetDim(atof( *argv++ ));
+ newTurnAngle0 = atof( *argv++ );
newTurnLen1 = GetDim(atof( *argv++ ));
- newTurnAngle1 = atof( *argv++ );
- newTurnLen2 = GetDim(atof( *argv++ ));
curDesign = &SingleSlipDesc;
NewTurnOk( &SingleSlipDesc );
break;
@@ -2487,9 +3662,9 @@ int main ( int argc, char * argv[] )
strcpy( newTurnLeftDesc, *argv++ );
strcpy( newTurnLeftPartno, *argv++ );
if (argc<9) Usage(argc0,argv0);
+ newTurnLen0 = GetDim(atof( *argv++ ));
+ newTurnAngle0 = atof( *argv++ );
newTurnLen1 = GetDim(atof( *argv++ ));
- newTurnAngle1 = atof( *argv++ );
- newTurnLen2 = GetDim(atof( *argv++ ));
curDesign = &DoubleSlipDesc;
NewTurnOk( &DoubleSlipDesc );
break;
@@ -2497,8 +3672,8 @@ int main ( int argc, char * argv[] )
strcpy( newTurnLeftDesc, *argv++ );
strcpy( newTurnLeftPartno, *argv++ );
if (argc<8) Usage(argc0,argv0);
- newTurnLen1 = GetDim(atof( *argv++ ));
- newTurnOff1 = GetDim(atof( *argv++ ));
+ newTurnLen0 = GetDim(atof( *argv++ ));
+ newTurnOff0 = GetDim(atof( *argv++ ));
curDesign = &DoubleCrossoverDesc;
NewTurnOk( &DoubleCrossoverDesc );
break;
@@ -2531,12 +3706,12 @@ int main ( int argc, char * argv[] )
x1 = radius * sin(D2R(ang));
y1 = radius * cos(D2R(ang));
fprintf( stdout, "\tS 0 0 %0.6f %0.6f %0.6f %0.6f\n", x0, y0, x1, y1 );
- fprintf( stdout, "\tS 16777215 0 %0.6f %0.6f %0.6f %0.6f\n", x1, y1, -x1, -y1 );
+ fprintf( stdout, "\tS 0 0 %0.6f %0.6f %0.6f %0.6f\n", x1, y1, -x1, -y1 );
fprintf( stdout, "\tS 0 0 %0.6f %0.6f %0.6f %0.6f\n", -x1, -y1, -x0, -y0 );
}
fprintf( stdout, "\tA 16711680 0 %0.6f 0.000000 0.000000 0.000000 360.000000\n", radius2 );
fprintf( stdout, "\tA 16711680 0 %0.6f 0.000000 0.000000 0.000000 360.000000\n", radius );
- fprintf( stdout, "\tEND\n" );
+ fprintf( stdout, "\t%s\n", END_SEGS );
break;
default:
fprintf( stderr, "Invalid command: %s\n", argv[-1] );
diff --git a/app/bin/ctrain.c b/app/bin/ctrain.c
index fe41a39..b15cb91 100644
--- a/app/bin/ctrain.c
+++ b/app/bin/ctrain.c
@@ -58,6 +58,7 @@ struct extraData {
long state;
carItem_p item;
double speed;
+ BOOL_T pencils;
BOOL_T direction;
BOOL_T autoReverse;
trainStatus_e status;
@@ -92,7 +93,7 @@ static wButton_p newcarB;
static void ControllerDialogSyncAll(void);
static STATUS_T CmdTrain(wAction_t, coOrd);
static wMenu_p trainPopupM;
-static wMenuPush_p trainPopupMI[8];
+static wMenuPush_p trainPopupMI[10];
static track_p followTrain;
static coOrd followCenter;
static BOOL_T trainsTimeoutPending;
@@ -311,6 +312,24 @@ BOOL_T TraverseTrack2(
return TRUE;
}
+/***************
+ * When a track is deleted, cross check that the Traverse Track reference is removed.
+ */
+EXPORT void CheckCarTraverse(track_p track) {
+
+ track_p car;
+ for (car=NULL; TrackIterate(&car);) {
+ if (GetTrkType(car) == T_CAR) {
+ struct extraData * xx = GetTrkExtraData(car);
+ if (xx->trvTrk.trk == track) {
+ xx->trvTrk.trk=NULL;
+ xx->status = ST_NotOnTrack;
+ }
+ }
+ }
+
+}
+
static BOOL_T drawCarEnable = TRUE;
@@ -358,7 +377,9 @@ static void DrawCar(
}
}
- CarItemDraw(d, xx->item, color, xx->direction, IsLocoMaster(xx), coupler);
+
+
+ CarItemDraw(d, xx->item, color, xx->direction, IsLocoMaster(xx), coupler, xx->pencils, xx->trvTrk.trk);
}
@@ -467,10 +488,10 @@ static void DeleteCar(
}
-static void ReadCar(
+static BOOL_T ReadCar(
char * line)
{
- CarItemRead(line);
+ return CarItemRead(line);
}
@@ -521,6 +542,29 @@ static BOOL_T QueryCar(track_p trk, int query)
}
}
+static BOOL_T StoreCar(
+ track_p car,
+ void **data,
+ long * len) {
+
+ struct extraData *xx = GetTrkExtraData(car);
+ return StoreCarItem(xx->item,data,len);
+
+}
+
+static BOOL_T ReplayCar (track_p car, void *data,long len) {
+
+ struct extraData *xx = GetTrkExtraData(car);
+ return ReplayCarItem(xx->item,data,len);
+
+}
+
+
+static wBool_t CompareCar( track_cp trk1, track_cp trk2 )
+{
+ return TRUE;
+}
+
static trackCmd_t carCmds = {
"CAR ",
@@ -548,6 +592,16 @@ static trackCmd_t carCmds = {
QueryCar, /* query */
NULL, /* ungroup */
NULL, /* flip */
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ ReplayCar,
+ StoreCar,
+ NULL, /*activate*/
+ CompareCar
};
/*
@@ -699,13 +753,13 @@ static void SpeedRedraw(
pts[2][1] = pts[3][1] = y+SLIDER_THICKNESS/2;
pts[0][0] = pts[3][0] = 0;
pts[1][0] = pts[2][0] = SLIDER_WIDTH;
- wDrawFilledPolygon(d, pts, 4, drawColor, 0);
+ wDrawPolygon(d, pts, NULL, 4, drawColor, 0, 0, 0, 1, 0);
drawColor = wDrawFindColor(wRGB(220, 220, 220));
pts[0][1] = pts[1][1] = y+SLIDER_THICKNESS/2;
pts[2][1] = pts[3][1] = y;
pts[0][0] = pts[3][0] = 0;
pts[1][0] = pts[2][0] = SLIDER_WIDTH;
- wDrawFilledPolygon(d, pts, 4, drawColor, 0);
+ wDrawPolygon(d, pts, NULL, 4, drawColor, 0, 0, 0, 1, 0);
wDrawLine(d, 0, y, SLIDER_WIDTH, y, 1, wDrawLineSolid, drawColorRed, 0);
wDrawLine(d, 0, y+SLIDER_THICKNESS/2, SLIDER_WIDTH, y+SLIDER_THICKNESS/2, 1,
wDrawLineSolid, drawColorBlack, 0);
@@ -1068,13 +1122,11 @@ static void MoveMainWindow(
dist *= factor;
Translate(&pos, pos, angle, dist);
- //DrawMapBoundingBox(FALSE);
- mainCenter = pos;
mainD.orig.x = pos.x-mainD.size.x/2;;
mainD.orig.y = pos.y-mainD.size.y/2;;
- MainRedraw();
- MapRedraw();
- //DrawMapBoundingBox(TRUE);
+ panCenter = pos;
+ LOG( log_pan, 2, ( "PanCenter:%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ MainLayout( TRUE, TRUE ); // MoveTrainWindow
}
@@ -1197,7 +1249,7 @@ static void ControllerDialogUpdate(
wButtonSetLabel((wButton_p)pg->paramPtr[I_DIR].control,
(dlg->direction?_("Reverse"):_("Forward")));
SetTrainDirection(dlg->train);
- DrawAllCars();
+ TempRedraw(); // ctrain: change direction
break;
case I_STOP:
@@ -1277,7 +1329,6 @@ static void DrawAllCars(void)
drawCarEnable = TRUE;
wDrawDelayUpdate(mainD.d, TRUE);
wDrawRestoreImage(mainD.d);
- DrawMarkers();
DrawPositionIndicators();
for (car=NULL; TrackIterate(&car);) {
@@ -1291,7 +1342,7 @@ static void DrawAllCars(void)
hi.y = lo.y + size.x;
if (!OFF_MAIND(lo, hi)) {
- DrawCar(car, &mainD, wDrawColorBlack);
+ DrawCar(car, &tempD, wDrawColorBlack);
}
}
}
@@ -1334,12 +1385,9 @@ static void PlaceCar(
{
struct extraData *xx = GetTrkExtraData(car);
DIST_T dists[2];
- int dir;
CarItemPlace(xx->item, &xx->trvTrk, dists);
- for (dir=0; dir<2; dir++) {
- xx->couplerPos[dir] = CarItemFindCouplerMountPoint(xx->item, xx->trvTrk, dir);
- }
+ CarItemFindCouplerMountPoint(xx->item, xx->trvTrk, xx->couplerPos);
car->endPt[0].angle = xx->trvTrk.angle;
Translate(&car->endPt[0].pos, xx->trvTrk.pos, car->endPt[0].angle, dists[0]);
@@ -1787,6 +1835,9 @@ static BOOL_T CheckCoupling(
/* Move second train back along track half a car length */
TraverseTrack2(&trvTrk1, distc/2.0-dist);
+ if ( trvTrk0.trk == NULL || trvTrk1.trk == NULL )
+ // fell off the end of track
+ return FALSE;
/* If tracks are not the same - dont couple */
if (trvTrk1.trk != trvTrk0.trk) {
@@ -2076,7 +2127,7 @@ static BOOL_T MoveTrains(long timeD)
}
ControllerDialogSyncAll();
- DrawAllCars();
+ TempRedraw(); // MoveTrains
return trains_moved;
}
@@ -2427,6 +2478,8 @@ static BOOL_T TrainOnMovableTrack(
#define DO_MUMASTER (5)
#define DO_CHANGEDIR (6)
#define DO_STOP (7)
+#define DO_PENCILS_ON (8)
+#define DO_PENCILS_OFF (9)
static track_p trainFuncCar;
static coOrd trainFuncPos;
static wButton_p trainPauseB;
@@ -2470,12 +2523,11 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
Dtrain.state = 0;
trk0 = NULL;
tempSegs_da.cnt = 0;
- DYNARR_SET(trkSeg_t, tempSegs_da, 8);
+ DYNARR_SET(trkSeg_t, tempSegs_da, 8);
RestartTrains();
wButtonSetLabel(trainPauseB, (char*)goI);
trainTime0 = 0;
AttachTrains();
- DrawAllCars();
curTrainDlg->train = NULL;
curTrainDlg->speed = -1;
wDrawClear((wDraw_p)curTrainDlg->trainPGp->paramPtr[I_SLIDER].control);
@@ -2484,6 +2536,7 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
wShow(curTrainDlg->win);
wControlShow((wControl_p)newcarB, (toolbarSet&(1<<BG_HOTBAR)) == 0);
currCarItemPtr = NULL;
+ TempRedraw(); // CmdTrain C_START
return C_CONTINUE;
case C_TEXT:
@@ -2516,6 +2569,7 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
}
xx = GetTrkExtraData(currCar);
+ xx->pencils = FALSE;
dist = CarItemCoupledLength(xx->item)/2.0;
Translate(&pos, xx->trvTrk.pos, xx->trvTrk.angle, dist);
SetTrkEndPoint(currCar, 0, pos, xx->trvTrk.angle);
@@ -2578,7 +2632,6 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
SetCurTrain(trk0);
}
- DrawAllCars();
return C_CONTINUE;
case C_MOVE:
@@ -2589,7 +2642,6 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
pos.x += delta.x;
pos.y += delta.y;
pos0 = pos;
- /*DrawCars( &tempD, currCar, FALSE );*/
xx = GetTrkExtraData(currCar);
trk0 = OnTrack(&pos0, FALSE, TRUE);
@@ -2613,7 +2665,6 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
PlaceTrainInit(currCar, trk0, pos0, xx->trvTrk.angle,
(MyGetKeyState()&WKEY_SHIFT) == 0);
ControllerDialogSync(curTrainDlg);
- DrawAllCars();
return C_CONTINUE;
case C_UP:
@@ -2629,11 +2680,9 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
}
Dtrain.state = 1;
- /*MainRedraw();*/
ControllerDialogSync(curTrainDlg);
}
- DrawAllCars();
InfoSubstituteControls(NULL, NULL);
currCar = trk0 = NULL;
currCarItemPtr = NULL;
@@ -2668,14 +2717,12 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
xx->trvTrk.pos = pos1;
xx->trvTrk.angle = angle1;
PlaceTrain(trk1, FALSE, TRUE);
- DrawAllCars();
}
}
programMode = MODE_TRAIN;
trk0 = NULL;
- MainRedraw(); //Make sure track is redrawn after switch thrown
- MapRedraw();
+ MainRedraw(); //CmdTrain: Make sure track is redrawn after switch thrown
} else {
trk0 = FindCar(&pos);
@@ -2704,6 +2751,14 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
}
xx = GetTrkExtraData(trainFuncCar);
+ if (xx->pencils) {
+ wMenuPushEnable(trainPopupMI[DO_PENCILS_OFF], TRUE);
+ wMenuPushEnable(trainPopupMI[DO_PENCILS_ON], FALSE);
+ } else {
+ wMenuPushEnable(trainPopupMI[DO_PENCILS_OFF], FALSE);
+ wMenuPushEnable(trainPopupMI[DO_PENCILS_ON], TRUE);
+ }
+
trk0 = FindMasterLoco(trainFuncCar,NULL);
dir = IsAligned(xx->trvTrk.angle, FindAngle(xx->trvTrk.pos,
trainFuncPos)) ? 0 : 1;
@@ -2761,8 +2816,7 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
wHide(curTrainDlg->win);
}
- MainRedraw();
- MapRedraw();
+ MainRedraw(); // CmdTrain: Exit
curTrainDlg->train = NULL;
return C_CONTINUE;
@@ -2844,8 +2898,6 @@ static void CmdTrainExit(void * junk)
{
Reset();
InfoSubstituteControls(NULL, NULL);
- MainRedraw();
- MapRedraw();
}
@@ -2879,6 +2931,14 @@ static void TrainFunc(
break;
+ case DO_PENCILS_ON:
+ xx->pencils = TRUE;
+ break;
+
+ case DO_PENCILS_OFF:
+ xx->pencils = FALSE;
+ break;
+
case DO_FLIPCAR:
temp0 = GetTrkEndTrk(trainFuncCar,0);
pos0 = GetTrkEndPos(trainFuncCar,0);
@@ -3019,16 +3079,15 @@ static void TrainFunc(
break;
}
- MainRedraw(); //Redraw if Train altered
- MapRedraw();
+ MainRedraw(); //TrainFunc: Redraw if Train altered
if (trainsState == TRAINS_PAUSE) {
RestartTrains();
} else {
- DrawAllCars();
}
}
+EXPORT wIndex_t trainCmdInx;
void InitCmdTrain(wMenu_p menu)
{
@@ -3036,8 +3095,8 @@ void InitCmdTrain(wMenu_p menu)
log_trainPlayback = LogFindIndex("trainPlayback");
trainPLs[I_ZERO].winLabel = (char*)wIconCreatePixMap(zero_xpm);
ParamRegister(&trainPG);
- AddMenuButton(menu, CmdTrain, "cmdTrain", _("Train"),
- wIconCreatePixMap(train_xpm), LEVEL0_50, IC_POPUP2|IC_LCLICK|IC_RCLICK, 0,
+ trainCmdInx = AddMenuButton(menu, CmdTrain, "cmdTrain", _("Train"),
+ wIconCreatePixMap(train_xpm), LEVEL0_50, IC_POPUP3|IC_LCLICK|IC_RCLICK, 0,
NULL);
stopI = wIconCreatePixMap(ballred);
goI = wIconCreatePixMap(ballgreen);
@@ -3053,6 +3112,10 @@ void InitCmdTrain(wMenu_p menu)
TrainFunc, (void*)DO_UNCOUPLE);
trainPopupMI[DO_FLIPCAR] = wMenuPushCreate(trainPopupM, "", _("Flip Car"), 0,
TrainFunc, (void*)DO_FLIPCAR);
+ trainPopupMI[DO_PENCILS_ON] = wMenuPushCreate(trainPopupM, "", _("Clearance Lines On"), 0,
+ TrainFunc, (void*)DO_PENCILS_ON);
+ trainPopupMI[DO_PENCILS_OFF] = wMenuPushCreate(trainPopupM, "", _("Clearance Lines Off"), 0,
+ TrainFunc, (void*)DO_PENCILS_OFF);
trainPopupMI[DO_FLIPTRAIN] = wMenuPushCreate(trainPopupM, "", _("Flip Train"),
0, TrainFunc, (void*)DO_FLIPTRAIN);
trainPopupMI[DO_MUMASTER] = wMenuPushCreate(trainPopupM, "", _("MU Master"),
diff --git a/app/bin/ctrain.h b/app/bin/ctrain.h
index daa083c..858860b 100644
--- a/app/bin/ctrain.h
+++ b/app/bin/ctrain.h
@@ -24,8 +24,11 @@
#define HAVE_CTRAIN_H
#include "common.h"
+#include "include/paramfile.h"
#include "track.h"
+extern wIndex_t trainCmdInx;
+
struct carItem_t;
typedef struct carItem_t carItem_t;
typedef carItem_t * carItem_p;
@@ -34,8 +37,8 @@ typedef struct {
ANGLE_T angle;
} vector_t;
-carItem_p currCarItemPtr;
-wControl_p newCarControls[2];
+extern carItem_p currCarItemPtr;
+extern wControl_p newCarControls[2];
void DoCarDlg( void );
BOOL_T CarItemRead( char * );
track_p NewCar( wIndex_t, carItem_p, coOrd, ANGLE_T );
@@ -44,7 +47,7 @@ void CarSetVisible( track_p );
void CarItemUpdate( carItem_p );
void CarItemLoadList( void * );
char * CarItemDescribe( carItem_p, long, long * );
-coOrd CarItemFindCouplerMountPoint( carItem_p, traverseTrack_t, int );
+void CarItemFindCouplerMountPoint( carItem_p, traverseTrack_t, coOrd[2] );
void CarItemSize( carItem_p, coOrd * );
char * CarItemNumber( carItem_p );
DIST_T CarItemCoupledLength( carItem_p );
@@ -53,9 +56,16 @@ BOOL_T CarItemIsLocoMaster( carItem_p );
void CarItemSetLocoMaster( carItem_p, BOOL_T );
void CarItemSetTrack( carItem_p, track_p );
void CarItemPlace( carItem_p, traverseTrack_p, DIST_T * );
-void CarItemDraw( drawCmd_p, carItem_p, wDrawColor, int, BOOL_T, vector_t * );
+void CarItemDraw( drawCmd_p, carItem_p, wDrawColor, int, BOOL_T, vector_t *, BOOL_T, track_p );
+BOOL_T StoreCarItem (carItem_p item, void **data,long *len);
+BOOL_T ReplayCarItem(carItem_p item, void *data,long len);
+enum paramFileState GetCarPartCompatibility(int paramFileIndex, SCALEINX_T scaleIndex);
+enum paramFileState GetCarProtoCompatibility(int paramFileIndex, SCALEINX_T scaleIndex);
int CarAvailableCount( void );
BOOL_T TraverseTrack2( traverseTrack_p, DIST_T );
void FlipTraverseTrack( traverseTrack_p );
+void CheckCarTraverse( track_p trk);
+void DeleteCarProto(int fileIndex);
+void DeleteCarPart(int fileIndex);
-#endif // !HAVE_CTRAIN_H \ No newline at end of file
+#endif // !HAVE_CTRAIN_H
diff --git a/app/bin/cturnout.c b/app/bin/cturnout.c
index eace782..150f381 100644
--- a/app/bin/cturnout.c
+++ b/app/bin/cturnout.c
@@ -27,6 +27,7 @@
#include "ccurve.h"
#include "tbezier.h"
+#include "tcornu.h"
#include "cjoin.h"
#include "compound.h"
#include "cstraigh.h"
@@ -37,7 +38,9 @@
#include "layout.h"
#include "messages.h"
#include "param.h"
+#include "include/paramfile.h"
#include "track.h"
+#include "trackx.h"
#include "utility.h"
EXPORT TRKTYP_T T_TURNOUT = -1;
@@ -50,9 +53,12 @@ EXPORT dynArr_t turnoutInfo_da;
EXPORT turnoutInfo_t * curTurnout = NULL;
EXPORT long curTurnoutEp = 0;
+static int curTurnoutInx = -1;
static int log_turnout = 0;
static int log_traverseTurnout = 0;
+static int log_suppressCheckPaths = 0;
+static int log_splitturnout = 0;
static wMenu_p turnoutPopupM;
@@ -71,6 +77,7 @@ static wIndex_t turnoutInx;
static long hideTurnoutWindow;
static void RedrawTurnout(void);
static void SelTurnoutEndPt( wIndex_t, coOrd );
+static void HilightEndPt( void );
static wPos_t turnoutListWidths[] = { 80, 80, 220 };
static const char * turnoutListTitles[] = { N_("Manufacturer"), N_("Part No"), N_("Description") };
@@ -111,6 +118,7 @@ EXPORT turnoutInfo_t * CreateNewTurnout(
PATHPTR_T paths,
EPINX_T endPtCnt,
trkEndPt_t * endPts,
+ DIST_T * radii,
wBool_t updateList )
{
turnoutInfo_t * to;
@@ -126,7 +134,14 @@ EXPORT turnoutInfo_t * CreateNewTurnout(
changes = CHANGE_PARAMS;
}
to->segCnt = segCnt;
- to->segs = (trkSeg_p)memdup( segData, (sizeof *segData) * segCnt );
+ trkSeg_p seg_p;
+ to->segs = (trkSeg_p)memdup( segData, (sizeof (*segData) * segCnt ));
+ seg_p = to->segs;
+ for (int i=0;i<segCnt;i++) {
+ seg_p[i].bezSegs.ptr = NULL;
+ seg_p[i].bezSegs.cnt = 0;
+ seg_p[i].bezSegs.max = 0;
+ }
CopyPoly(to->segs,segCnt);
FixUpBezierSegs(to->segs,to->segCnt);
GetSegBounds( zero, 0.0, segCnt, to->segs, &to->orig, &to->size );
@@ -137,7 +152,7 @@ EXPORT turnoutInfo_t * CreateNewTurnout(
to->paths = (PATHPTR_T)memdup( paths, (sizeof *to->paths) * to->pathLen );
to->paramFileIndex = curParamFileIndex;
if (curParamFileIndex == PARAM_CUSTOM)
- to->contentsLabel = "Custom Turnouts";
+ to->contentsLabel = MyStrdup("Custom Turnouts");
else
to->contentsLabel = curSubContents;
#ifdef TURNOUTCMD
@@ -150,11 +165,137 @@ EXPORT turnoutInfo_t * CreateNewTurnout(
to->barScale = curBarScale>0?curBarScale:-1;
to->special = TOnormal;
+ if (radii) {
+ to->special = TOcurved;
+ DYNARR_SET(DIST_T,to->u.curved.radii,to->endCnt);
+ for (int i=0;i<to->endCnt;i++) {
+ DYNARR_N(DIST_T,to->u.curved.radii,i) = radii[i];
+ }
+ }
if (updateList && changes)
DoChangeNotification( changes );
return to;
}
+/**
+ * Delete a turnout parameter from the list and free the related memory
+ *
+ * \param [IN] to turnout definition to be deleted
+ */
+
+BOOL_T
+DeleteTurnout(void *toInfo)
+{
+ turnoutInfo_t * to = (turnoutInfo_t *)toInfo;
+ MyFree(to->title);
+ MyFree(to->segs);
+ MyFree(to->endPt);
+ MyFree(to->paths);
+ if (to->special) {
+ DYNARR_FREE(DIST_T, to->u.curved.radii);
+ }
+
+ MyFree(to);
+ return(TRUE);
+}
+
+/**
+ * Delete all turnout definitions that came from a specific parameter file.
+ * Due to the way the definitions are loaded from file it is safe to
+ * assume that they form a contiguous block in the array.
+ *
+ * \param [IN] fileIndex parameter file
+ */
+
+void
+DeleteTurnoutParams(int fileIndex)
+{
+ int inx=0;
+ int startInx = -1;
+ int cnt = 0;
+
+ // go to the start of the block
+ while (inx < turnoutInfo_da.cnt &&
+ turnoutInfo(inx)->paramFileIndex != fileIndex) {
+ startInx = inx++;
+ }
+
+ // delete them
+ for (; inx < turnoutInfo_da.cnt &&
+ turnoutInfo(inx)->paramFileIndex == fileIndex; inx++) {
+ turnoutInfo_t * to = turnoutInfo(inx);
+ if (to->paramFileIndex == fileIndex) {
+ DeleteTurnout(to);
+ cnt++;
+ }
+ }
+
+ // copy down the rest of the list to fill the gap
+ startInx++;
+ while (inx < turnoutInfo_da.cnt) {
+ turnoutInfo(startInx++) = turnoutInfo(inx++);
+ }
+
+ // and reduce the actual number
+ turnoutInfo_da.cnt -= cnt;
+}
+
+/**
+ * Check to find out to what extent the contents of the parameter file can be used with
+ * the current layout scale / gauge.
+ *
+ * If parameter scale == layout and parameter gauge == layout we have an exact fit.
+ * If parameter gauge == layout we have compatible track.
+ * OO scale is special cased. If the layout is in OO scale track in HO is considered
+ * an exact fit in spite of scale differences.
+ *
+ * \param paramFileIndex
+ * \param scaleIndex
+ * \return
+ */
+
+enum paramFileState
+GetTrackCompatibility(int paramFileIndex, SCALEINX_T scaleIndex)
+{
+ int i;
+ enum paramFileState ret = PARAMFILE_NOTUSABLE;
+ DIST_T gauge = GetScaleTrackGauge(scaleIndex);
+
+ if (!IsParamValid(paramFileIndex)) {
+ return(PARAMFILE_UNLOADED);
+ }
+
+ // loop over all parameter entries or until a exact fit is found
+ for (i = 0; i < turnoutInfo_da.cnt && ret < PARAMFILE_FIT; i++) {
+ turnoutInfo_t *to = turnoutInfo( i );
+ if (to->paramFileIndex == paramFileIndex ) {
+ if (to->scaleInx == scaleIndex ) {
+ ret = PARAMFILE_FIT;
+ break;
+ } else {
+ if (GetScaleTrackGauge(to->scaleInx) == gauge &&
+ ret < PARAMFILE_COMPATIBLE) {
+ ret = PARAMFILE_COMPATIBLE;
+ // handle special cases
+ // if layout is OO scale, HO scale track is considered exact
+ char *layoutScaleName = GetScaleName(scaleIndex);
+ char *paramScaleName = GetScaleName(to->scaleInx);
+ if (!strcmp(layoutScaleName, "OO") &&
+ !strcmp(paramScaleName, "HO")) {
+ ret = PARAMFILE_FIT;
+ }
+ //if layout is in Japanese or British N scale, N scale is exact
+ if ((!strcmp(layoutScaleName, "N(UK)") ||
+ !strcmp(layoutScaleName, "N(JP)")) &&
+ !strcmp(paramScaleName, "N")) {
+ ret = PARAMFILE_FIT;
+ }
+ }
+ }
+ }
+ }
+ return(ret);
+}
EXPORT wIndex_t CheckPaths(
@@ -162,31 +303,59 @@ EXPORT wIndex_t CheckPaths(
trkSeg_p segs,
PATHPTR_T paths )
{
+ if ((segCnt == 0) || !segs) return -1;
int pc, ps;
PATHPTR_T pp = 0;
- int inx, inx1;
+ int inx;
static dynArr_t segMap_da;
int segInx[2], segEp[2];
int segTrkLast = -1;
- trkSeg_t tempSeg;
-#define segMap(N) DYNARR_N( trkSeg_p, segMap_da, N )
+ // Check that each track segment is on at least one path
+ int suppressCheckPaths = log_suppressCheckPaths > 0 ? logTable(log_suppressCheckPaths).level : 0;
+ if ( suppressCheckPaths == 0 ) {
+ char trkSegInx = 0;
+ for ( int inx = 0; inx<segCnt; inx++ ) {
+ if ( IsSegTrack( &segs[inx] ) ) {
+ trkSegInx++;
+ PATHPTR_T cp = paths;
+ while ( *cp ) {
+ // path is: 'N' 'A' 'M' 'E' 0 1 2 0 3 4 0 0
+ // skip name
+ for ( ; *cp; cp++ );
+ cp++;
+ // check each path component
+ for ( ; cp[0] || cp[1]; cp++ )
+ if ( abs(*cp) == trkSegInx )
+ break;
+ if ( *cp ) // we broke early
+ break;
+ cp += 2;; // Skip 2nd 0
+ }
+ if ( !*cp ) { // we looked and didn't find
+ InputError( "Track segment %d not on Path", FALSE, inx+1 );
+ return -1;;
+ }
+ }
+ }
+ }
- DYNARR_RESET( trkSeg_p, segMap_da );
+typedef struct {
+ trkSeg_p seg;
+ int indx;
+} segMap_t, * segMap_p;
+
+#define segMap(N) DYNARR_N( segMap_t, segMap_da, N )
+ segMap_p sg;
+ DYNARR_RESET( segMap_t, segMap_da );
+ // Don't reshuffle segs, but build an offset map instead just of the tracks
+ // Use the map to set up the paths to point at the correct segs in the Turnout
for ( inx=0; inx<segCnt; inx++ ) {
if ( IsSegTrack(&segs[inx]) ) {
- if ( segTrkLast != inx-1 ) {
- tempSeg = segs[inx];
- segTrkLast++;
- for ( inx1=inx; inx1>segTrkLast; inx1-- ) {
- segs[inx1] = segs[inx1-1];
- }
- segs[segTrkLast] = tempSeg;
- } else {
- segTrkLast = inx;
- }
- DYNARR_APPEND( trkSeg_p, segMap_da, 10 );
- segMap(segMap_da.cnt-1) = &segs[inx];
+ DYNARR_APPEND( segMap_t, segMap_da, 10 );
+ sg = &DYNARR_LAST(segMap_t,segMap_da);
+ sg->seg = &segs[inx];
+ sg->indx = inx;
}
}
@@ -203,8 +372,27 @@ EXPORT wIndex_t CheckPaths(
return -1;
}
#endif
-
+ //Rewrite the Path to point to the nth Track seg using the Map
+ int old_inx;
+ EPINX_T old_EP;
+ if (pp[0]!=0 && ps==0) { // First or only one
+ GetSegInxEP( pp[0], &old_inx, &old_EP );
+ if (old_inx<0 || old_inx>= segMap_da.cnt) {
+ InputError( _("Turnout path[%d] %d is not a valid track segment"),
+ FALSE, pc, ps );
+ return -1;
+ }
+ SetSegInxEP( &pp[0], DYNARR_N(segMap_t,segMap_da,old_inx).indx, old_EP);
+ }
if (pp[0]!=0 && pp[1]!=0 ) {
+ //Rewrite the Path to point to the nth Track seg using the Map
+ GetSegInxEP( pp[1], &old_inx, &old_EP );
+ if (old_inx<0 || old_inx>= segMap_da.cnt) {
+ InputError( _("Turnout path[%d] %d is not a valid track segment"),
+ FALSE, pc, ps );
+ return -1;
+ }
+ SetSegInxEP( &pp[1], DYNARR_N(segMap_t,segMap_da,old_inx).indx, old_EP);
/* check connectivity */
DIST_T d;
GetSegInxEP( pp[0], &segInx[0], &segEp[0] );
@@ -219,12 +407,12 @@ EXPORT wIndex_t CheckPaths(
FALSE, pc, pp[1] );
return -1;
}
- d = FindDistance(
- GetSegEndPt( &segs[segInx[0]], 1-segEp[0], FALSE, NULL ),
- GetSegEndPt( &segs[segInx[1]], segEp[1], FALSE, NULL ) );
+ coOrd p0 = GetSegEndPt( &segs[segInx[0]], 1-segEp[0], FALSE, NULL );
+ coOrd p1 = GetSegEndPt( &segs[segInx[1]], segEp[1], FALSE, NULL );
+ d = FindDistance(p0,p1);
if (d > MIN_TURNOUT_SEG_CONNECT_DIST) {
- InputError( _("Turnout path[%d] %d-%d not connected: %0.3f"),
- FALSE, pc, pp[0], pp[1], d );
+ InputError( _("Turnout path[%d] %d-%d not connected: %0.3f P0(%f,%f) P1(%f,%f)"),
+ FALSE, pc, pp[0], pp[1], d, p0.x, p0.y, p1.x, p1.y );
return -1;
}
}
@@ -246,27 +434,28 @@ static BOOL_T ReadTurnoutParam(
return FALSE;
DYNARR_RESET( trkEndPt_t, tempEndPts_da );
pathCnt = 0;
- if (ReadSegs()) {
- CheckPaths( tempSegs_da.cnt, &tempSegs(0), pathPtr );
- to = CreateNewTurnout( scale, title, tempSegs_da.cnt, &tempSegs(0),
- pathCnt, pathPtr, tempEndPts_da.cnt, &tempEndPts(0), FALSE );
- if (to == NULL)
+ if ( !ReadSegs() )
+ return FALSE;
+ CheckPaths( tempSegs_da.cnt, &tempSegs(0), pathPtr );
+ to = CreateNewTurnout( scale, title, tempSegs_da.cnt, &tempSegs(0),
+ pathCnt, pathPtr, tempEndPts_da.cnt, &tempEndPts(0), NULL, FALSE );
+ MyFree( title );
+ if (to == NULL)
+ return FALSE;
+ if (tempSpecial[0] != '\0') {
+ if (strncmp( tempSpecial, ADJUSTABLE, strlen(ADJUSTABLE) ) == 0) {
+ to->special = TOadjustable;
+ if ( !GetArgs( tempSpecial+strlen(ADJUSTABLE), "ff",
+ &to->u.adjustable.minD, &to->u.adjustable.maxD ) )
+ return FALSE;
+ } else {
+ InputError(_("Unknown special case"), TRUE);
return FALSE;
- if (tempSpecial[0] != '\0') {
- if (strncmp( tempSpecial, ADJUSTABLE, strlen(ADJUSTABLE) ) == 0) {
- to->special = TOadjustable;
- GetArgs( tempSpecial+strlen(ADJUSTABLE), "ff",
- &to->u.adjustable.minD, &to->u.adjustable.maxD );
-
- } else {
- InputError(_("Unknown special case"), TRUE);
- }
- }
- if (tempCustom[0] != '\0') {
- to->customInfo = MyStrdup( tempCustom );
}
}
- MyFree( title );
+ if (tempCustom[0] != '\0') {
+ to->customInfo = MyStrdup( tempCustom );
+ }
return TRUE;
}
@@ -275,6 +464,7 @@ EXPORT turnoutInfo_t * TurnoutAdd( long mode, SCALEINX_T scale, wList_p list, co
{
wIndex_t inx;
turnoutInfo_t * to, * to1 = NULL;
+ turnoutInx = 0;
for ( inx = 0; inx < turnoutInfo_da.cnt; inx++ ) {
to = turnoutInfo(inx);
if ( IsParamValid(to->paramFileIndex) &&
@@ -284,6 +474,10 @@ EXPORT turnoutInfo_t * TurnoutAdd( long mode, SCALEINX_T scale, wList_p list, co
( epCnt <= 0 || epCnt == to->endCnt ) ) {
if (to1==NULL)
to1 = to;
+ if ( to == curTurnout ) {
+ to1 = to;
+ turnoutInx = wListGetCount( list );
+ }
FormatCompoundTitle( mode, to->title );
if (message[0] != '\0') {
wListAddValue( list, message, NULL, to );
@@ -535,44 +729,10 @@ track_p NewHandLaidTurnout(
segs[1].color = wDrawColorBlack;
segs[1].u.l.pos[0] = zero;
segs[1].u.l.pos[1] = p2;
- trk = NewCompound( T_TURNOUT, 0, p0, a0, message, 3, &tempEndPts(0), 22, "Normal\0\1\0\0Reverse\0\2\0\0\0", 2, segs );
+ trk = NewCompound( T_TURNOUT, 0, p0, a0, message, 3, &tempEndPts(0), NULL, 22, "Normal\0\1\0\0Reverse\0\2\0\0\0", 2, segs );
xx = GetTrkExtraData(trk);
xx->handlaid = TRUE;
-#ifdef LATER
- trk = NewTrack( 0, T_TURNOUT, 3,
- sizeof (*xx) + (3-1)*sizeof curTurnout->segs[0] + 1);
- xx = GetTrkExtraData(trk);
- xx->orig = p0;
- xx->angle = a0;
- xx->handlaid = TRUE;
- xx->descriptionOff = zero;
- xx->descriptionSize = zero;
- sprintf( message, "\tHand Laid Turnout, Angle=%0.1f\t", frogA );
- xx->title = MyStrdup( message );
- xx->paths = xx->pathCurr = (PATHPTR_T)"Normal\0\1\0\0Reverse\0\2\0\0\0";
- xx->pathLen = 21;
- SetTrkEndPoint( trk, 0, p0, a0 );
- SetTrkEndPoint( trk, 1, p1, a1 );
- SetTrkEndPoint( trk, 2, p2, a2 );
- xx->segCnt = 2;
- Rotate( &p1, p0, -a0 );
- p1.x -= p0.x;
- p1.y -= p0.y;
- xx->segs[0].type = SEG_STRTRK;
- xx->segs[0].color = wDrawColorBlack;
- xx->segs[0].u.l.pos[0] = zero;
- xx->segs[0].u.l.pos[1] = p1;
- Rotate( &p2, p0, -a0 );
- p2.x -= p0.x;
- p2.y -= p0.y;
- xx->segs[1].type = SEG_STRTRK;
- xx->segs[1].color = wDrawColorBlack;
- xx->segs[1].u.l.pos[0] = zero;
- xx->segs[1].u.l.pos[1] = p2;
- ComputeBoundingBox( trk );
- SetDescriptionOrig( trk );
-#endif
return trk;
}
@@ -588,7 +748,6 @@ static coOrd MapPathPos(
EPINX_T ep )
{
trkSeg_p segPtr;
- wIndex_t inx;
coOrd pos;
if ( segInx < 0 ) {
@@ -596,15 +755,15 @@ static coOrd MapPathPos(
ep = 1-ep;
}
- for ( inx=0,segPtr=xx->segs; inx<xx->segCnt; inx++,segPtr++ ) {
- if ( !IsSegTrack(segPtr) ) continue;
- if ( --segInx > 0 ) continue;
- pos = GetSegEndPt( segPtr, ep, FALSE, NULL );
- REORIGIN1( pos, xx->angle, xx->orig );
- return pos;
+ segPtr=xx->segs+(segInx-1);
+ if (!IsSegTrack(segPtr)) {
+ fprintf( stderr, "mapPathPos: bad segInx: %d\n", segInx );
+ return zero;
}
- fprintf( stderr, "mapPathPos: bad segInx: %d\n", segInx );
- return zero;
+ pos = GetSegEndPt( segPtr, ep, FALSE, NULL );
+ REORIGIN1( pos, xx->angle, xx->orig );
+ return pos;
+
}
@@ -618,21 +777,16 @@ static void DrawTurnout(
long widthOptions = 0;
DIST_T scale2rail;
- if (GetTrkWidth(trk) == 2)
- widthOptions = DTS_THICK2;
- if (GetTrkWidth(trk) == 3)
- widthOptions = DTS_THICK3;
+ widthOptions = DTS_LEFT|DTS_RIGHT;
+
scale2rail = (d->options&DC_PRINT)?(twoRailScale*2+1):twoRailScale;
- if ( tieDrawMode!=TIEDRAWMODE_NONE &&
- d!=&mapD &&
- (d->options&DC_TIES)!=0 &&
- d->scale<scale2rail/2 )
- DrawSegsO( d, trk, xx->orig, xx->angle, xx->segs, xx->segCnt, GetTrkGauge(trk), color, widthOptions|DTS_TIES );
DrawSegsO( d, trk, xx->orig, xx->angle, xx->segs, xx->segCnt, GetTrkGauge(trk), color, widthOptions | DTS_NOCENTER ); // no curve center for turnouts
+
+
for (i=0; i<GetTrkEndPtCnt(trk); i++) {
DrawEndPt( d, trk, i, color );
}
- if ( ((d->funcs->options&wDrawOptTemp)==0) &&
+ if ( (d->options & DC_SIMPLE) == 0 &&
(labelWhen == 2 || (labelWhen == 1 && (d->options&DC_PRINT))) &&
labelScale >= d->scale &&
( GetTrkBits( trk ) & TB_HIDEDESC ) == 0 ) {
@@ -648,11 +802,12 @@ static void DrawTurnout(
}
-static void ReadTurnout(
+static BOOL_T ReadTurnout(
char * line )
{
- ReadCompound( line+8, T_TURNOUT );
- CheckPaths( tempSegs_da.cnt, &tempSegs(0), pathPtr );
+ if ( !ReadCompound( line+8, T_TURNOUT ) )
+ return FALSE;
+ return TRUE;
}
@@ -668,12 +823,27 @@ static ANGLE_T GetAngleTurnout(
if ( ep0 && ep1 )
*ep0 = *ep1 = PickEndPoint( pos, trk );
- for ( segCnt=0; segCnt<xx->segCnt && IsSegTrack(&xx->segs[segCnt]); segCnt++ );
- pos.x -= xx->orig.x;
- pos.y -= xx->orig.y;
- Rotate( &pos, zero, -xx->angle );
- angle = GetAngleSegs( segCnt, xx->segs, &pos, &segInx, NULL, NULL, NULL, NULL );
- return NormalizeAngle( angle+xx->angle );
+ coOrd pos0=pos;
+ double dd = 10000.0;
+ int found = -1;
+ //Cope with tracks not being first
+ for (segCnt =0; segCnt<xx->segCnt ; segCnt++ ) {
+ if (IsSegTrack(&xx->segs[segCnt])) {
+ double d = DistanceSegs( xx->orig, xx->angle, 1, &xx->segs[segCnt], &pos0, NULL );
+ if (d<dd) {
+ dd = d;
+ found = segCnt;
+ }
+ }
+ pos0 = pos;
+ }
+ if (found>=0) {
+ pos.x -= xx->orig.x;
+ pos.y -= xx->orig.y;
+ Rotate( &pos, zero, -xx->angle );
+ angle = GetAngleSegs( 1, &xx->segs[found], &pos, &segInx, NULL, NULL, NULL, NULL );
+ return NormalizeAngle( angle+xx->angle );
+ } else return 0.0;
}
@@ -843,6 +1013,7 @@ static void SplitTurnoutCheckEndPt(
if ( dir < 0 ) segEP = 1-segEP;
pos = GetSegEndPt( &segs[segInx], segEP, FALSE, NULL );
dist = FindDistance( pos, epPos );
+ LOG( log_splitturnout, 1, ( " SPTChkEp P%d DIR:%d SegInx:%d SegEP:%d POS[%0.3f %0.3f] DIST:%0.3f\n", *path, dir, segInx, segEP, pos.x, pos.y, dist ) );
if ( dist>connectDistance )
return;
minDist = trackGauge;
@@ -851,6 +1022,7 @@ static void SplitTurnoutCheckEndPt(
if ( dir < 0 ) segEP = 1-segEP;
pos = splitPos;
dist = DistanceSegs( zero, 0.0, 1, &segs[segInx], &pos, NULL );
+ LOG( log_splitturnout, 1, ( " - P:%d SegInx:%d SegEP:%d DIST:%0.3f\n", path[0], segInx, segEP, dist ) );
if ( dist < minDist ) {
minDist = dist;
splitTurnoutPath = path;
@@ -861,15 +1033,17 @@ static void SplitTurnoutCheckEndPt(
}
}
-
-static BOOL_T SplitTurnout(
- track_p trk,
- coOrd pos,
- EPINX_T ep,
- track_p *leftover,
- EPINX_T * ep0,
- EPINX_T * ep1 )
-{
+EXPORT BOOL_T SplitTurnoutCheck(
+ track_p trk,
+ coOrd pos,
+ EPINX_T ep,
+ track_p *leftover,
+ EPINX_T * ep0,
+ EPINX_T * ep1,
+ BOOL_T check,
+ coOrd * outPos,
+ ANGLE_T * outAngle )
+ {
struct extraData * xx = GetTrkExtraData( trk );
wIndex_t segInx0, segInx, segCnt;
EPINX_T segEP, epCnt, ep2=0, epN;
@@ -891,7 +1065,8 @@ static BOOL_T SplitTurnout(
trkSeg_t newSeg;
if ( (MyGetKeyState()&WKEY_SHIFT) == 0 ) {
- ErrorMessage( MSG_CANT_SPLIT_TRK, _("Turnout") );
+ if (!check)
+ ErrorMessage( MSG_CANT_SPLIT_TRK, _("Turnout") );
return FALSE;
}
@@ -909,6 +1084,7 @@ static BOOL_T SplitTurnout(
epPos.y -= xx->orig.y;
splitTurnoutPath = NULL;
pp = xx->paths;
+ LOG( log_splitturnout, 1, ( "SplitTurnoutCheck T%d POS[%0.3f %0.3f] EP:%d CHK:%d EPPOS[%0.3f %0.3f]\n", trk?trk->index:0, pos.x, pos.y, ep, check, epPos.x, epPos.y ) );
while ( pp[0] ) {
pp += strlen((char *)pp)+1;
while ( pp[0] ) {
@@ -924,7 +1100,8 @@ static BOOL_T SplitTurnout(
}
pp++;
}
- ErrorMessage( _("splitTurnout: can't find segment") );
+ if (!check)
+ ErrorMessage( _("splitTurnout: can't find segment") );
return FALSE;
foundSeg:
@@ -932,6 +1109,7 @@ foundSeg:
* 2a. Check that all other paths thru found segment are the same
*/
GetSegInxEP( splitTurnoutPath[0], &segInx0, &segEP );
+ LOG( log_splitturnout, 1, (" Found Seg: %d SEG:%d EP:%d\n", *splitTurnoutPath, segInx0, segEP ) );
pp = xx->paths;
pathCnt = 0;
while ( pp[0] ) {
@@ -950,7 +1128,8 @@ foundSeg:
pp2 += dir;
}
if ( pp1[0]!='\0' || pp2[0]!='\0' ) {
- ErrorMessage( MSG_SPLIT_POS_BTW_MERGEPTS );
+ if (!check)
+ ErrorMessage( MSG_SPLIT_POS_BTW_MERGEPTS );
return FALSE;
}
}
@@ -965,10 +1144,21 @@ foundSeg:
* 2b. Check that all paths from ep pass thru segInx0
*/
if ( !SplitTurnoutCheckEP( segInx0, epPos, splitTurnoutRoot, -splitTurnoutDir, xx->paths, xx->segs ) ) {
- ErrorMessage( MSG_SPLIT_PATH_NOT_UNIQUE );
+ if (!check)
+ ErrorMessage( MSG_SPLIT_PATH_NOT_UNIQUE );
return FALSE;
}
+ if (check) {
+ segProcDataSplit.getAngle.pos = pos;
+ SegProc( SEGPROC_GETANGLE, xx->segs+segInx0, &segProcDataSplit );
+ *outAngle = NormalizeAngle(segProcDataSplit.getAngle.angle+xx->angle);
+ *outPos = segProcDataSplit.getAngle.pos;
+ (*outPos).x += xx->orig.x;
+ (*outPos).y += xx->orig.y;
+ Rotate( outPos, xx->orig, xx->angle );
+ return TRUE;
+ }
/*
* 3. Split the found segment.
@@ -994,10 +1184,6 @@ foundSeg:
epPos = GetSegEndPt( &segProcDataSplit.split.newSeg[s1], s0, FALSE, &epAngle );
epAngle += 180.0;
}
-#ifdef LATER
- if ( segProcDataSplit.split.length[s1] <= minLength && splitTurnoutPath[1] == '\0' )
- return FALSE;
-#endif
/*
* 4. Map the old segments to new
@@ -1027,6 +1213,7 @@ foundSeg:
} else {
tempSegs(segIndexMap(segInx)-1) = xx->segs[segInx];
}
+ posCnt++;
}
}
@@ -1084,6 +1271,7 @@ foundSeg:
/*
* 7. Convert trailing segments to new tracks
*/
+ int trks = 0;
path = splitTurnoutPath;
if ( segProcDataSplit.split.length[s1] < minLength )
path += splitTurnoutDir;
@@ -1108,6 +1296,7 @@ foundSeg:
trk2 = segProcDataNewTrack.newTrack.trk;
ep2 = 1-epN;
}
+ ++trks;
path += splitTurnoutDir;
}
@@ -1133,6 +1322,16 @@ foundSeg:
return TRUE;
}
+static BOOL_T SplitTurnout(
+ track_p trk,
+ coOrd pos,
+ EPINX_T ep,
+ track_p *leftover,
+ EPINX_T * ep0,
+ EPINX_T * ep1 )
+{
+ return SplitTurnoutCheck(trk,pos,ep,leftover,ep0,ep1,FALSE,NULL,NULL);
+}
static BOOL_T CheckTraverseTurnout(
track_p trk,
@@ -1332,11 +1531,16 @@ static STATUS_T ModifyTurnout( track_p trk, wAction_t action, coOrd pos )
{
struct extraData *xx;
static EPINX_T ep;
+ static wBool_t curved;
DIST_T d;
xx = GetTrkExtraData(trk);
if ( xx->special == TOadjustable ) {
switch ( action ) {
+ case C_START:
+ ep = -1;
+ curved = FALSE;
+ return C_CONTINUE;
case C_DOWN:
ep = PickUnconnectedEndPoint( pos, trk );
if (ep == -1)
@@ -1347,7 +1551,7 @@ static STATUS_T ModifyTurnout( track_p trk, wAction_t action, coOrd pos )
tempSegs(0).u.l.pos[0] = GetTrkEndPos( trk, 1-ep );
tempSegs_da.cnt = 1;
InfoMessage( _("Drag to change track length") );
-
+ return C_CONTINUE;
case C_MOVE:
d = FindDistance( tempSegs(0).u.l.pos[0], pos );
if ( d < xx->u.adjustable.minD )
@@ -1359,28 +1563,148 @@ static STATUS_T ModifyTurnout( track_p trk, wAction_t action, coOrd pos )
if (action == C_MOVE)
InfoMessage( _("Length=%s"), FormatDistance( d ) );
return C_CONTINUE;
-
case C_UP:
d = FindDistance( tempSegs(0).u.l.pos[0],tempSegs(0).u.l.pos[1] );
ChangeAdjustableEndPt( trk, ep, d );
return C_TERMINATE;
-
default:
- ;
+ return C_CONTINUE;
}
}
- return ExtendStraightFromOrig( trk, action, pos );
+
+ return ExtendTrackFromOrig(trk, action, pos);
}
static BOOL_T GetParamsTurnout( int inx, track_p trk, coOrd pos, trackParams_t * params )
{
-
-
- params->type = curveTypeStraight; //TODO should check if last segment is actually straight
- if (inx == PARAMS_CORNU || inx == PARAMS_BEZIER) {
+ struct extraData *xx;
+ xx = GetTrkExtraData(trk);
+ params->type = curveTypeStraight;
+ if (inx == PARAMS_TURNOUT) {
+ params->len = 0.0;
+ int epCnt = GetTrkEndPtCnt(trk);
+ if (epCnt < 3) {
+ double d = 10000.0;
+ params->centroid = zero;
+ //calculate path length from endPt (either to end or to other end)
+ segProcData_t segProcData;
+ trkSeg_p seg;
+ int segInx;
+ int segEP;
+ trkSeg_p segPtr;
+ PATHPTR_T path,pathCurr;
+ //Find starting seg on path (nearest to end Pt)
+ for ( path = xx->pathCurr+strlen((char*)xx->pathCurr)+1; path[0] || path[1]; path++ ) {
+ if ( path[0] == 0 )
+ continue;
+ GetSegInxEP( path[0], &segInx, &segEP );
+ segPtr = xx->segs+segInx;
+ segProcData.distance.pos1 = pos;
+ SegProc( SEGPROC_DISTANCE, segPtr, &segProcData );
+ if ( segProcData.distance.dd < d ) {
+ d = segProcData.distance.dd;
+ pathCurr = path;
+ }
+ }
+ GetSegInxEP( pathCurr[0], &segInx, &segEP );
+ seg = xx->segs+segInx;
+ d = 0.0;
+ //Loop through segs on path from endPt adding
+ while (pathCurr[0]) {
+ GetSegInxEP( pathCurr[0], &segInx, &segEP );
+ seg = xx->segs+segInx;
+ SegProc(SEGPROC_LENGTH, seg, &segProcData );
+ d += segProcData.length.length;
+ pathCurr += segEP?1:-1;
+ }
+ params->len = d;
+ } else {
+ double x, y;
+ x = 0; y = 0;
+ for (int i=0;i<epCnt; i++) {
+ coOrd cpos = GetTrkEndPos(trk,i);
+ x += cpos.x;
+ y += cpos.y;
+ }
+ params->centroid.x = x/epCnt;
+ params->centroid.y = y/epCnt;
+ params->len = FindDistance(params->centroid,pos)*2; //Times two because it will be halved by track.c
+ }
+ return TRUE;
+ }
+ if ((inx == PARAMS_CORNU) || (inx == PARAMS_EXTEND)) {
+ params->type = curveTypeStraight;
params->arcR = 0.0;
params->arcP = zero;
+ params->ep = PickEndPoint(pos, trk);
+ params->circleOrHelix = FALSE;
+ if (params->ep>=0) {
+ params->angle = GetTrkEndAngle(trk,params->ep);
+ params->track_angle = params->angle + params->ep?0:180;
+ } else {
+ params->angle = params-> track_angle = 0;
+ return FALSE;
+ }
+ /* Use end radii if we have them */
+ //if (xx->special == TOcurved) {
+ // params->type = curveTypeCurve;
+ // params->arcR = fabs(DYNARR_N(DIST_T,xx->u.curved.radii,params->ep));
+ // if (params->arcR != 0.0)
+ // Translate(&params->arcP,pos,params->track_angle-90.0,params->arcR);
+ // else
+ // params->type = curveTypeStraight;
+ // return TRUE;
+ //}
+ /* Find the path we are closest to */
+ PATHPTR_T pathCurr = 0;
+ int segInx, subSegInx;
+ trkSeg_p segPtr;
+ double d = 10000;
+ struct extraData * xx = GetTrkExtraData(trk);
+ /* Get parms from that seg */
+ wBool_t back,negative;
+ coOrd segPos = pos;
+ Rotate(&segPos,xx->orig,-xx->angle);
+ segPos.x -= xx->orig.x;
+ segPos.y -= xx->orig.y;
+
+ params->track_angle = GetAngleSegs( //Find correct subSegment
+ xx->segCnt,xx->segs,
+ &segPos, &segInx, &d , &back, &subSegInx, &negative );
+ if (segInx ==- 1) return FALSE;
+ segPtr = xx->segs+segInx;
+ switch (segPtr->type) {
+ case SEG_BEZTRK:
+ if ( negative != back ) params->track_angle = NormalizeAngle(params->track_angle+180); //Bezier is in reverse
+ segPtr = xx->segs + segInx;
+ trkSeg_p subSegPtr = (trkSeg_p)segPtr->bezSegs.ptr+subSegInx;
+ if (subSegPtr->type == SEG_CRVTRK) {
+ params->type = curveTypeCurve;
+ params->arcR = fabs(subSegPtr->u.c.radius);
+ params->arcP = subSegPtr->u.c.center;
+ params->arcP.x += xx->orig.x;
+ params->arcP.y += xx->orig.y;
+ Rotate(&params->arcP,xx->orig,xx->angle);
+ params->arcA0 = subSegPtr->u.c.a0;
+ params->arcA1 = subSegPtr->u.c.a1;
+ }
+ return TRUE;
+ break;
+ case SEG_CRVTRK:
+ params->type = curveTypeCurve;
+ params->arcR = fabs(segPtr->u.c.radius);
+ params->arcP = segPtr->u.c.center;
+ params->arcP.x += xx->orig.x;
+ params->arcP.y += xx->orig.y;
+ Rotate(&params->arcP,xx->orig,xx->angle);
+ params->arcA0 = segPtr->u.c.a0;
+ params->arcA1 = segPtr->u.c.a1;
+ return TRUE;
+ break;
+ }
+ params->arcR = 0.0;
+ params->arcP = zero;
params->ep = PickEndPoint(pos,trk); //Nearest
if (params->ep>=0) {
params->angle = GetTrkEndAngle(trk,params->ep);
@@ -1391,7 +1715,10 @@ static BOOL_T GetParamsTurnout( int inx, track_p trk, coOrd pos, trackParams_t *
}
return TRUE;
}
- params->ep = PickUnconnectedEndPointSilent( pos, trk );
+ if ((inx == PARAMS_1ST_JOIN) || (inx == PARAMS_2ND_JOIN))
+ params->ep = PickEndPoint(pos, trk);
+ else
+ params->ep = PickUnconnectedEndPointSilent( pos, trk );
if (params->ep == -1)
return FALSE;
params->lineOrig = GetTrkEndPos(trk,params->ep);
@@ -1441,15 +1768,11 @@ static BOOL_T QueryTurnout( track_p trk, int query )
case Q_NOT_PLACE_FROGPOINTS:
case Q_HAS_DESC:
case Q_MODIFY_REDRAW_DONT_UNDRAW_TRACK:
- case Q_CAN_EXTEND:
return TRUE;
case Q_MODIFY_CAN_SPLIT:
- if (GetTrkEndPtCnt(trk) <= 2) { // allow splitting of simple track und buffers
- return TRUE ;
- }
- else {
- return FALSE;
- }
+ return TRUE;
+ case Q_IS_TURNOUT:
+ return TRUE;
case Q_CAN_PARALLEL:
if( GetTrkEndPtCnt( trk ) == 2 && fabs( GetTrkEndAngle( trk, 0 ) - GetTrkEndAngle( trk, 1 )) == 180.0 )
return TRUE;
@@ -1485,7 +1808,7 @@ static void DrawTurnoutPositionIndicator(
pos0 = MapPathPos( xx, path[1], 0 );
} else if ( path[1] == 0 ) {
pos1 = MapPathPos( xx, path[0], 1 );
- DrawLine( &mainD, pos0, pos1, drawTurnoutPositionWidth, color );
+ DrawLine( &tempD, pos0, pos1, drawTurnoutPositionWidth, color );
}
}
}
@@ -1505,7 +1828,6 @@ EXPORT void AdvanceTurnoutPositionIndicator(
if ( GetTrkType(trk) != T_TURNOUT )
AbortProg( "nextTurnoutPosition" );
- DrawTurnoutPositionIndicator( trk, wDrawColorWhite );
path = xx->pathCurr;
path += strlen((char *)path)+1;
while ( path[0] || path[1] )
@@ -1514,7 +1836,6 @@ EXPORT void AdvanceTurnoutPositionIndicator(
if ( *path == 0 )
path = xx->paths;
xx->pathCurr = path;
- DrawTurnoutPositionIndicator( trk, selectedColor );
if ( angleR == NULL || posR == NULL )
return;
trvtrk.trk = trk;
@@ -1548,9 +1869,11 @@ static BOOL_T MakeParallelTurnout(
track_p trk,
coOrd pos,
DIST_T sep,
+ DIST_T factor,
track_p * newTrk,
coOrd * p0R,
- coOrd * p1R )
+ coOrd * p1R,
+ BOOL_T track)
{
ANGLE_T angle = GetTrkEndAngle(trk,1);
struct extraData *xx, *yy;
@@ -1578,42 +1901,61 @@ static BOOL_T MakeParallelTurnout(
*/
if( newTrk ) {
- endPt = MyMalloc( GetTrkEndPtCnt( trk ) * sizeof( trkEndPt_t ));
- endPt[ 0 ].pos = endPts[ 0 ];
- endPt[ 0 ].angle = GetTrkEndAngle( trk, 0 );
- endPt[ 1 ].pos = endPts[ 1 ];
- endPt[ 1 ].angle = GetTrkEndAngle( trk, 1 );
-
- yy = GetTrkExtraData(trk);
-
- *newTrk = NewCompound( T_TURNOUT, 0, endPt[ 0 ].pos, endPt[ 0 ].angle + 90.0, yy->title, 2, endPt, yy->pathLen, (char *)yy->paths, yy->segCnt, yy->segs );
- xx = GetTrkExtraData(*newTrk);
- xx->customInfo = yy->customInfo;
-
- /* if (connection((int)curTurnoutEp).trk) {
- CopyAttributes( connection((int)curTurnoutEp).trk, newTrk );
- SetTrkScale( newTrk, curScaleInx );
- } */
- xx->special = yy->special;
- xx->u = yy->u;
-
- SetDescriptionOrig( *newTrk );
- xx->descriptionOff = zero;
- xx->descriptionSize = zero;
-
- SetTrkElev(*newTrk, GetTrkElevMode(trk), GetTrkElev(trk));
- GetTrkEndElev( trk, 0, &option, &d );
- SetTrkEndElev( *newTrk, 0, option, d, NULL );
- GetTrkEndElev( trk, 1, &option, &d );
- SetTrkEndElev( *newTrk, 1, option, d, NULL );
-
- MyFree( endPt );
+ if (track) {
+ endPt = MyMalloc( GetTrkEndPtCnt( trk ) * sizeof( trkEndPt_t ));
+ endPt[ 0 ].pos = endPts[ 0 ];
+ endPt[ 0 ].angle = GetTrkEndAngle( trk, 0 );
+ endPt[ 1 ].pos = endPts[ 1 ];
+ endPt[ 1 ].angle = GetTrkEndAngle( trk, 1 );
+
+ yy = GetTrkExtraData(trk);
+
+ DIST_T * radii = NULL;
+ if (yy->special == TOcurved) {
+ radii = MyMalloc(GetTrkEndPtCnt(trk) * sizeof(DIST_T));
+ for (int i=0;i<GetTrkEndPtCnt( trk );i++) {
+ radii[i] = DYNARR_N(DIST_T,yy->u.curved.radii,i);
+ }
+ }
+
+ *newTrk = NewCompound( T_TURNOUT, 0, endPt[ 0 ].pos, endPt[ 0 ].angle + 90.0, yy->title, 2, endPt, radii, yy->pathLen, (char *)yy->paths, yy->segCnt, yy->segs );
+ xx = GetTrkExtraData(*newTrk);
+ xx->customInfo = yy->customInfo;
+
+ /* if (connection((int)curTurnoutEp).trk) {
+ CopyAttributes( connection((int)curTurnoutEp).trk, newTrk );
+ SetTrkScale( newTrk, curScaleInx );
+ } */
+ xx->special = yy->special;
+
+ xx->u = yy->u;
+
+ SetDescriptionOrig( *newTrk );
+ xx->descriptionOff = zero;
+ xx->descriptionSize = zero;
+
+ SetTrkElev(*newTrk, GetTrkElevMode(trk), GetTrkElev(trk));
+ GetTrkEndElev( trk, 0, &option, &d );
+ SetTrkEndElev( *newTrk, 0, option, d, NULL );
+ GetTrkEndElev( trk, 1, &option, &d );
+ SetTrkEndElev( *newTrk, 1, option, d, NULL );
+
+ MyFree( endPt );
+ } else {
+ tempSegs(0).color = wDrawColorBlack;
+ tempSegs(0).width = 0;
+ tempSegs_da.cnt = 1;
+ tempSegs(0).type = track?SEG_STRTRK:SEG_STRLIN;
+ tempSegs(0).u.l.pos[0] = endPts[ 0 ];
+ tempSegs(0).u.l.pos[1] = endPts[ 1 ];
+ *newTrk = MakeDrawFromSeg( zero, 0.0, &tempSegs(0) );
+ }
} else {
/* draw some temporary track while command is in process */
tempSegs(0).color = wDrawColorBlack;
tempSegs(0).width = 0;
tempSegs_da.cnt = 1;
- tempSegs(0).type = SEG_STRTRK;
+ tempSegs(0).type = track?SEG_STRTRK:SEG_STRLIN;
tempSegs(0).u.l.pos[0] = endPts[ 0 ];
tempSegs(0).u.l.pos[1] = endPts[ 1 ];
}
@@ -1625,8 +1967,26 @@ static BOOL_T MakeParallelTurnout(
return TRUE;
}
+static wBool_t CompareTurnout( track_cp trk1, track_cp trk2 )
+{
+ struct extraData *xx1 = GetTrkExtraData( trk1 );
+ struct extraData *xx2 = GetTrkExtraData( trk2 );
+ char * cp = message + strlen(message);
+ REGRESS_CHECK_POS( "Orig", xx1, xx2, orig )
+ REGRESS_CHECK_ANGLE( "Angle", xx1, xx2, angle )
+ REGRESS_CHECK_INT( "Handlaid", xx1, xx2, handlaid )
+ REGRESS_CHECK_INT( "Flipped", xx1, xx2, flipped )
+ REGRESS_CHECK_INT( "Ungrouped", xx1, xx2, ungrouped )
+ REGRESS_CHECK_INT( "Split", xx1, xx2, split )
+ /* desc orig is not stable
+ REGRESS_CHECK_POS( "DescOrig", xx1, xx2, descriptionOrig ) */
+ REGRESS_CHECK_POS( "DescOff", xx1, xx2, descriptionOff )
+ REGRESS_CHECK_POS( "DescSize", xx1, xx2, descriptionSize )
+ return CompareSegs( xx1->segs, xx1->segCnt, xx1->segs, xx1->segCnt );
+}
+
static trackCmd_t turnoutCmds = {
- N_("TURNOUT "),
+ "TURNOUT ",
DrawTurnout,
DistanceCompound,
DescribeCompound,
@@ -1654,7 +2014,13 @@ static trackCmd_t turnoutCmds = {
DrawTurnoutPositionIndicator,
AdvanceTurnoutPositionIndicator,
CheckTraverseTurnout,
- MakeParallelTurnout };
+ MakeParallelTurnout,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ CompareTurnout };
#ifdef TURNOUTCMD
@@ -1702,7 +2068,7 @@ static void TurnoutChange( long changes )
(changes&CHANGE_PARAMS) == 0 ) )
return;
lastScaleName = curScaleName;
- curTurnout = NULL;
+ //curTurnout = NULL;
curTurnoutEp = 0;
wControlShow( (wControl_p)turnoutListL, FALSE );
wListClear( turnoutListL );
@@ -1710,7 +2076,7 @@ static void TurnoutChange( long changes )
if (turnoutInfo_da.cnt <= 0)
return;
curTurnout = TurnoutAdd( LABEL_TABBED|LABEL_MANUF|LABEL_PARTNO|LABEL_DESCR, GetLayoutCurScale(), turnoutListL, &maxTurnoutDim, -1 );
- wListSetIndex( turnoutListL, 0 );
+ wListSetIndex( turnoutListL, turnoutInx );
wControlShow( (wControl_p)turnoutListL, TRUE );
if (curTurnout == NULL) {
wDrawClear( turnoutD.d );
@@ -1727,7 +2093,6 @@ static void TurnoutChange( long changes )
static void RedrawTurnout()
{
- coOrd p, s;
RescaleTurnout();
LOG( log_turnout, 2, ( "SelTurnout(%s)\n", (curTurnout?curTurnout->title:"<NULL>") ) )
@@ -1740,10 +2105,7 @@ LOG( log_turnout, 2, ( "SelTurnout(%s)\n", (curTurnout?curTurnout->title:"<NULL>
DrawSegs( &turnoutD, zero, 0.0, curTurnout->segs, curTurnout->segCnt,
trackGauge, wDrawColorBlack );
curTurnoutEp = 0;
- p.x = curTurnout->endPt[0].pos.x - trackGauge;
- p.y = curTurnout->endPt[0].pos.y - trackGauge;
- s.x = s.y = trackGauge*2.0 /*+ turnoutD.minSize*/;
- DrawHilight( &turnoutD, p, s );
+ HilightEndPt();
}
@@ -1796,7 +2158,9 @@ static void HilightEndPt( void )
p.x = curTurnout->endPt[(int)curTurnoutEp].pos.x - trackGauge;
p.y = curTurnout->endPt[(int)curTurnoutEp].pos.y - trackGauge;
s.x = s.y = trackGauge*2.0 /*+ turnoutD.minSize*/;
- DrawHilight( &turnoutD, p, s );
+ wDrawSetTempMode( turnoutD.d, TRUE );
+ DrawHilight( &turnoutD, p, s, FALSE );
+ wDrawSetTempMode( turnoutD.d, FALSE );
}
@@ -1806,7 +2170,6 @@ static void SelTurnoutEndPt(
{
if (action != C_DOWN) return;
- HilightEndPt();
curTurnoutEp = TOpickEndPoint( pos, curTurnout );
HilightEndPt();
LOG( log_turnout, 3, (" selected (action=%d) %ld\n", action, curTurnoutEp ) )
@@ -1831,13 +2194,27 @@ static struct {
coOrd rot0, rot1;
} Dto;
+static dynArr_t vector_da;
+#define vector(N) DYNARR_N( vector_t, vector_da, N )
typedef struct {
DIST_T off;
ANGLE_T angle;
EPINX_T ep;
+ track_p trk;
} vector_t;
+/*
+ * PlaceTurnoutTrial
+ *
+ * OUT Track - the Track that the Turnout is closest to
+ * IN/OUT Pos - Position of the Turnout end
+ * OUT Angle1 - The angle on the Track at the position
+ * OUT Angle2 - The angle of the Turnout (can be reversed from Angle 2 if the point is to the left)
+ * OUT Count - The number of connections
+ * OUT Max - The maximum distance between the ends and the connection points
+ * OUT Vector - An array of end points positions and offsets
+ */
static void PlaceTurnoutTrial(
track_p *trkR,
coOrd *posR,
@@ -1856,23 +2233,30 @@ static void PlaceTurnoutTrial(
ANGLE_T epAngle;
int i, connCnt = 0;
DIST_T d, maxD = 0;
+ coOrd testP = pos;
- if ( (*trkR = trk = OnTrack( &pos, FALSE, TRUE )) != NULL &&
+ if (*trkR && (GetTrkDistance(*trkR,&testP)<trackGauge)) { //Have Track, stick with it unless outside bounds
+ trk = *trkR;
+ pos = testP;
+ } else *trkR = trk = OnTrack( &pos, FALSE, TRUE );
+ if ( (trk) != NULL &&
!QueryTrack(trk,Q_CANNOT_PLACE_TURNOUT) &&
(ep0 = PickEndPoint( pos, trk )) >= 0 &&
! ( GetTrkType(trk) == T_TURNOUT &&
(trk1=GetTrkEndTrk(trk,ep0)) &&
GetTrkType(trk1) == T_TURNOUT) &&
- ! GetLayerFrozen(GetTrkLayer(trk)) ) {
+ ! GetLayerFrozen(GetTrkLayer(trk)) &&
+ ! GetLayerModule(GetTrkLayer(trk))) {
epPos = GetTrkEndPos( trk, ep0 );
d = FindDistance( pos, epPos );
if (d <= minLength)
pos = epPos;
- if ( GetTrkType(trk) == T_TURNOUT ) {
+ if ( GetTrkType(trk) == T_TURNOUT ) { //Only on the end
ep0 = ep1 = PickEndPoint( pos, trk );
angle = GetTrkEndAngle( trk, ep0 );
} else {
angle = GetAngleAtPoint( trk, pos, &ep0, &ep1 );
+ if (ep0==1) angle = NormalizeAngle(angle+180); //Reverse if curve backwards
}
angle = NormalizeAngle( angle + 180.0 );
if ( NormalizeAngle( FindAngle( pos, *posR ) - angle ) < 180.0 && ep0 != ep1 )
@@ -1883,18 +2267,21 @@ static void PlaceTurnoutTrial(
Rotate( &epPos, zero, angle );
pos.x -= epPos.x;
pos.y -= epPos.y;
- *posR = pos;
+ *posR = pos; //The place the Turnout end sits
LOG( log_turnout, 3, ( "placeTurnout T%d (%0.3f %0.3f) A%0.3f\n",
GetTrkIndex(trk), pos.x, pos.y, angle ) )
/*InfoMessage( "Turnout(%d): Angle=%0.3f", GetTrkIndex(trk), angle );*/
-
+ track_p ctrk = NULL;
+ int ccnt = 0;
+ DIST_T clarge = 100000;
for (i=0;i<curTurnout->endCnt;i++) {
posI = curTurnout->endPt[i].pos;
epPos = AddCoOrd( pos, posI, angle );
epAngle = NormalizeAngle( curTurnout->endPt[i].angle + angle );
conPos = epPos;
if ((trk = OnTrack(&conPos, FALSE, TRUE)) != NULL &&
- !GetLayerFrozen(GetTrkLayer(trk))) {
+ !GetLayerFrozen(GetTrkLayer(trk)) &&
+ !GetLayerModule(GetTrkLayer(trk))) {
v->off = FindDistance( epPos, conPos );
v->angle = FindAngle( epPos, conPos );
if ( GetTrkType(trk) == T_TURNOUT ) {
@@ -1902,14 +2289,28 @@ LOG( log_turnout, 3, ( "placeTurnout T%d (%0.3f %0.3f) A%0.3f\n",
aa = GetTrkEndAngle( trk, ep0 );
} else {
aa = GetAngleAtPoint( trk, conPos, &ep0, &ep1 );
+ if (ep0) //Backwards - so reverse
+ aa = NormalizeAngle(aa+180);
}
v->ep = i;
- aa = NormalizeAngle( aa - epAngle + connectAngle/2.0 );
- if ( IsClose(v->off) &&
- ( aa<connectAngle || ( aa>180.0 && aa<180.0+connectAngle ) ) &&
- ! ( GetTrkType(trk) == T_TURNOUT &&
+ aa = fabs(DifferenceBetweenAngles( aa, epAngle ));
+ if (QueryTrack(trk,Q_IS_CORNU) ) { //Make sure only two conns to each Cornu
+ int k=0;
+ v->trk = trk;
+ for (int j=0; j<i;j++) {
+ if (vector(j).trk == trk) k++;
+ }
+ if (k<2) { //Already two conns to this track
+ connCnt++;
+ if (v->off > maxD)
+ maxD = v->off;
+ v++;
+
+ }
+ } else if (( IsClose(v->off) && (aa<connectAngle || aa>180-connectAngle) &&
+ !( GetTrkType(trk) == T_TURNOUT &&
(trk1=GetTrkEndTrk(trk,ep0)) &&
- GetTrkType(trk1) == T_TURNOUT ) ) {
+ GetTrkType(trk1) == T_TURNOUT )) ) {
if (v->off > maxD)
maxD = v->off;
connCnt++;
@@ -1927,7 +2328,7 @@ LOG( log_turnout, 3, ( "placeTurnout T%d (%0.3f %0.3f) A%0.3f\n",
static void PlaceTurnout(
- coOrd pos )
+ coOrd pos, track_p trk )
{
coOrd p, pos1, pos2;
track_p trk1, trk2;
@@ -1936,21 +2337,24 @@ static void PlaceTurnout(
DIST_T d, maxD1, maxD2, sina;
vector_t *V, * maxV;
- static dynArr_t vector_da;
-#define vector(N) DYNARR_N( vector_t, vector_da, N )
+
pos1 = Dto.place = Dto.pos = pos;
+LOG( log_turnout, 1, ( "Place Turnout @ %0.3fx%0.3f\n", Dto.pos.x, Dto.pos.y ) );
if (curTurnoutEp >= (long)curTurnout->endCnt)
curTurnoutEp = 0;
DYNARR_SET( vector_t, vector_da, curTurnout->endCnt );
+ if (trk) trk1 = trk;
+ else trk1 = NULL;
PlaceTurnoutTrial( &trk1, &pos1, &a1, &a2, &connCnt1, &maxD1, &vector(0) );
if (connCnt1 > 0) {
- Dto.pos = pos1;
- Dto.trk = trk1;
- Dto.angle = a1;
- if ( (MyGetKeyState()&WKEY_SHIFT)==0 && connCnt1 > 1 && maxD1 >= 0.001 ) {
+ Dto.pos = pos1; //First track pos
+LOG( log_turnout, 1, ( " trial 1 @ %0.3fx%0.3f\n", Dto.pos.x, Dto.pos.y ) );
+ Dto.trk = trk1; //Track
+ Dto.angle = a1; //Angle of track to put down
+ if ( ((MyGetKeyState()&WKEY_SHIFT)==0) && (connCnt1 > 1) && (maxD1 >= 0.001) ) { //Adjust if not Shift
maxV = &vector(0);
- for ( i=1; i<connCnt1; i++ ) {
+ for ( i=1; i<connCnt1; i++ ) { //Ignore first point
V = &vector(i);
if ( V->off > maxV->off ) {
maxV = V;
@@ -1964,9 +2368,11 @@ static void PlaceTurnout(
if (NormalizeAngle( maxV->angle - a3) > 180)
d = -d;
Translate( &pos2, pos, a2, d );
+ trk2 = trk1;
PlaceTurnoutTrial( &trk2, &pos2, &a2, &a, &connCnt2, &maxD2, &vector(0) );
if ( connCnt2 >= connCnt1 && maxD2 < maxD1 ) {
Dto.pos = pos2;
+LOG( log_turnout, 1, ( " trial 2 @ %0.3fx%0.3f\n", Dto.pos.x, Dto.pos.y ) );
Dto.trk = trk2;
Dto.angle = a2;
maxD1 = maxD2;
@@ -1987,6 +2393,7 @@ static void PlaceTurnout(
Rotate( &p, zero, Dto.angle );
Dto.pos.x = pos.x - p.x;
Dto.pos.y = pos.y - p.y;
+LOG( log_turnout, 1, ( " final @ %0.3fx%0.3f\n", Dto.pos.x, Dto.pos.y ) );
}
}
@@ -2010,6 +2417,7 @@ static void AddTurnout( void )
#define connection(N) DYNARR_N( junk_t, connection_da, N )
#define leftover(N) DYNARR_N( junk_t, leftover_da, N )
BOOL_T visible;
+ BOOL_T no_ties;
BOOL_T noConnections;
coOrd p0, p1;
@@ -2020,8 +2428,6 @@ static void AddTurnout( void )
AbortProg( "addTurnout: bad cnt" );
}
- DrawSegs( &tempD, Dto.pos, Dto.angle,
- curTurnout->segs, curTurnout->segCnt, trackGauge, wDrawColorBlack );
UndoStart( _("Place New Turnout"), "addTurnout" );
titleLen = strlen( curTurnout->title );
@@ -2041,13 +2447,29 @@ static void AddTurnout( void )
for (i=0;i<curTurnout->endCnt;i++) {
AuditTracks( "addTurnout [%d]", i );
connection(i).trk = leftover(i).trk = NULL;
+ connection(i).ep = -1;
+ leftover(i).ep = -1;
/* connect each endPt ... */
epPos = tempEndPts(i).pos;
- if ((trk = OnTrack(&epPos, FALSE, TRUE)) != NULL &&
+ if ((trk = OnTrack(&epPos, FALSE, TRUE)) != NULL && //Adjust epPos onto existing track
(!GetLayerFrozen(GetTrkLayer(trk))) &&
+ (!GetLayerModule(GetTrkLayer(trk))) &&
(!QueryTrack(trk,Q_CANNOT_PLACE_TURNOUT)) ) {
LOG( log_turnout, 1, ( "ep[%d] on T%d @(%0.3f %0.3f)\n",
i, GetTrkIndex(trk), epPos.x, epPos.y ) )
+ DIST_T dd = 10000.0;
+ int nearest = -1;
+ for (int j=0;j<curTurnout->endCnt;j++) {
+ if (j<i && (connection(j).trk == trk)) {
+ nearest = -1;
+ goto nextEnd; //Track already chosen in use
+ }
+ if (dd>FindDistance(epPos,tempEndPts(j).pos)) {
+ dd = FindDistance(epPos,tempEndPts(j).pos);
+ nearest = j;
+ }
+ }
+ if (nearest != i) continue; //Not this one
d = FindDistance( tempEndPts(i).pos, epPos );
if ( GetTrkType(trk) == T_TURNOUT ) {
ep0 = ep1 = PickEndPoint( epPos, trk );
@@ -2055,15 +2477,14 @@ LOG( log_turnout, 1, ( "ep[%d] on T%d @(%0.3f %0.3f)\n",
} else {
a = GetAngleAtPoint( trk, epPos, &ep0, &ep1 );
}
- aa = NormalizeAngle( a - tempEndPts(i).angle + connectAngle/2.0 );
- if ( IsClose(d) &&
- ( (ep0!=ep1 && aa<connectAngle) ||
- ( aa>180.0 && aa<180.0+connectAngle ) ) &&
- ! ( GetTrkType(trk) == T_TURNOUT &&
- (trk1=GetTrkEndTrk(trk,ep0)) &&
- GetTrkType(trk1) == T_TURNOUT ) ) {
- /* ... if they are close to a track and line up */
- if (aa<connectAngle) {
+ aa = fabs(DifferenceBetweenAngles( a , tempEndPts(i).angle));
+ if ((QueryTrack(trk,Q_IS_CORNU) && (d<trackGauge*2)) ||
+ (( IsClose(d) && ( ((ep0!=ep1) && (aa<=connectAngle)) || ((aa<=connectAngle) || (aa>180-connectAngle)) ) &&
+ ! ( GetTrkType(trk) == T_TURNOUT &&
+ (trk1=GetTrkEndTrk(trk,ep0)) &&
+ GetTrkType(trk1) == T_TURNOUT )) ) ) {
+ /* ... if they are close enough to a track and line up */
+ if (aa<90) {
epx = ep1;
epy = ep0;
} else {
@@ -2071,9 +2492,9 @@ LOG( log_turnout, 1, ( "ep[%d] on T%d @(%0.3f %0.3f)\n",
epy = ep1;
}
LOG( log_turnout, 1, ( " Attach! epx=%d\n", epx ) )
- if ( epx != epy &&
- (d=FindDistance(GetTrkEndPos(trk,epy), epPos)) < minLength &&
- (trk1=GetTrkEndTrk(trk,epy)) != NULL ) {
+ if ( (epx != epy) &&
+ ((d=FindDistance(GetTrkEndPos(trk,epy), epPos)) < minLength) &&
+ ((trk1=GetTrkEndTrk(trk,epy)) != NULL) ) {
epx = GetEndPtConnectedToMe( trk1, trk );
trk = trk1;
}
@@ -2085,22 +2506,21 @@ LOG( log_turnout, 1, ( " Attach! epx=%d\n", epx ) )
connection(i).trk = trk;
connection(i).ep = epx;
if (leftover(i).trk != NULL) {
- leftover(i).ep = PickEndPoint( epPos, leftover(i).trk );
+ leftover(i).ep = 1-epx;
/* did we already split this track? */
for (j=0;j<i;j++) {
- if ( leftover(j).trk == leftover(i).trk ) {
- leftover(i).trk = NULL;
- break;
- }
- if ( leftover(j).trk == connection(i).trk ) {
- /* yes. Remove the leftover piece */
+ if ( connection(i).trk == leftover(j).trk ) {
+ /* yes. Remove the latest leftover piece */
LOG( log_turnout, 1, ( " deleting leftover T%d\n",
GetTrkIndex(leftover(i).trk) ) )
- leftover(j).trk = NULL;
AuditTracks( "addTurnout [%d] before delete", i );
+ UndrawNewTrack( leftover(i).trk );
DeleteTrack( leftover(i).trk, FALSE );
AuditTracks( "addTurnout [%d] before delete", i );
leftover(i).trk = NULL;
+ leftover(i).ep = -1;
+ leftover(j).trk = NULL; //Forget this leftover
+ leftover(j).ep = -1;
break;
}
}
@@ -2108,13 +2528,15 @@ LOG( log_turnout, 1, ( " deleting leftover T%d\n",
}
}
}
+nextEnd:;
}
AuditTracks( "addTurnout after loop" );
/*
* copy data */
- newTrk = NewCompound( T_TURNOUT, 0, Dto.pos, Dto.angle, curTurnout->title, tempEndPts_da.cnt, &tempEndPts(0), curTurnout->pathLen, (char *)curTurnout->paths, curTurnout->segCnt, curTurnout->segs );
+
+ newTrk = NewCompound( T_TURNOUT, 0, Dto.pos, Dto.angle, curTurnout->title, tempEndPts_da.cnt, &tempEndPts(0), NULL, curTurnout->pathLen, (char *)curTurnout->paths, curTurnout->segCnt, curTurnout->segs );
xx = GetTrkExtraData(newTrk);
xx->customInfo = curTurnout->customInfo;
if (connection((int)curTurnoutEp).trk) {
@@ -2122,28 +2544,50 @@ LOG( log_turnout, 1, ( " deleting leftover T%d\n",
SetTrkScale( newTrk, GetLayoutCurScale());
}
xx->special = curTurnout->special;
+ if (xx->special == TOcurved) {
+ DYNARR_SET(DIST_T,xx->u.curved.radii,curTurnout->endCnt);
+ for (int i=0;i<curTurnout->endCnt;i++) {
+ DYNARR_N(DIST_T,xx->u.curved.radii,i) = DYNARR_N(DIST_T,curTurnout->u.curved.radii,i);
+ }
+ }
xx->u = curTurnout->u;
/* Make the connections */
visible = FALSE;
+ no_ties = FALSE;
noConnections = TRUE;
AuditTracks( "addTurnout T%d before connection", GetTrkIndex(newTrk) );
for (i=0;i<curTurnout->endCnt;i++) {
if ( connection(i).trk != NULL ) {
+ if (GetTrkEndTrk(connection(i).trk,connection(i).ep)) continue;
p0 = GetTrkEndPos( newTrk, i );
p1 = GetTrkEndPos( connection(i).trk, connection(i).ep );
ANGLE_T a0 = GetTrkEndAngle( newTrk, i);
ANGLE_T a1 = GetTrkEndAngle( connection(i).trk, connection(i).ep );
- ANGLE_T a = NormalizeAngle(a1-a0+180);
+ ANGLE_T a = fabs(DifferenceBetweenAngles(a0+180,a1));
d = FindDistance( p0, p1 );
- if ( d < connectDistance ) {
+ if (QueryTrack(connection(i).trk,Q_IS_CORNU)) {
+ ANGLE_T a = DifferenceBetweenAngles(FindAngle(p0,p1),a0);
+ if (IsClose(d) || fabs(a)<=90.0) {
+ trk1 = connection(i).trk;
+ ep0 = connection(i).ep;
+ if (GetTrkEndTrk(trk1,ep0)) continue;
+ DrawEndPt( &mainD, trk1, ep0, wDrawColorWhite );
+ trackParams_t params;
+ GetTrackParams( PARAMS_EXTEND, newTrk, GetTrkEndPos(newTrk,i), &params);
+ SetCornuEndPt(trk1, ep0, GetTrkEndPos(newTrk,i), params.arcP, NormalizeAngle(params.angle+180.0), params.arcR);
+ ConnectTracks(newTrk,i,trk1,ep0);
+ DrawEndPt( &mainD, trk1, ep0, wDrawColorBlack );
+ }
+ } else if ( d < connectDistance && (a<=connectAngle)) {
noConnections = FALSE;
trk1 = connection(i).trk;
ep0 = connection(i).ep;
DrawEndPt( &mainD, trk1, ep0, wDrawColorWhite );
ConnectTracks( newTrk, i, trk1, ep0 );
visible |= GetTrkVisible(trk1);
+ no_ties |= GetTrkNoTies(trk1);
DrawEndPt( &mainD, trk1, ep0, wDrawColorBlack );
}
}
@@ -2151,10 +2595,8 @@ LOG( log_turnout, 1, ( " deleting leftover T%d\n",
if (noConnections)
visible = TRUE;
SetTrkVisible( newTrk, visible);
-#ifdef LATER
- SetTrkScale( newTrk, curScaleInx );
- ComputeCompoundBoundingBox( newTrk );
-#endif
+ SetTrkNoTies(newTrk, no_ties);
+ SetTrkBridge(newTrk, FALSE);
AuditTracks( "addTurnout T%d before dealing with leftovers", GetTrkIndex(newTrk) );
/* deal with the leftovers */
@@ -2165,20 +2607,59 @@ LOG( log_turnout, 1, ( " deleting leftover T%d\n",
coOrd off;
DIST_T maxX;
track_p lt = leftover(i).trk;
- EPINX_T ep, le = leftover(i).ep;
- coOrd pos;
+ if (QueryTrack(lt,Q_IS_CORNU)) {
+ UndrawNewTrack(lt);
+ DeleteTrack(lt,TRUE);
+ leftover(i).trk = NULL;
+ continue;
+ }
+ EPINX_T ep, le = leftover(i).ep, nearest_ep =-1;
+ coOrd pos, nearest_pos = zero;
+ ANGLE_T nearest_angle = 0.0;
+ DIST_T nearest_radius = 0.0;
+ coOrd nearest_center = zero;
+ trackParams_t params;
maxX = 0.0;
+ DIST_T dd = 10000.0;
a = NormalizeAngle( GetTrkEndAngle(lt,le) + 180.0 );
for (ep=0; ep<curTurnout->endCnt; ep++) {
FindPos( &off, NULL, GetTrkEndPos(newTrk,ep), GetTrkEndPos(lt,le), a, 100000.0 );
+ pos = GetTrkEndPos(newTrk,ep);
+ DIST_T d = GetTrkDistance(lt, &pos);
+ if ((d<dd) && ( d<trackGauge/2)) {
+ ANGLE_T a = GetTrkEndAngle( lt, le );
+ ANGLE_T a2 = fabs(DifferenceBetweenAngles(GetTrkEndAngle(newTrk,ep),a+180));
+ if (GetTrkEndTrk(newTrk,ep)==NULL) { //Not if joined already
+ if (a2<90 && QueryTrack(lt,Q_IS_CORNU)) { //And Cornu in the right direction
+ GetTrackParams( PARAMS_EXTEND, newTrk, GetTrkEndPos(newTrk,ep), &params);
+ nearest_pos = GetTrkEndPos(newTrk,ep);
+ nearest_angle = NormalizeAngle(params.angle+180.0);
+ nearest_radius = params.arcR;
+ nearest_center = params.arcP;
+ nearest_ep = ep;
+ }
+ dd = d;
+ }
+ }
if (off.x > maxX)
maxX = off.x;
}
maxX += trackGauge;
pos = Dto.pos;
+ if (QueryTrack(lt,Q_IS_CORNU)) {
+ if (nearest_ep >=0) {
+ SetCornuEndPt(lt, le, nearest_pos, nearest_center, nearest_angle, nearest_radius);
+ ConnectTracks(newTrk,nearest_ep,lt,le);
+ } else {
+ UndrawNewTrack(lt);
+ DeleteTrack(lt,TRUE);
+ }
+ } else {
AuditTracks( "addTurnout T%d[%d] before trimming L%d[%d]", GetTrkIndex(newTrk), i, GetTrkIndex(lt), le );
- TrimTrack( lt, le, maxX );
+ wBool_t rc = TrimTrack( lt, le, maxX, nearest_pos, nearest_angle, nearest_radius, nearest_center );
AuditTracks( "addTurnout T%d[%d] after trimming L%d[%d]", GetTrkIndex(newTrk), i, GetTrkIndex(lt), le );
+
+ }
}
}
@@ -2198,17 +2679,59 @@ LOG( log_turnout, 1, ( " deleting leftover T%d\n",
static void TurnoutRotate( void * pangle )
{
+ if (Dto.state == 0)
+ return;
ANGLE_T angle = (ANGLE_T)(long)pangle;
- if (Dto.state == 1)
- DrawSegs( &tempD, Dto.pos, Dto.angle,
- curTurnout->segs, curTurnout->segCnt, trackGauge, wDrawColorBlack );
- else
- Dto.pos = cmdMenuPos;
+ angle /= 1000.0;
+ Dto.pos = cmdMenuPos;
Rotate( &Dto.pos, cmdMenuPos, angle );
Dto.angle += angle;
- DrawSegs( &tempD, Dto.pos, Dto.angle,
- curTurnout->segs, curTurnout->segCnt, trackGauge, wDrawColorBlack );
- Dto.state = 1;
+ TempRedraw(); // TurnoutRotate
+}
+
+static dynArr_t anchors_da;
+#define anchors(N) DYNARR_N(trkSeg_t,anchors_da,N)
+
+void static CreateArrowAnchor(coOrd pos,ANGLE_T a,DIST_T len) {
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).width = 0;
+ anchors(i).u.l.pos[0] = pos;
+ Translate(&anchors(i).u.l.pos[1],pos,NormalizeAngle(a+135),len);
+ anchors(i).color = wDrawColorBlue;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).width = 0;
+ anchors(i).u.l.pos[0] = pos;
+ Translate(&anchors(i).u.l.pos[1],pos,NormalizeAngle(a-135),len);
+ anchors(i).color = wDrawColorBlue;
+}
+
+void static CreateRotateAnchor(coOrd pos) {
+ DIST_T d = tempD.scale*0.15;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = SEG_CRVLIN;
+ anchors(i).width = 0.5;
+ anchors(i).u.c.center = pos;
+ anchors(i).u.c.a0 = 180.0;
+ anchors(i).u.c.a1 = 360.0;
+ anchors(i).u.c.radius = d*2;
+ anchors(i).color = wDrawColorAqua;
+ coOrd head; //Arrows
+ for (int j=0;j<3;j++) {
+ Translate(&head,pos,j*120,d*2);
+ CreateArrowAnchor(head,NormalizeAngle((j*120)+90),d);
+ }
+}
+
+void static CreateMoveAnchor(coOrd pos) {
+ DYNARR_SET(trkSeg_t,anchors_da,anchors_da.cnt+5);
+ DrawArrowHeads(&DYNARR_N(trkSeg_t,anchors_da,anchors_da.cnt-5),pos,0,TRUE,wDrawColorBlue);
+ DYNARR_SET(trkSeg_t,anchors_da,anchors_da.cnt+5);
+ DrawArrowHeads(&DYNARR_N(trkSeg_t,anchors_da,anchors_da.cnt-5),pos,90,TRUE,wDrawColorBlue);
}
/**
@@ -2230,71 +2753,71 @@ EXPORT STATUS_T CmdTurnoutAction(
#ifdef NEWROTATE
static ANGLE_T origAngle;
#endif
+
switch (action & 0xFF) {
case C_START:
Dto.state = 0;
Dto.trk = NULL;
Dto.angle = 0.0;
+ DYNARR_RESET(trkSeg_t,anchors_da);
return C_CONTINUE;
+ case wActionMove:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ if (Dto.state && (MyGetKeyState()&WKEY_CTRL)) {
+ CreateRotateAnchor(pos);
+ } else {
+ CreateMoveAnchor(pos);
+ }
+ return C_CONTINUE;
+ break;
case C_DOWN:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if ( curTurnout == NULL ) return C_CONTINUE;
- if (Dto.state == 1) {
- DrawSegs( &tempD, Dto.pos, Dto.angle,
- curTurnout->segs, curTurnout->segCnt, trackGauge, wDrawColorBlue );
- }
- PlaceTurnout( pos );
+ PlaceTurnout( pos, NULL );
Dto.state = 1;
- DrawSegs( &tempD, Dto.pos, Dto.angle,
- curTurnout->segs, curTurnout->segCnt, trackGauge, wDrawColorBlue );
+ CreateMoveAnchor(pos);
return C_CONTINUE;
case C_MOVE:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if ( curTurnout == NULL ) return C_CONTINUE;
if ( curTurnoutEp >= (long)curTurnout->endCnt )
curTurnoutEp = 0;
- if (Dto.state == 1) {
- DrawSegs( &tempD, Dto.pos, Dto.angle,
- curTurnout->segs, curTurnout->segCnt, trackGauge, wDrawColorBlue );
- } else {
- Dto.state = 1;
- }
- PlaceTurnout( pos );
- DrawSegs( &tempD, Dto.pos, Dto.angle,
- curTurnout->segs, curTurnout->segCnt, trackGauge, wDrawColorBlue );
+ Dto.state = 1;
+ PlaceTurnout( pos, Dto.trk );
+ CreateMoveAnchor(pos);
return C_CONTINUE;
case C_UP:
- InfoMessage( _("Left drag to move, right drag to rotate, press Space or Return to fix track in place or Esc to cancel") );
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ CreateMoveAnchor(pos);
+ InfoMessage( _("Left-Drag to place, Ctrl+Left-Drag or Right-Drag to Rotate, Space or Enter to accept, Esc to Cancel") );
return C_CONTINUE;
case C_RDOWN:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if ( curTurnout == NULL ) return C_CONTINUE;
- if (Dto.state == 1)
- DrawSegs( &tempD, Dto.pos, Dto.angle,
- curTurnout->segs, curTurnout->segCnt, trackGauge, wDrawColorBlue );
- else
- Dto.pos = pos;
+ if (Dto.state == 0) {
+ Dto.pos = pos; // If first, use pos, otherwise use current
+LOG( log_turnout, 1, ( "RDOWN @ %0.3fx%0.3f\n", Dto.pos.x, Dto.pos.y ) );
+ }
Dto.rot0 = Dto.rot1 = pos;
- DrawLine( &tempD, Dto.rot0, Dto.rot1, 0, wDrawColorBlack );
- Dto.state = 1;
+ CreateRotateAnchor(pos);
+ Dto.state = 2;
origPos = Dto.pos;
#ifdef NEWROTATE
origAngle = Dto.angle;
#else
Rotate( &origPos, Dto.rot0, -(Dto.angle + curTurnout->endPt[(int)curTurnoutEp].angle) );
#endif
- DrawSegs( &tempD, Dto.pos, Dto.angle,
- curTurnout->segs, curTurnout->segCnt, trackGauge, wDrawColorBlue );
validAngle = FALSE;
return C_CONTINUE;
case C_RMOVE:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if ( curTurnout == NULL ) return C_CONTINUE;
- DrawSegs( &tempD, Dto.pos, Dto.angle,
- curTurnout->segs, curTurnout->segCnt, trackGauge, wDrawColorBlue );
- DrawLine( &tempD, Dto.rot0, Dto.rot1, 0, wDrawColorBlack );
Dto.rot1 = pos;
if ( FindDistance(Dto.rot0, Dto.rot1) > 0.1*mainD.scale ) {
angle = FindAngle( Dto.rot0, Dto.rot1 );
@@ -2303,6 +2826,7 @@ EXPORT STATUS_T CmdTurnoutAction(
validAngle = TRUE;
}
Dto.pos = origPos;
+LOG( log_turnout, 1, ( "RMOVE pre @ %0.3fx%0.3f\n", Dto.pos.x, Dto.pos.y ) );
#ifdef NEWROTATE
angle -= baseAngle;
Dto.angle = NormalizeAngle( origAngle + angle );
@@ -2311,36 +2835,33 @@ EXPORT STATUS_T CmdTurnoutAction(
Dto.angle = angle - curTurnout->endPt[(int)curTurnoutEp].angle;
#endif
Rotate( &Dto.pos, Dto.rot0, angle );
+LOG( log_turnout, 1, ( "RMOVE post @ %0.3fx%0.3f\n", Dto.pos.x, Dto.pos.y ) );
}
FormatCompoundTitle( listLabels, curTurnout->title );
InfoMessage( _("Angle = %0.3f (%s)"), PutAngle( NormalizeAngle(Dto.angle + 90.0) ), message );
- DrawLine( &tempD, Dto.rot0, Dto.rot1, 0, wDrawColorBlack );
- DrawSegs( &tempD, Dto.pos, Dto.angle,
- curTurnout->segs, curTurnout->segCnt, trackGauge, wDrawColorBlue );
+ Dto.state = 2;
+ CreateRotateAnchor(Dto.rot0);
return C_CONTINUE;
case C_RUP:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if ( curTurnout == NULL ) return C_CONTINUE;
- DrawLine( &tempD, Dto.rot0, Dto.rot1, 0, wDrawColorBlack );
- InfoMessage( _("Left drag to move, right drag to rotate, press Space or Return to fix track in place or Esc to cancel") );
+ Dto.state = 1;
+ CreateMoveAnchor(pos);
+ InfoMessage( _("Left-Drag to place, Ctrl+Left-Drag or Right-Drag to Rotate, Space or Enter to accept, Esc to Cancel") );
return C_CONTINUE;
case C_LCLICK:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if ( curTurnout == NULL ) return C_CONTINUE;
if ( MyGetKeyState() & WKEY_SHIFT ) {
- if (Dto.state == 1)
- DrawSegs( &tempD, Dto.pos, Dto.angle,
- curTurnout->segs, curTurnout->segCnt, trackGauge, wDrawColorBlue );
angle = curTurnout->endPt[(int)curTurnoutEp].angle;
curTurnoutEp++;
if (curTurnoutEp >= (long)curTurnout->endCnt)
curTurnoutEp = 0;
if (Dto.trk == NULL)
Dto.angle = NormalizeAngle( Dto.angle + (angle - curTurnout->endPt[(int)curTurnoutEp].angle ) );
- PlaceTurnout( Dto.place );
- if (Dto.state == 1)
- DrawSegs( &tempD, Dto.pos, Dto.angle,
- curTurnout->segs, curTurnout->segCnt, trackGauge, wDrawColorBlue );
+ PlaceTurnout( Dto.place, Dto.trk );
} else {
CmdTurnoutAction( C_DOWN, pos );
CmdTurnoutAction( C_UP, pos );
@@ -2348,15 +2869,19 @@ EXPORT STATUS_T CmdTurnoutAction(
return C_CONTINUE;
case C_REDRAW:
- if (Dto.state)
+ if (Dto.state) {
DrawSegs( &tempD, Dto.pos, Dto.angle,
curTurnout->segs, curTurnout->segCnt, trackGauge, wDrawColorBlue );
+ }
+ if (anchors_da.cnt>0) {
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
+ }
+ if (Dto.state == 2)
+ DrawLine( &tempD, Dto.rot0, Dto.rot1, 0, wDrawColorBlack );
return C_CONTINUE;
case C_CANCEL:
- if (Dto.state)
- DrawSegs( &tempD, Dto.pos, Dto.angle,
- curTurnout->segs, curTurnout->segCnt, trackGauge, wDrawColorBlue );
+ DYNARR_RESET(trkSeg_t,anchors_da);
Dto.state = 0;
Dto.trk = NULL;
/*wHide( newTurn.reg.win );*/
@@ -2365,11 +2890,16 @@ EXPORT STATUS_T CmdTurnoutAction(
case C_TEXT:
if ((action>>8) != ' ')
return C_CONTINUE;
+ /*no break*/
case C_OK:
+ DYNARR_RESET(trkSeg_t,anchors_da);
AddTurnout();
+ Dto.state=0;
+ Dto.trk = NULL;
return C_TERMINATE;
case C_FINISH:
+ DYNARR_RESET(trkSeg_t,anchors_da);
if (Dto.state != 0 && Dto.trk != NULL)
CmdTurnoutAction( C_OK, pos );
else
@@ -2377,10 +2907,7 @@ EXPORT STATUS_T CmdTurnoutAction(
return C_TERMINATE;
case C_CMDMENU:
- if ( turnoutPopupM == NULL ) {
- turnoutPopupM = MenuRegister( "Turnout Rotate" );
- AddRotateMenu( turnoutPopupM, TurnoutRotate );
- }
+ menuPos = pos;
wMenuPopupShow( turnoutPopupM );
return C_CONTINUE;
@@ -2403,7 +2930,7 @@ static STATUS_T CmdTurnout(
case C_START:
if (turnoutW == NULL) {
/* turnoutW = ParamCreateDialog( &turnoutPG, MakeWindowTitle("Turnout"), "Ok", , (paramActionCancelProc)Reset, TRUE, NULL, F_RESIZE|F_RECALLSIZE, TurnoutDlgUpdate ); */
- turnoutW = ParamCreateDialog( &turnoutPG, MakeWindowTitle(_("Turnout")), _("Close"), (paramActionOkProc)TurnoutOk, NULL, TRUE, NULL, F_RESIZE|F_RECALLSIZE|PD_F_ALT_CANCELLABEL, TurnoutDlgUpdate );
+ turnoutW = ParamCreateDialog( &turnoutPG, MakeWindowTitle(_("Turnout")), _("Close"), (paramActionOkProc)TurnoutOk, wHide, TRUE, NULL, F_RESIZE|F_RECALLSIZE|PD_F_ALT_CANCELLABEL, TurnoutDlgUpdate );
InitNewTurn( turnoutNewM );
}
/* ParamDialogOkActive( &turnoutPG, FALSE ); */
@@ -2425,12 +2952,21 @@ static STATUS_T CmdTurnout(
ParamGroupRecord( &turnoutPG );
return CmdTurnoutAction( action, pos );
+ case wActionMove:
+ return CmdTurnoutAction( action, pos );
+
case C_DOWN:
case C_RDOWN:
ParamDialogOkActive( &turnoutPG, TRUE );
if (hideTurnoutWindow)
wHide( turnoutW );
+ if (((action&0xFF) == C_DOWN) && (MyGetKeyState()&WKEY_CTRL))
+ return CmdTurnoutAction(C_RDOWN, pos); //Convert CTRL into Right
+ /*no break*/
case C_MOVE:
+ if (MyGetKeyState()&WKEY_CTRL)
+ return CmdTurnoutAction (C_RMOVE, pos);
+ /*no break*/
case C_RMOVE:
return CmdTurnoutAction( action, pos );
@@ -2438,11 +2974,13 @@ static STATUS_T CmdTurnout(
case C_RUP:
if (hideTurnoutWindow)
wShow( turnoutW );
- InfoMessage( _("Left drag to move, right drag to rotate, press Space or Return to fix track in place or Esc to cancel") );
+
+ InfoMessage( _("Left-Drag to place, Ctrl+Left-Drag or Right-Drag to Rotate, Space or Enter to accept, Esc to Cancel") );
+ if (((action&0xFF) == C_UP) && (MyGetKeyState()&WKEY_CTRL))
+ return CmdTurnoutAction (C_RUP, pos);
return CmdTurnoutAction( action, pos );
case C_LCLICK:
- HilightEndPt();
CmdTurnoutAction( action, pos );
HilightEndPt();
return C_CONTINUE;
@@ -2487,7 +3025,7 @@ static char * CmdTurnoutHotBarProc(
case HB_SELECT: /* new element is selected */
CmdTurnoutAction( C_FINISH, zero ); /* finish current operation */
curTurnout = to;
- DoCommandB( (void*)(intptr_t)turnoutHotBarCmdInx ); /* continue with new turnut / structure */
+ DoCommandB( (void*)(intptr_t)turnoutHotBarCmdInx ); /* continue with new turnout / structure */
return NULL;
case HB_LISTTITLE:
FormatCompoundTitle( listLabels, to->title );
@@ -2517,7 +3055,7 @@ EXPORT void AddHotBarTurnouts( void )
to->segCnt > 0 &&
CompatibleScale( TRUE, to->scaleInx, GetLayoutCurScale()) ) )
continue;
- AddHotBarElement( to->contentsLabel, to->size, to->orig, TRUE, to->barScale, to, CmdTurnoutHotBarProc );
+ AddHotBarElement( to->contentsLabel, to->size, to->orig, TRUE, FALSE, to->barScale, to, CmdTurnoutHotBarProc );
}
}
@@ -2537,31 +3075,61 @@ static STATUS_T CmdTurnoutHotBar(
switch (action & 0xFF) {
case C_START:
- TurnoutChange( CHANGE_PARAMS|CHANGE_SCALE );
+ //TurnoutChange( CHANGE_PARAMS|CHANGE_SCALE );
if (curTurnout == NULL) {
NoticeMessage2( 0, MSG_TURNOUT_NO_TURNOUT, _("Ok"), NULL );
return C_TERMINATE;
}
FormatCompoundTitle( listLabels|LABEL_DESCR, curTurnout->title );
InfoMessage( _("Place %s and draw into position"), message );
- ParamLoadControls( &turnoutPG );
- ParamGroupRecord( &turnoutPG );
+ wIndex_t listIndex = FindListItemByContext( turnoutListL, curTurnout );
+ if ( listIndex > 0 )
+ turnoutInx = listIndex;
+ ParamLoadControls( &turnoutPG );
+ ParamGroupRecord( &turnoutPG );
+ return CmdTurnoutAction( action, pos );
+
+ case wActionMove:
+ return CmdTurnoutAction( action, pos );
+
+ case C_DOWN:
+ if (MyGetKeyState()&WKEY_CTRL) {
+ return CmdTurnoutAction( C_RDOWN, pos );
+ }
+ /*no break*/
+ case C_RDOWN:
+ return CmdTurnoutAction( action, pos );
+
+ case C_MOVE:
+ if (MyGetKeyState()&WKEY_CTRL) {
+ return CmdTurnoutAction( C_RMOVE, pos );
+ }
+ /*no break*/
+ case C_RMOVE:
return CmdTurnoutAction( action, pos );
case C_UP:
+ if (MyGetKeyState()&WKEY_CTRL) {
+ return CmdTurnoutAction( C_RUP, pos );
+ }
+ /*no break*/
case C_RUP:
- InfoMessage( _("Left drag to move, right drag to rotate, press Space or Return to fix track in place or Esc to cancel") );
+ InfoMessage( _("Left-Drag to place, Ctrl+Left-Drag or Right-Drag to Rotate, Space or Enter to accept, Esc to Cancel") );
return CmdTurnoutAction( action, pos );
+ case C_REDRAW:
+ return CmdTurnoutAction( action, pos );
case C_TEXT:
if ((action>>8) != ' ')
return C_CONTINUE;
+ /* no break*/
case C_OK:
CmdTurnoutAction( action, pos );
return C_CONTINUE;
case C_CANCEL:
HotBarCancel();
+ /*no break*/
default:
return CmdTurnoutAction( action, pos );
}
@@ -2573,12 +3141,18 @@ static STATUS_T CmdTurnoutHotBar(
EXPORT void InitCmdTurnout( wMenu_p menu )
{
- AddMenuButton( menu, CmdTurnout, "cmdTurnout", _("Turnout"), wIconCreatePixMap(turnout_xpm), LEVEL0_50, IC_STICKY|IC_LCLICK|IC_CMDMENU|IC_POPUP2, ACCL_TURNOUT, NULL );
- turnoutHotBarCmdInx = AddMenuButton( menu, CmdTurnoutHotBar, "cmdTurnoutHotBar", "", NULL, LEVEL0_50, IC_STICKY|IC_LCLICK|IC_CMDMENU|IC_POPUP2, 0, NULL );
+ AddMenuButton( menu, CmdTurnout, "cmdTurnout", _("Predefined Track"), wIconCreatePixMap(turnout_xpm), LEVEL0_50, IC_WANT_MOVE|IC_STICKY|IC_LCLICK|IC_CMDMENU|IC_POPUP2, ACCL_TURNOUT, NULL );
+ turnoutHotBarCmdInx = AddMenuButton( menu, CmdTurnoutHotBar, "cmdTurnoutHotBar", "", NULL, LEVEL0_50, IC_WANT_MOVE|IC_STICKY|IC_LCLICK|IC_CMDMENU|IC_POPUP2, 0, NULL );
RegisterChangeNotification( TurnoutChange );
ParamRegister( &turnoutPG );
log_turnout = LogFindIndex( "turnout" );
log_traverseTurnout = LogFindIndex( "traverseTurnout" );
+ log_suppressCheckPaths = LogFindIndex( "suppresscheckpaths" );
+ log_splitturnout = LogFindIndex( "splitturnout" );
+ if ( turnoutPopupM == NULL ) {
+ turnoutPopupM = MenuRegister( "Turnout Rotate" );
+ AddRotateMenu( turnoutPopupM, TurnoutRotate );
+ }
}
#endif
@@ -2587,7 +3161,7 @@ EXPORT void InitTrkTurnout( void )
T_TURNOUT = InitObject( &turnoutCmds );
/*InitDebug( "Turnout", &debugTurnout );*/
- AddParam( N_("TURNOUT "), ReadTurnoutParam );
+ AddParam( "TURNOUT ", ReadTurnoutParam);
}
#ifdef TEST
diff --git a/app/bin/cturntbl.c b/app/bin/cturntbl.c
index 9264572..f15aeff 100644
--- a/app/bin/cturntbl.c
+++ b/app/bin/cturntbl.c
@@ -162,9 +162,19 @@ static ANGLE_T ConstrainTurntableAngle( track_p trk, coOrd pos )
static EPINX_T NewTurntableEndPt( track_p trk, ANGLE_T angle )
{
struct extraData *xx = GetTrkExtraData(trk);
- EPINX_T ep = GetTrkEndPtCnt(trk);
+ EPINX_T ep = -1;
+ /* Reuse an old empty ep if it exists */
+ for (int i =0;i< GetTrkEndPtCnt(trk)-1;i++) {
+ if (GetTrkEndTrk(trk,i) == NULL) {
+ ep = i;
+ break;
+ }
+ }
+ if (ep == -1) {
+ ep = GetTrkEndPtCnt(trk);
+ SetTrkEndPtCnt( trk, ep+1 );
+ }
coOrd pos;
- SetTrkEndPtCnt( trk, ep+1 );
PointOnCircle( &pos, xx->pos, xx->radius, angle );
SetTrkEndPoint( trk, ep, pos, angle );
return ep;
@@ -182,7 +192,8 @@ static void DrawTurntable( track_p t, drawCmd_p d, wDrawColor color )
struct extraData *xx = GetTrkExtraData(t);
coOrd p0, p1;
EPINX_T ep;
- long widthOptions = DTS_TIES;
+ long widthOptions = DTS_LEFT|DTS_RIGHT;
+
if ( !ValidateTurntablePosition(t) ) {
p0.y = p1.y = xx->pos.y;
@@ -194,17 +205,13 @@ static void DrawTurntable( track_p t, drawCmd_p d, wDrawColor color )
}
if (color == wDrawColorBlack)
color = normalColor;
- DrawArc( d, xx->pos, xx->radius, 0.0, 360.0, 0, 0, color );
- if ( programMode != MODE_DESIGN )
- return;
- if ( (d->options&DC_QUICK) == 0 ) {
- DrawStraightTrack( d, p0, p1, FindAngle(p0,p1), t, GetTrkGauge(t), color, widthOptions );
- for ( ep=0; ep<GetTrkEndPtCnt(t); ep++ ) {
- if (GetTrkEndTrk(t,ep) != NULL )
- DrawEndPt( d, t, ep, color );
- }
+ DrawArc( d, xx->pos, xx->radius, 0.0, 360.0, 0, (color == wDrawColorPreviewSelected || color == wDrawColorPreviewUnselected)?3:0, color );
+ DrawStraightTrack( d, p0, p1, FindAngle(p0,p1), t, color, widthOptions );
+ for ( ep=0; ep<GetTrkEndPtCnt(t); ep++ ) {
+ if (GetTrkEndTrk(t,ep) != NULL )
+ DrawEndPt( d, t, ep, color );
}
- if ( ((d->funcs->options&wDrawOptTemp)==0) &&
+ if ( ((d->options&DC_SIMPLE)==0) &&
(labelWhen == 2 || (labelWhen == 1 && (d->options&DC_PRINT))) &&
labelScale >= d->scale ) {
LabelLengths( d, t, color );
@@ -218,9 +225,7 @@ static DIST_T DistanceTurntable( track_p trk, coOrd * p )
ANGLE_T a;
coOrd pos0, pos1;
- d = FindDistance( xx->pos, *p ) - xx->radius;
- if (d < 0.0)
- d = 0.0;
+ d = FindDistance( xx->pos, *p ) - xx->radius; //OK to be negative
if ( programMode == MODE_DESIGN ) {
a = FindAngle( xx->pos, *p );
Translate( p, xx->pos, a, d+xx->radius );
@@ -310,11 +315,11 @@ static BOOL_T WriteTurntable( track_p t, FILE * f )
xx->pos.x, xx->pos.y, xx->radius, xx->currEp )>0;
for (ep=0; ep<GetTrkEndPtCnt(t); ep++)
rc &= WriteEndPt( f, t, ep );
- rc &= fprintf(f, "\tEND\n")>0;
+ rc &= fprintf(f, "\t%s\n", END_SEGS)>0;
return rc;
}
-static void ReadTurntable( char * line )
+static BOOL_T ReadTurntable( char * line )
{
track_p trk;
struct extraData *xx;
@@ -333,12 +338,17 @@ static void ReadTurntable( char * line )
paramVersion<10?"dL000sdpffX":
"dL000sdpffd",
&index, &layer, scale, &visible, &p, &elev, &r, &currEp ))
- return;
+ return FALSE;
+ if ( !ReadSegs() )
+ return FALSE;
trk = NewTrack( index, T_TURNTABLE, 0, sizeof *xx );
- ReadSegs();
SetEndPts( trk, 0 );
xx = GetTrkExtraData(trk);
- SetTrkVisible(trk, visible);
+ if ( paramVersion < 3 ) {
+ SetTrkVisible(trk, visible!=0);
+ } else {
+ SetTrkVisible(trk, visible&2);
+ }
SetTrkScale(trk, LookupScale( scale ) );
SetTrkLayer(trk, layer);
xx->pos = p;
@@ -346,6 +356,7 @@ static void ReadTurntable( char * line )
xx->currEp = currEp;
xx->reverse = 0;
ComputeTurntableBoundingBox( trk );
+ return TRUE;
}
static void MoveTurntable( track_p trk, coOrd orig )
@@ -590,22 +601,32 @@ static STATUS_T ModifyTurntable( track_p trk, wAction_t action, coOrd pos )
}
EXPORT BOOL_T ConnectTurntableTracks(
- track_p trk1,
- EPINX_T ep1,
+ track_p trk1, /*The turntable */
+ EPINX_T ep1, /*Ignored */
track_p trk2,
EPINX_T ep2 ) {
coOrd center, pos;
DIST_T radius;
+ DIST_T dist;
+ if (!QueryTrack(trk1,Q_CAN_ADD_ENDPOINTS)) return FALSE;
TurntableGetCenter( trk1, &center, &radius );
pos = GetTrkEndPos(trk2,ep2);
ANGLE_T angle = FindAngle(center, GetTrkEndPos(trk2,ep2));
- if (NormalizeAngle(GetTrkEndAngle(trk2,ep2) + 180 - angle) < connectAngle) {
- if (FindDistance(center,pos)-radius < connectDistance) {
+ if (fabs(DifferenceBetweenAngles(GetTrkEndAngle(trk2,ep2),angle+180)) <= connectAngle) {
+ dist = FindDistance(center,pos)-radius;
+ if (dist < connectDistance) {
+ UndoStart( _("Connect Turntable Tracks"), "TurnTracks(T%d[%d] T%d[%d] D%0.3f A%0.3F )",
+ GetTrkIndex(trk1), ep1, GetTrkIndex(trk2), ep2, dist, angle );
+ UndoModify(trk1);
EPINX_T ep = NewTurntableEndPt(trk1,angle);
- ConnectTracks( trk1, ep, trk2, ep2 );
+ if (ConnectTracks( trk1, ep, trk2, ep2 )) {
+ UndoUndo();
+ return FALSE;
+ }
return TRUE;
}
}
+ ErrorMessage( MSG_TOO_FAR_APART_DIVERGE );
return FALSE;
}
@@ -688,13 +709,12 @@ static BOOL_T QueryTurntable( track_p trk, int query )
switch ( query ) {
case Q_REFRESH_JOIN_PARAMS_ON_MOVE:
case Q_CANNOT_PLACE_TURNOUT:
- case Q_DONT_DRAW_ENDPOINT:
+ case Q_NODRAWENDPT:
case Q_CAN_NEXT_POSITION:
case Q_ISTRACK:
case Q_NOT_PLACE_FROGPOINTS:
case Q_MODIFY_REDRAW_DONT_UNDRAW_TRACK:
case Q_CAN_ADD_ENDPOINTS:
- case Q_CAN_EXTEND:
return TRUE;
case Q_MODIFY_CAN_SPLIT:
case Q_CORNU_CAN_MODIFY:
@@ -727,7 +747,19 @@ static void DrawTurntablePositionIndicator( track_p trk, wDrawColor color )
pos0 = GetTrkEndPos(trk,xx->currEp);
angle = FindAngle( xx->pos, pos0 );
PointOnCircle( &pos1, xx->pos, xx->radius, angle+180.0 );
- DrawLine( &mainD, pos0, pos1, 3, color );
+ DrawLine( &tempD, pos0, pos1, 3, color );
+}
+
+static wBool_t CompareTurntable( track_cp trk1, track_cp trk2 )
+{
+ struct extraData *xx1 = GetTrkExtraData( trk1 );
+ struct extraData *xx2 = GetTrkExtraData( trk2 );
+ char * cp = message + strlen(message);
+ REGRESS_CHECK_POS( "Pos", xx1, xx2, pos )
+ REGRESS_CHECK_DIST( "Radius", xx1, xx2, radius )
+ REGRESS_CHECK_INT( "CurrEp", xx1, xx2, currEp )
+ REGRESS_CHECK_INT( "Reverse", xx1, xx2, reverse )
+ return TRUE;
}
static void AdvanceTurntablePositionIndicator(
@@ -744,7 +776,6 @@ static void AdvanceTurntablePositionIndicator(
angle1 = FindAngle( xx->pos, pos );
if ( !FindTurntableEndPt( trk, &angle1, &ep, &reverse ) )
return;
- DrawTurntablePositionIndicator( trk, wDrawColorWhite );
angle0 = GetTrkEndAngle(trk,xx->currEp);
if ( ep == xx->currEp ) {
Rotate( posR, xx->pos, 180.0 );
@@ -762,7 +793,6 @@ static void AdvanceTurntablePositionIndicator(
}
*angleR = angle1;
xx->currEp = ep;
- DrawTurntablePositionIndicator( trk, selectedColor );
}
@@ -794,13 +824,21 @@ static trackCmd_t turntableCmds = {
FlipTurntable,
DrawTurntablePositionIndicator,
AdvanceTurntablePositionIndicator,
- CheckTraverseTurntable };
+ CheckTraverseTurntable,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ CompareTurntable };
static STATUS_T CmdTurntable( wAction_t action, coOrd pos )
{
track_p t;
static coOrd pos0;
+ static int state = 0;
wControl_p controls[2];
char * labels[1];
@@ -819,6 +857,7 @@ static STATUS_T CmdTurntable( wAction_t action, coOrd pos )
labels[0] = N_("Diameter");
InfoSubstituteControls( controls, labels );
/*InfoMessage( "Place Turntable");*/
+ state = 0;
return C_CONTINUE;
case C_DOWN:
@@ -833,18 +872,15 @@ static STATUS_T CmdTurntable( wAction_t action, coOrd pos )
InfoSubstituteControls( controls, labels );
ParamLoadData( &turntablePG );
pos0 = pos;
- DrawArc( &tempD, pos0, turntableDiameter/2.0, 0.0, 360.0, 0, 0, wDrawColorBlack );
+ state = 1;
return C_CONTINUE;
case C_MOVE:
- DrawArc( &tempD, pos0, turntableDiameter/2.0, 0.0, 360.0, 0, 0, wDrawColorBlack );
SnapPos( &pos );
pos0 = pos;
- DrawArc( &tempD, pos0, turntableDiameter/2.0, 0.0, 360.0, 0, 0, wDrawColorBlack );
return C_CONTINUE;
case C_UP:
- DrawArc( &tempD, pos0, turntableDiameter/2.0, 0.0, 360.0, 0, 0, wDrawColorBlack );
SnapPos( &pos );
UndoStart( _("Create Turntable"), "NewTurntable" );
t = NewTurntable( pos, turntableDiameter/2.0 );
@@ -853,10 +889,13 @@ static STATUS_T CmdTurntable( wAction_t action, coOrd pos )
InfoSubstituteControls( NULL, NULL );
sprintf( message, "turntable-diameter-%s", curScaleName );
wPrefSetFloat( "misc", message, turntableDiameter );
+ state = 0;
return C_TERMINATE;
case C_REDRAW:
- DrawArc( &tempD, pos0, turntableDiameter/2.0, 0.0, 360.0, 0, 0, wDrawColorBlack );
+ if ( state > 0 ) {
+ DrawArc( &tempD, pos0, turntableDiameter/2.0, 0.0, 360.0, 0, 0, wDrawColorBlack );
+ }
return C_CONTINUE;
case C_CANCEL:
@@ -874,7 +913,7 @@ static STATUS_T CmdTurntable( wAction_t action, coOrd pos )
EXPORT void InitCmdTurntable( wMenu_p menu )
{
- AddMenuButton( menu, CmdTurntable, "cmdTurntable", _("Turntable"), wIconCreatePixMap(turntbl_xpm), LEVEL0_50, IC_STICKY, ACCL_TURNTABLE, NULL );
+ AddMenuButton( menu, CmdTurntable, "cmdTurntable", _("Custom Turntable"), wIconCreatePixMap(turntbl_xpm), LEVEL0_50, IC_STICKY|IC_INITNOTSTICKY, ACCL_TURNTABLE, NULL );
}
diff --git a/app/bin/custom.c b/app/bin/custom.c
index 618a8ac..68a996b 100644
--- a/app/bin/custom.c
+++ b/app/bin/custom.c
@@ -53,7 +53,6 @@
#define product "xtrkcad"
#define PRODUCT "XTRKCAD"
#define Version VERSION
-#define KEYCODE "x"
#define PARAMKEY (0)
@@ -68,15 +67,18 @@ char * sTurnoutDesignerW = NULL;
char * sAboutProd = NULL;
char * sCustomF = product ".cus";
-char * sCheckPointF = product ".ckp";
-char * sCheckPoint1F = product ".ck1";
+char * sCheckPointF = product Version ".ckp";
+char * sCheckPoint1F = product Version ".ck1";
+
char * sClipboardF = product ".clp";
-char * sParamQF = product "." KEYCODE "tq";
+char * sParamQF = product ".xtq";
char * sUndoF = product ".und";
char * sAuditF = product ".aud";
char * sTipF = product ".tip";
char * sSourceFilePattern = NULL;
+char * sSaveFilePattern = NULL;
+char * sImageFilePattern = NULL;
char * sImportFilePattern = NULL;
char * sDXFFilePattern = NULL;
char * sRecordFilePattern = NULL;
@@ -137,13 +139,14 @@ BOOL_T Initialize( void )
InitTrkStruct();
InitTrkText();
InitTrkDraw();
- InitTrkNote();
+
InitTrkBlock();
InitTrkSwitchMotor();
InitTrkSignal();
InitTrkControl();
InitTrkSensor();
InitCarDlg();
+ InitCmdNote();
memset( message, 0, sizeof message );
@@ -156,7 +159,7 @@ BOOL_T Initialize( void )
void InitCustom( void )
{
- char buf[STR_SHORT_SIZE];
+ char *buf = malloc(1024);
/* Initialize some localized strings */
if (sTurnoutDesignerW == NULL)
@@ -171,38 +174,60 @@ void InitCustom( void )
}
if (sSourceFilePattern == NULL)
{
- sprintf(buf, _("%s Files|*.xtc"), Product);
+ sprintf(buf, _("All %s Files (*.xtc,*.xtce)|*.xtc;*.xtce|"
+ "%s Trackplan (*.xtc)|*.xtc|"
+ "%s Extended Trackplan (*.xtce)|*.xtce|"
+ "All Files (*)|*"),
+ Product,
+ Product,
+ Product );
sSourceFilePattern = strdup(buf);
}
+ if (sSaveFilePattern == NULL)
+ {
+ sprintf(buf, _("%s Trackplan (*.xtc)|*.xtc|"
+ "%s Extended Trackplan (*.xtce)|*.xtce|"
+ "All Files (*)|*"),
+ Product,
+ Product );
+ sSaveFilePattern = strdup(buf);
+ }
+ if (sImageFilePattern == NULL)
+ {
+ sprintf(buf,_("All Files (*)|*"));
+ sImageFilePattern = strdup(buf);
+ }
if (sImportFilePattern == NULL)
{
- sprintf(buf, _("%s Import Files|*.%sti"), Product, KEYCODE);
+ sprintf(buf, _("%s Import Files (*.xti)|*.xti"), Product );
sImportFilePattern = strdup(buf);
}
if (sDXFFilePattern == NULL)
{
- sDXFFilePattern = strdup(_("Data Exchange Format Files|*.dxf"));
+ sDXFFilePattern = strdup(_("Data Exchange Format Files (*.dxf)|*.dxf"));
}
if (sRecordFilePattern == NULL)
{
- sprintf(buf, _("%s Record Files|*.%str"), Product, KEYCODE);
+ sprintf(buf, _("%s Record Files (*.xtr)|*.xtr"), Product);
sRecordFilePattern = strdup(buf);
}
if (sNoteFilePattern == NULL)
{
- sprintf(buf, _("%s Note Files|*.not"), Product);
+ sprintf(buf, _("%s Note Files (*.not)|*.not"), Product);
sNoteFilePattern = strdup(buf);
}
if (sLogFilePattern == NULL)
{
- sprintf(buf, _("%s Log Files|*.log"), Product);
+ sprintf(buf, _("%s Log Files (*.log)|*.log"), Product);
sLogFilePattern = strdup(buf);
}
if (sPartsListFilePattern == NULL)
{
- sprintf(buf, _("%s PartsList Files|*.txt"), Product);
+ sprintf(buf, _("%s PartsList Files (*.txt)|*.txt"), Product);
sPartsListFilePattern = strdup(buf);
}
+
+ free(buf);
}
diff --git a/app/bin/custom.h b/app/bin/custom.h
index a4d335a..1c4f7b6 100644
--- a/app/bin/custom.h
+++ b/app/bin/custom.h
@@ -45,6 +45,7 @@
#define BG_COUNT (13)
#define BG_FILE (14)
#define BG_CONTROL (15)
+#define BG_EXPORTIMPORT (16)
#define BG_BIGGAP (1<<8)
extern int cmdGroup;
@@ -67,6 +68,8 @@ extern char * sUndoF;
extern char * sAuditF;
extern char * sSourceFilePattern;
+extern char * sSaveFilePattern;
+extern char * sImageFilePattern;
extern char * sImportFilePattern;
extern char * sDXFFilePattern;
extern char * sRecordFilePattern;
@@ -89,7 +92,7 @@ void InitTrkBezier( void );
void InitTrkDraw( void );
void InitTrkEase( void );
void InitTrkCornu( void );
-void InitTrkNote( void );
+void InitTrkNote(wMenu_p menu);
void InitTrkStraight( void );
void InitTrkStruct( void );
void InitTrkText( void );
@@ -103,6 +106,7 @@ void InitTrkControl ( void );
void InitTrkSensor ( void );
void InitCmdCurve( wMenu_p menu );
+void InitCmdCornu( wMenu_p menu);
void InitCmdHelix( wMenu_p menu );
void InitCmdDraw( wMenu_p menu );
void InitCmdElevation( wMenu_p menu );
@@ -114,11 +118,15 @@ void InitCmdMove( wMenu_p menu );
void InitCmdMoveDescription( wMenu_p menu );
void InitCmdStraight( wMenu_p menu );
void InitCmdDescribe( wMenu_p menu );
+void InitCmdDescribe2( wMenu_p menu );
void InitCmdSelect( wMenu_p menu );
-void InitCmdPan( wMenu_p menu);
+void InitCmdSelect2( wMenu_p menu );
+void InitCmdPan( wMenu_p menu );
+void InitCmdPan2( wMenu_p menu );
void InitCmdDelete( void );
void InitCmdSplit( wMenu_p menu );
void InitCmdTunnel( void );
+void InitCmdBridge( void );
void InitCmdRuler( wMenu_p menu );
void InitCmdParallel( wMenu_p menu );
@@ -128,7 +136,7 @@ void InitCmdTrain( wMenu_p menu );
void InitCmdTurnout( wMenu_p menu );
void InitCmdHandLaidTurnout( wMenu_p menu );
void InitCmdTurntable( wMenu_p menu );
-void InitCmdNote( wMenu_p menu );
+void InitCmdNote();
void InitCmdUndo( void );
void InitCmdStruct( wMenu_p menu );
void InitCmdAboveBelow( void );
diff --git a/app/bin/dbench.c b/app/bin/dbench.c
index 7e44713..c8d944f 100644
--- a/app/bin/dbench.c
+++ b/app/bin/dbench.c
@@ -257,7 +257,7 @@ EXPORT void DrawBench(
Translate( &pp[1], p0, a-90, width );
Translate( &pp[2], p1, a-90, width );
Translate( &pp[3], p1, a+90, width );
- DrawFillPoly( d, 4, pp, color1 );
+ DrawPoly( d, 4, pp, NULL, color1, 0, 1, 0);
/* Draw Outline */
if ( /*color1 != color2 &&*/
( ( d->scale < ((d->options&DC_PRINT)?(twoRailScale*2+1):twoRailScale) ) || /* big enough scale */
diff --git a/app/bin/dbitmap.c b/app/bin/dbitmap.c
index 340bad1..c45c7d0 100644
--- a/app/bin/dbitmap.c
+++ b/app/bin/dbitmap.c
@@ -112,7 +112,7 @@ static int SaveBitmapFile(
(wPos_t)(-bitmap_d.orig.y/bitmap_d.scale*bitmap_d.dpi),
(wPos_t)(mapD.size.x/bitmap_d.scale*bitmap_d.dpi),
(wPos_t)(mapD.size.y/bitmap_d.scale*bitmap_d.dpi) );
- wSetCursor( wCursorWait );
+ wSetCursor( mainD.d, wCursorWait );
InfoMessage( _("Drawing tracks to BitMap") );
DrawSnapGrid( &bitmap_d, mapD.size, TRUE );
if ( (outputBitMapTogglesV&4) )
@@ -126,7 +126,7 @@ static int SaveBitmapFile(
return FALSE;
}
InfoMessage( "" );
- wSetCursor( wCursorNormal );
+ wSetCursor( mainD.d, defaultCursor );
wBitMapDelete( bitmap_d.d );
return TRUE;
}
@@ -211,11 +211,11 @@ static void OutputBitMapOk( void * junk )
wHide( outputBitMapW );
if (bitmap_fs == NULL)
bitmap_fs = wFilSelCreate( mainW, FS_SAVE, 0, _("Save Bitmap"),
-#ifdef WINDOWS
- _("Bitmap files|*.bmp"),
-#else
- _("Bitmap files|*.xpm"),
-#endif
+//#ifdef WINDOWS
+// _("Bitmap files (*.bmp)|*.bmp"),
+//#else
+ _("Bitmap files (*.png)|*.png"),
+//#endif
SaveBitmapFile, NULL );
wFilSelect( bitmap_fs, GetCurrentPath( BITMAPPATHKEY ));
}
diff --git a/app/bin/dcar.c b/app/bin/dcar.c
index 2e1a790..e067e2b 100644
--- a/app/bin/dcar.c
+++ b/app/bin/dcar.c
@@ -47,6 +47,7 @@ static int log_carDlgState;
static int log_carDlgList;
static paramFloatRange_t r0_99999 = { 0, 99999, 80 };
+static paramFloatRange_t r9999_9999 = {-99999, 99999, 80};
static paramIntegerRange_t i1_999999999 = { 1, 999999999, 80, PDO_NORANGECHECK_HIGH };
static paramIntegerRange_t i1_9999 = { 1, 9999, 50 };
static char * isLocoLabels[] = { "", 0 };
@@ -85,6 +86,7 @@ typedef struct {
DIST_T carLength;
DIST_T carWidth;
DIST_T truckCenter;
+ DIST_T truckCenterOffset;
DIST_T coupledLength;
} carDim_t;
typedef struct {
@@ -381,10 +383,10 @@ static void CarProtoDrawTruck(
memcpy( p, truckOutline, sizeof truckOutline );
RescalePts( sizeof truckOutline/sizeof truckOutline[0], p, 1.0, width/56.5 );
- RescalePts( sizeof wheelOutline/sizeof wheelOutline[0], p, ratio, ratio );
- RotatePts( sizeof wheelOutline/sizeof wheelOutline[0], p, zero, angle );
+ RescalePts( sizeof truckOutline/sizeof truckOutline[0], p, ratio, ratio );
+ RotatePts( sizeof truckOutline/sizeof truckOutline[0], p, zero, angle );
MovePts( sizeof truckOutline/sizeof truckOutline[0], p, pos );
- DrawFillPoly( d, sizeof truckOutline/sizeof truckOutline[0], p, color );
+ DrawPoly( d, sizeof truckOutline/sizeof truckOutline[0], p, NULL, color, 0, 1, 0);
pp.x = -70/2;
pp.y = 0;
memcpy( p, wheelOutline, sizeof wheelOutline );
@@ -393,7 +395,7 @@ static void CarProtoDrawTruck(
RescalePts( sizeof wheelOutline/sizeof wheelOutline[0], p, ratio, ratio );
RotatePts( sizeof wheelOutline/sizeof wheelOutline[0], p, zero, angle );
MovePts( sizeof wheelOutline/sizeof wheelOutline[0], p, pos );
- DrawFillPoly( d, sizeof wheelOutline/sizeof wheelOutline[0], p, color );
+ DrawPoly( d, sizeof wheelOutline/sizeof wheelOutline[0], p, NULL, color, 0, 1, 0);
pp.x = 70/2;
memcpy( p, wheelOutline, sizeof wheelOutline );
RescalePts( sizeof wheelOutline/sizeof wheelOutline[0], p, 1.0, width/56.5 );
@@ -401,7 +403,7 @@ static void CarProtoDrawTruck(
RescalePts( sizeof wheelOutline/sizeof wheelOutline[0], p, ratio, ratio );
RotatePts( sizeof wheelOutline/sizeof wheelOutline[0], p, zero, angle );
MovePts( sizeof wheelOutline/sizeof wheelOutline[0], p, pos );
- DrawFillPoly( d, sizeof wheelOutline/sizeof wheelOutline[0], p, color );
+ DrawPoly( d, sizeof wheelOutline/sizeof wheelOutline[0], p, NULL, color, 0, 1, 0 );
}
@@ -438,22 +440,11 @@ static void CarProtoDrawCoupler(
pp.x = length-12.0;
pp.y = 0;
/* TODO - if length > 6 then draw Sills */
-#ifdef FUTURE
- if ( angle == 270.0 ) {
- pos.x -= (length-12.0);
- for ( inx=0; inx<sizeof couplerOutline/sizeof couplerOutline[0]; inx++ ) {
- p[inx].x = -p[inx].x;
- p[inx].y = -p[inx].y;
- }
- } else {
- pos.x += (length-12.0);
- }
-#endif
MovePts( sizeof couplerOutline/sizeof couplerOutline[0], p, pp );
RescalePts( sizeof couplerOutline/sizeof couplerOutline[0], p, ratio, ratio );
RotatePts( sizeof couplerOutline/sizeof couplerOutline[0], p, zero, angle-90.0 );
MovePts( sizeof couplerOutline/sizeof couplerOutline[0], p, pos );
- DrawFillPoly( d, sizeof couplerOutline/sizeof couplerOutline[0], p, color );
+ DrawPoly( d, sizeof couplerOutline/sizeof couplerOutline[0], p, NULL, color, 0, 1 ,0 );
}
@@ -496,7 +487,7 @@ static trkSeg_p carProtoSegPtr;
static int carProtoSegCnt;
-static coOrd dummyOutlineSegPts[5];
+static pts_t dummyOutlineSegPts[5];
static trkSeg_t dummyOutlineSegs;
static void CarProtoDlgCreateDummyOutline(
int * segCntP,
@@ -507,7 +498,7 @@ static void CarProtoDlgCreateDummyOutline(
wDrawColor color )
{
trkSeg_p segPtr;
- coOrd * pts;
+ pts_t * pts;
DIST_T length2;
*segCntP = 1;
@@ -523,22 +514,27 @@ static void CarProtoDlgCreateDummyOutline(
segPtr->u.p.angle = 0;
length2 = length;
if ( isLoco ) {
- pts->x = length;
- pts->y = width/2.0;
+ pts->pt.x = length;
+ pts->pt.y = width/2.0;
+ pts->pt_type = 0;
pts++;
length2 -= width/2.0;
}
- pts->x = length2;
- pts->y = 0.0;
+ pts->pt.x = length2;
+ pts->pt.y = 0.0;
+ pts->pt_type = 0;
pts++;
- pts->x = 0.0;
- pts->y = 0.0;
+ pts->pt.x = 0.0;
+ pts->pt.y = 0.0;
+ pts->pt_type = 0;
pts++;
- pts->x = 0.0;
- pts->y = width;
+ pts->pt.x = 0.0;
+ pts->pt.y = width;
+ pts->pt_type = 0;
pts++;
- pts->x = length2;
- pts->y = width;
+ pts->pt.x = length2;
+ pts->pt.y = width;
+ pts->pt_type = 0;
}
@@ -605,6 +601,26 @@ static carProto_p CarProtoLookup(
return proto;
}
+enum paramFileState
+GetCarProtoCompatibility(int paramFileIndex, SCALEINX_T scaleIndex)
+{
+ int i;
+ enum paramFileState ret = PARAMFILE_NOTUSABLE;
+ DIST_T ratio = GetScaleRatio(scaleIndex);
+
+ if (!IsParamValid(paramFileIndex)) {
+ return(PARAMFILE_UNLOADED);
+ }
+
+ for (i = 0; i < carProto_da.cnt; i++) {
+ carProto_t *carProto = carProto(i);
+ if (carProto->paramFileIndex == paramFileIndex) {
+ ret = PARAMFILE_FIT;
+ break;
+ }
+ }
+ return(ret);
+}
static carProto_p CarProtoNew(
carProto_p proto,
@@ -617,7 +633,7 @@ static carProto_p CarProtoNew(
trkSeg_p segPtr )
{
if ( proto == NULL ) {
- proto = LookupListElem( &carProto_da, desc, CmpCarProto, sizeof *(carProto_p)0 );
+ proto = LookupListElem( &carProto_da, desc, CmpCarProto, sizeof *proto );
if ( proto->desc != NULL ) {
if ( proto->paramFileIndex == PARAM_CUSTOM &&
paramFileIndex != PARAM_CUSTOM )
@@ -656,6 +672,45 @@ static void CarProtoDelete(
}
+/**
+* Delete all car prototype definitions that came from a specific parameter file.
+* Due to the way the definitions are loaded from file it is safe to
+* assume that they form a contiguous block in the array.
+*
+* \param [IN] fileIndex parameter file
+*/
+
+void
+DeleteCarProto(int fileIndex)
+{
+ int inx = 0;
+ int startInx = -1;
+ int cnt = 0;
+
+ // go to the start of the block
+ while (inx < carProto_da.cnt && carProto(inx)->paramFileIndex != fileIndex) {
+ startInx = inx++;
+ }
+
+ // delete them
+ for (; inx < carProto_da.cnt && carProto(inx)->paramFileIndex == fileIndex; inx++) {
+ carProto_t * cp = carProto(inx);
+ if (cp->paramFileIndex == fileIndex) {
+ CarProtoDelete(cp);
+ cnt++;
+ }
+ }
+
+ // copy down the rest of the list to fill the gap
+ startInx++;
+ while (inx < carProto_da.cnt) {
+ carProto(startInx++) = carProto(inx++);
+ }
+
+ // and reduce the actual number
+ carProto_da.cnt -= cnt;
+}
+
static BOOL_T CarProtoRead(
char * line )
{
@@ -663,10 +718,12 @@ static BOOL_T CarProtoRead(
long options;
long type;
carDim_t dim;
+ long longCenterOffset;
- if ( !GetArgs( line+9, "qllff00ff",
- &desc, &options, &type, &dim.carLength, &dim.carWidth, &dim.truckCenter, &dim.coupledLength ) )
+ if ( !GetArgs( line+9, "qllff0lff",
+ &desc, &options, &type, &dim.carLength, &dim.carWidth, &longCenterOffset, &dim.truckCenter, &dim.coupledLength ) )
return FALSE;
+ dim.truckCenterOffset = longCenterOffset/1000.0;
if ( !ReadSegs() )
return FALSE;
CarProtoNew( NULL, curParamFileIndex, desc, options, type, &dim, tempSegs_da.cnt, &tempSegs(0) );
@@ -685,8 +742,10 @@ static BOOL_T CarProtoWrite(
oldLocale = SaveLocale("C");
- rc &= fprintf( f, "CARPROTO \"%s\" %ld %ld %0.3f %0.3f 0 0 %0.3f %0.3f\n",
- PutTitle(proto->desc), proto->options, proto->type, proto->dim.carLength, proto->dim.carWidth, proto->dim.truckCenter, proto->dim.coupledLength )>0;
+ long longCenterOffset = (long)(proto->dim.truckCenterOffset*1000);
+
+ rc &= fprintf( f, "CARPROTO \"%s\" %ld %ld %0.3f %0.3f 0 %ld %0.3f %0.3f\n",
+ PutTitle(proto->desc), proto->options, proto->type, proto->dim.carLength, proto->dim.carWidth, longCenterOffset, proto->dim.truckCenter, proto->dim.coupledLength )>0;
rc &= WriteSegs( f, proto->segCnt, proto->segPtr );
RestoreLocale(oldLocale);
@@ -850,7 +909,7 @@ static roadnameMap_p LoadRoadnameList(
cmp_key.name = roadnameTab->ptr;
cmp_key.len = roadnameTab->len;
- roadnameMapP = LookupListElem( &roadnameMap_da, &cmp_key, Cmp_roadnameMap, sizeof *(roadnameMap_p)0 );
+ roadnameMapP = LookupListElem( &roadnameMap_da, &cmp_key, Cmp_roadnameMap, sizeof roadnameMapP );
if ( roadnameMapP->roadname == NULL ) {
roadnameMapP->roadname = TabStringDup(roadnameTab);
roadnameMapP->repmark = TabStringDup(repmarkTab);
@@ -957,29 +1016,29 @@ static carPart_p CarPartNew(
carPart_t cmp_key;
tabString_t tabs[7];
- TabStringExtract( title, 7, tabs );
- if ( TabStringCmp( "Undecorated", &tabs[T_MANUF] ) == 0 ||
- TabStringCmp( "Custom", &tabs[T_MANUF] ) == 0 ||
- tabs[T_PART].len == 0 )
+ TabStringExtract(title, 7, tabs);
+ if (TabStringCmp("Undecorated", &tabs[T_MANUF]) == 0 ||
+ TabStringCmp("Custom", &tabs[T_MANUF]) == 0 ||
+ tabs[T_PART].len == 0)
return NULL;
- if ( tabs[T_PROTO].len == 0 )
+ if (tabs[T_PROTO].len == 0)
return NULL;
- if ( partP == NULL ) {
- partP = CarPartFind( tabs[T_MANUF].ptr, tabs[T_MANUF].len, tabs[T_PART].ptr, tabs[T_PART].len, scaleInx );
- if ( partP != NULL &&
- partP->paramFileIndex == PARAM_CUSTOM &&
- paramFileIndex != PARAM_CUSTOM )
+ if (partP == NULL) {
+ partP = CarPartFind(tabs[T_MANUF].ptr, tabs[T_MANUF].len, tabs[T_PART].ptr, tabs[T_PART].len, scaleInx);
+ if (partP != NULL &&
+ partP->paramFileIndex == PARAM_CUSTOM &&
+ paramFileIndex != PARAM_CUSTOM)
return partP;
-LOG( log_carList, 2, ( "new car part: %s (%d) at %d\n", title, paramFileIndex, lookupListIndex ) )
+ LOG(log_carList, 2, ("new car part: %s (%d) at %d\n", title, paramFileIndex, lookupListIndex))
}
- if ( partP != NULL ) {
- CarPartUnlink( partP );
- if ( partP->title != NULL )
- MyFree( partP->title );
-LOG( log_carList, 2, ( "upd car part: %s (%d)\n", title, paramFileIndex ) )
+ if (partP != NULL) {
+ CarPartUnlink(partP);
+ if (partP->title != NULL)
+ MyFree(partP->title);
+ LOG(log_carList, 2, ("upd car part: %s (%d)\n", title, paramFileIndex))
}
- LoadRoadnameList( &tabs[T_ROADNAME], &tabs[T_REPMARK] );
- parentP = CarPartParentNew( tabs[T_MANUF].ptr, tabs[T_MANUF].len, tabs[T_PROTO].ptr, tabs[T_PROTO].len, scaleInx );
+ LoadRoadnameList(&tabs[T_ROADNAME], &tabs[T_REPMARK]);
+ parentP = CarPartParentNew(tabs[T_MANUF].ptr, tabs[T_MANUF].len, tabs[T_PROTO].ptr, tabs[T_PROTO].len, scaleInx);
cmp_key.title = title;
cmp_key.parent = parentP;
cmp_key.paramFileIndex = paramFileIndex;
@@ -989,13 +1048,13 @@ LOG( log_carList, 2, ( "upd car part: %s (%d)\n", title, paramFileIndex ) )
cmp_key.color = color;
cmp_key.partnoP = tabs[T_PART].ptr;
cmp_key.partnoL = tabs[T_PART].len;
- partP = (carPart_p)LookupListElem( &parentP->parts_da, &cmp_key, Cmp_part, sizeof * partP );
- if ( partP->title != NULL )
- MyFree( partP->title );
+ partP = (carPart_p)LookupListElem(&parentP->parts_da, &cmp_key, Cmp_part, sizeof * partP);
+ if (partP->title != NULL)
+ MyFree(partP->title);
*partP = cmp_key;
- sprintf( message, "\t\t%s", tabs[2].ptr );
- partP->title = MyStrdup( message );
- partP->partnoP = partP->title + 2+tabs[2].len+1;;
+ sprintf(message, "\t\t%s", tabs[2].ptr);
+ partP->title = MyStrdup(message);
+ partP->partnoP = partP->title + 2 + tabs[2].len + 1;;
partP->partnoL = tabs[T_PART].len;
return partP;
}
@@ -1012,6 +1071,32 @@ static void CarPartDelete(
MyFree( partP );
}
+/**
+* Delete all car part definitions that came from a specific parameter file.
+* CarParts are stored in DYNARR for the specific car model. These DYNARRs
+* are linked from CarPartParents, again DYNARRs. Thes parents are created
+* from part definition and only contain manufacturer and type information.
+*
+* \param [IN] fileIndex parameter file
+*/
+
+void
+DeleteCarPart(int fileIndex)
+{
+ int inxParent = 0;
+ int inx;
+
+ while (inxParent < carPartParent_da.cnt) {
+ inx = 0;
+ while (inx < carPartParent(inxParent)->parts_da.cnt) {
+ carPart_p part = carPart(carPartParent(inxParent), inx++);
+ if (part->paramFileIndex == fileIndex) {
+ CarPartDelete(part);
+ }
+ }
+ inxParent++;
+ }
+}
static BOOL_T CarPartRead(
char * line )
@@ -1022,10 +1107,12 @@ static BOOL_T CarPartRead(
char * title;
carDim_t dim;
long rgb;
+ long longCenterOffset;
- if ( !GetArgs( line+8, "sqllff00ffl",
- scale, &title, &options, &type, &dim.carLength, &dim.carWidth, &dim.truckCenter, &dim.coupledLength, &rgb ) )
+ if ( !GetArgs( line+8, "sqllff0lffl",
+ scale, &title, &options, &type, &dim.carLength, &dim.carWidth, &longCenterOffset, &dim.truckCenter, &dim.coupledLength, &rgb ) )
return FALSE;
+ dim.truckCenterOffset = longCenterOffset/1000.0;
CarPartNew( NULL, curParamFileIndex, LookupScale(scale), title, options, type, &dim, wDrawFindColor(rgb) );
MyFree( title );
return TRUE;
@@ -1181,6 +1268,42 @@ static carItem_p CarItemNew(
return item;
}
+/**
+ * Check the whether the parameter file has CARPARTS that are compatible
+ * with the current state. For CARPARTS only the exactly identical scale
+ * is accepted as compatible
+ *
+ * \param paramFileIndex IN the parameter file
+ * \param scaleIndex IN the scale to check against
+ * \return the compatibility state of the the
+ */
+enum paramFileState
+GetCarPartCompatibility(int paramFileIndex, SCALEINX_T scaleIndex)
+{
+ int i;
+ enum paramFileState ret = PARAMFILE_NOTUSABLE;
+ DIST_T ratio = GetScaleRatio(scaleIndex);
+
+ if (!IsParamValid(paramFileIndex)) {
+ return(PARAMFILE_UNLOADED);
+ }
+
+ for (i = 0; i < carPartParent_da.cnt && ret != PARAMFILE_FIT; i++) {
+ carPartParent_t *carPartParent = carPartParent( i );
+
+ if(GetScaleRatio(carPartParent->scale) == ratio ){
+ for(int j = 0; j < carPartParent->parts_da.cnt; j++ ){
+ carPart_t *carPart = carPart( carPartParent, j );
+
+ if (carPart->paramFileIndex == paramFileIndex) {
+ ret = PARAMFILE_FIT;
+ break;
+ }
+ }
+ }
+ }
+ return(ret);
+}
EXPORT BOOL_T CarItemRead(
char * line )
@@ -1197,45 +1320,43 @@ EXPORT BOOL_T CarItemRead(
long condition = 0;
long purchDate = 0;
long serviceDate = 0;
- int len, siz;
- static dynArr_t buffer_da;
carItem_p item;
char * cp;
wIndex_t layer;
coOrd pos;
ANGLE_T angle;
wIndex_t index;
+ long longCenterOffset;
+ char * sNote = NULL;
- if ( !GetArgs( line+4, "lsqll" "ff00ffl" "fflll000000c",
+ if ( !GetArgs( line+4, "lsqll" "ff0lffl" "fflll000000c",
&itemIndex, scale, &title, &options, &type,
- &dim.carLength, &dim.carWidth, &dim.truckCenter, &dim.coupledLength, &rgb,
+ &dim.carLength, &dim.carWidth, &longCenterOffset, &dim.truckCenter, &dim.coupledLength, &rgb,
&purchPrice, &currPrice, &condition, &purchDate, &serviceDate, &cp ) )
return FALSE;
- if ( (options&CAR_ITEM_HASNOTES) ) {
- DYNARR_SET( char, buffer_da, 0 );
- while ( (line=GetNextLine()) && strncmp( line, " END", 7 ) != 0 ) {
- siz = buffer_da.cnt;
- len = strlen( line );
- DYNARR_SET( char, buffer_da, siz+len+1 );
- memcpy( &((char*)buffer_da.ptr)[siz], line, len );
- ((char*)buffer_da.ptr)[siz+len] = '\n';
+ dim.truckCenterOffset = longCenterOffset/1000.0;
+ if ( paramVersion < 12 ) {
+ if ( (options&CAR_ITEM_HASNOTES) ) {
+ sNote = ReadMultilineText();
}
- DYNARR_APPEND( char, buffer_da, 1 );
- ((char*)buffer_da.ptr)[buffer_da.cnt-1] = 0;
+ } else {
+ if ( !GetArgs( cp, "qc", &sNote, &cp ) )
+ return FALSE;
}
item = CarItemNew( NULL, curParamFileIndex, itemIndex, LookupScale(scale), title,
options&(CAR_DESC_BITS|CAR_ITEM_BITS), type, &dim, wDrawFindColor(rgb),
purchPrice, currPrice, condition, purchDate, serviceDate );
if ( (options&CAR_ITEM_HASNOTES) )
- item->data.notes = MyStrdup( (char*)buffer_da.ptr );
+ item->data.notes = sNote;
MyFree(title);
if ( (options&CAR_ITEM_ONLAYOUT) ) {
if ( !GetArgs( cp, "dLpf",
&index, &layer, &pos, &angle ) )
return FALSE;
+ if ( !ReadSegs() )
+ return FALSE;
item->car = NewCar( index, item, pos, angle );
SetTrkLayer( item->car, layer );
- ReadSegs();
SetEndPts( item->car, 2 );
ComputeBoundingBox( item->car );
}
@@ -1253,6 +1374,7 @@ static BOOL_T CarItemWrite(
ANGLE_T angle;
BOOL_T rc = TRUE;
char *oldLocale = NULL;
+ long longCenterOffset = (long)(item->dim.truckCenterOffset*1000);
oldLocale = SaveLocale("C");
@@ -1260,25 +1382,27 @@ static BOOL_T CarItemWrite(
options |= CAR_ITEM_HASNOTES;
if ( layout && item->car && !IsTrackDeleted(item->car) )
options |= CAR_ITEM_ONLAYOUT;
- rc &= fprintf( f, "CAR %ld %s \"%s\" %ld %ld %0.3f %0.3f 0 0 %0.3f %0.3f %ld %0.3f %0.3f %ld %ld %ld 0 0 0 0 0 0",
+ rc &= fprintf( f, "CAR %ld %s \"%s\" %ld %ld %0.3f %0.3f 0 %ld %0.3f %0.3f %ld %0.3f %0.3f %ld %ld %ld 0 0 0 0 0 0",
item->index, GetScaleName(item->scaleInx), PutTitle(item->title),
options, item->type,
- item->dim.carLength, item->dim.carWidth, item->dim.truckCenter, item->dim.coupledLength, wDrawGetRGB(item->color),
+ item->dim.carLength, item->dim.carWidth, longCenterOffset, item->dim.truckCenter, item->dim.coupledLength, wDrawGetRGB(item->color),
item->data.purchPrice, item->data.currPrice, item->data.condition, item->data.purchDate, item->data.serviceDate )>0;
+ if ( (options&CAR_ITEM_HASNOTES) ) {
+ char * sEscapedNote = ConvertToEscapedText( item->data.notes );
+ rc &= fprintf( f, " \"%s\"", sEscapedNote )>0;
+ MyFree( sEscapedNote );
+ } else {
+ rc &= fprintf( f, " \"\"" ) > 0;
+ }
if ( ( options&CAR_ITEM_ONLAYOUT) ) {
CarGetPos( item->car, &pos, &angle );
- rc &= fprintf( f, " %d %u %0.3f %0.3f %0.3f",
+ rc &= fprintf( f, " %d %u %0.3f %0.3f %0.3f\n",
GetTrkIndex(item->car), GetTrkLayer(item->car), pos.x, pos.y, angle )>0;
- }
- rc &= fprintf( f, "\n" )>0;
- if ( (options&CAR_ITEM_HASNOTES) ) {
- rc &= fprintf( f, "%s\n", item->data.notes )>0;
- rc &= fprintf( f, " END\n" )>0;
- }
- if ( (options&CAR_ITEM_ONLAYOUT) ) {
rc &= WriteEndPt( f, item->car, 0 );
rc &= WriteEndPt( f, item->car, 1 );
- rc &= fprintf( f, "\tEND\n" )>0;
+ rc &= fprintf( f, "\t%s\n", END_SEGS )>0;
+ } else {
+ rc &= fprintf( f, "\n" )>0;
}
RestoreLocale(oldLocale);
@@ -1658,33 +1782,76 @@ EXPORT void AddHotBarCarDesc( void )
orig = zero;
size.x = item1->dim.carLength;
size.y = item1->dim.carWidth;
- AddHotBarElement( FormatCarTitle( item1, carHotbarContents[carHotbarModeInx] ), size, orig, FALSE, (60.0*12.0/curScaleRatio), (void*)(intptr_t)inx, CarItemHotbarProc );
+ AddHotBarElement( FormatCarTitle( item1, carHotbarContents[carHotbarModeInx] ), size, orig, FALSE, FALSE, (60.0*12.0/curScaleRatio), (void*)(intptr_t)inx, CarItemHotbarProc );
}
item0 = item1;
}
}
-EXPORT coOrd CarItemFindCouplerMountPoint(
+EXPORT void CarItemFindCouplerMountPoint(
carItem_p item,
- traverseTrack_t trvTrk,
- int dir )
+ traverseTrack_t trvTrk0,
+ coOrd pos[2] )
{
- DIST_T couplerOffset;
- coOrd pos;
+ // We assume the coupler pivot is 'couplerLength' before the end of the car
+ DIST_T couplerLength = (item->dim.coupledLength - item->dim.carLength) / 2.0;
+ if ( IsClose(item->dim.truckCenter) ) {
+ // Single truck/bogie
+ DIST_T d = item->dim.carLength/2.0 - couplerLength;
+ Translate( &pos[0], trvTrk0.pos, trvTrk0.angle, d + item->dim.truckCenterOffset );
+ FlipTraverseTrack( &trvTrk0 );
+ Translate( &pos[1], trvTrk0.pos, trvTrk0.angle, d - item->dim.truckCenterOffset );
+ return;
+ }
+ // Find the pos of the 2 trucks
+ // Note this is a slight simplification, we should use the car center, not the on-track position
+ traverseTrack_t trvTrk1 = trvTrk0;
+ TraverseTrack2( &trvTrk0, item->dim.truckCenter/2.0 + item->dim.truckCenterOffset );
+ FlipTraverseTrack( & trvTrk1 );
+ TraverseTrack2( &trvTrk1, item->dim.truckCenter/2.0 - item->dim.truckCenterOffset );
+
+ // Get the angle to translate from the truck
+ ANGLE_T angle[2];
+ if ( trvTrk0.trk == NULL || (item->options&CAR_DESC_COUPLER_MODE_BODY)!=0 ) {
+ // Body mount couplers
+ // Angle is same as the car
+ angle[0] = FindAngle( trvTrk1.pos, trvTrk0.pos );
+ angle[1] = NormalizeAngle( angle[0]+180.0 );
+ } else {
+ // Truck mounted couplers
+ // Angle is same as the trucks
+ angle[0] = trvTrk0.angle;
+ angle[1] = trvTrk1.angle;
+ }
- if ( dir )
- FlipTraverseTrack( &trvTrk );
+ // Get the distance to translate
+ DIST_T d[2];
+ d[0] = item->dim.carLength/2.0 - couplerLength - ( item->dim.truckCenter/2.0 + item->dim.truckCenterOffset );
+ d[1] = item->dim.carLength/2.0 - couplerLength - ( item->dim.truckCenter/2.0 - item->dim.truckCenterOffset );
+
+ // And translate
+ Translate( &pos[0], trvTrk0.pos, angle[0], d[0] );
+ Translate( &pos[1], trvTrk1.pos, angle[1], d[1] );
+
+#ifdef LATER
if ( trvTrk.trk == NULL || (item->options&CAR_DESC_COUPLER_MODE_BODY)!=0 ) {
- couplerOffset = (item->dim.carLength-(item->dim.coupledLength-item->dim.carLength))/2.0;
+ couplerOffset = item->dim.coupledLength/2.0;
Translate( &pos, trvTrk.pos, trvTrk.angle, couplerOffset );
} else {
- TraverseTrack2( &trvTrk, item->dim.truckCenter/2.0 );
+ if (dir)
+ TraverseTrack2( &trvTrk, item->dim.truckCenter/2.0-item->dim.truckCenterOffset );
+ else
+ TraverseTrack2( &trvTrk, item->dim.truckCenter/2.0+item->dim.truckCenterOffset );
/*Translate( &pos1, trvTrk.pos, trvTrk.angle, item->dim.truckCenter/2.0 );*/
- couplerOffset = item->dim.carLength - (item->dim.truckCenter+item->dim.coupledLength)/2.0;
+ couplerOffset = (item->dim.coupledLength-item->dim.truckCenter)/2.0;
+ if (dir)
+ couplerOffset = couplerOffset + item->dim.truckCenterOffset;
+ else
+ couplerOffset = couplerOffset - item->dim.truckCenterOffset;
Translate( &pos, trvTrk.pos, trvTrk.angle, couplerOffset );
}
- return pos;
+#endif
}
@@ -1710,6 +1877,11 @@ static DIST_T CarItemTruckCenter(
return item->dim.truckCenter;
}
+static DIST_T CarItemTruckOffset(
+ carItem_p item ) {
+ return item->dim.truckCenterOffset;
+}
+
EXPORT DIST_T CarItemCoupledLength(
carItem_p item )
@@ -1759,6 +1931,22 @@ static DIST_T CarItemCouplerLength(
return item->dim.coupledLength-item->dim.carLength;
}
+EXPORT BOOL_T StoreCarItem (carItem_p item, void **data,long *len) {
+
+ *data = item;
+ *len = sizeof (carItem_t);
+ return TRUE;
+
+}
+
+EXPORT BOOL_T ReplayCarItem(carItem_p item, void *data,long len) {
+
+
+ item->pos = ((carItem_t *)data)->pos;
+ item->angle = ((carItem_t *)data)->angle;
+ return TRUE;
+
+}
EXPORT void CarItemPlace(
carItem_p item,
@@ -1766,18 +1954,37 @@ EXPORT void CarItemPlace(
DIST_T * dists )
{
DIST_T dist;
+ DIST_T offset;
traverseTrack_t trks[2];
dist = CarItemTruckCenter(item)/2.0;
+ offset = CarItemTruckOffset(item); //Offset is the amount the truck centers are displaced
trks[0] = trks[1] = *trvTrk;
- TraverseTrack2( &trks[0], dist );
- TraverseTrack2( &trks[1], -dist );
+ TraverseTrack2( &trks[0], dist+offset );
+ TraverseTrack2( &trks[1], -dist+offset );
+ item->angle = FindAngle( trks[1].pos, trks[0].pos );
item->pos.x = (trks[0].pos.x+trks[1].pos.x)/2.0;
item->pos.y = (trks[0].pos.y+trks[1].pos.y)/2.0;
- item->angle = FindAngle( trks[1].pos, trks[0].pos );
+ Translate(&item->pos,item->pos,item->angle, -offset); // Put truck center back along line by offset
dists[0] = dists[1] = CarItemCoupledLength(item)/2.0;
}
+static dynArr_t clearance;
+
+static void ClearClearancePoints(void) {
+ //DYNARR_RESET(trkSeg_t,clearance);
+}
+
+static void CreateClearancePoint(coOrd pos, int position) {
+ //DYNARR_APPEND(trkSeg_t,clearance,1);
+
+}
+
+static void DrawClearancePoints(void) {
+ //for (int i=0;i<clearance.cnt;i++) {
+ //DrawSegs();
+ //}
+}
static int drawCarTrucks = 0;
@@ -1787,14 +1994,16 @@ EXPORT void CarItemDraw(
wDrawColor color,
int direction,
BOOL_T locoIsMaster,
- vector_t *coupler )
+ vector_t *coupler,
+ BOOL_T pencils,
+ track_p traverse)
{
coOrd size, pos, pos2;
DIST_T length;
wFont_p fp;
wDrawWidth width;
trkSeg_t simpleSegs[1];
- coOrd simplePts[4];
+ pts_t simplePts[4];
int dir;
DIST_T rad;
static int couplerLineWidth = 3;
@@ -1802,10 +2011,14 @@ EXPORT void CarItemDraw(
CarItemSize( item, &size );
if ( d->scale >= ((d->options&DC_PRINT)?(twoRailScale*2+1):twoRailScale) ) {
- simplePts[0].x = simplePts[3].x = -size.x/2.0;
- simplePts[1].x = simplePts[2].x = size.x/2.0;
- simplePts[0].y = simplePts[1].y = -size.y/2.0;
- simplePts[2].y = simplePts[3].y = size.y/2.0;
+ simplePts[0].pt.x = simplePts[3].pt.x = -size.x/2.0;
+ simplePts[1].pt.x = simplePts[2].pt.x = size.x/2.0;
+ simplePts[0].pt.y = simplePts[1].pt.y = -size.y/2.0;
+ simplePts[2].pt.y = simplePts[3].pt.y = size.y/2.0;
+ simplePts[0].pt_type = 0;
+ simplePts[1].pt_type = 0;
+ simplePts[2].pt_type = 0;
+ simplePts[3].pt_type = 0;
simpleSegs[0].type = SEG_FILPOLY;
simpleSegs[0].color = item->color;
simpleSegs[0].width = 0;
@@ -1822,11 +2035,47 @@ EXPORT void CarItemDraw(
DrawSegs( d, pos, item->angle-90.0, item->segPtr, item->segCnt, 0.0, color );
}
+ if (pencils) {
+ ClearClearancePoints();
+ coOrd posm1,posm2;
+ Translate( &posm1, item->pos, item->angle-90, -size.y/2.0 );
+ Translate( &posm2, item->pos, item->angle+90, -size.y/2.0 );
+ coOrd posm1a = posm1;
+ coOrd posm2a = posm2;
+ if (GetTrkDistance(traverse, &posm1a)>GetTrkDistance(traverse, &posm2a))
+ CreateClearancePoint(posm1,1);
+ else
+ CreateClearancePoint(posm2,2);
+
+ coOrd pose1,pose2;
+ Translate( &pose1, item->pos, item->angle, size.x/2.0 );
+ Translate( &pose1, pose1, item->angle-90, -size.y/2.0 );
+ Translate( &pose2, pose1, item->angle+90, -size.y );
+
+ traverseTrack_t traverseTrk;
+ traverseTrk.trk = traverse;
+ traverseTrk.pos = item->pos;
+ traverseTrk.angle = item->angle;
+ TraverseTrack2(&traverseTrk,size.x/2.0);
+ coOrd pose1a = pose1;
+ coOrd pose2a = pose2;
+ if (GetTrkDistance(traverseTrk.trk, &pose1a)>GetTrkDistance(traverseTrk.trk, &pose2a))
+ CreateClearancePoint(pose1,3);
+ else
+ CreateClearancePoint(pose2,4);
+
+
+ DrawClearancePoints();
+
+ }
+
if ( drawCarTrucks ) {
+
length = item->dim.truckCenter/2.0;
- Translate( &pos, item->pos, item->angle, length );
+ double offset = CarItemTruckOffset(item);
+ Translate( &pos, item->pos, item->angle, length+(direction?offset:-offset) );
DrawArc( d, pos, trackGauge/2.0, 0.0, 360.0, FALSE, 0, color );
- Translate( &pos, item->pos, item->angle+180, length );
+ Translate( &pos, item->pos, item->angle+180, length+(direction?-offset:offset) );
DrawArc( d, pos, trackGauge/2.0, 0.0, 360.0, FALSE, 0, color );
}
@@ -1925,7 +2174,7 @@ static char *dispmodeLabels[] = { N_("Information"), N_("Customize"), NULL };
static drawCmd_t carDlgD = {
NULL,
&screenDrawFuncs,
- DC_NOCLIP,
+ 0,
1.0,
0.0,
{ 0, 0 }, { 0, 0 },
@@ -1984,16 +2233,18 @@ static paramData_t carDlgPLs[] = {
{ PD_FLOAT, &carDlgDim.carWidth, "carWidth", PDO_DIM|PDO_NOPREF|PDO_DLGWIDE|PDO_DLGHORZ, &r0_99999, N_("Width") },
#define I_CD_TRKCENTER (B+6)
{ PD_FLOAT, &carDlgDim.truckCenter, "trkCenter", PDO_DIM|PDO_NOPREF, &r0_99999, N_("Truck Centers") },
-#define I_CD_CPLRMNT (B+7)
- { PD_RADIO, &carDlgCouplerMount, "cplrMount", PDO_NOPREF|PDO_DLGHORZ|PDO_DLGWIDE, cplrModeLabels, N_("Coupler Mount"), BC_HORZ|BC_NOBORDER },
-#define I_CD_CPLDLEN (B+8)
+#define I_CD_TRKOFFSET (B+7)
+ { PD_FLOAT, &carDlgDim.truckCenterOffset, "trkCenterOffset", PDO_DIM|PDO_NOPREF|PDO_DLGHORZ|PDO_DLGWIDE, &r9999_9999, N_("Center Offset") },
+#define I_CD_CPLRMNT (B+8)
+ { PD_RADIO, &carDlgCouplerMount, "cplrMount", PDO_NOPREF, cplrModeLabels, N_("Coupler Mount"), BC_HORZ|BC_NOBORDER },
+#define I_CD_CPLDLEN (B+9)
{ PD_FLOAT, &carDlgDim.coupledLength, "cpldLen", PDO_DIM|PDO_NOPREF, &r0_99999, N_("Coupled Length") },
-#define I_CD_CPLRLEN (B+9)
- { PD_FLOAT, &carDlgCouplerLength, "cplrLen", PDO_DIM|PDO_NOPREF|PDO_DLGWIDE|PDO_DLGHORZ, &r0_99999, N_("Coupler Length") },
-#define I_CD_CANVAS (B+10)
+#define I_CD_CPLRLEN (B+10)
+ { PD_FLOAT, &carDlgCouplerLength, "cplrLen", PDO_DIM|PDO_NOPREF|PDO_DLGHORZ, &r0_99999, N_("Coupler Length") },
+#define I_CD_CANVAS (B+11)
{ PD_DRAW, NULL, "canvas", PDO_NOPSHUPD|PDO_DLGWIDE|PDO_DLGNOLABELALIGN|PDO_DLGRESETMARGIN|PDO_DLGBOXEND|PDO_DLGRESIZE, &carDlgDrawData, NULL, 0 },
-#define C (B+11)
+#define C (B+12)
#define I_CD_ITEMINDEX (C+0)
{ PD_LONG, &carDlgItemIndex, "index", PDO_NOPREF|PDO_DLGWIDE, &i1_999999999, N_("Index"), 0 },
#define I_CD_PURPRC (C+1)
@@ -2276,6 +2527,7 @@ static void CarDlgLoadDimsFromProto( carProto_p protoP )
carDlgDim.carLength = protoP->dim.carLength/ratio;
carDlgDim.carWidth = protoP->dim.carWidth/ratio;
carDlgDim.truckCenter = protoP->dim.truckCenter/ratio;
+ carDlgDim.truckCenterOffset = protoP->dim.truckCenterOffset/ratio;
carDlgDim.coupledLength = carDlgDim.carLength + carDlgCouplerLength*2;
/*carDlgCouplerLength = (carDlgDim.coupledLength-carDlgDim.carLength)/2.0;*/
carDlgIsLoco = (protoP->options&CAR_DESC_IS_LOCO)?1:0;
@@ -2354,9 +2606,9 @@ static void CarDlgRedraw( void )
pos.y = orig.y+carDlgDim.carWidth/2.0;
if ( carDlgDim.truckCenter > 0.0 ) {
- pos.x = orig.x+(carDlgDim.carLength-carDlgDim.truckCenter)/2.0;
+ pos.x = orig.x+(carDlgDim.carLength-carDlgDim.truckCenter)/2.0-carDlgDim.truckCenterOffset;
CarProtoDrawTruck( &carDlgD, trackGauge*curScaleRatio, ratio, pos, 0.0 );
- pos.x = orig.x+(carDlgDim.carLength+carDlgDim.truckCenter)/2.0;
+ pos.x = orig.x+(carDlgDim.carLength+carDlgDim.truckCenter)/2.0-carDlgDim.truckCenterOffset;
CarProtoDrawTruck( &carDlgD, trackGauge*curScaleRatio, ratio, pos, 0.0 );
}
if ( carDlgDim.coupledLength > carDlgDim.carLength ) {
@@ -2756,6 +3008,7 @@ static BOOL_T CarDlgLoadLists(
protoTmp.dim.carLength = carDlgDim.carLength*ratio;
protoTmp.dim.coupledLength = carDlgDim.coupledLength*ratio;
protoTmp.dim.truckCenter = carDlgDim.truckCenter*ratio;
+ protoTmp.dim.truckCenterOffset = carDlgDim.truckCenterOffset*ratio;
CarProtoDlgCreateDummyOutline( &carProtoSegCnt, &carProtoSegPtr, (BOOL_T)carDlgIsLoco, protoTmp.dim.carLength, protoTmp.dim.carWidth, drawColorBlue );
protoTmp.segCnt = carProtoSegCnt;
protoTmp.segPtr = carProtoSegPtr;
@@ -2798,6 +3051,7 @@ static void CarDlgShowControls( void )
ParamControlShow( &carDlgPG, I_CD_CARLENGTH, !( S_ITEM && carDlgDispMode==0 ) );
ParamControlShow( &carDlgPG, I_CD_CARWIDTH, !( S_ITEM && carDlgDispMode==0 ) );
ParamControlShow( &carDlgPG, I_CD_TRKCENTER, !( S_ITEM && carDlgDispMode==0 ) );
+ ParamControlShow( &carDlgPG, I_CD_TRKOFFSET, !( S_ITEM && carDlgDispMode==0 ) );
ParamControlShow( &carDlgPG, I_CD_CANVAS, !( S_ITEM && carDlgDispMode==0 ) );
ParamControlShow( &carDlgPG, I_CD_CPLRLEN, S_PART || ( S_ITEM && carDlgDispMode==1 ) );
ParamControlShow( &carDlgPG, I_CD_CPLDLEN, S_PART || ( S_ITEM && carDlgDispMode==1 ) );
@@ -2875,7 +3129,7 @@ static void CarDlgDoActions(
BOOL_T reload[sizeof carDlgPLs/sizeof carDlgPLs[0]];
#define RELOAD_DIMS \
reload[I_CD_CARLENGTH] = reload[I_CD_CARWIDTH] = reload[I_CD_CPLDLEN] = \
- reload[I_CD_TRKCENTER] = reload[I_CD_CPLRLEN] = TRUE
+ reload[I_CD_TRKCENTER] = reload[I_CD_TRKOFFSET] = reload[I_CD_CPLRLEN] = TRUE
#define RELOAD_PARTDATA \
RELOAD_DIMS; \
reload[I_CD_PARTNO_STR] = reload[I_CD_DESC_STR] = \
@@ -2999,6 +3253,7 @@ LOG( log_carDlgState, 2, ( "Action = %s\n", carDlgAction_s[*actions] ) )
carDlgDim.carWidth = 10*12/ratio;
carDlgDim.coupledLength = carDlgDim.carLength+carDlgCouplerLength*2;
carDlgDim.truckCenter = carDlgDim.carLength-59.0*2.0/ratio;
+
carDlgTypeInx = 0;
carDlgIsLoco = (typeListMap[0].value&1);
}
@@ -3012,6 +3267,7 @@ LOG( log_carDlgState, 2, ( "Action = %s\n", carDlgAction_s[*actions] ) )
carDlgCouplerLength = 16.0;
carDlgDim.coupledLength = carDlgDim.carLength + 2 * carDlgCouplerLength;
carDlgDim.truckCenter *= ratio;
+ carDlgDim.truckCenterOffset *= ratio;
RELOAD_DIMS;
break;
case A_Redraw:
@@ -3158,6 +3414,7 @@ LOG( log_carDlgState, 2, ( "Action = %s\n", carDlgAction_s[*actions] ) )
carDlgDim.coupledLength = carDlgDim.carLength+16.0*2.0;
carDlgCouplerLength = (carDlgDim.coupledLength-carDlgDim.carLength)/2.0;
carDlgDim.truckCenter = carDlgDim.carLength-59.0*2.0;
+ carDlgDim.truckCenterOffset = 0;
carDlgIsLoco = (typeListMap[carDlgTypeInx].value&1);
} else {
strcpy( carDlgProtoStr , carDlgUpdateProtoPtr->desc );
@@ -3238,7 +3495,8 @@ static void CarDlgUpdate(
cmp_key_t cmp_key;
coOrd orig, size, size2;
carPartParent_p parentP;
- static DIST_T carDlgTruckOffset;
+ static DIST_T carDlgTruckOffsetL;
+ static DIST_T carDlgTruckOffsetR;
static long carDlgClock;
static long carDlgCarLengthClock;
static long carDlgTruckCenterClock;
@@ -3252,10 +3510,15 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) )
switch ( inx ) {
case -1:
- if ( carDlgDim.truckCenter > 0 && carDlgDim.carLength > carDlgDim.truckCenter )
- carDlgTruckOffset = carDlgDim.carLength - carDlgDim.truckCenter;
- else
- carDlgTruckOffset = 0;
+ if ( carDlgDim.truckCenter > 0 && carDlgDim.carLength > carDlgDim.truckCenter ) {
+ carDlgTruckOffsetL = (carDlgDim.carLength - carDlgDim.truckCenter)/2 - carDlgDim.truckCenterOffset;
+ carDlgTruckOffsetR = (carDlgDim.carLength - carDlgDim.truckCenter)/2 + carDlgDim.truckCenterOffset;
+ }
+ else {
+ carDlgTruckOffsetL = 0;
+ carDlgTruckOffsetR = 0;
+ }
+
carDlgCarLengthClock = carDlgCoupledLengthClock = carDlgTruckCenterClock = carDlgCouplerLengthClock = carDlgClock = 0;
redraw = TRUE;
break;
@@ -3448,16 +3711,36 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) )
redraw = TRUE;
break;
+ case I_CD_TRKOFFSET:
+ carDlgChanged++;
+ if ( carDlgDim.truckCenterOffset == 0 ) {
+ carDlgTruckOffsetL = carDlgDim.truckCenter/2;
+ carDlgTruckOffsetR = carDlgTruckOffsetL;
+ } else if (carDlgDim.carLength - carDlgDim.truckCenter > 2*fabs(carDlgDim.truckCenterOffset)) {
+ carDlgTruckOffsetL = carDlgDim.truckCenter/2 - carDlgDim.truckCenterOffset;
+ carDlgTruckOffsetR = carDlgDim.truckCenter/2 + carDlgDim.truckCenterOffset;
+ } else {
+ carDlgTruckOffsetL = 0;
+ carDlgTruckOffsetR = 0;
+ }
+ redraw = TRUE;
+ break;
+
case I_CD_TRKCENTER:
carDlgChanged++;
if ( carDlgDim.truckCenter == 0 ) {
- carDlgTruckOffset = 0;
+ carDlgTruckOffsetL = 0;
+ carDlgTruckOffsetR = 0;
} else if ( carDlgDim.truckCenter < 100/ratio /*&& carDlgDim.carLength == 0.0*/ ) {
+ carDlgTruckOffsetL = 0;
+ carDlgTruckOffsetR = 0;
return;
- } else if ( carDlgDim.carLength > carDlgDim.truckCenter ) {
- carDlgTruckOffset = carDlgDim.carLength - carDlgDim.truckCenter;
+ } else if ( carDlgDim.carLength - carDlgDim.truckCenter > 2*fabs(carDlgDim.truckCenterOffset) ) {
+ carDlgTruckOffsetL = carDlgDim.truckCenter/2-carDlgDim.truckCenterOffset;
+ carDlgTruckOffsetR = carDlgDim.truckCenter/2+carDlgDim.truckCenterOffset;
} else {
- carDlgTruckOffset = 0;
+ carDlgTruckOffsetL = 0;
+ carDlgTruckOffsetR = 0;
}
redraw = TRUE;
break;
@@ -3551,16 +3834,19 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) )
carDlgDim.coupledLength = carDlgDim.carLength + 32;
if ( carDlgDim.carLength > 120 ) {
carDlgDim.truckCenter = carDlgDim.carLength - 120;
- carDlgTruckOffset = carDlgDim.carLength - carDlgDim.truckCenter;
+ carDlgTruckOffsetL = (carDlgDim.carLength - carDlgDim.truckCenter)/2;
+ carDlgTruckOffsetR = (carDlgDim.carLength - carDlgDim.truckCenter)/2;
} else {
carDlgDim.truckCenter = 0;
- carDlgTruckOffset = 0;
+ carDlgTruckOffsetL = 0;
+ carDlgTruckOffsetR = 0;
}
carDlgFlipToggle = FALSE;
ParamLoadControl( &carDlgPG, I_CD_CARLENGTH );
ParamLoadControl( &carDlgPG, I_CD_CARWIDTH );
ParamLoadControl( &carDlgPG, I_CD_CPLRLEN );
ParamLoadControl( &carDlgPG, I_CD_TRKCENTER );
+ ParamLoadControl( &carDlgPG, I_CD_TRKOFFSET );
redraw = TRUE;
break;
@@ -3579,12 +3865,15 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) )
}
if ( checkTruckCenter && carDlgDim.carLength > 0 ) {
- if ( carDlgTruckOffset > 0 ) {
- carDlgDim.truckCenter = carDlgDim.carLength - carDlgTruckOffset;
+ if ( carDlgTruckOffsetL > 0 || carDlgTruckOffsetR > 0 ) {
+ carDlgDim.truckCenter = carDlgTruckOffsetL + carDlgTruckOffsetR;
+ carDlgDim.truckCenterOffset = (carDlgTruckOffsetR - carDlgTruckOffsetL)/2;
} else {
carDlgDim.truckCenter = carDlgDim.carLength * 0.75;
+ carDlgDim.truckCenterOffset = 0;
}
ParamLoadControl( &carDlgPG, I_CD_TRKCENTER );
+ ParamLoadControl( &carDlgPG, I_CD_TRKOFFSET );
}
ok = FALSE;
@@ -3600,8 +3889,12 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) )
ParamLoadMessage( &carDlgPG, I_CD_MSG, _("Enter the Car Width") );
else if ( carDlgDim.truckCenter <= 0 )
ParamLoadMessage( &carDlgPG, I_CD_MSG, _("Enter the Truck Centers") );
+ else if ( carDlgDim.truckCenterOffset < 0)
+ ParamLoadMessage( &carDlgPG, I_CD_MSG, _("Truck Center Offset must be greater than 0 or 0") );
else if ( carDlgDim.truckCenter >= carDlgDim.carLength )
ParamLoadMessage( &carDlgPG, I_CD_MSG, _("Truck Centers must be less than Car Length") );
+ else if ( 2*carDlgDim.truckCenterOffset > carDlgDim.carLength - carDlgDim.truckCenter)
+ ParamLoadMessage( &carDlgPG, I_CD_MSG, _("Truck Center Offset plus Truck Centers must be less than Car Length") );
else if ( (!S_PROTO) && ( carDlgDim.coupledLength <= 0 || carDlgCouplerLength <= 0 ) )
ParamLoadMessage( &carDlgPG, I_CD_MSG, _("Enter the Coupled Length or Coupler Length") );
else if ( S_PROTO && carDlgDim.coupledLength <= 0 )
@@ -3720,6 +4013,7 @@ LOG( log_carDlgState, 3, ( "CarDlgOk()\n" ) )
if ( carDlgDim.carLength <= 0.0 ||
carDlgDim.carWidth <= 0.0 ||
carDlgDim.truckCenter <= 0.0 ||
+ carDlgDim.truckCenterOffset < 0.0 ||
carDlgDim.coupledLength <= 0.0 ) {
NoticeMessage( MSG_CARDESC_VALUE_ZERO, _("Ok"), NULL );
return;
@@ -3951,7 +4245,6 @@ static void CarDlgLayout(
case I_CD_NEWPROTO:
*yy = wControlGetPosY(carDlgPLs[I_CD_NEW].control);
break;
- case I_CD_CPLRMNT:
case I_CD_CPLRLEN:
case I_CD_CARWIDTH:
if ( col2pos == 0 )
@@ -3961,8 +4254,11 @@ static void CarDlgLayout(
case I_CD_DESC_STR:
*yy = wControlBelow(carDlgPLs[I_CD_PARTNO_STR].control) + 3;
break;
+ case I_CD_CPLRMNT:
+ *yy = wControlBelow(carDlgPLs[I_CD_TRKOFFSET].control) + 3;
+ break;
case I_CD_CPLDLEN:
- *yy = wControlBelow(carDlgPLs[I_CD_TRKCENTER].control) + 3;
+ *yy = wControlBelow(carDlgPLs[I_CD_CPLRMNT].control) + 3;
break;
case I_CD_CANVAS:
*yy = wControlBelow(carDlgPLs[I_CD_CPLDLEN].control)+5;
@@ -3985,7 +4281,7 @@ static void DoCarPartDlg( carDlgAction_e *actions )
int inx;
if ( carDlgPG.win == NULL ) {
- ParamCreateDialog( &carDlgPG, MakeWindowTitle(_("New Car Part")), _("Add"), CarDlgOk, CarDlgClose, TRUE, CarDlgLayout, F_BLOCK|PD_F_ALT_CANCELLABEL, CarDlgUpdate );
+ ParamCreateDialog( &carDlgPG, MakeWindowTitle(_("New Car Part")), _("Add"), CarDlgOk, CarDlgClose, TRUE, CarDlgLayout, F_BLOCK|F_RESIZE|F_RECALLSIZE|PD_F_ALT_CANCELLABEL, CarDlgUpdate );
if ( carDlgDim.carWidth==0 )
carDlgDim.carWidth = 12.0*10.0/curScaleRatio;
@@ -4021,18 +4317,6 @@ static void DoCarPartDlg( carDlgAction_e *actions )
CarDlgDoStateActions( actions );
- /*CarDlgShowControls();*/
-
-#ifdef LATER
-if ( logTable(log_carList).level >= 1 ) {
- int inx;
- carPart_p partP;
- for ( inx=0; inx<carPart_da.cnt; inx++ ) {
- partP = carPart(inx);
- LogPrintf( "%d %s %d\n", inx, partP->title, partP->paramFileIndex );
- }
-}
-#endif
wShow( carDlgPG.win );
}
@@ -4147,13 +4431,9 @@ static void CarInvDlgFind( void * junk )
if ( item == NULL || item->car == NULL || IsTrackDeleted(item->car) ) return;
CarGetPos( item->car, &pos, &angle );
CarSetVisible( item->car );
- //DrawMapBoundingBox( FALSE );
- mainCenter = pos;
- mainD.orig.x = pos.x-mainD.size.x/2;;
- mainD.orig.y = pos.y-mainD.size.y/2;;
- MainRedraw();
- MapRedraw();
- //DrawMapBoundingBox( TRUE );
+ panCenter = pos;
+ LOG( log_pan, 2, ( "PanCenter:%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ PanHere( (void*)0 ); // CarInvDlgFind
}
@@ -4357,7 +4637,7 @@ static void CarInvDlgSaveText( void )
{
if ( carInvSaveText_fs == NULL )
carInvSaveText_fs = wFilSelCreate( mainW, FS_SAVE, 0, _("List Cars"),
- "Text|*.txt", CarInvSaveText, NULL );
+ "Text (*.txt)|*.txt", CarInvSaveText, NULL );
wFilSelect( carInvSaveText_fs, GetCurrentPath(CARSPATHKEY));
}
@@ -4365,7 +4645,7 @@ static void CarInvDlgSaveText( void )
static char *carCsvColumnTitles[] = {
"Index", "Scale", "Manufacturer", "Type", "Partno", "Prototype",
"Description", "Roadname", "Repmark", "Number", "Options", "CarLength",
- "CarWidth", "CoupledLength", "TruckCenter", "Color", "PurchPrice",
+ "CarWidth", "CoupledLength", "TruckOffset", "TruckCenter", "Color", "PurchPrice",
"CurrPrice", "Condition", "PurchDate", "ServiceDate", "Notes" };
#define M_INDEX (0)
#define M_SCALE (1)
@@ -4381,14 +4661,16 @@ static char *carCsvColumnTitles[] = {
#define M_CARLENGTH (11)
#define M_CARWIDTH (12)
#define M_CPLDLENGTH (13)
-#define M_TRKCENTER (14)
-#define M_COLOR (15)
-#define M_PURCHPRICE (16)
-#define M_CURRPRICE (17)
-#define M_CONDITION (18)
-#define M_PURCHDATE (19)
-#define M_SRVDATE (20)
-#define M_NOTES (21)
+#define M_TRKOFFSET (14)
+#define M_TRKCENTER (15)
+#define M_COLOR (16)
+#define M_PURCHPRICE (17)
+#define M_CURRPRICE (18)
+#define M_CONDITION (19)
+#define M_PURCHDATE (20)
+#define M_SRVDATE (21)
+#define M_NOTES (22)
+
static int ParseCsvLine(
@@ -4564,6 +4846,7 @@ static int CarInvImportCsv(
dim.carWidth = TabGetFloat( &tabs[M_CARWIDTH] );
dim.coupledLength = TabGetFloat( &tabs[M_CPLDLENGTH] );
dim.truckCenter = TabGetFloat( &tabs[M_TRKCENTER] );
+ dim.truckCenterOffset = TabGetFloat( &tabs[M_TRKOFFSET] );
partP = NULL;
if ( tabs[M_MANUF].len > 0 && tabs[M_PARTNO].len > 0 )
partP = CarPartFind( tabs[M_MANUF].ptr, tabs[M_MANUF].len, tabs[M_PARTNO].ptr, tabs[M_PARTNO].len, scale );
@@ -4578,6 +4861,7 @@ static int CarInvImportCsv(
if ( dim.carWidth <= 0 ) dim.carWidth = partP->dim.carWidth;
if ( dim.coupledLength <= 0 ) dim.coupledLength = partP->dim.coupledLength;
if ( dim.truckCenter <= 0 ) dim.truckCenter = partP->dim.truckCenter;
+ if ( dim.truckCenterOffset < 0 ) dim.truckCenterOffset = partP->dim.truckCenterOffset;
}
cp = TabStringCpy( title, &tabs[M_MANUF] );
*cp++ = '\t';
@@ -4642,7 +4926,7 @@ static void CarInvDlgImportCsv( void )
{
if ( carInvImportCsv_fs == NULL )
carInvImportCsv_fs = wFilSelCreate( mainW, FS_LOAD, 0, _("Import Cars"),
- _("Comma-Separated-Values|*.csv"), CarInvImportCsv, NULL );
+ _("Comma-Separated-Values (*.csv)|*.csv"), CarInvImportCsv, NULL );
wFilSelect( carInvImportCsv_fs, GetCurrentPath(CARSPATHKEY));
}
@@ -4738,6 +5022,7 @@ static int CarInvExportCsv(
CsvFormatLong( f, item->options, "," );
CsvFormatFloat( f, item->dim.carLength, 3, "," );
CsvFormatFloat( f, item->dim.carWidth, 3, "," );
+ CsvFormatFloat( f, item->dim.truckCenterOffset, 3, ",");
CsvFormatFloat( f, item->dim.coupledLength, 3, "," );
CsvFormatFloat( f, item->dim.truckCenter, 3, "," );
CsvFormatLong( f, wDrawGetRGB(item->color), "," );
@@ -4764,7 +5049,7 @@ static void CarInvDlgExportCsv( void )
return;
if ( carInvExportCsv_fs == NULL )
carInvExportCsv_fs = wFilSelCreate( mainW, FS_SAVE, 0, _("Export Cars"),
- _("Comma-Separated-Values|*.csv"), CarInvExportCsv, NULL );
+ _("Comma-Separated-Values (*.csv)|*.csv"), CarInvExportCsv, NULL );
wFilSelect( carInvExportCsv_fs, GetCurrentPath(CARSPATHKEY));
}
@@ -5042,7 +5327,7 @@ EXPORT void InitCarDlg( void )
ParamRegister( &carInvPG );
RegisterChangeNotification( CarDlgChange );
AddParam( "CARPROTO ", CarProtoRead );
- AddParam( "CARPART ", CarPartRead );
+ AddParam( "CARPART ", CarPartRead);
ParamRegister( &newCarPG );
ParamCreateControls( &newCarPG, CarItemHotbarUpdate );
newCarControls[0] = newCarPLs[0].control;
diff --git a/app/bin/dcmpnd.c b/app/bin/dcmpnd.c
index 13f7c56..93e73ac 100644
--- a/app/bin/dcmpnd.c
+++ b/app/bin/dcmpnd.c
@@ -30,6 +30,7 @@
#include "i18n.h"
#include "messages.h"
#include "param.h"
+#include "include/paramfile.h"
#include "shrtpath.h"
#include "track.h"
#include "utility.h"
@@ -290,6 +291,11 @@ static BOOL_T RefreshCompound1(
xx->segCnt = to->segCnt;
xx->segs = (trkSeg_p)MyMalloc( xx->segCnt * sizeof *(trkSeg_p)0 );
memcpy( xx->segs, to->segs, xx->segCnt * sizeof *(trkSeg_p)0 );
+ MyFree( xx->paths);
+ xx->paths = (signed char*)MyMalloc( to->pathLen * sizeof *xx->paths );
+ memcpy( xx->paths, to->paths, to->pathLen * sizeof *xx->paths );
+ xx->pathLen = to->pathLen;
+ xx->pathCurr = xx->paths;
if ( flip )
FlipSegs( xx->segCnt, xx->segs, zero, 90.0 );
ClrTrkBits( trk, TB_SELECTED );
@@ -594,3 +600,30 @@ EXPORT void CompoundCustMgmLoad( void )
}
}
}
+
+/*****************************************************************************
+ *
+ * Utitlies
+ *
+ */
+
+wIndex_t FindListItemByContext(
+ wList_p listP,
+ void * context )
+{
+ if ( listP == NULL )
+ return -1;
+ if ( context == NULL )
+ return -1;
+ for ( wIndex_t inx = 0; inx < wListGetCount( listP ); ++inx ) {
+ void * itemContext = wListGetItemContext( listP, inx );
+ if ( itemContext != NULL ) {
+ if ( itemContext == context ) {
+ return inx;
+ }
+ }
+ }
+ return -1;
+}
+
+
diff --git a/app/bin/dcontmgm.c b/app/bin/dcontmgm.c
index e9e929f..19abefa 100644
--- a/app/bin/dcontmgm.c
+++ b/app/bin/dcontmgm.c
@@ -281,8 +281,7 @@ static void ContMgmChange( long changes )
{
if (changes) {
if (changed) {
- changed = 1;
- checkPtMark = 1;
+ changed = checkPtMark = 1;
}
}
if ((changes&CHANGE_PARAMS) == 0 ||
@@ -297,7 +296,7 @@ static void ContMgmChange( long changes )
static void DoControlMgr( void * junk )
{
if (controlPG.win == NULL) {
- ParamCreateDialog( &controlPG, MakeWindowTitle(_("Manage Layout Control Elements")), _("Done"), ControlDone, NULL, TRUE, NULL, F_RESIZE|F_RECALLSIZE|F_BLOCK, ControlDlgUpdate );
+ ParamCreateDialog( &controlPG, MakeWindowTitle(_("Manage Layout Control Elements")), _("Done"), ControlDone, wHide, TRUE, NULL, F_RESIZE|F_RECALLSIZE|F_BLOCK, ControlDlgUpdate );
} else {
wListClear( controlSelL );
}
diff --git a/app/bin/dcustmgm.c b/app/bin/dcustmgm.c
index 8455958..39bd085 100644
--- a/app/bin/dcustmgm.c
+++ b/app/bin/dcustmgm.c
@@ -41,11 +41,20 @@
#include "paths.h"
#include "track.h"
#include "wlib.h"
+#include "include/paramfilelist.h"
+#ifdef WINDOWS
+#include "include/utf8convert.h"
+#endif
static void CustomEdit( void * action );
static void CustomDelete( void * action );
static void CustomExport( void * action );
static void CustomDone( void * action );
+static void CustomNewCar( void * action );
+
+static const char * customTypes[] = { "Car Part", "Car Prototype", NULL };
+static wIndex_t selectedType;
+
static wPos_t customListWidths[] = { 18, 100, 30, 80, 220 };
static const char * customListTitles[] = { "", N_("Manufacturer"),
N_("Scale"), N_("Part No"), N_("Description") };
@@ -53,17 +62,17 @@ static paramListData_t customListData = { 10, 400, 5, customListWidths, customLi
static paramData_t customPLs[] = {
#define I_CUSTOMLIST (0)
#define customSelL ((wList_p)customPLs[I_CUSTOMLIST].control)
- { PD_LIST, NULL, "inx", PDO_DLGRESETMARGIN|PDO_DLGRESIZE, &customListData, NULL, BL_MANY },
-#define I_CUSTOMEDIT (1)
+ { PD_LIST, NULL, "inx", PDO_DLGRESETMARGIN|PDO_DLGRESIZE|PDO_DLGBOXEND, &customListData, NULL, BL_MANY },
+#define I_CUSTOMNEWTYPE (1)
+ { PD_DROPLIST, &selectedType, "newtype", PDO_DLGRESETMARGIN | PDO_LISTINDEX, (void*)150, N_("Create a new ") },
+#define I_CUSTOMNEW (2)
+ { PD_BUTTON, (void *)CustomNewCar, "newcar", PDO_DLGHORZ| PDO_DLGBOXEND, NULL, N_("Go") },
+#define I_CUSTOMEDIT (3)
{ PD_BUTTON, (void*)CustomEdit, "edit", PDO_DLGCMDBUTTON, NULL, N_("Edit") },
-#define I_CUSTOMDEL (2)
+#define I_CUSTOMDEL (4)
{ PD_BUTTON, (void*)CustomDelete, "delete", 0, NULL, N_("Delete") },
-#define I_CUSTOMCOPYTO (3)
+#define I_CUSTOMCOPYTO (5)
{ PD_BUTTON, (void*)CustomExport, "export", 0, NULL, N_("Move To") },
-#define I_CUSTOMNEW (4)
- { PD_MENU, NULL, "new", PDO_DLGWIDE, NULL, N_("New") },
- { PD_MENUITEM, (void*)CarDlgAddDesc, "new-part-mi", 0, NULL, N_("Car Part") },
- { PD_MENUITEM, (void*)CarDlgAddProto, "new-proto-mi", 0, NULL, N_("Car Prototype") }
} ;
static paramGroup_t customPG = { "custmgm", 0, customPLs, sizeof customPLs/sizeof customPLs[0] };
@@ -84,6 +93,10 @@ static void CustomDlgUpdate(
wIndex_t selcnt = wListGetSelectedCount( (wList_p)customPLs[0].control );
wIndex_t linx, lcnt;
+ if ( inx == I_CUSTOMNEW ) {
+ lcnt = wListGetCount( (wList_p)pg->paramPtr[I_CUSTOMNEWTYPE].control );
+ }
+
if ( inx != I_CUSTOMLIST ) return;
if ( selcnt == 1 ) {
lcnt = wListGetCount( (wList_p)pg->paramPtr[inx].control );
@@ -129,6 +142,20 @@ static void CustomEdit( void * action )
#endif
}
+static void CustomNewCar( void * action )
+{
+
+ switch(selectedType) {
+ case 1: // car prototype
+ CarDlgAddProto();
+ break;
+ case 0: // car part
+ CarDlgAddDesc();
+ break;
+ default:
+ break;
+ }
+}
static void CustomDelete( void * action )
{
@@ -212,8 +239,17 @@ static int CustomDoExport(
oldLocale = SaveLocale("C");
- if ( rc == -1 )
- fprintf( customMgmF, "CONTENTS %s\n", custMgmContentsStr );
+ if (rc == -1)
+ {
+ #ifdef WINDOWS
+ char *contents = MyStrdup(custMgmContentsStr);
+ contents = Convert2UTF8(contents);
+ fprintf(customMgmF, "CONTENTS %s\n", contents);
+ MyFree(contents);
+ #else
+ fprintf(customMgmF, "CONTENTS %s\n", custMgmContentsStr);
+ #endif // WINDOWS
+ }
cnt = wListGetCount( (wList_p)customPLs[0].control );
for ( inx=0; inx<cnt; inx++ ) {
@@ -245,7 +281,7 @@ static void CustomExport( void * junk )
{
if ( customMgmExport_fs == NULL )
customMgmExport_fs = wFilSelCreate( mainW, FS_UPDATE, 0, _("Move To XTP"),
- _("Parameter File|*.xtp"), CustomDoExport, NULL );
+ _("Parameter File (*.xtp)|*.xtp"), CustomDoExport, NULL );
wFilSelect( customMgmExport_fs, GetCurrentPath(CUSTOMPATHKEY));
}
@@ -340,8 +376,7 @@ static void CustMgmChange( long changes )
{
if (changes) {
if (changed) {
- changed = 1;
- checkPtMark = 1;
+ changed = checkPtMark = 1;
}
}
if ((changes&CHANGE_PARAMS) == 0 ||
@@ -354,8 +389,16 @@ static void CustMgmChange( long changes )
static void DoCustomMgr( void * junk )
{
+ int i = 0;
+
if (customPG.win == NULL) {
- ParamCreateDialog( &customPG, MakeWindowTitle(_("Manage custom designed parts")), _("Done"), CustomDone, NULL, TRUE, NULL, F_RESIZE|F_RECALLSIZE|F_BLOCK, CustomDlgUpdate );
+ ParamCreateDialog( &customPG, MakeWindowTitle(_("Manage custom designed parts")), _("Done"), CustomDone, wHide, TRUE, NULL, F_RESIZE|F_RECALLSIZE|F_BLOCK, CustomDlgUpdate );
+ while(customTypes[ i ] != NULL) {
+ wListAddValue( ((wList_p)customPLs[I_CUSTOMNEWTYPE].control), customTypes[ i++ ], NULL, NULL );
+ }
+ selectedType = 0;
+ wListSetIndex( ((wList_p)customPLs[I_CUSTOMNEWTYPE].control), selectedType);
+
} else {
wListClear( customSelL );
}
@@ -369,7 +412,7 @@ static void DoCustomMgr( void * junk )
EXPORT addButtonCallBack_t CustomMgrInit( void )
{
- ParamRegister( &customPG );
+ ParamRegister( &customPG );
ParamRegister( &custMgmContentsPG );
RegisterChangeNotification( CustMgmChange );
return &DoCustomMgr;
diff --git a/app/bin/dease.c b/app/bin/dease.c
index 7841857..d01f0df 100644
--- a/app/bin/dease.c
+++ b/app/bin/dease.c
@@ -21,12 +21,14 @@
*/
#include <math.h>
+#include <string.h>
#include "ccurve.h"
#include "cjoin.h"
#include "cstraigh.h"
#include "custom.h"
#include "i18n.h"
+#include "fileio.h"
#include "param.h"
#include "track.h"
diff --git a/app/bin/directory.c b/app/bin/directory.c
new file mode 100644
index 0000000..265485b
--- /dev/null
+++ b/app/bin/directory.c
@@ -0,0 +1,162 @@
+/** \file directory.c
+ * Directory Management
+ */
+
+/* XTrkCad - Model Railroad CAD
+ * Copyright (C) 2018 Adam Richards and Martin Fischer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <errno.h>
+#include <string.h>
+
+#ifdef WINDOWS
+ #include "include/dirent.h"
+ #include <direct.h>
+ #define unlink(a) _unlink((a))
+ #define rmdir(a) _rmdir((a))
+#else
+ #include <dirent.h>
+ #include <unistd.h>
+ #include <sys/stat.h>
+ #include <sys/types.h>
+#endif
+
+#include <wlib.h>
+#include "directory.h"
+#include "dynstring.h"
+#include "i18n.h"
+#include "messages.h"
+#include "misc.h"
+
+/*****************************************************************************
+ * Safe Create Dir
+ * \param IN dir The directory path to create
+ *
+ * \return TRUE if ok
+ *
+ */
+
+BOOL_T SafeCreateDir(const char *dir)
+{
+ int err;
+
+#ifdef WINDOWS
+ err = _mkdir(dir);
+#else
+ err = mkdir(dir, 0755);
+#endif
+ if (err < 0) {
+ if (errno != EEXIST) {
+ NoticeMessage(MSG_DIR_CREATE_FAIL,
+ _("Continue"), NULL, dir, strerror(errno));
+ perror(dir);
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+/************************************************
+ * DeleteDirectory empties and removes a directory recursively
+ *
+ * \param IN dir_path The Directory to empty and remove
+ *
+ * \return TRUE if ok
+ *
+ */
+BOOL_T DeleteDirectory(const char *dir_path)
+{
+ size_t path_len;
+ char *full_path = NULL;
+ DIR *dir;
+ struct stat stat_path, stat_entry;
+ struct dirent *entry;
+ DynString path;
+
+ // stat for the path
+ int resp = stat(dir_path, &stat_path);
+
+ if (resp != 0 && errno == ENOENT) {
+ return TRUE; //Does not Exist
+ }
+
+ // if path is not dir - exit
+ if (!(S_ISDIR(stat_path.st_mode))) {
+ NoticeMessage(MSG_NOT_DIR_FAIL,
+ _("Continue"), NULL, dir_path);
+ return FALSE;
+ }
+
+ // if not possible to read the directory for this user
+ if ((dir = opendir(dir_path)) == NULL) {
+ NoticeMessage(MSG_DIR_OPEN_FAIL,
+ _("Continue"), NULL, dir_path);
+ return FALSE;
+ }
+
+ // the length of the path
+ path_len = strlen(dir_path) + 1;
+ DynStringMalloc(&path, path_len + 16); //guessing the total path length
+
+ // iteration through entries in the directory
+ while ((entry = readdir(dir)) != NULL) {
+
+ // skip entries "." and ".."
+ if (!strcmp(entry->d_name, ".") || !strcmp(entry->d_name, "..")) {
+ continue;
+ }
+
+ // determinate a full path of an entry
+ DynStringReset(&path);
+ DynStringCatCStrs(&path, dir_path, FILE_SEP_CHAR, entry->d_name, NULL);
+ full_path = DynStringToCStr(&path);
+ // stat for the entry
+ stat(full_path, &stat_entry);
+
+ // recursively remove a nested directory
+ if (S_ISDIR(stat_entry.st_mode) != 0) {
+ DeleteDirectory(full_path);
+ continue;
+ }
+
+ // remove a file object
+ if (unlink(full_path)) {
+ NoticeMessage(MSG_UNLINK_FAIL, _("Continue"), NULL, full_path);
+ DynStringFree(&path);
+ closedir(dir);
+ return FALSE;
+ } else {
+#if DEBUG
+ printf("Removed a file: %s \n", full_path);
+#endif
+ }
+ }
+
+ closedir(dir);
+ DynStringFree(&path);
+
+ // remove the devastated directory and close the object of it
+ if (rmdir(dir_path)) {
+ NoticeMessage(MSG_RMDIR_FAIL, _("Continue"), NULL, dir_path);
+ return FALSE;
+ } else {
+#if DEBUG
+ printf("Removed a directory: %s \n", dir_path);
+#endif
+ }
+ return TRUE;
+}
diff --git a/app/bin/directory.h b/app/bin/directory.h
new file mode 100644
index 0000000..2ddfffd
--- /dev/null
+++ b/app/bin/directory.h
@@ -0,0 +1,6 @@
+#ifndef HAVE_DIRECTORY_H
+ #define HAVE_DIRECTORY_H
+ #include "common.h"
+ BOOL_T SafeCreateDir(const char *dir);
+ BOOL_T DeleteDirectory(const char *dir_path);
+#endif \ No newline at end of file
diff --git a/app/bin/dlayer.c b/app/bin/dlayer.c
index 70f613f..352dbe1 100644
--- a/app/bin/dlayer.c
+++ b/app/bin/dlayer.c
@@ -29,6 +29,7 @@
#include "dynstring.h"
#include "fileio.h"
#include "i18n.h"
+#include "layout.h"
#include "messages.h"
#include "param.h"
#include "track.h"
@@ -43,6 +44,7 @@
#define LAYERPREF_FROZEN (1)
#define LAYERPREF_ONMAP (2)
#define LAYERPREF_VISIBLE (4)
+#define LAYERPREF_MODULE (8)
#define LAYERPREF_SECTION ("Layers")
#define LAYERPREF_NAME "name"
#define LAYERPREF_COLOR "color"
@@ -66,9 +68,11 @@ static wList_p setLayerL;
typedef struct {
char name[STR_SHORT_SIZE]; /**< Layer name */
wDrawColor color; /**< layer color, is an index into a color table */
+ BOOL_T useColor; /**< Use Layer color */
BOOL_T frozen; /**< Frozen flag */
BOOL_T visible; /**< visible flag */
BOOL_T onMap; /**< is layer shown map */
+ BOOL_T module; /**< is layer a module (all or nothing) */
long objCount; /**< number of objects on layer */
} layer_t;
@@ -176,6 +180,22 @@ BOOL_T GetLayerOnMap(unsigned int layer)
}
}
+BOOL_T GetLayerModule(unsigned int layer)
+{
+ if (!IsLayerValid(layer)) {
+ return TRUE;
+ } else {
+ return layers[layer].module;
+ }
+}
+
+void SetLayerModule(unsigned int layer, BOOL_T module)
+{
+ if (IsLayerValid(layer)) {
+ layers[layer].module = module;
+ }
+}
+
char * GetLayerName(unsigned int layer)
{
@@ -186,11 +206,26 @@ char * GetLayerName(unsigned int layer)
}
}
+void SetLayerName(unsigned int layer, char* name) {
+ if (IsLayerValid(layer)) {
+ strcpy(layers[layer].name,name);
+ }
+}
+
+BOOL_T GetLayerUseColor(unsigned int layer) {
+ return layers[layer].useColor;
+}
+
wDrawColor GetLayerColor(unsigned int layer)
{
return layers[layer].color;
}
+static void RedrawLayer( unsigned int l, BOOL_T draw )
+{
+ DoRedraw(); // RedrawLayer
+}
+
static void FlipLayer(unsigned int layer)
{
@@ -218,7 +253,7 @@ static void FlipLayer(unsigned int layer)
RedrawLayer(layer, TRUE);
}
-static void SetCurrLayer(wIndex_t inx, const char * name, wIndex_t op,
+void SetCurrLayer(wIndex_t inx, const char * name, wIndex_t op,
void * listContext, void * arg)
{
unsigned int newLayer = (unsigned int)inx;
@@ -422,9 +457,11 @@ static wDrawColor layerColorTab[COUNT(layerRawColorTab)];
static wWin_p layerW;
static char layerName[STR_SHORT_SIZE];
static wDrawColor layerColor;
+static long layerUseColor = TRUE;
static long layerVisible = TRUE;
static long layerFrozen = FALSE;
static long layerOnMap = TRUE;
+static long layerModule = FALSE;
static void LayerOk(void *);
static BOOL_T layerRedrawMap = FALSE;
@@ -435,6 +472,8 @@ static BOOL_T layerRedrawMap = FALSE;
static char *visibleLabels[] = { "", NULL };
static char *frozenLabels[] = { "", NULL };
static char *onMapLabels[] = { "", NULL };
+static char *moduleLabels[] = { "", NULL };
+static char *layerColorLabels[] = { "", NULL };
static paramIntegerRange_t i0_20 = { 0, NUM_BUTTONS };
static paramData_t layerPLs[] = {
@@ -444,13 +483,17 @@ static paramData_t layerPLs[] = {
{ PD_STRING, layerName, "name", PDO_NOPREF|PDO_STRINGLIMITLENGTH, (void*)(250-54), N_("Name"), 0, 0, sizeof(layerName) },
#define I_COLOR (2)
{ PD_COLORLIST, &layerColor, "color", PDO_NOPREF, NULL, N_("Color") },
-#define I_VIS (3)
+#define I_USE_COLOR (3)
+ { PD_TOGGLE, &layerUseColor, "layercolor", PDO_NOPREF|PDO_DLGHORZ, layerColorLabels, N_("Use Color"), BC_HORZ|BC_NOBORDER },
+#define I_VIS (4)
{ PD_TOGGLE, &layerVisible, "visible", PDO_NOPREF, visibleLabels, N_("Visible"), BC_HORZ|BC_NOBORDER },
-#define I_FRZ (4)
+#define I_FRZ (5)
{ PD_TOGGLE, &layerFrozen, "frozen", PDO_NOPREF|PDO_DLGHORZ, frozenLabels, N_("Frozen"), BC_HORZ|BC_NOBORDER },
-#define I_MAP (5)
+#define I_MAP (6)
{ PD_TOGGLE, &layerOnMap, "onmap", PDO_NOPREF|PDO_DLGHORZ, onMapLabels, N_("On Map"), BC_HORZ|BC_NOBORDER },
-#define I_COUNT (6)
+#define I_MOD (7)
+ { PD_TOGGLE, &layerModule, "module", PDO_NOPREF|PDO_DLGHORZ, moduleLabels, N_("Module"), BC_HORZ|BC_NOBORDER },
+#define I_COUNT (8)
{ PD_STRING, NULL, "object-count", PDO_NOPREF|PDO_DLGBOXEND, (void*)(80), N_("Count"), BO_READONLY },
{ PD_MESSAGE, N_("Personal Preferences"), NULL, PDO_DLGRESETMARGIN, (void *)180 },
{ PD_BUTTON, (void*)DoLayerOp, "reset", PDO_DLGRESETMARGIN, 0, N_("Load"), 0, (void *)ENUMLAYER_RELOAD },
@@ -477,6 +520,7 @@ LayerSystemDefaults(void)
layers[inx].visible = TRUE;
layers[inx].frozen = FALSE;
layers[inx].onMap = TRUE;
+ layers[inx].module = FALSE;
layers[inx].objCount = 0;
SetLayerColor(inx, layerColorTab[inx%COUNT(layerColorTab)]);
}
@@ -547,7 +591,7 @@ static void DoLayerOp(void * data)
if (layoutLayerChanged) {
MainProc(mainW, wResize_e, NULL, NULL);
layoutLayerChanged = FALSE;
- changed = TRUE;
+ changed++;
SetWindowTitle();
}
}
@@ -566,7 +610,9 @@ UpdateLayerDlg()
layerVisible = layers[curLayer].visible;
layerFrozen = layers[curLayer].frozen;
layerOnMap = layers[curLayer].onMap;
+ layerModule = layers[curLayer].module;
layerColor = layers[curLayer].color;
+ layerUseColor = layers[curLayer].useColor;
strcpy(layerName, layers[curLayer].name);
layerCurrent = curLayer;
/* now re-load the layer list boxes */
@@ -588,6 +634,28 @@ UpdateLayerDlg()
}
/**
+ * Fill a layer dropbox with the current layer settings
+ *
+ * \param listLayers the dropbox
+ * \return
+ */
+
+void
+FillLayerList( wList_p listLayers)
+{
+ wListClear(listLayers); // Rebuild list on each invovation
+
+ for (int inx = 0; inx < NUM_LAYERS; inx++) {
+ char *layerFormattedName;
+ layerFormattedName = FormatLayerName(inx);
+ wListAddValue((wList_p)listLayers, layerFormattedName, NULL, (void*)(long)inx);
+ free(layerFormattedName);
+ }
+
+ /* set current layer to selected */
+ wListSetIndex(listLayers, curLayer);
+}
+/**
* Initialize the layer lists.
*
* \param IN pointer to function that actually initialize tha data structures
@@ -646,6 +714,10 @@ LayerPrefSave(void)
flags |= LAYERPREF_VISIBLE;
}
+ if (layers[inx].module) {
+ flags |= LAYERPREF_MODULE;
+ }
+
sprintf(buffer, LAYERPREF_FLAGS ".%0u", inx);
wPrefSetInteger(LAYERPREF_SECTION, buffer, flags);
@@ -710,6 +782,7 @@ LayerPrefLoad(void)
layers[inx].frozen = ((flags & LAYERPREF_FROZEN) != 0);
layers[inx].onMap = ((flags & LAYERPREF_ONMAP) != 0);
layers[inx].visible = ((flags & LAYERPREF_VISIBLE) != 0);
+ layers[inx].module = ((flags & LAYERPREF_MODULE) !=0);
prefString = strtok(NULL, ",");
}
}
@@ -761,6 +834,15 @@ void LayerSetCounts(void)
}
}
+int FindUnusedLayer(unsigned int start) {
+ int inx;
+ for (inx=start; inx<NUM_LAYERS; inx++) {
+ if (layers[inx].objCount == 0 && !layers[inx].frozen) return inx;
+ }
+ ErrorMessage( MSG_NO_EMPTY_LAYER );
+ return -1;
+}
+
/**
* Reset layer options to their default values. The default values are loaded
* from the preferences file.
@@ -805,12 +887,20 @@ static void LayerUpdate(void)
ParamLoadControl(&layerPG, I_VIS);
}
+ if (layerCurrent == curLayer && layerModule) {
+ NoticeMessage(MSG_LAYER_MODULE, _("Ok"), NULL);
+ layerModule = FALSE;
+ ParamLoadControl(&layerPG, I_MOD);
+ }
+
if (strcmp(layers[(int)layerCurrent].name, layerName) ||
layerColor != layers[(int)layerCurrent].color ||
+ layers[(int)layerCurrent].useColor != (BOOL_T)layerUseColor ||
layers[(int)layerCurrent].visible != (BOOL_T)layerVisible ||
layers[(int)layerCurrent].frozen != (BOOL_T)layerFrozen ||
- layers[(int)layerCurrent].onMap != (BOOL_T)layerOnMap) {
- changed = TRUE;
+ layers[(int)layerCurrent].onMap != (BOOL_T)layerOnMap ||
+ layers[(int)layerCurrent].module != (BOOL_T)layerModule) {
+ changed++;
SetWindowTitle();
}
@@ -837,6 +927,7 @@ static void LayerUpdate(void)
}
redraw = (layerColor != layers[(int)layerCurrent].color ||
+ layers[(int)layerCurrent].useColor != (BOOL_T)layerUseColor ||
(BOOL_T)layerVisible != layers[(int)layerCurrent].visible);
if ((!layerRedrawMap) && redraw) {
@@ -850,9 +941,11 @@ static void LayerUpdate(void)
wButtonSetBusy(layer_btns[(int)layerCurrent], layerVisible);
}
+ layers[(int)layerCurrent].useColor = (BOOL_T)layerUseColor;
layers[(int)layerCurrent].visible = (BOOL_T)layerVisible;
layers[(int)layerCurrent].frozen = (BOOL_T)layerFrozen;
layers[(int)layerCurrent].onMap = (BOOL_T)layerOnMap;
+ layers[(int)layerCurrent].module = (BOOL_T)layerModule;
if (layerRedrawMap) {
DoRedraw();
@@ -878,7 +971,9 @@ static void LayerSelect(
layerVisible = layers[inx].visible;
layerFrozen = layers[inx].frozen;
layerOnMap = layers[inx].onMap;
+ layerModule = layers[inx].module;
layerColor = layers[inx].color;
+ layerUseColor = layers[inx].useColor;
sprintf(message, "%ld", layers[inx].objCount);
ParamLoadMessage(&layerPG, I_COUNT, message);
ParamLoadControls(&layerPG);
@@ -893,6 +988,7 @@ void ResetLayers(void)
layers[inx].visible = TRUE;
layers[inx].frozen = FALSE;
layers[inx].onMap = TRUE;
+ layers[inx].module = FALSE;
layers[inx].objCount = 0;
SetLayerColor(inx, layerColorTab[inx%COUNT(layerColorTab)]);
@@ -911,7 +1007,9 @@ void ResetLayers(void)
layerVisible = TRUE;
layerFrozen = FALSE;
layerOnMap = TRUE;
+ layerModule = FALSE;
layerColor = layers[0].color;
+ layerUseColor = TRUE;
strcpy(layerName, layers[0].name);
LoadLayerLists();
@@ -1024,7 +1122,7 @@ static void DoLayer(void * junk)
{
if (layerW == NULL) {
layerW = ParamCreateDialog(&layerPG, MakeWindowTitle(_("Layers")), _("Done"),
- LayerOk, NULL, TRUE, NULL, 0, LayerDlgUpdate);
+ LayerOk, wHide, TRUE, NULL, 0, LayerDlgUpdate);
}
/* set the globals to the values for the current layer */
@@ -1038,7 +1136,7 @@ static void DoLayer(void * junk)
BOOL_T ReadLayers(char * line)
{
char * name;
- int inx, visible, frozen, color, onMap;
+ int inx, visible, frozen, color, onMap, module, dontUseColor, ColorFlags;
unsigned long rgb;
/* older files didn't support layers */
@@ -1069,7 +1167,7 @@ BOOL_T ReadLayers(char * line)
/* get the properties for a layer from the file and update the layer accordingly */
- if (!GetArgs(line, "ddddu0000q", &inx, &visible, &frozen, &onMap, &rgb,
+ if (!GetArgs(line, "dddduddd0q", &inx, &visible, &frozen, &onMap, &rgb, &module, &dontUseColor, &ColorFlags,
&name)) {
return FALSE;
}
@@ -1093,7 +1191,12 @@ BOOL_T ReadLayers(char * line)
layers[inx].visible = visible;
layers[inx].frozen = frozen;
layers[inx].onMap = onMap;
+ layers[inx].module = module;
layers[inx].color = color;
+ layers[inx].useColor = !dontUseColor;
+
+ colorTrack = ColorFlags&1; //Make sure globals are set
+ colorDraw = ColorFlags&2;
if (inx<NUM_BUTTONS) {
if (strlen(name) > 0) {
@@ -1117,12 +1220,13 @@ BOOL_T ReadLayers(char * line)
* \return TRUE if configured, FALSE if not
*/
-bool
+BOOL_T
IsLayerConfigured(unsigned int layerNumber)
{
return (!layers[layerNumber].visible ||
layers[layerNumber].frozen ||
!layers[layerNumber].onMap ||
+ layers[layerNumber].module ||
layers[layerNumber].color !=
layerColorTab[layerNumber % (COUNT(layerColorTab))] ||
layers[layerNumber].name[0] ||
@@ -1140,6 +1244,11 @@ BOOL_T WriteLayers(FILE * f)
{
unsigned int inx;
+ int ColorFlags = 0;
+
+ if (colorTrack) ColorFlags |= 1;
+ if (colorDraw) ColorFlags |= 2;
+
for (inx = 0; inx < NUM_LAYERS; inx++) {
if (IsLayerConfigured(inx)) {
fprintf(f, "LAYERS %u %d %d %d %ld %d %d %d %d \"%s\"\n",
@@ -1148,7 +1257,9 @@ BOOL_T WriteLayers(FILE * f)
layers[inx].frozen,
layers[inx].onMap,
wDrawGetRGB(layers[inx].color),
- 0, 0, 0, 0,
+ layers[inx].module,
+ layers[inx].useColor?0:1,
+ ColorFlags, 0,
PutTitle(layers[inx].name));
}
}
@@ -1157,6 +1268,7 @@ BOOL_T WriteLayers(FILE * f)
return TRUE;
}
+#include "bitmaps/background.xpm"
void InitLayers(void)
{
@@ -1173,6 +1285,7 @@ void InitLayers(void)
show_layer_bmps[i] = wIconCreateBitMap(l1_width, l1_height, show_layer_bits[i],
layerColorTab[i%(COUNT(layerColorTab))]);
layers[i].color = layerColorTab[i%(COUNT(layerColorTab))];
+ layers[i].useColor = TRUE;
}
/* layer list for toolbar */
@@ -1180,6 +1293,10 @@ void InitLayers(void)
SetCurrLayer, NULL);
wControlSetBalloonText((wControl_p)setLayerL, GetBalloonHelpStr("cmdLayerSet"));
AddToolbarControl((wControl_p)setLayerL, IC_MODETRAIN_TOO);
+
+ backgroundB = AddToolbarButton("cmdBackgroundShow", wIconCreatePixMap(background), 0,
+ (addButtonCallBack_t)BackgroundToggleShow, NULL);
+ wControlActive((wControl_p)backgroundB, FALSE);
for (i = 0; i<NUM_LAYERS; i++) {
char *layerName;
diff --git a/app/bin/doption.c b/app/bin/doption.c
index ae36d21..3b9ed02 100644
--- a/app/bin/doption.c
+++ b/app/bin/doption.c
@@ -35,6 +35,7 @@ static paramIntegerRange_t i1_64 = { 1, 64 };
static paramIntegerRange_t i1_100 = { 1, 100 };
static paramIntegerRange_t i1_256 = { 1, 256 };
static paramIntegerRange_t i0_10000 = { 0, 10000 };
+static paramIntegerRange_t i0_99 = { 0, 99};
static paramIntegerRange_t i1_1000 = { 1, 1000 };
static paramIntegerRange_t i10_1000 = { 10, 1000 };
static paramIntegerRange_t i10_100 = { 10, 100 };
@@ -45,11 +46,15 @@ static paramFloatRange_t r0_180 = { 0, 180 };
static void UpdatePrefD( void );
static void UpdateMeasureFmt(void);
+static void UpdateAutoSaveInterval(long);
+static void UpdateChkPtInterval(long);
static wIndex_t distanceFormatInx;
EXPORT long enableBalloonHelp = 1;
+EXPORT long showFlexTrack = 1;
+
long GetChanges( paramGroup_p pg )
{
long changes;
@@ -62,21 +67,18 @@ long GetChanges( paramGroup_p pg )
return changes;
}
+static paramGroup_t prefPG;
+
+
static void OptionDlgUpdate(
paramGroup_p pg,
int inx,
void * valueP )
{
- int quickMoveOld;
if ( inx < 0 ) return;
if ( pg->paramPtr[inx].valueP == &enableBalloonHelp ) {
wEnableBalloonHelp((wBool_t)*(long*)valueP);
- } else if ( pg->paramPtr[inx].valueP == &quickMove ) {
- quickMoveOld = (int)quickMove;
- quickMove = *(long*)valueP;
- UpdateQuickMove(NULL);
- quickMove = quickMoveOld;
} else {
if (pg->paramPtr[inx].valueP == &units) {
UpdatePrefD();
@@ -84,6 +86,28 @@ static void OptionDlgUpdate(
if (pg->paramPtr[inx].valueP == &distanceFormatInx) {
UpdateMeasureFmt();
}
+ if (pg->paramPtr[inx].valueP == &showFlexTrack) {
+ DoChangeNotification(CHANGE_PARAMS|CHANGE_TOOLBAR);
+ }
+ if (pg->paramPtr[inx].valueP == &checkPtInterval) {
+ checkPtInterval = *(long *)valueP;
+ if (checkPtInterval == 0 ) {
+ wControlSetBalloon( pg->paramPtr[inx].control, 0, -5, _("Turning off AutoSave") );
+ UpdateAutoSaveInterval(0);
+ } else {
+ wControlSetBalloon( pg->paramPtr[inx].control, 0, -5, NULL );
+ }
+ }
+ if (pg->paramPtr[inx].valueP == &autosaveChkPoints) {
+ autosaveChkPoints = *(long *)valueP;
+ if (checkPtInterval == 0 && autosaveChkPoints>0 ) {
+ wControlSetBalloon( pg->paramPtr[inx].control, 0, -5, _("Turning on CheckPointing") );
+ UpdateChkPtInterval(10);
+ } else {
+ wControlSetBalloon( pg->paramPtr[inx].control, 0, -5, NULL );
+ }
+
+ }
}
}
@@ -91,7 +115,6 @@ static void OptionDlgCancel(
wWin_p win )
{
wEnableBalloonHelp( (int)enableBalloonHelp );
- UpdateQuickMove(NULL);
wHide( win );
}
@@ -113,15 +136,19 @@ static char * drawCenterCircle[] = { N_("Off"), N_("On"), NULL };
static char * labelEnableLabels[] = { N_("Track Descriptions"), N_("Lengths"), N_("EndPt Elevations"), N_("Track Elevations"), N_("Cars"), NULL };
static char * hotBarLabelsLabels[] = { N_("Part No"), N_("Descr"), NULL };
static char * listLabelsLabels[] = { N_("Manuf"), N_("Part No"), N_("Descr"), NULL };
-static char * colorLayersLabels[] = { N_("Tracks"), N_("Other"), NULL };
+static char * colorTrackLabels[] = { N_("Object"), N_("Layer"), NULL };
+static char * colorDrawLabels[] = { N_("Object"), N_("Layer"), NULL };
static char * liveMapLabels[] = { N_("Live Map"), NULL };
static char * hideTrainsInTunnelsLabels[] = { N_("Hide Trains On Hidden Track"), NULL };
-static char * zoomCornerLabels[] = {N_("Zoom keeps lower corner in view"), NULL};
+static char * constrainMainLabels[] = {N_("Constrain Drawing Area to Room boundaries"), NULL};
extern long trainPause;
+
+
static paramData_t displayPLs[] = {
- { PD_TOGGLE, &colorLayers, "color-layers", PDO_NOPSHUPD|PDO_DRAW, colorLayersLabels, N_("Color Layers"), BC_HORZ, (void*)(CHANGE_MAIN) },
+ { PD_RADIO, &colorTrack, "color-track", PDO_NOPSHUPD|PDO_DRAW, colorTrackLabels, N_("Color Track"), BC_HORZ, (void*)(CHANGE_MAIN) },
+ { PD_RADIO, &colorDraw, "color-draw", PDO_NOPSHUPD|PDO_DRAW, colorDrawLabels, N_("Color Draw"), BC_HORZ, (void*)(CHANGE_MAIN) },
{ PD_RADIO, &drawTunnel, "tunnels", PDO_NOPSHUPD|PDO_DRAW, drawTunnelLabels, N_("Draw Tunnel"), BC_HORZ, (void*)(CHANGE_MAIN) },
{ PD_RADIO, &drawEndPtV, "endpt", PDO_NOPSHUPD|PDO_DRAW, drawEndPtLabels3, N_("Draw EndPts"), BC_HORZ, (void*)(CHANGE_MAIN) },
{ PD_RADIO, &drawUnconnectedEndPt, "unconnected-endpt", PDO_NOPSHUPD|PDO_DRAW, drawEndPtUnconnectedSize, N_("Draw Unconnected EndPts"), BC_HORZ, (void*)(CHANGE_MAIN) },
@@ -129,7 +156,7 @@ static paramData_t displayPLs[] = {
{ PD_RADIO, &centerDrawMode, "centerdraw", PDO_NOPSHUPD|PDO_DRAW, drawCenterCircle, N_("Draw Centers"), BC_HORZ, (void*)(CHANGE_MAIN | CHANGE_MAP) },
{ PD_LONG, &twoRailScale, "tworailscale", PDO_NOPSHUPD, &i1_64, N_("Two Rail Scale"), 0, (void*)(CHANGE_MAIN) },
{ PD_LONG, &mapScale, "mapscale", PDO_NOPSHUPD, &i1_256, N_("Map Scale"), 0, (void*)(CHANGE_MAP) },
- { PD_TOGGLE, &zoomCorner, "zoom-corner", PDO_NOPSHUPD, zoomCornerLabels, "", BC_HORZ },
+ { PD_TOGGLE, &constrainMain, "constrainmain", PDO_NOPSHUPD, constrainMainLabels, "", BC_HORZ },
{ PD_TOGGLE, &liveMap, "livemap", PDO_NOPSHUPD, liveMapLabels, "", BC_HORZ },
{ PD_TOGGLE, &autoPan, "autoPan", PDO_NOPSHUPD, autoPanLabels, "", BC_HORZ },
{ PD_TOGGLE, &labelEnable, "labelenable", PDO_NOPSHUPD, labelEnableLabels, N_("Label Enable"), 0, (void*)(CHANGE_MAIN) },
@@ -139,7 +166,7 @@ static paramData_t displayPLs[] = {
{ PD_TOGGLE, &layoutLabels, "layoutlabels", PDO_NOPSHUPD, listLabelsLabels, N_("Layout Labels"), BC_HORZ, (void*)(CHANGE_MAIN) },
{ PD_TOGGLE, &listLabels, "listlabels", PDO_NOPSHUPD, listLabelsLabels, N_("List Labels"), BC_HORZ, (void*)(CHANGE_PARAMS) },
/* ATTENTION: update the define below if you add entries above */
-#define I_HOTBARLABELS (17)
+#define I_HOTBARLABELS (18)
{ PD_DROPLIST, &carHotbarModeInx, "carhotbarlabels", PDO_NOPSHUPD|PDO_DLGUNDERCMDBUTT|PDO_LISTINDEX, (void*)250, N_("Car Labels"), 0, (void*)CHANGE_SCALE },
{ PD_LONG, &trainPause, "trainpause", PDO_NOPSHUPD, &i10_1000 , N_("Train Update Delay"), 0, 0 },
{ PD_TOGGLE, &hideTrainsInTunnels, "hideTrainsInTunnels", PDO_NOPSHUPD, hideTrainsInTunnelsLabels, "", BC_HORZ }
@@ -178,6 +205,7 @@ static void DoDisplay( void * junk )
wListAddValue( (wList_p)displayPLs[I_HOTBARLABELS].control, _("Manuf/Proto/Part Number"), NULL, (void*)0x0321 );
wListAddValue( (wList_p)displayPLs[I_HOTBARLABELS].control, _("Manuf/Proto/Partno/Item"), NULL, (void*)0x4321 );
}
+
ParamLoadControls( &displayPG );
wShow( displayW );
#ifdef LATER
@@ -204,13 +232,9 @@ EXPORT addButtonCallBack_t DisplayInit( void )
static wWin_p cmdoptW;
-static char * moveQlabels[] = {
- N_("Normal"),
- N_("Simple"),
- N_("End-Points"),
- NULL };
-
static char * preSelectLabels[] = { N_("Properties"), N_("Select"), NULL };
+static char * selectLabels[] = { N_("Single item selected, +Ctrl Add to selection"), N_("Add to selection, +Ctrl Single item selected"), NULL };
+static char * selectZeroLabels[] = { N_("Deselect all on select nothing"), NULL };
#ifdef HIDESELECTIONWINDOW
static char * hideSelectionWindowLabels[] = { N_("Hide"), NULL };
@@ -218,17 +242,16 @@ static char * hideSelectionWindowLabels[] = { N_("Hide"), NULL };
static char * rightClickLabels[] = {N_("Normal: Command List, Shift: Command Options"), N_("Normal: Command Options, Shift: Command List"), NULL };
EXPORT paramData_t cmdoptPLs[] = {
- { PD_RADIO, &quickMove, "move-quick", PDO_NOPSHUPD, moveQlabels, N_("Draw Moving Tracks"), BC_HORZ },
{ PD_RADIO, &preSelect, "preselect", PDO_NOPSHUPD, preSelectLabels, N_("Default Command"), BC_HORZ },
#ifdef HIDESELECTIONWINDOW
{ PD_TOGGLE, &hideSelectionWindow, PDO_NOPSHUPD, hideSelectionWindowLabels, N_("Hide Selection Window"), BC_HORZ },
#endif
- { PD_RADIO, &rightClickMode, "rightclickmode", PDO_NOPSHUPD, rightClickLabels, N_("Right Click"), 0 }
+ { PD_RADIO, &rightClickMode, "rightclickmode", PDO_NOPSHUPD, rightClickLabels, N_("Right Click"), 0 },
+ { PD_RADIO, &selectMode, "selectmode", PDO_NOPSHUPD, selectLabels, N_("Select Mode"), 0},
+ { PD_TOGGLE, &selectZero, "selectzero", PDO_NOPSHUPD, selectZeroLabels, "", 0 }
};
static paramGroup_t cmdoptPG = { "cmdopt", PGO_RECORD|PGO_PREFMISC, cmdoptPLs, sizeof cmdoptPLs/sizeof cmdoptPLs[0] };
-EXPORT paramData_p moveQuickPD = &cmdoptPLs[0];
-
static void CmdoptOk( void * junk )
{
long changes;
@@ -275,6 +298,7 @@ static long displayUnits;
static char * unitsLabels[] = { N_("English"), N_("Metric"), NULL };
static char * angleSystemLabels[] = { N_("Polar"), N_("Cartesian"), NULL };
static char * enableBalloonHelpLabels[] = { N_("Balloon Help"), NULL };
+static char * enableFlexTrackLabels[] = { N_("Show FlexTrack in HotBar"), NULL };
static char * startOptions[] = { N_("Load Last Layout"), N_("Start New Layout"), NULL };
static paramData_t prefPLs[] = {
@@ -288,10 +312,14 @@ static paramData_t prefPLs[] = {
{ PD_FLOAT, &turntableAngle, "turntable-angle", PDO_NOPSHUPD, &r0_180, N_("Turntable Angle") },
{ PD_LONG, &maxCouplingSpeed, "coupling-speed-max", PDO_NOPSHUPD, &i10_100, N_("Max Coupling Speed"), 0 },
{ PD_TOGGLE, &enableBalloonHelp, "balloonhelp", PDO_NOPSHUPD, enableBalloonHelpLabels, "", BC_HORZ },
+ { PD_TOGGLE, &showFlexTrack, "showflextrack", PDO_NOPSHUPD, enableFlexTrackLabels, "", BC_HORZ},
{ PD_LONG, &dragPixels, "dragpixels", PDO_NOPSHUPD|PDO_DRAW, &i1_1000, N_("Drag Distance") },
{ PD_LONG, &dragTimeout, "dragtimeout", PDO_NOPSHUPD|PDO_DRAW, &i1_1000, N_("Drag Timeout") },
{ PD_LONG, &minGridSpacing, "mingridspacing", PDO_NOPSHUPD|PDO_DRAW, &i1_100, N_("Min Grid Spacing"), 0, 0 },
- { PD_LONG, &checkPtInterval, "checkpoint", PDO_NOPSHUPD|PDO_FILE, &i0_10000, N_("Check Point") },
+#define I_CHKPT (13)
+ { PD_LONG, &checkPtInterval, "checkpoint", PDO_NOPSHUPD|PDO_FILE, &i0_10000, N_("Check Point Frequency") },
+#define I_AUTOSAVE (14)
+ { PD_LONG, &autosaveChkPoints, "autosave", PDO_NOPSHUPD|PDO_FILE, &i0_99, N_("Autosave Checkpoint Frequency") },
{ PD_RADIO, &onStartup, "onstartup", PDO_NOPSHUPD, startOptions, N_("On Program Startup"), 0, NULL }
};
static paramGroup_t prefPG = { "pref", PGO_RECORD|PGO_PREFMISC, prefPLs, sizeof prefPLs/sizeof prefPLs[0] };
@@ -302,6 +330,7 @@ typedef struct {
long fmt;
} dstFmts_t;
static dstFmts_t englishDstFmts[] = {
+ { N_("999.999"), DISTFMT_FMT_NONE|DISTFMT_FRACT_NUM|3 },
{ N_("999.999999"), DISTFMT_FMT_NONE|DISTFMT_FRACT_NUM|6 },
{ N_("999.99999"), DISTFMT_FMT_NONE|DISTFMT_FRACT_NUM|5 },
{ N_("999.9999"), DISTFMT_FMT_NONE|DISTFMT_FRACT_NUM|4 },
@@ -339,10 +368,23 @@ static dstFmts_t metricDstFmts[] = {
{ NULL, 0 },
{ NULL, 0 },
{ NULL, 0 },
- { NULL, 0 },
{ NULL, 0 } };
static dstFmts_t *dstFmts[] = { englishDstFmts, metricDstFmts };
+void UpdateAutoSaveInterval(long value)
+{
+ autosaveChkPoints = value;
+ ParamLoadControl(&prefPG, I_AUTOSAVE);
+ ParamLoadControl(&prefPG, I_CHKPT);
+}
+
+void UpdateChkPtInterval(long value)
+{
+ checkPtInterval = value;
+ ParamLoadControl(&prefPG, I_AUTOSAVE);
+ ParamLoadControl(&prefPG, I_CHKPT);
+}
+
/**
* Load the selection list for number formats with the appropriate list of variants.
*/
diff --git a/app/bin/dpricels.c b/app/bin/dpricels.c
index 87df88b..9d04d6d 100644
--- a/app/bin/dpricels.c
+++ b/app/bin/dpricels.c
@@ -151,7 +151,7 @@ static void PriceListDlgUpdate(
static void DoPriceList( void * junk )
{
if (priceListW == NULL)
- priceListW = ParamCreateDialog( &priceListPG, MakeWindowTitle(_("Price List")), _("Done"), PriceListOk, NULL, TRUE, NULL, 0, PriceListDlgUpdate );
+ priceListW = ParamCreateDialog( &priceListPG, MakeWindowTitle(_("Price List")), _("Done"), PriceListOk, wHide, TRUE, NULL, F_RESIZE, PriceListDlgUpdate );
wShow( priceListW );
PriceListChange( CHANGE_SCALE|CHANGE_PARAMS );
}
diff --git a/app/bin/dprmfile.c b/app/bin/dprmfile.c
index 24250e7..3bb249e 100644
--- a/app/bin/dprmfile.c
+++ b/app/bin/dprmfile.c
@@ -1,5 +1,5 @@
/** \file dprmfile.c
- * Param File Management
+ * Param File Dialog
*/
/* XTrkCad - Model Railroad CAD
@@ -21,535 +21,426 @@
*/
#include <assert.h>
+#include <stdbool.h>
#include <stdint.h>
#include <string.h>
-#include <time.h>
#include "custom.h"
+#include "dynstring.h"
#include "fileio.h"
#include "i18n.h"
#include "messages.h"
#include "param.h"
+#include "include/paramfile.h"
+#include "include/paramfilelist.h"
#include "paths.h"
#include "track.h"
-typedef struct {
- char * name;
- char * contents;
- int deleted;
- int deletedShadow;
- int valid;
- } paramFileInfo_t;
-typedef paramFileInfo_t * paramFileInfo_p;
-static dynArr_t paramFileInfo_da;
-#define paramFileInfo(N) DYNARR_N( paramFileInfo_t, paramFileInfo_da, N )
-
-EXPORT int curParamFileIndex = PARAM_DEMO;
-static char curParamDir[STR_LONG_SIZE];
static struct wFilSel_t * paramFile_fs;
-EXPORT wBool_t IsParamValid(
- int fileInx )
-{
- if (fileInx == PARAM_DEMO)
- return (curDemo>=0);
- else if (fileInx == PARAM_CUSTOM)
- return TRUE;
- else if (fileInx == PARAM_LAYOUT)
- return TRUE;
- else if (fileInx >= 0 && fileInx < paramFileInfo_da.cnt)
- return (!paramFileInfo(fileInx).deleted) && paramFileInfo(fileInx).valid;
- else
- return FALSE;
-}
-
-
-EXPORT char * GetParamFileName(
- int fileInx )
-{
- return paramFileInfo(fileInx).contents;
-}
-
-
-static BOOL_T UpdateParamFiles( void )
-{
- char fileName[STR_LONG_SIZE], *fileNameP;
- char * contents;
- const char * cp;
- FILE * updateF;
- FILE * paramF;
- long updateTime;
- long lastTime;
-
- MakeFullpath(&fileNameP, libDir, "xtrkcad.upd", NULL);
- updateF = fopen( fileNameP, "r" );
- free(fileNameP);
- if ( updateF == NULL )
- return FALSE;
- if ( fgets( message, sizeof message, updateF ) == NULL ) {
- NoticeMessage( "short file: xtrkcad.upd", _("Ok"), NULL );
- return FALSE;
- }
- wPrefGetInteger( "file", "updatetime", &lastTime, 0 );
- updateTime = atol( message );
- if ( lastTime >= updateTime )
- return FALSE;
-
- while ( ( fgets( fileName, STR_LONG_SIZE, updateF ) ) != NULL ) {
- Stripcr( fileName );
- InfoMessage( _("Updating %s"), fileName );
- MakeFullpath(&fileNameP, libDir, "params", fileName, NULL);
- paramF = fopen( fileNameP, "r" );
- if ( paramF == NULL ) {
- NoticeMessage( MSG_PRMFIL_OPEN_NEW, _("Ok"), NULL, fileNameP );
- free(fileNameP);
- continue;
- }
- contents = NULL;
- while ( ( fgets(message, sizeof message, paramF) ) != NULL ) {
- if (strncmp( message, "CONTENTS", 8 ) == 0) {
- Stripcr( message );
- contents = message+9;
- break;
- }
- }
- fclose( paramF );
- if (contents == NULL) {
- NoticeMessage( MSG_PRMFIL_NO_CONTENTS, _("Ok"), NULL, fileNameP );
- free(fileNameP);
- continue;
- }
- cp = wPrefGetString( "Parameter File Map", contents );
- wPrefSetString( "Parameter File Map", contents, fileNameP );
- if (cp!=NULL && *cp!='\0') {
- /* been there, done that */
- free(fileNameP);
- continue;
- }
-
- DYNARR_APPEND( paramFileInfo_t, paramFileInfo_da, 10 );
- curParamFileIndex = paramFileInfo_da.cnt-1;
- paramFileInfo(curParamFileIndex).name = MyStrdup( fileNameP );
- curContents = curSubContents = NULL;
- paramFileInfo(curParamFileIndex).deleted = FALSE;
- paramFileInfo(curParamFileIndex).valid = TRUE;
- paramFileInfo(curParamFileIndex).deletedShadow =
- paramFileInfo(curParamFileIndex).deleted = !ReadParams( 0, NULL, fileNameP );
- paramFileInfo(curParamFileIndex).contents = curContents;
-
- free(fileNameP);
- }
- wPrefSetInteger( "file", "updatetime", updateTime );
- return TRUE;
-}
-
-
-EXPORT void ReadParamFiles( void )
-{
- int fileNo;
- const char *fileName;
- const char * contents;
- BOOL_T updated = FALSE;
-
- updated = UpdateParamFiles();
-
- for ( fileNo=1; ; fileNo++ ) {
- sprintf( message, "File%d", fileNo );
- contents = wPrefGetString( "Parameter File Names", message );
- if (contents==NULL || *contents=='\0')
- break;
- InfoMessage( "Parameters for %s", contents );
- fileName = wPrefGetString( "Parameter File Map", contents );
- if (fileName==NULL || *fileName=='\0') {
- NoticeMessage( MSG_PRMFIL_NO_MAP, _("Ok"), NULL, contents );
- continue;
- }
- DYNARR_APPEND( paramFileInfo_t, paramFileInfo_da, 10 );
- curParamFileIndex = paramFileInfo_da.cnt-1;
- paramFileInfo(curParamFileIndex).name = MyStrdup( fileName );
- curContents = NULL;
- paramFileInfo(curParamFileIndex).deleted = FALSE;
- paramFileInfo(curParamFileIndex).valid = TRUE;
- paramFileInfo(curParamFileIndex).deletedShadow =
- paramFileInfo(curParamFileIndex).deleted = !ReadParams( 0, NULL, fileName );
- if (curContents == NULL)
- curContents = curSubContents = MyStrdup(contents);
- paramFileInfo(curParamFileIndex).contents = curContents;
- }
- curParamFileIndex = PARAM_CUSTOM;
- if (updated) {
- RememberParamFiles();
- }
-}
+#include "bitmaps/greendot.xpm"
+#include "bitmaps/greydot.xpm"
+#include "bitmaps/yellowdot.xpm"
+#include "bitmaps/reddot.xpm"
+#include "bitmaps/greenstar.xpm"
+#include "bitmaps/greystar.xpm"
+#include "bitmaps/yellowstar.xpm"
+#include "bitmaps/redstar.xpm"
+#define FAVORITE_PARAM 1
+#define STANDARD_PARAM 0
-EXPORT void RememberParamFiles( void )
-{
- int fileInx;
- int fileNo;
- char * contents, *cp;
-
- for (fileInx=0, fileNo=1; fileInx<paramFileInfo_da.cnt; fileInx++ ) {
- if (paramFileInfo(fileInx).valid && !paramFileInfo(fileInx).deleted) {
- sprintf( message, "File%d", fileNo++ );
- contents = paramFileInfo(fileInx).contents;
- for ( cp=contents; *cp; cp++ ) {
- if ( *cp == '=' || *cp == '\'' || *cp == '"' || *cp == ':' || *cp == '.' )
- *cp = ' ';
- }
- wPrefSetString( "Parameter File Names", message, contents );
- wPrefSetString("Parameter File Map", contents, paramFileInfo(fileInx).name);
- }
- }
- sprintf( message, "File%d", fileNo++ );
- wPrefSetString( "Parameter File Names", message, "" );
-}
+#define PARAMBUTTON_UNLOAD "Unload"
+#define PARAMBUTTON_REFRESH "Reload"
+#define PARAMFILE_UNLOAD (0)
+#define PARAMFILE_REFRESH (1)
-
-/****************************************************************************
- *
- * Param File Dialog
- *
- */
+static wIcon_p indicatorIcons[ 2 ][PARAMFILE_MAXSTATE];
static wWin_p paramFileW;
static long paramFileSel = 0;
-static wIcon_p mtbox_bm;
-static wIcon_p chkbox_bm;
-static void ParamFileAction( void * );
-static void ParamFileBrowse( void * );
-static void ParamFileSelectAll( void * );
+static void ParamFileFavorite(void * favorite);
+static void ParamRefreshSelectedFiles(void * action);
+static void ParamUnloadSelectedFiles(void *);
+static void ParamFileBrowse(void *);
+static void ParamFileSelectAll(void *);
-static paramListData_t paramFileListData = { 10, 370 };
+static paramListData_t paramFileListData = { 15, 370 };
static char * paramFileLabels[] = { N_("Show File Names"), NULL };
static paramData_t paramFilePLs[] = {
#define I_PRMFILLIST (0)
#define paramFileL ((wList_p)paramFilePLs[I_PRMFILLIST].control)
- { PD_LIST, NULL, "inx", 0, &paramFileListData, NULL, BL_DUP|BL_SETSTAY|BL_MANY },
+ { PD_LIST, NULL, "inx", PDO_NOPREF | PDO_DLGRESIZE, &paramFileListData, NULL, BL_DUP|BL_SETSTAY|BL_MANY },
#define I_PRMFILTOGGLE (1)
- { PD_TOGGLE, &paramFileSel, "mode", 0, paramFileLabels, NULL, BC_HORZ|BC_NOBORDER },
- { PD_BUTTON, (void *)ParamFileSelectAll, "selectall", PDO_DLGCMDBUTTON, NULL, N_("Select all") },
-#define I_PRMFILACTION (3)
-#define paramFileActionB ((wButton_p)paramFilePLs[I_PRMFILACTION].control)
- { PD_BUTTON, (void*)ParamFileAction, "action", PDO_DLGCMDBUTTON, NULL, N_("Unload"), 0L, FALSE },
- { PD_BUTTON, (void*)ParamFileBrowse, "browse", 0, NULL, N_("Browse ...") } };
+ { PD_TOGGLE, &paramFileSel, "mode", 0, paramFileLabels, NULL, BC_HORZ|BC_NOBORDER },
+#define I_MESSAGE (2)
+ { PD_MESSAGE, "", NULL, 0, (void *)370 },
+ { PD_BUTTON, (void *)ParamFileSelectAll, "selectall", PDO_DLGCMDBUTTON, NULL, N_("Select all") },
+#define I_PRMFILEFAVORITE (4)
+ { PD_BUTTON, (void *)ParamFileFavorite, "favorite", PDO_DLGCMDBUTTON, (void *)TRUE, N_("Favorite")},
+ { PD_BUTTON, (void*)ParamUnloadSelectedFiles, "unload", PDO_DLGCMDBUTTON, NULL, N_(PARAMBUTTON_UNLOAD), 0L, FALSE },
+ { PD_BUTTON, (void*)ParamRefreshSelectedFiles, "refresh", PDO_DLGCMDBUTTON, NULL, N_(PARAMBUTTON_REFRESH), 0L, FALSE },
+ { PD_BUTTON, (void*)DoSearchParams, "find", 0, NULL, N_("Search Library") },
+ { PD_BUTTON, (void*)ParamFileBrowse, "browse", 0, NULL, N_("Browse ...") },
+
+
+};
static paramGroup_t paramFilePG = { "prmfile", 0, paramFilePLs, sizeof paramFilePLs/sizeof paramFilePLs[0] };
+#define MESSAGETEXT ((wMessage_p)paramFilePLs[I_MESSAGE].control)
-static void ParamFileLoadList( void )
+static dynArr_t *sortFiles;
+
+/** Comparison function per C runtime conventions. Elements are ordered by compatibility
+ * state first and name of contents second.
+ *
+ * \param index1 IN first element
+ * \param index2 IN second element
+ * \return
+ */
+
+int
+CompareParameterFiles(const void *index1, const void *index2)
{
- int fileInx;
- wIndex_t listInx;
- wControlShow( (wControl_p)paramFileL, FALSE );
- listInx = wListGetIndex(paramFileL);
- wListClear( paramFileL );
- for ( fileInx = 0; fileInx < paramFileInfo_da.cnt; fileInx++ ) {
- if (paramFileInfo(fileInx).valid) {
- strcpy( message, ((!paramFileSel) && paramFileInfo(fileInx).contents)?
- paramFileInfo(fileInx).contents:
- paramFileInfo(fileInx).name );
- wListAddValue( paramFileL, message, (paramFileInfo(fileInx).deleted)?mtbox_bm:chkbox_bm, (void*)(intptr_t)fileInx );
- }
- }
- wListSetIndex( paramFileL, listInx );
- wControlShow( (wControl_p)paramFileL, TRUE );
+ paramFileInfo_t paramFile1 = DYNARR_N(paramFileInfo_t, (*sortFiles), *(int*)index1);
+ paramFileInfo_t paramFile2 = DYNARR_N(paramFileInfo_t, (*sortFiles), *(int*)index2);
+
+ if (paramFile2.trackState != paramFile1.trackState) {
+ return (paramFile2.trackState - paramFile1.trackState);
+ } else {
+ return (strcmp(paramFile1.contents, paramFile2.contents));
+ }
}
/**
- * Load the selected parameter files. This is a callback executed when the file selection dialog
- * is closed.
- * Steps:
- * - the parameters are read from file
- * - check is performed to see whether the content is already present, if yes the previously
- * loaded content is invalidated
- * - loaded parameter file is added to list of parameter files
- * - if a parameter file dialog exists the list is updated. It is either rewritten in
- * in case of an invalidated file or the new file is appended
- * - the settings are updated
- * These steps are repeated for every file in list
+ * Create a sorted list of indexes into the parameter file array. That way, the elements
+ * in the array will not be moved. Instead the list is used for the order in which the
+ * list box is populated.
*
- * \param files IN the number of filenames in the fileName array
- * \param fileName IN an array of fully qualified filenames
- * \param data IN ignored
- * \return TRUE on success, FALSE on error
+ * \param cnt IN number of parameter files
+ * \param files IN parameter file array
+ * \param list OUT the ordered list
*/
-EXPORT int LoadParamFile(
- int files,
- char ** fileName,
- void * data )
+void
+SortParamFileList(size_t cnt, dynArr_t *files, int *list)
{
- wIndex_t inx;
- int i = 0;
-
- wBool_t redrawList = FALSE;
-
- assert( fileName != NULL );
- assert( files > 0);
-
- for( i=0; i < files; i++ )
- {
- curContents = curSubContents = NULL;
- curParamFileIndex = paramFileInfo_da.cnt;
- if ( !ReadParams( 0, NULL, fileName[ i ] ) )
- return FALSE;
-
- assert( curContents != NULL );
- // in case the contents is already presented, make invalid
- for ( inx=0; inx<paramFileInfo_da.cnt; inx++ ) {
- if ( paramFileInfo(inx).valid &&
- strcmp( paramFileInfo(inx).contents, curContents ) == 0 ) {
- paramFileInfo(inx).valid = FALSE;
- redrawList = TRUE;
- break;
- }
- }
+ for (size_t i = 0; i < cnt; i++) {
+ list[i] = i;
+ }
- DYNARR_APPEND( paramFileInfo_t, paramFileInfo_da, 10 );
- paramFileInfo(curParamFileIndex).name = MyStrdup( fileName[ i ] );
- paramFileInfo(curParamFileIndex).valid = TRUE;
- paramFileInfo(curParamFileIndex).deletedShadow =
- paramFileInfo(curParamFileIndex).deleted = FALSE;
- paramFileInfo(curParamFileIndex).contents = curContents;
-
- if ( paramFilePG.win ) {
- if ( redrawList ) {
- ParamFileLoadList();
- } else {
- strcpy( message, ((!paramFileSel) && paramFileInfo(curParamFileIndex).contents)?
- paramFileInfo(curParamFileIndex).contents:
- paramFileInfo(curParamFileIndex).name );
- wListAddValue( paramFileL, message, chkbox_bm, (void*)(intptr_t)curParamFileIndex );
- wListSetIndex( paramFileL, wListGetCount(paramFileL)-1 );
- }
- }
+ sortFiles = files;
- wPrefSetString( "Parameter File Map", curContents,
- paramFileInfo(curParamFileIndex).name );
- }
- curParamFileIndex = PARAM_CUSTOM;
- DoChangeNotification( CHANGE_PARAMS );
- return TRUE;
+ qsort((void *)list, (size_t)cnt, sizeof(int), CompareParameterFiles);
+}
+
+
+/**
+ * Reload the listbox showing the current parameter files
+ */
+void ParamFileListLoad(int paramFileCnt, dynArr_t *paramFiles)
+{
+ DynString description;
+ DynStringMalloc(&description, STR_SHORT_SIZE);
+ int *sortedIndex = MyMalloc(sizeof(int)*paramFileCnt);
+ int log_params = LogFindIndex("params");
+
+ SortParamFileList(paramFileCnt, paramFiles, sortedIndex);
+
+ wControlShow((wControl_p)paramFileL, FALSE);
+ wListClear(paramFileL);
+
+ for (int i = 0; i < paramFileCnt; i++) {
+ paramFileInfo_t paramFileInfo = DYNARR_N(paramFileInfo_t, (*paramFiles),
+ sortedIndex[ i ]);
+ if (paramFileInfo.valid) {
+ DynStringClear(&description);
+ DynStringCatCStr(&description,
+ ((!paramFileSel) && paramFileInfo.contents) ?
+ paramFileInfo.contents :
+ paramFileInfo.name);
+
+ wListAddValue(paramFileL,
+ DynStringToCStr(&description),
+ indicatorIcons[ paramFileInfo.favorite ][paramFileInfo.trackState],
+ (void*)(intptr_t)sortedIndex[i]);
+
+ LOG1(log_params, ("ParamFileListLoad: = %s: %d\n", paramFileInfo.contents, paramFileInfo.trackState))
+ }
+ }
+ wControlShow((wControl_p)paramFileL, TRUE);
+ DynStringFree(&description);
+ MyFree(sortedIndex);
}
-static void ParamFileBrowse( void * junk )
+static void ParamFileBrowse(void * junk)
{
- wFilSelect( paramFile_fs, curParamDir );
- return;
+ wMessageSetValue(MESSAGETEXT, "");
+ wFilSelect(paramFile_fs, GetParamFileDir());
+ return;
}
/**
- * Update the action button. If at least one selected file is unloaded, the action button
- * is set to 'Reload'. If all selected files are loaded, the button will be set to 'Unload'.
+ * Update the action buttons.
+ *
+ * If at least one selected file is not a favorite, the favorite button is set to 'SetFavorite'
*
- * \param varname1 IN this is a variable
- * \return
*/
-static void UpdateParamFileButton(
- wIndex_t fileInx )
+static void UpdateParamFileButton(void)
{
- wIndex_t selcnt = wListGetSelectedCount( paramFileL );
- wIndex_t inx, cnt;
-
- // set the default
- wButtonSetLabel( paramFileActionB, _("Unload"));
- paramFilePLs[ I_PRMFILACTION ].context = FALSE;
-
- //nothing selected -> leave
- if( selcnt <= 0 )
- return;
-
- // get the number of items in list
- cnt = wListGetCount( paramFileL );
-
- // walk through the whole list box
- for ( inx=0; inx<cnt; inx++ )
- {
- if ( wListGetItemSelected( (wList_p)paramFileL, inx ))
- {
- // if item is selected, get status
- fileInx = (intptr_t)wListGetItemContext( paramFileL, inx );
-
- if (fileInx < 0 || fileInx >= paramFileInfo_da.cnt)
- return;
- if( paramFileInfo(fileInx).deleted ) {
- // if selected file was unloaded, set button to reload and finish loop
- wButtonSetLabel( paramFileActionB, _("Reload"));
- paramFilePLs[ I_PRMFILACTION ].context = (void *)TRUE;
- break;
- }
- }
- }
+ wIndex_t selcnt = wListGetSelectedCount(paramFileL);
+ wIndex_t inx, cnt;
+ wIndex_t fileInx;
+
+ //nothing selected -> leave
+ if (selcnt <= 0) {
+ return;
+ }
+
+ // set the default
+ paramFilePLs[I_PRMFILEFAVORITE].context = FALSE;
+
+ // get the number of items in list
+ cnt = wListGetCount(paramFileL);
+
+ // walk through the whole list box
+ for (inx=0; inx<cnt; inx++) {
+ if (wListGetItemSelected((wList_p)paramFileL, inx)) {
+ // if item is selected, get status
+ fileInx = (intptr_t)wListGetItemContext(paramFileL, inx);
+
+ if (fileInx < 0 || fileInx >= GetParamFileCount()) {
+ return;
+ }
+ if (!IsParamFileFavorite(fileInx)) {
+ paramFilePLs[I_PRMFILEFAVORITE].context = (void *)TRUE;
+ }
+ }
+ }
}
+/**
+ * Set the property for a parameter file in memory
+ *
+ * \param newState IN new value for property
+ */
+
+void
+UpdateParamFileProperties( bool newState)
+{
+ wIndex_t inx, cnt;
+ wIndex_t fileInx;
+
+ // get the number of items in list
+ cnt = wListGetCount(paramFileL);
+
+ // walk through the whole list box
+ for (inx = 0; inx < cnt; inx++) {
+ if (wListGetItemSelected((wList_p)paramFileL, inx)) {
+ fileInx = (intptr_t)wListGetItemContext(paramFileL, inx);
+ SetParamFileFavorite(fileInx, newState);
+ }
+ }
+ DoChangeNotification(CHANGE_PARAMS);
+}
/**
- * Unload selected files.
+ * Mark selected files as favorite
*
- * \param action IN FALSE = unload, TRUE = reload parameter files
+ * \param favorite IN FALSE = remove, TRUE = set favorite
* \return
*/
-static void ParamFileAction( void * action )
+static void ParamFileFavorite(void * setFavorite)
+{
+ wIndex_t selcnt = wListGetSelectedCount(paramFileL);
+ wMessageSetValue(MESSAGETEXT, "");
+ if (selcnt) {
+ UpdateParamFileProperties(setFavorite?TRUE:FALSE);
+ }
+}
+
+/**
+ * Parameter change selected files
+ *
+ * \param paramFileChange The parameter file change.
+ */
+
+static void
+ParamChangeSelectedFiles(unsigned paramFileChange)
{
- wIndex_t selcnt = wListGetSelectedCount( paramFileL );
wIndex_t inx, cnt;
wIndex_t fileInx;
- unsigned newDeletedState;
-
- if( action )
- newDeletedState = FALSE;
- else
- newDeletedState = TRUE;
-
- //nothing selected -> leave
- if( selcnt <= 0 )
- return;
// get the number of items in list
- cnt = wListGetCount( paramFileL );
-
- // walk through the whole list box
- for ( inx=0; inx<cnt; inx++ )
- {
- if ( wListGetItemSelected( (wList_p)paramFileL, inx ) )
- {
- fileInx = (intptr_t)wListGetItemContext( paramFileL, inx );
-
- // set the desired state
- paramFileInfo(fileInx).deleted = newDeletedState;
-
- strcpy( message, ((!paramFileSel) && paramFileInfo(fileInx).contents)?
- paramFileInfo(fileInx).contents:
- paramFileInfo(fileInx).name );
- wListSetValues( paramFileL, inx, message, (paramFileInfo(fileInx).deleted)?mtbox_bm:chkbox_bm, (void*)(intptr_t)fileInx );
+ cnt = wListGetCount(paramFileL);
+
+ for (inx = 0; inx < cnt; inx++) {
+ if (wListGetItemSelected((wList_p)paramFileL, inx)) {
+ fileInx = (intptr_t)wListGetItemContext(paramFileL, inx);
+
+ switch (paramFileChange) {
+ case PARAMFILE_UNLOAD:
+ if (IsParamFileFavorite(fileInx)) {
+ SetParamFileDeleted(fileInx, TRUE);
+ } else {
+ UnloadParamFile(fileInx);
+ }
+ break;
+ case PARAMFILE_REFRESH:
+ if (IsParamFileFavorite(fileInx) && IsParamFileDeleted(fileInx)) {
+ SetParamFileDeleted(fileInx, FALSE);
+ } else {
+ ReloadParamFile(fileInx);
+ }
+ break;
+ default:
+ AbortProg("Invalid change type %d in ParamChangeSelectedFiles", paramFileChange);
+ }
}
}
- DoChangeNotification( CHANGE_PARAMS );
- UpdateParamFileButton( fileInx );
+ ParamFileListLoad(paramFileInfo_da.cnt, &paramFileInfo_da);
+ DoChangeNotification(CHANGE_PARAMS);
}
/**
- * Select all files in the list and set action button
+ * Refresh selected files.
*
- * \param junk IN ignored
- * \return
+ * \param action IN FALSE = unload, TRUE = reload parameter files
+ * \return
*/
-static void ParamFileSelectAll( void *junk )
+static void ParamRefreshSelectedFiles(void * action)
{
- wListSelectAll( paramFileL );
- UpdateParamFileButton( 0 );
+ wIndex_t selcnt = wListGetSelectedCount(paramFileL);
+
+ //nothing selected -> leave
+ if (selcnt) {
+ DynString reloadMessage;
+ ParamChangeSelectedFiles(PARAMFILE_REFRESH);
+
+ DynStringMalloc(&reloadMessage, 16);
+ if (selcnt > 1) {
+ DynStringPrintf(&reloadMessage, _("%d parameter files reloaded."), selcnt);
+ } else {
+ DynStringCatCStr(&reloadMessage, _("One parameter file reloaded."));
+ }
+ wMessageSetValue(MESSAGETEXT, DynStringToCStr(&reloadMessage));
+ DynStringFree(&reloadMessage);
+ } else {
+ wBeep();
+ }
}
-static void ParamFileOk( void * junk )
+static void ParamUnloadSelectedFiles(void * action)
{
- wIndex_t fileInx;
- for ( fileInx = 0; fileInx < paramFileInfo_da.cnt; fileInx++ )
- paramFileInfo(fileInx).deletedShadow = paramFileInfo(fileInx).deleted;
- wHide( paramFileW );
+ wIndex_t selcnt = wListGetSelectedCount(paramFileL);
+ wMessageSetValue(MESSAGETEXT, "");
+ //nothing selected -> leave
+ if (selcnt) {
+ ParamChangeSelectedFiles(PARAMFILE_UNLOAD);
+ } else {
+ wBeep();
+ }
}
-static void ParamFileCancel( wWin_p junk )
+/**
+ * Select all files in the list and set action button
+ *
+ * \param junk IN ignored
+ * \return
+ */
+
+static void ParamFileSelectAll(void *junk)
{
- wIndex_t fileInx;
- for ( fileInx = 0; fileInx < paramFileInfo_da.cnt; fileInx++ )
- paramFileInfo(fileInx).deleted = paramFileInfo(fileInx).deletedShadow;
- wHide( paramFileW );
- DoChangeNotification( CHANGE_PARAMS );
+ wMessageSetValue(MESSAGETEXT, "");
+ wListSelectAll(paramFileL);
+ UpdateParamFileButton();
}
-
-static void ParamFilesChange( long changes )
+static void ParamFileOk(void * junk)
{
-#ifdef LATER
- int fileInx;
- wIndex_t listInx;
- if ((changes&CHANGE_PARAMS) == 0 ||
- paramFileW == NULL || !wWinIsVisible(paramFileW) )
- return;
- wControlShow( (wControl_p)paramFileL, FALSE );
- listInx = wListGetIndex(paramFileL);
- wListClear( paramFileL );
- for ( fileInx = 0; fileInx < paramFileInfo_da.cnt; fileInx++ ) {
- if (paramFileInfo(fileInx).valid) {
- strcpy( message, ((!paramFileSel) && paramFileInfo(fileInx).contents)?
- paramFileInfo(fileInx).contents:
- paramFileInfo(fileInx).name );
- wListAddValue( paramFileL, message, (paramFileInfo(fileInx).deleted)?mtbox_bm:chkbox_bm, (void*)fileInx );
- }
- }
- wListSetIndex( paramFileL, listInx );
- wControlShow( (wControl_p)paramFileL, TRUE );
-#endif
+ SearchUiOk(junk);
+
+ DoChangeNotification(CHANGE_PARAMS);
+ wHide(paramFileW);
}
static void ParamFileDlgUpdate(
- paramGroup_p pg,
- int inx,
- void * valueP )
+ paramGroup_p pg,
+ int inx,
+ void * valueP)
{
- switch (inx) {
- case I_PRMFILLIST:
- UpdateParamFileButton( (wIndex_t)(long)wListGetItemContext(paramFileL,wListGetIndex(paramFileL)) );
- break;
- case I_PRMFILTOGGLE:
- ParamFileLoadList();
- break;
- }
+ switch (inx) {
+ case I_PRMFILLIST:
+ UpdateParamFileButton();
+ break;
+ case I_PRMFILTOGGLE:
+ DoChangeNotification(CHANGE_PARAMS);
+ break;
+ }
}
-#include "bitmaps/mtbox.xbm"
-#include "bitmaps/chkbox.xbm"
-static void DoParamFiles( void * junk )
+void ParamFilesChange(long changes)
{
- wIndex_t listInx;
- void * data;
-
- if (paramFileW == NULL) {
- const char * dir;
- dir = wPrefGetString( "file", "paramdir" );
- if (dir != NULL)
- strcpy( curParamDir, dir );
- else {
- // in case there is no preference setting, use the installation's param directory as default
- char *str;
- MakeFullpath(&str, libDir, PARAM_SUBDIR, NULL);
- strcpy( curParamDir, str );
- free(str);
- }
- mtbox_bm = wIconCreateBitMap( mtbox_width, mtbox_height, mtbox_bits, drawColorBlack );
- chkbox_bm = wIconCreateBitMap( chkbox_width, chkbox_height, chkbox_bits, drawColorBlack );
- paramFileW = ParamCreateDialog( &paramFilePG, MakeWindowTitle(_("Parameter Files")), _("Ok"), ParamFileOk, ParamFileCancel, TRUE, NULL, 0, ParamFileDlgUpdate );
- paramFile_fs = wFilSelCreate( mainW, FS_LOAD, FS_MULTIPLEFILES, _("Load Parameters"), _("Parameter files|*.xtp"), LoadParamFile, NULL );
- ParamFileLoadList();
- }
- ParamLoadControls( &paramFilePG );
- ParamGroupRecord( &paramFilePG );
- if ((listInx = wListGetValues( paramFileL, NULL, 0, NULL, &data ))>=0)
- UpdateParamFileButton( (wIndex_t)(long)data );
- ParamFileLoadList();
- wShow( paramFileW );
+ if (changes & CHANGE_PARAMS || changes & CHANGE_SCALE) {
+ UpdateParamFileList();
+ if (paramFileW) {
+ ParamFileListLoad(paramFileInfo_da.cnt, &paramFileInfo_da);
+ }
+ }
}
+/**
+ * Create and open the parameter file dialog.
+ *
+ * \param junk
+ */
-EXPORT addButtonCallBack_t ParamFilesInit( void )
+void DoParamFiles(void * junk)
{
- BOOL_T initted = FALSE;
- if (!initted) {
- ParamRegister( &paramFilePG );
- RegisterChangeNotification( ParamFilesChange );
- initted = TRUE;
- }
- return &DoParamFiles;
+ void * data;
+
+ if (paramFileW == NULL) {
+ indicatorIcons[ STANDARD_PARAM ][ PARAMFILE_UNLOADED ] = wIconCreatePixMap(
+ greydot);
+ indicatorIcons[ STANDARD_PARAM ][ PARAMFILE_NOTUSABLE ] = wIconCreatePixMap(
+ reddot);
+ indicatorIcons[ STANDARD_PARAM ][ PARAMFILE_COMPATIBLE ] = wIconCreatePixMap(
+ yellowdot);
+ indicatorIcons[ STANDARD_PARAM ][ PARAMFILE_FIT] = wIconCreatePixMap(greendot);
+ indicatorIcons[ FAVORITE_PARAM ][ PARAMFILE_UNLOADED ] = wIconCreatePixMap(
+ greystar);
+ indicatorIcons[ FAVORITE_PARAM ][ PARAMFILE_NOTUSABLE ] = wIconCreatePixMap(
+ redstar);
+ indicatorIcons[ FAVORITE_PARAM ][ PARAMFILE_COMPATIBLE ] = wIconCreatePixMap(
+ yellowstar);
+ indicatorIcons[ FAVORITE_PARAM ][ PARAMFILE_FIT ] = wIconCreatePixMap(
+ greenstar);
+
+ ParamRegister(&paramFilePG);
+
+ paramFileW = ParamCreateDialog(&paramFilePG,
+ MakeWindowTitle(_("Parameter Files")), _("Ok"), ParamFileOk, NULL,
+ TRUE, NULL, F_RESIZE | F_RECALLSIZE, ParamFileDlgUpdate);
+ paramFile_fs = wFilSelCreate(mainW, FS_LOAD, FS_MULTIPLEFILES,
+ _("Load Parameters"), _("Parameter files (*.xtp)|*.xtp"), LoadParamFile, NULL);
+ }
+ ParamLoadControls(&paramFilePG);
+ ParamGroupRecord(&paramFilePG);
+ if ((wListGetValues(paramFileL, NULL, 0, NULL, &data))>=0) {
+ UpdateParamFileButton();
+ }
+
+ wShow(paramFileW);
}
diff --git a/app/bin/draw.c b/app/bin/draw.c
index 1a0a74f..343ae3f 100644
--- a/app/bin/draw.c
+++ b/app/bin/draw.c
@@ -50,18 +50,32 @@
#include "param.h"
#include "track.h"
#include "utility.h"
+#include "layout.h"
static void DrawRoomWalls( wBool_t );
-EXPORT void DrawMarkers( void );
-static void ConstraintOrig( coOrd *, coOrd );
+static void DrawMarkers( void );
+static void ConstraintOrig( coOrd *, coOrd, int, int );
+static void DoMouse( wAction_t action, coOrd pos );
+static void DDrawPoly(
+ drawCmd_p d,
+ int cnt,
+ coOrd * pts,
+ int * types,
+ wDrawColor color,
+ wDrawWidth width,
+ int fill,
+ int open );
+static void DrawMapBoundingBox( BOOL_T set );
+static void DrawTicks( drawCmd_p d, coOrd size );
-static int log_pan = 0;
+EXPORT int log_pan = 0;
static int log_zoom = 0;
static int log_mouse = 0;
+static int log_redraw = 0;
-static wFontSize_t drawMaxTextFontSize = 100;
+static BOOL_T hideBox = FALSE;
-extern long zoomCorner;
+static wFontSize_t drawMaxTextFontSize = 100;
/****************************************************************************
*
@@ -69,12 +83,6 @@ extern long zoomCorner;
*
*/
-#define INIT_MAIN_SCALE (8.0)
-#define INIT_MAP_SCALE (64.0)
-#define MAX_MAIN_SCALE (256.0)
-#define MIN_MAIN_SCALE (1.0)
-#define MIN_MAIN_MACRO (0.10)
-
// static char FAR message[STR_LONG_SIZE];
EXPORT wPos_t closePixels = 10;
@@ -83,14 +91,31 @@ EXPORT long drawCount;
EXPORT BOOL_T drawEnable = TRUE;
EXPORT long currRedraw = 0;
+EXPORT coOrd panCenter;
+EXPORT coOrd menuPos;
+
EXPORT wDrawColor drawColorBlack;
EXPORT wDrawColor drawColorWhite;
EXPORT wDrawColor drawColorRed;
EXPORT wDrawColor drawColorBlue;
EXPORT wDrawColor drawColorGreen;
EXPORT wDrawColor drawColorAqua;
+EXPORT wDrawColor drawColorPreviewSelected;
+EXPORT wDrawColor drawColorPreviewUnselected;
+EXPORT wDrawColor drawColorPowderedBlue;
EXPORT wDrawColor drawColorPurple;
EXPORT wDrawColor drawColorGold;
+EXPORT wDrawColor drawColorGrey10;
+EXPORT wDrawColor drawColorGrey20;
+EXPORT wDrawColor drawColorGrey30;
+EXPORT wDrawColor drawColorGrey40;
+EXPORT wDrawColor drawColorGrey50;
+EXPORT wDrawColor drawColorGrey60;
+EXPORT wDrawColor drawColorGrey70;
+EXPORT wDrawColor drawColorGrey80;
+EXPORT wDrawColor drawColorGrey90;
+
+
EXPORT DIST_T pixelBins = 80;
@@ -104,6 +129,7 @@ static wPos_t infoHeight;
static wPos_t textHeight;
EXPORT wWin_p mapW;
EXPORT BOOL_T mapVisible;
+EXPORT BOOL_T magneticSnap;
EXPORT wDrawColor markerColor;
EXPORT wDrawColor borderColor;
@@ -148,15 +174,17 @@ static int mousePositionx, mousePositiony; /**< position of mouse pointer */
static int delayUpdate = 1;
-static char xLabel[] = "X : ";
-static char yLabel[] = "Y : ";
-static char zoomLabel[] = "Zoom : ";
+static char xLabel[] = "X: ";
+static char yLabel[] = "Y: ";
+static char zoomLabel[] = "Zoom: ";
static struct {
char * name;
double value;
wMenuRadio_p pdRadio;
wMenuRadio_p btRadio;
+ wMenuRadio_p ctxRadio1;
+ wMenuRadio_p panRadio;
} zoomList[] = {
{ "1:10", 1.0 / 10.0 },
{ "1:9", 1.0 / 9.0 },
@@ -293,9 +321,26 @@ static void DDrawLine(
d->CoOrd2Pix(d,p0,&x0,&y0);
d->CoOrd2Pix(d,p1,&x1,&y1);
drawCount++;
+ wDrawLineType_e lineOpt = wDrawLineSolid;
+ unsigned long NotSolid = DC_NOTSOLIDLINE;
+ unsigned long opt = d->options&NotSolid;
+ if (opt == DC_DASH)
+ lineOpt = wDrawLineDash;
+ else if(opt == DC_DOT)
+ lineOpt = wDrawLineDot;
+ else if(opt == DC_DASHDOT)
+ lineOpt = wDrawLineDashDot;
+ else if (opt == DC_DASHDOTDOT)
+ lineOpt = wDrawLineDashDotDot;
+ else if(opt == DC_CENTER)
+ lineOpt = wDrawLineCenter;
+ else if (opt == DC_PHANTOM)
+ lineOpt = wDrawLinePhantom;
+
if (drawEnable) {
wDrawLine( d->d, x0, y0, x1, y1,
- width, ((d->options&DC_DASH)==0)?wDrawLineSolid:wDrawLineDash,
+ width,
+ lineOpt,
color, (wDrawOpts)d->funcs->options );
}
}
@@ -311,37 +356,78 @@ static void DDrawArc(
wDrawWidth width,
wDrawColor color )
{
- wPos_t x, y;
- ANGLE_T da;
- coOrd p0, p1;
- DIST_T rr;
- int i, cnt;
-
- if (d == &mapD && !mapVisible)
- return;
- rr = (r / d->scale) * d->dpi + 0.5;
- if (rr > wDrawGetMaxRadius(d->d)) {
- da = (maxArcSegStraightLen * 180) / (M_PI * rr);
- cnt = (int)(angle1/da) + 1;
- da = angle1 / cnt;
- PointOnCircle( &p0, p, r, angle0 );
- for ( i=1; i<=cnt; i++ ) {
- angle0 += da;
- PointOnCircle( &p1, p, r, angle0 );
- DrawLine( d, p0, p1, width, color );
- p0 = p1;
- }
- return;
- }
- if (d->angle!=0.0 && angle1 < 360.0)
- angle0 = NormalizeAngle( angle0-d->angle );
- d->CoOrd2Pix(d,p,&x,&y);
- drawCount++;
- if (drawEnable) {
- wDrawArc( d->d, x, y, (wPos_t)(rr), angle0, angle1, drawCenter,
- width, ((d->options&DC_DASH)==0)?wDrawLineSolid:wDrawLineDash,
- color, (wDrawOpts)d->funcs->options );
- }
+ wPos_t x, y;
+ ANGLE_T da;
+ coOrd p0, p1;
+ DIST_T rr;
+ int i, cnt;
+
+ if (d == &mapD && !mapVisible)
+ {
+ return;
+ }
+ rr = (r / d->scale) * d->dpi + 0.5;
+ if (rr > wDrawGetMaxRadius(d->d))
+ {
+ da = (maxArcSegStraightLen * 180) / (M_PI * rr);
+ cnt = (int)(angle1/da) + 1;
+ da = angle1 / cnt;
+ coOrd min,max;
+ min = d->orig;
+ max.x = min.x + d->size.x;
+ max.y = min.y + d->size.y;
+ PointOnCircle(&p0, p, r, angle0);
+ for (i=1; i<=cnt; i++) {
+ angle0 += da;
+ PointOnCircle(&p1, p, r, angle0);
+ if (d->angle == 0.0 &&
+ ((p0.x >= min.x &&
+ p0.x <= max.x &&
+ p0.y >= min.y &&
+ p0.y <= max.y) ||
+ (p1.x >= min.x &&
+ p1.x <= max.x &&
+ p1.y >= min.y &&
+ p1.y <= max.y))) {
+ DrawLine(d, p0, p1, width, color);
+ } else {
+ coOrd clip0 = p0, clip1 = p1;
+ if (ClipLine(&clip0, &clip1, d->orig, d->angle, d->size)) {
+ DrawLine(d, clip0, clip1, width, color);
+ }
+ }
+
+ p0 = p1;
+ }
+ return;
+ }
+ if (d->angle!=0.0 && angle1 < 360.0)
+ {
+ angle0 = NormalizeAngle(angle0-d->angle);
+ }
+ d->CoOrd2Pix(d,p,&x,&y);
+ drawCount++;
+ wDrawLineType_e lineOpt = wDrawLineSolid;
+ unsigned long NotSolid = DC_NOTSOLIDLINE;
+ unsigned long opt = d->options&NotSolid;
+ if (opt == DC_DASH)
+ lineOpt = wDrawLineDash;
+ else if(opt == DC_DOT)
+ lineOpt = wDrawLineDot;
+ else if(opt == DC_DASHDOT)
+ lineOpt = wDrawLineDashDot;
+ else if (opt == DC_DASHDOTDOT)
+ lineOpt = wDrawLineDashDotDot;
+ else if(opt == DC_CENTER)
+ lineOpt = wDrawLineCenter;
+ else if (opt == DC_PHANTOM)
+ lineOpt = wDrawLinePhantom;
+ if (drawEnable)
+ {
+ wDrawArc(d->d, x, y, (wPos_t)(rr), angle0, angle1, drawCenter,
+ width, lineOpt,
+ color, (wDrawOpts)d->funcs->options);
+ }
}
@@ -357,30 +443,76 @@ static void DDrawString(
wPos_t x, y;
if (d == &mapD && !mapVisible)
return;
- fontSize /= d->scale;
d->CoOrd2Pix(d,p,&x,&y);
- wDrawString( d->d, x, y, d->angle-a, s, fp, fontSize, color, (wDrawOpts)d->funcs->options );
+ if ( color == wDrawColorWhite ) {
+ wPos_t width, height, descent, ascent;
+ coOrd pos[4], size;
+ double scale = 1.0;
+ wDrawGetTextSize( &width, &height, &descent, &ascent, d->d, s, fp, fontSize );
+ pos[0] = p;
+ size.x = SCALEX(mainD,width)*scale;
+ size.y = SCALEY(mainD,height)*scale;
+ pos[1].x = p.x+size.x;
+ pos[1].y = p.y;
+ pos[2].x = p.x+size.x;
+ pos[2].y = p.y+size.y;
+ pos[3].x = p.x;
+ pos[3].y = p.y+size.y;
+ Rotate( &pos[1], pos[0], a );
+ Rotate( &pos[2], pos[0], a );
+ Rotate( &pos[3], pos[0], a );
+ DDrawPoly( d, 4, pos, NULL, color, 0, 1, 0 );
+ } else {
+ fontSize /= d->scale;
+ wDrawString( d->d, x, y, d->angle-a, s, fp, fontSize, color, (wDrawOpts)d->funcs->options );
+ }
}
-static void DDrawFillPoly(
+static void DDrawPoly(
drawCmd_p d,
int cnt,
coOrd * pts,
- wDrawColor color )
+ int * types,
+ wDrawColor color,
+ wDrawWidth width,
+ int fill,
+ int open )
{
typedef wPos_t wPos2[2];
static dynArr_t wpts_da;
+ static dynArr_t wpts_type_da;
int inx;
wPos_t x, y;
DYNARR_SET( wPos2, wpts_da, cnt * 2 );
+ DYNARR_SET( int, wpts_type_da, cnt);
#define wpts(N) DYNARR_N( wPos2, wpts_da, N )
+#define wtype(N) DYNARR_N( wPolyLine_e, wpts_type_da, N )
for ( inx=0; inx<cnt; inx++ ) {
d->CoOrd2Pix( d, pts[inx], &x, &y );
wpts(inx)[0] = x;
wpts(inx)[1] = y;
+ if (!types)
+ wtype(inx) = 0;
+ else
+ wtype(inx) = (wPolyLine_e)types[inx];
}
- wDrawFilledPolygon( d->d, &wpts(0), cnt, color, (wDrawOpts)d->funcs->options );
+ wDrawLineType_e lineOpt = wDrawLineSolid;
+ unsigned long NotSolid = DC_NOTSOLIDLINE;
+ unsigned long opt = d->options&NotSolid;
+ if (opt == DC_DASH)
+ lineOpt = wDrawLineDash;
+ else if(opt == DC_DOT)
+ lineOpt = wDrawLineDot;
+ else if(opt == DC_DASHDOT)
+ lineOpt = wDrawLineDashDot;
+ else if (opt == DC_DASHDOTDOT)
+ lineOpt = wDrawLineDashDotDot;
+ else if(opt == DC_CENTER)
+ lineOpt = wDrawLineCenter;
+ else if (opt == DC_PHANTOM)
+ lineOpt = wDrawLinePhantom;
+ wDrawPolygon( d->d, &wpts(0), &wtype(0), cnt, color, width, lineOpt, (wDrawOpts)d->funcs->options, fill, open );
}
@@ -420,24 +552,20 @@ static void DDrawFillCircle(
}
-EXPORT void DrawHilight( drawCmd_p d, coOrd p, coOrd s )
+EXPORT void DrawHilight( drawCmd_p d, coOrd p, coOrd s, BOOL_T add )
{
wPos_t x, y, w, h;
if (d == &mapD && !mapVisible)
return;
-#ifdef LATER
- if (d->options&DC_TEMPSEGS) {
- return;
- }
- if (d->options&DC_PRINT)
- return;
-#endif
w = (wPos_t)((s.x/d->scale)*d->dpi+0.5);
h = (wPos_t)((s.y/d->scale)*d->dpi+0.5);
d->CoOrd2Pix(d,p,&x,&y);
- wDrawFilledRectangle( d->d, x, y, w, h, wDrawColorBlack, wDrawOptTemp );
-}
+ if ( add )
+ wDrawFilledRectangle( d->d, x, y, w, h, drawColorPowderedBlue, wDrawOptTemp|wDrawOptTransparent );
+ else
+ wDrawFilledRectangle( d->d, x, y, w, h, selectedColor, wDrawOptTemp|wDrawOptTransparent );
+}
EXPORT void DrawHilightPolygon( drawCmd_p d, coOrd *p, int cnt )
{
@@ -454,7 +582,10 @@ EXPORT void DrawHilightPolygon( drawCmd_p d, coOrd *p, int cnt )
for (i=0; i<cnt; i++) {
d->CoOrd2Pix(d,p[i],&q[i][0],&q[i][1]);
}
- wDrawFilledPolygon( d->d, q, cnt, wDrawColorBlack, wDrawOptTemp );
+ static wDrawColor color = 0;
+ if ( color == 0 )
+ color = wDrawColorGray( 70 );
+ wDrawPolygon( d->d, q, NULL, cnt, color, 0, 0, wDrawOptTemp|wDrawOptTransparent, 1, 0 );
}
@@ -467,13 +598,14 @@ EXPORT void DrawMultiString(
wDrawColor color,
ANGLE_T a,
coOrd * lo,
- coOrd * hi)
+ coOrd * hi,
+ BOOL_T boxed)
{
char * cp;
char * cp1;
POS_T lineH, lineW;
coOrd size, textsize, posl, orig;
- POS_T descent;
+ POS_T descent, ascent;
char *line;
if (!text || !*text) {
@@ -481,9 +613,9 @@ EXPORT void DrawMultiString(
}
line = malloc(strlen(text) + 1);
- DrawTextSize2( &mainD, "Aqjlp", fp, fs, TRUE, &textsize, &descent);
- POS_T ascent = textsize.y-descent;
- lineH = ascent+descent*1.5;
+ DrawTextSize2( &mainD, "Aqjlp", fp, fs, TRUE, &textsize, &descent, &ascent);
+ //POS_T ascent = textsize.y-descent;
+ lineH = (ascent+descent)*1.0;
size.x = 0.0;
size.y = 0.0;
orig.x = pos.x;
@@ -494,7 +626,7 @@ EXPORT void DrawMultiString(
while (*text != '\0' && *text != '\n')
*cp++ = *text++;
*cp = '\0';
- DrawTextSize2( &mainD, cp1, fp, fs, TRUE, &textsize, &descent);
+ DrawTextSize2( &mainD, cp1, fp, fs, TRUE, &textsize, &descent, &ascent);
lineW = textsize.x;
if (lineW>size.x)
size.x = lineW;
@@ -515,7 +647,25 @@ EXPORT void DrawMultiString(
}
if (hi) {
hi->x = posl.x+size.x;
- hi->y = posl.y+ascent;
+ hi->y = orig.y+ascent;
+ }
+ if (boxed && (d != &mapD)) {
+ int bw=2, bh=2, br=1, bb=1;
+ size.x += bw*d->scale/d->dpi;
+ size.y = fabs(orig.y-posl.y)+bh*d->scale/d->dpi;
+ size.y += descent+ascent;
+ coOrd p[4];
+ p[0] = orig; p[0].x -= (bw-br)*d->scale/d->dpi; p[0].y += (bh-bb)*d->scale/d->dpi+ascent;
+ p[1] = p[0]; p[1].x += size.x;
+ p[2] = p[1]; p[2].y -= size.y;
+ p[3] = p[2]; p[3].x = p[0].x;
+ for (int i=0;i<4;i++) {
+ Rotate( &p[i], orig, a);
+ }
+ DrawLine( d, p[0], p[1], 0, color );
+ DrawLine( d, p[1], p[2], 0, color );
+ DrawLine( d, p[2], p[3], 0, color );
+ DrawLine( d, p[3], p[0], 0, color );
}
free(line);
@@ -532,24 +682,25 @@ EXPORT void DrawBoxedString(
ANGLE_T a )
{
coOrd size, p[4], p0=pos, p1, p2;
- static int bw=5, bh=4, br=2, bb=2;
+ static int bw=2, bh=2, br=1, bb=1;
static double arrowScale = 0.5;
- long options = d->options;
- POS_T descent;
+ unsigned long options = d->options;
+ POS_T descent, ascent;
/*DrawMultiString( d, pos, text, fp, fs, color, a, &lo, &hi );*/
if ( fs < 2*d->scale )
return;
#ifndef WINDOWS
if ( ( d->options & DC_PRINT) != 0 ) {
double scale = ((FLOAT_T)fs)/((FLOAT_T)drawMaxTextFontSize)/72.0;
- wPos_t w, h, d;
- wDrawGetTextSize( &w, &h, &d, mainD.d, text, fp, drawMaxTextFontSize );
+ wPos_t w, h, d, a;
+ wDrawGetTextSize( &w, &h, &d, &a, mainD.d, text, fp, drawMaxTextFontSize );
size.x = w*scale;
size.y = h*scale;
descent = d*scale;
+ ascent = a*scale;
} else
#endif
- DrawTextSize2( &mainD, text, fp, fs, TRUE, &size, &descent );
+ DrawTextSize2( &mainD, text, fp, fs, TRUE, &size, &descent, &ascent );
#ifdef WINDOWS
/*h -= 15;*/
#endif
@@ -561,10 +712,9 @@ EXPORT void DrawBoxedString(
}
size.x += bw*d->scale/d->dpi;
size.y += bh*d->scale/d->dpi;
- size.y += descent;
p[0] = p0;
p[0].x -= br*d->scale/d->dpi;
- p[0].y -= bb*d->scale/d->dpi+descent;
+ p[0].y -= (bb*d->scale/d->dpi+descent);
p[1].y = p[0].y;
p[2].y = p[3].y = p[0].y + size.y;
p[1].x = p[2].x = p[0].x + size.x;
@@ -589,12 +739,12 @@ EXPORT void DrawBoxedString(
DrawString( d, p0, 0.0, text, fp, fs, color );
break;
case BOX_INVERT:
- DrawFillPoly( d, 4, p, color );
+ DrawPoly( d, 4, p, NULL, color, 0, 1, 0);
if ( color != wDrawColorWhite )
- DrawString( d, p0, 0.0, text, fp, fs, wDrawColorWhite );
+ DrawString( d, p0, 0.0, text, fp, fs, wDrawColorGray( 94 ) );
break;
case BOX_BACKGROUND:
- DrawFillPoly( d, 4, p, wDrawColorWhite );
+ DrawPoly( d, 4, p, NULL, wDrawColorWhite, 0, 1, 0 );
DrawString( d, p0, 0.0, text, fp, fs, color );
break;
}
@@ -609,9 +759,10 @@ EXPORT void DrawTextSize2(
wFontSize_t fs,
BOOL_T relative,
coOrd * size,
- POS_T * descent )
+ POS_T * descent,
+ POS_T * ascent)
{
- wPos_t w, h, d;
+ wPos_t w, h, d, a;
FLOAT_T scale = 1.0;
if ( relative )
fs /= dp->scale;
@@ -619,14 +770,16 @@ EXPORT void DrawTextSize2(
scale = ((FLOAT_T)fs)/((FLOAT_T)drawMaxTextFontSize);
fs = drawMaxTextFontSize;
}
- wDrawGetTextSize( &w, &h, &d, dp->d, text, fp, fs );
+ wDrawGetTextSize( &w, &h, &d, &a, dp->d, text, fp, fs );
size->x = SCALEX(mainD,w)*scale;
size->y = SCALEY(mainD,h)*scale;
*descent = SCALEY(mainD,d)*scale;
+ *ascent = SCALEY(mainD,a)*scale;
if ( relative ) {
size->x *= dp->scale;
size->y *= dp->scale;
*descent *= dp->scale;
+ *ascent *=dp->scale;
}
/* printf( "DTS2(\"%s\",%0.3f,%d) = (w%d,h%d,d%d) *%0.3f x%0.3f y%0.3f %0.3f\n", text, fs, relative, w, h, d, scale, size->x, size->y, *descent );*/
}
@@ -639,8 +792,8 @@ EXPORT void DrawTextSize(
BOOL_T relative,
coOrd * size )
{
- POS_T descent;
- DrawTextSize2( dp, text, fp, fs, relative, size, &descent );
+ POS_T descent, ascent;
+ DrawTextSize2( dp, text, fp, fs, relative, size, &descent, &ascent );
}
EXPORT void DrawMultiLineTextSize(
@@ -652,15 +805,14 @@ EXPORT void DrawMultiLineTextSize(
coOrd * size,
coOrd * lastline )
{
- POS_T descent, lineW, lineH;
+ POS_T descent, ascent, lineW, lineH;
coOrd textsize, blocksize;
char *cp;
char *line = malloc(strlen(text) + 1);
- DrawTextSize2( &mainD, "Aqlip", fp, fs, TRUE, &textsize, &descent);
- POS_T ascent = textsize.y-descent;
- lineH = ascent+descent*1.5;
+ DrawTextSize2( &mainD, "Aqlip", fp, fs, TRUE, &textsize, &descent, &ascent);
+ lineH = (ascent+descent)*1.0;
blocksize.x = 0;
blocksize.y = 0;
lastline->x = 0;
@@ -671,17 +823,20 @@ EXPORT void DrawMultiLineTextSize(
*cp++ = *text++;
*cp = '\0';
blocksize.y += lineH;
- DrawTextSize2( &mainD, line, fp, fs, TRUE, &textsize, &descent);
+ DrawTextSize2( &mainD, line, fp, fs, TRUE, &textsize, &descent, &ascent);
lineW = textsize.x;
if (lineW>blocksize.x)
blocksize.x = lineW;
lastline->x = textsize.x;
if (*text =='\n') {
+ blocksize.y += lineH;
lastline->y -= lineH;
lastline->x = 0;
}
- if (*text == '\0')
+ if (*text == '\0') {
+ blocksize.y += textsize.y;
break;
+ }
text++;
}
size->x = blocksize.x;
@@ -760,6 +915,7 @@ static void TempSegString(
DYNARR_APPEND( trkSeg_t, tempSegs_da, 10 );
tempSegs(tempSegs_da.cnt-1).type = SEG_TEXT;
tempSegs(tempSegs_da.cnt-1).color = color;
+ tempSegs(tempSegs_da.cnt-1).u.t.boxed = FALSE;
tempSegs(tempSegs_da.cnt-1).width = 0;
tempSegs(tempSegs_da.cnt-1).u.t.pos = p;
tempSegs(tempSegs_da.cnt-1).u.t.angle = a;
@@ -769,22 +925,33 @@ static void TempSegString(
}
-static void TempSegFillPoly(
+static void TempSegPoly(
drawCmd_p d,
int cnt,
coOrd * pts,
- wDrawColor color )
+ int * types,
+ wDrawColor color,
+ wDrawWidth width,
+ int fill,
+ int open )
{
-#ifdef LATER
- pts is not guaranteed to valid
- DYNARR_APPEND( trkSeg_t, tempSegs_da, 10 );
- tempSegs(tempSegs_da.cnt-1).type = SEG_FILPOLY;
+ DYNARR_APPEND( trkSeg_t, tempSegs_da, 1);
+ tempSegs(tempSegs_da.cnt-1).type = fill?SEG_FILPOLY:SEG_POLY;
tempSegs(tempSegs_da.cnt-1).color = color;
- tempSegs(tempSegs_da.cnt-1).width = 0;
+ if (d->options&DC_SIMPLE)
+ tempSegs(tempSegs_da.cnt-1).width = 0;
+ else
+ tempSegs(tempSegs_da.cnt-1).width = width*d->scale/d->dpi;
+ tempSegs(tempSegs_da.cnt-1).u.p.polyType = open?POLYLINE:FREEFORM;
tempSegs(tempSegs_da.cnt-1).u.p.cnt = cnt;
- tempSegs(tempSegs_da.cnt-1).u.p.pts = pts;
-#endif
- return;
+ tempSegs(tempSegs_da.cnt-1).u.p.orig = zero;
+ tempSegs(tempSegs_da.cnt-1).u.p.angle = 0.0;
+ tempSegs(tempSegs_da.cnt-1).u.p.pts = (pts_t *)MyMalloc(cnt*sizeof(pts_t));
+ for (int i=0;i<=cnt-1;i++) {
+ tempSegs(tempSegs_da.cnt-1).u.p.pts[i].pt = pts[i];
+ tempSegs(tempSegs_da.cnt-1).u.p.pts[i].pt_type = (d->options&DC_SIMPLE)==0?types[i]:wPolyLineStraight;
+ }
+
}
@@ -817,7 +984,7 @@ EXPORT drawFuncs_t screenDrawFuncs = {
DDrawArc,
DDrawString,
DDrawBitMap,
- DDrawFillPoly,
+ DDrawPoly,
DDrawFillCircle };
EXPORT drawFuncs_t tempDrawFuncs = {
@@ -826,7 +993,7 @@ EXPORT drawFuncs_t tempDrawFuncs = {
DDrawArc,
DDrawString,
DDrawBitMap,
- DDrawFillPoly,
+ DDrawPoly,
DDrawFillCircle };
EXPORT drawFuncs_t printDrawFuncs = {
@@ -835,7 +1002,7 @@ EXPORT drawFuncs_t printDrawFuncs = {
DDrawArc,
DDrawString,
NoDrawBitMap,
- DDrawFillPoly,
+ DDrawPoly,
DDrawFillCircle };
EXPORT drawFuncs_t tempSegDrawFuncs = {
@@ -844,17 +1011,17 @@ EXPORT drawFuncs_t tempSegDrawFuncs = {
TempSegArc,
TempSegString,
NoDrawBitMap,
- TempSegFillPoly,
+ TempSegPoly,
TempSegFillCircle };
EXPORT drawCmd_t mainD = {
NULL, &screenDrawFuncs, DC_TICKS, INIT_MAIN_SCALE, 0.0, {0.0,0.0}, {0.0,0.0}, MainPix2CoOrd, MainCoOrd2Pix };
EXPORT drawCmd_t tempD = {
- NULL, &tempDrawFuncs, DC_TICKS|DC_SIMPLE, INIT_MAIN_SCALE, 0.0, {0.0,0.0}, {0.0,0.0}, MainPix2CoOrd, MainCoOrd2Pix };
+ NULL, &tempDrawFuncs, DC_TICKS, INIT_MAIN_SCALE, 0.0, {0.0,0.0}, {0.0,0.0}, MainPix2CoOrd, MainCoOrd2Pix };
EXPORT drawCmd_t mapD = {
- NULL, &screenDrawFuncs, 0, INIT_MAP_SCALE, 0.0, {0.0,0.0}, {96.0,48.0}, Pix2CoOrd, CoOrd2Pix };
+ NULL, &screenDrawFuncs, DC_SIMPLE, INIT_MAP_SCALE, 0.0, {0.0,0.0}, {96.0,48.0}, Pix2CoOrd, CoOrd2Pix };
/*****************************************************************************
@@ -919,7 +1086,7 @@ EXPORT void InitInfoBar( void )
{
wPos_t width, height, y, yb, ym, x, boxH;
wWinGetSize( mainW, &width, &height );
- infoHeight = 3 + wStatusGetHeight( COMBOBOX ) + 3;
+ infoHeight = 2 + wStatusGetHeight( COMBOBOX ) + 2 ;
textHeight = wStatusGetHeight(0L);
y = height - max(infoHeight,textHeight)-10;
@@ -927,8 +1094,8 @@ EXPORT void InitInfoBar( void )
y -= 19; /* Kludge for MSW */
#endif
- infoD.pos_w = GetInfoPosWidth() + 2;
- infoD.scale_w = wStatusGetWidth( "999:1" ) + wStatusGetWidth( zoomLabel ) + 6;
+ infoD.pos_w = GetInfoPosWidth();
+ infoD.scale_w = wStatusGetWidth( "999:1" ) + wStatusGetWidth( zoomLabel );
/* we do not use the count label for the moment */
infoD.count_w = 0;
infoD.info_w = width - 20 - infoD.pos_w*2 - infoD.scale_w - infoD.count_w - 45; // Allow Window to resize down
@@ -941,13 +1108,13 @@ EXPORT void InitInfoBar( void )
x = 2;
infoD.scale_b = wBoxCreate( mainW, x, yb, NULL, wBoxBelow, infoD.scale_w, boxH );
infoD.scale_m = wStatusCreate( mainW, x+info_xm_offset, ym, "infoBarScale", infoD.scale_w-six, zoomLabel);
- x += infoD.scale_w + 10;
+ x += infoD.scale_w + 2;
infoD.posX_b = wBoxCreate( mainW, x, yb, NULL, wBoxBelow, infoD.pos_w, boxH );
infoD.posX_m = wStatusCreate( mainW, x+info_xm_offset, ym, "infoBarPosX", infoD.pos_w-six, xLabel );
- x += infoD.pos_w + 5;
+ x += infoD.pos_w + 2;
infoD.posY_b = wBoxCreate( mainW, x, yb, NULL, wBoxBelow, infoD.pos_w, boxH );
infoD.posY_m = wStatusCreate( mainW, x+info_xm_offset, ym, "infoBarPosY", infoD.pos_w-six, yLabel );
- x += infoD.pos_w + 10;
+ x += infoD.pos_w + 2;
messageOrControlX = x+info_xm_offset; //Remember Position
messageOrControlY = ym;
infoD.info_b = wBoxCreate( mainW, x, yb, NULL, wBoxBelow, infoD.info_w, boxH );
@@ -966,10 +1133,10 @@ static void SetInfoBar( void )
y = height - max(infoHeight,textHeight)-10;
newDistanceFormat = GetDistanceFormat();
if ( newDistanceFormat != oldDistanceFormat ) {
- infoD.pos_w = GetInfoPosWidth() + 2;
- wBoxSetSize( infoD.posX_b, infoD.pos_w, infoHeight-5 );
+ infoD.pos_w = GetInfoPosWidth();
+ wBoxSetSize( infoD.posX_b, infoD.pos_w, infoHeight-3 );
wStatusSetWidth( infoD.posX_m, infoD.pos_w-six );
- wBoxSetSize( infoD.posY_b, infoD.pos_w, infoHeight-5 );
+ wBoxSetSize( infoD.posY_b, infoD.pos_w, infoHeight-3 );
wStatusSetWidth( infoD.posY_m, infoD.pos_w-six );
}
infoD.info_w = width - 20 - infoD.pos_w*2 - infoD.scale_w - infoD.count_w - 40 + 4;
@@ -1028,13 +1195,12 @@ EXPORT void InfoCount( wIndex_t count )
EXPORT void InfoPos( coOrd pos )
{
- DrawMarkers();
sprintf( message, "%s%s", xLabel, FormatDistance(pos.x) );
wStatusSetValue( infoD.posX_m, message );
sprintf( message, "%s%s", yLabel, FormatDistance(pos.y) );
wStatusSetValue( infoD.posY_m, message );
+
oldMarker = pos;
- DrawMarkers();
}
static wControl_p deferSubstituteControls[NUM_INFOCTL+1];
@@ -1071,7 +1237,11 @@ EXPORT void InfoSubstituteControls(
for ( inx=0; controls[inx]; inx++ ) {
curInfoLabelWidth[inx] = wLabelWidth(_(labels[inx]));
x += curInfoLabelWidth[inx];
- int y_this = y + (textHeight/2) - (wControlGetHeight( controls[inx] )/2);
+#ifdef WINDOWS
+ int y_this = y + (infoHeight/2) - (textHeight / 2 );
+#else
+ int y_this = y + (infoHeight / 2) - (wControlGetHeight(controls[inx]) / 2) - 2;
+#endif
wControlSetPos( controls[inx], x, y_this );
x += wControlGetWidth( controls[inx] );
wControlSetLabel( controls[inx], _(labels[inx]) );
@@ -1090,39 +1260,23 @@ EXPORT void SetMessage( char * msg )
}
-static void ChangeMapScale( void )
+static void ChangeMapScale( BOOL_T reset )
{
wPos_t w, h;
wPos_t dw, dh;
FLOAT_T fw, fh;
- wGetDisplaySize( &dw, &dh );
- dw /= 2;
- dh /= 2;
- fw = ((mapD.size.x/mapD.scale)*mapD.dpi + 0.5)+2;
- fh = ((mapD.size.y/mapD.scale)*mapD.dpi + 0.5)+2;
- if (fw > dw || fh > dh) {
- if (fw/dw > fh/dh) {
- mapD.scale = ceil(mapD.size.x*mapD.dpi/dw);
- } else {
- mapD.scale = ceil(mapD.size.y*mapD.dpi/dh);
- }
- mapScale = (long)mapD.scale;
- fw = ((mapD.size.x/mapD.scale)*mapD.dpi + 0.5)+2;
- fh = ((mapD.size.y/mapD.scale)*mapD.dpi + 0.5)+2;
- } else if ( fw < 100.0 && fh < 100.0 ) {
- if (fw > fh) {
- mapD.scale = ceil(mapD.size.x*mapD.dpi/100);
- } else {
- mapD.scale = ceil(mapD.size.y*mapD.dpi/100);
- }
- mapScale = (long)mapD.scale;
- fw = ((mapD.size.x/mapD.scale)*mapD.dpi + 0.5)+2;
- fh = ((mapD.size.y/mapD.scale)*mapD.dpi + 0.5)+2;
- }
+
+ fw = (((mapD.size.x/mapD.scale)*mapD.dpi) + 0.5)+2;
+ fh = (((mapD.size.y/mapD.scale)*mapD.dpi) + 0.5)+2;
+
w = (wPos_t)fw;
h = (wPos_t)fh;
- wWinSetSize( mapW, w+DlgSepLeft+DlgSepRight, h+DlgSepTop+DlgSepBottom );
+ if (reset) {
+ wGetDisplaySize( &dw, &dh );
+ wSetGeometry(mapW, 50, dw, 50, dh, -1, -1, mapD.size.x/mapD.size.y);
+ wWinSetSize( mapW, w+DlgSepLeft+DlgSepRight, h+DlgSepTop+DlgSepBottom);
+ }
wDrawSetSize( mapD.d, w, h, NULL );
}
@@ -1137,12 +1291,10 @@ EXPORT BOOL_T SetRoomSize( coOrd size )
mapD.size.y == size.y )
return TRUE;
mapD.size = size;
+ SetLayoutRoomSize(size);
if ( mapW == NULL)
return TRUE;
- ChangeMapScale();
- ConstraintOrig( &mainD.orig, mainD.size );
- tempD.orig = mainD.orig;
- /*MainRedraw();*/
+ ChangeMapScale(TRUE);
wPrefSetFloat( "draw", "roomsizeX", mapD.size.x );
wPrefSetFloat( "draw", "roomsizeY", mapD.size.y );
return TRUE;
@@ -1155,23 +1307,21 @@ EXPORT void GetRoomSize( coOrd * froomSize )
}
-EXPORT void MapRedraw( void )
+static void MapRedraw()
{
if (inPlaybackQuit)
return;
-#ifdef VERBOSE
-lprintf("MapRedraw\n");
-#endif
+ static int cMR = 0;
+ LOG( log_redraw, 2, ( "MapRedraw: %d\n", cMR++ ) );
if (!mapVisible)
return;
-
if (delayUpdate)
wDrawDelayUpdate( mapD.d, TRUE );
- wSetCursor( wCursorWait );
+ //wSetCursor( mapD.d, wCursorWait );
wDrawClear( mapD.d );
DrawTracks( &mapD, mapD.scale, mapD.orig, mapD.size );
DrawMapBoundingBox( TRUE );
- wSetCursor( wCursorNormal );
+ //wSetCursor( mapD.d, defaultCursor );
wDrawDelayUpdate( mapD.d, FALSE );
}
@@ -1179,7 +1329,7 @@ lprintf("MapRedraw\n");
static void MapResize( void )
{
mapD.scale = mapScale;
- ChangeMapScale();
+ ChangeMapScale(TRUE);
MapRedraw();
}
@@ -1222,25 +1372,107 @@ EXPORT void SetMainSize( void )
tempD.size = mainD.size;
}
+// Hack to switch between TempRedraw and MainRedraw
+extern wBool_t wDrawDoTempDraw;
+/* Update temp_surface after executing a command
+ */
+EXPORT void TempRedraw( void ) {
+
+ static int cTR = 0;
+ LOG( log_redraw, 2, ( "TempRedraw: %d\n", cTR++ ) );
+if (wDrawDoTempDraw == FALSE) {
+ // Remove this after windows supports GTK
+ MainRedraw(); // TempRedraw - windows
+} else {
+ wDrawDelayUpdate( tempD.d, TRUE );
+ wDrawSetTempMode( tempD.d, TRUE );
+ DrawMarkers();
+ DoCurCommand( C_REDRAW, zero );
+ RulerRedraw( FALSE );
+ RedrawPlaybackCursor(); //If in playback
+ wDrawSetTempMode( tempD.d, FALSE );
+ wDrawDelayUpdate( tempD.d, FALSE );
+}
+}
+
+/*
+* Redraw contents on main window
+*/
EXPORT void MainRedraw( void )
{
+ coOrd orig, size;
+
+ static int cMR = 0;
+ LOG( log_redraw, 1, ( "MainRedraw: %d\n", cMR++ ) );
+ if (delayUpdate)
+ wDrawDelayUpdate( mainD.d, TRUE );
+
+ wDrawClear( mainD.d );
+
+ //mainD.d->option = 0;
+ //mainD.options = 0;
+ mainD.funcs->options = 0; //Force MainD back from Temp
+
+ orig = mainD.orig;
+ size = mainD.size;
+ orig.x -= LBORDER/mainD.dpi*mainD.scale;
+ orig.y -= BBORDER/mainD.dpi*mainD.scale;
+ wPos_t back_x,back_y;
+ coOrd back_pos = GetLayoutBackGroundPos();
+ back_x = (wPos_t)((back_pos.x-orig.x)/mainD.scale*mainD.dpi);
+ back_y = (wPos_t)((back_pos.y-orig.y)/mainD.scale*mainD.dpi);
+ wPos_t back_width = (wPos_t)(GetLayoutBackGroundSize()/mainD.scale*mainD.dpi);
+
+ DrawRoomWalls( TRUE );
+ if (GetLayoutBackGroundScreen() < 100.0 && GetLayoutBackGroundVisible()) {
+ wDrawShowBackground( mainD.d, back_x, back_y, back_width, GetLayoutBackGroundAngle(), GetLayoutBackGroundScreen());
+ }
+ orig = mainD.orig;
+ size = mainD.size;
+ orig.x -= RBORDER/mainD.dpi*mainD.scale;
+ orig.y -= BBORDER/mainD.dpi*mainD.scale;
+ size.x += (RBORDER+LBORDER)/mainD.dpi*mainD.scale;
+ size.y += (BBORDER+TBORDER)/mainD.dpi*mainD.scale;
+ DrawTracks( &mainD, mainD.scale, orig, size );
+
+ DrawRoomWalls( FALSE );
+ currRedraw++;
+ DrawSnapGrid( &mainD, mapD.size, TRUE );
+
+ //wSetCursor( mainD.d, defaultCursor );
+ InfoScale();
+ // The remainder is from TempRedraw
+ wDrawSetTempMode( tempD.d, TRUE );
+ DrawMarkers();
+ DoCurCommand( C_REDRAW, zero );
+ RulerRedraw( FALSE );
+ RedrawPlaybackCursor(); //If in playback
+ wDrawSetTempMode( tempD.d, FALSE );
+ wDrawDelayUpdate( mainD.d, FALSE );
+}
+
+/*
+* Layout main window in response to Pan/Zoom
+*
+* \param bRedraw Redraw mainD
+* \param bNoBorder Don't allow mainD.orig to go negative
+*/
+EXPORT void MainLayout(
+ wBool_t bRedraw,
+ wBool_t bNoBorder )
+{
#ifdef LATER
wPos_t ww, hh;
DIST_T w, h;
#endif
- coOrd orig, size;
DIST_T t1;
if (inPlaybackQuit)
return;
-#ifdef VERBOSE
-lprintf("mainRedraw\n");
-#endif
+ static int cML = 0;
+ LOG( log_redraw, 1, ( "MainLayout: %d\n", cML++ ) );
- wSetCursor( wCursorWait );
- if (delayUpdate)
- wDrawDelayUpdate( mainD.d, TRUE );
#ifdef LATER
wDrawGetSize( mainD.d, &ww, &hh );
w = ww/mainD.dpi;
@@ -1269,25 +1501,32 @@ lprintf("mainRedraw\n");
pixelBins /= 2.0;
}
}
- ConstraintOrig( &mainD.orig, mainD.size );
+ ConstraintOrig( &mainD.orig, mainD.size, bNoBorder, FALSE );
tempD.orig = mainD.orig;
- wDrawClear( mainD.d );
- currRedraw++;
- DrawSnapGrid( &tempD, mapD.size, TRUE );
- DrawRoomWalls( TRUE );
- orig = mainD.orig;
- size = mainD.size;
- orig.x -= RBORDER/mainD.dpi*mainD.scale;
- orig.y -= BBORDER/mainD.dpi*mainD.scale;
- size.x += (RBORDER+LBORDER)/mainD.dpi*mainD.scale;
- size.y += (BBORDER+TBORDER)/mainD.dpi*mainD.scale;
- DrawTracks( &mainD, mainD.scale, orig, size );
- RulerRedraw( FALSE );
- DoCurCommand( C_REDRAW, zero );
- DrawMarkers();
- wSetCursor( wCursorNormal );
- InfoScale();
- wDrawDelayUpdate( mainD.d, FALSE );
+ tempD.size = mainD.size;
+ mainCenter.x = mainD.orig.x + mainD.size.x/2.0;
+ mainCenter.y = mainD.orig.y + mainD.size.y/2.0;
+ DrawMapBoundingBox( TRUE );
+
+ if ( bRedraw )
+ MainRedraw();
+
+ if ( bRedraw && wDrawDoTempDraw ) { // Temporary until mswlib supports TempDraw
+ wAction_t action = wActionMove;
+ coOrd pos;
+ if ( mouseState == mouseLeft )
+ action = wActionLDrag;
+ if ( mouseState == mouseRight )
+ action = wActionRDrag;
+ mainD.Pix2CoOrd( &mainD, mousePositionx, mousePositiony, &pos );
+ // Prevent recursion if curCommand calls MainLayout when action if a Move or Drag
+ // ie CmdPan
+ static int iRecursion = 0;
+ iRecursion++;
+ if ( iRecursion == 1 )
+ DoMouse( action, pos );
+ iRecursion--;
+ }
}
/**
@@ -1305,7 +1544,6 @@ void MainProc( wWin_p win, winProcEvent e, void * refresh, void * data )
case wResize_e:
if (mainD.d == NULL)
return;
- if (refresh) DrawMapBoundingBox( FALSE );
wWinGetSize( mainW, &width, &height );
LayoutToolBar(refresh);
height -= (toolbarHeight+max(infoHeight,textHeight)+10);
@@ -1313,13 +1551,11 @@ void MainProc( wWin_p win, winProcEvent e, void * refresh, void * data )
wDrawSetSize( mainD.d, width-20, height, refresh );
wControlSetPos( (wControl_p)mainD.d, 0, toolbarHeight );
SetMainSize();
- ConstraintOrig( &mainD.orig, mainD.size );
- tempD.orig = mainD.orig;
SetInfoBar();
- if (!refresh) {
- MainRedraw();
- MapRedraw();
- } else DrawMapBoundingBox( TRUE );
+ panCenter.x = mainD.orig.x + mainD.size.x/2.0;
+ panCenter.y = mainD.orig.y + mainD.size.y/2.0;
+ LOG( log_pan, 2, ( "PanCenter:%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ MainLayout( !refresh, TRUE ); // MainProc: wResize_e event
wPrefSetInteger( "draw", "mainwidth", width );
wPrefSetInteger( "draw", "mainheight", height );
} else DrawMapBoundingBox( TRUE );
@@ -1363,7 +1599,7 @@ EXPORT void DoRedraw( void )
#endif
#endif
MapRedraw();
- MainRedraw();
+ MainRedraw(); // DoRedraw
#ifdef WINDOWS
#ifndef WIN32
if (profRedraw)
@@ -1381,31 +1617,54 @@ EXPORT void DoRedraw( void )
*/
-static void DrawRoomWalls( wBool_t t )
+static void DrawRoomWalls( wBool_t drawBackground )
{
- coOrd p01, p11, p10;
+ coOrd p00, p01, p11, p10;
+ int p0,p1,p2,p3;
if (mainD.d == NULL)
return;
- DrawTicks( &mainD, mapD.size );
+ if (drawBackground) {
+ mainD.CoOrd2Pix(&mainD,mainD.orig,&p0,&p1);
+ coOrd end;
+ end.x = mainD.orig.x + mainD.size.x;
+ end.y = mainD.orig.y + mainD.size.y;
+ mainD.CoOrd2Pix(&mainD,end,&p2,&p3);
+ p2 -= p0;
+ p3 -= p1;
+ wDrawFilledRectangle( mainD.d, p0, p1, p2, p3, drawColorGrey80, 0 );
+
+ mainD.CoOrd2Pix(&mainD,zero,&p0,&p1);
+ mainD.CoOrd2Pix(&mainD,mapD.size,&p2,&p3);
+ p2 -= p0;
+ p3 -= p1;
+ wDrawFilledRectangle( mainD.d, p0, p1, p2, p3, drawColorWhite, 0 );
+
+ } else {
+
+ DrawTicks( &mainD, mapD.size );
- p01.x = p10.y = 0.0;
- p11.x = p10.x = mapD.size.x;
- p01.y = p11.y = mapD.size.y;
- DrawLine( &mainD, p01, p11, 3, t?borderColor:wDrawColorWhite );
- DrawLine( &mainD, p11, p10, 3, t?borderColor:wDrawColorWhite );
+ p00.x = 0.0; p00.y = 0.0;
+ p01.x = p10.y = 0.0;
+ p11.x = p10.x = mapD.size.x;
+ p01.y = p11.y = mapD.size.y;
+ DrawLine( &mainD, p01, p11, 3, borderColor );
+ DrawLine( &mainD, p11, p10, 3, borderColor );
+ DrawLine( &mainD, p00, p01, 3, borderColor );
+ DrawLine( &mainD, p00, p10, 3, borderColor );
+ }
}
-EXPORT void DrawMarkers( void )
+static void DrawMarkers( void )
{
wPos_t x, y;
mainD.CoOrd2Pix(&mainD,oldMarker,&x,&y);
- wDrawLine( mainD.d, 0, y, (wPos_t)LBORDER, y,
+ wDrawLine( tempD.d, 0, y, (wPos_t)LBORDER, y,
0, wDrawLineSolid, markerColor, wDrawOptTemp );
- wDrawLine( mainD.d, x, 0, x, (wPos_t)BBORDER,
+ wDrawLine( tempD.d, x, 0, x, (wPos_t)BBORDER,
0, wDrawLineSolid, markerColor, wDrawOptTemp );
}
@@ -1433,9 +1692,9 @@ EXPORT void DrawRuler(
wFontSize_t fs;
long mm, mm0, mm1, power;
wPos_t x0, y0, x1, y1;
- long dxn, dyn;
- static int lengths[8] = {
- 0, 2, 4, 2, 6, 2, 4, 2 };
+
+ static double lengths[16] = {
+ 0, 2.0, 4.0, 2.0, 6.0, 2.0, 4.0, 2.0, 8.0, 2.0, 4.0, 2.0, 6.0, 2.0, 4.0, 2.0 };
int fraction, incr, firstFraction, lastFraction;
int majorLength;
coOrd p0, p1;
@@ -1445,17 +1704,8 @@ EXPORT void DrawRuler(
Translate( &pos0, pos0, a, offset );
Translate( &pos1, pos1, a, offset );
aa = NormalizeAngle(a+(tickSide==0?+90:-90));
- if (aa > 90.0 && aa < 270.0) {
-#ifdef WINDOWS
- dyn = -17;
-#else
- dyn = -12;
-#endif
- } else {
- dyn = +3;
- }
sin_aa = sin(D2R(aa));
- dxn = (long)floor(10.0*sin_aa);
+
end = FindDistance( pos0, pos1 );
if (end < 0.1)
return;
@@ -1479,7 +1729,7 @@ EXPORT void DrawRuler(
if (units == UNITS_METRIC) {
mm0 = (int)ceil(start*25.4-0.5);
mm1 = (int)floor(end*25.4+0.5);
- len = 2;
+ len = 5;
if (d->scale <= 1) {
power = 1;
} else if (d->scale <= 8) {
@@ -1501,7 +1751,7 @@ EXPORT void DrawRuler(
wDrawLine( d->d, x0, y0, x1, y1,
0, wDrawLineSolid, color, (wDrawOpts)d->funcs->options );
- if (!number)
+ if (!number || (d->scale>40 && mm != 0.0))
continue;
if ( (power>=1000) ||
(d->scale<=8 && power>=100) ||
@@ -1509,15 +1759,21 @@ EXPORT void DrawRuler(
if (mm%100 != 0) {
sprintf(message, "%ld", mm/10%10 );
fs = rulerFontSize*2/3;
- p0.x = p1.x+4*dxn/10*d->scale/mainD.dpi;
- p0.y = p1.y+dyn*d->scale/mainD.dpi;
+ Translate( &p0, p0, aa, (fs/2.0+len)*d->scale/mainD.dpi );
+ Translate( &p0, p0, 225, fs*d->scale/mainD.dpi );
+ //p0.x = p1.x+4*dxn/10*d->scale/mainD.dpi;
+ //p0.y = p1.y+dyn*d->scale/mainD.dpi;
} else {
sprintf(message, "%0.1f", mm/1000.0 );
fs = rulerFontSize;
- p0.x = p0.x+((-(LBORDER-2)/2)+((LBORDER-2)/2+2)*sin_aa)*d->scale/mainD.dpi;
- p0.y = p1.y+dyn*d->scale/mainD.dpi;
+ Translate( &p0, p0, aa, (fs/2.0+len)*d->scale/mainD.dpi );
+ Translate( &p0, p0, 225, 1.5*fs*d->scale/mainD.dpi );
+ //p0.x = p0.x+((-(LBORDER-2)/2)+((LBORDER-2)/2+2)*sin_aa)*d->scale/mainD.dpi;
+ //p0.y = p1.y+dyn*d->scale/mainD.dpi;
}
d->CoOrd2Pix( d, p0, &x0, &y0 );
+ if (x0<0) x0 = 0;
+ if (y0<0) y0 = 0;
wDrawString( d->d, x0, y0, d->angle, message, rulerFp,
fs, color, (wDrawOpts)d->funcs->options );
}
@@ -1526,41 +1782,50 @@ EXPORT void DrawRuler(
}
} else {
if (d->scale <= 1)
- incr = 1;
- else if (d->scale <= 2)
- incr = 2;
- else if (d->scale <= 4)
- incr = 4;
+ incr = 1; //16ths
+ else if (d->scale <= 3)
+ incr = 2; //8ths
+ else if (d->scale <= 5)
+ incr = 4; //4ths
+ else if (d->scale <= 7)
+ incr = 8; //1/2ths
+ else if (d->scale <= 48)
+ incr = 32;
else
- incr = 8;
+ incr = 16; //Inches
lastInch = (int)floor(end);
- lastFraction = 7;
+ lastFraction = 16;
inch = (int)ceil(start);
- firstFraction = (((int)((inch-start)*8/*+1*/)) / incr) * incr;
+ firstFraction = (((int)((inch-start)*16/*+1*/)) / incr) * incr;
if (firstFraction > 0) {
inch--;
- firstFraction = 8 - firstFraction;
+ firstFraction = 16 - firstFraction;
}
for ( ; inch<=lastInch; inch++){
if (inch % 12 == 0) {
- lengths[0] = 10;
+ lengths[0] = 12;
majorLength = 16;
digit = (int)(inch/12);
fs = rulerFontSize;
quote = '\'';
} else if (d->scale <= 8) {
- lengths[0] = 8;
- majorLength = 13;
+ lengths[0] = 12;
+ majorLength = 16;
digit = (int)(inch%12);
fs = rulerFontSize*(2.0/3.0);
quote = '"';
+ } else if (d->scale <= 16){
+ lengths[0] = 10;
+ majorLength = 12;
+ digit = (int)(inch%12);
+ fs = rulerFontSize*(1.0/2.0);
} else {
continue;
}
if (inch == lastInch)
- lastFraction = (((int)((end - lastInch)*8)) / incr) * incr;
+ lastFraction = (((int)((end - lastInch)*16)) / incr) * incr;
for ( fraction = firstFraction; fraction<=lastFraction; fraction += incr ) {
- Translate( &p0, orig, a, inch+fraction/8.0 );
+ Translate( &p0, orig, a, inch+fraction/16.0 );
Translate( &p1, p0, aa, lengths[fraction]*d->scale/72.0 );
d->CoOrd2Pix( d, p0, &x0, &y0 );
d->CoOrd2Pix( d, p1, &x1, &y1 );
@@ -1571,13 +1836,17 @@ EXPORT void DrawRuler(
/* KLUDGE: can't draw invertable strings on windows */
if ( (opts&DO_TEMP) == 0)
#endif
- if ( fraction == 0 && number == TRUE) {
- if (inch % 12 == 0 || d->scale <= 2) {
- Translate( &p0, p0, aa, majorLength*d->scale/72.0 );
- Translate( &p0, p0, 225, 11*d->scale/72.0 );
- sprintf(message, "%d%c", digit, quote );
- d->CoOrd2Pix( d, p0, &x0, &y0 );
- wDrawString( d->d, x0, y0, d->angle, message, rulerFp, fs, color, (wDrawOpts)d->funcs->options );
+ if (fraction == 0) {
+ if ( (number == TRUE && d->scale<40) || (digit==0)) {
+ if (inch % 12 == 0 || d->scale <= 2) {
+ Translate( &p0, p0, aa, majorLength*d->scale/mainD.dpi );
+ Translate( &p0, p0, 225, fs*d->scale/mainD.dpi );
+ sprintf(message, "%d%c", digit, quote );
+ d->CoOrd2Pix( d, p0, &x0, &y0 );
+ if (x0<0) x0 = 0;
+ if (y0<0) y0 = 0;
+ wDrawString( d->d, x0, y0, d->angle, message, rulerFp, fs, color, (wDrawOpts)d->funcs->options );
+ }
}
}
firstFraction = 0;
@@ -1587,28 +1856,49 @@ EXPORT void DrawRuler(
}
-EXPORT void DrawTicks( drawCmd_p d, coOrd size )
+static void DrawTicks( drawCmd_p d, coOrd size )
{
coOrd p0, p1;
DIST_T offset;
offset = 0.0;
- if ( d->orig.x<0.0 )
- offset = d->orig.x;
- p0.x = 0.0/*d->orig.x*/; p1.x = size.x;
- p0.y = p1.y = /*max(d->orig.y,0.0)*/ d->orig.y;
+ double blank_zone = 40*d->scale/72.0;
+
+ if ( d->orig.x<0.0-blank_zone ) {
+ p0.y = 0.0; p1.y = mapD.size.y;
+ p0.x = p1.x = 0.0;
+ DrawRuler( d, p0, p1, offset, FALSE, TRUE, borderColor );
+ }
+ if (d->orig.x+d->size.x>mapD.size.x+blank_zone) {
+ p0.y = 0.0; p1.y = mapD.size.y;
+ p0.x = p1.x = mapD.size.x;
+ DrawRuler( d, p0, p1, offset, FALSE, FALSE, borderColor );
+ }
+ p0.x = 0.0; p1.x = d->size.x;
+ offset = d->orig.x;
+ p0.y = p1.y = d->orig.y;
DrawRuler( d, p0, p1, offset, TRUE, FALSE, borderColor );
- p0.y = p1.y = min(d->orig.y + d->size.y, size.y);
+ p0.y = p1.y = d->size.y+d->orig.y;
DrawRuler( d, p0, p1, offset, FALSE, TRUE, borderColor );
+
offset = 0.0;
- if ( d->orig.y<0.0 )
- offset = d->orig.y;
- p0.y = 0.0/*d->orig.y*/; p1.y = max(size.y,0.0);
+ if ( d->orig.y<0.0-blank_zone) {
+ p0.x = 0.0; p1.x = mapD.size.x;
+ p0.y = p1.y = 0.0;
+ DrawRuler( d, p0, p1, offset, FALSE, FALSE, borderColor );
+ }
+ if (d->orig.y+d->size.y>mapD.size.y+blank_zone) {
+ p0.x = 0.0; p1.x = mapD.size.x;
+ p0.y = p1.y = mapD.size.y;
+ DrawRuler( d, p0, p1, offset, FALSE, TRUE, borderColor );
+ }
+ p0.y = 0.0; p1.y = d->size.y;
+ offset = d->orig.y;
p0.x = p1.x = d->orig.x;
DrawRuler( d, p0, p1, offset, TRUE, TRUE, borderColor );
- p0.x = p1.x = min(d->orig.x + d->size.x, size.x);
+ p0.x = p1.x = d->size.x+d->orig.x;
DrawRuler( d, p0, p1, offset, FALSE, FALSE, borderColor );
}
@@ -1621,54 +1911,74 @@ EXPORT void DrawTicks( drawCmd_p d, coOrd size )
EXPORT coOrd mainCenter;
-EXPORT void DrawMapBoundingBox( BOOL_T set )
+static void DrawMapBoundingBox( BOOL_T set )
{
if (mainD.d == NULL || mapD.d == NULL)
return;
- DrawHilight( &mapD, mainD.orig, mainD.size );
+ wDrawSetTempMode( mapD.d, TRUE );
+ DrawHilight( &mapD, mainD.orig, mainD.size, TRUE );
+ wDrawSetTempMode( mapD.d, FALSE );
}
-static void ConstraintOrig( coOrd * orig, coOrd size )
+static void ConstraintOrig( coOrd * orig, coOrd size, wBool_t bNoBorder, wBool_t round )
{
LOG( log_pan, 2, ( "ConstraintOrig [ %0.3f, %0.3f ] RoomSize(%0.3f %0.3f), WxH=%0.3fx%0.3f",
orig->x, orig->y, mapD.size.x, mapD.size.y,
size.x, size.y ) )
- if (orig->x+size.x > mapD.size.x ) {
- orig->x = mapD.size.x-size.x;
- orig->x += (units==UNITS_ENGLISH?1.0:(1.0/2.54));
+ coOrd bound = zero;
+
+ if ( !bNoBorder ) {
+ bound.x = size.x/2;
+ bound.y = size.y/2;
}
- if (orig->x < 0)
- orig->x = 0;
- if (orig->y+size.y > mapD.size.y ) {
- orig->y = mapD.size.y-size.y;
- orig->y += (units==UNITS_ENGLISH?1.0:1.0/2.54);
+
+
+ if (orig->x > 0.0) {
+ if ((orig->x+size.x) > (mapD.size.x+bound.x)) {
+ orig->x = mapD.size.x-size.x+bound.x;
+ //orig->x += (units==UNITS_ENGLISH?1.0:(1.0/2.54));
+ }
}
- if (orig->y < 0)
- orig->y = 0;
- if (mainD.scale >= 1.0) {
- if (units == UNITS_ENGLISH) {
- orig->x = floor(orig->x*4)/4; //>1:1 = 1/4 inch
- orig->y = floor(orig->y*4)/4;
- } else {
- orig->x = floor(orig->x*2.54*2)/(2.54*2); //>1:1 = 0.5 cm
- orig->y = floor(orig->y*2.54*2)/(2.54*2);
+ if (orig->x < (0-bound.x))
+ orig->x = 0-bound.x;
+
+ if (orig->y > 0.0) {
+ if ((orig->y+size.y) > (mapD.size.y+bound.y) ) {
+ orig->y = mapD.size.y-size.y+bound.y;
+ //orig->y += (units==UNITS_ENGLISH?1.0:1.0/2.54);
+
}
- } else {
- if (units == UNITS_ENGLISH) {
- orig->x = floor(orig->x*64)/64; //<1:1 = 1/64 inch
- orig->y = floor(orig->y*64)/64;
+ }
+
+ if (orig->y < (0-bound.y))
+ orig->y = 0-bound.y;
+
+ if (round) {
+ if (mainD.scale >= 1.0) {
+ if (units == UNITS_ENGLISH) {
+ orig->x = floor(orig->x*4)/4; //>1:1 = 1/4 inch
+ orig->y = floor(orig->y*4)/4;
+ } else {
+ orig->x = floor(orig->x*2.54*2)/(2.54*2); //>1:1 = 0.5 cm
+ orig->y = floor(orig->y*2.54*2)/(2.54*2);
+ }
} else {
- orig->x = floor(orig->x*25.4*2)/(25.4*2); //>1:1 = 0.5 mm
- orig->y = floor(orig->y*25.4*2)/(25.4*2);
+ if (units == UNITS_ENGLISH) {
+ orig->x = floor(orig->x*64)/64; //<1:1 = 1/64 inch
+ orig->y = floor(orig->y*64)/64;
+ } else {
+ orig->x = floor(orig->x*25.4*2)/(25.4*2); //>1:1 = 0.5 mm
+ orig->y = floor(orig->y*25.4*2)/(25.4*2);
+ }
}
}
- orig->x = (long)(orig->x*pixelBins+0.5)/pixelBins;
- orig->y = (long)(orig->y*pixelBins+0.5)/pixelBins;
-LOG( log_pan, 2, ( " = [ %0.3f %0.3f ]\n", orig->y, orig->y ) )
+ //orig->x = (long)(orig->x*pixelBins+0.5)/pixelBins;
+ //orig->y = (long)(orig->y*pixelBins+0.5)/pixelBins;
+ LOG( log_pan, 2, ( " = [ %0.3f %0.3f ]\n", orig->y, orig->y ) )
}
/**
@@ -1676,18 +1986,29 @@ LOG( log_pan, 2, ( " = [ %0.3f %0.3f ]\n", orig->y, orig->y ) )
*
* \param IN zoomM Menu to which radio button is added
* \param IN zoomSubM Second menu to which radio button is added, ignored if NULL
+ * \param IN ctxMenu1
+ * \param IN ctxMenu2
*
*/
-EXPORT void InitCmdZoom( wMenu_p zoomM, wMenu_p zoomSubM )
+EXPORT void InitCmdZoom( wMenu_p zoomM, wMenu_p zoomSubM, wMenu_p ctxMenu1, wMenu_p panMenu )
{
int inx;
for ( inx=0; inx<sizeof zoomList/sizeof zoomList[0]; inx++ ) {
- if( zoomList[ inx ].value >= 1.0 ) {
- zoomList[inx].btRadio = wMenuRadioCreate( zoomM, "cmdZoom", zoomList[inx].name, 0, (wMenuCallBack_p)DoZoom, (void *)(&(zoomList[inx].value)));
+ if( (zoomList[ inx ].value >= 1.0 && zoomList[ inx ].value<=10 ) ||
+ (ceil(log2(zoomList[ inx ].value)) == floor(log2(zoomList[ inx ].value))))
+ {
+ if (zoomM)
+ zoomList[inx].btRadio = wMenuRadioCreate( zoomM, "cmdZoom", zoomList[inx].name, 0, (wMenuCallBack_p)DoZoom, (void *)(&(zoomList[inx].value)));
if( zoomSubM )
zoomList[inx].pdRadio = wMenuRadioCreate( zoomSubM, "cmdZoom", zoomList[inx].name, 0, (wMenuCallBack_p)DoZoom, (void *)(&(zoomList[inx].value)));
+ if (panMenu)
+ zoomList[inx].panRadio = wMenuRadioCreate( panMenu, "cmdZoom", zoomList[inx].name, 0, (wMenuCallBack_p)DoZoom, (void *)(&(zoomList[inx].value)));
+ }
+ if ((zoomList[inx].value >=1.0 && zoomList[inx].value <= 10.0) || (ceil(log2(zoomList[ inx ].value)) == floor(log2(zoomList[ inx ].value)))) {
+ if (ctxMenu1)
+ zoomList[inx].ctxRadio1 = wMenuRadioCreate( ctxMenu1, "cmdZoom", zoomList[inx].name, 0, (wMenuCallBack_p)DoZoom, (void *)(&(zoomList[inx].value)));
}
}
}
@@ -1706,11 +2027,14 @@ static void SetZoomRadio( DIST_T scale )
for ( inx=0; inx<sizeof zoomList/sizeof zoomList[0]; inx++ ) {
if( curScale == zoomList[inx].value ) {
-
- wMenuRadioSetActive( zoomList[inx].btRadio );
+ if (zoomList[inx].btRadio)
+ wMenuRadioSetActive( zoomList[inx].btRadio );
if( zoomList[inx].pdRadio )
wMenuRadioSetActive( zoomList[inx].pdRadio );
-
+ if (zoomList[inx].ctxRadio1)
+ wMenuRadioSetActive( zoomList[inx].ctxRadio1 );
+ if (zoomList[inx].panRadio)
+ wMenuRadioSetActive( zoomList[inx].panRadio );
/* activate / deactivate zoom buttons when appropriate */
wControlLinkedActive( (wControl_p)zoomUpB, ( inx != 0 ) );
wControlLinkedActive( (wControl_p)zoomDownB, ( inx < (sizeof zoomList/sizeof zoomList[0] - 1)));
@@ -1768,7 +2092,6 @@ static void DoNewScale( DIST_T scale )
if (scale > MAX_MAIN_SCALE)
scale = MAX_MAIN_SCALE;
- DrawHilight( &mapD, mainD.orig, mainD.size );
tempD.scale = mainD.scale = scale;
mainD.dpi = wDrawGetDPI( mainD.d );
if ( mainD.dpi == 75 ) {
@@ -1781,21 +2104,10 @@ static void DoNewScale( DIST_T scale )
SetZoomRadio( scale );
InfoScale();
SetMainSize();
- if (zoomCorner) {
- mainCenter.x = mainD.orig.x + mainD.size.x/2.0;
- mainCenter.y = mainD.orig.y + mainD.size.y/2.0;
- } else {
- mainD.orig.x = mainCenter.x - mainD.size.x/2.0;
- mainD.orig.y = mainCenter.y - mainD.size.y/2.0;
- }
- ConstraintOrig( &mainD.orig, mainD.size );
- MainRedraw();
- tempD.orig = mainD.orig;
+ PanHere( (void*)1 );
LOG( log_zoom, 1, ( "center = [%0.3f %0.3f]\n", mainCenter.x, mainCenter.y ) )
- /*SetFont(0);*/
sprintf( tmp, "%0.3f", mainD.scale );
wPrefSetString( "draw", "zoom", tmp );
- DrawHilight( &mapD, mainD.orig, mainD.size );
if (recordF) {
fprintf( recordF, "ORIG %0.3f %0.3f %0.3f\n",
mainD.scale, mainD.orig.x, mainD.orig.y );
@@ -1814,6 +2126,7 @@ EXPORT void DoZoomUp( void * mode )
long newScale;
int i;
+ LOG( log_zoom, 2, ( "DoZoomUp KS:%x\n", MyGetKeyState() ) );
if ( mode != NULL || (MyGetKeyState()&WKEY_SHIFT) == 0) {
i = ScaleInx( mainD.scale );
if (i < 0) i = NearestScaleInx(mainD.scale, TRUE);
@@ -1826,12 +2139,12 @@ EXPORT void DoZoomUp( void * mode )
if (mainD.scale <=1.0)
InfoMessage(_("Macro Zoom Mode"));
else
- InfoMessage(_("Use Shift+PageDwn to jump to preset Zoom In"));
+ InfoMessage("");
DoNewScale( zoomList[ i - 1 ].value );
- } else InfoMessage("Min Macro Zoom");
+ } else InfoMessage("Minimum Macro Zoom");
} else {
- InfoMessage(_("Scale 1:1 - Use Ctrl+PageDwn to go to Macro Zoom Mode"));
+ InfoMessage(_("Scale 1:1 - Use Ctrl+ to go to Macro Zoom Mode"));
}
} else if ( (MyGetKeyState()&WKEY_CTRL) == 0 ) {
wPrefGetInteger( "misc", "zoomin", &newScale, 4 );
@@ -1843,6 +2156,22 @@ EXPORT void DoZoomUp( void * mode )
}
}
+EXPORT void DoZoomExtents( void * mode) {
+
+ DIST_T scale_x, scale_y;
+ scale_x = mapD.size.x/(mainD.size.x/mainD.scale);
+ scale_y = mapD.size.y/(mainD.size.y/mainD.scale);
+ if (scale_x<scale_y)
+ scale_x = scale_y;
+ scale_x = ceil(scale_x);
+ if (scale_x < 1) scale_x = 1;
+ if (scale_x > MAX_MAIN_SCALE) scale_x = MAX_MAIN_SCALE;
+ mainD.orig = zero;
+ DoNewScale(scale_x);
+ MainLayout(TRUE,TRUE);
+
+}
+
/**
* User selected zoom out, via mouse wheel, button or pulldown.
@@ -1855,11 +2184,12 @@ EXPORT void DoZoomDown( void * mode)
long newScale;
int i;
+ LOG( log_zoom, 2, ( "DoZoomDown KS:%x\n", MyGetKeyState() ) );
if ( mode != NULL || (MyGetKeyState()&WKEY_SHIFT) == 0 ) {
i = ScaleInx( mainD.scale );
if (i < 0) i = NearestScaleInx(mainD.scale, TRUE);
if( i>= 0 && i < ( sizeof zoomList/sizeof zoomList[0] - 1 )) {
- InfoMessage(_("Use Shift+PageUp to jump to preset Zoom Out"));
+ InfoMessage("");
DoNewScale( zoomList[ i + 1 ].value );
} else
InfoMessage(_("At Maximum Zoom Out"));
@@ -1913,11 +2243,102 @@ EXPORT void CoOrd2Pix(
*y = (wPos_t)((pos.y-d->orig.y)/d->scale*d->dpi);
}
+/*
+* Position mainD based on panCenter
+* \param mode control effect of constrainMain and CTRL key
+*
+* mode:
+* - 0: constrain if constrainMain==1 or CTRL is pressed
+* - 1: same as 0, but ignore CTRL
+* - 2: same as 0, plus liveMap
+* - 3: Take position from menuPos
+*/
+EXPORT void PanHere(void * mode) {
+ if ( 3 == (long)mode) {
+ panCenter = menuPos;
+ LOG( log_pan, 2, ( "MCenter:Mod-%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ }
+ mainD.orig.x = panCenter.x - mainD.size.x/2.0;
+ mainD.orig.y = panCenter.y - mainD.size.y/2.0;
+ wBool_t bNoBorder = (constrainMain != 0);
+ if ( 1 != (long)mode )
+ if ( (MyGetKeyState()&WKEY_CTRL)!= 0 )
+ bNoBorder = !bNoBorder;
+ wBool_t bLiveMap = TRUE;
+ if ( 2 == (long)mode )
+ bLiveMap = liveMap;
+
+ MainLayout( bLiveMap, bNoBorder ); // PanHere
+}
+
+
+static void DoPanKeyAction( wAction_t action )
+{
+ switch ((wAccelKey_e)(action>>8)) {
+ case wAccelKey_Del:
+ SelectDelete();
+ return;
+#ifndef WINDOWS
+ case wAccelKey_Pgdn:
+ DoZoomUp(NULL);
+ break;
+ case wAccelKey_Pgup:
+ DoZoomDown(NULL);
+ break;
+#endif
+ case wAccelKey_Right:
+ panCenter.x = mainD.orig.x + mainD.size.x/2;
+ panCenter.y = mainD.orig.y + mainD.size.y/2;
+ if ((MyGetKeyState() & WKEY_SHIFT) != 0)
+ panCenter.x += 0.25*mainD.scale; //~1cm in 1::1, 1ft in 30:1, 1mm in 10:1
+ else
+ panCenter.x += mainD.size.x/2;
+ LOG( log_pan, 2, ( "PanCenter:%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ PanHere((void*)0);
+ break;
+
+ case wAccelKey_Left:
+ panCenter.x = mainD.orig.x + mainD.size.x/2;
+ panCenter.y = mainD.orig.y + mainD.size.y/2;
+ if ((MyGetKeyState() & WKEY_SHIFT) != 0)
+ panCenter.x -= 0.25*mainD.scale;
+ else
+ panCenter.x -= mainD.size.x/2;
+ LOG( log_pan, 2, ( "PanCenter:%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ PanHere((void*)0);
+ break;
+
+ case wAccelKey_Up:
+ panCenter.x = mainD.orig.x + mainD.size.x/2;
+ panCenter.y = mainD.orig.y + mainD.size.y/2;
+ if ((MyGetKeyState() & WKEY_SHIFT) != 0)
+ panCenter.y += 0.25*mainD.scale;
+ else
+ panCenter.y += mainD.size.y/2;
+ LOG( log_pan, 2, ( "PanCenter:%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ PanHere((void*)0);
+ break;
+
+ case wAccelKey_Down:
+ panCenter.x = mainD.orig.x + mainD.size.x/2;
+ panCenter.y = mainD.orig.y + mainD.size.y/2;
+ if ((MyGetKeyState() & WKEY_SHIFT) != 0)
+ panCenter.y -= 0.25*mainD.scale;
+ else
+ panCenter.y -= mainD.size.y/2;
+ LOG( log_pan, 2, ( "PanCenter:%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ PanHere((void*)0);
+ break;
+
+ default:
+ return;
+ }
+}
+
static void DoMapPan( wAction_t action, coOrd pos )
{
static coOrd mapOrig;
- static coOrd oldOrig, newOrig;
static coOrd size;
static DIST_T xscale, yscale;
static enum { noPan, movePan, resizePan } mode = noPan;
@@ -1930,34 +2351,21 @@ static void DoMapPan( wAction_t action, coOrd pos )
mode = movePan;
else
break;
- mapOrig = pos;
- size = mainD.size;
- newOrig = oldOrig = mainD.orig;
-LOG( log_pan, 1, ( "ORIG = [ %0.3f, %0.3f ]\n", mapOrig.x, mapOrig.y ) )
- break;
case C_MOVE:
if ( mode != movePan )
break;
- DrawHilight( &mapD, newOrig, size );
-LOG( log_pan, 2, ( "NEW = [ %0.3f, %0.3f ] \n", pos.x, pos.y ) )
- newOrig.x = oldOrig.x + pos.x-mapOrig.x;
- newOrig.y = oldOrig.y + pos.y-mapOrig.y;
- ConstraintOrig( &newOrig, mainD.size );
- if (liveMap) {
- tempD.orig = mainD.orig = newOrig;
- MainRedraw();
- }
- DrawHilight( &mapD, newOrig, size );
+// mainD.orig.x = pos.x - mainD.size.x/2.0;
+// mainD.orig.y = pos.y - mainD.size.y/2.0;
+ panCenter = pos;
+LOG( log_pan, 1, ( "%s = [ %0.3f, %0.3f ]\n", action == C_DOWN? "START":"MOVE", mainD.orig.x, mainD.orig.y ) )
+ PanHere( (void*)2 );
break;
case C_UP:
if ( mode != movePan )
break;
- tempD.orig = mainD.orig = newOrig;
- mainCenter.x = newOrig.x + mainD.size.x/2.0;
- mainCenter.y = newOrig.y + mainD.size.y/2.0;
- if (!liveMap)
- MainRedraw();
-LOG( log_pan, 1, ( "FINAL = [ %0.3f, %0.3f ]\n", pos.x, pos.y ) )
+ panCenter = pos;
+ PanHere( (void*)0 );
+LOG( log_pan, 1, ( "FINAL = [ %0.3f, %0.3f ]\n", mainD.orig.x, mainD.orig.y ) )
mode = noPan;
break;
@@ -1966,21 +2374,17 @@ LOG( log_pan, 1, ( "FINAL = [ %0.3f, %0.3f ]\n", pos.x, pos.y ) )
mode = resizePan;
else
break;
- DrawHilight( &mapD, mainD.orig, mainD.size );
- newOrig = pos;
- oldOrig = newOrig;
- xscale = 1;
- size.x = mainD.size.x/mainD.scale;
+ mapOrig = pos;
+ size.x = mainD.size.x/mainD.scale; //How big screen?
size.y = mainD.size.y/mainD.scale;
- newOrig.x -= size.x/2.0;
- newOrig.y -= size.y/2.0;
- DrawHilight( &mapD, newOrig, size );
+ xscale = mainD.scale; //start at current
+ panCenter = pos;
+LOG( log_pan, 1, ( "START %0.3fx%0.3f %0.3f+%0.3f\n", mapOrig.x, mapOrig.y, size.x, size.y ) )
break;
case C_RMOVE:
if ( mode != resizePan )
break;
- DrawHilight( &mapD, newOrig, size );
if (pos.x < 0)
pos.x = 0;
if (pos.x > mapD.size.x)
@@ -1989,103 +2393,42 @@ LOG( log_pan, 1, ( "FINAL = [ %0.3f, %0.3f ]\n", pos.x, pos.y ) )
pos.y = 0;
if (pos.y > mapD.size.y)
pos.y = mapD.size.y;
- size.x = (pos.x - oldOrig.x)*2.0;
- size.y = (pos.y - oldOrig.y)*2.0;
- if (size.x < 0) {
- size.x = - size.x;
- }
- if (size.y < 0) {
- size.y = - size.y;
- }
- xscale = size.x / (mainD.size.x/mainD.scale);
- yscale = size.y / (mainD.size.y/mainD.scale);
+
+ xscale = fabs((pos.x-mapOrig.x)*2.0/size.x);
+ yscale = fabs((pos.y-mapOrig.y)*2.0/size.y);
if (xscale < yscale)
xscale = yscale;
xscale = ceil( xscale );
- if (xscale < 1)
- xscale = 1;
+
+ if (xscale < 0.01)
+ xscale = 0.01;
if (xscale > 64)
xscale = 64;
- size.x = (mainD.size.x/mainD.scale) * xscale;
- size.y = (mainD.size.y/mainD.scale) * xscale;
- newOrig = oldOrig;
- newOrig.x -= size.x/2.0;
- newOrig.y -= size.y/2.0;
- DrawHilight( &mapD, newOrig, size );
- break;
+
+ mainD.size.x = size.x * xscale;
+ mainD.size.y = size.y * xscale;
+ mainD.orig.x = mapOrig.x - mainD.size.x / 2.0;
+ mainD.orig.y = mapOrig.y - mainD.size.y / 2.0;
+ tempD.scale = mainD.scale = xscale;
+ PanHere( (void*)2 );
+LOG( log_pan, 1, ( "MOVE SCL:%0.3f %0.3fx%0.3f %0.3f+%0.3f\n", xscale, mainD.orig.x, mainD.orig.y, mainD.size.x, mainD.size.y ) )
+ InfoScale();
+ break;
case C_RUP:
if ( mode != resizePan )
break;
- tempD.size = mainD.size = size;
- tempD.orig = mainD.orig = newOrig;
- mainCenter.x = newOrig.x + mainD.size.x/2.0;
- mainCenter.y = newOrig.y + mainD.size.y/2.0;
DoNewScale( xscale );
mode = noPan;
break;
- case wActionExtKey:
- mainD.CoOrd2Pix(&mainD,pos,&x,&y);
- switch ((wAccelKey_e)(action>>8)) {
-#ifndef WINDOWS
- case wAccelKey_Pgdn:
- DoZoomUp(NULL);
- return;
- case wAccelKey_Pgup:
- DoZoomDown(NULL);
- return;
- case wAccelKey_F5:
- MainRedraw();
- MapRedraw();
- return;
-#endif
- case wAccelKey_Right:
- //DrawHilight( &mapD, mainD.orig, mainD.size );
- mainD.orig.x += mainD.size.x/2;
- ConstraintOrig( &mainD.orig, mainD.size );
- mainCenter.x = mainD.orig.x + mainD.size.x/2.0;
- mainCenter.y = mainD.orig.y + mainD.size.y/2.0;
- MainRedraw();
- MapRedraw();
- //DrawHilight( &mapD, mainD.orig, mainD.size );
- break;
- case wAccelKey_Left:
- //DrawHilight( &mapD, mainD.orig, mainD.size );
- mainD.orig.x -= mainD.size.x/2;
- ConstraintOrig( &mainD.orig, mainD.size );
- mainCenter.x = mainD.orig.x + mainD.size.x/2.0;
- mainCenter.y = mainD.orig.y + mainD.size.y/2.0;
- MainRedraw();
- MapRedraw();
- //DrawHilight( &mapD, mainD.orig, mainD.size );
- break;
- case wAccelKey_Up:
- //DrawHilight( &mapD, mainD.orig, mainD.size );
- mainD.orig.y += mainD.size.y/2;
- ConstraintOrig( &mainD.orig, mainD.size );
- mainCenter.x = mainD.orig.x + mainD.size.x/2.0;
- mainCenter.y = mainD.orig.y + mainD.size.y/2.0;
- MainRedraw();
- MapRedraw();
- //DrawHilight( &mapD, mainD.orig, mainD.size );
- break;
- case wAccelKey_Down:
- //DrawHilight( &mapD, mainD.orig, mainD.size );
- mainD.orig.y -= mainD.size.y/2;
- ConstraintOrig( &mainD.orig, mainD.size );
- mainCenter.x = mainD.orig.x + mainD.size.x/2.0;
- mainCenter.y = mainD.orig.y + mainD.size.y/2.0;
- MainRedraw();
- MapRedraw();
- //DrawHilight( &mapD, mainD.orig, mainD.size );
- break;
- default:
- return;
- }
- mainD.Pix2CoOrd( &mainD, x, y, &pos );
- InfoPos( pos );
- return;
+ case wActionExtKey:
+ mainD.CoOrd2Pix(&mainD,pos,&x,&y);
+ DoPanKeyAction( action );
+ mainD.Pix2CoOrd( &mainD, x, y, &pos );
+ InfoPos( pos );
+ return;
+
default:
return;
}
@@ -2106,7 +2449,7 @@ EXPORT BOOL_T IsClose(
*
*/
-static int ignoreMoves = 1;
+static int ignoreMoves = 0;
EXPORT void ResetMouseState( void )
{
@@ -2136,6 +2479,31 @@ GetMousePosition( int *x, int *y )
}
}
+coOrd minIncrementSizes() {
+ double x,y;
+ if (mainD.scale >= 1.0) {
+ if (units == UNITS_ENGLISH) {
+ x = 0.25; //>1:1 = 1/4 inch
+ y = 0.25;
+ } else {
+ x = 1/(2.54*2); //>1:1 = 0.5 cm
+ y = 1/(2.54*2);
+ }
+ } else {
+ if (units == UNITS_ENGLISH) {
+ x = 1/64; //<1:1 = 1/64 inch
+ y = 1/64;
+ } else {
+ x = 1/(25.4*2); //>1:1 = 0.5 mm
+ y = 1/(25.4*2);
+ }
+ }
+ coOrd ret;
+ ret.x = x*1.5;
+ ret.y = y*1.5;
+ return ret;
+}
+
static void DoMouse( wAction_t action, coOrd pos )
{
@@ -2149,6 +2517,8 @@ static void DoMouse( wAction_t action, coOrd pos )
RecordMouse( "MOUSE", action, pos.x, pos.y );
}
+
+
switch (action&0xFF) {
case C_UP:
if (mouseState != mouseLeft)
@@ -2196,6 +2566,12 @@ static void DoMouse( wAction_t action, coOrd pos )
if ( deferSubstituteControls[0] )
InfoSubstituteControls( deferSubstituteControls, deferSubstituteLabels );
+// panCenter.y = mainD.orig.y + mainD.size.y/2;
+// panCenter.x = mainD.orig.x + mainD.size.x/2;
+//printf( "PanCenter:%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y );
+
+ coOrd min = minIncrementSizes();
+
switch ( action&0xFF ) {
case C_DOWN:
case C_RDOWN:
@@ -2209,80 +2585,17 @@ static void DoMouse( wAction_t action, coOrd pos )
case wActionExtKey:
mainD.CoOrd2Pix(&mainD,pos,&x,&y);
if ((MyGetKeyState() &
- (WKEY_SHIFT | WKEY_CTRL)) == (WKEY_SHIFT | WKEY_CTRL)) break; //Allow SHIFT+CTRL for Move
+ (WKEY_SHIFT | WKEY_CTRL)) == (WKEY_SHIFT | WKEY_CTRL) &&
+ ( action>>8 == wAccelKey_Up ||
+ action>>8 == wAccelKey_Down ||
+ action>>8 == wAccelKey_Left ||
+ action>>8 == wAccelKey_Right ))
+ break; //Allow SHIFT+CTRL for Move
if (((action>>8)&0xFF) == wAccelKey_LineFeed) {
action = C_TEXT+((int)(0x0A<<8));
break;
}
- switch ((wAccelKey_e)(action>>8)) {
- case wAccelKey_Del:
- SelectDelete();
- return;
-#ifndef WINDOWS
- case wAccelKey_Pgdn:
- DoZoomUp(NULL);
- break;
- case wAccelKey_Pgup:
- DoZoomDown(NULL);
- break;
-#endif
- case wAccelKey_Right:
- //DrawHilight( &mapD, mainD.orig, mainD.size );
- if ((MyGetKeyState() & WKEY_SHIFT) != 0)
- mainD.orig.x += 0.25*mainD.scale; //~1cm in 1::1, 1ft in 30:1, 1mm in 10:1
- else
- mainD.orig.x += mainD.size.x/2;
- ConstraintOrig( &mainD.orig, mainD.size );
- mainCenter.x = mainD.orig.x + mainD.size.x/2.0;
- mainCenter.y = mainD.orig.y + mainD.size.y/2.0;
- MainRedraw();
- MapRedraw();
- //DrawHilight( &mapD, mainD.orig, mainD.size );
- break;
- case wAccelKey_Left:
- //DrawHilight( &mapD, mainD.orig, mainD.size );
- if ((MyGetKeyState() & WKEY_SHIFT) != 0)
- mainD.orig.x -= 0.25*mainD.scale;
- else
- mainD.orig.x -= mainD.size.x/2;
- ConstraintOrig( &mainD.orig, mainD.size );
- mainCenter.x = mainD.orig.x + mainD.size.x/2.0;
- mainCenter.y = mainD.orig.y + mainD.size.y/2.0;
- MainRedraw();
- MapRedraw();
- //DrawHilight( &mapD, mainD.orig, mainD.size );
- break;
- case wAccelKey_Up:
- //DrawHilight( &mapD, mainD.orig, mainD.size );
- if ((MyGetKeyState() & WKEY_SHIFT) != 0)
- mainD.orig.y += 0.25*mainD.scale;
- else
- mainD.orig.y += mainD.size.y/2;
- ConstraintOrig( &mainD.orig, mainD.size );
- mainCenter.x = mainD.orig.x + mainD.size.x/2.0;
- mainCenter.y = mainD.orig.y + mainD.size.y/2.0;
- MainRedraw();
- MapRedraw();
- //DrawHilight( &mapD, mainD.orig, mainD.size );
- break;
- case wAccelKey_Down:
- //DrawHilight( &mapD, mainD.orig, mainD.size );
- if ((MyGetKeyState() & WKEY_SHIFT) != 0)
- mainD.orig.y -= 0.25*mainD.scale;
- else
- mainD.orig.y -= mainD.size.y/2;
- ConstraintOrig( &mainD.orig, mainD.size );
- mainCenter.x = mainD.orig.x + mainD.size.x/2.0;
- mainCenter.y = mainD.orig.y + mainD.size.y/2.0;
- MainRedraw();
- MapRedraw();
- //DrawHilight( &mapD, mainD.orig, mainD.size );
- break;
- default:
- return;
- }
- mainD.Pix2CoOrd( &mainD, x, y, &pos );
- InfoPos( pos );
+ DoPanKeyAction( action );
return;
case C_TEXT:
if ((action>>8) == 0x0D) {
@@ -2291,10 +2604,12 @@ static void DoMouse( wAction_t action, coOrd pos )
ConfirmReset( TRUE );
return;
}
+ case C_MODKEY:
case C_MOVE:
case C_UP:
case C_RMOVE:
case C_RUP:
+ case C_LDOUBLE:
InfoPos( pos );
/*DrawTempTrack();*/
break;
@@ -2304,6 +2619,26 @@ static void DoMouse( wAction_t action, coOrd pos )
case C_WDOWN:
DoZoomDown((void *)1L);
break;
+ case C_SCROLLUP:
+ panCenter.y = panCenter.y + ((mainD.size.y/20>min.y)?mainD.size.y/20:min.y);
+ LOG( log_pan, 2, ( "PanCenter:%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ PanHere((void*)1);
+ break;
+ case C_SCROLLDOWN:
+ panCenter.y = panCenter.y - ((mainD.size.y/20>min.y)?mainD.size.y/20:min.y);
+ LOG( log_pan, 2, ( "PanCenter:%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ PanHere((void*)1);
+ break;
+ case C_SCROLLLEFT:
+ panCenter.x = panCenter.x - ((mainD.size.x/20>min.x)?mainD.size.x/20:min.x);
+ LOG( log_pan, 2, ( "PanCenter:%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ PanHere((void*)1);
+ break;
+ case C_SCROLLRIGHT:
+ panCenter.x = panCenter.x + ((mainD.size.x/20>min.x)?mainD.size.x/20:min.x);
+ LOG( log_pan, 2, ( "PanCenter:%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ PanHere((void*)1);
+ break;
default:
NoticeMessage( MSG_DOMOUSE_BAD_OP, _("Ok"), NULL, action&0xFF );
break;
@@ -2382,16 +2717,13 @@ static void DoMousew( wDraw_p d, void * context, wAction_t action, wPos_t x, wPo
}
}
}
- ConstraintOrig( &orig, mainD.size );
- if ( orig.x != mainD.orig.x || orig.y != mainD.orig.y ) {
- //DrawMapBoundingBox( FALSE );
- mainD.orig = orig;
- MainRedraw();
- MapRedraw();
- /*DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );*/
- //DrawMapBoundingBox( TRUE );
- wFlush();
- }
+ mainD.orig = orig;
+ panCenter.x = mainD.orig.x + mainD.size.x/2.0;
+ panCenter.y = mainD.orig.y + mainD.size.y/2.0;
+ LOG( log_pan, 2, ( "PanCenter:%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ MainLayout( TRUE, TRUE ); // DoMouseW: autopan
+ tempD.orig = mainD.orig;
+ wFlush();
}
}
lastX = x;
@@ -2399,8 +2731,21 @@ static void DoMousew( wDraw_p d, void * context, wAction_t action, wPos_t x, wPo
}
}
mainD.Pix2CoOrd( &mainD, x, y, &pos );
- mousePositionx = x;
- mousePositiony = y;
+ switch (action & 0xFF) {
+ case wActionMove:
+ case wActionLDown:
+ case wActionLDrag:
+ case wActionLUp:
+ case wActionRDown:
+ case wActionRDrag:
+ case wActionRUp:
+ case wActionLDownDouble:
+ mousePositionx = x;
+ mousePositiony = y;
+ break;
+ default:
+ break;
+ }
DoMouse( action, pos );
}
@@ -2413,6 +2758,7 @@ static wBool_t PlaybackMain( char * line )
char *oldLocale = NULL;
oldLocale = SaveLocale("C");
+
rc=sscanf( line, "%d " SCANF_FLOAT_FORMAT SCANF_FLOAT_FORMAT, &action, &pos.x, &pos.y);
RestoreLocale(oldLocale);
@@ -2423,6 +2769,27 @@ static wBool_t PlaybackMain( char * line )
}
return TRUE;
}
+
+static wBool_t PlaybackKey( char * line )
+{
+ int rc;
+ int action = C_TEXT;
+ coOrd pos;
+ char *oldLocale = NULL;
+ int c;
+
+ oldLocale = SaveLocale("C");
+ rc=sscanf( line, "%d " SCANF_FLOAT_FORMAT SCANF_FLOAT_FORMAT, &c, &pos.x, &pos.y );
+ RestoreLocale(oldLocale);
+
+ if (rc != 3) {
+ SyntaxError( "MOUSE", rc, 3 );
+ } else {
+ action = action||c<<8;
+ PlaybackMouse( DoMouse, &mainD, (wAction_t)action, pos, wDrawColorBlack );
+ }
+ return TRUE;
+}
/*****************************************************************************
*
@@ -2440,8 +2807,40 @@ static void MapDlgUpdate(
int inx,
void * valueP )
{
- if ( inx == -1 ) {
- MapWindowShow( FALSE );
+ int width,height;
+ switch(inx) {
+ case wResize_e:
+ if (mapD.d == NULL)
+ return;
+ wWinGetSize( mapW, &width, &height );
+ if (height >= 100) {
+ wControlSetPos( (wControl_p)mapD.d, 0, 0 );
+ double scaleX = (mapD.size.x/((width-DlgSepLeft-DlgSepRight-10)/mapD.dpi));
+ double scaleY = (mapD.size.y/((height-DlgSepTop-DlgSepBottom-10)/mapD.dpi));
+ double scale;
+
+ if (scaleX<scaleY) scale = scaleX;
+ else scale = scaleY;
+
+ if (scale > 256.0) scale = 256.0;
+ if (scale < 0.01) scale = 0.01;
+
+ mapScale = (long)scale;
+
+ mapD.scale = mapScale;
+ ChangeMapScale(FALSE);
+
+ if (mapVisible) {
+ MapRedraw();
+ }
+ wPrefSetInteger( "draw", "mapscale", (long)mapD.scale );
+ }
+ break;
+ case -1:
+ MapWindowShow( FALSE );
+ break;
+ default:
+ break;
}
}
@@ -2449,8 +2848,7 @@ static void MapDlgUpdate(
static void DrawChange( long changes )
{
if (changes & CHANGE_MAIN) {
- MainRedraw();
- MapRedraw();
+ MainLayout( TRUE, FALSE ); // DrawChange: CHANGE_MAIN
}
if (changes &CHANGE_UNITS)
SetInfoBar();
@@ -2459,6 +2857,13 @@ static void DrawChange( long changes )
}
+static void MainLayoutCB(
+ wDraw_p bd, void * pContex, wPos_t px, wPos_t py )
+{
+ MainLayout( TRUE, FALSE );
+}
+
+
EXPORT void DrawInit( int initialZoom )
{
wPos_t w, h;
@@ -2469,9 +2874,9 @@ EXPORT void DrawInit( int initialZoom )
h = h - (toolbarHeight+max(textHeight,infoHeight)+10);
if ( w <= 0 ) w = 1;
if ( h <= 0 ) h = 1;
- tempD.d = mainD.d = wDrawCreate( mainW, 0, toolbarHeight, "", BD_TICKS,
+ tempD.d = mainD.d = wDrawCreate( mainW, 0, toolbarHeight, "", BD_TICKS|BD_MODKEYS,
w, h, &mainD,
- (wDrawRedrawCallBack_p)MainRedraw, DoMousew );
+ (wDrawRedrawCallBack_p)MainLayoutCB, DoMousew );
if (initialZoom == 0) {
WDOUBLE_T tmpR;
@@ -2497,17 +2902,21 @@ EXPORT void DrawInit( int initialZoom )
tempD.dpi = mainD.dpi;
SetMainSize();
+ panCenter.x = mainD.size.x/2 +mainD.orig.x;
+ panCenter.y = mainD.size.y/2 +mainD.orig.y;
mapD.scale = mapScale;
/*w = (wPos_t)((mapD.size.x/mapD.scale)*mainD.dpi + 0.5)+2;*/
/*h = (wPos_t)((mapD.size.y/mapD.scale)*mainD.dpi + 0.5)+2;*/
ParamRegister( &mapPG );
- mapW = ParamCreateDialog( &mapPG, MakeWindowTitle(_("Map")), NULL, NULL, NULL, FALSE, NULL, 0, MapDlgUpdate );
- ChangeMapScale();
+ mapW = ParamCreateDialog( &mapPG, MakeWindowTitle(_("Map")), NULL, NULL, NULL, FALSE, NULL, F_RESIZE, MapDlgUpdate );
+ ChangeMapScale(TRUE);
log_pan = LogFindIndex( "pan" );
log_zoom = LogFindIndex( "zoom" );
log_mouse = LogFindIndex( "mouse" );
+ log_redraw = LogFindIndex( "redraw" );
AddPlaybackProc( "MOUSE ", (playbackProc_p)PlaybackMain, NULL );
+ AddPlaybackProc( "KEY ", (playbackProc_p)PlaybackKey, NULL );
rulerFp = wStandardFont( F_HELV, FALSE, FALSE );
@@ -2524,6 +2933,8 @@ EXPORT void DrawInit( int initialZoom )
#include "bitmaps/pan.xpm"
+EXPORT static wMenu_p panPopupM;
+
static STATUS_T CmdPan(
wAction_t action,
coOrd pos )
@@ -2544,19 +2955,23 @@ static STATUS_T CmdPan(
switch (action&0xFF) {
case C_START:
start_pos = zero;
- panmode = NONE; InfoMessage(_("Left Drag to Pan, Right Drag to Zoom, 0 to set Origin to 0,0, 1-9 to Zoom#, e to set to Extent"));
+ panmode = NONE;
+ InfoMessage(_("Left-Drag to pan, Ctrl+Left-Drag to zoom, 0 to set origin to zero, 1-9 to zoom#, e to set to extents"));
+ wSetCursor(mainD.d,wCursorSizeAll);
break;
case C_DOWN:
- panmode = PAN;
- start_pos = pos;
- InfoMessage(_("Pan Mode - drag point to new position"));
- break;
- case C_RDOWN:
- panmode = ZOOM;
- start_pos = pos;
- base = pos;
- size = zero;
- InfoMessage(_("Zoom Mode - drag Area to Zoom"));
+ if ((MyGetKeyState()&WKEY_CTRL) == 0) {
+ panmode = PAN;
+ start_pos = pos;
+ InfoMessage(_("Pan Mode - drag point to new position"));
+ break;
+ } else {
+ panmode = ZOOM;
+ start_pos = pos;
+ base = pos;
+ size = zero;
+ InfoMessage(_("Zoom Mode - drag area to zoom"));
+ }
break;
case C_MOVE:
if (panmode == PAN) {
@@ -2575,20 +2990,18 @@ static STATUS_T CmdPan(
}
}
if ((fabs(pos.x-start_pos.x) > min_inc) || (fabs(pos.y-start_pos.y) > min_inc)) {
- DrawMapBoundingBox( TRUE );
+ coOrd oldOrig = mainD.orig;
mainD.orig.x -= (pos.x - start_pos.x);
mainD.orig.y -= (pos.y - start_pos.y);
- ConstraintOrig( &mainD.orig, mainD.size );
- tempD.orig = mainD.orig;
- mainCenter.x = mainD.orig.x + mainD.size.x/2.0;
- mainCenter.y = mainD.orig.y + mainD.size.y/2.0;
- DrawMapBoundingBox( TRUE );
+ if ((MyGetKeyState()&WKEY_SHIFT) != 0)
+ ConstraintOrig(&mainD.orig,mainD.size,TRUE,FALSE);
+ if ((oldOrig.x == mainD.orig.x) && (oldOrig.y == mainD.orig.y))
+ InfoMessage(_("Can't move any further in that direction"));
+ else
+ InfoMessage(_("Left click to pan, right click to zoom, 'o' for origin, 'e' for extents"));
}
}
- MainRedraw();
- break;
- case C_RMOVE:
- if (panmode == ZOOM) {
+ else if (panmode == ZOOM) {
base = start_pos;
size.x = pos.x - base.x;
if (size.x < 0) {
@@ -2601,90 +3014,125 @@ static STATUS_T CmdPan(
base.y = pos.y;
}
}
- MainRedraw();
+ panCenter.x = mainD.orig.x + mainD.size.x/2.0;
+ panCenter.y = mainD.orig.y + mainD.size.y/2.0;
+ PanHere( (void*)0 );
break;
- case C_RUP:
+ case C_UP:
+ if (panmode == ZOOM) {
+ scale_x = size.x/mainD.size.x*mainD.scale;
+ scale_y = size.y/mainD.size.y*mainD.scale;
- scale_x = size.x/mainD.size.x*mainD.scale;
- scale_y = size.y/mainD.size.y*mainD.scale;
+ DIST_T oldScale = mainD.scale;
- if (scale_x<scale_y)
- scale_x = scale_y;
- if (scale_x>1) scale_x = ceil( scale_x );
- else scale_x = 1/(ceil(1/scale_x));
+ if (scale_x<scale_y)
+ scale_x = scale_y;
+ if (scale_x>1) scale_x = ceil( scale_x );
+ else scale_x = 1/(ceil(1/scale_x));
- if (scale_x > MAX_MAIN_SCALE) scale_x = MAX_MAIN_SCALE;
- if (scale_x < MIN_MAIN_MACRO) scale_x = MIN_MAIN_MACRO;
+ if (scale_x > MAX_MAIN_SCALE) scale_x = MAX_MAIN_SCALE;
+ if (scale_x < MIN_MAIN_MACRO) scale_x = MIN_MAIN_MACRO;
- mainCenter.x = base.x + size.x/2.0; //Put center for scale in center of square
- mainCenter.y = base.y + size.y/2.0;
- mainD.orig.x = base.x;
- mainD.orig.y = base.y;
+ mainD.orig.x = base.x;
+ mainD.orig.y = base.y;
- panmode = NONE;
- DoNewScale(scale_x);
- MapRedraw();
- break;
- case C_UP:
- panmode = NONE;
+ panmode = NONE;
+ InfoMessage(_("Left Drag to Pan, +CTRL to Zoom, 0 to set Origin to 0,0, 1-9 to Zoom#, e to set to Extent"));
+ DoNewScale(scale_x);
+ break;
+ } else if (panmode == PAN) {
+ panCenter.x = mainD.orig.x + mainD.size.x/2.0;
+ panCenter.y = mainD.orig.y + mainD.size.y/2.0;
+ LOG( log_pan, 2, ( "PanCenter:%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ panmode = NONE;
+ }
break;
case C_REDRAW:
if (panmode == ZOOM) {
if (base.x && base.y && size.x && size.y)
- DrawHilight( &mainD, base, size );
+ DrawHilight( &tempD, base, size, TRUE );
}
break;
case C_CANCEL:
base = zero;
+ wSetCursor(mainD.d,defaultCursor);
return C_TERMINATE;
case C_TEXT:
panmode = NONE;
- if ((action>>8) == 0x65) { //"e"
- scale_x = mapD.size.x/(mainD.size.x/mainD.scale);
- scale_y = mapD.size.y/(mainD.size.y/mainD.scale);
- if (scale_x<scale_y)
- scale_x = scale_y;
- scale_x = ceil(scale_x);
- if (scale_x < 1) scale_x = 1;
- if (scale_x > MAX_MAIN_SCALE) scale_x = MAX_MAIN_SCALE;
- mainD.orig = zero;
- mainCenter.x = mainD.orig.x + mapD.size.x/2.0;
- mainCenter.y = mainD.orig.y + mapD.size.y/2.0;
- DoNewScale(scale_x);
- ConstraintOrig( &mainD.orig, mainD.size );
- mainCenter.x = mainD.orig.x + mainD.size.x/2.0;
- mainCenter.y = mainD.orig.y + mainD.size.y/2.0;
- MapRedraw();
- MainRedraw();
- }
- if ((action>>8) == 0x30) { //"0"
+
+ if ((action>>8) == 'e') { //"e"
+ DoZoomExtents(0);
+ } else if (((action>>8) == '0') || ((action>>8) == 'o')) { //"0" or "o"
mainD.orig = zero;
- ConstraintOrig( &mainD.orig, mainD.size );
- mainCenter.x = mainD.orig.x + mainD.size.x/2.0;
- mainCenter.y = mainD.orig.y + mainD.size.y/2.0;
- MapRedraw();
- MainRedraw();
- }
- if ((action>>8) >= 0x31 && (action>>8) <= 0x39) { //"1" to "9"
+ panCenter.x = mainD.size.x/2.0;
+ panCenter.y = mainD.size.y/2.0;
+ LOG( log_pan, 2, ( "PanCenter:%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ MainLayout( TRUE, TRUE ); // CmdPan C_TEXT '0' 'o'
+ } else if ((action>>8) >= '1' && (action>>8) <= '9') { //"1" to "9"
scale_x = (action>>8)&0x0F;
DoNewScale(scale_x);
- MapRedraw();
- MainRedraw();
+ } else if ((action>>8) == 'c') { // "c"
+ panCenter = pos;
+ LOG( log_pan, 2, ( "PanCenter:%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ PanHere( (void*)0 ); // CmdPan C_TEXT 'c'
}
+
if ((action>>8) == 0x0D) {
+ wSetCursor(mainD.d,defaultCursor);
return C_TERMINATE;
- }
- else if ((action>>8) == 0x1B) {
+ } else if ((action>>8) == 0x1B) {
+ wSetCursor(mainD.d,defaultCursor);
return C_TERMINATE;
}
break;
+ case C_CMDMENU:
+ menuPos = pos;
+ wMenuPopupShow( panPopupM );
+ return C_CONTINUE;
+ break;
}
return C_CONTINUE;
}
+static wMenuPush_p zoomExtents,panOrig,panHere;
+static wMenuPush_p zoomLvl1,zoomLvl2,zoomLvl3,zoomLvl4,zoomLvl5,zoomLvl6,zoomLvl7,zoomLvl8,zoomLvl9;
+
+EXPORT void PanMenuEnter(int key) {
+ int action;
+ action = C_TEXT;
+ action |= key<<8;
+ CmdPan(action,zero);
+}
+
+extern wIndex_t selectCmdInx;
+extern wIndex_t describeCmdInx;
+extern wIndex_t joinCmdInx;
+extern wIndex_t modifyCmdInx;
EXPORT void InitCmdPan( wMenu_p menu )
{
panCmdInx = AddMenuButton( menu, CmdPan, "cmdPan", _("Pan/Zoom"), wIconCreatePixMap(pan_xpm),
- LEVEL0, IC_CANCEL|IC_POPUP|IC_LCLICK|IC_RCLICK|IC_CMDMENU, ACCL_PAN, NULL );
+ LEVEL0, IC_CANCEL|IC_POPUP|IC_LCLICK|IC_CMDMENU, ACCL_PAN, NULL );
+}
+EXPORT void InitCmdPan2( wMenu_p menu )
+{
+ panPopupM = MenuRegister( "Pan Options" );
+ wMenuPushCreate(panPopupM, "cmdSelectMode", GetBalloonHelpStr("cmdSelectMode"), 0, DoCommandB, (void*) (intptr_t) selectCmdInx);
+ wMenuPushCreate(panPopupM, "cmdDescribeMode", GetBalloonHelpStr("cmdDescribeMode"), 0, DoCommandB, (void*) (intptr_t) describeCmdInx);
+ wMenuPushCreate(panPopupM, "cmdModifyMode", GetBalloonHelpStr("cmdModifyMode"), 0, DoCommandB, (void*) (intptr_t) modifyCmdInx);
+ wMenuSeparatorCreate(panPopupM);
+ zoomExtents = wMenuPushCreate( panPopupM, "", _("Zoom to extents - 'e'"), 0, (wMenuCallBack_p)PanMenuEnter, (void*) 'e');
+ zoomLvl1 = wMenuPushCreate( panPopupM, "", _("Zoom to 1:1 - '1'"), 0, (wMenuCallBack_p)PanMenuEnter, (void*) '1');
+ zoomLvl2 = wMenuPushCreate( panPopupM, "", _("Zoom to 1:2 - '2'"), 0, (wMenuCallBack_p)PanMenuEnter, (void*) '2');
+ zoomLvl3 = wMenuPushCreate( panPopupM, "", _("Zoom to 1:3 - '3'"), 0, (wMenuCallBack_p)PanMenuEnter, (void*) '3');
+ zoomLvl4 = wMenuPushCreate( panPopupM, "", _("Zoom to 1:4 - '4'"), 0, (wMenuCallBack_p)PanMenuEnter, (void*) '4');
+ zoomLvl5 = wMenuPushCreate( panPopupM, "", _("Zoom to 1:5 - '5'"), 0, (wMenuCallBack_p)PanMenuEnter, (void*) '5');
+ zoomLvl6 = wMenuPushCreate( panPopupM, "", _("Zoom to 1:6 - '6'"), 0, (wMenuCallBack_p)PanMenuEnter, (void*) '6');
+ zoomLvl7 = wMenuPushCreate( panPopupM, "", _("Zoom to 1:7 - '7'"), 0, (wMenuCallBack_p)PanMenuEnter, (void*) '7');
+ zoomLvl8 = wMenuPushCreate( panPopupM, "", _("Zoom to 1:8 - '8'"), 0, (wMenuCallBack_p)PanMenuEnter, (void*) '8');
+ zoomLvl9 = wMenuPushCreate( panPopupM, "", _("Zoom to 1:9 - '9'"), 0, (wMenuCallBack_p)PanMenuEnter, (void*) '9');
+ panOrig = wMenuPushCreate( panPopupM, "", _("Pan to Origin - 'o'/'0'"), 0, (wMenuCallBack_p)PanMenuEnter, (void*) 'o');
+ wMenu_p zoomPanM = wMenuMenuCreate(panPopupM, "", _("&Zoom"));
+ InitCmdZoom(NULL, NULL, NULL, zoomPanM);
+ panHere = wMenuPushCreate( panPopupM, "", _("Pan center here - 'c'"), 0, (wMenuCallBack_p)PanHere, (void*) 3);
}
diff --git a/app/bin/draw.h b/app/bin/draw.h
index 66a1571..dc01695 100644
--- a/app/bin/draw.h
+++ b/app/bin/draw.h
@@ -26,70 +26,89 @@
#include "common.h"
#include "wlib.h"
-#define DC_TICKS (1<<1)
+// drawCmd_t.options
+//
+// SIMPLE: draw simplified objects.
+// No endpts, descriptions, wide lines and arcs, ties, centerlines, special color
+// Draw simple lines for: wide lines and arcs, dimlines, benchwork, tableedge, filled poly andcircle
+#define DC_SIMPLE (1<<0)
+// SEGTRACK: draw tracks as segments (SEG_*TRK) instead of lines and arcs
+#define DC_SEGTRACK (1<<1)
+// PRINT: we're printing
#define DC_PRINT (1<<2)
#define DC_NOCLIP (1<<3)
-#define DC_QUICK (1<<4)
-#define DC_DASH (1<<5)
-#define DC_SIMPLE (1<<6)
-#define DC_GROUP (1<<7)
-#define DC_CENTERLINE (1<<8)
-#define DC_SEGTRACK (1<<9)
-#define DC_TIES (1<<10)
+// CENTERLINE: draw centerlines (for bitmaps)
+#define DC_CENTERLINE (1<<4)
+// TICKS: draw rulers on edges
+#define DC_TICKS (1<<5)
+// Line styles
+#define DC_THICK (1<<7)
+#define DC_DASH (1<<12)
+#define DC_DOT (1<<13)
+#define DC_DASHDOT (1<<14)
+#define DC_DASHDOTDOT (1<<15)
+#define DC_CENTER (1<<16)
+#define DC_PHANTOM (1<<17)
+
+#define DC_NOTSOLIDLINE (DC_DASH|DC_DOT|DC_DASHDOT|DC_DASHDOTDOT|DC_CENTER|DC_PHANTOM)
+
+#define INIT_MAIN_SCALE (8.0)
+#define INIT_MAP_SCALE (64.0)
+#define MAX_MAIN_SCALE (256.0)
+#define MIN_MAIN_SCALE (1.0)
+#define MIN_MAIN_MACRO (0.10)
typedef struct drawCmd_t * drawCmd_p;
typedef struct {
- long options;
- void (*drawLine)( drawCmd_p, coOrd, coOrd, wDrawWidth, wDrawColor );
- void (*drawArc)( drawCmd_p, coOrd, DIST_T, ANGLE_T, ANGLE_T, BOOL_T, wDrawWidth, wDrawColor );
- void (*drawString)( drawCmd_p, coOrd, ANGLE_T, char *, wFont_p, FONTSIZE_T, wDrawColor );
- void (*drawBitMap)( drawCmd_p, coOrd, wDrawBitMap_p, wDrawColor );
- void (*drawFillPoly) (drawCmd_p, int, coOrd *, wDrawColor );
- void (*drawFillCircle) (drawCmd_p, coOrd, DIST_T, wDrawColor );
- } drawFuncs_t;
-
-typedef void (*drawConvertPix2CoOrd)( drawCmd_p, wPos_t, wPos_t, coOrd * );
-typedef void (*drawConvertCoOrd2Pix)( drawCmd_p, coOrd, wPos_t *, wPos_t * );
+ long options;
+ void (*drawLine)(drawCmd_p, coOrd, coOrd, wDrawWidth, wDrawColor);
+ void (*drawArc)(drawCmd_p, coOrd, DIST_T, ANGLE_T, ANGLE_T, BOOL_T, wDrawWidth,
+ wDrawColor);
+ void (*drawString)(drawCmd_p, coOrd, ANGLE_T, char *, wFont_p, FONTSIZE_T,
+ wDrawColor);
+ void (*drawBitMap)(drawCmd_p, coOrd, wDrawBitMap_p, wDrawColor);
+ void (*drawPoly)(drawCmd_p, int, coOrd *, int *, wDrawColor, wDrawWidth, int,
+ int);
+ void (*drawFillCircle)(drawCmd_p, coOrd, DIST_T, wDrawColor);
+} drawFuncs_t;
+
+typedef void (*drawConvertPix2CoOrd)(drawCmd_p, wPos_t, wPos_t, coOrd *);
+typedef void (*drawConvertCoOrd2Pix)(drawCmd_p, coOrd, wPos_t *, wPos_t *);
typedef struct drawCmd_t {
- wDraw_p d;
- drawFuncs_t * funcs;
- long options;
- DIST_T scale;
- ANGLE_T angle;
- coOrd orig;
- coOrd size;
- drawConvertPix2CoOrd Pix2CoOrd;
- drawConvertCoOrd2Pix CoOrd2Pix;
- FLOAT_T dpi;
- } drawCmd_t;
+ wDraw_p d;
+ drawFuncs_t * funcs;
+ unsigned long options;
+ DIST_T scale;
+ ANGLE_T angle;
+ coOrd orig;
+ coOrd size;
+ drawConvertPix2CoOrd Pix2CoOrd;
+ drawConvertCoOrd2Pix CoOrd2Pix;
+ FLOAT_T dpi;
+} drawCmd_t;
#define SCALEX(D,X) ((X)/(D).dpi)
#define SCALEY(D,Y) ((Y)/(D).dpi)
#ifdef WINDOWS
-#define LBORDER (33)
-#define BBORDER (32)
+ #define LBORDER (33)
+ #define BBORDER (32)
#else
-#define LBORDER (26)
-#define BBORDER (27)
+ #define LBORDER (26)
+ #define BBORDER (27)
#endif
#define RBORDER (9)
#define TBORDER (8)
-#ifdef LATER
-#define Pix2CoOrd( D, pos, X, Y ) { \
- pos.x = ((long)(((POS_T)((X)-LBORDER)*pixelBins)/D.dpi))/pixelBins * D.scale + D.orig.x; \
- pos.y = ((long)(((POS_T)((Y)-BBORDER)*pixelBins)/D.dpi))/pixelBins * D.scale + D.orig.y; \
- }
-#endif
-void Pix2CoOrd( drawCmd_p, wPos_t, wPos_t, coOrd * );
-void CoOrd2Pix( drawCmd_p, coOrd, wPos_t *, wPos_t * );
+void Pix2CoOrd(drawCmd_p, wPos_t, wPos_t, coOrd *);
+void CoOrd2Pix(drawCmd_p, coOrd, wPos_t *, wPos_t *);
extern BOOL_T inError;
extern DIST_T pixelBins;
extern wWin_p mapW;
extern BOOL_T mapVisible;
+extern BOOL_T magneticSnap;
extern drawCmd_t mainD;
extern coOrd mainCenter;
extern drawCmd_t mapD;
@@ -106,6 +125,11 @@ extern long drawCount;
extern BOOL_T drawEnable;
extern long currRedraw;
+extern coOrd panCenter;
+extern coOrd menuPos;
+
+extern int log_pan;
+
extern wDrawColor drawColorBlack;
extern wDrawColor drawColorWhite;
@@ -113,12 +137,39 @@ extern wDrawColor drawColorRed;
extern wDrawColor drawColorBlue;
extern wDrawColor drawColorGreen;
extern wDrawColor drawColorAqua;
+extern wDrawColor drawColorPowderedBlue;
extern wDrawColor drawColorPurple;
extern wDrawColor drawColorGold;
+extern wDrawColor drawColorGrey10;
+extern wDrawColor drawColorGrey20;
+extern wDrawColor drawColorGrey30;
+extern wDrawColor drawColorGrey40;
+extern wDrawColor drawColorGrey50;
+extern wDrawColor drawColorGrey60;
+extern wDrawColor drawColorGrey70;
+extern wDrawColor drawColorGrey80;
+extern wDrawColor drawColorGrey90;
+// Special colors
+extern wDrawColor drawColorPreviewSelected;
+extern wDrawColor drawColorPreviewUnselected;
+
#define wDrawColorBlack drawColorBlack
#define wDrawColorWhite drawColorWhite
#define wDrawColorBlue drawColorBlue
+#define wDrawColorPowderedBlue drawColorPowderedBlue
+#define wDrawColorAqua drawColorAqua
#define wDrawColorRed drawColorRed
+#define wDrawColorGrey10 drawColorGrey10
+#define wDrawColorGrey20 drawColorGrey20
+#define wDrawColorGrey30 drawColorGrey30
+#define wDrawColorGrey40 drawColorGrey40
+#define wDrawColorGrey50 drawColorGrey50
+#define wDrawColorGrey60 drawColorGrey60
+#define wDrawColorGrey70 drawColorGrey70
+#define wDrawColorGrey80 drawColorGrey80
+#define wDrawColorGrey90 drawColorGrey90
+#define wDrawColorPreviewSelected drawColorPreviewSelected
+#define wDrawColorPreviewUnselected drawColorPreviewUnselected
extern wDrawColor markerColor;
extern wDrawColor borderColor;
@@ -128,88 +179,97 @@ extern wDrawColor snapGridColor;
extern wDrawColor selectedColor;
extern wDrawColor profilePathColor;
-BOOL_T IsClose( DIST_T );
+BOOL_T IsClose(DIST_T);
-drawFuncs_t screenDrawFuncs;
-drawFuncs_t tempDrawFuncs;
-drawFuncs_t tempSegDrawFuncs;
-drawFuncs_t printDrawFuncs;
+extern drawFuncs_t screenDrawFuncs;
+extern drawFuncs_t tempDrawFuncs;
+extern drawFuncs_t tempSegDrawFuncs;
+extern drawFuncs_t printDrawFuncs;
#define DrawLine( D, P0, P1, W, C ) (D)->funcs->drawLine( D, P0, P1, W, C )
#define DrawArc( D, P, R, A0, A1, F, W, C ) (D)->funcs->drawArc( D, P, R, A0, A1, F, W, C )
#define DrawString( D, P, A, S, FP, FS, C ) (D)->funcs->drawString( D, P, A, S, FP, FS, C )
#define DrawBitMap( D, P, B, C ) (D)->funcs->drawBitMap( D, P, B, C )
-#define DrawFillPoly( D, N, P, C ) (D)->funcs->drawFillPoly( D, N, P, C );
+#define DrawPoly( D, N, P, T, C, W, F, O ) (D)->funcs->drawPoly( D, N, P, T, C, W, F, O );
#define DrawFillCircle( D, P, R, C ) (D)->funcs->drawFillCircle( D, P, R, C );
#define REORIGIN( Q, P, A, O ) { \
- (Q) = (P); \
- REORIGIN1( Q, A, O ) \
- }
+ (Q) = (P); \
+ REORIGIN1( Q, A, O ) \
+ }
#define REORIGIN1( Q, A, O ) { \
- if ( (A) != 0.0 ) \
- Rotate( &(Q), zero, (A) ); \
- (Q).x += (O).x; \
- (Q).y += (O).y; \
- }
+ if ( (A) != 0.0 ) \
+ Rotate( &(Q), zero, (A) ); \
+ (Q).x += (O).x; \
+ (Q).y += (O).y; \
+ }
#define OFF_D( ORIG, SIZE, LO, HI ) \
- ( (HI).x < (ORIG).x || \
- (LO).x > (ORIG).x+(SIZE).x || \
- (HI).y < (ORIG).y || \
- (LO).y > (ORIG).y+(SIZE).y )
+ ( (HI).x < (ORIG).x || \
+ (LO).x > (ORIG).x+(SIZE).x || \
+ (HI).y < (ORIG).y || \
+ (LO).y > (ORIG).y+(SIZE).y )
#define OFF_MAIND( LO, HI ) \
- OFF_D( mainD.orig, mainD.size, LO, HI )
+ OFF_D( mainD.orig, mainD.size, LO, HI )
-void DrawHilight( drawCmd_p, coOrd, coOrd );
-void DrawHilightPolygon( drawCmd_p, coOrd *, int );
+void DrawHilight(drawCmd_p, coOrd, coOrd, BOOL_T add);
+void DrawHilightPolygon(drawCmd_p, coOrd *, int);
#define BOX_NONE (0)
#define BOX_UNDERLINE (1)
#define BOX_BOX (2)
#define BOX_INVERT (3)
#define BOX_ARROW (4)
#define BOX_BACKGROUND (5)
-void DrawBoxedString( int, drawCmd_p, coOrd, char *, wFont_p, wFontSize_t, wDrawColor, ANGLE_T );
-void DrawMultiLineTextSize(drawCmd_p dp, char * text, wFont_p fp, wFontSize_t fs, BOOL_T relative, coOrd * size, coOrd * lastline );
-void DrawTextSize2( drawCmd_p, char *, wFont_p, wFontSize_t, BOOL_T, coOrd *, POS_T *);
-void DrawTextSize( drawCmd_p, char *, wFont_p, wFontSize_t, BOOL_T, coOrd * );
-void DrawMultiString(drawCmd_p d, coOrd pos, char * text, wFont_p fp, wFontSize_t fs, wDrawColor color, ANGLE_T a, coOrd * lo, coOrd * hi);
-BOOL_T SetRoomSize( coOrd );
-void GetRoomSize( coOrd * );
-void DoRedraw( void );
-void SetMainSize( void );
-void MainRedraw( void );
-void MapRedraw( void );
-void DrawMarkers( void );
-void DrawMapBoundingBox( BOOL_T );
-void DrawTicks( drawCmd_p, coOrd );
-void DrawRuler( drawCmd_p, coOrd, coOrd, DIST_T, int, int, wDrawColor );
-void MainProc( wWin_p, winProcEvent, void *, void * );
-void InitInfoBar( void );
-void DrawInit( int );
-void DoZoomUp( void * );
-void DoZoomDown( void * );
-void DoZoom( DIST_T * );
-
-void InitCmdZoom( wMenu_p, wMenu_p );
-
-void InfoPos( coOrd );
-void InfoCount( wIndex_t );
-void SetMessage( char * );
+void DrawBoxedString(int, drawCmd_p, coOrd, char *, wFont_p, wFontSize_t,
+ wDrawColor, ANGLE_T);
+void DrawMultiLineTextSize(drawCmd_p dp, char * text, wFont_p fp,
+ wFontSize_t fs, BOOL_T relative, coOrd * size, coOrd * lastline);
+void DrawTextSize2(drawCmd_p, char *, wFont_p, wFontSize_t, BOOL_T, coOrd *,
+ POS_T *, POS_T *);
+void DrawTextSize(drawCmd_p, char *, wFont_p, wFontSize_t, BOOL_T, coOrd *);
+void DrawMultiString(drawCmd_p d, coOrd pos, char * text, wFont_p fp,
+ wFontSize_t fs, wDrawColor color, ANGLE_T a, coOrd * lo, coOrd * hi,
+ BOOL_T boxed);
+BOOL_T SetRoomSize(coOrd);
+void GetRoomSize(coOrd *);
+void DoRedraw(void);
+void SetMainSize(void);
+void MainRedraw(void);
+void MainLayout(wBool_t, wBool_t);
+void TempRedraw(void);
+void DrawRuler(drawCmd_p, coOrd, coOrd, DIST_T, int, int, wDrawColor);
+void MainProc(wWin_p, winProcEvent, void *, void *);
+void InitInfoBar(void);
+void DrawInit(int);
+void DoZoomUp(void *);
+void DoZoomDown(void *);
+void DoZoomExtents( void *);
+void DoZoom(DIST_T *);
+void PanHere(void *);
+void PanMenuEnter(int);
+
+void InitCmdZoom(wMenu_p, wMenu_p, wMenu_p, wMenu_p);
+
+void InfoPos(coOrd);
+void InfoCount(wIndex_t);
+void SetMessage(char *);
wIndex_t panCmdInx;
-void InfoSubstituteControls( wControl_p *, char * * );
+void InfoSubstituteControls(wControl_p *, char * *);
-void MapGrid( coOrd, coOrd, ANGLE_T, coOrd, ANGLE_T, POS_T, POS_T, int *, int *, int *, int * );
-void DrawGrid( drawCmd_p, coOrd *, POS_T, POS_T, long, long, coOrd, ANGLE_T, wDrawColor, BOOL_T );
-STATUS_T GridAction( wAction_t, coOrd, coOrd *, DIST_T * );
+void MapGrid(coOrd, coOrd, ANGLE_T, coOrd, ANGLE_T, POS_T, POS_T, int *, int *,
+ int *, int *);
+void DrawGrid(drawCmd_p, coOrd *, POS_T, POS_T, long, long, coOrd, ANGLE_T,
+ wDrawColor, BOOL_T);
+STATUS_T GridAction(wAction_t, coOrd, coOrd *, DIST_T *);
-void ResetMouseState( void );
-void FakeDownMouseState( void );
-void GetMousePosition( int *x, int *y );
-void RecordMouse( char *, wAction_t, POS_T, POS_T );
+void ResetMouseState(void);
+void FakeDownMouseState(void);
+void GetMousePosition(int *x, int *y);
+void RecordMouse(char *, wAction_t, POS_T, POS_T);
extern long playbackDelay;
-void MovePlaybackCursor( drawCmd_p, wPos_t, wPos_t );
-typedef void (*playbackProc)( wAction_t, coOrd );
-void PlaybackMouse( playbackProc, drawCmd_p, wAction_t, coOrd, wDrawColor );
+void MovePlaybackCursor(drawCmd_p, wPos_t, wPos_t, wBool_t, wControl_p);
+typedef void (*playbackProc)(wAction_t, coOrd);
+void PlaybackMouse(playbackProc, drawCmd_p, wAction_t, coOrd, wDrawColor);
+void RedrawPlaybackCursor();
#endif
diff --git a/app/bin/drawgeom.c b/app/bin/drawgeom.c
index 2342599..d23031f 100644
--- a/app/bin/drawgeom.c
+++ b/app/bin/drawgeom.c
@@ -37,46 +37,42 @@ static long drawGeomCurveMode;
#define contextSegs(N) DYNARR_N( trkSeg_t, context->Segs_da, N )
-
-
static dynArr_t points_da;
-#define points(N) DYNARR_N( coOrd, points_da, N )
+static dynArr_t anchors_da;
+static dynArr_t select_da;
+
+#define points(N) DYNARR_N( pts_t, points_da, N )
+#define point_selected(N) DYNARR_N( wBool_t, select_da, N)
+#define anchors(N) DYNARR_N( trkSeg_t, anchors_da, N)
-static void EndPoly( drawContext_t * context, int cnt )
+static void EndPoly( drawContext_t * context, int cnt, wBool_t open)
{
trkSeg_p segPtr;
track_p trk;
- long oldOptions;
- coOrd * pts;
+ pts_t * pts;
int inx;
if (context->State==0 || cnt == 0)
return;
- oldOptions = context->D->funcs->options;
- context->D->funcs->options |= wDrawOptTemp;
- DrawSegs( context->D, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
- context->D->funcs->options = oldOptions;
-
- if (IsClose(FindDistance(tempSegs(0).u.l.pos[0], tempSegs(cnt-1).u.l.pos[1] )))
- cnt--;
- if ( cnt < 2 ) {
+ if ( cnt < 3 ) {
tempSegs_da.cnt = 0;
ErrorMessage( MSG_POLY_SHAPES_3_SIDES );
return;
}
- pts = (coOrd*)MyMalloc( (cnt+1) * sizeof (coOrd) );
- for ( inx=0; inx<cnt; inx++ )
- pts[inx] = tempSegs(inx).u.l.pos[0];
- pts[cnt] = tempSegs(cnt-1).u.l.pos[1];
+ pts = (pts_t*)MyMalloc( (cnt) * sizeof (pts_t) );
+ for ( inx=0; inx<cnt; inx++ ) {
+ pts[inx].pt = tempSegs(inx).u.l.pos[0];
+ pts[inx].pt_type = wPolyLineStraight;
+ }
DYNARR_SET( trkSeg_t, tempSegs_da, 1 );
segPtr = &tempSegs(0);
- segPtr->type = ( context->Op == OP_POLY ? SEG_POLY: SEG_FILPOLY );
- segPtr->u.p.cnt = cnt+1;
+ segPtr->type = ( (context->Op == OP_POLY || context->Op == OP_POLYLINE )? SEG_POLY:SEG_FILPOLY );
+ segPtr->u.p.cnt = cnt;
segPtr->u.p.pts = pts;
segPtr->u.p.angle = 0.0;
segPtr->u.p.orig = zero;
- segPtr->u.p.polyType = FREEFORM;
+ segPtr->u.p.polyType = open?POLYLINE:FREEFORM;
UndoStart( _("Create Lines"), "newDraw" );
trk = MakeDrawFromSeg( zero, 0.0, segPtr );
DrawNewTrack( trk );
@@ -100,6 +96,80 @@ static void DrawGeomOk( void )
tempSegs_da.cnt = 0;
}
+static void CreateEndAnchor(coOrd p, wBool_t lock) {
+ DIST_T d = tempD.scale*0.15;
+
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = lock?SEG_FILCRCL:SEG_CRVLIN;
+ anchors(i).color = wDrawColorBlue;
+ anchors(i).u.c.center = p;
+ anchors(i).u.c.radius = d/2;
+ anchors(i).u.c.a0 = 0.0;
+ anchors(i).u.c.a1 = 360.0;
+ anchors(i).width = 0;
+}
+
+static void CreateLineAnchor(coOrd p, coOrd p0) {
+ DIST_T d = tempD.scale*0.15;
+ coOrd p1;
+ ANGLE_T a = FindAngle(p0,p);
+ Translate(&p1,p,a,d*5);
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).color = wDrawColorBlue;
+ anchors(i).u.l.pos[0] = p;
+ anchors(i).u.l.pos[1] = p0;
+ anchors(i).width = 0;
+}
+
+static void CreateSquareAnchor(coOrd p) {
+ DIST_T d = tempD.scale*0.15;
+ int i = anchors_da.cnt;
+ DYNARR_SET(trkSeg_t,anchors_da,i+4);
+ for (int j =0; j<4;j++) {
+ anchors(i+j).type = SEG_STRLIN;
+ anchors(i+j).color = wDrawColorBlue;
+ anchors(i+j).width = 0;
+ }
+ anchors(i).u.l.pos[0].x = anchors(i+2).u.l.pos[1].x =
+ anchors(i+3).u.l.pos[0].x = anchors(i+3).u.l.pos[1].x = p.x-d/2;
+
+ anchors(i).u.l.pos[0].y = anchors(i).u.l.pos[1].y =
+ anchors(i+1).u.l.pos[0].y = anchors(i+3).u.l.pos[1].y = p.y-d/2;
+
+ anchors(i).u.l.pos[1].x =
+ anchors(i+1).u.l.pos[0].x = anchors(i+1).u.l.pos[1].x =
+ anchors(i+2).u.l.pos[0].x = p.x+d/2;
+
+ anchors(i+1).u.l.pos[1].y =
+ anchors(i+2).u.l.pos[0].y = anchors(i+2).u.l.pos[1].y =
+ anchors(i+3).u.l.pos[0].y = p.y+d/2;
+}
+
+BOOL_T FindTempNear(drawContext_t *context, coOrd *p) {
+ if (context->State == 2) {
+ if (context->Op >= OP_CURVE1 && context->Op <= OP_CURVE4) {
+ if (context->ArcData.type == curveTypeCurve) {
+ ANGLE_T a = FindAngle(context->ArcData.curvePos,*p);
+ if (IsClose(FindDistance(context->ArcData.curvePos,*p)-context->ArcData.curveRadius) &&
+ (a>=context->ArcData.a0) && (a<=context->ArcData.a0+context->ArcData.a1)) {
+ Translate(p,context->ArcData.curvePos,a,context->ArcData.curveRadius);
+ return TRUE;
+ }
+ } else {
+ if (IsClose(LineDistance(p,tempSegs(0).u.l.pos[0],tempSegs(0).u.l.pos[1])))
+ return TRUE;
+ }
+ } else if ( context->Op >=OP_LINE && context->Op <= OP_BENCH) {
+ if (IsClose(LineDistance(p,tempSegs(0).u.l.pos[0],tempSegs(0).u.l.pos[1])))
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
/**
* Create and draw a graphics primitive (lines, arc, circle). The complete handling of mouse
* movements and clicks during the editing process is done here.
@@ -108,63 +178,195 @@ static void DrawGeomOk( void )
* \param pos IN position of mouse pointer
* \param context IN/OUT parameters for drawing op
* \return next command state
+ *
+ * Note - Poly supports both clicking points and/or dragging sides. Close is space or enter.
+ * Note - This routine will be recalled to C_UPDATE the last action if the State is 2 and the user updates the dialog
+ *
*/
STATUS_T DrawGeomMouse(
wAction_t action,
coOrd pos,
- drawContext_t *context )
+ drawContext_t *context)
{
static int lastValid = FALSE;
+ static wBool_t lock;
static coOrd pos0, pos0x, pos1, lastPos;
trkSeg_p segPtr;
- coOrd *pts;
+ pts_t *pts;
int inx;
DIST_T width;
static int segCnt;
DIST_T d;
+ ANGLE_T a1,a2;
+ static ANGLE_T line_angle;
BOOL_T createTrack;
- long oldOptions;
- width = context->Width/context->D->dpi;
+ width = context->line_Width/context->D->dpi;
switch (action&0xFF) {
+ case C_UPDATE:
+ if (context->State == 0 ) return C_TERMINATE;
+ if (context->Op != OP_POLY && context->Op != OP_FILLPOLY && context->Op != OP_POLYLINE && context->State == 1) return C_TERMINATE;
+ switch (context->Op) {
+ case OP_CIRCLE1:
+ case OP_CIRCLE2:
+ case OP_CIRCLE3:
+ case OP_FILLCIRCLE1:
+ case OP_FILLCIRCLE2:
+ case OP_FILLCIRCLE3:
+ tempSegs(0).u.c.radius = context->radius;
+ break;
+ case OP_CURVE1:
+ case OP_CURVE2:
+ case OP_CURVE3:
+ case OP_CURVE4:
+ if (context->ArcData.type == curveTypeCurve) {
+ if (tempSegs(0).u.c.radius != context->radius) {
+ coOrd end;
+ Translate(&end,context->ArcData.curvePos,context->ArcData.a0,context->ArcData.curveRadius);
+ tempSegs(0).u.c.radius = context->radius;
+ Translate(&tempSegs(0).u.c.center,end,context->ArcData.a0+180,context->radius);
+ context->ArcData.curvePos = tempSegs(0).u.c.center;
+ context->ArcData.curveRadius = tempSegs(0).u.c.radius;
+ }
+ tempSegs(0).u.c.a1 = context->angle;
+ context->ArcData.a1 = tempSegs(0).u.c.a1;
+ Translate(&context->ArcData.pos1,context->ArcData.curvePos,context->ArcData.a0,context->ArcData.curveRadius);
+ Translate(&context->ArcData.pos2,context->ArcData.curvePos,context->ArcData.a0+context->ArcData.a1,context->ArcData.curveRadius);
+ } else
+ Translate(&tempSegs(0).u.l.pos[1],tempSegs(0).u.l.pos[0],context->angle,context->length);
+ break;
+ case OP_LINE:
+ case OP_BENCH:
+ case OP_TBLEDGE:
+ a1 = FindAngle(pos0,pos1);
+ Translate(&tempSegs(0).u.l.pos[1],tempSegs(0).u.l.pos[0],context->angle,context->length);
+ lastPos = pos1 = tempSegs(0).u.l.pos[1];
+ tempSegs_da.cnt = 1;
+ context->angle = NormalizeAngle(context->angle);
+ break;
+ case OP_BOX:
+ case OP_FILLBOX:
+ pts = tempSegs(0).u.p.pts;
+ a1 = FindAngle(pts[0].pt,pts[1].pt);
+ Translate(&pts[1].pt,pts[0].pt,a1,context->length);
+ a2 = FindAngle(pts[0].pt,pts[3].pt);
+ Translate(&pts[2].pt,pts[1].pt,a2,context->width);
+ Translate(&pts[3].pt,pts[0].pt,a2,context->width);
+ tempSegs_da.cnt = 1;
+ break;
+ case OP_POLY:
+ case OP_FILLPOLY:
+ case OP_POLYLINE:
+ tempSegs_da.cnt = segCnt;
+ if (segCnt>1) {
+ ANGLE_T an = FindAngle(tempSegs(segCnt-2).u.l.pos[0],tempSegs(segCnt-2).u.l.pos[1]);
+ an = an+context->angle;
+ Translate(&tempSegs(segCnt-1).u.l.pos[1],tempSegs(segCnt-1).u.l.pos[0],an,context->length);
+ } else {
+ Translate(&tempSegs(0).u.l.pos[1],tempSegs(0).u.l.pos[0],context->angle,context->length);
+ }
+ pos1 = lastPos = tempSegs(segCnt-1).u.l.pos[1];
+ context->angle = fabs(context->angle);
+ if (context->angle >180) context->angle = context->angle - 180.0;
+ break;
+ default:
+ break;
+ }
+ MainRedraw();
+ anchors_da.cnt = 0;
+ return C_CONTINUE;
+
case C_START:
context->State = 0;
context->Changed = FALSE;
segCnt = 0;
+ CleanSegs(&tempSegs_da);
DYNARR_RESET( trkSeg_t, tempSegs_da );
+ DYNARR_RESET( trkSeg_t, anchors_da );
+ lock = FALSE;
+ if (!magneticSnap)
+ InfoMessage(_("+Shift to lock to nearby objects"));
+ else
+ InfoMessage(_("+Shift to not lock to nearby objects"));
return C_CONTINUE;
case wActionMove:
- return C_CONTINUE;
-
- case wActionLDown:
- context->Started = TRUE;
- if (context->State == 0) { //First Down only
- switch (context->Op) { //Snap pos to nearest line end point if this is end and just shift is depressed for lines and some curves
- case OP_LINE:
+ if (context->State == 0 || context->State ==2 ) {
+ DYNARR_RESET( trkSeg_t, anchors_da );
+ switch (context->Op) { //Snap pos to nearest line if this is end and just shift is depressed for lines and some curves
case OP_CURVE1:
- if ((MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL|WKEY_ALT)) == WKEY_SHIFT ) {
+ case OP_CURVE2:
+ case OP_CURVE3:
+ case OP_CURVE4:
+ case OP_LINE:
+ case OP_DIMLINE:
+ case OP_BENCH:
+ case OP_POLY:
+ case OP_FILLPOLY:
+ case OP_POLYLINE:
+ if (((MyGetKeyState() & WKEY_ALT) == 0) == magneticSnap ) {
coOrd p = pos;
track_p t;
- if ((t=OnTrack(&p,FALSE,FALSE))) {
- if (GetClosestEndPt(t,&p)) {
- pos = p;
+ if ((t=OnTrack(&p,FALSE,FALSE))!=NULL) {
+ if (context->Op == OP_DIMLINE ) {
+ CreateEndAnchor(p,FALSE);
+ } else if (!IsTrack(t)) CreateEndAnchor(p,FALSE);
+ } else {
+ p = pos;
+ if (FindTempNear(context,&p)) {
+ CreateEndAnchor(p,FALSE);
}
}
- };
+ }
break;
default:
;
}
}
+ return C_CONTINUE;
+
+ case wActionLDown:
+ DYNARR_RESET( trkSeg_t, anchors_da );
+ if (context->State == 2) {
+ tempSegs_da.cnt = segCnt;
+ if ((context->Op == OP_POLY || context->Op == OP_FILLPOLY || context->Op == OP_POLYLINE)) {
+ EndPoly(context, segCnt, context->Op==OP_POLYLINE);
+ } else {
+ DrawGeomOk();
+ }
+ segCnt = 0;
+ anchors_da.cnt = 0;
+ context->State = 0;
+ }
+ context->Started = TRUE;
+ line_angle = 90.0;
+ if ((context->Op == OP_CURVE1 && context->State != 2) ||
+ (context->Op == OP_CURVE2 && context->State == 0) ||
+ (context->Op == OP_CURVE3 && context->State != 0) ||
+ (context->Op == OP_CURVE4 && context->State != 2) ||
+ (context->Op == OP_LINE) || (context->Op == OP_DIMLINE) ||
+ (context->Op == OP_BENCH) ) {
+ BOOL_T found = FALSE;
+ if (((MyGetKeyState() & WKEY_ALT) ==0) == magneticSnap ) {
+ coOrd p = pos;
+ track_p t;
+ if ((t=OnTrack(&p,FALSE,FALSE))!=NULL) {
+ if (!IsTrack(t)) {
+ EPINX_T ep1,ep2;
+ line_angle = GetAngleAtPoint(t,pos,&ep1,&ep2);
+ pos = p;
+ found = TRUE;
+ }
+ }
+ }
+ if (!found) SnapPos( &pos );
+ }
if ((context->Op == OP_CURVE1 || context->Op == OP_CURVE2 || context->Op == OP_CURVE3 || context->Op == OP_CURVE4) && context->State == 1) {
- ;
+ ;
} else {
- if ( (MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL|WKEY_ALT)) == WKEY_CTRL ) // Control snaps to nearest track (not necessarily the end)
- OnTrack( &pos, FALSE, FALSE );
pos0 = pos;
pos1 = pos;
}
@@ -173,9 +375,6 @@ STATUS_T DrawGeomMouse(
case OP_LINE:
case OP_DIMLINE:
case OP_BENCH:
- if ( lastValid && ( MyGetKeyState() & WKEY_CTRL ) ) {
- pos = pos0 = lastPos;
- }
DYNARR_SET( trkSeg_t, tempSegs_da, 1 );
switch (context->Op) {
case OP_LINE: tempSegs(0).type = SEG_STRLIN; break;
@@ -191,12 +390,9 @@ STATUS_T DrawGeomMouse(
tempSegs(0).u.l.option = 0;
}
tempSegs_da.cnt = 0;
- context->message( _("Drag to place next end point") );
+ context->message( _("Drag to next point, +Shift to lock to object, +Ctrl to lock to 90deg") );
break;
case OP_TBLEDGE:
- if ( lastValid && ( MyGetKeyState() & WKEY_CTRL ) ) {
- pos = pos0 = lastPos;
- }
OnTableEdgeEndPt( NULL, &pos );
DYNARR_SET( trkSeg_t, tempSegs_da, 1 );
tempSegs(0).type = SEG_TBLEDGE;
@@ -214,9 +410,8 @@ STATUS_T DrawGeomMouse(
case OP_CURVE3: drawGeomCurveMode = crvCmdFromCenter; break;
case OP_CURVE4: drawGeomCurveMode = crvCmdFromChord; break;
}
- CreateCurve( C_DOWN, pos, FALSE, context->Color, width, drawGeomCurveMode, context->message );
- } else {
- tempSegs_da.cnt = segCnt;
+ CreateCurve( C_START, pos, FALSE, context->Color, width, drawGeomCurveMode, &anchors_da, context->message );
+ CreateCurve( C_DOWN, pos, FALSE, context->Color, width, drawGeomCurveMode, &anchors_da, context->message );
}
break;
case OP_CIRCLE1:
@@ -240,6 +435,7 @@ STATUS_T DrawGeomMouse(
break;
case OP_FILLBOX:
width = 0;
+ /* no break */
case OP_BOX:
DYNARR_SET( trkSeg_t, tempSegs_da, 4 );
for ( inx=0; inx<4; inx++ ) {
@@ -248,75 +444,172 @@ STATUS_T DrawGeomMouse(
tempSegs(inx).width = width;
tempSegs(inx).u.l.pos[0] = tempSegs(inx).u.l.pos[1] = pos;
}
- tempSegs_da.cnt = 0;
context->message( _("Drag set box size") );
break;
case OP_POLY:
case OP_FILLPOLY:
+ case OP_POLYLINE:
tempSegs_da.cnt = segCnt;
- DYNARR_APPEND( trkSeg_t, tempSegs_da, 10 );
+ wBool_t first_spot = FALSE;
+ if (segCnt == 1 && tempSegs(0).type == SEG_CRVLIN) {
+ coOrd start;
+ start = tempSegs(0).u.c.center;
+ tempSegs(0).type = SEG_STRLIN;
+ tempSegs(0).u.l.pos[0] = start;
+ first_spot=TRUE;
+ } else {
+ DYNARR_APPEND( trkSeg_t, tempSegs_da, 10 );
+ }
segPtr = &tempSegs(tempSegs_da.cnt-1);
segPtr->type = SEG_STRLIN;
segPtr->color = context->Color;
segPtr->width = (context->Op==OP_POLY?width:0);
- if ( tempSegs_da.cnt == 1 ) {
- segPtr->u.l.pos[0] = pos;
- } else {
- segPtr->u.l.pos[0] = segPtr[-1].u.l.pos[1];
+ //End if over start
+ if ( segCnt>2 && IsClose(FindDistance(tempSegs(0).u.l.pos[0], pos ))) {
+ segPtr->u.l.pos[0] = tempSegs(segCnt-1).u.l.pos[1];
+ segPtr->u.l.pos[1] = tempSegs(0).u.l.pos[0];
+ EndPoly(context, tempSegs_da.cnt, context->Op==OP_POLYLINE);
+ DYNARR_RESET(pts_t, points_da);
+ DYNARR_RESET(trkSeg_t,tempSegs_da);
+ context->State = 0;
+ segCnt = 0;
+ return C_TERMINATE;
+ }
+ if (!first_spot) {
+ if ( tempSegs_da.cnt == 1) {
+ segPtr->u.l.pos[0] = pos;
+ } else {
+ segPtr->u.l.pos[0] = segPtr[-1].u.l.pos[1];
+ }
}
segPtr->u.l.pos[1] = pos;
context->State = 1;
- oldOptions = context->D->funcs->options;
- context->D->funcs->options |= wDrawOptTemp;
- DrawSegs( context->D, zero, 0.0, &tempSegs(tempSegs_da.cnt-1), 1, trackGauge, wDrawColorBlack );
- context->D->funcs->options = oldOptions;
+ segCnt = tempSegs_da.cnt;
+ context->message(_("+Shift - lock to close object, +Ctrl - lock to 90 deg"));
break;
}
return C_CONTINUE;
case wActionLDrag:
- oldOptions = context->D->funcs->options;
- context->D->funcs->options |= wDrawOptTemp;
- if (context->Op == OP_POLY || context->Op == OP_FILLPOLY)
- DrawSegs( context->D, zero, 0.0, &tempSegs(tempSegs_da.cnt-1), 1, trackGauge, wDrawColorBlack );
- else
- DrawSegs( context->D, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
- if ( (MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL|WKEY_ALT)) == WKEY_CTRL )
- OnTrack( &pos, FALSE, FALSE );
+ DYNARR_RESET(trkSeg_t, anchors_da );
+ if ((context->Op == OP_CURVE1 && context->State == 1) ||
+ (context->Op == OP_CURVE2 && context->State == 0) ||
+ (context->Op == OP_CURVE4 && context->State != 2) ||
+ (context->Op == OP_LINE) ||
+ (context->Op == OP_BENCH) ) {
+ if (( (MyGetKeyState() & WKEY_ALT)==0) == magneticSnap) {
+ if (OnTrack( &pos, FALSE, FALSE )!=NULL)
+ CreateEndAnchor(pos,TRUE);
+ }
+ } else if (context->Op == OP_DIMLINE) {
+ if (OnTrack( &pos, FALSE, FALSE )!=NULL) CreateEndAnchor(pos,TRUE);
+ }
+
pos1 = pos;
+
switch (context->Op) {
case OP_TBLEDGE:
OnTableEdgeEndPt( NULL, &pos1 );
+ /* no break */
case OP_LINE:
case OP_DIMLINE:
case OP_BENCH:
+ if ((MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL|WKEY_ALT)) == WKEY_CTRL ) {
+ //Snap to Right-Angle from previous or from 0
+ DIST_T l = FindDistance(pos0, pos);
+ ANGLE_T angle2 = NormalizeAngle(FindAngle(pos0, pos)-line_angle);
+ int quad = (int)((angle2 + 45.0) / 90.0);
+ if (tempSegs_da.cnt != 1 && (quad == 2)) {
+ pos1 = pos0;
+ } else if (quad == 1 || quad == 3) {
+ if (tempSegs_da.cnt != 1)
+ l = fabs(l*cos(D2R(((quad==1)?line_angle+90.0:line_angle-90.0)-FindAngle(pos,pos0))));
+ Translate( &pos1, pos0, NormalizeAngle(quad==1?line_angle+90.0:line_angle-90.0), l );
+ } else {
+ if (tempSegs_da.cnt != 1)
+ l = fabs(l*cos(D2R(((quad==0||quad==4)?line_angle:line_angle+180.0)-FindAngle(pos,pos0))));
+ Translate( &pos1, pos0, NormalizeAngle((quad==0||quad==4)?line_angle:line_angle+180.0), l );
+ }
+ CreateLineAnchor(pos1,pos0);
+ }
tempSegs(0).u.l.pos[1] = pos1;
context->message( _("Length = %s, Angle = %0.2f"),
FormatDistance(FindDistance( pos0, pos1 )),
PutAngle(FindAngle( pos0, pos1 )) );
tempSegs_da.cnt = 1;
+ if (anchors_da.cnt == 0) CreateEndAnchor(pos, FALSE);
break;
case OP_POLY:
case OP_FILLPOLY:
+ case OP_POLYLINE:
+ if ((MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL|WKEY_ALT)) == WKEY_CTRL ) {
+ coOrd last_point = zero;
+ ANGLE_T last_angle, initial_angle;
+ if (tempSegs_da.cnt == 1) {
+ last_angle = 90.0;
+ last_point = tempSegs(0).u.l.pos[0];
+ initial_angle = 90.0;
+ } else {
+ last_point = tempSegs(tempSegs_da.cnt-2).u.l.pos[1];
+ last_angle = FindAngle(tempSegs(tempSegs_da.cnt-2).u.l.pos[0],tempSegs(tempSegs_da.cnt-2).u.l.pos[1]);
+ initial_angle = FindAngle(tempSegs(0).u.l.pos[0],tempSegs(0).u.l.pos[1]);
+ }
+ //Snap to Right-Angle from previous or from 0
+ DIST_T l = FindDistance(tempSegs(tempSegs_da.cnt-1).u.l.pos[0], pos);
+ ANGLE_T angle2 = NormalizeAngle(FindAngle(tempSegs(tempSegs_da.cnt-1).u.l.pos[0], pos)-last_angle);
+ int quad = (int)((angle2+45.0)/90.0);
+ if (tempSegs_da.cnt != 1 && (quad == 2)) {
+ pos = tempSegs(tempSegs_da.cnt-1).u.l.pos[0];
+ } else if (quad == 1 || quad == 3) {
+ if (tempSegs_da.cnt != 1)
+ l = fabs(l*cos(D2R(((quad==1)?last_angle+90.0:last_angle-90.0)-FindAngle(pos,last_point))));
+ Translate( &pos, tempSegs(tempSegs_da.cnt-1).u.l.pos[0], NormalizeAngle(quad==1?last_angle+90.0:last_angle-90.0), l );
+ } else {
+ if (tempSegs_da.cnt != 1)
+ l = fabs(l*cos(D2R(((quad==0||quad==4)?last_angle:last_angle+180.0)-FindAngle(pos,last_point))));
+ Translate( &pos, tempSegs(tempSegs_da.cnt-1).u.l.pos[0], NormalizeAngle((quad==0||quad==4)?last_angle:last_angle+180.0), l );
+ }
+ CreateEndAnchor(pos,TRUE);
+ if (FindDistance(pos,last_point)>0.0) CreateLineAnchor(pos,last_point);
+ }
+ //If there is any point on this line that will give a 90 degree return to the first point, show it
+ if (tempSegs_da.cnt > 1) {
+ coOrd intersect;
+ ANGLE_T an_this = FindAngle(tempSegs(tempSegs_da.cnt-2).u.l.pos[1],pos);
+ if (FindIntersection(&intersect,tempSegs(0).u.l.pos[0],an_this+90.0,tempSegs(tempSegs_da.cnt-2).u.l.pos[1],an_this)) {
+ ANGLE_T an_inter = FindAngle(tempSegs(tempSegs_da.cnt-2).u.l.pos[1],intersect);
+ if (fabs(DifferenceBetweenAngles(an_inter,an_this))<90.0) {
+ CreateSquareAnchor(intersect);
+ d = FindDistance(intersect,pos);
+ if (IsClose(d)) {
+ pos = intersect;
+ }
+ }
+ }
+ }
tempSegs(tempSegs_da.cnt-1).type = SEG_STRLIN;
tempSegs(tempSegs_da.cnt-1).u.l.pos[1] = pos;
context->message( _("Length = %s, Angle = %0.2f"),
FormatDistance(FindDistance( tempSegs(tempSegs_da.cnt-1).u.l.pos[0], pos )),
PutAngle(FindAngle( tempSegs(tempSegs_da.cnt-1).u.l.pos[0], pos )) );
+ segCnt = tempSegs_da.cnt;
break;
case OP_CURVE1: case OP_CURVE2: case OP_CURVE3: case OP_CURVE4:
if (context->State == 0) {
- CreateCurve( C_MOVE, pos, FALSE, context->Color, width, drawGeomCurveMode, context->message );
pos0x = pos;
+ CreateCurve( C_MOVE, pos, FALSE, context->Color, width, drawGeomCurveMode, &anchors_da, context->message );
} else {
PlotCurve( drawGeomCurveMode, pos0, pos0x, pos1, &context->ArcData, FALSE );
tempSegs(0).color = context->Color;
tempSegs(0).width = width;
+ DYNARR_SET(trkSeg_t,tempSegs_da,1);
if (context->ArcData.type == curveTypeStraight) {
tempSegs(0).type = SEG_STRLIN;
tempSegs(0).u.l.pos[0] = pos0;
tempSegs(0).u.l.pos[1] = context->ArcData.pos1;
tempSegs_da.cnt = 1;
+ CreateEndAnchor(pos0, FALSE);
+ CreateEndAnchor(context->ArcData.pos1, FALSE);
context->message( _("Straight Line: Length=%s Angle=%0.3f"),
FormatDistance(FindDistance( pos0, context->ArcData.pos1 )),
PutAngle(FindAngle( pos0, context->ArcData.pos1 )) );
@@ -337,14 +630,21 @@ STATUS_T DrawGeomMouse(
ErrorMessage( MSG_CURVE_TOO_LARGE );
tempSegs_da.cnt = 0;
context->ArcData.type = curveTypeNone;
- context->D->funcs->options = oldOptions;
return C_CONTINUE;
}
context->message( _("Curved Line: Radius=%s Angle=%0.3f Length=%s"),
FormatDistance(context->ArcData.curveRadius), context->ArcData.a1,
FormatDistance(context->ArcData.curveRadius*d) );
+ if (context->Op == OP_CURVE1 || context->Op == OP_CURVE4 )
+ DrawArrowHeadsArray(&anchors_da,pos,FindAngle(context->ArcData.curvePos,pos),TRUE,wDrawColorRed);
+ else if (context->Op == OP_CURVE2 || context->Op == OP_CURVE3 ) {
+ CreateEndAnchor(context->ArcData.pos2,FALSE);
+ DrawArrowHeadsArray(&anchors_da,context->ArcData.pos2,FindAngle(context->ArcData.curvePos,context->ArcData.pos2)+90,TRUE,wDrawColorRed);
+ }
+ CreateEndAnchor(context->ArcData.curvePos,TRUE);
}
}
+ if (anchors_da.cnt == 0) CreateEndAnchor(pos, FALSE);
break;
case OP_CIRCLE1:
case OP_FILLCIRCLE1:
@@ -352,6 +652,7 @@ STATUS_T DrawGeomMouse(
case OP_CIRCLE2:
case OP_FILLCIRCLE2:
tempSegs(0).u.c.center = pos1;
+ /* no break */
case OP_CIRCLE3:
case OP_FILLCIRCLE3:
tempSegs(0).u.c.radius = FindDistance( pos0, pos1 );
@@ -369,58 +670,48 @@ STATUS_T DrawGeomMouse(
FormatDistance(fabs(pos1.x - pos0.x)), FormatDistance(fabs(pos1.y - pos0.y)) );
break;
}
- if (context->Op == OP_POLY || context->Op == OP_FILLPOLY)
- DrawSegs( context->D, zero, 0.0, &tempSegs(tempSegs_da.cnt-1), 1, trackGauge, wDrawColorBlack );
- else
- DrawSegs( context->D, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
- context->D->funcs->options = oldOptions;
- if (context->Op == OP_DIMLINE) MainRedraw(); //Wipe Out Text
return C_CONTINUE;
case wActionLUp:
- oldOptions = context->D->funcs->options;
- context->D->funcs->options |= wDrawOptTemp;
- if (context->Op != OP_POLY && context->Op != OP_FILLPOLY)
- DrawSegs( context->D, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
lastValid = FALSE;
createTrack = FALSE;
- if ((context->State == 0 && (context->Op == OP_LINE )) || //first point release for line,
- (context->State == 1 && context->Op == OP_CURVE1)) { //second point for curve from end
- switch (context->Op) { //Snap pos to nearest line end point if this is on a line and just shift is depressed for lines and some curves
- case OP_CURVE1:
- case OP_LINE:
- if ((MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL|WKEY_ALT)) == WKEY_SHIFT ) {
- coOrd p = pos1;
- track_p t;
- if ((t=OnTrack(&p,FALSE,FALSE))) {
- if (GetClosestEndPt(t,&p)) {
- pos1 = p;
- if (context->Op == OP_LINE) {
- tempSegs(0).u.l.pos[1] = p;
- } else {
- PlotCurve( drawGeomCurveMode, pos0, pos0x, pos1, &context->ArcData, FALSE );
- if (context->ArcData.type == curveTypeStraight) {
- tempSegs(0).type = SEG_STRLIN;
- tempSegs(0).u.l.pos[0] = pos0;
- tempSegs(0).u.l.pos[1] = context->ArcData.pos1;
- tempSegs_da.cnt = 1;
- } else if (context->ArcData.type == curveTypeNone) {
- tempSegs_da.cnt = 0;
- } else if (context->ArcData.type == curveTypeCurve) {
- tempSegs(0).type = SEG_CRVLIN;
- tempSegs(0).u.c.center = context->ArcData.curvePos;
- tempSegs(0).u.c.radius = context->ArcData.curveRadius;
- tempSegs(0).u.c.a0 = context->ArcData.a0;
- tempSegs(0).u.c.a1 = context->ArcData.a1;
- tempSegs_da.cnt = 1;
- }
- }
- }
+ if ((context->Op == OP_CURVE1 && context->State == 1) ||
+ (context->Op == OP_CURVE2 && context->State == 0) ||
+ (context->Op == OP_CURVE3 && context->State != 0) ||
+ (context->Op == OP_CURVE4 && context->State != 2) ||
+ (context->Op == OP_LINE) || (context->Op == OP_DIMLINE) ||
+ (context->Op == OP_BENCH) ) {
+ if (((MyGetKeyState() & WKEY_ALT)==0) == magneticSnap ) {
+ coOrd p = pos1;
+ track_p t;
+ if ((t=OnTrack(&p,FALSE,FALSE))) {
+ pos1 = p;
+ if (context->Op == OP_LINE || context->Op == OP_DIMLINE || context->Op == OP_BENCH) {
+ tempSegs(0).u.l.pos[1] = p;
+ } else {
+ PlotCurve( drawGeomCurveMode, pos0, pos0x, pos1, &context->ArcData, FALSE );
+ if (context->ArcData.type == curveTypeStraight) {
+ DYNARR_RESET(trkSeg_t,tempSegs_da);
+ DYNARR_APPEND(trkSeg_t,tempSegs_da,1);
+ tempSegs(0).type = SEG_STRLIN;
+ tempSegs(0).u.l.pos[0] = pos0;
+ tempSegs(0).u.l.pos[1] = context->ArcData.pos1;
+ tempSegs_da.cnt = 1;
+ } else if (context->ArcData.type == curveTypeNone) {
+ DYNARR_RESET(trkSeg_t,tempSegs_da);
+ } else if (context->ArcData.type == curveTypeCurve) {
+ DYNARR_RESET(trkSeg_t,tempSegs_da);
+ DYNARR_APPEND(trkSeg_t,tempSegs_da,1);
+ tempSegs(0).type = SEG_CRVLIN;
+ tempSegs(0).u.c.center = context->ArcData.curvePos;
+ tempSegs(0).u.c.radius = context->ArcData.curveRadius;
+ tempSegs(0).u.c.a0 = context->ArcData.a0;
+ tempSegs(0).u.c.a1 = context->ArcData.a1;
+ tempSegs_da.cnt = 1;
}
- };
- break;
- default:
- ;
+ }
+
+ }
}
}
switch ( context->Op ) {
@@ -430,22 +721,22 @@ STATUS_T DrawGeomMouse(
case OP_TBLEDGE:
lastValid = TRUE;
lastPos = pos1;
+ context->length = FindDistance(pos1,pos0);
+ context->angle = FindAngle(pos0,pos1);
+ context->State = 2;
+ segCnt = tempSegs_da.cnt;
break;
case OP_CURVE1: case OP_CURVE2: case OP_CURVE3: case OP_CURVE4:
if (context->State == 0) {
context->State = 1;
context->ArcAngle = FindAngle( pos0, pos1 );
pos0x = pos1;
- CreateCurve( C_UP, pos, FALSE, context->Color, width, drawGeomCurveMode, context->message );
- DrawSegs( context->D, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
- segCnt = tempSegs_da.cnt;
+ CreateCurve( C_UP, pos, FALSE, context->Color, width, drawGeomCurveMode, &anchors_da, context->message );
context->message( _("Drag on Red arrows to adjust curve") );
- context->D->funcs->options = oldOptions;
return C_CONTINUE;
} else {
- tempSegs_da.cnt = 0;
+ DYNARR_SET(trkSeg_t,tempSegs_da,1);
if (context->ArcData.type == curveTypeCurve) {
- tempSegs_da.cnt = 1;
segPtr = &tempSegs(0);
segPtr->type = SEG_CRVLIN;
segPtr->color = context->Color;
@@ -454,20 +745,22 @@ STATUS_T DrawGeomMouse(
segPtr->u.c.radius = context->ArcData.curveRadius;
segPtr->u.c.a0 = context->ArcData.a0;
segPtr->u.c.a1 = context->ArcData.a1;
+ context->radius = context->ArcData.curveRadius;
+ context->angle = context->ArcData.a1;
} else if (context->ArcData.type == curveTypeStraight) {
- tempSegs_da.cnt = 1;
segPtr = &tempSegs(0);
segPtr->type = SEG_STRLIN;
segPtr->color = context->Color;
segPtr->width = width;
segPtr->u.l.pos[0] = pos0;
segPtr->u.l.pos[1] = pos1;
- } else {
- tempSegs_da.cnt = 0;
+ context->radius = 0;
+ context->length = FindDistance(pos0,pos1);
+ context->angle = FindAngle(pos0,pos1);
}
- context->State = 0;
lastValid = TRUE;
lastPos = pos1;
+ context->State = 2;
/*drawContext = context;
DrawGeomOp( (void*)context->Op );*/
}
@@ -480,14 +773,17 @@ STATUS_T DrawGeomMouse(
case OP_FILLCIRCLE3:
if ( context->Op>=OP_FILLCIRCLE1 && context->Op<=OP_FILLCIRCLE3 )
tempSegs(0).type = SEG_FILCRCL;
- /*drawContext = context;
- DrawGeomOp( (void*)context->Op );*/
+ tempSegs_da.cnt = 1;
+ context->State = 2;
+ context->radius = tempSegs(0).u.c.radius;
break;
case OP_BOX:
case OP_FILLBOX:
- pts = (coOrd*)MyMalloc( 4 * sizeof (coOrd) );
- for ( inx=0; inx<4; inx++ )
- pts[inx] = tempSegs(inx).u.l.pos[0];
+ pts = (pts_t*)MyMalloc( 4 * sizeof (pts_t) );
+ for ( inx=0; inx<4; inx++ ) {
+ pts[inx].pt = tempSegs(inx).u.l.pos[0];
+ pts[inx].pt_type = wPolyLineStraight;
+ }
tempSegs(0).type = (context->Op == OP_FILLBOX)?SEG_FILPOLY:SEG_POLY;
tempSegs(0).u.p.cnt = 4;
tempSegs(0).u.p.pts = pts;
@@ -497,188 +793,1259 @@ STATUS_T DrawGeomMouse(
tempSegs_da.cnt = 1;
/*drawContext = context;
DrawGeomOp( (void*)context->Op );*/
+ context->length = FindDistance(pts[0].pt,pts[1].pt);
+ context->width = FindDistance(pts[3].pt,pts[0].pt);
+ context->State = 2;
+ segCnt = tempSegs_da.cnt;
break;
case OP_POLY:
case OP_FILLPOLY:
+ case OP_POLYLINE:
+ tempSegs_da.cnt = segCnt;
+ anchors_da.cnt=0;
+ //End if close to start
+ if ( segCnt>2 && IsClose(FindDistance(tempSegs(0).u.l.pos[0], pos))) {
+ EndPoly(context, tempSegs_da.cnt, context->Op==OP_POLYLINE);
+ DYNARR_RESET(pts_t, points_da);
+ CleanSegs(&tempSegs_da);
+ context->State = 0;
+ segCnt = 0;
+ return C_TERMINATE;
+ }
+ //If too short, remove last segment
+ if (IsClose(FindDistance(tempSegs(segCnt-1).u.l.pos[0],pos))) {
+ if (tempSegs_da.cnt>1) {
+ --tempSegs_da.cnt;
+ segCnt = tempSegs_da.cnt;
+ wBeep();
+ } else { //First spot only
+ tempSegs(0).color = wDrawColorRed;
+ tempSegs(0).type = SEG_CRVLIN;
+ tempSegs(0).u.c.a1 = 360;
+ tempSegs(0).u.c.radius = tempD.scale*0.15/2;
+ tempSegs(0).u.c.center = pos;
+ segCnt = tempSegs_da.cnt;
+ }
+ return C_CONTINUE;
+ }
+ int text_inx = tempSegs_da.cnt-1;
+ //tempSegs(tempSegs_da.cnt-1).u.l.pos[1] = pos;
+ context->length = FindDistance(tempSegs(text_inx).u.l.pos[0],tempSegs(text_inx).u.l.pos[1]);
+ if (text_inx>1) {
+ ANGLE_T an = FindAngle(tempSegs(text_inx-1).u.l.pos[0],tempSegs(text_inx-1).u.l.pos[1]);
+ context->angle = NormalizeAngle(FindAngle(tempSegs(text_inx).u.l.pos[0],tempSegs(text_inx).u.l.pos[1])-an);
+ } else
+ context->angle = FindAngle(tempSegs(1).u.l.pos[0],tempSegs(1).u.l.pos[1]);
+ context->State = 1;
+ context->index = text_inx;
segCnt = tempSegs_da.cnt;
- context->D->funcs->options = oldOptions;
return C_CONTINUE;
}
context->Started = FALSE;
- context->Changed = TRUE;
+ context->Changed = TRUE; //Update screen shown
/*CheckOk();*/
- context->D->funcs->options = oldOptions;
+ if (context->State == 2 && IsCurCommandSticky()) {
+ segCnt = tempSegs_da.cnt;
+ return C_CONTINUE;
+ }
DrawGeomOk();
+ context->State = 0;
+ context->Changed = FALSE;
+ context->message("");
return C_TERMINATE;
case wActionText:
-
+ DYNARR_RESET(trkSeg_t, anchors_da );
if ( ((action>>8)&0xFF) == 0x0D ||
((action>>8)&0xFF) == ' ' ) {
- EndPoly(context, segCnt);
- context->State = 0;
+ if ((context->Op == OP_POLY) || (context->Op == OP_FILLPOLY) || (context->Op == OP_POLYLINE)) {
+ tempSegs_da.cnt = segCnt;
+ //If last segment wasn't just a point, add another starting on its end
+ if (!IsClose(FindDistance(tempSegs(segCnt-1).u.l.pos[0],tempSegs(segCnt-1).u.l.pos[1]))) {
+ DYNARR_APPEND(trkSeg_t,tempSegs_da,1);
+ segPtr = &tempSegs(tempSegs_da.cnt-1);
+ segPtr->type = SEG_STRLIN;
+ segPtr->u.l.pos[0] = segPtr[-1].u.l.pos[1];
+ segPtr->u.l.pos[1] = tempSegs(0).u.l.pos[0];
+ }
+ EndPoly(context, tempSegs_da.cnt, context->Op == OP_POLYLINE);
+ DYNARR_RESET(pts_t, points_da);
+ DYNARR_RESET(trkSeg_t,tempSegs_da);
+ } else {
+ if (context->State == 2)
+ tempSegs_da.cnt = segCnt;
+ DrawGeomOk();
+ }
}
+ context->State = 0;
+ segCnt = 0;
return C_TERMINATE;
case C_CANCEL:
-
- oldOptions = context->D->funcs->options;
- context->D->funcs->options |= wDrawOptTemp;
- DrawSegs( context->D, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
- context->D->funcs->options = oldOptions;
+ if (context->Changed) { //If the update values were shown
+ if (context->State == 2) {
+ tempSegs_da.cnt = segCnt;
+ DrawGeomOk();
+ }
+ }
+ DYNARR_RESET(trkSeg_t, anchors_da );
tempSegs_da.cnt = 0;
context->message( "" );
context->Changed = FALSE;
+ context->State = 0;
+ segCnt = 0;
lastValid = FALSE;
return C_TERMINATE;
case C_REDRAW:
- oldOptions = context->D->funcs->options;
- context->D->funcs->options |= wDrawOptTemp;
- DrawSegs( context->D, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
- context->D->funcs->options = oldOptions;
+ DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
+ if (anchors_da.cnt > 0) {
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, 0.0, wDrawColorBlack );
+ }
return C_CONTINUE;
+ case C_CMDMENU:
+
+ return C_CONTINUE;
+
default:
return C_CONTINUE;
}
}
+static int polyInx;
+static int lineInx;
+static int curveInx;
+
+typedef enum {POLY_NONE, POLY_SELECTED, POLYPOINT_SELECTED} PolyState_e;
+static PolyState_e polyState = POLY_NONE;
+static coOrd rotate_origin;
+static ANGLE_T rotate_angle;
+static dynArr_t origin_da;
+
+
+void static CreateCircleAnchor(wBool_t selected,coOrd center, DIST_T rad, ANGLE_T angle) {
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ double d = tempD.scale*0.15;
+ DYNARR_APPEND(trkSeg_t,anchors_da,2);
+ anchors(0).type = (selected)?SEG_FILCRCL:SEG_CRVLIN;
+ anchors(0).u.c.a1 = 360.0;
+ anchors(0).color = wDrawColorBlue;
+ anchors(0).u.c.radius = d/2;
+ PointOnCircle(&anchors(0).u.c.center,center,rad,angle);
+}
+void static CreateLineAnchors(int index, coOrd p0, coOrd p1) {
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ double d = tempD.scale*0.15;
+ DYNARR_APPEND(trkSeg_t,anchors_da,2);
+ anchors(0).type = (index ==0)?SEG_FILCRCL:SEG_CRVLIN;
+ anchors(0).u.c.a1 = 360.0;
+ anchors(0).color = wDrawColorBlue;
+ anchors(0).u.c.radius = d/2;
+ anchors(0).u.c.center = p0;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ anchors(1).type = (index ==1)?SEG_FILCRCL:SEG_CRVLIN;
+ anchors(1).u.c.a1 = 360.0;
+ anchors(1).color = wDrawColorBlue;
+ anchors(1).u.c.radius = d/2;
+ anchors(1).u.c.center = p1;
+}
+void static CreateBoxAnchors(int index, pts_t pt[4]) {
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ double d = tempD.scale*0.15;
+ ANGLE_T a = FindAngle(pt[0].pt,pt[1].pt);
+ ANGLE_T diag = FindAngle(pt[0].pt,pt[2].pt);
+ for (int i=0;i<4;i++) {
+ DYNARR_SET(trkSeg_t,anchors_da,anchors_da.cnt+5);
+ DrawArrowHeads(&DYNARR_N(trkSeg_t,anchors_da,anchors_da.cnt-5),pt[i].pt,(diag>a?45.0:-45.0)+a+(90.0*(i)),TRUE,i==index?wDrawColorRed:wDrawColorBlue);
+ }
+ coOrd pp;
+ for (int i=0;i<4;i++) {
+ pp.x = (i==3?((((pt[0].pt.x - pt[i].pt.x)/2))+pt[i].pt.x):((pt[i+1].pt.x - pt[i].pt.x)/2)+pt[i].pt.x);
+ pp.y = (i==3?((((pt[0].pt.y - pt[i].pt.y)/2))+pt[i].pt.y):((pt[i+1].pt.y - pt[i].pt.y)/2)+pt[i].pt.y);
+ DYNARR_SET(trkSeg_t,anchors_da,anchors_da.cnt+5);
+ DrawArrowHeads(&DYNARR_N(trkSeg_t,anchors_da,anchors_da.cnt-5),pp,90.0*(i-1)+a,TRUE,i==index+5?wDrawColorRed:wDrawColorBlue);
+ }
+}
+
+void static CreateOriginAnchor(coOrd origin, wBool_t trans_selected) {
+ double d = tempD.scale*0.15;
+ DYNARR_APPEND(trkSeg_t,anchors_da,2);
+ int i = anchors_da.cnt-1;
+ coOrd p0,p1;
+ Translate(&p0,origin,0,d*4);
+ Translate(&p1,origin,0,-d*4);
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).u.l.pos[0] = p0;
+ anchors(i).u.l.pos[1] = p1;
+ anchors(i).color = wDrawColorBlue;
+ anchors(i).width = 0;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ Translate(&p0,origin,90,d*4);
+ Translate(&p1,origin,90,-d*4);
+ i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).u.l.pos[0] = p0;
+ anchors(i).u.l.pos[1] = p1;
+ anchors(i).color = wDrawColorBlue;
+ anchors(i).width = 0;
+}
+
+void static CreateCurveAnchors(int index, coOrd pm, coOrd pc, coOrd p0, coOrd p1) {
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ double d = tempD.scale*0.15;
+ DYNARR_APPEND(trkSeg_t,anchors_da,9);
+ anchors(0).type = (index ==0)?SEG_FILCRCL:SEG_CRVLIN;
+ anchors(0).u.c.a1 = 360.0;
+ anchors(0).color = wDrawColorBlue;
+ anchors(0).u.c.radius = d/2;
+ anchors(0).u.c.center = p0;
+ anchors(0).width = 0;
+ DYNARR_APPEND(trkSeg_t,anchors_da,8);
+ anchors(1).type = (index ==1)?SEG_FILCRCL:SEG_CRVLIN;
+ anchors(1).u.c.a1 = 360.0;
+ anchors(1).color = wDrawColorBlue;
+ anchors(1).u.c.radius = d/2;
+ anchors(1).u.c.center = p1;
+ anchors(1).width = 0;
+ DYNARR_SET(trkSeg_t,anchors_da,anchors_da.cnt+5);
+ DrawArrowHeads(&DYNARR_N(trkSeg_t,anchors_da,anchors_da.cnt-5),pm,FindAngle(pm,pc),TRUE,index==2?wDrawColorAqua:wDrawColorBlue);
+}
+
+void static CreatePolyAnchors(int index) {
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ double d = tempD.scale*0.15;
+ for ( int inx=0; inx<points_da.cnt; inx++ ) {
+ DYNARR_APPEND(trkSeg_t,anchors_da,3);
+
+ anchors(inx).type = point_selected(inx)?SEG_FILCRCL:SEG_CRVLIN;
+ anchors(inx).u.c.a0 = 0.0;
+ anchors(inx).u.c.a1 = 360.0;
+ anchors(inx).width = 0;
+ anchors(inx).color = wDrawColorBlue;
+ anchors(inx).u.c.radius = d/2;
+ anchors(inx).u.c.center = points(inx).pt;
+ }
+ if (index>=0) {
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int inx = anchors_da.cnt-1;
+ anchors(inx).type = SEG_STRLIN;
+ anchors(inx).u.l.pos[0] = points(index==0?points_da.cnt-1:index-1).pt;
+ anchors(inx).u.l.pos[1] = points(index).pt;
+ anchors(inx).color = wDrawColorBlue;
+ anchors(inx).width = 0;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ inx = anchors_da.cnt-1;
+ int index0 = index==0?points_da.cnt-1:index-1;
+ ANGLE_T an0 = FindAngle(points(index0).pt, points(index).pt);
+ ANGLE_T an1 = FindAngle(points(index0==0?points_da.cnt-1:index0-1).pt, points(index0).pt);
+ anchors(inx).type = SEG_CRVLIN;
+ if (DifferenceBetweenAngles(an0,an1)<=0) {
+ anchors(inx).u.c.a1 = DifferenceBetweenAngles(an0,an1)-180;
+ anchors(inx).u.c.a0 = an0;
+ } else {
+ anchors(inx).u.c.a1 = 180-DifferenceBetweenAngles(an0,an1);
+ anchors(inx).u.c.a0 = NormalizeAngle(180+an1);
+ }
+ anchors(inx).color = wDrawColorBlue;
+ anchors(inx).u.c.radius = d;
+ anchors(inx).u.c.center = points(index0).pt;
+ }
+}
+
+void CreateMovingAnchor(coOrd pos,BOOL_T fill) {
+ double d = tempD.scale*0.15;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int inx = anchors_da.cnt-1;
+ anchors(inx).type = fill?SEG_FILCRCL:SEG_CRVLIN;
+ anchors(inx).u.c.a0 = 0.0;
+ anchors(inx).u.c.a1 = 360.0;
+ anchors(inx).width = 0;
+ anchors(inx).color = wDrawColorBlue;
+ anchors(inx).u.c.radius = d/4;
+ anchors(inx).u.c.center = pos;
+}
+
+/*
+ * Modify Polygons. Polygons have a variable number of nodes.
+ *
+ * Each point has an anchor and selecting the node allows it to be moved
+ * Selecting a point between nodes adds a node ready for dragging
+ * The last selected node can be deleted
+ *
+ */
+STATUS_T DrawGeomPolyModify(
+ wAction_t action,
+ coOrd pos,
+ drawModContext_t *context) {
+ double d;
+ static int selected_count;
+ static int segInx;
+ static int prev_inx;
+ static wDrawColor save_color;
+ static wBool_t drawnAngle;
+ static double currentAngle;
+ static double baseAngle;
+ static BOOL_T lock;
+
+ switch ( action&0xFF ) {
+ case C_START:
+ lock = FALSE;
+ DistanceSegs( context->orig, context->angle, context->segCnt, context->segPtr, &pos, &segInx );
+ if (segInx == -1)
+ return C_ERROR;
+ if (context->type != SEG_POLY && context->type != SEG_FILPOLY)
+ return C_ERROR;
+ prev_inx = -1;
+ polyState = POLY_SELECTED;
+ polyInx = -1;
+ //Copy points
+ DYNARR_RESET( pts_t, points_da);
+ DYNARR_RESET( wBool_t, select_da);
+ for (int inx=0;inx<context->segPtr->u.p.cnt;inx++) {
+ DYNARR_APPEND(pts_t, points_da,3);
+ DYNARR_APPEND(wBool_t,select_da,3);
+ REORIGIN( points(inx).pt, context->segPtr[segInx].u.p.pts[inx].pt, context->angle, context->orig );
+ points(inx).pt_type = context->segPtr[segInx].u.p.pts[inx].pt_type;
+ point_selected(inx) = FALSE;
+ }
+ context->prev_inx = -1;
+ context->max_inx = points_da.cnt-1;
+ selected_count=0;
+ rotate_origin = context->orig;
+ rotate_angle = context->angle;
+ context->p0 = points(0).pt;
+ context->p1 = points(1).pt;
+ //Show points
+ tempSegs_da.cnt = 1;
+ tempSegs(0).width = context->segPtr->width;
+ save_color = context->segPtr->color;
+ tempSegs(0).color = wDrawColorRed;
+ tempSegs(0).type = context->type;
+ tempSegs(0).u.p.cnt = context->segPtr[segInx].u.p.cnt;
+ tempSegs(0).u.p.angle = 0.0;
+ tempSegs(0).u.p.orig = zero;
+ tempSegs(0).u.p.polyType = context->segPtr[segInx].u.p.polyType;
+ tempSegs(0).u.p.pts = &points(0);
+ CreatePolyAnchors( -1);
+ InfoMessage(_("Select points or use context menu"));
+ ClrAllTrkBitsRedraw( TB_UNDRAWN, TRUE );
+ UndrawNewTrack( context->trk );
+ return C_CONTINUE;
+ case wActionMove:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ CreatePolyAnchors(context->prev_inx);
+ for (int i = 0; i<points_da.cnt; i++) {
+ if (IsClose(FindDistance(pos,points(i).pt))) {
+ CreateMovingAnchor(points(i).pt,TRUE);
+ return C_CONTINUE;
+ }
+ }
+ int pInx=0;
+ coOrd pm0,pm1;
+ DIST_T dm = 10000.0;
+ for ( int inx=0; inx<points_da.cnt; inx++ ) {
+ pm0 = pos;
+ DIST_T ddm = LineDistance( &pm0, points( inx==0?points_da.cnt-1:inx-1).pt, points(inx).pt );
+ if ( dm > ddm ) {
+ dm = ddm;
+ pm1 = pm0;
+ pInx = inx;
+ }
+ }
+ if (!IsClose(dm)) return C_CONTINUE;
+ int inxm = pInx==0?points_da.cnt-1:pInx-1;
+ dm = FindDistance( points(inxm).pt, pm1 );
+ DIST_T ddm = FindDistance( points(inxm).pt, points(pInx).pt );
+ if ( (dm > 0.25*ddm) && (dm < 0.75*ddm)) {
+ CreateMovingAnchor(pm1,FALSE);
+ } else {
+ if (dm < FindDistance( points(pInx).pt, pm1 ))
+ CreateMovingAnchor(points(inxm).pt,TRUE);
+ else
+ CreateMovingAnchor(points(pInx).pt,TRUE);
+ }
+ return C_CONTINUE;
+ break;
+ case C_DOWN:
+ d = 10000.0;
+ polyInx = -1;
+ coOrd p0;
+ double dd;
+ int inx;
+ if ((MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL|WKEY_ALT)) != WKEY_SHIFT) {
+ if (selected_count <2 ) {
+ //Wipe out selection(s) if we don't have multiple already (i,e. move with >1 selected)
+ for (int i=0;i<points_da.cnt;i++) {
+ point_selected(i) = FALSE;
+ }
+ selected_count = 0;
+ } else {
+ for (int i=0;i<points_da.cnt;i++) {
+ if (IsClose(FindDistance(pos,points(i).pt)) && point_selected(i)==TRUE) {
+ point_selected(i) = FALSE;
+ selected_count--;
+ }
+ }
+ }
+ }
+ //Select Point (polyInx)
+ for ( int inx=0; inx<points_da.cnt; inx++ ) {
+ p0 = pos;
+ dd = LineDistance( &p0, points( inx==0?points_da.cnt-1:inx-1).pt, points(inx).pt );
+ if ( d > dd ) {
+ d = dd;
+ polyInx = inx;
+ }
+ }
+ if (!IsClose(d)) { //Not on/near object - de-select all points
+ for (int i=0;i<points_da.cnt;i++) {
+ point_selected(i) = FALSE;
+ }
+ polyInx = -1;
+ selected_count = 0;
+ CreatePolyAnchors( -1);
+ context->prev_inx = -1;
+ return C_CONTINUE; //Not close to any line
+ }
+ polyState = POLYPOINT_SELECTED;
+ inx = polyInx==0?points_da.cnt-1:polyInx-1;
+ //Find if the point is to be added
+ d = FindDistance( points(inx).pt, pos );
+ dd = FindDistance( points(inx).pt, points(polyInx).pt );
+ if ( d < 0.25*dd ) {
+ polyInx = inx;
+ } else if ( d > 0.75*dd ) {
+ ;
+ } else {
+ if (selected_count == 0) { //Only add a new point if no points are already selected!
+ DYNARR_APPEND(wBool_t,select_da,1);
+ for (int i=0;i<select_da.cnt;i++) {
+ if (i == polyInx) point_selected(i) = TRUE;
+ else point_selected(i) = FALSE;
+ }
+ selected_count=1;
+ DYNARR_APPEND(pts_t,points_da,1);
+ tempSegs(0).u.p.pts = &points(0);
+ for (inx=points_da.cnt-1; inx>polyInx; inx-- ) {
+ points(inx) = points(inx-1);
+ }
+ points(polyInx).pt_type = wPolyLineStraight;
+ tempSegs(0).u.p.cnt = points_da.cnt;
+ context->max_inx = points_da.cnt-1;
+ }
+ }
+ //If already selected (multiple points), not using shift (to add) select, and on object move to first point
+ if (selected_count>0 && ((MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL|WKEY_ALT)) != WKEY_SHIFT)) {
+ for (int i=0; i<points_da.cnt;i++) {
+ if (IsClose(FindDistance(pos,points(i).pt))) {
+
+ point_selected(i) = FALSE;
+
+ }
+ if (point_selected(i) == TRUE) {
+ polyInx = i;
+ }
+ }
+ }
+ pos = points(polyInx).pt; //Move to point
+ if (point_selected(polyInx)) { //Already selected
+ } else {
+ point_selected(polyInx) = TRUE;
+ ++selected_count;
+ }
+ //Work out before and after point
+ int first_inx = -1;
+ if (selected_count >0 && selected_count < points_da.cnt-2) {
+ for (int i=0; i<points_da.cnt;i++) {
+ if (point_selected(i)) {
+ first_inx = i;
+ break;
+ }
+ }
+ }
+ int last_inx = -1, next_inx = -1;
+ ANGLE_T an1, an0;
+ if (first_inx >=0) {
+ if (first_inx == 0) {
+ last_inx = points_da.cnt-1;
+ } else {
+ last_inx = first_inx-1;
+ }
+ if (first_inx == points_da.cnt-1) {
+ next_inx = 0;
+ } else {
+ next_inx = first_inx+1;
+ }
+ context->length = FindDistance(points(last_inx).pt,points(first_inx).pt);
+ an1 = FindAngle(points(last_inx).pt,points(first_inx).pt);
+ an0 = FindAngle(points(last_inx==0?(points_da.cnt-1):(last_inx-1)).pt,points(last_inx).pt);
+ if (DifferenceBetweenAngles(an0,an1)<=0) {
+ context->rel_angle = 180+DifferenceBetweenAngles(an0,an1);
+ } else {
+ context->rel_angle = 180-DifferenceBetweenAngles(an0,an1);
+ }
+ } else {
+
+ }
+ context->prev_inx = first_inx;
+ context->p0 = points(0).pt;
+ context->p1 = points(1).pt;
+ //Show three anchors only
+ CreatePolyAnchors(first_inx);
+ return C_CONTINUE;
+ case C_LDOUBLE:
+ return C_CONTINUE;
+ case C_MOVE:
+ tempSegs_da.cnt = 1;
+ if (polyState != POLYPOINT_SELECTED) {
+ return C_CONTINUE;
+ }
+ //Moving with Point Selected
+ if (polyInx<0) return C_ERROR;
+ first_inx = -1;
+ if (selected_count >0 && selected_count < points_da.cnt-2) {
+ for (int i=0; i<points_da.cnt;i++) {
+ if (point_selected(i)) {
+ first_inx = i;
+ break;
+ }
+ }
+ }
+ last_inx = -1;
+ next_inx = -1;
+ coOrd intersect;
+ wBool_t show_intersect = FALSE;
+ if (first_inx >=0) {
+ if (first_inx == 0) {
+ last_inx = points_da.cnt-1;
+ } else {
+ last_inx = first_inx-1;
+ }
+ if (first_inx == points_da.cnt-1) {
+ next_inx = 0;
+ } else {
+ next_inx = first_inx+1;
+ }
+ //Lock to 90 degrees first/last point
+ if ((MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL|WKEY_ALT)) == WKEY_SHIFT ) {
+ ANGLE_T last_angle,next_angle;
+ coOrd last_point,next_point;
+ if (first_inx == 0) {
+ last_point = points(points_da.cnt-1).pt;
+ last_angle = FindAngle(points(points_da.cnt-2).pt,last_point);
+ } else if (first_inx == 1) {
+ last_point = points(0).pt;
+ last_angle = FindAngle(points(points_da.cnt-1).pt,last_point);
+ } else {
+ last_point = points(first_inx-1).pt;
+ last_angle = FindAngle(points(first_inx-2).pt,last_point);
+ }
+ if (first_inx == points_da.cnt-1) {
+ next_point = points(0).pt;
+ next_angle = FindAngle(next_point,points(1).pt);
+ } else if (first_inx == points_da.cnt-2){
+ next_point = points(points_da.cnt-1).pt;
+ next_angle = FindAngle(next_point,points(0).pt);
+ } else {
+ next_point = points(first_inx+1).pt;
+ next_angle = FindAngle(next_point,points(first_inx+2).pt);
+ }
+ coOrd diff;
+ diff.x = pos.x - points(polyInx).pt.x;
+ diff.y = pos.y - points(polyInx).pt.y;
+ coOrd pos_lock = points(first_inx).pt;
+ pos_lock.x += diff.x;
+ pos_lock.y += diff.y;
+ //Snap to Right-Angle from previous or from 0
+ DIST_T l = FindDistance(last_point, pos_lock);
+ ANGLE_T angle2 = NormalizeAngle(FindAngle(last_point, pos_lock)-last_angle);
+ int quad = (int)((angle2+45.0)/90.0);
+ if (tempSegs_da.cnt != 1 && (quad == 2)) {
+ pos_lock = last_point;
+ } else if (quad == 1 || quad == 3) {
+ l = fabs(l*cos(D2R(((quad==1)?last_angle+90.0:last_angle-90.0)-FindAngle(pos_lock,last_point))));
+ Translate( &pos_lock, last_point, NormalizeAngle((quad==1)?last_angle+90.0:last_angle-90.0), l );
+ } else {
+ l = fabs(l*cos(D2R(((quad==0||quad==4)?last_angle:last_angle+180.0)-FindAngle(pos_lock,last_point))));
+ Translate( &pos_lock, last_point, NormalizeAngle((quad==0||quad==4)?last_angle:last_angle+180.0), l );
+ }
+ diff.x = pos_lock.x - points(first_inx).pt.x;
+ diff.y = pos_lock.y - points(first_inx).pt.y;
+ pos.x = points(polyInx).pt.x+diff.x;
+ pos.y = points(polyInx).pt.y+diff.y;
+ if (selected_count<2) {
+ if (FindIntersection(&intersect,last_point,last_angle+90.0,next_point,last_angle+180.0)) {
+ show_intersect = TRUE;
+ }
+ }
+ d = FindDistance(intersect,pos_lock);
+ if (IsClose(d)) {
+ pos = intersect;
+ }
+ InfoMessage( _("Length = %s, Last angle = %0.2f"),
+ FormatDistance(FindDistance(pos_lock,last_point)),
+ PutAngle(FindAngle(pos_lock,last_point)));
+
+ }
+ }
+ context->prev_inx = first_inx;
+ coOrd diff;
+ diff.x = pos.x - points(polyInx).pt.x;
+ diff.y = pos.y - points(polyInx).pt.y;
+ //points(polyInx) = pos;
+ for (int i=0;i<points_da.cnt;i++) {
+ if (point_selected(i)) {
+ points(i).pt.x = points(i).pt.x + diff.x;
+ points(i).pt.y = points(i).pt.y + diff.y;
+ }
+ }
+ if (first_inx>=0) {
+ context->length = FindDistance(points(first_inx).pt,points(last_inx).pt);
+ an1 = FindAngle(points(last_inx).pt,points(first_inx).pt);
+ an0 = FindAngle(points(first_inx==0?(points_da.cnt-1):(first_inx-1)).pt,points(first_inx).pt);
+ context->rel_angle = NormalizeAngle(180-(an1-an0));
+ }
+ CreatePolyAnchors(first_inx);
+ if (show_intersect)
+ CreateSquareAnchor(intersect);
+ context->p0 = points(0).pt;
+ context->p1 = points(1).pt;
+ return C_CONTINUE;
+ case C_UP:
+ context->prev_inx = -1;
+ if (segInx == -1 || polyState != POLYPOINT_SELECTED)
+ return C_CONTINUE; //Didn't get a point selected/added
+ polyState = POLY_SELECTED; //Return to base state
+ anchors_da.cnt = 0;
+ CreatePolyAnchors(polyInx); //Show last selection
+ prev_inx = polyInx;
+ for (int i=0;i<points_da.cnt;i++) {
+ if (point_selected(i)) {
+ first_inx = i;
+ break;
+ }
+ }
+ last_inx = first_inx==0?(points_da.cnt-1):(first_inx-1);
+ if (first_inx>=0) {
+ context->length = FindDistance(points(first_inx).pt,points(last_inx).pt);
+ an1 = FindAngle(points(last_inx).pt,points(first_inx).pt);
+ an0 = FindAngle(points(last_inx==0?(points_da.cnt-1):(last_inx-1)).pt,points(last_inx).pt);
+ if (DifferenceBetweenAngles(an0,an1)<=0) {
+ context->rel_angle = 180+DifferenceBetweenAngles(an0,an1);
+ } else {
+ context->rel_angle = 180-DifferenceBetweenAngles(an0,an1);
+ }
+ }
+ context->prev_inx = first_inx;
+ context->p0 = points(0).pt;
+ context->p1 = points(1).pt;
+ polyInx = -1;
+ return C_CONTINUE;
+ case C_UPDATE:
+ if (context->prev_inx>=0) {
+ int last_index = context->prev_inx==0?(points_da.cnt-1):(context->prev_inx-1);
+ an0 = FindAngle(points(last_index==0?(points_da.cnt-1):(last_index-1)).pt,points(last_index).pt);
+ an1 = FindAngle(points(last_index).pt,points(context->prev_inx).pt);
+ if (DifferenceBetweenAngles(an0,an1)<=0) {
+ an1 = NormalizeAngle(an0-(180-context->rel_angle));
+ } else {
+ an1 = NormalizeAngle((180-context->rel_angle)+an0);
+ }
+ Translate(&points(prev_inx).pt,points(last_index).pt,an1,context->length);
+ }
+ context->rel_angle = fabs(context->rel_angle);
+ if (context->rel_angle >180) context->rel_angle = context->rel_angle - 180.0;
+ CreatePolyAnchors(prev_inx);
+ context->p0 = points(0).pt;
+ context->p1 = points(1).pt;
+ break;
+ case C_TEXT:
+ if (action>>8 == 'o') { //"o" -> origin mode
+ MenuMode(1);
+ InfoMessage("Move Origin Mode: Place Origin, p for Points, Enter or Esc");
+ return C_CONTINUE;
+ }
+ if (((prev_inx>=0 && tempSegs(0).u.p.polyType != POLYLINE) || (prev_inx>=1 && prev_inx<=points_da.cnt-2)) &&
+ ((action>>8 == 's') || (action>>8 == 'v') || (action>>8 == 'r'))) {
+ switch(action>>8) {
+ case 's':
+ points(context->prev_inx).pt_type = wPolyLineSmooth;
+ break;
+ case 'v':
+ points(context->prev_inx).pt_type = wPolyLineStraight;
+ break;
+ case 'r':
+ points(context->prev_inx).pt_type = wPolyLineRound;
+ break;
+ default:
+ return C_CONTINUE;
+ }
+ }
+ if ((action>>8 == 'g') && (tempSegs(0).type == SEG_POLY) && (tempSegs(0).u.p.polyType == POLYLINE) ) {
+ tempSegs(0).u.p.polyType = FREEFORM;
+ context->subtype=FREEFORM;
+ context->open = FALSE;
+ CreatePolyAnchors( -1);
+ return C_CONTINUE;
+ }
+ if ((action>>8 == 'l') && (tempSegs(0).type == SEG_POLY) && (tempSegs(0).u.p.polyType == FREEFORM)) {
+ tempSegs(0).u.p.polyType = POLYLINE;
+ context->subtype=POLYLINE;
+ context->open = TRUE;
+ CreatePolyAnchors( -1);
+ return C_CONTINUE;
+ }
+ if ((action>>8 == 'f') && (tempSegs(0).type == SEG_POLY) && (tempSegs(0).u.p.polyType != POLYLINE )) {
+ tempSegs(0).type = SEG_FILPOLY;
+ context->type = SEG_FILPOLY;
+ context->filled = TRUE;
+ CreatePolyAnchors( -1);
+ return C_CONTINUE;
+ }
+ if ((action>>8 == 'u') && (tempSegs(0).type == SEG_FILPOLY) ) {
+ tempSegs(0).type = SEG_POLY;
+ context->type = SEG_POLY;
+ context->filled = FALSE;
+ CreatePolyAnchors( -1);
+ return C_CONTINUE;
+ }
+ //Delete or backspace deletes last selected index
+ if (action>>8 == 127 || action>>8 == 8) {
+ if (polyState == POLY_SELECTED && prev_inx >=0) {
+ if (selected_count >1) {
+ ErrorMessage( MSG_POLY_MULTIPLE_SELECTED );
+ return C_CONTINUE;
+ }
+ if (points_da.cnt <= 3) {
+ ErrorMessage( MSG_POLY_SHAPES_3_SIDES );
+ return C_CONTINUE;
+ }
+ for (int i=0;i<points_da.cnt;i++) {
+ point_selected(i) = FALSE;
+ if (i>=prev_inx && i<points_da.cnt-1)
+ points(i) = points(i+1);
+ }
+ points_da.cnt--;
+ select_da.cnt--;
+ selected_count=0;
+ tempSegs(0).u.p.cnt = points_da.cnt;
+ context->max_inx = points_da.cnt-1;
+ }
+ prev_inx = -1;
+ context->prev_inx = -1;
+ polyInx = -1;
+ polyState = POLY_SELECTED;
+ CreatePolyAnchors( -1);
+ InfoMessage(_("Point Deleted"));
+ return C_CONTINUE;
+ }
+ if (action>>8 != 32 && action>>8 != 13) return C_CONTINUE;
+ /* no break */
+ case C_FINISH:
+ //copy changes back into track
+ if (polyState != POLY_SELECTED) return C_TERMINATE;
+ pts_t * oldPts = context->segPtr[segInx].u.p.pts;
+ void * newPts = (pts_t*)MyMalloc( points_da.cnt * sizeof (pts_t) );
+ context->segPtr[segInx].u.p.pts = newPts;
+ context->segPtr->u.p.cnt = points_da.cnt;
+ context->orig = rotate_origin;
+ context->angle = rotate_angle;
+ for (int i=0; i<points_da.cnt; i++) {
+ pos = points(i).pt;
+ pos.x -= context->orig.x;
+ pos.y -= context->orig.y;
+ Rotate( &pos, zero, -context->angle );
+ context->segPtr[segInx].u.p.pts[i].pt = pos;
+ context->segPtr[segInx].u.p.pts[i].pt_type = points(i).pt_type;
+ }
+ MyFree(oldPts);
+ oldPts = NULL;
+ polyState = POLY_NONE;
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ DYNARR_RESET(trkSeg_t,tempSegs_da);
+ DrawNewTrack( context->trk );
+ return C_TERMINATE;
+ case C_REDRAW:
+ if (polyState == POLY_NONE) return C_CONTINUE;
+ DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt,trackGauge, wDrawColorBlack);
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
+ break;
+ default:
+ ;
+ }
+ return C_CONTINUE;
+}
+
+void BuildCircleContext(drawModContext_t * context,int segInx) {
+ context->radius = fabs(context->segPtr[segInx].u.c.radius);
+ REORIGIN( context->pc, context->segPtr[segInx].u.c.center, context->angle, context->orig );
+ PointOnCircle( &context->p0, context->segPtr[segInx].u.c.center, fabs(context->segPtr[segInx].u.c.radius), context->segPtr[segInx].u.c.a0 );
+ REORIGIN( context->p0, context->p0, context->angle, context->orig );
+ PointOnCircle( &context->p1, context->segPtr[segInx].u.c.center, fabs(context->segPtr[segInx].u.c.radius), context->segPtr[segInx].u.c.a0 + context->segPtr[segInx].u.c.a1);
+ REORIGIN( context->p1, context->p1, context->angle, context->orig );
+ if (context->segPtr[segInx].u.c.a1<360) {
+ context->arc_angle = context->segPtr[segInx].u.c.a1;
+ PointOnCircle( &context->pm, context->segPtr[segInx].u.c.center, fabs(context->segPtr[segInx].u.c.radius), context->segPtr[segInx].u.c.a0 + (context->segPtr[segInx].u.c.a1/2));
+ REORIGIN( context->pm, context->pm, context->angle, context->orig );
+ coOrd cm;
+ cm = context->pm;
+ ANGLE_T a = FindAngle(context->p1,context->p0);
+ Rotate(&cm,context->p1,-a );
+ context->disp = cm.x-context->p1.x;
+ } else {
+ context->pm = context->p0;
+ context->disp = 0;
+ context->arc_angle = 360.0;
+ }
+}
+
+void CreateSelectedAnchor(coOrd pos) {
+ double d = tempD.scale*0.15;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int inx = anchors_da.cnt-1;
+ anchors(inx).type = SEG_FILCRCL;
+ anchors(inx).u.c.a0 = 0.0;
+ anchors(inx).u.c.a1 = 360.0;
+ anchors(inx).color = wDrawColorBlue;
+ anchors(inx).u.c.radius = d/2;
+ anchors(inx).u.c.center = pos;
+}
+
+/*
+ * Rotate Object Dialogs.
+ *
+ * Each Draw object has a rotation origin which all the points are offset from.
+ * Formerly this has been set to the origin, but it doesn't have to be. By setting
+ * to a point on the shape this allows assembly by aligning parts to a common point on a base object.
+ * The angle is always set to zero when the Modify finishes but can be altered via Describe.
+ *
+ * First locate the origin, and then place a rotation arm which is (optionally) rotated about the origin.
+ * Also supports whole object translate using translate anchor.
+ **/
+
+STATUS_T DrawGeomOriginMove(
+ wAction_t action,
+ coOrd pos,
+ drawModContext_t * context) {
+
+ switch ( action&0xFF ) {
+ case C_START:
+ context->state = MOD_ORIGIN;
+ context->rotate_state = TRUE;
+ context->rot_moved = TRUE;
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ CreateOriginAnchor(context->rot_center,FALSE);
+ if ((tempSegs(0).type == SEG_POLY || tempSegs(0).type == SEG_FILPOLY) && (context->prev_inx>=0)) {
+ CreateSelectedAnchor(points(context->prev_inx).pt);
+ }
+ InfoMessage("Move Origin Mode: Place Origin, 0-4, c or l, Enter or Esc");
+ return C_CONTINUE;
+ break;
+ case wActionMove:
+ CreateOriginAnchor(context->rot_center, TRUE);
+ if ((tempSegs(0).type == SEG_POLY || tempSegs(0).type == SEG_FILPOLY) && (context->prev_inx>=0)) {
+ CreateSelectedAnchor(points(context->prev_inx).pt);
+ }
+ return C_CONTINUE;
+ break;
+ case C_DOWN:
+ if (context->state == MOD_ORIGIN || context->state == MOD_AFTER_ORIG) {
+ context->state = MOD_ORIGIN;
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ if (IsClose(FindDistance(pos,context->rot_center))) {
+ pos = context->rot_center;
+ } else {
+ context->rot_center = pos;
+ }
+ CreateOriginAnchor(context->rot_center, TRUE);
+ if ((tempSegs(0).type == SEG_POLY || tempSegs(0).type == SEG_FILPOLY) && (context->prev_inx>=0)) {
+ CreateSelectedAnchor(points(context->prev_inx).pt);
+ }
+ }
+ return C_CONTINUE;
+ break;
+ case C_MOVE:
+ if (context->state == MOD_ORIGIN || context->state == MOD_AFTER_ORIG){
+ context->rot_center = pos;
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ CreateOriginAnchor(context->rot_center, TRUE);
+ if ((tempSegs(0).type == SEG_POLY || tempSegs(0).type == SEG_FILPOLY) && (context->prev_inx>=0)) {
+ CreateSelectedAnchor(points(context->prev_inx).pt);
+ }
+ }
+ return C_CONTINUE;
+ break;
+ case C_UP:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ if (context->state == MOD_ORIGIN) {
+ context->state = MOD_AFTER_ORIG;
+ }
+ CreateOriginAnchor(context->rot_center,FALSE);
+ if ((tempSegs(0).type == SEG_POLY || tempSegs(0).type == SEG_FILPOLY) && (context->prev_inx>=0)) {
+ CreateSelectedAnchor(points(context->prev_inx).pt);
+ }
+ return C_CONTINUE;
+ break;
+ case C_UPDATE:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ if (context->state == MOD_AFTER_ORIG) {
+ if (context->rot_center.x != context->rel_center.x &&
+ context->rot_center.y != context->rel_center.y ) {
+ context->rel_center = context->rot_center;
+ CreateOriginAnchor(context->rot_center, FALSE);
+ if ((tempSegs(0).type == SEG_POLY || tempSegs(0).type == SEG_FILPOLY) && (context->prev_inx>=0)) {
+ CreateSelectedAnchor(points(context->prev_inx).pt);
+ }
+ }
+ }
+ return C_CONTINUE;
+ break;
+ case C_TEXT:
+ if ((context->state == MOD_ORIGIN || context->state == MOD_AFTER_ORIG) &&
+ ((action>>8 >= '0' && action>>8 <= '1') || action>>8 == 'l' || action>>8 == 'm' || action>>8 == 'p')) {
+ // 0,1,2,3,4 -> reset rot center
+ if (action>>8 == '0') {
+ context->rot_center = zero;
+ } else if (action>>8 == '1') {
+ context->rot_center = context->p0;
+ } else if (action>>8 == '2') {
+ context->rot_center = context->p1;
+ } else if (tempSegs(0).type == SEG_POLY || tempSegs(0).type == SEG_FILPOLY) {
+ if (action>>8 == '3' || action>>8 == '4') {
+ context->rot_center = action>>8 == '3'?points(2).pt:points(3).pt;
+ } else if (action>>8 == 'l') { //"l" - last selected
+ if (context->prev_inx !=-1) {
+ context->rot_center = points(context->prev_inx).pt;
+ }
+ } else if (action>>8 == 'm') {
+ context->rot_center = FindCentroid(points_da.cnt,&points(0));
+ }
+ }
+ if (action>>8 == 'p') { //"p" - points mode
+ MenuMode(0);
+ return C_CONTINUE;
+ }
+ context->rel_center = context->rot_center;
+ context->rot_angle = 0;
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ context->state = MOD_AFTER_ORIG;
+ CreateOriginAnchor(context->rot_center, FALSE);
+ if ((tempSegs(0).type == SEG_POLY || tempSegs(0).type == SEG_FILPOLY) && (context->prev_inx>=0)) {
+ CreateSelectedAnchor(points(context->prev_inx).pt);
+ }
+ return C_CONTINUE;
+ }
+ break;
+ case C_FINISH:
+ context->rotate_state = FALSE;
+ context->state = MOD_STARTED;
+ return C_CONTINUE;
+ break;
+ default:
+ break;
+ }
+ return C_CONTINUE;
+
+
+}
+
+/*
+ * Base Modify function for Draw objects.
+ */
STATUS_T DrawGeomModify(
- coOrd orig,
- ANGLE_T angle,
- wIndex_t segCnt,
- trkSeg_p segPtr,
wAction_t action,
coOrd pos,
- wBool_t selected)
+ drawModContext_t * context)
{
ANGLE_T a;
- coOrd p0, p1, pc;
+ coOrd p0, p1, pc, pm;
static coOrd start_pos;
static wIndex_t segInx;
static EPINX_T segEp;
static ANGLE_T segA1;
- static int polyInx, inx_other, inx_line, inx_origin;
+ static int inx_other, inx_line, inx_origin;
static BOOL_T corner_mode;
+ static BOOL_T polyMode;
+ static ANGLE_T original_angle;
int inx, inx1, inx2;
DIST_T d, d1, d2, dd;
coOrd * newPts = NULL;
- int mergePoints;
tempSegs_da.cnt = 1;
- switch ( action ) {
- case C_DOWN:
+ switch ( action&0xFF ) {
+ case C_START:
+ if (!context->rotate_state && !context->rot_moved) {
+ context->rot_center.x = context->orig.x;
+ context->rot_center.y = context->orig.y;
+ }
+ context->state = MOD_STARTED;
+ context->rotate_state = FALSE;
+ context->last_inx=-1;
+ lineInx = -1;
+ curveInx = -1;
segInx = -1;
- corner_mode = FALSE;
- DistanceSegs( orig, angle, segCnt, segPtr, &pos, &segInx );
+ polyMode = FALSE;
+ DistanceSegs( context->orig, context->angle, context->segCnt, context->segPtr, &pos, &segInx );
if (segInx == -1)
return C_ERROR;
- tempSegs(0).width = segPtr[segInx].width;
- tempSegs(0).color = segPtr[segInx].color;
- switch ( segPtr[segInx].type ) {
+ context->type = context->segPtr[segInx].type;
+ switch(context->type) {
+ case SEG_TBLEDGE:
+ case SEG_STRLIN:
+ case SEG_DIMLIN:
+ case SEG_BENCH:
+ REORIGIN( p0, context->segPtr[segInx].u.l.pos[0], context->angle, context->orig );
+ REORIGIN( p1, context->segPtr[segInx].u.l.pos[1], context->angle, context->orig );
+ tempSegs(0).type = SEG_STRLIN;
+ tempSegs(0).color = wDrawColorRed;
+ tempSegs(0).u.l.pos[0] = p0;
+ tempSegs(0).u.l.pos[1] = p1;
+ tempSegs(0).width = 0;
+ tempSegs_da.cnt = 1;
+ context->p0 = p0;
+ context->p1 = p1;
+ CreateLineAnchors(-1,p0,p1);
+ break;
+ case SEG_CRVLIN:
+ case SEG_FILCRCL:
+ BuildCircleContext(context,segInx);
+ tempSegs(0).type = SEG_CRVLIN;
+ tempSegs(0).color = wDrawColorRed;
+ tempSegs(0).u.c.center = context->pc;
+ tempSegs(0).u.c.radius = context->radius;
+ tempSegs(0).u.c.a0 = context->segPtr[segInx].u.c.a0;
+ tempSegs(0).u.c.a1 = context->segPtr[segInx].u.c.a1;
+ tempSegs(0).width = 0;
+ tempSegs_da.cnt = 1;
+ if (tempSegs(0).u.c.a1<360.0) {
+ CreateCurveAnchors(-1,context->pm,context->pc,context->p0,context->p1);
+ } else
+ CreateCircleAnchor(FALSE,tempSegs(0).u.c.center,tempSegs(0).u.c.radius,FindAngle(tempSegs(0).u.c.center,pos));
+ context->last_inx = 2;
+ break;
+ case SEG_POLY:
+ case SEG_FILPOLY:
+ if (context->segPtr[segInx].u.p.polyType !=RECTANGLE) {
+ polyMode = TRUE;
+ return DrawGeomPolyModify(action,pos,context);
+ } else {
+ tempSegs(0).type = SEG_POLY;
+ tempSegs(0).color = wDrawColorRed;
+ DYNARR_RESET( pts_t, points_da);
+ for (int inx=0;inx<context->segPtr->u.p.cnt;inx++) {
+ DYNARR_APPEND(pts_t, points_da,3);
+ REORIGIN( points(inx).pt, context->segPtr[segInx].u.p.pts[inx].pt, context->angle, context->orig );
+ }
+ tempSegs(0).u.p.pts = &points(0);
+ tempSegs(0).u.p.cnt = points_da.cnt;
+ tempSegs(0).width = 0;
+ tempSegs_da.cnt = 1;
+ context->p0 = points(0).pt;
+ CreateBoxAnchors(-1,&context->segPtr[segInx].u.p.pts[0]);
+ context->p0 = points(0).pt;
+ context->p1 = points(1).pt;
+ }
+ break;
+ case SEG_TEXT:
+ InfoMessage("Text can only be modified with Describe");
+ wBeep();
+ return C_ERROR;
+ default:
+ ;
+ }
+ InfoMessage("Points Mode - Select and drag Anchor Point");
+ return C_CONTINUE;
+ break;
+ case wActionMove:
+ if (context->rotate_state) return DrawGeomOriginMove(action,pos,context);
+ if (polyMode) return DrawGeomPolyModify(action,pos,context);
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ switch( context->type) {
case SEG_TBLEDGE:
-
case SEG_STRLIN:
case SEG_DIMLIN:
case SEG_BENCH:
- REORIGIN( p0, segPtr[segInx].u.l.pos[0], angle, orig );
- REORIGIN( p1, segPtr[segInx].u.l.pos[1], angle, orig );
- tempSegs(0).type = segPtr[segInx].type;
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ CreateLineAnchors(lineInx,context->p0,context->p1);
+ dd = FindDistance( context->p0, pos );
+ if ( IsClose(dd)) {
+ CreateMovingAnchor(context->p0,TRUE);
+ } else {
+ dd = FindDistance( context->p1, pos );
+ if ( IsClose(dd)) {
+ CreateMovingAnchor(context->p1,TRUE);
+ }
+ }
+ break;
+ case SEG_CRVLIN:
+ case SEG_FILCRCL:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ if (tempSegs(0).u.c.a1 < 360.0)
+ CreateCurveAnchors(curveInx,context->pm,context->pc,context->p0,context->p1);
+ dd = FindDistance( context->p0, pos );
+ if ( IsClose(dd)) {
+ CreateMovingAnchor(context->p0,TRUE);
+ } else {
+ dd = FindDistance( context->p1, pos );
+ if ( IsClose(dd)) {
+ CreateMovingAnchor(context->p1,TRUE);
+ } else {
+ dd = FindDistance( context->pm, pos );
+ if ( IsClose(dd)) {
+ CreateMovingAnchor(context->pm,TRUE);
+ }
+ }
+ }
+ break;
+ case SEG_POLY:
+ case SEG_FILPOLY:;
+ CreateBoxAnchors(-1,&points(0));
+ break;
+ default:;
+ }
+ return C_CONTINUE;
+ break;
+ case C_DOWN:
+ if (context->rotate_state) return DrawGeomOriginMove(action,pos,context);
+ if (polyMode) return DrawGeomPolyModify(action,pos,context);
+ corner_mode = FALSE;
+ segInx = 0;
+ context->state = MOD_STARTED;
+ tempSegs(0).width = context->segPtr[segInx].width;
+ tempSegs(0).color = context->segPtr[segInx].color;
+ switch ( context->type ) {
+ case SEG_TBLEDGE:
+ if ( MyGetKeyState() & WKEY_CTRL )
+ OnTableEdgeEndPt( NULL, &pos );
+ case SEG_STRLIN:
+ case SEG_DIMLIN:
+ case SEG_BENCH:
+ p0 = context->p0;
+ p1 = context->p1;
+ lineInx = -1;
+ dd = FindDistance( p0, pos );
+ if ( IsClose(dd)) {
+ lineInx = 0;
+ } else {
+ dd = FindDistance( p1, pos );
+ if ( IsClose(dd)) {
+ lineInx = 1;
+ }
+ }
+ if (lineInx < 0 ) {
+ InfoMessage( _("Not close to end of line"));
+ } else {
+ InfoMessage("End selected, drag to reposition");
+ context->state = MOD_SELECTED_PT;
+ }
+ tempSegs(0).color = wDrawColorBlack;
+ tempSegs(0).width = 0;
+ tempSegs(0).type = context->type;
tempSegs(0).u.l.pos[0] = p0;
tempSegs(0).u.l.pos[1] = p1;
- tempSegs(0).u.l.option = segPtr[segInx].u.l.option;
+ tempSegs(0).u.l.option = context->segPtr[segInx].u.l.option;
segA1 = FindAngle( p1, p0 );
+ tempSegs_da.cnt = 1;
+ CreateLineAnchors(lineInx,p0,p1);
break;
case SEG_CRVLIN:
case SEG_FILCRCL:
- REORIGIN( pc, segPtr[segInx].u.c.center, angle, orig )
- tempSegs(0).type = segPtr[segInx].type;
- tempSegs(0).u.c.center = pc;
- tempSegs(0).u.c.radius = fabs(segPtr[segInx].u.c.radius);
- if (segPtr[segInx].u.c.a1 >= 360.0) {
+ curveInx = -1;
+ tempSegs(0).color = wDrawColorBlack;
+ tempSegs(0).width = 0;
+ tempSegs(0).type = context->type;
+ tempSegs(0).u.c.center = context->pc;
+ tempSegs(0).u.c.radius = context->radius;
+ if (context->segPtr[segInx].u.c.a1 >= 360.0) {
tempSegs(0).u.c.a0 = 0.0;
tempSegs(0).u.c.a1 = 360.0;
+ InfoMessage("Drag to Change Radius");
+ CreateCircleAnchor(TRUE,tempSegs(0).u.c.center,tempSegs(0).u.c.radius,FindAngle(tempSegs(0).u.c.center,pos));
} else {
- tempSegs(0).u.c.a0 = NormalizeAngle( segPtr[segInx].u.c.a0+angle );
- tempSegs(0).u.c.a1 = segPtr[segInx].u.c.a1;
- segA1 = NormalizeAngle( segPtr[segInx].u.c.a0 + segPtr[segInx].u.c.a1 + angle );
- PointOnCircle( &p0, pc, fabs(segPtr[segInx].u.c.radius), segPtr[segInx].u.c.a0+angle );
- PointOnCircle( &p1, pc, fabs(segPtr[segInx].u.c.radius), segPtr[segInx].u.c.a0+segPtr[segInx].u.c.a1+angle );
+ p0 = context->p0;
+ p1 = context->p1;
+ pm = context->pm;
+ pc = context->pc;
+ tempSegs(0).u.c.a0 = FindAngle(context->pc,context->p0);
+ tempSegs(0).u.c.a1 = DifferenceBetweenAngles(FindAngle(context->pc,context->p0),FindAngle(context->pc,context->p1));
+ tempSegs(0).u.c.center = context->pc;
+ tempSegs(0).u.c.radius = context->radius;
+ curveInx = -1;
+ dd = FindDistance( p0, pos );
+ if ( IsClose(dd)) {
+ curveInx = 0;
+ } else {
+ dd = FindDistance( p1, pos );
+ if ( IsClose(dd)) {
+ curveInx = 1;
+ } else {
+ dd = FindDistance( pm, pos );
+ if ( IsClose(dd)) {
+ curveInx = 2;
+ }
+ }
+ }
+ if (curveInx < 0) {
+ InfoMessage( _("Not close to ends or middle of mine, reselect"));
+ return C_CONTINUE;
+ } else {
+ if (curveInx <2 )
+ InfoMessage("Drag to move end, +Ctrl to lock to other objects");
+ else
+ InfoMessage("Drag to change radius");
+ }
+ tempSegs_da.cnt = 1;
+ if (tempSegs(0).u.c.a1 < 360.0)
+ CreateCurveAnchors(curveInx,pm,pc,p0,p1);
}
-
+ context->state = MOD_SELECTED_PT;
break;
case SEG_POLY:
case SEG_FILPOLY:
- tempSegs(0).type = segPtr[segInx].type;
- tempSegs(0).u.p.cnt = segPtr[segInx].u.p.cnt;
- tempSegs(0).u.p.angle = 0.0;
- tempSegs(0).u.p.orig = zero;
- tempSegs(0).u.p.polyType = segPtr[segInx].u.p.polyType;
- DYNARR_SET( coOrd, points_da, segPtr[segInx].u.p.cnt+1 );
- tempSegs(0).u.p.pts = &points(0);
d = 10000;
polyInx = 0;
- for ( inx=0; inx<segPtr[segInx].u.p.cnt; inx++ ) {
- REORIGIN( points(inx), segPtr[segInx].u.p.pts[inx], angle, orig );
- }
- for ( inx=0; inx<segPtr[segInx].u.p.cnt; inx++ ) {
+ for ( inx=0; inx<4; inx++ ) {
+ if (IsClose(FindDistance(pos,points(inx).pt))) {
+ corner_mode = TRUE;
+ polyInx = inx;
+ break;
+ }
p0 = pos;
- dd = LineDistance( &p0, points( inx==0?segPtr[segInx].u.p.cnt-1:inx-1), points( inx ) );
+ dd = LineDistance( &p0, points( inx==0?3:inx-1).pt, points( inx ).pt );
if ( d > dd ) {
d = dd;
- polyInx = inx;
+ inx_line = inx;
}
}
- if (segPtr[segInx].u.p.polyType == RECTANGLE) {
- d1 = FindDistance( points(polyInx), pos );
- d2 = FindDistance( points(polyInx==0?segPtr[segInx].u.p.cnt-1:polyInx-1), pos );
+ if (!corner_mode) {
+ d1 = FindDistance( points(inx_line).pt, pos );
+ d2 = FindDistance( points(inx_line==0?3:inx_line-1).pt, pos );
if (d2<d1) {
- inx_line = polyInx;
- polyInx = polyInx==0?segPtr[segInx].u.p.cnt-1:polyInx-1;
+ polyInx = inx_line==0?3:inx_line-1;
} else {
- inx_line = polyInx==0?segPtr[segInx].u.p.cnt-1:polyInx-1;
+ polyInx = inx_line;
}
- //polyInx is closest point
- inx1 = (polyInx==0?3:polyInx-1); //Prev point
- inx2 = (polyInx==3?0:polyInx+1); //Next Point
- inx_origin = (inx2==3?0:inx2+1); //Opposite point
- if ( IsClose(d2) || IsClose(d1) ) {
- corner_mode = TRUE;
- pos = points(polyInx);
- start_pos = pos;
- DrawArrowHeads( &tempSegs(1), pos, FindAngle(points(polyInx),points(inx_origin)), TRUE, wDrawColorRed );
- tempSegs_da.cnt = 6;
- InfoMessage( _("Drag to Move Corner Point"));
- } else {
- corner_mode = FALSE;
- start_pos = pos;
- pos.x = (points(polyInx).x + points(inx_line).x)/2;
- pos.y = (points(polyInx).y + points(inx_line).y)/2;
- DrawArrowHeads( &tempSegs(1), pos, FindAngle(points(polyInx),pos)+90, TRUE, wDrawColorRed );
- tempSegs_da.cnt = 6;
- InfoMessage( _("Drag to Move Edge "));
- }
- return C_CONTINUE;
+ }
+ inx1 = (polyInx==0?3:polyInx-1); //Prev point
+ inx2 = (polyInx==3?0:polyInx+1); //Next Point
+ inx_origin = (inx2==3?0:inx2+1); //Opposite point
+ if ( corner_mode ) {
+ start_pos = pos;
+ pos = points(inx).pt;
+ DYNARR_SET(trkSeg_t,anchors_da,5);
+ DrawArrowHeads( &anchors(0), pos, FindAngle(points(polyInx).pt,points(inx_origin).pt), TRUE, wDrawColorRed );
+ InfoMessage( _("Drag to Move Corner Point"));
} else {
- inx = (polyInx==0?segPtr[segInx].u.p.cnt-1:polyInx-1);
- d = FindDistance( points(inx), pos );
- dd = FindDistance( points(inx), points(polyInx) );
- if ( d < 0.25*dd ) {
- polyInx = inx;
- } else if ( d > 0.75*dd ) {
- ;
- } else {
- tempSegs(0).u.p.cnt++;
- for (inx=points_da.cnt-1; inx>polyInx; inx-- ) {
- points(inx) = points(inx-1);
- }
-/*fprintf( stderr, "Inserting vertix before %d\n", polyInx );*/
- }
- points(polyInx) = pos;
+ start_pos = pos;
+ pos.x = (points(inx_line).pt.x + points(inx_line==0?3:inx_line-1).pt.x)/2;
+ pos.y = (points(inx_line).pt.y + points(inx_line==0?3:inx_line-1).pt.y)/2;
+ DYNARR_SET(trkSeg_t,anchors_da,5);
+ DrawArrowHeads( &anchors(0), pos, FindAngle(points(polyInx).pt,pos)+90, TRUE, wDrawColorRed );
+ InfoMessage( _("Drag to Move Edge "));
}
- p1=p0;
- break;
+ context->state = MOD_SELECTED_PT;
+ return C_CONTINUE;
case SEG_TEXT:
segInx = -1;
return C_ERROR;
@@ -690,7 +2057,7 @@ STATUS_T DrawGeomModify(
segEp = 0;
else {
segEp = 1;
- switch ( segPtr[segInx].type ) {
+ switch ( context->type ) {
case SEG_TBLEDGE:
case SEG_STRLIN:
case SEG_DIMLIN:
@@ -701,176 +2068,454 @@ STATUS_T DrawGeomModify(
;
}
}
+ UndrawNewTrack( context->trk );
return C_CONTINUE;
case C_MOVE:
- if (segInx == -1)
- return C_ERROR;
- if ( ( MyGetKeyState() & WKEY_SHIFT ) &&
- (tempSegs(0).type == SEG_STRLIN || tempSegs(0).type == SEG_DIMLIN || tempSegs(0).type == SEG_BENCH || tempSegs(0).type == SEG_TBLEDGE) ) {
- d = FindDistance( pos, tempSegs(0).u.l.pos[1-segEp] );
- Translate( &pos, tempSegs(0).u.l.pos[1-segEp], segA1, d );
- } else if ( (MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL|WKEY_ALT)) == WKEY_CTRL ) {
- OnTrack( &pos, FALSE, FALSE );
+ if (context->rotate_state) return DrawGeomOriginMove(action,pos,context);
+
+ if (polyMode) return DrawGeomPolyModify(action,pos,context);
+ if (context->state != MOD_SELECTED_PT) return C_CONTINUE;
+ switch (tempSegs(0).type) {
+ case SEG_STRLIN:
+ case SEG_DIMLIN:
+ case SEG_BENCH:
+ case SEG_TBLEDGE:
+ if ( (MyGetKeyState() & WKEY_SHIFT) != 0) {
+ d = FindDistance( pos, tempSegs(0).u.l.pos[1-lineInx] );
+ Translate( &pos, tempSegs(0).u.l.pos[1-lineInx], segA1, d );
+ } else if ((MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL|WKEY_ALT)) == WKEY_SHIFT ) {
+ OnTrack( &pos, FALSE, FALSE );
+ CreateEndAnchor(pos,TRUE);
+ }
+ break;
+ default:
+ break;
}
int prior_pnt, next_pnt, orig_pnt;
ANGLE_T prior_angle, next_angle, line_angle;
tempSegs_da.cnt = 1;
switch (tempSegs(0).type) {
case SEG_TBLEDGE:
-
+ if ( MyGetKeyState() & WKEY_CTRL )
+ OnTableEdgeEndPt( NULL, &pos );
+ /* no break */
case SEG_STRLIN:
case SEG_DIMLIN:
case SEG_BENCH:
- tempSegs(0).u.l.pos[segEp] = pos;
- InfoMessage( _("Length = %0.3f Angle = %0.3f"), FindDistance( tempSegs(0).u.l.pos[segEp], tempSegs(0).u.l.pos[1-segEp] ), FindAngle( tempSegs(0).u.l.pos[1-segEp], tempSegs(0).u.l.pos[segEp] ) );
+ if (lineInx<0 || lineInx>1) return C_CONTINUE;
+ tempSegs(0).u.l.pos[lineInx] = pos;
+ InfoMessage( _("Length = %0.3f Angle = %0.3f"), FindDistance( tempSegs(0).u.l.pos[lineInx], tempSegs(0).u.l.pos[1-lineInx] ), FindAngle( tempSegs(0).u.l.pos[1-lineInx], tempSegs(0).u.l.pos[lineInx] ) );
+ tempSegs_da.cnt = 1;
+ context->p0 = tempSegs(0).u.l.pos[0];
+ context->p1 = tempSegs(0).u.l.pos[1];
+ p0 = context->p0;
+ p1 = context->p1;
+ CreateLineAnchors(lineInx, p0, p1);
break;
case SEG_CRVLIN:
case SEG_FILCRCL:
if (tempSegs(0).u.c.a1 >= 360.0) {
- tempSegs(0).u.c.radius = FindDistance( tempSegs(0).u.c.center, pos );
+ tempSegs(0).u.c.radius = FindDistance( context->pc, pos );
+ CreateCircleAnchor(TRUE,tempSegs(0).u.c.center,tempSegs(0).u.c.radius,FindAngle(tempSegs(0).u.c.center,pos));
} else {
- a = FindAngle( tempSegs(0).u.c.center, pos );
- if (segEp==0) {
- tempSegs(0).u.c.a1 = NormalizeAngle(segA1-a);
- tempSegs(0).u.c.a0 = a;
+ if (context->state != MOD_SELECTED_PT) return C_CONTINUE;
+ if (curveInx < 0 || curveInx > 2) return C_CONTINUE;
+ p0 = context->p0;
+ p1 = context->p1;
+ pc = context->pc;
+ pm = context->pm;
+ if ( (MyGetKeyState() & WKEY_SHIFT) != 0) {
+ //Preserve Radius, Change swept angle
+ a = FindAngle( pc, pos );
+ if (curveInx==0) {
+ tempSegs(0).u.c.a1 = NormalizeAngle(FindAngle(pc,p1)-a);
+ tempSegs(0).u.c.a0 = a;
+ } else if (curveInx ==1) {
+ tempSegs(0).u.c.a1 = NormalizeAngle(a-tempSegs(0).u.c.a0);
+ }
+ PointOnCircle(&p0,pc,context->radius,tempSegs(0).u.c.a0);
+ PointOnCircle(&p1,pc,context->radius,tempSegs(0).u.c.a0+tempSegs(0).u.c.a1);
+ context->p0 = p0;
+ context->p1 = p1;
+ PointOnCircle(&pm,pc,context->radius,tempSegs(0).u.c.a0+(tempSegs(0).u.c.a1/2));
+ context->pm = pm;
} else {
- tempSegs(0).u.c.a1 = NormalizeAngle(a-tempSegs(0).u.c.a0);
+ if (curveInx == 0 || curveInx == 1) {
+ p0 = context->p0;
+ p1 = context->p1;
+ /* Preserve Curve "Deflection" */
+ d = context->disp; // Original Deflection
+ if (curveInx == 0) {
+ context->p0 = p0 = pos;
+ } else {
+ context->p1 = p1 = pos;
+ }
+ coOrd posx; //Middle of chord
+ posx.x = (p1.x-p0.x)/2.0+p0.x;
+ posx.y = (p1.y-p0.y)/2.0+p0.y; //Middle of chord
+ ANGLE_T a0 = FindAngle( p1, p0 );
+ DIST_T d0 = FindDistance( p0, p1 )/2.0;
+ DIST_T r = 1000.0;
+ if ( fabs(d) >= 0.01 ) {
+ d2 = sqrt( d0*d0 + d*d )/2.0;
+ r = d2*d2*2.0/d;
+ if ( fabs(r) > 1000.0 )
+ r = ((r > 0)? 1 : -1) *1000.0;
+ } else {
+ r = ((r > 0) ? 1 : -1 ) *1000.0;
+ }
+ a0 -= 90.0;
+ if (r<0) {
+ coOrd pt = p0;
+ p0 = p1;
+ p1 = pt;
+ a0 += 180.0;
+ }
+ context->radius = tempSegs(0).u.c.radius = fabs(r);
+ Translate( &pc, posx, a0, fabs(r)-fabs(d) );
+ context->pc = tempSegs(0).u.c.center = pc;
+ tempSegs(0).u.c.a0 = FindAngle(pc,p0);
+ context->arc_angle = tempSegs(0).u.c.a1 = NormalizeAngle(FindAngle(pc,p1)-FindAngle(pc,p0));
+ PointOnCircle(&pm,pc,context->radius,tempSegs(0).u.c.a0+(tempSegs(0).u.c.a1/2.0));
+ context->pm = pm;
+ } else {
+ //Change radius using chord
+ p0 = context->p0;
+ p1 = context->p1;
+ pm = context->pm;
+ ANGLE_T a0 = FindAngle( p1, p0 );
+ DIST_T d0 = FindDistance( p0, p1 )/2.0;
+ coOrd pos2 = pos;
+ Rotate( &pos2, p1, -a0 );
+ pos2.x -= p1.x;
+ DIST_T r = 1000.0;
+ if ( fabs(pos2.x) >= 0.01 ) {
+ d2 = sqrt( d0*d0 + pos2.x*pos2.x )/2.0;
+ r = d2*d2*2.0/pos2.x;
+ if ( fabs(r) > 1000.0 )
+ r = ((r > 0) ? 1 : -1 ) *1000.0;
+ } else {
+ r = ((r > 0) ? 1 : -1 ) *1000.0;
+ }
+ coOrd posx; //Middle of chord
+ posx.x = (p1.x-p0.x)/2.0 + p0.x;
+ posx.y = (p1.y-p0.y)/2.0 + p0.y;
+ a0 -= 90.0;
+ if (r<0) {
+ coOrd pt = p0;
+ p0 = p1;
+ p1 = pt;
+ a0 += 180.0;
+ }
+ Translate( &pc, posx, a0, fabs(r) - fabs(pos2.x) );
+ context->pc = tempSegs(0).u.c.center = pc;
+ context->radius = tempSegs(0).u.c.radius = fabs(r);
+ a0 = FindAngle( pc, p0 );
+ ANGLE_T a1 = FindAngle( pc, p1 );
+ tempSegs(0).u.c.a0 = a0;
+ tempSegs(0).u.c.a1 = NormalizeAngle(a1-a0);
+ PointOnCircle(&pm,pc,context->radius,a0+(NormalizeAngle(a1-a0)/2));
+ context->p0 = p0;
+ context->p1 = p1;
+ context->pm = pm;
+ context->disp = pos2.x;
+ }
}
+ if (tempSegs(0).u.c.a1 < 360.0)
+ CreateCurveAnchors(curveInx,pm,pc,p0,p1);
}
break;
case SEG_POLY:
case SEG_FILPOLY:
- switch (tempSegs(0).u.p.polyType) {
- case RECTANGLE:
- if (!corner_mode) {
- /* Constrain movement to be perpendicular */
- d = FindDistance(start_pos, pos);
- line_angle = NormalizeAngle(FindAngle(points(inx_line),points(polyInx))-90);
- a = FindAngle(pos,start_pos);
- Translate( &pos, start_pos, line_angle, - d*cos(D2R(line_angle-a)));
- }
- d = FindDistance(start_pos,pos);
- a = FindAngle(start_pos, pos);
- start_pos = pos;
- prior_pnt = (polyInx == 0)?3:polyInx-1;
- next_pnt = (polyInx == 3)?0:polyInx+1;
- orig_pnt = (prior_pnt == 0)?3:prior_pnt-1;
- Translate( &points(polyInx), points(polyInx), a, d);
- d = FindDistance(points(orig_pnt),points(polyInx));
- a = FindAngle(points(orig_pnt),points(polyInx));
- prior_angle = FindAngle(points(orig_pnt),points(prior_pnt));
- Translate( &points(prior_pnt), points(orig_pnt), prior_angle, d*cos(D2R(prior_angle-a)));
- next_angle = FindAngle(points(orig_pnt),points(next_pnt));
- Translate( &points(next_pnt), points(orig_pnt), next_angle, d*cos(D2R(next_angle-a)));
- if (!corner_mode) {
- pos.x = (points(polyInx).x + points(inx_line).x)/2;
- pos.y = (points(polyInx).y + points(inx_line).y)/2;
- DrawArrowHeads( &tempSegs(1), pos, FindAngle(points(polyInx),points(inx_line))+90, TRUE, wDrawColorRed );
- tempSegs_da.cnt = 6;
- InfoMessage( _("Drag to Move Edge"));
- } else {
- pos = points(polyInx);
- DrawArrowHeads( &tempSegs(1), pos, FindAngle(points(polyInx),points(inx_origin)), TRUE, wDrawColorRed );
- tempSegs_da.cnt = 6;
- InfoMessage( _("Drag to Move Corner Point"));
- }
- break;
- default:
- points(polyInx) = pos;
+ if (!corner_mode) {
+ /* Constrain movement to be perpendicular */
+ d = FindDistance(start_pos, pos);
+ line_angle = NormalizeAngle(FindAngle(points(inx_line).pt,points(inx_line==3?0:inx_line+1).pt));
+ a = FindAngle(pos,start_pos);
+ Translate( &pos, start_pos, line_angle, - d*cos(D2R(line_angle-a)));
}
-
+ d = FindDistance(start_pos,pos);
+ a = FindAngle(start_pos, pos);
+ start_pos = pos;
+ prior_pnt = (polyInx == 0)?3:polyInx-1;
+ next_pnt = (polyInx == 3)?0:polyInx+1;
+ orig_pnt = (prior_pnt == 0)?3:prior_pnt-1;
+ Translate( &points(polyInx).pt, points(polyInx).pt, a, d);
+ d = FindDistance(points(orig_pnt).pt,points(polyInx).pt);
+ a = FindAngle(points(orig_pnt).pt,points(polyInx).pt);
+ prior_angle = FindAngle(points(orig_pnt).pt,points(prior_pnt).pt);
+ Translate( &points(prior_pnt).pt, points(orig_pnt).pt, prior_angle, d*cos(D2R(prior_angle-a)));
+ next_angle = FindAngle(points(orig_pnt).pt,points(next_pnt).pt);
+ Translate( &points(next_pnt).pt, points(orig_pnt).pt, next_angle, d*cos(D2R(next_angle-a)));
+ if (!corner_mode) {
+ pos.x = (points(inx_line).pt.x + points(inx_line==0?3:inx_line-1).pt.x)/2;
+ pos.y = (points(inx_line).pt.y + points(inx_line==0?3:inx_line-1).pt.y)/2;
+ DYNARR_SET(trkSeg_t,anchors_da,5);
+ DrawArrowHeads( &anchors(0), pos, FindAngle(points(inx_line).pt,points(inx_line==0?3:inx_line-1).pt)+90, TRUE, wDrawColorRed );
+ InfoMessage( _("Drag to Move Edge"));
+ } else {
+ pos = points(polyInx).pt;
+ DYNARR_SET(trkSeg_t,anchors_da,5);
+ DrawArrowHeads( &anchors(0), pos, FindAngle(points(polyInx).pt,points(inx_origin).pt), TRUE, wDrawColorRed );
+ InfoMessage( _("Drag to Move Corner Point"));
+ }
+ context->p0 = points(0).pt;
+ context->p1 = points(1).pt;
break;
default:
;
}
-
return C_CONTINUE;
case C_UP:
+
+ if (context->rotate_state) return DrawGeomOriginMove(action, pos, context);
+
+ if (polyMode) {
+ int rc;
+ rc = DrawGeomPolyModify(action,pos,context);
+ if (context->prev_inx != -1)
+ context->state = MOD_AFTER_PT;
+ return rc;
+ }
+
if (segInx == -1)
return C_CONTINUE;
switch (tempSegs(0).type) {
case SEG_TBLEDGE:
-
case SEG_STRLIN:
case SEG_DIMLIN:
case SEG_BENCH:
- pos = tempSegs(0).u.l.pos[segEp];
- pos.x -= orig.x;
- pos.y -= orig.y;
- Rotate( &pos, zero, -angle );
- segPtr[segInx].u.l.pos[segEp] = pos;
+ p0 = context->p0;
+ p1 = context->p1;
+ context->abs_angle = FindAngle(p0,p1);
+ context->length = FindDistance(p0,p1);
+ CreateLineAnchors(lineInx,p0,p1);
+ context->last_inx = lineInx;
break;
case SEG_CRVLIN:
case SEG_FILCRCL:
- if ( tempSegs(0).u.c.a1 >= 360.0 ) {
- segPtr[segInx].u.c.radius = fabs(tempSegs(0).u.c.radius);
+ if ( (tempSegs(0).type == SEG_FILCRCL) || (tempSegs(0).u.c.a1 == 360.0 || tempSegs(0).u.c.a1 == 0.0) ) {
+ context->radius = fabs(tempSegs(0).u.c.radius);
+ context->arc_angle = 360.0;
+ CreateCircleAnchor(FALSE,tempSegs(0).u.c.center,tempSegs(0).u.c.radius,FindAngle(tempSegs(0).u.c.center,pos));
} else {
- a = FindAngle( tempSegs(0).u.c.center, pos );
- a = NormalizeAngle( a-angle );
- segPtr[segInx].u.c.a1 = tempSegs(0).u.c.a1;
- if (segEp == 0) {
- segPtr[segInx].u.c.a0 = a;
- }
+ p0 = context->p0;
+ p1 = context->p1;
+ pc = context->pc;
+ pm = context->pm;
+ context->radius = fabs(tempSegs(0).u.c.radius);
+ context->arc_angle = tempSegs(0).u.c.a1;
+ CreateCurveAnchors(curveInx,pm,pc,p0,p1);
+ a = FindAngle(p1,p0);
+ Rotate(&pm,p1,-a);
+ context->disp = pm.x-p1.x;
}
+ context->last_inx = curveInx;
break;
case SEG_POLY:
case SEG_FILPOLY:
- switch(tempSegs(0).u.p.polyType) {
- case RECTANGLE:
- for (int i=0;i<4;i++) {
- pos = points(i);
- pos.x -= orig.x;
- pos.y -= orig.y;
- Rotate( &pos, zero, -angle );
- segPtr[segInx].u.p.pts[i] = pos;
- }
- break;
- default:
- mergePoints = FALSE;
- if ( IsClose( FindDistance( pos, points( polyInx==0?tempSegs(0).u.p.cnt-1:polyInx-1 ) ) ) ||
- IsClose( FindDistance( pos, points( (polyInx==tempSegs(0).u.p.cnt-1)?0:polyInx+1 ) ) ) ) {
- mergePoints = TRUE;
- if (segPtr[segInx].u.p.cnt <= 3) {
- ErrorMessage( MSG_POLY_SHAPES_3_SIDES );
+ CreateBoxAnchors(-1,tempSegs(0).u.p.pts);
+ context->width = FindDistance(tempSegs(0).u.p.pts[0].pt,tempSegs(0).u.p.pts[1].pt);
+ context->height = FindDistance(tempSegs(0).u.p.pts[1].pt,tempSegs(0).u.p.pts[2].pt);
+ context->last_inx = polyInx;
+ if (corner_mode) context->last_inx +=5;
+ break;
+ default:
+ ;
+ }
+ context->state = MOD_AFTER_PT;
+ curveInx = -1;
+ lineInx = -1;
+ polyInx = -1;
+ InfoMessage("Enter/Space to Accept, ESC to Reject");
+ return C_CONTINUE;
+ case C_UPDATE:
+ if (context->rotate_state) return DrawGeomOriginMove(action, pos, context);
+
+ if (polyMode) return DrawGeomPolyModify(action,pos,context);
+ if (context->state == MOD_AFTER_PT) {
+ switch (tempSegs(0).type) {
+ case SEG_TBLEDGE:
+ case SEG_STRLIN:
+ case SEG_DIMLIN:
+ case SEG_BENCH:
+ context->abs_angle = NormalizeAngle(context->abs_angle);
+ Translate(&tempSegs(0).u.l.pos[1],tempSegs(0).u.l.pos[0],context->abs_angle,context->length);
+ CreateLineAnchors(context->last_inx,tempSegs(0).u.l.pos[0],tempSegs(0).u.l.pos[1]);
+ context->p0 = tempSegs(0).u.l.pos[0];
+ context->p1 = tempSegs(0).u.l.pos[1];
+ break;
+ case SEG_CRVLIN:
+ case SEG_FILCRCL:
+ if (tempSegs(0).u.c.a1 == 360.0 || tempSegs(0).u.c.a1 == 0.0) {
+ tempSegs(0).u.c.a1 = 360.0;
+ tempSegs(0).u.c.radius = context->radius;
+ Translate(&p0,tempSegs(0).u.c.center,tempSegs(0).u.c.a0,tempSegs(0).u.c.radius);
+ context->p0 = p0;
+ context->p1 = p0;
+ context->pm = p0;
+ context->pc = tempSegs(0).u.c.center;
break;
}
- }
+ if (context->radius < 0) { //swap ends
+ context->radius = fabs(context->radius);
+ p1 = context->p0;
+ p0 = context->p1;
+ a = FindAngle(context->pc,context->pm);
+ Translate(&pm,context->pm,a+180,2*context->disp);
+ Translate(&pc,pm,a,context->radius);
+ context->pm = pm;
+ context->pc = pc;
+ context->p0 = p0;
+ context->p1 = p1;
+ } else {
+ pm = context->pm;
+ pc = context->pc;
+ p0 = context->p0;
+ p1 = context->p1;
+ }
+ if (context->last_inx == 0) {
+ p1 = context->p1;
+ pc = context->pc;
+ a = FindAngle(p1,pc);
+ Translate(&pc,p1,a,context->radius);
+ context->pc = pc;
+ PointOnCircle( &p0, context->pc, context->radius, NormalizeAngle(a+180-context->arc_angle) );
+ context->p0 = p0;
+ PointOnCircle( &pm, context->pc, context->radius, NormalizeAngle(a+180-(context->arc_angle/2)));
+ context->pm = pm;
+ } else if (context->last_inx == 1) {
+ p0 = context->p0;
+ pc = context->pc;
+ a = FindAngle(p0,pc);
+ Translate(&pc,p0,a,context->radius);
+ context->pc = pc;
+ PointOnCircle( &p1, context->pc, context->radius, NormalizeAngle(a+180+context->arc_angle) );
+ context->p1 = p1;
+ PointOnCircle( &pm, context->pc, context->radius, NormalizeAngle(a+180+(context->arc_angle/2)));
+ context->pm = pm;
+ } else { // Middle if neither
+ a = FindAngle(context->pm,context->pc);
+ Translate(&pc,context->pm,a,context->radius);
+ context->pc = pc;
+ PointOnCircle( &p1, context->pc, context->radius, NormalizeAngle(FindAngle(context->pc,context->pm)+(context->arc_angle/2)) );
+ PointOnCircle( &p0, context->pc, context->radius, NormalizeAngle(FindAngle(context->pc,context->pm)-(context->arc_angle/2)) );
+ context->p1 = p1;
+ context->p0 = p0;
+ }
+ a = FindAngle(p1,p0);
+ Rotate(&pm,p1,-a);
+ context->disp = pm.x-p1.x;
+ tempSegs(0).u.c.center = context->pc;
+ tempSegs(0).u.c.a0 = FindAngle(context->pc,context->p0);
+ tempSegs(0).u.c.a1 = NormalizeAngle(FindAngle(context->pc,context->p1)-tempSegs(0).u.c.a0);
+ if (tempSegs(0).u.c.a1 == 0.0) tempSegs(0).u.c.a1 = 360.0;
+ tempSegs(0).u.c.radius = context->radius;
+ CreateCurveAnchors(context->last_inx,context->pm,context->pc,context->p0,context->p1);
+ break;
+ case SEG_POLY:
+ case SEG_FILPOLY:
+ a = NormalizeAngle(FindAngle(points(0).pt,points(3).pt));
+ Translate( &points(3).pt, points(0).pt, a, context->height);
+ Translate( &points(2).pt, points(1).pt, a, context->height);
+ a = NormalizeAngle(FindAngle(points(0).pt,points(1).pt));;
+ Translate( &points(1).pt, points(0).pt, a, context->width);
+ Translate( &points(2).pt, points(3).pt, a, context->width);
+ CreateBoxAnchors(context->last_inx,&points(0));
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ case C_TEXT:
+ if (context->rotate_state) DrawGeomOriginMove(action, pos, context);
- coOrd * oldPts = segPtr[segInx].u.p.pts;
- newPts = (coOrd*)MyMalloc( tempSegs(0).u.p.cnt * sizeof (coOrd) );
- int size = segPtr[segInx].u.p.cnt;
- memcpy( newPts, segPtr[segInx].u.p.pts, (size) * sizeof (coOrd) );
- segPtr[segInx].u.p.pts = newPts;
- MyFree(oldPts);
+ if (polyMode) return DrawGeomPolyModify(action,pos,context);
+ if (action>>8 == 'o') {
+ MenuMode(1);
+ }
- if ( tempSegs(0).u.p.cnt > segPtr[segInx].u.p.cnt ) {
- ASSERT( tempSegs(0).u.p.cnt == segPtr[segInx].u.p.cnt+1 );
- for (inx=tempSegs(0).u.p.cnt-1; inx>polyInx; inx--)
- segPtr[segInx].u.p.pts[inx] = segPtr[segInx].u.p.pts[inx-1];
- segPtr[segInx].u.p.cnt++;
+ if (action>>8 != 32 && action>>8 != 13) return C_CONTINUE;
+ /* no break */
+ case C_FINISH:
+ if (polyMode) {
+ DrawGeomPolyModify(action,pos,context);
+ context->segPtr[segInx].type = context->type;
+ context->segPtr[segInx].u.p.polyType = context->subtype;
+ return C_TERMINATE;
+ }
+ //copy changes back into track
+ context->orig.x = context->rot_center.x;
+ context->orig.y = context->rot_center.y;
+ context->rot_moved = FALSE;
+ context->angle = 0.0;
+ switch (tempSegs(0).type) {
+ case SEG_TBLEDGE:
+ case SEG_STRLIN:
+ case SEG_DIMLIN:
+ case SEG_BENCH:
+ for (int i=0;i<2;i++) {
+ pos = i==0?context->p0:context->p1;
+ pos.x -= context->rot_center.x;
+ pos.y -= context->rot_center.y;
+ context->segPtr[segInx].u.l.pos[i] = pos;
}
-
- pos = points(polyInx);
- if ( mergePoints ) {
- for (inx=polyInx+1; inx<segPtr[segInx].u.p.cnt; inx++)
- segPtr[segInx].u.p.pts[inx-1] = segPtr[segInx].u.p.pts[inx];
- segPtr[segInx].u.p.cnt--;
-/*fprintf( stderr, "Merging with vertix %d\n", polyInx );*/
- break;
+ break;
+ case SEG_CRVLIN:
+ case SEG_FILCRCL:
+ pc = context->pc;
+ pc.x -= context->rot_center.x;
+ pc.y -= context->rot_center.y;
+ context->segPtr[segInx].u.c.center = pc;
+ p0 = context->p0;
+ p0.x -= context->rot_center.x;
+ p0.y -= context->rot_center.y;
+ p1 = context->p1;
+ p1.x -= context->rot_center.x;
+ p1.y -= context->rot_center.y;
+ context->segPtr[segInx].u.c.a0 = FindAngle(pc,p0);
+ context->segPtr[segInx].u.c.a1 = NormalizeAngle(FindAngle(pc,p1)-FindAngle(pc,p0));
+ if (context->segPtr[segInx].u.c.a1 == 0) context->segPtr[segInx].u.c.a1 = 360.0;
+ context->segPtr[segInx].u.c.radius = context->radius;
+ break;
+ case SEG_POLY:
+ case SEG_FILPOLY:
+ for (int i=0;i<4;i++) {
+ pos = points(i).pt;
+ pos.x -= context->rot_center.x;
+ pos.y -= context->rot_center.y;
+ context->segPtr[segInx].u.p.pts[i].pt = pos;
}
- pos.x -= orig.x;
- pos.y -= orig.y;
- Rotate( &pos, zero, -angle );
- segPtr[segInx].u.p.pts[polyInx] = pos;
- }
- break;
- default:
- ;
+ break;
+ default:
+ break;
}
+ context->state = MOD_NONE;
+ context->rotate_state = FALSE;
+ context->last_inx = -1;
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ DYNARR_RESET(trkSeg_t,tempSegs_da);
+ DrawNewTrack( context->trk );
return C_TERMINATE;
+ case C_REDRAW:
+ if (polyMode) return DrawGeomPolyModify(action,pos,context);
+ if (context->state == MOD_NONE) return C_CONTINUE;
+ DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack);
+ DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
+ break;
+ case C_CANCEL:
+ case C_CONFIRM:
+ case C_TERMINATE:
+ context->state = MOD_NONE;
+ context->rotate_state = FALSE;
+ context->rot_moved = FALSE;
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ DYNARR_RESET(trkSeg_t,tempSegs_da);
+ break;
default:
;
}
- return C_ERROR;
+ return C_CONTINUE;
}
diff --git a/app/bin/drawgeom.h b/app/bin/drawgeom.h
index d9f54f8..45814d7 100644
--- a/app/bin/drawgeom.h
+++ b/app/bin/drawgeom.h
@@ -47,7 +47,8 @@
#define OP_FILLBOX (16)
#define OP_FILLPOLY (17)
#define OP_BEZLIN (18)
-#define OP_LAST (OP_BEZLIN)
+#define OP_POLYLINE (19)
+#define OP_LAST (OP_POLYLINE)
typedef struct {
void (*message)( char *, ... );
@@ -55,20 +56,74 @@ typedef struct {
drawCmd_t *D;
long Op;
wDrawColor Color;
- long Width;
+ long line_Width;
+ double width;
+ ANGLE_T angle;
+ double length;
+ double radius;
long benchOption;
+ drawLineType_e lineType;
int State;
+ int index;
curveData_t ArcData;
ANGLE_T ArcAngle;
int Started;
BOOL_T Changed;
} drawContext_t;
+typedef enum {MOD_NONE, MOD_STARTED, MOD_SELECTED_PT, MOD_AFTER_PT,
+ MOD_ORIGIN, MOD_AFTER_ORIG } ModState_e;
+
+typedef struct {
+ void (*message)( char *, ... );
+ void (*Redraw)( void );
+ drawCmd_t *D;
+ double length;
+ ANGLE_T rel_angle;
+ double radius;
+ ANGLE_T arc_angle;
+ int last_inx;
+ ANGLE_T abs_angle;
+ double height;
+ double width;
+ int prev_inx;
+ int max_inx;
+ track_p trk;
+ char type;
+ coOrd orig; //Origin Pos
+ ANGLE_T angle; //Origin Angle
+ wIndex_t segCnt;
+ trkSeg_p segPtr;
+ wBool_t selected;
+ wBool_t circle;
+ ModState_e state;
+ coOrd rel_center;
+ coOrd rot_center;
+ wBool_t rot_moved;
+ coOrd translate_center;
+ coOrd moved;
+ coOrd arm;
+ coOrd new_arm;
+ ANGLE_T rot_angle;
+ coOrd p0;
+ coOrd p1;
+ coOrd pm;
+ coOrd pc;
+ DIST_T disp;
+ wBool_t rotate_state;
+ wBool_t open;
+ wBool_t filled;
+ PolyType_e subtype;
+ } drawModContext_t;
+
+typedef enum {LENGTH_UPDATE, WIDTH_UPDATE} drawUpdateType_e;
+
extern drawContext_t * drawContext;
extern wDrawColor lineColor;
extern long lineWidth;
void DrawGeomOp( void * );
-STATUS_T DrawGeomMouse( wAction_t, coOrd, drawContext_t * );
-STATUS_T DrawGeomModify( coOrd, ANGLE_T, wIndex_t, trkSeg_p, wAction_t, coOrd, wBool_t );
-#endif //HAVE_DRAWGEOM_H \ No newline at end of file
+STATUS_T DrawGeomMouse( wAction_t, coOrd, drawContext_t *);
+STATUS_T DrawGeomModify( wAction_t, coOrd, drawModContext_t * );
+STATUS_T DrawGeomOriginMove(wAction_t, coOrd, drawModContext_t * );
+#endif //HAVE_DRAWGEOM_H
diff --git a/app/bin/dxfoutput.c b/app/bin/dxfoutput.c
index 69c6df4..214f63c 100644
--- a/app/bin/dxfoutput.c
+++ b/app/bin/dxfoutput.c
@@ -135,15 +135,19 @@ static void DxfFillPoly(
drawCmd_p d,
int cnt,
coOrd * pts,
- wDrawColor color)
+ int * types,
+ wDrawColor color,
+ wDrawWidth width,
+ int fill,
+ int open )
{
int inx;
for (inx=1; inx<cnt; inx++) {
- DxfLine(d, pts[inx-1], pts[inx], 0, color);
+ DxfLine(d, pts[inx-1], pts[inx], width, color);
}
-
- DxfLine(d, pts[cnt-1], pts[0], 0, color);
+ if (!open)
+ DxfLine(d, pts[cnt-1], pts[0], width, color);
}
static void DxfFillCircle(drawCmd_p d, coOrd center, DIST_T radius,
@@ -192,7 +196,7 @@ static int DoExportDXFTracks(
}
oldLocale = SaveLocale("C");
- wSetCursor(wCursorWait);
+ wSetCursor(mainD.d, wCursorWait);
time(&clock);
DxfPrologue(&command, 10, 0.0, 0.0, mapD.size.x, mapD.size.y);
@@ -208,7 +212,7 @@ static int DoExportDXFTracks(
fclose(dxfF);
RestoreLocale(oldLocale);
Reset();
- wSetCursor(wCursorNormal);
+ wSetCursor(mainD.d, defaultCursor);
return TRUE;
}
diff --git a/app/bin/elev.c b/app/bin/elev.c
index 6b86bc1..a9e5fee 100644
--- a/app/bin/elev.c
+++ b/app/bin/elev.c
@@ -137,7 +137,8 @@ BOOL_T ComputeElev(
EPINX_T ep,
BOOL_T onpath,
DIST_T *elevR,
- DIST_T *gradeR )
+ DIST_T *gradeR,
+ BOOL_T force )
{
DIST_T grade;
DIST_T elev0, elev1, dist0, dist1;
@@ -176,6 +177,7 @@ if (oldElevationEvaluation) {
elev0 = 0.0;
}
} else {
+
track_p trk1;
EPINX_T ep1;
grade = -1;
@@ -184,30 +186,40 @@ if (oldElevationEvaluation) {
elev0 = GetTrkEndElevHeight(trk,ep);
rc = FALSE;
} else {
- elev0 = GetElevation( trk );
- dist0 = GetTrkLength( trk, ep, -1 );
+ if (force || (!GetTrkEndElevCachedHeight(trk,ep,&elev0,&dist0))) {
+ elev0 = GetElevation( trk );
+ dist0 = GetTrkLength( trk, ep, -1 );
+ }
+ SetTrkEndElevCachedHeight(trk,ep,elev0,dist0);
trk1 = GetTrkEndTrk( trk, ep );
if (trk1!=NULL) {
ep1 = GetEndPtConnectedToMe(trk1,trk);
- elev1 = GetElevation( trk1 );
- dist1 = GetTrkLength( trk1, ep1, -1 );
+ if (force || (!GetTrkEndElevCachedHeight(trk1,ep1,&elev1,&dist1))) {
+ elev1 = GetElevation( trk1 );
+ dist1 = GetTrkLength( trk1, ep1, -1 );
+ }
+ SetTrkEndElevCachedHeight(trk1,ep1,elev1,dist1);
if (dist0+dist1>0.1) {
grade = (elev1-elev0)/(dist0+dist1);
elev0 += grade*dist0;
} else {
elev0 = (elev0+elev1)/2.0;
rc = FALSE;
+ SetTrkEndElevCachedHeight(trk,ep,elev0,dist0);
+ SetTrkEndElevCachedHeight(trk1,ep1,elev0,dist1);
}
} else {
grade = 0.0;
}
+
}
}
- if ( elevR )
- *elevR = elev0;
- if ( gradeR )
- *gradeR = grade;
- return rc;
+if ( elevR )
+ *elevR = elev0;
+if ( gradeR )
+ *gradeR = grade;
+return rc;
+
}
@@ -988,7 +1000,7 @@ EXPORT void RecomputeElevations( void )
PropogateForkElevs();
PropogateDefElevs();
FindIslandElevs();
- MainRedraw();
+ MainRedraw(); // RecomputeElevations
LOG( log_fillElev, 1, ( "%s: Total (%ld)\n", elevPrefix, wGetTimer()-time0 ) )
if ( log_dumpElev > 0 ) {
track_p trk;
@@ -1087,6 +1099,7 @@ EXPORT void ClrTrkElev( track_p trk )
needElevUpdate = TRUE;
DrawTrackElev( trk, &mainD, FALSE );
ClrTrkBits( trk, TB_ELEVPATH );
+
}
@@ -1124,11 +1137,11 @@ EXPORT void SetTrkElevModes( BOOL_T connect, track_p trk0, EPINX_T ep0, track_p
update = FALSE;;
} else if ( connect ) {
if ( mode0 == ELEV_ALONE ) {
- ComputeElev( trk1, ep1, FALSE, &elev, NULL );
+ ComputeElev( trk1, ep1, FALSE, &elev, NULL, TRUE );
PropogateElevMode( trk0, elev, ELEV_ISLAND );
update = FALSE;
} else if ( mode1 == ELEV_ALONE ) {
- ComputeElev( trk0, ep0, FALSE, &elev, NULL );
+ ComputeElev( trk0, ep0, FALSE, &elev, NULL, TRUE );
PropogateElevMode( trk1, elev, ELEV_ISLAND );
update = FALSE;
}
@@ -1287,8 +1300,7 @@ EXPORT void DrawTrackElev( track_cp trk, drawCmd_p d, BOOL_T drawIt )
(labelScale < d->scale) ||
(!GetTrkOnElevPath( trk, &elev )) ||
((GetTrkBits(trk)&TB_ELEVPATH) == 0) ||
- (d->funcs->options & wDrawOptTemp) != 0 ||
- (d->options & DC_QUICK) != 0 )
+ (d->options & DC_SIMPLE) != 0 )
return;
if ( !GetCurveMiddle( trk, &pos ) ) {
diff --git a/app/bin/file2uri.c b/app/bin/file2uri.c
new file mode 100644
index 0000000..a9d8f4f
--- /dev/null
+++ b/app/bin/file2uri.c
@@ -0,0 +1,83 @@
+/** \file file2uri.c
+ * Conversion for filename to URI and reverse
+ */
+
+ /* XTrackCAD - Model Railroad CAD
+ * Copyright (C) 2019 Martin Fischer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include "wlib.h"
+
+static char *reservedChars = "?#[]@!$&'()*+,;= ";
+
+unsigned
+File2URI(char *fileName, unsigned resultLen, char *resultBuffer)
+{
+ char *currentSource = fileName;
+ char *currentDest;
+
+ currentDest = resultBuffer;
+
+ while (*currentSource && ((unsigned)(currentDest - resultBuffer) < resultLen - 1)) {
+ if (*currentSource == FILE_SEP_CHAR[ 0 ]) {
+ *currentDest++ = '/';
+ currentSource++;
+ continue;
+ }
+ if (strchr(reservedChars, *currentSource))
+ {
+ sprintf(currentDest, "%%%02x", *currentSource);
+ currentSource++;
+ currentDest += 3;
+ } else {
+ *currentDest++ = *currentSource++;
+ }
+
+ }
+ *currentDest = '\0';
+ return(strlen(resultBuffer));
+}
+
+unsigned
+URI2File(char *encodedFileName, unsigned resultLen, char *resultBuffer)
+{
+ char *currentSource = encodedFileName;
+ char *currentDest = resultBuffer;
+
+ currentSource = encodedFileName;
+ while (*currentSource && ((unsigned)(currentDest - resultBuffer) < resultLen - 1)) {
+ if (*currentSource == '/') {
+ *currentDest++ = FILE_SEP_CHAR[0];
+ currentSource++;
+ continue;
+ }
+ if (*currentSource == '%') {
+ char hexCode[3];
+ memcpy(hexCode, currentSource + 1, 2);
+ hexCode[2] = '\0';
+ sscanf(hexCode, "%x", (unsigned int*)currentDest);
+ currentDest++;
+ currentSource += 3;
+ } else {
+ *currentDest++ = *currentSource++;
+ }
+ }
+ *currentDest = '\0';
+ return(strlen(resultBuffer));
+}
diff --git a/app/bin/file2uri.h b/app/bin/file2uri.h
new file mode 100644
index 0000000..921976a
--- /dev/null
+++ b/app/bin/file2uri.h
@@ -0,0 +1,27 @@
+/** \file file2uri.h
+ * Include file for file2uri.c
+ */
+
+ /* XTrackCAD - Model Railroad CAD
+ * Copyright (C) 2019 Martin Fischer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef HAVE_FILE2URI_H
+unsigned File2URI(char *fileName, unsigned resultLen, char *resultBuffer);
+unsigned URI2File(char *encodedFileName, unsigned resultLen, char *resultBuffer);
+#endif // !HAVE_FILE2URI_H
+
diff --git a/app/bin/fileio.c b/app/bin/fileio.c
index 4e2a21d..cb0c8de 100644
--- a/app/bin/fileio.c
+++ b/app/bin/fileio.c
@@ -33,12 +33,10 @@
#include <time.h>
#include <ctype.h>
#ifdef WINDOWS
-#include <io.h>
-#include <windows.h>
- //#if _MSC_VER >=1400
- // #define strdup _strdup
- //#endif
-#else
+ #include <io.h>
+ #define W_OK (2)
+ #define access _access
+ #include <windows.h>
#endif
#include <sys/stat.h>
#include <stdarg.h>
@@ -48,35 +46,52 @@
#include <assert.h>
+#include <cJSON.h>
+
+#include "archive.h"
#include "common.h"
#include "compound.h"
#include "cselect.h"
#include "cundo.h"
#include "custom.h"
+#include "directory.h"
#include "draw.h"
#include "fileio.h"
+#include "fcntl.h"
#include "i18n.h"
#include "layout.h"
+#include "manifest.h"
#include "messages.h"
#include "misc.h"
#include "param.h"
+#include "include/paramfile.h"
#include "paths.h"
#include "track.h"
#include "utility.h"
#include "version.h"
+#include "dynstring.h"
+
+#ifdef WINDOWS
+#include "include/utf8convert.h"
+#endif // WINDOWS
/*#define TIME_READTRACKFILE*/
+#define COPYBLOCKSIZE 1024
+
EXPORT const char * workingDir;
EXPORT const char * libDir;
-static char * customPath = NULL;
-static char * customPathBak = NULL;
+EXPORT wMenuList_p fileList_ml;
EXPORT char * clipBoardN;
+static coOrd paste_offset, cursor_offset;
+
+EXPORT wBool_t bExample = FALSE;
+EXPORT wBool_t bReadOnly = FALSE;
+
-static int log_paramFile;
#ifdef WINDOWS
#define rename( F1, F2 ) Copyfile( F1, F2 )
@@ -151,20 +166,13 @@ RestoreLocale( char * locale )
EXPORT FILE * paramFile = NULL;
char *paramFileName;
EXPORT wIndex_t paramLineNum = 0;
-EXPORT char paramLine[STR_LONG_SIZE];
+EXPORT char paramLine[STR_HUGE_SIZE];
EXPORT char * curContents;
EXPORT char * curSubContents;
-static long paramCheckSum;
#define PARAM_DEMO (-1)
-typedef struct {
- char * name;
- readParam_t proc;
- } paramProc_t;
-static dynArr_t paramProc_da;
-#define paramProc(N) DYNARR_N( paramProc_t, paramProc_da, N )
-
+dynArr_t paramProc_da;
EXPORT void Stripcr( char * line )
{
@@ -179,13 +187,6 @@ EXPORT void Stripcr( char * line )
*cp = '\0';
}
-EXPORT void ParamCheckSumLine( char * line )
-{
- long mult=1;
- while ( *line )
- paramCheckSum += (((long)(*line++))&0xFF)*(mult++);
-}
-
EXPORT char * GetNextLine( void )
{
if (!paramFile) {
@@ -193,7 +194,12 @@ EXPORT char * GetNextLine( void )
return NULL;
}
if (fgets( paramLine, sizeof paramLine, paramFile ) == NULL) {
- AbortProg( "Permature EOF on %s", paramFileName );
+ sprintf( message, "INPUT ERROR: premature EOF on %s", paramFileName );
+ wNoticeEx( NT_ERROR, message, _("Ok"), NULL );
+ if ( paramFile ) {
+ fclose( paramFile );
+ paramFile = NULL;
+ }
}
Stripcr( paramLine );
ParamCheckSumLine( paramLine );
@@ -234,9 +240,14 @@ EXPORT int InputError(
}
strcat( mp, _("\nDo you want to continue?") );
if (!(ret = wNoticeEx( NT_ERROR, message, _("Continue"), _("Stop") ))) {
- if ( paramFile )
+ if ( paramFile ) {
fclose(paramFile);
- paramFile = NULL;
+ paramFile = NULL;
+ }
+ if ( paramFileName ) {
+ free( paramFileName );
+ paramFileName = NULL;
+ }
}
return ret;
}
@@ -251,6 +262,7 @@ EXPORT void SyntaxError(
TRUE, event, actual, expected );
}
+
/**
* Parse a line in XTrackCAD's file format
*
@@ -258,6 +270,24 @@ EXPORT void SyntaxError(
* \param format IN ???
*
* \return FALSE in case of parsing error, TRUE on success
+ * In the error case, InputError had been called which may have closed the input file (paramFile)
+ *
+ * format chars are:
+ * 0 - read a number and discard
+ * X - no read, *pi = 0
+ * Y - no read, *pf = 0L
+ * Z - no read, *pl = 0.0
+ * L - *pi = number
+ * d - *pi = number
+ * w - *pf = read a width
+ * u - *pul = number
+ * l - *pl = number
+ * f - *pf = number
+ * z - *pf = 0.0
+ * p - *pp = ( number, number ) a coOrd
+ * s - *ps = string
+ * q - *ps = quoted string
+ * c - *qp = position of next non-space char or NULL
*/
EXPORT BOOL_T GetArgs(
@@ -266,7 +296,6 @@ EXPORT BOOL_T GetArgs(
... )
{
char * cp, * cq;
- int argNo;
long * pl;
unsigned long *pul;
int * pi;
@@ -276,25 +305,24 @@ EXPORT BOOL_T GetArgs(
char ** qp;
va_list ap;
char *oldLocale = NULL;
+ char * sError = NULL;
oldLocale = SaveLocale("C");
cp = line;
va_start( ap, format );
- for (argNo=1;*format;argNo++,format++) {
+ for ( ; sError==NULL && *format; format++ ) {
while (isspace((unsigned char)*cp)) cp++;
if (!*cp && strchr( "XZYzc", *format ) == NULL ) {
- RestoreLocale(oldLocale);
- InputError( "Arg %d: EOL unexpected", TRUE, argNo );
- return FALSE;
+ sError = "EOL unexpected";
+ break;
}
switch (*format) {
case '0':
(void)strtol( cp, &cq, 10 );
if (cp == cq) {
- RestoreLocale(oldLocale);
- InputError( "Arg %d: expected integer", TRUE, argNo );
- return FALSE;
+ sError = "%s: expected integer";
+ break;
}
cp = cq;
break;
@@ -314,9 +342,8 @@ EXPORT BOOL_T GetArgs(
pi = va_arg( ap, int * );
*pi = (int)strtol( cp, &cq, 10 );
if (cp == cq) {
- RestoreLocale(oldLocale);
- InputError( "Arg %d: expected integer", TRUE, argNo );
- return FALSE;
+ sError = "%s: expected integer";
+ break;
}
cp = cq;
break;
@@ -324,9 +351,8 @@ EXPORT BOOL_T GetArgs(
pi = va_arg( ap, int * );
*pi = (int)strtol( cp, &cq, 10 );
if (cp == cq) {
- RestoreLocale(oldLocale);
- InputError( "Arg %d: expected integer", TRUE, argNo );
- return FALSE;
+ sError = "%s: expected integer";
+ break;
}
cp = cq;
break;
@@ -334,9 +360,8 @@ EXPORT BOOL_T GetArgs(
pf = va_arg( ap, FLOAT_T * );
*pf = (FLOAT_T)strtol( cp, &cq, 10 );
if (cp == cq) {
- RestoreLocale(oldLocale);
- InputError( "Arg %d: expected integer", TRUE, argNo );
- return FALSE;
+ sError = "%s: expected integer";
+ break;
}
if (*cq == '.')
*pf = strtod( cp, &cq );
@@ -348,9 +373,8 @@ EXPORT BOOL_T GetArgs(
pul = va_arg( ap, unsigned long * );
*pul = strtoul( cp, &cq, 10 );
if (cp == cq) {
- RestoreLocale(oldLocale);
- InputError( "Arg %d: expected integer", TRUE, argNo );
- return FALSE;
+ sError = "%s: expected integer";
+ break;
}
cp = cq;
break;
@@ -358,9 +382,8 @@ EXPORT BOOL_T GetArgs(
pl = va_arg( ap, long * );
*pl = strtol( cp, &cq, 10 );
if (cp == cq) {
- RestoreLocale(oldLocale);
- InputError( "Arg %d: expected integer", TRUE, argNo );
- return FALSE;
+ sError = "%s: expected integer";
+ break;
}
cp = cq;
break;
@@ -368,43 +391,27 @@ EXPORT BOOL_T GetArgs(
pf = va_arg( ap, FLOAT_T * );
*pf = strtod( cp, &cq );
if (cp == cq) {
- RestoreLocale(oldLocale);
- InputError( "Arg %d: expected float", TRUE, argNo );
- return FALSE;
+ sError = "%s: expected float";
+ break;
}
cp = cq;
break;
case 'z':
pf = va_arg( ap, FLOAT_T * );
-#ifdef LATER
- if ( paramVersion >= 9 ) {
- *pf = strtod( cp, &cq );
- if (cp == cq) {
- RestoreLocale(oldLocale);
- InputError( "Arg %d: expected float", TRUE, argNo );
- return FALSE;
- }
- cp = cq;
- } else {
- *pf = 0.0;
- }
-#endif
*pf = 0.0;
break;
case 'p':
pp = va_arg( ap, coOrd * );
p.x = strtod( cp, &cq );
if (cp == cq) {
- RestoreLocale(oldLocale);
- InputError( "Arg %d: expected float", TRUE, argNo );
- return FALSE;
+ sError = "%s: expected float";
+ break;
}
cp = cq;
p.y = strtod( cp, &cq );
if (cp == cq) {
- RestoreLocale(oldLocale);
- InputError( "Arg %d: expected float", TRUE, argNo );
- return FALSE;
+ sError = "%s: expected float";
+ break;
}
cp = cq;
*pp = p;
@@ -446,7 +453,10 @@ EXPORT BOOL_T GetArgs(
} else {
message[0] = '\0';
}
- *qp = (char*)MyStrdup(message);
+#ifdef WINDOWS
+ ConvertUTF8ToSystem(message);
+#endif
+ *qp = (char*)ConvertFromEscapedText(message);
break;
case 'c':
qp = va_arg( ap, char * * );
@@ -457,14 +467,76 @@ EXPORT BOOL_T GetArgs(
*qp = NULL;
break;
default:
- AbortProg( "getArgs: bad format char" );
+ AbortProg( "getArgs: bad format char: %c", *format );
}
}
va_end( ap );
RestoreLocale(oldLocale);
+ if ( sError ) {
+ InputError( sError, TRUE, cp );
+ return FALSE;
+ }
+ return TRUE;
+}
+
+
+
+wBool_t IsEND( char * sEnd )
+{
+ char * cp;
+ wBool_t bAllowNakedENDs = paramVersion < 12;
+ for( cp = paramLine; *cp && (isspace( *cp ) || *cp == '\t'); cp++ );
+ if ( strncmp( cp, sEnd, strlen(sEnd) ) == 0 )
+ cp += strlen( sEnd );
+ else if ( bAllowNakedENDs && strncmp( cp, "END", 3 ) == 0 )
+ cp += 3;
+ else
+ return FALSE;
+ for ( ; *cp && isspace( *cp ); cp++ );
+ if ( *cp != '\0' )
+ return FALSE;
return TRUE;
}
+
+/**
+ * Read the text for a note/car. Lines are read from the input file
+ * until the END statement is found.
+ *
+ * \todo Handle premature end as an error
+ *
+ * \return pointer to string, has to be myfree'd by caller
+ */
+
+char *
+ReadMultilineText()
+{
+ char *string;
+ DynString noteText;
+ DynStringMalloc(&noteText, 0);
+ char *line;
+
+ line = GetNextLine();
+
+ while ( !IsEND("END") ) {
+ DynStringCatCStr(&noteText, line);
+ DynStringCatCStr(&noteText, "\n");
+ line = GetNextLine();
+ }
+ string = MyStrdup(DynStringToCStr(&noteText));
+ string[strlen(string) - 1] = '\0';
+
+#ifdef WINDOWS
+ if (wIsUTF8(string)) {
+ ConvertUTF8ToSystem(string);
+ }
+#endif // WINDOWS
+
+ DynStringFree(&noteText);
+ return(string);
+}
+
+
EXPORT wBool_t ParseRoomSize(
char * s,
coOrd * roomSizeRet )
@@ -493,179 +565,37 @@ EXPORT wBool_t ParseRoomSize(
return FALSE;
}
-
+/**
+ * Parameter file parser definitions
+ *
+ * \param [IN] name command
+ * \param [IN] proc function for reading the parameter definition
+ * \param [IN] delete if not NULL function for freeing the definition
+ */
EXPORT void AddParam(
char * name,
- readParam_t proc )
+ readParam_t proc)
{
DYNARR_APPEND( paramProc_t, paramProc_da, 10 );
paramProc(paramProc_da.cnt-1).name = name;
paramProc(paramProc_da.cnt-1).proc = proc;
}
-
-EXPORT BOOL_T ReadParams(
- long key,
- const char * dirName,
- const char * fileName )
+EXPORT char * PutTitle( char * cp )
{
- FILE * oldFile;
- char *cp;
- wIndex_t oldLineNum;
- wIndex_t pc;
- long oldCheckSum;
- long checkSum=0;
- BOOL_T checkSummed;
- long paramVersion = -1;
- char *oldLocale = NULL;
+ static char *title;
+ char * tp;
+ unsigned cnt = strlen(cp) * 2 + 3; // add 3 for quotes and terminating \0
- if (dirName) {
- MakeFullpath(&paramFileName, dirName, fileName, NULL);
+ if (!title) {
+ title = MyMalloc(cnt);
} else {
- MakeFullpath(&paramFileName, fileName, NULL);
- }
- paramLineNum = 0;
- curBarScale = -1;
- curContents = strdup( fileName );
- curSubContents = curContents;
-
-LOG1( log_paramFile, ("ReadParam( %s )\n", fileName ) )
-
- oldLocale = SaveLocale("C");
-
- paramFile = fopen( paramFileName, "r" );
- if (paramFile == NULL) {
- /* Reset the locale settings */
- RestoreLocale( oldLocale );
-
- NoticeMessage( MSG_OPEN_FAIL, _("Continue"), NULL, _("Parameter"), paramFileName, strerror(errno) );
-
- return FALSE;
- }
- paramCheckSum = key;
- paramLineNum = 0;
- checkSummed = FALSE;
- while ( paramFile && ( fgets(paramLine, 256, paramFile) ) != NULL ) {
- paramLineNum++;
- Stripcr( paramLine );
- if (strncmp( paramLine, "CHECKSUM ", 9 ) == 0) {
- checkSum = atol( paramLine+9 );
- checkSummed = TRUE;
- goto nextLine;
- }
- ParamCheckSumLine( paramLine );
- if (paramLine[0] == '#') {
- /* comment */
- } else if (paramLine[0] == 0) {
- /* empty paramLine */
- } else if (strncmp( paramLine, "INCLUDE ", 8 ) == 0) {
- cp = &paramLine[8];
- while (*cp && isspace((unsigned char)*cp)) cp++;
- if (!*cp) {
- InputError( "INCLUDE - no file name", TRUE );
-
- /* Close file and reset the locale settings */
- if (paramFile) fclose(paramFile);
- RestoreLocale( oldLocale );
-
- return FALSE;
- }
- oldFile = paramFile;
- oldLineNum = paramLineNum;
- oldCheckSum = paramCheckSum;
- ReadParams( key, dirName, cp );
- paramFile = oldFile;
- paramLineNum = oldLineNum;
- paramCheckSum = oldCheckSum;
- if (dirName) {
- MakeFullpath(&paramFileName, dirName, fileName, NULL);
- } else {
- MakeFullpath(&paramFileName, fileName);
- }
- } else if (strncmp( paramLine, "CONTENTS ", 9) == 0 ) {
- curContents = MyStrdup( paramLine+9 );
- curSubContents = curContents;
- } else if (strncmp( paramLine, "SUBCONTENTS ", 12) == 0 ) {
- curSubContents = MyStrdup( paramLine+12 );
- } else if (strncmp( paramLine, "PARAM ", 6) == 0 ) {
- paramVersion = atol( paramLine+6 );
- } else {
- for (pc = 0; pc < paramProc_da.cnt; pc++ ) {
- if (strncmp( paramLine, paramProc(pc).name,
- strlen(paramProc(pc).name)) == 0 ) {
- paramProc(pc).proc( paramLine );
- goto nextLine;
- }
- }
- InputError( "Unknown param line", TRUE );
- }
- nextLine:;
+ title = MyRealloc(title, cnt);
}
- if ( key ) {
- if ( !checkSummed || checkSum != paramCheckSum ) {
- /* Close file and reset the locale settings */
- if (paramFile) fclose(paramFile);
- RestoreLocale( oldLocale );
-
- NoticeMessage( MSG_PROG_CORRUPTED, _("Ok"), NULL, paramFileName );
-
- return FALSE;
- }
- }
- if (paramFile)fclose( paramFile );
- free(paramFileName);
- paramFileName = NULL;
- RestoreLocale( oldLocale );
-
- return TRUE;
-}
+ tp = title;
-static void ReadCustom( void )
-{
- FILE * f;
- MakeFullpath(&customPath, workingDir, sCustomF, NULL);
- customPathBak = MyStrdup( customPath );
- customPathBak[ strlen(customPathBak)-1 ] = '1';
- f = fopen( customPath, "r" );
- if ( f != NULL ) {
- fclose( f );
- curParamFileIndex = PARAM_CUSTOM;
- ReadParams( 0, workingDir, sCustomF );
- }
-}
-
-
-/*
- * Open the file and then set the locale to "C". Old locale will be copied to
- * oldLocale. After the required file I/O is done, the caller must call
- * CloseCustom() with the same locale value that was returned in oldLocale by
- * this function.
- */
-EXPORT FILE * OpenCustom( char *mode )
-{
- FILE * ret = NULL;
-
- if (inPlayback)
- return NULL;
- if ( *mode == 'w' )
- rename( customPath, customPathBak );
- if (customPath) {
- ret = fopen( customPath, mode );
- if (ret == NULL) {
- NoticeMessage( MSG_OPEN_FAIL, _("Continue"), NULL, _("Custom"), customPath, strerror(errno) );
- }
- }
-
- return ret;
-}
-
-
-EXPORT char * PutTitle( char * cp )
-{
- static char title[STR_SIZE];
- char * tp = title;
- while (*cp && (tp-title)<=(sizeof title)-3) {
+ while (*cp ) {
if (*cp == '\"') {
*tp++ = '\"';
*tp++ = '\"';
@@ -677,6 +607,16 @@ EXPORT char * PutTitle( char * cp )
if ( *cp )
NoticeMessage( _("putTitle: title too long: %s"), _("Ok"), NULL, title );
*tp = '\0';
+
+#ifdef WINDOWS
+ if(RequiresConvToUTF8(title)) {
+ char *out = MyMalloc(cnt);
+ wSystemToUTF8(title, out, cnt);
+ strcpy(title, out);
+ MyFree(out);
+ }
+#endif // WINDOWS
+
return title;
}
@@ -694,20 +634,25 @@ void SetWindowTitle( void )
return;
filename = GetLayoutFilename();
- sprintf( message, "%s%s - %s(%s)",
+ sprintf( message, "%s%s%s - %s(%s)",
(filename && filename[0])?filename: _("Unnamed Trackplan"),
- changed>0?"*":"", sProdName, sVersion );
+ bReadOnly?_(" (R/O)"):"",
+ changed>0?"*":"",
+ sProdName, sVersion );
wWinSetTitle( mainW, message );
}
-
+
+
+
/*****************************************************************************
*
* LOAD / SAVE TRACKS
*
*/
-static struct wFilSel_t * loadFile_fs;
-static struct wFilSel_t * saveFile_fs;
+static struct wFilSel_t * loadFile_fs = NULL;
+static struct wFilSel_t * saveFile_fs = NULL;
+static struct wFilSel_t * examplesFile_fs = NULL;
static wWin_p checkPointingW;
static paramData_t checkPointingPLs[] = {
@@ -716,6 +661,7 @@ static paramGroup_t checkPointingPG = { "checkpoint", 0, checkPointingPLs, sizeo
static char * checkPtFileName1;
static char * checkPtFileName2;
+static char * checkPtFileNameBackup;
/** Read the layout design.
*
@@ -760,8 +706,12 @@ static BOOL_T ReadTrackFile(
InfoMessage("0");
count = 0;
+ int skipLines = 0;
+ BOOL_T skip = FALSE;
while ( paramFile && ( fgets(paramLine, sizeof paramLine, paramFile) ) != NULL ) {
count++;
+ BOOL_T old_skip = skip;
+ skip = FALSE;
if (count%10 == 0) {
InfoMessage( "%d", count );
wFlush();
@@ -781,8 +731,8 @@ static BOOL_T ReadTrackFile(
}
if (ReadTrack( paramLine )) {
-
- } else if (strncmp( paramLine, "END", 3 ) == 0) {
+ continue;
+ } else if (IsEND( END_TRK_FILE ) ) {
break;
} else if (strncmp( paramLine, "VERSION ", 8 ) == 0) {
paramVersion = strtol( paramLine+8, &cp, 10 );
@@ -804,8 +754,14 @@ static BOOL_T ReadTrackFile(
if( !(ret = InputError( "unknown command", TRUE )))
break;
} else if (strncmp( paramLine, "TITLE1 ", 7 ) == 0) {
+#ifdef WINDOWS
+ ConvertUTF8ToSystem(paramLine + 7);
+#endif // WINDOWS
SetLayoutTitle(paramLine + 7);
} else if (strncmp( paramLine, "TITLE2 ", 7 ) == 0) {
+#ifdef WINDOWS
+ ConvertUTF8ToSystem(paramLine + 7);
+#endif // WINDOWS
SetLayoutSubtitle(paramLine + 7);
} else if (strncmp( paramLine, "ROOMSIZE", 8 ) == 0) {
if ( ParseRoomSize( paramLine+8, &roomSize ) ) {
@@ -829,39 +785,44 @@ static BOOL_T ReadTrackFile(
} else if (strncmp( paramLine, "LAYERS ", 7 ) == 0) {
ReadLayers( paramLine+7 );
} else {
- if( !(ret = InputError( "unknown command", TRUE )))
- break;
+ if (!old_skip) {
+ if (InputError(_("Unknown layout file object - skip until next good object?"), TRUE)) { //OK to carry on
+ /* SKIP until next main line we recognize */
+ skip = TRUE;
+ skipLines++;
+ continue;
+ } else {
+ break; //Close File
+ }
+ } else skip = TRUE;
+ skipLines++;
}
}
- if (paramFile)
+ if (paramFile) {
fclose(paramFile);
+ paramFile = NULL;
+ }
if( ret ) {
if (!noSetCurDir)
SetCurrentPath( LAYOUTPATHKEY, fileName );
-
- if (full) {
-// SetCurrentPath(LAYOUTPATHKEY, pathName);
- SetLayoutFullPath(pathName);
- //strcpy(curPathName, pathName);
- //curFileName = &curPathName[fileName-pathName];
- SetWindowTitle();
- }
}
+ if (skipLines>0)
+ NoticeMessage( MSG_LAYOUT_LINES_SKIPPED, _("Ok"), NULL, paramFileName, skipLines);
+
RestoreLocale( oldLocale );
paramFile = NULL;
free(paramFileName);
- paramFileName = NULL;
+ paramFileName = NULL;
InfoMessage( "%d", count );
return ret;
}
-
-EXPORT int LoadTracks(
+int LoadTracks(
int cnt,
char **fileName,
void * data)
@@ -869,18 +830,23 @@ EXPORT int LoadTracks(
#ifdef TIME_READTRACKFILE
long time0, time1;
#endif
- char *nameOfFile;
+ char *nameOfFile = NULL;
+
+ char *extOfFile;
assert( fileName != NULL );
- assert( cnt == 1 );
+ assert( cnt == 1 );
- SetCurrentPath(LAYOUTPATHKEY, fileName[0]);
+ if ( ! bExample )
+ SetCurrentPath(LAYOUTPATHKEY, fileName[0]);
+ bReadOnly = bExample;
paramVersion = -1;
- wSetCursor( wCursorWait );
+ wSetCursor( mainD.d, wCursorWait );
Reset();
ClearTracks();
ResetLayers();
checkPtMark = changed = 0;
+ LayoutBackGroundInit(TRUE); //Keep values of background -> will be overriden my archive
UndoSuspend();
useCurrentLayer = FALSE;
#ifdef TIME_READTRACKFILE
@@ -888,8 +854,119 @@ EXPORT int LoadTracks(
#endif
nameOfFile = FindFilename( fileName[ 0 ] );
- if (ReadTrackFile( fileName[ 0 ], nameOfFile, TRUE, FALSE, TRUE )) {
- wMenuListAdd( fileList_ml, 0, nameOfFile, MyStrdup(fileName[0]) );
+ /*
+ * Support zipped filetype
+ */
+ extOfFile = FindFileExtension( nameOfFile);
+
+ BOOL_T zipped = FALSE;
+ BOOL_T loadXTC = TRUE;
+ char * full_path = strdup(fileName[0]);
+
+ if (extOfFile && (strcmp(extOfFile, ZIPFILETYPEEXTENSION )==0)) {
+
+ char * zip_input = GetZipDirectoryName(ARCHIVE_READ);
+
+ //If zipped unpack file into temporary input dir (cleared and re-created)
+
+ DeleteDirectory(zip_input);
+ SafeCreateDir(zip_input);
+
+ if (UnpackArchiveFor(fileName[0], nameOfFile, zip_input, FALSE)) {
+
+ char * manifest_file;
+
+ MakeFullpath(&manifest_file, zip_input, "manifest.json", NULL);
+
+ char * manifest = 0;
+ long length;
+
+ FILE * f = fopen (manifest_file, "rb");
+
+ if (f)
+ {
+ fseek(f, 0, SEEK_END);
+ length = ftell(f);
+ fseek(f, 0, SEEK_SET);
+ manifest = malloc(length + 1);
+ if (manifest) {
+ size_t siz = fread(manifest, 1, length, f);
+ manifest[length] = '\0';
+ }
+ fclose(f);
+ } else
+ {
+ NoticeMessage(MSG_MANIFEST_OPEN_FAIL, _("Continue"), NULL, manifest_file);
+ }
+ free(manifest_file);
+
+ char * arch_file = NULL;
+
+ //Set filename to point to included .xtc file
+ //Use the name inside manifest (this helps if a user renames the zip)
+ if (manifest)
+ {
+ arch_file = ParseManifest(manifest, zip_input);
+ free(manifest);
+ }
+
+ free(full_path);
+ full_path = NULL;
+ // If no manifest value use same name as the archive
+ if (arch_file && arch_file[0])
+ {
+ MakeFullpath(&full_path, zip_input, arch_file, NULL);
+ } else
+ {
+ MakeFullpath(&full_path, zip_input, nameOfFile, NULL);
+ }
+
+ nameOfFile = FindFilename(full_path);
+ extOfFile = FindFileExtension(full_path);
+ if (strcmp(extOfFile, ZIPFILETYPEEXTENSION )==0)
+ {
+ for (int i=0; i<4; i++) {
+ extOfFile[i] = extOfFile[i+1];
+ }
+ }
+ LOG(log_zip, 1, ("Zip-File %s \n", full_path))
+ #if DEBUG
+ printf("File Path: %s \n", full_path);
+ #endif
+ } else {
+ loadXTC = FALSE; // when unzipping fails, don't attempt loading the trackplan
+ }
+ zipped = TRUE;
+
+ free(zip_input);
+
+
+ }
+
+ if ( bExample )
+ bReadOnly = TRUE;
+ else if ( access( fileName[0], W_OK ) == -1 )
+ bReadOnly = TRUE;
+ else
+ bReadOnly = FALSE;
+
+ char *copyOfFileName = MyStrdup(fileName[0]);
+
+ if (loadXTC && ReadTrackFile( full_path, FindFilename( fileName[0]), TRUE, TRUE, TRUE )) {
+
+ nameOfFile = NULL;
+ extOfFile = NULL;
+ SetCurrentPath( LAYOUTPATHKEY, copyOfFileName );
+ SetLayoutFullPath(copyOfFileName);
+ SetWindowTitle();
+
+ if ( ! bExample && (nameOfFile != NULL) ) {
+ char * copyFile = strdup(fileName[0]);
+ char * listName = FindFilename(strdup(fileName[0])); //Make sure the list name is new
+ wMenuListAdd( fileList_ml, 0, listName, copyFile );
+ }
+
+
ResolveIndex();
#ifdef TIME_READTRACKFILE
time1 = wGetTimer();
@@ -902,9 +979,14 @@ EXPORT int LoadTracks(
LoadLayerLists();
LayerSetCounts();
}
+
+ MyFree(copyOfFileName);
+ free(full_path);
+ full_path = NULL;
+
UndoResume();
Reset();
- wSetCursor( wCursorNormal );
+ wSetCursor( mainD.d, defaultCursor );
return TRUE;
}
@@ -913,7 +995,7 @@ EXPORT int LoadTracks(
* path.
* \param index IN ignored
* \param label IN ignored
- * \param data IN path and filename
+ * \param data IN path and filename
*/
EXPORT void DoFileList(
@@ -922,7 +1004,7 @@ EXPORT void DoFileList(
void * data )
{
char *pathName = (char*)data;
-
+ bExample = FALSE;
LoadTracks( 1, &pathName, NULL );
}
@@ -945,7 +1027,7 @@ static BOOL_T DoSaveTracks(
return FALSE;
}
- wSetCursor( wCursorWait );
+ wSetCursor( mainD.d, wCursorWait );
time(&clock);
rc &= fprintf(f,"#%s Version: %s, Date: %s\n", sProdName, sVersion, ctime(&clock) )>0;
rc &= fprintf(f, "VERSION %d %s\n", iParamVersion, PARAMVERSIONVERSION )>0;
@@ -958,34 +1040,156 @@ static BOOL_T DoSaveTracks(
rc &= fprintf(f, "SCALE %s\n", curScaleName )>0;
rc &= WriteLayers( f );
rc &= WriteMainNote( f );
- rc &= WriteTracks( f );
- rc &= fprintf(f, "END\n")>0;
+ rc &= WriteTracks( f, TRUE );
+ rc &= fprintf(f, "%s\n", END_TRK_FILE)>0;
if ( !rc )
NoticeMessage( MSG_WRITE_FAILURE, _("Ok"), NULL, strerror(errno), fileName );
fclose(f);
+ bReadOnly = FALSE;
RestoreLocale( oldLocale );
checkPtMark = changed;
- wSetCursor( wCursorNormal );
+ wSetCursor( mainD.d, defaultCursor );
return rc;
}
+/************************************************
+ * Copy Dependency - copy file into another directory
+ *
+ * \param IN name
+ * \param IN target_dir
+ *
+ * \returns TRUE for success
+ *
+ */
+static BOOL_T CopyDependency(char * name, char * target_dir)
+{
+ char * backname = FindFilename(name);
+ BOOL_T copied = TRUE;
+ FILE * source = fopen(name, "rb");
+
+ if (source != NULL) {
+ char * target_file;
+ MakeFullpath(&target_file, target_dir, backname, NULL);
+ FILE * target = fopen(target_file, "wb");
+
+ if (target != NULL) {
+ char *buffer = MyMalloc(COPYBLOCKSIZE);
+ while (!feof(source)) {
+ size_t bytes = fread(buffer, 1, sizeof(buffer), source);
+ if (bytes) {
+ fwrite(buffer, 1, bytes, target);
+ }
+ }
+ MyFree(buffer);
+ LOG(log_zip, 1, ("Zip-Include %s into %s \n", name, target_file))
+#if DEBUG
+ printf("xtrkcad: Included file %s into %s \n",
+ name, target_file);
+#endif
+ fclose(target);
+ } else {
+ NoticeMessage(MSG_COPY_FAIL, _("Continue"), NULL, name, target_file);
+ copied = FALSE;
+ }
+ free(target_file);
+ fclose(source);
+ } else {
+ NoticeMessage(MSG_COPY_OPEN_FAIL, _("Continue"), NULL, name);
+ copied = FALSE;
+ }
+ return copied;
+}
+
static doSaveCallBack_p doAfterSave;
+
+
static int SaveTracks(
int cnt,
char **fileName,
void * data )
{
- char *nameOfFile;
assert( fileName != NULL );
assert( cnt == 1 );
+ char *nameOfFile = FindFilename(fileName[0]);
+
SetCurrentPath(LAYOUTPATHKEY, fileName[0]);
- DoSaveTracks( fileName[ 0 ] );
+
+ //Support Archive zipped files
+
+ char * extOfFile = FindFileExtension( fileName[0]);
+
+
+ if (extOfFile && (strcmp(extOfFile,ZIPFILETYPEEXTENSION)==0)) {
+
+ char * ArchiveName;
+
+ //Set filename to point to be the same as the included .xtc file.
+ //This is also in the manifest - in case a user renames the archive file.
+
+ char * zip_output = GetZipDirectoryName(ARCHIVE_WRITE);
+
+ DeleteDirectory(zip_output);
+ SafeCreateDir(zip_output);
+
+ MakeFullpath(&ArchiveName, zip_output, nameOfFile, NULL);
+
+ nameOfFile = FindFilename(ArchiveName);
+ extOfFile = FindFileExtension(ArchiveName);
+
+ if (extOfFile && strcmp(extOfFile, ZIPFILETYPEEXTENSION)==0) {
+ // Get rid of the 'e'
+ extOfFile[3] = '\0';
+ }
+
+ char * DependencyDir;
+
+ //The included files are placed (for now) into an includes directory - TODO an array of includes with directories by type
+ MakeFullpath(&DependencyDir, zip_output, "includes", NULL);
+
+ SafeCreateDir(DependencyDir);
+
+ char * background = GetLayoutBackGroundFullPath();
+
+ if (background && background[0])
+ CopyDependency(background,DependencyDir);
+
+ //The details are stored into the manifest - TODO use arrays for files, locations
+ char *oldLocale = SaveLocale("C");
+ char* json_Manifest = CreateManifest(nameOfFile, background, "includes");
+ char * manifest_file;
+
+ MakeFullpath(&manifest_file, zip_output, "manifest.json", NULL);
+
+ FILE *fp = fopen(manifest_file, "wb");
+ if (fp != NULL)
+ {
+ fputs(json_Manifest, fp);
+ fclose(fp);
+ } else {
+ NoticeMessage( MSG_MANIFEST_FAIL, _("Continue"), NULL, manifest_file );
+ }
+ RestoreLocale(oldLocale);
+
+ free(manifest_file);
+ free(json_Manifest);
+
+ DoSaveTracks( ArchiveName );
+
+ if (CreateArchive( zip_output, fileName[0]) != TRUE) {
+ NoticeMessage( MSG_ARCHIVE_FAIL, _("Continue"), NULL, fileName[0], zip_output );
+ }
+ free(zip_output);
+ free(ArchiveName);
+
+ } else
+
+ DoSaveTracks( fileName[ 0 ] );
nameOfFile = FindFilename( fileName[ 0 ] );
wMenuListAdd( fileList_ml, 0, nameOfFile, MyStrdup(fileName[ 0 ]) );
@@ -1003,16 +1207,18 @@ static int SaveTracks(
EXPORT void DoSave( doSaveCallBack_p after )
{
doAfterSave = after;
- if (*(GetLayoutFilename()) == '\0') {
+ if ( bReadOnly || *(GetLayoutFilename()) == '\0') {
if (saveFile_fs == NULL)
saveFile_fs = wFilSelCreate( mainW, FS_SAVE, 0, _("Save Tracks"),
sSourceFilePattern, SaveTracks, NULL );
wFilSelect( saveFile_fs, GetCurrentPath(LAYOUTPATHKEY));
+ changed = checkPtMark = 1;
} else {
- char *temp = GetLayoutFullPath();
+ char *temp = GetLayoutFullPath();
SaveTracks( 1, &temp, NULL );
}
SetWindowTitle();
+ SaveState();
}
EXPORT void DoSaveAs( doSaveCallBack_p after )
@@ -1020,46 +1226,93 @@ EXPORT void DoSaveAs( doSaveCallBack_p after )
doAfterSave = after;
if (saveFile_fs == NULL)
saveFile_fs = wFilSelCreate( mainW, FS_SAVE, 0, _("Save Tracks As"),
- sSourceFilePattern, SaveTracks, NULL );
+ sSaveFilePattern, SaveTracks, NULL );
wFilSelect( saveFile_fs, GetCurrentPath(LAYOUTPATHKEY));
+ changed = checkPtMark = 1;
SetWindowTitle();
+ SaveState();
}
EXPORT void DoLoad( void )
{
- loadFile_fs = wFilSelCreate( mainW, FS_LOAD, 0, _("Open Tracks"),
- sSourceFilePattern, LoadTracks, NULL );
+ if (loadFile_fs == NULL)
+ loadFile_fs = wFilSelCreate( mainW, FS_LOAD, 0, _("Open Tracks"),
+ sSourceFilePattern, LoadTracks, NULL );
+ bExample = FALSE;
wFilSelect( loadFile_fs, GetCurrentPath(LAYOUTPATHKEY));
+ paste_offset = zero;
+ cursor_offset = zero;
+ SaveState();
}
+EXPORT void DoExamples( void )
+{
+ if (examplesFile_fs == NULL) {
+ static wBool_t bExample = TRUE;
+ examplesFile_fs = wFilSelCreate( mainW, FS_LOAD, 0, _("Example Tracks"),
+ sSourceFilePattern, LoadTracks, &bExample );
+ }
+ bExample = TRUE;
+ sprintf( message, "%s" FILE_SEP_CHAR "examples" FILE_SEP_CHAR, libDir );
+ wFilSelect( examplesFile_fs, message );
+ SaveState();
+}
+
+static wIndex_t generations_count = 0;
+wIndex_t max_generations_count = 10;
+static char sCheckPointBF[STR_LONG_SIZE];
+
+
EXPORT void DoCheckPoint( void )
{
int rc;
+ if (!checkPtFileNameBackup || (changed <= checkPtInterval+1)) {
+ sprintf(sCheckPointBF,"%s00.bkp",GetLayoutFilename());
+ MakeFullpath(&checkPtFileNameBackup, workingDir, sCheckPointBF, NULL);
+ }
+
if (checkPointingW == NULL) {
ParamRegister( &checkPointingPG );
checkPointingW = ParamCreateDialog( &checkPointingPG, MakeWindowTitle(_("Check Pointing")), NULL, NULL, NULL, FALSE, NULL, F_TOP|F_CENTER, NULL );
}
rename( checkPtFileName1, checkPtFileName2 );
- wShow( checkPointingW );
+ //wShow( checkPointingW );
rc = DoSaveTracks( checkPtFileName1 );
/* could the check point file be written ok? */
if( rc ) {
- /* yes, delete the backup copy of the checkpoint file */
- remove( checkPtFileName2 );
+ /* yes, archive/delete the backup copy of the checkpoint file */
+ if (checkPtFileNameBackup) {
+ char * spot = strrchr(checkPtFileNameBackup,'.');
+ if (spot && spot>checkPtFileNameBackup+3) {
+ spot[-2]=generations_count/10+'0';
+ spot[-1]=generations_count%10+'0';
+ }
+ generations_count++;
+ if (((autosaveChkPoints == 0) && (generations_count > 5)) ||
+ ((autosaveChkPoints > 0) && (generations_count > autosaveChkPoints)) ) {
+ generations_count = 0;
+ }
+ remove( checkPtFileNameBackup);
+ rename( checkPtFileName2, checkPtFileNameBackup );
+ } else {
+ remove(checkPtFileName2);
+ }
} else {
/* no, rename the backup copy back to the checkpoint file name */
rename( checkPtFileName2, checkPtFileName1 );
}
- wHide( checkPointingW );
+
+ //wHide( checkPointingW );
+ wShow( mainW );
}
/**
- * Remove all temporary files before exiting.When the program terminates
- * normally through the exit choice, files that are created temporarily are removed:
- * xtrkcad.ckp
+ * Remove all temporary files before exiting. When the program terminates
+ * normally through the exit choice, files and directories that were created
+ * temporarily are removed: xtrkcad.ckp
*
* \param none
* \return none
@@ -1068,12 +1321,27 @@ EXPORT void DoCheckPoint( void )
EXPORT void CleanupFiles( void )
{
- if( checkPtFileName1 )
+ char *tempDir;
+
+ if( checkPtFileName1 ) {
+ if (checkPtFileNameBackup) {
+ remove( checkPtFileNameBackup );
+ rename( checkPtFileName1, checkPtFileNameBackup );
+ }
remove( checkPtFileName1 );
+ }
+
+ for (int i = ARCHIVE_READ; i <= ARCHIVE_WRITE; ++i) {
+ tempDir = GetZipDirectoryName(i);
+ if (tempDir) {
+ DeleteDirectory(tempDir);
+ free(tempDir);
+ }
+ }
}
/**
- * Check for existance of checkpoint file. Existance of a checkpoint file means that XTrkCAD was not properly
+ * Check for existence of checkpoint file. Existence of a checkpoint file means that XTrkCAD was not properly
* terminated.
*
* \param none
@@ -1098,37 +1366,52 @@ EXPORT int ExistsCheckpoint( void )
/**
* Load checkpoint file
*
+ * \param if TRUE reuse old filename
+ * \param filename returned
* \return TRUE if exists, FALSE otherwise
*
*/
-EXPORT int LoadCheckpoint( void )
+EXPORT int LoadCheckpoint( BOOL_T sameName )
{
char *search;
paramVersion = -1;
- wSetCursor( wCursorWait );
+ wSetCursor( mainD.d, wCursorWait );
MakeFullpath(&search, workingDir, sCheckPointF, NULL);
UndoSuspend();
if (ReadTrackFile( search, search + strlen(search) - strlen( sCheckPointF ), TRUE, TRUE, TRUE )) {
ResolveIndex();
+ LayoutBackGroundInit(FALSE); //Get Prior BackGround
+ LayoutBackGroundSave(); //Save Background Values
+
+ if (sameName) {
+ long iExample;
+ char * initialFile = (char*)wPrefGetString("misc", "lastlayout");
+ wPrefGetInteger("misc", "lastlayoutexample", &iExample, 0);
+ bExample = (iExample == 1);
+ if (initialFile && strlen(initialFile)) {
+ SetCurrentPath( LAYOUTPATHKEY, initialFile );
+ SetLayoutFullPath(initialFile);
+ }
+ } else SetLayoutFullPath("");
RecomputeElevations();
AttachTrains();
DoChangeNotification( CHANGE_ALL );
DoUpdateTitles();
- }
+ } else SetLayoutFullPath("");
Reset();
UndoResume();
- wSetCursor( wCursorNormal );
+ wSetCursor( mainD.d, defaultCursor );
+
- SetLayoutFullPath("");
SetWindowTitle();
- changed = TRUE;
+ checkPtMark = changed = 1;
free( search );
return TRUE;
}
@@ -1142,6 +1425,15 @@ EXPORT int LoadCheckpoint( void )
static struct wFilSel_t * exportFile_fs;
static struct wFilSel_t * importFile_fs;
+static int importAsModule;
+
+
+
+/*******************************************************************************
+ *
+ * Import Layout Dialog
+ *
+ */
static int ImportTracks(
int cnt,
@@ -1156,27 +1448,40 @@ static int ImportTracks(
nameOfFile = FindFilename(fileName[ 0 ]);
paramVersion = -1;
- wSetCursor( wCursorWait );
+ wSetCursor( mainD.d, wCursorWait );
Reset();
SetAllTrackSelect( FALSE );
+ int saveLayer = curLayer;
+ int layer;
+ if (importAsModule) {
+ layer = FindUnusedLayer(0);
+ if (layer==-1) return FALSE;
+ char LayerName[80];
+ LayerName[0] = '\0';
+ sprintf(LayerName,_("Module - %s"),nameOfFile);
+ if (layer>=0) SetCurrLayer(layer, NULL, 0, NULL, NULL);
+ SetLayerName(layer,LayerName);
+ }
ImportStart();
UndoStart( _("Import Tracks"), "importTracks" );
useCurrentLayer = TRUE;
ReadTrackFile( fileName[ 0 ], nameOfFile, FALSE, FALSE, TRUE );
- ImportEnd();
+ ImportEnd(zero, TRUE, FALSE);
+ if (importAsModule) SetLayerModule(layer,TRUE);
+ useCurrentLayer = FALSE;
+ SetCurrLayer(saveLayer, NULL, 0, NULL, NULL);
/*DoRedraw();*/
EnableCommands();
- wSetCursor( wCursorNormal );
+ wSetCursor( mainD.d, defaultCursor );
paramVersion = paramVersionOld;
- importMove = TRUE;
DoCommandB( (void*)(intptr_t)selectCmdInx );
SelectRecount();
return TRUE;
}
-
-EXPORT void DoImport( void )
+EXPORT void DoImport( void * type )
{
+ importAsModule = (int)(long)type;
if (importFile_fs == NULL)
importFile_fs = wFilSelCreate( mainW, FS_LOAD, 0, _("Import Tracks"),
sImportFilePattern, ImportTracks, NULL );
@@ -1215,18 +1520,19 @@ static int DoExportTracks(
oldLocale = SaveLocale("C");
- wSetCursor( wCursorWait );
+ wSetCursor( mainD.d, wCursorWait );
time(&clock);
fprintf(f,"#%s Version: %s, Date: %s\n", sProdName, sVersion, ctime(&clock) );
fprintf(f, "VERSION %d %s\n", iParamVersion, PARAMVERSIONVERSION );
- ExportTracks( f );
- fprintf(f, "END\n");
+ coOrd offset;
+ ExportTracks( f , &offset);
+ fprintf(f, "%s\n", END_TRK_FILE);
fclose(f);
RestoreLocale( oldLocale );
Reset();
- wSetCursor( wCursorNormal );
+ wSetCursor( mainD.d, defaultCursor );
UpdateAllElevations();
return TRUE;
}
@@ -1246,7 +1552,6 @@ EXPORT void DoExport( void )
}
-
EXPORT BOOL_T EditCopy( void )
{
FILE * f;
@@ -1268,10 +1573,11 @@ EXPORT BOOL_T EditCopy( void )
time(&clock);
fprintf(f,"#%s Version: %s, Date: %s\n", sProdName, sVersion, ctime(&clock) );
fprintf(f, "VERSION %d %s\n", iParamVersion, PARAMVERSIONVERSION );
- ExportTracks(f);
- fprintf(f, "END\n");
+ ExportTracks(f, &paste_offset);
+ fprintf(f, "%s\n", END_TRK_FILE );
RestoreLocale(oldLocale);
fclose(f);
+
return TRUE;
}
@@ -1284,6 +1590,7 @@ EXPORT BOOL_T EditCut( void )
return TRUE;
}
+
/**
* Paste clipboard content. XTrackCAD uses a disk file as clipboard replacement. This file is read and the
* content is inserted.
@@ -1291,16 +1598,24 @@ EXPORT BOOL_T EditCut( void )
* \return TRUE if success, FALSE on error (file not found)
*/
-EXPORT BOOL_T EditPaste( void )
+BOOL_T EditPastePlace( wBool_t inPlace )
{
+
BOOL_T rc = TRUE;
char *oldLocale = NULL;
oldLocale = SaveLocale("C");
- wSetCursor( wCursorWait );
+ wSetCursor( mainD.d, wCursorWait );
Reset();
SetAllTrackSelect( FALSE );
+
+ double offset = 20*mainD.scale/mainD.dpi;
+
+ paste_offset.x += offset;
+ paste_offset.y += offset;
+
+
ImportStart();
UndoStart( _("Paste"), "paste" );
useCurrentLayer = TRUE;
@@ -1308,18 +1623,33 @@ EXPORT BOOL_T EditPaste( void )
NoticeMessage( MSG_CANT_PASTE, _("Continue"), NULL );
rc = FALSE;
}
- ImportEnd();
+ if (inPlace)
+ ImportEnd(paste_offset, FALSE, TRUE);
+ else
+ ImportEnd(zero, FALSE, FALSE);
+ useCurrentLayer = FALSE;
/*DoRedraw();*/
EnableCommands();
- wSetCursor( wCursorNormal );
- importMove = TRUE;
+ wSetCursor( mainD.d, defaultCursor );
DoCommandB( (void*)(intptr_t)selectCmdInx );
SelectRecount();
UpdateAllElevations();
RestoreLocale(oldLocale);
+
return rc;
}
+
+EXPORT BOOL_T EditPaste( void) {
+ return EditPastePlace(FALSE);
+}
+EXPORT BOOL_T EditClone( void ) {
+ BOOL_T rc = TRUE;
+ if (!EditCopy()) return FALSE;
+ if (!EditPastePlace(TRUE)) return FALSE;
+ return rc;
+}
+
/*****************************************************************************
*
* INITIALIZATION
@@ -1333,23 +1663,8 @@ EXPORT void FileInit( void )
}
if ( (workingDir = wGetAppWorkDir()) == NULL )
AbortProg( "wGetAppWorkDir()" );
-}
-
-EXPORT BOOL_T ParamFileInit( void )
-{
- curParamFileIndex = PARAM_DEMO;
- log_paramFile = LogFindIndex( "paramFile" );
- if ( ReadParams( lParamKey, libDir, sParamQF ) == FALSE )
- return FALSE;
-
- curParamFileIndex = PARAM_CUSTOM;
- if (lParamKey == 0) {
- ReadParamFiles();
- ReadCustom();
- }
SetLayoutFullPath("");
- MakeFullpath(&clipBoardN, workingDir, sClipboardF, NULL);
- return TRUE;
+ MakeFullpath(&clipBoardN, workingDir, sClipboardF, NULL);
}
diff --git a/app/bin/fileio.h b/app/bin/fileio.h
index 4f5aa8d..13761bf 100644
--- a/app/bin/fileio.h
+++ b/app/bin/fileio.h
@@ -27,20 +27,24 @@
#include "common.h"
#include "misc.h"
-FILE * paramFile;
+extern FILE * paramFile;
extern char *paramFileName;
-wIndex_t paramLineNum;
-char paramLine[STR_LONG_SIZE];
-char * curContents;
-char * curSubContents;
+extern wIndex_t paramLineNum;
+extern char paramLine[STR_HUGE_SIZE];
+extern char * curContents;
+extern char * curSubContents;
#define PARAM_DEMO (-1)
typedef void (*playbackProc_p)( char * );
typedef BOOL_T (*readParam_t) ( char * );
+typedef BOOL_T (*deleteParam_t) (void *param);
extern const char * workingDir;
extern const char * libDir;
+extern wBool_t bReadOnly;
+extern wBool_t bExample;
+
#define PARAM_CUSTOM (-2)
#define PARAM_LAYOUT (-3)
extern int curParamFileIndex;
@@ -50,17 +54,20 @@ extern unsigned long playbackTimer;
extern wBool_t executableOk;
extern FILE * recordF;
-wBool_t inPlayback;
-wBool_t inPlaybackQuit;
-wWin_p demoW;
-int curDemo;
+extern wBool_t inPlayback;
+extern wBool_t inPlaybackQuit;
+extern wWin_p demoW;
+extern int curDemo;
+
+extern wMenuList_p fileList_ml;
-wMenuList_p fileList_ml;
+#define ZIPFILETYPEEXTENSION "xtce"
#define PARAM_SUBDIR "params"
#define LAYOUTPATHKEY "layout"
#define BITMAPPATHKEY "bitmap"
+#define BACKGROUNDPATHKEY "images"
#define DXFPATHKEY "dxf"
#define PARTLISTPATHKEY "parts"
#define CARSPATHKEY "cars"
@@ -68,16 +75,32 @@ wMenuList_p fileList_ml;
#define IMPORTPATHKEY "import"
#define MACROPATHKEY "macro"
#define CUSTOMPATHKEY "custom"
+#define ARCHIVEPATHKEY "archive"
+
+typedef struct {
+ char * name;
+ readParam_t proc;
+} paramProc_t;
+dynArr_t paramProc_da;
+#define paramProc(N) DYNARR_N( paramProc_t, paramProc_da, N )
void Stripcr( char * );
char * GetNextLine( void );
+#define END_TRK_FILE "END$TRACKS"
+#define END_BLOCK "END$BLOCK"
+#define END_SIGNAL "END$SIGNAL"
+#define END_SEGS "END$SEGS"
+#define END_MESSAGE "END$MESSAGE"
+wBool_t IsEND( char * sEnd );
+
BOOL_T GetArgs( char *, char *, ... );
+char * ReadMultilineText();
BOOL_T ParseRoomSize( char *, coOrd * );
int InputError( char *, BOOL_T, ... );
-void SyntaxError( char *, wIndex_t, wIndex_t );
+void SyntaxError( char *, wIndex_t, wIndex_t );
-void AddParam( char *, readParam_t );
+void AddParam( char *name, readParam_t proc );
FILE * OpenCustom( char * );
@@ -87,29 +110,29 @@ FILE * OpenCustom( char * );
void SetWindowTitle( void );
char * PutTitle( char * cp );
-wBool_t IsParamValid( int );
-char * GetParamFileName( int );
-void RememberParamFiles( void );
-int LoadParamFile( int files, char **fileName, void *data );
-void ReadParamFiles( void );
+
+void ParamFileListLoad(int paramFileCnt, dynArr_t *paramFiles);
+void DoParamFiles(void * junk);
+
int LoadTracks( int cnt, char **fileName, void *data );
-BOOL_T ReadParams( long, const char *, const char * );
typedef void (*doSaveCallBack_p)( void );
void DoSave( doSaveCallBack_p );
void DoSaveAs( doSaveCallBack_p );
void DoLoad( void );
+void DoExamples( void );
void DoFileList( int, char *, void * );
void DoCheckPoint( void );
void CleanupFiles( void );
int ExistsCheckpoint( void );
-int LoadCheckpoint( void );
-void DoImport( void );
+int LoadCheckpoint( BOOL_T );
+void DoImport( void * );
void DoExport( void );
void DoExportDXF( void );
BOOL_T EditCopy( void );
BOOL_T EditCut( void );
BOOL_T EditPaste( void );
+BOOL_T EditClone( void );
void DoRecord( void * );
@@ -124,10 +147,13 @@ void ReadKey( void );
void PopupRegister( void * );
void FileInit( void );
-BOOL_T ParamFileInit( void );
+
BOOL_T MacroInit( void );
char *SaveLocale( char *newLocale );
void RestoreLocale( char * locale );
+// Parameter file search
+void DoSearchParams(void * junk);
+
#endif
diff --git a/app/bin/filenoteui.c b/app/bin/filenoteui.c
new file mode 100644
index 0000000..5ffddd1
--- /dev/null
+++ b/app/bin/filenoteui.c
@@ -0,0 +1,330 @@
+/** \file filenoteui.c
+ * View for the file note
+ */
+
+/* XTrkCad - Model Railroad CAD
+ * Copyright (C) 2018 Martin Fischer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <string.h>
+#include <stdbool.h>
+#ifdef WINDOWS
+ #include <io.h>
+ #define access(path,mode) _access(path,mode)
+ #define F_OK (0)
+#else
+ #include <unistd.h>
+#endif
+#include "custom.h"
+#include "dynstring.h"
+#include "file2uri.h"
+#include "i18n.h"
+#include "misc.h"
+#include "note.h"
+#include "param.h"
+#include "paths.h"
+#include "include/stringxtc.h"
+#include "track.h"
+#include "wlib.h"
+
+extern BOOL_T inDescribeCmd;
+
+#define MYMIN(x, y) (((x) < (y)) ? (x) : (y))
+
+#define DOCUMENTFILEPATTERN "All Files (*.*)|*.*"
+#define DOCUMENTPATHKEY "document"
+
+static struct extraDataNote noteDataInUI;
+static struct wFilSel_t * documentFile_fs;
+
+static void NoteFileOpenExternal(void * junk);
+static void NoteFileBrowse(void * junk);
+
+static paramFloatRange_t r_1000_1000 = { -1000.0, 1000.0, 80 };
+
+// static char *toggleLabels[] = { N_("Copy to archive"), NULL };
+static paramData_t fileEditPLs[] = {
+#define I_ORIGX (0)
+ /*0*/ { PD_FLOAT, &noteDataInUI.pos.x, "origx", PDO_DIM, &r_1000_1000, N_("Position X") },
+#define I_ORIGY (1)
+ /*1*/ { PD_FLOAT, &noteDataInUI.pos.y, "origy", PDO_DIM, &r_1000_1000, N_("Position Y") },
+#define I_LAYER (2)
+ /*2*/ { PD_DROPLIST, &noteDataInUI.layer, "layer", 0, (void*)150, "Layer", 0 },
+#define I_TITLE (3)
+ /*3*/ { PD_STRING, NULL, "title", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)200, N_("Title"), 0, 0, TITLEMAXIMUMLENGTH-1 },
+#define I_PATH (4)
+ { PD_STRING, NULL, "filename", PDO_NOPSHUPD, (void*)200, N_("Document"), BO_READONLY, (void *)0L },
+#define I_BROWSE (5)
+ { PD_BUTTON, (void *)NoteFileBrowse, "browse", 0L, NULL, N_("Select...") },
+#define I_OPEN (6)
+ { PD_BUTTON, (void*)NoteFileOpenExternal, "openfile", PDO_DLGHORZ, NULL, N_("Open...") },
+//#define I_ARCHIVE (7)
+// { PD_TOGGLE, &noteFileData.inArchive, "archive", 0, toggleLabels, NULL },
+
+};
+
+static paramGroup_t fileEditPG = { "fileEdit", 0, fileEditPLs, sizeof fileEditPLs / sizeof fileEditPLs[0] };
+static wWin_p fileEditW;
+
+BOOL_T IsFileNote(track_p trk)
+{
+ struct extraDataNote * xx = (struct extraDataNote *)GetTrkExtraData(trk);
+
+ return(xx->op == OP_NOTEFILE );
+}
+
+/** Check for the file existance
+ *
+ * \param fileName IN file
+ * \return TRUE if exists, FALSE otherwise
+ */
+BOOL_T IsFileValid(char *fileName)
+{
+ if (!strlen(fileName)) {
+ return(FALSE);
+ } else {
+ if (access(fileName, F_OK) == -1) {
+ return(FALSE);
+ }
+ }
+
+ return(TRUE);
+}
+
+/**
+ * Put the selected filename into the dialog
+ *
+ * \param files IN always 1
+ * \param fileName IN name of selected file
+ * \param data IN ignored
+ * \return always 0
+ */
+int LoadDocumentFile(
+ int files,
+ char ** fileName,
+ void * data)
+{
+ wControlActive(fileEditPLs[I_OPEN].control, TRUE);
+ ParamDialogOkActive(&fileEditPG, TRUE);
+ strscpy(noteDataInUI.noteData.fileData.path, *fileName, PATHMAXIMUMLENGTH );
+ ParamLoadControl(&fileEditPG, I_PATH);
+
+ return(0);
+}
+
+/**
+ * Select the file to attach
+ *
+ * \param junk unused
+ */
+static void NoteFileBrowse(void * junk)
+{
+ documentFile_fs = wFilSelCreate(mainW, FS_LOAD, 0, _("Add Document"), DOCUMENTFILEPATTERN, LoadDocumentFile, NULL);
+
+ wFilSelect(documentFile_fs, GetCurrentPath(DOCUMENTPATHKEY));
+
+ wControlActive(fileEditPLs[I_OPEN].control,
+ (strlen(noteDataInUI.noteData.fileData.path) ? TRUE : FALSE));
+
+ return;
+}
+
+/**
+ * Open the file using an external program. Before opening the file existance and permissions are checked.
+ * If access is not allowed the Open Button is disabled
+ *
+ * \param fileName IN file
+ */
+
+static void NoteFileOpen(char *fileName)
+{
+ if (IsFileValid(fileName)) {
+ wOpenFileExternal(fileName);
+ } else {
+ wNoticeEx(NT_ERROR, _("The file doesn't exist or cannot be read!"), _("Cancel"), NULL);
+ if (fileEditW) {
+ wControlActive(fileEditPLs[I_OPEN].control, FALSE);
+ }
+ }
+}
+
+static void
+NoteFileOpenExternal(void * junk)
+{
+ NoteFileOpen(noteDataInUI.noteData.fileData.path);
+}
+/**
+ * Handle the dialog actions
+ */
+static void
+FileDlgUpdate(
+ paramGroup_p pg,
+ int inx,
+ void * valueP)
+{
+ switch (inx) {
+ case I_ORIGX:
+ case I_ORIGY:
+ UpdateFile(&noteDataInUI, OR_NOTE, FALSE);
+ break;
+ case I_LAYER:
+ UpdateFile(&noteDataInUI, LY_NOTE, FALSE);
+ break;
+ case I_PATH:
+ if (IsFileValid(noteDataInUI.noteData.fileData.path)) {
+ wControlActive(fileEditPLs[I_OPEN].control, TRUE);
+ } else {
+ wControlActive(fileEditPLs[I_OPEN].control, FALSE);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+
+/**
+ * Handle Cancel button: restore old values for layer and position
+ */
+
+static void
+FileEditCancel( wWin_p junk)
+{
+ if (inDescribeCmd) {
+ UpdateFile(&noteDataInUI, CANCEL_NOTE, FALSE);
+ }
+ ResetIfNotSticky();
+ wHide(fileEditW);
+}
+/**
+ * Handle OK button: make sure the entered filename is syntactically valid, update
+ * the layout and close the dialog
+ *
+ * \param junk
+ */
+
+static void
+FileEditOK(void *junk)
+{
+ UpdateFile(&noteDataInUI, OK_FILE, FALSE);
+ wHide(fileEditW);
+ ResetIfNotSticky();
+ FileIsChanged();
+}
+
+/**
+ * Show the attachment edit dialog. Create if non-existant
+ *
+ * \param trk IN track element to edit
+ * \param windowTitle IN title for the edit dialog window
+ */
+
+void CreateEditFileDialog(track_p trk, char * windowTitle)
+{
+ struct extraDataNote *xx = (struct extraDataNote *)GetTrkExtraData(trk);
+
+ if (!fileEditW) {
+ noteDataInUI.noteData.fileData.path = MyMalloc(PATHMAXIMUMLENGTH);
+ noteDataInUI.noteData.fileData.title = MyMalloc(TITLEMAXIMUMLENGTH);
+ fileEditPLs[I_TITLE].valueP = noteDataInUI.noteData.fileData.title;
+ fileEditPLs[I_PATH].valueP = noteDataInUI.noteData.fileData.path;
+
+ ParamRegister(&fileEditPG);
+ fileEditW = ParamCreateDialog(&fileEditPG,
+ "",
+ _("Done"), FileEditOK,
+ FileEditCancel, TRUE, NULL,
+ F_BLOCK,
+ FileDlgUpdate);
+ }
+
+ wWinSetTitle(fileEditPG.win, MakeWindowTitle(windowTitle));
+
+ noteDataInUI.pos = xx->pos;
+ noteDataInUI.layer = xx->layer;
+ noteDataInUI.trk = trk;
+ strscpy(noteDataInUI.noteData.fileData.title, xx->noteData.fileData.title, TITLEMAXIMUMLENGTH);
+ strscpy(noteDataInUI.noteData.fileData.path, xx->noteData.fileData.path, PATHMAXIMUMLENGTH);
+ FillLayerList((wList_p)fileEditPLs[I_LAYER].control);
+ ParamLoadControls(&fileEditPG);
+ wControlActive(fileEditPLs[I_OPEN].control, (IsFileValid(noteDataInUI.noteData.fileData.path)?TRUE:FALSE));
+
+ wShow(fileEditW);
+}
+
+/**
+ * Activate note if double clicked
+ * \param trk the note
+ */
+
+void ActivateFileNote(track_p trk)
+{
+ struct extraDataNote *xx = (struct extraDataNote *)GetTrkExtraData(trk);
+
+ NoteFileOpen(xx->noteData.fileData.path);
+}
+
+/**
+ * Describe and enable editing of an existing link note
+ *
+ * \param trk the existing, valid note
+ * \param str the field to put a text version of the note so it will appear on the status line
+ * \param len the lenght of the field
+ */
+
+void DescribeFileNote(track_p trk, char * str, CSIZE_T len)
+{
+ struct extraDataNote *xx = (struct extraDataNote *)GetTrkExtraData(trk);
+ DynString statusLine;
+
+ DynStringMalloc(&statusLine, 80);
+
+ DynStringPrintf(&statusLine,
+ _("Document(%d) Layer=%d %-.80s [%s]"),
+ GetTrkIndex(trk),
+ GetTrkLayer(trk) + 1,
+ xx->noteData.fileData.title,
+ xx->noteData.fileData.path);
+
+ strcpy(str, DynStringToCStr(&statusLine));
+ DynStringFree(&statusLine);
+
+ if (inDescribeCmd) {
+ NoteStateSave(trk);
+
+ CreateEditFileDialog(trk, _("Update document"));
+ }
+}
+
+/**
+ * Take a new note track element and initialize it. It will be
+ * initialized with defaults and can then be edited by the user.
+ *
+ * \param the newly created trk
+ */
+
+void NewFileNoteUI(track_p trk)
+{
+ struct extraDataNote * xx = (struct extraDataNote *)GetTrkExtraData(trk);
+ char *tmpPtrText = _("Describe the file");
+
+ xx->noteData.fileData.title = MyStrdup(tmpPtrText);
+ xx->noteData.fileData.path = MyStrdup("");
+
+ CreateEditFileDialog(trk,
+ _("Attach document"));
+}
diff --git a/app/bin/helphelper.c b/app/bin/helphelper.c
index 013ff0a..36083b8 100644
--- a/app/bin/helphelper.c
+++ b/app/bin/helphelper.c
@@ -117,6 +117,7 @@ main( int argc, char **argv )
if( numBytes == sizeof(int)) {
printf( "HelpHelper: Expecting %d bytes\n", len );
numBytes2 = read( handleOfPipe, buffer, len + 1 );
+ buffer[numBytes2] = '\0';
if (numBytes2 > 0)
printf( "HelpHelper: Display help on: %s\n", buffer );
diff --git a/app/bin/include/dirent.h b/app/bin/include/dirent.h
new file mode 100644
index 0000000..fdfbe5b
--- /dev/null
+++ b/app/bin/include/dirent.h
@@ -0,0 +1,1254 @@
+/*
+ * Dirent interface for Microsoft Visual Studio
+ *
+ * Copyright (C) 2006-2012 Toni Ronkko
+ * This file is part of dirent. Dirent may be freely distributed
+ * under the MIT license. For all details and documentation, see
+ * https://github.com/tronkko/dirent
+ */
+#ifndef DIRENT_H
+#define DIRENT_H
+
+ /*
+ * Include windows.h without Windows Sockets 1.1 to prevent conflicts with
+ * Windows Sockets 2.0.
+ */
+#ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <wchar.h>
+#include <string.h>
+#include <stdlib.h>
+#include <malloc.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+ /* Indicates that d_type field is available in dirent structure */
+#define _DIRENT_HAVE_D_TYPE
+
+/* Indicates that d_namlen field is available in dirent structure */
+#define _DIRENT_HAVE_D_NAMLEN
+
+/* Entries missing from MSVC 6.0 */
+#if !defined(FILE_ATTRIBUTE_DEVICE)
+# define FILE_ATTRIBUTE_DEVICE 0x40
+#endif
+
+/* File type and permission flags for stat(), general mask */
+#if !defined(S_IFMT)
+# define S_IFMT _S_IFMT
+#endif
+
+/* Directory bit */
+#if !defined(S_IFDIR)
+# define S_IFDIR _S_IFDIR
+#endif
+
+/* Character device bit */
+#if !defined(S_IFCHR)
+# define S_IFCHR _S_IFCHR
+#endif
+
+/* Pipe bit */
+#if !defined(S_IFFIFO)
+# define S_IFFIFO _S_IFFIFO
+#endif
+
+/* Regular file bit */
+#if !defined(S_IFREG)
+# define S_IFREG _S_IFREG
+#endif
+
+/* Read permission */
+#if !defined(S_IREAD)
+# define S_IREAD _S_IREAD
+#endif
+
+/* Write permission */
+#if !defined(S_IWRITE)
+# define S_IWRITE _S_IWRITE
+#endif
+
+/* Execute permission */
+#if !defined(S_IEXEC)
+# define S_IEXEC _S_IEXEC
+#endif
+
+/* Pipe */
+#if !defined(S_IFIFO)
+# define S_IFIFO _S_IFIFO
+#endif
+
+/* Block device */
+#if !defined(S_IFBLK)
+# define S_IFBLK 0
+#endif
+
+/* Link */
+#if !defined(S_IFLNK)
+# define S_IFLNK 0
+#endif
+
+/* Socket */
+#if !defined(S_IFSOCK)
+# define S_IFSOCK 0
+#endif
+
+/* Read user permission */
+#if !defined(S_IRUSR)
+# define S_IRUSR S_IREAD
+#endif
+
+/* Write user permission */
+#if !defined(S_IWUSR)
+# define S_IWUSR S_IWRITE
+#endif
+
+/* Execute user permission */
+#if !defined(S_IXUSR)
+# define S_IXUSR 0
+#endif
+
+/* Read group permission */
+#if !defined(S_IRGRP)
+# define S_IRGRP 0
+#endif
+
+/* Write group permission */
+#if !defined(S_IWGRP)
+# define S_IWGRP 0
+#endif
+
+/* Execute group permission */
+#if !defined(S_IXGRP)
+# define S_IXGRP 0
+#endif
+
+/* Read others permission */
+#if !defined(S_IROTH)
+# define S_IROTH 0
+#endif
+
+/* Write others permission */
+#if !defined(S_IWOTH)
+# define S_IWOTH 0
+#endif
+
+/* Execute others permission */
+#if !defined(S_IXOTH)
+# define S_IXOTH 0
+#endif
+
+/* Maximum length of file name */
+#if !defined(PATH_MAX)
+# define PATH_MAX MAX_PATH
+#endif
+#if !defined(FILENAME_MAX)
+# define FILENAME_MAX MAX_PATH
+#endif
+#if !defined(NAME_MAX)
+# define NAME_MAX FILENAME_MAX
+#endif
+
+/* File type flags for d_type */
+#define DT_UNKNOWN 0
+#define DT_REG S_IFREG
+#define DT_DIR S_IFDIR
+#define DT_FIFO S_IFIFO
+#define DT_SOCK S_IFSOCK
+#define DT_CHR S_IFCHR
+#define DT_BLK S_IFBLK
+#define DT_LNK S_IFLNK
+
+/* Macros for converting between st_mode and d_type */
+#define IFTODT(mode) ((mode) & S_IFMT)
+#define DTTOIF(type) (type)
+
+/*
+ * File type macros. Note that block devices, sockets and links cannot be
+ * distinguished on Windows and the macros S_ISBLK, S_ISSOCK and S_ISLNK are
+ * only defined for compatibility. These macros should always return false
+ * on Windows.
+ */
+#if !defined(S_ISFIFO)
+# define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO)
+#endif
+#if !defined(S_ISDIR)
+# define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
+#endif
+#if !defined(S_ISREG)
+# define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
+#endif
+#if !defined(S_ISLNK)
+# define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK)
+#endif
+#if !defined(S_ISSOCK)
+# define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK)
+#endif
+#if !defined(S_ISCHR)
+# define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR)
+#endif
+#if !defined(S_ISBLK)
+# define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK)
+#endif
+
+ /* Return the exact length of the file name without zero terminator */
+#define _D_EXACT_NAMLEN(p) ((p)->d_namlen)
+
+/* Return the maximum size of a file name */
+#define _D_ALLOC_NAMLEN(p) ((PATH_MAX)+1)
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /* Wide-character version */
+ struct _wdirent {
+ /* Always zero */
+ long d_ino;
+
+ /* File position within stream */
+ long d_off;
+
+ /* Structure size */
+ unsigned short d_reclen;
+
+ /* Length of name without \0 */
+ size_t d_namlen;
+
+ /* File type */
+ int d_type;
+
+ /* File name */
+ wchar_t d_name[PATH_MAX + 1];
+ };
+ typedef struct _wdirent _wdirent;
+
+ struct _WDIR {
+ /* Current directory entry */
+ struct _wdirent ent;
+
+ /* Private file data */
+ WIN32_FIND_DATAW data;
+
+ /* True if data is valid */
+ int cached;
+
+ /* Win32 search handle */
+ HANDLE handle;
+
+ /* Initial directory name */
+ wchar_t *patt;
+ };
+ typedef struct _WDIR _WDIR;
+
+ /* Multi-byte character version */
+ struct dirent {
+ /* Always zero */
+ long d_ino;
+
+ /* File position within stream */
+ long d_off;
+
+ /* Structure size */
+ unsigned short d_reclen;
+
+ /* Length of name without \0 */
+ size_t d_namlen;
+
+ /* File type */
+ int d_type;
+
+ /* File name */
+ char d_name[PATH_MAX + 1];
+ };
+ typedef struct dirent dirent;
+
+ struct DIR {
+ struct dirent ent;
+ struct _WDIR *wdirp;
+ };
+ typedef struct DIR DIR;
+
+
+ /* Dirent functions */
+ static DIR *opendir(const char *dirname);
+ static _WDIR *_wopendir(const wchar_t *dirname);
+
+ static struct dirent *readdir(DIR *dirp);
+ static struct _wdirent *_wreaddir(_WDIR *dirp);
+
+ static int readdir_r(
+ DIR *dirp, struct dirent *entry, struct dirent **result);
+ static int _wreaddir_r(
+ _WDIR *dirp, struct _wdirent *entry, struct _wdirent **result);
+
+ static int closedir(DIR *dirp);
+ static int _wclosedir(_WDIR *dirp);
+
+ static void rewinddir(DIR* dirp);
+ static void _wrewinddir(_WDIR* dirp);
+
+ static int scandir(const char *dirname, struct dirent ***namelist,
+ int(*filter)(const struct dirent*),
+ int(*compare)(const struct dirent**, const struct dirent**));
+
+ static int alphasort(const struct dirent **a, const struct dirent **b);
+
+ static int versionsort(const struct dirent **a, const struct dirent **b);
+
+
+ /* For compatibility with Symbian */
+#define wdirent _wdirent
+#define WDIR _WDIR
+#define wopendir _wopendir
+#define wreaddir _wreaddir
+#define wclosedir _wclosedir
+#define wrewinddir _wrewinddir
+
+
+/* Internal utility functions */
+ static WIN32_FIND_DATAW *dirent_first(_WDIR *dirp);
+ static WIN32_FIND_DATAW *dirent_next(_WDIR *dirp);
+
+ static int dirent_mbstowcs_s(
+ size_t *pReturnValue,
+ wchar_t *wcstr,
+ size_t sizeInWords,
+ const char *mbstr,
+ size_t count);
+
+ static int dirent_wcstombs_s(
+ size_t *pReturnValue,
+ char *mbstr,
+ size_t sizeInBytes,
+ const wchar_t *wcstr,
+ size_t count);
+
+ static void dirent_set_errno(int error);
+
+
+ /*
+ * Open directory stream DIRNAME for read and return a pointer to the
+ * internal working area that is used to retrieve individual directory
+ * entries.
+ */
+ static _WDIR*
+ _wopendir(
+ const wchar_t *dirname)
+ {
+ _WDIR *dirp = NULL;
+ int error;
+
+ /* Must have directory name */
+ if (dirname == NULL || dirname[0] == '\0') {
+ dirent_set_errno(ENOENT);
+ return NULL;
+ }
+
+ /* Allocate new _WDIR structure */
+ dirp = (_WDIR*)malloc(sizeof(struct _WDIR));
+ if (dirp != NULL) {
+ DWORD n;
+
+ /* Reset _WDIR structure */
+ dirp->handle = INVALID_HANDLE_VALUE;
+ dirp->patt = NULL;
+ dirp->cached = 0;
+
+ /* Compute the length of full path plus zero terminator
+ *
+ * Note that on WinRT there's no way to convert relative paths
+ * into absolute paths, so just assume it is an absolute path.
+ */
+# if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP)
+ n = wcslen(dirname);
+# else
+ n = GetFullPathNameW(dirname, 0, NULL, NULL);
+# endif
+
+ /* Allocate room for absolute directory name and search pattern */
+ dirp->patt = (wchar_t*)malloc(sizeof(wchar_t) * n + 16);
+ if (dirp->patt) {
+
+ /*
+ * Convert relative directory name to an absolute one. This
+ * allows rewinddir() to function correctly even when current
+ * working directory is changed between opendir() and rewinddir().
+ *
+ * Note that on WinRT there's no way to convert relative paths
+ * into absolute paths, so just assume it is an absolute path.
+ */
+# if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP)
+ wcsncpy_s(dirp->patt, n + 1, dirname, n);
+# else
+ n = GetFullPathNameW(dirname, n, dirp->patt, NULL);
+# endif
+ if (n > 0) {
+ wchar_t *p;
+
+ /* Append search pattern \* to the directory name */
+ p = dirp->patt + n;
+ if (dirp->patt < p) {
+ switch (p[-1]) {
+ case '\\':
+ case '/':
+ case ':':
+ /* Directory ends in path separator, e.g. c:\temp\ */
+ /*NOP*/;
+ break;
+
+ default:
+ /* Directory name doesn't end in path separator */
+ *p++ = '\\';
+ }
+ }
+ *p++ = '*';
+ *p = '\0';
+
+ /* Open directory stream and retrieve the first entry */
+ if (dirent_first(dirp)) {
+ /* Directory stream opened successfully */
+ error = 0;
+ }
+ else {
+ /* Cannot retrieve first entry */
+ error = 1;
+ dirent_set_errno(ENOENT);
+ }
+
+ }
+ else {
+ /* Cannot retrieve full path name */
+ dirent_set_errno(ENOENT);
+ error = 1;
+ }
+
+ }
+ else {
+ /* Cannot allocate memory for search pattern */
+ error = 1;
+ }
+
+ }
+ else {
+ /* Cannot allocate _WDIR structure */
+ error = 1;
+ }
+
+ /* Clean up in case of error */
+ if (error && dirp) {
+ _wclosedir(dirp);
+ dirp = NULL;
+ }
+
+ return dirp;
+ }
+
+ /*
+ * Read next directory entry.
+ *
+ * Returns pointer to static directory entry which may be overwritten by
+ * subsequent calls to _wreaddir().
+ */
+ static struct _wdirent*
+ _wreaddir(
+ _WDIR *dirp)
+ {
+ struct _wdirent *entry;
+
+ /*
+ * Read directory entry to buffer. We can safely ignore the return value
+ * as entry will be set to NULL in case of error.
+ */
+ (void)_wreaddir_r(dirp, &dirp->ent, &entry);
+
+ /* Return pointer to statically allocated directory entry */
+ return entry;
+ }
+
+ /*
+ * Read next directory entry.
+ *
+ * Returns zero on success. If end of directory stream is reached, then sets
+ * result to NULL and returns zero.
+ */
+ static int
+ _wreaddir_r(
+ _WDIR *dirp,
+ struct _wdirent *entry,
+ struct _wdirent **result)
+ {
+ WIN32_FIND_DATAW *datap;
+
+ /* Read next directory entry */
+ datap = dirent_next(dirp);
+ if (datap) {
+ size_t n;
+ DWORD attr;
+
+ /*
+ * Copy file name as wide-character string. If the file name is too
+ * long to fit in to the destination buffer, then truncate file name
+ * to PATH_MAX characters and zero-terminate the buffer.
+ */
+ n = 0;
+ while (n < PATH_MAX && datap->cFileName[n] != 0) {
+ entry->d_name[n] = datap->cFileName[n];
+ n++;
+ }
+ entry->d_name[n] = 0;
+
+ /* Length of file name excluding zero terminator */
+ entry->d_namlen = n;
+
+ /* File type */
+ attr = datap->dwFileAttributes;
+ if ((attr & FILE_ATTRIBUTE_DEVICE) != 0) {
+ entry->d_type = DT_CHR;
+ }
+ else if ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) {
+ entry->d_type = DT_DIR;
+ }
+ else {
+ entry->d_type = DT_REG;
+ }
+
+ /* Reset dummy fields */
+ entry->d_ino = 0;
+ entry->d_off = 0;
+ entry->d_reclen = sizeof(struct _wdirent);
+
+ /* Set result address */
+ *result = entry;
+
+ }
+ else {
+
+ /* Return NULL to indicate end of directory */
+ *result = NULL;
+
+ }
+
+ return /*OK*/0;
+ }
+
+ /*
+ * Close directory stream opened by opendir() function. This invalidates the
+ * DIR structure as well as any directory entry read previously by
+ * _wreaddir().
+ */
+ static int
+ _wclosedir(
+ _WDIR *dirp)
+ {
+ int ok;
+ if (dirp) {
+
+ /* Release search handle */
+ if (dirp->handle != INVALID_HANDLE_VALUE) {
+ FindClose(dirp->handle);
+ dirp->handle = INVALID_HANDLE_VALUE;
+ }
+
+ /* Release search pattern */
+ if (dirp->patt) {
+ free(dirp->patt);
+ dirp->patt = NULL;
+ }
+
+ /* Release directory structure */
+ free(dirp);
+ ok = /*success*/0;
+
+ }
+ else {
+
+ /* Invalid directory stream */
+ dirent_set_errno(EBADF);
+ ok = /*failure*/-1;
+
+ }
+ return ok;
+ }
+
+ /*
+ * Rewind directory stream such that _wreaddir() returns the very first
+ * file name again.
+ */
+ static void
+ _wrewinddir(
+ _WDIR* dirp)
+ {
+ if (dirp) {
+ /* Release existing search handle */
+ if (dirp->handle != INVALID_HANDLE_VALUE) {
+ FindClose(dirp->handle);
+ }
+
+ /* Open new search handle */
+ dirent_first(dirp);
+ }
+ }
+
+ /* Get first directory entry (internal) */
+ static WIN32_FIND_DATAW*
+ dirent_first(
+ _WDIR *dirp)
+ {
+ WIN32_FIND_DATAW *datap;
+
+ /* Open directory and retrieve the first entry */
+ dirp->handle = FindFirstFileExW(
+ dirp->patt, FindExInfoStandard, &dirp->data,
+ FindExSearchNameMatch, NULL, 0);
+ if (dirp->handle != INVALID_HANDLE_VALUE) {
+
+ /* a directory entry is now waiting in memory */
+ datap = &dirp->data;
+ dirp->cached = 1;
+
+ }
+ else {
+
+ /* Failed to re-open directory: no directory entry in memory */
+ dirp->cached = 0;
+ datap = NULL;
+
+ }
+ return datap;
+ }
+
+ /*
+ * Get next directory entry (internal).
+ *
+ * Returns
+ */
+ static WIN32_FIND_DATAW*
+ dirent_next(
+ _WDIR *dirp)
+ {
+ WIN32_FIND_DATAW *p;
+
+ /* Get next directory entry */
+ if (dirp->cached != 0) {
+
+ /* A valid directory entry already in memory */
+ p = &dirp->data;
+ dirp->cached = 0;
+
+ }
+ else if (dirp->handle != INVALID_HANDLE_VALUE) {
+
+ /* Get the next directory entry from stream */
+ if (FindNextFileW(dirp->handle, &dirp->data) != FALSE) {
+ /* Got a file */
+ p = &dirp->data;
+ }
+ else {
+ /* The very last entry has been processed or an error occurred */
+ FindClose(dirp->handle);
+ dirp->handle = INVALID_HANDLE_VALUE;
+ p = NULL;
+ }
+
+ }
+ else {
+
+ /* End of directory stream reached */
+ p = NULL;
+
+ }
+
+ return p;
+ }
+
+ /*
+ * Open directory stream using plain old C-string.
+ */
+ static DIR*
+ opendir(
+ const char *dirname)
+ {
+ struct DIR *dirp;
+ int error;
+
+ /* Must have directory name */
+ if (dirname == NULL || dirname[0] == '\0') {
+ dirent_set_errno(ENOENT);
+ return NULL;
+ }
+
+ /* Allocate memory for DIR structure */
+ dirp = (DIR*)malloc(sizeof(struct DIR));
+ if (dirp) {
+ wchar_t wname[PATH_MAX + 1];
+ size_t n;
+
+ /* Convert directory name to wide-character string */
+ error = dirent_mbstowcs_s(
+ &n, wname, PATH_MAX + 1, dirname, PATH_MAX + 1);
+ if (!error) {
+
+ /* Open directory stream using wide-character name */
+ dirp->wdirp = _wopendir(wname);
+ if (dirp->wdirp) {
+ /* Directory stream opened */
+ error = 0;
+ }
+ else {
+ /* Failed to open directory stream */
+ error = 1;
+ }
+
+ }
+ else {
+ /*
+ * Cannot convert file name to wide-character string. This
+ * occurs if the string contains invalid multi-byte sequences or
+ * the output buffer is too small to contain the resulting
+ * string.
+ */
+ error = 1;
+ }
+
+ }
+ else {
+ /* Cannot allocate DIR structure */
+ error = 1;
+ }
+
+ /* Clean up in case of error */
+ if (error && dirp) {
+ free(dirp);
+ dirp = NULL;
+ }
+
+ return dirp;
+ }
+
+ /*
+ * Read next directory entry.
+ */
+ static struct dirent*
+ readdir(
+ DIR *dirp)
+ {
+ struct dirent *entry;
+
+ /*
+ * Read directory entry to buffer. We can safely ignore the return value
+ * as entry will be set to NULL in case of error.
+ */
+ (void)readdir_r(dirp, &dirp->ent, &entry);
+
+ /* Return pointer to statically allocated directory entry */
+ return entry;
+ }
+
+ /*
+ * Read next directory entry into called-allocated buffer.
+ *
+ * Returns zero on success. If the end of directory stream is reached, then
+ * sets result to NULL and returns zero.
+ */
+ static int
+ readdir_r(
+ DIR *dirp,
+ struct dirent *entry,
+ struct dirent **result)
+ {
+ WIN32_FIND_DATAW *datap;
+
+ /* Read next directory entry */
+ datap = dirent_next(dirp->wdirp);
+ if (datap) {
+ size_t n;
+ int error;
+
+ /* Attempt to convert file name to multi-byte string */
+ error = dirent_wcstombs_s(
+ &n, entry->d_name, PATH_MAX + 1, datap->cFileName, PATH_MAX + 1);
+
+ /*
+ * If the file name cannot be represented by a multi-byte string,
+ * then attempt to use old 8+3 file name. This allows traditional
+ * Unix-code to access some file names despite of unicode
+ * characters, although file names may seem unfamiliar to the user.
+ *
+ * Be ware that the code below cannot come up with a short file
+ * name unless the file system provides one. At least
+ * VirtualBox shared folders fail to do this.
+ */
+ if (error && datap->cAlternateFileName[0] != '\0') {
+ error = dirent_wcstombs_s(
+ &n, entry->d_name, PATH_MAX + 1,
+ datap->cAlternateFileName, PATH_MAX + 1);
+ }
+
+ if (!error) {
+ DWORD attr;
+
+ /* Length of file name excluding zero terminator */
+ entry->d_namlen = n - 1;
+
+ /* File attributes */
+ attr = datap->dwFileAttributes;
+ if ((attr & FILE_ATTRIBUTE_DEVICE) != 0) {
+ entry->d_type = DT_CHR;
+ }
+ else if ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) {
+ entry->d_type = DT_DIR;
+ }
+ else {
+ entry->d_type = DT_REG;
+ }
+
+ /* Reset dummy fields */
+ entry->d_ino = 0;
+ entry->d_off = 0;
+ entry->d_reclen = sizeof(struct dirent);
+
+ }
+ else {
+
+ /*
+ * Cannot convert file name to multi-byte string so construct
+ * an erroneous directory entry and return that. Note that
+ * we cannot return NULL as that would stop the processing
+ * of directory entries completely.
+ */
+ entry->d_name[0] = '?';
+ entry->d_name[1] = '\0';
+ entry->d_namlen = 1;
+ entry->d_type = DT_UNKNOWN;
+ entry->d_ino = 0;
+ entry->d_off = -1;
+ entry->d_reclen = 0;
+
+ }
+
+ /* Return pointer to directory entry */
+ *result = entry;
+
+ }
+ else {
+
+ /* No more directory entries */
+ *result = NULL;
+
+ }
+
+ return /*OK*/0;
+ }
+
+ /*
+ * Close directory stream.
+ */
+ static int
+ closedir(
+ DIR *dirp)
+ {
+ int ok;
+ if (dirp) {
+
+ /* Close wide-character directory stream */
+ ok = _wclosedir(dirp->wdirp);
+ dirp->wdirp = NULL;
+
+ /* Release multi-byte character version */
+ free(dirp);
+
+ }
+ else {
+
+ /* Invalid directory stream */
+ dirent_set_errno(EBADF);
+ ok = /*failure*/-1;
+
+ }
+ return ok;
+ }
+
+ /*
+ * Rewind directory stream to beginning.
+ */
+ static void
+ rewinddir(
+ DIR* dirp)
+ {
+ /* Rewind wide-character string directory stream */
+ _wrewinddir(dirp->wdirp);
+ }
+
+ /*
+ * Scan directory for entries.
+ */
+ static int
+ scandir(
+ const char *dirname,
+ struct dirent ***namelist,
+ int(*filter)(const struct dirent*),
+ int(*compare)(const struct dirent**, const struct dirent**))
+ {
+ struct dirent **files = NULL;
+ size_t size = 0;
+ size_t allocated = 0;
+ const size_t init_size = 1;
+ DIR *dir = NULL;
+ struct dirent *entry;
+ struct dirent *tmp = NULL;
+ size_t i;
+ int result = 0;
+
+ /* Open directory stream */
+ dir = opendir(dirname);
+ if (dir) {
+
+ /* Read directory entries to memory */
+ while (1) {
+
+ /* Enlarge pointer table to make room for another pointer */
+ if (size >= allocated) {
+ void *p;
+ size_t num_entries;
+
+ /* Compute number of entries in the enlarged pointer table */
+ if (size < init_size) {
+ /* Allocate initial pointer table */
+ num_entries = init_size;
+ }
+ else {
+ /* Double the size */
+ num_entries = size * 2;
+ }
+
+ /* Allocate first pointer table or enlarge existing table */
+ p = realloc(files, sizeof(void*) * num_entries);
+ if (p != NULL) {
+ /* Got the memory */
+ files = (dirent**)p;
+ allocated = num_entries;
+ }
+ else {
+ /* Out of memory */
+ result = -1;
+ break;
+ }
+
+ }
+
+ /* Allocate room for temporary directory entry */
+ if (tmp == NULL) {
+ tmp = (struct dirent*) malloc(sizeof(struct dirent));
+ if (tmp == NULL) {
+ /* Cannot allocate temporary directory entry */
+ result = -1;
+ break;
+ }
+ }
+
+ /* Read directory entry to temporary area */
+ if (readdir_r(dir, tmp, &entry) == /*OK*/0) {
+
+ /* Did we get an entry? */
+ if (entry != NULL) {
+ int pass;
+
+ /* Determine whether to include the entry in result */
+ if (filter) {
+ /* Let the filter function decide */
+ pass = filter(tmp);
+ }
+ else {
+ /* No filter function, include everything */
+ pass = 1;
+ }
+
+ if (pass) {
+ /* Store the temporary entry to pointer table */
+ files[size++] = tmp;
+ tmp = NULL;
+
+ /* Keep up with the number of files */
+ result++;
+ }
+
+ }
+ else {
+
+ /*
+ * End of directory stream reached => sort entries and
+ * exit.
+ */
+ qsort(files, size, sizeof(void*),
+ (int(*) (const void*, const void*)) compare);
+ break;
+
+ }
+
+ }
+ else {
+ /* Error reading directory entry */
+ result = /*Error*/ -1;
+ break;
+ }
+
+ }
+
+ }
+ else {
+ /* Cannot open directory */
+ result = /*Error*/ -1;
+ }
+
+ /* Release temporary directory entry */
+ if (tmp) {
+ free(tmp);
+ }
+
+ /* Release allocated memory on error */
+ if (result < 0) {
+ for (i = 0; i < size; i++) {
+ free(files[i]);
+ }
+ free(files);
+ files = NULL;
+ }
+
+ /* Close directory stream */
+ if (dir) {
+ closedir(dir);
+ }
+
+ /* Pass pointer table to caller */
+ if (namelist) {
+ *namelist = files;
+ }
+ return result;
+ }
+
+ /* Alphabetical sorting */
+ static int
+ alphasort(
+ const struct dirent **a, const struct dirent **b)
+ {
+ return strcoll((*a)->d_name, (*b)->d_name);
+ }
+
+ /* Sort versions */
+ static int
+ versionsort(
+ const struct dirent **a, const struct dirent **b)
+ {
+ /* FIXME: implement strverscmp and use that */
+ return alphasort(a, b);
+ }
+
+ /* Convert multi-byte string to wide character string */
+ static int
+ dirent_mbstowcs_s(
+ size_t *pReturnValue,
+ wchar_t *wcstr,
+ size_t sizeInWords,
+ const char *mbstr,
+ size_t count)
+ {
+ int error;
+ int n;
+ size_t len;
+ UINT cp;
+ DWORD flags;
+
+ /* Determine code page for multi-byte string */
+ if (AreFileApisANSI()) {
+ /* Default ANSI code page */
+ cp = GetACP();
+ }
+ else {
+ /* Default OEM code page */
+ cp = GetOEMCP();
+ }
+
+ /*
+ * Determine flags based on the character set. For more information,
+ * please see https://docs.microsoft.com/fi-fi/windows/desktop/api/stringapiset/nf-stringapiset-multibytetowidechar
+ */
+ switch (cp) {
+ case 42:
+ case 50220:
+ case 50221:
+ case 50222:
+ case 50225:
+ case 50227:
+ case 50229:
+ case 57002:
+ case 57003:
+ case 57004:
+ case 57005:
+ case 57006:
+ case 57007:
+ case 57008:
+ case 57009:
+ case 57010:
+ case 57011:
+ case 65000:
+ /* MultiByteToWideChar does not support MB_ERR_INVALID_CHARS */
+ flags = 0;
+ break;
+
+ default:
+ /*
+ * Ask MultiByteToWideChar to return an error if a multi-byte
+ * character cannot be converted to a wide-character.
+ */
+ flags = MB_ERR_INVALID_CHARS;
+ }
+
+ /* Compute the length of input string without zero-terminator */
+ len = 0;
+ while (mbstr[len] != '\0' && len < count) {
+ len++;
+ }
+
+ /* Convert to wide-character string */
+ n = MultiByteToWideChar(
+ /* Source code page */ cp,
+ /* Flags */ flags,
+ /* Pointer to string to convert */ mbstr,
+ /* Size of multi-byte string */ (int)len,
+ /* Pointer to output buffer */ wcstr,
+ /* Size of output buffer */ sizeInWords - 1
+ );
+
+ /* Ensure that output buffer is zero-terminated */
+ wcstr[n] = '\0';
+
+ /* Return length of wide-character string with zero-terminator */
+ *pReturnValue = (size_t)(n + 1);
+
+ /* Return zero if conversion succeeded */
+ if (n > 0) {
+ error = 0;
+ }
+ else {
+ error = 1;
+ }
+ return error;
+ }
+
+ /* Convert wide-character string to multi-byte string */
+ static int
+ dirent_wcstombs_s(
+ size_t *pReturnValue,
+ char *mbstr,
+ size_t sizeInBytes, /* max size of mbstr */
+ const wchar_t *wcstr,
+ size_t count)
+ {
+ int n;
+ int error;
+ UINT cp;
+ size_t len;
+ BOOL flag = 0;
+ LPBOOL pflag;
+
+ /* Determine code page for multi-byte string */
+ if (AreFileApisANSI()) {
+ /* Default ANSI code page */
+ cp = GetACP();
+ }
+ else {
+ /* Default OEM code page */
+ cp = GetOEMCP();
+ }
+
+ /* Compute the length of input string without zero-terminator */
+ len = 0;
+ while (wcstr[len] != '\0' && len < count) {
+ len++;
+ }
+
+ /*
+ * Determine if we can ask WideCharToMultiByte to return information on
+ * broken characters. For more information, please see
+ * https://docs.microsoft.com/en-us/windows/desktop/api/stringapiset/nf-stringapiset-widechartomultibyte
+ */
+ switch (cp) {
+ case CP_UTF7:
+ case CP_UTF8:
+ /*
+ * WideCharToMultiByte fails if we request information on default
+ * characters. This is just a nuisance but doesn't affect the
+ * conversion: if Windows is configured to use UTF-8, then the default
+ * character should not be needed anyway.
+ */
+ pflag = NULL;
+ break;
+
+ default:
+ /*
+ * Request that WideCharToMultiByte sets the flag if it uses the
+ * default character.
+ */
+ pflag = &flag;
+ }
+
+ /* Convert wide-character string to multi-byte character string */
+ n = WideCharToMultiByte(
+ /* Target code page */ cp,
+ /* Flags */ 0,
+ /* Pointer to unicode string */ wcstr,
+ /* Length of unicode string */ (int)len,
+ /* Pointer to output buffer */ mbstr,
+ /* Size of output buffer */ sizeInBytes - 1,
+ /* Default character */ NULL,
+ /* Whether default character was used or not */ pflag
+ );
+
+ /* Ensure that output buffer is zero-terminated */
+ mbstr[n] = '\0';
+
+ /* Return length of multi-byte string with zero-terminator */
+ *pReturnValue = (size_t)(n + 1);
+
+ /* Return zero if conversion succeeded without using default characters */
+ if (n > 0 && flag == 0) {
+ error = 0;
+ }
+ else {
+ error = 1;
+ }
+ return error;
+ }
+
+ /* Set errno variable */
+ static void
+ dirent_set_errno(
+ int error)
+ {
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+
+ /* Microsoft Visual Studio 2005 and later */
+ _set_errno(error);
+
+#else
+
+ /* Non-Microsoft compiler or older Microsoft compiler */
+ errno = error;
+
+#endif
+ }
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*DIRENT_H*/#pragma once
diff --git a/app/bin/include/paramfile.h b/app/bin/include/paramfile.h
new file mode 100644
index 0000000..b177b15
--- /dev/null
+++ b/app/bin/include/paramfile.h
@@ -0,0 +1,26 @@
+#ifndef HAVE_PARAMFILE_H
+ #define HAVE_PARAMFILE_H
+ #include <stdbool.h>
+ #include <wlib.h>
+ #include "common.h"
+
+ extern DIST_T curBarScale;
+ extern dynArr_t paramProc_da;
+ extern dynArr_t paramFileInfo_da;
+
+ void ParamCheckSumLine(char * line);
+ wBool_t IsParamValid(int fileInx);
+ bool IsParamFileDeleted(int fileInx);
+ bool IsParamFileFavorite(int fileInx);
+ void SetParamFileState(int index);
+ int ReadParamFile(const char *fileName);
+ int ReloadDeletedParamFile(int fileindex);
+ void SetParamFileDeleted(int fileInx, bool deleted);
+ void SetParamFileFavorite(int fileInx, bool favorite);
+ char * GetParamFileName(int fileInx);
+ char * GetParamFileContents(int fileInx);
+ bool ReadParams(long key, const char * dirName, const char * fileName);
+
+ #define CONTENTSCOMMAND "CONTENTS"
+ char *GetParameterFileContent(char *file);
+#endif // !HAVE_PARAMFILE_H
diff --git a/app/bin/include/paramfilelist.h b/app/bin/include/paramfilelist.h
new file mode 100644
index 0000000..a1c081d
--- /dev/null
+++ b/app/bin/include/paramfilelist.h
@@ -0,0 +1,32 @@
+#ifndef HAVE_PARAMFILELIST_H
+ #define HAVE_PARAMFILELIST_H
+ #include <stdbool.h>
+ #include "include/paramfile.h"
+
+ typedef struct {
+ char * name; /** < name of parameter file */
+ char * contents;
+ bool deleted;
+ bool valid; /** < FALSE for dropped file */
+ bool favorite;
+ enum paramFileState trackState;
+ } paramFileInfo_t;
+ typedef paramFileInfo_t * paramFileInfo_p;
+
+ #define paramFileInfo(N) DYNARR_N( paramFileInfo_t, paramFileInfo_da, N )
+
+ char *GetParamFileDir(void);
+ void SetParamFileDir(char *fullPath);
+ void LoadParamFileList(void);
+ BOOL_T ReadDefaultParams(const char * dirName);
+ void SaveParamFileList(void);
+ int GetParamFileCount();
+ void UpdateParamFileList(void);
+ void ParamFilesChange(long changes);
+ int LoadParamFile(int files, char ** fileName, void * data);
+ BOOL_T ParamFileListInit(void);
+
+ void SearchUiOk(void * junk);
+ bool ReloadParamFile(wIndex_t index);
+ bool UnloadParamFile(wIndex_t fileIndex);
+#endif // !HAVE_PARAMFILELIST_H
diff --git a/app/bin/include/partcatalog.h b/app/bin/include/partcatalog.h
new file mode 100644
index 0000000..eec9d1e
--- /dev/null
+++ b/app/bin/include/partcatalog.h
@@ -0,0 +1,70 @@
+/** \file partcatalog.h
+* Manage the catalog of track parameter files
+*/
+/* XTrkCad - Model Railroad CAD
+* Copyright (C) 2019 Martin Fischer
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#ifndef HAVE_TRACKCATALOG_H
+#define HAVE_TRACKCATALOG_H
+
+#include <stdbool.h>
+
+#define MAXFILESPERCONTENT 10 /**< count of files with the same content header */
+#define ESTIMATED_CONTENTS_WORDS 10 /**< average count of words in CONTENTS header */
+
+struct sCatalogEntry {
+ struct sCatalogEntry *next;
+ unsigned files; /**< current count of files */
+ char *fullFileName[MAXFILESPERCONTENT]; /**< fully qualified file name */
+ char *contents; /**< content field of parameter file */
+ struct sCatalogEntry *indirect; /**< pointer to another catalog entry */
+};
+
+typedef struct sCatalogEntry CatalogEntry;
+
+struct sIndexEntry {
+ CatalogEntry *value; /**< catalog entry having the key word in contents */
+ char *keyWord; /**< keyword */
+};
+
+typedef struct sIndexEntry IndexEntry;
+
+struct sTrackLibrary {
+ CatalogEntry *catalog; /**< list of files cataloged */
+ IndexEntry *index; /**< Index for lookup */
+ unsigned wordCount; /**< How many words indexed */
+ void * words_array; /**< The array of words */
+ unsigned trackTypeCount; /**< */
+};
+
+typedef struct sTrackLibrary
+ TrackLibrary; /**< core data structure for the catalog */
+
+CatalogEntry *InitCatalog(void);
+TrackLibrary *InitLibrary(void);
+TrackLibrary *CreateLibrary(char *directory);
+void DeleteLibrary(TrackLibrary *tracklib);
+bool GetTrackFiles(TrackLibrary *trackLib, char *directory);
+int GetParameterFileInfo(int files, char ** fileName, void * data);
+unsigned CreateLibraryIndex(TrackLibrary *trackLib);
+unsigned SearchLibrary(TrackLibrary *library, char *searchExpression, CatalogEntry *resultEntries);
+unsigned CountCatalogEntries(CatalogEntry *listHeader);
+void EmptyCatalog(CatalogEntry *listHeader);
+unsigned SearchLibrary(TrackLibrary *library, char *searchExpression, CatalogEntry *resultEntries);
+bool FilterKeyword(char *word);
+#endif // !HAVE_TRACKCATALOG_H
diff --git a/app/bin/include/stringxtc.h b/app/bin/include/stringxtc.h
new file mode 100644
index 0000000..cbadd0e
--- /dev/null
+++ b/app/bin/include/stringxtc.h
@@ -0,0 +1,8 @@
+#include <stddef.h>
+
+#ifndef HAVE_STRINGXTC_H
+ #define HAVE_STRINGXTC_H
+ size_t strscpy(char *dest, const char *src, size_t count);
+ char *XtcStrlwr(char *str);
+ int XtcStricmp(const char *a, const char *b);
+#endif
diff --git a/app/bin/include/utf8convert.h b/app/bin/include/utf8convert.h
new file mode 100644
index 0000000..6a3e678
--- /dev/null
+++ b/app/bin/include/utf8convert.h
@@ -0,0 +1,24 @@
+/* XTrackCad - Model Railroad CAD
+ * Copyright (C) 2020 Martin Fischer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef HAVE_UTF8CONVERT_H
+#include <stdbool.h>
+char *Convert2UTF8(char *string);
+bool RequiresConvToUTF8(char *string);
+void ConvertUTF8ToSystem(unsigned char *in);
+#endif // HAVE_UTF8CONVERT_H
diff --git a/app/bin/layout.c b/app/bin/layout.c
index 584e62b..a77cbb2 100644
--- a/app/bin/layout.c
+++ b/app/bin/layout.c
@@ -31,6 +31,8 @@
#include "paths.h"
#include "track.h"
#include "wlib.h"
+#include "fileio.h"
+#include "utility.h"
#define MINTRACKRADIUSPREFS "minTrackRadius"
@@ -43,6 +45,11 @@ struct sLayoutProps {
DIST_T minTrackRadius;
DIST_T maxTrackGrade;
coOrd roomSize;
+ DynString backgroundFileName;
+ coOrd backgroundPos;
+ ANGLE_T backgroundAngle;
+ int backgroundScreen;
+ double backgroundSize;
};
struct sDataLayout {
@@ -51,8 +58,8 @@ struct sDataLayout {
struct sLayoutProps *copyOfLayoutProps;
};
-struct sDataLayout thisLayout = {
- { "", "", -1, 0, 0, 0.0, 5.0, {0.0, 0.0} },
+static struct sDataLayout thisLayout = {
+ { "", "", -1, 0, 0, 0.0, 5.0, {0.0, 0.0}, NaS, {0.0, 0.0}, 0.0, 0, 0.0 },
NaS,
NULL,
};
@@ -60,6 +67,9 @@ struct sDataLayout thisLayout = {
static paramFloatRange_t r0_90 = { 0, 90 };
static paramFloatRange_t r1_10000 = { 1, 10000 };
static paramFloatRange_t r1_9999999 = { 1, 9999999 };
+static paramFloatRange_t r360_360 = { -360, 360 };
+static paramFloatRange_t rN_9999999 = { -99999, 99999 };
+static paramIntegerRange_t i0_100 = { 0, 100 };
static void LayoutDlgUpdate(paramGroup_p pg, int inx, void * valueP);
@@ -72,14 +82,18 @@ static void LayoutDlgUpdate(paramGroup_p pg, int inx, void * valueP);
void
SetLayoutFullPath(const char *fileName)
{
- if (DynStringToCStr(&thisLayout.fullFileName) != fileName) {
- if (isnas(&thisLayout.fullFileName)) {
- DynStringMalloc(&thisLayout.fullFileName, strlen(fileName) + 1);
- } else {
- DynStringClear(&thisLayout.fullFileName);
- }
-
- DynStringCatCStr(&thisLayout.fullFileName, fileName);
+ if (fileName && fileName[0]) {
+ if (DynStringSize(&thisLayout.fullFileName)) {
+ if (strcmp(DynStringToCStr(&thisLayout.fullFileName),fileName)==0) {
+ return;
+ }
+ DynStringClear(&thisLayout.fullFileName);
+ }
+ DynStringMalloc(&thisLayout.fullFileName, strlen(fileName) + 1);
+ DynStringCatCStr(&thisLayout.fullFileName, fileName);
+ } else {
+ DynStringMalloc(&thisLayout.fullFileName, 2);
+ DynStringCatCStr(&thisLayout.fullFileName, "");
}
}
@@ -157,6 +171,41 @@ SetLayoutCurGauge(GAUGEINX_T gauge)
thisLayout.props.curGaugeInx = gauge;
}
+void SetLayoutBackGroundFullPath(const char *fileName) {
+ if (fileName && fileName[0]) {
+ if (DynStringSize(&thisLayout.props.backgroundFileName)) {
+ if (strcmp(DynStringToCStr(&thisLayout.props.backgroundFileName),fileName)==0) {
+ return;
+ }
+ DynStringClear(&thisLayout.props.backgroundFileName);
+ }
+ DynStringMalloc(&thisLayout.props.backgroundFileName, strlen(fileName) + 1);
+ DynStringCatCStr(&thisLayout.props.backgroundFileName, fileName);
+ } else {
+ DynStringClear(&thisLayout.props.backgroundFileName);
+ DynStringCatCStr(&thisLayout.props.backgroundFileName, "");
+ }
+}
+
+void SetLayoutBackGroundSize(double size) {
+ thisLayout.props.backgroundSize = size;
+}
+
+void SetLayoutBackGroundPos(coOrd pos) {
+ thisLayout.props.backgroundPos = pos;
+
+}
+
+void SetLayoutBackGroundAngle(ANGLE_T angle) {
+ thisLayout.props.backgroundAngle = angle;
+
+}
+
+void SetLayoutBackGroundScreen(int screen) {
+ thisLayout.props.backgroundScreen = screen;
+
+}
+
/**
* Return the full filename.
*
@@ -166,7 +215,8 @@ SetLayoutCurGauge(GAUGEINX_T gauge)
char *
GetLayoutFullPath()
{
- return (DynStringToCStr(&thisLayout.fullFileName));
+ char * s = DynStringToCStr(&thisLayout.fullFileName);
+ return s;
}
/**
@@ -181,7 +231,7 @@ GetLayoutFilename()
char *string = DynStringToCStr(&thisLayout.fullFileName);
if (string) {
- return (FindFilename(string));
+ return FindFilename(string);
} else {
return (NULL);
}
@@ -222,14 +272,188 @@ GetLayoutCurScale()
{
return (thisLayout.props.curScaleInx);
}
+
+char *
+GetLayoutBackGroundFullPath()
+{
+ char * s = DynStringToCStr(&thisLayout.props.backgroundFileName);
+ return s;
+}
+
+double
+GetLayoutBackGroundSize()
+{
+ if (thisLayout.props.backgroundSize > 0.0) {
+ return (thisLayout.props.backgroundSize);
+ } else {
+ return (thisLayout.props.roomSize.x);
+ }
+}
+
+coOrd
+GetLayoutBackGroundPos()
+{
+ return (thisLayout.props.backgroundPos);
+}
+
+ANGLE_T
+GetLayoutBackGroundAngle()
+{
+ return (thisLayout.props.backgroundAngle);
+}
+
+int GetLayoutBackGroundScreen()
+{
+ return (thisLayout.props.backgroundScreen);
+}
+
/****************************************************************************
*
* Layout Dialog
*
*/
+static char backgroundFileName[STR_LONG_SIZE];
+#define TEXT_FIELD_LEN 40
static wWin_p layoutW;
+/**************************************************************************************
+* Show only the end of the background file path including the filename in the Dialog
+*/
+void SetName() {
+ char * name = GetLayoutBackGroundFullPath();
+ if (name && name[0]) { //Ignore ""
+ if (name && (strlen(name)<=TEXT_FIELD_LEN)) {
+ for (unsigned int i=0; i<=strlen(name);i++) {
+ backgroundFileName[i] = name[i];
+ }
+ backgroundFileName[strlen(name)] = '\0';
+ } else {
+ for (int i=TEXT_FIELD_LEN;i>=0; i--) {
+ backgroundFileName[i] = name[strlen(name)-(TEXT_FIELD_LEN-i)];
+ }
+ backgroundFileName[TEXT_FIELD_LEN] = '\0'; //Insurance
+ }
+ } else backgroundFileName[0] = '\0';
+}
+
+static struct wFilSel_t * imageFile_fs;
+
+static paramData_p layout_p;
+static paramGroup_t * layout_pg_p;
+static wBool_t file_changed;
+
+EXPORT BOOL_T haveBackground = FALSE;
+BOOL_T backgroundVisible = TRUE;
+
+char * noname = "";
+
+void
+BackgroundToggleShow()
+{
+ backgroundVisible = !backgroundVisible;
+ wButtonSetBusy(backgroundB, backgroundVisible);
+ MainRedraw();
+}
+
+int GetLayoutBackGroundVisible()
+{
+ return(backgroundVisible);
+}
+
+/*****************************************
+* Try to load the background image file
+*/
+wBool_t
+LoadBackGroundImage(void)
+{
+ char * error;
+ char * background = GetLayoutBackGroundFullPath();
+ if (wDrawSetBackground( mainD.d, background, &error)==-1) {
+ NoticeMessage(_("Unable to load Image File - %s"),_("Ok"),NULL,error);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/*******************************************************
+* Callback from File Select for Background Image File
+*
+* \param files number of files selected (only first file is used)
+* \param fileName array of pointers to filenames
+* \param data unused
+* \return FALSE
+*/
+EXPORT int LoadImageFile(
+ int files,
+ char ** fileName,
+ void * data )
+{
+ if (files >0) {
+ SetLayoutBackGroundFullPath( strdup(fileName[0]));
+
+ if (!LoadBackGroundImage()) {
+ SetLayoutBackGroundFullPath(noname);
+ backgroundVisible = FALSE;
+ }
+ else {
+ backgroundVisible = TRUE;
+ SetCurrentPath(BACKGROUNDPATHKEY, fileName[0]);
+ }
+ } else {
+ SetLayoutBackGroundFullPath(noname);
+ backgroundVisible = FALSE;
+ }
+ wControlActive((wControl_p)backgroundB, backgroundVisible);
+ wButtonSetBusy(backgroundB, backgroundVisible);
+
+ SetName();
+ file_changed = TRUE;
+ ParamLoadControl(layout_pg_p, 8);
+ return FALSE;
+}
+
+/**********************************************************
+ * Save the Background Parms - forcing a write
+ */
+void LayoutBackGroundSave(void) {
+ char * background = GetLayoutBackGroundFullPath();
+ wPrefSetString("layout", "BackgroundPath", background);
+ wPrefSetFloat("layout", "BackgroundPosX", thisLayout.props.backgroundPos.x);
+ wPrefSetFloat("layout", "BackgroundPosY", thisLayout.props.backgroundPos.y);
+ wPrefSetFloat("layout", "BackgroundAngle", thisLayout.props.backgroundAngle);
+ wPrefSetInteger("layout", "BackgroundScreen", thisLayout.props.backgroundScreen);
+ wPrefSetFloat("layout", "BackgroundSize", thisLayout.props.backgroundSize);
+
+ wPrefFlush();
+}
+
+/************************************************************
+ * Run File Select for the Background Image File
+ */
+static void ImageFileBrowse( void * junk )
+{
+ imageFile_fs = wFilSelCreate( mainW, FS_LOAD, FS_PICTURES, _("Load Background"), sImageFilePattern, LoadImageFile, NULL );
+
+ wFilSelect( imageFile_fs, GetCurrentPath( BACKGROUNDPATHKEY ) );
+ return;
+}
+
+/************************************************************
+ * Remove the background Image File
+ */
+static void ImageFileClear( void * junk)
+{
+ char * noname = "";
+ SetLayoutBackGroundFullPath(noname);
+ wDrawSetBackground( mainD.d, NULL, NULL);
+ SetName();
+ wControlActive((wControl_p)backgroundB, FALSE);
+ file_changed = TRUE;
+ ParamLoadControl(layout_pg_p, 8);
+ MainRedraw();
+}
+
static paramData_t layoutPLs[] = {
{ PD_FLOAT, &thisLayout.props.roomSize.x, "roomsizeX", PDO_NOPREF | PDO_DIM | PDO_NOPSHUPD | PDO_DRAW, &r1_9999999, N_("Room Width"), 0, (void*)(CHANGE_MAIN | CHANGE_MAP) },
{ PD_FLOAT, &thisLayout.props.roomSize.y, "roomsizeY", PDO_NOPREF | PDO_DIM | PDO_NOPSHUPD | PDO_DRAW | PDO_DLGHORZ, &r1_9999999, N_(" Height"), 0, (void*)(CHANGE_MAIN | CHANGE_MAP) },
@@ -241,7 +465,22 @@ static paramData_t layoutPLs[] = {
{ PD_DROPLIST, &thisLayout.props.curGaugeInx, "gauge", PDO_NOPREF | PDO_NOPSHUPD | PDO_NORECORD | PDO_NOUPDACT | PDO_DLGHORZ, (void *)120, N_(" Gauge"), 0, (void *)(CHANGE_SCALE) },
#define MINRADIUSENTRY (6)
{ PD_FLOAT, &thisLayout.props.minTrackRadius, "mintrackradius", PDO_DIM | PDO_NOPSHUPD | PDO_NOPREF, &r1_10000, N_("Min Track Radius"), 0, (void*)(CHANGE_MAIN | CHANGE_LIMITS) },
- { PD_FLOAT, &thisLayout.props.maxTrackGrade, "maxtrackgrade", PDO_NOPSHUPD | PDO_DLGHORZ, &r0_90, N_(" Max Track Grade (%)"), 0, (void*)(CHANGE_MAIN) }
+ { PD_FLOAT, &thisLayout.props.maxTrackGrade, "maxtrackgrade", PDO_NOPSHUPD | PDO_DLGHORZ, &r0_90, N_(" Max Track Grade (%)"), 0, (void*)(CHANGE_MAIN) },
+#define BACKGROUNDFILEENTRY (8) //Note this value used in the file section routines above - if it chnages, they will need to change
+ { PD_STRING, &backgroundFileName, "backgroundfile", PDO_NOPSHUPD, NULL, N_("Background File Path"), 0, (void *)(CHANGE_BACKGROUND) },
+ { PD_BUTTON, (void*)ImageFileBrowse, "browse", PDO_DLGHORZ, NULL, N_("Browse ...") },
+ { PD_BUTTON, (void*)ImageFileClear, "clear", PDO_DLGHORZ, NULL, N_("Clear") },
+#define BACKGROUNDPOSX (11)
+ { PD_FLOAT, &thisLayout.props.backgroundPos.x, "backgroundposX", PDO_DIM | PDO_NOPSHUPD | PDO_DRAW, &rN_9999999, N_("Background PosX,Y"), 0, (void*)(CHANGE_BACKGROUND) },
+#define BACKGROUNDPOSY (12)
+ { PD_FLOAT, &thisLayout.props.backgroundPos.y, "backgroundposY", PDO_DIM | PDO_NOPSHUPD | PDO_DRAW | PDO_DLGHORZ, &rN_9999999, NULL, 0, (void*)(CHANGE_BACKGROUND) },
+#define BACKGROUNDWIDTH (13)
+ { PD_FLOAT, &thisLayout.props.backgroundSize, "backgroundWidth", PDO_DIM | PDO_NOPSHUPD | PDO_DRAW, &r1_9999999, N_("Background Size"), 0, (void*)(CHANGE_BACKGROUND) },
+#define BACKGROUNDSCREEN (14)
+ { PD_LONG, &thisLayout.props.backgroundScreen, "backgroundScreen", PDO_NOPSHUPD | PDO_DRAW, &i0_100, N_("Background Screen %"), 0, (void*)(CHANGE_BACKGROUND) },
+#define BACKGROUNDANGLE (15)
+ { PD_FLOAT, &thisLayout.props.backgroundAngle, "backgroundAngle", PDO_NOPSHUPD | PDO_DRAW, &r360_360, N_("Background Angle"), 0, (void*)(CHANGE_BACKGROUND) }
+
};
static paramGroup_t layoutPG = { "layout", PGO_RECORD | PGO_PREFMISC, layoutPLs, sizeof layoutPLs / sizeof layoutPLs[0] };
@@ -278,10 +517,20 @@ static void LayoutOk(void * junk)
wPrefSetFloat("misc", prefString, thisLayout.props.minTrackRadius);
}
+ if ((changes & CHANGE_BACKGROUND) || file_changed) {
+
+ LayoutBackGroundSave();
+ file_changed = FALSE;
+ }
+
free(thisLayout.copyOfLayoutProps);
wHide(layoutW);
+
+ MainLayout( TRUE, TRUE );
}
+
+
/**
* Discard the changes entered and replace with earlier values
*
@@ -297,7 +546,7 @@ static void LayoutCancel(struct wWin_t *junk)
static void LayoutChange(long changes)
{
- if (changes & (CHANGE_SCALE | CHANGE_UNITS))
+ if (changes & (CHANGE_SCALE | CHANGE_UNITS | CHANGE_BACKGROUND))
if (layoutW != NULL && wWinIsVisible(layoutW)) {
ParamLoadControls(&layoutPG);
}
@@ -305,7 +554,7 @@ static void LayoutChange(long changes)
void DoLayout(void * junk)
{
- thisLayout.props.roomSize = mapD.size;
+ SetLayoutRoomSize(mapD.size);
if (layoutW == NULL) {
layoutW = ParamCreateDialog(&layoutPG, MakeWindowTitle(_("Layout Options")),
@@ -313,6 +562,8 @@ void DoLayout(void * junk)
LoadScaleList((wList_p)layoutPLs[4].control);
}
+ ParamControlActive(&layoutPG, BACKGROUNDFILEENTRY, FALSE);
+
LoadGaugeList((wList_p)layoutPLs[5].control,
thisLayout.props.curScaleDescInx); /* set correct gauge list here */
thisLayout.copyOfLayoutProps = malloc(sizeof(struct sLayoutProps));
@@ -320,7 +571,7 @@ void DoLayout(void * junk)
if (!thisLayout.copyOfLayoutProps) {
exit(1);
}
-
+ SetName();
*(thisLayout.copyOfLayoutProps) = thisLayout.props;
ParamLoadControls(&layoutPG);
@@ -331,6 +582,8 @@ EXPORT addButtonCallBack_t LayoutInit(void)
{
ParamRegister(&layoutPG);
RegisterChangeNotification(LayoutChange);
+ layout_p = layoutPLs;
+ layout_pg_p = &layoutPG;
return &DoLayout;
}
@@ -372,4 +625,83 @@ LayoutDlgUpdate(
wStringSetValue((wString_p)layoutPLs[MINRADIUSENTRY].control,
FormatDistance(thisLayout.props.minTrackRadius));
}
+ if (inx == BACKGROUNDPOSX) {
+ coOrd pos;
+ pos.x = *(double *)valueP;
+ pos.y = GetLayoutBackGroundPos().y;
+ SetLayoutBackGroundPos(pos);
+ MainRedraw();
+ }
+ if (inx == BACKGROUNDPOSY) {
+ coOrd pos;
+ pos.y = *(double *)valueP;
+ pos.x = GetLayoutBackGroundPos().x;
+ SetLayoutBackGroundPos(pos);
+ MainRedraw();
+ }
+ if (inx == BACKGROUNDWIDTH) {
+ SetLayoutBackGroundSize(*(double *)valueP);
+ MainRedraw();
+ }
+ if (inx == BACKGROUNDSCREEN) {
+ SetLayoutBackGroundScreen(*(int *)valueP);
+ MainRedraw();
+ }
+ if (inx == BACKGROUNDANGLE) {
+
+ ANGLE_T angle = NormalizeAngle(*(double *)valueP);
+ wStringSetValue((wString_p)layoutPLs[BACKGROUNDANGLE].control,FormatFloat(angle));
+ SetLayoutBackGroundAngle(angle);
+ MainRedraw();
+ }
+
+}
+/***************************************************************************************
+ * Load Background Options from Saved Parms
+ ***************************************************************************************/
+void
+LayoutBackGroundLoad(void) {
+ SetLayoutBackGroundFullPath(wPrefGetString("layout", "BackgroundPath"));
+
+ wPrefGetFloat("layout", "BackgroundPosX", &thisLayout.props.backgroundPos.x, 0.0);
+ wPrefGetFloat("layout", "BackgroundPosY", &thisLayout.props.backgroundPos.y, 0.0);
+ wPrefGetFloat("layout", "BackgroundAngle", &thisLayout.props.backgroundAngle, 0.0);
+ long screen_long;
+ wPrefGetInteger("layout", "BackgroundScreen", &screen_long, 0L);
+ thisLayout.props.backgroundScreen = screen_long;
+ wPrefGetFloat("layout", "BackgroundSize", &thisLayout.props.backgroundSize, 0.0);
+}
+
+static wBool_t inited;
+
+/**************************************************************************************
+ * Either Clear Background Parms or (if the first time called) Load from Saved Parms
+ **************************************************************************************/
+void
+LayoutBackGroundInit(BOOL_T clear) {
+ if (clear) {
+ SetLayoutBackGroundFullPath(noname);
+ SetLayoutBackGroundPos(zero);
+ SetLayoutBackGroundAngle(0.0);
+ SetLayoutBackGroundScreen(0);
+ SetLayoutBackGroundSize(0.0);
+ LayoutBackGroundSave();
+ } else { //First Time and not "Clear"
+ inited = TRUE;
+ LayoutBackGroundLoad();
+ }
+ char * str = GetLayoutBackGroundFullPath();
+ if (str && str[0]) {
+ if (!LoadBackGroundImage()) { //Failed -> Wipe Out
+ SetLayoutBackGroundFullPath(noname);
+ SetLayoutBackGroundPos(zero);
+ SetLayoutBackGroundAngle(0.0);
+ SetLayoutBackGroundScreen(0);
+ SetLayoutBackGroundSize(0.0);
+ LayoutBackGroundSave();
+ }
+ } else {
+ wDrawSetBackground( mainD.d, NULL, NULL);
+ }
+
}
diff --git a/app/bin/layout.h b/app/bin/layout.h
index 4a581df..fcb5160 100644
--- a/app/bin/layout.h
+++ b/app/bin/layout.h
@@ -38,6 +38,11 @@ void SetLayoutCurScale(SCALEINX_T scale);
void SetLayoutCurScaleDesc(SCALEDESCINX_T desc);
void SetLayoutCurGauge(GAUGEINX_T gauge);
void SetLayoutScaleGauge(SCALEDESCINX_T desc, GAUGEINX_T gauge);
+void SetLayoutBackGroundFullPath(const char *fileName);
+void SetLayoutBackGroundSize(double size);
+void SetLayoutBackGroundPos(coOrd pos);
+void SetLayoutBackGroundAngle(ANGLE_T angle);
+void SetLayoutBackGroundScreen(int screen);
char *GetLayoutFullPath(void);
char *GetLayoutFilename(void);
@@ -48,9 +53,18 @@ SCALEINX_T GetLayoutCurScale(void );
SCALEDESCINX_T GetLayoutCurScaleDesc(void);
//GAUGEINX_T GetLayoutCurGauge(void);
-
ANGLE_T GetLayoutMaxTrackGrade(void);
SCALEDESCINX_T GetLayoutCurScaleDesc(void);
-
+char *GetLayoutBackGroundFullPath(void);
+double GetLayoutBackGroundSize(void);
+coOrd GetLayoutBackGroundPos(void);
+ANGLE_T GetLayoutBackGroundAngle(void);
+int GetLayoutBackGroundScreen(void);
+int GetLayoutBackGroundVisible(void);
+void LayoutBackGroundInit(BOOL_T clear);
+void LayoutBackGroundLoad(void);
+void LayoutBackGroundSave(void);
+void BackgroundToggleShow(void);
void DoLayout(void * junk);
-#endif \ No newline at end of file
+int LoadImageFile(int files,char ** fileName,void * data );
+#endif
diff --git a/app/bin/linknoteui.c b/app/bin/linknoteui.c
new file mode 100644
index 0000000..daa3ccf
--- /dev/null
+++ b/app/bin/linknoteui.c
@@ -0,0 +1,260 @@
+/** \file linknoteui.c
+ * View for the text note
+ */
+
+/* XTrkCad - Model Railroad CAD
+ * Copyright (C) 2018 Martin Fischer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <string.h>
+#include <stdbool.h>
+
+#include "custom.h"
+#include "dynstring.h"
+#include "i18n.h"
+#include "misc.h"
+#include "note.h"
+#include "param.h"
+#include "include/stringxtc.h"
+#include "track.h"
+#include "validator.h"
+#include "wlib.h"
+
+extern BOOL_T inDescribeCmd;
+
+#define DEFAULTLINKURL "http://www.xtrkcad.org/"
+#define DEFAULTLINKTITLE "The XTrackCAD Homepage"
+
+static struct extraDataNote noteDataInUI;
+
+static void NoteLinkBrowse(void *junk);
+static void NoteLinkOpen(char *url );
+
+static paramFloatRange_t r_1000_1000 = { -1000.0, 1000.0, 80 };
+static paramData_t linkEditPLs[] = {
+#define I_ORIGX (0)
+ /*0*/ { PD_FLOAT, &noteDataInUI.pos.x, "origx", PDO_DIM, &r_1000_1000, N_("Position X") },
+#define I_ORIGY (1)
+ /*1*/ { PD_FLOAT, &noteDataInUI.pos.y, "origy", PDO_DIM, &r_1000_1000, N_("Position Y") },
+#define I_LAYER (2)
+ /*2*/ { PD_DROPLIST, &noteDataInUI.layer, "layer", 0, (void*)150, "Layer", 0 },
+#define I_TITLE (3)
+ /*3*/ { PD_STRING, NULL, "title", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)200, N_("Title"), 0, 0, TITLEMAXIMUMLENGTH-1 },
+#define I_URL (4)
+ /*4*/ { PD_STRING, NULL, "name", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)200, N_("URL"), 0, 0, URLMAXIMUMLENGTH-1 },
+#define I_OPEN (5)
+ /*5*/{ PD_BUTTON, (void*)NoteLinkBrowse, "openlink", PDO_DLGHORZ, NULL, N_("Open...") },
+};
+
+static paramGroup_t linkEditPG = { "linkEdit", 0, linkEditPLs, sizeof linkEditPLs / sizeof linkEditPLs[0] };
+static wWin_p linkEditW;
+
+BOOL_T
+IsLinkNote(track_p trk)
+{
+ struct extraDataNote * xx = (struct extraDataNote *)GetTrkExtraData(trk);
+
+ return(xx->op == OP_NOTELINK);
+}
+
+
+/**
+ * Callback for Open URL button
+ *
+ * \param junk IN ignored
+ */
+static void NoteLinkBrowse(void *junk)
+{
+ NoteLinkOpen(noteDataInUI.noteData.linkData.url);
+}
+
+/**
+ * Open the URL in the external default browser
+ *
+ * \param url IN url to open
+ */
+static void NoteLinkOpen(char *url)
+{
+ wOpenFileExternal(url);
+}
+
+static void
+LinkDlgUpdate(
+ paramGroup_p pg,
+ int inx,
+ void * valueP)
+{
+ switch (inx) {
+ case I_URL:
+ if (strlen(noteDataInUI.noteData.linkData.url) > URLMAXIMUMLENGTH) {
+ DynString message;
+
+ DynStringMalloc(&message, 80);
+ DynStringPrintf(&message, _("The entered URL is too long. The maximum allowed length is %d. Please edit the entered value."), URLMAXIMUMLENGTH);
+ wNoticeEx(NT_ERROR,
+ DynStringToCStr(&message),
+ _("Re-edit"),
+ NULL);
+ DynStringFree(&message);
+ }
+
+ if (IsValidURL(noteDataInUI.noteData.linkData.url) &&
+ (strlen(noteDataInUI.noteData.linkData.url) <= URLMAXIMUMLENGTH))
+ {
+ wControlActive(linkEditPLs[I_OPEN].control, TRUE);
+ ParamDialogOkActive(&linkEditPG, TRUE);
+ } else {
+ wControlActive(linkEditPLs[I_OPEN].control, FALSE);
+ ParamDialogOkActive(&linkEditPG, FALSE);
+ }
+ break;
+ case I_ORIGX:
+ case I_ORIGY:
+ UpdateLink(&noteDataInUI, OR_NOTE, FALSE);
+ break;
+ case I_LAYER:
+ UpdateLink(&noteDataInUI, LY_NOTE, FALSE);
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+* Handle Cancel button: restore old values for layer and position
+*/
+
+static void
+LinkEditCancel( wWin_p junk)
+{
+ if (inDescribeCmd) {
+ UpdateFile(&noteDataInUI, CANCEL_NOTE, FALSE);
+ }
+ ResetIfNotSticky();
+ wHide(linkEditW);
+}
+
+/**
+ * Handle OK button: make sure the entered URL is syntactically valid, update
+ * the layout and close the dialog
+ *
+ * \param junk
+ */
+
+static void
+LinkEditOK(void *junk)
+{
+ UpdateLink(&noteDataInUI, OK_LINK, FALSE);
+ wHide(linkEditW);
+ ResetIfNotSticky();
+ FileIsChanged();
+}
+
+
+static void
+CreateEditLinkDialog(track_p trk, char *title)
+{
+ struct extraDataNote *xx = (struct extraDataNote *)GetTrkExtraData(trk);
+
+ // create the dialog if necessary
+ if (!linkEditW) {
+ noteDataInUI.noteData.linkData.url = MyMalloc(URLMAXIMUMLENGTH);
+ noteDataInUI.noteData.linkData.title = MyMalloc(TITLEMAXIMUMLENGTH);
+ linkEditPLs[I_TITLE].valueP = noteDataInUI.noteData.linkData.title;
+ linkEditPLs[I_URL].valueP = noteDataInUI.noteData.linkData.url;
+ ParamRegister(&linkEditPG);
+ linkEditW = ParamCreateDialog(&linkEditPG,
+ "",
+ _("Done"), LinkEditOK,
+ LinkEditCancel, TRUE, NULL,
+ F_BLOCK,
+ LinkDlgUpdate);
+ }
+
+ wWinSetTitle(linkEditPG.win, MakeWindowTitle(title));
+
+ // initialize the dialog fields
+ noteDataInUI.pos = xx->pos;
+ noteDataInUI.layer = xx->layer;
+ noteDataInUI.trk = trk;
+ strscpy(noteDataInUI.noteData.linkData.url, xx->noteData.linkData.url,URLMAXIMUMLENGTH );
+ strscpy(noteDataInUI.noteData.linkData.title, xx->noteData.linkData.title, TITLEMAXIMUMLENGTH );
+
+ FillLayerList((wList_p)linkEditPLs[I_LAYER].control);
+ ParamLoadControls(&linkEditPG);
+
+ // and show the dialog
+ wShow(linkEditW);
+}
+
+/**
+ * Activate note if double clicked
+ * \param trk the note
+ */
+
+void ActivateLinkNote(track_p trk)
+{
+ struct extraDataNote *xx = (struct extraDataNote *)GetTrkExtraData(trk);
+ NoteLinkOpen(xx->noteData.linkData.url);
+}
+
+
+/**
+ * Describe and enable editing of an existing link note
+ *
+ * \param trk the existing, valid note
+ * \param str the field to put a text version of the note so it will appear on the status line
+ * \param len the lenght of the field
+ */
+
+void DescribeLinkNote(track_p trk, char * str, CSIZE_T len)
+{
+ struct extraDataNote *xx = (struct extraDataNote *)GetTrkExtraData(trk);
+ DynString statusLine;
+
+ DynStringMalloc(&statusLine, 80);
+ DynStringPrintf(&statusLine,
+ "Link: Layer=%d %-.80s (%s)",
+ GetTrkLayer(trk)+1,
+ xx->noteData.linkData.title,
+ xx->noteData.linkData.url);
+ strcpy(str, DynStringToCStr(&statusLine));
+ DynStringFree(&statusLine);
+
+ if (inDescribeCmd) {
+ NoteStateSave(trk);
+
+ CreateEditLinkDialog(trk, _("Update link"));
+ }
+}
+
+/**
+ * Take a new note track element and initialize it. It will be
+ * initialized with defaults and can then be edited by the user.
+ *
+ * \param the newly created trk
+ */
+
+void NewLinkNoteUI(track_p trk)
+{
+ struct extraDataNote *xx = (struct extraDataNote *)GetTrkExtraData(trk);
+
+ xx->noteData.linkData.url = MyStrdup( DEFAULTLINKURL );
+ xx->noteData.linkData.title = MyStrdup( DEFAULTLINKTITLE );
+
+ CreateEditLinkDialog(trk, _("Create link"));
+}
diff --git a/app/bin/macro.c b/app/bin/macro.c
index 1c711ce..8db996d 100644
--- a/app/bin/macro.c
+++ b/app/bin/macro.c
@@ -1,4 +1,5 @@
/** \file macro.c
+
* Macros
*/
@@ -60,6 +61,7 @@
#include "param.h"
#include "paths.h"
#include "track.h"
+#include "trackx.h"
#include "utility.h"
#include "version.h"
@@ -67,6 +69,9 @@ EXPORT long adjTimer;
static void DemoInitValues( void );
extern char *userLocale;
+static int log_playbackCursor = 0;
+
+
/*****************************************************************************
*
@@ -185,7 +190,7 @@ static int StartRecord( int cnt, char ** pathName, void * context )
if ( logTable_da.cnt > 11 )
lprintf( "StartRecord( %s ) @ %s\n", pathName, ctime(&clock) );
ParamStartRecord();
- WriteTracks( recordF );
+ WriteTracks( recordF, TRUE );
WriteLayers( recordF );
fprintf( recordF, "REDRAW\n" );
fflush( recordF );
@@ -207,7 +212,7 @@ static void DoRecordButton( void * context )
case 0: /* Stop */
fprintf( recordF, "CLEAR\nMESSAGE\n");
fprintf( recordF, N_("End of Playback. Hit Step to exit\n"));
- fprintf( recordF, "END\nSTEP\n" );
+ fprintf( recordF, "%s\nSTEP\n", END_MESSAGE );
fclose( recordF );
recordF = NULL;
wHide( recordW );
@@ -226,7 +231,7 @@ static void DoRecordButton( void * context )
wTextGetText( recordT, cp, len );
if ( cp[len-1] == '\n' ) len--;
cp[len] = '\0';
- fprintf( recordF, "%s\nEND\nSTEP\n", cp );
+ fprintf( recordF, "%s\n%s\nSTEP\n", cp, END_MESSAGE );
MyFree( cp );
recordingMessage = FALSE;
}
@@ -284,59 +289,101 @@ EXPORT void DoRecord( void * context )
*
*/
+static drawCmd_p playbackD = NULL;
static wDrawBitMap_p playbackBm = NULL;
static wDrawColor playbackColor;
-static drawCmd_p playbackD;
static wPos_t playbackX, playbackY;
+static wBool_t bDoFlash = FALSE;
+static wDrawColor flashColor;
#include "bitmaps/arrow0.xbm"
+#include "bitmaps/arrow0_shift.xbm"
+#include "bitmaps/arrow0_ctl.xbm"
#include "bitmaps/arrow3.xbm"
+#include "bitmaps/arrow3_shift.xbm"
+#include "bitmaps/arrow3_ctl.xbm"
#include "bitmaps/arrows.xbm"
+#include "bitmaps/arrowr3.xbm"
+#include "bitmaps/arrowr3_shift.xbm"
+#include "bitmaps/arrowr3_ctl.xbm"
#include "bitmaps/flash.xbm"
static wDrawColor rightDragColor;
static wDrawColor leftDragColor;
static wDrawBitMap_p arrow0_bm;
+static wDrawBitMap_p arrow0_shift_bm;
+static wDrawBitMap_p arrow0_ctl_bm;
static wDrawBitMap_p arrow3_bm;
+static wDrawBitMap_p arrow3_shift_bm;
+static wDrawBitMap_p arrow3_ctl_bm;
static wDrawBitMap_p arrows_bm;
+static wDrawBitMap_p arrowr3_bm;
+static wDrawBitMap_p arrowr3_shift_bm;
+static wDrawBitMap_p arrowr3_ctl_bm;
static wDrawBitMap_p flash_bm;
-static long flashTO = 60;
-static DIST_T PixelsPerStep = 20;
+static long flashTO = 120;
+static DIST_T PixelsPerStep = 5;
static long stepTO = 100;
EXPORT unsigned long playbackTimer;
static wBool_t didPause;
static wBool_t flashTwice = FALSE;
+int DBMCount=0;
#define DRAWALL
+typedef enum { FLASH_PLUS, FLASH_MINUS, REDRAW, CLEAR, DRAW, RESET, ORIG, MOVE_PLYBCK1, MOVE_PLYBCK2, MOVE_PLYBCK3, MOVE_PLYBCK4, QUIT } DrawBitMap_e;
+
+char * DrawBitMapToString(DrawBitMap_e dbm) {
+ switch(dbm) {
+ case FLASH_PLUS:
+ return "Flsh+";
+ case FLASH_MINUS:
+ return "Flsh-";
+ case REDRAW:
+ return "Redraw";
+ case CLEAR:
+ return "Clr";
+ case DRAW:
+ return "Draw";
+ case RESET:
+ return "RESET";
+ case ORIG:
+ return "ORIG";
+ case MOVE_PLYBCK1:
+ return "MPBC1";
+ case MOVE_PLYBCK2:
+ return "MPBC2";
+ case MOVE_PLYBCK3:
+ return "MPBC3";
+ case MOVE_PLYBCK4:
+ return "MPBC4";
+ case QUIT:
+ return "Quit";
+ default:
+ return "";
+ }
+}
+
static void MacroDrawBitMap(
- drawCmd_p d,
+ DrawBitMap_e dbm,
wDrawBitMap_p bm,
wPos_t x,
wPos_t y,
wDrawColor color )
{
- wDrawBitMap( d->d, bm, x, y, color, wDrawOptTemp|wDrawOptNoClip );
+ wDrawBitMap( playbackD->d, bm, x, y, color, wDrawOptTemp|wDrawOptNoClip );
wFlush();
+
+ LOG( log_playbackCursor, 1, ("%s %d DrawBitMap( %p %p %d %d %d %d )\n", DrawBitMapToString(dbm), DBMCount++, playbackD->d, bm, x, y, color, wDrawOptTemp|wDrawOptNoClip ) );
}
-static void Flash( drawCmd_p d, wPos_t x, wPos_t y, wDrawColor flashColor )
+static void Flash( drawCmd_p d, wPos_t x, wPos_t y, wDrawColor color )
{
- if (playbackTimer != 0)
- return;
- MacroDrawBitMap( d, flash_bm, x, y, flashColor );
- wPause( flashTO );
- MacroDrawBitMap( d, flash_bm, x, y, flashColor );
- wPause( flashTO );
-#ifdef LATER
- MacroDrawBitMap( d->d, flash_bm, x, y, flashColor );
- wPause( flashTO );
- MacroDrawBitMap( d->d, flash_bm, x, y, flashColor );
- wPause( flashTO );
-#endif
+ bDoFlash = TRUE;
+ flashColor = color;
}
@@ -358,13 +405,26 @@ static void SetPlaybackSpeed(
playbackSpeed = inx;
}
-static void ClearPlaybackCursor( void )
-{
- if (playbackBm != NULL)
- MacroDrawBitMap( playbackD, playbackBm, playbackX, playbackY, playbackColor );
- playbackBm = NULL;
-}
+EXPORT void RedrawPlaybackCursor() {
+ if ( playbackD && playbackBm && inPlayback) {
+ wBool_t ret;
+ if ( playbackD->d != mainD.d )
+ ret = wDrawSetTempMode( playbackD->d, TRUE );
+ if ( bDoFlash && playbackTimer == 0 ) {
+ MacroDrawBitMap( FLASH_PLUS, flash_bm, playbackX, playbackY, flashColor );
+ wPause( flashTO*2 );
+ if ( flashTwice ) {
+ MacroDrawBitMap( FLASH_PLUS, flash_bm, playbackX, playbackY, flashColor );
+ wPause( flashTO*2 );
+ }
+ bDoFlash = FALSE;
+ }
+ MacroDrawBitMap( DRAW, playbackBm, playbackX, playbackY, playbackColor );
+ if ( playbackD->d != mainD.d )
+ wDrawSetTempMode( playbackD->d, ret );
+ }
+}
static void MoveCursor(
drawCmd_p d,
@@ -378,45 +438,56 @@ static void MoveCursor(
coOrd pos1, dpos;
int i, steps;
wPos_t x, y;
- wPos_t xx, yy;
-
- ClearPlaybackCursor();
+ wPos_t x0=playbackX;
+ wPos_t y0=playbackY;
if (d == NULL)
return;
- pos1 = pos;
d->CoOrd2Pix( d, pos, &x, &y );
- if (playbackTimer == 0 && playbackD == d && !didPause) {
- dx = (DIST_T)(x-playbackX);
- dy = (DIST_T)(y-playbackY);
+ if (playbackTimer == 0 /*&& !didPause*/) {
+ playbackBm = bm;
+ playbackColor = color;
+ dx = (DIST_T)(x-x0);
+ dy = (DIST_T)(y-y0);
dist = sqrt( dx*dx + dy*dy );
steps = (int)(dist / PixelsPerStep ) + 1;
dx /= steps;
dy /= steps;
- d->Pix2CoOrd( d, playbackX, playbackY, &pos1 );
+ d->Pix2CoOrd( d, x0, y0, &pos1 );
dpos.x = (pos.x-pos1.x)/steps;
dpos.y = (pos.y-pos1.y)/steps;
+
for ( i=1; i<=steps; i++ ) {
- xx = playbackX+(wPos_t)(i*dx);
- yy = playbackY+(wPos_t)(i*dy);
- MacroDrawBitMap( d, bm, xx, yy, color );
+
+ playbackX = x0+(wPos_t)(i*dx);
+ playbackY = y0+(wPos_t)(i*dy);
+
pos1.x += dpos.x;
pos1.y += dpos.y;
- if (proc)
+ if ( proc != NULL ) {
proc( action, pos1 );
- else if (d->d == mainD.d) {
+ } else {
+ TempRedraw();
+ }
+// DrawPlaybackCursor( d, bm, xx, yy, color );
+ if ( d->d == mainD.d ) {
InfoPos( pos1 );
+ wFlush();
}
- wPause( stepTO*playbackDelay/100 );
- MacroDrawBitMap( d, bm, xx, yy, color );
+ // Simple mouse moves happen twice as fast
+ wPause( stepTO*playbackDelay/100/(action==wActionMove?2:1) );
+
+
if (!inPlayback) {
return;
}
}
+ } else {
+ playbackX = x;
+ playbackY = y;
}
- MacroDrawBitMap( playbackD=d, playbackBm=bm, playbackX=x, playbackY=y, playbackColor=color );
}
@@ -427,76 +498,86 @@ static void PlaybackCursor(
coOrd pos,
wDrawColor color )
{
- wDrawBitMap_p bm;
+ wDrawBitMap_p bm = playbackBm;
+ playbackD = d;
wPos_t x, y;
long time0, time1;
time0 = wGetTimer();
- ClearPlaybackCursor();
d->CoOrd2Pix( d, pos, &x, &y );
- switch( action ) {
+
+
+ switch( action&0xFF ) {
case wActionMove:
- MacroDrawBitMap( playbackD=d, playbackBm=arrow0_bm, playbackX=x, playbackY=y, playbackColor=wDrawColorBlack );
+ bm = ((MyGetKeyState()&WKEY_SHIFT)?arrow0_shift_bm:(MyGetKeyState()&WKEY_CTRL)?arrow0_ctl_bm:arrow0_bm); //0 is normal, shift, ctrl
+ MoveCursor( d, proc, wActionMove, pos, bm, wDrawColorBlack );
break;
case C_DOWN:
- MoveCursor( d, proc, wActionMove, pos, arrow0_bm, wDrawColorBlack );
- if (flashTwice) Flash( d, x, y, rightDragColor );
- MacroDrawBitMap( d, arrow0_bm, x, y, wDrawColorBlack );
- MacroDrawBitMap( playbackD=d, playbackBm=((MyGetKeyState()&WKEY_SHIFT)?arrows_bm:arrow3_bm), playbackX=x, playbackY=y,
- playbackColor=rightDragColor );
- Flash( d, x, y, rightDragColor );
- break;
+ bm = ((MyGetKeyState()&WKEY_SHIFT)?arrow0_shift_bm:(MyGetKeyState()&WKEY_CTRL)?arrow0_ctl_bm:arrow0_bm);
+ MoveCursor( d, proc, wActionMove, pos, bm, wDrawColorBlack ); //Go to spot
+ bm = ((MyGetKeyState()&WKEY_SHIFT)?arrow3_shift_bm:(MyGetKeyState()&WKEY_CTRL)?arrow3_ctl_bm:arrow3_bm);
+ Flash( d, x, y, playbackColor=rightDragColor );
+ proc( action, pos );
+ /* no break */
case C_MOVE:
- bm = ((MyGetKeyState()&WKEY_SHIFT)?arrows_bm:arrow3_bm);
+ bm = ((MyGetKeyState()&WKEY_SHIFT)?arrow3_shift_bm:(MyGetKeyState()&WKEY_CTRL)?arrow3_ctl_bm:arrow3_bm);
MoveCursor( d, proc, C_MOVE, pos, bm, rightDragColor );
- playbackD=d; playbackBm=bm; playbackX=x; playbackY=y; playbackColor=rightDragColor;
break;
case C_UP:
- bm = ((MyGetKeyState()&WKEY_SHIFT)?arrows_bm:arrow3_bm);
+ bm = ((MyGetKeyState()&WKEY_SHIFT)?arrow3_shift_bm:(MyGetKeyState()&WKEY_CTRL)?arrow3_ctl_bm:arrow0_bm);
MoveCursor( d, proc, C_MOVE, pos, bm, rightDragColor );
- /*MacroDrawBitMap( d, bm, x, y, rightDragColor );*/
- if (flashTwice) Flash( d, x, y, rightDragColor );
- MacroDrawBitMap( d, bm, x, y, rightDragColor );
- MacroDrawBitMap( playbackD=d, playbackBm=arrow0_bm, playbackX=x, playbackY=y, playbackColor=wDrawColorBlack );
Flash( d, x, y, rightDragColor );
+ proc( action, pos );
+ bm = ((MyGetKeyState()&WKEY_SHIFT)?arrow0_shift_bm:(MyGetKeyState()&WKEY_CTRL)?arrow0_ctl_bm:arrow0_bm);
+ MoveCursor( d, NULL, 0, pos, bm, wDrawColorBlack );
break;
case C_RDOWN:
- MoveCursor( d, proc, wActionMove, pos, arrow0_bm, wDrawColorBlack );
- if (flashTwice) Flash( d, x, y, leftDragColor );
- MacroDrawBitMap( d, arrow0_bm, x, y, wDrawColorBlack );
- MacroDrawBitMap( playbackD=d, playbackBm=((MyGetKeyState()&WKEY_SHIFT)?arrows_bm:arrow3_bm), playbackX=x, playbackY=y, playbackColor=leftDragColor );
- Flash( d, x, y, leftDragColor );
- break;
+ bm = ((MyGetKeyState()&WKEY_SHIFT)?arrow0_shift_bm:(MyGetKeyState()&WKEY_CTRL)?arrow0_ctl_bm:arrow0_bm);
+ MoveCursor( d, proc, wActionMove, pos, bm, wDrawColorBlack ); //Go to spot
+ bm = ((MyGetKeyState()&WKEY_SHIFT)?arrowr3_shift_bm:(MyGetKeyState()&WKEY_CTRL)?arrowr3_ctl_bm:arrowr3_bm);
+ Flash( d, x, y, playbackColor=leftDragColor );
+ proc( action, pos );
+ /* no break */
case C_RMOVE:
- bm = ((MyGetKeyState()&WKEY_SHIFT)?arrows_bm:arrow3_bm);
+ bm = ((MyGetKeyState()&WKEY_SHIFT)?arrowr3_shift_bm:(MyGetKeyState()&WKEY_CTRL)?arrowr3_ctl_bm:arrowr3_bm);
MoveCursor( d, proc, C_RMOVE, pos, bm, leftDragColor );
- playbackD=d; playbackBm=bm; playbackX=x; playbackY=y; playbackColor=leftDragColor;
break;
case C_RUP:
- bm = ((MyGetKeyState()&WKEY_SHIFT)?arrows_bm:arrow3_bm);
+ bm = ((MyGetKeyState()&WKEY_SHIFT)?arrowr3_shift_bm:(MyGetKeyState()&WKEY_CTRL)?arrowr3_ctl_bm:arrowr3_bm);
MoveCursor( d, proc, C_RMOVE, pos, bm, leftDragColor );
- if (flashTwice) Flash( d, x, y, leftDragColor );
- MacroDrawBitMap( d, bm, x, y, leftDragColor );
- MacroDrawBitMap( playbackD=d, playbackBm=arrow0_bm, playbackX=x, playbackY=y, playbackColor=wDrawColorBlack );
Flash( d, x, y, leftDragColor );
+ proc( action, pos );
+ bm = ((MyGetKeyState()&WKEY_SHIFT)?arrow0_shift_bm:(MyGetKeyState()&WKEY_CTRL)?arrow0_ctl_bm:arrow0_bm);
+ MoveCursor( d, NULL, 0, pos, bm, wDrawColorBlack );
break;
case C_REDRAW:
- MacroDrawBitMap( playbackD, playbackBm, playbackX, playbackY, playbackColor );
+ proc( action, pos ); //Send Redraw to functions
+ playbackD = &tempD;
+ MacroDrawBitMap( REDRAW, playbackBm, playbackX, playbackY, playbackColor );
+ break;
+
+ case C_TEXT:
+ proc( action, pos);
+ char c = action>>8;
+ bm = playbackBm;
break;
+
default:
- ;
+ bm = playbackBm;
}
+
+ playbackBm = bm;
time1 = wGetTimer();
adjTimer += (time1-time0);
}
@@ -509,25 +590,7 @@ EXPORT void PlaybackMouse(
coOrd pos,
wDrawColor color )
{
-#ifdef LATER
- if (action == C_DOWN || action == C_RDOWN) {
- MoveCursor( d, proc, wActionMove, pos, arrow0_bm, wDrawColorBlack );
- ClearPlaybackCursor();
- } else {
- PlaybackCursor( d, proc, action, pos, wDrawColorBlack );
- }
-#endif
PlaybackCursor( d, proc, action, pos, wDrawColorBlack );
- if (playbackBm != NULL)
- MacroDrawBitMap( playbackD, playbackBm, playbackX, playbackY, playbackColor );
- proc( action, pos );
- if (playbackBm != NULL)
- MacroDrawBitMap( playbackD, playbackBm, playbackX, playbackY, playbackColor );
-#ifdef LATER
- if (action == C_DOWN || action == C_RDOWN) {
- PlaybackCursor( d, proc, action, pos, wDrawColorBlack );
- }
-#endif
didPause = FALSE;
}
@@ -535,17 +598,29 @@ EXPORT void PlaybackMouse(
EXPORT void MovePlaybackCursor(
drawCmd_p d,
wPos_t x,
- wPos_t y )
+ wPos_t y, wBool_t direct, wControl_p control)
{
coOrd pos;
+ playbackD = &tempD;
d->Pix2CoOrd( d, x, y, &pos );
d->CoOrd2Pix( d, pos, &x, &y );
- MoveCursor( d, NULL, wActionMove, pos, arrow0_bm, wDrawColorBlack );
- MacroDrawBitMap( d, arrow0_bm, x, y, wDrawColorBlack );
- MacroDrawBitMap( d, arrow3_bm, x, y, rightDragColor );
+ if (!direct)
+ MoveCursor( d, NULL, wActionMove, pos, arrow0_bm, wDrawColorBlack );
+ wBool_t ret = wDrawSetTempMode( d->d, TRUE );
+ MacroDrawBitMap( MOVE_PLYBCK1, arrow0_bm, x, y, wDrawColorBlack );
+ MacroDrawBitMap( MOVE_PLYBCK2, arrow3_bm, x, y, rightDragColor );
+
Flash( d, x, y, rightDragColor );
- MacroDrawBitMap( d, arrow3_bm, x, y, rightDragColor );
- MacroDrawBitMap( d, arrow0_bm, x, y, wDrawColorBlack );
+ if (direct) {
+ wControlHilite(control,TRUE);
+ }
+ MacroDrawBitMap( MOVE_PLYBCK3, arrow3_bm, x, y, rightDragColor );
+ MacroDrawBitMap( MOVE_PLYBCK4, arrow0_bm, x, y, wDrawColorBlack );
+ if (direct) {
+ wPause(1000);
+ wControlHilite(control,FALSE);
+ }
+ wDrawSetTempMode( d->d, ret );
}
/*****************************************************************************
@@ -580,12 +655,10 @@ static coOrd oldMainOrig;
static coOrd oldMainSize;
static DIST_T oldMainScale;
static char * oldScaleName;
+static int oldMagneticSnap;
static wBool_t pauseDemo = FALSE;
static long bigPause = 2000;
-#ifdef LATER
-static long MSEC_PER_PIXEL = 6;
-#endif
#ifdef DEMOPAUSE
static wButton_p demoPause;
#endif
@@ -639,15 +712,13 @@ static void PlaybackQuit( void )
if (paramFile)
fclose( paramFile );
paramFile = NULL;
- if (!inPlayback)
- return;
inPlaybackQuit = TRUE;
- ClearPlaybackCursor();
wPrefReset();
wHide( demoW );
wWinSetBusy( mainW, FALSE );
wWinSetBusy( mapW, FALSE );
ParamRestoreAll();
+ magneticSnap = oldMagneticSnap;
RestoreLayers();
wEnableBalloonHelp( (int)enableBalloonHelp );
mainD.scale = oldMainScale;
@@ -657,15 +728,14 @@ static void PlaybackQuit( void )
tempD.orig = mainD.orig;
tempD.size = mainD.size;
tempD.scale = mainD.scale;
+ Reset();
ClearTracks();
checkPtMark = changed = 0;
RestoreTrackState();
inPlaybackQuit = FALSE;
- Reset();
DoSetScale( oldScaleName );
DoChangeNotification( CHANGE_ALL );
CloseDemoWindows();
- inPlayback = FALSE;
curDemo = -1;
wPrefSetInteger( "misc", "playbackspeed", playbackSpeed );
playbackNonStop = FALSE;
@@ -729,6 +799,137 @@ EXPORT void TakeSnapshot( drawCmd_t * d )
}
}
+/*
+* Regression test
+*/
+static int log_regression = 0;
+wBool_t bWriteEndPtDirectIndex;
+
+static BOOL_T DoRegression( char * sFileName )
+{
+ typedef enum { REGRESSION_NONE, REGRESSION_CHECK, REGRESSION_QUIET, REGRESSION_SAVE } E_REGRESSION;
+ E_REGRESSION eRegression = REGRESSION_NONE;
+ long oldParamVersion;
+ long regressVersion;
+ FILE * fRegression;
+ char * sRegressionFile = NULL;
+ wBool_t bWroteActualTracks;
+ eRegression = log_regression > 0 ? logTable(log_regression).level : 0;
+ char * cp;
+ regressVersion = strtol( paramLine+16, &cp, 10 );
+ if (cp == paramLine+16 )
+ regressVersion = PARAMVERSION;
+ LOG( log_regression, 1, ("REGRESSION %s %d %s:%d %s\n",
+ eRegression==REGRESSION_SAVE?"SAVE":"CHECK",
+ regressVersion,
+ sFileName, paramLineNum,
+ cp ) );
+ MakeFullpath( &sRegressionFile, workingDir, "xtrkcad.regress", NULL );
+ switch ( eRegression ){
+ case REGRESSION_SAVE:
+ fRegression = fopen( sRegressionFile, "a" );
+ if ( fRegression == NULL ) {
+ NoticeMessage( MSG_OPEN_FAIL, _("Continue"), NULL, _("Regression"), sFileName, strerror(errno) );
+ } else {
+ fprintf( fRegression, "REGRESSION START %d %s\n",
+ PARAMVERSION, cp );
+ fprintf( fRegression, "# %s - %d\n", sFileName, paramLineNum );
+ WriteTracks( fRegression, FALSE );
+ fprintf( fRegression, "REGRESSION END\n" );
+ fclose( fRegression );
+ }
+ while ( fgets(paramLine, STR_LONG_SIZE, paramFile) != NULL ) {
+ if ( strncmp( paramLine, "REGRESSION END", 14 ) == 0)
+ break;
+ }
+ break;
+ case REGRESSION_CHECK:
+ case REGRESSION_QUIET:
+ oldParamVersion = paramVersion;
+ paramVersion = regressVersion;
+ bWroteActualTracks = FALSE;
+ track_p to_first_save = to_first;
+ track_p* to_last_save = to_last;
+ while ( GetNextLine() ) {
+ if ( paramLine[0] == '#' )
+ continue;
+ // Read Expected track
+ to_first = NULL;
+ to_last = &to_first;
+ paramVersion = regressVersion;
+ if ( !ReadTrack( paramLine ) ) {
+ if ( paramFile == NULL )
+ return FALSE;
+ break;
+ }
+ if ( to_first == NULL ) {
+ // Something bad happened
+ break;
+ }
+ track_cp tExpected = to_first;
+ to_first = to_first_save;
+ // Find corresponding Actual track
+ track_cp tActual = FindTrack( GetTrkIndex( tExpected ) );
+ strcat( message, "Regression " );
+ if ( ! CompareTrack( tActual, tExpected ) ) {
+ // Actual doesn't match Expected
+ LOG( log_regression, 1, (" FAIL: %s", message) );
+ fRegression = fopen( sRegressionFile, "a" );
+ if ( fRegression == NULL ) {
+ NoticeMessage( MSG_OPEN_FAIL, _("Continue"), NULL, _("Regression"), sRegressionFile, strerror(errno) );
+ break;
+ }
+ fprintf( fRegression, "REGRESSION FAIL %d\n",
+ PARAMVERSION );
+ fprintf( fRegression, "# %s - %d\n", sFileName, paramLineNum );
+ fprintf( fRegression, "# %s", message );
+ if ( !bWroteActualTracks ) {
+ // Print Actual tracks
+ fprintf( fRegression, "Actual Tracks\n" );
+ paramVersion = PARAMVERSION;
+ WriteTracks( fRegression, FALSE );
+ bWroteActualTracks = TRUE;
+ }
+ // Print Expected track
+ to_first = tExpected;
+ fprintf( fRegression, "Expected Track\n" );
+ WriteTracks( fRegression, FALSE );
+ fclose( fRegression );
+ strcat( message, "Continue test?" );
+ if ( eRegression == REGRESSION_CHECK ) {
+ int rc = wNoticeEx( NT_ERROR, message, _("Stop"), _("Continue") );
+ if ( !rc ) {
+ while ( GetNextLine() &&
+ strncmp( paramLine, "REGRESSION END", 14 ) != 0 )
+ ;
+ break;
+ }
+ }
+ }
+ // Delete Expected track
+ to_first = tExpected;
+ to_last = &to_first;
+ FreeTrack( tExpected );
+ }
+ to_first = to_first_save;
+ to_last = to_last_save;
+ if ( strncmp( paramLine, "REGRESSION END", 14 ) != 0 )
+ InputError( "Expected REGRESSION END", TRUE );
+ paramVersion = oldParamVersion;
+ break;
+ case REGRESSION_NONE:
+ default:
+ while ( GetNextLine() ) {
+ if ( strncmp( paramLine, "REGRESSION END", 14 ) == 0 )
+ break;
+ }
+ break;
+ }
+ free( sRegressionFile );
+
+ return TRUE;
+}
+
static void EnableButtons(
BOOL_T enable )
{
@@ -774,7 +975,6 @@ static void PlaybackSetup( void )
wTextClear( demoT );
wShow( demoW );
wFlush();
- RulerRedraw( TRUE );
wPrefFlush();
wWinSetBusy( mainW, TRUE );
wWinSetBusy( mapW, TRUE );
@@ -785,6 +985,8 @@ static void PlaybackSetup( void )
oldMainSize = mainD.size;
oldMainScale = mainD.scale;
oldScaleName = curScaleName;
+ playbackX = 0;
+ playbackY = 0;
Reset();
paramVersion = -1;
playbackColor=wDrawColorBlack;
@@ -816,11 +1018,15 @@ static void Playback( void )
wWinTop( mainW );
demoWinOnTop = FALSE;
}
+ char * oldLocale = NULL;
+ oldLocale = SaveLocale( "C" );
while (TRUE) {
+ if ( ! inPlayback )
+ // User pressed Quit
+ break;
if ( paramFile == NULL ||
fgets(paramLine, STR_LONG_SIZE, paramFile) == NULL ) {
paramTogglePlaybackHilite = FALSE;
- ClearPlaybackCursor();
CloseDemoWindows();
if (paramFile) {
fclose( paramFile );
@@ -837,6 +1043,8 @@ static void Playback( void )
paramFile = fopen( demoFileName, "r" );
if ( paramFile == NULL ) {
NoticeMessage( MSG_OPEN_FAIL, _("Continue"), NULL, _("Demo"), demoFileName, strerror(errno) );
+ RestoreLocale( oldLocale );
+ inPlayback = FALSE;
return;
}
@@ -848,13 +1056,14 @@ static void Playback( void )
UndoSuspend();
wWinBlockEnable( FALSE );
checkPtMark = 0;
- RulerRedraw( TRUE );
DoChangeNotification( CHANGE_ALL );
CompoundClearDemoDefns();
if ( fgets(paramLine, STR_LONG_SIZE, paramFile) == NULL ) {
NoticeMessage( MSG_CANT_READ_DEMO, _("Continue"), NULL, sProdName, demoFileName );
fclose( paramFile );
paramFile = NULL;
+ RestoreLocale( oldLocale );
+ inPlayback = FALSE;
return;
}
free(demoFileName);
@@ -880,6 +1089,10 @@ static void Playback( void )
} else if (paramLine[0] == 0) {
/* empty paramLine */
} else if (ReadTrack( paramLine ) ) {
+ if ( paramFile == NULL ) {
+ inPlayback = FALSE;
+ break;
+ }
} else if (strncmp( paramLine, "STEP", 5 ) == 0) {
paramTogglePlaybackHilite = TRUE;
wWinTop( demoW );
@@ -898,6 +1111,8 @@ static void Playback( void )
wPause( 1000 );
EnableButtons( FALSE );
} else {
+ RestoreLocale( oldLocale );
+ inPlayback = FALSE;
return;
}
} else if (strncmp( paramLine, "CLEAR", 5 ) == 0) {
@@ -908,12 +1123,14 @@ static void Playback( void )
demoWinOnTop = TRUE;
while ( ( fgets( paramLine, STR_LONG_SIZE, paramFile ) ) != NULL ) {
paramLineNum++;
- if ( strncmp(paramLine, "END", 3) == 0 )
+ if ( IsEND( END_MESSAGE ) )
break;
if ( strncmp(paramLine, "STEP", 3) == 0 ) {
wWinTop( demoW );
demoWinOnTop = TRUE;
EnableButtons( TRUE );
+ RestoreLocale( oldLocale );
+ inPlayback = FALSE;
return;
}
PlaybackMessage( paramLine );
@@ -928,14 +1145,13 @@ static void Playback( void )
RecomputeElevations();
DoRedraw();
/*DoChangeNotification( CHANGE_ALL );*/
- if (playbackD != NULL && playbackBm != NULL)
- MacroDrawBitMap( playbackD, playbackBm, playbackX, playbackY, wDrawColorBlack );
} else if (strncmp( paramLine, "COMMAND ", 8 ) == 0) {
paramTogglePlaybackHilite = FALSE;
PlaybackCommand( paramLine, paramLineNum );
} else if (strncmp( paramLine, "RESET", 5 ) == 0) {
paramTogglePlaybackHilite = TRUE;
- Reset();
+ InfoMessage("Esc Key Pressed");
+ ConfirmReset(TRUE);
} else if (strncmp( paramLine, "VERSION", 7 ) == 0) {
paramVersion = atol( paramLine+8 );
if ( paramVersion > iParamVersion ) {
@@ -949,7 +1165,18 @@ static void Playback( void )
} else if (strncmp( paramLine, "ORIG ", 5 ) == 0) {
if ( !GetArgs( paramLine+5, "fff", &zoom, &x, &y ) )
continue;
+ if (zoom == 0.0) {
+ double scale_x = mapD.size.x/(mainD.size.x/mainD.scale);
+ double scale_y = mapD.size.y/(mainD.size.y/mainD.scale);
+ if (scale_x<scale_y)
+ scale_x = scale_y;
+ scale_x = ceil(scale_x);
+ if (scale_x < 1) scale_x = 1;
+ if (scale_x > MAX_MAIN_SCALE) scale_x = MAX_MAIN_SCALE;
+ zoom = scale_x;
+ }
mainD.scale = zoom;
+ InfoMessage("Zoom Set to %.0f", zoom);
mainD.orig.x = x;
mainD.orig.y = y;
SetMainSize();
@@ -958,8 +1185,6 @@ static void Playback( void )
tempD.scale = mainD.scale;
DoRedraw();
- if (playbackD != NULL && playbackBm != NULL)
- MacroDrawBitMap( playbackD, playbackBm, playbackX, playbackY, wDrawColorBlack );
} else if (strncmp( paramLine, "PAUSE ", 6 ) == 0) {
paramTogglePlaybackHilite = TRUE;
@@ -1028,13 +1253,16 @@ static void Playback( void )
} else if (strncmp( paramLine, "DOCUMENT COPY", 13 ) == 0 ) {
while ( ( fgets( paramLine, STR_LONG_SIZE, paramFile ) ) != NULL ) {
paramLineNum++;
- if ( strncmp(paramLine, "END", 3) == 0 )
+ if ( IsEND( END_MESSAGE ) )
break;
if ( documentCopy && documentFile )
fprintf( documentFile, "%s", paramLine );
}
} else if ( strncmp( paramLine, "DEMOINIT", 8 ) == 0 ) {
DemoInitValues();
+ } else if ( strncmp( paramLine, "REGRESSION START", 16 ) == 0 ) {
+ DoRegression( curDemo < 1 ? paramFileName :
+ demoList(curDemo-1).fileName );
} else {
if (strncmp( paramLine, "MOUSE ", 6 ) == 0) {
thisCmd = mouseCmd;
@@ -1066,6 +1294,8 @@ static void Playback( void )
if (pauseDemo) {
EnableButtons( TRUE );
pauseDemo = FALSE;
+ RestoreLocale( oldLocale );
+ inPlayback = FALSE;
return;
}
}
@@ -1077,7 +1307,9 @@ static void Playback( void )
fclose( documentFile );
documentFile = NULL;
}
+ inPlayback = FALSE;
PlaybackQuit();
+ RestoreLocale( oldLocale );
}
@@ -1093,13 +1325,15 @@ static int StartPlayback( int cnt, char **pathName, void * context )
return FALSE;
}
- strcpy( paramFileName, pathName[0] );
+ paramFileName = strdup( pathName[0] );
PlaybackSetup();
curDemo = -1;
UndoSuspend();
wWinBlockEnable( FALSE );
Playback();
+ free( paramFileName );
+ paramFileName = NULL;
return TRUE;
}
@@ -1138,7 +1372,13 @@ static void DoDemoButton( void * command )
break;
case 3:
/* quit */
- PlaybackQuit();
+ if ( inPlayback ) {
+ // We will exit the loop in Playback() after the current command
+ inPlayback = FALSE;
+ } else {
+ // We're waiting for the user to press 'Step'
+ PlaybackQuit();
+ }
break;
default:
;
@@ -1196,11 +1436,10 @@ static char * demoInitParams[] = {
"GROUP layout",
"display tunnels 1",
"display endpt 2",
- "display labelenable 7",
+ "display labelenable 0",
"display description-fontsize 48",
"display labelscale 8",
"display layoutlabels 6",
- "display color-layers 0",
"display tworailscale 16",
"display tiedraw 0",
"pref mingridspacing 5",
@@ -1211,8 +1450,7 @@ static char * demoInitParams[] = {
"display carhotbarlabels 1",
"display hideTrainsInTunnels 0",
"GROUP display",
- "cmdopt move-quick 0",
- "pref turntable-angle 7.500",
+ "pref turntable-angle 15.00",
"cmdopt preselect 1",
"pref coupling-speed-max 100",
"cmdopt rightclickmode 0",
@@ -1261,10 +1499,12 @@ static char * demoInitParams[] = {
"GROUP grid",
"misc toolbarset 65535",
"GROUP misc",
- "sticky set 268435383", /* 0xfffffb7 - all but Helix and Turntable */
+ "sticky set 67108479", /* 0x3fffe7f - all but Helix and Turntable */
"GROUP sticky",
"turnout hide 0",
"layer button-count 10",
+ "cmdopt selectmode 0",
+ "cmdopt selectzero 1",
NULL };
static void DemoInitValues( void )
@@ -1291,6 +1531,8 @@ static void DemoInitValues( void )
}
for ( cpp = demoInitParams; *cpp; cpp++ )
paramPlaybackProc( *cpp );
+ // Have to do this manually
+ oldMagneticSnap = MagneticSnap( TRUE );
}
@@ -1369,11 +1611,22 @@ EXPORT BOOL_T MacroInit( void )
leftDragColor = drawColorBlue;
arrow0_bm = wDrawBitMapCreate( mainD.d, arrow0_width, arrow0_height, 12, 12, arrow0_bits );
+ arrow0_shift_bm = wDrawBitMapCreate( mainD.d, arrow0_shift_width, arrow0_shift_height, 12, 12, arrow0_shift_bits );
+ arrow0_ctl_bm = wDrawBitMapCreate( mainD.d, arrow0_ctl_width, arrow0_ctl_height, 12, 12, arrow0_ctl_bits );
arrow3_bm = wDrawBitMapCreate( mainD.d, arrow3_width, arrow3_height, 12, 12, arrow3_bits );
+ arrow3_shift_bm = wDrawBitMapCreate( mainD.d, arrow3_shift_width, arrow3_shift_height, 12, 12, arrow3_shift_bits );
+ arrow3_ctl_bm = wDrawBitMapCreate( mainD.d, arrow3_ctl_width, arrow3_ctl_height, 12, 12, arrow3_ctl_bits );
+ arrowr3_bm = wDrawBitMapCreate( mainD.d, arrowr3_width, arrowr3_height, 12, 12, arrowr3_bits );
+ arrowr3_shift_bm = wDrawBitMapCreate( mainD.d, arrowr3_shift_width, arrowr3_shift_height, 12, 12, arrowr3_shift_bits );
+ arrowr3_ctl_bm = wDrawBitMapCreate( mainD.d, arrowr3_ctl_width, arrowr3_ctl_height, 12, 12, arrowr3_ctl_bits );
arrows_bm = wDrawBitMapCreate( mainD.d, arrows_width, arrows_height, 12, 12, arrows_bits );
flash_bm = wDrawBitMapCreate( mainD.d, flash_width, flash_height, 12, 12, flash_bits );
ParamRegister( &recordPG );
ParamRegister( &demoPG );
+
+ log_playbackCursor = LogFindIndex( "playbackcursor" );
+ log_regression = LogFindIndex( "regression" );
+
return TRUE;
}
diff --git a/app/bin/manifest.c b/app/bin/manifest.c
new file mode 100644
index 0000000..1652996
--- /dev/null
+++ b/app/bin/manifest.c
@@ -0,0 +1,176 @@
+/** \file manifest.c
+ * JSON routines
+ */
+ /* XTrkCad - Model Railroad CAD
+ * Copyright (C) 2018 Adam Richards and Martin Fischer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <string.h>
+
+#include "cJSON.h"
+#include "fileio.h"
+#include "layout.h"
+#include "misc2.h"
+#include "paths.h"
+#include "include/utf8convert.h"
+
+extern int log_zip;
+
+ /**********************************************************
+ * Build JSON Manifest - manifest.json
+ * There are only two objects in the root -
+ * - The layout object defines the correct filename for the layout
+ * - The dependencies object is an arraylist of included elements
+ *
+ * Each element has a name, a filename and an arch-path (where in the archive it is located)
+ * It may have other values - a common one the copy-path is where it was copied from the originators machine (info only)
+ *
+ * There is one reserved name - "background" which is for the image file that is used as a layout background
+ *
+ *\param IN nameOfLayout - the layout this is a manifest for
+ *\param IN background - the full filepath to the background image (or NULL) -> TODO this will become an array with a count
+ *\param IN DependencyDir - the relative path in the archive to the directory in which the included object(s) will be stored
+ *
+ *\returns a String containing the JSON object
+ */
+
+char* CreateManifest(char* nameOfLayout, char* background,
+ char* dependencyDir)
+{
+ cJSON* manifest = cJSON_CreateObject();
+ if (manifest != NULL) {
+ char *copyOfFileName = MyStrdup(nameOfLayout);
+ cJSON* a_object = cJSON_CreateObject();
+ cJSON_AddItemToObject(manifest, "layout", a_object);
+#ifdef WINDOWS
+ copyOfFileName = Convert2UTF8(copyOfFileName);
+#endif // WINDOWS
+ cJSON_AddStringToObject(a_object, "name", copyOfFileName);
+ MyFree(copyOfFileName);
+
+ cJSON* dependencies = cJSON_AddArrayToObject(manifest, "dependencies");
+ cJSON* b_object = cJSON_CreateObject();
+ if (background && background[0]) {
+ char *backg;
+ cJSON_AddStringToObject(b_object, "name", "background");
+
+ backg = MyStrdup(FindFilename(background));
+#ifdef WINDOWS
+ backg = Convert2UTF8(backg);
+#endif
+ cJSON_AddStringToObject(b_object, "filename", backg);
+ MyFree(backg);
+ backg = MyStrdup(background);
+#ifdef WINDOWS
+ backg = Convert2UTF8(backg);
+ ConvertPathForward(backg);
+#endif // WINDOWS
+ cJSON_AddStringToObject(b_object, "copy-path", backg);
+ cJSON_AddStringToObject(b_object, "arch-path", dependencyDir);
+ MyFree(backg);
+ cJSON_AddNumberToObject(b_object, "size", GetLayoutBackGroundSize());
+ cJSON_AddNumberToObject(b_object, "pos-x", GetLayoutBackGroundPos().x);
+ cJSON_AddNumberToObject(b_object, "pos-y", GetLayoutBackGroundPos().y);
+ cJSON_AddNumberToObject(b_object, "screen", GetLayoutBackGroundScreen());
+ cJSON_AddNumberToObject(b_object, "angle", GetLayoutBackGroundAngle());
+ cJSON_AddItemToArray(dependencies, b_object);
+ }
+ }
+ char* json_Manifest = cJSON_Print(manifest);
+ cJSON_Delete(manifest);
+ return json_Manifest;
+}
+
+/**************************************************************************
+ * Pull in a Manifest File and extract values from it
+ * \param IN manifest - the full path to the mainifest.json file
+ * \param IN zip_directory - the path to the directory for extracted objects
+ *
+ * \returns - the layout filename
+ */
+
+char* ParseManifest(char* manifest, char* zip_directory)
+{
+ char* background_file[1] = { NULL };
+ char* layoutname;
+
+ char *oldLocale = SaveLocale("C");
+ cJSON* json_manifest = cJSON_Parse(manifest);
+ RestoreLocale(oldLocale);
+
+ cJSON* layout = cJSON_GetObjectItemCaseSensitive(json_manifest, "layout");
+ cJSON* name = cJSON_GetObjectItemCaseSensitive(layout, "name");
+ layoutname = cJSON_GetStringValue(name);
+#ifdef WINDOWS
+ ConvertUTF8ToSystem(layoutname);
+#endif // WINDOWS
+
+ LOG(log_zip, 1, ("Zip-Manifest %s \n", layoutname))
+#if DEBUG
+ fprintf(stderr, "Layout name %s \n", layoutname);
+#endif
+
+ cJSON* dependencies = cJSON_GetObjectItemCaseSensitive(json_manifest,
+ "dependencies");
+ cJSON* dependency;
+ cJSON_ArrayForEach(dependency, dependencies) {
+ cJSON* name = cJSON_GetObjectItemCaseSensitive(dependency, "name");
+ if (strcmp(cJSON_GetStringValue(name), "background") == 0) {
+ char *file;
+ char *path;
+ cJSON* filename = cJSON_GetObjectItemCaseSensitive(dependency, "filename");
+ cJSON* archpath = cJSON_GetObjectItemCaseSensitive(dependency, "arch-path");
+ file = MyStrdup(cJSON_GetStringValue(filename));
+ path = MyStrdup(cJSON_GetStringValue(archpath));
+#ifdef WINDOWS
+ ConvertUTF8ToSystem(file);
+ ConvertUTF8ToSystem(path);
+#endif
+ MakeFullpath(&background_file[0], zip_directory, path,
+ file, NULL);
+ MyFree(file);
+ MyFree(path);
+#if DEBUG
+ printf("Link to background image %s \n", background_file[0]);
+#endif
+ LoadImageFile(1, &background_file[0], NULL);
+ cJSON* size = cJSON_GetObjectItemCaseSensitive(dependency, "size");
+ SetLayoutBackGroundSize(size->valuedouble);
+ cJSON* posx = cJSON_GetObjectItemCaseSensitive(dependency, "pos-x");
+ cJSON* posy = cJSON_GetObjectItemCaseSensitive(dependency, "pos-y");
+ coOrd pos;
+ pos.x = posx->valuedouble;
+ pos.y = posy->valuedouble;
+ SetLayoutBackGroundPos(pos);
+ cJSON* screen = cJSON_GetObjectItemCaseSensitive(dependency, "screen");
+ SetLayoutBackGroundScreen((int)screen->valuedouble);
+ cJSON* angle = cJSON_GetObjectItemCaseSensitive(dependency, "angle");
+ SetLayoutBackGroundAngle(angle->valuedouble);
+ LayoutBackGroundSave(); //Force out Values to override saved
+ }
+ }
+ char *str = NULL;
+ if (background_file[0]) {
+ free(background_file[0]);
+ }
+ if (layoutname) {
+ str = strdup(layoutname);
+ }
+ cJSON_Delete(json_manifest);
+ return str;
+}
+
diff --git a/app/bin/manifest.h b/app/bin/manifest.h
new file mode 100644
index 0000000..8e751f0
--- /dev/null
+++ b/app/bin/manifest.h
@@ -0,0 +1,6 @@
+#ifndef HAVE_MANIFEST_H
+#define HAVE_MANIFEST_H
+ char* CreateManifest(char* nameOfLayout, char* background,
+ char* DependencyDir);
+ char* ParseManifest(char* manifest, char* zip_directory);
+#endif
diff --git a/app/bin/misc.c b/app/bin/misc.c
index 827c2db..2ac1e2f 100644
--- a/app/bin/misc.c
+++ b/app/bin/misc.c
@@ -1,4 +1,4 @@
-/* \file misc.c
+/* file misc.c
* Main routine and initialization for the application
*/
@@ -40,7 +40,7 @@
#define R_OK (02)
#define access _access
#if _MSC_VER >1300
- #define strdup _strdup
+#define strdup _strdup
#endif
#else
#include <sys/stat.h>
@@ -62,6 +62,7 @@
#include "messages.h"
#include "misc.h"
#include "param.h"
+#include "include/paramfilelist.h"
#include "paths.h"
#include "smalldlg.h"
#include "track.h"
@@ -72,6 +73,10 @@
char *userLocale = NULL;
extern wBalloonHelp_t balloonHelp[];
+
+static wMenuToggle_p mapShowMI;
+static wMenuToggle_p magnetsMI;
+
#ifdef DEBUG
#define CHECK_BALLOONHELP
/*#define CHECK_UNUSED_BALLOONHELP*/
@@ -83,7 +88,7 @@ void DoCarDlg(void);
/****************************************************************************
*
- EXPORTED VARIABLES
+ EXPORTED VARIABLES
*
*/
@@ -96,7 +101,7 @@ EXPORT wWin_p mainW;
EXPORT wIndex_t changed = 0;
-EXPORT char message[STR_LONG_SIZE];
+EXPORT char message[STR_HUGE_SIZE];
static char message2[STR_LONG_SIZE];
EXPORT REGION_T curRegion = 0;
@@ -107,7 +112,7 @@ EXPORT coOrd zero = { 0.0, 0.0 };
EXPORT wBool_t extraButtons = FALSE;
-EXPORT long onStartup; /**< controls behaviour after startup: load last layout if zero, else start with blank canvas */
+EXPORT long onStartup; /**< controls behaviour after startup: load last layout if zero, else start with blank canvas */
EXPORT wButton_p undoB;
EXPORT wButton_p redoB;
@@ -115,13 +120,15 @@ EXPORT wButton_p redoB;
EXPORT wButton_p zoomUpB;
EXPORT wButton_p zoomDownB;
wButton_p mapShowB;
+wButton_p magnetsB;
+wButton_p backgroundB;
EXPORT wIndex_t checkPtMark = 0;
EXPORT wMenu_p demoM;
EXPORT wMenu_p popup1M, popup2M;
EXPORT wMenu_p popup1aM, popup2aM;
-
+EXPORT wMenu_p popup1mM, popup2mM;
static wIndex_t curCommand = 0;
EXPORT void * commandContext;
@@ -129,6 +136,8 @@ EXPORT wIndex_t cmdGroup;
EXPORT wIndex_t joinCmdInx;
EXPORT wIndex_t modifyCmdInx;
EXPORT long rightClickMode = 0;
+EXPORT long selectMode = 0;
+EXPORT long selectZero = 1;
EXPORT DIST_T easementVal = 0.0;
EXPORT DIST_T easeR = 0.0;
EXPORT DIST_T easeL = 0.0;
@@ -151,7 +160,7 @@ static int verbose = 0;
static wMenuList_p winList_mi;
static BOOL_T inMainW = TRUE;
-static long stickySet;
+static long stickySet = 0;
static long stickyCnt = 0;
static char * stickyLabels[33];
#define TOOLBARSET_INIT (0xFFFF)
@@ -168,10 +177,11 @@ static BOOL_T messageListEmpty = TRUE;
extern long curTurnoutEp;
static wIndex_t printCmdInx;
static wIndex_t gridCmdInx;
-static paramData_t menuPLs[101] = {
- { PD_LONG, &toolbarSet, "toolbarset" },
- { PD_LONG, &curTurnoutEp, "cur-turnout-ep" } };
+static paramData_t menuPLs[101] = { { PD_LONG, &toolbarSet, "toolbarset" }, {
+ PD_LONG, &curTurnoutEp, "cur-turnout-ep" } };
static paramGroup_t menuPG = { "misc", PGO_RECORD, menuPLs, 2 };
+
+extern wBool_t wDrawDoTempDraw;
/****************************************************************************
*
@@ -186,12 +196,11 @@ EXPORT long totalReallocs = 0;
EXPORT long totalFreeed = 0;
EXPORT long totalFrees = 0;
-static unsigned long guard0 = 0xDEADBEEF;
-static unsigned long guard1 = 0xAF00BA8A;
+static unsigned long guard0 = 0xDEADBEEF;
+static unsigned long guard1 = 0xAF00BA8A;
static int log_malloc;
-EXPORT void * MyMalloc ( long size )
-{
+EXPORT void * MyMalloc(long size) {
void * p;
totalMallocs++;
totalMalloced += size;
@@ -200,29 +209,26 @@ EXPORT void * MyMalloc ( long size )
AbortProg( "mallocing > 65500 bytes" );
}
#endif
- p = malloc( (size_t)size + sizeof (size_t) + 2 * sizeof (unsigned long) );
+ p = malloc((size_t) size + sizeof(size_t) + 2 * sizeof(unsigned long));
if (p == NULL)
- AbortProg( "No memory" );
-
-LOG1( log_malloc, ( "Malloc(%ld) = %lx (%lx-%lx)\n", size,
- (long)((char*)p+sizeof (size_t) + sizeof (unsigned long)),
- (long)p,
- (long)((char*)p+size+sizeof (size_t) + 2 * sizeof(unsigned long)) ));
- *(size_t*)p = (size_t)size;
- p = (char*)p + sizeof (size_t);
- *(unsigned long*)p = guard0;
- p = (char*)p + sizeof (unsigned long);
- *(unsigned long*)((char*)p+size) = guard1;
- memset( p, 0, (size_t)size );
+ AbortProg("No memory");
+
+ LOG1(log_malloc,
+ ( "Malloc(%ld) = %lx (%lx-%lx)\n", size, (long)((char*)p+sizeof (size_t) + sizeof (unsigned long)), (long)p, (long)((char*)p+size+sizeof (size_t) + 2 * sizeof(unsigned long)) ));
+ *(size_t*) p = (size_t) size;
+ p = (char*) p + sizeof(size_t);
+ *(unsigned long*) p = guard0;
+ p = (char*) p + sizeof(unsigned long);
+ *(unsigned long*) ((char*) p + size) = guard1;
+ memset(p, 0, (size_t )size);
return p;
}
-EXPORT void * MyRealloc( void * old, long size )
-{
+EXPORT void * MyRealloc(void * old, long size) {
size_t oldSize;
void * new;
- if (old==NULL)
- return MyMalloc( size );
+ if (old == NULL)
+ return MyMalloc(size);
totalReallocs++;
totalRealloced += size;
#if defined(WINDOWS) && ! defined(WIN32)
@@ -230,67 +236,61 @@ EXPORT void * MyRealloc( void * old, long size )
AbortProg( "reallocing > 65500 bytes" );
}
#endif
- if ( *(unsigned long*)((char*)old - sizeof (unsigned long)) != guard0 ) {
- AbortProg( "Guard0 is hosed" );
+ if (*(unsigned long*) ((char*) old - sizeof(unsigned long)) != guard0) {
+ AbortProg("Guard0 is hosed");
}
- oldSize = *(size_t*)((char*)old - sizeof (unsigned long) - sizeof (size_t));
- if ( *(unsigned long*)((char*)old + oldSize) != guard1 ) {
- AbortProg( "Guard1 is hosed" );
+ oldSize = *(size_t*) ((char*) old - sizeof(unsigned long) - sizeof(size_t));
+ if (*(unsigned long*) ((char*) old + oldSize) != guard1) {
+ AbortProg("Guard1 is hosed");
}
-LOG1( log_malloc, ("Realloc(%lx,%ld) was %d\n", (long)old, size, oldSize ) )
- if ((long)oldSize == size) {
+ LOG1(log_malloc, ("Realloc(%lx,%ld) was %d\n", (long)old, size, oldSize ))
+ if ((long) oldSize == size) {
return old;
}
if (size == 0) {
- free( (char*)old - sizeof *(long*)0 - sizeof *(size_t*)0 );
+ free((char*) old - sizeof *(long*) 0 - sizeof *(size_t*) 0);
return NULL;
}
- new = MyMalloc( size );
+ new = MyMalloc(size);
if (new == NULL && size)
- AbortProg( "No memory" );
- memcpy( new, old, min((size_t)size, oldSize) );
+ AbortProg("No memory");
+ memcpy(new, old, min((size_t )size, oldSize));
MyFree(old);
return new;
}
-
-EXPORT void MyFree( void * ptr )
-{
+EXPORT void MyFree(void * ptr) {
size_t oldSize;
totalFrees++;
if (ptr) {
- if ( *(unsigned long*)((char*)ptr - sizeof (unsigned long)) != guard0 ) {
- AbortProg( "Guard0 is hosed" );
+ if (*(unsigned long*) ((char*) ptr - sizeof(unsigned long)) != guard0) {
+ AbortProg("Guard0 is hosed");
}
- oldSize = *(size_t*)((char*)ptr - sizeof (unsigned long) - sizeof (size_t));
- if ( *(unsigned long*)((char*)ptr + oldSize) != guard1 ) {
- AbortProg( "Guard1 is hosed" );
+ oldSize = *(size_t*) ((char*) ptr - sizeof(unsigned long)
+ - sizeof(size_t));
+ if (*(unsigned long*) ((char*) ptr + oldSize) != guard1) {
+ AbortProg("Guard1 is hosed");
}
-LOG1( log_malloc, ("Free %d at %lx (%lx-%lx)\n", oldSize, (long)ptr,
- (long)((char*)ptr-sizeof *(size_t*)0-sizeof *(long*)0),
- (long)((char*)ptr+oldSize+sizeof *(long*)0)) )
+ LOG1(log_malloc,
+ ("Free %d at %lx (%lx-%lx)\n", oldSize, (long)ptr, (long)((char*)ptr-sizeof *(size_t*)0-sizeof *(long*)0), (long)((char*)ptr+oldSize+sizeof *(long*)0)))
totalFreeed += oldSize;
- free( (char*)ptr - sizeof *(long*)0 - sizeof *(size_t*)0 );
+ free((char*) ptr - sizeof *(long*) 0 - sizeof *(size_t*) 0);
}
}
-
-EXPORT void * memdup( void * src, size_t size )
-{
+EXPORT void * memdup(void * src, size_t size) {
void * p;
- p = MyMalloc( size );
+ p = MyMalloc(size);
if (p == NULL)
- AbortProg( "No memory" );
- memcpy( p, src, size );
+ AbortProg("No memory");
+ memcpy(p, src, size);
return p;
}
-
-EXPORT char * MyStrdup( const char * str )
-{
+EXPORT char * MyStrdup(const char * str) {
char * ret;
- ret = (char*)MyMalloc( strlen( str ) + 1 );
- strcpy( ret, str );
+ ret = (char*) MyMalloc(strlen(str) + 1);
+ strcpy(ret, str);
return ret;
}
@@ -304,32 +304,70 @@ EXPORT char * MyStrdup( const char * str )
*
*/
EXPORT char * ConvertToEscapedText(const char * text) {
- int text_i=0;
+ int text_i = 0;
int add = 0; //extra chars for escape
- while(text[text_i]) {
+ while (text[text_i]) {
switch (text[text_i]) {
- case '\n': add++; break;
- case '\t': add++; break;
- case '\\': add++; break;
- case '\"': add++; break;
+ case '\n':
+ add++;
+ break;
+ case '\t':
+ add++;
+ break;
+ case '\\':
+ add++;
+ break;
+ case '\"':
+ add++;
+ break;
}
text_i++;
}
- char * cout = MyMalloc(strlen(text)+1+add);
+ unsigned cnt = strlen(text) + 1 + add;
+#ifdef WINDOWS
+ cnt *= 2;
+#endif
+ char * cout = MyMalloc(cnt);
int cout_i = 0;
text_i = 0;
- while(text[text_i]) {
+ while (text[text_i]) {
char c = text[text_i];
switch (c) {
- case '\n': cout[cout_i] = '\\'; cout_i++; cout[cout_i] = 'n'; cout_i++; break; // Line Feed
- case '\t': cout[cout_i] = '\\'; cout_i++; cout[cout_i] = 't'; cout_i++; break; // Tab
- case '\\': cout[cout_i] = '\\'; cout_i++; cout[cout_i] = '\\'; cout_i++; break; // BackSlash
- case '\"': cout[cout_i] = '\"'; cout_i++; cout[cout_i] = '\"'; cout_i++; break; // Double Quotes
- default: cout[cout_i] = c; cout_i++;
+ case '\n':
+ cout[cout_i] = '\\';
+ cout_i++;
+ cout[cout_i] = 'n';
+ cout_i++;
+ break; // Line Feed
+ case '\t':
+ cout[cout_i] = '\\';
+ cout_i++;
+ cout[cout_i] = 't';
+ cout_i++;
+ break; // Tab
+ case '\\':
+ cout[cout_i] = '\\';
+ cout_i++;
+ cout[cout_i] = '\\';
+ cout_i++;
+ break; // BackSlash
+ case '\"':
+ cout[cout_i] = '\"';
+ cout_i++;
+ cout[cout_i] = '\"';
+ cout_i++;
+ break; // Double Quotes
+ default:
+ cout[cout_i] = c;
+ cout_i++;
}
text_i++;
}
cout[cout_i] = '\0';
+#ifdef WINDOWS
+ wSystemToUTF8(cout, cout, cnt);
+#endif // WINDOWS
+
return cout;
}
@@ -340,83 +378,82 @@ EXPORT char * ConvertToEscapedText(const char * text) {
* \n = LineFeed 0x0A
* \t = Tab 0x09
* \\ = \ The way to still produce backslash
- * "" = " Take out quotes included so that other (CSV-like) programs could read the files
*
*/
EXPORT char * ConvertFromEscapedText(const char * text) {
- enum { CHARACTER, ESCAPE, QUOTE } state = CHARACTER;
- char * cout = MyMalloc(strlen(text)+1); //always equal to or shorter than
- int text_i = 0;
- int cout_i = 0;
- int c;
- while (text[text_i]) {
- c = text[text_i];
- switch (state) {
- case CHARACTER:
- if (c == '\\') {
- state = ESCAPE;
- } else if (c == '\"') {
- state = QUOTE;
- } else {
- cout[cout_i] = c;
- cout_i++;
- }
- break;
-
- case ESCAPE:
- switch (c) {
- case '\\': cout[cout_i] = '\\'; cout_i++; break; // "\\" = "\"
- case 'n': cout[cout_i] = '\n'; cout_i++; break; // LF
- case 't': cout[cout_i] = '\t'; cout_i++; break; // TAB
- }
- state = CHARACTER;
- break;
- case QUOTE:
- switch(c) {
- case '\"': cout[cout_i] = c; cout_i++; break; //One quote = NULL, Two quotes = 1 quote
- }
- state = CHARACTER;
- }
- text_i++;
- }
- cout[cout_i] = '\0';
- return cout;
-}
+ enum {
+ CHARACTER, ESCAPE
+ } state = CHARACTER;
+ char * cout = MyMalloc(strlen(text) + 1); //always equal to or shorter than
+ int text_i = 0;
+ int cout_i = 0;
+ int c;
+ while (text[text_i]) {
+ c = text[text_i];
+ switch (state) {
+ case CHARACTER:
+ if (c == '\\') {
+ state = ESCAPE;
+ } else {
+ cout[cout_i] = c;
+ cout_i++;
+ }
+ break;
+ case ESCAPE:
+ switch (c) {
+ case '\\':
+ cout[cout_i] = '\\';
+ cout_i++;
+ break; // "\\" = "\"
+ case 'n':
+ cout[cout_i] = '\n';
+ cout_i++;
+ break; // LF
+ case 't':
+ cout[cout_i] = '\t';
+ cout_i++;
+ break; // TAB
+ }
+ state = CHARACTER;
+ break;
+ }
+ text_i++;
+ }
+ cout[cout_i] = '\0';
+ return cout;
+}
-EXPORT void AbortProg(
- char * msg,
- ... )
-{
+EXPORT void AbortProg(char * msg, ...) {
static BOOL_T abort2 = FALSE;
int rc;
va_list ap;
- va_start( ap, msg );
- vsprintf( message, msg, ap );
- va_end( ap );
+ va_start(ap, msg);
+ vsprintf(message, msg, ap);
+ va_end(ap);
if (abort2) {
- wNoticeEx( NT_ERROR, message, _("ABORT"), NULL );
+ wNoticeEx( NT_ERROR, message, _("ABORT"), NULL);
} else {
- strcat( message, _("\nDo you want to save your layout?") );
- rc = wNoticeEx( NT_ERROR, message, _("Ok"), _("ABORT") );
+ strcat(message, _("\nDo you want to save your layout?"));
+ rc = wNoticeEx( NT_ERROR, message, _("Ok"), _("ABORT"));
if (rc) {
- DoSaveAs( (doSaveCallBack_p)abort );
+ DoSaveAs((doSaveCallBack_p) abort);
} else {
abort();
}
}
}
-
-EXPORT char * Strcpytrimed( char * dst, char * src, BOOL_T double_quotes )
-{
+EXPORT char * Strcpytrimed(char * dst, char * src, BOOL_T double_quotes) {
char * cp;
- while (*src && isspace((unsigned char)*src) ) src++;
+ while (*src && isspace((unsigned char) *src))
+ src++;
if (!*src)
return dst;
- cp = src+strlen(src)-1;
- while ( cp>src && isspace((unsigned char)*cp) ) cp--;
- while ( src<=cp ) {
+ cp = src + strlen(src) - 1;
+ while (cp > src && isspace((unsigned char) *cp))
+ cp--;
+ while (src <= cp) {
if (*src == '"' && double_quotes)
*dst++ = '"';
*dst++ = *src++;
@@ -425,50 +462,83 @@ EXPORT char * Strcpytrimed( char * dst, char * src, BOOL_T double_quotes )
return dst;
}
+static char * directory;
-EXPORT char * BuildTrimedTitle( char * cp, char * sep, char * mfg, char * desc, char * partno )
-{
- cp = Strcpytrimed( cp, mfg, FALSE );
- strcpy( cp, sep );
+#ifdef WINDOWS
+#define F_OK (0)
+#endif
+
+EXPORT wBool_t CheckHelpTopicExists(const char * topic) {
+
+ char * htmlFile;
+
+ // Check the file exits in the distro
+
+ if (!directory)
+ directory = malloc(BUFSIZ);
+
+ if (directory == NULL) return 0;
+
+ sprintf(directory, "%s/html/", wGetAppLibDir());
+
+ htmlFile = malloc(strlen(directory)+strlen(topic) + 6);
+
+ sprintf(htmlFile, "%s%s.html", directory, topic);
+
+ if( access( htmlFile, F_OK ) == -1 ) {
+
+ printf("Missing help topic %s\n",topic);
+
+ free(htmlFile);
+
+ return 0;
+
+ }
+
+ free(htmlFile);
+
+ return 1;
+
+}
+
+EXPORT char * BuildTrimedTitle(char * cp, char * sep, char * mfg, char * desc,
+ char * partno) {
+ cp = Strcpytrimed(cp, mfg, FALSE);
+ strcpy(cp, sep);
cp += strlen(cp);
- cp = Strcpytrimed( cp, desc, FALSE );
- strcpy( cp, sep );
+ cp = Strcpytrimed(cp, desc, FALSE);
+ strcpy(cp, sep);
cp += strlen(cp);
- cp = Strcpytrimed( cp, partno, FALSE );
+ cp = Strcpytrimed(cp, partno, FALSE);
return cp;
}
-
-static void ShowMessageHelp( int index, const char * label, void * data )
-{
+static void ShowMessageHelp(int index, const char * label, void * data) {
char msgKey[STR_SIZE], *cp, *msgSrc;
- msgSrc = (char*)data;
+ msgSrc = (char*) data;
if (!msgSrc)
return;
- cp = strchr( msgSrc, '\t' );
- if (cp==NULL) {
- sprintf( msgKey, _("No help for %s"), msgSrc );
- wNoticeEx( NT_INFORMATION, msgKey, _("Ok"), NULL );
+ cp = strchr(msgSrc, '\t');
+ if (cp == NULL) {
+ sprintf(msgKey, _("No help for %s"), msgSrc);
+ wNoticeEx( NT_INFORMATION, msgKey, _("Ok"), NULL);
return;
}
- memcpy( msgKey, msgSrc, cp-msgSrc );
- msgKey[cp-msgSrc] = 0;
- wHelp( msgKey );
+ memcpy(msgKey, msgSrc, cp - msgSrc);
+ msgKey[cp - msgSrc] = 0;
+ wHelp(msgKey);
}
-
-static char * ParseMessage(
- char *msgSrc )
-{
- char *cp1=NULL, *cp2=NULL;
+static char * ParseMessage(char *msgSrc) {
+ char *cp1 = NULL, *cp2 = NULL;
static char shortMsg[STR_SIZE];
- cp1 = strchr( _(msgSrc), '\t' );
+ cp1 = strchr(_(msgSrc), '\t');
if (cp1) {
- cp2 = strchr( cp1+1, '\t' );
+ cp2 = strchr(cp1 + 1, '\t');
if (cp2) {
cp1++;
- memcpy( shortMsg, cp1, cp2-cp1 );
- shortMsg[cp2-cp1] = 0;
+ memcpy(shortMsg, cp1, cp2 - cp1);
+ shortMsg[cp2 - cp1] = 0;
cp1 = shortMsg;
cp2++;
} else {
@@ -476,157 +546,177 @@ static char * ParseMessage(
cp2 = cp1;
}
if (messageListEmpty) {
- wMenuListDelete( messageList_ml, _(MESSAGE_LIST_EMPTY) );
+ wMenuListDelete(messageList_ml, _(MESSAGE_LIST_EMPTY));
messageListEmpty = FALSE;
}
- wMenuListAdd( messageList_ml, 0, cp1, _(msgSrc) );
+ wMenuListAdd(messageList_ml, 0, cp1, _(msgSrc));
return cp2;
} else {
return _(msgSrc);
}
}
-
-EXPORT void InfoMessage( char * format, ... )
-{
+EXPORT void InfoMessage(char * format, ...) {
va_list ap;
- va_start( ap, format );
- format = ParseMessage( format );
- vsprintf( message2, format, ap );
- va_end( ap );
+ va_start(ap, format);
+ format = ParseMessage(format);
+ vsprintf(message2, format, ap);
+ va_end(ap);
/*InfoSubstituteControl( NULL, NULL );*/
if (inError)
return;
- SetMessage( message2 );
+ SetMessage(message2);
}
-
-EXPORT void ErrorMessage( char * format, ... )
-{
+EXPORT void ErrorMessage(char * format, ...) {
va_list ap;
- va_start( ap, format );
- format = ParseMessage( format );
- vsprintf( message2, format, ap );
- va_end( ap );
- InfoSubstituteControls( NULL, NULL );
- SetMessage( message2 );
+ va_start(ap, format);
+ format = ParseMessage(format);
+ vsprintf(message2, format, ap);
+ va_end(ap);
+ InfoSubstituteControls( NULL, NULL);
+ SetMessage(message2);
wBeep();
inError = TRUE;
}
+EXPORT int NoticeMessage(char * format, char * yes, char * no, ...) {
+ va_list ap;
+ va_start(ap, no);
+ format = ParseMessage(format);
+ vsprintf(message2, format, ap);
+ va_end(ap);
+ return wNotice(message2, yes, no);
+}
-EXPORT int NoticeMessage( char * format, char * yes, char * no, ... )
-{
+EXPORT int NoticeMessage2(int playbackRC, char * format, char * yes, char * no,
+ ...) {
va_list ap;
- va_start( ap, no );
- format = ParseMessage( format );
- vsprintf( message2, format, ap );
- va_end( ap );
- return wNotice( message2, yes, no );
+ if (inPlayback)
+ return playbackRC;
+ va_start(ap, no);
+ format = ParseMessage(format);
+ vsprintf(message2, format, ap);
+ va_end(ap);
+ return wNoticeEx( NT_INFORMATION, message2, yes, no);
}
+/**
+* Set the file's changed flag and update the window title.
+*/
-EXPORT int NoticeMessage2( int playbackRC, char * format, char * yes, char * no, ... )
+void
+FileIsChanged(void)
{
- va_list ap;
- if ( inPlayback )
- return playbackRC;
- va_start( ap, no );
- format = ParseMessage( format );
- vsprintf( message2, format, ap );
- va_end( ap );
- return wNoticeEx( NT_INFORMATION, message2, yes, no );
+ changed++;
+ SetWindowTitle();
}
-
+
/*****************************************************************************
*
* MAIN BUTTON HANDLERS
*
*/
+ /**
+ * Confirm a requested operation in case of possible loss of changes.
+ *
+ * \param label2 IN operation to be cancelled, unused at the moment
+ * \param after IN function to be executed on positive confirmation
+ * \return true if proceed, false if cancel operation
+ */
+/** TODO: make sensible messages when requesting confirmation */
-EXPORT void Confirm( char * label2, doSaveCallBack_p after )
+bool
+Confirm(char * label2, doSaveCallBack_p after)
{
- int rc;
+ int rc = -1;
if (changed) {
- rc = wNotice3(
- _("Save changes to the layout design before closing?\n\n"
- "If you don't save now, your unsaved changes will be discarded."),
- _("&Save"), _("&Cancel"), _("&Don't Save") );
- if (rc == 1) {
- DoSave( after );
- return;
- } else if (rc == 0) {
- return;
- }
+ rc = wNotice3(_("Save changes to the layout design before closing?\n\n"
+ "If you don't save now, your unsaved changes will be discarded."),
+ _("&Save"), _("&Cancel"), _("&Don't Save"));
}
- after();
- return;
+
+ switch (rc) {
+ case -1: /* do not save */
+ after();
+ break;
+ case 0: /* cancel operation */
+ break;
+ case 1: /* save */
+ LayoutBackGroundInit(FALSE);
+ LayoutBackGroundSave();
+ DoSave(after);
+ break;
+ }
+ return(rc != 0);
}
-static void ChkLoad( void )
-{
+static void ChkLoad(void) {
Confirm(_("Load"), DoLoad);
}
-static void ChkRevert( void )
+static void ChkExamples( void )
{
- int rc;
-
- if( changed) {
- rc = wNoticeEx( NT_WARNING, _("Do you want to return to the last saved state?\n\n"
- "Revert will cause all changes done since last save to be lost."),
- _("&Revert"), _("&Cancel") );
- if( rc ) {
- /* load the file */
- char *filename = GetLayoutFullPath();
- LoadTracks( 1, &filename, NULL );
- }
- }
+ Confirm(_("examples"), DoExamples);
}
+static void ChkRevert(void)
+{
+ int rc;
+
+ if (changed) {
+ rc = wNoticeEx(NT_WARNING,
+ _("Do you want to return to the last saved state?\n\n"
+ "Revert will cause all changes done since last save to be lost."),
+ _("&Revert"), _("&Cancel"));
+ if (rc) {
+ /* load the file */
+ char *filename = GetLayoutFullPath();
+ LoadTracks(1, &filename, NULL);
+ }
+ }
+}
static char * fileListPathName;
-static void AfterFileList( void )
-{
- DoFileList( 0, NULL, fileListPathName );
+static void AfterFileList(void) {
+ DoFileList(0, NULL, fileListPathName);
}
-static void ChkFileList( int index, const char * label, void * data )
-{
- fileListPathName = (char*)data;
- Confirm( _("Load"), AfterFileList );
+static void ChkFileList(int index, const char * label, void * data) {
+ fileListPathName = (char*) data;
+ Confirm(_("Load"), AfterFileList);
}
/**
* Save information about current files and some settings to preferences file.
*/
-EXPORT void SaveState( void )
-{
+EXPORT void SaveState(void) {
wPos_t width, height;
const char * fileName;
void * pathName;
char file[6];
int inx;
- wWinGetSize( mainW, &width, &height );
- wPrefSetInteger( "draw", "mainwidth", width );
- wPrefSetInteger( "draw", "mainheight", height );
- RememberParamFiles();
+ wWinGetSize(mainW, &width, &height);
+ wPrefSetInteger("draw", "mainwidth", width);
+ wPrefSetInteger("draw", "mainheight", height);
+ SaveParamFileList();
ParamUpdatePrefs();
wPrefSetString( "misc", "lastlayout", GetLayoutFullPath());
+ wPrefSetInteger( "misc", "lastlayoutexample", bExample );
- if ( fileList_ml ) {
- strcpy( file, "file" );
+ if (fileList_ml) {
+ strcpy(file, "file");
file[5] = 0;
- for ( inx=0; inx<NUM_FILELIST; inx++ ) {
- fileName = wMenuListGet( fileList_ml, inx, &pathName );
+ for (inx = 0; inx < NUM_FILELIST; inx++) {
+ fileName = wMenuListGet(fileList_ml, inx, &pathName);
if (fileName) {
- file[4] = '0'+inx;
- sprintf( message, "%s", (char*)pathName );
- wPrefSetString( "filelist", file, message );
+ file[4] = '0' + inx;
+ sprintf(message, "%s", (char* )pathName);
+ wPrefSetString("filelist", file, message);
}
}
}
@@ -637,8 +727,7 @@ EXPORT void SaveState( void )
/*
* Clean up before quitting
*/
-static void DoQuitAfter( void )
-{
+static void DoQuitAfter(void) {
changed = 0;
SaveState();
@@ -649,34 +738,34 @@ static void DoQuitAfter( void )
* to close the application. Before shutting down confirmation is gotten to
* prevent data loss.
*/
-void DoQuit( void )
-{
- Confirm(_("Quit"), DoQuitAfter );
+void DoQuit(void) {
+ if (Confirm(_("Quit"), DoQuitAfter)) {
+
#ifdef CHECK_UNUSED_BALLOONHELP
- ShowUnusedBalloonHelp();
+ ShowUnusedBalloonHelp();
#endif
- LogClose();
- wExit(0);
+ LogClose();
+ wExit(0);
+ }
}
-static void DoClearAfter( void )
-{
-
+static void DoClearAfter(void) {
+
+ Reset();
ClearTracks();
/* set all layers to their default properties and set current layer to 0 */
- DefaultLayerProperties();
DoLayout(NULL);
- checkPtMark = 0;
- Reset();
+ checkPtMark = changed = 0;
DoChangeNotification( CHANGE_MAIN|CHANGE_MAP );
+ bReadOnly = TRUE;
EnableCommands();
SetLayoutFullPath("");
SetWindowTitle();
+ LayoutBackGroundInit(TRUE);
}
-static void DoClear( void )
-{
+static void DoClear(void) {
Confirm(_("Clear"), DoClearAfter);
}
@@ -684,9 +773,8 @@ static void DoClear( void )
* Toggle visibility state of map window.
*/
-void MapWindowToggleShow(void)
-{
- MapWindowShow(!mapVisible);
+void MapWindowToggleShow(void) {
+ MapWindowShow(!mapVisible);
}
/**
@@ -695,114 +783,114 @@ void MapWindowToggleShow(void)
* \param state IN TRUE if visible, FALSE if hidden
*/
-void MapWindowShow(int state)
-{
- mapVisible = state;
- wPrefSetInteger("misc", "mapVisible", mapVisible);
- wMenuToggleSet(mapShowMI, mapVisible);
+void MapWindowShow(int state) {
+ mapVisible = state;
+ wPrefSetInteger("misc", "mapVisible", mapVisible);
+ wMenuToggleSet(mapShowMI, mapVisible);
- if (mapVisible) {
- DoChangeNotification(CHANGE_MAP);
- }
+ if (mapVisible) {
+ DoChangeNotification(CHANGE_MAP);
+ }
- wWinShow(mapW, mapVisible);
- wButtonSetBusy(mapShowB, (wBool_t)mapVisible);
+ wWinShow(mapW, mapVisible);
+ wButtonSetBusy(mapShowB, (wBool_t) mapVisible);
}
-static void DoShowWindow(
- int index,
- const char * name,
- void * data )
+/**
+ * Set magnets state
+ */
+int MagneticSnap(int state)
{
+ int oldState = magneticSnap;
+ magneticSnap = state;
+ wPrefSetInteger("misc", "magnets", magneticSnap);
+ wMenuToggleSet(magnetsMI, magneticSnap);
+ wButtonSetBusy(magnetsB, (wBool_t) magneticSnap);
+ return oldState;
+}
+
+/**
+ * Toggle magnets on/off
+ */
+void MagneticSnapToggle(void) {
+ MagneticSnap(!magneticSnap);
+}
+
+
+static void DoShowWindow(int index, const char * name, void * data) {
if (data == mapW) {
if (mapVisible == FALSE) {
- MapWindowShow( TRUE );
+ MapWindowShow( TRUE);
return;
}
}
- wWinShow( (wWin_p)data, TRUE );
+ wWinShow((wWin_p) data, TRUE);
}
-
static dynArr_t demoWindows_da;
#define demoWindows(N) DYNARR_N( wWin_p, demoWindows_da, N )
-EXPORT void wShow(
- wWin_p win )
-{
+EXPORT void wShow(wWin_p win) {
int inx;
if (inPlayback && win != demoW) {
- wWinSetBusy( win, TRUE );
- for ( inx=0; inx<demoWindows_da.cnt; inx++ )
- if ( demoWindows(inx) == win )
+ wWinSetBusy(win, TRUE);
+ for (inx = 0; inx < demoWindows_da.cnt; inx++)
+ if ( demoWindows(inx) == win)
break;
- if ( inx >= demoWindows_da.cnt ) {
- for ( inx=0; inx<demoWindows_da.cnt; inx++ )
- if ( demoWindows(inx) == NULL )
- break;
- if ( inx >= demoWindows_da.cnt ) {
- DYNARR_APPEND( wWin_p, demoWindows_da, 10 );
- inx = demoWindows_da.cnt-1;
+ if (inx >= demoWindows_da.cnt) {
+ for (inx = 0; inx < demoWindows_da.cnt; inx++)
+ if ( demoWindows(inx) == NULL)
+ break;
+ if (inx >= demoWindows_da.cnt) {
+ DYNARR_APPEND(wWin_p, demoWindows_da, 10);
+ inx = demoWindows_da.cnt - 1;
}
demoWindows(inx) = win;
}
}
if (win != mainW)
- wMenuListAdd( winList_mi, -1, wWinGetTitle(win), win );
- wWinShow( win, TRUE );
+ wMenuListAdd(winList_mi, -1, wWinGetTitle(win), win);
+ wWinShow(win, TRUE);
}
-
-EXPORT void wHide(
- wWin_p win )
-{
+EXPORT void wHide(wWin_p win) {
int inx;
- wWinShow( win, FALSE );
- wWinSetBusy( win, FALSE );
- if ( inMainW && win == aboutW )
+ wWinShow(win, FALSE);
+ wWinSetBusy(win, FALSE);
+ if (inMainW && win == aboutW)
return;
- wMenuListDelete( winList_mi, wWinGetTitle(win) );
- if ( inPlayback )
- for ( inx=0; inx<demoWindows_da.cnt; inx++ )
- if ( demoWindows(inx) == win )
+ wMenuListDelete(winList_mi, wWinGetTitle(win));
+ if (inPlayback)
+ for (inx = 0; inx < demoWindows_da.cnt; inx++)
+ if ( demoWindows(inx) == win)
demoWindows(inx) = NULL;
}
-
-EXPORT void CloseDemoWindows( void )
-{
+EXPORT void CloseDemoWindows(void) {
int inx;
- for ( inx=0; inx<demoWindows_da.cnt; inx++ )
- if ( demoWindows(inx) != NULL )
- wHide( demoWindows(inx) );
+ for (inx = 0; inx < demoWindows_da.cnt; inx++)
+ if ( demoWindows(inx) != NULL)
+ wHide(demoWindows(inx));
demoWindows_da.cnt = 0;
}
-
-EXPORT void DefaultProc(
- wWin_p win,
- winProcEvent e,
- void * data )
-{
- switch( e ) {
+EXPORT void DefaultProc(wWin_p win, winProcEvent e, void * data) {
+ switch (e) {
case wClose_e:
- wMenuListDelete( winList_mi, wWinGetTitle(win) );
+ wMenuListDelete(winList_mi, wWinGetTitle(win));
if (data != NULL)
- ConfirmReset( FALSE );
- wWinDoCancel( win );
+ ConfirmReset( FALSE);
+ wWinDoCancel(win);
break;
default:
break;
}
}
-
-static void NextWindow( void )
-{
+static void NextWindow(void) {
}
-EXPORT void SelectFont( void )
-{
+EXPORT void SelectFont(void) {
wSelectFont(_("XTrackCAD Font"));
}
@@ -817,38 +905,36 @@ EXPORT void SelectFont( void )
#define NUM_CMDMENUS (4)
static struct {
- wControl_p control;
- wBool_t enabled;
- wPos_t x, y;
- long options;
- int group;
- wIndex_t cmdInx;
- } buttonList[BUTTON_MAX];
+ wControl_p control;
+ wBool_t enabled;
+ wPos_t x, y;
+ long options;
+ int group;
+ wIndex_t cmdInx;
+} buttonList[BUTTON_MAX];
static int buttonCnt = 0;
static struct {
- procCommand_t cmdProc;
- char * helpKey;
- wIndex_t buttInx;
- char * labelStr;
- wIcon_p icon;
- int reqLevel;
- wBool_t enabled;
- long options;
- long stickyMask;
- long acclKey;
- wMenuPush_p menu[NUM_CMDMENUS];
- void * context;
- } commandList[COMMAND_MAX];
+ procCommand_t cmdProc;
+ char * helpKey;
+ wIndex_t buttInx;
+ char * labelStr;
+ wIcon_p icon;
+ int reqLevel;
+ wBool_t enabled;
+ long options;
+ long stickyMask;
+ long acclKey;
+ wMenuPush_p menu[NUM_CMDMENUS];
+ void * context;
+} commandList[COMMAND_MAX];
static int commandCnt = 0;
-
#ifdef CHECK_UNUSED_BALLOONHELP
int * balloonHelpCnts;
#endif
-EXPORT const char * GetBalloonHelpStr( char * helpKey )
-{
+EXPORT const char * GetBalloonHelpStr(char * helpKey) {
wBalloonHelp_t * bh;
#ifdef CHECK_UNUSED_BALLOONHELP
if ( balloonHelpCnts == NULL ) {
@@ -857,8 +943,8 @@ EXPORT const char * GetBalloonHelpStr( char * helpKey )
memset( balloonHelpCnts, 0, (sizeof *(int*)0) * (bh-balloonHelp) );
}
#endif
- for ( bh=balloonHelp; bh->name; bh++ ) {
- if ( strcmp( bh->name, helpKey ) == 0 ) {
+ for (bh = balloonHelp; bh->name; bh++) {
+ if (strcmp(bh->name, helpKey) == 0) {
#ifdef CHECK_UNUSED_BALLOONHELP
balloonHelpCnts[(bh-balloonHelp)]++;
#endif
@@ -866,107 +952,134 @@ EXPORT const char * GetBalloonHelpStr( char * helpKey )
}
}
#ifdef CHECK_BALLOONHELP
-fprintf( stderr, _("No balloon help for %s\n"), helpKey );
+ fprintf( stderr, _("No balloon help for %s\n"), helpKey );
#endif
return _("No Help");
}
-
#ifdef CHECK_UNUSED_BALLOONHELP
static void ShowUnusedBalloonHelp( void )
{
int cnt;
for ( cnt=0; balloonHelp[cnt].name; cnt++ )
- if ( balloonHelpCnts[cnt] == 0 )
- fprintf( stderr, "unused BH %s\n", balloonHelp[cnt].name );
+ if ( balloonHelpCnts[cnt] == 0 )
+ fprintf( stderr, "unused BH %s\n", balloonHelp[cnt].name );
}
#endif
+EXPORT const char* GetCurCommandName() {
+ return commandList[curCommand].helpKey;
+}
-EXPORT void EnableCommands( void )
-{
+EXPORT void EnableCommands(void) {
int inx, minx;
wBool_t enable;
-LOG( log_command, 5, ( "COMMAND enable S%d M%d\n", selectedTrackCount, programMode ) )
- for ( inx=0; inx<commandCnt; inx++ ) {
+ LOG(log_command, 5,
+ ( "COMMAND enable S%d M%d\n", selectedTrackCount, programMode ))
+ for (inx = 0; inx < commandCnt; inx++) {
if (commandList[inx].buttInx) {
- if ( (commandList[inx].options & IC_SELECTED) &&
- selectedTrackCount <= 0 )
+ if ((commandList[inx].options & IC_SELECTED)
+ && selectedTrackCount <= 0)
enable = FALSE;
- else if ( (programMode==MODE_TRAIN&&(commandList[inx].options&(IC_MODETRAIN_TOO|IC_MODETRAIN_ONLY))==0) ||
- (programMode!=MODE_TRAIN&&(commandList[inx].options&IC_MODETRAIN_ONLY)!=0) )
+ else if ((programMode == MODE_TRAIN
+ && (commandList[inx].options
+ & (IC_MODETRAIN_TOO | IC_MODETRAIN_ONLY)) == 0)
+ || (programMode != MODE_TRAIN
+ && (commandList[inx].options & IC_MODETRAIN_ONLY)
+ != 0))
enable = FALSE;
else
enable = TRUE;
- if ( commandList[inx].enabled != enable ) {
- if ( commandList[inx].buttInx >= 0 )
- wControlActive( buttonList[commandList[inx].buttInx].control, enable );
- for ( minx=0; minx<NUM_CMDMENUS; minx++ )
+ if (commandList[inx].enabled != enable) {
+ if (commandList[inx].buttInx >= 0)
+ wControlActive(buttonList[commandList[inx].buttInx].control,
+ enable);
+ for (minx = 0; minx < NUM_CMDMENUS; minx++)
if (commandList[inx].menu[minx])
- wMenuPushEnable( commandList[inx].menu[minx], enable );
+ wMenuPushEnable(commandList[inx].menu[minx], enable);
commandList[inx].enabled = enable;
}
}
}
- for ( inx=0; inx<menuPG.paramCnt; inx++ ) {
- if ( menuPLs[inx].control == NULL )
+ for (inx = 0; inx < menuPG.paramCnt; inx++) {
+ if (menuPLs[inx].control == NULL)
continue;
- if ( (menuPLs[inx].option & IC_SELECTED) &&
- selectedTrackCount <= 0 )
+ if ((menuPLs[inx].option & IC_SELECTED) && selectedTrackCount <= 0)
enable = FALSE;
- else if ( (programMode==MODE_TRAIN&&(menuPLs[inx].option&(IC_MODETRAIN_TOO|IC_MODETRAIN_ONLY))==0) ||
- (programMode!=MODE_TRAIN&&(menuPLs[inx].option&IC_MODETRAIN_ONLY)!=0) )
+ else if ((programMode == MODE_TRAIN
+ && (menuPLs[inx].option & (IC_MODETRAIN_TOO | IC_MODETRAIN_ONLY))
+ == 0)
+ || (programMode != MODE_TRAIN
+ && (menuPLs[inx].option & IC_MODETRAIN_ONLY) != 0))
enable = FALSE;
else
enable = TRUE;
- wMenuPushEnable( (wMenuPush_p)menuPLs[inx].control, enable );
+ wMenuPushEnable((wMenuPush_p) menuPLs[inx].control, enable);
}
- for ( inx=0; inx<buttonCnt; inx++ ) {
- if ( buttonList[inx].cmdInx < 0 && (buttonList[inx].options&IC_SELECTED) )
- wControlActive( buttonList[inx].control, selectedTrackCount>0 );
- }
+ for (inx = 0; inx < buttonCnt; inx++) {
+ if (buttonList[inx].cmdInx < 0
+ && (buttonList[inx].options & IC_SELECTED))
+ wControlActive(buttonList[inx].control, selectedTrackCount > 0);
+ }
}
+EXPORT wIndex_t GetCurrentCommand() {
+ return curCommand;
+}
-EXPORT void Reset( void )
-{
+static wIndex_t autosave_count = 0;
+
+EXPORT void Reset(void) {
if (recordF) {
- fprintf( recordF, "RESET\n" );
- fflush( recordF );
- }
-LOG( log_command, 2, ( "COMMAND CANCEL %s\n", commandList[curCommand].helpKey ) )
- commandList[curCommand].cmdProc( C_CANCEL, zero );
- if ( commandList[curCommand].buttInx>=0 )
- wButtonSetBusy( (wButton_p)buttonList[commandList[curCommand].buttInx].control, FALSE );
- curCommand = (preSelect?selectCmdInx:describeCmdInx);
+ fprintf(recordF, "RESET\n");
+ fflush(recordF);
+ }
+ LOG(log_command, 2,
+ ( "COMMAND CANCEL %s\n", commandList[curCommand].helpKey ))
+ commandList[curCommand].cmdProc( C_CANCEL, zero);
+ if (commandList[curCommand].buttInx >= 0)
+ wButtonSetBusy(
+ (wButton_p) buttonList[commandList[curCommand].buttInx].control,
+ FALSE);
+ curCommand = (preSelect ? selectCmdInx : describeCmdInx);
+ wSetCursor(mainD.d, preSelect ? defaultCursor : wCursorQuestion);
commandContext = commandList[curCommand].context;
- if ( commandList[curCommand].buttInx >= 0 )
- wButtonSetBusy( (wButton_p)buttonList[commandList[curCommand].buttInx].control, TRUE );
+ if (commandList[curCommand].buttInx >= 0)
+ wButtonSetBusy(
+ (wButton_p) buttonList[commandList[curCommand].buttInx].control,
+ TRUE);
tempSegs_da.cnt = 0;
- if (checkPtInterval > 0 &&
- changed >= checkPtMark+(wIndex_t)checkPtInterval &&
- !inPlayback ) {
+ if (checkPtInterval > 0
+ && changed >= checkPtMark + (wIndex_t) checkPtInterval
+ && !inPlayback) {
DoCheckPoint();
checkPtMark = changed;
+
+ autosave_count++;
+
+ if ((autosaveChkPoints>0) && (autosave_count>=autosaveChkPoints)) {
+ DoSave(NULL);
+ InfoMessage(_("File AutoSaved"));
+ autosave_count = 0;
+ }
}
- MainRedraw();
- MapRedraw();
+
+
+
+ ClrAllTrkBits( TB_UNDRAWN );
+ DoRedraw(); // Reset
EnableCommands();
ResetMouseState();
-LOG( log_command, 1, ( "COMMAND RESET %s\n", commandList[curCommand].helpKey ) )
- (void)commandList[curCommand].cmdProc( C_START, zero );
+ LOG(log_command, 1,
+ ( "COMMAND RESET %s\n", commandList[curCommand].helpKey ))
+ (void) commandList[curCommand].cmdProc( C_START, zero);
}
-
-static BOOL_T CheckClick(
- wAction_t *action,
- coOrd *pos,
- BOOL_T checkLeft,
- BOOL_T checkRight )
-{
+static BOOL_T CheckClick(wAction_t *action, coOrd *pos, BOOL_T checkLeft,
+ BOOL_T checkRight) {
static long time0;
static coOrd pos0;
long time1;
@@ -974,6 +1087,11 @@ static BOOL_T CheckClick(
DIST_T distDelta;
switch (*action) {
+ case C_LDOUBLE:
+ if (!checkLeft)
+ return TRUE;
+ time0 = 0;
+ break;
case C_DOWN:
if (!checkLeft)
return TRUE;
@@ -986,9 +1104,8 @@ static BOOL_T CheckClick(
if (time0 != 0) {
time1 = wGetTimer() - adjTimer;
timeDelta = time1 - time0;
- distDelta = FindDistance( *pos, pos0 );
- if ( timeDelta > dragTimeout ||
- distDelta > dragDistance ) {
+ distDelta = FindDistance(*pos, pos0);
+ if (timeDelta > dragTimeout || distDelta > dragDistance) {
time0 = 0;
*pos = pos0;
*action = C_DOWN;
@@ -1003,7 +1120,7 @@ static BOOL_T CheckClick(
if (time0 != 0) {
time1 = wGetTimer() - adjTimer;
timeDelta = time1 - time0;
- distDelta = FindDistance( *pos, pos0 );
+ distDelta = FindDistance(*pos, pos0);
time0 = 0;
*action = C_LCLICK;
}
@@ -1020,9 +1137,8 @@ static BOOL_T CheckClick(
if (time0 != 0) {
time1 = wGetTimer() - adjTimer;
timeDelta = time1 - time0;
- distDelta = FindDistance( *pos, pos0 );
- if ( timeDelta > dragTimeout ||
- distDelta > dragDistance ) {
+ distDelta = FindDistance(*pos, pos0);
+ if (timeDelta > dragTimeout || distDelta > dragDistance) {
time0 = 0;
*pos = pos0;
*action = C_RDOWN;
@@ -1043,66 +1159,90 @@ static BOOL_T CheckClick(
return TRUE;
}
-
-EXPORT wBool_t DoCurCommand( wAction_t action, coOrd pos )
-{
+EXPORT wBool_t DoCurCommand(wAction_t action, coOrd pos) {
wAction_t rc;
int mode;
+ wBool_t bExit = FALSE;
- if ( action == wActionMove && (commandList[curCommand].options & IC_WANT_MOVE) == 0 )
- return C_CONTINUE;
-
- if ( !CheckClick( &action, &pos,
- (int)(commandList[curCommand].options & IC_LCLICK), TRUE ) )
- return C_CONTINUE;
-
- if ( action == C_RCLICK && (commandList[curCommand].options&IC_RCLICK)==0 ) {
- if ( !inPlayback ) {
+ if (action == wActionMove) {
+ if ((commandList[curCommand].options & IC_WANT_MOVE) == 0) {
+ bExit = TRUE;
+ }
+ } else if ((action&0xFF) == wActionModKey) {
+ if ((commandList[curCommand].options & IC_WANT_MODKEYS) == 0) {
+ bExit = TRUE;
+ }
+ } else if (!CheckClick(&action, &pos,
+ (int) (commandList[curCommand].options & IC_LCLICK), TRUE)) {
+ bExit = TRUE;
+ } else if (action == C_RCLICK
+ && (commandList[curCommand].options & IC_RCLICK) == 0) {
+ if (!inPlayback) {
mode = MyGetKeyState();
- if ( ( mode & (~WKEY_SHIFT) ) != 0 ) {
+ if ((mode & (~WKEY_SHIFT)) != 0) {
wBeep();
- return C_CONTINUE;
- }
- if ( ((mode&WKEY_SHIFT) == 0) == (rightClickMode==0) ) {
- if ( selectedTrackCount > 0 ) {
+ bExit = TRUE;
+ } else if (((mode & WKEY_SHIFT) == 0) == (rightClickMode == 0)) {
+ if (selectedTrackCount > 0) {
if (commandList[curCommand].options & IC_CMDMENU) {
}
- wMenuPopupShow( popup2M );
+ wMenuPopupShow(popup2M);
} else {
- wMenuPopupShow( popup1M );
+ wMenuPopupShow(popup1M);
}
- return C_CONTINUE;
- } else if ( (commandList[curCommand].options & IC_CMDMENU) ) {
+ bExit = TRUE;
+ } else if ((commandList[curCommand].options & IC_CMDMENU)) {
cmdMenuPos = pos;
action = C_CMDMENU;
} else {
wBeep();
- return C_CONTINUE;
+ bExit = TRUE;
}
} else {
- return C_CONTINUE;
+ bExit = TRUE;
}
}
+ if ( bExit ) {
+ TempRedraw(); // DoCurCommand: precommand
+ return C_CONTINUE;
+ }
-LOG( log_command, 2, ( "COMMAND MOUSE %s %d @ %0.3f %0.3f\n", commandList[curCommand].helpKey, (int)action, pos.x, pos.y ) )
- rc = commandList[curCommand].cmdProc( action, pos );
-LOG( log_command, 4, ( " COMMAND returns %d\n", rc ) )
- if ( (rc == C_TERMINATE || rc == C_INFO) &&
- (commandList[curCommand].options & IC_STICKY) &&
- (commandList[curCommand].stickyMask & stickySet) ) {
+ LOG(log_command, 2,
+ ( "COMMAND MOUSE %s %d @ %0.3f %0.3f\n", commandList[curCommand].helpKey, (int)action, pos.x, pos.y ))
+ rc = commandList[curCommand].cmdProc(action, pos);
+ LOG(log_command, 4, ( " COMMAND returns %d\n", rc ))
+ switch ( action & 0xFF ) {
+ case wActionMove:
+ case wActionModKey:
+ case C_DOWN:
+ case C_MOVE:
+ case C_UP:
+ case C_RDOWN:
+ case C_RMOVE:
+ case C_RUP:
+ case C_LCLICK:
+ case C_RCLICK:
+ case C_TEXT:
+ case C_OK:
+ if (rc== C_TERMINATE) MainRedraw();
+ else TempRedraw(); // DoCurCommand: postcommand
+ break;
+ default:
+ break;
+ }
+ if ((rc == C_TERMINATE || rc == C_INFO)
+ && (commandList[curCommand].options & IC_STICKY)
+ && (commandList[curCommand].stickyMask & stickySet)) {
tempSegs_da.cnt = 0;
UpdateAllElevations();
- if (action != C_REDRAW) {
- MainRedraw();
- MapRedraw();
- }
if (commandList[curCommand].options & IC_NORESTART) {
return C_CONTINUE;
}
-LOG( log_command, 1, ( "COMMAND START %s\n", commandList[curCommand].helpKey ) )
- rc = commandList[curCommand].cmdProc( C_START, pos );
-LOG( log_command, 4, ( " COMMAND returns %d\n", rc ) )
- switch( rc ) {
+ LOG(log_command, 1,
+ ( "COMMAND START %s\n", commandList[curCommand].helpKey ))
+ rc = commandList[curCommand].cmdProc( C_START, pos);
+ LOG(log_command, 4, ( " COMMAND returns %d\n", rc ))
+ switch (rc) {
case C_CONTINUE:
break;
case C_ERROR:
@@ -1112,7 +1252,7 @@ LOG( log_command, 4, ( " COMMAND returns %d\n", rc ) )
#endif
break;
case C_TERMINATE:
- InfoMessage( "" );
+ InfoMessage("");
case C_INFO:
Reset();
break;
@@ -1121,60 +1261,67 @@ LOG( log_command, 4, ( " COMMAND returns %d\n", rc ) )
return rc;
}
-
-EXPORT void ConfirmReset( BOOL_T retry )
-{
+EXPORT void ConfirmReset(BOOL_T retry) {
wAction_t rc;
- if (curCommand != describeCmdInx && curCommand != selectCmdInx ) {
-LOG( log_command, 3, ( "COMMAND CONFIRM %s\n", commandList[curCommand].helpKey ) )
- rc = commandList[curCommand].cmdProc( C_CONFIRM, zero );
-LOG( log_command, 4, ( " COMMAND returns %d\n", rc ) )
- if ( rc == C_ERROR ) {
+ if (curCommand != describeCmdInx && curCommand != selectCmdInx) {
+ LOG(log_command, 3,
+ ( "COMMAND CONFIRM %s\n", commandList[curCommand].helpKey ))
+ rc = commandList[curCommand].cmdProc( C_CONFIRM, zero);
+ LOG(log_command, 4, ( " COMMAND returns %d\n", rc ))
+ if (rc == C_ERROR) {
if (retry)
- rc = wNotice3(
- _("Cancelling the current command will undo the changes\n"
- "you are currently making. Do you want to update?"),
- _("Yes"), _("No"), _("Cancel") );
+ rc =
+ wNotice3(
+ _(
+ "Cancelling the current command will undo the changes\n"
+ "you are currently making. Do you want to update?"),
+ _("Yes"), _("No"), _("Cancel"));
else
- rc = wNoticeEx( NT_WARNING,
- _("Cancelling the current command will undo the changes\n"
- "you are currently making. Do you want to update?"),
- _("Yes"), _("No") );
+ rc =
+ wNoticeEx( NT_WARNING,
+ _(
+ "Cancelling the current command will undo the changes\n"
+ "you are currently making. Do you want to update?"),
+ _("Yes"), _("No"));
if (rc == 1) {
-LOG( log_command, 3, ( "COMMAND OK %s\n", commandList[curCommand].helpKey ) )
- commandList[curCommand].cmdProc( C_OK, zero );
+ LOG(log_command, 3,
+ ( "COMMAND OK %s\n", commandList[curCommand].helpKey ))
+ commandList[curCommand].cmdProc( C_OK, zero);
return;
} else if (rc == -1) {
return;
}
- } else if ( rc == C_TERMINATE ) {
+ } else if (rc == C_TERMINATE) {
return;
}
}
- Reset();
if (retry) {
/* because user pressed esc */
- SetAllTrackSelect( FALSE );
+ SetAllTrackSelect( FALSE);
}
-LOG( log_command, 1, ( "COMMAND RESET %s\n", commandList[curCommand].helpKey ) )
- commandList[curCommand].cmdProc( C_START, zero );
+ Reset();
+ LOG(log_command, 1,
+ ( "COMMAND RESET %s\n", commandList[curCommand].helpKey ))
+ commandList[curCommand].cmdProc( C_START, zero);
}
+EXPORT BOOL_T IsCurCommandSticky(void) {
+ if ((commandList[curCommand].options & IC_STICKY) != 0
+ && (commandList[curCommand].stickyMask & stickySet) != 0)
+ return TRUE;
+ return FALSE;
+}
-EXPORT void ResetIfNotSticky( void )
-{
- if ( (commandList[curCommand].options & IC_STICKY) == 0 ||
- (commandList[curCommand].stickyMask & stickySet) == 0 )
+EXPORT void ResetIfNotSticky(void) {
+ if ((commandList[curCommand].options & IC_STICKY) == 0
+ || (commandList[curCommand].stickyMask & stickySet) == 0)
Reset();
}
-
-EXPORT void DoCommandB(
- void * data )
-{
- wIndex_t inx = (wIndex_t)(long)data;
+EXPORT void DoCommandB(void * data) {
+ wIndex_t inx = (wIndex_t) (long) data;
STATUS_T rc;
- static coOrd pos = {0,0};
+ static coOrd pos = { 0, 0 };
static int inDoCommandB = FALSE;
wIndex_t buttInx;
@@ -1183,62 +1330,74 @@ EXPORT void DoCommandB(
inDoCommandB = TRUE;
if (inx < 0 || inx >= commandCnt) {
- ASSERT( FALSE );
+ ASSERT(FALSE);
inDoCommandB = FALSE;
return;
}
- if ( (!inPlayback) && (!commandList[inx].enabled) ) {
- ErrorMessage( MSG_COMMAND_DISABLED );
+ if ((!inPlayback) && (!commandList[inx].enabled)) {
+ ErrorMessage(MSG_COMMAND_DISABLED);
inx = describeCmdInx;
}
- InfoMessage( "" );
- if (curCommand != selectCmdInx ) {
-LOG( log_command, 3, ( "COMMAND FINISH %s\n", commandList[curCommand].helpKey ) )
- rc = commandList[curCommand].cmdProc( C_FINISH, zero );
-LOG( log_command, 3, ( "COMMAND CONFIRM %s\n", commandList[curCommand].helpKey ) )
- rc = commandList[curCommand].cmdProc( C_CONFIRM, zero );
-LOG( log_command, 4, ( " COMMAND returns %d\n", rc ) )
- if ( rc == C_ERROR ) {
+ InfoMessage("");
+ if (curCommand != selectCmdInx) {
+ LOG(log_command, 3,
+ ( "COMMAND FINISH %s\n", commandList[curCommand].helpKey ))
+ rc = commandList[curCommand].cmdProc( C_FINISH, zero);
+ LOG(log_command, 3,
+ ( "COMMAND CONFIRM %s\n", commandList[curCommand].helpKey ))
+ rc = commandList[curCommand].cmdProc( C_CONFIRM, zero);
+ LOG(log_command, 4, ( " COMMAND returns %d\n", rc ))
+ if (rc == C_ERROR) {
rc = wNotice3(
- _("Cancelling the current command will undo the changes\n"
- "you are currently making. Do you want to update?"),
- _("Yes"), _("No"), _("Cancel") );
+ _("Cancelling the current command will undo the changes\n"
+ "you are currently making. Do you want to update?"),
+ _("Yes"), _("No"), _("Cancel"));
if (rc == 1)
- commandList[curCommand].cmdProc( C_OK, zero );
+ commandList[curCommand].cmdProc( C_OK, zero);
else if (rc == -1) {
inDoCommandB = FALSE;
return;
}
}
-LOG( log_command, 3, ( "COMMAND CANCEL %s\n", commandList[curCommand].helpKey ) )
- commandList[curCommand].cmdProc( C_CANCEL, pos );
+ LOG(log_command, 3,
+ ( "COMMAND CANCEL %s\n", commandList[curCommand].helpKey ))
+ commandList[curCommand].cmdProc( C_CANCEL, pos);
tempSegs_da.cnt = 0;
}
- if (commandList[curCommand].buttInx>=0)
- wButtonSetBusy( (wButton_p)buttonList[commandList[curCommand].buttInx].control, FALSE );
+ if (commandList[curCommand].buttInx >= 0)
+ wButtonSetBusy(
+ (wButton_p) buttonList[commandList[curCommand].buttInx].control,
+ FALSE);
if (recordF) {
- fprintf( recordF, "COMMAND %s\n", commandList[inx].helpKey+3 );
- fflush( recordF );
+ fprintf(recordF, "COMMAND %s\n", commandList[inx].helpKey + 3);
+ fflush(recordF);
}
curCommand = inx;
commandContext = commandList[curCommand].context;
- if ( (buttInx=commandList[curCommand].buttInx) >= 0 ) {
- if ( buttonList[buttInx].cmdInx != curCommand ) {
- wButtonSetLabel( (wButton_p)buttonList[buttInx].control, (char*)commandList[curCommand].icon );
- wControlSetHelp( buttonList[buttInx].control, GetBalloonHelpStr(commandList[curCommand].helpKey) );
- wControlSetContext( buttonList[buttInx].control, (void*)(intptr_t)curCommand );
+ if ((buttInx = commandList[curCommand].buttInx) >= 0) {
+ if (buttonList[buttInx].cmdInx != curCommand) {
+ wButtonSetLabel((wButton_p) buttonList[buttInx].control,
+ (char*) commandList[curCommand].icon);
+ wControlSetHelp(buttonList[buttInx].control,
+ GetBalloonHelpStr(commandList[curCommand].helpKey));
+ wControlSetContext(buttonList[buttInx].control,
+ (void*) (intptr_t) curCommand);
buttonList[buttInx].cmdInx = curCommand;
}
- wButtonSetBusy( (wButton_p)buttonList[commandList[curCommand].buttInx].control, TRUE );
+ wButtonSetBusy(
+ (wButton_p) buttonList[commandList[curCommand].buttInx].control,
+ TRUE);
}
-LOG( log_command, 1, ( "COMMAND START %s\n", commandList[curCommand].helpKey ) )
- rc = commandList[curCommand].cmdProc( C_START, pos );
-LOG( log_command, 4, ( " COMMAND returns %d\n", rc ) )
- switch( rc ) {
+ LOG(log_command, 1,
+ ( "COMMAND START %s\n", commandList[curCommand].helpKey ))
+ rc = commandList[curCommand].cmdProc( C_START, pos);
+ LOG(log_command, 4, ( " COMMAND returns %d\n", rc ))
+ TempRedraw(); // DoCommandB
+ switch (rc) {
case C_CONTINUE:
break;
case C_ERROR:
@@ -1250,26 +1409,21 @@ LOG( log_command, 4, ( " COMMAND returns %d\n", rc ) )
case C_TERMINATE:
case C_INFO:
if (rc == C_TERMINATE)
- InfoMessage( "" );
+ InfoMessage("");
Reset();
break;
}
inDoCommandB = FALSE;
}
-
-static void DoCommandBIndirect( void * cmdInxP )
-{
+static void DoCommandBIndirect(void * cmdInxP) {
wIndex_t cmdInx;
- cmdInx = *(wIndex_t*)cmdInxP;
- DoCommandB( (void*)(intptr_t)cmdInx );
+ cmdInx = *(wIndex_t*) cmdInxP;
+ DoCommandB((void*) (intptr_t) cmdInx);
}
-
-EXPORT void LayoutSetPos(
- wIndex_t inx )
-{
- wPos_t w, h;
+EXPORT void LayoutSetPos(wIndex_t inx) {
+ wPos_t w, h, offset;
static wPos_t toolbarRowHeight = 0;
static wPos_t width;
static int lastGroup;
@@ -1277,59 +1431,66 @@ EXPORT void LayoutSetPos(
static int layerButtCnt;
int currGroup;
- if ( inx == 0 ) {
+ if (inx == 0) {
lastGroup = 0;
- wWinGetSize( mainW, &width, &h );
+ wWinGetSize(mainW, &width, &h);
gap = 5;
- toolbarWidth = width-20+5;
+ toolbarWidth = width - 20 + 5;
layerButtCnt = 0;
toolbarHeight = 0;
}
if (buttonList[inx].control) {
- if ( toolbarRowHeight <= 0 )
- toolbarRowHeight = wControlGetHeight( buttonList[inx].control );
+ if (toolbarRowHeight <= 0)
+ toolbarRowHeight = wControlGetHeight(buttonList[inx].control);
currGroup = buttonList[inx].group & ~BG_BIGGAP;
- if ( currGroup != lastGroup && (buttonList[inx].group&BG_BIGGAP) ) {
- gap = 15;
+ if (currGroup != lastGroup && (buttonList[inx].group & BG_BIGGAP)) {
+ gap = 15;
}
- if ((toolbarSet & (1<<currGroup)) &&
- (programMode!=MODE_TRAIN||(buttonList[inx].options&(IC_MODETRAIN_TOO|IC_MODETRAIN_ONLY))) &&
- (programMode==MODE_TRAIN||(buttonList[inx].options&IC_MODETRAIN_ONLY)==0) &&
- ((buttonList[inx].group&~BG_BIGGAP) != BG_LAYER ||
- layerButtCnt++ <= layerCount) ) {
- if (currGroup != lastGroup) {
- toolbarWidth += gap;
- lastGroup = currGroup;
- gap = 5;
- }
- w = wControlGetWidth( buttonList[inx].control );
- h = wControlGetHeight( buttonList[inx].control );
- if ( inx<buttonCnt-1 && (buttonList[inx+1].options&IC_ABUT) )
- w += wControlGetWidth( buttonList[inx+1].control );
- if (toolbarWidth+w>width-20) {
- toolbarWidth = 0;
- toolbarHeight += h + 5;
- }
- wControlSetPos( buttonList[inx].control, toolbarWidth, toolbarHeight-(h+5) );
- buttonList[inx].x = toolbarWidth;
- buttonList[inx].y = toolbarHeight-(h+5);
- toolbarWidth += wControlGetWidth( buttonList[inx].control );
- wControlShow( buttonList[inx].control, TRUE );
+ if ((toolbarSet & (1 << currGroup))
+ && (programMode != MODE_TRAIN
+ || (buttonList[inx].options
+ & (IC_MODETRAIN_TOO | IC_MODETRAIN_ONLY)))
+ && (programMode == MODE_TRAIN
+ || (buttonList[inx].options & IC_MODETRAIN_ONLY) == 0)
+ && ((buttonList[inx].group & ~BG_BIGGAP) != BG_LAYER
+ || layerButtCnt++ <= layerCount)) {
+ if (currGroup != lastGroup) {
+ toolbarWidth += gap;
+ lastGroup = currGroup;
+ gap = 5;
+ }
+ w = wControlGetWidth(buttonList[inx].control);
+ h = wControlGetHeight(buttonList[inx].control);
+ if (h<toolbarRowHeight) {
+ offset = (h-toolbarRowHeight)/2;
+ h = toolbarRowHeight; //Uniform
+ } else offset = 0;
+ if (inx < buttonCnt - 1 && (buttonList[inx + 1].options & IC_ABUT))
+ w += wControlGetWidth(buttonList[inx + 1].control);
+ if (toolbarWidth + w > width - 20) {
+ toolbarWidth = 0;
+ toolbarHeight += h + 5;
+ }
+ wControlSetPos(buttonList[inx].control, toolbarWidth,
+ toolbarHeight - (h + 5 +offset));
+ buttonList[inx].x = toolbarWidth;
+ buttonList[inx].y = toolbarHeight - (h + 5 + offset);
+ toolbarWidth += wControlGetWidth(buttonList[inx].control);
+ wControlShow(buttonList[inx].control, TRUE);
} else {
- wControlShow( buttonList[inx].control, FALSE );
+ wControlShow(buttonList[inx].control, FALSE);
}
}
}
-
EXPORT void LayoutToolBar( void * data )
{
int inx;
- for (inx = 0; inx<buttonCnt; inx++) {
- LayoutSetPos( inx );
+ for (inx = 0; inx < buttonCnt; inx++) {
+ LayoutSetPos(inx);
}
if (toolbarSet&(1<<BG_HOTBAR)) {
LayoutHotBar(data);
@@ -1338,14 +1499,12 @@ EXPORT void LayoutToolBar( void * data )
}
}
-
-static void ToolbarChange( long changes )
-{
- if ( (changes&CHANGE_TOOLBAR) ) {
+static void ToolbarChange(long changes) {
+ if ((changes & CHANGE_TOOLBAR)) {
/*if ( !(changes&CHANGE_MAIN) )*/
- MainProc( mainW, wResize_e, NULL, NULL );
+ MainProc( mainW, wResize_e, NULL, NULL );
/*else
- LayoutToolBar();*/
+ LayoutToolBar();*/
}
}
@@ -1355,26 +1514,15 @@ static void ToolbarChange( long changes )
*
*/
-
-EXPORT BOOL_T CommandEnabled(
- wIndex_t cmdInx )
-{
+EXPORT BOOL_T CommandEnabled(wIndex_t cmdInx) {
return commandList[cmdInx].enabled;
}
-
-static wIndex_t AddCommand(
- procCommand_t cmdProc,
- char * helpKey,
- char * nameStr,
- wIcon_p icon,
- int reqLevel,
- long options,
- long acclKey,
- void * context )
-{
- if (commandCnt >= COMMAND_MAX-1) {
- AbortProg("addCommand: too many commands" );
+static wIndex_t AddCommand(procCommand_t cmdProc, char * helpKey,
+ char * nameStr, wIcon_p icon, int reqLevel, long options, long acclKey,
+ void * context) {
+ if (commandCnt >= COMMAND_MAX - 1) {
+ AbortProg("addCommand: too many commands");
}
commandList[commandCnt].labelStr = MyStrdup(nameStr);
commandList[commandCnt].helpKey = MyStrdup(helpKey);
@@ -1391,15 +1539,12 @@ static wIndex_t AddCommand(
commandList[commandCnt].menu[2] = NULL;
commandList[commandCnt].menu[3] = NULL;
commandCnt++;
- return commandCnt-1;
+ return commandCnt - 1;
}
-EXPORT void AddToolbarControl(
- wControl_p control,
- long options )
-{
- if (buttonCnt >= COMMAND_MAX-1) {
- AbortProg("addToolbarControl: too many buttons" );
+EXPORT void AddToolbarControl(wControl_p control, long options) {
+ if (buttonCnt >= COMMAND_MAX - 1) {
+ AbortProg("addToolbarControl: too many buttons");
}
buttonList[buttonCnt].enabled = TRUE;
buttonList[buttonCnt].options = options;
@@ -1408,98 +1553,77 @@ EXPORT void AddToolbarControl(
buttonList[buttonCnt].y = 0;
buttonList[buttonCnt].control = control;
buttonList[buttonCnt].cmdInx = -1;
- LayoutSetPos( buttonCnt );
+ LayoutSetPos(buttonCnt);
buttonCnt++;
}
-
-EXPORT wButton_p AddToolbarButton(
- char * helpStr,
- wIcon_p icon,
- long options,
- wButtonCallBack_p action,
- void * context )
-{
+EXPORT wButton_p AddToolbarButton(char * helpStr, wIcon_p icon, long options,
+ wButtonCallBack_p action, void * context) {
wButton_p bb;
wIndex_t inx;
GetBalloonHelpStr(helpStr);
- if ( context == NULL ) {
- for ( inx=0; inx<menuPG.paramCnt; inx++ ) {
- if ( action != DoCommandB && menuPLs[inx].valueP == (void*)action ) {
+ if (context == NULL) {
+ for (inx = 0; inx < menuPG.paramCnt; inx++) {
+ if (action != DoCommandB && menuPLs[inx].valueP == (void*) action) {
context = &menuPLs[inx];
action = ParamMenuPush;
- menuPLs[inx].context = (void*)(intptr_t)buttonCnt;
+ menuPLs[inx].context = (void*) (intptr_t) buttonCnt;
menuPLs[inx].option |= IC_PLAYBACK_PUSH;
break;
}
}
}
- bb = wButtonCreate( mainW, 0, 0, helpStr, (char*)icon,
- BO_ICON/*|((options&IC_CANCEL)?BB_CANCEL:0)*/, 0,
- action, context );
- AddToolbarControl( (wControl_p)bb, options );
+ bb = wButtonCreate(mainW, 0, 0, helpStr, (char*) icon,
+ BO_ICON/*|((options&IC_CANCEL)?BB_CANCEL:0)*/, 0, action, context);
+ AddToolbarControl((wControl_p) bb, options);
return bb;
}
-
-EXPORT void PlaybackButtonMouse(
- wIndex_t buttInx )
-{
+EXPORT void PlaybackButtonMouse(wIndex_t buttInx) {
wPos_t cmdX, cmdY;
- if ( buttInx < 0 || buttInx >= buttonCnt ) return;
- if ( buttonList[buttInx].control == NULL ) return;
- cmdX = buttonList[buttInx].x+17;
- cmdY = toolbarHeight - (buttonList[buttInx].y+17) +
- (wPos_t)(mainD.size.y/mainD.scale*mainD.dpi) + 30;
- MovePlaybackCursor( &mainD, cmdX, cmdY );
- if ( playbackTimer == 0 ) {
- wButtonSetBusy( (wButton_p)buttonList[buttInx].control, TRUE );
+ if (buttInx < 0 || buttInx >= buttonCnt)
+ return;
+ if (buttonList[buttInx].control == NULL)
+ return;
+ cmdX = buttonList[buttInx].x + 17;
+ cmdY = toolbarHeight - (buttonList[buttInx].y + 17)
+ + (wPos_t) (mainD.size.y / mainD.scale * mainD.dpi) + 30;
+
+ MovePlaybackCursor(&mainD, cmdX, cmdY,TRUE,buttonList[buttInx].control);
+ if (playbackTimer == 0) {
+ wButtonSetBusy((wButton_p) buttonList[buttInx].control, TRUE);
wFlush();
- wPause( 500 );
- wButtonSetBusy( (wButton_p)buttonList[buttInx].control, FALSE );
+ wPause(500);
+ wButtonSetBusy((wButton_p) buttonList[buttInx].control, FALSE);
wFlush();
}
}
-
#include "bitmaps/openbutt.xpm"
static char * buttonGroupMenuTitle;
static char * buttonGroupHelpKey;
static char * buttonGroupStickyLabel;
static wMenu_p buttonGroupPopupM;
-EXPORT void ButtonGroupBegin(
- char * menuTitle,
- char * helpKey,
- char * stickyLabel )
-{
+EXPORT void ButtonGroupBegin(char * menuTitle, char * helpKey,
+ char * stickyLabel) {
buttonGroupMenuTitle = menuTitle;
buttonGroupHelpKey = helpKey;
buttonGroupStickyLabel = stickyLabel;
buttonGroupPopupM = NULL;
}
-EXPORT void ButtonGroupEnd( void )
-{
+EXPORT void ButtonGroupEnd(void) {
buttonGroupMenuTitle = NULL;
buttonGroupHelpKey = NULL;
buttonGroupPopupM = NULL;
}
-
-EXPORT wIndex_t AddMenuButton(
- wMenu_p menu,
- procCommand_t command,
- char * helpKey,
- char * nameStr,
- wIcon_p icon,
- int reqLevel,
- long options,
- long acclKey,
- void * context )
-{
+EXPORT wIndex_t AddMenuButton(wMenu_p menu, procCommand_t command,
+ char * helpKey, char * nameStr, wIcon_p icon, int reqLevel,
+ long options, long acclKey, void * context) {
wIndex_t buttInx = -1;
wIndex_t cmdInx;
BOOL_T newButtonGroup = FALSE;
@@ -1509,225 +1633,223 @@ EXPORT wIndex_t AddMenuButton(
static wMenu_p popup1Submenu;
static wMenu_p popup2Submenu;
- if ( icon ) {
- if ( buttonGroupPopupM!=NULL ) {
- buttInx = buttonCnt-2;
+ if (icon) {
+ if (buttonGroupPopupM != NULL) {
+ buttInx = buttonCnt - 2;
} else {
buttInx = buttonCnt;
- AddToolbarButton( helpKey, icon, options, (wButtonCallBack_p)DoCommandB, (void*)(intptr_t)commandCnt );
+ AddToolbarButton(helpKey, icon, options,
+ (wButtonCallBack_p) DoCommandB,
+ (void*) (intptr_t) commandCnt);
buttonList[buttInx].cmdInx = commandCnt;
}
- if ( buttonGroupMenuTitle!=NULL && buttonGroupPopupM==NULL ) {
- if ( openbuttIcon == NULL )
+ if (buttonGroupMenuTitle != NULL && buttonGroupPopupM == NULL) {
+ if (openbuttIcon == NULL)
openbuttIcon = wIconCreatePixMap(openbutt_xpm);
- buttonGroupPopupM = wMenuPopupCreate( mainW, buttonGroupMenuTitle );
- AddToolbarButton( buttonGroupHelpKey, openbuttIcon, IC_ABUT, (wButtonCallBack_p)wMenuPopupShow, (void*)buttonGroupPopupM );
+ buttonGroupPopupM = wMenuPopupCreate(mainW, buttonGroupMenuTitle);
+ AddToolbarButton(buttonGroupHelpKey, openbuttIcon, IC_ABUT,
+ (wButtonCallBack_p) wMenuPopupShow,
+ (void*) buttonGroupPopupM);
newButtonGroup = TRUE;
- commandsSubmenu = wMenuMenuCreate( menu, "", buttonGroupMenuTitle );
- popup1Submenu = wMenuMenuCreate( ((options&IC_POPUP2)?popup1aM:popup1M), "", buttonGroupMenuTitle );
- popup2Submenu = wMenuMenuCreate( ((options&IC_POPUP2)?popup2aM:popup2M), "", buttonGroupMenuTitle );
+ commandsSubmenu = wMenuMenuCreate(menu, "", buttonGroupMenuTitle);
+ if (options & IC_POPUP2) {
+ popup1Submenu = wMenuMenuCreate(popup1aM, "", buttonGroupMenuTitle);
+ popup2Submenu = wMenuMenuCreate(popup2aM, "", buttonGroupMenuTitle);
+ } else if (options & IC_POPUP3) {
+ popup1Submenu= wMenuMenuCreate(popup1mM, "", buttonGroupMenuTitle);
+ popup2Submenu = wMenuMenuCreate(popup2mM, "", buttonGroupMenuTitle);
+
+ } else {
+ popup1Submenu = wMenuMenuCreate(popup1M, "", buttonGroupMenuTitle);
+ popup2Submenu = wMenuMenuCreate(popup2M, "", buttonGroupMenuTitle);
+ }
}
}
- cmdInx = AddCommand( command, helpKey, nameStr, icon, reqLevel, options, acclKey, context );
+ cmdInx = AddCommand(command, helpKey, nameStr, icon, reqLevel, options,
+ acclKey, context);
commandList[cmdInx].buttInx = buttInx;
if (nameStr[0] == '\0')
return cmdInx;
- if (commandList[cmdInx].options&IC_STICKY) {
- if ( buttonGroupPopupM==NULL || newButtonGroup ) {
- if ( stickyCnt > 32 )
- AbortProg( "stickyCnt>32" );
+ if (commandList[cmdInx].options & IC_STICKY) {
+ if (buttonGroupPopupM == NULL || newButtonGroup) {
+ if (stickyCnt > 32)
+ AbortProg("stickyCnt>32");
stickyCnt++;
}
- if ( buttonGroupPopupM==NULL) {
- stickyLabels[stickyCnt-1] = nameStr;
+ if (buttonGroupPopupM == NULL) {
+ stickyLabels[stickyCnt - 1] = nameStr;
} else {
- stickyLabels[stickyCnt-1] = buttonGroupStickyLabel;
+ stickyLabels[stickyCnt - 1] = buttonGroupStickyLabel;
}
stickyLabels[stickyCnt] = NULL;
- commandList[cmdInx].stickyMask = 1L<<(stickyCnt-1);
+ long stickyMask = 1L<<(stickyCnt-1);
+ commandList[cmdInx].stickyMask = stickyMask;
+ if ( ( commandList[cmdInx].options & IC_INITNOTSTICKY ) == 0 )
+ stickySet |= stickyMask;
}
- if ( buttonGroupPopupM ) {
- commandList[cmdInx].menu[0] =
- wMenuPushCreate( buttonGroupPopupM, helpKey, GetBalloonHelpStr(helpKey), 0, DoCommandB, (void*)(intptr_t)cmdInx );
+ if (buttonGroupPopupM) {
+ commandList[cmdInx].menu[0] = wMenuPushCreate(buttonGroupPopupM,
+ helpKey, GetBalloonHelpStr(helpKey), 0, DoCommandB,
+ (void*) (intptr_t) cmdInx);
tm = commandsSubmenu;
p1m = popup1Submenu;
p2m = popup2Submenu;
} else {
tm = menu;
- p1m = (options&IC_POPUP2)?popup1aM:popup1M;
- p2m = (options&IC_POPUP2)?popup2aM:popup2M;
- }
- commandList[cmdInx].menu[1] =
- wMenuPushCreate( tm, helpKey, nameStr, acclKey, DoCommandB, (void*)(intptr_t)cmdInx );
- if ( (options & (IC_POPUP|IC_POPUP2)) ) {
- if ( !(options & IC_SELECTED) ) {
- commandList[cmdInx].menu[2] =
- wMenuPushCreate( p1m, helpKey, nameStr, 0, DoCommandB, (void*)(intptr_t)cmdInx );
+ p1m = (options & IC_POPUP2) ? popup1aM : (options & IC_POPUP3) ? popup1mM : popup1M;
+ p2m = (options & IC_POPUP2) ? popup2aM : (options & IC_POPUP3) ? popup2mM : popup2M;
+ }
+ commandList[cmdInx].menu[1] = wMenuPushCreate(tm, helpKey, nameStr, acclKey,
+ DoCommandB, (void*) (intptr_t) cmdInx);
+ if ((options & (IC_POPUP | IC_POPUP2 | IC_POPUP3))) {
+ if (!(options & IC_SELECTED)) {
+ commandList[cmdInx].menu[2] = wMenuPushCreate(p1m, helpKey, nameStr,
+ 0, DoCommandB, (void*) (intptr_t) cmdInx);
}
- commandList[cmdInx].menu[3] =
- wMenuPushCreate( p2m, helpKey, nameStr, 0, DoCommandB, (void*)(intptr_t)cmdInx );
+ commandList[cmdInx].menu[3] = wMenuPushCreate(p2m, helpKey, nameStr, 0,
+ DoCommandB, (void*) (intptr_t) cmdInx);
}
return cmdInx;
}
-
-EXPORT wIndex_t InitCommand(
- wMenu_p menu,
- procCommand_t command,
- char * nameStr,
- char * bits,
- int reqLevel,
- long options,
- long acclKey )
-{
+EXPORT wIndex_t InitCommand(wMenu_p menu, procCommand_t command, char * nameStr,
+ char * bits, int reqLevel, long options, long acclKey) {
char helpKey[STR_SHORT_SIZE];
wIcon_p icon = NULL;
if (bits)
- icon = wIconCreateBitMap( 16, 16, bits, wDrawColorBlack );
- strcpy( helpKey, "cmd" );
- strcat( helpKey, nameStr );
- return AddMenuButton( menu, command, helpKey, _(nameStr), icon, reqLevel, options, acclKey, NULL );
+ icon = wIconCreateBitMap(16, 16, bits, wDrawColorBlack);
+ strcpy(helpKey, "cmd");
+ strcat(helpKey, nameStr);
+ return AddMenuButton(menu, command, helpKey, _(nameStr), icon, reqLevel,
+ options, acclKey, NULL);
}
/*--------------------------------------------------------------------*/
-EXPORT void PlaybackCommand(
- char * line,
- wIndex_t lineNum )
-{
+EXPORT void PlaybackCommand(char * line, wIndex_t lineNum) {
wIndex_t inx;
wIndex_t buttInx;
int len1, len2;
- len1 = strlen(line+8);
- for (inx=0;inx<commandCnt;inx++) {
- len2 = strlen(commandList[inx].helpKey+3);
- if (len1 == len2 && strncmp( line+8, commandList[inx].helpKey+3, len2 ) == 0) {
+ len1 = strlen(line + 8);
+ for (inx = 0; inx < commandCnt; inx++) {
+ len2 = strlen(commandList[inx].helpKey + 3);
+ if (len1 == len2
+ && strncmp(line + 8, commandList[inx].helpKey + 3, len2) == 0) {
break;
}
}
if (inx >= commandCnt) {
- fprintf(stderr, "Unknown playback COMMAND command %d : %s\n",
- lineNum, line );
+ fprintf(stderr, "Unknown playback COMMAND command %d : %s\n", lineNum,
+ line);
} else {
wPos_t cmdX, cmdY;
- if ((buttInx=commandList[inx].buttInx)>=0) {
- cmdX = buttonList[buttInx].x+17;
- cmdY = toolbarHeight - (buttonList[buttInx].y+17) +
- (wPos_t)(mainD.size.y/mainD.scale*mainD.dpi) + 30;
- MovePlaybackCursor( &mainD, cmdX, cmdY );
+ if ((buttInx = commandList[inx].buttInx) >= 0) {
+ cmdX = buttonList[buttInx].x + 17;
+ cmdY = toolbarHeight - (buttonList[buttInx].y + 17)
+ + (wPos_t) (mainD.size.y / mainD.scale * mainD.dpi) + 30;
+ MovePlaybackCursor(&mainD, cmdX, cmdY,TRUE,buttonList[buttInx].control);
}
- if (strcmp( line+8, "Undo") == 0) {
- if (buttInx>0 && playbackTimer == 0) {
- wButtonSetBusy( (wButton_p)buttonList[buttInx].control, TRUE );
+ if (strcmp(line + 8, "Undo") == 0) {
+ if (buttInx > 0 && playbackTimer == 0) {
+ wButtonSetBusy((wButton_p) buttonList[buttInx].control, TRUE);
wFlush();
- wPause( 500 );
- wButtonSetBusy( (wButton_p)buttonList[buttInx].control, FALSE );
+ wPause(500);
+ wButtonSetBusy((wButton_p) buttonList[buttInx].control, FALSE);
wFlush();
}
UndoUndo();
- } else if (strcmp( line+8, "Redo") == 0) {
- if (buttInx>=0 && playbackTimer == 0) {
- wButtonSetBusy( (wButton_p)buttonList[buttInx].control, TRUE );
+ } else if (strcmp(line + 8, "Redo") == 0) {
+ if (buttInx >= 0 && playbackTimer == 0) {
+ wButtonSetBusy((wButton_p) buttonList[buttInx].control, TRUE);
wFlush();
- wPause( 500 );
- wButtonSetBusy( (wButton_p)buttonList[buttInx].control, FALSE );
+ wPause(500);
+ wButtonSetBusy((wButton_p) buttonList[buttInx].control, FALSE);
wFlush();
}
UndoRedo();
} else {
- if ( buttInx>=0 &&
- playbackTimer == 0 ) {
- wButtonSetBusy( (wButton_p)buttonList[buttInx].control, TRUE );
+ if (buttInx >= 0 && playbackTimer == 0) {
+ wButtonSetBusy((wButton_p) buttonList[buttInx].control, TRUE);
wFlush();
- wPause( 500 );
- wButtonSetBusy( (wButton_p)buttonList[buttInx].control, FALSE );
+ wPause(500);
+ wButtonSetBusy((wButton_p) buttonList[buttInx].control, FALSE);
wFlush();
}
- DoCommandB( (void*)(intptr_t)inx );
+ DoCommandB((void*) (intptr_t) inx);
}
}
}
-
/*--------------------------------------------------------------------*/
typedef struct {
- char * label;
- wMenu_p menu;
- } menuTrace_t, *menuTrace_p;
+ char * label;
+ wMenu_p menu;
+} menuTrace_t, *menuTrace_p;
static dynArr_t menuTrace_da;
#define menuTrace(N) DYNARR_N( menuTrace_t, menuTrace_da, N )
-
-static void DoMenuTrace(
- wMenu_p menu,
- const char * label,
- void * data )
-{
+static void DoMenuTrace(wMenu_p menu, const char * label, void * data) {
/*printf( "MENUTRACE: %s/%s\n", (char*)data, label );*/
if (recordF) {
- fprintf( recordF, "MOUSE 1 %0.3f %0.3f\n", oldMarker.x, oldMarker.y );
- fprintf( recordF, "MENU %0.3f %0.3f \"%s\" \"%s\"\n", oldMarker.x, oldMarker.y, (char*)data, label );
+ fprintf(recordF, "MOUSE 1 %0.3f %0.3f\n", oldMarker.x, oldMarker.y);
+ fprintf(recordF, "MENU %0.3f %0.3f \"%s\" \"%s\"\n", oldMarker.x,
+ oldMarker.y, (char*) data, label);
}
}
-
-EXPORT wMenu_p MenuRegister( char * label )
-{
+EXPORT wMenu_p MenuRegister(char * label) {
wMenu_p m;
menuTrace_p mt;
- m = wMenuPopupCreate( mainW, label );
- DYNARR_APPEND( menuTrace_t, menuTrace_da, 10 );
- mt = &menuTrace( menuTrace_da.cnt-1 );
+ m = wMenuPopupCreate(mainW, label);
+ DYNARR_APPEND(menuTrace_t, menuTrace_da, 10);
+ mt = &menuTrace(menuTrace_da.cnt - 1);
mt->label = strdup(label);
mt->menu = m;
- wMenuSetTraceCallBack( m, DoMenuTrace, mt->label );
+ wMenuSetTraceCallBack(m, DoMenuTrace, mt->label);
return m;
}
-
-void MenuPlayback( char * line )
-{
- char * menuName, * itemName;
+void MenuPlayback(char * line) {
+ char * menuName, *itemName;
coOrd pos;
wPos_t x, y;
menuTrace_p mt;
- if (!GetArgs( line, "pqq", &pos, &menuName, &itemName ))
+ if (!GetArgs(line, "pqq", &pos, &menuName, &itemName))
return;
- for ( mt=&menuTrace(0); mt<&menuTrace(menuTrace_da.cnt); mt++ ) {
- if ( strcmp( mt->label, menuName ) == 0 ) {
- mainD.CoOrd2Pix( &mainD, pos, &x, &y );
- MovePlaybackCursor( &mainD, x, y );
+ for (mt = &menuTrace(0); mt < &menuTrace(menuTrace_da.cnt); mt++) {
+ if (strcmp(mt->label, menuName) == 0) {
+ mainD.CoOrd2Pix(&mainD, pos, &x, &y);
+ MovePlaybackCursor(&mainD, x, y, FALSE, NULL);
oldMarker = cmdMenuPos = pos;
- wMenuAction( mt->menu, _(itemName) );
+ wMenuAction(mt->menu, _(itemName));
return;
}
}
- AbortProg( "menuPlayback: %s not found", menuName );
+ AbortProg("menuPlayback: %s not found", menuName);
}
/*--------------------------------------------------------------------*/
-
static wWin_p stickyW;
-static void StickyOk( void * );
-static paramData_t stickyPLs[] = {
- { PD_TOGGLE, &stickySet, "set", 0, stickyLabels } };
-static paramGroup_t stickyPG = { "sticky", PGO_RECORD, stickyPLs, sizeof stickyPLs/sizeof stickyPLs[0] };
-
+static void StickyOk(void *);
+static paramData_t stickyPLs[] = { { PD_TOGGLE, &stickySet, "set", 0,
+ stickyLabels } };
+static paramGroup_t stickyPG = { "sticky", PGO_RECORD, stickyPLs,
+ sizeof stickyPLs / sizeof stickyPLs[0] };
-static void StickyOk( void * junk )
-{
- wHide( stickyW );
+static void StickyOk(void * junk) {
+ wHide(stickyW);
}
-static void DoSticky( void )
-{
- if ( !stickyW )
- stickyW = ParamCreateDialog( &stickyPG, MakeWindowTitle(_("Sticky Commands")), _("Ok"), StickyOk, NULL, TRUE, NULL, 0, NULL );
- ParamLoadControls( &stickyPG );
- wShow( stickyW );
+static void DoSticky(void) {
+ if (!stickyW)
+ stickyW = ParamCreateDialog(&stickyPG,
+ MakeWindowTitle(_("Sticky Commands")), _("Ok"), StickyOk, wHide,
+ TRUE, NULL, 0, NULL);
+ ParamLoadControls(&stickyPG);
+ wShow(stickyW);
}
/*--------------------------------------------------------------------*/
@@ -1737,43 +1859,21 @@ static void DoSticky( void )
* specified in the following array.
* Note: text and choices must be given in the same order.
*/
-static char *AllToolbarLabels[] = {
- N_("File Buttons"),
- N_("Zoom Buttons"),
- N_("Undo Buttons"),
- N_("Easement Button"),
- N_("SnapGrid Buttons"),
- N_("Create Track Buttons"),
- N_("Layout Control Elements"),
- N_("Modify Track Buttons"),
- N_("Properties/Select"),
- N_("Track Group Buttons"),
- N_("Train Group Buttons"),
- N_("Create Misc Buttons"),
- N_("Ruler Button"),
- N_("Layer Buttons"),
- N_("Hot Bar"),
- NULL };
-static long AllToolbarMasks[] = {
- 1<<BG_FILE,
- 1<<BG_ZOOM,
- 1<<BG_UNDO,
- 1<<BG_EASE,
- 1<<BG_SNAP,
- 1<<BG_TRKCRT,
- 1<<BG_CONTROL,
- 1<<BG_TRKMOD,
- 1<<BG_SELECT,
- 1<<BG_TRKGRP,
- 1<<BG_TRAIN,
- 1<<BG_MISCCRT,
- 1<<BG_RULER,
- 1<<BG_LAYER,
- 1<<BG_HOTBAR};
-
-static void ToolbarAction( wBool_t set, void * data )
-{
- long mask = (long)data;
+static char *AllToolbarLabels[] = { N_("File Buttons"), N_("Import/Export Buttons"), N_("Zoom Buttons"), N_(
+ "Undo Buttons"), N_("Easement Button"), N_("SnapGrid Buttons"), N_(
+ "Create Track Buttons"), N_("Layout Control Elements"), N_(
+ "Modify Track Buttons"), N_("Properties/Select"), N_(
+ "Track Group Buttons"), N_("Train Group Buttons"), N_(
+ "Create Misc Buttons"), N_("Ruler Button"), N_("Layer Buttons"), N_(
+ "Hot Bar"),
+NULL };
+static long AllToolbarMasks[] = { 1 << BG_FILE, 1<< BG_EXPORTIMPORT, 1 << BG_ZOOM, 1 << BG_UNDO, 1
+ << BG_EASE, 1 << BG_SNAP, 1 << BG_TRKCRT, 1 << BG_CONTROL, 1
+ << BG_TRKMOD, 1 << BG_SELECT, 1 << BG_TRKGRP, 1 << BG_TRAIN, 1
+ << BG_MISCCRT, 1 << BG_RULER, 1 << BG_LAYER, 1 << BG_HOTBAR };
+
+static void ToolbarAction(wBool_t set, void * data) {
+ long mask = (long) data;
if (set)
toolbarSet |= mask;
else
@@ -1781,7 +1881,8 @@ static void ToolbarAction( wBool_t set, void * data )
wPrefSetInteger( "misc", "toolbarset", toolbarSet );
MainProc( mainW, wResize_e, NULL, NULL );
if (recordF)
- fprintf( recordF, "PARAMETER %s %s %ld", "misc", "toolbarset", toolbarSet );
+ fprintf(recordF, "PARAMETER %s %s %ld", "misc", "toolbarset",
+ toolbarSet);
}
/**
@@ -1791,19 +1892,19 @@ static void ToolbarAction( wBool_t set, void * data )
* \param toolbarM IN menu to which the toogles will be added
*/
-static void CreateToolbarM( wMenu_p toolbarM )
-{
+static void CreateToolbarM(wMenu_p toolbarM) {
int inx, cnt;
long *masks;
char **labels;
wBool_t set;
- cnt = sizeof(AllToolbarMasks)/sizeof(AllToolbarMasks[0]);
+ cnt = sizeof(AllToolbarMasks) / sizeof(AllToolbarMasks[0]);
masks = AllToolbarMasks;
labels = AllToolbarLabels;
- for (inx=0; inx<cnt; inx++,masks++,labels++) {
- set = ( toolbarSet & *masks ) != 0;
- wMenuToggleCreate( toolbarM, "toolbarM", _(*labels), 0, set, ToolbarAction, (void*)*masks );
+ for (inx = 0; inx < cnt; inx++, masks++, labels++) {
+ set = (toolbarSet & *masks) != 0;
+ wMenuToggleCreate(toolbarM, "toolbarM", _(*labels), 0, set,
+ ToolbarAction, (void*) *masks);
}
}
@@ -1812,157 +1913,148 @@ static void CreateToolbarM( wMenu_p toolbarM )
static wWin_p addElevW;
#define addElevF (wFloat_p)addElevPD.control
EXPORT DIST_T addElevValueV;
-static void DoAddElev( void * );
+static void DoAddElev(void *);
static paramFloatRange_t rn1000_1000 = { -1000.0, 1000.0 };
-static paramData_t addElevPLs[] = {
- { PD_FLOAT, &addElevValueV, "value", PDO_DIM, &rn1000_1000, NULL, 0 } };
-static paramGroup_t addElevPG = { "addElev", 0, addElevPLs, sizeof addElevPLs/sizeof addElevPLs[0] };
-
+static paramData_t addElevPLs[] = { { PD_FLOAT, &addElevValueV, "value",
+ PDO_DIM, &rn1000_1000, NULL, 0 } };
+static paramGroup_t addElevPG = { "addElev", 0, addElevPLs, sizeof addElevPLs
+ / sizeof addElevPLs[0] };
-static void DoAddElev( void * junk )
-{
- ParamLoadData( &addElevPG );
- AddElevations( addElevValueV );
- wHide( addElevW );
+static void DoAddElev(void * junk) {
+ ParamLoadData(&addElevPG);
+ AddElevations(addElevValueV);
+ wHide(addElevW);
}
-
-static void ShowAddElevations( void )
-{
- if ( selectedTrackCount <= 0 ) {
- ErrorMessage( MSG_NO_SELECTED_TRK );
+static void ShowAddElevations(void) {
+ if (selectedTrackCount <= 0) {
+ ErrorMessage(MSG_NO_SELECTED_TRK);
return;
}
if (addElevW == NULL)
- addElevW = ParamCreateDialog( &addElevPG, MakeWindowTitle(_("Change Elevations")), _("Change"), DoAddElev, wHide, FALSE, NULL, 0, NULL );
- wShow( addElevW );
+ addElevW = ParamCreateDialog(&addElevPG,
+ MakeWindowTitle(_("Change Elevations")), _("Change"), DoAddElev,
+ wHide, FALSE, NULL, 0, NULL);
+ wShow(addElevW);
}
/*--------------------------------------------------------------------*/
static wWin_p rotateW;
static wWin_p moveW;
-static long rotateValue;
+static double rotateValue;
static coOrd moveValue;
static rotateDialogCallBack_t rotateDialogCallBack;
static moveDialogCallBack_t moveDialogCallBack;
-static void RotateEnterOk( void * );
-
-static paramIntegerRange_t rn360_360 = { -360, 360, 80 };
-static paramData_t rotatePLs[] = {
- { PD_LONG, &rotateValue, "rotate", PDO_ANGLE, &rn360_360, N_("Angle:") } };
-static paramGroup_t rotatePG = { "rotate", 0, rotatePLs, sizeof rotatePLs/sizeof rotatePLs[0] };
-
-static paramFloatRange_t r_1000_1000 = { -1000.0, 1000.0, 80 };
-static void MoveEnterOk( void * );
-static paramData_t movePLs[] = {
- { PD_FLOAT, &moveValue.x, "moveX", PDO_DIM, &r_1000_1000, N_("Move X:") },
- { PD_FLOAT, &moveValue.y, "moveY", PDO_DIM, &r_1000_1000, N_("Move Y:") } };
-static paramGroup_t movePG = { "move", 0, movePLs, sizeof movePLs/sizeof movePLs[0] };
-
-
-EXPORT void StartRotateDialog( rotateDialogCallBack_t func )
-{
- if ( rotateW == NULL )
- rotateW = ParamCreateDialog( &rotatePG, MakeWindowTitle(_("Rotate")), _("Ok"), RotateEnterOk, wHide, FALSE, NULL, 0, NULL );
- ParamLoadControls( &rotatePG );
+static void RotateEnterOk(void *);
+
+static paramFloatRange_t rn360_360 = { -360.0, 360.0, 80.0 };
+static paramData_t rotatePLs[] = { { PD_FLOAT, &rotateValue, "rotate", PDO_ANGLE,
+ &rn360_360, N_("Angle:") } };
+static paramGroup_t rotatePG = { "rotate", 0, rotatePLs, sizeof rotatePLs
+ / sizeof rotatePLs[0] };
+
+static paramFloatRange_t r_1000_1000 = { -1000.0, 1000.0, 80 };
+static void MoveEnterOk(void *);
+static paramData_t movePLs[] = { { PD_FLOAT, &moveValue.x, "moveX", PDO_DIM,
+ &r_1000_1000, N_("Move X:") }, { PD_FLOAT, &moveValue.y, "moveY",
+ PDO_DIM, &r_1000_1000, N_("Move Y:") } };
+static paramGroup_t movePG = { "move", 0, movePLs, sizeof movePLs
+ / sizeof movePLs[0] };
+
+EXPORT void StartRotateDialog(rotateDialogCallBack_t func) {
+ if (rotateW == NULL)
+ rotateW = ParamCreateDialog(&rotatePG, MakeWindowTitle(_("Rotate")),
+ _("Ok"), RotateEnterOk, wHide, FALSE, NULL, 0, NULL);
+ ParamLoadControls(&rotatePG);
rotateDialogCallBack = func;
- wShow( rotateW );
+ wShow(rotateW);
}
-EXPORT void StartMoveDialog( moveDialogCallBack_t func )
-{
- if ( moveW == NULL )
- moveW = ParamCreateDialog( &movePG, MakeWindowTitle(_("Move")), _("Ok"), MoveEnterOk, wHide, FALSE, NULL, 0, NULL );
- ParamLoadControls( &movePG );
+EXPORT void StartMoveDialog(moveDialogCallBack_t func) {
+ if (moveW == NULL)
+ moveW = ParamCreateDialog(&movePG, MakeWindowTitle(_("Move")), _("Ok"),
+ MoveEnterOk, wHide, FALSE, NULL, 0, NULL);
+ ParamLoadControls(&movePG);
moveDialogCallBack = func;
moveValue = zero;
- wShow( moveW );
+ wShow(moveW);
}
-static void MoveEnterOk( void * junk )
-{
- ParamLoadData( &movePG );
- moveDialogCallBack( (void*) &moveValue );
- wHide( moveW );
+static void MoveEnterOk(void * junk) {
+ ParamLoadData(&movePG);
+ moveDialogCallBack((void*) &moveValue);
+ wHide(moveW);
}
-static void RotateEnterOk( void * junk )
-{
- ParamLoadData( &rotatePG );
- if (angleSystem==ANGLE_POLAR)
- rotateDialogCallBack( (void*)rotateValue );
+static void RotateEnterOk(void * junk) {
+ ParamLoadData(&rotatePG);
+ if (angleSystem == ANGLE_POLAR)
+ rotateDialogCallBack((void*) (long)(rotateValue*1000));
else
- rotateDialogCallBack( (void*)-rotateValue );
- wHide( rotateW );
+ rotateDialogCallBack((void*) (long)(-rotateValue*1000));
+ wHide(rotateW);
}
-
-static void RotateDialogInit( void )
-{
- ParamRegister( &rotatePG );
+static void RotateDialogInit(void) {
+ ParamRegister(&rotatePG);
}
-static void MoveDialogInit (void)
-{
- ParamRegister( &movePG );
+static void MoveDialogInit(void) {
+ ParamRegister(&movePG);
}
-
-EXPORT void AddMoveMenu(
- wMenu_p m,
- moveDialogCallBack_t func ) {
- wMenuPushCreate( m, "", _("Enter Move ..."), 0, (wMenuCallBack_p)StartMoveDialog, (void*)func );
+EXPORT void AddMoveMenu(wMenu_p m, moveDialogCallBack_t func) {
+ wMenuPushCreate(m, "", _("Enter Move ..."), 0,
+ (wMenuCallBack_p) StartMoveDialog, (void*) func);
}
-EXPORT void AddRotateMenu(
- wMenu_p m,
- rotateDialogCallBack_t func )
-{
- wMenuPushCreate( m, "", _("180 "), 0, func, (void*)180 );
- wMenuPushCreate( m, "", _("90 CW"), 0, func, (void*)(long)(90) );
- wMenuPushCreate( m, "", _("45 CW"), 0, func, (void*)(long)(45) );
- wMenuPushCreate( m, "", _("30 CW"), 0, func, (void*)(long)(30) );
- wMenuPushCreate( m, "", _("15 CW"), 0, func, (void*)(long)(15) );
- wMenuPushCreate( m, "", _("15 CCW"), 0, func, (void*)(long)(360-15) );
- wMenuPushCreate( m, "", _("30 CCW"), 0, func, (void*)(long)(360-30) );
- wMenuPushCreate( m, "", _("45 CCW"), 0, func, (void*)(long)(360-45) );
- wMenuPushCreate( m, "", _("90 CCW"), 0, func, (void*)(long)(360-90) );
- wMenuPushCreate( m, "", _("Enter Angle ..."), 0, (wMenuCallBack_p)StartRotateDialog, (void*)func );
+//All values multipled by 100 to support decimal points from PD_FLOAT
+EXPORT void AddRotateMenu(wMenu_p m, rotateDialogCallBack_t func) {
+ wMenuPushCreate(m, "", _("180 "), 0, func, (void*) 180000);
+ wMenuPushCreate(m, "", _("90 CW"), 0, func, (void*) (long) (90000));
+ wMenuPushCreate(m, "", _("45 CW"), 0, func, (void*) (long) (45000));
+ wMenuPushCreate(m, "", _("30 CW"), 0, func, (void*) (long) (30000));
+ wMenuPushCreate(m, "", _("15 CW"), 0, func, (void*) (long) (15000));
+ wMenuPushCreate(m, "", _("15 CCW"), 0, func, (void*) (long) (360000 - 15000));
+ wMenuPushCreate(m, "", _("30 CCW"), 0, func, (void*) (long) (360000 - 30000));
+ wMenuPushCreate(m, "", _("45 CCW"), 0, func, (void*) (long) (360000 - 45000));
+ wMenuPushCreate(m, "", _("90 CCW"), 0, func, (void*) (long) (360000 - 90000));
+ wMenuPushCreate(m, "", _("Enter Angle ..."), 0,
+ (wMenuCallBack_p) StartRotateDialog, (void*) func);
}
-
+
/*****************************************************************************
*
* INITIALIZATON
*
*/
-
static wWin_p debugW;
static int debugCnt = 0;
static paramIntegerRange_t r0_100 = { 0, 100, 80 };
-static void DebugOk( void * junk );
+static void DebugOk(void * junk);
static paramData_t debugPLs[30];
static long debug_values[30];
static int debug_index[30];
+
static paramGroup_t debugPG = { "debug", 0, debugPLs, 0 };
-static void DebugOk( void * junk )
-{
+static void DebugOk(void * junk) {
for (int i = 0; i<debugCnt;i++) {
- logTable(debug_index[i]).level = debug_values[i];
+ logTable(debug_index[i]).level = debug_values[i];
}
- wHide( debugW );
+ wHide(debugW);
}
-static void CreateDebugW( void )
-{
+static void CreateDebugW(void) {
debugPG.paramCnt = debugCnt;
- ParamRegister( &debugPG );
- debugW = ParamCreateDialog( &debugPG, MakeWindowTitle(_("Debug")), _("Ok"), DebugOk, NULL, FALSE, NULL, 0, NULL );
+ ParamRegister(&debugPG);
+ debugW = ParamCreateDialog(&debugPG, MakeWindowTitle(_("Debug")), _("Ok"),
+ DebugOk, wHide, FALSE, NULL, 0, NULL);
wHide(debugW);
}
@@ -1995,108 +2087,77 @@ EXPORT void DebugInit(void) {
wShow(debugW);
}
-EXPORT void InitDebug(
- char * label,
- long * valueP)
-{
- if ( debugCnt >= sizeof debugPLs/sizeof debugPLs[0] )
- AbortProg( "Too many debug flags" );
- memset( &debugPLs[debugCnt], 0, sizeof debugPLs[debugCnt] );
+
+EXPORT void InitDebug(char * label, long * valueP) {
+ if (debugCnt >= sizeof debugPLs / sizeof debugPLs[0])
+ AbortProg("Too many debug flags");
+ memset(&debugPLs[debugCnt], 0, sizeof debugPLs[debugCnt]);
debugPLs[debugCnt].type = PD_LONG;
debugPLs[debugCnt].valueP = valueP;
debugPLs[debugCnt].nameStr = label;
debugPLs[debugCnt].winData = &r0_100;
debugPLs[debugCnt].winLabel = label;
debugCnt++;
-
}
+void RecomputeElevations(void);
-void RecomputeElevations( void );
-
-static void MiscMenuItemCreate(
- wMenu_p m1,
- wMenu_p m2,
- char * name,
- char * label,
- long acclKey,
- void * func,
- long option,
- void * context )
-{
+static void MiscMenuItemCreate(wMenu_p m1, wMenu_p m2, char * name,
+ char * label, long acclKey, void * func, long option, void * context) {
wMenuPush_p mp;
- mp = wMenuPushCreate( m1, name, label, acclKey, ParamMenuPush, &menuPLs[menuPG.paramCnt] );
- if ( m2 )
- wMenuPushCreate( m2, name, label, acclKey, ParamMenuPush, &menuPLs[menuPG.paramCnt] );
- menuPLs[menuPG.paramCnt].control = (wControl_p)mp;
+ mp = wMenuPushCreate(m1, name, label, acclKey, ParamMenuPush,
+ &menuPLs[menuPG.paramCnt]);
+ if (m2)
+ wMenuPushCreate(m2, name, label, acclKey, ParamMenuPush,
+ &menuPLs[menuPG.paramCnt]);
+ menuPLs[menuPG.paramCnt].control = (wControl_p) mp;
menuPLs[menuPG.paramCnt].type = PD_MENUITEM;
menuPLs[menuPG.paramCnt].valueP = func;
menuPLs[menuPG.paramCnt].nameStr = name;
menuPLs[menuPG.paramCnt].option = option;
menuPLs[menuPG.paramCnt].context = context;
- if ( name ) GetBalloonHelpStr( name );
+ if (name)
+ GetBalloonHelpStr(name);
menuPG.paramCnt++;
}
+static char * accelKeyNames[] = { "Del", "Ins", "Home", "End", "Pgup", "Pgdn",
+ "Up", "Down", "Right", "Left", "Back", "F1", "F2", "F3", "F4", "F5",
+ "F6", "F7", "F8", "F9", "F10", "F11", "F12", "NumpadAdd", "NumpadSub" };
-static char * accelKeyNames[] = {
- "Del",
- "Ins",
- "Home",
- "End",
- "Pgup",
- "Pgdn",
- "Up",
- "Down",
- "Right",
- "Left",
- "Back",
- "F1",
- "F2",
- "F3",
- "F4",
- "F5",
- "F6",
- "F7",
- "F8",
- "F9",
- "F10",
- "F11",
- "F12",
- "NumpadAdd",
- "NumpadSub"};
-
-static void SetAccelKey(
- char * prefName,
- wAccelKey_e key,
- int mode,
- wAccelKeyCallBack_p func,
- void * context )
-{
- int mode1 = 0;
- int inx;
- const char * prefValue = wPrefGetString( "accelKey", prefName );
- if ( prefValue != NULL ) {
- while ( prefValue[1] == '-' ) {
- switch ( prefValue[0] ) {
- case 'S': mode1 |= WKEY_SHIFT; break;
- case 'C': mode1 |= WKEY_CTRL; break;
- case 'A': mode1 |= WKEY_ALT; break;
- default:
- ;
- }
- prefValue += 2;
- }
- for ( inx=0; inx<sizeof accelKeyNames/sizeof accelKeyNames[0]; inx++ ) {
- if ( strcmp( prefValue, accelKeyNames[inx] ) == 0 ) {
- key = inx+1;
- mode = mode1;
- break;
- }
- }
- }
- wAttachAccelKey( key, mode, func, context );
+static void SetAccelKey(char * prefName, wAccelKey_e key, int mode,
+ wAccelKeyCallBack_p func, void * context) {
+ int mode1 = 0;
+ int inx;
+ const char * prefValue = wPrefGetString("accelKey", prefName);
+ if (prefValue != NULL) {
+ while (prefValue[1] == '-') {
+ switch (prefValue[0]) {
+ case 'S':
+ mode1 |= WKEY_SHIFT;
+ break;
+ case 'C':
+ mode1 |= WKEY_CTRL;
+ break;
+ case 'A':
+ mode1 |= WKEY_ALT;
+ break;
+ default:
+ ;
+ }
+ prefValue += 2;
+ }
+ for (inx = 0; inx < sizeof accelKeyNames / sizeof accelKeyNames[0];
+ inx++) {
+ if (strcmp(prefValue, accelKeyNames[inx]) == 0) {
+ key = inx + 1;
+ mode = mode1;
+ break;
+ }
+ }
+ }
+ wAttachAccelKey(key, mode, func, context);
}
#include "bitmaps/zoomin.xpm"
@@ -2105,130 +2166,231 @@ static void SetAccelKey(
#include "bitmaps/edit-undo.xpm"
#include "bitmaps/edit-redo.xpm"
#include "bitmaps/partlist.xpm"
-#include "bitmaps/export.xpm"
-#include "bitmaps/import.xpm"
+#include "bitmaps/document-export.xpm"
+#include "bitmaps/document-exportdxf.xpm"
+#include "bitmaps/document-import.xpm"
+#include "bitmaps/document-importmod.xpm"
#include "bitmaps/document-new.xpm"
#include "bitmaps/document-save.xpm"
#include "bitmaps/document-open.xpm"
#include "bitmaps/document-print.xpm"
#include "bitmaps/map.xpm"
+#include "bitmaps/magnet.xpm"
-static void CreateMenus( void )
-{
- wMenu_p fileM, editM, viewM, optionM, windowM, macroM, helpM, toolbarM, messageListM, manageM, addM, changeM, drawM;
+static void CreateMenus(void) {
+ wMenu_p fileM, editM, viewM, optionM, windowM, macroM, helpM, toolbarM,
+ messageListM, manageM, addM, changeM, drawM;
wMenu_p zoomM, zoomSubM;
wMenuPush_p zoomInM, zoomOutM;
- fileM = wMenuBarAdd( mainW, "menuFile", _("&File") );
- editM = wMenuBarAdd( mainW, "menuEdit", _("&Edit") );
- viewM = wMenuBarAdd( mainW, "menuView", _("&View") );
- addM = wMenuBarAdd( mainW, "menuAdd", _("&Add") );
- changeM = wMenuBarAdd( mainW, "menuChange", _("&Change") );
- drawM = wMenuBarAdd( mainW, "menuDraw", _("&Draw") );
- manageM = wMenuBarAdd( mainW, "menuManage", _("&Manage") );
- optionM = wMenuBarAdd( mainW, "menuOption", _("&Options") );
- macroM = wMenuBarAdd( mainW, "menuMacro", _("&Macro") );
- windowM = wMenuBarAdd( mainW, "menuWindow", _("&Window") );
- helpM = wMenuBarAdd( mainW, "menuHelp", _("&Help") );
+ fileM = wMenuBarAdd(mainW, "menuFile", _("&File"));
+ editM = wMenuBarAdd(mainW, "menuEdit", _("&Edit"));
+ viewM = wMenuBarAdd(mainW, "menuView", _("&View"));
+ addM = wMenuBarAdd(mainW, "menuAdd", _("&Add"));
+ changeM = wMenuBarAdd(mainW, "menuChange", _("&Change"));
+ drawM = wMenuBarAdd(mainW, "menuDraw", _("&Draw"));
+ manageM = wMenuBarAdd(mainW, "menuManage", _("&Manage"));
+ optionM = wMenuBarAdd(mainW, "menuOption", _("&Options"));
+ macroM = wMenuBarAdd(mainW, "menuMacro", _("&Macro"));
+ windowM = wMenuBarAdd(mainW, "menuWindow", _("&Window"));
+ helpM = wMenuBarAdd(mainW, "menuHelp", _("&Help"));
/*
* POPUP MENUS
*/
-
- popup1M = wMenuPopupCreate( mainW, _("Commands") );
- popup2M = wMenuPopupCreate( mainW, _("Commands") );
- MiscMenuItemCreate( popup1M, popup2M, "cmdUndo", _("Undo"), 0, (void*)(wMenuCallBack_p)UndoUndo, 0, (void *)0 );
- MiscMenuItemCreate( popup1M, popup2M, "cmdRedo", _("Redo"), 0, (void*)(wMenuCallBack_p)UndoRedo, 0, (void *)0 );
- wMenuPushCreate( popup1M, "cmdZoomIn", _("Zoom In"), 0, (wMenuCallBack_p)DoZoomUp, (void*)1 );
- wMenuPushCreate( popup2M, "cmdZoomIn", _("Zoom In"), 0, (wMenuCallBack_p)DoZoomUp, (void*)1 );
- wMenuPushCreate( popup1M, "cmdZoomOut", _("Zoom Out"), 0, (wMenuCallBack_p)DoZoomDown, (void*)1 );
- wMenuPushCreate( popup2M, "cmdZoomOut", _("Zoom Out"), 0, (wMenuCallBack_p)DoZoomDown, (void*)1 );
- MiscMenuItemCreate( popup1M, popup2M, "cmdGridEnable", _("SnapGrid Enable"), 0, (void*)(wMenuCallBack_p)SnapGridEnable, 0, (void *)0 );
- MiscMenuItemCreate( popup1M, popup2M, "cmdGridShow", _("SnapGrid Show"), 0, (void*)(wMenuCallBack_p)SnapGridShow, 0, (void *)0 );
- MiscMenuItemCreate( popup1M, popup2M, "cmdMapShow", _("Show/Hide Map"), 0, (void*)(wMenuCallBack_p)MapWindowToggleShow, 0, (void *)0);
- wMenuSeparatorCreate( popup1M );
- wMenuSeparatorCreate( popup2M );
- MiscMenuItemCreate( popup2M, NULL, "cmdCopy", _("Copy"), 0, (void*)(wMenuCallBack_p)EditCopy, 0, (void *)0 );
- MiscMenuItemCreate( popup1M, popup2M, "cmdPaste", _("Paste"), 0, (void*)(wMenuCallBack_p)EditPaste, 0, (void *)0 );
- MiscMenuItemCreate( popup1M, popup2M, "cmdSelectAll", _("Select All"), 0, (void*)(wMenuCallBack_p)SetAllTrackSelect, 0, (void *)1 );
- MiscMenuItemCreate( popup1M, popup2M, "cmdSelectCurrentLayer", _("Select Current Layer"), 0, (void*)(wMenuCallBack_p)SelectCurrentLayer, 0, (void *)0 );
- MiscMenuItemCreate( popup2M, NULL, "cmdDeselectAll", _("Deselect All"), 0, (void*)(wMenuCallBack_p)SetAllTrackSelect, 0, (void *)0 );
- wMenuPushCreate( popup2M, "cmdMove", _("Move"), 0, (wMenuCallBack_p)DoCommandBIndirect, &moveCmdInx );
- wMenuPushCreate( popup2M, "cmdRotate", _("Rotate"), 0, (wMenuCallBack_p)DoCommandBIndirect, &rotateCmdInx );
- MiscMenuItemCreate( popup2M, NULL, "cmdTunnel", _("Tunnel"), 0, (void*)(wMenuCallBack_p)SelectTunnel, 0, (void *)0 );
- wMenuSeparatorCreate( popup1M );
- wMenuSeparatorCreate( popup2M );
- MiscMenuItemCreate( popup2M, NULL, "cmdDelete", _("Delete"), 0, (void*)(wMenuCallBack_p)SelectDelete, 0, (void *)0 );
- wMenuSeparatorCreate( popup2M );
- popup1aM = wMenuMenuCreate( popup1M, "", _("More") );
- popup2aM = wMenuMenuCreate( popup2M, "", _("More") );
+ /* Select Commands */
+ /* Select All */
+ /* Select All Current */
+
+ /* Common View Commands Menu */
+ /* Zoom In/Out */
+ /* Snap Grid Menu */
+ /* Show/Hide Map */
+ /* Show/Hide Background */
+
+ /* Selected Commands */
+ /*--------------*/
+ /* DeSelect All */
+ /* Select All */
+ /* Select All Current */
+ /*--------------*/
+ /* Quick Move */
+ /* Quick Rotate */
+ /* Quick Align */
+ /*--------------*/
+ /* Move To Current Layer */
+ /* Move/Rotate Cmds */
+ /* Cut/Paste/Delete */
+ /* Group/Un-group Selected */
+ /*----------*/
+ /* Thick/Thin */
+ /* Bridge/Tunnel */
+ /* Ties/NoTies */
+ /*-----------*/
+ /* More Commands */
+
+ popup1M = wMenuPopupCreate(mainW, _("Context Commands"));
+ popup2M = wMenuPopupCreate(mainW, _("Shift Context Commands"));
+ MiscMenuItemCreate(popup1M, popup2M, "cmdUndo", _("Undo"), 0,
+ (void*) (wMenuCallBack_p) UndoUndo, 0, (void *) 0);
+ MiscMenuItemCreate(popup1M, popup2M, "cmdRedo", _("Redo"), 0,
+ (void*) (wMenuCallBack_p) UndoRedo, 0, (void *) 0);
+ /* Zoom */
+ wMenuPushCreate(popup1M, "cmdZoomIn", _("Zoom In"), 0,
+ (wMenuCallBack_p) DoZoomUp, (void*) 1);
+ wMenuPushCreate(popup2M, "cmdZoomIn", _("Zoom In"), 0,
+ (wMenuCallBack_p) DoZoomUp, (void*) 1);
+ wMenuPushCreate(popup1M, "cmdZoomOut", _("Zoom Out"), 0,
+ (wMenuCallBack_p) DoZoomDown, (void*) 1);
+ wMenuPushCreate(popup2M, "cmdZoomOut", _("Zoom Out"), 0,
+ (wMenuCallBack_p) DoZoomDown, (void*) 1);
+ /* Display */
+ MiscMenuItemCreate(popup1M, popup2M, "cmdGridEnable", _("Enable SnapGrid"),
+ 0, (void*) (wMenuCallBack_p) SnapGridEnable, 0, (void *) 0);
+ MiscMenuItemCreate(popup1M, popup2M, "cmdGridShow", _("SnapGrid Show"), 0,
+ (void*) (wMenuCallBack_p) SnapGridShow, 0, (void *) 0);
+ MiscMenuItemCreate(popup1M, popup2M, "cmdMagneticSnap", _(" Enable Magnetic Snap"), 0,
+ (void*) (wMenuCallBack_p) MagneticSnapToggle, 0, (void *) 0);
+ MiscMenuItemCreate(popup1M, popup2M, "cmdMapShow", _("Show/Hide Map"), 0,
+ (void*) (wMenuCallBack_p) MapWindowToggleShow, 0, (void *) 0);
+ MiscMenuItemCreate(popup1M, popup2M, "cmdBackgroundShow", _("Show/Hide Background"), 0,
+ (void*) (wMenuCallBack_p) BackgroundToggleShow, 0, (void *) 0);
+ wMenuSeparatorCreate(popup1M);
+ wMenuSeparatorCreate(popup2M);
+ /* Copy/Paste */
+ MiscMenuItemCreate(popup2M, NULL, "cmdCut", _("Cut"), 0,
+ (void*) (wMenuCallBack_p) EditCut, 0, (void *) 0);
+ MiscMenuItemCreate(popup2M, NULL, "cmdCopy", _("Copy"), 0,
+ (void*) (wMenuCallBack_p) EditCopy, 0, (void *) 0);
+ MiscMenuItemCreate(popup1M, popup2M, "cmdPaste", _("Paste"), 0,
+ (void*) (wMenuCallBack_p) EditPaste, 0, (void *) 0);
+ MiscMenuItemCreate(popup2M, NULL, "cmdClone", _("Clone"), 0,
+ (void*) (wMenuCallBack_p) EditClone, 0, (void *) 0);
+ /*Select*/
+ MiscMenuItemCreate(popup1M, popup2M, "cmdSelectAll", _("Select All"), 0,
+ (void*) (wMenuCallBack_p) SetAllTrackSelect, 0, (void *) 1);
+ MiscMenuItemCreate(popup1M, popup2M, "cmdSelectCurrentLayer",
+ _("Select Current Layer"), 0,
+ (void*) (wMenuCallBack_p) SelectCurrentLayer, 0, (void *) 0);
+ MiscMenuItemCreate(popup2M, NULL, "cmdDeselectAll", _("Deselect All"), 0,
+ (void*) (wMenuCallBack_p) SetAllTrackSelect, 0, (void *) 0);
+ /* Modify */
+ wMenuPushCreate(popup2M, "cmdMove", _("Move"), 0,
+ (wMenuCallBack_p) DoCommandBIndirect, &moveCmdInx);
+ wMenuPushCreate(popup2M, "cmdRotate", _("Rotate"), 0,
+ (wMenuCallBack_p) DoCommandBIndirect, &rotateCmdInx);
+ wMenuSeparatorCreate(popup1M);
+ wMenuSeparatorCreate(popup2M);
+ MiscMenuItemCreate(popup2M, NULL, "cmdDelete", _("Delete"), 0,
+ (void*) (wMenuCallBack_p) SelectDelete, 0, (void *) 0);
+ wMenuSeparatorCreate(popup2M);
+ popup1aM = wMenuMenuCreate(popup1M, "", _("Add..."));
+ popup2aM = wMenuMenuCreate(popup2M, "", _("Add..."));
+ wMenuSeparatorCreate(popup2M);
+ wMenuSeparatorCreate(popup1M);
+ popup1mM = wMenuMenuCreate(popup1M, "", _("More..."));
+ popup2mM = wMenuMenuCreate(popup2M, "", _("More..."));
cmdGroup = BG_FILE;
- AddToolbarButton( "menuFile-clear", wIconCreatePixMap(document_new), IC_MODETRAIN_TOO, (addButtonCallBack_t)DoClear, NULL );
- AddToolbarButton( "menuFile-load", wIconCreatePixMap(document_open), IC_MODETRAIN_TOO, (addButtonCallBack_t)ChkLoad, NULL );
- AddToolbarButton( "menuFile-save", wIconCreatePixMap(document_save), IC_MODETRAIN_TOO, (addButtonCallBack_t)DoSave, NULL );
+ AddToolbarButton("menuFile-clear", wIconCreatePixMap(document_new),
+ IC_MODETRAIN_TOO, (addButtonCallBack_t) DoClear, NULL);
+ AddToolbarButton("menuFile-load", wIconCreatePixMap(document_open),
+ IC_MODETRAIN_TOO, (addButtonCallBack_t) ChkLoad, NULL);
+ AddToolbarButton("menuFile-save", wIconCreatePixMap(document_save),
+ IC_MODETRAIN_TOO, (addButtonCallBack_t) DoSave, NULL);
+
+ InitCmdExport();
cmdGroup = BG_ZOOM;
- zoomUpB = AddToolbarButton( "cmdZoomIn", wIconCreatePixMap(zoomin_xpm), IC_MODETRAIN_TOO,
- (addButtonCallBack_t)DoZoomUp, NULL );
+ zoomUpB = AddToolbarButton("cmdZoomIn", wIconCreatePixMap(zoomin_xpm),
+ IC_MODETRAIN_TOO, (addButtonCallBack_t) DoZoomUp, NULL);
- zoomM = wMenuPopupCreate( mainW, "" );
- AddToolbarButton( "cmdZoom", wIconCreatePixMap(zoom_xpm), IC_MODETRAIN_TOO, (wButtonCallBack_p)wMenuPopupShow, zoomM );
+ zoomM = wMenuPopupCreate(mainW, "");
+ AddToolbarButton("cmdZoom", wIconCreatePixMap(zoom_xpm), IC_MODETRAIN_TOO,
+ (wButtonCallBack_p) wMenuPopupShow, zoomM);
- zoomDownB = AddToolbarButton( "cmdZoomOut", wIconCreatePixMap(zoomout_xpm), IC_MODETRAIN_TOO,
- (addButtonCallBack_t)DoZoomDown, NULL );
+ zoomDownB = AddToolbarButton("cmdZoomOut", wIconCreatePixMap(zoomout_xpm),
+ IC_MODETRAIN_TOO, (addButtonCallBack_t) DoZoomDown, NULL);
cmdGroup = BG_UNDO;
- undoB = AddToolbarButton( "cmdUndo", wIconCreatePixMap(edit_undo), 0, (addButtonCallBack_t)UndoUndo, NULL );
- redoB = AddToolbarButton( "cmdRedo", wIconCreatePixMap(edit_redo), 0, (addButtonCallBack_t)UndoRedo, NULL );
-
- wControlActive( (wControl_p)undoB, FALSE );
- wControlActive( (wControl_p)redoB, FALSE );
+ undoB = AddToolbarButton("cmdUndo", wIconCreatePixMap(edit_undo), 0,
+ (addButtonCallBack_t) UndoUndo, NULL);
+ redoB = AddToolbarButton("cmdRedo", wIconCreatePixMap(edit_redo), 0,
+ (addButtonCallBack_t) UndoRedo, NULL);
+ wControlActive((wControl_p) undoB, FALSE);
+ wControlActive((wControl_p) redoB, FALSE);
/*
* FILE MENU
*/
- MiscMenuItemCreate( fileM, NULL, "menuFile-clear", _("&New ..."), ACCL_NEW, (void*)(wMenuCallBack_p)DoClear, 0, (void *)0 );
- wMenuPushCreate( fileM, "menuFile-load", _("&Open ..."), ACCL_OPEN, (wMenuCallBack_p)ChkLoad, NULL );
- wMenuSeparatorCreate( fileM );
-
- wMenuPushCreate( fileM, "menuFile-save", _("&Save"), ACCL_SAVE, (wMenuCallBack_p)DoSave, NULL );
- wMenuPushCreate( fileM, "menuFile-saveAs", _("Save &As ..."), ACCL_SAVEAS, (wMenuCallBack_p)DoSaveAs, NULL );
- wMenuPushCreate( fileM, "menuFile-revert", _("Revert"), ACCL_REVERT, (wMenuCallBack_p)ChkRevert, NULL );
- wMenuSeparatorCreate( fileM );
- MiscMenuItemCreate( fileM, NULL, "printSetup", _("P&rint Setup ..."), ACCL_PRINTSETUP, (void*)(wMenuCallBack_p)wPrintSetup, 0, (void *)0 );
- printCmdInx = InitCmdPrint( fileM );
- wMenuSeparatorCreate( fileM );
- MiscMenuItemCreate( fileM, NULL, "cmdImport", _("&Import"), ACCL_IMPORT, (void*)(wMenuCallBack_p)DoImport, 0, (void *)0 );
- MiscMenuItemCreate( fileM, NULL, "cmdOutputbitmap", _("Export to &Bitmap"), ACCL_PRINTBM, (void*)(wMenuCallBack_p)OutputBitMapInit(), 0, (void *)0 );
- MiscMenuItemCreate( fileM, NULL, "cmdExport", _("E&xport"), ACCL_EXPORT, (void*)(wMenuCallBack_p)DoExport, IC_SELECTED, (void *)0 );
- MiscMenuItemCreate( fileM, NULL, "cmdExportDXF", _("Export D&XF"), ACCL_EXPORTDXF, (void*)(wMenuCallBack_p)DoExportDXF, IC_SELECTED, (void *)0 );
- wMenuSeparatorCreate( fileM );
-
- MiscMenuItemCreate( fileM, NULL, "cmdPrmfile", _("Parameter &Files ..."), ACCL_PARAMFILES, (void*)ParamFilesInit(), 0, (void *)0 );
- MiscMenuItemCreate( fileM, NULL, "cmdFileNote", _("No&tes ..."), ACCL_NOTES, (void*)(wMenuCallBack_p)DoNote, 0, (void *)0 );
-
- wMenuSeparatorCreate( fileM );
- fileList_ml = wMenuListCreate( fileM, "menuFileList", NUM_FILELIST, ChkFileList );
- wMenuSeparatorCreate( fileM );
- wMenuPushCreate( fileM, "menuFile-quit", _("E&xit"), 0,
- (wMenuCallBack_p)DoQuit, NULL );
+ MiscMenuItemCreate(fileM, NULL, "menuFile-clear", _("&New ..."), ACCL_NEW,
+ (void*) (wMenuCallBack_p) DoClear, 0, (void *) 0);
+ wMenuPushCreate(fileM, "menuFile-load", _("&Open ..."), ACCL_OPEN,
+ (wMenuCallBack_p) ChkLoad, NULL);
+ wMenuSeparatorCreate(fileM);
+
+ wMenuPushCreate(fileM, "menuFile-save", _("&Save"), ACCL_SAVE,
+ (wMenuCallBack_p) DoSave, NULL);
+ wMenuPushCreate(fileM, "menuFile-saveAs", _("Save &As ..."), ACCL_SAVEAS,
+ (wMenuCallBack_p) DoSaveAs, NULL);
+ wMenuPushCreate(fileM, "menuFile-revert", _("Revert"), ACCL_REVERT,
+ (wMenuCallBack_p) ChkRevert, NULL);
+ wMenuSeparatorCreate(fileM);
+ MiscMenuItemCreate(fileM, NULL, "printSetup", _("P&rint Setup ..."),
+ ACCL_PRINTSETUP, (void*) (wMenuCallBack_p) wPrintSetup, 0,
+ (void *) 0);
+ printCmdInx = InitCmdPrint(fileM);
+ wMenuSeparatorCreate(fileM);
+ MiscMenuItemCreate(fileM, NULL, "cmdImport", _("&Import"), ACCL_IMPORT,
+ (void*) (wMenuCallBack_p) DoImport, 0, (void *) 0);
+ MiscMenuItemCreate(fileM, NULL, "cmdImportModule", _("Import &Module"), ACCL_IMPORT_MOD,
+ (void*) (wMenuCallBack_p) DoImport, 0, (void *) 1);
+ MiscMenuItemCreate(fileM, NULL, "cmdOutputbitmap", _("Export to &Bitmap"),
+ ACCL_PRINTBM, (void*) (wMenuCallBack_p) OutputBitMapInit(), 0,
+ (void *) 0);
+ MiscMenuItemCreate(fileM, NULL, "cmdExport", _("E&xport"), ACCL_EXPORT,
+ (void*) (wMenuCallBack_p) DoExport, IC_SELECTED, (void *) 0);
+ MiscMenuItemCreate(fileM, NULL, "cmdExportDXF", _("Export D&XF"),
+ ACCL_EXPORTDXF, (void*) (wMenuCallBack_p) DoExportDXF, IC_SELECTED,
+ (void *) 0);
+ wMenuSeparatorCreate(fileM);
+
+ MiscMenuItemCreate(fileM, NULL, "cmdPrmfile", _("Parameter &Files ..."),
+ ACCL_PARAMFILES, (void*) ParamFilesInit(), 0, (void *) 0);
+ MiscMenuItemCreate(fileM, NULL, "cmdFileNote", _("No&tes ..."), ACCL_NOTES,
+ (void*) (wMenuCallBack_p) DoNote, 0, (void *) 0);
+
+ wMenuSeparatorCreate(fileM);
+ fileList_ml = wMenuListCreate(fileM, "menuFileList", NUM_FILELIST,
+ ChkFileList);
+ wMenuSeparatorCreate(fileM);
+ wMenuPushCreate(fileM, "menuFile-quit", _("E&xit"), 0,
+ (wMenuCallBack_p) DoQuit, NULL);
/*
* EDIT MENU
*/
- MiscMenuItemCreate( editM, NULL, "cmdUndo", _("&Undo"), ACCL_UNDO, (void*)(wMenuCallBack_p)UndoUndo, 0, (void *)0 );
- MiscMenuItemCreate( editM, NULL, "cmdRedo", _("R&edo"), ACCL_REDO, (void*)(wMenuCallBack_p)UndoRedo, 0, (void *)0 );
- wMenuSeparatorCreate( editM );
- MiscMenuItemCreate( editM, NULL, "cmdCut", _("Cu&t"), ACCL_CUT, (void*)(wMenuCallBack_p)EditCut, IC_SELECTED, (void *)0 );
- MiscMenuItemCreate( editM, NULL, "cmdCopy", _("&Copy"), ACCL_COPY, (void*)(wMenuCallBack_p)EditCopy, IC_SELECTED, (void *)0 );
- MiscMenuItemCreate( editM, NULL, "cmdPaste", _("&Paste"), ACCL_PASTE, (void*)(wMenuCallBack_p)EditPaste, 0, (void *)0 );
- MiscMenuItemCreate( editM, NULL, "cmdDelete", _("De&lete"), ACCL_DELETE, (void*)(wMenuCallBack_p)SelectDelete, IC_SELECTED, (void *)0 );
- MiscMenuItemCreate( editM, NULL, "cmdMoveToCurrentLayer", _("Move To Current Layer"), ACCL_MOVCURLAYER, (void*)(wMenuCallBack_p)MoveSelectedTracksToCurrentLayer, IC_SELECTED, (void *)0 );
-
-
+ MiscMenuItemCreate(editM, NULL, "cmdUndo", _("&Undo"), ACCL_UNDO,
+ (void*) (wMenuCallBack_p) UndoUndo, 0, (void *) 0);
+ MiscMenuItemCreate(editM, NULL, "cmdRedo", _("R&edo"), ACCL_REDO,
+ (void*) (wMenuCallBack_p) UndoRedo, 0, (void *) 0);
+ wMenuSeparatorCreate(editM);
+ MiscMenuItemCreate(editM, NULL, "cmdCut", _("Cu&t"), ACCL_CUT,
+ (void*) (wMenuCallBack_p) EditCut, IC_SELECTED, (void *) 0);
+ MiscMenuItemCreate(editM, NULL, "cmdCopy", _("&Copy"), ACCL_COPY,
+ (void*) (wMenuCallBack_p) EditCopy, IC_SELECTED, (void *) 0);
+ MiscMenuItemCreate(editM, NULL, "cmdPaste", _("&Paste"), ACCL_PASTE,
+ (void*) (wMenuCallBack_p) EditPaste, 0, (void *) 0);
+ MiscMenuItemCreate(editM, NULL, "cmdClone", _("C&lone"), ACCL_CLONE,
+ (void*) (wMenuCallBack_p) EditClone, 0, (void *) 0);
+ MiscMenuItemCreate(editM, NULL, "cmdDelete", _("De&lete"), ACCL_DELETE,
+ (void*) (wMenuCallBack_p) SelectDelete, IC_SELECTED, (void *) 0);
+ MiscMenuItemCreate(editM, NULL, "cmdMoveToCurrentLayer",
+ _("Move To Current Layer"), ACCL_MOVCURLAYER,
+ (void*) (wMenuCallBack_p) MoveSelectedTracksToCurrentLayer,
+ IC_SELECTED, (void *) 0);
wMenuSeparatorCreate( editM );
menuPLs[menuPG.paramCnt].context = (void*)1;
MiscMenuItemCreate( editM, NULL, "cmdSelectAll", _("Select &All"), ACCL_SELECTALL, (void*)(wMenuCallBack_p)SetAllTrackSelect, 0, (void *)1 );
@@ -2238,8 +2400,10 @@ static void CreateMenus( void )
MiscMenuItemCreate( editM, NULL, "cmdSelectOrphaned", _("Select Stranded Track"), 0L, (void*)(wMenuCallBack_p)OrphanedTrackSelect, 0, (void *)0 );
wMenuSeparatorCreate( editM );
MiscMenuItemCreate( editM, NULL, "cmdTunnel", _("Tu&nnel"), ACCL_TUNNEL, (void*)(wMenuCallBack_p)SelectTunnel, IC_SELECTED, (void *)0 );
- MiscMenuItemCreate( editM, NULL, "cmdAbove", _("A&bove"), ACCL_ABOVE, (void*)(wMenuCallBack_p)SelectAbove, IC_SELECTED, (void *)0 );
- MiscMenuItemCreate( editM, NULL, "cmdBelow", _("Belo&w"), ACCL_BELOW, (void*)(wMenuCallBack_p)SelectBelow, IC_SELECTED, (void *)0 );
+ MiscMenuItemCreate( editM, NULL, "cmdBridge", _("B&ridge"), ACCL_BRIDGE, (void*)(wMenuCallBack_p)SelectBridge, IC_SELECTED, (void *)0);
+ MiscMenuItemCreate( editM, NULL, "cmdTies", _("Ties/NoTies"), ACCL_TIES, (void*)(wMenuCallBack_p)SelectTies, IC_SELECTED, (void *)0);
+ MiscMenuItemCreate( editM, NULL, "cmdAbove", _("Move to &Front"), ACCL_ABOVE, (void*)(wMenuCallBack_p)SelectAbove, IC_SELECTED, (void *)0 );
+ MiscMenuItemCreate( editM, NULL, "cmdBelow", _("Move to &Back"), ACCL_BELOW, (void*)(wMenuCallBack_p)SelectBelow, IC_SELECTED, (void *)0 );
wMenuSeparatorCreate( editM );
MiscMenuItemCreate( editM, NULL, "cmdWidth0", _("Thin Tracks"), ACCL_THIN, (void*)(wMenuCallBack_p)SelectTrackWidth, IC_SELECTED, (void *)0 );
@@ -2249,199 +2413,273 @@ static void CreateMenus( void )
/*
* VIEW MENU
*/
- zoomInM = wMenuPushCreate( viewM, "menuEdit-zoomIn", _("Zoom &In"), ACCL_ZOOMIN, (wMenuCallBack_p)DoZoomUp, (void*)1 );
- zoomSubM = wMenuMenuCreate( viewM, "menuEdit-zoomTo", _("&Zoom") );
- zoomOutM = wMenuPushCreate( viewM, "menuEdit-zoomOut", _("Zoom &Out"), ACCL_ZOOMOUT, (wMenuCallBack_p)DoZoomDown, (void*)1 );
- wMenuSeparatorCreate( viewM );
+ zoomInM = wMenuPushCreate(viewM, "menuEdit-zoomIn", _("Zoom &In"),
+ ACCL_ZOOMIN, (wMenuCallBack_p) DoZoomUp, (void*) 1);
+ zoomSubM = wMenuMenuCreate(viewM, "menuEdit-zoomTo", _("&Zoom"));
+ zoomOutM = wMenuPushCreate(viewM, "menuEdit-zoomOut", _("Zoom &Out"),
+ ACCL_ZOOMOUT, (wMenuCallBack_p) DoZoomDown, (void*) 1);
+ wMenuSeparatorCreate(viewM);
- InitCmdZoom( zoomM, zoomSubM );
+ InitCmdZoom(zoomM, zoomSubM, NULL, NULL);
/* these menu choices and toolbar buttons are synonymous and should be treated as such */
- wControlLinkedSet( (wControl_p)zoomInM, (wControl_p)zoomUpB );
- wControlLinkedSet( (wControl_p)zoomOutM, (wControl_p)zoomDownB );
-
- wMenuPushCreate( viewM, "menuEdit-redraw", _("&Redraw"), ACCL_REDRAW, (wMenuCallBack_p)MainRedraw, NULL );
- wMenuPushCreate( viewM, "menuEdit-redraw", _("Redraw All"), ACCL_REDRAWALL, (wMenuCallBack_p)DoRedraw, NULL );
- wMenuSeparatorCreate( viewM );
-
- snapGridEnableMI = wMenuToggleCreate( viewM, "cmdGridEnable", _("Enable SnapGrid"), ACCL_SNAPENABLE,
- 0, (wMenuToggleCallBack_p)SnapGridEnable, NULL );
- snapGridShowMI = wMenuToggleCreate( viewM, "cmdGridShow", _("Show SnapGrid"), ACCL_SNAPSHOW,
- FALSE, (wMenuToggleCallBack_p)SnapGridShow, NULL );
- gridCmdInx = InitGrid( viewM );
+ wControlLinkedSet((wControl_p) zoomInM, (wControl_p) zoomUpB);
+ wControlLinkedSet((wControl_p) zoomOutM, (wControl_p) zoomDownB);
+
+ wMenuPushCreate(viewM, "menuEdit-redraw", _("&Redraw"), ACCL_REDRAW,
+ (wMenuCallBack_p) MainRedraw, NULL);
+ wMenuPushCreate(viewM, "menuEdit-redraw", _("Redraw All"), ACCL_REDRAWALL,
+ (wMenuCallBack_p) DoRedraw, NULL);
+ wMenuSeparatorCreate(viewM);
+
+ snapGridEnableMI = wMenuToggleCreate(viewM, "cmdGridEnable",
+ _("Enable SnapGrid"), ACCL_SNAPENABLE, 0,
+ (wMenuToggleCallBack_p) SnapGridEnable, NULL);
+ snapGridShowMI = wMenuToggleCreate(viewM, "cmdGridShow", _("Show SnapGrid"),
+ ACCL_SNAPSHOW,
+ FALSE, (wMenuToggleCallBack_p) SnapGridShow, NULL);
+ gridCmdInx = InitGrid(viewM);
+
+ // visibility toggle for anchors
+ // get the start value
+ long anchors_long;
+ wPrefGetInteger("misc", "anchors", (long *)&anchors_long, 1);
+ magneticSnap = anchors_long ? TRUE : FALSE;
+ magnetsMI = wMenuToggleCreate(viewM, "cmdMagneticSnap", _("Enable Magnetic Snap"),
+ 0, magneticSnap,
+ (wMenuToggleCallBack_p)MagneticSnapToggle, NULL);
// visibility toggle for map window
// get the start value
long mapVisible_long;
- wPrefGetInteger( "misc", "mapVisible", (long *)&mapVisible_long, 1 );
- mapVisible = mapVisible_long?TRUE:FALSE;
- mapShowMI = wMenuToggleCreate( viewM, "cmdMapShow", _("Show/Hide Map"), ACCL_MAPSHOW,
- mapVisible, (wMenuToggleCallBack_p)MapWindowToggleShow, NULL );
+ wPrefGetInteger("misc", "mapVisible", (long *) &mapVisible_long, 1);
+ mapVisible = mapVisible_long ? TRUE : FALSE;
+ mapShowMI = wMenuToggleCreate(viewM, "cmdMapShow", _("Show/Hide Map"),
+ ACCL_MAPSHOW, mapVisible,
+ (wMenuToggleCallBack_p) MapWindowToggleShow, NULL);
- wMenuSeparatorCreate( viewM );
+ wMenuSeparatorCreate(viewM);
- toolbarM = wMenuMenuCreate( viewM, "toolbarM", _("&Tool Bar") );
- CreateToolbarM( toolbarM );
+ toolbarM = wMenuMenuCreate(viewM, "toolbarM", _("&Tool Bar"));
+ CreateToolbarM(toolbarM);
- cmdGroup = BG_EASE;
+ cmdGroup = BG_EASE;
InitCmdEasement();
cmdGroup = BG_SNAP;
InitSnapGridButtons();
- mapShowB = AddToolbarButton("cmdMapShow", wIconCreatePixMap(map_xpm), IC_MODETRAIN_TOO,
- (addButtonCallBack_t)MapWindowToggleShow, NULL);
- wControlLinkedSet((wControl_p)mapShowMI, (wControl_p)mapShowB);
- wButtonSetBusy(mapShowB, (wBool_t)mapVisible);
+ magnetsB = AddToolbarButton("cmdMagneticSnap", wIconCreatePixMap(magnet_xpm),
+ IC_MODETRAIN_TOO, (addButtonCallBack_t) MagneticSnapToggle, NULL);
+ wControlLinkedSet((wControl_p) magnetsMI, (wControl_p) magnetsB);
+ wButtonSetBusy(magnetsB, (wBool_t) magneticSnap);
+
+ mapShowB = AddToolbarButton("cmdMapShow", wIconCreatePixMap(map_xpm),
+ IC_MODETRAIN_TOO, (addButtonCallBack_t) MapWindowToggleShow, NULL);
+ wControlLinkedSet((wControl_p) mapShowMI, (wControl_p) mapShowB);
+ wButtonSetBusy(mapShowB, (wBool_t) mapVisible);
/*
* ADD MENU
*/
- cmdGroup = BG_TRKCRT|BG_BIGGAP;
- InitCmdStraight( addM );
- InitCmdCurve( addM );
- InitCmdParallel( addM );
- InitCmdTurnout( addM );
- InitCmdHandLaidTurnout( addM );
- InitCmdStruct( addM );
- InitCmdHelix( addM );
- InitCmdTurntable( addM );
+ cmdGroup = BG_TRKCRT | BG_BIGGAP;
+ InitCmdStraight(addM);
+ InitCmdCurve(addM);
+ InitCmdParallel(addM);
+ InitCmdTurnout(addM);
+ InitCmdHandLaidTurnout(addM);
+ InitCmdStruct(addM);
+ InitCmdHelix(addM);
+ InitCmdTurntable(addM);
cmdGroup = BG_CONTROL;
- InitCmdBlock( addM );
- InitCmdSwitchMotor( addM );
- InitCmdSignal( addM );
- InitCmdControl( addM );
- InitCmdSensor( addM );
-
+ ButtonGroupBegin( _("Control Element"), "cmdControlElements", _("Control Element") );
+ InitCmdBlock(addM);
+ InitCmdSwitchMotor(addM);
+ InitCmdSignal(addM);
+ InitCmdControl(addM);
+ InitCmdSensor(addM);
+ ButtonGroupEnd();
+
/*
* CHANGE MENU
*/
cmdGroup = BG_SELECT;
- InitCmdDescribe( changeM );
- InitCmdSelect( changeM );
- InitCmdPan( changeM );
- wMenuSeparatorCreate( changeM );
+ InitCmdDescribe(changeM);
+ InitCmdSelect(changeM);
+ InitCmdPan(changeM);
+ wMenuSeparatorCreate(changeM);
cmdGroup = BG_TRKGRP;
- InitCmdMove( changeM );
+ InitCmdMove(changeM);
InitCmdDelete();
InitCmdTunnel();
+ InitCmdBridge();
InitCmdAboveBelow();
cmdGroup = BG_TRKMOD;
if (extraButtons)
- MiscMenuItemCreate( changeM, NULL, "loosen", _("&Loosen Tracks"), ACCL_LOOSEN, (void*)(wMenuCallBack_p)LoosenTracks, IC_SELECTED, (void *)0 );
-
- InitCmdModify( changeM );
- InitCmdJoin( changeM );
- InitCmdPull( changeM );
- InitCmdSplit( changeM );
- InitCmdMoveDescription( changeM );
- wMenuSeparatorCreate( changeM );
-
- MiscMenuItemCreate( changeM, NULL, "cmdAddElevations", _("Raise/Lower Elevations"), ACCL_CHGELEV, (void*)(wMenuCallBack_p)ShowAddElevations, IC_SELECTED, (void *)0 );
- InitCmdElevation( changeM );
- InitCmdProfile( changeM );
-
- MiscMenuItemCreate( changeM, NULL, "cmdClearElevations", _("Clear Elevations"), ACCL_CLRELEV, (void*)(wMenuCallBack_p)ClearElevations, IC_SELECTED, (void *)0 );
- MiscMenuItemCreate( changeM, NULL, "cmdElevation", _("Recompute Elevations"), 0, (void*)(wMenuCallBack_p)RecomputeElevations, 0, (void *)0 );
- ParamRegister( &addElevPG );
-
- wMenuSeparatorCreate( changeM );
- MiscMenuItemCreate( changeM, NULL, "cmdRescale", _("Change Scale"), 0, (void*)(wMenuCallBack_p)DoRescale, IC_SELECTED, (void *)0 );
+ MiscMenuItemCreate(changeM, NULL, "loosen", _("&Loosen Tracks"),
+ ACCL_LOOSEN, (void*) (wMenuCallBack_p) LoosenTracks,
+ IC_SELECTED, (void *) 0);
+
+ InitCmdModify(changeM);
+ InitCmdJoin(changeM);
+ InitCmdPull(changeM);
+ InitCmdSplit(changeM);
+ InitCmdMoveDescription(changeM);
+ wMenuSeparatorCreate(changeM);
+
+ MiscMenuItemCreate(changeM, NULL, "cmdAddElevations",
+ _("Raise/Lower Elevations"), ACCL_CHGELEV,
+ (void*) (wMenuCallBack_p) ShowAddElevations, IC_SELECTED,
+ (void *) 0);
+ InitCmdElevation(changeM);
+ InitCmdProfile(changeM);
+
+ MiscMenuItemCreate(changeM, NULL, "cmdClearElevations",
+ _("Clear Elevations"), ACCL_CLRELEV,
+ (void*) (wMenuCallBack_p) ClearElevations, IC_SELECTED, (void *) 0);
+ MiscMenuItemCreate(changeM, NULL, "cmdElevation", _("Recompute Elevations"),
+ 0, (void*) (wMenuCallBack_p) RecomputeElevations, 0, (void *) 0);
+ ParamRegister(&addElevPG);
+
+ wMenuSeparatorCreate(changeM);
+ MiscMenuItemCreate(changeM, NULL, "cmdRescale", _("Change Scale"), 0,
+ (void*) (wMenuCallBack_p) DoRescale, IC_SELECTED, (void *) 0);
+
+ wMenuSeparatorCreate(changeM);
+
+ InitCmdCornu(changeM);
/*
* DRAW MENU
*/
cmdGroup = BG_MISCCRT;
- InitCmdDraw( drawM );
- InitCmdText( drawM );
- InitCmdNote( drawM );
+ InitCmdDraw(drawM);
+ InitCmdText(drawM);
+ InitTrkNote(drawM);
cmdGroup = BG_RULER;
- InitCmdRuler( drawM );
-
+ InitCmdRuler(drawM);
/*
* OPTION MENU
*/
- MiscMenuItemCreate( optionM, NULL, "cmdLayout", _("L&ayout ..."), ACCL_LAYOUTW, (void*)LayoutInit(), IC_MODETRAIN_TOO, (void *)0 );
- MiscMenuItemCreate( optionM, NULL, "cmdDisplay", _("&Display ..."), ACCL_DISPLAYW, (void*)DisplayInit(), IC_MODETRAIN_TOO, (void *)0 );
- MiscMenuItemCreate( optionM, NULL, "cmdCmdopt", _("Co&mmand ..."), ACCL_CMDOPTW, (void*)CmdoptInit(), IC_MODETRAIN_TOO, (void *)0 );
- MiscMenuItemCreate( optionM, NULL, "cmdEasement", _("&Easements ..."), ACCL_EASEW, (void*)(wMenuCallBack_p)DoEasementRedir, IC_MODETRAIN_TOO, (void *)0 );
- MiscMenuItemCreate( optionM, NULL, "fontSelW", _("&Fonts ..."), ACCL_FONTW, (void*)(wMenuCallBack_p)SelectFont, IC_MODETRAIN_TOO, (void *)0 );
- MiscMenuItemCreate( optionM, NULL, "cmdSticky", _("Stic&ky ..."), ACCL_STICKY, (void*)(wMenuCallBack_p)DoSticky, IC_MODETRAIN_TOO, (void *)0 );
+ MiscMenuItemCreate(optionM, NULL, "cmdLayout", _("L&ayout ..."),
+ ACCL_LAYOUTW, (void*) LayoutInit(), IC_MODETRAIN_TOO, (void *) 0);
+ MiscMenuItemCreate(optionM, NULL, "cmdDisplay", _("&Display ..."),
+ ACCL_DISPLAYW, (void*) DisplayInit(), IC_MODETRAIN_TOO, (void *) 0);
+ MiscMenuItemCreate(optionM, NULL, "cmdCmdopt", _("Co&mmand ..."),
+ ACCL_CMDOPTW, (void*) CmdoptInit(), IC_MODETRAIN_TOO, (void *) 0);
+ MiscMenuItemCreate(optionM, NULL, "cmdEasement", _("&Easements ..."),
+ ACCL_EASEW, (void*) (wMenuCallBack_p) DoEasementRedir,
+ IC_MODETRAIN_TOO, (void *) 0);
+ MiscMenuItemCreate(optionM, NULL, "fontSelW", _("&Fonts ..."), ACCL_FONTW,
+ (void*) (wMenuCallBack_p) SelectFont, IC_MODETRAIN_TOO, (void *) 0);
+ MiscMenuItemCreate(optionM, NULL, "cmdSticky", _("Stic&ky ..."),
+ ACCL_STICKY, (void*) (wMenuCallBack_p) DoSticky, IC_MODETRAIN_TOO,
+ (void *) 0);
if (extraButtons) {
menuPLs[menuPG.paramCnt].context = debugW;
- MiscMenuItemCreate( optionM, NULL, "cmdDebug", _("&Debug ..."), 0, (void*)(wMenuCallBack_p)DebugInit, IC_MODETRAIN_TOO, (void *)0 );
+ MiscMenuItemCreate(optionM, NULL, "cmdDebug", _("&Debug ..."), 0,
+ (void*) (wMenuCallBack_p) DebugInit, IC_MODETRAIN_TOO, (void *) 0);
}
- MiscMenuItemCreate( optionM, NULL, "cmdPref", _("&Preferences ..."), ACCL_PREFERENCES, (void*)PrefInit(), IC_MODETRAIN_TOO, (void *)0 );
- MiscMenuItemCreate( optionM, NULL, "cmdColor", _("&Colors ..."), ACCL_COLORW, (void*)ColorInit(), IC_MODETRAIN_TOO, (void *)0 );
+ MiscMenuItemCreate(optionM, NULL, "cmdPref", _("&Preferences ..."),
+ ACCL_PREFERENCES, (void*) PrefInit(), IC_MODETRAIN_TOO, (void *) 0);
+ MiscMenuItemCreate(optionM, NULL, "cmdColor", _("&Colors ..."), ACCL_COLORW,
+ (void*) ColorInit(), IC_MODETRAIN_TOO, (void *) 0);
/*
* MACRO MENU
*/
- wMenuPushCreate( macroM, "cmdRecord", _("&Record ..."), ACCL_RECORD, DoRecord, NULL );
- wMenuPushCreate( macroM, "cmdDemo", _("&Play Back ..."), ACCL_PLAYBACK, DoPlayBack, NULL );
-
+ wMenuPushCreate(macroM, "cmdRecord", _("&Record ..."), ACCL_RECORD,
+ DoRecord, NULL);
+ wMenuPushCreate(macroM, "cmdDemo", _("&Play Back ..."), ACCL_PLAYBACK,
+ DoPlayBack, NULL);
/*
* WINDOW MENU
*/
- wMenuPushCreate( windowM, "menuWindow", _("Main window"), 0, (wMenuCallBack_p)wShow, mainW );
- winList_mi = wMenuListCreate( windowM, "menuWindow", -1, DoShowWindow );
+ wMenuPushCreate(windowM, "menuWindow", _("Main window"), 0,
+ (wMenuCallBack_p) wShow, mainW);
+ winList_mi = wMenuListCreate(windowM, "menuWindow", -1, DoShowWindow);
/*
* HELP MENU
*/
/* main help window */
- wMenuAddHelp( helpM );
+ wMenuAddHelp(helpM);
/* help on recent messages */
- wMenuSeparatorCreate( helpM );
- messageListM = wMenuMenuCreate( helpM, "menuHelpRecentMessages", _("Recent Messages") );
- messageList_ml = wMenuListCreate( messageListM, "messageListM", 10, ShowMessageHelp );
- wMenuListAdd( messageList_ml, 0, _(MESSAGE_LIST_EMPTY), NULL );
+ wMenuSeparatorCreate(helpM);
+ messageListM = wMenuMenuCreate(helpM, "menuHelpRecentMessages",
+ _("Recent Messages"));
+ messageList_ml = wMenuListCreate(messageListM, "messageListM", 10,
+ ShowMessageHelp);
+ wMenuListAdd(messageList_ml, 0, _(MESSAGE_LIST_EMPTY), NULL);
/* tip of the day */
wMenuSeparatorCreate( helpM );
wMenuPushCreate( helpM, "cmdTip", _("Tip of the Day..."), 0, (wMenuCallBack_p)ShowTip, (void *)(SHOWTIP_FORCESHOW | SHOWTIP_NEXTTIP));
demoM = wMenuMenuCreate( helpM, "cmdDemo", _("&Demos") );
+ wMenuPushCreate( helpM, "cmdExamples", _("Examples..."), 0, (wMenuCallBack_p)ChkExamples, (void *)0);
/* about window */
- wMenuSeparatorCreate( helpM );
- wMenuPushCreate( helpM, "about", _("About"), 0, (wMenuCallBack_p)CreateAboutW, NULL );
+ wMenuSeparatorCreate(helpM);
+ wMenuPushCreate(helpM, "about", _("About"), 0,
+ (wMenuCallBack_p) CreateAboutW, NULL);
/*
* MANAGE MENU
*/
- cmdGroup = BG_TRAIN|BG_BIGGAP;
- InitCmdTrain( manageM );
- wMenuSeparatorCreate( manageM );
+ cmdGroup = BG_TRAIN | BG_BIGGAP;
+ InitCmdTrain(manageM);
+ wMenuSeparatorCreate(manageM);
+
+ InitNewTurn(
+ wMenuMenuCreate(manageM, "cmdTurnoutNew",
+ _("Tur&nout Designer...")));
- InitNewTurn( wMenuMenuCreate( manageM, "cmdTurnoutNew", _("Tur&nout Designer...") ) );
+ MiscMenuItemCreate(manageM, NULL, "cmdContmgm",
+ _("Layout &Control Elements"), ACCL_CONTMGM,
+ (void*) ControlMgrInit(), 0, (void*) 0);
+ MiscMenuItemCreate(manageM, NULL, "cmdGroup", _("&Group"), ACCL_GROUP,
+ (void*) (wMenuCallBack_p) DoGroup, IC_SELECTED, (void *) 0);
+ MiscMenuItemCreate(manageM, NULL, "cmdUngroup", _("&Ungroup"), ACCL_UNGROUP,
+ (void*) (wMenuCallBack_p) DoUngroup, IC_SELECTED, (void *) 0);
- MiscMenuItemCreate( manageM, NULL, "cmdContmgm", _("Layout &Control Elements"), ACCL_CONTMGM,(void*)ControlMgrInit(),0,(void*) 0);
- MiscMenuItemCreate( manageM, NULL, "cmdGroup", _("&Group"), ACCL_GROUP, (void*)(wMenuCallBack_p)DoGroup, IC_SELECTED, (void *)0 );
- MiscMenuItemCreate( manageM, NULL, "cmdUngroup", _("&Ungroup"), ACCL_UNGROUP, (void*)(wMenuCallBack_p)DoUngroup, IC_SELECTED, (void *)0 );
+ MiscMenuItemCreate(manageM, NULL, "cmdCustmgm",
+ _("Custom defined parts..."), ACCL_CUSTMGM, (void*) CustomMgrInit(),
+ 0, (void *) 0);
+ MiscMenuItemCreate(manageM, NULL, "cmdRefreshCompound",
+ _("Update Turnouts and Structures"), 0,
+ (void*) (wMenuCallBack_p) DoRefreshCompound, 0, (void *) 0);
- MiscMenuItemCreate( manageM, NULL, "cmdCustmgm", _("Custom defined parts..."), ACCL_CUSTMGM, (void*)CustomMgrInit(), 0, (void *)0 );
- MiscMenuItemCreate( manageM, NULL, "cmdRefreshCompound", _("Update Turnouts and Structures"), 0, (void*)(wMenuCallBack_p)DoRefreshCompound, 0, (void *)0 );
+ MiscMenuItemCreate(manageM, NULL, "cmdCarInventory", _("Car Inventory"),
+ ACCL_CARINV, (void*) (wMenuCallBack_p) DoCarDlg, IC_MODETRAIN_TOO,
+ (void *) 0);
- MiscMenuItemCreate( manageM, NULL, "cmdCarInventory", _("Car Inventory"), ACCL_CARINV, (void*)(wMenuCallBack_p)DoCarDlg, IC_MODETRAIN_TOO, (void *)0 );
+ wMenuSeparatorCreate(manageM);
- wMenuSeparatorCreate( manageM );
+ MiscMenuItemCreate(manageM, NULL, "cmdLayer", _("Layers ..."), ACCL_LAYERS,
+ (void*) InitLayersDialog(), 0, (void *) 0);
+ wMenuSeparatorCreate(manageM);
- MiscMenuItemCreate( manageM, NULL, "cmdLayer", _("Layers ..."), ACCL_LAYERS, (void*)InitLayersDialog(), 0, (void *)0 );
- wMenuSeparatorCreate( manageM );
+ MiscMenuItemCreate(manageM, NULL, "cmdEnumerate", _("Parts &List ..."),
+ ACCL_PARTSLIST, (void*) (wMenuCallBack_p) EnumerateTracks, 0,
+ (void *) 0);
+ MiscMenuItemCreate(manageM, NULL, "cmdPricelist", _("Price List..."),
+ ACCL_PRICELIST, (void*) PriceListInit(), 0, (void *) 0);
- MiscMenuItemCreate( manageM, NULL, "cmdEnumerate", _("Parts &List ..."), ACCL_PARTSLIST, (void*)(wMenuCallBack_p)EnumerateTracks, 0, (void *)0 );
- MiscMenuItemCreate( manageM, NULL, "cmdPricelist", _("Price List..."), ACCL_PRICELIST, (void*)PriceListInit(), 0, (void *)0 );
+ cmdGroup = BG_LAYER | BG_BIGGAP;
+
+ InitCmdSelect2(changeM);
+ InitCmdDescribe2(changeM);
+ InitCmdPan2(changeM);
- cmdGroup = BG_LAYER|BG_BIGGAP;
InitLayers();
cmdGroup = BG_HOTBAR;
@@ -2459,51 +2697,73 @@ static void CreateMenus( void )
wAttachAccelKey( wAccelKey_Del, WKEY_SHIFT, (wAccelKeyCallBack_p)EditCut, 0 );
wAttachAccelKey( wAccelKey_F6, 0, (wAccelKeyCallBack_p)NextWindow, 0 );
#endif
- SetAccelKey( "zoomUp", wAccelKey_Pgdn, 0, (wAccelKeyCallBack_p)DoZoomUp, (void*)1 );
- SetAccelKey( "zoomDown", wAccelKey_Pgup, 0, (wAccelKeyCallBack_p)DoZoomDown, (void*)1 );
- SetAccelKey( "redraw", wAccelKey_F5, 0, (wAccelKeyCallBack_p)MainRedraw, (void*)1 );
- SetAccelKey( "delete", wAccelKey_Del, 0, (wAccelKeyCallBack_p)SelectDelete, (void*)1 );
- SetAccelKey( "copy", wAccelKey_Ins, WKEY_CTRL, (wAccelKeyCallBack_p)EditCopy, 0 );
- SetAccelKey( "paste", wAccelKey_Ins, WKEY_SHIFT, (wAccelKeyCallBack_p)EditPaste, 0 );
- SetAccelKey( "undo", wAccelKey_Back, WKEY_SHIFT, (wAccelKeyCallBack_p)UndoUndo, 0 );
- SetAccelKey( "cut", wAccelKey_Del, WKEY_SHIFT, (wAccelKeyCallBack_p)EditCut, 0 );
- SetAccelKey( "nextWindow", wAccelKey_F6, 0, (wAccelKeyCallBack_p)NextWindow, 0 );
- SetAccelKey( "zoomUp", wAccelKey_Numpad_Add, WKEY_CTRL, (wAccelKeyCallBack_p)DoZoomUp, (void*)1 );
- SetAccelKey( "zoomDown", wAccelKey_Numpad_Subtract, WKEY_CTRL, (wAccelKeyCallBack_p)DoZoomDown, (void*)1 );
+ SetAccelKey("zoomUp", wAccelKey_Pgdn, 0, (wAccelKeyCallBack_p) DoZoomUp,
+ (void*) 1);
+ SetAccelKey("zoomDown", wAccelKey_Pgup, 0, (wAccelKeyCallBack_p) DoZoomDown,
+ (void*) 1);
+ SetAccelKey("redraw", wAccelKey_F5, 0, (wAccelKeyCallBack_p) MainRedraw,
+ (void*) 1);
+ SetAccelKey("delete", wAccelKey_Del, 0, (wAccelKeyCallBack_p) SelectDelete,
+ (void*) 1);
+ SetAccelKey("copy", wAccelKey_Ins, WKEY_CTRL,
+ (wAccelKeyCallBack_p) EditCopy, 0);
+ SetAccelKey("paste", wAccelKey_Ins, WKEY_SHIFT,
+ (wAccelKeyCallBack_p) EditPaste, 0);
+ SetAccelKey("undo", wAccelKey_Back, WKEY_SHIFT,
+ (wAccelKeyCallBack_p) UndoUndo, 0);
+ SetAccelKey("cut", wAccelKey_Del, WKEY_SHIFT, (wAccelKeyCallBack_p) EditCut,
+ 0);
+ SetAccelKey("nextWindow", wAccelKey_F6, 0, (wAccelKeyCallBack_p) NextWindow,
+ 0);
+ SetAccelKey("zoomUp", wAccelKey_Numpad_Add, WKEY_CTRL,
+ (wAccelKeyCallBack_p) DoZoomUp, (void*) 1);
+ SetAccelKey("zoomDown", wAccelKey_Numpad_Subtract, WKEY_CTRL,
+ (wAccelKeyCallBack_p) DoZoomDown, (void*) 1);
+ SetAccelKey("help", wAccelKey_F1, WKEY_SHIFT,
+ (wAccelKeyCallBack_p) wDoAccelHelp, (void*) 1);
+ SetAccelKey("help-context", wAccelKey_F1, 0,
+ (wAccelKeyCallBack_p) wDoAccelHelp, (void*) 3);
InitBenchDialog();
+ wPrefGetInteger( "DialogItem", "sticky-set", &stickySet, stickySet );
}
-
-static void LoadFileList( void )
-{
+static void LoadFileList(void) {
char file[6];
int inx;
const char * cp;
const char *fileName, *pathName;
- strcpy( file, "fileX" );
- for (inx=NUM_FILELIST-1; inx>=0; inx--) {
- file[4] = '0'+inx;
- cp = wPrefGetString( "filelist", file );
+ strcpy(file, "fileX");
+ for (inx = NUM_FILELIST - 1; inx >= 0; inx--) {
+ file[4] = '0' + inx;
+ cp = wPrefGetString("filelist", file);
if (!cp)
continue;
pathName = MyStrdup(cp);
- fileName = FindFilename((char *)pathName);
+ fileName = FindFilename((char *) pathName);
if (fileName)
- wMenuListAdd( fileList_ml, 0, fileName, pathName );
+ wMenuListAdd(fileList_ml, 0, fileName, pathName);
}
}
-EXPORT void InitCmdEnumerate( void )
-{
- AddToolbarButton( "cmdEnumerate", wIconCreatePixMap(partlist_xpm), IC_SELECTED|IC_ACCLKEY, (addButtonCallBack_t)EnumerateTracks, NULL );
+EXPORT void InitCmdEnumerate(void) {
+ AddToolbarButton("cmdEnumerate", wIconCreatePixMap(partlist_xpm),
+ IC_SELECTED | IC_ACCLKEY, (addButtonCallBack_t) EnumerateTracks,
+ NULL);
}
-
-EXPORT void InitCmdExport( void )
-{
- AddToolbarButton( "cmdExport", wIconCreatePixMap(export_xpm), IC_SELECTED|IC_ACCLKEY, (addButtonCallBack_t)DoExport, NULL );
- AddToolbarButton( "cmdImport", wIconCreatePixMap(import_xpm), IC_ACCLKEY, (addButtonCallBack_t)DoImport, NULL );
+EXPORT void InitCmdExport(void) {
+ ButtonGroupBegin( _("Import/Export"), "cmdExportImportSetCmd", _("Import/Export") );
+ cmdGroup = BG_EXPORTIMPORT;
+ AddToolbarButton("cmdExport", wIconCreatePixMap(export_xpm),
+ IC_SELECTED | IC_ACCLKEY, (addButtonCallBack_t) DoExport, NULL);
+ AddToolbarButton("cmdExportDXF", wIconCreatePixMap(export_dxf_xpm), IC_SELECTED | IC_ACCLKEY,
+ (addButtonCallBack_t)DoExportDXF, (void*)1);
+ AddToolbarButton("cmdImport", wIconCreatePixMap(import_xpm), IC_ACCLKEY,
+ (addButtonCallBack_t) DoImport, (void*)0);
+ AddToolbarButton("cmdImportModule", wIconCreatePixMap(importmod_xpm), IC_ACCLKEY,
+ (addButtonCallBack_t) DoImport, (void*)1);
+ ButtonGroupEnd();
}
/* Give user the option to continue work after crash. This function gives the user
@@ -2514,27 +2774,34 @@ EXPORT void InitCmdExport( void )
*
*/
+
static int OfferCheckpoint( void )
{
int ret = FALSE;
/* sProdName */
- ret = wNoticeEx( NT_INFORMATION,
- _("Program was not terminated properly. Do you want to resume working on the previous trackplan?"),
- _("Resume"), _("Ignore") );
- if( ret ) {
+ ret =
+ wNotice3(
+ _(
+ "Program was not terminated properly. Do you want to resume working on the previous trackplan?"),
+ _("Resume"), _("Resume with New Name"), _("Ignore Checkpoint"));
+ //ret==1 Same, ret==-1 New, ret==0 Ignore
+ if (ret == 1)
+ printf(_("Reload Checkpoint Selected\n"));
+ else if (ret == -1)
+ printf(_("Reload Checkpoint With New Name Selected\n"));
+ else
+ printf(_("Ignore Checkpoint Selected\n"));
+ if (ret>=0) {
/* load the checkpoint file */
- LoadCheckpoint();
+ LoadCheckpoint(ret==1);
ret = TRUE;
+
}
- return ret;
+ return (ret>=0);
}
-
-EXPORT wWin_p wMain(
- int argc,
- char * argv[] )
-{
+EXPORT wWin_p wMain(int argc, char * argv[]) {
int c;
int resumeWork;
char * logFileName = NULL;
@@ -2547,12 +2814,12 @@ EXPORT wWin_p wMain(
long newToolbarMax;
char *cp;
char *oldLocale = NULL;
- char buffer[ STR_SIZE ];
+ char buffer[STR_SIZE];
unsigned int i;
- wPos_t displayWidth;
- wPos_t displayHeight;
+ wPos_t displayWidth;
+ wPos_t displayHeight;
- strcpy( buffer, sProdNameLower );
+ strcpy(buffer, sProdNameLower);
/* Initialize application name */
wInitAppName(buffer);
@@ -2563,7 +2830,7 @@ EXPORT wWin_p wMain(
/* Save user locale */
oldLocale = setlocale(LC_ALL, NULL);
if (oldLocale)
- userLocale = strdup( oldLocale );
+ userLocale = strdup(oldLocale);
/*
* ARGUMENTS
@@ -2571,89 +2838,107 @@ EXPORT wWin_p wMain(
opterr = 0;
- while ((c = getopt (argc, argv, "vl:d:c:")) != -1)
- switch (c) {
- case 'c': /* configuration name */
+ while ((c = getopt(argc, argv, "vl:d:c:m")) != -1)
+ switch (c) {
+ case 'c': /* configuration name */
/* test for valid filename */
- for( i = 0; i < strlen( optarg ); i++ ) {
- if( !isalnum( (unsigned char)optarg[ i ]) && optarg[ i ] != '.' ) {
- NoticeMessage( MSG_BAD_OPTION, _("Ok"), NULL, optarg );
- exit( 1 );
+ for (i = 0; i < strlen(optarg); i++) {
+ if (!isalnum((unsigned char) optarg[i]) && optarg[i] != '.') {
+ NoticeMessage(MSG_BAD_OPTION, _("Ok"), NULL, optarg);
+ exit(1);
}
}
/* append delimiter and argument to configuration name */
- if( strlen( optarg ) < STR_SIZE - strlen( ";" ) - strlen( buffer ) - 1 ){
- strcat( buffer, ";" );
- strcat( buffer, optarg );
- }
- else {
- NoticeMessage( MSG_BAD_OPTION, _("Ok"), NULL, optarg );
- exit( 1 );
+ if (strlen(optarg) < STR_SIZE - strlen(";") - strlen(buffer) - 1) {
+ strcat(buffer, ";");
+ strcat(buffer, optarg);
+ } else {
+ NoticeMessage(MSG_BAD_OPTION, _("Ok"), NULL, optarg);
+ exit(1);
}
break;
- case 'v': /* verbose flag */
+ case 'v': /* verbose flag */
verbose++;
- break;
- case 'd': /* define loglevel for a group */
- cp = strchr( optarg, '=' );
- if ( cp != NULL ) {
+ break;
+ case 'd': /* define loglevel for a group */
+ cp = strchr(optarg, '=');
+ if (cp != NULL) {
*cp++ = '\0';
- LogSet( optarg, atoi(cp) );
+ LogSet(optarg, atoi(cp));
} else {
- LogSet( optarg, 1 );
+ LogSet(optarg, 1);
}
break;
- case 'l': /* define log filename */
+ case 'l': /* define log filename */
logFileName = strdup(optarg);
break;
- case '?':
- NoticeMessage( MSG_BAD_OPTION, _("Ok"), NULL, argv[ optind - 1 ] );
- exit( 1 );
+ case '?':
+ NoticeMessage(MSG_BAD_OPTION, _("Ok"), NULL, argv[optind - 1]);
+ exit(1);
+ case 'm': // temporary: use MainRedraw instead of TempRedraw
+ wDrawDoTempDraw = FALSE;
+ break;
case ':':
- NoticeMessage( "Missing parameter for %s", _("Ok"), NULL, argv[ optind - 1 ] );
- exit( 1 );
+ NoticeMessage("Missing parameter for %s", _("Ok"), NULL,
+ argv[optind - 1]);
+ exit(1);
break;
- default:
- abort ();
- }
- if( optind < argc )
- initialFile = strdup( argv[ optind ] );
+ default:
+ abort();
+ }
+ if (optind < argc)
+ initialFile = strdup(argv[optind]);
- extraButtons = ( getenv(sEnvExtra) != NULL );
- LogOpen( logFileName );
- log_init = LogFindIndex( "init" );
- log_malloc = LogFindIndex( "malloc" );
- log_error = LogFindIndex( "error" );
- log_command = LogFindIndex( "command" );
+ extraButtons = (getenv(sEnvExtra) != NULL);
+ LogOpen(logFileName);
+ log_init = LogFindIndex("init");
+ log_malloc = LogFindIndex("malloc");
+ log_error = LogFindIndex("error");
+ log_command = LogFindIndex("command");
-LOG1( log_init, ( "initCustom\n" ) )
+ LOG1(log_init, ( "initCustom\n" ))
InitCustom();
/*
* MAIN WINDOW
*/
-LOG1( log_init, ( "create main window\n" ) )
- SetLayoutTitle( sProdName );
- sprintf( message, _("Unnamed Trackplan - %s(%s)"), sProdName, sVersion );
- wSetBalloonHelp( balloonHelp );
-
- wGetDisplaySize(&displayWidth, &displayHeight);
- mainW = wWinMainCreate( buffer, (displayWidth*2)/3, (displayHeight*2)/3, "xtrkcadW", message, "main",
- F_RESIZE|F_MENUBAR|F_NOTAB|F_RECALLPOS|F_HIDE,
- MainProc, NULL );
- if ( mainW == NULL )
+ LOG1(log_init, ( "create main window\n" ))
+ SetLayoutTitle(sProdName);
+ sprintf(message, _("Unnamed Trackplan - %s(%s)"), sProdName, sVersion);
+ wSetBalloonHelp(balloonHelp);
+
+ wGetDisplaySize(&displayWidth, &displayHeight);
+ mainW = wWinMainCreate(buffer, (displayWidth * 2) / 3,
+ (displayHeight * 2) / 3, "xtrkcadW", message, "main",
+ F_RESIZE | F_MENUBAR | F_NOTAB | F_RECALLPOS | F_RECALLSIZE | F_HIDE, MainProc,
+ NULL);
+ if (mainW == NULL)
return NULL;
InitAppDefaults();
-
drawColorBlack = wDrawFindColor( wRGB( 0, 0, 0) );
drawColorWhite = wDrawFindColor( wRGB(255,255,255) );
drawColorRed = wDrawFindColor( wRGB(255, 0, 0) );
drawColorBlue = wDrawFindColor( wRGB( 0, 0,255) );
drawColorGreen = wDrawFindColor( wRGB( 0,255, 0) );
drawColorAqua = wDrawFindColor( wRGB( 0,255,255) );
+
+ // Last component of spectial color must be > 3
+ drawColorPreviewSelected = wDrawFindColor( wRGB ( 6, 6, 255) ); //Special Blue
+ drawColorPreviewUnselected = wDrawFindColor( wRGB( 255, 215, 6)); //Special Yellow
+
+ drawColorPowderedBlue = wDrawFindColor( wRGB(129, 212, 250) );
drawColorPurple = wDrawFindColor( wRGB(255, 0,255) );
drawColorGold = wDrawFindColor( wRGB(255,215, 0) );
+ drawColorGrey10 = wDrawFindColor( wRGB(26,26,26) );
+ drawColorGrey20 = wDrawFindColor( wRGB(51,51,51) );
+ drawColorGrey30 = wDrawFindColor( wRGB(72,72,72) );
+ drawColorGrey40 = wDrawFindColor( wRGB(102,102,102) );
+ drawColorGrey50 = wDrawFindColor( wRGB(128,128,128) );
+ drawColorGrey60 = wDrawFindColor( wRGB(153,153,153) );
+ drawColorGrey70 = wDrawFindColor( wRGB(179,179,179) );
+ drawColorGrey80 = wDrawFindColor( wRGB(204,204,204) );
+ drawColorGrey90 = wDrawFindColor( wRGB(230,230,230) );
snapGridColor = drawColorGreen;
markerColor = drawColorRed;
borderColor = drawColorBlack;
@@ -2664,73 +2949,71 @@ LOG1( log_init, ( "create main window\n" ) )
elevColorIgnore = drawColorBlue;
elevColorDefined = drawColorGold;
profilePathColor = drawColorPurple;
- exceptionColor = wDrawFindColor( wRGB(255,0,128) );
- tieColor = wDrawFindColor( wRGB(255,128,0) );
+ exceptionColor = wDrawFindColor(wRGB(255, 89, 0 ));
+ tieColor = wDrawFindColor(wRGB(153, 89, 68));
- newToolbarMax = (1<<BG_COUNT)-1;
- wPrefGetInteger( "misc", "toolbarset", &toolbarSet, newToolbarMax );
- wPrefGetInteger( "misc", "max-toolbarset", &oldToolbarMax, 0 );
+ newToolbarMax = (1 << BG_COUNT) - 1;
+ wPrefGetInteger("misc", "toolbarset", &toolbarSet, newToolbarMax);
+ wPrefGetInteger("misc", "max-toolbarset", &oldToolbarMax, 0);
toolbarSet |= newToolbarMax & ~oldToolbarMax;
- wPrefSetInteger( "misc", "max-toolbarset", newToolbarMax );
- wPrefSetInteger( "misc", "toolbarset", toolbarSet );
+ wPrefSetInteger("misc", "max-toolbarset", newToolbarMax);
+ wPrefSetInteger("misc", "toolbarset", toolbarSet);
-LOG1( log_init, ( "fontInit\n"))
+ LOG1(log_init, ( "fontInit\n"))
wInitializeFonts();
-LOG1( log_init, ( "fileInit\n" ) )
+ LOG1(log_init, ( "fileInit\n" ))
FileInit();
- wCreateSplash( sProdName, sVersion );
+ wCreateSplash(sProdName, sVersion);
if (!initialFile) {
WDOUBLE_T tmp;
-LOG1( log_init, ( "set roomsize\n" ) )
- wPrefGetFloat( "draw", "roomsizeX", &tmp, 96.0 );
+ LOG1(log_init, ( "set roomsize\n" ))
+ wPrefGetFloat("draw", "roomsizeX", &tmp, 96.0);
roomSize.x = tmp;
- wPrefGetFloat( "draw", "roomsizeY", &tmp, 48.0 );
+ wPrefGetFloat("draw", "roomsizeY", &tmp, 48.0);
roomSize.y = tmp;
- SetRoomSize( roomSize );
+ SetRoomSize(roomSize);
}
/*
* INITIALIZE
*/
-LOG1( log_init, ( "initInfoBar\n" ) )
+ LOG1(log_init, ( "initInfoBar\n" ))
InitInfoBar();
- wSetSplashInfo( "Misc2 Init..." );
-LOG1( log_init, ( "misc2Init\n" ) )
+ wSetSplashInfo("Misc2 Init...");
+ LOG1(log_init, ( "misc2Init\n" ))
Misc2Init();
RotateDialogInit();
MoveDialogInit();
- wSetSplashInfo( _("Initializing commands") );
-LOG1( log_init, ( "paramInit\n" ) )
+ wSetSplashInfo(_("Initializing commands"));
+ LOG1(log_init, ( "paramInit\n" ))
ParamInit();
-LOG1( log_init, ( "initTrkTrack\n" ) )
+ LOG1(log_init, ( "initTrkTrack\n" ))
InitTrkTrack();
/*
* MENUS
*/
- wSetSplashInfo( _("Initializing menus") );
-LOG1( log_init, ( "createMenus\n" ) )
+ wSetSplashInfo(_("Initializing menus"));
+ LOG1(log_init, ( "createMenus\n" ))
CreateMenus();
-
-
-LOG1( log_init, ( "initialize\n" ) )
+ LOG1(log_init, ( "initialize\n" ))
if (!Initialize())
return NULL;
- ParamRegister( &menuPG );
- ParamRegister( &stickyPG );
+ ParamRegister(&menuPG);
+ ParamRegister(&stickyPG);
/* initialize the layers */
DefaultLayerProperties();
-LOG1( log_init, ( "loadFileList\n" ) )
+ LOG1(log_init, ( "loadFileList\n" ))
LoadFileList();
- AddPlaybackProc( "MENU", MenuPlayback, NULL );
+ AddPlaybackProc("MENU", MenuPlayback, NULL);
//CreateDebugW();
/*
@@ -2747,17 +3030,20 @@ LOG1( log_init, ( "loadFileList\n" ) )
} else {
HideHotBar();
}
-LOG1( log_init, ( "drawInit\n" ) )
- DrawInit( initialZoom );
+ LOG1(log_init, ( "drawInit\n" ))
+ DrawInit(initialZoom);
MacroInit();
- wSetSplashInfo( _("Reading parameter files") );
-LOG1( log_init, ( "paramFileInit\n" ) )
- if (!ParamFileInit())
+ wSetSplashInfo(_("Reading parameter files"));
+ LOG1(log_init, ( "paramFileInit\n" ))
+
+ SetParamFileDir(GetCurrentPath(LAYOUTPATHKEY)); //Set default for new parms to be the same as the layout
+
+ if (!ParamFileListInit())
return NULL;
curCommand = describeCmdInx;
-LOG1( log_init, ( "Reset\n" ) )
+ LOG1(log_init, ( "Reset\n" ))
Reset();
/*
@@ -2767,30 +3053,30 @@ LOG1( log_init, ( "Reset\n" ) )
/* Set up the data for scale and gauge description */
DoSetScaleDesc();
- // get the preferred scale from the configuration file
- pref = wPrefGetString( "misc", "scale" );
- if( !pref )
+ // get the preferred scale from the configuration file
+ pref = wPrefGetString("misc", "scale");
+ if (!pref)
// if preferred scale was not set (eg. during initial run), initialize to a default value
pref = DEFAULT_SCALE;
- strcpy( buffer, pref );
- DoSetScale( buffer );
+ strcpy(buffer, pref);
+ DoSetScale(buffer);
/* see whether last layout should be reopened on startup */
- wPrefGetInteger( "DialogItem", "pref-onstartup", &onStartup, 0 );
+ wPrefGetInteger("DialogItem", "pref-onstartup", &onStartup, 0);
/*
* THE END
*/
-LOG1( log_init, ( "the end\n" ) )
+ LOG1(log_init, ( "the end\n" ))
EnableCommands();
-LOG1( log_init, ( "Initialization complete\n" ) )
- wSetSplashInfo( _("Initialization complete") );
- RegisterChangeNotification( ToolbarChange );
- DoChangeNotification( CHANGE_MAIN|CHANGE_MAP );
+ LOG1(log_init, ( "Initialization complete\n" ))
+ wSetSplashInfo(_("Initialization complete"));
+ RegisterChangeNotification(ToolbarChange);
+ DoChangeNotification( CHANGE_MAIN | CHANGE_MAP);
- wWinShow( mainW, TRUE );
- wWinShow( mapW, mapVisible );
+ wWinShow(mainW, TRUE);
+ wWinShow(mapW, mapVisible);
wDestroySplash();
/* this has to be called before ShowTip() */
@@ -2800,20 +3086,28 @@ LOG1( log_init, ( "Initialization complete\n" ) )
/* check for existing checkpoint file */
resumeWork = FALSE;
- if (ExistsCheckpoint())
+ if (ExistsCheckpoint()) {
resumeWork = OfferCheckpoint();
+ MainRedraw();
+ }
if (!resumeWork) {
- /* if work is to be resumed and no filename was given on startup, load last layout */
+ /* if work is not to be resumed and no filename was given on startup, load last layout */
if ((onStartup == 0) && (!initialFile || !strlen(initialFile))) {
+ long iExample;
initialFile = (char*)wPrefGetString("misc", "lastlayout");
+ wPrefGetInteger("misc", "lastlayoutexample", &iExample, 0);
+ bExample = (iExample == 1);
}
if (initialFile && strlen(initialFile)) {
- DoFileList(0, NULL, initialFile);
+ DoFileList(0, NULL, initialFile); //Will load Background values, if archive
+ if (onStartup == 1)
+ LayoutBackGroundInit(TRUE); //Wipe Out Prior Background
+ else
+ LayoutBackGroundInit(FALSE); //Get Prior BackGround
}
}
inMainW = FALSE;
return mainW;
}
-
diff --git a/app/bin/misc.h b/app/bin/misc.h
index 2fb3359..2be0be2 100644
--- a/app/bin/misc.h
+++ b/app/bin/misc.h
@@ -44,6 +44,7 @@ typedef void (*addButtonCallBack_t)(void*);
#define STR_SIZE (256)
#define STR_SHORT_SIZE (80)
#define STR_LONG_SIZE (1024)
+#define STR_HUGE_SIZE (10240)
#define CAST_AWAY_CONST (char*)
@@ -68,15 +69,17 @@ extern long hideSelectionWindow;
extern long labelWhen;
extern long labelScale;
extern long labelEnable;
-extern long colorLayers;
+extern long colorTrack;
+extern long colorDraw;
extern long carHotbarModeInx;
extern DIST_T minLength;
extern DIST_T connectDistance;
extern ANGLE_T connectAngle;
extern long twoRailScale;
extern long mapScale;
-extern long zoomCorner;
+extern long constrainMain;
extern long checkPtInterval;
+extern long autosaveChkPoints;
extern long liveMap;
extern long preSelect;
extern long hideTrainsInTunnels;
@@ -91,8 +94,11 @@ extern DIST_T curScaleRatio;
extern char * curScaleName;
extern int enumerateMaxDescLen;
extern long enableBalloonHelp;
+extern long showFlexTrack;
extern long hotBarLabels;
extern long rightClickMode;
+extern long selectMode;
+extern long selectZero;
extern void * commandContext;
extern coOrd cmdMenuPos;
#define MODE_DESIGN (0)
@@ -136,6 +142,12 @@ extern long programMode;
#define C_TEXT wActionText
#define C_WUP wActionWheelUp
#define C_WDOWN wActionWheelDown
+#define C_LDOUBLE wActionLDownDouble
+#define C_MODKEY wActionModKey
+#define C_SCROLLUP wActionScrollUp
+#define C_SCROLLDOWN wActionScrollDown
+#define C_SCROLLLEFT wActionScrollLeft
+#define C_SCROLLRIGHT wActionScrollRight
#define C_INIT (wActionLast+1)
#define C_START (wActionLast+2)
#define C_REDRAW (wActionLast+3)
@@ -146,6 +158,7 @@ extern long programMode;
#define C_RCLICK (wActionLast+8)
#define C_CMDMENU (wActionLast+9)
#define C_FINISH (wActionLast+10)
+#define C_UPDATE (wActionLast+11)
#define C_CONTINUE (100)
#define C_TERMINATE (101)
@@ -180,7 +193,7 @@ extern wPos_t DlgSepFrmBottom;
extern wWin_p mainW;
extern wPos_t toolbarHeight;
extern wIndex_t changed;
-extern char message[STR_LONG_SIZE];
+extern char message[STR_HUGE_SIZE];
extern REGION_T curRegion;
extern long paramVersion;
extern coOrd zero;
@@ -189,6 +202,7 @@ extern wButton_p undoB;
extern wButton_p redoB;
extern wButton_p zoomUpB; /** ZoomUp button on toolbar */
extern wButton_p zoomDownB; /** ZoomDown button on toolbar */
+extern wButton_p backgroundB; /** background visibility control */
// extern wButton_p easementB;
extern wIndex_t checkPtMark;
extern wMenu_p demoM;
@@ -221,9 +235,11 @@ int NoticeMessage( char *, char*, char *, ... );
int NoticeMessage2( int, char *, char*, char *, ... );
void DoQuit( void );
+void FileIsChanged(void);
char * ConvertFromEscapedText(const char * text);
char * ConvertToEscapedText(const char * text);
+int MagneticSnap( int state );
void wShow( wWin_p );
void wHide( wWin_p );
void CloseDemoWindows( void );
@@ -232,28 +248,34 @@ void SelectFont();
void CheckRoomSize( BOOL_T );
const char * GetBalloonHelpStr( char* );
+const char * GetCurCommandName( void );
void EnableCommands( void );
void Reset( void );
+wIndex_t GetCurrentCommand(void);
+BOOL_T IsCurCommandSticky(void);
void ResetIfNotSticky( void );
wBool_t DoCurCommand( wAction_t, coOrd );
void ConfirmReset( BOOL_T );
void LayoutToolBar( void * );
-#define IC_STICKY (1<<0)
-#define IC_CANCEL (1<<1)
-#define IC_MENU (1<<2)
-#define IC_NORESTART (1<<3)
-#define IC_SELECTED (1<<4)
-#define IC_POPUP (1<<5)
-#define IC_LCLICK (1<<6)
-#define IC_RCLICK (1<<7)
-#define IC_CMDMENU (1<<8)
-#define IC_POPUP2 (1<<9)
-#define IC_ABUT (1<<10)
-#define IC_ACCLKEY (1<<11)
-#define IC_MODETRAIN_TOO (1<<12)
-#define IC_MODETRAIN_ONLY (1<<13)
-#define IC_WANT_MOVE (1<<14)
-#define IC_PLAYBACK_PUSH (1<<15)
+#define IC_STICKY (1<<0)
+#define IC_INITNOTSTICKY (1<<1)
+#define IC_CANCEL (1<<2)
+#define IC_MENU (1<<3)
+#define IC_NORESTART (1<<4)
+#define IC_SELECTED (1<<5)
+#define IC_POPUP (1<<6)
+#define IC_LCLICK (1<<7)
+#define IC_RCLICK (1<<8)
+#define IC_CMDMENU (1<<9)
+#define IC_POPUP2 (1<<10)
+#define IC_ABUT (1<<11)
+#define IC_ACCLKEY (1<<12)
+#define IC_MODETRAIN_TOO (1<<13)
+#define IC_MODETRAIN_ONLY (1<<14)
+#define IC_WANT_MOVE (1<<15)
+#define IC_PLAYBACK_PUSH (1<<16)
+#define IC_WANT_MODKEYS (1<<17)
+#define IC_POPUP3 (1<<18)
wIndex_t InitCommand( wMenu_p, procCommand_t, char *, char *, int, long, long );
void AddToolbarControl( wControl_p, long );
BOOL_T CommandEnabled( wIndex_t );
@@ -278,22 +300,25 @@ void InitDebug( char *, long * );
#define CHANGE_MAIN (1<<2)
#define CHANGE_MAP (1<<4)
#define CHANGE_GRID (1<<5)
+#define CHANGE_BACKGROUND (1<<6)
#define CHANGE_UNITS (1<<7)
#define CHANGE_TOOLBAR (1<<8)
#define CHANGE_CMDOPT (1<<9)
#define CHANGE_LIMITS (1<<10)
-#define CHANGE_ALL (CHANGE_SCALE|CHANGE_PARAMS|CHANGE_MAIN|CHANGE_MAP|CHANGE_UNITS|CHANGE_TOOLBAR|CHANGE_CMDOPT)
+#define CHANGE_ALL (CHANGE_SCALE|CHANGE_PARAMS|CHANGE_MAIN|CHANGE_MAP|CHANGE_UNITS|CHANGE_TOOLBAR|CHANGE_CMDOPT|CHANGE_BACKGROUND)
typedef void (*changeNotificationCallBack_t)( long );
void RegisterChangeNotification( changeNotificationCallBack_t );
void DoChangeNotification( long );
+wBool_t CheckHelpTopicExists(const char * topic);
+
/* foreign externs */
extern drawCmd_t mapD;
extern STATUS_T CmdEnumerate( wAction_t, coOrd );
-wIndex_t modifyCmdInx;
-wIndex_t joinCmdInx;
-wIndex_t tunnelCmdInx;
+extern wIndex_t modifyCmdInx;
+extern wIndex_t joinCmdInx;
+extern wIndex_t tunnelCmdInx;
/* ctodesgn.c */
void InitNewTurn( wMenu_p m );
@@ -308,7 +333,7 @@ STATUS_T ModifyRuler( wAction_t, coOrd );
/* dialogs */
void OutputBitMap( void );
-wDrawColor snapGridColor;
+extern wDrawColor snapGridColor;
addButtonCallBack_t ColorInit( void );
addButtonCallBack_t PrefInit( void );
@@ -330,9 +355,8 @@ void InitSnapGridButtons( void );
void SnapGridEnable( void );
void SnapGridShow( void );
void MapWindowShow( int state );
-wMenuToggle_p snapGridEnableMI;
-wMenuToggle_p snapGridShowMI;
-wMenuToggle_p mapShowMI;
+extern wMenuToggle_p snapGridEnableMI;
+extern wMenuToggle_p snapGridShowMI;
void ScaleLengthEnd( void );
void EnumerateList( long, FLOAT_T, char * );
@@ -343,6 +367,8 @@ void EnumerateEnd(void);
void DoNote( void );
BOOL_T WriteMainNote( FILE * );
+BOOL_T ReadMainNote(char * line);
+
/* dbench.c */
long GetBenchData( long, long );
wIndex_t GetBenchListIndex( long );
@@ -360,7 +386,7 @@ long BenchOutputOption( long );
DIST_T BenchGetWidth( long );
/* dcustmgm.c */
-FILE * customMgmF;
+extern FILE * customMgmF;
#define CUSTMGM_DO_COPYTO (1)
#define CUSTMGM_CAN_EDIT (2)
#define CUSTMGM_DO_EDIT (3)
@@ -389,6 +415,7 @@ void ContMgmLoad (wIcon_p,contMgmCallBack_p,void *);
/* dlayer.c */
void LayerSetCounts();
+int FindUnusedLayer(unsigned int start);
void DecrementLayerObjects(unsigned int index);
void IncrementLayerObjects(unsigned int index);
@@ -418,4 +445,8 @@ void InitCmdControl ( wMenu_p menu );
/* csensor.c */
void SensorMgmLoad ( void );
void InitCmdSensor ( wMenu_p menu );
+/* cmodify.c */
+STATUS_T CmdModify(wAction_t action,coOrd pos );
+
+
#endif
diff --git a/app/bin/misc2.c b/app/bin/misc2.c
index 0dbb57d..19226cc 100644
--- a/app/bin/misc2.c
+++ b/app/bin/misc2.c
@@ -53,15 +53,17 @@
EXPORT long units = 0; /**< measurement units: 0 = English, 1 = metric */
EXPORT long checkPtInterval = 10;
+EXPORT long autosaveChkPoints = 2;
EXPORT DIST_T curScaleRatio;
EXPORT char * curScaleName;
EXPORT DIST_T trackGauge;
EXPORT long labelScale = 8;
-EXPORT long labelEnable = ((1<<0)|LABELENABLE_LENGTHS|LABELENABLE_ENDPT_ELEV|LABELENABLE_CARS);
+EXPORT long labelEnable = (LABELENABLE_ENDPT_ELEV|LABELENABLE_CARS);
EXPORT long labelWhen = 2;
-EXPORT long colorLayers = 0;
-EXPORT long zoomCorner = 0;
+EXPORT long colorTrack = 0;
+EXPORT long colorDraw = 0;
+EXPORT long constrainMain = 0;
EXPORT long hideSelectionWindow = 0;
EXPORT long angleSystem = 0;
EXPORT DIST_T minLength = 0.1;
@@ -156,10 +158,6 @@ EXPORT void DoChangeNotification( long changes )
*
*/
-
-#define SCALE_ANY (-2)
-#define SCALE_DEMO (-1)
-
typedef struct {
char * scale;
DIST_T ratio;
@@ -467,7 +465,9 @@ SetScale( SCALEINX_T newScaleInx )
SetScaleDescGauge((SCALEINX_T)newScaleInx);
- wPrefSetString( "misc", "scale", curScaleName );
+
+ if (!inPlayback)
+ wPrefSetString( "misc", "scale", curScaleName );
// now load the minimum radius for the newly selected scale
LoadLayoutMinRadiusPref(curScaleName, curScale->R[0]);
diff --git a/app/bin/misc2.h b/app/bin/misc2.h
index d616ad8..966f75b 100644
--- a/app/bin/misc2.h
+++ b/app/bin/misc2.h
@@ -42,7 +42,7 @@ typedef struct {
} logTable_t;
extern dynArr_t logTable_da;
#define logTable(N) DYNARR_N( logTable_t, logTable_da, N )
-time_t logClock;
+extern time_t logClock;
void LogOpen( char * );
void LogClose( void );
void LogSet( char *, int );
@@ -85,13 +85,19 @@ void LoadGaugeList( wList_p, SCALEDESCINX_T );
BOOL_T CompatibleScale( BOOL_T, SCALEINX_T, SCALEINX_T );
BOOL_T DoSetScaleDesc( void );
-unsigned int curLayer;
-long layerCount;
+extern unsigned int curLayer;
+extern long layerCount;
+void SetCurrLayer(wIndex_t inx, const char * name, wIndex_t op,
+ void * listContext, void * arg);
wDrawColor GetLayerColor( unsigned int );
+BOOL_T GetLayerUseColor( unsigned int);
BOOL_T GetLayerVisible( unsigned int );
BOOL_T GetLayerFrozen( unsigned int );
BOOL_T GetLayerOnMap( unsigned int );
+BOOL_T GetLayerModule( unsigned int );
+void SetLayerModule(unsigned int, BOOL_T);
char * GetLayerName( unsigned int );
+void SetLayerName(unsigned int layer, char* name);
BOOL_T ReadLayers( char * );
BOOL_T WriteLayers( FILE * );
char * FormatLayerName(unsigned int layerNumber);
@@ -103,7 +109,7 @@ void SaveLayers( void );
void RestoreLayers( void );
void LoadLayerLists( void );
addButtonCallBack_t InitLayersDialog( void );
-
+void FillLayerList(wList_p layerList);
void Misc2Init( void );
#endif
diff --git a/app/bin/note.h b/app/bin/note.h
new file mode 100644
index 0000000..315823f
--- /dev/null
+++ b/app/bin/note.h
@@ -0,0 +1,110 @@
+/** \file note.h
+ * Common definitions for notes
+ */
+
+ /* XTrkCad - Model Railroad CAD
+ * Copyright (C) 2018 Martin Fischer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef HAVE_NOTE_H
+#define HAVE_NOTE_H
+#include <stdbool.h>
+#include "track.h"
+
+#define URLMAXIMUMLENGTH (512)
+#define PATHMAXIMUMLENGTH (2048)
+#define TITLEMAXIMUMLENGTH (81)
+
+#define MYMIN(x, y) (((x) < (y)) ? (x) : (y))
+
+#define DELIMITER "--|--"
+
+enum noteCommands {
+ OP_NOTETEXT,
+ OP_NOTELINK,
+ OP_NOTEFILE
+};
+
+/** hold the data for the note */
+struct extraDataNote {
+ coOrd pos; /**< position */
+ unsigned int layer;
+ enum noteCommands op; /**< note type */
+ track_p trk; /**< track */
+ union {
+ char * text; /**< used for text only note */
+ struct {
+ char *title;
+ char *url;
+ } linkData; /**< used for link note */
+ struct {
+ char *path;
+ char *title;
+ BOOL_T inArchive;
+ } fileData; /**< used for file note */
+ } noteData;
+};
+
+//struct noteTextData {
+// coOrd pos;
+// unsigned int layer;
+// char *text;
+// track_p trk;
+//};
+
+struct noteLinkData {
+ coOrd pos;
+ unsigned int layer;
+ char title[TITLEMAXIMUMLENGTH];
+ char url[URLMAXIMUMLENGTH];
+ track_p trk;
+};
+
+struct noteFileData {
+ coOrd pos;
+ unsigned int layer;
+ char title[TITLEMAXIMUMLENGTH];
+ char path[PATHMAXIMUMLENGTH];
+ track_p trk;
+ BOOL_T inArchive;
+};
+
+enum { OR_NOTE, LY_NOTE, TX_TEXT, OK_TEXT, TITLE_LINK, TX_LINK, OK_LINK, TITLE_FILE, OK_FILE, CANCEL_NOTE };
+
+/* linknoteui.c */
+void NewLinkNoteUI(track_p trk);
+BOOL_T IsLinkNote(track_p trk);
+void DescribeLinkNote(track_p trk, char * str, CSIZE_T len);
+void ActivateLinkNote(track_p trk);
+
+/* filenozeui.c */
+void NewFileNoteUI(track_p trk);
+BOOL_T IsFileNote(track_p trk);
+void DescribeFileNote(track_p trk, char * str, CSIZE_T len);
+void ActivateFileNote(track_p trk);
+
+/* textnoteui.c */
+void NewTextNoteUI(track_p trk);
+void DescribeTextNote(track_p trk, char * str, CSIZE_T len);
+
+/* trknote.c */
+void NoteStateSave(track_p trk);
+
+void UpdateFile(struct extraDataNote *noteUIData, int inx, BOOL_T needUndoStart);
+void UpdateText(struct extraDataNote *noteUIData, int inx, BOOL_T needUndoStart);
+void UpdateLink(struct extraDataNote *noteUIData, int inx, BOOL_T needUndoStart);
+#endif // !HAVE_NOTE_H
diff --git a/app/bin/param.c b/app/bin/param.c
index 2f54d77..27a8cf9 100644
--- a/app/bin/param.c
+++ b/app/bin/param.c
@@ -766,63 +766,100 @@ EXPORT long ParamUpdate(
}
-EXPORT void ParamLoadData(
- paramGroup_p pg )
+void ParamLoadData(
+ paramGroup_p pg)
{
- FLOAT_T floatV;
- const char * stringV;
- paramData_p p;
- BOOL_T valid;
+ FLOAT_T floatV;
+ const char * stringV;
+ paramData_p p;
+ BOOL_T valid;
+ BOOL_T inRange;
+
+ for (p=pg->paramPtr; p<&pg->paramPtr[pg->paramCnt]; p++) {
+ if ((p->option&PDO_DLGIGNORE) != 0) {
+ continue;
+ }
- for ( p=pg->paramPtr; p<&pg->paramPtr[pg->paramCnt]; p++ ) {
- if ( (p->option&PDO_DLGIGNORE) != 0 )
- continue;
- if ( p->control == NULL || p->valueP == NULL)
- continue;
- switch ( p->type ) {
- case PD_LONG:
- stringV = wStringGetValue( (wString_p)p->control );
- *(long*)p->valueP = atol( stringV );
- break;
- case PD_RADIO:
- *(long*)p->valueP = wRadioGetValue( (wChoice_p)p->control );
- break;
- case PD_TOGGLE:
- *(long*)p->valueP = wToggleGetValue( (wChoice_p)p->control );
- break;
- case PD_LIST:
- case PD_DROPLIST:
- case PD_COMBOLIST:
- *(wIndex_t*)p->valueP = wListGetIndex( (wList_p)p->control );
- break;
- case PD_COLORLIST:
- *(wDrawColor*)p->valueP = wColorSelectButtonGetColor( (wButton_p)p->control );
- break;
- case PD_FLOAT:
- if (p->option & PDO_DIM) {
- floatV = DecodeDistance( (wString_p)p->control, &valid );
- } else {
- floatV = DecodeFloat( (wString_p)p->control, &valid );
- if (valid && (p->option & PDO_ANGLE) )
- floatV = NormalizeAngle( (angleSystem==ANGLE_POLAR)?floatV:-floatV );
- }
- if ( valid )
- *(FLOAT_T*)p->valueP = floatV;
- break;
- case PD_STRING:
- stringV = wStringGetValue( (wString_p)p->control );
- strcpy( (char*)p->valueP, stringV );
- break;
- case PD_MESSAGE:
- case PD_BUTTON:
- case PD_DRAW:
- case PD_TEXT:
- case PD_MENU:
- case PD_MENUITEM:
- case PD_BITMAP:
- break;
- }
- }
+ if (p->control == NULL || p->valueP == NULL) {
+ continue;
+ }
+
+ switch (p->type) {
+ long longV;
+
+ case PD_LONG:
+ longV = atol(wStringGetValue((wString_p)p->control));
+
+ if (p->winData) {
+ inRange = (longV <= ((paramIntegerRange_t *)p->winData)->high) &&
+ (longV >= ((paramIntegerRange_t *)p->winData)->low);
+ } else {
+ inRange = TRUE;
+ }
+
+ if (inRange) {
+ *(long*)p->valueP = longV;
+ }
+
+ break;
+
+ case PD_RADIO:
+ *(long*)p->valueP = wRadioGetValue((wChoice_p)p->control);
+ break;
+
+ case PD_TOGGLE:
+ *(long*)p->valueP = wToggleGetValue((wChoice_p)p->control);
+ break;
+
+ case PD_LIST:
+ case PD_DROPLIST:
+ case PD_COMBOLIST:
+ *(wIndex_t*)p->valueP = wListGetIndex((wList_p)p->control);
+ break;
+
+ case PD_COLORLIST:
+ *(wDrawColor*)p->valueP = wColorSelectButtonGetColor((wButton_p)p->control);
+ break;
+
+ case PD_FLOAT:
+ if (p->option & PDO_DIM) {
+ floatV = DecodeDistance((wString_p)p->control, &valid);
+ } else {
+ floatV = DecodeFloat((wString_p)p->control, &valid);
+
+ if (valid && (p->option & PDO_ANGLE)) {
+ floatV = NormalizeAngle((angleSystem==ANGLE_POLAR)?floatV:-floatV);
+ }
+ }
+
+ if (p->winData) {
+ inRange = (floatV <= ((paramFloatRange_t *)p->winData)->high) &&
+ (floatV >= ((paramFloatRange_t *)p->winData)->low);
+ } else {
+ inRange = TRUE;
+ }
+
+ if (valid && inRange) {
+ *(FLOAT_T*)p->valueP = floatV;
+ }
+
+ break;
+
+ case PD_STRING:
+ stringV = wStringGetValue((wString_p)p->control);
+ strcpy((char*)p->valueP, stringV);
+ break;
+
+ case PD_MESSAGE:
+ case PD_BUTTON:
+ case PD_DRAW:
+ case PD_TEXT:
+ case PD_MENU:
+ case PD_MENUITEM:
+ case PD_BITMAP:
+ break;
+ }
+ }
}
@@ -1348,13 +1385,24 @@ static void ParamIntegerPush( const char * val, void * dp )
paramData_p p = (paramData_p)dp;
long valL;
char * cp;
+ const char * value;
paramIntegerRange_t * irangeP;
- while ( isspace((unsigned char)*val)) val++;
- valL = strtol( val, &cp, 10 );
+ if (strlen(val) == 1 && val[strlen(val)-1] == '\n' && (p->option & BO_ENTER)) {
+ value = wStringGetValue((wString_p)p->control);
+ p->enter_pressed = TRUE;
+ } else {
+ p->enter_pressed = FALSE;
+ value = CAST_AWAY_CONST val;
+ }
+
+
+ while ( isspace((unsigned char)*value)) value++;
+ valL = strtol( value, &cp, 10 );
+
//wControlSetBalloon( p->control, 0, -5, NULL );
- if ( val == cp ) {
+ if ( value == cp ) {
wControlSetBalloon( p->control, 0, -5, _("Invalid Number") );
return;
}
@@ -1396,7 +1444,15 @@ static void ParamFloatPush( const char * val, void * dp )
paramData_p p = (paramData_p)dp;
FLOAT_T valF;
BOOL_T valid;
+ const char * value;
paramFloatRange_t * frangeP;
+ if (strlen(val) == 1 && val[strlen(val)-1] == '\n' && (p->option & PDO_ENTER)) {
+ value = wStringGetValue((wString_p)p->control);
+ p->enter_pressed = TRUE;
+ } else {
+ value = val;
+ p->enter_pressed = FALSE;
+ }
if (p->option & PDO_DIM) {
valF = DecodeDistance( (wString_p)p->control, &valid );
@@ -1434,7 +1490,7 @@ static void ParamFloatPush( const char * val, void * dp )
}
if ( (p->option&PDO_NOPSHUPD)==0 && p->valueP)
*((FLOAT_T*)(p->valueP)) = valF;
- if ( (p->option&PDO_NOPSHACT)==0 && p->group->changeProc && strlen( val ))
+ if ( (p->option&PDO_NOPSHACT)==0 && p->group->changeProc && strlen( value ))
p->group->changeProc( p->group, p-p->group->paramPtr, &valF );
}
@@ -1442,14 +1498,23 @@ static void ParamFloatPush( const char * val, void * dp )
static void ParamStringPush( const char * val, void * dp )
{
paramData_p p = (paramData_p)dp;
+ const char * value;
if (recordF && (p->option&PDO_NORECORD)==0 && p->group->nameStr && p->nameStr) {
fprintf( recordF, "PARAMETER %s %s %s\n", p->group->nameStr, p->nameStr, val );
fflush( recordF );
}
+ if (strlen(val) == 1 && val[strlen(val)-1] == '\n' && (p->option & PDO_ENTER)) {
+ value = wStringGetValue((wString_p)p->control);
+ p->enter_pressed = TRUE;
+ } else {
+ p->enter_pressed = FALSE;
+ value = CAST_AWAY_CONST val;
+ }
+
if ( (p->option&PDO_NOPSHUPD)==0 && p->valueP)
- strcpy( (char*)p->valueP, val );
+ strcpy( (char*)p->valueP, value );
if ( (p->option&PDO_NOPSHACT)==0 && p->group->changeProc)
- p->group->changeProc( p->group, p-p->group->paramPtr, CAST_AWAY_CONST val );
+ p->group->changeProc( p->group, p-p->group->paramPtr, CAST_AWAY_CONST value );
}
@@ -1495,6 +1560,15 @@ EXPORT void ParamMenuPush( void * dp )
static void ParamColorSelectPush( void * dp, wDrawColor dc )
{
paramData_p p = (paramData_p)dp;
+ long rgb = wDrawGetRGB( dc );
+ while ( dc == drawColorPreviewSelected || dc == drawColorPreviewUnselected ) {
+ // The user picked a special color, tweak it
+ rgb -= 1; // Make it very close but different
+ if ( ( rgb & 0xFF ) == 0 )
+ // Ran out of room - bail
+ break;
+ dc = wDrawFindColor( rgb );
+ }
if (recordF && (p->option&PDO_NORECORD)==0 && p->group->nameStr && p->nameStr) {
fprintf( recordF, "PARAMETER %s %s %ld\n", p->group->nameStr, p->nameStr, wDrawGetRGB(dc) );
fflush( recordF );
@@ -1827,13 +1901,19 @@ static void ParamPlayback( char * line )
pg->changeProc( pg, inx, &valF );
break;
case PD_STRING:
+ case PD_TEXT:
line += len;
while ( *line == ' ' ) line++;
Stripcr( line );
if (p->valueP)
strcpy( (char*)p->valueP, line );
if (p->control) {
- wStringSetValue( (wString_p)p->control, line );
+ if (p->type == PD_STRING) {
+ wStringSetValue((wString_p)p->control, line);
+ } else {
+ wTextClear((wText_p)p->control);
+ wTextAppend((wText_p)p->control, line);
+ }
wFlush();
}
if (pg->changeProc)
@@ -1849,7 +1929,6 @@ static void ParamPlayback( char * line )
PlaybackMouse( ddp->action, ddp->d, a, pos, drawColorBlack );
break;
case PD_MESSAGE:
- case PD_TEXT:
case PD_MENU:
case PD_BITMAP:
break;
@@ -2429,7 +2508,7 @@ SkipControl:
if ( group->boxs == NULL ) {
group->boxs = (wBox_p*)MyMalloc( boxCnt * sizeof *(wBox_p*)0 );
for ( box=0; box<boxCnt; box++ ) {
- group->boxs[box] = wBoxCreate( group->win, DlgSepLeft, boxTop, NULL, wBoxBelow, columnK.term.x, boxPos[box]-boxTop );
+ group->boxs[box] = wBoxCreate( group->win, DlgSepLeft, boxTop, NULL, wBoxThickW, columnK.term.x, boxPos[box]-boxTop );
boxTop = boxPos[box] + 4;
}
} else {
@@ -2503,7 +2582,10 @@ static void ParamDlgProc(
DefaultProc( win, wClose_e, data );
break;
case wResize_e:
- LayoutControls( pg, ParamPositionControl, NULL, NULL );
+ if (win == mapW)
+ pg->changeProc(pg, wResize_e, NULL);
+ else
+ LayoutControls( pg, ParamPositionControl, NULL, NULL );
break;
default:
break;
@@ -2544,6 +2626,7 @@ wWin_p ParamCreateDialog(
group->cancelProc = cancelProc;
group->layoutProc = layoutProc;
group->changeProc = changeProc;
+ group->winOption = winOption;
if ( (winOption&F_CENTER) == 0 )
winOption |= F_RECALLPOS;
if ( (winOption&F_RESIZE) != 0 )
diff --git a/app/bin/param.h b/app/bin/param.h
index 243bd1b..414dae3 100644
--- a/app/bin/param.h
+++ b/app/bin/param.h
@@ -58,6 +58,7 @@ typedef enum {
#define PDO_MISC (1L<<7)
#define PDO_DRAW (1L<<8)
#define PDO_FILE (1L<<9)
+#define PDO_ENTER (1L<<10)
#define PDO_STRINGLIMITLENGTH (1L<<11) /**< context has maximum length for string */
#define PDO_SMALLDIM (1L<<12)
@@ -142,6 +143,7 @@ typedef struct {
wControl_p control;
paramGroup_p group;
paramOldData_t oldD, demoD;
+ wBool_t enter_pressed;
} paramData_t, *paramData_p;
diff --git a/app/bin/paramfile.c b/app/bin/paramfile.c
new file mode 100644
index 0000000..2dd9ac7
--- /dev/null
+++ b/app/bin/paramfile.c
@@ -0,0 +1,393 @@
+/** \file paramfile.c
+ * Handling of parameter files
+ */
+
+ /* XTrackkCad - Model Railroad CAD
+ * Copyright (C) 2019 Martin Fischer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "common.h"
+#include "compound.h"
+#include "ctrain.h"
+#include "custom.h"
+#include "fileio.h"
+#include "i18n.h"
+#include "layout.h"
+#include "messages.h"
+#include "misc2.h"
+#include "paths.h"
+#include "include/paramfile.h"
+#include "include/paramfilelist.h"
+#include "include/utf8convert.h"
+
+#if _MSC_VER >1300
+#define stricmp( a, b ) _stricmp(a, b )
+#endif
+
+static long paramCheckSum;
+
+typedef enum paramFileState(*GetCompatibilityFunction)(int index,
+ SCALEINX_T scale);
+
+GetCompatibilityFunction GetCompatibility[] = {
+ GetTrackCompatibility,
+ GetStructureCompatibility,
+ GetCarProtoCompatibility,
+ GetCarPartCompatibility
+};
+
+#define COMPATIBILITYCHECKSCOUNT (sizeof(GetCompatibility)/sizeof(GetCompatibility[0]))
+
+/**
+ * Check whether parameter file is still loaded
+ *
+ * \param fileInx
+ * \return TRUE if loaded, FALSE otherwise
+ */
+
+wBool_t IsParamValid(
+ int fileInx)
+{
+ if (fileInx == PARAM_DEMO) {
+ return (curDemo >= 0);
+ } else if (fileInx == PARAM_CUSTOM) {
+ return TRUE;
+ } else if (fileInx == PARAM_LAYOUT) {
+ return TRUE;
+ } else if (fileInx >= 0 && fileInx < paramFileInfo_da.cnt) {
+ return (!paramFileInfo(fileInx).deleted);
+ } else {
+ return FALSE;
+ }
+}
+
+char *GetParamFileDir(void)
+{
+ return (GetCurrentPath(PARAMETERPATHKEY));
+}
+
+void
+SetParamFileDir(char *fullPath)
+{
+ SetCurrentPath(PARAMETERPATHKEY, fullPath);
+}
+
+char * GetParamFileName(
+ int fileInx)
+{
+ return paramFileInfo(fileInx).name;
+}
+
+char * GetParamFileContents(
+ int fileInx)
+{
+ return paramFileInfo(fileInx).contents;
+}
+
+bool IsParamFileDeleted(int inx)
+{
+ return paramFileInfo(inx).deleted;
+}
+
+bool IsParamFileFavorite(int inx)
+{
+ return paramFileInfo(inx).favorite;
+}
+
+void SetParamFileDeleted(int fileInx, bool deleted)
+{
+ paramFileInfo(fileInx).deleted = deleted;
+}
+
+void SetParamFileFavorite(int fileInx, bool favorite)
+{
+ paramFileInfo(fileInx).favorite = favorite;
+}
+
+void ParamCheckSumLine(char * line)
+{
+ long mult = 1;
+ while (*line) {
+ paramCheckSum += (((long)(*line++)) & 0xFF)*(mult++);
+ }
+}
+
+/**
+ * Set the compatibility state of a parameter file
+ *
+ * \param index parameter file number in list
+ * \return
+ */
+
+void SetParamFileState(int index)
+{
+ enum paramFileState state = PARAMFILE_NOTUSABLE;
+ enum paramFileState newState;
+ SCALEINX_T scale = GetLayoutCurScale();
+
+ for (int i = 0; i < COMPATIBILITYCHECKSCOUNT && state < PARAMFILE_FIT &&
+ state != PARAMFILE_UNLOADED; i++) {
+ newState = (*GetCompatibility[i])(index, scale);
+ if (newState > state || newState == PARAMFILE_UNLOADED) {
+ state = newState;
+ }
+ }
+
+ paramFileInfo(index).trackState = state;
+}
+
+/**
+ * Read a single parameter file and update the parameter file list
+ *
+ * \param fileName full path for parameter file
+ * \return
+ */
+
+int
+ReadParamFile(const char *fileName)
+{
+ DYNARR_APPEND(paramFileInfo_t, paramFileInfo_da, 10);
+ curParamFileIndex = paramFileInfo_da.cnt - 1;
+ paramFileInfo(curParamFileIndex).name = MyStrdup(fileName);
+ paramFileInfo(curParamFileIndex).valid = TRUE;
+ paramFileInfo(curParamFileIndex).deleted = !ReadParams(0, NULL, fileName);
+ paramFileInfo(curParamFileIndex).contents = MyStrdup(curContents);
+
+ SetParamFileState(curParamFileIndex);
+
+ return (curParamFileIndex);
+}
+
+/**
+ * Reload a single parameter file that had been unloaded before.
+ *
+ * \param fileindex index of previously created paramFileInfo
+ *
+ * \returns
+ */
+
+int
+ReloadDeletedParamFile(int fileindex)
+{
+ curParamFileIndex = fileindex;
+ paramFileInfo(curParamFileIndex).valid = TRUE;
+ paramFileInfo(curParamFileIndex).deleted = !ReadParams(0, NULL, paramFileInfo(curParamFileIndex).name);
+ paramFileInfo(curParamFileIndex).contents = MyStrdup(curContents);
+
+ SetParamFileState(curParamFileIndex);
+
+ return (curParamFileIndex);
+}
+
+/**
+ * Parameter file reader and interpreter
+ *
+ * \param key unused
+ * \param dirName prefix for parameter file path
+ * \param fileName name of parameter file
+ * \return
+ */
+
+bool ReadParams(
+ long key,
+ const char * dirName,
+ const char * fileName)
+{
+ FILE * oldFile;
+ char *cp;
+ wIndex_t oldLineNum;
+ wIndex_t pc;
+ long oldCheckSum;
+ long checkSum = 0;
+ BOOL_T checkSummed;
+ paramVersion = -1;
+ char *oldLocale = NULL;
+
+ if (dirName) {
+ MakeFullpath(&paramFileName, dirName, fileName, NULL);
+ } else {
+ MakeFullpath(&paramFileName, fileName, NULL);
+ }
+ paramLineNum = 0;
+ curBarScale = -1;
+ curContents = MyStrdup(fileName);
+ curSubContents = curContents;
+
+ //LOG1( log_paramFile, ("ReadParam( %s )\n", fileName ) )
+
+ oldLocale = SaveLocale("C");
+
+ paramFile = fopen(paramFileName, "r");
+ if (paramFile == NULL) {
+ /* Reset the locale settings */
+ RestoreLocale(oldLocale);
+
+ NoticeMessage(MSG_OPEN_FAIL, _("Continue"), NULL, _("Parameter"), paramFileName,
+ strerror(errno));
+
+ return FALSE;
+ }
+ paramCheckSum = key;
+ paramLineNum = 0;
+ checkSummed = FALSE;
+ BOOL_T skip = false;
+ int skipLines = 0;
+ while (paramFile && (fgets(paramLine, 256, paramFile)) != NULL) {
+ paramLineNum++;
+ Stripcr(paramLine);
+ if (strncmp(paramLine, "CHECKSUM ", 9) == 0) {
+ checkSum = atol(paramLine + 9);
+ checkSummed = TRUE;
+ goto nextLine;
+ }
+ ParamCheckSumLine(paramLine);
+ if (paramLine[0] == '#') {
+ /* comment */
+ } else if (paramLine[0] == 0) {
+ /* empty paramLine */
+ } else if (strncmp(paramLine, "INCLUDE ", 8) == 0) {
+ cp = &paramLine[8];
+ while (*cp && isspace((unsigned char)*cp)) {
+ cp++;
+ }
+ if (!*cp) {
+ InputError("INCLUDE - no file name", TRUE);
+
+ /* Close file and reset the locale settings */
+ if (paramFile) {
+ fclose(paramFile);
+ }
+ RestoreLocale(oldLocale);
+
+ return FALSE;
+ }
+ oldFile = paramFile;
+ oldLineNum = paramLineNum;
+ oldCheckSum = paramCheckSum;
+ if (!ReadParams(key, dirName, cp)) {
+ RestoreLocale(oldLocale);
+ return FALSE;
+ }
+ paramFile = oldFile;
+ paramLineNum = oldLineNum;
+ paramCheckSum = oldCheckSum;
+ if (dirName) {
+ MakeFullpath(&paramFileName, dirName, fileName, NULL);
+ } else {
+ MakeFullpath(&paramFileName, fileName);
+ }
+ skip = FALSE;
+ } else if (strncmp(paramLine, "CONTENTS ", 9) == 0) {
+#ifdef WINDOWS
+ ConvertUTF8ToSystem(paramLine + 9);
+#endif
+ curContents = MyStrdup(paramLine + 9);
+ curSubContents = curContents;
+ skip = FALSE;
+ } else if (strncmp(paramLine, "SUBCONTENTS ", 12) == 0) {
+#ifdef WINDOWS
+ ConvertUTF8ToSystem(paramLine + 12);
+#endif // WINDOWS
+ curSubContents = MyStrdup(paramLine + 12);
+ skip = FALSE;
+ } else if (strncmp(paramLine, "PARAM ", 6) == 0) {
+ paramVersion = strtol(paramLine + 8, &cp, 10);
+ if (cp)
+ while (*cp && isspace((unsigned char)*cp)) cp++;
+ if (paramVersion > iParamVersion) {
+ if (cp && *cp) {
+ NoticeMessage(MSG_PARAM_UPGRADE_VERSION1, _("Ok"), NULL, paramVersion, iParamVersion, sProdName, cp);
+ } else {
+ NoticeMessage(MSG_PARAM_UPGRADE_VERSION2, _("Ok"), NULL, paramVersion, iParamVersion, sProdName);
+ }
+ break;
+ }
+ if (paramVersion < iMinParamVersion) {
+ NoticeMessage(MSG_PARAM_BAD_FILE_VERSION, _("Ok"), NULL, paramVersion, iMinParamVersion, sProdName);
+ break;
+ }
+ } else if (skip && (strncmp(paramLine, " ", 1) == 0)) {
+ //Always skip to next line starting in LeftHandColumn
+ skipLines++;
+ goto nextLine;
+ } else {
+ for (pc = 0; pc < paramProc_da.cnt; pc++) {
+ if (strncmp(paramLine, paramProc(pc).name,
+ strlen(paramProc(pc).name)) == 0) {
+ skip = FALSE; //Stop skip so we re-message
+ paramProc(pc).proc(paramLine);
+ goto nextLine;
+ }
+ }
+ if (!skip) {
+ if (InputError(_("Unknown param file line - skip until next good object?"), TRUE)) { //OK to carry on
+ /* SKIP until next main line we recognize */
+ skip = TRUE;
+ skipLines++;
+ goto nextLine;
+ } else {
+ if (skipLines > 0)
+ NoticeMessage(MSG_PARAM_LINES_SKIPPED, _("Ok"), NULL, paramFileName, skipLines);
+ if (paramFile) {
+ fclose(paramFile);
+ paramFile = NULL;
+ }
+ if (paramFileName) {
+ free(paramFileName);
+ paramFileName = NULL;
+ }
+ RestoreLocale(oldLocale);
+ return FALSE;
+ }
+ }
+ skipLines++;
+ }
+ nextLine:
+ ;
+ }
+ if (key) {
+ if (!checkSummed || checkSum != paramCheckSum) {
+ /* Close file and reset the locale settings */
+ if (paramFile) {
+ fclose(paramFile);
+ }
+ RestoreLocale(oldLocale);
+
+ NoticeMessage(MSG_PROG_CORRUPTED, _("Ok"), NULL, paramFileName);
+
+ return FALSE;
+ }
+ }
+ if (skipLines > 0)
+ NoticeMessage(MSG_PARAM_LINES_SKIPPED, _("Ok"), NULL, paramFileName, skipLines);
+ if (paramFile) {
+ fclose(paramFile);
+ }
+ free(paramFileName);
+ paramFileName = NULL;
+ RestoreLocale(oldLocale);
+
+ return TRUE;
+}
diff --git a/app/bin/paramfilelist.c b/app/bin/paramfilelist.c
new file mode 100644
index 0000000..199345c
--- /dev/null
+++ b/app/bin/paramfilelist.c
@@ -0,0 +1,496 @@
+/** \file paramfilelist.c
+ * Handling of the list of parameter files
+ */
+
+/* XTrackCad - Model Railroad CAD
+ * Copyright (C) 2019 Martin Fischer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+
+#include <assert.h>
+#include <errno.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "common.h"
+#include "compound.h"
+#include "ctrain.h"
+#include "custom.h"
+#include "dynstring.h"
+#include "fileio.h"
+#include "i18n.h"
+#include "layout.h"
+#include "messages.h"
+#include "misc2.h"
+#include "paths.h"
+#include "include/paramfile.h"
+#include "include/paramfilelist.h"
+
+
+dynArr_t paramFileInfo_da;
+
+int curParamFileIndex = PARAM_DEMO;
+
+static int log_params;
+
+static char * customPath;
+static char * customPathBak;
+
+#define FAVORITESECTION "Parameter File Favorites"
+#define FAVORITETOTALS "Total"
+#define FAVORITEKEY "Favorite%d"
+#define FAVORITEDELETED "Deleted%d"
+
+int GetParamFileCount()
+{
+ return (paramFileInfo_da.cnt);
+}
+
+
+
+
+/**
+ * Update the configuration file in case the name of a parameter file has changed.
+ * The function reads a list of new parameter filenames and gets the contents
+ * description for each file. If that contents is in use, i.e. is a loaded parameter
+ * file, the setting in the config file is updated to the new filename.
+ * First line of update file has the date of the update file.
+ * * Following lines have filenames, one per line.
+ *
+ * \return FALSE if update not possible or not necessary, TRUE if update successful
+ */
+
+static BOOL_T UpdateParamFiles(void)
+{
+ char fileName[STR_LONG_SIZE], *fileNameP;
+ const char * cp;
+ FILE * updateF;
+ long updateTime;
+ long lastTime;
+
+ MakeFullpath(&fileNameP, libDir, "xtrkcad.upd", NULL);
+ updateF = fopen(fileNameP, "r");
+ free(fileNameP);
+ if (updateF == NULL) {
+ return FALSE;
+ }
+ if (fgets(message, sizeof message, updateF) == NULL) {
+ NoticeMessage("short file: xtrkcad.upd", _("Ok"), NULL);
+ fclose(updateF);
+ return FALSE;
+ }
+ wPrefGetInteger("file", "updatetime", &lastTime, 0);
+ updateTime = atol(message);
+ if (lastTime >= updateTime) {
+ fclose(updateF);
+ return FALSE;
+ }
+
+ while ((fgets(fileName, STR_LONG_SIZE, updateF)) != NULL) {
+ FILE * paramF;
+ char * contents;
+
+ Stripcr(fileName);
+ InfoMessage(_("Updating %s"), fileName);
+ MakeFullpath(&fileNameP, libDir, "params", fileName, NULL);
+ paramF = fopen(fileNameP, "r");
+ if (paramF == NULL) {
+ NoticeMessage(MSG_PRMFIL_OPEN_NEW, _("Ok"), NULL, fileNameP);
+ free(fileNameP);
+ continue;
+ }
+ contents = NULL;
+ while ((fgets(message, sizeof message, paramF)) != NULL) {
+ if (strncmp(message, "CONTENTS", 8) == 0) {
+ Stripcr(message);
+ contents = message + 9;
+ break;
+ }
+ }
+ fclose(paramF);
+ if (contents == NULL) {
+ NoticeMessage(MSG_PRMFIL_NO_CONTENTS, _("Ok"), NULL, fileNameP);
+ free(fileNameP);
+ continue;
+ }
+ cp = wPrefGetString("Parameter File Map", contents);
+ wPrefSetString("Parameter File Map", contents, fileNameP);
+ if (cp != NULL && *cp != '\0') {
+ /* been there, done that */
+ free(fileNameP);
+ continue;
+ }
+
+ free(fileNameP);
+ }
+ fclose(updateF);
+ wPrefSetInteger("file", "updatetime", updateTime);
+ return TRUE;
+}
+
+/**
+ * Read the list of parameter files from configuration and load the files.
+ *
+ */
+void LoadParamFileList(void)
+{
+ int fileNo;
+ BOOL_T updated = FALSE;
+ long *favoriteList = NULL;
+ long favorites;
+ int nextFavorite = 0;
+
+ updated = UpdateParamFiles();
+
+ wPrefGetIntegerBasic(FAVORITESECTION, FAVORITETOTALS, &favorites, 0);
+ if (favorites) {
+ DynString topic;
+ favoriteList = MyMalloc(sizeof(long)*favorites);
+ if (!favoriteList) {
+ AbortProg("Couldn't allocate memory for favorite list!\n");
+ }
+
+ DynStringMalloc(&topic, 16);
+ for (int i = 0; i < favorites; i++) {
+ DynStringPrintf(&topic, FAVORITEKEY, i);
+ wPrefGetIntegerBasic(FAVORITESECTION, DynStringToCStr(&topic), &favoriteList[i],
+ 0);
+ }
+ DynStringFree(&topic);
+ }
+
+ for (fileNo = 1; ; fileNo++) {
+ char *fileName;
+ const char * contents;
+ enum paramFileState structState = PARAMFILE_UNLOADED;
+
+
+ sprintf(message, "File%d", fileNo);
+ contents = wPrefGetString("Parameter File Names", message);
+ if (contents == NULL || *contents == '\0') {
+ break;
+ }
+ InfoMessage("Parameters for %s", contents);
+ fileName = wPrefGetString("Parameter File Map", contents);
+ if (fileName == NULL || *fileName == '\0') {
+ NoticeMessage(MSG_PRMFIL_NO_MAP, _("Ok"), NULL, contents);
+ continue;
+ }
+ char * share;
+
+ // Rewire to the latest system level
+ if ((share= strstr(fileName,"/share/xtrkcad/params/"))) {
+ share += strlen("/share/xtrkcad/params/");
+ MakeFullpath(&fileName, wGetAppLibDir(), "params", share, NULL);
+ wPrefSetString("Parameter File Map", contents, fileName);
+ }
+
+ ReadParamFile(fileName);
+
+ if (curContents == NULL) {
+ curContents = curSubContents = MyStrdup(contents);
+ }
+ paramFileInfo(curParamFileIndex).contents = curContents;
+ if (favoriteList && fileNo == favoriteList[nextFavorite]) {
+ DynString topic;
+ long deleted;
+ DynStringMalloc(&topic, 16);
+ DynStringPrintf(&topic, FAVORITEDELETED, fileNo);
+
+ wPrefGetIntegerBasic(FAVORITESECTION, DynStringToCStr(&topic), &deleted, 0L);
+ paramFileInfo(curParamFileIndex).favorite = TRUE;
+ paramFileInfo(curParamFileIndex).deleted = deleted;
+ if (nextFavorite < favorites - 1) {
+ nextFavorite++;
+ }
+ DynStringFree(&topic);
+ }
+
+ }
+ curParamFileIndex = PARAM_CUSTOM;
+ if (updated) {
+ SaveParamFileList();
+ }
+
+ MyFree(favoriteList);
+}
+
+/**
+ * Save the currently selected parameter files. Parameter files that have been unloaded
+ * are not saved.
+ *
+ */
+
+void SaveParamFileList(void)
+{
+ int fileInx;
+ int fileNo;
+ int favorites;
+ char * contents, *cp;
+
+ for (fileInx = 0, fileNo = 1, favorites = 0; fileInx < paramFileInfo_da.cnt;
+ fileInx++) {
+ if (paramFileInfo(fileInx).valid && (!paramFileInfo(fileInx).deleted ||
+ paramFileInfo(fileInx).favorite)) {
+ sprintf(message, "File%d", fileNo);
+ contents = paramFileInfo(fileInx).contents;
+ for (cp = contents; *cp; cp++) {
+ if (*cp == '=' || *cp == '\'' || *cp == '"' || *cp == ':' || *cp == '.') {
+ *cp = ' ';
+ }
+ }
+ wPrefSetString("Parameter File Names", message, contents);
+ wPrefSetString("Parameter File Map", contents, paramFileInfo(fileInx).name);
+ if (paramFileInfo(fileInx).favorite) {
+ sprintf(message, FAVORITEKEY, favorites);
+ wPrefSetInteger(FAVORITESECTION, message, fileNo);
+ sprintf(message, FAVORITEDELETED, fileNo);
+ wPrefSetInteger(FAVORITESECTION, message, paramFileInfo(fileInx).deleted);
+ favorites++;
+ }
+ fileNo++;
+ }
+ }
+ sprintf(message, "File%d", fileNo);
+ wPrefSetString("Parameter File Names", message, "");
+ wPrefSetInteger(FAVORITESECTION, FAVORITETOTALS, favorites);
+}
+
+void
+UpdateParamFileList(void)
+{
+ for (size_t i = 0; i < (unsigned)paramFileInfo_da.cnt; i++) {
+ SetParamFileState(i);
+ }
+}
+
+/**
+ * Load the selected parameter files. This is a callback executed when the file selection dialog
+ * is closed.
+ * Steps:
+ * - the parameters are read from file
+ * - check is performed to see whether the content is already present, if yes the previously
+ * loaded content is invalidated
+ * - loaded parameter file is added to list of parameter files
+ * - if a parameter file dialog exists the list is updated. It is either rewritten in
+ * in case of an invalidated file or the new file is appended
+ * - the settings are updated
+ * These steps are repeated for every file in list
+ *
+ * \param files IN the number of filenames in the fileName array
+ * \param fileName IN an array of fully qualified filenames
+ * \param data IN ignored
+ * \return TRUE on success, FALSE on error
+ */
+
+int LoadParamFile(
+ int files,
+ char ** fileName,
+ void * data)
+{
+ wIndex_t inx;
+ int i = 0;
+
+ assert(fileName != NULL);
+ assert(files > 0);
+
+ for (i = 0; i < files; i++) {
+ enum paramFileState structState = PARAMFILE_UNLOADED;
+ int newIndex;
+
+ curContents = curSubContents = NULL;
+
+ newIndex = ReadParamFile(fileName[i]);
+
+ // in case the contents is already present, make invalid
+ for (inx = 0; inx < newIndex; inx++) {
+ if (paramFileInfo(inx).valid &&
+ strcmp(paramFileInfo(inx).contents, curContents) == 0) {
+ paramFileInfo(inx).valid = FALSE;
+ break;
+ }
+ }
+
+ wPrefSetString("Parameter File Map", curContents,
+ paramFileInfo(curParamFileIndex).name);
+ }
+ //Only set the ParamFileDir if not the system directory
+ if (!strstr(fileName[i-1],"/share/xtrkcad/params/"))
+ SetParamFileDir(fileName[i - 1]);
+ curParamFileIndex = PARAM_CUSTOM;
+ DoChangeNotification(CHANGE_PARAMS);
+ return TRUE;
+}
+
+static void ReadCustom(void)
+{
+ FILE * f;
+ MakeFullpath(&customPath, workingDir, sCustomF, NULL);
+ customPathBak = MyStrdup(customPath);
+ customPathBak[ strlen(customPathBak)-1 ] = '1';
+ f = fopen(customPath, "r");
+ if (f != NULL) {
+ fclose(f);
+ curParamFileIndex = PARAM_CUSTOM;
+ ReadParams(0, workingDir, sCustomF);
+ }
+}
+
+
+/*
+ * Open the file and then set the locale to "C". Old locale will be copied to
+ * oldLocale. After the required file I/O is done, the caller must call
+ * CloseCustom() with the same locale value that was returned in oldLocale by
+ * this function.
+ */
+
+FILE * OpenCustom(char *mode)
+{
+ FILE * ret = NULL;
+
+ if (inPlayback) {
+ return NULL;
+ }
+ if (*mode == 'w') {
+ rename(customPath, customPathBak);
+ }
+ if (customPath) {
+ ret = fopen(customPath, mode);
+ if (ret == NULL) {
+ NoticeMessage(MSG_OPEN_FAIL, _("Continue"), NULL, _("Custom"), customPath,
+ strerror(errno));
+ }
+ }
+
+ return ret;
+}
+/**
+ * Update and open the parameter files dialog box
+ *
+ * \param junk
+ */
+
+static void DoParamFileListDialog(void *junk)
+{
+ DoParamFiles(junk);
+ ParamFileListLoad(paramFileInfo_da.cnt, &paramFileInfo_da);
+
+}
+
+addButtonCallBack_t ParamFilesInit(void)
+{
+ RegisterChangeNotification(ParamFilesChange);
+ return &DoParamFileListDialog;
+}
+
+/**
+ * Get the initial parameter files. The Xtrkcad.xtq file containing scale and
+ * demo definitions is read.
+ *
+ * \return FALSE on error, TRUE otherwise
+ */
+BOOL_T ParamFileListInit(void)
+{
+ log_params = LogFindIndex("params");
+
+ // get the default definitions
+ if (ReadParams(lParamKey, libDir, sParamQF) == FALSE) {
+ return FALSE;
+ }
+
+ curParamFileIndex = PARAM_CUSTOM;
+
+ if (lParamKey == 0) {
+ LoadParamFileList();
+ ReadCustom();
+ }
+
+ return TRUE;
+
+}
+
+/**
+ * Deletes all parameter types described by index
+ *
+ * \param index Zero-based index of the.
+ */
+
+static void
+DeleteAllParamTypes(int index)
+{
+
+ DeleteTurnoutParams(index);
+ DeleteCarProto(index);
+ DeleteCarPart(index);
+ DeleteStructures(index);
+}
+
+
+/**
+ * Unload parameter file: all parameter definitions from this file are deleted
+ * from memory. Strings allocated to store the filename and contents
+ * description are free'd as well.
+ * In order to keep the overall data structures consistent, the file info
+ * structure is not removed from the array but flagged as garbage
+ *
+ * \param fileIndex Zero-based index of the file.
+ *
+ * \returns True if it succeeds, false if it fails.
+ */
+
+bool
+UnloadParamFile(wIndex_t fileIndex)
+{
+ paramFileInfo_p paramFileI = &paramFileInfo(fileIndex);
+
+ DeleteAllParamTypes(fileIndex);
+
+ MyFree(paramFileI->name);
+ MyFree(paramFileI->contents);
+
+ paramFileI->valid = FALSE;
+
+ for (int i = 0; i < paramFileInfo_da.cnt; i++) {
+ LOG1(log_params, ("UnloadParamFiles: = %s: %d\n", paramFileInfo(i).contents,
+ paramFileInfo(i).trackState))
+ }
+
+ return (true);
+}
+
+/**
+ * Reload parameter file
+ *
+ * \param index Zero-based index of the paramFileInfo struct.
+ *
+ * \returns True if it succeeds, false if it fails.
+ */
+
+bool
+ReloadParamFile(wIndex_t index)
+{
+ paramFileInfo_p paramFileI = &paramFileInfo(index);
+
+ DeleteAllParamTypes(index);
+ MyFree(paramFileI->contents);
+
+ ReloadDeletedParamFile(index);
+
+ return(true);
+}
diff --git a/app/bin/paramfilesearch_ui.c b/app/bin/paramfilesearch_ui.c
new file mode 100644
index 0000000..bf9c47a
--- /dev/null
+++ b/app/bin/paramfilesearch_ui.c
@@ -0,0 +1,426 @@
+/** \file paramfilesearch_ui.c
+ * Parameter File Search Dialog
+ */
+
+/* XTrkCad - Model Railroad CAD
+ * Copyright (C) 2019 Martin Fischer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <assert.h>
+#include <ctype.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <string.h>
+
+#include "custom.h"
+#include "dynstring.h"
+#include "i18n.h"
+#include "messages.h"
+#include "param.h"
+#include "include/partcatalog.h"
+#include "paths.h"
+#include "include/paramfilelist.h"
+#include "fileio.h"
+#include "directory.h"
+
+#include "bitmaps/magnifier.xpm"
+
+static CatalogEntry *catalogFileBrowse; /**< current search results */
+static TrackLibrary *trackLibrary; /**< Track Library */
+static CatalogEntry *currentCat; /**< catalog being shown */
+
+/* define the search / browse dialog */
+
+static struct wFilSel_t *searchUi_fs; /**< searchdialog for parameter files */
+
+static void SearchUiBrowse(void *junk);
+static void SearchUiDefault(void * junk);
+static void SearchUiApply(wWin_p junk);
+static void SearchUiSelectAll(void *junk);
+static void SearchUiDoSearch(void *junk);
+
+static long searchUiMode = 0;
+static paramListData_t searchUiListData = { 10, 370, 0 };
+#define MAXQUERYLENGTH 250
+static char searchUiQuery[MAXQUERYLENGTH];
+static char * searchUiLabels[] = { N_("Show File Names"), NULL };
+
+static paramData_t searchUiPLs[] = {
+#define I_QUERYSTRING (0)
+ { PD_STRING, searchUiQuery, "query", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)(340), "", 0, 0, MAXQUERYLENGTH-1 },
+#define I_SEARCHBUTTON (1)
+ { PD_BUTTON, (void*)SearchUiDoSearch, "find", PDO_DLGHORZ, 0, NULL, BO_ICON, (void *)NULL },
+#define I_MESSAGE (2)
+ { PD_MESSAGE, N_("Enter at least one search word"), NULL, PDO_DLGBOXEND, (void *)370 },
+#define I_RESULTLIST (3)
+ { PD_LIST, NULL, "inx", PDO_NOPREF | PDO_DLGRESIZE, &searchUiListData, NULL, BL_DUP|BL_SETSTAY|BL_MANY },
+#define I_MODETOGGLE (4)
+ { PD_TOGGLE, &searchUiMode, "mode", PDO_DLGBOXEND, searchUiLabels, NULL, BC_HORZ|BC_NOBORDER },
+#define I_APPLYBUTTON (5)
+ { PD_BUTTON, (void *)SearchUiApply, "apply", PDO_DLGCMDBUTTON, NULL, N_("Add") },
+#define I_SELECTALLBUTTON (6)
+ { PD_BUTTON, (void*)SearchUiSelectAll, "selectall", PDO_DLGCMDBUTTON, NULL, N_("Select all") },
+ { PD_BUTTON, (void*)SearchUiDefault, "default", 0, NULL, N_("Reload Library") },
+};
+
+#define SEARCHBUTTON ((wButton_p)searchUiPLs[I_SEARCHBUTTON].control)
+#define RESULTLIST ((wList_p)searchUiPLs[I_RESULTLIST].control)
+#define APPLYBUTTON ((wButton_p)searchUiPLs[I_APPLYBUTTON].control)
+#define SELECTALLBUTTON ((wButton_p)searchUiPLs[I_SELECTALLBUTTON].control)
+#define MESSAGETEXT ((wMessage_p)searchUiPLs[I_MESSAGE].control)
+#define QUERYSTRING ((wString_p)searchUiPLs[I_QUERYSTRING].control)
+
+static paramGroup_t searchUiPG = { "searchgui", 0, searchUiPLs, sizeof searchUiPLs/sizeof searchUiPLs[0] };
+static wWin_p searchUiW;
+
+#define FILESECTION "file"
+#define PARAMDIRECTORY "paramdir"
+
+/**
+ * Reload the listbox showing the current catalog
+ */
+
+static
+void SearchFileListLoad(CatalogEntry *catalog)
+{
+ CatalogEntry *currentEntry = catalog->next;
+ DynString description;
+ DynStringMalloc(&description, STR_SHORT_SIZE);
+
+ wControlShow((wControl_p)RESULTLIST, FALSE);
+ wListClear(RESULTLIST);
+
+ while (currentEntry != currentEntry->next) {
+ for (unsigned int i=0;i<currentEntry->files;i++) {
+ DynStringClear(&description);
+ DynStringCatCStr(&description,
+ ((!searchUiMode) && currentEntry->contents) ?
+ currentEntry->contents :
+ currentEntry->fullFileName[i]);
+
+ wListAddValue(RESULTLIST,
+ DynStringToCStr(&description),
+ NULL,
+ // indicatorIcons[paramFileInfo.favorite][paramFileInfo.trackState],
+ (void*)currentEntry->fullFileName[i]);
+ }
+
+ currentEntry = currentEntry->next;
+ }
+
+ wControlShow((wControl_p)RESULTLIST, TRUE);
+ wControlActive((wControl_p)SELECTALLBUTTON,
+ wListGetCount(RESULTLIST));
+
+ DynStringFree(&description);
+
+ currentCat = catalog;
+}
+
+/**
+ * Find parameter files using the file selector
+ *
+ * \param junk
+ */
+
+static void SearchUiBrowse(void * junk)
+{
+
+ //EmptyCatalog(catalogFileBrowse);
+
+ wFilSelect(searchUi_fs, GetParamFileDir());
+
+ //SearchFileListLoad(catalogFileBrowse);
+
+ return;
+}
+
+
+/**
+ * Reload just the system files into the searchable set
+ */
+
+static void SearchUiDefault(void * junk)
+{
+
+ if (!catalogFileBrowse)
+ catalogFileBrowse = InitCatalog();
+ else {
+ EmptyCatalog(catalogFileBrowse);
+ }
+
+ if (trackLibrary)
+ DeleteLibrary(trackLibrary);
+
+ char * parms_path;
+
+ MakeFullpath(&parms_path, wGetAppLibDir(), "params", NULL);
+
+ trackLibrary = CreateLibrary(parms_path);
+
+ SearchFileListLoad(trackLibrary->catalog); //Start with system files
+
+ free(parms_path);
+
+}
+
+/**
+ * Load the selected items of search results
+ */
+
+void static
+SearchUILoadResults(void)
+{
+ char **fileNames;
+ int files = wListGetSelectedCount(RESULTLIST);
+ int found = 0;
+
+ if (files) {
+ fileNames = malloc(sizeof(char *)*files);
+ if (!fileNames) {
+ AbortProg("Couldn't allocate memory for result list: %s (%d)", __FILE__,
+ __LINE__, NULL);
+ }
+
+ for (int inx = 0; found < files; inx++) {
+ if (wListGetItemSelected(RESULTLIST, inx)) {
+ fileNames[found++] = (char *)wListGetItemContext(RESULTLIST, inx);
+ }
+ }
+
+ LoadParamFile(files, fileNames, NULL);
+ free(fileNames);
+ SearchUiOk((void *) 0);
+ }
+
+}
+
+/**
+ * Update the action buttons.
+ *
+ * If there is at least one selected file, Apply is enabled
+ * If there are entries in the list, Select All is enabled
+ *
+ * \return
+ */
+
+static void UpdateSearchUiButton(void)
+{
+ wIndex_t selCnt = wListGetSelectedCount(RESULTLIST);
+ wIndex_t cnt = wListGetCount(RESULTLIST);
+
+ wControlActive((wControl_p)APPLYBUTTON, selCnt > 0);
+ wControlActive((wControl_p)SELECTALLBUTTON, cnt > 0);
+}
+
+// Return a pointer to the (shifted) trimmed string
+char * StringTrim(char *s)
+{
+ char *original = s;
+ size_t len = 0;
+
+ while (isspace((unsigned char) *s)) {
+ s++;
+ }
+ if (*s) {
+ char *p = s;
+ while (*p) p++;
+ while (isspace((unsigned char) *(--p)));
+ p[1] = '\0';
+ len = (size_t) (p - s + 1);
+ }
+
+ return (s == original) ? s : memmove(original, s, len + 1);
+}
+
+/**
+ * Perform the search. If successful, the results are loaded into the list
+ *
+ * \param ptr INignored
+ */
+
+static void SearchUiDoSearch(void * ptr)
+{
+ unsigned result;
+
+ char * search;
+
+ search = StringTrim(searchUiQuery);
+
+ if (catalogFileBrowse) {
+ EmptyCatalog(catalogFileBrowse);
+ } else
+ catalogFileBrowse = InitCatalog();
+
+ result = SearchLibrary(trackLibrary, search, catalogFileBrowse);
+
+ if (result) {
+ DynString hitsMessage;
+ DynStringMalloc(&hitsMessage, 16);
+ DynStringPrintf(&hitsMessage, _("%d parameter files found."), result);
+ wMessageSetValue(MESSAGETEXT, DynStringToCStr(&hitsMessage));
+ DynStringFree(&hitsMessage);
+
+ SearchFileListLoad(catalogFileBrowse);
+
+ } else {
+
+ wListClear(RESULTLIST);
+ wControlActive((wControl_p)SELECTALLBUTTON, FALSE);
+ wMessageSetValue(MESSAGETEXT, _("No matches found."));
+ }
+}
+
+/**
+ * Select all files in the list
+ *
+ * \param junk IN ignored
+ * \return
+ */
+
+static void SearchUiSelectAll(void *junk)
+{
+ wListSelectAll(RESULTLIST);
+}
+
+/**
+ * Action handler for Done button. Hides the dialog.
+ *
+ * \param [in,out] junk ignored.
+ */
+
+void SearchUiOk(void * junk)
+{
+ if (searchUiW) {
+ wHide(searchUiW);
+ }
+}
+
+/**
+ * Handle the Add button: a list of selected list elements is created and
+ * passed to the parameter file list.
+ *
+ * \param junk IN/OUT ignored
+ */
+
+static void SearchUiApply(wWin_p junk)
+{
+ SearchUILoadResults();
+}
+
+/**
+ * Event handling for the Search dialog. If the 'X' decoration is pressed the
+ * dialog window is closed.
+ *
+ * \param pg IN ignored
+ * \param inx IN ignored
+ * \param valueP IN ignored
+ */
+
+static void SearchUiDlgUpdate(
+ paramGroup_p pg,
+ int inx,
+ void * valueP)
+{
+ switch (inx) {
+ case I_RESULTLIST:
+ UpdateSearchUiButton();
+ break;
+ case I_MODETOGGLE:
+ SearchFileListLoad(currentCat);
+ break;
+ case -1:
+ SearchUiOk(valueP);
+ break;
+ }
+}
+
+/**
+ * Get the system default directory for parameter files. First step is to
+ * check the configuration file for a user specific setting. If that is not
+ * found, the diretory is based derived from the installation directory.
+ * The returned string has to be free'd() when no longer needed.
+ *
+ * \return parameter file directory
+ */
+
+static char *
+GetParamsPath()
+{
+ char * params_path;
+ char *params_pref;
+ params_pref = wPrefGetString(FILESECTION, PARAMDIRECTORY);
+
+ if (!params_pref) {
+ MakeFullpath(&params_path, wGetAppLibDir(), "params", NULL);
+ } else {
+ params_path = strdup(params_pref);
+ }
+ return(params_path);
+}
+/**
+ * Create and open the search dialog.
+ *
+ * \param junk
+ */
+
+void DoSearchParams(void * junk)
+{
+ if (searchUiW == NULL) {
+ catalogFileBrowse = InitCatalog();
+
+ //Make the Find menu bound to the System Library initially
+ char *paramsDir = GetParamsPath();
+ trackLibrary = CreateLibrary(paramsDir);
+ free(paramsDir);
+
+ searchUiPLs[I_SEARCHBUTTON].winLabel = (char *)wIconCreatePixMap(magnifier_xpm);
+
+ ParamRegister(&searchUiPG);
+
+ searchUiW = ParamCreateDialog(&searchUiPG,
+ MakeWindowTitle(_("Choose parameter files")), _("Done"), NULL, wHide,
+ TRUE, NULL, F_RESIZE | F_RECALLSIZE, SearchUiDlgUpdate);
+ if (trackLibrary) {
+ SearchFileListLoad(trackLibrary->catalog); //Start with system files
+ }
+ wControlActive((wControl_p)APPLYBUTTON, FALSE);
+ wControlActive((wControl_p)SELECTALLBUTTON, FALSE);
+
+ searchUi_fs = wFilSelCreate(searchUiW, FS_LOAD, FS_MULTIPLEFILES,
+ _("Load Parameters"), _("Parameter files (*.xtp)|*.xtp"), GetParameterFileInfo,
+ (void *)catalogFileBrowse);
+ }
+
+ ParamLoadControls(&searchUiPG);
+ ParamGroupRecord(&searchUiPG);
+
+ if (!trackLibrary) {
+ wControlActive((wControl_p)SEARCHBUTTON, FALSE);
+ wControlActive((wControl_p)QUERYSTRING, FALSE);
+ wMessageSetValue(MESSAGETEXT,
+ _("No system parameter files found, search is disabled."));
+ } else {
+ wStringSetValue(QUERYSTRING, "");
+
+ SearchFileListLoad(trackLibrary->catalog); //Start with system files
+
+ }
+ wShow(searchUiW);
+}
+
+
diff --git a/app/bin/partcatalog.c b/app/bin/partcatalog.c
new file mode 100644
index 0000000..a1db09c
--- /dev/null
+++ b/app/bin/partcatalog.c
@@ -0,0 +1,846 @@
+/** \file partcatalog.c
+* Manage the catalog of track parameter files
+*/
+/* XTrkCad - Model Railroad CAD
+* Copyright (C) 2019 Martin Fischer
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#include <assert.h>
+#include <ctype.h>
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>
+#endif
+#include <search.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifdef WINDOWS
+ #include "include/dirent.h"
+#else
+ #include <dirent.h>
+#endif
+#include "fileio.h"
+#include "misc.h"
+#include "include/paramfile.h"
+#include "include/partcatalog.h"
+#include "paths.h"
+#include "include/stringxtc.h"
+#include "include/utf8convert.h"
+
+#if _MSC_VER > 1300
+ #define strnicmp _strnicmp
+ #define strdup _strdup
+#endif
+
+#define PUNCTUATION "+-*/.,&%=#"
+
+
+
+/**
+ * Create and initialize the linked list for the catalog entries
+ *
+ * \return pointer to first element
+ */
+
+CatalogEntry *
+InitCatalog(void)
+{
+ CatalogEntry *head;
+ CatalogEntry *tail;
+
+ /* allocate two pseudo nodes for beginning and end of list */
+ head = (CatalogEntry *)malloc(sizeof(CatalogEntry));
+ tail = (CatalogEntry *)malloc(sizeof(CatalogEntry));
+
+ head->next = tail;
+ tail->next = tail;
+
+
+
+ return (head);
+}
+
+/**
+ * Create a new CatalogEntry and add it to the linked list. The newly
+ * created entry is inserted into the list after the given position
+ *
+ * \param entry IN insertion point
+ * \return pointer to new entry
+ */
+
+static CatalogEntry *
+InsertIntoCatalogAfter(CatalogEntry *entry)
+{
+ CatalogEntry *newEntry = (CatalogEntry *)malloc(sizeof(CatalogEntry));
+ newEntry->next = entry->next;
+ entry->next = newEntry;
+ newEntry->files = 0;
+ newEntry->contents = NULL;
+
+ return (newEntry);
+}
+
+/**
+ * Count the elements in the linked list ignoring dummy elements
+ *
+ * \param listHeader IN the linked list
+ * \return the numberof elements
+ */
+
+unsigned
+CountCatalogEntries(CatalogEntry *listHeader)
+{
+ CatalogEntry *currentEntry = listHeader->next;
+ unsigned count = 0;
+
+ while (currentEntry != currentEntry->next) {
+ count++;
+ currentEntry = currentEntry->next;
+ }
+ return (count);
+}
+
+/**
+ * Empty a catalog. All data nodes including their allocated memory are freed. On
+ *
+ * \param listHeader IN the list
+ */
+
+void
+EmptyCatalog(CatalogEntry *listHeader)
+{
+ CatalogEntry *current = listHeader;
+
+ while (current->next != current->next->next) {
+ CatalogEntry *removedElement;
+ removedElement = current->next;
+ current->next = current->next->next;
+ if (removedElement->contents) {
+ free(removedElement->contents);
+ }
+ for (unsigned int i = 0; i < removedElement->files; i++) {
+ free(removedElement->fullFileName[i]);
+ }
+ free(removedElement);
+ }
+}
+
+/**
+ * Find the position in the list and add
+ *
+ * \param listHeader IN start of list
+ * \param contents IN contents to include
+ *
+ * \return CatalogEntry if found, NULL otherwise
+ */
+
+static CatalogEntry *
+InsertInOrder(CatalogEntry *listHeader, const char *contents)
+{
+ CatalogEntry *currentEntry = listHeader;
+
+ while (currentEntry->next != currentEntry->next->next) {
+ CatalogEntry *nextEntry = currentEntry->next;
+ if (XtcStricmp(nextEntry->contents, contents)>0) {
+ return InsertIntoCatalogAfter(currentEntry);
+ }
+ currentEntry = nextEntry;
+ }
+ return InsertIntoCatalogAfter(currentEntry);
+}
+/**
+ * Get the existing list element for a content
+ *
+ * \param listHeader IN start of list
+ * \param contents IN contents to search
+ * \param Do we log error messages or not
+ *
+ * \return CatalogEntry if found, NULL otherwise
+ */
+
+static CatalogEntry *
+IsExistingContents(CatalogEntry *listHeader, const char *contents, BOOL_T silent)
+{
+ CatalogEntry *currentEntry = listHeader->next;
+
+ while (currentEntry != currentEntry->next) {
+ if (!XtcStricmp(currentEntry->contents, contents)) {
+ if (!silent)
+ printf("%s already exists in %s\n", contents, currentEntry->fullFileName[0]);
+ return (currentEntry);
+ }
+ currentEntry = currentEntry->next;
+ }
+ return (NULL);
+}
+
+/**
+ * Store information about a parameter file. The filename is added to the array
+ * of files with identical content. If not already present, in addition
+ * the content is stored
+ *
+ * \param entry existing entry to be updated
+ * \param path filename to add
+ * \param contents contents description
+ */
+
+static void
+UpdateCatalogEntry(CatalogEntry *entry, char *path, char *contents)
+{
+ if (!entry->contents) {
+ entry->contents = strdup(contents);
+ }
+
+ if (entry->files < MAXFILESPERCONTENT) {
+ entry->fullFileName[entry->files++] = strdup(path);
+ } else {
+ AbortProg("Number of file with same content too large!", NULL);
+ }
+}
+
+/**
+ * Create the list for the catalog entries
+ *
+ * \return
+ */
+
+static CatalogEntry *
+CreateCatalog()
+{
+ CatalogEntry *catalog = InitCatalog();
+
+ return (catalog);
+}
+
+
+static IndexEntry *
+CreateIndexTable(unsigned int capacity)
+{
+ IndexEntry *index = (IndexEntry *)malloc(capacity * sizeof(IndexEntry));
+
+ return (index);
+}
+
+/**
+ * Scan opened directory for the next parameter file
+ *
+ * \param dir IN opened directory handle
+ * \param dirName IN name of directory
+ * \param fileName OUT fully qualified filename
+ *
+ * \return TRUE if file found, FALSE if not
+ */
+
+static bool
+GetNextParameterFile(DIR *dir, const char *dirName, char **fileName)
+{
+ bool done = false;
+ bool res = false;
+
+ /*
+ * get all files from the directory
+ */
+ while (!done) {
+ struct stat fileState;
+ struct dirent *ent;
+
+ ent = readdir(dir);
+
+ if (ent) {
+ if (!XtcStricmp(FindFileExtension(ent->d_name), "xtp")) {
+ /* create full file name and get the state for that file */
+ MakeFullpath(fileName, dirName, ent->d_name, NULL);
+
+ if (stat(*fileName, &fileState) == -1) {
+ fprintf(stderr, "Error getting file state for %s\n", *fileName);
+ continue;
+ }
+
+ /* ignore any directories */
+ if (!(fileState.st_mode & S_IFDIR)) {
+ done = true;
+ res = true;
+ }
+ }
+ } else {
+ done = true;
+ res = false;
+ }
+ }
+ return (res);
+}
+
+/**
+ * Scan a directory for parameter files. For each file found the CONTENTS is
+ * read and added to the list *
+ *
+ * \param insertAfter IN starting point for the list of files
+ * \param dirName IN directory to be scanned
+ *
+ * \return pointer to the last element(?)
+ */
+
+static CatalogEntry *
+ScanDirectory(CatalogEntry *catalog, const char *dirName)
+{
+ DIR *d;
+ CatalogEntry *newEntry = catalog;
+
+ d = opendir(dirName);
+ if (d) {
+ char *fileName = NULL;
+
+ while (GetNextParameterFile(d, dirName, &fileName)) {
+ CatalogEntry *existingEntry;
+ char *contents = GetParameterFileContent(fileName);
+ if ((existingEntry = IsExistingContents(catalog, contents,FALSE))) {
+ printf("Duplicate CONTENTS record in parameter file %s\n", fileName);
+ if (strcmp(existingEntry->fullFileName[existingEntry->files-1],fileName))
+ UpdateCatalogEntry(existingEntry, fileName, contents);
+ } else {
+ newEntry = InsertInOrder(catalog,contents);
+ UpdateCatalogEntry(newEntry, fileName, contents);
+ }
+ free(contents);
+ free(fileName);
+ fileName = NULL;
+ }
+ closedir(d);
+ }
+
+ return (newEntry);
+}
+
+/**
+ * Comparison function for IndexEntries used by qsort()
+ *
+ * \param entry1 IN
+ * \param entry2 IN
+ * \return per C runtime conventions
+ */
+
+static int
+CompareIndex(const void *entry1, const void *entry2)
+{
+ IndexEntry index1 = *(IndexEntry *)entry1;
+ IndexEntry index2 = *(IndexEntry *)entry2;
+ return (strcoll(index1.keyWord, index2.keyWord));
+}
+
+/*!
+ * Filter keywords. Current rules:
+ * - single character string that only consist of a punctuation char
+ *
+ * \param word IN keyword
+ * \return true if any rule applies, false otherwise
+ */
+
+bool
+FilterKeyword(char *word)
+{
+ if (strlen(word) == 1 && strpbrk(word, PUNCTUATION )) {
+ return(true);
+ }
+ return(false);
+}
+
+/**
+ * Create the keyword index from a list of parameter files
+ *
+ * \param catalog IN list of parameter files
+ * \param index IN index table to be filled
+ * \param pointer IN/OUT array of words that are indexed
+ * \param capacityOfIndex IN total maximum of keywords
+ * \return number of indexed keywords
+ */
+static unsigned
+CreateContentsIndex(CatalogEntry *catalog, IndexEntry *index, void** words_array,
+ unsigned capacityOfIndex)
+{
+ CatalogEntry *currentEntry = catalog->next;
+ unsigned totalMemory = 0;
+ size_t wordCount = 0;
+ char *wordList;
+ char *wordListPtr;
+
+ while (currentEntry != currentEntry->next) {
+ totalMemory += strlen(currentEntry->contents) + 1;
+ currentEntry = currentEntry->next;
+ }
+
+ wordList = malloc((totalMemory + 1) * sizeof(char));
+ *words_array = (void*)wordList;
+
+ wordListPtr = wordList;
+ currentEntry = catalog->next;
+
+ while (currentEntry != currentEntry->next) {
+ char *word;
+ char *content = strdup(currentEntry->contents);
+
+ word = strtok(content, " \t\n\r");
+ while (word && wordCount < capacityOfIndex) {
+ strcpy(wordListPtr, word);
+
+ char *p = wordListPtr;
+ for (; *p; ++p) {
+ *p = tolower(*p);
+ }
+ if (!FilterKeyword(wordListPtr)) {
+ index[wordCount].value = currentEntry;
+ index[wordCount].keyWord = wordListPtr;
+ wordListPtr += strlen(word) + 1;
+ wordCount++;
+ if (wordCount >= capacityOfIndex) {
+ AbortProg("Too many keywords were used!", NULL);
+ }
+ }
+ word = strtok(NULL, " \t\n\r");
+ }
+ free(content);
+ currentEntry = currentEntry->next;
+ }
+ *wordListPtr = '\0';
+
+ qsort((void*)index, wordCount, sizeof(IndexEntry), CompareIndex);
+
+ return (wordCount);
+}
+
+/**
+* A recursive binary search function. It returns location of x in
+* given array arr[l..r] is present, otherwise -1
+* Taken from http://www.geeksforgeeks.org/binary-search/ and modified
+*
+* \param arr IN array to search
+* \param l IN starting index
+* \param r IN highest index in array
+* \param key IN key to search
+* \return index if found, -1 otherwise
+*/
+
+static int SearchInIndex(IndexEntry arr[], int l, int r, char *key)
+{
+ if (r >= l) {
+ int mid = l + (r - l) / 2;
+ int res = XtcStricmp(key, arr[mid].keyWord);
+
+ // If the element is present at the middle itself
+ if (!res) {
+ return mid;
+ }
+
+ // If the array size is 1
+ if (r == 0) {
+ return -1;
+ }
+
+ // If element is smaller than mid, then it can only be present
+ // in left subarray
+ if (res < 0) {
+ return SearchInIndex(arr, l, mid - 1, key);
+ }
+
+ // Else the element can only be present in right subarray
+ return SearchInIndex(arr, mid + 1, r, key);
+ }
+
+ // We reach here when element is not present in array
+ return -1;
+}
+
+/**
+ * Inserts a key in arr[] of given capacity. n is current
+ * size of arr[]. This function returns n+1 if insertion
+ * is successful, else n.
+ * Taken from http ://www.geeksforgeeks.org/search-insert-and-delete-in-a-sorted-array/ and modified
+ */
+
+int InsertSorted(CatalogEntry *arr[], int n, CatalogEntry *key, int capacity)
+{
+ // Cannot insert more elements if n is already
+ // more than or equal to capcity
+ if (n >= capacity) {
+ return n;
+ }
+
+ int i;
+ for (i = n - 1; (i >= 0 && arr[i] > key); i--) {
+ arr[i + 1] = arr[i];
+ }
+
+ arr[i + 1] = key;
+
+ return (n + 1);
+}
+
+/**
+ * Comparison function for CatalogEntries used by qsort()
+ *
+ * \param entry1 IN
+ * \param entry2 IN
+ * \return per C runtime conventions
+ */
+
+static int
+CompareResults(const void *entry1, const void *entry2)
+{
+ CatalogEntry * index1 = *(CatalogEntry **)entry1;
+ CatalogEntry * index2 = *(CatalogEntry **)entry2;
+ return (strcoll(index1->contents, index2->contents));
+}
+
+/**
+ * Search the index for a keyword. The index is assumed to be sorted. So after one entry
+ * is found, neighboring entries up and down are checked as well. The total result set
+ * is placed into an array and returned. This array has to be free'd by the caller.
+ *
+ * \param index IN index list
+ * \param length IN number of entries index
+ * \param search IN search string
+ * \param resultCount OUT count of found entries
+ * \return array of found catalog entries, NULL if none found
+ */
+
+static int findAll = 1;
+
+unsigned int
+FindWord(IndexEntry *index, int length, char *search, CatalogEntry ***entries)
+{
+ CatalogEntry **result; //Array of pointers to Catalog Entries
+ int found;
+ int foundElements = 0;
+ *entries = NULL;
+
+ //Get all the entries back for generic search or if "generic find"
+ if (findAll || !search || (search[0] == '*') || (search[0] == '\0')) {
+ result = malloc((length) * sizeof(CatalogEntry *));
+ for (int i = 0; i < length; i++) {
+ result[i] = index[i].value;
+ }
+ *entries = result;
+ return length;
+ }
+
+ found = SearchInIndex(index, 0, length, search);
+
+ if (found >= 0) {
+ int lower = found;
+ int upper = found;
+ int i;
+
+ while (lower > 0 && !XtcStricmp(index[lower-1].keyWord, search)) {
+ lower--;
+ }
+
+ while (upper < length - 1 && !XtcStricmp(index[upper + 1].keyWord, search)) {
+ upper++;
+ }
+
+ foundElements = 1 + upper - lower;
+
+ result = malloc((foundElements) * sizeof(CatalogEntry *));
+
+ for (i = 0; i < foundElements; i++) {
+ result[i] = index[i+lower].value;
+ }
+
+ qsort((void*)result, foundElements, sizeof(void *), CompareResults);
+
+ *entries = result;
+ }
+ return (foundElements);
+}
+
+/**
+ * Create and initialize the data structure for the track library
+ *
+ * \param trackLibrary OUT the newly allocated track library
+ * \return TRUE on success
+ */
+
+TrackLibrary *
+InitLibrary(void)
+{
+ TrackLibrary *trackLib = malloc(sizeof(TrackLibrary));
+
+ if (trackLib) {
+ trackLib->catalog = CreateCatalog();
+ trackLib->index = NULL;
+ trackLib->wordCount = 0;
+ trackLib->trackTypeCount = 0;
+ }
+
+ return (trackLib);
+}
+
+/**
+ * Scan directory and all parameter files found to the catalog
+ *
+ * \param trackLib IN the catalog
+ * \param directory IN directory to scan
+ * \return number of files found
+ */
+
+bool
+GetTrackFiles(TrackLibrary *trackLib, char *directory)
+{
+ ScanDirectory(trackLib->catalog, directory);
+ trackLib->trackTypeCount = CountCatalogEntries(trackLib->catalog);
+
+ return (trackLib->trackTypeCount);
+}
+/**
+ * Add a list of parameters files to a catalog. This function is
+ * called when the user selects files in the file selector.
+ *
+ * \param files IN count of files
+ * \param fileName IN array of filenames
+ * \param data IN pointer to the catalog
+ * \return alwqys TRUE
+ */
+
+int GetParameterFileInfo(
+ int files,
+ char ** fileName,
+ void * data)
+{
+ CatalogEntry *catalog = (CatalogEntry *)data;
+
+ assert(fileName != NULL);
+ assert(files > 0);
+ assert(data != NULL);
+
+ for (int i = 0; i < files; i++) {
+ CatalogEntry *newEntry;
+ char *contents = GetParameterFileContent(fileName[i]);
+
+ if (!(newEntry = IsExistingContents(catalog, contents,TRUE))) {
+ newEntry = InsertIntoCatalogAfter(catalog);
+ }
+ UpdateCatalogEntry(newEntry, fileName[i], contents);
+ free(contents);
+ }
+ return (TRUE);
+}
+
+/**
+ * Create the search index from the contents description for the whole catalog.
+ * A fixed number of words are added to the index. See ESTIMATED_CONTENTS_WORDS
+ *
+ * \param trackLib IN the catalog
+ * \return the number of words indexed
+ */
+
+unsigned
+CreateLibraryIndex(TrackLibrary *trackLib)
+{
+ trackLib->index = CreateIndexTable(trackLib->trackTypeCount *
+ ESTIMATED_CONTENTS_WORDS);
+
+ trackLib->wordCount = CreateContentsIndex(trackLib->catalog, trackLib->index,
+ &trackLib->words_array,
+ ESTIMATED_CONTENTS_WORDS * trackLib->trackTypeCount);
+
+ return (trackLib->wordCount);
+}
+
+void
+DeleteLibraryIndex(TrackLibrary *trackLib)
+{
+ free(trackLib->index);
+ trackLib->index = NULL;
+
+ free(trackLib->words_array);
+
+ trackLib->wordCount = 0;
+
+}
+
+
+/**
+ * Create the library and index of parameter files in a given directory.
+ *
+ * \param directory IN directory to scan
+ * \return NULL if error or empty directory, else library handle
+ */
+
+TrackLibrary *
+CreateLibrary(char *directory)
+{
+ TrackLibrary *library;
+
+ library = InitLibrary();
+ if (library) {
+ if (!GetTrackFiles(library, directory)) {
+ return (NULL);
+ }
+
+ CreateLibraryIndex(library);
+ }
+ return (library);
+}
+
+void
+DeleteLibrary(TrackLibrary* library)
+{
+ DeleteLibraryIndex(library);
+
+
+ free(library);
+}
+
+// Case insensitive comparison
+char* stristr( const char* haystack, const char* needle )
+{
+ int c = tolower((unsigned char)*needle);
+ if (c == '\0')
+ return (char *)haystack;
+ for (; *haystack; haystack++) {
+ if (tolower((unsigned char)*haystack) == c) {
+ for (size_t i = 0;;) {
+ if (needle[++i] == '\0')
+ return (char *)haystack;
+ if (tolower((unsigned char)haystack[i]) != tolower((unsigned char)needle[i]))
+ break;
+ }
+ }
+ }
+ return NULL;
+}
+
+/**
+ * Search the library for a keyword string and return the result list
+ *
+ * First the index is searched for the first word and then each "hit" is matched
+ * to the entire search string
+ *
+ * Null, Blank and "*" match all entries
+ *
+ * The list is de-duped of repeat of filenames as the same file might appear in
+ * more than once
+ *
+ * \param library IN the library
+ * \param searchExpression IN keyword to search for
+ * \param resultEntries IN list header for result list
+ * \return number of found entries
+ */
+unsigned
+SearchLibrary(TrackLibrary *library, char *searchExpression,
+ CatalogEntry *resultEntries)
+{
+ CatalogEntry **entries;
+ CatalogEntry * newEntry = resultEntries;
+ unsigned entryCount;
+
+ char * word;
+
+ word = strdup(searchExpression);
+
+ //word = strtok(word," \t");
+
+ if (library->index == NULL || library->wordCount == 0) {
+ return (0);
+ }
+ entryCount = FindWord(library->index, library->wordCount, word,
+ &entries);
+ int count= 0;
+ if (entryCount) {
+ unsigned int i = 0;
+ while (i < entryCount) {
+ char * match;
+ //Check if entire String Matches
+ if (!searchExpression || !word || (word[0] == '*') || (word[0] == '\0') ||
+ (match = stristr(entries[i]->contents,searchExpression))) {
+ CatalogEntry * existingEntry;
+ existingEntry = IsExistingContents(resultEntries, entries[i]->contents, TRUE);
+ //Same FileName already in one of the entries?
+ BOOL_T found = FALSE;
+ if (existingEntry) {
+ for (unsigned int j=0;j<existingEntry->files;j++) {
+ if (!strcmp(existingEntry->fullFileName[j],entries[i]->fullFileName[entries[i]->files-1])) {
+ found=TRUE;
+ break;
+ }
+ }
+ if (found == TRUE ) {
+ i++;
+ continue;
+ }
+ UpdateCatalogEntry(existingEntry, entries[i]->fullFileName[(entries[i]->files- 1)],
+ entries[i]->contents);
+ } else {
+ newEntry = InsertInOrder(resultEntries,entries[i]->contents);
+ UpdateCatalogEntry(newEntry, entries[i]->fullFileName[(entries[i]->files- 1)],
+ entries[i]->contents);
+ }
+ count++;
+ }
+ i++;
+ }
+ }
+ free(word);
+ if (entries)
+ free(entries); //Clean-up after search
+ return (count);
+}
+
+/**
+ * Get the contents description from a parameter file. Returned string has to be freed after use.
+ *
+ * \param file IN xtpfile
+ * \return pointer to found contents or NULL if not present
+ */
+
+char *
+GetParameterFileContent(char *file)
+{
+ FILE *fh;
+ char *result = NULL;
+
+ fh = fopen(file, "rt");
+ if (fh) {
+ bool found = false;
+
+ while (!found) {
+ char buffer[512];
+ if (fgets(buffer, sizeof(buffer), fh)) {
+ char *ptr = strtok(buffer, " \t");
+ if (!XtcStricmp(ptr, CONTENTSCOMMAND)) {
+ /* if found, store the rest of the line and the filename */
+ ptr = ptr+strlen(CONTENTSCOMMAND)+1;
+ ptr = strtok(ptr, "\r\n");
+ result = strdup(ptr);
+#ifdef WINDOWS
+ ConvertUTF8ToSystem(result);
+#endif // WINDOWS
+ found = true;
+ }
+ } else {
+ fprintf(stderr, "Nothing found in %s\n", file);
+ found = true;
+ }
+ }
+ fclose(fh);
+ }
+ return(result);
+}
diff --git a/app/bin/paths.c b/app/bin/paths.c
index cbd9b38..6c6bb10 100644
--- a/app/bin/paths.c
+++ b/app/bin/paths.c
@@ -69,7 +69,7 @@ FindPath(const char *type)
}
/**
- * Add a path to the table. If it already exists, the value ist updated.
+ * Add a path to the table. If it already exists, the value list updated.
*
* \param type IN type of path
* \param path IN path
@@ -162,6 +162,21 @@ char *GetCurrentPath(
}
/**
+ * Convert path to forward slash
+ *
+ * \param [in,out] string If non-null, the string.
+ */
+
+void ConvertPathForward(char *string)
+{
+ char *ptr = string;
+ while ((ptr = strchr(ptr, '\\')) != NULL) {
+ ptr[0] = '/';
+ ptr++;
+ }
+}
+
+/**
* Find the filename/extension piece in a fully qualified path
*
* \param path IN the full path
@@ -183,8 +198,28 @@ char *FindFilename(char *path)
}
/**
+ * Find file extension in a filename
+ *
+ * \param path IN full or partial path
+ * \return pointer to the file extension part, empty string if no extension present
+ */
+
+char *FindFileExtension(char *path) {
+ char *ext;
+ ext = strrchr(path, '.');
+
+ if (ext) {
+ ext++;
+ } else {
+ ext = path + strlen(path);
+ }
+
+ return ext;
+}
+
+/**
* Make a full path definition from directorys and filenames. The individual pieces are
-* concatinated. Where necessary a path delimiter is added. A pointer to the resulting
+* Concatenated. Where necessary a path delimiter is added. A pointer to the resulting
* string is returned. This memory should be free'd when no longer needed.
* Windows: to construct an absolute path, a leading backslash has to be included after
* the drive delimiter ':' or at the beginning of the first directory name.
diff --git a/app/bin/paths.h b/app/bin/paths.h
index 1e3c98a..f3f5f23 100644
--- a/app/bin/paths.h
+++ b/app/bin/paths.h
@@ -27,6 +27,8 @@
void SetCurrentPath( const char * pathType, const char * fileName );
char *GetCurrentPath(const char *pathType);
+void ConvertPathForward(char *string);
char *FindFilename(char *path);
+char *FindFileExtension(char *path);
void MakeFullpath(char **str, ...);
#endif
diff --git a/app/bin/shortentext.c b/app/bin/shortentext.c
new file mode 100644
index 0000000..6cd16e6
--- /dev/null
+++ b/app/bin/shortentext.c
@@ -0,0 +1,92 @@
+/** \file stringutils.c
+ * Some assorted string handling functions
+ */
+
+ /* XTrackCAD - Model Railroad CAD
+ * Copyright (C) 2019 Martin Fischer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <string.h>
+#include "shortentext.h"
+
+#define WHITESPACES "\n\r\t "
+#define ELLIPSIZE "..."
+
+/**
+ * Replace all whitespace characters with blanks. Successive occurences are reduced to a single blank.
+ *
+ * \param source IN string to convert
+ * \param dest IN buffer for converted string, minimum size is the size of the source string
+ */
+void
+RemoveFormatChars( char *source, char *dest )
+{
+ int lastChar = '\0';
+
+ while (*source) {
+ if (strchr(WHITESPACES, *source)) {
+ if (lastChar != ' ') {
+ *dest++ = ' ';
+ lastChar = ' ';
+ }
+ } else {
+ lastChar = *source;
+ *dest++ = lastChar;
+ }
+ source++;
+ }
+ if (lastChar != ' ') {
+ *dest = '\0';
+ } else {
+ *(dest - 1) = '\0';
+ }
+}
+
+void
+EllipsizeString(char *source, char *dest, size_t length)
+{
+ size_t position;
+ char *resultString = (dest ? dest: source);
+
+
+ // trivial case: nothing to do if source is shorter and no inplace
+ if( strlen(source) <= length )
+ {
+ if( dest )
+ strcpy(dest, source);
+ return;
+ }
+
+ strncpy(resultString, source, length);
+ resultString[ length ] = '\0';
+
+ position = length - 1;
+ while (position) {
+ if (resultString[position] == ' ' && position <= (length - sizeof(ELLIPSIZE))) {
+ strcpy(resultString + position, ELLIPSIZE);
+ break;
+ } else {
+ position--;
+ }
+ }
+
+ // no blank in string, replace the last n chars
+ if (!position) {
+ strcpy(resultString + (strlen(resultString) - sizeof(ELLIPSIZE) + 1), ELLIPSIZE);
+ }
+ return;
+} \ No newline at end of file
diff --git a/app/bin/shortentext.h b/app/bin/shortentext.h
new file mode 100644
index 0000000..1b71a08
--- /dev/null
+++ b/app/bin/shortentext.h
@@ -0,0 +1,28 @@
+/** \file stringutils.h
+ * String handling utilities
+ */
+
+ /* XTrackCAD - Model Railroad CAD
+ * Copyright (C) 2019 Martin Fischer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef HAVE_STRINGUTILS_H
+#define HAVE_STRINGUTILS_H
+ void RemoveFormatChars(char *source, char *dest);
+ void EllipsizeString(char *source, char *dest, size_t length);
+#endif // !HAVE_STRINGUTIL_H
+
diff --git a/app/bin/smalldlg.c b/app/bin/smalldlg.c
index 7828912..1fb5965 100644
--- a/app/bin/smalldlg.c
+++ b/app/bin/smalldlg.c
@@ -36,6 +36,7 @@
#ifdef WINDOWS
#include <io.h>
#include <windows.h>
+#include <FreeImage.h>
#else
#include <sys/stat.h>
#endif
@@ -67,7 +68,7 @@ static paramData_t tipPLs[] = {
#define I_TIPTEXT (1)
#define tipT ((wText_p)tipPLs[I_TIPTEXT].control)
{ PD_MESSAGE, N_("Did you know..."), NULL, 0, NULL, NULL, BM_LARGE },
- { PD_TEXT, NULL, "text", 0, &tipTextData, NULL, BO_READONLY|BT_CHARUNITS },
+ { PD_TEXT, NULL, "text", 0, &tipTextData, NULL, BO_READONLY|BT_TOP|BT_CHARUNITS },
{ PD_BUTTON, (void*)ShowTip, "prev", PDO_DLGRESETMARGIN, NULL, N_("Previous Tip"), 0L, (void *)(SHOWTIP_FORCESHOW | SHOWTIP_PREVTIP) },
{ PD_BUTTON, (void*)ShowTip, "next", PDO_DLGHORZ, NULL, N_("Next Tip"), 0L, (void *)(SHOWTIP_FORCESHOW | SHOWTIP_NEXTTIP) },
{ PD_TOGGLE, &showTipAtStart, "showatstart", PDO_DLGCMDBUTTON, tipLabels, NULL, BC_NOBORDER }};
@@ -86,7 +87,7 @@ static void CreateTipW( void )
char *filename;
char * cp;
- tipW = ParamCreateDialog( &tipPG, MakeWindowTitle(_("Tip of the Day")), _("Ok"), (paramActionOkProc)wHide, NULL, FALSE, NULL, F_CENTER, NULL );
+ tipW = ParamCreateDialog( &tipPG, MakeWindowTitle(_("Tip of the Day")), _("Ok"), (paramActionOkProc)wHide, wHide, FALSE, NULL, F_RESIZE|F_CENTER, NULL );
/* open the tip file */
MakeFullpath(&filename, libDir, sTipF, NULL);
@@ -167,7 +168,8 @@ void ShowTip( long flags )
}
ParamLoadControls( &tipPG );
wTextClear( tipT );
- wPrefGetInteger( "misc", "tip-number", &tipNum, 0 );
+ /* initial value is -1 which gets incremented 0 below */
+ wPrefGetInteger( "misc", "tip-number", &tipNum, -1 );
if( flags & SHOWTIP_PREVTIP ) {
if(tipNum == 0 )
@@ -202,7 +204,7 @@ static paramData_t aboutPLs[] = {
{ PD_MESSAGE, NULL, NULL, PDO_DLGNEWCOLUMN, NULL, NULL, BM_LARGE },
#define I_COPYRIGHT (2)
#define COPYRIGHT_T ((wText_p)aboutPLs[I_COPYRIGHT].control)
- { PD_TEXT, NULL, NULL, PDO_DLGRESIZE, &aboutTextData, NULL, BT_CHARUNITS }
+ { PD_TEXT, NULL, NULL, PDO_DLGRESIZE, &aboutTextData, NULL, BO_READONLY|BT_TOP|BT_CHARUNITS }
};
static paramGroup_t aboutPG = { "about", 0, aboutPLs, sizeof aboutPLs/sizeof aboutPLs[0] };
@@ -217,13 +219,18 @@ void CreateAboutW( void *ptr )
if( !aboutW ) {
aboutPLs[I_ABOUTDRAW].winData = wIconCreatePixMap( xtc_xpm );
ParamRegister( &aboutPG );
- aboutW = ParamCreateDialog( &aboutPG, MakeWindowTitle(_("About")), _("Ok"), (paramActionOkProc)wHide, NULL, FALSE, NULL, F_TOP|F_CENTER, NULL );
+ aboutW = ParamCreateDialog( &aboutPG, MakeWindowTitle(_("About")), _("Ok"), (paramActionOkProc)wHide, wHide, FALSE, NULL, F_TOP|F_CENTER, NULL );
ParamLoadMessage( &aboutPG, I_ABOUTVERSION, sAboutProd );
wTextAppend( COPYRIGHT_T, DESCRIPTION );
wTextAppend( COPYRIGHT_T, "\n\nXTrackCAD is Copyright 2003 by Sillub Technology and 2017 by Bob Blackwell, Martin Fischer and Adam Richards." );
wTextAppend( COPYRIGHT_T, "\nIcons by: Tango Desktop Project (http://tango.freedesktop.org)");
+ wTextAppend(COPYRIGHT_T, "\nSome icons by Yusuke Kamiyamane. Licensed under a Creative Commons Attribution 3.0 License.");
wTextAppend( COPYRIGHT_T, "\nContributions by: Robert Heller, Mikko Nissinen, Timothy M. Shead, Daniel Luis Spagnol" );
wTextAppend( COPYRIGHT_T, "\nParameter Files by: Ralph Boyd, Dwayne Ward" );
+#ifdef WINDOWS
+ wTextAppend(COPYRIGHT_T, "\n");
+ wTextAppend(COPYRIGHT_T, FreeImage_GetCopyrightMessage());
+#endif
wTextAppend( COPYRIGHT_T, "\nCornu Algorithm and Implementation by: Raph Levien");
wTextAppend( COPYRIGHT_T, "\nuthash Copyright notice:" );
wTextAppend( COPYRIGHT_T, "\nCopyright (c) 2005-2015, Troy D. Hanson http://troydhanson.github.com/uthash/");
diff --git a/app/bin/stringxtc.c b/app/bin/stringxtc.c
new file mode 100644
index 0000000..483f1a6
--- /dev/null
+++ b/app/bin/stringxtc.c
@@ -0,0 +1,106 @@
+/** \file stringxtc.c
+ *
+ * Copyright (C) 1991, 1992 Linus Torvalds
+ */
+
+ /*
+ * stupid library routines.
+ */
+
+#include <ctype.h>
+#include <stddef.h>
+#include <errno.h>
+#include "include/stringxtc.h"
+
+/**
+ * strscpy - Copy a C-string into a sized buffer
+ * @dest: Where to copy the string to
+ * @src: Where to copy the string from
+ * @count: Size of destination buffer
+ *
+ * Copy the string, or as much of it as fits, into the dest buffer. The
+ * behavior is undefined if the string buffers overlap. The destination
+ * buffer is always NUL terminated, unless it's zero-sized.
+ *
+ * Preferred to strlcpy() since the API doesn't require reading memory
+ * from the src string beyond the specified "count" bytes, and since
+ * the return value is easier to error-check than strlcpy()'s.
+ * In addition, the implementation is robust to the string changing out
+ * from underneath it, unlike the current strlcpy() implementation.
+ *
+ * Preferred to strncpy() since it always returns a valid string, and
+ * doesn't unnecessarily force the tail of the destination buffer to be
+ * zeroed. If zeroing is desired please use strscpy_pad().
+ *
+ * Return: The number of characters copied (not including the trailing
+ * %NUL) or -E2BIG if the destination buffer wasn't big enough.
+ */
+
+size_t strscpy(char *dest, const char *src, size_t count)
+{
+ long res = 0;
+
+ if (count == 0)
+ return -E2BIG;
+
+ while (count) {
+ char c;
+
+ c = src[res];
+ dest[res] = c;
+ if (!c)
+ return res;
+ res++;
+ count--;
+ }
+
+ /* Hit buffer length without finding a NUL; force NUL-termination. */
+ if (res)
+ dest[res - 1] = '\0';
+
+ return -E2BIG;
+}
+
+/**
+ * Convert a string to lower case
+ * Taken from https://stackoverflow.com/questions/23618316/undefined-reference-to-strlwr
+ *
+ * \param str IN string to convert
+ * \return pointer to converted string
+ */
+
+char *
+XtcStrlwr(char *str)
+{
+ unsigned char *p = (unsigned char *)str;
+
+ while (*p) {
+ *p = tolower((unsigned char)*p);
+ p++;
+ }
+
+ return str;
+}
+
+/**
+ * Compare two strings case insensitive
+ * Taken from https://stackoverflow.com/questions/30733786/c99-remove-stricmp-and-strnicmp
+ *
+ * \param a, b IN strings to compare
+ * \return
+ */
+
+int
+XtcStricmp(const char *a, const char *b)
+{
+ int ca, cb;
+ do {
+ ca = (unsigned char) *a++;
+ cb = (unsigned char) *b++;
+ ca = tolower(toupper(ca));
+ cb = tolower(toupper(cb));
+ } while ((ca == cb) && (ca != '\0'));
+ return ca - cb;
+}
+
+
diff --git a/app/bin/tbezier.c b/app/bin/tbezier.c
index 80feedb..fc949a2 100644
--- a/app/bin/tbezier.c
+++ b/app/bin/tbezier.c
@@ -54,7 +54,6 @@
EXPORT TRKTYP_T T_BEZIER = -1;
EXPORT TRKTYP_T T_BZRLIN = -1;
-
struct extraData {
BezierData_t bezierData;
};
@@ -134,17 +133,25 @@ static void ComputeBezierBoundingBox( track_p trk, struct extraData * xx )
DIST_T BezierDescriptionDistance(
coOrd pos,
- track_p trk )
+ track_p trk,
+ coOrd * dpos,
+ BOOL_T show_hidden,
+ BOOL_T * hidden)
{
struct extraData *xx = GetTrkExtraData(trk);
coOrd p1;
-
- if ( GetTrkType( trk ) != T_BEZIER || ( GetTrkBits( trk ) & TB_HIDEDESC ) != 0 )
+ if (hidden) *hidden = FALSE;
+ if ( GetTrkType( trk ) != T_BEZIER || ((( GetTrkBits( trk ) & TB_HIDEDESC ) != 0 ) && !show_hidden))
return 100000;
- p1.x = xx->bezierData.pos[0].x + ((xx->bezierData.pos[3].x-xx->bezierData.pos[0].x)/2) + xx->bezierData.descriptionOff.x;
- p1.y = xx->bezierData.pos[0].y + ((xx->bezierData.pos[3].y-xx->bezierData.pos[0].y)/2) + xx->bezierData.descriptionOff.y;
-
+ coOrd offset = xx->bezierData.descriptionOff;
+
+ if (( GetTrkBits( trk ) & TB_HIDEDESC ) != 0 ) offset = zero;
+
+ p1.x = xx->bezierData.pos[0].x + ((xx->bezierData.pos[3].x-xx->bezierData.pos[0].x)/2) + offset.x;
+ p1.y = xx->bezierData.pos[0].y + ((xx->bezierData.pos[3].y-xx->bezierData.pos[0].y)/2) + offset.y;
+ if (hidden) *hidden = (GetTrkBits( trk ) & TB_HIDEDESC);
+ *dpos = p1;
return FindDistance( p1, pos );
}
@@ -167,8 +174,8 @@ static void DrawBezierDescription(
pos.x += xx->bezierData.descriptionOff.x;
pos.y += xx->bezierData.descriptionOff.y;
fp = wStandardFont( F_TIMES, FALSE, FALSE );
- sprintf( message, _("Bezier Curve: length=%s min radius=%s"),
- FormatDistance(xx->bezierData.length), FormatDistance(xx->bezierData.minCurveRadius));
+ sprintf( message, _("Bezier: len=%0.2f min_rad=%0.2f"),
+ xx->bezierData.length, xx->bezierData.minCurveRadius>10000?0.0:xx->bezierData.minCurveRadius);
DrawBoxedString( BOX_BOX, d, pos, message, fp, (wFontSize_t)descriptionFontSize, color, 0.0 );
}
@@ -180,30 +187,31 @@ STATUS_T BezierDescriptionMove(
{
struct extraData *xx = GetTrkExtraData(trk);
static coOrd p0,p1;
- static BOOL_T editState;
- wDrawColor color;
+ static BOOL_T editState = FALSE;
+
if (GetTrkType(trk) != T_BEZIER) return C_TERMINATE;
p0.x = xx->bezierData.pos[0].x + ((xx->bezierData.pos[3].x - xx->bezierData.pos[0].x)/2);
p0.y = xx->bezierData.pos[0].y + ((xx->bezierData.pos[3].y - xx->bezierData.pos[0].y)/2);
switch (action) {
case C_DOWN:
+ DrawBezierDescription( trk, &mainD, wDrawColorWhite );
case C_MOVE:
case C_UP:
editState = TRUE;
p1 = pos;
- color = GetTrkColor( trk, &mainD );
- DrawLine( &mainD, p0, pos, 0, wDrawColorBlack );
xx->bezierData.descriptionOff.x = pos.x - p0.x;
xx->bezierData.descriptionOff.y = pos.y - p0.y;
if (action == C_UP) {
editState = FALSE;
+ wDrawColor color = GetTrkColor( trk, &mainD );
+ DrawBezierDescription( trk, &mainD, color );
}
- MainRedraw();
- MapRedraw();
return action==C_UP?C_TERMINATE:C_CONTINUE;
case C_REDRAW:
- if (editState)
- DrawLine( &mainD, p1, p0, 0, wDrawColorBlack );
+ if (editState) {
+ DrawBezierDescription( trk, &tempD, wDrawColorBlue );
+ DrawLine( &tempD, p1, p0, 0, wDrawColorBlue );
+ }
break;
@@ -230,8 +238,9 @@ static struct {
dynArr_t segs;
long width;
wDrawColor color;
+ long lineType;
} bezData;
-typedef enum { P0, A0, R0, C0, Z0, CP1, CP2, P1, A1, R1, C1, Z1, RA, LN, GR, LY, WI, CO } crvDesc_e;
+typedef enum { P0, A0, R0, C0, Z0, CP1, CP2, P1, A1, R1, C1, Z1, RA, LN, GR, LT, WI, CO, LY} crvDesc_e;
static descData_t bezDesc[] = {
/*P0*/ { DESC_POS, N_("End Pt 1: X,Y"), &bezData.pos[0] },
/*A0*/ { DESC_ANGLE, N_("End Angle"), &bezData.angle[0] },
@@ -248,9 +257,10 @@ static descData_t bezDesc[] = {
/*RA*/ { DESC_DIM, N_("MinRadius"), &bezData.radius },
/*LN*/ { DESC_DIM, N_("Length"), &bezData.length },
/*GR*/ { DESC_FLOAT, N_("Grade"), &bezData.grade },
-/*LY*/ { DESC_LAYER, N_("Layer"), &bezData.layerNumber },
+/*LT*/ { DESC_LIST, N_("Line Type"), &bezData.lineType},
/*WI*/ { DESC_LONG, N_("Line Width"), &bezData.width},
/*CO*/ { DESC_COLOR, N_("Line Color"), &bezData.color},
+/*LY*/ { DESC_LAYER, N_("Layer"), &bezData.layerNumber },
{ DESC_NULL } };
static void UpdateBezier( track_p trk, int inx, descData_p descUpd, BOOL_T final )
@@ -305,7 +315,7 @@ static void UpdateBezier( track_p trk, int inx, descData_p descUpd, BOOL_T final
case Z1:
ep = (inx==Z0?0:1);
UpdateTrkEndElev( trk, ep, GetTrkEndElevUnmaskedMode(trk,ep), bezData.elev[ep], NULL );
- ComputeElev( trk, 1-ep, FALSE, &bezData.elev[1-ep], NULL );
+ ComputeElev( trk, 1-ep, FALSE, &bezData.elev[1-ep], NULL, TRUE );
if ( bezData.length > minLength )
bezData.grade = fabs( (bezData.elev[0]-bezData.elev[1])/bezData.length )*100.0;
else
@@ -322,6 +332,9 @@ static void UpdateBezier( track_p trk, int inx, descData_p descUpd, BOOL_T final
case CO:
xx->bezierData.segsColor = bezData.color;
break;
+ case LT:
+ xx->bezierData.lineType = bezData.lineType;
+ break;
default:
AbortProg( "updateBezier: Bad inx %d", inx );
}
@@ -398,8 +411,8 @@ static void DescribeBezier( track_p trk, char * str, CSIZE_T len )
bezData.center[1] = params.arcP;
if (GetTrkType(trk) == T_BEZIER) {
- ComputeElev( trk, 0, FALSE, &bezData.elev[0], NULL );
- ComputeElev( trk, 1, FALSE, &bezData.elev[1], NULL );
+ ComputeElev( trk, 0, FALSE, &bezData.elev[0], NULL, FALSE );
+ ComputeElev( trk, 1, FALSE, &bezData.elev[1], NULL, FALSE );
if ( bezData.length > minLength )
bezData.grade = fabs( (bezData.elev[0]-bezData.elev[1])/bezData.length )*100.0;
@@ -415,9 +428,13 @@ static void DescribeBezier( track_p trk, char * str, CSIZE_T len )
if (GetTrkType(trk) == T_BEZIER) {
bezDesc[Z0].mode = EndPtIsDefinedElev(trk,0)?0:DESC_RO;
bezDesc[Z1].mode = EndPtIsDefinedElev(trk,1)?0:DESC_RO;
+ bezDesc[LT].mode = DESC_IGNORE;
}
- else
+ else {
bezDesc[Z0].mode = bezDesc[Z1].mode = DESC_IGNORE;
+ bezDesc[LT].mode = 0;
+ bezData.lineType = xx->bezierData.lineType;
+ }
bezDesc[A0].mode = DESC_RO;
bezDesc[A1].mode = DESC_RO;
bezDesc[C0].mode = DESC_RO;
@@ -434,11 +451,52 @@ static void DescribeBezier( track_p trk, char * str, CSIZE_T len )
if (GetTrkType(trk) == T_BEZIER)
DoDescribe( _("Bezier Track"), trk, bezDesc, UpdateBezier );
- else
+ else {
DoDescribe( _("Bezier Line"), trk, bezDesc, UpdateBezier );
+ if (bezDesc[LT].control0!=NULL) {
+ wListClear( (wList_p)bezDesc[LT].control0 );
+ wListAddValue( (wList_p)bezDesc[LT].control0, _("Solid"), NULL, (void*)0 );
+ wListAddValue( (wList_p)bezDesc[LT].control0, _("Dash"), NULL, (void*)1 );
+ wListAddValue( (wList_p)bezDesc[LT].control0, _("Dot"), NULL, (void*)2 );
+ wListAddValue( (wList_p)bezDesc[LT].control0, _("DashDot"), NULL, (void*)3 );
+ wListAddValue( (wList_p)bezDesc[LT].control0, _("DashDotDot"), NULL, (void*)4 );
+ wListAddValue( (wList_p)bezDesc[LT].control0, _("CenterDot"), NULL, (void*)5);
+ wListAddValue( (wList_p)bezDesc[LT].control0, _("PhantomDot"), NULL, (void*)6 );
+ wListSetIndex( (wList_p)bezDesc[LT].control0, bezData.lineType );
+ }
+ }
}
+EXPORT void SetBezierLineType( track_p trk, int width ) {
+ if (GetTrkType(trk) == T_BZRLIN) {
+ struct extraData * xx = GetTrkExtraData(trk);
+ switch(width) {
+ case 0:
+ xx->bezierData.lineType = DRAWLINESOLID;
+ break;
+ case 1:
+ xx->bezierData.lineType = DRAWLINEDASH;
+ break;
+ case 2:
+ xx->bezierData.lineType = DRAWLINEDOT;
+ break;
+ case 3:
+ xx->bezierData.lineType = DRAWLINEDASHDOT;
+ break;
+ case 4:
+ xx->bezierData.lineType = DRAWLINEDASHDOTDOT;
+ break;
+ case 5:
+ xx->bezierData.lineType = DRAWLINECENTER;
+ break;
+ case 6:
+ xx->bezierData.lineType = DRAWLINEPHANTOM;
+ break;
+ }
+ }
+}
+
static DIST_T DistanceBezier( track_p t, coOrd * p )
{
struct extraData *xx = GetTrkExtraData(t);
@@ -465,34 +523,30 @@ static void DrawBezier( track_p t, drawCmd_p d, wDrawColor color )
if (GetTrkType(t) == T_BZRLIN) {
+ unsigned long NotSolid = ~(DC_NOTSOLIDLINE);
+ d->options &= NotSolid;
+ if (xx->bezierData.lineType == DRAWLINESOLID) {}
+ else if (xx->bezierData.lineType == DRAWLINEDASH) d->options |= DC_DASH;
+ else if (xx->bezierData.lineType == DRAWLINEDOT) d->options |= DC_DOT;
+ else if (xx->bezierData.lineType == DRAWLINEDASHDOT) d->options |= DC_DASHDOT;
+ else if (xx->bezierData.lineType == DRAWLINEDASHDOTDOT) d->options |= DC_DASHDOTDOT;
+ else if (xx->bezierData.lineType == DRAWLINECENTER) d->options |= DC_CENTER;
+ else if (xx->bezierData.lineType == DRAWLINEPHANTOM) d->options |= DC_PHANTOM;
DrawSegsO(d,t,zero,0.0,xx->bezierData.arcSegs.ptr,xx->bezierData.arcSegs.cnt, 0.0, color, 0);
+ d->options &= NotSolid;
return;
}
- if (GetTrkWidth(t) == 2)
- widthOptions |= DTS_THICK2;
- if (GetTrkWidth(t) == 3)
- widthOptions |= DTS_THICK3;
-
-
- if ( ((d->funcs->options&wDrawOptTemp)==0) &&
+ if ( ((d->options&DC_SIMPLE)==0) &&
(labelWhen == 2 || (labelWhen == 1 && (d->options&DC_PRINT))) &&
labelScale >= d->scale &&
( GetTrkBits( t ) & TB_HIDEDESC ) == 0 ) {
DrawBezierDescription( t, d, color );
}
DIST_T scale2rail = (d->options&DC_PRINT)?(twoRailScale*2+1):twoRailScale;
- if ( tieDrawMode!=TIEDRAWMODE_NONE &&
- d!=&mapD &&
- (d->options&DC_TIES)!=0 &&
- d->scale<scale2rail/2 )
- DrawSegsO(d,t,zero,0.0,xx->bezierData.arcSegs.ptr,xx->bezierData.arcSegs.cnt, GetTrkGauge(t), color, widthOptions|DTS_TIES);
DrawSegsO(d,t,zero,0.0,xx->bezierData.arcSegs.ptr,xx->bezierData.arcSegs.cnt, GetTrkGauge(t), color, widthOptions);
- if ( (d->funcs->options & wDrawOptTemp) == 0 &&
- (d->options&DC_QUICK) == 0 ) {
- DrawEndPt( d, t, 0, color );
- DrawEndPt( d, t, 1, color );
- }
+ DrawEndPt( d, t, 0, color );
+ DrawEndPt( d, t, 1, color );
}
static void DeleteBezier( track_p t )
@@ -505,6 +559,7 @@ static void DeleteBezier( track_p t )
if (s.bezSegs.ptr) MyFree(s.bezSegs.ptr);
s.bezSegs.max = 0;
s.bezSegs.cnt = 0;
+ s.bezSegs.ptr = NULL;
}
}
if (xx->bezierData.arcSegs.ptr && !xx->bezierData.arcSegs.max)
@@ -522,13 +577,14 @@ static BOOL_T WriteBezier( track_p t, FILE * f )
BOOL_T track =(GetTrkType(t)==T_BEZIER);
options = GetTrkWidth(t) & 0x0F;
if ( ( GetTrkBits(t) & TB_HIDEDESC ) == 0 ) options |= 0x80;
- rc &= fprintf(f, "%s %d %u %ld %ld %0.6f %s %d %0.6f %0.6f %0.6f %0.6f %0.6f %0.6f %0.6f %0.6f 0 %0.6f %0.6f \n",
+ rc &= fprintf(f, "%s %d %u %ld %ld %0.6f %s %d %0.6f %0.6f %0.6f %0.6f %0.6f %0.6f %0.6f %0.6f %d %0.6f %0.6f \n",
track?"BEZIER":"BZRLIN",GetTrkIndex(t), GetTrkLayer(t), (long)options, wDrawGetRGB(xx->bezierData.segsColor), xx->bezierData.segsWidth,
- GetTrkScaleName(t), GetTrkVisible(t),
+ GetTrkScaleName(t), GetTrkVisible(t)|(GetTrkNoTies(t)?1<<2:0)|(GetTrkBridge(t)?1<<3:0),
xx->bezierData.pos[0].x, xx->bezierData.pos[0].y,
xx->bezierData.pos[1].x, xx->bezierData.pos[1].y,
xx->bezierData.pos[2].x, xx->bezierData.pos[2].y,
xx->bezierData.pos[3].x, xx->bezierData.pos[3].y,
+ xx->bezierData.lineType,
xx->bezierData.descriptionOff.x, xx->bezierData.descriptionOff.y )>0;
if (track) {
rc &= WriteEndPt( f, t, 0 );
@@ -538,7 +594,7 @@ static BOOL_T WriteBezier( track_p t, FILE * f )
return rc;
}
-static void ReadBezier( char * line )
+static BOOL_T ReadBezier( char * line )
{
struct extraData *xx;
track_p t;
@@ -548,20 +604,23 @@ static void ReadBezier( char * line )
char scale[10];
wIndex_t layer;
long options;
+ int lt;
char * cp = NULL;
unsigned long rgb;
DIST_T width;
- if (!GetArgs( line+6, "dLluwsdpppp0p",
- &index, &layer, &options, &rgb, &width, scale, &visible, &p0, &c1, &c2, &p1, &dp ) ) {
- return;
+ TRKTYP_T trkTyp = strncmp(line,"BEZIER",6)==0?T_BEZIER:T_BZRLIN;
+ if (!GetArgs( line+6, "dLluwsdppppdp",
+ &index, &layer, &options, &rgb, &width, scale, &visible, &p0, &c1, &c2, &p1, &lt, &dp ) ) {
+ return FALSE;
}
- if (strncmp(line,"BEZIER",6)==0)
- t = NewTrack( index, T_BEZIER, 0, sizeof *xx );
- else
- t = NewTrack( index, T_BZRLIN, 0, sizeof *xx );
+ if ( !ReadSegs() )
+ return FALSE;
+ t = NewTrack( index, trkTyp, 0, sizeof *xx );
xx = GetTrkExtraData(t);
- SetTrkVisible(t, visible);
+ SetTrkVisible(t, visible&2);
+ SetTrkNoTies(t,visible&4);
+ SetTrkBridge(t,visible&8);
SetTrkScale(t, LookupScale(scale));
SetTrkLayer(t, layer );
SetTrkWidth(t, (int)(options&0x0F));
@@ -570,15 +629,16 @@ static void ReadBezier( char * line )
xx->bezierData.pos[1] = c1;
xx->bezierData.pos[2] = c2;
xx->bezierData.pos[3] = p1;
+ xx->bezierData.lineType = lt;
xx->bezierData.descriptionOff = dp;
xx->bezierData.segsWidth = width;
xx->bezierData.segsColor = wDrawFindColor( rgb );
- ReadSegs();
FixUpBezier(xx->bezierData.pos,xx,GetTrkType(t) == T_BEZIER);
ComputeBezierBoundingBox(t,xx);
if (GetTrkType(t) == T_BEZIER) {
SetEndPts(t,2);
}
+ return TRUE;
}
static void MoveBezier( track_p trk, coOrd orig )
@@ -665,16 +725,21 @@ static BOOL_T SplitBezier( track_p trk, coOrd pos, EPINX_T ep, track_p *leftover
if (track) {
trk1 = NewBezierTrack(ep?newr:newl,NULL,0);
+ //Move elev data from ep
} else
trk1 = NewBezierLine(ep?newr:newl,NULL,0, xx->bezierData.segsColor,xx->bezierData.segsWidth);
- UndoModify(trk);
+ DIST_T height;
+ int opt;
+ GetTrkEndElev(trk,ep,&opt,&height);
+ UpdateTrkEndElev( trk1, ep, opt, height, (opt==ELEV_STATION)?GetTrkEndElevStation(trk,ep):NULL );
+ UndoModify(trk);
for (int i=0;i<4;i++) {
xx->bezierData.pos[i] = ep?newl[i]:newr[i];
}
FixUpBezier(xx->bezierData.pos,xx,track);
ComputeBezierBoundingBox(trk,xx);
SetTrkEndPoint( trk, ep, xx->bezierData.pos[ep?3:0], ep?xx->bezierData.a1:xx->bezierData.a0);
-
+ UpdateTrkEndElev( trk, ep, ELEV_NONE, 0, NULL);
*leftover = trk1;
*ep0 = 1-ep;
*ep1 = ep;
@@ -831,7 +896,6 @@ static BOOL_T MergeBezier(
}
DrawNewTrack( trk0 );
-
return TRUE;
}
@@ -842,7 +906,8 @@ static BOOL_T EnumerateBezier( track_p trk )
if (trk != NULL) {
DIST_T d;
struct extraData *xx = GetTrkExtraData(trk);
- d = xx->bezierData.length;
+ d = max(BezierOffsetLength(xx->bezierData.arcSegs,-GetTrkGauge(trk)/2.0),
+ BezierOffsetLength(xx->bezierData.arcSegs,GetTrkGauge(trk)/2.0));
ScaleLengthIncrement( GetTrkScale(trk), d );
}
return TRUE;
@@ -884,20 +949,72 @@ static BOOL_T GetParamsBezier( int inx, track_p trk, coOrd pos, trackParams_t *
params->arcA0 = segPtr->u.c.a0;
params->arcA1 = segPtr->u.c.a1;
}
- if ( inx == PARAMS_PARALLEL ) {
- params->ep = 0;
- } else if (inx == PARAMS_CORNU ){
+ if ( inx == PARAMS_NODES ) {
+ if (GetTrkType(trk) == T_BEZIER) return FALSE;
+ if (FindDistance(pos,params->bezierPoints[0]) > FindDistance(pos,params->bezierPoints[3]))
+ params->ep = 1;
+ else params->ep = 0;
+ coOrd curr_pos = params->bezierPoints[params->ep*3];
+ BOOL_T first = TRUE;
+ DYNARR_RESET(coOrd,params->nodes);
+ for (int i = 0; i<xx->bezierData.arcSegs.cnt;i++) {
+ trkSeg_p segPtr = &DYNARR_N(trkSeg_t,xx->bezierData.arcSegs,params->ep?xx->bezierData.arcSegs.cnt-1-i:i);
+ if (segPtr->type == SEG_STRLIN) {
+ BOOL_T eps = FindDistance(segPtr->u.l.pos[0],curr_pos)>FindDistance(segPtr->u.l.pos[1],curr_pos);
+ if (first) {
+ first = FALSE;
+ DYNARR_APPEND(coOrd,params->nodes,1);
+ DYNARR_LAST(coOrd,params->nodes) = segPtr->u.l.pos[eps];
+ }
+ DYNARR_APPEND(coOrd,params->nodes,1);
+ DYNARR_LAST(coOrd,params->nodes) = segPtr->u.l.pos[1-eps];
+ } else {
+ coOrd start,end;
+ Translate(&start,segPtr->u.c.center,segPtr->u.c.a0,fabs(segPtr->u.c.radius));
+ Translate(&end,segPtr->u.c.center,segPtr->u.c.a0+segPtr->u.c.a1,fabs(segPtr->u.c.radius));
+ BOOL_T back = FindDistance(start,curr_pos)>FindDistance(end,curr_pos);
+ if (segPtr->u.c.radius > 0.5) {
+ double min_angle = 360*acos(1.0-(0.1/fabs(segPtr->u.c.radius)))/M_PI; //Error max is 0.1"
+ double number = ceil(segPtr->u.c.a1/min_angle);
+ double arc_size = segPtr->u.c.a1/number;
+ for (int j=1-first;j<=number;j++) {
+ DYNARR_APPEND(coOrd,params->nodes,1);
+ if (back == params->ep)
+ Translate(&DYNARR_LAST(coOrd,params->nodes),segPtr->u.c.center,segPtr->u.c.a0+segPtr->u.c.a1-(j*arc_size),fabs(segPtr->u.c.radius) );
+ else
+ Translate(&DYNARR_LAST(coOrd,params->nodes),segPtr->u.c.center,segPtr->u.c.a0+(j*arc_size),fabs(segPtr->u.c.radius) );
+ }
+ first = FALSE;
+ } else {
+ if (first) {
+ first = FALSE;
+ DYNARR_APPEND(coOrd,params->nodes,1);
+ DYNARR_LAST(coOrd,params->nodes) = start;
+ }
+ DYNARR_APPEND(coOrd,params->nodes,1);
+ DYNARR_LAST(coOrd,params->nodes) = end;
+
+ }
+ }
+ curr_pos = DYNARR_LAST(coOrd,params->nodes);
+ }
+ params->lineOrig = params->bezierPoints[params->ep*3];
+ params->lineEnd = params->bezierPoints[(1-params->ep)*3];
+ return TRUE;
+ } else if ((inx == PARAMS_CORNU) || (inx == PARAMS_1ST_JOIN) || (inx == PARAMS_2ND_JOIN)){
params->ep = PickEndPoint( pos, trk);
} else {
params->ep = PickUnconnectedEndPointSilent( pos, trk);
}
if (params->ep>=0)
params->angle = GetTrkEndAngle(trk, params->ep);
+
return TRUE;
}
-static BOOL_T TrimBezier( track_p trk, EPINX_T ep, DIST_T dist ) {
+static BOOL_T TrimBezier( track_p trk, EPINX_T ep, DIST_T dist, coOrd endpos, ANGLE_T angle, DIST_T radius, coOrd center ) {
+ UndrawNewTrack( trk );
DeleteTrack(trk, TRUE);
return TRUE;
}
@@ -916,7 +1033,7 @@ static BOOL_T QueryBezier( track_p trk, int query )
return TRUE;
break;
case Q_EXCEPTION:
- return GetTrkType(trk) == T_BEZIER?xx->bezierData.minCurveRadius < (GetLayoutMinTrackRadius()-EPSILON):FALSE;
+ return GetTrkType(trk) == T_BEZIER?fabs(xx->bezierData.minCurveRadius) < (GetLayoutMinTrackRadius()-EPSILON):FALSE;
break;
case Q_CAN_MODIFY_CONTROL_POINTS:
return TRUE;
@@ -928,11 +1045,13 @@ static BOOL_T QueryBezier( track_p trk, int query )
return GetTrkType(trk) == T_BEZIER?TRUE:FALSE;
break;
case Q_CAN_PARALLEL:
- return (GetTrkType(trk) == T_BEZIER);
+ return TRUE;
break;
case Q_MODIFY_CAN_SPLIT:
case Q_CORNU_CAN_MODIFY:
return (GetTrkType(trk) == T_BEZIER);
+ case Q_GET_NODES:
+ return (GetTrkType(trk) == T_BZRLIN);
default:
return FALSE;
}
@@ -980,19 +1099,76 @@ BOOL_T GetBezierSegmentFromTrack(track_p trk, trkSeg_p seg_p) {
seg_p->bezSegs.cnt = 0;
if (seg_p->bezSegs.ptr) MyFree(seg_p->bezSegs.ptr);
seg_p->bezSegs.max = 0;
+ seg_p->bezSegs.ptr = NULL;
FixUpBezierSeg(seg_p->u.b.pos,seg_p,seg_p->type == SEG_BEZTRK);
return TRUE;
}
+BOOL_T GetTracksFromBezierSegment(trkSeg_p bezSeg, track_p newTracks[2], track_p trk) {
+ track_p trk_old = NULL;
+ newTracks[0] = NULL, newTracks[1] = NULL;
+ if (bezSeg->type != SEG_BEZTRK) return FALSE;
+ for (int i=0;i<bezSeg->bezSegs.cnt;i++) {
+ trkSeg_p seg = &DYNARR_N(trkSeg_t,bezSeg->bezSegs,i);
+ track_p new_trk;
+ if (seg->type == SEG_CRVTRK)
+ new_trk = NewCurvedTrack(seg->u.c.center,fabs(seg->u.c.radius),seg->u.c.a0,seg->u.c.a1,0);
+ else if (seg->type == SEG_STRTRK)
+ new_trk = NewStraightTrack(seg->u.l.pos[0],seg->u.l.pos[1]);
+ if (newTracks[0] == NULL) newTracks[0] = new_trk;
+ CopyAttributes( trk, new_trk );
+ newTracks[1] = new_trk;
+ if (trk_old) {
+ for (int i=0;i<2;i++) {
+ if (GetTrkEndTrk(trk_old,i)==NULL) {
+ coOrd pos = GetTrkEndPos(trk_old,i);
+ EPINX_T ep_n = PickUnconnectedEndPoint(pos,new_trk);
+ if (connectDistance >= FindDistance(GetTrkEndPos(trk_old,i),GetTrkEndPos(new_trk,ep_n))) {
+ ConnectTracks(trk_old,i,new_trk,ep_n);
+ break;
+ }
+ }
+ }
+ }
+ trk_old = new_trk;
+ }
+ return TRUE;
+}
+
+BOOL_T GetTracksFromBezierTrack(track_p trk, track_p newTracks[2]) {
+ trkSeg_t seg_temp;
+ struct extraData * xx = GetTrkExtraData(trk);
+ newTracks[0] = NULL, newTracks[1] = NULL;
+
+ if (!IsTrack(trk)) return FALSE;
+ seg_temp.type = SEG_BEZTRK;
+ for (int i=0;i<4;i++) seg_temp.u.b.pos[i] = xx->bezierData.pos[i];
+ seg_temp.color = xx->bezierData.segsColor;
+ seg_temp.bezSegs.cnt = 0;
+ seg_temp.bezSegs.max = 0;
+ //if (seg_temp->bezSegs.ptr) MyFree(seg_temp->bezSegs.ptr);
+ DYNARR_RESET(trkSeg_t,seg_temp.bezSegs);
+ FixUpBezierSeg(seg_temp.u.b.pos,&seg_temp,TRUE);
+ GetTracksFromBezierSegment(&seg_temp, newTracks, trk);
+ MyFree(seg_temp.bezSegs.ptr);
+ seg_temp.bezSegs.cnt = 0;
+ seg_temp.bezSegs.max = 0;
+ seg_temp.bezSegs.ptr = NULL;
+ return TRUE;
+
+}
+
static BOOL_T MakeParallelBezier(
track_p trk,
coOrd pos,
DIST_T sep,
+ DIST_T factor,
track_p * newTrkR,
coOrd * p0R,
- coOrd * p1R )
+ coOrd * p1R,
+ BOOL_T track)
{
struct extraData * xx = GetTrkExtraData(trk);
coOrd np[4], p;
@@ -1011,7 +1187,8 @@ static BOOL_T MakeParallelBezier(
for (int i =0; i<4;i++) {
np[i] = xx->bezierData.pos[i];
}
-
+ sep = sep+factor/xx->bezierData.minCurveRadius;
+ // Adjust sep based on radius and factor
if ( a2 > 180 ) {
Translate(&np[0],np[0],a+90,sep);
Translate(&np[1],np[1],a+90,sep);
@@ -1025,14 +1202,18 @@ static BOOL_T MakeParallelBezier(
}
if ( newTrkR ) {
- *newTrkR = NewBezierTrack( np, NULL, 0);
+ if (track)
+ *newTrkR = NewBezierTrack( np, NULL, 0);
+ else
+ *newTrkR = NewBezierLine( np, NULL, 0, wDrawColorBlack, 0);
} else {
DYNARR_SET( trkSeg_t, tempSegs_da, 1 );
tempSegs(0).color = wDrawColorBlack;
tempSegs(0).width = 0;
tempSegs_da.cnt = 1;
- tempSegs(0).type = SEG_BEZTRK;
+ tempSegs(0).type = track?SEG_BEZTRK:SEG_BEZLIN;
if (tempSegs(0).bezSegs.ptr) MyFree(tempSegs(0).bezSegs.ptr);
+ tempSegs(0).bezSegs.ptr = 0;
tempSegs(0).bezSegs.max = 0;
tempSegs(0).bezSegs.cnt = 0;
for (int i=0;i<4;i++) tempSegs(0).u.b.pos[i] = np[i];
@@ -1063,14 +1244,40 @@ BOOL_T MoveBezierEndPt ( track_p *trk, EPINX_T *ep, coOrd pos, DIST_T d0 ) {
track_p trk2;
struct extraData *xx;
if (SplitTrack(*trk,pos,*ep,&trk2,TRUE)) {
- if (trk2) DeleteTrack(trk2,TRUE);
+ if (trk2) {
+ UndrawNewTrack( trk2 );
+ DeleteTrack(trk2,TRUE);
+ }
+ UndrawNewTrack( *trk );
xx = GetTrkExtraData(*trk);
SetTrkEndPoint( *trk, *ep, *ep?xx->bezierData.pos[3]:xx->bezierData.pos[0], *ep?xx->bezierData.a1:xx->bezierData.a0 );
+ DrawNewTrack( *trk );
return TRUE;
}
return FALSE;
}
+static wBool_t CompareBezier( track_cp trk1, track_cp trk2 )
+{
+ struct extraData *xx1 = GetTrkExtraData( trk1 );
+ struct extraData *xx2 = GetTrkExtraData( trk2 );
+ char * cp = message + strlen(message);
+ REGRESS_CHECK_POS( "Pos[0]", xx1, xx2, bezierData.pos[0] )
+ REGRESS_CHECK_POS( "Pos[1]", xx1, xx2, bezierData.pos[1] )
+ REGRESS_CHECK_POS( "Pos[2]", xx1, xx2, bezierData.pos[2] )
+ REGRESS_CHECK_POS( "Pos[3]", xx1, xx2, bezierData.pos[3] )
+ REGRESS_CHECK_DIST( "MinCurveRadius", xx1, xx2, bezierData.minCurveRadius )
+ REGRESS_CHECK_ANGLE( "A0", xx1, xx2, bezierData.a0 )
+ REGRESS_CHECK_ANGLE( "A1", xx1, xx2, bezierData.a1 )
+ // Check arcSegs
+ REGRESS_CHECK_DIST( "Length", xx1, xx2, bezierData.length )
+ REGRESS_CHECK_POS( "DescOff", xx1, xx2, bezierData.descriptionOff )
+ REGRESS_CHECK_WIDTH( "SegsWidth", xx1, xx2, bezierData.segsWidth )
+ REGRESS_CHECK_COLOR( "SegsColor", xx1, xx2, bezierData.segsColor )
+ REGRESS_CHECK_INT( "LineType", xx1, xx2, bezierData.lineType )
+ return TRUE;
+}
+
static trackCmd_t bezlinCmds = {
"BZRLIN",
DrawBezier,
@@ -1102,7 +1309,11 @@ static trackCmd_t bezlinCmds = {
NULL,
NULL,
NULL,
- RebuildBezier
+ RebuildBezier,
+ NULL,
+ NULL,
+ NULL,
+ CompareBezier
};
static trackCmd_t bezierCmds = {
@@ -1136,7 +1347,11 @@ static trackCmd_t bezierCmds = {
NULL,
MakeParallelBezier,
NULL,
- RebuildBezier
+ RebuildBezier,
+ NULL,
+ NULL,
+ NULL,
+ CompareBezier
};
@@ -1302,8 +1517,38 @@ LOG( log_bezierSegments, 1, ( " BezTr-Exit2 --> SI%d A%0.3f P[%0.3f %0.3f] D%
}
break;
- case SEGPROC_SPLIT:
- //TODO Split
+ case SEGPROC_SPLIT: ;
+ wIndex_t subinx;
+ double t;
+ double dd;
+ coOrd split_p = data->split.pos;
+ ANGLE_T angle = GetAngleSegs(segPtr->bezSegs.cnt,(trkSeg_p)segPtr->bezSegs.ptr, &split_p, &inx, &dd, &back, &subinx, NULL);
+ coOrd current[4];
+
+ BezierMathDistance(&split_p, segPtr->u.b.pos, 500, &t); //Find t value
+
+ for (int i=0;i<4;i++) {
+ current[i] = segPtr->u.b.pos[i];
+
+ }
+ for (int i=0;i<2;i++) {
+ data->split.newSeg[i].type = segPtr->type;
+ data->split.newSeg[i].color = segPtr->color;
+ data->split.newSeg[i].width = segPtr->width;
+ data->split.newSeg[i].bezSegs.ptr = NULL;
+ data->split.newSeg[i].bezSegs.cnt = 0;
+ data->split.newSeg[i].bezSegs.max = 0;
+ }
+ BezierSplit(segPtr->u.b.pos, data->split.newSeg[0].u.b.pos, data->split.newSeg[1].u.b.pos, t);
+
+ FixUpBezierSeg(data->split.newSeg[0].u.b.pos,&data->split.newSeg[0],segPtr->type == SEG_BEZTRK);
+ FixUpBezierSeg(data->split.newSeg[1].u.b.pos,&data->split.newSeg[1],segPtr->type == SEG_BEZTRK);
+
+ data->split.length[0] = data->split.newSeg[0].u.b.length;
+ data->split.length[1] = data->split.newSeg[1].u.b.length;
+
+ data->split.pos = split_p;
+
break;
case SEGPROC_GETANGLE:
diff --git a/app/bin/tbezier.h b/app/bin/tbezier.h
index 1e8b915..823992e 100644
--- a/app/bin/tbezier.h
+++ b/app/bin/tbezier.h
@@ -32,6 +32,7 @@ typedef struct {
coOrd descriptionOff;
DIST_T segsWidth;
wDrawColor segsColor;
+ drawLineType_e lineType;
} BezierData_t;
@@ -51,7 +52,10 @@ void FixUpBezier(coOrd[4], struct extraData*, BOOL_T);
void FixUpBezierSeg(coOrd[4], trkSeg_p , BOOL_T);
void FixUpBezierSegs(trkSeg_p p,int segCnt);
BOOL_T GetBezierSegmentFromTrack(track_p, trkSeg_p);
+BOOL_T GetTracksFromBezierTrack(track_p trk, track_p newTracks[2]);
+BOOL_T GetTracksFromBezierSegment(trkSeg_p bezSeg, track_p newTracks[2], track_p old);
+void SetBezierLineType( track_p trk, int width );
-DIST_T BezierDescriptionDistance(coOrd pos,track_p trk );
+DIST_T BezierDescriptionDistance(coOrd pos,track_p trk, coOrd *, BOOL_T, BOOL_T * );
STATUS_T BezierDescriptionMove(track_p trk,wAction_t action,coOrd pos );
diff --git a/app/bin/tcornu.c b/app/bin/tcornu.c
index 74a7a5e..dd09cfa 100644
--- a/app/bin/tcornu.c
+++ b/app/bin/tcornu.c
@@ -136,8 +136,8 @@ EXPORT char * CreateSegPathList(track_p trk) {
char * cp = "\0\0";
if (GetTrkType(trk) != T_CORNU) return cp;
struct extraData *xx = GetTrkExtraData(trk);
- if (xx->cornuData.cornuPath) free(xx->cornuData.cornuPath);
- xx->cornuData.cornuPath = malloc(xx->cornuData.arcSegs.cnt+2);
+ if (xx->cornuData.cornuPath) MyFree(xx->cornuData.cornuPath);
+ xx->cornuData.cornuPath = MyMalloc(xx->cornuData.arcSegs.cnt+2);
int j= 0;
for (int i = 0;i<xx->cornuData.arcSegs.cnt;i++,j++) {
xx->cornuData.cornuPath[j] = i+1;
@@ -178,17 +178,24 @@ static void ComputeCornuBoundingBox( track_p trk, struct extraData * xx )
DIST_T CornuDescriptionDistance(
coOrd pos,
- track_p trk )
+ track_p trk,
+ coOrd * dpos,
+ BOOL_T show_hidden,
+ BOOL_T * hidden)
{
struct extraData *xx = GetTrkExtraData(trk);
coOrd p1;
-
- if ( GetTrkType( trk ) != T_CORNU || ( GetTrkBits( trk ) & TB_HIDEDESC ) != 0 )
+ if (hidden) *hidden = FALSE;
+ if ( GetTrkType( trk ) != T_CORNU || ((( GetTrkBits( trk ) & TB_HIDEDESC ) != 0) && !show_hidden) )
return 100000;
- p1.x = xx->cornuData.pos[0].x + ((xx->cornuData.pos[1].x-xx->cornuData.pos[0].x)/2) + xx->cornuData.descriptionOff.x;
- p1.y = xx->cornuData.pos[0].y + ((xx->cornuData.pos[1].y-xx->cornuData.pos[0].y)/2) + xx->cornuData.descriptionOff.y;
-
+ coOrd offset = xx->cornuData.descriptionOff;
+
+ if (( GetTrkBits( trk ) & TB_HIDEDESC ) != 0) offset = zero;
+ p1.x = xx->cornuData.pos[0].x + ((xx->cornuData.pos[1].x-xx->cornuData.pos[0].x)/2) + offset.x;
+ p1.y = xx->cornuData.pos[0].y + ((xx->cornuData.pos[1].y-xx->cornuData.pos[0].y)/2) + offset.y;
+ if (hidden) *hidden = (GetTrkBits( trk ) & TB_HIDEDESC);
+ *dpos = p1;
return FindDistance( p1, pos );
}
@@ -211,8 +218,9 @@ static void DrawCornuDescription(
pos.x += xx->cornuData.descriptionOff.x;
pos.y += xx->cornuData.descriptionOff.y;
fp = wStandardFont( F_TIMES, FALSE, FALSE );
- sprintf( message, _("Cornu Curve: length=%0.3f min radius=%0.3f"),
- xx->cornuData.length, xx->cornuData.minCurveRadius);
+
+ sprintf( message, _("Cornu: len=%0.2f min_rad=%0.2f"),
+ xx->cornuData.length, (xx->cornuData.minCurveRadius>=10000.00)?0.0:xx->cornuData.minCurveRadius);
DrawBoxedString( BOX_BOX, d, pos, message, fp, (wFontSize_t)descriptionFontSize, color, 0.0 );
}
@@ -225,7 +233,6 @@ STATUS_T CornuDescriptionMove(
struct extraData *xx = GetTrkExtraData(trk);
static coOrd p0,p1;
static BOOL_T editState;
- wDrawColor color;
if (GetTrkType(trk) != T_CORNU) return C_TERMINATE;
@@ -234,24 +241,25 @@ STATUS_T CornuDescriptionMove(
switch (action) {
case C_DOWN:
+ DrawCornuDescription( trk, &mainD, wDrawColorWhite );
case C_MOVE:
case C_UP:
editState = TRUE;
p1 = pos;
- color = GetTrkColor( trk, &mainD );
xx->cornuData.descriptionOff.x = pos.x - p0.x;
xx->cornuData.descriptionOff.y = pos.y - p0.y;
- DrawCornuDescription( trk, &mainD, color );
if (action == C_UP) {
editState = FALSE;
+ wDrawColor color = GetTrkColor( trk, &mainD );
+ DrawCornuDescription( trk, &mainD, color );
}
- MainRedraw();
- MapRedraw();
return action==C_UP?C_TERMINATE:C_CONTINUE;
case C_REDRAW:
- if (editState)
- DrawLine( &mainD, p1, p0, 0, wDrawColorBlack );
+ if (editState) {
+ DrawCornuDescription( trk, &tempD, wDrawColorBlue );
+ DrawLine( &tempD, p1, p0, 0, wDrawColorBlue );
+ }
break;
}
@@ -365,18 +373,20 @@ static void UpdateCornu( track_p trk, int inx, descData_p descUpd, BOOL_T final
case R0:
if (GetTrkEndTrk(trk,0)) break;
updateEndPts = TRUE;
- xx->cornuData.r[0] = cornData.radius[0];
- Translate(&xx->cornuData.c[0],xx->cornuData.pos[0],NormalizeAngle(xx->cornuData.a[0]+90),xx->cornuData.r[0]);
+ xx->cornuData.r[0] = fabs(cornData.radius[0]);
+ Translate(&xx->cornuData.c[0],xx->cornuData.pos[0],NormalizeAngle(xx->cornuData.a[0]+90),cornData.radius[0]);
cornData.center[0] = xx->cornuData.c[0];
+ cornData.radius[0] = fabs(cornData.radius[0]);
cornuDesc[R0].mode |= DESC_CHANGE;
cornuDesc[C0].mode |= DESC_CHANGE;
break;
case R1:
if (GetTrkEndTrk(trk,1)) break;
updateEndPts = TRUE;
- xx->cornuData.r[1]= cornData.radius[1];
- Translate(&xx->cornuData.c[1],xx->cornuData.pos[1],NormalizeAngle(xx->cornuData.a[1]-90),xx->cornuData.r[1]);
+ xx->cornuData.r[1]= fabs(cornData.radius[1]);
+ Translate(&xx->cornuData.c[1],xx->cornuData.pos[1],NormalizeAngle(xx->cornuData.a[1]-90),cornData.radius[1]);
cornData.center[1] = xx->cornuData.c[1];
+ cornData.radius[1] = fabs(cornData.radius[1]);
cornuDesc[R1].mode |= DESC_CHANGE;
cornuDesc[C1].mode |= DESC_CHANGE;
break;
@@ -384,7 +394,7 @@ static void UpdateCornu( track_p trk, int inx, descData_p descUpd, BOOL_T final
case Z1:
ep = (inx==Z0?0:1);
UpdateTrkEndElev( trk, ep, GetTrkEndElevUnmaskedMode(trk,ep), cornData.elev[ep], NULL );
- ComputeElev( trk, 1-ep, FALSE, &cornData.elev[1-ep], NULL );
+ ComputeElev( trk, 1-ep, FALSE, &cornData.elev[1-ep], NULL, TRUE );
if ( cornData.length > minLength )
cornData.grade = fabs( (cornData.elev[0]-cornData.elev[1])/cornData.length )*100.0;
else
@@ -417,7 +427,7 @@ static void UpdateCornu( track_p trk, int inx, descData_p descUpd, BOOL_T final
ts[0] = GetTrkEndTrk(trk,0);
ts[1] = GetTrkEndTrk(trk,1);
SetUpCornuParmFromTracks(ts,&cp,xx);
- CallCornu(xx->cornuData.pos, tracks, NULL, &xx->cornuData.arcSegs, &cp);
+ CallCornu0(xx->cornuData.pos, xx->cornuData.c, xx->cornuData.a, xx->cornuData.r, &xx->cornuData.arcSegs, FALSE);
//FixUpCornu(xx->bezierData.pos, xx, IsTrack(trk));
ComputeCornuBoundingBox(trk, xx);
@@ -454,8 +464,8 @@ static void DescribeCornu( track_p trk, char * str, CSIZE_T len )
cornData.radius[0] = xx->cornuData.r[0];
cornData.radius[1] = xx->cornuData.r[1];
if (GetTrkType(trk) == T_CORNU) {
- ComputeElev( trk, 0, FALSE, &cornData.elev[0], NULL );
- ComputeElev( trk, 1, FALSE, &cornData.elev[1], NULL );
+ ComputeElev( trk, 0, FALSE, &cornData.elev[0], NULL, FALSE );
+ ComputeElev( trk, 1, FALSE, &cornData.elev[1], NULL, FALSE );
if ( cornData.length > minLength )
cornData.grade = fabs( (cornData.elev[0]-cornData.elev[1])/cornData.length )*100.0;
@@ -517,30 +527,16 @@ static void DrawCornu( track_p t, drawCmd_p d, wDrawColor color )
struct extraData *xx = GetTrkExtraData(t);
long widthOptions = DTS_LEFT|DTS_RIGHT;
- if (GetTrkWidth(t) == 2)
- widthOptions |= DTS_THICK2;
- if (GetTrkWidth(t) == 3)
- widthOptions |= DTS_THICK3;
-
-
- if ( ((d->funcs->options&wDrawOptTemp)==0) &&
+ if ( ((d->options&DC_SIMPLE)==0) &&
(labelWhen == 2 || (labelWhen == 1 && (d->options&DC_PRINT))) &&
labelScale >= d->scale &&
( GetTrkBits( t ) & TB_HIDEDESC ) == 0 ) {
DrawCornuDescription( t, d, color );
}
DIST_T scale2rail = (d->options&DC_PRINT)?(twoRailScale*2+1):twoRailScale;
- if ( tieDrawMode!=TIEDRAWMODE_NONE &&
- d!=&mapD &&
- (d->options&DC_TIES)!=0 &&
- d->scale<scale2rail/2 )
- DrawSegsO(d,t,zero,0.0,xx->cornuData.arcSegs.ptr,xx->cornuData.arcSegs.cnt, GetTrkGauge(t), color, widthOptions|DTS_TIES);
DrawSegsO(d,t,zero,0.0,xx->cornuData.arcSegs.ptr,xx->cornuData.arcSegs.cnt, GetTrkGauge(t), color, widthOptions);
- if ( (d->funcs->options & wDrawOptTemp) == 0 &&
- (d->options&DC_QUICK) == 0 ) {
- DrawEndPt( d, t, 0, color );
- DrawEndPt( d, t, 1, color );
- }
+ DrawEndPt( d, t, 0, color );
+ DrawEndPt( d, t, 1, color );
}
void FreeSubSegs(trkSeg_t* s) {
@@ -579,7 +575,7 @@ static BOOL_T WriteCornu( track_p t, FILE * f )
if ( ( GetTrkBits(t) & TB_HIDEDESC ) == 0 ) options |= 0x80;
rc &= fprintf(f, "%s %d %d %ld 0 0 %s %d %0.6f %0.6f %0.6f %0.6f %0.6f %0.6f %0.6f %0.6f %0.6f %0.6f %0.6f %0.6f \n",
"CORNU",GetTrkIndex(t), GetTrkLayer(t), (long)options,
- GetTrkScaleName(t), GetTrkVisible(t),
+ GetTrkScaleName(t), GetTrkVisible(t)|(GetTrkNoTies(t)?1<<2:0)|(GetTrkBridge(t)?1<<3:0),
xx->cornuData.pos[0].x, xx->cornuData.pos[0].y,
xx->cornuData.a[0],
xx->cornuData.r[0],
@@ -593,11 +589,10 @@ static BOOL_T WriteCornu( track_p t, FILE * f )
rc &= WriteEndPt( f, t, 1 );
}
rc &= WriteSegs( f, xx->cornuData.arcSegs.cnt, xx->cornuData.arcSegs.ptr );
- //rc &= fprintf(f, "\tEND\n" )>0;
return rc;
}
-static void ReadCornu( char * line )
+static BOOL_T ReadCornu( char * line )
{
struct extraData *xx;
track_p t;
@@ -613,12 +608,16 @@ static void ReadCornu( char * line )
if (!GetArgs( line+6, "dLl00sdpffppffp",
&index, &layer, &options, scale, &visible, &p0, &a0, &r0, &c0, &p1, &a1, &r1, &c1 ) ) {
- return;
+ return FALSE;
}
+ if ( !ReadSegs() )
+ return FALSE;
t = NewTrack( index, T_CORNU, 0, sizeof *xx );
xx = GetTrkExtraData(t);
- SetTrkVisible(t, visible);
+ SetTrkVisible(t, visible&2);
+ SetTrkNoTies(t, visible&4);
+ SetTrkBridge(t, visible&8);
SetTrkScale(t, LookupScale(scale));
SetTrkLayer(t, layer );
SetTrkWidth(t, (int)(options&0x0F));
@@ -632,10 +631,10 @@ static void ReadCornu( char * line )
xx->cornuData.c[1] = c1;
xx->cornuData.r[1] = r1;
xx->cornuData.descriptionOff.x = xx->cornuData.descriptionOff.y = 0.0;
- ReadSegs();
FixUpCornu0(xx->cornuData.pos,xx->cornuData.c,xx->cornuData.a, xx->cornuData.r, xx);
ComputeCornuBoundingBox(t,xx);
SetEndPts(t,2);
+ return TRUE;
}
static void MoveCornu( track_p trk, coOrd orig )
@@ -667,6 +666,9 @@ static void RescaleCornu( track_p trk, FLOAT_T ratio )
for (int i=0;i<2;i++) {
xx->cornuData.pos[i].x *= ratio;
xx->cornuData.pos[i].y *= ratio;
+ xx->cornuData.c[i].x *= ratio;
+ xx->cornuData.c[i].y *= ratio;
+ xx->cornuData.r[i] *= ratio;
}
RebuildCornu(trk);
@@ -689,13 +691,63 @@ void GetCornuParmsNear(track_p t, int sel, coOrd * pos2, coOrd * center, ANGLE_T
coOrd pos = *pos2;
double dd = DistanceCornu(t, &pos); //Pos adjusted to be on curve
int inx;
+ *radius = 0.0;
+ *angle2 = 0.0;
+ *center = zero;
wBool_t back,neg;
ANGLE_T angle = GetAngleSegs(xx->cornuData.arcSegs.cnt,(trkSeg_t *)(xx->cornuData.arcSegs.ptr),&pos,&inx,NULL,&back,NULL,&neg);
+ if (inx == -1) {
+ return; //Error in GetAngle
+ }
+
trkSeg_p segPtr = &DYNARR_N(trkSeg_t, xx->cornuData.arcSegs, inx);
- GetAngleSegs(segPtr->bezSegs.cnt,(trkSeg_t *)(segPtr->bezSegs.ptr),&pos,&inx,NULL,&back,NULL,&neg);
- segPtr = &DYNARR_N(trkSeg_t, segPtr->bezSegs, inx);
+ if (segPtr->type == SEG_BEZTRK) {
+ GetAngleSegs(segPtr->bezSegs.cnt,(trkSeg_t *)(segPtr->bezSegs.ptr),&pos,&inx,NULL,&back,NULL,&neg);
+ if (inx ==-1) return;
+ segPtr = &DYNARR_N(trkSeg_t, segPtr->bezSegs, inx);
+ }
+
+ if (segPtr->type == SEG_STRTRK) {
+ *radius = 0.0;
+ *center = zero;
+ } else if (segPtr->type == SEG_CRVTRK) {
+ *center = segPtr->u.c.center;
+ *radius = fabs(segPtr->u.c.radius);
+ }
+ if (sel)
+ angle = NormalizeAngle(angle+(neg==back?0:180));
+ else
+ angle = NormalizeAngle(angle+(neg==back?180:0));
+ *angle2 = angle;
+ *pos2 = pos;
+}
+
+void GetCornuParmsTemp(dynArr_t * array_p, int sel, coOrd * pos2, coOrd * center, ANGLE_T * angle2, DIST_T * radius ) {
+
+ coOrd pos = *pos2;
+ int inx;
+ wBool_t back,neg;
+ *radius = 0.0;
+ *center = zero;
+ *angle2 = 0.0;
+
+ ANGLE_T angle = GetAngleSegs(array_p->cnt,(trkSeg_p)array_p->ptr,&pos,&inx,NULL,&back,NULL,&neg);
+
+ if (inx==-1) return;
+
+ trkSeg_p segPtr = &DYNARR_N(trkSeg_t, *array_p, inx);
+
+ if (segPtr->type == SEG_BEZTRK) {
+
+ GetAngleSegs(segPtr->bezSegs.cnt,(trkSeg_t *)(segPtr->bezSegs.ptr),&pos,&inx,NULL,&back,NULL,&neg);
+
+ if (inx ==-1) return;
+
+ segPtr = &DYNARR_N(trkSeg_t, segPtr->bezSegs, inx);
+
+ }
if (segPtr->type == SEG_STRTRK) {
*radius = 0.0;
@@ -734,9 +786,14 @@ static BOOL_T SplitCornu( track_p trk, coOrd pos, EPINX_T ep, track_p *leftover,
ANGLE_T angle = GetAngleSegs(xx->cornuData.arcSegs.cnt,(trkSeg_t *)(xx->cornuData.arcSegs.ptr),&pos,&inx,NULL,&back,NULL,&neg);
+ if (inx == -1) return FALSE;
+
trkSeg_p segPtr = &DYNARR_N(trkSeg_t, xx->cornuData.arcSegs, inx);
GetAngleSegs(segPtr->bezSegs.cnt,(trkSeg_t *)(segPtr->bezSegs.ptr),&pos,&inx,NULL,&back,NULL,&neg);
+
+ if (inx == -1) return FALSE;
+
segPtr = &DYNARR_N(trkSeg_t, segPtr->bezSegs, inx);
if (segPtr->type == SEG_STRTRK) {
@@ -767,6 +824,7 @@ static BOOL_T SplitCornu( track_p trk, coOrd pos, EPINX_T ep, track_p *leftover,
}
trk1 = NewCornuTrack(new.pos,new.center,new.angle,new.radius,NULL,0);
+ //Copy elevation details from old ep to new ep 0/1
if (trk1==NULL) {
wBeep();
InfoMessage(_("Cornu Create Failed for p1[%0.3f,%0.3f] p2[%0.3f,%0.3f], c1[%0.3f,%0.3f] c2[%0.3f,%0.3f], a1=%0.3f a2=%0.3f, r1=%s r2=%s"),
@@ -779,20 +837,26 @@ static BOOL_T SplitCornu( track_p trk, coOrd pos, EPINX_T ep, track_p *leftover,
UndoEnd();
return FALSE;
}
+ DIST_T height;
+ int opt;
+ GetTrkEndElev(trk,ep,&opt,&height);
+ UpdateTrkEndElev( trk1, ep, opt, height, (opt==ELEV_STATION)?GetTrkEndElevStation(trk,ep):NULL );
UndoModify(trk);
xx->cornuData.pos[ep] = pos;
xx->cornuData.a[ep] = NormalizeAngle(new.angle[1-ep]+180);
xx->cornuData.r[ep] = new.radius[1-ep];
xx->cornuData.c[ep] = new.center[1-ep];
+ //Wipe out old elevation for ep1
RebuildCornu(trk);
SetTrkEndPoint(trk, ep, xx->cornuData.pos[ep], xx->cornuData.a[ep]);
+ UpdateTrkEndElev( trk, ep, ELEV_NONE, 0, NULL);
*leftover = trk1;
- *ep0 = 1-ep;
- *ep1 = ep;
+ *ep0 = 1-ep; //Which end is for new on pos?
+ *ep1 = ep; //Which end is for old trk?
return TRUE;
}
@@ -801,8 +865,12 @@ BOOL_T MoveCornuEndPt ( track_p *trk, EPINX_T *ep, coOrd pos, DIST_T d0 ) {
track_p trk2;
if (SplitTrack(*trk,pos,*ep,&trk2,TRUE)) {
struct extraData *xx = GetTrkExtraData(*trk);
- if (trk2) DeleteTrack(trk2,TRUE);
+ if (trk2) {
+ UndrawNewTrack( trk2 );
+ DeleteTrack(trk2,TRUE);
+ }
SetTrkEndPoint( *trk, *ep, *ep?xx->cornuData.pos[1]:xx->cornuData.pos[0], *ep?xx->cornuData.a[1]:xx->cornuData.a[0] );
+ DrawNewTrack( *trk );
return TRUE;
}
return FALSE;
@@ -923,7 +991,8 @@ static BOOL_T EnumerateCornu( track_p trk )
if (trk != NULL) {
struct extraData *xx = GetTrkExtraData(trk);
DIST_T d;
- d = xx->cornuData.length;
+ d = max(CornuOffsetLength(xx->cornuData.arcSegs,-GetTrkGauge(trk)/2.0),
+ CornuOffsetLength(xx->cornuData.arcSegs,GetTrkGauge(trk)/2.0));
ScaleLengthIncrement( GetTrkScale(trk), d );
}
return TRUE;
@@ -1004,29 +1073,63 @@ static BOOL_T MergeCornu(
DrawNewTrack( trk3 );
UndoEnd();
-
return TRUE;
}
-BOOL_T GetBezierSegmentsFromCornu(track_p trk, dynArr_t * segs) {
+BOOL_T GetBezierSegmentsFromCornu(track_p trk, dynArr_t * segs, BOOL_T track) {
struct extraData * xx = GetTrkExtraData(trk);
for (int i=0;i<xx->cornuData.arcSegs.cnt;i++) {
- DYNARR_APPEND(trkSeg_t, * segs, 10);
+ trkSeg_p p = (trkSeg_t *) xx->cornuData.arcSegs.ptr+i;
+ if (p->type == SEG_BEZTRK) {
+ if (track) {
+ DYNARR_APPEND(trkSeg_t, * segs, 10);
+ trkSeg_p segPtr = &DYNARR_N(trkSeg_t,* segs,segs->cnt-1);
+ segPtr->type = SEG_BEZTRK;
+ segPtr->color = wDrawColorBlack;
+ segPtr->width = 0;
+ if (segPtr->bezSegs.ptr) MyFree(segPtr->bezSegs.ptr);
+ segPtr->bezSegs.cnt = 0;
+ segPtr->bezSegs.max = 0;
+ segPtr->bezSegs.ptr = NULL;
+ for (int j=0;j<4;j++) segPtr->u.b.pos[j] = p->u.b.pos[j];
+ FixUpBezierSeg(segPtr->u.b.pos,segPtr,TRUE);
+ } else {
+ for (int j=0;j<p->bezSegs.cnt;j++) {
+ trkSeg_p bez_p = &DYNARR_N(trkSeg_t,p->bezSegs,j);
+ DYNARR_APPEND(trkSeg_t, * segs, 10);
+ trkSeg_p segPtr = &DYNARR_LAST(trkSeg_t,* segs);
+ if (bez_p->type == SEG_CRVTRK) segPtr->type = SEG_CRVLIN;
+ if (bez_p->type == SEG_STRTRK) segPtr->type = SEG_STRLIN;
+ segPtr->u = bez_p->u;
+ segPtr->width = bez_p->width;
+ segPtr->color = bez_p->color;
+ }
+ }
+ } else if (p->type == SEG_STRTRK) {
+ DYNARR_APPEND(trkSeg_t, * segs, 1);
+ trkSeg_p segPtr = &DYNARR_N(trkSeg_t,* segs,segs->cnt-1);
+ segPtr->type = track?SEG_STRTRK:SEG_STRLIN;
+ segPtr->color = wDrawColorBlack;
+ segPtr->width = 0;
+ for (int j=0;j<2;j++) segPtr->u.l.pos[i] = p->u.l.pos[i];
+ segPtr->u.l.angle = p->u.l.angle;
+ segPtr->u.l.option = 0;
+ } else if (p->type == SEG_CRVTRK) {
+ DYNARR_APPEND(trkSeg_t, * segs, 1);
trkSeg_p segPtr = &DYNARR_N(trkSeg_t,* segs,segs->cnt-1);
- segPtr->type = SEG_BEZTRK;
+ segPtr->type = track?SEG_CRVTRK:SEG_CRVLIN;
segPtr->color = wDrawColorBlack;
segPtr->width = 0;
- if (segPtr->bezSegs.ptr) MyFree(segPtr->bezSegs.ptr);
- segPtr->bezSegs.cnt = 0;
- segPtr->bezSegs.max = 0;
- segPtr->bezSegs.ptr = NULL;
- trkSeg_p p = (trkSeg_t *) xx->cornuData.arcSegs.ptr+i;
- for (int j=0;j<4;j++) segPtr->u.b.pos[j] = p->u.b.pos[j];
- FixUpBezierSeg(segPtr->u.b.pos,segPtr,TRUE);
+ segPtr->u.c.a0 = p->u.c.a0;
+ segPtr->u.c.a1 = p->u.c.a1;
+ segPtr->u.c.center = p->u.c.center;
+ segPtr->u.c.radius = p->u.c.radius;
+ }
}
return TRUE;
}
+
static DIST_T GetLengthCornu( track_p trk )
{
struct extraData *xx = GetTrkExtraData(trk);
@@ -1052,6 +1155,7 @@ static BOOL_T GetParamsCornu( int inx, track_p trk, coOrd pos, trackParams_t * p
params->track_angle = GetAngleSegs( //Find correct Segment and nearest point in it
xx->cornuData.arcSegs.cnt,xx->cornuData.arcSegs.ptr,
&pos, &segInx, &d , &back, &segInx2, &negative );
+ if (segInx ==-1) return FALSE;
trkSeg_p segPtr = &DYNARR_N(trkSeg_t,xx->cornuData.arcSegs,segInx);
if (negative != back) params->track_angle = NormalizeAngle(params->track_angle+180); //Cornu is in reverse
if (segPtr->type == SEG_STRTRK) {
@@ -1079,13 +1183,16 @@ static BOOL_T GetParamsCornu( int inx, track_p trk, coOrd pos, trackParams_t * p
params->cornuCenter[i] = xx->cornuData.c[i];
}
params->len = xx->cornuData.length;
- if ( inx == PARAMS_PARALLEL ) {
- params->ep = 0;
- } else if (inx == PARAMS_CORNU) {
+ if ( inx == PARAMS_NODES ) {
+ return FALSE;
+ } else if ((inx == PARAMS_CORNU) || (inx == PARAMS_1ST_JOIN) || (inx == PARAMS_2ND_JOIN) ) {
params->ep = PickEndPoint( pos, trk);
} else {
params->ep = PickUnconnectedEndPointSilent( pos, trk );
+
}
+ if (params->ep == -1) return FALSE;
+
if (params->ep>=0) {
params->angle = GetTrkEndAngle(trk,params->ep);
}
@@ -1108,7 +1215,7 @@ static BOOL_T QueryCornu( track_p trk, int query )
return TRUE;
break;
case Q_EXCEPTION:
- return xx->cornuData.minCurveRadius < (GetLayoutMinTrackRadius()-EPSILON);
+ return fabs(xx->cornuData.minCurveRadius) < (GetLayoutMinTrackRadius()-EPSILON);
break;
case Q_IS_CORNU:
return TRUE;
@@ -1122,13 +1229,12 @@ static BOOL_T QueryCornu( track_p trk, int query )
// case Q_MODIFY_CANT_SPLIT: Remove Split Restriction
// case Q_CANNOT_BE_ON_END: Remove Restriction - Can have Cornu with no ends
case Q_CANNOT_PLACE_TURNOUT:
- return TRUE;
+ return FALSE;
break;
case Q_IGNORE_EASEMENT_ON_EXTEND:
return TRUE;
break;
case Q_MODIFY_CAN_SPLIT:
- case Q_CAN_EXTEND:
return TRUE;
default:
return FALSE;
@@ -1178,8 +1284,9 @@ static ANGLE_T GetAngleCornu(
BOOL_T back, neg;
int indx;
angle = GetAngleSegs( xx->cornuData.arcSegs.cnt, (trkSeg_p)xx->cornuData.arcSegs.ptr, &pos, &indx, NULL, &back, NULL, &neg );
- if ( ep0 ) *ep0 = -1;
- if ( ep1 ) *ep1 = -1;
+ if (!back) angle = NormalizeAngle(angle+180);
+ if ( ep0 ) *ep0 = neg?1:0;
+ if ( ep1 ) *ep1 = neg?0:1;
return angle;
}
@@ -1188,14 +1295,17 @@ BOOL_T GetCornuSegmentFromTrack(track_p trk, trkSeg_p seg_p) {
return TRUE;
}
+static dynArr_t cornuSegs_da;
static BOOL_T MakeParallelCornu(
track_p trk,
coOrd pos,
DIST_T sep,
+ DIST_T factor,
track_p * newTrkR,
coOrd * p0R,
- coOrd * p1R )
+ coOrd * p1R,
+ BOOL_T track )
{
struct extraData * xx = GetTrkExtraData(trk);
coOrd np[4], p, nc[2];
@@ -1216,40 +1326,41 @@ static BOOL_T MakeParallelCornu(
BOOL_T above = FALSE;
if ( diff_a < 180 ) above = TRUE; //Above track
if (xx->cornuData.a[0] <180) above = !above;
- Translate(&np[0],xx->cornuData.pos[0],xx->cornuData.a[0]+(above?90:-90),sep);
- Translate(&np[1],xx->cornuData.pos[1],xx->cornuData.a[1]+(above?-90:90),sep);
+ DIST_T sep0 = sep+((xx->cornuData.r[0]!=0.0)?fabs(factor/xx->cornuData.r[0]):0);
+ DIST_T sep1 = sep+((xx->cornuData.r[1]!=0.0)?fabs(factor/xx->cornuData.r[1]):0);
+ Translate(&np[0],xx->cornuData.pos[0],xx->cornuData.a[0]+(above?90:-90),sep0);
+ Translate(&np[1],xx->cornuData.pos[1],xx->cornuData.a[1]+(above?-90:90),sep1);
na[0]=xx->cornuData.a[0];
na[1]=xx->cornuData.a[1];
- if (xx->cornuData.r[0]) {
+ if (xx->cornuData.r[0] != 0.0) {
//Find angle between center and end angle of track
ANGLE_T ea0 =
NormalizeAngle(FindAngle(xx->cornuData.c[0],xx->cornuData.pos[0])-xx->cornuData.a[0]);
- DIST_T sep0 = sep;
- if (ea0>180) sep0 = -sep;
+ if (ea0>180) sep0 = -sep0;
nr[0]=xx->cornuData.r[0]+(above?sep0:-sep0); //Needs adjustment
nc[0]=xx->cornuData.c[0];
} else {
- nr[0] = 0;
+ nr[0] = 0.0;
nc[0] = zero;
}
- if (xx->cornuData.r[1]) {
+ if (xx->cornuData.r[1] != 0.0) {
ANGLE_T ea1 =
NormalizeAngle(FindAngle(xx->cornuData.c[1],xx->cornuData.pos[1])-xx->cornuData.a[1]);
- DIST_T sep1 = sep;
- if (ea1<180) sep1 = -sep;
+ if (ea1<180) sep1 = -sep1;
nr[1]=xx->cornuData.r[1]+(above?sep1:-sep1); //Needs adjustment
nc[1]=xx->cornuData.c[1];
} else {
- nr[1] = 0;
+ nr[1] = 0.0;
nc[1] = zero;
}
if ( newTrkR ) {
- *newTrkR = NewCornuTrack( np, nc, na, nr, NULL, 0);
- if (*newTrkR==NULL) {
- wBeep();
- InfoMessage(_("Cornu Create Failed for p1[%0.3f,%0.3f] p2[%0.3f,%0.3f], c1[%0.3f,%0.3f] c2[%0.3f,%0.3f], a1=%0.3f a2=%0.3f, r1=%s r2=%s"),
+ if (track) {
+ *newTrkR = NewCornuTrack( np, nc, na, nr, NULL, 0);
+ if (*newTrkR==NULL) {
+ wBeep();
+ InfoMessage(_("Cornu Create Failed for p1[%0.3f,%0.3f] p2[%0.3f,%0.3f], c1[%0.3f,%0.3f] c2[%0.3f,%0.3f], a1=%0.3f a2=%0.3f, r1=%s r2=%s"),
np[0].x,np[0].y,
np[1].x,np[1].y,
nc[0].x,nc[0].y,
@@ -1258,16 +1369,75 @@ static BOOL_T MakeParallelCornu(
FormatDistance(nr[0]),FormatDistance(nr[1]));
return FALSE;
}
+ } else {
+ tempSegs_da.cnt = 0;
+ CallCornu0(np,nc,na,nr,&tempSegs_da,FALSE);
+ *newTrkR = MakePolyLineFromSegs( zero, 0.0, &tempSegs_da );
+ }
} else {
tempSegs_da.cnt = 0;
CallCornu0(np,nc,na,nr,&tempSegs_da,FALSE);
+ if (!track) {
+ for (int i=0;i<tempSegs_da.cnt;i++) {
+ trkSeg_p seg = &tempSegs(i);
+ if (seg->type == SEG_STRTRK) {
+ seg->type = SEG_STRLIN;
+ seg->color = wDrawColorBlack;
+ seg->width = 0;
+ }
+ if (seg->type == SEG_CRVTRK) {
+ seg->type = SEG_CRVLIN;
+ seg->color = wDrawColorBlack;
+ seg->width = 0;
+ }
+ if (seg->type == SEG_BEZTRK) {
+ for (int j=0;j<seg->bezSegs.cnt;j++) {
+ trkSeg_p bseg = &(((trkSeg_t *)seg->bezSegs.ptr)[j]);
+ if (bseg->type == SEG_STRTRK) {
+ bseg->type = SEG_STRLIN;
+ bseg->color = wDrawColorBlack;
+ bseg->width = 0;
+ }
+ if (bseg->type == SEG_CRVTRK) {
+ bseg->type = SEG_CRVLIN;
+ bseg->color = wDrawColorBlack;
+ bseg->width = 0;
+ }
+ }
+ seg->type = SEG_BEZLIN;
+ seg->color = wDrawColorBlack;
+ seg->width = 0;
+ }
+ }
+ }
}
if ( p0R ) *p0R = np[0];
if ( p1R ) *p1R = np[1];
return TRUE;
}
+static BOOL_T TrimCornu( track_p trk, EPINX_T ep, DIST_T dist, coOrd endpos, ANGLE_T angle, DIST_T radius, coOrd center ) {
+ UndoModify(trk);
+ if (dist>0.0 && dist<minLength) {
+ UndrawNewTrack( trk );
+ DeleteTrack(trk, TRUE);
+ return FALSE;
+ } else {
+ struct extraData *xx;
+ UndrawNewTrack( trk );
+ xx = GetTrkExtraData(trk);
+ xx->cornuData.a[ep] = angle;
+ xx->cornuData.c[ep] = center;
+ xx->cornuData.r[ep] = radius;
+ xx->cornuData.pos[ep] = endpos;
+ RebuildCornu(trk);
+ SetTrkEndPoint(trk, ep, xx->cornuData.pos[ep], xx->cornuData.a[ep]);
+ DrawNewTrack( trk );
+ }
+ return TRUE;
+}
+
/*
* When an undo is run, the array of segs is missing - they are not saved to the Undo log. So Undo calls this routine to
* ensure
@@ -1288,6 +1458,29 @@ EXPORT BOOL_T RebuildCornu (track_p trk)
}
+static wBool_t CompareCornu( track_cp trk1, track_cp trk2 )
+{
+ struct extraData *xx1 = GetTrkExtraData( trk1 );
+ struct extraData *xx2 = GetTrkExtraData( trk2 );
+ char * cp = message + strlen(message);
+ REGRESS_CHECK_POS( "Pos[0]", xx1, xx2, cornuData.pos[0] )
+ REGRESS_CHECK_POS( "Pos[1]", xx1, xx2, cornuData.pos[1] )
+ REGRESS_CHECK_POS( "C[0]", xx1, xx2, cornuData.c[0] )
+ REGRESS_CHECK_POS( "C[1]", xx1, xx2, cornuData.c[1] )
+ REGRESS_CHECK_ANGLE( "A[0]", xx1, xx2, cornuData.a[0] )
+ REGRESS_CHECK_ANGLE( "A[1]", xx1, xx2, cornuData.a[1] )
+ REGRESS_CHECK_DIST( "R[0]", xx1, xx2, cornuData.r[0] )
+ REGRESS_CHECK_DIST( "R[1]", xx1, xx2, cornuData.r[1] )
+ REGRESS_CHECK_DIST( "MinCurveRadius", xx1, xx2, cornuData.minCurveRadius )
+ REGRESS_CHECK_DIST( "MaxRateofChange", xx1, xx2, cornuData.maxRateofChange )
+ REGRESS_CHECK_DIST( "Length", xx1, xx2, cornuData.length )
+ REGRESS_CHECK_ANGLE( "WindingAngle", xx1, xx2, cornuData.windingAngle )
+ // CHECK arcSegs
+ REGRESS_CHECK_POS( "DescOff", xx1, xx2, cornuData.descriptionOff )
+ // CHECK cornuPath
+ return TRUE;
+}
+
static trackCmd_t cornuCmds = {
"CORNU",
DrawCornu,
@@ -1305,7 +1498,7 @@ static trackCmd_t cornuCmds = {
TraverseCornu,
EnumerateCornu,
NULL, /* redraw */
- NULL, /* trim */
+ TrimCornu, /* trim */
MergeCornu,
NULL, /* modify */
GetLengthCornu,
@@ -1319,7 +1512,11 @@ static trackCmd_t cornuCmds = {
NULL,
MakeParallelCornu,
NULL,
- RebuildCornu
+ RebuildCornu,
+ NULL,
+ NULL,
+ NULL,
+ CompareCornu
};
diff --git a/app/bin/tcornu.h b/app/bin/tcornu.h
index a987044..5684373 100644
--- a/app/bin/tcornu.h
+++ b/app/bin/tcornu.h
@@ -37,6 +37,7 @@ typedef struct {
DIST_T radius[2]; //0.0 if straight
ANGLE_T angle[2]; //Set if straight
coOrd center[2]; //Set if radius >0
+ dynArr_t mids; //If there are G2 points added
} cornuParm_t;
@@ -53,13 +54,14 @@ BOOL_T RebuildCornu (track_p trk);
DIST_T DistanceCornu( track_p t, coOrd * p );
STATUS_T CornuDescriptionMove(track_p trk,wAction_t action,coOrd pos );
-DIST_T CornuDescriptionDistance(coOrd pos,track_p trk );
+DIST_T CornuDescriptionDistance(coOrd pos,track_p trk, coOrd *, BOOL_T show_hidden, BOOL_T * hidden );
void GetCornuParmsNear(track_p t, int sel, coOrd * pos, coOrd * center, ANGLE_T * angle, DIST_T * radius );
+void GetCornuParmsTemp(dynArr_t *, int sel, coOrd * pos2, coOrd * center, ANGLE_T * angle2, DIST_T * radius );
BOOL_T CallCornu(coOrd[2],track_p[2],EPINX_T[2],dynArr_t *,cornuParm_t *);
BOOL_T CallCornu0(coOrd[2], coOrd[2], ANGLE_T[2], DIST_T[2], dynArr_t *,BOOL_T);
-BOOL_T GetBezierSegmentsFromCornu(track_p, dynArr_t *);
+BOOL_T GetBezierSegmentsFromCornu(track_p, dynArr_t *, BOOL_T);
char * CreateSegPathList(track_p trk);
diff --git a/app/bin/tcurve.c b/app/bin/tcurve.c
index 7233ebf..00d1ef5 100644
--- a/app/bin/tcurve.c
+++ b/app/bin/tcurve.c
@@ -22,6 +22,7 @@
#include <assert.h>
#include <math.h>
+#include <string.h>
#include "ccurve.h"
#include "cjoin.h"
@@ -172,25 +173,32 @@ BOOL_T GetCurveMiddle( track_p trk, coOrd * pos )
DIST_T CurveDescriptionDistance(
coOrd pos,
- track_p trk )
+ track_p trk,
+ coOrd * dpos,
+ BOOL_T show_hidden,
+ BOOL_T * hidden)
{
struct extraData *xx = GetTrkExtraData(trk);
coOrd p1;
FLOAT_T ratio;
ANGLE_T a, a0, a1;
-
- if ( GetTrkType( trk ) != T_CURVE || ( GetTrkBits( trk ) & TB_HIDEDESC ) != 0 )
+ if (hidden) *hidden = FALSE;
+ if ( (GetTrkType( trk ) != T_CURVE )|| ((( GetTrkBits( trk ) & TB_HIDEDESC ) != 0) && !show_hidden))
return 100000;
+ coOrd offset = xx->descriptionOff;
+ if (( GetTrkBits( trk ) & TB_HIDEDESC ) != 0) offset = zero;
if ( xx->helixTurns > 0 ) {
- p1.x = xx->pos.x + xx->descriptionOff.x;
- p1.y = xx->pos.y + xx->descriptionOff.y;
+ p1.x = xx->pos.x + offset.x;
+ p1.y = xx->pos.y + offset.y;
} else {
GetCurveAngles( &a0, &a1, trk );
- ratio = ( xx->descriptionOff.x + 1.0 ) / 2.0;
+ ratio = ( offset.x + 1.0 ) / 2.0;
a = a0 + ratio * a1;
- ratio = ( xx->descriptionOff.y + 1.0 ) / 2.0;
+ ratio = ( offset.y + 1.0 ) / 2.0;
Translate( &p1, xx->pos, a, xx->radius * ratio );
}
+ if (hidden) *hidden = (GetTrkBits( trk ) & TB_HIDEDESC);
+ *dpos = p1;
return FindDistance( p1, pos );
}
@@ -220,8 +228,8 @@ static void DrawCurveDescription(
dist = GetLengthCurve( trk );
elevValid = FALSE;
if ( (!xx->circle) &&
- ComputeElev( trk, 0, FALSE, &elev0, NULL ) &&
- ComputeElev( trk, 1, FALSE, &elev1, NULL ) ) {
+ ComputeElev( trk, 0, FALSE, &elev0, NULL, FALSE ) &&
+ ComputeElev( trk, 1, FALSE, &elev1, NULL, FALSE ) ) {
if( elev0 == elev1 )
elevValid = FALSE;
else {
@@ -232,15 +240,15 @@ static void DrawCurveDescription(
}
fp = wStandardFont( F_TIMES, FALSE, FALSE );
if (elevValid)
- sprintf( message, _("Helix: turns=%ld length=%s grade=%0.1f%% sep=%s"),
+ sprintf( message, _("Helix: turns=%ld len=%0.2f grade=%0.1f%% sep=%0.2f"),
xx->helixTurns,
- FormatDistance(dist),
+ dist,
grade*100.0,
- FormatDistance(sep) );
+ sep );
else
- sprintf( message, _("Helix: turns=%ld length=%s"),
+ sprintf( message, _("Helix: turns=%ld len=%0.2f"),
xx->helixTurns,
- FormatDistance(dist) );
+ dist );
DrawBoxedString( BOX_BOX, d, pos, message, fp, (wFontSize_t)descriptionFontSize, color, 0.0 );
} else {
dist = trackGauge/2.0;
@@ -278,6 +286,7 @@ STATUS_T CurveDescriptionMove(
switch (action) {
case C_DOWN:
+ DrawCurveDescription( trk, &mainD, wDrawColorWhite );
case C_MOVE:
case C_UP:
editMode = TRUE;
@@ -286,8 +295,6 @@ STATUS_T CurveDescriptionMove(
xx->descriptionOff.x = (pos.x-xx->pos.x);
xx->descriptionOff.y = (pos.y-xx->pos.y);
p1 = pos;
- if (action != C_UP)
- DrawLine( &tempD, p0, p1, 0, wDrawColorBlack );
} else {
p1 = pos;
GetCurveAngles( &a0, &a1, trk );
@@ -314,14 +321,16 @@ STATUS_T CurveDescriptionMove(
a = a0 + (0.5 * a1);
PointOnCircle( &p0, xx->pos, xx->radius/2, a );
}
- if (action == C_UP) editMode = FALSE;
- MainRedraw();
- MapRedraw();
+ if (action == C_UP) {
+ editMode = FALSE;
+ DrawCurveDescription( trk, &mainD, wDrawColorBlack );
+ }
return action==C_UP?C_TERMINATE:C_CONTINUE;
case C_REDRAW:
if (editMode) {
- DrawLine( &tempD, p1, p0, 0, wDrawColorBlack );
+ DrawLine( &tempD, p0, p1, 0, wDrawColorBlue );
+ DrawCurveDescription( trk, &tempD, wDrawColorBlue );
}
break;
@@ -478,7 +487,7 @@ static void UpdateCurve( track_p trk, int inx, descData_p descUpd, BOOL_T final
case Z1:
ep = (inx==Z0?0:1);
UpdateTrkEndElev( trk, ep, GetTrkEndElevUnmaskedMode(trk,ep), crvData.elev[ep], NULL );
- ComputeElev( trk, 1-ep, FALSE, &crvData.elev[1-ep], NULL );
+ ComputeElev( trk, 1-ep, FALSE, &crvData.elev[1-ep], NULL, TRUE );
if ( crvData.length > minLength )
crvData.grade = fabs( (crvData.elev[0]-crvData.elev[1])/crvData.length )*100.0;
else
@@ -575,13 +584,13 @@ static void DescribeCurve( track_p trk, char * str, CSIZE_T len )
crvData.angle = a1;
crvData.layerNumber = GetTrkLayer(trk);
if ( !xx->circle ) {
- ComputeElev( trk, 0, FALSE, &crvData.elev[0], NULL );
- ComputeElev( trk, 1, FALSE, &crvData.elev[1], NULL );
+ ComputeElev( trk, 0, FALSE, &crvData.elev[0], NULL, FALSE );
+ ComputeElev( trk, 1, FALSE, &crvData.elev[1], NULL, FALSE );
} else {
crvData.elev[0] = crvData.elev[1] = 0;
}
- ComputeElev( trk, 0, FALSE, &crvData.elev[0], NULL );
- ComputeElev( trk, 1, FALSE, &crvData.elev[1], NULL );
+ ComputeElev( trk, 0, FALSE, &crvData.elev[0], NULL, FALSE );
+ ComputeElev( trk, 1, FALSE, &crvData.elev[1], NULL, FALSE );
if ( crvData.length > minLength )
crvData.grade = fabs( (crvData.elev[0]-crvData.elev[1])/crvData.length )*100.0;
else
@@ -657,12 +666,8 @@ static void DrawCurve( track_p t, drawCmd_p d, wDrawColor color )
struct extraData *xx = GetTrkExtraData(t);
ANGLE_T a0, a1;
track_p tt = t;
- long widthOptions = DTS_LEFT|DTS_RIGHT|DTS_TIES;
+ long widthOptions = DTS_LEFT|DTS_RIGHT;
- if (GetTrkWidth(t) == 2)
- widthOptions |= DTS_THICK2;
- if (GetTrkWidth(t) == 3)
- widthOptions |= DTS_THICK3;
GetCurveAngles( &a0, &a1, t );
if (xx->circle) {
tt = NULL;
@@ -671,21 +676,18 @@ static void DrawCurve( track_p t, drawCmd_p d, wDrawColor color )
a0 = 0.0;
a1 = 360.0;
}
- if ( ((d->funcs->options&wDrawOptTemp)==0) &&
+ if ( ((d->options&(DC_SIMPLE|DC_SEGTRACK))==0) &&
(labelWhen == 2 || (labelWhen == 1 && (d->options&DC_PRINT))) &&
labelScale >= d->scale &&
( GetTrkBits( t ) & TB_HIDEDESC ) == 0 ) {
DrawCurveDescription( t, d, color );
}
+
DrawCurvedTrack( d, xx->pos, xx->radius, a0, a1,
GetTrkEndPos(t,0), GetTrkEndPos(t,1),
- t, GetTrkGauge(t), color, widthOptions );
- if ( (d->funcs->options & wDrawOptTemp) == 0 &&
- (d->options&DC_QUICK) == 0 &&
- (!IsCurveCircle(t)) ) {
- DrawEndPt( d, t, 0, color );
- DrawEndPt( d, t, 1, color );
- }
+ t, color, widthOptions );
+ DrawEndPt( d, t, 0, color );
+ DrawEndPt( d, t, 1, color );
}
static void DeleteCurve( track_p t )
@@ -702,15 +704,15 @@ static BOOL_T WriteCurve( track_p t, FILE * f )
options |= 0x80;
rc &= fprintf(f, "CURVE %d %d %ld 0 0 %s %d %0.6f %0.6f 0 %0.6f %ld %0.6f %0.6f\n",
GetTrkIndex(t), GetTrkLayer(t), (long)options,
- GetTrkScaleName(t), GetTrkVisible(t), xx->pos.x, xx->pos.y, xx->radius,
+ GetTrkScaleName(t), GetTrkVisible(t)|(GetTrkNoTies(t)?1<<2:0)|(GetTrkBridge(t)?1<<3:0), xx->pos.x, xx->pos.y, xx->radius,
xx->helixTurns, xx->descriptionOff.x, xx->descriptionOff.y )>0;
rc &= WriteEndPt( f, t, 0 );
rc &= WriteEndPt( f, t, 1 );
- rc &= fprintf(f, "\tEND\n" )>0;
+ rc &= fprintf(f, "\t%s\n", END_SEGS)>0;
return rc;
}
-static void ReadCurve( char * line )
+static BOOL_T ReadCurve( char * line )
{
struct extraData *xx;
track_p t;
@@ -723,32 +725,45 @@ static void ReadCurve( char * line )
wIndex_t layer;
long options;
char * cp = NULL;
+ long helixTurns = 0;
+ coOrd descriptionOff = { 0.0, 0.0 };
if (!GetArgs( line+6, paramVersion<3?"dXZsdpYfc":paramVersion<9?"dLl00sdpYfc":"dLl00sdpffc",
&index, &layer, &options, scale, &visible, &p, &elev, &r, &cp ) ) {
- return;
+ return FALSE;
}
+ if (cp) {
+ if ( !GetArgs( cp, "lp", &helixTurns, &descriptionOff ) )
+ return FALSE;
+ }
+ if ( !ReadSegs() )
+ return FALSE;
t = NewTrack( index, T_CURVE, 0, sizeof *xx );
xx = GetTrkExtraData(t);
- SetTrkVisible(t, visible);
+ xx->helixTurns = helixTurns;
+ xx->descriptionOff = descriptionOff;
+ if ( paramVersion < 3 ) {
+ SetTrkVisible(t, visible!=0);
+ SetTrkNoTies(t, FALSE);
+ SetTrkBridge(t, FALSE);
+ } else {
+ SetTrkVisible(t, visible&2);
+ SetTrkNoTies(t, visible&4);
+ SetTrkBridge(t, visible&8);
+ }
SetTrkScale(t, LookupScale(scale));
SetTrkLayer(t, layer );
SetTrkWidth(t, (int)(options&3));
xx->pos = p;
xx->radius = r;
- xx->helixTurns = 0;
- xx->descriptionOff.x = xx->descriptionOff.y = 0.0;
- if (cp) {
- GetArgs( cp, "lp", &xx->helixTurns, &xx->descriptionOff );
- }
if ( ( ( options & 0x80 ) != 0 ) == ( xx->helixTurns > 0 ) )
SetTrkBits(t,TB_HIDEDESC);
- ReadSegs();
SetEndPts(t,2);
if (GetTrkEndAngle( t, 0 ) == 270.0 &&
GetTrkEndAngle( t, 1 ) == 90.0 )
xx->circle = TRUE;
ComputeCurveBoundingBox( t, xx );
+ return TRUE;
}
static void MoveCurve( track_p trk, coOrd orig )
@@ -810,7 +825,12 @@ static BOOL_T SplitCurve( track_p trk, coOrd pos, EPINX_T ep, track_p *leftover,
a0 = a;
}
trk1 = NewCurvedTrack( xx->pos, xx->radius, a0, a1, 0 );
+ DIST_T height;
+ int opt;
+ GetTrkEndElev(trk,ep,&opt,&height);
+ UpdateTrkEndElev( trk1, 1-ep, opt, height, (opt==ELEV_STATION)?GetTrkEndElevStation(trk,ep):NULL );
AdjustCurveEndPt( trk, ep, a+(ep==0?-90.0:90.0) );
+ UpdateTrkEndElev( trk, ep, ELEV_NONE, 0, NULL);
*leftover = trk1;
*ep0 = 1-ep;
*ep1 = ep;
@@ -922,15 +942,15 @@ static BOOL_T EnumerateCurve( track_p trk )
if (trk != NULL) {
xx = GetTrkExtraData(trk);
GetCurveAngles( &a0, &a1, trk );
- d = xx->radius * 2.0 * M_PI * a1 / 360.0;
+ d = (xx->radius + (GetTrkGauge(trk)/2.0))* 2.0 * M_PI * a1 / 360.0;
if (xx->helixTurns > 0)
- d += (xx->helixTurns-(xx->circle?1:0)) * xx->radius * 2.0 * M_PI;
+ d += (xx->helixTurns-(xx->circle?1:0)) * (xx->radius+(GetTrkGauge(trk)/2.0)) * 2.0 * M_PI;
ScaleLengthIncrement( GetTrkScale(trk), d );
}
return TRUE;
}
-static BOOL_T TrimCurve( track_p trk, EPINX_T ep, DIST_T dist )
+static BOOL_T TrimCurve( track_p trk, EPINX_T ep, DIST_T dist, coOrd endpos, ANGLE_T angle, DIST_T endradius, coOrd endcenter )
{
DIST_T d;
DIST_T radius;
@@ -980,6 +1000,8 @@ static BOOL_T MergeCurve(
if ( xx0->helixTurns > 0 ||
xx1->helixTurns > 0 )
return FALSE;
+ if (GetTrkType(trk0) != GetTrkType(trk1))
+ return FALSE;
d = FindDistance( xx0->pos, xx1->pos );
d += fabs( xx0->radius - xx1->radius );
if ( d > connectDistance )
@@ -991,6 +1013,8 @@ static BOOL_T MergeCurve(
UndoStart( _("Merge Curves"), "MergeCurve( T%d[%d] T%d[%d] )", GetTrkIndex(trk0), ep0, GetTrkIndex(trk1), ep1 );
UndoModify( trk0 );
UndrawNewTrack( trk0 );
+ if (GetTrkEndTrk(trk0,ep0) == trk1)
+ DisconnectTracks( trk0, ep0, trk1, ep1);
trk2 = GetTrkEndTrk( trk1, 1-ep1 );
if (trk2) {
ep2 = GetEndPtConnectedToMe( trk2, trk1 );
@@ -1168,7 +1192,7 @@ static DIST_T GetLengthCurve( track_p trk )
a1 = 360.0;
else
GetCurveAngles( &a0, &a1, trk );
- dist = (rad+GetTrkGauge(trk)/2.0)*a1*2.0*M_PI/360.0;
+ dist = rad*a1*2.0*M_PI/360.0;
if (xx->helixTurns>0)
dist += (xx->helixTurns-(xx->circle?1:0)) * xx->radius * 2.0 * M_PI;
return dist;
@@ -1194,32 +1218,25 @@ static BOOL_T GetParamsCurve( int inx, track_p trk, coOrd pos, trackParams_t * p
ErrorMessage( MSG_CANT_EXTEND_HELIX );
return FALSE;
}
+ if (inx == PARAMS_NODES) return FALSE;
params->len = params->arcR * params->arcA1 *2.0*M_PI/360.0;
if (xx->helixTurns > 0)
params->len += (xx->helixTurns-(xx->circle?1:0)) * xx->radius * 2.0 * M_PI;
params->helixTurns = xx->helixTurns;
- if ( inx == PARAMS_PARALLEL ) {
- params->ep = 0;
- if (xx->helixTurns > 0) {
- params->arcA0 = 0.0;
- params->arcA1 = 360.0;
- }
+ params->circleOrHelix = FALSE;
+ if ( IsCurveCircle( trk ) ) {
+ params->ep = PickArcEndPt( params->arcP, /*Dj.inp[0].*/pos, pos );
+ params->angle = params->track_angle;
+ params->circleOrHelix = TRUE;
+ return TRUE;
+ } else if ((inx == PARAMS_CORNU) || (inx == PARAMS_1ST_JOIN) || (inx == PARAMS_2ND_JOIN) ) {
+ params->ep = PickEndPoint(pos, trk);
} else {
- params->circleOrHelix = FALSE;
- if ( IsCurveCircle( trk ) ) {
- params->ep = PickArcEndPt( params->arcP, /*Dj.inp[0].*/pos, pos );
- params->angle = params->track_angle;
- params->circleOrHelix = TRUE;
- return TRUE;
- } else if (inx == PARAMS_CORNU ) {
- params->ep = PickEndPoint(pos, trk);
- } else {
- params->ep = PickUnconnectedEndPointSilent( pos, trk );
- }
- if (params->ep == -1)
- return FALSE;
- params->angle = GetTrkEndAngle(trk,params->ep); ;
+ params->ep = PickUnconnectedEndPointSilent( pos, trk );
}
+ if (params->ep == -1)
+ return FALSE;
+ params->angle = GetTrkEndAngle(trk,params->ep); ;
return TRUE;
}
@@ -1255,10 +1272,11 @@ static BOOL_T QueryCurve( track_p trk, int query )
case Q_HAS_DESC:
case Q_CORNU_CAN_MODIFY:
case Q_MODIFY_CAN_SPLIT:
+ case Q_CAN_EXTEND:
return TRUE;
break;
case Q_EXCEPTION:
- return xx->radius < GetLayoutMinTrackRadius() - EPSILON;
+ return fabs(xx->radius) < (GetLayoutMinTrackRadius() - EPSILON);
break;
case Q_NOT_PLACE_FROGPOINTS:
return IsCurveCircle( trk );
@@ -1274,6 +1292,8 @@ static BOOL_T QueryCurve( track_p trk, int query )
if ((xx->helixTurns >0) || xx->circle) return TRUE;
return FALSE;
break;
+ case Q_NODRAWENDPT:
+ return xx->circle;
default:
return FALSE;
}
@@ -1295,9 +1315,11 @@ static BOOL_T MakeParallelCurve(
track_p trk,
coOrd pos,
DIST_T sep,
+ DIST_T factor,
track_p * newTrkR,
coOrd * p0R,
- coOrd * p1R )
+ coOrd * p1R,
+ BOOL_T track)
{
struct extraData * xx = GetTrkExtraData(trk);
struct extraData * xx1;
@@ -1305,16 +1327,32 @@ static BOOL_T MakeParallelCurve(
ANGLE_T a0, a1;
rad = FindDistance( pos, xx->pos );
+ sep = sep+factor/xx->radius;
if ( rad > xx->radius )
rad = xx->radius + sep;
else
rad = xx->radius - sep;
GetCurveAngles( &a0, &a1, trk );
if ( newTrkR ) {
- *newTrkR = NewCurvedTrack( xx->pos, rad, a0, a1, 0 );
- xx1 = GetTrkExtraData(*newTrkR);
- xx1->helixTurns = xx->helixTurns;
- xx1->circle = xx->circle;
+ if (track) {
+ *newTrkR = NewCurvedTrack( xx->pos, rad, a0, a1, 0 );
+ xx1 = GetTrkExtraData(*newTrkR);
+ xx1->helixTurns = xx->helixTurns;
+ xx1->circle = xx->circle;
+ }
+ else {
+ tempSegs(0).color = wDrawColorBlack;
+ tempSegs(0).width = 0;
+ tempSegs_da.cnt = 1;
+ tempSegs(0).type = SEG_CRVLIN;
+ tempSegs(0).u.c.center = xx->pos;
+ tempSegs(0).u.c.radius = rad;
+ tempSegs(0).u.c.a0 = a0;
+ tempSegs(0).u.c.a1 = a1;
+ *newTrkR = MakeDrawFromSeg( zero, 0.0, &tempSegs(0) );
+ return TRUE;
+ }
+
ComputeCurveBoundingBox( *newTrkR, xx1 );
} else {
if ( xx->helixTurns > 0) {
@@ -1324,7 +1362,7 @@ static BOOL_T MakeParallelCurve(
tempSegs(0).color = wDrawColorBlack;
tempSegs(0).width = 0;
tempSegs_da.cnt = 1;
- tempSegs(0).type = SEG_CRVTRK;
+ tempSegs(0).type = track?SEG_CRVTRK:SEG_CRVLIN;
tempSegs(0).u.c.center = xx->pos;
tempSegs(0).u.c.radius = rad;
tempSegs(0).u.c.a0 = a0;
@@ -1336,6 +1374,19 @@ static BOOL_T MakeParallelCurve(
}
+static wBool_t CompareCurve( track_cp trk1, track_cp trk2 )
+{
+ struct extraData * ed1 = GetTrkExtraData( trk1 );
+ struct extraData * ed2 = GetTrkExtraData( trk2 );
+ char * cp = message+strlen(message);
+ REGRESS_CHECK_POS( "POS", ed1, ed2, pos )
+ REGRESS_CHECK_DIST( "RADIUS", ed1, ed2, radius )
+ REGRESS_CHECK_INT( "CIRCLE", ed1, ed2, circle )
+ REGRESS_CHECK_INT( "TURNS", ed1, ed2, helixTurns )
+ REGRESS_CHECK_POS( "DESCOFF", ed1, ed2, descriptionOff );
+ return TRUE;
+}
+
static trackCmd_t curveCmds = {
"CURVE",
DrawCurve,
@@ -1365,7 +1416,13 @@ static trackCmd_t curveCmds = {
NULL,
NULL,
NULL,
- MakeParallelCurve };
+ MakeParallelCurve,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ CompareCurve };
EXPORT void CurveSegProc(
@@ -1524,7 +1581,7 @@ EXPORT void PlotCurve(
coOrd pos1,
coOrd pos2,
curveData_t * curveData,
- BOOL_T constrain )
+ BOOL_T constrain ) //Make the Radius be in steps of radiusGranularity (1/8)
{
DIST_T d0, d2, r;
ANGLE_T angle, a0, a1, a2;
@@ -1532,13 +1589,14 @@ EXPORT void PlotCurve(
switch ( mode ) {
case crvCmdFromCornu:
+ /* Already set curveRadius, pos1, and type */
case crvCmdFromEP1:
angle = FindAngle( pos0, pos1 );
d0 = FindDistance( pos0, pos2 )/2.0;
a0 = FindAngle( pos0, pos2 );
a1 = NormalizeAngle( a0 - angle );
LOG( log_curve, 3, ( "P1 = [%0.3f %0.3f] D=%0.3f A0=%0.3f A1=%0.3f\n", pos2.x, pos2.y, d0, a0, a1 ) )
- if ((fabs(d0*sin(D2R(a1))) < (4.0/75.0)*mainD.scale) & (mode == crvCmdFromEP1)) {
+ if ((fabs(d0*sin(D2R(a1))) < (4.0/75.0)*mainD.scale)) {
LOG( log_curve, 3, ( "Straight: %0.3f < %0.3f\n", d0*sin(D2R(a1)), (4.0/75.0)*mainD.scale ) )
curveData->pos1.x = pos0.x + d0*2.0*sin(D2R(angle));
curveData->pos1.y = pos0.y + d0*2.0*cos(D2R(angle));
@@ -1560,7 +1618,7 @@ LOG( log_curve, 3, ( "Straight: %0.3f < %0.3f\n", d0*sin(D2R(a1)), (4.0/75.0)*ma
else
curveData->curveRadius = d0/sin(D2R(-a1));
}
- if (curveData->curveRadius > 1000 && mode == crvCmdFromEP1) {
+ if (curveData->curveRadius > 1000) {
LOG( log_curve, 3, ( "Straight %0.3f > 1000\n", curveData->curveRadius ) )
curveData->pos1.x = pos0.x + d0*2.0*sin(D2R(angle));
curveData->pos1.y = pos0.y + d0*2.0*cos(D2R(angle));
@@ -1579,6 +1637,7 @@ LOG( log_curve, 3, ( "Straight: %0.3f < %0.3f\n", d0*sin(D2R(a1)), (4.0/75.0)*ma
curveData->a0 = NormalizeAngle( a2-180-curveData->a1 );
curveData->negative = TRUE;
}
+ Translate(&curveData->pos2,curveData->curvePos,FindAngle(curveData->curvePos,pos2),curveData->curveRadius);
curveData->type = curveTypeCurve;
}
}
@@ -1602,6 +1661,7 @@ LOG( log_curve, 3, ( "Straight: %0.3f < %0.3f\n", d0*sin(D2R(a1)), (4.0/75.0)*ma
curveData->a0 = a1;
curveData->a1 = NormalizeAngle(a0-a1);
}
+ Translate(&curveData->pos2,curveData->curvePos,FindAngle(curveData->curvePos,pos2),curveData->curveRadius);
curveData->type = curveTypeCurve;
break;
case crvCmdFromChord:
@@ -1611,7 +1671,7 @@ LOG( log_curve, 3, ( "Straight: %0.3f < %0.3f\n", d0*sin(D2R(a1)), (4.0/75.0)*ma
d0 = FindDistance( pos0, pos1 )/2.0;
Rotate( &pos2, pos1, -a0 );
pos2.x -= pos1.x;
- if ( fabs(pos2.x) < 0.01 )
+ if ( fabs(pos2.x) < 0.005 )
break;
d2 = sqrt( d0*d0 + pos2.x*pos2.x )/2.0;
r = d2*d2*2.0/pos2.x;
@@ -1634,6 +1694,7 @@ LOG( log_curve, 3, ( "Straight: %0.3f < %0.3f\n", d0*sin(D2R(a1)), (4.0/75.0)*ma
curveData->a1 = NormalizeAngle(a0-a1);
curveData->negative = TRUE;
}
+ Translate(&curveData->pos2,curveData->curvePos,FindAngle(curveData->curvePos,pos2),curveData->curveRadius);
curveData->type = curveTypeCurve;
break;
}
diff --git a/app/bin/tease.c b/app/bin/tease.c
index ad281df..dec0801 100644
--- a/app/bin/tease.c
+++ b/app/bin/tease.c
@@ -62,6 +62,9 @@ do 'testjoin psplot 10 10 40 1 | lpr -Ppostscript'
#include <math.h>
+#include "common.h"
+#include "track.h"
+#include "tcornu.h"
#include "ccurve.h"
#include "cselect.h"
#include "cstraigh.h"
@@ -72,7 +75,6 @@ do 'testjoin psplot 10 10 40 1 | lpr -Ppostscript'
#include "layout.h"
#include "messages.h"
#include "param.h"
-#include "track.h"
#include "utility.h"
static TRKTYP_T T_EASEMENT = -1;
@@ -483,6 +485,20 @@ static DIST_T GetLengthJoint( track_p trk )
return fabs( d0-d1 );
}
+static DIST_T GetFlexLengthJoint( track_p trk )
+{
+ struct extraData *xx;
+ DIST_T d0, d1, d3;
+ xx = GetTrkExtraData(trk);
+ d0 = JoinD( xx->l0, xx->R+(GetTrkGauge(trk)/2.0), xx->L );
+ d1 = JoinD( xx->l1, xx->R+(GetTrkGauge(trk)/2.0), xx->L );
+ d3 = JoinD( xx->l1, xx->R-(GetTrkGauge(trk)/2.0), xx->L );
+ if (xx->Scurve) {
+ return d0+d3;
+ } else
+ return fabs( d0-d1 );
+}
+
static struct {
coOrd endPt[2];
@@ -523,7 +539,7 @@ static void UpdateJoint( track_p trk, int inx, descData_p descUpd, BOOL_T final
case Z1:
ep = (inx==Z0?0:1);
UpdateTrkEndElev( trk, ep, GetTrkEndElevUnmaskedMode(trk,ep), jointData.elev[ep], NULL );
- ComputeElev( trk, 1-ep, FALSE, &jointData.elev[1-ep], NULL );
+ ComputeElev( trk, 1-ep, FALSE, &jointData.elev[1-ep], NULL, TRUE );
if ( jointData.length > minLength )
jointData.grade = fabs( (jointData.elev[0]-jointData.elev[1])/jointData.length )*100.0;
else
@@ -570,8 +586,8 @@ static void DescribeJoint(
jointData.l0 = xx->l0;
jointData.l1 = xx->l1;
jointData.layerNumber = GetTrkLayer(trk);
- ComputeElev( trk, 0, FALSE, &jointData.elev[0], NULL );
- ComputeElev( trk, 1, FALSE, &jointData.elev[1], NULL );
+ ComputeElev( trk, 0, FALSE, &jointData.elev[0], NULL, FALSE );
+ ComputeElev( trk, 1, FALSE, &jointData.elev[1], NULL, FALSE );
if ( jointData.length > minLength )
jointData.grade = fabs( (jointData.elev[0]-jointData.elev[1])/jointData.length )*100.0;
else
@@ -670,48 +686,6 @@ static DIST_T DistanceJoint(
}
-#ifdef LATER
-static void DrawJointSegment1(
- drawCmd_p d,
- wIndex_t cnt,
- DIST_T l0,
- DIST_T l1,
- DIST_T R,
- DIST_T L,
- coOrd P,
- ANGLE_T A,
- BOOL_T N,
- track_p trk,
- DIST_T trackGauge,
- wDrawColor color )
-/*
- * Draw a transition-curve from (l0) to (l1),
- * at angle (A) from origin (P).
- */
-{
- DIST_T l, lincr;
- wIndex_t i;
- coOrd p0, p1;
- long widthOptions = DTS_RIGHT|DTS_LEFT|DTS_TIES;
-
- if (GetTrkWidth(trk) == 2)
- widthOptions |= DTS_THICK2;
- if (GetTrkWidth(trk) == 3)
- widthOptions |= DTS_THICK3;
-
- l = l0;
- lincr = (l1-l0)/cnt;
- GetJointPos( &p0, NULL, l0, R, L, P, A, N );
- for (i=1; i<=cnt; i++) {
- l += lincr;
- GetJointPos( &p1, NULL, l, R, L, P, A, N );
- DrawStraightTrack( d, p0, p1,
- FindAngle( p1, p0 ), trk, trackGauge, color, widthOptions );
- p0 = p1;
- }
-}
-#endif
-
static void DrawJointSegment(
drawCmd_p d,
wIndex_t cnt,
@@ -740,20 +714,16 @@ static void DrawJointSegment(
ComputeJoinPos( l0, R, L, NULL, &a0, NULL, NULL );
ComputeJoinPos( l1, R, L, NULL, &a1, NULL, NULL );
a1 = a1-a0;
- if ( (d->options&DC_QUICK) ) {
- cnt1 = 1;
- } else {
- cnt1 = (int)floor(a1/JOINT_ANGLE_INCR) + 1;
- a1 /= cnt1;
- }
+ cnt1 = (int)floor(a1/JOINT_ANGLE_INCR) + 1;
+ a1 /= cnt1;
- widthOptions |= DTS_RIGHT|DTS_LEFT|DTS_TIES;
+ widthOptions |= DTS_RIGHT|DTS_LEFT;
GetJointPos( &p0, NULL, l0, R, L, P, A, N );
for (i=1; i<=cnt1; i++) {
a0 += a1;
ll = sqrt( sin(D2R(a0)) * 2 * R * L );
GetJointPos( &p1, NULL, ll, R, L, P, A, N );
- DrawStraightTrack( d, p0, p1, FindAngle( p1, p0 ), trk, trackGauge,
+ DrawStraightTrack( d, p0, p1, FindAngle( p1, p0 ), trk,
color, widthOptions );
p0 = p1;
}
@@ -834,10 +804,6 @@ LOG( log_ease, 4, ( "DJT( (X%0.3f Y%0.3f A%0.3f) \n", pos.x, pos.y, angle ) )
#ifdef LATER
scale2rail = (d->options&DC_PRINT)?(twoRailScale*2+1):twoRailScale;
- if (options&DTS_THICK2)
- width = 2;
- if (options&DTS_THICK3)
- width = 3;
#ifdef WINDOWS
width *= (wDrawWidth)(d->dpi/mainD.dpi);
#else
@@ -851,24 +817,22 @@ LOG( log_ease, 4, ( "DJT( (X%0.3f Y%0.3f A%0.3f) \n", pos.x, pos.y, angle ) )
/* print segments about 0.20" long */
len = (l0-l1)/(0.20*d->scale);
cnt = (int)ceil(fabs(len));
- if (cnt == 0 || (d->options&DC_QUICK)) cnt = 1;
+ if (cnt == 0) cnt = 1;
DrawJointSegment( d, cnt, l0, l1, R, L, pos,
angle, negate, trackGauge, color, options, trk );
} else {
/* print segments about 0.20" long */
cnt = (int)ceil((l0)/(0.20*d->scale));
- if (cnt == 0 || (d->options&DC_QUICK)) cnt = 1;
+ if (cnt == 0) cnt = 1;
DrawJointSegment( d, cnt, 0, l0, R, L, pos,
angle, negate, trackGauge, color, options, trk );
cnt = (int)ceil((l1)/(0.20*d->scale));
- if (cnt == 0 || (d->options&DC_QUICK)) cnt = 1;
+ if (cnt == 0) cnt = 1;
DrawJointSegment( d, cnt, 0, l1, R, L, pos,
angle+180, negate, trackGauge, color, options, trk );
}
- if ( (d->funcs->options & wDrawOptTemp) == 0 && (d->options&DC_QUICK) == 0 ) {
- DrawEndPt( d, trk, ep0, color );
- DrawEndPt( d, trk, ep1, color );
- }
+ DrawEndPt( d, trk, ep0, color );
+ DrawEndPt( d, trk, ep1, color );
}
@@ -883,10 +847,6 @@ static void DrawJoint(
struct extraData * xx = GetTrkExtraData(trk);
long widthOptions = 0;
- if (GetTrkWidth(trk) == 2)
- widthOptions = DTS_THICK2;
- if (GetTrkWidth(trk) == 3)
- widthOptions = DTS_THICK3;
DrawJointTrack( d, xx->pos, xx->angle, xx->l0, xx->l1, xx->R, xx->L, xx->negate, xx->flip, xx->Scurve, trk, 0, 1, GetTrkGauge(trk), color, widthOptions );
}
@@ -912,11 +872,11 @@ static BOOL_T WriteJoint(
xx->flip, xx->negate, xx->Scurve, xx->pos.x, xx->pos.y, xx->angle )>0;
rc &= WriteEndPt( f, t, 0 );
rc &= WriteEndPt( f, t, 1 );
- rc &= fprintf(f, "\tEND\n" )>0;
+ rc &= fprintf(f, "\t%s\n", END_SEGS )>0;
return rc;
}
-static void ReadJoint(
+static BOOL_T ReadJoint(
char * line )
/*
* Read track data from a file (f).
@@ -934,17 +894,27 @@ static void ReadJoint(
if ( !GetArgs( line+6, paramVersion<3?"dXZsdffffdddpYf":paramVersion<9?"dLl00sdffffdddpYf":"dLl00sdffffdddpff",
&index, &layer, &options, scale, &visible, &e.l0, &e.l1, &e.R, &e.L,
&e.flip, &e.negate, &e.Scurve, &e.pos, &elev, &e.angle) )
- return;
+ return FALSE;
+ if ( !ReadSegs() )
+ return FALSE;
trk = NewTrack( index, T_EASEMENT, 0, sizeof e );
xx = GetTrkExtraData(trk);
- SetTrkVisible(trk, visible);
+ if ( paramVersion < 3 ) {
+ SetTrkVisible(trk, visible!=0);
+ SetTrkNoTies(trk, FALSE);
+ SetTrkBridge(trk, FALSE);
+ } else {
+ SetTrkVisible(trk, visible&2);
+ SetTrkNoTies(trk, visible&4);
+ SetTrkBridge(trk, visible&8);
+ }
SetTrkScale(trk, LookupScale(scale));
SetTrkLayer(trk, layer);
SetTrkWidth(trk, (int)(options&3));
*xx = e;
- ReadSegs();
SetEndPts( trk, 2 );
ComputeBoundingBox( trk );
+ return TRUE;
}
static void MoveJoint(
@@ -1225,12 +1195,12 @@ static BOOL_T TraverseJointTrack(
static BOOL_T EnumerateJoint( track_p trk )
{
if (trk != NULL) {
- ScaleLengthIncrement( GetTrkScale(trk), GetLengthJoint(trk) );
+ ScaleLengthIncrement( GetTrkScale(trk), GetFlexLengthJoint(trk) );
}
return TRUE;
}
-static BOOL_T TrimJoint( track_p trk, EPINX_T ep, DIST_T maxX )
+static BOOL_T TrimJoint( track_p trk, EPINX_T ep, DIST_T maxX, coOrd endpos, ANGLE_T angle, DIST_T radius, coOrd center )
{
DeleteTrack( trk, FALSE );
return TRUE;
@@ -1294,13 +1264,16 @@ static BOOL_T MergeJoint(
static BOOL_T GetParamsJoint( int inx, track_p trk, coOrd pos, trackParams_t * params )
{
params->type = curveTypeStraight;
- params->ep = PickUnconnectedEndPointSilent( pos, trk );
+ if ((inx == PARAMS_CORNU) || (inx == PARAMS_1ST_JOIN) || (inx == PARAMS_2ND_JOIN))\
+ params->ep = PickEndPoint(pos, trk);
+ else
+ params->ep = PickUnconnectedEndPointSilent( pos, trk );
if (params->ep == -1)
return FALSE;
params->lineOrig = GetTrkEndPos(trk,params->ep);
params->lineEnd = params->lineOrig;
params->angle = GetTrkEndAngle(trk,params->ep);
- params->len = 0.0;
+ params->len = GetLengthJoint(trk);
params->arcR = 0.0;
return TRUE;
}
@@ -1354,9 +1327,11 @@ static BOOL_T MakeParallelJoint(
track_p trk,
coOrd pos,
DIST_T sep,
+ DIST_T factor,
track_p * newTrkR,
coOrd * p0R,
- coOrd * p1R )
+ coOrd * p1R,
+ BOOL_T track)
{
struct extraData * xx = GetTrkExtraData(trk), *xx1;
ANGLE_T angle, A;
@@ -1378,13 +1353,13 @@ static BOOL_T MakeParallelJoint(
p0 = GetTrkEndPos(trk,0);
p1 = GetTrkEndPos(trk,1);
d0 = FindDistance( p0, p1 );
+ sep = sep+factor/(xx->R);
Translate( &p0, p0, GetTrkEndAngle(trk,0)+angle, sep );
Translate( &p1, p1, GetTrkEndAngle(trk,1)-angle, sep );
d = FindDistance( p0, p1 );
angle = R2D(asin(xx->L/2/xx->R));
A = xx->angle;
R = xx->R + sep*sin(D2R(angle));
-
dl = JoinD( xx->l1, xx->R, xx->L ) - JoinD( xx->l0, xx->R, xx->L );
/*printf( "D = %0.3f %0.3f\n", d, dl );*/
d /= d0;
@@ -1408,30 +1383,53 @@ static BOOL_T MakeParallelJoint(
}
if ( newTrkR ) {
- *newTrkR = NewTrack( 0, T_EASEMENT, 2, sizeof *xx );
- xx1 = GetTrkExtraData( *newTrkR );
- *xx1 = *xx;
- xx1->angle = A;
- xx1->R = R;
- xx1->L = L;
- xx1->l0 = l0;
- xx1->l1 = l1;
- xx1->pos = P;
- SetTrkEndPoint( *newTrkR, 0, p0, GetTrkEndAngle(trk,0) );
- SetTrkEndPoint( *newTrkR, 1, p1, GetTrkEndAngle(trk,1) );
- ComputeBoundingBox( *newTrkR );
+ if (track) {
+ *newTrkR = NewTrack( 0, T_EASEMENT, 2, sizeof *xx );
+ xx1 = GetTrkExtraData( *newTrkR );
+ *xx1 = *xx;
+ xx1->angle = A;
+ xx1->R = R;
+ xx1->L = L;
+ xx1->l0 = l0;
+ xx1->l1 = l1;
+ xx1->pos = P;
+ SetTrkEndPoint( *newTrkR, 0, p0, GetTrkEndAngle(trk,0) );
+ SetTrkEndPoint( *newTrkR, 1, p1, GetTrkEndAngle(trk,1) );
+ ComputeBoundingBox( *newTrkR );
+ } else {
+ dl = fabs(l0-l1);
+ len = dl/(0.20*mainD.scale);
+ cnt = (int)ceil(len);
+ if (cnt == 0) cnt = 1;
+ dl /= cnt;
+ DYNARR_SET( trkSeg_t, tempSegs_da, cnt );
+ for ( inx=0; inx<cnt; inx++ ) {
+ tempSegs(inx).color = wDrawColorBlack;
+ tempSegs(inx).width = 0;
+ tempSegs(inx).type = track?SEG_STRTRK:SEG_STRLIN;
+ if ( inx == 0 ) {
+ GetJointPos( &tempSegs(inx).u.l.pos[0], NULL, l0, R, L, P, A, xx->negate );
+ } else {
+ tempSegs(inx).u.l.pos[0] = tempSegs(inx-1).u.l.pos[1];
+ }
+ l0 += dl;
+ GetJointPos( &tempSegs(inx).u.l.pos[1], NULL, l0, R, L, P, A, xx->negate );
+ *newTrkR = MakeDrawFromSeg( zero, 0.0, &tempSegs(inx) );
+ }
+ tempSegs_da.cnt = cnt;
+ }
} else {
/* print segments about 0.20" long */
dl = fabs(l0-l1);
len = dl/(0.20*mainD.scale);
cnt = (int)ceil(len);
- if (cnt == 0 || (mainD.options&DC_QUICK)) cnt = 1;
+ if (cnt == 0) cnt = 1;
dl /= cnt;
DYNARR_SET( trkSeg_t, tempSegs_da, cnt );
for ( inx=0; inx<cnt; inx++ ) {
tempSegs(inx).color = wDrawColorBlack;
tempSegs(inx).width = 0;
- tempSegs(inx).type = SEG_STRTRK;
+ tempSegs(inx).type = track?SEG_STRTRK:SEG_STRLIN;
if ( inx == 0 ) {
GetJointPos( &tempSegs(inx).u.l.pos[0], NULL, l0, R, L, P, A, xx->negate );
} else {
@@ -1447,6 +1445,21 @@ static BOOL_T MakeParallelJoint(
return TRUE;
}
+static wBool_t CompareJoint( track_cp trk1, track_cp trk2 )
+{
+ struct extraData *xx1 = GetTrkExtraData( trk1 );
+ struct extraData *xx2 = GetTrkExtraData( trk2 );
+ char * cp = message + strlen(message);
+ REGRESS_CHECK_DIST( "L0", xx1, xx2, l0 );
+ REGRESS_CHECK_DIST( "L1", xx1, xx2, l1 );
+ REGRESS_CHECK_INT( "Flip", xx1, xx2, flip );
+ REGRESS_CHECK_INT( "Negate", xx1, xx2, negate );
+ REGRESS_CHECK_INT( "Scurve", xx1, xx2, Scurve );
+ REGRESS_CHECK_POS( "Pos", xx1, xx2, pos );
+ REGRESS_CHECK_ANGLE( "Angle", xx1, xx2, angle );
+ return TRUE;
+}
+
static trackCmd_t easementCmds = {
"JOINT",
@@ -1477,7 +1490,13 @@ static trackCmd_t easementCmds = {
NULL,
NULL,
NULL,
- MakeParallelJoint };
+ MakeParallelJoint,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ CompareJoint };
EXPORT void JointSegProc(
@@ -1703,9 +1722,28 @@ LOG( log_ease, 1, ( " EASE R%0.3f..%0.3f L%0.3f..%0.3f\n",
ConnectTracks( trk0, ep0, trk1, ep1 );
} else {
/* Connect with transition-curve */
- joint = NewJoint( GetTrkEndPos(trk0,ep0), GetTrkEndAngle(trk0,ep0),
+ if (easementVal<0.0) { //Cornu Easements
+ coOrd pos[2];
+ pos[0] = GetTrkEndPos(trk0,ep0);
+ pos[1] = GetTrkEndPos(trk1,ep1);
+ DIST_T radius[2];
+ trackParams_t params0, params1;
+ GetTrackParams(PARAMS_CORNU,trk0,pos0,&params0);
+ GetTrackParams(PARAMS_CORNU,trk1,pos1,&params1);
+ radius[0] = params0.arcR;
+ radius[1] = params1.arcR;
+ coOrd center[2];
+ center[0] = params0.arcP;
+ center[1] = params1.arcP;
+ ANGLE_T angle[2];
+ angle[0] = NormalizeAngle(GetTrkEndAngle(trk0,ep0)+180.0);
+ angle[1] = NormalizeAngle(GetTrkEndAngle(trk1,ep1)+180.0);
+ joint = NewCornuTrack(pos,center,angle,radius, NULL, 0);
+ } else {
+ joint = NewJoint( GetTrkEndPos(trk0,ep0), GetTrkEndAngle(trk0,ep0),
GetTrkEndPos(trk1,ep1), GetTrkEndAngle(trk1,ep1),
GetTrkGauge(trk0), easeR, easeL, e );
+ }
CopyAttributes( trk0, joint );
ConnectTracks( trk1, ep1, joint, 1 );
ConnectTracks( trk0, ep0, joint, 0 );
@@ -1782,7 +1820,7 @@ track_p NewTrack( TRKINX_T a, TRKTYP_T b, EPINX_T c, TRKTYP_T d )
}
void DrawStraightTrack( drawCmd_p a, coOrd b, coOrd c, ANGLE_T d,
- DIST_T trackGauge, wDrawColor color, int opts )
+ track_p trk, wDrawColor color, int opts )
{
}
diff --git a/app/bin/textnoteui.c b/app/bin/textnoteui.c
new file mode 100644
index 0000000..331cfb5
--- /dev/null
+++ b/app/bin/textnoteui.c
@@ -0,0 +1,243 @@
+/** \file textnoteui.c
+ * View for the text note
+ */
+
+ /* XTrkCad - Model Railroad CAD
+ * Copyright (C) 2018 Martin Fischer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <string.h>
+#include <stdbool.h>
+
+#include "custom.h"
+#include "dynstring.h"
+#include "i18n.h"
+#include "misc.h"
+#include "note.h"
+#include "param.h"
+#include "shortentext.h"
+#include "track.h"
+#include "wlib.h"
+
+static struct extraDataNote noteDataInUI;
+
+static paramTextData_t noteTextData = { 300, 150 };
+static paramFloatRange_t r_1000_1000 = { -1000.0, 1000.0, 80 };
+static paramData_t textEditPLs[] = {
+#define I_ORIGX (0)
+ /*0*/ { PD_FLOAT, &noteDataInUI.pos.x, "origx", PDO_DIM, &r_1000_1000, N_("Position X") },
+#define I_ORIGY (1)
+ /*1*/ { PD_FLOAT, &noteDataInUI.pos.y, "origy", PDO_DIM, &r_1000_1000, N_("Position Y") },
+#define I_LAYER (2)
+ /*2*/ { PD_DROPLIST, &noteDataInUI.layer, "layer", 0, (void*)150, "Layer", 0 },
+#define I_TEXT (3)
+ /*3*/ { PD_TEXT, NULL, "text", PDO_NOPREF, &noteTextData, N_("Note") }
+};
+
+static paramGroup_t textEditPG = { "textEdit", 0, textEditPLs, sizeof textEditPLs / sizeof textEditPLs[0] };
+static wWin_p textEditW;
+
+#define textEntry ((wText_p)textEditPLs[I_TEXT].control)
+
+extern BOOL_T inDescribeCmd;
+
+/**
+ * Return the current text
+ *
+ */
+static void GetNoteTextData()
+{
+ int len;
+
+ if (noteDataInUI.noteData.text ) {
+ MyFree(noteDataInUI.noteData.text);
+ }
+ len = wTextGetSize(textEntry);
+ noteDataInUI.noteData.text = (char*)MyMalloc(len + 2);
+ wTextGetText(textEntry, noteDataInUI.noteData.text, len);
+ return;
+}
+
+/**
+ * Check validity of entered text
+ *
+ * \return always TRUE for testing
+ */
+BOOL_T
+IsValidText(char * text)
+{
+ return(TRUE);
+}
+
+
+/**
+ * Callback for text note dialog
+ *
+ * \param pg IN unused
+ * \param inx IN index into dialog template
+ * \param valueP IN unused
+ */
+static void
+TextDlgUpdate(
+ paramGroup_p pg,
+ int inx,
+ void * valueP)
+{
+ switch (inx) {
+ case I_ORIGX:
+ case I_ORIGY:
+ UpdateText(&noteDataInUI, OR_NOTE, FALSE);
+ break;
+ case I_LAYER:
+ UpdateText(&noteDataInUI, LY_NOTE, FALSE);
+ break;
+ case I_TEXT:
+ /** TODO: this is never called, why doesn't text update trigger this callback? */
+ GetNoteTextData();
+ if (IsValidText(noteDataInUI.noteData.text)) {
+ ParamDialogOkActive(&textEditPG, TRUE);
+ } else {
+ ParamDialogOkActive(&textEditPG, FALSE);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+* Handle Cancel button: restore old values for layer and position
+*/
+
+static void
+TextEditCancel( wWin_p junk )
+{
+ if (inDescribeCmd) {
+ UpdateText(&noteDataInUI, CANCEL_NOTE, FALSE);
+ }
+ ResetIfNotSticky();
+ wHide(textEditW);
+}
+
+/**
+ * Handle OK button: make sure the entered URL is syntactically valid, update
+ * the layout and close the dialog
+ *
+ * \param junk
+ */
+
+static void
+TextEditOK(void *junk)
+{
+ GetNoteTextData();
+ UpdateText(&noteDataInUI, OK_TEXT, FALSE);
+ wHide(textEditW);
+ ResetIfNotSticky();
+ FileIsChanged();
+}
+
+
+
+/**
+ * Create the edit dialog for text notes.
+ *
+ * \param trk IN selected note
+ * \param title IN dialog title
+ */
+static void
+CreateEditTextNote(track_p trk, char *title)
+{
+ struct extraDataNote *xx = (struct extraDataNote *)GetTrkExtraData(trk);
+
+ // create the dialog if necessary
+ if (!textEditW) {
+ ParamRegister(&textEditPG);
+ textEditW = ParamCreateDialog(&textEditPG,
+ "",
+ _("Done"), TextEditOK,
+ TextEditCancel, TRUE, NULL,
+ F_BLOCK,
+ TextDlgUpdate);
+ }
+
+ wWinSetTitle(textEditPG.win, MakeWindowTitle(title));
+
+ // initialize the dialog fields
+ noteDataInUI.pos = xx->pos;
+ noteDataInUI.layer = xx->layer;
+ noteDataInUI.trk = trk;
+
+ wTextClear(textEntry);
+ wTextAppend(textEntry, xx->noteData.text );
+ wTextSetReadonly(textEntry, FALSE);
+ FillLayerList((wList_p)textEditPLs[I_LAYER].control);
+ ParamLoadControls(&textEditPG);
+
+ // and show the dialog
+ wShow(textEditW);
+}
+
+/**
+ * Show details in statusbar. If running in Describe mode, the describe dialog is opened for editing the note
+ *
+ * \param trk IN the selected track (note)
+ * \param str IN the buffer for the description string
+ * \param len IN length of string buffer str
+*/
+
+void DescribeTextNote(track_p trk, char * str, CSIZE_T len)
+{
+ struct extraDataNote *xx = (struct extraDataNote *)GetTrkExtraData(trk);
+ char *noteText;
+ DynString statusLine;
+
+ noteText = MyMalloc(strlen(xx->noteData.text) + 1);
+ RemoveFormatChars(xx->noteData.text, noteText);
+ EllipsizeString(noteText, NULL, 80);
+ DynStringMalloc(&statusLine, 100);
+
+ DynStringPrintf(&statusLine,
+ _("Note: Layer=%d %-.80s"),
+ GetTrkLayer(trk)+1,
+ noteText );
+ strcpy(str, DynStringToCStr(&statusLine));
+
+ DynStringFree(&statusLine);
+ MyFree(noteText);
+
+ if (inDescribeCmd) {
+ NoteStateSave(trk);
+
+ CreateEditTextNote(trk, _("Update comment"));
+ }
+}
+
+/**
+ * Show the UI for entering new text notes
+ *
+ * \param xx Note object data
+ */
+
+void NewTextNoteUI(track_p trk) {
+ struct extraDataNote * xx = (struct extraDataNote *)GetTrkExtraData(trk);
+ char *tmpPtrText = _("Replace this text with your note");
+
+ xx->noteData.text = MyStrdup(tmpPtrText);
+
+ CreateEditTextNote(trk, _("Create Text Note"));
+}
+
diff --git a/app/bin/tocornu.src b/app/bin/tocornu.src
new file mode 100644
index 0000000..6184300
--- /dev/null
+++ b/app/bin/tocornu.src
@@ -0,0 +1,21 @@
+CURVE, 25, 100, 325, 80, 1700,
+CURVE, 25, 100, 300, 40, 600,
+LINE, 25, 10, 25, 140,
+LINE, 75, 70, 75, 120,
+ARROW, 25, 70, 50, 70,
+ARROW, 75, 70, 50, 70,
+ARROW, 25, 20, 125, 20,
+ARROW, 300, 20, 225, 20,
+LINE, 300, 40, 300, 10,
+LINE, 300, 40, 400, 40,
+ARROW, 25, 130, 125, 130,
+ARROW, 325, 130, 225, 130,
+LINE, 325, 80, 325, 130,
+LINE, 325, 80, 425, 80,
+LINE, 25, 100, 425, 100,
+ARROW, 315, 40, 315, 60,
+ARROW, 315, 100, 315, 60,
+ARROW, 340, 80, 340, 90,
+ARROW, 340, 100, 340, 90,
+LINE, 300, 40, 368, 10,
+LINE, 325, 80, 400, 67,
diff --git a/app/bin/tocornu3way.src b/app/bin/tocornu3way.src
new file mode 100644
index 0000000..3185e49
--- /dev/null
+++ b/app/bin/tocornu3way.src
@@ -0,0 +1,33 @@
+CURVE, 25, 100, 305, 90, 1200
+CURVE, 45, 100, 290, 50, 500
+CURVE, 65, 100, 280, 145, -600
+LINE, 294, 35, 306, 65,
+LINE, 294, 165, 306, 135,
+ARROW, 25, 100, 70, 100,
+ARROW, 322, 100, 150, 100,
+ARROW, 25, 20, 120, 20,
+ARROW, 300, 20, 200, 20,
+ARROW, 25, 180, 125, 180,
+ARROW, 290, 180, 225, 180,
+ARROW, 25, 70, 35, 70,
+ARROW, 45, 70, 35, 70,
+ARROW, 25, 140, 45, 140,
+ARROW, 65, 140, 45, 140,
+LINE, 45, 70, 45, 100
+LINE, 65, 140, 65, 100
+LINE, 25, 10, 25, 190,
+LINE, 300, 50, 300, 10,
+LINE, 300, 50, 425, 50,
+LINE, 300, 150, 300, 190,
+LINE, 300, 150, 425, 150,
+LINE, 320, 75, 325, 105,
+LINE, 325, 90, 425, 90,
+LINE, 325, 90, 425, 70,
+ARROW, 350, 100, 350, 85,
+ARROW, 350, 50, 350, 65,
+ARROW, 350, 100, 350, 115,
+ARROW, 350, 150, 350, 135,
+LINE, 300, 50, 425, 10,
+LINE, 300, 150, 425, 190,
+LINE, 322, 100, 425, 100,
+LINE, 322, 100, 322, 90,
diff --git a/app/bin/tocornuwye.src b/app/bin/tocornuwye.src
new file mode 100644
index 0000000..82a411c
--- /dev/null
+++ b/app/bin/tocornuwye.src
@@ -0,0 +1,24 @@
+STRAIGHT, 25, 100, 75, 100,
+CURVE, 75, 100, 300, 50, 600,
+CURVE, 75, 100, 300, 150, -600,
+LINE, 294, 35, 306, 65,
+LINE, 294, 165, 306, 135,
+ARROW, 25, 20, 125, 20,
+ARROW, 300, 20, 225, 20,
+ARROW, 25, 180, 125, 180,
+ARROW, 300, 180, 225, 180,
+LINE, 25, 10, 25, 190,
+LINE, 300, 50, 300, 10,
+LINE, 300, 50, 425, 50,
+LINE, 300, 150, 300, 190,
+LINE, 300, 150, 425, 150,
+LINE, 25, 100, 425, 100,
+ARROW, 350, 100, 350, 85,
+ARROW, 350, 50, 350, 65,
+ARROW, 350, 100, 350, 115,
+ARROW, 350, 150, 350, 135,
+LINE, 300, 50, 425, 10,
+LINE, 300, 150, 425, 190,
+LINE, 75, 70, 75, 120,
+ARROW, 25, 70, 50, 70,
+ARROW, 75, 70, 50, 70,
diff --git a/app/bin/track.c b/app/bin/track.c
index 0660d7d..c9ec7db 100644
--- a/app/bin/track.c
+++ b/app/bin/track.c
@@ -43,6 +43,8 @@
#include "paths.h"
#include "track.h"
#include "utility.h"
+#include "misc.h"
+#include "ctrain.h"
#ifndef TRACKDEP
#ifndef FASTTRACK
@@ -59,6 +61,8 @@
#endif
#endif
+EXPORT char tempSpecial[4096];
+
static int log_track = 0;
static int log_endPt = 0;
static int log_readTracks = 0;
@@ -110,6 +114,8 @@ EXPORT BOOL_T onTrackInSplit = FALSE;
static BOOL_T inDrawTracks;
+static wBool_t bWriteEndPtDirectIndex = FALSE;
+
#ifndef TRACKDEP
/*****************************************************************************
@@ -117,10 +123,17 @@ static BOOL_T inDrawTracks;
*
*
*/
+EXPORT void ActivateTrack( track_cp trk) {
+ int inx = GetTrkType(trk);
+ if (trackCmds( inx )->activate != NULL)
+ trackCmds( inx )->activate (trk);
+
+}
EXPORT void DescribeTrack( track_cp trk, char * str, CSIZE_T len )
{
+
trackCmds( GetTrkType(trk) )->describe ( trk, str, len );
/*epCnt = GetTrkEndPtCnt(trk);
if (debugTrack >= 2)
@@ -131,7 +144,7 @@ EXPORT void DescribeTrack( track_cp trk, char * str, CSIZE_T len )
EXPORT DIST_T GetTrkDistance( track_cp trk, coOrd * pos )
{
- return trackCmds( GetTrkType(trk) )->distance( trk, pos );
+ return fabs(trackCmds( GetTrkType(trk) )->distance( trk, pos ));
}
/**
@@ -176,13 +189,14 @@ EXPORT track_p OnTrack2( coOrd * fp, BOOL_T complain, BOOL_T track, BOOL_T ignor
}
p = *fp;
distance = trackCmds( GetTrkType(trk) )->distance( trk, &p );
- if (distance < closestDistance) {
+ if (fabs(distance) <= fabs(closestDistance)) { //Make the last (highest) preferred
closestDistance = distance;
closestTrack = trk;
closestPos = p;
}
}
- if (closestTrack && (closestDistance <= mainD.scale*0.25 || closestDistance <= trackGauge*2.0) ) {
+ if (closestTrack && closestDistance <0 ) closestDistance = 0.0; //Turntable was closest - inside well
+ if (closestTrack && ((closestDistance <= mainD.scale*0.25) || (closestDistance <= trackGauge*2.0) )) {
*fp = closestPos;
return closestTrack;
}
@@ -214,9 +228,21 @@ EXPORT BOOL_T CheckTrackLayer( track_p trk )
if (GetLayerFrozen( GetTrkLayer( trk ) ) ) {
ErrorMessage( MSG_CANT_MODIFY_FROZEN_TRK );
return FALSE;
- } else {
+ } else if (GetLayerModule( GetTrkLayer( trk ) ) ) {
+ ErrorMessage( MSG_CANT_MODIFY_MODULE_TRK );
+ return FALSE;
+ } else
+ return TRUE;
+}
+
+EXPORT BOOL_T CheckTrackLayerSilent( track_p trk )
+{
+ if (GetLayerFrozen( GetTrkLayer( trk ) ) ) {
+ return FALSE;
+ } else if (GetLayerModule( GetTrkLayer( trk ) ) ) {
+ return FALSE;
+ } else
return TRUE;
- }
}
/******************************************************************************
@@ -249,7 +275,6 @@ EXPORT void EnumerateTracks( void )
trackCmds(inx)->enumerate( NULL );
EnumerateEnd();
- Reset();
}
/*****************************************************************************
@@ -327,7 +352,9 @@ EXPORT TRKTYP_T GetTrkType( track_p trk )
EXPORT SCALEINX_T GetTrkScale( track_p trk )
{
- return (SCALEINX_T)trk->scale;
+ if ( trk )
+ return (SCALEINX_T)trk->scale;
+ return 0;
}
EXPORT void SetTrkScale( track_p trk, SCALEINX_T si )
@@ -369,6 +396,7 @@ EXPORT struct extraData * GetTrkExtraData( track_cp trk )
EXPORT void SetTrkEndPoint( track_p trk, EPINX_T ep, coOrd pos, ANGLE_T angle )
{
+ ASSERT( ep < trk->endCnt );
if (trk->endPt[ep].track != NULL) {
AbortProg( "setTrkEndPoint: endPt is connected" );
}
@@ -378,29 +406,43 @@ EXPORT void SetTrkEndPoint( track_p trk, EPINX_T ep, coOrd pos, ANGLE_T angle )
EXPORT coOrd GetTrkEndPos( track_p trk, EPINX_T e )
{
+ ASSERT( e < trk->endCnt );
return trk->endPt[e].pos;
}
EXPORT ANGLE_T GetTrkEndAngle( track_p trk, EPINX_T e )
{
+ ASSERT( e < trk->endCnt );
return trk->endPt[e].angle;
}
EXPORT track_p GetTrkEndTrk( track_p trk, EPINX_T e )
{
+ ASSERT( e < trk->endCnt );
return trk->endPt[e].track;
}
EXPORT long GetTrkEndOption( track_p trk, EPINX_T e )
{
+ ASSERT( e < trk->endCnt );
return trk->endPt[e].option;
}
EXPORT long SetTrkEndOption( track_p trk, EPINX_T e, long option )
{
+ ASSERT( e < trk->endCnt );
return trk->endPt[e].option = option;
}
+EXPORT DIST_T GetTrkGauge(
+ track_cp trk )
+{
+ if (trk)
+ return GetScaleTrackGauge( GetTrkScale( trk ) );
+ else
+ return trackGauge;
+}
+
EXPORT int GetTrkWidth( track_p trk )
{
return (int)trk->width;
@@ -441,6 +483,7 @@ EXPORT void SetTrkEndElev( track_p trk, EPINX_T ep, int option, DIST_T height, c
track_p trk1;
EPINX_T ep1;
trk->endPt[ep].elev.option = option;
+ trk->endPt[ep].elev.cacheSet = FALSE;
if (EndPtIsDefinedElev(trk,ep)) {
trk->endPt[ep].elev.u.height = height;
} else if (EndPtIsStationElev(trk,ep)) {
@@ -487,6 +530,23 @@ EXPORT DIST_T GetTrkEndElevHeight( track_p trk, EPINX_T e )
return trk->endPt[e].elev.u.height;
}
+EXPORT BOOL_T GetTrkEndElevCachedHeight (track_p trk, EPINX_T e, DIST_T * height, DIST_T * length)
+{
+ if (trk->endPt[e].elev.cacheSet) {
+ *height = trk->endPt[e].elev.cachedElev;
+ *length = trk->endPt[e].elev.cachedLength;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+EXPORT void SetTrkEndElevCachedHeight ( track_p trk, EPINX_T e, DIST_T height, DIST_T length)
+{
+ trk->endPt[e].elev.cachedElev = height;
+ trk->endPt[e].elev.cachedLength = length;
+ trk->endPt[e].elev.cacheSet = TRUE;
+}
+
EXPORT char * GetTrkEndElevStation( track_p trk, EPINX_T e )
{
@@ -531,13 +591,21 @@ void SetTrkLayer( track_p trk, int layer )
EXPORT int ClrAllTrkBits( int bits )
{
+ return ClrAllTrkBitsRedraw( bits, FALSE );
+}
+
+
+EXPORT int ClrAllTrkBitsRedraw( int bits, wBool_t bRedraw )
+{
track_p trk;
- int cnt;
- cnt = 0;
+ int cnt = 0;
TRK_ITERATE( trk ) {
- if (trk->bits&bits)
+ if (trk->bits&bits) {
cnt++;
- trk->bits &= ~bits;
+ trk->bits &= ~bits;
+ if ( bRedraw )
+ DrawNewTrack( trk );
+ }
}
return cnt;
}
@@ -549,6 +617,9 @@ EXPORT void SetTrkElev( track_p trk, int mode, DIST_T elev )
SetTrkBits( trk, TB_ELEVPATH );
trk->elev = elev;
trk->elevMode = mode;
+ for (int i=0;i<trk->endCnt;i++) {
+ trk->endPt[i].elev.cacheSet = FALSE;
+ }
}
@@ -606,7 +677,9 @@ EXPORT BOOL_T WriteEndPt( FILE * f, track_cp trk, EPINX_T ep )
long option;
assert ( endPt != NULL );
- if (endPt->track == NULL ||
+ if (bWriteEndPtDirectIndex && endPt->index > 0) {
+ rc &= fprintf( f, "\tT4 %d ", endPt->index )>0;
+ } else if (endPt->track == NULL ||
( exportingTracks && !GetTrkSelected(endPt->track) ) ) {
rc &= fprintf( f, "\tE4 " )>0;
} else {
@@ -651,7 +724,7 @@ EXPORT EPINX_T PickEndPoint( coOrd p, track_cp trk )
if (trk->endCnt <= 0)
return -1;
if ( onTrackInSplit && trk->endCnt > 2 ) {
- if (GetTrkType(trk) != T_TURNOUT)
+ if (GetTrkType(trk) == T_TURNOUT)
return TurnoutPickEndPt( p, trk );
}
d = FindDistance( p, trk->endPt[0].pos );
@@ -875,12 +948,14 @@ EXPORT BOOL_T MakeParallelTrack(
track_p trk,
coOrd pos,
DIST_T dist,
+ DIST_T factor,
track_p * newTrkR,
coOrd * p0R,
- coOrd * p1R )
+ coOrd * p1R,
+ BOOL_T track)
{
if ( trackCmds(trk->type)->makeParallel )
- return trackCmds(trk->type)->makeParallel( trk, pos, dist, newTrkR, p0R, p1R );
+ return trackCmds(trk->type)->makeParallel( trk, pos, dist, factor, newTrkR, p0R, p1R, track);
return FALSE;
}
@@ -1011,7 +1086,7 @@ EXPORT void ClearTracks( void )
to_first = NULL;
to_last = &to_first;
max_index = 0;
- changed = 0;
+ changed = checkPtMark = 0;
trackCount = 0;
ClearCars();
InfoCount( trackCount );
@@ -1033,11 +1108,14 @@ EXPORT void ResolveIndex( void )
track_p trk;
EPINX_T ep;
TRK_ITERATE(trk) {
+ LOG (log_track, 1, ( "ResNextTrack( T%d, t%d, E%d, X%ld)\n", trk->index, trk->type, trk->endCnt, trk->extraSize ));
for (ep=0; ep<trk->endCnt; ep++)
if (trk->endPt[ep].index >= 0) {
trk->endPt[ep].track = FindTrack( trk->endPt[ep].index );
if (trk->endPt[ep].track == NULL) {
- NoticeMessage( MSG_RESOLV_INDEX_BAD_TRK, _("Continue"), NULL, trk->index, ep, trk->endPt[ep].index );
+ int rc = NoticeMessage( MSG_RESOLV_INDEX_BAD_TRK, _("Continue"), _("Quit"), trk->index, ep, trk->endPt[ep].index );
+ if ( rc != 1 )
+ return;
}
}
ResolveBlockTrack (trk);
@@ -1063,29 +1141,21 @@ LOG( log_track, 4, ( "DeleteTrack(T%d)\n", GetTrkIndex(trk) ) )
}
}
}
- UndrawNewTrack( trk );
for (i=0;i<trk->endCnt;i++) {
if ((trk2=trk->endPt[i].track) != NULL) {
ep2 = GetEndPtConnectedToMe( trk2, trk );
- /*UndrawNewTrack( trk2 );*/
- DrawEndPt( &mainD, trk2, ep2, wDrawColorWhite );
DisconnectTracks( trk2, ep2, trk, i );
- /*DrawNewTrack( trk2 );*/
- if (!QueryTrack(trk2,Q_DONT_DRAW_ENDPOINT))
- DrawEndPt( &mainD, trk2, ep2, wDrawColorBlack );
if ( QueryTrack(trk,Q_CANNOT_BE_ON_END) )
UndoJoint( trk2, ep2, trk, i );
- ClrTrkElev( trk2 );
}
}
- CheckDeleteSwitchmotor( trk );
- CheckDeleteBlock( trk );
+ CheckDeleteSwitchmotor( trk );
+ CheckDeleteBlock( trk );
+ CheckCarTraverse( trk );
DecrementLayerObjects(trk->layer);
trackCount--;
AuditTracks( "deleteTrack T%d", trk->index);
UndoDelete(trk); /**< Attention: trk is invalidated during that call */
- MainRedraw();
- MapRedraw();
InfoCount( trackCount );
return TRUE;
}
@@ -1130,6 +1200,98 @@ BOOL_T TrackIterate( track_p * trk )
*trk = trk1;
return trk1 != NULL;
}
+
+
+wBool_t IsPosClose( coOrd pos1, coOrd pos2 ) {
+ DIST_T d = FindDistance( pos1, pos2 );
+ return d < 0.1;
+}
+
+
+wBool_t IsAngleClose( ANGLE_T angle1, ANGLE_T angle2 )
+{
+ ANGLE_T angle = NormalizeAngle( angle1 - angle2 );
+ if (angle > 180)
+ angle = 360-angle;
+ return angle < 0.01;
+}
+
+
+wBool_t IsDistClose( DIST_T dist1, DIST_T dist2 )
+{
+ DIST_T dist = fabs( dist1 - dist2 );
+ return dist < 0.01;
+}
+
+wBool_t IsWidthClose( DIST_T dist1, DIST_T dist2 )
+{
+ // width is computed by pixels/dpi
+ // problem is when widths are computed on platforms with differing dpi
+ DIST_T dist = fabs( dist1 - dist2 );
+ if ( dist < 0.01 )
+ return TRUE;
+#ifdef WINDOWS
+ dist1 *= 96.0/72.0;
+#else
+ dist1 *= 72.0/96.0;
+#endif
+ dist = fabs( dist1 - dist2 );
+ if ( dist < 0.01 )
+ return TRUE;
+ return FALSE;
+}
+
+wBool_t IsColorClose( wDrawColor color1, wDrawColor color2 )
+{
+ long rgb1 = wDrawGetRGB( color1 );
+ long rgb2 = wDrawGetRGB( color2 );
+ int r1 = (rgb1 >> 16) & 0xff;
+ int g1 = (rgb1 >> 8) & 0xff;
+ int b1 = rgb1 & 0xff;
+ int r2 = (rgb2 >> 16) & 0xff;
+ int g2 = (rgb2 >> 8) & 0xff;
+ int b2 = rgb2 & 0xff;
+ long diff = abs(r1-r2) + abs(g1-g2) + abs(b1-b2);
+ return (diff < 7);
+}
+
+wBool_t CompareTrack( track_cp trk1, track_cp trk2 )
+{
+ wBool_t rc = FALSE;
+ if ( trk1 == NULL ) {
+ sprintf( message, "Compare: T%d not found\n", trk2->index );
+ return FALSE;
+ }
+ sprintf( message, "Compare T:%d - ", GetTrkIndex(trk1) );
+ char * cp = message+strlen(message);
+ REGRESS_CHECK_INT( "Type", trk1, trk2, type )
+ REGRESS_CHECK_INT( "Index", trk1, trk2, index )
+ REGRESS_CHECK_INT( "Layer", trk1, trk2, layer )
+ REGRESS_CHECK_INT( "Scale", trk1, trk2, scale )
+ REGRESS_CHECK_INT( "EndPtCnt", trk1, trk2, endCnt )
+ char * cq = cp-2;
+ for ( int inx=0; inx<GetTrkEndPtCnt( trk1 ); inx++ ) {
+ cp = cq;
+ sprintf( cp, "EP:%d - ", inx );
+ cp += strlen(cp);
+ REGRESS_CHECK_POS( "Pos", trk1, trk2, endPt[inx].pos )
+ REGRESS_CHECK_ANGLE( "Angle", trk1, trk2, endPt[inx].angle )
+ int inx1 = trk1->endPt[inx].index;
+ track_cp trk1x = GetTrkEndTrk( trk1, inx );
+ if ( trk1x )
+ inx1 = GetTrkIndex( trk1x );
+ int inx2 = trk2->endPt[inx].index;
+ if ( inx1 != inx2 ) {
+ sprintf( cp, "Index: Actual` %d, Expected %d\n", inx1, inx2 );
+ return FALSE;
+ }
+ REGRESS_CHECK_INT( "Option", trk1, trk2, endPt[inx].option )
+ }
+ if ( trackCmds( GetTrkType( trk1 ) )->compare == NULL )
+ return TRUE;
+ return trackCmds( GetTrkType( trk1 ) )->compare( trk1, trk2 );
+}
+
/*****************************************************************************
*
@@ -1221,9 +1383,9 @@ EXPORT void InitCmdAboveBelow( void )
{
wIcon_p bm_p;
bm_p = wIconCreatePixMap( above_xpm );
- AddToolbarButton( "cmdAbove", bm_p, IC_SELECTED, (addButtonCallBack_t)SelectAbove, NULL );
+ AddToolbarButton( "cmdAbove", bm_p, IC_SELECTED|IC_POPUP, (addButtonCallBack_t)SelectAbove, NULL );
bm_p = wIconCreatePixMap( below_xpm );
- AddToolbarButton( "cmdBelow", bm_p, IC_SELECTED, (addButtonCallBack_t)SelectBelow, NULL );
+ AddToolbarButton( "cmdBelow", bm_p, IC_SELECTED|IC_POPUP, (addButtonCallBack_t)SelectBelow, NULL );
}
/*****************************************************************************
@@ -1244,6 +1406,15 @@ EXPORT BOOL_T ReadTrack( char * line )
{
TRKINX_T inx, lo, hi;
int cmp;
+ if (strncmp( paramLine, "TABLEEDGE ", 10 ) == 0) {
+ ReadTableEdge( paramLine+10 );
+ return TRUE;
+ }
+ if (strncmp( paramLine, "TEXT ", 5 ) == 0) {
+ ReadText( paramLine+5 );
+ return TRUE;
+ }
+
if (bsearchRead) {
if (sortedCmds == NULL) {
sortedCmds = (trackCmd_t**)MyMalloc( (trackCmds_da.cnt-1) * sizeof *(trackCmd_t*)0 );
@@ -1258,8 +1429,7 @@ if (bsearchRead) {
inx = (lo+hi)/2;
cmp = strncmp( line, sortedCmds[inx]->name, strlen(sortedCmds[inx]->name) );
if (cmp == 0) {
- sortedCmds[inx]->read(line);
- return TRUE;
+ return sortedCmds[inx]->read(line);
} else if (cmp < 0) {
hi = inx-1;
} else {
@@ -1269,28 +1439,33 @@ if (bsearchRead) {
} else {
for (inx=1; inx<trackCmds_da.cnt; inx++) {
if (strncmp( line, trackCmds(inx)->name, strlen(trackCmds(inx)->name) ) == 0 ) {
- trackCmds(inx)->read( line );
- return TRUE;
+ trackCmds(inx)->read( line );
+ // Return TRUE means we found the object type and processed it
+ // Any errors will be handled by the callee's:
+ // Either skip the definition (ReadSegs) or skip the remainder of the file (InputError)
+ return TRUE;
}
}
}
- if (strncmp( paramLine, "TABLEEDGE ", 10 ) == 0)
- return ReadTableEdge( paramLine+10 );
- if (strncmp( paramLine, "TEXT ", 5 ) == 0)
- return ReadText( paramLine+5 );
+ // Object type not found
return FALSE;
}
-EXPORT BOOL_T WriteTracks( FILE * f )
+EXPORT BOOL_T WriteTracks( FILE * f, wBool_t bFull )
{
track_p trk;
BOOL_T rc = TRUE;
- RenumberTracks();
+ if ( bFull )
+ RenumberTracks();
+ if ( !bFull )
+ bWriteEndPtDirectIndex = TRUE;
TRK_ITERATE( trk ) {
rc &= trackCmds(GetTrkType(trk))->write( trk, f );
}
- rc &= WriteCars( f );
+ bWriteEndPtDirectIndex = FALSE;
+ if ( bFull )
+ rc &= WriteCars( f );
return rc;
}
@@ -1302,7 +1477,9 @@ EXPORT void ImportStart( void )
}
-EXPORT void ImportEnd( void )
+
+
+EXPORT void ImportEnd( coOrd offset, wBool_t import, wBool_t inPlace )
{
track_p to_firstOld;
wIndex_t trackCountOld;
@@ -1310,51 +1487,98 @@ EXPORT void ImportEnd( void )
coOrd pos;
wPos_t x, y;
wPos_t ww, hh;
+ wBool_t offscreen = FALSE;
+
+ double xmin = 0.0;
+ double xmax = 0.0;
+ double ymin = 0.0;
double ymax = 0.0;
// get the current mouse position
GetMousePosition( &x, &y );
mainD.Pix2CoOrd( &mainD, x, y, &pos );
+
// get the size of the drawing area
wDrawGetSize( mainD.d, &ww, &hh );
- // in case the pointer is close to the edge or above the drawing area
- // recalculate the destination position so the pasted part remains visible
- if( abs( y - hh ) < CLOSETOTHEEDGE ) {
- for ( trk=*importTrack; trk; trk=trk->next ) {
- if (!IsTrackDeleted(trk) && trk->hi.y > ymax ) {
- ymax = trk->hi.y;
- }
+ coOrd middle_screen;
+ wPos_t mx,my;
+
+ mx = ww/2;
+ my = hh/2;
+
+ mainD.Pix2CoOrd( &mainD, mx, my, &middle_screen );
+
+
+ for ( trk=*importTrack; trk; trk=trk->next ) {
+ if (!IsTrackDeleted(trk)) {
+ if (trk->hi.y > ymax ) ymax = trk->hi.y;
+ if (trk->lo.y < ymin ) ymin = trk->lo.y;
+ if (trk->hi.x > xmax ) xmax = trk->hi.x;
+ if (trk->lo.x < xmin ) xmin = trk->lo.x;
}
- pos.y -= ymax;
}
-
+
+ coOrd size = {xmax-xmin,ymax-ymin};
+
+
+
+ if (import) {
+ offset = zero;
+ } else if (!inPlace) {
+ //If cursor is off drawing area - cursor is in middle screen
+ if ((x<LBORDER) || (x>(ww-RBORDER)) || (y<BBORDER) || (y>(hh-TBORDER))) {
+ pos.x = middle_screen.x;
+ pos.y = middle_screen.y;
+ }
+ offset.x += pos.x;
+ offset.y += pos.y;
+ }
+
+ coOrd middle_object;
+
+ middle_object.x = offset.x + (size.x/2);
+ middle_object.y = offset.y + (size.y/2);
+
+ wPos_t ox,oy;
+ mainD.CoOrd2Pix( &mainD, middle_object, &ox, &oy );
+
+ if ((ox<0) || (ox>ww) || (oy<0) || (oy>hh) ) offscreen = TRUE;
+
to_firstOld = to_first;
to_first = *importTrack;
trackCountOld = trackCount;
ResolveIndex();
to_first = to_firstOld;
RenumberTracks();
- DrawMapBoundingBox( FALSE );
// move the imported track into place
for ( trk=*importTrack; trk; trk=trk->next ) if (!IsTrackDeleted(trk)) {
- MoveTrack( trk, pos );// mainD.orig );
+ coOrd move;
+ move.x = offset.x;
+ move.y = offset.y;
+ MoveTrack( trk, move );// mainD.orig );
trk->bits |= TB_SELECTED;
DrawTrack( trk, &mainD, wDrawColorBlack );
}
- DrawMapBoundingBox( TRUE );
importTrack = NULL;
trackCount = trackCountOld;
InfoCount( trackCount );
+ // Pan screen if needed to center of new
+ if (offscreen) {
+ panCenter = middle_object;
+ PanHere((void*)0);
+ }
}
-
-EXPORT BOOL_T ExportTracks( FILE * f )
+/*******
+ * Move Selected Tracks to origin zero and write out
+ *******/
+EXPORT BOOL_T ExportTracks( FILE * f, coOrd * offset)
{
track_p trk;
- coOrd xlat, orig;
+ coOrd xlat,orig;
exportingTracks = TRUE;
orig = mapD.size;
@@ -1368,8 +1592,9 @@ EXPORT BOOL_T ExportTracks( FILE * f )
trk->index = ++max_index;
}
}
- orig.x -= trackGauge;
- orig.y -= trackGauge;
+
+ *offset = orig;
+
xlat.x = - orig.x;
xlat.y = - orig.y;
TRK_ITERATE( trk ) {
@@ -1527,13 +1752,13 @@ nextEndPt:;
if (auditStop)
if (NoticeMessage( MSG_AUDIT_WRITE_FILE, _("Yes"), _("No"))) {
fprintf( auditFile, "# before undo\n" );
- WriteTracks(auditFile);
+ WriteTracks(auditFile, TRUE);
Rdump( auditFile );
if (strcmp("undoUndo",event)==0) {
fprintf( auditFile, "# failure in undo\n" );
} else if (UndoUndo()) {
fprintf( auditFile, "# after undo\n" );
- WriteTracks(auditFile);
+ WriteTracks(auditFile, TRUE);
Rdump( auditFile );
} else {
fprintf( auditFile, "# undo stack is empty\n" );
@@ -1584,21 +1809,33 @@ EXPORT void ComputeBoundingBox( track_p trk )
EXPORT DIST_T EndPtDescriptionDistance(
coOrd pos,
track_p trk,
- EPINX_T ep )
+ EPINX_T ep,
+ coOrd *dpos,
+ BOOL_T show_hidden,
+ BOOL_T * hidden)
{
elev_t *e;
coOrd pos1;
track_p trk1;
+ *dpos = pos;
+ if (hidden) *hidden = FALSE;
e = &trk->endPt[ep].elev;
- if ((e->option&ELEV_MASK)==ELEV_NONE ||
- (e->option&ELEV_VISIBLE)==0 )
+ if ((e->option&ELEV_MASK)==ELEV_NONE)
+ return 100000;
+ if (((e->option&ELEV_VISIBLE)==0) && !show_hidden)
return 100000;
if ((trk1=GetTrkEndTrk(trk,ep)) && GetTrkIndex(trk1)<GetTrkIndex(trk))
return 100000;
+ if ((e->option&ELEV_VISIBLE)==0) { //Hidden - disregard offset
+ if (hidden) *hidden = TRUE;
+ return FindDistance( GetTrkEndPos(trk,ep), pos );
+ }
/*REORIGIN( pos1, e->doff, GetTrkEndPos(trk,ep), GetTrkEndAngle(trk,ep) );*/
pos1 = GetTrkEndPos(trk,ep);
pos1.x += e->doff.x;
pos1.y += e->doff.y;
+ *dpos = pos1;
+ if (hidden) *hidden = !(e->option&ELEV_VISIBLE);
return FindDistance( pos1, pos );
}
@@ -1610,22 +1847,21 @@ EXPORT STATUS_T EndPtDescriptionMove(
coOrd pos )
{
static coOrd p0, p1;
+ static BOOL_T editState = FALSE;
elev_t *e, *e1;
- wDrawColor color;
track_p trk1;
e = &trk->endPt[ep].elev;
switch (action) {
case C_DOWN:
p0 = GetTrkEndPos(trk,ep);
- /*REORIGIN( p0, e->doff, GetTrkEndPos(trk,ep), GetTrkEndAngle(trk,ep) );*/
-
+ p1 = pos;
+ e->option |= ELEV_VISIBLE; //Make sure we make visible
+ DrawEndElev( &mainD, trk, ep, wDrawColorWhite );
+ /*no break*/
case C_MOVE:
case C_UP:
- if (action != C_DOWN)
- DrawLine( &tempD, p0, p1, 0, wDrawColorBlack );
- color = GetTrkColor( trk, &mainD );
- DrawEndElev( &tempD, trk, ep, color );
+ editState = TRUE;
p1 = pos;
e->doff.x = (pos.x-p0.x);
e->doff.y = (pos.y-p0.y);
@@ -1633,15 +1869,18 @@ EXPORT STATUS_T EndPtDescriptionMove(
e1 = &trk1->endPt[GetEndPtConnectedToMe(trk1,trk)].elev;
e1->doff = e->doff;
}
- DrawEndElev( &tempD, trk, ep, color );
- if (action != C_UP)
- DrawLine( &tempD, p0, p1, 0, wDrawColorBlack );
- MainRedraw();
- MapRedraw();
+ if ( action == C_UP ) {
+ editState = FALSE;
+ wDrawColor color = GetTrkColor( trk, &mainD );
+ DrawEndElev( &mainD, trk, ep, color );
+ }
return action==C_UP?C_TERMINATE:C_CONTINUE;
case C_REDRAW:
- DrawLine( &tempD, p0, p1, 0, wDrawColorBlack );
+ DrawEndElev( &tempD, trk, ep, wDrawColorBlue );
+ if ( editState ) {
+ DrawLine( &tempD, p0, p1, 0, wDrawColorBlue );
+ }
break;
}
return C_CONTINUE;
@@ -1692,12 +1931,12 @@ EXPORT void LoosenTracks( void )
}
}
if (count)
- MainRedraw();
+ MainRedraw(); // LoosenTracks
else
InfoMessage(_("No tracks loosened"));
}
-EXPORT void ConnectTracks( track_p trk0, EPINX_T inx0, track_p trk1, EPINX_T inx1 )
+EXPORT int ConnectTracks( track_p trk0, EPINX_T inx0, track_p trk1, EPINX_T inx1 )
{
DIST_T d;
ANGLE_T a;
@@ -1705,31 +1944,23 @@ EXPORT void ConnectTracks( track_p trk0, EPINX_T inx0, track_p trk1, EPINX_T inx
if ( !IsTrack(trk0) ) {
NoticeMessage( _("Connecting a non-track(%d) to (%d)"), _("Continue"), NULL, GetTrkIndex(trk0), GetTrkIndex(trk1) );
- return;
+ return -1;
}
if ( !IsTrack(trk1) ) {
NoticeMessage( _("Connecting a non-track(%d) to (%d)"), _("Continue"), NULL, GetTrkIndex(trk1), GetTrkIndex(trk0) );
- return;
+ return -1;
}
pos0 = trk0->endPt[inx0].pos;
pos1 = trk1->endPt[inx1].pos;
LOG( log_track, 3, ( "ConnectTracks( T%d[%d] @ [%0.3f, %0.3f] = T%d[%d] @ [%0.3f %0.3f]\n", trk0->index, inx0, pos0.x, pos0.y, trk1->index, inx1, pos1.x, pos1.y ) )
d = FindDistance( pos0, pos1 );
- a = NormalizeAngle( trk0->endPt[inx0].angle -
- trk1->endPt[inx1].angle + 180.0 );
- if (d > connectDistance || (a > connectAngle && a < 360.0 - connectAngle) || (log_endPt>0 && logTable(log_endPt).level>=1)) {
-#ifndef WINDOWS
- LogPrintf( "connectTracks: T%d[%d] T%d[%d] d=%0.3f a=%0.3f\n %d ",
- trk0->index, inx0, trk1->index, inx1, d, a, trk0->index );
- /*PrintEndPt( logFile, trk0, 0 );
- PrintEndPt( logFile, trk0, 1 );???*/
- LogPrintf( "\n %d ", trk1->index );
- /*PrintEndPt( logFile, trk1, 0 );
- PrintEndPt( logFile, trk1, 1 );???*/
- LogPrintf("\n");
-#endif
- if (d > connectDistance || (a > connectAngle && a < 360.0 - connectAngle))
- NoticeMessage( MSG_CONNECT_TRK, _("Continue"), NULL, trk0->index, inx0, trk1->index, inx1, d, a );
+ a = fabs(DifferenceBetweenAngles( trk0->endPt[inx0].angle,
+ trk1->endPt[inx1].angle + 180.0 ));
+ if (d > connectDistance || (a > connectAngle ) ) {
+ LOG( log_endPt, 1, ( "connectTracks: T%d[%d] T%d[%d] d=%0.3f a=%0.3f\n",
+ trk0->index, inx0, trk1->index, inx1, d, a ) );
+ NoticeMessage( MSG_CONNECT_TRK, _("Continue"), NULL, trk0->index, inx0, trk1->index, inx1, d, a );
+ return -1; /* Stop connecting out of alignment tracks! */
}
UndoModify( trk0 );
UndoModify( trk1 );
@@ -1738,6 +1969,7 @@ LOG( log_track, 3, ( "ConnectTracks( T%d[%d] @ [%0.3f, %0.3f] = T%d[%d] @ [%0.3f
trk0->endPt[inx0].track = trk1;
trk1->endPt[inx1].track = trk0;
AuditTracks( "connectTracks T%d[%d], T%d[%d]", trk0->index, inx0, trk1->index, inx1 );
+ return 0;
}
@@ -1834,7 +2066,6 @@ LOG( log_track, 2, ( "SplitTrack( T%d[%d], (%0.3f %0.3f)\n", trk->index, ep, pos
} else {
LOG( log_track, 2, ( " at endPt (no connection)\n") )
}
- *leftover = trk2;
DrawNewTrack( trk );
@@ -1855,7 +2086,6 @@ LOG( log_track, 2, ( "SplitTrack( T%d[%d], (%0.3f %0.3f)\n", trk->index, ep, pos
LOG( log_track, 2, ( " at endPt (no connection)\n") )
}
DrawNewTrack( trk );
-
} else {
/* TODO circle's don't have ep's */
trk2 = GetTrkEndTrk( trk, ep );
@@ -1878,13 +2108,13 @@ LOG( log_track, 2, ( "SplitTrack( T%d[%d], (%0.3f %0.3f)\n", trk->index, ep, pos
trkl = *leftover;
ep0 = epl;
if ( !disconnect )
- ConnectTracks( trk, ep, trkl, ep0 );
- ep0 = 1-ep0;
+ ConnectTracks( trk, ep, trkl, epl );
+ ep0 = 1-epl;
while ( 1 ) {
CopyAttributes( trk, trkl );
ClrTrkElev( trkl );
trk0 = GetTrkEndTrk(trkl,ep0);
- if ( trk0 == NULL )
+ if ( trk0 == NULL || trk0->type == T_TURNOUT )
break;
ep0 = 1-GetEndPtConnectedToMe(trk0,trkl);
trkl = trk0;
@@ -1901,7 +2131,7 @@ LOG( log_track, 2, ( "SplitTrack( T%d[%d], (%0.3f %0.3f)\n", trk->index, ep, pos
while ( 1 ) {
DrawNewTrack( trkl );
trk0 = GetTrkEndTrk(trkl,ep0);
- if ( trk0 == NULL || trk0 == trk2 )
+ if ( trk0 == NULL || trk0 == trk2 || trk0->type == T_TURNOUT)
break;
ep0 = 1-GetEndPtConnectedToMe(trk0,trkl);
trkl = trk0;
@@ -1970,14 +2200,14 @@ EXPORT BOOL_T RemoveTrack( track_p * trk, EPINX_T * ep, DIST_T *dist )
}
dist1 = *dist;
*dist = 0.0;
- return TrimTrack( *trk, *ep, dist1 );
+ return TrimTrack( *trk, *ep, dist1, zero, 0.0, 0.0, zero );
}
-EXPORT BOOL_T TrimTrack( track_p trk, EPINX_T ep, DIST_T dist )
+EXPORT BOOL_T TrimTrack( track_p trk, EPINX_T ep, DIST_T dist, coOrd pos, ANGLE_T angle, DIST_T radius, coOrd center )
{
if (trackCmds(trk->type)->trim)
- return trackCmds(trk->type)->trim( trk, ep, dist );
+ return trackCmds(trk->type)->trim( trk, ep, dist, pos, angle, radius, center );
else
return FALSE;
}
@@ -1992,6 +2222,130 @@ EXPORT BOOL_T MergeTracks( track_p trk0, EPINX_T ep0, track_p trk1, EPINX_T ep1
return FALSE;
}
+EXPORT STATUS_T ExtendTrackFromOrig( track_p trk, wAction_t action, coOrd pos )
+{
+ static EPINX_T ep;
+ static coOrd end_pos;
+ static BOOL_T valid;
+ DIST_T d;
+ track_p trk1;
+ trackParams_t params;
+ static wBool_t curved;
+ static ANGLE_T end_angle;
+
+ switch ( action ) {
+ case C_DOWN:
+ ep = PickUnconnectedEndPoint( pos, trk );
+ if ( ep == -1 )
+ return C_ERROR;
+ pos = GetTrkEndPos(trk,ep);
+ if (!GetTrackParams(PARAMS_CORNU,trk,pos,&params)) return C_ERROR;
+ end_pos = pos;
+ if (params.type == curveTypeCurve) {
+ curved = TRUE;
+ tempSegs(0).type = SEG_CRVTRK;
+ tempSegs(0).width = 0;
+ tempSegs(0).u.c.radius = params.arcR;
+ tempSegs(0).u.c.center = params.arcP;
+ tempSegs(0).u.c.a0 = FindAngle(params.arcP,GetTrkEndPos(trk,ep));
+ tempSegs(0).u.c.a1 = 0;
+ } else {
+ curved = FALSE;
+ tempSegs(0).type = SEG_STRTRK;
+ tempSegs(0).width = 0;
+ tempSegs(0).u.l.pos[0] = tempSegs(0).u.l.pos[1] = GetTrkEndPos( trk, ep );
+ }
+ valid = FALSE;
+ InfoMessage( _("Drag to change track length") );
+ return C_CONTINUE;
+ /*no break*/
+ case C_MOVE:
+ if (curved) {
+ //Normalize pos
+ PointOnCircle( &pos, tempSegs(0).u.c.center, tempSegs(0).u.c.radius, FindAngle(tempSegs(0).u.c.center,pos) );
+ ANGLE_T a = FindAngle(tempSegs(0).u.c.center,pos)-FindAngle(tempSegs(0).u.c.center,end_pos);
+ d = fabs(a)*2*M_PI/360*tempSegs(0).u.c.radius;
+ if ( d <= minLength ) {
+ if (action == C_MOVE)
+ ErrorMessage( MSG_TRK_TOO_SHORT, _("Connecting "), PutDim(fabs(minLength-d)) );
+ valid = FALSE;
+ return C_CONTINUE;
+ }
+ //Restrict to outside track
+ ANGLE_T diff = NormalizeAngle(GetTrkEndAngle(trk, ep)-FindAngle(end_pos,pos));
+ if (diff>90.0 && diff<270.0) {
+ valid = FALSE;
+ tempSegs(0).u.c.a1 = 0;
+ tempSegs(0).u.c.a0 = end_angle;
+ InfoMessage( _("Inside turnout track"));
+ return C_CONTINUE;
+ }
+ end_angle = GetTrkEndAngle( trk, ep );
+ a = FindAngle(tempSegs(0).u.c.center, pos );
+ PointOnCircle( &pos, tempSegs(0).u.c.center, tempSegs(0).u.c.radius, a );
+ ANGLE_T a2 = FindAngle(tempSegs(0).u.c.center,end_pos);
+ if ((end_angle > 180 && (a2>90 && a2 <270)) ||
+ (end_angle < 180 && (a2<90 || a2 >270))) {
+ tempSegs(0).u.c.a0 = a2;
+ tempSegs(0).u.c.a1 = NormalizeAngle(a-a2);
+ } else {
+ tempSegs(0).u.c.a0 = a;
+ tempSegs(0).u.c.a1 = NormalizeAngle(a2-a);
+ }
+ tempSegs_da.cnt = 1;
+ valid = TRUE;
+ if (action == C_MOVE)
+ InfoMessage( _("Curve: Length=%s Radius=%0.3f Arc=%0.3f"),
+ FormatDistance( d ), FormatDistance(tempSegs(0).u.c.radius), PutAngle( fabs(a) ) );
+ return C_CONTINUE;
+ } else {
+ d = FindDistance( end_pos, pos );
+ valid = TRUE;
+ if ( d <= minLength ) {
+ if (action == C_MOVE)
+ ErrorMessage( MSG_TRK_TOO_SHORT, _("Connecting "), PutDim(fabs(minLength-d)) );
+ valid = FALSE;
+ return C_CONTINUE;
+ }
+ ANGLE_T diff = NormalizeAngle(GetTrkEndAngle( trk, ep )-FindAngle(end_pos, pos));
+ if (diff>=90.0 && diff<=270.0) {
+ valid = FALSE;
+ tempSegs(0).u.c.a1 = 0;
+ tempSegs(0).u.c.a0 = end_angle;
+ InfoMessage( _("Inside turnout track"));
+ return C_CONTINUE;
+ }
+ Translate( &tempSegs(0).u.l.pos[1], tempSegs(0).u.l.pos[0], GetTrkEndAngle( trk, ep ), d );
+ tempSegs_da.cnt = 1;
+ if (action == C_MOVE)
+ InfoMessage( _("Straight: Length=%s Angle=%0.3f"),
+ FormatDistance( d ), PutAngle( GetTrkEndAngle( trk, ep ) ) );
+ }
+ return C_CONTINUE;
+
+ case C_UP:
+ if (!valid)
+ return C_TERMINATE;
+ UndrawNewTrack( trk );
+ EPINX_T jp;
+ if (curved) {
+ trk1 = NewCurvedTrack(tempSegs(0).u.c.center, tempSegs(0).u.c.radius, tempSegs(0).u.c.a0, tempSegs(0).u.c.a1, 0);
+ jp = PickUnconnectedEndPoint(end_pos,trk1);
+ } else {
+ trk1 = NewStraightTrack( tempSegs(0).u.l.pos[0], tempSegs(0).u.l.pos[1] );
+ jp = 0;
+ }
+ CopyAttributes( trk, trk1 );
+ ConnectTracks( trk, ep, trk1, jp );
+ DrawNewTrack( trk );
+ DrawNewTrack( trk1 );
+ return C_TERMINATE;
+
+ default:
+ ;
+ }
+ return C_ERROR;
+}
EXPORT STATUS_T ExtendStraightFromOrig( track_p trk, wAction_t action, coOrd pos )
{
@@ -2106,6 +2460,9 @@ EXPORT char * GetTrkTypeName( track_p trk )
return trackCmds(trk->type)->name;
}
+/*
+ * Note Misnomer - this function also gets the normal length - enumerate deals with flextrack length
+ */
EXPORT DIST_T GetFlexLength( track_p trk0, EPINX_T ep, coOrd * pos )
{
@@ -2153,9 +2510,33 @@ EXPORT DIST_T GetTrkLength( track_p trk, EPINX_T ep0, EPINX_T ep1 )
} else {
pos0 = GetTrkEndPos(trk,ep0);
if (ep1==-1) {
+ // Usual case for asking about distance to center of turnout for grades
+ if (trk->type==T_TURNOUT) {
+ trackParams_t trackParamsData;
+ trackParamsData.ep = ep0;
+ if (trackCmds(trk->type)->getTrackParams != NULL) {
+ //Find distance to centroid of end points * 2 or actual length if epCnt < 3
+ trackCmds(trk->type)->getTrackParams(PARAMS_TURNOUT,trk,pos0,&trackParamsData);
+ return trackParamsData.len/2.0;
+ }
+ }
pos1.x = (trk->hi.x+trk->lo.x)/2.0;
pos1.y = (trk->hi.y+trk->lo.y)/2.0;
} else {
+ if (trk->type==T_TURNOUT) {
+ pos1 = GetTrkEndPos(trk,ep1);
+ trackParams_t trackParamsData;
+ trackParamsData.ep = ep0;
+ if (trackCmds(trk->type)->getTrackParams != NULL) {
+ //Find distance via centroid of end points or actual length if epCnt < 3
+ trackCmds(trk->type)->getTrackParams(PARAMS_TURNOUT,trk,pos0,&trackParamsData);
+ d = trackParamsData.len/2.0;
+ trackParamsData.ep = ep1;
+ trackCmds(trk->type)->getTrackParams(PARAMS_TURNOUT,trk,pos1,&trackParamsData);
+ d += trackParamsData.len/2.0;
+ return d;
+ }
+ }
pos1 = GetTrkEndPos(trk,ep1);
}
pos1.x -= pos0.x;
@@ -2169,6 +2550,8 @@ EXPORT DIST_T GetTrkLength( track_p trk, EPINX_T ep0, EPINX_T ep1 )
#define DRAW_TUNNEL_DASH (1)
#define DRAW_TUNNEL_SOLID (2)
EXPORT long drawTunnel = DRAW_TUNNEL_DASH;
+EXPORT long colorTrack;
+EXPORT long colorDraw;
/******************************************************************************
*
@@ -2179,6 +2562,24 @@ EXPORT long drawTunnel = DRAW_TUNNEL_DASH;
EXPORT long tieDrawMode = TIEDRAWMODE_SOLID;
EXPORT wDrawColor tieColor;
+static wBool_t DoDrawTies( drawCmd_p d, track_cp trk )
+{
+ DIST_T scale2rail = (d->options&DC_PRINT)?(twoRailScale*2+1):twoRailScale;
+ if ( !trk )
+ return FALSE;
+ if (GetTrkNoTies(trk))
+ return FALSE; //No Ties for this Track
+ if ( tieDrawMode == TIEDRAWMODE_NONE )
+ return FALSE;
+ if ( d == &mapD )
+ return FALSE;
+ if ( d->scale >= scale2rail )
+ return FALSE;
+ if ( !(GetTrkVisible(trk) || drawTunnel==DRAW_TUNNEL_SOLID) )
+ return FALSE;
+ return TRUE;
+}
+
EXPORT void DrawTie(
drawCmd_p d,
coOrd pos,
@@ -2188,7 +2589,9 @@ EXPORT void DrawTie(
wDrawColor color,
BOOL_T solid )
{
- coOrd p[4], lo, hi;
+ coOrd lo, hi;
+ coOrd p[4];
+ int t[4];
length /= 2;
width /= 2;
@@ -2198,6 +2601,7 @@ EXPORT void DrawTie(
hi.x += length;
hi.y += length;
angle += 90;
+
Translate( &p[0], pos, angle, length );
Translate( &p[1], p[0], angle+90, width );
Translate( &p[0], p[0], angle-90, width );
@@ -2205,6 +2609,10 @@ EXPORT void DrawTie(
Translate( &p[3], p[2], angle-90, width );
Translate( &p[2], p[2], angle+90, width );
+ for (int i=0;i<4;i++) {
+ t[i] = 0;
+ }
+
if ( d == &mainD ) {
lo.x -= RBORDER/mainD.dpi*mainD.scale;
lo.y -= TBORDER/mainD.dpi*mainD.scale;
@@ -2214,19 +2622,16 @@ EXPORT void DrawTie(
return;
}
if ( solid ) {
- DrawFillPoly( d, 4, p, color );
+ DrawPoly( d, 4, p, t, color, 0, 1, 0 );
} else {
- DrawLine( d, p[0], p[1], 0, color );
- DrawLine( d, p[1], p[2], 0, color );
- DrawLine( d, p[2], p[3], 0, color );
- DrawLine( d, p[3], p[0], 0, color );
+ DrawPoly( d, 4, p, t, color, 0, 0, 0);
}
}
-EXPORT void DrawCurvedTies(
+static void DrawCurvedTies(
drawCmd_p d,
- track_p trk,
+ SCALEINX_T scaleInx,
coOrd p,
DIST_T r,
ANGLE_T a0,
@@ -2239,27 +2644,27 @@ EXPORT void DrawCurvedTies(
coOrd pos;
int cnt;
- if ( (d->funcs->options&wDrawOptTemp) != 0 )
+ if ( (d->options&DC_SIMPLE) != 0 )
return;
- if ( trk == NULL )
- return;
-
- td = GetScaleTieData(GetTrkScale(trk));
- if ( (!GetTrkVisible(trk)) && drawTunnel!=DRAW_TUNNEL_SOLID )
+ if ( scaleInx < 0 )
return;
+ td = GetScaleTieData( scaleInx );
+
if (color == wDrawColorBlack)
color = tieColor;
len = 2*M_PI*r*a1/360.0;
- cnt = (int)(len/td->spacing);
- if ( len-td->spacing*cnt-td->width > (td->spacing-td->width)/2 )
+ cnt = (int)floor(len/td->spacing+0.5);
+ if ( len-td->spacing*cnt-(td->width/2) > (td->spacing-td->width)/2 ) {
cnt++;
+ }
if ( cnt != 0 ) {
- dang = a1/cnt;
+ dang = (360.0*(len)/cnt)/(2*M_PI*r);
for ( ang=a0+dang/2; cnt; cnt--,ang+=dang ) {
PointOnCircle( &pos, p, r, ang );
DrawTie( d, pos, ang+90, td->length, td->width, color, tieDrawMode==TIEDRAWMODE_SOLID );
}
+
}
}
@@ -2273,11 +2678,11 @@ EXPORT void DrawCurvedTrack(
coOrd p0,
coOrd p1,
track_p trk,
- DIST_T trackGauge,
wDrawColor color,
long options )
{
DIST_T scale2rail;
+ DIST_T trackGauge = GetTrkGauge(trk);
wDrawWidth width=0;
trkSeg_p segPtr;
@@ -2295,9 +2700,10 @@ EXPORT void DrawCurvedTrack(
}
scale2rail = (d->options&DC_PRINT)?(twoRailScale*2+1):twoRailScale;
- if (options&DTS_THICK2)
- width = 2;
- if (options&DTS_THICK3)
+ width = trk ? GetTrkWidth( trk ): 0;
+ if ( d->options&DC_THICK )
+ width = 3;
+ if ( color == wDrawColorPreviewSelected || color == wDrawColorPreviewUnselected )
width = 3;
#ifdef WINDOWS
width *= (wDrawWidth)(d->dpi/mainD.dpi);
@@ -2308,21 +2714,15 @@ EXPORT void DrawCurvedTrack(
LOG( log_track, 4, ( "DST( (%0.3f %0.3f) R%0.3f A%0.3f..%0.3f)\n",
p.x, p.y, r, a0, a1 ) )
- if ( (options&DTS_TIES) != 0 && trk &&
- tieDrawMode!=TIEDRAWMODE_NONE &&
- d!=&mapD &&
- (d->options&DC_TIES)!=0 &&
- d->scale<scale2rail/2 )
- DrawCurvedTies( d, trk, p, r, a0, a1, color );
+ if ( DoDrawTies( d, trk ) )
+ DrawCurvedTies( d, GetTrkScale(trk), p, r, a0, a1, color );
if (color == wDrawColorBlack)
color = normalColor;
if ( d->scale >= scale2rail ) {
DrawArc( d, p, r, a0, a1, ((d->scale<32) && centerDrawMode && !(options&DTS_NOCENTER)) ? 1 : 0, width, color );
- } else if (d->options & DC_QUICK) {
- DrawArc( d, p, r, a0, a1, ((d->scale<32) && centerDrawMode && !(options&DTS_NOCENTER)) ? 1 : 0, 0, color );
} else {
if ( (d->scale <= 1 && (d->options&DC_SIMPLE)==0) || (d->options&DC_CENTERLINE)!=0
- || (d->scale <= scale2rail/2 && d->options&DC_PRINT && printCenterLines)) { // if printing two rails respect print CenterLine option
+ || (d->scale <= scale2rail/2 && ((d->options&DC_PRINT) && printCenterLines))) { // if printing two rails respect print CenterLine option
long options = d->options;
d->options |= DC_DASH;
DrawArc( d, p, r, a0, a1, 0, 0, color );
@@ -2340,12 +2740,44 @@ LOG( log_track, 4, ( "DST( (%0.3f %0.3f) R%0.3f A%0.3f..%0.3f)\n",
}
}
}
+ if (trk && GetTrkBridge( trk ) ) {
+
+ ANGLE_T a2,a3;
+ coOrd pp0,pp1,pp2,pp3;
+
+ a2 = a0+R2D(trackGauge*1.0/r);
+ a3 = a1-R2D(trackGauge*2.0/r);
+
+ wDrawWidth width2 = (wDrawWidth)round((2.0 * d->dpi)/75.0);
+
+ DrawArc( d, p, r+(trackGauge*1.5), a2, a3, 0, width2, color );
+
+ PointOnCircle(&pp0,p,r+(trackGauge*1.5),a2);
+ PointOnCircle(&pp1,p,r+(trackGauge*1.5),a3+a2);
+
+ Translate( &pp2,pp0, a2-90+45, trackGauge);
+ DrawLine( d, pp0, pp2, width2, color );
+ Translate( &pp3,pp1, a2+a3+90-45, trackGauge);
+ DrawLine( d, pp1, pp3, width2, color );
+
+ DrawArc( d, p, r-(trackGauge*1.5), a2, a3, 0, width2, color );
+
+ PointOnCircle(&pp0,p,r-(trackGauge*1.5),a2);
+ PointOnCircle(&pp1,p,r-(trackGauge*1.5),a3+a2);
+
+ Translate( &pp2,pp0, a2-90-45, trackGauge);
+ DrawLine( d, pp0, pp2, width2, color );
+ Translate( &pp3,pp1, a2+a3+90+45, trackGauge);
+ DrawLine( d, pp1, pp3, width2, color );
+
+ }
+
}
-EXPORT void DrawStraightTies(
+static void DrawStraightTies(
drawCmd_p d,
- track_p trk,
+ SCALEINX_T scaleInx,
coOrd p0,
coOrd p1,
wDrawColor color )
@@ -2357,25 +2789,24 @@ EXPORT void DrawStraightTies(
int cnt;
ANGLE_T angle;
- if ( (d->funcs->options&wDrawOptTemp) != 0 )
- return;
- if ( trk == NULL )
+ if ( (d->options&DC_SIMPLE) != 0 )
return;
- td = GetScaleTieData(GetTrkScale(trk));
- if ( (!GetTrkVisible(trk)) && drawTunnel!=DRAW_TUNNEL_SOLID )
- return;
if ( color == wDrawColorBlack )
color = tieColor;
- td = GetScaleTieData( GetTrkScale(trk) );
+ if ( scaleInx < 0 )
+ return;
+ td = GetScaleTieData( scaleInx );
len = FindDistance( p0, p1 );
len -= tieOff0+tieOff1;
angle = FindAngle( p0, p1 );
- cnt = (int)(len/td->spacing);
- if ( len-td->spacing*cnt-td->width > (td->spacing-td->width)/2 )
+ cnt = (int)floor(len/td->spacing+0.5);
+ if ( len-td->spacing*cnt-td->width > (td->spacing-td->width)/2 ) {
cnt++;
+ }
if ( cnt != 0 ) {
- dlen = len/cnt;
+ dlen = FindDistance( p0, p1 )/cnt;
+ double endsize = FindDistance( p0, p1 )-cnt*dlen-td->width;
for ( len=dlen/2; cnt; cnt--,len+=dlen ) {
Translate( &pos, p0, angle, len );
DrawTie( d, pos, angle, td->length, td->width, color, tieDrawMode==TIEDRAWMODE_SOLID );
@@ -2389,13 +2820,13 @@ EXPORT void DrawStraightTrack(
coOrd p0,
coOrd p1,
ANGLE_T angle,
- track_p trk,
- DIST_T trackGauge,
+ track_cp trk,
wDrawColor color,
long options )
{
coOrd pp0, pp1;
DIST_T scale2rail;
+ DIST_T trackGauge = GetTrkGauge(trk);
wDrawWidth width=0;
trkSeg_p segPtr;
@@ -2414,9 +2845,10 @@ EXPORT void DrawStraightTrack(
scale2rail = (d->options&DC_PRINT)?(twoRailScale*2+1):twoRailScale;
- if (options&DTS_THICK2)
- width = 2;
- if (options&DTS_THICK3)
+ width = trk ? GetTrkWidth( trk ): 0;
+ if ( d->options&DC_THICK )
+ width = 3;
+ if ( color == wDrawColorPreviewSelected || color == wDrawColorPreviewUnselected )
width = 3;
#ifdef WINDOWS
width *= (wDrawWidth)(d->dpi/mainD.dpi);
@@ -2426,21 +2858,15 @@ EXPORT void DrawStraightTrack(
#endif
LOG( log_track, 4, ( "DST( (%0.3f %0.3f) .. (%0.3f..%0.3f)\n",
p0.x, p0.y, p1.x, p1.y ) )
- if ( (options&DTS_TIES) != 0 && trk &&
- tieDrawMode!=TIEDRAWMODE_NONE &&
- d!=&mapD &&
- (d->options&DC_TIES)!=0 &&
- d->scale<scale2rail/2 )
- DrawStraightTies( d, trk, p0, p1, color );
+ if ( DoDrawTies( d, trk ) )
+ DrawStraightTies( d, GetTrkScale(trk), p0, p1, color );
if (color == wDrawColorBlack)
color = normalColor;
if ( d->scale >= scale2rail ) {
DrawLine( d, p0, p1, width, color );
- } else if (d->options&DC_QUICK) {
- DrawLine( d, p0, p1, 0, color );
} else {
if ( (d->scale <= 1 && (d->options&DC_SIMPLE)==0) || (d->options&DC_CENTERLINE)!=0
- || (d->scale <= scale2rail/2 && d->options&DC_PRINT && printCenterLines)) { // if printing two rails respect print CenterLine option
+ || (d->scale <= scale2rail/2 && ((d->options&DC_PRINT) && printCenterLines))) { // if printing two rails respect print CenterLine option
long options = d->options;
d->options |= DC_DASH;
DrawLine( d, p0, p1, 0, color );
@@ -2466,37 +2892,68 @@ LOG( log_track, 4, ( "DST( (%0.3f %0.3f) .. (%0.3f..%0.3f)\n",
}
}
}
+ if (trk && GetTrkBridge( trk ) ) {
+
+ coOrd pp2,pp3;
+ wDrawWidth width2 = (wDrawWidth)round((2.0 * d->dpi)/75.0);
+
+ Translate( &pp0, p0, angle+90, trackGauge*1.5 );
+ Translate( &pp1, p1, angle+90, trackGauge*1.5 );
+ Translate( &pp0, pp0, angle+180, trackGauge*1.5 );
+ Translate( &pp1, pp1, angle, trackGauge*1.5 );
+ DrawLine( d, pp0, pp1, width2, color );
+ Translate( &pp2,pp0, angle+90-45, trackGauge);
+ DrawLine( d, pp0, pp2, width2, color );
+ Translate( &pp3,pp1, angle+90+45, trackGauge);
+ DrawLine( d, pp1, pp3, width2, color );
+
+ Translate( &pp0, p0, angle-90, trackGauge*1.5 );
+ Translate( &pp1, p1, angle-90, trackGauge*1.5 );
+ Translate( &pp0, pp0, angle+180, trackGauge*1.5 );
+ Translate( &pp1, pp1, angle, trackGauge*1.5 );
+ DrawLine( d, pp0, pp1, width2, color );
+ Translate( &pp2,pp0, angle-90+45, trackGauge);
+ DrawLine( d, pp0, pp2, width2, color );
+ Translate( &pp3,pp1, angle-90-45, trackGauge);
+ DrawLine( d, pp1, pp3, width2, color );
+
+ }
}
EXPORT wDrawColor GetTrkColor( track_p trk, drawCmd_p d )
{
- DIST_T len, elev0, elev1;
+ DIST_T len, len1, elev0, elev1;
ANGLE_T grade = 0.0;
if ( IsTrack( trk ) && GetTrkEndPtCnt(trk) == 2 ) {
- len = GetTrkLength( trk, 0, 1 );
- if (len>0.1) {
- ComputeElev( trk, 0, FALSE, &elev0, NULL );
- ComputeElev( trk, 1, FALSE, &elev1, NULL );
- grade = fabs( (elev1-elev0)/len )*100.0;
+ if (GetTrkEndElevCachedHeight(trk,0,&elev0,&len) && GetTrkEndElevCachedHeight(trk,1,&elev1,&len1)) {
+ grade = fabs( (elev1-elev0)/(len+len1))*100.0;
+ } else {
+ len = GetTrkLength( trk, 0, 1 );
+ if (len>0.1) {
+ ComputeElev( trk, 0, FALSE, &elev0, NULL, FALSE );
+ ComputeElev( trk, 1, FALSE, &elev1, NULL, FALSE );
+ grade = fabs( (elev1-elev0)/len )*100.0;
+ }
}
}
- if ( (d->options&(DC_GROUP)) == 0 ) {
- if ( grade > GetLayoutMaxTrackGrade())
- return exceptionColor;
- if ( QueryTrack( trk, Q_EXCEPTION ) )
- return exceptionColor;
- }
- if ( (d->options&(DC_PRINT|DC_GROUP)) == 0 ) {
+ if ( (d->options&(DC_SIMPLE|DC_SEGTRACK)) != 0 )
+ return wDrawColorBlack;
+ if ( grade > GetLayoutMaxTrackGrade())
+ return exceptionColor;
+ if ( QueryTrack( trk, Q_EXCEPTION ) )
+ return exceptionColor;
+ if ( (d->options&(DC_PRINT)) == 0 ) {
if (GetTrkBits(trk)&TB_PROFILEPATH)
return profilePathColor;
if ((d->options&DC_PRINT)==0 && GetTrkSelected(trk))
return selectedColor;
}
- if ( (d->options&(DC_GROUP)) == 0 ) {
- if ( (IsTrack(trk)?(colorLayers&1):(colorLayers&2)) )
- return GetLayerColor((unsigned int)curTrackLayer);
+ if ( (IsTrack(trk)?(colorTrack):(colorDraw)) ) {
+ unsigned int iLayer = GetTrkLayer( trk );
+ if (GetLayerUseColor( iLayer ) )
+ return GetLayerColor( iLayer );
}
return wDrawColorBlack;
}
@@ -2504,9 +2961,11 @@ EXPORT wDrawColor GetTrkColor( track_p trk, drawCmd_p d )
EXPORT void DrawTrack( track_cp trk, drawCmd_p d, wDrawColor color )
{
- DIST_T scale2rail;
TRKTYP_T trkTyp;
+ // Hack for WINDOWS
+ if ( trk->bits & TB_UNDRAWN )
+ return;
trkTyp = GetTrkType(trk);
curTrackLayer = GetTrkLayer(trk);
if (d != &mapD ) {
@@ -2519,48 +2978,43 @@ EXPORT void DrawTrack( track_cp trk, drawCmd_p d, wDrawColor color )
if (color == wDrawColorBlack) {
color = GetTrkColor( trk, d );
}
+ if (color == wDrawColorPreviewSelected || color == wDrawColorPreviewUnselected ) {
+ d->options |= DC_THICK;
+ }
}
+
if (d == &mapD && !GetLayerOnMap(curTrackLayer))
return;
- if ( (IsTrack(trk)?(colorLayers&1):(colorLayers&2)) &&
+ if ( (IsTrack(trk)?(colorTrack):(colorDraw)) &&
d != &mapD && color == wDrawColorBlack )
- color = GetLayerColor((unsigned int)curTrackLayer);
- scale2rail = (d->options&DC_PRINT)?(twoRailScale*2+1):twoRailScale;
- if ( (!inDrawTracks) &&
- tieDrawMode!=TIEDRAWMODE_NONE &&
- d != &mapD &&
- d->scale<scale2rail/2 &&
- QueryTrack(trk, Q_ISTRACK) &&
- (GetTrkVisible(trk) || drawTunnel==DRAW_TUNNEL_SOLID) ) {
- d->options |= DC_TIES;
- }
+ if (GetLayerUseColor((unsigned int)curTrackLayer))
+ color = GetLayerColor((unsigned int)curTrackLayer);
trackCmds(trkTyp)->draw( trk, d, color );
- if ( (!inDrawTracks) ) {
- d->options &= ~DC_TIES;
- }
d->options &= ~DC_DASH;
+ d->options &= ~DC_THICK;
+
DrawTrackElev( trk, d, color!=wDrawColorWhite );
}
static void DrawATrack( track_cp trk, wDrawColor color )
{
- DrawMapBoundingBox( FALSE );
DrawTrack( trk, &mapD, color );
DrawTrack( trk, &mainD, color );
- DrawMapBoundingBox( TRUE );
}
EXPORT void DrawNewTrack( track_cp t )
{
+ t->bits &= ~TB_UNDRAWN;
DrawATrack( t, wDrawColorBlack );
}
EXPORT void UndrawNewTrack( track_cp t )
{
DrawATrack( t, wDrawColorWhite );
+ t->bits |= TB_UNDRAWN;
}
EXPORT int doDrawPositionIndicator = 1;
@@ -2610,7 +3064,7 @@ static void DrawUnconnectedEndPt( drawCmd_p d, coOrd p, ANGLE_T a, DIST_T trackG
Translate( &p, p, a+90.0, 0.2 );
Translate( &p0, p, a, trackGauge );
Translate( &p1, p, a-180.0, trackGauge );
- DrawLine( d, p0, p1, (drawUnconnectedEndPt>0)?4:0, (drawUnconnectedEndPt>1)?exceptionColor:color );
+ DrawLine( d, p0, p1, (drawUnconnectedEndPt>0)?4:0, (color==wDrawColorWhite)?color:(drawUnconnectedEndPt>1)?exceptionColor:color );
}
}
@@ -2643,7 +3097,7 @@ EXPORT void DrawEndElev( drawCmd_p d, track_p trk, EPINX_T ep, wDrawColor color
case ELEV_GRADE:
if ( color == wDrawColorWhite ) {
elev0 = grade = elev->u.height;
- } else if ( !ComputeElev( trk, ep, FALSE, &elev0, &grade ) ) {
+ } else if ( !ComputeElev( trk, ep, FALSE, &elev0, &grade, FALSE ) ) {
elev0 = grade = 0;
gradeOk = FALSE;
}
@@ -2651,7 +3105,7 @@ EXPORT void DrawEndElev( drawCmd_p d, track_p trk, EPINX_T ep, wDrawColor color
elevStr = FormatDistance(elev0);
elev->u.height = elev0;
} else if (gradeOk) {
- sprintf( message, "%0.1f%%", fabs(grade*100.0) );
+ sprintf( message, "%0.1f%%", round(fabs(grade*100.0)*10)/10 );
elevStr = message;
a = GetTrkEndAngle( trk, ep );
style = BOX_ARROW;
@@ -2704,16 +3158,16 @@ EXPORT void DrawEndPt(
wDrawWidth width;
wDrawWidth width2;
- // line width for the tunnel portal, make sure it is rounded correctly
- width2 = (wDrawWidth)round((2.0 * d->dpi)/75.0);
- if (d->funcs->options&wDrawOptTemp)
+ if ( (d->options & (DC_SIMPLE|DC_SEGTRACK)) != 0)
return;
if ( trk && QueryTrack( trk, Q_NODRAWENDPT ) )
return;
-
if (trk == NULL || ep < 0)
return;
+ // line width for the tunnel portal, make sure it is rounded correctly
+ width2 = (wDrawWidth)round((2.0 * d->dpi)/75.0);
+
if (color == wDrawColorBlack)
color = normalColor;
@@ -2734,17 +3188,20 @@ EXPORT void DrawEndPt(
return;
sepBoundary = FALSE;
- if ((d->options&DC_PRINT)==0 && importTrack == NULL && GetTrkSelected(trk) && (!GetTrkSelected(trk1))) {
+ if ( inDrawTracks && (d->options&DC_PRINT)==0 && importTrack == NULL && GetTrkSelected(trk) && (!GetTrkSelected(trk1))) {
DIST_T len;
len = trackGauge*2.0;
if (len < 0.10*d->scale)
len = 0.10*d->scale;
+ long oldOptions = d->options;
+ d->options &= ~DC_NOTSOLIDLINE;
Translate( &p0, p, a+45, len );
Translate( &p1, p, a+225, len );
- DrawLine( &tempD, p0, p1, 0, selectedColor );
+ DrawLine( d, p0, p1, 2, selectedColor );
Translate( &p0, p, a-45, len );
Translate( &p1, p, a-225, len );
- DrawLine( &tempD, p0, p1, 0, selectedColor );
+ DrawLine( d, p0, p1, 2, selectedColor );
+ d->options = oldOptions;
sepBoundary = TRUE;
} else if ((d->options&DC_PRINT)==0 && importTrack == NULL && (!GetTrkSelected(trk)) && GetTrkSelected(trk1)) {
sepBoundary = TRUE;
@@ -2831,7 +3288,6 @@ EXPORT void DrawTracks( drawCmd_p d, DIST_T scale, coOrd orig, coOrd size )
inDrawTracks = TRUE;
InfoCount( 0 );
- d->options |= DC_TIES;
TRK_ITERATE( trk ) {
if ( (d->options&DC_PRINT) != 0 &&
wPrintQuit() ) {
@@ -2854,7 +3310,6 @@ EXPORT void DrawTracks( drawCmd_p d, DIST_T scale, coOrd orig, coOrd size )
if (count%10 == 0)
InfoCount( count );
}
- d->options &= ~DC_TIES;
if (d == &mainD) {
for (inx=1; inx<trackCmds_da.cnt; inx++)
@@ -2868,14 +3323,6 @@ EXPORT void DrawTracks( drawCmd_p d, DIST_T scale, coOrd orig, coOrd size )
}
-EXPORT void RedrawLayer( unsigned int l, BOOL_T draw )
-{
- MainRedraw();
- MapRedraw();
-
-}
-
-
EXPORT void DrawSelectedTracks( drawCmd_p d )
{
track_cp trk;
@@ -2899,8 +3346,6 @@ EXPORT void DrawSelectedTracks( drawCmd_p d )
EXPORT void HilightElevations( BOOL_T hilight )
{
- static long lastRedraw = -1;
- static BOOL_T lastHilight = FALSE;
track_p trk, trk1;
EPINX_T ep;
int mode;
@@ -2908,12 +3353,6 @@ EXPORT void HilightElevations( BOOL_T hilight )
coOrd pos;
DIST_T radius;
- if (currRedraw > lastRedraw) {
- lastRedraw = currRedraw;
- lastHilight = FALSE;
- }
- if (lastHilight == hilight)
- return;
radius = 0.05*mainD.scale;
if ( radius < trackGauge/2.0 )
radius = trackGauge/2.0;
@@ -2937,25 +3376,20 @@ EXPORT void HilightElevations( BOOL_T hilight )
}
}
}
- lastHilight = hilight;
}
EXPORT void HilightSelectedEndPt( BOOL_T show, track_p trk, EPINX_T ep )
{
- static BOOL_T lastShow = FALSE;
- static long lastRedraw = -1;
coOrd pos;
- if (trk == NULL)
- return;
- if (currRedraw > lastRedraw) {
- lastRedraw = currRedraw;
- lastShow = FALSE;
- }
- if (lastShow != show) {
+ if (!trk || (ep==-1)) return;
+ pos = GetTrkEndPos( trk, ep );
+ if ( show == TRUE ) {
pos = GetTrkEndPos( trk, ep );
DrawFillCircle( &tempD, pos, 0.10*mainD.scale, selectedColor );
- lastShow = show;
+ } else {
+ pos = GetTrkEndPos( trk, ep );
+ DrawFillCircle( &tempD, pos, 0.10*mainD.scale, wDrawColorWhite );
}
}
diff --git a/app/bin/track.h b/app/bin/track.h
index 7485730..4e24280 100644
--- a/app/bin/track.h
+++ b/app/bin/track.h
@@ -23,6 +23,7 @@
#ifndef TRACK_H
#define TRACK_H
+#include <string.h>
#include "common.h"
#include "draw.h"
#include "misc2.h"
@@ -34,6 +35,8 @@ typedef struct track_t * track_p;
typedef struct track_t * track_cp;
extern track_p tempTrack;
extern wIndex_t trackCount;
+extern long colorTrack;
+extern long colorDraw;
extern long drawTunnel;
extern long drawEndPtV;
extern long drawUnconnectedEndPt;
@@ -71,13 +74,16 @@ typedef enum { curveTypeNone, curveTypeCurve, curveTypeStraight, curveTypeBezier
#define PARAMS_1ST_JOIN (0)
#define PARAMS_2ND_JOIN (1)
#define PARAMS_EXTEND (2)
-#define PARAMS_PARALLEL (3)
+#define PARAMS_NODES (3)
#define PARAMS_BEZIER (4) //Not used (yet)
#define PARAMS_CORNU (5) //Called to get end characteristics
+#define PARAMS_TURNOUT (6)
+#define PARAMS_LINE (7) //Called on Lines
typedef struct {
curveType_e type; //Straight, Curve, Bezier, Cornu
EPINX_T ep; //End point that is nearby pos
+ dynArr_t nodes; //Array of nodes -> PARAMS_PARALLEL only
DIST_T len; //Length of track
ANGLE_T angle; //Angle at end of track
coOrd lineOrig; //Start of straight
@@ -95,6 +101,7 @@ typedef struct {
coOrd cornuCenter[2]; //Center at Cornu Ends
coOrd ttcenter; //Turntable
DIST_T ttradius; //Turntable
+ coOrd centroid; //Turnout
} trackParams_t;
@@ -102,7 +109,6 @@ typedef struct {
#define Q_IGNORE_EASEMENT_ON_EXTEND (2)
#define Q_REFRESH_JOIN_PARAMS_ON_MOVE (3)
#define Q_CANNOT_PLACE_TURNOUT (4)
-#define Q_DONT_DRAW_ENDPOINT (5)
#define Q_DRAWENDPTV_1 (6)
#define Q_CAN_PARALLEL (7)
#define Q_CAN_MODIFYRADIUS (8)
@@ -122,6 +128,14 @@ typedef struct {
#define Q_CAN_ADD_ENDPOINTS (22) // Is T_TURNTABLE
#define Q_HAS_VARIABLE_ENDPOINTS (23) // Is Helix or Circle
#define Q_CORNU_CAN_MODIFY (24) // can be modified by CORNU MODIFY
+#define Q_ISTRAIN (25)
+#define Q_IS_POLY (26)
+#define Q_IS_DRAW (27)
+#define Q_IS_TEXT (28)
+#define Q_IS_ACTIVATEABLE (29)
+#define Q_IS_STRUCTURE (30)
+#define Q_IS_TURNOUT (31)
+#define Q_GET_NODES (32)
typedef struct {
track_p trk; // IN Current Track OUT Next Track
@@ -139,7 +153,7 @@ typedef struct {
void (*describe)( track_p, char * line, CSIZE_T len );
void (*delete)( track_p );
BOOL_T (*write)( track_p, FILE * );
- void (*read)( char * );
+ BOOL_T (*read)( char * );
void (*move)( track_p, coOrd );
void (*rotate)( track_p, coOrd, ANGLE_T );
void (*rescale)( track_p, FLOAT_T );
@@ -149,7 +163,7 @@ typedef struct {
BOOL_T (*traverse)( traverseTrack_p, DIST_T * );
BOOL_T (*enumerate)( track_p );
void (*redraw)( void );
- BOOL_T (*trim)( track_p, EPINX_T, DIST_T );
+ BOOL_T (*trim)( track_p, EPINX_T, DIST_T, coOrd endpos, ANGLE_T angle, DIST_T endradius, coOrd endcenter );
BOOL_T (*merge)( track_p, EPINX_T, track_p, EPINX_T );
STATUS_T (*modify)( track_p, wAction_t, coOrd );
DIST_T (*getLength)( track_p );
@@ -161,11 +175,13 @@ typedef struct {
void (*drawPositionIndicator)( track_p, wDrawColor );
void (*advancePositionIndicator)( track_p, coOrd, coOrd *, ANGLE_T * );
BOOL_T (*checkTraverse)( track_p, coOrd );
- BOOL_T (*makeParallel)( track_p, coOrd, DIST_T, track_p *, coOrd *, coOrd * );
+ BOOL_T (*makeParallel)( track_p, coOrd, DIST_T, DIST_T, track_p *, coOrd *, coOrd *, BOOL_T );
void (*drawDesc)( track_p, drawCmd_p, wDrawColor );
BOOL_T (*rebuildSegs)(track_p);
BOOL_T (*replayData)(track_p, void *,long );
BOOL_T (*storeData)(track_p, void **,long *);
+ void (*activate)(track_p);
+ wBool_t (*compare)( track_cp, track_cp );
} trackCmd_t;
@@ -180,6 +196,9 @@ typedef struct {
DIST_T height;
char * name;
} u;
+ BOOL_T cacheSet;
+ double cachedElev;
+ double cachedLength;
} elev_t;
#define EPOPT_GAPPED (1L<<0)
typedef struct {
@@ -191,12 +210,13 @@ typedef struct {
long option;
} trkEndPt_t, * trkEndPt_p;
-dynArr_t tempEndPts_da;
+extern dynArr_t tempEndPts_da;
#define tempEndPts(N) DYNARR_N( trkEndPt_t, tempEndPts_da, N )
-typedef enum { FREEFORM, RECTANGLE
+typedef enum { FREEFORM, RECTANGLE, POLYLINE
} PolyType_e;
+
typedef struct {
char type;
wDrawColor color;
@@ -236,11 +256,12 @@ typedef struct {
ANGLE_T angle;
wFont_p fontP;
FONTSIZE_T fontSize;
+ BOOL_T boxed;
char * string;
} t;
struct {
int cnt;
- coOrd * pts;
+ pts_t * pts;
coOrd orig;
ANGLE_T angle;
PolyType_e polyType;
@@ -271,11 +292,12 @@ typedef struct {
#define IsSegTrack( S ) ( (S)->type == SEG_STRTRK || (S)->type == SEG_CRVTRK || (S)->type == SEG_JNTTRK || (S)->type == SEG_BEZTRK)
-dynArr_t tempSegs_da;
+extern dynArr_t tempSegs_da;
+
#define tempSegs(N) DYNARR_N( trkSeg_t, tempSegs_da, N )
-char tempSpecial[4096];
-char tempCustom[4096];
+extern char tempSpecial[4096];
+extern char tempCustom[4096];
void ComputeCurvedSeg(
trkSeg_p s,
@@ -396,6 +418,7 @@ void JointSegProc( segProc_e, trkSeg_p, segProcData_p );
void BezierSegProc( segProc_e, trkSeg_p, segProcData_p ); //Used in Cornu join
void CleanSegs( dynArr_t *);
void CopyPoly(trkSeg_p seg_p, wIndex_t segCnt);
+wBool_t CompareSegs( trkSeg_p, int, trkSeg_p, int );
/* debug.c */
void SetDebug( char * );
@@ -408,7 +431,12 @@ void SetDebug( char * );
#define TB_SHRTPATH (1<<5)
#define TB_HIDEDESC (1<<6)
#define TB_CARATTACHED (1<<7)
-#define TB_TEMPBITS (TB_PROFILEPATH|TB_PROCESSED)
+#define TB_NOTIES (1<<8)
+#define TB_BRIDGE (1<<9)
+#define TB_SELREDRAW (1<<10)
+// Track has been undrawn, don't draw it on Redraw
+#define TB_UNDRAWN (1<<11)
+#define TB_TEMPBITS (TB_PROFILEPATH|TB_PROCESSED|TB_UNDRAWN)
/* track.c */
#ifdef FASTTRACK
@@ -473,14 +501,21 @@ BOOL_T IsTrackDeleted( track_p );
#define GetTrkSelected(T) (GetTrkBits(T)&TB_SELECTED)
#define GetTrkVisible(T) (GetTrkBits(T)&TB_VISIBLE)
+#define GetTrkNoTies(T) (GetTrkBits(T)&TB_NOTIES)
+#define GetTrkBridge(T) (GetTrkBits(T)&TB_BRIDGE)
#define SetTrkVisible(T,V) ((V)?SetTrkBits(T,TB_VISIBLE):ClrTrkBits(T,TB_VISIBLE))
+#define SetTrkNoTies(T,V) ((V)?SetTrkBits(T,TB_NOTIES):ClrTrkBits(T,TB_NOTIES))
+#define SetTrkBridge(T,V) ((V)?SetTrkBits(T,TB_BRIDGE):ClrTrkBits(T,TB_BRIDGE))
int ClrAllTrkBits( int );
+int ClrAllTrkBitsRedraw( int, wBool_t );
void GetTrkEndElev( track_p trk, EPINX_T e, int *option, DIST_T *height );
void SetTrkEndElev( track_p, EPINX_T, int, DIST_T, char * );
int GetTrkEndElevMode( track_p, EPINX_T );
int GetTrkEndElevUnmaskedMode( track_p, EPINX_T );
DIST_T GetTrkEndElevHeight( track_p, EPINX_T );
+BOOL_T GetTrkEndElevCachedHeight (track_p trk, EPINX_T e, DIST_T *height, DIST_T *length);
+void SetTrkEndElevCachedHeight ( track_p trk, EPINX_T e, DIST_T height, DIST_T length);
char * GetTrkEndElevStation( track_p, EPINX_T );
#define EndPtIsDefinedElev( T, E ) (GetTrkEndElevMode(T,E)==ELEV_DEF)
#define EndPtIsIgnoredElev( T, E ) (GetTrkEndElevMode(T,E)==ELEV_IGNORE)
@@ -492,9 +527,10 @@ void ClearElevPath( void );
BOOL_T GetTrkOnElevPath( track_p, DIST_T * elev );
void SetTrkLayer( track_p, int );
BOOL_T CheckTrackLayer( track_p );
+BOOL_T CheckTrackLayerSilent(track_p);
void CopyAttributes( track_p, track_p );
-#define GetTrkGauge( T ) GetScaleTrackGauge(GetTrkScale(T))
+DIST_T GetTrkGauge( track_cp );
#define GetTrkScaleName( T ) GetScaleName(GetTrkScale(T))
void SetTrkEndPtCnt( track_p, EPINX_T );
BOOL_T WriteEndPt( FILE *, track_cp, EPINX_T );
@@ -506,11 +542,56 @@ void AuditTracks( char *, ... );
void CheckTrackLength( track_cp );
track_p NewTrack( wIndex_t, TRKTYP_T, EPINX_T, CSIZE_T );
void DescribeTrack( track_cp, char *, CSIZE_T );
+void ActivateTrack( track_cp );
EPINX_T GetEndPtConnectedToMe( track_p, track_p );
EPINX_T GetNearestEndPtConnectedToMe( track_p, track_p, coOrd);
void SetEndPts( track_p, EPINX_T );
BOOL_T DeleteTrack( track_p, BOOL_T );
+#define REGRESS_CHECK_POS( TITLE, P1, P2, FIELD ) \
+ if ( ! IsPosClose( P1->FIELD, P2->FIELD ) ) { \
+ sprintf( cp, TITLE ": Actual [%0.3f %0.3f], Expected [%0.3f %0.3f]\n", \
+ P1->FIELD.x, P1->FIELD.y, \
+ P2->FIELD.x, P2->FIELD.y ); \
+ return FALSE; \
+ }
+#define REGRESS_CHECK_DIST( TITLE, P1, P2, FIELD ) \
+ if ( ! IsDistClose( P1->FIELD, P2->FIELD ) ) { \
+ sprintf( cp, TITLE ": Actual %0.3f, Expected %0.3f\n", \
+ P1->FIELD, P2->FIELD ); \
+ return FALSE; \
+ }
+#define REGRESS_CHECK_WIDTH( TITLE, P1, P2, FIELD ) \
+ if ( ! IsWidthClose( P1->FIELD, P2->FIELD ) ) { \
+ sprintf( cp, TITLE ": Actual %0.3f, Expected %0.3f\n", \
+ P1->FIELD, P2->FIELD ); \
+ return FALSE; \
+ }
+#define REGRESS_CHECK_ANGLE( TITLE, P1, P2, FIELD ) \
+ if ( ! IsAngleClose( P1->FIELD, P2->FIELD ) ) { \
+ sprintf( cp, TITLE ": Actual %0.3f , Expected %0.3f\n", \
+ P1->FIELD, P2->FIELD ); \
+ return FALSE; \
+ }
+#define REGRESS_CHECK_INT( TITLE, P1, P2, FIELD ) \
+ if ( P1->FIELD != P2->FIELD ) { \
+ sprintf( cp, TITLE ": Actual %d, Expected %d\n", \
+ (int)(P1->FIELD), (int)(P2->FIELD) ); \
+ return FALSE; \
+ }
+#define REGRESS_CHECK_COLOR( TITLE, P1, P2, FIELD ) \
+ if ( ! IsColorClose(P1->FIELD, P2->FIELD) ) { \
+ sprintf( cp, TITLE ": Actual %6x, Expected %6x\n", \
+ (int)wDrawGetRGB(P1->FIELD), (int)wDrawGetRGB(P2->FIELD) ); \
+ return FALSE; \
+ }
+wBool_t IsPosClose( coOrd, coOrd );
+wBool_t IsAngleClose( ANGLE_T, ANGLE_T );
+wBool_t IsDistClose( DIST_T, DIST_T );
+wBool_t IsWidthClose( DIST_T, DIST_T );
+wBool_t IsColorClose( wDrawColor, wDrawColor );
+wBool_t CompareTrack( track_cp, track_cp );
+
void MoveTrack( track_p, coOrd );
void RotateTrack( track_p, coOrd, ANGLE_T );
void RescaleTrack( track_p, FLOAT_T, coOrd );
@@ -523,19 +604,18 @@ EPINX_T GetNextTrkOnPath( track_p, EPINX_T );
#define FDE_UDF 1
#define FDE_END 2
int FindDefinedElev( track_p, EPINX_T, int, BOOL_T, DIST_T *, DIST_T *);
-BOOL_T ComputeElev( track_p, EPINX_T, BOOL_T, DIST_T *, DIST_T * );
+BOOL_T ComputeElev( track_p trk, EPINX_T ep, BOOL_T on_path, DIST_T * elev, DIST_T * grade, BOOL_T force);
#define DTS_LEFT (1<<0)
#define DTS_RIGHT (1<<1)
-#define DTS_THICK2 (1<<2)
-#define DTS_THICK3 (1<<3)
-#define DTS_TIES (1<<4)
#define DTS_NOCENTER (1<<5)
+#define DTS_DOT (1<<7)
+#define DTS_DASH (1<<8)
+#define DTS_DASHDOT (1<<9)
+#define DTS_DASHDOTDOT (1<<10)
-void DrawCurvedTies( drawCmd_p, track_p, coOrd, DIST_T, ANGLE_T, ANGLE_T, wDrawColor );
-void DrawCurvedTrack( drawCmd_p, coOrd, DIST_T, ANGLE_T, ANGLE_T, coOrd, coOrd, track_p, DIST_T, wDrawColor, long );
-void DrawStraightTies( drawCmd_p, track_p, coOrd, coOrd, wDrawColor );
-void DrawStraightTrack( drawCmd_p, coOrd, coOrd, ANGLE_T, track_p, DIST_T, wDrawColor, long );
+void DrawCurvedTrack( drawCmd_p, coOrd, DIST_T, ANGLE_T, ANGLE_T, coOrd, coOrd, track_cp, wDrawColor, long );
+void DrawStraightTrack( drawCmd_p, coOrd, coOrd, ANGLE_T, track_cp, wDrawColor, long );
ANGLE_T GetAngleAtPoint( track_p, coOrd, EPINX_T *, EPINX_T * );
DIST_T GetTrkDistance( track_cp, coOrd *);
@@ -551,24 +631,23 @@ void DrawEndElev( drawCmd_p, track_p, EPINX_T, wDrawColor );
wDrawColor GetTrkColor( track_p, drawCmd_p );
void DrawTrack( track_cp, drawCmd_p, wDrawColor );
void DrawTracks( drawCmd_p, DIST_T, coOrd, coOrd );
-void RedrawLayer( unsigned int, BOOL_T );
void DrawNewTrack( track_cp );
void DrawOneTrack( track_cp, drawCmd_p );
void UndrawNewTrack( track_cp );
void DrawSelectedTracks( drawCmd_p );
void HilightElevations( BOOL_T );
void HilightSelectedEndPt( BOOL_T, track_p, EPINX_T );
-DIST_T EndPtDescriptionDistance( coOrd, track_p, EPINX_T );
+DIST_T EndPtDescriptionDistance( coOrd, track_p, EPINX_T, coOrd *, BOOL_T show_hidden, BOOL_T * hidden );
STATUS_T EndPtDescriptionMove( track_p, EPINX_T, wAction_t, coOrd );
track_p FindTrack( TRKINX_T );
void ResolveIndex( void );
void RenumberTracks( void );
BOOL_T ReadTrack( char * );
-BOOL_T WriteTracks( FILE * );
-BOOL_T ExportTracks( FILE * );
+BOOL_T WriteTracks( FILE *, wBool_t );
+BOOL_T ExportTracks( FILE * , coOrd *);
void ImportStart( void );
-void ImportEnd( void );
+void ImportEnd( coOrd , wBool_t, wBool_t);
void FreeTrack( track_p );
void ClearTracks( void );
BOOL_T TrackIterate( track_p * );
@@ -581,7 +660,7 @@ void SaveCarState( void );
void RestoreCarState( void );
TRKTYP_T InitObject( trackCmd_t* );
-void ConnectTracks( track_p, EPINX_T, track_p, EPINX_T );
+int ConnectTracks( track_p, EPINX_T, track_p, EPINX_T );
BOOL_T ReconnectTrack( track_p, EPINX_T, track_p, EPINX_T );
void DisconnectTracks( track_p, EPINX_T, track_p, EPINX_T );
BOOL_T ConnectAbuttingTracks( track_p, EPINX_T, track_p, EPINX_T );
@@ -589,9 +668,10 @@ BOOL_T ConnectTurntableTracks(track_p, EPINX_T, track_p, EPINX_T );
BOOL_T SplitTrack( track_p, coOrd, EPINX_T, track_p *leftover, BOOL_T );
BOOL_T TraverseTrack( traverseTrack_p, DIST_T * );
BOOL_T RemoveTrack( track_p*, EPINX_T*, DIST_T* );
-BOOL_T TrimTrack( track_p, EPINX_T, DIST_T );
+BOOL_T TrimTrack( track_p, EPINX_T, DIST_T, coOrd pos, ANGLE_T angle, DIST_T radius, coOrd center);
BOOL_T MergeTracks( track_p, EPINX_T, track_p, EPINX_T );
STATUS_T ExtendStraightFromOrig( track_p, wAction_t, coOrd );
+STATUS_T ExtendTrackFromOrig( track_p, wAction_t, coOrd );
STATUS_T ModifyTrack( track_p, wAction_t, coOrd );
BOOL_T GetTrackParams( int, track_p, coOrd, trackParams_t* );
BOOL_T MoveEndPt( track_p *, EPINX_T *, coOrd, DIST_T );
@@ -616,12 +696,11 @@ void FlipTrack( track_p, coOrd, ANGLE_T );
void DrawPositionIndicators( void );
void AdvancePositionIndicator( track_p, coOrd, coOrd *, ANGLE_T * );
-BOOL_T MakeParallelTrack( track_p, coOrd, DIST_T, track_p *, coOrd *, coOrd * );
-
+BOOL_T MakeParallelTrack( track_p, coOrd, DIST_T, DIST_T, track_p *, coOrd *, coOrd * , BOOL_T);
/* cmisc.c */
wIndex_t describeCmdInx;
-typedef enum { DESC_NULL, DESC_POS, DESC_FLOAT, DESC_ANGLE, DESC_LONG, DESC_COLOR, DESC_DIM, DESC_PIVOT, DESC_LAYER, DESC_STRING, DESC_TEXT, DESC_LIST, DESC_EDITABLELIST } descType;
+typedef enum { DESC_NULL, DESC_POS, DESC_FLOAT, DESC_ANGLE, DESC_LONG, DESC_COLOR, DESC_DIM, DESC_PIVOT, DESC_LAYER, DESC_STRING, DESC_TEXT, DESC_LIST, DESC_EDITABLELIST, DESC_BOXED } descType;
#define DESC_RO (1<<0)
#define DESC_IGNORE (1<<1)
#define DESC_NOREDRAW (1<<2)
@@ -647,10 +726,11 @@ typedef void (*descUpdate_t)( track_p, int, descData_p, BOOL_T );
void DoDescribe( char *, track_p, descData_p, descUpdate_t );
void DescribeCancel( void );
BOOL_T UpdateDescStraight( int, int, int, int, int, descData_p, long );
+STATUS_T CmdDescribe(wAction_t,coOrd);
/* compound.c */
-DIST_T CompoundDescriptionDistance( coOrd, track_p );
+DIST_T CompoundDescriptionDistance( coOrd, track_p, coOrd *, BOOL_T, BOOL_T * );
STATUS_T CompoundDescriptionMove( track_p, wAction_t, coOrd );
/* elev.c */
@@ -659,10 +739,10 @@ STATUS_T CompoundDescriptionMove( track_p, wAction_t, coOrd );
#define ELEV_ISLAND (1)
#define ELEV_ALONE (0)
-long oldElevationEvaluation;
+extern long oldElevationEvaluation;
EPINX_T GetNextTrkOnPath( track_p trk, EPINX_T ep );
int FindDefinedElev( track_p, EPINX_T, int, BOOL_T, DIST_T *, DIST_T * );
-BOOL_T ComputeElev( track_p, EPINX_T, BOOL_T, DIST_T *, DIST_T * );
+BOOL_T ComputeElev( track_p, EPINX_T, BOOL_T, DIST_T *, DIST_T *, BOOL_T );
void RecomputeElevations( void );
void UpdateAllElevations( void );
DIST_T GetElevation( track_p );
@@ -672,11 +752,22 @@ void UpdateTrkEndElev( track_p, EPINX_T, int, DIST_T, char * );
void DrawTrackElev( track_p, drawCmd_p, BOOL_T );
/* cdraw.c */
+typedef enum {DRAWLINESOLID,
+ DRAWLINEDASH,
+ DRAWLINEDOT,
+ DRAWLINEDASHDOT,
+ DRAWLINEDASHDOTDOT,
+ DRAWLINECENTER,
+ DRAWLINEPHANTOM } drawLineType_e;
track_p MakeDrawFromSeg( coOrd, ANGLE_T, trkSeg_p );
+track_p MakePolyLineFromSegs( coOrd, ANGLE_T, dynArr_t * );
+void DrawOriginAnchor(track_p);
BOOL_T OnTableEdgeEndPt( track_p, coOrd * );
BOOL_T GetClosestEndPt( track_p, coOrd * );
BOOL_T ReadTableEdge( char * );
BOOL_T ReadText( char * );
+void SetLineType( track_p trk, int width );
+void MenuMode(int );
/* chotbar.c */
extern DIST_T curBarScale;
@@ -685,7 +776,7 @@ void HideHotBar( void );
void LayoutHotBar ( void *);
typedef enum { HB_SELECT, HB_DRAW, HB_LISTTITLE, HB_BARTITLE, HB_FULLTITLE } hotBarProc_e;
typedef char * (*hotBarProc_t)( hotBarProc_e, void *, drawCmd_p, coOrd * );
-void AddHotBarElement( char *, coOrd, coOrd, BOOL_T, DIST_T, void *, hotBarProc_t );
+void AddHotBarElement( char *, coOrd, coOrd, BOOL_T, BOOL_T, DIST_T, void *, hotBarProc_t );
void HotBarCancel( void );
void AddHotBarTurnouts( void );
void AddHotBarStructures( void );
diff --git a/app/bin/trackx.h b/app/bin/trackx.h
index 9f24e7c..50fda1d 100644
--- a/app/bin/trackx.h
+++ b/app/bin/trackx.h
@@ -40,7 +40,7 @@ typedef struct track_t {
BOOL_T new:1;
unsigned int width:2;
unsigned int elevMode:2;
- unsigned int bits:9;
+ unsigned int bits:12;
EPINX_T endCnt;
trkEndPt_p endPt;
struct { float x; float y; } lo, hi;
diff --git a/app/bin/trknote.c b/app/bin/trknote.c
new file mode 100644
index 0000000..f27cf2e
--- /dev/null
+++ b/app/bin/trknote.c
@@ -0,0 +1,720 @@
+/** \file trknote.c
+ * Track notes "postits"
+ */
+
+/* XTrkCad - Model Railroad CAD
+ * Copyright (C) 2005 Dave Bullis, 2018 Martin Fischer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <stdint.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "cundo.h"
+#include "custom.h"
+#include "dynstring.h"
+#include "fileio.h"
+#include "i18n.h"
+#include "misc.h"
+#include "note.h"
+#include "param.h"
+#include "track.h"
+#include "include/utf8convert.h"
+#include "utility.h"
+
+extern BOOL_T inDescribeCmd;
+extern descData_t noteDesc[];
+
+static TRKTYP_T T_NOTE = -1;
+
+static wDrawBitMap_p note_bm, link_bm, document_bm;
+
+typedef struct {
+ char **xpm;
+ int OP;
+ char * shortName;
+ char * cmdName;
+ char * helpKey;
+ long acclKey;
+} trknoteData_t;
+
+#include "bitmaps/sticky-note-text.xpm"
+#include "bitmaps/sticky-note-chain.xpm"
+#include "bitmaps/sticky-note-clip.xpm"
+
+static trknoteData_t noteTypes[] = {
+ { sticky_note_text_bits, OP_NOTETEXT, N_("Note"), N_("Comment"), "cmdTextNote", 0L },
+ { sticky_note_chain_bits, OP_NOTELINK, N_("Link"), N_("Weblink"), "cmdLinkNote", 0L },
+ { sticky_note_clip_bits, OP_NOTEFILE, N_("Document"), N_("Document"), "cmdFileNote", 0L },
+};
+
+static long curNoteType;
+
+static unsigned layerSave;
+static coOrd posSave;
+
+#define NOTETYPESCOUNT (sizeof(noteTypes)/sizeof(trknoteData_t))
+
+
+/*****************************************************************************
+ * NOTE OBJECT
+ */
+
+static track_p NewNote(wIndex_t index, coOrd p, enum noteCommands command )
+{
+ track_p t;
+ struct extraDataNote * xx;
+ t = NewTrack(index, T_NOTE, 0, sizeof *xx);
+ xx = (struct extraDataNote *)GetTrkExtraData(t);
+ xx->pos = p;
+ xx->op = command;
+ SetBoundingBox(t, p, p);
+ return t;
+}
+
+/**
+ * Draw the icon for a note into the drawing area
+ *
+ * \param t IN note
+ * \param d IN drawing environment
+ * \param color IN color for ico
+ */
+
+static void DrawNote(track_p t, drawCmd_p d, wDrawColor color)
+{
+ struct extraDataNote *xx = (struct extraDataNote *)GetTrkExtraData(t);
+ coOrd p[4];
+
+ if (d->scale >= 16) {
+ return;
+ }
+ if ((d->options & DC_SIMPLE)) {
+ //while the icon is moved, draw a square
+ //because CmdMove draws all selected object into tempSeg and
+ //tempSegDrawFuncs doesn't have a BitMap drawing func
+ DIST_T dist;
+ dist = 0.1*mainD.scale;
+ p[0].x = p[1].x = xx->pos.x - dist;
+ p[2].x = p[3].x = xx->pos.x + dist;
+ p[1].y = p[2].y = xx->pos.y - dist;
+ p[3].y = p[0].y = xx->pos.y + dist;
+ DrawLine(d, p[0], p[1], 0, color);
+ DrawLine(d, p[1], p[2], 0, color);
+ DrawLine(d, p[2], p[3], 0, color);
+ DrawLine(d, p[3], p[0], 0, color);
+ } else {
+ // draw a bitmap for static object
+ wDrawBitMap_p bm;
+
+ if (xx->op == OP_NOTELINK ||(inDescribeCmd && curNoteType == OP_NOTELINK)) {
+ bm = link_bm;
+ } else {
+ if (xx->op == OP_NOTEFILE || (inDescribeCmd && curNoteType == OP_NOTEFILE)) {
+ bm = document_bm;
+ } else {
+ bm = note_bm;
+ }
+ }
+ DrawBitMap(d, xx->pos, bm, color);
+ }
+}
+
+static DIST_T DistanceNote(track_p t, coOrd * p)
+{
+ struct extraDataNote *xx = (struct extraDataNote *)GetTrkExtraData(t);
+ DIST_T d;
+ d = FindDistance(*p, xx->pos);
+
+ if (d < 3.0*(mainD.scale/12.0)) {
+ return d;
+ }
+
+ return 100000.0;
+}
+
+static void DeleteNote(track_p t)
+{
+ struct extraDataNote *xx = (struct extraDataNote *)GetTrkExtraData(t);
+
+ switch (xx->op) {
+ case OP_NOTETEXT:
+ if (xx->noteData.text) {
+ MyFree(xx->noteData.text);
+ }
+ break;
+ case OP_NOTEFILE:
+ if (xx->noteData.fileData.path) {
+ MyFree(xx->noteData.fileData.path);
+ }
+ if (xx->noteData.fileData.title) {
+ MyFree(xx->noteData.fileData.title);
+ }
+ break;
+ case OP_NOTELINK:
+ if (xx->noteData.linkData.title) {
+ MyFree(xx->noteData.linkData.title);
+ }
+ if (xx->noteData.linkData.url) {
+ MyFree(xx->noteData.linkData.url);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void
+NoteStateSave(track_p trk)
+{
+ struct extraDataNote *xx = (struct extraDataNote *)GetTrkExtraData(trk);
+ layerSave = GetTrkLayer(trk);
+ posSave = xx->pos;
+}
+
+/**
+* Handle Cancel button: restore old values for layer and position
+*/
+
+void
+CommonCancelNote(track_p trk)
+{
+ if (inDescribeCmd) {
+ struct extraDataNote *xx = (struct extraDataNote *)GetTrkExtraData(trk);
+ xx->layer = layerSave;
+ xx->pos = posSave;
+ SetBoundingBox(trk, xx->pos, xx->pos);
+ }
+}
+
+static void
+CommonUpdateNote(track_p trk, int inx, struct extraDataNote *noteData )
+{
+ struct extraDataNote *xx = (struct extraDataNote *)GetTrkExtraData(trk);
+
+ switch (inx) {
+ case OR_NOTE:
+ xx->pos = noteData->pos;
+ SetBoundingBox(trk, xx->pos, xx->pos);
+ break;
+ case LY_NOTE:
+ SetTrkLayer(trk, noteData->layer);
+ break;
+ case CANCEL_NOTE:
+ CommonCancelNote(trk);
+ break;
+ }
+}
+
+
+void UpdateFile(struct extraDataNote *noteUIData, int inx, BOOL_T needUndoStart)
+{
+ track_p trk = noteUIData->trk;
+ struct extraDataNote *xx = (struct extraDataNote *)GetTrkExtraData(trk);
+
+ switch (inx) {
+ case OR_NOTE:
+ case LY_NOTE:
+ case CANCEL_NOTE:
+ CommonUpdateNote(trk, inx, noteUIData);
+ break;
+ case OK_FILE:
+ {
+ DeleteNote(trk);
+ xx->noteData.fileData.path = MyStrdup(noteUIData->noteData.fileData.path);
+ xx->noteData.fileData.title = MyStrdup(noteUIData->noteData.fileData.title);
+ //result = malloc( maximumSize );
+ //resultSize = File2URI(noteFileData->path, maximumSize, result);
+ //xx->text = (char*)MyMalloc(resultSize + strlen(noteFileData->title) + 2);
+ //sprintf(xx->text, "%s %s", result, noteFileData->title);
+ //if (noteFileData->inArchive) {
+ // CopyFile(noteFileData->path, archiveDirectory);
+
+ //}
+ //free(result);
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+void UpdateLink(struct extraDataNote *noteUIData, int inx, BOOL_T needUndoStart)
+{
+ track_p trk = noteUIData->trk;
+ struct extraDataNote *xx = (struct extraDataNote *)GetTrkExtraData(trk);
+
+ switch (inx) {
+ case OR_NOTE:
+ case LY_NOTE:
+ case CANCEL_NOTE:
+ CommonUpdateNote(trk, inx, noteUIData);
+ break;
+
+ case OK_LINK:
+ DeleteNote(trk);
+ xx->noteData.linkData.title = MyStrdup(noteUIData->noteData.linkData.title);
+ xx->noteData.linkData.url = MyStrdup(noteUIData->noteData.linkData.url);
+ break;
+ default:
+ break;
+ }
+}
+
+void UpdateText(struct extraDataNote *noteUIData, int inx, BOOL_T needUndoStart)
+{
+ track_p trk = noteUIData->trk;
+ struct extraDataNote *xx = (struct extraDataNote *)GetTrkExtraData(trk);
+
+ switch (inx) {
+ case OR_NOTE:
+ case LY_NOTE:
+ case CANCEL_NOTE:
+ CommonUpdateNote(trk, inx, noteUIData);
+ break;
+
+ case OK_TEXT:
+ DeleteNote(trk);
+ xx->noteData.text = MyStrdup(noteUIData->noteData.text);
+ break;
+ default:
+ break;
+ }
+ changed++;
+}
+
+/**
+ * Get the delimited marker for the current note. Markers start and end with
+ * a delimiter. The marker itself is a single digit number. For plain text notes
+ * no marker is used for backwards compatibility
+ *
+ * \param command IN the note's command code
+ * \return a pointer to the marker string.
+ */
+
+static char *
+GetNoteMarker(enum noteCommands command )
+{
+ static char marker[2 * sizeof(DELIMITER) + 3];
+
+ switch (command) {
+ case OP_NOTEFILE:
+ case OP_NOTELINK:
+ sprintf(marker, DELIMITER "%d" DELIMITER, command);
+ break;
+ case OP_NOTETEXT:
+ default:
+ *marker = '\0';
+ break;
+ }
+ return(marker);
+}
+
+/**
+ * Write the note to file. Handles the complete syntax for a note statement
+ *
+ * \param t IN pointer to the note track element
+ * \param f IN file handle for writing
+ * \return TRUE for success
+ */
+
+static BOOL_T WriteNote(track_p t, FILE * f)
+{
+ struct extraDataNote *xx = (struct extraDataNote *)GetTrkExtraData(t);
+ BOOL_T rc = TRUE;
+
+ rc &= fprintf(f, "NOTE %d %u 0 0 %0.6f %0.6f 0 %d", GetTrkIndex(t),
+ GetTrkLayer(t),
+ xx->pos.x, xx->pos.y, xx->op )>0;
+
+ char *s[2] = { NULL, NULL };
+ switch (xx->op) {
+ case OP_NOTETEXT:
+ s[0]=ConvertToEscapedText( xx->noteData.text );
+ break;
+ case OP_NOTELINK:
+ s[0]=ConvertToEscapedText( xx->noteData.linkData.url );
+ s[1]=ConvertToEscapedText( xx->noteData.linkData.title );
+ break;
+ case OP_NOTEFILE:
+ s[0]=ConvertToEscapedText( xx->noteData.fileData.path );
+ s[1]=ConvertToEscapedText( xx->noteData.fileData.title );
+ break;
+ default:
+ AbortProg( "WriteNote: %d", xx->op );
+ }
+#ifdef WINDOWS
+ for ( int inx = 0; inx < 2; inx++ ) {
+ if ( RequiresConvToUTF8( s[inx] ) ) {
+ wSystemToUTF8 ( s[inx], message, sizeof message );
+ MyFree( s[inx] );
+ s[inx] = MyStrdup( message );
+ }
+ }
+#endif
+ rc &= fprintf( f, " \"%s\"", s[0] )>0;
+ MyFree(s[0]);
+ if ( s[1] ) {
+ rc &= fprintf( f, " \"%s\"", s[1] )>0;
+ MyFree( s[1] );
+ }
+ rc &= fprintf( f, "\n" )>0;
+
+ return rc;
+}
+
+/**
+ * Read a track note aka postit
+ *
+ * \param line
+ */
+
+static BOOL_T
+ReadTrackNote(char *line)
+{
+ track_p t;
+ int size;
+ char * cp;
+ struct extraDataNote *xx;
+ wIndex_t index;
+ wIndex_t layer;
+ coOrd pos;
+ DIST_T elev;
+ char *noteText;
+ enum noteCommands noteType;
+ char * sText;
+
+ if (!GetArgs(line + 5, paramVersion < 3 ? "XXpYdc" : paramVersion < 9 ?
+ "dL00pYdc" : "dL00pfdc",
+ &index, &layer, &pos, &elev, &size, &cp)) {
+ return FALSE;
+ }
+
+ if ( paramVersion >= 12 ) {
+ noteType = size;
+ t = NewNote(index, pos, noteType);
+ SetTrkLayer(t, layer);
+
+ xx = (struct extraDataNote *)GetTrkExtraData(t);
+ switch (noteType) {
+ case OP_NOTETEXT:
+ if ( !GetArgs( cp, "qc", &sText, &cp ) )
+ return FALSE;
+#ifdef WINDOWS
+ ConvertUTF8ToSystem( sText );
+#endif
+ xx->noteData.text = sText;
+ break;
+ case OP_NOTELINK:
+ if ( !GetArgs( cp, "qc", &sText, &cp ) )
+ return FALSE;
+#ifdef WINDOWS
+ ConvertUTF8ToSystem( sText );
+#endif
+ xx->noteData.linkData.url = sText;
+ if ( !GetArgs( cp, "qc", &sText, &cp ) )
+ return FALSE;
+#ifdef WINDOWS
+ ConvertUTF8ToSystem( sText );
+#endif
+ xx->noteData.linkData.title = sText;
+ break;
+ case OP_NOTEFILE:
+ if ( !GetArgs( cp, "qc", &sText, &cp ) )
+ return FALSE;
+#ifdef WINDOWS
+ ConvertUTF8ToSystem( sText );
+#endif
+ xx->noteData.fileData.path = sText;
+ if ( !GetArgs( cp, "qc", &sText, &cp ) )
+ return FALSE;
+#ifdef WINDOWS
+ ConvertUTF8ToSystem( sText );
+#endif
+ xx->noteData.fileData.title = sText;
+ xx->noteData.fileData.inArchive = FALSE;
+ break;
+ default:
+ AbortProg( "ReadNote: %d", noteType );
+ }
+ } else {
+ noteText = ReadMultilineText();
+
+ noteType = OP_NOTETEXT;
+
+ if( !strncmp(noteText, DELIMITER, strlen( DELIMITER )) &&
+ !strncmp(noteText + strlen(DELIMITER) + 1, DELIMITER, strlen(DELIMITER)) &&
+ noteText[strlen(DELIMITER)] - '0' > 0 &&
+ noteText[strlen(DELIMITER)] - '0' <= OP_NOTEFILE)
+ {
+ noteType = noteText[strlen(DELIMITER)] - '0';
+ }
+
+ t = NewNote(index, pos, noteType);
+ SetTrkLayer(t, layer);
+
+ xx = (struct extraDataNote *)GetTrkExtraData(t);
+
+ switch (noteType) {
+ case OP_NOTETEXT:
+ xx->noteData.text = MyStrdup(noteText);
+ break;
+ case OP_NOTELINK:
+ {
+ char *ptr;
+ ptr = strtok(noteText, " ");
+ xx->noteData.linkData.url = MyStrdup(ptr + 2 * strlen(DELIMITER) + 1);
+ xx->noteData.linkData.title = MyStrdup(noteText + strlen(ptr) + 1);
+ break;
+ }
+ case OP_NOTEFILE:
+ {
+ char *ptr;
+ ptr = strtok(noteText + 2 * strlen(DELIMITER) + 1, "\"");
+ xx->noteData.fileData.path = MyStrdup(ptr);
+ xx->noteData.fileData.title = MyStrdup(ptr + strlen(ptr) + 2 );
+ xx->noteData.fileData.inArchive = FALSE;
+ break;
+ }
+
+ }
+ MyFree(noteText);
+ }
+ return TRUE;
+}
+
+/**
+ * Handle reading of NOTE
+ *
+ * \param line IN complete line with NOTE statement
+ */
+
+static BOOL_T
+ReadNote(char * line)
+{
+ if (strncmp(line, "NOTE MAIN", 9) == 0) {
+ return ReadMainNote(line);
+ } else {
+ return ReadTrackNote(line);
+ }
+}
+
+static void MoveNote(track_p trk, coOrd orig)
+{
+ struct extraDataNote * xx = (struct extraDataNote *)GetTrkExtraData(trk);
+ xx->pos.x += orig.x;
+ xx->pos.y += orig.y;
+ SetBoundingBox(trk, xx->pos, xx->pos);
+}
+
+
+static void RotateNote(track_p trk, coOrd orig, ANGLE_T angle)
+{
+ struct extraDataNote * xx = (struct extraDataNote *)GetTrkExtraData(trk);
+ Rotate(&xx->pos, orig, angle);
+ SetBoundingBox(trk, xx->pos, xx->pos);
+}
+
+static void RescaleNote(track_p trk, FLOAT_T ratio)
+{
+ struct extraDataNote * xx = (struct extraDataNote *)GetTrkExtraData(trk);
+ xx->pos.x *= ratio;
+ xx->pos.y *= ratio;
+}
+
+static void DescribeNote(track_p trk, char * str, CSIZE_T len)
+{
+ if (IsLinkNote(trk)) {
+ DescribeLinkNote(trk, str, len);
+ }
+ else {
+ if (IsFileNote(trk)) {
+ DescribeFileNote(trk, str, len);
+ } else {
+ DescribeTextNote(trk, str, len);
+ }
+ }
+}
+
+static void ActivateNote(track_p trk) {
+ if (IsLinkNote(trk) ) {
+ ActivateLinkNote(trk);
+ }
+ if (IsFileNote(trk)) {
+ ActivateFileNote(trk);
+ }
+}
+
+static BOOL_T QueryNote( track_p trk, int query )
+{
+ switch ( query ) {
+ case Q_IS_ACTIVATEABLE:;
+ if (IsFileNote(trk)) return TRUE;
+ if (IsLinkNote(trk)) return TRUE;
+ break;
+ default:
+ return FALSE;
+ }
+ return FALSE;
+}
+
+static wBool_t CompareNote( track_cp trk1, track_cp trk2 )
+{
+ struct extraDataNote *xx1 = (struct extraDataNote *)GetTrkExtraData( trk1 );
+ struct extraDataNote *xx2 = (struct extraDataNote *)GetTrkExtraData( trk2 );
+ char * cp = message + strlen(message);
+ REGRESS_CHECK_POS( "Pos", xx1, xx2, pos )
+ REGRESS_CHECK_INT( "Layer", xx1, xx2, layer )
+ REGRESS_CHECK_INT( "Op", xx1, xx2, op )
+ return TRUE;
+}
+
+static trackCmd_t noteCmds = {
+ "NOTE",
+ DrawNote,
+ DistanceNote,
+ DescribeNote,
+ DeleteNote,
+ WriteNote,
+ ReadNote,
+ MoveNote,
+ RotateNote,
+ RescaleNote,
+ NULL, /* audit */
+ NULL, /* getAngle */
+ NULL, /* split */
+ NULL, /* traverse */
+ NULL, /* enumerate */
+ NULL, /* redraw */
+ NULL, /*trim*/
+ NULL, /*merge*/
+ NULL, /*modify*/
+ NULL, /*getLength*/
+ NULL, /*getTrackParams*/
+ NULL, /*moveEndPt*/
+ QueryNote, /*query*/
+ NULL, /*ungroup*/
+ NULL, /*flip*/
+ NULL, /*drawPositionIndicator*/
+ NULL, /*advancePositionIndicator*/
+ NULL, /*checkTraverse*/
+ NULL, /*makeParallel*/
+ NULL, /*drawDesc*/
+ NULL, /*rebuildSegs*/
+ NULL, /*replayData*/
+ NULL, /*storeData*/
+ ActivateNote,
+ CompareNote
+};
+
+/*****************************************************************************
+ * NOTE COMMAND
+ */
+
+
+
+static STATUS_T CmdNote(wAction_t action, coOrd pos)
+{
+ static coOrd oldPos;
+ static int state_on = FALSE;
+ track_p trk;
+
+ switch (action) {
+ case C_START:
+ InfoMessage(_("Place a note on the layout"));
+ curNoteType = (long)commandContext;
+ return C_CONTINUE;
+
+ case C_DOWN:
+ state_on = TRUE;
+ oldPos = pos;
+ return C_CONTINUE;
+
+ case C_MOVE:
+ oldPos = pos;
+ return C_CONTINUE;
+
+ case C_UP:
+ UndoStart(_("New Note"), "New Note");
+ state_on = FALSE;
+ trk = NewNote(-1, pos, curNoteType );
+ inDescribeCmd = TRUE;
+ DrawNewTrack(trk);
+
+ switch (curNoteType)
+ {
+ case OP_NOTETEXT:
+ NewTextNoteUI(trk);
+ break;
+ case OP_NOTELINK:
+ NewLinkNoteUI(trk);
+ break;
+ case OP_NOTEFILE:
+ NewFileNoteUI(trk);
+ break;
+ }
+
+ inDescribeCmd = FALSE;
+
+ return C_CONTINUE;
+
+ case C_REDRAW:
+ if (state_on) {
+ switch (curNoteType) {
+ case OP_NOTETEXT:
+ DrawBitMap(&tempD, oldPos, note_bm, normalColor);
+ break;
+ case OP_NOTELINK:
+ DrawBitMap(&tempD, oldPos, link_bm, normalColor);
+ break;
+ }
+ }
+ return C_CONTINUE;
+
+ case C_CANCEL:
+ DescribeCancel();
+ state_on = FALSE;
+ return C_CONTINUE;
+ }
+
+ return C_INFO;
+}
+
+#include "bitmaps/note.xbm"
+#include "bitmaps/link.xbm"
+#include "bitmaps/clip.xbm"
+#include "bitmaps/cnote.xpm"
+
+void InitTrkNote(wMenu_p menu)
+{
+ note_bm = wDrawBitMapCreate(mainD.d, note_width, note_width, 8, 8, note_bits);
+ link_bm = wDrawBitMapCreate(mainD.d, note_width, note_width, 8, 8, link_bits);
+ document_bm = wDrawBitMapCreate(mainD.d, note_width, note_width, 8, 8, clip_bits);
+
+ ButtonGroupBegin(_("Notes"), "cmdNoteCmd", _("Add notes"));
+ for (int i = 0; i < NOTETYPESCOUNT; i++) {
+ trknoteData_t *nt;
+ wIcon_p icon;
+
+ nt = noteTypes + i;
+ icon = wIconCreatePixMap(nt->xpm);
+ AddMenuButton(menu, CmdNote, nt->helpKey, _(nt->cmdName), icon, LEVEL0_50, IC_STICKY | IC_POPUP2, nt->acclKey, (void *)(intptr_t)nt->OP);
+ }
+ ButtonGroupEnd();
+
+ T_NOTE = InitObject(&noteCmds);
+}
diff --git a/app/bin/trkseg.c b/app/bin/trkseg.c
index ab4b5a8..3e38933 100644
--- a/app/bin/trkseg.c
+++ b/app/bin/trkseg.c
@@ -142,8 +142,14 @@ EXPORT coOrd GetSegEndPt(
break;
case SEG_BEZTRK:
case SEG_BEZLIN:
- if (ep ==1) pos = segPtr->u.b.pos[3]; //For Bezier, use the End Points of the overall curve
- else pos = segPtr->u.b.pos[0];
+ if (ep ==1) {
+ pos = segPtr->u.b.pos[3]; //For Bezier, use the End Points of the overall curve
+ angle = FindAngle(segPtr->u.b.pos[2],segPtr->u.b.pos[3]);
+ } else {
+ pos = segPtr->u.b.pos[0];
+ angle = FindAngle(segPtr->u.b.pos[1],segPtr->u.b.pos[0]);
+ }
+
break;
default:
AbortProg("GetSegCntPt(%c)", segPtr->type );
@@ -172,8 +178,8 @@ EXPORT void GetTextBounds(
coOrd * hiR )
{
- coOrd size;
- POS_T descent = 0.0;
+ coOrd size, size2;
+ POS_T descent = 0.0, ascent = 0.0;
coOrd lo, hi;
coOrd p[4];
coOrd lastL;
@@ -183,9 +189,9 @@ EXPORT void GetTextBounds(
// set up the corners of the rectangle
p[0].x = p[3].x = 0.0;
p[1].x = p[2].x = size.x;
- DrawTextSize2(&mainD, "A", NULL, fs, FALSE, &size, &descent);
+ DrawTextSize2(&mainD, "A", NULL, fs, FALSE, &size2, &descent, &ascent);
p[0].y = p[1].y = lastL.y - descent;
- p[2].y = p[3].y = size.y;
+ p[2].y = p[3].y = size2.y;
lo = hi = zero;
@@ -239,24 +245,10 @@ static void Get1SegBounds( trkSeg_p segPtr, coOrd xlat, ANGLE_T angle, coOrd *lo
case SEG_TBLEDGE:
case SEG_CRVLIN:
case SEG_JNTTRK:
- REORIGIN( p0, GetSegEndPt( segPtr, 0, FALSE, NULL ), angle, xlat )
- REORIGIN( p1, GetSegEndPt( segPtr, 1, FALSE, NULL ), angle, xlat )
- if (p0.x < p1.x) {
- lo->x = p0.x;
- hi->x = p1.x;
- } else {
- lo->x = p1.x;
- hi->x = p0.x;
- }
- if (p0.y < p1.y) {
- lo->y = p0.y;
- hi->y = p1.y;
- } else {
- lo->y = p1.y;
- hi->y = p0.y;
- }
- if ( segPtr->type == SEG_CRVTRK ||
- segPtr->type == SEG_CRVLIN ) {
+ if ( (segPtr->type == SEG_CRVTRK) ||
+ (segPtr->type == SEG_CRVLIN) ) {
+ /* TODO: be more precise about curved line width */
+ width.x = width.y = segPtr->width/2.0;
REORIGIN( pc, segPtr->u.c.center, angle, xlat );
a0 = NormalizeAngle( segPtr->u.c.a0 + angle );
a1 = segPtr->u.c.a1;
@@ -266,7 +258,7 @@ static void Get1SegBounds( trkSeg_p segPtr, coOrd xlat, ANGLE_T angle, coOrd *lo
lo->y = pc.y - radius;
hi->x = pc.x + radius;
hi->y = pc.y + radius;
- return;
+ break;
}
if ( a0 + a1 >= 360.0 )
hi->y = pc.y + radius;
@@ -277,12 +269,25 @@ static void Get1SegBounds( trkSeg_p segPtr, coOrd xlat, ANGLE_T angle, coOrd *lo
if ( a0 < 270.0 && a0+a1 >= 270.0 )
lo->x = pc.x - radius;
}
+ REORIGIN( p0, GetSegEndPt( segPtr, 0, FALSE, NULL ), angle, xlat )
+ REORIGIN( p1, GetSegEndPt( segPtr, 1, FALSE, NULL ), angle, xlat )
+ if (p0.x < p1.x) {
+ lo->x = p0.x;
+ hi->x = p1.x;
+ } else {
+ lo->x = p1.x;
+ hi->x = p0.x;
+ }
+ if (p0.y < p1.y) {
+ lo->y = p0.y;
+ hi->y = p1.y;
+ } else {
+ lo->y = p1.y;
+ hi->y = p0.y;
+ }
if ( segPtr->type == SEG_STRLIN ) {
width.x = segPtr->width * fabs(cos( D2R( FindAngle(p0, p1) ) ) ) / 2.0;
width.y = segPtr->width * fabs(sin( D2R( FindAngle(p0, p1) ) ) ) / 2.0;
- } else if ( segPtr->type == SEG_CRVLIN ) {
- /* TODO: be more precise about curved line width */
- width.x = width.y = segPtr->width/2.0;
} else if ( segPtr->type == SEG_BENCH ) {
width.x = BenchGetWidth( segPtr->u.l.option ) * fabs(cos( D2R( FindAngle(p0, p1) ) ) ) / 2.0;
width.y = BenchGetWidth( segPtr->u.l.option ) * fabs(sin( D2R( FindAngle(p0, p1) ) ) ) / 2.0;
@@ -293,7 +298,7 @@ static void Get1SegBounds( trkSeg_p segPtr, coOrd xlat, ANGLE_T angle, coOrd *lo
width.x = width.y = segPtr->width/2.0;
case SEG_FILPOLY:
for (inx=0; inx<segPtr->u.p.cnt; inx++ ) {
- REORIGIN( p0, segPtr->u.p.pts[inx], angle, xlat )
+ REORIGIN( p0, segPtr->u.p.pts[inx].pt, angle, xlat )
if (inx==0) {
*lo = *hi = p0;
} else {
@@ -431,8 +436,8 @@ EXPORT void MoveSegs(
case SEG_POLY:
case SEG_FILPOLY:
for (inx=0; inx<s->u.p.cnt; inx++) {
- s->u.p.pts[inx].x += orig.x;
- s->u.p.pts[inx].y += orig.y;
+ s->u.p.pts[inx].pt.x += orig.x;
+ s->u.p.pts[inx].pt.y += orig.y;
}
break;
case SEG_JNTTRK:
@@ -484,7 +489,7 @@ EXPORT void RotateSegs(
case SEG_POLY:
case SEG_FILPOLY:
for (inx=0; inx<s->u.p.cnt; inx++) {
- Rotate( &s->u.p.pts[inx], orig, angle );
+ Rotate( &s->u.p.pts[inx].pt, orig, angle );
}
break;
case SEG_JNTTRK:
@@ -511,7 +516,7 @@ EXPORT void FlipSegs(
{
trkSeg_p s;
int inx;
- coOrd * pts;
+ pts_t * pts;
for (s=segs; s<&segs[segCnt]; s++) {
switch (s->type) {
@@ -537,11 +542,11 @@ EXPORT void FlipSegs(
break;
case SEG_POLY:
case SEG_FILPOLY:
- pts = (coOrd*)MyMalloc( s->u.p.cnt * sizeof (coOrd) );
- memcpy( pts, s->u.p.pts, s->u.p.cnt * sizeof (coOrd) );
+ pts = (pts_t*)MyMalloc( s->u.p.cnt * sizeof (pts_t) );
+ memcpy( pts, s->u.p.pts, s->u.p.cnt * sizeof (pts_t) );
s->u.p.pts = pts;
for (inx=0; inx<s->u.p.cnt; inx++) {
- s->u.p.pts[inx].y = -s->u.p.pts[inx].y;
+ s->u.p.pts[inx].pt.y = -s->u.p.pts[inx].pt.y;
}
/* Don't Free - we only just got! ALso can't free other copy as that may be a template */
//MyFree(pts);
@@ -602,8 +607,8 @@ EXPORT void RescaleSegs(
case SEG_POLY:
case SEG_FILPOLY:
for (inx=0; inx<s->u.p.cnt; inx++) {
- s->u.p.pts[inx].x *= scale_x;
- s->u.p.pts[inx].y *= scale_y;
+ s->u.p.pts[inx].pt.x *= scale_x;
+ s->u.p.pts[inx].pt.y *= scale_y;
}
break;
case SEG_JNTTRK:
@@ -638,7 +643,7 @@ EXPORT void CloneFilledDraw(
trkSeg_p segs,
BOOL_T reorigin )
{
- coOrd * newPts;
+ pts_t * newPts;
trkSeg_p sp;
wIndex_t inx;
@@ -646,21 +651,20 @@ EXPORT void CloneFilledDraw(
switch (sp->type) {
case SEG_POLY:
case SEG_FILPOLY:
- newPts = (coOrd*)MyMalloc( sp->u.p.cnt * sizeof (coOrd) );
+ newPts = (pts_t*)MyMalloc( sp->u.p.cnt * sizeof (pts_t) );
+ memcpy( newPts, sp->u.p.pts, sp->u.p.cnt * sizeof (pts_t) );
if ( reorigin ) {
for ( inx = 0; inx<sp->u.p.cnt; inx++ )
- REORIGIN( newPts[inx], sp->u.p.pts[inx], sp->u.p.angle, sp->u.p.orig );
+ REORIGIN( newPts[inx].pt, sp->u.p.pts[inx].pt, sp->u.p.angle, sp->u.p.orig );
sp->u.p.angle = 0;
sp->u.p.orig = zero;
- } else {
- memcpy( newPts, sp->u.p.pts, sp->u.p.cnt * sizeof (coOrd) );
}
//if (sp->u.p.pts) Can't do this a pts could be pointing at static
// free(sp->u.p.pts);
sp->u.p.pts = newPts;
break;
case SEG_TEXT:
- sp->u.t.string = strdup( sp->u.t.string);
+ sp->u.t.string = MyStrdup( sp->u.t.string);
break;
case SEG_BEZTRK:
case SEG_BEZLIN:
@@ -753,9 +757,9 @@ EXPORT DIST_T DistanceSegs(
for (lin=0;lin<segPtr->u.p.cnt;lin++) {
pt = p0;
if (lin < segPtr->u.p.cnt-1 )
- ddd = LineDistance( &pt, segPtr->u.p.pts[lin], segPtr->u.p.pts[lin+1] );
+ ddd = LineDistance( &pt, segPtr->u.p.pts[lin].pt, segPtr->u.p.pts[lin+1].pt );
else
- ddd = LineDistance( &pt, segPtr->u.p.pts[lin], segPtr->u.p.pts[0] );
+ ddd = LineDistance( &pt, segPtr->u.p.pts[lin].pt, segPtr->u.p.pts[0].pt );
if ( ddd < dd ) {
dd = ddd;
p1 = pt;
@@ -846,7 +850,7 @@ EXPORT ANGLE_T GetAngleSegs(
{
wIndex_t inx;
ANGLE_T angle = 0.0;
- coOrd p0;
+ coOrd p0,p1;
DIST_T d, dd;
segProcData_t segProcData;
coOrd pos2 = * pos1;
@@ -889,15 +893,17 @@ EXPORT ANGLE_T GetAngleSegs(
break;
case SEG_POLY:
case SEG_FILPOLY:
- p0 = pos2;
- dd = LineDistance( &p0, segPtr->u.p.pts[segPtr->u.p.cnt-1], segPtr->u.p.pts[0] );
- angle = FindAngle( segPtr->u.p.pts[segPtr->u.p.cnt-1], segPtr->u.p.pts[0] );
+ p0 = p1 = pos2;
+ dd = LineDistance( &p0, segPtr->u.p.pts[segPtr->u.p.cnt-1].pt, segPtr->u.p.pts[0].pt );
+ angle = FindAngle( segPtr->u.p.pts[segPtr->u.p.cnt-1].pt, segPtr->u.p.pts[0].pt );
for ( inx=0; inx<segPtr->u.p.cnt-1; inx++ ) {
- p0 = pos2;
- d = LineDistance( &p0, segPtr->u.p.pts[inx], segPtr->u.p.pts[inx+1] );
+ p0 = p1;
+ d = LineDistance( &p0, segPtr->u.p.pts[inx].pt, segPtr->u.p.pts[inx+1].pt );
if ( d < dd ) {
dd = d;
- angle = FindAngle( segPtr->u.p.pts[inx], segPtr->u.p.pts[inx+1] );
+ angle = FindAngle( segPtr->u.p.pts[inx].pt, segPtr->u.p.pts[inx+1].pt );
+ if (subSegInxR) *subSegInxR = inx;
+ pos2 = p0;
}
}
break;
@@ -1125,14 +1131,14 @@ static void AppendPath( signed char c )
EXPORT BOOL_T ReadSegs( void )
{
char *cp, *cpp;
- BOOL_T rc=FALSE;
+ BOOL_T rc=TRUE;
trkSeg_p s;
trkEndPt_p e;
long rgb;
int i;
DIST_T elev0, elev1;
BOOL_T hasElev;
- BOOL_T isPolyV2, noVersion;
+ BOOL_T isPolyV1, isPolyV2;
BOOL_T improvedEnds;
FLOAT_T ignoreFloat;
char type;
@@ -1146,14 +1152,13 @@ EXPORT BOOL_T ReadSegs( void )
DYNARR_RESET( trkSeg_t, tempSegs_da );
DYNARR_RESET( trkEndPt_t, tempEndPts_da );
pathCnt = 0;
- while ( (cp = GetNextLine()) != NULL ) {
+ AppendPath(0); // End of all paths
+ while ( rc && ((cp = GetNextLine()) != NULL) ) {
while (isspace(*cp)) cp++;
hasElev = FALSE;
improvedEnds = FALSE;
- if ( strncmp( cp, "END", 3 ) == 0 ) {
- rc = TRUE;
- subsegs = FALSE;
- break;
+ if ( IsEND( END_SEGS ) ) {
+ return TRUE;
}
if ( strncmp(cp, "SUBSEGS", 7) == 0) {
subsegs = TRUE;
@@ -1163,24 +1168,22 @@ EXPORT BOOL_T ReadSegs( void )
subsegs = FALSE;
continue;
}
- if ( *cp == '\n' || *cp == '#' ) {
+ if ( *cp == '\0' || *cp == '\n' || *cp == '#' ) {
continue;
}
+ if (subsegs) continue;
type = *cp++;
- hasElev = FALSE;
- noVersion = TRUE;
- if ( *cp != ' ')
- noVersion = FALSE;
- if ( *cp == '3' ) {
- cp++;
- hasElev = TRUE;
- }
- isPolyV2 = FALSE;
- if (*cp == '4') {
- cp++;
- hasElev = TRUE;
- isPolyV2 = TRUE;
- improvedEnds = TRUE;
+ improvedEnds = isPolyV2 = hasElev = isPolyV1 = FALSE;
+ if ( isdigit( *cp ) ) {
+ long iVersion = strtol( cp, &cp, 10 );
+ if ( iVersion >= 3 )
+ hasElev = isPolyV1 = TRUE;
+ if ( iVersion >= 4 )
+ improvedEnds = isPolyV2 = TRUE;
+ if ( iVersion > 4 ) {
+ InputError( "Invalid segment version number, maximum is %d", TRUE, 4 );
+ break;
+ }
}
switch (type) {
case SEG_STRLIN:
@@ -1341,34 +1344,28 @@ EXPORT BOOL_T ReadSegs( void )
s = &tempSegs(tempSegs_da.cnt-1);
s->type = type;
s->u.p.polyType = FREEFORM;
- if (isPolyV2) {
- if ( !GetArgs( cp, "lwdd",
- &rgb, &s->width,
- &s->u.p.cnt, &s->u.p.polyType) ) {
- rc = FALSE;
- /*??*/break;
- }
- } else {
- if ( !GetArgs( cp, "lwd",
- &rgb, &s->width,
- &s->u.p.cnt) ) {
- rc = FALSE;
- /*??*/break;
- }
+ if ( !GetArgs( cp,
+ isPolyV2?"lwdd":"lwdX",
+ &rgb,
+ &s->width,
+ &s->u.p.cnt,
+ &s->u.p.polyType) ) {
+ rc = FALSE;
+ /*??*/break;
}
s->color = wDrawFindColor( rgb );
- s->u.p.pts = (coOrd*)MyMalloc( s->u.p.cnt * sizeof (coOrd) );
+ s->u.p.pts = (pts_t*)MyMalloc( s->u.p.cnt * sizeof (pts_t) );
for ( i=0; i<s->u.p.cnt; i++ ) {
cp = GetNextLine();
- if (cp == NULL || !GetArgs( cp, "p", &s->u.p.pts[i])) {
+ if (cp == NULL ||
+ !GetArgs( cp,
+// TODO: does elev belong here instead of the seg header?
+ isPolyV2?"pdY":isPolyV1?"pXf":"pXY",
+ &s->u.p.pts[i].pt,
+ &s->u.p.pts[i].pt_type,
+ &elev0 )) {
rc = FALSE;
}
- if (!noVersion) {
- if (cp == NULL || !GetArgs( cp, hasElev?"f":"Y", &elev0 ) ) {
- rc = FALSE;
- /*??*/break;
- }
- }
}
s->u.p.angle = 0.0;
s->u.p.orig = zero;
@@ -1378,14 +1375,11 @@ EXPORT BOOL_T ReadSegs( void )
s = &tempSegs(tempSegs_da.cnt-1);
s->type = type;
s->u.t.fontP = NULL;
- char * expandedText;
- if ( !GetArgs( cp, "lpf0fq", &rgb, &s->u.t.pos, &s->u.t.angle, &s->u.t.fontSize, &expandedText ) ) {
+ if ( !GetArgs( cp, "lpfdfq", &rgb, &s->u.t.pos, &s->u.t.angle, &s->u.t.boxed, &s->u.t.fontSize, &plain_text ) ) {
rc = FALSE;
/*??*/break;
}
- plain_text = ConvertFromEscapedText(expandedText);
- s->u.t.string = plain_text;
- MyFree(expandedText);
+ s->u.t.string = MyStrdup(plain_text);
s->color = wDrawFindColor( rgb );
break;
case SEG_UNCEP:
@@ -1455,18 +1449,20 @@ EXPORT BOOL_T ReadSegs( void )
case SEG_PATH:
while (isspace(*cp)) cp++;
if (*cp == '\"') cp++;
- while ( *cp != '\"') AppendPath((signed char)*cp++);
- AppendPath(0);
+ pathCnt--; // Overwrite previous terminator
+ while ( *cp != '\"') AppendPath((signed char)*cp++); // Name of path
+ AppendPath(0); // End of name
cp++;
while (1) {
i = (int)strtol(cp, &cpp, 10);
if (cp == cpp)
/*??*/break;
cp = cpp;
- AppendPath( (signed char)i );
+ AppendPath( (signed char)i ); // Segment # of path component
}
- AppendPath( 0 );
- AppendPath( 0 );
+ AppendPath( 0 ); // End of last path components
+ AppendPath( 0 ); // End of path
+ AppendPath( 0 ); // End of all paths
break;
case SEG_SPEC:
strncpy( tempSpecial, cp+1, sizeof tempSpecial - 1 );
@@ -1481,11 +1477,18 @@ EXPORT BOOL_T ReadSegs( void )
}
break;
default:
+ InputError( "Unknown segment type: %c", TRUE, type );
+ rc = FALSE;
break;
}
}
- AppendPath( 0 );
- return rc;
+// We've hit an InputError.
+// The user may have chosen to not continue (paramFile == NULL)
+// Otherwise we have to flush until we see END$SEGS
+
+ while ( GetNextLine() && !IsEND( END_SEGS ) ); // Chomp, Chomp
+
+ return FALSE;
}
EXPORT BOOL_T WriteSegs(
@@ -1559,7 +1562,8 @@ EXPORT BOOL_T WriteSegsEnd(
case SEG_BEZTRK:
case SEG_BEZLIN:
rc &= fprintf( f, "\t%c3 %ld %0.6f %0.6f %0.6f %0.6f %0.6f %0.6f %0.6f %0.6f %0.6f\n",
- segs[i].type, wDrawGetRGB(segs[i].color), segs[i].width,
+ segs[i].type, wDrawGetRGB(segs[i].color),
+ segs[i].width,
segs[i].u.l.pos[0].x, segs[i].u.l.pos[0].y,
segs[i].u.l.pos[1].x, segs[i].u.l.pos[1].y,
segs[i].u.l.pos[2].x, segs[i].u.l.pos[2].y,
@@ -1584,24 +1588,26 @@ EXPORT BOOL_T WriteSegsEnd(
break;
case SEG_POLY:
case SEG_FILPOLY:
+// TODO: to be consistent, we should add a dummy 0 for elev. See ReadSegs/SEG_POLY
rc &= fprintf( f, "\t%c4 %ld %0.6f %d %d \n",
segs[i].type, wDrawGetRGB(segs[i].color), segs[i].width,
segs[i].u.p.cnt, segs[i].u.p.polyType ) > 0;
for ( j=0; j<segs[i].u.p.cnt; j++ )
- rc &= fprintf( f, "\t\t%0.6f %0.6f 0\n",
- segs[i].u.p.pts[j].x, segs[i].u.p.pts[j].y ) > 0;
+ rc &= fprintf( f, "\t\t%0.6f %0.6f %d\n",
+ segs[i].u.p.pts[j].pt.x, segs[i].u.p.pts[j].pt.y, segs[i].u.p.pts[j].pt_type ) > 0;
break;
case SEG_TEXT: /* 0pf0fq */
escaped_text = ConvertToEscapedText(segs[i].u.t.string);
- rc &= fprintf( f, "\t%c %ld %0.6f %0.6f %0.6f 0 %0.6f \"%s\"\n",
+ rc &= fprintf( f, "\t%c %ld %0.6f %0.6f %0.6f %d %0.6f \"%s\"\n",
segs[i].type, wDrawGetRGB(segs[i].color),
segs[i].u.t.pos.x, segs[i].u.t.pos.y, segs[i].u.t.angle,
+ segs[i].u.t.boxed,
segs[i].u.t.fontSize, escaped_text ) > 0;
MyFree(escaped_text);
break;
}
}
- if (writeEnd) rc &= fprintf( f, "\tEND\n" )>0;
+ if (writeEnd) rc &= fprintf( f, "\t%s\n", END_SEGS )>0;
return rc;
}
@@ -1664,15 +1670,15 @@ EXPORT void DrawDimLine(
if ( ( option & 0x10 ) == 0 ) {
Translate( &p, p0, a0-45, dist );
- DrawLine( d, p0, p, 0, color );
+ DrawLine( d, p0, p, width, color );
Translate( &p, p0, a0+45, dist );
- DrawLine( d, p0, p, 0, color );
+ DrawLine( d, p0, p, width, color );
}
if ( ( option & 0x20 ) == 0 ) {
Translate( &p, p1, a0-135, dist );
- DrawLine( d, p1, p, 0, color );
+ DrawLine( d, p1, p, width, color );
Translate( &p, p1, a0+135, dist );
- DrawLine( d, p1, p, 0, color );
+ DrawLine( d, p1, p, width, color );
}
if ( fs < 2*d->scale ) {
@@ -1686,7 +1692,7 @@ EXPORT void DrawDimLine(
size.y = textsize.y/2.0;
dist1 = FindDistance( zero, size );
if ( dist <= dist1*2 ) {
- DrawLine( d, p0, p1, 0, color );
+ DrawLine( d, p0, p1, width, color );
return;
}
a1 = FindAngle( zero, size );
@@ -1715,11 +1721,11 @@ EXPORT void DrawDimLine(
p = pc;
p.x -= fx*x;
p.y -= fy*y;
- DrawLine( d, p0, p, 0, color );
+ DrawLine( d, p0, p, width, color );
p = pc;
p.x += fx*x;
p.y += fy*y;
- DrawLine( d, p, p1, 0, color );
+ DrawLine( d, p, p1, width, color );
}
/*
@@ -1747,6 +1753,8 @@ EXPORT void DrawSegsO(
long option;
wFontSize_t fs;
+ wBool_t bFill;
+
for (i=0; i<segCnt; i++,segPtr++ ) {
if (color == wDrawColorBlack) {
color1 = segPtr->color;
@@ -1754,60 +1762,10 @@ EXPORT void DrawSegsO(
} else {
color1 = color2 = color;
}
- if ( (options&DTS_TIES)!=0 ) {
- if ( segPtr->color == wDrawColorWhite )
- continue;
- switch (segPtr->type) {
- case SEG_STRTRK:
- REORIGIN( p0, segPtr->u.l.pos[0], angle, orig )
- REORIGIN( p1, segPtr->u.l.pos[1], angle, orig )
- DrawStraightTies( d, trk, p0, p1, color );
- break;
- case SEG_CRVTRK:
- a0 = NormalizeAngle(segPtr->u.c.a0 + angle);
- REORIGIN( c, segPtr->u.c.center, angle, orig );
- DrawCurvedTies( d, trk, c, fabs(segPtr->u.c.radius), a0, segPtr->u.c.a1, color );
- break;
- case SEG_JNTTRK:
- REORIGIN( p0, segPtr->u.j.pos, angle, orig );
- DrawJointTrack( d, p0, NormalizeAngle(segPtr->u.j.angle+angle), segPtr->u.j.l0, segPtr->u.j.l1, segPtr->u.j.R, segPtr->u.j.L, segPtr->u.j.negate, segPtr->u.j.flip, segPtr->u.j.Scurve, trk, -1, -1, trackGauge, color1, options );
- break;
- case SEG_BEZTRK:
- REORIGIN(p0, segPtr->u.b.pos[0], angle, orig);
- REORIGIN(p1, segPtr->u.b.pos[1], angle, orig);
- REORIGIN(p2, segPtr->u.b.pos[2], angle, orig);
- REORIGIN(p3, segPtr->u.b.pos[3], angle, orig);
- tempPtr = segPtr->bezSegs.ptr;
- for(int j=0;j<segPtr->bezSegs.cnt;j++,tempPtr++) { //Loop through sub parts (only Trks supported)
- if (tempPtr->type == SEG_CRVTRK) {
- a0 = NormalizeAngle(tempPtr->u.c.a0 + angle);
- REORIGIN( c, tempPtr->u.c.center, angle, orig );
- DrawCurvedTies( d, trk, c, fabs(tempPtr->u.c.radius), a0, tempPtr->u.c.a1, color );
- }
- if (tempPtr->type == SEG_STRTRK) {
- REORIGIN( p0, tempPtr->u.l.pos[0], angle, orig )
- REORIGIN( p1, tempPtr->u.l.pos[1], angle, orig )
- DrawStraightTies( d, trk, p0, p1, color );
- }
- }
- break;
- }
- continue;
- }
- switch (segPtr->type) {
- case SEG_STRTRK:
- case SEG_CRVTRK:
- case SEG_JNTTRK:
- case SEG_BEZTRK:
- case SEG_TEXT:
- break;
- default:
- if (d->options&DC_QUICK)
- return;
- if ((d->options&DC_SIMPLE) != 0 &&
- trackGauge != 0.0)
- return;
- }
+ wDrawWidth thick = 3;
+#ifdef WINDOWS
+ thick *= (wDrawWidth)(d->dpi/mainD.dpi);
+#endif
switch (segPtr->type) {
case SEG_STRLIN:
case SEG_DIMLIN:
@@ -1824,17 +1782,16 @@ EXPORT void DrawSegsO(
break;
DrawStraightTrack( d,
p0, p1,
- FindAngle(p0, p1 ),
- NULL, trackGauge, color1, options );
+ FindAngle(p1, p0 ),
+ trk, color1, options );
break;
case SEG_STRLIN:
- DrawLine( d, p0, p1, (wDrawWidth)floor(segPtr->width*factor+0.5), color1 );
+ DrawLine( d, p0, p1, (d->options&DC_THICK)?thick:(wDrawWidth)floor(segPtr->width*factor+0.5), color1 );
break;
case SEG_DIMLIN:
case SEG_BENCH:
case SEG_TBLEDGE:
- if ( (d->options&DC_GROUP) ||
- (segPtr->type == SEG_DIMLIN && d->funcs == &tempSegDrawFuncs) ) {
+ if ( (d->options&DC_SEGTRACK) ) {
DYNARR_APPEND( trkSeg_t, tempSegs_da, 10 );
tempPtr = &tempSegs(tempSegs_da.cnt-1);
memcpy( tempPtr, segPtr, sizeof segPtr[0] );
@@ -1848,7 +1805,7 @@ EXPORT void DrawSegsO(
fs /= (option==0?8:option==1?4:option==2?2:1);
if ( fs < 2 )
fs = 2;
- DrawDimLine( d, p0, p1, FormatDistance(FindDistance(p0,p1)), fs, 0.5, 0, color, option & 0x00 );
+ DrawDimLine( d, p0, p1, FormatDistance(FindDistance(p0,p1)), fs, 0.5, (d->options&DC_THICK)?thick:0, color, option & 0x00 );
break;
case SEG_BENCH:
DrawBench( d, p0, p1, color1, color2, options, segPtr->u.l.option );
@@ -1876,10 +1833,10 @@ EXPORT void DrawSegsO(
fabs(segPtr->u.c.radius),
a0, segPtr->u.c.a1,
p0, p1,
- NULL, trackGauge, color1, options );
+ trk, color1, options );
} else {
DrawArc( d, c, fabs(segPtr->u.c.radius), a0, segPtr->u.c.a1,
- FALSE, (wDrawWidth)floor(segPtr->width*factor+0.5), color1 );
+ FALSE, (d->options&DC_THICK)?thick:(wDrawWidth)floor(segPtr->width*factor+0.5), color1 );
}
break;
case SEG_BEZTRK:
@@ -1889,7 +1846,7 @@ EXPORT void DrawSegsO(
color1 = normalColor;
if ( segPtr->color == wDrawColorWhite )
break;
- }
+ } else
REORIGIN(p0, segPtr->u.b.pos[0], angle, orig);
REORIGIN(p1, segPtr->u.b.pos[1], angle, orig);
REORIGIN(p2, segPtr->u.b.pos[2], angle, orig);
@@ -1911,10 +1868,10 @@ EXPORT void DrawSegsO(
fabs(tempPtr->u.c.radius),
a0, tempPtr->u.c.a1,
p0, p1,
- NULL, trackGauge, color1, options );
+ trk, color1, options );
} else if (tempPtr->type == SEG_CRVLIN) {
DrawArc( d, c, fabs(tempPtr->u.c.radius), a0, tempPtr->u.c.a1,
- FALSE, (wDrawWidth)floor(tempPtr->width*factor+0.5), color1 );
+ FALSE, (d->options&DC_THICK)?thick:(wDrawWidth)floor(tempPtr->width*factor+0.5), color1 );
}
break;
case SEG_STRTRK:
@@ -1922,15 +1879,14 @@ EXPORT void DrawSegsO(
if ( tempPtr->color == wDrawColorWhite ) break;
REORIGIN(p0,tempPtr->u.l.pos[0], angle, orig);
REORIGIN(p1,tempPtr->u.l.pos[1], angle, orig);
- DrawStraightTrack( d,
- p0, p1,
- FindAngle(p0, p1 ),
- NULL, trackGauge, color1, options );
+ DrawStraightTrack( d, p0, p1,
+ FindAngle(p1, p0 ),
+ trk, color1, options );
break;
case SEG_STRLIN:
REORIGIN(p0,tempPtr->u.l.pos[0], angle, orig);
REORIGIN(p1,tempPtr->u.l.pos[1], angle, orig);
- DrawLine( d, p0, p1, (wDrawWidth)floor(tempPtr->width*factor+0.5), color1 );
+ DrawLine( d, p0, p1, (d->options&DC_THICK)?thick:(wDrawWidth)floor(tempPtr->width*factor+0.5), color1 );
break;
}
}
@@ -1941,48 +1897,37 @@ EXPORT void DrawSegsO(
break;
case SEG_TEXT:
REORIGIN( p0, segPtr->u.t.pos, angle, orig )
- DrawMultiString( d, p0, segPtr->u.t.string, segPtr->u.t.fontP, segPtr->u.t.fontSize, color1, NormalizeAngle(angle + segPtr->u.t.angle), NULL, NULL );
+ DrawMultiString( d, p0, segPtr->u.t.string, segPtr->u.t.fontP, segPtr->u.t.fontSize, color1, NormalizeAngle(angle + segPtr->u.t.angle), NULL, NULL, segPtr->u.t.boxed );
break;
case SEG_FILPOLY:
- if ( (d->options&DC_GROUP) == 0 &&
- d->funcs != &tempSegDrawFuncs ) {
- /* Note: if we call tempSegDrawFillPoly we get a nasty bug
- /+ because we don't make a private copy of p.pts */
- coOrd *tempPts = malloc(sizeof(coOrd)*segPtr->u.p.cnt);
-// coOrd tempPts[segPtr->u.p.cnt];
- for (j=0;j<segPtr->u.p.cnt;j++) {
- REORIGIN( tempPts[j], segPtr->u.p.pts[j], angle, orig );
- }
- DrawFillPoly( d, segPtr->u.p.cnt, tempPts, color1 );
- free(tempPts);
- break;
- } /* else fall thru */
case SEG_POLY:
- if ( (d->options&DC_GROUP) ) {
- DYNARR_APPEND( trkSeg_t, tempSegs_da, 10 );
- tempPtr = &tempSegs(tempSegs_da.cnt-1);
- memcpy( tempPtr, segPtr, sizeof segPtr[0] );
- tempPtr->u.p.orig = orig;
- tempPtr->u.p.angle = angle;
- break;
- }
- REORIGIN( p0, segPtr->u.p.pts[0], angle, orig )
- c = p0;
- for (j=1; j<segPtr->u.p.cnt; j++) {
- REORIGIN( p1, segPtr->u.p.pts[j], angle, orig );
- DrawLine( d, p0, p1, (wDrawWidth)floor(segPtr->width*factor+0.5), color1 );
- p0 = p1;
+ ;
+ /* Note: if we call tempSegDrawFillPoly we get a nasty bug
+ /+ because we don't make a private copy of p.pts */
+ coOrd *tempPts = malloc(sizeof(coOrd)*segPtr->u.p.cnt);
+ int *tempTypes = malloc(sizeof(int)*segPtr->u.p.cnt);
+// coOrd tempPts[segPtr->u.p.cnt];
+ for (j=0;j<segPtr->u.p.cnt;j++) {
+ REORIGIN( tempPts[j], segPtr->u.p.pts[j].pt, angle, orig );
+ tempTypes[j] = segPtr->u.p.pts[j].pt_type;
}
- DrawLine( d, p0, c, (wDrawWidth)floor(segPtr->width*factor+0.5), color1 );
+ bFill = (segPtr->type == SEG_FILPOLY);
+ if ( (d->options&DC_SIMPLE) && programMode != MODE_TRAIN )
+ bFill = FALSE;
+ DrawPoly( d, segPtr->u.p.cnt, tempPts, tempTypes, color1, (d->options&DC_THICK)?thick:(wDrawWidth)floor(segPtr->width*factor+0.5), bFill?1:0, segPtr->u.p.polyType==POLYLINE?1:0);
+ free(tempPts);
+ free(tempTypes);
break;
case SEG_FILCRCL:
REORIGIN( c, segPtr->u.c.center, angle, orig )
- if ( (d->options&DC_GROUP) != 0 ||
- d->funcs != &tempSegDrawFuncs ) {
+ bFill = TRUE;
+ if ( (d->options&DC_SIMPLE) && programMode != MODE_TRAIN )
+ bFill = FALSE;
+ if ( bFill ) {
DrawFillCircle( d, c, fabs(segPtr->u.c.radius), color1 );
} else {
DrawArc( d, c, fabs(segPtr->u.c.radius), 0, 360,
- FALSE, (wDrawWidth)0, color1 );
+ FALSE, (d->options&DC_THICK)?thick:(wDrawWidth)0, color1 );
}
break;
}
@@ -2003,7 +1948,8 @@ EXPORT void DrawSegs(
DIST_T trackGauge,
wDrawColor color )
{
- DrawSegsO( d, NULL, orig, angle, segPtr, segCnt, trackGauge, color, 0 );
+
+ DrawSegsO( d, NULL, orig, angle, segPtr, segCnt, trackGauge, color, DTS_LEFT|DTS_RIGHT );
}
/*
@@ -2031,16 +1977,170 @@ EXPORT void CleanSegs(dynArr_t * seg_p) {
seg_p->max = 0;
}
+/*
+ * Copy Segs from one array to another
+ */
+EXPORT void AppendSegsToArray(dynArr_t * seg_to, dynArr_t * seg_from) {
+ if (seg_from->cnt ==0) return;
+ int j = 0;
+ DYNARR_APPEND(trkSeg_t, * seg_to, seg_from->cnt);
+ for (int i=0; i<seg_from->cnt;i++,j++) {
+ trkSeg_p from_p = &DYNARR_N(trkSeg_t, * seg_from,j);
+ trkSeg_p to_p = &DYNARR_N(trkSeg_t, * seg_to,i);
+ memcpy((void *)to_p,(void *)from_p,sizeof( trkSeg_t));
+ if (from_p->type == SEG_BEZLIN || from_p->type == SEG_BEZTRK) {
+ if (from_p->bezSegs.ptr) {
+ to_p->bezSegs.ptr = memdup(from_p->bezSegs.ptr,from_p->bezSegs.cnt*sizeof(trkSeg_t));
+ }
+ }
+ if (from_p->type == SEG_POLY || from_p->type == SEG_FILPOLY) {
+ if (from_p->u.p.pts) {
+ to_p->u.p.pts = memdup(from_p->u.p.pts,from_p->u.p.cnt*sizeof(pts_t));
+ }
+ }
+ }
+}
+
+EXPORT void AppendTransformedSegs(dynArr_t * seg_to, dynArr_t * seg_from, coOrd orig, coOrd rotateOrig, ANGLE_T angle) {
+ if (seg_from->cnt ==0) return;
+ int j = 0;
+ DYNARR_APPEND(trkSeg_t, * seg_to, seg_from->cnt);
+ for (int i=0; i<seg_from->cnt;i++,j++) {
+ trkSeg_p from_p = &DYNARR_N(trkSeg_t, * seg_from,j);
+ trkSeg_p to_p = &DYNARR_N(trkSeg_t, * seg_to,i);
+ memcpy((void *)to_p,(void *)from_p,sizeof( trkSeg_t));
+ if (from_p->type == SEG_BEZLIN || from_p->type == SEG_BEZTRK) {
+ if (from_p->bezSegs.ptr) {
+ to_p->bezSegs.ptr = memdup(from_p->bezSegs.ptr,from_p->bezSegs.cnt*sizeof(trkSeg_t));
+ }
+ }
+ if (from_p->type == SEG_POLY || from_p->type == SEG_FILPOLY) {
+ if (from_p->u.p.pts) {
+ to_p->u.p.pts = memdup(from_p->u.p.pts,from_p->u.p.cnt*sizeof(pts_t));
+ }
+ }
+ RotateSegs(1,to_p,rotateOrig,angle);
+ coOrd move;
+ move.x = orig.x - rotateOrig.x;
+ move.y = orig.y - rotateOrig.y;
+ MoveSegs(1,to_p,move);
+ }
+}
+
EXPORT void CopyPoly(trkSeg_p p, wIndex_t segCnt) {
- coOrd * newPts;
+ pts_t * newPts;
for (int i=0;i<segCnt;i++,p++) {
- if (p->type == SEG_POLY || p->type == SEG_FILPOLY) {
- newPts = memdup( p->u.p.pts, p->u.p.cnt*sizeof (coOrd) );
+ if ((p->type == SEG_POLY) || (p->type == SEG_FILPOLY)) {
+ newPts = memdup( p->u.p.pts, p->u.p.cnt*sizeof (pts_t) );
p->u.p.pts = newPts;
}
+ if ( p->type == SEG_TEXT ) {
+ p->u.t.string = MyStrdup( p->u.t.string );
+ }
}
}
-
-
+EXPORT wBool_t CompareSegs(
+ trkSeg_p segPtr1,
+ int segCnt1,
+ trkSeg_p segPtr2,
+ int segCnt2 )
+{
+ char * cp = message+strlen(message);
+ if ( segCnt1 != segCnt2 ) {
+ sprintf( cp, "SegCnt %d %d\n", segCnt1, segCnt2 );
+ return FALSE;
+ }
+ char * cq = cp-2;;
+ for ( int segInx = 0; segInx < segCnt1; segInx++ ) {
+ cp = cq;
+ sprintf( cp, "SEG:%d - ", segInx );
+ cp += strlen( cp );
+ trkSeg_p segP1 = &segPtr1[segInx];
+ trkSeg_p segP2 = &segPtr2[segInx];
+ REGRESS_CHECK_INT( "Type", segP1, segP2, type );
+ REGRESS_CHECK_COLOR( "Color", segP1, segP2, color );
+ switch( segP1->type ) {
+ case SEG_DIMLIN:
+ case SEG_TBLEDGE:
+ case SEG_BENCH:
+ // These don't have widths
+ break;
+ default:
+ REGRESS_CHECK_WIDTH( "Width", segP1, segP2, width );
+ }
+ switch( segP1->type ) {
+ case SEG_DIMLIN:
+ case SEG_TBLEDGE:
+ // These don't have color
+ break;
+ default:
+ REGRESS_CHECK_COLOR( "Color", segP1, segP2, color );
+ }
+ switch( segP1->type ) {
+ case SEG_STRTRK:
+ case SEG_STRLIN:
+ case SEG_DIMLIN:
+ case SEG_BENCH:
+ case SEG_TBLEDGE:
+ REGRESS_CHECK_POS( "Pos[0]", segP1, segP2, u.l.pos[0] )
+ REGRESS_CHECK_POS( "Pos[1]", segP1, segP2, u.l.pos[1] )
+// REGRESS_CHECK_POS( "Pos[2]", segP1, segP2, u.l.pos[2] )
+// REGRESS_CHECK_POS( "Pos[3]", segP1, segP2, u.l.pos[3] )
+ REGRESS_CHECK_ANGLE( "Angle", segP1, segP2, u.l.angle )
+ REGRESS_CHECK_INT( "Option", segP1, segP2, u.l.option )
+ break;
+ case SEG_BEZTRK:
+ case SEG_BEZLIN:
+ break; // u.b
+ case SEG_CRVLIN:
+ case SEG_CRVTRK:
+ case SEG_FILCRCL:
+ REGRESS_CHECK_POS( "Center", segP1, segP2, u.c.center )
+ REGRESS_CHECK_ANGLE( "A0", segP1, segP2, u.c.a0 )
+ REGRESS_CHECK_ANGLE( "A1", segP1, segP2, u.c.a1 )
+ REGRESS_CHECK_DIST( "Radius", segP1, segP2, u.c.radius )
+ break; // u.c
+ case SEG_JNTTRK:
+ REGRESS_CHECK_POS( "Pos", segP1, segP2, u.j.pos )
+ REGRESS_CHECK_ANGLE( "Angle", segP1, segP2, u.j.angle )
+ REGRESS_CHECK_DIST( "R", segP1, segP2, u.j.R )
+ REGRESS_CHECK_DIST( "L", segP1, segP2, u.j.L )
+ REGRESS_CHECK_DIST( "L0", segP1, segP2, u.j.l0 )
+ REGRESS_CHECK_DIST( "L1", segP1, segP2, u.j.l1 );
+ REGRESS_CHECK_INT( "Flip", segP1, segP2, u.j.flip )
+ REGRESS_CHECK_INT( "Negate", segP1, segP2, u.j.negate )
+ REGRESS_CHECK_INT( "Scurve", segP1, segP2, u.j.Scurve )
+ break; // u.j
+ case SEG_TEXT:
+ REGRESS_CHECK_POS( "Pos", segP1, segP2, u.t.pos )
+ REGRESS_CHECK_ANGLE( "Angle", segP1, segP2, u.t.angle )
+ // CHECK fontP
+ REGRESS_CHECK_DIST( "Fontsize", segP1, segP2, u.t.fontSize )
+ REGRESS_CHECK_INT( "Boxed", segP1, segP2, u.t.boxed )
+ // CHECK string
+ break; // u.t
+ case SEG_POLY:
+ case SEG_FILPOLY:
+ REGRESS_CHECK_INT( "Cnt", segP1, segP2, u.p.cnt )
+ // CHECK pts
+ REGRESS_CHECK_POS( "Orig", segP1, segP2, u.p.orig )
+ REGRESS_CHECK_ANGLE( "Angle", segP1, segP2, u.p.angle )
+ break; // u.p
+ // EndPts
+ case SEG_UNCEP:
+ case SEG_CONEP:
+ break;
+ // Turnout/Struct
+ case SEG_PATH:
+ case SEG_SPEC:
+ case SEG_CUST:
+ case SEG_DOFF:
+ break;
+ default:
+ break;
+ }
+ }
+ return TRUE;
+}
diff --git a/app/bin/tstraigh.c b/app/bin/tstraigh.c
index 5cf1cda..f9b666f 100644
--- a/app/bin/tstraigh.c
+++ b/app/bin/tstraigh.c
@@ -163,7 +163,7 @@ static void UpdateStraight( track_p trk, int inx, descData_p descUpd, BOOL_T fin
case Z1:
ep = (inx==Z0?0:1);
UpdateTrkEndElev( trk, ep, GetTrkEndElevUnmaskedMode(trk,ep), strData.elev[ep], NULL );
- ComputeElev( trk, 1-ep, FALSE, &strData.elev[1-ep], NULL );
+ ComputeElev( trk, 1-ep, FALSE, &strData.elev[1-ep], NULL, TRUE );
if ( strData.length > minLength )
strData.grade = fabs( (strData.elev[0]-strData.elev[1])/strData.length )*100.0;
else
@@ -242,8 +242,8 @@ static void DescribeStraight( track_p trk, char * str, CSIZE_T len )
fix1 = GetTrkEndTrk(trk,1)!=NULL;
strData.endPt[0] = GetTrkEndPos(trk,0);
strData.endPt[1] = GetTrkEndPos(trk,1);
- ComputeElev( trk, 0, FALSE, &strData.elev[0], NULL );
- ComputeElev( trk, 1, FALSE, &strData.elev[1], NULL );
+ ComputeElev( trk, 0, FALSE, &strData.elev[0], NULL, FALSE );
+ ComputeElev( trk, 1, FALSE, &strData.elev[1], NULL, FALSE );
strData.length = FindDistance( strData.endPt[0], strData.endPt[1] );
strData.layerNumber = GetTrkLayer(trk);
if ( strData.length > minLength )
@@ -274,18 +274,12 @@ static DIST_T DistanceStraight( track_p t, coOrd * p )
static void DrawStraight( track_p t, drawCmd_p d, wDrawColor color )
{
- long widthOptions = DTS_LEFT|DTS_RIGHT|DTS_TIES;
- if (GetTrkWidth(t) == 2)
- widthOptions |= DTS_THICK2;
- if (GetTrkWidth(t) == 3)
- widthOptions |= DTS_THICK3;
+ long widthOptions = DTS_LEFT|DTS_RIGHT;
DrawStraightTrack( d, GetTrkEndPos(t,0), GetTrkEndPos(t,1),
GetTrkEndAngle(t,0),
- t, GetTrkGauge(t), color, widthOptions );
- if ( (d->funcs->options & wDrawOptTemp) == 0 && (d->options & DC_QUICK) == 0 ) {
- DrawEndPt( d, t, 0, color );
- DrawEndPt( d, t, 1, color );
- }
+ t, color, widthOptions );
+ DrawEndPt( d, t, 0, color );
+ DrawEndPt( d, t, 1, color );
}
static void DeleteStraight( track_p t )
@@ -297,14 +291,14 @@ static BOOL_T WriteStraight( track_p t, FILE * f )
BOOL_T rc = TRUE;
rc &= fprintf(f, "STRAIGHT %d %d %ld 0 0 %s %d\n",
GetTrkIndex(t), GetTrkLayer(t), (long)GetTrkWidth(t),
- GetTrkScaleName(t), GetTrkVisible(t) )>0;
+ GetTrkScaleName(t), GetTrkVisible(t)|(GetTrkNoTies(t)?1<<2:0)|(GetTrkBridge(t)?1<<3:0) )>0;
rc &= WriteEndPt( f, t, 0 );
rc &= WriteEndPt( f, t, 1 );
- rc &= fprintf(f, "\tEND\n" )>0;
+ rc &= fprintf(f, "\t%s\n", END_SEGS)>0;
return rc;
}
-static void ReadStraight( char * line )
+static BOOL_T ReadStraight( char * line )
{
track_p trk;
wIndex_t index;
@@ -314,15 +308,25 @@ static void ReadStraight( char * line )
long options;
if ( !GetArgs( line+8, paramVersion<3?"dXZsd":"dLl00sd", &index, &layer, &options, scale, &visible ) )
- return;
+ return FALSE;
+ if ( !ReadSegs() )
+ return FALSE;
trk = NewTrack( index, T_STRAIGHT, 0, 0 );
SetTrkScale( trk, LookupScale(scale) );
- SetTrkVisible(trk, visible);
+ if ( paramVersion < 3 ) {
+ SetTrkVisible(trk, visible!=0);
+ SetTrkNoTies(trk, FALSE);
+ SetTrkBridge(trk, FALSE);
+ } else {
+ SetTrkVisible(trk, visible&2);
+ SetTrkNoTies(trk, visible&4);
+ SetTrkBridge(trk, visible&8);
+ }
SetTrkLayer(trk, layer);
SetTrkWidth( trk, (int)(options&3) );
- ReadSegs();
SetEndPts( trk, 2 );
ComputeBoundingBox( trk );
+ return TRUE;
}
static void MoveStraight( track_p trk, coOrd orig )
@@ -362,11 +366,16 @@ static BOOL_T SplitStraight( track_p trk, coOrd pos, EPINX_T ep, track_p *leftov
{
track_p trk1;
- trk1 = NewStraightTrack( GetTrkEndPos(trk,ep), pos );
+ trk1 = NewStraightTrack( 1-ep?GetTrkEndPos(trk,ep):pos, 1-ep?pos:GetTrkEndPos(trk,ep) );
+ DIST_T height;
+ int opt;
+ GetTrkEndElev(trk,ep,&opt,&height);
+ UpdateTrkEndElev( trk1, ep, opt, height, (opt==ELEV_STATION)?GetTrkEndElevStation(trk,ep):NULL );
AdjustStraightEndPt( trk, ep, pos );
+ UpdateTrkEndElev( trk, ep, ELEV_NONE, 0, NULL);
*leftover = trk1;
- *ep0 = 1;
- *ep1 = 0;
+ *ep0 = 1-ep;
+ *ep1 = ep;
return TRUE;
}
@@ -413,7 +422,7 @@ static BOOL_T EnumerateStraight( track_p trk )
return TRUE;
}
-static BOOL_T TrimStraight( track_p trk, EPINX_T ep, DIST_T dist )
+static BOOL_T TrimStraight( track_p trk, EPINX_T ep, DIST_T dist, coOrd endpos, ANGLE_T angle, DIST_T radius, coOrd center )
{
DIST_T d;
ANGLE_T a;
@@ -427,8 +436,10 @@ static BOOL_T TrimStraight( track_p trk, EPINX_T ep, DIST_T dist )
UndrawNewTrack( trk );
AdjustStraightEndPt( trk, ep, pos );
DrawNewTrack( trk );
- } else
+ } else {
+ UndrawNewTrack( trk );
DeleteTrack( trk, TRUE );
+ }
return TRUE;
}
@@ -493,6 +504,7 @@ BOOL_T ExtendStraightToJoin(
DisconnectTracks( trk1, 1-ep1, trk1x, ep1x );
}
if (trk2) {
+ UndrawNewTrack( trk1 );
DeleteTrack( trk1, TRUE );
} else {
trk2 = trk1;
@@ -555,17 +567,13 @@ static STATUS_T ModifyStraight( track_p trk, wAction_t action, coOrd pos )
if (action == C_MOVE)
InfoMessage( _("Straight: Length=%s Angle=%0.3f"),
FormatDistance( d ), PutAngle( GetTrkEndAngle( trk, ep ) ) );
- MainRedraw();
- MapRedraw();
return C_CONTINUE;
case C_UP:
if (valid)
AdjustStraightEndPt( trk, ep, tempSegs(0).u.l.pos[1] );
tempSegs_da.cnt = 0;
- DrawNewTrack( trk );
- MainRedraw();
- MapRedraw();
+ DrawNewTrack( trk );
return C_TERMINATE;
default:
@@ -584,9 +592,8 @@ static DIST_T GetLengthStraight( track_p trk )
static BOOL_T GetParamsStraight( int inx, track_p trk, coOrd pos, trackParams_t * params )
{
params->type = curveTypeStraight;
- if ( inx == PARAMS_PARALLEL ) {
- params->ep = 0;
- } else if (inx == PARAMS_CORNU ){
+ if ( inx == PARAMS_NODES ) return FALSE;
+ if ((inx == PARAMS_CORNU) || (inx == PARAMS_1ST_JOIN) || (inx == PARAMS_2ND_JOIN) ){
params->ep = PickEndPoint( pos, trk);
params->arcP = zero;
params->arcR = 0.0;
@@ -627,6 +634,7 @@ static BOOL_T QueryStraight( track_p trk, int query )
case Q_ISTRACK:
case Q_CORNU_CAN_MODIFY:
case Q_MODIFY_CAN_SPLIT:
+ case Q_CAN_EXTEND:
return TRUE;
default:
return FALSE;
@@ -647,9 +655,11 @@ static BOOL_T MakeParallelStraight(
track_p trk,
coOrd pos,
DIST_T sep,
+ DIST_T factor,
track_p * newTrkR,
coOrd * p0R,
- coOrd * p1R )
+ coOrd * p1R,
+ BOOL_T track)
{
ANGLE_T angle = GetTrkEndAngle(trk,1);
coOrd p0, p1;
@@ -660,12 +670,23 @@ static BOOL_T MakeParallelStraight(
Translate( &p0, GetTrkEndPos(trk,0), angle, sep );
Translate( &p1, GetTrkEndPos(trk,1), angle, sep );
if ( newTrkR ) {
- *newTrkR = NewStraightTrack( p0, p1 );
+ if (track)
+ *newTrkR = NewStraightTrack( p0, p1 );
+ else {
+ tempSegs(0).color = wDrawColorBlack;
+ tempSegs(0).width = 0;
+ tempSegs_da.cnt = 1;
+ tempSegs(0).type = SEG_STRLIN;
+ tempSegs(0).u.l.pos[0] = p0;
+ tempSegs(0).u.l.pos[1] = p1;
+ *newTrkR = MakeDrawFromSeg( zero, 0.0, &tempSegs(0) );
+ }
+
} else {
tempSegs(0).color = wDrawColorBlack;
tempSegs(0).width = 0;
tempSegs_da.cnt = 1;
- tempSegs(0).type = SEG_STRTRK;
+ tempSegs(0).type = track?SEG_STRTRK:SEG_STRLIN;
tempSegs(0).u.l.pos[0] = p0;
tempSegs(0).u.l.pos[1] = p1;
}
@@ -675,6 +696,12 @@ static BOOL_T MakeParallelStraight(
}
+static wBool_t CompareStraight( track_cp trk1, track_cp trk2 )
+{
+ return TRUE;
+}
+
+
static trackCmd_t straightCmds = {
"STRAIGHT",
DrawStraight,
@@ -704,8 +731,13 @@ static trackCmd_t straightCmds = {
NULL,
NULL,
NULL,
- MakeParallelStraight };
-
+ MakeParallelStraight,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ CompareStraight };
EXPORT void StraightSegProc(
segProc_e cmd,
@@ -810,6 +842,8 @@ EXPORT void StraightSegProc(
*/
+
+
track_p NewStraightTrack( coOrd p0, coOrd p1 )
{
track_p t;
diff --git a/app/bin/unittest/CMakeLists.txt b/app/bin/unittest/CMakeLists.txt
index 32e2ddb..7055d0b 100644
--- a/app/bin/unittest/CMakeLists.txt
+++ b/app/bin/unittest/CMakeLists.txt
@@ -1,10 +1,10 @@
# build unit tests for the xtrkcad library
-add_executable(dxfformattest
+add_executable(dxfformattest
dxfformattest.c
../dxfformat.c
)
-
+
target_link_libraries(dxfformattest
dynstring
${LIBS})
@@ -29,3 +29,35 @@ target_link_libraries(defaultstest
${LIBS})
add_test(DefaultsTest defaultstest)
+
+add_executable(shortentest
+ shortentest.c
+ ../shortentext.c
+ )
+
+target_link_libraries(shortentest
+ ${LIBS})
+
+add_test(ShortenTest shortentest)
+
+add_test(CatalogTest catalogtest)
+
+set (TESTXTP
+ "atl83ho.xtp" "atlasn.xtp" "HO-Peco-Code83.xtp"
+ )
+
+foreach(testfile IN LISTS TESTXTP )
+ configure_file ( ${CMAKE_CURRENT_SOURCE_DIR}/testfiles/${testfile}
+ ${CMAKE_CURRENT_BINARY_DIR}
+ COPYONLY )
+endforeach()
+
+add_executable(catalogtest
+ catalogtest.c
+ ../partcatalog.c
+ ../paths.c
+ )
+
+target_link_libraries(catalogtest
+ dynstring
+ ${LIBS}) \ No newline at end of file
diff --git a/app/bin/unittest/catalogtest.c b/app/bin/unittest/catalogtest.c
new file mode 100644
index 0000000..6025990
--- /dev/null
+++ b/app/bin/unittest/catalogtest.c
@@ -0,0 +1,124 @@
+/** \file catalog.c
+* Unit tests for part catalog management
+*/
+
+#include <malloc.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <string.h>
+#include <stdio.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include "../include/partcatalog.h"
+
+TrackLibrary *trackLib;
+CatalogEntry *catalog;
+
+
+// some dummy functions to suppress linking problems
+wGetUserHomeDir()
+{
+
+}
+
+wPrefSetString()
+{
+
+}
+
+wPrefGetString()
+{
+
+}
+
+AbortProg()
+{
+
+}
+
+static void
+CreateLib(void **state)
+{
+ (void)state;
+ trackLib = CreateLibrary(".");
+ assert_non_null((void *)trackLib);
+}
+
+static void ScanEmptyDir(void **state)
+{
+ (void)state;
+ bool success;
+ EmptyCatalog(trackLib->catalog);
+ success = GetTrackFiles(trackLib, "//");
+ assert_false(success);
+}
+
+static void ScanTestFiles(void **state)
+{
+ (void)state;
+ bool success;
+ EmptyCatalog(trackLib->catalog);
+ success = GetTrackFiles(trackLib, ".");
+ assert_true(success);
+}
+
+static void CreateIndex(void **state)
+{
+ (void)state;
+ unsigned int words = CreateLibraryIndex(trackLib);
+ assert_true(words > 0);
+}
+
+static void SearchNothing(void **state)
+{
+ (void)state;
+ unsigned int files = SearchLibrary(trackLib, "djfhdkljhf", catalog);
+ assert_true(files == 0);
+ EmptyCatalog(catalog);
+}
+
+static void SearchSingle(void **state)
+{
+ (void)state;
+ int files = SearchLibrary(trackLib, "peco", catalog );
+ assert_true(files==1);
+ EmptyCatalog(catalog);
+}
+
+static void SearchMultiple(void **state)
+{
+ (void)state;
+ int files = SearchLibrary(trackLib, "atlas", catalog);
+ assert_true(files == 2);
+ EmptyCatalog(catalog);
+}
+
+static void FilterTest(void **state)
+{
+ (void)state;
+ bool res;
+
+ res = FilterKeyword("test");
+ assert_false(res);
+ assert_true(FilterKeyword("&"));
+ assert_false(FilterKeyword("n"));
+}
+
+int main(void)
+{
+ const struct CMUnitTest tests[] = {
+ cmocka_unit_test(CreateLib),
+ cmocka_unit_test(ScanEmptyDir),
+ cmocka_unit_test(ScanTestFiles),
+ cmocka_unit_test(CreateIndex),
+ cmocka_unit_test(SearchNothing),
+ cmocka_unit_test(SearchSingle),
+ cmocka_unit_test(SearchMultiple),
+ cmocka_unit_test(FilterTest),
+ };
+
+ catalog = InitCatalog();
+
+ return cmocka_run_group_tests(tests, NULL, NULL);
+} \ No newline at end of file
diff --git a/app/bin/unittest/defaultstest.c b/app/bin/unittest/defaultstest.c
index d877f46..e930468 100644
--- a/app/bin/unittest/defaultstest.c
+++ b/app/bin/unittest/defaultstest.c
@@ -56,11 +56,17 @@ wPrefGetFloatBasic(const char *section, const char *name, double *result, double
return(TRUE);
}
-const char * wPrefGetStringBasic(const char *section, const char *name)
+char * wPrefGetStringBasic(const char *section, const char *name)
{
return(NULL);
}
+/* dummy to make the linker happy */
+void
+wPrefSetInteger(const char *section, const char *name, long value)
+{
+ return;
+}
static void BinarySearch(void **state)
{
int result;
diff --git a/app/bin/unittest/pathstest.c b/app/bin/unittest/pathstest.c
index b7e792e..3ee830e 100644
--- a/app/bin/unittest/pathstest.c
+++ b/app/bin/unittest/pathstest.c
@@ -41,6 +41,11 @@ char *wPrefGetStringExt(const char *section, const char *key)
return(NULL);
}
+char *wPrefGetString(const char *section, const char *key)
+{
+ return(DEFAULTPATH);
+}
+
const char *wGetUserHomeDir(void)
{
return(DEFAULTPATH);
diff --git a/app/bin/unittest/shortentest.c b/app/bin/unittest/shortentest.c
new file mode 100644
index 0000000..4d24b84
--- /dev/null
+++ b/app/bin/unittest/shortentest.c
@@ -0,0 +1,152 @@
+/** \file stringutiltest.c
+* Unit tests for the dxfformat module
+*/
+
+#include <malloc.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <string.h>
+#include <stdio.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <shortentext.h>
+
+#define RESULTSTRING "This is a test!"
+
+
+static void NoRemoveBlanks(void **state)
+{
+ char *result = malloc(strlen(RESULTSTRING) + 20);
+ (void)state;
+
+ RemoveFormatChars(RESULTSTRING, result);
+ assert_string_equal(result, RESULTSTRING);
+
+ RemoveFormatChars(" " RESULTSTRING, result);
+ assert_string_equal(result, " " RESULTSTRING);
+}
+
+static void RemoveMultipleBlanks(void **state)
+{
+ char *result = malloc(strlen(RESULTSTRING) + 20);
+ (void)state;
+
+ RemoveFormatChars("This is a test!", result);
+ assert_string_equal(result, RESULTSTRING);
+
+ RemoveFormatChars("This is a test!", result);
+ assert_string_equal(result, RESULTSTRING);
+}
+
+
+static void RemoveTabs(void **state)
+{
+ char *result = malloc(strlen(RESULTSTRING) + 20);
+ (void)state;
+
+ RemoveFormatChars("This \tis\ta test!", result);
+ assert_string_equal(result, RESULTSTRING);
+
+ RemoveFormatChars("This\t\tis a\ttest!", result);
+ assert_string_equal(result, RESULTSTRING);
+
+ RemoveFormatChars("\tThis is a test!", result);
+ assert_string_equal(result, " " RESULTSTRING);
+}
+
+static void RemoveCRs(void **state)
+{
+ char *result = malloc(strlen(RESULTSTRING) + 20);
+ (void)state;
+
+ RemoveFormatChars("This\r is a test!", result);
+ assert_string_equal(result, RESULTSTRING);
+
+ RemoveFormatChars("This\ris a test!", result);
+ assert_string_equal(result, RESULTSTRING);
+
+ RemoveFormatChars("This is a test!\r", result);
+ assert_string_equal(result, RESULTSTRING);
+}
+
+static void RemoveLFs(void **state)
+{
+ char *result = malloc(strlen(RESULTSTRING) + 20);
+ (void)state;
+
+ RemoveFormatChars("This\n is a test!", result);
+ assert_string_equal(result, RESULTSTRING);
+
+ RemoveFormatChars("This\nis a test!", result);
+ assert_string_equal(result, RESULTSTRING);
+
+ RemoveFormatChars("\nThis is a test!", result);
+ assert_string_equal(result, " " RESULTSTRING);
+
+ RemoveFormatChars("This is a test!\r\n", result);
+ assert_string_equal(result, RESULTSTRING);
+}
+
+#define LONGSTRING "The strrchr() function in C/C++ locates the last occurrence of a character in a string. It returns a pointer to the last occurrence in the string. The terminating null character is considered part of the C string. ... str : specifies the pointer to the null terminated string to be searched for."
+
+static void NoEllipsizeText(void **state)
+{
+ char *result = malloc(strlen(RESULTSTRING) + 20);
+
+ (void)state;
+
+ EllipsizeString(RESULTSTRING, result, strlen(RESULTSTRING) + 10);
+ assert_string_equal(result, RESULTSTRING);
+
+ EllipsizeString(RESULTSTRING, NULL, strlen(RESULTSTRING) + 10);
+ assert_string_equal(result, RESULTSTRING);
+}
+
+static void EllipsizeText(void **state)
+{
+ char *result = malloc(sizeof(LONGSTRING));
+ (void)state;
+
+ EllipsizeString(LONGSTRING, result, strlen(LONGSTRING));
+ assert_string_equal(result, LONGSTRING);
+
+ EllipsizeString(LONGSTRING, result, 40);
+ assert_string_equal(result, "The strrchr() function in C/C++...");
+
+ EllipsizeString(LONGSTRING, result, 23);
+ assert_string_equal(result, "The strrchr()...");
+
+ strcpy(result, LONGSTRING);
+ EllipsizeString(result, NULL, 23);
+ assert_string_equal(result, "The strrchr()...");
+
+}
+
+static void LongText(void **state)
+{
+ char *result = malloc(sizeof(LONGSTRING));
+ (void)state;
+
+ strcpy(result, "abcdefghijklmnopqrstuvwxyz");
+ EllipsizeString(result, NULL, 23);
+ assert_string_equal(result, "abcdefghijklmnopqrst...");
+
+ EllipsizeString("abcdefghijklmnopqrstuvwxyz", result, 10);
+ assert_string_equal(result, "abcdefg...");
+}
+
+int main(void)
+{
+ const struct CMUnitTest tests[] = {
+ cmocka_unit_test(NoRemoveBlanks),
+ cmocka_unit_test(RemoveMultipleBlanks),
+ cmocka_unit_test(RemoveTabs),
+ cmocka_unit_test(RemoveCRs),
+ cmocka_unit_test(RemoveLFs),
+ cmocka_unit_test(NoEllipsizeText),
+ cmocka_unit_test(EllipsizeText),
+ cmocka_unit_test(LongText),
+ };
+ return cmocka_run_group_tests(tests, NULL, NULL);
+} \ No newline at end of file
diff --git a/app/bin/unittest/testfiles/HO-Peco-Code83.xtp b/app/bin/unittest/testfiles/HO-Peco-Code83.xtp
new file mode 100644
index 0000000..09bf426
--- /dev/null
+++ b/app/bin/unittest/testfiles/HO-Peco-Code83.xtp
@@ -0,0 +1,236 @@
+CONTENTS Peco North American Code 83 HO Scale Turnouts
+#Updated based on PECO Website and PDF's
+SUBCONTENTS Peco Code 83 HO Turnouts
+TURNOUT HO "PECO Code 83 #5 Left Hand Turnout SL-8352/SLE-8352"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 8.259842 0.000000 90.000000
+ E 8.259842 1.000000 78.600000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 8.259842 0.000000
+ C 0 0.000000 -26.558075 0.649635 26.558075 168.599924 11.400152
+ S 0 0.000000 5.899063 0.523973 8.259842 1.000000
+END
+TURNOUT HO "PECO Code 83 #5 Right Hand Turnout SL-8351/SLE-8351"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 8.259842 0.000000 90.000000
+ E 8.259842 -1.000000 101.400000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 8.259842 0.000000
+ C 0 0.000000 26.558075 0.649494 -26.558075 0.000076 11.400152
+ S 0 0.000000 5.899063 -0.523973 8.259842 -1.000000
+END
+TURNOUT HO "PECO Code 83 #6 Left Hand Turnout SL-8362/SLE-8362"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 9.192913 0.000000 90.000000
+ E 9.192913 1.000000 80.500000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 9.192913 0.000000
+ C 0 0.000000 -30.900336 0.649641 30.900336 170.499924 9.500152
+ S 0 0.000000 5.749703 0.423792 9.192913 1.000000
+END
+TURNOUT HO "PECO Code 83 #6 Right Hand Turnout SL-8361/SLE-8361"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 9.192913 0.000000 90.000000
+ E 9.192913 -1.000000 99.500000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 9.192913 0.000000
+ C 0 0.000000 30.900336 0.649477 -30.900336 0.000076 9.500152
+ S 0 0.000000 5.749703 -0.423792 9.192913 -1.000000
+END
+TURNOUT HO "PECO Code 83 #8 Left Hand Turnout SL-8382/SLE-8382"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 12.649606 0.000000 90.000000
+ E 12.649606 1.000000 82.850000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 12.649606 0.000000
+ C 0 0.000000 -64.478236 0.649686 64.478236 172.849924 7.150152
+ S 0 0.000000 8.675202 0.501423 12.649606 1.000000
+END
+TURNOUT HO "PECO Code 83 #8 Right Hand Turnout SL-8381/SLE-8381"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 12.649606 0.000000 90.000000
+ E 12.649606 -1.000000 97.150000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 12.649606 0.000000
+ C 0 0.000000 64.478236 0.649343 -64.478236 0.000076 7.150152
+ S 0 0.000000 8.675202 -0.501423 12.649606 -1.000000
+END
+
+SUBCONTENTS Peco Code 83 HO Wye Turnouts
+TURNOUT HO "PECO Code 83 #4 WYE Turnout SL-8348/SLE-8348"
+ P "Left" 1 2 3
+ P "Right" 1 4 5
+ E 0.000000 0.000000 270.000000
+ E 7.159055 0.500000 82.850000
+ E 7.159055 -0.500000 97.150000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ C 0 0.000000 -40.393551 0.649654 40.393551 172.849924 7.150152
+ S 0 0.000000 5.677382 0.314125 7.159055 0.500000
+ C 0 0.000000 40.393551 0.649439 -40.393551 0.000076 7.150152
+ S 0 0.000000 5.677382 -0.314125 7.159055 -0.500000
+END
+
+SUBCONTENTS Peco Code 83 HO Crossings
+TURNOUT HO "PECO Code 83 #6 Diamond Crossing SL-8364/SLE-8364"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 12.035433 0.000000 90.000000
+ E 0.082528 0.993201 279.500000
+ E 11.952905 -0.993201 99.500000
+ S 0 0.000000 0.000000 0.000000 12.035433 0.000000
+ S 0 0.000000 0.082528 0.993201 11.952905 -0.993201
+END
+TURNOUT HO "PECO Code 83 90d Crossing SL-8390"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 2.000000 0.000000 90.000000
+ E 1.000000 -1.000000 180.000000
+ E 1.000000 1.000000 0.000000
+ S 0 0.000000 0.000000 0.000000 2.000000 0.000000
+ S 0 0.000000 1.000000 1.000000 1.000000 -1.000000
+END
+
+SUBCONTENTS Peco Code 83 HO Curved Turnouts
+TURNOUT HO "Peco Code 83 #7 Curved Left Turnout SL-8377/SLE-8377"
+ P "Normal" 1 4 5
+ P "Reverse" 1 2 3
+ E 0.000000 0.000000 270.000000
+ E 11.106693 0.984252 81.000000
+ E 10.865748 1.968504 72.000000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ C 0 0.000000 -26.251070 0.649635 26.251070 161.999924 18.000152
+ S 0 0.000000 8.761686 1.284838 10.865748 1.968504
+ C 0 0.000000 -53.910688 0.649672 53.910688 170.999924 9.000152
+ S 0 0.000000 9.083224 0.663751 11.106693 0.984252
+END
+TURNOUT HO "Peco Code 83 #7 Curved Right Turnout SL-8376/SLE-8376"
+ P "Normal" 1 4 5
+ P "Reverse" 1 2 3
+ E 0.000000 0.000000 270.000000
+ E 11.106693 -0.984252 99.000000
+ E 10.865748 -1.968504 108.000000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ C 0 0.000000 26.251070 0.649496 -26.251070 0.000076 18.000152
+ S 0 0.000000 8.761686 -1.284838 10.865748 -1.968504
+ C 0 0.000000 53.910688 0.649385 -53.910688 0.000076 9.000152
+ S 0 0.000000 9.083224 -0.663751 11.106693 -0.984252
+END
+
+SUBCONTENTS Peco Code 83 HO Slip Turnouts
+TURNOUT HO "Peco Code 83 #6 Double Slip Switch SL-U8363"
+ P "Normal" 1 2 3 0 4 5 6
+ P "Reverse" 1 7 6 0 4 8 3
+ E 0.000000 0.000000 270.000000
+ E 12.035433 0.000000 90.000000
+ E 0.082528 0.993201 279.500000
+ E 11.952905 -0.993201 99.500000
+ S 0 0.000000 0.000000 0.000000 1.299468 0.000000
+ S 0 0.000000 1.299468 0.000000 10.735965 0.000000
+ S 0 0.000000 10.735965 0.000000 12.035433 0.000000
+ S 0 0.000000 0.082528 0.993201 1.363761 0.778782
+ S 0 0.000000 1.363761 0.778782 10.671672 -0.778782
+ S 0 0.000000 10.671672 -0.778782 11.952905 -0.993201
+ C 0 0.000000 56.784006 1.299241 -56.784006 0.000076 9.500152
+ C 0 0.000000 -56.784006 10.736040 56.783993 180.000076 9.500152
+END
+
+SUBCONTENTS Peco Code 83 HO Inspection Pit
+TURNOUT HO "Peco Code 83 Inspection Pit SL-8356"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 11.692913 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 11.692913 0.000000
+ F 15720651 0.000000 4
+ 0.000000 0.551091 0
+ 11.692913 0.551091 0
+ 11.692913 -0.551091 0
+ 0.000000 -0.551091 0
+ F 12632256 0.000000 4
+ 0.000000 0.280000 0
+ 0.560000 0.280000 0
+ 0.560000 -0.280000 0
+ 0.000000 -0.280000 0
+ L 0 0.020000 0.000000 0.280000 0.000000 -0.280000
+ L 0 0.020000 0.112000 0.280000 0.112000 -0.280000
+ L 0 0.020000 0.224000 0.280000 0.224000 -0.280000
+ L 0 0.020000 0.336000 0.280000 0.336000 -0.280000
+ L 0 0.020000 0.448000 0.280000 0.448000 -0.280000
+ L 0 0.020000 0.560000 0.280000 0.560000 -0.280000
+ F 12632256 0.000000 4
+ 11.132913 0.280000 0
+ 11.692913 0.280000 0
+ 11.692913 -0.280000 0
+ 11.132913 -0.280000 0
+ L 0 0.020000 11.132913 0.280000 11.132913 -0.280000
+ L 0 0.020000 11.244913 0.280000 11.244913 -0.280000
+ L 0 0.020000 11.356913 0.280000 11.356913 -0.280000
+ L 0 0.020000 11.468913 0.280000 11.468913 -0.280000
+ L 0 0.020000 11.580913 0.280000 11.580913 -0.280000
+ L 0 0.020000 11.692913 0.280000 11.692913 -0.280000
+ A 0 0.020000 0.062500 0.974409 0.000000 0.000000 360.000000
+ A 0 0.020000 0.062500 2.923228 0.000000 0.000000 360.000000
+ A 0 0.020000 0.062500 4.872047 0.000000 0.000000 360.000000
+ A 0 0.020000 0.062500 6.820866 0.000000 0.000000 360.000000
+ A 0 0.020000 0.062500 8.769685 0.000000 0.000000 360.000000
+ A 0 0.020000 0.062500 10.718504 0.000000 0.000000 360.000000
+ L 0 0.020000 0.000000 0.551091 11.692913 0.551091
+ L 0 0.020000 0.000000 0.280000 11.692913 0.28000
+ L 0 0.020000 0.000000 -0.280000 11.692913 -0.280000
+ L 0 0.020000 0.000000 -0.551091 11.692913 -0.551091
+END
+TURNOUT HO "Peco Code 83 Inspection Pit(Stair End) SL-8356A"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.948819 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 1.948819 0.000000
+ F 15720651 0.000000 4
+ 0.000000 0.551091 0
+ 1.948819 0.551091 0
+ 1.948819 -0.551091 0
+ 0.000000 -0.551091 0
+ F 12632256 0.000000 4
+ 0.000000 0.280000 0
+ 0.560000 0.280000 0
+ 0.560000 -0.280000 0
+ 0.000000 -0.280000 0
+ L 0 0.020000 0.000000 0.280000 0.000000 -0.280000
+ L 0 0.020000 0.112000 0.280000 0.112000 -0.280000
+ L 0 0.020000 0.224000 0.280000 0.224000 -0.280000
+ L 0 0.020000 0.336000 0.280000 0.336000 -0.280000
+ L 0 0.020000 0.448000 0.280000 0.448000 -0.280000
+ L 0 0.020000 0.560000 0.280000 0.560000 -0.280000
+ A 0 0.020000 0.062500 0.974409 0.000000 0.000000 360.000000
+ L 0 0.020000 0.000000 0.551091 1.948819 0.551091
+ L 0 0.020000 0.000000 0.280000 1.948819 0.28000
+ L 0 0.020000 0.000000 -0.280000 1.948819 -0.280000
+ L 0 0.020000 0.000000 -0.551091 1.948819 -0.551091
+
+END
+TURNOUT HO "Peco Code 83 Inspection Pit(Mid Section) SL-8356B"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.948819 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 1.948819 0.000000
+ F 15720651 0.000000 4
+ 0.000000 0.551091 0
+ 1.948819 0.551091 0
+ 1.948819 -0.551091 0
+ 0.000000 -0.551091 0
+ A 0 0.020000 0.062500 0.974409 0.000000 0.000000 360.000000
+ L 0 0.020000 0.000000 0.551091 1.948819 0.551091
+ L 0 0.020000 0.000000 0.280000 1.948819 0.28000
+ L 0 0.020000 0.000000 -0.280000 1.948819 -0.280000
+ L 0 0.020000 0.000000 -0.551091 1.948819 -0.551091
+END \ No newline at end of file
diff --git a/app/bin/unittest/testfiles/atl83ho.xtp b/app/bin/unittest/testfiles/atl83ho.xtp
new file mode 100644
index 0000000..02452da
--- /dev/null
+++ b/app/bin/unittest/testfiles/atl83ho.xtp
@@ -0,0 +1,561 @@
+CONTENTS Atlas Code 83 - HO Scale
+SUBCONTENTS Atlas HO-Scale C83 - Switched
+TURNOUT HO "Atlas #6 Left C83 Super 505"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 11.613000 0.000000 90.000000
+ E 11.613000 1.335000 80.500000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 11.613000 0.000000
+ C 0 0.000000 -35.933506 0.649648 35.933506 170.499924 9.500152
+ S 0 0.000000 6.580428 0.492821 11.613000 1.335000
+ END
+TURNOUT HO "Atlas #6 Right C83 Super 506"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 11.613000 0.000000 90.000000
+ E 11.613000 -1.335000 99.500000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 11.613000 0.000000
+ C 0 0.000000 35.933506 0.649457 -35.933506 0.000076 9.500152
+ S 0 0.000000 6.580428 -0.492821 11.613000 -1.335000
+ END
+TURNOUT HO "Atlas C83 Left Remote/Manual Snap Switch 540/542"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 9.000000 0.000000 90.000000
+ E 7.656300 1.085500 70.000000
+ S 0 0.000000 0.000000 0.000000 2.149777 0.000000
+ S 0 0.000000 2.149777 0.000000 9.000000 0.000000
+ C 0 0.000000 -14.315249 2.149796 14.315249 159.999924 20.000152
+ S 0 0.000000 7.045913 0.863327 7.656300 1.085500
+ END
+TURNOUT HO "Atlas C83 Right Remote/Manual Snap Switch 541/543"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 9.000000 0.000000 90.000000
+ E 7.656300 -1.085500 110.000000
+ S 0 0.000000 0.000000 0.000000 2.149777 0.000000
+ S 0 0.000000 2.149777 0.000000 9.000000 0.000000
+ C 0 0.000000 14.315249 2.149720 -14.315249 0.000076 20.000152
+ S 0 0.000000 7.045913 -0.863327 7.656300 -1.085500
+ END
+TURNOUT HO "Atlas C83 Left Remote/Manual 22in Snap Switch 546/544"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 10.500000 0.000000 90.000000
+ E 10.500000 1.674650 67.500000
+ S 0 0.000000 0.000000 0.000000 2.730631 0.000000
+ S 0 0.000000 2.730631 0.000000 10.500000 0.000000
+ C 0 0.000000 -18.734087 2.730656 18.734087 157.500000 22.500000
+ S 0 0.000000 9.899897 1.451414 10.500000 1.674650
+ END
+TURNOUT HO "Atlas C83 Right Remote/Manual 22in Snap Switch 547/545"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 10.500000 0.000000 90.000000
+ E 10.500000 -1.674650 112.500000
+ S 0 0.000000 0.000000 0.000000 2.730631 0.000000
+ S 0 0.000000 2.730631 0.000000 10.500000 0.000000
+ C 0 0.000000 18.734087 2.730656 -18.734087 0.000000 22.500000
+ S 0 0.000000 9.899897 -1.451414 10.500000 -1.674650
+ END
+TURNOUT HO "Atlas C83 Wye Switch 560"
+ P "Left" 1 2 3
+ P "Right" 1 4 5
+ E 0.000000 0.000000 270.000000
+ E 7.805900 0.655500 81.000000
+ E 7.805900 -0.655500 99.000000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ C 0 0.000000 -38.343529 0.649651 38.343529 170.999924 9.000152
+ S 0 0.000000 6.647945 0.472088 7.805900 0.655500
+ C 0 0.000000 38.343529 0.649447 -38.343529 0.000076 9.000152
+ S 0 0.000000 6.647945 -0.472088 7.805900 -0.655500
+ END
+TURNOUT HO "Atlas #6 Left C83 Customline 563"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 12.000000 0.000000 90.000000
+ E 9.999000 0.874800 81.000000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 12.000000 0.000000
+ C 0 0.000000 -48.616653 0.649665 48.616653 170.999924 9.000152
+ S 0 0.000000 8.255041 0.598571 9.999000 0.874800
+ END
+TURNOUT HO "Atlas #6 Right C83 Customline 564"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 12.000000 0.000000 90.000000
+ E 9.999000 -0.874800 99.000000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 12.000000 0.000000
+ C 0 0.000000 48.616653 0.649406 -48.616653 0.000076 9.000152
+ S 0 0.000000 8.255041 -0.598571 9.999000 -0.874800
+ END
+TURNOUT HO "Atlas #4 Left C83 Customline 561"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 9.000000 0.000000 90.000000
+ E 8.000000 1.000000 75.522476
+ S 0 0.000000 0.000000 0.000000 0.776702 0.000000
+ S 0 0.000000 0.776702 0.000000 9.000000 0.000000
+ C 0 0.000000 -26.377309 0.776737 26.377309 165.522400 14.477676
+ S 0 0.000000 7.371097 0.837607 8.000000 1.000000
+ END
+TURNOUT HO "Atlas #4 Right C83 Customline 562"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 9.000000 0.000000 90.000000
+ E 8.000000 -1.000000 104.477524
+ S 0 0.000000 0.000000 0.000000 0.776702 0.000000
+ S 0 0.000000 0.776702 0.000000 9.000000 0.000000
+ C 0 0.000000 26.377309 0.776597 -26.377309 0.000076 14.477676
+ S 0 0.000000 7.371097 -0.837607 8.000000 -1.000000
+ END
+TURNOUT HO "Atlas #8 Left C83 Customline 565"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 13.500000 0.000000 90.000000
+ E 11.400000 0.900000 82.819238
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 13.500000 0.000000
+ C 0 0.000000 -57.485559 0.649676 57.485559 172.819162 7.180914
+ S 0 0.000000 7.835446 0.450893 11.400000 0.900000
+ END
+TURNOUT HO "Atlas #8 Right C83 Customline 566"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 13.500000 0.000000 90.000000
+ E 11.400000 -0.900000 97.180762
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 13.500000 0.000000
+ C 0 0.000000 57.485559 0.649371 -57.485559 0.000076 7.180914
+ S 0 0.000000 7.835446 -0.450893 11.400000 -0.900000
+ END
+TURNOUT HO "Atlas Curve Left C83 Customline 595"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 15.000000 4.019238 60.000000
+ E 13.392751 4.546227 52.500000
+ C 0 0.000000 30.000000 0.000000 30.000000 150.000000 30.000000
+ C 0 0.000000 22.000000 0.000000 22.000000 142.500000 37.500000
+ END
+TURNOUT HO "Atlas Curve Right C83 Customline 596"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 15.000000 -4.019238 120.000000
+ E 13.392751 -4.546227 127.500000
+ C 0 0.000000 30.000000 0.000000 -30.000000 0.000000 30.000000
+ C 0 0.000000 22.000000 0.000000 -22.000000 0.000000 37.500000
+ END
+
+
+
+SUBCONTENTS Atlas HO-Scale C83 - Crossings
+TURNOUT HO "Atlas 12.5D Crossing 571"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 9.000000 0.000000 90.000000
+ E 0.106666 0.973972 282.500000
+ E 8.893334 -0.973972 102.500000
+ S 0 0.000000 0.000000 0.000000 9.000000 0.000000
+ S 0 0.000000 0.106666 0.973972 8.893334 -0.973972
+ END
+TURNOUT HO "Atlas 571 Fitter Piece 571a"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 0.100000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 0.100000 0.000000
+ END
+TURNOUT HO "Atlas 19D Crossing 572"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 6.082500 0.000000 90.000000
+ E 0.165690 0.990130 289.000000
+ E 5.916810 -0.990130 109.000000
+ S 0 0.000000 0.000000 0.000000 6.082500 0.000000
+ S 0 0.000000 0.165690 0.990130 5.916810 -0.990130
+ END
+TURNOUT HO "Atlas 30D Crossing 573"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 4.000000 0.000000 90.000000
+ E 0.267947 0.999997 300.000000
+ E 3.732053 -0.999997 120.000000
+ S 0 0.000000 0.000000 0.000000 4.000000 0.000000
+ S 0 0.000000 0.267947 0.999997 3.732053 -0.999997
+ END
+TURNOUT HO "Atlas 25D Crossing 574"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 4.608100 0.000000 90.000000
+ E 0.215870 0.973730 295.000000
+ E 4.392230 -0.973730 115.000000
+ S 0 0.000000 0.000000 0.000000 4.608100 0.000000
+ S 0 0.000000 0.215870 0.973730 4.392230 -0.973730
+ END
+TURNOUT HO "Atlas 45D Crossing 575"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 3.000000 0.000000 90.000000
+ E 0.439338 1.060658 315.000000
+ E 2.560662 -1.060658 135.000000
+ S 0 0.000000 0.000000 0.000000 3.000000 0.000000
+ S 0 0.000000 0.439338 1.060658 2.560662 -1.060658
+ END
+TURNOUT HO "Atlas 60D Crossing 576"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 3.000000 0.000000 90.000000
+ E 0.749997 1.299036 330.000000
+ E 2.250003 -1.299036 150.000000
+ S 0 0.000000 0.000000 0.000000 3.000000 0.000000
+ S 0 0.000000 0.749997 1.299036 2.250003 -1.299036
+ END
+TURNOUT HO "Atlas 90D Crossing 577"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 2.000000 0.000000 90.000000
+ E 1.000003 1.000000 360.000000
+ E 0.999997 -1.000000 180.000000
+ S 0 0.000000 0.000000 0.000000 2.000000 0.000000
+ S 0 0.000000 1.000003 1.000000 0.999997 -1.000000
+ END
+
+SUBCONTENTS Atlas HO-Scale C83 - Straight Track
+TURNOUT HO "Atlas C83 9"" Straight 510/520"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 9.000000 0.000000
+ END
+TURNOUT HO "Atlas C83 6"" Straight 521"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 6.000000 0.000000
+ END
+TURNOUT HO "Atlas C83 3"" Straight 522"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 3.000000 0.000000
+ END
+TURNOUT HO "Atlas C83 1.5"" Straight 523"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.500000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 1.500000 0.000000
+ END
+TURNOUT HO "Atlas C83 2.0"" Straight 525"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.000000 0.000000
+ END
+TURNOUT HO "Atlas C83 0.75"" Straight 524a"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 0.750000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 0.750000 0.000000
+ END
+TURNOUT HO "Atlas C83 1"" Straight 524b"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 1.000000 0.000000
+ END
+TURNOUT HO "Atlas C83 1.25"" Straight 524c"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.250000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 1.250000 0.000000
+ END
+TURNOUT HO "Atlas C83 1.5"" Straight 524d"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.500000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 1.500000 0.000000
+ END
+TURNOUT HO "Atlas C83 2.0"" Straight 524e"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.000000 0.000000
+ END
+TURNOUT HO "Atlas C83 2.5"" Straight 524f"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.500000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.500000 0.000000
+ END
+
+SUBCONTENTS Atlas HO-Scale C83 - Curve Track
+TURNOUT HO "Atlas C83 15"" 30D Curve 511/530"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.499994 -2.009616 120.000000
+ C 0 0 15.000000 0.000000 -15.000000 0.000000 30.000000
+ END
+TURNOUT HO "Atlas C83 15"" 15D Curve 531"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.882282 0.511112 75.000000
+ C 0 0 -15.000000 0.000020 15.000000 165.000076 15.000000
+ END
+TURNOUT HO "Atlas C83 18"" 30D Curve 512/532"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 8.999993 -2.411539 120.000000
+ C 0 0 18.000000 0.000000 -18.000000 0.000000 30.000000
+ END
+TURNOUT HO "Atlas C83 18"" 15D Curve 533"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.658739 -0.613334 105.000000
+ C 0 0 18.000000 0.000000 -18.000000 0.000000 15.000000
+ END
+TURNOUT HO "Atlas C83 18"" 10D Curve 534"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.125665 -0.273460 100.000000
+ C 0 0 18.000000 0.000000 -18.000000 0.000000 10.000000
+ END
+TURNOUT HO "Atlas C83 22"" 22.5D Curve 513/535"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 8.419029 -1.674647 112.500000
+ C 0 0 22.000000 0.000000 -22.000000 0.000000 22.500000
+ END
+TURNOUT HO "Atlas C83 22"" 7.5D Curve 537"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.871574 0.188213 82.500000
+ C 0 0.000000 -22.000000 0.000029 22.000000 172.500076 7.500000
+ END
+TURNOUT HO "Atlas C83 24"" 22.5D Curve 536"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.184395 1.826888 67.500000
+ C 0 0.000000 -24.000000 0.000032 24.000000 157.500076 22.500000
+ END
+
+
+SUBCONTENTS Atlas HO-Scale C83 - Misc Track
+TURNOUT HO "Atlas C83 9"" Straight Rerailer 519"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 9.000000 0.000000
+ F 12566463 0.000000 4
+ 0.500000 0.584375 0
+ 1.000000 0.334375 0
+ 8.000000 0.334375 0
+ 8.500000 0.584375 0
+ F 12566463 0.000000 6
+ 0.500000 0.000000 0
+ 1.000000 -0.250000 0
+ 8.000000 -0.250000 0
+ 8.500000 0.000000 0
+ 8.000000 0.250000 0
+ 1.000000 0.250000 0
+ F 12566463 0.000000 4
+ 0.500000 -0.584375 0
+ 1.000000 -0.334375 0
+ 8.000000 -0.334375 0
+ 8.500000 -0.584375 0
+ END
+TURNOUT HO "Atlas C83 Bumper 518"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0 0.000000 0.000000 3.750000 0.000000
+ END
+
+SUBCONTENTS Atlas HO-Scale C83 - Bridges
+TURNOUT HO "Atlas C83 9"" Warren Truss Bridge 590"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 9.000000 0.000000
+ F 11579568 0.000000 4
+ 0.000000 1.200000 0
+ 9.000000 1.200000 0
+ 9.000000 0.625000 0
+ 0.000000 0.625000 0
+ F 11579568 0.000000 4
+ 0.000000 -1.200000 0
+ 9.000000 -1.200000 0
+ 9.000000 -0.625000 0
+ 0.000000 -0.625000 0
+ L 8421504 0.100000 0.000000 1.200000 9.000000 1.200000
+ L 8421504 0.100000 0.000000 -1.200000 9.000000 -1.200000
+END
+TURNOUT HO "Atlas C83 9"" Deck Truss Bridge 591"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 9.000000 0.000000
+ L 11579568 0.050000 0.000000 0.700000 9.000000 0.700000
+ L 11579568 0.050000 0.000000 0.600000 0.000000 0.700000
+ L 11579568 0.050000 9.000000 0.600000 9.000000 0.700000
+ L 11579568 0.050000 0.000000 -0.700000 9.000000 -0.700000
+ L 11579568 0.050000 0.000000 -0.600000 0.000000 -0.700000
+ L 11579568 0.050000 9.000000 -0.600000 9.000000 -0.700000
+END
+TURNOUT HO "Atlas C83 9"" Plate Girder Bridge 592"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 9.000000 0.000000
+ F 11579568 0.000000 4
+ 0.000000 1.300000 0
+ 9.000000 1.300000 0
+ 9.000000 0.625000 0
+ 0.000000 0.625000 0
+ F 11579568 0.000000 4
+ 0.000000 -1.300000 0
+ 9.000000 -1.300000 0
+ 9.000000 -0.625000 0
+ 0.000000 -0.625000 0
+ L 8421504 0.100000 0.000000 1.300000 9.000000 1.300000
+ L 8421504 0.050000 0.900000 1.000000 0.900000 1.300000
+ L 8421504 0.050000 2.700000 1.000000 2.700000 1.300000
+ L 8421504 0.050000 4.500000 1.000000 4.500000 1.300000
+ L 8421504 0.050000 6.300000 1.000000 6.300000 1.300000
+ L 8421504 0.050000 8.100000 1.000000 8.100000 1.300000
+ L 8421504 0.100000 0.000000 -1.300000 9.000000 -1.300000
+ L 8421504 0.050000 0.900000 -1.000000 0.900000 -1.300000
+ L 8421504 0.050000 2.700000 -1.000000 2.700000 -1.300000
+ L 8421504 0.050000 4.500000 -1.000000 4.500000 -1.300000
+ L 8421504 0.050000 6.300000 -1.000000 6.300000 -1.300000
+ L 8421504 0.050000 8.100000 -1.000000 8.100000 -1.300000
+END
+TURNOUT HO "Atlas C83 18"" Through Truss Bridge 593/594"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 18.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 18.000000 0.000000
+ L 11579568 0.050000 0.000000 1.200000 18.000000 1.200000
+ L 11579568 0.050000 0.000000 0.750000 0.000000 1.200000
+ L 11579568 0.050000 18.000000 0.750000 18.000000 1.200000
+ L 11579568 0.050000 0.000000 -1.200000 18.000000 -1.200000
+ L 11579568 0.050000 0.000000 -0.750000 0.000000 -1.200000
+ L 11579568 0.050000 18.000000 -0.750000 18.000000 -1.200000
+ L 11579568 0.050000 3.000000 -1.200000 3.000000 1.200000
+ L 11579568 0.050000 6.000000 -1.200000 6.000000 1.200000
+ L 11579568 0.050000 9.000000 -1.200000 9.000000 1.200000
+ L 11579568 0.050000 12.000000 -1.200000 12.000000 1.200000
+ L 11579568 0.050000 15.000000 -1.200000 15.000000 1.200000
+ L 11579568 0.050000 3.000000 -1.200000 6.000000 1.200000
+ L 11579568 0.050000 3.000000 1.200000 6.000000 -1.200000
+ L 11579568 0.050000 6.000000 -1.200000 9.000000 1.200000
+ L 11579568 0.050000 6.000000 1.200000 9.000000 -1.200000
+ L 11579568 0.050000 9.000000 -1.200000 12.000000 1.200000
+ L 11579568 0.050000 9.000000 1.200000 12.000000 -1.200000
+ L 11579568 0.050000 12.000000 -1.200000 15.000000 1.200000
+ L 11579568 0.050000 12.000000 1.200000 15.000000 -1.200000
+END
+TURNOUT HO "Atlas C83 9"" Single-Track Thru-Girder Bridge 70000027"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 9.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 9.000000 0.000000
+ L 11579568 0.100000 0.500000 1.000000 8.500000 1.000000
+ L 11579568 0.050000 0.750000 1.000000 0.750000 0.625000
+ L 11579568 0.050000 2.000000 1.000000 2.000000 0.625000
+ L 11579568 0.050000 3.250000 1.000000 3.250000 0.625000
+ L 11579568 0.050000 4.500000 1.000000 4.500000 0.625000
+ L 11579568 0.050000 5.750000 1.000000 5.750000 0.625000
+ L 11579568 0.050000 7.000000 1.000000 7.000000 0.625000
+ L 11579568 0.050000 8.250000 1.000000 8.250000 0.625000
+ L 11579568 0.100000 0.500000 -1.000000 8.500000 -1.000000
+ L 11579568 0.050000 0.750000 -1.000000 0.750000 -0.625000
+ L 11579568 0.050000 2.000000 -1.000000 2.000000 -0.625000
+ L 11579568 0.050000 3.250000 -1.000000 3.250000 -0.625000
+ L 11579568 0.050000 4.500000 -1.000000 4.500000 -0.625000
+ L 11579568 0.050000 5.750000 -1.000000 5.750000 -0.625000
+ L 11579568 0.050000 7.000000 -1.000000 7.000000 -0.625000
+ L 11579568 0.050000 8.250000 -1.000000 8.250000 -0.625000
+END
+TURNOUT HO "Atlas C83 9"" Double-Track Thru-Girder Bridge 70000028"
+ P "P0" 1 0 1
+ E 0.000000 0.000000 270.000000
+ E 9.000000 0.000000 90.000000
+ E 0.000000 -2.000000 270.000000
+ E 9.000000 -2.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 9.000000 0.000000
+ S 0 0.000000 0.000000 -2.000000 9.000000 -2.000000
+ L 11579568 0.100000 0.500000 1.000000 8.500000 1.000000
+
+ L 11579568 0.050000 0.750000 1.000000 0.750000 0.625000
+ L 11579568 0.050000 2.000000 1.000000 2.000000 0.625000
+ L 11579568 0.050000 3.250000 1.000000 3.250000 0.625000
+ L 11579568 0.050000 4.500000 1.000000 4.500000 0.625000
+ L 11579568 0.050000 5.750000 1.000000 5.750000 0.625000
+ L 11579568 0.050000 7.000000 1.000000 7.000000 0.625000
+ L 11579568 0.050000 8.250000 1.000000 8.250000 0.625000
+
+ L 11579568 0.050000 0.750000 -1.000000 0.750000 -0.625000
+ L 11579568 0.050000 2.000000 -1.000000 2.000000 -0.625000
+ L 11579568 0.050000 3.250000 -1.000000 3.250000 -0.625000
+ L 11579568 0.050000 4.500000 -1.000000 4.500000 -0.625000
+ L 11579568 0.050000 5.750000 -1.000000 5.750000 -0.625000
+ L 11579568 0.050000 7.000000 -1.000000 7.000000 -0.625000
+ L 11579568 0.050000 8.250000 -1.000000 8.250000 -0.625000
+
+ L 11579568 0.100000 0.500000 -1.000000 8.500000 -1.000000
+
+ L 11579568 0.050000 0.750000 -1.000000 0.750000 -1.375000
+ L 11579568 0.050000 2.000000 -1.000000 2.000000 -1.375000
+ L 11579568 0.050000 3.250000 -1.000000 3.250000 -1.375000
+ L 11579568 0.050000 4.500000 -1.000000 4.500000 -1.375000
+ L 11579568 0.050000 5.750000 -1.000000 5.750000 -1.375000
+ L 11579568 0.050000 7.000000 -1.000000 7.000000 -1.375000
+ L 11579568 0.050000 8.250000 -1.000000 8.250000 -1.375000
+
+ L 11579568 0.050000 0.750000 -3.000000 0.750000 -2.625000
+ L 11579568 0.050000 2.000000 -3.000000 2.000000 -2.625000
+ L 11579568 0.050000 3.250000 -3.000000 3.250000 -2.625000
+ L 11579568 0.050000 4.500000 -3.000000 4.500000 -2.625000
+ L 11579568 0.050000 5.750000 -3.000000 5.750000 -2.625000
+ L 11579568 0.050000 7.000000 -3.000000 7.000000 -2.625000
+ L 11579568 0.050000 8.250000 -3.000000 8.250000 -2.625000
+
+ L 11579568 0.100000 0.500000 -3.000000 8.500000 -3.000000
+END
+TURNOUT HO "Atlas C83 9"" Single-Track Add-On Thru-Girder Bridge 70000029"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 9.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 9.000000 0.000000
+ #L 11579568 0.100000 0.500000 1.000000 8.500000 1.000000
+ L 11579568 0.050000 0.750000 1.000000 0.750000 0.625000
+ L 11579568 0.050000 2.000000 1.000000 2.000000 0.625000
+ L 11579568 0.050000 3.250000 1.000000 3.250000 0.625000
+ L 11579568 0.050000 4.500000 1.000000 4.500000 0.625000
+ L 11579568 0.050000 5.750000 1.000000 5.750000 0.625000
+ L 11579568 0.050000 7.000000 1.000000 7.000000 0.625000
+ L 11579568 0.050000 8.250000 1.000000 8.250000 0.625000
+ L 11579568 0.100000 0.500000 -1.000000 8.500000 -1.000000
+ L 11579568 0.050000 0.750000 -1.000000 0.750000 -0.625000
+ L 11579568 0.050000 2.000000 -1.000000 2.000000 -0.625000
+ L 11579568 0.050000 3.250000 -1.000000 3.250000 -0.625000
+ L 11579568 0.050000 4.500000 -1.000000 4.500000 -0.625000
+ L 11579568 0.050000 5.750000 -1.000000 5.750000 -0.625000
+ L 11579568 0.050000 7.000000 -1.000000 7.000000 -0.625000
+ L 11579568 0.050000 8.250000 -1.000000 8.250000 -0.625000
+END
diff --git a/app/lib/params/atlasn.xtp b/app/bin/unittest/testfiles/atlasn.xtp
index 8e4b48e..882e94c 100644
--- a/app/lib/params/atlasn.xtp
+++ b/app/bin/unittest/testfiles/atlasn.xtp
@@ -642,51 +642,51 @@ TURNOUT N "Atlas Turn Table 2790"
E -1.080111 4.031029 345.000000
#0/360
S 0 0 0.000000 4.250000 0.000000 3.750000
- S 16777215 0 0.000000 3.750000 0.000000 -3.750000
+ S 0 0 0.000000 3.750000 0.000000 -3.750000
S 0 0 0.000000 -3.750000 0.000000 -4.250000
#15/195
S 0 0 1.099981 4.105185 0.970571 3.622222
- S 16777215 0 0.970571 3.622222 -0.970571 -3.622222
+ S 0 0 0.970571 3.622222 -0.970571 -3.622222
S 0 0 -0.970571 -3.622222 -1.099981 -4.105185
#30/210
S 0 0 2.125000 3.680608 1.875000 3.247595
- S 16777215 0 1.836614 3.247595 -1.875000 -3.247595
+ S 0 0 1.836614 3.247595 -1.875000 -3.247595
S 0 0 -1.875000 -3.247595 -2.125000 -3.680608
#45/225
S 0 0 3.005204 3.005204 2.651650 2.651650
- S 16777215 0 2.651650 2.651650 -2.651650 -2.651650
+ S 0 0 2.651650 2.651650 -2.651650 -2.651650
S 0 0 -2.651650 -2.651650 -3.005204 -3.005204
#60/240
S 0 0 3.680608 2.125000 3.247595 1.875000
- S 16777215 0 3.247595 1.875000 -3.247595 -1.875000
+ S 0 0 3.247595 1.875000 -3.247595 -1.875000
S 0 0 -3.247595 -1.875000 -3.680608 -2.125000
#75/255
- S 16777215 0 4.105185 1.099981 3.622222 0.970571
- S 16777215 0 3.622222 0.970571 -3.622222 -0.970571
+ S 0 0 4.105185 1.099981 3.622222 0.970571
+ S 0 0 3.622222 0.970571 -3.622222 -0.970571
S 0 0 -3.622222 -0.970571 -4.105185 -1.099981
#90/270
- S 16777215 0 4.250000 0.000000 3.750000 0.000000
- S 16777215 0 3.750000 0.000000 -3.750000 0.000000
+ S 0 0 4.250000 0.000000 3.750000 0.000000
+ S 0 0 3.750000 0.000000 -3.750000 0.000000
S 0 0 -3.750000 0.000000 -4.250000 0.000000
#105/285
- S 16777215 0 4.105185 -1.099981 3.622222 -0.970571
- S 16777215 0 3.622222 -0.970571 -3.622222 0.970571
+ S 0 0 4.105185 -1.099981 3.622222 -0.970571
+ S 0 0 3.622222 -0.970571 -3.622222 0.970571
S 0 0 -3.622222 0.970571 -4.105185 1.099981
#120/300
S 0 0 3.680608 -2.125000 3.247595 -1.875000
- S 16777215 0 3.247595 -1.875000 -3.247595 1.875000
+ S 0 0 3.247595 -1.875000 -3.247595 1.875000
S 0 0 -3.247595 1.875000 -3.680608 2.125000
#135/315
S 0 0 3.005204 -3.005204 2.651650 -2.651650
- S 16777215 0 2.651650 -2.651650 -2.651650 2.651650
+ S 0 0 2.651650 -2.651650 -2.651650 2.651650
S 0 0 -2.651650 2.651650 -3.005204 3.005204
#150/330
S 0 0 2.125000 -3.680608 1.875000 -3.247595
- S 16777215 0 1.836614 -3.247595 -1.875000 3.247595
+ S 0 0 1.836614 -3.247595 -1.875000 3.247595
S 0 0 -1.875000 3.247595 -2.125000 3.680608
#165/345
S 0 0 1.099981 -4.105185 0.970571 -3.622222
- S 16777215 0 0.970571 -3.622222 -0.970571 3.622222
+ S 0 0 0.970571 -3.622222 -0.970571 3.622222
S 0 0 -0.970571 3.622222 -1.099981 4.105185
A 11579568 0.053333 4.250000 0.000000 0.000000 0.000000 360.000000
diff --git a/app/bin/utf8convert.c b/app/bin/utf8convert.c
new file mode 100644
index 0000000..0573c93
--- /dev/null
+++ b/app/bin/utf8convert.c
@@ -0,0 +1,96 @@
+/**
+ * \file utf8convert.c
+ *
+ * UTF8 conversion functions
+ */
+
+ /* XTrackCad - Model Railroad CAD
+ * Copyright (C) 2020 Martin Fischer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <string.h>
+
+#include <wlib.h>
+#include "misc.h"
+#include "include/utf8convert.h"
+
+/**
+ * Convert to UTF-8. The string must by a dynamically allocated storage block
+ * allocated with MyMalloc(). The functions returns a pointer to the converted
+ * string. If no conversion was necessary the returned string is identical to
+ * the parameter. Otherwise a new buffer is allocated and returned.
+ *
+ * \param [in] string If non-null, the string.
+ *
+ * \returns a pointer to a MyMalloc'ed string in UTF-8 format.
+ */
+
+char *
+Convert2UTF8( char *string )
+{
+ if (RequiresConvToUTF8(string)) {
+ unsigned cnt = strlen(string) * 2 + 2;
+ unsigned char *out = MyMalloc(cnt);
+ wSystemToUTF8(string, out, cnt);
+ MyFree(string);
+ return(out);
+ } else {
+ return(string);
+ }
+}
+
+/**
+ * Convert a string from UTF-8 to system codepage in place. As the length of
+ * the result most be equal or smaller than the input this is a safe
+ * approach.
+ *
+ * \param [in,out] in the string to be converted
+ */
+
+void
+ConvertUTF8ToSystem(unsigned char *in)
+{
+ if (wIsUTF8(in)) {
+ unsigned cnt = strlen(in) * 2 + 1;
+ unsigned char *out = MyMalloc(cnt);
+ wUTF8ToSystem(in, out, cnt);
+ strcpy(in, out);
+ MyFree(out);
+ }
+}
+
+/**
+ * Requires convert to UTF-8 If at least one character is >127 the string
+ * has to be converted.
+ *
+ * \param [in9 string the string.
+ *
+ * \returns True if conversion is required, false if not.
+ */
+
+bool
+RequiresConvToUTF8(char *string)
+{
+ while (*string) {
+ if (*string++ & 0x7F) {
+ return(true);
+ }
+ }
+ return(false);
+}
+
+
diff --git a/app/bin/utility.c b/app/bin/utility.c
index d1f798c..93f9979 100644
--- a/app/bin/utility.c
+++ b/app/bin/utility.c
@@ -217,6 +217,115 @@ void FindPos( coOrd * res, double * beyond, coOrd pos, coOrd orig, double angle,
}
+/* Find Arc Intersection
+ * Given two circles described by centers and radius (C1, R1) (C2, R2) Find the zero, one or two intersection points
+ *
+ */
+BOOL_T FindArcIntersections ( coOrd *Pc, coOrd *Pc2, coOrd center1, DIST_T radius1, coOrd center2, DIST_T radius2) {
+ double d,a,h;
+
+ d = sqrt((center2.x-center1.x)*(center2.x-center1.x)+(center2.y-center1.y)*(center2.y-center1.y));
+ if (d >(radius1+radius2)) return FALSE; //Too far apart
+ if (d<fabs(radius1-radius2)) return FALSE; //Inside each other
+ if ((d == 0) && (radius1 == radius2)) return FALSE; // Coincident and the same
+ a=((radius1*radius1)-(radius2*radius2)+(d*d))/(2*d);
+ if ((radius1*radius1)<(a*a)) return FALSE;
+ h = sqrt((radius1*radius1)-(a*a));
+
+ coOrd center_c;
+ center_c.x = center1.x+a*(center2.x - center1.x)/d;
+ center_c.y = center1.y+a*(center2.y - center1.y)/d;
+
+ (*Pc).x = center_c.x+h*(center2.y-center1.y)/d;
+ (*Pc).y = center_c.y-h*(center2.x-center1.x)/d;
+ (*Pc2).x = center_c.x-h*(center2.y-center1.y)/d;
+ (*Pc2).y = center_c.y+h*(center2.x-center1.x)/d;
+
+ return TRUE;
+}
+
+/*
+ * Find Intersections between a line and a circle
+ *
+ * |c-x|^2 = r^2
+ *
+ * 𝑥(𝑡)=𝑎+𝑡𝑏
+ *
+ * where 𝑎 is a point and 𝑏 is a vector.
+ *
+ * For a point on this line to satisfy the equation, you need to have
+ *
+ * (𝑡𝑏+(𝑎−𝑐))⋅(𝑡𝑏+(𝑎−𝑐))=𝑟^2
+ *
+ * which is a quadratic in 𝑡:
+ * |b|^2*t^2 + 2(a-c).bt +(|a-c|^2-r^2) = 0
+ *
+ * whose solutions are
+ *
+ * t = (-2(a-c).b +/- SQRT([2(a-c).b]^2 - 4|b|^2(|a-c|^2-r^2)) / 2|b|^2
+ *
+ */
+
+double VectorLength (coOrd v) {
+ return sqrt(v.x*v.x+v.y+v.y);
+}
+double VectorDot (coOrd v1, coOrd v2) {
+ return (v1.x*v2.x+ v1.y*v2.y);
+}
+coOrd VectorSubtract (coOrd v1, coOrd v2) {
+ coOrd result;
+ result.x = v1.x-v2.x;
+ result.y = v1.y-v2.y;
+ return result;
+}
+coOrd VectorAdd (coOrd v1, coOrd v2) {
+ coOrd result;
+ result.x = v1.x+v2.x;
+ result.y = v1.y+v2.y;
+ return result;
+}
+
+BOOL_T FindArcAndLineIntersections(coOrd *intersection1, coOrd *intersection2, coOrd c, DIST_T radius,
+ coOrd point1, coOrd point2 )
+{
+ double dx, dy, cx, cy, A, B, C, det, t;
+
+ dx = point2.x - point1.x;
+ dy = point2.y - point1.y;
+
+ cx = c.x;
+ cy = c.y;
+
+ A = dx * dx + dy * dy;
+ B = 2 * (dx * (point1.x - cx) + dy * (point1.x - cy));
+ C = (point1.x - cx) * (point1.x - cx) + (point1.y - cy) * (point1.y - cy) - radius * radius;
+
+ det = B * B - 4 * A * C;
+ if ((A <= 0.0000001) || (det < 0))
+ {
+ return FALSE;
+ }
+ else if (det == 0)
+ {
+ // One solution.
+ t = -B / (2 * A);
+ (*intersection1).x = point1.x + t * dx;
+ (*intersection1).y = point1.y + t * dy;
+ intersection2 = intersection1;
+ return TRUE;
+ }
+ else
+ {
+ // Two solutions.
+ t = (float)((-B + sqrt(det)) / (2 * A));
+ (*intersection1).x = point1.x + t * dx;
+ (*intersection1).y = point1.y + t * dy;
+ t = (float)((-B - sqrt(det)) / (2 * A));
+ (*intersection2).x = point1.x + t * dx;
+ (*intersection2).y = point1.y + t * dy;
+ return TRUE;
+ }
+}
/* Find intersection:
Given 2 lines each described by a point and angle (P0,A0) (P1,A1)
@@ -489,6 +598,7 @@ static void IntersectBox( coOrd *p1, coOrd p0, coOrd size, int x1, int y1 )
#ifndef WINDOWS
else
fprintf(stderr, "intersectBox bogus\n" );
+ getchar();
#endif
}
@@ -589,6 +699,67 @@ BOOL_T ClipLine( coOrd *fp0, coOrd *fp1, coOrd orig, double angle, coOrd size )
return 1;
}
+coOrd FindCentroid(int vertexCount, pts_t vertices[] )
+{
+ coOrd centroid = {0, 0};
+ double signedArea = 0.0;
+ double x0 = 0.0; // Current vertex X
+ double y0 = 0.0; // Current vertex Y
+ double x1 = 0.0; // Next vertex X
+ double y1 = 0.0; // Next vertex Y
+ double a = 0.0; // Partial signed area
+
+ // For all vertices except last
+ int i=0;
+ for (i=0; i<vertexCount-1; ++i)
+ {
+ x0 = vertices[i].pt.x;
+ y0 = vertices[i].pt.y;
+ x1 = vertices[i+1].pt.x;
+ y1 = vertices[i+1].pt.y;
+ a = x0*y1 - x1*y0;
+ signedArea += a;
+ centroid.x += (x0 + x1)*a;
+ centroid.y += (y0 + y1)*a;
+ }
+
+ // Do last vertex separately to avoid performing an expensive
+ // modulus operation in each iteration.
+ x0 = vertices[i].pt.x;
+ y0 = vertices[i].pt.y;
+ x1 = vertices[0].pt.x;
+ y1 = vertices[0].pt.y;
+ a = x0*y1 - x1*y0;
+ signedArea += a;
+ centroid.x += (x0 + x1)*a;
+ centroid.y += (y0 + y1)*a;
+
+ signedArea *= 0.5;
+ centroid.x /= (6.0*signedArea);
+ centroid.y /= (6.0*signedArea);
+
+ return centroid;
+}
+
+double FindArcCenter(
+ coOrd * pos,
+ coOrd p0,
+ coOrd p1,
+ double radius )
+{
+ double d;
+ double a0, a1;
+ d = FindDistance( p0, p1 )/2.0;
+ a0 = FindAngle( p0, p1 );
+ a1 = NormalizeAngle(R2D(asin( d/radius )));
+ if (a1 > 180)
+ a1 -= 360;
+ a0 = NormalizeAngle( a0 + (90.0-a1) );
+ Translate( pos, p0, a0, radius );
+ return a1*2.0;
+}
+
+
#ifdef LATER
BOOL_T ClipArc( double a0, double a1, coOrd pos, double radius, coOrd orig, double angle, double size )
{
diff --git a/app/bin/utility.h b/app/bin/utility.h
index 8666e6b..fad74be 100644
--- a/app/bin/utility.h
+++ b/app/bin/utility.h
@@ -57,11 +57,15 @@ int PointOnCircle( coOrd * resP, coOrd center, double radius, double angle );
double ConstrainR( double r );
void FindPos( coOrd * res, double * beyond, coOrd pos, coOrd orig, double angle, double length );
int FindIntersection( coOrd *Pc, coOrd P00, double A0, coOrd P10, double A1 );
+BOOL_T FindArcAndLineIntersections (coOrd *Pc1, coOrd *Pc2, coOrd c, DIST_T r, coOrd p0, coOrd p1);
+BOOL_T FindArcIntersections ( coOrd *Pc, coOrd *Pc2, coOrd center1, DIST_T radius1, coOrd center2, DIST_T radius2);
double LineDistance( coOrd *p, coOrd p0, coOrd p1 );
double CircleDistance( coOrd *p, coOrd c, double r, double a0, double a1 );
int PickArcEndPt( coOrd, coOrd, coOrd );
int PickLineEndPt( coOrd, double, coOrd );
coOrd AddCoOrd( coOrd, coOrd, double );
int ClipLine( coOrd *, coOrd *, coOrd, double, coOrd );
+coOrd FindCentroid(int vertexCount, pts_t vertices[] );
+double FindArcCenter(coOrd * c,coOrd p0,coOrd p1, double r );
#endif
diff --git a/app/bin/validator.c b/app/bin/validator.c
new file mode 100644
index 0000000..c415471
--- /dev/null
+++ b/app/bin/validator.c
@@ -0,0 +1,87 @@
+/** \file validator.c
+* Validators for misc textformats
+*/
+
+/* XTrackCAD - Model Railroad CAD
+* Copyright (C) 2019 Martin Fischer
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#include <stdbool.h>
+#include "validator.h"
+
+/**
+* Simplistic checking of URL syntax validity. Checks:
+* if scheme is present, it has to be terminated by double /
+* hostname has at least 5 characters
+*
+* \param testString
+* \return TRUE if valid, FALSE otherwise
+*/
+
+enum URLSCANSTATE { STATE_SCHEME, STATE_ENDOFSCHEME, STATE_HIER, STATE_PATH, STATE_ERROR };
+
+#define MINURLLENGTH 5 /* 2 chars domain name, dot, 2 chars TLD */
+
+bool
+IsValidURL(char *testString)
+{
+ char *result = testString;
+ char *hostname = testString;
+ enum URLSCANSTATE state = STATE_SCHEME;
+
+ if (!*result) {
+ return(false);
+ }
+
+ while (*result && state != STATE_ERROR) {
+ switch (*result) {
+ case ':':
+ if (state == STATE_SCHEME) {
+ if (result == testString) {
+ state = STATE_ERROR;
+ } else {
+ state = STATE_ENDOFSCHEME;
+ }
+ }
+ break;
+ case '/':
+ if (state == STATE_ENDOFSCHEME) {
+ if (*(result + 1) == '/') {
+ state = STATE_HIER;
+ hostname = result + 2;
+ result++;
+ } else {
+ state = STATE_ERROR;
+ }
+ } else {
+ if (state == STATE_HIER || state == STATE_SCHEME) {
+ state = STATE_PATH;
+ if (result - hostname < MINURLLENGTH) {
+ state = STATE_ERROR;
+ }
+ }
+ }
+ break;
+ default:
+ break;
+
+ }
+ result++;
+ }
+
+ return (state != STATE_ERROR);
+}
diff --git a/app/bin/validator.h b/app/bin/validator.h
new file mode 100644
index 0000000..3706f0f
--- /dev/null
+++ b/app/bin/validator.h
@@ -0,0 +1,29 @@
+/** \file validator.h
+ * Validators for misc textformats
+*/
+
+/* XTrackCAD - Model Railroad CAD
+* Copyright (C) 2019 Martin Fischer
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+*/
+
+#ifndef HAVE_VALIDATOR_H
+#define HAVE_VALIDATOR_H
+
+#include <stdbool.h>
+bool IsValidURL(char *testString);
+
+#endif // !HAVE_VALIDATOR_H
+
diff --git a/app/cornu/bezctx_xtrkcad.c b/app/cornu/bezctx_xtrkcad.c
index 1b902b2..f30e1c2 100644
--- a/app/cornu/bezctx_xtrkcad.c
+++ b/app/cornu/bezctx_xtrkcad.c
@@ -41,6 +41,7 @@ typedef struct {
BOOL_T is_open;
BOOL_T has_NAN;
BOOL_T draw_spots;
+ DIST_T spot_size;
coOrd last_pos; // For moveTo
int ends[2]; //Start and End knot number
@@ -168,9 +169,9 @@ static void
seg->type=SEG_FILCRCL;
seg->u.c.center.x = bc->last_pos.x;
seg->u.c.center.y = bc->last_pos.y;
- seg->u.c.radius = 0.25;
+ seg->u.c.radius = bc->spot_size;
seg->width = 0.0;
- seg->color = wDrawColorBlack;
+ seg->color = wDrawColorGrey40;
}
}
@@ -187,7 +188,7 @@ bezctx_xtrkcad_mark_knot(bezctx *z, int knot_idx) {
bezctx *
-new_bezctx_xtrkcad(dynArr_t * segArray, int ends[2], BOOL_T spots) {
+new_bezctx_xtrkcad(dynArr_t * segArray, int ends[2], BOOL_T spots, DIST_T spot_size) {
bezctx_xtrkcad *result = znew(bezctx_xtrkcad, 1);
@@ -203,8 +204,14 @@ new_bezctx_xtrkcad(dynArr_t * segArray, int ends[2], BOOL_T spots) {
result->is_open = FALSE;
result->has_NAN = FALSE;
result->draw_spots = spots;
+ result->spot_size = spot_size;
result->track = TRUE;
+ result->segsArray->cnt =0;
+ result->segsArray->ptr =0;
+ result->segsArray->max =0;
+
+
return &result->base;
}
diff --git a/app/cornu/bezctx_xtrkcad.h b/app/cornu/bezctx_xtrkcad.h
index 4117870..6426481 100644
--- a/app/cornu/bezctx_xtrkcad.h
+++ b/app/cornu/bezctx_xtrkcad.h
@@ -1,4 +1,4 @@
-bezctx * new_bezctx_xtrkcad(dynArr_t * segs, int ends[2], BOOL_T spots);
+bezctx * new_bezctx_xtrkcad(dynArr_t * segs, int ends[2], BOOL_T spots, DIST_T spot_size);
void bezctx_to_xtrkcad(bezctx *bc);
BOOL_T bezctx_xtrkcad_close(bezctx *bc);
diff --git a/app/doc/CMakeLists.txt b/app/doc/CMakeLists.txt
index a01d7af..adc21b3 100644
--- a/app/doc/CMakeLists.txt
+++ b/app/doc/CMakeLists.txt
@@ -6,14 +6,12 @@ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/hhc.cmake.in ${CMAKE_CURRENT_BINARY_D
FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html)
-GET_TARGET_PROPERTY(HALIBUT_COMMAND halibut LOCATION)
-
SET(HALIBUT_SOURCES
${CMAKE_CURRENT_BINARY_DIR}/intro.but
${CMAKE_CURRENT_SOURCE_DIR}/addm.but
${CMAKE_CURRENT_SOURCE_DIR}/changem.but
${CMAKE_CURRENT_SOURCE_DIR}/drawm.but
- ${CMAKE_CURRENT_SOURCE_DIR}/editm.but
+ ${CMAKE_CURRENT_SOURCE_DIR}/editm.but
${CMAKE_CURRENT_SOURCE_DIR}/filem.but
${CMAKE_CURRENT_SOURCE_DIR}/helpm.but
${CMAKE_CURRENT_SOURCE_DIR}/hotbar.but
@@ -38,7 +36,7 @@ ADD_CUSTOM_TARGET(clean-html
# If we're using the GTK back-end, just generate "vanilla" HTML help files for use with gtkhtml
IF(XTRKCAD_USE_GTK)
- IF (APPLE)
+ IF (APPLE)
SET(HALIBUT_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/osxconf.but ${HALIBUT_SOURCES})
ELSE(APPLE)
SET(HALIBUT_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/linconf.but ${HALIBUT_SOURCES})
@@ -49,7 +47,7 @@ IF(XTRKCAD_USE_GTK)
DEPENDS halibut ${HALIBUT_SOURCES}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/clean-html.cmake
- COMMAND ${HALIBUT_COMMAND} ${HALIBUT_SOURCES}
+ COMMAND halibut ${HALIBUT_SOURCES}
)
ADD_CUSTOM_TARGET(help-html ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/html/index.html)
@@ -106,7 +104,7 @@ ELSE(XTRKCAD_USE_GTK)
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/clean-html.cmake
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/png.d ${CMAKE_CURRENT_BINARY_DIR}/html/png.d
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/xtrkcad_win.css ${CMAKE_CURRENT_BINARY_DIR}/html
- COMMAND ${HALIBUT_COMMAND} ${HALIBUT_SOURCES}
+ COMMAND halibut ${HALIBUT_SOURCES}
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/hhc.cmake
)
@@ -118,4 +116,3 @@ ELSE(XTRKCAD_USE_GTK)
)
ENDIF(XTRKCAD_USE_GTK)
-
diff --git a/app/doc/addm.but b/app/doc/addm.but
index 724e5fd..f2caf26 100644
--- a/app/doc/addm.but
+++ b/app/doc/addm.but
@@ -12,63 +12,63 @@
\H{addM}\i{Add Menu}
-\G{png.d/madd.png}
+\G{png.d/madd.png}
-The \f{Add Menu} has all the actions related to adding track pieces to the layout.
+The \f{Add Menu} has all the actions related to adding track pieces to the layout.
\dd \f{Circle Track} - place a circle of track by selecting radius, tangent and or center (\K{cmdCircle}).
\u000
-\dd \f{Curved Track} - lay curved track pieces using different modes for selecting start and endpoints and radius (\K{cmdCurve}).
+\dd \f{Curved Track} - lay curved track pieces using different modes for selecting start and endpoints and radius (\K{cmdCurve}).
\u000
-\dd \f{Hand-laid Turnout} - lay a turnout in place on the layout.
+\dd \f{Hand-laid Turnout} - lay a turnout in place on the layout. (\K{cmdHandLaidTurnout})
\u000
-\dd \f{Helix} - Add a helix.
+\dd \f{Helix} - Add a helix. (\K{cmdHelix})
\u000
-\dd \f{Parallel} - create parallel track to existing flex-track, straight or curved.
+\dd \f{Parallel} - create parallel track or line to existing flex-track, straight or curved track. (\K{cmdParallel})
\u000
-\dd \f{Straight Track} - lay straight track pieces of arbitrary lengths
+\dd \f{Straight Track} - lay straight track pieces of arbitrary lengths
\u000
-\dd \f{Structure} - Add a predefined structure to the layout.
+\dd \f{Structure} - Add a predefined structure to the layout.
\u000
-\dd \f{Turnout} - select a turnout or a piece of fixed track and place on layout.
+\dd \f{Predefined Track} - select a turnout or a piece of fixed track and place on layout.
\u000
-\dd \f{Turntable} - Place a turntable.
+\dd \f{Custom Turntable} - Place a turntable. (\K{cmdTurntable})
\u000
-\dd \f{Block} - Create a block.
+\dd \f{Block} - Create a block. (\K{cmdBlock})
\u000
-\dd \f{Switchmotor} - Create a switchmotor.
+\dd \f{Switchmotor} - Create a switchmotor. (\K{cmdSwitchmotor})
\u000
-\dd \f{Signal} - Create a signal.
+\dd \f{Signal} - Create a signal. (\K{cmdSignal})
\u000
-\dd \f{Control} - Create a control.
+\dd \f{Control} - Create a control. (\K{cmdControl})
\u000
-\dd \f{Sensor} - Create a sensor.
+\dd \f{Sensor} - Create a sensor. (\K{cmdSensor})
\S{cmdCircle} Circle Track
@@ -76,17 +76,23 @@ The \f{Add Menu} has all the actions related to adding track pieces to the layou
A circle track is a special form of a curved track that extends 360\u00B0 and has no endpoints. The three methods (with their Shortcut keys) used to create a Circle Track are:
-\dd \G{png.d/bcircl1.png} (\c{Control-8}) Use the Fixed Radius specified on the \e{Circle Radius} control displayed on the Status Bar (\K{mainW}). Drag the Circle track into position.
+\u000
+
+\dd (\K{cmdCircleFixedRadius}). Use the Fixed Radius specified on the \e{Circle Radius} control displayed on the Status Bar (\K{mainW}).
+\c{Left-Drag} the Circle track into position.
\u000
-\dd \G{png.d/bcircl2.png} (\c{Control-9}) Drag from tangent point (Edge) of the Circle track to the Center.
+\dd (\K{cmdCircleTangent}). \c{Left-Drag} from tangent point (Edge) of the Circle track to the Center.
\u000
-\dd \G{png.d/bcircl3.png} (\c{Control-0}) Drag from the Center of the Circle track to the edge.
+\dd (\K{cmdCircleCenter}). \c{Left-Drag} from the Center of the Circle track to the edge.
+
+\u000
-A drop down menu, which allows selection of the Circle Track creation method, is invoked from the down arrow button (\G{png.d/bmenu.png}) located on the right side the Circle track button. Dependent upon previous selection, the Circle Track button will look like \G{png.d/bcircl1.png}, \G{png.d/bcircl2.png} or \G{png.d/bcircl3.png}.
+A drop down menu, which allows selection of the Circle Track creation method, is invoked from the down arrow button (\G{png.d/bmenu.png}) located on the right side the Circle track button.
+Dependent upon previous selection, the Circle Track button will look like \G{png.d/bcircl1.png}, \G{png.d/bcircl2.png} or \G{png.d/bcircl3.png}.
\dd \G{png.d/bmcircle.png}
@@ -100,57 +106,171 @@ You can join to and from circles, after which they become curved tracks.
\rule
+\S2{cmdCircleFixedRadius} Circle Fixed Radius
+
+\G{png.d/bcircl1.png}
+
+(\c{Control-8}) Use the Fixed Radius specified on the \e{Circle Radius} control displayed on the Status Bar (\K{mainW}).
+\c{Left-Drag} the Circle track into position.
+
+\rule
+
+\S2{cmdCircleTangent} Circle Fixed Tangent
+
+\G{png.d/bcircl2.png}
+
+(\c{Control-9}) \c{Left-Drag} from tangent point (Edge) of the Circle track to the Center.
+
+\rule
+
+\S2{cmdCircleCenter} Circle From Center
+
+\G{png.d/bcircl3.png}
+
+(\c{Control-0}) \c{Left-Drag} from the Center of the Circle track to the edge.
+
+\rule
+
\S{cmdCurve} Curved Track
\G{png.d/bcurve.png}
-Creating a curve is a two step operation. The four methods (with their Shortcut keys) used to create a Curved Track are:
+Creating a curve is a two step operation.
+
+The five methods (with their Shortcut keys) used to create a Curved Track are:
+
+\dd
-\dd \G{png.d/bcurve1.png} (\c{Control-4}) Drag from one endpoint in the direction of the Curve at that point and release. Click and Drag the red arrows to position the second endpoint.
-If Shift is held down when the first endpoint is being placed and the cursor is on a track, the new curve end will "Snap" to the nearest open track endpoint and you can drag out the second end aligned to that track. After a track is competed, the new track will be connected to this first track.
+\dd \K{cmdCurveEndPt}. Drag out the end and then set its radius by dragging the endpoint.
\u000
-\dd \G{png.d/bcurve2.png} (\c{Control-5}) Drag from one of the endpoints to the Center of the Curved track and release. Click and Drag to position the second endpoint.
-If Shift is held down when the first endpoint is being placed and the cursor is on a track, the new curve end will "Snap" to the nearest open track endpoint and you can drag out the center at right angles aligned to that end. After a track is competed, the new track will be connected to this first track.
+\dd \K{cmdCurveTangent}. Drag from the an endpoint to the center and then drag the second enpoint around that center.
\u000
-\dd \G{png.d/bcurve3.png} (\c{Control-6}) Drag from the Center of the Curved track to one of the endpoints and release. Click and Drag to position the second endpoint.
-Shift has no effect.
+\dd \K{cmdCurveCenter}. Drag from the Center of the Curved track to one of the endpoints. Position the second endpoint around the center.
\u000
-\dd \G{png.d/bcurve4.png} (\c{Control-7}) Drag from one endpoint to the other endpoint to form the Chord of the Curve and release. Click on the center of the track and Drag to form the Curve.
-Shift has no effect.
+\dd \K{cmdCurveChord}. Drag from one endpoint to the other endpoint to form the Chord of the Curve. Drag the arc out to form the Curve.
\u000
-\dd \G{png.d/bezier.png} Place one endpoint and drag out the first control point and release, Place the second Endpoint and drag out the second control point and release. Once all 4 points are placed, you can pick one at a time and drag it to move it. Complete the Curve by pressing Enter, or Reject it with Esc.
-If Shift is held down when either endpoint is being placed it will "Snap" to an open track endpoint of the track underneath the cursor and you can only drag out the control point aligned to the end of the track. After the new track is competed, it will be connected to this existing track.
+\dd \K{cmdBezier}. Construct a Bezier by placing its four control points.
\u000
-A drop down menu, which allows selection of the Curved Track creation method, is invoked from the down arrow button (\G{png.d/bmenu.png}) located on the right side the Curved track button. Dependent upon previous selection, the Curved Track button will look like \G{png.d/bcurve1.png}, \G{png.d/bcurve2.png}, \G{png.d/bcurve3.png} or \G{png.d/bcurve4.png}.
+A drop-down menu, which allows selection of the Curved Track creation method, is invoked from the down arrow button (\G{png.d/bmenu.png}) located on the right side the Curved track button. Dependent upon previous selection, the Curved Track button will look like \G{png.d/bcurve1.png}, \G{png.d/bcurve2.png}, \G{png.d/bcurve3.png}, \G{png.d/bcurve4.png}, \G{png.d/bezier.png} or \G{png.d/bcornu.png}.
\dd \G{png.d/bmcurved.png}
\dd \e{Curved Track Button Menu}
-In all but the bezier case, two Red arrow heads will be drawn after the first step to indicate where you can Drag to complete the second step.
+For all but the Bezier Curve, two Red arrow heads will be drawn after the first step to indicate where you can \c{Left-Drag} to complete the second step.
-A straight track will be created if the second endpoint is lined up with the first endpoint.
+A straight track will be created if the second endpoint is lined up with the first endpoint except for Bezier tracks.
-If the Snap Grid (\K{cmdGrid}) is enabled then the endpoints will be constrained to the grid.
+If the Snap Grid (\K{cmdGrid}) is enabled then the endpoints will be constrained to the grid if they are not snapped to another object. \c{Shift} ensures that other objects will be ignored.
+
+Optionally, the curve center point and radius can be displayed for the Curve. This is enabled by the Move Label (\K{cmdMoveLabel}) command.
+
+For Beziers, the active control point will be drawn in red and the available endpoints are shown with circles.
+
+
+\f{Note:} You can also create Straight and Curved tracks using \k{cmdModify} by \c{Left-Drag}ing out extra track from an open end-point.
+
+\rule
+
+\S2{cmdCurveEndPt} Curved Track from End Point
+
+\G{png.d/bcurve1.png}
+
+(\c{Control-4}) Drag from one endpoint in the direction of the Curve at that point and release. \c{Left-Drag} the red arrows to position the second endpoint.
+
+While the first endpoint is being placed, and \f{MagneticSnap} is enabled, unless \e{Alt} is held, if the cursor is on a track, the new curve end will "Snap" to the nearest open track endpoint and you will drag out the second end in aligned to that track, once you are dragging the second end it will be restricted to an arc that has the same end angle as the first endpoint. After a track is competed, the new track will be connected to this first track.
+This will also happen with \f{MagneticSnap} if \e{Alt} is held.
+
+\rule
+
+\S2{cmdCurveTangent} Curved track from Tangent
+
+\G{png.d/bcurve2.png}
+
+(\c{Control-5}) Drag from one of the endpoints (which will behave like the first point in "CurvedTrack From End" to the Center of the Curved track and release.
+\c{Left-Drag} on the arrows to position the second endpoint.
+
+While the endpoints are being placed, if \f{MagneticSnap} is enabled, unless \c{Alt} is held down, they will "Snap" to an open track endpoint of the tracks underneath the cursor and you can only drag out the control point aligned to the end of those tracks.
+After the new track is completed, it will be connected to these existing track.
+If \f{MagneticSnap} is disabled, the snap will only happen if \e{Alt} is held.
+
+\rule
+
+\S2{cmdCurveCenter} Curved Track From Center
+
+\G{png.d/bcurve3.png}
-Optionally, the curve center point and radius can be displayed for the Curve. This is enabled by the Move Label (\K{cmdMoveLabel}) command.
+(\c{Control-6}) Drag from the Center of the Curved track to one of the endpoints and release. \c{Left-Drag} to position the second endpoint.
-For Beziers, the active control point will be drawn in red and the available endpoints are shown with circles.
+While the endpoints are being placed, if \f{MagneticSnap} is enabled, unless \c{Alt} is held down, they will "Snap" to an open track endpoint of the tracks underneath the cursor and you can only drag out the control point aligned to the end of those tracks.
+After the new track is completed, it will be connected to these existing track.
+If \f{MagneticSnap} is disabled, the snap will only happen if \e{Alt} is held.
-\f{Note:} You can also create Straight and Curved tracks using \k{cmdModify} by dragging out extra track from an open end-point.
+\rule
+
+\S2{cmdCurveChord} Curved Track from Chord
+
+\G{png.d/bcurve4.png} (\c{Control-7}) Drag from one endpoint to the other endpoint to form the Chord of the Curve and release. \c{Left-Click} on the center of the track and Drag to form the Curve.
+The first end point acts like "CurvedTrack From End". If an exitsing track end is selected, the Chord will only move along line orthogonal to the track.
+
+While the endpoints are being placed, if \f{MagneticSnap} is enabled, unless \c{Alt} is held down, they will "Snap" to an open track endpoint of the tracks underneath the cursor and you can only drag out the control point aligned to the end of those tracks.
+After the new track is completed, it will be connected to these existing track.
+If \f{MagneticSnap} is disabled, the snap will only happen if \e{Alt} is held.
\rule
+\S2{cmdBezier} Curved Bezier Track
+
+\G{png.d/bezier.png}
+
+\c{Left-Click} to place one endpoint and \c{Left-Drag} out the first control point and release, \c{Left-Click} to place the second Endpoint and \c{Left-Drag} out the second control point and release.
+Once all 4 points are placed, you can pick one at a time and drag it to move it.
+Complete the Curve by pressing \c{Enter|, or Reject it with c\{Esc}.
+
+While the endpoints are being placed, if \f{MagneticSnap} is enabled, unless \c{Alt} is held down, they will "Snap" to an open track endpoint of the tracks underneath the cursor and you can only drag out the control point aligned to the end of those tracks.
+After the new track is completed, it will be connected to these existing track.
+If \f{MagneticSnap} is disabled, the snap will only happen if \e{Alt} is held.
+
+\rule
+
+\S{cmdCornu} Create Cornu Track
+
+\dd \G{png.d/bcornu.png} \c{Left-Click} to place each endpoint on an open track end or just on the layout.
+During the move to the click, if \f{MagneticSnap} is enabled, an anchor will show when the cursor is near an open end point. This can be inhibited with \e{Alt}.
+If \f{MagneticSnap} is disabled this will only happen if \e{Alt} is held.
+
+\c{Left-Drag} if the endpoint not on an existing track drags out the end angle of the new track. This is shown by the Cornu endanchor.
+
+\G{png.d/cornuendanchor.png}
+
+The anchor is only drawn for Cornu ends that are not joined to existing tracks and it shows the position, direction and radius of the track, and has anchors for altering these properties.
+When the Cornu is joined to a track, it uses the properties of the end of that track instead.
+Anchor point handles are drawn outside the end of the Cornu track to allow track-pins to be edited on the track itself.
+\c{Left-Click} to place the second Endpoint either on a track endpoint or not. \c{Left-Drag} sets the second end angle like the first for unconnected end-points.
+
+Complete the Curve by pressing \c{Enter}, or Reject it with \c{Esc}.
+
+The radius and angle of the selected open Cornu end can also be set with text entry boxes in the Status Bar.
+
+When either endpoint is being moved it will "Snap" to an open track endpoint of the tracks underneath the cursor unless \c{Shift} is held.
+You can then only move the endpoint along that track if it is splitable, or in an extension of it. After the new track is completed, it will be connected to these existing tracks.
+
+Cornu Track Pins are further explained in \K{joinCornu} - they constrain the Cornu curve to smoothly pass through thier position as well as satisfying the end conditions. You can place them by clicking on the Cornu and select, \e{Drag} to move them around or hit \e{Delete} to remove them.
+
+If the end is not connected, an anchor will enable the end-angle and radius to be set by dragging. Initially the end radius is set to be zero and the angle will be picked to create a smooth curve given the end angle. Altering the end angle with the anchor resets the radius to zero.
+
+\u000
+
\S{cmdHandLaidTurnout} Hand-laid Turnouts
@@ -166,7 +286,7 @@ Hand-laid turnouts are created by specifying 3 values:
First select the position for the Frog (\K{generalTerms}) on an existing track and then \e{Drag} away to specify the angle of the \e{Frog}. The angle in degrees and equivalent frog number is displayed on the status bar. When you release, the line indicating the angle jumps to one side of the track to show you the center line of the new leg of the turnout.
-Next \e{Click} and \e{Drag} to position the Points (\K{generalTerms}) for the turnout. As you \e{Drag}, tracks will be drawn showing the turnout. When you release the turnout is created.
+Next \c{Left-Click} and \c{Left-Drag} to position the Points (\K{generalTerms}) for the turnout. As you \c{Left-Drag}, tracks will be drawn showing the turnout. When you release the turnout is created.
You cannot place the \e{Frog} or \e{Points} on a turnout, circle or helix. However, you can create overlapping Hand-laid Turnouts.
@@ -191,7 +311,7 @@ In the case where different parameters could be affected (for instance changing
Changing \e{Vertical Separation} affects \e{Turns} which must be an integer value (no fractions), and this in turn affects the \e{Vertical Separation}. When you set \e{Vertical Separation} you are specifying the minimum separation which is adjusted upwards to the actual value.
-Note: only the \e{Radius} and \e{Turns} are used when creating the helix. After joining the helix to other tracks, you will want to establish the heights of the endpoints at each end of the helix. You can use the Elevation (\K{cmdElev}) command to do this.
+Note: only the \e{Radius} and \e{Turns} are used when creating the helix. After joining the helix to other tracks, you will want to establish the heights of the endpoints at each end of the helix. You can use the Elevation (\K{cmdElevation}) command to do this.
A helix is placed the same way as a Circle Track (\K{cmdCircle}) with the addition that you specify the number of turns as well the as the radius of the helix. Then the helix is dragged into position on the layout.
@@ -201,34 +321,66 @@ A label for the helix is drawn at it's the center. If the elevations are set (e
\rule
+\S{cmdParallel} Parallel Track or Line
+
+You can pick between two Parallel Commands:
+
+\dd
+
+\u000
+
+\dd \K{cmdParallelTrack}. You can create a new track parallel to any straight, curved, bezier, cornu or easement track.
+
+\u000
+
+\dd \K{cmdParallelLine}. You can create a line parallel to any straight, curved, bezier, cornu or easement track or straight lines, curved lines and PolyLines.
+
+\rule
+
+\S2{cmdParallelTrack} Parallel Track
-\S{cmdParallel} Parallel Track
+\G{png.d/bparallel.png}
-\G{png.d/bparalle.png}
+Select the Track you want to parallel with \c{Left-Click}, and the new parallel track will appear beside it. You control which side the new track will be on by \c{Left-Drag}ging the cursor from one side to the other of the selected track before releasing it.
-You can create a new track parallel to any straight, curved or easement track.
+\G{png.d/statusbarparallel.png}
-\G{png.d/satusbarparallel.png}
+The \f{Parallel Separation} control (Visible in the Status Bar) displays the intended separation between parallel tracks/line. This value can be changed before selecting a track. The value must be greater than 0.0 if the gauges are equal.
+
+\b If the gauges are equal, a value of 0.0 means that the rail of the second track is overlaid on the first to simulate dual guage track. The railside that the new track "shares" is set by which side of center the cursor is on when released.
+The new track will have NoTies set on.
-The \f{Parallel Separation} control (Visible in the Status Bar) displays the current separation between parallel tracks. This value can be changed before selecting a track. The value must be greater than 0.0.
+\b The seperation can be automatically increased using the \f{Radius Factor} value. If this is set to 0.0 (default) the seperation value will be used regardless of radius.
+If the value is set to 1.0, the seperation will be increased by a scaled 2864 inches per inch of curvature of the paralled track - this is in accordance with North American prototype practice.
+Other values of Radius Factor will alter by an equivalent percentage. For example, 0.5 would use 50% of this increase.
-Select the track you want to parallel, and the new parallel track will appear beside it. You control which side the new track will be on by moving the cursor from one side to the other of the selected track.
+\u000
-This is very useful for creating sidings and yards.
+This command is very useful for creating sidings and yards as well as dual track.
-You cannot create tracks parallel to turnouts or sectional track.
+\b No parallel to a turnouts or a non-straight piece of sectional track is created.
-It is possible to create tracks that abut (the endpoints are very close and aligned). These endpoints will be automatically connected.
+\b It is possible to create tracks that abut (the endpoints are very close and aligned).
+These endpoints will be automatically connected.
\rule
+\S2{cmdParallelLine} Parallel Lines
+
+\G{png.d/bparalleline.png}
+
+Select the Track or Line you want to parallel with \c{Left-Click}, and the new parallel line will appear beside it.
+
+\b Note that Lines are not joined - if you wish you can select a series of Lines and turn them into a PolyLine using \K{cmdJoinLine}.
+
+\rule
\S{cmdStraight} Straight Track
\G{png.d/bstraigh.png}
-Straight track is a created by selecting the first endpoint then dragging the cursor to the point where you want the second endpoint to be.
-If Shift is held down when the first endpoint is being placed and the cursor is on a track, the new straight end will "Snap" to the nearest open track endpoint and you can drag out the second end aligned to that track. After a track is competed, the new track will be connected to the existing track.
+Straight track is a created by \c{Left-Click} to select the first endpoint then \c{Left-Drag}ing the cursor to the point where you want the second endpoint to be.
+Unless \c{Shift} is held down when the first endpoint is being placed and the cursor is on a track, the new straight end will "Snap" to the nearest open track endpoint and you can drag out the second end aligned to that track. After a track is competed, the new track will be connected to the existing track.
If the Snap Grid (\K{cmdGrid}) is enabled then the endpoints will be constrained to the grid.
@@ -264,7 +416,7 @@ You can use the Parameter File Dialog (\K{cmdPrmfile}) to control what turnouts
\G{png.d/turnsel.png}
-Select a turnout from the scrolling list. A picture of the selected turnout is drawn in the diagram canvas. You can pick the Active endpoint (\K{generalTerms}) by clicking on an endpoint in the diagram. The Active endpoint (\K{generalTerms}) is indicated by a highlighted square.
+Select a turnout from the scrolling list by \c{Left-Click}ing on it. Move to the Layout and \c{Left-Click} where the turnout should be placed. The Turnout will snap to nearby flextracks or open endpoints. By \c{Left-Drag}ing you can move the turnout around. Additional \c{Left-Click}s change the way the turnout is placed.
The \f{New} button invokes the Turnout Designer (\K{cmdTurnoutNew}) dialog. This button displays a pop-up-menu list of various types of turnouts and sectional track.
@@ -295,14 +447,14 @@ The \f{Turntable Angle} control on the Preferences (\K{cmdPref}) dialog controls
\G{png.d/bblock.png}
-A block is created by first selecting the track segments in the block and then
-selecting \f{Create Block} from either the Add menu \K{cmdAdd} or from the block menu on the
-hotbar. A block gets a name and a script. The name is only used for
-identification and the script is used by the layout control software. The
-script should provide whatever information is needed by the layout control
-software to determine block occupancy. This could be a code snippet to
-retrieve the state of the block occupancy or it could be the address of the
-sensor, etc.
+A block is created by first selecting the track segments in the block and then
+selecting \f{Create Block} from either the Add menu \K{cmdAdd} or from the block menu on the
+hotbar. A block gets a name and a script. The name is only used for
+identification and the script is used by the layout control software. The
+script should provide whatever information is needed by the layout control
+software to determine block occupancy. This could be a code snippet to
+retrieve the state of the block occupancy or it could be the address of the
+sensor, etc.
\G{png.d/block.png}
@@ -310,9 +462,9 @@ The create block dialog has spaces for two text strings. One is the name and
the other is a block occupancy script. The name identifies the block and the
script is information used by the layout control software to detect block
occupancy. The script could be a code snippet or I/O device address
-information, etc.
+information, etc.
-\rule
+\rule
\S{cmdSwitchmotor} Switchmotor
@@ -325,7 +477,7 @@ identification and the three scripts are used by the layout control software.
The three scripts are for throwing the turnout to its "normal" position,
throwing the turnout to its "reverse" position, and a script to read a point
position sensor. These scripts could be code snippets or they could be
-addresses of I/O devices, etc.
+addresses of I/O devices, etc.
\G{png.d/switchmotor.png}
@@ -344,20 +496,20 @@ could be code snippets or I/O device address information, etc.
A signal is created by selecting \f{Create Signal} from either the Add menu \K{cmdAdd} or
from the hotbar. Use the mouse to select a location (left button) and then
-draging (left button down) the signal to set its orientation. Once the left
-button is released, a Create/Edit Signal dialog box is displayed, and you can
-fill in the signal's properties: name, fine tune the location and orientation,
+draging (left button down) the signal to set its orientation. Once the left
+button is released, a Create/Edit Signal dialog box is displayed, and you can
+fill in the signal's properties: name, fine tune the location and orientation,
number of heads, and the aspects.
\G{png.d/signal.png}
-The create/edit signal dialog has spaces for the name of the signal, its
-location and orientation, the number of heads (1, 2, or 3), and a list of
-aspects. Each aspect has a name and a script. The name could be a rule book
-name (Clear, Aproach, Stop, etc.) or the actual color(s) displayed (green,
-yellow, red, etc.). The script is just some information for the layout
-control software to actually effect the display of the aspect -- this could be
-the LCC event id to trigger the aspect or it could be a code snippet that
+The create/edit signal dialog has spaces for the name of the signal, its
+location and orientation, the number of heads (1, 2, or 3), and a list of
+aspects. Each aspect has a name and a script. The name could be a rule book
+name (Clear, Aproach, Stop, etc.) or the actual color(s) displayed (green,
+yellow, red, etc.). The script is just some information for the layout
+control software to actually effect the display of the aspect -- this could be
+the LCC event id to trigger the aspect or it could be a code snippet that
causes the aspect to be displayed.
\rule
@@ -366,11 +518,11 @@ causes the aspect to be displayed.
\G{png.d/bControl.png}
-A control is created by selecting \f{Create Control} from either the Add menu \K{cmdAdd} or
-from the hotbar. Use the mouse to select a location (left button) and then
-dragging (left button down) the control to where you want it. Once the left
-button is released, a Create/Edit Control dialog box is displayed, and you can
-fill in the control's properties: name, fine tune the location, and the on and
+A control is created by selecting \f{Create Control} from either the Add menu \K{cmdAdd} or
+from the hotbar. Use the mouse to select a location (left button) and then
+dragging (left button down) the control to where you want it. Once the left
+button is released, a Create/Edit Control dialog box is displayed, and you can
+fill in the control's properties: name, fine tune the location, and the on and
off scripts.
\G{png.d/control.png}
@@ -394,6 +546,6 @@ fill in the sensor's properties: name, fine tune the location, and the script.
\G{png.d/sensor.png}
-The create/edit sensor dialog has spaces for the name of the sensor, its
-location, and a script. The script is just some information for the layout
-control software to actually return the state of the sensor (on or off). \ No newline at end of file
+The create/edit sensor dialog has spaces for the name of the sensor, its
+location, and a script. The script is just some information for the layout
+control software to actually return the state of the sensor (on or off).
diff --git a/app/doc/appendix.but b/app/doc/appendix.but
index 2c16319..7c45c4a 100644
--- a/app/doc/appendix.but
+++ b/app/doc/appendix.but
@@ -12,9 +12,10 @@
The best way to move your design from computer to roadbed is to print out a full scale copy (or portions) of the layout. During the print process the orientation of the print grid can be adjusted so the printout will line up with the tracks.
-If you have cut-sheet printer (like a laser or ink-jet) set the Ignore Page Margins toggle on the print dialog. Normally there is an unprintable margin around the edge of the page and \e{XTrackCAD} only prints on the printable area, which means you would have to trim or overlay the pages. Setting the Ignore Page Margins toggle makes \e{XTrackCAD} ignore this margin so you can just abut the paper. Also, turn on Print Roadbed Outline and set your roadbed width.
+If you have cut-sheet printer (like a laser or ink-jet) set the Ignore Page Margins toggle on the print dialog. Normally there is an unprintable margin around the edge of the page and \e{XTrackCAD} only prints on the printable area, which means you would have to trim or overlay the pages.
+Setting the Ignore Page Margins toggle makes \e{XTrackCAD} ignore this margin so you can just abut the paper. Also, turn on Print Roadbed Outline and set your roadbed width.
-If you have a continuous form printer (like a dot matrix) you can print a series of pages to form a continuous strip as long as you need. I use an old wide carriage printer that was being thrown out and can print 8' by 13.2" strips. Accuracy is not critical, 9-pin will do fine. You may need to experiment with setting the Landscape/Portrait modes on the Printer Setup and the Print dialogs and rotating the Print Grid to get the pages in the correct orientation. In particular I've found it best to set the Printer Setup dialog to Portrait mode and select Landscape Page Format on the \e{XTrackCAD} Printer dialog.
+For large scale printouts, the ability of many platforms to print as PDF is very helpful. Commercial printers can oftem print very large strips of paper.
Once you have a full scale print-out of your layout (or portion, if you have a larger layout you don't want to do it all at once) you need to transfer this to the roadbed. Here's two methods that can be used:
@@ -24,6 +25,8 @@ Once you have a full scale print-out of your layout (or portion, if you have a l
\b Tape the print-out to the roadbed then using a tracing wheel (available at Sewing shops), trace the center-line of the track and roadbed outline. At this point consider places when you'll want to widen the roadbed to support signals, switch machines, joints etc.
+\b Some users have reported that they successfully used the DXF export to get a file into Computer Controlled Machines that can cut out trackbed.
+
\rule
@@ -71,17 +74,6 @@ Other prototype definitions can be created using the Car Prototype dialog. Refer
\rule
-\H{faqsButtonColor} Button Bar Icons Missing or Obscure
-
-\f{Why are Button Bar icons missing or obscure?}
-
-On systems restricted to 256 colors, it's not possible to display all colors on button faces. In this case, Windows chooses the closest matching color, which may be the same as the buttons background color. When this occurs the Button Bar icon may be obscured or appear to be missing.
-
-In cases where Layer Buttons are affected the number on the button may not be visible. Although it may not be possible to view the layer number, the correct color will be used to color objects that appear on the layer.
-
-\rule
-
-
\H{faqsJoin} How Do I Place and Join Tracks
\f{How do I join tracks, place turnouts, build a yard etc?}
@@ -115,6 +107,8 @@ Menu and sub-menu items are indicated by \e{File>Open}, which means select the \
\f{Edit Box} - an area where you can enter a String, Integer or Floating Point value.
+\f{FlexTrack} - an automatic object on the ToolBar that creates a Cornu Track element
+
\f{Highlighted} - an area on the Canvas which is in inverse-video.
\f{Left-Click} - same as \e{Click}, used in contexts where \e{Right-Click} is also used.
@@ -152,6 +146,12 @@ Menu and sub-menu items are indicated by \e{File>Open}, which means select the \
\f{Block Gap} - provides control by dividing the layout into electrically isolated blocks, where trains can be slowed or stopped by lowering or cutting the power to a block. Dividing a layout into blocks also permits operators to run more than one train on a layout with much less risk of a fast train catching up with and hitting a slow train. Blocks can also trigger signals or other animated accessories on the layout, adding more realism (or whimsy) to the layout. Three-rail systems will often insulate one of the common rails on a section of track, and use a passing train to complete the circuit and activate an accessory.
+\f{Cornu} - * Cornu curves are a family of mathematically defined curves that define spirals that Euler spirals and elastica come from.
+They have the useful property for us that curvature increases linearly along the curve which
+means the acceleration towards the center of the curve also increases evenly. Railways have long understood that
+smoothly changing the radius is key to passenger comfort and reduced derailments. The railway versions of these
+curves were variously called easements, Talbot or Euler spirals.
+
\f{DXF Format} - Abbreviation of \f{D}ata \f{E}xchange \f{F}ile, a two-dimensional graphics file format supported by virtually all PC-based CAD products. It was created by AutoDesk for the AutoCAD system.
\f{Easement} - special sections of gradually curving track used to connect straight and curved tracks (or two curved tracks). Easements reduce the effects of sudden changes in track curves which can cause derailments. They also look great!
diff --git a/app/doc/changem.but b/app/doc/changem.but
index c8cb189..97238fb 100644
--- a/app/doc/changem.but
+++ b/app/doc/changem.but
@@ -8,7 +8,7 @@
\H{changeM}\i{Change Menu}
-\G{png.d/mchange.png}
+\G{png.d/mchange.png}
The \f{Change Menu} has all functions related to modifying objects that exist on the layout drawing.
@@ -24,7 +24,11 @@ The \f{Change Menu} has all functions related to modifying objects that exist on
\u000
-\dd \f{Elevation} - define an elevation at specified track location (\K{cmdElev}).
+\dd \f{Convert Tracks} - chnages fixed tracks (Straight, Curve, Joint, Bezier) into a Smooth Cornu or vice versa. (\K{cmdConvert}).
+
+\u000
+
+\dd \f{Elevation} - define an elevation at specified track location (\K{cmdElevation}).
\u000
@@ -50,7 +54,7 @@ The \f{Change Menu} has all functions related to modifying objects that exist on
\dd \f{Pan/Zoom} - move or resize the viewport using the mouse.
-\u000
+\u000
\dd \f{Profile} - display the elevation profile of a definable stretch of track (\K{cmdProfile}).
@@ -125,15 +129,17 @@ Using the \f{Select} command, select the track that is to have its elevation set
This command is frequently used with \e{Sectional Track}. But it can be useful to reattach ordinary track which has become disconected or split.
-There are three modes,
+When in this connect, ends of tracks that can be selected are highlighted with a blue arrow. With \e{Shift} added, ends that can be tighten are highlighted with a blue "X".
+
+There are three modes,
\u000
\b a \f{Left} click on a track near a disconnected end-point followed by a second on a close-by disconnected end-point on another track will try to join two tracks
-\b a \f{Shift-Left} click on a connected track will "Tighten Tracks" moving other tracks connected to this track to reduce any small distance or angle differences
+\b a \f{Shift-Left} click on a connected track will "Tighten Tracks" moving other tracks connected to this track to reduce any small distance or angle differences
-\b selecting a set of tracks followed by a \f{Right} click will prompt for confirmation that all selected tracks with unconnected endpoints should be joined to nearby selected track at an unconnected end point. This mode allows for an entire layout to be reconnected after a Select-All.
+\b Selecting a set of tracks followed by a \e{"S" key} or using the Context menu will prompt for confirmation that all selected tracks with unconnected endpoints should be joined to nearby selected track at an unconnected end point. This mode allows for an entire layout to be reconnected after a Select-All.
\f{Notes for two track mode:} Occasionally pieces of sectional track do not line up exactly, especially when creating figure-8's or passing sidings. When laying out the actual track you can compensate for this by adjusting the individual tracks to provide a bit of slack. This command simulates that process.
@@ -147,12 +153,57 @@ You can undo the effect of the \f{Connect} command by splitting (\K{splitDisconn
\rule
+\S{cmdConvert} Convert Tracks
+
+\dd (\K{cmdConvertTo}). Convert Fixed to Cornu
+
+\dd (\K{cmdConvertFrom}). Convert Cornu to Fixed.
+
+A drop down menu, which allows selection of the Convert Mode, is invoked from the down arrow button (\G{png.d/bmenu.png}) located on the right side the Convert Tracks button.
+Dependent upon previous selection, the Convert Track button will look like \G{png.d/convertto.png} or \G{png.d/convertfrom.png}.
+
+\rule
+
+\S2{cmdConvertTo} Convert Fixed Track(s) to Cornu(s)
+
+\G{png.d/convertto.png}
+
+This command will take a pre-selected set of fixed track elements (Straights, Curves, Joint or Bezier) and convert them into a set of Cornu Tracks.
+If there are no selected Tracks, the user can click on a single track.
+
+The Cornu(s) will smoothly pass through all the end points of the selected tracks and smoothly join to the end-points (if any).
+This may change the internal shape of the resulting track(s) due to smoothing.
+A subsequent \k{cmdModify} can be used to fine tune the Cornu(s) by moving, adding and deleting "pins" in the combined shape.
+
+This command is intended to help conversion of track designs that were made before Cornu Track existed to Cornu.
+
+\rule
+
+\S2{cmdConvertFrom} Convert Cornu(s) and Bezier(s) to Fixed Track(s)
+
+\G{png.d/convertfrom.png}
-\S{cmdElev} Elevation
+This command will take a pre-selected set of Cornu and Bezier Tracks and convert them into a set of equivalent Straights or Curves,
+
+The resulting track(s) will mimic the shape of the Cornu/Bezier(s) exactly. This command is intended to allow easier layout of smoothed shapes.
+
+\rule
+
+\S{cmdElevation} Elevation
\G{png.d/belev.png}
-The \f{Elevation} command changes the elevation of track endpoints. After opening this dialog, you can click on the respective endpoint to set its elevation properties. The endpoint on which you work is indicated with a big red dot.
+The \f{Elevation} command changes the elevation of track endpoints. After opening this dialog, The Message Bar will show the computed elevation at the cursor. There will be an open blue circle if an endpoint will be selected with \f{Left-Click}. You click on the respective endpoint to set its elevation properties.
+
+The endpoint which you are working on is indicated with a big red dot.
+
+Moving around the layout will show you the elevation at the point indicated by a blue dot.
+
+If you hover over a point where two unconnected tracks pass over one another, a blue square will be drawn and the Message Bar will show the two elevations and the Clearance between them.
+
+If you add \f{Shift} as you move the cursor before clicking you will see a blue bar when it is over a track if a \f{Shift-Left-Click} will split the Track at that point (which will give you the opportunity to specify an elevation).
+
+Adding \f{Ctrl} allows you to \f{Ctrl+Left-Click} to Select and \f{Left-Drag} to move Elevation Labels if both the option is set for them to be displayed and the Zoom level is correct,, Only Defined and Station endpoint labels can be moved.
\G{png.d/celev.png}
@@ -174,14 +225,12 @@ An endpoint can have one of several elevation types:
\b \f{Station} - assigns a name to the endpoint.
-\f{Note:} Only one of these attributes can be assigned to an endpoint. For example, an endpoint can not be defined as a Grade and a Station at the same time.
+\f{Note:} Only one of these attributes can be assigned to an endpoint at a time. For example, an endpoint can not be defined as a Grade and a Station at the same time.
When an endpoint is selected on the layout by \e{Left-Click}, it is highlighted by a large red dot and its elevation type and values are displayed in the dialog.
Additionally, \f{Defined Elevation} endpoints are indicated on the layout by gold colored dots. \f{Ignored Elevation} endpoints are indicated by blue colored dots.
-\e{Shift+Left-Click} splits the track at the specified point and adds an elevation point.
-
The grade at the specified endpoint is displayed next to the \f{Grade} radio button. For \f{Defined Elevation} endpoints, the grade on each side of the endpoint is displayed.
\f{Defined Elevation} endpoints are used to specify fixed heights of track endpoints. Typically, this would be where a grade changes or where clearances must be maintained. \f{Computed} Elevations and \f{Grade} markers can place between \f{Defined Elevation} endpoints. These values are not entered directly but are computed dynamically based on \f{Defined Elevations} of connected tracks. This allows labeling of elevations at intermediate endpoints without having the enter specific values. \f{Computed} markers can also placed between a \f{Defined Elevation} point and the end of a track.
@@ -255,17 +304,43 @@ Certain turnouts, such as a Wye's, Three-Way or Crossings are symmetrical and th
\rule
-\S{cmdJoin} Join
+\S{cmdJoin} Join Tracks and Lines
+
+The \f{Join} command has two variatons,
+
+\dd (\K{cmdJoinTrack}). Join Tracks by connecting them.
+
+\u000
+
+\dd (\K{cmdJoinLine}). Create a PolyLine from two Draw Objects or Close a PolyLine as a Polygon.
+
+\rule
+
+\S2{cmdJoinLine} Join Lines
+
+\G{png.d/bjoinline.png}
+
+The \f{Join Line} command produces a PolyLine from two Draw objects (Straight Line, Curved Line, Bezier Line or PolyLine). You select the two ends to join and the new Polyline will replace the two Draw objects, filling in any gap with a straight line segment.
+If the two ends are of the same PolyLine, an unfilled Polygon will be created.
+
+\rule
+
+\S2{cmdJoinTrack} Join Tracks
\G{png.d/bjoin.png}
-The \f{Join} command is used to bring together and connect any two segments of track. During the join process, \e{XTrackCAD} ensures the connecting tracks are properly aligned.
+The \f{Join Track} command is used to bring together and connect any two segments of track. During the join process, \e{XTrackCAD} ensures the connecting tracks are properly aligned.
See \f{Help>Demo} (\K{cmdDemo}) for examples of how to join tracks.
For detail about;
-\dd Using curved flex-track to join track segments refer to \K{joinTrackCurve}.
+\dd Using complex curves if Easement is set to Cornu \K{joinCornu}.
+
+\u000
+
+\dd Using Normal Easments where tracks are either joined with a straight or a 'simple curve' \k{joinNormalEasment},
+e.g. one which uses a curve in a single direction as opposed to using reverse curves (\K{generalTerms})
\u000
@@ -277,11 +352,6 @@ For detail about;
\rule
-
-\S2{joinTrackCurve} Using Curved Flex-Track
-
-This method of joining track may be used using Normal Easments where tracks are either joined with a 'simple curve'\k{joinNormalEasment}, e.g. one which uses a curve in a single direction as opposed to using reverse curves (\K{generalTerms}) or using complex curves if Easement is set to Cornu \K{joinCornu}.
-
\S2{joinNormalEasment} Join with Normal Easement
\u000
@@ -314,10 +384,19 @@ This method of joining track may be used using Normal Easments where tracks are
}
-\n Move the mouse pointer over the endpoint of the other track then \e{Left-Click} and hold the mouse button down. A track connecting the two endpoints will appear. If the track appears in black (and you are happy with the curve as its drawn), release the mouse button.
+After the first track is selected, an entry field for prefered radius will be shown. A non-zero value will enable the snap anchor for the join radius.
+
+\n Move the mouse pointer over the endpoint of the other track then \e{Left-Click} and hold the mouse button down. A track connecting the two endpoints will appear.
\lcont{
+If the track appears in black (and you are happy with the curve as its drawn), release the mouse button.
+
+If the radius snap-anchor is active, and the position of the cursor is close to a position where the Join is exactly the desired radius, a blue circle will be shown.
+Releasing the button while it shows will snap the Join to the desired radius. If Easements are enabled as well, this fixed radius Join track will be joined to by easements.
+
+
+
\u000
\G{png.d/joincrv3.png}
@@ -360,29 +439,55 @@ For detail about;
\dd Moving one segment of track to join with another refer to \K{joinTrackMove}.
-\S2{joinCornu} \i{Creating a Cornu} \i{Cornu Easements} Join with Cornu Easement
+\rule
-\u000
+\S2{joinCornu} Join with Cornu Easement
-\n First, ensure that the Easement type option is set to Cornu - see \k{cmdEasement}
+\i{Creating a Cornu} \i{Modifying a Cornu} \i{Cornu Easements}
-\n Start the join process by clicking on the Join button (\G{png.d/bjoin.png}).
+A Cornu is a form of curve that uses a mathematical approach to creating a curve between two sets of end conditions.
-\lcont{
+The curve is designed to change curvature linearly along its length - which is the characteristic of a railway easement because it minimizes sudden changes in acceleration towards the center of curvature.
-\u000
+The conditions used at each end are the radius, angle and position.
-\G{png.d/joincornu1.png}
+Cornus can have added constraints in the form of track "pins" that force the curve to smoothly pass through that point while still respecting the end conditions.
+
+Cornus can be used in XtrackCAD to both Join tracks smoothly and form smooth curves that are not joined to other tracks.
+
+Because Cornu are mathematically generated, they can also be regenerated at will and so Cornu Joins have the unique characteristic in XTrackCAD that they remain connected even if the tracks at the ends are moved or even change shape.
+
+Cornu Joins will use whatever space is available - that is their "tightness" (rate of change of curvature) is variable and dynamic. The minimum radius is calculated and will show as an exception, but the acceptable rate of change of curvature is the choice of the designer.
+
+It is not always the case that the Cornu will be the most efficient way to get from A to B - because of its shape it will be the smoothest. If you want to bias the result, you can add TrackPins (\K{cornuTrackPins}).
+
+\rule
+
+\S2{cornuTrackPins} Cornu Track Pins
+
+XTrackCAD Cornu can have "track pins" added that constrain the track to pass through those points in addition to meeting the end-conditions.
+This allows the track to be skewed or slewed around obstacles, or to suit some other constraint.
+
+The pins can be added when Cornus are created \K{cmdCornu} or during \K{cmdModify} after clicking on the track. They can be selected and then \c{Left-Drag} dragged to alter the curve shape or deleted with \c{Delete}.
+
+When a Cornu Track with pins is saved, it is split into two Cornu joined at the pin. If a Cornu that is joined to another Cornu is Modified with \K{cmdModify}, the joints are rendered as Pins and the Modify is done for one continuous Cornu.
\u000
-}
+\n First, ensure that the Easement type option is set to Cornu - see \k{cmdEasement}
+
+\n Start the Join Track process by clicking on the Join Track button (\G{png.d/bjoin.png}).
+
+As you move over tracks a blue roundel will indicate the end that will be chosen with \e{Left-Click}.
+
+\G{png.d/joincornu1.png}
-\dd \e{Left-Click} the open endpoint of one of the two tracks being joined. A red dot within a red circle will appear at the end of the join.
+\dd \c{Left-Click} the open endpoint of one of the two tracks being joined. A red dot within a red circle will appear at the end of the join.
\u000
-\dd \e{Left-Drag} the endpoint to where you want it and release the button. The point will only move along the piece of track with the open endpoint (if this track type can be split) as far as the opposite end, or as an extension of that track at the selected end with the same curvature (if this track can be extended). Note that you will be able to fine-tune the end positions later.
+\dd \c{Left-Drag} the endpoint to where you want it and release the button.
+The point will only move along the piece of track with the open endpoint (if this track type can be split) as far as the opposite end, or as an extension of that track at the selected end with the same curvature (if this track can be extended). Note that you will be able to fine-tune the end positions later.
\lcont{
@@ -394,11 +499,13 @@ For detail about;
}
-\dd \e{Left-Click} the endpoint of the other track being joined. Another red dot within a circle will appear at that end of the join.
+\dd \c{Left-Click} the endpoint of the other track being joined. Another red dot within a circle will appear at that end of the join.
\u000
-\dd \e{Left-Drag} the endpoint to where you want it and release the button. The second endpoint can only be moved along the second track as far as the other end (if it can be split) or as an extension beyond the end of this track (if it can be extended). The initial curve will be drawn - it will be red if the minimum radius is smaller than the minimum radius option.
+\dd \c{Left-Drag} the endpoint to where you want it and release the button.
+The second endpoint can only be moved along the second track as far as the other end (if it can be split) or as an extension beyond the end of this track (if it can be extended).
+The initial curve will be drawn - it will be red if the minimum radius is smaller than the minimum radius option.
\lcont{
@@ -410,11 +517,23 @@ For detail about;
}
-\dd You are now in "Select Points" mode. You can select one end point at a time with \e{Left-Click} and move it with \e{Left-Drag}.
+\dd You are now in "Select Points" mode.
\u000
-\dd Once you are happy, hit \e{Enter} or the \e{SpaceBar} to finish editing the easement. Or hit \e{Esc} to cancel.
+\dd You can select one end point at a time with \c{Left-Click} and move it with \c{Left-Drag}. If you drag the end point off the original track it will extend.
+
+\u000
+
+\dd You can select a pin by \c{Left-Click}ing on it and move it with \c{Left-Drag}. \c{Delete} will remove the last selected Pin.
+
+\u000
+
+\dd You can add a Pin by \c{Left-Click}ing on an area of the track with no Pin or end.
+
+\u000
+
+\dd Once you are happy, hit \e{Enter} or the \e{SpaceBar} to finish editing the easement. Or hit \e{Esc} to cancel.
\dd If you want to modify the Cornu later (even if it is joined at both ends) see \k{chgCornu}
@@ -467,13 +586,13 @@ When this command is used to join;
Any tracks created during the \f{Join} command will have the following properties inherited from the first track: selected state, hidden state, scale, track gauge and Layer.
-Turnouts and Sectional (\K{cmdHotBar}) tracks can be joined to other tracks. \e{XTrackCAD} extends the selected endpoint with a straight track when making the connection.
+Turnouts and Sectional (\K{cmdHotBar}) tracks can be joined to other tracks. \e{XTrackCAD} extends the selected endpoint with a straight track when making the connection.
A Turntable (\K{cmdTurntable}) can be joined however it must be used as the second endpoint for normal easements but can be connected to either end with Cornu.
For detail about;
-\dd Using curved flex-track to join track segments refer to \K{joinTrackCurve}.
+\dd Using curved flex-track to join track segments refer to \K{joinCornu}.
\u000
@@ -493,7 +612,7 @@ This method of joining track may be used to move, align and join one section of
\u000
-\n Before initiating the \f{Join} command, the track that will be moved, aligned then joined must be selected using the \f{Select} command (\K{cmdSelect}).
+\n Before initiating the \f{Join} command, the track that will be moved, aligned and then joined must be selected using the \f{Select} command (\K{cmdSelect}).
\lcont{
@@ -529,11 +648,11 @@ This method of joining track may be used to move, align and join one section of
}
-\n Move the mouse pointer over the endpoint of the other track then \e{Shift+Left-Click}. The selected track will be moved, aligned then joined to the stationary section of track.
+\n Then move the mouse pointer over the endpoint of the other (unselected and stationary) track with \e{Shift+Left-Click}. The selected track will be moved, aligned then joined to the stationary section of track.
For detail about;
-\dd Using curved flex-track to join track segments refer to \K{joinTrackCurve}.
+\dd Using curved flex-track to join track segments refer to \K{joinCornu}.
\u000
@@ -546,23 +665,30 @@ For detail about;
\G{png.d/bmodify.png}
-The \f{Modify} command is used to change characteristics of or extend existing track by adding new track. This command works with any unconnected track endpoint, or with a \e{Cornu} or \e{Bezier} track even if connected
+The \f{Modify} command is used to change characteristics of tracks or draw elements or extend existing track by adding new track. The extend type of Modify command works with any unconnected track endpoint, or with \e{Turntables}. \e{Cornu(s)} or \e{Bezier} track can be modified even if connected. Selecting one Cornu which is connected to other Cornu(s) results in a single modification curve with control "Pins" at the connections.
-The \f{Modify} command can be invoked using the \f{Change>Modify} menu item, the \f{Modify} button or the menu raised by a \e{Right-Click} over the \f{Main Canvas}.
+The \f{Modify} command can be invoked using the \f{Change>Modify} menu item, the \f{Modify} button, by \e{Double-Click} in Select when hovering over a selected item or the menu raised by a \e{Right-Click} over the \f{Main Canvas}.
-Either the left mouse button (for changing length or creating a tangent track) or the right mouse button (for extending with a new track) is used to modify the unconnected endpoint.
+Before a track is selected for Modify, a dynamic blue anchor will show which track the command will take effect on if the cursor is close enough to a modifyable track or object. Arrows are shown to indicate if the track can be extended or trimmed and also if its radius can be modified if Shift is depressed as the cursor is moved over the track.
-The endpoints of a \e{Line}, \e{Dimension Line}, \e{Table Edge} or \e{Bench-work} can be dragged to new positions. A \e{Box} or a \e{FilledBox} can be modified by selecting a corner and dragging in two dimensions, or a side and dragging it orthogonally. These modifications preserve a 4-sided rectangle.
+\S2{extendModify} Extending Track
-The controlpoints of a \e{Cornu Track}, \e{Bezier Track} or \e{Bezier Line} can be changed.
+Either the left mouse button (for changing length or creating a tangent track) or the right mouse button (for extending with a new track) is used to modify an unconnected endpoint.
-\e{Curved Lines} are modified in same manner as curved track.
+\S2{objectModify} Modifying Objects
-Selecting a corner of a \e{Poly Line} or \e{Polygon} moves that corner to a new position, and if moved close to a neighboring corner will merge the two corners and delete the edge between them. Selecting an edge will create a corner that can be dragged to a new position.
+\n The endpoints of a \e{Line}, \e{Dimension Line}, \e{Table Edge} or \e{Bench-work} can be dragged to new positions.
-Any tracks created during the \f{Modify} command will have the following properties inherited from the first track: selected state, hidden state, scale, track gauge and Layer.
+\n A \e{Box} or a \e{FilledBox} can be modified by selecting a corner and dragging in two dimensions, or a side and dragging it orthogonally. This modifications preserve a 4-sided rectangle.
-For detail about;
+\n The controlpoints of a \e{Cornu Track}, \e{Bezier Track} or \e{Bezier Line} can be changed. Control "Pins" can be added, moved or selected and removed from \e{Cornus}.
+
+\n \e{Curved Lines} are modified by dragging the end points and dragging the amount of central deflection (radius).
+
+
+Any tracks created during the \f{Modify} command will have the following properties inherited from the first track: selected state, hidden state, scale, track gauge and Layer.
+
+For more detail about;
\dd Changing track length refer to \K{chgTrackLength}.
@@ -580,6 +706,14 @@ For detail about;
\u000
+\dd Modifying Draw elements refer to \K{chgDraw}
+
+\u000
+
+\dd Modifying Polygons and PolyLines refer to \K{polyModify}
+
+\u000
+
\dd Modifying a Cornu refer to \K{chgCornu}
\u000
@@ -716,29 +850,146 @@ For detail about;
\rule
-\S2{chgCornu} \i{Cornu Easements} Modifying a Cornu
+\S2{chgDraw} Modifying Draw Elements
+
+Draw elements have blue handles that show how they can be modified. They also have text entry boxes that allow precise entry of parameters. These values become active when a \e{Tab} is entered, or the cursor is moved out of the text box.
+
+There is a context menu accessed via \e{Right-Click} for Draw Objects that can change the edit mode from the initial "Points Mode" to "Origin Mode" where \e{Click} sets the position of the drawn object's origin - which will cause subsequent rotations using \K{cmdModify} or \K{cmdDescribe} to be centered about that point.
+
+The context menu can be used to go back to Points Mode, or to set the origin to one of a number of defined points.
+There are text shortcuts - "o" for Origin Mode and "p" for Points Mode.
+
+In Origin Mode, the context menu allows the origin to be set to be -
+
+\dd \e{Absolute} (shortcut "0") with the origin at the layout origin or
+
+\dd \e{Relative} by dragging the origin to a point, or snapping to the position of the first 4 corner points (shortcut "1" through "4"), or to the middle/centroid of the shape (shortcut "m"). For a Polygon or Polyline the \e{Relative} origin can be snapped to a last selected node (shortcut "l").
+
+\u000
+
+In Points Mode,
+
+\u000
+
+\dd Lines have end points that can be dragged. \e{Shift-Drag} will snap the end to the end of a nearby Draw object, while \e{Ctrl+Drag} will snap to any point on a nearby Draw object. They have text entry boxes for length and angle.
+
+\u000
+
+\dd Curves have end points that work like Lines but also have a middle anchor that can be used to alter the curve radius. They have text box entry for Arc Length (in degrees) and Radius.
+
+\u000
+
+\dd Boxes have anchors for all corners and the middle of all sides. They have text entry boxes for width and height.
+
+\u000
+
+\dd Bezier Lines - see \K{chgBezier}
+
+\S3{polyModify} Modifying PolyLines and Polygons
+
+When a Polygon or a PolyLine is modified, open blue circle anchors show the position of its "nodes", these are selected with \f{Left-Click} and are shown as filled circles.
+
+\b \f{Left-Drag} of a selected node of a \e{PolyLine} or \e{Polygon} moves that node to a new position, and if moved close enough to a neighboring node will merge the two nodes and delete the edge between them.
+
+\u000
+
+\b \f{Delete} will remove a selected node.
+
+\u000
+
+\b \f{Left-Clicking} on an edge will create a new node that can be dragged to position it.
+
+\u000
+
+\b Multiple points can be selected using \f{Shift+Left-Click}. If these are then \f{Left-Drag}ed all the selected points move together, preserving relative position.
+
+\u000
+
+\b There is a context menu that has controls for a selected point. It has options to alter the node into a rounded node (shortcut "r") or a smooth node (shortcut "s"). To turn it back into a sharp (vertex) node (shortcut "v").
+
+\u000
+
+\b If \e{Shift} is held down while dragging, the relative angle for the first selected point to its predecessor point will be locked to a multiple of 90 degrees.
+
+\u000
+
+\b When a node or nodes is/are selected, text entry boxes for length and relative angle (the deviation angle from the direction of preceeding side) can be used to fine-tune the position of the first node in the sequence. A arc indicator identifies the angle in question.
+
+\u000
+
+If no nodes are selected,
+
+\u000
+
+\b A context menu can be used to close a polyline into a polygon (shortcut "g") or open it (shortcut "l") into a non-filled polygon between its last and first nodes.
+
+\u000
+
+\b A unfilled polygon can also be filled (shortcut "f") or a filled one emptied (shortcut "u").
+
+\u000
+
+Notes
+
+\u000
+
+\dd A selected Polygon or Polyline node can only be deleted if there are at least three nodes left. It can only be round or smooth if long as it isn't an end node of a Polyline.
+
+\u000
+
+\dd Smoothed nodes implement a short Bezier curve that goes from halfway along the line of to the next node and which has a control arm that ends at the node. These are typically of most use to fine-tune a series of nodes that simulate a complex curve.
+
+\u000
+
+\dd Rounded nodes start at a distance that is half the shorter of the lines from the last node and to the next node and has control arms that extend to the half-way point to the node.
+This produces an arc whose radius is determined by the distance of the closet node. By manipulating the nearest node (for example, by adding a point) the radius at the node can be controlled.
+
+\u000
+
+\rule
+
+\S2{chgCornu} \i{Cornu Easements} Modifying a Cornu Track
-Because a Cornu is defined by its end points position, angle and radius - it can only be directly modified by dragging an end point along a track.
+Because a Cornu Track is defined by its end points position, angle and radius - it can only be directly modified by dragging an end point along a track, or altering its end conditions if it is not joined to another track.
+It can also have added "Pins" which constrain the curve to smoothly pass through a point.
\n Click the \f{Modify} button (\G{png.d/bmodify.png}) to activate the \f{Modify} function.
\lcont{\u000}
-\n Click on the Cornu track. The track ends will turn into roundels
+\n Click on the Cornu track. The track ends will turn into roundels. If any other Cornus are connected at either end, the entire connected set will be modifyable as one Cornu with intermediate "Pins" at the connections.
+
+\lcont{\u000}
+
+\n \e{Left-Click} an endpoint and \e{Left-Drag} it to move the endpoint along a connected track, or beyond it if you want that track extended. If there is no track the endpoint is free to move.
+
+\lcont{\u000}
+
+\n For an unconnected end point, \e{Left-Click} on the Radius or Angle anchors and \e{Left-Drag} it to adjust them.
+
+\lcont{\u000}
+
+\n \e{Left-Click} an Pin and \e{Left-Drag} it to move the pin and make the curve to pass through it.
+
+\lcont{\u000}
+
+\n \e{Left-Click} the track where a Pin doesn't exist to add a Pin and \e{Left-Drag} it to alter the curve to pass through a defined point.
\lcont{\u000}
-\n \e{Left-Click} the endpoint and \e{Left-Drag} it to move the endpoint along the connected track, or beyond it if you want that track extended ( but this only works in the direction of the Cornu).
+\n \e{Delete} to delete the last seelcted Pin, the curve will change to meet the end conditions and pass through any remaining Pins.
\lcont{\u000}
-\n Repeat with the other end-pint if desired
+\n Repeat with the other end-point or Pins if desired
\lcont{\u000}
\n Once you are happy, hit the \e{spacebar} or \e{Enter}, or to cancel hit \e{Escape}.
-\f{Note:} A Cornu can also be modified by moving or rotating a connected track.
+\f{Note:} If the Modify command contained Pins, \e{spacebar} or \e{Enter} it will output a set of connected Cornu(s) joined at the Pin points.
+
+\f{Note:} A Cornu can also be modified by moving or rotating a connected track.
\rule
@@ -791,45 +1042,31 @@ A move can be achieved using one of the following methods;
\u000
-\rule
-
-A pop-up menu with commands controlling how objects are drawn during moves can be activated by entering a \e{Shift+Right-Click} command while hovering over the \f{Main Canvas}
-
-\b \f{Normal} - objects are drawn normally. This can be time-consuming when using a slow machine and moving a large number of objects.
-
-\u000
-
-\b \f{Simple} - objects are drawn using one line (instead of two when zoomed in). Structures are drawn as outlines, no endpoints or lines are drawn.
-
-\u000
-
-\b \f{Endpoints} - only the endpoints are drawn (as stars).
-
-\G{png.d/mmovedraw.png}
+During a Move of tracks, and \f{MagneticSnap} is enabled, if one of the end-points of the selected objects is close to an open end of a unselected point, two anchors (an open an closed blue ball) will appear.
+This indicates that the two points will auto-join and that all the moved tracks will align to the unselected point if the Move is stopped.
+This behaviour can be suppressed with \e{Alt}. If \f{MagneticSnap} is disabled, the alignment will only occur if \e{Alt} is pressed.
\rule
-\f{Note:} If the moved track is connected but the track it is connect to is not moved, it will be disconnected, unless that track or the last selected track is a Cornu, in which case the Cornu concenred will be modified (if possible) to remain connected.
+\f{Note:} If the moved track is connected but the track it is connect to is not moved, it will be disconnected, unless that track or the last selected track is a Cornu, in which case the Cornu concenred will be modified (if possible) to remain connected.
\f{Note:} Cornu tracks connected to a turntable will be modified if it is moved or rotated. They remain connected at the point on the radius where they started, so it may be desireable to delete and redraw them if the rotation is large.
-\f{Note:} The \f{Draw Moving Tracks} Radio box on the \f{Command Options} (\K{cmdCmdopt}) dialog can also be used to select how objects are drawn during drags to move or rotate objects. The options for this feature are:
-
\rule
\S2{moveByMouse} Using Mouse
-Once object(s) are selected, \e{Left+Drag} is used to move them around the layout using the mouse.
+Once object(s) are selected, \e{Left+Drag} is used to move them around the layout using the mouse.
Alternatively, \e{Shift+Ctrl+Arrow} can be used to micro-move the selected object(s). The amount micro-moved is dependent on the zoom in use. To move by smaller increments, zoom in further. My moving to macro-zoom modes extremely fine adjustments can be made.
-Remember that unattached objects can also be moved to exact positions using the \K{cmdDescribe} Command or by the \K{moveByMenu}.
+Remember that unattached objects can also be moved to exact positions using the \K{cmdDescribe} Command or by the \K{moveByMenu}.
\S2{moveByMenu} Using Values of X and Y Translation
Move An Object Using Fixed or Specified amounts of X and Y Translation.
-A pop-up menu with additional menu items allows you to \f{Move} the selected object(s) through through any amount you specify.
+A pop-up menu with additional menu items allows you to \f{Move} the selected object(s) through through any amount you specify.
\G{png.d/mmovevariable.png}
@@ -839,7 +1076,7 @@ The \f{Move} command is executed as follows;
\lcont{\u000}
-\n \e{Shift+Right-Click} to raise the Move/Rotate menu.
+\n \e{Shift+Right-Click} to raise the Move/Rotate menu.
\lcont{\u000
@@ -851,7 +1088,7 @@ Any amount of precise transalation may be entered by \e{Left-Click}ing the \f{En
\u000
-}
+}
\rule
@@ -860,23 +1097,55 @@ Any amount of precise transalation may be entered by \e{Left-Click}ing the \f{En
\G{png.d/bmovedes.png}
-This command is used to move Elevation, Grade, Station (\K{cmdElev}), Curved Track (\K{cmdCurve}), Helix (\K{cmdHelix}) or Turnout (\K{cmdHotBar}) Labels.
+This command is used to move Elevation, Grade, Station (\K{cmdElevation}), Curved Track (\K{cmdCurve}), Bezier, Cornu, Helix (\K{cmdHelix}) and Structure or Turnout (\K{cmdHotBar}) Labels.
+
+The \f{Move Description} command can be invoked using the \f{Change>Move Description} menu item or the \f{Move Description} button.
-The \f{Move Description} command can be invoked using the \f{Change>Move Description} menu item, the \f{Move Description} button or the menu raised by a \e{Right-Click} over the \f{Main Canvas}.
+Click the \f{Move Description} button to activate the \f{Move Description} command. As the cursor passes close to an object that can display a label it will be highlighted. A dark blue indicates a label that has "Show Description" set on, a light blue set off.
-Click the \f{Move Description} button to activate the \f{Move Description} command. Use \e{Left+Drag} to move the label to a new position. Once moved, the label becomes fixed in a position relative to the object. Subsequent moves of that object will cause the label to move as well.
+Use \e{Left+Drag} to move the label to a new position and unhide if hidden. Once moved, the label becomes fixed in a position relative to the object. Subsequent moves of that object will cause the label to move as well.
-This operation can also be invoked by \e{Ctrl+Left+Drag} when in Select mode (\K{cmdSelect}).
+This operation can also be invoked by \e{Ctrl+Left+Drag} when in Select command (\K{cmdSelect}).
-\e{Shift+Right-Click} (\K{cmdAcclKeys}) can be used to toggle display of individual Curved Track, Bezier Track, Cornu, Helix or Turnout Labels.
+The letter "\f{h}", can be used to hide display of individual Curved Track, Bezier Track, Cornu, Helix or Turnout Labels. The letter"\f{s} will show a hidden description. There is a \f{Context Menu} Show/Hide Toggle as well.
+
+Note - existing defined elevation labels can be moved, but controlling thier visbility is done with the \K{cmdElevation} command.
\rule
-\S{cmdPan} Pan/Zoom
+\S{cmdPan} Pan/Zoom
\G{png.d/pan.png}
-This command is used to move or resize the viewport using the mouse or keyboard. \e{Left+Drag} Pans the viewport up and down, left and right keping it within the boundaries of the layout. \e{Right+Drag} selects an area of the screen to zoom into. The \f{"0"}- key resets the display to the origin but leaves the zoom as is. Keys between \f{1} and \f{9} set the zoom to that zoom level. The \f{"e"} - key resets the origin to zero and the zooms to show the whole layout.
+This command is used to move or resize the viewport using the mouse or keyboard. \e{Left+Drag} Pans the viewport up and down, left and right keping it within the boundaries of the layout. \e{Ctrl+Left-Drag} selects an area of the screen to zoom into. The \f{"0"} or \f{"o"} - key resets the display to the origin but leaves the zoom as is. Keys between \f{1} and \f{9} set the zoom to that zoom level. The \f{"e"} - key resets the origin to zero and the zooms to show the whole layout.
+
+There is a context menu that contains these text based items as well.
+
+\dd \e{\i{Zoom/Pan Shortcut Keys}}
+
+\lcont{
+
+\u000
+
+\b Keys '1'-'9' set the zoom to between 1::1 and 1::9.
+
+\u000
+
+\b Key 'e' sets the zoom to a value that allows all the room to be shown and moves the origin of the bottomm left of the window to 0,0
+
+\u000
+
+\b Key '0' or 'o' keeps the zoom as is, but moves the origin of the bottom left of the window to 0,0
+
+\u000
+
+\b Key 'c' moves the center of the window to the cursor position but leaves the zoom alone
+
+}
+
+As the window is Zoomed in and out, the setting of \f{Constrain Drawing Area to Room Boundaries} setting in the \f{Display} \K{cmdDisplay} dialog determines where the zoom is about.
+If it is not set, the center of the Drawing Area will stay fixed as the zoom changes.
+Otherwise, position of the Drawing Area will be constraned so any \f{grey} area will be to the right or above the room boundaries.
\S{cmdProfile} Profile
@@ -888,11 +1157,11 @@ Choose a path by using \e{Left-Click} on endpoints. As each endpoint is chosen,
If no route is possible an error message is displayed. There are several reasons why this might happen:
-\b The tracks are not connected. Check this by using \e{Shift+Left-Click} on one track using the \f{Select} command (\K{cmdSelect}). This selects all tracks connected (directly or indirectly). See if the other track is selected.
+\b The tracks are not connected. You can see this more easily if you turn on Display->Option->"Display Unconnected End Points" as Exception. You can also check this by using \e{Shift+Left-Click} on one track using the \f{Select} command (\K{cmdSelect}). This selects all tracks connected (directly or indirectly). See if the other track is selected.
\u000
-\b One of the endpoints on the route is \f{Ignored} (\K{cmdElev}). Look for blue dots on the expected path when using the Profile or \f{Elevation} (\K{cmdElev}) commands.
+\b One of the endpoints on the route is \f{Ignored} (\K{cmdElevation}). Look for blue dots on the expected path when using the Profile or \f{Elevation} (\K{cmdElevation}) commands.
\u000
@@ -900,7 +1169,7 @@ If no route is possible an error message is displayed. There are several reason
The path is drawn in the Profile Color (\K{cmdRgbcolor}) (default Purple) on the layout.
-If the shortest path is not what you want, you can choose endpoints that are closer to the end of the path. Also, you can \f{Ignore} (\K{cmdElev}) endpoints to prevent the path from choosing a route through that endpoint. Shift+Right-Click (\K{cmdAcclKeys}) displays a pop-up menu that allows you to change the specified endpoint to be a \f{Defined}, \f{Ignored} or \f{None} Elevation endpoint.
+If the shortest path is not what you want, you can choose endpoints that are closer to the end of the path. Also, you can \f{Ignore} (\K{cmdElevation}) endpoints to prevent the path from choosing a route through that endpoint. Shift+Right-Click (\K{cmdAcclKeys}) displays a pop-up menu that allows you to change the specified endpoint to be a \f{Defined}, \f{Ignored} or \f{None} Elevation endpoint.
Each \f{Defined Elevation} endpoint on the path is drawn as a Vertical bar, labeled with its height and distance from the beginning of the path.
@@ -910,12 +1179,16 @@ The \f{Grade} between points is displayed between the vertical bars. The \f{Gra
The heights of \f{Defined Elevations} can be changed by using \e{Left+Drag} on the profile window. As you \f{Drag}, the new elevation and grades to each side are displayed at the bottom of the profile dialog.
-The \f{Done} button closes the dialog.
+The \f{Change} button makes the changes in the Profile dialog permanent.
+
+The \f{Reset} button deletes all changes since the last press of \f{Change} or the start of the dialog.
The \f{Clear} button preserves elevation settings established along the current profile path, removes all profile points and leaves the \f{Profile} dialog open for selection of the next set of profile points. This function is useful when there's a need to view elevations along multiple profile paths.
The \f{Print} button prints the dialog. The aspect ratio is preserved on the print-out. You will probably want to print in landscape format.
+The dialog can be closed with the 'X' button in the window's titlebar.
+
\rule
@@ -925,14 +1198,130 @@ The \f{Print} button prints the dialog. The aspect ratio is preserved on the pr
Clicking on the \f{Properties} (Describe Mode) button cancels all active commands, closes any open dialog windows and places focus on the main window.
-A \e{Left-Click} on an object while in \f{Properties} mode causes a properties dialog window to appear. The properties dialog contains information pertaining to the selected objects position, size, color and layer as appropriate for each type of object. Certain values can be changed to modify the object. If a track is connected to other tracks, then some values, e.g., endpoint positions, can not be changed.
+Until an object is selected, the object under the cursor that will be selected with \e{Left-Click} is highlighted in blue.
+
+A \e{Left-Click} on an object while in \f{Properties} mode causes a properties dialog window to appear.
+The properties dialog contains information pertaining to the selected objects position, size, color and layer as appropriate for each type of object.
+Certain values can be changed to modify the object. Some values, e.g., endpoint positions, can not be changed if, for example, a Track is joined to another Track.
+The values will take effect when \f{Enter}, \f{Tab} is pressed or the cursor leaves the entry field.
\G{png.d/dproperties.png}
The selected object is highlighted by a grey area.
+If it is a Line, Curve, Circle or Polygon object, and the rotation origin is non-zero, a large blue cross will show its position.
+
\G{png.d/dpropertieshighlight.png}
+\S2{drawDescribe} Draw Object Fields
+
+Some fields are used by multiple types of objects - these are listed below
+
+\dt Line Width
+
+\dd The width of the line for a line, curve or unfilled object can be set. 0 means a pixel width at all scales.
+Other values are the width of the line in scale units.
+
+\dt Pivot
+
+\dd The Pivot control can be set to the start, or the middle or the end, and it applies to the Length and Angle controls
+
+\dt Rotation Angle
+
+\dd Some Draw objects (Polygon, Polyline, Lines, Curves, Circles) can be rotated about their rotation origin in Describe.
+After the rotation completes, the rotation angle will be set to zero, as all the points of the object will be adjusted to thier absolute position in the layout.
+
+\dt Rotation Origin
+
+\dd By default the rotation origin is the Layout origin \{0,0\}.
+By setting a different Rotation Origin, subsequent Rotations will be about that new point. This may be useful when using Draw objects as part of larger collections.
+
+\dt Lock Rotation Origin
+
+\dd For ease of use, the rotation origin can be \e{Relative} to the First Point. If this is done, altering either the First Point or the Rotation Origin will move the both values.
+This value is always set to locked if the Draw origin is non-zero when the \K{cmdDescribe} command is started but can be unset to allow repositioning of the Rotate Origin without moving the object. If the Rotate Origin is set to zero, the Object has an \e{Absolute} origin.
+
+\dt Layer
+
+\dd The object can be moved between layers
+
+\dt Color
+
+\dd The color of the line or the fill can be set
+
+\S3{drawDescribeStr} Straight Line Objects
+
+\dt End Pt 1
+
+\dd For Straight Lines the object has a starting position (or first point) - altering this value causes the whole object to move relative to the layout origin.
+
+\dt End Pt 2
+
+\dd Straight Lines have a second point, altering this, moves just that end of the line, altering its length as needed.
+
+\dt Angle
+
+\dd Straight Lines have an angle - this is the angle between the two points, altering this moves End Pt2.
+
+\dt Length
+
+\dd The Length control can add to the start or end or both of a Line object depending on the setting of the Pivot control.
+
+\S3{drawDescribeDim} Dimension Line Objects
+
+\dt Size
+
+\dd The size of the arrows and text can be set to Tine, Small, Medium or Large.
+
+\S3{drawDescribeBench} BenchWork Objects
+
+\dt Lumber
+
+\dd A set of standard dimensions of timber sizes that are often used to construct benchwork. They are specified in "nominal" dimensions but drawn in "actual" dimensions.
+
+\dt Orientation
+
+\dd The timber can be orientated "On Edge" which will draw the smaller dimension or "Flat".
+
+\S3{drawDescribeCurve} Curved and Circle Objects
+
+\dt Center
+
+\dd Curved Lines and Circles have a center. Moving this moves the object.
+
+\dt CW Angle and CCW Angle
+
+\dd Curved Lines have an angle relative to the center that the arc starts and and one where it ends
+
+\S3{drawDescribePoly} Polygon Objects
+
+\dt Fill
+
+\dd Some draw objects (Circles, Polygons) can be filled or emptied - note that Polylines can not be filled - they have to be closed first.
+
+\dt Open
+
+\dd Polygons can be opened to become Polylines or Polylines closed to become Polygons using Describe.
+
+\dt Point Count
+
+\dd Polygons and PolyLines have a count of nodes - this is read-only.
+
+\dt Height and Width
+
+\dd Rectangular Polygons have two properties that can alter the Height and Width of the Polygon
+
+\dt Line Type
+
+\dd Straight and Curved Lines, PolyLines, Polygons and Structures can be drawn with dotted, dashed, dash-dotted and dash-dot-dotted lines.
+
+\S3{drawDescribeText} Text Objects
+
+\dt Text Angle
+
+\dd For Text objects, the Text Angle determines the angle the text is rendered at. This is independent of the rotation of the starting position which is gained from the Rotation Angle and the Rotation Origin.
+
+
Most commands return to \f{Properties} mode then they terminate unless the command is sticky (\K{cmdSticky}).
Note: the Default Command radio button on the \f{Command Options} (\K{cmdCmdopt}) dialog controls whether the \f{Properties} or the \f{Select} (\K{cmdSelect}) command is used as the default command.
@@ -957,12 +1346,14 @@ The entered value is added to all Defined Elevations on the Selected tracks. A
This command is used to rotate selected (\K{cmdSelect}) objects.
-The \f{Rotate} command can be invoked using the \f{Change>Rotate} menu item, the \f{Rotate} button, the menu raised by a \e{Right-Click} over the \f{Main Canvas} or by the \e{Shift+Right+Drag} command when in \f{Select} mode.
+The \f{Rotate} command can be invoked using the \f{Change>Rotate} menu item, the \f{Rotate} button, the menu raised by a \e{Right-Click} over the \f{Main Canvas} or by the \e{Ctrl+Right-Drag} command when over a selected trak in \f{Select} mode.
-Successful use of this command requires selection of the object(s) to be rotated before attempting to rotate it. An object is selected by using the \e{Left-Click} command. A group of connected objects can be selected using the \e{Shift+Left-Click} command.
+Successful use of this command requires selection of the object(s) to be rotated before attempting to rotate it. An object is selected by using the \e{Left-Click} command. A group of connected objects can be selected using the \e{Shift+Left-Click} command, or indivdual tracks added with \e{Ctrl+Left-Click}.
A pop-up menu with commands controlling how objects move during the \f{Rotate} function can be activated by entering a \e{Shift+Right-Click} command while hovering over the \f{Main Canvas}.
+Note that a Rotate command for a Draw object does not use the Rotation Origin of that Object, even if has been defined as non-zero, instead it uses the position defined by the mouse or context command, and does not rotate the rotation origin.
+
\G{png.d/mrotatemove.png}
Rotation can be achieved using one of the following methods;
@@ -979,6 +1370,11 @@ Rotation can be achieved using one of the following methods;
\dd Aligning the selected object with another object on the layout. See \K{rotateByAlign} for detail.
+During Rotation of a track, if \f{MagneticSnap} is enabled, if one of the end-points of the selected objects is close to an open end of a unselected point, two anchors (an open an closed blue ball) will appear.
+This indicates that the two points will auto-snap and the moved track will align to the unselected point if the Rotation is stopped. This does not happen if \e{Alt} is used.
+If \f{MagneticSnap} is disabled, the snap will only occur if \e{Alt} is held.
+Note that this also applies to \K{cmdMove}.
+
\rule
@@ -998,14 +1394,20 @@ Rotate An Object Using the Mouse
\lcont{\u000}
-\n Click and hold the left mouse button then drag (\e{Left+Drag}) the mouse away from the axis point to create a "handle". This handle will be used to rotate the object. While continuing to hold the left mouse button, drag (\e{Left+Drag}) the handle in the desired direction of rotation. \f{Note:} If the \e{Ctrl} key is pressed in conjunction with \e{Left+Drag}, the object will rotate in increments of 15\u00B0.
+\n Click and hold the left mouse button then drag (\e{Left+Drag}) the mouse away from the axis point to create a "handle". This handle will be used to rotate the object. While continuing to hold the left mouse button, drag (\e{Left+Drag}) the handle in the desired direction of rotation.
+\f{Note:} If the \e{Shift+Ctrl} key is pressed in conjunction with \e{Left+Drag}, the object will rotate in increments of 15\u00B0.
\lcont{\u000}
-\n Release the mouse key once desired rotation is obtained.
+\n Release the mouse key once desired rotation is obtained.
\u000
+\n If \f{Magnetic Snap} is enabled and the \e{Alt} button is not pressed, or ifthe \e{Alt} button is pressed when it is disabled, a magnetic anchor will be displayed if an end of the rotated tracks is near an open end.
+If the anchor shows and the rotate is completed, the tracks will Snap to Alignment and Join.
+
+\u000
+
Rotation can also be achieved through use of one of these alternate methods;
\u000
@@ -1023,7 +1425,7 @@ Rotation can also be achieved through use of one of these alternate methods;
Rotate An Object Using Fixed or Specified Degree's of Rotation
-A pop-up menu with additional menu items allows you to \f{Rotate} the selected object(s) through various predefined angles or through any angle you specify.
+A pop-up menu with additional menu items allows you to \f{Rotate} the selected object(s) through various predefined angles or through any angle you specify.
\G{png.d/mrotatemove.png}
@@ -1037,17 +1439,17 @@ The \f{Rotate} command is executed as follows;
\lcont{\u000}
-\n With the mouse pointer hovering over the point about which the object(s) are to be rotated, \e{Shift+Right-Click} to raise the Rotate menu then select the desired degree and direction of rotation from the list of predefined angles (180\u00B0, 90\u00B0 CW, 45\u00B0 CW, 30\u00B0 CW, 15\u00B0 CW, 15\u00B0 CCW, 30\u00B0 CCW, 45\u00B0 CCW, 90\u00B0 CCW).
+\n With the mouse pointer hovering over the point about which the object(s) are to be rotated, \e{Shift+Right-Click} to raise the Rotate menu then select the desired degree and direction of rotation from the list of predefined angles (180\u00B0, 90\u00B0 CW, 45\u00B0 CW, 30\u00B0 CW, 15\u00B0 CW, 15\u00B0 CCW, 30\u00B0 CCW, 45\u00B0 CCW, 90\u00B0 CCW).
\lcont{\u000}
\G{png.d/mrotatefixed.png}
-\u000
+\u000
\rule
-Alternately, any angle may be entered by \e{Left-Click}ing the \f{Enter Angle...} menu item
+Alternately, any angle may be entered by \e{Left-Click}ing the \f{Enter Angle...} menu item
\n \f{Select} the object(s) to be rotated.
@@ -1125,7 +1527,7 @@ Rotation can also be achieved through use of one of these alternate methods;
\rule
-\S{cmdSelect} Select
+\S{cmdSelect} Select
\G{png.d/bselect.png}
@@ -1133,20 +1535,52 @@ Clicking on the \f{Select} button cancels all active commands, closes any open d
In combination with the mouse, the \f{Select} command can be used as follows;
-\dd \e{Left-Click} - selects an object (or unselects a selected object). Selected objects appear in red (unless changed in the \f{Color} (\K{cmdRgbcolor}) dialog).
+\dd Unselected Objects that will be added to the selected set with a \e{Left-Click} are highlighted in Blue as the mouse moves over them. Items that will be deselected are highlighted in Gold.
+
+\u000
+
+\dd Objects that are part of a \f{Module Layer} are selected or deselected together.
+
+\u000
+
+\dd \e{Left-Click} - if the \f{SelectMode} in \K{cmdCmdopt} is set to Single Item Mode it selects just an object near the cursor.
+If it is set to Add Item Mode, it will add the nearby object or remove it if is already selected.
+Already selected objects appear in red (unless changed in the \f{Color} (\K{cmdRgbcolor}) dialog) and a blue selection box surrounds all currently selected objects.
+If \f{SelectZero} is selected in \K{cmdCmdopt} and an point that is not near to any object is selected, all objects are deselected.
+
+\u000
+
+\dd \e{Ctrl+Left-Click} - if \f{SelectMode} in \K{cmdCmdopt} is set to Single Item Mode it adds an object near to the cursor to the selected objects, or removes if it is already selected.
+If set to Add Item Mode, it will select only the nearby object and delselect all the others.
+Already selected objects appear in red (unless changed in the \f{Color} (\K{cmdRgbcolor}) dialog) and a blue selection box surrounds all currently selected objects.
+If \f{SelectZero} is selected in \K{cmdCmdopt} and an point that is not near to any objects is selected, all objects are deselected.
+
+\u000
+
+\dd \e{Shift+Left-Click} - selects all unselected tracks connected to a track you select. Selection stops at already selected tracks. Caution: This can select all tracks on the layout.
\u000
-\dd \e{Shift+Left-Click} - selects all unselected tracks connected to the track you select. Selection stops at selected tracks. Caution: This can select all tracks on the layout.
+\dd \e{Left+Drag} - highlights an area, and all the objects within the area are selected, if \f{SelectMode} is in \K{cmdCmdopt} is set to "Add", already selected objects outside the area remain selected, otherwise "Only", they are deselected.
\u000
-\dd \e{Left+Drag} - highlights an area, and all objects within the area are selected.
+\dd \e{Right-Drag} - highlights an area, and all the objects within the area are unselected regardless of \f{SelectMode}.
\u000
\dd \e{Right-Click} - displays a pop-up menu of commands.
+\u000
+
+\dd \e{"?"} - displays the Property menu for the object hovered over
+
+\u000
+
+\dd \e{"@"} - moves the center of the window (i.e., Pans) to be at the cursor position
+
+\dd \e{Shift+Ctrl} plus the \e{Arrow Keys} will move the selected items a pixel at a time at the current zoom level. No autosnap will occur to permit fine tuning.
+
\lcont{
\u000
@@ -1159,29 +1593,28 @@ In combination with the mouse, the \f{Select} command can be used as follows;
\u000
-\dd \e{Shift+Right-Click} (\K{cmdAcclKeys}) - displays a pop-up menu of options controlling how objects are drawn during moves and rotates (below). If there are selected objects then additional menu items allow you to rotate the selected objects by various angles.
+\dd Hovering over a selected object (inside the blue highlight area) with either a \e{Shift} or a \e{Ctrl} button depressed displays an anchor that shows that a Left-Drag will either Move or Rotate the selected items.
\u000
-\dd \e{Right+Drag} - highlights an area, and all objects within the area are unselected.
+\dd \e{Shift+Right-Click} (\K{cmdAcclKeys}) - displays a pop-up menu of options controlling how objects are drawn during moves and rotates (below). If there are selected objects then additional menu items allow you to rotate the selected objects by various angles.
\u000
-\dd \e{Shift+Left-Click+Drag} - moves the selected objects (the Move (\K{cmdMove}) command).
+\dd \e{Shift+Left-Click+Drag} - on a selected object moves the selected objects (the Move (\K{cmdMove}) command).
\u000
-\dd \e{Shift+Right-Click+Drag} - rotates the selected objects (the \f{Rotate} (\K{cmdRotate}) command).
+\dd \e{Ctrl+Left-Click+Drag} - on a selected object rotates the selected objects (the \f{Rotate} (\K{cmdRotate}) command).
\lcont{
-\b If the \e{Ctrl} key is pressed while dragging then rotation will occur in 15\u00B0 increments.
+\b If the \e{Shift} key is pressed while dragging in rotation then rotation will occur in 15\u00B0 increments.
-}
-
-\u000
+\b If the selected items(s) are moved or rotated using the cursor, and an open end of unselected tracks is close to an end of the selected tracks that will be open after the move, a pair ot anchors shows that an autosnap with alignment will occur.
+Upon release of the button, all the selected tracks will be moved and aligned and the tracks joined.
-\dd \e{Ctrl+Left-Click+Drag} - moves turnout and elevations labels (Also see the \f{Move Description} (\K{cmdMoveLabel}) command).
+}
\u000
@@ -1209,15 +1642,15 @@ The following commands operate on the objects you have selected:
\b \f{Rescale} (\K{cmdRescale}) the selected objects.
-The \f{Cut}, \f{Copy} and \f{Paste} commands found on the \f{Edit} (\K{editM}) menu will also operate on selected objects.
+The \f{Cut}, \f{Copy}, \f{Clone} and \f{Paste} commands found on the \f{Edit} (\K{editM}) menu will also operate on selected objects.
Notes:
-\b A Filled Shape (\K{cmdDraw}) can be selected by clicking on its edge.
+\b Connections between selected and unselected tracks will be broken when selected tracks are moved. If the Drawing Scale is 8:1 or smaller, these about-to-be broken connections are marked with a red X.
\u000
-\b Connections between selected and unselected tracks will be broken when selected tracks are moved. If the Drawing Scale is 8:1 or smaller, these about-to-be broken connections are marked with a red X.
+\b During Move or Rotate operations, if an track end that will be disconnected during the operation comes close to a disconnected end of track that isn't selected, a pair of blue circles (one empty and one filled) will turn on. This shows that if the drag is stopped, those two points will be joined and the other selected tracks aligned. This represents a faster alternative to the \K{joinTrackMove} command.
\u000
@@ -1229,7 +1662,7 @@ Notes:
\u000
-\b Pressing the \e{Escape} key will deselect all selected tracks.
+\b Pressing the \e{Escape} key will deselect all selected tracks. Alternatively left-clicking on an empty area will also work.
\rule
@@ -1240,6 +1673,8 @@ Notes:
The \f{Split} command provides several functions. It can be used to disconnect the joint between two sections of connected track, to divide a section of track into two pieces at a selected point or to place block gaps at an existing joint.
+Until a split point is selected, the split point under the cursor will have a blue marker and if it is near a connected end a blue "X" will indicate that a split will occur.
+
For detail about;
\u000
@@ -1263,9 +1698,9 @@ Disconnecting a joint between two pieces of connected track;
\n Click the \f{Split} button (\G{png.d/bsplit.png}) to activate the \f{Split} command.
-\lcont{\u000}
+\n Place the mouse pointer right over the joint between the two track endpoints (so the "X" is shown) then \e{Left-Click}.
-\n Place the mouse pointer right over the joint between the two track endpoints then \e{Left-Click}.
+\n A blue marker will show where a split will occur, but if the cursor is a near connected joint, it will show a blue "X".
\lcont{\u000}
@@ -1304,9 +1739,9 @@ Dividing a section of flex track into two connected pieces;
\n Click the \f{Split} button (\G{png.d/bsplit.png}) to activate the \f{Split} command.
-\lcont{\u000}
+\n Place the mouse pointer over the point on the track where the it should be divided. A blue anchor bar across the track under the cursor will indicate the current split point. Then \e{Left-Click}.
-\n Place the mouse pointer over the point on the track where the it should be divided then \e{Left-Click}.
+\n To divide a Turnout, \e{Shift} must be held. The result will be a shorter Turnout with plain track replacing the rest of it. Note that the program will not stop division of the turnout between the switch blades and the frog - which would not be desireable in the real world.
\lcont{\u000}
@@ -1328,7 +1763,7 @@ Dividing a section of flex track into two connected pieces;
It's not possible to create a track shorter than the \e{Minimum Track Length} (\K{cmdPref}).
-This command is useful for placing tunnel portals or elevation points (\K{cmdElev}) at specific track locations.
+This command is useful for placing tunnel portals or elevation points (\K{cmdElevation}) at specific track locations.
Normally a turnout cannot be split however, if the \e{Shift} key is held when executing this command then the turnout can be \e{trim}med. \e{Trim}ming replaces the portion of track between the split point and the turnouts endpoint with flex-track. For turnouts with more than one set of points (\K{generalTerms}), such as a slip switch or scissors crossover, a \e{trim} point cannot be selected between the \e{points} of the turnout.
@@ -1368,12 +1803,12 @@ The \f{Split} command can be used to add block gaps (\K{generalTerms}) at the po
\u000
\dd \G{png.d/blockBoth.png}
-
+
\dd \e{Block Gaps in both rails}
\u000
-After starting the \f{Split} command use the \e{Shift+Right-Click} over a joint to display one of two pop-up menus which can be used to add, change or remove \e{block gaps} for the selected endpoint.
+After starting the \f{Split} command use the \e{Shift+Right-Click} over a joint (with the blue "X" anchor showing) to display one of two pop-up menus which can be used to add, change or remove \e{block gaps} for the selected endpoint.
\dd \G{png.d/msplitblock.png}
@@ -1397,4 +1832,4 @@ For detail about;
\dd Dividing a section of track into two connected pieces see \K{splitDivide}.
-\rule \ No newline at end of file
+\rule
diff --git a/app/doc/drawm.but b/app/doc/drawm.but
index b8469b1..76335bc 100644
--- a/app/doc/drawm.but
+++ b/app/doc/drawm.but
@@ -16,11 +16,11 @@ There are 4 command buttons on the tool-bar used to draw Straight Objects, Curve
Functions for drawing basic shapes and objects like lines and curves can be accessed from this menu.
-\dd \f{Circle Lines} - draw empty or filled circles. (\K{cmdCircleL})
+\dd \f{Circle Lines} - draw empty or filled circles. (\K{cmdDrawCircles})
\u000
-\dd \f{Curved Lines} - are created in the same manner as curved tracks. (\K{cmdCurvedL})
+\dd \f{Curved Lines} - are created in the same manner as curved tracks. (\K{cmdDrawCurves})
\u000
@@ -32,11 +32,11 @@ Functions for drawing basic shapes and objects like lines and curves can be acce
\u000
-\dd \f{Shapes} - draw boxes and poly-lines. (\K{cmdShapes})
+\dd \f{Shapes} - draw boxes, polygons and poly-lines. (\K{cmdDrawShapes})
\u000
-\dd \f{Straight Objects} - draw straight objects. (\K{cmdStraightL})
+\dd \f{Straight Objects} - draw straight objects. (\K{cmdDrawStraight})
\u000
@@ -46,80 +46,221 @@ Some commands display controls on the Status Line (\K{mainW}) to change line wid
\rule
+\S{cmdDrawCircles} Circles and Filled Circles
-\S{cmdCircleL} Circles and Filled Circles
-
-\G{png.d/mdrawcircles.png}
+\G{png.d/mdrawcircles.png}
\f{Circles} and \f{Filled Circles} are created by selecting either the center position or a point on the edge of the circle and dragging to specify the radius.
-\dd \G{png.d/dcircle2.png} \G{png.d/dflcrcl2.png} Select a point on the edge of the circle and drag to the center.
+\dd \K{cmdDrawCircleTangent}. Draw a Circle from the Edge.
+
+\u000
+
+\dd \K{cmdDrawCircleCenter}. Draw a Circle from the Center.
+
+\u000
+
+\dd \K{cmdDrawFilledCircleTangent}. Draw a Filled Circle from the Edge.
\u000
-\dd \G{png.d/dcircle3.png} \G{png.d/dflcrcl3.png} Select the center and drag to set the radius.
+\dd \K{cmdDrawFilledCircleCenter}. Draw a Filled Circle from the Center.
+
+\rule
+
+\S2{cmdDrawCircleTangent} Draw Circle from Tangent
+
+\G{png.d/dcircle2.png}
+
+\c{Left-Drag} a point on the edge of the circle to specify the radius.
\rule
+\S2{cmdDrawCircleCenter} Draw Circle from Center
+
+\G{png.d/dcircle3.png}
+
+\c{Left-Drag} from the center of the circle to the edge.
+
+\rule
+
+\S2{cmdDrawFilledCircleTangent} Draw Filled Circle from Tangent
+
+\G{png.d/dflcrcl2.png}
+
+\c{Left-Drag} from the center of the circle to the edge.
+
+\rule
+
+\S2{cmdDrawFilledCircleCenter} Draw Filled Circle from Center
+
+\G{png.d/dflcrcl3.png}
+
+\c{Left-Drag} a point on the edge of the circle to specify the radius.
-\S{cmdCurvedL} Curved Lines
+\rule
+
+\S{cmdDrawCurves} Curved Lines
\G{png.d/mdrawcurve.png}
\f{Curved Lines} are created in the same manner as curved tracks.
-\dd \G{png.d/dcurve1.png} Select the start of the curve and drag in the direction of the curve.
-
-If \e{Shift} is held down as the left mouse button is clicked for the first end point of the curve and the cursor is over a line object the position will snap to the nearest end of that line.
-If \e{Shift} is held down when the button is released for the second end, it will snap to the nearest end of a line object if it is over one.
+\dd (\K{cmdDrawCurveEndPt}). Drag out the end point and then curve it.
\u000
-\dd \G{png.d/dcurve2.png} Select one end of the curve and drag to the center.
+\dd (\K{cmdDrawCurveCenter}). Select the center and then an endpoint and drag out the curve.
-To complete the command, drag on the red arrows to adjust the curve.
+\u000
+
+\dd (\K{cmdDrawCurveTangent}). Select the end and drag out the center.
\u000
-\dd \G{png.d/dcurve3.png} Select the center of the curve and drag to one end.
+\dd (\K{cmdDrawCurveChord}). Drag from one end of the curve to the other to form the chord of the curve.
-To complete the command, drag on the red arrows to adjust the curve.
-
\u000
-\dd \G{png.d/dcurve4.png} Drag from one end of the curve to the other to form the chord of the curve.
+\dd (\K{cmdDrawBezierCurve} \G{png.d/dbezier.png} \e{Left-Drag} out control point from one end of the curve and then \e{Left-Drag} out the second control point from the other end.
-To complete the command, drag on the red arrows to adjust the curve.
+If \f{MagneticSnap} is enabled, the curve ends will snap to the nearest part of nearby Draw objects unless \e{Alt} is held.
+If it is disabled, snapping will only occure if \e{Alt} is held.
-\u000
+The precise values of Radius and Arc Length can be set using the text boxes on the bottom rail once the mouse button is released.
+
+To adjust the curve, \e{Left-Click} and \e{Left-Drag} an end or a the radius. Hit \e{Enter} or \e{Space} to accept, \e{Esc} to reject.
+
+\rule
+
+\S2{cmdDrawCurveEndPt} Draw Curve from End Point
+
+\G{png.d/dcurve1.png}
+
+\c{Left-drag} from the start of the curve and drag in the direction of the curve.
+Then \c{left-drag} to form the curve.
+
+If the cursor is over a Draw object and \f{MagneticSnap} is on, the first position will snap to the nearest part of that object. If \e{Alt} is held the snap will be suppressed.
+If \f{MagneticSnap} is disabled, the snap will happen if \e{Alt} is held. The second end will act similarly.
+
+\rule
+
+\S2{cmdDrawCurveTangent} Draw Curve from Tangent
+
+\G{png.d/dcurve2.png}
+
+Select one end of the curve and \c{left-drag} to the center.
+Then \c{left-drag} the curve around the center.
+
+The first and second ends will act like \K{cmdDrawCurveEndPt} with \f{MagneticSnap} unless \e{Alt} is held.
+To complete the command, drag on the red arrows to adjust the curve from the initial end.
+
+\rule
+
+\S2{cmdDrawCurveCenter} Draw Curve from Center
+
+\G{png.d/dcurve3.png}
-\dd \G{png.d/dbezier.png} \e{Left-Drag} out control point from one end of the curve and then \e{Left-Drag} out the second control point from the other end.
+Select the center of the curve and \c{left-drag} to one end.
-If \e{Shift} is held while the end points are selected, the curve will lock to the ends of nearby line objects.
+\rule
+
+\S2{cmdDrawCurveChord} Draw Curve from Chord
+
+\G{png.d/dcurve4.png}
+
+\c{Left-drag} from one end of the curve to the other to form the chord of the curve.
+
+The first and second ends will act like \K{cmdDrawCurveEndPt} with \f{MagneticSnap} unless \e{Alt} is held.
+
+If the mouse is over a draw object the second position will snap to the nearst part of that object. If \e{Shift} is held the snap will be suppressed.
+
+To complete the command, drag on the red arrows to adjust the curve.
+
+\rule
+
+\S2{cmdDrawBezierCurve} Draw Bezier Curve
+
+\G{png.d/dbezier.png}
+
+\e{Left-Drag} out control point from one end of the curve and then \e{Left-Drag} out the second control point from the other end.
+Repeat for the other end and control point.
-To adjust the curve, \e{Left-Click} and \e{Left-Drag} an end or a control point. Hit \e{Enter} to accept, \e{Esc} to reject.
+The first and second ends will act like \K{cmdDrawCurveEndPt} with \f{MagneticSnap} unless \e{Alt} is held.
\rule
+\S{cmdNote} Note Variants
-\S{cmdNote} Note
+\G{png.d/mnote.png}
-\G{png.d/bnote.png}
+The \f{Note} command allows you to
-The \f{Notepad} command allows you to attach notes (\G{png.d/iconnote.png}) to selected places on the layout.
+\dd Attach \f{plain text notes} (\K{cmdTextNote}),
-Click and drag on the Main Canvas (\K{mainW}) to place the note.
+\u000
+
+\dd Attach \f{weblinks} (\K{cmdLinkNote}) or
+
+\u000
+
+\dd Attach \f{document references} (\K{cmdFileNote}) to selected places on the layout.
+
+\rule
+
+\S2{cmdTextNote} Plain Text
+
+\G{png.d/bnote.png} \G{png.d/iconnote.png} Click and drag on the Main Canvas (\K{mainW}) to place the note.
When you release, the \e{Note Editor} dialog is displayed. You can enter the note in the text area.
-When in \f{Properties} (\K{cmdDescribe}) mode, clicking on a \e{Note} will display the \e{Property Sheet} to let you read or modify the note.
+\G{png.d/notetext.png}
+
+When in \f{Properties} (\K{cmdDescribe}) mode, clicking on a \e{Note} will display the \e{Property Sheet} to let you read or modify the note.
+
+\rule
+
+\S2{cmdLinkNote} Weblink
+
+\G{png.d/blink.png} \G{png.d/iconlink.png} Similar to text notes you can place a weblink on the layout.
+
+After releasing the mouse button, the \e{Link Editor} dialog is displayed.
+
+\G{png.d/notelink.png}
+
+You can enter the URL
+of the website and a short description. When clicking on the Open button, your default browser is
+used to display the website.
+
+ When in \f{Properties} (\K{cmdDescribe}) mode, clicking on a \e{Weblink Note}
+ will display the \e{Property Sheet} to let you read or modify the URL or the
+ description.
+
+Double clicking on a weblink icon opens the website in your default browser.
+
+\rule
+
+\S2{cmdFileNote} Document
+
+\G{png.d/bfile.png} \G{png.d/iconfile.png} Similar to text notes you can place a reference to a file on the layout.
+
+After releasing the mouse button, the \e{Document Editor} dialog is displayed.
+
+\G{png.d/notefile.png}
+
+You can select the file and a enter a short description. When clicking on the Open button the file is opened with the default program for that file type.
+
+When in \f{Properties} (\K{cmdDescribe}) mode, clicking on a \e{Document Note} will display the \e{Property Sheet} to let you read or modify the filename or the
+ description.
+
+Double clicking on a document reference icon opens the document in the default program.
\rule
\S{cmdRuler} Ruler
-\G{png.d/bruler.png}
+\G{png.d/bruler.png}
The \f{Ruler} command displays a ruler on the layout. Click where you want the ruler to begin and drag the cursor to measure distances from the origin. The measured length is displayed in the \f{Status-bar} (\K{mainW}).
@@ -130,43 +271,200 @@ Subsequent clicks on the \f{Ruler} button will hide or display the ruler.
\rule
-\S{cmdShapes} Shapes
+\S{cmdDrawShapes} Shapes
\G{png.d/mdrawshapes.png}
Shapes are drawn by:
-\dd \G{png.d/dbox.png} \G{png.d/dfilbox.png} \f{Boxes} and \f{Filled Boxes} are created by selecting one corner and dragging the opposite corner.
+\dd (\K{cmdDrawBox}). Boxes
+
+\u000
+
+\dd (\K{cmdDrawFilledBox}. Filled Boxes
+
+\u000
+
+\dd (\K{cmdDrawPolygon}. Polygons
+
+\u000
+
+\dd (\K{cmdDrawFilledPolygon}. Filled Polygons
+
+\u000
+
+\dd (\K{cmdDrawPolyline}. PolyLines
\u000
-\dd \G{png.d/dpoly.png} \G{png.d/dfilpoly.png} \f{Poly Lines} and \f{Polygons} are created by \e{Left+Drag}, and a corner is placed when you release the left mouse button. The \f{Poly} shape is finished by pressing the \e{Space} key or by selecting another operation.
+
+
+If \e{Sticky} is set for draw line and curve objects, after the object is created, precise dimensions can be entered to alter the new object, before it is completed either with a \c{Space} or \c{Return} or by selecting a new operation.
+
+The \f{Polygon} and \f{PolyLine} shapes are finished by pressing the \c{Space} or \c{Return} key or by selecting another operation. Before they are finished, precise dimensions can be entered for the last side drawn.
+All Polylines and Polygons must have more than 2 corners to be created successfully.
+
+Note that \K{cmdModify} can be used on a Polygon or a Polyline after it has been finished to alter individual points and to make them curved or rounded points.
\rule
+\S2{cmdDrawBox} Draw Box
-\S{cmdStraightL} Straight Objects
+\G{png.d/dbox.png}
-\G{png.d/mdrawstraight.png}
+\f{Boxes} are created by selecting one corner and dragging the opposite corner.
+
+\u000
+
+\rule
+
+\S2{cmdDrawFilledBox} Draw Filled Box
+
+\G{png.d/dfilbox.png}
+
+\f{Filled Boxes} are created by selecting one corner and dragging the opposite corner.
+
+\u000
+
+\rule
+
+\S2{cmdDrawPolygon} Draw Polygon
+
+\G{png.d/dpoly.png}
+
+\f{Polygons} are created by either a series for \c{Left-Click}s or \c{Left+Drag}s, and a new "node" is placed for each.
+When using \c{Left-drag}, the node will be positioned when you release the button.
+
+\dd If \f{MagneticSnap} is enabled, An anchor point will be shown on nearby draw objects that the next point will be snapped to unless \c{Alt} is held.
+
+\dd If it is disabled, the snap will only occur if \e{Alt} is held.
+
+\dd If \c{Ctrl} is held down when a new point is placed, it will snap the relative angle of the new side to a multiple of 90 degrees from the previous side.
+On the first polygon side this will be at a multiple of 90 degrees to the axes. The line from the previous point will be highlighted in Blue.
+
+\dd A special blue square anchor will show when the cursor is in a position such that it is 90 degrees away from both the last point and the first point of the Polygon.
+
+\dd The last polygon segment dimensions can be altered using the text boxes that appear showing the segment length and the relative angle to the previous segment.
+
+\dd A polygon is closed if the next node is place over the start of the polygon
+
+\dd The polygon is ended using \c{Enter} or \c{Space}. The polygon will be auto-closed.
+
+\rule
+
+\S2{cmdDrawFilledPolygon} Drae Filled Polygon
+
+\G{png.d/dfilbox.png}
+
+\f{Filled Polygons} are created by either a series for \c{Left-Click}s or \c{Left+Drag}s, and a new "node" is placed for each.
+When using \c{Left-drag}, the node will be positioned when you release the button.
+
+\dd The fill color can be adjusted using the color control at the bottom of the window
+
+\dd If \f{MagneticSnap} is enabled, An anchor point will be shown on nearby draw objects that the next point will be snapped to unless \c{Alt} is held.
+
+\dd If it is disabled, the snap will only occur if \e{Alt} is held.
+
+\dd If \c{Ctrl} is held down when a new point is placed, it will snap the relative angle of the new side to a multiple of 90 degrees from the previous side.
+
+On the first polygon side this will be at a multiple of 90 degrees to the axes. The line from the previous point will be highlighted in Blue.
+
+\dd A special blue square anchor will show when the cursor is in a position such that it is 90 degrees away from both the last point and the first point of the Polygon.
+
+\dd The last polygon segment dimensions can be altered using the text boxes that appear showing the segment length and the relative angle to the previous segment.
+
+\dd The polygon is closed if the next node is place over the start of the polygon
+
+\dd The Filled Polygon is ended using \c{Enter} or \c{Space}. The polygon will be auto-closed.
+
+
+\rule
+
+\S2{cmdDrawPolyline} Draw PolyLine
-Straight Objects are created by a \e{Left+Drag} (\K{windowTerms}) on the layout. If \e{Draw Straight Objects} is Sticky (\K{cmdSticky}), \e{Cntl+Left+Drag} will use the endpoint of the previous line as the starting point.
+\G{png.d/dpolyline}
-\dd \G{png.d/dline.png} Creates a \f{Straight Line} of specified color and width.
-If \e{Shift} is held down for the first end point and the cursor is over a line object the new line start position will snap to the nearest end of the line.
-If \e{Shift} is held down when the button is released at the end of the \e{Left+Drag} the line end position will snap to the nearest end of any line object it is over.
+\f{PolyLines} are created by either a series for \c{Left-Click}s or \c{Left+Drag}s, and a new "node" is placed for each.
+When using \c{left-drag}, the node will be positioned when you release the button.
+\dd If \f{MagneticSnap} is enabled, An anchor point will be shown on nearby draw objects that the next point will be snapped to unless \c{Alt} is held.
+
+\dd If it is disabled, the snap will only occur if \e{Alt} is held.
+
+\dd If \c{Ctrl} is held down when a new point is placed, it will snap the relative angle of the new side to a multiple of 90 degrees from the previous side.
+On the first polyline segemnt this will be at a multiple of 90 degrees to the axes. The line from the previous point will be highlighted in Blue.
+
+\dd A special blue square anchor will show when the cursor is in a position such that it is 90 degrees away from both the last point and the first point of the Polyline.
+
+\dd The last drawn polyline segment dimensions can be altered using the text boxes that appear showing the segment length and the relative angle to the previous segment.
+
+\dd The polyline is ended using \c{Enter} or \c{Space}.
+
+\dd While drawing the Polyline certain short cuts are available by keystroke and via the Context Menu:
+
+\dd \c{'p'} - to cover to a Polygon
+
+\dd \c{'s'} - to smooth the last selected point
+
+\dd \c{'r'} - to make the last selected point round
+
+\dd \c{'v'} - to make the last selected point sharp (a vertex)
+
+\dd \c{'o'} - to change to \K{DrawOrigin} mode
+
+\rule
+
+\S{cmdDrawStraights} Straight Objects
+
+\G{png.d/mdrawstraight.png}
+
+Straight Objects are created by a \e{Left+Drag} (\K{windowTerms}) on the layout.
+
+\dd (\K{cmdDrawLine}). Creates a Straight Line
\u000
-\dd \G{png.d/ddimlin.png} Creates a \f{Dimension Line} of various sizes.
+\dd (\K{cmdDrawDimLine}). Creates a \f{Dimension Line} of various sizes.
\u000
-\dd \G{png.d/dbench.png} Creates \i\f{Bench-work} using different types and orientation of lumber.
+\dd (\K{cmdDrawBench}). Creates \i\f{Bench-work} using different types and orientation of lumber.
\u000
-\dd \G{png.d/dtbledge.png} Creates a \f{Table Edge}
+\dd (\K{cmdDrawTableEdge}). Creates a \f{Table Edge}
+
+\S2{cmdDrawLine} Draw Straight Line
+
+\G{png.d/dline.png} Creates a \f{Straight Line} of specified color and width.
+
+If \c{Ctrl} is held down during \c{Left+Drag} the line will snap the relative angle of the new side to a multiple of 90 degrees.
+
+If \e{Sticky} is set for draw line and curve objects, after the object is created, precise dimensions can be entered to alter the new object,
+before it is completed either with a \c{Space} or \c{Return} or \c{Tab} or by selecting a new operation.
+
+With \f{MagneticSnap} enabled, the new line start position will snap to the nearest draw object, as shown by the anchor unless \c{Shift} is held down.
+If it is diabled, it will onlt snap if \e{Shift} is held.
+
+\rule
+
+\S2{cmdDrawDimLine} Draw Dimension Line
+
+\G{png.d/ddimlin.png}
+
+Creates a \f{Dimension Line} of various sizes.
+
+With \f{MagneticSnap} enabled, the new line start position will snap to the nearest draw object, as shown by the anchor unless \c{Shift} is held down.
+If it is disabled, it will onlt snap if \e{Shift} is held.
+If \c{Ctrl} is held down during \c{Left+Drag} the line will snap the relative angle of the new side to a multiple of 90 degrees.
+If \e{Sticky} is set for draw line and curve objects, after the object is created, precise dimensions can be entered to alter the new object,
+before it is completed either with a \c{Space} or \c{Return} or \c{Tab} or by selecting a new operation.
+
+\S2{cmdDrawBench} Draw Benchwork.
+
+\G{png.d/dbench.png}
+
+Creates \i\f{Bench-work} using different types and orientation of lumber.
\i{Bench-work Notes}
@@ -180,25 +478,65 @@ If \e{Shift} is held down when the button is released at the end of the \e{Left+
\dd When using metric units (\K{cmdPref}), a 1" x 2" is labeled 50mm x 25mm
+With \f{MagneticSnap} enabled, the new line start position will snap to the nearest draw object, as shown by the anchor unless \c{Shift} is held down.
+If it is diabled, it will onlt snap if \e{Shift} is held.
+If \c{Ctrl} is held down during \c{Left+Drag} the line will snap the relative angle of the new side to a multiple of 90 degrees.
+If \e{Sticky} is set for draw line and curve objects, after the object is created, precise dimensions can be entered to alter the new object,
+before it is completed either with a \c{Space} or \c{Return} or \c{Tab} or by selecting a new operation.
+
+\S2{cmdDrawTableEdge} Draw Table Edge
+
+\G{png.d/dtbledge.png}
+
+Creates a \f{Table Edge}
+
+With \f{MagneticSnap} enabled, the new line start position will snap to the nearest draw object, as shown by the anchor unless \c{Shift} is held down.
+If it is diabled, it will onlt snap if \e{Shift} is held.
+If \c{Ctrl} is held down during \c{Left+Drag} the line will snap the relative angle of the new side to a multiple of 90 degrees.
+If \e{Sticky} is set for draw line and curve objects, after the object is created, precise dimensions can be entered to alter the new object,
+before it is completed either with a \c{Space} or \c{Return} or \c{Tab} or by selecting a new operation.
+
\rule
+\S{DrawOrigin} Draw Objects Origin
+
+Some objects have a natural rotation point within them. By setting the origin to this point, subsequent rotation will be about that point and not the layout origin.
+This is referred to as a \e{Relative} origin.
+When one of these is moved or rotated, the origin and angle are adjusted but the relative draw point values remain the same.
+
+You can choose to set the origin to make it Relative or put it back to Absolute during \K{cmdDrawShapes} or \K{cmdModify} or by using the \K{cmdDescribe} settings.
+
+As a practical matter, the object will appear identical until a subsequent rotation value is entered in the \K{cmdDescribe} window in both cases.
+
+In Origin Mode (entered using \c{'o'} or the Context Menu, there are certain shortcuts available -
+
+\dd \c{'p'} Go to Points Mode
+
+\dd \c{'0'} Move to Absolute (Origin to 0,0)
+
+\dd \c{'1-4'} Move the Relative Origin to the shape point 1 to 4
+
+\dd \c{'l'} Move the Relative Origin to the last selected point
+
+\dd \c{'m'} Move the Relative Origin to the middle of the shape (centeroid).
+
\S{cmdText} Text
-\G{png.d/btext.png}
+\G{png.d/btext.png}
The \f{Text} command lets you enter text on the layout at the selected position. You can use the Tab key to format the text to fixed tab positions and CTRL+Enter to enter a newLine character.
-\G{png.d/statustext.png}
+\G{png.d/statustext.png}
The font size can be changed by the Font Size drop list on the \f{Status-bar} (\K{mainW}). The font size is scaled along with everything else on the layout so text is always the same relative size as other layout objects.
-The font can be selected by the \f{Font Selection} (\K{fontSelW}) dialog invoked by the \f{Options>Fonts} menu item or by \e{Shift+Right-Click} (\K{cmdAcclKeys}).
+The font can be selected by the \f{Font Selection} (\K{fontSelW}) dialog invoked by the \f{Options>Fonts} menu item or by \c{Shift+Right-Click} (\K{cmdAcclKeys}).
-The position where text is to be placed on the layout must be selected prior to text entry. The position is select by \e{Left-Click}ing on the layout at the point where the text is to appear. Desired text is entered after the position is selected. If necessary, the location can be changed once text entry begins by \e{Left-Click+Drag}ing the text to any desired postion on the layout.
+The position where text is to be placed on the layout must be selected prior to text entry. The position is select by \c{Left-Click}ing on the layout at the point where the text is to appear. Desired text is entered after the position is selected. If necessary, the location can be changed once text entry begins by \c{Left-Click+Drag}ing the text to any desired postion on the layout.
-The \f{Properties} (\K{cmdDescribe}) command can be used to modify the contents of existing \f{Text} objects.
+The \f{Properties} (\K{cmdDescribe}) command can be used to modify the contents of existing \f{Text} objects and to draw boxes around them.
Note: loading fonts (or changing sizes) can take a noticeable amount of time.
-\rule \ No newline at end of file
+\rule
diff --git a/app/doc/editm.but b/app/doc/editm.but
index f31b6d6..166ec11 100644
--- a/app/doc/editm.but
+++ b/app/doc/editm.but
@@ -22,6 +22,12 @@ The \f{Edit Menu} shows commands affecting the \f{Main Canvas} (\K{mainW}).
\u000
+\dd \f{Clone} - Copies the selected objects to the clipboard and duplicates them offset from the original.
+Repeated Clone commands result in a series of offset copies.
+The new objects are selected and the old ones un-selected.
+
+\u000
+
\dd \f{Cut} - Moves the selected objects to the clipboard.
\u000
@@ -42,7 +48,10 @@ The \f{Edit Menu} shows commands affecting the \f{Main Canvas} (\K{mainW}).
\u000
-\dd \f{Paste} - Copies the contents of the clipboard to the layout. The newly pasted parts are in \f{Selected} state and can easily be moved into place. Any previously selected objects are unselected.
+\dd \f{Paste} - Copies the contents of the clipboard to the layout. Using the paste Menu command it will be placed at the center of the screen.
+If the context menu paste is used or the short-cuts \e{Ctrl+v} or \e{Shift+Insert}, the parts will be placed at the cursor position.
+Repeated Pastes without moving the cursor result in overlaid copies.
+The newly pasted parts are in \f{Selected} state and can easily be moved into place. Any previously selected objects are unselected.
\u000
@@ -62,28 +71,32 @@ The \f{Edit Menu} shows commands affecting the \f{Main Canvas} (\K{mainW}).
\u000
-\dd \f{Thin, Medium and Thick Tracks} - set rail width of selected tracks.
+\dd \f{Thin, Medium and Thick Tracks} - set displayed rail width of selected tracks.
\u000
-\dd \f{Tunnel} - Hides or reveals selected tracks.
+\dd \f{Tunnel} - Hides or reveals selected tracks and adds a tunnel portal symbol where the track passes from one to the other.
\u000
-\dd \f{Undo} - Undoes the last command. Up to the last ten commands can be undone. If there are no commands that can be undone the \f{Undo} item is disabled. The \f{Undo} command can also be invoked by the \f{Undo} button (\K{cmdUndo}).
+\dd \f{Bridge} - Adds parapet symbols to the sides of the track.
+
+\u000
+
+\dd \f{Undo} - Reverses the last command. Up to the last ten commands can be undone. If there are no commands that can be undone the \f{Undo} item is disabled. The \f{Undo} command can also be invoked by the \f{Undo} button (\K{cmdUndo}).
For more information on working with selected objects, see the Select (\K{cmdSelect}) command.
\rule
-\S{cmdAboveBelow} Above and Below
+\S{cmdAboveBelow} "Move To Front" and "Move to Back"
\G{png.d/btop_bottom.png}
-The Above/Below commands move the selected objects (\K{cmdSelect}) into the \f{Foreground} or \f{Background} making them more or less visible or prominent.
+The Move to Front and Move To Back commands move the selected objects (\K{cmdSelect}) to the top of the drawing list - the \f{Foreground} or to the bottom of the list - the \f{Background} making them more or less visible or prominent.
-The effect is to make the objects appear in front or behind other objects. This command is most useful when dealing with filled shapes (\K{cmdDraw}).
+The effect is to make the objects move to be in front of all or behind all other objects. This command is useful when dealing with filled shapes (\K{cmdDraw}).
Selected objects moved to the \f{Background} become unselected.
@@ -94,23 +107,23 @@ Selected objects moved to the \f{Background} become unselected.
Additional Shortcut keys perform the following:
-\dd \e{Shift+Backspace} - Undo
+\dd \c{Shift+Backspace} - Undo
\u000
-\dd \e{Ctrl+Insert} - Copy
+\dd \c{Ctrl+Insert} - Copy
\u000
-\dd \e{Shift+Insert} - Paste
+\dd \c{Shift+Insert} - Paste
\u000
-\dd Shift+Delete - Cut
+\dd \c{Shift+Delete} - Cut
\u000
-\dd Esc - Deselect All
+\dd \c{Esc} - Deselect All
\rule
@@ -123,7 +136,7 @@ The \f{Delete} button is used to delete selected objects. Remember, the \f{Undo
Deleting a track that is connected to an easement (\K{cmdEasement}) causes the easement to be deleted as well.
-The \f{Delete} key invokes the Delete command.
+The \e{Delete} key invokes the Delete command.
\rule
@@ -143,6 +156,25 @@ The \f{Draw Tunnels} Radio button group on the \f{Options>Display} dialog (\K{cm
\rule
+\S{cmdBridge} Bridge (Draw Abutments)
+
+The \f{Bridge} command is used to add abutments to a track (as on an underbridge).
+
+Select the tracks you want to be a bridge. Bridge abutments are drawn alongside the track. You can split (\K{cmdSplitTrack}) a track to shorten the length of the bridge, or to add an extra pier to the drawing.
+
+If you perform this action (or use Tunnel) the bridge is removed.
+
+\rule
+
+\S{cmdTies} Ties (Draw or Hide Ties)
+
+The \f{Ties} command is used to hide Ties (or reshow them). This may be useful for overlapping track, like dual gauge, or in areas like docks or yards where the track is covered.
+
+Select the tracks you want to hide or show ties for.
+
+\rule
+
+
\S{cmdUndo} Undo and Redo
\G{png.d/bgundo.png}
diff --git a/app/doc/filem.but b/app/doc/filem.but
index c1c694e..a0cce82 100644
--- a/app/doc/filem.but
+++ b/app/doc/filem.but
@@ -10,16 +10,26 @@
\G{png.d/mfile.png}
The \f{File Menu} shows file oriented commands for loading and saving layout files.
+\i{File Types} The main two filetypes that XTrackCAD uses are normal Layout Files (*.xtc) and Archive Files (*.xtce). The internals of both formats are described in the XtrkCAD Wiki at \W{http://www.xtrkcad.org/Wikka/FileFormats}{Wiki FileFormats}.
+
+\i{Layout File} The layout file is named with a \e{*.xtc} extenstion and is a text-based description file of all the objects used in the layout plus some information about the options currently in use.
+\i{Archive} An archive is named with a \e{*.xtce} extension, is a zipped collection of -
+
+\b a \e{manifest} JSON file that lists the contents,
+
+\b the .xtc layout file, and
+
+\b any other content listed in the manifest -> such as referenced image files. Initially the only such content is the background image which is added to the archive if it is present.
\dd \f{Exit} - Exits \e{XTrackCAD}. You will be asked to confirm your choice if there are unsaved changes.
\u000
-\dd \f{Export} - Exports the selected objects to a file in \e{XTrackCAD} (*.xti) format. The exported file can then be imported into another layout design. Refer to the Import command listed above.
+\dd \f{Export} - Exports the selected objects to a file in \e{XTrackCAD} (*.xti) format. The exported file can then be imported into another layout design. Refer to the Import command listed below.
\u000
-\dd \f{Export to Bitmap} - Creates a bitmap file (\K{cmdOutputbitmap}) of the layout.
+\dd \f{Export to Bitmap} - Creates a bitmap file (\K{cmdOutputbitmap}) of the layout. The bitmap will be saved in PNG format.
\u000
@@ -27,14 +37,17 @@ The \f{File Menu} shows file oriented commands for loading and saving layout fil
\u000
-\dd \f{File List} - List of the five most recently used \e{XTrackCAD} files.
+\dd \f{File List} - List of the five most recently used \e{XTrackCAD} files or archives.
\u000
-\dd \f{Import} - Displays the file selection dialog which allows selection of an existing \e{XTrackCAD} Import (\K{cmdExport}) file. This function can be used to transfer parts like a yard design from one layout design to another.
+\dd \f{Import} - Displays the file selection dialog which allows selection of an existing \e{XTrackCAD} Import (\K{cmdExport} *.xti) files. This function can be used to transfer parts like a yard design from one layout design to another.
\u000
+\dd \f{Import Module} - Displays the file selection dialog which allows selection of an existing \e{XTrackCAD} Import (\K{cmdExport} *.xti) file. The imported parts are put into a empty layer, sets the layer name to the imported filename and sets the layer to be a module - see (\K{cmdLayer}).
+\u000
+
\dd \G{png.d/bnew.png} \f{New} - Clears the current layout. In case there are any unsaved changes on the current plan, a warning pop-up will be displayed and you'll have the option to cancel the operation. After that the Layout Options (\K{cmdLayout}) dialog will be opened.
\u000
@@ -43,7 +56,7 @@ The \f{File Menu} shows file oriented commands for loading and saving layout fil
\u000
-\dd \G{png.d/bopen.png} \f{Open} - Displays the \f{File Open} dialog which allows an existing \e{XTrackCAD} file to be selected and opened. In case there are any unsaved changes on the current plan, a warning pop-up will be displayed and you'll have the option to cancel the operation.
+\dd \G{png.d/bopen.png} \f{Open} - Displays the \f{File Open} dialog which allows an existing \e{XTrackCAD} file or archive to be selected and opened. In case there are any unsaved changes on the current plan, a warning pop-up will be displayed and you'll have the option to cancel the operation.
\u000
@@ -59,15 +72,15 @@ The \f{File Menu} shows file oriented commands for loading and saving layout fil
\u000
-\dd \f{Revert} - Undoes all changes and returns to the last saved layout plan.
+\dd \f{Revert} - Undoes all changes and returns to the last saved layout plan.
\u000
-\dd \G{png.d/bsave.png} \f{Save} - Saves the layout under the current file name. If a filename has not yet been assigned then the \f{File Save} dialog is shown so you enter a file name.
+\dd \G{png.d/bsave.png} \f{Save} - Saves the layout under the current file name and with the same file type as was opened. If a filename has not yet been assigned then the \f{File Save} dialog is shown so you enter a file (.xtc) or archive name (.xtce).
\u000
-\dd \f{Save As} - This command lets you make a copy of the track plan you are currently working on. It differs from the regular Save command. Save stores your data back into the folder (directory) it originally came from. "Save As" lets you give your plan a different name and/or put it in a different folder on your hard disk or floppy disk.
+\dd \f{Save As} - This command lets you make a copy of the track plan you are currently working on as an file (.xtc) or an archive (.xtce). It differs from the regular Save command. Save stores your data back into the folder (directory) it originally came from in the same filetype. "Save As" lets you give your plan a different name and/or put it in a different folder on your hard disk and chnage its filetype using the selection box at the bottom of the list of files or by hardcoding the extensions .xtc or .xtce (for an archive).
\rule
@@ -89,7 +102,7 @@ This menu item creates a bitmap file of the layout.
The \f{Bitmap} dialog specifies the style and size of the bitmap. The three check-boxes (\f{Print Titles}, \f{Print Borders} and \f{Print Centerline}) control whether the Layout Title (\K{cmdLayout}), the borders or the track centerlines are printed on the bitmap. The size of the bitmap is smaller if these are disabled.
-Printing the track centerlines (also seen when zoomed in 1:1) is useful when you later print the bitmap
+Printing the track centerlines (also seen when zoomed in 1:1) is useful when you later print the bitmap
full size for laying out track.
If the Snap Grid (\K{cmdGrid}) is visible then it will be printed on the bitmap.
@@ -102,7 +115,7 @@ Note: This command can create a very large file and consume a lot of memory and
Pressing the \f{OK} button invokes a \f{File Save} dialog so you can choose the file name for the Bitmap.
-The format of the file depends on the Operating System: on MS-Windows it is a Windows Bitmap (.BMP) file, on Linux it is a X11 Pixmap (.XPM) file.
+The format of the file is PNG on all operating systems.
\rule
@@ -128,25 +141,83 @@ After importing the objects from the file, the imported objects are in selected
\S{cmdPrmfile} \i{Parameter Files}
-\e{Parameter Files} contain turnout, sectional track and structure definitions. Parameter Files are loaded and unloaded with the \f{Parameter Files} dialog.
+\e{Parameter Files} contain turnout, sectional track and structure definitions. Loaded Parameter Files are managed with the \f{Parameter Files} dialog.
\G{png.d/dprmfile.png}
-The dialog contains a list of parameter files. Each file is preceded by a checked box. If the box is checked, the parameter file is loaded. If the box is not checked the file is unloaded.
+The dialog contains a list of parameter files. Each file is preceded by a color indicator. These indicators show whether a parameter file contains definitions that
+are usable in the current scale and gauge.
+
+\G{png.d/greendot.png} \G{png.d/greenstar.png} Definitions from this file are a perfect fit for the current layout options. The file has been loaded and will be visible in the \f{HotBar}. For track this means that gauge and scale of the track elements
+are identical to the layout settings.
+
+\G{png.d/yellowdot.png} \G{png.d/yellowstar.png} Definitions from this file can be used with this layout but do not fit perfectly. A typical example is On30 where HO scale track can be used because the
+gauge is the same. But differences in scale may make the track look out of scale.
-Loaded definition files associated with current scale settings appear on the \f{Hot Bar} (\K{cmdHotBar}). If you \e{unload} a file the definitions are removed from the selection lists and the \f{Hot Bar}. An unloaded file may be \e{reloaded} by selecting the \f{Reload} button (The \f{Unload} button changes to \f{Reload} when a selected file is unloaded).
+\G{png.d/reddot.png} \G{png.d/redstar.png} This parameter file doesn't contain any usable definitions with current settings. You may want to change the layout options if you want to use elements from
+this file (for example altering the Layout Scale).
+
+\G{png.d/greydot.png} \G{png.d/greystar.png} This file is loaded but hidden.
+If it is marked as favorite it will be kept on the
+list between runs. Otherwise it will be removed from the list when
+the program is terminated.
+
+Definition files can be marked as \e{favorite}. The indicator for favorites is a star.
+The meaning of the colors isn't changed.
+
+Loaded definition files that are marked with a yellow or a green indicator appear on the \f{Hot Bar} (\K{cmdHotBar}).
+
+If you \e{unload} a file the definitions are removed from the selection lists and the \f{Hot Bar}.
+If the unloaded file was marked as a favorite it can be \e{reloaded} by selecting the \f{Reload} button.
+
+Files that are still loaded can be \e{reloaded} as well. In that case the old definitions are refreshed and extended by the
+rereading the file. This can be useful if you want to check changes you made by hand-editing a parameter file.
+
+Note that loading a file does not change the existing definitions in the layout. To do that after loading, use \K{cmdRefreshSpecial}.
It is possible to change the state of several files at once. The \f{Select All} button allows you to select all parameter files for the next operation.
-\e{Unloaded} files are removed from the list when \e{XTrackCAD} terminates.
+In case unloaded files are marked as favorite, their state will be preserved
+between runs of the program.
+This makes it possible to keep a list of preferred parameter sets between
+runs of XTrackCAD but hide temporary unused files from the hotbar. That
+way the hotbar contents can be kept short containing only the currently needed elements.
+
+In order to update the defintion of an already loaded file from disk, you can use the \e{Reload} button. This will reload the file contents - with any changes made.
+It is the equivalent of using \f{Browse} and selecting the file again.
+
+Files can be listed by either their file name or by their contents description.
+This is controlled by the \f{Show File Names} check box.
-Files can be listed by either their file name or by their contents description. This is controlled by the \f{Show File Names} check box.
+The \f{Search} button opens the \e{Search Parameter File} dialog (\K{cmdSearchgui}) this
+shows the all files included the system library so they can be added.
-The \f{Browse} button allows you to load other \e{parameter files} such as provided by other users or downloaded from the Internet.
+The \f{Browse} button opens a file window that allows the user to add additional files
+to directly load other non-system \e{parameter files} such as provided by other users or
+downloaded from the Internet.
-When first installed, all available parameter files are loaded. You can unload parameter files you don't use to speed up \e{XTrackCAD} startup time.
+When first installed, parameter files for all common scales are loaded.
+You can unload parameter files you don't use to speed up \e{XTrackCAD} startup time.
-The order in this list controls the order of turnouts and structures on the \f{Hot Bar} (\K{cmdHotBar}). You can move a parameter file to the end of the list by \e{Unloading} it, and then loading it via the \f{Browse} button.
+The order in this list controls the order of turnouts and structures on the
+\f{Hot Bar} (\K{cmdHotBar}). You can move a parameter file to the end of the
+list by \e{Unloading} it, and then loading it via the \f{Browse} button.
+
+\S{cmdSearchgui} \i{Search Parameter Files}
+
+Selecting and loading additional parameter files from the System Library is done in the
+\f{Search Parameter Files} dialog.
+
+\G{png.d/paramsearch.png}
+
+Using the Search function you can find and select parameter files that are
+part of the XTrackCAD installation.
+Enter a search string and select the Search button. Search results are
+shown in the list box. A blank search or the value "*" resets the search results to
+show the entire libary.
+
+Select the files you're interested in and press the \f{Add} button to add them to your
+parameter list.
\rule
@@ -204,27 +275,36 @@ Whether tracks are printed with one or two lines (representing the center line a
\u000
-\dd \f{Ignore Page Margins} - use the physical page size. This allows the printouts to abut without trimming.
+\dd \f{Registration Marks} - at 1:1 scale, print location markers every 3" (or 10cm). This option is only enabled at 1:1. This is useful for aligning multiple pages printed at different angles.
\u000
-\dd \f{Print Registration Marks} - at 1:1 scale, print location markers every 3" (or 10cm). This option is only enabled at 1:1. This is useful for aligning multiple pages printed at different angles.
+\dd \f{Page Numbers} - to help positioning the individual pages the page number is printed in the center of the page in the format (x/y). x is the position from left to right, y in from bottom to top, So (1/1) is the page at the bottom left.
+As an additional aid, the numbers of the next pages are printed on each edge.
\u000
-\dd \f{Print Snap Grid} - if the Snap Grid (\K{cmdGrid}) is visible then it may be drawn on the printout. This option is only enabled if the \e{Snap Grid} is visible.
+\dd \f{Snap Grid} - if the Snap Grid (\K{cmdGrid}) is visible then it may be drawn on the printout. This option is only enabled if the \e{Snap Grid} is visible.
\u000
-\dd \f{Print Rulers} - print rulers on all edges of the page. This option is only enabled if the \f{Angle} is \e{0.000}.
+\dd \f{Rulers} - print rulers on all edges of the page. This option is only enabled if the \f{Angle} is \e{0.000}.
\u000
-\dd \f{Print centerline below Scale 1:1} - dotted line down the center of the Track/Roadbed. This line will always be printed at Scale 1:1, but selecting this option will print it at smaller scales. This option is disabled if tracks would be drawn with only one line (instead of two).
+\dd \f{Centerline below Scale 1:1} - dotted line down the center of the Track/Roadbed. This line will always be printed at Scale 1:1, but selecting this option will print it at smaller scales. This option is disabled if tracks would be drawn with only one line (instead of two).
\u000
-\dd \f{Print Roadbed Outline} - lines representing the edge of the Roadbed. The Roadbed will be printed if the \e{Width} is greater than the track gauge. Note: this option is most useful at 1:1. This option is disabled if tracks would be drawn with only one line (instead of two).
+\dd \f{Roadbed Outline} - lines representing the edge of the Roadbed. The Roadbed will be printed if the \e{Width} is greater than the track gauge. Note: this option is most useful at 1:1. This option is disabled if tracks would be drawn with only one line (instead of two).
+
+\u000
+
+\dd \f{Ignore Page Margins} - use the physical page size. This allows the printouts to abut without trimming.
+
+\u000
+
+\dd \f{Margins} - examine and update the printer margins for the current printer. (\K{cmdPrintMargin})
\u000
@@ -241,13 +321,15 @@ Whether tracks are printed with one or two lines (representing the center line a
\dd \f{Angle} - of the grid.
-These values can be set directly or by dragging on the layout. \e{Shift+Left+Drag} moves the grid and \e{Shift+Right+Drag} rotates the grid. The \f{Reset} button resets the values to 0.
+These values can be set directly or by dragging on the layout. \c{Shift+Left+Drag} moves the grid and \c{Shift+Right+Drag} rotates the grid. The \f{Reset} button resets the values to 0.
The \f{Print} button prints the selected pages and closes the \f{Print} dialog. It is not enabled until you have selected some pages to print.
The \f{Setup} button invokes the Printer Setup (\K{printSetup}) dialog.
-The \f{Clear} button unselects all selected pages.
+The \f{Select All} button selects all pages for printing.
+
+The \f{Clear} button unselects all selected pages, so no pages will be printed.
\e{Suggested Uses:}
@@ -285,7 +367,7 @@ The \f{Printer Setup} window contains:
\u000
-\dd \f{Orientation} - a Radio button to select various Landscape or Portrait formats.
+\dd \f{Orientation} - a Radio button to select various Landscape or Portrait formats. This setting is ignored, use the \f{Page Format} entry on the \f{Print} dialog.
\u000
@@ -333,6 +415,52 @@ The \f{Printer Setup} window contains:
\u000
-\dd \f{Orientation} - a Radio button to select either Landscape or Portrait format.
+\dd \f{Orientation} - a Radio button to select either Landscape or Portrait format. This setting is ignored, use the \f{Page Format} entry on the \f{Print} dialog.
+
+\rule
+
+\S{cmdPrintMargin} \i{Printer Margin}
+
+\G{png.d/printmargin.png}
+
+The \f{Printer Margins} dialog allows you to configure the selected printer's margins.
+
+The margins for the four edges of the printed page are displayed.
+The default values are fetched from the Operating System.
+You can enter updated values if the System values don't match your actual printer.
+
+The \f{Reset} is enabled if the displayed values don't match the System values and will reload the System's values.
+
+To check your printer's margin:
+
+\dd Set \f{Scale} to 1
+
+\u000
+
+\dd Set \f{Origin} and \f{Angle} to 0.000 by clicking the \f{Reset} button
+
+\u000
+
+\dd Enable \f{Registration Marks}
+
+\u000
+
+\dd Enable \f{Ignore Page Margins}
+
+\u000
+
+\dd Select and \f{Print} the lower left page of you layout
+
+\u000
+
+\dd Measure the distance from the left and bottom edges to the Registration Mark at (3",3") or (10cm,10cm).
+
+\u000
+
+\dd Update the \f{Printer Margin} values for the left and bottom edges. You can also update the top and right edges.
+
+\u000
+
+Margins values are stored for each printer.
\rule
diff --git a/app/doc/helpm.but b/app/doc/helpm.but
index 08ccd49..b1e3666 100644
--- a/app/doc/helpm.but
+++ b/app/doc/helpm.but
@@ -10,11 +10,9 @@
The \f{Help Menu} displays information on various topics. The contents of the menu vary depending on the operating system.
-\dd \G{png.d/mhelpdemos.png}
-
-\dd \e{Demo Menu}
+\dd The \f{Help} command opens the Help Window at the Contents Page.
-The \f{Demos} command (\K{cmdDemo}) opens a cascading menu which invokes various demonstrations of \e{XTrackCAD} features.
+\dd The \f{Help Command Context} command opens the Help Window at the page for the current Command.
\dd \G{png.d/mhelprecent.png}
@@ -28,6 +26,14 @@ The \f{Recent Messages} command opens a cascading menu containing recent error m
The \f{Tip of the Day} item displays a useful tip about the operation of \e{XTrackCAD}. By default, a new tip is displayed each time you start the program.
+\dd \G{png.d/mhelpdemos.png}
+
+\dd \e{Demo Menu}
+
+The \f{Demos} command (\K{cmdDemo}) opens a cascading menu which invokes various demonstrations of \e{XTrackCAD} features.
+
+The \f{Examples} command displays the list of included example programs which you can examine.
+
\rule
\S{cmdDemo} Demo Mode
@@ -63,4 +69,4 @@ A number of options and controls (such as scale) are changed while running demon
You can adjust Window sizes and positions while the demonstration is running to better see what is happening.
-\rule \ No newline at end of file
+\rule
diff --git a/app/doc/hotbar.but b/app/doc/hotbar.but
index 9683c5e..fcaddce 100644
--- a/app/doc/hotbar.but
+++ b/app/doc/hotbar.but
@@ -8,16 +8,34 @@
\G{png.d/hotbar.png}
-The \e{Hot Bar} is a scrolling list of all the turnouts, sectional track and structures available through the Turnout (\K{cmdTurnout}) and Structure (\K{cmdStructure}) commands. The Description and/or Part Number under each object can be displayed by enabling the \e{Hot Bar Labels} radio button on the Display (\K{cmdDisplay}) dialog.
+The \e{Hot Bar} starts with a flextrack of the current gauge, and then a scrolling list of all the turnouts, sectional track and structures available through the Turnout (\K{cmdTurnout}) and Structure (\K{cmdStructure}) commands. The Description and/or Part Number under each object can be displayed by enabling the \e{Hot Bar Labels} radio button on the Display (\K{cmdDisplay}) dialog.
-The arrow buttons on either side of the \e{Hot bar} move the list one object to the right or left. Holding down the Shift key will move the list by greater amounts. About eight Shift+Clicks are required to move the list through the entire range of objects. Also, pressing the keys \e{1} through \e{9} and \e{0} will cause the \e{Hot Bar} to jump relative spots on the list.
+Only those items taken from files which are in the current scale/gauge are displayed in the HotBar. They are shown in order - A FlexTrack - then the Contents of Files in the File->Parameter Files... List in listed order - and then any Custom objects created in this Layout as listed in the Manage->Custom Defined Parts dialog.
-A \e{Right-Click} over the \e{Hot Bar} will display a pop-up menu listing the contents of the \e{Hot Bar}. Selecting an item from this list causes the \e{Hot Bar} to jump to the relative spot on the list.
+The arrow buttons on either side of the \e{Hot bar} move the list one object to the right or left. Holding down the Shift key will move the list by greater amounts. About eight \c{Shift+Click}s are required to move the list through the entire range of objects. Also, pressing the keys \c{1} through \c{9} and \c{0} will cause the \e{Hot Bar} to jump relative spots on the list.
-Objects on the \e{Hot Bar} are placed on the drawing canvas by first clicking on the object, \e{Dragging} it the Main window, positioning it then pressing the \e{Space} key to set it in place.
+A \c{Right-Click} over the \e{Hot Bar} will display a pop-up menu listing the files with contents on the \e{Hot Bar}. Selecting an item from this list causes the \e{Hot Bar} to jump to the relative spot on the whole list.
+
+Objects on the \e{Hot Bar} are placed on the drawing canvas by first clicking on the object, \e{Dragging} it the Main window, rotating it with \c{Ctrl+Left-Drag} or \c{Right-Drag} positioning it then pressing the \c{Space} key to set it in place.
\rule
+\S{Flextrack} FlexTrack
+
+A FlexTrack unit can be placed for convienience on the left-hand side of the HotBar.
+This is can be hidden by an option in \K{cmdPref}. It can be recognised because it is the only diagonally facing track element and has a label "FLEX".
+It is used by \c{Left-Click} selecting it, and \c{Left-Click} clicking on the layout where the first end should be placed, and then \c{Left-Click} for the second end.
+If either end is over an unconnected end and \f{Shift} was not held, the flextrack will be connected to the track and the end angle and radius will be set from the track.
+If an end was not over an unconnected end, it can be manipulated by left dragging out the end angle before releasing.
+If the second end is not on a track end, differing end angles will produce a smooth curve, if both ends are unconnected, simply \c{Left-Click} without dragging produces a straight track.
+Once both ends have been defined, the track can then be manipulated like a \k{chgCornu} Cornu Curved Track, by selecting and moving ends, adding and removing "pins" and altering the end anchor angle and radius if the flextrack is not connected at that end.
+If the disconnected end is dragged and the button released while over an open end of another track, it will be connected to it in the manner of a Join with a Cornu easement.
+
+A FlexTrack will form a Straight Track if the ends have zero radius and are in a line with opposed end angles.
+If the ends are not aligned but the end angles are opposed it will be a simple S-curve.
+It will be a smooth monotonic curve if the ends are not in a line and the end angle lines and chord form a triangle. Otherwise it will be a complex S-curve. .
+
+\rule
\S{hbStructures} Structures
@@ -30,19 +48,19 @@ Refer to \K{cmdStructure} for information pertaining to use of the \e{Structure}
\S{hbTurnouts} Turnouts
-\e{Turnouts} have an active endpoint (\K{generalTerms}) which is the handle used to position the \e{Turnout}. You can change the \e{active endpoint} by a \e{Shift+Left-Click} which causes the next endpoint to become Active.
+\e{Turnouts} have an active endpoint (\K{generalTerms}) which is the handle used to position the \e{Turnout}. You can change the \e{active endpoint} by a \c{Shift+Left-Click} which causes the next endpoint to become Active.
-If you \e{Left+Drag} a turnout onto a track, the active endpoint (\K{generalTerms}) is aligned with the selected track. On flex-track, you can flip the turnout by moving the cursor from one side of the track centerline to the other. On another turnout, the new turnout will be placed at the endpoint closest to the cursor.
+If you \c{Left+Drag} a turnout onto a track, the active endpoint (\K{generalTerms}) is aligned with the selected track. On flex-track, you can flip the turnout by moving the cursor from one side of the track centerline to the other. On another turnout, the new turnout will be placed at the endpoint closest to the cursor.
-\e{XTrackCAD} will automatically connect the turnout's endpoints to any other tracks they are aligned with. The number of endpoints that will be connected is displayed on the Status Bar, as well as the Maximum displacement between these endpoints and the tracks they will be connected to. \e{XTrackCAD} will adjust the position of the Turnout to give you the best fit for locating the turnout. You can override this adjustment by holding down the \e{Shift} key while \e{Dragging}.
+\e{XTrackCAD} will automatically connect the turnout's endpoints to any other tracks they are aligned with. The number of endpoints that will be connected is displayed on the Status Bar, as well as the Maximum displacement between these endpoints and the tracks they will be connected to. \e{XTrackCAD} will adjust the position of the Turnout to give you the best fit for locating the turnout. You can override this adjustment by holding down the \e{Shift} key while \e{Dragging}.
-\e{Right+Drag} (\K{windowTerms}) can be used to rotate the turnout on the layout. \e{Shift+Right-Click} (\K{cmdAcclKeys}) displays a pop-up menu allowing you to rotate the turnout by various angles.
+\c{Right+Drag} or \c{Ctrl+Left+Drag} (\K{windowTerms}) can be used to rotate the turnout on the layout. \c{Shift+Right-Click} (\K{cmdAcclKeys}) displays a pop-up menu allowing you to rotate the turnout by various angles.
-When you press the \e{Space} key, the turnout is positioned on the layout. Any tracks that are aligned with any of the turnout's endpoints will be connected to the turnout automatically. If you are using the Turnout (\K{cmdTurnout}) command then you can also click the \e{OK} button on the dialog.
+When you press the \c{Space} key, the turnout is positioned on the layout. Any tracks that are aligned with any of the turnout's endpoints will be connected to the turnout automatically. If you are using the Turnout (\K{cmdTurnout}) command then you can also click the \e{OK} button on the dialog.
If you choose another turnout or change commands after beginning to place a turnout on the layout, the turnout will be created as if it is attached to another track. Otherwise it will be removed.
-If the Drawing Scale is smaller or equal to the Label Scale (\K{cmdDisplay}) then Turnouts will be labeled with their description when drawn. The individual labels can be can be turned off by the Move Description(\K{cmdMoveLabel}) command, or all Turnout labels can be disabled by using the Display (\K{cmdDisplay}) dialog. As well, the length of any connected Flex-track will be indicated at each endpoint.
+If the Drawing Scale is smaller or equal to the Label Scale (\K{cmdDisplay}) then Turnouts will be labeled with their description when drawn. The individual labels can be can be turned off by the Move Description(\K{cmdMoveLabel}) command, or all Turnout labels can be disabled by using the Display (\K{cmdDisplay}) dialog. As well, the length of any connected Flex-track will be indicated at each endpoint.
Refer to \K{cmdTurnout} for information pertaining to use of the \e{Turnout} dialog.
diff --git a/app/doc/intro.but.in b/app/doc/intro.but.in
index 51203f8..1a423f0 100644
--- a/app/doc/intro.but.in
+++ b/app/doc/intro.but.in
@@ -15,7 +15,8 @@
\define{XTCStgzPack} xtrkcad-setup-@XTRKCAD_VERSION@.i386.sh
\define{XTCCopyRight} Copyright 2003, Sillub Technology and
-Copyright 2007, Bob Blackwell and Martin Fischer
+Copyright 2007, Bob Blackwell and Martin Fischer and
+Copyright 2020, Martin Fischer, Adam Richards and Dave Bullis
\# Index Groupings
@@ -80,7 +81,7 @@ Using it, you can
\u000
-\b Automatically generated Spiral \e{transition curves} (easements) whenever the track radius changes.
+\b Automatically generated Cornu \e{transition curves} (easements) whenever the track radius changes.
\u000
@@ -88,6 +89,10 @@ Using it, you can
\u000
+\b Trace tracks and other objects over a background image of a real-world location map, a scanned trackplan, or other image.
+
+\u000
+
\b Print the design in a scale of your choice. When printed in 1:1 scale the printout can be used as a template for laying the track to build your dream layout.
\u000
@@ -105,31 +110,47 @@ Be sure to visit the project web page for latest news and updates: \W{http://www
\f{Easy to use}
-As much as possible, \e{XTrackCAD} is designed to operate the same as pencil and paper: create tracks by simply dragging the mouse, place turnouts anywhere on existing tracks, use circles for initial design and create stall tracks by drawing from the turntable.
+ \e{XTrackCAD} was designed to operate in a similar way to pencil and paper: You can draw tracks by dragging the mouse, you select and place turnout "templates" anywhere on existing tracks, and you can use fixed radii for initial design.
+
+But extra capabilities have been added that give more power by using FlexTracks (Cornu) you have tracks that automatically redraw as you drag turnouts around, creating smooth curves, you can zoom in and out, and of course, undo and deleting tracks are easier!
+
+You don't have to be an expert CAD user to make the most of \e{XTrackCAD} but the program will ensure that dimensions, radii and angles are accurate.
+
+You don't have to specify line lengths or angles and just draw. But if you want to be more precise, you can enter precise dimensions both in real-world and scale sizes.
+
+\e{XTrackCAD} is a specialized CAD for railway modelling, it deals with tracks as tracks, not as line segments. Tracks are connected correctly to each other and with endpoints of turnouts and other components.
+
+As you zoom in, the two rails are drawn and then ties are added.
+
+\f{Free}
-You don't have to be an expert CAD user to make the most of \e{XTrackCAD}. You don't specify line lengths or angles, just draw.
+Thanks to the generosity of Dave Bullis, who wrote the progam, and the active help of open-source volunteers, XTrackCAD is free to own and use. You can even take up the cudgels and help!
-\e{XTrackCAD} deals with tracks as tracks, not line segments. Tracks are connected to each other and can be drawn showing endpoints of turnouts and other components. As you zoom in, both rails are drawn.
+\f{Available Help}
-On-line demonstrations show the actual operation of many of the program's features. Extensive help is available for all commands and operations.
+On-line demonstrations show the actual operation of many of the program's features. Extensive help is available for all commands and operations. There are communities of users and developers who can answer quaestions.
\f{Packed with features}
-\e{XTrackCAD} is designed from the ground up to be a complete tool for Model Railroad layout design.
+\e{XTrackCAD} is designed from the ground up to be a complete tool for many aspects of Model Railroad layout design.
+
+\dt \e{Active UI Prompting}
+
+\dd As the mouse moves over the layout objects, a set of different anchors are shown to indicate what is possible in each command with each modifier key if clicked or double clicked at that location.
\dt \e{Train Simulation and Car Inventory}
-\dd Any number of Cars and Locomotives can be placed on your layout to check clearances, siding capacities and track layout. Trains can be animated to simulate operations and switching on your layout. But be careful you don't crash!
+\dd Any number of Cars and Locomotives can be placed on your layout to check clearances, siding capacities and track layout. Trains can be animated to simulate operations and switching on your layout.
\u000
-\dd The Car Inventory dialog records your cars and locomotives.
+\dd The Car Inventory dialog records your cars and locomotives and these can be exported and imported from spreadsheets.
\u000
\dt \e{Track Manipulation}
-\dd Track segments can be lengthened or shortened by simple click and drag. Tangents to a curve are created by dragging away from the curve. Tracks are extended by dragging from an Endpoint, creating new straight or curved segments.
+\dd Track segments can be lengthened or shortened by simple click and drag. Tangents to a curve are created by dragging away from the curve. Tracks are extended by dragging from an Endpoint, creating new straight or curved segments. New tracks can be snapped into place or precisely placed and then Joined.
\u000
@@ -137,25 +158,32 @@ On-line demonstrations show the actual operation of many of the program's featur
\u000
-\dd The Parallel command easily creates new straight or curved tracks, laying out yards and sidings in a few easy steps.
+\dd The Cornu flextrack features create dynamically variable tracks that optimise the curvature of tracks to ensure a protypical appearance. They alter as the other tracks are moved just as flextrack will in the 12 inches to the foot world!
+
+\u000
+
+\dd The Parallel command easily creates new straight or curved tracks, laying out yards and sidings in a few easy steps. Accurate platforms can be created with the Parallel Lines command followed by the Join Lines command.
\u000
-\dd The Join command links any two tracks (straight, curved, Turnouts or Turntables) with accurate aligned connecting track segments. The connected tracks are trimmed or extended as required.
+\dd The Join command links any two tracks (Straights, Curves, Turnouts or Turntables) with accurate aligned connecting track segments which can be easements including Cornu easements. The connected tracks are trimmed or extended as required.
\u000
-\dd The Helix Track command computes the number of turns, radius, grade and vertical separation to based on your criteria.
+\dd The Helix Track command computes the number of turns, radius, grade and vertical separation based on your criteria.
\u000
+\dd Turntables can be constructed with any radius and can either have fixed or dynamic bay tracks
+
\dt \e{Turnout Select and Placement}
-\dd The Turnout Hot Bar contains a scrolling list of Turnouts, Sectional Tracks and Structures available in the current Scale. Simply click on one and drag it onto the layout.
+\dd The Turnout Hot Bar contains a scrolling list of Turnouts, Sectional Tracks and Structures available in the current Scale. Simply click on one and click again drop it onto the layout.
\u000
-\dd As Turnouts are dragged over existing tracks they are automatically aligned. \e{XTrackCAD} searches for any other tracks that align with each of the Turnout's Endpoints, and shows you the number of connections that will be made and the maximum offset as you position the Turnout. Just adjust the Turnout's position to minimize the offset to ensure the best fit.
+\dd As Turnouts are dragged over existing tracks they are automatically aligned. \e{XTrackCAD} searches for any other tracks that align with each of the Turnout's Endpoints, and shows you the number of connections that will be made and the maximum offset as you position the Turnout.
+Just adjust the Turnout's position to minimize the offset to ensure the best fit.
\u000
@@ -165,11 +193,15 @@ On-line demonstrations show the actual operation of many of the program's featur
\dt \e{Layers}
-\dd Layers are an important feature for designing layouts of any complexity. Use one layer for the main-line and others for staging tracks, Bench-work or scenery. Multilevel designs can have groups of layers for each level.
+\dd Layers are an important feature for manageing the design for layouts of any complexity. Use one layer for the main-line and others for staging tracks, Bench-work or scenery. Multilevel designs can have groups of layers for each level.
+
+\u000
+
+\dd \e{XTrackCAD} allows up to 99 layers layers can have their own button to control visibility. Each layer can have a name which is displayed as the balloon help for the layer button.
\u000
-\dd \e{XTrackCAD} allows up to 99 layers and the first 20 layers can have their own button to control visibility. Each layer can have a name which is displayed as the balloon help for the layer button.
+\dd Modular Layout assembly is supported with Modular Layers which ensure thier contents are moved as a set.
\u000
@@ -179,11 +211,11 @@ On-line demonstrations show the actual operation of many of the program's featur
\dt \e{Elevations and Profile}
-\dd Elevations are one of the most powerful features of \e{XTrackCAD}.
+\dd Elevations are one of the most powerful features of \e{XTrackCAD} they are dynamically recalulated as the layout changes.
\u000
-\dd Traditional layout designs (such as published in magazines) show elevations at selected spots on the layout. They may also show grades between elevations.
+\dd Traditional layout designs (such as published in magazines) show elevations at selected spots on the layout. They may also show grades between elevations. These can be input into XtrkCAD.
\u000
@@ -195,7 +227,7 @@ On-line demonstrations show the actual operation of many of the program's featur
\u000
-\dt \e{Easements (Spiral Transition Curves)}
+\dt \e{Easements (Cornu Transition Curves)}
\dd Easements are special sections of gradually curving track used to connect straight and curved tracks (or two curved tracks). Easements reduce the effects of sudden changes in track curves which can cause derailments. They also look great!
@@ -207,7 +239,7 @@ On-line demonstrations show the actual operation of many of the program's featur
\dt \e{Flexible and Powerful Printing}
-\dd Printing is an important part of a layout design program, and \e{XTrackCAD} has a flexible Print command to get your design onto the layout.
+\dd Printing is an important part of a layout design program, and \e{XTrackCAD} has a flexible Print command to get your design onto the layout.
\u000
@@ -257,7 +289,7 @@ On-line demonstrations show the actual operation of many of the program's featur
\u000
-\dd The \e{XTrackCAD} Draw command is used to draw lines (straight, curved and circles) and shapes (filled boxes, circles and polygons). These can be different colors and lines can have different widths. These are useful for drawing scenic features (rivers, bridges, mountains).
+\dd The \e{XTrackCAD} Draw command is used to draw lines (straight, curved and circles) and shapes (filled boxes, circles, polylines and polygons). These can be different colors and lines can have different widths. The Polylines and Polygons can have curved sides. These are useful for drawing scenic features (rivers, bridges, mountains).
\u000
@@ -269,11 +301,11 @@ On-line demonstrations show the actual operation of many of the program's featur
\u000
-\dd Text can be drawn on the layout too.
+\dd Text can be added to the layout.
\u000
-\dd Notes can be attached to particular spots on the layout. When selected they can display special information about that part of the layout, such as prototype features, construction details or operation notes.
+\dd Notes can be attached to particular spots on the layout. When selected they can display special information about that part of the layout, such as prototype features, construction details or operation notes. This includes URL links to files on the Internet.
\u000
@@ -330,7 +362,7 @@ Refer to \K{keyFeatures} and \K{addFeatures} for a listing of \e{XTrackCAD} feat
\u000
-\b Draw lines, arcs and filled shapes (for showing river edges etc.)
+\b Draw lines, arcs, polylines and polygons and filled polygons or circular shapes (for showing river edges etc.)
\u000
@@ -386,11 +418,11 @@ Refer to \K{keyFeatures} and \K{addFeatures} for a listing of \e{XTrackCAD} feat
\u000
-\b Panning via a map window
+\b Panning and zooming via a map window and also in Pan/Zoom Mode
\u000
-\b Price lists
+\b Price lists can be entered to allow the layout to be priced
\u000
@@ -439,7 +471,11 @@ Refer to \K{keyFeatures} and \K{addFeatures} for a listing of \e{XTrackCAD} feat
\e{XTrackCAD} has many other carefully selected features:
-\b Sections of track can be hidden, which can be drawn as dashed lines, or completely hidden. A Tunnel Portal is drawn when a hidden track connects with normal track.
+\b Sections of track can be hidden, which can be drawn as dashed lines, or completely hidden. A Tunnel Portal is drawn when a hidden track connects with normal track.
+
+\u000
+
+\b Sections of track can be tagged as bridge tracks which draws a bridge parapet on each side.
\u000
@@ -485,8 +521,9 @@ Refer to \K{keyFeatures} and \K{addFeatures} for a listing of \e{XTrackCAD} feat
\b You can rescale and flip objects, trim turnouts and create block gaps.
-\rule
+\u000
+\rule
\H{aboutmanual} About This Manual
@@ -525,7 +562,7 @@ Throughout this manual the following typographic conventions are used to make fi
\H{installSoftware} Installation
-\e{XTrackCAD} is designed to operate under Linux or MS Windows. Information within this section of the manual pertains to installation of the application in either of these environments.
+\e{XTrackCAD} is designed to operate under Linux, Apple MacOS or Microsoft Windows. Information within this section of the manual pertains to installation of the application in either of these environments.
\rule
@@ -553,6 +590,27 @@ Throughout this manual the following typographic conventions are used to make fi
\rule
+\S{OSXInstall} \i{OSX Installation} \i{Mac Installation}
+
+\e{XTrackCAD} for OSX is shipped as a package containing an application.
+
+\n Start the installation by opening the package and dragging the contained application into the \e{Applications} folder using the shortcut in the package.
+The application includes the program, documentation, parameter and example files within it.
+
+\lcont{\u000}
+
+\n To run on Apple MacOS, the \e{XQuartz} package must first have been installed - see \W{http://www.xquartz.org}{http://www.xquartz.org}. XQuartz will need to be upgraded after each OS version upgrade.
+
+\lcont{\u000}
+
+\n \i{OSX Run Security} When the application is first run, it will need to be authorized by OSX. There will be a OSX prompt that asks if it should be opened. And then it will still fail to run.
+After opening it for the first time, go to \e{System Preferences>Security & Privacy} and you will see that the app is named as having been blocked. Hit the \e{Run Anyway} button and the program should start.
+This sequence may be necessary after each OS upgrade.
+
+\n On Mac OS Catalina, the program will need to be started by right-clicking it and selecting \f{Open}.
+
+\rule
+
\S{LinuxInstall} \i{Linux Installation}
\e{XTrackCAD} for LINUX is shipped as a self-extracting archive (executable).
@@ -576,7 +634,9 @@ If you install \e{XTrackCAD} into another directory, set the \c{XTRKCADLIB} envi
\H{startSoftware} \i{Start the Program}
-The \e{XTrackCAD} executable is named xtrkcad.exe on Windows and xtrkcad on Linux.
+The \e{XTrackCAD} executable is named xtrkcad.exe on Windows and xtrkcad on Linux and OSX.
+
+It is usually started by clicking on its icon, or right-click and \f{Open} in OSX Catalina, but there are command line options as well.
\f{Command Line}
@@ -584,6 +644,11 @@ On Windows:
\c xtrkcad [/c config] [/v] [/l logfile] [/d logcontrol] layoutfile
+On Mac OSX:
+
+\c cd /Applications
+\c ./open xtrkcad --args [-c config] [-v] [-l logfile] [-d logcontrol] layoutfile
+
On Linux:
\c xtrkcad [-c config] [-v] [-l logfile] [-d logcontrol] layoutfile
@@ -616,7 +681,7 @@ developers.
\dt \c{d logcontrol}
\dd specifies the amount of logging. The argument logcontrol has the format \c{logmodule[=level]}.
-logmodule defines the functionality that should be logged, the optional level specifies the loglevel.
+logmodule defines the functionality that should be logged, the optional level specifies the loglevel. Zero means no logging.
Defaults are no modules are logged and loglevel is 1 if omitted from logonctrol parameter.
\u000
@@ -625,22 +690,21 @@ Defaults are no modules are logged and loglevel is 1 if omitted from logonctrol
\dd set logfile, only needed in conjunction with the debug option.
-
-
-
\H{introQT} Quick Tour
\G{png.d/main.png}
When \e{XTrackCAD} starts, it displays the \f{Main} (\K{mainW}) and \f{Map} (\K{cmdMap}) windows. The \f{Map} window is used to change the origin of the \f{Main} window when the entire layout cannot be displayed at one time.
-The Menu bar across the top of the \f{Main} window contains standard Windows menus. Some of these are particularly useful to the new user:
+\G{png.d/maintagged.png}
+
+The Menu Bar across the top of the \f{Main} window contains standard Windows menus. Some of these are particularly useful to the new user:
\b The \f{File>Exit} menu exits \e{XTrackCAD}. You can also exit by selecting the System menu in the upper left corner of the Window.
\u000
-\b The \f{File>Open} menu opens existing layout files. When first installed, the default directory contains some example programs you can look at.
+\b The \f{File>Open} menu opens existing layout files and archives. When first installed, the default directory contains some example programs you can look at.
\u000
@@ -655,22 +719,42 @@ The Menu bar across the top of the \f{Main} window contains standard Windows men
\b The \f{Options>Preferences} menu specifies some less frequently changed items.
You can use this menu to choose Metric units (\K{cmdPref}).
+\u000
+
\rule
+The Tool Bar contains icons for each of the commands in the Menus. The icons shown can be customized using the \f{View->ToolBar} submenu.
-\H{performance} Performance Issues
+\b The main drawing Mode command is \f{Select} - which is shown with the red arrow icon. From this mode, selected objects can be \f{Modified} as well. A close second is the \f{Describe} mode which allows properties of Objects to be seen and Changed.
-This section lists some things that can improve the performance of \e{XTrackCAD}.
+\u000
-\b To speed up initialization, remove unused parameter files (See \f{Parameter Files} dialog - \K{cmdPrmfile}).
+\b A different mode is \f{Train} which allows trains to be simulated on the Layout.
\u000
-\b During moves and rotates, draw tracks \f{Simply} or as \f{Endpoints} (See \f{Command Options} dialog - \K{cmdCmdopt}). Also \f{Zoom In} (\K{viewM}) to reduce the number of tracks that are being displayed.
+Under the Tool Bar is the Hot Bar. This contains defined track and drawing objects taken from parameter files. To use a template you select it and then click on the Drawing Area.
+
+\rule
+
+The main part of the window is the Drawing Area, this is where the Layout is shown in 2D. The view can be zoomed or panned. The \f{Pan-Zoom} command whise symbol is the crossed arrows allows easiest control, but in \f{Select} command you can pan with the arrow keys and zoom with the trackpad or mousewheel or \f{Ctrl}+"+" or "-" can affect the zoom level.
+
+\rule
+
+At the bottom on the screen are two more areas. The Status Bar contains messages about commands as they are being used, and the Info Bar shows the zoom level and the position of the cursor.
+
+\rule
+
+\H{performance} Performance Issues
+
+This section lists some things that can improve the performance of \e{XTrackCAD}.
+
+
+\b On the \f{View} dialog (\K{cmdView}) turn off \f{Show Snap Grid} or \f{Change Grid...} to have fewer grid points.
\u000
-\b If you have to move a lot of track a large distance, create a temporary track at the destination and use the \f{Join} (\K{cmdJoin}) command to move the selected track to join with the temporary track. Then remove the temporary track.
+\b To speed up initialization, remove unused parameter files (See \f{Parameter Files} dialog - \K{cmdPrmfile}).
\u000
@@ -698,14 +782,20 @@ Information within this section of the manual identifies installation directory
\b The \e{XTrackCAD Working} directory, which contains configuration and Check Point files.
-On MS Windows the \e{Install} directory is set when you install \e{XTrackCAD}. All data files (parameters,
+On MS Windows, the \e{Install} directory is set when you install \e{XTrackCAD}. All data files (parameters,
demos, examples) can be found in the \c{share/xtrkcad} subdirectory underneath the \e{Install} directory.
The \e{Working} directory is in your personal profile.
-On Linux the \e{Install} directory is usually \c{/usr/local/lib/xtrkcad/}, but you can change this by defining the \c{XTRKCADLIB} environment variable before starting \e{XTrackCAD}. The working directory is \c{\{HOME\}/.xtrkcad/}.
+On Linux, the \e{Install} directory is usually \c{/usr/local/lib/xtrkcad/}, but you can change this by defining the \c{XTRKCADLIB} environment variable before starting \e{XTrackCAD}. The working directory is \c{\{HOME\}/.xtrkcad/}.
+
+On Mac OSX, the \e{Install} directory is the application package, usually located in the \c{/Applications} directory.
+All the included parameters, demos and examples can be found inside the package under the \c{/Applications/xtrkcad/Contents/Resources/xtrkcad} directory.
+The \e{Working} directory is created as \c{.xtrkcad} - a hidden directory - under the active user's directory in \c{/Users}
Layout files (\c{*.xtc}) and export (\K{cmdExport}) files (\c{*.xti}) can be saved anywhere you wish, as specified in the \f{Save File} and \f{Open File} dialogs.
+In MacOS Catalina, the program has no access to certain directories - the Documents and Download directories in particular.
+
Example layouts can be found in the \c{example} directory under the \e{XTrackCAD} install directory.
\rule
@@ -724,7 +814,7 @@ Example layouts can be found in the \c{example} directory under the \e{XTrackCAD
\u000
-\b \c{xtrkcad.exe} (MS-Windows) or \c{xtrkcad} (Linux) is the \e{XTrackCAD} program.
+\b \c{xtrkcad.exe} (MS-Windows) or \c{xtrkcad} (Linux or Mac OSX) is the \e{XTrackCAD} program.
\u000
@@ -758,15 +848,15 @@ The check-point frequency is set by the \e{Check Point} field found in the \f{Pr
\u000
-\b The \c{xtrkcad.ini} (on MS-Windows) or the \c{xtrkcad.rc} (on Linux) file contains various parameter settings from each use of \e{XTrackCAD}. Most changes you make (such as scale, room size, window position) are saved in this file for the next time you use \e{XTrackCAD}.
+\b The \c{xtrkcad.ini} (on MS-Windows) or the \c{xtrkcad.rc} (on Linux or Mac OSX) file contains various parameter settings from each use of \e{XTrackCAD}. Most changes you make (such as scale, room size, window position) are saved in this file for the next time you use \e{XTrackCAD}.
\rule
\H{uninstall} \i{Removing \e{XTrackCAD}}
-Remove \e{XTrackCAD} by deleting the \e{XTrackCAD Install} directory, deleting any \c{xtrkcad.*} files from the \e{Working} directory, and deleting any \e{*.xtc} and \e{*.xti} files.
+Remove \e{XTrackCAD} by deleting the \e{XTrackCAD Install} directory, or application (on Mac OSX), deleting any \c{xtrkcad.*} files from the \e{Working} directory, and deleting any \e{*.xtc} and \e{*.xti} files.
-On MS-Windows, you can also use the \f{Uninstall} icon in the \e{XTrackCAD} program group.
+On MS-Windows only, you can also use the \f{Uninstall} icon in the \e{XTrackCAD} program group.
\rule
@@ -810,7 +900,7 @@ If you encounter an unreported bug please submit detail regarding such to the \f
\f{If you don't understand an error message, ask for help.} Don't report an error message you don't understand as a bug. There are a lot of places you can ask for help in understanding what is going on before you can claim that an error message you do not understand is a bug. (Once you've understood the error message and have a good suggestion for a way to make the error message clearer, you might consider reporting it as a \W{https://sourceforge.net/p/xtrkcad-fork/feature-requests/}{\e{XTrackCAD} Feature Request}).
-\f{Be brief, but don't leave any important details out.} This is a fine line to walk. But there are some general guidelines:
+\f{Please be brief, but don't leave any important details out.} This is a fine line to walk. But there are some general guidelines:
Remember the three basics: what you were doing, what you expected to happen, and what happened.
@@ -827,4 +917,8 @@ If you can recreate the problem the \f{Macro>Record} command can be used to reco
Suggestions for improvements are encouraged and welcome. Submit your suggestion to the \e{XTrackCAD} \f{Feature Tracker} located at the \W{https://sourceforge.net/p/xtrkcad-fork/feature-requests/}{\e{XTrackCAD} Fork Project Site}.
+\S{support} \i{User Support}
+
+The developers maintain a forum \W{https://xtrackcad.groups.io/g/main}{\e{XtrackCAD} User Forum} a Wiki at \W{http://www.xtrkcad.org/Wikka/HomePage}{\e{XTrackCAD} Wiki}
+
\rule
diff --git a/app/doc/managem.but b/app/doc/managem.but
index 9153b52..7996ef1 100644
--- a/app/doc/managem.but
+++ b/app/doc/managem.but
@@ -121,7 +121,7 @@ The \f{Import} and \f{Export} buttons read and write a \e{Comma-Separated-Value
\u000
-\dd \e{CarLength}, \e{CarWidth}, \e{CoupledLength} and \e{TruckCenter} - car dimensions in inches
+\dd \e{CarLength}, \e{CarWidth}, \e{CoupledLength}, \e{Truch Center Offset} and \e{TruckCenter} - car dimensions in inches
\u000
@@ -219,7 +219,7 @@ The middle section contains:
\u000
-\dd \f{Car Dimensions} which contain the major dimensions of the car and how the coupler is mounted on the car. The \f{Coupler Length} is measured from the edge of the car body to the pulling face of the coupler. It is equivalent to half the separation between two coupled cars.
+\dd \f{Car Dimensions} which contain the major dimensions of the car and how the coupler is mounted on the car. The \f{Coupler Length} is measured from the edge of the car body to the pulling face of the coupler. It is equivalent to half the separation between two coupled cars.
\lcont{
@@ -237,6 +237,13 @@ The middle section contains:
\dd \f{Coupled Length = Car Length + 2 * Coupler Length}
+\u000
+
+\dd The \e{Center Offset} moves the center of the two trucks from the center of the Car.
+This is a common feature of steam locomotives and means the envelope of the engine requires greater seperation between tracks on small radius curves.
+The minimum clearance needed can be seen by placing the car with the greatest distance from the center of the trucks to the corner on the inner radius and the car with the greatest distance between the trucks on the outer radius.
+See NMRA TN-7 Curved Track Centerline and Obstacle Clearance Calculation Methodology.
+
}
}
@@ -351,7 +358,7 @@ If you modify a definition from a \e{XTrackCAD} Library parameter file, the new
\S{cmdLayer} Layers Dialog
-Each object is contained in a layer. Objects which are created independently of other objects (such as straight tracks (\K{cmdStraight}) or text (\K{cmdText})) are created in the current layer. Objects which are associated with other objects (such as tracks created by the \f{Modify} (\K{cmdModify}) or \f{Join} (\K{cmdJoin}) commands) are created in the same layer as the associated object(s).
+Each object is contained in a layer - which is a custom group of objects that do not have a particular visual order, but can be treated as a set for certain commands. Objects which are created independently of other objects (such as straight tracks (\K{cmdStraight}) or text (\K{cmdText})) are created in the current layer. Objects which are associated with other objects (such as tracks created by the \f{Modify} (\K{cmdModify}) or \f{Join} (\K{cmdJoin}) commands) are created in the same layer as the associated object(s).
The \f{Layers} dialog allows you to change various attributes of each of the 99 possible \f{layers}.
@@ -363,7 +370,7 @@ The drop down list at the top of the dialog selects the \f{Layer} you are intere
The \f{Name} edit box contains the name of the \f{Layer}. This name is listed in the \f{Current Layer} drop down list on the \f{Tool-bar} (\K{mainW}). Also the \f{Name} is displayed as the balloon help for the corresponding \f{Layer Button}.
-The \f{Color} button specifies the color of tracks if \f{Color Layers} (\K{cmdDisplay}) radio button on the \f{Display} dialog is checked.
+The \f{Color} button specifies the color of tracks if either of the two \f{Color Layers} (\K{cmdDisplay}) radio buttons on the \f{Display} dialog is checked and the \f{Use Color} button for this layer is checked.
The \f{Visible} check-box controls whether the \f{Layer} is drawn on the Main (\K{mainW}) window.
@@ -371,6 +378,8 @@ The \f{Frozen} check-box indicates that tracks in that \f{Layer} can not be modi
The \f{On Map} check-box controls whether the \f{Layer} is drawn on the Map (\K{cmdMap}) window.
+The \f{Module} check-box controls whether the \f{Layer} is selected/deselected and so moved or rotated as a group - this can be used to denote a track module in a modular layout - allowing the modules to be positioned as units. Objects in a Module Layer can not be individually modified. One way of getting a modules in is to build a library with \f{Export} and then \f{Import As Module} - this creates one layer per module, names it and sets the \f{Module} check-box.
+
You cannot uncheck \f{Visible} or check \f{Frozen} for the \f{Current Layer}.
The \f{Count} field displays the number of objects in the selected Layer.
@@ -391,8 +400,8 @@ The current layer is selected by picking a value from the drop down layer list.
You can hide (or show if not visible) the different layers by pushing one of the \f{Layer Buttons} on the Tool-bar (if you have configured the tool-bar (\K{toolbarM}) to show the Layer buttons). If a layer is not visible then the corresponding layer button will be raised. The active or current layer cannot be hidden.
-The color of each layer button shows the color that will be used to draw tracks in that layer, if you select \f{Color Layers} (\K{cmdDisplay}) on the \f{Display} dialog.
-
+The color of each layer button shows the color that will be used to draw tracks or draw objects in that layer, if you have selected the \f{Color Layers} (\K{cmdDisplay}) on the \f{Display} dialog. The \f{Use Color} button allows this layer to opt in or out - which can be usefu if you want to color other layers but a layer contains pre-colored objects (like Structures or Scenery).
+
Any selected objects are unselected when the Layer is set to not visible. If a layer is not visible, you cannot select objects in the Layer. It is as if the objects do not exist until you show the layer again.
The \f{Move To Current Layer} command on Edit menu (\K{editM}) will move all selected (\K{cmdSelect}) tracks to the current Layer.
@@ -673,6 +682,8 @@ The \f{Cancel} button removes the \f{Turnout Designer} dialog.
\u000
+\b The new \i{Cornu Turnouts} allow you to build turnouts that have curved ends. The dialogs include radius information that can be set to zero for a straight end. The turnouts will be composed of simple curves and tracks and when extended the end radius will be used.
+
\b The Group (\K{cmdGroup}) command can be used to add cosmetic details to \f{Turnout} definitions.
\rule
@@ -681,7 +692,9 @@ The \f{Cancel} button removes the \f{Turnout Designer} dialog.
This command updates (or refreshes) selected turnouts, sectional tracks and structures on your layout with the current definitions from the loaded parameter files (\K{cmdPrmfile}). Each selected object that is found in a parameter file is updated with the current definition.
-If an object can not be found or if the new definition does not fit (same number of endpoints and all the endpoints have the same position and angle) then a dialog is displayed which contains suitable definitions that you can choose from. You can \f{Skip} the current object or \f{Cancel} to skip all the remaining objects.
+If an object can be found and if a new track definition fits in the same footprint, (i.e., has the same number of endpoints and all the endpoints have the same position and angle) then a dialog is displayed which contains suitable definitions that you can choose from. You can \f{Skip} the current object or \f{Cancel} to skip all the remaining objects.
+
+Otherwise the update fails and must be done manually using \f{Delete} and \f{Add}.
If an object has been updated then it is unselected, otherwise it will remain selected at the end of this command.
diff --git a/app/doc/navigation.but b/app/doc/navigation.but
index 47051f7..e0269f4 100644
--- a/app/doc/navigation.but
+++ b/app/doc/navigation.but
@@ -9,8 +9,7 @@
The Main Window includes a title bar along the top that describes the contents of the window, followed by a tool bar that contains user interface buttons. Most of the window's remaining area is used to display the layout. A footer border contains information including system messages.
-Most windows can be opened, closed, resized, minimized, and moved around the screen. The close, minimize, and zoom buttons are located on the right side of the title bar. Minimizing a window will close the contents of the window, but store a reference to it in the Task bar. Closing a window will make it disappear completely (so you may be asked to save your changes first). To move a window, click on the title bar and drag the window where you want it. To resize a window, either click the Zoom button
-
+Most windows can be opened, closed, resized, minimized, and moved around the screen. The close, minimize, and zoom buttons are located on the right side of the title bar. Minimizing a window will close the contents of the window, but store a reference to it in the Task bar. Closing a window will make it disappear completely (so you may be asked to save your changes first). To move a window, click on the title bar and drag the window where you want it.
\H{mainW} \i{Main Window Overview}
@@ -18,7 +17,7 @@ Most windows can be opened, closed, resized, minimized, and moved around the scr
\u000
-\dd \G{png.d/main1.png}
+\dd \G{png.d/maintagged.png}
\u000
@@ -87,6 +86,17 @@ Most windows can be opened, closed, resized, minimized, and moved around the scr
\u000
\dd Manipulate track and other objects
+The toolbar buttons size can be adjusted using a User Preference in the .ini or .rc file
+(on Windows or Mac/Linux) in the xtrkcad directory.
+If running Linux or Mac
+a line \c{"Preference.LargeIcons: 1.5"} can be added. The scale value can be from 1.0 to 2.0 only.
+The corresponding configuration Windows would be
+
+\c [Preference]
+\c LargeIcons=1.5
+
+\e{Note} The configuration file uses the language specific definitions for the decimal separator.
+Eg. in Germany, where the comma is used, the correct value would be\c{LargeIcons=1,5}.
\u000
@@ -110,7 +120,34 @@ Most windows can be opened, closed, resized, minimized, and moved around the scr
\u000
-\dd The \f{Main Canvas} is where all tracks and objects are drawn.
+\dd The \f{Main Canvas} is where all tracks and objects (and optional background image) are drawn.
+
+\u000
+
+\dd The \f{Background Image} is drawn on the main canvas if specified in the \K{cmdLayout} menu.
+
+\u000
+
+\dd The center of the \f{Main Canvas} can be moved (Panned) using the;
+
+\lcont{
+
+\b ARROW Keys
+
+\b Left-Click and drag in \K{cmdZoom}
+
+\b "@" key in \f{Select}, \f{Modify} and \f{Pan/Zoom}.
+
+\b Mouse Wheel - adding \e{Shift} key or the \e{Mouse Middle Button} will Pan the screen. adding \e{Ctrl} as well makes up Pan left and down Pan right.
+
+\b Horizontal Mouse Wheel - adding \e{Shift} or the \e{Mouse Middle Button} will Pan the screen left and Right (if available)
+
+\b Scroll Left and Right - if the scroll left and right guestures are mapped to the trackpad by the operating system, with \e{Shift} depressed the screen will Pan.
+
+}
+
+\dd The \f{Main Canvas} can be panned so that the area beyond the room boundaries is shown (the \f{grey} area). The \f{Constrain Drawing Area to Room Boundaries} option on the \f{Display} (\K{cmdDisplay}) dialog under the \f{Options} (\K{optionM}) menu forces the \f{Main Canvas} stop panning once the room boundary is reached.
+Holding the \e{Control} key while panning will invert the value of this setting.
\u000
@@ -124,12 +161,18 @@ Most windows can be opened, closed, resized, minimized, and moved around the scr
\b Mouse Wheel
-\b PAGE UP and PAGE DOWN keys.
+\b PAGE UP and PAGE DOWN keys
+
+\b \f{Pan/Zoom} \K{cmdPan} button on the \f{Tool-bar}
-\f{Note:} If The scale 1::1 is reached, "Macro Zoom" mode can be entered using CTRL+PageDown - with repeated presses a scale of 10::1 is possible.
+\f{Note:} If The scale 1:1 is reached, "Macro Zoom" mode can be entered using CTRL+PageDown - with repeated presses a scale of 10::1 is possible.
}
+\dd When \f{Zooming}, the Main Canvas will retain the center of the display if
+\f{Constrain Drawing Area to Room Boundaries} is not set.
+Otherwise, as much of the room as possible is displayed, and any \f{grey} area will be to the right and above the room.
+
\u000
\dd Tracks will be drawn with two lines and ties if you zoom in. When the drawing scale is 1:1 a dashed centerline is also drawn for each track.
@@ -140,6 +183,10 @@ Most windows can be opened, closed, resized, minimized, and moved around the scr
\u000
+\dd In many commands, the result that will result from clicking the mouse is shown by \e{anchors} which highlight the track object or feature in blue that will be affected as the mouse is dragged over the canvas and becomes close enough to select it.
+
+\u000
+
\dt \e{Map Window}
\dd \G{png.d/map.png}
@@ -241,6 +288,10 @@ Instead of using the menus or the buttons on the \f{Tool-bar} (\K{mainW}), most
\u000
+\dd The \c{F1} key opens the Help page for the currently selected command. \c{Shift+F1} opens the Contents Help Page.
+
+\u000
+
\dd The \c{PAGE UP} and \c{PAGE DOWN} keys will zoom out or zoom in.
\u000
@@ -640,7 +691,7 @@ Note Dialog
}
-\b Pop-up menu of Hot Bar contents - \e{Right-Click}
+\b Pop-up menu of Hot Bar categories - \e{Right-Click}
\u000
@@ -815,47 +866,75 @@ Note Dialog
\H{cmdAcclKeys} \i{Mouse Actions}
-\dt \e{XTrackCAD} uses the left and right mouse buttons when manipulating tracks and other objects on the layout. Their meaning depends on the particular command but in general:
+\e{XTrackCAD} uses the left and right mouse buttons when manipulating tracks and other objects on the layout. Their meaning depends on the particular command:
-\u00
+\e{Select Command}
-\dd \e{Left-Click} - selects an object or an endpoint.
+The \e{Select} command actions are affected by the mode selected in \f{Options->Command->Select}.
+Note - Objects in a Module Layer are selected and deselected as a group.
-\u00
+\dt \e{Left-Click}
+
+\dd Single Item Mode -> Selects one object at a time, deselects other objects.
+Add Item Mode -> Adds unselected objects, deselects if the object is already selected.
+If the click is on an area without objects and \f{SelectZero} is set, all objects are deselected.
-\dd \e{Left+Drag} - modifies an object, such as extending it.
+\dt \e{Shift-Left-Click}
-\u00
+\dd Selects all connected tracks from the one clicked up to the next selected item in each direction.
-\dd \e{Right-Click} - displays a pop-up menu of commands.
+\dt \e{Ctrl+Left-Click}
-\u00
+\dd Single Item Mode -> Adds an object to the selection, deselects if the object is already selected.
+Add Item Mode -> Selects just this item and deselects other objects.
+If the click is on an area without objects and \f{SelectZero} is set, all objects are deselected.
-\dd \e{Shift+Right-Click} - displays a pop-up menu of command options (for some commands).
+\dt \e{Double-Left-Click}
-\u00
+\dd Opens Modify for Cornu and Draw Objects other than Text, Activates Link and Document Notes, otherwise opens Describe.
-\dd \e{Rotate Wheel} - zooms drawing area in and out.
+\dt \e{Left+Drag}
-\u000
+\dd Single Item Mode -> Selects all objects in an rubber-banded area and deselects all others.
+Add Item Mode -> Adds items in the rubber-banded area.
-\u000
+\dt \e{Shift+Left-Drag}
-\dt When Moving and Rotating ( Placing Turnouts and Structures, Moving the Print and Snap Grids, ... ):
+\dd Moves selected objects if in a selected area, if off selected objects, like Left-Drag.
-\u00
+\dt \e{Ctrl+Left-Drag}
-\dd \e{(Left+Drag)} - moves the objects or grid.
+\dd Rotates selected objects if in a selected area, if off selected objects, like Left-Drag.
-\u00
+\dt \e{Right-Click}
-\dd \e{(Right+Drag)} - rotates the objects or grid about the pivot point, which is
-the point you started the drag operation.
+\dd Displays a pop-up menu of context commands (in Select, Move, Modify and Rotate commands). If some track is selected, the menu has operations to perform on it, if not, it will have a command context menu.
-Some commands use the \c{Shift} or \c{Ctrl} key to modify the meaning of button presses.
+\dt \e{Shift+Right-Click}
-\rule
+\dd Displays a pop-up menu of commands. Displays the other context menu than Right-Click.
+
+\dt \e{Right+Drag}
+
+\dd Deselects all objects in an rubber-banded area from the current set.
+
+\dt \e{Rotate Wheel}
+
+\dd Zooms drawing area in and out. Modern computers with Trackpads often map this guesture to two-finger drag.
+
+\e{When Moving and Rotating} ( Placing Turnouts and Structures, Moving the Print and Snap Grids, ... ):
+
+\dt \e{(Shift+Left+Drag)}
+\dd Moves the objects or grid.
+
+\dt \e{(Ctrl+Left+Drag)}
+
+\dd Rotates the objects or grid about the pivot point, which is the point you started the drag operation.
+
+Some other commands use the \c{Shift} or \c{Ctrl} key to modify the meaning of button presses.
+
+\rule
\S{mouseBcmd} Context Sensitive Menus
@@ -916,7 +995,7 @@ The Shortcut key for each command is listed after the command name.
\u000
-\dt Elevation Command (\K{cmdElev}) - \e{Ctrl+Shift+E}
+\dt Elevation Command (\K{cmdElevation}) - \e{Ctrl+Shift+E}
\dd Choose endpoint - \e{Left-Click}
@@ -1072,25 +1151,12 @@ The Shortcut key for each command is listed after the command name.
}
-\dd Unselect all objects within the highlighted area - \e{Right+Drag}
-
-\dd Rotate selected objects - \e{Shift+Right+Drag}
-
-\lcont{
-
-\b in increments of 15\u00B0 - \e{Ctrl+Shift+Right+Drag}
-
-}
-
-\dd Select (or unselect) the object - \e{Left-Click}
-\dd Select all objects
+\dd Rotate selected objects - \e{Ctrl+Left-Drag}
\lcont{
-\b connected to object - \e{Shift+Left+Click}
-
-\b within the highlighted area - \e{Left+Drag}
+\b in increments of 15\u00B0 - \e{Ctrl+Shift+Left+Drag}
}
@@ -1176,4 +1242,4 @@ The Shortcut key for each command is listed after the command name.
\dd Suppress auto-adjustment positioning when placing Turnouts - \e{Shift+Left+Drag}
-\rule \ No newline at end of file
+\rule
diff --git a/app/doc/optionm.but b/app/doc/optionm.but
index 0c2adfb..8876d96 100644
--- a/app/doc/optionm.but
+++ b/app/doc/optionm.but
@@ -27,7 +27,7 @@ The \f{Options Menu} shows commands to change configuration options.
\u000
-\dd \f{Fonts} - Displays the font selection (\K{fontSelW}) dialog which selects the font used by the text (\K{cmdText}) command. This command is only available on UNIX based systems.
+\dd \f{Fonts} - Displays the font selection (\K{fontSelW}) dialog which selects the font used by the text (\K{cmdText}) command. This command is only available on UNIX based systems.
\u000
@@ -101,15 +101,19 @@ The \f{Command Option} dialog is invoked from the Options (\K{optionM}) menu
The \f{Command Option} dialog contains items which control the behavior of some commands.
-\dd \f{Draw Moving Tracks} - how to draw tracks during move and rotate operations. See \K{cmdSelect} and \K{cmdMove} for additional detail.
+\dd \f{Default Command} - selects the \f{Properties} (\K{cmdDescribe}) or \f{Select} (\K{cmdSelect}) as the default command which is invoked when any other command (if not \f{Sticky} (\K{cmdSticky})) is canceled or completed.
\u000
-\dd \f{Default Command} - selects the \f{Properties} (\K{cmdDescribe}) or \f{Select} (\K{cmdSelect}) as the default command which is invoked when any other command (if not \f{Sticky} (\K{cmdSticky})) is canceled or completed.
+\dd \e{Right-Click} - will either display a pop-up menu of available commands or command-specific options depending on whether the \e{Shift} key is being held down or not. This option allows you to choose which operation occurs.
\u000
-\dd \e{Right-Click} - will either display a pop-up menu of available commands or command-specific options depending on whether the \e{Shift} key is being held down or not. This option allows you to choose which operation occurs.
+\dd \e{Select-Mode} - will either (a) only select the current item unless Ctrl is added or (b) will add the current item to the selection unless Ctrl is added in which case it will only select this item.
+
+\u000
+
+\dd \e{Select-Zero} - if selected will perform \f{Deselect All} if the selection is not on an object.
\rule
@@ -130,7 +134,18 @@ The \f{Display} dialog contains items which control the display of objects on th
\u000
-\dd \f{Color Layers} - when set, tracks and/or non-tracks (lines, table edges and structures) are drawn with color of the layer (\K{cmdLayer}) they belong to.
+\dd \f{Color Tracks} - when set to layers, tracks are drawn with color of the layer (\K{cmdLayer}) they belong to and not the normal track color.
+This can be disabled in the Layer dialog for each Layer by unchecking the \f{Use Color} checkbox.
+
+\u000
+
+\dd \f{Color Draws} - when set to layers, non-tracks (lines, table edges and structures) are drawn with color of the layer (\K{cmdLayer}) they belong to rather than based on thier own object setting.
+This can be disabled in the Layer dialog for each Layer by unchecking the \f{Use Color} checkbox.
+
+\u000
+
+\dd \f{Constrain Drawing Area to Room Boundaries} - when Zooming and moving the Main Canvas (\K{mainW}) may show areas beyond the boundaries of the room.
+Setting this option constrains the Main Canvas to minimize these areas (the \f{grey} area).
\u000
@@ -142,7 +157,7 @@ The \f{Display} dialog contains items which control the display of objects on th
\u000
-\dd \f{Draw Ties} - how to draw ties under the rails when the drawing Scale is smaller than half of the \f{Two Rail Scale}.
+\dd \f{Draw Ties} - how to draw ties under the rails when the drawing Scale is smaller than half of the \f{Two Rail Scale}. Note that \K{cmdTies} can be used to hide ties for selected tracks.
\u000
@@ -259,7 +274,7 @@ To draw an cornu easement see \k{joinCornu}, to Modify it afterwards see \k{chgC
\S2{EasementsTraditional} \i{Easements with Fixed Sharpness}
-The values \f{R}, \f{X} and \f{L} are read-only. They are set using the radio buttons or the \f{Value} field which can be set to 0 (No Easment) or between 0.21 (sharpest Easement) 100 (broadest Easment).
+The values \f{R}, \f{X} and \f{L} are read-only. They are set using the radio buttons or the \f{Value} field which can be set to 0 (No Easment) or between 0.21 (sharpest Easement) 100 (broadest Easment).
These values indicate the worst case of joining a straight track with a curve of radius \f{R}. The two tracks are separated by the offset \f{X} while the easement curve extends for \f{L/2} inches or centimeters to each side of the endpoints.
@@ -290,7 +305,7 @@ The following diagrams illustrates the \f{R}, \f{X} and \f{L} values and the res
\G{png.d/easeex2.png}
-If curves with a radius larger than \f{R} or two curves (that bend in the same direction) are being connecting then the easement curve will be shorter and the offset smaller. If the computed offset is small then no easement is generated.
+If curves with a radius larger than \f{R} or two curves (that bend in the same direction) are being connecting then the easement curve will be shorter and the offset smaller. If the computed offset is small then no easement is generated.
A curved track that bends in one direction and then bends in the opposite direction is an \e{S-curve}. This will generate the worst case easement which is two easement curves placed end to end.
@@ -349,8 +364,32 @@ The \f{Layout Options} dialog, displayed by the Options (\K{optionM}) or the Fil
\dd \f{Minimum Track Radius} - Specifies minimum track radius (in inches or centimeters). Curved tracks with a smaller radius are considered exceptional and drawn in the exception (\K{cmdRgbcolor}) color.
-\rule
+\u000
+
+\dd \f{Background File Name} - The last 40 characters of the full file pathname for the image used for a temporary background behind all the drawn objects. It is set using the \f{Browse} and reset with the \f{Clear} buttons.
+It is also cleared along with all the other background values after a \f{Open} or \f{New} command.
+The file is initally specified to be in the local file system. In order to send it along with the layout, use \f{Save As} command and specify the \i{Archive} Archive format (*.xtce).
+This will create a single zipped package file containing the layout and the image file which can be sent and will open on a different system.
+If this has been done, after \f{Open} of the archive, the image file path will point into the extracted archive file directory.
+It can be changed to a new local file and the next \f{Save} will rebuild the package using the new image file instead of the old one.
+
+\u000
+\dd \f{Background Pos X, Y} - The offset of the bottom left corner of the background image from the origin (in inches or centimeters) after rotation.
+
+\u000
+
+\dd \f{Background Size} - The model size (in inches or cm) to scale the base of the background image to (measured from bottom left to bottom right as displayed after any rotation has been applied). Note - A value of 0.0 means that no scaling is applied and the image is shown at its current size in pixels regardless of scale or zoom.
+
+\u000
+
+\dd \f{Background Screen} - The amount of screening (from 0 to 100%) to apply to the background image. Screening allows objects drawn over the image to be seen more clearly. 0 means no screening, while 100% means noting will be shown.
+
+\u000
+
+\dd \f{Background Angle} - The rotation angle to apply to the background image (in degrees) about its center before it is moved so that its bottom left corner is offset by the \f{Background Pos} setting.
+
+\rule
\S{cmdPref} Preferences Dialog
@@ -364,11 +403,19 @@ This dialog controls some parameters which likely will not be changed frequently
\u000
+\dd \f{AutoSave} \i{AutoSave} - specifies the number of Check Points taken before an AutoSave. The same number of checkpoints are retained in a circular archive set in the (\K{workDir}) named for the layout file. Setting this value to 0 disables AutoSave.
+
+\u000
+
\dd \f{Balloon Help} - disables the display of \f{Balloon Help} (\K{windowTerms}) which usually is shown when the cursor is placed over a control.
\u000
-\dd \f{Check Point} - specifies the Check Point frequency; the number of modifications made to the layout since the last save. The layout is automatically saved to the Check Point file (\K{workDir}) when the Check Point frequency is reached. Setting this value to 0 disables use of the Checkpoint file.
+\dd \f{Show FlexTrack} - disables the display or \f{FlexTrack} (\K{generalTerms}) which is shown on the left of the Toolbar.
+
+\u000
+
+\dd \f{Check Point} \i{AutoSave} - specifies the Check Point frequency; the number of modifications made to the layout since the last save. The layout is automatically saved to the Check Point file (\K{workDir}) when the Check Point frequency is reached. Setting this value to 0 disables use of the Checkpoint file \e{and AutoSave}. Upon restart, if the program was not saved normally, the user will be prompted to see if they want to resume at the last checkpoint.
\u000
diff --git a/app/doc/png.d/bcornu.png b/app/doc/png.d/bcornu.png
new file mode 100644
index 0000000..6844a84
--- /dev/null
+++ b/app/doc/png.d/bcornu.png
Binary files differ
diff --git a/app/doc/png.d/bfile.png b/app/doc/png.d/bfile.png
new file mode 100644
index 0000000..895f376
--- /dev/null
+++ b/app/doc/png.d/bfile.png
Binary files differ
diff --git a/app/doc/png.d/bjoin.png b/app/doc/png.d/bjoin.png
index 57e0d36..673793e 100644
--- a/app/doc/png.d/bjoin.png
+++ b/app/doc/png.d/bjoin.png
Binary files differ
diff --git a/app/doc/png.d/bjoinline.png b/app/doc/png.d/bjoinline.png
new file mode 100644
index 0000000..0d88a58
--- /dev/null
+++ b/app/doc/png.d/bjoinline.png
Binary files differ
diff --git a/app/doc/png.d/blayer.png b/app/doc/png.d/blayer.png
index 1712726..8b2fe72 100644
--- a/app/doc/png.d/blayer.png
+++ b/app/doc/png.d/blayer.png
Binary files differ
diff --git a/app/doc/png.d/blink.png b/app/doc/png.d/blink.png
new file mode 100644
index 0000000..4dfbbe7
--- /dev/null
+++ b/app/doc/png.d/blink.png
Binary files differ
diff --git a/app/doc/png.d/bnote.png b/app/doc/png.d/bnote.png
index d48173b..da70589 100644
--- a/app/doc/png.d/bnote.png
+++ b/app/doc/png.d/bnote.png
Binary files differ
diff --git a/app/doc/png.d/bparalle.png b/app/doc/png.d/bparalle.png
deleted file mode 100644
index 5634f3f..0000000
--- a/app/doc/png.d/bparalle.png
+++ /dev/null
Binary files differ
diff --git a/app/doc/png.d/bparallel.png b/app/doc/png.d/bparallel.png
new file mode 100644
index 0000000..5f92b6d
--- /dev/null
+++ b/app/doc/png.d/bparallel.png
Binary files differ
diff --git a/app/doc/png.d/bparalleline.png b/app/doc/png.d/bparalleline.png
new file mode 100644
index 0000000..43a6223
--- /dev/null
+++ b/app/doc/png.d/bparalleline.png
Binary files differ
diff --git a/app/doc/png.d/cmdopt.png b/app/doc/png.d/cmdopt.png
index 67503d2..b721bbc 100644
--- a/app/doc/png.d/cmdopt.png
+++ b/app/doc/png.d/cmdopt.png
Binary files differ
diff --git a/app/doc/png.d/convertfrom.png b/app/doc/png.d/convertfrom.png
new file mode 100644
index 0000000..9c16665
--- /dev/null
+++ b/app/doc/png.d/convertfrom.png
Binary files differ
diff --git a/app/doc/png.d/convertto.png b/app/doc/png.d/convertto.png
new file mode 100644
index 0000000..9c16665
--- /dev/null
+++ b/app/doc/png.d/convertto.png
Binary files differ
diff --git a/app/doc/png.d/cornuendanchor.png b/app/doc/png.d/cornuendanchor.png
new file mode 100644
index 0000000..38eaea6
--- /dev/null
+++ b/app/doc/png.d/cornuendanchor.png
Binary files differ
diff --git a/app/doc/png.d/dcprofile.png b/app/doc/png.d/dcprofile.png
index 359e64f..7d8d25a 100644
--- a/app/doc/png.d/dcprofile.png
+++ b/app/doc/png.d/dcprofile.png
Binary files differ
diff --git a/app/doc/png.d/displayopt.png b/app/doc/png.d/displayopt.png
index 3124e2b..be769a1 100644
--- a/app/doc/png.d/displayopt.png
+++ b/app/doc/png.d/displayopt.png
Binary files differ
diff --git a/app/doc/png.d/dprmfile.png b/app/doc/png.d/dprmfile.png
index 7e10970..7733a1c 100644
--- a/app/doc/png.d/dprmfile.png
+++ b/app/doc/png.d/dprmfile.png
Binary files differ
diff --git a/app/doc/png.d/greendot.png b/app/doc/png.d/greendot.png
new file mode 100644
index 0000000..c89c38b
--- /dev/null
+++ b/app/doc/png.d/greendot.png
Binary files differ
diff --git a/app/doc/png.d/greenstar.png b/app/doc/png.d/greenstar.png
new file mode 100644
index 0000000..e5f0f10
--- /dev/null
+++ b/app/doc/png.d/greenstar.png
Binary files differ
diff --git a/app/doc/png.d/greydot.png b/app/doc/png.d/greydot.png
new file mode 100644
index 0000000..f57745c
--- /dev/null
+++ b/app/doc/png.d/greydot.png
Binary files differ
diff --git a/app/doc/png.d/greystar.png b/app/doc/png.d/greystar.png
new file mode 100644
index 0000000..7398038
--- /dev/null
+++ b/app/doc/png.d/greystar.png
Binary files differ
diff --git a/app/doc/png.d/iconfile.png b/app/doc/png.d/iconfile.png
new file mode 100644
index 0000000..d5ed09c
--- /dev/null
+++ b/app/doc/png.d/iconfile.png
Binary files differ
diff --git a/app/doc/png.d/iconlink.PNG b/app/doc/png.d/iconlink.PNG
new file mode 100644
index 0000000..0f189e2
--- /dev/null
+++ b/app/doc/png.d/iconlink.PNG
Binary files differ
diff --git a/app/doc/png.d/iconnote.png b/app/doc/png.d/iconnote.png
index b4d3a7f..d5772d2 100644
--- a/app/doc/png.d/iconnote.png
+++ b/app/doc/png.d/iconnote.png
Binary files differ
diff --git a/app/doc/png.d/layout.png b/app/doc/png.d/layout.png
index cbcc42b..d5607da 100644
--- a/app/doc/png.d/layout.png
+++ b/app/doc/png.d/layout.png
Binary files differ
diff --git a/app/doc/png.d/madd.png b/app/doc/png.d/madd.png
index f689ebe..e8a664f 100644
--- a/app/doc/png.d/madd.png
+++ b/app/doc/png.d/madd.png
Binary files differ
diff --git a/app/doc/png.d/main.png b/app/doc/png.d/main.png
index fc70899..e40f0df 100644
--- a/app/doc/png.d/main.png
+++ b/app/doc/png.d/main.png
Binary files differ
diff --git a/app/doc/png.d/maintagged.png b/app/doc/png.d/maintagged.png
new file mode 100644
index 0000000..814757a
--- /dev/null
+++ b/app/doc/png.d/maintagged.png
Binary files differ
diff --git a/app/doc/png.d/mmovedraw.png b/app/doc/png.d/mmovedraw.png
deleted file mode 100644
index 579735d..0000000
--- a/app/doc/png.d/mmovedraw.png
+++ /dev/null
Binary files differ
diff --git a/app/doc/png.d/mnote.png b/app/doc/png.d/mnote.png
new file mode 100644
index 0000000..6aa4acf
--- /dev/null
+++ b/app/doc/png.d/mnote.png
Binary files differ
diff --git a/app/doc/png.d/notefile.png b/app/doc/png.d/notefile.png
new file mode 100644
index 0000000..699efad
--- /dev/null
+++ b/app/doc/png.d/notefile.png
Binary files differ
diff --git a/app/doc/png.d/notelink.png b/app/doc/png.d/notelink.png
new file mode 100644
index 0000000..a3863fa
--- /dev/null
+++ b/app/doc/png.d/notelink.png
Binary files differ
diff --git a/app/doc/png.d/notetext.png b/app/doc/png.d/notetext.png
new file mode 100644
index 0000000..af5b353
--- /dev/null
+++ b/app/doc/png.d/notetext.png
Binary files differ
diff --git a/app/doc/png.d/paramsearch.png b/app/doc/png.d/paramsearch.png
new file mode 100644
index 0000000..ec6b2b8
--- /dev/null
+++ b/app/doc/png.d/paramsearch.png
Binary files differ
diff --git a/app/doc/png.d/print.png b/app/doc/png.d/print.png
index 368e272..e8a6863 100644
--- a/app/doc/png.d/print.png
+++ b/app/doc/png.d/print.png
Binary files differ
diff --git a/app/doc/png.d/printmargin.png b/app/doc/png.d/printmargin.png
new file mode 100644
index 0000000..5fee30d
--- /dev/null
+++ b/app/doc/png.d/printmargin.png
Binary files differ
diff --git a/app/doc/png.d/reddot.png b/app/doc/png.d/reddot.png
new file mode 100644
index 0000000..2de371c
--- /dev/null
+++ b/app/doc/png.d/reddot.png
Binary files differ
diff --git a/app/doc/png.d/redstar.png b/app/doc/png.d/redstar.png
new file mode 100644
index 0000000..f4309e7
--- /dev/null
+++ b/app/doc/png.d/redstar.png
Binary files differ
diff --git a/app/doc/png.d/satusbarparallel.png b/app/doc/png.d/satusbarparallel.png
deleted file mode 100644
index 50bd6ab..0000000
--- a/app/doc/png.d/satusbarparallel.png
+++ /dev/null
Binary files differ
diff --git a/app/doc/png.d/statusbarparallel.png b/app/doc/png.d/statusbarparallel.png
new file mode 100644
index 0000000..0ab73a5
--- /dev/null
+++ b/app/doc/png.d/statusbarparallel.png
Binary files differ
diff --git a/app/doc/png.d/yellowdot.png b/app/doc/png.d/yellowdot.png
new file mode 100644
index 0000000..107165b
--- /dev/null
+++ b/app/doc/png.d/yellowdot.png
Binary files differ
diff --git a/app/doc/png.d/yellowstar.png b/app/doc/png.d/yellowstar.png
new file mode 100644
index 0000000..8ee0574
--- /dev/null
+++ b/app/doc/png.d/yellowstar.png
Binary files differ
diff --git a/app/doc/statusbar.but b/app/doc/statusbar.but
index 6390722..67f0991 100644
--- a/app/doc/statusbar.but
+++ b/app/doc/statusbar.but
@@ -6,9 +6,9 @@
\H{cmdStatusbar} Status Bar
-The \e{Status Bar} contains:
+The \e{Status Bar} contains fields that can be modified depending on command:
-\dd The Line Width and Color for \e{Straight Line}, \e{Curved Line}, \e{Circle}, \e{Box} or \e{Poly Line} objects. The Line Width is specified in pixels for the current Drawing Scale. Zooming (\K{viewM}) in or out causes the lines to be drawn wider or narrower.
+\dd The Line Width and Color for \e{Straight Line}, \e{Curved Line}, \e{Circle}, \e{Polygon}, \e{Box} or \e{PolyLine} objects. The Line Width is specified in pixels for the current Drawing Scale. Zooming (\K{viewM}) in or out causes the lines to be drawn wider or narrower.
\u000
@@ -22,9 +22,16 @@ The \e{Status Bar} contains:
\dd The type, size and orientation of lumber used for \e{Bench-work} (regular rectangular, L-Girder or T-Girder).
+\u000
+
+\dd The seperation and radius factor for Parallel commands
+
+\u000
+
+\dd The diameter of a Turntable
\u000
-If the \e{Ctrl} key is held down while creating or modifying lines and shapes then the cursor will be attracted to other objects.
+\dd After and add or during a Modify of a Draw object or segment, length, radius and/or relative angles are shown in modifiable fields. These will change the dimensions of the last object when \f{Enter} or \f{Tab} is pressed or the cursor leaves the entry field.
\rule \ No newline at end of file
diff --git a/app/doc/upgrade.but b/app/doc/upgrade.but
index efd0908..7540c9c 100644
--- a/app/doc/upgrade.but
+++ b/app/doc/upgrade.but
@@ -10,6 +10,12 @@ This section contains helpful information regarding program changes and the effe
\rule
+\H{v5} Version 5.x
+
+Version 5.x.x of XTrackCAD introduced many enhancements an additions including Layout Control Objects, Cornu Tracks and Bezier Tracks and Lines. It is upward compatible from earlier versions but if the new objects are included in layouts, the files will not be readable by earlier versions.
+
+Users should take a backup of thier Layout files if they will want to use the previous level of code before opening them.
+
\H{cmdUpdatetitle} Version 2.x
\f{Updated Titles}
@@ -34,39 +40,6 @@ Not updating the titles prevents the customization of the way titles are present
\rule
-
-\H{v4.0.x_revisions} Version 4.0.x
-
-\f{Check-point Files}
-
-Version 4 of \e{XTrkCad} introduces a new way of handling check-point files. This will allow resuming your work after a system crash much easier than before.
-
-If you start \e{XTrkCad} V.4.0.x the first time after an upgrade from a earlier version, a pop-up with the question: "Program was not terminated properly. Do you want to resume working on the
-previous track plan?"
-
-Select "Ignore" only if you're sure that the work from your last session has been correctly saved. If uncertain or restarting after an earlier failure select "Resume".
-
-\u000
-
-\f{Help System}
-
-The built in help system has been converted to a much more flexible and widely used HTML format. With many new graphics and extensively rewritten text the help information is now up-to-date with recent development.
-
-\f{Layer Colour Settings}
-
-Your personal layer color settings are now stored in your preferences. This allows you to apply the same settings to other layouts you design.
-
-\f{Parameter Files Updated}
-
-Thanks to Ralph Boyd, Dwayne Ward, Casey Sterbenz and others, many new and updated parameter files were added to this release.
-
-\f{Wheel mouse}
-
-The wheel on a wheel mouse can now be used to zoom in and out on a layout design.
-
-\rule
-
-
\H{v4.0.3_revisions} Version 4.0.3
\f{Internationalization}
@@ -163,4 +136,37 @@ With release of this version of \e{XTrackCAD} there's been a subtle change in th
Why was the name changed? This release gives \e{XTrackCAD} developers an opportunity to included a much sought after feature; Internationalization (Through i18n). On the surface this doesn't sound that big however having the ability to internationalize or localize the product has great advantages for all users. Not only is there great potential for the application to become available to a larger audience, our hope it that the developer pool will expand which should result in more features being added to the application.
-\rule \ No newline at end of file
+\rule
+
+\H{v4.0.x_revisions} Version 4.0.x
+
+\f{Check-point Files}
+
+Version 4 of \e{XTrkCad} introduces a new way of handling check-point files. This will allow resuming your work after a system crash much easier than before.
+
+If you start \e{XTrkCad} V.4.0.x the first time after an upgrade from a earlier version, a pop-up with the question: "Program was not terminated properly. Do you want to resume working on the
+previous track plan?"
+
+Select "Ignore" only if you're sure that the work from your last session has been correctly saved. If uncertain or restarting after an earlier failure select "Resume".
+
+\u000
+
+\f{Help System}
+
+The built in help system has been converted to a much more flexible and widely used HTML format. With many new graphics and extensively rewritten text the help information is now up-to-date with recent development.
+
+\f{Layer Colour Settings}
+
+Your personal layer color settings are now stored in your preferences. This allows you to apply the same settings to other layouts you design.
+
+\f{Parameter Files Updated}
+
+Thanks to Ralph Boyd, Dwayne Ward, Casey Sterbenz and others, many new and updated parameter files were added to this release.
+
+\f{Wheel mouse}
+
+The wheel on a wheel mouse can now be used to zoom in and out on a layout design.
+
+\rule
+
+
diff --git a/app/doc/view_winm.but b/app/doc/view_winm.but
index 01f8a8c..cb115a9 100644
--- a/app/doc/view_winm.but
+++ b/app/doc/view_winm.but
@@ -30,6 +30,10 @@ The \f{View Menu} shows commands affecting the display of the \f{Main Canvas} (\
\u000
+\dd \f{Magnetic Snap On/Off} - Toggles Magnets for Add Operations on and off. The magnets make tracks auto-align and shapes touch when the cursor or object is close. They can be defeated on each operation by holding down \e{Alt}. If the Magnets are off, holding down \e{Alt} will enable them.
+
+\u000
+
\dd \G{png.d/bmap.png} \f{ Show/Hide Map} - Toggles display of the \f{Map Window} on and off.
\u000
@@ -111,21 +115,29 @@ Command button groups displayed on the \f{Tool-bar} are selected using the Tool-
\G{png.d/bgzoom.png}
-The \f{Zoom In} and \f{Zoom Out} actions can also be accessed using buttons on the Tool Bar. The Mouse Wheel, PAGE DOWN and PAGE UP keys can also be used to zoom in and out.
+The \f{Zoom In} and \f{Zoom Out} actions can also be accessed using buttons on the Tool Bar or usig the \f{Pan/Zoom} Mode button. The Mouse Wheel, PAGE DOWN and PAGE UP keys can also be used to zoom in and out.
Holding down the Shift key while clicking the \f{Zoom In} or \f{Zoom Out} buttons sets the Drawing Scale to a \e{Programmed Zoom} value.
-\dd \e{\i{Programmed Zoom}}
+\dd \e{\i{Zoom/Pan Shortcut Keys}}
\lcont{
\u000
-\b The \e{Programmed Zoom} value for the \f{Zoom In} button is set to the current Drawing Scale by holding down the Shift and Ctrl keys while clicking on the \f{Zoom In} button.
+\b Keys '1'-'9' set the zoom to between 1::1 and 1::9.
+
+\u000
+
+\b Key 'e' sets the zoom to a value that allows all the room to be shown and moves the origin of bottom left of the window to be 0,0
\u000
-\b The \e{Programmed Zoom} value for the \f{Zoom Out} button is set to the current Drawing Scale by holding down the Shift and Ctrl keys while clicking on the \f{Zoom Out} button.
+\b Key '0' or 'o' keeps the zoom as is, but moves the origin of the bottom left of the window to 0,0
+
+\u000
+
+\b Key 'c' moves the center of the window to the cursor position
}
@@ -133,6 +145,11 @@ Normally a zoom in more of more than 1:1 is not possible, however if the Ctrl ke
Pressing the middle Zoom button on the Tool Bar pop-ups a list of Zoom factors that can be select from.
+\u000
+
+\dd The Pan function can be accessed using the Mouse Wheel with \e{Shift} of the \e{Mouse Middle Button}. Adding \e{Ctrl} as well as \e{Shift} chnages Up to Left and Down to Right.
+Pan Left and Right can also be driven by the Horizontal Mouse Wheel (if available) or the Scroll Left/Right Guestures (if mapped by the Operating System).
+
\rule
diff --git a/app/dynstring/dynstring.c b/app/dynstring/dynstring.c
index eb7b2c5..fd50a0b 100644
--- a/app/dynstring/dynstring.c
+++ b/app/dynstring/dynstring.c
@@ -115,6 +115,23 @@ void DynStringClear(DynString *s)
DynStringRealloc(s);
}
+
+/**
+* Clear the dynamic string contents without changing memory allocation.
+*
+* \param s IN the dynamic string
+*/
+
+void DynStringReset(DynString *s)
+{
+ /* Not a string? */
+ if (isnas(s))
+ {
+ return;
+ }
+ s->size = 0;
+}
+
/**
* Resize the string for a minimum number of bytes. In order to optimize memory usage the
* actually allocated block of memory can be larger than the requested size.
diff --git a/app/dynstring/dynstring.h b/app/dynstring/dynstring.h
index 2a18409..0a5b972 100644
--- a/app/dynstring/dynstring.h
+++ b/app/dynstring/dynstring.h
@@ -1,3 +1,4 @@
+
/** \file dynstring.h
* Definitions and prototypes for variable length strings
*/
@@ -18,47 +19,47 @@
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef HAVE_DYNSTRING_H
-#define HAVE_DYNSTRING_H
-
-#include <stddef.h>
-
-struct DynString
-{
- char *s;
- size_t size; // length of the string
- size_t b_size; // length of the buffer containing the string
-};
-typedef struct DynString DynString;
-
-#define NaS {NULL, 0, 0}
-#define isnas(S) (!(S)->s)
-
-// define highest bit depending on 32 or 64 bit compile
-
-#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
- #define STR_FREEABLE (1ULL << 63)
-#else
- #define STR_FREEABLE (1ULL << 31)
-#endif
-
-size_t DynStringSize(DynString * s);
-
-DynString * DynStringMalloc(DynString *s, size_t size);
-void DynStringClear(DynString *s);
-void DynStringRealloc(DynString * s);
-void DynStringResize(DynString * s, size_t size);
-void DynStringFree(DynString * s);
-DynString * DynStringDupStr(DynString *s2, DynString * s);
-void DynStringCpyStr(DynString * dest, DynString * src);
-char * DynStringToCStr(DynString * s);
-void DynStringNCatCStr(DynString * s, size_t len, const char * str);
-void DynStringCatCStr(DynString * s, const char * str);
-void DynStringCatStr(DynString * s, const DynString * s2);
-void DynStringCatCStrs(DynString * s, ...);
-void DynStringCatStrs(DynString * s1, ...);
-void DynStringPrintf(DynString * s, const char * fmt, ...);
-
-#endif // !HAVE_DYNSTRING_H
+*/
+
+#ifndef HAVE_DYNSTRING_H
+#define HAVE_DYNSTRING_H
+
+#include <stddef.h>
+
+struct DynString
+{
+ char *s;
+ size_t size; // length of the string
+ size_t b_size; // length of the buffer containing the string
+};
+typedef struct DynString DynString;
+
+#define NaS {NULL, 0, 0}
+#define isnas(S) (!(S)->s)
+
+// define highest bit depending on 32 or 64 bit compile
+
+#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
+ #define STR_FREEABLE (1ULL << 63)
+#else
+ #define STR_FREEABLE (1ULL << 31)
+#endif
+
+size_t DynStringSize(DynString * s);
+
+DynString * DynStringMalloc(DynString *s, size_t size);
+void DynStringClear(DynString *s);
+void DynStringRealloc(DynString * s);
+void DynStringResize(DynString * s, size_t size);
+void DynStringFree(DynString * s);
+DynString * DynStringDupStr(DynString *s2, DynString * s);
+void DynStringCpyStr(DynString * dest, DynString * src);
+char * DynStringToCStr(DynString * s);
+void DynStringNCatCStr(DynString * s, size_t len, const char * str);
+void DynStringCatCStr(DynString * s, const char * str);
+void DynStringCatStr(DynString * s, const DynString * s2);
+void DynStringCatCStrs(DynString * s, ...);
+void DynStringCatStrs(DynString * s1, ...);
+void DynStringPrintf(DynString * s, const char * fmt, ...);
+void DynStringReset(DynString * s);
+#endif // !HAVE_DYNSTRING_H
diff --git a/app/help/CMakeLists.txt b/app/help/CMakeLists.txt
index 2b7efa7..34c8d33 100644
--- a/app/help/CMakeLists.txt
+++ b/app/help/CMakeLists.txt
@@ -1,9 +1,8 @@
PROJECT(help)
-ADD_EXECUTABLE(genhelp genhelp.c)
+ADD_EXECUTABLE(genhelp genhelp.c cJSON.c cJSON.h)
ADD_EXECUTABLE(genmessages genmessages.c)
-GET_TARGET_PROPERTY(genmessages_EXE genmessages LOCATION)
IF(XTRKCAD_USE_GETTEXT)
SET(GENMESSAGES_OPTS "-i18n")
@@ -14,7 +13,7 @@ ENDIF(XTRKCAD_USE_GETTEXT)
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/messages.h ${CMAKE_CURRENT_BINARY_DIR}/messages.but
DEPENDS genmessages ${CMAKE_CURRENT_SOURCE_DIR}/messages.in
- COMMAND ${genmessages_EXE} ${GENMESSAGES_OPTS} ${CMAKE_CURRENT_SOURCE_DIR}/messages.in ${CMAKE_CURRENT_BINARY_DIR}/messages.but
+ COMMAND genmessages ${GENMESSAGES_OPTS} ${CMAKE_CURRENT_SOURCE_DIR}/messages.in ${CMAKE_CURRENT_BINARY_DIR}/messages.but
)
ADD_CUSTOM_TARGET(Help ALL
diff --git a/app/help/cJSON.c b/app/help/cJSON.c
new file mode 100644
index 0000000..1733811
--- /dev/null
+++ b/app/help/cJSON.c
@@ -0,0 +1,2932 @@
+/*
+ Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+*/
+
+/* cJSON */
+/* JSON parser in C. */
+
+/* disable warnings about old C89 functions in MSVC */
+#if !defined(_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER)
+#define _CRT_SECURE_NO_DEPRECATE
+#endif
+
+#ifdef __GNUC__
+#pragma GCC visibility push(default)
+#endif
+#if defined(_MSC_VER)
+#pragma warning (push)
+/* disable warning about single line comments in system headers */
+#pragma warning (disable : 4001)
+#endif
+
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <ctype.h>
+
+#ifdef ENABLE_LOCALES
+#include <locale.h>
+#endif
+
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+#ifdef __GNUC__
+#pragma GCC visibility pop
+#endif
+
+#include "cJSON.h"
+
+/* define our own boolean type */
+#define true ((cJSON_bool)1)
+#define false ((cJSON_bool)0)
+
+typedef struct {
+ const unsigned char *json;
+ size_t position;
+} error;
+static error global_error = { NULL, 0 };
+
+CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void)
+{
+ return (const char*) (global_error.json + global_error.position);
+}
+
+CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item) {
+ if (!cJSON_IsString(item)) {
+ return NULL;
+ }
+
+ return item->valuestring;
+}
+
+/* This is a safeguard to prevent copy-pasters from using incompatible C and header files */
+#if (CJSON_VERSION_MAJOR != 1) || (CJSON_VERSION_MINOR != 7) || (CJSON_VERSION_PATCH != 8)
+ #error cJSON.h and cJSON.c have different versions. Make sure that both have the same.
+#endif
+
+CJSON_PUBLIC(const char*) cJSON_Version(void)
+{
+ static char version[15];
+ sprintf(version, "%i.%i.%i", CJSON_VERSION_MAJOR, CJSON_VERSION_MINOR, CJSON_VERSION_PATCH);
+
+ return version;
+}
+
+/* Case insensitive string comparison, doesn't consider two NULL pointers equal though */
+static int case_insensitive_strcmp(const unsigned char *string1, const unsigned char *string2)
+{
+ if ((string1 == NULL) || (string2 == NULL))
+ {
+ return 1;
+ }
+
+ if (string1 == string2)
+ {
+ return 0;
+ }
+
+ for(; tolower(*string1) == tolower(*string2); (void)string1++, string2++)
+ {
+ if (*string1 == '\0')
+ {
+ return 0;
+ }
+ }
+
+ return tolower(*string1) - tolower(*string2);
+}
+
+typedef struct internal_hooks
+{
+ void *(CJSON_CDECL *allocate)(size_t size);
+ void (CJSON_CDECL *deallocate)(void *pointer);
+ void *(CJSON_CDECL *reallocate)(void *pointer, size_t size);
+} internal_hooks;
+
+#if defined(_MSC_VER)
+/* work around MSVC error C2322: '...' address of dillimport '...' is not static */
+static void * CJSON_CDECL internal_malloc(size_t size)
+{
+ return malloc(size);
+}
+static void CJSON_CDECL internal_free(void *pointer)
+{
+ free(pointer);
+}
+static void * CJSON_CDECL internal_realloc(void *pointer, size_t size)
+{
+ return realloc(pointer, size);
+}
+#else
+#define internal_malloc malloc
+#define internal_free free
+#define internal_realloc realloc
+#endif
+
+static internal_hooks global_hooks = { internal_malloc, internal_free, internal_realloc };
+
+static unsigned char* cJSON_strdup(const unsigned char* string, const internal_hooks * const hooks)
+{
+ size_t length = 0;
+ unsigned char *copy = NULL;
+
+ if (string == NULL)
+ {
+ return NULL;
+ }
+
+ length = strlen((const char*)string) + sizeof("");
+ copy = (unsigned char*)hooks->allocate(length);
+ if (copy == NULL)
+ {
+ return NULL;
+ }
+ memcpy(copy, string, length);
+
+ return copy;
+}
+
+CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks)
+{
+ if (hooks == NULL)
+ {
+ /* Reset hooks */
+ global_hooks.allocate = malloc;
+ global_hooks.deallocate = free;
+ global_hooks.reallocate = realloc;
+ return;
+ }
+
+ global_hooks.allocate = malloc;
+ if (hooks->malloc_fn != NULL)
+ {
+ global_hooks.allocate = hooks->malloc_fn;
+ }
+
+ global_hooks.deallocate = free;
+ if (hooks->free_fn != NULL)
+ {
+ global_hooks.deallocate = hooks->free_fn;
+ }
+
+ /* use realloc only if both free and malloc are used */
+ global_hooks.reallocate = NULL;
+ if ((global_hooks.allocate == malloc) && (global_hooks.deallocate == free))
+ {
+ global_hooks.reallocate = realloc;
+ }
+}
+
+/* Internal constructor. */
+static cJSON *cJSON_New_Item(const internal_hooks * const hooks)
+{
+ cJSON* node = (cJSON*)hooks->allocate(sizeof(cJSON));
+ if (node)
+ {
+ memset(node, '\0', sizeof(cJSON));
+ }
+
+ return node;
+}
+
+/* Delete a cJSON structure. */
+CJSON_PUBLIC(void) cJSON_Delete(cJSON *item)
+{
+ cJSON *next = NULL;
+ while (item != NULL)
+ {
+ next = item->next;
+ if (!(item->type & cJSON_IsReference) && (item->child != NULL))
+ {
+ cJSON_Delete(item->child);
+ }
+ if (!(item->type & cJSON_IsReference) && (item->valuestring != NULL))
+ {
+ global_hooks.deallocate(item->valuestring);
+ }
+ if (!(item->type & cJSON_StringIsConst) && (item->string != NULL))
+ {
+ global_hooks.deallocate(item->string);
+ }
+ global_hooks.deallocate(item);
+ item = next;
+ }
+}
+
+/* get the decimal point character of the current locale */
+static unsigned char get_decimal_point(void)
+{
+#ifdef ENABLE_LOCALES
+ struct lconv *lconv = localeconv();
+ return (unsigned char) lconv->decimal_point[0];
+#else
+ return '.';
+#endif
+}
+
+typedef struct
+{
+ const unsigned char *content;
+ size_t length;
+ size_t offset;
+ size_t depth; /* How deeply nested (in arrays/objects) is the input at the current offset. */
+ internal_hooks hooks;
+} parse_buffer;
+
+/* check if the given size is left to read in a given parse buffer (starting with 1) */
+#define can_read(buffer, size) ((buffer != NULL) && (((buffer)->offset + size) <= (buffer)->length))
+/* check if the buffer can be accessed at the given index (starting with 0) */
+#define can_access_at_index(buffer, index) ((buffer != NULL) && (((buffer)->offset + index) < (buffer)->length))
+#define cannot_access_at_index(buffer, index) (!can_access_at_index(buffer, index))
+/* get a pointer to the buffer at the position */
+#define buffer_at_offset(buffer) ((buffer)->content + (buffer)->offset)
+
+/* Parse the input text to generate a number, and populate the result into item. */
+static cJSON_bool parse_number(cJSON * const item, parse_buffer * const input_buffer)
+{
+ double number = 0;
+ unsigned char *after_end = NULL;
+ unsigned char number_c_string[64];
+ unsigned char decimal_point = get_decimal_point();
+ size_t i = 0;
+
+ if ((input_buffer == NULL) || (input_buffer->content == NULL))
+ {
+ return false;
+ }
+
+ /* copy the number into a temporary buffer and replace '.' with the decimal point
+ * of the current locale (for strtod)
+ * This also takes care of '\0' not necessarily being available for marking the end of the input */
+ for (i = 0; (i < (sizeof(number_c_string) - 1)) && can_access_at_index(input_buffer, i); i++)
+ {
+ switch (buffer_at_offset(input_buffer)[i])
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case '+':
+ case '-':
+ case 'e':
+ case 'E':
+ number_c_string[i] = buffer_at_offset(input_buffer)[i];
+ break;
+
+ case '.':
+ number_c_string[i] = decimal_point;
+ break;
+
+ default:
+ goto loop_end;
+ }
+ }
+loop_end:
+ number_c_string[i] = '\0';
+
+ number = strtod((const char*)number_c_string, (char**)&after_end);
+ if (number_c_string == after_end)
+ {
+ return false; /* parse_error */
+ }
+
+ item->valuedouble = number;
+
+ /* use saturation in case of overflow */
+ if (number >= INT_MAX)
+ {
+ item->valueint = INT_MAX;
+ }
+ else if (number <= (double)INT_MIN)
+ {
+ item->valueint = INT_MIN;
+ }
+ else
+ {
+ item->valueint = (int)number;
+ }
+
+ item->type = cJSON_Number;
+
+ input_buffer->offset += (size_t)(after_end - number_c_string);
+ return true;
+}
+
+/* don't ask me, but the original cJSON_SetNumberValue returns an integer or double */
+CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number)
+{
+ if (number >= INT_MAX)
+ {
+ object->valueint = INT_MAX;
+ }
+ else if (number <= (double)INT_MIN)
+ {
+ object->valueint = INT_MIN;
+ }
+ else
+ {
+ object->valueint = (int)number;
+ }
+
+ return object->valuedouble = number;
+}
+
+typedef struct
+{
+ unsigned char *buffer;
+ size_t length;
+ size_t offset;
+ size_t depth; /* current nesting depth (for formatted printing) */
+ cJSON_bool noalloc;
+ cJSON_bool format; /* is this print a formatted print */
+ internal_hooks hooks;
+} printbuffer;
+
+/* realloc printbuffer if necessary to have at least "needed" bytes more */
+static unsigned char* ensure(printbuffer * const p, size_t needed)
+{
+ unsigned char *newbuffer = NULL;
+ size_t newsize = 0;
+
+ if ((p == NULL) || (p->buffer == NULL))
+ {
+ return NULL;
+ }
+
+ if ((p->length > 0) && (p->offset >= p->length))
+ {
+ /* make sure that offset is valid */
+ return NULL;
+ }
+
+ if (needed > INT_MAX)
+ {
+ /* sizes bigger than INT_MAX are currently not supported */
+ return NULL;
+ }
+
+ needed += p->offset + 1;
+ if (needed <= p->length)
+ {
+ return p->buffer + p->offset;
+ }
+
+ if (p->noalloc) {
+ return NULL;
+ }
+
+ /* calculate new buffer size */
+ if (needed > (INT_MAX / 2))
+ {
+ /* overflow of int, use INT_MAX if possible */
+ if (needed <= INT_MAX)
+ {
+ newsize = INT_MAX;
+ }
+ else
+ {
+ return NULL;
+ }
+ }
+ else
+ {
+ newsize = needed * 2;
+ }
+
+ if (p->hooks.reallocate != NULL)
+ {
+ /* reallocate with realloc if available */
+ newbuffer = (unsigned char*)p->hooks.reallocate(p->buffer, newsize);
+ if (newbuffer == NULL)
+ {
+ p->hooks.deallocate(p->buffer);
+ p->length = 0;
+ p->buffer = NULL;
+
+ return NULL;
+ }
+ }
+ else
+ {
+ /* otherwise reallocate manually */
+ newbuffer = (unsigned char*)p->hooks.allocate(newsize);
+ if (!newbuffer)
+ {
+ p->hooks.deallocate(p->buffer);
+ p->length = 0;
+ p->buffer = NULL;
+
+ return NULL;
+ }
+ if (newbuffer)
+ {
+ memcpy(newbuffer, p->buffer, p->offset + 1);
+ }
+ p->hooks.deallocate(p->buffer);
+ }
+ p->length = newsize;
+ p->buffer = newbuffer;
+
+ return newbuffer + p->offset;
+}
+
+/* calculate the new length of the string in a printbuffer and update the offset */
+static void update_offset(printbuffer * const buffer)
+{
+ const unsigned char *buffer_pointer = NULL;
+ if ((buffer == NULL) || (buffer->buffer == NULL))
+ {
+ return;
+ }
+ buffer_pointer = buffer->buffer + buffer->offset;
+
+ buffer->offset += strlen((const char*)buffer_pointer);
+}
+
+/* Render the number nicely from the given item into a string. */
+static cJSON_bool print_number(const cJSON * const item, printbuffer * const output_buffer)
+{
+ unsigned char *output_pointer = NULL;
+ double d = item->valuedouble;
+ int length = 0;
+ size_t i = 0;
+ unsigned char number_buffer[26]; /* temporary buffer to print the number into */
+ unsigned char decimal_point = get_decimal_point();
+ double test;
+
+ if (output_buffer == NULL)
+ {
+ return false;
+ }
+
+ /* This checks for NaN and Infinity */
+ if ((d * 0) != 0)
+ {
+ length = sprintf((char*)number_buffer, "null");
+ }
+ else
+ {
+ /* Try 15 decimal places of precision to avoid nonsignificant nonzero digits */
+ length = sprintf((char*)number_buffer, "%1.15g", d);
+
+ /* Check whether the original double can be recovered */
+ if ((sscanf((char*)number_buffer, "%lg", &test) != 1) || ((double)test != d))
+ {
+ /* If not, print with 17 decimal places of precision */
+ length = sprintf((char*)number_buffer, "%1.17g", d);
+ }
+ }
+
+ /* sprintf failed or buffer overrun occured */
+ if ((length < 0) || (length > (int)(sizeof(number_buffer) - 1)))
+ {
+ return false;
+ }
+
+ /* reserve appropriate space in the output */
+ output_pointer = ensure(output_buffer, (size_t)length + sizeof(""));
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+
+ /* copy the printed number to the output and replace locale
+ * dependent decimal point with '.' */
+ for (i = 0; i < ((size_t)length); i++)
+ {
+ if (number_buffer[i] == decimal_point)
+ {
+ output_pointer[i] = '.';
+ continue;
+ }
+
+ output_pointer[i] = number_buffer[i];
+ }
+ output_pointer[i] = '\0';
+
+ output_buffer->offset += (size_t)length;
+
+ return true;
+}
+
+/* parse 4 digit hexadecimal number */
+static unsigned parse_hex4(const unsigned char * const input)
+{
+ unsigned int h = 0;
+ size_t i = 0;
+
+ for (i = 0; i < 4; i++)
+ {
+ /* parse digit */
+ if ((input[i] >= '0') && (input[i] <= '9'))
+ {
+ h += (unsigned int) input[i] - '0';
+ }
+ else if ((input[i] >= 'A') && (input[i] <= 'F'))
+ {
+ h += (unsigned int) 10 + input[i] - 'A';
+ }
+ else if ((input[i] >= 'a') && (input[i] <= 'f'))
+ {
+ h += (unsigned int) 10 + input[i] - 'a';
+ }
+ else /* invalid */
+ {
+ return 0;
+ }
+
+ if (i < 3)
+ {
+ /* shift left to make place for the next nibble */
+ h = h << 4;
+ }
+ }
+
+ return h;
+}
+
+/* converts a UTF-16 literal to UTF-8
+ * A literal can be one or two sequences of the form \uXXXX */
+static unsigned char utf16_literal_to_utf8(const unsigned char * const input_pointer, const unsigned char * const input_end, unsigned char **output_pointer)
+{
+ long unsigned int codepoint = 0;
+ unsigned int first_code = 0;
+ const unsigned char *first_sequence = input_pointer;
+ unsigned char utf8_length = 0;
+ unsigned char utf8_position = 0;
+ unsigned char sequence_length = 0;
+ unsigned char first_byte_mark = 0;
+
+ if ((input_end - first_sequence) < 6)
+ {
+ /* input ends unexpectedly */
+ goto fail;
+ }
+
+ /* get the first utf16 sequence */
+ first_code = parse_hex4(first_sequence + 2);
+
+ /* check that the code is valid */
+ if (((first_code >= 0xDC00) && (first_code <= 0xDFFF)))
+ {
+ goto fail;
+ }
+
+ /* UTF16 surrogate pair */
+ if ((first_code >= 0xD800) && (first_code <= 0xDBFF))
+ {
+ const unsigned char *second_sequence = first_sequence + 6;
+ unsigned int second_code = 0;
+ sequence_length = 12; /* \uXXXX\uXXXX */
+
+ if ((input_end - second_sequence) < 6)
+ {
+ /* input ends unexpectedly */
+ goto fail;
+ }
+
+ if ((second_sequence[0] != '\\') || (second_sequence[1] != 'u'))
+ {
+ /* missing second half of the surrogate pair */
+ goto fail;
+ }
+
+ /* get the second utf16 sequence */
+ second_code = parse_hex4(second_sequence + 2);
+ /* check that the code is valid */
+ if ((second_code < 0xDC00) || (second_code > 0xDFFF))
+ {
+ /* invalid second half of the surrogate pair */
+ goto fail;
+ }
+
+
+ /* calculate the unicode codepoint from the surrogate pair */
+ codepoint = 0x10000 + (((first_code & 0x3FF) << 10) | (second_code & 0x3FF));
+ }
+ else
+ {
+ sequence_length = 6; /* \uXXXX */
+ codepoint = first_code;
+ }
+
+ /* encode as UTF-8
+ * takes at maximum 4 bytes to encode:
+ * 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
+ if (codepoint < 0x80)
+ {
+ /* normal ascii, encoding 0xxxxxxx */
+ utf8_length = 1;
+ }
+ else if (codepoint < 0x800)
+ {
+ /* two bytes, encoding 110xxxxx 10xxxxxx */
+ utf8_length = 2;
+ first_byte_mark = 0xC0; /* 11000000 */
+ }
+ else if (codepoint < 0x10000)
+ {
+ /* three bytes, encoding 1110xxxx 10xxxxxx 10xxxxxx */
+ utf8_length = 3;
+ first_byte_mark = 0xE0; /* 11100000 */
+ }
+ else if (codepoint <= 0x10FFFF)
+ {
+ /* four bytes, encoding 1110xxxx 10xxxxxx 10xxxxxx 10xxxxxx */
+ utf8_length = 4;
+ first_byte_mark = 0xF0; /* 11110000 */
+ }
+ else
+ {
+ /* invalid unicode codepoint */
+ goto fail;
+ }
+
+ /* encode as utf8 */
+ for (utf8_position = (unsigned char)(utf8_length - 1); utf8_position > 0; utf8_position--)
+ {
+ /* 10xxxxxx */
+ (*output_pointer)[utf8_position] = (unsigned char)((codepoint | 0x80) & 0xBF);
+ codepoint >>= 6;
+ }
+ /* encode first byte */
+ if (utf8_length > 1)
+ {
+ (*output_pointer)[0] = (unsigned char)((codepoint | first_byte_mark) & 0xFF);
+ }
+ else
+ {
+ (*output_pointer)[0] = (unsigned char)(codepoint & 0x7F);
+ }
+
+ *output_pointer += utf8_length;
+
+ return sequence_length;
+
+fail:
+ return 0;
+}
+
+/* Parse the input text into an unescaped cinput, and populate item. */
+static cJSON_bool parse_string(cJSON * const item, parse_buffer * const input_buffer)
+{
+ const unsigned char *input_pointer = buffer_at_offset(input_buffer) + 1;
+ const unsigned char *input_end = buffer_at_offset(input_buffer) + 1;
+ unsigned char *output_pointer = NULL;
+ unsigned char *output = NULL;
+
+ /* not a string */
+ if (buffer_at_offset(input_buffer)[0] != '\"')
+ {
+ goto fail;
+ }
+
+ {
+ /* calculate approximate size of the output (overestimate) */
+ size_t allocation_length = 0;
+ size_t skipped_bytes = 0;
+ while (((size_t)(input_end - input_buffer->content) < input_buffer->length) && (*input_end != '\"'))
+ {
+ /* is escape sequence */
+ if (input_end[0] == '\\')
+ {
+ if ((size_t)(input_end + 1 - input_buffer->content) >= input_buffer->length)
+ {
+ /* prevent buffer overflow when last input character is a backslash */
+ goto fail;
+ }
+ skipped_bytes++;
+ input_end++;
+ }
+ input_end++;
+ }
+ if (((size_t)(input_end - input_buffer->content) >= input_buffer->length) || (*input_end != '\"'))
+ {
+ goto fail; /* string ended unexpectedly */
+ }
+
+ /* This is at most how much we need for the output */
+ allocation_length = (size_t) (input_end - buffer_at_offset(input_buffer)) - skipped_bytes;
+ output = (unsigned char*)input_buffer->hooks.allocate(allocation_length + sizeof(""));
+ if (output == NULL)
+ {
+ goto fail; /* allocation failure */
+ }
+ }
+
+ output_pointer = output;
+ /* loop through the string literal */
+ while (input_pointer < input_end)
+ {
+ if (*input_pointer != '\\')
+ {
+ *output_pointer++ = *input_pointer++;
+ }
+ /* escape sequence */
+ else
+ {
+ unsigned char sequence_length = 2;
+ if ((input_end - input_pointer) < 1)
+ {
+ goto fail;
+ }
+
+ switch (input_pointer[1])
+ {
+ case 'b':
+ *output_pointer++ = '\b';
+ break;
+ case 'f':
+ *output_pointer++ = '\f';
+ break;
+ case 'n':
+ *output_pointer++ = '\n';
+ break;
+ case 'r':
+ *output_pointer++ = '\r';
+ break;
+ case 't':
+ *output_pointer++ = '\t';
+ break;
+ case '\"':
+ case '\\':
+ case '/':
+ *output_pointer++ = input_pointer[1];
+ break;
+
+ /* UTF-16 literal */
+ case 'u':
+ sequence_length = utf16_literal_to_utf8(input_pointer, input_end, &output_pointer);
+ if (sequence_length == 0)
+ {
+ /* failed to convert UTF16-literal to UTF-8 */
+ goto fail;
+ }
+ break;
+
+ default:
+ goto fail;
+ }
+ input_pointer += sequence_length;
+ }
+ }
+
+ /* zero terminate the output */
+ *output_pointer = '\0';
+
+ item->type = cJSON_String;
+ item->valuestring = (char*)output;
+
+ input_buffer->offset = (size_t) (input_end - input_buffer->content);
+ input_buffer->offset++;
+
+ return true;
+
+fail:
+ if (output != NULL)
+ {
+ input_buffer->hooks.deallocate(output);
+ }
+
+ if (input_pointer != NULL)
+ {
+ input_buffer->offset = (size_t)(input_pointer - input_buffer->content);
+ }
+
+ return false;
+}
+
+/* Render the cstring provided to an escaped version that can be printed. */
+static cJSON_bool print_string_ptr(const unsigned char * const input, printbuffer * const output_buffer)
+{
+ const unsigned char *input_pointer = NULL;
+ unsigned char *output = NULL;
+ unsigned char *output_pointer = NULL;
+ size_t output_length = 0;
+ /* numbers of additional characters needed for escaping */
+ size_t escape_characters = 0;
+
+ if (output_buffer == NULL)
+ {
+ return false;
+ }
+
+ /* empty string */
+ if (input == NULL)
+ {
+ output = ensure(output_buffer, sizeof("\"\""));
+ if (output == NULL)
+ {
+ return false;
+ }
+ strcpy((char*)output, "\"\"");
+
+ return true;
+ }
+
+ /* set "flag" to 1 if something needs to be escaped */
+ for (input_pointer = input; *input_pointer; input_pointer++)
+ {
+ switch (*input_pointer)
+ {
+ case '\"':
+ case '\\':
+ case '\b':
+ case '\f':
+ case '\n':
+ case '\r':
+ case '\t':
+ /* one character escape sequence */
+ escape_characters++;
+ break;
+ default:
+ if (*input_pointer < 32)
+ {
+ /* UTF-16 escape sequence uXXXX */
+ escape_characters += 5;
+ }
+ break;
+ }
+ }
+ output_length = (size_t)(input_pointer - input) + escape_characters;
+
+ output = ensure(output_buffer, output_length + sizeof("\"\""));
+ if (output == NULL)
+ {
+ return false;
+ }
+
+ /* no characters have to be escaped */
+ if (escape_characters == 0)
+ {
+ output[0] = '\"';
+ memcpy(output + 1, input, output_length);
+ output[output_length + 1] = '\"';
+ output[output_length + 2] = '\0';
+
+ return true;
+ }
+
+ output[0] = '\"';
+ output_pointer = output + 1;
+ /* copy the string */
+ for (input_pointer = input; *input_pointer != '\0'; (void)input_pointer++, output_pointer++)
+ {
+ if ((*input_pointer > 31) && (*input_pointer != '\"') && (*input_pointer != '\\'))
+ {
+ /* normal character, copy */
+ *output_pointer = *input_pointer;
+ }
+ else
+ {
+ /* character needs to be escaped */
+ *output_pointer++ = '\\';
+ switch (*input_pointer)
+ {
+ case '\\':
+ *output_pointer = '\\';
+ break;
+ case '\"':
+ *output_pointer = '\"';
+ break;
+ case '\b':
+ *output_pointer = 'b';
+ break;
+ case '\f':
+ *output_pointer = 'f';
+ break;
+ case '\n':
+ *output_pointer = 'n';
+ break;
+ case '\r':
+ *output_pointer = 'r';
+ break;
+ case '\t':
+ *output_pointer = 't';
+ break;
+ default:
+ /* escape and print as unicode codepoint */
+ sprintf((char*)output_pointer, "u%04x", *input_pointer);
+ output_pointer += 4;
+ break;
+ }
+ }
+ }
+ output[output_length + 1] = '\"';
+ output[output_length + 2] = '\0';
+
+ return true;
+}
+
+/* Invoke print_string_ptr (which is useful) on an item. */
+static cJSON_bool print_string(const cJSON * const item, printbuffer * const p)
+{
+ return print_string_ptr((unsigned char*)item->valuestring, p);
+}
+
+/* Predeclare these prototypes. */
+static cJSON_bool parse_value(cJSON * const item, parse_buffer * const input_buffer);
+static cJSON_bool print_value(const cJSON * const item, printbuffer * const output_buffer);
+static cJSON_bool parse_array(cJSON * const item, parse_buffer * const input_buffer);
+static cJSON_bool print_array(const cJSON * const item, printbuffer * const output_buffer);
+static cJSON_bool parse_object(cJSON * const item, parse_buffer * const input_buffer);
+static cJSON_bool print_object(const cJSON * const item, printbuffer * const output_buffer);
+
+/* Utility to jump whitespace and cr/lf */
+static parse_buffer *buffer_skip_whitespace(parse_buffer * const buffer)
+{
+ if ((buffer == NULL) || (buffer->content == NULL))
+ {
+ return NULL;
+ }
+
+ while (can_access_at_index(buffer, 0) && (buffer_at_offset(buffer)[0] <= 32))
+ {
+ buffer->offset++;
+ }
+
+ if (buffer->offset == buffer->length)
+ {
+ buffer->offset--;
+ }
+
+ return buffer;
+}
+
+/* skip the UTF-8 BOM (byte order mark) if it is at the beginning of a buffer */
+static parse_buffer *skip_utf8_bom(parse_buffer * const buffer)
+{
+ if ((buffer == NULL) || (buffer->content == NULL) || (buffer->offset != 0))
+ {
+ return NULL;
+ }
+
+ if (can_access_at_index(buffer, 4) && (strncmp((const char*)buffer_at_offset(buffer), "\xEF\xBB\xBF", 3) == 0))
+ {
+ buffer->offset += 3;
+ }
+
+ return buffer;
+}
+
+/* Parse an object - create a new root, and populate. */
+CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated)
+{
+ parse_buffer buffer = { 0, 0, 0, 0, { 0, 0, 0 } };
+ cJSON *item = NULL;
+
+ /* reset error position */
+ global_error.json = NULL;
+ global_error.position = 0;
+
+ if (value == NULL)
+ {
+ goto fail;
+ }
+
+ buffer.content = (const unsigned char*)value;
+ buffer.length = strlen((const char*)value) + sizeof("");
+ buffer.offset = 0;
+ buffer.hooks = global_hooks;
+
+ item = cJSON_New_Item(&global_hooks);
+ if (item == NULL) /* memory fail */
+ {
+ goto fail;
+ }
+
+ if (!parse_value(item, buffer_skip_whitespace(skip_utf8_bom(&buffer))))
+ {
+ /* parse failure. ep is set. */
+ goto fail;
+ }
+
+ /* if we require null-terminated JSON without appended garbage, skip and then check for a null terminator */
+ if (require_null_terminated)
+ {
+ buffer_skip_whitespace(&buffer);
+ if ((buffer.offset >= buffer.length) || buffer_at_offset(&buffer)[0] != '\0')
+ {
+ goto fail;
+ }
+ }
+ if (return_parse_end)
+ {
+ *return_parse_end = (const char*)buffer_at_offset(&buffer);
+ }
+
+ return item;
+
+fail:
+ if (item != NULL)
+ {
+ cJSON_Delete(item);
+ }
+
+ if (value != NULL)
+ {
+ error local_error;
+ local_error.json = (const unsigned char*)value;
+ local_error.position = 0;
+
+ if (buffer.offset < buffer.length)
+ {
+ local_error.position = buffer.offset;
+ }
+ else if (buffer.length > 0)
+ {
+ local_error.position = buffer.length - 1;
+ }
+
+ if (return_parse_end != NULL)
+ {
+ *return_parse_end = (const char*)local_error.json + local_error.position;
+ }
+
+ global_error = local_error;
+ }
+
+ return NULL;
+}
+
+/* Default options for cJSON_Parse */
+CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value)
+{
+ return cJSON_ParseWithOpts(value, 0, 0);
+}
+
+#define cjson_min(a, b) ((a < b) ? a : b)
+
+static unsigned char *print(const cJSON * const item, cJSON_bool format, const internal_hooks * const hooks)
+{
+ static const size_t default_buffer_size = 256;
+ printbuffer buffer[1];
+ unsigned char *printed = NULL;
+
+ memset(buffer, 0, sizeof(buffer));
+
+ /* create buffer */
+ buffer->buffer = (unsigned char*) hooks->allocate(default_buffer_size);
+ buffer->length = default_buffer_size;
+ buffer->format = format;
+ buffer->hooks = *hooks;
+ if (buffer->buffer == NULL)
+ {
+ goto fail;
+ }
+
+ /* print the value */
+ if (!print_value(item, buffer))
+ {
+ goto fail;
+ }
+ update_offset(buffer);
+
+ /* check if reallocate is available */
+ if (hooks->reallocate != NULL)
+ {
+ printed = (unsigned char*) hooks->reallocate(buffer->buffer, buffer->offset + 1);
+ if (printed == NULL) {
+ goto fail;
+ }
+ buffer->buffer = NULL;
+ }
+ else /* otherwise copy the JSON over to a new buffer */
+ {
+ printed = (unsigned char*) hooks->allocate(buffer->offset + 1);
+ if (printed == NULL)
+ {
+ goto fail;
+ }
+ memcpy(printed, buffer->buffer, cjson_min(buffer->length, buffer->offset + 1));
+ printed[buffer->offset] = '\0'; /* just to be sure */
+
+ /* free the buffer */
+ hooks->deallocate(buffer->buffer);
+ }
+
+ return printed;
+
+fail:
+ if (buffer->buffer != NULL)
+ {
+ hooks->deallocate(buffer->buffer);
+ }
+
+ if (printed != NULL)
+ {
+ hooks->deallocate(printed);
+ }
+
+ return NULL;
+}
+
+/* Render a cJSON item/entity/structure to text. */
+CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item)
+{
+ return (char*)print(item, true, &global_hooks);
+}
+
+CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item)
+{
+ return (char*)print(item, false, &global_hooks);
+}
+
+CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt)
+{
+ printbuffer p = { 0, 0, 0, 0, 0, 0, { 0, 0, 0 } };
+
+ if (prebuffer < 0)
+ {
+ return NULL;
+ }
+
+ p.buffer = (unsigned char*)global_hooks.allocate((size_t)prebuffer);
+ if (!p.buffer)
+ {
+ return NULL;
+ }
+
+ p.length = (size_t)prebuffer;
+ p.offset = 0;
+ p.noalloc = false;
+ p.format = fmt;
+ p.hooks = global_hooks;
+
+ if (!print_value(item, &p))
+ {
+ global_hooks.deallocate(p.buffer);
+ return NULL;
+ }
+
+ return (char*)p.buffer;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buf, const int len, const cJSON_bool fmt)
+{
+ printbuffer p = { 0, 0, 0, 0, 0, 0, { 0, 0, 0 } };
+
+ if ((len < 0) || (buf == NULL))
+ {
+ return false;
+ }
+
+ p.buffer = (unsigned char*)buf;
+ p.length = (size_t)len;
+ p.offset = 0;
+ p.noalloc = true;
+ p.format = fmt;
+ p.hooks = global_hooks;
+
+ return print_value(item, &p);
+}
+
+/* Parser core - when encountering text, process appropriately. */
+static cJSON_bool parse_value(cJSON * const item, parse_buffer * const input_buffer)
+{
+ if ((input_buffer == NULL) || (input_buffer->content == NULL))
+ {
+ return false; /* no input */
+ }
+
+ /* parse the different types of values */
+ /* null */
+ if (can_read(input_buffer, 4) && (strncmp((const char*)buffer_at_offset(input_buffer), "null", 4) == 0))
+ {
+ item->type = cJSON_NULL;
+ input_buffer->offset += 4;
+ return true;
+ }
+ /* false */
+ if (can_read(input_buffer, 5) && (strncmp((const char*)buffer_at_offset(input_buffer), "false", 5) == 0))
+ {
+ item->type = cJSON_False;
+ input_buffer->offset += 5;
+ return true;
+ }
+ /* true */
+ if (can_read(input_buffer, 4) && (strncmp((const char*)buffer_at_offset(input_buffer), "true", 4) == 0))
+ {
+ item->type = cJSON_True;
+ item->valueint = 1;
+ input_buffer->offset += 4;
+ return true;
+ }
+ /* string */
+ if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '\"'))
+ {
+ return parse_string(item, input_buffer);
+ }
+ /* number */
+ if (can_access_at_index(input_buffer, 0) && ((buffer_at_offset(input_buffer)[0] == '-') || ((buffer_at_offset(input_buffer)[0] >= '0') && (buffer_at_offset(input_buffer)[0] <= '9'))))
+ {
+ return parse_number(item, input_buffer);
+ }
+ /* array */
+ if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '['))
+ {
+ return parse_array(item, input_buffer);
+ }
+ /* object */
+ if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '{'))
+ {
+ return parse_object(item, input_buffer);
+ }
+
+ return false;
+}
+
+/* Render a value to text. */
+static cJSON_bool print_value(const cJSON * const item, printbuffer * const output_buffer)
+{
+ unsigned char *output = NULL;
+
+ if ((item == NULL) || (output_buffer == NULL))
+ {
+ return false;
+ }
+
+ switch ((item->type) & 0xFF)
+ {
+ case cJSON_NULL:
+ output = ensure(output_buffer, 5);
+ if (output == NULL)
+ {
+ return false;
+ }
+ strcpy((char*)output, "null");
+ return true;
+
+ case cJSON_False:
+ output = ensure(output_buffer, 6);
+ if (output == NULL)
+ {
+ return false;
+ }
+ strcpy((char*)output, "false");
+ return true;
+
+ case cJSON_True:
+ output = ensure(output_buffer, 5);
+ if (output == NULL)
+ {
+ return false;
+ }
+ strcpy((char*)output, "true");
+ return true;
+
+ case cJSON_Number:
+ return print_number(item, output_buffer);
+
+ case cJSON_Raw:
+ {
+ size_t raw_length = 0;
+ if (item->valuestring == NULL)
+ {
+ return false;
+ }
+
+ raw_length = strlen(item->valuestring) + sizeof("");
+ output = ensure(output_buffer, raw_length);
+ if (output == NULL)
+ {
+ return false;
+ }
+ memcpy(output, item->valuestring, raw_length);
+ return true;
+ }
+
+ case cJSON_String:
+ return print_string(item, output_buffer);
+
+ case cJSON_Array:
+ return print_array(item, output_buffer);
+
+ case cJSON_Object:
+ return print_object(item, output_buffer);
+
+ default:
+ return false;
+ }
+}
+
+/* Build an array from input text. */
+static cJSON_bool parse_array(cJSON * const item, parse_buffer * const input_buffer)
+{
+ cJSON *head = NULL; /* head of the linked list */
+ cJSON *current_item = NULL;
+
+ if (input_buffer->depth >= CJSON_NESTING_LIMIT)
+ {
+ return false; /* to deeply nested */
+ }
+ input_buffer->depth++;
+
+ if (buffer_at_offset(input_buffer)[0] != '[')
+ {
+ /* not an array */
+ goto fail;
+ }
+
+ input_buffer->offset++;
+ buffer_skip_whitespace(input_buffer);
+ if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == ']'))
+ {
+ /* empty array */
+ goto success;
+ }
+
+ /* check if we skipped to the end of the buffer */
+ if (cannot_access_at_index(input_buffer, 0))
+ {
+ input_buffer->offset--;
+ goto fail;
+ }
+
+ /* step back to character in front of the first element */
+ input_buffer->offset--;
+ /* loop through the comma separated array elements */
+ do
+ {
+ /* allocate next item */
+ cJSON *new_item = cJSON_New_Item(&(input_buffer->hooks));
+ if (new_item == NULL)
+ {
+ goto fail; /* allocation failure */
+ }
+
+ /* attach next item to list */
+ if (head == NULL)
+ {
+ /* start the linked list */
+ current_item = head = new_item;
+ }
+ else
+ {
+ /* add to the end and advance */
+ current_item->next = new_item;
+ new_item->prev = current_item;
+ current_item = new_item;
+ }
+
+ /* parse next value */
+ input_buffer->offset++;
+ buffer_skip_whitespace(input_buffer);
+ if (!parse_value(current_item, input_buffer))
+ {
+ goto fail; /* failed to parse value */
+ }
+ buffer_skip_whitespace(input_buffer);
+ }
+ while (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == ','));
+
+ if (cannot_access_at_index(input_buffer, 0) || buffer_at_offset(input_buffer)[0] != ']')
+ {
+ goto fail; /* expected end of array */
+ }
+
+success:
+ input_buffer->depth--;
+
+ item->type = cJSON_Array;
+ item->child = head;
+
+ input_buffer->offset++;
+
+ return true;
+
+fail:
+ if (head != NULL)
+ {
+ cJSON_Delete(head);
+ }
+
+ return false;
+}
+
+/* Render an array to text */
+static cJSON_bool print_array(const cJSON * const item, printbuffer * const output_buffer)
+{
+ unsigned char *output_pointer = NULL;
+ size_t length = 0;
+ cJSON *current_element = item->child;
+
+ if (output_buffer == NULL)
+ {
+ return false;
+ }
+
+ /* Compose the output array. */
+ /* opening square bracket */
+ output_pointer = ensure(output_buffer, 1);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+
+ *output_pointer = '[';
+ output_buffer->offset++;
+ output_buffer->depth++;
+
+ while (current_element != NULL)
+ {
+ if (!print_value(current_element, output_buffer))
+ {
+ return false;
+ }
+ update_offset(output_buffer);
+ if (current_element->next)
+ {
+ length = (size_t) (output_buffer->format ? 2 : 1);
+ output_pointer = ensure(output_buffer, length + 1);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+ *output_pointer++ = ',';
+ if(output_buffer->format)
+ {
+ *output_pointer++ = ' ';
+ }
+ *output_pointer = '\0';
+ output_buffer->offset += length;
+ }
+ current_element = current_element->next;
+ }
+
+ output_pointer = ensure(output_buffer, 2);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+ *output_pointer++ = ']';
+ *output_pointer = '\0';
+ output_buffer->depth--;
+
+ return true;
+}
+
+/* Build an object from the text. */
+static cJSON_bool parse_object(cJSON * const item, parse_buffer * const input_buffer)
+{
+ cJSON *head = NULL; /* linked list head */
+ cJSON *current_item = NULL;
+
+ if (input_buffer->depth >= CJSON_NESTING_LIMIT)
+ {
+ return false; /* to deeply nested */
+ }
+ input_buffer->depth++;
+
+ if (cannot_access_at_index(input_buffer, 0) || (buffer_at_offset(input_buffer)[0] != '{'))
+ {
+ goto fail; /* not an object */
+ }
+
+ input_buffer->offset++;
+ buffer_skip_whitespace(input_buffer);
+ if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '}'))
+ {
+ goto success; /* empty object */
+ }
+
+ /* check if we skipped to the end of the buffer */
+ if (cannot_access_at_index(input_buffer, 0))
+ {
+ input_buffer->offset--;
+ goto fail;
+ }
+
+ /* step back to character in front of the first element */
+ input_buffer->offset--;
+ /* loop through the comma separated array elements */
+ do
+ {
+ /* allocate next item */
+ cJSON *new_item = cJSON_New_Item(&(input_buffer->hooks));
+ if (new_item == NULL)
+ {
+ goto fail; /* allocation failure */
+ }
+
+ /* attach next item to list */
+ if (head == NULL)
+ {
+ /* start the linked list */
+ current_item = head = new_item;
+ }
+ else
+ {
+ /* add to the end and advance */
+ current_item->next = new_item;
+ new_item->prev = current_item;
+ current_item = new_item;
+ }
+
+ /* parse the name of the child */
+ input_buffer->offset++;
+ buffer_skip_whitespace(input_buffer);
+ if (!parse_string(current_item, input_buffer))
+ {
+ goto fail; /* faile to parse name */
+ }
+ buffer_skip_whitespace(input_buffer);
+
+ /* swap valuestring and string, because we parsed the name */
+ current_item->string = current_item->valuestring;
+ current_item->valuestring = NULL;
+
+ if (cannot_access_at_index(input_buffer, 0) || (buffer_at_offset(input_buffer)[0] != ':'))
+ {
+ goto fail; /* invalid object */
+ }
+
+ /* parse the value */
+ input_buffer->offset++;
+ buffer_skip_whitespace(input_buffer);
+ if (!parse_value(current_item, input_buffer))
+ {
+ goto fail; /* failed to parse value */
+ }
+ buffer_skip_whitespace(input_buffer);
+ }
+ while (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == ','));
+
+ if (cannot_access_at_index(input_buffer, 0) || (buffer_at_offset(input_buffer)[0] != '}'))
+ {
+ goto fail; /* expected end of object */
+ }
+
+success:
+ input_buffer->depth--;
+
+ item->type = cJSON_Object;
+ item->child = head;
+
+ input_buffer->offset++;
+ return true;
+
+fail:
+ if (head != NULL)
+ {
+ cJSON_Delete(head);
+ }
+
+ return false;
+}
+
+/* Render an object to text. */
+static cJSON_bool print_object(const cJSON * const item, printbuffer * const output_buffer)
+{
+ unsigned char *output_pointer = NULL;
+ size_t length = 0;
+ cJSON *current_item = item->child;
+
+ if (output_buffer == NULL)
+ {
+ return false;
+ }
+
+ /* Compose the output: */
+ length = (size_t) (output_buffer->format ? 2 : 1); /* fmt: {\n */
+ output_pointer = ensure(output_buffer, length + 1);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+
+ *output_pointer++ = '{';
+ output_buffer->depth++;
+ if (output_buffer->format)
+ {
+ *output_pointer++ = '\n';
+ }
+ output_buffer->offset += length;
+
+ while (current_item)
+ {
+ if (output_buffer->format)
+ {
+ size_t i;
+ output_pointer = ensure(output_buffer, output_buffer->depth);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+ for (i = 0; i < output_buffer->depth; i++)
+ {
+ *output_pointer++ = '\t';
+ }
+ output_buffer->offset += output_buffer->depth;
+ }
+
+ /* print key */
+ if (!print_string_ptr((unsigned char*)current_item->string, output_buffer))
+ {
+ return false;
+ }
+ update_offset(output_buffer);
+
+ length = (size_t) (output_buffer->format ? 2 : 1);
+ output_pointer = ensure(output_buffer, length);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+ *output_pointer++ = ':';
+ if (output_buffer->format)
+ {
+ *output_pointer++ = '\t';
+ }
+ output_buffer->offset += length;
+
+ /* print value */
+ if (!print_value(current_item, output_buffer))
+ {
+ return false;
+ }
+ update_offset(output_buffer);
+
+ /* print comma if not last */
+ length = ((size_t)(output_buffer->format ? 1 : 0) + (size_t)(current_item->next ? 1 : 0));
+ output_pointer = ensure(output_buffer, length + 1);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+ if (current_item->next)
+ {
+ *output_pointer++ = ',';
+ }
+
+ if (output_buffer->format)
+ {
+ *output_pointer++ = '\n';
+ }
+ *output_pointer = '\0';
+ output_buffer->offset += length;
+
+ current_item = current_item->next;
+ }
+
+ output_pointer = ensure(output_buffer, output_buffer->format ? (output_buffer->depth + 1) : 2);
+ if (output_pointer == NULL)
+ {
+ return false;
+ }
+ if (output_buffer->format)
+ {
+ size_t i;
+ for (i = 0; i < (output_buffer->depth - 1); i++)
+ {
+ *output_pointer++ = '\t';
+ }
+ }
+ *output_pointer++ = '}';
+ *output_pointer = '\0';
+ output_buffer->depth--;
+
+ return true;
+}
+
+/* Get Array size/item / object item. */
+CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array)
+{
+ cJSON *child = NULL;
+ size_t size = 0;
+
+ if (array == NULL)
+ {
+ return 0;
+ }
+
+ child = array->child;
+
+ while(child != NULL)
+ {
+ size++;
+ child = child->next;
+ }
+
+ /* FIXME: Can overflow here. Cannot be fixed without breaking the API */
+
+ return (int)size;
+}
+
+static cJSON* get_array_item(const cJSON *array, size_t index)
+{
+ cJSON *current_child = NULL;
+
+ if (array == NULL)
+ {
+ return NULL;
+ }
+
+ current_child = array->child;
+ while ((current_child != NULL) && (index > 0))
+ {
+ index--;
+ current_child = current_child->next;
+ }
+
+ return current_child;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index)
+{
+ if (index < 0)
+ {
+ return NULL;
+ }
+
+ return get_array_item(array, (size_t)index);
+}
+
+static cJSON *get_object_item(const cJSON * const object, const char * const name, const cJSON_bool case_sensitive)
+{
+ cJSON *current_element = NULL;
+
+ if ((object == NULL) || (name == NULL))
+ {
+ return NULL;
+ }
+
+ current_element = object->child;
+ if (case_sensitive)
+ {
+ while ((current_element != NULL) && (strcmp(name, current_element->string) != 0))
+ {
+ current_element = current_element->next;
+ }
+ }
+ else
+ {
+ while ((current_element != NULL) && (case_insensitive_strcmp((const unsigned char*)name, (const unsigned char*)(current_element->string)) != 0))
+ {
+ current_element = current_element->next;
+ }
+ }
+
+ return current_element;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string)
+{
+ return get_object_item(object, string, false);
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const string)
+{
+ return get_object_item(object, string, true);
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string)
+{
+ return cJSON_GetObjectItem(object, string) ? 1 : 0;
+}
+
+/* Utility for array list handling. */
+static void suffix_object(cJSON *prev, cJSON *item)
+{
+ prev->next = item;
+ item->prev = prev;
+}
+
+/* Utility for handling references. */
+static cJSON *create_reference(const cJSON *item, const internal_hooks * const hooks)
+{
+ cJSON *reference = NULL;
+ if (item == NULL)
+ {
+ return NULL;
+ }
+
+ reference = cJSON_New_Item(hooks);
+ if (reference == NULL)
+ {
+ return NULL;
+ }
+
+ memcpy(reference, item, sizeof(cJSON));
+ reference->string = NULL;
+ reference->type |= cJSON_IsReference;
+ reference->next = reference->prev = NULL;
+ return reference;
+}
+
+static cJSON_bool add_item_to_array(cJSON *array, cJSON *item)
+{
+ cJSON *child = NULL;
+
+ if ((item == NULL) || (array == NULL))
+ {
+ return false;
+ }
+
+ child = array->child;
+
+ if (child == NULL)
+ {
+ /* list is empty, start new one */
+ array->child = item;
+ }
+ else
+ {
+ /* append to the end */
+ while (child->next)
+ {
+ child = child->next;
+ }
+ suffix_object(child, item);
+ }
+
+ return true;
+}
+
+/* Add item to array/object. */
+CJSON_PUBLIC(void) cJSON_AddItemToArray(cJSON *array, cJSON *item)
+{
+ add_item_to_array(array, item);
+}
+
+#if defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5))))
+ #pragma GCC diagnostic push
+#endif
+#ifdef __GNUC__
+#pragma GCC diagnostic ignored "-Wcast-qual"
+#endif
+/* helper function to cast away const */
+static void* cast_away_const(const void* string)
+{
+ return (void*)string;
+}
+#if defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5))))
+ #pragma GCC diagnostic pop
+#endif
+
+
+static cJSON_bool add_item_to_object(cJSON * const object, const char * const string, cJSON * const item, const internal_hooks * const hooks, const cJSON_bool constant_key)
+{
+ char *new_key = NULL;
+ int new_type = cJSON_Invalid;
+
+ if ((object == NULL) || (string == NULL) || (item == NULL))
+ {
+ return false;
+ }
+
+ if (constant_key)
+ {
+ new_key = (char*)cast_away_const(string);
+ new_type = item->type | cJSON_StringIsConst;
+ }
+ else
+ {
+ new_key = (char*)cJSON_strdup((const unsigned char*)string, hooks);
+ if (new_key == NULL)
+ {
+ return false;
+ }
+
+ new_type = item->type & ~cJSON_StringIsConst;
+ }
+
+ if (!(item->type & cJSON_StringIsConst) && (item->string != NULL))
+ {
+ hooks->deallocate(item->string);
+ }
+
+ item->string = new_key;
+ item->type = new_type;
+
+ return add_item_to_array(object, item);
+}
+
+CJSON_PUBLIC(void) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item)
+{
+ add_item_to_object(object, string, item, &global_hooks, false);
+}
+
+/* Add an item to an object with constant string as key */
+CJSON_PUBLIC(void) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item)
+{
+ add_item_to_object(object, string, item, &global_hooks, true);
+}
+
+CJSON_PUBLIC(void) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item)
+{
+ if (array == NULL)
+ {
+ return;
+ }
+
+ add_item_to_array(array, create_reference(item, &global_hooks));
+}
+
+CJSON_PUBLIC(void) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item)
+{
+ if ((object == NULL) || (string == NULL))
+ {
+ return;
+ }
+
+ add_item_to_object(object, string, create_reference(item, &global_hooks), &global_hooks, false);
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name)
+{
+ cJSON *null = cJSON_CreateNull();
+ if (add_item_to_object(object, name, null, &global_hooks, false))
+ {
+ return null;
+ }
+
+ cJSON_Delete(null);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name)
+{
+ cJSON *true_item = cJSON_CreateTrue();
+ if (add_item_to_object(object, name, true_item, &global_hooks, false))
+ {
+ return true_item;
+ }
+
+ cJSON_Delete(true_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name)
+{
+ cJSON *false_item = cJSON_CreateFalse();
+ if (add_item_to_object(object, name, false_item, &global_hooks, false))
+ {
+ return false_item;
+ }
+
+ cJSON_Delete(false_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const char * const name, const cJSON_bool boolean)
+{
+ cJSON *bool_item = cJSON_CreateBool(boolean);
+ if (add_item_to_object(object, name, bool_item, &global_hooks, false))
+ {
+ return bool_item;
+ }
+
+ cJSON_Delete(bool_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number)
+{
+ cJSON *number_item = cJSON_CreateNumber(number);
+ if (add_item_to_object(object, name, number_item, &global_hooks, false))
+ {
+ return number_item;
+ }
+
+ cJSON_Delete(number_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string)
+{
+ cJSON *string_item = cJSON_CreateString(string);
+ if (add_item_to_object(object, name, string_item, &global_hooks, false))
+ {
+ return string_item;
+ }
+
+ cJSON_Delete(string_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddRawToObject(cJSON * const object, const char * const name, const char * const raw)
+{
+ cJSON *raw_item = cJSON_CreateRaw(raw);
+ if (add_item_to_object(object, name, raw_item, &global_hooks, false))
+ {
+ return raw_item;
+ }
+
+ cJSON_Delete(raw_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const char * const name)
+{
+ cJSON *object_item = cJSON_CreateObject();
+ if (add_item_to_object(object, name, object_item, &global_hooks, false))
+ {
+ return object_item;
+ }
+
+ cJSON_Delete(object_item);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const char * const name)
+{
+ cJSON *array = cJSON_CreateArray();
+ if (add_item_to_object(object, name, array, &global_hooks, false))
+ {
+ return array;
+ }
+
+ cJSON_Delete(array);
+ return NULL;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item)
+{
+ if ((parent == NULL) || (item == NULL))
+ {
+ return NULL;
+ }
+
+ if (item->prev != NULL)
+ {
+ /* not the first element */
+ item->prev->next = item->next;
+ }
+ if (item->next != NULL)
+ {
+ /* not the last element */
+ item->next->prev = item->prev;
+ }
+
+ if (item == parent->child)
+ {
+ /* first element */
+ parent->child = item->next;
+ }
+ /* make sure the detached item doesn't point anywhere anymore */
+ item->prev = NULL;
+ item->next = NULL;
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which)
+{
+ if (which < 0)
+ {
+ return NULL;
+ }
+
+ return cJSON_DetachItemViaPointer(array, get_array_item(array, (size_t)which));
+}
+
+CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which)
+{
+ cJSON_Delete(cJSON_DetachItemFromArray(array, which));
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char *string)
+{
+ cJSON *to_detach = cJSON_GetObjectItem(object, string);
+
+ return cJSON_DetachItemViaPointer(object, to_detach);
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *object, const char *string)
+{
+ cJSON *to_detach = cJSON_GetObjectItemCaseSensitive(object, string);
+
+ return cJSON_DetachItemViaPointer(object, to_detach);
+}
+
+CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char *string)
+{
+ cJSON_Delete(cJSON_DetachItemFromObject(object, string));
+}
+
+CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object, const char *string)
+{
+ cJSON_Delete(cJSON_DetachItemFromObjectCaseSensitive(object, string));
+}
+
+/* Replace array/object items with new ones. */
+CJSON_PUBLIC(void) cJSON_InsertItemInArray(cJSON *array, int which, cJSON *newitem)
+{
+ cJSON *after_inserted = NULL;
+
+ if (which < 0)
+ {
+ return;
+ }
+
+ after_inserted = get_array_item(array, (size_t)which);
+ if (after_inserted == NULL)
+ {
+ add_item_to_array(array, newitem);
+ return;
+ }
+
+ newitem->next = after_inserted;
+ newitem->prev = after_inserted->prev;
+ after_inserted->prev = newitem;
+ if (after_inserted == array->child)
+ {
+ array->child = newitem;
+ }
+ else
+ {
+ newitem->prev->next = newitem;
+ }
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent, cJSON * const item, cJSON * replacement)
+{
+ if ((parent == NULL) || (replacement == NULL) || (item == NULL))
+ {
+ return false;
+ }
+
+ if (replacement == item)
+ {
+ return true;
+ }
+
+ replacement->next = item->next;
+ replacement->prev = item->prev;
+
+ if (replacement->next != NULL)
+ {
+ replacement->next->prev = replacement;
+ }
+ if (replacement->prev != NULL)
+ {
+ replacement->prev->next = replacement;
+ }
+ if (parent->child == item)
+ {
+ parent->child = replacement;
+ }
+
+ item->next = NULL;
+ item->prev = NULL;
+ cJSON_Delete(item);
+
+ return true;
+}
+
+CJSON_PUBLIC(void) cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newitem)
+{
+ if (which < 0)
+ {
+ return;
+ }
+
+ cJSON_ReplaceItemViaPointer(array, get_array_item(array, (size_t)which), newitem);
+}
+
+static cJSON_bool replace_item_in_object(cJSON *object, const char *string, cJSON *replacement, cJSON_bool case_sensitive)
+{
+ if ((replacement == NULL) || (string == NULL))
+ {
+ return false;
+ }
+
+ /* replace the name in the replacement */
+ if (!(replacement->type & cJSON_StringIsConst) && (replacement->string != NULL))
+ {
+ cJSON_free(replacement->string);
+ }
+ replacement->string = (char*)cJSON_strdup((const unsigned char*)string, &global_hooks);
+ replacement->type &= ~cJSON_StringIsConst;
+
+ cJSON_ReplaceItemViaPointer(object, get_object_item(object, string, case_sensitive), replacement);
+
+ return true;
+}
+
+CJSON_PUBLIC(void) cJSON_ReplaceItemInObject(cJSON *object, const char *string, cJSON *newitem)
+{
+ replace_item_in_object(object, string, newitem, false);
+}
+
+CJSON_PUBLIC(void) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *object, const char *string, cJSON *newitem)
+{
+ replace_item_in_object(object, string, newitem, true);
+}
+
+/* Create basic types: */
+CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = cJSON_NULL;
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = cJSON_True;
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = cJSON_False;
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool b)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = b ? cJSON_True : cJSON_False;
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = cJSON_Number;
+ item->valuedouble = num;
+
+ /* use saturation in case of overflow */
+ if (num >= INT_MAX)
+ {
+ item->valueint = INT_MAX;
+ }
+ else if (num <= (double)INT_MIN)
+ {
+ item->valueint = INT_MIN;
+ }
+ else
+ {
+ item->valueint = (int)num;
+ }
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = cJSON_String;
+ item->valuestring = (char*)cJSON_strdup((const unsigned char*)string, &global_hooks);
+ if(!item->valuestring)
+ {
+ cJSON_Delete(item);
+ return NULL;
+ }
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateStringReference(const char *string)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if (item != NULL)
+ {
+ item->type = cJSON_String | cJSON_IsReference;
+ item->valuestring = (char*)cast_away_const(string);
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateObjectReference(const cJSON *child)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if (item != NULL) {
+ item->type = cJSON_Object | cJSON_IsReference;
+ item->child = (cJSON*)cast_away_const(child);
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateArrayReference(const cJSON *child) {
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if (item != NULL) {
+ item->type = cJSON_Array | cJSON_IsReference;
+ item->child = (cJSON*)cast_away_const(child);
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type = cJSON_Raw;
+ item->valuestring = (char*)cJSON_strdup((const unsigned char*)raw, &global_hooks);
+ if(!item->valuestring)
+ {
+ cJSON_Delete(item);
+ return NULL;
+ }
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if(item)
+ {
+ item->type=cJSON_Array;
+ }
+
+ return item;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void)
+{
+ cJSON *item = cJSON_New_Item(&global_hooks);
+ if (item)
+ {
+ item->type = cJSON_Object;
+ }
+
+ return item;
+}
+
+/* Create Arrays: */
+CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count)
+{
+ size_t i = 0;
+ cJSON *n = NULL;
+ cJSON *p = NULL;
+ cJSON *a = NULL;
+
+ if ((count < 0) || (numbers == NULL))
+ {
+ return NULL;
+ }
+
+ a = cJSON_CreateArray();
+ for(i = 0; a && (i < (size_t)count); i++)
+ {
+ n = cJSON_CreateNumber(numbers[i]);
+ if (!n)
+ {
+ cJSON_Delete(a);
+ return NULL;
+ }
+ if(!i)
+ {
+ a->child = n;
+ }
+ else
+ {
+ suffix_object(p, n);
+ }
+ p = n;
+ }
+
+ return a;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count)
+{
+ size_t i = 0;
+ cJSON *n = NULL;
+ cJSON *p = NULL;
+ cJSON *a = NULL;
+
+ if ((count < 0) || (numbers == NULL))
+ {
+ return NULL;
+ }
+
+ a = cJSON_CreateArray();
+
+ for(i = 0; a && (i < (size_t)count); i++)
+ {
+ n = cJSON_CreateNumber((double)numbers[i]);
+ if(!n)
+ {
+ cJSON_Delete(a);
+ return NULL;
+ }
+ if(!i)
+ {
+ a->child = n;
+ }
+ else
+ {
+ suffix_object(p, n);
+ }
+ p = n;
+ }
+
+ return a;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count)
+{
+ size_t i = 0;
+ cJSON *n = NULL;
+ cJSON *p = NULL;
+ cJSON *a = NULL;
+
+ if ((count < 0) || (numbers == NULL))
+ {
+ return NULL;
+ }
+
+ a = cJSON_CreateArray();
+
+ for(i = 0;a && (i < (size_t)count); i++)
+ {
+ n = cJSON_CreateNumber(numbers[i]);
+ if(!n)
+ {
+ cJSON_Delete(a);
+ return NULL;
+ }
+ if(!i)
+ {
+ a->child = n;
+ }
+ else
+ {
+ suffix_object(p, n);
+ }
+ p = n;
+ }
+
+ return a;
+}
+
+CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char **strings, int count)
+{
+ size_t i = 0;
+ cJSON *n = NULL;
+ cJSON *p = NULL;
+ cJSON *a = NULL;
+
+ if ((count < 0) || (strings == NULL))
+ {
+ return NULL;
+ }
+
+ a = cJSON_CreateArray();
+
+ for (i = 0; a && (i < (size_t)count); i++)
+ {
+ n = cJSON_CreateString(strings[i]);
+ if(!n)
+ {
+ cJSON_Delete(a);
+ return NULL;
+ }
+ if(!i)
+ {
+ a->child = n;
+ }
+ else
+ {
+ suffix_object(p,n);
+ }
+ p = n;
+ }
+
+ return a;
+}
+
+/* Duplication */
+CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse)
+{
+ cJSON *newitem = NULL;
+ cJSON *child = NULL;
+ cJSON *next = NULL;
+ cJSON *newchild = NULL;
+
+ /* Bail on bad ptr */
+ if (!item)
+ {
+ goto fail;
+ }
+ /* Create new item */
+ newitem = cJSON_New_Item(&global_hooks);
+ if (!newitem)
+ {
+ goto fail;
+ }
+ /* Copy over all vars */
+ newitem->type = item->type & (~cJSON_IsReference);
+ newitem->valueint = item->valueint;
+ newitem->valuedouble = item->valuedouble;
+ if (item->valuestring)
+ {
+ newitem->valuestring = (char*)cJSON_strdup((unsigned char*)item->valuestring, &global_hooks);
+ if (!newitem->valuestring)
+ {
+ goto fail;
+ }
+ }
+ if (item->string)
+ {
+ newitem->string = (item->type&cJSON_StringIsConst) ? item->string : (char*)cJSON_strdup((unsigned char*)item->string, &global_hooks);
+ if (!newitem->string)
+ {
+ goto fail;
+ }
+ }
+ /* If non-recursive, then we're done! */
+ if (!recurse)
+ {
+ return newitem;
+ }
+ /* Walk the ->next chain for the child. */
+ child = item->child;
+ while (child != NULL)
+ {
+ newchild = cJSON_Duplicate(child, true); /* Duplicate (with recurse) each item in the ->next chain */
+ if (!newchild)
+ {
+ goto fail;
+ }
+ if (next != NULL)
+ {
+ /* If newitem->child already set, then crosswire ->prev and ->next and move on */
+ next->next = newchild;
+ newchild->prev = next;
+ next = newchild;
+ }
+ else
+ {
+ /* Set newitem->child and move to it */
+ newitem->child = newchild;
+ next = newchild;
+ }
+ child = child->next;
+ }
+
+ return newitem;
+
+fail:
+ if (newitem != NULL)
+ {
+ cJSON_Delete(newitem);
+ }
+
+ return NULL;
+}
+
+CJSON_PUBLIC(void) cJSON_Minify(char *json)
+{
+ unsigned char *into = (unsigned char*)json;
+
+ if (json == NULL)
+ {
+ return;
+ }
+
+ while (*json)
+ {
+ if (*json == ' ')
+ {
+ json++;
+ }
+ else if (*json == '\t')
+ {
+ /* Whitespace characters. */
+ json++;
+ }
+ else if (*json == '\r')
+ {
+ json++;
+ }
+ else if (*json=='\n')
+ {
+ json++;
+ }
+ else if ((*json == '/') && (json[1] == '/'))
+ {
+ /* double-slash comments, to end of line. */
+ while (*json && (*json != '\n'))
+ {
+ json++;
+ }
+ }
+ else if ((*json == '/') && (json[1] == '*'))
+ {
+ /* multiline comments. */
+ while (*json && !((*json == '*') && (json[1] == '/')))
+ {
+ json++;
+ }
+ json += 2;
+ }
+ else if (*json == '\"')
+ {
+ /* string literals, which are \" sensitive. */
+ *into++ = (unsigned char)*json++;
+ while (*json && (*json != '\"'))
+ {
+ if (*json == '\\')
+ {
+ *into++ = (unsigned char)*json++;
+ }
+ *into++ = (unsigned char)*json++;
+ }
+ *into++ = (unsigned char)*json++;
+ }
+ else
+ {
+ /* All other characters. */
+ *into++ = (unsigned char)*json++;
+ }
+ }
+
+ /* and null-terminate. */
+ *into = '\0';
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_Invalid;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_False;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xff) == cJSON_True;
+}
+
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & (cJSON_True | cJSON_False)) != 0;
+}
+CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_NULL;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_Number;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_String;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_Array;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_Object;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item)
+{
+ if (item == NULL)
+ {
+ return false;
+ }
+
+ return (item->type & 0xFF) == cJSON_Raw;
+}
+
+CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * const b, const cJSON_bool case_sensitive)
+{
+ if ((a == NULL) || (b == NULL) || ((a->type & 0xFF) != (b->type & 0xFF)) || cJSON_IsInvalid(a))
+ {
+ return false;
+ }
+
+ /* check if type is valid */
+ switch (a->type & 0xFF)
+ {
+ case cJSON_False:
+ case cJSON_True:
+ case cJSON_NULL:
+ case cJSON_Number:
+ case cJSON_String:
+ case cJSON_Raw:
+ case cJSON_Array:
+ case cJSON_Object:
+ break;
+
+ default:
+ return false;
+ }
+
+ /* identical objects are equal */
+ if (a == b)
+ {
+ return true;
+ }
+
+ switch (a->type & 0xFF)
+ {
+ /* in these cases and equal type is enough */
+ case cJSON_False:
+ case cJSON_True:
+ case cJSON_NULL:
+ return true;
+
+ case cJSON_Number:
+ if (a->valuedouble == b->valuedouble)
+ {
+ return true;
+ }
+ return false;
+
+ case cJSON_String:
+ case cJSON_Raw:
+ if ((a->valuestring == NULL) || (b->valuestring == NULL))
+ {
+ return false;
+ }
+ if (strcmp(a->valuestring, b->valuestring) == 0)
+ {
+ return true;
+ }
+
+ return false;
+
+ case cJSON_Array:
+ {
+ cJSON *a_element = a->child;
+ cJSON *b_element = b->child;
+
+ for (; (a_element != NULL) && (b_element != NULL);)
+ {
+ if (!cJSON_Compare(a_element, b_element, case_sensitive))
+ {
+ return false;
+ }
+
+ a_element = a_element->next;
+ b_element = b_element->next;
+ }
+
+ /* one of the arrays is longer than the other */
+ if (a_element != b_element) {
+ return false;
+ }
+
+ return true;
+ }
+
+ case cJSON_Object:
+ {
+ cJSON *a_element = NULL;
+ cJSON *b_element = NULL;
+ cJSON_ArrayForEach(a_element, a)
+ {
+ /* TODO This has O(n^2) runtime, which is horrible! */
+ b_element = get_object_item(b, a_element->string, case_sensitive);
+ if (b_element == NULL)
+ {
+ return false;
+ }
+
+ if (!cJSON_Compare(a_element, b_element, case_sensitive))
+ {
+ return false;
+ }
+ }
+
+ /* doing this twice, once on a and b to prevent true comparison if a subset of b
+ * TODO: Do this the proper way, this is just a fix for now */
+ cJSON_ArrayForEach(b_element, b)
+ {
+ a_element = get_object_item(a, b_element->string, case_sensitive);
+ if (a_element == NULL)
+ {
+ return false;
+ }
+
+ if (!cJSON_Compare(b_element, a_element, case_sensitive))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ default:
+ return false;
+ }
+}
+
+CJSON_PUBLIC(void *) cJSON_malloc(size_t size)
+{
+ return global_hooks.allocate(size);
+}
+
+CJSON_PUBLIC(void) cJSON_free(void *object)
+{
+ global_hooks.deallocate(object);
+}
diff --git a/app/help/cJSON.h b/app/help/cJSON.h
new file mode 100644
index 0000000..8d45390
--- /dev/null
+++ b/app/help/cJSON.h
@@ -0,0 +1,285 @@
+/*
+ Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+*/
+
+#ifndef cJSON__h
+#define cJSON__h
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#if !defined(__WINDOWS__) && (defined(WIN32) || defined(WIN64) || defined(_MSC_VER) || defined(_WIN32))
+#define __WINDOWS__
+#endif
+
+#ifdef __WINDOWS__
+
+/* When compiling for windows, we specify a specific calling convention to avoid issues where we are being called from a project with a different default calling convention. For windows you have 3 define options:
+
+CJSON_HIDE_SYMBOLS - Define this in the case where you don't want to ever dllexport symbols
+CJSON_EXPORT_SYMBOLS - Define this on library build when you want to dllexport symbols (default)
+CJSON_IMPORT_SYMBOLS - Define this if you want to dllimport symbol
+
+For *nix builds that support visibility attribute, you can define similar behavior by
+
+setting default visibility to hidden by adding
+-fvisibility=hidden (for gcc)
+or
+-xldscope=hidden (for sun cc)
+to CFLAGS
+
+then using the CJSON_API_VISIBILITY flag to "export" the same symbols the way CJSON_EXPORT_SYMBOLS does
+
+*/
+
+#define CJSON_CDECL __cdecl
+#define CJSON_STDCALL __stdcall
+
+/* export symbols by default, this is necessary for copy pasting the C and header file */
+#if !defined(CJSON_HIDE_SYMBOLS) && !defined(CJSON_IMPORT_SYMBOLS) && !defined(CJSON_EXPORT_SYMBOLS)
+#define CJSON_EXPORT_SYMBOLS
+#endif
+
+#if defined(CJSON_HIDE_SYMBOLS)
+#define CJSON_PUBLIC(type) type CJSON_STDCALL
+#elif defined(CJSON_EXPORT_SYMBOLS)
+#define CJSON_PUBLIC(type) __declspec(dllexport) type CJSON_STDCALL
+#elif defined(CJSON_IMPORT_SYMBOLS)
+#define CJSON_PUBLIC(type) __declspec(dllimport) type CJSON_STDCALL
+#endif
+#else /* !__WINDOWS__ */
+#define CJSON_CDECL
+#define CJSON_STDCALL
+
+#if (defined(__GNUC__) || defined(__SUNPRO_CC) || defined (__SUNPRO_C)) && defined(CJSON_API_VISIBILITY)
+#define CJSON_PUBLIC(type) __attribute__((visibility("default"))) type
+#else
+#define CJSON_PUBLIC(type) type
+#endif
+#endif
+
+/* project version */
+#define CJSON_VERSION_MAJOR 1
+#define CJSON_VERSION_MINOR 7
+#define CJSON_VERSION_PATCH 8
+
+#include <stddef.h>
+
+/* cJSON Types: */
+#define cJSON_Invalid (0)
+#define cJSON_False (1 << 0)
+#define cJSON_True (1 << 1)
+#define cJSON_NULL (1 << 2)
+#define cJSON_Number (1 << 3)
+#define cJSON_String (1 << 4)
+#define cJSON_Array (1 << 5)
+#define cJSON_Object (1 << 6)
+#define cJSON_Raw (1 << 7) /* raw json */
+
+#define cJSON_IsReference 256
+#define cJSON_StringIsConst 512
+
+/* The cJSON structure: */
+typedef struct cJSON
+{
+ /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */
+ struct cJSON *next;
+ struct cJSON *prev;
+ /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */
+ struct cJSON *child;
+
+ /* The type of the item, as above. */
+ int type;
+
+ /* The item's string, if type==cJSON_String and type == cJSON_Raw */
+ char *valuestring;
+ /* writing to valueint is DEPRECATED, use cJSON_SetNumberValue instead */
+ int valueint;
+ /* The item's number, if type==cJSON_Number */
+ double valuedouble;
+
+ /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */
+ char *string;
+} cJSON;
+
+typedef struct cJSON_Hooks
+{
+ /* malloc/free are CDECL on Windows regardless of the default calling convention of the compiler, so ensure the hooks allow passing those functions directly. */
+ void *(CJSON_CDECL *malloc_fn)(size_t sz);
+ void (CJSON_CDECL *free_fn)(void *ptr);
+} cJSON_Hooks;
+
+typedef int cJSON_bool;
+
+/* Limits how deeply nested arrays/objects can be before cJSON rejects to parse them.
+ * This is to prevent stack overflows. */
+#ifndef CJSON_NESTING_LIMIT
+#define CJSON_NESTING_LIMIT 1000
+#endif
+
+/* returns the version of cJSON as a string */
+CJSON_PUBLIC(const char*) cJSON_Version(void);
+
+/* Supply malloc, realloc and free functions to cJSON */
+CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks);
+
+/* Memory Management: the caller is always responsible to free the results from all variants of cJSON_Parse (with cJSON_Delete) and cJSON_Print (with stdlib free, cJSON_Hooks.free_fn, or cJSON_free as appropriate). The exception is cJSON_PrintPreallocated, where the caller has full responsibility of the buffer. */
+/* Supply a block of JSON, and this returns a cJSON object you can interrogate. */
+CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value);
+/* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */
+/* If you supply a ptr in return_parse_end and parsing fails, then return_parse_end will contain a pointer to the error so will match cJSON_GetErrorPtr(). */
+CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated);
+
+/* Render a cJSON entity to text for transfer/storage. */
+CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item);
+/* Render a cJSON entity to text for transfer/storage without any formatting. */
+CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item);
+/* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces reallocation. fmt=0 gives unformatted, =1 gives formatted */
+CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt);
+/* Render a cJSON entity to text using a buffer already allocated in memory with given length. Returns 1 on success and 0 on failure. */
+/* NOTE: cJSON is not always 100% accurate in estimating how much memory it will use, so to be safe allocate 5 bytes more than you actually need */
+CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buffer, const int length, const cJSON_bool format);
+/* Delete a cJSON entity and all subentities. */
+CJSON_PUBLIC(void) cJSON_Delete(cJSON *c);
+
+/* Returns the number of items in an array (or object). */
+CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array);
+/* Retrieve item number "index" from array "array". Returns NULL if unsuccessful. */
+CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index);
+/* Get item "string" from object. Case insensitive. */
+CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string);
+CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const string);
+CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string);
+/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */
+CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void);
+
+/* Check if the item is a string and return its valuestring */
+CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item);
+
+/* These functions check the type of an item */
+CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item);
+CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item);
+
+/* These calls create a cJSON item of the appropriate type. */
+CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void);
+CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void);
+CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void);
+CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool boolean);
+CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num);
+CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string);
+/* raw json */
+CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw);
+CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void);
+CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void);
+
+/* Create a string where valuestring references a string so
+ * it will not be freed by cJSON_Delete */
+CJSON_PUBLIC(cJSON *) cJSON_CreateStringReference(const char *string);
+/* Create an object/arrray that only references it's elements so
+ * they will not be freed by cJSON_Delete */
+CJSON_PUBLIC(cJSON *) cJSON_CreateObjectReference(const cJSON *child);
+CJSON_PUBLIC(cJSON *) cJSON_CreateArrayReference(const cJSON *child);
+
+/* These utilities create an Array of count items. */
+CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count);
+CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count);
+CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count);
+CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char **strings, int count);
+
+/* Append item to the specified array/object. */
+CJSON_PUBLIC(void) cJSON_AddItemToArray(cJSON *array, cJSON *item);
+CJSON_PUBLIC(void) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);
+/* Use this when string is definitely const (i.e. a literal, or as good as), and will definitely survive the cJSON object.
+ * WARNING: When this function was used, make sure to always check that (item->type & cJSON_StringIsConst) is zero before
+ * writing to `item->string` */
+CJSON_PUBLIC(void) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item);
+/* Append reference to item to the specified array/object. Use this when you want to add an existing cJSON to a new cJSON, but don't want to corrupt your existing cJSON. */
+CJSON_PUBLIC(void) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item);
+CJSON_PUBLIC(void) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item);
+
+/* Remove/Detatch items from Arrays/Objects. */
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item);
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which);
+CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which);
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char *string);
+CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *object, const char *string);
+CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char *string);
+CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object, const char *string);
+
+/* Update array items. */
+CJSON_PUBLIC(void) cJSON_InsertItemInArray(cJSON *array, int which, cJSON *newitem); /* Shifts pre-existing items to the right. */
+CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent, cJSON * const item, cJSON * replacement);
+CJSON_PUBLIC(void) cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newitem);
+CJSON_PUBLIC(void) cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem);
+CJSON_PUBLIC(void) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *object,const char *string,cJSON *newitem);
+
+/* Duplicate a cJSON item */
+CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse);
+/* Duplicate will create a new, identical cJSON item to the one you pass, in new memory that will
+need to be released. With recurse!=0, it will duplicate any children connected to the item.
+The item->next and ->prev pointers are always zero on return from Duplicate. */
+/* Recursively compare two cJSON items for equality. If either a or b is NULL or invalid, they will be considered unequal.
+ * case_sensitive determines if object keys are treated case sensitive (1) or case insensitive (0) */
+CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * const b, const cJSON_bool case_sensitive);
+
+
+CJSON_PUBLIC(void) cJSON_Minify(char *json);
+
+/* Helper functions for creating and adding items to an object at the same time.
+ * They return the added item or NULL on failure. */
+CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name);
+CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name);
+CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name);
+CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const char * const name, const cJSON_bool boolean);
+CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number);
+CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string);
+CJSON_PUBLIC(cJSON*) cJSON_AddRawToObject(cJSON * const object, const char * const name, const char * const raw);
+CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const char * const name);
+CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const char * const name);
+
+/* When assigning an integer value, it needs to be propagated to valuedouble too. */
+#define cJSON_SetIntValue(object, number) ((object) ? (object)->valueint = (object)->valuedouble = (number) : (number))
+/* helper for the cJSON_SetNumberValue macro */
+CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number);
+#define cJSON_SetNumberValue(object, number) ((object != NULL) ? cJSON_SetNumberHelper(object, (double)number) : (number))
+
+/* Macro for iterating over an array or object */
+#define cJSON_ArrayForEach(element, array) for(element = (array != NULL) ? (array)->child : NULL; element != NULL; element = element->next)
+
+/* malloc/free objects using the malloc/free functions that have been set with cJSON_InitHooks */
+CJSON_PUBLIC(void *) cJSON_malloc(size_t size);
+CJSON_PUBLIC(void) cJSON_free(void *object);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/app/help/genhelp.c b/app/help/genhelp.c
index 7f79330..be20ff4 100644
--- a/app/help/genhelp.c
+++ b/app/help/genhelp.c
@@ -1,6 +1,6 @@
/* XTrkCad - Model Railroad CAD
- * Copyright (C) 2005 Dave Bullis
+ * Copyright (C) 2018 Martin Fischer
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,197 +16,123 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-//#ifdef WINDOWS
-#include <stdlib.h>
-//#endif
+#include <stdlib.h>
#include <stdio.h>
#include <string.h>
+#include "cJSON.h"
#define I18NHEADERFILE "i18n.h"
-typedef enum { MSWPOPUP, XVINFO, BALLOONHELP, HPJALIAS, ALIASREF, ALIASDEF, DEFINE, BALLOONHELPI18N } mode_e;
+typedef enum { BALLOONHELP, BALLOONHELPI18N } mode_e;
-void remap_minus( char * cp )
+int process(mode_e mode, char * json, FILE * outFile)
{
- for ( ; *cp; cp++ )
- if ( *cp == '-' )
- *cp = '_';
-}
+ const cJSON *messages = NULL;
+ const cJSON *messageLine = NULL;
+ int status = 0;
-void process( mode_e mode, FILE * inFile, FILE * outFile )
-{
- char line[256];
- char * cp;
- char * contents;
- char * alias;
- char * extHelp;
- int lineNum;
- int len;
-
- switch ( mode ) {
- case MSWPOPUP:
- break;
- case XVINFO:
- break;
- case BALLOONHELP:
- case BALLOONHELPI18N:
- fputs( "/*\n * DO NOT EDIT! This file has been automatically created by genhelp.\n * Changes to this file will be overwritten.\n */\n", outFile );
- fprintf( outFile, "#include <stdio.h>\n" );
- fprintf( outFile, "#include \"wlib.h\"\n" );
- if( mode == BALLOONHELPI18N )
- fprintf( outFile, "#include \"" I18NHEADERFILE "\"\n" );
-
- fprintf( outFile, "wBalloonHelp_t balloonHelp[] = {\n\n" );
- break;
- case HPJALIAS:
- fprintf( outFile, "[ALIAS]\r\n" );
- break;
- case ALIASREF:
- break;
- case ALIASDEF:
- break;
- case DEFINE:
- break;
- }
-
- lineNum = 0;
- while ( fgets( line, sizeof line, inFile ) != NULL ) {
- lineNum++;
- if (line[0] == '#')
- continue;
- len = (int)strlen( line );
- if (line[len-1] == '\n' ) len--;
- if (line[len-1] == '\r' ) len--;
- line[len] = '\0';
- if (len == 0)
- continue;
- contents = strchr( line, '\t' );
- if (contents == NULL) {
- fprintf( stderr, "Not tab on line %d\n%s\n", lineNum, line );
- continue;
- }
- *contents++ = '\0';
- alias = strchr( contents, '\t' );
- if (alias != NULL) {
- *alias++ = '\0';
- extHelp = strchr( alias, '\t' );
- if (extHelp != NULL) {
- *extHelp++ = '\0';
- }
- }
- switch ( mode ) {
- case MSWPOPUP:
- remap_minus( line );
- remap_minus( contents );
- fprintf( outFile, "\\page #{\\footnote _%s}\r\n", line );
- for ( cp=contents; *cp; cp++ ) {
- if ( (*cp) & 0x80 ) {
- fprintf( outFile, "\\'%2.2X", (unsigned char)*cp );
- } else {
- fprintf( outFile, "%c", *cp );
- }
- }
- fprintf( outFile, "\r\n" );
- break;
- case XVINFO:
- if ( *contents )
- fprintf( outFile, ":%s\n%s\n", line, contents );
- break;
- case BALLOONHELP:
- case BALLOONHELPI18N:
- if ( *contents )
- if( mode == BALLOONHELP )
- fprintf( outFile, "\t{ \"%s\", \"%s\" },\n", line, contents );
- else
- fprintf( outFile, "\t{ \"%s\", N_(\"%s\") },\n", line, contents );
- else
- fprintf( outFile, "\t{ \"%s\" },\n", line );
- break;
- case HPJALIAS:
- if (alias && *alias) {
- remap_minus( line );
- remap_minus( alias );
- fprintf( outFile, "%s=%s\r\n", line, alias );
- }
- break;
- case ALIASREF:
- if (alias && *alias)
- fprintf( outFile, "%s\n", alias );
- break;
- case ALIASDEF:
- if (alias && *alias)
- fprintf( outFile, "%s\n", line );
- break;
- case DEFINE:
- fprintf( outFile, "%s\n", line );
- break;
- }
- }
-
- switch ( mode ) {
- case MSWPOPUP:
- break;
- case XVINFO:
- fprintf( outFile, ":\n" );
- break;
- case BALLOONHELP:
- case BALLOONHELPI18N:
- fprintf( outFile, "\n { NULL, NULL } };\n" );
- break;
- case HPJALIAS:
- break;
- case ALIASREF:
- break;
- case ALIASDEF:
- break;
- case DEFINE:
- break;
- }
+ cJSON *message_json = cJSON_Parse(json);
+ if (message_json == NULL) {
+ const char *error_ptr = cJSON_GetErrorPtr();
+ if (error_ptr != NULL) {
+ fprintf(stderr, "Error before: %s\n", error_ptr);
+ }
+ status = 0;
+ goto end;
+ }
+
+ fputs("/*\n * DO NOT EDIT! This file has been automatically created by genhelp.\n * Changes to this file will be overwritten.\n */\n",
+ outFile);
+ fprintf(outFile, "#include <stdio.h>\n");
+ fprintf(outFile, "#include \"wlib.h\"\n");
+ if (mode == BALLOONHELPI18N) {
+ fprintf(outFile, "#include \"" I18NHEADERFILE "\"\n");
+ }
+
+ fprintf(outFile, "wBalloonHelp_t balloonHelp[] = {\n");
+
+
+ messages = cJSON_GetObjectItemCaseSensitive(message_json, "messages");
+ cJSON_ArrayForEach(messageLine, messages) {
+ cJSON *line = cJSON_GetObjectItemCaseSensitive(messageLine, "line");
+ cJSON *contents = cJSON_GetObjectItemCaseSensitive(messageLine, "contents");
+ if (!cJSON_IsString(line) || !cJSON_IsString(contents)) {
+ status = 0;
+ goto end;
+ }
+
+ if (contents->valuestring != NULL) {
+ if (mode == BALLOONHELP) {
+ fprintf(outFile, "\t{ \"%s\", \"%s\" },\n", line->valuestring,
+ contents->valuestring);
+ } else {
+ if (contents->valuestring[0]) {
+ fprintf(outFile, "\t{ \"%s\", N_(\"%s\") },\n", line->valuestring,
+ contents->valuestring);
+ } else {
+ fprintf(outFile, "\t{ \"%s\", \"\" },\n", line->valuestring);
+ }
+ }
+ } else {
+ fprintf(outFile, "\t{ \"%s\", \"No help\" },\n", line->valuestring);
+ fprintf(stderr, "INFO: %s has an empty help text\n", line->valuestring);
+ }
+ }
+
+ fprintf(outFile, "\t{ NULL, NULL } };\n");
+end:
+ cJSON_Delete(message_json);
+ return status;
}
-int main ( int argc, char * argv[] )
+int main(int argc, char * argv[])
{
- FILE * inFile, * outFile;
- mode_e mode;
- if ( argc != 4 ) {
- fprintf( stderr, "Usage: %s (-msw|-xv|-bh|-hpj|-ref) INFILE OUTFILE\n", argv[0] );
- exit(1);
- }
- if ( strcmp( argv[1], "-msw" ) == 0 )
- mode = MSWPOPUP;
- else if ( strcmp( argv[1], "-xv" ) == 0 )
- mode = XVINFO;
- else if ( strcmp( argv[1], "-bh" ) == 0 )
- mode = BALLOONHELP;
- else if ( strcmp( argv[1], "-bhi" ) == 0 )
- mode = BALLOONHELPI18N;
- else if ( strcmp( argv[1], "-hpj" ) == 0 )
- mode = HPJALIAS;
- else if ( strcmp( argv[1], "-aliasref" ) == 0 )
- mode = ALIASREF;
- else if ( strcmp( argv[1], "-aliasdef" ) == 0 )
- mode = ALIASDEF;
- else if ( strcmp( argv[1], "-define" ) == 0 )
- mode = DEFINE;
- else {
- fprintf( stderr, "Bad mode: %s\n", argv[1] );
- exit(1);
- }
-
- inFile = fopen( argv[2], "r" );
- if (inFile == NULL) {
- perror( argv[2] );
- exit(1);
- }
- outFile = fopen( argv[3], "w" );
- if (outFile == NULL) {
- perror( argv[3] );
- exit(1);
- }
-
- process( mode, inFile, outFile );
- exit(0);
+ FILE * inFile, * outFile;
+ char *jsonData;
+
+ mode_e mode;
+ if (argc != 4) {
+ fprintf(stderr, "Usage: %s (-bh|-bhi) JSONFILE OUTFILE\n", argv[0]);
+ exit(1);
+ }
+
+ if (strcmp(argv[1], "-bh") == 0) {
+ mode = BALLOONHELP;
+ } else if (strcmp(argv[1], "-bhi") == 0) {
+ mode = BALLOONHELPI18N;
+ } else {
+ fprintf(stderr, "Bad mode: %s\n", argv[1]);
+ exit(1);
+ }
+
+ inFile = fopen(argv[2], "r");
+ if (inFile == NULL) {
+ perror(argv[2]);
+ exit(1);
+ }
+
+ if (inFile) {
+ unsigned int length;
+ fseek(inFile, 0, SEEK_END);
+ length = ftell(inFile);
+ fseek(inFile, 0, SEEK_SET);
+ jsonData = malloc(length + 1);
+ if (jsonData) {
+ fread(jsonData, 1, length, inFile);
+ jsonData[length] = '\0';
+ }
+ fclose(inFile);
+ }
+
+ outFile = fopen(argv[3], "w");
+ if (outFile == NULL) {
+ perror(argv[3]);
+ exit(1);
+ }
+
+ int ret = process(mode, jsonData, outFile);
+ exit(ret);
}
diff --git a/app/help/genhelp.in b/app/help/genhelp.in
deleted file mode 100644
index 3364354..0000000
--- a/app/help/genhelp.in
+++ /dev/null
@@ -1,728 +0,0 @@
-Help Invokes on-line help for this dialog
-cancel Cancels this command
-Close Closes the dialog
-#
-cmdAbout About box dialog
-cmdAbove Move Selected object to top
-cmdAddElevations Raise or Lower all Selected tracks
-cmdBelow Move Selected object to bottom
-cmdBlockCreate Create a section of track for automation
-cmdBlockEdit Edit a Block Definition
-cmdCarDesc Create a new Car/Loco description
-cmdCarInventory Manage your Car and Loco Inventory
-cmdCircleCenter Create track circle from center cmdCircle
-cmdCircleFixedRadius Create fixed radius track circle cmdCircle
-#cmdCircleMode Default Circle creation mode cmdCircle
-cmdCircleSetCmd Set Circle Track creation mode cmdCircle
-cmdCircleTangent Create track circle from tangent cmdCircle
-cmdClearElevations Removes elevation from Selected tracks
-cmdCmdopt Command Options dialog
-cmdColor Controls colors
-cmdConnect Connect two tracks
-cmdControl Create a control for layout automation
-cmdContmgm Manage control elements
-cmdCopy Copy selected objects to clipboard
-cmdCurveCenter Create curved track from center cmdCurve
-cmdCurveChord Create curved track from chord cmdCurve
-cmdCurveEndPt Create curved track from end-point cmdCurve
-cmdBezier Create Bezier track cmdCurve
-cmdCurveSetCmd Set Curve Track creation mode cmdCurve
-cmdCurveTangent Create curved track from tangent cmdCurve
-cmdCustmgm Manipulate Custom designer entries
-cmdCut Moves selected objects to clipboard
-cmdDelete Delete objects
-cmdDemo Playback demos
-cmdDescribe Change Object Properties
-cmdDeselectAll Deselect all selected objects cmdSelect
-cmdDisplay Change Display parameters
-cmdDrawBench Create benchwork cmdDraw
-cmdDrawBox Create a box cmdDraw
-cmdDrawCircleSetCmd Set Circle drawing command cmdDraw
-cmdDrawCircle Create a circle cmdDraw
-cmdDrawCircleCenter Draw a circle line from center cmdDraw
-cmdDrawCircleFixedRadius Draw a fixed radius circle line cmdDraw
-cmdDrawCircleTangent Draw a circle line from tangent cmdDraw
-cmdDrawCurveSetCmd Set Curve drawing command cmdDraw
-cmdDrawCurve Create a curved line cmdDraw
-cmdDrawCurveEndPt Create a curved line from End cmdDraw
-cmdDrawCurveCenter Create a curved line from center cmdDraw
-cmdDrawCurveChord Create a curved line from chord cmdDraw
-cmdDrawCurveTangent Create a curved line from tangent cmdDraw
-cmdDrawBezierCurve Create a Bezier line cmdDraw
-cmdDrawDimLine Create a dimension line cmdDraw
-cmdDrawFilledBox Create a filled box cmdDraw
-cmdDrawFilledCurve Create a filled circle cmdDraw
-cmdDrawFilledCircleCenter Draw a filled circle from center cmdDraw
-cmdDrawFilledCircleFixedRadius Draw a fixed radius filled circle cmdDraw
-cmdDrawFilledCircleTangent Draw a filled circle from tangent cmdDraw
-cmdDrawPolygon Create a filled polygon cmdDraw
-cmdDrawPolyline Create a polyline cmdDraw
-cmdDrawLine Create a straight line cmdDraw
-cmdDrawLineSetCmd Set Line drawing command cmdDraw
-cmdDrawShapeSetCmd Set Shape drawing command cmdDraw
-cmdDrawTableEdge Draw table edge cmdDraw
-cmdEasement Easement menu
-cmdElevation Change Elevations
-cmdEnumerate Generate a Parts List of selected objects
-cmdExport Export a .xti file
-cmdExportDXF Export a DXF file
-cmdFileNote General note about the layout
-cmdFlip Flip selected objects
-cmdGrid Adjust snap grid
-cmdGridEnable Enable snap grid cmdGrid
-cmdGridShow Show snap grid cmdGrid
-cmdGroup Create a structure from a Group of objects
-cmdHandLaidTurnout Create a hand-laid turnout
-cmdHelix Create a track helix
-#cmdHotBar Place a turnout or structure
-cmdImport Import a .xti file cmdExport
-cmdJoin Join two tracks
-cmdLayer Change Layers
-cmdLayerSet Selects the current drawing layer cmdLayer
-#cmdLayerShow0 Shows or hides layers cmdLayer
-#cmdLayerShow1 Shows or hides layers cmdLayer
-#cmdLayerShow10 Shows or hides layers cmdLayer
-#cmdLayerShow11 Shows or hides layers cmdLayer
-#cmdLayerShow12 Shows or hides layers cmdLayer
-#cmdLayerShow13 Shows or hides layers cmdLayer
-#cmdLayerShow14 Shows or hides layers cmdLayer
-#cmdLayerShow15 Shows or hides layers cmdLayer
-#cmdLayerShow16 Shows or hides layers cmdLayer
-#cmdLayerShow17 Shows or hides layers cmdLayer
-#cmdLayerShow18 Shows or hides layers cmdLayer
-#cmdLayerShow19 Shows or hides layers cmdLayer
-#cmdLayerShow2 Shows or hides layers cmdLayer
-#cmdLayerShow3 Shows or hides layers cmdLayer
-#cmdLayerShow4 Shows or hides layers cmdLayer
-#cmdLayerShow5 Shows or hides layers cmdLayer
-#cmdLayerShow6 Shows or hides layers cmdLayer
-#cmdLayerShow7 Shows or hides layers cmdLayer
-#cmdLayerShow8 Shows or hides layers cmdLayer
-#cmdLayerShow9 Shows or hides layers cmdLayer
-cmdLayout Layout parameters
-#cmdLoosen Disconnect tracks at loose joints nohelp
-cmdMapShow Show/Hide Map Window
-cmdModify Modify or extend a track
-cmdMove Move selected objects
-cmdMoveLabel Move a label
-cmdMoveToCurrentLayer Move selected objects to current layer
-cmdNote Place a note on the layout
-cmdOutputbitmap Print a BitMap
-cmdPan Pan or Zoom the Layout
-cmdParallel Create a parallel track
-cmdParameter Register register
-cmdPaste Copy objects from clipboard
-cmdPref Perferences dialog
-cmdPricelist Display prices of turnouts, sectional tracks and structures
-cmdPrint Print the layout
-cmdPrmfile Loads and unloads parameter files
-cmdProfile Elevation Profile Command
-cmdProfileDraw Profile cmdProfile
-cmdRecord Command recorder
-cmdRedo Redo last undo
-cmdRefreshCompound Update selected Turnout and Structure definitions
-cmdRescale Rescale selected objects
-cmdRotate Rotate selected object(s)
-cmdRuler Show a ruler
-cmdSelect Select objects
-cmdSelectAll Selects all objects on the layout cmdSelect
-cmdSelectCurrentLayer Selects all objects in the current Layer layer
-cmdSelectInvert Invert current selection
-cmdSplitTrack Split a track
-cmdSelectOrphaned Select stranded (unconnected) track pieces
-cmdSensor Create a sensor (ie. a occupancy detector or a toggle switch)
-cmdSignal Create a signal for train control
-cmdSticky Choose which commands are sticky
-cmdStraight Create straight track
-cmdStructure Place a structure on the layout
-cmdSwitchMotorCreate Create a switchmotor for turnout control
-cmdSwitchMotorEdit Edit a switchmotor definition
-cmdText Enter text on the layout
-cmdTextSize Controls the size of the entered text cmdText
-#cmdTighten Remove slack from connected tracks
-cmdTip Tip of the Day window
-cmdTrain Run Trains
-cmdTrainPause Pause/Resume Trains cmdTrain
-cmdTrainNewCar Place a car on the layout cmdTrain
-cmdTrainExit Exit Trains cmdTrain
-cmdTunnel Hide/Unhide a track
-cmdTurnout Place a turnout or sectional track
-cmdTurnoutNew Create a new turnout definition
-cmdTurntable Place a turntable
-cmdUpdatetitle Updates old source files with 3 part titles
-cmdUndo Undo last command
-cmdUngroup Ungroup objects
-cmdWidth0 Draw tracks with thin lines editM
-cmdWidth2 Draw tracks with medium lines editM
-cmdWidth3 Draw tracks with thick lines editM
-cmdZoom Change drawing scale editZoom
-cmdZoomIn Zoom in editZoomIn
-cmdZoomOut Zoom out editZoomOut
-#
-#
-menuFile File Menu
-menuFile-save Save layout
-menuFile-saveAs Save layout under a new name
-menuFile-clear New layout
-menuFile-enum Generate parts list
-menuFile-load Load a layout
-menuFile-quit Exit the program
-menuFile-revert Revert to last saved state of layout plan
-#
-editM Edit menu
-menuEdit-redraw Redraw layout
-menuEdit-zoomIn Zoom in
-menuEdit-zoomOut Zoom out
-#
-toolsM Tools menu
-#
-menuView View menu
-menuToolbar Toolbar configuration
-#
-menuTools Tools menu
-#
-menuOption Options menu
-#
-menuMacro Playback/Record commands
-#
-menuWindow Window menu
-#
-menuHelp Help menu
-menuHelpRecentMessages Recent error messages and explanations menuHelp
-#
-#
-hotBarLeft Move Hot Bar left cmdHotBar
-hotBarRight Move Hot Bar right cmdHotBar
-infoBarCount Total track count statusBar
-infoBarPosX X Position of cursor statusBar
-infoBarPosY Y Position of cursor statusBar
-infoBarScale Drawing scale statusBar
-infoBarStatus Message and status line statusBar
-main-draw Main layout canvas
-mainDraw Main layout canvas
-main-canvas Main drawing canvas
-main-commandbar Command buttons
-main-menubar Menus
-main-titlebar Tile, Filename and Window Manager buttons
-main-hotbar Turnout and Structure Hot Bar
-main-layers Active layer list and layer buttons
-map-draw Map window
-map-hilight This is the portion of the layout shown in the Main Window canvas
-#
-#
-addElev-value Raise or Lower all Selected Track cmdAddElevations
-#
-block-name Name of block cmdBlockCreate
-block-script Script that the block will run cmdBlockCreate
-block-segments List of tracks in the Block cmdBlockEdit
-#
-carpart-ok Add or Update car object cmdCarInventory
-carpart-manuf Manufacturer name cmdCarInventory
-carpart-prototype Car Prototype cmdCarInventory
-carpart-prototype-list Car Prototype cmdCarInventory
-carpart-isLoco Is the Car a Locomotive? cmdCarInventory
-carpart-partno-list Part Number and Description cmdCarInventory
-carpart-partno Manufacturer Part Number cmdCarInventory
-carpart-import Use the Selected figure as the car image cmdCarInventory
-carpart-reset Use the default figure as the car image cmdCarInventory
-carpart-desc Optional description of the Car Part cmdCarInventory
-carpart-flip Flip car image cmdCarInventory
-carpart-dispmode Display Car Item information or reporting marks and dimensions cmdCarInventory
-carpart-road Full Roadname cmdCarInventory
-carpart-type Car Type cmdCarInventory
-carpart-protokind-list Car Type cmdCarInventory
-carpart-repmark Reporting Marks (Roadname abbreviation) cmdCarInventory
-carpart-number Car Number cmdCarInventory
-carpart-bodyColor Car body Color cmdCarInventory
-carpart-carLength Length of car body cmdCarInventory
-carpart-carWidth Width of car body cmdCarInventory
-carpart-trkCenter Distance between Trucks cmdCarInventory
-carpart-cplrMount Coupler are mounted on body or truck cmdCarInventory
-carpart-cpldLen Overall Coupled Length cmdCarInventory
-carpart-cplrLen Coupler Length from end of car cmdCarInventory
-carpart-canvas Diagram of Car cmdCarInventory
-carpart-index Item Index Number cmdCarInventory
-carpart-purchPrice Original Purchase Price cmdCarInventory
-carpart-currPrice Current Price cmdCarInventory
-carpart-condition Condition of car cmdCarInventory
-carpart-purchDate Original Purchase Date cmdCarInventory
-carpart-serviceDate Last Service Date cmdCarInventory
-carpart-quantity Number of identical cars to be entered cmdCarInventory
-carpart-multinum Do all the cars have the same Number? cmdCarInventory
-carpart-notes Notes about the car cmdCarInventory
-carpart-new Create a new car Part or Prototype definitions cmdCarInventory
-carpart-new-menu Create a new car Part or Prototype definitions cmdCarInventory
-
-#
-carinv-ok Finds the selected Car Item on the layout cmdCarInvertory
-carinv-sort1 Sort the Item list cmdCarInvertory
-carinv-sort2 Sort the Item list cmdCarInvertory
-carinv-sort3 Sort the Item list cmdCarInvertory
-carinv-sort4 Sort the Item list cmdCarInvertory
-carinv-list cmdCarInvertory
-carinv-edit Edit the selected Car Item cmdCarInvertory
-carinv-add Add a new Car Item cmdCarInvertory
-carinv-delete Delete the selected Car Items cmdCarInvertory
-carinv-import Import a Car Item .csv file cmdCarInvertory
-carinv-export Export a Car Item .csv file cmdCarInvertory
-carinv-savetext Create a text list of the Car Items cmdCarInvertory
-#
-circle-radius Specifies the radius of the circle track cmdCircle
-#
-cmdopt-move-quick How to draw track being moved/rotated cmdCmdopt
-cmdopt-preselect Default command is Describe or Select cmdCmdopt
-cmdopt-rightclickmode Action to invoke on Right-Click cmdCmdopt
-cmdopt-ok cmdCmdopt
-#
-contmgm-inx The list of control elements cmdContmgm
-contmgm-edit Edit the element cmdContmgm
-contmgm-delete Delete the element cmdContmgm
-#
-contents-label Contents Label for new Parameter file cmdCustmgm
-#
-custmgm-inx List of custom designed turnouts and structures cmdCustmgm
-custmgm-edit Invoke designer editor cmdCustmgm
-custmgm-delete Remove selected entries cmdCustmgm
-custmgm-export Copy selected entries to Parameter File cmdCustmgm
-custmgm-new Create a New part or prototype cmdCustmgm
-custmgm-ok Update custom file and close cmdCustmgm
-#
-demo-step Executes the next step of the demo cmdDemo
-demo-next Skip to next demo cmdDemo
-demo-quit Stops the demonstration and returns you to XTrackCAD cmdDemo
-demo-speed Select speed of Playback cmdDemo
-demo-text This is where comments about the demo are displayed cmdDemo
-#
-#Note all below have tab char after name
-describe-F1
-describe-F2
-describe-F3
-describe-F4
-describe-F5
-describe-F6
-describe-F7
-describe-F8
-describe-F9
-describe-F10
-describe-F11
-describe-F12
-describe-F13
-describe-F14
-describe-F15
-describe-F16
-describe-F17
-describe-F18
-describe-F19
-describe-F20
-describe-I1
-describe-I2
-describe-I3
-describe-I4
-describe-I5
-describe-S1
-describe-S2
-describe-S3
-describe-S4
-describe-Y1
-describe-C1
-describe-L1
-describe-L2
-describe-LE1
-describe-T1
-describe-P1
-#
-display-autoPan Move the Main canvas if you drag near the edge cmdDisplay
-display-color-layers Color tracks or other objects by layer
-display-tunnels Controls the drawing of hidden tracks cmdDisplay
-display-endpt Controls the drawing of End-Points cmdDisplay
-display-tiedraw How to draw track ties cmdDisplay
-display-centerdraw Show crosshair at center of curves cmdDisplay
-display-tworailscale Drawing scale when to draw tracks with 2 rails cmdDisplay
-display-mapscale Drawing scale of the map window cmdDisplay
-display-livemap Whether the main layout is updated while dragging on the Map cmdDisplay
-display-labelenable Enable labels for Turnouts, Flextrack Lengths and Elevations cmdDisplay
-display-labelscale When to label Turnout, Flextrack Lengths and Elevations cmdDisplay
-display-description-fontsize Font size for labels on layout cmdDisplay
-display-hotbarlabels Label elements on the Hot Bar cmdDisplay
-display-layoutlabels Label elements on layout cmdDisplay
-display-listlabels Label elements for lists cmdDisplay
-display-carhotbarlabels How to group cars on the Train Hot Bar cmdDisplay
-display-trainpause Delay (in mS) between updating train movements cmdDisplay
-display-hideTrainsInTunnels Don't show trains in tunnels when tunnels are hidden cmdDisplay
-display-unconnected-endpt Display unconnected endpoints of track with special marks cmdDisplay
-display-zoom-corner Whether zoom is locked to the bottom left corner or the center point cmdDisplay
-#display-ok Update the display cmdDisplay
-display-ok cmdDisplay
-#
-draw-linewidth Width of the lines cmdDraw
-draw-linecolor Color of the lines cmdDraw
-draw-benchlist List of types of Lumber cmdDraw
-draw-benchcolor Color of Benchwork cmdDraw
-draw-benchorient Orientation of Benchwork cmdDraw
-draw-arrowsize Size of Dimension Arrows cmdDraw
-#
-easement-val This controls the sharpness of the easement curve cmdEasement
-easement-r Minimum radius cmdEasement
-easement-x Maximum offset cmdEasement
-easement-l Easement length cmdEasement
-easement-radio These radio buttons are a short-cut for Values of 0.0, 0.5, 1.0 and 2.0. None turns Easements off cmdEasement
-easement-ok Complete easement selection cmdEasement
-#
-elev-mode Type of elevation cmdElevation
-elev-value Height of End Point cmdElevation
-elev-computed Compute elevation based on neighbors cmdElevation
-elev-grade Compute grade based on neighbors cmdElevation
-elev-station Specify a name for an End-Point cmdElevation
-elev-ok cmdElevation
-#
-enum-print Print parts list cmdEnumerate
-enum-printsetup Invoke the Print Setup dialog printSetup
-enum-save Save parts list to file cmdEnumerate
-enum-text This is the list of parts for the layout cmdEnumerate
-enum-list-prices Enable prices on the Parts List cmdEnumerate
-#
-grid-horzspacing Spacing between major grid lines cmdGrid
-grid-horzdivision Allows the spacing to be subdivided cmdGrid
-grid-horzenable Specifies if positions are snaped in this direction cmdGrid
-grid-vertspacing Spacing between major grid lines cmdGrid
-grid-vertdivision Allows the spacing to be subdivided cmdGrid
-grid-vertenable Specifies if positions are snaped in this direction cmdGrid
-grid-origx Shows the origin and angle of the grid cmdGrid
-grid-origy Shows the origin and angle of the grid cmdGrid
-grid-origa Shows the origin and angle of the grid cmdGrid
-grid-show Specifies if the grid is shown cmdGrid
-grid-ok Completes the grid specification cmdGrid
-#
-group-manuf Manufacturer cmdGroup
-group-desc Description cmdGroup
-group-partno Part Number cmdGroup
-group-segcnt Number of segments in Group cmdGroup
-group-replace Replace the Selected object with the new definition? cmdGroup
-group-ok Creates a new Structure (or Turnout) cmdGroup
-#
-helix-elev Elevation difference of Helix End-Points cmdHelix
-helix-radius Helix Radius cmdHelix
-helix-turns Number of turns in the helix cmdHelix
-helix-angSep Angle betweek helix entrance and exit cmdHelix
-helix-grade Grade in helix cmdHelix
-helix-vertSep Separation between helix layers cmdHelix
-#
-layer-layer Layer list cmdLayer
-layer-name Layer Name cmdLayer
-layer-color Color of layer cmdLayer
-layer-visible Layer is drawn on Main window cmdLayer
-layer-frozen Layer cannot be changed cmdLayer
-layer-onmap Layer is drawn on Map window cmdLayer
-layer-button-count Number of layer buttons to show cmdLayer
-layer-object-count Number of objects in this layer cmdLayer
-layer-ok cmdLayer
-layer-reset Load layer configuration from default cmdLayer
-layer-save Save current layer configuration as default cmdLayer
-layer-clear Overwrite layer configuration with system default values cmdLayer
-#
-layout-roomsizeX Specifies the size of the room (in inches or centimeters) cmdLayout
-layout-roomsizeY Specifies the size of the room (in inches or centimeters) cmdLayout
-layout-title1 Specifies the layout Title that will appear on printouts cmdLayout
-layout-title2 Specifies the layout Subtitle that will appear on printouts cmdLayout
-layout-scale Specifies the Modelling Scale cmdLayout
-layout-gauge Specifies the rail gauge, ie. the distance between the rails cmdLayout
-layout-mintrackradius Specifies minimum track radius (in inches or centimeters). Tracks with a smaller radius are considered exceptional. cmdLayout
-layout-maxtrackgrade Specifies maximum track elevation expressed as a percent (%). Tracks with a larger elevation are considered exceptional. cmdLayout
-#
-newcar-road Roadname cmdTrain
-newcar-number Car Number cmdTrain
-#
-note-text This is the body of the Note. To change this select Modify from the File Menu cmdNote
-note-ok cmdNote
-#
-outputbitmap-density Specifies number of pixels per inch (or centimeter) cmdOutputbitmap
-outputbitmap-ok cmdOutputbitmap
-outputbitmap-toggles Specifies whether Layout Titles, Borders or Track Centerlines are printed on the BitMap cmdOutputbitmap
-#
-parallel-separation Specifies the separation between parallel tracks cmdParallel
-#
-parameter-name Enter your name as specified in the XTrackCAD Registration Notice register
-parameter-key Enter the key value as specified in the XTrackCAD Registration Notice register
-parameter-ok Validates the name and key. Terminates the registration command register
-#
-pref-anglesystem 0� is up or to the right cmdPref
-pref-units Choose english (inches) or metric (centimeters) cmdPref
-pref-dstfmt How to display length measurements cmdPref
-pref-minlength Do not create tracks to be shorter than this value cmdPref
-pref-connectdistance Maximum distance between connected end points cmdPref
-pref-connectangle Minimum angle between connected End-Points cmdPref
-pref-turntable-angle Specifies the minimum angle between tracks connected to a turntable cmdPref
-pref-coupling-speed-max Trains will crash above this speed cmdPref
-pref-balloonhelp Enable/Disable balloon popup help windows cmdPref
-pref-dragpixels How far you can move the mouse before its considered a drag cmdPref
-pref-dragtimeout How long you can hold a mouse button down before its considered a drag cmdPref
-pref-mingridspacing Minimum distance (in pixels) between grid lines/ticks cmdPref
-pref-checkpoint Specifies the Check Point frequency; number of modifications made since the last save. cmdPref
-pref-onstartup Resume work on last layout or start with new layout cmdPref
-pref-ok cmdPref
-#
-pricelist-cost Updated cost of current selected item cmdPricelist
-pricelist-entry Item cmdPricelist
-pricelist-inx Selection list for prices cmdPricelist
-pricelist-flexlen Price of specified length of flex-track cmdPricelist
-pricelist-flexunit Price of specified length of flex-track cmdPricelist
-pricelist-flexcost Price of specified length of flex-track cmdPricelist
-pricelist-ok cmdPricelist
-#
-print-centerLine Controls the printing of a centerline of track cmdPrint
-print-scale Controls the reduction (scale) of the printout cmdPrint
-print-pagew Scaled page width (Scale times physical page width) cmdPrint
-print-max Sets page size to the maximum (based on scale and physical page size) cmdPrint
-print-pageh Scaled page height (Scale times physical page height) cmdPrint
-print-snapshot Sets scale, origin and angle for a one page printout of the layout cmdPrint
-print-format Print page in Portrait or Landscape format cmdPrint
-print-order Order of printing pages cmdPrint
-print-style Print Title, Date, Author and other information at bottom of page? cmdPrint
-print-physsize Ignore unprintable page margins? cmdPrint
-print-registrationMarks Print Registration Marks at 1:1? cmdPrint
-print-grid Print Snap Grid? cmdPrint
-print-ruler Print Rulers on all page edges? cmdPrint
-print-roadbed Print Roadbed Outline? cmdPrint
-print-roadbedWidth Print Roadbed Outline cmdPrint
-print-origx Origin of the print grid. This is useful if you want to reprint a set of pages cmdPrint
-print-origy Origin of the print grid. This is useful if you want to reprint a set of pages cmdPrint
-print-reset Resets the origin and angle to 0 cmdPrint
-print-origa Origin of the print grid. This is useful if you want to reprint a set of pages cmdPrint
-print-clear Deselects all pages cmdPrint
-print-setup Invoke the Print Setup dialog printSetup
-print-ok Print selected pages and terminates the print command cmdPrint
-#
-prmfile-inx List of loaded and unloaded parameter files cmdPrmfile
-prmfile-mode Show parameter files by names or descriptions cmdPrmfile
-prmfile-action Toggle the loaded status of the selected parameter file cmdPrmfile
-prmfile-browse Find a parameter file for loading cmdPrmfile
-prmfile-ok Update parameter file list cmdPrmfile
-prmfile-selectall Select all parameter files shown cmdPrmfile
-#
-profile-canvas Profile of specified path cmdProfile
-profile-clear Clear the profile cmdProfile
-profile-print Print the profile cmdProfile
-profile-ok cmdProfile
-#
-record-stop Stop recording cmdRecord
-record-message Insert a message cmdRecord
-record-end End a message cmdRecord
-record-text Message body cmdRecord
-#
-refreshSpecial-list Possible turnouts cmdRefreshSpecial
-refreshSpecial-skip Skip this turnout cmdRefreshSpecial
-refreshSpecial-ok cmdRefreshSpecial
-#
-rename-manuf Manufacturer of Object cmdCustmgm
-rename-desc Description of Object cmdCustmgm
-rename-partno Part Nuber of Object cmdCustmgm
-rename-ok cmdCustmgm
-#
-rescale-toggle Rescale by Scale Conversion or by Ratio cmdRescale
-rescale-fromS Original Scale of the selected objects cmdRescale
-rescale-fromG Original Gauge of the selected objects cmdRescale
-rescale-toS New Scale of the selected objects cmdRescale
-rescale-toG New Gauge of the selected objects cmdRescale
-rescale-change-dim Change track dimensions to new scale cmdRescale
-rescale-ratio Change size by this amount cmdRescale
-rescale-ok cmdRescale
-#
-rgbcolor-snapgrid Snap Grid Line and Division cmdRgbcolor
-rgbcolor-marker X and Y position markers cmdRgbcolor
-rgbcolor-border Border rulers, room boundaries and table edges cmdRgbcolor
-rgbcolor-crossmajor Primary Axis of grid rotation cmdRgbcolor
-rgbcolor-crossminor Secondary Axis of grid rotation cmdRgbcolor
-rgbcolor-normal Unselected tracks cmdRgbcolor
-rgbcolor-selected Selected tracks cmdRgbcolor
-rgbcolor-profile Color of tracks on the Profile path cmdRgbcolor
-rgbcolor-exception Color of Exceptional tracks cmdRgbcolor
-rgbcolor-tie Color of track ties cmdRgbcolor
-rgbcolor-ok Updates the colors cmdRgbcolor
-#
-rotate-rotate Angle in degrees cmdRotate
-rotate-ok Rotate object(s) by specified amount cmdRotate
-#
-sticky-set Choose commands to be sticky cmdSticky
-sticky-ok Make the commands sticky cmdSticky
-#
-structure-list List of available structure cmdStructure
-structure-canvas Diagram of the selected structure cmdStructure
-structure-hide Hide Selection window when placing Structure cmdStructure
-structure-stats Drawing scale and size cmdStructure
-structure-ok Complete structure placement cmdStructure
-#
-structure-pier-inx Choose a Pier number cmdStructure
-#
-switchmotor-name Name of the Motor cmdSwitchMotorCreate
-switchmotor-normal Value when switch is normal cmdSwitchMotorCreate
-switchmotor-reverse Value when the switch is reversed cmdSwitchMotorCreate
-switchmotor-pointSense Value for a positive comfirmation of switch position cmdSwitchMotorCreate
-#
-text-fontsize Controls the size of the entered text cmdText
-#
-tip-text Useful information about the program cmdTip
-tip-showatstart Show Tip of the Day every time the program starts cmdTip
-tip-next Show the next Tip of the Day cmdTip
-tip-prev Show the previous Tip of the Day cmdTip
-tip-ok cmdTip
-#
-toolbarM Controls which Command Buttons are displayed
-#
-train-newcar-index List of Cars cmdTrain
-train-list List of active trains cmdTrain
-train-speed Speed cmdTrain
-train-distance Train odometer cmdTrain
-train-zeroDistance Reset odometer to 0 cmdTrain
-train-goto Find train on layout cmdTrain
-train-follow Follow train around layout cmdTrain
-train-autoreverse Flip direction at End Of Track cmdTrain
-train-direction Change direction of train cmdTrain
-train-stop Stop the train cmdTrain
-#
-turnout-list List of available turnouts for the current scale cmdTurnout
-turnout-canvas Diagram of the currently selected turnout. Click on a End-Point to select the Active End-Point cmdTurnout
-turnout-new A menu list of various type of turnouts and sectional tracks you can define
-turnout-hide Hide Selection window when placing Turnout cmdTurnout
-turnout-activeEndPoint The selected Active End-Point cmdTurnout
-turnout-current Current selected turnout, (displayed in the diagram window) cmdTurnout
-turnout-endPoint One the End-Points that can be selected cmdTurnout
-turnout-ok cmdTurnout
-#
-turnoutNew-angle1 Angle of the specified track to the center line of the turnout
-turnoutNew-angle2 Angle of the specified track to the center line of the turnout
-turnoutNew-angleMode Specifies if angles are entered as Frog Numbers or in degrees cmdTurnoutNew
-turnoutNew-desc1 Desciption
-turnoutNew-desc2 Desciption
-turnoutNew-label Turnout description (Manuf., Size, Part Number, etc) cmdTurnoutNew
-turnoutNew-len0 Length from the base to the end of the specified track
-turnoutNew-len1 Length from the base to the end of the specified track
-turnoutNew-len2 Length from the base to the end of the specified track
-turnoutNew-manuf Manufacturer
-turnoutNew-off1 Offset of the track End-Point from the center line of the turnout
-turnoutNew-off2 Offset of the track End-Point from the center line of the turnout
-turnoutNew-partno1 Part Number
-turnoutNew-partno2 Part Number
-turnoutNew-print Prints a full size diagram of the turnout for checking cmdTurnoutNew
-turnoutNew-ok Prints a full size diagram of the turnout for checking cmdTurnoutNew
-turnoutNew-color Color of Roadbed lines cmdTurnoutNew
-turnoutNew-roadbedLineWidth Width of Roadbed lines cmdTurnoutNew
-turnoutNew-roadbedWidth Width of Roadbed cmdTurnoutNew
-turnoutNew-printsetup Invoke the Print Setup dialog printSetup
-turnoutNew-done Closes the window and returns to the Turnout Selection window cmdTurnoutNew
-#
-turntable-diameter Specifies the diameter of the turntable cmdTurntable
-#
-updatetitle-old Old Turnout title cmdUpdatetitle
-updatetitle-sel List of available titles cmdUpdatetitle
-updatetitle-ignore Leave the Turnouts' title unchanged cmdUpdatetitle
-updatetitle-load Invoke the Parameter Files dialog cmdUpdatetitle
-updatetitle-list List of available turnouts cmdUpdatetitle
-updatetitle-ok Update the Turnouts' title cmdUpdatetitle
-#
-#
-fontSelCancel Cancel fontSelW
-fontSelList List fontSelW
-fontSelOk Ok fontSelW
-fontSelSample Sample fontSelW
-fontSelSize Size fontSelW
-fontSelSlant Slant fontSelW
-fontSelW Font selection dialog
-fontSelWeight Weight fontSelW
-#
-printAbortW Printer Abort Window
-printFileName Print to filename
-printFontAlias Specify Postscript font alias mapping
-printSetup Displays the Print Setup window to change printers, orientation, paper size, etc.
-printSetupCancel Closes this dialog printSetup
-printSetupFormat Page orientation printSetup
-printSetupMargin Unprintable margins printSetup
-printSetupOk Updates and closes this dialog printSetup
-printSetupPaper Choose paper size printSetup
-printSetupPrinter Choose printer printSetup
-printSetupTest Print test page printSetup
-#
-#
-about No Help nohelp
-about-about No Help nohelp
-about-ok nohelp
-cmdDebug No Help nohelp
-loosen No Help nohelp
-misc-cur-turnout-ep
-misc-toolbarset No Help nohelp
-misc-showlayout No Help nohelp
-misc-showdisplay No Help nohelp
-misc-showcmdopt No Help nohelp
-misc-showeasement No Help nohelp
-misc-showfontSel No Help nohelp
-misc-showgrid No Help nohelp
-misc-showdebug No Help nohelp
-misc-sticky No Help nohelp
-misc-showpref No Help nohelp
-misc-showcolor No Help nohelp
-misc-showfileClear No Help nohelp
-misc-showparamFile No Help nohelp
-misc-showpriceList No Help nohelp
-misc-showprint No Help nohelp
-misc-showprintSetup No Help nohelp
-misc-showprintBitmap No Help nohelp
-misc-showpartsList No Help nohelp
-misc-shownotes No Help nohelp
-misc-showundo No Help nohelp
-misc-showredo No Help nohelp
-misc-showcut No Help nohelp
-misc-showcopy No Help nohelp
-misc-showpaste No Help nohelp
-misc-showdelete No Help nohelp
-misc-showtunnel No Help nohelp
-misc-showabove No Help nohelp
-misc-showbelow No Help nohelp
-misc-showwidth0 No Help nohelp
-misc-showwidth2 No Help nohelp
-misc-showwidth3 No Help nohelp
-misc-showrecompelev No Help nohelp
-misc-showcardesc No Help nohelp
-misc-showcaradd No Help nohelp
-misc-showselectAll No Help nohelp
-misc-showimport No Help nohelp
-misc-showexport No Help nohelp
-misc-showexportDXF No Help nohelp
-misc-showloosen No Help nohelp
-misc-group-objects No Help nohelp
-misc-ungroup-objects No Help nohelp
-misc-showcustomMgm No Help nohelp
-misc-showlayers No Help nohelp
-misc-showmoveToCurrentLayer No Help nohelp
-misc-showselectCurrentLayer No Help nohelp
-misc-showclearElevations No Help nohelp
-misc-showaddElevations No Help nohelp
-debug-Track No Help nohelp
-debug-EndPt No Help nohelp
-debug-ReadTracks No Help nohelp
-debug-Curve No Help nohelp
-debug-Join No Help nohelp
-debug-Turnout No Help nohelp
-debug-Structure No Help nohelp
-debug-Print No Help nohelp
-debug-ok nohelp
-map-canvas No Help nohelp
-#
-cmdLayerShow0 Layer cmdLayer
-cmdLayerShow1 Layer cmdLayer
-cmdLayerShow2 Layer cmdLayer
-cmdLayerShow3 Layer cmdLayer
-cmdLayerShow4 Layer cmdLayer
-cmdLayerShow5 Layer cmdLayer
-cmdLayerShow6 Layer cmdLayer
-cmdLayerShow7 Layer cmdLayer
-cmdLayerShow8 Layer cmdLayer
-cmdLayerShow9 Layer cmdLayer
-cmdLayerShow10 Layer cmdLayer
-cmdLayerShow11 Layer cmdLayer
-cmdLayerShow12 Layer cmdLayer
-cmdLayerShow13 Layer cmdLayer
-cmdLayerShow14 Layer cmdLayer
-cmdLayerShow15 Layer cmdLayer
-cmdLayerShow16 Layer cmdLayer
-cmdLayerShow17 Layer cmdLayer
-cmdLayerShow18 Layer cmdLayer
-cmdLayerShow19 Layer cmdLayer
diff --git a/app/help/genhelp.json b/app/help/genhelp.json
new file mode 100644
index 0000000..1d6f8af
--- /dev/null
+++ b/app/help/genhelp.json
@@ -0,0 +1,681 @@
+{
+ "messages": [
+ {"line": "Help", "contents": "Invokes online help for this dialog" },
+ {"line": "cancel", "contents": "Cancels this command" },
+ {"line": "Close", "contents": "Closes the dialog" },
+ {"line": "cmdAbout", "contents": "About program dialog" },
+ {"line": "cmdAbove", "contents": "Move selected object to top" },
+ {"line": "cmdAddElevations", "contents": "Raise or lower all selected tracks" },
+ {"line": "cmdMagneticSnap", "contents": "Turn magnetic snap on or off" },
+ {"line": "cmdBelow", "contents": "Move selected object to bottom" },
+ {"line": "cmdBlockCreate", "contents": "Create a section of track for automation" },
+ {"line": "cmdBlockEdit", "contents": "Edit a block definition " },
+ {"line": "cmdCarDesc", "contents": "Create a new Car/Loco description" },
+ {"line": "cmdCarInventory", "contents": "Manage your Car and Loco Inventory" },
+ {"line": "cmdCircleCenter", "contents": "Create track circle from center" },
+ {"line": "cmdCircleFixedRadius", "contents": "Create fixed radius track circle" },
+ {"line": "cmdCircleSetCmd", "contents": "Set Circle Track creation mode" },
+ {"line": "cmdCircleTangent", "contents": "Create track circle from tangent" },
+ {"line": "cmdClearElevations", "contents": "Removes elevation from Selected tracks" },
+ {"line": "cmdClone", "contents": "Copy objects to clipboard and duplicate them in exactly the same place" },
+ {"line": "cmdCmdopt", "contents": "Command Options dialog" },
+ {"line": "cmdColor", "contents": "Controls colors" },
+ {"line": "cmdConnect", "contents": "Connect two tracks" },
+ {"line": "cmdControl", "contents": "Create a control for layout automation" },
+ {"line": "cmdControlElements", "contents": "Select control element to create" },
+ {"line": "cmdContmgm", "contents": "Manage control elements" },
+ {"line": "cmdConvertSetCmd", "contents": "Set Convert mode" },
+ {"line": "cmdConvertTo", "contents": "Convert from Fixed Track to Cornu" },
+ {"line": "cmdConvertFrom", "contents": "Convert from Cornu and Bezier to Fixed Track" },
+ {"line": "cmdCopy", "contents": "Copy selected objects to clipboard" },
+ {"line": "cmdCornu", "contents": "Create Cornu track" },
+ {"line": "cmdCurveCenter", "contents": "Create curved track from center" },
+ {"line": "cmdCurveChord", "contents": "Create curved track from chord" },
+ {"line": "cmdCurveEndPt", "contents": "Create curved track from end-point" },
+ {"line": "cmdBezier", "contents": "Create Bezier track" },
+ {"line": "cmdCurveSetCmd", "contents": "Set Curve Track creation mode" },
+ {"line": "cmdCurveTangent", "contents": "Create curved track from tangent" },
+ {"line": "cmdCustmgm", "contents": "Manipulate Custom designer entries" },
+ {"line": "cmdCut", "contents": "Moves selected objects to clipboard" },
+ {"line": "cmdDelete", "contents": "Delete objects" },
+ {"line": "cmdDemo", "contents": "Playback demos" },
+ {"line": "cmdDescribe", "contents": "Change Object Properties" },
+ {"line": "cmdDescribeMode", "contents": "Change to properties mode" },
+ {"line": "cmdDeselectAll", "contents": "Deselect all selected objects" },
+ {"line": "cmdDisplay", "contents": "Change Display parameters" },
+ {"line": "cmdDrawBench", "contents": "Create benchwork" },
+ {"line": "cmdDrawBox", "contents": "Create a box" },
+ {"line": "cmdDrawCircleSetCmd", "contents": "Set Circle drawing command" },
+ {"line": "cmdDrawCircle", "contents": "Create a circle" },
+ {"line": "cmdDrawCircleCenter", "contents": "Draw a circle line from center" },
+ {"line": "cmdDrawCircleFixedRadius", "contents": "Draw a fixed radius circle line" },
+ {"line": "cmdDrawCircleTangent", "contents": "Draw a circle line from tangent" },
+ {"line": "cmdDrawCurveSetCmd", "contents": "Set Curve drawing command" },
+ {"line": "cmdDrawCurve", "contents": "Create a curved line" },
+ {"line": "cmdDrawCurveEndPt", "contents": "Create a curved line from End" },
+ {"line": "cmdDrawCurveCenter", "contents": "Create a curved line from center" },
+ {"line": "cmdDrawCurveChord", "contents": "Create a curved line from chord" },
+ {"line": "cmdDrawCurveTangent", "contents": "Create a curved line from tangent" },
+ {"line": "cmdDrawBezierCurve", "contents": "Create a Bezier line" },
+ {"line": "cmdDrawDimLine", "contents": "Create a dimension line" },
+ {"line": "cmdDrawFilledBox", "contents": "Create a filled box" },
+ {"line": "cmdDrawFilledCurve", "contents": "Create a filled circle" },
+ {"line": "cmdDrawFilledCircleCenter", "contents": "Draw a filled circle from center" },
+ {"line": "cmdDrawFilledCircleFixedRadius", "contents": "Draw a fixed radius filled circle" },
+ {"line": "cmdDrawFilledCircleTangent", "contents": "Draw a filled circle from tangent" },
+ {"line": "cmdDrawPolygon", "contents": "Create a polygon" },
+ {"line": "cmdDrawFilledPolygon", "contents": "Create a filled polygon" },
+ {"line": "cmdDrawPolyline", "contents": "Create a polyline" },
+ {"line": "cmdDrawLine", "contents": "Create a straight line" },
+ {"line": "cmdDrawLineSetCmd", "contents": "Set Line drawing command" },
+ {"line": "cmdDrawShapeSetCmd", "contents": "Set Shape drawing command" },
+ {"line": "cmdDrawTableEdge", "contents": "Draw table edge" },
+ {"line": "cmdEasement", "contents": "Easement menu" },
+ {"line": "cmdElevation", "contents": "Change Elevations" },
+ {"line": "cmdEnumerate", "contents": "Generate a Parts List of selected objects" },
+ {"line": "cmdExportImportSetCmd", "contents": "Set Import/Export mode" },
+ {"line": "cmdExport", "contents": "Export a .xti file" },
+ {"line": "cmdExportDXF", "contents": "Export a DXF file" },
+ {"line": "cmdFileNote", "contents": "Document" },
+ {"line": "cmdFlip", "contents": "Flip selected objects" },
+ {"line": "cmdGrid", "contents": "Adjust snap grid" },
+ {"line": "cmdGridEnable", "contents": "Enable snap grid" },
+ {"line": "cmdGridShow", "contents": "Show snap grid" },
+ {"line": "cmdGroup", "contents": "Create a structure from a Group of objects" },
+ {"line": "cmdHandLaidTurnout", "contents": "Create a hand-laid turnout" },
+ {"line": "cmdHelix", "contents": "Create a track helix" },
+ {"line": "cmdImport", "contents": "Import a .xti file" },
+ {"line": "cmdImportModule", "contents": "Import an .xti file as a Module" },
+ {"line": "cmdJoinTrack", "contents": "Join two tracks" },
+ {"line": "cmdJoinLine", "contents": "Join two lines or polylines" },
+ {"line": "cmdJoinSetCmd", "contents": "Set Join mode" },
+ {"line": "cmdLayer", "contents": "Change Layers" },
+ {"line": "cmdLayerSet", "contents": "Selects the current drawing layer" },
+ {"line": "cmdLayout", "contents": "Layout parameters" },
+ {"line": "cmdLinkNote", "contents": "Weblink" },
+ {"line": "cmdMapShow", "contents": "Show/Hide Map Window" },
+ {"line": "cmdModify", "contents": "Modify or extend a track" },
+ {"line": "cmdModifyMode", "contents": "Change To modify mode" },
+ {"line": "cmdMove", "contents": "Move selected objects" },
+ {"line": "cmdMoveLabel", "contents": "Move a label" },
+ {"line": "cmdMoveToCurrentLayer", "contents": "Move selected objects to current layer" },
+ {"line": "cmdNote", "contents": "Place a note on the layout" },
+ {"line": "cmdOutputbitmap", "contents": "Print a bitmap" },
+ {"line": "cmdPan", "contents": "Pan or zoom the layout" },
+ {"line": "cmdPanMode", "contents": "Change to zoom/pan mode" },
+ {"line": "cmdParallelTrack", "contents": "Create a parallel track" },
+ {"line": "cmdParallelLine", "contents": "Create a parallel line" },
+ {"line": "cmdParallelSetCmd", "contents": "Set Parallel mode" },
+ {"line": "cmdParameter", "contents": "Register" },
+ {"line": "cmdPaste", "contents": "Copy objects from clipboard" },
+ {"line": "cmdPref", "contents": "Perferences dialog" },
+ {"line": "cmdPricelist", "contents": "Display prices of turnouts, sectional tracks and structures" },
+ {"line": "cmdPrint", "contents": "Print the layout" },
+ {"line": "cmdPrmfile", "contents": "Loads and unloads parameter files into/from toolbar" },
+ {"line": "cmdProfile", "contents": "Elevation Profile Command" },
+ {"line": "cmdProfileDraw", "contents": "Profile" },
+ {"line": "cmdRecord", "contents": "Command recorder" },
+ {"line": "cmdRedo", "contents": "Redo last undo" },
+ {"line": "cmdRefreshCompound", "contents": "Update selected Turnout and Structure definitions" },
+ {"line": "cmdRescale", "contents": "Rescale selected objects" },
+ {"line": "cmdRotate", "contents": "Rotate selected object(s)" },
+ {"line": "cmdRuler", "contents": "Show a ruler" },
+ {"line": "cmdSelect", "contents": "Select objects" },
+ {"line": "cmdSelectMode", "contents": "Change To Select Mode" },
+ {"line": "cmdSelectAll", "contents": "Selects all objects on the layout" },
+ {"line": "cmdSelectCurrentLayer", "contents": "Selects all objects in the current Layer" },
+ {"line": "cmdSelectInvert", "contents": "Invert current selection" },
+ {"line": "cmdSplitTrack", "contents": "Split a track" },
+ {"line": "cmdSelectOrphaned", "contents": "Select stranded (unconnected) track pieces" },
+ {"line": "cmdSensor", "contents": "Create a sensor (ie. a occupancy detector or a toggle switch)" },
+ {"line": "cmdSignal", "contents": "Create a signal for train control" },
+ {"line": "cmdSticky", "contents": "Choose which commands are sticky" },
+ {"line": "cmdStraight", "contents": "Create straight track" },
+ {"line": "cmdStructure", "contents": "Place a structure on the layout" },
+ {"line": "cmdSwitchMotorCreate", "contents": "Create a switchmotor for turnout control" },
+ {"line": "cmdSwitchMotorEdit", "contents": "Edit a switchmotor definition" },
+ {"line": "cmdText", "contents": "Enter text on the layout" },
+ {"line": "cmdTextSize", "contents": "Controls the size of the entered text" },
+ {"line": "cmdTextNote", "contents": "Plain Text"},
+ {"line": "cmdTip", "contents": "Tip of the Day window" },
+ {"line": "cmdTrain", "contents": "Run Trains" },
+ {"line": "cmdTrainMode", "contents": "Change To Run Trains Mode" },
+ {"line": "cmdTrainPause", "contents": "Pause/Resume Trains" },
+ {"line": "cmdTrainNewCar", "contents": "Place a car on the layout" },
+ {"line": "cmdTrainExit", "contents": "Exit Trains" },
+ {"line": "cmdTunnel", "contents": "Hide/Unhide a track" },
+ {"line": "cmdBridge", "contents": "Make/Unmake a track a bridge" },
+ {"line": "cmdTurnout", "contents": "Place a turnout or sectional track" },
+ {"line": "cmdTurnoutNew", "contents": "Create a new turnout definition" },
+ {"line": "cmdTurntable", "contents": "Place a turntable" },
+ {"line": "cmdUpdatetitle", "contents": "Updates old source files with 3 part titles" },
+ {"line": "cmdUndo", "contents": "Undo last command" },
+ {"line": "cmdUngroup", "contents": "Ungroup objects" },
+ {"line": "cmdWidth0", "contents": "Draw tracks with thin lines" },
+ {"line": "cmdWidth2", "contents": "Draw tracks with medium lines" },
+ {"line": "cmdWidth3", "contents": "Draw tracks with thick lines" },
+ {"line": "cmdZoom", "contents": "Change drawing scale" },
+ {"line": "cmdZoomIn", "contents": "Zoom in" },
+ {"line": "cmdZoomOut", "contents": "Zoom out" },
+ {"line": "menuFile", "contents": "File Menu" },
+ {"line": "menuFile-save", "contents": "Save layout" },
+ {"line": "menuFile-saveAs", "contents": "Save layout under a new name " },
+ {"line": "menuFile-clear", "contents": "New layout" },
+ {"line": "menuFile-enum", "contents": "Generate parts list" },
+ {"line": "menuFile-load", "contents": "Load a layout" },
+ {"line": "menuFile-quit", "contents": "Exit the program" },
+ {"line": "menuFile-revert", "contents": "Revert to last saved state of layout plan" },
+ {"line": "editM", "contents": "Edit menu" },
+ {"line": "menuEdit-redraw", "contents": "Redraw layout" },
+ {"line": "menuEdit-zoomIn", "contents": "Zoom in" },
+ {"line": "menuEdit-zoomOut", "contents": "Zoom out" },
+ {"line": "toolsM", "contents": "Tools menu" },
+ {"line": "menuView", "contents": "View menu" },
+ {"line": "menuToolbar", "contents": "Toolbar configuration" },
+ {"line": "menuTools", "contents": "Tools menu" },
+ {"line": "menuOption", "contents": "Options menu" },
+ {"line": "menuMacro", "contents": "Playback/Record commands" },
+ {"line": "menuWindow", "contents": "Window menu" },
+ {"line": "menuHelp", "contents": "Help menu" },
+ {"line": "menuHelpRecentMessages", "contents": "Recent error messages and explanations" },
+ {"line": "hotBarLeft", "contents": "Move Hot Bar left" },
+ {"line": "hotBarRight", "contents": "Move Hot Bar right" },
+ {"line": "infoBarCount", "contents": "Total track count" },
+ {"line": "infoBarPosX", "contents": "X Position of cursor" },
+ {"line": "infoBarPosY", "contents": "Y Position of cursor" },
+ {"line": "infoBarScale", "contents": "Drawing scale" },
+ {"line": "infoBarStatus", "contents": "Message and status line" },
+ {"line": "main-draw", "contents": "Main layout canvas" },
+ {"line": "mainDraw", "contents": "Main layout canvas" },
+ {"line": "main-canvas", "contents": "Main drawing canvas" },
+ {"line": "main-commandbar", "contents": "Command buttons" },
+ {"line": "main-menubar", "contents": "Menus" },
+ {"line": "main-titlebar", "contents": "Tile, Filename and Window Manager buttons" },
+ {"line": "main-hotbar", "contents": "Turnout and Structure Hot Bar" },
+ {"line": "main-layers", "contents": "Active layer list and layer buttons" },
+ {"line": "map-draw", "contents": "Map window" },
+ {"line": "map-hilight", "contents": "This is the portion of the layout shown in the Main Window canvas" },
+ {"line": "addElev-value", "contents": "Raise or Lower all Selected Track" },
+ {"line": "block-name", "contents": "Name of block" },
+ {"line": "block-script", "contents": "Script that the block will run" },
+ {"line": "block-segments", "contents": "List of tracks in the Block" },
+ {"line": "carpart-ok", "contents": "Add or Update car object" },
+ {"line": "carpart-manuf", "contents": "Manufacturer name" },
+ {"line": "carpart-prototype", "contents": "Car Prototype" },
+ {"line": "carpart-prototype-list", "contents": "Car Prototype" },
+ {"line": "carpart-isLoco", "contents": "Is the Car a Locomotive?" },
+ {"line": "carpart-partno-list", "contents": "Part Number and Description" },
+ {"line": "carpart-partno", "contents": "Manufacturer Part Number" },
+ {"line": "carpart-import", "contents": "Use the Selected figure as the car image" },
+ {"line": "carpart-reset", "contents": "Use the default figure as the car image" },
+ {"line": "carpart-desc", "contents": "Optional description of the Car Part" },
+ {"line": "carpart-flip", "contents": "Flip car image" },
+ {"line": "carpart-dispmode", "contents": "Display Car Item information or reporting marks and dimensions" },
+ {"line": "carpart-road", "contents": "Full Roadname" },
+ {"line": "carpart-type", "contents": "Car Type" },
+ {"line": "carpart-protokind-list", "contents": "Car Type" },
+ {"line": "carpart-repmark", "contents": "Reporting Marks (Roadname abbreviation)" },
+ {"line": "carpart-number", "contents": "Car Number" },
+ {"line": "carpart-bodyColor", "contents": "Car body Color" },
+ {"line": "carpart-carLength", "contents": "Length of car body" },
+ {"line": "carpart-carWidth", "contents": "Width of car body" },
+ {"line": "carpart-trkCenter", "contents": "Distance between Trucks " },
+ {"line": "carpart-trkCenterOffset", "contents": "Distance Trucks are displaced along Car" },
+ {"line": "carpart-cplrMount", "contents": "Coupler are mounted on body or truck" },
+ {"line": "carpart-cpldLen", "contents": "Overall Coupled Length" },
+ {"line": "carpart-cplrLen", "contents": "Coupler Length from end of car" },
+ {"line": "carpart-canvas", "contents": "Diagram of Car" },
+ {"line": "carpart-index", "contents": "Item Index Number" },
+ {"line": "carpart-purchPrice", "contents": "Original Purchase Price" },
+ {"line": "carpart-currPrice", "contents": "Current Price" },
+ {"line": "carpart-condition", "contents": "Condition of car" },
+ {"line": "carpart-purchDate", "contents": "Original Purchase Date" },
+ {"line": "carpart-serviceDate", "contents": "Last Service Date" },
+ {"line": "carpart-quantity", "contents": "Number of identical cars to be entered" },
+ {"line": "carpart-multinum", "contents": "Do all the cars have the same Number?" },
+ {"line": "carpart-notes", "contents": "Notes about the car" },
+ {"line": "carpart-new", "contents": "Create a new car Part or Prototype definitions" },
+ {"line": "carpart-new-menu", "contents": "Create a new car Part or Prototype definitions" },
+ {"line": "carinv-ok", "contents": "Finds the selected Car Item on the layout" },
+ {"line": "carinv-sort1", "contents": "Sort the Item list" },
+ {"line": "carinv-sort2", "contents": "Sort the Item list" },
+ {"line": "carinv-sort3", "contents": "Sort the Item list" },
+ {"line": "carinv-sort4", "contents": "Sort the Item list" },
+ {"line": "carinv-list", "contents": "" },
+ {"line": "carinv-edit", "contents": "Edit the selected Car Item" },
+ {"line": "carinv-add", "contents": "Add a new Car Item" },
+ {"line": "carinv-delete", "contents": "Delete the selected Car Items" },
+ {"line": "carinv-import", "contents": "Import a Car Item .csv file" },
+ {"line": "carinv-export", "contents": "Export a Car Item .csv file" },
+ {"line": "carinv-savetext", "contents": "Create a text list of the Car Items" },
+ {"line": "circle-radius", "contents": "Specifies the radius of the circle track" },
+ {"line": "cmdopt-preselect", "contents": "Default command is Describe or Select" },
+ {"line": "cmdopt-rightclickmode", "contents": "Action to invoke on Right-Click" },
+ {"line": "cmdopt-selectmode", "contents": "Replace current selection with clicked object or add clicked object to selection" },
+ {"line": "cmdopt-selectzero", "contents": "Clicking into an empty area clears selection if select mode is <add>" },
+ {"line": "cmdopt-ok", "contents": "" },
+ {"line": "contmgm-inx", "contents": "The list of control elements" },
+ {"line": "contmgm-edit", "contents": "Edit the element" },
+ {"line": "contmgm-delete", "contents": "Delete the element" },
+ {"line": "contents-label", "contents": "Contents Label for new Parameter file" },
+ {"line": "custmgm-inx", "contents": "List of custom designed turnouts and structures" },
+ {"line": "custmgm-edit", "contents": "Invoke designer editor" },
+ {"line": "custmgm-delete", "contents": "Remove selected entries" },
+ {"line": "custmgm-export", "contents": "Copy selected entries to Parameter File" },
+ {"line": "custmgm-new", "contents": "Create a New part or prototype" },
+ {"line": "custmgm-ok", "contents": "Update custom file and close" },
+ {"line": "demo-step", "contents": "Executes the next step of the demo" },
+ {"line": "demo-next", "contents": "Skip to next demo" },
+ {"line": "demo-quit", "contents": "Stops the demonstration and returns you to XTrackCAD" },
+ {"line": "demo-speed", "contents": "Select speed of Playback" },
+ {"line": "demo-text", "contents": "This is where comments about the demo are displayed" },
+ {"line": "describe-F1", "contents": "" },
+ {"line": "describe-F2", "contents": "" },
+ {"line": "describe-F3", "contents": "" },
+ {"line": "describe-F4", "contents": "" },
+ {"line": "describe-F5", "contents": "" },
+ {"line": "describe-F6", "contents": "" },
+ {"line": "describe-F7", "contents": "" },
+ {"line": "describe-F8", "contents": "" },
+ {"line": "describe-F9", "contents": "" },
+ {"line": "describe-F10", "contents": "" },
+ {"line": "describe-F11", "contents": "" },
+ {"line": "describe-F12", "contents": "" },
+ {"line": "describe-F13", "contents": "" },
+ {"line": "describe-F14", "contents": "" },
+ {"line": "describe-F15", "contents": "" },
+ {"line": "describe-F16", "contents": "" },
+ {"line": "describe-F17", "contents": "" },
+ {"line": "describe-F18", "contents": "" },
+ {"line": "describe-F19", "contents": "" },
+ {"line": "describe-F20", "contents": "" },
+ {"line": "describe-I1", "contents": "" },
+ {"line": "describe-I2", "contents": "" },
+ {"line": "describe-I3", "contents": "" },
+ {"line": "describe-I4", "contents": "" },
+ {"line": "describe-I5", "contents": "" },
+ {"line": "describe-S1", "contents": "" },
+ {"line": "describe-S2", "contents": "" },
+ {"line": "describe-S3", "contents": "" },
+ {"line": "describe-S4", "contents": "" },
+ {"line": "describe-Y1", "contents": "" },
+ {"line": "describe-C1", "contents": "" },
+ {"line": "describe-L1", "contents": "" },
+ {"line": "describe-L2", "contents": "" },
+ {"line": "describe-LE1", "contents": "" },
+ {"line": "describe-T1", "contents": "" },
+ {"line": "describe-P1", "contents": "" },
+ {"line": "display-autoPan", "contents": "Move the Main canvas if you drag near the edge" },
+ {"line": "display-color-track", "contents": "Color tracks by layer or individually" },
+ {"line": "display-color-draw", "contents": "Color draw objects by layer or individually" },
+ {"line": "display-tunnels", "contents": "Controls the drawing of hidden tracks" },
+ {"line": "display-endpt", "contents": "Controls the drawing of End-Points" },
+ {"line": "display-tiedraw", "contents": "How to draw track ties" },
+ {"line": "display-centerdraw", "contents": "Show crosshair at center of curves" },
+ {"line": "display-tworailscale", "contents": "Drawing scale when to draw tracks with 2 rails" },
+ {"line": "display-mapscale", "contents": "Drawing scale of the map window" },
+ {"line": "display-livemap", "contents": "Whether the main layout is updated while dragging on the Map" },
+ {"line": "display-labelenable", "contents": "Enable labels for Turnouts, Flextrack Lengths and Elevations" },
+ {"line": "display-labelscale", "contents": "When to label Turnout, Flextrack Lengths and Elevations" },
+ {"line": "display-description-fontsize", "contents": "Font size for labels on layout" },
+ {"line": "display-hotbarlabels", "contents": "Label elements on the Hot Bar" },
+ {"line": "display-layoutlabels", "contents": "Label elements on layout" },
+ {"line": "display-listlabels", "contents": "Label elements for lists" },
+ {"line": "display-carhotbarlabels", "contents": "How to group cars on the Train Hot Bar" },
+ {"line": "display-trainpause", "contents": "Delay (in mS) between updating train movements" },
+ {"line": "display-hideTrainsInTunnels", "contents": "Don't show trains in tunnels when tunnels are hidden" },
+ {"line": "display-unconnected-endpt", "contents": "Display unconnected endpoints of track with special marks" },
+ {"line": "display-constrainmain", "contents": "Whether the Main Drawing Area shows as much of the room as possible" },
+ {"line": "display-ok", "contents": "" },
+ {"line": "draw-linewidth", "contents": "Width of the lines" },
+ {"line": "draw-linecolor", "contents": "Color of the lines" },
+ {"line": "draw-benchlist", "contents": "List of types of Lumber" },
+ {"line": "draw-benchcolor", "contents": "Color of Benchwork" },
+ {"line": "draw-benchorient", "contents": "Orientation of Benchwork" },
+ {"line": "draw-arrowsize", "contents": "Size of Dimension Arrows" },
+ {"line": "easement-val", "contents": "This controls the sharpness of the easement curve" },
+ {"line": "easement-r", "contents": "Minimum radius" },
+ {"line": "easement-x", "contents": "Maximum offset" },
+ {"line": "easement-l", "contents": "Easement length" },
+ {"line": "easement-radio", "contents": "These radio buttons are a short-cut for Values of 0.0, 0.5, 1.0 and 2.0. None turns Easements off" },
+ {"line": "easement-ok", "contents": "Complete easement selection" },
+ {"line": "elev-mode", "contents": "Type of elevation" },
+ {"line": "elev-value", "contents": "Height of End Point" },
+ {"line": "elev-computed", "contents": "Compute elevation based on neighbors" },
+ {"line": "elev-grade", "contents": "Compute grade based on neighbors" },
+ {"line": "elev-station", "contents": "Specify a name for an End-Point" },
+ {"line": "elev-ok", "contents": "" },
+ {"line": "enum-print", "contents": "Print parts list" },
+ {"line": "enum-printsetup", "contents": "Invoke the Print Setup dialog" },
+ {"line": "enum-save", "contents": "Save parts list to file" },
+ {"line": "enum-text", "contents": "This is the list of parts for the layout" },
+ {"line": "enum-list-prices", "contents": "Enable prices on the Parts List" },
+ {"line": "grid-horzspacing", "contents": "Spacing between major grid lines" },
+ {"line": "grid-horzdivision", "contents": "Allows the spacing to be subdivided" },
+ {"line": "grid-horzenable", "contents": "Specifies if positions are snaped in this direction" },
+ {"line": "grid-vertspacing", "contents": "Spacing between major grid lines" },
+ {"line": "grid-vertdivision", "contents": "Allows the spacing to be subdivided" },
+ {"line": "grid-vertenable", "contents": "Specifies if positions are snaped in this direction" },
+ {"line": "grid-origx", "contents": "Shows the origin and angle of the grid" },
+ {"line": "grid-origy", "contents": "Shows the origin and angle of the grid" },
+ {"line": "grid-origa", "contents": "Shows the origin and angle of the grid" },
+ {"line": "grid-show", "contents": "Specifies if the grid is shown" },
+ {"line": "grid-ok", "contents": "Completes the grid specification" },
+ {"line": "group-manuf", "contents": "Manufacturer" },
+ {"line": "group-desc", "contents": "Description" },
+ {"line": "group-partno", "contents": "Part Number" },
+ {"line": "group-segcnt", "contents": "Number of segments in Group" },
+ {"line": "group-replace", "contents": "Replace the Selected object with the new definition?" },
+ {"line": "group-ok", "contents": "Creates a new Structure (or Turnout)" },
+ {"line": "helix-elev", "contents": "Elevation difference of Helix End-Points" },
+ {"line": "helix-radius", "contents": "Helix Radius" },
+ {"line": "helix-turns", "contents": "Number of turns in the helix" },
+ {"line": "helix-angSep", "contents": "Angle betweek helix entrance and exit" },
+ {"line": "helix-grade", "contents": "Grade in helix" },
+ {"line": "helix-vertSep", "contents": "Separation between helix layers" },
+ {"line": "join-fixed-radius", "contents": "Desired curve radius between straight tracks" },
+ {"line": "layer-layer", "contents": "Layer list" },
+ {"line": "layer-name", "contents": "Layer Name" },
+ {"line": "layer-color", "contents": "Color of layer" },
+ {"line": "layer-visible", "contents": "Layer is drawn on Main window" },
+ {"line": "layer-frozen", "contents": "Layer cannot be changed" },
+ {"line": "layer-onmap", "contents": "Layer is drawn on Map window" },
+ {"line": "layer-button-count", "contents": "Number of layer buttons to show" },
+ {"line": "layer-object-count", "contents": "Number of objects in this layer" },
+ {"line": "layer-ok", "contents": "" },
+ {"line": "layer-reset", "contents": "Load layer configuration from default" },
+ {"line": "layer-save", "contents": "Save current layer configuration as default" },
+ {"line": "layer-clear", "contents": "Overwrite layer configuration with system default values" },
+ {"line": "layout-roomsizeX", "contents": "Specifies the size of the room (in inches or centimeters)" },
+ {"line": "layout-roomsizeY", "contents": "Specifies the size of the room (in inches or centimeters)" },
+ {"line": "layout-title1", "contents": "Specifies the layout Title that will appear on printouts" },
+ {"line": "layout-title2", "contents": "Specifies the layout Subtitle that will appear on printouts" },
+ {"line": "layout-scale", "contents": "Specifies the Modelling Scale" },
+ {"line": "layout-gauge", "contents": "Specifies the rail gauge, ie. the distance between the rails" },
+ {"line": "layout-mintrackradius", "contents": "Specifies minimum track radius (in inches or centimeters). Tracks with a smaller radius are considered exceptional." },
+ {"line": "layout-maxtrackgrade", "contents": "Specifies maximum track elevation expressed as a percent (%). Tracks with a larger elevation are considered exceptional." },
+ {"line": "layout-browse", "contents": "Select the background image" },
+ {"line": "layout-clear", "contents": "Remove the background image" },
+ {"line": "layout-backgroundposX", "contents": "Specifies the x offset of the bottom left of the background image" },
+ {"line": "layout-backgroundposY", "contents": "Specifies the y offset of the bottom left of the background image" },
+ {"line": "layout-backgroundWidth", "contents": "Specifies how large the bottom edge of the background image should be in model units" },
+ {"line": "layout-backgroundScreen", "contents": "Specifies the screening of the background image from 0 (none) to 100% (vanishes)" },
+ {"line": "layout-backgroundAngle", "contents": "Specifies the rotation angle of the background image in degrees" },
+ {"line": "newcar-road", "contents": "Roadname" },
+ {"line": "newcar-number", "contents": "Car Number" },
+ {"line": "note-text", "contents": "This is the body of the Note. To change this select Modify from the File Menu" },
+ {"line": "note-ok", "contents": "" },
+ {"line": "outputbitmap-density", "contents": "Specifies number of pixels per inch (or centimeter)" },
+ {"line": "outputbitmap-ok", "contents": "" },
+ {"line": "outputbitmap-toggles", "contents": "Specifies whether Layout Titles, Borders or Track Centerlines are printed on the BitMap" },
+ {"line": "parallel-separation", "contents": "Specifies the separation between the original track and the parallel track/line" },
+ {"line": "parallel-factor", "contents": "Specifies the a factor that increases the seperation as the radius of the original track reduces. 0.0 means no increase." },
+ {"line": "parameter-name", "contents": "Enter your name as specified in the XTrackCAD Registration Notice" },
+ {"line": "parameter-key", "contents": "Enter the key value as specified in the XTrackCAD Registration Notice" },
+ {"line": "parameter-ok", "contents": "Validates the name and key. Terminates the registration command" },
+ {"line": "pref-anglesystem", "contents": "0� is up or to the right" },
+ {"line": "pref-units", "contents": "Choose english (inches) or metric (centimeters)" },
+ {"line": "pref-dstfmt", "contents": "How to display length measurements" },
+ {"line": "pref-minlength", "contents": "Do not create tracks to be shorter than this value" },
+ {"line": "pref-connectdistance", "contents": "Maximum distance between connected end points" },
+ {"line": "pref-connectangle", "contents": "Minimum angle between connected End-Points" },
+ {"line": "pref-turntable-angle", "contents": "Specifies the minimum angle between tracks connected to a turntable" },
+ {"line": "pref-coupling-speed-max", "contents": "Trains will crash above this speed" },
+ {"line": "pref-balloonhelp", "contents": "Enable/Disable balloon popup help windows" },
+ {"line": "pref-showflextrack", "contents": "Enable/Disable show of flextrack on hotbar" },
+ {"line": "pref-dragpixels", "contents": "How far you can move the mouse before its considered a drag" },
+ {"line": "pref-dragtimeout", "contents": "How long you can hold a mouse button down before its considered a drag" },
+ {"line": "pref-mingridspacing", "contents": "Minimum distance (in pixels) between grid lines/ticks" },
+ {"line": "pref-checkpoint", "contents": "Specifies the Check Point frequency; number of modifications made since the last checkpoint." },
+ {"line": "pref-autosave", "contents": "Specifies the number of checkpoints after save before auto-saving." },
+ {"line": "pref-onstartup", "contents": "Resume work on last layout or start with new layout" },
+ {"line": "pref-ok", "contents": "" },
+ {"line": "pricelist-cost", "contents": "Updated cost of current selected item" },
+ {"line": "pricelist-entry", "contents": "Item" },
+ {"line": "pricelist-inx", "contents": "Selection list for prices" },
+ {"line": "pricelist-flexlen", "contents": "Price of specified length of flex-track" },
+ {"line": "pricelist-flexunit", "contents": "Price of specified length of flex-track" },
+ {"line": "pricelist-flexcost", "contents": "Price of specified length of flex-track" },
+ {"line": "pricelist-ok", "contents": "" },
+ {"line": "print-centerLine", "contents": "Controls the printing of a centerline of track cmdPrint" },
+ {"line": "print-scale", "contents": "Controls the reduction (scale) of the printout" },
+ {"line": "print-pagew", "contents": "Scaled page width (Scale times physical page width)" },
+ {"line": "print-max", "contents": "Sets page size to the maximum (based on scale and physical page size)" },
+ {"line": "print-pageh", "contents": "Scaled page height (Scale times physical page height)" },
+ {"line": "print-snapshot", "contents": "Sets scale, origin and angle for a one page printout of the layout" },
+ {"line": "print-format", "contents": "Print page in Portrait or Landscape format" },
+ {"line": "print-order", "contents": "Order of printing pages" },
+ {"line": "print-style", "contents": "Print Title, Date, Author and other information at bottom of page?" },
+ {"line": "print-physsize", "contents": "Ignore unprintable page margins?" },
+ {"line": "print-registrationMarks", "contents": "Print Registration Marks at 1:1?" },
+ {"line": "print-grid", "contents": "Print Snap Grid?" },
+ {"line": "print-ruler", "contents": "Print Rulers on all page edges?" },
+ {"line": "print-roadbed", "contents": "Print Roadbed Outline?" },
+ {"line": "print-roadbedWidth", "contents": "Print Roadbed Outline" },
+ {"line": "print-origx", "contents": "Origin of the print grid. This is useful if you want to reprint a set of pages" },
+ {"line": "print-origy", "contents": "Origin of the print grid. This is useful if you want to reprint a set of pages" },
+ {"line": "print-reset", "contents": "Resets the origin and angle to 0" },
+ {"line": "print-origa", "contents": "Origin of the print grid. This is useful if you want to reprint a set of pages" },
+ {"line": "print-clear", "contents": "Deselects all pages" },
+ {"line": "print-setup", "contents": "Invoke the Print Setup dialog" },
+ {"line": "print-ok", "contents": "Print selected pages and terminates the print command" },
+ {"line": "prmfile-inx", "contents": "List of loaded, shown or hidden parameter files" },
+ {"line": "prmfile-mode", "contents": "Show parameter files by names or descriptions" },
+ {"line": "prmfile-action", "contents": "Toggle the shown status of the selected parameter file" },
+ {"line": "prmfile-browse", "contents": "Find extra parameter files from the filesystem" },
+ {"line": "prmfile-find", "contents": "Find parameter files from the system library" },
+ {"line": "prmfile-ok", "contents": "Update parameter file list" },
+ {"line": "prmfile-reload", "contents": "Reload parameter file from list" },
+ {"line": "prmfile-selectall", "contents": "Select all parameter files shown" },
+ {"line": "profile-canvas", "contents": "Profile of specified path" },
+ {"line": "profile-clear", "contents": "Clear the profile" },
+ {"line": "profile-print", "contents": "Print the profile" },
+ {"line": "profile-ok", "contents": "" },
+ {"line": "record-stop", "contents": "Stop recording" },
+ {"line": "record-message", "contents": "Insert a message" },
+ {"line": "record-end", "contents": "End a message" },
+ {"line": "record-text", "contents": "Message body" },
+ {"line": "refreshSpecial-list", "contents": "Possible turnouts" },
+ {"line": "refreshSpecial-skip", "contents": "Skip this turnout" },
+ {"line": "refreshSpecial-ok", "contents": "" },
+ {"line": "rename-manuf", "contents": "Manufacturer of Object" },
+ {"line": "rename-desc", "contents": "Description of Object" },
+ {"line": "rename-partno", "contents": "Part Nuber of Object" },
+ {"line": "rename-ok", "contents": "" },
+ {"line": "rescale-toggle", "contents": "Rescale by Scale Conversion or by Ratio" },
+ {"line": "rescale-fromS", "contents": "Original Scale of the selected objects" },
+ {"line": "rescale-fromG", "contents": "Original Gauge of the selected objects" },
+ {"line": "rescale-toS", "contents": "New Scale of the selected objects" },
+ {"line": "rescale-toG", "contents": "New Gauge of the selected objects" },
+ {"line": "rescale-change-dim", "contents": "Change track dimensions to new scale" },
+ {"line": "rescale-ratio", "contents": "Change size by this amount" },
+ {"line": "rescale-ok", "contents": "" },
+ {"line": "rgbcolor-snapgrid", "contents": "Snap Grid Line and Division" },
+ {"line": "rgbcolor-marker", "contents": "X and Y position markers" },
+ {"line": "rgbcolor-border", "contents": "Border rulers, room boundaries and table edges" },
+ {"line": "rgbcolor-crossmajor", "contents": "Primary Axis of grid rotation" },
+ {"line": "rgbcolor-crossminor", "contents": "Secondary Axis of grid rotation" },
+ {"line": "rgbcolor-normal", "contents": "Unselected tracks" },
+ {"line": "rgbcolor-selected", "contents": "Selected tracks" },
+ {"line": "rgbcolor-profile", "contents": "Color of tracks on the Profile path" },
+ {"line": "rgbcolor-exception", "contents": "Color of Exceptional tracks" },
+ {"line": "rgbcolor-tie", "contents": "Color of track ties" },
+ {"line": "rgbcolor-ok", "contents": "Updates the colors" },
+ {"line": "rotate-rotate", "contents": "Angle in degrees" },
+ {"line": "rotate-ok", "contents": "Rotate object(s) by specified amount" },
+ {"line": "searchgui-query", "contents": "Enter one or more words as search terms '*' means all" },
+ {"line": "searchgui-find", "contents": "Find matching file descriptions" },
+ {"line": "searchgui-inx", "contents": "Search Results" },
+ {"line": "searchgui-mode", "contents": "Show Descriptions or FileNames in results" },
+ {"line": "searchgui-apply", "contents": "Add selected entries into parameter file list" },
+ {"line": "searchgui-selectall", "contents": "Select All found entries" },
+ {"line": "searchgui-default", "contents": "Reload the system library contents for finding" },
+ {"line": "sticky-set", "contents": "Choose commands to be sticky" },
+ {"line": "sticky-ok", "contents": "Make the commands sticky" },
+ {"line": "structure-list", "contents": "List of available structure" },
+ {"line": "structure-canvas", "contents": "Diagram of the selected structure" },
+ {"line": "structure-hide", "contents": "Hide Selection window when placing Structure" },
+ {"line": "structure-stats", "contents": "Drawing scale and size" },
+ {"line": "structure-ok", "contents": "Complete structure placement" },
+ {"line": "structure-pier-inx", "contents": "Choose a Pier number" },
+ {"line": "switchmotor-name", "contents": "Name of the Motor" },
+ {"line": "switchmotor-normal", "contents": "Value when switch is normal" },
+ {"line": "switchmotor-reverse", "contents": "Value when the switch is reversed" },
+ {"line": "switchmotor-pointSense", "contents": "Value for a positive comfirmation of switch position" },
+ {"line": "text-fontsize", "contents": "Controls the size of the entered text" },
+ {"line": "tip-text", "contents": "Useful information about the program" },
+ {"line": "tip-showatstart", "contents": "Show Tip of the Day every time the program starts" },
+ {"line": "tip-next", "contents": "Show the next Tip of the Day" },
+ {"line": "tip-prev", "contents": "Show the previous Tip of the Day" },
+ {"line": "tip-ok", "contents": "" },
+ {"line": "toolbarM", "contents": "Controls which Command Buttons are displayed" },
+ {"line": "train-newcar-index", "contents": "List of Cars" },
+ {"line": "train-list", "contents": "List of active trains" },
+ {"line": "train-speed", "contents": "Speed" },
+ {"line": "train-distance", "contents": "Train odometer" },
+ {"line": "train-zeroDistance", "contents": "Reset odometer to 0" },
+ {"line": "train-goto", "contents": "Find train on layout" },
+ {"line": "train-follow", "contents": "Follow train around layout" },
+ {"line": "train-autoreverse", "contents": "Flip direction at End Of Track" },
+ {"line": "train-direction", "contents": "Change direction of train" },
+ {"line": "train-stop", "contents": "Stop the train" },
+ {"line": "turnout-list", "contents": "List of available turnouts for the current scale" },
+ {"line": "turnout-canvas", "contents": "Diagram of the currently selected turnout. Click on a End-Point to select the Active End-Point" },
+ {"line": "turnout-new", "contents": "A menu list of various type of turnouts and sectional tracks you can define" },
+ {"line": "turnout-hide", "contents": "Hide Selection window when placing Turnout" },
+ {"line": "turnout-activeEndPoint", "contents": "The selected Active End-Point" },
+ {"line": "turnout-current", "contents": "Current selected turnout, (displayed in the diagram window)" },
+ {"line": "turnout-endPoint", "contents": "One the End-Points that can be selected" },
+ {"line": "turnout-ok", "contents": "" },
+ {"line": "turnoutNew-angle1", "contents": "Angle of the specified track to the center line of the turnout" },
+ {"line": "turnoutNew-angle2", "contents": "Angle of the specified track to the center line of the turnout" },
+ {"line": "turnoutNew-angleMode", "contents": "Specifies if angles are entered as Frog Numbers or in degrees" },
+ {"line": "turnoutNew-desc1", "contents": "Desciption" },
+ {"line": "turnoutNew-desc2", "contents": "Desciption" },
+ {"line": "turnoutNew-label", "contents": "Turnout description (Manuf., Size, Part Number, etc)" },
+ {"line": "turnoutNew-len0", "contents": "Length from the base to the end of the specified track" },
+ {"line": "turnoutNew-len1", "contents": "Length from the base to the end of the specified track" },
+ {"line": "turnoutNew-len2", "contents": "Length from the base to the end of the specified track" },
+ {"line": "turnoutNew-manuf", "contents": "Manufacturer" },
+ {"line": "turnoutNew-off1", "contents": "Offset of the track End-Point from the center line of the turnout" },
+ {"line": "turnoutNew-off2", "contents": "Offset of the track End-Point from the center line of the turnout" },
+ {"line": "turnoutNew-partno1", "contents": "Part Number" },
+ {"line": "turnoutNew-partno2", "contents": "Part Number" },
+ {"line": "turnoutNew-print", "contents": "Prints a full size diagram of the turnout for checking" },
+ {"line": "turnoutNew-ok", "contents": "Prints a full size diagram of the turnout for checking" },
+ {"line": "turnoutNew-color", "contents": "Color of Roadbed lines" },
+ {"line": "turnoutNew-roadbedLineWidth", "contents": "Width of Roadbed lines" },
+ {"line": "turnoutNew-roadbedWidth", "contents": "Width of Roadbed" },
+ {"line": "turnoutNew-printsetup", "contents": "Invoke the Print Setup dialog" },
+ {"line": "turnoutNew-done", "contents": "Closes the window and returns to the Turnout Selection window" },
+ {"line": "turntable-diameter", "contents": "Specifies the diameter of the turntable" },
+ {"line": "updatetitle-old", "contents": "Old Turnout title" },
+ {"line": "updatetitle-sel", "contents": "List of available titles" },
+ {"line": "updatetitle-ignore", "contents": "Leave the Turnouts' title unchanged" },
+ {"line": "updatetitle-load", "contents": "Invoke the Parameter Files dialog" },
+ {"line": "updatetitle-list", "contents": "List of available turnouts" },
+ {"line": "updatetitle-ok", "contents": "Update the Turnouts' title" },
+ {"line": "fontSelCancel", "contents": "Cancel" },
+ {"line": "fontSelList", "contents": "List" },
+ {"line": "fontSelOk", "contents": "Ok" },
+ {"line": "fontSelSample", "contents": "Sample" },
+ {"line": "fontSelSize", "contents": "Size" },
+ {"line": "fontSelSlant", "contents": "Slant" },
+ {"line": "fontSelW", "contents": "Font selection dialog" },
+ {"line": "fontSelWeight", "contents": "Weight" },
+ {"line": "printAbortW", "contents": "Printer Abort Window" },
+ {"line": "printFileName", "contents": "Print to filename" },
+ {"line": "printFontAlias", "contents": "Specify Postscript font alias mapping" },
+ {"line": "printSetup", "contents": "Displays the Print Setup window to change printers, orientation, paper size, etc." },
+ {"line": "printSetupCancel", "contents": "Closes this dialog" },
+ {"line": "printSetupFormat", "contents": "Page orientation" },
+ {"line": "printSetupMargin", "contents": "Unprintable margins" },
+ {"line": "printSetupOk", "contents": "Updates and closes this dialog" },
+ {"line": "printSetupPaper", "contents": "Choose paper size" },
+ {"line": "printSetupPrinter", "contents": "Choose printer" },
+ {"line": "printSetupTest", "contents": "Print test page" },
+ {"line": "about", "contents": "No Help" },
+ {"line": "about-about", "contents": "No Help" },
+ {"line": "about-ok", "contents": "" },
+ {"line": "cmdDebug", "contents": "No Help" },
+ {"line": "loosen", "contents": "No Help" },
+ {"line": "misc-cur-turnout-ep", "contents": "" },
+ {"line": "misc-toolbarset", "contents": "No Help" },
+ {"line": "misc-showlayout", "contents": "No Help" },
+ {"line": "misc-showdisplay", "contents": "No Help" },
+ {"line": "misc-showcmdopt", "contents": "No Help" },
+ {"line": "misc-showeasement", "contents": "No Help" },
+ {"line": "misc-showfontSel", "contents": "No Help" },
+ {"line": "misc-showgrid", "contents": "No Help" },
+ {"line": "misc-showdebug", "contents": "No Help" },
+ {"line": "misc-sticky", "contents": "No Help" },
+ {"line": "misc-showpref", "contents": "No Help" },
+ {"line": "misc-showcolor", "contents": "No Help" },
+ {"line": "misc-showfileClear", "contents": "No Help" },
+ {"line": "misc-showparamFile", "contents": "No Help" },
+ {"line": "misc-showpriceList", "contents": "No Help" },
+ {"line": "misc-showprint", "contents": "No Help" },
+ {"line": "misc-showprintSetup", "contents": "No Help" },
+ {"line": "misc-showprintBitmap", "contents": "No Help" },
+ {"line": "misc-showpartsList", "contents": "No Help" },
+ {"line": "misc-shownotes", "contents": "No Help" },
+ {"line": "misc-showundo", "contents": "No Help" },
+ {"line": "misc-showredo", "contents": "No Help" },
+ {"line": "misc-showcut", "contents": "No Help" },
+ {"line": "misc-showcopy", "contents": "No Help" },
+ {"line": "misc-showpaste", "contents": "No Help" },
+ {"line": "misc-showdelete", "contents": "No Help" },
+ {"line": "misc-showtunnel", "contents": "No Help" },
+ {"line": "misc-showabove", "contents": "No Help" },
+ {"line": "misc-showbelow", "contents": "No Help" },
+ {"line": "misc-showwidth0", "contents": "No Help" },
+ {"line": "misc-showwidth2", "contents": "No Help" },
+ {"line": "misc-showwidth3", "contents": "No Help" },
+ {"line": "misc-showrecompelev", "contents": "No Help" },
+ {"line": "misc-showcardesc", "contents": "No Help" },
+ {"line": "misc-showcaradd", "contents": "No Help" },
+ {"line": "misc-showselectAll", "contents": "No Help" },
+ {"line": "misc-showimport", "contents": "No Help" },
+ {"line": "misc-showexport", "contents": "No Help" },
+ {"line": "misc-showexportDXF", "contents": "No Help" },
+ {"line": "misc-showloosen", "contents": "No Help" },
+ {"line": "misc-group-objects", "contents": "No Help" },
+ {"line": "misc-ungroup-objects", "contents": "No Help" },
+ {"line": "misc-showcustomMgm", "contents": "No Help" },
+ {"line": "misc-showlayers", "contents": "No Help" },
+ {"line": "misc-showmoveToCurrentLayer", "contents": "No Help" },
+ {"line": "misc-showselectCurrentLayer", "contents": "No Help" },
+ {"line": "misc-showclearElevations", "contents": "No Help" },
+ {"line": "misc-showaddElevations", "contents": "No Help" },
+ {"line": "debug-Track", "contents": "No Help" },
+ {"line": "debug-EndPt", "contents": "No Help" },
+ {"line": "debug-ReadTracks", "contents": "No Help" },
+ {"line": "debug-Curve", "contents": "No Help" },
+ {"line": "debug-Join", "contents": "No Help" },
+ {"line": "debug-Turnout", "contents": "No Help" },
+ {"line": "debug-Structure", "contents": "No Help" },
+ {"line": "debug-Print", "contents": "No Help" },
+ {"line": "debug-ok", "contents": "" },
+ {"line": "map-canvas", "contents": "No Help" },
+ {"line": "cmdLayerShow0", "contents": "Layer" },
+ {"line": "cmdLayerShow1", "contents": "Layer" },
+ {"line": "cmdLayerShow2", "contents": "Layer" },
+ {"line": "cmdLayerShow3", "contents": "Layer" },
+ {"line": "cmdLayerShow4", "contents": "Layer" },
+ {"line": "cmdLayerShow5", "contents": "Layer" },
+ {"line": "cmdLayerShow6", "contents": "Layer" },
+ {"line": "cmdLayerShow7", "contents": "Layer" },
+ {"line": "cmdLayerShow8", "contents": "Layer" },
+ {"line": "cmdLayerShow9", "contents": "Layer" },
+ {"line": "cmdLayerShow10", "contents": "Layer" },
+ {"line": "cmdLayerShow11", "contents": "Layer" },
+ {"line": "cmdLayerShow12", "contents": "Layer" },
+ {"line": "cmdLayerShow13", "contents": "Layer" },
+ {"line": "cmdLayerShow14", "contents": "Layer" },
+ {"line": "cmdLayerShow15", "contents": "Layer" },
+ {"line": "cmdLayerShow16", "contents": "Layer" },
+ {"line": "cmdLayerShow17", "contents": "Layer" },
+ {"line": "cmdLayerShow18", "contents": "Layer" },
+ {"line": "cmdLayerShow19", "contents": "Layer" }
+ ]
+}
diff --git a/app/help/messages.in b/app/help/messages.in
index 519f2f8..f5bb62b 100644
--- a/app/help/messages.in
+++ b/app/help/messages.in
@@ -78,6 +78,16 @@ HELP
The angle specified for a curve must be between 0\u00B0 and 360\u00B0.
END
+# ctodesgn.c
+MESSAGE MSG_TODSGN_CORNU_TOO_COMPLEX
+The curves created by the Turnout Designer for a cornu curve have more than 128 segments.
+Try adjusting the end angles and radii to be closer in values.
+HELP
+Too complex a curve set to be used. Respecify \f{Turnout Designer} values.
+
+Refer to \k{cmdTurnoutNew} for detail.
+END
+
# dcustmgm.c
MESSAGE MSG_CUSTMGM_DELETE_CONFIRM
Are you sure you want to delete the
@@ -114,7 +124,7 @@ Cannot change elevation mode.
HELP
In the \f{Profile} command, the \f{Elevation} mode for this \e{endpoint} can be change only if it is \f{Defined}, \f{Ignored} or \f{None}. The \f{Elevation} command can be used to change this \e{endpoint}.
-Refer to \k{cmdElev} for detail.
+Refer to \k{cmdElevation} for detail.
END
# csnap.c
@@ -160,6 +170,15 @@ The current \f{Layer} is where most new objects are created. It's not possible t
Refer to \k{cmdLayer} for detail.
END
+# dlayer.c
+MESSAGE MSG_LAYER_MODULE
+Cannot turn current layer into a Module
+HELP
+The current \f{Layer} is where new objects are created. It's not possible to turn this layer into a module, since then the objects can't be chnaged or added. Change the current \f{Layer} to some other \f{Layer} before trying to make this Layer into a module.
+
+Refer to \k{cmdLayer} for detail.
+END
+
# cjoin.c track.c:getTrackParams/PARAMS_..._JOIN
MESSAGE MSG_JOIN_EASEMENTS
Cannot Join; Easements do not align or abut.
@@ -189,7 +208,7 @@ You cannot select a \f{Turntable} as the second track in \f{Join} command. If yo
Refer to \k{cmdJoin} for detail.
END
- ccornu.c
+# ccornu.c
MESSAGE MSG_JOIN_CORNU_SAME
Cannot Join; Selected endpoints are on same track.
HELP
@@ -376,6 +395,48 @@ necessary to upgrade your version of \e{XTrackCAD} to at least the version ident
Take full advantage of the latest features within \e{XTrackCAD} by visiting the \W{http://www.xtrkcad.org/}{\e{XTrackCAD} Fork Website} and downloading the latest release.
END
+#fileio.c
+MESSAGE MSG_LAYOUT_LINES_SKIPPED
+While processing Layout file %s, %d lines were skipped because they were not recognized.
+HELP
+The layout file that you loaded contained records that were not recognized. This could be because the file was written by a higher level of \e{XTrackCAD} or because it was corrupted.
+
+Take full advantage of the latest features within \e{XTrackCAD} by visiting the \W{http://www.xtrkcad.org/}{\e{XTrackCAD} Fork Website} and downloading the latest release.
+END
+
+#paramfile.c
+MESSAGE MSG_PARAM_UPGRADE_VERSION1
+File version %ld is greater than supported
+version %d. You need to upgrade %s
+to at least version %s.
+HELP
+The parameter file that you're attempting to load was designed for a newer version
+of \e{XTrackCAD}. In order to load this file it will be necessary to upgrade your version of \e{XTrackCAD} to at least the version identified within the error message.
+
+Take full advantage of the latest features within \e{XTrackCAD} by visiting the \W{http://www.xtrkcad.org/}{\e{XTrackCAD} Website} and downloading the latest release.
+END
+
+#paramfile.c
+MESSAGE MSG_PARAM_UPGRADE_VERSION2
+File version %ld is greater than supported
+version %d. You need to upgrade your
+version of %s
+HELP
+The parameter file that you're attempting to load was designed for a newer version of \e{XTrackCAD}. In order to load this file it will be
+necessary to upgrade your version of \e{XTrackCAD} to at least the version identified within the error message.
+
+Take full advantage of the latest features within \e{XTrackCAD} by visiting the \W{http://www.xtrkcad.org/}{\e{XTrackCAD} Fork Website} and downloading the latest release.
+END
+
+#paramfile.c
+MESSAGE MSG_PARAM_LINES_SKIPPED
+While processing Parameter file %s, %d lines were skipped because they were not recognized.
+HELP
+The parameter file that you loaded contained records that were not recognized. This could be because the file was designed for a higher level of \e{XTrackCAD} or because it was corrupted.
+
+Take full advantage of the latest features within \e{XTrackCAD} by visiting the \W{http://www.xtrkcad.org/}{\e{XTrackCAD} Fork Website} and downloading the latest release.
+END
+
# chndldto.c
MESSAGE MSG_MOVE_POINTS_OTHER_SIDE
Frog angle prevents placement of points. Move points to opposite side of frog.
@@ -404,6 +465,16 @@ You are connecting two \e{endpoints} which differ in heights by N.NNN. The eleva
END
# cselect.c:cmdMoveDescription
+MESSAGE MSG_TRK_DESC_NOT_VISIBLE
+Label description is hidden
+HELP
+The \f{Move Description} command can only be used when labels are visible on the layout. Labels can be hidden using the Context Menu.
+
+Use the Context Menu to toggle a track's visbility on and off.
+
+END
+
+# cselect.c:cmdMoveDescription
MESSAGE MSG_DESC_NOT_VISIBLE
Label descriptions not visible
HELP
@@ -439,6 +510,13 @@ Values for \f{Page Width} and \f{Height} can be manually entered thus overriding
Refer to \k{cmdPrint} for detail.
END
+MESSAGE MSG_NO_PRINTER_SELECTED
+Please select a printer from the Print Setup dialog.
+HELP
+Printer Margins are specific to the selected printer, but no selected printer is chosen.
+You can select a printer from the Print Setup dialog.
+END
+
# dprmfile.c
MESSAGE MSG_PRMFIL_NO_CONTENTS
New Parameter File has no CONTENTS line: %s
@@ -518,6 +596,13 @@ The current command operates on \f{Select}ed tracks of which there are none. \f{
Refer to \k{cmdSelect} for detail.
END
+# dlayer.c
+MESSAGE MSG_NO_EMPTY_LAYER
+No layer was found that has no contents, so the module can not be imported
+HELP
+The import module function needs an empty layer to work with, but none could be found. Clear a layer and retry.
+END
+
# dcmpnd.c:refreshCompound
MESSAGE MSG_NO_TURNOUTS_AVAILABLE
No %s are available.
@@ -551,9 +636,9 @@ END
# cparalle.c
MESSAGE MSG_PARALLEL_SEP_GTR_0
-Parallel separation must be greater than 0.
+Parallel separation must be greater than 0, or the new guage must be different than the old.
HELP
-A parallel track with a separation of 0 or less cannot be created. Specify a positive value in the \f{Separation} field that appears in the Status Bar.
+A parallel track with an identical gauge and separation of 0 or less cannot be created. Specify a positive value in the \f{Separation} field that appears in the Status Bar, or select a track with a different guage.
Refer to \k{cmdParallel} for detail.
END
@@ -617,7 +702,14 @@ END
MESSAGE MSG_POLY_SHAPES_3_SIDES
Poly shapes must have at least 3 sides.
HELP
-Polygons and Poly Lines must have at least 3 sides. By moving one of the corners close to another corner you're attempting to merge the corners and create a Poly shape with only 2 sides. Try moving the other corner to the new position first.
+Polygons and Poly Lines must have at least 3 sides. You're attempting to create a Poly shape with only 2 sides by deleting the third.
+END
+
+# drawgeom.c
+MESSAGE MSG_POLY_MULTIPLE_SELECTED
+Can't delete multiple points at once
+HELP
+Polygons and Poly Lines points can only be deleted one at a time.
END
# dcar.c
@@ -928,6 +1020,15 @@ This operation cannot be executed as the selected track is present on a frozen l
Refer to \k{cmdLayer} for detail.
END
+# track.c
+MESSAGE MSG_CANT_MODIFY_MODULE_TRK
+Tracks in a module cannot be modified.
+HELP
+This operation cannot be executed as the selected track is present in a module layer. Track modifications may be performed only on unfrozen, non-module layers.
+
+Refer to \k{cmdLayer} for detail.
+END
+
#ctodesgn.c
MESSAGE MSG_SEGMENTS_DIFFER
Turnout definition contains non-track segments.
@@ -1015,6 +1116,132 @@ Cannot open %s file:
#NOHELP
END
+# fileio.c
+MESSAGE MSG_DIR_CREATE_FAIL
+Cannot create directory: %s - %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_DIR_OPEN_FAIL
+Cannot open directory: %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_NOT_DIR_FAIL
+Path for deletion is not a directory: %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_OPEN_DIR_FAIL
+Open failed for directory: %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_ZIP_DIR_ADD_FAIL
+Can't add directory record %s to zip - %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_ZIP_FILE_ADD_FAIL
+Can't add file record %s to zip at %s - %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_ZIP_CREATE_FAIL
+Can't create zip %s - %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_ZIP_CLOSE_FAIL
+Close failure for zip %s - %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_ZIP_RENAME_FAIL
+Rename failure for zip from %s to %s - %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_ZIP_OPEN_FAIL
+Open failure for zip %s - %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_ZIP_INDEX_FAIL
+Index failure for zip %s - %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_ZIP_FILE_OPEN_FAIL
+Open read file failure %s %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_ZIP_READ_FAIL
+Open file in zip failure %s %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_UNLINK_FAIL
+Unlink failed for: %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_RMDIR_FAIL
+Remove Directory failed for: %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_ARCHIVE_FAIL
+Cannot save archive to %s from directory: %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_MANIFEST_FAIL
+Cannot save manifest file to %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_MANIFEST_OPEN_FAIL
+Cannot open manifest file %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_UNPACK_FAIL
+Cannot unpack file: %s for file: %s in directory: %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_COPY_OPEN_FAIL
+Cannot open file %s
+#NOHELP
+END
+
+# fileio.c
+MESSAGE MSG_COPY_FAIL
+Cannot copy file %s into directory %s
+#NOHELP
+END
+
# various
MESSAGE MSG_BAD_OPTION
Unrecognized Option: %s
@@ -1208,7 +1435,12 @@ layout file using an older version of %s
#NOHELP
END
-
+# paramfile.c
+MESSAGE MSG_PARAM_BAD_FILE_VERSION
+File version %ld is lower than the minimum
+supported version %d.This parameter file will only work using an older version of %s
+#NOHELP
+END
# macro.c
MESSAGE MSG_CANT_READ_DEMO
diff --git a/app/help/xtrkcad.info b/app/help/xtrkcad.info
deleted file mode 100644
index 6350f82..0000000
--- a/app/help/xtrkcad.info
+++ /dev/null
@@ -1,1123 +0,0 @@
-INFO-DIR-SECTION CAD
-START-INFO-DIR-ENTRY
-* xtrkcad: xtrkcad-4.2.4. Model Train Track CAD Program
-END-INFO-DIR-ENTRY
-
-:Help
-Invokes on-line help for this dialog
-:cancel
-Cancels this command
-:Close
-Closes the dialog
-:cmdAbout
-About box dialog
-:cmdAbove
-Move Selected object to top
-:cmdAddElevations
-Raise or Lower all Selected tracks
-:cmdBelow
-Move Selected object to bottom
-:cmdBlockCreate
-Create a section of track for automation.
-:cmdCarDesc
-Create a new Car/Loco description
-:cmdCarInventory
-Manage your Car and Loco Inventory
-:cmdCircleCenter
-Create track circle from center
-:cmdCircleFixedRadius
-Create fixed radius track circle
-:cmdCircleSetCmd
-Set Circle Track creation mode
-:cmdCircleTangent
-Create track circle from tangent
-:cmdClearElevations
-Removes elevation from Selected tracks
-:cmdCmdopt
-Command Options dialog
-:cmdColor
-Controls colors
-:cmdConnect
-Connect two tracks
-:cmdCopy
-Copy selected objects to clipboard
-:cmdControl
-Create a control for layout automation
-:cmdCurveCenter
-Create curved track from center
-:cmdCurveChord
-Create curved track from chord
-:cmdCurveEndPt
-Create curved track from end-point
-:cmdCurveSetCmd
-Set Curve Track creation mode
-:cmdCurveTangent
-Create curved track from tangent
-:cmdCustmgm
-Create Bezier Track
-:cmdBezCurve
-Manipulate Custom designer entries
-:cmdCut
-Moves selected objects to clipboard
-:cmdDelete
-Delete objects
-:cmdDemo
-Playback demos
-:cmdDescribe
-Properties
-:cmdDeselectAll
-Deselect all selected objects
-:cmdDisplay
-Change Display parameters
-:cmdDrawBench
-Create benchwork
-:cmdDrawBox
-Create a box
-:cmdDrawCircleSetCmd
-Set Circle drawing command
-:cmdDrawCircle
-Create a circle
-:cmdDrawCircleCenter
-Draw a circle line from center
-:cmdDrawCircleFixedRadius
-Draw a fixed radius circle line
-:cmdDrawCircleTangent
-Draw a circle line from tangent
-:cmdDrawCurveSetCmd
-Set Curve drawing command
-:cmdDrawCurve
-Create a curved line
-:cmdDrawCurveEndPt
-Create a curved line from End
-:cmdDrawCurveCenter
-Create a curved line from center
-:cmdDrawCurveChord
-Create a curved line from chord
-:cmdDrawCurveTangent
-Create a curved line from tangent
-:cmdDrawDimLine
-Create a dimension line
-:cmdDrawFilledBox
-Create a filled box
-:cmdDrawFilledCurve
-Create a filled circle
-:cmdDrawFilledCircleCenter
-Draw a filled circle from center
-:cmdDrawFilledCircleFixedRadius
-Draw a fixed radius filled circle
-:cmdDrawFilledCircleTangent
-Draw a filled circle from tangent
-:cmdDrawPolygon
-Create a filled polygon
-:cmdDrawPolyline
-Create a polyline
-:cmdDrawLine
-Create a straight line
-:cmdDrawLineSetCmd
-Set Line drawing command
-:cmdDrawShapeSetCmd
-Set Shape drawing command
-:cmdDrawTableEdge
-Draw table edge
-:cmdEasement
-Easement menu
-:cmdElevation
-Change Elevations
-:cmdEnumerate
-Generate a Parts List of selected objects
-:cmdExport
-Export a .xti file
-:cmdExportDXF
-Export a DXF file
-:cmdFileNote
-General note about the layout
-:cmdFlip
-Flip selected objects
-:cmdGrid
-Adjust snap grid
-:cmdGridEnable
-Enable snap grid
-:cmdGridShow
-Show snap grid
-:cmdMapShow
-Show/Hide Map Window
-:cmdGroup
-Create a structure from a Group of objects
-:cmdHandLaidTurnout
-Create a hand-laid turnout
-:cmdHelix
-Create a track helix
-:cmdImport
-Import a .xti file
-:cmdJoin
-Join two tracks
-:cmdLayer
-Change Layers
-:cmdLayerSet
-Selects the current drawing layer
-:cmdLayout
-Layout parameters
-:cmdModify
-Modify or extend a track
-:cmdMove
-Move selected objects
-:cmdMoveLabel
-Move a label
-:cmdMoveToCurrentLayer
-Move selected objects to current layer
-:cmdNote
-Place a note on the layout
-:cmdOutputbitmap
-Print a BitMap
-:cmdParallel
-Create a parallel track
-:cmdParameter
-Register
-:cmdPaste
-Copy objects from clipboard
-:cmdPref
-Perferences dialog
-:cmdPricelist
-Display prices of turnouts, sectional tracks and structures
-:cmdPrint
-Print the layout
-:cmdPrmfile
-Loads and unloads parameter files
-:cmdProfile
-Elevation Profile Command
-:cmdProfileDraw
-Profile
-:cmdRecord
-Command recorder
-:cmdRedo
-Redo last undo
-:cmdRefreshCompound
-Update selected Turnout and Structure definitions
-:cmdRescale
-Rescale selected objects
-:cmdRotate
-Rotate selected object(s)
-:cmdRuler
-Show a ruler
-:cmdSelect
-Select objects
-:cmdSelectAll
-Selects all objects on the layout
-:cmdSelectCurrentLayer
-Selects all objects in the current Layer
-:cmdSelectInvert
-Invert current selection
-:cmdSensor
-Create a sensor (ie. a occupancy detector or a toggle switch)
-:cmdSplitTrack
-Split a track
-:cmdSelectOrphaned
-Select stranded (unconnected) track pieces
-:cmdSignal
-Create a signal for train control
-:cmdSticky
-Choose which commands are sticky
-:cmdStraight
-Create straight track
-:cmdStructure
-Place a structure on the layout
-:cmdSwitchMotorCreate
-Create a switchmotor for turnout control
-:cmdText
-Enter text on the layout
-:cmdTextSize
-Controls the size of the entered text
-:cmdTip
-Tip of the Day window
-:cmdTrain
-Run Trains
-:cmdTrainPause
-Pause/Resume Trains
-:cmdTrainNewCar
-Place a car on the layout
-:cmdTrainExit
-Exit Trains
-:cmdTunnel
-Hide/Unhide a track
-:cmdTurnout
-Place a turnout or sectional track
-:cmdTurnoutNew
-Create a new turnout definition
-:cmdTurntable
-Place a turntable
-:cmdUpdatetitle
-Updates old source files with 3 part titles
-:cmdUndo
-Undo last command
-:cmdUngroup
-Ungroup objects
-:cmdWidth0
-Draw tracks with thin lines
-:cmdWidth2
-Draw tracks with medium lines
-:cmdWidth3
-Draw tracks with thick lines
-:cmdZoom
-Change drawing scale
-:cmdZoomIn
-Zoom in
-:cmdZoomOut
-Zoom out
-:menuFile
-File Menu
-:menuFile-save
-Save layout
-:menuFile-saveAs
-Save layout under a new name
-:menuFile-clear
-New layout
-:menuFile-enum
-Generate parts list
-:menuFile-load
-Load a layout
-:menuFile-quit
-Exit the program
-:menuFile-revert
-Revert to last saved state of layout plan
-:editM
-Edit menu
-:menuEdit-redraw
-Redraw layout
-:menuEdit-zoomIn
-Zoom in
-:menuEdit-zoomOut
-Zoom out
-:toolsM
-Tools menu
-:menuView
-View menu
-:menuToolbar
-Toolbar configuration
-:menuTools
-Tools menu
-:menuOption
-Options menu
-:menuMacro
-Playback/Record commands
-:menuWindow
-Window menu
-:menuHelp
-Help menu
-:menuHelpRecentMessages
-Recent error messages and explanations
-:hotBarLeft
-Move Hot Bar left
-:hotBarRight
-Move Hot Bar right
-:infoBarCount
-Total track count
-:infoBarPosX
-X Position of cursor
-:infoBarPosY
-Y Position of cursor
-:infoBarScale
-Drawing scale
-:infoBarStatus
-Message and status line
-:main-draw
-Main layout canvas
-:mainDraw
-Main layout canvas
-:main-canvas
-Main drawing canvas
-:main-commandbar
-Command buttons
-:main-menubar
-Menus
-:main-titlebar
-Tile, Filename and Window Manager buttons
-:main-hotbar
-Turnout and Structure Hot Bar
-:main-layers
-Active layer list and layer buttons
-:map-draw
-Map window
-:map-hilight
-This is the portion of the layout shown in the Main Window canvas
-:addElev-value
-Raise or Lower all Selected Track
-:carpart-ok
-Add or Update car object
-:carpart-manuf
-Manufacturer name
-:carpart-prototype
-Car Prototype
-:carpart-prototype-list
-Car Prototype
-:carpart-isLoco
-Is the Car a Locomotive?
-:carpart-partno-list
-Part Number and Description
-:carpart-partno
-Manufacturer Part Number
-:carpart-import
-Use the Selected figure as the car image
-:carpart-reset
-Use the default figure as the car image
-:carpart-desc
-Optional description of the Car Part
-:carpart-flip
-Flip car image
-:carpart-dispmode
-Display Car Item information or reporting marks and dimensions
-:carpart-road
-Full Roadname
-:carpart-type
-Car Type
-:carpart-protokind-list
-Car Type
-:carpart-repmark
-Reporting Marks (Roadname abbreviation)
-:carpart-number
-Car Number
-:carpart-bodyColor
-Car body Color
-:carpart-carLength
-Length of car body
-:carpart-carWidth
-Width of car body
-:carpart-trkCenter
-Distance between Trucks
-:carpart-cplrMount
-Coupler are mounted on body or truck
-:carpart-cpldLen
-Overall Coupled Length
-:carpart-cplrLen
-Coupler Length from end of car
-:carpart-canvas
-Diagram of Car
-:carpart-index
-Item Index Number
-:carpart-purchPrice
-Original Purchase Price
-:carpart-currPrice
-Current Price
-:carpart-condition
-Condition of car
-:carpart-purchDate
-Original Purchase Date
-:carpart-serviceDate
-Last Service Date
-:carpart-quantity
-Number of identical cars to be entered
-:carpart-multinum
-Do all the cars have the same Number?
-:carpart-notes
-Notes about the car
-:carpart-new
-Create a new car Part or Prototype definitions
-:carpart-new-menu
-Create a new car Part or Prototype definitions
-:carinv-ok
-Finds the selected Car Item on the layout
-:carinv-sort1
-Sort the Item list
-:carinv-sort2
-Sort the Item list
-:carinv-sort3
-Sort the Item list
-:carinv-sort4
-Sort the Item list
-:carinv-edit
-Edit the selected Car Item
-:carinv-add
-Add a new Car Item
-:carinv-delete
-Delete the selected Car Items
-:carinv-import
-Import a Car Item .csv file
-:carinv-export
-Export a Car Item .csv file
-:carinv-savetext
-Create a text list of the Car Items
-:circle-radius
-Specifies the radius of the circle track
-:cmdopt-move-quick
-How to draw track being moved/rotated
-:cmdopt-turntable-angle
-Specifies the minimum angle between tracks connected to a turntable
-:cmdopt-preselect
-Default command is Describe or Select
-:cmdopt-coupling-speed-max
-Trains will crash above this speed
-:cmdopt-rightclickmode
-Action to invoke on Right-Click
-:contents-label
-Contents Label for new Parameter file
-:custmgm-inx
-List of custom designed turnouts and structures
-:custmgm-edit
-Invoke designer editor
-:custmgm-delete
-Remove selected entries
-:custmgm-export
-Copy selected entries to Parameter File
-:custmgm-new
-Create a New part or prototype
-:custmgm-ok
-Update custom file and close
-:demo-step
-Executes the next step of the demo
-:demo-next
-Skip to next demo
-:demo-quit
-Stops the demonstration and returns you to XTrkCad
-:demo-speed
-Select speed of Playback
-:demo-text
-This is where comments about the demo are displayed
-:display-tunnels
-Controls the drawing of hidden tracks
-:display-endpt
-Controls the drawing of End-Points
-:display-labelenable
-Enable labels for Turnouts, Flextrack Lengths and Elevations
-:display-description-fontsize
-Font size for labels on layout
-:display-labelscale
-When to label Turnout, Flextrack Lengths and Elevations
-:display-layoutlabels
-Label elements on layout
-:display-color-layers
-Color tracks or other objects by layer
-:display-tworailscale
-Drawing scale when to draw tracks with 2 rails
-:display-zoom-corner
-Zoom to keep lower corner in view or not
-:display-tiedraw
-How to draw track ties
-:display-mingridspacing
-Minimum distance (in pixels) between grid lines/ticks
-:display-balloonhelp
-Enable/Disable balloon popup help windows
-:display-hotbarlabels
-Label elements on the Hot Bar
-:display-mapscale
-Drawing scale of the map window
-:display-livemap
-Whether the main layout is updated while dragging on the Map
-:display-carhotbarlabels
-How to group cars on the Train Hot Bar
-:display-hideTrainsInTunnels
-Don't show trains in tunnels when tunnels are hidden
-:draw-linewidth
-Width of the lines
-:draw-linecolor
-Color of the lines
-:draw-benchlist
-List of types of Lumber
-:draw-benchcolor
-Color of Benchwork
-:draw-benchorient
-Orientation of Benchwork
-:draw-arrowsize
-Size of Dimension Arrows
-:easement-val
-This controls the sharpness of the easement curve
-:easement-r
-Minumum radius
-:easement-x
-Maximum offset
-:easement-l
-Easement length
-:easement-radio
-These radio buttons are a short-cut for Values of 0.0, 0.5, 1.0 and 2.0. None turns Easements off
-:easement-ok
-Complete easement selection
-:elev-mode
-Type of elevation
-:elev-value
-Height of End Point
-:elev-computed
-Compute elevation based on neighbors
-:elev-grade
-Compute grade based on neighbors
-:elev-station
-Specify a name for an End-Point
-:enum-print
-Print parts list
-:enum-printsetup
-Invoke the Print Setup dialog
-:enum-save
-Save parts list to file
-:enum-text
-This is the list of parts for the layout
-:enum-list-prices
-Enable prices on the Parts List
-:grid-horzspacing
-Spacing between major grid lines
-:grid-horzdivision
-Allows the spacing to be subdivided
-:grid-horzenable
-Specifies if positions are snaped in this direction
-:grid-vertspacing
-Spacing between major grid lines
-:grid-vertdivision
-Allows the spacing to be subdivided
-:grid-vertenable
-Specifies if positions are snaped in this direction
-:grid-origx
-Shows the origin and angle of the grid
-:grid-origy
-Shows the origin and angle of the grid
-:grid-origa
-Shows the origin and angle of the grid
-:grid-show
-Specifies if the grid is shown
-:grid-ok
-Completes the grid specification
-:group-manuf
-Manufacturer
-:group-desc
-Description
-:group-partno
-Part Number
-:group-segcnt
-Number of segments in Group
-:group-replace
-Replace the Selected object with the new definition?
-:group-ok
-Creates a new Structure (or Turnout)
-:helix-elev
-Elevation difference of Helix End-Points
-:helix-radius
-Helix Radius
-:helix-turns
-Number of turns in the helix
-:helix-angSep
-Angle betweek helix entrance and exit
-:helix-grade
-Grade in helix
-:helix-vertSep
-Separation between helix layers
-:layer-layer
-Layer list
-:layer-name
-Layer Name
-:layer-color
-Color of layer
-:layer-visible
-Layer is drawn on Main window
-:layer-frozen
-Layer cannot be changed
-:layer-onmap
-Layer is drawn on Map window
-:layer-button-count
-Number of layer buttons to show
-:layer-object-count
-Number of objects in this layer
-:layer-reset
-Load layer configuration from default
-:layer-save
-Save current layer configuration as default
-:layer-clear
-Overwrite layer configuration with system default values
-:layout-roomsizeX
-Specifies the size of the room (in inches or centimeters)
-:layout-roomsizeY
-Specifies the size of the room (in inches or centimeters)
-:layout-title1
-Specifies the Title of the layout. This appears on Gaudy printouts
-:layout-title2
-Specifies the Title of the layout. This appears on Gaudy printouts
-:layout-scale
-Specifies the Modelling Scale
-:layout-gauge
-Specifies the rail gauge, ie. the distance between the rails
-:newcar-road
-Roadname
-:newcar-number
-Car Number
-:note-text
-This is the body of the Note. To change this select Modify from the File Menu
-:outputbitmap-density
-Specifies number of pixels per inch (or centimeter)
-:outputbitmap-toggles
-Specifies whether Layout Titles, Borders or Track Centerlines are printed on the BitMap
-:parallel-separation
-Specifies the separation between parallel tracks
-:parameter-name
-Enter your name as specified in the XTrkCad Registration Notice
-:parameter-key
-Enter the key value as specified in the XTrkCad Registration Notice
-:parameter-ok
-Validates the name and key. Terminates the registration command
-:pref-checkpoint
-Specifies the check point frequency
-:pref-units
-Choose english (inches) or metric (centimeters)
-:pref-dstfmt
-How to display length measurements
-:pref-anglesystem
-0� is up or to the right
-:pref-minlength
-Do not create tracks to be shorter than this value
-:pref-connectdistance
-Maximum distance between connected end points
-:pref-connectangle
-Minimum angle between connected End-Points
-:pref-dragpixels
-How far you can move the mouse before its considered a drag
-:pref-dragtimeout
-How long you can hold a mouse button down before its considered a drag
-:pref-autoPan
-Move the Main canvas if you drag near the edge
-:pref-listlabels
-Label elements for lists
-:pref-mintrackradius
-Tracks with tighter radius than this are Exceptional
-:pref-maxtrackgrade
-Tracks with grades steeper than this are Exceptional
-:pref-trainpause
-Delay (in mS) between updating train movements
-:pricelist-cost
-Updated cost of current selected item
-:pricelist-entry
-Item
-:pricelist-inx
-Selection list for prices
-:pricelist-flexlen
-Price of specified length of flex-track
-:pricelist-flexunit
-Price of specified length of flex-track
-:pricelist-flexcost
-Price of specified length of flex-track
-:print-scale
-Controls the reduction (scale) of the printout
-:print-pagew
-Scaled page width (Scale times physical page width)
-:print-max
-Sets page size to the maximum (based on scale and physical page size)
-:print-pageh
-Scaled page height (Scale times physical page height)
-:print-snapshot
-Sets scale, origin and angle for a one page printout of the layout
-:print-format
-Print page in Portrait or Landscape format
-:print-order
-Order of printing pages
-:print-style
-Print Title, Date, Author and other information at bottom of page?
-:print-physsize
-Ignore unprintable page margins?
-:print-registrationMarks
-Print Registration Marks at 1:1?
-:print-grid
-Print Snap Grid?
-:print-ruler
-Print Rulers on all page edges?
-:print-roadbed
-Print Roadbed Outline?
-:print-roadbedWidth
-Print Roadbed Outline
-:print-origx
-Origin of the print grid. This is useful if you want to reprint a set of pages
-:print-origy
-Origin of the print grid. This is useful if you want to reprint a set of pages
-:print-reset
-Resets the origin and angle to 0
-:print-origa
-Origin of the print grid. This is useful if you want to reprint a set of pages
-:print-clear
-Deselects all pages
-:print-setup
-Invoke the Print Setup dialog
-:print-ok
-Print selected pages and terminates the print command
-:prmfile-inx
-List of loaded and unloaded parameter files
-:prmfile-mode
-Show parameter files by names or descriptions
-:prmfile-action
-Toggle the loaded status of the selected parameter file
-:prmfile-browse
-Find a parameter file for loading
-:prmfile-ok
-Update parameter file list
-:profile-canvas
-Profile of specified path
-:profile-clear
-Clear the profile
-:profile-print
-Print the profile
-:record-stop
-Stop recording
-:record-message
-Insert a message
-:record-end
-End a message
-:record-text
-Message body
-:refreshSpecial-list
-Possible turnouts
-:refreshSpecial-skip
-Skip this turnout
-:rename-manuf
-Manufacturer of Object
-:rename-desc
-Description of Object
-:rename-partno
-Part Nuber of Object
-:rescale-toggle
-Rescale by Scale Conversion or by Ratio
-:rescale-fromS
-Original Scale of the selected objects
-:rescale-fromG
-Original Gauge of the selected obkects
-:rescale-toS
-New Scale of the selected objects
-:rescale-toG
-New Gauge of the selected objects
-:rescale-change-dim
-Change track dimensions to new scale
-:rescale-ratio
-Change size by this amount
-:rgbcolor-snapgrid
-Snap Grid Line and Division
-:rgbcolor-marker
-X and Y position markers
-:rgbcolor-border
-Border rulers, room boundaries and table edges
-:rgbcolor-crossmajor
-Primary Axis of grid rotation
-:rgbcolor-crossminor
-Secondary Axis of grid rotation
-:rgbcolor-normal
-Unselected tracks
-:rgbcolor-selected
-Selected tracks
-:rgbcolor-profile
-Color of tracks on the Profile path
-:rgbcolor-exception
-Color of Exceptional tracks
-:rgbcolor-tie
-Color of track ties
-:rgbcolor-ok
-Updates the colors
-:rotate-rotate
-Angle in degrees
-:rotate-ok
-Rotate object(s) by specified amount
-:sticky-set
-Choose commands to be sticky
-:sticky-ok
-Make the commands sticky
-:structure-list
-List of available structure
-:structure-canvas
-Diagram of the selected structure
-:structure-hide
-Hide Selection window when placing Structure
-:structure-stats
-Drawing scale and size
-:structure-ok
-Complete structure placement
-:structure-pier-inx
-Choose a Pier number
-:text-fontsize
-Controls the size of the entered text
-:tip-text
-Useful information about the program
-:tip-showatstart
-Show Tip of the Day every time the program starts
-:tip-next
-Show the next Tip of the Day
-:tip-prev
-Show the previous Tip of the Day
-:toolbarM
-Controls which Command Buttons are displayed
-:train-newcar-index
-List of Cars
-:train-list
-List of active trains
-:train-speed
-Speed
-:train-distance
-Train odometer
-:train-zeroDistance
-Reset odometer to 0
-:train-goto
-Find train on layout
-:train-follow
-Follow train around layout
-:train-autoreverse
-Flip direction at End Of Track
-:train-direction
-Change direction of train
-:train-stop
-Stop the train
-:turnout-list
-List of available turnouts for the current scale
-:turnout-canvas
-Diagram of the currently selected turnout. Click on a End-Point to select the Active End-Point
-:turnout-new
-A menu list of various type of turnouts and sectional tracks you can define
-:turnout-hide
-Hide Selection window when placing Turnout
-:turnout-activeEndPoint
-The selected Active End-Point
-:turnout-current
-Current selected turnout, (displayed in the diagram window)
-:turnout-endPoint
-One the End-Points that can be selected
-:turnoutNew-angle1
-Angle of the specified track to the center line of the turnout
-:turnoutNew-angle2
-Angle of the specified track to the center line of the turnout
-:turnoutNew-angleMode
-Specifies if angles are entered as Frog Numbers or in degrees
-:turnoutNew-desc1
-Desciption
-:turnoutNew-desc2
-Desciption
-:turnoutNew-label
-Turnout description (Manuf., Size, Part Number, etc)
-:turnoutNew-len0
-Length from the base to the end of the specified track
-:turnoutNew-len1
-Length from the base to the end of the specified track
-:turnoutNew-len2
-Length from the base to the end of the specified track
-:turnoutNew-manuf
-Manufacturer
-:turnoutNew-off1
-Offset of the track End-Point from the center line of the turnout
-:turnoutNew-off2
-Offset of the track End-Point from the center line of the turnout
-:turnoutNew-partno1
-Part Number
-:turnoutNew-partno2
-Part Number
-:turnoutNew-print
-Prints a full size diagram of the turnout for checking
-:turnoutNew-ok
-Prints a full size diagram of the turnout for checking
-:turnoutNew-color
-Color of Roadbed lines
-:turnoutNew-roadbedLineWidth
-Width of Roadbed lines
-:turnoutNew-roadbedWidth
-Width of Roadbed
-:turnoutNew-printsetup
-Invoke the Print Setup dialog
-:turnoutNew-done
-Closes the window and returns to the Turnout Selection window
-:turntable-diameter
-Specifies the diameter of the turntable
-:updatetitle-old
-Old Turnout title
-:updatetitle-sel
-List of available titles
-:updatetitle-ignore
-Leave the Turnouts' title unchanged
-:updatetitle-load
-Invoke the Parameter Files dialog
-:updatetitle-list
-List of available turnouts
-:updatetitle-ok
-Update the Turnouts' title
-:fontSelCancel
-Cancel
-:fontSelList
-List
-:fontSelOk
-Ok
-:fontSelSample
-Sample
-:fontSelSize
-Size
-:fontSelSlant
-Slant
-:fontSelW
-Font selection dialog
-:fontSelWeight
-Weight
-:printAbortW
-Printer Abort Window
-:printFileName
-Print to filename
-:printFontAlias
-Specify Postscript font alias mapping
-:printSetup
-Displays the Print Setup window to change printers, orientation, paper size, etc.
-:printSetupCancel
-Closes this dialog
-:printSetupFormat
-Page orientation
-:printSetupMargin
-Unprintable margins
-:printSetupOk
-Updates and closes this dialog
-:printSetupPaper
-Choose paper size
-:printSetupPrinter
-Choose printer
-:printSetupTest
-Print test page
-:about
-No Help
-:about-about
-No Help
-:cmdDebug
-No Help
-:loosen
-No Help
-:misc-toolbarset
-No Help
-:misc-showlayout
-No Help
-:misc-showdisplay
-No Help
-:misc-showcmdopt
-No Help
-:misc-showeasement
-No Help
-:misc-showfontSel
-No Help
-:misc-showgrid
-No Help
-:misc-showdebug
-No Help
-:misc-sticky
-No Help
-:misc-showpref
-No Help
-:misc-showcolor
-No Help
-:misc-showfileClear
-No Help
-:misc-showparamFile
-No Help
-:misc-showpriceList
-No Help
-:misc-showprint
-No Help
-:misc-showprintSetup
-No Help
-:misc-showprintBitmap
-No Help
-:misc-showpartsList
-No Help
-:misc-shownotes
-No Help
-:misc-showundo
-No Help
-:misc-showredo
-No Help
-:misc-showcut
-No Help
-:misc-showcopy
-No Help
-:misc-showpaste
-No Help
-:misc-showdelete
-No Help
-:misc-showtunnel
-No Help
-:misc-showabove
-No Help
-:misc-showbelow
-No Help
-:misc-showwidth0
-No Help
-:misc-showwidth2
-No Help
-:misc-showwidth3
-No Help
-:misc-showrecompelev
-No Help
-:misc-showcardesc
-No Help
-:misc-showcaradd
-No Help
-:misc-showselectAll
-No Help
-:misc-showimport
-No Help
-:misc-showexport
-No Help
-:misc-showexportDXF
-No Help
-:misc-showloosen
-No Help
-:misc-group-objects
-No Help
-:misc-ungroup-objects
-No Help
-:misc-showcustomMgm
-No Help
-:misc-showlayers
-No Help
-:misc-showmoveToCurrentLayer
-No Help
-:misc-showselectCurrentLayer
-No Help
-:misc-showclearElevations
-No Help
-:misc-showaddElevations
-No Help
-:debug-Track
-No Help
-:debug-EndPt
-No Help
-:debug-ReadTracks
-No Help
-:debug-Curve
-No Help
-:debug-Join
-No Help
-:debug-Turnout
-No Help
-:debug-Structure
-No Help
-:debug-Print
-No Help
-:map-canvas
-No Help
-:cmdLayerShow0
-Layer
-:cmdLayerShow1
-Layer
-:cmdLayerShow2
-Layer
-:cmdLayerShow3
-Layer
-:cmdLayerShow4
-Layer
-:cmdLayerShow5
-Layer
-:cmdLayerShow6
-Layer
-:cmdLayerShow7
-Layer
-:cmdLayerShow8
-Layer
-:cmdLayerShow9
-Layer
-:cmdLayerShow10
-Layer
-:cmdLayerShow11
-Layer
-:cmdLayerShow12
-Layer
-:cmdLayerShow13
-Layer
-:cmdLayerShow14
-Layer
-:cmdLayerShow15
-Layer
-:cmdLayerShow16
-Layer
-:cmdLayerShow17
-Layer
-:cmdLayerShow18
-Layer
-:cmdLayerShow19
-Layer
-:
-
diff --git a/app/help/xtrkcad.tip b/app/help/xtrkcad.tip
index 8deffc6..bcc15c3 100644
--- a/app/help/xtrkcad.tip
+++ b/app/help/xtrkcad.tip
@@ -1,17 +1,17 @@
XTrackCAD provides demonstrations on most of the program's features. The demos can be run by clicking on the Help menu on the Main window and then selecting Demos.
The notation "Menu|Item" is used in the documentation (and the on-line demos and tips) to indicate the selection of a menu item.\
-For example File|Open means to open the menu by clicking on File on the menu bar of the Main window and then selecting the Open item from that menu.
+For example, "File|Open" means to open the menu by clicking on File on the menu bar of the Main window and then selecting the Open item from that menu.
-A number of example layouts are provided. These files are located in the 'examples' directory where you installed XTrackCAD. The "File|Open" command will open that directory when first used.
+Set your modeling scale on the "Options|Layout" dialog. This controls the Turnouts and Structures that are available, Easement values and track gauge.
-When installed, the program measures all units in inches. You can change this on the "Options|Preferences" dialog by changing the Units item to Metric instead of English.
+A number of example layouts are provided. These files can be accessed by "Help|Examples".
-You can change the overall size of your layout on the "Options|Layout" dialog.
+When installed, the length units are set based on your contry: inches for United States or Canada and centimeters elsewhere. You can change this on the "Options|Preferences" dialog by choosing between Metric and English.
-When installed, the default command is the Describe command. More experienced users will probably want to change this to the Select command. You can do this on the "Options|Command Options" dialog.
+You can change the overall size of your layout on the "Options|Layout" dialog.
-Set your modeling scale on the "Options|Layout" dialog. This controls the Turnouts and Structures that are available, Easement values and track gauge.
+When installed, the default command is the Select command. You might want to change this to the Decribe command. You can do this on the "Options|Command Options" dialog.
When Selecting tracks, the connection between Selected and Unselected tracks is marked by a Red X. This indicates points where the connection between tracks will be broken if you Move or Rotate the Selected tracks.
@@ -22,14 +22,14 @@ You can add track to any unconnected End-Point with the Modify command.\
Hold down the Shift key and click on the End-Point and drag away to create a new track segment attached to the End-Point.\
Repeat with the new End-Point to create flowing tracks.
-You can create Curved tracks in four ways by dragging from:\
- the 1st End-Point in the direction of the curve\
- Center of the Curve to the 1st End-Point\
- End-Point to the Center\
- the 1st to 2nd End-Point\
+You can create curved tracks in four ways by dragging from:\
+ the 1st endpoint in the direction of the curve\
+ center of the curve to the 1st endpoint\
+ endpoint to the center\
+ the 1st to 2nd endpoint\
Then drag on one of the Red arrows to create the final shape of the curve.\
\
-You can click on the small button to the left of the Curve command button to change the method.
+You can click on the small button to the right of the Curve command button to change the method.
When creating a straight or a curved track by dragging from the 1st End Point, you can snap the new track to an existing open end point by holding down Shift while you click.\
The new track will be joined to the old when you create it.
@@ -49,7 +49,7 @@ The Easement dialog is used to control easements.
"Help|Recent Messages" shows the last error and warning messages that were generated by the program. Also an explanation of each message is displayed.
When creating stall tracks for a turntable, you usually want the the stall tracks to be spaced evenly.\
-The "Turntable Angle" item on "Options|Command Options" dialog can be used specify the minimum angle between stall tracks.
+The "Turntable Angle" item on "Options|Preferences" dialog can be used specify the minimum angle between stall tracks.
XTrackCAD periodically saves the current layout in a check point file. The 'Check Point' item on the 'Options|Preferences' dialog controls how often the file is saved.\
You can recover your working file after a system crash by copying the checkpoint file (xtrkcad.ckp in the XTrackCAD Working directory) to file.xtc
@@ -73,12 +73,13 @@ Select the track at the beginning and end of the section. The total length of t
Note: the Profile selects the shortest path between the two selected tracks, which might not be the path you are interested in. In this case, select the first track and then select other tracks along the path.
Layers can be used to contain different groups of tracks or other features. You might use one layer for the main-line, another of staging tracks and another of benchwork.\
-You can give each layer a name (by using the Layer dialog). This name will be displayed as the Balloon Help for the corresponding Layer button, if you have Balloon Help enabled on the Display dialog.
-You can remove groups of buttons or the Hot Bar from the Main window to give you more room if you are not using some features. Also, the number of Layer buttons displayed is controlled by the Layers dialog.
+You can give each layer a name (by using the "Manage|Layer" dialog). This name will be displayed as the Balloon Help for the corresponding Layer button, if you have Balloon Help enabled on the "Options|Display" dialog.
-The size of the Map window is controlled by the overall size of the room (specified on the Layout dialog) and the Map Scale (on the Display dialog). You can make the Map window larger (or smaller) by decreasing (or increasing) the Map Scale.\
-XTrackCAD will prevent you from making the Map window too small or too large.
+You can remove groups of buttons or the Hot Bar from the Main window to give you more room if you are not using some features. Also, the number of Layer buttons displayed is controlled by the "Manage|Layers" dialog.
+
+The size of the map window is controlled by the overall size of the room (specified on the layout dialog) and the map scale (on the display dialog). You can make the Map window larger (or smaller) by decreasing (or increasing) the map scale.\
+XTrackCad will prevent you from making the map window too small or too large.
You can unload parameter files you are not using by the Parameter Files dialog. This removes unused Turnout and Structure definitions from the Hot Bar and makes the program start faster.
@@ -107,7 +108,7 @@ The colors of different parts of the Main window can be changed with the Colors
By default objects are drawn in their normal colors. Tracks will be drawn in Black. Objects can also be drawn in the color according to their Layer. The color of a Layer is displayed on the corresponding Layer button.\
The Display dialog 'Color Layers' item has separate toggles for Tracks and non-Tracks.
-Each Layer can be drawn or hidden by the 'Visible' toggle on the Layers dialog.
+Each Layer can be drawn or hidden by the 'Visible' toggle on the Layers dialog.
Short cut Layer buttons can also be displayed on the tool bar for up to the first 20 layers.\
This buttons allow to Show or Hide the layers.
@@ -120,7 +121,7 @@ Many of the commands and dialogs can be invoked by special key combinations call
The Connect command is used to join Sectional track pieces that don't quite fit together.\
This command works by adding small gaps between other tracks to move the selected End-Points closer together.
-To copy a group of objects: Select the objects, press Control-C (or select Copy from the Edit menu), press Control-V (or select Paste from the Edit menu).\
+To copy a group of objects: Select the objects, press Control-c (or select Copy from the Edit menu), press Control-v (or select Paste from the Edit menu).\
The selected tracks will be copied to the layout and you can Move or Rotate them into position.
In the Rotate (or Select) commands you can press Shift-Right-Click to display the Rotate menu which allows you to rotate the selected objects by a specific angle.
@@ -134,7 +135,7 @@ Areas of water can represented by a Polygon (use the Draw command) of the approp
By using the Modify command, you can move, add or remove corners of the Polygon to fit the shape of the water.\
You use the Below command to place the Polygon below (or behind) other objects.\
\
-You can also use a Polygon to represent aisles.
+You can also use a Polygon to represent aisles.
When you create Benchwork you can move it below other objects by Selecting the Benchwork and use the Below command.\
Also, put Benchwork in a separate Layer so you can hide it if desired.
@@ -143,7 +144,7 @@ You can enter Distances and Lengths using any format regardless of the Length Fo
You can enter Metric values when English is the default Units and vice versa.
When entering Distances and Lengths you can press the '=' key to redisplay the value in the default format.
-You can also press the 's' key to convert a Prototype measurement to a Scale measurement y dividing by the ratio for the current scale.
+You can also press the 's' key to convert a Prototype measurement to a Scale measurement by dividing by the ratio for the current scale.
The 'p' key will convert a Scale measurement to a Prototype measurement.
You can place cars on the layout using the Train Simulation command to check clearance points, track to track separation and coupling.
@@ -197,7 +198,7 @@ You can export the selected tracks to a DXF file which can be read by most CAD p
Lengths and distances can be displayed in a variety of units and formats such as 1' 10 3/4", 1ft 10.75in or 22.750. In Metric mode, distances can be displayed as millimeters, centimeters or meters. See the Length Format item on the Preferences dialog.
-Tracks that are too steep or curve too tightly are drawn in the Expection color (Purple by default). \
+Tracks that are too steep or curve too tightly are drawn in the Exception color (Yellow by default). \
This helps to identify potential problem areas. \
The maximum grade and minimum radius are set on the Preferences dialog.
@@ -219,20 +220,28 @@ As well, the color and thickness of the lines used to represent the roadbed can
The Color dialog (on the Options menu) is used to change the color of different objects on the display. \
You can change the color of the Snap Grid and Borders, as well as Normal, Selected and Exception tracks.
-#Elevations
+You can set the elevation (height) of track end-points. \
+Elevations of intermediate end points can be computed automatically based on the distance to the nearest end points with defined elevations. \
+Grades can also be displayed at selected end points. \
+Please see the Elevations help and demo.
-#Profile
+Once you have elevations on some endpoints, you can use the Profile command to produce an elevation graph. \
+The graph shows the selected elevations, grades and distances. \
+Please see the Profile help and demo for details.
You can draw tracks with wider lines for rails. \
Select the tracks and use Medium or Thick Tracks on the Edit menu.
-#Custom TO
-
-#Helix
+The Helix command is used to create a Helix track. \
+You specify some parameters: height, radius, number of turns, grade and vertical separation between layers. \
+These values are interrelated so changing one value will affect ohers. \
+Then you can place the Helix and join to other tracks as you would a Circle track.
Many objects on the layout have labels: Turnouts/Helix/Curved Titles, Track Lenghts, End-Point Elevations, Track Elevations and Cars. \
You can turn these labels on or off with the Label Enable toggle buttons on the Display options dialog.
-If you hold down the Control key when using the Rotate command, the rotation will be down in increments of 15.
+If you hold down the Control key when using the Rotate command, the rotation will be done in increments of 15�.
When using the Rotate command, Shift-Right-Click displays a menu allowing you to rotate by specific amounts or to align the selected objects with another object.
+
+This is last tip. If you have any additions or comments, please let us know.
diff --git a/app/i18n/CMakeLists.txt b/app/i18n/CMakeLists.txt
index c3d3563..e07ed7a 100644
--- a/app/i18n/CMakeLists.txt
+++ b/app/i18n/CMakeLists.txt
@@ -4,6 +4,7 @@ PROJECT(i18n)
SET(XTRKCAD_LOCALE_IDS
de_DE
fi
+ fr_FR
pt_BR
)
@@ -30,6 +31,10 @@ FILE(GLOB_RECURSE XGT_SOURCE_FILES
${XTrkCAD_SOURCE_DIR}/*.c
${XTrkCAD_SOURCE_DIR}/*.h)
+# add wlib files that have translatable strings
+FILE(RELATIVE_PATH TEMP_FILENAME ${i18n_SOURCE_DIR} "${wlib_SOURCE_DIR}/mswlib/mswmisc.c")
+LIST(APPEND XGT_SOURCE_FILES ${TEMP_FILENAME})
+
# Dynamically generated files, such as messages.h and bllnhlp.c, must be added
# to the list manually to make sure that everything works properly.
# "FILE(RELATIVE_PATH ..." is used to get rid of the absolute paths like
@@ -45,7 +50,7 @@ LIST(APPEND XGT_SOURCE_FILES ${TEMP_FILENAME})
# Extract strings and create xtrkcad.pot
ADD_CUSTOM_COMMAND(
OUTPUT ${POTFILE}
- COMMAND ${XTC_XGETTEXT} ${XGTKEYWORDS} -d ${GETTEXT_PACKAGE} -F -o ${POTFILE} --from-code=ISO-8859-15 ${XGT_SOURCE_FILES}
+ COMMAND ${XTC_XGETTEXT} ${XGTKEYWORDS} --add-comments=i18n -d ${GETTEXT_PACKAGE} -F -o ${POTFILE} --from-code=ISO-8859-15 ${XGT_SOURCE_FILES}
DEPENDS xtrkcad ${CMAKE_CURRENT_BINARY_DIR}/custmsg.h
WORKING_DIRECTORY ${i18n_SOURCE_DIR}
)
@@ -115,11 +120,10 @@ FILE(GLOB_RECURSE XTC_CUSTOM_MSG_FILES
# Custom string extractor utility
ADD_EXECUTABLE(stripmsg stripmsg.c)
-GET_TARGET_PROPERTY(stripmsg_EXE stripmsg LOCATION)
# Extract translatable strings from custom message files to one temporary file
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/custmsg.h
- COMMAND ${stripmsg_EXE} ${XTC_CUSTOM_MSG_FILES} > ${CMAKE_CURRENT_BINARY_DIR}/custmsg.h
- DEPENDS stripmsg
+ COMMAND stripmsg ${XTC_CUSTOM_MSG_FILES} > ${CMAKE_CURRENT_BINARY_DIR}/custmsg.h
+ DEPENDS stripmsg ${XTC_CUSTOM_MSG_FILES}
)
diff --git a/app/i18n/de_DE.po b/app/i18n/de_DE.po
index 089ba5a..b04c92d 100644
--- a/app/i18n/de_DE.po
+++ b/app/i18n/de_DE.po
@@ -1,13250 +1,16074 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: xtrkcad 4.1.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-01 18:06+0200\n"
-"PO-Revision-Date: 2018-10-02 19:30+0200\n"
-"Last-Translator: \n"
-"Language-Team: German <m_fischer@users.sourceforge.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: de\n"
-"X-Generator: Poedit 2.1.1\n"
-
-#: ../bin/cbezier.c:590
-msgid "Select End-Point - Ctrl unlocks end-point"
-msgstr "Endpunkt auswählen - Strg entsperrt den Endpunkt"
-
-#: ../bin/cbezier.c:592 ../bin/ccornu.c:531 ../bin/celev.c:418
-msgid "Select End-Point"
-msgstr "Endpunkt auswählen"
-
-#: ../bin/cbezier.c:613
-msgid "Not close enough to any valid, selectable point, reselect"
-msgstr ""
-"Nicht nahe genug an einem gültigen, wählbaren Punkt, bitte einen anderen "
-"auswählen"
-
-#: ../bin/cbezier.c:619 ../bin/ccornu.c:554
-#, c-format
-msgid "Drag point %d to new location and release it"
-msgstr "Den Punkt %d an die neue Stelle verschieben und loslassen"
-
-#: ../bin/cbezier.c:629 ../bin/cbezier.c:722 ../bin/cbezier.c:724
-msgid "Pick any circle to adjust it - Enter to confirm, ESC to abort"
-msgstr ""
-"Einen beliebeigen Kreis zum Ändern auswählen - Mit der Eingabetaste "
-"bestätigen, mit ESC abbrechen"
-
-#: ../bin/cbezier.c:652
-msgid "Bezier Curve Invalid has identical end points Change End Point"
-msgstr ""
-"Die Endpunkte der Bezierkurve sind identisch. Bitte einen Endpunkt ändern"
-
-#: ../bin/cbezier.c:655
-#, c-format
-msgid "Bezier Curve Invalid has %s Change End Point"
-msgstr "Ungültige Bezier-Curve (%s). Bitte den Endpunkt ändern"
-
-#: ../bin/cbezier.c:658
-msgid "Bezier Curve Invalid has three co-incident points"
-msgstr ""
-"Die ungültige Bezier-Kurve hat drei übereinstimmende Punkte - bitte anpassen"
-
-#: ../bin/cbezier.c:660
-msgid "Bezier is Straight Line"
-msgstr "Bezier ist eine gerade Linie"
-
-#: ../bin/cbezier.c:662
-#, c-format
-msgid "Bezier %s : Min Radius=%s Length=%s fx=%0.3f fy=%0.3f cusp=%0.3f"
-msgstr ""
-"Bezier %s: Kleinester Radius=%s, Länge=%s, fx=%0.3f fy=%0.3f cusp=%0.3f"
-
-#: ../bin/cbezier.c:666
-#, c-format
-msgid "Bezier %s : Min Radius=%s Length=%s"
-msgstr "Bezier %s : Mindestradius=%s Länge=%s"
-
-#: ../bin/cbezier.c:695
-msgid "No unconnected End Point to lock to"
-msgstr "Es gibt keinen unverbundenen Endpunkt für das Anschliessen"
-
-#: ../bin/cbezier.c:712
-msgid "Bezier curve invalid has identical end points Change End Point"
-msgstr ""
-"Die Endpunkte der Bezierkurve sind identisch. Bitte einen Endpunkt ändern"
-
-#: ../bin/cbezier.c:715
-#, c-format
-msgid "Bezier curve invalid has %s Change End Point"
-msgstr "Ungültige Bezier-Curve (%s). Bitte den Endpunkt ändern"
-
-#: ../bin/cbezier.c:718
-msgid "Bezier curve invalid has three co-incident points"
-msgstr ""
-"Die ungültige Bezier-Kurve hat drei übereinstimmende Punkte - bitte anpassen"
-
-#: ../bin/cbezier.c:720
-msgid "Bezier curve is straight line"
-msgstr "Bezier Kurve ist eine gerade Linie"
-
-#: ../bin/cbezier.c:735 ../bin/cbezier.c:749
-msgid "Invalid Bezier Track - end points are identical"
-msgstr "Die Bezier-Kurve ist ungültig, da sie identische Endpunkte hat"
-
-#: ../bin/cbezier.c:742
-#, c-format
-msgid "Invalid Bezier Curve has a %s - Adjust"
-msgstr "Die ungültige Bezier-Kurve hat %s - bitte anpassen"
-
-#: ../bin/cbezier.c:746
-msgid "Invalid Bezier Curve has three coincident points - Adjust"
-msgstr ""
-"Die ungültige Bezier-Kurve hat drei übereinstimmende Punkte - bitte anpassen"
-
-#: ../bin/cbezier.c:755
-msgid "Create Bezier"
-msgstr "Bezier erstellen"
-
-#: ../bin/cbezier.c:837
-#, c-format
-msgid "%s picked - now select a Point"
-msgstr "%s ausgewählt - jetzt einen Punkt auswählen"
-
-#: ../bin/cbezier.c:863 ../bin/ccornu.c:903
-msgid "No changes made"
-msgstr "Keine Änderungen durchgeführt"
-
-#: ../bin/cbezier.c:867
-msgid "Modify Bezier"
-msgstr "Bezier ändern"
-
-#: ../bin/cbezier.c:883
-msgid "Modify Bezier Complete - select another"
-msgstr "Ändern der Bezier-Kurve bendet, bitte eine neue auswählen"
-
-#: ../bin/cbezier.c:888
-msgid "Modify Bezier Cancelled"
-msgstr "Ändern der Bezier-Kurve abgebrochen"
-
-#: ../bin/cbezier.c:980 ../bin/cbezier.c:1050
-#, c-format
-msgid "Place 1st end point of Bezier + Shift -> snap to %s end"
-msgstr "Ersten Endpunkt der Bezier setzen, mit Umschalt das %s Ende benutzen"
-
-#: ../bin/cbezier.c:1003
-msgid "Shift used, but no Unconnected Track End there"
-msgstr ""
-"Umschalte-Taste gedrückt, aber es befindet sich hier kein offenes Gleisende"
-
-#: ../bin/cbezier.c:1016
-msgid "Shift used, but no Line End there"
-msgstr "Umschalt-Taste gedrückt, aber hier befindet sich kein Linienendpunkt"
-
-#: ../bin/cbezier.c:1027
-msgid "Drag end of first Control Arm"
-msgstr "Das Ende des ersten Steuer-Arms verschieben"
-
-#: ../bin/cbezier.c:1035
-msgid "Drag end of second Control Arm"
-msgstr "Das Ende des zweiten Steuer-Arms verschieben"
-
-#: ../bin/cbezier.c:1054 ../bin/cbezier.c:1094
-#, c-format
-msgid "Select other end of Bezier, +Shift -> snap to %s end"
-msgstr ""
-"Das andere Ende der Bezier-Kurve auswählen, durch gleichzeitiges Halten der "
-"Umschalt-Taste zum %s Ende springen"
-
-#: ../bin/cbezier.c:1089
-msgid "Control Arm 1 is too short, try again"
-msgstr "Steuer-Arms 1 ist zu kurz, bitte nochmal versuchen"
-
-#: ../bin/cblock.c:105 ../bin/cblock.c:117 ../bin/cblock.c:160
-#: ../bin/ccontrol.c:168 ../bin/ccontrol.c:408 ../bin/compound.c:521
-#: ../bin/csensor.c:160 ../bin/csensor.c:372 ../bin/csignal.c:235
-#: ../bin/csignal.c:481 ../bin/csignal.c:492 ../bin/csignal.c:518
-#: ../bin/cswitchmotor.c:87 ../bin/cswitchmotor.c:106 ../bin/cswitchmotor.c:217
-#: ../bin/dcontmgm.c:91 ../bin/dlayer.c:444
-msgid "Name"
-msgstr "Name"
-
-#: ../bin/cblock.c:106 ../bin/cblock.c:118 ../bin/cblock.c:161
-#: ../bin/csensor.c:162 ../bin/csensor.c:378 ../bin/csignal.c:481
-#: ../bin/csignal.c:520
-msgid "Script"
-msgstr "Befehlsskript"
-
-#: ../bin/cblock.c:119
-msgid "Segments"
-msgstr "Segmente"
-
-#: ../bin/cblock.c:162 ../bin/cdraw.c:232 ../bin/ctodesgn.c:137
-#: ../bin/ctodesgn.c:138 ../bin/ctodesgn.c:139 ../bin/ctodesgn.c:188
-#: ../bin/ctodesgn.c:191 ../bin/ctodesgn.c:211 ../bin/ctodesgn.c:216
-#: ../bin/ctodesgn.c:249 ../bin/ctodesgn.c:254 ../bin/ctodesgn.c:286
-#: ../bin/ctodesgn.c:289 ../bin/ctodesgn.c:292 ../bin/ctodesgn.c:327
-#: ../bin/ctodesgn.c:329 ../bin/ctodesgn.c:347 ../bin/ctodesgn.c:349
-#: ../bin/ctodesgn.c:368 ../bin/ctodesgn.c:370 ../bin/ctodesgn.c:389
-#: ../bin/ctodesgn.c:409 ../bin/ctodesgn.c:429 ../bin/ctodesgn.c:449
-#: ../bin/ctodesgn.c:487 ../bin/ctodesgn.c:506 ../bin/ctodesgn.c:507
-#: ../bin/ctrain.c:184 ../bin/tbezier.c:249 ../bin/tcornu.c:299
-#: ../bin/tcurve.c:363 ../bin/tstraigh.c:89
-msgid "Length"
-msgstr "Länge"
-
-#: ../bin/cblock.c:163 ../bin/cdraw.c:228 ../bin/compound.c:497
-#: ../bin/tbezier.c:236 ../bin/tcornu.c:286 ../bin/tcurve.c:355
-#: ../bin/tease.c:503 ../bin/tstraigh.c:85
-msgid "End Pt 1: X,Y"
-msgstr "Endpunkt 1: X,Y"
-
-#: ../bin/cblock.c:164 ../bin/cdraw.c:229 ../bin/compound.c:502
-#: ../bin/tbezier.c:243 ../bin/tcornu.c:291 ../bin/tcurve.c:357
-#: ../bin/tease.c:505 ../bin/tstraigh.c:87
-msgid "End Pt 2: X,Y"
-msgstr "Endpunkt 2: X,Y"
-
-#: ../bin/cblock.c:187 ../bin/cblock.c:199 ../bin/cblock.c:517
-#: ../bin/cblock.c:537 ../bin/cblock.c:545 ../bin/cblock.c:604
-#: ../bin/cblock.c:721 ../bin/cblock.c:733 ../bin/cblock.c:771
-#: ../bin/ccontrol.c:202 ../bin/ccontrol.c:215 ../bin/ccontrol.c:227
-#: ../bin/ccontrol.c:469 ../bin/cdraw.c:106 ../bin/cdraw.c:1011
-#: ../bin/cgroup.c:981 ../bin/cgroup.c:1034 ../bin/cgroup.c:1049
-#: ../bin/cgroup.c:1088 ../bin/cgroup.c:1115 ../bin/cgroup.c:1174
-#: ../bin/cgroup.c:1618 ../bin/cnote.c:100 ../bin/compound.c:553
-#: ../bin/compound.c:568 ../bin/compound.c:601 ../bin/cprint.c:490
-#: ../bin/cprint.c:916 ../bin/cpull.c:505 ../bin/cpull.c:520 ../bin/cpull.c:522
-#: ../bin/cpull.c:524 ../bin/cpull.c:711 ../bin/cselect.c:684
-#: ../bin/cselect.c:781 ../bin/cselect.c:1373 ../bin/csensor.c:191
-#: ../bin/csensor.c:203 ../bin/csensor.c:427 ../bin/csignal.c:264
-#: ../bin/csignal.c:649 ../bin/csignal.c:717 ../bin/csnap.c:581
-#: ../bin/csnap.c:714 ../bin/cstruct.c:772 ../bin/cstruct.c:781
-#: ../bin/cstruct.c:883 ../bin/cswitchmotor.c:243 ../bin/cswitchmotor.c:255
-#: ../bin/cswitchmotor.c:267 ../bin/cswitchmotor.c:279
-#: ../bin/cswitchmotor.c:492 ../bin/cswitchmotor.c:521
-#: ../bin/cswitchmotor.c:655 ../bin/cswitchmotor.c:686 ../bin/ctext.c:188
-#: ../bin/ctodesgn.c:158 ../bin/ctodesgn.c:1048 ../bin/ctodesgn.c:1098
-#: ../bin/ctodesgn.c:1211 ../bin/ctodesgn.c:1513 ../bin/ctrain.c:204
-#: ../bin/cturnout.c:2415 ../bin/cturnout.c:2542 ../bin/cundo.c:161
-#: ../bin/cundo.c:166 ../bin/dbitmap.c:68 ../bin/dbitmap.c:125
-#: ../bin/dbitmap.c:203 ../bin/dbitmap.c:238 ../bin/dcar.c:3540
-#: ../bin/dcar.c:3724 ../bin/dcar.c:3728 ../bin/dcar.c:3732 ../bin/dcar.c:3737
-#: ../bin/dcar.c:4051 ../bin/dcar.c:4163 ../bin/dcar.c:4543 ../bin/dcmpnd.c:393
-#: ../bin/dcmpnd.c:404 ../bin/dcmpnd.c:536 ../bin/dcustmgm.c:194
-#: ../bin/dcustmgm.c:200 ../bin/dcustmgm.c:209 ../bin/dcustmgm.c:225
-#: ../bin/dease.c:240 ../bin/dlayer.c:205 ../bin/dlayer.c:227
-#: ../bin/dlayer.c:797 ../bin/dlayer.c:803 ../bin/doption.c:172
-#: ../bin/doption.c:252 ../bin/doption.c:434 ../bin/doption.c:437
-#: ../bin/doption.c:450 ../bin/doption.c:516 ../bin/dprmfile.c:91
-#: ../bin/dprmfile.c:105 ../bin/dprmfile.c:119 ../bin/dprmfile.c:165
-#: ../bin/dprmfile.c:533 ../bin/draw.c:2306 ../bin/fileio.c:610
-#: ../bin/fileio.c:678 ../bin/fileio.c:793 ../bin/fileio.c:795
-#: ../bin/fileio.c:800 ../bin/fileio.c:964 ../bin/layout.c:312
-#: ../bin/macro.c:942 ../bin/macro.c:946 ../bin/macro.c:995 ../bin/macro.c:1061
-#: ../bin/macro.c:1289 ../bin/macro.c:1305 ../bin/misc.c:401 ../bin/misc.c:451
-#: ../bin/misc.c:1728 ../bin/misc.c:1869 ../bin/misc.c:1878 ../bin/misc.c:1965
-#: ../bin/misc.c:2580 ../bin/misc.c:2590 ../bin/misc.c:2610 ../bin/misc.c:2613
-#: ../bin/misc2.c:457 ../bin/param.c:738 ../bin/param.c:1774
-#: ../bin/param.c:1892 ../bin/param.c:1895 ../bin/param.c:2018
-#: ../bin/param.c:2024 ../bin/smalldlg.c:89 ../bin/smalldlg.c:220
-#: ../bin/tease.c:1044 ../bin/track.c:1429 ../wlib/gtklib/wpref.c:122
-#: ../../../../build/work/app/bin/bllnhlp.c:542
-msgid "Ok"
-msgstr "Ok"
-
-#: ../bin/cblock.c:204
-msgid "Change block"
-msgstr "Block ändern"
-
-#: ../bin/cblock.c:255 ../bin/cswitchmotor.c:329
-#, c-format
-msgid "(%d): Layer=%d %s"
-msgstr "(%d): Ebene=%d %s"
-
-#: ../bin/cblock.c:276 ../bin/cblock.c:926
-msgid "Block"
-msgstr "Block"
-
-#: ../bin/cblock.c:440
-#, c-format
-msgid "resolveBlockTrack: T%d[%d]: T%d doesn't exist"
-msgstr "resolveBlockTrack: T%d[%d]: T%d existiert nicht"
-
-#: ../bin/cblock.c:440 ../bin/cswitchmotor.c:425 ../bin/dbench.c:147
-#: ../bin/dcar.c:4239 ../bin/dcar.c:4423 ../bin/dcar.c:4433 ../bin/dcar.c:4481
-#: ../bin/dcar.c:4488 ../bin/dcar.c:4506 ../bin/dcar.c:4519 ../bin/dcar.c:4524
-#: ../bin/dcar.c:4553 ../bin/dcar.c:4715 ../bin/dxfoutput.c:189
-#: ../bin/fileio.c:236 ../bin/fileio.c:541 ../bin/fileio.c:656
-#: ../bin/fileio.c:753 ../bin/fileio.c:944 ../bin/fileio.c:1212
-#: ../bin/fileio.c:1262 ../bin/fileio.c:1308 ../bin/macro.c:174
-#: ../bin/macro.c:839 ../bin/macro.c:855 ../bin/macro.c:1092
-#: ../bin/param.c:2011 ../bin/track.c:1040 ../bin/track.c:1415
-#: ../bin/track.c:1707 ../bin/track.c:1711 ../bin/track.c:1732
-#: ../bin/track.c:1794 ../wlib/gtklib/wpref.c:248 ../wlib/gtklib/wpref.c:255
-msgid "Continue"
-msgstr "Weiter"
-
-#: ../bin/cblock.c:517 ../bin/cblock.c:733
-msgid "Block must have a name!"
-msgstr "Der Gleisabschnitt benötigt einen Namen!"
-
-#: ../bin/cblock.c:545
-msgid "Block is discontigious!"
-msgstr "Der Block ist nicht zusammenhängend!"
-
-#: ../bin/cblock.c:550
-msgid "Create block"
-msgstr "Block erstellen"
-
-#: ../bin/cblock.c:586
-msgid "Non track object skipped!"
-msgstr "Objekt ist kein Gleis, übersprungen!"
-
-#: ../bin/cblock.c:590
-msgid "Selected track is already in a block, skipped!"
-msgstr "Übersprungen, da das ausgewählte Gleis bereits in einem Block ist!"
-
-#: ../bin/cblock.c:604
-msgid "Create Block"
-msgstr "Gleisabschnitt erstellen"
-
-#: ../bin/cblock.c:634 ../bin/cblock.c:666
-msgid "Select a track"
-msgstr "Gleis auswählen"
-
-#: ../bin/cblock.c:643 ../bin/cblock.c:674
-msgid "Not a block!"
-msgstr "Kein Block!"
-
-#: ../bin/cblock.c:679
-#, c-format
-msgid "Really delete block %s?"
-msgstr "Soll der Block %s wirklich gelöscht werden?"
-
-#: ../bin/cblock.c:679 ../bin/cdraw.c:110 ../bin/cgroup.c:987
-#: ../bin/cpull.c:672 ../bin/csignal.c:695 ../bin/cswitchmotor.c:611
-#: ../bin/ctodesgn.c:1521 ../bin/ctodesgn.c:2000 ../bin/ctrain.c:2450
-#: ../bin/dbitmap.c:208 ../bin/dcar.c:3676 ../bin/dcar.c:3754
-#: ../bin/dcar.c:3838 ../bin/dcar.c:3857 ../bin/dcar.c:4188 ../bin/dcar.c:4605
-#: ../bin/dcontmgm.c:173 ../bin/dcustmgm.c:141 ../bin/misc.c:1137
-#: ../bin/misc.c:1142 ../bin/misc.c:1207 ../bin/track.c:1431
-#: ../bin/track.c:1528 ../bin/track.c:1542
-msgid "Yes"
-msgstr "Ja"
-
-#: ../bin/cblock.c:679 ../bin/cdraw.c:110 ../bin/cgroup.c:987
-#: ../bin/cpull.c:672 ../bin/csignal.c:695 ../bin/cswitchmotor.c:611
-#: ../bin/ctodesgn.c:1521 ../bin/ctodesgn.c:2000 ../bin/ctrain.c:2450
-#: ../bin/dcar.c:3676 ../bin/dcar.c:3754 ../bin/dcar.c:3838 ../bin/dcar.c:3857
-#: ../bin/dcar.c:4188 ../bin/dcar.c:4605 ../bin/dcontmgm.c:173
-#: ../bin/dcustmgm.c:141 ../bin/misc.c:1137 ../bin/misc.c:1142
-#: ../bin/misc.c:1207 ../bin/track.c:1431 ../bin/track.c:1528
-#: ../bin/track.c:1542
-msgid "No"
-msgstr "Nein"
-
-#: ../bin/cblock.c:680
-msgid "Delete Block"
-msgstr "Gleisabschnitt löschen"
-
-#: ../bin/cblock.c:721
-#, c-format
-msgid "Deleting block %s"
-msgstr "Gleisabschnitt %s löschen"
-
-#: ../bin/cblock.c:737
-msgid "Modify Block"
-msgstr "Gleisabschnitt bearbeiten"
-
-#: ../bin/cblock.c:770
-msgid "Edit block"
-msgstr "Block bearbeiten"
-
-#: ../bin/cblock.c:776
-#, c-format
-msgid "Edit block %d"
-msgstr "Gleisabschnitt %d bearbeiten"
-
-#: ../bin/ccontrol.c:169 ../bin/cnote.c:162 ../bin/csensor.c:161
-#: ../bin/csignal.c:236 ../bin/ctrain.c:182
-msgid "Position"
-msgstr "Position"
-
-#: ../bin/ccontrol.c:170 ../bin/ccontrol.c:414
-msgid "On Script"
-msgstr "Befehlsskript An"
-
-#: ../bin/ccontrol.c:171 ../bin/ccontrol.c:416
-msgid "Off Script"
-msgstr "Befehlsskript Aus"
-
-#: ../bin/ccontrol.c:237
-msgid "Change Control"
-msgstr "Steuerung ändern"
-
-#: ../bin/ccontrol.c:279 ../bin/csensor.c:249
-#, c-format
-msgid "(%d [%s]): Layer=%d, at %0.3f,%0.3f"
-msgstr "(%d [%s]): Ebene=%d, bei %0.3f,%0.3f"
-
-#: ../bin/ccontrol.c:292 ../bin/ccontrol.c:618
-msgid "Control"
-msgstr "Steuerung"
-
-#: ../bin/ccontrol.c:410
-msgid "Origin X"
-msgstr "Ausgangspunkt X"
-
-#: ../bin/ccontrol.c:412 ../bin/csensor.c:376 ../bin/csignal.c:496
-msgid "Origin Y"
-msgstr "Ausgangspunkt: Y"
-
-#: ../bin/ccontrol.c:428
-msgid "Create Control"
-msgstr "Steuerung erstellen"
-
-#: ../bin/ccontrol.c:431
-msgid "Modify Control"
-msgstr "Steuerung ändern"
-
-#: ../bin/ccontrol.c:468
-msgid "Edit control"
-msgstr "Steuerung bearbeiten"
-
-#: ../bin/ccontrol.c:508
-msgid "Place control"
-msgstr "Steuerung setzen"
-
-#: ../bin/ccornu.c:463 ../bin/cjoin.c:523 ../bin/cmisc.c:52
-msgid "First"
-msgstr "Erste"
-
-#: ../bin/ccornu.c:470 ../bin/cjoin.c:528 ../bin/cmisc.c:52
-msgid "Second"
-msgstr "Zweite"
-
-#: ../bin/ccornu.c:549
-msgid "Not close enough to end point, reselect"
-msgstr "Kein Endpunkte in der Nähe, bitte wiederholen"
-
-#: ../bin/ccornu.c:567
-msgid ""
-"Pick any circle to adjust it by dragging - Enter to accept, Esc to cancel"
-msgstr "Wähle einen beliebigen Kreis aus passe die Kurve durch verschieben an"
-
-#: ../bin/ccornu.c:578
-msgid "Track can't be split"
-msgstr "Das Gleis kann nicht getrennt werden"
-
-#: ../bin/ccornu.c:593
-msgid "Too close to other end of selected Track"
-msgstr "Zu nahe am anderen Ende des ausgewählten Gleises"
-
-#: ../bin/ccornu.c:715
-msgid "Can't extend connected Bezier or Cornu"
-msgstr "Bezier- oder Cornu-Kurve kann nicht erweitert werden"
-
-#: ../bin/ccornu.c:729
-#, c-format
-msgid ""
-"Cornu : Min Radius=%s MaxRateofCurveChange/Scale=%s Length=%s Winding Arc=%s"
-msgstr ""
-"Cornu: Mindestradius =%s Max. Änderungsrate des Radius=%s Länge=%s Bogen=%s"
-
-#: ../bin/ccornu.c:747
-msgid "Pick on point to adjust it along track - Enter to confirm, ESC to abort"
-msgstr ""
-"Einen Punkte auswählen und entlang des Gleises verschieben - Bestätigen mit "
-"Eingabe, Abbrechen mit Esc"
-
-#: ../bin/ccornu.c:757
-msgid "Cornu has too complex shape - adjust end pts"
-msgstr "Die Form der Cornu-Kurve ist zu komplex, Endpunkte anpassen"
-
-#: ../bin/ccornu.c:768 ../bin/ccornu.c:917
-#, c-format
-msgid "Cornu end %d too close to other end of connect track - reposition it"
-msgstr ""
-"Cornu-Ende %d zu dicht am anderen Ende des Gleises - anderere Position setzen"
-
-#: ../bin/ccornu.c:775
-msgid "Create Cornu"
-msgstr "Cornu-Kurve erstellen"
-
-#: ../bin/ccornu.c:779 ../bin/ccornu.c:949 ../bin/tcornu.c:772
-#: ../bin/tcornu.c:968 ../bin/tcornu.c:1252
-#, c-format
-msgid ""
-"Cornu Create Failed for p1[%0.3f,%0.3f] p2[%0.3f,%0.3f], c1[%0.3f,%0.3f] "
-"c2[%0.3f,%0.3f], a1=%0.3f a2=%0.3f, r1=%s r2=%s"
-msgstr ""
-"Erstellen der mit p1[%0.3f,%0.3f] p2[%0.3f,%0.3f], c1[%0.3f,%0.3f] c2[%0.3f,"
-"%0.3f], a1=%0.3f a2=%0.3f, r1=%s r2=%s nicht möglich"
-
-#: ../bin/ccornu.c:877
-msgid "Track picked - now select a Point"
-msgstr "Gleis ausgewählt - jetzt einen Punkt auswählen"
-
-#: ../bin/ccornu.c:922
-msgid "Modify Cornu"
-msgstr "Cornu-Kurve ändern"
-
-#: ../bin/ccornu.c:939
-#, c-format
-msgid "Cornu Extension Create Failed for end %d"
-msgstr "Das Erzeugen einer Klothide aus dem Endpunkt %d ist nicht möglich"
-
-#: ../bin/ccornu.c:983
-#, c-format
-msgid "Connected Track End Adjust for end %d failed"
-msgstr "Ende %d des Gleis ist verbunden und kann nicht angepasst werden"
-
-#: ../bin/ccornu.c:996
-msgid "Modify Cornu Cancelled"
-msgstr "Änderung der Cornu-Kurve abbrechen"
-
-#: ../bin/ccornu.c:1119
-msgid "Left click - join with Cornu track"
-msgstr "Durch Drücken der linken Maustaste mit einer Cornu-Kurve verbinden"
-
-#: ../bin/ccornu.c:1121
-msgid "Left click - join with Cornu track, Shift Left click - move to join"
-msgstr ""
-"Linke Maustaste - Verbinden mit Cornu-Gleis, Umschalten + linke Maustaste - "
-"Verschieben zum Verbinden"
-
-#: ../bin/ccornu.c:1132
-msgid "Helix Already Connected"
-msgstr "Gleiswendel ist bereits verbunden"
-
-#: ../bin/ccornu.c:1140
-msgid "No Unconnected end point on that track"
-msgstr "Kein unverbundener Endpunkt auf diesem Gleis"
-
-#: ../bin/ccornu.c:1148
-msgid ""
-"Place 2nd end point of Cornu track on track with an unconnected end-point"
-msgstr ""
-"Setze den zweiten Endpunkt des Cornu-Gleis auf ein Gleis mit einem "
-"unverbundenen Endpunkt"
-
-#: ../bin/ccornu.c:1151
-msgid "No Unconnected Track End there"
-msgstr "Hier ist kein offenes Gleisende"
-
-#: ../bin/ccornu.c:1163
-msgid "Move 1st end point of Cornu track along track 1"
-msgstr ""
-"Verschiebe den ersten Endpunkt des Cornu-Gleis entlang des ersten Gleises"
-
-#: ../bin/ccornu.c:1182
-msgid "Move 2nd end point of Cornu track along track 2"
-msgstr ""
-"Verschiebe den zweiten Endpunkt des Cornu-Gleis entlang des zweiten Gleises"
-
-#: ../bin/ccornu.c:1200
-msgid "Can't Split - Locked to End Point"
-msgstr "Trennen nicht möglich - am Endpunkt verriegelt"
-
-#: ../bin/ccornu.c:1205
-msgid "Point not on track 1"
-msgstr "Der Punkt ist nicht auf Gleis 1"
-
-#: ../bin/ccornu.c:1229
-msgid "Put other end of Cornu on a track with an unconnected end point"
-msgstr ""
-"Setze den aneren Endpunkt des Cornu-Gleis auf ein Gleis mit einem "
-"unverbundenen Endpunkt"
-
-#: ../bin/ccurve.c:118
-msgid ""
-"Drag from End-Point in direction of curve - Shift locks to track open end-"
-"point"
-msgstr ""
-"Vom Endpunkt in Richtung der Kurve ziehen, mit Umschalt-Taste an "
-"unverbundenen Endpunkt verbinden"
-
-#: ../bin/ccurve.c:120
-msgid "Drag from End-Point in direction of curve"
-msgstr "Vom Endpunkt in Richtung der Kurve ziehen"
-
-#: ../bin/ccurve.c:124
-msgid "Drag from End-Point to Center - Shift locks to track open end-point"
-msgstr ""
-"Vom Endpunkt zum Mittelpunkt ziehen, mit Umschalt-Taste an unverbundenen "
-"Endpunkt verbinden"
-
-#: ../bin/ccurve.c:126 ../bin/ccurve.c:187
-msgid "Drag from End-Point to Center"
-msgstr "Vom Endpunkt zum Mittelpunkt ziehen"
-
-#: ../bin/ccurve.c:129 ../bin/ccurve.c:187
-msgid "Drag from Center to End-Point"
-msgstr "Vom Mittelpunkt zum Endpunkt ziehen"
-
-#: ../bin/ccurve.c:132
-msgid "Drag from one to other end of chord"
-msgstr "Vom einen zum anderen Ende der Sehne ziehen"
-
-#: ../bin/ccurve.c:155 ../bin/cstraigh.c:74
-msgid ""
-"No unconnected end-point on track - Try again or release Shift and click"
-msgstr ""
-"Dieses Gleis hat keinen unverbundenen Endpunkt, nochmal versuchen oder "
-"Umschalttaste lösen und dann klicken"
-
-#: ../bin/ccurve.c:160 ../bin/cstraigh.c:80
-msgid "Not on a track - Try again or release Shift and click"
-msgstr ""
-"Nicht auf einem Gleis, nochmal versuchen oder Umschalttaste lösen und Klicken"
-
-#: ../bin/ccurve.c:174
-msgid "End Locked: Drag out curve start"
-msgstr "Ende fixiert, Anfangspunkt der Kurve ziehen"
-
-#: ../bin/ccurve.c:175
-msgid "Drag along curve start"
-msgstr "Entlang der Anfangs der Kurve ziehen"
-
-#: ../bin/ccurve.c:185
-msgid "End Locked: Drag out to center"
-msgstr "Ende fixiert, zum Mittelpunkt ziehen"
-
-#: ../bin/ccurve.c:193
-msgid "Drag to other end of chord"
-msgstr "Zum anderen Ende der Sehne ziehen"
-
-#: ../bin/ccurve.c:221
-#, c-format
-msgid "Start Locked: Drag out curve start - Angle=%0.3f"
-msgstr "Anfang fixiert, Anfangspunkt der Kurve ziehen - Winkel=%0.3f"
-
-#: ../bin/ccurve.c:222
-#, c-format
-msgid "Drag out curve start - Angle=%0.3f"
-msgstr "Anfangspunkt der Kurve ziehen - Winkel=%0.3f"
-
-#: ../bin/ccurve.c:226
-#, c-format
-msgid "Tangent Locked: Drag out center - Radius=%s Angle=%0.3f"
-msgstr "Gleistangente gesetzt: Ziehe zum Mittelpunkt Radius=%s Winkel=%0.3f"
-
-#: ../bin/ccurve.c:227
-#, c-format
-msgid "Drag out center - Radius=%s Angle=%0.3f"
-msgstr "Ziehe zum Mittelpunkt - Radius=%s Winkel=%0.3f"
-
-#: ../bin/ccurve.c:233
-#, c-format
-msgid "Radius=%s Angle=%0.3f"
-msgstr "Radius=%s Winkel=%0.3f"
-
-#: ../bin/ccurve.c:239
-#, c-format
-msgid "Length=%s Angle=%0.3f"
-msgstr "Länge=%s Winkel=%0.3f"
-
-#: ../bin/ccurve.c:289 ../bin/ccurve.c:397 ../bin/drawgeom.c:442
-msgid "Drag on Red arrows to adjust curve"
-msgstr "An den roten Pfeilen ziehen, um die Kurve anzupassen"
-
-#: ../bin/ccurve.c:352 ../bin/cjoin.c:216 ../bin/cmodify.c:370
-#: ../bin/cturntbl.c:569
-#, c-format
-msgid "Straight Track: Length=%s Angle=%0.3f"
-msgstr "Gleisgerade: Länge=%s Winkel=%0.3f"
-
-#: ../bin/ccurve.c:357 ../bin/cmodify.c:375 ../bin/drawgeom.c:325
-#: ../wlib/gtklib/ixhelp.c:235
-msgid "Back"
-msgstr "Zurück"
-
-#: ../bin/ccurve.c:375
-#, c-format
-msgid "Curved Track: Radius=%s Angle=%0.3f Length=%s"
-msgstr "Gleisbogen: Radius=%s Winkel=%0.3f Länge=%s"
-
-#: ../bin/ccurve.c:408 ../bin/cstraigh.c:133
-msgid "Create Straight Track"
-msgstr "Erstelle gerades Gleis"
-
-#: ../bin/ccurve.c:420
-msgid "Create Curved Track"
-msgstr "Erstelle Gleisbogen"
-
-#: ../bin/ccurve.c:491
-msgid "Elevation Difference"
-msgstr "Höhenunterschied"
-
-#: ../bin/ccurve.c:492 ../bin/cdraw.c:231 ../bin/compound.c:500
-#: ../bin/compound.c:505 ../bin/compound.c:510 ../bin/compound.c:515
-#: ../bin/ctodesgn.c:467 ../bin/tbezier.c:238 ../bin/tbezier.c:245
-#: ../bin/tcornu.c:293 ../bin/tcurve.c:360
-msgid "Radius"
-msgstr "Radius"
-
-#: ../bin/ccurve.c:493 ../bin/tcurve.c:361
-msgid "Turns"
-msgstr "Windungen"
-
-#: ../bin/ccurve.c:494
-msgid "Angular Separation"
-msgstr "Winkelabstand"
-
-#: ../bin/ccurve.c:495 ../bin/celev.c:45 ../bin/compound.c:517
-#: ../bin/tbezier.c:250 ../bin/tcornu.c:300 ../bin/tcurve.c:367
-#: ../bin/tease.c:513 ../bin/tstraigh.c:91
-msgid "Grade"
-msgstr "Steigung"
-
-#: ../bin/ccurve.c:496
-msgid "Vertical Separation"
-msgstr "Vertikaler Abstand"
-
-#: ../bin/ccurve.c:498
-msgid "Total Length"
-msgstr "Gesamtlänge"
-
-#: ../bin/ccurve.c:574
-#, c-format
-msgid "Total Length %s"
-msgstr "Gesamtlänge %s"
-
-#: ../bin/ccurve.c:613 ../bin/ccurve.c:818 ../bin/tcurve.c:794
-msgid "Helix"
-msgstr "Gleiswendel"
-
-#: ../bin/ccurve.c:627
-msgid "Circle Radius"
-msgstr "Kreisradius"
-
-#: ../bin/ccurve.c:632
-msgid "Click on Circle Edge"
-msgstr "Auf den Rand des Kreis klicken"
-
-#: ../bin/ccurve.c:636
-msgid "Click on Circle Center"
-msgstr "Auf den Mittelpunkt des Kreises klicken"
-
-#: ../bin/ccurve.c:667
-msgid "Drag to Center"
-msgstr "Zum Mittelpunkt ziehen"
-
-#: ../bin/ccurve.c:671
-msgid "Drag to Edge"
-msgstr "Zum Rand ziehen"
-
-#: ../bin/ccurve.c:692 ../bin/ccurve.c:696
-#, c-format
-msgid "Radius=%s"
-msgstr "Radius=%s"
-
-#: ../bin/ccurve.c:723
-msgid "Create Helix Track"
-msgstr "Erstelle Gleiswendel"
-
-#: ../bin/ccurve.c:734
-msgid "Create Circle Track"
-msgstr "Erstelle Gleiskreis"
-
-#: ../bin/ccurve.c:789
-msgid "Curve Track"
-msgstr "Gleisbogen"
-
-#: ../bin/ccurve.c:789
-msgid "Curve Tracks"
-msgstr "Gleisbögen"
-
-#: ../bin/ccurve.c:790
-msgid "Curve from End-Pt"
-msgstr "Bogen aus Endpunkten"
-
-#: ../bin/ccurve.c:791
-msgid "Curve from Tangent"
-msgstr "Bogen an Tangente"
-
-#: ../bin/ccurve.c:792
-msgid "Curve from Center"
-msgstr "Bogen um Mittelpunkt"
-
-#: ../bin/ccurve.c:793
-msgid "Curve from Chord"
-msgstr "Bogen aus Sehne"
-
-#: ../bin/ccurve.c:794 ../bin/cdraw.c:1195
-msgid "Bezier Curve"
-msgstr "Bezierkurve"
-
-#: ../bin/ccurve.c:797 ../bin/tcurve.c:634
-msgid "Circle Track"
-msgstr "Gleiskreis"
-
-#: ../bin/ccurve.c:797
-msgid "Circle Tracks"
-msgstr "Gleiskreise"
-
-#: ../bin/ccurve.c:798
-msgid "Fixed Radius Circle"
-msgstr "Kreis mit festem Radius"
-
-#: ../bin/ccurve.c:799
-msgid "Circle from Tangent"
-msgstr "Kreis an Tangente"
-
-#: ../bin/ccurve.c:800
-msgid "Circle from Center"
-msgstr "Kreis um Mittelpunkt"
-
-#: ../bin/cdraw.c:106
-msgid "Font Size must be > 0"
-msgstr "Schriftgröße muss größer als 0 sein"
-
-#: ../bin/cdraw.c:230 ../bin/tcurve.c:359
-msgid "Center: X,Y"
-msgstr "Mittelpunkt: X,Y"
-
-#: ../bin/cdraw.c:233 ../bin/cdraw.c:243 ../bin/compound.c:498
-#: ../bin/compound.c:503 ../bin/compound.c:508 ../bin/compound.c:513
-#: ../bin/compound.c:519 ../bin/cprint.c:143 ../bin/csignal.c:237
-#: ../bin/csignal.c:498 ../bin/ctodesgn.c:144 ../bin/ctodesgn.c:146
-#: ../bin/ctodesgn.c:189 ../bin/ctodesgn.c:212 ../bin/ctodesgn.c:214
-#: ../bin/ctodesgn.c:250 ../bin/ctodesgn.c:253 ../bin/ctodesgn.c:287
-#: ../bin/ctodesgn.c:291 ../bin/ctodesgn.c:328 ../bin/ctodesgn.c:348
-#: ../bin/ctodesgn.c:369 ../bin/ctodesgn.c:468 ../bin/ctrain.c:183
-#: ../bin/tease.c:508 ../bin/tstraigh.c:90
-msgid "Angle"
-msgstr "Winkel"
-
-#: ../bin/cdraw.c:234 ../bin/tcurve.c:365
-msgid "CCW Angle"
-msgstr "Winkel (gegen Uhrzeigersinn)"
-
-#: ../bin/cdraw.c:235 ../bin/tcurve.c:366
-msgid "CW Angle"
-msgstr "Winkel (im Uhrzeigersinn)"
-
-#: ../bin/cdraw.c:236
-msgid "Point Count"
-msgstr "Anzahl der Punkte"
-
-#: ../bin/cdraw.c:237 ../bin/cdraw.c:945 ../bin/ctodesgn.c:156
-#: ../bin/tbezier.c:252
-msgid "Line Width"
-msgstr "Strichdicke"
-
-#: ../bin/cdraw.c:238 ../bin/cdraw.c:947 ../bin/cdraw.c:949 ../bin/cdraw.c:1032
-#: ../bin/cdraw.c:1057 ../bin/cmisc.c:117 ../bin/ctext.c:66 ../bin/ctext.c:155
-#: ../bin/ctodesgn.c:157 ../bin/dcar.c:1980 ../bin/dlayer.c:446
-#: ../bin/doption.c:516
-msgid "Color"
-msgstr "Farbe"
-
-#: ../bin/cdraw.c:239 ../bin/cdraw.c:474 ../bin/cdraw.c:969
-msgid "Lumber"
-msgstr "Holzleiste"
-
-#: ../bin/cdraw.c:240
-msgid "Orientation"
-msgstr "Ausrichtung"
-
-#: ../bin/cdraw.c:241 ../bin/cdraw.c:963
-#: ../../../../build/work/app/bin/bllnhlp.c:544
-msgid "Size"
-msgstr "Größe"
-
-#: ../bin/cdraw.c:242 ../bin/compound.c:518 ../bin/tease.c:507
-msgid "Origin: X,Y"
-msgstr "Ausgangspunkt: X,Y"
-
-#: ../bin/cdraw.c:244 ../bin/ctext.c:64 ../bin/ctext.c:154
-msgid "Font Size"
-msgstr "Schriftgröße"
-
-#: ../bin/cdraw.c:245 ../bin/cdraw.c:553 ../bin/ctext.c:287
-msgid "Text"
-msgstr "Text"
-
-#: ../bin/cdraw.c:246 ../bin/cmisc.c:134 ../bin/tcurve.c:368 ../bin/tease.c:514
-#: ../bin/tstraigh.c:92
-msgid "Pivot"
-msgstr "Drehpunkt"
-
-#: ../bin/cdraw.c:247 ../bin/cnote.c:163 ../bin/compound.c:525
-#: ../bin/cturntbl.c:248 ../bin/tbezier.c:251 ../bin/tcornu.c:301
-#: ../bin/tcurve.c:369 ../bin/tease.c:515 ../bin/tstraigh.c:93
-#: ../../../../build/work/app/bin/bllnhlp.c:622
-#: ../../../../build/work/app/bin/bllnhlp.c:623
-#: ../../../../build/work/app/bin/bllnhlp.c:624
-#: ../../../../build/work/app/bin/bllnhlp.c:625
-#: ../../../../build/work/app/bin/bllnhlp.c:626
-#: ../../../../build/work/app/bin/bllnhlp.c:627
-#: ../../../../build/work/app/bin/bllnhlp.c:628
-#: ../../../../build/work/app/bin/bllnhlp.c:629
-#: ../../../../build/work/app/bin/bllnhlp.c:630
-#: ../../../../build/work/app/bin/bllnhlp.c:631
-#: ../../../../build/work/app/bin/bllnhlp.c:632
-#: ../../../../build/work/app/bin/bllnhlp.c:633
-#: ../../../../build/work/app/bin/bllnhlp.c:634
-#: ../../../../build/work/app/bin/bllnhlp.c:635
-#: ../../../../build/work/app/bin/bllnhlp.c:636
-#: ../../../../build/work/app/bin/bllnhlp.c:637
-#: ../../../../build/work/app/bin/bllnhlp.c:638
-#: ../../../../build/work/app/bin/bllnhlp.c:639
-#: ../../../../build/work/app/bin/bllnhlp.c:640
-#: ../../../../build/work/app/bin/bllnhlp.c:641
-msgid "Layer"
-msgstr "Ebene"
-
-#: ../bin/cdraw.c:248 ../bin/dcar.c:1953 ../bin/dcar.c:4082 ../bin/dcar.c:4087
-msgid "Type"
-msgstr "Typ"
-
-#: ../bin/cdraw.c:464
-msgid "Straight Line"
-msgstr "Gerade Linie"
-
-#: ../bin/cdraw.c:467 ../bin/cdraw.c:1187
-msgid "Dimension Line"
-msgstr "Maßlinie"
-
-#: ../bin/cdraw.c:482 ../bin/cdraw.c:970 ../bin/cdraw.c:1189
-msgid "Table Edge"
-msgstr "Tischkante"
-
-#: ../bin/cdraw.c:494 ../bin/cdraw.c:975 ../bin/cdraw.c:976 ../bin/cdraw.c:977
-msgid "Circle"
-msgstr "Kreis"
-
-#: ../bin/cdraw.c:502
-msgid "Curved Line"
-msgstr "Gebogene Linie"
-
-#: ../bin/cdraw.c:511 ../bin/cdraw.c:980 ../bin/cdraw.c:981 ../bin/cdraw.c:982
-msgid "Filled Circle"
-msgstr "Gefüllter Kreis"
-
-#: ../bin/cdraw.c:519 ../bin/cdraw.c:534
-msgid "Rectangle"
-msgstr "Rechteck"
-
-#: ../bin/cdraw.c:522 ../bin/cdraw.c:537
-msgid "Freeform"
-msgstr "Freeform"
-
-#: ../bin/cdraw.c:525
-msgid "Polygonal Line"
-msgstr "Vieleck"
-
-#: ../bin/cdraw.c:540 ../bin/cdraw.c:984 ../bin/cdraw.c:1207
-msgid "Polygon"
-msgstr "Vieleck"
-
-#: ../bin/cdraw.c:559
-#, c-format
-msgid "%s: Layer=%d"
-msgstr "%s: Ebene=%d"
-
-#: ../bin/cdraw.c:570 ../bin/cdraw.c:1074
-msgid "Tiny"
-msgstr "Winzig"
-
-#: ../bin/cdraw.c:571 ../bin/cdraw.c:1075
-msgid "Small"
-msgstr "Klein"
-
-#: ../bin/cdraw.c:572 ../bin/cdraw.c:1076
-msgid "Medium"
-msgstr "Mittel"
-
-#: ../bin/cdraw.c:573 ../bin/cdraw.c:1077
-msgid "Large"
-msgstr "Groß"
-
-#: ../bin/cdraw.c:952 ../bin/cdraw.c:954 ../bin/cdraw.c:1055
-msgid "Lumber Type"
-msgstr "Leistenart"
-
-#: ../bin/cdraw.c:967
-msgid "Straight"
-msgstr "Gerade"
-
-#: ../bin/cdraw.c:968
-msgid "Dimension"
-msgstr "Abmessung"
-
-#: ../bin/cdraw.c:971 ../bin/cdraw.c:972 ../bin/cdraw.c:973 ../bin/cdraw.c:974
-msgid "Curved"
-msgstr "Gebogen"
-
-#: ../bin/cdraw.c:978 ../bin/cdraw.c:1204
-msgid "Box"
-msgstr "Rechteck"
-
-#: ../bin/cdraw.c:979
-msgid "Polyline"
-msgstr "Polylinie"
-
-#: ../bin/cdraw.c:983 ../bin/cdraw.c:1205
-msgid "Filled Box"
-msgstr "Gefülltes Rechteck"
-
-#: ../bin/cdraw.c:985 ../bin/tbezier.c:438
-msgid "Bezier Line"
-msgstr "Bezierlinie"
-
-#: ../bin/cdraw.c:1030
-#, c-format
-msgid "%s Line Width"
-msgstr "%s Strichdicke"
-
-#: ../bin/cdraw.c:1044
-#, c-format
-msgid "%s Color"
-msgstr "%s Farbe"
-
-#: ../bin/cdraw.c:1072
-msgid "Dimension Line Size"
-msgstr "Maßliniengröße"
-
-#: ../bin/cdraw.c:1085
-msgid "Drag to create Table Edge"
-msgstr "Durch Ziehen die Tischkante erstellen"
-
-#: ../bin/cdraw.c:1186
-msgid "Line"
-msgstr "Linie"
-
-#: ../bin/cdraw.c:1186
-msgid "Draw Line"
-msgstr "Zeichne Linie"
-
-#: ../bin/cdraw.c:1187
-msgid "Draw Dimension Line"
-msgstr "Zeichne Maßlinie"
-
-#: ../bin/cdraw.c:1188 ../../../../build/work/app/i18n/custmsg.h:649
-msgid "Benchwork"
-msgstr "Unterbau"
-
-#: ../bin/cdraw.c:1188
-msgid "Draw Benchwork"
-msgstr "Zeichne Unterbau"
-
-#: ../bin/cdraw.c:1189
-msgid "Draw Table Edge"
-msgstr "Zeichne Tischkante"
-
-#: ../bin/cdraw.c:1191
-msgid "Curve End"
-msgstr "Kurvenenden"
-
-#: ../bin/cdraw.c:1191
-msgid "Draw Curve from End"
-msgstr "Zeichne Kurve durch Enden"
-
-#: ../bin/cdraw.c:1192
-msgid "Curve Tangent"
-msgstr "Kurve Tangente"
-
-#: ../bin/cdraw.c:1192
-msgid "Draw Curve from Tangent"
-msgstr "Zeichne Kurve an Tangente"
-
-#: ../bin/cdraw.c:1193
-msgid "Curve Center"
-msgstr "Kurve um Mittelpunkt"
-
-#: ../bin/cdraw.c:1193
-msgid "Draw Curve from Center"
-msgstr "Zeichne Kurve um Mittelpunkt"
-
-#: ../bin/cdraw.c:1194
-msgid "Curve Chord"
-msgstr "Kurve durch Sehne"
-
-#: ../bin/cdraw.c:1194
-msgid "Draw Curve from Chord"
-msgstr "Zeichne Kurve durch Sehne"
-
-#: ../bin/cdraw.c:1195
-msgid "Draw Bezier"
-msgstr "Zeichne Bezier"
-
-#: ../bin/cdraw.c:1198
-msgid "Circle Tangent"
-msgstr "Kreis an Tangente"
-
-#: ../bin/cdraw.c:1198
-msgid "Draw Circle from Tangent"
-msgstr "Zeichne Kreis an Tangente"
-
-#: ../bin/cdraw.c:1199
-msgid "Circle Center"
-msgstr "Kreismittelpunkt"
-
-#: ../bin/cdraw.c:1199
-msgid "Draw Circle from Center"
-msgstr "Zeichne Kreis um Mittelpunkt"
-
-#: ../bin/cdraw.c:1201
-msgid "Circle Filled Tangent"
-msgstr "Gefüllter Kreis an Tangente"
-
-#: ../bin/cdraw.c:1201
-msgid "Draw Filled Circle from Tangent"
-msgstr "Gefüllter Kreis an Tangente"
-
-#: ../bin/cdraw.c:1202
-msgid "Circle Filled Center"
-msgstr "Gefüllter Kreis Mittelpunkt"
-
-#: ../bin/cdraw.c:1202
-msgid "Draw Filled Circle from Center"
-msgstr "Gefüllter Kreis von Mittelpunkt"
-
-#: ../bin/cdraw.c:1204
-msgid "Draw Box"
-msgstr "Zeichne Rechteck"
-
-#: ../bin/cdraw.c:1205
-msgid "Draw Filled Box"
-msgstr "Zeichne gefülltes Rechteck"
-
-#: ../bin/cdraw.c:1206
-msgid "Poly Line"
-msgstr "Polylinie"
-
-#: ../bin/cdraw.c:1206
-msgid "Draw Polyline"
-msgstr "Zeichne Polylinie"
-
-#: ../bin/cdraw.c:1207
-msgid "Draw Polygon"
-msgstr "Zeichne Vieleck"
-
-#: ../bin/cdraw.c:1223
-msgid "Straight Objects"
-msgstr "Gerade Objekte"
-
-#: ../bin/cdraw.c:1223
-msgid "Draw Straight Objects"
-msgstr "Zeichne gerade Objekte"
-
-#: ../bin/cdraw.c:1224
-msgid "Curved Lines"
-msgstr "Gebogene Linien"
-
-#: ../bin/cdraw.c:1224
-msgid "Draw Curved Lines"
-msgstr "Zeichne gebogene Linien"
-
-#: ../bin/cdraw.c:1225
-msgid "Circle Lines"
-msgstr "Kreislinien"
-
-#: ../bin/cdraw.c:1225
-msgid "Draw Circles"
-msgstr "Zeichne Kreise"
-
-#: ../bin/cdraw.c:1226
-msgid "Shapes"
-msgstr "Formen"
-
-#: ../bin/cdraw.c:1226
-msgid "Draw Shapes"
-msgstr "Zeichne Formen"
-
-#: ../bin/celev.c:44 ../bin/cprofile.c:1383 ../bin/csplit.c:107
-#: ../bin/csplit.c:112 ../bin/dease.c:65 ../bin/doption.c:109
-#: ../bin/doption.c:111
-msgid "None"
-msgstr "Kein"
-
-#: ../bin/celev.c:44
-msgid "Defined"
-msgstr "Fest"
-
-#: ../bin/celev.c:44
-msgid "Hidden"
-msgstr "Versteckt"
-
-#: ../bin/celev.c:45
-msgid "Computed"
-msgstr "Berechnet"
-
-#: ../bin/celev.c:45
-msgid "Station"
-msgstr "Bahnhof"
-
-#: ../bin/celev.c:45 ../bin/cprofile.c:1382 ../bin/dcmpnd.c:74
-#: ../bin/misc.c:2524
-msgid "Ignore"
-msgstr "Ignorieren"
-
-#: ../bin/celev.c:123 ../bin/celev.c:168
-msgid "There are no reachable Defined Elevations"
-msgstr "Ziehen um die Höhe zu ändern"
-
-#: ../bin/celev.c:204
-msgid "Set Elevation"
-msgstr "Höhe festlegen"
-
-#: ../bin/celev.c:308 ../bin/celev.c:325
-#, c-format
-msgid "Elev = %s"
-msgstr "Höhe = %s"
-
-#: ../bin/celev.c:310 ../bin/celev.c:327
-#, c-format
-msgid "Dist = %s"
-msgstr "Entfernung = %s"
-
-#: ../bin/celev.c:316 ../bin/celev.c:333 ../bin/celev.c:374 ../bin/celev.c:381
-#: ../bin/celev.c:384
-#, c-format
-msgid "Undefined"
-msgstr "Undefiniert"
-
-#: ../bin/celev.c:406 ../bin/celev.c:472
-msgid "Elevation"
-msgstr "Höhe"
-
-#: ../bin/celev.c:406 ../bin/cmisc.c:438 ../bin/cprofile.c:1279
-#: ../bin/dcontmgm.c:300 ../bin/dcustmgm.c:358 ../bin/dlayer.c:1026
-#: ../bin/dpricels.c:154
-msgid "Done"
-msgstr "Fertig"
-
-#: ../bin/celev.c:434 ../bin/csplit.c:92 ../bin/csplit.c:155
-msgid "Split Track"
-msgstr "Gleis auftrennen"
-
-#: ../bin/cgroup.c:591
-msgid "Ungroup Object"
-msgstr "Gruppierung aufheben"
-
-#: ../bin/cgroup.c:603
-#, c-format
-msgid "%d objects ungrouped"
-msgstr "%d Gruppierungen aufgelöst"
-
-#: ../bin/cgroup.c:605
-msgid "No objects ungrouped"
-msgstr "Keine Gruppierungen aufgelöst"
-
-#: ../bin/cgroup.c:614
-msgid "Replace with new group?"
-msgstr "Durch neue Gruppe ersetzen?"
-
-#: ../bin/cgroup.c:619 ../bin/compound.c:520 ../bin/cstruct.c:70
-#: ../bin/ctodesgn.c:148 ../bin/ctodesgn.c:1772 ../bin/cturnout.c:76
-#: ../bin/dcar.c:1945 ../bin/dcar.c:4082 ../bin/dcar.c:4087 ../bin/dcmpnd.c:450
-#: ../bin/dcustmgm.c:50 ../../../../build/work/app/bin/bllnhlp.c:346
-#: ../../../../build/work/app/bin/bllnhlp.c:521
-msgid "Manufacturer"
-msgstr "Hersteller"
-
-#: ../bin/cgroup.c:620 ../bin/cmisc.c:438 ../bin/cstruct.c:70
-#: ../bin/ctodesgn.c:1773 ../bin/ctodesgn.c:1774 ../bin/ctrain.c:186
-#: ../bin/cturnout.c:76 ../bin/dcar.c:1961 ../bin/dcar.c:4083
-#: ../bin/dcar.c:4088 ../bin/dcmpnd.c:451 ../bin/dcustmgm.c:51
-#: ../bin/denum.c:182 ../bin/denum.c:183 ../bin/denum.c:186
-#: ../../../../build/work/app/bin/bllnhlp.c:347
-msgid "Description"
-msgstr "Beschreibung"
-
-#: ../bin/cgroup.c:621 ../bin/dcmpnd.c:452
-msgid "#"
-msgstr "Nr."
-
-#: ../bin/cgroup.c:622 ../bin/compound.c:524
-msgid "# Segments"
-msgstr "Anzahl Segmente"
-
-#: ../bin/cgroup.c:1088
-msgid "No endpts"
-msgstr "Keine Endpunkte"
-
-#: ../bin/cgroup.c:1174
-msgid "No paths"
-msgstr "Keine Wege"
-
-#: ../bin/cgroup.c:1508 ../bin/cgroup.c:1562
-msgid "Group Tracks"
-msgstr "Gleise gruppieren"
-
-#: ../bin/cgroup.c:1618
-msgid "Group Objects"
-msgstr "Objekte gruppieren"
-
-#: ../bin/chndldto.c:70
-msgid "Place frog and drag angle"
-msgstr "Herzstück festlegen und auf Winkel ziehen"
-
-#: ../bin/chndldto.c:87
-msgid "frog"
-msgstr "Herzstück"
-
-#: ../bin/chndldto.c:93
-msgid "Drag to set angle"
-msgstr "Durch Ziehen den Winkel festlegen"
-
-#: ../bin/chndldto.c:134
-#, c-format
-msgid "Angle = %0.2f Frog# = %0.2f"
-msgstr "Winkel = %0.2f Steigung = %0.2f"
-
-#: ../bin/chndldto.c:136
-msgid "Frog angle is too close to 0"
-msgstr "Herzstückwinkel ist zu nahe bei 0"
-
-#: ../bin/chndldto.c:139
-msgid "Select point position"
-msgstr "Position des Punktes auswählen"
-
-#: ../bin/chndldto.c:153 ../bin/chndldto.c:178
-msgid "points"
-msgstr "Punkte"
-
-#: ../bin/chndldto.c:275
-#, c-format
-msgid "Length = %0.2f Angle = %0.2f Frog# = %0.2f"
-msgstr "Länge = %0.2f Winkel = %0.2f Steigung=%0.2f"
-
-#: ../bin/chndldto.c:279
-msgid "Create Hand Laid Turnout"
-msgstr "Erstelle eine Selbstbauweiche"
-
-#: ../bin/chndldto.c:370
-msgid "HandLaidTurnout"
-msgstr "Selbstbauweiche"
-
-#: ../bin/cjoin.c:172
-#, c-format
-msgid "Curved Track: Radius=%s Length=%s"
-msgstr "Gleisbogen: Radius=%s Länge=%s"
-
-#: ../bin/cjoin.c:258
-#, c-format
-msgid "Curved Track: Radius=%s Length=%s Angle=%0.3f"
-msgstr "Gleisbogen: Radius=%s Länge=%s Winkel=%0.3f"
-
-#: ../bin/cjoin.c:354
-#, c-format
-msgid "Track (%d) is too short for transition-curve by %0.3f"
-msgstr "Gleis (%d) ist für den Übergangsbogen um %0.3f zu kurz"
-
-#: ../bin/cjoin.c:371
-#, c-format
-msgid "Connecting track is too short by %0.3f"
-msgstr "Verbindungsgleis ist um %0.3f zu kurz"
-
-#: ../bin/cjoin.c:415
-msgid "Click on an unselected End-Point"
-msgstr "Einen nicht ausgewählten Endpunkt anklicken"
-
-#: ../bin/cjoin.c:416
-msgid "Click on a selected End-Point"
-msgstr "Einen ausgewählten Endpunkt anclicken"
-
-#: ../bin/cjoin.c:423
-msgid "unselected"
-msgstr "nicht ausgewählt"
-
-#: ../bin/cjoin.c:423 ../bin/cprint.c:148
-msgid "selected"
-msgstr "ausgewählt"
-
-#: ../bin/cjoin.c:459
-msgid "Left click - join with track"
-msgstr "Linke Maustaste - Verbinden mit neuem Gleis"
-
-#: ../bin/cjoin.c:461
-msgid "Left click - join with track, Shift Left click - move to join"
-msgstr ""
-"Linke Maustaste - Verbinden mit neuem Gleis, Umschalten + linke Maustaste - "
-"Verschieben zum Verbinden"
-
-#: ../bin/cjoin.c:496 ../bin/cjoin.c:815 ../bin/cjoin.c:824
-msgid "Select 2nd track"
-msgstr "Zweites Gleis auswählen"
-
-#: ../bin/cjoin.c:623
-msgid "Beyond end of 2nd track"
-msgstr "Außerhalb des zweiten Gleises"
-
-#: ../bin/cjoin.c:658
-msgid "Beyond end of 1st track"
-msgstr "Außerhalb des ersten Gleises"
-
-#: ../bin/cjoin.c:680
-msgid "First Track Type not supported for non-Cornu Join"
-msgstr "Das erste Gleis kann nur über Cornu-Kurven verbunden werden"
-
-#: ../bin/cjoin.c:687
-msgid "First "
-msgstr "Erste "
-
-#: ../bin/cjoin.c:712
-msgid "Second Track Type not supported for non-Cornu Join"
-msgstr "Das zweite Gleis kann nur über Cornu-Kurven verbunden werden"
-
-#: ../bin/cjoin.c:719
-msgid "Second "
-msgstr "Zweite "
-
-#: ../bin/cjoin.c:733 ../bin/track.c:2018
-msgid "Connecting "
-msgstr "Verbinde "
-
-#: ../bin/cjoin.c:827
-msgid "Join Tracks"
-msgstr "Gleise zusammenfügen"
-
-#: ../bin/cjoin.c:895
-msgid "Join"
-msgstr "Verbinden"
-
-#: ../bin/cmisc.c:52
-msgid "Middle"
-msgstr "Mittel"
-
-#: ../bin/cmisc.c:229 ../bin/cmodify.c:208 ../bin/cnote.c:190
-#: ../bin/compound.c:614 ../bin/ctrain.c:217
-msgid "Change Track"
-msgstr "Gleis ändern"
-
-#: ../bin/cmisc.c:550
-msgid "Select track to describe"
-msgstr "Zu beschreibendes Gleis auswählen"
-
-#: ../bin/cmisc.c:607 ../bin/doption.c:213
-msgid "Properties"
-msgstr "Eigenschaften"
-
-#: ../bin/cmisc2.c:52
-msgid "Bridge"
-msgstr "Brücke"
-
-#: ../bin/cmodify.c:146
-msgid "Select track to modify"
-msgstr "Zu bearbeitendes Gleis auswählen"
-
-#: ../bin/cmodify.c:266
-msgid "Modify Track"
-msgstr "Gleis bearbeiten"
-
-#: ../bin/cmodify.c:304
-msgid "Drag to create new track segment"
-msgstr "Ziehen um einen neuen Gleisabschnitt zu erstellen"
-
-#: ../bin/cmodify.c:434
-#, c-format
-msgid "Curve Track: Radius=%s Length=%s Angle=%0.3f"
-msgstr "Gleisbogen: Radius=%s Länge=%s Winkel=%0.3f"
-
-#: ../bin/cmodify.c:451
-msgid "Extend Track"
-msgstr "Gleis verlängern"
-
-#: ../bin/cmodify.c:527
-msgid "Modify"
-msgstr "Verändern"
-
-#: ../bin/cnote.c:100 ../bin/cnote.c:233 ../bin/cnote.c:465
-msgid "Note"
-msgstr "Notiz"
-
-#: ../bin/cnote.c:106
-msgid "Replace this text with your layout notes"
-msgstr "Ersetzen Sie diesen Text durch Ihre Notizen"
-
-#: ../bin/cnote.c:217 ../bin/cnote.c:218 ../bin/cnote.c:219
-msgid "Note: "
-msgstr "Notiz: "
-
-#: ../bin/cnote.c:416 ../../../../build/work/app/bin/bllnhlp.c:94
-msgid "Place a note on the layout"
-msgstr "Eine Notiz auf den Gleisplan setzen"
-
-#: ../bin/cnote.c:432
-msgid "New Note"
-msgstr "Neue Notiz"
-
-#: ../bin/cnote.c:438
-msgid "Replace this text with your note"
-msgstr "Ersetzen Sie diesen Text durch Ihre Notizen"
-
-#: ../bin/compound.c:499 ../bin/compound.c:504 ../bin/compound.c:509
-#: ../bin/compound.c:514 ../bin/tbezier.c:239 ../bin/tbezier.c:246
-#: ../bin/tcornu.c:289 ../bin/tcornu.c:294
-msgid "Center X,Y"
-msgstr "Mittelpunkt: X,Y"
-
-#: ../bin/compound.c:501 ../bin/tbezier.c:240 ../bin/tcornu.c:290
-msgid "Z1"
-msgstr "Z1"
-
-#: ../bin/compound.c:506 ../bin/tbezier.c:247 ../bin/tcornu.c:295
-msgid "Z2"
-msgstr "Z2"
-
-#: ../bin/compound.c:507
-msgid "End Pt 3: X,Y"
-msgstr "Endpunkt 3: X,Y"
-
-#: ../bin/compound.c:511
-msgid "Z3"
-msgstr "Z3"
-
-#: ../bin/compound.c:512
-msgid "End Pt 4: X,Y"
-msgstr "Endpunkt 4: X,Y"
-
-#: ../bin/compound.c:516
-msgid "Z4"
-msgstr "Z4"
-
-#: ../bin/compound.c:522 ../bin/cstruct.c:70 ../bin/cturnout.c:76
-#: ../bin/dcar.c:4082 ../bin/dcar.c:4087 ../bin/dcustmgm.c:51
-#: ../bin/doption.c:114 ../bin/doption.c:115
-msgid "Part No"
-msgstr "Teilenr"
-
-#: ../bin/compound.c:523
-msgid "# End Pts"
-msgstr "Anzahl der Endpunkte"
-
-#: ../bin/compound.c:758 ../bin/cstruct.c:772 ../bin/cstruct.c:917
-msgid "Structure"
-msgstr "Gebäude"
-
-#: ../bin/compound.c:760 ../bin/cswitchmotor.c:221 ../bin/cturnout.c:894
-#: ../bin/cturnout.c:2406 ../bin/cturnout.c:2576
-msgid "Turnout"
-msgstr "Weiche"
-
-#: ../bin/compound.c:760
-msgid "Sectional Track"
-msgstr "Festgleise"
-
-#: ../bin/compound.c:764
-#, c-format
-msgid "%s (%d) Layer= %d %s"
-msgstr "%s (%d): Ebene=%d %s"
-
-#: ../bin/cparalle.c:44 ../bin/cparalle.c:74 ../bin/cparalle.c:86
-#: ../bin/ctodesgn.c:390 ../bin/ctodesgn.c:410 ../bin/ctodesgn.c:430
-#: ../bin/tcurve.c:362
-msgid "Separation"
-msgstr "Zwischenraum"
-
-#: ../bin/cparalle.c:96
-msgid " Track doesn't support parallel"
-msgstr " Zu diesem Gleis kann keine Parallele erstellt werden"
-
-#: ../bin/cparalle.c:145
-msgid "Create Parallel Track"
-msgstr "Erzeuge paralleles Gleis"
-
-#: ../bin/cparalle.c:189 ../../../../build/work/app/i18n/custmsg.h:640
-msgid "Parallel"
-msgstr "Parallel"
-
-#: ../bin/cprint.c:102
-msgid "Portrait"
-msgstr "Hochformat"
-
-#: ../bin/cprint.c:102
-msgid "Landscape"
-msgstr "Querformat"
-
-#: ../bin/cprint.c:103 ../bin/cselect.c:2063 ../bin/cselect.c:2067
-#: ../bin/cswitchmotor.c:88 ../bin/cswitchmotor.c:107 ../bin/cswitchmotor.c:218
-#: ../bin/dbench.c:78 ../bin/dease.c:65 ../bin/doption.c:108
-#: ../bin/doption.c:110 ../bin/doption.c:208 ../bin/macro.c:1168
-msgid "Normal"
-msgstr "Normal"
-
-#: ../bin/cprint.c:103 ../bin/cswitchmotor.c:89 ../bin/cswitchmotor.c:108
-#: ../bin/cswitchmotor.c:219 ../bin/ctrain.c:881 ../bin/ctrain.c:1192
-msgid "Reverse"
-msgstr "Rückwärts"
-
-#: ../bin/cprint.c:104
-msgid "Engineering Data"
-msgstr "Zeichnungsinformationen"
-
-#: ../bin/cprint.c:105
-msgid "Print Registration Marks"
-msgstr "Drucke Positionierungshilfen"
-
-#: ../bin/cprint.c:106
-msgid "Ignore Page Margins"
-msgstr "Übergehe Seitenränder"
-
-#: ../bin/cprint.c:107
-msgid "Print Snap Grid"
-msgstr "Fangraster drucken"
-
-#: ../bin/cprint.c:108
-msgid "Print Rulers"
-msgstr "Maßlinien drucken"
-
-#: ../bin/cprint.c:109 ../../../../build/work/app/bin/bllnhlp.c:425
-msgid "Print Roadbed Outline"
-msgstr "Gleisbettung drucken"
-
-#: ../bin/cprint.c:110
-msgid "Print Centerline below Scale 1:1"
-msgstr "Mittellinie bei Maßstab<1:1 ausgeben"
-
-#: ../bin/cprint.c:118
-msgid "Print Scale"
-msgstr "Druckmaßstab"
-
-#: ../bin/cprint.c:119
-msgid "Page Width"
-msgstr "Seitenbreite"
-
-#: ../bin/cprint.c:120
-msgid "Max"
-msgstr "Max."
-
-#: ../bin/cprint.c:121
-msgid "Height"
-msgstr "Seitenhöhe"
-
-#: ../bin/cprint.c:122
-msgid "Snap Shot"
-msgstr "Schnappschuss"
-
-#: ../bin/cprint.c:123
-msgid "Page Format"
-msgstr "Seitenformat"
-
-#: ../bin/cprint.c:124
-msgid "Print Order"
-msgstr "Druckreihenfolge"
-
-#: ../bin/cprint.c:139 ../bin/ctrain.c:185 ../bin/dcar.c:1984
-msgid "Width"
-msgstr "Breite"
-
-#: ../bin/cprint.c:140 ../bin/cturntbl.c:245
-msgid "Origin: X"
-msgstr "Ausgangspunkt: X"
-
-#: ../bin/cprint.c:141 ../bin/csnap.c:539
-msgid "Y"
-msgstr "Y"
-
-#: ../bin/cprint.c:142 ../bin/dcar.c:1965
-msgid "Reset"
-msgstr "Zurücksetzen"
-
-#: ../bin/cprint.c:144
-msgid "Setup"
-msgstr "Einstellungen"
-
-#: ../bin/cprint.c:145 ../bin/cprofile.c:569 ../bin/misc.c:680
-msgid "Clear"
-msgstr "Löschen"
-
-#: ../bin/cprint.c:147 ../bin/cprint.c:588
-msgid "0 pages"
-msgstr "0 Seiten"
-
-#: ../bin/cprint.c:211 ../bin/cprint.c:260
-#, c-format
-msgid "%d pages"
-msgstr "%d Seiten"
-
-#: ../bin/cprint.c:380
-#, c-format
-msgid "PrintScale 1:%ld Room %s x %s Model Scale %s File %s"
-msgstr "Druckmaßstab 1:%ld Raum %s x %s Modellmaßstab %s Datei %s"
-
-#: ../bin/cprint.c:669
-msgid "1 page"
-msgstr "1 Seite"
-
-#: ../bin/cprint.c:1039 ../bin/cprofile.c:570 ../bin/ctodesgn.c:1720
-#: ../bin/denum.c:55
-msgid "Print"
-msgstr "Drucken"
-
-#: ../bin/cprint.c:1061
-msgid "Select pages to print, or drag to move print grid"
-msgstr ""
-"Zu druckende Seiten auswählen oder ziehen um das Druckraster zu verschieben"
-
-#: ../bin/cprint.c:1160
-msgid "Print..."
-msgstr "Drucken..."
-
-#: ../bin/cprofile.c:477 ../bin/cprofile.c:1279 ../bin/cprofile.c:1379
-#: ../../../../build/work/app/bin/bllnhlp.c:105
-#: ../../../../build/work/app/i18n/custmsg.h:636
-msgid "Profile"
-msgstr "Höhenprofil"
-
-#: ../bin/cprofile.c:493
-#, c-format
-msgid "%s Profile: %s"
-msgstr "%s Höhenprofil: %s"
-
-#: ../bin/cprofile.c:641 ../bin/cprofile.c:651
-#, c-format
-msgid "Elev = %0.1f"
-msgstr "Höhe = %0.1f"
-
-#: ../bin/cprofile.c:653
-#, c-format
-msgid "Elev=%0.2f %0.1f%%"
-msgstr "Höhe=%0.2f %0.1f%%"
-
-#: ../bin/cprofile.c:657
-#, c-format
-msgid "%0.1f%% Elev = %0.2f"
-msgstr "%0.1f%% Höhe = %0.2f"
-
-#: ../bin/cprofile.c:661
-#, c-format
-msgid "%0.1f%% Elev = %0.2f %0.1f%%"
-msgstr "%0.1f%% Höhe = %0.2f %0.1f%%"
-
-#: ../bin/cprofile.c:672 ../bin/cprofile.c:1226
-msgid "Profile Command"
-msgstr "Höhenprofil bearbeiten"
-
-#: ../bin/cprofile.c:680 ../bin/cprofile.c:1284
-msgid "Drag to change Elevation"
-msgstr "Ziehen um die Höhe zu ändern"
-
-#: ../bin/cprofile.c:747
-msgid "Select a Defined Elevation to start Profile"
-msgstr "Eine festgelegte Höhe auswählen, um das Höhenprofil zu beginnen"
-
-#: ../bin/cprofile.c:749
-msgid "Select a Defined Elevation to extend Profile"
-msgstr "Eine festgelegte Höhe auswählen, um das Höhenprofil zu erweitern"
-
-#: ../bin/cprofile.c:1296
-msgid "Select a Defined Elevation to start profile"
-msgstr "Eine festgelegte Höhe auswählen, um das Höhenprofil zu beginnen"
-
-#: ../bin/cprofile.c:1381
-msgid "Define"
-msgstr "Festlegen"
-
-#: ../bin/cpull.c:436 ../bin/cpull.c:589
-#, c-format
-msgid "%d tracks moved"
-msgstr "%d Gleise verschoben"
-
-#: ../bin/cpull.c:479
-msgid "Pull Tracks"
-msgstr "Gleise ziehen"
-
-#: ../bin/cpull.c:553
-msgid "Tighten Tracks"
-msgstr "Gleise zusammendrücken"
-
-#: ../bin/cpull.c:613
-msgid "Select first end-point to connect"
-msgstr "Ersten Endpunkt für Verbindung auswählen"
-
-#: ../bin/cpull.c:615
-msgid ""
-"Select first end-point to connect, or Right-Click for connecting selected "
-"tracks"
-msgstr ""
-"Ersten Endpunkt zum Verbinden auswählen oder mit Rechts-Klick die "
-"ausgewählten Gleise verbinden"
-
-#: ../bin/cpull.c:630
-msgid "Select second end-point to connect"
-msgstr "Zweiten Endpunkt für Verbindung auswählen"
-
-#: ../bin/cpull.c:669
-msgid "Connect Multiple Tracks - Select multiple tracks to join first"
-msgstr ""
-"Verbinde mehrere Gleise - zuerst mehrere Gleise für die Verbindung auswählen"
-
-#: ../bin/cpull.c:672
-msgid "Try to Connect all Selected Tracks?"
-msgstr "Sollen alle ausgewählten Gleise verbunden werden?"
-
-#: ../bin/cpull.c:675
-msgid "ReConnect"
-msgstr "Wiederverbinden"
-
-#: ../bin/cpull.c:711
-#, c-format
-msgid ""
-"Round 1 %d and Round 2 %d tracks connected, %d close pairs of end Points "
-"were not connected"
-msgstr ""
-"In Durchgang 1 %d und in Durchgang 2 %d Gleise verbunden, %d nahe "
-"beieinander liegene Punkte wurden nicht verbunden"
-
-#: ../bin/cpull.c:737
-msgid "Connect Two Tracks"
-msgstr "Zwei Gleise zusammenfügen"
-
-#: ../bin/cruler.c:151 ../../../../build/work/app/i18n/custmsg.h:647
-msgid "Ruler"
-msgstr "Lineal"
-
-#: ../bin/cselect.c:319
-msgid "Change Track Width"
-msgstr "Gleisbreite ändern"
-
-#: ../bin/cselect.c:340
-msgid "Delete Tracks"
-msgstr "Gleise löschen"
-
-#: ../bin/cselect.c:392
-msgid "Hide Tracks (Tunnel)"
-msgstr "Gleise verbergen (Tunnel)"
-
-#: ../bin/cselect.c:431 ../bin/misc.c:2229
-msgid "Move To Current Layer"
-msgstr "Auf aktuelle Ebene verschieben"
-
-#: ../bin/cselect.c:470 ../bin/misc.c:2347
-msgid "Clear Elevations"
-msgstr "Höhen löschen"
-
-#: ../bin/cselect.c:514
-msgid "Add Elevations"
-msgstr "Höhen hinzufügen"
-
-#: ../bin/cselect.c:529
-msgid "Refresh Compound"
-msgstr "Zusammenstellung aktualisieren"
-
-#: ../bin/cselect.c:566 ../bin/dcar.c:4082 ../bin/dcar.c:4087
-#: ../bin/dcustmgm.c:51 ../bin/layout.c:239
-msgid "Scale"
-msgstr "Maßstab"
-
-#: ../bin/cselect.c:566 ../bin/cselect.c:591
-msgid "Ratio"
-msgstr "Verhältnis"
-
-#: ../bin/cselect.c:575
-msgid "Do not resize track"
-msgstr "Gleismaße nicht ändern"
-
-#: ../bin/cselect.c:579
-msgid "Rescale by:"
-msgstr "Skalieren um:"
-
-#: ../bin/cselect.c:581
-msgid "From:"
-msgstr "Von:"
-
-#: ../bin/cselect.c:585
-msgid "To: "
-msgstr "Nach:"
-
-#: ../bin/cselect.c:650
-msgid "Rescale Tracks"
-msgstr "Gleise skalieren"
-
-#: ../bin/cselect.c:781 ../../../../build/work/app/i18n/custmsg.h:643
-msgid "Rescale"
-msgstr "Maßstab ändern"
-
-#: ../bin/cselect.c:808
-msgid "Draw moving track normally"
-msgstr "Bewegte Gleise normal zeichnen"
-
-#: ../bin/cselect.c:809
-msgid "Draw moving track simply"
-msgstr "Bewegte Gleise vereinfacht zeichnen"
-
-#: ../bin/cselect.c:810
-msgid "Draw moving track as end-points"
-msgstr "Bewegte Gleise als Endpunkte zeichnen"
-
-#: ../bin/cselect.c:1092
-msgid "Cornu too tight - it was deleted"
-msgstr "Klothoide ist zu eng und wurde gelöscht"
-
-#: ../bin/cselect.c:1112
-msgid "Cornu selected too tight after move - it was left alone"
-msgstr ""
-"Die ausgewählte Klothoide ist nach dem Verschieben zu eng und wurde daher "
-"nicht verändert"
-
-#: ../bin/cselect.c:1152
-msgid "Move To Join"
-msgstr "Verbinde durch Verschieben"
-
-#: ../bin/cselect.c:1198
-msgid "Drag to move selected tracks - Shift+Ctrl+Arrow micro-steps the move"
-msgstr ""
-"Ziehen um die ausgewählten Gleise zu verschieben - mit Umschalt+Str"
-"+Pfeiltasten umd feine Stufen verschieben"
-
-#: ../bin/cselect.c:1205 ../bin/cselect.c:1279 ../bin/cselect.c:1528
-msgid "Move Tracks"
-msgstr "Gleise verschieben"
-
-#: ../bin/cselect.c:1306
-msgid "Click on selected object to align"
-msgstr "Ausgewählte Objekte spiegeln"
-
-#: ../bin/cselect.c:1334
-msgid "Drag to rotate selected tracks, Shift+RightClick for QuickRotate Menu"
-msgstr ""
-"Ziehen um die ausgewählten Gleise zu rotieren, Umschalt-Taste und "
-"Rechtsklich das Schnellauswahlmenu öffnen"
-
-#: ../bin/cselect.c:1343 ../bin/cselect.c:1543
-msgid "Rotate Tracks"
-msgstr "Gleise drehen"
-
-#: ../bin/cselect.c:1356
-msgid "Center of Rotation snapped to Turntable center"
-msgstr ""
-"Der Mittelpunkt der Drehscheibe wird als Mittelpunkt der Rotation genutt"
-
-#: ../bin/cselect.c:1395 ../bin/cselect.c:1427
-#, c-format
-msgid "Angle %0.3f"
-msgstr "Winkel %0.3f"
-
-#: ../bin/cselect.c:1458
-#, c-format
-msgid " Angle %0.3f #%ld"
-msgstr " Winkel %0.3f #%ld"
-
-#: ../bin/cselect.c:1460
-#, c-format
-msgid " Angle %0.3f"
-msgstr " Winkel %0.3f"
-
-#: ../bin/cselect.c:1472
-msgid "Click on the 2nd Unselected object"
-msgstr "Klicken Sie auf das zweite, nicht ausgewählte Objekt"
-
-#: ../bin/cselect.c:1557
-msgid "Toggle Label"
-msgstr "Beschriftung umschalten"
-
-#: ../bin/cselect.c:1586
-msgid "Select and drag a description"
-msgstr "Beschreibung auswählen und verschieben"
-
-#: ../bin/cselect.c:1642
-msgid "Move Label"
-msgstr "Beschreibung verschieben"
-
-#: ../bin/cselect.c:1672
-msgid "Show Description"
-msgstr "Beschreibung anzeigen"
-
-#: ../bin/cselect.c:1754
-msgid "Drag to mark mirror line"
-msgstr "Ziehen um die Spiegelachse zu erstellen"
-
-#: ../bin/cselect.c:1770
-#, c-format
-msgid "Angle %0.2f"
-msgstr "Winkel %0.2f"
-
-#: ../bin/cselect.c:1776
-msgid "Flip Tracks"
-msgstr "Gleise spiegeln"
-
-#: ../bin/cselect.c:1940
-msgid "Select tracks"
-msgstr "Gleise auswählen"
-
-#: ../bin/cselect.c:2050 ../bin/dcar.c:1548 ../bin/doption.c:213
-#: ../../../../build/work/app/i18n/custmsg.h:609
-msgid "Select"
-msgstr "Auswählen"
-
-#: ../bin/cselect.c:2064 ../bin/cselect.c:2068 ../bin/doption.c:209
-msgid "Simple"
-msgstr "Einfach"
-
-#: ../bin/cselect.c:2065 ../bin/cselect.c:2069
-msgid "End Points"
-msgstr "Endpunkte"
-
-#: ../bin/cselect.c:2074
-msgid "Align"
-msgstr "Ausrichten"
-
-#: ../bin/cselect.c:2095 ../bin/misc.c:2159
-msgid "Tunnel"
-msgstr "Tunnel"
-
-#: ../bin/cselect.c:2104
-msgid "Move Description"
-msgstr "Beschreibungen verschieben"
-
-#: ../bin/cselect.c:2111 ../bin/misc.c:1878 ../bin/misc.c:2157
-msgid "Move"
-msgstr "Verschieben"
-
-#: ../bin/cselect.c:2113 ../bin/misc.c:1869 ../bin/misc.c:2158
-#: ../../../../build/work/app/i18n/custmsg.h:654
-msgid "Rotate"
-msgstr "Drehen"
-
-#: ../bin/cselect.c:2115 ../bin/dcar.c:1967
-#: ../../../../build/work/app/i18n/custmsg.h:655
-msgid "Flip"
-msgstr "Spiegeln"
-
-#: ../bin/csensor.c:213
-msgid "Change Sensor"
-msgstr "Sensor ändern"
-
-#: ../bin/csensor.c:259 ../bin/csensor.c:572
-msgid "Sensor"
-msgstr "Sensor"
-
-#: ../bin/csensor.c:374 ../bin/csignal.c:494
-msgid "Orgin X"
-msgstr "Ausgangspunkt: X"
-
-#: ../bin/csensor.c:390
-msgid "Create Sensor"
-msgstr "Sensor erstellen"
-
-#: ../bin/csensor.c:393
-msgid "Modify Sensor"
-msgstr "Sensor ändern"
-
-#: ../bin/csensor.c:426
-msgid "Edit sensor"
-msgstr "Sensor bearbeiten"
-
-#: ../bin/csensor.c:462
-msgid "Place sensor"
-msgstr "Sensor setzen"
-
-#: ../bin/csignal.c:238
-msgid "Number Of Heads"
-msgstr "Anzahl der Köpfe"
-
-#: ../bin/csignal.c:277
-msgid "Change Signal"
-msgstr "Signal ändern"
-
-#: ../bin/csignal.c:311
-#, c-format
-msgid "(%d [%s]): Layer=%d, %d heads at %0.3f,%0.3f A%0.3f"
-msgstr "(%d [%s]): Ebene=%d, %d Köpfe bei %0.3f,%0.3f A%0.3f"
-
-#: ../bin/csignal.c:322 ../bin/csignal.c:893
-msgid "Signal"
-msgstr "Signal"
-
-#: ../bin/csignal.c:500
-msgid "Number of Heads"
-msgstr "Anzahl der Köpfe"
-
-#: ../bin/csignal.c:505
-msgid "Edit Aspect"
-msgstr "Signalbild bearbeiten"
-
-#: ../bin/csignal.c:507
-msgid "Add Aspect"
-msgstr "Signalanzeige"
-
-#: ../bin/csignal.c:509
-msgid "Delete Aspect"
-msgstr "Signalbild löschen"
-
-#: ../bin/csignal.c:522
-msgid "Aspect Index"
-msgstr "Nummer der Signalanzeige"
-
-#: ../bin/csignal.c:537
-msgid "Create Signal"
-msgstr "Signal erstellen"
-
-#: ../bin/csignal.c:541
-msgid "Modify Signal"
-msgstr "Signal ändern"
-
-#: ../bin/csignal.c:648
-msgid "Edit aspect"
-msgstr "Signalbild bearbeiten"
-
-#: ../bin/csignal.c:695
-#, c-format
-msgid "Are you sure you want to delete the %d aspect(s)"
-msgstr "Sind Sie sicher, dass Sie %d Signalbilder löschen wollen?"
-
-#: ../bin/csignal.c:716
-msgid "Edit signal"
-msgstr "Signal bearbeiten"
-
-#: ../bin/csignal.c:778
-msgid "Place base of signal"
-msgstr "Basis des Signals festlegen"
-
-#: ../bin/csignal.c:783
-msgid "Drag to orient signal"
-msgstr "Durch Ziehen das Signal ausrichten"
-
-#: ../bin/csnap.c:520
-msgid "Horz"
-msgstr "Horiz."
-
-#: ../bin/csnap.c:522
-msgid "Spacing"
-msgstr "Abstand"
-
-#: ../bin/csnap.c:524
-msgid "Divisions"
-msgstr "Zwischenmarkierungen"
-
-#: ../bin/csnap.c:527
-msgid "Enable"
-msgstr "Einschalten"
-
-#: ../bin/csnap.c:528
-msgid "Vert"
-msgstr "Vert."
-
-#: ../bin/csnap.c:537 ../bin/dease.c:74
-msgid "X"
-msgstr "X"
-
-#: ../bin/csnap.c:541
-msgid "A"
-msgstr "A"
-
-#: ../bin/csnap.c:544
-msgid "Show"
-msgstr "Zeige"
-
-#: ../bin/csnap.c:714 ../bin/doption.c:488
-msgid "Snap Grid"
-msgstr "Fangraster"
-
-#: ../bin/csnap.c:799
-msgid "Change Grid..."
-msgstr "Raster anpassen..."
-
-#: ../bin/csplit.c:41
-msgid "Set Block Gaps"
-msgstr "Setze Trennstellen"
-
-#: ../bin/csplit.c:68
-msgid "Select track to split"
-msgstr "Zu trennendes Gleis auswählen"
-
-#: ../bin/csplit.c:84
-msgid "Can't Split that Track"
-msgstr "Dieses Gleis kann nicht getrennt werden"
-
-#: ../bin/csplit.c:108 ../bin/dbench.c:69 ../bin/dbench.c:80
-msgid "Left"
-msgstr "Links"
-
-#: ../bin/csplit.c:109 ../bin/dbench.c:70 ../bin/dbench.c:79
-msgid "Right"
-msgstr "Rechts"
-
-#: ../bin/csplit.c:110 ../bin/csplit.c:115
-msgid "Both"
-msgstr "Beides"
-
-#: ../bin/csplit.c:113
-msgid "Top"
-msgstr "Oben"
-
-#: ../bin/csplit.c:114
-msgid "Bottom"
-msgstr "Unten"
-
-#: ../bin/cstraigh.c:58
-msgid ""
-"Place 1st end point of straight track + Shift -> snap to unconnected endpoint"
-msgstr ""
-"Ersten Endpunkt der Gleisgerade setzen mit Umschalt-Taste an unverbundenen "
-"Endpunkt verbinden"
-
-#: ../bin/cstraigh.c:89
-msgid "Drag to place 2nd end point"
-msgstr "Ziehen um den zweiten Endpunkt zu setzen"
-
-#: ../bin/cstraigh.c:110
-#, c-format
-msgid "Straight Track Length=%s Angle=%0.3f"
-msgstr "Gleisgerade: Länge=%s Winkel=%0.3f"
-
-#: ../bin/cstraigh.c:158 ../bin/tstraigh.c:267
-msgid "Straight Track"
-msgstr "Gleisgerade"
-
-#: ../bin/cstruct.c:72 ../bin/cturnout.c:78 ../bin/doption.c:108
-#: ../bin/doption.c:216
-msgid "Hide"
-msgstr "Verstecken"
-
-#: ../bin/cstruct.c:328 ../bin/cstruct.c:355
-msgid "Pier Number"
-msgstr "Gleisanschluß"
-
-#: ../bin/cstruct.c:440
-#, c-format
-msgid "Scale %d:1"
-msgstr "Maßstab 1:%d"
-
-#: ../bin/cstruct.c:442
-#, c-format
-msgid "Width %s"
-msgstr "Breite %s"
-
-#: ../bin/cstruct.c:444
-#, c-format
-msgid "Height %s"
-msgstr "Höhe %s"
-
-#: ../bin/cstruct.c:542
-msgid "Place Structure"
-msgstr "Gebäude plazieren"
-
-#: ../bin/cstruct.c:652
-msgid "Drag to place"
-msgstr "Zur Position ziehen"
-
-#: ../bin/cstruct.c:681
-msgid "Drag to rotate"
-msgstr "Ziehen zum rotieren"
-
-#: ../bin/cstruct.c:702
-#, c-format
-msgid "Angle = %0.3f"
-msgstr "Winkel = %0.3f"
-
-#: ../bin/cstruct.c:789
-msgid "Select Structure and then drag to place"
-msgstr "Gebäued auswählen und in die Piosition ziehen"
-
-#: ../bin/cstruct.c:807 ../bin/cstruct.c:894
-msgid ""
-"Left drag to move, right drag to rotate, or press Return or click Ok to "
-"finalize"
-msgstr ""
-"Ziehen mit linker Maustaste zum Verschieben, mit rechter zum Drehen, oder "
-"Eingabetaste oder OK zum Abschliessen"
-
-#: ../bin/cstruct.c:887 ../bin/cturnout.c:2546
-#, c-format
-msgid "Place %s and draw into position"
-msgstr "%s setzen und in Position ziehen"
-
-#: ../bin/cswitchmotor.c:90 ../bin/cswitchmotor.c:109 ../bin/cswitchmotor.c:220
-msgid "Point Sense"
-msgstr "Richtung der Weichenzungen"
-
-#: ../bin/cswitchmotor.c:110
-msgid "Turnout Number"
-msgstr "Weichennummer"
-
-#: ../bin/cswitchmotor.c:285
-msgid "Change Switch Motor"
-msgstr "Weichenantrieb ändern"
-
-#: ../bin/cswitchmotor.c:346
-msgid "Switch motor"
-msgstr "Weichenantrieb"
-
-#: ../bin/cswitchmotor.c:425
-#, c-format
-msgid "ResolveSwitchmotor: Turnout T%d: T%d doesn't exist"
-msgstr "ResolveSwitchmotor: Weiche T%d: T%d existiert nicht"
-
-#: ../bin/cswitchmotor.c:492 ../bin/cswitchmotor.c:655
-msgid "Switch motor must have a name!"
-msgstr "Der Weichenantrieb benötigt einen Namen!"
-
-#: ../bin/cswitchmotor.c:496
-msgid "Create Switch Motor"
-msgstr "Weichenantrieb erstellen"
-
-#: ../bin/cswitchmotor.c:521
-msgid "Create switch motor"
-msgstr "Weichenantrieb erstellen"
-
-#: ../bin/cswitchmotor.c:535 ../bin/cswitchmotor.c:566
-#: ../bin/cswitchmotor.c:598
-msgid "Select a turnout"
-msgstr "Wählen Sie eine Weiche aus"
-
-#: ../bin/cswitchmotor.c:542
-msgid "Not a turnout!"
-msgstr "Keine Weiche!"
-
-#: ../bin/cswitchmotor.c:575 ../bin/cswitchmotor.c:606
-msgid "Not a switch motor!"
-msgstr "Kein Weichenantrieb!"
-
-#: ../bin/cswitchmotor.c:611
-#, c-format
-msgid "Really delete switch motor %s?"
-msgstr "Soll der Weichenantrieb %s wirklich gelöscht werden?"
-
-#: ../bin/cswitchmotor.c:612
-msgid "Delete Switch Motor"
-msgstr "Weichenantrieb löschen"
-
-#: ../bin/cswitchmotor.c:659
-msgid "Modify Switch Motor"
-msgstr "Weichenantrieb ändern"
-
-#: ../bin/cswitchmotor.c:685
-msgid "Edit switch motor"
-msgstr "Weichenantrieb bearbeiten"
-
-#: ../bin/cswitchmotor.c:691
-#, c-format
-msgid "Edit switch motor %d"
-msgstr "Weichenantrieb %d bearbeiten"
-
-#: ../bin/cswitchmotor.c:799
-msgid "Switch Motor"
-msgstr "Weichenantrieb"
-
-#: ../bin/cswitchmotor.c:811
-#, c-format
-msgid "Deleting Switch Motor %s"
-msgstr "Weichenantrieb %s löschen"
-
-#: ../bin/ctext.c:211 ../bin/ctext.c:257
-msgid "Create Text"
-msgstr "Erstelle Text"
-
-#: ../bin/ctext.c:289
-msgid "Fonts..."
-msgstr "Schriftarten..."
-
-#: ../bin/ctodesgn.c:114
-msgid "Frog #"
-msgstr "Herzstück Steigung"
-
-#: ../bin/ctodesgn.c:114
-msgid "Degrees"
-msgstr "Grad"
-
-#: ../bin/ctodesgn.c:141 ../bin/ctodesgn.c:142 ../bin/ctodesgn.c:190
-#: ../bin/ctodesgn.c:213 ../bin/ctodesgn.c:215 ../bin/ctodesgn.c:251
-#: ../bin/ctodesgn.c:252 ../bin/ctodesgn.c:288 ../bin/ctodesgn.c:290
-#: ../bin/ctodesgn.c:505
-msgid "Offset"
-msgstr "Abstand"
-
-#: ../bin/ctodesgn.c:150 ../bin/ctodesgn.c:1767 ../bin/ctodesgn.c:1768
-msgid "Left Description"
-msgstr "Beschreibung, links"
-
-#: ../bin/ctodesgn.c:151 ../bin/ctodesgn.c:154
-msgid " #"
-msgstr " Nr."
-
-#: ../bin/ctodesgn.c:153 ../bin/ctodesgn.c:1766
-msgid "Right Description"
-msgstr "Beschreibung, rechts"
-
-#: ../bin/ctodesgn.c:155
-msgid "Roadbed Width"
-msgstr "Breite des Gleisbetts"
-
-#: ../bin/ctodesgn.c:159 ../bin/denum.c:56
-msgid "Print Setup"
-msgstr "Druckeinstellungen"
-
-#: ../bin/ctodesgn.c:188
-msgid "Diverging Length"
-msgstr "Länge des Abzweigs"
-
-#: ../bin/ctodesgn.c:189
-msgid "Diverging Angle"
-msgstr "Winkel des Abzweigs"
-
-#: ../bin/ctodesgn.c:190
-msgid "Diverging Offset"
-msgstr "Abstand des Abzweigs"
-
-#: ../bin/ctodesgn.c:191
-msgid "Overall Length"
-msgstr "Gesamtlänge"
-
-#: ../bin/ctodesgn.c:201
-msgid "Regular Turnout"
-msgstr "Normale Weiche"
-
-#: ../bin/ctodesgn.c:211
-msgid "Inner Length"
-msgstr "Innenlänge"
-
-#: ../bin/ctodesgn.c:212
-msgid "Inner Angle"
-msgstr "Innenwinkel"
-
-#: ../bin/ctodesgn.c:213
-msgid "Inner Offset"
-msgstr "Innenabstand"
-
-#: ../bin/ctodesgn.c:214
-msgid "Outer Angle"
-msgstr "Außenwinkel"
-
-#: ../bin/ctodesgn.c:215
-msgid "Outer Offset"
-msgstr "Außenabstand"
-
-#: ../bin/ctodesgn.c:216
-msgid "Outer Length"
-msgstr "Außenlänge"
-
-#: ../bin/ctodesgn.c:238
-msgid "Curved Turnout"
-msgstr "Bogenweiche"
-
-#: ../bin/ctodesgn.c:249 ../bin/ctodesgn.c:286
-msgid "Left Length"
-msgstr "Linke Länge"
-
-#: ../bin/ctodesgn.c:250 ../bin/ctodesgn.c:287
-msgid "Left Angle"
-msgstr "Linker Winkel"
-
-#: ../bin/ctodesgn.c:251 ../bin/ctodesgn.c:288
-msgid "Left Offset"
-msgstr "Linker Abstand"
-
-#: ../bin/ctodesgn.c:252 ../bin/ctodesgn.c:290
-msgid "Right Offset"
-msgstr "Rechter Abstand"
-
-#: ../bin/ctodesgn.c:253 ../bin/ctodesgn.c:291
-msgid "Right Angle"
-msgstr "Rechter Winkel"
-
-#: ../bin/ctodesgn.c:254 ../bin/ctodesgn.c:292
-msgid "Right Length"
-msgstr "Rechte Länge"
-
-#: ../bin/ctodesgn.c:276
-msgid "Wye Turnout"
-msgstr "Außenbogenweiche"
-
-#: ../bin/ctodesgn.c:317
-msgid "3-way Turnout"
-msgstr "Dreiwegweiche"
-
-#: ../bin/ctodesgn.c:337
-msgid "Crossing"
-msgstr "Kreuzung"
-
-#: ../bin/ctodesgn.c:358
-msgid "Single Slipswitch"
-msgstr "Einfache Kreuzungsweiche"
-
-#: ../bin/ctodesgn.c:379
-msgid "Double Slipswitch"
-msgstr "Doppelte Kreuzungsweiche"
-
-#: ../bin/ctodesgn.c:399
-msgid "Right Crossover"
-msgstr "Rechter Gleiswechsel"
-
-#: ../bin/ctodesgn.c:419
-msgid "Left Crossover"
-msgstr "Linker Gleiswechsel"
-
-#: ../bin/ctodesgn.c:439
-msgid "Double Crossover"
-msgstr "Doppelter Gleiswechsel"
-
-#: ../bin/ctodesgn.c:457
-msgid "Straight Section"
-msgstr "Gerader Abschnitt"
-
-#: ../bin/ctodesgn.c:468
-msgid "Angle (Degrees)"
-msgstr "Winkel (Grad)"
-
-#: ../bin/ctodesgn.c:476
-msgid "Curved Section"
-msgstr "Gebogener Abschnitt"
-
-#: ../bin/ctodesgn.c:495
-msgid "Bumper Section"
-msgstr "Prellbock"
-
-#: ../bin/ctodesgn.c:505 ../bin/denum.c:123 ../bin/denum.c:186
-#: ../bin/denum.c:218 ../bin/denum.c:219 ../bin/dlayer.c:454
-msgid "Count"
-msgstr "Anzahl"
-
-#: ../bin/ctodesgn.c:506
-msgid "Radius1"
-msgstr "Radius 1"
-
-#: ../bin/ctodesgn.c:507
-msgid "Radius2"
-msgstr "Radius 2"
-
-#: ../bin/ctodesgn.c:587
-msgid "Turntable Section"
-msgstr "Drehscheibenabschnitt"
-
-#: ../bin/ctodesgn.c:1421
-#, c-format
-msgid "%s Designer"
-msgstr "%s Designer"
-
-#: ../bin/ctodesgn.c:1425
-#, c-format
-msgid "%s %d x %d (of %d x %d)"
-msgstr "%s %d x %d (von %d x %d)"
-
-#: ../bin/ctodesgn.c:1425
-msgid "Page"
-msgstr "Seite"
-
-#: ../bin/ctodesgn.c:1433
-msgid "Frog Number"
-msgstr "Herzstücksteigung"
-
-#: ../bin/ctodesgn.c:1720
-msgid "Turnout Designer"
-msgstr "Weichendesigner"
-
-#: ../bin/ctodesgn.c:1730
-#, c-format
-msgid "%s %s Designer"
-msgstr "%s %s Designer"
-
-#: ../bin/ctrain.c:181 ../bin/dcar.c:1998 ../bin/dcar.c:4082 ../bin/dcar.c:4087
-msgid "Index"
-msgstr "Verzeichnis"
-
-#: ../bin/ctrain.c:187 ../bin/dcar.c:4083
-msgid "Rep Marks"
-msgstr "Wagennummer"
-
-#: ../bin/ctrain.c:265
-msgid "Car"
-msgstr "Wagen"
-
-#: ../bin/ctrain.c:596
-msgid "Follow"
-msgstr "Folgen"
-
-#: ../bin/ctrain.c:597
-msgid "Auto Reverse"
-msgstr "Automat. Wenden"
-
-#: ../bin/ctrain.c:616 ../bin/dcar.c:4971
-msgid "Find"
-msgstr "Finden"
-
-#: ../bin/ctrain.c:622 ../bin/ctrain.c:881 ../bin/ctrain.c:1192
-#: ../wlib/gtklib/ixhelp.c:239
-msgid "Forward"
-msgstr "Vorwärts"
-
-#: ../bin/ctrain.c:624 ../bin/ctrain.c:3056 ../bin/dcar.c:4423
-#: ../bin/dcar.c:4433 ../bin/dcar.c:4553 ../bin/fileio.c:236 ../bin/macro.c:87
-msgid "Stop"
-msgstr "Anhalten"
-
-#: ../bin/ctrain.c:822 ../bin/ctrain.c:851
-msgid "Crashed"
-msgstr "Entgleist"
-
-#: ../bin/ctrain.c:824
-msgid "Not on Track"
-msgstr "Nicht auf einem Gleis"
-
-#: ../bin/ctrain.c:828
-msgid "Trains Paused"
-msgstr "Züge angehalten"
-
-#: ../bin/ctrain.c:830
-msgid "Running"
-msgstr "Fährt"
-
-#: ../bin/ctrain.c:835
-msgid "End of Track"
-msgstr "Ende des Gleis"
-
-#: ../bin/ctrain.c:839
-msgid "Open Turnout"
-msgstr "Weiche ist gesperrt"
-
-#: ../bin/ctrain.c:843
-msgid "Manual Stop"
-msgstr "Von Hand angehalten"
-
-#: ../bin/ctrain.c:847
-msgid "No Room"
-msgstr "Kein Platz"
-
-#: ../bin/ctrain.c:855
-msgid "Unknown Status"
-msgstr "Unbekannter Zustand"
-
-#: ../bin/ctrain.c:865
-msgid "No trains"
-msgstr "Keine Züge"
-
-#: ../bin/ctrain.c:1243
-msgid "Train Control XXX"
-msgstr "Zugsteuerung XXX"
-
-#: ../bin/ctrain.c:1244
-#, c-format
-msgid "Train Control %d"
-msgstr "Zugsteuerung %d"
-
-#: ../bin/ctrain.c:1246
-msgid "Train Control"
-msgstr "Zugsteuerung"
-
-#: ../bin/ctrain.c:3033
-msgid "Train"
-msgstr "Zug"
-
-#: ../bin/ctrain.c:3046
-msgid "Uncouple"
-msgstr "Entkuppeln"
-
-#: ../bin/ctrain.c:3048
-msgid "Flip Car"
-msgstr "Wagen umdrehen"
-
-#: ../bin/ctrain.c:3050
-msgid "Flip Train"
-msgstr "Zug umdrehen"
-
-#: ../bin/ctrain.c:3052
-msgid "MU Master"
-msgstr "Mehrtraktionssteuerung"
-
-#: ../bin/ctrain.c:3055
-msgid "Change Direction"
-msgstr "Richtung ändern"
-
-#: ../bin/ctrain.c:3059
-msgid "Remove Car"
-msgstr "Wagen entfernen"
-
-#: ../bin/ctrain.c:3062
-msgid "Remove Train"
-msgstr "Zug entfernen"
-
-#: ../bin/cturnout.c:89 ../bin/dcar.c:2020 ../bin/dcar.c:2024
-#: ../bin/dcustmgm.c:64
-msgid "New"
-msgstr "Neu"
-
-#: ../bin/cturnout.c:201
-#, c-format
-msgid "Turnout path[%d:%d] out of bounds: %d"
-msgstr "Weg durch Weiche[%d:%d] ausserhalb der Grenzen: %d"
-
-#: ../bin/cturnout.c:213 ../bin/cturnout.c:218
-#, c-format
-msgid "Turnout path[%d] %d is not a track segment"
-msgstr "Weg durch Weiche[%d] % ist kein Gleisabschnitt"
-
-#: ../bin/cturnout.c:226
-#, c-format
-msgid "Turnout path[%d] %d-%d not connected: %0.3f"
-msgstr "Weg durch Weiche[%d] %d-%d ist nicht verbunden: %0.3f"
-
-#: ../bin/cturnout.c:262
-msgid "Unknown special case"
-msgstr "Unbekannter Sonderfall"
-
-#: ../bin/cturnout.c:368
-msgid "Connect Adjustable Tracks"
-msgstr "Veränderbare Gleise verbinden"
-
-#: ../bin/cturnout.c:927
-msgid "splitTurnout: can't find segment"
-msgstr "Weiche auftrennen: Gleissegment nicht gefunden"
-
-#: ../bin/cturnout.c:1349 ../bin/track.c:2011 ../bin/tstraigh.c:542
-msgid "Drag to change track length"
-msgstr "Ziehen um die Gleislänge zu ändern"
-
-#: ../bin/cturnout.c:1360
-#, c-format
-msgid "Length=%s"
-msgstr "Länge=%s"
-
-#: ../bin/cturnout.c:1629 ../bin/cturnout.c:2590
-msgid "TURNOUT "
-msgstr "WEICHE "
-
-#: ../bin/cturnout.c:1980
-#, c-format
-msgid "%d connections, max distance %0.3f (%s)"
-msgstr "%d Verbindungen, max. Abstand %0.3f (%s)"
-
-#: ../bin/cturnout.c:1985
-#, c-format
-msgid "0 connections (%s)"
-msgstr "Keine Verbindungen (%s)"
-
-#: ../bin/cturnout.c:2025
-msgid "Place New Turnout"
-msgstr "Neue Weiche setzen"
-
-#: ../bin/cturnout.c:2269 ../bin/cturnout.c:2325 ../bin/cturnout.c:2441
-#: ../bin/cturnout.c:2553
-msgid ""
-"Left drag to move, right drag to rotate, press Space or Return to fix track "
-"in place or Esc to cancel"
-msgstr ""
-"Ziehen mit linker Maustaste zum Verschieben, mit rechter zum Drehen, oder "
-"Leerzeichen oder Eingabetaste zum Festlegen oder ESC zum Abbrechen"
-
-#: ../bin/cturnout.c:2316
-#, c-format
-msgid "Angle = %0.3f (%s)"
-msgstr "Winkel = %0.3f (%s)"
-
-#: ../bin/cturnout.c:2406 ../bin/param.c:2539
-msgid "Close"
-msgstr "Schliessen"
-
-#: ../bin/cturnout.c:2423
-msgid "Pick turnout and active End Point, then place on the layout"
-msgstr ""
-"Weiche und aktiven Endpunkt auswählen und dann auf den Gleisplan setzen"
-
-#: ../bin/cturntbl.c:52 ../bin/cturntbl.c:246 ../bin/cturntbl.c:819
-#: ../bin/cturntbl.c:832
-msgid "Diameter"
-msgstr "Durchmesser"
-
-#: ../bin/cturntbl.c:247
-msgid "# EndPt"
-msgstr "Anzahl Endpunkte"
-
-#: ../bin/cturntbl.c:281
-#, c-format
-msgid "Turntable(%d): Layer=%d Center=[%s %s] Diameter=%s #EP=%d"
-msgstr ""
-"Drehscheibe(%d): Ebene=%d Mittelpunkt=[%s %s] Durchmesser=%s Anzahl "
-"Endpunkte=%d"
-
-#: ../bin/cturntbl.c:296 ../bin/cturntbl.c:877
-msgid "Turntable"
-msgstr "Drehscheibe"
-
-#: ../bin/cturntbl.c:554
-msgid "Drag to create stall track"
-msgstr "Ziehen um Schuppengleis zu erstellen"
-
-#: ../bin/cturntbl.c:849
-msgid "Create Turntable"
-msgstr "Drehscheibe setzen"
-
-#: ../bin/cundo.c:166
-msgid "Undo Trace"
-msgstr "Undo Trace"
-
-#: ../bin/cundo.c:536
-#, c-format
-msgid "Undo: %s"
-msgstr "Rückgängig: %s"
-
-#: ../bin/cundo.c:539 ../../../../build/work/app/bin/bllnhlp.c:137
-msgid "Undo last command"
-msgstr "Letzten Befehl rückgängig machen"
-
-#: ../bin/cundo.c:544
-#, c-format
-msgid "Redo: %s"
-msgstr "Wiederholen: %s"
-
-#: ../bin/cundo.c:547 ../../../../build/work/app/bin/bllnhlp.c:107
-msgid "Redo last undo"
-msgstr "Rückgängig gemachten Befehl wiederholen"
-
-#: ../bin/custom.c:164
-#, c-format
-msgid "%s Turnout Designer"
-msgstr "%s Weichendesigner"
-
-#: ../bin/custom.c:169
-#, c-format
-msgid "%s Version %s"
-msgstr "%s Version %s"
-
-#: ../bin/custom.c:174
-#, c-format
-msgid "%s Files|*.xtc"
-msgstr "%s-Gleispläne|*.xtc"
-
-#: ../bin/custom.c:179
-#, c-format
-msgid "%s Import Files|*.%sti"
-msgstr "%s-Importdateien|*.%sti"
-
-#: ../bin/custom.c:184
-msgid "Data Exchange Format Files|*.dxf"
-msgstr "Data Exchange Format Dateien|*.dxf"
-
-#: ../bin/custom.c:188
-#, c-format
-msgid "%s Record Files|*.%str"
-msgstr "%s-Aufzeichnungsdateien|*.%str"
-
-#: ../bin/custom.c:193
-#, c-format
-msgid "%s Note Files|*.not"
-msgstr "%s-Notizen|*.not"
-
-#: ../bin/custom.c:198
-#, c-format
-msgid "%s Log Files|*.log"
-msgstr "%s-Protokolldateien|*.log"
-
-#: ../bin/custom.c:203
-#, c-format
-msgid "%s PartsList Files|*.txt"
-msgstr "%s-Stücklisten|*.txt"
-
-#: ../bin/dbench.c:43
-msgid " L-Girder"
-msgstr " L-Träger"
-
-#: ../bin/dbench.c:43
-msgid " T-Girder"
-msgstr " T-Träger"
-
-#: ../bin/dbench.c:66
-msgid "On Edge"
-msgstr "Hochkant"
-
-#: ../bin/dbench.c:67
-msgid "Flat"
-msgstr "Flach"
-
-#: ../bin/dbench.c:71
-msgid "Left-Down"
-msgstr "Links unten"
-
-#: ../bin/dbench.c:72
-msgid "Right-Down"
-msgstr "Rechts unten"
-
-#: ../bin/dbench.c:73
-msgid "Left-Up"
-msgstr "Links oben"
-
-#: ../bin/dbench.c:74
-msgid "Right-Up"
-msgstr "Rechts oben"
-
-#: ../bin/dbench.c:75
-msgid "Left-Inverted"
-msgstr "Links umgekehrt"
-
-#: ../bin/dbench.c:76
-msgid "Right-Inverted"
-msgstr "Rechts umgekehrt"
-
-#: ../bin/dbench.c:81
-msgid "Inverted"
-msgstr "Umgekehrt"
-
-#: ../bin/dbench.c:147
-#, c-format
-msgid ""
-"Bad BenchType for %s:\n"
-"%s"
-msgstr ""
-"Falscher Trägertyp %s:\n"
-"%s"
-
-#: ../bin/dbitmap.c:102 ../bin/dbitmap.c:106
-msgid "Drawn with "
-msgstr "Gezeichnet mit "
-
-#: ../bin/dbitmap.c:116
-msgid "Drawing tracks to BitMap"
-msgstr "Gleisplan als Grafik ausgeben"
-
-#: ../bin/dbitmap.c:123
-msgid "Writing BitMap to file"
-msgstr "Grafik in Datei speichern"
-
-#: ../bin/dbitmap.c:144
-msgid "Print Titles"
-msgstr "Überschriften ausgeben"
-
-#: ../bin/dbitmap.c:144
-msgid "Print Borders"
-msgstr "Rahmen ausgeben"
-
-#: ../bin/dbitmap.c:145
-msgid "Print Centerline"
-msgstr "Mittellinie ausgeben"
-
-#: ../bin/dbitmap.c:152
-msgid " dpi"
-msgstr " dpi"
-
-#: ../bin/dbitmap.c:154
-msgid "Bitmap : 99999 by 99999 pixels"
-msgstr "Grafik : 99999 auf 99999 Bildpunkte"
-
-#: ../bin/dbitmap.c:156
-msgid "Approximate file size: 999.9Mb"
-msgstr "Ungefähre Dateigrösse : 999.9Mb"
-
-#: ../bin/dbitmap.c:186
-#, c-format
-msgid "Bitmap : %ld by %ld pixels"
-msgstr "Grafik : %ld auf %ld Bildpunkte"
-
-#: ../bin/dbitmap.c:190
-#, c-format
-msgid "Approximate file size : %0.0f"
-msgstr "Ungefähre Dateigrösse : %0.0f"
-
-#: ../bin/dbitmap.c:192
-#, c-format
-msgid "Approximate file size : %0.1fKb"
-msgstr "Ungefähre Dateigrösse : %0.1fKb"
-
-#: ../bin/dbitmap.c:194
-#, c-format
-msgid "Approximate file size : %0.1fMb"
-msgstr "Ungefähre Dateigrösse : %0.1fMb"
-
-#: ../bin/dbitmap.c:208 ../bin/misc.c:1137 ../bin/misc.c:1207
-#: ../bin/param.c:2539 ../wlib/gtklib/browserhelp.c:127
-#: ../../../../build/work/app/bin/bllnhlp.c:540
-msgid "Cancel"
-msgstr "Abbruch"
-
-#: ../bin/dbitmap.c:213
-msgid "Save Bitmap"
-msgstr "Grafik speichern"
-
-#: ../bin/dbitmap.c:215
-msgid "Bitmap files|*.bmp"
-msgstr "Grafikdateien|*.bmp"
-
-#: ../bin/dbitmap.c:217
-msgid "Bitmap files|*.xpm"
-msgstr "Grafikdateien|*.xpm"
-
-#: ../bin/dbitmap.c:238
-msgid "BitMap"
-msgstr "Grafik"
-
-#: ../bin/dcar.c:53
-msgid "Truck"
-msgstr "Drehgestell"
-
-#: ../bin/dcar.c:53
-msgid "Body"
-msgstr "Aufbau"
-
-#: ../bin/dcar.c:154 ../bin/dcar.c:2449 ../bin/dcar.c:2453
-msgid "Unknown"
-msgstr "Unbekannt"
-
-#: ../bin/dcar.c:487
-msgid "Diesel Loco"
-msgstr "Diesellok"
-
-#: ../bin/dcar.c:488
-msgid "Steam Loco"
-msgstr "Dampflok"
-
-#: ../bin/dcar.c:489
-msgid "Elect Loco"
-msgstr "Elektrolok"
-
-#: ../bin/dcar.c:490
-msgid "Freight Car"
-msgstr "Güterwagen"
-
-#: ../bin/dcar.c:491
-msgid "Psngr Car"
-msgstr "Personenwagen"
-
-#: ../bin/dcar.c:492
-msgid "M-O-W"
-msgstr "Arbeitswagen"
-
-#: ../bin/dcar.c:493 ../bin/doption.c:116
-msgid "Other"
-msgstr "Sonstige"
-
-#: ../bin/dcar.c:1096 ../bin/dcar.c:4792
-msgid "N/A"
-msgstr "Keine Angabe"
-
-#: ../bin/dcar.c:1097 ../bin/dcar.c:4797
-msgid "Mint"
-msgstr "Neuwertig"
-
-#: ../bin/dcar.c:1098 ../bin/dcar.c:4796
-msgid "Excellent"
-msgstr "Exzellent"
-
-#: ../bin/dcar.c:1099 ../bin/dcar.c:4795
-msgid "Good"
-msgstr "Gut"
-
-#: ../bin/dcar.c:1100 ../bin/dcar.c:4794
-msgid "Fair"
-msgstr "In Ordnung"
-
-#: ../bin/dcar.c:1101 ../bin/dcar.c:4793
-msgid "Poor"
-msgstr "Schlecht"
-
-#: ../bin/dcar.c:1377 ../bin/dpricels.c:45
-#: ../../../../build/work/app/bin/bllnhlp.c:405
-msgid "Item"
-msgstr "Gegenstand"
-
-#: ../bin/dcar.c:1924 ../wlib/gtklib/notice.c:91 ../wlib/mswlib/mswmisc.c:1983
-msgid "Information"
-msgstr "Information"
-
-#: ../bin/dcar.c:1924
-msgid "Customize"
-msgstr "Anpassen"
-
-#: ../bin/dcar.c:1936
-msgid "Sequential"
-msgstr "Aufsteigend"
-
-#: ../bin/dcar.c:1936
-msgid "Repeated"
-msgstr "Wiederholend"
-
-#: ../bin/dcar.c:1947 ../bin/dcar.c:1949 ../bin/dcar.c:5122
-msgid "Prototype"
-msgstr "Vorbild"
-
-#: ../bin/dcar.c:1955
-msgid "Part"
-msgstr "Teil"
-
-#: ../bin/dcar.c:1957 ../../../../build/work/app/bin/bllnhlp.c:348
-#: ../../../../build/work/app/bin/bllnhlp.c:524
-#: ../../../../build/work/app/bin/bllnhlp.c:525
-msgid "Part Number"
-msgstr "Bestellnummer"
-
-#: ../bin/dcar.c:1959
-msgid "Loco?"
-msgstr "Lok?"
-
-#: ../bin/dcar.c:1963 ../bin/dcar.c:4120
-msgid "Import"
-msgstr "Import"
-
-#: ../bin/dcar.c:1970
-msgid "Mode"
-msgstr "Modus"
-
-#: ../bin/dcar.c:1974
-msgid "Road"
-msgstr "Gesellschaft"
-
-#: ../bin/dcar.c:1976
-msgid "Reporting Mark"
-msgstr "Wagennummer"
-
-#: ../bin/dcar.c:1978
-msgid "Number"
-msgstr "Nummer"
-
-#: ../bin/dcar.c:1982
-msgid "Car Length"
-msgstr "Wagenlänge"
-
-#: ../bin/dcar.c:1986
-msgid "Truck Centers"
-msgstr "Drehgestellabstand"
-
-#: ../bin/dcar.c:1988
-msgid "Coupler Mount"
-msgstr "Kupplungsbefestigung"
-
-#: ../bin/dcar.c:1990
-msgid "Coupled Length"
-msgstr "Gekuppelte Länge"
-
-#: ../bin/dcar.c:1992 ../bin/dcar.c:3958
-msgid "Coupler Length"
-msgstr "Kupplungslänge"
-
-#: ../bin/dcar.c:2000
-msgid "Purchase Price"
-msgstr "Kaufpreis"
-
-#: ../bin/dcar.c:2002 ../../../../build/work/app/bin/bllnhlp.c:214
-msgid "Current Price"
-msgstr "Aktueller Preis"
-
-#: ../bin/dcar.c:2004 ../bin/dcar.c:4084 ../bin/dcar.c:4089
-msgid "Condition"
-msgstr "Zustand"
-
-#: ../bin/dcar.c:2006
-msgid "Purchase Date"
-msgstr "Kaufdatum"
-
-#: ../bin/dcar.c:2008 ../bin/dcar.c:4089
-msgid "Service Date"
-msgstr "Servicedatum"
-
-#: ../bin/dcar.c:2010
-msgid "Quantity"
-msgstr "Anzahl"
-
-#: ../bin/dcar.c:2012
-msgid "Numbers"
-msgstr "Nummern"
-
-#: ../bin/dcar.c:2014 ../bin/dcar.c:4085
-#: ../../../../build/work/app/i18n/custmsg.h:657
-msgid "Notes"
-msgstr "Notizen"
-
-#: ../bin/dcar.c:2021 ../bin/dcustmgm.c:65
-msgid "Car Part"
-msgstr "Wagenvorlage"
-
-#: ../bin/dcar.c:2022 ../bin/dcustmgm.c:66
-#: ../../../../build/work/app/bin/bllnhlp.c:189
-#: ../../../../build/work/app/bin/bllnhlp.c:190
-msgid "Car Prototype"
-msgstr "Wagenvorbild"
-
-#: ../bin/dcar.c:2383 ../bin/dcar.c:2700
-msgid "Undecorated"
-msgstr "Unbeschriftet"
-
-#: ../bin/dcar.c:2441 ../bin/dcar.c:2445 ../bin/fileio.c:656
-msgid "Custom"
-msgstr "Individual"
-
-#: ../bin/dcar.c:2610
-msgid "Undecorated "
-msgstr "Unbeschriftet "
-
-#: ../bin/dcar.c:2830
-#, c-format
-msgid "New %s Scale Car"
-msgstr "Neuer Wagen in %s"
-
-#: ../bin/dcar.c:2831 ../bin/dcar.c:2840 ../bin/dcar.c:2849 ../bin/dcar.c:3988
-#: ../bin/dcar.c:4116
-msgid "Add"
-msgstr "Hinzufügen"
-
-#: ../bin/dcar.c:2833
-#, c-format
-msgid "Update %s Scale Car"
-msgstr "Aktualisiere Wagen in Maßstab %s"
-
-#: ../bin/dcar.c:2834 ../bin/dcar.c:2843 ../bin/dcar.c:2852 ../bin/dcmpnd.c:172
-msgid "Update"
-msgstr "Aktualisieren"
-
-#: ../bin/dcar.c:2839
-#, c-format
-msgid "New %s Scale Car Part"
-msgstr "Neue Wagenvorlage in %s"
-
-#: ../bin/dcar.c:2842
-#, c-format
-msgid "Update %s Scale Car Part"
-msgstr "Wagenvorlage in %s aktualisieren"
-
-#: ../bin/dcar.c:2848
-msgid "New Prototype"
-msgstr "Neues Vorbild"
-
-#: ../bin/dcar.c:2851
-msgid "Update Prototype"
-msgstr "Aktualisiere Vorbild"
-
-#: ../bin/dcar.c:3494
-msgid "Enter a 8 digit numeric date"
-msgstr "Geben Sie ein 8-stelliges numerisches Datum ein"
-
-#: ../bin/dcar.c:3497
-msgid "Enter a 8 digit date"
-msgstr "Geben Sie ein 8-stelliges Datum ein"
-
-#: ../bin/dcar.c:3499
-msgid "Enter a date between 19000101 and 21991231"
-msgstr "Geben Sie ein Datum zwischen 19000101 und 21991231 ein"
-
-#: ../bin/dcar.c:3504
-msgid "Invalid month"
-msgstr "Ungültiger Monat"
-
-#: ../bin/dcar.c:3506
-msgid "Invalid day"
-msgstr "Ungültiger Kalendertag"
-
-#: ../bin/dcar.c:3592
-msgid "Enter a Prototype name"
-msgstr "Geben Sie den Namen des Vorbild ein"
-
-#: ../bin/dcar.c:3594
-msgid "Select or Enter a Manufacturer"
-msgstr "Hersteller auswählen oder eingeben"
-
-#: ../bin/dcar.c:3596
-msgid "Enter a Part Number"
-msgstr "Bestellnummer eingeben"
-
-#: ../bin/dcar.c:3598
-msgid "Enter the Car Length"
-msgstr "Länge des Wagen eingeben"
-
-#: ../bin/dcar.c:3600
-msgid "Enter the Car Width"
-msgstr "Breite des Wagen eingeben"
-
-#: ../bin/dcar.c:3602
-msgid "Enter the Truck Centers"
-msgstr "Drehgestellabstand eingeben"
-
-#: ../bin/dcar.c:3604
-msgid "Truck Centers must be less than Car Length"
-msgstr "Abstand der Drehgestelle muss kleiner als die Wagenlänge sein"
-
-#: ../bin/dcar.c:3606
-msgid "Enter the Coupled Length or Coupler Length"
-msgstr "Geben Sie die gekuppelte Länge oder die Kupplungslänge ein"
-
-#: ../bin/dcar.c:3608
-msgid "Enter the Coupled Length"
-msgstr "Geben Sie die gekuppelte Länge ein"
-
-#: ../bin/dcar.c:3610
-msgid "Enter a item Index"
-msgstr "Geben Sie eine Kennnummer ein"
-
-#: ../bin/dcar.c:3612
-msgid "Purchase Price is not valid"
-msgstr "Kaufpreis ist nicht gültig"
-
-#: ../bin/dcar.c:3614
-msgid "Current Price is not valid"
-msgstr "Aktueller Preis ist nicht gültig"
-
-#: ../bin/dcar.c:3616
-msgid "Purchase Date is not valid"
-msgstr "Kaufdatum ist nicht gültig"
-
-#: ../bin/dcar.c:3618
-msgid "Service Date is not valid"
-msgstr "Servicedatum ist nicht gültig"
-
-#: ../bin/dcar.c:3621
-#, c-format
-msgid "Item Index %ld duplicated an existing item: updated to new value"
-msgstr "Kennnummer %ld existiert bereits: mit neuem Wert aktualisiert"
-
-#: ../bin/dcar.c:3816
-#, c-format
-msgid "Added %ld new Cars"
-msgstr "%ld neue Wagen hinzugefügt"
-
-#: ../bin/dcar.c:3818
-msgid "Added new Car"
-msgstr "Neuen Wagen hinzugefügt"
-
-#: ../bin/dcar.c:3821
-msgid "Updated Car"
-msgstr "Wagen aktualisiert"
-
-#: ../bin/dcar.c:3824
-msgid " and Part"
-msgstr " und Teil"
-
-#: ../bin/dcar.c:3851
-#, c-format
-msgid "%s Part: %s %s %s %s %s %s"
-msgstr "%s Teil: %s %s %s %s %s %s"
-
-#: ../bin/dcar.c:3851 ../bin/dcar.c:3868
-msgid "Added new"
-msgstr "Neu hinzugefügt"
-
-#: ../bin/dcar.c:3851 ../bin/dcar.c:3868
-msgid "Updated"
-msgstr "Aktualisiert"
-
-#: ../bin/dcar.c:3867
-#, c-format
-msgid "%s Prototype: %s%s."
-msgstr "%s Vorbild: %s%s."
-
-#: ../bin/dcar.c:3869
-msgid ". Enter new values or press Close"
-msgstr ". Neue Werte eingeben oder Abbruch drücken"
-
-#: ../bin/dcar.c:3988
-msgid "New Car Part"
-msgstr "Neues Wagenmuster"
-
-#: ../bin/dcar.c:4083 ../bin/dcar.c:4088
-#: ../../../../build/work/app/bin/bllnhlp.c:378
-msgid "Roadname"
-msgstr "Gesellschaft"
-
-#: ../bin/dcar.c:4083
-msgid "Purc Price"
-msgstr "Kaufpreis"
-
-#: ../bin/dcar.c:4084 ../bin/dcar.c:4089
-msgid "Curr Price"
-msgstr "Akt. Preis"
-
-#: ../bin/dcar.c:4084
-msgid "Purc Date"
-msgstr "Kaufdaum"
-
-#: ../bin/dcar.c:4084
-msgid "Srvc Date"
-msgstr "Servicedatum"
-
-#: ../bin/dcar.c:4085
-msgid "Locat'n"
-msgstr "Ort"
-
-#: ../bin/dcar.c:4088
-msgid "RepMarks"
-msgstr "Wagennummer"
-
-#: ../bin/dcar.c:4088
-msgid "Purch Price"
-msgstr "Kaufpreis"
-
-#: ../bin/dcar.c:4089
-msgid "Purch Date"
-msgstr "Kaufdatum"
-
-#: ../bin/dcar.c:4106
-msgid "Sort By"
-msgstr "Sortierung"
-
-#: ../bin/dcar.c:4114 ../bin/dcontmgm.c:99 ../bin/dcustmgm.c:58
-#: ../bin/dcustmgm.c:95
-msgid "Edit"
-msgstr "Bearbeiten"
-
-#: ../bin/dcar.c:4118 ../bin/dcontmgm.c:101 ../bin/dcustmgm.c:60
-#: ../bin/misc.c:2162
-msgid "Delete"
-msgstr "Löschen"
-
-#: ../bin/dcar.c:4122 ../bin/fileio.c:1212
-msgid "Export"
-msgstr "Export"
-
-#: ../bin/dcar.c:4124 ../../../../build/work/app/bin/bllnhlp.c:541
-msgid "List"
-msgstr "Auflisten"
-
-#: ../bin/dcar.c:4239 ../bin/dcar.c:4971 ../bin/misc.c:2434
-msgid "Car Inventory"
-msgstr "Wagenverzeichnis"
-
-#: ../bin/dcar.c:4359
-msgid "List Cars"
-msgstr "Wagen auflisten"
-
-#: ../bin/dcar.c:4481 ../bin/dcar.c:4644
-msgid "Import Cars"
-msgstr "Wagen importieren"
-
-#: ../bin/dcar.c:4645 ../bin/dcar.c:4767
-msgid "Comma-Separated-Values|*.csv"
-msgstr "Durch-Kommata getrennte Werte|*.csv"
-
-#: ../bin/dcar.c:4715 ../bin/dcar.c:4766
-msgid "Export Cars"
-msgstr "Wagen exportieren"
-
-#: ../bin/dcar.c:4800
-msgid "Layout"
-msgstr "Anlage"
-
-#: ../bin/dcar.c:4802
-msgid "Shelf"
-msgstr "Regal"
-
-#: ../bin/dcmpnd.c:76 ../bin/dlayer.c:456 ../bin/misc.c:569 ../bin/misc.c:598
-msgid "Load"
-msgstr "Laden"
-
-#: ../bin/dcmpnd.c:109
-msgid "Updating definitions, please wait"
-msgstr "Bitte warten, Definitionen werden aktualisiert"
-
-#: ../bin/dcmpnd.c:172
-msgid "Update Title"
-msgstr "Ãœberschrift aktualisieren"
-
-#: ../bin/dcmpnd.c:232
-#, c-format
-msgid "End-Point #%d of the selected and actual turnouts are not close"
-msgstr ""
-"Endpunkte #%d der ausgewählten und der aktuellen Weiche sind nicht "
-"beieinander"
-
-#: ../bin/dcmpnd.c:241
-#, c-format
-msgid "End-Point #%d of the selected and actual turnouts are not aligned"
-msgstr ""
-"Endpunkte #%d der ausgewählten und der aktuellen Weiche sind nicht "
-"ausgerichtet"
-
-#: ../bin/dcmpnd.c:260
-msgid "The selected Turnout had a differing number of End-Points"
-msgstr "Die ausgewählte Weiche hatte eine andere Anzahl von Endpunkten"
-
-#: ../bin/dcmpnd.c:321
-msgid "Skip"
-msgstr "Überspringen"
-
-#: ../bin/dcmpnd.c:353
-#, c-format
-msgid "%d Track(s) refreshed"
-msgstr "%d Gleise bearbeitet"
-
-#: ../bin/dcmpnd.c:393
-msgid "Refresh Turnout/Structure"
-msgstr "Weichen/Gebäude neu laden"
-
-#: ../bin/dcmpnd.c:395
-msgid "Choose a Turnout/Structure to replace:"
-msgstr "Zu ersetzende Weiche / Gebäude auswählen:"
-
-#: ../bin/dcmpnd.c:405 ../bin/doption.c:109
-#: ../../../../build/work/app/i18n/custmsg.h:627
-msgid "Turnouts"
-msgstr "Weichen"
-
-#: ../bin/dcmpnd.c:405
-msgid "Structures"
-msgstr "Gebäude"
-
-#: ../bin/dcmpnd.c:434
-msgid "Choose another Turnout/Structure to replace:"
-msgstr "Eine andere zu ersetzende Weiche / zu ersetzendes Gebäude auswählen:"
-
-#: ../bin/dcmpnd.c:536
-msgid "Rename Object"
-msgstr "Objekt umbenennen"
-
-#: ../bin/dcontmgm.c:92 ../bin/doption.c:116
-msgid "Tracks"
-msgstr "Gleise"
-
-#: ../bin/dcontmgm.c:173
-#, c-format
-msgid "Are you sure you want to delete the %d control element(s)"
-msgstr "Sind Sie sicher, dass Sie diese %d Steuerungselemente löschen wollen?"
-
-#: ../bin/dcontmgm.c:176
-msgid "Control Elements"
-msgstr "Steuerungselemente"
-
-#: ../bin/dcontmgm.c:300
-msgid "Manage Layout Control Elements"
-msgstr "Steuerungselemente verwalten"
-
-#: ../bin/dcustmgm.c:62
-msgid "Move To"
-msgstr "Verschieben nach"
-
-#: ../bin/dcustmgm.c:95
-msgid "Rename"
-msgstr "Umbenennen"
-
-#: ../bin/dcustmgm.c:162
-msgid "Label"
-msgstr "Beschriftung"
-
-#: ../bin/dcustmgm.c:200
-msgid "Contents Label"
-msgstr "Inhaltsbeschriftung"
-
-#: ../bin/dcustmgm.c:247
-msgid "Move To XTP"
-msgstr "\"In Paramterdatei verschieben"
-
-#: ../bin/dcustmgm.c:248
-msgid "Parameter File|*.xtp"
-msgstr "Parameterdateien|*.xtp"
-
-#: ../bin/dcustmgm.c:358
-msgid "Manage custom designed parts"
-msgstr "Eigene Teile verwalten"
-
-#: ../bin/dease.c:65
-msgid "Sharp"
-msgstr "Eng"
-
-#: ../bin/dease.c:65
-msgid "Broad"
-msgstr "Weit"
-
-#: ../bin/dease.c:65
-msgid "Cornu"
-msgstr "Klothoide"
-
-#: ../bin/dease.c:72
-msgid "Value"
-msgstr "Wert"
-
-#: ../bin/dease.c:73 ../bin/tease.c:509
-msgid "R"
-msgstr "R"
-
-#: ../bin/dease.c:75 ../bin/tease.c:510
-msgid "L"
-msgstr "L"
-
-#: ../bin/dease.c:240
-msgid "Easement"
-msgstr "Übergangsbogen"
-
-#: ../bin/denum.c:49
-msgid "Prices"
-msgstr "Preise"
-
-#: ../bin/denum.c:54
-msgid "Save As ..."
-msgstr "Speichern unter..."
-
-#: ../bin/denum.c:134 ../bin/denum.c:189 ../bin/denum.c:224
-msgid "Each"
-msgstr "Je"
-
-#: ../bin/denum.c:148 ../bin/denum.c:149
-msgid "Parts List"
-msgstr "Teileliste"
-
-#: ../bin/denum.c:154
-#, c-format
-msgid ""
-"%s Parts List\n"
-"\n"
-msgstr ""
-"%s Teileliste\n"
-"\n"
-
-#: ../bin/denum.c:189 ../bin/denum.c:226 ../bin/denum.c:235
-msgid "Extended"
-msgstr "Erweitert"
-
-#: ../bin/denum.c:235 ../bin/denum.c:238
-msgid "Total"
-msgstr "Summe"
-
-#: ../bin/dlayer.c:448
-msgid "Visible"
-msgstr "Sichtbar"
-
-#: ../bin/dlayer.c:450
-msgid "Frozen"
-msgstr "Fixiert"
-
-#: ../bin/dlayer.c:452
-msgid "On Map"
-msgstr "Auf der Karte"
-
-#: ../bin/dlayer.c:455
-msgid "Personal Preferences"
-msgstr "Persönliche Einstellungen"
-
-#: ../bin/dlayer.c:457 ../bin/macro.c:1181
-msgid "Save"
-msgstr "Speichern"
-
-#: ../bin/dlayer.c:458
-msgid "Defaults"
-msgstr "Standardwerte"
-
-#: ../bin/dlayer.c:459
-msgid "Number of Layer Buttons"
-msgstr "Anzahl der Ebenenknöpfe"
-
-#: ../bin/dlayer.c:476 ../bin/dlayer.c:892 ../bin/dlayer.c:904
-#: ../bin/dlayer.c:953
-msgid "Main"
-msgstr "Haupt"
-
-#: ../bin/dlayer.c:586 ../bin/dlayer.c:835 ../bin/dlayer.c:907
-#: ../bin/dlayer.c:955 ../bin/dlayer.c:1194
-msgid "Show/Hide Layer"
-msgstr "Ebene anzeigen/verbergen"
-
-#: ../bin/dlayer.c:1026
-msgid "Layers"
-msgstr "Ebenen"
-
-#: ../bin/doption.c:107
-msgid "Auto Pan"
-msgstr "Automatischer Ausschnitt"
-
-#: ../bin/doption.c:108
-msgid "Dash"
-msgstr "Gestrichelt"
-
-#: ../bin/doption.c:109
-msgid "All"
-msgstr "Alle"
-
-#: ../bin/doption.c:110
-msgid "Thick"
-msgstr "Dick"
-
-#: ../bin/doption.c:110
-msgid "Exception"
-msgstr "Ausnahmegleis"
-
-#: ../bin/doption.c:111
-msgid "Outline"
-msgstr "Umriss"
-
-#: ../bin/doption.c:111
-msgid "Solid"
-msgstr "Gefüllt"
-
-#: ../bin/doption.c:112
-msgid "Off"
-msgstr "Aus"
-
-#: ../bin/doption.c:112
-msgid "On"
-msgstr "An"
-
-#: ../bin/doption.c:113
-msgid "Track Descriptions"
-msgstr "Gleisbeschreibungen"
-
-#: ../bin/doption.c:113
-msgid "Lengths"
-msgstr "Längen"
-
-#: ../bin/doption.c:113
-msgid "EndPt Elevations"
-msgstr "Endpunkthöhen"
-
-#: ../bin/doption.c:113
-msgid "Track Elevations"
-msgstr "Gleishöhen"
-
-#: ../bin/doption.c:113
-msgid "Cars"
-msgstr "Wagen"
-
-#: ../bin/doption.c:114 ../bin/doption.c:115
-msgid "Descr"
-msgstr "Beschreibung"
-
-#: ../bin/doption.c:115
-msgid "Manuf"
-msgstr "Hersteller"
-
-#: ../bin/doption.c:117
-msgid "Live Map"
-msgstr "Dynamische Karte"
-
-#: ../bin/doption.c:118
-msgid "Hide Trains On Hidden Track"
-msgstr "Verberge Züge auf verborgenem Gleis"
-
-#: ../bin/doption.c:119
-msgid "Zoom keeps lower corner in view"
-msgstr "Linke untere Ecke beim Zoomen festhalten"
-
-#: ../bin/doption.c:124
-msgid "Color Layers"
-msgstr "Ebenenfarben"
-
-#: ../bin/doption.c:125
-msgid "Draw Tunnel"
-msgstr "Zeichne Tunnel"
-
-#: ../bin/doption.c:126
-msgid "Draw EndPts"
-msgstr "Zeichne Endpunkte"
-
-#: ../bin/doption.c:127
-msgid "Draw Unconnected EndPts"
-msgstr "Zeichne offene Endpunkte"
-
-#: ../bin/doption.c:128
-msgid "Draw Ties"
-msgstr "Schwellen zeichnen"
-
-#: ../bin/doption.c:129
-msgid "Draw Centers"
-msgstr "Mittelpunkt zeichnen"
-
-#: ../bin/doption.c:130
-msgid "Two Rail Scale"
-msgstr "Maßstab für Gleis"
-
-#: ../bin/doption.c:131
-msgid "Map Scale"
-msgstr "Kartenmaßstab"
-
-#: ../bin/doption.c:135
-msgid "Label Enable"
-msgstr "Beschriftungen zeigen"
-
-#: ../bin/doption.c:136
-msgid "Label Scale"
-msgstr "Maßstab der Beschriftungen"
-
-#: ../bin/doption.c:137
-msgid "Label Font Size"
-msgstr "Grösse für Beschriftungen"
-
-#: ../bin/doption.c:138
-msgid "Hot Bar Labels"
-msgstr "Teilekatalog Beschriftungen"
-
-#: ../bin/doption.c:139
-msgid "Layout Labels"
-msgstr "Anlagenbeschriftungen"
-
-#: ../bin/doption.c:140
-msgid "List Labels"
-msgstr "Listenüberschriften"
-
-#: ../bin/doption.c:143
-msgid "Car Labels"
-msgstr "Wagenbeschriftungen"
-
-#: ../bin/doption.c:144
-msgid "Train Update Delay"
-msgstr "Aktualisierungsintervalle"
-
-#: ../bin/doption.c:172
-msgid "Display Options"
-msgstr "Anzeigeoptionen"
-
-#: ../bin/doption.c:173
-msgid "Proto"
-msgstr "Vorbild"
-
-#: ../bin/doption.c:174
-msgid "Proto/Manuf"
-msgstr "Vorbild/Hersteller"
-
-#: ../bin/doption.c:175
-msgid "Proto/Manuf/Part Number"
-msgstr "Vorbild/Hersteller/Bestellnr."
-
-#: ../bin/doption.c:176
-msgid "Proto/Manuf/Partno/Item"
-msgstr "Vorbild/Hersteller/Bestellnr. /lfd. Nr."
-
-#: ../bin/doption.c:177
-msgid "Manuf/Proto"
-msgstr "Hersteller/Vorbild"
-
-#: ../bin/doption.c:178
-msgid "Manuf/Proto/Part Number"
-msgstr "Hersteller/Vorbild/Bestellnr."
-
-#: ../bin/doption.c:179
-msgid "Manuf/Proto/Partno/Item"
-msgstr "Hersteller/Vorbild/Bestellnr./lfd. Nr."
-
-#: ../bin/doption.c:210
-msgid "End-Points"
-msgstr "Endpunkte"
-
-#: ../bin/doption.c:218
-msgid "Normal: Command List, Shift: Command Options"
-msgstr "Normal: Befehlsliste, Umschalt: Befehlsoptionen"
-
-#: ../bin/doption.c:218
-msgid "Normal: Command Options, Shift: Command List"
-msgstr "Normal: Befehlsoptionen, Umschalt: Befehlsliste"
-
-#: ../bin/doption.c:221
-msgid "Draw Moving Tracks"
-msgstr "Zeichne bewegte Gleise"
-
-#: ../bin/doption.c:222
-msgid "Default Command"
-msgstr "Standardbefehl"
-
-#: ../bin/doption.c:224
-msgid "Hide Selection Window"
-msgstr "Verberge Auswahlfenster"
-
-#: ../bin/doption.c:226
-msgid "Right Click"
-msgstr "Rechte Mausetaste"
-
-#: ../bin/doption.c:252
-msgid "Command Options"
-msgstr "Befehlsoptionen"
-
-#: ../bin/doption.c:275
-msgid "English"
-msgstr "Englisch"
-
-#: ../bin/doption.c:275
-msgid "Metric"
-msgstr "Metrisch"
-
-#: ../bin/doption.c:276
-msgid "Polar"
-msgstr "Polar"
-
-#: ../bin/doption.c:276
-msgid "Cartesian"
-msgstr "Kartesisch"
-
-#: ../bin/doption.c:277
-msgid "Balloon Help"
-msgstr "Sprechblasen"
-
-#: ../bin/doption.c:278
-msgid "Load Last Layout"
-msgstr "Letzten Gleisplan laden"
-
-#: ../bin/doption.c:278
-msgid "Start New Layout"
-msgstr "Neuen Gleisplan beginnen"
-
-#: ../bin/doption.c:281
-msgid "Angles"
-msgstr "Winkel"
-
-#: ../bin/doption.c:282
-msgid "Units"
-msgstr "Einheiten"
-
-#: ../bin/doption.c:284
-msgid "Length Format"
-msgstr "Längenformat"
-
-#: ../bin/doption.c:285
-msgid "Min Track Length"
-msgstr "Mindestgleislänge"
-
-#: ../bin/doption.c:286
-msgid "Connection Distance"
-msgstr "Verbindungs Abstand"
-
-#: ../bin/doption.c:287
-msgid "Connection Angle"
-msgstr "Verbindungs Winkel"
-
-#: ../bin/doption.c:288
-msgid "Turntable Angle"
-msgstr "Drehscheibenwinkel"
-
-#: ../bin/doption.c:289
-msgid "Max Coupling Speed"
-msgstr "Max. Ankuppelgeschwindigkeit"
-
-#: ../bin/doption.c:291
-msgid "Drag Distance"
-msgstr "Zeichne Entfernung"
-
-#: ../bin/doption.c:292
-msgid "Drag Timeout"
-msgstr "Abriss Zeitverzögerung"
-
-#: ../bin/doption.c:293
-msgid "Min Grid Spacing"
-msgstr "Mindestrasterabstand"
-
-#: ../bin/doption.c:294
-msgid "Check Point"
-msgstr "Sicherungskopie"
-
-#: ../bin/doption.c:295
-msgid "On Program Startup"
-msgstr "Beim Programmstart"
-
-#: ../bin/doption.c:305
-msgid "999.999999"
-msgstr "999.999999"
-
-#: ../bin/doption.c:306
-msgid "999.99999"
-msgstr "999,999999"
-
-#: ../bin/doption.c:307
-msgid "999.9999"
-msgstr "999,999"
-
-#: ../bin/doption.c:308 ../bin/doption.c:325
-msgid "999.999"
-msgstr "999.999"
-
-#: ../bin/doption.c:309 ../bin/doption.c:326
-msgid "999.99"
-msgstr "999.99"
-
-#: ../bin/doption.c:310 ../bin/doption.c:327
-msgid "999.9"
-msgstr "999.9"
-
-#: ../bin/doption.c:311
-msgid "999 7/8"
-msgstr "999 7/8"
-
-#: ../bin/doption.c:312
-msgid "999 63/64"
-msgstr "999 63/64"
-
-#: ../bin/doption.c:313
-msgid "999' 11.999\""
-msgstr "999' 11.999\""
-
-#: ../bin/doption.c:314
-msgid "999' 11.99\""
-msgstr "999' 11.99\""
-
-#: ../bin/doption.c:315
-msgid "999' 11.9\""
-msgstr "999' 11.9\""
-
-#: ../bin/doption.c:316
-msgid "999' 11 7/8\""
-msgstr "999' 11 7/8\""
-
-#: ../bin/doption.c:317
-msgid "999' 11 63/64\""
-msgstr "999' 11 63/64\""
-
-#: ../bin/doption.c:318
-msgid "999ft 11.999in"
-msgstr "999ft 11.999in"
-
-#: ../bin/doption.c:319
-msgid "999ft 11.99in"
-msgstr "999ft 11.99in"
-
-#: ../bin/doption.c:320
-msgid "999ft 11.9in"
-msgstr "999ft 11.9in"
-
-#: ../bin/doption.c:321
-msgid "999ft 11 7/8in"
-msgstr "999ft 11 7/8in"
-
-#: ../bin/doption.c:322
-msgid "999ft 11 63/64in"
-msgstr "999ft 11 63/64in"
-
-#: ../bin/doption.c:328
-msgid "999.999mm"
-msgstr "999.999mm"
-
-#: ../bin/doption.c:329
-msgid "999.99mm"
-msgstr "999.99mm"
-
-#: ../bin/doption.c:330
-msgid "999.9mm"
-msgstr "999.9mm"
-
-#: ../bin/doption.c:331
-msgid "999.999cm"
-msgstr "999.999cm"
-
-#: ../bin/doption.c:332
-msgid "999.99cm"
-msgstr "999.99cm"
-
-#: ../bin/doption.c:333
-msgid "999.9cm"
-msgstr "999.9cm"
-
-#: ../bin/doption.c:334
-msgid "999.999m"
-msgstr "999.999m"
-
-#: ../bin/doption.c:335
-msgid "999.99m"
-msgstr "999.99m"
-
-#: ../bin/doption.c:336
-msgid "999.9m"
-msgstr "999.9m"
-
-#: ../bin/doption.c:450
-msgid "Preferences"
-msgstr "Einstellungen"
-
-#: ../bin/doption.c:489
-msgid "Marker"
-msgstr "Markierung"
-
-#: ../bin/doption.c:490
-msgid "Border"
-msgstr "Rahmen"
-
-#: ../bin/doption.c:491
-msgid "Primary Axis"
-msgstr "Hauptachse"
-
-#: ../bin/doption.c:492
-msgid "Secondary Axis"
-msgstr "Nebenachse"
-
-#: ../bin/doption.c:493
-msgid "Normal Track"
-msgstr "Normales Gleis"
-
-#: ../bin/doption.c:494
-msgid "Selected Track"
-msgstr "Ausgewähltes Gleis"
-
-#: ../bin/doption.c:495
-msgid "Profile Path"
-msgstr "Höhenlinie"
-
-#: ../bin/doption.c:496
-msgid "Exception Track"
-msgstr "Ausnahmegleis"
-
-#: ../bin/doption.c:497
-msgid "Track Ties"
-msgstr "Gleisschwellen"
-
-#: ../bin/dpricels.c:45
-msgid "Price"
-msgstr "Preis"
-
-#: ../bin/dpricels.c:59
-msgid "Flex Track"
-msgstr "Flexgleis"
-
-#: ../bin/dpricels.c:60
-msgid "costs"
-msgstr "kostet"
-
-#: ../bin/dpricels.c:154
-msgid "Price List"
-msgstr "Preisliste"
-
-#: ../bin/dprmfile.c:101
-#, c-format
-msgid "Updating %s"
-msgstr "Aktualisiere %s"
-
-#: ../bin/dprmfile.c:228
-msgid "Show File Names"
-msgstr "Dateinamen anzeigen"
-
-#: ../bin/dprmfile.c:235
-msgid "Select all"
-msgstr "Alles auswählen"
-
-#: ../bin/dprmfile.c:238 ../bin/dprmfile.c:362
-msgid "Unload"
-msgstr "Entladen"
-
-#: ../bin/dprmfile.c:239
-msgid "Browse ..."
-msgstr "Durchsuchen..."
-
-#: ../bin/dprmfile.c:384
-msgid "Reload"
-msgstr "Neu laden"
-
-#: ../bin/dprmfile.c:533
-msgid "Parameter Files"
-msgstr "Parameterdateien"
-
-#: ../bin/dprmfile.c:534
-msgid "Load Parameters"
-msgstr "Lade Parameter"
-
-#: ../bin/dprmfile.c:534
-msgid "Parameter files|*.xtp"
-msgstr "Parameterdateien|*.xtp"
-
-#: ../bin/draw.c:1825
-msgid "Macro Zoom Mode"
-msgstr "Makro-Zoom-Modus"
-
-#: ../bin/draw.c:1827
-msgid "Use Shift+PageDwn to jump to preset Zoom In"
-msgstr ""
-"Mit Umschalt+Bild runter den gespeicherten unteren Zoom-Faktor verwenden"
-
-#: ../bin/draw.c:1832
-msgid "Scale 1:1 - Use Ctrl+PageDwn to go to Macro Zoom Mode"
-msgstr "Maßstab 1:1 - Mit Strg+Bild runter in den Makro-Zoom wechseln"
-
-#: ../bin/draw.c:1836
-msgid "Preset Zoom In Value selected. Shift+Ctrl+PageDwn to reset value"
-msgstr ""
-"Der gespeicherte untere Zoom-Faktor wird benutzt, Durch Umschalt+Strg+Bild "
-"runter zurücksetzen"
-
-#: ../bin/draw.c:1840
-#, c-format
-msgid "Zoom In Program Value %ld:1, Shift+PageDwn to use"
-msgstr ""
-"Programmierter Zoom Größer Wert %ld:1, Verwenden mit Umschalt+Bild runter"
-
-#: ../bin/draw.c:1860
-msgid "Use Shift+PageUp to jump to preset Zoom Out"
-msgstr "Mit Umschalt+Bild hoch den gespeicherten oberen Zoom-Faktor verwenden"
-
-#: ../bin/draw.c:1863
-msgid "At Maximum Zoom Out"
-msgstr "Maximal rausgezoomt"
-
-#: ../bin/draw.c:1868
-msgid "Preset Zoom Out Value selected. Shift+Ctrl+PageUp to reset value"
-msgstr ""
-"Der gespeicherte obere Zoom-Faktor wird benutzt, Durch Umschalt+Strg+Bild "
-"hoch zurücksetzen"
-
-#: ../bin/draw.c:1872
-#, c-format
-msgid "Zoom Out Program Value %ld:1 set, Shift+PageUp to use"
-msgstr ""
-"Programmierter Zoom Größer Wert %ld:1, Verwenden mit Umschalt+Bild hoch"
-
-#: ../bin/draw.c:2502
-msgid "Map"
-msgstr "Karte"
-
-#: ../bin/draw.c:2545
-msgid ""
-"Left Drag to Pan, Right Drag to Zoom, 0 to set Origin to 0,0, 1-9 to Zoom#, "
-"e to set to Extent"
-msgstr ""
-"Links ziehen um den Ausschnitt zu verschieben, rechts ziehen für Zoom, 0 "
-"setzt den Ausgangspunkt auf 0,0, 1-9 für die Zoomstufe, e um die Größe zu "
-"setzen"
-
-#: ../bin/draw.c:2550
-msgid "Pan Mode - drag point to new position"
-msgstr "Ausschnitt wählen - Punkt an die neue Position ziehen"
-
-#: ../bin/draw.c:2557
-msgid "Zoom Mode - drag Area to Zoom"
-msgstr "Zoom Modus -auf den ausgewählten Bereich zoomen"
-
-#: ../bin/draw.c:2686
-msgid "Pan/Zoom"
-msgstr "Verschieben/Zoomen"
-
-#: ../bin/drawgeom.c:80 ../bin/drawgeom.c:95
-msgid "Create Lines"
-msgstr "Erstelle Linien"
-
-#: ../bin/drawgeom.c:194 ../bin/drawgeom.c:207
-msgid "Drag to place next end point"
-msgstr "Ziehen um den nächsten Endpunkt zu setzen"
-
-#: ../bin/drawgeom.c:239
-msgid "Drag to set radius"
-msgstr "Radius durch Ziehen festlegen"
-
-#: ../bin/drawgeom.c:252
-msgid "Drag set box size"
-msgstr "Ziehen um die Größe des Rechteck zu setzen"
-
-#: ../bin/drawgeom.c:294 ../bin/drawgeom.c:303
-#, c-format
-msgid "Length = %s, Angle = %0.2f"
-msgstr "Länge = %s, Winkel = %0.2f"
-
-#: ../bin/drawgeom.c:320
-#, c-format
-msgid "Straight Line: Length=%s Angle=%0.3f"
-msgstr "Gerade Linie: Länge=%s Winkel=%0.3f"
-
-#: ../bin/drawgeom.c:343
-#, c-format
-msgid "Curved Line: Radius=%s Angle=%0.3f Length=%s"
-msgstr "Gebogene Linie: Radius=%s Winkel=%0.3f Länge=%s"
-
-#: ../bin/drawgeom.c:358
-#, c-format
-msgid "Radius = %s"
-msgstr "Radius = %s"
-
-#: ../bin/drawgeom.c:368
-#, c-format
-msgid "Width = %s, Height = %s"
-msgstr "Breite = %s, Höhe = %s"
-
-#: ../bin/drawgeom.c:652 ../bin/drawgeom.c:775
-msgid "Drag to Move Corner Point"
-msgstr "Ziehen um den Eckpunkt zu verschieben"
-
-#: ../bin/drawgeom.c:660
-msgid "Drag to Move Edge "
-msgstr "Ziehen um die Kante zu verschieben "
-
-#: ../bin/drawgeom.c:725
-#, c-format
-msgid "Length = %0.3f Angle = %0.3f"
-msgstr "Länge = %0.3f Winkel = %0.3f"
-
-#: ../bin/drawgeom.c:770
-msgid "Drag to Move Edge"
-msgstr "Ziehen um die Kante zu verschieben"
-
-#: ../bin/dxfoutput.c:228
-msgid "Export to DXF"
-msgstr "Export nach DXF"
-
-#: ../bin/fileio.c:235
-msgid ""
-"\n"
-"Do you want to continue?"
-msgstr ""
-"\n"
-"Wollen Sie fortsetzen?"
-
-#: ../bin/fileio.c:541
-msgid "Parameter"
-msgstr "Parameter"
-
-#: ../bin/fileio.c:678
-#, c-format
-msgid "putTitle: title too long: %s"
-msgstr "putTitle: Titel ist zu lang: %s"
-
-#: ../bin/fileio.c:698
-msgid "Unnamed Trackplan"
-msgstr "Unbenannter Gleisplan"
-
-#: ../bin/fileio.c:714 ../bin/fileio.c:1042
-msgid "Check Pointing"
-msgstr "Schreibe Sicherungskopie"
-
-#: ../bin/fileio.c:944
-msgid "Track"
-msgstr "Gleis"
-
-#: ../bin/fileio.c:1008
-msgid "Save Tracks"
-msgstr "Gleise speichern"
-
-#: ../bin/fileio.c:1022
-msgid "Save Tracks As"
-msgstr "Gleise speichern unter"
-
-#: ../bin/fileio.c:1030
-msgid "Open Tracks"
-msgstr "Gleise einlesen"
-
-#: ../bin/fileio.c:1163 ../bin/fileio.c:1181
-msgid "Import Tracks"
-msgstr "Gleise importieren"
-
-#: ../bin/fileio.c:1242
-msgid "Export Tracks"
-msgstr "Gleise exportieren"
-
-#: ../bin/fileio.c:1262
-msgid "Clipboard"
-msgstr "Zwischenablage"
-
-#: ../bin/fileio.c:1305 ../bin/misc.c:2153
-msgid "Paste"
-msgstr "Einfügen"
-
-#: ../bin/i18n.c:66
-#, c-format
-msgid "Gettext initialized (PACKAGE=%s, LOCALEDIR=%s, LC_ALL=%s).\n"
-msgstr "Gettext initialisiert (PACKAGE=%s, LOCALEDIR=%s, LC_ALL=%s).\n"
-
-#: ../bin/layout.c:234
-msgid "Room Width"
-msgstr "Zimmerbreite"
-
-#: ../bin/layout.c:235
-msgid " Height"
-msgstr " -länge"
-
-#: ../bin/layout.c:236
-msgid "Layout Title"
-msgstr "Gleisplantitel"
-
-#: ../bin/layout.c:237
-msgid "Subtitle"
-msgstr "Untertitel"
-
-#: ../bin/layout.c:241
-msgid " Gauge"
-msgstr " Spurweite"
-
-#: ../bin/layout.c:243
-msgid "Min Track Radius"
-msgstr "Mindestgleisradius"
-
-#: ../bin/layout.c:244
-msgid " Max Track Grade (%)"
-msgstr " Maximale Gleissteigung (%)"
-
-#: ../bin/layout.c:311
-msgid "Layout Options"
-msgstr "Gleisplanoptionen"
-
-#: ../bin/macro.c:90
-msgid "Message"
-msgstr "Mitteilung"
-
-#: ../bin/macro.c:93
-msgid "End"
-msgstr "Ende"
-
-#: ../bin/macro.c:174
-msgid "Recording"
-msgstr "Aufzeichnen"
-
-#: ../bin/macro.c:209
-msgid "End of Playback. Hit Step to exit\n"
-msgstr "Ende der Aufzeichnung. Schritt zum Beenden drücken\n"
-
-#: ../bin/macro.c:273
-msgid "Record"
-msgstr "Aufzeichnen"
-
-#: ../bin/macro.c:603
-msgid "Step"
-msgstr "Schritt"
-
-#: ../bin/macro.c:606 ../bin/macro.c:1302
-msgid "Next"
-msgstr "Nächster"
-
-#: ../bin/macro.c:609 ../bin/misc.c:654
-msgid "Quit"
-msgstr "Verlassen"
-
-#: ../bin/macro.c:612 ../../../../build/work/app/bin/bllnhlp.c:496
-msgid "Speed"
-msgstr "Geschwindigkeit"
-
-#: ../bin/macro.c:839 ../bin/macro.c:1163
-msgid "Demo"
-msgstr "Demo"
-
-#: ../bin/macro.c:998
-#, c-format
-msgid "Elapsed time %lu\n"
-msgstr "Abgelaufene Zeit %lu\n"
-
-#: ../bin/macro.c:1092
-msgid "Playback"
-msgstr "Wiedergabe"
-
-#: ../bin/macro.c:1166
-msgid "Slowest"
-msgstr "Langsamste"
-
-#: ../bin/macro.c:1167
-msgid "Slow"
-msgstr "Langsame"
-
-#: ../bin/macro.c:1169
-msgid "Fast"
-msgstr "Schnelle"
-
-#: ../bin/macro.c:1170
-msgid "Faster"
-msgstr "Schnellere"
-
-#: ../bin/macro.c:1171
-msgid "Fastest"
-msgstr "Schnellste"
-
-#: ../bin/macro.c:1289
-msgid "Can not find PARAMETER playback proc"
-msgstr "Kann die PARAMETER Wiedergabeprozedur nicht finden"
-
-#: ../bin/misc.c:164
-msgid "No Messages"
-msgstr "Keine Nachrichten"
-
-#: ../bin/misc.c:398 ../bin/misc.c:401
-msgid "ABORT"
-msgstr "ABBRUCH"
-
-#: ../bin/misc.c:400
-msgid ""
-"\n"
-"Do you want to save your layout?"
-msgstr ""
-"\n"
-"Wollen Sie Ihren Gleisplan speichern?"
-
-#: ../bin/misc.c:450
-#, c-format
-msgid "No help for %s"
-msgstr "Hilfe für %s nicht gefunden"
-
-#: ../bin/misc.c:553
-msgid ""
-"Save changes to the layout design before closing?\n"
-"\n"
-"If you don't save now, your unsaved changes will be discarded."
-msgstr ""
-"Sollen die Ãnderungen an Ihrem Gleisplan vor dem Verlassen gespeichert "
-"werden?\n"
-"\n"
-"Wenn Sie jetzt nicht speichern, werden Ihre nicht gespeicherten Ãnderungen "
-"verworfen."
-
-#: ../bin/misc.c:555 ../bin/misc.c:2197
-msgid "&Save"
-msgstr "&Speichern"
-
-#: ../bin/misc.c:555 ../bin/misc.c:579
-msgid "&Cancel"
-msgstr "&Abbruch"
-
-#: ../bin/misc.c:555
-msgid "&Don't Save"
-msgstr "&Nicht speichern"
-
-#: ../bin/misc.c:577
-msgid ""
-"Do you want to return to the last saved state?\n"
-"\n"
-"Revert will cause all changes done since last save to be lost."
-msgstr ""
-"Wollen Sie auf den letzten gespeicherten Stand zurücksetzen?\n"
-"Durch das Zurücksetzen werden alle Ãnderungen seit dem letzen Speichern "
-"verloren gehen."
-
-#: ../bin/misc.c:579
-msgid "&Revert"
-msgstr "Zurücksetzen"
-
-#: ../bin/misc.c:806
-msgid "XTrackCAD Font"
-msgstr "XTrackCAD Font"
-
-#: ../bin/misc.c:869
-#, c-format
-msgid "No balloon help for %s\n"
-msgstr "Kein Tooltip für %s vorhanden\n"
-
-#: ../bin/misc.c:871 ../../../../build/work/app/bin/bllnhlp.c:559
-#: ../../../../build/work/app/bin/bllnhlp.c:560
-#: ../../../../build/work/app/bin/bllnhlp.c:562
-#: ../../../../build/work/app/bin/bllnhlp.c:563
-#: ../../../../build/work/app/bin/bllnhlp.c:565
-#: ../../../../build/work/app/bin/bllnhlp.c:566
-#: ../../../../build/work/app/bin/bllnhlp.c:567
-#: ../../../../build/work/app/bin/bllnhlp.c:568
-#: ../../../../build/work/app/bin/bllnhlp.c:569
-#: ../../../../build/work/app/bin/bllnhlp.c:570
-#: ../../../../build/work/app/bin/bllnhlp.c:571
-#: ../../../../build/work/app/bin/bllnhlp.c:572
-#: ../../../../build/work/app/bin/bllnhlp.c:573
-#: ../../../../build/work/app/bin/bllnhlp.c:574
-#: ../../../../build/work/app/bin/bllnhlp.c:575
-#: ../../../../build/work/app/bin/bllnhlp.c:576
-#: ../../../../build/work/app/bin/bllnhlp.c:577
-#: ../../../../build/work/app/bin/bllnhlp.c:578
-#: ../../../../build/work/app/bin/bllnhlp.c:579
-#: ../../../../build/work/app/bin/bllnhlp.c:580
-#: ../../../../build/work/app/bin/bllnhlp.c:581
-#: ../../../../build/work/app/bin/bllnhlp.c:582
-#: ../../../../build/work/app/bin/bllnhlp.c:583
-#: ../../../../build/work/app/bin/bllnhlp.c:584
-#: ../../../../build/work/app/bin/bllnhlp.c:585
-#: ../../../../build/work/app/bin/bllnhlp.c:586
-#: ../../../../build/work/app/bin/bllnhlp.c:587
-#: ../../../../build/work/app/bin/bllnhlp.c:588
-#: ../../../../build/work/app/bin/bllnhlp.c:589
-#: ../../../../build/work/app/bin/bllnhlp.c:590
-#: ../../../../build/work/app/bin/bllnhlp.c:591
-#: ../../../../build/work/app/bin/bllnhlp.c:592
-#: ../../../../build/work/app/bin/bllnhlp.c:593
-#: ../../../../build/work/app/bin/bllnhlp.c:594
-#: ../../../../build/work/app/bin/bllnhlp.c:595
-#: ../../../../build/work/app/bin/bllnhlp.c:596
-#: ../../../../build/work/app/bin/bllnhlp.c:597
-#: ../../../../build/work/app/bin/bllnhlp.c:598
-#: ../../../../build/work/app/bin/bllnhlp.c:599
-#: ../../../../build/work/app/bin/bllnhlp.c:600
-#: ../../../../build/work/app/bin/bllnhlp.c:601
-#: ../../../../build/work/app/bin/bllnhlp.c:602
-#: ../../../../build/work/app/bin/bllnhlp.c:603
-#: ../../../../build/work/app/bin/bllnhlp.c:604
-#: ../../../../build/work/app/bin/bllnhlp.c:605
-#: ../../../../build/work/app/bin/bllnhlp.c:606
-#: ../../../../build/work/app/bin/bllnhlp.c:607
-#: ../../../../build/work/app/bin/bllnhlp.c:608
-#: ../../../../build/work/app/bin/bllnhlp.c:609
-#: ../../../../build/work/app/bin/bllnhlp.c:610
-#: ../../../../build/work/app/bin/bllnhlp.c:611
-#: ../../../../build/work/app/bin/bllnhlp.c:612
-#: ../../../../build/work/app/bin/bllnhlp.c:613
-#: ../../../../build/work/app/bin/bllnhlp.c:614
-#: ../../../../build/work/app/bin/bllnhlp.c:615
-#: ../../../../build/work/app/bin/bllnhlp.c:616
-#: ../../../../build/work/app/bin/bllnhlp.c:617
-#: ../../../../build/work/app/bin/bllnhlp.c:618
-#: ../../../../build/work/app/bin/bllnhlp.c:619
-#: ../../../../build/work/app/bin/bllnhlp.c:621
-msgid "No Help"
-msgstr "Keine Hilfe vorhanden"
-
-#: ../bin/misc.c:1135 ../bin/misc.c:1140 ../bin/misc.c:1205
-msgid ""
-"Cancelling the current command will undo the changes\n"
-"you are currently making. Do you want to update?"
-msgstr ""
-"Abbruch des aktuelle Befehls wird alle aktuell laufenden\n"
-"Änderungen zurücknehmen. Soll aktualisiert werden?"
-
-#: ../bin/misc.c:1728
-msgid "Sticky Commands"
-msgstr "Wiederholte Befehle"
-
-#: ../bin/misc.c:1741
-msgid "File Buttons"
-msgstr "Dateischaltflächen"
-
-#: ../bin/misc.c:1742
-msgid "Zoom Buttons"
-msgstr "Lupenknöpfe"
-
-#: ../bin/misc.c:1743
-msgid "Undo Buttons"
-msgstr "Rückgängig/Wiederholen"
-
-#: ../bin/misc.c:1744
-msgid "Easement Button"
-msgstr "Übergangsbogen"
-
-#: ../bin/misc.c:1745
-msgid "SnapGrid Buttons"
-msgstr "Fangraster"
-
-#: ../bin/misc.c:1746
-msgid "Create Track Buttons"
-msgstr "Erstelle Gleise"
-
-#: ../bin/misc.c:1747
-msgid "Layout Control Elements"
-msgstr "Elemente zur Anlagensteuerung"
-
-#: ../bin/misc.c:1748
-msgid "Modify Track Buttons"
-msgstr "Verändere Gleise"
-
-#: ../bin/misc.c:1749
-msgid "Properties/Select"
-msgstr "Eigenschaften/Auswählen"
-
-#: ../bin/misc.c:1750
-msgid "Track Group Buttons"
-msgstr "Objekt Werkzeuge"
-
-#: ../bin/misc.c:1751
-msgid "Train Group Buttons"
-msgstr "Zugbetrieb"
-
-#: ../bin/misc.c:1752
-msgid "Create Misc Buttons"
-msgstr "Zeichnen/Schrift Werkzeuge"
-
-#: ../bin/misc.c:1753
-msgid "Ruler Button"
-msgstr "Linealschaltfläche"
-
-#: ../bin/misc.c:1754
-msgid "Layer Buttons"
-msgstr "Ebenenknöpfe"
-
-#: ../bin/misc.c:1755
-msgid "Hot Bar"
-msgstr "Teilekatalog"
-
-#: ../bin/misc.c:1838 ../../../../build/work/app/bin/bllnhlp.c:72
-msgid "Change Elevations"
-msgstr "Höhen ändern"
-
-#: ../bin/misc.c:1838
-msgid "Change"
-msgstr "Ändern"
-
-#: ../bin/misc.c:1855
-msgid "Angle:"
-msgstr "Winkel:"
-
-#: ../bin/misc.c:1861
-msgid "Move X:"
-msgstr "Verschieben X:"
-
-#: ../bin/misc.c:1862
-msgid "Move Y:"
-msgstr "Verschieben Y:"
-
-#: ../bin/misc.c:1917
-msgid "Enter Move ..."
-msgstr "Verschiebung eingeben..."
-
-#: ../bin/misc.c:1924
-msgid "180 "
-msgstr "180 "
-
-#: ../bin/misc.c:1925
-msgid "90 CW"
-msgstr "90 Uhrzeiger"
-
-#: ../bin/misc.c:1926
-msgid "45 CW"
-msgstr "45 Uhrzeiger"
-
-#: ../bin/misc.c:1927
-msgid "30 CW"
-msgstr "30 Uhrzeiger"
-
-#: ../bin/misc.c:1928
-msgid "15 CW"
-msgstr "15 Uhrzeiger"
-
-#: ../bin/misc.c:1929
-msgid "15 CCW"
-msgstr "15 gegen Uhr"
-
-#: ../bin/misc.c:1930
-msgid "30 CCW"
-msgstr "30 gehen Uhr"
-
-#: ../bin/misc.c:1931
-msgid "45 CCW"
-msgstr "45 gegen Uhr"
-
-#: ../bin/misc.c:1932
-msgid "90 CCW"
-msgstr "90 gegen Uhr"
-
-#: ../bin/misc.c:1933
-msgid "Enter Angle ..."
-msgstr "Winkel eingeben..."
-
-#: ../bin/misc.c:1965
-msgid "Debug"
-msgstr "Fehlersuche (Debug)"
-
-#: ../bin/misc.c:2123
-msgid "&File"
-msgstr "&Datei"
-
-#: ../bin/misc.c:2124
-msgid "&Edit"
-msgstr "&Bearbeiten"
-
-#: ../bin/misc.c:2125
-msgid "&View"
-msgstr "&Ansicht"
-
-#: ../bin/misc.c:2126
-msgid "&Add"
-msgstr "&Hinzufügen"
-
-#: ../bin/misc.c:2127
-msgid "&Change"
-msgstr "&Ändern"
-
-#: ../bin/misc.c:2128
-msgid "&Draw"
-msgstr "&Zeichnen"
-
-#: ../bin/misc.c:2129
-msgid "&Manage"
-msgstr "&Verwalten"
-
-#: ../bin/misc.c:2130
-msgid "&Options"
-msgstr "&Optionen"
-
-#: ../bin/misc.c:2131
-msgid "&Macro"
-msgstr "&Makro"
-
-#: ../bin/misc.c:2132
-msgid "&Window"
-msgstr "&Fenster"
-
-#: ../bin/misc.c:2133
-msgid "&Help"
-msgstr "&Hilfe"
-
-#: ../bin/misc.c:2139 ../bin/misc.c:2140
-msgid "Commands"
-msgstr "Befehle"
-
-#: ../bin/misc.c:2141
-msgid "Undo"
-msgstr "Rückgängig"
-
-#: ../bin/misc.c:2142
-msgid "Redo"
-msgstr "Wiederholen"
-
-#: ../bin/misc.c:2143 ../bin/misc.c:2144
-msgid "Zoom In"
-msgstr "Zoom größer"
-
-#: ../bin/misc.c:2145 ../bin/misc.c:2146
-msgid "Zoom Out"
-msgstr "Zoom kleiner"
-
-#: ../bin/misc.c:2147
-msgid "SnapGrid Enable"
-msgstr "Fangraster aktivieren"
-
-#: ../bin/misc.c:2148
-msgid "SnapGrid Show"
-msgstr "Fangraster anzeigen"
-
-#: ../bin/misc.c:2149 ../bin/misc.c:2278
-msgid "Show/Hide Map"
-msgstr "Karte anzeigen/verbergen"
-
-#: ../bin/misc.c:2152
-msgid "Copy"
-msgstr "Kopiere"
-
-#: ../bin/misc.c:2154
-msgid "Select All"
-msgstr "Alles auswählen"
-
-#: ../bin/misc.c:2155 ../bin/misc.c:2235
-msgid "Select Current Layer"
-msgstr "Aktuelle Ebene auswählen"
-
-#: ../bin/misc.c:2156
-msgid "Deselect All"
-msgstr "Alles Abwählen"
-
-#: ../bin/misc.c:2164 ../bin/misc.c:2165
-msgid "More"
-msgstr "Weiter"
-
-#: ../bin/misc.c:2193
-msgid "&New ..."
-msgstr "&Neu..."
-
-#: ../bin/misc.c:2194
-msgid "&Open ..."
-msgstr "&Öffnen..."
-
-#: ../bin/misc.c:2198
-msgid "Save &As ..."
-msgstr "Speichern &unter..."
-
-#: ../bin/misc.c:2199
-msgid "Revert"
-msgstr "Neu laden"
-
-#: ../bin/misc.c:2201
-msgid "P&rint Setup ..."
-msgstr "Druckereinstellungen..."
-
-#: ../bin/misc.c:2204
-msgid "&Import"
-msgstr "Import"
-
-#: ../bin/misc.c:2205
-msgid "Export to &Bitmap"
-msgstr "Export als Bitmap"
-
-#: ../bin/misc.c:2206
-msgid "E&xport"
-msgstr "Export"
-
-#: ../bin/misc.c:2207
-msgid "Export D&XF"
-msgstr "Export als DXF"
-
-#: ../bin/misc.c:2210
-msgid "Parameter &Files ..."
-msgstr "Parameterdateien..."
-
-#: ../bin/misc.c:2211
-msgid "No&tes ..."
-msgstr "Notizen..."
-
-#: ../bin/misc.c:2216
-msgid "E&xit"
-msgstr "Beenden"
-
-#: ../bin/misc.c:2222
-msgid "&Undo"
-msgstr "Rückgängig"
-
-#: ../bin/misc.c:2223
-msgid "R&edo"
-msgstr "Wiederholen"
-
-#: ../bin/misc.c:2225
-msgid "Cu&t"
-msgstr "Ausschneiden"
-
-#: ../bin/misc.c:2226
-msgid "&Copy"
-msgstr "Kopieren"
-
-#: ../bin/misc.c:2227
-msgid "&Paste"
-msgstr "Einfügen"
-
-#: ../bin/misc.c:2228
-msgid "De&lete"
-msgstr "Löschen"
-
-#: ../bin/misc.c:2234
-msgid "Select &All"
-msgstr "Alles auswählen"
-
-#: ../bin/misc.c:2236
-msgid "&Deselect All"
-msgstr "Alles abwählen"
-
-#: ../bin/misc.c:2237
-msgid "&Invert Selection"
-msgstr "Auswahl umkehren"
-
-#: ../bin/misc.c:2238
-msgid "Select Stranded Track"
-msgstr "Vereinzelte Gleise auswählen"
-
-#: ../bin/misc.c:2240
-msgid "Tu&nnel"
-msgstr "Tunnel"
-
-#: ../bin/misc.c:2241
-msgid "A&bove"
-msgstr "Darüber"
-
-#: ../bin/misc.c:2242
-msgid "Belo&w"
-msgstr "Darunter"
-
-#: ../bin/misc.c:2245
-msgid "Thin Tracks"
-msgstr "Dünne Gleise"
-
-#: ../bin/misc.c:2246
-msgid "Medium Tracks"
-msgstr "Mittlere Gleise"
-
-#: ../bin/misc.c:2247
-msgid "Thick Tracks"
-msgstr "Dicke Gleise"
-
-#: ../bin/misc.c:2252
-msgid "Zoom &In"
-msgstr "Zoom größer"
-
-#: ../bin/misc.c:2253
-msgid "&Zoom"
-msgstr "&Zoom"
-
-#: ../bin/misc.c:2254
-msgid "Zoom &Out"
-msgstr "Zoom kleiner"
-
-#: ../bin/misc.c:2263
-msgid "&Redraw"
-msgstr "Neu zeichnen"
-
-#: ../bin/misc.c:2264
-msgid "Redraw All"
-msgstr "Alles neu zeichnen"
-
-#: ../bin/misc.c:2267
-msgid "Enable SnapGrid"
-msgstr "Fangraster aktivieren"
-
-#: ../bin/misc.c:2269
-msgid "Show SnapGrid"
-msgstr "Fangraster zeigen"
-
-#: ../bin/misc.c:2283
-msgid "&Tool Bar"
-msgstr "Werkzeugleiste anpassen"
-
-#: ../bin/misc.c:2334
-msgid "&Loosen Tracks"
-msgstr "Gleise lockern"
-
-#: ../bin/misc.c:2343
-msgid "Raise/Lower Elevations"
-msgstr "Höhen auf/ab"
-
-#: ../bin/misc.c:2348
-msgid "Recompute Elevations"
-msgstr "Höhen neu berechnen"
-
-#: ../bin/misc.c:2352
-msgid "Change Scale"
-msgstr "Maßstab ändern"
-
-#: ../bin/misc.c:2369
-msgid "L&ayout ..."
-msgstr "Gleisplan..."
-
-#: ../bin/misc.c:2370
-msgid "&Display ..."
-msgstr "Anzeige..."
-
-#: ../bin/misc.c:2371
-msgid "Co&mmand ..."
-msgstr "Befehl..."
-
-#: ../bin/misc.c:2372
-msgid "&Easements ..."
-msgstr "Übergangsbögen..."
-
-#: ../bin/misc.c:2373
-msgid "&Fonts ..."
-msgstr "Schri&ftarten..."
-
-#: ../bin/misc.c:2374
-msgid "Stic&ky ..."
-msgstr "Dauerhaft..."
-
-#: ../bin/misc.c:2377
-msgid "&Debug ..."
-msgstr "&Fehlersuche..."
-
-#: ../bin/misc.c:2379
-msgid "&Preferences ..."
-msgstr "Einstellungen..."
-
-#: ../bin/misc.c:2380
-msgid "&Colors ..."
-msgstr "Farben..."
-
-#: ../bin/misc.c:2385
-msgid "&Record ..."
-msgstr "Aufzeichnen..."
-
-#: ../bin/misc.c:2386
-msgid "&Play Back ..."
-msgstr "Wiedergeben..."
-
-#: ../bin/misc.c:2392
-msgid "Main window"
-msgstr "Hauptfenster"
-
-#: ../bin/misc.c:2404
-msgid "Recent Messages"
-msgstr "Letzte Mitteilungen"
-
-#: ../bin/misc.c:2410
-msgid "Tip of the Day..."
-msgstr "Tipp des Tages..."
-
-#: ../bin/misc.c:2411
-msgid "&Demos"
-msgstr "&Demos"
-
-#: ../bin/misc.c:2415 ../bin/smalldlg.c:220
-msgid "About"
-msgstr "Über"
-
-#: ../bin/misc.c:2425
-msgid "Tur&nout Designer..."
-msgstr "Weichendesigner..."
-
-#: ../bin/misc.c:2427
-msgid "Layout &Control Elements"
-msgstr "Steuerungselemente"
-
-#: ../bin/misc.c:2428
-msgid "&Group"
-msgstr "&Gruppierung"
-
-#: ../bin/misc.c:2429
-msgid "&Ungroup"
-msgstr "Gruppierung aufheben"
-
-#: ../bin/misc.c:2431
-msgid "Custom defined parts..."
-msgstr "Eigene Teile..."
-
-#: ../bin/misc.c:2432
-msgid "Update Turnouts and Structures"
-msgstr "Weichen und Gebäude aktualisieren"
-
-#: ../bin/misc.c:2438
-msgid "Layers ..."
-msgstr "Ebenen..."
-
-#: ../bin/misc.c:2441
-msgid "Parts &List ..."
-msgstr "Teile&liste..."
-
-#: ../bin/misc.c:2442
-msgid "Price List..."
-msgstr "Preisliste..."
-
-#: ../bin/misc.c:2523
-msgid ""
-"Program was not terminated properly. Do you want to resume working on the "
-"previous trackplan?"
-msgstr ""
-"Das Programm wurde nicht ordnungsgemäss beendet. Wollen Sie die Bearbeitung "
-"des vorherigen Gleisplans fortsetzen?"
-
-#: ../bin/misc.c:2524
-msgid "Resume"
-msgstr "Fortsetzen"
-
-#: ../bin/misc.c:2637
-#, c-format
-msgid "Unnamed Trackplan - %s(%s)"
-msgstr "Unbenannter Gleisplan - %s(%s)"
-
-#: ../bin/misc.c:2708
-msgid "Initializing commands"
-msgstr "Initialisiere Befehle"
-
-#: ../bin/misc.c:2717
-msgid "Initializing menus"
-msgstr "Initialisiere Menüs"
-
-#: ../bin/misc.c:2754
-msgid "Reading parameter files"
-msgstr "Einlesen der Parameterdateien"
-
-#: ../bin/misc.c:2788
-msgid "Initialization complete"
-msgstr "Initialisierung beendet"
-
-#: ../bin/param.c:92
-msgid "Unexpected End Of String"
-msgstr "Unerwartetes Zeichenkettenende"
-
-#: ../bin/param.c:99
-msgid "Expected digit"
-msgstr "Erwartete Ziffer"
-
-#: ../bin/param.c:106
-msgid "Overflow"
-msgstr "Ãœberlau"
-
-#: ../bin/param.c:154
-msgid "Divide by 0"
-msgstr "Division durch 0"
-
-#: ../bin/param.c:162
-msgid "Expected /"
-msgstr "Erwartet /"
-
-#: ../bin/param.c:248
-msgid "Invalid Units Indicator"
-msgstr "Ungültige Masseinheit"
-
-#: ../bin/param.c:276
-msgid "Expected End Of String"
-msgstr "Zeichenkettenende erwartet"
-
-#: ../bin/param.c:302 ../bin/param.c:1358
-#, c-format
-msgid "Invalid Number"
-msgstr "Ungültige Zahl"
-
-#: ../bin/param.c:361
-msgid "End Of String"
-msgstr "Ende der Zeichenkette"
-
-#: ../bin/param.c:1365
-#, c-format
-msgid "Enter a value > %ld"
-msgstr "Einen Wert größer als %ld eingeben"
-
-#: ../bin/param.c:1367
-#, c-format
-msgid "Enter a value < %ld"
-msgstr "Einen Wert kleiner als %ld eingeben"
-
-#: ../bin/param.c:1369
-#, c-format
-msgid "Enter a value between %ld and %ld"
-msgstr "Einen Wert zwischen %ld und %ld eingeben"
-
-#: ../bin/param.c:1417
-#, c-format
-msgid "Enter a value > %s"
-msgstr "Einen Wert größer als %s eingeben"
-
-#: ../bin/param.c:1420
-#, c-format
-msgid "Enter a value < %s"
-msgstr "Einen Wert kleiner als %s eingeben"
-
-#: ../bin/param.c:1423
-#, c-format
-msgid "Enter a value between %s and %s"
-msgstr "Einen Wert zwischen %s und %s eingeben"
-
-#: ../bin/param.c:2563
-msgid "Help"
-msgstr "Hilfe"
-
-#: ../bin/smalldlg.c:63
-msgid "Show tips at start"
-msgstr "Tipps beim Start anzeigen"
-
-#: ../bin/smalldlg.c:69
-msgid "Did you know..."
-msgstr "Wussten Sie schon..."
-
-#: ../bin/smalldlg.c:71
-msgid "Previous Tip"
-msgstr "Vorheriger Tipp"
-
-#: ../bin/smalldlg.c:72
-msgid "Next Tip"
-msgstr "Nächster Tipp"
-
-#: ../bin/smalldlg.c:89
-msgid "Tip of the Day"
-msgstr "Tipp des Tages"
-
-#: ../bin/smalldlg.c:98
-msgid "No tips are available"
-msgstr "Es sind keine Tipps verfügbar"
-
-#: ../bin/smalldlg.c:197
-msgid ""
-"XTrackCAD is a CAD (computer-aided design) program for designing model "
-"railroad layouts."
-msgstr ""
-"XTrackCAD ist ein CAD (Computer-unterstützter Entwurf) Programm\n"
-"zum Entwerfen von Modelleisenbahnanlagen."
-
-#: ../bin/tbezier.c:170
-#, c-format
-msgid "Bezier Curve: length=%s min radius=%s"
-msgstr "Bezier Kurve: Länge = %s Kleinster Radius = %s"
-
-#: ../bin/tbezier.c:237 ../bin/tbezier.c:244 ../bin/tcornu.c:287
-#: ../bin/tcornu.c:292
-msgid "End Angle"
-msgstr "Endwinkel"
-
-#: ../bin/tbezier.c:241
-msgid "Ctl Pt 1: X,Y"
-msgstr "Kontrollpunkt 1: X,Y"
-
-#: ../bin/tbezier.c:242
-msgid "Ctl Pt 2: X,Y"
-msgstr "Kontrollpunkt 1: X,Y"
-
-#: ../bin/tbezier.c:248
-msgid "MinRadius"
-msgstr "Mindestradius"
-
-#: ../bin/tbezier.c:253
-msgid "Line Color"
-msgstr "Linienfarbe"
-
-#: ../bin/tbezier.c:366
-#, c-format
-msgid ""
-"Bezier %s(%d): Layer=%u MinRadius=%s Length=%s EP=[%0.3f,%0.3f] [%0.3f,"
-"%0.3f] CP1=[%0.3f,%0.3f] CP2=[%0.3f, %0.3f]"
-msgstr ""
-"Bezier-Kurve %s(%d): Ebene=%u Minimal-Radius=%s Länge=%s EP=[%0.3f,%0.3f] "
-"[%0.3f,%0.3f] CP1=[%0.3f,%0.3f] CP2=[%0.3f, %0.3f]"
-
-#: ../bin/tbezier.c:436
-msgid "Bezier Track"
-msgstr "Beziergleis"
-
-#: ../bin/tbezier.c:805
-msgid "Merge Bezier"
-msgstr "Bezierkurven zusammenfassen"
-
-#: ../bin/tcornu.c:214
-#, c-format
-msgid "Cornu Curve: length=%0.3f min radius=%0.3f"
-msgstr "Klothoide: Länge = %0.3f Mindestradius ) %0.3f"
-
-#: ../bin/tcornu.c:288
-msgid "Radius "
-msgstr "Radius "
-
-#: ../bin/tcornu.c:296
-msgid "Minimum Radius"
-msgstr "Mindestradius"
-
-#: ../bin/tcornu.c:297
-msgid "Max Rate Of Curve Change/Scale"
-msgstr "Maximale Änderungsrate der Kurve"
-
-#: ../bin/tcornu.c:298
-msgid "Total Winding Angle"
-msgstr "Gesamtwinkel"
-
-#: ../bin/tcornu.c:434
-#, c-format
-msgid ""
-"Cornu Track(%d): Layer=%u MinRadius=%s Length=%s EP=[%0.3f,%0.3f] [%0.3f,"
-"%0.3f]"
-msgstr ""
-"Cornu-Bogen(%d): Ebene=%u Minimal-Radius=%s Länge=%s EP=[%0.3f,%0.3f] [%0.3f,"
-"%0.3f]"
-
-#: ../bin/tcornu.c:487
-msgid "Cornu Track"
-msgstr "Cornu-Gleis"
-
-#: ../bin/tcornu.c:956
-msgid "Merge Cornu"
-msgstr "Cornu-Kurven zusammenfassen"
-
-#: ../bin/tcurve.c:235
-#, c-format
-msgid "Helix: turns=%ld length=%s grade=%0.1f%% sep=%s"
-msgstr "Gleiswendel: Windungen=%ld Länge=%s Steigung=%0.1f%% Abstand=%s"
-
-#: ../bin/tcurve.c:241
-#, c-format
-msgid "Helix: turns=%ld length=%s"
-msgstr "Gleiswendel: Windungen=%ld Länge=%s"
-
-#: ../bin/tcurve.c:356 ../bin/tcurve.c:358 ../bin/tease.c:504
-#: ../bin/tease.c:506 ../bin/tstraigh.c:86 ../bin/tstraigh.c:88
-msgid "Z"
-msgstr "Z"
-
-#: ../bin/tcurve.c:364
-msgid "Angular Length"
-msgstr "Winkellänge"
-
-#: ../bin/tcurve.c:544
-#, c-format
-msgid ""
-"Helix Track(%d): Layer=%d Radius=%s Turns=%ld Length=%s Center=[%s,%s] "
-"EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A%0.3f]"
-msgstr ""
-"Gleiswendel(%d): Ebene=%d Radius=%s Windungen=%ld Länge=%s Mitte=[%s,%s] "
-"EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A%0.3f]"
-
-#: ../bin/tcurve.c:554
-#, c-format
-msgid ""
-"Curved Track(%d): Layer=%d Radius=%s Length=%s Center=[%s,%s] EP=[%0.3f,"
-"%0.3f A%0.3f] [%0.3f,%0.3f A%0.3f]"
-msgstr ""
-"Gleisbogenl(%d): Ebene=%d Radius=%s Länge=%s Mitte=[%s,%s] EP=[%0.3f,%0.3f A"
-"%0.3f] [%0.3f,%0.3f A%0.3f]"
-
-#: ../bin/tcurve.c:631
-msgid "Helix Track"
-msgstr "Gleiswendel"
-
-#: ../bin/tcurve.c:637
-msgid "Curved Track"
-msgstr "Gleisbogen"
-
-#: ../bin/tcurve.c:991
-msgid "Merge Curves"
-msgstr "Kurven zusammenfassen"
-
-#: ../bin/tcurve.c:1058
-msgid "Drag to change angle or create tangent"
-msgstr "Ziehen um den Winkel zu ändern oder eine Tangente zu erstellen"
-
-#: ../bin/tcurve.c:1091 ../bin/tcurve.c:1123
-msgid "Curved "
-msgstr "Gebogen "
-
-#: ../bin/tcurve.c:1097
-msgid "Tangent "
-msgstr "Tangente "
-
-#: ../bin/tcurve.c:1106
-#, c-format
-msgid "Tangent track: Length %s Angle %0.3f"
-msgstr "Gleistangente: Länge=%s Winkel=%0.3f"
-
-#: ../bin/tcurve.c:1128
-#, c-format
-msgid "Curved: Radius=%s Length=%s Angle=%0.3f"
-msgstr "Bogen: Radius=%s Länge=%s Winkel=%0.3f"
-
-#: ../bin/tease.c:511
-msgid "l0"
-msgstr "l0"
-
-#: ../bin/tease.c:512
-msgid "l1"
-msgstr "l1"
-
-#: ../bin/tease.c:554
-#, c-format
-msgid ""
-"Joint Track(%d): Layer=%d Length=%0.3f EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A"
-"%0.3f]"
-msgstr ""
-"Übergangsbogen(%d): Ebene=%d Länge=%0.3f EP=[%0.3f,%0.3f A%0.3f] [%0.3f,"
-"%0.3f A%0.3f]"
-
-#: ../bin/tease.c:599
-msgid "Easement Track"
-msgstr "Ügangsbogengleis"
-
-#: ../bin/tease.c:1265
-msgid "Merge Easements"
-msgstr "Übergangsbögen zusammenfassen"
-
-#: ../bin/tease.c:1330
-msgid "Split Easement Curve"
-msgstr "Übergangsbogen auftrennen"
-
-#: ../bin/track.c:1167
-msgid "Move Objects Above"
-msgstr "Objekte nach oben"
-
-#: ../bin/track.c:1187
-msgid "Mode Objects Below"
-msgstr "Objekte nach unten"
-
-#: ../bin/track.c:1415
-msgid "Audit"
-msgstr "Protokoll"
-
-#: ../bin/track.c:1690
-#, c-format
-msgid "%d Track(s) loosened"
-msgstr "%d Gleis(e) gelockert"
-
-#: ../bin/track.c:1697
-msgid "No tracks loosened"
-msgstr "Keine Gleise gelockert"
-
-#: ../bin/track.c:1707 ../bin/track.c:1711
-#, c-format
-msgid "Connecting a non-track(%d) to (%d)"
-msgstr "Verbinde ein sonstiges Objekt (%d) mit einem Gleis (%d)"
-
-#: ../bin/track.c:1773
-msgid "Join Abutting Tracks"
-msgstr "Aneinander grenzende Gleise verbinden"
-
-#: ../bin/track.c:2025 ../bin/tstraigh.c:556
-#, c-format
-msgid "Straight: Length=%s Angle=%0.3f"
-msgstr "Gerade: Länge=%s Winkel=%0.3f"
-
-#: ../bin/tstraigh.c:236
-#, c-format
-msgid ""
-"Straight Track(%d): Layer=%d Length=%s EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A"
-"%0.3f]"
-msgstr ""
-"Gleisgerade(%d): Ebene=%d Länge=%s EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A"
-"%0.3f]"
-
-#: ../bin/tstraigh.c:470
-msgid "Extending Straight Track"
-msgstr "Gleisgerade verlängern"
-
-#: ../bin/tstraigh.c:549
-msgid "Straight "
-msgstr "Gerade "
-
-#: ../wlib/gtklib/filesel.c:114
-msgid "All files"
-msgstr "Alle Dateien"
-
-#: ../wlib/gtklib/font.c:278
-msgid "Font Select"
-msgstr "Auswahl der Schriftart"
-
-#: ../wlib/gtklib/help.c:68
-msgid "&Contents"
-msgstr "Inhalt"
-
-#: ../wlib/gtklib/ixhelp.c:243
-msgid "Home"
-msgstr "Startseite"
-
-#: ../wlib/gtklib/ixhelp.c:247
-msgid "Contents"
-msgstr "Inhaltsverzeichnis"
-
-#: ../wlib/gtklib/menu.c:541
-msgid "<Empty List>"
-msgstr "<Leere Liste>"
-
-#: ../wlib/gtklib/notice.c:96 ../wlib/mswlib/mswmisc.c:1988
-#: ../wlib/mswlib/mswmisc.c:2031
-msgid "Warning"
-msgstr "Warnung"
-
-#: ../wlib/gtklib/notice.c:101 ../wlib/mswlib/mswmisc.c:1993
-msgid "Error"
-msgstr "Fehler"
-
-#: ../wlib/gtklib/text.c:286
-#, c-format
-msgid "%d of %d"
-msgstr "%d von %d"
-
-#: ../wlib/gtklib/wpref.c:114
-#, c-format
-msgid ""
-"The required configuration files could not be located in the expected "
-"location.\n"
-"\n"
-"Usually this is an installation problem. Make sure that these files are "
-"installed in either \n"
-" %s/share/xtrkcad or\n"
-" /usr/lib/%s or\n"
-" /usr/local/lib/%s\n"
-"If this is not possible, the environment variable %s must contain the name "
-"of the correct directory."
-msgstr ""
-"Die notwenidgen Konfigurationsdaten konnten nicht im erwarteten Verzeichnis "
-"gefunden werden.\n"
-"\n"
-"Üblicherweise ist dies ein Instalaltionsproblem. Stellen Sie sicher, dass "
-"diese Dateien in entweder\n"
-" %s/share/xtrkcad oder\n"
-" /usr/lib/%s oder\n"
-" /usr/local/lib/%s\n"
-"gespeichert sind. Sollte das nicht möglich sein, muss die Umgebungsvariable "
-"%s den Namen des korrekten Verzeichnis enthalten."
-
-#: ../wlib/gtklib/wpref.c:148 ../wlib/gtklib/wpref.c:193
-msgid "HOME is not set"
-msgstr "HOME ist nicht gesetzt"
-
-#: ../wlib/gtklib/wpref.c:148 ../wlib/gtklib/wpref.c:157
-#: ../wlib/gtklib/wpref.c:193
-msgid "Exit"
-msgstr "Beenden"
-
-#: ../wlib/gtklib/wpref.c:156
-#, c-format
-msgid "Cannot create %s"
-msgstr "Kann %s nicht erstellen"
-
-#: ../wlib/mswlib/mswmenu.c:884
-msgid "Ctrl+"
-msgstr "Strg+"
-
-#: ../wlib/mswlib/mswmenu.c:889
-msgid "Alt+"
-msgstr "Alt+"
-
-#: ../wlib/mswlib/mswmenu.c:894
-msgid "Shift+"
-msgstr "Umsch+"
-
-#: ../wlib/mswlib/mswmenu.c:900
-msgid "Space"
-msgstr "Abstand"
-
-#: ../../../../build/work/app/help/messages.h:9
-#, c-format
-msgid ""
-"MSG_CANT_PLACE_FROGPOINTS\tFrog|Points cannot be placed on a turnout, circle "
-"or helix.\tA %s cannot be placed on a turnout, circle or helix."
-msgstr ""
-"MSG_CANT_PLACE_FROGPOINTS\tHerzstück|Zungen können nicht auf eine Weiche, "
-"einen Kreis oder eine Gleiswendel gesetzt werden.\tEin %s kann nicht auf "
-"eine Weiche, einen Kreis oder eine Gleiswendel gelegt werden."
-
-#: ../../../../build/work/app/help/messages.h:10
-msgid ""
-"MSG_SEL_TRK_FROZEN\tA frozen layer contains selected track. Command cannot "
-"be executed."
-msgstr ""
-"MSG_SEL_TRK_FROZEN\tEine eingefrorene Ebene enthält ausgewählte...\tEine "
-"eingefrorene Ebene enthält ausgewählte Gleise.\n"
-"Der Befehl kann nicht ausgeführt werden."
-
-#: ../../../../build/work/app/help/messages.h:11
-msgid "MSG_HELIX_TURNS_GTR_0\tA Helix must have one or more loops of track."
-msgstr ""
-"MSG_HELIX_TURNS_GTR_0\tEine Gleiswendel muss eine oder mehrere Gleiswindung "
-"enthalten."
-
-#: ../../../../build/work/app/help/messages.h:12
-msgid ""
-"MSG_LARGE_FONT\tA large font has been selected....\tA large font has been "
-"selected.\n"
-"Large fonts may a take a while to load.\n"
-"\n"
-"Do you wish to continue?"
-msgstr ""
-"MSG_LARGE_FONT\tEine grosse Schriftart wurde ausgewählt...\tEine grosse "
-"Schriftart wurde ausgewählt.\n"
-"Das Laden grosser Schriften kann lange dauern.\n"
-"\n"
-"Wollen Sie den Vorgang fortsetzen?"
-
-#: ../../../../build/work/app/help/messages.h:13
-msgid ""
-"MSG_TODSGN_DESC_NONBLANK\tAll description fields present in the Turnout..."
-"\tAll description fields present in the Turnout\n"
-"Designer must contain appropriate information.\n"
-"Correct inappropriate values and try again."
-msgstr ""
-"MSG_TODSGN_DESC_NONBLANK\tAlle vorhandenen Beschreibungsfelder des Weichen "
-"Editor...\tAlle Beschreibungsfelder des Weicheneditor\n"
-"müssen korrekt ausgefüllt sein. Bitte falsche Werte \n"
-"korrigieren und nochmals versuchen."
-
-#: ../../../../build/work/app/help/messages.h:14
-msgid ""
-"MSG_GROUP_NONBLANK\tAll fields listed in the Group dialog must contain "
-"data....\tAll fields listed in the Group dialog must contain data.\n"
-"Please enter missing values and try again."
-msgstr ""
-"MSG_GROUP_NONBLANK\tAlle Felder im Gruppieren-Dialog müssen ausgefüllt "
-"sein...\tAlle Felder im Gruppieren-Dialog müssen ausgefüllt sein.\n"
-"Bitte die fehlenden Werte ergänzen und nochmals versuchen."
-
-#: ../../../../build/work/app/help/messages.h:15
-msgid ""
-"MSG_TODSGN_VALUES_GTR_0\tAll values specified in the Turnout Designer must "
-"be...\tAll values specified in the Turnout Designer must be\n"
-"greater than 0. Correct inappropriate values and try again."
-msgstr ""
-"MSG_TODSGN_VALUES_GTR_0\tAlle eingegebenen Werte im Weicheneditor müssen..."
-"\tAlle eingegebenen Werte im Weicheneditor müssen\n"
-"größer als 0 sein. Bitte fehlerhafte Werte korrigieren und nochmal versuchen."
-
-#: ../../../../build/work/app/help/messages.h:16
-msgid "MSG_CURVE_OUT_OF_RANGE\tAngle must be between 0\\u00B0 and 360\\u00B0."
-msgstr "MSG_CURVE_OUT_OF_RANGE\tDer Winkel muss zwischen 0° und 360° liegen."
-
-#: ../../../../build/work/app/help/messages.h:17
-#, c-format
-msgid ""
-"MSG_CUSTMGM_DELETE_CONFIRM\tAre you sure you want to delete the NNN "
-"definition(s)?\tAre you sure you want to delete the\n"
-"%d definition(s)?"
-msgstr ""
-"MSG_CUSTMGM_DELETE_CONFIRM\tSind Sie sicher, dass Sie NNN Definitionen "
-"löschen wollen?\tSind Sie sicher, dass Sie %d Definitionen\n"
-"löschen wollen?"
-
-#: ../../../../build/work/app/help/messages.h:18
-msgid "MSG_WBITMAP_FAILED\tBitmap create or write function failed."
-msgstr ""
-"MSG_WBITMAP_FAILED\tErzeugen oder Schreiben der Bitmap ist fehlgeschlagen."
-
-#: ../../../../build/work/app/help/messages.h:19
-msgid "MSG_BITMAP_TOO_LARGE\tBitmap is too large."
-msgstr "MSG_BITMAP_TOO_LARGE\tBitmap ist zu groß."
-
-#: ../../../../build/work/app/help/messages.h:20
-msgid "MSG_CHANGE_ELEV_MODE\tCannot change elevation mode."
-msgstr ""
-"MSG_CHANGE_ELEV_MODE\tArt der Höhenfestlegung kann nicht geändert werden."
-
-#: ../../../../build/work/app/help/messages.h:21
-msgid ""
-"MSG_GRID_ENABLE_SPACE_GTR_0\tCannot Enable Grid; spacing must be greater "
-"than 0"
-msgstr ""
-"MSG_GRID_ENABLE_SPACE_GTR_0\tFangraster kann nicht aktiviert werden. Abstand "
-"muss größer als 0 sein"
-
-#: ../../../../build/work/app/help/messages.h:22
-msgid "MSG_LAYER_FREEZE\tCannot freeze current layer"
-msgstr "MSG_LAYER_FREEZE\tAktuelle Ebene kann nicht eingefroren werden"
-
-#: ../../../../build/work/app/help/messages.h:23
-msgid ""
-"MSG_CANT_GROUP_BUMPER1\tCannot Group Bumper Track. The track has been "
-"unselected."
-msgstr ""
-"Prellbock kann nicht in die Gruppe aufgenommen werden. Das Gleis wurde "
-"abgewählt."
-
-#: ../../../../build/work/app/help/messages.h:24
-msgid "MSG_CANNOT_GROUP_TRACK\tCannot Group selected track."
-msgstr ""
-"MSG_CANNOT_GROUP_TRACK\tAusgewähltes Gleis kann nicht gruppiert werden."
-
-#: ../../../../build/work/app/help/messages.h:25
-msgid "MSG_LAYER_HIDE\tCannot hide current layer"
-msgstr "MSG_LAYER_HIDE\tAktuelle Ebene kann nicht verborgen werden"
-
-#: ../../../../build/work/app/help/messages.h:26
-msgid "MSG_JOIN_EASEMENTS\tCannot Join; Easements do not align or abut."
-msgstr ""
-"MSG_JOIN_EASEMENTS\tVerbinden nicht möglich. Übergangsbögen sind nicht "
-"ausgerichtet."
-
-#: ../../../../build/work/app/help/messages.h:27
-#, c-format
-msgid ""
-"MSG_TRK_ALREADY_CONN\tFirst|Second track is already connected.\tCannot Join; "
-"%s track is already connected."
-msgstr ""
-"MSG_TRK_ALREADY_CONN\tErstes|zweites Gleis ist bereits verbunden.\tVerbinden "
-"nicht möglich, das %s Gleis ist bereits verbunden."
-
-#: ../../../../build/work/app/help/messages.h:28
-msgid "MSG_JOIN_TURNTABLE\tCannot join from a turntable, try to a turntable"
-msgstr ""
-"MSG_JOIN_TURNTABLE\tVerbinden von einer Drehscheibe ist nicht möglich, bitte "
-"zur Drehscheibe verbinden"
-
-#: ../../../../build/work/app/help/messages.h:29
-msgid "MSG_JOIN_CORNU_SAME\tCannot Join; Selected endpoints are on same track."
-msgstr ""
-"MSG_JOIN_CORNU_SAME\tVerbinden nicht möglich, da ausgewählte Endpunkte zum "
-"selben Gleis gehören."
-
-#: ../../../../build/work/app/help/messages.h:30
-msgid "MSG_JOIN_SAME\tCannot Join; Selected endpoints are on same track."
-msgstr ""
-"MSG_JOIN_SAME\tVerbinden nicht möglich, da ausgewählte Endpunkte zum selben "
-"Gleis gehören."
-
-#: ../../../../build/work/app/help/messages.h:31
-msgid ""
-"MSG_SELECTED_TRACKS_PARALLEL\tCannot Join; Selected tracks are parallel."
-msgstr ""
-"MSG_SELECTED_TRACKS_PARALLEL\tVerbinden nicht möglich, da ausgewählte Gleise "
-"parallel sind."
-
-#: ../../../../build/work/app/help/messages.h:32
-#, c-format
-msgid ""
-"MSG_PRMFIL_OPEN_NEW\tCannot open New Parameter File: FILENAME\tCannot open "
-"New Parameter File: %s"
-msgstr ""
-"MSG_PRMFIL_OPEN_NEW\tDie neue Parameterdatei DATEINAME kann nicht geöffnet "
-"werden.\tDie neue Parameterdatei %s kann nicht geöffnet werden"
-
-#: ../../../../build/work/app/help/messages.h:33
-msgid "MSG_LAYER_SEL_FROZEN\tCannot select a frozen layer"
-msgstr ""
-"MSG_LAYER_SEL_FROZEN\tEine eingefrorene Ebene kann nicht ausgewählt werden"
-
-#
-#: ../../../../build/work/app/help/messages.h:34
-msgid ""
-"MSG_GRID_SHOW_SPACE_GTR_0\tCannot Show Grid; spacing must be greater than 0"
-msgstr ""
-"MSG_GRID_ENABLE_SPACE_GTR_0\tFangraster kann nicht angezeigt werden. Abstand "
-"muss größer als 0 sein"
-
-#: ../../../../build/work/app/help/messages.h:35
-#, c-format
-msgid "MSG_CANT_SPLIT_TRK\tCannot split TYPE track\tCannot split %s track"
-msgstr ""
-"MSG_CANT_SPLIT_TRK\tTYP Gleis kann nicht aufgetrennt werden\tGleis vom Typ "
-"%s kann nicht aufgetrennt werden"
-
-#: ../../../../build/work/app/help/messages.h:36
-#, c-format
-msgid ""
-"MSG_CUSTMGM_CANT_WRITE\tCannot write to parameter file: FILENAME\tCannot "
-"write to parameter file: %s"
-msgstr ""
-"MSG_PRMFIL_OPEN_NEW\tDie neue Parameterdatei DATEINAME kann nicht geöffnet "
-"werden.\tDie neue Parameterdatei %s kann nicht geöffnet werden"
-
-#: ../../../../build/work/app/help/messages.h:37
-msgid "MSG_CARIMP_DUP_INDEX\tCar Index number duplicated."
-msgstr "MSG_CARIMP_DUP_INDEX\tWagenkennzahl ist doppelt."
-
-#: ../../../../build/work/app/help/messages.h:38
-msgid ""
-"MSG_CONN_PARAMS_TOO_SMALL\tConnection parameters reset to minimum values."
-msgstr ""
-"MSG_CONN_PARAMS_TOO_SMALL\tVerbindungseinstellungen auf die Minimalwerte "
-"zurückgesetzt."
-
-#: ../../../../build/work/app/help/messages.h:39
-msgid "MSG_CONN_PARAMS_TOO_BIG\tConnection parameters reset to maximum values."
-msgstr ""
-"MSG_CONN_PARAMS_TOO_SMALL\tVerbindungseinstellungen auf die Maximalwerte "
-"zurückgesetzt."
-
-#: ../../../../build/work/app/help/messages.h:40
-msgid "MSG_CANT_PASTE\tCopy/Paste buffer is empty. There is nothing to Paste."
-msgstr ""
-"MSG_CANT_PASTE\tZwischenablage ist leer. Es kann nichts eingefügt werden."
-
-#: ../../../../build/work/app/help/messages.h:41
-msgid ""
-"MSG_TODSGN_CROSSOVER_TOO_SHORT\tCrossover length is too short. Correct..."
-"\tCrossover length is too short. Correct\n"
-"inappropriate value(s) and try again."
-msgstr ""
-"MSG_TODSGN_CROSSOVER_TOO_SHORT\tKreuzungslänge ist zu kurz. Unpassende..."
-"\tKreuzungslänge ist zu kurz. Unpassende\n"
-"Werte verbessern und nochmals versuchen."
-
-#: ../../../../build/work/app/help/messages.h:42
-msgid "MSG_CURVE_TOO_LARGE\tCurved track is too large."
-msgstr "MSG_CURVE_TOO_LARGE\tBogengleis ist zu groß."
-
-#: ../../../../build/work/app/help/messages.h:43
-msgid ""
-"MSG_TODSGN_REPLACE\tDefinition name is already in use. Saving this..."
-"\tDefinition name is already in use. Saving this\n"
-"definition replaces the existing definition.\n"
-"\n"
-"Do you want to continue?"
-msgstr ""
-"MSG_TODSGN_REPLACE\tEin Design mit diesem Namen existiert bereits. "
-"Speichern...\tEin Design mit diesem Namen existiert bereits. Speichern\n"
-"unter diesem Namen ersetzt das vorhandene Design.\n"
-"\n"
-"Speichern fortsetzen?"
-
-#: ../../../../build/work/app/help/messages.h:44
-msgid "MSG_SAVE_CHANGES\tDo you want to save the changes made to your Layout?"
-msgstr ""
-"MSG_SAVE_CHANGES\tWollen Sie die Veränderungen an Ihrem Gleisplan speichern?"
-
-#: ../../../../build/work/app/help/messages.h:45
-msgid ""
-"MSG_CARIMP_DUP_COLUMNS\tDuplicate column headers found in Car Import file."
-msgstr ""
-"MSG_CARIMP_DUP_COLUMNS\tDoppelte Spaltenüberschrift in der Wagenimportdatei."
-
-#: ../../../../build/work/app/help/messages.h:46
-msgid "MSG_EP_ON_PATH\tEndpoint already on Path."
-msgstr "MSG_EP_ON_PATH\tDer Endpunkt ist bereits im Pfad enthalten."
-
-#: ../../../../build/work/app/help/messages.h:47
-#, c-format
-msgid ""
-"MSG_UPGRADE_VERSION1\tFile version %ld is greater than supported...\tFile "
-"version %ld is greater than supported\n"
-"version %d. You need to upgrade %s\n"
-"to at least version %s."
-msgstr ""
-"MSG_UPGRADE_VERSION1\tDateiversion %ld ist größer als unterstützte Version..."
-"\tDateiversion %ld ist größer als unterstützte\n"
-"Version %d. Sie sollten %s mindestens auf Version %s\n"
-"aktualisieren."
-
-#: ../../../../build/work/app/help/messages.h:48
-#, c-format
-msgid ""
-"MSG_UPGRADE_VERSION2\tFile version %ld is greater than supported...\tFile "
-"version %ld is greater than supported\n"
-"version %d. You need to upgrade your\n"
-"version of %s"
-msgstr ""
-"MSG_UPGRADE_VERSION2\tDateiversion %ld ist größer als unterstützte Version..."
-"\tDateiversion %ld ist größer als unterstützte\n"
-"Version %d. Sie sollten %s aktualisieren"
-
-#: ../../../../build/work/app/help/messages.h:49
-msgid ""
-"MSG_MOVE_POINTS_OTHER_SIDE\tFrog angle prevents placement of points. Move "
-"points to opposite side of frog."
-msgstr ""
-"MSG_MOVE_POINTS_OTHER_SIDE\tDer Weichenwinkel verhindert das Setzen....\tDer "
-"Weichenwinkel verhindert das Setzen der Weichenzungen.\n"
-"Die Weichenzungen auf die andere Seite der Weiche verschieben."
-
-#: ../../../../build/work/app/help/messages.h:50
-msgid "MSG_NO_ROOM_BTW_TRKS\tInsufficient space between existing stall tracks."
-msgstr "MSG_NO_ROOM_BTW_TRKS\tZu wenig Platz zwischen den Drehscheibengleisen."
-
-#: ../../../../build/work/app/help/messages.h:51
-#, c-format
-msgid ""
-"MSG_JOIN_DIFFER_ELEV\tJoining tracks with differing elevations (N."
-"NNN)\tJoining tracks with differing elevations (%0.2f)"
-msgstr ""
-"MSG_JOIN_DIFFER_ELEV\tZu verbindende Gleise haben unterschiedliche Höhe(N."
-"NNN)\tZu verbindende Gleise haben unterschiedliche Höhe(%0.2f)"
-
-#: ../../../../build/work/app/help/messages.h:52
-msgid "MSG_DESC_NOT_VISIBLE\tLabel descriptions not visible"
-msgstr "MSG_DESC_NOT_VISIBLE\tBeschriftungen sind nicht sichtbar"
-
-#: ../../../../build/work/app/help/messages.h:53
-msgid "MSG_OBJECT_TOO_SHORT\tLength of object is too short."
-msgstr "MSG_OBJECT_TOO_SHORT\tDie Länge des Objektes ist zu kurz."
-
-#: ../../../../build/work/app/help/messages.h:54
-#, c-format
-msgid ""
-"MSG_PRINT_MAX_SIZE\tMaximum allowed page size is W x H\tMaximum allowed page "
-"size is %s x %s"
-msgstr ""
-"MSG_PRINT_MAX_SIZE\tDie maximal zulässige Seitengröße ist B x H\tDie maximal "
-"zulässige Seitengröße ist %s x %s"
-
-#: ../../../../build/work/app/help/messages.h:55
-#, c-format
-msgid ""
-"MSG_PRMFIL_NO_CONTENTS\tNew Parameter File has no CONTENTS line: FILENAME."
-"\tNew Parameter File has no CONTENTS line: %s"
-msgstr ""
-"MSG_PRMFIL_NO_CONTENTS\tDie neue Parameterdatei enthält keine CONTENTS "
-"Zeile: DATEINAME.\tDie neue Parameterdatei enthält keine CONTENTS Zeile: %s"
-
-#: ../../../../build/work/app/help/messages.h:56
-msgid ""
-"MSG_NO_CARS\tNo Cars are defined for the current scale....\tNo Cars are "
-"defined for the current scale.\n"
-"\n"
-"Do you want to use the Car Inventory dialog?"
-msgstr ""
-"MSG_NO_CARS\tFür den aktuellen Maßstab sind keine Wagen vorhanden...\tFür "
-"den aktuellen Maßstab sind keine Wagen vorhanden.\n"
-"\n"
-"Soll der Wagenbestandsdialog geöffnet werden?"
-
-#: ../../../../build/work/app/help/messages.h:57
-msgid ""
-"MSG_NO_CARPROTO\tNo Car Prototypes are defined....\tNo Car Prototypes are "
-"defined.\n"
-"Load a Prototype definition file using the\n"
-"Parameter Files dialog or create a Prototype\n"
-"definition using the Car Prototype dialog."
-msgstr ""
-"MSG_NO_CARPROTO\tEs sind keine Vorbildwagen definiert...\tEs sind keine "
-"Vorbildwagen definiert.\n"
-"Über den Parameterdateidialog muß eine\n"
-"Parameterdatei mit Vorbildern geladen werden oder\n"
-"ein Vorbild muß über den Wagenvorbilddialog erstellt werden."
-
-#: ../../../../build/work/app/help/messages.h:58
-msgid "MSG_CARIMP_NO_DATA\tNo data present in Car Import file."
-msgstr "MSG_CARIMP_NO_DATA\tDie Wagenimportdatei enthält keine Daten."
-
-#: ../../../../build/work/app/help/messages.h:59
-msgid "MSG_PRINT_NO_PAGES\tNo pages selected for printing."
-msgstr "MSG_PRINT_NO_PAGES\tKeine Seiten zum Drucken ausgewählt."
-
-#: ../../../../build/work/app/help/messages.h:60
-msgid "MSG_NO_PATH_TO_EP\tNo path between Profile and selected endpoint."
-msgstr ""
-"MSG_NO_PATH_TO_EP\tEs existiert keine Verbindung zwischen dem Högenprofil "
-"und dem ausgählten Endpunkt."
-
-#: ../../../../build/work/app/help/messages.h:61
-#, c-format
-msgid ""
-"MSG_PRMFIL_NO_MAP\tNo Parameter File Map for CONTENTS\tNo Parameter File Map "
-"for %s"
-msgstr ""
-"MSG_PRMFIL_OPEN_NEW\tDie neue Parameterdatei DATEINAME kann nicht geöffnet "
-"werden.\tDie neue Parameterdatei %s kann nicht geöffnet werden"
-
-#: ../../../../build/work/app/help/messages.h:62
-msgid "MSG_NO_SELECTED_TRK\tNo track(s) selected!"
-msgstr "MSG_NO_SELECTED_TRK\tEs sind keine Gleise ausgewählt!"
-
-#: ../../../../build/work/app/help/messages.h:63
-#, c-format
-msgid ""
-"MSG_NO_TURNOUTS_AVAILABLE\tNo Turnouts|Structures are available.\tNo %s are "
-"available."
-msgstr ""
-"MSG_NO_TURNOUTS_AVAILABLE\tEs sind keine Weichern | Gebäude verfügbar.\tEs "
-"sind keine %s verfügbar."
-
-#: ../../../../build/work/app/help/messages.h:64
-msgid ""
-"MSG_CARDESC_VALUE_ZERO\tNumeric values on the Car Description...\tNumeric "
-"values on the Car Description\n"
-"dialog must be greater than 0."
-msgstr ""
-"MSG_CARDESC_VALUE_ZERO\tNumerische Werte im Wagenbeschreibungsdialog..."
-"\tNumerische Werte im Wagenbeschreibungsdialog\n"
-"müssen größer als 0 sein."
-
-#: ../../../../build/work/app/help/messages.h:65
-msgid "MSG_MOVE_OUT_OF_BOUNDS\tObject has moved beyond room boundaries."
-msgstr ""
-"MSG_MOVE_OUT_OF_BOUNDS\tObjekt wurde nach außerhalb des Raumes verschoben."
-
-#: ../../../../build/work/app/help/messages.h:66
-msgid "MSG_PARALLEL_SEP_GTR_0\tParallel separation must be greater than 0."
-msgstr "MSG_PARALLEL_SEP_GTR_0\tParallelabstand muß größer als 0 sein."
-
-#: ../../../../build/work/app/help/messages.h:67
-msgid ""
-"MSG_CARPART_DUPNAME\tPart Number for this Manufacturer already exists...."
-"\tPart Number for this Manufacturer already exists.\n"
-"\n"
-"Do you want to update it?"
-msgstr ""
-"MSG_CARPART_DUPNAME\tTeilnummer für diesen Hersteller existiert bereits..."
-"\tTeilnummer für diesen Hersteller existiert bereits.\n"
-"\n"
-"Wollen Sie den Artikel aktualisieren?"
-
-#: ../../../../build/work/app/help/messages.h:68
-#, c-format
-msgid ""
-"MSG_PLAYBACK_LISTENTRY\tPlayback: Cannot find list entry: NAME\tPlayback: "
-"Cannot find list entry: %s"
-msgstr ""
-"MSG_PLAYBACK_LISTENTRY\tWiedergabe: Der Listeneintrag: NAME kann nicht "
-"gefunden werden.\tWiedergabe: der Listeneintrag %s kann nicht gefunden werden"
-
-#: ../../../../build/work/app/help/messages.h:69
-#, c-format
-msgid ""
-"MSG_PLAYBACK_VERSION_UPGRADE\tPlayback file version %ld is...\tPlayback file "
-"version %ld is\n"
-"greater than supported version %d\n"
-"You need to upgrade your version of %s"
-msgstr ""
-"MSG_PLAYBACK_VERSION_UPGRADE\tVersion %ld der Wiedergabedatei ist..."
-"\tVersion %ld der Wiedergabedatei\n"
-"ist neuer als due unterstützte Version %d\n"
-"Aktualisierung von %s ist notwendig"
-
-#: ../../../../build/work/app/help/messages.h:70
-#, c-format
-msgid ""
-"MSG_DOMOUSE_BAD_OP\tPlayback: unknown action NNN\tPlayback: unknown action %d"
-msgstr ""
-"MSG_DOMOUSE_BAD_OP\tWiedergabe: unbekannte AktionNNN\tWiedergabe: unbekannte "
-"Aktion %d"
-
-#: ../../../../build/work/app/help/messages.h:71
-msgid "MSG_MOVE_POINTS_AWAY_CLOSE\tPoints are to close to frog; move away."
-msgstr ""
-"MSG_MOVE_POINTS_AWAY_CLOSE\tWeichenzungen sind zu kurz. In größere "
-"Entfernung vom Herzstück setzen."
-
-#: ../../../../build/work/app/help/messages.h:72
-msgid "MSG_POLY_SHAPES_3_SIDES\tPoly shapes must have at least 3 sides."
-msgstr ""
-"MSG_POLY_SHAPES_3_SIDES\tEin Vieleck muss mindestens drei Seiten haben.."
-
-#: ../../../../build/work/app/help/messages.h:73
-msgid ""
-"MSG_CARPROTO_DUPNAME\tPrototype name already exists....\tPrototype name "
-"already exists.\n"
-"\n"
-"Do you want to update it?"
-msgstr ""
-"MSG_CARPROTO_DUPNAME\tEin Vorbild mit diesem Namen existiert bereits...."
-"\tEin Vorbild mit diesem Namen existiert bereits.\n"
-"\n"
-"Wollen Sie dieses Vorbild überschreiben?"
-
-#: ../../../../build/work/app/help/messages.h:74
-msgid "MSG_RADIUS_GTR_0\tRadius must be greater than 0."
-msgstr "MSG_RADIUS_GTR_0\tRadius muss größer als 0 sein.."
-
-#: ../../../../build/work/app/help/messages.h:75
-msgid "MSG_RADIUS_GTR_10000\tRadius must be less than 10000."
-msgstr "MSG_RADIUS_GTR_0\tRadius muss kleiner als 10000 sein."
-
-#: ../../../../build/work/app/help/messages.h:76
-msgid ""
-"MSG_RADIUS_TOO_BIG\tThe Circle or Helix will not fit within the layouts room "
-"parameters (Height and Width)."
-msgstr ""
-"MSG_RADIUS_TOO_BIG\tDer Bogen oder die Gleiswendel passen nicht in den Raum "
-"(Höhe und Breite)."
-
-#: ../../../../build/work/app/help/messages.h:77
-#, c-format
-msgid ""
-"MSG_RESCALE_TOO_BIG\tRescaled tracks do not fit within layouts room "
-"parameters...\tRescaled tracks do not fit within layouts room parameters\n"
-"(Height and width). The layouts room parameters should be\n"
-"set to at least %s by %s."
-msgstr ""
-"MSG_RESCALE_TOO_BIG\tNeu skalierte Gleise passen nicht in den Raum...\tNeu "
-"skalierte Gleise passen nicht in den Raum\n"
-"(Länge und Breite). Die benötigte Größe ist\n"
-"mindestens %s auf %s."
-
-#: ../../../../build/work/app/help/messages.h:78
-msgid ""
-"MSG_CARIMP_MISSING_COLUMNS\tRequired column headers missing from Car Import "
-"file."
-msgstr ""
-"MSG_CARIMP_MISSING_COLUMNS\tDie benötigten Spaltenüberschriften fehlen in "
-"der Wagen-ImportDatei."
-
-#: ../../../../build/work/app/help/messages.h:79
-#, c-format
-msgid ""
-"MSG_2ND_TRK_NOT_SEL_UNSEL\tSecond track must be selected|unselected\tSecond "
-"track must be %s."
-msgstr ""
-"MSG_2ND_TRK_NOT_SEL_UNSEL\tDas zweite Gleis darf (nicht) ausgewählt sein."
-"\tDas zweite Gleis muss %s sein."
-
-#: ../../../../build/work/app/help/messages.h:80
-msgid "MSG_OUT_OF_BOUNDS\tSelected page is out of bounds."
-msgstr ""
-"MSG_OUT_OF_BOUNDS\tAusgewählte Dateien sind außerhalb des zulässigen "
-"Bereichs."
-
-#: ../../../../build/work/app/help/messages.h:81
-msgid "MSG_SEL_POS_FIRST\tSelect position prior to entering Text."
-msgstr ""
-"MSG_SEL_POS_FIRST\tDie Position muß vor der Texteingabe festgelegt werden."
-
-#: ../../../../build/work/app/help/messages.h:82
-msgid ""
-"MSG_CARPROTO_BADSEGS\tSelected shapes must define a rectangular area ..."
-"\tSelected shapes must define a rectangular\n"
-"area with length greater than height."
-msgstr ""
-"MSG_CARPROTO_BADSEGS\tDie ausgewählten Formen müssen einen rechtwinkligen..."
-"\tDie ausgewählten Formen müssen einen rechtwinkligen\n"
-"Bereich bilden, wobei die Länge größer als die Breite sein muss."
-
-#: ../../../../build/work/app/help/messages.h:83
-msgid ""
-"MSG_TOO_FAR_APART_DIVERGE\tSelected tracks deviate too much or are too far "
-"apart from each other."
-msgstr ""
-"MSG_TOO_FAR_APART_DIVERGE\tDie ausgewählten Gleise weichen zu stark ab..."
-"\tDie ausgewählten Gleise weichen zu stark ab oder\n"
-"sind zu weit voneinander entfernt."
-
-#: ../../../../build/work/app/help/messages.h:84
-msgid "MSG_COMMAND_DISABLED\tSpecified command disabled."
-msgstr "MSG_COMMAND_DISABLED\tDieser Befehl ist deaktiviert."
-
-#: ../../../../build/work/app/help/messages.h:85
-msgid "MSG_SPLIT_POS_BTW_MERGEPTS\tSplit position between Turnout Points"
-msgstr ""
-"MSG_SPLIT_POS_BTW_MERGEPTS\tDie Trennstelle befindet sich iin den "
-"Weichenzungen"
-
-#: ../../../../build/work/app/help/messages.h:86
-msgid "MSG_SPLIT_PATH_NOT_UNIQUE\tSplit position not on unique path"
-msgstr ""
-"MSG_SPLIT_PATH_NOT_UNIQUE\tTrennstelle ist nicht auf einem eindeutigen "
-"Verlauf"
-
-#: ../../../../build/work/app/help/messages.h:87
-#, c-format
-msgid ""
-"MSG_CARIMP_MISSING_DIMS\tThe following car has no dimensions and a...\tThe "
-"following car has no dimensions and a\n"
-"Car Part description can not be found.\n"
-"\n"
-"%s\n"
-"\n"
-"Do you wish to continue importing other Cars?"
-msgstr ""
-"MSG_CARIMP_MISSING_DIMS\tFür den folgenden Wagen gibt es keine Abmessungen "
-"und....\tFür den folgenden Wagen gibt es keine Abmessungen und\n"
-"eine Wagenbeschreibung ist nicht vorhanden.\n"
-"\n"
-"%s\n"
-"\n"
-"Soll das Einlesen der Wagen fortgesetzt werden?"
-
-#: ../../../../build/work/app/help/messages.h:88
-#, c-format
-msgid ""
-"MSG_CARIMP_MISSING_PARTNO\tThe following car has no Part Number...\tThe "
-"following car has no Part Number\n"
-"\n"
-"%s\n"
-"\n"
-"Do you wish to continue importing other Cars?"
-msgstr ""
-"MSG_CARIMP_MISSING_PARTNO\tDer folgende Wagen hat keine Teilenummer...\tDer "
-"folgende Wagen hat keine Teilenummer.\n"
-"\n"
-"%s\n"
-"\n"
-"Soll das Einlesen der Wagen fortgesetzt werden?"
-
-#: ../../../../build/work/app/help/messages.h:89
-#, c-format
-msgid ""
-"MSG_CARIMP_IGNORED_COLUMN\tThe following column in the Car Import file will "
-"be ignored:...\tThe following column in the Car Import file will be "
-"ignored:\n"
-"\n"
-"%s"
-msgstr ""
-"MSG_CARIMP_IGNORED_COLUMN\tDiese Spalte in der Wagen-Importdatei wird "
-"ignoriert:...\tDiese Spalte in der Wagen-Importdatei wird ignoriert:\n"
-"\n"
-"%s"
-
-#: ../../../../build/work/app/help/messages.h:90
-msgid ""
-"MSG_CANT_MOVE_UNDER_TRAIN\tThe position of a turnout or turntable cannot be "
-"changed while occupied by a train."
-msgstr ""
-"MSG_CANT_MOVE_UNDER_TRAIN\tDie Position einer Weiche oder einer "
-"Drehscheibe...\tDie Position einer Weiche oder einer Drehscheibe\n"
-"kann nicht verändert werden, wenn sich ein Zug darauf befindet."
-
-#: ../../../../build/work/app/help/messages.h:91
-msgid ""
-"MSG_STRUCT_NO_STRUCTS\tThere are no structures to choose from in the "
-"structure...\tThere are no structures to choose from in the structure\n"
-"selection list. Please check your SCALE, select the\n"
-"<File|Parameter Files> menu to load a Parameter File or\n"
-"create a new Structure with the Group command."
-msgstr ""
-"MSG_STRUCT_NO_STRUCTS\tIn der Liste der Gebäude gibt es keine...\tIn der "
-"Liste der Gebäude gibt es keine Gebäude,\n"
-"die ausgewählt werden können. Bitte Maßstab prüfen, im Menupunkt <Datei|"
-"Parameter Dateien> eine Parameter-Datei wählen\n"
-"oder ein neues Gebäude mit dem Gruppieren-Befehl erstellen."
-
-#: ../../../../build/work/app/help/messages.h:92
-msgid ""
-"MSG_TURNOUT_NO_TURNOUT\tThere are no turnouts to choose from in the "
-"turnout...\tThere are no turnouts to choose from in the turnout\n"
-"selection list. Please check your SCALE, select the\n"
-"<Manage|Turnout Designer> menu to enter a new turnout\n"
-"or select the <File|Parameter Files> menu to load a\n"
-"Parameter File"
-msgstr ""
-"MSG_TURNOUT_NO_TURNOUT\tIn der Weichenauswahl gibt es keine Weichen, die "
-"ausgewählt werden können...\tIn der Weichenauswahl gibt es keine Weichen, "
-"die ausgewählt werden können.\n"
-"Bitte den Maßstab prüfen, über den Menupunkt <Hinzufügen | Weichendesigner> "
-"eine Weiche anlegen oder\n"
-"eine Parameter-Datei unter <Datei|Parameter Dateien> laden"
-
-#: ../../../../build/work/app/help/messages.h:93
-msgid "MSG_NO_UNCONN_EP\tThere are no unconnected end points for this track"
-msgstr "MSG_NO_UNCONN_EP\tDieses Gleis hat keine freien Endpunkte"
-
-#: ../../../../build/work/app/help/messages.h:94
-msgid "MSG_PULL_FEW_SECTIONS\tThere are too few sections in this loop."
-msgstr ""
-"MSG_PULL_FEW_SECTIONS\tIn dieser Schleife gibt es zu wenige Teilstücke."
-
-#: ../../../../build/work/app/help/messages.h:95
-msgid "MSG_NO_REDO\tThere is nothing to redo!"
-msgstr "MSG_NO_REDO\tEs gibt nichts wiederherzustellen!"
-
-#: ../../../../build/work/app/help/messages.h:96
-msgid "MSG_NO_UNDO\tThere is nothing to undo!"
-msgstr "MSG_NO_UNDO\tEs gibt nicht rückgängig zu machen!"
-
-#: ../../../../build/work/app/help/messages.h:97
-msgid "MSG_TOOMANYSEGSINGROUP\tToo many segments in Group."
-msgstr "MSG_TOOMANYSEGSINGROUP\tIn der Gruppe sind zu viele Teile."
-
-#: ../../../../build/work/app/help/messages.h:98
-msgid "MSG_CANNOT_CHANGE\tTrack cannot be changed."
-msgstr "MSG_CANNOT_CHANGE\tGleis kann nicht verändert werden."
-
-#: ../../../../build/work/app/help/messages.h:99
-msgid "MSG_POINT_INSIDE_TURNTABLE\tTrack endpoint is within turntable radius."
-msgstr ""
-"MSG_POINT_INSIDE_TURNTABLE\tGleisende befindet sich innerhalb der "
-"Drehscheibe."
-
-#: ../../../../build/work/app/help/messages.h:100
-msgid ""
-"MSG_MOVE_POINTS_AWAY_NO_INTERSECTION\tTrack intersection not possible; move "
-"points away from frog."
-msgstr ""
-"MSG_MOVE_POINTS_AWAY_NO_INTERSECTION\tGleiskreuzung ist nicht möglich, "
-"Weichenzungen müssen länger sein."
-
-#: ../../../../build/work/app/help/messages.h:101
-#, c-format
-msgid ""
-"MSG_TRK_TOO_SHORT\tTrack is too short by N.NNN\t%strack is too short by %0.3f"
-msgstr ""
-"MSG_TRK_TOO_SHORT\tGleis ist um N.NNN zu kurz.\t%sgleis ist um %0.3f zu kurz"
-
-#: ../../../../build/work/app/help/messages.h:102
-#, c-format
-msgid ""
-"MSG_RADIUS_LSS_EASE_MIN\tTrack radius (N.NNN) is smaller than easement "
-"minimum (N.NNN).\tTrack radius (%s) is smaller than easement minimum (%s)."
-msgstr ""
-"MSG_RADIUS_LSS_EASE_MIN\tGleisradius (N.NNN) ist kleiner als der minimale "
-"Übergangsbogen (N.NNN).\tGleisradius (%s) ist kleiner als\n"
-"der Mindest-Übergangsbogen (%s)."
-
-#: ../../../../build/work/app/help/messages.h:103
-msgid ""
-"MSG_CANT_MODIFY_FROZEN_TRK\tTracks in a frozen layer cannot be modified."
-msgstr ""
-"MSG_CANT_MODIFY_FROZEN_TRK\tGleise in einer gesperrten Ebene können nicht "
-"verändert werden."
-
-#: ../../../../build/work/app/help/messages.h:104
-msgid ""
-"MSG_SEGMENTS_DIFFER\tTurnout definition contains non-track segments...."
-"\tTurnout definition contains non-track segments.\n"
-"\n"
-"Do you want to include them in this update?"
-msgstr ""
-"MSG_SEGMENTS_DIFFER\tDie Weichendefinition enthält nicht nur Gleise....\tDie "
-"Weichendefinition enthält nicht nur Gleise.\n"
-"\n"
-"Sollen diese in der Aktrualisierung aufgenommen werden?"
-
-#: ../../../../build/work/app/help/messages.h:105
-msgid "MSG_TURNTABLE_DIAM_GTR_0\tTurntable diameter must greater than 0."
-msgstr ""
-"MSG_TURNTABLE_DIAM_GTR_0\tDer Durchmesser der Drehscheibe muß größer als 0 "
-"sein."
-
-#: ../../../../build/work/app/help/messages.h:106
-#, c-format
-msgid ""
-"MSG_UNDO_ASSERT\tUndo assertion failure %s:%d...\tUndo assertion failure %s:"
-"%d\n"
-"Val = %ld(%lx)\n"
-"%s\n"
-"Please report this error to the XTrackCAD project development team at "
-"SourceForge."
-msgstr ""
-"MSG_UNDO_ASSERT\tUndo assertion failure %s:%d...\tUndo assertion failure %s:"
-"%d\n"
-"Val = %ld(%lx)\n"
-"%s\n"
-"Bitte diesen Fehler an das XTrackCAD Entwicklungsteam in Sourceforge "
-"berichten."
-
-#: ../../../../build/work/app/help/messages.h:107
-#, c-format
-msgid ""
-"MSG_PROG_CORRUPTED\tCritical file damaged!...\tCritical file damaged!\n"
-"\n"
-"%s is corrupt.\n"
-"\n"
-"Please reinstall software."
-msgstr ""
-"MSG_PROG_CORRUPTED\tEine kritische Datei ist beschädigt...\tEine kritische "
-"Datei ist beschädigt!\n"
-"\n"
-"%s ist beschädigt.\n"
-"\n"
-"Bitte XTrackCAD neu installieren."
-
-#: ../../../../build/work/app/help/messages.h:108
-#, c-format
-msgid ""
-"MSG_ENTERED_STRING_TRUNCATED\tThe entered text is too long. Maximum length "
-"is %d."
-msgstr ""
-"MSG_ENTERED_STRING_TRUNCATED\tDer eingegebene Text ist zu lang. Die maximal "
-"zulässige Länge beträgt %d."
-
-#: ../../../../build/work/app/help/messages.h:109
-#, c-format
-msgid "MSG_PT_IS_NOT_TRK\t[X Y] is not a track\t[%s %s] is not a track."
-msgstr ""
-"MSG_PT_IS_NOT_TRK\tAn [X Y]befindet sich kein Gleis\tAn [%s %s] befindet "
-"sich kein Gleis."
-
-#: ../../../../build/work/app/help/messages.h:110
-msgid ""
-"MSG_BITMAP_SIZE_WARNING\tYou have specified a large Bitmap....\tYou have "
-"specified a large Bitmap.\n"
-"\n"
-"Are you sure you want to continue?"
-msgstr ""
-"MSG_BITMAP_SIZE_WARNING\tDie Bilddatei wird sehr groß.\tDie Bilddatei wird "
-"sehr groß.\n"
-"\n"
-"Wollen Sie den Vorgang fortsetzen?"
-
-#: ../../../../build/work/app/help/messages.h:111
-#, c-format
-msgid "Are you sure you want to delete these %d car(s)?"
-msgstr "Sind Sie sicher, dass Sie diese %d Wagen löschen wollen?"
-
-#: ../../../../build/work/app/help/messages.h:112
-#, c-format
-msgid ""
-"Cannot open %s file:\n"
-"%s:%s"
-msgstr ""
-"%sdatei kann nicht geöffnet werden:\n"
-"%s:%s"
-
-#: ../../../../build/work/app/help/messages.h:113
-#, c-format
-msgid "Unrecognized Option: %s"
-msgstr "Unbekannte Option: %s"
-
-#: ../../../../build/work/app/help/messages.h:114
-#, c-format
-msgid ""
-"End-Of-Line is unexpected in a quoted field.\n"
-"%s\n"
-"\n"
-"Do you want to continue reading the file?"
-msgstr ""
-"Unerwartetes Zeilenende in innerhalb von Anführungszeichen.\n"
-"%s\n"
-"\n"
-"Soll das Lesen der Datei fortgesetzt werden?"
-
-#: ../../../../build/work/app/help/messages.h:115
-#, c-format
-msgid ""
-"A comma was expected after this quoted field.\n"
-"%s\n"
-"\n"
-"Do you want to continue reading the file?"
-msgstr ""
-"Erwartetes Komma nach Anführungszeichen fehlt.\n"
-"%s\n"
-"\n"
-"Soll das Laden der Datei fortgesetzt werden?"
-
-#: ../../../../build/work/app/help/messages.h:116
-#, c-format
-msgid ""
-"Error \\\\\"%s\\\\\" occurred while writing %s.\n"
-"Please check disk space and system status."
-msgstr ""
-"Fehler \\\\\"%s\\\\\" aufgetreten beim Speichern von %s.\n"
-"Bitte Plattenplatz und System prüfen."
-
-#: ../../../../build/work/app/help/messages.h:117
-#, c-format
-msgid ""
-"At least one path for the Turnout T%d does not\n"
-"terminate on an endpoint. Such a track cannot be grouped.\n"
-"The track has been unselected."
-msgstr ""
-"Mindestens ein Pfad durch die Weiche T%d endet nicht\n"
-"an einem Endpunkt. Solche Gleise können nicht gruppiert werden.\n"
-"Das Gleis wurde aus der Auswahl entfernt."
-
-#: ../../../../build/work/app/help/messages.h:118
-msgid "inv-pathEndTrk on Path."
-msgstr "inv-pathEndTrk auf Pfad."
-
-#: ../../../../build/work/app/help/messages.h:119
-msgid "inv-pathStartTrk on Path"
-msgstr "inv-pathStartTrk auf Pfad"
-
-#: ../../../../build/work/app/help/messages.h:120
-#, c-format
-msgid "%s:%d- %s"
-msgstr "%s:%d- %s"
-
-#: ../../../../build/work/app/help/messages.h:121
-msgid "pathEndTrk not on Path."
-msgstr "pathEndTrk nicht auf einem Pfad."
-
-#: ../../../../build/work/app/help/messages.h:122
-msgid "pathStartTrk not on Path."
-msgstr "pathStartTrk nicht auf einem Pfad."
-
-#: ../../../../build/work/app/help/messages.h:123
-msgid ""
-"The tracks cannot be connected together.\n"
-"\n"
-"Try changing some tracks for a closer fit\n"
-"or increase the Connection Angle value on\n"
-"the Preferences dialog."
-msgstr ""
-"Die Gleise können nicht verbunden werden.\n"
-"\n"
-"Versuchen Sie einige Gleise enger zusammenzuführen\n"
-"oder ändern Sie den Verbindungswinkel im\n"
-"Einstellungsdialog."
-
-#: ../../../../build/work/app/help/messages.h:124
-msgid ""
-"The tracks cannot be connected together.\n"
-"\n"
-"Try changing some tracks for a closer fit\n"
-"or increase the Connection Distance and\n"
-"Angle values on the Preferences dialog"
-msgstr ""
-"Die Gleise können nicht verbunden werden.\n"
-"\n"
-"Versuchen Sie einige Gleise enger zusammenzuführen\n"
-"oder ändern Sie den Verbindungsabstand und -winkel im\n"
-"Einstellungsdialog"
-
-#: ../../../../build/work/app/help/messages.h:125
-msgid ""
-"The tracks cannot be connected together.\n"
-"\n"
-"Try changing some tracks for a closer fit\n"
-"or increase the Connection Distance"
-msgstr ""
-"Die Gleise können nicht verbunden werden.\n"
-"\n"
-"Versuchen Sie einige Gleise enger zusammenzuführen\n"
-"oder ändern Sie den Verbindungsabstand im Einstellungsdialog"
-
-#: ../../../../build/work/app/help/messages.h:126
-msgid ""
-"The first track for the Align\n"
-"Rotate command must be Selected."
-msgstr ""
-"Das erste Gleis für den \"Ausrichten\n"
-"Drehen\" Befehl muss ausgewählt sein."
-
-#: ../../../../build/work/app/help/messages.h:127
-msgid ""
-"The second track for the Align\n"
-"Rotate command must be Unselected."
-msgstr ""
-"Das zweite Gleis für den \"Ausrichten\n"
-"Drehen\" Befehl darf nicht ausgewählt sein."
-
-#: ../../../../build/work/app/help/messages.h:128
-msgid "Too many selected tracks, drawing tracks as End Point."
-msgstr "Zu viele ausgewählte Gleise, nur die Endpunkte werden angezeigt."
-
-#: ../../../../build/work/app/help/messages.h:129
-msgid "Select an endpoint between two tracks."
-msgstr "Einen Endpunkt zwischen zwei Gleisen auswählen."
-
-#: ../../../../build/work/app/help/messages.h:130
-msgid ""
-"According to values that have been entered the diverging\n"
-"track does not connect with the tangent track. Please\n"
-"check the values entered and try again. Check the angle\n"
-"is entered as a frog number or in degrees as specified\n"
-"by Angle Mode radio buttons."
-msgstr ""
-"Mit den eingegebenen Werten kann das abzweigende\n"
-"Gleis nicht mit dem Stammgleis verbunden werden. Bitte\n"
-"prüfen Sie die eingegebenen Werte und versuchen es nochmals.\n"
-"Prüfen Sie ob der Abzweigwinkel gemäß der der Auswahl richtig als\n"
-"Steigung oder als Winkel eingegeben wurde."
-
-#: ../../../../build/work/app/help/messages.h:131
-msgid "Moved before the end of the turnout"
-msgstr "Vor das Ende des Tunnels verschoben"
-
-#: ../../../../build/work/app/help/messages.h:132
-msgid ""
-"The Coupled Length must be greater than the Car Length,\n"
-"and the Coupler Length must be greater than 0."
-msgstr ""
-"Die gekuppelte Länge muss größer als die Wagenlänge\n"
-"und die Kupplerlänge muss größer als 0 sein."
-
-#: ../../../../build/work/app/help/messages.h:133
-msgid ""
-"The Car Length value must be greater\n"
-"than the Car Width value."
-msgstr ""
-"Die Wagenlänge muss größer als\n"
-"die Wagenbreite sein."
-
-#: ../../../../build/work/app/help/messages.h:134
-msgid ""
-"The specified Index is already in use.\n"
-"The Index will be updated to the next available value."
-msgstr ""
-"Dier angegebene Indexnummer ist bereits vergeben.\n"
-"Die Indexnummer wird auf den nächsten freien Wert aktualisiert."
-
-#: ../../../../build/work/app/help/messages.h:135
-msgid ""
-"You have changed values for this object.\n"
-"\n"
-"Are you sure you want to Close?"
-msgstr ""
-"Sie haben Änderungen an diesem Objekt vorgenommen\n"
-"\n"
-"Wollen Sie diesen Dialog wirklich beenden?"
-
-#: ../../../../build/work/app/help/messages.h:136
-#, c-format
-msgid ""
-"File version %ld is lower than the minimum\n"
-"supported version %d. You need to update your\n"
-"layout file using an older version of %s"
-msgstr ""
-"Dateiversion %ld ist älter als die älteste\n"
-"unterstütze Version %d. Konvertieren Sie\n"
-"die Gleisplandatei mit einer älteren Version von %s"
-
-#: ../../../../build/work/app/help/messages.h:137
-#, c-format
-msgid ""
-"%s cannot read the demo file:\n"
-"%s"
-msgstr ""
-"%s kann die Demodatei \":\n"
-"%s nicht laden"
-
-#: ../../../../build/work/app/help/messages.h:138
-#, c-format
-msgid "doDemo: bad number (%d)"
-msgstr "doDemo: ungültige Zahl (%d)"
-
-#: ../../../../build/work/app/help/messages.h:139
-msgid "Playback TIMEEND without TIMESTART"
-msgstr "TIMEEND in Wiedergabe ohne TIMESTART"
-
-#: ../../../../build/work/app/help/messages.h:140
-#, c-format
-msgid ""
-"Unknown playback command (%d)\n"
-"%s"
-msgstr ""
-"Unbekannter Wiedergabebefehl (%d)\n"
-"%s"
-
-#: ../../../../build/work/app/help/messages.h:141
-#, c-format
-msgid ""
-"Playback file version %ld is lower than the\n"
-"minimum supported version %d.\n"
-"You need to update your layout file using an\n"
-"older version of %s"
-msgstr ""
-"Wiedergabedatei version %ld ist niedriger als\n"
-"die kleinste unterstützte Version %d.\n"
-"Sie müssen Ihr Layoutdesign mit einer älteren\n"
-"Version von %s aktualisieren"
-
-#: ../../../../build/work/app/help/messages.h:142
-#, c-format
-msgid "Scale index (%d) is not valid"
-msgstr "Maßstab (%d) ist nicht gültig"
-
-#: ../../../../build/work/app/help/messages.h:143
-#, c-format
-msgid ""
-"Scale %s is not valid\n"
-"Please check your %s.xtq file"
-msgstr ""
-"Maßstab %s ist ungültig.\n"
-"Bitte prüfen Sie die Datei %s.xtq"
-
-#: ../../../../build/work/app/help/messages.h:144
-msgid "Cannot extend a helix"
-msgstr "Eine Gleiswendel kann nicht erweitert werden"
-
-#: ../../../../build/work/app/help/messages.h:145
-msgid "Cannot trim a helix"
-msgstr "Eine Gleiswendel kann n icht gekürzt werden"
-
-#: ../../../../build/work/app/help/messages.h:146
-msgid "Ignore further audit notices?"
-msgstr "Weitere Protokollhinweise ignorieren?"
-
-#: ../../../../build/work/app/help/messages.h:147
-#, c-format
-msgid "%s"
-msgstr "%s"
-
-#: ../../../../build/work/app/help/messages.h:148
-msgid "Audit Abort?"
-msgstr "Protokolierung abbrechen?"
-
-#: ../../../../build/work/app/help/messages.h:149
-msgid "Write Audit File?"
-msgstr "Protokolldatei schreiben?"
-
-#: ../../../../build/work/app/help/messages.h:150
-#, c-format
-msgid "checkTrackLength: Short track length = %0.3f"
-msgstr "checkTrackLength: Kurze Gleislänge = %0.3f"
-
-#: ../../../../build/work/app/help/messages.h:151
-#, c-format
-msgid "checkTrackLength: unknown type: %d"
-msgstr "checkTrackLength: Unbekannter Typ: %d"
-
-#: ../../../../build/work/app/help/messages.h:152
-#, c-format
-msgid "connectTracks: T%d[%d] T%d[%d] d=%0.3f a=%0.3f"
-msgstr "connectTracks: T%d[%d] T%d[%d] d=%0.3f a=%0.3f"
-
-#: ../../../../build/work/app/help/messages.h:153
-#, c-format
-msgid "GetAngleAtPoint: bad type(%d) for T(%d)"
-msgstr "GetAngleAtPoint: Falscher Typ (%d) für T(%d)"
-
-#: ../../../../build/work/app/help/messages.h:154
-#, c-format
-msgid "joinTracks: invalid track type=%d"
-msgstr "joinTracks: Ungültiger Gleistyp=%d"
-
-#: ../../../../build/work/app/help/messages.h:155
-#, c-format
-msgid "resolveIndex: T%d[%d]: T%d doesn\\\\'t exist"
-msgstr "resolveIndex: T%d[%d]: T%d existiert nicht"
-
-#: ../../../../build/work/app/help/messages.h:156
-msgid "Moved beyond the end of the track"
-msgstr "Hinter das Ende des Gleises verschoben"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:10
-msgid "Invokes on-line help for this dialog"
-msgstr "Aufruf der Kontexthilfe für diesen Dialog"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:11
-msgid "Cancels this command"
-msgstr "Befehl abbrechen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:12
-msgid "Closes the dialog"
-msgstr "Dialogfenster schliessen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:13
-msgid "About box dialog"
-msgstr "Informationen über dieses Programm"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:14
-msgid "Move Selected object to top"
-msgstr "Ausgewählte Objekte ganz nach oben"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:15
-msgid "Raise or Lower all Selected tracks"
-msgstr "Alle ausgewählten Gleise anheben oder absenken"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:16
-msgid "Move Selected object to bottom"
-msgstr "Ausgewählte Objekte ganz nach unten"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:17
-msgid "Create a section of track for automation"
-msgstr "Einen Gleisabschnitt für die Automation erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:18
-msgid "Edit a Block Definition "
-msgstr "Einen Gleisblock bearbeiten "
-
-#: ../../../../build/work/app/bin/bllnhlp.c:19
-msgid "Create a new Car/Loco description"
-msgstr "Erstelle eine neue Wegan/Lok-Beschreibung"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:20
-msgid "Manage your Car and Loco Inventory"
-msgstr "Wagen- und Lokbestand verwalten"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:21
-msgid "Create track circle from center"
-msgstr "Erstelle Gleiskreis um Mittelpunkt"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:22
-msgid "Create fixed radius track circle"
-msgstr "Erstelle Gleiskreis mit festgelegtem Radius"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:23
-msgid "Set Circle Track creation mode"
-msgstr "Wähle Befehl um Gleisbögen zu erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:24
-msgid "Create track circle from tangent"
-msgstr "Erstelle Gleiskreis von Tangente"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:25
-msgid "Removes elevation from Selected tracks"
-msgstr "Entfernt die Höhenangaben von den ausgewählten Gleisen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:26
-msgid "Command Options dialog"
-msgstr "Dialog für die Befehlsoptionen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:27
-msgid "Controls colors"
-msgstr "Steuert die Farben"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:28
-msgid "Connect two tracks"
-msgstr "Gleise zusammenfügen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:29
-msgid "Create a control for layout automation"
-msgstr "Erstelle ein Kontrollelement für Automation"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:30
-msgid "Manage control elements"
-msgstr "Steuerungselemente verwalten"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:31
-msgid "Copy selected objects to clipboard"
-msgstr "Ausgewählte Objekte in die Zwischenablage kopieren"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:32
-msgid "Create curved track from center"
-msgstr "Erstelle Gleisbogen vom Mittelpunkt"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:33
-msgid "Create curved track from chord"
-msgstr "Erstelle Gleisbogen von einer Sehne"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:34
-msgid "Create curved track from end-point"
-msgstr "Erstelle Gleisbogen von Endpunkt"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:35
-msgid "Create Bezier track"
-msgstr "Erstelle Bezier-Gleis"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:36
-msgid "Set Curve Track creation mode"
-msgstr "Wähle Befehl um Gleiskreis zu erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:37
-msgid "Create curved track from tangent"
-msgstr "Erstelle Gleisbogen von einer Tangente"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:38
-msgid "Manipulate Custom designer entries"
-msgstr "Bearbeite die eigenen Designs"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:39
-msgid "Moves selected objects to clipboard"
-msgstr "Ausgewählte Objekte in die Zwischenablage verschieben"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:40
-msgid "Delete objects"
-msgstr "Objekte löschen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:41
-msgid "Playback demos"
-msgstr "Demos abspielen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:42
-msgid "Change Object Properties"
-msgstr "Eigenschaften des Objektes bearbeiten"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:43
-msgid "Deselect all selected objects"
-msgstr "Ausgewählte Objekte abwählen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:44
-msgid "Change Display parameters"
-msgstr "Anzeigeeigenschaften ändern"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:45
-msgid "Create benchwork"
-msgstr "Unterbau erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:46
-msgid "Create a box"
-msgstr "Ein Viereck erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:47
-msgid "Set Circle drawing command"
-msgstr "Wähle Befehl um Kreise zu zeichnen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:48
-msgid "Create a circle"
-msgstr "Einen Kreis erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:49
-msgid "Draw a circle line from center"
-msgstr "Zeichne Kreislinie um Mittelpunkt"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:50
-msgid "Draw a fixed radius circle line"
-msgstr "Zeichne einen Kreisbogen mit festen Radius"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:51
-msgid "Draw a circle line from tangent"
-msgstr "Zeichne Kreis von Tangente"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:52
-msgid "Set Curve drawing command"
-msgstr "Wähle Befehl um gebogene Linien zu zeichnen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:53
-msgid "Create a curved line"
-msgstr "Eine gebogene Linie erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:54
-msgid "Create a curved line from End"
-msgstr "Gebogene Linie von einem Endpunkt erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:55
-msgid "Create a curved line from center"
-msgstr "Gebogene Linie vom Mittelpunkt aus erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:56
-msgid "Create a curved line from chord"
-msgstr "Gebogene Linie von einer Sehne erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:57
-msgid "Create a curved line from tangent"
-msgstr "Gebogene Linie von einer Tangente erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:58
-msgid "Create a Bezier line"
-msgstr "Eine Bezier-Linie erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:59
-msgid "Create a dimension line"
-msgstr "Zeichne Maßlinie"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:60
-msgid "Create a filled box"
-msgstr "Ein gefülltes Viereck erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:61
-msgid "Create a filled circle"
-msgstr "Einen gefüllten Kreis erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:62
-msgid "Draw a filled circle from center"
-msgstr "Zeichne gefüllten Kreis um Mittelpunkt"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:63
-msgid "Draw a fixed radius filled circle"
-msgstr "Zeichne einen gefüllten Kreis mit festem Radius"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:64
-msgid "Draw a filled circle from tangent"
-msgstr "Zeichne gefüllten Kreis von Tangente"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:65
-msgid "Create a filled polygon"
-msgstr "Ein gefültes Polygon erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:66
-msgid "Create a polyline"
-msgstr "Eine Polylinie erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:67
-msgid "Create a straight line"
-msgstr "Eine gerade Linie erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:68
-msgid "Set Line drawing command"
-msgstr "Wähle Befehl um Linien zu zeichnen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:69
-msgid "Set Shape drawing command"
-msgstr "Wähle Befehl um Formen zu zeichnen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:70
-msgid "Draw table edge"
-msgstr "Tischkante zeichnen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:71
-msgid "Easement menu"
-msgstr "Einstellungen für Übergangsbögen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:73
-msgid "Generate a Parts List of selected objects"
-msgstr "Teileliste aus den ausgewählten Objekten erzeugen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:74
-msgid "Export a .xti file"
-msgstr "Export in XTI Datei"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:75
-msgid "Export a DXF file"
-msgstr "Export nach DXF"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:76
-msgid "General note about the layout"
-msgstr "Allgemeine Notiz zur Anlage"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:77
-msgid "Flip selected objects"
-msgstr "Ausgewählte Objekte spiegeln"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:78
-msgid "Adjust snap grid"
-msgstr "Fangraster anpassen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:79
-msgid "Enable snap grid"
-msgstr "Fangraster aktivieren"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:80
-msgid "Show snap grid"
-msgstr "Fangraster anzeigen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:81
-msgid "Create a structure from a Group of objects"
-msgstr "Objekte zu einer Gruppierung zusammen fassen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:82
-msgid "Create a hand-laid turnout"
-msgstr "Handgemachte Weiche erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:83
-msgid "Create a track helix"
-msgstr "Eine Gleiswendel erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:84
-msgid "Import a .xti file"
-msgstr "Importieren einer .xti-Datei"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:85
-msgid "Join two tracks"
-msgstr "Zwei Gleise zusammenfügen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:86
-msgid "Change Layers"
-msgstr "Ebenen ändern"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:87
-msgid "Selects the current drawing layer"
-msgstr "Auswahl der aktuellen Zeichenebene"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:88
-msgid "Layout parameters"
-msgstr "Gleisplaneinstellungen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:89
-msgid "Show/Hide Map Window"
-msgstr "Übersichtsfenster anzeigen/verbergen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:90
-msgid "Modify or extend a track"
-msgstr "Ändern oder erweitern eines Gleises"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:91
-msgid "Move selected objects"
-msgstr "Ausgewählte Objekte verschieben"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:92
-msgid "Move a label"
-msgstr "Beschreibung verschieben"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:93
-msgid "Move selected objects to current layer"
-msgstr "Ausgewählte Objekte auf die aktuelle Ebene verschieben"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:95
-msgid "Print a BitMap"
-msgstr "Drucke in eine Grafikdatei"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:96
-msgid "Pan or Zoom the Layout"
-msgstr "Ausschnitt ändern oder Zoomen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:97
-msgid "Create a parallel track"
-msgstr "Ein Parallelgleis erzeugen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:98
-msgid "Register"
-msgstr "Registrierem"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:99
-msgid "Copy objects from clipboard"
-msgstr "Objekte von der Zwischenablage kopieren"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:100
-msgid "Perferences dialog"
-msgstr "Einstellungen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:101
-msgid "Display prices of turnouts, sectional tracks and structures"
-msgstr "Die Preise von Weichen, Gleisen und Gebäuden anzeigen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:102
-msgid "Print the layout"
-msgstr "Gleisplan ausdrucken"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:103
-msgid "Loads and unloads parameter files"
-msgstr "Parameterdateien laden und entladen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:104
-msgid "Elevation Profile Command"
-msgstr "Höhenprofil bearbeiten"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:106
-msgid "Command recorder"
-msgstr "Befehlsaufzeichnung"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:108
-msgid "Update selected Turnout and Structure definitions"
-msgstr "Die ausgewählten Gebäude und Weichen aktualisieren"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:109
-msgid "Rescale selected objects"
-msgstr "Ausgewählte Objekte skalieren"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:110
-msgid "Rotate selected object(s)"
-msgstr "Ausgewählte Objekte drehen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:111
-msgid "Show a ruler"
-msgstr "Lineal anzeigen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:112
-msgid "Select objects"
-msgstr "Objekte auswählen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:113
-msgid "Selects all objects on the layout"
-msgstr "Alle Objekte des Gleisplan auswählen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:114
-msgid "Selects all objects in the current Layer"
-msgstr "Alle Objekte der aktuellen Ebene auswählen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:115
-msgid "Invert current selection"
-msgstr "Auswahl umkehren"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:116
-msgid "Split a track"
-msgstr "Gleis trennen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:117
-msgid "Select stranded (unconnected) track pieces"
-msgstr "Vereinzelte (nicht verbundene) Gleisstücke auswählen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:118
-msgid "Create a sensor (ie. a occupancy detector or a toggle switch)"
-msgstr ""
-"Erstelle einen Sensor (z.B. eine Besetzterkennung oder einen Umschalter)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:119
-msgid "Create a signal for train control"
-msgstr "Ein Signal für die Zugsteuerung erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:120
-msgid "Choose which commands are sticky"
-msgstr "Auswahl dauerhafter Befehle"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:121
-msgid "Create straight track"
-msgstr "Gerades Gleis erzeugen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:122
-msgid "Place a structure on the layout"
-msgstr "Ein Gebäude auf den Gleisplan setzen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:123
-msgid "Create a switchmotor for turnout control"
-msgstr "Einen Motor für die Weichensteuerung erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:124
-msgid "Edit a switchmotor definition"
-msgstr "Einen Weichenantrieb bearbeiten"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:125
-msgid "Enter text on the layout"
-msgstr "Text auf den Gleisplan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:126
-#: ../../../../build/work/app/bin/bllnhlp.c:487
-msgid "Controls the size of the entered text"
-msgstr "Auswahl der Schriftgröße für einzugebenden Text"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:127
-msgid "Tip of the Day window"
-msgstr "Tipp des Tages"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:128
-msgid "Run Trains"
-msgstr "Zugbetrieb"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:129
-msgid "Pause/Resume Trains"
-msgstr "Zugbetrieb pausieren/fortsetzen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:130
-msgid "Place a car on the layout"
-msgstr "Einen Wagen auf den Gleisplan setzen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:131
-msgid "Exit Trains"
-msgstr "Zugbetrieb beenden"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:132
-msgid "Hide/Unhide a track"
-msgstr "Verbergen/Zeigen eines Gleises"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:133
-msgid "Place a turnout or sectional track"
-msgstr "Weiche oder Gleis platzieren"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:134
-msgid "Create a new turnout definition"
-msgstr "Erstelle eine neue Weichendefinition"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:135
-msgid "Place a turntable"
-msgstr "Eine Drehscheibe setzen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:136
-msgid "Updates old source files with 3 part titles"
-msgstr "Aktualisiere alte Dateien mit dreiteiligen Titeln"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:138
-msgid "Ungroup objects"
-msgstr "Gruppierung aufheben"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:139
-msgid "Draw tracks with thin lines"
-msgstr "Gleise mit dünnen Linien zeichnen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:140
-msgid "Draw tracks with medium lines"
-msgstr "Gleise mit mittleren Linien zeichnen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:141
-msgid "Draw tracks with thick lines"
-msgstr "Gleise mit dicken Linien zeichnen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:142
-msgid "Change drawing scale"
-msgstr "Zeichenmaßstab auswählen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:143
-#: ../../../../build/work/app/bin/bllnhlp.c:155
-msgid "Zoom in"
-msgstr "Zoom größer"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:144
-#: ../../../../build/work/app/bin/bllnhlp.c:156
-msgid "Zoom out"
-msgstr "Zoom kleiner"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:145
-msgid "File Menu"
-msgstr "Dateimenue"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:146
-msgid "Save layout"
-msgstr "Gleisplan speichern"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:147
-msgid "Save layout under a new name "
-msgstr "Gleisplan mit neuem Namen speichern "
-
-#: ../../../../build/work/app/bin/bllnhlp.c:148
-msgid "New layout"
-msgstr "Neuer Gleisplan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:149
-msgid "Generate parts list"
-msgstr "Teileliste erzeugen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:150
-msgid "Load a layout"
-msgstr "Gleisplan laden"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:151
-msgid "Exit the program"
-msgstr "Programm beenden"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:152
-msgid "Revert to last saved state of layout plan"
-msgstr "Zum letzten gespeicherten Stand zurücksetzen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:153
-msgid "Edit menu"
-msgstr "Bearbeiten Menu"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:154
-msgid "Redraw layout"
-msgstr "Gleisplan neu zeichnen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:157
-#: ../../../../build/work/app/bin/bllnhlp.c:160
-msgid "Tools menu"
-msgstr "Werkzeug Menu"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:158
-msgid "View menu"
-msgstr "Menü für Anzeigefuinktionen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:159
-msgid "Toolbar configuration"
-msgstr "Konfiguration der Werkzeugleiste"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:161
-msgid "Options menu"
-msgstr "Optionen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:162
-msgid "Playback/Record commands"
-msgstr "Aufzeichnungs- und Wiedergabebefehle"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:163
-msgid "Window menu"
-msgstr "Fenstermenu"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:164
-msgid "Help menu"
-msgstr "Menu für Hilfe"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:165
-msgid "Recent error messages and explanations"
-msgstr "Aktuellste Fehlermeldungen und Erläuterungen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:166
-msgid "Move Hot Bar left"
-msgstr "Schnellauswahl nach links bewegen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:167
-msgid "Move Hot Bar right"
-msgstr "Schnellauswahl nach rechts bewegen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:168
-msgid "Total track count"
-msgstr "Gesamtzahl der Gleise"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:169
-msgid "X Position of cursor"
-msgstr "X Position des Zeiger"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:170
-msgid "Y Position of cursor"
-msgstr "Y Position des Zeiger"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:171
-msgid "Drawing scale"
-msgstr "Zeichnungsmaßstab"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:172
-msgid "Message and status line"
-msgstr "Nachrichten- und Statuszeile"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:173
-#: ../../../../build/work/app/bin/bllnhlp.c:174
-msgid "Main layout canvas"
-msgstr "Hauptzeichenbereich"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:175
-msgid "Main drawing canvas"
-msgstr "Hauptzeichenbereich"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:176
-msgid "Command buttons"
-msgstr "Befehle"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:177
-msgid "Menus"
-msgstr "Menues"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:178
-msgid "Tile, Filename and Window Manager buttons"
-msgstr "Tile, Filename and Window Manager buttons"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:179
-msgid "Turnout and Structure Hot Bar"
-msgstr "Weichen und Gebäude Auswahlleiste"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:180
-msgid "Active layer list and layer buttons"
-msgstr "Liste der aktiven Ebene und Ebenen-Knöpfe"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:181
-msgid "Map window"
-msgstr "Kartenfenster"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:182
-msgid "This is the portion of the layout shown in the Main Window canvas"
-msgstr "Dieser Teil der Gleisplans wird auf der Hauptzeichenfläche angezeigt"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:183
-msgid "Raise or Lower all Selected Track"
-msgstr "Anheben oder Absenken der ausgewählten Gleise"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:184
-msgid "Name of block"
-msgstr "Name des Gleisblocks"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:185
-msgid "Script that the block will run"
-msgstr "Auszuführendes Skript"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:186
-msgid "List of tracks in the Block"
-msgstr "Liste der Gleise in einem Gleisblock"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:187
-msgid "Add or Update car object"
-msgstr "Einen Wagen zufügen oder aktualisieren"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:188
-msgid "Manufacturer name"
-msgstr "Name des Herstellers"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:191
-msgid "Is the Car a Locomotive?"
-msgstr "Ist der Wagen eine Lokomotive?"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:192
-msgid "Part Number and Description"
-msgstr "Bestellnr. und Beschreibung"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:193
-msgid "Manufacturer Part Number"
-msgstr "Bestellnummer des Herstellers"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:194
-msgid "Use the Selected figure as the car image"
-msgstr "Benutze die ausgewählte Zeichnung als Wagenabbild"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:195
-msgid "Use the default figure as the car image"
-msgstr "Benutze die Standardzeichnung als Wagenabbild"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:196
-msgid "Optional description of the Car Part"
-msgstr "Optionale Beschreibung des Wagenmuster"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:197
-msgid "Flip car image"
-msgstr "Wagenabbild spiegeln"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:198
-msgid "Display Car Item information or reporting marks and dimensions"
-msgstr "Informationen über den Wagen oder Kennzeichen und Abmessungen anzeigen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:199
-msgid "Full Roadname"
-msgstr "Bahngesellschaft"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:200
-#: ../../../../build/work/app/bin/bllnhlp.c:201
-msgid "Car Type"
-msgstr "Wagenart"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:202
-msgid "Reporting Marks (Roadname abbreviation)"
-msgstr "Wagenkennzeichen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:203
-#: ../../../../build/work/app/bin/bllnhlp.c:379
-msgid "Car Number"
-msgstr "Wagennummer"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:204
-msgid "Car body Color"
-msgstr "Wagenfarbe"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:205
-msgid "Length of car body"
-msgstr "Länge des Aufbau"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:206
-msgid "Width of car body"
-msgstr "Breite des Aufbau"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:207
-msgid "Distance between Trucks "
-msgstr "Abstand zwischen den Drehgestellen "
-
-#: ../../../../build/work/app/bin/bllnhlp.c:208
-msgid "Coupler are mounted on body or truck"
-msgstr "Kupplungen sind am Wagenaufbau oder an den Drehgestellen befestigt"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:209
-msgid "Overall Coupled Length"
-msgstr "Gekuppelte Gesamtlänge"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:210
-msgid "Coupler Length from end of car"
-msgstr "Kupplungslänge vom Ende des Wagen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:211
-msgid "Diagram of Car"
-msgstr "Diagram der Lokomotive oder Wagens"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:212
-msgid "Item Index Number"
-msgstr "Laufende Nummer"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:213
-msgid "Original Purchase Price"
-msgstr "Ursprünglicher Kaufpreis"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:215
-msgid "Condition of car"
-msgstr "Zusatnd des Wagen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:216
-msgid "Original Purchase Date"
-msgstr "Ursprüngliches Kaufdatum"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:217
-msgid "Last Service Date"
-msgstr "Letztes Servicedatum"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:218
-msgid "Number of identical cars to be entered"
-msgstr "Anzahl der zusätzlichen, gleichartigen Wagen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:219
-msgid "Do all the cars have the same Number?"
-msgstr "Haben alle Wagen dieselbe Nummer?"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:220
-msgid "Notes about the car"
-msgstr "Anmerkungen zu dem Wagen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:221
-#: ../../../../build/work/app/bin/bllnhlp.c:222
-msgid "Create a new car Part or Prototype definitions"
-msgstr "Einen neuen Lokomotiven oder Wagen Prototyp erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:223
-msgid "Finds the selected Car Item on the layout"
-msgstr "Suche den ausgewählten Wagen auf der Anlage"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:224
-#: ../../../../build/work/app/bin/bllnhlp.c:225
-#: ../../../../build/work/app/bin/bllnhlp.c:226
-#: ../../../../build/work/app/bin/bllnhlp.c:227
-msgid "Sort the Item list"
-msgstr "Sortierung auswählen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:229
-msgid "Edit the selected Car Item"
-msgstr "Markierte Lokomotive oder Wagen bearbeiten"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:230
-msgid "Add a new Car Item"
-msgstr "Neuen Wagen hinzufügen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:231
-msgid "Delete the selected Car Items"
-msgstr "Markierte Lokomotiven oder Wagen löschen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:232
-msgid "Import a Car Item .csv file"
-msgstr "Lokomotiven oder Wagen aus einer .csv Datei importieren"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:233
-msgid "Export a Car Item .csv file"
-msgstr "Exportieren der markierten Lokomotiven oder Wagen in eine .csv Datei"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:234
-msgid "Create a text list of the Car Items"
-msgstr "Textdatei der Lokomotiven oder Wagen erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:235
-msgid "Specifies the radius of the circle track"
-msgstr "Gibt den Radius des Gleiskreises an"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:236
-msgid "How to draw track being moved/rotated"
-msgstr ""
-"Festlegen wie Gleise gezeichnet werden, sobald sie bewegt/rotiert werden"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:237
-msgid "Default command is Describe or Select"
-msgstr "Standardbefehl ist Eigenschaften oder Auswählen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:238
-msgid "Action to invoke on Right-Click"
-msgstr "Festlegen welche Aktion beim Rechtsklick erfolgen soll"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:240
-msgid "The list of control elements"
-msgstr "Die Liste der Steuerungselemente"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:241
-msgid "Edit the element"
-msgstr "Das Element bearbeiten"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:242
-msgid "Delete the element"
-msgstr "Das Element löschen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:243
-msgid "Contents Label for new Parameter file"
-msgstr "Inhaltsbeschreibung für neue Parameterdatei"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:244
-msgid "List of custom designed turnouts and structures"
-msgstr "Liste der individual entwickelten Weichen und Strukturen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:245
-msgid "Invoke designer editor"
-msgstr "Vorbild bearbeiten"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:246
-msgid "Remove selected entries"
-msgstr "Ausgewählte Einträge löschen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:247
-msgid "Copy selected entries to Parameter File"
-msgstr "Ausgewählte Einträge in eine Parameterdatei verschieben"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:248
-msgid "Create a New part or prototype"
-msgstr "Neues Teil oder Prototype erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:249
-msgid "Update custom file and close"
-msgstr "Anpassungs Verwaltung speichern und schliessen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:250
-msgid "Executes the next step of the demo"
-msgstr "Nächsten Schritt der momentanen Demo anzeigen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:251
-msgid "Skip to next demo"
-msgstr "Zum nächstes Demo Kapitel springen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:252
-msgid "Stops the demonstration and returns you to XTrackCAD"
-msgstr "Demonstrations Modus verlassen und zu XTrackCAD zurückkehren"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:253
-msgid "Select speed of Playback"
-msgstr "Wiedergabegeschwindigkeit auswählen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:254
-msgid "This is where comments about the demo are displayed"
-msgstr "Kommentar zu Demos anzeigen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:291
-msgid "Move the Main canvas if you drag near the edge"
-msgstr ""
-"Bewegen den Hauptzeichenbereich wenn in der nähe der Ecken gezogen wird"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:292
-msgid "Color tracks or other objects by layer"
-msgstr "Gleise / Objekte in Ebenen einfärben"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:293
-msgid "Controls the drawing of hidden tracks"
-msgstr "Steuert das Zeichnen von versteckten Gleisen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:294
-msgid "Controls the drawing of End-Points"
-msgstr "Steuert das Zeichnen von Endpunkten"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:295
-msgid "How to draw track ties"
-msgstr "Steuert das Zeichnen der Schwellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:296
-msgid "Show crosshair at center of curves"
-msgstr "Mittelpunkt als Fadenkreuz anzeigen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:297
-msgid "Drawing scale when to draw tracks with 2 rails"
-msgstr "Mindestmaßstab für die Anzeige von Gleisen mit zwei Schienen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:298
-msgid "Drawing scale of the map window"
-msgstr "Zeichenmaßstab des Kartenfenster"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:299
-msgid "Whether the main layout is updated while dragging on the Map"
-msgstr "Aktualisierung des Gleisplans wenn in der Karte gezogen wird"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:300
-msgid "Enable labels for Turnouts, Flextrack Lengths and Elevations"
-msgstr "Zeige Beschriftungen für Weichen, Flexgleise und Steigungen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:301
-msgid "When to label Turnout, Flextrack Lengths and Elevations"
-msgstr "Wann sollen Weichen, Gleislängen oder Höhenmaß beschriftet werden"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:302
-msgid "Font size for labels on layout"
-msgstr "Zeichengrösse für Beschriftungen im Gleisplan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:303
-msgid "Label elements on the Hot Bar"
-msgstr "Beschriftungselemente des Teilekatalogs"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:304
-msgid "Label elements on layout"
-msgstr "Beschriftungselemente im Gleisplan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:305
-msgid "Label elements for lists"
-msgstr "Beschriftungselemente in den Listen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:306
-msgid "How to group cars on the Train Hot Bar"
-msgstr "Gruppierung der Waggen im Teilekatalog"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:307
-msgid "Delay (in mS) between updating train movements"
-msgstr "Aktualisierungsintervall (in ms) der Zugbewegungen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:308
-msgid "Don't show trains in tunnels when tunnels are hidden"
-msgstr "Zeige keine Züge in Tunnels wenn Tunnel verborgen sind"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:309
-msgid "Display unconnected endpoints of track with special marks"
-msgstr "Unverbundene Endpunkte hervorheben"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:310
-msgid "Whether zoom is locked to the bottom left corner or the center point"
-msgstr "Festpunkt beim Zoomen ist die linke untere Ecke oder der Mittelpunkt"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:312
-msgid "Width of the lines"
-msgstr "Breite der Linien"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:313
-msgid "Color of the lines"
-msgstr "Farbe der Linien"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:314
-msgid "List of types of Lumber"
-msgstr "Liste der Leistenmaße"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:315
-msgid "Color of Benchwork"
-msgstr "Farbe des Unterbau"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:316
-msgid "Orientation of Benchwork"
-msgstr "Ausrichtung des Unterbau"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:317
-msgid "Size of Dimension Arrows"
-msgstr "Breite der Größenpfeile"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:318
-msgid "This controls the sharpness of the easement curve"
-msgstr "Steuert die Größe des Übergangsradius"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:319
-msgid "Minimum radius"
-msgstr "Mindestgleisradius"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:320
-msgid "Maximum offset"
-msgstr "Maximaler Abstand"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:321
-msgid "Easement length"
-msgstr "Länge des Übergangsbogen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:322
-msgid ""
-"These radio buttons are a short-cut for Values of 0.0, 0.5, 1.0 and 2.0. "
-"None turns Easements off"
-msgstr ""
-"Standardwerte 0,0, 0,5, 1,0 und 2,0 können schnell gesetzt werden. "
-"Übergangsbögen können hier nicht ausgeschaltet werden"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:323
-msgid "Complete easement selection"
-msgstr "Auswahl der Übergangsbögen vervollständigen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:324
-msgid "Type of elevation"
-msgstr "Typ des Höhendpunktes"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:325
-msgid "Height of End Point"
-msgstr "Höhe des Endpunkt"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:326
-msgid "Compute elevation based on neighbors"
-msgstr "Berechne das Höhenmaß gemäß der benachbarten Gleise"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:327
-msgid "Compute grade based on neighbors"
-msgstr "Berechne Steigung gemäß der benachbarten Gleise"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:328
-msgid "Specify a name for an End-Point"
-msgstr "Einen Namen für einen Endpunkt vergeben"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:330
-msgid "Print parts list"
-msgstr "Stückliste drucken"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:331
-#: ../../../../build/work/app/bin/bllnhlp.c:431
-#: ../../../../build/work/app/bin/bllnhlp.c:531
-msgid "Invoke the Print Setup dialog"
-msgstr "Starte den Druckerkonfigursationsdialog"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:332
-msgid "Save parts list to file"
-msgstr "Stückliste in Datei speichern"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:333
-msgid "This is the list of parts for the layout"
-msgstr "Dies ist die Teileliste für diesen Gleisplan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:334
-msgid "Enable prices on the Parts List"
-msgstr "Preise in der Teileliste anzeigen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:335
-#: ../../../../build/work/app/bin/bllnhlp.c:338
-msgid "Spacing between major grid lines"
-msgstr "Abstand der Haupt Raster Linien einstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:336
-#: ../../../../build/work/app/bin/bllnhlp.c:339
-msgid "Allows the spacing to be subdivided"
-msgstr "Stellt die Unterteilung von Zwischenmarkierungen ein"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:337
-#: ../../../../build/work/app/bin/bllnhlp.c:340
-msgid "Specifies if positions are snaped in this direction"
-msgstr "Einschalten des Fangrasters für diese Ausrichtung"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:341
-#: ../../../../build/work/app/bin/bllnhlp.c:342
-#: ../../../../build/work/app/bin/bllnhlp.c:343
-msgid "Shows the origin and angle of the grid"
-msgstr "Gibt den Ausgangspunkt und Winkel des Rasters an"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:344
-msgid "Specifies if the grid is shown"
-msgstr "Anzeige des Rasters an oder aus"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:345
-msgid "Completes the grid specification"
-msgstr "Raster Anpassung speichern und beenden"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:349
-msgid "Number of segments in Group"
-msgstr "Anzahl der Segmente in der Gruppe"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:350
-msgid "Replace the Selected object with the new definition?"
-msgstr "Soll das ausgewählte Objekt durch die neue Definition ersetzt werden?"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:351
-msgid "Creates a new Structure (or Turnout)"
-msgstr "Ein neues Gebäude (oder eine Weiche) erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:352
-msgid "Elevation difference of Helix End-Points"
-msgstr "Höhenunterschied zwischen den Endpunkten der Gleiswendel"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:353
-msgid "Helix Radius"
-msgstr "Radius der Gleiswendel"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:354
-msgid "Number of turns in the helix"
-msgstr "Anzahl der Umdrehungen in der Wendel"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:355
-msgid "Angle betweek helix entrance and exit"
-msgstr "Winkel zwischen Zu- und Ausgang der Wendel"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:356
-msgid "Grade in helix"
-msgstr "Steigung in der Wendel"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:357
-msgid "Separation between helix layers"
-msgstr "Abstand zwischen den Ebenen der Wendel"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:358
-msgid "Layer list"
-msgstr "Liste der Ebenen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:359
-msgid "Layer Name"
-msgstr "Name der Ebene"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:360
-msgid "Color of layer"
-msgstr "Farbe der Ebene"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:361
-msgid "Layer is drawn on Main window"
-msgstr "Ebene im Hauptfenster darstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:362
-msgid "Layer cannot be changed"
-msgstr "Ebene schützen - kann nicht mehr geändert werden"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:363
-msgid "Layer is drawn on Map window"
-msgstr "Ebene im Kartenfenster anzeigen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:364
-msgid "Number of layer buttons to show"
-msgstr "Anzahl der Ebenenknöpfe"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:365
-msgid "Number of objects in this layer"
-msgstr "Anzahl von Objekten in dieser Ebene"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:367
-msgid "Load layer configuration from default"
-msgstr "Persönliche Einstellungen für Ebenen laden"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:368
-msgid "Save current layer configuration as default"
-msgstr "Momentane Einstellung für Ebenen speichern"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:369
-msgid "Overwrite layer configuration with system default values"
-msgstr "Einstellung für Ebenen auf Systemvorgabe zurück setzen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:370
-#: ../../../../build/work/app/bin/bllnhlp.c:371
-msgid "Specifies the size of the room (in inches or centimeters)"
-msgstr "Größenangabe des Raums (in Zentimeter oder Inch)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:372
-msgid "Specifies the layout Title that will appear on printouts"
-msgstr "Angabe eines Layout Titels welcher auf Ausdrücken erscheint"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:373
-msgid "Specifies the layout Subtitle that will appear on printouts"
-msgstr "Angabe eines Layout Untertitels welcher auf Ausdrücken erscheint"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:374
-msgid "Specifies the Modelling Scale"
-msgstr "Angabe des Modellbahnmaßstabs"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:375
-msgid "Specifies the rail gauge, ie. the distance between the rails"
-msgstr "Angabe der Spurweite, d.h. der Abstand zwischen den Schienen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:376
-msgid ""
-"Specifies minimum track radius (in inches or centimeters). Tracks with a "
-"smaller radius are considered exceptional."
-msgstr ""
-"Angabe des minimalen Gleisradius (in Zentimeter oder Inch). Gleise mit "
-"geringerem Radius werden als Ausnahme angesehen."
-
-#: ../../../../build/work/app/bin/bllnhlp.c:377
-msgid ""
-"Specifies maximum track elevation expressed as a percent (%). Tracks with a "
-"larger elevation are considered exceptional."
-msgstr ""
-"Angabe der maximalen Gleissteigung in %. Gleise mit größerer Steigung werden "
-"als Ausnahme angesehen."
-
-#: ../../../../build/work/app/bin/bllnhlp.c:380
-msgid ""
-"This is the body of the Note. To change this select Modify from the File "
-"Menu"
-msgstr ""
-"Dies ist der Notiztext. Um diesen zu ändern, wählen Sie bitte 'Ändern' aus "
-"dem 'Datei'-Menu"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:382
-msgid "Specifies number of pixels per inch (or centimeter)"
-msgstr "Gibt die Anzahl der Bildpunkte pro Inch (oder Zentimeter) an"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:384
-msgid ""
-"Specifies whether Layout Titles, Borders or Track Centerlines are printed on "
-"the BitMap"
-msgstr ""
-"Gibt an, ob Anlagentitel, Begrenzungen und Gleismitten in der Bilddatei "
-"ausgegeben werden sollen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:385
-msgid "Specifies the separation between parallel tracks"
-msgstr "Gibt den Abstand zwischen parallelen Gleisen an"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:386
-msgid "Enter your name as specified in the XTrackCAD Registration Notice"
-msgstr "Enter your name as specified in the XTrackCAD Registration Notice"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:387
-msgid "Enter the key value as specified in the XTrackCAD Registration Notice"
-msgstr "Enter the key value as specified in the XTrackCAD Registration Notice"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:388
-msgid "Validates the name and key. Terminates the registration command"
-msgstr "Validates the name and key. Terminates the registration command"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:389
-msgid "0ᅵ is up or to the right"
-msgstr "0° ist nach oben oder nach rechts"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:390
-msgid "Choose english (inches) or metric (centimeters)"
-msgstr "Einheiten auswählen: Englisch für Inches oder Metrisch für Zentimeter"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:391
-msgid "How to display length measurements"
-msgstr "Längenformat auswählen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:392
-msgid "Do not create tracks to be shorter than this value"
-msgstr "Keine Gleise kürzer als diese Mindestlänge erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:393
-msgid "Maximum distance between connected end points"
-msgstr "Maximale Distanz zwischen verbundenen Endpunkten"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:394
-msgid "Minimum angle between connected End-Points"
-msgstr "Kleinster Winkel zwischen verbundenen Endpunkten"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:395
-msgid "Specifies the minimum angle between tracks connected to a turntable"
-msgstr "Kleinster Winkel beim Anschluss von Gleisen an eine Drehscheibe"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:396
-msgid "Trains will crash above this speed"
-msgstr "Züge entgleisen oberhalb dieser Geschwindigkeit"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:397
-msgid "Enable/Disable balloon popup help windows"
-msgstr "Ein-/Ausschalten von Erklärungshilfen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:398
-msgid "How far you can move the mouse before its considered a drag"
-msgstr "Wie weit kann die Maus bewegt werden, bevor abreißen angenommen wird"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:399
-msgid "How long you can hold a mouse button down before its considered a drag"
-msgstr ""
-"Wie lange kann ein Mausknopf gedrückt bleiben, bevor abreißen angenommen wird"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:400
-msgid "Minimum distance (in pixels) between grid lines/ticks"
-msgstr "Mindestabstand (in Pixeln) zwischen Raster und Linien"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:401
-msgid ""
-"Specifies the Check Point frequency; number of modifications made since the "
-"last save."
-msgstr ""
-"Anzahl von Änderungen bevor eine neue automatische Sicherung statt findet."
-
-#: ../../../../build/work/app/bin/bllnhlp.c:402
-msgid "Resume work on last layout or start with new layout"
-msgstr "Letzten Gleisplan bearbeiten, oder einen neuen Gleisplan erstellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:404
-msgid "Updated cost of current selected item"
-msgstr "Aktualisierte Kosten für den ausgewählten Gegenstand"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:406
-msgid "Selection list for prices"
-msgstr "Auswahlliste für Preise"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:407
-#: ../../../../build/work/app/bin/bllnhlp.c:408
-#: ../../../../build/work/app/bin/bllnhlp.c:409
-msgid "Price of specified length of flex-track"
-msgstr "Preis für die angegebene Länge des Flex-Gleises"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:411
-msgid "Controls the printing of a centerline of track cmdPrint"
-msgstr "Steuert das Zeichnen der Mittellinie von Gleisen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:412
-msgid "Controls the reduction (scale) of the printout"
-msgstr "Einstellung des Verkleinerungsmaßstabs für den Ausdruck"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:413
-msgid "Scaled page width (Scale times physical page width)"
-msgstr "Seitenbreite angeben (Maßstab mal physikalischer Papierbreite)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:414
-msgid "Sets page size to the maximum (based on scale and physical page size)"
-msgstr ""
-"Setzt die Papiergröße auf das Maximum (basierend auf Maßstab und "
-"physikalischer Papiergröße)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:415
-msgid "Scaled page height (Scale times physical page height)"
-msgstr "Seitenhöhe angeben (Maßstab mal physikalischer Papierhöhe)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:416
-msgid "Sets scale, origin and angle for a one page printout of the layout"
-msgstr ""
-"Stellt Maßstab, Ausrichtung und Winkel für den momentan angezeigten "
-"Gleisplan ein"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:417
-msgid "Print page in Portrait or Landscape format"
-msgstr "Drucke im Hochformat oder Querformat"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:418
-msgid "Order of printing pages"
-msgstr "Druckreihenfolge"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:419
-msgid "Print Title, Date, Author and other information at bottom of page?"
-msgstr "Drucke Titel, Datum Autor und andere Informationen am Ende der Seite?"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:420
-msgid "Ignore unprintable page margins?"
-msgstr "Nicht druckbare Seitenränder ignorieren?"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:421
-msgid "Print Registration Marks at 1:1?"
-msgstr "Drucke Positionierungshilfen im 1:1 Maßstab?"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:422
-msgid "Print Snap Grid?"
-msgstr "Fangraster drucken?"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:423
-msgid "Print Rulers on all page edges?"
-msgstr "Lineale an allen Seitenecken drucken?"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:424
-msgid "Print Roadbed Outline?"
-msgstr "Gleisbettung drucken?"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:426
-#: ../../../../build/work/app/bin/bllnhlp.c:427
-#: ../../../../build/work/app/bin/bllnhlp.c:429
-msgid ""
-"Origin of the print grid. This is useful if you want to reprint a set of "
-"pages"
-msgstr ""
-"Ursprung des Druckraster. Hilfreich, wenn einige Seiten erneut gedruckt "
-"werden"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:428
-msgid "Resets the origin and angle to 0"
-msgstr "Ausrichtung und Winkel auf 0 zurücksetzen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:430
-msgid "Deselects all pages"
-msgstr "Alle Seiten abwählen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:432
-msgid "Print selected pages and terminates the print command"
-msgstr "Ausdrucken der ausgewählten Seiten und den Dialog Drucken schließen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:433
-msgid "List of loaded and unloaded parameter files"
-msgstr "Liste aller Parameterdateien"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:434
-msgid "Show parameter files by names or descriptions"
-msgstr "Zeige Namen oder Beschreibung der Parameter-Dateien an"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:435
-msgid "Toggle the loaded status of the selected parameter file"
-msgstr "Ändert den Status für ausgewählte Parameter-Dateien"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:436
-msgid "Find a parameter file for loading"
-msgstr "Sucher eine Parameterdatei zum Einlesen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:437
-msgid "Update parameter file list"
-msgstr "Aktualisiere die Liste der Parameterdateien"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:438
-msgid "Select all parameter files shown"
-msgstr "Alle angezeigten Parameter-Dateien auswählen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:439
-msgid "Profile of specified path"
-msgstr "Höhenprofil der ausgewählten Verbindung"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:440
-msgid "Clear the profile"
-msgstr "Lösche das Höhenprofil"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:441
-msgid "Print the profile"
-msgstr "Höhenprofil drucken"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:443
-msgid "Stop recording"
-msgstr "Aufzeichnung beenden"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:444
-msgid "Insert a message"
-msgstr "Eine Nachricht einfügen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:445
-msgid "End a message"
-msgstr "Ende einer Mitteilung"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:446
-msgid "Message body"
-msgstr "Mitteilung"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:447
-msgid "Possible turnouts"
-msgstr "Mögliche Weichen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:448
-msgid "Skip this turnout"
-msgstr "Diese Weiche überspringen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:450
-msgid "Manufacturer of Object"
-msgstr "Hersteller des Objektes"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:451
-msgid "Description of Object"
-msgstr "Beschreibung des Objekte"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:452
-msgid "Part Nuber of Object"
-msgstr "Bestellnummer des Objektes"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:454
-msgid "Rescale by Scale Conversion or by Ratio"
-msgstr "Durch Auswahl eines Maßstab oder eines Multiplikators skalieren"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:455
-msgid "Original Scale of the selected objects"
-msgstr "Ursprünglicher Maßstab der ausgewählten Objekte"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:456
-msgid "Original Gauge of the selected objects"
-msgstr "Ursprüngliche Spurweite der ausgewählten Objekte"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:457
-msgid "New Scale of the selected objects"
-msgstr "Neuer Maßstab der ausgewählten Objekte"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:458
-msgid "New Gauge of the selected objects"
-msgstr "Neu Spurweite der ausgewählten Objekte"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:459
-msgid "Change track dimensions to new scale"
-msgstr "Abmessungen des Gleises auf den neuen Maßstab umrechnen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:460
-msgid "Change size by this amount"
-msgstr "Größe um einen Faktor verändern"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:462
-msgid "Snap Grid Line and Division"
-msgstr "Fangraster Linien und Unterteilungen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:463
-msgid "X and Y position markers"
-msgstr "X und Y Positionsmarkierungen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:464
-msgid "Border rulers, room boundaries and table edges"
-msgstr "Begrenzungslinien, Raumumriß und Anlagenkanten"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:465
-msgid "Primary Axis of grid rotation"
-msgstr "Erste Achse für Rasterdrehung"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:466
-msgid "Secondary Axis of grid rotation"
-msgstr "Zweite Achse für Rasterdrehung"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:467
-msgid "Unselected tracks"
-msgstr "Nicht ausgewählte Gleise"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:468
-msgid "Selected tracks"
-msgstr "Ausgewählte Gleise"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:469
-msgid "Color of tracks on the Profile path"
-msgstr "Farbe für Gleise auf Höhenverlauf"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:470
-msgid "Color of Exceptional tracks"
-msgstr "Farbe für Gleise außerhalb der Grenzwerte"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:471
-msgid "Color of track ties"
-msgstr "Farbe der Schwellen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:472
-msgid "Updates the colors"
-msgstr "Farben aktualisieren"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:473
-msgid "Angle in degrees"
-msgstr "Winkel in Grad"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:474
-msgid "Rotate object(s) by specified amount"
-msgstr "Objekte um einen bestimmten Winkel drehen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:475
-msgid "Choose commands to be sticky"
-msgstr "Wiederholte Befehle auswählen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:476
-msgid "Make the commands sticky"
-msgstr "Mache die Befehle wiederholbar"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:477
-msgid "List of available structure"
-msgstr "Liste der verfügbaren Gebäude"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:478
-msgid "Diagram of the selected structure"
-msgstr "Zeichnung des ausgewählten Gebäudes"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:479
-msgid "Hide Selection window when placing Structure"
-msgstr "Verberge Auswahlfenster bis das Gebäude plaziert ist"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:480
-msgid "Drawing scale and size"
-msgstr "Zeichnungsmaßstab und Größe"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:481
-msgid "Complete structure placement"
-msgstr "Anordnung des Gebäude abschliessen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:482
-msgid "Choose a Pier number"
-msgstr "Bestellnummer eingeben"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:483
-msgid "Name of the Motor"
-msgstr "Name des Weichenantriebs"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:484
-msgid "Value when switch is normal"
-msgstr "Werte bei normaler Weichenposition"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:485
-msgid "Value when the switch is reversed"
-msgstr "Wert bei umgekehrter Weichenposition"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:486
-msgid "Value for a positive comfirmation of switch position"
-msgstr "Wert bei positiver Bestätigung der Weichenposition"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:488
-msgid "Useful information about the program"
-msgstr "Nützliche Informationen über das Programm"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:489
-msgid "Show Tip of the Day every time the program starts"
-msgstr "Bei jedem Start den Tipp des Tages anzeigen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:490
-msgid "Show the next Tip of the Day"
-msgstr "Gehe zum nächsten Tipp des Tages"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:491
-msgid "Show the previous Tip of the Day"
-msgstr "Gehe zum vorherigen Tipp des Tages"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:493
-msgid "Controls which Command Buttons are displayed"
-msgstr "Ein- oder Ausblenden von Befehls-Knöpfen in der Werkzeugleiste"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:494
-msgid "List of Cars"
-msgstr "Liste der Wagen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:495
-msgid "List of active trains"
-msgstr "Liste der aktiven Züge"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:497
-msgid "Train odometer"
-msgstr "Entfernungsmesser"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:498
-msgid "Reset odometer to 0"
-msgstr "Kilometerzähler auf 0 zurücksetzen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:499
-msgid "Find train on layout"
-msgstr "Finde einen Zug auf der Anlage"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:500
-msgid "Follow train around layout"
-msgstr "Zum Zug über die Anlage folgen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:501
-msgid "Flip direction at End Of Track"
-msgstr "Am Ende des Gleis die Fahrtrichtung umkehren"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:502
-msgid "Change direction of train"
-msgstr "Richtung des Zuges ändern"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:503
-msgid "Stop the train"
-msgstr "Anhalten des Zuges"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:504
-msgid "List of available turnouts for the current scale"
-msgstr "Liste der im aktuellen Maßstab verfügbaren Weichen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:505
-msgid ""
-"Diagram of the currently selected turnout. Click on a End-Point to select "
-"the Active End-Point"
-msgstr ""
-"Zeichnung der ausgewählten Weiche. Der aktive Endpunkt kann durch Klicken "
-"auf einen Endpunkt gesetzt werden"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:506
-msgid ""
-"A menu list of various type of turnouts and sectional tracks you can define"
-msgstr ""
-"Eine Aiuswahlliste verschiedener Arten von Weichen und Festgleisen, die Sie "
-"definieren können"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:507
-msgid "Hide Selection window when placing Turnout"
-msgstr "Auswahlfenster während des Verlegen verbergen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:508
-msgid "The selected Active End-Point"
-msgstr "Der ausgewählte, aktive Endpunkt"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:509
-msgid "Current selected turnout, (displayed in the diagram window)"
-msgstr "Momentan ausgewählte Weiche, (sichtbar im Diagram-Fenster)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:510
-msgid "One the End-Points that can be selected"
-msgstr "Einer der Endpunkte, der ausgewählt werden kann"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:512
-#: ../../../../build/work/app/bin/bllnhlp.c:513
-msgid "Angle of the specified track to the center line of the turnout"
-msgstr "Winkel zwischen dem ausgwählten Gleise und der Mittellinie der Weiche"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:514
-msgid "Specifies if angles are entered as Frog Numbers or in degrees"
-msgstr "Soll der Winkel als Steigung oder in Grad angegeben werden"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:515
-#: ../../../../build/work/app/bin/bllnhlp.c:516
-msgid "Desciption"
-msgstr "Beschreibung"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:517
-msgid "Turnout description (Manuf., Size, Part Number, etc)"
-msgstr "Beschrebung der Weiche (Hersteller, Winkel, Teilenummer, etc.)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:518
-#: ../../../../build/work/app/bin/bllnhlp.c:519
-#: ../../../../build/work/app/bin/bllnhlp.c:520
-msgid "Length from the base to the end of the specified track"
-msgstr "Länge von der Grundlinie zum Ende des ausgewählten Gleis"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:522
-#: ../../../../build/work/app/bin/bllnhlp.c:523
-msgid "Offset of the track End-Point from the center line of the turnout"
-msgstr "Abstand des Endpunktes von der Mittellinie der Weiche"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:526
-#: ../../../../build/work/app/bin/bllnhlp.c:527
-msgid "Prints a full size diagram of the turnout for checking"
-msgstr "Erstellt einen Probeausdruck der Weiche"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:528
-msgid "Color of Roadbed lines"
-msgstr "Farbe der Gleisbettlinien"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:529
-msgid "Width of Roadbed lines"
-msgstr "Abstand des Gleisbettmarkierungen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:530
-msgid "Width of Roadbed"
-msgstr "Breite des Gleisbett"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:532
-msgid "Closes the window and returns to the Turnout Selection window"
-msgstr "Schliesst das Fenster und kehrt zur Weichenauswahl zurück"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:533
-msgid "Specifies the diameter of the turntable"
-msgstr "Legt den Durchmesser der Drehscheibe fest"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:534
-msgid "Old Turnout title"
-msgstr "Alter Bezeichnung der Drehscheibe"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:535
-msgid "List of available titles"
-msgstr "Liste der verfügbaren Titel"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:536
-msgid "Leave the Turnouts' title unchanged"
-msgstr "Tiitel der Weiche unverändert lassen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:537
-msgid "Invoke the Parameter Files dialog"
-msgstr "Auswahl der Parameterdateien"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:538
-msgid "List of available turnouts"
-msgstr "Liste der verfügbaren Weichen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:539
-msgid "Update the Turnouts' title"
-msgstr "Aktualisiere den Titel des Gleis"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:543
-msgid "Sample"
-msgstr "Beispiel"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:545
-msgid "Slant"
-msgstr "Neigung"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:546
-msgid "Font selection dialog"
-msgstr "Dialog zur Auswahl der Schriftart"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:547
-msgid "Weight"
-msgstr "Gewicht"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:548
-msgid "Printer Abort Window"
-msgstr "Druck abbrechen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:549
-msgid "Print to filename"
-msgstr "Name der Druckdatei"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:550
-msgid "Specify Postscript font alias mapping"
-msgstr "Zuordnung der Postscript-Schriftarten angeben"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:551
-msgid ""
-"Displays the Print Setup window to change printers, orientation, paper size, "
-"etc."
-msgstr ""
-"Ruft das Drucker Dialog Fenster auf, um Drucker und oder Papier "
-"Einstellungen vornehmen zu können."
-
-#: ../../../../build/work/app/bin/bllnhlp.c:552
-msgid "Closes this dialog"
-msgstr "Dialogfenster schliessen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:553
-msgid "Page orientation"
-msgstr "Seitenausrichtung"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:554
-msgid "Unprintable margins"
-msgstr "Nicht druckbare Ränder"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:555
-msgid "Updates and closes this dialog"
-msgstr "Dialogfenster aktualisieren und schliessen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:556
-msgid "Choose paper size"
-msgstr "Papierformat auswählen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:557
-msgid "Choose printer"
-msgstr "Drucker auswählen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:558
-msgid "Print test page"
-msgstr "Drucke Testseite"
-
-#: ../../../../build/work/app/i18n/custmsg.h:7
-msgid ""
-"XTrackCAD provides demonstrations on most of the program's features. The "
-"demos can be run by clicking on the Help menu on the Main window and then "
-"selecting Demos."
-msgstr ""
-"XTrackCAD verfügt über Demos der meisten Funktionen. Diese Demos können "
-"abgespielt werden indem im Hilfe Menü des Hauptfensters der Punkt \"Demos\" "
-"ausgewählt wird."
-
-#: ../../../../build/work/app/i18n/custmsg.h:8
-msgid ""
-"The notation \"Menu|Item\" is used in the documentation (and the on-line "
-"demos and tips) to indicate the selection of a menu item.\n"
-"For example File|Open means to open the menu by clicking on File on the menu "
-"bar of the Main window and then selecting the Open item from that menu."
-msgstr ""
-"Die Darstellunsgart \"Menü|Unterpunkt\" wird in der Dokumentation den Online "
-"Demos und im Tipp des Tages verwendet, sie dient dazu die Selektion eines "
-"Unterpunktes zu beschreiben.\n"
-"\"Datei|Öffnen\" bedeutet zum Beispiel in der Menüleiste des Hauptfensters "
-"auf Datei zu klicken und dann im aufgehenden Untermenü auf die Auswahl Punkt "
-"Öffnen."
-
-#: ../../../../build/work/app/i18n/custmsg.h:9
-msgid ""
-"A number of example layouts are provided. These files are located in the "
-"'examples' directory where you installed XTrackCAD. The \"File|Open\" "
-"command will open that directory when first used."
-msgstr ""
-"Einige Beispiel Gleisplänen stehen zu Ihrer Verfügung, diese wurden im "
-"Unterverzeichnis 'examples' im Haupverzeichnis von XTrackCAD installiert. "
-"Über den Dialog \"Datei|Öffnen\" können diese geladen werden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:10
-msgid ""
-"When installed, the program measures all units in inches. You can change "
-"this on the \"Options|Preferences\" dialog by changing the Units item to "
-"Metric instead of English."
-msgstr ""
-"Nach Installation werden sämtliche Einheiten in Inches dargestellt. Diese "
-"Einstellung können Sie über den Dialog \"Optionen|Einstellungen\" ändern, "
-"indem Sie von Englisch auf Metrisch wechseln."
-
-#: ../../../../build/work/app/i18n/custmsg.h:11
-msgid ""
-"You can change the overall size of your layout on the \"Options|Layout\" "
-"dialog."
-msgstr ""
-"Die Gesamtgröße Ihres Gleisplans kann über den Dialog \"Optionen|Gleisplan\" "
-"eingestellt werden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:12
-msgid ""
-"When installed, the default command is the Describe command. More "
-"experienced users will probably want to change this to the Select command. "
-"You can do this on the \"Options|Command Options\" dialog."
-msgstr ""
-"Nach Installation ist der Standardbefehl das \"Eigenschaften\" Kommando. "
-"Erfahrene Benutzer möchten dies vielleicht in das \"Auswählen\" Kommando "
-"ändern. Dies kann über den Dialog \"Optionen|Befehl\" unter Standardbefehl "
-"erfolgen."
-
-#: ../../../../build/work/app/i18n/custmsg.h:13
-msgid ""
-"Set your modeling scale on the \"Options|Layout\" dialog. This controls the "
-"Turnouts and Structures that are available, Easement values and track gauge."
-msgstr ""
-"Stellen Sie im \"Optionen|Gleisplan\" Dialog Maßstab und Spurweite für Ihren "
-"Gleisplan ein. Diese Grundeinstellung sollte unbedingt als erstes "
-"vorgenommen werden, damit der neu eingestellte Maßstab mit dem Maßstab der "
-"geladenen Parameterdatei übereinstimmt."
-
-#: ../../../../build/work/app/i18n/custmsg.h:14
-msgid ""
-"When Selecting tracks, the connection between Selected and Unselected tracks "
-"is marked by a Red X. This indicates points where the connection between "
-"tracks will be broken if you Move or Rotate the Selected tracks."
-msgstr ""
-"Bei ausgewählten Gleisen wird die Verbindung des Gleises durch ein rotes X "
-"markiert, genau an dieser Stelle wird das Gleis getrennt wenn es verschoben "
-"oder gedreht wird."
-
-#: ../../../../build/work/app/i18n/custmsg.h:15
-msgid ""
-"You can change orientation of the pages on the Print command by moving or "
-"rotating the Print Grid.\n"
-"Shift-Left-Drag moves the grid and Shift-Right-Drag rotates the grid."
-msgstr ""
-"Die Ausrichtung von auszudruckenden Seiten kann geändert werden indem das "
-"Druckraster bewegt oder rotiert wird.\n"
-"Shift Taste nach links ziehen bewegt das Raster, Shift Taste nach rechts "
-"ziehen rotiert das Raster."
-
-#: ../../../../build/work/app/i18n/custmsg.h:16
-msgid ""
-"You can add track to any unconnected End-Point with the Modify command.\n"
-"Hold down the Shift key and click on the End-Point and drag away to create a "
-"new track segment attached to the End-Point.\n"
-"Repeat with the new End-Point to create flowing tracks."
-msgstr ""
-"Gleise können zu jedem unverbundenen Endpunkt mit \"Verändern\" hinzugefügt "
-"werden.\n"
-"Um einen neuen Gleisabschnitt zu erstellen, markieren Sie einen Endpunkt, "
-"halten Sie dann die Shift-Taste gedrückt während Sie den Gleisabschnitt "
-"verschieben.\n"
-"Wiederhohlen Sie diese Aktion mit diesem neuen Endpunkt um Gleisabschnitte "
-"weiter zu zerlegen."
-
-#: ../../../../build/work/app/i18n/custmsg.h:17
-msgid ""
-"You can create Curved tracks in four ways by dragging from:\n"
-" the 1st End-Point in the direction of the curve\n"
-" Center of the Curve to the 1st End-Point\n"
-" End-Point to the Center\n"
-" the 1st to 2nd End-Point\n"
-"Then drag on one of the Red arrows to create the final shape of the curve.\n"
-"\n"
-"You can click on the small button to the left of the Curve command button to "
-"change the method."
-msgstr ""
-"Gebogene Gleise können auf vier verschiedene Weisen erstellt werden:\n"
-" vom ersten Endpunkt in Richtung der Kurve\n"
-" vom Mittelpunkt des Gleisbogens zum ersten Endpunkt\n"
-" vom Endpunkt zum Mittelpunkt hin\n"
-" vom ersten zum zweiten Endpunkt\n"
-"Ziehen Sie dann an einem der beiden roten Pfeile, um die endgültige Kurve "
-"festzulegen.\n"
-"Die verschiedenen Methoden zur Gleisbogenerstellung können durch Anklicken "
-"des Knopfes rechts neben dem Kurvenknopf in der Werkzeugleiste ausgewählt "
-"werden ."
-
-#: ../../../../build/work/app/i18n/custmsg.h:18
-msgid ""
-"When creating a straight or a curved track by dragging from the 1st End "
-"Point, you can snap the new track to an existing open end point by holding "
-"down Shift while you click.\n"
-"The new track will be joined to the old when you create it."
-msgstr ""
-"Beim Erstellen eines geraden oder eines gebogenen Gleise durch Ziehen vom "
-"ersten Endpunkt kann das neue Gleis an dem existierenden Endpunkt "
-"ausgerichtet werden, in dem die Umschalt-Taste beim Klicken gedrückt wird.\n"
-"Das neue Gleis wird beim Erstellen mit dem vorhandenen Gleis verbunden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:19
-msgid ""
-"Track Circles provide a quick way to see what arrangement of tracks will fit "
-"in your layout spaces. Create Circles with your typical radius and place "
-"them in corners and other locations where your main-line will make changes "
-"of direction. This will give you an overall idea of how your layout will "
-"look.\n"
-"\n"
-"You can create Circles by:\n"
-" using a fixed radius\n"
-" dragging from the Center to edge\n"
-" dragging from an edge to the Center\n"
-"You can click on the small button to the left of the Circle command button "
-"to change the method."
-msgstr ""
-"Gleiskreise ermöglichen einen schnellen Weg die Aufteilung Ihres Gleisplans "
-"in den vorhanden Platz einzuteilen. Erstellen Sie Gleiskreise mit üblichen "
-"Radien und platzieren Sie diese in Ecken oder an beliebigen Stellen Ihres "
-"Hauptgleises an denen ein Richtungswechsel statt finden soll. Dies wird "
-"Ihnen helfen einen ersten Überblick von Ihrem gesamten Gleisplan zu "
-"erhalten.\n"
-"\n"
-"Gleiskreise können wie folgt erzeugt werden:\n"
-" mit einem festgelegten Radius\n"
-" durch ziehen aus der Mitte zur Kante\n"
-" durch ziehen von der Kante zur Mitte\n"
-"Die verschiedenen Methoden zur Gleiskreiserstellung können ausgewählt werden "
-"durch anklicken des Knopfes rechts neben dem Greisknopf in der "
-"Werkzeugleiste."
-
-#: ../../../../build/work/app/i18n/custmsg.h:20
-msgid ""
-"Easements (spiral transition curves) are used when track changes from "
-"straight to curved by gradually changing the radius. This improves "
-"operation and appearance.\n"
-"Easements are created with Joining or Extending Tracks.\n"
-"The Easement dialog is used to control easements."
-msgstr ""
-"Übergangsbögen werden benutzt wenn gerades Gleis stufenweise bei sich "
-"änderndem Radius in kurviges Gleis ändert, Dies verbessert die Benutzbarkeit "
-"und verschönert das Erscheinungsbild.\n"
-"Übergangsbögen werden erstellt indem sie an vorhandene Gleise angeängt "
-"werden.\n"
-"Die Schaltfläche \"Easement None\" wird verwendet um die Einstellungen für "
-"Übergangsbögen vornehmen zu können."
-
-#: ../../../../build/work/app/i18n/custmsg.h:21
-msgid ""
-"\"Help|Recent Messages\" shows the last error and warning messages that were "
-"generated by the program. Also an explanation of each message is displayed."
-msgstr ""
-"\"Hilfe|Letzte Mitteilungen\" zeigt die letzen Fehler/Warnungen an die vom "
-"Programm veruhrsacht wurden. Weiterhin wird eine Erklärung zu jeder Meldung "
-"angezeigt."
-
-#: ../../../../build/work/app/i18n/custmsg.h:22
-msgid ""
-"When creating stall tracks for a turntable, you usually want the the stall "
-"tracks to be spaced evenly.\n"
-"The \"Turntable Angle\" item on \"Options|Command Options\" dialog can be "
-"used specify the minimum angle between stall tracks."
-msgstr ""
-"Beim Anschluss von Endgleisen an eine Drehscheibe, möchte man diese "
-"üblicherweise gleichmäßig anschließen.\n"
-"Der Punkt \"Drehscheibenwinkel\" im Dialog \"Optionen|Einstellungen\" kann "
-"dazu benutzt werden den kleinst möglichen Winkel, beim Anschluss solcher "
-"Gleise einzustellen."
-
-#: ../../../../build/work/app/i18n/custmsg.h:23
-msgid ""
-"XTrackCAD periodically saves the current layout in a check point file. The "
-"'Check Point' item on the 'Options|Preferences' dialog controls how often "
-"the file is saved.\n"
-"You can recover your working file after a system crash by copying the "
-"checkpoint file (xtrkcad.ckp in the XTrackCAD Working directory) to file.xtc"
-msgstr ""
-"XTrackCAD sichert ständig ihre aktuelle Arbeit in eine temporäre Datei. Im "
-"Feld 'Sicherungskopie' unter dem Menüpunkt 'Optonen|Einstellungen' können "
-"Sie die Häufigkeit dieser automatischen Sicherung festlegen.\n"
-"Nach einem System/Programm Absturz kopieren Sie einfach die Datei xtrkcad."
-"ckp (im Arbeitsverzeichnis von XTrackCAD) nach <Geisplan>.xtc"
-
-#: ../../../../build/work/app/i18n/custmsg.h:24
-msgid ""
-"The Parallel command is helpful to layout yards and sidings. If the "
-"Parallel track abuts with an existing track, it is automatically connected."
-msgstr ""
-"Das Parallel Kommando ist nützlich um Bahnhöfe und Abstellgeise zu "
-"erstellen. Falls sich ein parallel Gleis mit einem existierenden Gleis fast "
-"berührt wird dieses automatisch verbunden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:25
-msgid ""
-"You can use Shift-Drag in Select command to move and rotate selected "
-"tracks.\n"
-"Shift-Left-Drag moves tracks and Shift-Right-Drag rotates them.\n"
-"Control-Left-Drag can move labels."
-msgstr ""
-"Gleise können verschoben oder rotiert werden indem sie mit Hilfe des "
-"\"Ändern|Auswählen\" Kommandos ausgewählt werden und dann druch "
-"gleichzeitiges festhalten der Shift-Taste und einer Maustaste bewegt "
-"werden.\n"
-"Shift und linke Maustaste verschiebt ein Gleis.\n"
-"Shift und rechte Maustaste rotiert ein Gleis.\n"
-"Steuerung und linke Maustaste verschiebt Beschreibungen."
-
-#: ../../../../build/work/app/i18n/custmsg.h:26
-msgid ""
-"You can move and rotate the Snap Grid to align with existing track or "
-"benchwork."
-msgstr ""
-"Das Fangraster kann bewegt oder gedreht werden um es an Gleisen oder "
-"Aufbauten ausrichten zu können."
-
-#: ../../../../build/work/app/i18n/custmsg.h:27
-msgid ""
-"Use the Parts List command to measure track length.\n"
-"Select the tracks you want to measure and then click on the Parts List "
-"button. The report will list the total of length of the selected flex-"
-"track. You will have to add in the length of any Turnouts."
-msgstr ""
-"Der Dialog \"Verwalten|Teileliste\" kann dazu benutzt werden Gleislängen zu "
-"messen.\n"
-"Markieren Sie die zu messenden Gleise und wählen Sie den Teileliste Punkt. "
-"Die auftauchende Liste zeigt die Länge der ausgewählten Gleise an. Die Länge "
-"der Weichen muss hinzugezählt werden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:28
-msgid ""
-"The length of flex-track attached to each Turnout is displayed on layout "
-"near the end-points of the Turnouts.\n"
-"Make sure 'Lengths' option of the 'Label Enable' toggle button on the "
-"Display dialog is selected."
-msgstr ""
-"Die Länge von Flex-Gleis welches mit Weichen verbunden ist wird in der Nähe "
-"des Endpunktes der Weiche angezeigt.\n"
-"Stellen Sie sicher das der Auswahlpunkt \"Längen\" im Dialog \"Optionen|"
-"Anzeige\" ausgewählt ist."
-
-#: ../../../../build/work/app/i18n/custmsg.h:29
-msgid ""
-"The Profile command can be used to find the length of a continous section of "
-"track.\n"
-"Select the track at the beginning and end of the section. The total length "
-"of track will be displayed on the Profile window in the lower right corner.\n"
-"Note: the Profile selects the shortest path between the two selected tracks, "
-"which might not be the path you are interested in. In this case, select the "
-"first track and then select other tracks along the path."
-msgstr ""
-"Das Kommando \"Höhenprofil\" im Menü \"Ändern\" kann dazu benutzt werden um "
-"die Länge einer zusammenhängenden Gleissektion heraus zu finden.\n"
-"Markieren Sie den Anfang und das Ende dieser Sektion. Die totale Länge "
-"dieser Gleissektion wird in der unteren rechten Ecke des Höhenprofil "
-"Fensters angezeigt.\n"
-"Hinweis: Das Höhenprofil wählt immer den kürzesten Weg zwischen beiden "
-"markierten Gleisen, möglicherweise ist dies aber nicht die Länge an der Sie "
-"interresiert sind. In diesem Fall wählen Sie einfach den gleichen Startpunkt "
-"und den nächst frührer möglichen Endpunkt aus."
-
-#: ../../../../build/work/app/i18n/custmsg.h:30
-msgid ""
-"Layers can be used to contain different groups of tracks or other features. "
-"You might use one layer for the main-line, another of staging tracks and "
-"another of benchwork.\n"
-"You can give each layer a name (by using the Layer dialog). This name will "
-"be displayed as the Balloon Help for the corresponding Layer button, if you "
-"have Balloon Help enabled on the Display dialog."
-msgstr ""
-"Ebenen können dazu benutzt werden um verschiedene Stockwerke oder Funktionen "
-"darstellen zu können. Eine Ebene kann z.B. für das Hauptgleis verwendet "
-"werden, eine weitere für Schattenbahnhöfe und eine weitere für Aufbauten und "
-"oder Tunnnel.\n"
-"Jeder Ebene kann ein Name über den \"Verwalten|Ebenen\" Dialog zugewiesen "
-"werden. Falls die Auswahl \"Sprechblasen\" im Menü \"Optionen|Einstellungen"
-"\" aktiviert wurde, wird dieser vergebene Name in der Werkzeugleiste für "
-"diese Ebene angezeigt."
-
-#: ../../../../build/work/app/i18n/custmsg.h:31
-msgid ""
-"You can remove groups of buttons or the Hot Bar from the Main window to give "
-"you more room if you are not using some features. Also, the number of Layer "
-"buttons displayed is controlled by the Layers dialog."
-msgstr ""
-"Die Werkzeugleiste kann über den Dialog \"Anzeige|Werkzeugleiste anpassen\" "
-"verändert werden um mehr Platz im Hauptfenster zur Verfügung zu stellen. Die "
-"Anzahl der Ebenenknöpfe wird über den Dialog \"Verwalten|Ebenen\" "
-"eingestellt."
-
-#: ../../../../build/work/app/i18n/custmsg.h:32
-msgid ""
-"The size of the Map window is controlled by the overall size of the room "
-"(specified on the Layout dialog) and the Map Scale (on the Display dialog). "
-"You can make the Map window larger (or smaller) by decreasing (or "
-"increasing) the Map Scale.\n"
-"XTrackCAD will prevent you from making the Map window too small or too large."
-msgstr ""
-"Die Größe des Kartenfensters wird in Abhängigkeit zur eingestellten "
-"Gesamtgröße des Raums kontrolliert. Die Gesamtgröße des Raums wird über den "
-"Dialog \"Optionen|Gleisplan\", der Maßstab des Kartenfensters über die "
-"Auswahl \"Kartenmaßstab\" im Dialog \"Optionen|Anzeige\" eingestellt. Die "
-"Größe des Kartenfensters kann verändert werden, indem der Wert für "
-"Kartenmaßstab entweder erhöht oder verkleinert wird.\n"
-"XTrackCAD lässt keine zu kleinen/großen Werte für das Kartenfenster zu."
-
-#: ../../../../build/work/app/i18n/custmsg.h:33
-msgid ""
-"You can unload parameter files you are not using by the Parameter Files "
-"dialog. This removes unused Turnout and Structure definitions from the Hot "
-"Bar and makes the program start faster."
-msgstr ""
-"Damit Gleise in der Schnellauswahl auftauchen ist es nötig eine Gleis "
-"Parameterdatei für Ihren Gleisplan zu laden, im Dialog \"Datei|"
-"Parameterdateien\" können Sie die für Ihr Gleis nötige Parameterdatei laden. "
-"Nicht mehr benötigte Parameterdateien können über den gleichen Dialog "
-"entladen werden. Hierdurch werden nicht mehr benötigte Weichen/Gleise von "
-"der Schnellauswahl gelöscht was das Programm schneller starten läßt."
-
-#: ../../../../build/work/app/i18n/custmsg.h:34
-msgid ""
-"Right-Click on the Main window displays a menu list of commands as an "
-"alternative to pressing the buttons on the tool bar or using the menu "
-"accelerator keys."
-msgstr ""
-"Alternativ zur Werkzeugleiste oder den Menütasten kann durch Rechts-Klick im "
-"Hauptfenster ein weiteres Befehlsmenü benutzt werden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:35
-msgid ""
-"Holding down the Shift key while you Right-Click will display options for "
-"the current command (if any)."
-msgstr ""
-"Bleibt die Shift Taste gedrückt während Sie ein Kommando ausgewählt haben "
-"werden (wenn vorhanden) Optionen für dieses Kommando angezeigt."
-
-#: ../../../../build/work/app/i18n/custmsg.h:36
-msgid ""
-"Right-Click on the Hot Bar displays a menu of the different groups of "
-"objects which you can use to jump to the group you are interested in.\n"
-"Pressing a numeric key (1-9 and 0) moves the Hot Bar to corresponding "
-"position (1 is the start, 5 is half way, 0 is the end)."
-msgstr ""
-"Rechts Klick in der Schnellauswahl öffnet ein Menü mit verschiedenen "
-"Objektgruppen, diese können benutzt werden um schnell zu dieser Art von "
-"Gleisen zu springen.\n"
-"Durch drücken von Zahlen in der Schnellauswahl (1-9 und 0) kann auch die "
-"entsprechende Position der Gleisauswahl geändert werden, hierbei "
-"kennzeichnet 1 die erste Gleisauswahl, 5 gibt die Mitte der Auswahl an und 0 "
-"das Ende."
-
-#: ../../../../build/work/app/i18n/custmsg.h:37
-msgid ""
-"Right-Drag on the Map window sets the origin and scale of the Main window.\n"
-"The Main window will be centered on the spot where you started the Draw and "
-"how far you Drag will control how large an area you can see on the Main "
-"window."
-msgstr ""
-"Durch ziehen mit der rechten Maustaste im Kartenfenster wird der Focus und "
-"Maßstab im Hauptfenster eingestellt.\n"
-"Das Hauptfenster wird hierbei aufgrund der markierten Auswahl im "
-"Kartenfenster zentriert dargestellt."
-
-#: ../../../../build/work/app/i18n/custmsg.h:38
-msgid ""
-"To refresh the Main window, press Control-L (hold down the 'Ctrl' key and "
-"then press the 'l' key)."
-msgstr ""
-"Um die Darstellung im Hauptfenster zu erneuern, benutzen Sie Strg+L (halten "
-"Die die Steuernung Taste gedrückt und tippen Sie den Buchstaben 'l')."
-
-#: ../../../../build/work/app/i18n/custmsg.h:39
-msgid ""
-"The File menu contains a list of the last 5 layouts you were working on."
-msgstr ""
-"Der Dialog \"Datei\" enthält eine Liste der letzten 5 Gleispläne die Sie "
-"geöffnet hatten."
-
-#: ../../../../build/work/app/i18n/custmsg.h:40
-msgid ""
-"The Print command can optionally print lines representing the roadbed for "
-"all tracks. This is useful when printing full size (1:1) for cutting "
-"roadbed."
-msgstr ""
-"Im \"Drucken\" Dialog kann, die Auswahl \"Gleisbettung drucken\" ausgewählt "
-"werden, um im (1:1) Maßstab Gleisbettvorlagen ausdrucken zu können."
-
-#: ../../../../build/work/app/i18n/custmsg.h:41
-msgid ""
-"Pressing the 'Esc' key cancels the current command and invokes the default "
-"command, (which is either Describe or Select)."
-msgstr ""
-"Durch drücken der 'ESC' Taste wird der momentane Befehl abgebrochen und "
-"automatisch der Standardbefehl aktiviert, (was entweder Eigenschaften oder "
-"Auswählen ist)."
-
-#: ../../../../build/work/app/i18n/custmsg.h:42
-msgid ""
-"When moving or rotating tracks on slow machines or with a large number of "
-"tracks, you can improve performance by changing the way tracks are drawn "
-"while being moved.\n"
-"Shift-Right click will display a menu containing options to draw tracks "
-"normally, as simple lines or just draw end-points."
-msgstr ""
-"Auf langsamen Computern oder bei hoher Anzahl von Gleisen, kann die Art und "
-"Weise wie Gleise neu gezeichnet werden verändert werden.\n"
-"Nachdem Gleise markiert wurden, kann durch festhalten der Shift-Taste und "
-"einem rechts Klick mit der Maus in einem Options Menü ausgewählt werden wie "
-"die Gleise dargestellt werden sollen: Normal, Einfach oder nur als Endpunkte."
-
-#: ../../../../build/work/app/i18n/custmsg.h:43
-msgid ""
-"The colors of different parts of the Main window can be changed with the "
-"Colors dialog. In particular, the Snap Grid color can be changed to make it "
-"more visible when printed."
-msgstr ""
-"Farben der verschiedenen Baugruppen im Hauptfenster können über den Dialog "
-"\"Optionen|Farben\" verändert werden. Im Besonderen kann die Farbe des "
-"Fangrasters geändert werden um es beim ausdrucken besser sichtbar machen zu "
-"können."
-
-#: ../../../../build/work/app/i18n/custmsg.h:44
-msgid ""
-"By default objects are drawn in their normal colors. Tracks will be drawn "
-"in Black. Objects can also be drawn in the color according to their Layer. "
-"The color of a Layer is displayed on the corresponding Layer button.\n"
-"The Display dialog 'Color Layers' item has separate toggles for Tracks and "
-"non-Tracks."
-msgstr ""
-"Üblicherweise werden Objekte in Ihren voreingestellten Farben gezeichnet. "
-"Gleise werden in schwarz dargestellt. Objekte können in den Farben ihrer "
-"jeweiligen Ebenen dargestellt werden. Die Farbe einer Ebene wird auf ihrem "
-"zugehörigen Ebenenknopf angezeigt.\n"
-"Die Auswahl \"Ebenenfarben\" im Dialog \"Optionen|Anzeige\" besitzt jeweils "
-"für Gleise und Sonstige eine getrente Möglichkeit zur Aktivierung von Farben."
-
-#: ../../../../build/work/app/i18n/custmsg.h:45
-msgid ""
-"Each Layer can be drawn or hidden by the 'Visible' toggle on the Layers "
-"dialog. "
-msgstr ""
-"Jede Ebene kann im Dialog \"Verwalten|Ebenen\" verborgen oder angezeigt "
-"werden. "
-
-#: ../../../../build/work/app/i18n/custmsg.h:46
-msgid ""
-"Short cut Layer buttons can also be displayed on the tool bar for up to the "
-"first 20 layers.\n"
-"This buttons allow to Show or Hide the layers."
-msgstr ""
-"Ebenenknöpfe können für die ersten 20 Ebenen in der Werkzeugleiste "
-"dargestellt werden, diese Nummernknöpfe können dazu benutzt werden um Ebenen "
-"zu verbergen oder anzuzeigen."
-
-#: ../../../../build/work/app/i18n/custmsg.h:47
-msgid "The name of the Layer is the Balloon Help for the Layer button."
-msgstr ""
-"Der Name einer Ebene wird in der Sprechblase der jeweiligen Ebene angezeigt."
-
-#: ../../../../build/work/app/i18n/custmsg.h:48
-msgid ""
-"The playback speed of the Demos can be changed by using Speed drop down list "
-"on the Demo window."
-msgstr ""
-"Die Wiedergabegeschwindigkeit von Demos kann durch den Auswahlreiter rechts "
-"oben im Demo Fenster eingestellt werden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:49
-msgid ""
-"Many of the commands and dialogs can be invoked by special key combinations "
-"called Menu-Accelerators. These are listed on the Menus next to the command "
-"name. For example, Control-P will invoke the Print command."
-msgstr ""
-"Viele Kommandos oder Menü Dialoge können über Tastaturkürzel aufgerufen "
-"werden. Diese Kürzel werden rechts (wenn verfügbar) neben jedem Kommando "
-"angezeigt. Zum Beispiel: Strg+P im Menü \"Datei|Drucke\" ruft den Drucken "
-"Dialog auf."
-
-#: ../../../../build/work/app/i18n/custmsg.h:50
-msgid ""
-"The Connect command is used to join Sectional track pieces that don't quite "
-"fit together.\n"
-"This command works by adding small gaps between other tracks to move the "
-"selected End-Points closer together."
-msgstr ""
-"Das \"Gleisstücke verbinden\" Kommando im Dialog \"Ändern\" wird verwendet "
-"um Gleisstücke die nicht verbunden sind miteinander zu verbinden. Dies wird "
-"erreicht indem kleine Lücken bei andern Gleisen eingefügt werden damit die "
-"beiden Endpunkte miteinander verbunden werden können."
-
-#: ../../../../build/work/app/i18n/custmsg.h:51
-msgid ""
-"To copy a group of objects: Select the objects, press Control-C (or select "
-"Copy from the Edit menu), press Control-V (or select Paste from the Edit "
-"menu).\n"
-"The selected tracks will be copied to the layout and you can Move or Rotate "
-"them into position."
-msgstr ""
-"Um eine Gruppe von Objekten zu kopieren: Selektieren Sie diese, drücken Sie "
-"Strg+C (oder wählen Sie \"Kopieren\" im Menü \"Bearbeiten\" aus), drücken "
-"Sie Strg+V (oder wählen Sie \"Einfügen\" im Menü \"Bearbeiten\" aus).\n"
-"Die kopierten Objekte werden in den Gleisplan eingefügt und können dann "
-"verschoben oder rotiert werden und somit in Position gebracht werden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:52
-msgid ""
-"In the Rotate (or Select) commands you can press Shift-Right-Click to "
-"display the Rotate menu which allows you to rotate the selected objects by a "
-"specific angle."
-msgstr ""
-"Bei Benutzung der Kommandos \"Rotieren\" oder \"Auswählen\" kann durch "
-"gedrückt halten der Shift-Taste und rechts Klick mit der Maustaste in einem "
-"auftauchenden Optionsmenü der Winkel zum rotieren eines Objekts ausgewählt "
-"werden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:53
-msgid ""
-"You can use the Move-To-Join option of the Join command (hold down the Shift "
-"key) to move a group of Selected tracks to attach with some unselected End-"
-"Point."
-msgstr ""
-"Das \"Verbinden\" Kommando im Menü \"Ändern\" besitzt eine Option um eine "
-"Gruppe von ausgewählten Gleisen mit einem nicht vorher spezifizierten "
-"Endpunkt verbinden zu können. Markieren Sie zunächst die zu verbindenen "
-"Gleise, wählen Sie als nächstes den Dialog \"Ändern|Verbinden\", halten Sie "
-"nun die Shift-Taste gedrückt während Sie bei gedrückter linker Maustaste die "
-"markierte Gruppe von Gleisen zum Zielpunkt führen, durch nochmaliges drücken "
-"der linken Maustaste werden die selektierten Gleise dem Endpunkt hinzugefügt."
-
-#: ../../../../build/work/app/i18n/custmsg.h:54
-msgid ""
-"The Price List dialog (on the File Menu) is used to specify the prices of "
-"each type of Turnout, Sectional Track and Structure. Also, the length and "
-"price of flex-track pieces can be specified for each scale.\n"
-"This values will be used on the Parts List report to generate total cost of "
-"the selected objects."
-msgstr ""
-"Der Dialog \"Verwalten|Preisliste\" kann verwendet werden, um Preise für "
-"jedes Gleis, Weiche oder andere Gegenstände einzugeben. Weiterhin können "
-"auch Länge und Preis für Flex-Gleise für jeden beliebigen Maßstab eingegeben "
-"werden.\n"
-"Die angegebenen Preise werden verwendet um die Gesamtkosten im Dialog "
-"\"Verwalten|Teileliste\" auflisten zu können."
-
-#: ../../../../build/work/app/i18n/custmsg.h:55
-msgid ""
-"Areas of water can represented by a Polygon (use the Draw command) of the "
-"appropiate color.\n"
-"By using the Modify command, you can move, add or remove corners of the "
-"Polygon to fit the shape of the water.\n"
-"You use the Below command to place the Polygon below (or behind) other "
-"objects.\n"
-"\n"
-"You can also use a Polygon to represent aisles. "
-msgstr ""
-"Wasserbereiche können durch Polygone mit Hilfe des \"Zeichnen|Formen|Zeichne "
-"Polyline\" in der entsprechenden Farbe erstellt werden.\n"
-"Das \"Verändern\" Kommando kann benutzt werden, Ecken an diesen Polygonen "
-"hinzu zu fügen oder zu löschen, um diese so besser der Form des Wassers "
-"anpassen zu können.\n"
-"\n"
-"Polylinien können auch dazu verwendet werden um Zwischengänge darzustellen. "
-
-#: ../../../../build/work/app/i18n/custmsg.h:56
-msgid ""
-"When you create Benchwork you can move it below other objects by Selecting "
-"the Benchwork and use the Below command.\n"
-"Also, put Benchwork in a separate Layer so you can hide it if desired."
-msgstr ""
-"Ein erstellter Rahmen kann unter andere Objekte verschoben werden, indem man "
-"das \"Darunter\" Kommando aus dem Menü \"Bearbeiten\" verwendet.\n"
-"Weiterhin sollten Sie Aufbauten auf separaten Ebenen darstellen. Diese "
-"können somit im Bedarfsfall sehr leicht versteckt werden, indem man die "
-"zugehörige Ebene einfach ein oder ausblendet."
-
-#: ../../../../build/work/app/i18n/custmsg.h:57
-msgid ""
-"You can enter Distances and Lengths using any format regardless of the "
-"Length Format on the Preferences dialog."
-msgstr ""
-"Längen können unabhänig der voreingestellten Werte im \"Optionen|"
-"Einstellungen\" Dialog eingegeben werden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:58
-msgid ""
-"You can enter Metric values when English is the default Units and vice versa."
-msgstr ""
-"Metrische Werte können eingegeben werden auch wenn die Einstellung für "
-"Einheiten Englisch gewählt ist."
-
-#: ../../../../build/work/app/i18n/custmsg.h:59
-msgid ""
-"When entering Distances and Lengths you can press the '=' key to redisplay "
-"the value in the default format."
-msgstr ""
-"Bei Eingabe von Entfernungen und Längen können Sie '=' Zeichen verwenden um "
-"den Wert im voreingestellten Format anzuzeigen."
-
-#: ../../../../build/work/app/i18n/custmsg.h:60
-msgid ""
-"You can also press the 's' key to convert a Prototype measurement to a Scale "
-"measurement y dividing by the ratio for the current scale."
-msgstr ""
-"Sie können die Taste 's' benutzen um eine Muster Messung in eine Maßstab "
-"Messung zu verwandeln, die Taste 'y' gibt hierbei den Teiler Faktor des "
-"momentanen Maßstabs an."
-
-#: ../../../../build/work/app/i18n/custmsg.h:61
-msgid ""
-"The 'p' key will convert a Scale measurement to a Prototype measurement."
-msgstr "Die Taste 'p' konvertiert eine Maßstab Messung in eine Muster Messung."
-
-#: ../../../../build/work/app/i18n/custmsg.h:62
-msgid ""
-"You can place cars on the layout using the Train Simulation command to check "
-"clearance points, track to track separation and coupling."
-msgstr ""
-"Lokomotiven können im Gleisplan über den Zugbetrieb Knopf plaziert werden um "
-"Weichenübergänge, Gleis zu Gleis Verbindungen oder ankuppeln simulieren zu "
-"können."
-
-#: ../../../../build/work/app/i18n/custmsg.h:63
-msgid ""
-"Use the MoveTo button on the Custom Management dialog to move your custom "
-"Turnout, Structure and Car definitions to a .XTP parameter file."
-msgstr ""
-"Benutzen Sie den \"Verschieben nach\" Knopf im \"Verwalten|Anpassungs "
-"Verwaltung\" Menü um selbst erstellte Weichen, Strukturen oder Wagen "
-"Definitionen in eine .XTP Parameter Datei zu verschieben."
-
-#: ../../../../build/work/app/i18n/custmsg.h:64
-msgid ""
-"If you are printing multiple pages on a continuous feed printer (such a Dot "
-"Matrix) you can change the Page Order if necessary to print pages out in "
-"proper order."
-msgstr ""
-"Falls Sie einen Drucker mit endlos Papier verwenden, können Sie die "
-"Reihenfolge der Seiten ändern um diese in der richtigen Reihenfolge "
-"auszudrucken."
-
-#: ../../../../build/work/app/i18n/custmsg.h:65
-msgid ""
-"On the Car Item and Car Part dialogs, you can enter custom values for "
-"Manufacturer, Part and Road by typing the new value directly into the Drop "
-"Down List."
-msgstr ""
-"Im Dialog \"Verwalten|Wagenverzeichnis\" können eigene Werte für Hersteller, "
-"Artikelnummer und Straße direkt in der angezeigten Liste eingegeben werden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:66
-msgid ""
-"On the Car Item dialog, you can change the Road, Number, Color and other "
-"values for a Car. This is useful if you repaint or renumber a car. \n"
-"You can also change the Coupler Mounting and Coupler Length if you change "
-"the couplers."
-msgstr ""
-"Im Dialog \"Verwalten|Wagenverzeichnis\" können eigene Werte für Zugnummern, "
-"Farbe und andere Werte vergeben werden. Dies is nützlich wenn Sie "
-"beispielsweise einen Wagen umlackiert oder eine neue Rollnummer vergeben "
-"haben. \n"
-"Weiterhin kann die Kupplungsaufhängung und auch deren Länge verändert werden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:67
-msgid ""
-"You can Export your Car Inventory to a file in Comma-Separated-Value format "
-"which can be read by most spread-sheet programs."
-msgstr ""
-"Ihr Wagen/Lokbestand kann in eine, druch Kommata getrennte, Textdatei "
-"exportiert werden, welche von allen gänigen Tabellenkalkulations Programmen "
-"eingelesen werden kann."
-
-#: ../../../../build/work/app/i18n/custmsg.h:68
-msgid "Use the Train Odometer to measure distances along the track."
-msgstr ""
-"Benutzen Sie den Zugsteckenzähler um Entfernungen auf dem Gleis messen zu "
-"können."
-
-#: ../../../../build/work/app/i18n/custmsg.h:69
-msgid ""
-"Holding down the Shift key when clicking the Zoom In or Zoom Out button will "
-"zoom to a programmed Drawing Scale. \n"
-"Holding down the Shift and Control keys when clicking a Zoom button will set "
-"it's program Zoom to the current Drawing Scale."
-msgstr ""
-"Wenn Sie die Lupenknöpfe klicken während die Shift Taste gedrückt ist, "
-"setzt das Programm auf vorher festgelegten Maßstab. \n"
-"Durch gleichzeitiges Festhalten der Strg + Shift Tasten kann durch Anklicken "
-"der jeweiligen Lupenknöpfe die Einstellung der Vergrößerung oder "
-"Verkleinerung festgelegt werden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:70
-msgid ""
-"You can trim the ends of turnouts by holding down the Shift key when using "
-"the Split command."
-msgstr ""
-"Durch Benutzung des \"Gleis auftrennen\" Kommandos kann man durch Festhalten "
-"der Umschalt-Taste das Ende einer Weiche anpassen."
-
-#: ../../../../build/work/app/i18n/custmsg.h:71
-msgid ""
-"The Split command can be used to create Block Gaps at end points between two "
-"tracks. \n"
-"Either rail or both rails can be gapped, which are drawn as thick lines."
-msgstr ""
-"Der Dialog \"Ändern|Gleis auftrennen\" kann benutzt werden um Blockabstände "
-"an Endpunkten von zwei Gleisen einzufügen. \n"
-"Abstände können entweder an einem oder beiden Enden eingefügt werden, diese "
-"werden durch dicke Linien gekennzeichnet."
-
-#: ../../../../build/work/app/i18n/custmsg.h:72
-msgid ""
-"Trains will 'crash' if they hit another car when travelling faster than the "
-"'Max Coupling Speed' (on the Command Options dialog). \n"
-"They will also 'crash' if they hit the end of the track or an open "
-"turnout. \n"
-"Crashed trains must be manually moved back onto the track."
-msgstr ""
-"Züge 'entgleisen' wenn sie auf ein anderes Fahrzeug treffen oder sie beim "
-"Ankuppeln schneller unterwegs sind wie die maximal eingestellte "
-"Kuppelgeschwindigkeit (einstellbar über \"Optionen|Einstellungen\"). \n"
-"Außerdem werden sie 'entgleisen' sobald sie auf ein totes Gleisende oder "
-"eine offene Weiche treffen. \n"
-"Entgleiste Züge müssen von Hand wieder auf das Gleis zurück gestellt werden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:73
-msgid ""
-"You can add new track segments to a turnout definition or create a "
-"definition from individual tracks using the Group command."
-msgstr ""
-"Der Auswählen Befehl kann verwendet werden um Teilabschnitte an vorhandenes "
-"Gleis anzuhängen oder einen neue Definition zu erstellen, in der einzelne "
-"Gleise zusammengefasst werden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:74
-msgid ""
-"The center point and radius of Curved and Circle tracks can optionally be "
-"drawn. \n"
-"This feature is toggled by using the Move Label command and doing a Shift-"
-"Left-Click on the track."
-msgstr ""
-"Der Mittelpunkt von Kurven oder Kreisen kann auch angezeigt werden. \n"
-"Diese Option kann ein/ausgeschaltet werden durch festhalten der Shift Taste "
-"bei gleichzeitigem links Klick der Maus."
-
-#: ../../../../build/work/app/i18n/custmsg.h:75
-msgid ""
-"Turnout, Curved and Helix track labels can be individually turned on and off "
-"by doing a Shift-Right-Click on the track when using the Move Label command."
-msgstr ""
-"Weichen, Kurven und Gleiswendel Beschreibungen können einzeln an und aus "
-"geschaltet werden. Halten Sie hierzu die Shift Taste gedrückt während Sie "
-"das Kommando \"Ändern|Beschreibungen verschieben\" verwenden und klicken Sie "
-"mit der rechten Maustaste auf die jeweilige Beschreibung."
-
-#: ../../../../build/work/app/i18n/custmsg.h:76
-msgid ""
-"You can use the Describe command to change the font size of Text objects."
-msgstr ""
-"Das Kommando \"Ändern|Eigenschaften\" wird verwendet um die Schriftgröße von "
-"Textobjekten zu ändern."
-
-#: ../../../../build/work/app/i18n/custmsg.h:77
-msgid ""
-"You can use the Describe command to change the size of Dimension Line labels."
-msgstr ""
-"Das Kommando \"Ändern|Eigenschaften\" wird verwendet um die Größe von "
-"Dimensions Linien Beschreibungen zu ändern."
-
-#: ../../../../build/work/app/i18n/custmsg.h:78
-msgid ""
-"Normally Right-Click displays a popup menu of commands and Shift-Right-Click "
-"displays options for the current command. \n"
-"This can reversed by using the Right Click toggle button on the Command "
-"Options dialog."
-msgstr ""
-"Normalerweise wird durch einen Rechts-Klick im Gleisplan ein Befehlsmenü "
-"angezeigt,. Bei Festhalten der Umschalt-Taste und einem vorher ausgewählten "
-"Kommando wird ein optionales Menü für das jeweilige Kommando angezeigt.\n"
-"Dieses Verhalten kann durch den Befehlsoptionen-Dialog vertauscht werden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:79
-msgid ""
-"The Align item on the Rotate command options menu will let you Align "
-"selected objects with any unselected object. \n"
-"The selected objects are rotated so the first point is parallel to the "
-"second point you selected."
-msgstr ""
-"Die Auswahl \"Ausrichten\" im Optionsmenü des \"Drehen\" Kommandos kann "
-"ausgewählte Objekte an nicht ausgewählten Objekten ausrichten. \n"
-"Die ausgewählten Objekte werden so rotiert dass der erste Auswahlpunkt "
-"parallel zum zweiten Auswahlpunkt erscheint."
-
-#: ../../../../build/work/app/i18n/custmsg.h:80
-msgid ""
-"Print To Bitmap allows you to print the track center line. \n"
-"This is useful if you later print the bitmap full size as a template when "
-"laying track."
-msgstr ""
-"Speichern als Bitmap ermöglicht das mitspeichern der Gleismitte. \n"
-"Dies ist nützlich falls Sie später diese Bitmap in voller Größe ausdrucken "
-"wollen um sie als Gleisvorlage verwenden zu können."
-
-#: ../../../../build/work/app/i18n/custmsg.h:81
-msgid ""
-"You can export the selected tracks to a DXF file which can be read by most "
-"CAD programs."
-msgstr ""
-"Sie können markierte Gleise in eine DXF Datei exportieren, welche von den "
-"meisten CAD Programmen lesbar ist."
-
-#: ../../../../build/work/app/i18n/custmsg.h:82
-msgid ""
-"Lengths and distances can be displayed in a variety of units and formats "
-"such as 1' 10 3/4\", 1ft 10.75in or 22.750. In Metric mode, distances can "
-"be displayed as millimeters, centimeters or meters. See the Length Format "
-"item on the Preferences dialog."
-msgstr ""
-"Längen und Entfernungen können in einer Vielzahl von Einheiten und Formaten "
-"dargestellt werden dies sind z.B 1' 10 3/4\" 10.75in oder 22.750. Bei der "
-"Auswahl von metrischen Einheiten werden Entfernungen und Längen in "
-"Millimetern, Zentimetern oder Metern dargestellt. Diese Einstellung kann in "
-"der Auswahl \"Einheiten\" im Dialog \"Optionen|Einstellungen\" vorgenommen "
-"werden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:83
-msgid ""
-"Tracks that are too steep or curve too tightly are drawn in the Expection "
-"color (Purple by default). \n"
-"This helps to identify potential problem areas. \n"
-"The maximum grade and minimum radius are set on the Preferences dialog."
-msgstr ""
-"Gleise die zu abschüssig sind oder zu enge Radien haben werden in einer "
-"Ausnahme Farbe dargestellt (üblicherweise Lila). \n"
-"Dies hilft um Problembereiche aufzufinden. \n"
-"Die maximale Steigung und der minimale Radius werden im Eingenschaften "
-"Dialog eingestellt."
-
-#: ../../../../build/work/app/i18n/custmsg.h:84
-msgid ""
-"The Flip command produces a mirror-image of the selected tracks. \n"
-"If possible, right-hand turnouts are relabeled as left-hand turnouts (and "
-"vice versa)."
-msgstr ""
-"Das \"Spiegeln\" Kommando im Menü \"Ändern\" spiegelt ausgewählte "
-"Gleise. \n"
-"Falls möglich werden rechte Weichen in linke Weichen umbenannt oder linke in "
-"rechte."
-
-#: ../../../../build/work/app/i18n/custmsg.h:85
-msgid ""
-"Then Ungroup command will break turnouts and structures into individual "
-"track, line and shape segments. \n"
-"You can modify each segment and add new ones. \n"
-"Then use the Group command to update the definition."
-msgstr ""
-"Das Kommando \"Verwalten|Gruppierung aufheben\" trennt Weichen und oder "
-"Strukturen in einzelne Gleise, Linien oder Segmente auf. \n"
-"Sie können nun jedes einzelne Segment modifizieren neue hinzufügen usw. \n"
-"Danach benutzen Sie das Kommando \"Verwalten|Gruppieren\" um Ihre neue "
-"Definition wieder als Gruppierung zusammen zu fügen."
-
-#: ../../../../build/work/app/i18n/custmsg.h:86
-msgid "Dimension lines show the distance between two points."
-msgstr "Maßlinien zeigen die Entfernung zwischen zwei Punkten an."
-
-#: ../../../../build/work/app/i18n/custmsg.h:87
-msgid ""
-"A variety of Benchwork (rectangular, L-girder and T-girder) can be drawn. \n"
-"Use the Below command to move the Benchwork below the track for proper "
-"display."
-msgstr ""
-"Eine Vielzahl Unterbauten kann dargestellt werden (Rechteckformen, L-Träger "
-"und T-Träger). \n"
-"Das Kommando \"Darunter\" im Menü \"Bearbeiten\" wird benutzt um Unterbauten "
-"korrekt unter den Gleise darstellen zu können."
-
-#: ../../../../build/work/app/i18n/custmsg.h:88
-msgid ""
-"The Turnout Designer dialogs allow you to specify the width of any attached "
-"roadbed. \n"
-"As well, the color and thickness of the lines used to represent the roadbed "
-"can be specified."
-msgstr ""
-"Der Weichendesigner ermöglicht die Angabe der Spurbreite von jedem "
-"beliebigen Gleisbett. \n"
-"Desweitern können Farbe und Stärke der Linien angegeben in denen das "
-"Gleisbett dargestellt wird."
-
-#: ../../../../build/work/app/i18n/custmsg.h:89
-msgid ""
-"The Color dialog (on the Options menu) is used to change the color of "
-"different objects on the display. \n"
-"You can change the color of the Snap Grid and Borders, as well as Normal, "
-"Selected and Exception tracks."
-msgstr ""
-"Der Dialog \"Optionen|Farben\" wird benutzt um die Farben für verschiedene "
-"Objekte einzustellen. \n"
-"Die Farbe des Fangrasters, Ränder sowohl als auch für normale selektierte "
-"und Ausnahme Gleise können angegeben werden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:90
-msgid ""
-"You can draw tracks with wider lines for rails. \n"
-"Select the tracks and use Medium or Thick Tracks on the Edit menu."
-msgstr ""
-"Schienen können mit breiteren Linien für Gleise gezeichnet werden. \n"
-"Wählen Sie hierzu Mittlere Gleise oder Dicke Gleise im Bearbeiten Menü aus."
-
-#: ../../../../build/work/app/i18n/custmsg.h:91
-msgid ""
-"Many objects on the layout have labels: Turnouts/Helix/Curved Titles, Track "
-"Lenghts, End-Point Elevations, Track Elevations and Cars. \n"
-"You can turn these labels on or off with the Label Enable toggle buttons on "
-"the Display options dialog."
-msgstr ""
-"Viele Objekte im Gleisplan besitzen Beschreibungen: Weichen/Gleiswendel/"
-"Kurven Gleislängen Endpunkte Höhenangaben usw. \n"
-"Sie können diese Beschreibungen über den Dialog \"Optionen|Anzeige\" ein "
-"oder ausschalten."
-
-#: ../../../../build/work/app/i18n/custmsg.h:92
-msgid ""
-"If you hold down the Control key when using the Rotate command, the rotation "
-"will be down in increments of 15°."
-msgstr ""
-"Durch festhalten der Strg Taste wird beim Drehen Kommando, die Rotation um "
-"jeweils 15° verringert."
-
-#: ../../../../build/work/app/i18n/custmsg.h:93
-msgid ""
-"When using the Rotate command, Shift-Right-Click displays a menu allowing "
-"you to rotate by specific amounts or to align the selected objects with "
-"another object."
-msgstr ""
-"Beim Benutzen des Befehls <Drehen> kann durch Halten der Umschalt-Taste aus "
-"einem Menü der Drehwinkel des Objektes ausgewählt werden oder das Objekt "
-"kann anhand eines anderen Objektes ausgerichtet werden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:94
-msgid ""
-"The unconnected End-Points of a straight or curved track can be changed with "
-"the 'Modify Track' command.\n"
-msgstr ""
-"Die nicht verbundenen Endpunkte eines geraden oder eines gebogenen Gleise "
-"können mit 'Ändern Gleis' verändert werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:95
-msgid ""
-"The End-Point of a straight track is selected and then Left-Dragged to "
-"change its length.\n"
-msgstr ""
-"Der Endpunkt eines geraden Gleises wird ausgewählt und die Länge wird durch "
-"Ziehen mit linken Maus-Knopf geändert.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:96
-msgid ""
-"Watch what happens if you try to drag the selected End-Point beyond the far "
-"End-Point.\n"
-msgstr ""
-"Beachten Sie was passiert, wenn der ausgwählte Endpunkt für den entfernten "
-"Endpunkt hinaus gezogen wird.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:97
-msgid ""
-"The length of the straight track is determined by the distance from the far "
-"End-Point and the cursor.\n"
-msgstr ""
-"Die Länge des geraden Gleises wird durch den Abstand zwischen dem entfernten "
-"Endpunkt und dem Mauszeiger festgelegt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:98
-msgid ""
-"A curved track is selected and it's new End-Point is determined by the angle "
-"to the cursor.\n"
-msgstr ""
-"Ein gebogenes Gleis wird ausgewählt und der neue Endpunkt durch den Winkel "
-"des Mauszeiger festgelegt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:99
-msgid "It's possible to almost create a complete circle.\n"
-msgstr "Es ist beinahe möglich, einen vollständigen Kreis zu erstellen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:100
-msgid ""
-"If you drag the mouse beyond the start of the curve the track becomes very "
-"short.\n"
-msgstr ""
-"Wenn Sie die Maus über den Startpunkt des Bogen hinaus ziehen, wird das "
-"Gleis sehr kurz.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:101
-msgid "Here you are warned that the track will be too short.\n"
-msgstr "Jetzt werden Sie gewarnt, dass das Gleis zu kurz wird.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:102
-msgid ""
-"If you move the cursor away from the curve, you will create a straight track "
-"tangent to the curve.\n"
-msgstr ""
-"Wenn Sie den Mauszeiger vom Bogen weg bewegen, erstellen Sie ein gerades "
-"Gleis als Tangente an dem Bogen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:103
-msgid ""
-"If you adjust the End-Point of a turnout or sectional track the track is "
-"extended by a straight track segment.\n"
-msgstr ""
-"Wenn Sie den Endpunkt einer Weiche oder eines Festgleises anpassen, wird das "
-"Gleis durch ein gerades Segment verlängert.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:104
-msgid ""
-"You can change the radius of a Straight or Curved track that is connected at "
-"one End-Point by holding down the Shift key while dragging on it.\n"
-msgstr ""
-"Sie können den Radius eines Bogen ändern oder ein gerades Gleis biegen, "
-"indem Sie bei gedrückter Umschalttaste und gedrücktem Mausknopf ziehen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:105
-msgid ""
-"This lets you change a Straight track into a Curved track (and vice versa) "
-"as well as changing the radius of a Curved track.\n"
-msgstr ""
-"Dadurch können Sie ein gerades Gleis in ein gebogenes (und umgekehrt) "
-"umwandeln und den Radius eines Bogengleises ändern.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:106
-msgid "You can draw a variety of different types of benchwork:\n"
-msgstr "Sie können verschiedene Formend es Unterbau zeichnen:\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:107
-msgid "- rectangular (1x2, 2x4 etc)\n"
-msgstr "- rechteckig (1x2, 2x4 Inch usw.)\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:108
-msgid "- L girders\n"
-msgstr "- Winkelträger\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:109
-msgid "- T girders\n"
-msgstr "- T- Träger\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:110
-msgid "You can also draw them in different orientations.\n"
-msgstr "Sie können diese auch in verschiedenen Ausrichtungen zeichnen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:111
-msgid "We will draw two 3x6 inch L-girders.\n"
-msgstr "Wir zeichnen zwei 3x6 Inch Winkelträger.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:112
-msgid ""
-"The flange of the top L-Girders is on the outside edge of the girders. We "
-"want to change the girder so both flanges are on the inside.\n"
-msgstr ""
-"Die Schmalseite des oberen Winkelträger ist auf der Außenseite. Wir wollen "
-"die Träger so anpassen, dass beide Schmalseiten innen liegen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:113
-msgid "We will use the <Describe> command for this.\n"
-msgstr "Wir werden den <Beschreiben> Befehl dafür benutzen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:114
-msgid "Change the Orientation to Right.\n"
-msgstr "Ändere die Ausrichtung auf rechts.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:115
-msgid "Now both flanges are on the inside of the two girders.\n"
-msgstr "Jetzt sind beide Schmalseiten auf der Innenseite der beiden Träger.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:116
-msgid ""
-"Pushing the <Describe> button will cancel any other command in progress.\n"
-msgstr ""
-"Durch Drücken des <Beschreiben> Knopfes wird jeder begonnene Befehl "
-"abgebrochen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:117
-msgid ""
-"Here we will begin to create a Curved track which is a two step process.\n"
-msgstr ""
-"In einem zweistufigen Ablauf werden wir mit dem Erstellen eines gebogenen "
-"Gleises beginnen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:118
-msgid ""
-"When we clicked on the <Describe> button, the current command was "
-"cancelled.\n"
-msgstr ""
-"Durch Drücken auf den <Beschreiben> Knopf wurde der begonnene Befehl "
-"abgebrochen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:119
-msgid ""
-"When in <Describe> mode, selecting any object will print a description in "
-"the Status Bar and display a Dialog showing properties of the clicked-on "
-"object.\n"
-msgstr ""
-"Im <Beschreiben> Modus wird durch Auswahl eines Objektes eine Beschreibung "
-"in der Statuszeile angezeigt und die Eigenschaften des Objektes werden in "
-"einem Dialogfenster angezeigt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:120
-msgid ""
-"Certain parameters of the object can be changed. In this case we'll change "
-"the Length\n"
-msgstr ""
-"Einige der Eigenschaften des Objektes können geändert werden. In diesem Fall "
-"ändern wir die Länges\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:121
-msgid "Let's look at the Turnout...\n"
-msgstr "Jetzt wollen wir uns die Weiche anschauen...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:122
-msgid "and change the turnout Title.\n"
-msgstr "und den Titel der Weiche ändern.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:123
-msgid "You can change the contents of Text...\n"
-msgstr "Sie können den Text ändern...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:124
-msgid "and its size.\n"
-msgstr "und seine Größe.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:125
-msgid ""
-"If you select a Note, the Description dialog appears which displays the "
-"contents of the note.\n"
-msgstr ""
-"Wenn Sie eine Notiz auswählen, erscheint ein Dialogfenster in dem der Inhalt "
-"der Notiz angezeigt wird.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:126
-msgid ""
-"Like the <Curve> track command, there are several ways to create a Circle "
-"track.\n"
-msgstr ""
-"Wie beim <Bogen> Befehl gibt es mehrere Möglichkeiten, einen Gleiskreis zu "
-"erstellen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:127
-msgid ""
-"The first is to specify a fixed radius and simply drag the Circle into "
-"position.\n"
-msgstr ""
-"Die Erste ist die Vorgabe eines festen Radius und das Ziehen an die "
-"gewünschte Position.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:128
-msgid "We will change the Radius before proceeding.\n"
-msgstr "Bevor wir weitermachen, ändern wir den Radius.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:129
-msgid "The next method is to drag from the edge of the Circle to the center.\n"
-msgstr ""
-"Die nächste Methode ist das Ziehen von der Kreislinie zum Mittelpunkt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:130
-msgid ""
-"The last is similar, but you drag from the center of the Circle to the "
-"edge.\n"
-msgstr ""
-"Die letzte, aber vergleichbare, Methode ist das Ziehen vom Mittelpunkt zur "
-"Kreislinie.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:131
-msgid ""
-"We have built a siding using Sectional track and have 2 End-Points that "
-"don't line up and are not connected automatically when placing the sectional "
-"track.\n"
-msgstr ""
-"Wir haben ein Ausweichgleis erstellt und haben zwei Endpunkte erhaltem, die "
-"beim Setzen von Festgleisen nicht automatisch verbunden wurden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:132
-msgid ""
-"We use the <Connect> command to adjust neighboring tracks so the gap is "
-"closed.\n"
-msgstr ""
-"Wir benutzen den <Zusammenfügen> Befehl, um die benachbarten Gleise so "
-"auszurichten, dass die Lücke geschlossen ist.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:133
-msgid ""
-"Note: the adjustments are only done on tracks which have only 1 or 2 "
-"connections. In this example the Turnouts would not be affected.\n"
-msgstr ""
-"Achtung: die Anpassungen wurden nur an Gleisen mit einer oder zwei "
-"Verbindungsn gemacht. In diesem Besipiel wurden die Weichen nicht "
-"verändert.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:134
-msgid "And now the gap is closed.\n"
-msgstr "Und jetzt ist die Lücke geschlossen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:135
-msgid "Other tracks have been shifted slightly to close the gap.\n"
-msgstr "Andere Gleise wurden leicht verschoben, um die Lücke zu schliessen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:136
-msgid "You can see these slight mis-alignments.\n"
-msgstr "Sie können die kleinen Versätze sehen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:137
-msgid "But they will have no effect when the layout is actually built.\n"
-msgstr ""
-"Aber diese werden keinen Einfluss haben, wenn die Anlage später gebaut "
-"wird.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:138
-msgid ""
-"After working with Sectional track you might get to point where these mis-"
-"alignments have accumulated and you wish to remove them.\n"
-msgstr ""
-"Nachdem Sie mit Festgleisen gearbeitet haben, haben sich diese Versätze "
-"aufgebaut und Sie wollen diese entfernen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:139
-msgid ""
-"You can remove these slight mis-alignments by tightening the tracks starting "
-"from a unconnected End-Point. Use Shift-Left-Click with the <Connect> "
-"command.\n"
-msgstr ""
-"Sie können diese kleinen Versätze durch Zusammenziehen der Gleise entfernen. "
-"Beginnen Sie an einem nicht verbundenen Endpunkt durch Drücken der Umschalte-"
-"Taste beim Deücken des <Zusammenfügen> Knopfes.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:140
-msgid "First use the <Split> command to disconnect the tracks.\n"
-msgstr ""
-"Zuerst benutzen Sie den <Trennen> Befehl um die Verbindung der Gleise zu "
-"lösen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:141
-msgid ""
-"Then with the <Connect> command, Shift-Left-Click on the 2 End-Points.\n"
-msgstr ""
-"Dank ativieren Sie den <Verbinden> Befehl und Klicken bei gedrückter "
-"Umschaltetaste auf die beiden Endpunkte.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:142
-msgid "In example shows a simple figure-8 layout using Sectional track.\n"
-msgstr "In diesem Besipiel wird aus Festgleisen eine \"8\" gelegt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:143
-msgid ""
-"You will notice that the tracks do not line up exactly in one location.\n"
-msgstr ""
-"Wie Sie sehen, sind die Gleise an einer Stelle nicht exakt ausgerichtet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:144
-msgid ""
-"We can use the <Connect> command to move the connecting tracks slightly and "
-"connect the 2 End-Points.\n"
-msgstr ""
-"Mit dem <Verbinden> Befehl können wir die zu verbindenden Gleise leicht "
-"verschiebenund die beiden Endpunkte verbinden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:145
-msgid "The two End-Points are now aligned and connected.\n"
-msgstr "Die beiden Endpunkte sind jetzt ausgerichtet und verbunden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:146
-msgid "The connection was made by adding small gaps in other tracks.\n"
-msgstr ""
-"Die Verbindung wurde hergestellt, in dem kleine Lücken zwischen andere "
-"Gleise eingefügt wurden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:147
-msgid "There are several ways to create a Curved track.\n"
-msgstr "Es gibt mehrere Möglichkeiten, ein gebogenes Gleis zu erstellen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:148
-msgid ""
-"You can choose which to use by clicking on the small button to the left of "
-"<Curve> command button if the current Curve command is not the one you "
-"want.\n"
-msgstr ""
-"Sie können zwischen diesen wählen, in dem Sie auf den kleinen Knopf neben "
-"dem <Bogen> Knopf drücken.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:149
-msgid ""
-"The first is by clicking on the first End-Point and dragging in the "
-"direction of the Curve.\n"
-msgstr ""
-"In der ersten Möglichkeit wird dieser durch Auswahl des ersten Endpunktes "
-"und Ziehen in die Richtung des Bogen erstellt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:150
-msgid ""
-"You will see a straight track with a double ended Red arrow at the end.\n"
-msgstr ""
-"Sie sehen ein gerades Gleis mit einem roten Pfeil mit zwei Spitzen am Ende.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:151
-msgid "Click and drag on one of the Red arrows to complete the Curve.\n"
-msgstr ""
-"Klicken und ziehen Sie eine der roten Spitzem um den Bogen zu "
-"vervollständigen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:152
-msgid ""
-"The next method is to click at one End-Point and drag to the center of the "
-"Curve.\n"
-msgstr ""
-"Die nächste Methode ist das Klicken auf einen Endpunkt und das Ziehen zum "
-"Mittelpunkt der Kurzve.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:153
-msgid ""
-"Now you will see the double ended Red arrow connected to the center of the "
-"Curve marked by a small circle.\n"
-msgstr ""
-"Wie vorher sehen Sie den roten Pfeil mit zwei Spitzen, der mit dem "
-"Mittelpunkt des Bogen verbunden ist. Dieser ist mit einem kleinen Kreis "
-"markiert.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:154
-msgid "As before, drag on one of the Red arrows to complete the Curve.\n"
-msgstr ""
-"Wie schon vorher beenden Sie den Bogen, indem Sie an einer der Pfeilspitzemn "
-"ziehen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:155
-msgid ""
-"The next method is similar to the last except that you drag first from the "
-"center of the Curve to one End-Point.\n"
-msgstr ""
-"Die nächste Methode ist vergleichbar zur vorherigen, allerdings Ziehen Sie "
-"zuerst vom Mittelpunkt zu einem Endpunkt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:156
-msgid "Once again, drag on a Red arrow to complete the Curve.\n"
-msgstr ""
-"Auch diesmal ziehen Sie an der roten Pfeilspitze um den Bogen zu vollenden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:157
-msgid ""
-"The last method begins by drawing a line between the two End-Points of the "
-"Curve. This forms the Chord of the Curve.\n"
-msgstr ""
-"Bei der letzten Methode beginnen Sie, indem Sie eine Linie zwischen den "
-"beiden Endpunkten ziehen. Diese bildet die Sehne des Bogen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:158
-msgid "Now drag on a Red arrow to complete the Curve.\n"
-msgstr "Jetzt ziehen Sie an der roten Pfeilspitze um den Bogen zu erstellen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:159
-msgid "This demo will construct a control panel for part of a bigger layout.\n"
-msgstr ""
-"In dieser Demo wird ein Steuerpult für einen Teil einer größeren Anlage "
-"erstellt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:160
-msgid "For our control panel we will use Œ\" lines. \n"
-msgstr "Für unser Pult werden wir 1/2\" breite Linien benutzen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:161
-msgid "Also, we will use a 1/8\" grid to lay out our controls.\n"
-msgstr ""
-"Außerdem werden wir ein 1/8\" Raster für die Ausrichtung der "
-"Steuerungselemente benutzen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:162
-msgid ""
-"First, we will set up the Snap Grid for 1\" grid lines and 8 divisions.\n"
-msgstr ""
-"Als erstes stellen wir das Fangraster auf 1\" Rasterlinien und 8 "
-"Unterteilungen ein.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:163
-msgid "Now, clear the layout and turn on the Snap Grid.\n"
-msgstr "Jetzt löschen wir den Entwurf und schalten das Fangraster ein.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:164
-msgid "First step: draw the lines representing the tracks.\n"
-msgstr "Erster Schritte: zeichnen Sie die Linien, die die Gleise darstellen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:165
-msgid "We specify the line width in pixels.\n"
-msgstr "Wir geben die Linienbreite in Bildpunkten an.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:166
-msgid ""
-"To create a Œ\" line, divide the dots-per-inch (DPI) of your display by 4 "
-"and then by the drawing scale (which is 2 right now).\n"
-msgstr ""
-"Um eine 1/2 Inch breite Linie zu erzeugen, wird die Auflösung des "
-"Bildschirms (DPI) durch 4 und dann durch den Zeichenmaßstab (im Moment 2) "
-"geteilt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:167
-msgid ""
-"For MS-Windows the DPI is usually 98, so choose: 98/4/2 = 12 "
-"(approximately).\n"
-msgstr ""
-"Unter Windows ist die Auflösung normalerweise 98, also wählen wir 98 / 4 / 2 "
-"= ca. 12.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:168
-msgid "For Linux, the DPI is usually 72, so choose: 72/4/2 = 9.\n"
-msgstr ""
-"Unter Linux ist die Auflösung normalerweise 72, also wählen wir 72 / 4 / 2 = "
-"9.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:169
-msgid ""
-"Notice how the Snap Grid keeps the main line and siding track parallel and "
-"the connecting tracks and spur at a 45° angle.\n"
-msgstr ""
-"Beachten Sie, wie das Fangraster die Haupt- und die Nebenstrecke parallel "
-"führt und die Verbindungen und das Abstellgleis auf einem 45° Winkel hält.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:170
-msgid "Second step: add LEDs for the turnout position indicators.\n"
-msgstr "ZweiterSchritt: hinzufügen der LEDs für die Weichenanzeige.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:171
-msgid "We will use T1 red and green LEDs.\n"
-msgstr "Wir werden T1 rote und grüne LEDs benutzen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:172
-msgid "We will zoom in to show positioning.\n"
-msgstr "Wir zoomen rein, um die Positionierung zu zeigen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:173
-msgid ""
-"Notice that when we are in the correct position (on the 1/8\" grid), the "
-"Marker lines on the bottom and left rulers will high-light the tick marks. "
-"When both ticks are high-lighted, press the space bar to finalize the LED.\n"
-msgstr ""
-"Beachten Sie, dass die Markierungslinien unten und links die "
-"Fangmarkierungen hervorheben, wenn wird in der richtigen Position sind. "
-"Sobald beide Markierungen hervorgehoben sind, die LED durch Drücken der "
-"Leertaste fixieren.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:174
-msgid "Now we'll add push buttons to control the turnouts.\n"
-msgstr "Jetzt fügen wir Drucktaster für die Steuerung der Weichen dazu.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:175
-msgid "Let's add signals to our siding.\n"
-msgstr "Lassen Sie uns noch Signale an unserem Ausweichgleich aufstellen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:176
-msgid ""
-"The entrance to the siding will be protected by double headed signals.\n"
-msgstr ""
-"Die Einfahrt in das Ausweichgleich wird durch ein doppeltes Signal "
-"geschützt\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:177
-msgid "First turn off the Snap Grid.\n"
-msgstr "Zuerst schalten Sie bitte das Fangraster aus.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:178
-msgid "Rotate the signals and move them to the proper locations.\n"
-msgstr ""
-"Rotieren Sie die Signale und setzen diese dann an die richtige Stelle.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:179
-msgid ""
-"We rotate the signals by Shift-Right-Click and select 90° CW on the popup "
-"menu. We can not show the popup menu in demo mode, but will simulate the "
-"effect.\n"
-msgstr ""
-"Wir rotieren die Signale durch Drücken und Festhalten der Umschalttaste bei "
-"gleichzeitigem Mausklick.Aus dem Menu wählen wir 90° gegen UZS aus. Im Demo-"
-"Mode kann das Menu nicht angezeigt werden, aber wir simulieren den Effekt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:180
-msgid "The exits from the siding will be protected by single headed signals.\n"
-msgstr ""
-"Die Ausfahrt aus dem Ausweichgleich wird durch ein einfaches Signal "
-"gesichert.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:181
-msgid "Now for some touch-ups.\n"
-msgstr "Nun noch ein paar kleinere Nachbesserungen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:182
-msgid "Notice when the line meet at an angle there is a gap.\n"
-msgstr ""
-"Beachten Sie, dass am Berührungspunkt zwischen zwei Linien ein Spalt "
-"existiert.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:183
-msgid "We will fill this gap with the Œ\" dot.\n"
-msgstr "Wir füllen diesen Spalt mit einem 1/2 Inch großen Punkt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:184
-msgid ""
-"Note: Win95/Win98/WinME does not support drawing lines with flat end-caps, "
-"but only with round end-caps.\n"
-msgstr ""
-"Note: Win95/Win98/WinME does not support drawing lines with flat end-caps, "
-"but only with round end-caps.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:185
-msgid "Users on those platforms will not see the gap.\n"
-msgstr "Users on those platforms will not see the gap.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:186
-msgid ""
-"Add an arrow head to indicate the tracks that connect to the rest of the "
-"layout.\n"
-msgstr ""
-"Mit einer Pfeilspitze werden die Gleise markiert, die mit dem Rest der "
-"Anlage verbunden sind.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:187
-msgid "Rotate the arrow head by 180° and move into position.\n"
-msgstr ""
-"Rotieren Sie die Pfeilspitze um 180° und bringen Sie diese in die richtige "
-"Position.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:188
-msgid "And add some labels.\n"
-msgstr "Und fügen einige Beschriftungen hinzu.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:189
-msgid ""
-"We want to print our control panel onto a 8œx11 page, but the control panel "
-"is a bit too wide.\n"
-msgstr ""
-"Wir würden das Steuerpult gerne auf Paiper mit der Größe 8\"x11\" drucken, "
-"aber es ist zu breit.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:190
-msgid "Lets tighten it up a bit.\n"
-msgstr "Lassen Sie uns das ein bisschen enger zusammen packen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:191
-msgid ""
-"First turn the Snap Grid on again so any moves we make will keep objects on "
-"the grid.\n"
-msgstr ""
-"Zuerst schalten Sie bitte das Fangraster wieder ein, damit die Objekte beim "
-"Verschieben ausgerichtet bleiben.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:192
-msgid "Lets move the spur track the left 3/4\"\n"
-msgstr "Lassen Sie uns das Abstellgleis um ein 3/4 Inch nach links schieben.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:193
-msgid "Now move the right side of the siding over.\n"
-msgstr "Jetzt verschieben Sie die rechte Seite des Ausweichgleises.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:194
-msgid "Now, adjust the ends of the mainline and siding tracks.\n"
-msgstr ""
-"Und passen nun die Enden des Hauptgleises und des Ausweichgleises an.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:195
-msgid "And move the title over as well.\n"
-msgstr "Anschliessend noch den Titel verschieben.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:196
-msgid "Now you can print it.\n"
-msgstr "Jetzt können Sie das Ergebnis drucken.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:197
-msgid "The cross-hairs on the LEDs and switch show the centers for drilling.\n"
-msgstr ""
-"Fadenkreuze markieren die Mittelpunkte der LEDs und Schalter und ermöglichen "
-"so ein einfaches Bohren.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:198
-msgid ""
-"Pressing the <Delete> button lets you delete selected tracks from the "
-"layout.\n"
-msgstr ""
-"Durch Drücken der <Entf>-Taste können Sie die ausgewählten Gleise vom Plan "
-"löschen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:199
-msgid ""
-"First you select the tracks you want to delete, and then press the <Delete> "
-"button.\n"
-msgstr ""
-"Zuerst wählen Sie die Gleise, die Sie löschen wollen und drücken dann "
-"<Entf>.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:200
-msgid ""
-"If you delete a track connected to an easement curve, then the easement "
-"curve is deleted as well.\n"
-msgstr ""
-"Wenn Sie ein Gleis löschen, das einen Übergangsbogen besitzt, so wird dieser "
-"Übergangsbogen ebenfalls gelöscht.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:201
-msgid "You can use the <Undo> command to undelete tracks.\n"
-msgstr ""
-"Sie können den <Rückgängig>-Befehl nutzen, um ein versehentliches Löschen "
-"rückgängig zu machen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:202
-msgid ""
-"If you Left-Drag on the layout you can select all tracks within an area.\n"
-msgstr ""
-"Durch Ziehen mit der Maus bei gedrückter linker Taste können Sie alle Gleise "
-"in einem Bereich markieren.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:203
-msgid ""
-"Note, only tracks within the selected area are deleted. Since the easement "
-"curve is connected to a deleted track, it is deleted as well.\n"
-msgstr ""
-"Beachten Sie, dass nur Gleise innerhalb des markierten Bereichs gelöscht "
-"werden. Da der Übergangsbogen mit einem gelöschten Gleis verbunden ist, wird "
-"dieser ebenfalls gelöscht.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:204
-msgid ""
-"The demo also simulates entering values and selecting options on various "
-"dialogs.\n"
-msgstr ""
-"Die Demo simuliert die Eingabe von Werten und Auswahl von Optionen in "
-"verschiedenen Dialogfenstern.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:205
-msgid ""
-"This is simulated by drawing a rectangle around the control when values are "
-"entered or changed.\n"
-msgstr ""
-"Dies wird simuliert, in dem ein Rechteck um das Eingabefeld gezeichnet wird, "
-"wenn Werte eingegeben oder geändert werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:206
-msgid ""
-"Here we are going to make some changes to the Display dialog. Notice how "
-"this is simulated.\n"
-msgstr ""
-"Hier machen wir Änderungen im Anzeige-Dialog. Beachten Sie, wie das "
-"simuliert wird.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:207
-msgid ""
-"This effect is only used in demonstration mode. During normal operation you "
-"will not see this.\n"
-msgstr ""
-"Dieser Effekt wird nur im Demonstrations-Modus benutzt. Während der normalen "
-"Benutzung werden Sie das nicht sehen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:208
-msgid "Dimension Lines are used to mark the distances between two points.\n"
-msgstr ""
-"Maßlinien werden benutzt, um den Abstand zwischen zwei Punkten zu zeigen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:209
-msgid ""
-"Here we will create a Dimension Line to show the separation between two "
-"tracks.\n"
-msgstr ""
-"Hier erstellen wir eine Maßlinie, um den Abstand zwischen zwei parallelen "
-"Gleisen zu zeigen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:210
-msgid ""
-"We might also want to measure the distance between two structures. In this "
-"case we will use a larger dimension line.\n"
-msgstr ""
-"Möglicherweise wollen wir auch den Abstand zwischen zwei Gebäuden bestimmen."
-"In diesem Fall nutzen wir eine größere Maßlinie.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:211
-msgid ""
-"We can use the <Describe> command to change the position of the Dimension "
-"Line and the size of the numbers.\n"
-msgstr ""
-"Der <Beschreiben> Befehl kann genutzt werden, um die Position der Maßlinie "
-"und die Größe der Zahlen zu ändern.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:212
-msgid ""
-"This example will show the effect of using easements while joining tracks.\n"
-msgstr ""
-"In diesem Beispiel wird die Wirkung der Übergangsbögen während des Verbinden "
-"von Gleisen gezeigt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:213
-msgid "First, we'll enable easements.\n"
-msgstr "Zuerst schalten wir Übergangsbögen an.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:214
-msgid ""
-"We've selected sharp easements. The minimum radius curve we can use will be "
-"9.75\"\n"
-msgstr ""
-"Wir haben enge Übergangsbögen ausgewählt. Der Mindestradius, den wir "
-"benutzen können, beträt 9,75\".\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:215
-msgid "Notice the label on the Easement button has changed to 'Sharp'.\n"
-msgstr ""
-"Beachten Sie, dass die Beschriftung des Knopfes <Übergangsbogen> auf 'Sharp' "
-"geändert wurde.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:216
-msgid ""
-"Note the connecting curve does not quite meet the straight tracks. This the "
-"'Offset'.\n"
-msgstr ""
-"Beachten Sie. dass das Verbindungsgleis das gerade Gleis nicht genau trifft. "
-"Das ist der 'Absatz'.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:217
-msgid "Here the connecting curve is too small.\n"
-msgstr "Jetzt ist der Verbindungsradius zu klein.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:218
-msgid ""
-"The connecting curve is made of three tracks, the curve and two easement "
-"segments on each end.\n"
-msgstr ""
-"Die verbindende Kurve besteht aus drei Gleisen, der Kurve und den "
-"Übergangsbögen an jedem Ende.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:219
-msgid ""
-"We have designed part of the layout with a siding, 2 branches and a spiral "
-"loop. We want to set Elevations.\n"
-msgstr ""
-"Wir haben einen Teil eines Gleisplan mit Nebengleis, 2 Abzweigen und einer "
-"Gleiswendel entworfen. Jetzt wollen wir die Höhen festlegen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:220
-msgid "First we will set elevations at the end of the branches.\n"
-msgstr "Zuerst legen wir die Höhen am Ende der Abzweige fest.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:221
-msgid "We'll select the end of the top branch and set the Elevation to 4\"\n"
-msgstr ""
-"Wir wählen das Ende des oberen Abzweigs und legen die Höhe auf 4\" fest.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:222
-msgid "First, click on the End-Point.\n"
-msgstr "Zuerst klicken Sie auf den Endpunkt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:223
-msgid "Next, pick Defined on the Elevation dialog Radio box.\n"
-msgstr "Als nächstes wählen Sie 'Fest' im Dialogfenster für das Höhenmaß.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:224
-msgid "And set the Elevation to 4.\n"
-msgstr "Und setzen die Höhe auf 4.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:225
-msgid "Now, select the other branch and set it's elevation to 2\"\n"
-msgstr ""
-"Jetzt wählen Sie den anderen Abzweig und legen seine Höhe auf 2\" fest.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:226
-msgid "We can move the Elevations by using Right-Drag\n"
-msgstr ""
-"Wir können die Höhenmaß durch Ziehen mit der Maus bei gedrückter rechter "
-"Taste verschieben.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:227
-msgid "Now, we set the Elevation at one end of the Siding.\n"
-msgstr "Jetzt legen wir die Höhe an einem Ende des Nebengleises fest.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:228
-msgid "We want to find the elevations where the 2 tracks cross.\n"
-msgstr ""
-"Wir wollen die Höhen der Gleise ermitteln, an denen diese sich kreuzen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:229
-msgid "We picked an End-Point on the upper track.\n"
-msgstr "Wir haben einen Endpunkt am oberen Gleis ausgewählt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:230
-msgid ""
-"XTrackCAD has computed the Elevation (2.34\") at this point based on the "
-"Elevation at the siding and a combination of the of the first Elevations.\n"
-msgstr ""
-"XTrackCAD hat die Höhe (2,34\") an dieser Stellle auf Grundlage der Höhe des "
-"Nebengleises in Verbindung mit den ersten Höhenangaben ermittelt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:231
-msgid ""
-"We create a Computed Elevation here that will be automatically adjusted "
-"whenever the other Elevations are changed.\n"
-msgstr ""
-"Hier erstellen wir eine 'Berechnete' Höhe, die automatisch angepasst wird, "
-"wenn sich andere Höhenangaben ändern.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:232
-msgid ""
-"The Compute Elevation is based on Elevations at end of both of the "
-"branches. We may want to base the Elevation on only one branch. For "
-"example if one branch was the mainline we don't want the other branch "
-"affecting this Computed Elevation.\n"
-msgstr ""
-"Die berechnete Höhe basiert auf den Höhen an den Endpunkten der beiden "
-"Abzweige. Wir wollen aber möglicherweise nur die Höhe eines Abzweigs "
-"benutzen. Das kann sinnvoll sein, wenn der Abzweig das Hauptgleis bildet und "
-"wir nicht wollen dass das andere Gleis die Höhenberechnung beeinflusst.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:233
-msgid "We do this by Ignoring the branch we don't want.\n"
-msgstr "Wir erreichen das, indem wir einen Abzweig ignorieren.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:234
-msgid "We'll ignore the lower branch.\n"
-msgstr "Wir werden den unteren Abzweig ignorieren.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:235
-msgid ""
-"Notice at the End-Point where the tracks cross, we see the Elevation has "
-"changed from 2.34 to 2.64.\n"
-msgstr ""
-"Beachten Sie, dass sich die Höhe an der Kreuzug von 2,34 auf 2,64 geändert "
-"hat.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:236
-msgid "Now we want to know the elevation of the lower track.\n"
-msgstr "Jetzt wollen wir die Höhe des unteren Gleises ermitteln.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:237
-msgid "There is no End-Point on the lower track here.\n"
-msgstr "Es gibt hier keinen Endpunkt des unteren Gleises.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:238
-msgid ""
-"Use Shift-Left-Click to Split the track and create an End-Point we can use "
-"for an Elevation,\n"
-msgstr ""
-"Durch Klicken mit der Maus bei gedrückter Umschalttaste wird das Gleis "
-"getrennt und ein Endpunkt, den wir für die Festlegung der Höhe nutzen "
-"können, eingefügt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:239
-msgid "and create another Computed Elevation point.\n"
-msgstr "Wir erstellen einen neuen berechneten Höhenpunkt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:240
-msgid "Now we want to label the Grade on this section of track.\n"
-msgstr "Jetzt benennen wir die Steigung auf diesem Gleisabschnitt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:241
-msgid ""
-"Again, since there is no End-Point nearby, we split the track to create an "
-"End-Point we can use,\n"
-msgstr ""
-"Auch hier ist wieder kein Endpunkt in der Nähe, daher trennen wir das Gleis "
-"um einen nutzbaren Endpunkt zu erhalten.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:242
-msgid "and create a Grade marker.\n"
-msgstr "Dort erstellen wir eine Steigungsmarkierung.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:243
-msgid "Note the marker has an arrow pointing in the upwards direction.\n"
-msgstr ""
-"Beachten Sie, dass die Markierung einen Pfeil besitzt, der in Richtung des "
-"Anstiegs zeigt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:244
-msgid ""
-"The last thing we want to do is to create a Station label that we'll use in "
-"the <Profile> command.\n"
-msgstr ""
-"Als letzten Schritt erstellen wir noch eine Beschriftung für einen Bahnhof, "
-"den wir im <Höhenprofil> Befehl benutzen werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:245
-msgid "Now, set the Elevation to Station and enter the its name.\n"
-msgstr ""
-"Jetzt setzen Sie die Höhenmarkierung auf 'Bahnhof' und geben den Namen "
-"ein.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:246
-msgid ""
-"XTrackCAD can help find tracks that are curved too sharply or are too "
-"steep. These tracks are Exception tracks and are drawn in the Exception "
-"track color.\n"
-msgstr ""
-"XTrackCAD kann Ihnen helfen, Gleise zu finden, die einen zu engn Radius "
-"bilden oder die zu steil ansteigen. Diese Gleise sind Ausnahmegleise und "
-"werden in der Ausnahmegleisfarbe dargestellt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:247
-msgid ""
-"In this example we have a curved track with radius of 9\" and a straight "
-"track with a grade of 3.8%.\n"
-msgstr ""
-"In diesem Besipiel haben wir eine Kurve mit einem Radius von 9,5\" und ein "
-"gerades Gleis auf einer 3.8% Steigung.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:248
-msgid " \n"
-msgstr " \n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:249
-msgid ""
-"The Layout dialog shows the Minimum Track Radius is 9\" and the Maximum "
-"Track Grade is 5%.\n"
-msgstr ""
-"Im den Optionen für den Gleisplan sehen wir, dass der Mindestradius mit 9\" "
-"und die maximale Steigung mit 5% festgelegt sind.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:250
-msgid ""
-"If we make the curved track sharper it will be drawn in the Exception "
-"color.\n"
-msgstr ""
-"Verringern wir den Radius der Kurve, so wird das Gleis mit der Ausnahmefarbe "
-"dargestellt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:251
-msgid ""
-"If we make the straight track steeper it will also be drawn in the Exception "
-"color.\n"
-msgstr ""
-"Vergrößern wir die Steigung des geraden Gleises, so wird das Gleis ebenfalls "
-"in der Ausnahmefarbe dargestellt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:252
-msgid ""
-"You can change the Exception color on the Colors dialog from the Options "
-"menu.\n"
-msgstr ""
-"Die Ausnahmefarbe kann im Farbdialogfenster des Optionen-Menus geändert "
-"werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:253
-msgid ""
-"The unconnected End-Point of any track can be extended with the <Modify> "
-"command using Right-Drag.\n"
-msgstr ""
-"Gleise mit mindestens einem freien Endpunkt Gleise können mit dem <Ändern>-"
-"Befehl oder durch Ziehen mit gedrücktem rechtem Mausknopf geändert werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:254
-msgid "Select the End-Point and Right-Drag.\n"
-msgstr "Endpunkt auswählen und mit rechter Maustaste ziehen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:255
-msgid "The extending track can be straight...\n"
-msgstr "Die Erweiterung kann gerade sein...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:256
-msgid "... or curved.\n"
-msgstr "...oder gebogen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:257
-msgid ""
-"If you extend a Straight or Curved flex track and enable Easements then an "
-"Easement curve will be automatically generated when you extend the track.\n"
-msgstr ""
-"Wenn die Funktion Übergangsbogen aktiv ist, während Sie ein gerades oder "
-"gebogenes Flexgleis verändern, so wird ein Übergangsbogen erstellt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:258
-msgid ""
-"The <Flip> command will create a mirror image of the selected objects.\n"
-msgstr ""
-"Der Befehl <Spiegeln> erzeugt ein Spiegelbild der ausgewählten Objekte.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:259
-msgid "After selecting the object, drag a line which will form the mirror.\n"
-msgstr ""
-"Nach der Auswahl der Objekte, wird eine Linie gezogen die die Spiegelachse "
-"bildet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:260
-msgid "The mirror line does not have to be vertical or horizontal.\n"
-msgstr "Diese Spiegellinie muss nicht horizontal oder vertikal sein.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:261
-msgid "You can also flip any number of objects.\n"
-msgstr "Sie können jede beliebige Anzahl von Objekten spiegelen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:262
-msgid "Watch what happens to the structure and turnout titles.\n"
-msgstr ""
-"Achten Sie darauf, was mit den Beschriftungen an Gebäuden und Weichen "
-"geschieht.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:263
-msgid ""
-"Note that the turnout title has been changed from the Medium Right to Medium "
-"Left. When turnouts are flipped, XTrackCAD will try to find a matching "
-"turnout and if found will change the name.\n"
-msgstr ""
-"Beachten Sie auch, dass aus der mittleren Rechtsweiche eine mittlere "
-"Linksweiche wurde. Werden Weichen gespiegelt, versucht XTrackCAD eine "
-"passende Weiche zu finden und ersetzt den Namen, wenn dies gelingt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:264
-msgid ""
-"Structures do not have Right and Left hand versions. Their title is changed "
-"to indicate that they were flipped.\n"
-msgstr ""
-"Gebäude haben keine rechte oder linke Version. Der veränderte Titel zeigt, "
-"dass diese gespiegelt wurden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:265
-msgid "You can use the <Describe> command to change their title.\n"
-msgstr "Mit dem <Beschreiben> Befehl kann der Tietel wieder geändert werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:266
-msgid ""
-"The <Group> and <Ungroup> commands (on the Tools menu) are a powerful way to "
-"manipulate Turnout and Structure definitions.\n"
-msgstr ""
-"Die <Gruppieren> und <Gruppe auflösen> Befehle bilden einen leistungsfähigen "
-"Weg, Weichen- oder Gebäude-Definition zu verändern.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:267
-msgid "We'll start with a simple turnout and add a switch machine.\n"
-msgstr ""
-"Wir beginnen mit einer einfachen Weiche zu der wir einen Weichenantrieb "
-"zufügen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:268
-msgid ""
-"Now that we have drawn a rough outline of a switch machine we will group it "
-"with the turnout definition.\n"
-msgstr ""
-"Nachdem wir jetzt den groben Umriß des Antriebs gezeichnet haben, gruppieren "
-"wir diesen mit der Weichen-Definition.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:269
-msgid "First we Select the objects in the new definition.\n"
-msgstr "Zuerst wählen wir die Objekte in der neuen Definition aus.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:270
-msgid "Now do the <Group> command.\n"
-msgstr "Und wenden jetzt den <Gruppieren> Befehl an.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:271
-msgid ""
-"The <Group> command dialog shows the Title (Manufacturer, Description and "
-"Part Number) of the new definition. This information is taken from the "
-"Selected objects you are grouping.\n"
-msgstr ""
-"Das Dialogfenster für den <Gruppieren> Befehl zeigt den Titel (Hersteller, "
-"Beschreibung und Teilenummer) für die neue Definition an. Diese Information "
-"kommt aus den ausgewählten Teilen der Gruppe.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:272
-msgid ""
-"The 'Replace with new group?' toggle will replace the Selected objects with "
-"the new definition.\n"
-msgstr ""
-"Der 'Ersetzen durch neue Definition' Schalter ermöglicht es, die "
-"ausgewählten Objekte durch die neuen Definition zu ersetzen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:273
-msgid ""
-"If we don't change the Title then the new definition will replace the "
-"existing definition.\n"
-msgstr ""
-"Wenn wir den Titel nicht verändern, so ersetzt die neue Definition die "
-"bereits vorhandene.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:274
-msgid "We'll give this definition a new Description.\n"
-msgstr "Wir geben der Gruppe eine neue Beschreibung.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:275
-msgid "We're done with this definition. Press Ok.\n"
-msgstr "Diese Definition ist fertig. Drücken Sie OK.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:276
-msgid "You will see the updated image on the HotBar.\n"
-msgstr "Sie sehen das aktualisierte Bild in der Auswahlleiste.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:277
-msgid ""
-"The <Ungroup> command replaces any Selected turnouts or structures with "
-"their parts.\n"
-msgstr ""
-"Der Befehl zum Auflösen der Gruppe ersetzt gewählte Weichen oder Gebäude "
-"durch ihre Teile.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:278
-msgid ""
-"Structures and non-track segements of turnouts are composed of Lines, "
-"Circles and other shapes. In this turnout these are the two lines and the "
-"two squares.\n"
-msgstr ""
-"Gebäude und Weichen sind aus Linien, Kreisen und anderen Formen "
-"zusammengesetzt. Zu dieser Weiche gehören zwei Linien und zwei Quadrate.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:279
-msgid ""
-"We will Ungroup this turnout and see how the individual parts can be "
-"changed.\n"
-msgstr ""
-"Wir werden diese Weiche in ihre Teile zerlegen und sehen, wie die einzelnen "
-"Teile verändert werden können.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:280
-msgid "First Select the turnout and then Ungroup it.\n"
-msgstr ""
-"Zuerste wählen Sie die Weiche aus und lösen dann die Gruppierung auf.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:281
-msgid "Notice that the Title now indicates the turnout is Ungrouped.\n"
-msgstr ""
-"Beachten Sie, dass der Titel jetzt darauf hinweis, dass die Weiche aufgelöst "
-"ist.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:282
-msgid "Hit Escape to deselect everything.\n"
-msgstr "Durch Drücken von Escape wird die Auswhl aufgehoben.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:283
-msgid "Now Select the lines and squares.\n"
-msgstr "Jetzt wählen Sie die Linien und Quadrate aus.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:284
-msgid ""
-"We could modify these object or add new ones. For now we'll just delete "
-"them.\n"
-msgstr ""
-"Wir können diese Objekt ändern oder neue hinzufügen.Diesmal werden wir sie "
-"einfach löschen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:285
-msgid "And move the Label out of the way.\n"
-msgstr "Und die Beschriftung auf die Seite schieben.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:286
-msgid "Notice that the turnout has been broken into three parts.\n"
-msgstr "Beachten Sie, dass die Weiche in drei Teile zerfallen ist.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:287
-msgid ""
-"Two ends of the turnout, from the frog to the end of the diverging leg and "
-"from the points to the left, are now straight track sections.\n"
-msgstr ""
-"Zwei Endpunkte der Weiche, vom Herzstück zum Ende des abzweigenden Gleis und "
-"von den Weichenzungen nach links, sind jetzt gerade Abschnitte.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:288
-msgid ""
-"The a turnout is made of a number of individual straight and curved track "
-"segements. This turnout had four segments:\n"
-msgstr ""
-"Eine Weiche besteht aus einer Anzahl von geraden und gebogenen Gleisstücken. "
-"Diese Weiche hat vier Stücke:\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:289
-msgid " 1 a short straight segment to the left of the points\n"
-msgstr " 1. ein kurzes gerades Stück, links von den Weichenzungen,\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:290
-msgid " 2 a long straight segment to the right of the points\n"
-msgstr " 2. ein langes gerades Stück, rechts von den Weichenzungen,\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:291
-msgid " 3 a curved segment from the points to the frog\n"
-msgstr ""
-" 3. ein gebogenes Stück von den Weichenzungen bis zum Herzstück, und\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:292
-msgid ""
-" 4 a straight segment from the frog to the end of the diverging leg.\n"
-msgstr ""
-" 4. ein gerades Stück vom Herzstück bis zum Ende des abzweigenden Gleis.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:293
-msgid "The first and last segments have be converted to straight tracks.\n"
-msgstr ""
-"Der erste und der letzte Gleisabschnitt wurden in gerade Gleise "
-"umgewandelt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:294
-msgid ""
-"The second and third segments form the the body of the turnout and can not "
-"be ungrouped further.\n"
-msgstr ""
-"Der zweite und der dritte Gleisabschnitt bilden den Kern der Weiche und "
-"können nicht weiter zerlegt werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:295
-msgid ""
-"You can later Group this turnout with the straight segments to recreate the "
-"turnout definition. You can also add other track segments to turnout "
-"definitions.\n"
-msgstr ""
-"Sie können die Weiche mit den geraden Abschnitten später gruppieren um die "
-"Definition wiederherzustellen. Sie können auch andere Gleisabschnitte zur "
-"Weichendefinition zufügen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:296
-msgid "Now, create a track and place the new turnout on it.\n"
-msgstr "Jetzt erstellen Sie bitte ein Gleis und setzen die Weiche darauf.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:297
-msgid "Now suppose we want to replace the black squares with green circles.\n"
-msgstr ""
-"Nehmen wir mal an, wir wollen die schwarzen Quadrate durch grüne Kreise "
-"ersetzen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:298
-msgid "First we Select the turnout.\n"
-msgstr "Zuerst wählen wir die Weiche aus.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:299
-msgid "And now Ungroup it (from the Tools Menu)\n"
-msgstr ""
-"Der ersten und der letzte Abschnitt wurden in gerade Gleise umgewandelt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:300
-msgid ""
-"Notice that the name has changed to indicate the turnout was Ungrouped.\n"
-msgstr ""
-"Beachten Sie, dass der Name geändert wurde, um anzuzeigen, dass die "
-"Gruppierung der Weiche aufgelöst wurde.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:301
-msgid ""
-"Now, hit escape to deselect everything and then Select the 2 squares and "
-"delete them.\n"
-msgstr ""
-"Jetzt drücken Sie Escape umd die Auswahl zurückzusetzen. Dann wählen Sie die "
-"zwei Quadrate und löschen diese.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:302
-msgid "Now draw the green circles...\n"
-msgstr "Jetzt zeichnen Sie die grünen Kreise...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:303
-msgid "and Group the new definition.\n"
-msgstr "und gruppieren die neue Definition.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:304
-msgid ""
-"Notice that the turnout in the HotBar is angled the same as the turnout on "
-"the layout. Make sure your new definition is rotated the way you want it.\n"
-msgstr ""
-"Beachten Sie, dass die Weiche in der Auswahlleiste so schräg wie die Weiche "
-"auf der Anlage ist. Stellen Sie sicher, das die neuen Definitionen so "
-"ausgerichtet sind, wie Sie es bevorzugen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:305
-msgid "We can also create turnouts from simple straight and curved tracks.\n"
-msgstr ""
-"Wir können auch aus einfachen geraden und gebogenen Gleisen Weichen "
-"erstellen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:306
-msgid "We'll create two tracks that have a common End-Point.\n"
-msgstr "Wir erzeugen zwei Gleise mit einem gemeinsamen Endpunkt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:307
-msgid "At this point we can modify the tracks if necessary.\n"
-msgstr ""
-"Zu diesem Zeitpunkt können die Gleise verändern, sofern das notwendig ist.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:308
-msgid "We will use the <Describe> command to change the tracks.\n"
-msgstr ""
-"Wir benutzen den Befehl <Beschreiben> um die Eigenschaften der Gleise zu "
-"verändern.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:309
-msgid "We'll make the Length 7.5\".\n"
-msgstr "Wir setzen die Länge auf 7,5\".\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:310
-msgid ""
-"If we change the Length, each End-Point will be moved to shorten the track. "
-"We want to just move the Right End-Point. To control this, change the Pivot "
-"to First which means the Left End-Point will be unchanged when we change the "
-"length (or angle) of the track.\n"
-msgstr ""
-"Wenn wir die Länge verändern, wird jeder Endpunkt erschoben um das Gleis zu "
-"verkürzen.Wir wollen, dass nur der rechte Endpunkt bewegt wird. Um das zu "
-"steuern, stellen Sie den Fixpinkt auf den Ersten. Das bedeutet, dass der "
-"linke Endpunkt unverändert bleibt wenn wir die Länge (oder den Winkel) des "
-"Gleises ändern.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:311
-msgid "Now when change the Length only the Right End-Point will move.\n"
-msgstr "Jetzt wird beim Ändern der Länge nur der rechte Endpunkt verschoben.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:312
-msgid "Now let's look at the curved track.\n"
-msgstr "Jetzt schauen wir uns das gebogene Gleis an.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:313
-msgid ""
-"Here the Left End-Point (which we don't want to move) is the Second End-"
-"Point, so we'll make that the Pivot.\n"
-msgstr ""
-"Hier ist der linke Endpunkt, den wir nicht verschieben wollen, der zweite "
-"Endpunkt. Also legen wir diesen als Fixpunkt fest.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:314
-msgid "We want the curve to have a radius of 20\" and an angle of 17.5°.\n"
-msgstr ""
-"Wir wollen, dass der Bogen einen Radius von 20\" und einen Winkel von 17,5° "
-"hat.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:315
-msgid "First change the Radius...\n"
-msgstr "Zuerst ändern Sie den Radius...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:316
-msgid "and the the Angular Length.\n"
-msgstr "und den Winkelabstand.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:317
-msgid "Now Select both tracks...\n"
-msgstr "Jetzt bitte beide Gleise auswählen...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:318
-msgid "and Group them.\n"
-msgstr "und gruppieren sie.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:319
-msgid ""
-"If the two tracks have a common End-Point then they will form a Turnout and "
-"can be switched with the <Train> command. Otherwise they will just be two "
-"track segments grouped together.\n"
-msgstr ""
-"Wenn die beiden Gleise einen gemeinsamen Endpunkt haben, werden Sie eine "
-"Weiche bilden, dieim Betriebsmodus gesteuert werden kann. Andernfalls werden "
-"es einfach zwei gruppierte Gleise sein.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:320
-msgid ""
-"We have created a left hand turnout and we also want a right hand version.\n"
-msgstr ""
-"Wir haben eine links abzweigende Weiche erstellt und wollen auch die rechts "
-"abzweigende Form.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:321
-msgid "We'll use the <Flip> command.\n"
-msgstr "Wir verwenden den Befehl <Spiegeln>\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:322
-msgid ""
-"Drag a horizontal line that will be the mirror for the <Flip> command.\n"
-msgstr ""
-"Ziehen Sie als Spiegelstrich für den Spiegeln Befehl eine horizontale "
-"Linie.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:323
-msgid "Notice the title has changed to Flipped Left.\n"
-msgstr ""
-"Beachten Sie, dass der Titel auf \"Links gespiegelt\" geändert wurde.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:324
-msgid "Now Group the turnout.\n"
-msgstr "Jetzt gruppieren Sie die Weiche\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:325
-msgid "We'll change the Title and Part No for the new defintion.\n"
-msgstr ""
-"Wir werden den Titel und die Teilnummer für die neue Definition ändern.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:326
-msgid ""
-"To Remove the definitions, use the Custom Management dialog on the Tools "
-"menu.\n"
-msgstr ""
-"Um Definitionen zu löschen benutzen Sie die \"Anpassungs Verwaltung\" im "
-"\"Verwalten\" Menü.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:327
-msgid "Select the definitions you added and Delete them.\n"
-msgstr "Wählen Sie die zugefügten Definitionen aus udn löschen diese.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:328
-msgid ""
-"Now we will create a helix in the corner of the layout connected to 2 "
-"tracks.\n"
-msgstr ""
-"Jetzt erstellen wir in der Ecke der Anlage eine Gleiswendel, die zwei Gleise "
-"verbindet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:329
-#, c-format
-msgid ""
-"We will be creating a helix with a Elevation Difference of 12\", Grade of "
-"1.5% and limit the Vertical Separation to at least 2\".\n"
-msgstr ""
-"Wir werden eine Gleiswendel mit einem Höhenunterschied von 12\", einer "
-"Steigung von 1,5% erzeugen und den vertikale Abstand auf mindestens 2\" "
-"begrenzen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:330
-msgid "First set the Elevation Difference to 12\"\n"
-msgstr "Als erstes den Höhenunterschied auf 12\" setzen\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:331
-msgid "Next set the Vertical Separation to 2\"\n"
-msgstr "Als nächstes wird der vertikale Abstand auf 2\" gesetzt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:332
-msgid "Notice how this causes the number of Turns to be set to 6\n"
-msgstr "Beachten Sie, dass hierfür 6 Windungen benötigt werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:333
-msgid "Next set the Grade to 1.5%\n"
-msgstr "Jetzt setzen die die Steigung auf 1,5%\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:334
-msgid "Notice how this causes the Radius to change.\n"
-msgstr "Beachten Sie wie dadruch der Radius verändert wurde.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:335
-msgid ""
-"Setting these values changes the Radius to 21.2\" and the number of Turns to "
-"6.\n"
-msgstr ""
-"Durch Setzen dieser Werte wird der Radius auf 21,2\" und die Anzahl der "
-"Windungen auf 6 geändert.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:336
-msgid ""
-"Now we specify the Angular Separation between the enterance and exit to the "
-"helix.\n"
-msgstr ""
-"Jetzt ändern wir den Winkel zwischen eingehendem und abgehendem Gleis der "
-"Wendel.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:337
-msgid "Note: this will decrease the Radius slightly.\n"
-msgstr "Beachten Sie, dass dadurch der Radius geringfügig kleiner wurde.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:338
-msgid "Next we can fine tune the helix by decreasing the Radius to 15\".\n"
-msgstr ""
-"Als nächstes können wir die Wendel durch Ändern des Radius auf 15\" "
-"optimieren.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:339
-msgid "Note the change to the Grade.\n"
-msgstr "Beachten Sie die Änderung der Steigung.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:340
-msgid ""
-"Lastly change the Vertical Separation to 2.5\". The number of Turns will "
-"change to 4 and the grade increase to almost 3%.\n"
-msgstr ""
-"Zum Schluss ändern die Differenz zwischen den Windungen auf 2,5\". Die "
-"Anzahl der Windungen wird auf 4 geändert und die Steigung vergrößert sich "
-"auf beinahe 3%.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:341
-msgid ""
-"Note: the Vertical Separation will be increased. This value is the "
-"Elevation Difference (12.0) divided by the total number of turns. The total "
-"number of turns is 4.25: 4 whole Turns plus a quarter turn for the Angular "
-"Separation.\n"
-msgstr ""
-"Beachten Sie dass die Windungsdifferenz sich vergrößert. Dies ist der "
-"Höhenunterschied, geteilt durch die Anzahl der Windungen. Insgesamt sind es "
-"4,25 Windungen: 4 ganze Windungen und eine viertel Umdrehung für den Winkel "
-"zwischen den Zugängen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:342
-msgid ""
-"Now that the helix parameters are set we can place the helix on the layout.\n"
-msgstr ""
-"Nachdem die Eigenschaften für die Gleiswendel bestimmt sind, setzen wir "
-"diese auf die Anlage.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:343
-msgid ""
-"Next, join the 2 straight tracks to the helix in the same way we join to a "
-"circle.\n"
-msgstr ""
-"Als nächstes verbinden Sie die zwei geraden Gleise mit der Wendel genauso "
-"wir Sie Gleise mit einem Kreis verbinden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:344
-msgid ""
-"Notice that the length has increased because we have more than 4 turns in "
-"the helix. It is closer to 4.25 turns.\n"
-msgstr ""
-"Beachten Sie, dass sich die Länge vergrößert hat, da wir mehr als vier "
-"Windungen in der Wendel haben. Es sind nahe an 4,25 Umdrehungen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:345
-msgid ""
-"Next, we assign elevations to the 2 End-Points of the helix. This will "
-"determine the grade and separation between the helix coils.\n"
-msgstr ""
-"Als nächstes legen wir die Höhen der beiden Endpunkt der Wendel fest. "
-"Dadurch werden die Steigung und derAbstand zwischen den Windungen "
-"festgelegt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:346
-msgid ""
-"Note: we could set the elevations anywhere along the connecting tracks "
-"instead. XTrackCAD treats a helix as a single length of track for "
-"elevations.\n"
-msgstr ""
-"Beachten Sie, dass wir die Höhen auch irgendwo an den verbindenden Gleisen "
-"festlegen können. XTrackCAD behandelt bei den Höhen eine Wendel als ein "
-"durchgängiges Stück Gleis.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:347
-msgid ""
-"We have set the elevations to 1\" and 13\" to produce a grade of 3.0% with "
-"2.8\" between coils.\n"
-msgstr ""
-"Wir haben die Höhen auf 1\" und 13\" gesetzt um eine Steigung von 3% mit "
-"2,8\" zwischen den Windungen zu erzeugen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:348
-msgid ""
-"You can use the <Describe> command to change the number of Turns or the "
-"Elevations at either end of the Helix. This will affect the Grade and "
-"Vertical Separation.\n"
-msgstr ""
-"Sie können den Eigenschaften Befehl benutzen, um die Anzah der Windungen "
-"oder die Höhe an den Enden der Wendel zu ändern. Dadurch ändern sich die "
-"Steigung und der Abstand.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:349
-msgid "The helix description can be moved by the <Move Label> command.\n"
-msgstr ""
-"Mit dem Befehl <Verschiebe Beschriftung> kann die Beschriftung der Wendel "
-"verschoben werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:350
-msgid ""
-"In addition to using the turnout definitions you can create 'Hand Laid "
-"Turnout'.\n"
-msgstr ""
-"Zusätzlich zu den Weichendefinitionen können Sie auch Selbstbauweichen "
-"erstellen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:351
-msgid "This is two step process:\n"
-msgstr "Das ist ein zweistufiger Prozess.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:352
-msgid "1 - click on the frog and drag away to set the frog angle\n"
-msgstr ""
-"1. klicken Sie auf das Herzstück und setzen Sie durch ziehen mit gedrücktem "
-"Mausknopf den richtigen Winkel.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:353
-msgid ""
-" Hint: the further you drag from the frog, the more accurate the angle.\n"
-msgstr ""
-" Hinweis: Je weiter weg Sie vom Herzstück ziehen, um so genauer lässt sich "
-"der Winkel einstellen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:354
-msgid "2 - click and drag to set the position of the points\n"
-msgstr "2. Klicken und ziehen Sie um die Position der Zungen festzulegen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:355
-msgid "We can create Hand Laid Turnouts on curved tracks.\n"
-msgstr "Wir können Selbstbauweichen auch auf gebogenen Gleisen erstellen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:356
-msgid "A Hand Laid Turnout is composed of several parts.\n"
-msgstr "Eine Selbstbauweiche besteht aus mehreren Teilen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:357
-msgid "The actual Turnout is a short portion at the points.\n"
-msgstr "Die eigentliche Weiche ist ein kleines Stück an den Weichenzungen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:358
-msgid "The other parts are various straight and curved segments.\n"
-msgstr "Die anderen Teile sind verschiedene gerade und gebogene Teilstücke.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:359
-msgid "The new curved turnout is also composed of several segments.\n"
-msgstr "Die neue Bogenweiche besteht ebenfalls aus mehreren Abschnitten.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:360
-msgid "Welcome to the XTrackCAD demonstration.\n"
-msgstr "Willkommen bei der XTrackCAD Demonstration.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:361
-msgid ""
-"This will show some the features of XTrackCAD in an automated presentation. "
-"This window contains a number of controls and a message area (which I hope "
-"you are reading now). \n"
-msgstr ""
-"Diese wird Ihnen einige Funktionen von XTrackCAD in einer automatischen "
-"Präsentation zeigen. Dieses Fenster enthält einige Steuerungselements und "
-"einen Nachrichtenbereich, den Sie gerade lesen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:362
-msgid "The controls are:\n"
-msgstr "Die Steuerungselemente sind:\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:363
-msgid "Step - advances to the next step of the demo.\n"
-msgstr "Einzelschritt - weiter zum nächsten Schritt in der Demo.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:364
-msgid "Next - skips ahead to the next demo.\n"
-msgstr "Nächster - springt zur nächsten Demo.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:365
-msgid "Quit - exits the demo and returns to XTrackCAD.\n"
-msgstr "Beenden - verlässt die Demo und kehrt zu XTrackCAD zurück.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:366
-msgid "Speed - controls the speed of the demo.\n"
-msgstr "Geschwindigkeit - steuert die Geschwindigkeit der Demo.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:367
-msgid "Click Step now for the next message.\n"
-msgstr ""
-"Klicken Sie jetzt auf Einzelschritt um zur nächsten Nachricht zu gelangen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:368
-msgid ""
-"If this is the first time you have used the demo you may want to rearrange "
-"the windows so the demo window does not obscure the main window.\n"
-msgstr ""
-"Wenn dies das erste Mal ist, dass Sie die Demo benutzen, sollten Sie die "
-"Fensterpositionen festlegen. Achten Sie dabei darauf, dass das Hauptfenster "
-"nicht durch das Demofenster verdeckt wird.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:369
-msgid ""
-"You can move the demo window now by dragging on the title bar at the top of "
-"the window. I suggest you move it to the top of your screen.\n"
-msgstr ""
-"Sie können das Demofenster jetzt durch Ziehen an der Titelleiste des "
-"Fensters verschieben. Am besten verschieben Sie es an den oberen Rand des "
-"Bildschirms.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:370
-msgid ""
-"The various controls are disabled when it would be inappropiate to click on "
-"them. When the demo is running the Step button is disabled. When the demo "
-"is paused the Step button is enabled and you can click it when you are ready "
-"to view the next part of the demo.\n"
-msgstr ""
-"Die verschiedenen Steuerelement sind deaktiviert, während diese nicht "
-"nutzbar sind. Während die Demo läuft, ist der Einzelschritt-Knopf "
-"deaktiviert. Wenn die Demo angehalten ist, wird der Einzelschritt-Knopf "
-"aktiviert. Sie können darauf klicken, wenn Sie für den nächsten Schritt der "
-"Demo bereit sind.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:371
-msgid "You can click on Quit to return to XTrackCAD at any time.\n"
-msgstr ""
-"Durch Klicken auf Verlassen können Sie jederzeit zu XTrackCAD zurückkehren.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:372
-msgid "You can adjust the speed of the demonstration with the Speed control.\n"
-msgstr ""
-"Die Geschwindigkeit der Demo können Sie mit dem Geschwindigkeitsknopf "
-"anpassen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:373
-msgid "The demos are designed to fit within a certain sized window.\n"
-msgstr "Die Demos sind für eine bestimmte Fenstergröße entworfen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:374
-msgid ""
-"For best results, change the size of the main XTrackCAD window so the box "
-"shape is completely visible.\n"
-msgstr ""
-"Um beste Ergebniss zu erreichen, ändern Sie die Größe des XTrackCAD "
-"Hauptfensters so, dass die das Rechteck vollständig sicht bar ist.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:375
-msgid "You can do this by clicking and dragging on a corner of the window.\n"
-msgstr ""
-"Dies können Sie erreichen, in dem Sie an der rechten unteren Ecke des "
-"Fensters ziehen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:376
-msgid "This is the end of the introductory demo.\n"
-msgstr "Dies ist das Ende der Einführungsdemo.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:377
-msgid ""
-"Please click Step for the next demo or click Quit to return to XTrackCAD.\n"
-msgstr ""
-"Bitte klicken Sie Einzelschritt für die nächste Demo oder Verlassen, um zu "
-"XTrackCAD zurück zu kehren.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:378
-msgid ""
-"You can also join to and from circles. This will change the circles to "
-"curves.\n"
-msgstr ""
-"Sie können auch Gleise mit Gleiskreisen verbinden. Dadurch werden aus "
-"Kreisen Bögen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:379
-msgid "In this example we will join two circles.\n"
-msgstr "In diesem Beispiel werden wir zwei Kreise verbinden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:380
-msgid ""
-"Here we've selected points on the two circles. The direction of the "
-"connections (whether clockwise or counter clockwise) is controlled by where "
-"on the circle you select the connection points.\n"
-msgstr ""
-"Hier haben wir Punkte auf zwei Kreisen ausgewählt. Die Richtung der "
-"Verbindungen, entweder im Uhrzeigersinn oder dagegen, wird aufgrund der "
-"Stellen auf den Kreisen, die Sie angewählt haben, ermittelt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:381
-msgid "Now let's try a cross connection.\n"
-msgstr "Jetzt versuchen wir eine kreuzweise Verbindung.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:382
-msgid ""
-"Note that the connection is from different 'ends' of the circle than in the "
-"last example.\n"
-msgstr ""
-"Beachten Sie, dass die Verbindung an anderen Punkten der Kreise ansetzt als "
-"bem letzten Beispiel.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:383
-msgid "This examples shows joining tracks whose End-Points are aligned.\n"
-msgstr ""
-"Dieses Beispiel zeigt wir Gleise verbunden werden, die zueinander parallel "
-"sind.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:384
-msgid ""
-"Note the 2 pairs of tracks have End-Points that are close and aligned but "
-"not connected.\n"
-msgstr ""
-"Beachten Sie dass die Endpunkte der beiden Gleise nahe beieinander und "
-"parallel, aber nicht verbunden, sind.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:385
-msgid "The first case joins the curve and straight track.\n"
-msgstr ""
-"Im ersten Fall werden eine gebogenes und ein gerades Gleis verbunden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:386
-msgid "The second case will join the two straight tracks.\n"
-msgstr "Im zweiten Fall werden zwei gerade Gleise verbunden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:387
-msgid "Note that the two straight tracks were combined to form one track.\n"
-msgstr ""
-"Beachten Sie, dass die beiden geraden Gleise zu einem Gleis zusammengefasst "
-"wurden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:388
-msgid ""
-"The <Join> command can join straight and curved tracks (in either order).\n"
-msgstr ""
-"Mit dem Befehl <Verbinden> können gerade und gebogene Gleise (in jeder "
-"Reihenfolge) verbunden werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:389
-msgid "A connecting track is drawn between the two tracks.\n"
-msgstr "Ein Verbindungsgleis wird zwischen den beiden Gleisen gezeichnet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:390
-msgid ""
-"Notice that the curved track is extended as the connection point moves past "
-"the End-Point.\n"
-msgstr ""
-"Beachten Sie, dass das gebogene Gleis verlängert wird, wenn der "
-"Verbindungspunkt über den Endpunkt hinaus verschoben wird.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:391
-msgid "Here the connection makes the curved track wrap around.\n"
-msgstr "Hier bildet das Verbindungsgleis eine Spirale.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:392
-msgid ""
-"Now the cursor is about to be moved past the other (far) End-Point of the "
-"straight track. You will receive a warning and the connecting track turns "
-"Red.\n"
-msgstr ""
-"Jetzt wird der Mauszeiger über den anderen, entfernten, Endpunkt des geraden "
-"Gleises verschoben. Sie erhalten einen Hinweis und das Verbindungsgleis wird "
-"rot.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:393
-msgid "The <Join> command can move one group of tracks to join with another.\n"
-msgstr ""
-"Mit dem Befehl <Verbinden> können Gruppen von Gleisen verschoben werden, um "
-"diese mit anderen zu verbinden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:394
-msgid "First <Select> the tracks you want to move.\n"
-msgstr "Zuerst wählen Sie die Gleise aus, die verschoben werden sollen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:395
-msgid "Click <Join> and Shift-Left-Click on the two End-Points.\n"
-msgstr ""
-"Klicken Sie auf <Verbinden> und klicken dann bei gedrückter Umschalttaste "
-"auf die beiden Endpunkte.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:396
-msgid "The selected tracks are moved into position.\n"
-msgstr "Die ausgewählten Gleise werden an die Position verschoben.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:397
-msgid ""
-"Two straight tracks are joined by selecting the two End-Points. The "
-"selected End-Points will be those closest to the cursor when the track is "
-"selected.\n"
-msgstr ""
-"Zwei gerae Gleise werden verbunden, indem die Endpunkte ausgewählt werden. "
-"Die beim Auswählen der Gleise nahegelegensten Endpunkte werden ausgewählt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:398
-msgid ""
-"A connecting track is drawn between the two tracks. Notice how it moves as "
-"the cursor is dragged along the second track.\n"
-msgstr ""
-"Ein Verbindungsgleis wird zwischen den beiden Gleisen gezeichnet. Beachten "
-"Sie wie dieses neu geformt wird, wenn der Mauszeiger entlang des zweiten "
-"Gleises bewegt wird.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:399
-msgid ""
-"Note that two tracks are extended if you move past the end of the track.\n"
-msgstr ""
-"Beachten Sie, dass die beiden Gleise verlängrt werden, wenn Sie denn "
-"Mauszeiger über das Ende des Gleises hinaus bewegen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:400
-msgid ""
-"Notice what happens if you drag past the intersection points of the two "
-"tracks.\n"
-msgstr ""
-"Beachten Sie was passiert, wenn Sie über den Schnittpunkt der beiden Gleise "
-"hinaus ziehen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:401
-msgid "This is probably not a very useful thing to do.\n"
-msgstr "Das ist wahrscheinlich keine sinnvolle Lösung.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:402
-msgid "You can connect from any track to a turntable\n"
-msgstr "Sie können jedes Gleis mit einer Drehscheibe verbinden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:403
-msgid "Note: you cannot have a turntable as your first connection point.\n"
-msgstr ""
-"Beachten Sie, dass die Drehscheibe nicht der erste Verbindungspunkt sein "
-"darf.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:404
-msgid ""
-"You cannot place the connecting track too close to an existing stall track. "
-"How close you can get is controlled by the Turntable Angle on the Setup "
-"dialog.\n"
-msgstr ""
-"Ein Verbindungsgleis kann nicht zu dicht an einem existieren "
-"Drehscheibenabgang erstellt werden. Wie klein der Abstand sein darf, wird "
-"über den Drehscheibenwinkel in den Einstellungen festgelegt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:405
-msgid "In this example it is set to 7.5 degrees.\n"
-msgstr "In diesem Beispiel ist dieser auf 7,5\" gestellt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:406
-msgid "You can drag the connecting point all round the turntable.\n"
-msgstr "Sie können den Verbindungspunkt irgendwo an die Drehscheibe ziehen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:407
-msgid ""
-"As you drag away from the turntable a straight track will be drawn to the "
-"cursor postion and a curve will be drawn from the cursor to the connecting "
-"track.\n"
-msgstr ""
-"Während Sie von der Drehscheibe weg ziehen, wird ein gerades Gleis zur "
-"Position des Mauszeiger gezeichnet. Ein Gleisbogen wird vom Mauszeiger zum "
-"Verbindungsgleis gezeichnet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:408
-msgid ""
-"Now the cursor will be moved within the turntable. Notice the error "
-"message.\n"
-msgstr ""
-"Jetzt wird der Mauszeiger zu einer Position innerhalb der Drehscheibe "
-"bewegt. Beachten Sie die Fehlermeldung.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:409
-msgid "All done.\n"
-msgstr "Fertig.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:410
-msgid ""
-"The Draw Commands are used to draw straight and curved lines on the layout.\n"
-msgstr ""
-"Die Zeichenbefehle werden genutzt, um gerade oder gebogene Gleise auf dem "
-"Gleisplan zu erstellen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:411
-msgid ""
-"Lines are drawn by clicking at the starting postion and dragging to the "
-"final position.\n"
-msgstr ""
-"Linien werden gezeichnet, indem der Startpunkt durch Klicken festgelegt wird "
-"und dann durch Ziehen der zusätzliche Endpunkt erstellt wird.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:412
-msgid ""
-"Drawing lines with the Shift key held down will use the previous line End-"
-"Point as the starting position. This makes it easy to draw connected "
-"lines.\n"
-msgstr ""
-"Wird beim Zeichnen die Umschalttaste festgehalten wird der letzte Endpunkt "
-"als Startpunkt für das neue Gleis benutzt. Dadurch wird das Zeichnen "
-"verbundener Linien vereinfacht.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:413
-msgid "You also draw in various colors and line widths.\n"
-msgstr ""
-"Sie können auch mit unterschiedlichen Farben und Liniendicken zeichnen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:414
-msgid ""
-"Like Curved Tracks, Curved Lines can be drawn by a variety of methods.\n"
-msgstr ""
-"Wie Gleisbögen können auch gebogene Linien mit unterschiedlichen Methoden "
-"gezeichnet werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:415
-msgid ""
-"Here we will draw a Curve by dragging from one End-Point to the other to "
-"define the chord of the Curve. Then we will drag from the center to shape "
-"the curve.\n"
-msgstr ""
-"Hier zeichnen wir eine Kurve, indem wir zuerst von Endpunkt zu Endpunkt "
-"ziehen um die Sehne der Kurve festzulegen. Dann Ziehen wir vom Mittelpunkt "
-"aus, um die Form der Kurve festzulegen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:416
-msgid "Boxes are useful for drawing rectangular shapes.\n"
-msgstr ""
-"Gefüllte Rechtecke können für das Erstellen rechteckiger Formen benutzt "
-"werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:417
-msgid ""
-"Circles can be drawn by clicking on the center or edge and dragging to set "
-"the radius.\n"
-msgstr ""
-"Kreise werden gezeichnet, indem auf den Rand oder den Mittelpunkt geklickt "
-"wird. Danach wird durch Ziehen der Radius festgelegt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:418
-msgid "Here we will drag from the Center.\n"
-msgstr "Hier beginnen wir vom Mittelpunkt aus.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:419
-msgid "Lines and Shapes can be deleted by Selecting and Deleting.\n"
-msgstr ""
-"Linien und Formen können durch Auswählen und Löschen entfernt werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:420
-msgid "We also draw Polylines and filled shapes.\n"
-msgstr "Wir können auch Vielfachlinien und gefüllte Formen erstellen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:421
-msgid ""
-"A Polyline is drawn by dragging to place each of the point in the Polyline.\n"
-msgstr ""
-"Eine Vielfachlinie wird gezeichnet, indem jeder Eckpunkt durch Ziehen "
-"gesetzt wird.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:422
-msgid ""
-"To finish off the Polyline press the <Space> key or choose another drawing "
-"type.\n"
-msgstr ""
-"Um die Vielfachlinie zu beenden, drücken Sie die Leertaste oder wählen eine "
-"andere Zeichenoperation.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:423
-msgid "A Polygon is drawn in the same way\n"
-msgstr "Ein Vieleck wird genauso gezeichnet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:424
-msgid ""
-"You can use the Above and Below Commands to move lines and shapes to the "
-"front or back of the drawing.\n"
-msgstr ""
-"Sie können die Befehle Über und Unter benutzen, um Linien und Formen in den "
-"Vorder- oder Hintergrund zu verschieben.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:425
-msgid "Filled Boxes and Circles work the same as line Boxes and Circles.\n"
-msgstr "Gefüllte Rechtecke und Kreis werden genauso erstellt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:426
-msgid ""
-"In the drawing area of the main window you can see an hollow arrow which "
-"represents the mouse cursor. In this demo the mouse will move about to show "
-"you the actions of different commands.\n"
-msgstr ""
-"Auf der Zeichenfläche des Hauptfenster sehen Sie einen leeren Pfeil anstelle "
-"des Mauszeigers. In dieser Demo wird dieser bewegt, um Ihnen die "
-"Arbeitsweise verschiedener Befehle zu zeigen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:427
-msgid ""
-"The hollow arrow represents the mouse cursor without a mouse button being "
-"pressed.\n"
-msgstr "Der leere Pfeil entspricht dem Mauszeiger ohne gedrückte Maustaste.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:428
-msgid ""
-"When the left mouse button would be pressed, the mouse cursor appears to "
-"flash and the hollow arrow is replaced by a solid red arrow. While the left "
-"button is pressed the mouse cursor will be a solid arrow.\n"
-msgstr ""
-"Würde die Maustaste gedrückt, blinkt der Mauszeiger und wird durch einen "
-"gefüllten roten Pfeil ersetzt. Solange der linke Mausknopf gedrückt bleibt, "
-"ist der Mauszeiger ein gefüllter Pfeil.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:429
-msgid ""
-"Note: these color changes occur only during the demo to simulate mouse "
-"button presses.\n"
-msgstr ""
-"Beachten Sie, dass diese Farbänderungen nur in einer Demo auftritt um "
-"Tastendrücke anzuzeigen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:430
-msgid ""
-"Moving the mouse while a mouse button is pressed is called 'dragging'.\n"
-msgstr ""
-"Das Bewegen der Maus während der Mausknopf gedrückt bleibt wird als 'Ziehen' "
-"bezeichnet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:431
-msgid ""
-"When the left mouse button is released, the mouse cursor flashes and the "
-"hollow arrow is restored.\n"
-msgstr ""
-"Wird der linke Mausknopf wieder losgelassen, blinkt der Mauszeiger und der "
-"leere Pfeil wird wieder hergestellt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:432
-msgid "Dragging with the right button is simulated by a blue solid cursor.\n"
-msgstr ""
-"Das Ziehen mit dem gedrückten rechten Mausknopf wird durch einen gefüllten "
-"blauen Mauszeiger dargestellt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:433
-msgid ""
-"Sometimes the Shift key is held down while using the mouse for a Shift-Click "
-"or a Shift-Drag. \n"
-msgstr ""
-"Manchmal wird während des Bewegen der Maus auch die Umschalttaste gedrückt "
-"gehalten. Dies wird mit Umschalt-Klick und Umschalt-Ziehen bezeichnet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:434
-msgid "This is indicated by an outline drawn around the solid arrow.\n"
-msgstr "Dies wird durch eine Umlineum den gefüllten Pfeil dargestellt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:435
-msgid ""
-"The main drawing area shows a portion of total layout. You can zoom in or "
-"zoom out by choosing 'Zoom In' or 'Zoom Out' in the 'Edit' menu, by using "
-"the Zoom buttons on the toolbar or by using the 'Page Down' and 'Page Up' "
-"keys.\n"
-msgstr ""
-"Der Hauptzeichenbereich zeigt einen Teil des gesamten Gleisplanes. Sie "
-"können diesen auf verschiedenen Wegen vergrössern oder verkleinern. Diese "
-"Möglichkeiten sind die Zoom-Auswahlen im Menupunkt Bearbeiten, die Zoom-"
-"Knöpfe in der Werkzeugleiste, die Bild hoch und runter Tasten und das "
-"Mausrad.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:436
-msgid "You can see the entire layout in the Map window.\n"
-msgstr "Den gesamten Gleisplan können Sie im Kartenfenster sehen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:437
-msgid "As you Zoom Out tracks are drawn with one line instead of two.\n"
-msgstr ""
-"Wenn Sie die Ansicht verkleinern, werden Gleise durch eine anstelle von zwei "
-"Linien dargestellt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:438
-msgid ""
-"You can change what portion of the layout is shown by using the 'Map' window "
-"which shows a compressed version of the entire layout. A hilighted area of "
-"the 'Map' (in reverse video) shows what portion of the layout is displayed "
-"in the main drawing area.\n"
-msgstr ""
-"Sie können den im Hauptzeichenfenster gezeigten Bereich des Gleisplans mit "
-"dem Karten-Fenster, das den gesamten Plan verkleinert darstellt, ändern. Ein "
-"hervorgehobener Bereich der Karte (weiß auf schwarzem Grund) zeigt, welcher "
-"Teil des Gleisplans im Moment dort gezeigt wird.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:439
-msgid ""
-"You can Left-Drag the hilighted area in the Map window to change the "
-"displayed portion of the layout.\n"
-msgstr ""
-"Durch Ziehen des hervorgehobenen Bereichs im Karten-Fenster können Sie den "
-"angezeigten Bereich des Gleisplans verändern.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:440
-msgid ""
-"You can also Right-Drag on the Map window to set the scale and position of "
-"the Main window.\n"
-msgstr ""
-"Sie können auch Rechts-Ziehen um den Maßstab und die Position des Gleisplans "
-"im Hauptfenster zu bestimmen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:441
-msgid ""
-"The <Note> command lets you attach notes to various spots on the layout.\n"
-msgstr ""
-"Der Befehl <Notiz> ermöglicht es, an unterschiedlichen Stellen des "
-"Gleisplans Notien anzubringen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:442
-msgid ""
-"When you place a note, the Note editor window is displayed which lets you "
-"enter the note.\n"
-msgstr ""
-"Wenn Sie eine Notiz anlegen, wird der Notizeditor geöffnet, der die Eingabe "
-"eines Textes ermöglicht.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:443
-msgid ""
-"If you click on a note in <Describe> mode the Note editor displays the "
-"note.\n"
-msgstr ""
-"Wenn Sie im <Beschreiben> Modus auf eine Notiz klicken, wird der Editor "
-"angezeigt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:444
-msgid "This is the end of the XTrackCAD Demos.\n"
-msgstr "Dies ist das Ende der XTrackCAD Demos.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:445
-msgid "Click Step to return to XTrackCAD.\n"
-msgstr "Klicken Sie auf Einzelschritt um zu XTrackCAD zurück zu kehren.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:446
-msgid "Thanks for watching.\n"
-msgstr "Danke für das Interesse.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:447
-msgid "This example shows how to create parallel tracks.\n"
-msgstr "Dieses Besipiel zeigt wie paralle Gleise erstellt werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:448
-msgid ""
-"The separation is set in the <Parallel Separation> window. You should set "
-"this value before you begin to select tracks.\n"
-msgstr ""
-"Der Abstand wird im Fenster <Parallelabstand> eingestellt. Dies muss "
-"geschehen, bevor das Glaus ausgewählt wird.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:449
-msgid ""
-"You control which side the parallel track will be on by moving the cursor "
-"from one side of the track centerline to the other.\n"
-msgstr ""
-"Sie können steuern, auf welcher Seite das Parallalgleis erstellt wird, indem "
-"Sie den Mauszeiger von einer Seite derr Gleismitte auf die andere bewegen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:450
-msgid "When you release the mouse button the new parallel track is created.\n"
-msgstr ""
-"Sobald Sie den Mausknop loslassen, wird das parallele Gleis erstellt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:451
-msgid ""
-"Note that the <Parallel> command remains active after you created the "
-"track. This is controlled by the Sticky dialog in the Options menu.\n"
-msgstr ""
-"Beachten Sie, dass der Befehl <Parallelgleis> aktiv bleibt nachdem Sie das "
-"Gleis erstellt haben. Dies wird durch die Einstellungen in Wiederholte "
-"Befehle festgelegt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:452
-msgid "You cannot create a track parallel to a turnout.\n"
-msgstr "Zu einer Weiche können keine Parallelen erstellt werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:453
-msgid ""
-"Note that the new curved track is automatically connected to the short "
-"parallel track.\n"
-msgstr ""
-"Beachten Sie, dass das neue gebogene Gleis automatisch mit dem kurzen "
-"parallelen Gleis verbunden wird.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:454
-msgid ""
-"Polylines and Polygons (created with the <Draw> command) can be modified by "
-"dragging on their Corners or Edges.\n"
-msgstr ""
-"Vielfachlinen und Vielecke, erstellt mit dem Befehl <Zeichnen> können durch "
-"Ziehen an den Ecken und Kanten verändert werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:455
-msgid "If you select the middle of an Edge a new Corner is created.\n"
-msgstr ""
-"Wenn Sie die Mitte einer Kante auswählen, wird eine neue Ecke erzeugt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:456
-msgid ""
-"If you drag a Corner to another Corner the two are merged and the Edge "
-"between them is removed.\n"
-msgstr ""
-"Wenn Sie eine Ecke auf eine andere Ecke ziehen, werden diese zusammengefasst "
-"und die Kante dazwischen wird entfernt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:457
-msgid "But you cannot have a Poly-shape with less than 3 sides.\n"
-msgstr ""
-"Aber ein Vieleck oder eine Vielfachllinie mit weniger als drei Seiten ist "
-"nicht möglich.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:458
-msgid ""
-"To use the <Profile> command you first need to define Elevations on your "
-"layout.\n"
-msgstr ""
-"Um den Befehl <Höhenprofil> nutzen zu können, müssen Sie zuerst Höhen auf "
-"Ihrem Gleisplan festlegen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:459
-msgid "In this example we'll use the Elevations defined in the last example.\n"
-msgstr "In dieser Demo werden wird die Höhen aus der letzten Demo benutzen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:460
-msgid "You can move or resize the Profile dialog now if you want.\n"
-msgstr "Das Höhenprofil Fenster kann nun vergrößert werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:461
-msgid ""
-"To show the Profile you need to select a Path on the tracks of your layout.\n"
-msgstr ""
-"Um das Höhenprofil anzeigen zu können muss eine Strecke in Ihrem Plan "
-"ausgewählt werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:462
-msgid "Select a Defined Elevation point (marked by Gold dots).\n"
-msgstr "Eine beliebigen Punkt festgelegen, um das Höhenprofil zu beginnen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:463
-msgid "We will start with the right end of the siding.\n"
-msgstr "Wir starten am rechten Ende des Abstellgleises.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:464
-msgid ""
-"The second Point is at the left end of the siding. The Path will be drawn "
-"in Purple on the layout.\n"
-msgstr ""
-"Der zweite Punkt ist das linke Ende ds Nebengleises. Der Pfad wird in Purpur "
-"auf dem Gleisplan dargestellt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:465
-msgid "Now select the end of one of the Branches\n"
-msgstr "Jetzt wählen Sie das Ende eines der Abzweige aus.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:466
-msgid ""
-"The Profile line is drawn in Red. This indicates that there some turnouts "
-"on that section of the Path which have more than 2 connections.\n"
-msgstr ""
-"Das Höhenprofil wird in rot gezeichnet. Das bedeutet, dass es einige Weichen "
-"auf diesem Abschnitt des Pfads gibt, die nmehr als zwei Verbindungen haben.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:467
-msgid ""
-"The grade on this part of the Path is the average and may be affected by "
-"other Elevations, such the end of the lower branch.\n"
-msgstr ""
-"Die Steigung auf diesem Teil des Pfads ist ein Durchschnittswert und knn "
-"durch andere Höhen wie dem Ende des unteren Abzweigs beeinflusst werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:468
-msgid "Now try to select the End-Point of the other branch.\n"
-msgstr "Versuchen Sie jetzt, den Endpunkt des anderen Abzweiges auszuwählen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:469
-msgid ""
-"You will get an error message because there is no route to one of the ends "
-"of the existing Path.\n"
-msgstr ""
-"Sie erhalten eine Fehlermeldung, da es keine Route zu einem der Endpunkte "
-"des existieren Pfades gibt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:470
-msgid ""
-"In this case remove the last part of the Path by clicking on current end of "
-"the Path and reselect the End-Point.\n"
-msgstr ""
-"In diesem Fall entfernen Sie den letzten Teil des Pfads indem Sie auf das "
-"das gegenwärtige Ende des Pfades klicken und den Endpunkt erneut festlegen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:471
-msgid "Notice that the Grade has changed on the Profile.\n"
-msgstr "Beachten Sie, dass sich die Steigung im Höhenprofil geändert hat.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:472
-msgid ""
-"You can Ignore End-Points on the Path by using Shift-Right-Click to display "
-"the Profile Options popup menu and chosing Ignore.\n"
-msgstr ""
-"Sie können Endpunkte auf dem Pfad ignorieren. Dazu halten Sie die "
-"Umschalttaste während Sie mit dem rechten Mausknopf klicjken. In den "
-"Höhenprofil-Optionen wählen Sie ignorieren.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:473
-msgid ""
-"Note: We can't show the menu in demo mode but we will show the effect of a "
-"Shift Right Click and selecting ignore. We will be Ignoring the End-Point "
-"of the Turnout that is not on the Path.\n"
-msgstr ""
-"Achtung: wir können das Menu im Demo-Modus nicht zeigen, zeigen aber den "
-"Effekt daraus. Wir werden den Endpunkt der Weiche, der nicht auf dem Pfad "
-"liegt, ignorieren.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:474
-msgid "Notice that part of the Profile line is redrawn in Blue.\n"
-msgstr ""
-"Beachten Sie, dass ein Teil des Höhenprofils in blauer Farbe neu gezeichnet "
-"wurde.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:475
-msgid ""
-"Also, the Computed Elevations and Grade marker on the right side of the "
-"layout have been updated.\n"
-msgstr ""
-"Außerdem wurden die berechneten Höhen und die Steigungsmarkierung auf der "
-"rechten Seite des Gleisplans aktualisiert.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:476
-msgid ""
-"You can set additional Defined Elevation points using the Profile Options "
-"popup menu. These points are added to the Profile if they are on the Path.\n"
-msgstr ""
-"Sie können weitere Punkte mit festgelegter Höhe zufügen, indem Sie das "
-"Optionsmenu für Höhenprofile benutzen. Diese Punkte werden zu dem "
-"Höhenprofil zugefügt, wenn Sie auf dem Pfad liegen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:477
-msgid ""
-"We do this by Shift Right Click to display the Profile Options popup menu "
-"and selecting Define.\n"
-msgstr ""
-"Dies geschieht durch durch Umschalt-Rechtsklick um das Optionsmenu für "
-"Höhenprofile zu erhalten uns auswählen von Festlegen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:478
-msgid ""
-"We've just added a Defined Elevation point to the middle of the lower "
-"branch. Notice the addition on the Profile dialog.\n"
-msgstr ""
-"Wir haben gerade eine festgelegte Höhe in der Mitte des unteren Abzweigs "
-"erstellt. Beachten Sie die Ergänzung im Höhenprofil.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:479
-msgid ""
-"For the siding we defined a Station name but it's not on the Path, since the "
-"Path takes the shortest distance between points.\n"
-msgstr ""
-"Für das Ausweichgleis haben einen einen Bahnhofsnamen vergeben. Dieser ist "
-"nicht auf dem Pfad, da ein Pfad immer den kürzesten Weg zwischen Punkten "
-"nutzt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:480
-msgid ""
-"We can Ignore one of the End-Points on a Turnout to force the Path to take "
-"the other route.\n"
-msgstr ""
-"Wir können durch Ignorieren eines des der Endpunkte an einer Weiche "
-"erzwingen, dass der Pfad die andere Route nimmt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:481
-msgid ""
-"Again we use Shift-Right-Click to display the Profile Options menu and "
-"select ignore.\n"
-msgstr ""
-"Wieder benutzen wir Umschalt-Rechtsklick um das Optionsmenu für das "
-"Höhenprofil anzuzeigen und wählen ignorieren.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:482
-msgid "Now remove the First section of the Path,\n"
-msgstr "Jetzt entfernen Sie den ersten Teil des Pfads\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:483
-msgid "and reselect it.\n"
-msgstr "und wählen ihn wieder.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:484
-msgid ""
-"Now the Path goes through the Station End-Point and the name appears on the "
-"Profile dialog.\n"
-msgstr ""
-"Jetzt führt der Pfad durch den Endpunkt am Bahnhof und der Name erscheint im "
-"Höhenprofil.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:485
-msgid "Now we need to increase the separation where the tracks cross.\n"
-msgstr ""
-"Jetzt müssen wir den Höhenunterschied an der Stelle vergrössern, an der die "
-"Gleise sich kreuzen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:486
-msgid ""
-"The two Elevations you see here are Computed Elevations which means "
-"XTrackCAD dynamically computes the Elevation based on the Elevations of "
-"connecting tracks.\n"
-msgstr ""
-"Die beiden Höhen die Sie hier sehen, sind berechnete Werte. Das bedeutet, "
-"dass XTrackCAD die Höhe auf Grundlage verbundener Gleise berechnet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:487
-msgid ""
-"First make the lower End-Point a Defined Elevation point using Shift-Right-"
-"Click and the Profile Options menu. You will see the End-Point marked by a "
-"Gold dot and a new line is added to the Profile dialog.\n"
-msgstr ""
-"Markieren Sie zuerst den unteren Endpunkt als festgelegt. Dies geschieht "
-"durch Umschalt-Rechtsklick und das Optionsmenu für das Höhenprofil. Sie "
-"werden sehen, dass der Endpunkt jetzt mit einem goldenen Punkt markiert ist. "
-"Dem Höhenprofil wurde eine neue Linie zugefügt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:488
-msgid "Now, drag the point on the Profile Dialog to change the Elevation.\n"
-msgstr "Jetzt ziehen Sie den Punkt im Höhenprofil um die Höhe zu ändern.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:489
-msgid ""
-"Note the grade on each side of the point will be displayed at the bottom of "
-"the Profile dialog.\n"
-msgstr ""
-"Beachten Sie, dass die Steigung auf beiden Seiten des Punktes im "
-"Dialogfenster unten angezeigt wird.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:490
-msgid ""
-"After we release the Profile is updated to show the new Elevation and "
-"Grade.\n"
-msgstr ""
-"Nach dem Loslassen des Mausknopfes wird das Höhenprofil aktualisiert um die "
-"neue Höhe und Steigung anzuzeigen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:491
-msgid "The <Rescale> command will change the size of the selected objects.\n"
-msgstr "Der Befehl <Skalieren>verändert die Größe der ausgwählten Objekte.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:492
-msgid "First we will try rescaling by ratio.\n"
-msgstr "Zuerst skalieren wir über das Verhältnis.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:493
-msgid "We are going to make everything 150% bigger.\n"
-msgstr "Wir vergrößern alles auf 150 Prozent.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:494
-msgid "Note the track gauge did not change.\n"
-msgstr "Beachten Sie, dass die Spurweite nicht geändert wurde.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:495
-msgid "Let's try that again.\n"
-msgstr "Lassen Sie uns das nochmals versuchen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:496
-msgid "Now we are going to convert from one scale to another.\n"
-msgstr "Jetzt ändern wir von einem Maßstab zu einem anderen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:497
-msgid "We will convert everything from N scale to HO scale...\n"
-msgstr "Wir werden alles von Spur N nach Spur H0 umwandeln...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:498
-msgid "and change the track gauge as well.\n"
-msgstr "und die Spurweite gleichzeitig ändern.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:499
-msgid "Note that the Title of the turnout did not change.\n"
-msgstr "Beachten Sie, dass der Titel der Weiche nicht geändert wurde.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:500
-msgid ""
-"The <Rotate> command will pivot the Selected objects. First Click on the "
-"pivot point and then drag to Rotate the objects.\n"
-msgstr ""
-"Der Befehl <Drehen> ermöglicht das Rotieren von ausgewählten Objekten. "
-"Klicken Sie zuerst auf das Zentrum der Drehbewegung und ziehen dann, um die "
-"Objekte zu drehen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:501
-msgid ""
-"In this example we will rotate the selected structure about it's center.\n"
-msgstr ""
-"In diesem Beispiel werden wir das Gebäude um seinen Mittelpunkt drehen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:502
-msgid ""
-"The <Rotate> command will restrict the rotation to increments of 15° if you "
-"hold down the Control key.\n"
-msgstr ""
-"Der Drehwinkel wird auf Vielfache von 15° begrenzt, wenn Sie die Steuerungs-"
-"Taste gedrückt halten.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:503
-msgid ""
-"Shift-Right-Click will display a popup-menu that you can use to rotate by "
-"fixed amount (15°, 30°, 45°, 90° or 180°). The demonstration cannot show "
-"the popup-menu but it can show the effects.\n"
-msgstr ""
-"Umschalten-Rechts-Klick öffnet ein Auswahlmenu, das Sie nutzen können um "
-"vorgegebene Werte für die Drehung (15°, 30°, 45°, 90° or 180°) auszuwählen. "
-"Diese Demonstration kann das Auswahlmenu nicht darstellen, aber sie zeigt "
-"den Effekt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:504
-msgid "Here we will rotate by 90° clockwise (CW).\n"
-msgstr "Jetzt drehen wir um 90° im Uhrzeigersinn.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:505
-msgid ""
-"Another option of the <Rotate> command popup-menu is to Align the Selected "
-"object with some other object.\n"
-msgstr ""
-"Der Befehl <Rotate> bietet auch die Möglichkeit, die ausgewählten Objekt an "
-"anderen Objekten auszurichten.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:506
-msgid ""
-"First we will click on one line of the Selected object. The angle of this "
-"part of the object will be Aligned.\n"
-msgstr ""
-"Zuerst klicken wir auf eine Linie des asgewählten Objektes. Diese Linie wird "
-"als Grundllinie für die Ausrichtung benutzt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:507
-msgid ""
-"Next, we click on an Unselected object. The Selected structure will be "
-"rotated so that the line we clicked on will be parallel to the straight "
-"track.\n"
-msgstr ""
-"Dann klicken wir auf ein Objekt, das nicht ausgewählt ist. Das ausgewählte "
-"Gebäude wird so gedreht, dass die gewählte Linie parallel zu dem geraden "
-"Gleis ist.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:508
-msgid ""
-"If we drag the mouse across the track, we can flip the structure by 180°. "
-"This is similar to how we place turnouts.\n"
-msgstr ""
-"Wenn wir die Maus auf die andere Seite des Gleises ziehen, wird das Gebäude "
-"um 180° gedreht. Dies ist vergleichbar zu dem Setzen von Weichen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:509
-msgid ""
-"We can also align to curved shapes. The Selected object will be rotated to "
-"be parallel to the curve under the cursor.\n"
-msgstr ""
-"Wir können auch an gebogenen Elementen ausrichten. Das ausgewählte Objekt "
-"wird so gedreht, dass es parallel dem Punkt der Kurve ist, der sich unter "
-"dem Mauszeiger befindet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:510
-msgid ""
-"As we drag along the curved track the Selected object rotates to follow the "
-"curve.\n"
-msgstr ""
-"Während wir entlang des gebogenen Gleises ziehen, dreht sich das ausgewählte "
-"Objekt um der Kurve zu folgen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:511
-msgid "Again, if we drag across the track we can flip the stucture.\n"
-msgstr ""
-"Auch hier können wir das Gebäude spiegeln, indem wir auf die andere Seite "
-"ziehen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:512
-msgid "We can also Align to another Structure or any object.\n"
-msgstr ""
-"Wir können auch an anderen Gebäuden oder jedem anderen Objekt ausrichten.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:513
-msgid ""
-"The <Ruler> command draws a Ruler on the layout you can use to measure "
-"distances.\n"
-msgstr ""
-"Mit dem Befehl <Lineal> wird ein Lineal auf den Gleisplan gezeichnet. Dieses "
-"kann genutzt werden, um Abstände zu messen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:514
-msgid "If you press the <Ruler> command again the Ruler is removed.\n"
-msgstr ""
-"Wenn Sie den Befehl <Lineal> nochmals Anklicken, wird das Lineal wieder "
-"entfernt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:515
-msgid "But you can place it somewhere else.\n"
-msgstr "Aber Sie können dieses auch an eine andere Stelle versetzen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:516
-msgid "The <Select> command is used to select tracks.\n"
-msgstr "Der Befehl <Auswahl> wird benutzt, um Objekte auszuwählen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:517
-msgid "Selected tracks can be moved or rotated during the <Select> command.\n"
-msgstr "Ausgewählte Gleise können verschoben und gedreht werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:518
-msgid "Selected tracks can also be deleted, hidden, listed and exported.\n"
-msgstr ""
-"Ausgewählte Gleise können auch gelöscht, verborgen, aufgelistet und "
-"exportiert werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:519
-msgid "A single Left-Click selects tracks.\n"
-msgstr "Ein einfacher Klick mit der linken Maustaste wählt ein Gleis aus.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:520
-msgid "Selecting a selected track de-selects it.\n"
-msgstr ""
-"Durch wiederholtes Klicken wird die Auswahl des Gleises wieder aufgehoben.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:521
-msgid ""
-"Shift-Left-Click on a track will select all unselected tracks connected to "
-"the track. Selection stops at a previously selected track.\n"
-msgstr ""
-"Umschalt-Links-Klick auf ein Gleis wählt alle Gleise aus, die mit diesem "
-"verbunden sind. Der Vorgang bricht ab, sobald ein Gleis bereits ausgewählt "
-"ist.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:522
-msgid "Be careful with this because its easy to select all tracks this way.\n"
-msgstr ""
-"Seien Sie vorsichtig, denn es ist sehr einfach unbeabsichtigt alle Gleise "
-"auszuwählen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:523
-msgid "The <esc> key will deselect all objects.\n"
-msgstr "Mit der Taste <Esc> werden alle Objekte abgewählt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:524
-msgid "Left-Drag is used to select all objects within an area.\n"
-msgstr ""
-"Ziehen mit gedrückter linker Maustaste wählt alle Objekt in einem Bereich "
-"aus.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:525
-msgid "And Right-Drag de-selects all tracks within an area.\n"
-msgstr ""
-"Und Ziehen mit rechter gedrückter Maustaste entfernt alle Objekte in einem "
-"Bereich aus der Auswahl.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:526
-msgid "Shift-Left-Drag is used to move selected tracks.\n"
-msgstr ""
-"Links-Ziehen bei gedrückter Umschalt-Taste wird benutzt um die ausgewählten "
-"Gleise zu verschieben.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:527
-msgid ""
-"When you move selected tracks that are connected to unselected tracks, the "
-"tracks will be disconnected. These points are marked by a Red cross on the "
-"layout.\n"
-msgstr ""
-"Wenn Sie Gleise verschieben, die mit Gleisen verbunden sind, die nicht "
-"ausgewählt sind, wird die Verbindung gelöst. Diese Punkte werden durch ein "
-"rotes Kreuz auf dem Gleisplan markiert.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:528
-msgid ""
-"Drawing the tracks while moving can be very time-consuming. We had just "
-"used the \"Normal\" method of drawing tracks.\n"
-msgstr ""
-"Das Zeichnen der Gleise während des Verschieben kann die Bewegung sehr "
-"verzögern. Gerade haben wir die \"normale\" Methode des Zeichnen benutzt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:529
-msgid ""
-"The Command Options dialog (from the Options menu) contains a Radio button "
-"group which you can use to pick the drawing method.\n"
-msgstr ""
-"Im Dialogfenster Befehlsoptionen (aus dem Einstellungen Menu) können Sie die "
-"Zeichenmethode ändern.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:530
-msgid ""
-"You can also popup the Command Options Menu by pressing Shift-Right-Click "
-"which includes options for setting the drawing method. These options are "
-"also available for the Move and Rotate Command Options Menu.\n"
-msgstr ""
-"Sie können das Befehlsoptionen Menu auch aufrufen, indem sie Umschalt-Rechts-"
-"Klick betätigen. Diese Optionen sind auch für die Befehle Verschieben und "
-"Drehen vorhnden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:531
-msgid ""
-"The next method is \"Simple\" draws. Here tracks are drawn using one line, "
-"no End-Points are drawn, lines are not drawn and structures are drawn using "
-"a box outline.\n"
-msgstr ""
-"Die nächste Methode ist \"einfaches\" Zeichnen. Hier werden Gleise durch "
-"eine Linie dargestellt, Endpunkte und Linien werden nicht gezeichnet. "
-"Gebäude werden während der Operation durch ein Rechteck ersetzt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:532
-msgid ""
-"Note: you can move the Command Options dialog if it obscures the main "
-"window.\n"
-msgstr ""
-"Beachten Sie, dass Sie die das Dialogfenster Befehlsoptionen verschieben "
-"können, wenn es das Hauptfenster verdeckt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:533
-msgid ""
-"The next method is to just draw the End-Points of the selected tracks.\n"
-msgstr ""
-"Die nächste Methode ist das einfache Zeichnen der Endpunkte der ausgewählten "
-"Gleise.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:534
-msgid ""
-"Unconnected End-Points are indicated by Red crosses, and connected End-"
-"Points are indicated by Red lines.\n"
-msgstr ""
-"Nicht verbundene Endpunkte werden durch ein rotes Kreuz markiert, verbundene "
-"Endpunkte durch eine rote Linie.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:535
-msgid "Now we will go back to using the Normal method again.\n"
-msgstr "Jetzt gehen wir zu der normalen Methode zurück.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:536
-msgid ""
-"Shift-Right-Drag rotates the selected tracks about the pivot point (which is "
-"where you started the drag)\n"
-msgstr ""
-"Umschalt-Rechts-Ziehen dreht die ausgewählten Gleise um das Zentrum, der "
-"Punkt an dem Sie das Ziehen begonnen haben.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:537
-msgid ""
-"Next we select the <Join Tracks> command. You can use Shift-Left-Click to "
-"move an End-Point of a selected track to join with an unselected track.\n"
-msgstr ""
-"Jetzt wählen wir den Befehl <Verbinde Gleise>. Mit Umschalt-Links-Klick "
-"können Sie einen Endpunkt von ausgewählten Gleisen mit einem nicht "
-"ausgewählten Gleis verbinden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:538
-msgid ""
-"Note: because of differing display resolutions the next mouse click may not "
-"be positioned correctly in this demo and the Move-To-Join operation may not "
-"be demonstrated.\n"
-msgstr ""
-"Beachten Sie dass der Befehl \"Verbinden durch Bewegen\" in der Demo nicht "
-"gezeigt werden kann.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:539
-msgid "The <Split> command is used to split and disconnect tracks.\n"
-msgstr ""
-"Der Befehl <Trennen> wird benutzt, um Gleise zu zerteilen und voneinander zu "
-"trennen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:540
-msgid "Simply select the spot on the track you want to split.\n"
-msgstr ""
-"Wählen Sie einfach die Stelle des Gleises aus, an der dieses getrennt werden "
-"soll.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:541
-msgid "You cannot split turnouts (unless you hold down the Shift key).\n"
-msgstr ""
-"Weichen können nur getrennt werden, wenn Sie die Umschalttaste drücken.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:542
-msgid ""
-"If you split at spot that is already an End-Point between two tracks, or "
-"split twice at the same spot, the track is disconnected.\n"
-msgstr ""
-"Wenn Sie an einem vorhandenen Endpunkt zerteilen oder wenn die an einer "
-"Stelle doppelt zerteilen werden die Gleise getrennt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:543
-msgid "The <Tunnel> command marks selected tracks as hidden.\n"
-msgstr "Mit dem Befehl <Tunnel> verbergen Sie die ausgewählten Gleise.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:544
-msgid ""
-"A tunnel portal is drawn at the boundary between hidden and normal track.\n"
-msgstr ""
-"Ein Tunnelportal wird am Übergang zwischen sichtbarem und verborgenem Gleis "
-"gezeichnet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:545
-msgid ""
-"How the hidden tracks are drawn (solid, dashed or invisible) is controlled "
-"by the Draw EndPts radio button group on the Setup dialog.\n"
-msgstr ""
-"Die Darstellung des verborgenen Gleises (durchgezogen, gestrichelt oder "
-"unsichtbar) kann in den Einstellungen festgelegt werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:546
-msgid ""
-"To 'un-hide' a track just Select it again and click the Tunnel button.\n"
-msgstr ""
-"Um die Gleise wieder sichtbar zu machen, wählen Sie diese aus und "
-"wiederholen den Befehl <Tunnel>.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:547
-msgid ""
-"Straight tracks are created by selecting the first End-Point of the track.\n"
-msgstr ""
-"Gerade Gleise werden erstellt indem der erste Endpunkt des Gleises gewählt "
-"wird.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:548
-msgid "Then the other End-Point is dragged to its final postion.\n"
-msgstr ""
-"Dann wird der zweite Endpunkkt durch Ziehen an die richtige Position "
-"gebracht.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:549
-msgid "The left mouse button is released at the final end postion.\n"
-msgstr "An diesem Punkt wird der linke Mausknopf los gelassen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:550
-msgid ""
-"Table Edges are used to mark the edges of the layout, either for aisles or "
-"room walls.\n"
-msgstr ""
-"Tischkanten werden benutzt um die Ränder des Gleisplans, entweder für "
-"Zugänge oder Wände benutzt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:551
-msgid "A Table Edge is attracted to the ends of other Table Edges.\n"
-msgstr ""
-"Eine Tischlante wird von den Enden anderer Tischkantenlinien angezogen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:552
-msgid "Table Edges can be modified by dragging on their ends.\n"
-msgstr "Tischkanten können durch Ziehen an den Enden geändert werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:553
-msgid ""
-"If you hold down the Control key while dragging then the Table Edge will be "
-"attracted to other objects.\n"
-msgstr ""
-"Wenn Sie die Strg-Taste während des Ziehens gedrückt halten, wird die "
-"Tischkante von anderen Objekten angezogen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:554
-msgid ""
-"These examples shows some of the various Turnout Designer windows. Each "
-"window defines a different type of turnout.\n"
-msgstr ""
-"Diese Beispiele zeigen einige der Dialogfenster des Weichendesigner. Jeder "
-"Dialog wird für einen anderen Typ von Weichen benutzt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:555
-msgid ""
-"In each window there are a number of parameters to fill in and one or two "
-"description lines.\n"
-msgstr ""
-"In jedem Dialog müssen einige Parameter und eine oder zwei Zeilen "
-"Beschreibungen eingetragen werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:556
-msgid "You can print the design to check the dimensions before saving them.\n"
-msgstr ""
-"Sie können den Entwurf vor dem Speichen ausdrucken. Damit können Sie zur "
-"Kontrolle die Abmessungen prüfen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:557
-msgid "This is the regular turnout.\n"
-msgstr "Dies ist eine normale Weiche.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:558
-msgid ""
-"In addition to the dimensions, you also enter the Title (Manufacturer, "
-"Description and Part Number). For Turnouts with Left and Right hand "
-"versions there are separate Descriptions and Part Numbers.\n"
-msgstr ""
-"Neben den Abmessungen müssen auch die Beschreibung der Weiche, d.h. "
-"Hersteller, Beschreibung und Teilenummer, eingegeben werden. Für Weichen mit "
-"rechten und linken Abzweigen werden die Beschreibung und die Teilenummern "
-"getrennt erfasst.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:559
-msgid ""
-"Some Turnouts and Sectional track are pre-mounted on roadbed. For these "
-"parts you can specify the width of the roadbed, the thickness of the lines "
-"drawn for the edge of the roadbed and the color.\n"
-msgstr ""
-"Einige Weichen und Festgleise besitzen ein festes Gleisbett. Für diese Teile "
-"können Sie die Breite des Gleisbetts und Dicke und Farbe der "
-"Begrenzungslinien festlegen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:560
-msgid "The double slip switch is described by only a few parameters.\n"
-msgstr ""
-"Für eine doppelte Kreuzungsweiche wird durch wenige Daten festgelegt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:561
-msgid "The double crossover only needs length and track separation.\n"
-msgstr ""
-"Eine doppelter Gleiswechsel erfordert nur die Gleislänge und den "
-"Gleisabstand.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:562
-msgid ""
-"Pressing the turnout button displays the Turnout Selection window to let you "
-"choose a turnout to place.\n"
-msgstr ""
-"Durch Drücken des Knopfes <Weiche> wird das Weichenauswahl-Fenster geöffnet. "
-"Hier können Sie eine Weiche auswählen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:563
-msgid ""
-"Note that once you start to place the turnout on the Main window the Turnout "
-"Selection window disappears. This feature is enabled by the Hide toggle "
-"button on the dialog.\n"
-msgstr ""
-"Beachten Sie, dass das Weichenauswahl-Fenster verschwindet sobald Sie mit "
-"dem Legen der Weiche beginnen. Diese Eigenschaft wird durch den 'Verbergen' "
-"Schalter des Dialogs eingeschaltet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:564
-msgid ""
-"You can place the turnout on a arbitrary position on the layout. Left-drag "
-"the turnout into place...\n"
-msgstr ""
-"Sie können die Weiche an eine beliebigen Position auf dem Gleisplan legen. "
-"Ziehen Sie die Weiche an den richtigen Platz...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:565
-msgid "Then you can rotate the turnout by Right dragging.\n"
-msgstr ""
-"Dann können Sie die Weiche durch Ziehen mit der rechten Maustaste drehen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:566
-msgid ""
-"You can also use Shift-Right-Click to display a popup menu that lets you "
-"rotate the Turnout by specific angles.\n"
-msgstr ""
-"Sie können mit Umschalten-Rechts-Klick ein Fenster öffnen, das das Drehen um "
-"feste Winkel ermöglicht.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:567
-msgid ""
-"When you are satisfied with the position and orientation of the turnout "
-"press Space bar or the Return key on the keyboard to finish placing the "
-"turnout.\n"
-msgstr ""
-"Wenn Sie mit der Position und der Ausrichtung der Weiche zufrieden sind, "
-"drücken Sie Leertaste oder die Eingabetaste der Tastatur um den Befehl "
-"abzuschliessen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:568
-msgid ""
-"Pressing the Ok button on the Turnout dialog will end the <Turnout> command "
-"as well as placing the turnout.\n"
-msgstr ""
-"Auch durch Drücken der OK-Taste im Dialogfenster können Sie den Befehl "
-"beenden und die Weiche festlegen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:569
-msgid ""
-"If you drag along an existing track the new turnout will be attached to the "
-"track.\n"
-msgstr ""
-"Wenn Sie die Weiche auf existierendes Gleis ziehen, so wird sie mit dem "
-"Gleis verbunden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:570
-msgid ""
-"Note that the status line tells you the number of End-Points that would be "
-"connected and, the maximum displacement of the End-Points. This will be "
-"useful when building complex track, as we will see later.\n"
-msgstr ""
-"Beachten Sie, dass in der Statuszeile angezeigt wird. wieviele Endpunkte der "
-"Weiche verbunden würden und wie groß der maximale Abstand zu den Endpunkten "
-"ist. Wie wir später sehen werden ist diese Information hilfreich, um "
-"komplexe Gleiskonfigurationen zu erstellen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:571
-msgid ""
-"By moving the cursor from one side to the other of the track centerline you "
-"can flip the turnout 180°.\n"
-msgstr ""
-"Durch Bewegen des Mauszeiger von einer Seite des Gleises auf die andere wird "
-"die Weiche um 180° gedreht.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:572
-msgid ""
-"If you try to drag across another turnout the new turnout will placed at the "
-"nearest End-Point of the existing turnout.\n"
-msgstr ""
-"Wenn Sie die neue Weiche über eine existierende Weiche ziehen, wird die neue "
-"Weiche mit dem nächstgelegenen Endpunkt der vorhandenen Weiche verbunden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:573
-msgid ""
-"When you press Space or Return while the turnout is on a track, the track "
-"will be split and the new turnout attached automatically.\n"
-msgstr ""
-"Wenn Sie die Leer- oder die Eingabetaste drücken während die Weiche auf "
-"einem Gleis ist, wird dieses Gleis getrennt und die Weiche wird automatisch "
-"verbunden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:574
-msgid "Pressing Close ends the <Turnout> command.\n"
-msgstr "Durch Drücken von <Schliessen> wird der Befehl <Weiche> beendet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:575
-msgid "Sometimes it's useful to modify turnouts triming one of the ends.\n"
-msgstr ""
-"Manchmal ist es sinnvoll, eine Weich durch Kürzen der Enden anzupassen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:576
-msgid "We use the <Split> command for this.\n"
-msgstr "Dafür benutzen wir den Befehl <Trennen>.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:577
-msgid "Normally, if we try to Split a turnout we get an error message.\n"
-msgstr ""
-"Normalerweise bekommen wir eine Fehlermeldung, wenn wir versuchen eine "
-"Weiche zu trennen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:578
-msgid "Hold down the Shift key and try again.\n"
-msgstr ""
-"Drücken und halten Sie die Umschalten-Taste und versuchen es nochmals.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:579
-msgid ""
-"The end of the turnout has been replaced by a piece of straight flex track "
-"which we can modify.\n"
-msgstr ""
-"Das Ende der Weiche wurde durch ein Stück gereden Gleises ersetzt. Dieses "
-"können wir verändern.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:580
-msgid "We can try splitting the diverging leg.\n"
-msgstr "Wir können versuchen, das abzweigende Gleis zu trennen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:581
-msgid ""
-"Notice that the tail of the diverging leg has been changed to a curved "
-"track...\n"
-msgstr ""
-"Beachten Sie, dass das abzweigende Gleis in ein gebogenes Gleis umgewandelt "
-"wurde...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:582
-msgid "and a straight track.\n"
-msgstr "und ein gerades Gleis.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:583
-msgid ""
-"This example show how to layout a yard using the <Turnout> and <Parallel> "
-"commands.\n"
-msgstr ""
-"Dieses Beispiel zeigt wie mit den Befehlen <Weiche> und <Paralleles Gleis> "
-"eine Gleisharfe erstellt werden kann.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:584
-msgid ""
-"You can resize and move the Turnout Selection dialog if it obscures the "
-"other windows.\n"
-msgstr ""
-"Sie können den Weichenauswahl-Dialog verkleinern und verschieben, wenn er "
-"andere Fensterbereiche verdeckt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:585
-msgid "First we place a turnout on the main line.\n"
-msgstr "Zuerst legen wir eine Weiche auf das Hauptgleis.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:586
-msgid "Next extend the turnout with the <Modify> command.\n"
-msgstr "Dann erweitern wir die Weiche mit dem Befehl <Verändern>.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:587
-msgid ""
-"Now create a track parallel to the main line. Make sure the separation is "
-"reasonable for your scale.\n"
-msgstr ""
-"Jetzt erstellen Sie ein Gleis, das parallel zum Hauptgleis liegt. Stellen "
-"Sie sicher, dass der Gleisabstand für Ihren Maßstab geeignet ist.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:588
-msgid "And place a turnout to connect the new track.\n"
-msgstr "Und legen eine Weiche, um das neue Gleis anzuschliessen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:589
-msgid "We'll zoom in here to see what's going on.\n"
-msgstr "Durch Vergrößern können wir sehen, was passiert.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:590
-msgid ""
-"Notice how we control which way the turnout is facing by moving the mouse "
-"across the center line of the track.\n"
-msgstr ""
-"Beachten Sie wie wir die Ausrichtung der Weiche beeinflussen indem wir die "
-"Maus über die Mittellinie des Gleise bewegen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:591
-msgid ""
-"The Status bar displays the number of auto-connections that will be made and "
-"the maximum offset.\n"
-msgstr ""
-"In der Statuszeile wird angezeigt, wieviele Endpunkte verbunden werden und "
-"wie große der maximale Abstand ist.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:592
-msgid ""
-"XTrackCAD adjusts the turnout position for the best fit to minimize any "
-"connection offset\n"
-msgstr ""
-"XTrackCAD verändert die Weichenposition um die beste Einpassung zu "
-"erreichen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:593
-msgid "Note that placing the turnout splits the parallel track.\n"
-msgstr ""
-"Beachten Sie, dass durch die Weiche das parallele Gleis getrennt wurde.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:594
-msgid "We have to delete the leftover piece by Selecting and Deleting it.\n"
-msgstr "Dieses Reststück müssen wir auswählen und löschen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:595
-msgid "Repeat the process for the other tracks in the yard.\n"
-msgstr "Wiederholen Sie diesen Ablauf für die anderen Gleise der Gleisharfe.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:596
-msgid "For the last track we will join with a curve instead of a turnout.\n"
-msgstr ""
-"Beim letzten Gleis benutzen wir einen Gleisbogen anstelle einer Weiche.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:597
-msgid "We can indicate the mainline by making the rails wider.\n"
-msgstr ""
-"WIr können die Hauptstrecke hervorheben, in dem wir die Gleise dicker "
-"zeichnen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:598
-msgid "First we select the mainline tracks...\n"
-msgstr "Zuerst wählen wir die Gleise der Hauptstrecke aus...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:599
-msgid "And then select Medium Tracks from the Edit menu.\n"
-msgstr "Und wählen dann mittlere Stärke aus dem Bearbeiten Menu aus.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:600
-msgid "We can make the rail thicker by selecting Thick Tracks.\n"
-msgstr ""
-"Wir können das Gleis durch die Auswahl Breite Linie dicker darstellen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:601
-msgid ""
-"Turntables are created by specifying the radius in a dialog box on the "
-"Status Bar. The radius in the dialog can be changed before proceeding.\n"
-msgstr ""
-"Beim Erstellen von Drehscheiben muss der Radius in einem Dialog in der "
-"Statuszeile eingegeben werden. Der Radius muss vor den nächsten Schritten "
-"geändert werden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:602
-msgid "Then the turntable is dragged to its final location.\n"
-msgstr "Dann wird die Drehscheibe an die endgültige Position geschoben.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:603
-msgid "Introduction"
-msgstr "Einführung"
-
-#: ../../../../build/work/app/i18n/custmsg.h:604
-msgid "Mouse Actions"
-msgstr "Mausaktionen"
-
-#: ../../../../build/work/app/i18n/custmsg.h:605
-msgid "Dialogs"
-msgstr "Dialoge"
-
-#: ../../../../build/work/app/i18n/custmsg.h:606
-msgid "Moving about"
-msgstr "Zoom & Pan"
-
-#: ../../../../build/work/app/i18n/custmsg.h:607
-msgid "Describe and Select"
-msgstr "Eigenschaften und Auswählen"
-
-#: ../../../../build/work/app/i18n/custmsg.h:608
-msgid "Describe"
-msgstr "Beschreibe"
-
-#: ../../../../build/work/app/i18n/custmsg.h:610
-msgid "Simple tracks"
-msgstr "Einfache Gleise"
-
-#: ../../../../build/work/app/i18n/custmsg.h:611
-msgid "Straight tracks"
-msgstr "Gleisgeraden"
-
-#: ../../../../build/work/app/i18n/custmsg.h:612
-msgid "Curved tracks"
-msgstr "Gleisbögen"
-
-#: ../../../../build/work/app/i18n/custmsg.h:613
-msgid "Circles"
-msgstr "Kreise"
-
-#: ../../../../build/work/app/i18n/custmsg.h:614
-msgid "Turntables"
-msgstr "Drehscheiben"
-
-#: ../../../../build/work/app/i18n/custmsg.h:615
-msgid "Modifying tracks"
-msgstr "Gleise bearbeiten"
-
-#: ../../../../build/work/app/i18n/custmsg.h:616
-msgid "Modifying end points "
-msgstr "Endpunkte ändern "
-
-#: ../../../../build/work/app/i18n/custmsg.h:617
-msgid "Extending"
-msgstr "Erweitern"
-
-#: ../../../../build/work/app/i18n/custmsg.h:618
-msgid "Medium and Thick Tracks"
-msgstr "Mittlere und dicke Gleise"
-
-#: ../../../../build/work/app/i18n/custmsg.h:619
-msgid "Joining Tracks"
-msgstr "Gleise verbinden"
-
-#: ../../../../build/work/app/i18n/custmsg.h:620
-msgid "Straight to straight"
-msgstr "Gerade zu Gerade"
-
-#: ../../../../build/work/app/i18n/custmsg.h:621
-msgid "Curve to straight"
-msgstr "Bogen zu Gerade"
-
-#: ../../../../build/work/app/i18n/custmsg.h:622
-msgid "Circle to circle"
-msgstr "Kreis zu Kreis"
-
-#: ../../../../build/work/app/i18n/custmsg.h:623
-msgid "Joining to turntables"
-msgstr "Drehscheiben verbinden"
-
-#: ../../../../build/work/app/i18n/custmsg.h:624
-msgid "Easements"
-msgstr "Übergangsbögen"
-
-#: ../../../../build/work/app/i18n/custmsg.h:625
-msgid "Abutting tracks"
-msgstr "Angrenzende Gleise"
-
-#: ../../../../build/work/app/i18n/custmsg.h:626
-msgid "Move to Join"
-msgstr "Verbinden durch verschieben"
-
-#: ../../../../build/work/app/i18n/custmsg.h:628
-msgid "Select and Placement"
-msgstr "Auswählen und Positionieren"
-
-#: ../../../../build/work/app/i18n/custmsg.h:629
-msgid "Building a yard throat."
-msgstr "Einen Bahnhof einrichten."
-
-#: ../../../../build/work/app/i18n/custmsg.h:630
-msgid "Designing turnouts"
-msgstr "Weichen konstruieren"
-
-#: ../../../../build/work/app/i18n/custmsg.h:631
-msgid "Group and Ungroup"
-msgstr "Zusammenfassen und Zerlegen"
-
-#: ../../../../build/work/app/i18n/custmsg.h:632
-msgid "Triming Turnout Ends"
-msgstr "Weichenenden verändern"
-
-#: ../../../../build/work/app/i18n/custmsg.h:633
-msgid "Handlaid Turnouts"
-msgstr "Selbstbauweichen"
-
-#: ../../../../build/work/app/i18n/custmsg.h:634
-msgid "Elevations and Profile"
-msgstr "Höhen und Profil"
-
-#: ../../../../build/work/app/i18n/custmsg.h:635
-msgid "Elevations"
-msgstr "Höhen"
-
-#: ../../../../build/work/app/i18n/custmsg.h:637
-msgid "Misc track commands"
-msgstr "Verschiedene Gleismodifikationen"
-
-#: ../../../../build/work/app/i18n/custmsg.h:638
-msgid "Delete and Undo"
-msgstr "Löschen und Rückgängig machen"
-
-#: ../../../../build/work/app/i18n/custmsg.h:639
-msgid "Splitting and Tunnels"
-msgstr "Auftrennen und Tunnels"
-
-#: ../../../../build/work/app/i18n/custmsg.h:641
-msgid "Helix tracks"
-msgstr "Gleiswendel"
-
-#: ../../../../build/work/app/i18n/custmsg.h:642
-msgid "Exception Tracks"
-msgstr "Fehlerhafte Gleise"
-
-#: ../../../../build/work/app/i18n/custmsg.h:644
-msgid "Connect and Tighten - a siding"
-msgstr "Abstellgleis verbinden"
-
-#: ../../../../build/work/app/i18n/custmsg.h:645
-msgid "Connect and Tighten - figure-8"
-msgstr "Verbinden und Zusammenfügen"
-
-#: ../../../../build/work/app/i18n/custmsg.h:646
-msgid "Other commands"
-msgstr "Sonstige Befehle"
-
-#: ../../../../build/work/app/i18n/custmsg.h:648
-msgid "Table Edges"
-msgstr "Tischkanten"
-
-#: ../../../../build/work/app/i18n/custmsg.h:650
-msgid "Dimension Lines"
-msgstr "Maßlinien"
-
-#: ../../../../build/work/app/i18n/custmsg.h:651
-msgid "Lines"
-msgstr "Linien"
-
-#: ../../../../build/work/app/i18n/custmsg.h:652
-msgid "Poly-Shapes"
-msgstr "Vielecke"
-
-#: ../../../../build/work/app/i18n/custmsg.h:653
-msgid "Modifying Poly-Shapes"
-msgstr "Polygone modifizieren"
-
-#: ../../../../build/work/app/i18n/custmsg.h:656
-msgid "Control Panels (New)"
-msgstr "Stellpulte einzeichnen"
-
-#~ msgid "Is Cornu End -> Not Selectable"
-#~ msgstr ""
-#~ "Dies ist das Ende einer Cornu und kann daher nicht ausgewählt werden."
-
-#~ msgid "Must be on the %s Track"
-#~ msgstr "Muss auf dem %s Gleis sein"
-
-#~ msgid "Select other end of Bezier, +Shift -> snaps to %s end"
-#~ msgstr ""
-#~ "Das andere Ender der Bezier wählen, mit Umschalt-Taste an %s Endpunkt "
-#~ "verbinden"
-
-#~ msgid "OK"
-#~ msgstr "Ok"
-
-#~ msgid ""
-#~ "No Unconnected end-point on track - Try again or release shift and click"
-#~ msgstr ""
-#~ "Dieses Gleis hat keinen offenen Endpunkt, nochmal versuchen oder "
-#~ "Umschalttaste lösen und dann klicken"
-
-#~ msgid "Not on a Track - Try again or release shift and click"
-#~ msgstr "Nicht auf einem Gleis, nochmal versuchen or "
-
-#, fuzzy
-#~ msgid ""
-#~ "Place 1st end point of Cornu track on track with an unconnected end-point"
-#~ msgstr "Ersten Endpunkt der Gleisgerade setzen"
-
-#~ msgid "Connect Sectional Tracks"
-#~ msgstr "Gleisstücke verbinden"
-
-#~ msgid "Drag to move selected tracks"
-#~ msgstr "Ausgewählte Gleise durch Ziehen verschieben"
-
-#, fuzzy
-#~ msgid "End Angle 2"
-#~ msgstr "Winkel eingeben..."
-
-#, fuzzy
-#~ msgid "Elev 1"
-#~ msgstr "Höhe = %s"
-
-#, fuzzy
-#~ msgid "End Radius Center 1: X"
-#~ msgstr "Endpunkt 1: X"
-
-#, fuzzy
-#~ msgid "Elev 2"
-#~ msgstr "Höhe = %s"
-
-#, fuzzy
-#~ msgid "Radius 2"
-#~ msgstr "Radius 2"
-
-#, fuzzy
-#~ msgid "End Radius Center 2: X"
-#~ msgstr "Endpunkt 2: X"
-
-#~ msgid "Angle=%0.3f"
-#~ msgstr "Winkel=%0.3f"
-
-#~ msgid "Place circle center"
-#~ msgstr "Setze Kreismittelpunkt"
-
-#~ msgid "Place circle"
-#~ msgstr "Platziere Kreis"
-
-#~ msgid "Draw"
-#~ msgstr "Zeichne"
-
-#~ msgid "Show Map"
-#~ msgstr "Karte anzeigen"
-
-#~ msgid "Blocks"
-#~ msgstr "Gleisabschnitte"
-
-#~ msgid "SwitchMotor"
-#~ msgstr "Weichenantrieb"
-
-#~ msgid "Switch Motors"
-#~ msgstr "Weichenatriebe"
-
-#~ msgid "Black"
-#~ msgstr "Schwarz"
-
-#~ msgid "Dark Blue"
-#~ msgstr "Dunkelblau"
-
-#~ msgid "Steel Blue"
-#~ msgstr "Stahlblau"
-
-#~ msgid "Royal Blue"
-#~ msgstr "Königsblau"
-
-#~ msgid "Blue"
-#~ msgstr "Blau"
-
-#~ msgid "Deep Sky Blue"
-#~ msgstr "Dunkles Himmelblau"
-
-#~ msgid "Light Sky Blue"
-#~ msgstr "Helles Himmelblau"
-
-#~ msgid "Powder Blue"
-#~ msgstr "Hellblau"
-
-#~ msgid "Dark Aqua"
-#~ msgstr "Dunkelaquamarin"
-
-#~ msgid "Aquamarine"
-#~ msgstr "Aquamarin"
-
-#~ msgid "Aqua"
-#~ msgstr "Wasserblau"
-
-#~ msgid "Dark Green"
-#~ msgstr "Dunkelgrün"
-
-#~ msgid "Forest Green"
-#~ msgstr "Waldgrün"
-
-#~ msgid "Lime Green"
-#~ msgstr "Limonengrün"
-
-#~ msgid "Green"
-#~ msgstr "Grün"
-
-#~ msgid "Lawn Green"
-#~ msgstr "Rasengrün"
-
-#~ msgid "Pale Green"
-#~ msgstr "Blassgrün"
-
-#~ msgid "Dark Yellow"
-#~ msgstr "Dunkelgelb"
-
-#~ msgid "Coral"
-#~ msgstr "Koralle"
-
-#~ msgid "Orange"
-#~ msgstr "Orange"
-
-#~ msgid "Gold"
-#~ msgstr "Gold"
-
-#~ msgid "Yellow"
-#~ msgstr "Gelb"
-
-#~ msgid "Saddle Brown"
-#~ msgstr "Lederbraun"
-
-#~ msgid "Brown"
-#~ msgstr "Braun"
-
-#~ msgid "Chocolate"
-#~ msgstr "Schokolade"
-
-#~ msgid "Rosy Brown"
-#~ msgstr "Braun Rosa"
-
-#~ msgid "Tan"
-#~ msgstr "Loh"
-
-#~ msgid "Beige"
-#~ msgstr "Beige"
-
-#~ msgid "Dark Red"
-#~ msgstr "Dunkelrot"
-
-#~ msgid "Tomato"
-#~ msgstr "Tomatenrot"
-
-#~ msgid "Red"
-#~ msgstr "Rot"
-
-#~ msgid "Hot Pink"
-#~ msgstr "Knallrosa"
-
-#~ msgid "Pink"
-#~ msgstr "Rosa"
-
-#~ msgid "Dark Purple"
-#~ msgstr "Dunkelpurpur"
-
-#~ msgid "Maroon"
-#~ msgstr "Kastanie"
-
-#~ msgid "Purple2"
-#~ msgstr "Purpur 2"
-
-#~ msgid "Purple"
-#~ msgstr "Purpur"
-
-#~ msgid "Violet"
-#~ msgstr "Violett"
-
-#~ msgid "Dark Gray"
-#~ msgstr "Dunkelgrau"
-
-#~ msgid "Gray"
-#~ msgstr "Grau"
-
-#~ msgid "Light Gray"
-#~ msgstr "Hellgrau"
-
-#~ msgid "Describe objects"
-#~ msgstr "Objekte beschreiben"
-
-#~ msgid "Page %d"
-#~ msgstr "Seite %d"
-
-#~ msgid "Print to file ..."
-#~ msgstr "In Datei drucken..."
-
-#~ msgid "No file name specified"
-#~ msgstr "Kein Dateiname angegeben"
-
-#~ msgid "%s exists"
-#~ msgstr "%s existiert bereits"
-
-#~ msgid "Overwrite"
-#~ msgstr "Ãœberschreiben"
-
-#~ msgid ": cannot open"
-#~ msgstr ": kann nicht geöffnet werden"
-
-#~ msgid "Page 1"
-#~ msgstr "Seite 1"
-
-#~ msgid "Printer Margin Test Page"
-#~ msgstr "Testseite für Druckränder"
-
-#~ msgid "Enter both printer name and command"
-#~ msgstr "Druckername und Befehl eingeben"
-
-#~ msgid "Can not save New Printer definition"
-#~ msgstr "Neue Druckerdefinition kann nicht gespeichert werden"
-
-#~ msgid "Enter printer name"
-#~ msgstr "Druckername eingeben"
-
-#~ msgid "Can not save New Margin definition"
-#~ msgstr "Seitendefinition kann nicht gespeichert werden"
-
-#~ msgid "Paper Size"
-#~ msgstr "Papiergrösse"
-
-#~ msgid "Printer"
-#~ msgstr "Drucker"
-
-#~ msgid "Format"
-#~ msgstr "Format"
-
-#~ msgid "X Font"
-#~ msgstr "X Schriftart"
-
-#~ msgid "PS Font"
-#~ msgstr "PS Schriftart"
-
-#~ msgid "Factor"
-#~ msgstr "Faktor"
-
-#~ msgid "Print Test Page"
-#~ msgstr "Drucke Testseite"
-
-#~ msgid "Add Printer"
-#~ msgstr "Drucker hinzufügen"
-
-#~ msgid "Name: "
-#~ msgstr "Name: "
-
-#~ msgid "Command: "
-#~ msgstr "Befehl: "
-
-#~ msgid "Add Margin"
-#~ msgstr "Rand hinzufügen"
-
-#~ msgid "Print To File"
-#~ msgstr "In Datei drucken"
-
-#~ msgid "File Name? "
-#~ msgstr "Dateiname? "
-
-#~ msgid "Font Alias"
-#~ msgstr "Alias für Schriftart"
-
-#~ msgid "Enter a post-script font name for:"
-#~ msgstr "Eingabe der Postscript Schriftart für:"
-
-#~ msgid "Printing"
-#~ msgstr "Drucke"
-
-#~ msgid "Now printing"
-#~ msgstr "Druck läuft"
-
-#~ msgid "Abort Print"
-#~ msgstr "Druck abbrechen"
-
-#~ msgid ""
-#~ " exists\n"
-#~ "Do you want to overwrite it?"
-#~ msgstr ""
-#~ "existiert.\n"
-#~ "Wollen Sie diese überschreiben?"
-
-#, fuzzy
-#~ msgid "Delete Switch motor"
-#~ msgstr "Weichenantrieb löschen"
-
-#~ msgid "Not a SwitchMotor!"
-#~ msgstr "Kein Weichenantrieb!"
-
-#~ msgid "Custom Update"
-#~ msgstr "Anpassungen hinzufügen"
-
-#~ msgid "No font selected"
-#~ msgstr "Keine Schriftart ausgewählt"
-
-#~ msgid "No fonts"
-#~ msgstr "Keine Schriftarten"
-
-#~ msgid ""
-#~ "Can't find standard Serif font.\n"
-#~ "Please choose a font"
-#~ msgstr ""
-#~ "Die Standardschriftart für Serif kann nicht gefunden werden.\n"
-#~ "Bitte wählen Sie eine Schriftart aus"
-
-#~ msgid ""
-#~ "Can't find standard San-Serif font.\n"
-#~ "Please choose a font"
-#~ msgstr ""
-#~ "Die Standardschriftart für Sans-Serif kann nicht gefunden werden.\n"
-#~ "Bitte wählen Sie eine Schriftart aus"
-
-#~ msgid "XTrackCAD Help"
-#~ msgstr "XTrackCAD Hilfe"
-
-#~ msgid "Now printing %s"
-#~ msgstr "Drucke %s"
-
-#~ msgid "Creating %s"
-#~ msgstr "Erzeuge %s"
-
-#~ msgid "Scale / Gauge"
-#~ msgstr "Maßstab / Spurweite"
-
-#~ msgid "load last layout"
-#~ msgstr "Letzten Plan laden"
-
-#~ msgid "start with blank layout"
-#~ msgstr "Mit leerem Plan beginnen"
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: XTrackCAD 5.2.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-07-23 19:08+0200\n"
+"PO-Revision-Date: 2020-07-23 19:11+0200\n"
+"Last-Translator: \n"
+"Language-Team: German <m_fischer@users.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: de\n"
+"X-Generator: Poedit 2.4\n"
+
+#: ../bin/archive.c:178 ../bin/archive.c:185 ../bin/archive.c:214
+#: ../bin/archive.c:239 ../bin/archive.c:294 ../bin/archive.c:307
+#: ../bin/archive.c:315 ../bin/archive.c:365 ../bin/archive.c:400
+#: ../bin/archive.c:416 ../bin/archive.c:426 ../bin/archive.c:449
+#: ../bin/cblock.c:491 ../bin/cswitchmotor.c:475 ../bin/dbench.c:147
+#: ../bin/dcar.c:4519 ../bin/dcar.c:4705 ../bin/dcar.c:4715 ../bin/dcar.c:4763
+#: ../bin/dcar.c:4770 ../bin/dcar.c:4788 ../bin/dcar.c:4801 ../bin/dcar.c:4806
+#: ../bin/dcar.c:4835 ../bin/dcar.c:4999 ../bin/directory.c:65
+#: ../bin/directory.c:100 ../bin/directory.c:107 ../bin/directory.c:138
+#: ../bin/directory.c:154 ../bin/dxfoutput.c:193 ../bin/fileio.c:242
+#: ../bin/fileio.c:699 ../bin/fileio.c:899 ../bin/fileio.c:1026
+#: ../bin/fileio.c:1093 ../bin/fileio.c:1099 ../bin/fileio.c:1175
+#: ../bin/fileio.c:1185 ../bin/fileio.c:1517 ../bin/fileio.c:1567
+#: ../bin/fileio.c:1623 ../bin/macro.c:179 ../bin/macro.c:832
+#: ../bin/macro.c:879 ../bin/macro.c:900 ../bin/macro.c:1045
+#: ../bin/macro.c:1062 ../bin/macro.c:1324 ../bin/param.c:2090
+#: ../bin/paramfile.c:250 ../bin/paramfilelist.c:376 ../bin/track.c:1116
+#: ../bin/track.c:1640 ../bin/track.c:1946 ../bin/track.c:1950
+#: ../bin/track.c:1962 ../bin/track.c:2026 ../wlib/gtklib/wpref.c:248
+#: ../wlib/gtklib/wpref.c:255
+msgid "Continue"
+msgstr "Weiter"
+
+#: ../bin/cbezier.c:599
+msgid "Select End-Point - Ctrl unlocks end-point"
+msgstr "Endpunkt auswählen - Strg entsperrt den Endpunkt"
+
+#: ../bin/cbezier.c:601
+msgid "Select End-Point"
+msgstr "Endpunkt auswählen"
+
+#: ../bin/cbezier.c:633
+msgid "Not close enough to any valid, selectable point, reselect"
+msgstr ""
+"Nicht nahe genug an einem gültigen, wählbaren Punkt, bitte einen anderen "
+"auswählen"
+
+#: ../bin/cbezier.c:639
+#, c-format
+msgid "Drag point %d to new location and release it"
+msgstr "Den Punkt %d an die neue Stelle verschieben und loslassen"
+
+#: ../bin/cbezier.c:648 ../bin/cbezier.c:739 ../bin/cbezier.c:741
+msgid "Pick any circle to adjust it - Enter to confirm, ESC to abort"
+msgstr ""
+"Einen beliebeigen Kreis zum Ändern auswählen - Mit der Eingabetaste "
+"bestätigen, mit ESC abbrechen"
+
+#: ../bin/cbezier.c:672
+msgid "Bezier Curve Invalid has identical end points Change End Point"
+msgstr ""
+"Die Endpunkte der Bezierkurve sind identisch. Bitte einen Endpunkt ändern"
+
+#: ../bin/cbezier.c:675
+#, c-format
+msgid "Bezier Curve Invalid has %s Change End Point"
+msgstr "Ungültige Bezier-Curve (%s). Bitte den Endpunkt ändern"
+
+#: ../bin/cbezier.c:678
+msgid "Bezier Curve Invalid has three co-incident points"
+msgstr ""
+"Die ungültige Bezier-Kurve hat drei übereinstimmende Punkte - bitte anpassen"
+
+#: ../bin/cbezier.c:680
+msgid "Bezier is Straight Line"
+msgstr "Bezier ist eine gerade Linie"
+
+#: ../bin/cbezier.c:682
+#, c-format
+msgid "Bezier %s : Min Radius=%s Length=%s fx=%0.3f fy=%0.3f cusp=%0.3f"
+msgstr ""
+"Bezier %s: Kleinester Radius=%s, Länge=%s, fx=%0.3f fy=%0.3f cusp=%0.3f"
+
+#: ../bin/cbezier.c:686
+#, c-format
+msgid "Bezier %s : Min Radius=%s Length=%s"
+msgstr "Bezier %s : Mindestradius=%s Länge=%s"
+
+#: ../bin/cbezier.c:711
+msgid "No unconnected End Point to lock to"
+msgstr "Es gibt keinen unverbundenen Endpunkt für das Anschliessen"
+
+#: ../bin/cbezier.c:729
+msgid "Bezier curve invalid has identical end points Change End Point"
+msgstr ""
+"Die Endpunkte der Bezierkurve sind identisch. Bitte einen Endpunkt ändern"
+
+#: ../bin/cbezier.c:732
+#, c-format
+msgid "Bezier curve invalid has %s Change End Point"
+msgstr "Ungültige Bezier-Curve (%s). Bitte den Endpunkt ändern"
+
+#: ../bin/cbezier.c:735
+msgid "Bezier curve invalid has three co-incident points"
+msgstr ""
+"Die ungültige Bezier-Kurve hat drei übereinstimmende Punkte - bitte anpassen"
+
+#: ../bin/cbezier.c:737
+msgid "Bezier curve is straight line"
+msgstr "Bezier Kurve ist eine gerade Linie"
+
+#: ../bin/cbezier.c:751 ../bin/cbezier.c:765
+msgid "Invalid Bezier Track - end points are identical"
+msgstr "Die Bezier-Kurve ist ungültig, da sie identische Endpunkte hat"
+
+#: ../bin/cbezier.c:758
+#, c-format
+msgid "Invalid Bezier Curve has a %s - Adjust"
+msgstr "Die ungültige Bezier-Kurve hat %s - bitte anpassen"
+
+#: ../bin/cbezier.c:762
+msgid "Invalid Bezier Curve has three coincident points - Adjust"
+msgstr ""
+"Die ungültige Bezier-Kurve hat drei übereinstimmende Punkte - bitte anpassen"
+
+#: ../bin/cbezier.c:770
+msgid "Create Bezier"
+msgstr "Bezier erstellen"
+
+#: ../bin/cbezier.c:858
+#, c-format
+msgid "%s picked - now select a Point"
+msgstr "%s ausgewählt - jetzt einen Punkt auswählen"
+
+#: ../bin/cbezier.c:888 ../bin/ccornu.c:1952
+msgid "No changes made"
+msgstr "Keine Änderungen durchgeführt"
+
+#: ../bin/cbezier.c:892
+msgid "Modify Bezier"
+msgstr "Bezier ändern"
+
+#: ../bin/cbezier.c:910
+msgid "Modify Bezier Complete"
+msgstr "Ändern der Bezier-Kurve abgeschlossen"
+
+#: ../bin/cbezier.c:914
+msgid "Modify Bezier Cancelled"
+msgstr "Ändern der Bezier-Kurve abgebrochen"
+
+#: ../bin/cbezier.c:1038 ../bin/cbezier.c:1129
+#, c-format
+msgid "Place 1st endpoint of Bezier - snap to %s"
+msgstr "Ersten Endpunkt der Bezierkurve festlegen, an %s fangen"
+
+#: ../bin/cbezier.c:1056 ../bin/ccornu.c:2289 ../bin/ccurve.c:205
+#: ../bin/ccurve.c:443 ../bin/cstraigh.c:91
+msgid "Track is different gauge"
+msgstr "Gleis hat andere Spurweite"
+
+#: ../bin/cbezier.c:1084
+msgid "Drag end of first control arm"
+msgstr "Das Ende des ersten Kontrolllinie ziehen"
+
+#: ../bin/cbezier.c:1091
+msgid "Drag end of second control arm"
+msgstr "Das Ende der zweiten Kontrolllinie ziehen"
+
+#: ../bin/cbezier.c:1133 ../bin/cbezier.c:1170
+#, c-format
+msgid "Select other end of Bezier - snap to %s end"
+msgstr "Das andere Ende der Bezierkurve auswählen, am Ende von %s fangen"
+
+#: ../bin/cbezier.c:1165
+msgid "Control Arm 1 is too short, try again"
+msgstr "Steuer-Arms 1 ist zu kurz, bitte nochmal versuchen"
+
+#: ../bin/cblock.c:111 ../bin/cblock.c:123 ../bin/cblock.c:168
+#: ../bin/ccontrol.c:171 ../bin/ccontrol.c:425 ../bin/compound.c:567
+#: ../bin/csensor.c:163 ../bin/csensor.c:389 ../bin/csignal.c:238
+#: ../bin/csignal.c:498 ../bin/csignal.c:509 ../bin/csignal.c:535
+#: ../bin/cswitchmotor.c:93 ../bin/cswitchmotor.c:112 ../bin/cswitchmotor.c:224
+#: ../bin/dcontmgm.c:91 ../bin/dlayer.c:483
+msgid "Name"
+msgstr "Name"
+
+#: ../bin/cblock.c:112 ../bin/cblock.c:124 ../bin/cblock.c:169
+#: ../bin/csensor.c:165 ../bin/csensor.c:395 ../bin/csignal.c:498
+#: ../bin/csignal.c:537
+msgid "Script"
+msgstr "Befehlsskript"
+
+#: ../bin/cblock.c:125
+msgid "Segments"
+msgstr "Segmente"
+
+#: ../bin/cblock.c:170 ../bin/cdraw.c:523 ../bin/cdraw.c:1433
+#: ../bin/cdraw.c:1579 ../bin/cdraw.c:2234 ../bin/cdraw.c:2460
+#: ../bin/cdraw.c:2497 ../bin/ctodesgn.c:175 ../bin/ctodesgn.c:176
+#: ../bin/ctodesgn.c:177 ../bin/ctodesgn.c:178 ../bin/ctodesgn.c:190
+#: ../bin/ctodesgn.c:191 ../bin/ctodesgn.c:241 ../bin/ctodesgn.c:244
+#: ../bin/ctodesgn.c:264 ../bin/ctodesgn.c:269 ../bin/ctodesgn.c:301
+#: ../bin/ctodesgn.c:308 ../bin/ctodesgn.c:310 ../bin/ctodesgn.c:330
+#: ../bin/ctodesgn.c:335 ../bin/ctodesgn.c:367 ../bin/ctodesgn.c:374
+#: ../bin/ctodesgn.c:375 ../bin/ctodesgn.c:396 ../bin/ctodesgn.c:399
+#: ../bin/ctodesgn.c:402 ../bin/ctodesgn.c:437 ../bin/ctodesgn.c:441
+#: ../bin/ctodesgn.c:448 ../bin/ctodesgn.c:449 ../bin/ctodesgn.c:450
+#: ../bin/ctodesgn.c:472 ../bin/ctodesgn.c:474 ../bin/ctodesgn.c:492
+#: ../bin/ctodesgn.c:494 ../bin/ctodesgn.c:513 ../bin/ctodesgn.c:515
+#: ../bin/ctodesgn.c:542 ../bin/ctodesgn.c:562 ../bin/ctodesgn.c:582
+#: ../bin/ctodesgn.c:602 ../bin/ctodesgn.c:640 ../bin/ctodesgn.c:659
+#: ../bin/ctodesgn.c:660 ../bin/ctrain.c:185 ../bin/tbezier.c:258
+#: ../bin/tcornu.c:307 ../bin/tcurve.c:372 ../bin/tstraigh.c:89
+msgid "Length"
+msgstr "Länge"
+
+#: ../bin/cblock.c:171 ../bin/cdraw.c:515 ../bin/compound.c:542
+#: ../bin/tbezier.c:245 ../bin/tcornu.c:294 ../bin/tcurve.c:364
+#: ../bin/tease.c:519 ../bin/tstraigh.c:85
+msgid "End Pt 1: X,Y"
+msgstr "Endpunkt 1: X,Y"
+
+#: ../bin/cblock.c:172 ../bin/cdraw.c:516 ../bin/compound.c:547
+#: ../bin/tbezier.c:252 ../bin/tcornu.c:299 ../bin/tcurve.c:366
+#: ../bin/tease.c:521 ../bin/tstraigh.c:87
+msgid "End Pt 2: X,Y"
+msgstr "Endpunkt 2: X,Y"
+
+#: ../bin/cblock.c:195 ../bin/cblock.c:207 ../bin/cblock.c:575
+#: ../bin/cblock.c:596 ../bin/cblock.c:604 ../bin/cblock.c:674
+#: ../bin/cblock.c:795 ../bin/cblock.c:807 ../bin/cblock.c:845
+#: ../bin/ccontrol.c:205 ../bin/ccontrol.c:218 ../bin/ccontrol.c:230
+#: ../bin/ccontrol.c:486 ../bin/cdraw.c:130 ../bin/cdraw.c:2293
+#: ../bin/cgroup.c:1075 ../bin/cgroup.c:1146 ../bin/cgroup.c:1185
+#: ../bin/cgroup.c:1235 ../bin/cgroup.c:1262 ../bin/cgroup.c:1350
+#: ../bin/cgroup.c:1729 ../bin/cnote.c:69 ../bin/compound.c:603
+#: ../bin/compound.c:618 ../bin/compound.c:651 ../bin/cprint.c:512
+#: ../bin/cprint.c:716 ../bin/cprint.c:723 ../bin/cprint.c:1247
+#: ../bin/cpull.c:511 ../bin/cpull.c:526 ../bin/cpull.c:528 ../bin/cpull.c:530
+#: ../bin/cpull.c:691 ../bin/cselect.c:1067 ../bin/cselect.c:1163
+#: ../bin/cselect.c:1984 ../bin/csensor.c:194 ../bin/csensor.c:206
+#: ../bin/csensor.c:444 ../bin/csignal.c:267 ../bin/csignal.c:666
+#: ../bin/csignal.c:734 ../bin/csnap.c:576 ../bin/csnap.c:705
+#: ../bin/cstruct.c:937 ../bin/cstruct.c:946 ../bin/cstruct.c:1071
+#: ../bin/cswitchmotor.c:250 ../bin/cswitchmotor.c:262
+#: ../bin/cswitchmotor.c:274 ../bin/cswitchmotor.c:286
+#: ../bin/cswitchmotor.c:544 ../bin/cswitchmotor.c:580
+#: ../bin/cswitchmotor.c:714 ../bin/cswitchmotor.c:745 ../bin/ctext.c:173
+#: ../bin/ctodesgn.c:209 ../bin/ctodesgn.c:1204 ../bin/ctodesgn.c:1341
+#: ../bin/ctodesgn.c:1939 ../bin/ctodesgn.c:2054 ../bin/ctodesgn.c:2353
+#: ../bin/ctodesgn.c:2635 ../bin/ctrain.c:205 ../bin/cturnout.c:2942
+#: ../bin/cturnout.c:3080 ../bin/cundo.c:161 ../bin/cundo.c:166
+#: ../bin/dbitmap.c:68 ../bin/dbitmap.c:125 ../bin/dbitmap.c:203
+#: ../bin/dbitmap.c:238 ../bin/dcar.c:3823 ../bin/dcar.c:4018
+#: ../bin/dcar.c:4022 ../bin/dcar.c:4026 ../bin/dcar.c:4031 ../bin/dcar.c:4335
+#: ../bin/dcar.c:4443 ../bin/dcar.c:4825 ../bin/dcmpnd.c:399
+#: ../bin/dcmpnd.c:410 ../bin/dcmpnd.c:542 ../bin/dcustmgm.c:221
+#: ../bin/dcustmgm.c:227 ../bin/dcustmgm.c:236 ../bin/dcustmgm.c:261
+#: ../bin/dease.c:242 ../bin/dlayer.c:240 ../bin/dlayer.c:262
+#: ../bin/dlayer.c:879 ../bin/dlayer.c:885 ../bin/dlayer.c:891
+#: ../bin/doption.c:199 ../bin/doption.c:275 ../bin/doption.c:476
+#: ../bin/doption.c:479 ../bin/doption.c:492 ../bin/doption.c:558
+#: ../bin/dprmfile.c:434 ../bin/draw.c:2643 ../bin/fileio.c:198
+#: ../bin/fileio.c:608 ../bin/fileio.c:743 ../bin/fileio.c:745
+#: ../bin/fileio.c:750 ../bin/fileio.c:813 ../bin/fileio.c:1046
+#: ../bin/layout.c:373 ../bin/layout.c:561 ../bin/macro.c:1158
+#: ../bin/macro.c:1162 ../bin/macro.c:1220 ../bin/macro.c:1289
+#: ../bin/macro.c:1529 ../bin/macro.c:1547 ../bin/misc.c:438 ../bin/misc.c:485
+#: ../bin/misc.c:1810 ../bin/misc.c:1931 ../bin/misc.c:1939 ../bin/misc.c:2017
+#: ../bin/misc.c:2808 ../bin/misc.c:2817 ../bin/misc.c:2837 ../bin/misc.c:2843
+#: ../bin/misc2.c:455 ../bin/param.c:738 ../bin/param.c:1848
+#: ../bin/param.c:1971 ../bin/param.c:1974 ../bin/param.c:2097
+#: ../bin/param.c:2103 ../bin/paramfile.c:324 ../bin/paramfile.c:326
+#: ../bin/paramfile.c:331 ../bin/paramfile.c:355 ../bin/paramfile.c:381
+#: ../bin/paramfile.c:387 ../bin/paramfilelist.c:94 ../bin/paramfilelist.c:114
+#: ../bin/paramfilelist.c:128 ../bin/paramfilelist.c:192 ../bin/smalldlg.c:90
+#: ../bin/smalldlg.c:222 ../bin/tease.c:1014 ../bin/track.c:1654
+#: ../wlib/gtklib/wpref.c:122 ../../../../build/work/app/bin/bllnhlp.c:586
+msgid "Ok"
+msgstr "Ok"
+
+#: ../bin/cblock.c:212
+msgid "Change block"
+msgstr "Block ändern"
+
+#: ../bin/cblock.c:264 ../bin/cswitchmotor.c:342
+#, c-format
+msgid "(%d): Layer=%u %s"
+msgstr "(%d): Ebene=%u %s"
+
+#: ../bin/cblock.c:288 ../bin/cblock.c:1000
+msgid "Block"
+msgstr "Block"
+
+#: ../bin/cblock.c:491
+#, c-format
+msgid "resolveBlockTrack: T%d[%d]: T%d doesn't exist"
+msgstr "resolveBlockTrack: T%d[%d]: T%d existiert nicht"
+
+#: ../bin/cblock.c:575 ../bin/cblock.c:807
+msgid "Block must have a name!"
+msgstr "Der Gleisabschnitt benötigt einen Namen!"
+
+#: ../bin/cblock.c:604
+msgid "Block is discontigious!"
+msgstr "Der Block ist nicht zusammenhängend!"
+
+#: ../bin/cblock.c:609
+msgid "Create block"
+msgstr "Block erstellen"
+
+#: ../bin/cblock.c:656
+msgid "Non track object skipped!"
+msgstr "Objekt ist kein Gleis, übersprungen!"
+
+#: ../bin/cblock.c:660
+msgid "Selected track is already in a block, skipped!"
+msgstr "Übersprungen, da das ausgewählte Gleis bereits in einem Block ist!"
+
+#: ../bin/cblock.c:674
+msgid "Create Block"
+msgstr "Gleisabschnitt erstellen"
+
+#: ../bin/cblock.c:704 ../bin/cblock.c:736
+msgid "Select a track"
+msgstr "Gleis auswählen"
+
+#: ../bin/cblock.c:713 ../bin/cblock.c:744
+msgid "Not a block!"
+msgstr "Kein Block!"
+
+#: ../bin/cblock.c:749
+#, c-format
+msgid "Really delete block %s?"
+msgstr "Soll der Block %s wirklich gelöscht werden?"
+
+#: ../bin/cblock.c:749 ../bin/ccornu.c:2745 ../bin/ccornu.c:2956
+#: ../bin/cdraw.c:134 ../bin/cgroup.c:1081 ../bin/cpull.c:649
+#: ../bin/csignal.c:712 ../bin/cswitchmotor.c:670 ../bin/ctodesgn.c:2643
+#: ../bin/ctodesgn.c:3175 ../bin/ctrain.c:2509 ../bin/dbitmap.c:208
+#: ../bin/dcar.c:3969 ../bin/dcar.c:4048 ../bin/dcar.c:4132 ../bin/dcar.c:4151
+#: ../bin/dcar.c:4468 ../bin/dcar.c:4889 ../bin/dcontmgm.c:173
+#: ../bin/dcustmgm.c:168 ../bin/misc.c:1239 ../bin/misc.c:1246
+#: ../bin/misc.c:1317 ../bin/track.c:1656 ../bin/track.c:1753
+#: ../bin/track.c:1767
+msgid "Yes"
+msgstr "Ja"
+
+#: ../bin/cblock.c:749 ../bin/ccornu.c:2745 ../bin/ccornu.c:2956
+#: ../bin/cdraw.c:134 ../bin/cgroup.c:1081 ../bin/cpull.c:649
+#: ../bin/csignal.c:712 ../bin/cswitchmotor.c:670 ../bin/ctodesgn.c:2643
+#: ../bin/ctodesgn.c:3175 ../bin/ctrain.c:2509 ../bin/dcar.c:3969
+#: ../bin/dcar.c:4048 ../bin/dcar.c:4132 ../bin/dcar.c:4151 ../bin/dcar.c:4468
+#: ../bin/dcar.c:4889 ../bin/dcontmgm.c:173 ../bin/dcustmgm.c:168
+#: ../bin/misc.c:1239 ../bin/misc.c:1246 ../bin/misc.c:1317 ../bin/track.c:1656
+#: ../bin/track.c:1753 ../bin/track.c:1767
+msgid "No"
+msgstr "Nein"
+
+#: ../bin/cblock.c:750
+msgid "Delete Block"
+msgstr "Gleisabschnitt löschen"
+
+#: ../bin/cblock.c:795
+#, c-format
+msgid "Deleting block %s"
+msgstr "Gleisabschnitt %s löschen"
+
+#: ../bin/cblock.c:811
+msgid "Modify Block"
+msgstr "Gleisabschnitt bearbeiten"
+
+#: ../bin/cblock.c:844
+msgid "Edit block"
+msgstr "Block bearbeiten"
+
+#: ../bin/cblock.c:850
+#, c-format
+msgid "Edit block %d"
+msgstr "Gleisabschnitt %d bearbeiten"
+
+#: ../bin/ccontrol.c:172 ../bin/csensor.c:164 ../bin/csignal.c:239
+#: ../bin/ctrain.c:183
+msgid "Position"
+msgstr "Position"
+
+#: ../bin/ccontrol.c:173 ../bin/ccontrol.c:431
+msgid "On Script"
+msgstr "Befehlsskript An"
+
+#: ../bin/ccontrol.c:174 ../bin/ccontrol.c:433
+msgid "Off Script"
+msgstr "Befehlsskript Aus"
+
+#: ../bin/ccontrol.c:240
+msgid "Change Control"
+msgstr "Steuerung ändern"
+
+#: ../bin/ccontrol.c:282 ../bin/csensor.c:252
+#, c-format
+msgid "(%d [%s]): Layer=%u, at %0.3f,%0.3f"
+msgstr "(%d [%s]): Ebene=%u, bei %0.3f,%0.3f"
+
+#: ../bin/ccontrol.c:295 ../bin/ccontrol.c:640
+msgid "Control"
+msgstr "Steuerung"
+
+#: ../bin/ccontrol.c:427
+msgid "Origin X"
+msgstr "Ausgangspunkt X"
+
+#: ../bin/ccontrol.c:429 ../bin/csensor.c:393 ../bin/csignal.c:513
+msgid "Origin Y"
+msgstr "Ausgangspunkt: Y"
+
+#: ../bin/ccontrol.c:445
+msgid "Create Control"
+msgstr "Steuerung erstellen"
+
+#: ../bin/ccontrol.c:448
+msgid "Modify Control"
+msgstr "Steuerung ändern"
+
+#: ../bin/ccontrol.c:485
+msgid "Edit control"
+msgstr "Steuerung bearbeiten"
+
+#: ../bin/ccontrol.c:526
+msgid "Place control"
+msgstr "Steuerung setzen"
+
+#: ../bin/ccornu.c:200 ../bin/ccornu.c:203 ../bin/ccornu.c:206
+#: ../bin/ccornu.c:260
+#, c-format
+msgid "%s FlexTrack"
+msgstr "%s Flexgleis"
+
+#: ../bin/ccornu.c:254
+msgid " FLEX "
+msgstr " FLEX "
+
+#: ../bin/ccornu.c:903 ../bin/cjoin.c:936 ../bin/cmisc.c:59
+msgid "First"
+msgstr "Erste"
+
+#: ../bin/ccornu.c:910 ../bin/cjoin.c:944
+msgid "Second"
+msgstr "Zweite"
+
+#: ../bin/ccornu.c:981 ../bin/ccornu.c:2004 ../bin/ccornu.c:2034
+#: ../bin/tcornu.c:830 ../bin/tcornu.c:1037 ../bin/tcornu.c:1363
+#, c-format
+msgid ""
+"Cornu Create Failed for p1[%0.3f,%0.3f] p2[%0.3f,%0.3f], c1[%0.3f,%0.3f] "
+"c2[%0.3f,%0.3f], a1=%0.3f a2=%0.3f, r1=%s r2=%s"
+msgstr ""
+"Erstellen der mit p1[%0.3f,%0.3f] p2[%0.3f,%0.3f], c1[%0.3f,%0.3f] c2[%0.3f,"
+"%0.3f], a1=%0.3f a2=%0.3f, r1=%s r2=%s nicht möglich"
+
+#: ../bin/ccornu.c:1020 ../bin/ccornu.c:1639 ../bin/ccornu.c:1658
+#: ../bin/tbezier.c:246 ../bin/tbezier.c:253 ../bin/tcornu.c:295
+#: ../bin/tcornu.c:300
+msgid "End Angle"
+msgstr "Endwinkel"
+
+#: ../bin/ccornu.c:1023 ../bin/ccornu.c:1638 ../bin/ccornu.c:1657
+msgid "End Radius"
+msgstr "Endradius"
+
+#: ../bin/ccornu.c:1076
+msgid "Select Point, or Add Point"
+msgstr "Punkt auswählen oder neuen Punkt hinzufügen"
+
+#: ../bin/ccornu.c:1247
+msgid "Not close enough to track or point, reselect"
+msgstr "Kein Gleis oder Endpunkt in der Nähe, bitte wiederholen"
+
+#: ../bin/ccornu.c:1253
+msgid "Drag out end of Cornu"
+msgstr "Ende der Cornu ziehen"
+
+#: ../bin/ccornu.c:1255
+msgid "Drag along end of track"
+msgstr "Entlang des Ende des Gleises ziehen"
+
+#: ../bin/ccornu.c:1257
+msgid "Drag to move"
+msgstr "Ziehen zum Verschieben"
+
+#: ../bin/ccornu.c:1260
+msgid "Drag point to new location, Delete to remove"
+msgstr "Den Punkt an die neue Position verschieben, mit Entf löschen"
+
+#: ../bin/ccornu.c:1264
+msgid "Drag to change end radius"
+msgstr "Radius durch Ziehen ändern"
+
+#: ../bin/ccornu.c:1267
+msgid "Drag to change end angle"
+msgstr "Ziehen um den Abschlußwinkel zu ändern"
+
+#: ../bin/ccornu.c:1282
+msgid "Pick any circle to adjust or add - Enter to accept, Esc to cancel"
+msgstr ""
+"Um Anzupassen einen beliebigen Kreis auswählen -Eingabe zum Bestätigen, Esc "
+"zum Abbrechen"
+
+#: ../bin/ccornu.c:1294
+msgid "Track can't be split"
+msgstr "Das Gleis kann nicht getrennt werden"
+
+#: ../bin/ccornu.c:1356
+msgid "Too close to other end of selected Track"
+msgstr "Zu nahe am anderen Ende des ausgewählten Gleises"
+
+#: ../bin/ccornu.c:1364
+msgid "Can't move end inside a turnout"
+msgstr "Ende kann nicht in ein festes Gleis hinein verschoben werden"
+
+#: ../bin/ccornu.c:1506
+msgid "Can't extend connected Bezier or Cornu"
+msgstr "Bezier- oder Cornu-Kurve kann nicht erweitert werden"
+
+#: ../bin/ccornu.c:1578
+#, c-format
+msgid ""
+"Cornu : Min Radius=%s MaxRateofCurveChange/Scale=%s Length=%s Winding Arc=%s"
+msgstr ""
+"Cornu: Mindestradius =%s Max. Änderungsrate des Radius=%s Länge=%s Bogen=%s"
+
+#: ../bin/ccornu.c:1600 ../bin/ccornu.c:2270
+msgid "Helix Already Connected"
+msgstr "Gleiswendel ist bereits verbunden"
+
+#: ../bin/ccornu.c:1614
+msgid "No Valid end point on that track"
+msgstr "Kein gültiger Endpunkt auf diesem Gleis"
+
+#: ../bin/ccornu.c:1619
+msgid "Track is different scale"
+msgstr "Das Gleis hat einen anderen Maßstab"
+
+#: ../bin/ccornu.c:1672
+msgid ""
+"Pick on point to adjust it along track - Delete to remove, Enter to confirm, "
+"ESC to abort"
+msgstr ""
+"Einen Punkt auswählen und verschieben - Bestätigen mit Eingabe, Abbrechen "
+"mit Esc"
+
+#: ../bin/ccornu.c:1702
+msgid "Cornu has too complex shape - adjust end pts"
+msgstr "Die Form der Cornu-Kurve ist zu komplex, Endpunkte anpassen"
+
+#: ../bin/ccornu.c:1713
+#, c-format
+msgid "Cornu point %d too close to other end of connect track - reposition it"
+msgstr ""
+"Cornu-Punkt %d zu dicht am anderen Ende des Gleises - Position verändern"
+
+#: ../bin/ccornu.c:1718
+msgid "Create Cornu"
+msgstr "Cornu-Kurve erstellen"
+
+#: ../bin/ccornu.c:1907
+msgid "Now Select or Add (+Shift) a Point"
+msgstr "Jetzt einen Punkt auswählen oder (+Umschalttaste) hinzufügen"
+
+#: ../bin/ccornu.c:1966
+#, c-format
+msgid "Cornu end %d too close to other end of connect track - reposition it"
+msgstr ""
+"Cornu-Ende %d zu dicht am anderen Ende des Gleises - anderere Position setzen"
+
+#: ../bin/ccornu.c:1971
+msgid "Modify Cornu"
+msgstr "Cornu-Kurve ändern"
+
+#: ../bin/ccornu.c:1986
+#, c-format
+msgid "Cornu Extension Create Failed for end %d"
+msgstr "Das Erzeugen einer Klothide aus dem Endpunkt %d ist nicht möglich"
+
+#: ../bin/ccornu.c:2078
+#, c-format
+msgid "Connected Track End Adjust for end %d failed"
+msgstr "Ende %d des Gleis ist verbunden und kann nicht angepasst werden"
+
+#: ../bin/ccornu.c:2089
+msgid "Modify Cornu Cancelled"
+msgstr "Änderung der Cornu-Kurve abbrechen"
+
+#: ../bin/ccornu.c:2246
+msgid "Left click - Start Cornu track"
+msgstr "Durch Drücken der linken Maustaste mit einer Cornu beginnen"
+
+#: ../bin/ccornu.c:2248
+msgid "Left click - Place Flextrack"
+msgstr "Linke Maustaste - Flexgleis setzen"
+
+#: ../bin/ccornu.c:2251
+msgid "Left click - join with Cornu track"
+msgstr "Durch Drücken der linken Maustaste mit einer Cornu-Kurve verbinden"
+
+#: ../bin/ccornu.c:2253
+msgid "Left click - join with Cornu track, Shift Left click - move to join"
+msgstr ""
+"Linke Maustaste - Verbinden mit Cornu-Gleis, Umschalten + linke Maustaste - "
+"Verschieben zum Verbinden"
+
+#: ../bin/ccornu.c:2284
+msgid "No valid open endpoint on that track"
+msgstr "Kein gültiger und unbenutzter Endpunkt auf diesem Gleis"
+
+#: ../bin/ccornu.c:2312 ../bin/ccornu.c:2324
+msgid "Drag arm in the direction of track"
+msgstr "Kontrollarm in Richtung des Gleises ziehen"
+
+#: ../bin/ccornu.c:2328
+msgid "No Unconnected Track End there"
+msgstr "Hier ist kein offenes Gleisende"
+
+#: ../bin/ccornu.c:2339 ../bin/ccornu.c:2363
+msgid "No Valid Track End there"
+msgstr "Hier ist kein gültiges Gleisende"
+
+#: ../bin/ccornu.c:2351
+msgid "Locked - Move 1st end point of Cornu track along track 1"
+msgstr ""
+"Fixiert - verschiebe den ersten Endpunkt des Cornu-Gleis entlang des ersten "
+"Gleises"
+
+#: ../bin/ccornu.c:2375
+msgid "Locked - Move 2nd end point of Cornu track along track 2"
+msgstr ""
+"Fixiert, verschiebe den zweiten Endpunkt des Cornu-Gleis entlang des zweiten "
+"Gleises"
+
+#: ../bin/ccornu.c:2449
+msgid "Track can't be split - so locked to endpoint"
+msgstr "Das Gleis kann nicht getrennt werden - daher am Endpunkt fixiert"
+
+#: ../bin/ccornu.c:2454
+msgid "Point not on track 1"
+msgstr "Der Punkt ist nicht auf Gleis 1"
+
+#: ../bin/ccornu.c:2492
+msgid "Pick other end of Cornu"
+msgstr "Anderes Ende der Cornu setzen"
+
+#: ../bin/ccornu.c:2494
+msgid ""
+"Select flextrack ends or anchors and drag, Enter to approve, Esc to Cancel"
+msgstr ""
+"Wählen Sie Flextrack-Enden oder Anker aus und ziehen Sie, Enter zum "
+"Bestätigen, Esc zum Abbrechen"
+
+#: ../bin/ccornu.c:2498
+msgid "Put other end of Cornu on a track with an unconnected end point"
+msgstr ""
+"Setze den aneren Endpunkt des Cornu-Gleis auf ein Gleis mit einem "
+"unverbundenen Endpunkt"
+
+#: ../bin/ccornu.c:2733 ../bin/ccornu.c:2946
+msgid "Not on a Track"
+msgstr "Nicht auf einem Gleis"
+
+#: ../bin/ccornu.c:2741
+msgid "Select a Track To Convert"
+msgstr "Gleis für das Umwandeln auswählen"
+
+#: ../bin/ccornu.c:2745
+msgid "Convert all Selected Tracks to Cornu Tracks?"
+msgstr "Sollen alle ausgewählten Gleise in Cornu umgewandelt werden?"
+
+#: ../bin/ccornu.c:2750
+msgid "Convert Cornu"
+msgstr "Cornu umwandeln"
+
+#: ../bin/ccornu.c:2902
+#, c-format
+msgid "Tracks Counts: %d converted %d unconvertible %d created %d deleted"
+msgstr ""
+"Anzahl der Gleise: %d umgewandelt, %d nicht umwandelbar, %d erstellt, %d "
+"entfernt"
+
+#: ../bin/ccornu.c:2902 ../bin/ccornu.c:3016
+msgid "OK"
+msgstr "Ok"
+
+#: ../bin/ccornu.c:2952
+msgid "Select a Cornu or Bezier Track To Convert to Fixed"
+msgstr ""
+"Wählen Sie eine Cornu- oder ein Bezier-Gleis um es festes Gleis zu wandeln"
+
+#: ../bin/ccornu.c:2956
+msgid "Convert all Selected Tracks to Fixed Tracks?"
+msgstr "Sollen alle ausgewählten Gleise in feste Gleise umgewandelt werden?"
+
+#: ../bin/ccornu.c:2965
+msgid "Convert Bezier and Cornu"
+msgstr "Bezier-Kurve oder Cornu umwandeln"
+
+#: ../bin/ccornu.c:3016
+#, c-format
+msgid "Tracks Counts: %d converted %d unconvertible %d deleted"
+msgstr "Anzahl der Gleise: %d umgewandelt, %d nicht umwandelbar, %d entfernt"
+
+#: ../bin/ccornu.c:3044
+msgid "Convert"
+msgstr "Umwandeln"
+
+#: ../bin/ccornu.c:3045
+msgid "Convert To Cornu"
+msgstr "In Cornu erstellen"
+
+#: ../bin/ccornu.c:3046
+msgid "Convert From Cornu"
+msgstr "Aus Cornu umwandeln"
+
+#: ../bin/ccurve.c:169
+msgid "Drag from endpoint in direction of curve - lock to track open endpoint"
+msgstr ""
+"Vom Endpunkt in Richtung der Kurve ziehen, an unverbundenen Endpunkt "
+"verbinden"
+
+#: ../bin/ccurve.c:171
+msgid "Drag from endpoint in direction of curve"
+msgstr "Vom Endpunkt in Richtung der Kurve ziehen"
+
+#: ../bin/ccurve.c:175
+msgid "Drag from endpoint to center - lock to track open endpoint"
+msgstr ""
+"Vom Endpunkt zum Mittelpunkt ziehen, an unverbundenen Endpunkt verbinden"
+
+#: ../bin/ccurve.c:177
+msgid "Drag from endpoint to center"
+msgstr "Vom Endpunkt zum Mittelpunkt ziehen"
+
+#: ../bin/ccurve.c:180
+msgid "Drag from center to endpoint"
+msgstr "Vom Mittelpunkt zum Endpunkt ziehen"
+
+#: ../bin/ccurve.c:183
+msgid "Drag from one to other end of chord"
+msgstr "Vom einen zum anderen Ende der Sehne ziehen"
+
+#: ../bin/ccurve.c:241
+msgid "End locked: Drag out curve start"
+msgstr "Ende fixiert, Anfang der Kurve ziehen"
+
+#: ../bin/ccurve.c:242 ../bin/ccurve.c:252 ../bin/ccurve.c:270
+msgid "End Position locked: Drag out curve start with Shift"
+msgstr "Ende fixiert, Anfang der Kurve mit Umschalt-Taste ziehen"
+
+#: ../bin/ccurve.c:243
+msgid "Drag along curve start"
+msgstr "Entlang der Anfangs der Kurve ziehen"
+
+#: ../bin/ccurve.c:251
+msgid "End locked: Drag out curve center"
+msgstr "Ende fixiert, Mittelpunkt der Kurve ziehen"
+
+#: ../bin/ccurve.c:253
+msgid "Drag out curve center"
+msgstr "Zum Mittelpunkt der Kurve ziehen"
+
+#: ../bin/ccurve.c:260
+msgid "Drag out from center to endpoint"
+msgstr "Vom Mittelpunkt zum Endpunkt ziehen"
+
+#: ../bin/ccurve.c:269
+msgid "End locked: Drag to other end of chord"
+msgstr "Ende fixiert, zum anderen Ende der Sehne ziehen"
+
+#: ../bin/ccurve.c:272
+msgid "Drag to other end of chord"
+msgstr "Zum anderen Ende der Sehne ziehen"
+
+#: ../bin/ccurve.c:327
+#, c-format
+msgid "Start Locked: Drag out curve start - Angle=%0.3f"
+msgstr "Anfang fixiert, Anfangspunkt der Kurve ziehen - Winkel=%0.3f"
+
+#: ../bin/ccurve.c:328
+#, c-format
+msgid "Drag out curve start - Angle=%0.3f"
+msgstr "Anfangspunkt der Kurve ziehen - Winkel=%0.3f"
+
+#: ../bin/ccurve.c:334
+#, c-format
+msgid "Tangent locked: Drag out center - Radius=%s Angle=%0.3f"
+msgstr "Gleistangente gesetzt: Ziehe zum Mittelpunkt - Radius=%s Winkel=%0.3f"
+
+#: ../bin/ccurve.c:335
+#, c-format
+msgid "Drag out center - Radius=%s Angle=%0.3f"
+msgstr "Ziehe zum Mittelpunkt - Radius=%s Winkel=%0.3f"
+
+#: ../bin/ccurve.c:341
+#, c-format
+msgid "Drag to Edge: Radius=%s Angle=%0.3f"
+msgstr "Ziehe zur Kante - Radius=%s Winkel=%0.3f"
+
+#: ../bin/ccurve.c:347
+#, c-format
+msgid "Start locked: Drag out chord length=%s angle=%0.3f"
+msgstr ""
+"Anfang fixiert, zum anderen Ende der Sehne ziehen Länge=%s Winkel=%0.3f"
+
+#: ../bin/ccurve.c:348
+#, c-format
+msgid "Drag out chord length=%s angle=%0.3f"
+msgstr "Sehne ziehen Länge=%s Winkel=%0.3f"
+
+#: ../bin/ccurve.c:403 ../bin/ccurve.c:561 ../bin/drawgeom.c:735
+msgid "Drag on Red arrows to adjust curve"
+msgstr "An den roten Pfeilen ziehen, um die Kurve anzupassen"
+
+#: ../bin/ccurve.c:501 ../bin/cjoin.c:210 ../bin/cmodify.c:576
+#: ../bin/cturntbl.c:580
+#, c-format
+msgid "Straight Track: Length=%s Angle=%0.3f"
+msgstr "Gleisgerade: Länge=%s Winkel=%0.3f"
+
+#: ../bin/ccurve.c:508 ../bin/cmodify.c:581 ../bin/drawgeom.c:618
+#: ../wlib/gtklib/ixhelp.c:235
+msgid "Back"
+msgstr "Zurück"
+
+#: ../bin/ccurve.c:527
+#, c-format
+msgid "Curved Track: Radius=%s Angle=%0.3f Length=%s"
+msgstr "Gleisbogen: Radius=%s Winkel=%0.3f Länge=%s"
+
+#: ../bin/ccurve.c:581 ../bin/cstraigh.c:162
+msgid "Create Straight Track"
+msgstr "Erstelle gerades Gleis"
+
+#: ../bin/ccurve.c:593
+msgid "Create Curved Track"
+msgstr "Erstelle Gleisbogen"
+
+#: ../bin/ccurve.c:664
+msgid "Elevation Difference"
+msgstr "Höhenunterschied"
+
+#: ../bin/ccurve.c:665 ../bin/cdraw.c:522 ../bin/cdraw.c:1445
+#: ../bin/cdraw.c:1591 ../bin/cdraw.c:2241 ../bin/cdraw.c:2440
+#: ../bin/cdraw.c:2454 ../bin/compound.c:545 ../bin/compound.c:550
+#: ../bin/compound.c:555 ../bin/compound.c:560 ../bin/ctodesgn.c:185
+#: ../bin/ctodesgn.c:186 ../bin/ctodesgn.c:187 ../bin/ctodesgn.c:188
+#: ../bin/ctodesgn.c:304 ../bin/ctodesgn.c:307 ../bin/ctodesgn.c:309
+#: ../bin/ctodesgn.c:370 ../bin/ctodesgn.c:371 ../bin/ctodesgn.c:376
+#: ../bin/ctodesgn.c:440 ../bin/ctodesgn.c:444 ../bin/ctodesgn.c:445
+#: ../bin/ctodesgn.c:451 ../bin/ctodesgn.c:620 ../bin/tbezier.c:247
+#: ../bin/tbezier.c:254 ../bin/tcornu.c:301 ../bin/tcurve.c:369
+msgid "Radius"
+msgstr "Radius"
+
+#: ../bin/ccurve.c:666 ../bin/tcurve.c:370
+msgid "Turns"
+msgstr "Windungen"
+
+#: ../bin/ccurve.c:667
+msgid "Angular Separation"
+msgstr "Winkelabstand"
+
+#: ../bin/ccurve.c:668 ../bin/celev.c:47 ../bin/compound.c:562
+#: ../bin/tbezier.c:259 ../bin/tcornu.c:308 ../bin/tcurve.c:376
+#: ../bin/tease.c:529 ../bin/tstraigh.c:91
+msgid "Grade"
+msgstr "Steigung"
+
+#: ../bin/ccurve.c:669
+msgid "Vertical Separation"
+msgstr "Vertikaler Abstand"
+
+#: ../bin/ccurve.c:671
+msgid "Total Length"
+msgstr "Gesamtlänge"
+
+#: ../bin/ccurve.c:747
+#, c-format
+msgid "Total Length %s"
+msgstr "Gesamtlänge %s"
+
+#: ../bin/ccurve.c:785 ../bin/ccurve.c:989 ../bin/tcurve.c:809
+msgid "Helix"
+msgstr "Gleiswendel"
+
+#: ../bin/ccurve.c:799
+msgid "Circle Radius"
+msgstr "Kreisradius"
+
+#: ../bin/ccurve.c:804
+msgid "Click on Circle Edge"
+msgstr "Auf den Rand des Kreis klicken"
+
+#: ../bin/ccurve.c:808
+msgid "Click on Circle Center"
+msgstr "Auf den Mittelpunkt des Kreises klicken"
+
+#: ../bin/ccurve.c:839
+msgid "Drag to Center"
+msgstr "Zum Mittelpunkt ziehen"
+
+#: ../bin/ccurve.c:843
+msgid "Drag to Edge"
+msgstr "Zum Rand ziehen"
+
+#: ../bin/ccurve.c:863 ../bin/ccurve.c:867
+#, c-format
+msgid "Radius=%s"
+msgstr "Radius=%s"
+
+#: ../bin/ccurve.c:888
+msgid "Create Helix Track"
+msgstr "Erstelle Gleiswendel"
+
+#: ../bin/ccurve.c:903
+msgid "Create Circle Track"
+msgstr "Erstelle Gleiskreis"
+
+#: ../bin/ccurve.c:958
+msgid "Cornu Curve"
+msgstr "Cornu"
+
+#: ../bin/ccurve.c:960
+msgid "Curve Track"
+msgstr "Gleisbogen"
+
+#: ../bin/ccurve.c:960
+msgid "Curve Tracks"
+msgstr "Gleisbögen"
+
+#: ../bin/ccurve.c:961
+msgid "Curve from End-Pt"
+msgstr "Bogen aus Endpunkten"
+
+#: ../bin/ccurve.c:962
+msgid "Curve from Tangent"
+msgstr "Bogen an Tangente"
+
+#: ../bin/ccurve.c:963
+msgid "Curve from Center"
+msgstr "Bogen um Mittelpunkt"
+
+#: ../bin/ccurve.c:964
+msgid "Curve from Chord"
+msgstr "Bogen aus Sehne"
+
+#: ../bin/ccurve.c:965 ../bin/cdraw.c:2582
+msgid "Bezier Curve"
+msgstr "Bezierkurve"
+
+#: ../bin/ccurve.c:968 ../bin/tcurve.c:643
+msgid "Circle Track"
+msgstr "Gleiskreis"
+
+#: ../bin/ccurve.c:968
+msgid "Circle Tracks"
+msgstr "Gleiskreise"
+
+#: ../bin/ccurve.c:969
+msgid "Fixed Radius Circle"
+msgstr "Kreis mit festem Radius"
+
+#: ../bin/ccurve.c:970
+msgid "Circle from Tangent"
+msgstr "Kreis an Tangente"
+
+#: ../bin/ccurve.c:971
+msgid "Circle from Center"
+msgstr "Kreis um Mittelpunkt"
+
+#: ../bin/cdraw.c:130
+msgid "Font Size must be > 0"
+msgstr "Schriftgröße muss größer als 0 sein"
+
+#: ../bin/cdraw.c:517
+msgid "First Point: X,Y"
+msgstr "Erster Punkt: X,Y"
+
+#: ../bin/cdraw.c:518 ../bin/tcurve.c:368
+msgid "Center: X,Y"
+msgstr "Mittelpunkt: X,Y"
+
+#: ../bin/cdraw.c:519 ../bin/cdraw.c:540 ../bin/cdraw.c:1435
+#: ../bin/cdraw.c:1580 ../bin/cdraw.c:2239 ../bin/cdraw.c:2461
+#: ../bin/cdraw.c:2481 ../bin/cdraw.c:2485 ../bin/compound.c:543
+#: ../bin/compound.c:548 ../bin/compound.c:553 ../bin/compound.c:558
+#: ../bin/compound.c:564 ../bin/cprint.c:155 ../bin/csignal.c:240
+#: ../bin/csignal.c:515 ../bin/ctodesgn.c:193 ../bin/ctodesgn.c:194
+#: ../bin/ctodesgn.c:195 ../bin/ctodesgn.c:197 ../bin/ctodesgn.c:242
+#: ../bin/ctodesgn.c:265 ../bin/ctodesgn.c:267 ../bin/ctodesgn.c:302
+#: ../bin/ctodesgn.c:305 ../bin/ctodesgn.c:331 ../bin/ctodesgn.c:334
+#: ../bin/ctodesgn.c:368 ../bin/ctodesgn.c:373 ../bin/ctodesgn.c:397
+#: ../bin/ctodesgn.c:401 ../bin/ctodesgn.c:438 ../bin/ctodesgn.c:442
+#: ../bin/ctodesgn.c:447 ../bin/ctodesgn.c:473 ../bin/ctodesgn.c:493
+#: ../bin/ctodesgn.c:514 ../bin/ctodesgn.c:621 ../bin/ctrain.c:184
+#: ../bin/tease.c:524 ../bin/tstraigh.c:90
+msgid "Angle"
+msgstr "Winkel"
+
+#: ../bin/cdraw.c:520 ../bin/tcurve.c:374
+msgid "CCW Angle"
+msgstr "Winkel (gegen Uhrzeigersinn)"
+
+#: ../bin/cdraw.c:521 ../bin/tcurve.c:375
+msgid "CW Angle"
+msgstr "Winkel (im Uhrzeigersinn)"
+
+#: ../bin/cdraw.c:524 ../bin/cdraw.c:1442 ../bin/cdraw.c:1564
+#: ../bin/cprint.c:130
+msgid "Height"
+msgstr "Seitenhöhe"
+
+#: ../bin/cdraw.c:525 ../bin/cdraw.c:1440 ../bin/cdraw.c:1563
+#: ../bin/cdraw.c:2236 ../bin/cdraw.c:2498 ../bin/ctrain.c:186
+#: ../bin/dcar.c:2233
+msgid "Width"
+msgstr "Breite"
+
+#: ../bin/cdraw.c:526
+msgid "Keep Origin Relative"
+msgstr "Relativer Bezugspunkt"
+
+#: ../bin/cdraw.c:527
+msgid "Rot Origin: X,Y"
+msgstr "Drehzentrum: X,Y"
+
+#: ../bin/cdraw.c:528 ../bin/cdraw.c:1449
+msgid "Rotate Angle"
+msgstr "Drehwinkel"
+
+#: ../bin/cdraw.c:529
+msgid "Point Count"
+msgstr "Anzahl der Punkte"
+
+#: ../bin/cdraw.c:530 ../bin/cdraw.c:2214 ../bin/ctodesgn.c:207
+#: ../bin/tbezier.c:261
+msgid "Line Width"
+msgstr "Strichdicke"
+
+#: ../bin/cdraw.c:531 ../bin/cdraw.c:2243 ../bin/tbezier.c:260
+msgid "Line Type"
+msgstr "Linienart"
+
+#: ../bin/cdraw.c:532 ../bin/cdraw.c:2216 ../bin/cdraw.c:2218
+#: ../bin/cdraw.c:2316 ../bin/cdraw.c:2349 ../bin/cmisc.c:125 ../bin/ctext.c:68
+#: ../bin/ctext.c:147 ../bin/ctodesgn.c:208 ../bin/dcar.c:2229
+#: ../bin/dlayer.c:485 ../bin/doption.c:558
+msgid "Color"
+msgstr "Farbe"
+
+#: ../bin/cdraw.c:533
+msgid "Filled"
+msgstr "Gefüllt"
+
+#: ../bin/cdraw.c:534
+msgid "Open End"
+msgstr "Offenes Ende"
+
+#: ../bin/cdraw.c:535 ../bin/cmisc.c:148 ../bin/cmisc.c:149 ../bin/cmisc.c:150
+#: ../bin/cmisc.c:151 ../bin/ctext.c:70 ../bin/ctext.c:148
+msgid "Boxed"
+msgstr "Eingerahmt"
+
+#: ../bin/cdraw.c:536 ../bin/cdraw.c:1116 ../bin/cdraw.c:2250
+msgid "Lumber"
+msgstr "Holzleiste"
+
+#: ../bin/cdraw.c:537
+msgid "Orientation"
+msgstr "Ausrichtung"
+
+#: ../bin/cdraw.c:538 ../bin/cdraw.c:2232
+#: ../../../../build/work/app/bin/bllnhlp.c:588
+msgid "Size"
+msgstr "Größe"
+
+#: ../bin/cdraw.c:539 ../bin/compound.c:563 ../bin/tease.c:523
+msgid "Origin: X,Y"
+msgstr "Ausgangspunkt: X,Y"
+
+#: ../bin/cdraw.c:541 ../bin/ctext.c:66 ../bin/ctext.c:146
+msgid "Font Size"
+msgstr "Schriftgröße"
+
+#: ../bin/cdraw.c:542 ../bin/cdraw.c:1262 ../bin/ctext.c:263
+msgid "Text"
+msgstr "Text"
+
+#: ../bin/cdraw.c:543 ../bin/cmisc.c:144 ../bin/compound.c:565
+#: ../bin/tcurve.c:377 ../bin/tease.c:530 ../bin/tstraigh.c:92
+msgid "Pivot"
+msgstr "Drehpunkt"
+
+#: ../bin/cdraw.c:544 ../bin/compound.c:571 ../bin/cturntbl.c:253
+#: ../bin/doption.c:139 ../bin/doption.c:140 ../bin/tbezier.c:263
+#: ../bin/tcornu.c:309 ../bin/tcurve.c:378 ../bin/tease.c:531
+#: ../bin/tstraigh.c:93 ../../../../build/work/app/bin/bllnhlp.c:666
+#: ../../../../build/work/app/bin/bllnhlp.c:667
+#: ../../../../build/work/app/bin/bllnhlp.c:668
+#: ../../../../build/work/app/bin/bllnhlp.c:669
+#: ../../../../build/work/app/bin/bllnhlp.c:670
+#: ../../../../build/work/app/bin/bllnhlp.c:671
+#: ../../../../build/work/app/bin/bllnhlp.c:672
+#: ../../../../build/work/app/bin/bllnhlp.c:673
+#: ../../../../build/work/app/bin/bllnhlp.c:674
+#: ../../../../build/work/app/bin/bllnhlp.c:675
+#: ../../../../build/work/app/bin/bllnhlp.c:676
+#: ../../../../build/work/app/bin/bllnhlp.c:677
+#: ../../../../build/work/app/bin/bllnhlp.c:678
+#: ../../../../build/work/app/bin/bllnhlp.c:679
+#: ../../../../build/work/app/bin/bllnhlp.c:680
+#: ../../../../build/work/app/bin/bllnhlp.c:681
+#: ../../../../build/work/app/bin/bllnhlp.c:682
+#: ../../../../build/work/app/bin/bllnhlp.c:683
+#: ../../../../build/work/app/bin/bllnhlp.c:684
+#: ../../../../build/work/app/bin/bllnhlp.c:685
+msgid "Layer"
+msgstr "Ebene"
+
+#: ../bin/cdraw.c:1101
+msgid "Straight Line"
+msgstr "Gerade Linie"
+
+#: ../bin/cdraw.c:1106 ../bin/cdraw.c:2574
+msgid "Dimension Line"
+msgstr "Maßlinie"
+
+#: ../bin/cdraw.c:1127 ../bin/cdraw.c:2251 ../bin/cdraw.c:2576
+msgid "Table Edge"
+msgstr "Tischkante"
+
+#: ../bin/cdraw.c:1147 ../bin/cdraw.c:2256 ../bin/cdraw.c:2257
+#: ../bin/cdraw.c:2258
+msgid "Circle"
+msgstr "Kreis"
+
+#: ../bin/cdraw.c:1158
+msgid "Curved Line"
+msgstr "Gebogene Linie"
+
+#: ../bin/cdraw.c:1174 ../bin/cdraw.c:2261 ../bin/cdraw.c:2262
+#: ../bin/cdraw.c:2263
+msgid "Filled Circle"
+msgstr "Gefüllter Kreis"
+
+#: ../bin/cdraw.c:1193
+msgid "Rectangle"
+msgstr "Rechteck"
+
+#: ../bin/cdraw.c:1207 ../bin/cdraw.c:2267
+msgid "Polyline"
+msgstr "Polylinie"
+
+#: ../bin/cdraw.c:1211 ../bin/cdraw.c:2260 ../bin/cdraw.c:2593
+msgid "Polygon"
+msgstr "Vieleck"
+
+#: ../bin/cdraw.c:1229
+msgid "Filled Rectangle"
+msgstr "Gefülltes Rechteck"
+
+#: ../bin/cdraw.c:1242 ../bin/cdraw.c:2265 ../bin/cdraw.c:2594
+msgid "Filled Polygon"
+msgstr "Gefülltes Ploygon"
+
+#: ../bin/cdraw.c:1268
+#, c-format
+msgid "%s(%d) Layer=%d"
+msgstr "%s (%d) Ebene=%d"
+
+#: ../bin/cdraw.c:1288 ../bin/cdraw.c:2319 ../bin/compound.c:956
+#: ../bin/doption.c:134 ../bin/tbezier.c:458
+msgid "Solid"
+msgstr "Gefüllt"
+
+#: ../bin/cdraw.c:1289 ../bin/cdraw.c:2321 ../bin/compound.c:957
+#: ../bin/doption.c:131 ../bin/tbezier.c:459
+msgid "Dash"
+msgstr "Gestrichelt"
+
+#: ../bin/cdraw.c:1290 ../bin/cdraw.c:2320 ../bin/compound.c:958
+#: ../bin/tbezier.c:460
+msgid "Dot"
+msgstr "Punkt"
+
+#: ../bin/cdraw.c:1291 ../bin/compound.c:959 ../bin/tbezier.c:461
+msgid "DashDot"
+msgstr "Strich Punkt"
+
+#: ../bin/cdraw.c:1292 ../bin/compound.c:960 ../bin/tbezier.c:462
+msgid "DashDotDot"
+msgstr "Strich Punkt Punkt"
+
+#: ../bin/cdraw.c:1293 ../bin/compound.c:961 ../bin/tbezier.c:463
+msgid "CenterDot"
+msgstr "Mittellinie"
+
+#: ../bin/cdraw.c:1294 ../bin/compound.c:962 ../bin/tbezier.c:464
+msgid "PhantomDot"
+msgstr "Verborgene Linie"
+
+#: ../bin/cdraw.c:1299 ../bin/cdraw.c:2367
+msgid "Tiny"
+msgstr "Winzig"
+
+#: ../bin/cdraw.c:1300 ../bin/cdraw.c:2368
+msgid "Small"
+msgstr "Klein"
+
+#: ../bin/cdraw.c:1301 ../bin/cdraw.c:2369
+msgid "Medium"
+msgstr "Mittel"
+
+#: ../bin/cdraw.c:1302 ../bin/cdraw.c:2370
+msgid "Large"
+msgstr "Groß"
+
+#: ../bin/cdraw.c:1438
+msgid "Relative Angle"
+msgstr "Relativer Winkel"
+
+#: ../bin/cdraw.c:1447 ../bin/cdraw.c:1595 ../bin/cdraw.c:2455
+msgid "Arc Angle"
+msgstr "Bogenwinkel"
+
+#: ../bin/cdraw.c:1452
+msgid "Rot Center X"
+msgstr "Drehzentrum X"
+
+#: ../bin/cdraw.c:1454
+msgid "Rot Center Y"
+msgstr "Drehzentrum Y"
+
+#: ../bin/cdraw.c:1551
+msgid "Seg Lth"
+msgstr "Segment Länge"
+
+#: ../bin/cdraw.c:1552
+msgid "Rel Ang"
+msgstr "Rel. Winkel"
+
+#: ../bin/cdraw.c:2221 ../bin/cdraw.c:2223 ../bin/cdraw.c:2347
+msgid "Lumber Type"
+msgstr "Leistenart"
+
+#: ../bin/cdraw.c:2248
+msgid "Straight"
+msgstr "Gerade"
+
+#: ../bin/cdraw.c:2249
+msgid "Dimension"
+msgstr "Abmessung"
+
+#: ../bin/cdraw.c:2252 ../bin/cdraw.c:2253 ../bin/cdraw.c:2254
+#: ../bin/cdraw.c:2255
+msgid "Curved"
+msgstr "Gebogen"
+
+#: ../bin/cdraw.c:2259 ../bin/cdraw.c:2591
+msgid "Box"
+msgstr "Rechteck"
+
+#: ../bin/cdraw.c:2264 ../bin/cdraw.c:2592
+msgid "Filled Box"
+msgstr "Gefülltes Rechteck"
+
+#: ../bin/cdraw.c:2266 ../bin/tbezier.c:455
+msgid "Bezier Line"
+msgstr "Bezierlinie"
+
+#: ../bin/cdraw.c:2314
+#, c-format
+msgid "%s Line Width"
+msgstr "%s Strichdicke"
+
+#: ../bin/cdraw.c:2317 ../bin/dcar.c:2202 ../bin/dcar.c:4366 ../bin/dcar.c:4371
+msgid "Type"
+msgstr "Typ"
+
+#: ../bin/cdraw.c:2322
+msgid "Dash-Dot"
+msgstr "Strichpunktiert"
+
+#: ../bin/cdraw.c:2323
+msgid "Dash-Dot-Dot"
+msgstr "Strich-Punkt-Punkt"
+
+#: ../bin/cdraw.c:2336
+#, c-format
+msgid "%s Color"
+msgstr "%s Farbe"
+
+#: ../bin/cdraw.c:2365
+msgid "Dimension Line Size"
+msgstr "Maßliniengröße"
+
+#: ../bin/cdraw.c:2377
+msgid "Drag to create Table Edge"
+msgstr "Durch Ziehen die Tischkante erstellen"
+
+#: ../bin/cdraw.c:2479
+msgid "Seg Length"
+msgstr "Segmentlänge"
+
+#: ../bin/cdraw.c:2483
+msgid "Rel Angle"
+msgstr "Relativer Winkel"
+
+#: ../bin/cdraw.c:2573
+msgid "Line"
+msgstr "Linie"
+
+#: ../bin/cdraw.c:2573
+msgid "Draw Line"
+msgstr "Zeichne Linie"
+
+#: ../bin/cdraw.c:2574
+msgid "Draw Dimension Line"
+msgstr "Zeichne Maßlinie"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:363
+#: ../bin/cdraw.c:2575 ../../../../build/work/app/i18n/custmsg.h:1251
+msgid "Benchwork"
+msgstr "Unterbau"
+
+#: ../bin/cdraw.c:2575
+msgid "Draw Benchwork"
+msgstr "Zeichne Unterbau"
+
+#: ../bin/cdraw.c:2576
+msgid "Draw Table Edge"
+msgstr "Zeichne Tischkante"
+
+#: ../bin/cdraw.c:2578
+msgid "Curve End"
+msgstr "Kurvenenden"
+
+#: ../bin/cdraw.c:2578
+msgid "Draw Curve from End"
+msgstr "Zeichne Kurve durch Enden"
+
+#: ../bin/cdraw.c:2579
+msgid "Curve Tangent"
+msgstr "Kurve Tangente"
+
+#: ../bin/cdraw.c:2579
+msgid "Draw Curve from Tangent"
+msgstr "Zeichne Kurve an Tangente"
+
+#: ../bin/cdraw.c:2580
+msgid "Curve Center"
+msgstr "Kurve um Mittelpunkt"
+
+#: ../bin/cdraw.c:2580
+msgid "Draw Curve from Center"
+msgstr "Zeichne Kurve um Mittelpunkt"
+
+#: ../bin/cdraw.c:2581
+msgid "Curve Chord"
+msgstr "Kurve durch Sehne"
+
+#: ../bin/cdraw.c:2581
+msgid "Draw Curve from Chord"
+msgstr "Zeichne Kurve durch Sehne"
+
+#: ../bin/cdraw.c:2582
+msgid "Draw Bezier"
+msgstr "Zeichne Bezier"
+
+#: ../bin/cdraw.c:2585
+msgid "Circle Tangent"
+msgstr "Kreis an Tangente"
+
+#: ../bin/cdraw.c:2585
+msgid "Draw Circle from Tangent"
+msgstr "Zeichne Kreis an Tangente"
+
+#: ../bin/cdraw.c:2586
+msgid "Circle Center"
+msgstr "Kreismittelpunkt"
+
+#: ../bin/cdraw.c:2586
+msgid "Draw Circle from Center"
+msgstr "Zeichne Kreis um Mittelpunkt"
+
+#: ../bin/cdraw.c:2588
+msgid "Circle Filled Tangent"
+msgstr "Gefüllter Kreis an Tangente"
+
+#: ../bin/cdraw.c:2588
+msgid "Draw Filled Circle from Tangent"
+msgstr "Gefüllter Kreis an Tangente"
+
+#: ../bin/cdraw.c:2589
+msgid "Circle Filled Center"
+msgstr "Gefüllter Kreis Mittelpunkt"
+
+#: ../bin/cdraw.c:2589
+msgid "Draw Filled Circle from Center"
+msgstr "Gefüllter Kreis von Mittelpunkt"
+
+#: ../bin/cdraw.c:2591
+msgid "Draw Box"
+msgstr "Zeichne Rechteck"
+
+#: ../bin/cdraw.c:2592
+msgid "Draw Filled Box"
+msgstr "Zeichne gefülltes Rechteck"
+
+#: ../bin/cdraw.c:2593
+msgid "Draw Polygon"
+msgstr "Zeichne Vieleck"
+
+#: ../bin/cdraw.c:2594
+msgid "Draw Filled Polygon"
+msgstr "Gefülltes Polygon zeichnen"
+
+#: ../bin/cdraw.c:2595
+msgid "PolyLine"
+msgstr "Polylinie"
+
+#: ../bin/cdraw.c:2595
+msgid "Draw PolyLine"
+msgstr "Zeichne Polylinie"
+
+#: ../bin/cdraw.c:2612
+msgid "Straight Objects"
+msgstr "Gerade Objekte"
+
+#: ../bin/cdraw.c:2612
+msgid "Draw Straight Objects"
+msgstr "Zeichne gerade Objekte"
+
+#: ../bin/cdraw.c:2613
+msgid "Curved Lines"
+msgstr "Gebogene Linien"
+
+#: ../bin/cdraw.c:2613
+msgid "Draw Curved Lines"
+msgstr "Zeichne gebogene Linien"
+
+#: ../bin/cdraw.c:2614
+msgid "Circle Lines"
+msgstr "Kreislinien"
+
+#: ../bin/cdraw.c:2614
+msgid "Draw Circles"
+msgstr "Zeichne Kreise"
+
+#: ../bin/cdraw.c:2615
+msgid "Shapes"
+msgstr "Formen"
+
+#: ../bin/cdraw.c:2615
+msgid "Draw Shapes"
+msgstr "Zeichne Formen"
+
+#: ../bin/cdraw.c:2903
+msgid "Close Polygon - 'g'"
+msgstr "Schliesse Ploygon - 'g'"
+
+#: ../bin/cdraw.c:2904
+msgid "Make PolyLine - 'l'"
+msgstr "Erstelle PolyLine - 'I'"
+
+#: ../bin/cdraw.c:2905
+msgid "Fill Polygon - 'f'"
+msgstr "Gefülltes Polygon - 'f'"
+
+#: ../bin/cdraw.c:2906
+msgid "Empty Polygon - 'u'"
+msgstr "Leeres Polygon - 'u'."
+
+#: ../bin/cdraw.c:2908
+msgid "Points Mode - 'p'"
+msgstr "Punkte-Modus - 'p"
+
+#: ../bin/cdraw.c:2909
+msgid "Delete Selected Point - 'Del'"
+msgstr "Ausgewählten Punkt löschen - 'Entf'."
+
+#: ../bin/cdraw.c:2910
+msgid "Vertex Point - 'v'"
+msgstr "Eckpunkt - 'v"
+
+#: ../bin/cdraw.c:2911
+msgid "Round Corner - 'r'"
+msgstr "Runde Ecke - 'r'."
+
+#: ../bin/cdraw.c:2912
+msgid "Smooth Corner - 's'"
+msgstr "Abgerundete Ecke - 's"
+
+#: ../bin/cdraw.c:2914 ../bin/cselect.c:3354
+msgid "LineType..."
+msgstr "Linienart..."
+
+#: ../bin/cdraw.c:2915 ../bin/cselect.c:3355
+msgid "Solid Line"
+msgstr "Durchgezogene Linie"
+
+#: ../bin/cdraw.c:2916 ../bin/cselect.c:3356
+msgid "Dashed Line"
+msgstr "Gestrichelte Linie"
+
+#: ../bin/cdraw.c:2917 ../bin/cselect.c:3357
+msgid "Dotted Line"
+msgstr "Gepunktete Linie"
+
+#: ../bin/cdraw.c:2918
+msgid "Dash-Dot Line"
+msgstr "Strich-Punkt Linie"
+
+#: ../bin/cdraw.c:2919
+msgid "Dash-Dot-Dot Line"
+msgstr "Strich-Punkt-Punkt Linie"
+
+#: ../bin/cdraw.c:2920
+msgid "Center-Dot Line"
+msgstr "Mittellinie"
+
+#: ../bin/cdraw.c:2921
+msgid "Phantom-Dot Line"
+msgstr "Verborgene Linie"
+
+#: ../bin/cdraw.c:2923
+msgid "Origin Mode - 'o'"
+msgstr "Bezugs-Modus - \"o\"."
+
+#: ../bin/cdraw.c:2924
+msgid "Reset Origin - '0'"
+msgstr "Bezugspunkt zurücksetzen - '0'."
+
+#: ../bin/cdraw.c:2925
+msgid "Origin to Selected - 'l'"
+msgstr "Ausgewählter als Bezugspunkt - 'l'."
+
+#: ../bin/cdraw.c:2926
+msgid "Origin to Middle - 'm'"
+msgstr "Bezugs-Modus - \"m\"."
+
+#: ../bin/celev.c:46 ../bin/cprofile.c:1536 ../bin/csplit.c:155
+#: ../bin/csplit.c:160 ../bin/dease.c:67 ../bin/doption.c:132
+#: ../bin/doption.c:134
+msgid "None"
+msgstr "Kein"
+
+#: ../bin/celev.c:46
+msgid "Defined"
+msgstr "Fest"
+
+#: ../bin/celev.c:46
+msgid "Hidden"
+msgstr "Versteckt"
+
+#: ../bin/celev.c:47
+msgid "Computed"
+msgstr "Berechnet"
+
+#: ../bin/celev.c:47
+msgid "Station"
+msgstr "Bahnhof"
+
+#: ../bin/celev.c:47 ../bin/cprofile.c:1534 ../bin/dcmpnd.c:75
+msgid "Ignore"
+msgstr "Ignorieren"
+
+#: ../bin/celev.c:219
+msgid "Set Elevation"
+msgstr "Höhe festlegen"
+
+#: ../bin/celev.c:312 ../bin/celev.c:319 ../bin/celev.c:322
+#, c-format
+msgid "Undefined"
+msgstr "Undefiniert"
+
+#: ../bin/celev.c:378 ../bin/celev.c:514
+msgid "Elevation"
+msgstr "Höhe"
+
+#: ../bin/celev.c:378 ../bin/cmisc.c:459 ../bin/dcontmgm.c:299
+#: ../bin/dcustmgm.c:395 ../bin/dlayer.c:1124 ../bin/dpricels.c:154
+#: ../bin/filenoteui.c:249 ../bin/linknoteui.c:182
+#: ../bin/paramfilesearch_ui.c:396 ../bin/textnoteui.c:171
+msgid "Done"
+msgstr "Fertig"
+
+#: ../bin/celev.c:390 ../bin/celev.c:445 ../bin/celev.c:447 ../bin/celev.c:466
+msgid "Click on end, +Shift to split, +Ctrl to move description"
+msgstr ""
+"Klicken Sie auf ein Ende, +Umschalten zum Teilen, +Strg zum Verschieben der "
+"Beschreibung"
+
+#: ../bin/celev.c:410
+msgid "Move to end or track crossing +Shift to split"
+msgstr "Zum Ende oder einer Kreuzung bewegen,, +Umschalten zum Teilen"
+
+#: ../bin/celev.c:414
+msgid "Move to end or track crossing"
+msgstr "Zum Ende oder einer Kreuzung bewegen"
+
+#: ../bin/celev.c:423
+#, c-format
+msgid "Crossing - First %0.3f, Second %0.3f, Clearance %0.3f - Click to Split"
+msgstr ""
+"Kreuzung - Erstes %0.3f, Zweites %0.3f, Abstand %0.3f - Klicken Sie zum "
+"Teilen"
+
+#: ../bin/celev.c:425
+#, c-format
+msgid "Crossing - First %0.3f, Second %0.3f, Clearance %0.3f"
+msgstr "Kreuzung - Erstes %0.3f, Zweites %0.3f, Abstand %0.3f"
+
+#: ../bin/celev.c:436
+#, c-format
+msgid "Track End elevation %0.3f"
+msgstr "Höhe des Gleisendpunktes %0.3f"
+
+#: ../bin/celev.c:439
+#, c-format
+msgid "Click to split here - elevation %0.3f"
+msgstr "Klicken Sie um hier zu teilen - Höhe %0.3f"
+
+#: ../bin/celev.c:442
+#, c-format
+msgid "Track Point elevation %0.3f"
+msgstr "Höhe der Gleisposition %0.3f"
+
+#: ../bin/celev.c:470
+msgid "Point selected!"
+msgstr "Punkt ausgewählt!"
+
+#: ../bin/celev.c:473
+msgid "Split track"
+msgstr "Gleis trennen"
+
+#: ../bin/celev.c:478
+msgid "Track split!"
+msgstr "Gleis aufgetrennt!"
+
+#: ../bin/cgroup.c:592
+msgid "Ungroup Object"
+msgstr "Gruppierung aufheben"
+
+#: ../bin/cgroup.c:604
+#, c-format
+msgid "%d objects ungrouped"
+msgstr "%d Gruppierungen aufgelöst"
+
+#: ../bin/cgroup.c:606
+msgid "No objects ungrouped"
+msgstr "Keine Gruppierungen aufgelöst"
+
+#: ../bin/cgroup.c:617
+msgid "Replace with new group?"
+msgstr "Durch neue Gruppe ersetzen?"
+
+#: ../bin/cgroup.c:623 ../bin/compound.c:566 ../bin/cstruct.c:69
+#: ../bin/ctodesgn.c:199 ../bin/ctodesgn.c:2921 ../bin/cturnout.c:83
+#: ../bin/dcar.c:2194 ../bin/dcar.c:4366 ../bin/dcar.c:4371 ../bin/dcmpnd.c:456
+#: ../bin/dcustmgm.c:59 ../../../../build/work/app/bin/bllnhlp.c:370
+#: ../../../../build/work/app/bin/bllnhlp.c:565
+msgid "Manufacturer"
+msgstr "Hersteller"
+
+#: ../bin/cgroup.c:624 ../bin/cmisc.c:459 ../bin/cstruct.c:69
+#: ../bin/ctodesgn.c:2922 ../bin/ctodesgn.c:2923 ../bin/ctrain.c:187
+#: ../bin/cturnout.c:83 ../bin/dcar.c:2210 ../bin/dcar.c:4367
+#: ../bin/dcar.c:4372 ../bin/dcmpnd.c:457 ../bin/dcustmgm.c:60
+#: ../bin/denum.c:182 ../bin/denum.c:183 ../bin/denum.c:186
+#: ../../../../build/work/app/bin/bllnhlp.c:371
+msgid "Description"
+msgstr "Beschreibung"
+
+#: ../bin/cgroup.c:625 ../bin/dcmpnd.c:458
+msgid "#"
+msgstr "Nr."
+
+#: ../bin/cgroup.c:626 ../bin/compound.c:570
+msgid "# Segments"
+msgstr "Anzahl Segmente"
+
+#: ../bin/cgroup.c:628
+msgid "Offset X,Y:"
+msgstr "Abstand X,Y:"
+
+#: ../bin/cgroup.c:1235
+msgid "No endpts"
+msgstr "Keine Endpunkte"
+
+#: ../bin/cgroup.c:1350
+msgid "No paths"
+msgstr "Keine Wege"
+
+#: ../bin/cgroup.c:1619 ../bin/cgroup.c:1669
+msgid "Group Tracks"
+msgstr "Gleise gruppieren"
+
+#: ../bin/cgroup.c:1729
+msgid "Group Objects"
+msgstr "Objekte gruppieren"
+
+#: ../bin/chndldto.c:70
+msgid "Place frog and drag angle"
+msgstr "Herzstück festlegen und auf Winkel ziehen"
+
+#: ../bin/chndldto.c:87
+msgid "frog"
+msgstr "Herzstück"
+
+#: ../bin/chndldto.c:93
+msgid "Drag to set angle"
+msgstr "Durch Ziehen den Winkel festlegen"
+
+#: ../bin/chndldto.c:132
+#, c-format
+msgid "Angle = %0.2f Frog# = %0.2f"
+msgstr "Winkel = %0.2f Steigung = %0.2f"
+
+#: ../bin/chndldto.c:134
+msgid "Frog angle is too close to 0"
+msgstr "Herzstückwinkel ist zu nahe bei 0"
+
+#: ../bin/chndldto.c:137
+msgid "Select point position"
+msgstr "Position des Punktes auswählen"
+
+#: ../bin/chndldto.c:149 ../bin/chndldto.c:174
+msgid "points"
+msgstr "Punkte"
+
+#: ../bin/chndldto.c:271
+#, c-format
+msgid "Length = %0.2f Angle = %0.2f Frog# = %0.2f"
+msgstr "Länge = %0.2f Winkel = %0.2f Steigung=%0.2f"
+
+#: ../bin/chndldto.c:274
+msgid "Create Hand Laid Turnout"
+msgstr "Erstelle eine Selbstbauweiche"
+
+#: ../bin/chndldto.c:358
+msgid "HandLaidTurnout"
+msgstr "Selbstbauweiche"
+
+#: ../bin/cjoin.c:166
+#, c-format
+msgid "Curved Track: Radius=%s Length=%s"
+msgstr "Gleisbogen: Radius=%s Länge=%s"
+
+#: ../bin/cjoin.c:252
+#, c-format
+msgid "Curved Track: Radius=%s Length=%s Angle=%0.3f"
+msgstr "Gleisbogen: Radius=%s Länge=%s Winkel=%0.3f"
+
+#: ../bin/cjoin.c:348
+#, c-format
+msgid "Track (%d) is too short for transition-curve by %0.3f"
+msgstr "Gleis (%d) ist für den Übergangsbogen um %0.3f zu kurz"
+
+#: ../bin/cjoin.c:366
+#, c-format
+msgid "Connecting track is too short by %0.3f"
+msgstr "Verbindungsgleis ist um %0.3f zu kurz"
+
+#: ../bin/cjoin.c:410
+msgid "Click on an unselected End-Point"
+msgstr "Einen nicht ausgewählten Endpunkt anklicken"
+
+#: ../bin/cjoin.c:411
+msgid "Click on a selected End-Point"
+msgstr "Einen ausgewählten Endpunkt anclicken"
+
+#: ../bin/cjoin.c:417
+msgid "unselected"
+msgstr "nicht ausgewählt"
+
+#: ../bin/cjoin.c:417 ../bin/cprint.c:161
+msgid "selected"
+msgstr "ausgewählt"
+
+#: ../bin/cjoin.c:474
+msgid "Left click - Select first draw object end"
+msgstr "Linksklick - Ende des ersten Zeichenobjektes auswählen"
+
+#: ../bin/cjoin.c:513 ../bin/cjoin.c:539
+msgid "Not a line - Try again"
+msgstr "Keine Linie - Versuchen Sie es erneut"
+
+#: ../bin/cjoin.c:535
+msgid "Left click - Select second object end"
+msgstr "Linksklick - Ende des zweite Objektes auswählen"
+
+#: ../bin/cjoin.c:547
+msgid "Same draw object and same endpoint - Try again"
+msgstr "Gleiches Zeichenobjekt und gleicher Endpunkt - Versuchen Sie es erneut"
+
+#: ../bin/cjoin.c:581
+msgid "Create PolyLine"
+msgstr "Erstelle Polylinie"
+
+#: ../bin/cjoin.c:654 ../bin/cjoin.c:901
+msgid "Desired Radius"
+msgstr "Gewünschter Radius"
+
+#: ../bin/cjoin.c:823
+msgid "Left click - join with track"
+msgstr "Linke Maustaste - Verbinden mit neuem Gleis"
+
+#: ../bin/cjoin.c:825
+msgid "Left click - join with track, Shift Left click - move to join"
+msgstr ""
+"Linke Maustaste - Verbinden mit neuem Gleis, Umschalten + linke Maustaste - "
+"Verschieben zum Verbinden"
+
+#: ../bin/cjoin.c:896 ../bin/cjoin.c:1304 ../bin/cjoin.c:1311
+msgid "Select 2nd track"
+msgstr "Zweites Gleis auswählen"
+
+#: ../bin/cjoin.c:1113
+msgid "Beyond end of 2nd track"
+msgstr "Außerhalb des zweiten Gleises"
+
+#: ../bin/cjoin.c:1148
+msgid "Beyond end of 1st track"
+msgstr "Außerhalb des ersten Gleises"
+
+#: ../bin/cjoin.c:1170
+msgid "First Track Type not supported for non-Cornu Join"
+msgstr "Das erste Gleis kann nur über Cornu-Kurven verbunden werden"
+
+#: ../bin/cjoin.c:1177
+msgid "First "
+msgstr "Erste "
+
+#: ../bin/cjoin.c:1202
+msgid "Second Track Type not supported for non-Cornu Join"
+msgstr "Das zweite Gleis kann nur über Cornu-Kurven verbunden werden"
+
+#: ../bin/cjoin.c:1209
+msgid "Second "
+msgstr "Zweite "
+
+#: ../bin/cjoin.c:1223 ../bin/track.c:2270 ../bin/track.c:2306
+#: ../bin/track.c:2372
+msgid "Connecting "
+msgstr "Verbinde "
+
+#: ../bin/cjoin.c:1314
+msgid "Join Tracks"
+msgstr "Gleise zusammenfügen"
+
+#: ../bin/cjoin.c:1396
+msgid "Join"
+msgstr "Verbinden"
+
+#: ../bin/cjoin.c:1397
+msgid "Join Track"
+msgstr "Gleise zusammenfügen"
+
+#: ../bin/cjoin.c:1398
+msgid "Join Lines"
+msgstr "Linien zusammenfügen"
+
+#: ../bin/cmisc.c:59
+msgid "Middle"
+msgstr "Mittel"
+
+#: ../bin/cmisc.c:59 ../bin/macro.c:98
+msgid "End"
+msgstr "Ende"
+
+#: ../bin/cmisc.c:242 ../bin/cmodify.c:349 ../bin/compound.c:664
+#: ../bin/ctrain.c:218
+msgid "Change Track"
+msgstr "Gleis ändern"
+
+#: ../bin/cmisc.c:572
+msgid "Select track to describe"
+msgstr "Zu beschreibendes Gleis auswählen"
+
+#: ../bin/cmisc.c:653 ../bin/doption.c:235
+msgid "Properties"
+msgstr "Eigenschaften"
+
+#: ../bin/cmisc2.c:52
+msgid "Bridge"
+msgstr "Brücke"
+
+#: ../bin/cmodify.c:198 ../bin/cmodify.c:467
+msgid "Modify Track"
+msgstr "Gleis bearbeiten"
+
+#: ../bin/cmodify.c:262
+msgid ""
+"Select a track to modify, Left-Click change length, Right-Click to add "
+"flextrack"
+msgstr ""
+"Wählen Sie ein Gleis zum Verändern aus, ändern Sie mit der linken Maustaste "
+"die Länge, fügen Sie mit der rechten Maustaste ein Flexgleis hinzu"
+
+#: ../bin/cmodify.c:508
+msgid "Drag to add flex track"
+msgstr "Ziehen um Flexgleis zu erstellen"
+
+#: ../bin/cmodify.c:513
+msgid "No track to extend"
+msgstr "Keine Gleise zu erweitern"
+
+#: ../bin/cmodify.c:518
+msgid "No track selected"
+msgstr "Keine Gleise ausgewählt"
+
+#: ../bin/cmodify.c:651
+#, c-format
+msgid "Curve Track: Radius=%s Length=%s Angle=%0.3f"
+msgstr "Gleisbogen: Radius=%s Länge=%s Winkel=%0.3f"
+
+#: ../bin/cmodify.c:666
+msgid "Extend Track"
+msgstr "Gleis verlängern"
+
+#: ../bin/cmodify.c:795
+msgid "Modify"
+msgstr "Verändern"
+
+#: ../bin/cmodify.c:802 ../bin/cselect.c:3311 ../bin/cselect.c:3327
+#: ../bin/misc.c:2201 ../bin/misc.c:2203
+msgid "Zoom In"
+msgstr "Zoom größer"
+
+#: ../bin/cmodify.c:803 ../bin/cselect.c:3315 ../bin/cselect.c:3328
+#: ../bin/misc.c:2205 ../bin/misc.c:2207
+msgid "Zoom Out"
+msgstr "Zoom kleiner"
+
+#: ../bin/cmodify.c:804
+msgid "Pan center - 'c'"
+msgstr "Ausschnitt hier zentrieren - 'c'."
+
+#: ../bin/cnote.c:69 ../bin/textnoteui.c:48 ../bin/trknote.c:60
+msgid "Note"
+msgstr "Notiz"
+
+#: ../bin/cnote.c:75
+msgid "Replace this text with your layout notes"
+msgstr "Ersetzen Sie diesen Text durch Ihre Notizen"
+
+#: ../bin/compound.c:544 ../bin/compound.c:549 ../bin/compound.c:554
+#: ../bin/compound.c:559 ../bin/tbezier.c:248 ../bin/tbezier.c:255
+#: ../bin/tcornu.c:297 ../bin/tcornu.c:302
+msgid "Center X,Y"
+msgstr "Mittelpunkt: X,Y"
+
+#: ../bin/compound.c:546 ../bin/tbezier.c:249 ../bin/tcornu.c:298
+msgid "Z1"
+msgstr "Z1"
+
+#: ../bin/compound.c:551 ../bin/tbezier.c:256 ../bin/tcornu.c:303
+msgid "Z2"
+msgstr "Z2"
+
+#: ../bin/compound.c:552
+msgid "End Pt 3: X,Y"
+msgstr "Endpunkt 3: X,Y"
+
+#: ../bin/compound.c:556
+msgid "Z3"
+msgstr "Z3"
+
+#: ../bin/compound.c:557
+msgid "End Pt 4: X,Y"
+msgstr "Endpunkt 4: X,Y"
+
+#: ../bin/compound.c:561
+msgid "Z4"
+msgstr "Z4"
+
+#: ../bin/compound.c:568 ../bin/cstruct.c:69 ../bin/cturnout.c:83
+#: ../bin/dcar.c:4366 ../bin/dcar.c:4371 ../bin/dcustmgm.c:60
+#: ../bin/doption.c:137 ../bin/doption.c:138
+msgid "Part No"
+msgstr "Teilenr"
+
+#: ../bin/compound.c:569
+msgid "LineType"
+msgstr "Linienart"
+
+#: ../bin/compound.c:830 ../bin/cstruct.c:937 ../bin/cstruct.c:1128
+msgid "Structure"
+msgstr "Gebäude"
+
+#: ../bin/compound.c:832 ../bin/cswitchmotor.c:228 ../bin/cturnout.c:1069
+#: ../bin/cturnout.c:2933
+msgid "Turnout"
+msgstr "Weiche"
+
+#: ../bin/compound.c:832
+msgid "Sectional Track"
+msgstr "Festgleise"
+
+#: ../bin/compound.c:836
+#, c-format
+msgid "%s (%d) Layer= %d %s"
+msgstr "%s (%d): Ebene=%d %s"
+
+#: ../bin/cparalle.c:52 ../bin/cparalle.c:100 ../bin/cparalle.c:140
+#: ../bin/ctodesgn.c:543 ../bin/ctodesgn.c:563 ../bin/ctodesgn.c:583
+#: ../bin/tcurve.c:371
+msgid "Separation"
+msgstr "Zwischenraum"
+
+#: ../bin/cparalle.c:55 ../bin/cparalle.c:101
+msgid "Radius Factor"
+msgstr "Radius Faktor"
+
+#: ../bin/cparalle.c:141
+msgid "Radius factor"
+msgstr "Radius-Faktor"
+
+#: ../bin/cparalle.c:154
+msgid " Track/Line doesn't support parallel"
+msgstr " Zu diesem Gleis oder Linie kann keine Parallele erstellt werden"
+
+#: ../bin/cparalle.c:228
+msgid "Create Parallel Track"
+msgstr "Erzeuge paralleles Gleis"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:354
+#: ../bin/cparalle.c:298 ../../../../build/work/app/i18n/custmsg.h:1233
+msgid "Parallel"
+msgstr "Parallel"
+
+#: ../bin/cparalle.c:299
+msgid "Parallel Track"
+msgstr "Paralleles Gleis"
+
+#: ../bin/cparalle.c:300
+msgid "Parallel Line"
+msgstr "Parallele Linie"
+
+#: ../bin/cprint.c:110
+msgid "Portrait"
+msgstr "Hochformat"
+
+#: ../bin/cprint.c:110
+msgid "Landscape"
+msgstr "Querformat"
+
+#: ../bin/cprint.c:111 ../bin/cswitchmotor.c:94 ../bin/cswitchmotor.c:113
+#: ../bin/cswitchmotor.c:225 ../bin/dbench.c:78 ../bin/dease.c:67
+#: ../bin/doption.c:131 ../bin/doption.c:133 ../bin/macro.c:1408
+msgid "Normal"
+msgstr "Normal"
+
+#: ../bin/cprint.c:111 ../bin/cswitchmotor.c:95 ../bin/cswitchmotor.c:114
+#: ../bin/cswitchmotor.c:226 ../bin/ctrain.c:941 ../bin/ctrain.c:1250
+msgid "Reverse"
+msgstr "Rückwärts"
+
+#: ../bin/cprint.c:112
+msgid "Engineering Data"
+msgstr "Zeichnungsinformationen"
+
+#: ../bin/cprint.c:113
+msgid "Registration Marks (in 1:1 scale only)"
+msgstr "Positionierungshilfen (nur im 1:1 Maßstab)"
+
+#: ../bin/cprint.c:114
+msgid "Page Numbers"
+msgstr "Seitennummern"
+
+#: ../bin/cprint.c:115
+msgid "Ignore Page Margins"
+msgstr "Übergehe Seitenränder"
+
+#: ../bin/cprint.c:116 ../bin/csnap.c:705 ../bin/doption.c:530
+msgid "Snap Grid"
+msgstr "Fangraster"
+
+#: ../bin/cprint.c:117
+msgid "Rulers"
+msgstr "Lineale"
+
+#: ../bin/cprint.c:118
+msgid "Roadbed Outline"
+msgstr "Rand des Gleisbett"
+
+#: ../bin/cprint.c:119
+msgid "Centerline below Scale 1:1"
+msgstr "Mittellinie bei Maßstab<1:1"
+
+#: ../bin/cprint.c:127
+msgid "Print Scale"
+msgstr "Druckmaßstab"
+
+#: ../bin/cprint.c:128
+msgid "Page Width"
+msgstr "Seitenbreite"
+
+#: ../bin/cprint.c:129
+msgid "Max"
+msgstr "Max."
+
+#: ../bin/cprint.c:131
+msgid "Snap Shot"
+msgstr "Schnappschuss"
+
+#: ../bin/cprint.c:132
+msgid "Page Format"
+msgstr "Seitenformat"
+
+#: ../bin/cprint.c:133
+msgid "Print Order"
+msgstr "Druckreihenfolge"
+
+#: ../bin/cprint.c:134
+msgid "Print "
+msgstr "Drucken "
+
+#: ../bin/cprint.c:149
+msgid " Width"
+msgstr " Breite"
+
+#: ../bin/cprint.c:151
+msgid "Margins"
+msgstr "Ränder"
+
+#: ../bin/cprint.c:152 ../bin/cturntbl.c:250
+msgid "Origin: X"
+msgstr "Ausgangspunkt: X"
+
+#: ../bin/cprint.c:153 ../bin/csnap.c:535
+msgid "Y"
+msgstr "Y"
+
+#: ../bin/cprint.c:154 ../bin/cprint.c:620 ../bin/cprofile.c:715
+#: ../bin/dcar.c:2214
+msgid "Reset"
+msgstr "Zurücksetzen"
+
+#: ../bin/cprint.c:156
+msgid "Setup"
+msgstr "Einstellungen"
+
+#: ../bin/cprint.c:157 ../bin/cselect.c:3319 ../bin/misc.c:2232
+msgid "Select All"
+msgstr "Alles auswählen"
+
+#: ../bin/cprint.c:158 ../bin/cprofile.c:717 ../bin/layout.c:472
+#: ../bin/misc.c:730
+msgid "Clear"
+msgstr "Löschen"
+
+#: ../bin/cprint.c:160
+msgid "0 pages"
+msgstr "0 Seiten"
+
+#: ../bin/cprint.c:187
+#, c-format
+msgid "%d page"
+msgstr "Seite %d"
+
+#: ../bin/cprint.c:187
+#, c-format
+msgid "%d pages"
+msgstr "%d Seiten"
+
+#: ../bin/cprint.c:408
+#, c-format
+msgid "PrintScale 1:%ld Room %s x %s Model Scale %s File %s"
+msgstr "Druckmaßstab 1:%ld Raum %s x %s Modellmaßstab %s Datei %s"
+
+#: ../bin/cprint.c:716 ../bin/dbitmap.c:208 ../bin/filenoteui.c:158
+#: ../bin/misc.c:1239 ../bin/misc.c:1317 ../bin/param.c:2622
+#: ../wlib/gtklib/browserhelp.c:88 ../../../../build/work/app/bin/bllnhlp.c:584
+msgid "Cancel"
+msgstr "Abbruch"
+
+#: ../bin/cprint.c:723
+msgid "Print Margins"
+msgstr "Druckbegrenzungen"
+
+#: ../bin/cprint.c:1367 ../bin/cprofile.c:719 ../bin/ctodesgn.c:2869
+#: ../bin/denum.c:55
+msgid "Print"
+msgstr "Drucken"
+
+#: ../bin/cprint.c:1388
+msgid "Select pages to print, or drag to move print grid"
+msgstr ""
+"Zu druckende Seiten auswählen oder ziehen um das Druckraster zu verschieben"
+
+#: ../bin/cprint.c:1486
+msgid "Print..."
+msgstr "Drucken..."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:350
+#: ../bin/cprofile.c:614 ../bin/cprofile.c:1448 ../bin/cprofile.c:1528
+#: ../../../../build/work/app/bin/bllnhlp.c:122
+#: ../../../../build/work/app/i18n/custmsg.h:1225
+msgid "Profile"
+msgstr "Höhenprofil"
+
+#: ../bin/cprofile.c:632
+#, c-format
+msgid "%s Profile: %s"
+msgstr "%s Höhenprofil: %s"
+
+#: ../bin/cprofile.c:713 ../bin/misc.c:1898
+msgid "Change"
+msgstr "Ändern"
+
+#: ../bin/cprofile.c:757 ../bin/cprofile.c:767
+#, c-format
+msgid "Elev = %0.1f"
+msgstr "Höhe = %0.1f"
+
+#: ../bin/cprofile.c:769
+#, c-format
+msgid "Elev=%0.2f %0.1f%%"
+msgstr "Höhe=%0.2f %0.1f%%"
+
+#: ../bin/cprofile.c:774
+#, c-format
+msgid "%0.1f%% Elev = %0.2f"
+msgstr "%0.1f%% Höhe = %0.2f"
+
+#: ../bin/cprofile.c:779
+#, c-format
+msgid "%0.1f%% Elev = %0.2f %0.1f%%"
+msgstr "%0.1f%% Höhe = %0.2f %0.1f%%"
+
+#: ../bin/cprofile.c:794 ../bin/cprofile.c:864 ../bin/cprofile.c:1400
+msgid "Profile Command"
+msgstr "Höhenprofil bearbeiten"
+
+#: ../bin/cprofile.c:803 ../bin/cprofile.c:1454
+msgid "Drag to change Elevation"
+msgstr "Ziehen um die Höhe zu ändern"
+
+#: ../bin/cprofile.c:905
+msgid "Select a Defined Elevation to start Profile"
+msgstr "Eine festgelegte Höhe auswählen, um das Höhenprofil zu beginnen"
+
+#: ../bin/cprofile.c:907
+msgid "Select a Defined Elevation to extend Profile"
+msgstr "Eine festgelegte Höhe auswählen, um das Höhenprofil zu erweitern"
+
+#: ../bin/cprofile.c:1462
+msgid "Select a Defined Elevation to start profile"
+msgstr "Eine festgelegte Höhe auswählen, um das Höhenprofil zu beginnen"
+
+#: ../bin/cprofile.c:1532
+msgid "Define"
+msgstr "Festlegen"
+
+#: ../bin/cpull.c:439 ../bin/cpull.c:595
+#, c-format
+msgid "%d tracks moved"
+msgstr "%d Gleise verschoben"
+
+#: ../bin/cpull.c:485
+msgid "Pull Tracks"
+msgstr "Gleise ziehen"
+
+#: ../bin/cpull.c:559
+msgid "Tighten Tracks"
+msgstr "Gleise zusammendrücken"
+
+#: ../bin/cpull.c:646
+msgid "Connect Multiple Tracks - Select multiple tracks to join first"
+msgstr ""
+"Verbinde mehrere Gleise - zuerst mehrere Gleise für die Verbindung auswählen"
+
+#: ../bin/cpull.c:649
+msgid "Try to Connect all Selected Tracks?"
+msgstr "Sollen alle ausgewählten Gleise verbunden werden?"
+
+#: ../bin/cpull.c:655
+msgid "ReConnect"
+msgstr "Wiederverbinden"
+
+#: ../bin/cpull.c:691
+#, c-format
+msgid ""
+"Round 1 %d and Round 2 %d tracks connected, %d close pairs of end Points "
+"were not connected"
+msgstr ""
+"In Durchgang 1 %d und in Durchgang 2 %d Gleise verbunden, %d nahe "
+"beieinander liegene Punkte wurden nicht verbunden"
+
+#: ../bin/cpull.c:716
+msgid "Select first endpoint or turntable to connect, +Shift to tighten"
+msgstr ""
+"Wählen Sie den ersten anzuschließenden Endpunkt oder eine Drehscheibe, "
+"+Umschalten zum Festziehen"
+
+#: ../bin/cpull.c:718
+msgid ""
+"Select first endpoint to connect, or Right-Click for connecting selected "
+"tracks (not turntable)"
+msgstr ""
+"Wählen Sie den ersten Endpunkt, der verbunden werden soll, oder klicken Sie "
+"mit der rechten Maustaste, um ausgewählte Gleise zu verbinden (nicht "
+"Drehscheibe)"
+
+#: ../bin/cpull.c:777
+msgid "Select second endpoint or turntable to connect"
+msgstr "Wählen Sie den zweiten anzuschließenden Endpunkt oder eine Drehscheibe"
+
+#: ../bin/cpull.c:784
+msgid "Same Track! - please select another"
+msgstr "Gleiches Gleis! - Bitte wählen Sie ein anderes aus"
+
+#: ../bin/cpull.c:872
+msgid "Connect Two Tracks"
+msgstr "Zwei Gleise zusammenfügen"
+
+#: ../bin/cpull.c:874
+msgid "Connect All Selected - 'S'"
+msgstr "Alle ausgewählten Gleise verbinden - 'S'"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:361
+#: ../bin/cruler.c:143 ../../../../build/work/app/i18n/custmsg.h:1247
+msgid "Ruler"
+msgstr "Lineal"
+
+#: ../bin/cselect.c:615
+msgid "Change Track Width"
+msgstr "Gleisbreite ändern"
+
+#: ../bin/cselect.c:639
+msgid "Change Line Type"
+msgstr "Linienstil ändern"
+
+#: ../bin/cselect.c:668
+msgid "Delete Tracks"
+msgstr "Gleise löschen"
+
+#: ../bin/cselect.c:744
+msgid "Hide Tracks (Tunnel)"
+msgstr "Gleise verbergen (Tunnel)"
+
+#: ../bin/cselect.c:762
+msgid "Bridge Tracks "
+msgstr "Brückengleise "
+
+#: ../bin/cselect.c:779
+msgid "Ties Tracks "
+msgstr "Schwellengleise "
+
+#: ../bin/cselect.c:816 ../bin/misc.c:2352
+msgid "Move To Current Layer"
+msgstr "Auf aktuelle Ebene verschieben"
+
+#: ../bin/cselect.c:856 ../bin/misc.c:2502
+msgid "Clear Elevations"
+msgstr "Höhen löschen"
+
+#: ../bin/cselect.c:900
+msgid "Add Elevations"
+msgstr "Höhen hinzufügen"
+
+#: ../bin/cselect.c:915
+msgid "Refresh Compound"
+msgstr "Zusammenstellung aktualisieren"
+
+#: ../bin/cselect.c:947 ../bin/dcar.c:4366 ../bin/dcar.c:4371
+#: ../bin/dcustmgm.c:60 ../bin/layout.c:463
+msgid "Scale"
+msgstr "Maßstab"
+
+#: ../bin/cselect.c:947 ../bin/cselect.c:972
+msgid "Ratio"
+msgstr "Verhältnis"
+
+#: ../bin/cselect.c:956
+msgid "Do not resize track"
+msgstr "Gleismaße nicht ändern"
+
+#: ../bin/cselect.c:960
+msgid "Rescale by:"
+msgstr "Skalieren um:"
+
+#: ../bin/cselect.c:962
+msgid "From:"
+msgstr "Von:"
+
+#: ../bin/cselect.c:966
+msgid "To: "
+msgstr "Nach:"
+
+#: ../bin/cselect.c:1033
+msgid "Rescale Tracks"
+msgstr "Gleise skalieren"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:357
+#: ../bin/cselect.c:1163 ../../../../build/work/app/i18n/custmsg.h:1239
+msgid "Rescale"
+msgstr "Maßstab ändern"
+
+#: ../bin/cselect.c:1464
+msgid "Cornu too tight - it was deleted"
+msgstr "Cornu ist zu eng und wurde gelöscht"
+
+#: ../bin/cselect.c:1519
+msgid "Move To Join"
+msgstr "Verbinde durch Verschieben"
+
+#: ../bin/cselect.c:1711
+msgid "Drag to move selected tracks - Shift+Ctrl+Arrow micro-steps the move"
+msgstr ""
+"Ziehen um die ausgewählten Gleise zu verschieben - mit Umschalt+Str"
+"+Pfeiltasten umd feine Stufen verschieben"
+
+#: ../bin/cselect.c:1732 ../bin/cselect.c:1852 ../bin/cselect.c:2216
+msgid "Move Tracks"
+msgstr "Gleise verschieben"
+
+#: ../bin/cselect.c:1897
+msgid "Align: Click on a selected object to be aligned"
+msgstr ""
+"Ausrichten: Auf ausgewähltes Objekt klicken, das ausgerichtet werden soll"
+
+#: ../bin/cselect.c:1935
+msgid "Drag to rotate selected tracks, Shift+RightClick for QuickRotate Menu"
+msgstr ""
+"Ziehen um die ausgewählten Gleise zu rotieren, Umschalt-Taste und "
+"Rechtsklich das Schnellauswahlmenu öffnen"
+
+#: ../bin/cselect.c:1951 ../bin/cselect.c:2229
+msgid "Rotate Tracks"
+msgstr "Gleise drehen"
+
+#: ../bin/cselect.c:1964
+msgid "Center of Rotation snapped to Turntable center"
+msgstr ""
+"Der Mittelpunkt der Drehscheibe wird als Mittelpunkt der Rotation genutt"
+
+#: ../bin/cselect.c:2006 ../bin/cselect.c:2037
+#, c-format
+msgid "Angle %0.3f"
+msgstr "Winkel %0.3f"
+
+#: ../bin/cselect.c:2093
+#, c-format
+msgid "Angle %0.3f #%ld"
+msgstr "Winkel %0.3f #%ld"
+
+#: ../bin/cselect.c:2095
+#, c-format
+msgid "Angle %0.3f %s"
+msgstr "Winkel %0.3f %s"
+
+#: ../bin/cselect.c:2100
+msgid "Origin Set. Drag away to set start angle"
+msgstr "Ausgangspunkt gesetzt. Zum Einstellen des Startwinkels wegziehen"
+
+#: ../bin/cselect.c:2114
+msgid "Align: Click on the 2nd unselected object"
+msgstr "Ausrichten: Klicken Sie auf das zweite, nicht ausgewählte Objekt"
+
+#: ../bin/cselect.c:2241
+msgid "Toggle Label"
+msgstr "Beschriftung umschalten"
+
+#: ../bin/cselect.c:2360 ../bin/cselect.c:2399
+msgid "Select and drag a description"
+msgstr "Beschreibung auswählen und verschieben"
+
+#: ../bin/cselect.c:2385
+msgid "Elevation description"
+msgstr "Beschreibung der Höhe"
+
+#: ../bin/cselect.c:2388
+msgid "Hidden description - 's' to Show"
+msgstr "Verborgene Beschreibung - 's' zum Anzeigen"
+
+#: ../bin/cselect.c:2392
+msgid "Shown description - 'h' to Hide"
+msgstr "Sichtbare Beschreibung - Verbergen mit 'h'"
+
+#: ../bin/cselect.c:2413
+msgid "Hidden Label - Drag to reveal"
+msgstr "Verborgene Beschriftung - Ziehen zum Aufdecken"
+
+#: ../bin/cselect.c:2415
+msgid "Drag label"
+msgstr "Beschriftung ziehen"
+
+#: ../bin/cselect.c:2417
+msgid "Move Label"
+msgstr "Beschreibung verschieben"
+
+#: ../bin/cselect.c:2454
+msgid "To Hide, use Context Menu"
+msgstr "Zum Verbergen verwenden Sie das Kontextmenü"
+
+#: ../bin/cselect.c:2470 ../bin/cselect.c:3345
+msgid "Show/Hide Description"
+msgstr "Beschreibung anzeigen/verbergen"
+
+#: ../bin/cselect.c:2550
+msgid "Drag to mark mirror line"
+msgstr "Ziehen um die Spiegelachse zu erstellen"
+
+#: ../bin/cselect.c:2561
+#, c-format
+msgid "Angle %0.2f"
+msgstr "Winkel %0.2f"
+
+#: ../bin/cselect.c:2564
+msgid "Flip Tracks"
+msgstr "Gleise spiegeln"
+
+#: ../bin/cselect.c:2904
+msgid "Select track"
+msgstr "Gleis auswählen"
+
+#: ../bin/cselect.c:2931
+msgid "Track is in Frozen Layer"
+msgstr "Das Gleis ist auf einer fixierten Ebene"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:323
+#: ../bin/cselect.c:3285 ../bin/dcar.c:1672 ../bin/doption.c:235
+#: ../../../../build/work/app/i18n/custmsg.h:1171
+msgid "Select"
+msgstr "Auswählen"
+
+#: ../bin/cselect.c:3304 ../bin/cselect.c:3324 ../bin/misc.c:2196
+msgid "Undo"
+msgstr "Rückgängig"
+
+#: ../bin/cselect.c:3305 ../bin/cselect.c:3325 ../bin/misc.c:2198
+msgid "Redo"
+msgstr "Wiederholen"
+
+#: ../bin/cselect.c:3312 ../bin/draw.c:3124
+msgid "Zoom to extents - 'e'"
+msgstr "Auf Fenstergröße anpassen- 'e'"
+
+#: ../bin/cselect.c:3313 ../bin/draw.c:3135 ../bin/misc.c:2379
+msgid "&Zoom"
+msgstr "&Zoom"
+
+#: ../bin/cselect.c:3316 ../bin/draw.c:3134
+msgid "Pan to Origin - 'o'/'0'"
+msgstr "Ausschnitt auf Ursprung zurücksetzen - 'o'/'0'"
+
+#: ../bin/cselect.c:3317 ../bin/cselect.c:3329
+msgid "Pan Center Here - 'c'"
+msgstr "Hier zentrieren - 'c'."
+
+#: ../bin/cselect.c:3320 ../bin/misc.c:2235 ../bin/misc.c:2358
+msgid "Select Current Layer"
+msgstr "Aktuelle Ebene auswählen"
+
+#: ../bin/cselect.c:3331 ../bin/misc.c:2237
+msgid "Deselect All"
+msgstr "Alles Abwählen"
+
+#: ../bin/cselect.c:3333
+msgid "Properties -'?'"
+msgstr "Eigenschaften -'?'"
+
+#: ../bin/cselect.c:3334
+msgid "Modify/Activate Track"
+msgstr "Gleis bearbeiten"
+
+#: ../bin/cselect.c:3336 ../bin/misc.c:2223
+msgid "Cut"
+msgstr "Ausschneiden"
+
+#: ../bin/cselect.c:3337 ../bin/misc.c:2225
+msgid "Copy"
+msgstr "Kopiere"
+
+#: ../bin/cselect.c:3338 ../bin/fileio.c:1620 ../bin/misc.c:2227
+msgid "Paste"
+msgstr "Einfügen"
+
+#: ../bin/cselect.c:3339 ../bin/misc.c:2229
+msgid "Clone"
+msgstr "Klonen"
+
+#: ../bin/cselect.c:3341
+msgid "Rotate..."
+msgstr "Drehen..."
+
+#: ../bin/cselect.c:3343
+msgid "Align"
+msgstr "Ausrichten"
+
+#: ../bin/cselect.c:3347
+msgid "Hide/NoHide"
+msgstr "Zeigen/Verbergen"
+
+#: ../bin/cselect.c:3348
+msgid "Bridge/NoBridge"
+msgstr "Brücke"
+
+#: ../bin/cselect.c:3349
+msgid "NoTies/Ties"
+msgstr "Ohne / mit Schwellen"
+
+#: ../bin/cselect.c:3350
+msgid "Thickness..."
+msgstr "Dicke..."
+
+#: ../bin/cselect.c:3351 ../bin/misc.c:2370
+msgid "Thin Tracks"
+msgstr "Dünne Gleise"
+
+#: ../bin/cselect.c:3352 ../bin/misc.c:2371
+msgid "Medium Tracks"
+msgstr "Mittlere Gleise"
+
+#: ../bin/cselect.c:3353 ../bin/misc.c:2372
+msgid "Thick Tracks"
+msgstr "Dicke Gleise"
+
+#: ../bin/cselect.c:3358
+msgid "Dash-Dotted Line"
+msgstr "Gestrichelte Linie"
+
+#: ../bin/cselect.c:3359
+msgid "Dash-Dot-Dotted Line"
+msgstr "Strich-Punkt-gestrichelte Linie"
+
+#: ../bin/cselect.c:3361
+msgid "Move To Front"
+msgstr "Nach vorne"
+
+#: ../bin/cselect.c:3362
+msgid "Move To Back"
+msgstr "Nach hinten"
+
+#: ../bin/cselect.c:3364
+msgid "Group"
+msgstr "Gruppieren"
+
+#: ../bin/cselect.c:3365
+msgid "UnGroup"
+msgstr "Gruppierung auflösen"
+
+#: ../bin/cselect.c:3400
+msgid "Move Description"
+msgstr "Beschreibungen verschieben"
+
+#: ../bin/cselect.c:3407 ../bin/misc.c:1939 ../bin/misc.c:2240
+msgid "Move"
+msgstr "Verschieben"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:368
+#: ../bin/cselect.c:3409 ../bin/misc.c:1930 ../bin/misc.c:2242
+#: ../../../../build/work/app/i18n/custmsg.h:1261
+msgid "Rotate"
+msgstr "Drehen"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:369
+#: ../bin/cselect.c:3411 ../bin/dcar.c:2216
+#: ../../../../build/work/app/i18n/custmsg.h:1263
+msgid "Flip"
+msgstr "Spiegeln"
+
+#: ../bin/csensor.c:216
+msgid "Change Sensor"
+msgstr "Sensor ändern"
+
+#: ../bin/csensor.c:262 ../bin/csensor.c:596
+msgid "Sensor"
+msgstr "Sensor"
+
+#: ../bin/csensor.c:391 ../bin/csignal.c:511
+msgid "Orgin X"
+msgstr "Ausgangspunkt: X"
+
+#: ../bin/csensor.c:407
+msgid "Create Sensor"
+msgstr "Sensor erstellen"
+
+#: ../bin/csensor.c:410
+msgid "Modify Sensor"
+msgstr "Sensor ändern"
+
+#: ../bin/csensor.c:443
+msgid "Edit sensor"
+msgstr "Sensor bearbeiten"
+
+#: ../bin/csensor.c:481
+msgid "Place sensor"
+msgstr "Sensor setzen"
+
+#: ../bin/csignal.c:241
+msgid "Number Of Heads"
+msgstr "Anzahl der Köpfe"
+
+#: ../bin/csignal.c:280
+msgid "Change Signal"
+msgstr "Signal ändern"
+
+#: ../bin/csignal.c:314
+#, c-format
+msgid "(%d [%s]): Layer=%u, %d heads at %0.3f,%0.3f A%0.3f"
+msgstr "(%d [%s]): Ebene=%u, %d Köpfe bei %0.3f,%0.3f A%0.3f"
+
+#: ../bin/csignal.c:325 ../bin/csignal.c:914
+msgid "Signal"
+msgstr "Signal"
+
+#: ../bin/csignal.c:517
+msgid "Number of Heads"
+msgstr "Anzahl der Köpfe"
+
+#: ../bin/csignal.c:522
+msgid "Edit Aspect"
+msgstr "Signalbild bearbeiten"
+
+#: ../bin/csignal.c:524
+msgid "Add Aspect"
+msgstr "Signalanzeige"
+
+#: ../bin/csignal.c:526
+msgid "Delete Aspect"
+msgstr "Signalbild löschen"
+
+#: ../bin/csignal.c:539
+msgid "Aspect Index"
+msgstr "Nummer der Signalanzeige"
+
+#: ../bin/csignal.c:554
+msgid "Create Signal"
+msgstr "Signal erstellen"
+
+#: ../bin/csignal.c:558
+msgid "Modify Signal"
+msgstr "Signal ändern"
+
+#: ../bin/csignal.c:665
+msgid "Edit aspect"
+msgstr "Signalbild bearbeiten"
+
+#: ../bin/csignal.c:712
+#, c-format
+msgid "Are you sure you want to delete the %d aspect(s)"
+msgstr "Sind Sie sicher, dass Sie %d Signalbilder löschen wollen?"
+
+#: ../bin/csignal.c:733
+msgid "Edit signal"
+msgstr "Signal bearbeiten"
+
+#: ../bin/csignal.c:795
+msgid "Place base of signal"
+msgstr "Basis des Signals festlegen"
+
+#: ../bin/csignal.c:802
+msgid "Drag to orient signal"
+msgstr "Durch Ziehen das Signal ausrichten"
+
+#: ../bin/csnap.c:516
+msgid "Horz"
+msgstr "Horiz."
+
+#: ../bin/csnap.c:518
+msgid "Spacing"
+msgstr "Abstand"
+
+#: ../bin/csnap.c:520
+msgid "Divisions"
+msgstr "Zwischenmarkierungen"
+
+#: ../bin/csnap.c:523
+msgid "Enable"
+msgstr "Einschalten"
+
+#: ../bin/csnap.c:524
+msgid "Vert"
+msgstr "Vert."
+
+#: ../bin/csnap.c:533 ../bin/dease.c:76
+msgid "X"
+msgstr "X"
+
+#: ../bin/csnap.c:537
+msgid "A"
+msgstr "A"
+
+#: ../bin/csnap.c:540
+msgid "Show"
+msgstr "Zeige"
+
+#: ../bin/csnap.c:791
+msgid "Change Grid..."
+msgstr "Raster anpassen..."
+
+#: ../bin/csplit.c:45
+msgid "Set Block Gaps"
+msgstr "Setze Trennstellen"
+
+#: ../bin/csplit.c:111
+msgid "Select track to split"
+msgstr "Zu trennendes Gleis auswählen"
+
+#: ../bin/csplit.c:132
+msgid "Can't Split that Track"
+msgstr "Dieses Gleis kann nicht getrennt werden"
+
+#: ../bin/csplit.c:140 ../bin/csplit.c:232
+msgid "Split Track"
+msgstr "Gleis auftrennen"
+
+#: ../bin/csplit.c:156 ../bin/dbench.c:69 ../bin/dbench.c:80
+msgid "Left"
+msgstr "Links"
+
+#: ../bin/csplit.c:157 ../bin/dbench.c:70 ../bin/dbench.c:79
+msgid "Right"
+msgstr "Rechts"
+
+#: ../bin/csplit.c:158 ../bin/csplit.c:163
+msgid "Both"
+msgstr "Beides"
+
+#: ../bin/csplit.c:161
+msgid "Top"
+msgstr "Oben"
+
+#: ../bin/csplit.c:162
+msgid "Bottom"
+msgstr "Unten"
+
+#: ../bin/cstraigh.c:77
+msgid "Place 1st endpoint of straight track, snap to unconnected endpoint"
+msgstr ""
+"Platzieren Sie den 1. Endpunkt des geraden Gleis, wird an einen "
+"unverbundenen Endpunkt fixiert"
+
+#: ../bin/cstraigh.c:104
+msgid "Drag to place 2nd end point"
+msgstr "Ziehen um den zweiten Endpunkt zu setzen"
+
+#: ../bin/cstraigh.c:140
+#, c-format
+msgid "Straight Track Length=%s Angle=%0.3f"
+msgstr "Gleisgerade: Länge=%s Winkel=%0.3f"
+
+#: ../bin/cstraigh.c:191 ../bin/tstraigh.c:267
+msgid "Straight Track"
+msgstr "Gleisgerade"
+
+#: ../bin/cstruct.c:71 ../bin/cturnout.c:85 ../bin/doption.c:131
+#: ../bin/doption.c:240
+msgid "Hide"
+msgstr "Verstecken"
+
+#: ../bin/cstruct.c:449 ../bin/cstruct.c:476
+msgid "Pier Number"
+msgstr "Gleisanschluß"
+
+#: ../bin/cstruct.c:561
+#, c-format
+msgid "Scale %d:1"
+msgstr "Maßstab 1:%d"
+
+#: ../bin/cstruct.c:563
+#, c-format
+msgid "Width %s"
+msgstr "Breite %s"
+
+#: ../bin/cstruct.c:565
+#, c-format
+msgid "Height %s"
+msgstr "Höhe %s"
+
+#: ../bin/cstruct.c:706
+msgid "Place Structure"
+msgstr "Gebäude plazieren"
+
+#: ../bin/cstruct.c:799 ../bin/cstruct.c:873 ../bin/cstruct.c:1105
+#: ../bin/cturnout.c:2796 ../bin/cturnout.c:2851 ../bin/cturnout.c:2978
+#: ../bin/cturnout.c:3117
+msgid ""
+"Left-Drag to place, Ctrl+Left-Drag or Right-Drag to Rotate, Space or Enter "
+"to accept, Esc to Cancel"
+msgstr ""
+"Ziehen mit linker Maustaste zum Verschieben, mit Strg-Links oderrechter zum "
+"Drehen, Leerzeichen oder Eingabetaste zum Festlegen, Esc zum Abbrechen"
+
+#: ../bin/cstruct.c:821
+msgid "Drag to place"
+msgstr "Zur Position ziehen"
+
+#: ../bin/cstruct.c:843
+msgid "Drag to rotate"
+msgstr "Ziehen zum rotieren"
+
+#: ../bin/cstruct.c:863
+#, c-format
+msgid "Angle = %0.3f"
+msgstr "Winkel = %0.3f"
+
+#: ../bin/cstruct.c:954
+msgid "Select Structure and then drag to place"
+msgstr "Gebäued auswählen und in die Piosition ziehen"
+
+#: ../bin/cstruct.c:992
+msgid ""
+"Left drag to move, right drag to rotate, or press Return or click Ok to "
+"finalize"
+msgstr ""
+"Ziehen mit linker Maustaste zum Verschieben, mit rechter zum Drehen, oder "
+"Eingabetaste oder OK zum Abschliessen"
+
+#: ../bin/cstruct.c:1075 ../bin/cturnout.c:3084
+#, c-format
+msgid "Place %s and draw into position"
+msgstr "%s setzen und in Position ziehen"
+
+#: ../bin/cswitchmotor.c:96 ../bin/cswitchmotor.c:115 ../bin/cswitchmotor.c:227
+msgid "Point Sense"
+msgstr "Richtung der Weichenzungen"
+
+#: ../bin/cswitchmotor.c:116
+msgid "Turnout Number"
+msgstr "Weichennummer"
+
+#: ../bin/cswitchmotor.c:292
+msgid "Change Switch Motor"
+msgstr "Weichenantrieb ändern"
+
+#: ../bin/cswitchmotor.c:359
+msgid "Switch motor"
+msgstr "Weichenantrieb"
+
+#: ../bin/cswitchmotor.c:475
+#, c-format
+msgid "ResolveSwitchmotor: Turnout T%d: T%d doesn't exist"
+msgstr "ResolveSwitchmotor: Weiche T%d: T%d existiert nicht"
+
+#: ../bin/cswitchmotor.c:544 ../bin/cswitchmotor.c:714
+msgid "Switch motor must have a name!"
+msgstr "Der Weichenantrieb benötigt einen Namen!"
+
+#: ../bin/cswitchmotor.c:548
+msgid "Create Switch Motor"
+msgstr "Weichenantrieb erstellen"
+
+#: ../bin/cswitchmotor.c:580
+msgid "Create switch motor"
+msgstr "Weichenantrieb erstellen"
+
+#: ../bin/cswitchmotor.c:594 ../bin/cswitchmotor.c:625
+#: ../bin/cswitchmotor.c:657
+msgid "Select a turnout"
+msgstr "Wählen Sie eine Weiche aus"
+
+#: ../bin/cswitchmotor.c:601
+msgid "Not a turnout!"
+msgstr "Keine Weiche!"
+
+#: ../bin/cswitchmotor.c:634 ../bin/cswitchmotor.c:665
+msgid "Not a switch motor!"
+msgstr "Kein Weichenantrieb!"
+
+#: ../bin/cswitchmotor.c:670
+#, c-format
+msgid "Really delete switch motor %s?"
+msgstr "Soll der Weichenantrieb %s wirklich gelöscht werden?"
+
+#: ../bin/cswitchmotor.c:671
+msgid "Delete Switch Motor"
+msgstr "Weichenantrieb löschen"
+
+#: ../bin/cswitchmotor.c:718
+msgid "Modify Switch Motor"
+msgstr "Weichenantrieb ändern"
+
+#: ../bin/cswitchmotor.c:744
+msgid "Edit switch motor"
+msgstr "Weichenantrieb bearbeiten"
+
+#: ../bin/cswitchmotor.c:750
+#, c-format
+msgid "Edit switch motor %d"
+msgstr "Weichenantrieb %d bearbeiten"
+
+#: ../bin/cswitchmotor.c:858
+msgid "Switch Motor"
+msgstr "Weichenantrieb"
+
+#: ../bin/cswitchmotor.c:871
+#, c-format
+msgid "Deleting Switch Motor %s"
+msgstr "Weichenantrieb %s löschen"
+
+#: ../bin/ctext.c:195 ../bin/ctext.c:234
+msgid "Create Text"
+msgstr "Erstelle Text"
+
+#: ../bin/ctext.c:265
+msgid "Fonts..."
+msgstr "Schriftarten..."
+
+#: ../bin/ctodesgn.c:144
+msgid "Frog #"
+msgstr "Herzstück Steigung"
+
+#: ../bin/ctodesgn.c:144
+msgid "Degrees"
+msgstr "Grad"
+
+#: ../bin/ctodesgn.c:145
+msgid "Dual Path"
+msgstr "Zwei Positionen"
+
+#: ../bin/ctodesgn.c:145
+msgid "Quad Path"
+msgstr "Vier Positionen"
+
+#: ../bin/ctodesgn.c:180 ../bin/ctodesgn.c:181 ../bin/ctodesgn.c:182
+#: ../bin/ctodesgn.c:183 ../bin/ctodesgn.c:243 ../bin/ctodesgn.c:266
+#: ../bin/ctodesgn.c:268 ../bin/ctodesgn.c:303 ../bin/ctodesgn.c:306
+#: ../bin/ctodesgn.c:332 ../bin/ctodesgn.c:333 ../bin/ctodesgn.c:369
+#: ../bin/ctodesgn.c:372 ../bin/ctodesgn.c:398 ../bin/ctodesgn.c:400
+#: ../bin/ctodesgn.c:439 ../bin/ctodesgn.c:443 ../bin/ctodesgn.c:446
+#: ../bin/ctodesgn.c:658
+msgid "Offset"
+msgstr "Abstand"
+
+#: ../bin/ctodesgn.c:201 ../bin/ctodesgn.c:2916 ../bin/ctodesgn.c:2917
+msgid "Left Description"
+msgstr "Beschreibung, links"
+
+#: ../bin/ctodesgn.c:202 ../bin/ctodesgn.c:205
+msgid " #"
+msgstr " Nr."
+
+#: ../bin/ctodesgn.c:204 ../bin/ctodesgn.c:2915
+msgid "Right Description"
+msgstr "Beschreibung, rechts"
+
+#: ../bin/ctodesgn.c:206
+msgid "Roadbed Width"
+msgstr "Breite des Gleisbetts"
+
+#: ../bin/ctodesgn.c:210 ../bin/denum.c:56
+msgid "Print Setup"
+msgstr "Druckeinstellungen"
+
+#: ../bin/ctodesgn.c:241
+msgid "Diverging Length"
+msgstr "Länge des Abzweigs"
+
+#: ../bin/ctodesgn.c:242
+msgid "Diverging Angle"
+msgstr "Winkel des Abzweigs"
+
+#: ../bin/ctodesgn.c:243
+msgid "Diverging Offset"
+msgstr "Abstand des Abzweigs"
+
+#: ../bin/ctodesgn.c:244
+msgid "Overall Length"
+msgstr "Gesamtlänge"
+
+#: ../bin/ctodesgn.c:254
+msgid "Regular Turnout"
+msgstr "Normale Weiche"
+
+#: ../bin/ctodesgn.c:264 ../bin/ctodesgn.c:301
+msgid "Inner Length"
+msgstr "Innenlänge"
+
+#: ../bin/ctodesgn.c:265 ../bin/ctodesgn.c:302
+msgid "Inner Angle"
+msgstr "Innenwinkel"
+
+#: ../bin/ctodesgn.c:266 ../bin/ctodesgn.c:303
+msgid "Inner Offset"
+msgstr "Innenabstand"
+
+#: ../bin/ctodesgn.c:267 ../bin/ctodesgn.c:305
+msgid "Outer Angle"
+msgstr "Außenwinkel"
+
+#: ../bin/ctodesgn.c:268 ../bin/ctodesgn.c:306
+msgid "Outer Offset"
+msgstr "Außenabstand"
+
+#: ../bin/ctodesgn.c:269 ../bin/ctodesgn.c:308
+msgid "Outer Length"
+msgstr "Außenlänge"
+
+#: ../bin/ctodesgn.c:291
+msgid "Curved Turnout"
+msgstr "Bogenweiche"
+
+#: ../bin/ctodesgn.c:304
+msgid "Inner Radius"
+msgstr "Innenradius"
+
+#: ../bin/ctodesgn.c:307
+msgid "Outer Radius"
+msgstr "Außenradius"
+
+#: ../bin/ctodesgn.c:309 ../bin/ctodesgn.c:376 ../bin/ctodesgn.c:451
+msgid "Toe Radius"
+msgstr "Anfangsradius"
+
+#: ../bin/ctodesgn.c:310 ../bin/ctodesgn.c:375
+msgid "Toe Length"
+msgstr "Anfangslänge"
+
+#: ../bin/ctodesgn.c:320
+msgid "Cornu Curved Turnout"
+msgstr "Cornu-Bogenweiche"
+
+#: ../bin/ctodesgn.c:330 ../bin/ctodesgn.c:367 ../bin/ctodesgn.c:396
+#: ../bin/ctodesgn.c:437
+msgid "Left Length"
+msgstr "Linke Länge"
+
+#: ../bin/ctodesgn.c:331 ../bin/ctodesgn.c:368 ../bin/ctodesgn.c:397
+#: ../bin/ctodesgn.c:438
+msgid "Left Angle"
+msgstr "Linker Winkel"
+
+#: ../bin/ctodesgn.c:332 ../bin/ctodesgn.c:369 ../bin/ctodesgn.c:398
+#: ../bin/ctodesgn.c:439
+msgid "Left Offset"
+msgstr "Linker Abstand"
+
+#: ../bin/ctodesgn.c:333 ../bin/ctodesgn.c:372 ../bin/ctodesgn.c:400
+#: ../bin/ctodesgn.c:446
+msgid "Right Offset"
+msgstr "Rechter Abstand"
+
+#: ../bin/ctodesgn.c:334 ../bin/ctodesgn.c:373 ../bin/ctodesgn.c:401
+#: ../bin/ctodesgn.c:447
+msgid "Right Angle"
+msgstr "Rechter Winkel"
+
+#: ../bin/ctodesgn.c:335 ../bin/ctodesgn.c:374 ../bin/ctodesgn.c:402
+#: ../bin/ctodesgn.c:448
+msgid "Right Length"
+msgstr "Rechte Länge"
+
+#: ../bin/ctodesgn.c:357
+msgid "Wye Turnout"
+msgstr "Außenbogenweiche"
+
+#: ../bin/ctodesgn.c:370 ../bin/ctodesgn.c:440
+msgid "Left Radius"
+msgstr "Linker Radius"
+
+#: ../bin/ctodesgn.c:371 ../bin/ctodesgn.c:445
+msgid "Right Radius"
+msgstr "Rechter Radius"
+
+#: ../bin/ctodesgn.c:386
+msgid "Cornu Wye Turnout"
+msgstr "Cornu-Außenbogenweiche"
+
+#: ../bin/ctodesgn.c:427
+msgid "3-way Turnout"
+msgstr "Dreiwegweiche"
+
+#: ../bin/ctodesgn.c:441
+msgid "Center Length"
+msgstr "Länge des Mittelgleis"
+
+#: ../bin/ctodesgn.c:442
+msgid "Center Angle"
+msgstr "Winkel des Mittelgleis"
+
+#: ../bin/ctodesgn.c:443 ../bin/dcar.c:2237
+msgid "Center Offset"
+msgstr "Abstand des Mittelgleis"
+
+#: ../bin/ctodesgn.c:444
+msgid "Center Radius"
+msgstr "Radius des Mittelgleis"
+
+#: ../bin/ctodesgn.c:449
+msgid "Toe Length Left"
+msgstr "Anfangslänge links"
+
+#: ../bin/ctodesgn.c:450
+msgid "Toe Length Right"
+msgstr "Anfangslänge rechts"
+
+#: ../bin/ctodesgn.c:462
+msgid "Cornu 3-way Turnout"
+msgstr "Cornu-Dreiwegweiche"
+
+#: ../bin/ctodesgn.c:482
+msgid "Crossing"
+msgstr "Kreuzung"
+
+#: ../bin/ctodesgn.c:503
+msgid "Single Slipswitch"
+msgstr "Einfache Kreuzungsweiche"
+
+#: ../bin/ctodesgn.c:532
+msgid "Double Slipswitch"
+msgstr "Doppelte Kreuzungsweiche"
+
+#: ../bin/ctodesgn.c:552
+msgid "Right Crossover"
+msgstr "Rechter Gleiswechsel"
+
+#: ../bin/ctodesgn.c:572
+msgid "Left Crossover"
+msgstr "Linker Gleiswechsel"
+
+#: ../bin/ctodesgn.c:592
+msgid "Double Crossover"
+msgstr "Doppelter Gleiswechsel"
+
+#: ../bin/ctodesgn.c:610
+msgid "Straight Section"
+msgstr "Gerader Abschnitt"
+
+#: ../bin/ctodesgn.c:621
+msgid "Angle (Degrees)"
+msgstr "Winkel (Grad)"
+
+#: ../bin/ctodesgn.c:629
+msgid "Curved Section"
+msgstr "Gebogener Abschnitt"
+
+#: ../bin/ctodesgn.c:648
+msgid "Bumper Section"
+msgstr "Prellbock"
+
+#: ../bin/ctodesgn.c:658 ../bin/denum.c:123 ../bin/denum.c:186
+#: ../bin/denum.c:218 ../bin/denum.c:219 ../bin/dlayer.c:497
+msgid "Count"
+msgstr "Anzahl"
+
+#: ../bin/ctodesgn.c:659
+msgid "Radius1"
+msgstr "Radius 1"
+
+#: ../bin/ctodesgn.c:660
+msgid "Radius2"
+msgstr "Radius 2"
+
+#: ../bin/ctodesgn.c:740
+msgid "Turntable Section"
+msgstr "Drehscheibenabschnitt"
+
+#: ../bin/ctodesgn.c:2543
+#, c-format
+msgid "%s Designer"
+msgstr "%s Designer"
+
+#: ../bin/ctodesgn.c:2547
+#, c-format
+msgid "%s %d x %d (of %d x %d)"
+msgstr "%s %d x %d (von %d x %d)"
+
+#: ../bin/ctodesgn.c:2547
+msgid "Page"
+msgstr "Seite"
+
+#: ../bin/ctodesgn.c:2555
+msgid "Frog Number"
+msgstr "Herzstücksteigung"
+
+#: ../bin/ctodesgn.c:2869
+msgid "Turnout Designer"
+msgstr "Weichendesigner"
+
+#: ../bin/ctodesgn.c:2879
+#, c-format
+msgid "%s %s Designer"
+msgstr "%s %s Designer"
+
+#: ../bin/ctrain.c:182 ../bin/dcar.c:2249 ../bin/dcar.c:4366 ../bin/dcar.c:4371
+msgid "Index"
+msgstr "Verzeichnis"
+
+#: ../bin/ctrain.c:188 ../bin/dcar.c:4367
+msgid "Rep Marks"
+msgstr "Wagennummer"
+
+#: ../bin/ctrain.c:272
+msgid "Car"
+msgstr "Wagen"
+
+#: ../bin/ctrain.c:656
+msgid "Follow"
+msgstr "Folgen"
+
+#: ../bin/ctrain.c:657
+msgid "Auto Reverse"
+msgstr "Automat. Wenden"
+
+#: ../bin/ctrain.c:676 ../bin/dcar.c:5256
+msgid "Find"
+msgstr "Finden"
+
+#: ../bin/ctrain.c:682 ../bin/ctrain.c:941 ../bin/ctrain.c:1250
+#: ../wlib/gtklib/ixhelp.c:239
+msgid "Forward"
+msgstr "Vorwärts"
+
+#: ../bin/ctrain.c:684 ../bin/ctrain.c:3125 ../bin/dcar.c:4705
+#: ../bin/dcar.c:4715 ../bin/dcar.c:4835 ../bin/fileio.c:242 ../bin/macro.c:92
+#: ../bin/macro.c:900
+msgid "Stop"
+msgstr "Anhalten"
+
+#: ../bin/ctrain.c:882 ../bin/ctrain.c:911
+msgid "Crashed"
+msgstr "Entgleist"
+
+#: ../bin/ctrain.c:884
+msgid "Not on Track"
+msgstr "Nicht auf einem Gleis"
+
+#: ../bin/ctrain.c:888
+msgid "Trains Paused"
+msgstr "Züge angehalten"
+
+#: ../bin/ctrain.c:890
+msgid "Running"
+msgstr "Fährt"
+
+#: ../bin/ctrain.c:895
+msgid "End of Track"
+msgstr "Ende des Gleis"
+
+#: ../bin/ctrain.c:899
+msgid "Open Turnout"
+msgstr "Weiche ist gesperrt"
+
+#: ../bin/ctrain.c:903
+msgid "Manual Stop"
+msgstr "Von Hand angehalten"
+
+#: ../bin/ctrain.c:907
+msgid "No Room"
+msgstr "Kein Platz"
+
+#: ../bin/ctrain.c:915
+msgid "Unknown Status"
+msgstr "Unbekannter Zustand"
+
+#: ../bin/ctrain.c:925
+msgid "No trains"
+msgstr "Keine Züge"
+
+#: ../bin/ctrain.c:1301
+msgid "Train Control XXX"
+msgstr "Zugsteuerung XXX"
+
+#: ../bin/ctrain.c:1302
+#, c-format
+msgid "Train Control %d"
+msgstr "Zugsteuerung %d"
+
+#: ../bin/ctrain.c:1304
+msgid "Train Control"
+msgstr "Zugsteuerung"
+
+#: ../bin/ctrain.c:3098
+msgid "Train"
+msgstr "Zug"
+
+#: ../bin/ctrain.c:3111
+msgid "Uncouple"
+msgstr "Entkuppeln"
+
+#: ../bin/ctrain.c:3113
+msgid "Flip Car"
+msgstr "Wagen umdrehen"
+
+#: ../bin/ctrain.c:3115
+msgid "Clearance Lines On"
+msgstr "Begrenzungslinien an"
+
+#: ../bin/ctrain.c:3117
+msgid "Clearance Lines Off"
+msgstr "Begrenzungslinien aus"
+
+#: ../bin/ctrain.c:3119
+msgid "Flip Train"
+msgstr "Zug umdrehen"
+
+#: ../bin/ctrain.c:3121
+msgid "MU Master"
+msgstr "Mehrtraktionssteuerung"
+
+#: ../bin/ctrain.c:3124
+msgid "Change Direction"
+msgstr "Richtung ändern"
+
+#: ../bin/ctrain.c:3128
+msgid "Remove Car"
+msgstr "Wagen entfernen"
+
+#: ../bin/ctrain.c:3131
+msgid "Remove Train"
+msgstr "Zug entfernen"
+
+#: ../bin/cturnout.c:96 ../bin/dcar.c:2271 ../bin/dcar.c:2275
+msgid "New"
+msgstr "Neu"
+
+#: ../bin/cturnout.c:370
+#, c-format
+msgid "Turnout path[%d:%d] out of bounds: %d"
+msgstr "Weg durch Weiche[%d:%d] ausserhalb der Grenzen: %d"
+
+#: ../bin/cturnout.c:381 ../bin/cturnout.c:391
+#, c-format
+msgid "Turnout path[%d] %d is not a valid track segment"
+msgstr "Weg durch Weiche[%d] %d ist kein gültiger Gleisabschnitt"
+
+#: ../bin/cturnout.c:401 ../bin/cturnout.c:406
+#, c-format
+msgid "Turnout path[%d] %d is not a track segment"
+msgstr "Weg durch Weiche[%d] % ist kein Gleisabschnitt"
+
+#: ../bin/cturnout.c:414
+#, c-format
+msgid "Turnout path[%d] %d-%d not connected: %0.3f P0(%f,%f) P1(%f,%f)"
+msgstr ""
+"Weg durch Weiche[%d] %d-%d ist nicht verbunden: %0.3f P0(%f,%f) P1(%f,%f)"
+
+#: ../bin/cturnout.c:452
+msgid "Unknown special case"
+msgstr "Unbekannter Sonderfall"
+
+#: ../bin/cturnout.c:562
+msgid "Connect Adjustable Tracks"
+msgstr "Veränderbare Gleise verbinden"
+
+#: ../bin/cturnout.c:1104
+msgid "splitTurnout: can't find segment"
+msgstr "Weiche auftrennen: Gleissegment nicht gefunden"
+
+#: ../bin/cturnout.c:1553 ../bin/track.c:2259 ../bin/track.c:2365
+#: ../bin/tstraigh.c:554
+msgid "Drag to change track length"
+msgstr "Ziehen um die Gleislänge zu ändern"
+
+#: ../bin/cturnout.c:1564
+#, c-format
+msgid "Length=%s"
+msgstr "Länge=%s"
+
+#: ../bin/cturnout.c:2386
+#, c-format
+msgid "%d connections, max distance %0.3f (%s)"
+msgstr "%d Verbindungen, max. Abstand %0.3f (%s)"
+
+#: ../bin/cturnout.c:2391
+#, c-format
+msgid "0 connections (%s)"
+msgstr "Keine Verbindungen (%s)"
+
+#: ../bin/cturnout.c:2431
+msgid "Place New Turnout"
+msgstr "Neue Weiche setzen"
+
+#: ../bin/cturnout.c:2841
+#, c-format
+msgid "Angle = %0.3f (%s)"
+msgstr "Winkel = %0.3f (%s)"
+
+#: ../bin/cturnout.c:2933 ../bin/param.c:2622
+msgid "Close"
+msgstr "Schliessen"
+
+#: ../bin/cturnout.c:2950
+msgid "Pick turnout and active End Point, then place on the layout"
+msgstr ""
+"Weiche und aktiven Endpunkt auswählen und dann auf den Gleisplan setzen"
+
+#: ../bin/cturnout.c:3144
+msgid "Predefined Track"
+msgstr "Vordefiniertes Gleis"
+
+#: ../bin/cturntbl.c:52 ../bin/cturntbl.c:251 ../bin/cturntbl.c:857
+#: ../bin/cturntbl.c:871
+msgid "Diameter"
+msgstr "Durchmesser"
+
+#: ../bin/cturntbl.c:252
+msgid "# EndPt"
+msgstr "Anzahl Endpunkte"
+
+#: ../bin/cturntbl.c:286
+#, c-format
+msgid "Turntable(%d): Layer=%d Center=[%s %s] Diameter=%s #EP=%d"
+msgstr ""
+"Drehscheibe(%d): Ebene=%d Mittelpunkt=[%s %s] Durchmesser=%s Anzahl "
+"Endpunkte=%d"
+
+#: ../bin/cturntbl.c:301
+msgid "Turntable"
+msgstr "Drehscheibe"
+
+#: ../bin/cturntbl.c:565
+msgid "Drag to create stall track"
+msgstr "Ziehen um Schuppengleis zu erstellen"
+
+#: ../bin/cturntbl.c:618
+msgid "Connect Turntable Tracks"
+msgstr "Drehscheibengleise verbinden"
+
+#: ../bin/cturntbl.c:885
+msgid "Create Turntable"
+msgstr "Drehscheibe setzen"
+
+#: ../bin/cturntbl.c:916
+msgid "Custom Turntable"
+msgstr "Drehscheibe entwerfen"
+
+#: ../bin/cundo.c:166
+msgid "Undo Trace"
+msgstr "Undo Trace"
+
+#: ../bin/cundo.c:536
+#, c-format
+msgid "Undo: %s"
+msgstr "Rückgängig: %s"
+
+#: ../bin/cundo.c:539 ../../../../build/work/app/bin/bllnhlp.c:158
+msgid "Undo last command"
+msgstr "Letzten Befehl rückgängig machen"
+
+#: ../bin/cundo.c:544
+#, c-format
+msgid "Redo: %s"
+msgstr "Wiederholen: %s"
+
+#: ../bin/cundo.c:547 ../../../../build/work/app/bin/bllnhlp.c:124
+msgid "Redo last undo"
+msgstr "Rückgängig gemachten Befehl wiederholen"
+
+#: ../bin/custom.c:167
+#, c-format
+msgid "%s Turnout Designer"
+msgstr "%s Weichendesigner"
+
+#: ../bin/custom.c:172
+#, c-format
+msgid "%s Version %s"
+msgstr "%s Version %s"
+
+#: ../bin/custom.c:177
+#, c-format
+msgid ""
+"All %s Files (*.xtc,*.xtce)|*.xtc;*.xtce|%s Trackplan (*.xtc)|*.xtc|%s "
+"Extended Trackplan (*.xtce)|*.xtce|All Files (*)|*"
+msgstr ""
+"Alle %s-Dateien (*.xtc,*.xtce)|*.xtc;*.xtce|%s Gleisplan (*.xtc)|*.xtc|%s "
+"Erweiterter Gleisplan (*.xtce)|*.xtce|Alle Dateien (*)|*"
+
+#: ../bin/custom.c:188
+#, c-format
+msgid ""
+"%s Trackplan (*.xtc)|*.xtc|%s Extended Trackplan (*.xtce)|*.xtce|All Files "
+"(*)|*"
+msgstr ""
+"%s Gleisplan (*.xtc)|*.xtc|%s Erweiterter Gleisplan (*.xtce)|*.xtce|Alle "
+"Dateien (*)|*"
+
+#: ../bin/custom.c:197
+#, c-format
+msgid "All Files (*)|*"
+msgstr "Alle Dateien (*)|*"
+
+#: ../bin/custom.c:202
+#, c-format
+msgid "%s Import Files (*.xti)|*.xti"
+msgstr "%s-Importdateien(*.xti)|*.xti"
+
+#: ../bin/custom.c:207
+msgid "Data Exchange Format Files (*.dxf)|*.dxf"
+msgstr "Data Exchange Format Dateien(*.dxf)|*.dxf"
+
+#: ../bin/custom.c:211
+#, c-format
+msgid "%s Record Files (*.xtr)|*.xtr"
+msgstr "%s-Aufzeichnungsdateien (*.xtr)|*.xtr"
+
+#: ../bin/custom.c:216
+#, c-format
+msgid "%s Note Files (*.not)|*.not"
+msgstr "%s-Notizen (*.not)|*.not"
+
+#: ../bin/custom.c:221
+#, c-format
+msgid "%s Log Files (*.log)|*.log"
+msgstr "%s-Protokolldateien (*.log)|*.log"
+
+#: ../bin/custom.c:226
+#, c-format
+msgid "%s PartsList Files (*.txt)|*.txt"
+msgstr "%s-Stücklisten (*.txt)|*.txt"
+
+#: ../bin/dbench.c:43
+msgid " L-Girder"
+msgstr " L-Träger"
+
+#: ../bin/dbench.c:43
+msgid " T-Girder"
+msgstr " T-Träger"
+
+#: ../bin/dbench.c:66
+msgid "On Edge"
+msgstr "Hochkant"
+
+#: ../bin/dbench.c:67
+msgid "Flat"
+msgstr "Flach"
+
+#: ../bin/dbench.c:71
+msgid "Left-Down"
+msgstr "Links unten"
+
+#: ../bin/dbench.c:72
+msgid "Right-Down"
+msgstr "Rechts unten"
+
+#: ../bin/dbench.c:73
+msgid "Left-Up"
+msgstr "Links oben"
+
+#: ../bin/dbench.c:74
+msgid "Right-Up"
+msgstr "Rechts oben"
+
+#: ../bin/dbench.c:75
+msgid "Left-Inverted"
+msgstr "Links umgekehrt"
+
+#: ../bin/dbench.c:76
+msgid "Right-Inverted"
+msgstr "Rechts umgekehrt"
+
+#: ../bin/dbench.c:81
+msgid "Inverted"
+msgstr "Umgekehrt"
+
+#: ../bin/dbench.c:147
+#, c-format
+msgid ""
+"Bad BenchType for %s:\n"
+"%s"
+msgstr ""
+"Falscher Trägertyp %s:\n"
+"%s"
+
+#: ../bin/dbitmap.c:102 ../bin/dbitmap.c:106
+msgid "Drawn with "
+msgstr "Gezeichnet mit "
+
+#: ../bin/dbitmap.c:116
+msgid "Drawing tracks to BitMap"
+msgstr "Gleisplan als Grafik ausgeben"
+
+#: ../bin/dbitmap.c:123
+msgid "Writing BitMap to file"
+msgstr "Grafik in Datei speichern"
+
+#: ../bin/dbitmap.c:144
+msgid "Print Titles"
+msgstr "Überschriften ausgeben"
+
+#: ../bin/dbitmap.c:144
+msgid "Print Borders"
+msgstr "Rahmen ausgeben"
+
+#: ../bin/dbitmap.c:145
+msgid "Print Centerline"
+msgstr "Mittellinie ausgeben"
+
+#: ../bin/dbitmap.c:152
+msgid " dpi"
+msgstr " dpi"
+
+#: ../bin/dbitmap.c:154
+msgid "Bitmap : 99999 by 99999 pixels"
+msgstr "Grafik : 99999 auf 99999 Bildpunkte"
+
+#: ../bin/dbitmap.c:156
+msgid "Approximate file size: 999.9Mb"
+msgstr "Ungefähre Dateigrösse : 999.9Mb"
+
+#: ../bin/dbitmap.c:186
+#, c-format
+msgid "Bitmap : %ld by %ld pixels"
+msgstr "Grafik : %ld auf %ld Bildpunkte"
+
+#: ../bin/dbitmap.c:190
+#, c-format
+msgid "Approximate file size : %0.0f"
+msgstr "Ungefähre Dateigrösse : %0.0f"
+
+#: ../bin/dbitmap.c:192
+#, c-format
+msgid "Approximate file size : %0.1fKb"
+msgstr "Ungefähre Dateigrösse : %0.1fKb"
+
+#: ../bin/dbitmap.c:194
+#, c-format
+msgid "Approximate file size : %0.1fMb"
+msgstr "Ungefähre Dateigrösse : %0.1fMb"
+
+#: ../bin/dbitmap.c:213
+msgid "Save Bitmap"
+msgstr "Grafik speichern"
+
+#: ../bin/dbitmap.c:217
+msgid "Bitmap files (*.png)|*.png"
+msgstr "Portable Network Graphics (*.png)|*.png"
+
+#: ../bin/dbitmap.c:238
+msgid "BitMap"
+msgstr "Grafik"
+
+#: ../bin/dcar.c:54
+msgid "Truck"
+msgstr "Drehgestell"
+
+#: ../bin/dcar.c:54
+msgid "Body"
+msgstr "Aufbau"
+
+#: ../bin/dcar.c:156 ../bin/dcar.c:2701 ../bin/dcar.c:2705
+msgid "Unknown"
+msgstr "Unbekannt"
+
+#: ../bin/dcar.c:478
+msgid "Diesel Loco"
+msgstr "Diesellok"
+
+#: ../bin/dcar.c:479
+msgid "Steam Loco"
+msgstr "Dampflok"
+
+#: ../bin/dcar.c:480
+msgid "Elect Loco"
+msgstr "Elektrolok"
+
+#: ../bin/dcar.c:481
+msgid "Freight Car"
+msgstr "Güterwagen"
+
+#: ../bin/dcar.c:482
+msgid "Psngr Car"
+msgstr "Personenwagen"
+
+#: ../bin/dcar.c:483
+msgid "M-O-W"
+msgstr "Arbeitswagen"
+
+#: ../bin/dcar.c:484
+msgid "Other"
+msgstr "Sonstige"
+
+#: ../bin/dcar.c:1183 ../bin/dcar.c:5077
+msgid "N/A"
+msgstr "Keine Angabe"
+
+#: ../bin/dcar.c:1184 ../bin/dcar.c:5082
+msgid "Mint"
+msgstr "Neuwertig"
+
+#: ../bin/dcar.c:1185 ../bin/dcar.c:5081
+msgid "Excellent"
+msgstr "Exzellent"
+
+#: ../bin/dcar.c:1186 ../bin/dcar.c:5080
+msgid "Good"
+msgstr "Gut"
+
+#: ../bin/dcar.c:1187 ../bin/dcar.c:5079
+msgid "Fair"
+msgstr "In Ordnung"
+
+#: ../bin/dcar.c:1188 ../bin/dcar.c:5078
+msgid "Poor"
+msgstr "Schlecht"
+
+#: ../bin/dcar.c:1501 ../bin/dpricels.c:45
+#: ../../../../build/work/app/bin/bllnhlp.c:440
+msgid "Item"
+msgstr "Gegenstand"
+
+#: ../bin/dcar.c:2173 ../wlib/gtklib/notice.c:96 ../wlib/mswlib/mswmisc.c:2097
+msgid "Information"
+msgstr "Information"
+
+#: ../bin/dcar.c:2173
+msgid "Customize"
+msgstr "Anpassen"
+
+#: ../bin/dcar.c:2185
+msgid "Sequential"
+msgstr "Aufsteigend"
+
+#: ../bin/dcar.c:2185
+msgid "Repeated"
+msgstr "Wiederholend"
+
+#: ../bin/dcar.c:2196 ../bin/dcar.c:2198 ../bin/dcar.c:5407
+msgid "Prototype"
+msgstr "Vorbild"
+
+#: ../bin/dcar.c:2204
+msgid "Part"
+msgstr "Teil"
+
+#: ../bin/dcar.c:2206 ../../../../build/work/app/bin/bllnhlp.c:372
+#: ../../../../build/work/app/bin/bllnhlp.c:568
+#: ../../../../build/work/app/bin/bllnhlp.c:569
+msgid "Part Number"
+msgstr "Bestellnummer"
+
+#: ../bin/dcar.c:2208
+msgid "Loco?"
+msgstr "Lok?"
+
+#: ../bin/dcar.c:2212 ../bin/dcar.c:4404
+msgid "Import"
+msgstr "Import"
+
+#: ../bin/dcar.c:2219
+msgid "Mode"
+msgstr "Modus"
+
+#: ../bin/dcar.c:2223
+msgid "Road"
+msgstr "Gesellschaft"
+
+#: ../bin/dcar.c:2225
+msgid "Reporting Mark"
+msgstr "Wagennummer"
+
+#: ../bin/dcar.c:2227
+msgid "Number"
+msgstr "Nummer"
+
+#: ../bin/dcar.c:2231
+msgid "Car Length"
+msgstr "Wagenlänge"
+
+#: ../bin/dcar.c:2235
+msgid "Truck Centers"
+msgstr "Drehgestellabstand"
+
+#: ../bin/dcar.c:2239
+msgid "Coupler Mount"
+msgstr "Kupplungsbefestigung"
+
+#: ../bin/dcar.c:2241
+msgid "Coupled Length"
+msgstr "Gekuppelte Länge"
+
+#: ../bin/dcar.c:2243 ../bin/dcar.c:4251
+msgid "Coupler Length"
+msgstr "Kupplungslänge"
+
+#: ../bin/dcar.c:2251
+msgid "Purchase Price"
+msgstr "Kaufpreis"
+
+#: ../bin/dcar.c:2253 ../../../../build/work/app/bin/bllnhlp.c:236
+msgid "Current Price"
+msgstr "Aktueller Preis"
+
+#: ../bin/dcar.c:2255 ../bin/dcar.c:4368 ../bin/dcar.c:4373
+msgid "Condition"
+msgstr "Zustand"
+
+#: ../bin/dcar.c:2257
+msgid "Purchase Date"
+msgstr "Kaufdatum"
+
+#: ../bin/dcar.c:2259 ../bin/dcar.c:4373
+msgid "Service Date"
+msgstr "Servicedatum"
+
+#: ../bin/dcar.c:2261
+msgid "Quantity"
+msgstr "Anzahl"
+
+#: ../bin/dcar.c:2263
+msgid "Numbers"
+msgstr "Nummern"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:371
+#: ../bin/dcar.c:2265 ../bin/dcar.c:4369 ../bin/trknote.c:708
+#: ../../../../build/work/app/i18n/custmsg.h:1267
+msgid "Notes"
+msgstr "Notizen"
+
+#: ../bin/dcar.c:2272
+msgid "Car Part"
+msgstr "Wagenvorlage"
+
+#: ../bin/dcar.c:2273 ../../../../build/work/app/bin/bllnhlp.c:210
+#: ../../../../build/work/app/bin/bllnhlp.c:211
+msgid "Car Prototype"
+msgstr "Wagenvorbild"
+
+#: ../bin/dcar.c:2635 ../bin/dcar.c:2952
+msgid "Undecorated"
+msgstr "Unbeschriftet"
+
+#: ../bin/dcar.c:2693 ../bin/dcar.c:2697 ../bin/paramfilelist.c:376
+msgid "Custom"
+msgstr "Individual"
+
+#: ../bin/dcar.c:2862
+msgid "Undecorated "
+msgstr "Unbeschriftet "
+
+#: ../bin/dcar.c:3084
+#, c-format
+msgid "New %s Scale Car"
+msgstr "Neuer Wagen in %s"
+
+#: ../bin/dcar.c:3085 ../bin/dcar.c:3094 ../bin/dcar.c:3103 ../bin/dcar.c:4284
+#: ../bin/dcar.c:4400 ../bin/paramfilesearch_ui.c:74
+msgid "Add"
+msgstr "Hinzufügen"
+
+#: ../bin/dcar.c:3087
+#, c-format
+msgid "Update %s Scale Car"
+msgstr "Aktualisiere Wagen in Maßstab %s"
+
+#: ../bin/dcar.c:3088 ../bin/dcar.c:3097 ../bin/dcar.c:3106 ../bin/dcmpnd.c:173
+msgid "Update"
+msgstr "Aktualisieren"
+
+#: ../bin/dcar.c:3093
+#, c-format
+msgid "New %s Scale Car Part"
+msgstr "Neue Wagenvorlage in %s"
+
+#: ../bin/dcar.c:3096
+#, c-format
+msgid "Update %s Scale Car Part"
+msgstr "Wagenvorlage in %s aktualisieren"
+
+#: ../bin/dcar.c:3102
+msgid "New Prototype"
+msgstr "Neues Vorbild"
+
+#: ../bin/dcar.c:3105
+msgid "Update Prototype"
+msgstr "Aktualisiere Vorbild"
+
+#: ../bin/dcar.c:3777
+msgid "Enter a 8 digit numeric date"
+msgstr "Geben Sie ein 8-stelliges numerisches Datum ein"
+
+#: ../bin/dcar.c:3780
+msgid "Enter a 8 digit date"
+msgstr "Geben Sie ein 8-stelliges Datum ein"
+
+#: ../bin/dcar.c:3782
+msgid "Enter a date between 19000101 and 21991231"
+msgstr "Geben Sie ein Datum zwischen 19000101 und 21991231 ein"
+
+#: ../bin/dcar.c:3787
+msgid "Invalid month"
+msgstr "Ungültiger Monat"
+
+#: ../bin/dcar.c:3789
+msgid "Invalid day"
+msgstr "Ungültiger Kalendertag"
+
+#: ../bin/dcar.c:3881
+msgid "Enter a Prototype name"
+msgstr "Geben Sie den Namen des Vorbild ein"
+
+#: ../bin/dcar.c:3883
+msgid "Select or Enter a Manufacturer"
+msgstr "Hersteller auswählen oder eingeben"
+
+#: ../bin/dcar.c:3885
+msgid "Enter a Part Number"
+msgstr "Bestellnummer eingeben"
+
+#: ../bin/dcar.c:3887
+msgid "Enter the Car Length"
+msgstr "Länge des Wagen eingeben"
+
+#: ../bin/dcar.c:3889
+msgid "Enter the Car Width"
+msgstr "Breite des Wagen eingeben"
+
+#: ../bin/dcar.c:3891
+msgid "Enter the Truck Centers"
+msgstr "Drehgestellabstand eingeben"
+
+#: ../bin/dcar.c:3893
+msgid "Truck Center Offset must be greater than 0 or 0"
+msgstr "Abstand der Drehgestelle vom Ende muss größer oder gleich 0 sein"
+
+#: ../bin/dcar.c:3895
+msgid "Truck Centers must be less than Car Length"
+msgstr "Abstand der Drehgestelle muss kleiner als die Wagenlänge sein"
+
+#: ../bin/dcar.c:3897
+msgid "Truck Center Offset plus Truck Centers must be less than Car Length"
+msgstr ""
+"Abstand der Drehgestelle vom Ende und deren Abstand muss kleiner als die "
+"Wagenlänge sein"
+
+#: ../bin/dcar.c:3899
+msgid "Enter the Coupled Length or Coupler Length"
+msgstr "Geben Sie die gekuppelte Länge oder die Kupplungslänge ein"
+
+#: ../bin/dcar.c:3901
+msgid "Enter the Coupled Length"
+msgstr "Geben Sie die gekuppelte Länge ein"
+
+#: ../bin/dcar.c:3903
+msgid "Enter a item Index"
+msgstr "Geben Sie eine Kennnummer ein"
+
+#: ../bin/dcar.c:3905
+msgid "Purchase Price is not valid"
+msgstr "Kaufpreis ist nicht gültig"
+
+#: ../bin/dcar.c:3907
+msgid "Current Price is not valid"
+msgstr "Aktueller Preis ist nicht gültig"
+
+#: ../bin/dcar.c:3909
+msgid "Purchase Date is not valid"
+msgstr "Kaufdatum ist nicht gültig"
+
+#: ../bin/dcar.c:3911
+msgid "Service Date is not valid"
+msgstr "Servicedatum ist nicht gültig"
+
+#: ../bin/dcar.c:3914
+#, c-format
+msgid "Item Index %ld duplicated an existing item: updated to new value"
+msgstr "Kennnummer %ld existiert bereits: mit neuem Wert aktualisiert"
+
+#: ../bin/dcar.c:4110
+#, c-format
+msgid "Added %ld new Cars"
+msgstr "%ld neue Wagen hinzugefügt"
+
+#: ../bin/dcar.c:4112
+msgid "Added new Car"
+msgstr "Neuen Wagen hinzugefügt"
+
+#: ../bin/dcar.c:4115
+msgid "Updated Car"
+msgstr "Wagen aktualisiert"
+
+#: ../bin/dcar.c:4118
+msgid " and Part"
+msgstr " und Teil"
+
+#: ../bin/dcar.c:4145
+#, c-format
+msgid "%s Part: %s %s %s %s %s %s"
+msgstr "%s Teil: %s %s %s %s %s %s"
+
+#: ../bin/dcar.c:4145 ../bin/dcar.c:4162
+msgid "Added new"
+msgstr "Neu hinzugefügt"
+
+#: ../bin/dcar.c:4145 ../bin/dcar.c:4162
+msgid "Updated"
+msgstr "Aktualisiert"
+
+#: ../bin/dcar.c:4161
+#, c-format
+msgid "%s Prototype: %s%s."
+msgstr "%s Vorbild: %s%s."
+
+#: ../bin/dcar.c:4163
+msgid ". Enter new values or press Close"
+msgstr ". Neue Werte eingeben oder Abbruch drücken"
+
+#: ../bin/dcar.c:4284
+msgid "New Car Part"
+msgstr "Neues Wagenmuster"
+
+#: ../bin/dcar.c:4367 ../bin/dcar.c:4372
+#: ../../../../build/work/app/bin/bllnhlp.c:410
+msgid "Roadname"
+msgstr "Gesellschaft"
+
+#: ../bin/dcar.c:4367
+msgid "Purc Price"
+msgstr "Kaufpreis"
+
+#: ../bin/dcar.c:4368 ../bin/dcar.c:4373
+msgid "Curr Price"
+msgstr "Akt. Preis"
+
+#: ../bin/dcar.c:4368
+msgid "Purc Date"
+msgstr "Kaufdaum"
+
+#: ../bin/dcar.c:4368
+msgid "Srvc Date"
+msgstr "Servicedatum"
+
+#: ../bin/dcar.c:4369
+msgid "Locat'n"
+msgstr "Ort"
+
+#: ../bin/dcar.c:4372
+msgid "RepMarks"
+msgstr "Wagennummer"
+
+#: ../bin/dcar.c:4372
+msgid "Purch Price"
+msgstr "Kaufpreis"
+
+#: ../bin/dcar.c:4373
+msgid "Purch Date"
+msgstr "Kaufdatum"
+
+#: ../bin/dcar.c:4390
+msgid "Sort By"
+msgstr "Sortierung"
+
+#: ../bin/dcar.c:4398 ../bin/dcontmgm.c:99 ../bin/dcustmgm.c:71
+#: ../bin/dcustmgm.c:108
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: ../bin/dcar.c:4402 ../bin/dcontmgm.c:101 ../bin/dcustmgm.c:73
+#: ../bin/misc.c:2246
+msgid "Delete"
+msgstr "Löschen"
+
+#: ../bin/dcar.c:4406 ../bin/fileio.c:1517
+msgid "Export"
+msgstr "Export"
+
+#: ../bin/dcar.c:4408 ../../../../build/work/app/bin/bllnhlp.c:585
+msgid "List"
+msgstr "Auflisten"
+
+#: ../bin/dcar.c:4519 ../bin/dcar.c:5256 ../bin/misc.c:2622
+msgid "Car Inventory"
+msgstr "Wagenverzeichnis"
+
+#: ../bin/dcar.c:4639
+msgid "List Cars"
+msgstr "Wagen auflisten"
+
+#: ../bin/dcar.c:4763 ../bin/dcar.c:4928
+msgid "Import Cars"
+msgstr "Wagen importieren"
+
+#: ../bin/dcar.c:4929 ../bin/dcar.c:5052
+msgid "Comma-Separated-Values (*.csv)|*.csv"
+msgstr "Durch-Kommata getrennte Werte(*.csv)|*.csv"
+
+#: ../bin/dcar.c:4999 ../bin/dcar.c:5051
+msgid "Export Cars"
+msgstr "Wagen exportieren"
+
+#: ../bin/dcar.c:5085
+msgid "Layout"
+msgstr "Anlage"
+
+#: ../bin/dcar.c:5087
+msgid "Shelf"
+msgstr "Regal"
+
+#: ../bin/dcmpnd.c:77 ../bin/dlayer.c:499 ../bin/misc.c:617 ../bin/misc.c:649
+msgid "Load"
+msgstr "Laden"
+
+#: ../bin/dcmpnd.c:110
+msgid "Updating definitions, please wait"
+msgstr "Bitte warten, Definitionen werden aktualisiert"
+
+#: ../bin/dcmpnd.c:173
+msgid "Update Title"
+msgstr "Ãœberschrift aktualisieren"
+
+#: ../bin/dcmpnd.c:233
+#, c-format
+msgid "End-Point #%d of the selected and actual turnouts are not close"
+msgstr ""
+"Endpunkte #%d der ausgewählten und der aktuellen Weiche sind nicht "
+"beieinander"
+
+#: ../bin/dcmpnd.c:242
+#, c-format
+msgid "End-Point #%d of the selected and actual turnouts are not aligned"
+msgstr ""
+"Endpunkte #%d der ausgewählten und der aktuellen Weiche sind nicht "
+"ausgerichtet"
+
+#: ../bin/dcmpnd.c:261
+msgid "The selected Turnout had a differing number of End-Points"
+msgstr "Die ausgewählte Weiche hatte eine andere Anzahl von Endpunkten"
+
+#: ../bin/dcmpnd.c:327
+msgid "Skip"
+msgstr "Überspringen"
+
+#: ../bin/dcmpnd.c:359
+#, c-format
+msgid "%d Track(s) refreshed"
+msgstr "%d Gleise bearbeitet"
+
+#: ../bin/dcmpnd.c:399
+msgid "Refresh Turnout/Structure"
+msgstr "Weichen/Gebäude neu laden"
+
+#: ../bin/dcmpnd.c:401
+msgid "Choose a Turnout/Structure to replace:"
+msgstr "Zu ersetzende Weiche / Gebäude auswählen:"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:341
+#: ../bin/dcmpnd.c:411 ../bin/doption.c:132
+#: ../../../../build/work/app/i18n/custmsg.h:1207
+msgid "Turnouts"
+msgstr "Weichen"
+
+#: ../bin/dcmpnd.c:411
+msgid "Structures"
+msgstr "Gebäude"
+
+#: ../bin/dcmpnd.c:440
+msgid "Choose another Turnout/Structure to replace:"
+msgstr "Eine andere zu ersetzende Weiche / zu ersetzendes Gebäude auswählen:"
+
+#: ../bin/dcmpnd.c:542
+msgid "Rename Object"
+msgstr "Objekt umbenennen"
+
+#: ../bin/dcontmgm.c:92
+msgid "Tracks"
+msgstr "Gleise"
+
+#: ../bin/dcontmgm.c:173
+#, c-format
+msgid "Are you sure you want to delete the %d control element(s)"
+msgstr "Sind Sie sicher, dass Sie diese %d Steuerungselemente löschen wollen?"
+
+#: ../bin/dcontmgm.c:176
+msgid "Control Elements"
+msgstr "Steuerungselemente"
+
+#: ../bin/dcontmgm.c:299
+msgid "Manage Layout Control Elements"
+msgstr "Steuerungselemente verwalten"
+
+#: ../bin/dcustmgm.c:67
+msgid "Create a new "
+msgstr "Erstelle neue(n) "
+
+#: ../bin/dcustmgm.c:69
+msgid "Go"
+msgstr "Los"
+
+#: ../bin/dcustmgm.c:75
+msgid "Move To"
+msgstr "Verschieben nach"
+
+#: ../bin/dcustmgm.c:108
+msgid "Rename"
+msgstr "Umbenennen"
+
+#: ../bin/dcustmgm.c:189
+msgid "Label"
+msgstr "Beschriftung"
+
+#: ../bin/dcustmgm.c:227
+msgid "Contents Label"
+msgstr "Inhaltsbeschriftung"
+
+#: ../bin/dcustmgm.c:283
+msgid "Move To XTP"
+msgstr "\"In Paramterdatei verschieben"
+
+#: ../bin/dcustmgm.c:284
+msgid "Parameter File (*.xtp)|*.xtp"
+msgstr "Parameterdateien (*.xtp)|*.xtp"
+
+#: ../bin/dcustmgm.c:395
+msgid "Manage custom designed parts"
+msgstr "Eigene Teile verwalten"
+
+#: ../bin/dease.c:67
+msgid "Sharp"
+msgstr "Eng"
+
+#: ../bin/dease.c:67
+msgid "Broad"
+msgstr "Weit"
+
+#: ../bin/dease.c:67
+msgid "Cornu"
+msgstr "Cornu"
+
+#: ../bin/dease.c:74
+msgid "Value"
+msgstr "Wert"
+
+#: ../bin/dease.c:75 ../bin/tease.c:525
+msgid "R"
+msgstr "R"
+
+#: ../bin/dease.c:77 ../bin/tease.c:526
+msgid "L"
+msgstr "L"
+
+#: ../bin/dease.c:242
+msgid "Easement"
+msgstr "Übergangsbogen"
+
+#: ../bin/denum.c:49
+msgid "Prices"
+msgstr "Preise"
+
+#: ../bin/denum.c:54
+msgid "Save As ..."
+msgstr "Speichern unter..."
+
+#: ../bin/denum.c:134 ../bin/denum.c:189 ../bin/denum.c:224
+msgid "Each"
+msgstr "Je"
+
+#: ../bin/denum.c:148 ../bin/denum.c:149
+msgid "Parts List"
+msgstr "Teileliste"
+
+#: ../bin/denum.c:154
+#, c-format
+msgid ""
+"%s Parts List\n"
+"\n"
+msgstr ""
+"%s Teileliste\n"
+"\n"
+
+#: ../bin/denum.c:189 ../bin/denum.c:226 ../bin/denum.c:235
+msgid "Extended"
+msgstr "Erweitert"
+
+#: ../bin/denum.c:235 ../bin/denum.c:238
+msgid "Total"
+msgstr "Summe"
+
+#: ../bin/dlayer.c:487
+msgid "Use Color"
+msgstr "Farbe benutzen"
+
+#: ../bin/dlayer.c:489
+msgid "Visible"
+msgstr "Sichtbar"
+
+#: ../bin/dlayer.c:491
+msgid "Frozen"
+msgstr "Fixiert"
+
+#: ../bin/dlayer.c:493
+msgid "On Map"
+msgstr "Auf der Karte"
+
+#: ../bin/dlayer.c:495
+msgid "Module"
+msgstr "Modul"
+
+#: ../bin/dlayer.c:498
+msgid "Personal Preferences"
+msgstr "Persönliche Einstellungen"
+
+#: ../bin/dlayer.c:500 ../bin/macro.c:1421
+msgid "Save"
+msgstr "Speichern"
+
+#: ../bin/dlayer.c:501
+msgid "Defaults"
+msgstr "Standardwerte"
+
+#: ../bin/dlayer.c:502
+msgid "Number of Layer Buttons"
+msgstr "Anzahl der Ebenenknöpfe"
+
+#: ../bin/dlayer.c:519 ../bin/dlayer.c:987 ../bin/dlayer.c:1000
+#: ../bin/dlayer.c:1051
+msgid "Main"
+msgstr "Haupt"
+
+#: ../bin/dlayer.c:632 ../bin/dlayer.c:925 ../bin/dlayer.c:1003
+#: ../bin/dlayer.c:1053 ../bin/dlayer.c:1311
+msgid "Show/Hide Layer"
+msgstr "Ebene anzeigen/verbergen"
+
+#: ../bin/dlayer.c:1124
+msgid "Layers"
+msgstr "Ebenen"
+
+#: ../bin/doption.c:95
+msgid "Turning off AutoSave"
+msgstr "Automatisches Sichern aus"
+
+#: ../bin/doption.c:104
+msgid "Turning on CheckPointing"
+msgstr "Sicherungskopien aktivieren"
+
+#: ../bin/doption.c:130
+msgid "Auto Pan"
+msgstr "Automatischer Ausschnitt"
+
+#: ../bin/doption.c:132
+msgid "All"
+msgstr "Alle"
+
+#: ../bin/doption.c:133
+msgid "Thick"
+msgstr "Dick"
+
+#: ../bin/doption.c:133
+msgid "Exception"
+msgstr "Ausnahmegleis"
+
+#: ../bin/doption.c:134
+msgid "Outline"
+msgstr "Umriss"
+
+#: ../bin/doption.c:135
+msgid "Off"
+msgstr "Aus"
+
+#: ../bin/doption.c:135
+msgid "On"
+msgstr "An"
+
+#: ../bin/doption.c:136
+msgid "Track Descriptions"
+msgstr "Gleisbeschreibungen"
+
+#: ../bin/doption.c:136
+msgid "Lengths"
+msgstr "Längen"
+
+#: ../bin/doption.c:136
+msgid "EndPt Elevations"
+msgstr "Endpunkthöhen"
+
+#: ../bin/doption.c:136
+msgid "Track Elevations"
+msgstr "Gleishöhen"
+
+#: ../bin/doption.c:136
+msgid "Cars"
+msgstr "Wagen"
+
+#: ../bin/doption.c:137 ../bin/doption.c:138
+msgid "Descr"
+msgstr "Beschreibung"
+
+#: ../bin/doption.c:138
+msgid "Manuf"
+msgstr "Hersteller"
+
+#: ../bin/doption.c:139 ../bin/doption.c:140
+msgid "Object"
+msgstr "Objekt"
+
+#: ../bin/doption.c:141
+msgid "Live Map"
+msgstr "Dynamische Karte"
+
+#: ../bin/doption.c:142
+msgid "Hide Trains On Hidden Track"
+msgstr "Verberge Züge auf verborgenem Gleis"
+
+#: ../bin/doption.c:143
+msgid "Constrain Drawing Area to Room boundaries"
+msgstr "Den Zeichenbereich auf die Raumgröße beschränken"
+
+#: ../bin/doption.c:150
+msgid "Color Track"
+msgstr "Farbiges Gleis"
+
+#: ../bin/doption.c:151
+msgid "Color Draw"
+msgstr "Farbige Objekte"
+
+#: ../bin/doption.c:152
+msgid "Draw Tunnel"
+msgstr "Zeichne Tunnel"
+
+#: ../bin/doption.c:153
+msgid "Draw EndPts"
+msgstr "Zeichne Endpunkte"
+
+#: ../bin/doption.c:154
+msgid "Draw Unconnected EndPts"
+msgstr "Zeichne offene Endpunkte"
+
+#: ../bin/doption.c:155
+msgid "Draw Ties"
+msgstr "Schwellen zeichnen"
+
+#: ../bin/doption.c:156
+msgid "Draw Centers"
+msgstr "Mittelpunkt zeichnen"
+
+#: ../bin/doption.c:157
+msgid "Two Rail Scale"
+msgstr "Maßstab für Gleis"
+
+#: ../bin/doption.c:158
+msgid "Map Scale"
+msgstr "Kartenmaßstab"
+
+#: ../bin/doption.c:162
+msgid "Label Enable"
+msgstr "Beschriftungen zeigen"
+
+#: ../bin/doption.c:163
+msgid "Label Scale"
+msgstr "Maßstab der Beschriftungen"
+
+#: ../bin/doption.c:164
+msgid "Label Font Size"
+msgstr "Grösse für Beschriftungen"
+
+#: ../bin/doption.c:165
+msgid "Hot Bar Labels"
+msgstr "Teilekatalog Beschriftungen"
+
+#: ../bin/doption.c:166
+msgid "Layout Labels"
+msgstr "Anlagenbeschriftungen"
+
+#: ../bin/doption.c:167
+msgid "List Labels"
+msgstr "Listenüberschriften"
+
+#: ../bin/doption.c:170
+msgid "Car Labels"
+msgstr "Wagenbeschriftungen"
+
+#: ../bin/doption.c:171
+msgid "Train Update Delay"
+msgstr "Aktualisierungsintervalle"
+
+#: ../bin/doption.c:199
+msgid "Display Options"
+msgstr "Anzeigeoptionen"
+
+#: ../bin/doption.c:200
+msgid "Proto"
+msgstr "Vorbild"
+
+#: ../bin/doption.c:201
+msgid "Proto/Manuf"
+msgstr "Vorbild/Hersteller"
+
+#: ../bin/doption.c:202
+msgid "Proto/Manuf/Part Number"
+msgstr "Vorbild/Hersteller/Bestellnr."
+
+#: ../bin/doption.c:203
+msgid "Proto/Manuf/Partno/Item"
+msgstr "Vorbild/Hersteller/Bestellnr. /lfd. Nr."
+
+#: ../bin/doption.c:204
+msgid "Manuf/Proto"
+msgstr "Hersteller/Vorbild"
+
+#: ../bin/doption.c:205
+msgid "Manuf/Proto/Part Number"
+msgstr "Hersteller/Vorbild/Bestellnr."
+
+#: ../bin/doption.c:206
+msgid "Manuf/Proto/Partno/Item"
+msgstr "Hersteller/Vorbild/Bestellnr./lfd. Nr."
+
+#: ../bin/doption.c:236
+msgid "Single item selected, +Ctrl Add to selection"
+msgstr "Nur aktuelles Element ausgewählt, +Strg Auswahl erweitern"
+
+#: ../bin/doption.c:236
+msgid "Add to selection, +Ctrl Single item selected"
+msgstr "Auswahl erweitern, +Strg Nur aktuelles Element"
+
+#: ../bin/doption.c:237
+msgid "Deselect all on select nothing"
+msgstr "Auswahl durch Klick auf leere Fläche rücksetzen"
+
+#: ../bin/doption.c:242
+msgid "Normal: Command List, Shift: Command Options"
+msgstr "Normal: Befehlsliste, Umschalt: Befehlsoptionen"
+
+#: ../bin/doption.c:242
+msgid "Normal: Command Options, Shift: Command List"
+msgstr "Normal: Befehlsoptionen, Umschalt: Befehlsliste"
+
+#: ../bin/doption.c:245
+msgid "Default Command"
+msgstr "Standardbefehl"
+
+#: ../bin/doption.c:247
+msgid "Hide Selection Window"
+msgstr "Verberge Auswahlfenster"
+
+#: ../bin/doption.c:249
+msgid "Right Click"
+msgstr "Rechte Mausetaste"
+
+#: ../bin/doption.c:250
+msgid "Select Mode"
+msgstr "Auswahlmodus"
+
+#: ../bin/doption.c:275
+msgid "Command Options"
+msgstr "Befehlsoptionen"
+
+#: ../bin/doption.c:298
+msgid "English"
+msgstr "Englisch"
+
+#: ../bin/doption.c:298
+msgid "Metric"
+msgstr "Metrisch"
+
+#: ../bin/doption.c:299
+msgid "Polar"
+msgstr "Polar"
+
+#: ../bin/doption.c:299
+msgid "Cartesian"
+msgstr "Kartesisch"
+
+#: ../bin/doption.c:300
+msgid "Balloon Help"
+msgstr "Sprechblasen"
+
+#: ../bin/doption.c:301
+msgid "Show FlexTrack in HotBar"
+msgstr "Flexgleis in der Auswahlleiste anzeigen"
+
+#: ../bin/doption.c:302
+msgid "Load Last Layout"
+msgstr "Letzten Gleisplan laden"
+
+#: ../bin/doption.c:302
+msgid "Start New Layout"
+msgstr "Neuen Gleisplan beginnen"
+
+#: ../bin/doption.c:305
+msgid "Angles"
+msgstr "Winkel"
+
+#: ../bin/doption.c:306
+msgid "Units"
+msgstr "Einheiten"
+
+#: ../bin/doption.c:308
+msgid "Length Format"
+msgstr "Längenformat"
+
+#: ../bin/doption.c:309
+msgid "Min Track Length"
+msgstr "Mindestgleislänge"
+
+#: ../bin/doption.c:310
+msgid "Connection Distance"
+msgstr "Verbindungs Abstand"
+
+#: ../bin/doption.c:311
+msgid "Connection Angle"
+msgstr "Verbindungs Winkel"
+
+#: ../bin/doption.c:312
+msgid "Turntable Angle"
+msgstr "Drehscheibenwinkel"
+
+#: ../bin/doption.c:313
+msgid "Max Coupling Speed"
+msgstr "Max. Ankuppelgeschwindigkeit"
+
+#: ../bin/doption.c:316
+msgid "Drag Distance"
+msgstr "Zeichne Entfernung"
+
+#: ../bin/doption.c:317
+msgid "Drag Timeout"
+msgstr "Abriss Zeitverzögerung"
+
+#: ../bin/doption.c:318
+msgid "Min Grid Spacing"
+msgstr "Mindestrasterabstand"
+
+#: ../bin/doption.c:320
+msgid "Check Point Frequency"
+msgstr "Häufigkeit der Sicherungskopie"
+
+#: ../bin/doption.c:322
+msgid "Autosave Checkpoint Frequency"
+msgstr "Häufigkeit der automatischen Sicherung"
+
+#: ../bin/doption.c:323
+msgid "On Program Startup"
+msgstr "Beim Programmstart"
+
+#: ../bin/doption.c:333 ../bin/doption.c:337 ../bin/doption.c:354
+msgid "999.999"
+msgstr "999.999"
+
+#: ../bin/doption.c:334
+msgid "999.999999"
+msgstr "999.999999"
+
+#: ../bin/doption.c:335
+msgid "999.99999"
+msgstr "999,999999"
+
+#: ../bin/doption.c:336
+msgid "999.9999"
+msgstr "999,999"
+
+#: ../bin/doption.c:338 ../bin/doption.c:355
+msgid "999.99"
+msgstr "999.99"
+
+#: ../bin/doption.c:339 ../bin/doption.c:356
+msgid "999.9"
+msgstr "999.9"
+
+#: ../bin/doption.c:340
+msgid "999 7/8"
+msgstr "999 7/8"
+
+#: ../bin/doption.c:341
+msgid "999 63/64"
+msgstr "999 63/64"
+
+#: ../bin/doption.c:342
+msgid "999' 11.999\""
+msgstr "999' 11.999\""
+
+#: ../bin/doption.c:343
+msgid "999' 11.99\""
+msgstr "999' 11.99\""
+
+#: ../bin/doption.c:344
+msgid "999' 11.9\""
+msgstr "999' 11.9\""
+
+#: ../bin/doption.c:345
+msgid "999' 11 7/8\""
+msgstr "999' 11 7/8\""
+
+#: ../bin/doption.c:346
+msgid "999' 11 63/64\""
+msgstr "999' 11 63/64\""
+
+#: ../bin/doption.c:347
+msgid "999ft 11.999in"
+msgstr "999ft 11.999in"
+
+#: ../bin/doption.c:348
+msgid "999ft 11.99in"
+msgstr "999ft 11.99in"
+
+#: ../bin/doption.c:349
+msgid "999ft 11.9in"
+msgstr "999ft 11.9in"
+
+#: ../bin/doption.c:350
+msgid "999ft 11 7/8in"
+msgstr "999ft 11 7/8in"
+
+#: ../bin/doption.c:351
+msgid "999ft 11 63/64in"
+msgstr "999ft 11 63/64in"
+
+#: ../bin/doption.c:357
+msgid "999.999mm"
+msgstr "999.999mm"
+
+#: ../bin/doption.c:358
+msgid "999.99mm"
+msgstr "999.99mm"
+
+#: ../bin/doption.c:359
+msgid "999.9mm"
+msgstr "999.9mm"
+
+#: ../bin/doption.c:360
+msgid "999.999cm"
+msgstr "999.999cm"
+
+#: ../bin/doption.c:361
+msgid "999.99cm"
+msgstr "999.99cm"
+
+#: ../bin/doption.c:362
+msgid "999.9cm"
+msgstr "999.9cm"
+
+#: ../bin/doption.c:363
+msgid "999.999m"
+msgstr "999.999m"
+
+#: ../bin/doption.c:364
+msgid "999.99m"
+msgstr "999.99m"
+
+#: ../bin/doption.c:365
+msgid "999.9m"
+msgstr "999.9m"
+
+#: ../bin/doption.c:492
+msgid "Preferences"
+msgstr "Einstellungen"
+
+#: ../bin/doption.c:531
+msgid "Marker"
+msgstr "Markierung"
+
+#: ../bin/doption.c:532
+msgid "Border"
+msgstr "Rahmen"
+
+#: ../bin/doption.c:533
+msgid "Primary Axis"
+msgstr "Hauptachse"
+
+#: ../bin/doption.c:534
+msgid "Secondary Axis"
+msgstr "Nebenachse"
+
+#: ../bin/doption.c:535
+msgid "Normal Track"
+msgstr "Normales Gleis"
+
+#: ../bin/doption.c:536
+msgid "Selected Track"
+msgstr "Ausgewähltes Gleis"
+
+#: ../bin/doption.c:537
+msgid "Profile Path"
+msgstr "Höhenlinie"
+
+#: ../bin/doption.c:538
+msgid "Exception Track"
+msgstr "Ausnahmegleis"
+
+#: ../bin/doption.c:539
+msgid "Track Ties"
+msgstr "Gleisschwellen"
+
+#: ../bin/dpricels.c:45
+msgid "Price"
+msgstr "Preis"
+
+#: ../bin/dpricels.c:59
+msgid "Flex Track"
+msgstr "Flexgleis"
+
+#: ../bin/dpricels.c:60
+msgid "costs"
+msgstr "kostet"
+
+#: ../bin/dpricels.c:154
+msgid "Price List"
+msgstr "Preisliste"
+
+#: ../bin/dprmfile.c:73 ../bin/paramfilesearch_ui.c:60
+msgid "Show File Names"
+msgstr "Dateinamen anzeigen"
+
+#: ../bin/dprmfile.c:82 ../bin/paramfilesearch_ui.c:76
+msgid "Select all"
+msgstr "Alles auswählen"
+
+#: ../bin/dprmfile.c:84
+msgid "Favorite"
+msgstr "Favorit"
+
+#: ../bin/dprmfile.c:87
+msgid "Search Library"
+msgstr "Bibliothek durchsuchen"
+
+#: ../bin/dprmfile.c:88 ../bin/layout.c:471
+msgid "Browse ..."
+msgstr "Durchsuchen..."
+
+#: ../bin/dprmfile.c:331
+#, c-format
+msgid "%d parameter files reloaded."
+msgstr "%d Parameterdateien neu geladen."
+
+#: ../bin/dprmfile.c:333
+msgid "One parameter file reloaded."
+msgstr "Eine Parameterdatei neu geladen."
+
+#: ../bin/dprmfile.c:434
+msgid "Parameter Files"
+msgstr "Parameterdateien"
+
+#: ../bin/dprmfile.c:437 ../bin/paramfilesearch_ui.c:405
+msgid "Load Parameters"
+msgstr "Lade Parameter"
+
+#: ../bin/dprmfile.c:437 ../bin/paramfilesearch_ui.c:405
+msgid "Parameter files (*.xtp)|*.xtp"
+msgstr "Parameterdateien (*.xtp)|*.xtp"
+
+#: ../bin/draw.c:2140
+msgid "Macro Zoom Mode"
+msgstr "Makro-Zoom-Modus"
+
+#: ../bin/draw.c:2147
+msgid "Scale 1:1 - Use Ctrl+ to go to Macro Zoom Mode"
+msgstr "Maßstab 1:1 - Mit Strg+ in den Makro-Zoom wechseln"
+
+#: ../bin/draw.c:2151
+msgid "Preset Zoom In Value selected. Shift+Ctrl+PageDwn to reset value"
+msgstr ""
+"Der gespeicherte untere Zoom-Faktor wird benutzt, Durch Umschalt+Strg+Bild "
+"runter zurücksetzen"
+
+#: ../bin/draw.c:2155
+#, c-format
+msgid "Zoom In Program Value %ld:1, Shift+PageDwn to use"
+msgstr ""
+"Programmierter Zoom Größer Wert %ld:1, Verwenden mit Umschalt+Bild runter"
+
+#: ../bin/draw.c:2195
+msgid "At Maximum Zoom Out"
+msgstr "Maximal rausgezoomt"
+
+#: ../bin/draw.c:2200
+msgid "Preset Zoom Out Value selected. Shift+Ctrl+PageUp to reset value"
+msgstr ""
+"Der gespeicherte obere Zoom-Faktor wird benutzt, Durch Umschalt+Strg+Bild "
+"hoch zurücksetzen"
+
+#: ../bin/draw.c:2204
+#, c-format
+msgid "Zoom Out Program Value %ld:1 set, Shift+PageUp to use"
+msgstr ""
+"Programmierter Zoom Größer Wert %ld:1, Verwenden mit Umschalt+Bild hoch"
+
+#: ../bin/draw.c:2911
+msgid "Map"
+msgstr "Karte"
+
+#: ../bin/draw.c:2959
+msgid ""
+"Left-Drag to pan, Ctrl+Left-Drag to zoom, 0 to set origin to zero, 1-9 to "
+"zoom#, e to set to extents"
+msgstr ""
+"Ziehen mit der linken Maustaste um den Ausschnitt zu verschieben, Strg"
+"+Ziehen mit der linken Maustaste zum Zoomen, 0 um den Ursprung auf Null zu "
+"setzen, 1-9 zum Zoomfaktor, e um an die Fenstergröße anzupassen"
+
+#: ../bin/draw.c:2966
+msgid "Pan Mode - drag point to new position"
+msgstr "Ausschnitt wählen - Punkt an die neue Position ziehen"
+
+#: ../bin/draw.c:2973
+msgid "Zoom Mode - drag area to zoom"
+msgstr "Zoom Modus -auf den ausgewählten Bereich zoomen"
+
+#: ../bin/draw.c:2999
+msgid "Can't move any further in that direction"
+msgstr "In diese Richtung können Sie nicht weiter gehen"
+
+#: ../bin/draw.c:3001
+msgid "Left click to pan, right click to zoom, 'o' for origin, 'e' for extents"
+msgstr ""
+"Linksklick zum Verschieben, Rechtsklick zum Zoomen, 'o' für Ursprung, 'e' "
+"für Anpassen an Fenstergröße"
+
+#: ../bin/draw.c:3040
+msgid ""
+"Left Drag to Pan, +CTRL to Zoom, 0 to set Origin to 0,0, 1-9 to Zoom#, e to "
+"set to Extent"
+msgstr ""
+"Ziehen mit der linken Maustaste um den Ausschnitt zu verschieben, +Strg zum "
+"Zoomen, 0 zum Setzen des Ursprungs auf 0,0, 1-9 zum Zoomfaktor, e um an die "
+"Fenstergröße anzupassen"
+
+#: ../bin/draw.c:3114
+msgid "Pan/Zoom"
+msgstr "Verschieben/Zoomen"
+
+#: ../bin/draw.c:3125
+msgid "Zoom to 1:1 - '1'"
+msgstr "Auf 1:1 vergrößern - '1'."
+
+#: ../bin/draw.c:3126
+msgid "Zoom to 1:2 - '2'"
+msgstr "Auf 1:2 vergrößern - '2'."
+
+#: ../bin/draw.c:3127
+msgid "Zoom to 1:3 - '3'"
+msgstr "Auf 1:3 vergrößern - '3'."
+
+#: ../bin/draw.c:3128
+msgid "Zoom to 1:4 - '4'"
+msgstr "Auf 1:4 vergrößern - '4'."
+
+#: ../bin/draw.c:3129
+msgid "Zoom to 1:5 - '5'"
+msgstr "Auf 1:5 vergrößern - '5'."
+
+#: ../bin/draw.c:3130
+msgid "Zoom to 1:6 - '6'"
+msgstr "Auf 1:6 vergrößern - '6'."
+
+#: ../bin/draw.c:3131
+msgid "Zoom to 1:7 - '7'"
+msgstr "Auf 1:7 vergrößern - '7'."
+
+#: ../bin/draw.c:3132
+msgid "Zoom to 1:8 - '8'"
+msgstr "Auf 1:8 vergrößern - '8'."
+
+#: ../bin/draw.c:3133
+msgid "Zoom to 1:9 - '9'"
+msgstr "Auf 1:9 vergrößern - '9'."
+
+#: ../bin/draw.c:3137
+msgid "Pan center here - 'c'"
+msgstr "Hier zentrieren - 'c'."
+
+#: ../bin/drawgeom.c:76 ../bin/drawgeom.c:91
+msgid "Create Lines"
+msgstr "Erstelle Linien"
+
+#: ../bin/drawgeom.c:291
+msgid "+Shift to lock to nearby objects"
+msgstr "+Umschalt um auf ein naheliegendes Objekt zu fangen"
+
+#: ../bin/drawgeom.c:293
+msgid "+Shift to not lock to nearby objects"
+msgstr "+Umschalt um nicht auf ein naheliegendes Objekt zu fangen"
+
+#: ../bin/drawgeom.c:393
+msgid "Drag to next point, +Shift to lock to object, +Ctrl to lock to 90deg"
+msgstr ""
+"Ziehen Sie zum nächsten Punkt, +Umschalten um aufein Objekt zu fangen, +Strg "
+"um auf 90 Grad zu sperren"
+
+#: ../bin/drawgeom.c:403
+msgid "Drag to place next end point"
+msgstr "Ziehen um den nächsten Endpunkt zu setzen"
+
+#: ../bin/drawgeom.c:434
+msgid "Drag to set radius"
+msgstr "Radius durch Ziehen festlegen"
+
+#: ../bin/drawgeom.c:447
+msgid "Drag set box size"
+msgstr "Ziehen um die Größe des Rechteck zu setzen"
+
+#: ../bin/drawgeom.c:488
+msgid "+Shift - lock to close object, +Ctrl - lock to 90 deg"
+msgstr ""
+"+Umschalt - Fangen auf ein naheliegendes Objekt, +Strg - Fangen auf 90 Grad"
+
+#: ../bin/drawgeom.c:536 ../bin/drawgeom.c:592
+#, c-format
+msgid "Length = %s, Angle = %0.2f"
+msgstr "Länge = %s, Winkel = %0.2f"
+
+#: ../bin/drawgeom.c:613
+#, c-format
+msgid "Straight Line: Length=%s Angle=%0.3f"
+msgstr "Gerade Linie: Länge=%s Winkel=%0.3f"
+
+#: ../bin/drawgeom.c:635
+#, c-format
+msgid "Curved Line: Radius=%s Angle=%0.3f Length=%s"
+msgstr "Gebogene Linie: Radius=%s Winkel=%0.3f Länge=%s"
+
+#: ../bin/drawgeom.c:659
+#, c-format
+msgid "Radius = %s"
+msgstr "Radius = %s"
+
+#: ../bin/drawgeom.c:669
+#, c-format
+msgid "Width = %s, Height = %s"
+msgstr "Breite = %s, Höhe = %s"
+
+#: ../bin/drawgeom.c:1132
+msgid "Select points or use context menu"
+msgstr "Punkt auswählen oder Kontextmenu benutzen"
+
+#: ../bin/drawgeom.c:1387
+#, c-format
+msgid "Length = %s, Last angle = %0.2f"
+msgstr "Länge = %s, letzter Winkel = %0.2f"
+
+#: ../bin/drawgeom.c:1541
+msgid "Point Deleted"
+msgstr "Punkt gelöscht"
+
+#: ../bin/drawgeom.c:1937
+msgid "Not close to end of line"
+msgstr "Nicht nah am Ende der Linie"
+
+#: ../bin/drawgeom.c:1990
+msgid "Not close to ends or middle of mine, reselect"
+msgstr "Nicht an einem Ende oder in der Mitte der Linie, Auswahl wiederholen"
+
+#: ../bin/drawgeom.c:2038 ../bin/drawgeom.c:2260
+msgid "Drag to Move Corner Point"
+msgstr "Ziehen um den Eckpunkt zu verschieben"
+
+#: ../bin/drawgeom.c:2045
+msgid "Drag to Move Edge "
+msgstr "Ziehen um die Kante zu verschieben "
+
+#: ../bin/drawgeom.c:2107
+#, c-format
+msgid "Length = %0.3f Angle = %0.3f"
+msgstr "Länge = %0.3f Winkel = %0.3f"
+
+#: ../bin/drawgeom.c:2255
+msgid "Drag to Move Edge"
+msgstr "Ziehen um die Kante zu verschieben"
+
+#: ../bin/dxfoutput.c:232
+msgid "Export to DXF"
+msgstr "Export nach DXF"
+
+#: ../bin/fileio.c:241
+msgid ""
+"\n"
+"Do you want to continue?"
+msgstr ""
+"\n"
+"Wollen Sie fortsetzen?"
+
+#: ../bin/fileio.c:608
+#, c-format
+msgid "putTitle: title too long: %s"
+msgstr "putTitle: Titel ist zu lang: %s"
+
+#: ../bin/fileio.c:638
+msgid "Unnamed Trackplan"
+msgstr "Unbenannter Gleisplan"
+
+#: ../bin/fileio.c:639
+msgid " (R/O)"
+msgstr " (Nur lesen)"
+
+#: ../bin/fileio.c:659 ../bin/fileio.c:1278
+msgid "Check Pointing"
+msgstr "Schreibe Sicherungskopie"
+
+#: ../bin/fileio.c:789
+msgid "Unknown layout file object - skip until next good object?"
+msgstr ""
+"Unbekanntes Layout-Dateiobjekt - überspringen bis zum nächsten guten Objekt?"
+
+#: ../bin/fileio.c:1026
+msgid "Track"
+msgstr "Gleis"
+
+#: ../bin/fileio.c:1212
+msgid "Save Tracks"
+msgstr "Gleise speichern"
+
+#: ../bin/fileio.c:1228
+msgid "Save Tracks As"
+msgstr "Gleise speichern unter"
+
+#: ../bin/fileio.c:1239
+msgid "Open Tracks"
+msgstr "Gleise einlesen"
+
+#: ../bin/fileio.c:1253
+msgid "Example Tracks"
+msgstr "Beispielgleise"
+
+#: ../bin/fileio.c:1461
+#, c-format
+msgid "Module - %s"
+msgstr "Modul - %s"
+
+#: ../bin/fileio.c:1466 ../bin/fileio.c:1486
+msgid "Import Tracks"
+msgstr "Gleise importieren"
+
+#: ../bin/fileio.c:1548
+msgid "Export Tracks"
+msgstr "Gleise exportieren"
+
+#: ../bin/fileio.c:1567
+msgid "Clipboard"
+msgstr "Zwischenablage"
+
+#: ../bin/filenoteui.c:62 ../bin/linknoteui.c:50 ../bin/textnoteui.c:42
+msgid "Position X"
+msgstr "Position X"
+
+#: ../bin/filenoteui.c:64 ../bin/linknoteui.c:52 ../bin/textnoteui.c:44
+msgid "Position Y"
+msgstr "Position Y"
+
+#: ../bin/filenoteui.c:68 ../bin/linknoteui.c:56
+msgid "Title"
+msgstr "Titel"
+
+#: ../bin/filenoteui.c:70 ../bin/trknote.c:62
+#: ../../../../build/work/app/bin/bllnhlp.c:85
+msgid "Document"
+msgstr "Dokument"
+
+#: ../bin/filenoteui.c:72
+msgid "Select..."
+msgstr "Auswählen..."
+
+#: ../bin/filenoteui.c:74 ../bin/linknoteui.c:60
+msgid "Open..."
+msgstr "&Öffnen..."
+
+#: ../bin/filenoteui.c:136
+msgid "Add Document"
+msgstr "Dokument hinzufügen"
+
+#: ../bin/filenoteui.c:158
+msgid "The file doesn't exist or cannot be read!"
+msgstr "Die Datei existiert nicht oder kann nicht gelesen werden!"
+
+#: ../bin/filenoteui.c:297
+#, c-format
+msgid "Document(%d) Layer=%d %-.80s [%s]"
+msgstr "Dokument(%d) Ebene=%d %-.80s [%s]"
+
+#: ../bin/filenoteui.c:309
+msgid "Update document"
+msgstr "Dokument aktualisieren"
+
+#: ../bin/filenoteui.c:323
+msgid "Describe the file"
+msgstr "Beschreibung zu der Datei"
+
+#: ../bin/filenoteui.c:329
+msgid "Attach document"
+msgstr "Dokument anhängen"
+
+#: ../bin/i18n.c:66
+#, c-format
+msgid "Gettext initialized (PACKAGE=%s, LOCALEDIR=%s, LC_ALL=%s).\n"
+msgstr "Gettext initialisiert (PACKAGE=%s, LOCALEDIR=%s, LC_ALL=%s).\n"
+
+#: ../bin/layout.c:373
+#, c-format
+msgid "Unable to load Image File - %s"
+msgstr "Bilddatei kann nicht geladen werden - %s"
+
+#: ../bin/layout.c:436
+msgid "Load Background"
+msgstr "Hintergrund laden"
+
+#: ../bin/layout.c:458
+msgid "Room Width"
+msgstr "Zimmerbreite"
+
+#: ../bin/layout.c:459
+msgid " Height"
+msgstr " -länge"
+
+#: ../bin/layout.c:460
+msgid "Layout Title"
+msgstr "Gleisplantitel"
+
+#: ../bin/layout.c:461
+msgid "Subtitle"
+msgstr "Untertitel"
+
+#: ../bin/layout.c:465
+msgid " Gauge"
+msgstr " Spurweite"
+
+#: ../bin/layout.c:467
+msgid "Min Track Radius"
+msgstr "Mindestgleisradius"
+
+#: ../bin/layout.c:468
+msgid " Max Track Grade (%)"
+msgstr " Maximale Gleissteigung (%)"
+
+#: ../bin/layout.c:470
+msgid "Background File Path"
+msgstr "Hintergrunddatei"
+
+#: ../bin/layout.c:474
+msgid "Background PosX,Y"
+msgstr "Hintergrund Posistion X,Y"
+
+#: ../bin/layout.c:478
+msgid "Background Size"
+msgstr "Größe des Hintergrunds"
+
+#: ../bin/layout.c:480
+msgid "Background Screen %"
+msgstr "Hintergrund-Transparenz %"
+
+#: ../bin/layout.c:482
+msgid "Background Angle"
+msgstr "Winkel des Hintergrund"
+
+#: ../bin/layout.c:560
+msgid "Layout Options"
+msgstr "Gleisplanoptionen"
+
+#: ../bin/linknoteui.c:58
+msgid "URL"
+msgstr "URL"
+
+#: ../bin/linknoteui.c:107
+#, c-format
+msgid ""
+"The entered URL is too long. The maximum allowed length is %d. Please edit "
+"the entered value."
+msgstr ""
+"Die eingegebene URL ist zu lang. Die maximal zulässige Länge ist %d. Bitte "
+"bearbeiten Sie den eingegebenen Wert."
+
+#: ../bin/linknoteui.c:110
+msgid "Re-edit"
+msgstr "Nochmals bearbeiten"
+
+#: ../bin/linknoteui.c:241
+msgid "Update link"
+msgstr "Weblink aktualisieren"
+
+#: ../bin/linknoteui.c:259
+msgid "Create link"
+msgstr "Weblink erstellen"
+
+#: ../bin/macro.c:95
+msgid "Message"
+msgstr "Mitteilung"
+
+#: ../bin/macro.c:179
+msgid "Recording"
+msgstr "Aufzeichnen"
+
+#: ../bin/macro.c:214
+msgid "End of Playback. Hit Step to exit\n"
+msgstr "Ende der Aufzeichnung. Schritt zum Beenden drücken\n"
+
+#: ../bin/macro.c:278
+msgid "Record"
+msgstr "Aufzeichnen"
+
+#: ../bin/macro.c:676
+msgid "Step"
+msgstr "Schritt"
+
+#: ../bin/macro.c:679 ../bin/macro.c:1544
+msgid "Next"
+msgstr "Nächster"
+
+#: ../bin/macro.c:682 ../bin/misc.c:703 ../bin/track.c:1116
+msgid "Quit"
+msgstr "Verlassen"
+
+#: ../bin/macro.c:685 ../../../../build/work/app/bin/bllnhlp.c:540
+msgid "Speed"
+msgstr "Geschwindigkeit"
+
+#: ../bin/macro.c:832 ../bin/macro.c:879
+msgid "Regression"
+msgstr "Regression"
+
+#: ../bin/macro.c:1045 ../bin/macro.c:1403
+msgid "Demo"
+msgstr "Demo"
+
+#: ../bin/macro.c:1223
+#, c-format
+msgid "Elapsed time %lu\n"
+msgstr "Abgelaufene Zeit %lu\n"
+
+#: ../bin/macro.c:1324
+msgid "Playback"
+msgstr "Wiedergabe"
+
+#: ../bin/macro.c:1406
+msgid "Slowest"
+msgstr "Langsamste"
+
+#: ../bin/macro.c:1407
+msgid "Slow"
+msgstr "Langsame"
+
+#: ../bin/macro.c:1409
+msgid "Fast"
+msgstr "Schnelle"
+
+#: ../bin/macro.c:1410
+msgid "Faster"
+msgstr "Schnellere"
+
+#: ../bin/macro.c:1411
+msgid "Fastest"
+msgstr "Schnellste"
+
+#: ../bin/macro.c:1529
+msgid "Can not find PARAMETER playback proc"
+msgstr "Kann die PARAMETER Wiedergabeprozedur nicht finden"
+
+#: ../bin/misc.c:173
+msgid "No Messages"
+msgstr "Keine Nachrichten"
+
+#: ../bin/misc.c:435 ../bin/misc.c:438
+msgid "ABORT"
+msgstr "ABBRUCH"
+
+#: ../bin/misc.c:437
+msgid ""
+"\n"
+"Do you want to save your layout?"
+msgstr ""
+"\n"
+"Wollen Sie Ihren Gleisplan speichern?"
+
+#: ../bin/misc.c:484
+#, c-format
+msgid "No help for %s"
+msgstr "Hilfe für %s nicht gefunden"
+
+#: ../bin/misc.c:596
+msgid ""
+"Save changes to the layout design before closing?\n"
+"\n"
+"If you don't save now, your unsaved changes will be discarded."
+msgstr ""
+"Sollen die Ãnderungen an Ihrem Gleisplan vor dem Verlassen gespeichert "
+"werden?\n"
+"\n"
+"Wenn Sie jetzt nicht speichern, werden Ihre nicht gespeicherten Ãnderungen "
+"verworfen."
+
+#: ../bin/misc.c:598 ../bin/misc.c:2295
+msgid "&Save"
+msgstr "&Speichern"
+
+#: ../bin/misc.c:598 ../bin/misc.c:633
+msgid "&Cancel"
+msgstr "&Abbruch"
+
+#: ../bin/misc.c:598
+msgid "&Don't Save"
+msgstr "&Nicht speichern"
+
+#: ../bin/misc.c:622
+msgid "examples"
+msgstr "Beispiele"
+
+#: ../bin/misc.c:631
+msgid ""
+"Do you want to return to the last saved state?\n"
+"\n"
+"Revert will cause all changes done since last save to be lost."
+msgstr ""
+"Wollen Sie auf den letzten gespeicherten Stand zurücksetzen?\n"
+"Durch das Zurücksetzen werden alle Ãnderungen seit dem letzen Speichern "
+"verloren gehen."
+
+#: ../bin/misc.c:633
+msgid "&Revert"
+msgstr "Zurücksetzen"
+
+#: ../bin/misc.c:855
+msgid "XTrackCAD Font"
+msgstr "XTrackCAD Font"
+
+#: ../bin/misc.c:916
+#, c-format
+msgid "No balloon help for %s\n"
+msgstr "Kein Tooltip für %s vorhanden\n"
+
+#: ../bin/misc.c:918 ../../../../build/work/app/bin/bllnhlp.c:603
+#: ../../../../build/work/app/bin/bllnhlp.c:604
+#: ../../../../build/work/app/bin/bllnhlp.c:606
+#: ../../../../build/work/app/bin/bllnhlp.c:607
+#: ../../../../build/work/app/bin/bllnhlp.c:609
+#: ../../../../build/work/app/bin/bllnhlp.c:610
+#: ../../../../build/work/app/bin/bllnhlp.c:611
+#: ../../../../build/work/app/bin/bllnhlp.c:612
+#: ../../../../build/work/app/bin/bllnhlp.c:613
+#: ../../../../build/work/app/bin/bllnhlp.c:614
+#: ../../../../build/work/app/bin/bllnhlp.c:615
+#: ../../../../build/work/app/bin/bllnhlp.c:616
+#: ../../../../build/work/app/bin/bllnhlp.c:617
+#: ../../../../build/work/app/bin/bllnhlp.c:618
+#: ../../../../build/work/app/bin/bllnhlp.c:619
+#: ../../../../build/work/app/bin/bllnhlp.c:620
+#: ../../../../build/work/app/bin/bllnhlp.c:621
+#: ../../../../build/work/app/bin/bllnhlp.c:622
+#: ../../../../build/work/app/bin/bllnhlp.c:623
+#: ../../../../build/work/app/bin/bllnhlp.c:624
+#: ../../../../build/work/app/bin/bllnhlp.c:625
+#: ../../../../build/work/app/bin/bllnhlp.c:626
+#: ../../../../build/work/app/bin/bllnhlp.c:627
+#: ../../../../build/work/app/bin/bllnhlp.c:628
+#: ../../../../build/work/app/bin/bllnhlp.c:629
+#: ../../../../build/work/app/bin/bllnhlp.c:630
+#: ../../../../build/work/app/bin/bllnhlp.c:631
+#: ../../../../build/work/app/bin/bllnhlp.c:632
+#: ../../../../build/work/app/bin/bllnhlp.c:633
+#: ../../../../build/work/app/bin/bllnhlp.c:634
+#: ../../../../build/work/app/bin/bllnhlp.c:635
+#: ../../../../build/work/app/bin/bllnhlp.c:636
+#: ../../../../build/work/app/bin/bllnhlp.c:637
+#: ../../../../build/work/app/bin/bllnhlp.c:638
+#: ../../../../build/work/app/bin/bllnhlp.c:639
+#: ../../../../build/work/app/bin/bllnhlp.c:640
+#: ../../../../build/work/app/bin/bllnhlp.c:641
+#: ../../../../build/work/app/bin/bllnhlp.c:642
+#: ../../../../build/work/app/bin/bllnhlp.c:643
+#: ../../../../build/work/app/bin/bllnhlp.c:644
+#: ../../../../build/work/app/bin/bllnhlp.c:645
+#: ../../../../build/work/app/bin/bllnhlp.c:646
+#: ../../../../build/work/app/bin/bllnhlp.c:647
+#: ../../../../build/work/app/bin/bllnhlp.c:648
+#: ../../../../build/work/app/bin/bllnhlp.c:649
+#: ../../../../build/work/app/bin/bllnhlp.c:650
+#: ../../../../build/work/app/bin/bllnhlp.c:651
+#: ../../../../build/work/app/bin/bllnhlp.c:652
+#: ../../../../build/work/app/bin/bllnhlp.c:653
+#: ../../../../build/work/app/bin/bllnhlp.c:654
+#: ../../../../build/work/app/bin/bllnhlp.c:655
+#: ../../../../build/work/app/bin/bllnhlp.c:656
+#: ../../../../build/work/app/bin/bllnhlp.c:657
+#: ../../../../build/work/app/bin/bllnhlp.c:658
+#: ../../../../build/work/app/bin/bllnhlp.c:659
+#: ../../../../build/work/app/bin/bllnhlp.c:660
+#: ../../../../build/work/app/bin/bllnhlp.c:661
+#: ../../../../build/work/app/bin/bllnhlp.c:662
+#: ../../../../build/work/app/bin/bllnhlp.c:663
+#: ../../../../build/work/app/bin/bllnhlp.c:665
+msgid "No Help"
+msgstr "Keine Hilfe vorhanden"
+
+#: ../bin/misc.c:1026
+msgid "File AutoSaved"
+msgstr "Automatisch gesichert"
+
+#: ../bin/misc.c:1237 ../bin/misc.c:1244 ../bin/misc.c:1315
+msgid ""
+"Cancelling the current command will undo the changes\n"
+"you are currently making. Do you want to update?"
+msgstr ""
+"Abbruch des aktuelle Befehls wird alle aktuell laufenden\n"
+"Änderungen zurücknehmen. Soll aktualisiert werden?"
+
+#: ../bin/misc.c:1810
+msgid "Sticky Commands"
+msgstr "Wiederholte Befehle"
+
+#: ../bin/misc.c:1823
+msgid "File Buttons"
+msgstr "Dateischaltflächen"
+
+#: ../bin/misc.c:1823
+msgid "Import/Export Buttons"
+msgstr "Import/Export Aktionen"
+
+#: ../bin/misc.c:1823
+msgid "Zoom Buttons"
+msgstr "Lupenknöpfe"
+
+#: ../bin/misc.c:1824
+msgid "Undo Buttons"
+msgstr "Rückgängig/Wiederholen"
+
+#: ../bin/misc.c:1824
+msgid "Easement Button"
+msgstr "Übergangsbogen"
+
+#: ../bin/misc.c:1824
+msgid "SnapGrid Buttons"
+msgstr "Fangraster"
+
+#: ../bin/misc.c:1825
+msgid "Create Track Buttons"
+msgstr "Erstelle Gleise"
+
+#: ../bin/misc.c:1825
+msgid "Layout Control Elements"
+msgstr "Elemente zur Anlagensteuerung"
+
+#: ../bin/misc.c:1826
+msgid "Modify Track Buttons"
+msgstr "Verändere Gleise"
+
+#: ../bin/misc.c:1826
+msgid "Properties/Select"
+msgstr "Eigenschaften/Auswählen"
+
+#: ../bin/misc.c:1827
+msgid "Track Group Buttons"
+msgstr "Objekt Werkzeuge"
+
+#: ../bin/misc.c:1827
+msgid "Train Group Buttons"
+msgstr "Zugbetrieb"
+
+#: ../bin/misc.c:1828
+msgid "Create Misc Buttons"
+msgstr "Zeichnen/Schrift Werkzeuge"
+
+#: ../bin/misc.c:1828
+msgid "Ruler Button"
+msgstr "Linealschaltfläche"
+
+#: ../bin/misc.c:1828
+msgid "Layer Buttons"
+msgstr "Ebenenknöpfe"
+
+#: ../bin/misc.c:1829
+msgid "Hot Bar"
+msgstr "Teilekatalog"
+
+#: ../bin/misc.c:1898 ../../../../build/work/app/bin/bllnhlp.c:80
+msgid "Change Elevations"
+msgstr "Höhen ändern"
+
+#: ../bin/misc.c:1916
+msgid "Angle:"
+msgstr "Winkel:"
+
+#: ../bin/misc.c:1923
+msgid "Move X:"
+msgstr "Verschieben X:"
+
+#: ../bin/misc.c:1924
+msgid "Move Y:"
+msgstr "Verschieben Y:"
+
+#: ../bin/misc.c:1971
+msgid "Enter Move ..."
+msgstr "Verschiebung eingeben..."
+
+#: ../bin/misc.c:1977
+msgid "180 "
+msgstr "180 "
+
+#: ../bin/misc.c:1978
+msgid "90 CW"
+msgstr "90 Uhrzeiger"
+
+#: ../bin/misc.c:1979
+msgid "45 CW"
+msgstr "45 Uhrzeiger"
+
+#: ../bin/misc.c:1980
+msgid "30 CW"
+msgstr "30 Uhrzeiger"
+
+#: ../bin/misc.c:1981
+msgid "15 CW"
+msgstr "15 Uhrzeiger"
+
+#: ../bin/misc.c:1982
+msgid "15 CCW"
+msgstr "15 gegen Uhr"
+
+#: ../bin/misc.c:1983
+msgid "30 CCW"
+msgstr "30 gehen Uhr"
+
+#: ../bin/misc.c:1984
+msgid "45 CCW"
+msgstr "45 gegen Uhr"
+
+#: ../bin/misc.c:1985
+msgid "90 CCW"
+msgstr "90 gegen Uhr"
+
+#: ../bin/misc.c:1986
+msgid "Enter Angle ..."
+msgstr "Winkel eingeben..."
+
+#: ../bin/misc.c:2017
+msgid "Debug"
+msgstr "Fehlersuche (Debug)"
+
+#: ../bin/misc.c:2148
+msgid "&File"
+msgstr "&Datei"
+
+#: ../bin/misc.c:2149
+msgid "&Edit"
+msgstr "&Bearbeiten"
+
+#: ../bin/misc.c:2150
+msgid "&View"
+msgstr "&Ansicht"
+
+#: ../bin/misc.c:2151
+msgid "&Add"
+msgstr "&Hinzufügen"
+
+#: ../bin/misc.c:2152
+msgid "&Change"
+msgstr "&Ändern"
+
+#: ../bin/misc.c:2153
+msgid "&Draw"
+msgstr "&Zeichnen"
+
+#: ../bin/misc.c:2154
+msgid "&Manage"
+msgstr "&Verwalten"
+
+#: ../bin/misc.c:2155
+msgid "&Options"
+msgstr "&Optionen"
+
+#: ../bin/misc.c:2156
+msgid "&Macro"
+msgstr "&Makro"
+
+#: ../bin/misc.c:2157
+msgid "&Window"
+msgstr "&Fenster"
+
+#: ../bin/misc.c:2158
+msgid "&Help"
+msgstr "&Hilfe"
+
+#: ../bin/misc.c:2194
+msgid "Context Commands"
+msgstr "Kontextbefehle"
+
+#: ../bin/misc.c:2195
+msgid "Shift Context Commands"
+msgstr "Umsch+Kontextbefehle"
+
+#: ../bin/misc.c:2210 ../bin/misc.c:2397
+msgid "Enable SnapGrid"
+msgstr "Fangraster aktivieren"
+
+#: ../bin/misc.c:2212
+msgid "SnapGrid Show"
+msgstr "Fangraster anzeigen"
+
+#: ../bin/misc.c:2214
+msgid " Enable Magnetic Snap"
+msgstr " Ein/Aus Magnetischer Schnapper"
+
+#: ../bin/misc.c:2216 ../bin/misc.c:2418
+msgid "Show/Hide Map"
+msgstr "Karte anzeigen/verbergen"
+
+#: ../bin/misc.c:2218
+msgid "Show/Hide Background"
+msgstr "Hintergrund zeigen"
+
+#: ../bin/misc.c:2249 ../bin/misc.c:2250
+msgid "Add..."
+msgstr "Hinzufügen..."
+
+#: ../bin/misc.c:2253 ../bin/misc.c:2254
+msgid "More..."
+msgstr "Weiter..."
+
+#: ../bin/misc.c:2289
+msgid "&New ..."
+msgstr "&Neu..."
+
+#: ../bin/misc.c:2291
+msgid "&Open ..."
+msgstr "&Öffnen..."
+
+#: ../bin/misc.c:2297
+msgid "Save &As ..."
+msgstr "Speichern &unter..."
+
+#: ../bin/misc.c:2299
+msgid "Revert"
+msgstr "Neu laden"
+
+#: ../bin/misc.c:2302
+msgid "P&rint Setup ..."
+msgstr "Druckereinstellungen..."
+
+#: ../bin/misc.c:2307
+msgid "&Import"
+msgstr "Import"
+
+#: ../bin/misc.c:2309
+msgid "Import &Module"
+msgstr "Modul importieren"
+
+#: ../bin/misc.c:2311
+msgid "Export to &Bitmap"
+msgstr "Export als Bitmap"
+
+#: ../bin/misc.c:2314
+msgid "E&xport"
+msgstr "Export"
+
+#: ../bin/misc.c:2316
+msgid "Export D&XF"
+msgstr "Export als DXF"
+
+#: ../bin/misc.c:2321
+msgid "Parameter &Files ..."
+msgstr "Parameterdateien..."
+
+#: ../bin/misc.c:2323
+msgid "No&tes ..."
+msgstr "Notizen..."
+
+#: ../bin/misc.c:2330
+msgid "E&xit"
+msgstr "Beenden"
+
+#: ../bin/misc.c:2336
+msgid "&Undo"
+msgstr "Rückgängig"
+
+#: ../bin/misc.c:2338
+msgid "R&edo"
+msgstr "Wiederholen"
+
+#: ../bin/misc.c:2341
+msgid "Cu&t"
+msgstr "Ausschneiden"
+
+#: ../bin/misc.c:2343
+msgid "&Copy"
+msgstr "Kopieren"
+
+#: ../bin/misc.c:2345
+msgid "&Paste"
+msgstr "Einfügen"
+
+#: ../bin/misc.c:2347
+msgid "C&lone"
+msgstr "K&lonen"
+
+#: ../bin/misc.c:2349
+msgid "De&lete"
+msgstr "Löschen"
+
+#: ../bin/misc.c:2357
+msgid "Select &All"
+msgstr "Alles auswählen"
+
+#: ../bin/misc.c:2359
+msgid "&Deselect All"
+msgstr "Alles abwählen"
+
+#: ../bin/misc.c:2360
+msgid "&Invert Selection"
+msgstr "Auswahl umkehren"
+
+#: ../bin/misc.c:2361
+msgid "Select Stranded Track"
+msgstr "Vereinzelte Gleise auswählen"
+
+#: ../bin/misc.c:2363
+msgid "Tu&nnel"
+msgstr "Tunnel"
+
+#: ../bin/misc.c:2364
+msgid "B&ridge"
+msgstr "B&rücke"
+
+#: ../bin/misc.c:2365
+msgid "Ties/NoTies"
+msgstr "Mit / ohne Schwellen"
+
+#: ../bin/misc.c:2366
+msgid "Move to &Front"
+msgstr "Nach vorne"
+
+#: ../bin/misc.c:2367
+msgid "Move to &Back"
+msgstr "Nach hinten"
+
+#: ../bin/misc.c:2377
+msgid "Zoom &In"
+msgstr "Zoom größer"
+
+#: ../bin/misc.c:2380
+msgid "Zoom &Out"
+msgstr "Zoom kleiner"
+
+#: ../bin/misc.c:2390
+msgid "&Redraw"
+msgstr "Neu zeichnen"
+
+#: ../bin/misc.c:2392
+msgid "Redraw All"
+msgstr "Alles neu zeichnen"
+
+#: ../bin/misc.c:2399
+msgid "Show SnapGrid"
+msgstr "Fangraster zeigen"
+
+#: ../bin/misc.c:2409
+msgid "Enable Magnetic Snap"
+msgstr "Magnetisches Fangen aktivieren"
+
+#: ../bin/misc.c:2424
+msgid "&Tool Bar"
+msgstr "Werkzeugleiste anpassen"
+
+#: ../bin/misc.c:2457
+msgid "Control Element"
+msgstr "Steuerungselement"
+
+#: ../bin/misc.c:2483
+msgid "&Loosen Tracks"
+msgstr "Gleise lockern"
+
+#: ../bin/misc.c:2495
+msgid "Raise/Lower Elevations"
+msgstr "Höhen auf/ab"
+
+#: ../bin/misc.c:2504
+msgid "Recompute Elevations"
+msgstr "Höhen neu berechnen"
+
+#: ../bin/misc.c:2509
+msgid "Change Scale"
+msgstr "Maßstab ändern"
+
+#: ../bin/misc.c:2530
+msgid "L&ayout ..."
+msgstr "Gleisplan..."
+
+#: ../bin/misc.c:2532
+msgid "&Display ..."
+msgstr "Anzeige..."
+
+#: ../bin/misc.c:2534
+msgid "Co&mmand ..."
+msgstr "Befehl..."
+
+#: ../bin/misc.c:2536
+msgid "&Easements ..."
+msgstr "Übergangsbögen..."
+
+#: ../bin/misc.c:2539
+msgid "&Fonts ..."
+msgstr "Schri&ftarten..."
+
+#: ../bin/misc.c:2541
+msgid "Stic&ky ..."
+msgstr "Dauerhaft..."
+
+#: ../bin/misc.c:2546
+msgid "&Debug ..."
+msgstr "&Fehlersuche..."
+
+#: ../bin/misc.c:2549
+msgid "&Preferences ..."
+msgstr "Einstellungen..."
+
+#: ../bin/misc.c:2551
+msgid "&Colors ..."
+msgstr "Farben..."
+
+#: ../bin/misc.c:2557
+msgid "&Record ..."
+msgstr "Aufzeichnen..."
+
+#: ../bin/misc.c:2559
+msgid "&Play Back ..."
+msgstr "Wiedergeben..."
+
+#: ../bin/misc.c:2565
+msgid "Main window"
+msgstr "Hauptfenster"
+
+#: ../bin/misc.c:2579
+msgid "Recent Messages"
+msgstr "Letzte Mitteilungen"
+
+#: ../bin/misc.c:2586
+msgid "Tip of the Day..."
+msgstr "Tipp des Tages..."
+
+#: ../bin/misc.c:2587
+msgid "&Demos"
+msgstr "&Demos"
+
+#: ../bin/misc.c:2588
+msgid "Examples..."
+msgstr "Beispiele..."
+
+#: ../bin/misc.c:2592 ../bin/smalldlg.c:222
+msgid "About"
+msgstr "Über"
+
+#: ../bin/misc.c:2605
+msgid "Tur&nout Designer..."
+msgstr "Weichendesigner..."
+
+#: ../bin/misc.c:2608
+msgid "Layout &Control Elements"
+msgstr "Steuerungselemente"
+
+#: ../bin/misc.c:2610
+msgid "&Group"
+msgstr "&Gruppierung"
+
+#: ../bin/misc.c:2612
+msgid "&Ungroup"
+msgstr "Gruppierung aufheben"
+
+#: ../bin/misc.c:2616
+msgid "Custom defined parts..."
+msgstr "Eigene Teile..."
+
+#: ../bin/misc.c:2619
+msgid "Update Turnouts and Structures"
+msgstr "Weichen und Gebäude aktualisieren"
+
+#: ../bin/misc.c:2628
+msgid "Layers ..."
+msgstr "Ebenen..."
+
+#: ../bin/misc.c:2632
+msgid "Parts &List ..."
+msgstr "Teile&liste..."
+
+#: ../bin/misc.c:2635
+msgid "Price List..."
+msgstr "Preisliste..."
+
+#: ../bin/misc.c:2717
+msgid "Import/Export"
+msgstr "Import/Export"
+
+#: ../bin/misc.c:2747
+msgid ""
+"Program was not terminated properly. Do you want to resume working on the "
+"previous trackplan?"
+msgstr ""
+"Das Programm wurde nicht ordnungsgemäss beendet. Wollen Sie die Bearbeitung "
+"des vorherigen Gleisplans fortsetzen?"
+
+#: ../bin/misc.c:2748
+msgid "Resume"
+msgstr "Fortsetzen"
+
+#: ../bin/misc.c:2748
+msgid "Resume with New Name"
+msgstr "Wiederaufnahme mit neuem Namen"
+
+#: ../bin/misc.c:2748
+msgid "Ignore Checkpoint"
+msgstr "Sicherungskopie ignorieren"
+
+#: ../bin/misc.c:2751
+#, c-format
+msgid "Reload Checkpoint Selected\n"
+msgstr "Ausgewählte Sicherungskopie laden\n"
+
+#: ../bin/misc.c:2753
+#, c-format
+msgid "Reload Checkpoint With New Name Selected\n"
+msgstr "Sicherungskopie mit neuem Namen laden\n"
+
+#: ../bin/misc.c:2755
+#, c-format
+msgid "Ignore Checkpoint Selected\n"
+msgstr "Ausgewählte Sicherungskopie ignorieren\n"
+
+#: ../bin/misc.c:2868
+#, c-format
+msgid "Unnamed Trackplan - %s(%s)"
+msgstr "Unbenannter Gleisplan - %s(%s)"
+
+#: ../bin/misc.c:2954
+msgid "Initializing commands"
+msgstr "Initialisiere Befehle"
+
+#: ../bin/misc.c:2963
+msgid "Initializing menus"
+msgstr "Initialisiere Menüs"
+
+#: ../bin/misc.c:2998
+msgid "Reading parameter files"
+msgstr "Einlesen der Parameterdateien"
+
+#: ../bin/misc.c:3035
+msgid "Initialization complete"
+msgstr "Initialisierung beendet"
+
+#: ../bin/param.c:92
+msgid "Unexpected End Of String"
+msgstr "Unerwartetes Zeichenkettenende"
+
+#: ../bin/param.c:99
+msgid "Expected digit"
+msgstr "Erwartete Ziffer"
+
+#: ../bin/param.c:106
+msgid "Overflow"
+msgstr "Ãœberlau"
+
+#: ../bin/param.c:154
+msgid "Divide by 0"
+msgstr "Division durch 0"
+
+#: ../bin/param.c:162
+msgid "Expected /"
+msgstr "Erwartet /"
+
+#: ../bin/param.c:248
+msgid "Invalid Units Indicator"
+msgstr "Ungültige Masseinheit"
+
+#: ../bin/param.c:276
+msgid "Expected End Of String"
+msgstr "Zeichenkettenende erwartet"
+
+#: ../bin/param.c:302 ../bin/param.c:1406
+#, c-format
+msgid "Invalid Number"
+msgstr "Ungültige Zahl"
+
+#: ../bin/param.c:361
+msgid "End Of String"
+msgstr "Ende der Zeichenkette"
+
+#: ../bin/param.c:1413
+#, c-format
+msgid "Enter a value > %ld"
+msgstr "Einen Wert größer als %ld eingeben"
+
+#: ../bin/param.c:1415
+#, c-format
+msgid "Enter a value < %ld"
+msgstr "Einen Wert kleiner als %ld eingeben"
+
+#: ../bin/param.c:1417
+#, c-format
+msgid "Enter a value between %ld and %ld"
+msgstr "Einen Wert zwischen %ld und %ld eingeben"
+
+#: ../bin/param.c:1473
+#, c-format
+msgid "Enter a value > %s"
+msgstr "Einen Wert größer als %s eingeben"
+
+#: ../bin/param.c:1476
+#, c-format
+msgid "Enter a value < %s"
+msgstr "Einen Wert kleiner als %s eingeben"
+
+#: ../bin/param.c:1479
+#, c-format
+msgid "Enter a value between %s and %s"
+msgstr "Einen Wert zwischen %s und %s eingeben"
+
+#: ../bin/param.c:2647
+msgid "Help"
+msgstr "Hilfe"
+
+#: ../bin/paramfile.c:250
+msgid "Parameter"
+msgstr "Parameter"
+
+#: ../bin/paramfile.c:348
+msgid "Unknown param file line - skip until next good object?"
+msgstr ""
+"Unbekannte Parameter-Dateizeile - bis zum nächsten guten Objekt überspringen?"
+
+#: ../bin/paramfilelist.c:110
+#, c-format
+msgid "Updating %s"
+msgstr "Aktualisiere %s"
+
+#: ../bin/paramfilesearch_ui.c:68
+msgid "Enter at least one search word"
+msgstr "Mindestens ein Suchwort eingeben"
+
+#: ../bin/paramfilesearch_ui.c:77
+msgid "Reload Library"
+msgstr "Bibliothek neu laden"
+
+#: ../bin/paramfilesearch_ui.c:274
+#, c-format
+msgid "%d parameter files found."
+msgstr "%d Parameterdateien gefunden."
+
+#: ../bin/paramfilesearch_ui.c:284
+msgid "No matches found."
+msgstr "Keine Übereinstimmungen gefunden."
+
+#: ../bin/paramfilesearch_ui.c:396
+msgid "Choose parameter files"
+msgstr "Parameterdateien auswählen"
+
+#: ../bin/paramfilesearch_ui.c:416
+msgid "No system parameter files found, search is disabled."
+msgstr "Keine Parameterdateien gefunden, die Suche ist deaktiviert."
+
+#: ../bin/smalldlg.c:64
+msgid "Show tips at start"
+msgstr "Tipps beim Start anzeigen"
+
+#: ../bin/smalldlg.c:70
+msgid "Did you know..."
+msgstr "Wussten Sie schon..."
+
+#: ../bin/smalldlg.c:72
+msgid "Previous Tip"
+msgstr "Vorheriger Tipp"
+
+#: ../bin/smalldlg.c:73
+msgid "Next Tip"
+msgstr "Nächster Tipp"
+
+#: ../bin/smalldlg.c:90
+msgid "Tip of the Day"
+msgstr "Tipp des Tages"
+
+#: ../bin/smalldlg.c:99
+msgid "No tips are available"
+msgstr "Es sind keine Tipps verfügbar"
+
+#: ../bin/smalldlg.c:199
+msgid ""
+"XTrackCAD is a CAD (computer-aided design) program for designing model "
+"railroad layouts."
+msgstr ""
+"XTrackCAD ist ein CAD (Computer-unterstützter Entwurf) Programm\n"
+"zum Entwerfen von Modelleisenbahnanlagen."
+
+#: ../bin/tbezier.c:177
+#, c-format
+msgid "Bezier: len=%0.2f min_rad=%0.2f"
+msgstr "Bezier Kurve: Länge = %0.2f Kleinster Radius = %0.2f"
+
+#: ../bin/tbezier.c:250
+msgid "Ctl Pt 1: X,Y"
+msgstr "Kontrollpunkt 1: X,Y"
+
+#: ../bin/tbezier.c:251
+msgid "Ctl Pt 2: X,Y"
+msgstr "Kontrollpunkt 1: X,Y"
+
+#: ../bin/tbezier.c:257
+msgid "MinRadius"
+msgstr "Mindestradius"
+
+#: ../bin/tbezier.c:262
+msgid "Line Color"
+msgstr "Linienfarbe"
+
+#: ../bin/tbezier.c:379
+#, c-format
+msgid ""
+"Bezier %s(%d): Layer=%u MinRadius=%s Length=%s EP=[%0.3f,%0.3f] [%0.3f,"
+"%0.3f] CP1=[%0.3f,%0.3f] CP2=[%0.3f, %0.3f]"
+msgstr ""
+"Bezier-Kurve %s(%d): Ebene=%u Minimal-Radius=%s Länge=%s EP=[%0.3f,%0.3f] "
+"[%0.3f,%0.3f] CP1=[%0.3f,%0.3f] CP2=[%0.3f, %0.3f]"
+
+#: ../bin/tbezier.c:453
+msgid "Bezier Track"
+msgstr "Beziergleis"
+
+#: ../bin/tbezier.c:870
+msgid "Merge Bezier"
+msgstr "Bezierkurven zusammenfassen"
+
+#: ../bin/tcornu.c:222
+#, c-format
+msgid "Cornu: len=%0.2f min_rad=%0.2f"
+msgstr "Cornu: Länge = %0.2f Kleinster Radius %0.2f"
+
+#: ../bin/tcornu.c:296
+msgid "Radius "
+msgstr "Radius "
+
+#: ../bin/tcornu.c:304
+msgid "Minimum Radius"
+msgstr "Mindestradius"
+
+#: ../bin/tcornu.c:305
+msgid "Max Rate Of Curve Change/Scale"
+msgstr "Maximale Änderungsrate der Kurve"
+
+#: ../bin/tcornu.c:306
+msgid "Total Winding Angle"
+msgstr "Gesamtwinkel"
+
+#: ../bin/tcornu.c:444
+#, c-format
+msgid ""
+"Cornu Track(%d): Layer=%u MinRadius=%s Length=%s EP=[%0.3f,%0.3f] [%0.3f,"
+"%0.3f]"
+msgstr ""
+"Cornu-Bogen(%d): Ebene=%u Minimal-Radius=%s Länge=%s EP=[%0.3f,%0.3f] [%0.3f,"
+"%0.3f]"
+
+#: ../bin/tcornu.c:497
+msgid "Cornu Track"
+msgstr "Cornu-Gleis"
+
+#: ../bin/tcornu.c:1025
+msgid "Merge Cornu"
+msgstr "Cornu-Kurven zusammenfassen"
+
+#: ../bin/tcurve.c:243
+#, c-format
+msgid "Helix: turns=%ld len=%0.2f grade=%0.1f%% sep=%0.2f"
+msgstr "Gleiswendel: Windungen=%ld Länge=%0.2f Steigung=%0.1f%% Abstand=%0.2f"
+
+#: ../bin/tcurve.c:249
+#, c-format
+msgid "Helix: turns=%ld len=%0.2f"
+msgstr "Gleiswendel: Windungen=%ld Länge=%0.2f"
+
+#: ../bin/tcurve.c:365 ../bin/tcurve.c:367 ../bin/tease.c:520
+#: ../bin/tease.c:522 ../bin/tstraigh.c:86 ../bin/tstraigh.c:88
+msgid "Z"
+msgstr "Z"
+
+#: ../bin/tcurve.c:373
+msgid "Angular Length"
+msgstr "Winkellänge"
+
+#: ../bin/tcurve.c:553
+#, c-format
+msgid ""
+"Helix Track(%d): Layer=%d Radius=%s Turns=%ld Length=%s Center=[%s,%s] "
+"EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A%0.3f]"
+msgstr ""
+"Gleiswendel(%d): Ebene=%d Radius=%s Windungen=%ld Länge=%s Mitte=[%s,%s] "
+"EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A%0.3f]"
+
+#: ../bin/tcurve.c:563
+#, c-format
+msgid ""
+"Curved Track(%d): Layer=%d Radius=%s Length=%s Center=[%s,%s] EP=[%0.3f,"
+"%0.3f A%0.3f] [%0.3f,%0.3f A%0.3f]"
+msgstr ""
+"Gleisbogenl(%d): Ebene=%d Radius=%s Länge=%s Mitte=[%s,%s] EP=[%0.3f,%0.3f A"
+"%0.3f] [%0.3f,%0.3f A%0.3f]"
+
+#: ../bin/tcurve.c:640
+msgid "Helix Track"
+msgstr "Gleiswendel"
+
+#: ../bin/tcurve.c:646
+msgid "Curved Track"
+msgstr "Gleisbogen"
+
+#: ../bin/tcurve.c:1013
+msgid "Merge Curves"
+msgstr "Kurven zusammenfassen"
+
+#: ../bin/tcurve.c:1082
+msgid "Drag to change angle or create tangent"
+msgstr "Ziehen um den Winkel zu ändern oder eine Tangente zu erstellen"
+
+#: ../bin/tcurve.c:1115 ../bin/tcurve.c:1147
+msgid "Curved "
+msgstr "Gebogen "
+
+#: ../bin/tcurve.c:1121
+msgid "Tangent "
+msgstr "Tangente "
+
+#: ../bin/tcurve.c:1130
+#, c-format
+msgid "Tangent track: Length %s Angle %0.3f"
+msgstr "Gleistangente: Länge=%s Winkel=%0.3f"
+
+#: ../bin/tcurve.c:1152
+#, c-format
+msgid "Curved: Radius=%s Length=%s Angle=%0.3f"
+msgstr "Bogen: Radius=%s Länge=%s Winkel=%0.3f"
+
+#: ../bin/tease.c:527
+msgid "l0"
+msgstr "l0"
+
+#: ../bin/tease.c:528
+msgid "l1"
+msgstr "l1"
+
+#: ../bin/tease.c:570
+#, c-format
+msgid ""
+"Joint Track(%d): Layer=%d Length=%0.3f EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A"
+"%0.3f]"
+msgstr ""
+"Übergangsbogen(%d): Ebene=%d Länge=%0.3f EP=[%0.3f,%0.3f A%0.3f] [%0.3f,"
+"%0.3f A%0.3f]"
+
+#: ../bin/tease.c:615
+msgid "Easement Track"
+msgstr "Ügangsbogengleis"
+
+#: ../bin/tease.c:1235
+msgid "Merge Easements"
+msgstr "Übergangsbögen zusammenfassen"
+
+#: ../bin/tease.c:1303
+msgid "Split Easement Curve"
+msgstr "Übergangsbogen auftrennen"
+
+#: ../bin/textnoteui.c:214
+#, c-format
+msgid "Note: Layer=%d %-.80s"
+msgstr "Notiz: Ebene=%d %-.80s"
+
+#: ../bin/textnoteui.c:225
+msgid "Update comment"
+msgstr "Kommentar aktualisieren"
+
+#: ../bin/textnoteui.c:237
+msgid "Replace this text with your note"
+msgstr "Ersetzen Sie diesen Text durch Ihre Notizen"
+
+#: ../bin/textnoteui.c:241
+msgid "Create Text Note"
+msgstr "Erstelle Textnotiz"
+
+#: ../bin/track.c:1329
+msgid "Move Objects Above"
+msgstr "Objekte nach oben"
+
+#: ../bin/track.c:1349
+msgid "Mode Objects Below"
+msgstr "Objekte nach unten"
+
+#: ../bin/track.c:1640
+msgid "Audit"
+msgstr "Protokoll"
+
+#: ../bin/track.c:1929
+#, c-format
+msgid "%d Track(s) loosened"
+msgstr "%d Gleis(e) gelockert"
+
+#: ../bin/track.c:1936
+msgid "No tracks loosened"
+msgstr "Keine Gleise gelockert"
+
+#: ../bin/track.c:1946 ../bin/track.c:1950
+#, c-format
+msgid "Connecting a non-track(%d) to (%d)"
+msgstr "Verbinde ein sonstiges Objekt (%d) mit einem Gleis (%d)"
+
+#: ../bin/track.c:2005
+msgid "Join Abutting Tracks"
+msgstr "Aneinander grenzende Gleise verbinden"
+
+#: ../bin/track.c:2280 ../bin/track.c:2315
+msgid "Inside turnout track"
+msgstr "Inneres Weichengleis"
+
+#: ../bin/track.c:2298
+#, c-format
+msgid "Curve: Length=%s Radius=%0.3f Arc=%0.3f"
+msgstr "Bogen: Länge = %s Radius=%0.3f Winkel = %0.3f"
+
+#: ../bin/track.c:2321 ../bin/track.c:2379 ../bin/tstraigh.c:568
+#, c-format
+msgid "Straight: Length=%s Angle=%0.3f"
+msgstr "Gerade: Länge=%s Winkel=%0.3f"
+
+#: ../bin/trknote.c:60
+msgid "Comment"
+msgstr "Kommentar"
+
+#: ../bin/trknote.c:61
+msgid "Link"
+msgstr "Weblink"
+
+#: ../bin/trknote.c:61 ../../../../build/work/app/bin/bllnhlp.c:101
+msgid "Weblink"
+msgstr "Weblink"
+
+#: ../bin/trknote.c:638 ../../../../build/work/app/bin/bllnhlp.c:108
+msgid "Place a note on the layout"
+msgstr "Eine Notiz auf den Gleisplan setzen"
+
+#: ../bin/trknote.c:652
+msgid "New Note"
+msgstr "Neue Notiz"
+
+#: ../bin/trknote.c:708
+msgid "Add notes"
+msgstr "Notizen hinzufügen"
+
+#: ../bin/tstraigh.c:236
+#, c-format
+msgid ""
+"Straight Track(%d): Layer=%d Length=%s EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A"
+"%0.3f]"
+msgstr ""
+"Gleisgerade(%d): Ebene=%d Länge=%s EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A"
+"%0.3f]"
+
+#: ../bin/tstraigh.c:481
+msgid "Extending Straight Track"
+msgstr "Gleisgerade verlängern"
+
+#: ../bin/tstraigh.c:561
+msgid "Straight "
+msgstr "Gerade "
+
+#: ../wlib/gtklib/filesel.c:94
+msgid "Save format:"
+msgstr "Speicherformat:"
+
+#: ../wlib/gtklib/filesel.c:187
+msgid "Image files"
+msgstr "Grafikdateien"
+
+#: ../wlib/gtklib/font.c:281
+msgid "Font Select"
+msgstr "Auswahl der Schriftart"
+
+#: ../wlib/gtklib/help.c:83 ../wlib/mswlib/mswmisc.c:2232
+msgid "&Contents"
+msgstr "Inhalt"
+
+#: ../wlib/gtklib/help.c:84
+msgid "Co&mmand Context help"
+msgstr "Kontexthilfe für Befehle"
+
+#: ../wlib/gtklib/ixhelp.c:243
+msgid "Home"
+msgstr "Startseite"
+
+#: ../wlib/gtklib/ixhelp.c:247
+msgid "Contents"
+msgstr "Inhaltsverzeichnis"
+
+#: ../wlib/gtklib/menu.c:541
+msgid "<Empty List>"
+msgstr "<Leere Liste>"
+
+#: ../wlib/gtklib/notice.c:101 ../wlib/mswlib/mswmisc.c:2102
+#: ../wlib/mswlib/mswmisc.c:2145
+msgid "Warning"
+msgstr "Warnung"
+
+#: ../wlib/gtklib/notice.c:106 ../wlib/mswlib/mswmisc.c:2107
+msgid "Error"
+msgstr "Fehler"
+
+#: ../wlib/gtklib/text.c:300
+#, c-format
+msgid "%d of %d"
+msgstr "%d von %d"
+
+#: ../wlib/gtklib/wpref.c:114
+#, c-format
+msgid ""
+"The required configuration files could not be located in the expected "
+"location.\n"
+"\n"
+"Usually this is an installation problem. Make sure that these files are "
+"installed in either \n"
+" %s/share/xtrkcad or\n"
+" /usr/lib/%s or\n"
+" /usr/local/lib/%s\n"
+"If this is not possible, the environment variable %s must contain the name "
+"of the correct directory."
+msgstr ""
+"Die notwenidgen Konfigurationsdaten konnten nicht im erwarteten Verzeichnis "
+"gefunden werden.\n"
+"\n"
+"Üblicherweise ist dies ein Instalaltionsproblem. Stellen Sie sicher, dass "
+"diese Dateien in entweder\n"
+" %s/share/xtrkcad oder\n"
+" /usr/lib/%s oder\n"
+" /usr/local/lib/%s\n"
+"gespeichert sind. Sollte das nicht möglich sein, muss die Umgebungsvariable "
+"%s den Namen des korrekten Verzeichnis enthalten."
+
+#: ../wlib/gtklib/wpref.c:148 ../wlib/gtklib/wpref.c:193
+msgid "HOME is not set"
+msgstr "HOME ist nicht gesetzt"
+
+#: ../wlib/gtklib/wpref.c:148 ../wlib/gtklib/wpref.c:157
+#: ../wlib/gtklib/wpref.c:193
+msgid "Exit"
+msgstr "Beenden"
+
+#: ../wlib/gtklib/wpref.c:156
+#, c-format
+msgid "Cannot create %s"
+msgstr "Kann %s nicht erstellen"
+
+#: ../wlib/mswlib/backgnd.c:103
+msgid "Image file is invalid or cannot be read."
+msgstr "Die Bilddatei ist ungültig oder kann nicht gelesen werden."
+
+#: ../wlib/mswlib/mswmenu.c:886
+msgid "Ctrl+"
+msgstr "Strg+"
+
+#: ../wlib/mswlib/mswmenu.c:891
+msgid "Alt+"
+msgstr "Alt+"
+
+#: ../wlib/mswlib/mswmenu.c:896
+msgid "Shift+"
+msgstr "Umsch+"
+
+#: ../wlib/mswlib/mswmenu.c:902
+msgid "Space"
+msgstr "Abstand"
+
+#: ../wlib/mswlib/mswmisc.c:190
+msgid "All image files"
+msgstr "Alle Grafikdateien"
+
+#: ../wlib/mswlib/mswmisc.c:192
+msgid "GIF files (*.gif)"
+msgstr "GIF Dateien (*.gif)"
+
+#: ../wlib/mswlib/mswmisc.c:194
+msgid "JPEG files (*.jpeg,*.jpg)"
+msgstr "JPEG Dateien (*.jpeg,*.jpg)"
+
+#: ../wlib/mswlib/mswmisc.c:196
+msgid "PNG files (*.png)"
+msgstr "PNG Dateien (*.png)"
+
+#: ../wlib/mswlib/mswmisc.c:198
+msgid "TIFF files (*.tiff, *.tif)"
+msgstr "TIFF Dateien (*.tiff, *.tif)"
+
+#: ../wlib/mswlib/mswmisc.c:200
+msgid "All files (*)"
+msgstr "Alle Dateien (*)"
+
+#: ../wlib/mswlib/mswmisc.c:2233
+msgid "&Search for Help on..."
+msgstr "&Suche Hilfe für..."
+
+#: ../wlib/mswlib/mswmisc.c:2234
+msgid "Co&mmand Context Help"
+msgstr "Ko&ntexthilfe für Befehle"
+
+#: ../../../../build/work/app/help/messages.h:9
+#, c-format
+msgid ""
+"MSG_CANT_PLACE_FROGPOINTS\tFrog|Points cannot be placed on a turnout, circle "
+"or helix.\tA %s cannot be placed on a turnout, circle or helix."
+msgstr ""
+"MSG_CANT_PLACE_FROGPOINTS\tHerzstück|Zungen können nicht auf eine Weiche, "
+"einen Kreis oder eine Gleiswendel gesetzt werden.\tEin %s kann nicht auf "
+"eine Weiche, einen Kreis oder eine Gleiswendel gelegt werden."
+
+#: ../../../../build/work/app/help/messages.h:10
+msgid ""
+"MSG_SEL_TRK_FROZEN\tA frozen layer contains selected track. Command cannot "
+"be executed."
+msgstr ""
+"MSG_SEL_TRK_FROZEN\tEine eingefrorene Ebene enthält ausgewählte...\tEine "
+"eingefrorene Ebene enthält ausgewählte Gleise.\n"
+"Der Befehl kann nicht ausgeführt werden."
+
+#: ../../../../build/work/app/help/messages.h:11
+msgid "MSG_HELIX_TURNS_GTR_0\tA Helix must have one or more loops of track."
+msgstr ""
+"MSG_HELIX_TURNS_GTR_0\tEine Gleiswendel muss eine oder mehrere Gleiswindung "
+"enthalten."
+
+#: ../../../../build/work/app/help/messages.h:12
+msgid ""
+"MSG_LARGE_FONT\tA large font has been selected....\tA large font has been "
+"selected.\n"
+"Large fonts may a take a while to load.\n"
+"\n"
+"Do you wish to continue?"
+msgstr ""
+"MSG_LARGE_FONT\tEine grosse Schriftart wurde ausgewählt...\tEine grosse "
+"Schriftart wurde ausgewählt.\n"
+"Das Laden grosser Schriften kann lange dauern.\n"
+"\n"
+"Wollen Sie den Vorgang fortsetzen?"
+
+#: ../../../../build/work/app/help/messages.h:13
+msgid ""
+"MSG_TODSGN_DESC_NONBLANK\tAll description fields present in the Turnout..."
+"\tAll description fields present in the Turnout\n"
+"Designer must contain appropriate information.\n"
+"Correct inappropriate values and try again."
+msgstr ""
+"MSG_TODSGN_DESC_NONBLANK\tAlle vorhandenen Beschreibungsfelder des Weichen "
+"Editor...\tAlle Beschreibungsfelder des Weicheneditor\n"
+"müssen korrekt ausgefüllt sein. Bitte falsche Werte \n"
+"korrigieren und nochmals versuchen."
+
+#: ../../../../build/work/app/help/messages.h:14
+msgid ""
+"MSG_GROUP_NONBLANK\tAll fields listed in the Group dialog must contain "
+"data....\tAll fields listed in the Group dialog must contain data.\n"
+"Please enter missing values and try again."
+msgstr ""
+"MSG_GROUP_NONBLANK\tAlle Felder im Gruppieren-Dialog müssen ausgefüllt "
+"sein...\tAlle Felder im Gruppieren-Dialog müssen ausgefüllt sein.\n"
+"Bitte die fehlenden Werte ergänzen und nochmals versuchen."
+
+#: ../../../../build/work/app/help/messages.h:15
+msgid ""
+"MSG_TODSGN_VALUES_GTR_0\tAll values specified in the Turnout Designer must "
+"be...\tAll values specified in the Turnout Designer must be\n"
+"greater than 0. Correct inappropriate values and try again."
+msgstr ""
+"MSG_TODSGN_VALUES_GTR_0\tAlle eingegebenen Werte im Weicheneditor müssen..."
+"\tAlle eingegebenen Werte im Weicheneditor müssen\n"
+"größer als 0 sein. Bitte fehlerhafte Werte korrigieren und nochmal versuchen."
+
+#: ../../../../build/work/app/help/messages.h:16
+msgid "MSG_CURVE_OUT_OF_RANGE\tAngle must be between 0\\u00B0 and 360\\u00B0."
+msgstr "MSG_CURVE_OUT_OF_RANGE\tDer Winkel muss zwischen 0° und 360° liegen."
+
+#: ../../../../build/work/app/help/messages.h:17
+msgid ""
+"MSG_TODSGN_CORNU_TOO_COMPLEX\tThe curves created by the Turnout Designer for "
+"a cornu curve have more than 128 segments....\tThe curves created by the "
+"Turnout Designer for a cornu curve have more than 128 segments.\n"
+"Try adjusting the end angles and radii to be closer in values."
+msgstr ""
+"MSG_TODSGN_CORNU_TOO_COMPLEX\tDie mit dem Weichen-Designer erstellten Kurven "
+"für eine Cornu haben mehr als 128 Segmente....\tDie mit dem Weichen-Designer "
+"erstellten Kurven für eine Klthoide haben mehr als 128 Segmente.\n"
+"Versuchen Sie, die Endwinkel und Radien so einzustellen, dass die Werte "
+"näher beieinander liegen."
+
+#: ../../../../build/work/app/help/messages.h:18
+#, c-format
+msgid ""
+"MSG_CUSTMGM_DELETE_CONFIRM\tAre you sure you want to delete the NNN "
+"definition(s)?\tAre you sure you want to delete the\n"
+"%d definition(s)?"
+msgstr ""
+"MSG_CUSTMGM_DELETE_CONFIRM\tSind Sie sicher, dass Sie NNN Definitionen "
+"löschen wollen?\tSind Sie sicher, dass Sie %d Definitionen\n"
+"löschen wollen?"
+
+#: ../../../../build/work/app/help/messages.h:19
+msgid "MSG_WBITMAP_FAILED\tBitmap create or write function failed."
+msgstr ""
+"MSG_WBITMAP_FAILED\tErzeugen oder Schreiben der Bitmap ist fehlgeschlagen."
+
+#: ../../../../build/work/app/help/messages.h:20
+msgid "MSG_BITMAP_TOO_LARGE\tBitmap is too large."
+msgstr "MSG_BITMAP_TOO_LARGE\tBitmap ist zu groß."
+
+#: ../../../../build/work/app/help/messages.h:21
+msgid "MSG_CHANGE_ELEV_MODE\tCannot change elevation mode."
+msgstr ""
+"MSG_CHANGE_ELEV_MODE\tArt der Höhenfestlegung kann nicht geändert werden."
+
+#: ../../../../build/work/app/help/messages.h:22
+msgid ""
+"MSG_GRID_ENABLE_SPACE_GTR_0\tCannot Enable Grid; spacing must be greater "
+"than 0"
+msgstr ""
+"MSG_GRID_ENABLE_SPACE_GTR_0\tFangraster kann nicht aktiviert werden. Abstand "
+"muss größer als 0 sein"
+
+#: ../../../../build/work/app/help/messages.h:23
+msgid "MSG_LAYER_FREEZE\tCannot freeze current layer"
+msgstr "MSG_LAYER_FREEZE\tAktuelle Ebene kann nicht eingefroren werden"
+
+#: ../../../../build/work/app/help/messages.h:24
+msgid ""
+"MSG_CANT_GROUP_BUMPER1\tCannot Group Bumper Track. The track has been "
+"unselected."
+msgstr ""
+"Prellbock kann nicht in die Gruppe aufgenommen werden. Das Gleis wurde "
+"abgewählt."
+
+#: ../../../../build/work/app/help/messages.h:25
+msgid "MSG_CANNOT_GROUP_TRACK\tCannot Group selected track."
+msgstr ""
+"MSG_CANNOT_GROUP_TRACK\tAusgewähltes Gleis kann nicht gruppiert werden."
+
+#: ../../../../build/work/app/help/messages.h:26
+msgid "MSG_LAYER_HIDE\tCannot hide current layer"
+msgstr "MSG_LAYER_HIDE\tAktuelle Ebene kann nicht verborgen werden"
+
+#: ../../../../build/work/app/help/messages.h:27
+msgid "MSG_LAYER_MODULE\tCannot turn current layer into a Module"
+msgstr ""
+"MSG_LAYER_HIDE\tAktuelle Ebene kann nicht in ein Modul umgewandelt werden"
+
+#: ../../../../build/work/app/help/messages.h:28
+msgid "MSG_JOIN_EASEMENTS\tCannot Join; Easements do not align or abut."
+msgstr ""
+"MSG_JOIN_EASEMENTS\tVerbinden nicht möglich. Übergangsbögen sind nicht "
+"ausgerichtet."
+
+#: ../../../../build/work/app/help/messages.h:29
+#, c-format
+msgid ""
+"MSG_TRK_ALREADY_CONN\tFirst|Second track is already connected.\tCannot Join; "
+"%s track is already connected."
+msgstr ""
+"MSG_TRK_ALREADY_CONN\tErstes|zweites Gleis ist bereits verbunden.\tVerbinden "
+"nicht möglich, das %s Gleis ist bereits verbunden."
+
+#: ../../../../build/work/app/help/messages.h:30
+msgid "MSG_JOIN_TURNTABLE\tCannot join from a turntable, try to a turntable"
+msgstr ""
+"MSG_JOIN_TURNTABLE\tVerbinden von einer Drehscheibe ist nicht möglich, bitte "
+"zur Drehscheibe verbinden"
+
+#: ../../../../build/work/app/help/messages.h:31
+msgid "MSG_JOIN_CORNU_SAME\tCannot Join; Selected endpoints are on same track."
+msgstr ""
+"MSG_JOIN_CORNU_SAME\tVerbinden nicht möglich, da ausgewählte Endpunkte zum "
+"selben Gleis gehören."
+
+#: ../../../../build/work/app/help/messages.h:32
+msgid "MSG_JOIN_SAME\tCannot Join; Selected endpoints are on same track."
+msgstr ""
+"MSG_JOIN_SAME\tVerbinden nicht möglich, da ausgewählte Endpunkte zum selben "
+"Gleis gehören."
+
+#: ../../../../build/work/app/help/messages.h:33
+msgid ""
+"MSG_SELECTED_TRACKS_PARALLEL\tCannot Join; Selected tracks are parallel."
+msgstr ""
+"MSG_SELECTED_TRACKS_PARALLEL\tVerbinden nicht möglich, da ausgewählte Gleise "
+"parallel sind."
+
+#: ../../../../build/work/app/help/messages.h:34
+#, c-format
+msgid ""
+"MSG_PRMFIL_OPEN_NEW\tCannot open New Parameter File: FILENAME\tCannot open "
+"New Parameter File: %s"
+msgstr ""
+"MSG_PRMFIL_OPEN_NEW\tDie neue Parameterdatei DATEINAME kann nicht geöffnet "
+"werden.\tDie neue Parameterdatei %s kann nicht geöffnet werden"
+
+#: ../../../../build/work/app/help/messages.h:35
+msgid "MSG_LAYER_SEL_FROZEN\tCannot select a frozen layer"
+msgstr ""
+"MSG_LAYER_SEL_FROZEN\tEine eingefrorene Ebene kann nicht ausgewählt werden"
+
+#: ../../../../build/work/app/help/messages.h:36
+msgid ""
+"MSG_GRID_SHOW_SPACE_GTR_0\tCannot Show Grid; spacing must be greater than 0"
+msgstr ""
+"MSG_GRID_ENABLE_SPACE_GTR_0\tFangraster kann nicht angezeigt werden. Abstand "
+"muss größer als 0 sein"
+
+#: ../../../../build/work/app/help/messages.h:37
+#, c-format
+msgid "MSG_CANT_SPLIT_TRK\tCannot split TYPE track\tCannot split %s track"
+msgstr ""
+"MSG_CANT_SPLIT_TRK\tTYP Gleis kann nicht aufgetrennt werden\tGleis vom Typ "
+"%s kann nicht aufgetrennt werden"
+
+#: ../../../../build/work/app/help/messages.h:38
+#, c-format
+msgid ""
+"MSG_CUSTMGM_CANT_WRITE\tCannot write to parameter file: FILENAME\tCannot "
+"write to parameter file: %s"
+msgstr ""
+"MSG_PRMFIL_OPEN_NEW\tDie neue Parameterdatei DATEINAME kann nicht geöffnet "
+"werden.\tDie neue Parameterdatei %s kann nicht geöffnet werden"
+
+#: ../../../../build/work/app/help/messages.h:39
+msgid "MSG_CARIMP_DUP_INDEX\tCar Index number duplicated."
+msgstr "MSG_CARIMP_DUP_INDEX\tWagenkennzahl ist doppelt."
+
+#: ../../../../build/work/app/help/messages.h:40
+msgid ""
+"MSG_CONN_PARAMS_TOO_SMALL\tConnection parameters reset to minimum values."
+msgstr ""
+"MSG_CONN_PARAMS_TOO_SMALL\tVerbindungseinstellungen auf die Minimalwerte "
+"zurückgesetzt."
+
+#: ../../../../build/work/app/help/messages.h:41
+msgid "MSG_CONN_PARAMS_TOO_BIG\tConnection parameters reset to maximum values."
+msgstr ""
+"MSG_CONN_PARAMS_TOO_SMALL\tVerbindungseinstellungen auf die Maximalwerte "
+"zurückgesetzt."
+
+#: ../../../../build/work/app/help/messages.h:42
+msgid "MSG_CANT_PASTE\tCopy/Paste buffer is empty. There is nothing to Paste."
+msgstr ""
+"MSG_CANT_PASTE\tZwischenablage ist leer. Es kann nichts eingefügt werden."
+
+#: ../../../../build/work/app/help/messages.h:43
+msgid ""
+"MSG_TODSGN_CROSSOVER_TOO_SHORT\tCrossover length is too short. Correct..."
+"\tCrossover length is too short. Correct\n"
+"inappropriate value(s) and try again."
+msgstr ""
+"MSG_TODSGN_CROSSOVER_TOO_SHORT\tKreuzungslänge ist zu kurz. Unpassende..."
+"\tKreuzungslänge ist zu kurz. Unpassende\n"
+"Werte verbessern und nochmals versuchen."
+
+#: ../../../../build/work/app/help/messages.h:44
+msgid "MSG_CURVE_TOO_LARGE\tCurved track is too large."
+msgstr "MSG_CURVE_TOO_LARGE\tBogengleis ist zu groß."
+
+#: ../../../../build/work/app/help/messages.h:45
+msgid ""
+"MSG_TODSGN_REPLACE\tDefinition name is already in use. Saving this..."
+"\tDefinition name is already in use. Saving this\n"
+"definition replaces the existing definition.\n"
+"\n"
+"Do you want to continue?"
+msgstr ""
+"MSG_TODSGN_REPLACE\tEin Design mit diesem Namen existiert bereits. "
+"Speichern...\tEin Design mit diesem Namen existiert bereits. Speichern\n"
+"unter diesem Namen ersetzt das vorhandene Design.\n"
+"\n"
+"Speichern fortsetzen?"
+
+#: ../../../../build/work/app/help/messages.h:46
+msgid "MSG_SAVE_CHANGES\tDo you want to save the changes made to your Layout?"
+msgstr ""
+"MSG_SAVE_CHANGES\tWollen Sie die Veränderungen an Ihrem Gleisplan speichern?"
+
+#: ../../../../build/work/app/help/messages.h:47
+msgid ""
+"MSG_CARIMP_DUP_COLUMNS\tDuplicate column headers found in Car Import file."
+msgstr ""
+"MSG_CARIMP_DUP_COLUMNS\tDoppelte Spaltenüberschrift in der Wagenimportdatei."
+
+#: ../../../../build/work/app/help/messages.h:48
+msgid "MSG_EP_ON_PATH\tEndpoint already on Path."
+msgstr "MSG_EP_ON_PATH\tDer Endpunkt ist bereits im Pfad enthalten."
+
+#: ../../../../build/work/app/help/messages.h:49
+#, c-format
+msgid ""
+"MSG_UPGRADE_VERSION1\tFile version %ld is greater than supported...\tFile "
+"version %ld is greater than supported\n"
+"version %d. You need to upgrade %s\n"
+"to at least version %s."
+msgstr ""
+"MSG_UPGRADE_VERSION1\tDateiversion %ld ist größer als unterstützte Version..."
+"\tDateiversion %ld ist größer als unterstützte\n"
+"Version %d. Sie sollten %s mindestens auf Version %s\n"
+"aktualisieren."
+
+#: ../../../../build/work/app/help/messages.h:50
+#, c-format
+msgid ""
+"MSG_UPGRADE_VERSION2\tFile version %ld is greater than supported...\tFile "
+"version %ld is greater than supported\n"
+"version %d. You need to upgrade your\n"
+"version of %s"
+msgstr ""
+"MSG_UPGRADE_VERSION2\tDateiversion %ld ist größer als unterstützte Version..."
+"\tDateiversion %ld ist größer als unterstützte\n"
+"Version %d. Sie sollten %s aktualisieren"
+
+#: ../../../../build/work/app/help/messages.h:51
+#, c-format
+msgid ""
+"MSG_LAYOUT_LINES_SKIPPED\tWhile processing Layout file %s, %d lines were "
+"skipped because they were not recognized."
+msgstr ""
+"MSG_LAYOUT_LINES_SKIPPED\tBei der Verarbeitung der Gleisplandatei %s wurden "
+"%d Zeilen übersprungen, weil sie nicht erkannt wurden."
+
+#: ../../../../build/work/app/help/messages.h:52
+#, c-format
+msgid ""
+"MSG_PARAM_UPGRADE_VERSION1\tFile version %ld is greater than supported..."
+"\tFile version %ld is greater than supported\n"
+"version %d. You need to upgrade %s\n"
+"to at least version %s."
+msgstr ""
+"MSG_UPGRADE_VERSION1\tDateiversion %ld ist größer als unterstützte Version..."
+"\tDateiversion %ld ist größer als unterstützte\n"
+"Version %d. Sie sollten %s mindestens auf Version %s\n"
+"aktualisieren."
+
+#: ../../../../build/work/app/help/messages.h:53
+#, c-format
+msgid ""
+"MSG_PARAM_UPGRADE_VERSION2\tFile version %ld is greater than supported..."
+"\tFile version %ld is greater than supported\n"
+"version %d. You need to upgrade your\n"
+"version of %s"
+msgstr ""
+"MSG_UPGRADE_VERSION2\tDateiversion %ld ist größer als unterstützte Version..."
+"\tDateiversion %ld ist größer als unterstützte\n"
+"Version %d. Sie sollten %s aktualisieren"
+
+#: ../../../../build/work/app/help/messages.h:54
+#, c-format
+msgid ""
+"MSG_PARAM_LINES_SKIPPED\tWhile processing Parameter file %s, %d lines were "
+"skipped because they were not recognized."
+msgstr ""
+"MSG_PARAM_LINES_SKIPPED Bei der Verarbeitung der Parameterdatei %s wurden %d "
+"Zeilen übersprungen, weil sie nicht erkannt wurden."
+
+#: ../../../../build/work/app/help/messages.h:55
+msgid ""
+"MSG_MOVE_POINTS_OTHER_SIDE\tFrog angle prevents placement of points. Move "
+"points to opposite side of frog."
+msgstr ""
+"MSG_MOVE_POINTS_OTHER_SIDE\tDer Weichenwinkel verhindert das Setzen....\tDer "
+"Weichenwinkel verhindert das Setzen der Weichenzungen.\n"
+"Die Weichenzungen auf die andere Seite der Weiche verschieben."
+
+#: ../../../../build/work/app/help/messages.h:56
+msgid "MSG_NO_ROOM_BTW_TRKS\tInsufficient space between existing stall tracks."
+msgstr "MSG_NO_ROOM_BTW_TRKS\tZu wenig Platz zwischen den Drehscheibengleisen."
+
+#: ../../../../build/work/app/help/messages.h:57
+#, c-format
+msgid ""
+"MSG_JOIN_DIFFER_ELEV\tJoining tracks with differing elevations (N."
+"NNN)\tJoining tracks with differing elevations (%0.2f)"
+msgstr ""
+"MSG_JOIN_DIFFER_ELEV\tZu verbindende Gleise haben unterschiedliche Höhe(N."
+"NNN)\tZu verbindende Gleise haben unterschiedliche Höhe(%0.2f)"
+
+#: ../../../../build/work/app/help/messages.h:58
+msgid "MSG_TRK_DESC_NOT_VISIBLE\tLabel description is hidden"
+msgstr "MSG_DESC_NOT_VISIBLE\tBeschriftung ist nicht sichtbar"
+
+#: ../../../../build/work/app/help/messages.h:59
+msgid "MSG_DESC_NOT_VISIBLE\tLabel descriptions not visible"
+msgstr "MSG_DESC_NOT_VISIBLE\tBeschriftungen sind nicht sichtbar"
+
+#: ../../../../build/work/app/help/messages.h:60
+msgid "MSG_OBJECT_TOO_SHORT\tLength of object is too short."
+msgstr "MSG_OBJECT_TOO_SHORT\tDie Länge des Objektes ist zu kurz."
+
+#: ../../../../build/work/app/help/messages.h:61
+#, c-format
+msgid ""
+"MSG_PRINT_MAX_SIZE\tMaximum allowed page size is W x H\tMaximum allowed page "
+"size is %s x %s"
+msgstr ""
+"MSG_PRINT_MAX_SIZE\tDie maximal zulässige Seitengröße ist B x H\tDie maximal "
+"zulässige Seitengröße ist %s x %s"
+
+#: ../../../../build/work/app/help/messages.h:62
+msgid ""
+"MSG_NO_PRINTER_SELECTED\tPlease select a printer from the Print Setup dialog."
+msgstr ""
+"MSG_NO_PRINTER_SELECTED\tBitte wählen Sie einen Drucker aus dem Dialogfeld "
+"Druckereinrichtung."
+
+#: ../../../../build/work/app/help/messages.h:63
+#, c-format
+msgid ""
+"MSG_PRMFIL_NO_CONTENTS\tNew Parameter File has no CONTENTS line: FILENAME."
+"\tNew Parameter File has no CONTENTS line: %s"
+msgstr ""
+"MSG_PRMFIL_NO_CONTENTS\tDie neue Parameterdatei enthält keine CONTENTS "
+"Zeile: DATEINAME.\tDie neue Parameterdatei enthält keine CONTENTS Zeile: %s"
+
+#: ../../../../build/work/app/help/messages.h:64
+msgid ""
+"MSG_NO_CARS\tNo Cars are defined for the current scale....\tNo Cars are "
+"defined for the current scale.\n"
+"\n"
+"Do you want to use the Car Inventory dialog?"
+msgstr ""
+"MSG_NO_CARS\tFür den aktuellen Maßstab sind keine Wagen vorhanden...\tFür "
+"den aktuellen Maßstab sind keine Wagen vorhanden.\n"
+"\n"
+"Soll der Wagenbestandsdialog geöffnet werden?"
+
+#: ../../../../build/work/app/help/messages.h:65
+msgid ""
+"MSG_NO_CARPROTO\tNo Car Prototypes are defined....\tNo Car Prototypes are "
+"defined.\n"
+"Load a Prototype definition file using the\n"
+"Parameter Files dialog or create a Prototype\n"
+"definition using the Car Prototype dialog."
+msgstr ""
+"MSG_NO_CARPROTO\tEs sind keine Vorbildwagen definiert...\tEs sind keine "
+"Vorbildwagen definiert.\n"
+"Über den Parameterdateidialog muß eine\n"
+"Parameterdatei mit Vorbildern geladen werden oder\n"
+"ein Vorbild muß über den Wagenvorbilddialog erstellt werden."
+
+#: ../../../../build/work/app/help/messages.h:66
+msgid "MSG_CARIMP_NO_DATA\tNo data present in Car Import file."
+msgstr "MSG_CARIMP_NO_DATA\tDie Wagenimportdatei enthält keine Daten."
+
+#: ../../../../build/work/app/help/messages.h:67
+msgid "MSG_PRINT_NO_PAGES\tNo pages selected for printing."
+msgstr "MSG_PRINT_NO_PAGES\tKeine Seiten zum Drucken ausgewählt."
+
+#: ../../../../build/work/app/help/messages.h:68
+msgid "MSG_NO_PATH_TO_EP\tNo path between Profile and selected endpoint."
+msgstr ""
+"MSG_NO_PATH_TO_EP\tEs existiert keine Verbindung zwischen dem Högenprofil "
+"und dem ausgählten Endpunkt."
+
+#: ../../../../build/work/app/help/messages.h:69
+#, c-format
+msgid ""
+"MSG_PRMFIL_NO_MAP\tNo Parameter File Map for CONTENTS\tNo Parameter File Map "
+"for %s"
+msgstr ""
+"MSG_PRMFIL_OPEN_NEW\tDie neue Parameterdatei DATEINAME kann nicht geöffnet "
+"werden.\tDie neue Parameterdatei %s kann nicht geöffnet werden"
+
+#: ../../../../build/work/app/help/messages.h:70
+msgid "MSG_NO_SELECTED_TRK\tNo track(s) selected!"
+msgstr "MSG_NO_SELECTED_TRK\tEs sind keine Gleise ausgewählt!"
+
+#: ../../../../build/work/app/help/messages.h:71
+msgid ""
+"MSG_NO_EMPTY_LAYER\tNo layer was found that has no contents, so the module "
+"can not be imported"
+msgstr ""
+"MSG_NO_EMPTY_LAYER\tEs wurde kein Layer gefunden, der keinen Inhalt hat, so "
+"dass das Modul nicht importiert werden kann"
+
+#: ../../../../build/work/app/help/messages.h:72
+#, c-format
+msgid ""
+"MSG_NO_TURNOUTS_AVAILABLE\tNo Turnouts|Structures are available.\tNo %s are "
+"available."
+msgstr ""
+"MSG_NO_TURNOUTS_AVAILABLE\tEs sind keine Weichern | Gebäude verfügbar.\tEs "
+"sind keine %s verfügbar."
+
+#: ../../../../build/work/app/help/messages.h:73
+msgid ""
+"MSG_CARDESC_VALUE_ZERO\tNumeric values on the Car Description...\tNumeric "
+"values on the Car Description\n"
+"dialog must be greater than 0."
+msgstr ""
+"MSG_CARDESC_VALUE_ZERO\tNumerische Werte im Wagenbeschreibungsdialog..."
+"\tNumerische Werte im Wagenbeschreibungsdialog\n"
+"müssen größer als 0 sein."
+
+#: ../../../../build/work/app/help/messages.h:74
+msgid "MSG_MOVE_OUT_OF_BOUNDS\tObject has moved beyond room boundaries."
+msgstr ""
+"MSG_MOVE_OUT_OF_BOUNDS\tObjekt wurde nach außerhalb des Raumes verschoben."
+
+#: ../../../../build/work/app/help/messages.h:75
+msgid ""
+"MSG_PARALLEL_SEP_GTR_0\tParallel separation must be greater than 0, or the "
+"new guage must be different than the old."
+msgstr ""
+"MSG_PARALLEL_SEP_GTR_0\tParallelabstand muß entweder größer als 0 sein. oder "
+"die neue Spurweite muss sich von der alten unterscheiden."
+
+#: ../../../../build/work/app/help/messages.h:76
+msgid ""
+"MSG_CARPART_DUPNAME\tPart Number for this Manufacturer already exists...."
+"\tPart Number for this Manufacturer already exists.\n"
+"\n"
+"Do you want to update it?"
+msgstr ""
+"MSG_CARPART_DUPNAME\tTeilnummer für diesen Hersteller existiert bereits..."
+"\tTeilnummer für diesen Hersteller existiert bereits.\n"
+"\n"
+"Wollen Sie den Artikel aktualisieren?"
+
+#: ../../../../build/work/app/help/messages.h:77
+#, c-format
+msgid ""
+"MSG_PLAYBACK_LISTENTRY\tPlayback: Cannot find list entry: NAME\tPlayback: "
+"Cannot find list entry: %s"
+msgstr ""
+"MSG_PLAYBACK_LISTENTRY\tWiedergabe: Der Listeneintrag: NAME kann nicht "
+"gefunden werden.\tWiedergabe: der Listeneintrag %s kann nicht gefunden werden"
+
+#: ../../../../build/work/app/help/messages.h:78
+#, c-format
+msgid ""
+"MSG_PLAYBACK_VERSION_UPGRADE\tPlayback file version %ld is...\tPlayback file "
+"version %ld is\n"
+"greater than supported version %d\n"
+"You need to upgrade your version of %s"
+msgstr ""
+"MSG_PLAYBACK_VERSION_UPGRADE\tVersion %ld der Wiedergabedatei ist..."
+"\tVersion %ld der Wiedergabedatei\n"
+"ist neuer als due unterstützte Version %d\n"
+"Aktualisierung von %s ist notwendig"
+
+#: ../../../../build/work/app/help/messages.h:79
+#, c-format
+msgid ""
+"MSG_DOMOUSE_BAD_OP\tPlayback: unknown action NNN\tPlayback: unknown action %d"
+msgstr ""
+"MSG_DOMOUSE_BAD_OP\tWiedergabe: unbekannte AktionNNN\tWiedergabe: unbekannte "
+"Aktion %d"
+
+#: ../../../../build/work/app/help/messages.h:80
+msgid "MSG_MOVE_POINTS_AWAY_CLOSE\tPoints are to close to frog; move away."
+msgstr ""
+"MSG_MOVE_POINTS_AWAY_CLOSE\tWeichenzungen sind zu kurz. In größere "
+"Entfernung vom Herzstück setzen."
+
+#: ../../../../build/work/app/help/messages.h:81
+msgid "MSG_POLY_SHAPES_3_SIDES\tPoly shapes must have at least 3 sides."
+msgstr ""
+"MSG_POLY_SHAPES_3_SIDES\tEin Vieleck muss mindestens drei Seiten haben.."
+
+#: ../../../../build/work/app/help/messages.h:82
+msgid "MSG_POLY_MULTIPLE_SELECTED\tCan't delete multiple points at once"
+msgstr ""
+"MSG_POLY_MULTIPLE_SELECTED\tKann nicht mehrere Punkte auf einmal löschen"
+
+#: ../../../../build/work/app/help/messages.h:83
+msgid ""
+"MSG_CARPROTO_DUPNAME\tPrototype name already exists....\tPrototype name "
+"already exists.\n"
+"\n"
+"Do you want to update it?"
+msgstr ""
+"MSG_CARPROTO_DUPNAME\tEin Vorbild mit diesem Namen existiert bereits...."
+"\tEin Vorbild mit diesem Namen existiert bereits.\n"
+"\n"
+"Wollen Sie dieses Vorbild überschreiben?"
+
+#: ../../../../build/work/app/help/messages.h:84
+msgid "MSG_RADIUS_GTR_0\tRadius must be greater than 0."
+msgstr "MSG_RADIUS_GTR_0\tRadius muss größer als 0 sein.."
+
+#: ../../../../build/work/app/help/messages.h:85
+msgid "MSG_RADIUS_GTR_10000\tRadius must be less than 10000."
+msgstr "MSG_RADIUS_GTR_0\tRadius muss kleiner als 10000 sein."
+
+#: ../../../../build/work/app/help/messages.h:86
+msgid ""
+"MSG_RADIUS_TOO_BIG\tThe Circle or Helix will not fit within the layouts room "
+"parameters (Height and Width)."
+msgstr ""
+"MSG_RADIUS_TOO_BIG\tDer Bogen oder die Gleiswendel passen nicht in den Raum "
+"(Höhe und Breite)."
+
+#: ../../../../build/work/app/help/messages.h:87
+#, c-format
+msgid ""
+"MSG_RESCALE_TOO_BIG\tRescaled tracks do not fit within layouts room "
+"parameters...\tRescaled tracks do not fit within layouts room parameters\n"
+"(Height and width). The layouts room parameters should be\n"
+"set to at least %s by %s."
+msgstr ""
+"MSG_RESCALE_TOO_BIG\tNeu skalierte Gleise passen nicht in den Raum...\tNeu "
+"skalierte Gleise passen nicht in den Raum\n"
+"(Länge und Breite). Die benötigte Größe ist\n"
+"mindestens %s auf %s."
+
+#: ../../../../build/work/app/help/messages.h:88
+msgid ""
+"MSG_CARIMP_MISSING_COLUMNS\tRequired column headers missing from Car Import "
+"file."
+msgstr ""
+"MSG_CARIMP_MISSING_COLUMNS\tDie benötigten Spaltenüberschriften fehlen in "
+"der Wagen-ImportDatei."
+
+#: ../../../../build/work/app/help/messages.h:89
+#, c-format
+msgid ""
+"MSG_2ND_TRK_NOT_SEL_UNSEL\tSecond track must be selected|unselected\tSecond "
+"track must be %s."
+msgstr ""
+"MSG_2ND_TRK_NOT_SEL_UNSEL\tDas zweite Gleis darf (nicht) ausgewählt sein."
+"\tDas zweite Gleis muss %s sein."
+
+#: ../../../../build/work/app/help/messages.h:90
+msgid "MSG_OUT_OF_BOUNDS\tSelected page is out of bounds."
+msgstr ""
+"MSG_OUT_OF_BOUNDS\tAusgewählte Dateien sind außerhalb des zulässigen "
+"Bereichs."
+
+#: ../../../../build/work/app/help/messages.h:91
+msgid "MSG_SEL_POS_FIRST\tSelect position prior to entering Text."
+msgstr ""
+"MSG_SEL_POS_FIRST\tDie Position muß vor der Texteingabe festgelegt werden."
+
+#: ../../../../build/work/app/help/messages.h:92
+msgid ""
+"MSG_CARPROTO_BADSEGS\tSelected shapes must define a rectangular area ..."
+"\tSelected shapes must define a rectangular\n"
+"area with length greater than height."
+msgstr ""
+"MSG_CARPROTO_BADSEGS\tDie ausgewählten Formen müssen einen rechtwinkligen..."
+"\tDie ausgewählten Formen müssen einen rechtwinkligen\n"
+"Bereich bilden, wobei die Länge größer als die Breite sein muss."
+
+#: ../../../../build/work/app/help/messages.h:93
+msgid ""
+"MSG_TOO_FAR_APART_DIVERGE\tSelected tracks deviate too much or are too far "
+"apart from each other."
+msgstr ""
+"MSG_TOO_FAR_APART_DIVERGE\tDie ausgewählten Gleise weichen zu stark ab..."
+"\tDie ausgewählten Gleise weichen zu stark ab oder\n"
+"sind zu weit voneinander entfernt."
+
+#: ../../../../build/work/app/help/messages.h:94
+msgid "MSG_COMMAND_DISABLED\tSpecified command disabled."
+msgstr "MSG_COMMAND_DISABLED\tDieser Befehl ist deaktiviert."
+
+#: ../../../../build/work/app/help/messages.h:95
+msgid "MSG_SPLIT_POS_BTW_MERGEPTS\tSplit position between Turnout Points"
+msgstr ""
+"MSG_SPLIT_POS_BTW_MERGEPTS\tDie Trennstelle befindet sich iin den "
+"Weichenzungen"
+
+#: ../../../../build/work/app/help/messages.h:96
+msgid "MSG_SPLIT_PATH_NOT_UNIQUE\tSplit position not on unique path"
+msgstr ""
+"MSG_SPLIT_PATH_NOT_UNIQUE\tTrennstelle ist nicht auf einem eindeutigen "
+"Verlauf"
+
+#: ../../../../build/work/app/help/messages.h:97
+#, c-format
+msgid ""
+"MSG_CARIMP_MISSING_DIMS\tThe following car has no dimensions and a...\tThe "
+"following car has no dimensions and a\n"
+"Car Part description can not be found.\n"
+"\n"
+"%s\n"
+"\n"
+"Do you wish to continue importing other Cars?"
+msgstr ""
+"MSG_CARIMP_MISSING_DIMS\tFür den folgenden Wagen gibt es keine Abmessungen "
+"und....\tFür den folgenden Wagen gibt es keine Abmessungen und\n"
+"eine Wagenbeschreibung ist nicht vorhanden.\n"
+"\n"
+"%s\n"
+"\n"
+"Soll das Einlesen der Wagen fortgesetzt werden?"
+
+#: ../../../../build/work/app/help/messages.h:98
+#, c-format
+msgid ""
+"MSG_CARIMP_MISSING_PARTNO\tThe following car has no Part Number...\tThe "
+"following car has no Part Number\n"
+"\n"
+"%s\n"
+"\n"
+"Do you wish to continue importing other Cars?"
+msgstr ""
+"MSG_CARIMP_MISSING_PARTNO\tDer folgende Wagen hat keine Teilenummer...\tDer "
+"folgende Wagen hat keine Teilenummer.\n"
+"\n"
+"%s\n"
+"\n"
+"Soll das Einlesen der Wagen fortgesetzt werden?"
+
+#: ../../../../build/work/app/help/messages.h:99
+#, c-format
+msgid ""
+"MSG_CARIMP_IGNORED_COLUMN\tThe following column in the Car Import file will "
+"be ignored:...\tThe following column in the Car Import file will be "
+"ignored:\n"
+"\n"
+"%s"
+msgstr ""
+"MSG_CARIMP_IGNORED_COLUMN\tDiese Spalte in der Wagen-Importdatei wird "
+"ignoriert:...\tDiese Spalte in der Wagen-Importdatei wird ignoriert:\n"
+"\n"
+"%s"
+
+#: ../../../../build/work/app/help/messages.h:100
+msgid ""
+"MSG_CANT_MOVE_UNDER_TRAIN\tThe position of a turnout or turntable cannot be "
+"changed while occupied by a train."
+msgstr ""
+"MSG_CANT_MOVE_UNDER_TRAIN\tDie Position einer Weiche oder einer "
+"Drehscheibe...\tDie Position einer Weiche oder einer Drehscheibe\n"
+"kann nicht verändert werden, wenn sich ein Zug darauf befindet."
+
+#: ../../../../build/work/app/help/messages.h:101
+msgid ""
+"MSG_STRUCT_NO_STRUCTS\tThere are no structures to choose from in the "
+"structure...\tThere are no structures to choose from in the structure\n"
+"selection list. Please check your SCALE, select the\n"
+"<File|Parameter Files> menu to load a Parameter File or\n"
+"create a new Structure with the Group command."
+msgstr ""
+"MSG_STRUCT_NO_STRUCTS\tIn der Liste der Gebäude gibt es keine...\tIn der "
+"Liste der Gebäude gibt es keine Gebäude,\n"
+"die ausgewählt werden können. Bitte Maßstab prüfen, im Menupunkt <Datei|"
+"Parameter Dateien> eine Parameter-Datei wählen\n"
+"oder ein neues Gebäude mit dem Gruppieren-Befehl erstellen."
+
+#: ../../../../build/work/app/help/messages.h:102
+msgid ""
+"MSG_TURNOUT_NO_TURNOUT\tThere are no turnouts to choose from in the "
+"turnout...\tThere are no turnouts to choose from in the turnout\n"
+"selection list. Please check your SCALE, select the\n"
+"<Manage|Turnout Designer> menu to enter a new turnout\n"
+"or select the <File|Parameter Files> menu to load a\n"
+"Parameter File"
+msgstr ""
+"MSG_TURNOUT_NO_TURNOUT\tIn der Weichenauswahl gibt es keine Weichen, die "
+"ausgewählt werden können...\tIn der Weichenauswahl gibt es keine Weichen, "
+"die ausgewählt werden können.\n"
+"Bitte den Maßstab prüfen, über den Menupunkt <Hinzufügen | Weichendesigner> "
+"eine Weiche anlegen oder\n"
+"eine Parameter-Datei unter <Datei|Parameter Dateien> laden"
+
+#: ../../../../build/work/app/help/messages.h:103
+msgid "MSG_NO_UNCONN_EP\tThere are no unconnected end points for this track"
+msgstr "MSG_NO_UNCONN_EP\tDieses Gleis hat keine freien Endpunkte"
+
+#: ../../../../build/work/app/help/messages.h:104
+msgid "MSG_PULL_FEW_SECTIONS\tThere are too few sections in this loop."
+msgstr ""
+"MSG_PULL_FEW_SECTIONS\tIn dieser Schleife gibt es zu wenige Teilstücke."
+
+#: ../../../../build/work/app/help/messages.h:105
+msgid "MSG_NO_REDO\tThere is nothing to redo!"
+msgstr "MSG_NO_REDO\tEs gibt nichts wiederherzustellen!"
+
+#: ../../../../build/work/app/help/messages.h:106
+msgid "MSG_NO_UNDO\tThere is nothing to undo!"
+msgstr "MSG_NO_UNDO\tEs gibt nicht rückgängig zu machen!"
+
+#: ../../../../build/work/app/help/messages.h:107
+msgid "MSG_TOOMANYSEGSINGROUP\tToo many segments in Group."
+msgstr "MSG_TOOMANYSEGSINGROUP\tIn der Gruppe sind zu viele Teile."
+
+#: ../../../../build/work/app/help/messages.h:108
+msgid "MSG_CANNOT_CHANGE\tTrack cannot be changed."
+msgstr "MSG_CANNOT_CHANGE\tGleis kann nicht verändert werden."
+
+#: ../../../../build/work/app/help/messages.h:109
+msgid "MSG_POINT_INSIDE_TURNTABLE\tTrack endpoint is within turntable radius."
+msgstr ""
+"MSG_POINT_INSIDE_TURNTABLE\tGleisende befindet sich innerhalb der "
+"Drehscheibe."
+
+#: ../../../../build/work/app/help/messages.h:110
+msgid ""
+"MSG_MOVE_POINTS_AWAY_NO_INTERSECTION\tTrack intersection not possible; move "
+"points away from frog."
+msgstr ""
+"MSG_MOVE_POINTS_AWAY_NO_INTERSECTION\tGleiskreuzung ist nicht möglich, "
+"Weichenzungen müssen länger sein."
+
+#: ../../../../build/work/app/help/messages.h:111
+#, c-format
+msgid ""
+"MSG_TRK_TOO_SHORT\tTrack is too short by N.NNN\t%strack is too short by %0.3f"
+msgstr ""
+"MSG_TRK_TOO_SHORT\tGleis ist um N.NNN zu kurz.\t%sgleis ist um %0.3f zu kurz"
+
+#: ../../../../build/work/app/help/messages.h:112
+#, c-format
+msgid ""
+"MSG_RADIUS_LSS_EASE_MIN\tTrack radius (N.NNN) is smaller than easement "
+"minimum (N.NNN).\tTrack radius (%s) is smaller than easement minimum (%s)."
+msgstr ""
+"MSG_RADIUS_LSS_EASE_MIN\tGleisradius (N.NNN) ist kleiner als der minimale "
+"Übergangsbogen (N.NNN).\tGleisradius (%s) ist kleiner als\n"
+"der Mindest-Übergangsbogen (%s)."
+
+#: ../../../../build/work/app/help/messages.h:113
+msgid ""
+"MSG_CANT_MODIFY_FROZEN_TRK\tTracks in a frozen layer cannot be modified."
+msgstr ""
+"MSG_CANT_MODIFY_FROZEN_TRK\tGleise in einer gesperrten Ebene können nicht "
+"verändert werden."
+
+#: ../../../../build/work/app/help/messages.h:114
+msgid "MSG_CANT_MODIFY_MODULE_TRK\tTracks in a module cannot be modified."
+msgstr ""
+"MSG_CANT_MODIFY_FROZEN_TRK\tGleise in einem Modul können nicht verändert "
+"werden."
+
+#: ../../../../build/work/app/help/messages.h:115
+msgid ""
+"MSG_SEGMENTS_DIFFER\tTurnout definition contains non-track segments...."
+"\tTurnout definition contains non-track segments.\n"
+"\n"
+"Do you want to include them in this update?"
+msgstr ""
+"MSG_SEGMENTS_DIFFER\tDie Weichendefinition enthält nicht nur Gleise....\tDie "
+"Weichendefinition enthält nicht nur Gleise.\n"
+"\n"
+"Sollen diese in der Aktrualisierung aufgenommen werden?"
+
+#: ../../../../build/work/app/help/messages.h:116
+msgid "MSG_TURNTABLE_DIAM_GTR_0\tTurntable diameter must greater than 0."
+msgstr ""
+"MSG_TURNTABLE_DIAM_GTR_0\tDer Durchmesser der Drehscheibe muß größer als 0 "
+"sein."
+
+#: ../../../../build/work/app/help/messages.h:117
+#, c-format
+msgid ""
+"MSG_UNDO_ASSERT\tUndo assertion failure %s:%d...\tUndo assertion failure %s:"
+"%d\n"
+"Val = %ld(%lx)\n"
+"%s\n"
+"Please report this error to the XTrackCAD project development team at "
+"SourceForge."
+msgstr ""
+"MSG_UNDO_ASSERT\tUndo assertion failure %s:%d...\tUndo assertion failure %s:"
+"%d\n"
+"Val = %ld(%lx)\n"
+"%s\n"
+"Bitte diesen Fehler an das XTrackCAD Entwicklungsteam in Sourceforge "
+"berichten."
+
+#: ../../../../build/work/app/help/messages.h:118
+#, c-format
+msgid ""
+"MSG_PROG_CORRUPTED\tCritical file damaged!...\tCritical file damaged!\n"
+"\n"
+"%s is corrupt.\n"
+"\n"
+"Please reinstall software."
+msgstr ""
+"MSG_PROG_CORRUPTED\tEine kritische Datei ist beschädigt...\tEine kritische "
+"Datei ist beschädigt!\n"
+"\n"
+"%s ist beschädigt.\n"
+"\n"
+"Bitte XTrackCAD neu installieren."
+
+#: ../../../../build/work/app/help/messages.h:119
+#, c-format
+msgid ""
+"MSG_ENTERED_STRING_TRUNCATED\tThe entered text is too long. Maximum length "
+"is %d."
+msgstr ""
+"MSG_ENTERED_STRING_TRUNCATED\tDer eingegebene Text ist zu lang. Die maximal "
+"zulässige Länge beträgt %d."
+
+#: ../../../../build/work/app/help/messages.h:120
+#, c-format
+msgid "MSG_PT_IS_NOT_TRK\t[X Y] is not a track\t[%s %s] is not a track."
+msgstr ""
+"MSG_PT_IS_NOT_TRK\tAn [X Y]befindet sich kein Gleis\tAn [%s %s] befindet "
+"sich kein Gleis."
+
+#: ../../../../build/work/app/help/messages.h:121
+msgid ""
+"MSG_BITMAP_SIZE_WARNING\tYou have specified a large Bitmap....\tYou have "
+"specified a large Bitmap.\n"
+"\n"
+"Are you sure you want to continue?"
+msgstr ""
+"MSG_BITMAP_SIZE_WARNING\tDie Bilddatei wird sehr groß.\tDie Bilddatei wird "
+"sehr groß.\n"
+"\n"
+"Wollen Sie den Vorgang fortsetzen?"
+
+#: ../../../../build/work/app/help/messages.h:122
+#, c-format
+msgid "Are you sure you want to delete these %d car(s)?"
+msgstr "Sind Sie sicher, dass Sie diese %d Wagen löschen wollen?"
+
+#: ../../../../build/work/app/help/messages.h:123
+#, c-format
+msgid ""
+"Cannot open %s file:\n"
+"%s:%s"
+msgstr ""
+"%sdatei kann nicht geöffnet werden:\n"
+"%s:%s"
+
+#: ../../../../build/work/app/help/messages.h:124
+#, c-format
+msgid "Cannot create directory: %s - %s"
+msgstr "Kann Verzeichnis %s nicht erstellen %s"
+
+#: ../../../../build/work/app/help/messages.h:125
+#, c-format
+msgid "Cannot open directory: %s"
+msgstr "Verzeichnis %s kann nicht geöffnet werden"
+
+#: ../../../../build/work/app/help/messages.h:126
+#, c-format
+msgid "Path for deletion is not a directory: %s"
+msgstr "Zu löschender Pfad %s ist kein Verzeichnis"
+
+#: ../../../../build/work/app/help/messages.h:127
+#, c-format
+msgid "Open failed for directory: %s"
+msgstr "Fehler beim Öffnen des Verzeichnis %s"
+
+#: ../../../../build/work/app/help/messages.h:128
+#, c-format
+msgid "Can't add directory record %s to zip - %s"
+msgstr "Kann Verzeichniseintrag %s nicht zum Zip hinzufügen - %s"
+
+#: ../../../../build/work/app/help/messages.h:129
+#, c-format
+msgid "Can't add file record %s to zip at %s - %s"
+msgstr "Kann den Dateisatz %s nicht zum Zip bei %s - %s hinzufügen"
+
+#: ../../../../build/work/app/help/messages.h:130
+#, c-format
+msgid "Can't create zip %s - %s"
+msgstr "Zip-Datei %s kann nicht erstellt werden %s"
+
+#: ../../../../build/work/app/help/messages.h:131
+#, c-format
+msgid "Close failure for zip %s - %s"
+msgstr "Fehler beim Schließen der Zip-Datei %s - %s"
+
+#: ../../../../build/work/app/help/messages.h:132
+#, c-format
+msgid "Rename failure for zip from %s to %s - %s"
+msgstr "Umbenennen des Zip von %s in %s - %s fehlgeschlagen"
+
+#: ../../../../build/work/app/help/messages.h:133
+#, c-format
+msgid "Open failure for zip %s - %s"
+msgstr "Öffnungsfehler für Zip %s - %s"
+
+#: ../../../../build/work/app/help/messages.h:134
+#, c-format
+msgid "Index failure for zip %s - %s"
+msgstr "Indexfehler für Zip %s - %s"
+
+#: ../../../../build/work/app/help/messages.h:135
+#, c-format
+msgid "Open read file failure %s %s"
+msgstr "Fehler beim Öffnen der Datei zum Lesen %s %s"
+
+#: ../../../../build/work/app/help/messages.h:136
+#, c-format
+msgid "Open file in zip failure %s %s"
+msgstr "Fehler beim Öfnen der Datei im Zip %s %s"
+
+#: ../../../../build/work/app/help/messages.h:137
+#, c-format
+msgid "Unlink failed for: %s"
+msgstr "Löschen ist fehlgeschlagen bei %s"
+
+#: ../../../../build/work/app/help/messages.h:138
+#, c-format
+msgid "Remove Directory failed for: %s"
+msgstr "Verzeichnis entfernen fehlgeschlagen für: %s"
+
+#: ../../../../build/work/app/help/messages.h:139
+#, c-format
+msgid "Cannot save archive to %s from directory: %s"
+msgstr "Archiv kann nicht in %s aus Verzeichnis %s gespeichert werden"
+
+#: ../../../../build/work/app/help/messages.h:140
+#, c-format
+msgid "Cannot save manifest file to %s"
+msgstr "Manifest kann nicht in %s gespeichert werden"
+
+#: ../../../../build/work/app/help/messages.h:141
+#, c-format
+msgid "Cannot open manifest file %s"
+msgstr "Manifest kann nicht geöffnet werden %s"
+
+#: ../../../../build/work/app/help/messages.h:142
+#, c-format
+msgid "Cannot unpack file: %s for file: %s in directory: %s"
+msgstr "Datei kann nicht entpackt werden: %s für Datei: %s im Verzeichnis: %s"
+
+#: ../../../../build/work/app/help/messages.h:143
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Datei %s kann nicht geöffnet werden"
+
+#: ../../../../build/work/app/help/messages.h:144
+#, c-format
+msgid "Cannot copy file %s into directory %s"
+msgstr "Datei %s kann nicht in das Verzeichnis %s kopiert werden"
+
+#: ../../../../build/work/app/help/messages.h:145
+#, c-format
+msgid "Unrecognized Option: %s"
+msgstr "Unbekannte Option: %s"
+
+#: ../../../../build/work/app/help/messages.h:146
+#, c-format
+msgid ""
+"End-Of-Line is unexpected in a quoted field.\n"
+"%s\n"
+"\n"
+"Do you want to continue reading the file?"
+msgstr ""
+"Unerwartetes Zeilenende in innerhalb von Anführungszeichen.\n"
+"%s\n"
+"\n"
+"Soll das Lesen der Datei fortgesetzt werden?"
+
+#: ../../../../build/work/app/help/messages.h:147
+#, c-format
+msgid ""
+"A comma was expected after this quoted field.\n"
+"%s\n"
+"\n"
+"Do you want to continue reading the file?"
+msgstr ""
+"Erwartetes Komma nach Anführungszeichen fehlt.\n"
+"%s\n"
+"\n"
+"Soll das Laden der Datei fortgesetzt werden?"
+
+#: ../../../../build/work/app/help/messages.h:148
+#, c-format
+msgid ""
+"Error \\\\\"%s\\\\\" occurred while writing %s.\n"
+"Please check disk space and system status."
+msgstr ""
+"Fehler \\\\\"%s\\\\\" aufgetreten beim Speichern von %s.\n"
+"Bitte Plattenplatz und System prüfen."
+
+#: ../../../../build/work/app/help/messages.h:149
+#, c-format
+msgid ""
+"At least one path for the Turnout T%d does not\n"
+"terminate on an endpoint. Such a track cannot be grouped.\n"
+"The track has been unselected."
+msgstr ""
+"Mindestens ein Pfad durch die Weiche T%d endet nicht\n"
+"an einem Endpunkt. Solche Gleise können nicht gruppiert werden.\n"
+"Das Gleis wurde aus der Auswahl entfernt."
+
+#: ../../../../build/work/app/help/messages.h:150
+msgid "inv-pathEndTrk on Path."
+msgstr "inv-pathEndTrk auf Pfad."
+
+#: ../../../../build/work/app/help/messages.h:151
+msgid "inv-pathStartTrk on Path"
+msgstr "inv-pathStartTrk auf Pfad"
+
+#: ../../../../build/work/app/help/messages.h:152
+#, c-format
+msgid "%s:%d- %s"
+msgstr "%s:%d- %s"
+
+#: ../../../../build/work/app/help/messages.h:153
+msgid "pathEndTrk not on Path."
+msgstr "pathEndTrk nicht auf einem Pfad."
+
+#: ../../../../build/work/app/help/messages.h:154
+msgid "pathStartTrk not on Path."
+msgstr "pathStartTrk nicht auf einem Pfad."
+
+#: ../../../../build/work/app/help/messages.h:155
+msgid ""
+"The tracks cannot be connected together.\n"
+"\n"
+"Try changing some tracks for a closer fit\n"
+"or increase the Connection Angle value on\n"
+"the Preferences dialog."
+msgstr ""
+"Die Gleise können nicht verbunden werden.\n"
+"\n"
+"Versuchen Sie einige Gleise enger zusammenzuführen\n"
+"oder ändern Sie den Verbindungswinkel im\n"
+"Einstellungsdialog."
+
+#: ../../../../build/work/app/help/messages.h:156
+msgid ""
+"The tracks cannot be connected together.\n"
+"\n"
+"Try changing some tracks for a closer fit\n"
+"or increase the Connection Distance and\n"
+"Angle values on the Preferences dialog"
+msgstr ""
+"Die Gleise können nicht verbunden werden.\n"
+"\n"
+"Versuchen Sie einige Gleise enger zusammenzuführen\n"
+"oder ändern Sie den Verbindungsabstand und -winkel im\n"
+"Einstellungsdialog"
+
+#: ../../../../build/work/app/help/messages.h:157
+msgid ""
+"The tracks cannot be connected together.\n"
+"\n"
+"Try changing some tracks for a closer fit\n"
+"or increase the Connection Distance"
+msgstr ""
+"Die Gleise können nicht verbunden werden.\n"
+"\n"
+"Versuchen Sie einige Gleise enger zusammenzuführen\n"
+"oder ändern Sie den Verbindungsabstand im Einstellungsdialog"
+
+#: ../../../../build/work/app/help/messages.h:158
+msgid ""
+"The first track for the Align\n"
+"Rotate command must be Selected."
+msgstr ""
+"Das erste Gleis für den \"Ausrichten\n"
+"Drehen\" Befehl muss ausgewählt sein."
+
+#: ../../../../build/work/app/help/messages.h:159
+msgid ""
+"The second track for the Align\n"
+"Rotate command must be Unselected."
+msgstr ""
+"Das zweite Gleis für den \"Ausrichten\n"
+"Drehen\" Befehl darf nicht ausgewählt sein."
+
+#: ../../../../build/work/app/help/messages.h:160
+msgid "Too many selected tracks, drawing tracks as End Point."
+msgstr "Zu viele ausgewählte Gleise, nur die Endpunkte werden angezeigt."
+
+#: ../../../../build/work/app/help/messages.h:161
+msgid "Select an endpoint between two tracks."
+msgstr "Einen Endpunkt zwischen zwei Gleisen auswählen."
+
+#: ../../../../build/work/app/help/messages.h:162
+msgid ""
+"According to values that have been entered the diverging\n"
+"track does not connect with the tangent track. Please\n"
+"check the values entered and try again. Check the angle\n"
+"is entered as a frog number or in degrees as specified\n"
+"by Angle Mode radio buttons."
+msgstr ""
+"Mit den eingegebenen Werten kann das abzweigende\n"
+"Gleis nicht mit dem Stammgleis verbunden werden. Bitte\n"
+"prüfen Sie die eingegebenen Werte und versuchen es nochmals.\n"
+"Prüfen Sie ob der Abzweigwinkel gemäß der der Auswahl richtig als\n"
+"Steigung oder als Winkel eingegeben wurde."
+
+#: ../../../../build/work/app/help/messages.h:163
+msgid "Moved before the end of the turnout"
+msgstr "Vor das Ende des Tunnels verschoben"
+
+#: ../../../../build/work/app/help/messages.h:164
+msgid ""
+"The Coupled Length must be greater than the Car Length,\n"
+"and the Coupler Length must be greater than 0."
+msgstr ""
+"Die gekuppelte Länge muss größer als die Wagenlänge\n"
+"und die Kupplerlänge muss größer als 0 sein."
+
+#: ../../../../build/work/app/help/messages.h:165
+msgid ""
+"The Car Length value must be greater\n"
+"than the Car Width value."
+msgstr ""
+"Die Wagenlänge muss größer als\n"
+"die Wagenbreite sein."
+
+#: ../../../../build/work/app/help/messages.h:166
+msgid ""
+"The specified Index is already in use.\n"
+"The Index will be updated to the next available value."
+msgstr ""
+"Dier angegebene Indexnummer ist bereits vergeben.\n"
+"Die Indexnummer wird auf den nächsten freien Wert aktualisiert."
+
+#: ../../../../build/work/app/help/messages.h:167
+msgid ""
+"You have changed values for this object.\n"
+"\n"
+"Are you sure you want to Close?"
+msgstr ""
+"Sie haben Änderungen an diesem Objekt vorgenommen\n"
+"\n"
+"Wollen Sie diesen Dialog wirklich beenden?"
+
+#: ../../../../build/work/app/help/messages.h:168
+#, c-format
+msgid ""
+"File version %ld is lower than the minimum\n"
+"supported version %d. You need to update your\n"
+"layout file using an older version of %s"
+msgstr ""
+"Dateiversion %ld ist älter als die älteste\n"
+"unterstütze Version %d. Konvertieren Sie\n"
+"die Gleisplandatei mit einer älteren Version von %s"
+
+#: ../../../../build/work/app/help/messages.h:169
+#, c-format
+msgid ""
+"File version %ld is lower than the minimum\n"
+"supported version %d.This parameter file will only work using an older "
+"version of %s"
+msgstr ""
+"Dateiversion %ld ist älter als die älteste\n"
+"unterstütze Version %d. Diese Parameter-Datei wird nur mit einer älteren "
+"Version von %s funktionieren"
+
+#: ../../../../build/work/app/help/messages.h:170
+#, c-format
+msgid ""
+"%s cannot read the demo file:\n"
+"%s"
+msgstr ""
+"%s kann die Demodatei \":\n"
+"%s nicht laden"
+
+#: ../../../../build/work/app/help/messages.h:171
+#, c-format
+msgid "doDemo: bad number (%d)"
+msgstr "doDemo: ungültige Zahl (%d)"
+
+#: ../../../../build/work/app/help/messages.h:172
+msgid "Playback TIMEEND without TIMESTART"
+msgstr "TIMEEND in Wiedergabe ohne TIMESTART"
+
+#: ../../../../build/work/app/help/messages.h:173
+#, c-format
+msgid ""
+"Unknown playback command (%d)\n"
+"%s"
+msgstr ""
+"Unbekannter Wiedergabebefehl (%d)\n"
+"%s"
+
+#: ../../../../build/work/app/help/messages.h:174
+#, c-format
+msgid ""
+"Playback file version %ld is lower than the\n"
+"minimum supported version %d.\n"
+"You need to update your layout file using an\n"
+"older version of %s"
+msgstr ""
+"Wiedergabedatei version %ld ist niedriger als\n"
+"die kleinste unterstützte Version %d.\n"
+"Sie müssen Ihr Layoutdesign mit einer älteren\n"
+"Version von %s aktualisieren"
+
+#: ../../../../build/work/app/help/messages.h:175
+#, c-format
+msgid "Scale index (%d) is not valid"
+msgstr "Maßstab (%d) ist nicht gültig"
+
+#: ../../../../build/work/app/help/messages.h:176
+#, c-format
+msgid ""
+"Scale %s is not valid\n"
+"Please check your %s.xtq file"
+msgstr ""
+"Maßstab %s ist ungültig.\n"
+"Bitte prüfen Sie die Datei %s.xtq"
+
+#: ../../../../build/work/app/help/messages.h:177
+msgid "Cannot extend a helix"
+msgstr "Eine Gleiswendel kann nicht erweitert werden"
+
+#: ../../../../build/work/app/help/messages.h:178
+msgid "Cannot trim a helix"
+msgstr "Eine Gleiswendel kann n icht gekürzt werden"
+
+#: ../../../../build/work/app/help/messages.h:179
+msgid "Ignore further audit notices?"
+msgstr "Weitere Protokollhinweise ignorieren?"
+
+#: ../../../../build/work/app/help/messages.h:180
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: ../../../../build/work/app/help/messages.h:181
+msgid "Audit Abort?"
+msgstr "Protokolierung abbrechen?"
+
+#: ../../../../build/work/app/help/messages.h:182
+msgid "Write Audit File?"
+msgstr "Protokolldatei schreiben?"
+
+#: ../../../../build/work/app/help/messages.h:183
+#, c-format
+msgid "checkTrackLength: Short track length = %0.3f"
+msgstr "checkTrackLength: Kurze Gleislänge = %0.3f"
+
+#: ../../../../build/work/app/help/messages.h:184
+#, c-format
+msgid "checkTrackLength: unknown type: %d"
+msgstr "checkTrackLength: Unbekannter Typ: %d"
+
+#: ../../../../build/work/app/help/messages.h:185
+#, c-format
+msgid "connectTracks: T%d[%d] T%d[%d] d=%0.3f a=%0.3f"
+msgstr "connectTracks: T%d[%d] T%d[%d] d=%0.3f a=%0.3f"
+
+#: ../../../../build/work/app/help/messages.h:186
+#, c-format
+msgid "GetAngleAtPoint: bad type(%d) for T(%d)"
+msgstr "GetAngleAtPoint: Falscher Typ (%d) für T(%d)"
+
+#: ../../../../build/work/app/help/messages.h:187
+#, c-format
+msgid "joinTracks: invalid track type=%d"
+msgstr "joinTracks: Ungültiger Gleistyp=%d"
+
+#: ../../../../build/work/app/help/messages.h:188
+#, c-format
+msgid "resolveIndex: T%d[%d]: T%d doesn\\\\'t exist"
+msgstr "resolveIndex: T%d[%d]: T%d existiert nicht"
+
+#: ../../../../build/work/app/help/messages.h:189
+msgid "Moved beyond the end of the track"
+msgstr "Hinter das Ende des Gleises verschoben"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:9
+msgid "Invokes online help for this dialog"
+msgstr "Aufruf der Kontexthilfe für diesen Dialog"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:10
+msgid "Cancels this command"
+msgstr "Befehl abbrechen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:11
+msgid "Closes the dialog"
+msgstr "Dialogfenster schliessen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:12
+msgid "About program dialog"
+msgstr "Informationen über dieses Programm"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:13
+msgid "Move selected object to top"
+msgstr "Ausgewählte Objekte ganz nach oben verschieben"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:14
+msgid "Raise or lower all selected tracks"
+msgstr "Alle ausgewählten Gleise anheben oder absenken"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:15
+msgid "Turn magnetic snap on or off"
+msgstr "Magnetisches Fangen ein/aus"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:16
+msgid "Move selected object to bottom"
+msgstr "Ausgewähltes Objekt ganz nach unten verschieben"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:17
+msgid "Create a section of track for automation"
+msgstr "Einen Gleisabschnitt für die Automation erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:18
+msgid "Edit a block definition "
+msgstr "Einen Gleisblock bearbeiten "
+
+#: ../../../../build/work/app/bin/bllnhlp.c:19
+msgid "Create a new Car/Loco description"
+msgstr "Erstelle eine neue Wegan/Lok-Beschreibung"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:20
+msgid "Manage your Car and Loco Inventory"
+msgstr "Wagen- und Lokbestand verwalten"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:21
+msgid "Create track circle from center"
+msgstr "Erstelle Gleiskreis um Mittelpunkt"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:22
+msgid "Create fixed radius track circle"
+msgstr "Erstelle Gleiskreis mit festgelegtem Radius"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:23
+msgid "Set Circle Track creation mode"
+msgstr "Wähle Befehl um Gleisbögen zu erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:24
+msgid "Create track circle from tangent"
+msgstr "Erstelle Gleiskreis von Tangente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:25
+msgid "Removes elevation from Selected tracks"
+msgstr "Entfernt die Höhenangaben von den ausgewählten Gleisen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:26
+msgid "Copy objects to clipboard and duplicate them in exactly the same place"
+msgstr ""
+"Objekte in die Zwischenablage kopieren und an genau der gleichen Stelle "
+"duplizieren"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:27
+msgid "Command Options dialog"
+msgstr "Dialog für die Befehlsoptionen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:28
+msgid "Controls colors"
+msgstr "Steuert die Farben"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:29
+msgid "Connect two tracks"
+msgstr "Gleise zusammenfügen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:30
+msgid "Create a control for layout automation"
+msgstr "Erstelle ein Kontrollelement für Automation"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:31
+msgid "Select control element to create"
+msgstr "Neues Kontrollelement festlegen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:32
+msgid "Manage control elements"
+msgstr "Steuerungselemente verwalten"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:33
+msgid "Set Convert mode"
+msgstr "Konvertierungsmodus einstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:34
+msgid "Convert from Fixed Track to Cornu"
+msgstr "Aus festem Gleis in eine Cornu umwandeln"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:35
+msgid "Convert from Cornu and Bezier to Fixed Track"
+msgstr "Von Cornu oder Bezier auf festes Gleis umwandeln"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:36
+msgid "Copy selected objects to clipboard"
+msgstr "Ausgewählte Objekte in die Zwischenablage kopieren"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:37
+msgid "Create Cornu track"
+msgstr "Cornu-Bogen erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:38
+msgid "Create curved track from center"
+msgstr "Erstelle Gleisbogen vom Mittelpunkt"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:39
+msgid "Create curved track from chord"
+msgstr "Erstelle Gleisbogen von einer Sehne"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:40
+msgid "Create curved track from end-point"
+msgstr "Erstelle Gleisbogen von Endpunkt"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:41
+msgid "Create Bezier track"
+msgstr "Erstelle Bezier-Gleis"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:42
+msgid "Set Curve Track creation mode"
+msgstr "Wähle Befehl um Gleiskreis zu erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:43
+msgid "Create curved track from tangent"
+msgstr "Erstelle Gleisbogen von einer Tangente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:44
+msgid "Manipulate Custom designer entries"
+msgstr "Bearbeite die eigenen Designs"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:45
+msgid "Moves selected objects to clipboard"
+msgstr "Ausgewählte Objekte in die Zwischenablage verschieben"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:46
+msgid "Delete objects"
+msgstr "Objekte löschen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:47
+msgid "Playback demos"
+msgstr "Demos abspielen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:48
+msgid "Change Object Properties"
+msgstr "Eigenschaften des Objektes bearbeiten"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:49
+msgid "Change to properties mode"
+msgstr "Zum Modus \"Eigenschaften\""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:50
+msgid "Deselect all selected objects"
+msgstr "Ausgewählte Objekte abwählen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:51
+msgid "Change Display parameters"
+msgstr "Anzeigeeigenschaften ändern"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:52
+msgid "Create benchwork"
+msgstr "Unterbau erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:53
+msgid "Create a box"
+msgstr "Ein Viereck erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:54
+msgid "Set Circle drawing command"
+msgstr "Wähle Befehl um Kreise zu zeichnen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:55
+msgid "Create a circle"
+msgstr "Einen Kreis erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:56
+msgid "Draw a circle line from center"
+msgstr "Zeichne Kreislinie um Mittelpunkt"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:57
+msgid "Draw a fixed radius circle line"
+msgstr "Zeichne einen Kreisbogen mit festen Radius"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:58
+msgid "Draw a circle line from tangent"
+msgstr "Zeichne Kreis von Tangente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:59
+msgid "Set Curve drawing command"
+msgstr "Wähle Befehl um gebogene Linien zu zeichnen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:60
+msgid "Create a curved line"
+msgstr "Eine gebogene Linie erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:61
+msgid "Create a curved line from End"
+msgstr "Gebogene Linie von einem Endpunkt erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:62
+msgid "Create a curved line from center"
+msgstr "Gebogene Linie vom Mittelpunkt aus erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:63
+msgid "Create a curved line from chord"
+msgstr "Gebogene Linie von einer Sehne erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:64
+msgid "Create a curved line from tangent"
+msgstr "Gebogene Linie von einer Tangente erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:65
+msgid "Create a Bezier line"
+msgstr "Eine Bezier-Linie erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:66
+msgid "Create a dimension line"
+msgstr "Zeichne Maßlinie"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:67
+msgid "Create a filled box"
+msgstr "Ein gefülltes Viereck erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:68
+msgid "Create a filled circle"
+msgstr "Einen gefüllten Kreis erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:69
+msgid "Draw a filled circle from center"
+msgstr "Zeichne gefüllten Kreis um Mittelpunkt"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:70
+msgid "Draw a fixed radius filled circle"
+msgstr "Zeichne einen gefüllten Kreis mit festem Radius"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:71
+msgid "Draw a filled circle from tangent"
+msgstr "Zeichne gefüllten Kreis von Tangente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:72
+msgid "Create a polygon"
+msgstr "Ein Polygon erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:73
+msgid "Create a filled polygon"
+msgstr "Ein gefültes Polygon erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:74
+msgid "Create a polyline"
+msgstr "Eine Polylinie erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:75
+msgid "Create a straight line"
+msgstr "Eine gerade Linie erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:76
+msgid "Set Line drawing command"
+msgstr "Wähle Befehl um Linien zu zeichnen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:77
+msgid "Set Shape drawing command"
+msgstr "Wähle Befehl um Formen zu zeichnen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:78
+msgid "Draw table edge"
+msgstr "Tischkante zeichnen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:79
+msgid "Easement menu"
+msgstr "Einstellungen für Übergangsbögen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:81
+msgid "Generate a Parts List of selected objects"
+msgstr "Teileliste aus den ausgewählten Objekten erzeugen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:82
+msgid "Set Import/Export mode"
+msgstr "Import-/Exportmodus auswählen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:83
+msgid "Export a .xti file"
+msgstr "Export in XTI Datei"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:84
+msgid "Export a DXF file"
+msgstr "Export nach DXF"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:86
+msgid "Flip selected objects"
+msgstr "Ausgewählte Objekte spiegeln"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:87
+msgid "Adjust snap grid"
+msgstr "Fangraster anpassen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:88
+msgid "Enable snap grid"
+msgstr "Fangraster aktivieren"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:89
+msgid "Show snap grid"
+msgstr "Fangraster anzeigen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:90
+msgid "Create a structure from a Group of objects"
+msgstr "Objekte zu einer Gruppierung zusammen fassen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:91
+msgid "Create a hand-laid turnout"
+msgstr "Handgemachte Weiche erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:92
+msgid "Create a track helix"
+msgstr "Eine Gleiswendel erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:93
+msgid "Import a .xti file"
+msgstr "Importieren einer .xti-Datei"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:94
+msgid "Import an .xti file as a Module"
+msgstr "Importieren einer .xti-Datei als Modul"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:95
+msgid "Join two tracks"
+msgstr "Zwei Gleise zusammenfügen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:96
+msgid "Join two lines or polylines"
+msgstr "Verbinden von zwei Linien oder Polylinien"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:97
+msgid "Set Join mode"
+msgstr "Verbindungsmodus einstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:98
+msgid "Change Layers"
+msgstr "Ebenen ändern"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:99
+msgid "Selects the current drawing layer"
+msgstr "Auswahl der aktuellen Zeichenebene"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:100
+msgid "Layout parameters"
+msgstr "Gleisplaneinstellungen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:102
+msgid "Show/Hide Map Window"
+msgstr "Übersichtsfenster anzeigen/verbergen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:103
+msgid "Modify or extend a track"
+msgstr "Ändern oder erweitern eines Gleises"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:104
+msgid "Change To modify mode"
+msgstr "Zum Modus \"Auswählen\" wechseln"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:105
+msgid "Move selected objects"
+msgstr "Ausgewählte Objekte verschieben"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:106
+msgid "Move a label"
+msgstr "Beschreibung verschieben"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:107
+msgid "Move selected objects to current layer"
+msgstr "Ausgewählte Objekte auf die aktuelle Ebene verschieben"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:109
+msgid "Print a bitmap"
+msgstr "Drucke in eine Grafikdatei"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:110
+msgid "Pan or zoom the layout"
+msgstr "Ausschnitt ändern oder Zoomen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:111
+msgid "Change to zoom/pan mode"
+msgstr "Zum Modus Zoom/Ausschnitt wechseln"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:112
+msgid "Create a parallel track"
+msgstr "Ein Parallelgleis erzeugen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:113
+msgid "Create a parallel line"
+msgstr "Eine Parallele erzeugen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:114
+msgid "Set Parallel mode"
+msgstr "Parallelen-Modus einstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:115
+msgid "Register"
+msgstr "Registrierem"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:116
+msgid "Copy objects from clipboard"
+msgstr "Objekte von der Zwischenablage kopieren"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:117
+msgid "Perferences dialog"
+msgstr "Einstellungen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:118
+msgid "Display prices of turnouts, sectional tracks and structures"
+msgstr "Die Preise von Weichen, Gleisen und Gebäuden anzeigen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:119
+msgid "Print the layout"
+msgstr "Gleisplan ausdrucken"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:120
+msgid "Loads and unloads parameter files into/from toolbar"
+msgstr "Parameterdateien zur Werkzeugleiste zufügen oder daraus entfernen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:121
+msgid "Elevation Profile Command"
+msgstr "Höhenprofil bearbeiten"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:123
+msgid "Command recorder"
+msgstr "Befehlsaufzeichnung"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:125
+msgid "Update selected Turnout and Structure definitions"
+msgstr "Die ausgewählten Gebäude und Weichen aktualisieren"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:126
+msgid "Rescale selected objects"
+msgstr "Ausgewählte Objekte skalieren"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:127
+msgid "Rotate selected object(s)"
+msgstr "Ausgewählte Objekte drehen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:128
+msgid "Show a ruler"
+msgstr "Lineal anzeigen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:129
+msgid "Select objects"
+msgstr "Objekte auswählen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:130
+msgid "Change To Select Mode"
+msgstr "Zum Modus \"Auswählen\" wechseln"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:131
+msgid "Selects all objects on the layout"
+msgstr "Alle Objekte des Gleisplan auswählen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:132
+msgid "Selects all objects in the current Layer"
+msgstr "Alle Objekte der aktuellen Ebene auswählen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:133
+msgid "Invert current selection"
+msgstr "Auswahl umkehren"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:134
+msgid "Split a track"
+msgstr "Gleis trennen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:135
+msgid "Select stranded (unconnected) track pieces"
+msgstr "Vereinzelte (nicht verbundene) Gleisstücke auswählen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:136
+msgid "Create a sensor (ie. a occupancy detector or a toggle switch)"
+msgstr ""
+"Erstelle einen Sensor (z.B. eine Besetzterkennung oder einen Umschalter)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:137
+msgid "Create a signal for train control"
+msgstr "Ein Signal für die Zugsteuerung erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:138
+msgid "Choose which commands are sticky"
+msgstr "Auswahl dauerhafter Befehle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:139
+msgid "Create straight track"
+msgstr "Gerades Gleis erzeugen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:140
+msgid "Place a structure on the layout"
+msgstr "Ein Gebäude auf den Gleisplan setzen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:141
+msgid "Create a switchmotor for turnout control"
+msgstr "Einen Motor für die Weichensteuerung erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:142
+msgid "Edit a switchmotor definition"
+msgstr "Einen Weichenantrieb bearbeiten"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:143
+msgid "Enter text on the layout"
+msgstr "Text auf den Gleisplan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:144
+#: ../../../../build/work/app/bin/bllnhlp.c:531
+msgid "Controls the size of the entered text"
+msgstr "Auswahl der Schriftgröße für einzugebenden Text"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:145
+msgid "Plain Text"
+msgstr "Einfacher Text"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:146
+msgid "Tip of the Day window"
+msgstr "Tipp des Tages"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:147
+msgid "Run Trains"
+msgstr "Zugbetrieb"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:148
+msgid "Change To Run Trains Mode"
+msgstr "Zum Modus \"Züge fahren\" wechseln"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:149
+msgid "Pause/Resume Trains"
+msgstr "Zugbetrieb pausieren/fortsetzen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:150
+msgid "Place a car on the layout"
+msgstr "Einen Wagen auf den Gleisplan setzen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:151
+msgid "Exit Trains"
+msgstr "Zugbetrieb beenden"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:152
+msgid "Hide/Unhide a track"
+msgstr "Verbergen/Zeigen eines Gleises"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:153
+msgid "Make/Unmake a track a bridge"
+msgstr "Ein Gleis zu einer Brücke machen/aufheben"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:154
+msgid "Place a turnout or sectional track"
+msgstr "Weiche oder Gleis platzieren"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:155
+msgid "Create a new turnout definition"
+msgstr "Erstelle eine neue Weichendefinition"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:156
+msgid "Place a turntable"
+msgstr "Eine Drehscheibe setzen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:157
+msgid "Updates old source files with 3 part titles"
+msgstr "Aktualisiere alte Dateien mit dreiteiligen Titeln"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:159
+msgid "Ungroup objects"
+msgstr "Gruppierung aufheben"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:160
+msgid "Draw tracks with thin lines"
+msgstr "Gleise mit dünnen Linien zeichnen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:161
+msgid "Draw tracks with medium lines"
+msgstr "Gleise mit mittleren Linien zeichnen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:162
+msgid "Draw tracks with thick lines"
+msgstr "Gleise mit dicken Linien zeichnen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:163
+msgid "Change drawing scale"
+msgstr "Zeichenmaßstab auswählen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:164
+#: ../../../../build/work/app/bin/bllnhlp.c:176
+msgid "Zoom in"
+msgstr "Zoom größer"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:165
+#: ../../../../build/work/app/bin/bllnhlp.c:177
+msgid "Zoom out"
+msgstr "Zoom kleiner"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:166
+msgid "File Menu"
+msgstr "Dateimenue"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:167
+msgid "Save layout"
+msgstr "Gleisplan speichern"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:168
+msgid "Save layout under a new name "
+msgstr "Gleisplan mit neuem Namen speichern "
+
+#: ../../../../build/work/app/bin/bllnhlp.c:169
+msgid "New layout"
+msgstr "Neuer Gleisplan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:170
+msgid "Generate parts list"
+msgstr "Teileliste erzeugen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:171
+msgid "Load a layout"
+msgstr "Gleisplan laden"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:172
+msgid "Exit the program"
+msgstr "Programm beenden"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:173
+msgid "Revert to last saved state of layout plan"
+msgstr "Zum letzten gespeicherten Stand zurücksetzen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:174
+msgid "Edit menu"
+msgstr "Bearbeiten Menu"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:175
+msgid "Redraw layout"
+msgstr "Gleisplan neu zeichnen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:178
+#: ../../../../build/work/app/bin/bllnhlp.c:181
+msgid "Tools menu"
+msgstr "Werkzeug Menu"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:179
+msgid "View menu"
+msgstr "Menü für Anzeigefuinktionen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:180
+msgid "Toolbar configuration"
+msgstr "Konfiguration der Werkzeugleiste"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:182
+msgid "Options menu"
+msgstr "Optionen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:183
+msgid "Playback/Record commands"
+msgstr "Aufzeichnungs- und Wiedergabebefehle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:184
+msgid "Window menu"
+msgstr "Fenstermenu"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:185
+msgid "Help menu"
+msgstr "Menu für Hilfe"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:186
+msgid "Recent error messages and explanations"
+msgstr "Aktuellste Fehlermeldungen und Erläuterungen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:187
+msgid "Move Hot Bar left"
+msgstr "Schnellauswahl nach links bewegen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:188
+msgid "Move Hot Bar right"
+msgstr "Schnellauswahl nach rechts bewegen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:189
+msgid "Total track count"
+msgstr "Gesamtzahl der Gleise"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:190
+msgid "X Position of cursor"
+msgstr "X Position des Zeiger"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:191
+msgid "Y Position of cursor"
+msgstr "Y Position des Zeiger"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:192
+msgid "Drawing scale"
+msgstr "Zeichnungsmaßstab"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:193
+msgid "Message and status line"
+msgstr "Nachrichten- und Statuszeile"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:194
+#: ../../../../build/work/app/bin/bllnhlp.c:195
+msgid "Main layout canvas"
+msgstr "Hauptzeichenbereich"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:196
+msgid "Main drawing canvas"
+msgstr "Hauptzeichenbereich"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:197
+msgid "Command buttons"
+msgstr "Befehle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:198
+msgid "Menus"
+msgstr "Menues"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:199
+msgid "Tile, Filename and Window Manager buttons"
+msgstr "Tile, Filename and Window Manager buttons"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:200
+msgid "Turnout and Structure Hot Bar"
+msgstr "Weichen und Gebäude Auswahlleiste"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:201
+msgid "Active layer list and layer buttons"
+msgstr "Liste der aktiven Ebene und Ebenen-Knöpfe"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:202
+msgid "Map window"
+msgstr "Kartenfenster"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:203
+msgid "This is the portion of the layout shown in the Main Window canvas"
+msgstr "Dieser Teil der Gleisplans wird auf der Hauptzeichenfläche angezeigt"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:204
+msgid "Raise or Lower all Selected Track"
+msgstr "Anheben oder Absenken der ausgewählten Gleise"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:205
+msgid "Name of block"
+msgstr "Name des Gleisblocks"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:206
+msgid "Script that the block will run"
+msgstr "Auszuführendes Skript"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:207
+msgid "List of tracks in the Block"
+msgstr "Liste der Gleise in einem Gleisblock"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:208
+msgid "Add or Update car object"
+msgstr "Einen Wagen zufügen oder aktualisieren"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:209
+msgid "Manufacturer name"
+msgstr "Name des Herstellers"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:212
+msgid "Is the Car a Locomotive?"
+msgstr "Ist der Wagen eine Lokomotive?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:213
+msgid "Part Number and Description"
+msgstr "Bestellnr. und Beschreibung"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:214
+msgid "Manufacturer Part Number"
+msgstr "Bestellnummer des Herstellers"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:215
+msgid "Use the Selected figure as the car image"
+msgstr "Benutze die ausgewählte Zeichnung als Wagenabbild"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:216
+msgid "Use the default figure as the car image"
+msgstr "Benutze die Standardzeichnung als Wagenabbild"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:217
+msgid "Optional description of the Car Part"
+msgstr "Optionale Beschreibung des Wagenmuster"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:218
+msgid "Flip car image"
+msgstr "Wagenabbild spiegeln"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:219
+msgid "Display Car Item information or reporting marks and dimensions"
+msgstr "Informationen über den Wagen oder Kennzeichen und Abmessungen anzeigen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:220
+msgid "Full Roadname"
+msgstr "Bahngesellschaft"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:221
+#: ../../../../build/work/app/bin/bllnhlp.c:222
+msgid "Car Type"
+msgstr "Wagenart"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:223
+msgid "Reporting Marks (Roadname abbreviation)"
+msgstr "Wagenkennzeichen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:224
+#: ../../../../build/work/app/bin/bllnhlp.c:411
+msgid "Car Number"
+msgstr "Wagennummer"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:225
+msgid "Car body Color"
+msgstr "Wagenfarbe"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:226
+msgid "Length of car body"
+msgstr "Länge des Aufbau"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:227
+msgid "Width of car body"
+msgstr "Breite des Aufbau"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:228
+msgid "Distance between Trucks "
+msgstr "Abstand zwischen den Drehgestellen "
+
+#: ../../../../build/work/app/bin/bllnhlp.c:229
+msgid "Distance Trucks are displaced along Car"
+msgstr "Abstand der Drehgestelle vom Wagenende"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:230
+msgid "Coupler are mounted on body or truck"
+msgstr "Kupplungen sind am Wagenaufbau oder an den Drehgestellen befestigt"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:231
+msgid "Overall Coupled Length"
+msgstr "Gekuppelte Gesamtlänge"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:232
+msgid "Coupler Length from end of car"
+msgstr "Kupplungslänge vom Ende des Wagen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:233
+msgid "Diagram of Car"
+msgstr "Diagram der Lokomotive oder Wagens"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:234
+msgid "Item Index Number"
+msgstr "Laufende Nummer"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:235
+msgid "Original Purchase Price"
+msgstr "Ursprünglicher Kaufpreis"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:237
+msgid "Condition of car"
+msgstr "Zusatnd des Wagen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:238
+msgid "Original Purchase Date"
+msgstr "Ursprüngliches Kaufdatum"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:239
+msgid "Last Service Date"
+msgstr "Letztes Servicedatum"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:240
+msgid "Number of identical cars to be entered"
+msgstr "Anzahl der zusätzlichen, gleichartigen Wagen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:241
+msgid "Do all the cars have the same Number?"
+msgstr "Haben alle Wagen dieselbe Nummer?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:242
+msgid "Notes about the car"
+msgstr "Anmerkungen zu dem Wagen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:243
+#: ../../../../build/work/app/bin/bllnhlp.c:244
+msgid "Create a new car Part or Prototype definitions"
+msgstr "Einen neuen Lokomotiven oder Wagen Prototyp erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:245
+msgid "Finds the selected Car Item on the layout"
+msgstr "Suche den ausgewählten Wagen auf der Anlage"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:246
+#: ../../../../build/work/app/bin/bllnhlp.c:247
+#: ../../../../build/work/app/bin/bllnhlp.c:248
+#: ../../../../build/work/app/bin/bllnhlp.c:249
+msgid "Sort the Item list"
+msgstr "Sortierung auswählen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:251
+msgid "Edit the selected Car Item"
+msgstr "Markierte Lokomotive oder Wagen bearbeiten"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:252
+msgid "Add a new Car Item"
+msgstr "Neuen Wagen hinzufügen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:253
+msgid "Delete the selected Car Items"
+msgstr "Markierte Lokomotiven oder Wagen löschen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:254
+msgid "Import a Car Item .csv file"
+msgstr "Lokomotiven oder Wagen aus einer .csv Datei importieren"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:255
+msgid "Export a Car Item .csv file"
+msgstr "Exportieren der markierten Lokomotiven oder Wagen in eine .csv Datei"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:256
+msgid "Create a text list of the Car Items"
+msgstr "Textdatei der Lokomotiven oder Wagen erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:257
+msgid "Specifies the radius of the circle track"
+msgstr "Gibt den Radius des Gleiskreises an"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:258
+msgid "Default command is Describe or Select"
+msgstr "Standardbefehl ist Eigenschaften oder Auswählen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:259
+msgid "Action to invoke on Right-Click"
+msgstr "Festlegen welche Aktion beim Rechtsklick erfolgen soll"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:260
+msgid ""
+"Replace current selection with clicked object or add clicked object to "
+"selection"
+msgstr ""
+"Aktuelle Auswahl durch angeklicktes Objekt ersetzen oder angeklicktes Objekt "
+"zur Auswahl hinzufügen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:261
+msgid "Clicking into an empty area clears selection if select mode is <add>"
+msgstr ""
+"Ein Klick in einen leeren Bereich löscht die Auswahl, wenn der Auswahlmodus "
+"<add> ist"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:263
+msgid "The list of control elements"
+msgstr "Die Liste der Steuerungselemente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:264
+msgid "Edit the element"
+msgstr "Das Element bearbeiten"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:265
+msgid "Delete the element"
+msgstr "Das Element löschen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:266
+msgid "Contents Label for new Parameter file"
+msgstr "Inhaltsbeschreibung für neue Parameterdatei"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:267
+msgid "List of custom designed turnouts and structures"
+msgstr "Liste der individual entwickelten Weichen und Strukturen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:268
+msgid "Invoke designer editor"
+msgstr "Vorbild bearbeiten"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:269
+msgid "Remove selected entries"
+msgstr "Ausgewählte Einträge löschen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:270
+msgid "Copy selected entries to Parameter File"
+msgstr "Ausgewählte Einträge in eine Parameterdatei verschieben"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:271
+msgid "Create a New part or prototype"
+msgstr "Neues Teil oder Prototype erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:272
+msgid "Update custom file and close"
+msgstr "Anpassungs Verwaltung speichern und schliessen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:273
+msgid "Executes the next step of the demo"
+msgstr "Nächsten Schritt der momentanen Demo anzeigen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:274
+msgid "Skip to next demo"
+msgstr "Zum nächstes Demo Kapitel springen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:275
+msgid "Stops the demonstration and returns you to XTrackCAD"
+msgstr "Demonstrations Modus verlassen und zu XTrackCAD zurückkehren"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:276
+msgid "Select speed of Playback"
+msgstr "Wiedergabegeschwindigkeit auswählen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:277
+msgid "This is where comments about the demo are displayed"
+msgstr "Kommentar zu Demos anzeigen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:314
+msgid "Move the Main canvas if you drag near the edge"
+msgstr ""
+"Bewegen den Hauptzeichenbereich wenn in der nähe der Ecken gezogen wird"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:315
+msgid "Color tracks by layer or individually"
+msgstr "Gleise nach Ebene oder einzeln einfärben"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:316
+msgid "Color draw objects by layer or individually"
+msgstr "Objekte nach Ebene oder einzeln einfärben"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:317
+msgid "Controls the drawing of hidden tracks"
+msgstr "Steuert das Zeichnen von versteckten Gleisen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:318
+msgid "Controls the drawing of End-Points"
+msgstr "Steuert das Zeichnen von Endpunkten"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:319
+msgid "How to draw track ties"
+msgstr "Steuert das Zeichnen der Schwellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:320
+msgid "Show crosshair at center of curves"
+msgstr "Mittelpunkt als Fadenkreuz anzeigen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:321
+msgid "Drawing scale when to draw tracks with 2 rails"
+msgstr "Mindestmaßstab für die Anzeige von Gleisen mit zwei Schienen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:322
+msgid "Drawing scale of the map window"
+msgstr "Zeichenmaßstab des Kartenfenster"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:323
+msgid "Whether the main layout is updated while dragging on the Map"
+msgstr "Aktualisierung des Gleisplans wenn in der Karte gezogen wird"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:324
+msgid "Enable labels for Turnouts, Flextrack Lengths and Elevations"
+msgstr "Zeige Beschriftungen für Weichen, Flexgleise und Steigungen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:325
+msgid "When to label Turnout, Flextrack Lengths and Elevations"
+msgstr "Wann sollen Weichen, Gleislängen oder Höhenmaß beschriftet werden"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:326
+msgid "Font size for labels on layout"
+msgstr "Zeichengrösse für Beschriftungen im Gleisplan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:327
+msgid "Label elements on the Hot Bar"
+msgstr "Beschriftungselemente des Teilekatalogs"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:328
+msgid "Label elements on layout"
+msgstr "Beschriftungselemente im Gleisplan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:329
+msgid "Label elements for lists"
+msgstr "Beschriftungselemente in den Listen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:330
+msgid "How to group cars on the Train Hot Bar"
+msgstr "Gruppierung der Waggen im Teilekatalog"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:331
+msgid "Delay (in mS) between updating train movements"
+msgstr "Aktualisierungsintervall (in ms) der Zugbewegungen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:332
+msgid "Don't show trains in tunnels when tunnels are hidden"
+msgstr "Zeige keine Züge in Tunnels wenn Tunnel verborgen sind"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:333
+msgid "Display unconnected endpoints of track with special marks"
+msgstr "Unverbundene Endpunkte hervorheben"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:334
+msgid "Whether the Main Drawing Area shows as much of the room as possible"
+msgstr ""
+"Soll der Zeichenbereich den größtmöglichen Ausschnitt des Raums anzeigen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:336
+msgid "Width of the lines"
+msgstr "Breite der Linien"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:337
+msgid "Color of the lines"
+msgstr "Farbe der Linien"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:338
+msgid "List of types of Lumber"
+msgstr "Liste der Leistenmaße"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:339
+msgid "Color of Benchwork"
+msgstr "Farbe des Unterbau"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:340
+msgid "Orientation of Benchwork"
+msgstr "Ausrichtung des Unterbau"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:341
+msgid "Size of Dimension Arrows"
+msgstr "Breite der Größenpfeile"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:342
+msgid "This controls the sharpness of the easement curve"
+msgstr "Steuert die Größe des Übergangsradius"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:343
+msgid "Minimum radius"
+msgstr "Mindestgleisradius"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:344
+msgid "Maximum offset"
+msgstr "Maximaler Abstand"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:345
+msgid "Easement length"
+msgstr "Länge des Übergangsbogen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:346
+msgid ""
+"These radio buttons are a short-cut for Values of 0.0, 0.5, 1.0 and 2.0. "
+"None turns Easements off"
+msgstr ""
+"Standardwerte 0,0, 0,5, 1,0 und 2,0 können schnell gesetzt werden. "
+"Übergangsbögen können hier nicht ausgeschaltet werden"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:347
+msgid "Complete easement selection"
+msgstr "Auswahl der Übergangsbögen vervollständigen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:348
+msgid "Type of elevation"
+msgstr "Typ des Höhendpunktes"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:349
+msgid "Height of End Point"
+msgstr "Höhe des Endpunkt"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:350
+msgid "Compute elevation based on neighbors"
+msgstr "Berechne das Höhenmaß gemäß der benachbarten Gleise"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:351
+msgid "Compute grade based on neighbors"
+msgstr "Berechne Steigung gemäß der benachbarten Gleise"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:352
+msgid "Specify a name for an End-Point"
+msgstr "Einen Namen für einen Endpunkt vergeben"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:354
+msgid "Print parts list"
+msgstr "Stückliste drucken"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:355
+#: ../../../../build/work/app/bin/bllnhlp.c:466
+#: ../../../../build/work/app/bin/bllnhlp.c:575
+msgid "Invoke the Print Setup dialog"
+msgstr "Starte den Druckerkonfigursationsdialog"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:356
+msgid "Save parts list to file"
+msgstr "Stückliste in Datei speichern"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:357
+msgid "This is the list of parts for the layout"
+msgstr "Dies ist die Teileliste für diesen Gleisplan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:358
+msgid "Enable prices on the Parts List"
+msgstr "Preise in der Teileliste anzeigen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:359
+#: ../../../../build/work/app/bin/bllnhlp.c:362
+msgid "Spacing between major grid lines"
+msgstr "Abstand der Haupt Raster Linien einstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:360
+#: ../../../../build/work/app/bin/bllnhlp.c:363
+msgid "Allows the spacing to be subdivided"
+msgstr "Stellt die Unterteilung von Zwischenmarkierungen ein"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:361
+#: ../../../../build/work/app/bin/bllnhlp.c:364
+msgid "Specifies if positions are snaped in this direction"
+msgstr "Einschalten des Fangrasters für diese Ausrichtung"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:365
+#: ../../../../build/work/app/bin/bllnhlp.c:366
+#: ../../../../build/work/app/bin/bllnhlp.c:367
+msgid "Shows the origin and angle of the grid"
+msgstr "Gibt den Ausgangspunkt und Winkel des Rasters an"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:368
+msgid "Specifies if the grid is shown"
+msgstr "Anzeige des Rasters an oder aus"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:369
+msgid "Completes the grid specification"
+msgstr "Raster Anpassung speichern und beenden"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:373
+msgid "Number of segments in Group"
+msgstr "Anzahl der Segmente in der Gruppe"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:374
+msgid "Replace the Selected object with the new definition?"
+msgstr "Soll das ausgewählte Objekt durch die neue Definition ersetzt werden?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:375
+msgid "Creates a new Structure (or Turnout)"
+msgstr "Ein neues Gebäude (oder eine Weiche) erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:376
+msgid "Elevation difference of Helix End-Points"
+msgstr "Höhenunterschied zwischen den Endpunkten der Gleiswendel"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:377
+msgid "Helix Radius"
+msgstr "Radius der Gleiswendel"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:378
+msgid "Number of turns in the helix"
+msgstr "Anzahl der Umdrehungen in der Wendel"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:379
+msgid "Angle betweek helix entrance and exit"
+msgstr "Winkel zwischen Zu- und Ausgang der Wendel"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:380
+msgid "Grade in helix"
+msgstr "Steigung in der Wendel"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:381
+msgid "Separation between helix layers"
+msgstr "Abstand zwischen den Ebenen der Wendel"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:382
+msgid "Desired curve radius between straight tracks"
+msgstr "Gewünschter Radius zwischen geraden Gleisen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:383
+msgid "Layer list"
+msgstr "Liste der Ebenen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:384
+msgid "Layer Name"
+msgstr "Name der Ebene"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:385
+msgid "Color of layer"
+msgstr "Farbe der Ebene"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:386
+msgid "Layer is drawn on Main window"
+msgstr "Ebene im Hauptfenster darstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:387
+msgid "Layer cannot be changed"
+msgstr "Ebene schützen - kann nicht mehr geändert werden"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:388
+msgid "Layer is drawn on Map window"
+msgstr "Ebene im Kartenfenster anzeigen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:389
+msgid "Number of layer buttons to show"
+msgstr "Anzahl der Ebenenknöpfe"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:390
+msgid "Number of objects in this layer"
+msgstr "Anzahl von Objekten in dieser Ebene"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:392
+msgid "Load layer configuration from default"
+msgstr "Persönliche Einstellungen für Ebenen laden"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:393
+msgid "Save current layer configuration as default"
+msgstr "Momentane Einstellung für Ebenen speichern"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:394
+msgid "Overwrite layer configuration with system default values"
+msgstr "Einstellung für Ebenen auf Systemvorgabe zurück setzen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:395
+#: ../../../../build/work/app/bin/bllnhlp.c:396
+msgid "Specifies the size of the room (in inches or centimeters)"
+msgstr "Größenangabe des Raums (in Zentimeter oder Inch)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:397
+msgid "Specifies the layout Title that will appear on printouts"
+msgstr "Angabe eines Layout Titels welcher auf Ausdrücken erscheint"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:398
+msgid "Specifies the layout Subtitle that will appear on printouts"
+msgstr "Angabe eines Layout Untertitels welcher auf Ausdrücken erscheint"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:399
+msgid "Specifies the Modelling Scale"
+msgstr "Angabe des Modellbahnmaßstabs"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:400
+msgid "Specifies the rail gauge, ie. the distance between the rails"
+msgstr "Angabe der Spurweite, d.h. der Abstand zwischen den Schienen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:401
+msgid ""
+"Specifies minimum track radius (in inches or centimeters). Tracks with a "
+"smaller radius are considered exceptional."
+msgstr ""
+"Angabe des minimalen Gleisradius (in Zentimeter oder Inch). Gleise mit "
+"geringerem Radius werden als Ausnahme angesehen."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:402
+msgid ""
+"Specifies maximum track elevation expressed as a percent (%). Tracks with a "
+"larger elevation are considered exceptional."
+msgstr ""
+"Angabe der maximalen Gleissteigung in %. Gleise mit größerer Steigung werden "
+"als Ausnahme angesehen."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:403
+msgid "Select the background image"
+msgstr "Das Hintergrundbild auswählen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:404
+msgid "Remove the background image"
+msgstr "Das Hintergrundbild entfernen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:405
+msgid "Specifies the x offset of the bottom left of the background image"
+msgstr ""
+"Bestimmt den Abstand des Hintergrundbildes von der linken unteren Ecke in "
+"horizontaler Richtung"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:406
+msgid "Specifies the y offset of the bottom left of the background image"
+msgstr ""
+"Bestimmt den Abstand des Hintergrundbildes von der linken unteren Ecke in "
+"vertikaler Richtung"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:407
+msgid ""
+"Specifies how large the bottom edge of the background image should be in "
+"model units"
+msgstr ""
+"Gibt an, wie groß die Unterkante des Hintergrundbildes in Modelleinheiten "
+"sein soll"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:408
+msgid ""
+"Specifies the screening of the background image from 0 (none) to 100% "
+"(vanishes)"
+msgstr ""
+"Bestimmt die Transparenz des Hintergrundbildes von 0 (keine) bis 100% "
+"(verschwindet)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:409
+msgid "Specifies the rotation angle of the background image in degrees"
+msgstr "Bestimmt den Winkel des Hintergrndbildes in Grad"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:412
+msgid ""
+"This is the body of the Note. To change this select Modify from the File "
+"Menu"
+msgstr ""
+"Dies ist der Notiztext. Um diesen zu ändern, wählen Sie bitte 'Ändern' aus "
+"dem 'Datei'-Menu"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:414
+msgid "Specifies number of pixels per inch (or centimeter)"
+msgstr "Gibt die Anzahl der Bildpunkte pro Inch (oder Zentimeter) an"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:416
+msgid ""
+"Specifies whether Layout Titles, Borders or Track Centerlines are printed on "
+"the BitMap"
+msgstr ""
+"Gibt an, ob Anlagentitel, Begrenzungen und Gleismitten in der Bilddatei "
+"ausgegeben werden sollen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:417
+msgid ""
+"Specifies the separation between the original track and the parallel track/"
+"line"
+msgstr ""
+"Gibt den Abstand zwischen dem vorhandenen und dem neuen parallelen Gleis "
+"oder Linie an"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:418
+msgid ""
+"Specifies the a factor that increases the seperation as the radius of the "
+"original track reduces. 0.0 means no increase."
+msgstr ""
+"Gibt das Ausmaß der Zunahme des Abstands, basierend auf dem Radius an. Null "
+"ist keine Zunahme."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:419
+msgid "Enter your name as specified in the XTrackCAD Registration Notice"
+msgstr "Enter your name as specified in the XTrackCAD Registration Notice"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:420
+msgid "Enter the key value as specified in the XTrackCAD Registration Notice"
+msgstr "Enter the key value as specified in the XTrackCAD Registration Notice"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:421
+msgid "Validates the name and key. Terminates the registration command"
+msgstr "Validates the name and key. Terminates the registration command"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:422
+msgid "0ᅵ is up or to the right"
+msgstr "0° ist nach oben oder nach rechts"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:423
+msgid "Choose english (inches) or metric (centimeters)"
+msgstr "Einheiten auswählen: Englisch für Inches oder Metrisch für Zentimeter"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:424
+msgid "How to display length measurements"
+msgstr "Längenformat auswählen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:425
+msgid "Do not create tracks to be shorter than this value"
+msgstr "Keine Gleise kürzer als diese Mindestlänge erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:426
+msgid "Maximum distance between connected end points"
+msgstr "Maximale Distanz zwischen verbundenen Endpunkten"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:427
+msgid "Minimum angle between connected End-Points"
+msgstr "Kleinster Winkel zwischen verbundenen Endpunkten"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:428
+msgid "Specifies the minimum angle between tracks connected to a turntable"
+msgstr "Kleinster Winkel beim Anschluss von Gleisen an eine Drehscheibe"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:429
+msgid "Trains will crash above this speed"
+msgstr "Züge entgleisen oberhalb dieser Geschwindigkeit"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:430
+msgid "Enable/Disable balloon popup help windows"
+msgstr "Ein-/Ausschalten von Erklärungshilfen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:431
+msgid "Enable/Disable show of flextrack on hotbar"
+msgstr "Anzeige von Flexgleis in der Auswahlleiste ein- und ausschalten"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:432
+msgid "How far you can move the mouse before its considered a drag"
+msgstr "Wie weit kann die Maus bewegt werden, bevor abreißen angenommen wird"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:433
+msgid "How long you can hold a mouse button down before its considered a drag"
+msgstr ""
+"Wie lange kann ein Mausknopf gedrückt bleiben, bevor abreißen angenommen wird"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:434
+msgid "Minimum distance (in pixels) between grid lines/ticks"
+msgstr "Mindestabstand (in Pixeln) zwischen Raster und Linien"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:435
+msgid ""
+"Specifies the Check Point frequency; number of modifications made since the "
+"last checkpoint."
+msgstr ""
+"Anzahl von Änderungen bevor eine neue automatische Sicherungskopie erstellt "
+"wird."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:436
+msgid "Specifies the number of checkpoints after save before auto-saving."
+msgstr ""
+"Gibt die Anzahl der Sicherungskopien vor einer automatischen Sicherung an."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:437
+msgid "Resume work on last layout or start with new layout"
+msgstr "Letzten Gleisplan bearbeiten, oder einen neuen Gleisplan erstellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:439
+msgid "Updated cost of current selected item"
+msgstr "Aktualisierte Kosten für den ausgewählten Gegenstand"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:441
+msgid "Selection list for prices"
+msgstr "Auswahlliste für Preise"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:442
+#: ../../../../build/work/app/bin/bllnhlp.c:443
+#: ../../../../build/work/app/bin/bllnhlp.c:444
+msgid "Price of specified length of flex-track"
+msgstr "Preis für die angegebene Länge des Flex-Gleises"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:446
+msgid "Controls the printing of a centerline of track cmdPrint"
+msgstr "Steuert das Zeichnen der Mittellinie von Gleisen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:447
+msgid "Controls the reduction (scale) of the printout"
+msgstr "Einstellung des Verkleinerungsmaßstabs für den Ausdruck"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:448
+msgid "Scaled page width (Scale times physical page width)"
+msgstr "Seitenbreite angeben (Maßstab mal physikalischer Papierbreite)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:449
+msgid "Sets page size to the maximum (based on scale and physical page size)"
+msgstr ""
+"Setzt die Papiergröße auf das Maximum (basierend auf Maßstab und "
+"physikalischer Papiergröße)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:450
+msgid "Scaled page height (Scale times physical page height)"
+msgstr "Seitenhöhe angeben (Maßstab mal physikalischer Papierhöhe)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:451
+msgid "Sets scale, origin and angle for a one page printout of the layout"
+msgstr ""
+"Stellt Maßstab, Ausrichtung und Winkel für den momentan angezeigten "
+"Gleisplan ein"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:452
+msgid "Print page in Portrait or Landscape format"
+msgstr "Drucke im Hochformat oder Querformat"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:453
+msgid "Order of printing pages"
+msgstr "Druckreihenfolge"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:454
+msgid "Print Title, Date, Author and other information at bottom of page?"
+msgstr "Drucke Titel, Datum Autor und andere Informationen am Ende der Seite?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:455
+msgid "Ignore unprintable page margins?"
+msgstr "Nicht druckbare Seitenränder ignorieren?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:456
+msgid "Print Registration Marks at 1:1?"
+msgstr "Drucke Positionierungshilfen im 1:1 Maßstab?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:457
+msgid "Print Snap Grid?"
+msgstr "Fangraster drucken?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:458
+msgid "Print Rulers on all page edges?"
+msgstr "Lineale an allen Seitenecken drucken?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:459
+msgid "Print Roadbed Outline?"
+msgstr "Gleisbettung drucken?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:460
+msgid "Print Roadbed Outline"
+msgstr "Gleisbettung drucken"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:461
+#: ../../../../build/work/app/bin/bllnhlp.c:462
+#: ../../../../build/work/app/bin/bllnhlp.c:464
+msgid ""
+"Origin of the print grid. This is useful if you want to reprint a set of "
+"pages"
+msgstr ""
+"Ursprung des Druckraster. Hilfreich, wenn einige Seiten erneut gedruckt "
+"werden"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:463
+msgid "Resets the origin and angle to 0"
+msgstr "Ausrichtung und Winkel auf 0 zurücksetzen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:465
+msgid "Deselects all pages"
+msgstr "Alle Seiten abwählen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:467
+msgid "Print selected pages and terminates the print command"
+msgstr "Ausdrucken der ausgewählten Seiten und den Dialog Drucken schließen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:468
+msgid "List of loaded, shown or hidden parameter files"
+msgstr "Liste der geladenen, angezeigten und inaktiven Parameterdateien"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:469
+msgid "Show parameter files by names or descriptions"
+msgstr "Zeige Namen oder Beschreibung der Parameter-Dateien an"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:470
+msgid "Toggle the shown status of the selected parameter file"
+msgstr "Ändert den Anzeigestatus für ausgewählte Parameter-Dateien"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:471
+msgid "Find extra parameter files from the filesystem"
+msgstr "Suche weitere Parameterdateien auf der Festplatte"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:472
+msgid "Find parameter files from the system library"
+msgstr "Suche Parameterdateien in der Systembibliothek zum Einlesen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:473
+msgid "Update parameter file list"
+msgstr "Aktualisiere die Liste der Parameterdateien"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:474
+msgid "Reload parameter file from list"
+msgstr "Parameterdateien erneut einlesen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:475
+msgid "Select all parameter files shown"
+msgstr "Alle angezeigten Parameter-Dateien auswählen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:476
+msgid "Profile of specified path"
+msgstr "Höhenprofil der ausgewählten Verbindung"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:477
+msgid "Clear the profile"
+msgstr "Lösche das Höhenprofil"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:478
+msgid "Print the profile"
+msgstr "Höhenprofil drucken"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:480
+msgid "Stop recording"
+msgstr "Aufzeichnung beenden"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:481
+msgid "Insert a message"
+msgstr "Eine Nachricht einfügen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:482
+msgid "End a message"
+msgstr "Ende einer Mitteilung"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:483
+msgid "Message body"
+msgstr "Mitteilung"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:484
+msgid "Possible turnouts"
+msgstr "Mögliche Weichen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:485
+msgid "Skip this turnout"
+msgstr "Diese Weiche überspringen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:487
+msgid "Manufacturer of Object"
+msgstr "Hersteller des Objektes"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:488
+msgid "Description of Object"
+msgstr "Beschreibung des Objekte"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:489
+msgid "Part Nuber of Object"
+msgstr "Bestellnummer des Objektes"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:491
+msgid "Rescale by Scale Conversion or by Ratio"
+msgstr "Durch Auswahl eines Maßstab oder eines Multiplikators skalieren"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:492
+msgid "Original Scale of the selected objects"
+msgstr "Ursprünglicher Maßstab der ausgewählten Objekte"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:493
+msgid "Original Gauge of the selected objects"
+msgstr "Ursprüngliche Spurweite der ausgewählten Objekte"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:494
+msgid "New Scale of the selected objects"
+msgstr "Neuer Maßstab der ausgewählten Objekte"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:495
+msgid "New Gauge of the selected objects"
+msgstr "Neu Spurweite der ausgewählten Objekte"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:496
+msgid "Change track dimensions to new scale"
+msgstr "Abmessungen des Gleises auf den neuen Maßstab umrechnen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:497
+msgid "Change size by this amount"
+msgstr "Größe um einen Faktor verändern"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:499
+msgid "Snap Grid Line and Division"
+msgstr "Fangraster Linien und Unterteilungen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:500
+msgid "X and Y position markers"
+msgstr "X und Y Positionsmarkierungen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:501
+msgid "Border rulers, room boundaries and table edges"
+msgstr "Begrenzungslinien, Raumumriß und Anlagenkanten"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:502
+msgid "Primary Axis of grid rotation"
+msgstr "Erste Achse für Rasterdrehung"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:503
+msgid "Secondary Axis of grid rotation"
+msgstr "Zweite Achse für Rasterdrehung"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:504
+msgid "Unselected tracks"
+msgstr "Nicht ausgewählte Gleise"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:505
+msgid "Selected tracks"
+msgstr "Ausgewählte Gleise"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:506
+msgid "Color of tracks on the Profile path"
+msgstr "Farbe für Gleise auf Höhenverlauf"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:507
+msgid "Color of Exceptional tracks"
+msgstr "Farbe für Gleise außerhalb der Grenzwerte"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:508
+msgid "Color of track ties"
+msgstr "Farbe der Schwellen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:509
+msgid "Updates the colors"
+msgstr "Farben aktualisieren"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:510
+msgid "Angle in degrees"
+msgstr "Winkel in Grad"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:511
+msgid "Rotate object(s) by specified amount"
+msgstr "Objekte um einen bestimmten Winkel drehen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:512
+msgid "Enter one or more words as search terms '*' means all"
+msgstr ""
+"Geben Sie ein oder mehrere Wörter als Suchbegriffe ein '*' bedeutet alle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:513
+msgid "Find matching file descriptions"
+msgstr "Passende Inhaltsbeschreibungen finden"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:514
+msgid "Search Results"
+msgstr "Suchergebnisse"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:515
+msgid "Show Descriptions or FileNames in results"
+msgstr "Beschreibungen oder Dateinamen in Ergebnissen anzeigen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:516
+msgid "Add selected entries into parameter file list"
+msgstr "Ausgewählte Einträge zur Liste der Parameterdateien zufügen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:517
+msgid "Select All found entries"
+msgstr "Alle Suchergebnisse auswählen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:518
+msgid "Reload the system library contents for finding"
+msgstr "Laden Sie den Inhalt der Systembibliothek zum Suchen neu"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:519
+msgid "Choose commands to be sticky"
+msgstr "Wiederholte Befehle auswählen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:520
+msgid "Make the commands sticky"
+msgstr "Mache die Befehle wiederholbar"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:521
+msgid "List of available structure"
+msgstr "Liste der verfügbaren Gebäude"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:522
+msgid "Diagram of the selected structure"
+msgstr "Zeichnung des ausgewählten Gebäudes"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:523
+msgid "Hide Selection window when placing Structure"
+msgstr "Verberge Auswahlfenster bis das Gebäude plaziert ist"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:524
+msgid "Drawing scale and size"
+msgstr "Zeichnungsmaßstab und Größe"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:525
+msgid "Complete structure placement"
+msgstr "Anordnung des Gebäude abschliessen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:526
+msgid "Choose a Pier number"
+msgstr "Bestellnummer eingeben"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:527
+msgid "Name of the Motor"
+msgstr "Name des Weichenantriebs"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:528
+msgid "Value when switch is normal"
+msgstr "Werte bei normaler Weichenposition"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:529
+msgid "Value when the switch is reversed"
+msgstr "Wert bei umgekehrter Weichenposition"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:530
+msgid "Value for a positive comfirmation of switch position"
+msgstr "Wert bei positiver Bestätigung der Weichenposition"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:532
+msgid "Useful information about the program"
+msgstr "Nützliche Informationen über das Programm"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:533
+msgid "Show Tip of the Day every time the program starts"
+msgstr "Bei jedem Start den Tipp des Tages anzeigen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:534
+msgid "Show the next Tip of the Day"
+msgstr "Gehe zum nächsten Tipp des Tages"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:535
+msgid "Show the previous Tip of the Day"
+msgstr "Gehe zum vorherigen Tipp des Tages"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:537
+msgid "Controls which Command Buttons are displayed"
+msgstr "Ein- oder Ausblenden von Befehls-Knöpfen in der Werkzeugleiste"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:538
+msgid "List of Cars"
+msgstr "Liste der Wagen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:539
+msgid "List of active trains"
+msgstr "Liste der aktiven Züge"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:541
+msgid "Train odometer"
+msgstr "Entfernungsmesser"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:542
+msgid "Reset odometer to 0"
+msgstr "Kilometerzähler auf 0 zurücksetzen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:543
+msgid "Find train on layout"
+msgstr "Finde einen Zug auf der Anlage"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:544
+msgid "Follow train around layout"
+msgstr "Zum Zug über die Anlage folgen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:545
+msgid "Flip direction at End Of Track"
+msgstr "Am Ende des Gleis die Fahrtrichtung umkehren"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:546
+msgid "Change direction of train"
+msgstr "Richtung des Zuges ändern"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:547
+msgid "Stop the train"
+msgstr "Anhalten des Zuges"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:548
+msgid "List of available turnouts for the current scale"
+msgstr "Liste der im aktuellen Maßstab verfügbaren Weichen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:549
+msgid ""
+"Diagram of the currently selected turnout. Click on a End-Point to select "
+"the Active End-Point"
+msgstr ""
+"Zeichnung der ausgewählten Weiche. Der aktive Endpunkt kann durch Klicken "
+"auf einen Endpunkt gesetzt werden"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:550
+msgid ""
+"A menu list of various type of turnouts and sectional tracks you can define"
+msgstr ""
+"Eine Aiuswahlliste verschiedener Arten von Weichen und Festgleisen, die Sie "
+"definieren können"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:551
+msgid "Hide Selection window when placing Turnout"
+msgstr "Auswahlfenster während des Verlegen verbergen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:552
+msgid "The selected Active End-Point"
+msgstr "Der ausgewählte, aktive Endpunkt"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:553
+msgid "Current selected turnout, (displayed in the diagram window)"
+msgstr "Momentan ausgewählte Weiche, (sichtbar im Diagram-Fenster)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:554
+msgid "One the End-Points that can be selected"
+msgstr "Einer der Endpunkte, der ausgewählt werden kann"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:556
+#: ../../../../build/work/app/bin/bllnhlp.c:557
+msgid "Angle of the specified track to the center line of the turnout"
+msgstr "Winkel zwischen dem ausgwählten Gleise und der Mittellinie der Weiche"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:558
+msgid "Specifies if angles are entered as Frog Numbers or in degrees"
+msgstr "Soll der Winkel als Steigung oder in Grad angegeben werden"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:559
+#: ../../../../build/work/app/bin/bllnhlp.c:560
+msgid "Desciption"
+msgstr "Beschreibung"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:561
+msgid "Turnout description (Manuf., Size, Part Number, etc)"
+msgstr "Beschrebung der Weiche (Hersteller, Winkel, Teilenummer, etc.)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:562
+#: ../../../../build/work/app/bin/bllnhlp.c:563
+#: ../../../../build/work/app/bin/bllnhlp.c:564
+msgid "Length from the base to the end of the specified track"
+msgstr "Länge von der Grundlinie zum Ende des ausgewählten Gleis"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:566
+#: ../../../../build/work/app/bin/bllnhlp.c:567
+msgid "Offset of the track End-Point from the center line of the turnout"
+msgstr "Abstand des Endpunktes von der Mittellinie der Weiche"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:570
+#: ../../../../build/work/app/bin/bllnhlp.c:571
+msgid "Prints a full size diagram of the turnout for checking"
+msgstr "Erstellt einen Probeausdruck der Weiche"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:572
+msgid "Color of Roadbed lines"
+msgstr "Farbe der Gleisbettlinien"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:573
+msgid "Width of Roadbed lines"
+msgstr "Abstand des Gleisbettmarkierungen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:574
+msgid "Width of Roadbed"
+msgstr "Breite des Gleisbett"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:576
+msgid "Closes the window and returns to the Turnout Selection window"
+msgstr "Schliesst das Fenster und kehrt zur Weichenauswahl zurück"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:577
+msgid "Specifies the diameter of the turntable"
+msgstr "Legt den Durchmesser der Drehscheibe fest"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:578
+msgid "Old Turnout title"
+msgstr "Alter Bezeichnung der Drehscheibe"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:579
+msgid "List of available titles"
+msgstr "Liste der verfügbaren Titel"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:580
+msgid "Leave the Turnouts' title unchanged"
+msgstr "Tiitel der Weiche unverändert lassen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:581
+msgid "Invoke the Parameter Files dialog"
+msgstr "Auswahl der Parameterdateien"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:582
+msgid "List of available turnouts"
+msgstr "Liste der verfügbaren Weichen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:583
+msgid "Update the Turnouts' title"
+msgstr "Aktualisiere den Titel des Gleis"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:587
+msgid "Sample"
+msgstr "Beispiel"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:589
+msgid "Slant"
+msgstr "Neigung"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:590
+msgid "Font selection dialog"
+msgstr "Dialog zur Auswahl der Schriftart"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:591
+msgid "Weight"
+msgstr "Gewicht"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:592
+msgid "Printer Abort Window"
+msgstr "Druck abbrechen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:593
+msgid "Print to filename"
+msgstr "Name der Druckdatei"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:594
+msgid "Specify Postscript font alias mapping"
+msgstr "Zuordnung der Postscript-Schriftarten angeben"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:595
+msgid ""
+"Displays the Print Setup window to change printers, orientation, paper size, "
+"etc."
+msgstr ""
+"Ruft das Drucker Dialog Fenster auf, um Drucker und oder Papier "
+"Einstellungen vornehmen zu können."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:596
+msgid "Closes this dialog"
+msgstr "Dialogfenster schliessen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:597
+msgid "Page orientation"
+msgstr "Seitenausrichtung"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:598
+msgid "Unprintable margins"
+msgstr "Nicht druckbare Ränder"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:599
+msgid "Updates and closes this dialog"
+msgstr "Dialogfenster aktualisieren und schliessen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:600
+msgid "Choose paper size"
+msgstr "Papierformat auswählen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:601
+msgid "Choose printer"
+msgstr "Drucker auswählen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:602
+msgid "Print test page"
+msgstr "Drucke Testseite"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:1
+#: ../../../../build/work/app/i18n/custmsg.h:8
+msgid ""
+"XTrackCAD provides demonstrations on most of the program's features. The "
+"demos can be run by clicking on the Help menu on the Main window and then "
+"selecting Demos."
+msgstr ""
+"XTrackCAD verfügt über Demos der meisten Funktionen. Diese Demos können "
+"abgespielt werden indem im Hilfe Menü des Hauptfensters der Punkt \"Demos\" "
+"ausgewählt wird."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:3
+#: ../../../../build/work/app/i18n/custmsg.h:10
+msgid ""
+"The notation \"Menu|Item\" is used in the documentation (and the on-line "
+"demos and tips) to indicate the selection of a menu item.\n"
+"For example, \"File|Open\" means to open the menu by clicking on File on the "
+"menu bar of the Main window and then selecting the Open item from that menu."
+msgstr ""
+"Die Darstellungsart \"Menü|Unterpunkt\" wird in der Dokumentation, den "
+"Online Demos und im Tipp des Tages verwendet. Sie dient dazu die Selektion "
+"eines Unterpunktes zu beschreiben.\n"
+"\"Datei|Öffnen\" bedeutet zum Beispiel in der Menüleiste des Hauptfensters "
+"auf Datei zu klicken und dann im aufgehenden Untermenü auf die Auswahl Punkt "
+"Öffnen."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:6
+#: ../../../../build/work/app/i18n/custmsg.h:12
+msgid ""
+"Set your modeling scale on the \"Options|Layout\" dialog. This controls the "
+"Turnouts and Structures that are available, Easement values and track gauge."
+msgstr ""
+"Stellen Sie im \"Optionen|Gleisplan\" Dialog Maßstab und Spurweite für Ihren "
+"Gleisplan ein. Diese Grundeinstellung sollte unbedingt als erstes "
+"vorgenommen werden, damit der neu eingestellte Maßstab mit dem Maßstab der "
+"geladenen Parameterdatei übereinstimmt."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:8
+#: ../../../../build/work/app/i18n/custmsg.h:14
+msgid ""
+"A number of example layouts are provided. These files can be accessed by "
+"\"Help|Examples\"."
+msgstr ""
+"Es werden eine Reihe von Beispiel-Gleisplänen bereitgestellt. Auf diese "
+"Dateien kann über \"Hilfe|Beispiele\" zugegriffen werden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:10
+#: ../../../../build/work/app/i18n/custmsg.h:16
+msgid ""
+"When installed, the length units are set based on your contry: inches for "
+"United States or Canada and centimeters elsewhere. You can change this on "
+"the \"Options|Preferences\" dialog by choosing between Metric and English."
+msgstr ""
+"Die Darstellung sämtlicher Einheiten hängt von ihrem Land ab. In den "
+"Vereinigten Staaten oder Kanada werden Inches dargestellt, ansonsten "
+"Zentimeter. Diese Einstellung können Sie über den Dialog \"Optionen|"
+"Einstellungen\" ändern, indem Sie zwischen Englisch und Metrisch wechseln."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:12
+#: ../../../../build/work/app/i18n/custmsg.h:18
+msgid ""
+"You can change the overall size of your layout on the \"Options|Layout\" "
+"dialog."
+msgstr ""
+"Die Gesamtgröße Ihres Gleisplans kann über den Dialog \"Optionen|Gleisplan\" "
+"eingestellt werden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:14
+#: ../../../../build/work/app/i18n/custmsg.h:20
+msgid ""
+"When installed, the default command is the Select command. You might want to "
+"change this to the Decribe command. You can do this on the \"Options|"
+"Command Options\" dialog."
+msgstr ""
+"Nach Installation ist der Standardbefehl das \"Auswählen\" Kommando. "
+"Erfahrene Benutzer möchten dies vielleicht in das \"Beschreiben\" Kommando "
+"ändern. Dies kann über den Dialog \"Optionen|Befehl\" unter Standardbefehl "
+"erfolgen."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:16
+#: ../../../../build/work/app/i18n/custmsg.h:22
+msgid ""
+"When Selecting tracks, the connection between Selected and Unselected tracks "
+"is marked by a Red X. This indicates points where the connection between "
+"tracks will be broken if you Move or Rotate the Selected tracks."
+msgstr ""
+"Bei ausgewählten Gleisen wird die Verbindung des Gleises durch ein rotes X "
+"markiert, genau an dieser Stelle wird das Gleis getrennt wenn es verschoben "
+"oder gedreht wird."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:18
+#: ../../../../build/work/app/i18n/custmsg.h:24
+msgid ""
+"You can change orientation of the pages on the Print command by moving or "
+"rotating the Print Grid.\n"
+"Shift-Left-Drag moves the grid and Shift-Right-Drag rotates the grid."
+msgstr ""
+"Die Ausrichtung von auszudruckenden Seiten kann geändert werden indem das "
+"Druckraster bewegt oder rotiert wird.\n"
+"Shift Taste nach links ziehen bewegt das Raster, Shift Taste nach rechts "
+"ziehen rotiert das Raster."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:21
+#: ../../../../build/work/app/i18n/custmsg.h:26
+msgid ""
+"You can add track to any unconnected End-Point with the Modify command.\n"
+"Hold down the Shift key and click on the End-Point and drag away to create a "
+"new track segment attached to the End-Point.\n"
+"Repeat with the new End-Point to create flowing tracks."
+msgstr ""
+"Gleise können zu jedem unverbundenen Endpunkt mit \"Verändern\" hinzugefügt "
+"werden.\n"
+"Um einen neuen Gleisabschnitt zu erstellen, markieren Sie einen Endpunkt, "
+"halten Sie dann die Shift-Taste gedrückt während Sie den Gleisabschnitt "
+"verschieben.\n"
+"Wiederhohlen Sie diese Aktion mit diesem neuen Endpunkt um Gleisabschnitte "
+"weiter zu zerlegen."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:25
+#: ../../../../build/work/app/i18n/custmsg.h:28
+msgid ""
+"You can create curved tracks in four ways by dragging from:\n"
+" the 1st endpoint in the direction of the curve\n"
+" center of the curve to the 1st endpoint\n"
+" endpoint to the center\n"
+" the 1st to 2nd endpoint\n"
+"Then drag on one of the Red arrows to create the final shape of the curve.\n"
+"\n"
+"You can click on the small button to the right of the Curve command button "
+"to change the method."
+msgstr ""
+"Sie können gebogene Gleise auf vier Arten durch Ziehen erstellen, vom:\n"
+" 1. Endpunkt in Richtung der Kurve\n"
+" Mittelpunkt der Kurve zum 1. Endpunkt\n"
+" Endpunkt zum Zentrum\n"
+" 1. zum 2. Endpunkt\n"
+"Ziehen Sie dann an einem der roten Pfeile, um die endgültige Form der Kurve "
+"zu erstellen.\n"
+"\n"
+"Sie können auf die kleine Schaltfläche rechts neben der Befehlsschaltfläche "
+"Kurve klicken, um die Methode zu ändern."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:34
+#: ../../../../build/work/app/i18n/custmsg.h:30
+msgid ""
+"When creating a straight or a curved track by dragging from the 1st End "
+"Point, you can snap the new track to an existing open end point by holding "
+"down Shift while you click.\n"
+"The new track will be joined to the old when you create it."
+msgstr ""
+"Beim Erstellen eines geraden oder eines gebogenen Gleise durch Ziehen vom "
+"ersten Endpunkt kann das neue Gleis an dem existierenden Endpunkt "
+"ausgerichtet werden, in dem die Umschalt-Taste beim Klicken gedrückt wird.\n"
+"Das neue Gleis wird beim Erstellen mit dem vorhandenen Gleis verbunden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:37
+#: ../../../../build/work/app/i18n/custmsg.h:32
+msgid ""
+"Track Circles provide a quick way to see what arrangement of tracks will fit "
+"in your layout spaces. Create Circles with your typical radius and place "
+"them in corners and other locations where your main-line will make changes "
+"of direction. This will give you an overall idea of how your layout will "
+"look.\n"
+"\n"
+"You can create Circles by:\n"
+" using a fixed radius\n"
+" dragging from the Center to edge\n"
+" dragging from an edge to the Center\n"
+"You can click on the small button to the left of the Circle command button "
+"to change the method."
+msgstr ""
+"Gleiskreise ermöglichen einen schnellen Weg die Aufteilung Ihres Gleisplans "
+"in den vorhanden Platz einzuteilen. Erstellen Sie Gleiskreise mit üblichen "
+"Radien und platzieren Sie diese in Ecken oder an beliebigen Stellen Ihres "
+"Hauptgleises an denen ein Richtungswechsel statt finden soll. Dies wird "
+"Ihnen helfen einen ersten Überblick von Ihrem gesamten Gleisplan zu "
+"erhalten.\n"
+"\n"
+"Gleiskreise können wie folgt erzeugt werden:\n"
+" mit einem festgelegten Radius\n"
+" durch ziehen aus der Mitte zur Kante\n"
+" durch ziehen von der Kante zur Mitte\n"
+"Die verschiedenen Methoden zur Gleiskreiserstellung können ausgewählt werden "
+"durch anklicken des Knopfes rechts neben dem Greisknopf in der "
+"Werkzeugleiste."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:45
+#: ../../../../build/work/app/i18n/custmsg.h:34
+msgid ""
+"Easements (spiral transition curves) are used when track changes from "
+"straight to curved by gradually changing the radius. This improves "
+"operation and appearance.\n"
+"Easements are created with Joining or Extending Tracks.\n"
+"The Easement dialog is used to control easements."
+msgstr ""
+"Übergangsbögen werden benutzt wenn gerades Gleis stufenweise bei sich "
+"änderndem Radius in kurviges Gleis ändert, Dies verbessert die Benutzbarkeit "
+"und verschönert das Erscheinungsbild.\n"
+"Übergangsbögen werden erstellt indem sie an vorhandene Gleise angeängt "
+"werden.\n"
+"Die Schaltfläche \"Easement None\" wird verwendet um die Einstellungen für "
+"Übergangsbögen vornehmen zu können."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:49
+#: ../../../../build/work/app/i18n/custmsg.h:36
+msgid ""
+"\"Help|Recent Messages\" shows the last error and warning messages that were "
+"generated by the program. Also an explanation of each message is displayed."
+msgstr ""
+"\"Hilfe|Letzte Mitteilungen\" zeigt die letzen Fehler/Warnungen an die vom "
+"Programm veruhrsacht wurden. Weiterhin wird eine Erklärung zu jeder Meldung "
+"angezeigt."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:51
+#: ../../../../build/work/app/i18n/custmsg.h:38
+msgid ""
+"When creating stall tracks for a turntable, you usually want the the stall "
+"tracks to be spaced evenly.\n"
+"The \"Turntable Angle\" item on \"Options|Preferences\" dialog can be used "
+"specify the minimum angle between stall tracks."
+msgstr ""
+"Beim Anschluss von Endgleisen an eine Drehscheibe, möchte man diese "
+"üblicherweise gleichmäßig verteilen.\n"
+"Der Punkt \"Drehscheibenwinkel\" im Dialog \"Optionen|Einstellungen\" kann "
+"dazu benutzt werden den kleinstmöglichen Winkel, beim Anschluss solcher "
+"Gleise, einzustellen."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:54
+#: ../../../../build/work/app/i18n/custmsg.h:40
+msgid ""
+"XTrackCAD periodically saves the current layout in a check point file. The "
+"'Check Point' item on the 'Options|Preferences' dialog controls how often "
+"the file is saved.\n"
+"You can recover your working file after a system crash by copying the "
+"checkpoint file (xtrkcad.ckp in the XTrackCAD Working directory) to file.xtc"
+msgstr ""
+"XTrackCAD sichert ständig ihre aktuelle Arbeit in eine temporäre Datei. Im "
+"Feld 'Sicherungskopie' unter dem Menüpunkt 'Optonen|Einstellungen' können "
+"Sie die Häufigkeit dieser automatischen Sicherung festlegen.\n"
+"Nach einem System/Programm Absturz kopieren Sie einfach die Datei xtrkcad."
+"ckp (im Arbeitsverzeichnis von XTrackCAD) nach <Geisplan>.xtc"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:57
+#: ../../../../build/work/app/i18n/custmsg.h:42
+msgid ""
+"The Parallel command is helpful to layout yards and sidings. If the "
+"Parallel track abuts with an existing track, it is automatically connected."
+msgstr ""
+"Das Parallel Kommando ist nützlich um Bahnhöfe und Abstellgeise zu "
+"erstellen. Falls sich ein parallel Gleis mit einem existierenden Gleis fast "
+"berührt wird dieses automatisch verbunden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:59
+#: ../../../../build/work/app/i18n/custmsg.h:44
+msgid ""
+"You can use Shift-Drag in Select command to move and rotate selected "
+"tracks.\n"
+"Shift-Left-Drag moves tracks and Shift-Right-Drag rotates them.\n"
+"Control-Left-Drag can move labels."
+msgstr ""
+"Gleise können verschoben oder rotiert werden indem sie mit Hilfe des "
+"\"Ändern|Auswählen\" Kommandos ausgewählt werden und dann druch "
+"gleichzeitiges festhalten der Shift-Taste und einer Maustaste bewegt "
+"werden.\n"
+"Shift und linke Maustaste verschiebt ein Gleis.\n"
+"Shift und rechte Maustaste rotiert ein Gleis.\n"
+"Steuerung und linke Maustaste verschiebt Beschreibungen."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:63
+#: ../../../../build/work/app/i18n/custmsg.h:46
+msgid ""
+"You can move and rotate the Snap Grid to align with existing track or "
+"benchwork."
+msgstr ""
+"Das Fangraster kann bewegt oder gedreht werden um es an Gleisen oder "
+"Aufbauten ausrichten zu können."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:65
+#: ../../../../build/work/app/i18n/custmsg.h:48
+msgid ""
+"Use the Parts List command to measure track length.\n"
+"Select the tracks you want to measure and then click on the Parts List "
+"button. The report will list the total of length of the selected flex-"
+"track. You will have to add in the length of any Turnouts."
+msgstr ""
+"Der Dialog \"Verwalten|Teileliste\" kann dazu benutzt werden Gleislängen zu "
+"messen.\n"
+"Markieren Sie die zu messenden Gleise und wählen Sie den Teileliste Punkt. "
+"Die auftauchende Liste zeigt die Länge der ausgewählten Gleise an. Die Länge "
+"der Weichen muss hinzugezählt werden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:68
+#: ../../../../build/work/app/i18n/custmsg.h:50
+msgid ""
+"The length of flex-track attached to each Turnout is displayed on layout "
+"near the end-points of the Turnouts.\n"
+"Make sure 'Lengths' option of the 'Label Enable' toggle button on the "
+"Display dialog is selected."
+msgstr ""
+"Die Länge von Flex-Gleis welches mit Weichen verbunden ist wird in der Nähe "
+"des Endpunktes der Weiche angezeigt.\n"
+"Stellen Sie sicher das der Auswahlpunkt \"Längen\" im Dialog \"Optionen|"
+"Anzeige\" ausgewählt ist."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:71
+#: ../../../../build/work/app/i18n/custmsg.h:52
+msgid ""
+"The Profile command can be used to find the length of a continous section of "
+"track.\n"
+"Select the track at the beginning and end of the section. The total length "
+"of track will be displayed on the Profile window in the lower right corner.\n"
+"Note: the Profile selects the shortest path between the two selected tracks, "
+"which might not be the path you are interested in. In this case, select the "
+"first track and then select other tracks along the path."
+msgstr ""
+"Das Kommando \"Höhenprofil\" im Menü \"Ändern\" kann dazu benutzt werden um "
+"die Länge einer zusammenhängenden Gleissektion heraus zu finden.\n"
+"Markieren Sie den Anfang und das Ende dieser Sektion. Die totale Länge "
+"dieser Gleissektion wird in der unteren rechten Ecke des Höhenprofil "
+"Fensters angezeigt.\n"
+"Hinweis: Das Höhenprofil wählt immer den kürzesten Weg zwischen beiden "
+"markierten Gleisen, möglicherweise ist dies aber nicht die Länge an der Sie "
+"interresiert sind. In diesem Fall wählen Sie einfach den gleichen Startpunkt "
+"und den nächst frührer möglichen Endpunkt aus."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:75
+#: ../../../../build/work/app/i18n/custmsg.h:54
+msgid ""
+"Layers can be used to contain different groups of tracks or other features. "
+"You might use one layer for the main-line, another of staging tracks and "
+"another of benchwork.\n"
+msgstr ""
+"Ebenen können dazu benutzt werden um verschiedene Gruppen von Gleisen oder "
+"Funktionen darstellen zu können. Eine Ebene kann z.B. für das Hauptgleis "
+"verwendet werden, eine weitere für Schattenbahnhöfe und eine weitere für "
+"Aufbauten oder Tunnnel.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:77
+#: ../../../../build/work/app/i18n/custmsg.h:56
+msgid ""
+"You can give each layer a name (by using the \"Manage|Layer\" dialog). This "
+"name will be displayed as the Balloon Help for the corresponding Layer "
+"button, if you have Balloon Help enabled on the \"Options|Display\" dialog."
+msgstr ""
+"Jeder Ebene kann ein Name über den \"Verwalten|Ebenen\" Dialog zugewiesen "
+"werden. Falls die Auswahl \"Sprechblasen\" im Menü \"Optionen|Einstellungen"
+"\" aktiviert wurde, wird dieser vergebene Name in der Werkzeugleiste für "
+"diese Ebene angezeigt."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:79
+#: ../../../../build/work/app/i18n/custmsg.h:58
+msgid ""
+"You can remove groups of buttons or the Hot Bar from the Main window to give "
+"you more room if you are not using some features. Also, the number of Layer "
+"buttons displayed is controlled by the \"Manage|Layers\" dialog."
+msgstr ""
+"Die Werkzeugleiste kann über den Dialog \"Anzeige|Werkzeugleiste anpassen\" "
+"verändert werden um mehr Platz im Hauptfenster zur Verfügung zu stellen. Die "
+"Anzahl der Ebenenknöpfe wird über den Dialog \"Verwalten|Ebenen\" "
+"eingestellt."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:81
+#: ../../../../build/work/app/i18n/custmsg.h:60
+msgid ""
+"The size of the map window is controlled by the overall size of the room "
+"(specified on the layout dialog) and the map scale (on the display dialog). "
+"You can make the Map window larger (or smaller) by decreasing (or "
+"increasing) the map scale.\n"
+"XTrackCad will prevent you from making the map window too small or too large."
+msgstr ""
+"Die Größe des Kartenfensters wird in Abhängigkeit zur eingestellten "
+"Gesamtgröße des Raums kontrolliert. Die Gesamtgröße des Raums wird über den "
+"Dialog \"Optionen|Gleisplan\", der Maßstab des Kartenfensters über die "
+"Auswahl \"Kartenmaßstab\" im Dialog \"Optionen|Anzeige\" eingestellt. Die "
+"Größe des Kartenfensters kann verändert werden, indem der Wert für "
+"Kartenmaßstab entweder erhöht oder verkleinert wird.\n"
+"XTrackCAD lässt keine zu kleinen/großen Werte für das Kartenfenster zu."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:84
+#: ../../../../build/work/app/i18n/custmsg.h:62
+msgid ""
+"You can unload parameter files you are not using by the Parameter Files "
+"dialog. This removes unused Turnout and Structure definitions from the Hot "
+"Bar and makes the program start faster."
+msgstr ""
+"Damit Gleise in der Schnellauswahl auftauchen ist es nötig eine Gleis "
+"Parameterdatei für Ihren Gleisplan zu laden, im Dialog \"Datei|"
+"Parameterdateien\" können Sie die für Ihr Gleis nötige Parameterdatei laden. "
+"Nicht mehr benötigte Parameterdateien können über den gleichen Dialog "
+"entladen werden. Hierdurch werden nicht mehr benötigte Weichen/Gleise von "
+"der Schnellauswahl gelöscht was das Programm schneller starten läßt."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:86
+#: ../../../../build/work/app/i18n/custmsg.h:64
+msgid ""
+"Right-Click on the Main window displays a menu list of commands as an "
+"alternative to pressing the buttons on the tool bar or using the menu "
+"accelerator keys."
+msgstr ""
+"Alternativ zur Werkzeugleiste oder den Menütasten kann durch Rechts-Klick im "
+"Hauptfenster ein weiteres Befehlsmenü benutzt werden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:87
+#: ../../../../build/work/app/i18n/custmsg.h:66
+msgid ""
+"Holding down the Shift key while you Right-Click will display options for "
+"the current command (if any)."
+msgstr ""
+"Bleibt die Shift Taste gedrückt während Sie ein Kommando ausgewählt haben "
+"werden (wenn vorhanden) Optionen für dieses Kommando angezeigt."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:89
+#: ../../../../build/work/app/i18n/custmsg.h:68
+msgid ""
+"Right-Click on the Hot Bar displays a menu of the different groups of "
+"objects which you can use to jump to the group you are interested in.\n"
+"Pressing a numeric key (1-9 and 0) moves the Hot Bar to corresponding "
+"position (1 is the start, 5 is half way, 0 is the end)."
+msgstr ""
+"Rechts Klick in der Schnellauswahl öffnet ein Menü mit verschiedenen "
+"Objektgruppen, diese können benutzt werden um schnell zu dieser Art von "
+"Gleisen zu springen.\n"
+"Durch drücken von Zahlen in der Schnellauswahl (1-9 und 0) kann auch die "
+"entsprechende Position der Gleisauswahl geändert werden, hierbei "
+"kennzeichnet 1 die erste Gleisauswahl, 5 gibt die Mitte der Auswahl an und 0 "
+"das Ende."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:92
+#: ../../../../build/work/app/i18n/custmsg.h:70
+msgid ""
+"Right-Drag on the Map window sets the origin and scale of the Main window.\n"
+"The Main window will be centered on the spot where you started the Draw and "
+"how far you Drag will control how large an area you can see on the Main "
+"window."
+msgstr ""
+"Durch ziehen mit der rechten Maustaste im Kartenfenster wird der Focus und "
+"Maßstab im Hauptfenster eingestellt.\n"
+"Das Hauptfenster wird hierbei aufgrund der markierten Auswahl im "
+"Kartenfenster zentriert dargestellt."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:95
+#: ../../../../build/work/app/i18n/custmsg.h:72
+msgid ""
+"To refresh the Main window, press Control-L (hold down the 'Ctrl' key and "
+"then press the 'l' key)."
+msgstr ""
+"Um die Darstellung im Hauptfenster zu erneuern, benutzen Sie Strg+L (halten "
+"Die die Steuernung Taste gedrückt und tippen Sie den Buchstaben 'l')."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:97
+#: ../../../../build/work/app/i18n/custmsg.h:74
+msgid ""
+"The File menu contains a list of the last 5 layouts you were working on."
+msgstr ""
+"Der Dialog \"Datei\" enthält eine Liste der letzten 5 Gleispläne die Sie "
+"geöffnet hatten."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:99
+#: ../../../../build/work/app/i18n/custmsg.h:76
+msgid ""
+"The Print command can optionally print lines representing the roadbed for "
+"all tracks. This is useful when printing full size (1:1) for cutting "
+"roadbed."
+msgstr ""
+"Im \"Drucken\" Dialog kann, die Auswahl \"Gleisbettung drucken\" ausgewählt "
+"werden, um im (1:1) Maßstab Gleisbettvorlagen ausdrucken zu können."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:101
+#: ../../../../build/work/app/i18n/custmsg.h:78
+msgid ""
+"Pressing the 'Esc' key cancels the current command and invokes the default "
+"command, (which is either Describe or Select)."
+msgstr ""
+"Durch drücken der 'ESC' Taste wird der momentane Befehl abgebrochen und "
+"automatisch der Standardbefehl aktiviert, (was entweder Eigenschaften oder "
+"Auswählen ist)."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:103
+#: ../../../../build/work/app/i18n/custmsg.h:80
+msgid ""
+"When moving or rotating tracks on slow machines or with a large number of "
+"tracks, you can improve performance by changing the way tracks are drawn "
+"while being moved.\n"
+"Shift-Right click will display a menu containing options to draw tracks "
+"normally, as simple lines or just draw end-points."
+msgstr ""
+"Auf langsamen Computern oder bei hoher Anzahl von Gleisen, kann die Art und "
+"Weise wie Gleise neu gezeichnet werden verändert werden.\n"
+"Nachdem Gleise markiert wurden, kann durch festhalten der Shift-Taste und "
+"einem rechts Klick mit der Maus in einem Options Menü ausgewählt werden wie "
+"die Gleise dargestellt werden sollen: Normal, Einfach oder nur als Endpunkte."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:106
+#: ../../../../build/work/app/i18n/custmsg.h:82
+msgid ""
+"The colors of different parts of the Main window can be changed with the "
+"Colors dialog. In particular, the Snap Grid color can be changed to make it "
+"more visible when printed."
+msgstr ""
+"Farben der verschiedenen Baugruppen im Hauptfenster können über den Dialog "
+"\"Optionen|Farben\" verändert werden. Im Besonderen kann die Farbe des "
+"Fangrasters geändert werden um es beim ausdrucken besser sichtbar machen zu "
+"können."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:108
+#: ../../../../build/work/app/i18n/custmsg.h:84
+msgid ""
+"By default objects are drawn in their normal colors. Tracks will be drawn "
+"in Black. Objects can also be drawn in the color according to their Layer. "
+"The color of a Layer is displayed on the corresponding Layer button.\n"
+"The Display dialog 'Color Layers' item has separate toggles for Tracks and "
+"non-Tracks."
+msgstr ""
+"Üblicherweise werden Objekte in Ihren voreingestellten Farben gezeichnet. "
+"Gleise werden in schwarz dargestellt. Objekte können in den Farben ihrer "
+"jeweiligen Ebenen dargestellt werden. Die Farbe einer Ebene wird auf ihrem "
+"zugehörigen Ebenenknopf angezeigt.\n"
+"Die Auswahl \"Ebenenfarben\" im Dialog \"Optionen|Anzeige\" besitzt jeweils "
+"für Gleise und Sonstige eine getrente Möglichkeit zur Aktivierung von Farben."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:111
+#: ../../../../build/work/app/i18n/custmsg.h:86
+msgid ""
+"Each Layer can be drawn or hidden by the 'Visible' toggle on the Layers "
+"dialog."
+msgstr ""
+"Jede Ebene kann im Dialog \"Verwalten|Ebenen\" verborgen oder angezeigt "
+"werden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:112
+#: ../../../../build/work/app/i18n/custmsg.h:88
+msgid ""
+"Short cut Layer buttons can also be displayed on the tool bar for up to the "
+"first 20 layers.\n"
+"This buttons allow to Show or Hide the layers."
+msgstr ""
+"Ebenenknöpfe können für die ersten 20 Ebenen in der Werkzeugleiste "
+"dargestellt werden, diese Nummernknöpfe können dazu benutzt werden um Ebenen "
+"zu verbergen oder anzuzeigen."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:115
+#: ../../../../build/work/app/i18n/custmsg.h:90
+msgid "The name of the Layer is the Balloon Help for the Layer button."
+msgstr ""
+"Der Name einer Ebene wird in der Sprechblase der jeweiligen Ebene angezeigt."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:117
+#: ../../../../build/work/app/i18n/custmsg.h:92
+msgid ""
+"The playback speed of the Demos can be changed by using Speed drop down list "
+"on the Demo window."
+msgstr ""
+"Die Wiedergabegeschwindigkeit von Demos kann durch den Auswahlreiter rechts "
+"oben im Demo Fenster eingestellt werden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:119
+#: ../../../../build/work/app/i18n/custmsg.h:94
+msgid ""
+"Many of the commands and dialogs can be invoked by special key combinations "
+"called Menu-Accelerators. These are listed on the Menus next to the command "
+"name. For example, Control-P will invoke the Print command."
+msgstr ""
+"Viele Kommandos oder Menü Dialoge können über Tastaturkürzel aufgerufen "
+"werden. Diese Kürzel werden rechts (wenn verfügbar) neben jedem Kommando "
+"angezeigt. Zum Beispiel: Strg+P im Menü \"Datei|Drucke\" ruft den Drucken "
+"Dialog auf."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:121
+#: ../../../../build/work/app/i18n/custmsg.h:96
+msgid ""
+"The Connect command is used to join Sectional track pieces that don't quite "
+"fit together.\n"
+"This command works by adding small gaps between other tracks to move the "
+"selected End-Points closer together."
+msgstr ""
+"Das \"Gleisstücke verbinden\" Kommando im Dialog \"Ändern\" wird verwendet "
+"um Gleisstücke die nicht verbunden sind miteinander zu verbinden. Dies wird "
+"erreicht indem kleine Lücken bei andern Gleisen eingefügt werden damit die "
+"beiden Endpunkte miteinander verbunden werden können."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:124
+#: ../../../../build/work/app/i18n/custmsg.h:98
+msgid ""
+"To copy a group of objects: Select the objects, press Control-c (or select "
+"Copy from the Edit menu), press Control-v (or select Paste from the Edit "
+"menu).\n"
+"The selected tracks will be copied to the layout and you can Move or Rotate "
+"them into position."
+msgstr ""
+"Um eine Gruppe von Objekten zu kopieren: Selektieren Sie diese, drücken Sie "
+"Strg+C (oder wählen Sie \"Kopieren\" im Menü \"Bearbeiten\" aus), drücken "
+"Sie Strg+V (oder wählen Sie \"Einfügen\" im Menü \"Bearbeiten\" aus).\n"
+"Die ausgewählten Gleise werden in den Gleisplan eingefügt und können dann "
+"verschoben oder rotiert werden und somit in Position gebracht werden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:127
+#: ../../../../build/work/app/i18n/custmsg.h:100
+msgid ""
+"In the Rotate (or Select) commands you can press Shift-Right-Click to "
+"display the Rotate menu which allows you to rotate the selected objects by a "
+"specific angle."
+msgstr ""
+"Bei Benutzung der Kommandos \"Rotieren\" oder \"Auswählen\" kann durch "
+"gedrückt halten der Shift-Taste und rechts Klick mit der Maustaste in einem "
+"auftauchenden Optionsmenü der Winkel zum rotieren eines Objekts ausgewählt "
+"werden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:129
+#: ../../../../build/work/app/i18n/custmsg.h:102
+msgid ""
+"You can use the Move-To-Join option of the Join command (hold down the Shift "
+"key) to move a group of Selected tracks to attach with some unselected End-"
+"Point."
+msgstr ""
+"Das \"Verbinden\" Kommando im Menü \"Ändern\" besitzt eine Option um eine "
+"Gruppe von ausgewählten Gleisen mit einem nicht vorher spezifizierten "
+"Endpunkt verbinden zu können. Markieren Sie zunächst die zu verbindenen "
+"Gleise, wählen Sie als nächstes den Dialog \"Ändern|Verbinden\", halten Sie "
+"nun die Shift-Taste gedrückt während Sie bei gedrückter linker Maustaste die "
+"markierte Gruppe von Gleisen zum Zielpunkt führen, durch nochmaliges drücken "
+"der linken Maustaste werden die selektierten Gleise dem Endpunkt hinzugefügt."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:131
+#: ../../../../build/work/app/i18n/custmsg.h:104
+msgid ""
+"The Price List dialog (on the File Menu) is used to specify the prices of "
+"each type of Turnout, Sectional Track and Structure. Also, the length and "
+"price of flex-track pieces can be specified for each scale.\n"
+"This values will be used on the Parts List report to generate total cost of "
+"the selected objects."
+msgstr ""
+"Der Dialog \"Verwalten|Preisliste\" kann verwendet werden, um Preise für "
+"jedes Gleis, Weiche oder andere Gegenstände einzugeben. Weiterhin können "
+"auch Länge und Preis für Flex-Gleise für jeden beliebigen Maßstab eingegeben "
+"werden.\n"
+"Die angegebenen Preise werden verwendet um die Gesamtkosten im Dialog "
+"\"Verwalten|Teileliste\" auflisten zu können."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:134
+#: ../../../../build/work/app/i18n/custmsg.h:106
+msgid ""
+"Areas of water can represented by a Polygon (use the Draw command) of the "
+"appropiate color.\n"
+"By using the Modify command, you can move, add or remove corners of the "
+"Polygon to fit the shape of the water.\n"
+"You use the Below command to place the Polygon below (or behind) other "
+"objects.\n"
+"\n"
+"You can also use a Polygon to represent aisles."
+msgstr ""
+"Wasserbereiche können durch Polygone mit Hilfe des \"Zeichnen|Formen|Zeichne "
+"Polyline\" in der entsprechenden Farbe erstellt werden.\n"
+"Das \"Verändern\" Kommando kann benutzt werden, Ecken an diesen Polygonen "
+"hinzu zu fügen oder zu löschen, um diese so besser der Form des Wassers "
+"anpassen zu können.\n"
+"\n"
+"Polylinien können auch dazu verwendet werden um Gänge darzustellen."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:140
+#: ../../../../build/work/app/i18n/custmsg.h:108
+msgid ""
+"When you create Benchwork you can move it below other objects by Selecting "
+"the Benchwork and use the Below command.\n"
+"Also, put Benchwork in a separate Layer so you can hide it if desired."
+msgstr ""
+"Ein erstellter Rahmen kann unter andere Objekte verschoben werden, indem man "
+"das \"Darunter\" Kommando aus dem Menü \"Bearbeiten\" verwendet.\n"
+"Weiterhin sollten Sie Aufbauten auf separaten Ebenen darstellen. Diese "
+"können somit im Bedarfsfall sehr leicht versteckt werden, indem man die "
+"zugehörige Ebene einfach ein oder ausblendet."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:143
+#: ../../../../build/work/app/i18n/custmsg.h:110
+msgid ""
+"You can enter Distances and Lengths using any format regardless of the "
+"Length Format on the Preferences dialog."
+msgstr ""
+"Längen können unabhänig der voreingestellten Werte im \"Optionen|"
+"Einstellungen\" Dialog eingegeben werden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:144
+#: ../../../../build/work/app/i18n/custmsg.h:112
+msgid ""
+"You can enter Metric values when English is the default Units and vice versa."
+msgstr ""
+"Metrische Werte können eingegeben werden auch wenn die Einstellung für "
+"Einheiten Englisch gewählt ist."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:146
+#: ../../../../build/work/app/i18n/custmsg.h:114
+msgid ""
+"When entering Distances and Lengths you can press the '=' key to redisplay "
+"the value in the default format."
+msgstr ""
+"Bei Eingabe von Entfernungen und Längen können Sie '=' Zeichen verwenden um "
+"den Wert im voreingestellten Format anzuzeigen."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:147
+#: ../../../../build/work/app/i18n/custmsg.h:116
+msgid ""
+"You can also press the 's' key to convert a Prototype measurement to a Scale "
+"measurement by dividing by the ratio for the current scale."
+msgstr ""
+"Sie können auch die Taste 's' drücken, um eine Prototyp-Abmessung durch "
+"Division durch das Verhältnis in eine maßstäbliche Abmessung umzuwandeln."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:148
+#: ../../../../build/work/app/i18n/custmsg.h:118
+msgid ""
+"The 'p' key will convert a Scale measurement to a Prototype measurement."
+msgstr "Die Taste 'p' konvertiert eine Maßstab Messung in eine Muster Messung."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:150
+#: ../../../../build/work/app/i18n/custmsg.h:120
+msgid ""
+"You can place cars on the layout using the Train Simulation command to check "
+"clearance points, track to track separation and coupling."
+msgstr ""
+"Lokomotiven können im Gleisplan über den Zugbetrieb Knopf plaziert werden um "
+"Weichenübergänge, Gleis zu Gleis Verbindungen oder ankuppeln simulieren zu "
+"können."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:152
+#: ../../../../build/work/app/i18n/custmsg.h:122
+msgid ""
+"Use the MoveTo button on the Custom Management dialog to move your custom "
+"Turnout, Structure and Car definitions to a .XTP parameter file."
+msgstr ""
+"Benutzen Sie den \"Verschieben nach\" Knopf im \"Verwalten|Anpassungs "
+"Verwaltung\" Menü um selbst erstellte Weichen, Strukturen oder Wagen "
+"Definitionen in eine .XTP Parameter Datei zu verschieben."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:154
+#: ../../../../build/work/app/i18n/custmsg.h:124
+msgid ""
+"If you are printing multiple pages on a continuous feed printer (such a Dot "
+"Matrix) you can change the Page Order if necessary to print pages out in "
+"proper order."
+msgstr ""
+"Falls Sie einen Drucker mit endlos Papier verwenden, können Sie die "
+"Reihenfolge der Seiten ändern um diese in der richtigen Reihenfolge "
+"auszudrucken."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:156
+#: ../../../../build/work/app/i18n/custmsg.h:126
+msgid ""
+"On the Car Item and Car Part dialogs, you can enter custom values for "
+"Manufacturer, Part and Road by typing the new value directly into the Drop "
+"Down List."
+msgstr ""
+"Im Dialog \"Verwalten|Wagenverzeichnis\" können eigene Werte für Hersteller, "
+"Artikelnummer und Straße direkt in der angezeigten Liste eingegeben werden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:158
+#: ../../../../build/work/app/i18n/custmsg.h:128
+msgid ""
+"On the Car Item dialog, you can change the Road, Number, Color and other "
+"values for a Car. This is useful if you repaint or renumber a car. \n"
+"You can also change the Coupler Mounting and Coupler Length if you change "
+"the couplers."
+msgstr ""
+"Im Dialog \"Verwalten|Wagenverzeichnis\" können eigene Werte für Zugnummern, "
+"Farbe und andere Werte vergeben werden. Dies is nützlich wenn Sie "
+"beispielsweise einen Wagen umlackiert oder eine neue Rollnummer vergeben "
+"haben. \n"
+"Weiterhin kann die Kupplungsaufhängung und auch deren Länge verändert werden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:161
+#: ../../../../build/work/app/i18n/custmsg.h:130
+msgid ""
+"You can Export your Car Inventory to a file in Comma-Separated-Value format "
+"which can be read by most spread-sheet programs."
+msgstr ""
+"Ihr Wagen/Lokbestand kann in eine, druch Kommata getrennte, Textdatei "
+"exportiert werden, welche von allen gänigen Tabellenkalkulations Programmen "
+"eingelesen werden kann."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:163
+#: ../../../../build/work/app/i18n/custmsg.h:132
+msgid "Use the Train Odometer to measure distances along the track."
+msgstr ""
+"Benutzen Sie den Zugsteckenzähler um Entfernungen auf dem Gleis messen zu "
+"können."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:165
+#: ../../../../build/work/app/i18n/custmsg.h:134
+msgid ""
+"Holding down the Shift key when clicking the Zoom In or Zoom Out button will "
+"zoom to a programmed Drawing Scale. \n"
+"Holding down the Shift and Control keys when clicking a Zoom button will set "
+"it's program Zoom to the current Drawing Scale."
+msgstr ""
+"Wenn Sie die Lupenknöpfe klicken während die Shift Taste gedrückt ist, "
+"setzt das Programm auf vorher festgelegten Maßstab. \n"
+"Durch gleichzeitiges Festhalten der Strg + Shift Tasten kann durch Anklicken "
+"der jeweiligen Lupenknöpfe die Einstellung der Vergrößerung oder "
+"Verkleinerung festgelegt werden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:168
+#: ../../../../build/work/app/i18n/custmsg.h:136
+msgid ""
+"You can trim the ends of turnouts by holding down the Shift key when using "
+"the Split command."
+msgstr ""
+"Durch Benutzung des \"Gleis auftrennen\" Kommandos kann man durch Festhalten "
+"der Umschalt-Taste das Ende einer Weiche anpassen."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:170
+#: ../../../../build/work/app/i18n/custmsg.h:138
+msgid ""
+"The Split command can be used to create Block Gaps at end points between two "
+"tracks. \n"
+"Either rail or both rails can be gapped, which are drawn as thick lines."
+msgstr ""
+"Der Dialog \"Ändern|Gleis auftrennen\" kann benutzt werden um Blockabstände "
+"an Endpunkten von zwei Gleisen einzufügen. \n"
+"Abstände können entweder an einem oder beiden Enden eingefügt werden, diese "
+"werden durch dicke Linien gekennzeichnet."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:173
+#: ../../../../build/work/app/i18n/custmsg.h:140
+msgid ""
+"Trains will 'crash' if they hit another car when travelling faster than the "
+"'Max Coupling Speed' (on the Command Options dialog). \n"
+"They will also 'crash' if they hit the end of the track or an open "
+"turnout. \n"
+"Crashed trains must be manually moved back onto the track."
+msgstr ""
+"Züge 'entgleisen' wenn sie auf ein anderes Fahrzeug treffen oder sie beim "
+"Ankuppeln schneller unterwegs sind wie die maximal eingestellte "
+"Kuppelgeschwindigkeit (einstellbar über \"Optionen|Einstellungen\"). \n"
+"Außerdem werden sie 'entgleisen' sobald sie auf ein totes Gleisende oder "
+"eine offene Weiche treffen. \n"
+"Entgleiste Züge müssen von Hand wieder auf das Gleis zurück gestellt werden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:177
+#: ../../../../build/work/app/i18n/custmsg.h:142
+msgid ""
+"You can add new track segments to a turnout definition or create a "
+"definition from individual tracks using the Group command."
+msgstr ""
+"Der Auswählen Befehl kann verwendet werden um Teilabschnitte an vorhandenes "
+"Gleis anzuhängen oder einen neue Definition zu erstellen, in der einzelne "
+"Gleise zusammengefasst werden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:179
+#: ../../../../build/work/app/i18n/custmsg.h:144
+msgid ""
+"The center point and radius of Curved and Circle tracks can optionally be "
+"drawn. \n"
+"This feature is toggled by using the Move Label command and doing a Shift-"
+"Left-Click on the track."
+msgstr ""
+"Der Mittelpunkt von Kurven oder Kreisen kann auch angezeigt werden. \n"
+"Diese Option kann ein/ausgeschaltet werden durch festhalten der Shift Taste "
+"bei gleichzeitigem links Klick der Maus."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:182
+#: ../../../../build/work/app/i18n/custmsg.h:146
+msgid ""
+"Turnout, Curved and Helix track labels can be individually turned on and off "
+"by doing a Shift-Right-Click on the track when using the Move Label command."
+msgstr ""
+"Weichen, Kurven und Gleiswendel Beschreibungen können einzeln an und aus "
+"geschaltet werden. Halten Sie hierzu die Shift Taste gedrückt während Sie "
+"das Kommando \"Ändern|Beschreibungen verschieben\" verwenden und klicken Sie "
+"mit der rechten Maustaste auf die jeweilige Beschreibung."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:184
+#: ../../../../build/work/app/i18n/custmsg.h:148
+msgid ""
+"You can use the Describe command to change the font size of Text objects."
+msgstr ""
+"Das Kommando \"Ändern|Eigenschaften\" wird verwendet um die Schriftgröße von "
+"Textobjekten zu ändern."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:186
+#: ../../../../build/work/app/i18n/custmsg.h:150
+msgid ""
+"You can use the Describe command to change the size of Dimension Line labels."
+msgstr ""
+"Das Kommando \"Ändern|Eigenschaften\" wird verwendet um die Größe von "
+"Dimensions Linien Beschreibungen zu ändern."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:188
+#: ../../../../build/work/app/i18n/custmsg.h:152
+msgid ""
+"Normally Right-Click displays a popup menu of commands and Shift-Right-Click "
+"displays options for the current command. \n"
+"This can reversed by using the Right Click toggle button on the Command "
+"Options dialog."
+msgstr ""
+"Normalerweise wird durch einen Rechts-Klick im Gleisplan ein Befehlsmenü "
+"angezeigt,. Bei Festhalten der Umschalt-Taste und einem vorher ausgewählten "
+"Kommando wird ein optionales Menü für das jeweilige Kommando angezeigt.\n"
+"Dieses Verhalten kann durch den Befehlsoptionen-Dialog vertauscht werden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:191
+#: ../../../../build/work/app/i18n/custmsg.h:154
+msgid ""
+"The Align item on the Rotate command options menu will let you Align "
+"selected objects with any unselected object. \n"
+"The selected objects are rotated so the first point is parallel to the "
+"second point you selected."
+msgstr ""
+"Die Auswahl \"Ausrichten\" im Optionsmenü des \"Drehen\" Kommandos kann "
+"ausgewählte Objekte an nicht ausgewählten Objekten ausrichten. \n"
+"Die ausgewählten Objekte werden so rotiert dass der erste Auswahlpunkt "
+"parallel zum zweiten Auswahlpunkt erscheint."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:194
+#: ../../../../build/work/app/i18n/custmsg.h:156
+msgid ""
+"Print To Bitmap allows you to print the track center line. \n"
+"This is useful if you later print the bitmap full size as a template when "
+"laying track."
+msgstr ""
+"Speichern als Bitmap ermöglicht das mitspeichern der Gleismitte. \n"
+"Dies ist nützlich falls Sie später diese Bitmap in voller Größe ausdrucken "
+"wollen um sie als Gleisvorlage verwenden zu können."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:197
+#: ../../../../build/work/app/i18n/custmsg.h:158
+msgid ""
+"You can export the selected tracks to a DXF file which can be read by most "
+"CAD programs."
+msgstr ""
+"Sie können markierte Gleise in eine DXF Datei exportieren, welche von den "
+"meisten CAD Programmen lesbar ist."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:199
+#: ../../../../build/work/app/i18n/custmsg.h:160
+msgid ""
+"Lengths and distances can be displayed in a variety of units and formats "
+"such as 1' 10 3/4\", 1ft 10.75in or 22.750. In Metric mode, distances can "
+"be displayed as millimeters, centimeters or meters. See the Length Format "
+"item on the Preferences dialog."
+msgstr ""
+"Längen und Entfernungen können in einer Vielzahl von Einheiten und Formaten "
+"dargestellt werden dies sind z.B 1' 10 3/4\" 10.75in oder 22.750. Bei der "
+"Auswahl von metrischen Einheiten werden Entfernungen und Längen in "
+"Millimetern, Zentimetern oder Metern dargestellt. Diese Einstellung kann in "
+"der Auswahl \"Einheiten\" im Dialog \"Optionen|Einstellungen\" vorgenommen "
+"werden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:201
+#: ../../../../build/work/app/i18n/custmsg.h:162
+msgid ""
+"Tracks that are too steep or curve too tightly are drawn in the Exception "
+"color (Yellow by default). \n"
+"This helps to identify potential problem areas. \n"
+"The maximum grade and minimum radius are set on the Preferences dialog."
+msgstr ""
+"Gleise, die zu abschüssig sind oder zu enge Radien haben, werden in einer "
+"Ausnahme Farbe dargestellt (üblicherweise Gelb). \n"
+"Dies hilft um Problembereiche aufzufinden. \n"
+"Die maximale Steigung und der minimale Radius werden im Eingenschaften "
+"Dialog eingestellt."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:205
+#: ../../../../build/work/app/i18n/custmsg.h:164
+msgid ""
+"The Flip command produces a mirror-image of the selected tracks. \n"
+"If possible, right-hand turnouts are relabeled as left-hand turnouts (and "
+"vice versa)."
+msgstr ""
+"Das \"Spiegeln\" Kommando im Menü \"Ändern\" spiegelt ausgewählte "
+"Gleise. \n"
+"Falls möglich werden rechte Weichen in linke Weichen umbenannt oder linke in "
+"rechte."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:208
+#: ../../../../build/work/app/i18n/custmsg.h:166
+msgid ""
+"Then Ungroup command will break turnouts and structures into individual "
+"track, line and shape segments. \n"
+"You can modify each segment and add new ones. \n"
+"Then use the Group command to update the definition."
+msgstr ""
+"Das Kommando \"Verwalten|Gruppierung aufheben\" trennt Weichen und oder "
+"Strukturen in einzelne Gleise, Linien oder Segmente auf. \n"
+"Sie können nun jedes einzelne Segment modifizieren neue hinzufügen usw. \n"
+"Danach benutzen Sie das Kommando \"Verwalten|Gruppieren\" um Ihre neue "
+"Definition wieder als Gruppierung zusammen zu fügen."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:212
+#: ../../../../build/work/app/i18n/custmsg.h:168
+msgid "Dimension lines show the distance between two points."
+msgstr "Maßlinien zeigen die Entfernung zwischen zwei Punkten an."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:214
+#: ../../../../build/work/app/i18n/custmsg.h:170
+msgid ""
+"A variety of Benchwork (rectangular, L-girder and T-girder) can be drawn. \n"
+"Use the Below command to move the Benchwork below the track for proper "
+"display."
+msgstr ""
+"Eine Vielzahl Unterbauten kann dargestellt werden (Rechteckformen, L-Träger "
+"und T-Träger). \n"
+"Das Kommando \"Darunter\" im Menü \"Bearbeiten\" wird benutzt um Unterbauten "
+"korrekt unter den Gleise darstellen zu können."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:217
+#: ../../../../build/work/app/i18n/custmsg.h:172
+msgid ""
+"The Turnout Designer dialogs allow you to specify the width of any attached "
+"roadbed. \n"
+"As well, the color and thickness of the lines used to represent the roadbed "
+"can be specified."
+msgstr ""
+"Der Weichendesigner ermöglicht die Angabe der Spurbreite von jedem "
+"beliebigen Gleisbett. \n"
+"Desweitern können Farbe und Stärke der Linien angegeben in denen das "
+"Gleisbett dargestellt wird."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:220
+#: ../../../../build/work/app/i18n/custmsg.h:174
+msgid ""
+"The Color dialog (on the Options menu) is used to change the color of "
+"different objects on the display. \n"
+"You can change the color of the Snap Grid and Borders, as well as Normal, "
+"Selected and Exception tracks."
+msgstr ""
+"Der Dialog \"Optionen|Farben\" wird benutzt um die Farben für verschiedene "
+"Objekte einzustellen. \n"
+"Die Farbe des Fangrasters, Ränder sowohl als auch für normale selektierte "
+"und Ausnahme Gleise können angegeben werden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:223
+#: ../../../../build/work/app/i18n/custmsg.h:176
+msgid ""
+"You can set the elevation (height) of track end-points. \n"
+"Elevations of intermediate end points can be computed automatically based on "
+"the distance to the nearest end points with defined elevations. \n"
+"Grades can also be displayed at selected end points. \n"
+"Please see the Elevations help and demo."
+msgstr ""
+"Sie können die Höhe der Endpunkte des Gleises einstellen.\n"
+"Die Höhen der dazwischen liegenden Endpunkte können automatisch auf der "
+"Grundlage der Entfernung zu den nächstgelegenen Endpunkten mit definierten "
+"Höhen berechnet werden. \n"
+"Die Steigungen können auch an ausgewählten Endpunkten angezeigt werden. \n"
+"Bitte sehen Sie sich die Hilfe und die Demo zu den Erhebungen an."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:228
+#: ../../../../build/work/app/i18n/custmsg.h:178
+msgid ""
+"Once you have elevations on some endpoints, you can use the Profile command "
+"to produce an elevation graph. \n"
+"The graph shows the selected elevations, grades and distances. \n"
+"Please see the Profile help and demo for details."
+msgstr ""
+"Sobald Sie an einigen Endpunkten Höhenangaben haben, können Sie mit dem "
+"Befehl Profil ein Höhendiagramm erstellen.\n"
+"Das Diagramm zeigt die ausgewählten Höhen, Steigungen und Abstände an. \n"
+"Einzelheiten finden Sie in der Profil-Hilfe und der Demo."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:232
+#: ../../../../build/work/app/i18n/custmsg.h:180
+msgid ""
+"You can draw tracks with wider lines for rails. \n"
+"Select the tracks and use Medium or Thick Tracks on the Edit menu."
+msgstr ""
+"Schienen können mit breiteren Linien für Gleise gezeichnet werden. \n"
+"Wählen Sie hierzu Mittlere Gleise oder Dicke Gleise im Bearbeiten Menü aus."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:235
+#: ../../../../build/work/app/i18n/custmsg.h:182
+msgid ""
+"The Helix command is used to create a Helix track. \n"
+"You specify some parameters: height, radius, number of turns, grade and "
+"vertical separation between layers. \n"
+"These values are interrelated so changing one value will affect ohers. \n"
+"Then you can place the Helix and join to other tracks as you would a Circle "
+"track."
+msgstr ""
+"Der Gleiswendel-Befehl wird zum Erstellen einer Gleispirale verwendet. \n"
+"Sie geben einige Parameter an: Höhe, Radius, Anzahl der Windungen, Grad und "
+"vertikaler Abstand zwischen den Umdrehungen.\n"
+"Diese Werte sind miteinander verbunden, so dass die Änderung eines Wertes "
+"sich auf andere Werte auswirkt.\n"
+"Dann können Sie die Helix platzieren und mit anderen Gleisen verbinden, wie "
+"Sie es bei einem Gleiskreis tun würden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:240
+#: ../../../../build/work/app/i18n/custmsg.h:184
+msgid ""
+"Many objects on the layout have labels: Turnouts/Helix/Curved Titles, Track "
+"Lenghts, End-Point Elevations, Track Elevations and Cars. \n"
+"You can turn these labels on or off with the Label Enable toggle buttons on "
+"the Display options dialog."
+msgstr ""
+"Viele Objekte im Gleisplan besitzen Beschreibungen: Weichen/Gleiswendel/"
+"Kurven Gleislängen Endpunkte Höhenangaben usw. \n"
+"Sie können diese Beschreibungen über den Dialog \"Optionen|Anzeige\" ein "
+"oder ausschalten."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:243
+#: ../../../../build/work/app/i18n/custmsg.h:186
+msgid ""
+"If you hold down the Control key when using the Rotate command, the rotation "
+"will be done in increments of 15ᅵ."
+msgstr ""
+"Durch Festhalten der Strg Taste erfolgt die Rotation beim Drehen Kommando in "
+"15° Schritten."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:245
+#: ../../../../build/work/app/i18n/custmsg.h:188
+msgid ""
+"When using the Rotate command, Shift-Right-Click displays a menu allowing "
+"you to rotate by specific amounts or to align the selected objects with "
+"another object."
+msgstr ""
+"Beim Benutzen des Befehls <Drehen> kann durch Halten der Umschalt-Taste aus "
+"einem Menü der Drehwinkel des Objektes ausgewählt werden oder das Objekt "
+"kann anhand eines anderen Objektes ausgerichtet werden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:247
+#: ../../../../build/work/app/i18n/custmsg.h:190
+msgid ""
+"This is last tip. If you have any additions or comments, please let us know."
+msgstr ""
+"Dies ist der letzte Tipp. Wenn Sie Ergänzungen oder Anmerkungen haben, "
+"lassen Sie es uns bitte wissen."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:25
+#: ../../../../build/work/app/i18n/custmsg.h:192
+msgid ""
+"The unconnected endpoints of a straight or curved track can be changed with "
+"the 'Modify Track' command.\n"
+msgstr ""
+"Die nicht verbundenen Endpunkte eines geraden oder eines gebogenen Gleise "
+"können mit 'Ändern Gleis' verändert werden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:31
+#: ../../../../build/work/app/i18n/custmsg.h:194
+msgid ""
+"The endpoint of a straight track is selected and then Left-Dragged to change "
+"its length. A blue anchor shows that the length can be extended.\n"
+msgstr ""
+"Der Endpunkt eines geraden Gleises wird ausgewählt und die Länge wird durch "
+"Ziehen mit dem linken Maus-Knopf geändert.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:48
+#: ../../../../build/work/app/i18n/custmsg.h:196
+msgid ""
+"If you try to drag the selected endpoint beyond the far endpoint, the track "
+"extends in the opposite direction.\n"
+msgstr ""
+"Wenn der ausgewählte Endpunkt über den entfernten Endpunkt hinaus gezogen "
+"wird, wird das Gleis in die entgegengesetzte Richtung erweitert.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:68
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:73
+#: ../../../../build/work/app/i18n/custmsg.h:199
+msgid ""
+"A curved track is selected and it's new endpoint is determined by the angle "
+"to the cursor. \n"
+msgstr ""
+"Ein gebogenes Gleis wird ausgewählt und der neue Endpunkt durch den Winkel "
+"des Mauszeiger festgelegt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:105
+#: ../../../../build/work/app/i18n/custmsg.h:201
+msgid "It's possible to almost create a complete circle.\n"
+msgstr "Es ist beinahe möglich, einen vollständigen Kreis zu erstellen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:202
+msgid ""
+"If you drag the mouse beyond the start of the curve the track becomes very "
+"short.\n"
+msgstr ""
+"Wenn Sie die Maus über den Startpunkt des Bogen hinaus ziehen, wird das "
+"Gleis sehr kurz.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:113
+#: ../../../../build/work/app/i18n/custmsg.h:204
+msgid "Here you are warned that the track will be too short.\n"
+msgstr "Jetzt werden Sie gewarnt, dass das Gleis zu kurz wird.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:147
+#: ../../../../build/work/app/i18n/custmsg.h:206
+msgid ""
+"If you move the cursor away from the curve, you will create a straight track "
+"tangent to the curve.\n"
+msgstr ""
+"Wenn Sie den Mauszeiger vom Bogen weg bewegen, erstellen Sie ein gerades "
+"Gleis als Tangente an dem Bogen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:169
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:174
+#: ../../../../build/work/app/i18n/custmsg.h:209
+msgid ""
+"If you adjust the endpoint of a turnout or sectional track the track is "
+"extended by a similar track segment. The extension can be \n"
+msgstr ""
+"Wenn Sie den Endpunkt einer Weiche oder eines Festgleises anpassen, wird das "
+"Gleis durch ein gerades Segment verlängert.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:210
+msgid "a straight or a curve.\n"
+msgstr "eine Gerade oder eine Kurve.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:190
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:195
+#: ../../../../build/work/app/i18n/custmsg.h:213
+msgid ""
+"You can change the radius of a straight or curved track that is connected at "
+"one endpoint by holding down the Shift key while Left-dragging on it.\n"
+msgstr ""
+"Sie können den Radius eines Bogen ändern oder ein gerades Gleis biegen, "
+"indem Sie bei gedrückter Umschalttaste und gedrücktem Mausknopf ziehen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:214
+msgid ""
+"The blue cross anchor shows that this is possible when shift is held down "
+"with no buttons.\n"
+msgstr ""
+"Das blaue Kreuz zeigt, dass dies möglich ist, wenn die Umschalttaste ohne "
+"Mausknöpfe gedrückt gehalten wird.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:209
+#: ../../../../build/work/app/i18n/custmsg.h:216
+msgid ""
+"This lets you change a straight track into a curved track (and vice versa) "
+"as well as changing the radius of a curved track.\n"
+msgstr ""
+"Dadurch können Sie ein gerades Gleis in ein gebogenes (und umgekehrt) "
+"umwandeln und den Radius eines Bogengleises ändern.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:252
+#: ../../../../build/work/app/i18n/custmsg.h:218
+msgid ""
+"You can form an extension of a straight or curved Track that is connected at "
+"one endpoint using an easement by holding down the Ctrl key while Left-"
+"dragging on it.\n"
+msgstr ""
+"Sie können ein gerades oder ein gebogenes Gleis, das an einem Endpunkt "
+"verbunden ist, mit einem Übergangsbogen erweitern, indem Sie bei gedrückter "
+"Strg-Taste und gedrücktem linkem Mausknopf ziehen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:219
+msgid ""
+"The blue half cross anchor shows that this is possible when the Ctrl key is "
+"held down with no mouse button.\n"
+msgstr ""
+"Der blaue halbe Kreuz zeigt, dass dies möglich ist, wenn die Strg ohne "
+"Mausknopf gedrückt gehalten wird.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:267
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:9
+#: ../../../../build/work/app/i18n/custmsg.h:222
+msgid "You can draw a variety of different types of benchwork:\n"
+msgstr "Sie können verschiedene Formend es Unterbau zeichnen:\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:223
+msgid "- rectangular (1x2, 2x4 etc)\n"
+msgstr "- rechteckig (1x2, 2x4 Inch usw.)\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:224
+msgid "- L girders\n"
+msgstr "- Winkelträger\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:225
+msgid "- T girders\n"
+msgstr "- T- Träger\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:226
+msgid "You can also draw them in different orientations.\n"
+msgstr "Sie können diese auch in verschiedenen Ausrichtungen zeichnen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:25
+#: ../../../../build/work/app/i18n/custmsg.h:228
+msgid "We will draw two 3x6 inch L-girders.\n"
+msgstr "Wir zeichnen zwei 3x6 Inch Winkelträger.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:43
+#: ../../../../build/work/app/i18n/custmsg.h:230
+msgid ""
+"The flange of the top L-Girders is on the outside edge of the girders. We "
+"want to change the girder so both flanges are on the inside.\n"
+msgstr ""
+"Die Schmalseite des oberen Winkelträger ist auf der Außenseite. Wir wollen "
+"die Träger so anpassen, dass beide Schmalseiten innen liegen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:231
+msgid "We will use the <Describe> command for this.\n"
+msgstr "Wir werden den <Beschreiben> Befehl dafür benutzen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:233
+msgid "Change the Orientation to Right.\n"
+msgstr "Ändere die Ausrichtung auf rechts.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:235
+msgid "Now both flanges are on the inside of the two girders.\n"
+msgstr "Jetzt sind beide Schmalseiten auf der Innenseite der beiden Träger.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:34
+#: ../../../../build/work/app/i18n/custmsg.h:237
+msgid ""
+"Pushing the <Describe> button will cancel any other command in progress.\n"
+msgstr ""
+"Durch Drücken des <Beschreiben> Knopfes wird jeder begonnene Befehl "
+"abgebrochen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:238
+msgid ""
+"Here we will begin to create a curved track which is a two step process.\n"
+msgstr ""
+"In zwei Schritten werden wir mit dem Erstellen eines gebogenen Gleises "
+"beginnen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:47
+#: ../../../../build/work/app/i18n/custmsg.h:240
+msgid ""
+"When we clicked on the <Describe> button, the current command was "
+"cancelled.\n"
+msgstr ""
+"Durch Drücken auf den <Beschreiben> Knopf wurde der begonnene Befehl "
+"abgebrochen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:241
+msgid ""
+"When in <Describe> mode, selecting any object will print a description in "
+"the Status Bar and display a dialog showing properties of the clicked-on "
+"object.\n"
+msgstr ""
+"Im <Beschreiben> Modus wird durch Auswahl eines Objektes dessen Beschreibung "
+"in der Statuszeile angezeigt und die Eigenschaften des Objektes werden in "
+"einem Dialogfenster angezeigt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:57
+#: ../../../../build/work/app/i18n/custmsg.h:243
+msgid ""
+"Certain parameters of the object can be changed. In this case we'll change "
+"the length\n"
+msgstr ""
+"Einige der Eigenschaften des Objektes können geändert werden. In diesem Fall "
+"ändern wir die Länge\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:65
+#: ../../../../build/work/app/i18n/custmsg.h:245
+msgid "Let's look at the Turnout...\n"
+msgstr "Jetzt wollen wir uns die Weiche anschauen...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:73
+#: ../../../../build/work/app/i18n/custmsg.h:247
+msgid "and change the turnout name and part no.\n"
+msgstr "und Titel und Bestellnummer der Weiche ändern.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:84
+#: ../../../../build/work/app/i18n/custmsg.h:249
+msgid "You can change the contents of text...\n"
+msgstr "Sie können den Text ändern...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:93
+#: ../../../../build/work/app/i18n/custmsg.h:251
+msgid "and its size.\n"
+msgstr "und seine Größe.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:100
+#: ../../../../build/work/app/i18n/custmsg.h:253
+msgid ""
+"If you select a note, the Description dialog appears which displays the "
+"contents of the note.\n"
+msgstr ""
+"Wenn Sie eine Notiz auswählen, erscheint ein Dialogfenster, in dem der "
+"Inhalt der Notiz angezeigt wird.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:112
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcircle.xtr:7
+#: ../../../../build/work/app/i18n/custmsg.h:256
+msgid ""
+"Like the <Curve> track command, there are several ways to create a Circle "
+"track.\n"
+msgstr ""
+"Wie beim <Bogen> Befehl gibt es mehrere Möglichkeiten, einen Gleiskreis zu "
+"erstellen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:257
+msgid ""
+"The first is to specify a fixed radius and simply drag the Circle into "
+"position.\n"
+msgstr ""
+"Die Erste ist die Vorgabe eines festen Radius und das Ziehen an die "
+"gewünschte Position.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:258
+msgid "We will change the Radius before proceeding.\n"
+msgstr "Bevor wir weitermachen, ändern wir den Radius.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcircle.xtr:24
+#: ../../../../build/work/app/i18n/custmsg.h:260
+msgid "The next method is to drag from the edge of the Circle to the center.\n"
+msgstr ""
+"Die nächste Methode ist das Ziehen von der Kreislinie zum Mittelpunkt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcircle.xtr:37
+#: ../../../../build/work/app/i18n/custmsg.h:262
+msgid ""
+"The last is similar, but you drag from the center of the Circle to the "
+"edge.\n"
+msgstr ""
+"Die letzte, aber vergleichbare, Methode ist das Ziehen vom Mittelpunkt zur "
+"Kreislinie.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcircle.xtr:50
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:157
+#: ../../../../build/work/app/i18n/custmsg.h:265
+msgid ""
+"We have built a siding using Sectional track and have 2 End-Points that "
+"don't line up and are not connected automatically when placing the sectional "
+"track.\n"
+msgstr ""
+"Wir haben ein Ausweichgleis erstellt und haben zwei Endpunkte erhaltem, die "
+"beim Setzen von Festgleisen nicht automatisch verbunden wurden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:162
+#: ../../../../build/work/app/i18n/custmsg.h:267
+msgid ""
+"We use the <Connect> command to adjust neighboring tracks so the gap is "
+"closed.\n"
+msgstr ""
+"Wir benutzen den <Zusammenfügen> Befehl, um die benachbarten Gleise so "
+"auszurichten, dass die Lücke geschlossen ist.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:268
+msgid ""
+"Note: the adjustments are only done on tracks which have only 1 or 2 "
+"connections. In this example the Turnouts would not be affected.\n"
+msgstr ""
+"Achtung: die Anpassungen wurden nur an Gleisen mit einer oder zwei "
+"Verbindungsn gemacht. In diesem Besipiel wurden die Weichen nicht "
+"verändert.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:175
+#: ../../../../build/work/app/i18n/custmsg.h:270
+msgid "And now the gap is closed.\n"
+msgstr "Und jetzt ist die Lücke geschlossen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:181
+#: ../../../../build/work/app/i18n/custmsg.h:272
+msgid "Other tracks have been shifted slightly to close the gap.\n"
+msgstr "Andere Gleise wurden leicht verschoben, um die Lücke zu schliessen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:188
+#: ../../../../build/work/app/i18n/custmsg.h:274
+msgid "You can see these slight mis-alignments.\n"
+msgstr "Sie können die kleinen Versätze sehen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:275
+msgid "But they will have no effect when the layout is actually built.\n"
+msgstr ""
+"Aber diese werden keinen Einfluss haben, wenn die Anlage später gebaut "
+"wird.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:196
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:353
+#: ../../../../build/work/app/i18n/custmsg.h:278
+msgid ""
+"After working with Sectional track you might get to point where these mis-"
+"alignments have accumulated and you wish to remove them.\n"
+msgstr ""
+"Nachdem Sie mit Festgleisen gearbeitet haben, haben sich diese Versätze "
+"aufgebaut und Sie wollen diese entfernen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:279
+msgid ""
+"You can remove these slight mis-alignments by tightening the tracks starting "
+"from a unconnected End-Point. Use Shift-Left-Click with the <Connect> "
+"command.\n"
+msgstr ""
+"Sie können diese kleinen Versätze durch Zusammenziehen der Gleise entfernen. "
+"Beginnen Sie an einem nicht verbundenen Endpunkt durch Drücken der Umschalte-"
+"Taste beim Deücken des <Zusammenfügen> Knopfes.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:280
+msgid "First use the <Split> command to disconnect the tracks.\n"
+msgstr ""
+"Zuerst benutzen Sie den <Trennen> Befehl um die Verbindung der Gleise zu "
+"lösen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:363
+#: ../../../../build/work/app/i18n/custmsg.h:282
+msgid ""
+"Then with the <Connect> command, Shift-Left-Click on the 2 End-Points.\n"
+msgstr ""
+"Dank ativieren Sie den <Verbinden> Befehl und Klicken bei gedrückter "
+"Umschaltetaste auf die beiden Endpunkte.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:378
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:199
+#: ../../../../build/work/app/i18n/custmsg.h:285
+msgid "In example shows a simple figure-8 layout using Sectional track.\n"
+msgstr "In diesem Besipiel wird aus Festgleisen eine \"8\" gelegt.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:286
+msgid ""
+"You will notice that the tracks do not line up exactly in one location.\n"
+msgstr ""
+"Wie Sie sehen, sind die Gleise an einer Stelle nicht exakt ausgerichtet.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:211
+#: ../../../../build/work/app/i18n/custmsg.h:288
+msgid ""
+"We can use the <Connect> command to move the connecting tracks slightly and "
+"connect the 2 End-Points.\n"
+msgstr ""
+"Mit dem <Verbinden> Befehl können wir die zu verbindenden Gleise leicht "
+"verschiebenund die beiden Endpunkte verbinden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:224
+#: ../../../../build/work/app/i18n/custmsg.h:290
+msgid "The two End-Points are now aligned and connected.\n"
+msgstr "Die beiden Endpunkte sind jetzt ausgerichtet und verbunden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:231
+#: ../../../../build/work/app/i18n/custmsg.h:292
+msgid "The connection was made by adding small gaps in other tracks.\n"
+msgstr ""
+"Die Verbindung wurde hergestellt, in dem kleine Lücken zwischen andere "
+"Gleise eingefügt wurden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:238
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:7
+#: ../../../../build/work/app/i18n/custmsg.h:295
+msgid "There are several ways to create a Curved track.\n"
+msgstr "Es gibt mehrere Möglichkeiten, ein gebogenes Gleis zu erstellen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:296
+msgid ""
+"You can choose which to use by clicking on the small button to the left of "
+"<Curve> command button if the current Curve command is not the one you "
+"want.\n"
+msgstr ""
+"Sie können zwischen diesen wählen, in dem Sie auf den kleinen Knopf neben "
+"dem <Bogen> Knopf drücken.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:297
+msgid ""
+"The first is by clicking on the first End-Point and dragging in the "
+"direction of the Curve.\n"
+msgstr ""
+"In der ersten Möglichkeit wird dieser durch Auswahl des ersten Endpunktes "
+"und Ziehen in die Richtung des Bogen erstellt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:20
+#: ../../../../build/work/app/i18n/custmsg.h:299
+msgid ""
+"You will see a straight track with a double ended Red arrow at the end.\n"
+msgstr ""
+"Sie sehen ein gerades Gleis mit einem roten Pfeil mit zwei Spitzen am Ende.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:300
+msgid "Click and drag on one of the Red arrows to complete the Curve.\n"
+msgstr ""
+"Klicken und ziehen Sie eine der roten Spitzem um den Bogen zu "
+"vervollständigen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:302
+msgid ""
+"The next method is to click at one End-Point and drag to the center of the "
+"Curve.\n"
+msgstr ""
+"Die nächste Methode ist das Klicken auf einen Endpunkt und das Ziehen zum "
+"Mittelpunkt der Kurzve.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:50
+#: ../../../../build/work/app/i18n/custmsg.h:304
+msgid ""
+"Now you will see the double ended Red arrow connected to the center of the "
+"Curve marked by a small circle.\n"
+msgstr ""
+"Wie vorher sehen Sie den roten Pfeil mit zwei Spitzen, der mit dem "
+"Mittelpunkt des Bogen verbunden ist. Dieser ist mit einem kleinen Kreis "
+"markiert.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:305
+msgid "As before, drag on one of the Red arrows to complete the Curve.\n"
+msgstr ""
+"Wie schon vorher beenden Sie den Bogen, indem Sie an einer der Pfeilspitzemn "
+"ziehen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:307
+msgid ""
+"The next method is similar to the last except that you drag first from the "
+"center of the Curve to one End-Point.\n"
+msgstr ""
+"Die nächste Methode ist vergleichbar zur vorherigen, allerdings Ziehen Sie "
+"zuerst vom Mittelpunkt zu einem Endpunkt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:80
+#: ../../../../build/work/app/i18n/custmsg.h:309
+msgid "Once again, drag on a Red arrow to complete the Curve.\n"
+msgstr ""
+"Auch diesmal ziehen Sie an der roten Pfeilspitze um den Bogen zu vollenden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:90
+#: ../../../../build/work/app/i18n/custmsg.h:311
+msgid ""
+"The last method begins by drawing a line between the two End-Points of the "
+"Curve. This forms the Chord of the Curve.\n"
+msgstr ""
+"Bei der letzten Methode beginnen Sie, indem Sie eine Linie zwischen den "
+"beiden Endpunkten ziehen. Diese bildet die Sehne des Bogen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:108
+#: ../../../../build/work/app/i18n/custmsg.h:313
+msgid "Now drag on a Red arrow to complete the Curve.\n"
+msgstr "Jetzt ziehen Sie an der roten Pfeilspitze um den Bogen zu erstellen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:118
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:112
+#: ../../../../build/work/app/i18n/custmsg.h:316
+msgid "This demo will construct a control panel for part of a bigger layout.\n"
+msgstr ""
+"In dieser Demo wird ein Steuerpult für einen Teil einer größeren Anlage "
+"erstellt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:117
+#: ../../../../build/work/app/i18n/custmsg.h:318
+msgid "For our control panel we will use Œ\" lines. \n"
+msgstr "Für unser Pult werden wir 1/2\" breite Linien benutzen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:319
+msgid "Also, we will use a 1/8\" grid to lay out our controls.\n"
+msgstr ""
+"Außerdem werden wir ein 1/8\" Raster für die Ausrichtung der "
+"Steuerungselemente benutzen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:320
+msgid ""
+"First, we will set up the Snap Grid for 1\" grid lines and 8 divisions.\n"
+msgstr ""
+"Als erstes stellen wir das Fangraster auf 1\" Rasterlinien und 8 "
+"Unterteilungen ein.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:322
+msgid "Now, clear the layout and turn on the Snap Grid.\n"
+msgstr "Jetzt löschen wir den Entwurf und schalten das Fangraster ein.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:147
+#: ../../../../build/work/app/i18n/custmsg.h:324
+msgid "First step: draw the lines representing the tracks.\n"
+msgstr "Erster Schritte: zeichnen Sie die Linien, die die Gleise darstellen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:325
+msgid "We specify the line width in pixels when at 1:1 zoom.\n"
+msgstr "Wir geben die Linienbreite in Bildpunkten bei 1:1 Zoomfaktor an.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:326
+msgid ""
+"To create a 1/4\" line, divide the dots-per-inch (DPI) of your display by "
+"4.\n"
+msgstr ""
+"Um eine 1/4 Inch-breite Linie zu erstellen, teilen Sie die Punkte pro Zoll "
+"(DPI) Ihrer Anzeige durch 4.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:327
+msgid ""
+"For MS-Windows the DPI is usually 98, so choose: 98/4 = 24 (approximately).\n"
+msgstr ""
+"Unter Windows ist die Auflösung normalerweise 98, also wählen wir 98 / 4 = "
+"ca. 24.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:328
+msgid "For Linux, the DPI is usually 72, so choose: 72/4 = 18.\n"
+msgstr ""
+"Unter Linux ist die Auflösung normalerweise 72, also wählen wir 72 / 4 = "
+"18.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:495
+#: ../../../../build/work/app/i18n/custmsg.h:330
+msgid ""
+"Notice how the Snap Grid keeps the main line and siding track parallel and "
+"the connecting tracks and spur at a 45° angle.\n"
+msgstr ""
+"Beachten Sie, wie das Fangraster die Haupt- und die Nebenstrecke parallel "
+"führt und die Verbindungen und das Abstellgleis auf einem 45° Winkel hält.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:503
+#: ../../../../build/work/app/i18n/custmsg.h:332
+msgid "Second step: add LEDs for the turnout position indicators.\n"
+msgstr "ZweiterSchritt: hinzufügen der LEDs für die Weichenanzeige.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:333
+msgid "We will use T1 red and green LEDs.\n"
+msgstr "Wir werden T1 rote und grüne LEDs benutzen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:334
+msgid "We will zoom in to show positioning.\n"
+msgstr "Wir zoomen rein, um die Positionierung zu zeigen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:513
+#: ../../../../build/work/app/i18n/custmsg.h:336
+msgid ""
+"Notice that when we are in the correct position (on the 1/8\" grid), the "
+"Marker lines on the bottom and left rulers will high-light the tick marks. "
+"When both ticks are high-lighted, press the space bar to finalize the LED.\n"
+msgstr ""
+"Beachten Sie, dass die Markierungslinien unten und links die "
+"Fangmarkierungen hervorheben, wenn wird in der richtigen Position sind. "
+"Sobald beide Markierungen hervorgehoben sind, die LED durch Drücken der "
+"Leertaste fixieren.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:558
+#: ../../../../build/work/app/i18n/custmsg.h:338
+msgid "Now we'll add push buttons to control the turnouts.\n"
+msgstr "Jetzt fügen wir Drucktaster für die Steuerung der Weichen dazu.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:595
+#: ../../../../build/work/app/i18n/custmsg.h:340
+msgid "Let's add signals to our siding.\n"
+msgstr "Lassen Sie uns noch Signale an unserem Ausweichgleich aufstellen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:341
+msgid ""
+"The entrance to the siding will be protected by double headed signals.\n"
+msgstr ""
+"Die Einfahrt in das Ausweichgleich wird durch ein doppeltes Signal "
+"geschützt\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:342
+msgid "We'll select a signal from the HotBar and place it into position.\n"
+msgstr ""
+"Wir wählen ein Signal aus der Auswahlleiste aus und bringen es in Position.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:608
+#: ../../../../build/work/app/i18n/custmsg.h:344
+msgid ""
+"We rotate the signals by Shift-Right-Click and select 90° CW on the popup "
+"menu. We can not show the popup menu in demo mode, but will simulate the "
+"effect.\n"
+msgstr ""
+"Wir rotieren die Signale durch Drücken und Festhalten der Umschalttaste bei "
+"gleichzeitigem Mausklick.Aus dem Menu wählen wir 90° gegen UZS aus. Im Demo-"
+"Mode kann das Menu nicht angezeigt werden, aber wir simulieren den Effekt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:657
+#: ../../../../build/work/app/i18n/custmsg.h:346
+msgid "The exits from the siding will be protected by single headed signals.\n"
+msgstr ""
+"Die Ausfahrt aus dem Ausweichgleich wird durch ein einfaches Signal "
+"gesichert.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:711
+#: ../../../../build/work/app/i18n/custmsg.h:348
+msgid "Now for some touch-ups.\n"
+msgstr "Nun noch ein paar kleinere Nachbesserungen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:349
+msgid "Notice when the line meet at an angle there is a gap.\n"
+msgstr ""
+"Beachten Sie, dass am Berührungspunkt zwischen zwei Linien ein Spalt "
+"existiert.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:350
+msgid "We will fill this gap with the Œ\" dot.\n"
+msgstr "Wir füllen diesen Spalt mit einem 1/2 Inch großen Punkt.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:351
+msgid ""
+"Note: Win95/Win98/WinME does not support drawing lines with flat end-caps, "
+"but only with round end-caps.\n"
+msgstr ""
+"Note: Win95/Win98/WinME does not support drawing lines with flat end-caps, "
+"but only with round end-caps.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:352
+msgid "Users on those platforms will not see the gap.\n"
+msgstr "Users on those platforms will not see the gap.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:734
+#: ../../../../build/work/app/i18n/custmsg.h:354
+msgid ""
+"Add an arrow head to indicate the tracks that connect to the rest of the "
+"layout.\n"
+msgstr ""
+"Mit einer Pfeilspitze werden die Gleise markiert, die mit dem Rest der "
+"Anlage verbunden sind.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:355
+msgid "The second arrow will be flipped 180°\"\n"
+msgstr "Der zweite Pfeil wird um 180° umgedreht\"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:772
+#: ../../../../build/work/app/i18n/custmsg.h:357
+msgid "And add some labels.\n"
+msgstr "Und fügen einige Beschriftungen hinzu.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:831
+#: ../../../../build/work/app/i18n/custmsg.h:359
+msgid ""
+"We want to print our control panel onto a 8œx11 page, but the control panel "
+"is a bit too wide.\n"
+msgstr ""
+"Wir würden das Steuerpult gerne auf Paiper mit der Größe 8\"x11\" drucken, "
+"aber es ist zu breit.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:360
+msgid "Lets tighten it up a bit.\n"
+msgstr "Lassen Sie uns das ein bisschen enger zusammen packen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:361
+msgid ""
+"First turn the Snap Grid on again so any moves we make will keep objects on "
+"the grid.\n"
+msgstr ""
+"Zuerst schalten Sie bitte das Fangraster wieder ein, damit die Objekte beim "
+"Verschieben ausgerichtet bleiben.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:840
+#: ../../../../build/work/app/i18n/custmsg.h:363
+msgid "Lets move the spur track to the left 3/4\"\n"
+msgstr "Lassen Sie uns das Abstellgleis um ein 3/4 Inch nach links schieben.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:862
+#: ../../../../build/work/app/i18n/custmsg.h:365
+msgid "Now move the right side of the siding over.\n"
+msgstr "Jetzt verschieben Sie die rechte Seite des Ausweichgleises.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:882
+#: ../../../../build/work/app/i18n/custmsg.h:367
+msgid "Now, adjust the ends of the mainline and siding tracks.\n"
+msgstr ""
+"Und passen nun die Enden des Hauptgleises und des Ausweichgleises an.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:902
+#: ../../../../build/work/app/i18n/custmsg.h:369
+msgid "And move the title over as well.\n"
+msgstr "Anschliessend noch den Titel verschieben.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:919
+#: ../../../../build/work/app/i18n/custmsg.h:371
+msgid "Now you can print it.\n"
+msgstr "Jetzt können Sie das Ergebnis drucken.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:372
+msgid "The cross-hairs on the LEDs and switch show the centers for drilling.\n"
+msgstr ""
+"Fadenkreuze markieren die Mittelpunkte der LEDs und Schalter und ermöglichen "
+"so ein einfaches Bohren.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:33
+#: ../../../../build/work/app/i18n/custmsg.h:374
+msgid ""
+"Pressing the <Delete> button lets you delete selected tracks from the "
+"layout.\n"
+msgstr ""
+"Durch Drücken der <Entf>-Taste können Sie die ausgewählten Gleise vom Plan "
+"löschen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:375
+msgid ""
+"First you select the tracks you want to delete, and then press the <Delete> "
+"button.\n"
+msgstr ""
+"Zuerst wählen Sie die Gleise, die Sie löschen wollen und drücken dann "
+"<Entf>.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:47
+#: ../../../../build/work/app/i18n/custmsg.h:377
+msgid ""
+"If you delete a track connected to an easement curve, then the easement "
+"curve is deleted as well.\n"
+msgstr ""
+"Wenn Sie ein Gleis löschen, das einen Übergangsbogen besitzt, so wird dieser "
+"Übergangsbogen ebenfalls gelöscht.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:57
+#: ../../../../build/work/app/i18n/custmsg.h:379
+msgid "You can use the <Undo> command to undelete tracks.\n"
+msgstr ""
+"Sie können den <Rückgängig>-Befehl nutzen, um ein versehentliches Löschen "
+"rückgängig zu machen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:67
+#: ../../../../build/work/app/i18n/custmsg.h:381
+msgid ""
+"If you Left-Drag on the layout you can select all tracks within an area.\n"
+msgstr ""
+"Durch Ziehen mit der Maus bei gedrückter linker Taste können Sie alle Gleise "
+"in einem Bereich markieren.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:382
+msgid ""
+"Note, only tracks within the selected area are deleted. Since the easement "
+"curve is connected to a deleted track, it is deleted as well.\n"
+msgstr ""
+"Beachten Sie, dass nur Gleise innerhalb des markierten Bereichs gelöscht "
+"werden. Da der Übergangsbogen mit einem gelöschten Gleis verbunden ist, wird "
+"dieser ebenfalls gelöscht.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:80
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:385
+msgid ""
+"The demo also simulates entering values and selecting options on various "
+"dialogs.\n"
+msgstr ""
+"Die Demo simuliert die Eingabe von Werten und Auswahl von Optionen in "
+"verschiedenen Dialogfenstern.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:386
+msgid ""
+"This is simulated by drawing a rectangle around the control when values are "
+"entered or changed.\n"
+msgstr ""
+"Dies wird simuliert, in dem ein Rechteck um das Eingabefeld gezeichnet wird, "
+"wenn Werte eingegeben oder geändert werden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:13
+#: ../../../../build/work/app/i18n/custmsg.h:388
+msgid ""
+"Here we are going to make some changes to the Display dialog. Notice how "
+"this is simulated.\n"
+msgstr ""
+"Hier machen wir Änderungen im Anzeige-Dialog. Beachten Sie, wie das "
+"simuliert wird.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:389
+msgid "First we are setting 'Draw Tunnel' to 'Normal'\n"
+msgstr "Zuerst setzen wir 'Tunnel zeichnen' auf 'Normal'.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:21
+#: ../../../../build/work/app/i18n/custmsg.h:391
+msgid "Now we're changing 'Label Font Size' to '56'\n"
+msgstr "Jetzt ändern wir 'Schriftartgröße' nach '56'.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:26
+#: ../../../../build/work/app/i18n/custmsg.h:393
+msgid "We'll change some other options\n"
+msgstr "Wir werden einige andere Optionen ändern\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:38
+#: ../../../../build/work/app/i18n/custmsg.h:395
+msgid ""
+"This effect is only used in demonstration mode. During normal operation you "
+"will not see this.\n"
+msgstr ""
+"Dieser Effekt wird nur im Demonstrations-Modus benutzt. Während der normalen "
+"Benutzung werden Sie das nicht sehen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:45
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdimlin.xtr:117
+#: ../../../../build/work/app/i18n/custmsg.h:398
+msgid "Dimension Lines are used to mark the distances between two points.\n"
+msgstr ""
+"Maßlinien werden benutzt, um den Abstand zwischen zwei Punkten zu zeigen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:399
+msgid ""
+"Here we will create a Dimension Line to show the separation between two "
+"tracks.\n"
+msgstr ""
+"Hier erstellen wir eine Maßlinie, um den Abstand zwischen zwei parallelen "
+"Gleisen zu zeigen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdimlin.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:401
+msgid ""
+"We might also want to measure the distance between two structures. In this "
+"case we will use a larger dimension line.\n"
+msgstr ""
+"Möglicherweise wollen wir auch den Abstand zwischen zwei Gebäuden bestimmen."
+"In diesem Fall nutzen wir eine größere Maßlinie.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdimlin.xtr:143
+#: ../../../../build/work/app/i18n/custmsg.h:403
+msgid ""
+"We can use the <Describe> command to change the position of the Dimension "
+"Line and the size of the numbers.\n"
+msgstr ""
+"Der <Beschreiben> Befehl kann genutzt werden, um die Position der Maßlinie "
+"und die Größe der Zahlen zu ändern.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdimlin.xtr:161
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:406
+msgid ""
+"This example will show the effect of using easements while joining tracks.\n"
+msgstr ""
+"In diesem Beispiel wird die Wirkung der Übergangsbögen während des Verbinden "
+"von Gleisen gezeigt.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:407
+msgid "First, we will enable Cornu Easements and select Join\n"
+msgstr "Zuerst schalten wir Übergangsbögen an und wählen Verbinden aus.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:28
+#: ../../../../build/work/app/i18n/custmsg.h:409
+msgid "First select one end of the track\n"
+msgstr "Zuerst wird ein Ende des Gleises ausgewählt\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:411
+msgid "Now the end of different track\n"
+msgstr "Und jetzt das Ende eine anderen Gleises\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:49
+#: ../../../../build/work/app/i18n/custmsg.h:413
+msgid "You can reposition the ends by dragging them \n"
+msgstr "Sie können die Enden durch Ziehen verschieben \n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:65
+#: ../../../../build/work/app/i18n/custmsg.h:415
+msgid "When you are happy, Hit Enter or Space, if not use Esc\n"
+msgstr ""
+"Wenn Sie zufrieden sind, drücken Sie die Eingabetaste oder die Leertaste, "
+"wenn Sie nicht Esc\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:73
+#: ../../../../build/work/app/i18n/custmsg.h:417
+msgid ""
+"The Curve is made up of Beziers parts that smooth the shape the best way it "
+"can be in the space available\n"
+msgstr ""
+"Die Kurve besteht aus Beziers-Teilen, die die Form auf die beste Weise im "
+"verfügbaren Raum glätten.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:87
+#: ../../../../build/work/app/i18n/custmsg.h:419
+msgid "Now, we'll show traditional easements instead.\n"
+msgstr "Nun werden wir stattdessen traditionelle Übergangsbögen zeigen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:142
+#: ../../../../build/work/app/i18n/custmsg.h:421
+msgid ""
+"We've selected sharp easements. The minimum radius curve we can use will be "
+"9.75\"\n"
+msgstr ""
+"Wir haben enge Übergangsbögen ausgewählt. Der Mindestradius, den wir "
+"benutzen können, beträt 9,75\".\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:422
+msgid "Notice the label on the Easement button has changed to 'Sharp'.\n"
+msgstr ""
+"Beachten Sie, dass die Beschriftung des Knopfes <Übergangsbogen> auf 'Sharp' "
+"geändert wurde.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:157
+#: ../../../../build/work/app/i18n/custmsg.h:424
+msgid ""
+"Note the connecting curve does not quite meet the straight tracks. This the "
+"'Offset'.\n"
+msgstr ""
+"Beachten Sie. dass das Verbindungsgleis das gerade Gleis nicht genau trifft. "
+"Das ist der 'Absatz'.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:165
+#: ../../../../build/work/app/i18n/custmsg.h:426
+msgid "Here the connecting curve is too small.\n"
+msgstr "Jetzt ist der Verbindungsradius zu klein.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:175
+#: ../../../../build/work/app/i18n/custmsg.h:428
+msgid ""
+"The connecting curve is made of three tracks, the curve and two easement "
+"segments on each end.\n"
+msgstr ""
+"Die verbindende Kurve besteht aus drei Gleisen, der Kurve und den "
+"Übergangsbögen an jedem Ende.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:112
+#: ../../../../build/work/app/i18n/custmsg.h:430
+msgid ""
+"We have designed part of the layout with a siding, 2 branches and a spiral "
+"loop. We want to set elevations.\n"
+msgstr ""
+"Wir haben einen Teil eines Gleisplan mit Nebengleis, 2 Abzweigen und einer "
+"Gleiswendel entworfen. Jetzt wollen wir die Höhen festlegen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:431
+msgid "Note: make sure you set endpoint elevations on the Display dialog.\n"
+msgstr ""
+"Hinweis: Vergewissern Sie sich, dass Sie die Endpunkterhebungen im "
+"Dialogfeld Anzeige einstellen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:122
+#: ../../../../build/work/app/i18n/custmsg.h:433
+msgid "First we will set elevations at the end of the branches.\n"
+msgstr "Zuerst legen wir die Höhen am Ende der Abzweige fest.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:435
+msgid "We'll select the end of the top branch and set the Elevation to 4\"\n"
+msgstr ""
+"Wir wählen das Ende des oberen Abzweigs und legen die Höhe auf 4\" fest.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:436
+msgid "First, click on the End-Point.\n"
+msgstr "Zuerst klicken Sie auf den Endpunkt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:142
+#: ../../../../build/work/app/i18n/custmsg.h:438
+msgid "Next, pick Defined on the Elevation dialog Radio box.\n"
+msgstr "Als nächstes wählen Sie 'Fest' im Dialogfenster für das Höhenmaß.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:148
+#: ../../../../build/work/app/i18n/custmsg.h:440
+msgid "And set the Elevation to 4.\n"
+msgstr "Und setzen die Höhe auf 4.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:156
+#: ../../../../build/work/app/i18n/custmsg.h:442
+msgid "Now, select the other branch and set it's elevation to 2\"\n"
+msgstr ""
+"Jetzt wählen Sie den anderen Abzweig und legen seine Höhe auf 2\" fest.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:170
+#: ../../../../build/work/app/i18n/custmsg.h:444
+msgid "We can move the Elevation label by using Ctrl-Left-Drag\n"
+msgstr ""
+"Wir können die Höhenbeschriftung durch Ziehen mit der Maus bei gedrückter "
+"Strg+linker Mausaste verschieben.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:182
+#: ../../../../build/work/app/i18n/custmsg.h:446
+msgid "Now, we set the Elevation at one end of the Siding.\n"
+msgstr "Jetzt legen wir die Höhe an einem Ende des Nebengleises fest.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:209
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:215
+#: ../../../../build/work/app/i18n/custmsg.h:449
+msgid "We want to find the elevations where the 2 tracks cross.\n"
+msgstr ""
+"Wir wollen die Höhen der Gleise ermitteln, an denen diese sich kreuzen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:224
+#: ../../../../build/work/app/i18n/custmsg.h:451
+msgid "We picked an End-Point on the upper track.\n"
+msgstr "Wir haben einen Endpunkt am oberen Gleis ausgewählt.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:452
+msgid ""
+"XTrackCAD has computed the Elevation (2.33\") at this point based on the "
+"Elevation at the siding and a combination of the of the first Elevations.\n"
+msgstr ""
+"XTrackCAD hat die Höhe (2,33\") an dieser Stelle auf Grundlage der Höhe des "
+"Nebengleises in Verbindung mit den ersten Höhenangaben ermittelt.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:453
+msgid ""
+"We create a Computed Elevation here that will be automatically adjusted "
+"whenever the other Elevations are changed.\n"
+msgstr ""
+"Hier erstellen wir eine 'Berechnete' Höhe, die automatisch angepasst wird, "
+"wenn sich andere Höhenangaben ändern.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:243
+#: ../../../../build/work/app/i18n/custmsg.h:455
+msgid ""
+"The Compute Elevation is based on Elevations at end of both of the "
+"branches. We may want to base the Elevation on only one branch. For "
+"example if one branch was the mainline we don't want the other branch "
+"affecting this Computed Elevation.\n"
+msgstr ""
+"Die berechnete Höhe basiert auf den Höhen an den Endpunkten der beiden "
+"Abzweige. Wir wollen aber möglicherweise nur die Höhe eines Abzweigs "
+"benutzen. Das kann sinnvoll sein, wenn der Abzweig das Hauptgleis bildet und "
+"wir nicht wollen dass das andere Gleis die Höhenberechnung beeinflusst.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:456
+msgid "We do this by Ignoring the branch we don't want.\n"
+msgstr "Wir erreichen das, indem wir einen Abzweig ignorieren.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:457
+msgid "We'll ignore the lower branch.\n"
+msgstr "Wir werden den unteren Abzweig ignorieren.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:258
+#: ../../../../build/work/app/i18n/custmsg.h:459
+msgid ""
+"Notice at the endpoint where the tracks cross, we see the elevation has "
+"changed from 2.33 to 2.64.\n"
+msgstr ""
+"Beachten Sie dass sich am Endpunkt,an dem sich die Gleise kreuzen, die Höhe "
+"von 2,33 auf 2,64 geändert hat.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:264
+#: ../../../../build/work/app/i18n/custmsg.h:461
+msgid "Now we want to know the elevation of the lower track.\n"
+msgstr "Jetzt wollen wir die Höhe des unteren Gleises ermitteln.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:274
+#: ../../../../build/work/app/i18n/custmsg.h:463
+msgid "There is no endpoint on the lower track here.\n"
+msgstr "Es gibt hier keinen Endpunkt des unteren Gleises.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:464
+msgid ""
+"Use Shift-Left-Click to Split the track and create an endpoint we can use "
+"for an elevation,\n"
+msgstr ""
+"Durch Klicken mit der Maus bei gedrückter Umschalttaste wird das Gleis "
+"getrennt und ein Endpunkt, den wir für die Festlegung der Höhe nutzen "
+"können, eingefügt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:287
+#: ../../../../build/work/app/i18n/custmsg.h:466
+msgid "and create another Computed Elevation point.\n"
+msgstr "Wir erstellen einen neuen berechneten Höhenpunkt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:302
+#: ../../../../build/work/app/i18n/custmsg.h:468
+msgid "Now we want to label the grade on this section of track.\n"
+msgstr "Jetzt zeigen wir die Steigung auf diesem Gleisabschnitt an.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:311
+#: ../../../../build/work/app/i18n/custmsg.h:470
+msgid ""
+"Again, since there is no endpoint nearby, we split the track to create an "
+"endpoint we can use,\n"
+msgstr ""
+"Auch hier ist wieder kein Endpunkt in der Nähe, daher trennen wir das Gleis "
+"um einen nutzbaren Endpunkt zu erhalten.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:321
+#: ../../../../build/work/app/i18n/custmsg.h:472
+msgid "and create a grade marker.\n"
+msgstr "und erstellen wir eine Steigungsbeschriftung.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:335
+#: ../../../../build/work/app/i18n/custmsg.h:474
+msgid "Note the marker has an arrow pointing in the upwards direction.\n"
+msgstr ""
+"Beachten Sie, dass die Markierung einen Pfeil besitzt, der in Richtung des "
+"Anstiegs zeigt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:344
+#: ../../../../build/work/app/i18n/custmsg.h:476
+msgid ""
+"The last thing we want to do is to create a Station label that we'll use in "
+"the <Profile> command.\n"
+msgstr ""
+"Als letzten Schritt erstellen wir noch eine Beschriftung für einen Bahnhof, "
+"den wir im <Höhenprofil> Befehl benutzen werden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:358
+#: ../../../../build/work/app/i18n/custmsg.h:478
+msgid "Now, set the Elevation to Station and enter the its name.\n"
+msgstr ""
+"Jetzt setzen Sie die Höhenmarkierung auf 'Bahnhof' und geben den Namen "
+"ein.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:376
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:31
+#: ../../../../build/work/app/i18n/custmsg.h:481
+msgid ""
+"XTrackCAD can help find tracks that are curved too sharply or are too "
+"steep. These tracks are Exception tracks and are drawn in the Exception "
+"track color.\n"
+msgstr ""
+"XTrackCAD kann Ihnen helfen, Gleise zu finden, die einen zu engn Radius "
+"bilden oder die zu steil ansteigen. Diese Gleise sind Ausnahmegleise und "
+"werden in der Ausnahmegleisfarbe dargestellt.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:482
+msgid ""
+"In this example we have a curved track with radius of 9\" and a straight "
+"track with a grade of 3.8%.\n"
+msgstr ""
+"In diesem Besipiel haben wir eine Kurve mit einem Radius von 9,5\" und ein "
+"gerades Gleis auf einer 3.8% Steigung.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:483
+msgid " \n"
+msgstr " \n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:485
+msgid ""
+"The Layout dialog shows the Minimum Track Radius is 9\" and the Maximum "
+"Track Grade is 5%.\n"
+msgstr ""
+"Im den Optionen für den Gleisplan sehen wir, dass der Mindestradius mit 9\" "
+"und die maximale Steigung mit 5% festgelegt sind.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:48
+#: ../../../../build/work/app/i18n/custmsg.h:487
+msgid ""
+"If we make the curved track sharper it will be drawn in the Exception "
+"color.\n"
+msgstr ""
+"Verringern wir den Radius der Kurve, so wird das Gleis mit der Ausnahmefarbe "
+"dargestellt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:61
+#: ../../../../build/work/app/i18n/custmsg.h:489
+msgid ""
+"If we make the straight track steeper it will also be drawn in the Exception "
+"color.\n"
+msgstr ""
+"Vergrößern wir die Steigung des geraden Gleises, so wird das Gleis ebenfalls "
+"in der Ausnahmefarbe dargestellt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:78
+#: ../../../../build/work/app/i18n/custmsg.h:491
+msgid ""
+"You can change the Exception color on the Colors dialog from the Options "
+"menu.\n"
+msgstr ""
+"Die Ausnahmefarbe kann im Farbdialogfenster des Optionen-Menus geändert "
+"werden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:85
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:21
+#: ../../../../build/work/app/i18n/custmsg.h:494
+msgid ""
+"The unconnected endpoint of any track can also be extended with the <Modify> "
+"command using Right-Drag.\n"
+msgstr ""
+"Die nicht verbundenen Endpunkte eines geraden oder eines gebogenen Gleise "
+"können mit dem Befehl 'Ändern ' udn Rechts-Ziehen der Maus verändert "
+"werden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:26
+#: ../../../../build/work/app/i18n/custmsg.h:496
+msgid "Select the endoint and Right-Drag.\n"
+msgstr "Endpunkt auswählen und mit rechter Maustaste ziehen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:34
+#: ../../../../build/work/app/i18n/custmsg.h:498
+msgid "The extending track can be straight...\n"
+msgstr "Die Erweiterung kann gerade sein...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:44
+#: ../../../../build/work/app/i18n/custmsg.h:500
+msgid "... or curved.\n"
+msgstr "...oder gebogen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:51
+#: ../../../../build/work/app/i18n/custmsg.h:502
+msgid ""
+"If you extend a straight or curved flex track and enable Easements then an "
+"Easement curve will be automatically generated when you extend the track.\n"
+msgstr ""
+"Wenn die Funktion Übergangsbogen aktiv ist, während Sie ein gerades oder "
+"gebogenes Flexgleis verändern, so wird ein Übergangsbogen erstellt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:65
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:124
+#: ../../../../build/work/app/i18n/custmsg.h:505
+msgid ""
+"The <Flip> command will create a mirror image of the selected objects.\n"
+msgstr ""
+"Der Befehl <Spiegeln> erzeugt ein Spiegelbild der ausgewählten Objekte.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:131
+#: ../../../../build/work/app/i18n/custmsg.h:507
+msgid "After selecting the object, drag a line which will form the mirror.\n"
+msgstr ""
+"Nach der Auswahl der Objekte, wird eine Linie gezogen die die Spiegelachse "
+"bildet.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:140
+#: ../../../../build/work/app/i18n/custmsg.h:509
+msgid "The mirror line does not have to be vertical or horizontal.\n"
+msgstr "Diese Spiegellinie muss nicht horizontal oder vertikal sein.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:149
+#: ../../../../build/work/app/i18n/custmsg.h:511
+msgid "You can also flip any number of objects.\n"
+msgstr "Sie können jede beliebige Anzahl von Objekten spiegelen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:512
+msgid "Watch what happens to the structure and turnout titles.\n"
+msgstr ""
+"Achten Sie darauf, was mit den Beschriftungen an Gebäuden und Weichen "
+"geschieht.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:163
+#: ../../../../build/work/app/i18n/custmsg.h:514
+msgid ""
+"Note that the turnout title has been changed from the Medium Right to Medium "
+"Left. When turnouts are flipped, XTrackCAD will try to find a matching "
+"turnout and if found will change the name.\n"
+msgstr ""
+"Beachten Sie auch, dass aus der mittleren Rechtsweiche eine mittlere "
+"Linksweiche wurde. Werden Weichen gespiegelt, versucht XTrackCAD eine "
+"passende Weiche zu finden und ersetzt den Namen, wenn dies gelingt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:170
+#: ../../../../build/work/app/i18n/custmsg.h:516
+msgid ""
+"Structures do not have Right and Left hand versions. Their title is changed "
+"to indicate that they were flipped.\n"
+msgstr ""
+"Gebäude haben keine rechte oder linke Version. Der veränderte Titel zeigt, "
+"dass diese gespiegelt wurden.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:517
+msgid "You can use the <Describe> command to change their title.\n"
+msgstr "Mit dem <Beschreiben> Befehl kann der Tietel wieder geändert werden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:187
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:21
+#: ../../../../build/work/app/i18n/custmsg.h:520
+msgid ""
+"The <Group> and <Ungroup> commands (on the Tools menu) are a powerful way to "
+"manipulate Turnout and Structure definitions.\n"
+msgstr ""
+"Die <Gruppieren> und <Gruppe auflösen> Befehle bilden einen leistungsfähigen "
+"Weg, Weichen- oder Gebäude-Definition zu verändern.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:521
+msgid "We'll start with a simple turnout and add a switch machine.\n"
+msgstr ""
+"Wir beginnen mit einer einfachen Weiche zu der wir einen Weichenantrieb "
+"zufügen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:50
+#: ../../../../build/work/app/i18n/custmsg.h:523
+msgid ""
+"Now that we have drawn a rough outline of a switch machine we will group it "
+"with the turnout definition.\n"
+msgstr ""
+"Nachdem wir jetzt den groben Umriß des Antriebs gezeichnet haben, gruppieren "
+"wir diesen mit der Weichen-Definition.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:524
+msgid "First we Select the objects in the new definition.\n"
+msgstr "Zuerst wählen wir die Objekte in der neuen Definition aus.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:526
+msgid "Now do the <Group> command.\n"
+msgstr "Und wenden jetzt den <Gruppieren> Befehl an.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:70
+#: ../../../../build/work/app/i18n/custmsg.h:528
+msgid ""
+"The <Group> command dialog shows the Title (Manufacturer, Description and "
+"Part Number) of the new definition. This information is taken from the "
+"Selected objects you are grouping.\n"
+msgstr ""
+"Das Dialogfenster für den <Gruppieren> Befehl zeigt den Titel (Hersteller, "
+"Beschreibung und Teilenummer) für die neue Definition an. Diese Information "
+"kommt aus den ausgewählten Teilen der Gruppe.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:76
+#: ../../../../build/work/app/i18n/custmsg.h:530
+msgid ""
+"The 'Replace with new group?' toggle will replace the Selected objects with "
+"the new definition.\n"
+msgstr ""
+"Der 'Ersetzen durch neue Definition' Schalter ermöglicht es, die "
+"ausgewählten Objekte durch die neuen Definition zu ersetzen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:83
+#: ../../../../build/work/app/i18n/custmsg.h:532
+msgid ""
+"If we don't change the Title then the new definition will replace the "
+"existing definition.\n"
+msgstr ""
+"Wenn wir den Titel nicht verändern, so ersetzt die neue Definition die "
+"bereits vorhandene.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:533
+msgid "We'll give this definition a new Description.\n"
+msgstr "Wir geben der Gruppe eine neue Beschreibung.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:94
+#: ../../../../build/work/app/i18n/custmsg.h:535
+msgid "We're done with this definition. Press Ok.\n"
+msgstr "Diese Definition ist fertig. Drücken Sie OK.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:101
+#: ../../../../build/work/app/i18n/custmsg.h:537
+msgid "You will see the updated image on the HotBar.\n"
+msgstr "Sie sehen das aktualisierte Bild in der Auswahlleiste.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:108
+#: ../../../../build/work/app/i18n/custmsg.h:539
+msgid ""
+"The <Ungroup> command replaces any Selected turnouts or structures with "
+"their parts.\n"
+msgstr ""
+"Der Befehl zum Auflösen der Gruppe ersetzt gewählte Weichen oder Gebäude "
+"durch ihre Teile.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:540
+msgid ""
+"Structures and non-track segements of turnouts are composed of Lines, "
+"Circles and other shapes. In this turnout these are the two lines and the "
+"two squares.\n"
+msgstr ""
+"Gebäude und Weichen sind aus Linien, Kreisen und anderen Formen "
+"zusammengesetzt. Zu dieser Weiche gehören zwei Linien und zwei Quadrate.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:541
+msgid ""
+"We will Ungroup this turnout and see how the individual parts can be "
+"changed.\n"
+msgstr ""
+"Wir werden diese Weiche in ihre Teile zerlegen und sehen, wie die einzelnen "
+"Teile verändert werden können.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:542
+msgid "First Select the turnout and then Ungroup it.\n"
+msgstr ""
+"Zuerste wählen Sie die Weiche aus und lösen dann die Gruppierung auf.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:123
+#: ../../../../build/work/app/i18n/custmsg.h:544
+msgid "Notice that the Title now indicates the turnout is Ungrouped.\n"
+msgstr ""
+"Beachten Sie, dass der Titel jetzt darauf hinweis, dass die Weiche aufgelöst "
+"ist.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:545
+msgid "Hit Escape to deselect everything.\n"
+msgstr "Durch Drücken von Escape wird die Auswhl aufgehoben.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:133
+#: ../../../../build/work/app/i18n/custmsg.h:547
+msgid "Now Select the lines and squares.\n"
+msgstr "Jetzt wählen Sie die Linien und Quadrate aus.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:158
+#: ../../../../build/work/app/i18n/custmsg.h:549
+msgid ""
+"We could modify these object or add new ones. For now we'll just delete "
+"them.\n"
+msgstr ""
+"Wir können diese Objekt ändern oder neue hinzufügen.Diesmal werden wir sie "
+"einfach löschen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:165
+#: ../../../../build/work/app/i18n/custmsg.h:551
+msgid "And move the Label out of the way.\n"
+msgstr "Und die Beschriftung auf die Seite schieben.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:176
+#: ../../../../build/work/app/i18n/custmsg.h:553
+msgid "Notice that the turnout has been broken into three parts.\n"
+msgstr "Beachten Sie, dass die Weiche in drei Teile zerfallen ist.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:198
+#: ../../../../build/work/app/i18n/custmsg.h:555
+msgid ""
+"Two ends of the turnout, from the frog to the end of the diverging leg and "
+"from the points to the left, are now straight track sections.\n"
+msgstr ""
+"Zwei Endpunkte der Weiche, vom Herzstück zum Ende des abzweigenden Gleis und "
+"von den Weichenzungen nach links, sind jetzt gerade Abschnitte.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:556
+msgid ""
+"The a turnout is made of a number of individual straight and curved track "
+"segements. This turnout had four segments:\n"
+msgstr ""
+"Eine Weiche besteht aus einer Anzahl von geraden und gebogenen Gleisstücken. "
+"Diese Weiche hat vier Stücke:\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:557
+msgid " 1 a short straight segment to the left of the points\n"
+msgstr " 1. ein kurzes gerades Stück, links von den Weichenzungen,\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:558
+msgid " 2 a long straight segment to the right of the points\n"
+msgstr " 2. ein langes gerades Stück, rechts von den Weichenzungen,\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:559
+msgid " 3 a curved segment from the points to the frog\n"
+msgstr ""
+" 3. ein gebogenes Stück von den Weichenzungen bis zum Herzstück, und\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:560
+msgid ""
+" 4 a straight segment from the frog to the end of the diverging leg.\n"
+msgstr ""
+" 4. ein gerades Stück vom Herzstück bis zum Ende des abzweigenden Gleis.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:561
+msgid "The first and last segments have be converted to straight tracks.\n"
+msgstr ""
+"Der erste und der letzte Gleisabschnitt wurden in gerade Gleise "
+"umgewandelt.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:562
+msgid ""
+"The second and third segments form the the body of the turnout and can not "
+"be ungrouped further.\n"
+msgstr ""
+"Der zweite und der dritte Gleisabschnitt bilden den Kern der Weiche und "
+"können nicht weiter zerlegt werden.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:563
+msgid ""
+"You can later Group this turnout with the straight segments to recreate the "
+"turnout definition. You can also add other track segments to turnout "
+"definitions.\n"
+msgstr ""
+"Sie können die Weiche mit den geraden Abschnitten später gruppieren um die "
+"Definition wiederherzustellen. Sie können auch andere Gleisabschnitte zur "
+"Weichendefinition zufügen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:242
+#: ../../../../build/work/app/i18n/custmsg.h:565
+msgid "Now, create a track and place the new turnout on it.\n"
+msgstr "Jetzt erstellen Sie bitte ein Gleis und setzen die Weiche darauf.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:260
+#: ../../../../build/work/app/i18n/custmsg.h:567
+msgid "Now suppose we want to replace the black squares with green circles.\n"
+msgstr ""
+"Nehmen wir mal an, wir wollen die schwarzen Quadrate durch grüne Kreise "
+"ersetzen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:568
+msgid "First we Select the turnout.\n"
+msgstr "Zuerst wählen wir die Weiche aus.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:272
+#: ../../../../build/work/app/i18n/custmsg.h:570
+msgid "And now Ungroup it (from the Tools Menu)\n"
+msgstr ""
+"Der ersten und der letzte Abschnitt wurden in gerade Gleise umgewandelt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:277
+#: ../../../../build/work/app/i18n/custmsg.h:572
+msgid ""
+"Notice that the name has changed to indicate the turnout was Ungrouped.\n"
+msgstr ""
+"Beachten Sie, dass der Name geändert wurde, um anzuzeigen, dass die "
+"Gruppierung der Weiche aufgelöst wurde.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:283
+#: ../../../../build/work/app/i18n/custmsg.h:574
+msgid ""
+"Now, hit escape to deselect everything and then Select the 2 squares and "
+"delete them.\n"
+msgstr ""
+"Jetzt drücken Sie Escape umd die Auswahl zurückzusetzen. Dann wählen Sie die "
+"zwei Quadrate und löschen diese.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:300
+#: ../../../../build/work/app/i18n/custmsg.h:576
+msgid "Now draw the green circles...\n"
+msgstr "Jetzt zeichnen Sie die grünen Kreise...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:321
+#: ../../../../build/work/app/i18n/custmsg.h:578
+msgid "and Group the new definition.\n"
+msgstr "und gruppieren die neue Definition.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:340
+#: ../../../../build/work/app/i18n/custmsg.h:580
+msgid ""
+"Notice that the turnout in the HotBar is angled the same as the turnout on "
+"the layout. Make sure your new definition is rotated the way you want it.\n"
+msgstr ""
+"Beachten Sie, dass die Weiche in der Auswahlleiste so schräg wie die Weiche "
+"auf der Anlage ist. Stellen Sie sicher, das die neuen Definitionen so "
+"ausgerichtet sind, wie Sie es bevorzugen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:379
+#: ../../../../build/work/app/i18n/custmsg.h:582
+msgid "We can also create turnouts from simple straight and curved tracks.\n"
+msgstr ""
+"Wir können auch aus einfachen geraden und gebogenen Gleisen Weichen "
+"erstellen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:583
+msgid "We'll create two tracks that have a common endpoint.\n"
+msgstr "Wir erzeugen zwei Gleise mit einem gemeinsamen Endpunkt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:390
+#: ../../../../build/work/app/i18n/custmsg.h:585
+msgid ""
+"When we create the curve from the straight track endpoint we need to hold "
+"down the Shift key to prevent XTrackCAD from trying to join the two tracks.\n"
+msgstr ""
+"Wenn wir die Kurve vom Endpunkt der geraden Strecke aus erstellen, müssen "
+"wir die Umschalttaste gedrückt halten, um zu verhindern, dass XTrackCAD "
+"versucht, die beiden Strecken zu verbinden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:408
+#: ../../../../build/work/app/i18n/custmsg.h:587
+msgid "At this point we can modify the tracks if necessary.\n"
+msgstr ""
+"Zu diesem Zeitpunkt können die Gleise verändern, sofern das notwendig ist.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:588
+msgid "We will use the <Describe> command to change the tracks.\n"
+msgstr ""
+"Wir benutzen den Befehl <Beschreiben> um die Eigenschaften der Gleise zu "
+"verändern.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:420
+#: ../../../../build/work/app/i18n/custmsg.h:590
+msgid "We'll make the Length 7.5\".\n"
+msgstr "Wir setzen die Länge auf 7,5\".\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:591
+msgid ""
+"If we change the Length, each End-Point will be moved to shorten the track. "
+"We want to just move the Right End-Point. To control this, change the Pivot "
+"to First which means the Left End-Point will be unchanged when we change the "
+"length (or angle) of the track.\n"
+msgstr ""
+"Wenn wir die Länge verändern, wird jeder Endpunkt erschoben um das Gleis zu "
+"verkürzen.Wir wollen, dass nur der rechte Endpunkt bewegt wird. Um das zu "
+"steuern, stellen Sie den Fixpinkt auf den Ersten. Das bedeutet, dass der "
+"linke Endpunkt unverändert bleibt wenn wir die Länge (oder den Winkel) des "
+"Gleises ändern.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:430
+#: ../../../../build/work/app/i18n/custmsg.h:593
+msgid "Now when change the Length only the Right End-Point will move.\n"
+msgstr "Jetzt wird beim Ändern der Länge nur der rechte Endpunkt verschoben.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:441
+#: ../../../../build/work/app/i18n/custmsg.h:595
+msgid "Now let's look at the curved track.\n"
+msgstr "Jetzt schauen wir uns das gebogene Gleis an.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:451
+#: ../../../../build/work/app/i18n/custmsg.h:597
+msgid ""
+"Here the Left End-Point (which we don't want to move) is the Second End-"
+"Point, so we'll make that the Pivot.\n"
+msgstr ""
+"Hier ist der linke Endpunkt, den wir nicht verschieben wollen, der zweite "
+"Endpunkt. Also legen wir diesen als Fixpunkt fest.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:459
+#: ../../../../build/work/app/i18n/custmsg.h:599
+msgid "We want the curve to have a radius of 20\" and an angle of 17.5ᅵ.\n"
+msgstr ""
+"Wir wollen, dass der Bogen einen Radius von 20\" und einen Winkel von 17,5° "
+"hat.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:600
+msgid "First change the Radius...\n"
+msgstr "Zuerst ändern Sie den Radius...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:468
+#: ../../../../build/work/app/i18n/custmsg.h:602
+msgid "and the the Angular Length.\n"
+msgstr "und den Winkelabstand.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:476
+#: ../../../../build/work/app/i18n/custmsg.h:604
+msgid "Now Select both tracks...\n"
+msgstr "Jetzt bitte beide Gleise auswählen...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:492
+#: ../../../../build/work/app/i18n/custmsg.h:606
+msgid "and Group them.\n"
+msgstr "und gruppieren sie.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:503
+#: ../../../../build/work/app/i18n/custmsg.h:608
+msgid ""
+"If the two tracks have a common End-Point then they will form a Turnout and "
+"can be switched with the <Train> command. Otherwise they will just be two "
+"track segments grouped together.\n"
+msgstr ""
+"Wenn die beiden Gleise einen gemeinsamen Endpunkt haben, werden Sie eine "
+"Weiche bilden, dieim Betriebsmodus gesteuert werden kann. Andernfalls werden "
+"es einfach zwei gruppierte Gleise sein.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:510
+#: ../../../../build/work/app/i18n/custmsg.h:610
+msgid ""
+"We have created a left hand turnout and we also want a right hand version.\n"
+msgstr ""
+"Wir haben eine links abzweigende Weiche erstellt und wollen auch die rechts "
+"abzweigende Form.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:611
+msgid "We'll use the <Flip> command.\n"
+msgstr "Wir verwenden den Befehl <Spiegeln>\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:523
+#: ../../../../build/work/app/i18n/custmsg.h:613
+msgid ""
+"Drag a horizontal line that will be the mirror for the <Flip> command.\n"
+msgstr ""
+"Ziehen Sie als Spiegelstrich für den Spiegeln Befehl eine horizontale "
+"Linie.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:533
+#: ../../../../build/work/app/i18n/custmsg.h:615
+msgid "Notice the title has changed to Flipped Left.\n"
+msgstr ""
+"Beachten Sie, dass der Titel auf \"Links gespiegelt\" geändert wurde.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:616
+msgid "Now Group the turnout.\n"
+msgstr "Jetzt gruppieren Sie die Weiche\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:542
+#: ../../../../build/work/app/i18n/custmsg.h:618
+msgid "We'll change the Title and Part No for the new defintion.\n"
+msgstr ""
+"Wir werden den Titel und die Teilnummer für die neue Definition ändern.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:555
+#: ../../../../build/work/app/i18n/custmsg.h:620
+msgid ""
+"To Remove the definitions, use the Custom Management dialog on the Tools "
+"menu.\n"
+msgstr ""
+"Um Definitionen zu löschen benutzen Sie die \"Anpassungs Verwaltung\" im "
+"\"Verwalten\" Menü.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:560
+#: ../../../../build/work/app/i18n/custmsg.h:622
+msgid "Select the definitions you added and Delete them.\n"
+msgstr "Wählen Sie die zugefügten Definitionen aus udn löschen diese.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:573
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:625
+msgid ""
+"Now we will create a helix in the corner of the layout connected to 2 "
+"tracks.\n"
+msgstr ""
+"Jetzt erstellen wir in der Ecke der Anlage eine Gleiswendel, die zwei Gleise "
+"verbindet.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:28
+#: ../../../../build/work/app/i18n/custmsg.h:627
+#, c-format
+msgid ""
+"We will be creating a helix with a Elevation Difference of 12\", Grade of "
+"1.5% and limit the Vertical Separation to at least 2\".\n"
+msgstr ""
+"Wir werden eine Gleiswendel mit einem Höhenunterschied von 12\", einer "
+"Steigung von 1,5% erzeugen und den vertikale Abstand auf mindestens 2\" "
+"begrenzen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:34
+#: ../../../../build/work/app/i18n/custmsg.h:629
+msgid "First set the Elevation Difference to 12\"\n"
+msgstr "Als erstes den Höhenunterschied auf 12\" setzen\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:43
+#: ../../../../build/work/app/i18n/custmsg.h:631
+msgid "Next set the Vertical Separation to 2\"\n"
+msgstr "Als nächstes wird der vertikale Abstand auf 2\" gesetzt.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:632
+msgid "Notice how this causes the number of Turns to be set to 6\n"
+msgstr "Beachten Sie, dass hierfür 6 Windungen benötigt werden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:52
+#: ../../../../build/work/app/i18n/custmsg.h:634
+msgid "Next set the Grade to 1.5%\n"
+msgstr "Jetzt setzen die die Steigung auf 1,5%\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:635
+msgid "Notice how this causes the Radius to change.\n"
+msgstr "Beachten Sie wie dadruch der Radius verändert wurde.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:60
+#: ../../../../build/work/app/i18n/custmsg.h:637
+msgid ""
+"Setting these values changes the Radius to 21.2\" and the number of Turns to "
+"6.\n"
+msgstr ""
+"Durch Setzen dieser Werte wird der Radius auf 21,2\" und die Anzahl der "
+"Windungen auf 6 geändert.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:66
+#: ../../../../build/work/app/i18n/custmsg.h:639
+msgid ""
+"Now we specify the Angular Separation between the enterance and exit to the "
+"helix.\n"
+msgstr ""
+"Jetzt ändern wir den Winkel zwischen eingehendem und abgehendem Gleis der "
+"Wendel.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:640
+msgid "Note: this will decrease the Radius slightly.\n"
+msgstr "Beachten Sie, dass dadurch der Radius geringfügig kleiner wurde.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:76
+#: ../../../../build/work/app/i18n/custmsg.h:642
+msgid "Next we can fine tune the helix by decreasing the Radius to 15\".\n"
+msgstr ""
+"Als nächstes können wir die Wendel durch Ändern des Radius auf 15\" "
+"optimieren.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:643
+msgid "Note the change to the Grade.\n"
+msgstr "Beachten Sie die Änderung der Steigung.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:85
+#: ../../../../build/work/app/i18n/custmsg.h:645
+msgid ""
+"Lastly change the Vertical Separation to 2.5\". The number of Turns will "
+"change to 4 and the grade increase to almost 3%.\n"
+msgstr ""
+"Zum Schluss ändern die Differenz zwischen den Windungen auf 2,5\". Die "
+"Anzahl der Windungen wird auf 4 geändert und die Steigung vergrößert sich "
+"auf beinahe 3%.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:646
+msgid ""
+"Note: the Vertical Separation will be increased. This value is the "
+"Elevation Difference (12.0) divided by the total number of turns. The total "
+"number of turns is 4.25: 4 whole Turns plus a quarter turn for the Angular "
+"Separation.\n"
+msgstr ""
+"Beachten Sie dass die Windungsdifferenz sich vergrößert. Dies ist der "
+"Höhenunterschied, geteilt durch die Anzahl der Windungen. Insgesamt sind es "
+"4,25 Windungen: 4 ganze Windungen und eine viertel Umdrehung für den Winkel "
+"zwischen den Zugängen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:94
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:99
+#: ../../../../build/work/app/i18n/custmsg.h:649
+msgid ""
+"Now that the helix parameters are set we can place the helix on the layout.\n"
+msgstr ""
+"Nachdem die Eigenschaften für die Gleiswendel bestimmt sind, setzen wir "
+"diese auf die Anlage.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:112
+#: ../../../../build/work/app/i18n/custmsg.h:651
+msgid ""
+"Next, join the 2 straight tracks to the helix in the same way we join to a "
+"circle.\n"
+msgstr ""
+"Als nächstes verbinden Sie die zwei geraden Gleise mit der Wendel genauso "
+"wir Sie Gleise mit einem Kreis verbinden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:145
+#: ../../../../build/work/app/i18n/custmsg.h:653
+msgid ""
+"Notice that the length has increased because we have more than 4 turns in "
+"the helix. It is closer to 4.25 turns.\n"
+msgstr ""
+"Beachten Sie, dass sich die Länge vergrößert hat, da wir mehr als vier "
+"Windungen in der Wendel haben. Es sind nahe an 4,25 Umdrehungen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:155
+#: ../../../../build/work/app/i18n/custmsg.h:655
+msgid ""
+"Next, we assign elevations to the 2 End-Points of the helix. This will "
+"determine the grade and separation between the helix coils.\n"
+msgstr ""
+"Als nächstes legen wir die Höhen der beiden Endpunkt der Wendel fest. "
+"Dadurch werden die Steigung und derAbstand zwischen den Windungen "
+"festgelegt.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:656
+msgid ""
+"Note: we could set the elevations anywhere along the connecting tracks "
+"instead. XTrackCAD treats a helix as a single length of track for "
+"elevations.\n"
+msgstr ""
+"Beachten Sie, dass wir die Höhen auch irgendwo an den verbindenden Gleisen "
+"festlegen können. XTrackCAD behandelt bei den Höhen eine Wendel als ein "
+"durchgängiges Stück Gleis.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:176
+#: ../../../../build/work/app/i18n/custmsg.h:658
+msgid ""
+"We have set the elevations to 1\" and 13\" to produce a grade of 3.0% with "
+"2.8\" between coils.\n"
+msgstr ""
+"Wir haben die Höhen auf 1\" und 13\" gesetzt um eine Steigung von 3% mit "
+"2,8\" zwischen den Windungen zu erzeugen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:659
+msgid ""
+"You can use the <Describe> command to change the number of Turns or the "
+"Elevations at either end of the Helix. This will affect the Grade and "
+"Vertical Separation.\n"
+msgstr ""
+"Sie können den Eigenschaften Befehl benutzen, um die Anzah der Windungen "
+"oder die Höhe an den Enden der Wendel zu ändern. Dadurch ändern sich die "
+"Steigung und der Abstand.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:184
+#: ../../../../build/work/app/i18n/custmsg.h:661
+msgid "The helix description can be moved by the <Move Label> command.\n"
+msgstr ""
+"Mit dem Befehl <Verschiebe Beschriftung> kann die Beschriftung der Wendel "
+"verschoben werden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:194
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:664
+msgid ""
+"In addition to using the turnout definitions you can create 'Hand Laid "
+"Turnout'.\n"
+msgstr ""
+"Zusätzlich zu den Weichendefinitionen können Sie auch Selbstbauweichen "
+"erstellen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:665
+msgid "This is two step process:\n"
+msgstr "Das ist ein zweistufiger Prozess.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:23
+#: ../../../../build/work/app/i18n/custmsg.h:667
+msgid "1 - click on the frog and drag away to set the frog angle\n"
+msgstr ""
+"1. klicken Sie auf das Herzstück und setzen Sie durch ziehen mit gedrücktem "
+"Mausknopf den richtigen Winkel.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:29
+#: ../../../../build/work/app/i18n/custmsg.h:669
+msgid ""
+" Hint: the further you drag from the frog, the more accurate the angle.\n"
+msgstr ""
+" Hinweis: Je weiter weg Sie vom Herzstück ziehen, um so genauer lässt sich "
+"der Winkel einstellen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:34
+#: ../../../../build/work/app/i18n/custmsg.h:671
+msgid "2 - click and drag to set the position of the points\n"
+msgstr "2. Klicken und ziehen Sie um die Position der Zungen festzulegen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:42
+#: ../../../../build/work/app/i18n/custmsg.h:673
+msgid "We can create Hand Laid Turnouts on curved tracks.\n"
+msgstr "Wir können Selbstbauweichen auch auf gebogenen Gleisen erstellen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:58
+#: ../../../../build/work/app/i18n/custmsg.h:675
+msgid "A Hand Laid Turnout is composed of several parts.\n"
+msgstr "Eine Selbstbauweiche besteht aus mehreren Teilen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:67
+#: ../../../../build/work/app/i18n/custmsg.h:677
+msgid "The actual Turnout is a short portion at the points.\n"
+msgstr "Die eigentliche Weiche ist ein kleines Stück an den Weichenzungen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:77
+#: ../../../../build/work/app/i18n/custmsg.h:679
+msgid "The other parts are various straight and curved segments.\n"
+msgstr "Die anderen Teile sind verschiedene gerade und gebogene Teilstücke.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:81
+#: ../../../../build/work/app/i18n/custmsg.h:681
+msgid "The new curved turnout is also composed of several segments.\n"
+msgstr "Die neue Bogenweiche besteht ebenfalls aus mehreren Abschnitten.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:107
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:7
+#: ../../../../build/work/app/i18n/custmsg.h:684
+msgid "Welcome to the XTrackCAD demonstration.\n"
+msgstr "Willkommen bei der XTrackCAD Demonstration.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:685
+msgid ""
+"This will show some the features of XTrackCAD in an automated presentation. "
+"This window contains a number of controls and a message area (which I hope "
+"you are reading now). \n"
+msgstr ""
+"Diese wird Ihnen einige Funktionen von XTrackCAD in einer automatischen "
+"Präsentation zeigen. Dieses Fenster enthält einige Steuerungselements und "
+"einen Nachrichtenbereich, den Sie gerade lesen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:686
+msgid "The controls are:\n"
+msgstr "Die Steuerungselemente sind:\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:687
+msgid "Step - advances to the next step of the demo.\n"
+msgstr "Einzelschritt - weiter zum nächsten Schritt in der Demo.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:688
+msgid "Next - skips ahead to the next demo.\n"
+msgstr "Nächster - springt zur nächsten Demo.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:689
+msgid "Quit - exits the demo and returns to XTrackCAD.\n"
+msgstr "Beenden - verlässt die Demo und kehrt zu XTrackCAD zurück.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:690
+msgid "Speed - controls the speed of the demo.\n"
+msgstr "Geschwindigkeit - steuert die Geschwindigkeit der Demo.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:691
+msgid "Click Step now for the next message.\n"
+msgstr ""
+"Klicken Sie jetzt auf Einzelschritt um zur nächsten Nachricht zu gelangen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:23
+#: ../../../../build/work/app/i18n/custmsg.h:693
+msgid ""
+"If this is the first time you have used the demo you may want to rearrange "
+"the windows so the demo window does not obscure the main window.\n"
+msgstr ""
+"Wenn dies das erste Mal ist, dass Sie die Demo benutzen, sollten Sie die "
+"Fensterpositionen festlegen. Achten Sie dabei darauf, dass das Hauptfenster "
+"nicht durch das Demofenster verdeckt wird.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:694
+msgid ""
+"You can move the demo window now by dragging on the title bar at the top of "
+"the window. I suggest you move it to the top of your screen.\n"
+msgstr ""
+"Sie können das Demofenster jetzt durch Ziehen an der Titelleiste des "
+"Fensters verschieben. Am besten verschieben Sie es an den oberen Rand des "
+"Bildschirms.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:31
+#: ../../../../build/work/app/i18n/custmsg.h:696
+msgid ""
+"The various controls are disabled when it would be inappropiate to click on "
+"them. When the demo is running the Step button is disabled. When the demo "
+"is paused the Step button is enabled and you can click it when you are ready "
+"to view the next part of the demo.\n"
+msgstr ""
+"Die verschiedenen Steuerelement sind deaktiviert, während diese nicht "
+"nutzbar sind. Während die Demo läuft, ist der Einzelschritt-Knopf "
+"deaktiviert. Wenn die Demo angehalten ist, wird der Einzelschritt-Knopf "
+"aktiviert. Sie können darauf klicken, wenn Sie für den nächsten Schritt der "
+"Demo bereit sind.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:697
+msgid "You can click on Quit to return to XTrackCAD at any time.\n"
+msgstr ""
+"Durch Klicken auf Verlassen können Sie jederzeit zu XTrackCAD zurückkehren.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:698
+msgid "You can adjust the speed of the demonstration with the Speed control.\n"
+msgstr ""
+"Die Geschwindigkeit der Demo können Sie mit dem Geschwindigkeitsknopf "
+"anpassen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:60
+#: ../../../../build/work/app/i18n/custmsg.h:700
+msgid "The demos are designed to fit within a certain sized window.\n"
+msgstr "Die Demos sind für eine bestimmte Fenstergröße entworfen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:701
+msgid ""
+"For best results, change the size of the main XTrackCAD window so the box "
+"shape is completely visible.\n"
+msgstr ""
+"Um beste Ergebniss zu erreichen, ändern Sie die Größe des XTrackCAD "
+"Hauptfensters so, dass die das Rechteck vollständig sicht bar ist.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:702
+msgid "You can do this by clicking and dragging on a corner of the window.\n"
+msgstr ""
+"Dies können Sie erreichen, in dem Sie an der rechten unteren Ecke des "
+"Fensters ziehen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:67
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:72
+#: ../../../../build/work/app/i18n/custmsg.h:705
+msgid "This is the end of the introductory demo.\n"
+msgstr "Dies ist das Ende der Einführungsdemo.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:706
+msgid ""
+"Please click Step for the next demo or click Quit to return to XTrackCAD.\n"
+msgstr ""
+"Bitte klicken Sie Einzelschritt für die nächste Demo oder Verlassen, um zu "
+"XTrackCAD zurück zu kehren.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:708
+msgid ""
+"You can also join to and from circles. This will change the circles to "
+"curves.\n"
+msgstr ""
+"Sie können auch Gleise mit Gleiskreisen verbinden. Dadurch werden aus "
+"Kreisen Bögen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:709
+msgid "In this example we will join two circles.\n"
+msgstr "In diesem Beispiel werden wir zwei Kreise verbinden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:24
+#: ../../../../build/work/app/i18n/custmsg.h:711
+msgid ""
+"Here we've selected points on the two circles. The direction of the "
+"connections (whether clockwise or counter clockwise) is controlled by where "
+"on the circle you select the connection points.\n"
+msgstr ""
+"Hier haben wir Punkte auf zwei Kreisen ausgewählt. Die Richtung der "
+"Verbindungen, entweder im Uhrzeigersinn oder dagegen, wird aufgrund der "
+"Stellen auf den Kreisen, die Sie angewählt haben, ermittelt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:133
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:152
+#: ../../../../build/work/app/i18n/custmsg.h:714
+msgid "Now let's try a cross connection.\n"
+msgstr "Jetzt versuchen wir eine kreuzweise Verbindung.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:246
+#: ../../../../build/work/app/i18n/custmsg.h:716
+msgid ""
+"Note that the connection is from different 'ends' of the circle than in the "
+"last example.\n"
+msgstr ""
+"Beachten Sie, dass die Verbindung an anderen Punkten der Kreise ansetzt als "
+"bem letzten Beispiel.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:22
+#: ../../../../build/work/app/i18n/custmsg.h:718
+msgid "This examples shows joining tracks whose End-Points are aligned.\n"
+msgstr ""
+"Dieses Beispiel zeigt wir Gleise verbunden werden, die zueinander parallel "
+"sind.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:719
+msgid ""
+"Note the 2 pairs of tracks have End-Points that are close and aligned but "
+"not connected.\n"
+msgstr ""
+"Beachten Sie dass die Endpunkte der beiden Gleise nahe beieinander und "
+"parallel, aber nicht verbunden, sind.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:30
+#: ../../../../build/work/app/i18n/custmsg.h:721
+msgid "The first case joins the curve and straight track.\n"
+msgstr ""
+"Im ersten Fall werden eine gebogenes und ein gerades Gleis verbunden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:40
+#: ../../../../build/work/app/i18n/custmsg.h:723
+msgid "The second case will join the two straight tracks.\n"
+msgstr "Im zweiten Fall werden zwei gerade Gleise verbunden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:50
+#: ../../../../build/work/app/i18n/custmsg.h:725
+msgid "Note that the two straight tracks were combined to form one track.\n"
+msgstr ""
+"Beachten Sie, dass die beiden geraden Gleise zu einem Gleis zusammengefasst "
+"wurden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:55
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:728
+msgid ""
+"The <Join> command can also join straight and curved tracks (in either "
+"order).\n"
+msgstr ""
+"Mit dem Befehl <Verbinden> können gerade und gebogene Gleise (in jeder "
+"Reihenfolge) verbunden werden.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:729
+msgid "We will enable Cornu easements\n"
+msgstr "Zuerst schalten wir Übergangsbögen mit Cornu an.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:32
+#: ../../../../build/work/app/i18n/custmsg.h:731
+msgid "A connecting cornu track is drawn between the two tracks.\n"
+msgstr "Eine Cornu wird zwischen den beiden Gleisen gezeichnet.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:41
+#: ../../../../build/work/app/i18n/custmsg.h:733
+msgid ""
+"Notice that the curved track is extended as the connection point moves past "
+"the End-Point.\n"
+msgstr ""
+"Beachten Sie, dass das gebogene Gleis verlängert wird, wenn der "
+"Verbindungspunkt über den Endpunkt hinaus verschoben wird.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:735
+msgid ""
+"Here the connection makes the curved track wrap around. This is not a "
+"useful shape, there is a discontinuity at the end. \n"
+msgstr ""
+"Hier entsteht durch das Verbinden eine Schleife. Das ist keine sinnvolle "
+"Form, da am Ende ein Knick entsteht.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:736
+msgid "Adjusting the end point will fix it. \n"
+msgstr "Durch Anpassen des Endpunktes wird das verbessert.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:64
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnmove.xtr:18
+#: ../../../../build/work/app/i18n/custmsg.h:739
+msgid "The <Join> command can move one group of tracks to join with another.\n"
+msgstr ""
+"Mit dem Befehl <Verbinden> können Gruppen von Gleisen verschoben werden, um "
+"diese mit anderen zu verbinden.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:740
+msgid ""
+"First <Select> the tracks you want to move with Ctrl so that they are both "
+"selected.\n"
+msgstr ""
+"Zuerst wählen Sie bei gedrücketr Strg-Taste die Gleise aus, die verschoben "
+"werden sollen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnmove.xtr:36
+#: ../../../../build/work/app/i18n/custmsg.h:742
+msgid "Click <Join> and Shift-Left-Click on the two End-Points.\n"
+msgstr ""
+"Klicken Sie auf <Verbinden> und klicken dann bei gedrückter Umschalttaste "
+"auf die beiden Endpunkte.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnmove.xtr:51
+#: ../../../../build/work/app/i18n/custmsg.h:744
+msgid "The selected tracks are moved into position.\n"
+msgstr "Die ausgewählten Gleise werden an die Position verschoben.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:746
+msgid ""
+"Two straight tracks can be joined by selecting the two endoints. The "
+"selected endpoints will be those closest to the cursor when the track is "
+"selected.\n"
+msgstr ""
+"Zwei gerade Gleise können durch Auswahl der beiden Endpunkte verbunden "
+"werden. Die ausgewählten Endpunkte sind diejenigen, die dem Cursor am "
+"nächsten liegen, wenn das Gleis ausgewählt wird.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:747
+msgid "First, we will select Easements None and then select Join\n"
+msgstr ""
+"Zuerst legen wir keine Übergangsbogen fest, dann wählen wir Verbinden aus.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:26
+#: ../../../../build/work/app/i18n/custmsg.h:749
+msgid "Now we select two points on the tracks\n"
+msgstr "Jetzt wählen wir zwei Punkte auf den Gleisen aus.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:36
+#: ../../../../build/work/app/i18n/custmsg.h:751
+msgid ""
+"A connecting track is drawn between the two tracks. Notice how it moves as "
+"the cursor is dragged along the second track.\n"
+msgstr ""
+"Ein Verbindungsgleis wird zwischen den beiden Gleisen gezeichnet. Beachten "
+"Sie wie dieses neu geformt wird, wenn der Mauszeiger entlang des zweiten "
+"Gleises bewegt wird.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:47
+#: ../../../../build/work/app/i18n/custmsg.h:753
+msgid ""
+"Note that two tracks are extended if you move past the end of the track.\n"
+msgstr ""
+"Beachten Sie, dass die beiden Gleise verlängrt werden, wenn Sie denn "
+"Mauszeiger über das Ende des Gleises hinaus bewegen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:55
+#: ../../../../build/work/app/i18n/custmsg.h:755
+msgid ""
+"Notice what happens if you drag past the intersection points of the two "
+"tracks.\n"
+msgstr ""
+"Beachten Sie was passiert, wenn Sie über den Schnittpunkt der beiden Gleise "
+"hinaus ziehen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:757
+msgid "This is probably not a very useful thing to do.\n"
+msgstr "Das ist wahrscheinlich keine sinnvolle Lösung.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:70
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:90
+#: ../../../../build/work/app/i18n/custmsg.h:760
+msgid "Now we will do this with Cornu Easements \n"
+msgstr "Jetzt werden wir dies mit den Cornu-Übergangsbögen tun\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:761
+msgid "First, we will select Easements Cornu and then select Join\n"
+msgstr ""
+"Zuerst legen wir Cornu als Übergangsbogen fest, dann wählen wir Verbinden "
+"aus.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:102
+#: ../../../../build/work/app/i18n/custmsg.h:763
+msgid "Now we again select two points on the tracks\n"
+msgstr "Jetzt wählen wir wieder zwei Punkte auf dem Gleis aus\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:112
+#: ../../../../build/work/app/i18n/custmsg.h:765
+msgid ""
+"A connecting cornu is drawn between the two tracks. Notice how it behaves "
+"as the cursor is dragged along the second track.\n"
+msgstr ""
+"Eine Cornu wird zwischen den beiden Gleisen gezeichnet. Beachten Sie wie "
+"dieses neu geformt wird, wenn der Mauszeiger entlang des zweiten Gleises "
+"bewegt wird.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:123
+#: ../../../../build/work/app/i18n/custmsg.h:767
+msgid ""
+"Note that either tracks can be extended if you move past the end of it.\n"
+msgstr ""
+"Beachten Sie, dass jedes der Gleise verlängert werden kann, wenn Sie denn "
+"Mauszeiger über das Ende des Gleises hinaus bewegen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:131
+#: ../../../../build/work/app/i18n/custmsg.h:769
+msgid ""
+"Notice this time what happens if you drag past the intersection points of "
+"the two tracks.\n"
+msgstr ""
+"Beachten Sie was passiert, wenn Sie über den Schnittpunkt der beiden Gleise "
+"hinaus ziehen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:139
+#: ../../../../build/work/app/i18n/custmsg.h:771
+msgid "This is more useful because you can move the other end as well.\n"
+msgstr ""
+"Dies ist nützlicher, weil Sie auch das andere Ende verschieben können.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:150
+#: ../../../../build/work/app/i18n/custmsg.h:773
+msgid "You can add a pin to constrain the Cornu Curve to pass through it.\n"
+msgstr ""
+"Du kannst einen Marker seten sodaß die Cornu-Kurve durch diesn hindurch "
+"führt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:161
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:776
+msgid "You can connect from any track to a turntable\n"
+msgstr "Sie können jedes Gleis mit einer Drehscheibe verbinden.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:777
+msgid "With a Cornu Easement you can have a turntable as the first point.\n"
+msgstr "Mit einem Cornu-Übergang kann eien Drehscheibe der erste Punkt sein.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:38
+#: ../../../../build/work/app/i18n/custmsg.h:779
+msgid ""
+"You cannot place the connecting track too close to an existing stall track. "
+"How close you can get is controlled by the Turntable Angle on the Setup "
+"dialog.\n"
+msgstr ""
+"Ein Verbindungsgleis kann nicht zu dicht an einem existieren "
+"Drehscheibenabgang erstellt werden. Wie klein der Abstand sein darf, wird "
+"über den Drehscheibenwinkel in den Einstellungen festgelegt.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:780
+msgid "In this example it is set to 15 degrees.\n"
+msgstr "In diesem Beispiel ist dieser auf 15° eingestellt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:782
+msgid "You can drag the connecting point all round the turntable.\n"
+msgstr "Sie können den Verbindungspunkt irgendwo an die Drehscheibe ziehen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:103
+#: ../../../../build/work/app/i18n/custmsg.h:784
+msgid ""
+"As you drag away from the turntable a straight track will be drawn to the "
+"cursor postion and a curve will be drawn from the cursor to the connecting "
+"track.\n"
+msgstr ""
+"Während Sie von der Drehscheibe weg ziehen, wird ein gerades Gleis zur "
+"Position des Mauszeiger gezeichnet. Ein Gleisbogen wird vom Mauszeiger zum "
+"Verbindungsgleis gezeichnet.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:111
+#: ../../../../build/work/app/i18n/custmsg.h:786
+msgid ""
+"Now the cursor will be moved within the turntable, but the end stays on the "
+"edge of the well.\n"
+msgstr ""
+"Jetzt wird der Mauszeiger zu einer Position innerhalb der Drehscheibe "
+"bewegt, aber das Ender bleibt auf der Kante der Grube.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:161
+#: ../../../../build/work/app/i18n/custmsg.h:788
+msgid "All done.\n"
+msgstr "Fertig.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:169
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:38
+#: ../../../../build/work/app/i18n/custmsg.h:791
+msgid ""
+"The Draw Commands are used to draw straight and curved lines on the layout.\n"
+msgstr ""
+"Die Zeichenbefehle werden genutzt, um gerade oder gebogene Gleise auf dem "
+"Gleisplan zu erstellen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:46
+#: ../../../../build/work/app/i18n/custmsg.h:793
+msgid ""
+"Lines are drawn by clicking at the starting postion and dragging to the "
+"final position.\n"
+msgstr ""
+"Linien werden gezeichnet, indem der Startpunkt durch Klicken festgelegt wird "
+"und dann durch Ziehen der zusätzliche Endpunkt erstellt wird.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:794
+msgid ""
+"By default, the new line will snap to existing objects. Hold down the "
+"<Ctrl> and <Alt> keys to prevent this from happening.\n"
+msgstr ""
+"Standardmäßig wird die neue Linie an vorhandenen Objekten gefangen. Halten "
+"Sie die Tasten <Strg> und <Alt> gleichzeitig gedrückt, um dies zu "
+"verhindern.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:91
+#: ../../../../build/work/app/i18n/custmsg.h:796
+msgid "You also draw in various colors and line widths.\n"
+msgstr ""
+"Sie können auch mit unterschiedlichen Farben und Liniendicken zeichnen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:109
+#: ../../../../build/work/app/i18n/custmsg.h:798
+msgid ""
+"Like Curved Tracks, Curved Lines can be drawn by a variety of methods.\n"
+msgstr ""
+"Wie Gleisbögen können auch gebogene Linien mit unterschiedlichen Methoden "
+"gezeichnet werden.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:799
+msgid ""
+"Here we will draw a Curve by dragging from one End-Point to the other to "
+"define the chord of the Curve. Then we will drag from the center to shape "
+"the curve.\n"
+msgstr ""
+"Hier zeichnen wir eine Kurve, indem wir zuerst von Endpunkt zu Endpunkt "
+"ziehen um die Sehne der Kurve festzulegen. Dann Ziehen wir vom Mittelpunkt "
+"aus, um die Form der Kurve festzulegen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:184
+#: ../../../../build/work/app/i18n/custmsg.h:801
+msgid "Boxes are useful for drawing rectangular shapes.\n"
+msgstr ""
+"Gefüllte Rechtecke können für das Erstellen rechteckiger Formen benutzt "
+"werden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:194
+#: ../../../../build/work/app/i18n/custmsg.h:803
+msgid ""
+"Circles can be drawn by clicking on the center or edge and dragging to set "
+"the radius.\n"
+msgstr ""
+"Kreise werden gezeichnet, indem auf den Rand oder den Mittelpunkt geklickt "
+"wird. Danach wird durch Ziehen der Radius festgelegt.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:804
+msgid "Here we will drag from the Center.\n"
+msgstr "Hier beginnen wir vom Mittelpunkt aus.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:204
+#: ../../../../build/work/app/i18n/custmsg.h:806
+msgid "Lines and Shapes can be deleted by Selecting and Deleting.\n"
+msgstr ""
+"Linien und Formen können durch Auswählen und Löschen entfernt werden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:227
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:91
+#: ../../../../build/work/app/i18n/custmsg.h:809
+msgid "We also draw Polylines and filled shapes.\n"
+msgstr "Wir können auch Vielfachlinien und gefüllte Formen erstellen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:98
+#: ../../../../build/work/app/i18n/custmsg.h:811
+msgid ""
+"A Polyline is drawn by dragging to place each of the point in the Polyline.\n"
+msgstr ""
+"Eine Vielfachlinie wird gezeichnet, indem jeder Eckpunkt durch Ziehen "
+"gesetzt wird.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:125
+#: ../../../../build/work/app/i18n/custmsg.h:813
+msgid ""
+"To finish off the Polyline press the <Space> key or choose another drawing "
+"type.\n"
+msgstr ""
+"Um die Vielfachlinie zu beenden, drücken Sie die Leertaste oder wählen eine "
+"andere Zeichenoperation.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:815
+msgid "A filled Polygon is drawn in the same way.\n"
+msgstr "Ein ausgefülltes Polygon wird auf die gleiche Weise gezeichnet.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:158
+#: ../../../../build/work/app/i18n/custmsg.h:817
+msgid "When you are finished, press the <Space> key to complete the polygon.\n"
+msgstr ""
+"Wenn Sie fertig sind, drücken Sie die Taste <Leerzeichen> , um das Polygon "
+"zu vervollständigen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:165
+#: ../../../../build/work/app/i18n/custmsg.h:819
+msgid ""
+"You can use the Above and Below Commands to move lines and shapes to the "
+"front or back of the drawing.\n"
+msgstr ""
+"Sie können die Befehle Über und Unter benutzen, um Linien und Formen in den "
+"Vorder- oder Hintergrund zu verschieben.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:182
+#: ../../../../build/work/app/i18n/custmsg.h:821
+msgid "Filled Boxes and Circles work the same as line Boxes and Circles.\n"
+msgstr "Gefüllte Rechtecke und Kreis werden genauso erstellt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:199
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:8
+#: ../../../../build/work/app/i18n/custmsg.h:824
+msgid ""
+"In the drawing area of the main window you can see an hollow upwards arrow "
+"which represents the mouse cursor. In this demo the mouse will move about "
+"to show you the actions of different commands.\n"
+msgstr ""
+"Auf der Zeichenfläche des Hauptfenster sehen Sie einen hohlen Pfeil nach "
+"oben anstelle des Mauszeigers. In dieser Demo wird dieser bewegt, um Ihnen "
+"die Arbeitsweise verschiedener Befehle zu zeigen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:825
+msgid ""
+"The hollow arrow represents the mouse cursor without a mouse button being "
+"pressed.\n"
+msgstr "Der leere Pfeil entspricht dem Mauszeiger ohne gedrückte Maustaste.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:827
+msgid ""
+"When the left mouse button would be pressed, the mouse cursor appears to "
+"flash and the hollow arrow is replaced by a solid left-pointing red arrow "
+"while the button is pressed.\n"
+msgstr ""
+"Würde die Maustaste gedrückt, blinkt der Mauszeiger und wird durch einen "
+"gefüllten roten Pfeil ersetzt. Solange der linke Mausknopf gedrückt bleibt, "
+"ist der Mauszeiger ein gefüllter Pfeil.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:828
+msgid ""
+"Note: these color changes occur only during the demo to simulate mouse "
+"button presses.\n"
+msgstr ""
+"Beachten Sie, dass diese Farbänderungen nur in einer Demo auftritt um "
+"Tastendrücke anzuzeigen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:24
+#: ../../../../build/work/app/i18n/custmsg.h:830
+msgid ""
+"Moving the mouse while a mouse button is pressed is called 'dragging'.\n"
+msgstr ""
+"Das Bewegen der Maus während der Mausknopf gedrückt bleibt wird als 'Ziehen' "
+"bezeichnet.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:32
+#: ../../../../build/work/app/i18n/custmsg.h:832
+msgid ""
+"When the left mouse button is released, the mouse cursor flashes and the "
+"hollow up black arrow is restored.\n"
+msgstr ""
+"Wird der linke Mausknopf wieder losgelassen, blinkt der Mauszeiger und der "
+"hohle Pfeil wird wieder hergestellt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:40
+#: ../../../../build/work/app/i18n/custmsg.h:834
+msgid ""
+"Dragging with the right button is simulated by a blue right-facing solid "
+"cursor.\n"
+msgstr ""
+"Das Ziehen mit dem gedrückten rechten Mausknopf wird durch einen blauen, "
+"nach rechts zeigenden, Mauszeiger dargestellt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:49
+#: ../../../../build/work/app/i18n/custmsg.h:836
+msgid "Release Right Click\n"
+msgstr "Rechte Mausetaste loslassen\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:57
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:62
+#: ../../../../build/work/app/i18n/custmsg.h:839
+msgid "Sometimes the Shift key is held down while using the mouse \n"
+msgstr ""
+"Manchmal wird während des Bewegen der Maus auch die Umschalttaste gedrückt "
+"gehalten. Dies wird mit Umschalt-Klick und Umschalt-Ziehen bezeichnet.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:840
+msgid ""
+"This is indicated by an outlined arrow with the letter S near the arrow.\n"
+msgstr ""
+"Dies wird durch einen Pfeilumriss und den Buchstaben S in der Nähe des "
+"Pfeils dargestellt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:71
+#: ../../../../build/work/app/i18n/custmsg.h:842
+msgid ""
+"The left mouse button is held down with the Shift and dragged for a Left-"
+"Shift-Drag. \n"
+msgstr ""
+"Für eine Umschalt-Links-Ziehen wird der linke Mausknopf gedrückt während die "
+"Umschalt-Taste gedrückt gehalten wird.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:86
+#: ../../../../build/work/app/i18n/custmsg.h:844
+msgid "Sometimes the Control key is held down while using the mouse. \n"
+msgstr ""
+"Manchmal wird während des Bewegen der Maus auch die Strg-Taste gedrückt "
+"gehalten. Dies wird mit Strg-Klick und Strg-Ziehen bezeichnet.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:845
+msgid ""
+"This is indicated with an upward filled arrow head with the letter C near "
+"the arrow \n"
+msgstr ""
+"Dies wird durch eine nach oben gefüllte Pfeilspitze mit dem Buchstaben C in "
+"der Nähe des Pfeils angezeigt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:98
+#: ../../../../build/work/app/i18n/custmsg.h:847
+msgid ""
+"If while the Control is held the Left mouse button is held down it is a Ctrl-"
+"Move and a Ctrl-Left-Drag. \n"
+msgstr ""
+"Wenn die linke Maustaste bei gedrückter Strg gedrückt gehalten wird, handelt "
+"es sich um eine Strg-Bewegen und ein Strg-Links-Ziehen. \n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:848
+msgid ""
+"This is indicated by an an left-facing open-headed arrow with the letter C "
+"near it.\n"
+msgstr ""
+"Dies wird durch einen nach zeigenden Pfeilumriß mit dem Buchstaben C in der "
+"Nähe des Pfeils angezeigt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:114
+#: ../../../../build/work/app/i18n/custmsg.h:850
+msgid "You can also use the Control key with the Right mouse button. \n"
+msgstr "Sie können auch die Strg-Taste mit der rechten Maustaste verwenden.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:851
+msgid ""
+"This is indicated with a right-facing filled arrow with an open arrow head "
+"and the letter C near the arrow \n"
+msgstr ""
+"Dies wird durch einen nach rechts weisenden Pfeilumriß mit dem Buchstaben C "
+"in der Nähe des Pfeils angezeigt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:130
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:23
+#: ../../../../build/work/app/i18n/custmsg.h:854
+msgid ""
+"The main drawing area shows a portion of total layout. You can zoom in or "
+"zoom out by choosing 'Zoom In' or 'Zoom Out' in the 'Edit' menu, by using "
+"the Zoom buttons on the toolbar or by using the 'Page Down' and 'Page Up' "
+"keys.\n"
+msgstr ""
+"Der Hauptzeichenbereich zeigt einen Teil des gesamten Gleisplanes. Sie "
+"können diesen auf verschiedenen Wegen vergrössern oder verkleinern. Diese "
+"Möglichkeiten sind die Zoom-Auswahlen im Menupunkt Bearbeiten, die Zoom-"
+"Knöpfe in der Werkzeugleiste, die Bild hoch und runter Tasten und das "
+"Mausrad.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:855
+msgid "You can see the entire layout in the Map window.\n"
+msgstr "Den gesamten Gleisplan können Sie im Kartenfenster sehen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:33
+#: ../../../../build/work/app/i18n/custmsg.h:857
+msgid "As you Zoom Out tracks are drawn with one line instead of two.\n"
+msgstr ""
+"Wenn Sie die Ansicht verkleinern, werden Gleise durch eine anstelle von zwei "
+"Linien dargestellt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:49
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:860
+msgid ""
+"You can change what portion of the layout is shown by using the 'Map' window "
+"which shows a compressed version of the entire layout. A hilighted area of "
+"the 'Map' (in blue highlight) shows what portion of the layout is displayed "
+"in the main drawing area.\n"
+msgstr ""
+"Sie können den im Hauptzeichenfenster gezeigten Bereich des Gleisplans mit "
+"dem Karten-Fenster, das den gesamten Plan verkleinert darstellt, ändern. Ein "
+"hervorgehobener Bereich der Karte (blaue Hervorhebung) zeigt, welcher Teil "
+"des Gleisplans im Moment dort gezeigt wird.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:861
+msgid ""
+"You can Left-Drag the hilighted area in the Map window to change the "
+"displayed portion of the layout.\n"
+msgstr ""
+"Durch Ziehen des hervorgehobenen Bereichs im Karten-Fenster können Sie den "
+"angezeigten Bereich des Gleisplans verändern.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:863
+msgid ""
+"You can also Right-Drag on the Map window to set the scale and position of "
+"the Main window.\n"
+msgstr ""
+"Sie können auch Rechts-Ziehen um den Maßstab und die Position des Gleisplans "
+"im Hauptfenster zu bestimmen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:72
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmnotes.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:866
+msgid ""
+"The <Note> command lets you attach notes to various spots on the layout.\n"
+msgstr ""
+"Der Befehl <Notiz> ermöglicht es, an unterschiedlichen Stellen des "
+"Gleisplans Notien anzubringen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmnotes.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:868
+msgid ""
+"When you place a note, the Note editor window is displayed which lets you "
+"enter the note.\n"
+msgstr ""
+"Wenn Sie eine Notiz anlegen, wird der Notizeditor geöffnet, der die Eingabe "
+"eines Textes ermöglicht.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmnotes.xtr:22
+#: ../../../../build/work/app/i18n/custmsg.h:870
+msgid ""
+"If you click on a note in <Describe> mode the Note editor displays the "
+"note.\n"
+msgstr ""
+"Wenn Sie im <Beschreiben> Modus auf eine Notiz klicken, wird der Editor "
+"angezeigt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmnotes.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:872
+msgid "This is the end of the XTrackCAD Demos.\n"
+msgstr "Dies ist das Ende der XTrackCAD Demos.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:873
+msgid "Click Step to return to XTrackCAD.\n"
+msgstr "Klicken Sie auf Einzelschritt um zu XTrackCAD zurück zu kehren.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:874
+msgid "Thanks for watching.\n"
+msgstr "Danke für das Interesse.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:32
+#: ../../../../build/work/app/i18n/custmsg.h:876
+msgid "This example shows how to create parallel tracks.\n"
+msgstr "Dieses Besipiel zeigt wie paralle Gleise erstellt werden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:37
+#: ../../../../build/work/app/i18n/custmsg.h:878
+msgid ""
+"The separation is set in the <Parallel Separation> window. You should set "
+"this value before you begin to select tracks.\n"
+msgstr ""
+"Der Abstand wird im Fenster <Parallelabstand> eingestellt. Dies muss "
+"geschehen, bevor das Glaus ausgewählt wird.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:49
+#: ../../../../build/work/app/i18n/custmsg.h:880
+msgid ""
+"You control which side the parallel track will be on by moving the cursor "
+"from one side of the track centerline to the other.\n"
+msgstr ""
+"Sie können steuern, auf welcher Seite das Parallalgleis erstellt wird, indem "
+"Sie den Mauszeiger von einer Seite derr Gleismitte auf die andere bewegen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:81
+#: ../../../../build/work/app/i18n/custmsg.h:882
+msgid "When you release the mouse button the new parallel track is created.\n"
+msgstr ""
+"Sobald Sie den Mausknop loslassen, wird das parallele Gleis erstellt.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:883
+msgid ""
+"Note that the <Parallel> command remains active after you created the "
+"track. This is controlled by the Sticky dialog in the Options menu.\n"
+msgstr ""
+"Beachten Sie, dass der Befehl <Parallelgleis> aktiv bleibt nachdem Sie das "
+"Gleis erstellt haben. Dies wird durch die Einstellungen in Wiederholte "
+"Befehle festgelegt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:92
+#: ../../../../build/work/app/i18n/custmsg.h:885
+msgid "You cannot create a track parallel to a turnout.\n"
+msgstr "Zu einer Weiche können keine Parallelen erstellt werden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:172
+#: ../../../../build/work/app/i18n/custmsg.h:887
+msgid ""
+"Note that the new curved track is automatically connected to the short "
+"parallel track.\n"
+msgstr ""
+"Beachten Sie, dass das neue gebogene Gleis automatisch mit dem kurzen "
+"parallelen Gleis verbunden wird.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:180
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:19
+#: ../../../../build/work/app/i18n/custmsg.h:890
+msgid ""
+"Polylines and polygons (created with the <Draw> command) can be modified by "
+"dragging on their corners or edges.\n"
+msgstr ""
+"Vielfachlinen und Vielecke, erstellt mit dem Befehl <Zeichnen> können durch "
+"Ziehen an den Ecken und Kanten verändert werden.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:891
+msgid "First Left Click on the shape you want to modify.\n"
+msgstr ""
+"Klicken Sie zunächst mit der linken Maustaste auf die Form, die Sie ändern "
+"möchten.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:29
+#: ../../../../build/work/app/i18n/custmsg.h:893
+msgid "Then drag on the point you want to move\n"
+msgstr "Dann ziehen Sie an dem Punkt, der verschoben werden soll\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:895
+msgid "And finally press the Space bar to finish the change\n"
+msgstr ""
+"Und schließlich drücken Sie die Leertaste, um die Änderung abzuschließen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:897
+msgid "If you select the middle of an Edge a new Corner is created.\n"
+msgstr ""
+"Wenn Sie die Mitte einer Kante auswählen, wird eine neue Ecke erzeugt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:72
+#: ../../../../build/work/app/i18n/custmsg.h:899
+msgid "To delete a corner, select and then press Delete or Backspace\n"
+msgstr ""
+"Um eine Ecke zu löschen, wählen Sie diese aus und drücken dann Löschen oder "
+"Rücktaste\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:98
+#: ../../../../build/work/app/i18n/custmsg.h:901
+msgid "But you cannot have a Poly-shape with less than 3 sides.\n"
+msgstr ""
+"Aber ein Vieleck oder eine Vielfachllinie mit weniger als drei Seiten ist "
+"nicht möglich.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:126
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:126
+#: ../../../../build/work/app/i18n/custmsg.h:904
+msgid ""
+"To use the <Profile> command you first need to define Elevations on your "
+"layout.\n"
+msgstr ""
+"Um den Befehl <Höhenprofil> nutzen zu können, müssen Sie zuerst Höhen auf "
+"Ihrem Gleisplan festlegen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:905
+msgid "In this example we'll use the Elevations defined in the last example.\n"
+msgstr "In dieser Demo werden wird die Höhen aus der letzten Demo benutzen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:906
+msgid "You can move or resize the Profile dialog now if you want.\n"
+msgstr "Das Höhenprofil Fenster kann nun vergrößert werden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:135
+#: ../../../../build/work/app/i18n/custmsg.h:908
+msgid ""
+"To show the Profile you need to select a Path on the tracks of your layout.\n"
+msgstr ""
+"Um das Höhenprofil anzeigen zu können muss eine Strecke in Ihrem Plan "
+"ausgewählt werden.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:909
+msgid "Select a Defined Elevation point (marked by Gold dots).\n"
+msgstr "Eine beliebigen Punkt festgelegen, um das Höhenprofil zu beginnen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:910
+msgid "We will start with the right end of the siding.\n"
+msgstr "Wir starten am rechten Ende des Abstellgleises.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:148
+#: ../../../../build/work/app/i18n/custmsg.h:912
+msgid ""
+"The second Point is at the left end of the siding. The Path will be drawn "
+"in Purple on the layout.\n"
+msgstr ""
+"Der zweite Punkt ist das linke Ende ds Nebengleises. Der Pfad wird in Purpur "
+"auf dem Gleisplan dargestellt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:160
+#: ../../../../build/work/app/i18n/custmsg.h:914
+msgid "Now select the end of one of the Branches\n"
+msgstr "Jetzt wählen Sie das Ende eines der Abzweige aus.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:169
+#: ../../../../build/work/app/i18n/custmsg.h:916
+msgid ""
+"The Profile line is drawn in Red. This indicates that there some turnouts "
+"on that section of the Path which have more than 2 connections.\n"
+msgstr ""
+"Das Höhenprofil wird in rot gezeichnet. Das bedeutet, dass es einige Weichen "
+"auf diesem Abschnitt des Pfads gibt, die nmehr als zwei Verbindungen haben.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:917
+msgid ""
+"The grade on this part of the Path is the average and may be affected by "
+"other Elevations, such the end of the lower branch.\n"
+msgstr ""
+"Die Steigung auf diesem Teil des Pfads ist ein Durchschnittswert und knn "
+"durch andere Höhen wie dem Ende des unteren Abzweigs beeinflusst werden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:178
+#: ../../../../build/work/app/i18n/custmsg.h:919
+msgid "Now try to select the End-Point of the other branch.\n"
+msgstr "Versuchen Sie jetzt, den Endpunkt des anderen Abzweiges auszuwählen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:920
+msgid ""
+"You will get an error message because there is no route to one of the ends "
+"of the existing Path.\n"
+msgstr ""
+"Sie erhalten eine Fehlermeldung, da es keine Route zu einem der Endpunkte "
+"des existieren Pfades gibt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:187
+#: ../../../../build/work/app/i18n/custmsg.h:922
+msgid ""
+"In this case remove the last part of the Path by clicking on current end of "
+"the Path and reselect the End-Point.\n"
+msgstr ""
+"In diesem Fall entfernen Sie den letzten Teil des Pfads indem Sie auf das "
+"das gegenwärtige Ende des Pfades klicken und den Endpunkt erneut festlegen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:198
+#: ../../../../build/work/app/i18n/custmsg.h:924
+msgid "Notice that the Grade has changed on the Profile.\n"
+msgstr "Beachten Sie, dass sich die Steigung im Höhenprofil geändert hat.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:205
+#: ../../../../build/work/app/i18n/custmsg.h:926
+msgid ""
+"You can Ignore End-Points on the Path by using Shift-Right-Click to display "
+"the Profile Options popup menu and chosing Ignore.\n"
+msgstr ""
+"Sie können Endpunkte auf dem Pfad ignorieren. Dazu halten Sie die "
+"Umschalttaste während Sie mit dem rechten Mausknopf klicjken. In den "
+"Höhenprofil-Optionen wählen Sie ignorieren.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:927
+msgid ""
+"Note: We can't show the menu in demo mode but we will show the effect of a "
+"Shift Right Click and selecting ignore. We will be Ignoring the End-Point "
+"of the Turnout that is not on the Path.\n"
+msgstr ""
+"Achtung: wir können das Menu im Demo-Modus nicht zeigen, zeigen aber den "
+"Effekt daraus. Wir werden den Endpunkt der Weiche, der nicht auf dem Pfad "
+"liegt, ignorieren.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:217
+#: ../../../../build/work/app/i18n/custmsg.h:929
+msgid "Notice that part of the Profile line is redrawn in Blue.\n"
+msgstr ""
+"Beachten Sie, dass ein Teil des Höhenprofils in blauer Farbe neu gezeichnet "
+"wurde.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:930
+msgid ""
+"Also, the Computed Elevations and Grade marker on the right side of the "
+"layout have been updated.\n"
+msgstr ""
+"Außerdem wurden die berechneten Höhen und die Steigungsmarkierung auf der "
+"rechten Seite des Gleisplans aktualisiert.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:225
+#: ../../../../build/work/app/i18n/custmsg.h:932
+msgid ""
+"You can set additional Defined Elevation points using the Profile Options "
+"popup menu. These points are added to the Profile if they are on the Path.\n"
+msgstr ""
+"Sie können weitere Punkte mit festgelegter Höhe zufügen, indem Sie das "
+"Optionsmenu für Höhenprofile benutzen. Diese Punkte werden zu dem "
+"Höhenprofil zugefügt, wenn Sie auf dem Pfad liegen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:933
+msgid ""
+"We do this by Shift Right Click to display the Profile Options popup menu "
+"and selecting Define.\n"
+msgstr ""
+"Dies geschieht durch durch Umschalt-Rechtsklick um das Optionsmenu für "
+"Höhenprofile zu erhalten uns auswählen von Festlegen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:237
+#: ../../../../build/work/app/i18n/custmsg.h:935
+msgid ""
+"We've just added a Defined Elevation point to the middle of the lower "
+"branch. Notice the addition on the Profile dialog.\n"
+msgstr ""
+"Wir haben gerade eine festgelegte Höhe in der Mitte des unteren Abzweigs "
+"erstellt. Beachten Sie die Ergänzung im Höhenprofil.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:246
+#: ../../../../build/work/app/i18n/custmsg.h:937
+msgid ""
+"For the siding we defined a Station name but it's not on the Path, since the "
+"Path takes the shortest distance between points.\n"
+msgstr ""
+"Für das Ausweichgleis haben einen einen Bahnhofsnamen vergeben. Dieser ist "
+"nicht auf dem Pfad, da ein Pfad immer den kürzesten Weg zwischen Punkten "
+"nutzt.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:938
+msgid ""
+"We can Ignore one of the End-Points on a Turnout to force the Path to take "
+"the other route.\n"
+msgstr ""
+"Wir können durch Ignorieren eines des der Endpunkte an einer Weiche "
+"erzwingen, dass der Pfad die andere Route nimmt.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:939
+msgid ""
+"Again we use Shift-Right-Click to display the Profile Options menu and "
+"select ignore.\n"
+msgstr ""
+"Wieder benutzen wir Umschalt-Rechtsklick um das Optionsmenu für das "
+"Höhenprofil anzuzeigen und wählen ignorieren.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:258
+#: ../../../../build/work/app/i18n/custmsg.h:941
+msgid "Now remove the First section of the Path,\n"
+msgstr "Jetzt entfernen Sie den ersten Teil des Pfads\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:268
+#: ../../../../build/work/app/i18n/custmsg.h:943
+msgid "and reselect it.\n"
+msgstr "und wählen ihn wieder.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:277
+#: ../../../../build/work/app/i18n/custmsg.h:945
+msgid ""
+"Now the Path goes through the Station End-Point and the name appears on the "
+"Profile dialog.\n"
+msgstr ""
+"Jetzt führt der Pfad durch den Endpunkt am Bahnhof und der Name erscheint im "
+"Höhenprofil.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:286
+#: ../../../../build/work/app/i18n/custmsg.h:947
+msgid "Now we need to increase the separation where the tracks cross.\n"
+msgstr ""
+"Jetzt müssen wir den Höhenunterschied an der Stelle vergrössern, an der die "
+"Gleise sich kreuzen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:948
+msgid ""
+"The two Elevations you see here are Computed Elevations which means "
+"XTrackCAD dynamically computes the Elevation based on the Elevations of "
+"connecting tracks.\n"
+msgstr ""
+"Die beiden Höhen die Sie hier sehen, sind berechnete Werte. Das bedeutet, "
+"dass XTrackCAD die Höhe auf Grundlage verbundener Gleise berechnet.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:949
+msgid ""
+"First make the lower End-Point a Defined Elevation point using Shift-Right-"
+"Click and the Profile Options menu. You will see the End-Point marked by a "
+"Gold dot and a new line is added to the Profile dialog.\n"
+msgstr ""
+"Markieren Sie zuerst den unteren Endpunkt als festgelegt. Dies geschieht "
+"durch Umschalt-Rechtsklick und das Optionsmenu für das Höhenprofil. Sie "
+"werden sehen, dass der Endpunkt jetzt mit einem goldenen Punkt markiert ist. "
+"Dem Höhenprofil wurde eine neue Linie zugefügt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:297
+#: ../../../../build/work/app/i18n/custmsg.h:951
+msgid "Now, drag the point on the Profile Dialog to change the Elevation.\n"
+msgstr "Jetzt ziehen Sie den Punkt im Höhenprofil um die Höhe zu ändern.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:952
+msgid ""
+"Note the grade on each side of the point will be displayed at the bottom of "
+"the Profile dialog.\n"
+msgstr ""
+"Beachten Sie, dass die Steigung auf beiden Seiten des Punktes im "
+"Dialogfenster unten angezeigt wird.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:319
+#: ../../../../build/work/app/i18n/custmsg.h:954
+msgid ""
+"After we release the Profile is updated to show the new Elevation and "
+"Grade.\n"
+msgstr ""
+"Nach dem Loslassen des Mausknopfes wird das Höhenprofil aktualisiert um die "
+"neue Höhe und Steigung anzuzeigen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:326
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:119
+#: ../../../../build/work/app/i18n/custmsg.h:957
+msgid "The <Rescale> command will change the size of the selected objects.\n"
+msgstr "Der Befehl <Skalieren>verändert die Größe der ausgwählten Objekte.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:958
+msgid "First we will try rescaling by ratio.\n"
+msgstr "Zuerst skalieren wir über das Verhältnis.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:126
+#: ../../../../build/work/app/i18n/custmsg.h:960
+msgid "We are going to make everything 150% bigger.\n"
+msgstr "Wir vergrößern alles auf 150 Prozent.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:136
+#: ../../../../build/work/app/i18n/custmsg.h:962
+msgid "Note the track gauge did not change.\n"
+msgstr "Beachten Sie, dass die Spurweite nicht geändert wurde.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:143
+#: ../../../../build/work/app/i18n/custmsg.h:964
+msgid "Let's try that again.\n"
+msgstr "Lassen Sie uns das nochmals versuchen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:965
+msgid "Now we are going to convert from one scale to another.\n"
+msgstr "Jetzt ändern wir von einem Maßstab zu einem anderen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:154
+#: ../../../../build/work/app/i18n/custmsg.h:967
+msgid "We will convert everything from N scale to HO scale...\n"
+msgstr "Wir werden alles von Spur N nach Spur H0 umwandeln...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:161
+#: ../../../../build/work/app/i18n/custmsg.h:969
+msgid "and change the track gauge as well.\n"
+msgstr "und die Spurweite gleichzeitig ändern.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:169
+#: ../../../../build/work/app/i18n/custmsg.h:971
+msgid "Note that the Title of the turnout did not change.\n"
+msgstr "Beachten Sie, dass der Titel der Weiche nicht geändert wurde.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:177
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrotate.xtr:72
+#: ../../../../build/work/app/i18n/custmsg.h:974
+msgid ""
+"The <Rotate> command will pivot the Selected objects. First Click on the "
+"pivot point and then drag to Rotate the objects.\n"
+msgstr ""
+"Der Befehl <Drehen> ermöglicht das Rotieren von ausgewählten Objekten. "
+"Klicken Sie zuerst auf das Zentrum der Drehbewegung und ziehen dann, um die "
+"Objekte zu drehen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:975
+msgid ""
+"In this example we will rotate the selected structure about it's center.\n"
+msgstr ""
+"In diesem Beispiel werden wir das Gebäude um seinen Mittelpunkt drehen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrotate.xtr:135
+#: ../../../../build/work/app/i18n/custmsg.h:977
+msgid ""
+"The <Rotate> command will restrict the rotation to increments of 15° if you "
+"hold down the <Shift> and <Ctrl> keys.\n"
+msgstr ""
+"Der Drehwinkel wird auf Vielfache von 15° begrenzt, wenn Sie die Umschalt "
+"und die Strg-Taste gleichzeitig gedrückt halten.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrotate.xtr:316
+#: ../../../../build/work/app/i18n/custmsg.h:979
+msgid ""
+"There are Rotate options that you can access by Shift-Right-Click command "
+"menu and choosing 'Rotate...'.\n"
+msgstr ""
+"Es gibt Rotationsoptionen, auf die Sie über das Umschalt-Rechts-Klick-"
+"Befehlsmenü zugreifen können, indem Sie 'Rotieren...' wählen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:980
+msgid ""
+"You can rotate the selected object by a fixed rotatation (15, 30, 45, 90, "
+"180) either clockwise or counter-clockwise, or by manually entering any "
+"angle.\n"
+msgstr ""
+"Sie können das ausgewählte Objekt durch feste Drehwinkel (15, 30, 45, 90, "
+"180) entweder im oder gegen den Uhrzeigersinn oder durch manuelle Eingabe "
+"eines beliebigen Winkels drehen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:981
+msgid ""
+"The other option is 'Align' which allows you align selected objects with an "
+"unselected object. This is useful to align railside buildings with track.\n"
+msgstr ""
+"Die andere Option ist 'Ausrichten', mit der Sie ausgewählte Objekte an einem "
+"nicht ausgewählten Objekt ausrichten können. Dies ist nützlich, um "
+"schienenseitige Gebäude an der Schiene auszurichten.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:982
+msgid "Unfortunately, we can not currently demonstrate these features.\n"
+msgstr "Leider können wir diese Merkmale derzeit nicht demonstrieren.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrotate.xtr:529
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmruler.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:985
+msgid ""
+"The <Ruler> command draws a Ruler on the layout you can use to measure "
+"distances.\n"
+msgstr ""
+"Mit dem Befehl <Lineal> wird ein Lineal auf den Gleisplan gezeichnet. Dieses "
+"kann genutzt werden, um Abstände zu messen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmruler.xtr:24
+#: ../../../../build/work/app/i18n/custmsg.h:987
+msgid "If you press the <Ruler> command again the Ruler is removed.\n"
+msgstr ""
+"Wenn Sie den Befehl <Lineal> nochmals Anklicken, wird das Lineal wieder "
+"entfernt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmruler.xtr:32
+#: ../../../../build/work/app/i18n/custmsg.h:989
+msgid "But you can place it somewhere else.\n"
+msgstr "Aber Sie können dieses auch an eine andere Stelle versetzen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmruler.xtr:42
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:173
+#: ../../../../build/work/app/i18n/custmsg.h:992
+msgid "The <Select> command is used to select tracks.\n"
+msgstr "Der Befehl <Auswahl> wird benutzt, um Objekte auszuwählen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:993
+msgid "Selected tracks can be moved or rotated during the <Select> command.\n"
+msgstr "Ausgewählte Gleise können verschoben und gedreht werden.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:994
+msgid "Selected tracks can also be deleted, hidden, listed and exported.\n"
+msgstr ""
+"Ausgewählte Gleise können auch gelöscht, verborgen, aufgelistet und "
+"exportiert werden.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:995
+msgid ""
+"When you move the cursor near a track that could be selected, the track is "
+"drawn with think blue lines.\n"
+msgstr ""
+"Wenn Sie den Cursor in die Nähe eines Gleises bewegen, das ausgewählt werden "
+"könnte, wird dieses mit blauen Linien gezeichnet.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:184
+#: ../../../../build/work/app/i18n/custmsg.h:997
+msgid "A Left-Click selects a track\n"
+msgstr "Ein Klick mit der linken Maustaste wählt ein Gleis aus.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:192
+#: ../../../../build/work/app/i18n/custmsg.h:999
+msgid ""
+"The selected track will have red X's drawn where it is connected to "
+"unselected tracks. This indicates where the track will be disconnected if "
+"the selected tracks are moved, rotated or deleted.\n"
+msgstr ""
+"Am ausgewählten Gleis zeigen rote X an, wo dieses mit Gleisen verbunden ist, "
+"die nicht ausgewählt sind. Diese Verbindungen werden gelöst, wenn das "
+"ausgewählte Gleise verschoben, gedreht oder gelöscht wird. \n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1000
+msgid "A Ctrl-Left-Click adds tracks to the selection\n"
+msgstr "Mit einem Strg-Links-Klick werden Gleise zur Auswahl hinzugefügt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:211
+#: ../../../../build/work/app/i18n/custmsg.h:1002
+msgid "Selecting a selected track re-selects only it.\n"
+msgstr ""
+"Durch erneutes Auswählen eines bereits ausgewählten Gleises bleibt nur "
+"dieses ausgewählt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:219
+#: ../../../../build/work/app/i18n/custmsg.h:1004
+msgid "Selecting off all tracks de-selects them.\n"
+msgstr ""
+"Durch Klicken außerhalb des Auswahlbereichs wird die Auswahl der Gleise "
+"wieder aufgehoben.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:227
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:232
+#: ../../../../build/work/app/i18n/custmsg.h:1007
+msgid ""
+"To demonstrate Select Connected, first select two tracks at the end of a "
+"part to be selected \n"
+msgstr ""
+"Um Auswahl verbundener Gleise zu demonstrieren, wählen Sie zunächst zwei "
+"Gleise am Ende eines Teils, der ausgewählt werden soll\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:248
+#: ../../../../build/work/app/i18n/custmsg.h:1009
+msgid ""
+"Shift-Left-Click on a track will select all unselected tracks connected to "
+"the track. Selection stops at a previously selected track.\n"
+msgstr ""
+"Umschalt-Links-Klick auf ein Gleis wählt alle Gleise aus, die mit diesem "
+"verbunden sind. Der Vorgang bricht ab, sobald ein Gleis bereits ausgewählt "
+"ist.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:260
+#: ../../../../build/work/app/i18n/custmsg.h:1011
+msgid ""
+"Be careful with this because its very easy to select all tracks this way\n"
+msgstr ""
+"Seien Sie vorsichtig, denn es ist sehr einfach unbeabsichtigt alle Gleise "
+"auszuwählen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:274
+#: ../../../../build/work/app/i18n/custmsg.h:1013
+msgid "The <esc> key will deselect all objects.\n"
+msgstr "Mit der Taste <Esc> werden alle Objekte abgewählt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:282
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:287
+#: ../../../../build/work/app/i18n/custmsg.h:1016
+msgid "Left-Drag is used to select all objects within an area.\n"
+msgstr ""
+"Ziehen mit gedrückter linker Maustaste wählt alle Objekt in einem Bereich "
+"aus.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:295
+#: ../../../../build/work/app/i18n/custmsg.h:1018
+msgid "Shift-Left-Drag is used to move selected tracks.\n"
+msgstr ""
+"Links-Ziehen bei gedrückter Umschalt-Taste wird benutzt um die ausgewählten "
+"Gleise zu verschieben.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1019
+msgid ""
+"When you move selected tracks that are connected to unselected tracks, the "
+"tracks will be disconnected. These points are marked by a Red cross on the "
+"layout.\n"
+msgstr ""
+"Wenn Sie Gleise verschieben, die mit Gleisen verbunden sind, die nicht "
+"ausgewählt sind, wird die Verbindung gelöst. Diese Punkte werden durch ein "
+"rotes Kreuz auf dem Gleisplan markiert.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1020
+msgid ""
+"If the unconnected end point of a track and one being moved are close "
+"enough, two circles are displayed, showing where the tracks will be snapped "
+"together. \n"
+msgstr ""
+"Wenn ein unverbundener Endpunkt eines Gleises und der zu verschiebende nahe "
+"genug beieinander liegen, werden zwei Kreise angezeigt, die zeigen, wo die "
+"Gleise verbunden werden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:313
+#: ../../../../build/work/app/i18n/custmsg.h:1022
+msgid "Let's move the Main window to see what's going on next\n"
+msgstr ""
+"Wir werden das Hauptfenster bewegen, um zu sehen, was passiert.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:320
+#: ../../../../build/work/app/i18n/custmsg.h:1024
+msgid ""
+"Ctrl-Left-Drag rotates the selected tracks about the pivot point (which is "
+"where you started the drag)\n"
+msgstr ""
+"Strg-Rechts-Ziehen dreht die ausgewählten Gleise um das Zentrum, d.h. der "
+"Punkt an dem Sie das Ziehen begonnen haben.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:382
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:387
+#: ../../../../build/work/app/i18n/custmsg.h:1027
+msgid ""
+"Next we select the <Join Tracks> command to demonstrate \"Move To Join\" \n"
+msgstr ""
+"Als nächstes wählen wir den Befehl <Verbinde Gleise>, um \"Verschieben zum "
+"Verbinden\" zu demonstrieren\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:392
+#: ../../../../build/work/app/i18n/custmsg.h:1029
+msgid ""
+"You can use Shift-Left-Click to select an open endpoint of a selected track "
+"to join with an unselected track. \n"
+msgstr ""
+"Mit Umschalt-Links-Klick können Sie einen offenen Endpunkt eines "
+"ausgewählten Gleises auswählen, um es mit einem nicht ausgewählten Gleis zu "
+"verbinden.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1030
+msgid "We'll move the Main window again.\n"
+msgstr "Wir werden das Hauptfenster wieder bewegen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:415
+#: ../../../../build/work/app/i18n/custmsg.h:1032
+msgid ""
+"You then Left-Click on an endpoint of a unselected track to move the "
+"selected tracks to join. \n"
+msgstr ""
+"Klicken Sie dann mit der linken Maustaste auf einen Endpunkt eines nicht "
+"ausgewählten Gleises, um die ausgewählten Gleise zum Verbinden zu "
+"verschieben.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:430
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:30
+#: ../../../../build/work/app/i18n/custmsg.h:1035
+msgid "The <Split> command is used to split and disconnect tracks.\n"
+msgstr ""
+"Der Befehl <Trennen> wird benutzt, um Gleise zu zerteilen und voneinander zu "
+"trennen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:35
+#: ../../../../build/work/app/i18n/custmsg.h:1037
+msgid "Simply select the spot on the track you want to split.\n"
+msgstr ""
+"Wählen Sie einfach die Stelle des Gleises aus, an der dieses getrennt werden "
+"soll.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1038
+msgid "You cannot split turnouts (unless you hold down the Shift key).\n"
+msgstr ""
+"Weichen können nur getrennt werden, wenn Sie die Umschalttaste drücken.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:48
+#: ../../../../build/work/app/i18n/custmsg.h:1040
+msgid ""
+"If you split at spot that is already an End-Point between two tracks, or "
+"split twice at the same spot, the track is disconnected.\n"
+msgstr ""
+"Wenn Sie an einem vorhandenen Endpunkt zerteilen oder wenn die an einer "
+"Stelle doppelt zerteilen werden die Gleise getrennt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:60
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:65
+#: ../../../../build/work/app/i18n/custmsg.h:1043
+msgid "The <Tunnel> command marks selected tracks as hidden.\n"
+msgstr "Mit dem Befehl <Tunnel> verbergen Sie die ausgewählten Gleise.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1044
+msgid ""
+"A tunnel portal is drawn at the boundary between hidden and normal track.\n"
+msgstr ""
+"Ein Tunnelportal wird am Übergang zwischen sichtbarem und verborgenem Gleis "
+"gezeichnet.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1045
+msgid ""
+"How the hidden tracks are drawn (solid, dashed or invisible) is controlled "
+"by the Draw EndPts radio button group on the Setup dialog.\n"
+msgstr ""
+"Die Darstellung des verborgenen Gleises (durchgezogen, gestrichelt oder "
+"unsichtbar) kann in den Einstellungen festgelegt werden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:86
+#: ../../../../build/work/app/i18n/custmsg.h:1047
+msgid ""
+"To 'un-hide' a track just Select it again and click the Tunnel button.\n"
+msgstr ""
+"Um die Gleise wieder sichtbar zu machen, wählen Sie diese aus und "
+"wiederholen den Befehl <Tunnel>.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:100
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmstrtrk.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:1050
+msgid ""
+"Straight tracks are created by selecting the first End-Point of the track.\n"
+msgstr ""
+"Gerade Gleise werden erstellt indem der erste Endpunkt des Gleises gewählt "
+"wird.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmstrtrk.xtr:12
+#: ../../../../build/work/app/i18n/custmsg.h:1052
+msgid "Then the other End-Point is dragged to its final postion.\n"
+msgstr ""
+"Dann wird der zweite Endpunkkt durch Ziehen an die richtige Position "
+"gebracht.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmstrtrk.xtr:20
+#: ../../../../build/work/app/i18n/custmsg.h:1054
+msgid "The left mouse button is released at the final end postion.\n"
+msgstr "An diesem Punkt wird der linke Mausknopf los gelassen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmstrtrk.xtr:27
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:23
+#: ../../../../build/work/app/i18n/custmsg.h:1057
+msgid ""
+"Table Edges are used to mark the edges of the layout, either for aisles or "
+"room walls.\n"
+msgstr ""
+"Tischkanten werden benutzt um die Ränder des Gleisplans, entweder für "
+"Zugänge oder Wände benutzt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:47
+#: ../../../../build/work/app/i18n/custmsg.h:1059
+msgid "A Table Edge is attracted to the ends of other Table Edges.\n"
+msgstr ""
+"Eine Tischlante wird von den Enden anderer Tischkantenlinien angezogen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:1061
+msgid "Table Edges can be modified by dragging on their ends.\n"
+msgstr "Tischkanten können durch Ziehen an den Enden geändert werden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:180
+#: ../../../../build/work/app/i18n/custmsg.h:1063
+msgid ""
+"If you hold down the Control key while dragging then the Table Edge will be "
+"attracted to other objects.\n"
+msgstr ""
+"Wenn Sie die Strg-Taste während des Ziehens gedrückt halten, wird die "
+"Tischkante von anderen Objekten angezogen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:218
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:1066
+msgid ""
+"These examples shows some of the various Turnout Designer windows. Each "
+"window defines a different type of turnout.\n"
+msgstr ""
+"Diese Beispiele zeigen einige der Dialogfenster des Weichendesigner. Jeder "
+"Dialog wird für einen anderen Typ von Weichen benutzt.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1067
+msgid ""
+"In each window there are a number of parameters to fill in and one or two "
+"description lines.\n"
+msgstr ""
+"In jedem Dialog müssen einige Parameter und eine oder zwei Zeilen "
+"Beschreibungen eingetragen werden.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1068
+msgid "You can print the design to check the dimensions before saving them.\n"
+msgstr ""
+"Sie können den Entwurf vor dem Speichen ausdrucken. Damit können Sie zur "
+"Kontrolle die Abmessungen prüfen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:1070
+msgid "This is the regular turnout.\n"
+msgstr "Dies ist eine normale Weiche.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1071
+msgid ""
+"In addition to the dimensions, you also enter the Title (Manufacturer, "
+"Description and Part Number). For Turnouts with Left and Right hand "
+"versions there are separate Descriptions and Part Numbers.\n"
+msgstr ""
+"Neben den Abmessungen müssen auch die Beschreibung der Weiche, d.h. "
+"Hersteller, Beschreibung und Teilenummer, eingegeben werden. Für Weichen mit "
+"rechten und linken Abzweigen werden die Beschreibung und die Teilenummern "
+"getrennt erfasst.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1072
+msgid ""
+"Some Turnouts and Sectional track are pre-mounted on roadbed. For these "
+"parts you can specify the width of the roadbed, the thickness of the lines "
+"drawn for the edge of the roadbed and the color.\n"
+msgstr ""
+"Einige Weichen und Festgleise besitzen ein festes Gleisbett. Für diese Teile "
+"können Sie die Breite des Gleisbetts und Dicke und Farbe der "
+"Begrenzungslinien festlegen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:30
+#: ../../../../build/work/app/i18n/custmsg.h:1074
+msgid "The double slip switch is described by only a few parameters.\n"
+msgstr ""
+"Für eine doppelte Kreuzungsweiche wird durch wenige Daten festgelegt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:40
+#: ../../../../build/work/app/i18n/custmsg.h:1076
+msgid "The double crossover only needs length and track separation.\n"
+msgstr ""
+"Eine doppelter Gleiswechsel erfordert nur die Gleislänge und den "
+"Gleisabstand.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:48
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:30
+#: ../../../../build/work/app/i18n/custmsg.h:1079
+msgid ""
+"Pressing the turnout button displays the Turnout Selection window to let you "
+"choose a turnout to place.\n"
+msgstr ""
+"Durch Drücken des Knopfes <Weiche> wird das Weichenauswahl-Fenster geöffnet. "
+"Hier können Sie eine Weiche auswählen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1080
+msgid ""
+"Note that once you start to place the turnout on the Main window the Turnout "
+"Selection window disappears. This feature is enabled by the Hide toggle "
+"button on the dialog.\n"
+msgstr ""
+"Beachten Sie, dass das Weichenauswahl-Fenster verschwindet sobald Sie mit "
+"dem Legen der Weiche beginnen. Diese Eigenschaft wird durch den 'Verbergen' "
+"Schalter des Dialogs eingeschaltet.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:38
+#: ../../../../build/work/app/i18n/custmsg.h:1082
+msgid ""
+"You can place the turnout on a arbitrary position on the layout. Left-drag "
+"the turnout into place...\n"
+msgstr ""
+"Sie können die Weiche an eine beliebigen Position auf dem Gleisplan legen. "
+"Ziehen Sie die Weiche an den richtigen Platz...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:85
+#: ../../../../build/work/app/i18n/custmsg.h:1084
+msgid "Then you can rotate the turnout by Right dragging.\n"
+msgstr ""
+"Dann können Sie die Weiche durch Ziehen mit der rechten Maustaste drehen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1085
+msgid ""
+"You can also use Shift-Right-Click to display a popup menu that lets you "
+"rotate the Turnout by specific angles.\n"
+msgstr ""
+"Sie können mit Umschalten-Rechts-Klick ein Fenster öffnen, das das Drehen um "
+"feste Winkel ermöglicht.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:136
+#: ../../../../build/work/app/i18n/custmsg.h:1087
+msgid ""
+"When you are satisfied with the position and orientation of the turnout "
+"press Space bar or the Return key on the keyboard to finish placing the "
+"turnout.\n"
+msgstr ""
+"Wenn Sie mit der Position und der Ausrichtung der Weiche zufrieden sind, "
+"drücken Sie Leertaste oder die Eingabetaste der Tastatur um den Befehl "
+"abzuschliessen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1088
+msgid ""
+"Pressing the Close button on the Turnout dialog will end the <Turnout> "
+"command as well as placing the turnout.\n"
+msgstr ""
+"Durch Drücken des Schliessen-Knopfes im Dialogfenster können Sie den Befehl "
+"beenden und die Weiche festlegen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:146
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:189
+#: ../../../../build/work/app/i18n/custmsg.h:1091
+msgid ""
+"If you drag along an existing track the new turnout will be attached to the "
+"track.\n"
+msgstr ""
+"Wenn Sie die Weiche auf existierendes Gleis ziehen, so wird sie mit dem "
+"Gleis verbunden.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1092
+msgid ""
+"Note that the status line tells you the number of End-Points that would be "
+"connected and, the maximum displacement of the End-Points. This will be "
+"useful when building complex track, as we will see later.\n"
+msgstr ""
+"Beachten Sie, dass in der Statuszeile angezeigt wird. wieviele Endpunkte der "
+"Weiche verbunden würden und wie groß der maximale Abstand zu den Endpunkten "
+"ist. Wie wir später sehen werden ist diese Information hilfreich, um "
+"komplexe Gleiskonfigurationen zu erstellen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:220
+#: ../../../../build/work/app/i18n/custmsg.h:1094
+msgid ""
+"By moving the cursor from one side to the other of the track centerline you "
+"can flip the turnout 180ᅵ.\n"
+msgstr ""
+"Durch Bewegen des Mauszeiger von einer Seite des Gleises auf die andere wird "
+"die Weiche um 180° gedreht.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:236
+#: ../../../../build/work/app/i18n/custmsg.h:1096
+msgid ""
+"If you try to drag across another turnout the new turnout will placed at the "
+"nearest End-Point of the existing turnout.\n"
+msgstr ""
+"Wenn Sie die neue Weiche über eine existierende Weiche ziehen, wird die neue "
+"Weiche mit dem nächstgelegenen Endpunkt der vorhandenen Weiche verbunden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:299
+#: ../../../../build/work/app/i18n/custmsg.h:1098
+msgid ""
+"When you press Space or Return while the turnout is on a track, the track "
+"will be split and the new turnout attached automatically.\n"
+msgstr ""
+"Wenn Sie die Leer- oder die Eingabetaste drücken während die Weiche auf "
+"einem Gleis ist, wird dieses Gleis getrennt und die Weiche wird automatisch "
+"verbunden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:307
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:366
+#: ../../../../build/work/app/i18n/custmsg.h:1101
+msgid "Pressing Close ends the <Turnout> command.\n"
+msgstr "Durch Drücken von <Schliessen> wird der Befehl <Weiche> beendet.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:372
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:21
+#: ../../../../build/work/app/i18n/custmsg.h:1104
+msgid "Sometimes it's useful to modify turnouts triming one of the ends.\n"
+msgstr ""
+"Manchmal ist es sinnvoll, eine Weich durch Kürzen der Enden anzupassen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1105
+msgid "We use the <Split> command for this.\n"
+msgstr "Dafür benutzen wir den Befehl <Trennen>.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:28
+#: ../../../../build/work/app/i18n/custmsg.h:1107
+msgid "Normally, if we try to Split a turnout we get an error message.\n"
+msgstr ""
+"Normalerweise bekommen wir eine Fehlermeldung, wenn wir versuchen eine "
+"Weiche zu trennen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:37
+#: ../../../../build/work/app/i18n/custmsg.h:1109
+msgid "Hold down the Shift key and try again.\n"
+msgstr ""
+"Drücken und halten Sie die Umschalten-Taste und versuchen es nochmals.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:52
+#: ../../../../build/work/app/i18n/custmsg.h:1111
+msgid ""
+"The end of the turnout has been replaced by a piece of straight flex track "
+"which we can modify.\n"
+msgstr ""
+"Das Ende der Weiche wurde durch ein Stück gereden Gleises ersetzt. Dieses "
+"können wir verändern.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:1113
+msgid "We can try splitting the diverging leg.\n"
+msgstr "Wir können versuchen, das abzweigende Gleis zu trennen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:74
+#: ../../../../build/work/app/i18n/custmsg.h:1115
+msgid ""
+"Notice that the tail of the diverging leg has been changed to a curved "
+"track...\n"
+msgstr ""
+"Beachten Sie, dass das abzweigende Gleis in ein gebogenes Gleis umgewandelt "
+"wurde...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:84
+#: ../../../../build/work/app/i18n/custmsg.h:1117
+msgid "and a straight track.\n"
+msgstr "und ein gerades Gleis.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:92
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:12
+#: ../../../../build/work/app/i18n/custmsg.h:1120
+msgid ""
+"This example show how to layout a yard using the <Turnout> and <Parallel> "
+"commands.\n"
+msgstr ""
+"Dieses Beispiel zeigt wie mit den Befehlen <Weiche> und <Paralleles Gleis> "
+"eine Gleisharfe erstellt werden kann.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:17
+#: ../../../../build/work/app/i18n/custmsg.h:1122
+msgid ""
+"You can resize and move the Turnout Selection dialog if it obscures the "
+"other windows.\n"
+msgstr ""
+"Sie können den Weichenauswahl-Dialog verkleinern und verschieben, wenn er "
+"andere Fensterbereiche verdeckt.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1123
+msgid "First we place a turnout on the main line.\n"
+msgstr "Zuerst legen wir eine Weiche auf das Hauptgleis.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:35
+#: ../../../../build/work/app/i18n/custmsg.h:1125
+msgid "Next extend the turnout with the <Modify> command.\n"
+msgstr "Dann erweitern wir die Weiche mit dem Befehl <Verändern>.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:46
+#: ../../../../build/work/app/i18n/custmsg.h:1127
+msgid ""
+"Now create a track parallel to the main line. Make sure the separation is "
+"reasonable for your scale.\n"
+msgstr ""
+"Jetzt erstellen Sie ein Gleis, das parallel zum Hauptgleis liegt. Stellen "
+"Sie sicher, dass der Gleisabstand für Ihren Maßstab geeignet ist.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:62
+#: ../../../../build/work/app/i18n/custmsg.h:1129
+msgid "And place a turnout to connect the new track.\n"
+msgstr "Und legen eine Weiche, um das neue Gleis anzuschliessen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1130
+msgid "We'll zoom in here to see what's going on.\n"
+msgstr "Durch Vergrößern können wir sehen, was passiert.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:78
+#: ../../../../build/work/app/i18n/custmsg.h:1132
+msgid ""
+"Notice how we control which way the turnout is facing by moving the mouse "
+"across the center line of the track.\n"
+msgstr ""
+"Beachten Sie wie wir die Ausrichtung der Weiche beeinflussen indem wir die "
+"Maus über die Mittellinie des Gleise bewegen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:94
+#: ../../../../build/work/app/i18n/custmsg.h:1134
+msgid ""
+"The Status bar displays the number of auto-connections that will be made and "
+"the maximum offset.\n"
+msgstr ""
+"In der Statuszeile wird angezeigt, wieviele Endpunkte verbunden werden und "
+"wie große der maximale Abstand ist.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1135
+msgid ""
+"XTrackCAD adjusts the turnout position for the best fit to minimize any "
+"connection offset\n"
+msgstr ""
+"XTrackCAD verändert die Weichenposition um die beste Einpassung zu "
+"erreichen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:106
+#: ../../../../build/work/app/i18n/custmsg.h:1137
+msgid "Note that placing the turnout splits the parallel track.\n"
+msgstr ""
+"Beachten Sie, dass durch die Weiche das parallele Gleis getrennt wurde.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1138
+msgid "We have to delete the leftover piece by Selecting and Deleting it.\n"
+msgstr "Dieses Reststück müssen wir auswählen und löschen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:120
+#: ../../../../build/work/app/i18n/custmsg.h:1140
+msgid "Repeat the process for the other tracks in the yard.\n"
+msgstr "Wiederholen Sie diesen Ablauf für die anderen Gleise der Gleisharfe.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:149
+#: ../../../../build/work/app/i18n/custmsg.h:1142
+msgid "For the last track we will join with a curve instead of a turnout.\n"
+msgstr ""
+"Beim letzten Gleis benutzen wir einen Gleisbogen anstelle einer Weiche.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:185
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrkwid.xtr:91
+#: ../../../../build/work/app/i18n/custmsg.h:1145
+msgid "We can indicate the mainline by making the rails wider.\n"
+msgstr ""
+"WIr können die Hauptstrecke hervorheben, in dem wir die Gleise dicker "
+"zeichnen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1146
+msgid "First we select the mainline tracks...\n"
+msgstr "Zuerst wählen wir die Gleise der Hauptstrecke aus...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrkwid.xtr:128
+#: ../../../../build/work/app/i18n/custmsg.h:1148
+msgid "And then select Medium Tracks from the Edit menu.\n"
+msgstr "Und wählen dann mittlere Stärke aus dem Bearbeiten Menu aus.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1149
+msgid "We can't show the Edit menu, but we can show the effect.\n"
+msgstr ""
+"Wir können das Menü Bearbeiten nicht anzeigen, aber wir können die Wirkung "
+"zeigen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrkwid.xtr:137
+#: ../../../../build/work/app/i18n/custmsg.h:1151
+msgid "We can make the rail thicker by selecting Thick Tracks.\n"
+msgstr ""
+"Wir können das Gleis durch die Auswahl Breite Linie dicker darstellen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrkwid.xtr:148
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrntab.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:1154
+msgid ""
+"Turntables are created by specifying the radius in a dialog box on the "
+"Status Bar. The radius in the dialog can be changed before proceeding.\n"
+msgstr ""
+"Beim Erstellen von Drehscheiben muss der Radius in einem Dialog in der "
+"Statuszeile eingegeben werden. Der Radius muss vor den nächsten Schritten "
+"geändert werden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrntab.xtr:15
+#: ../../../../build/work/app/i18n/custmsg.h:1156
+msgid "Then the turntable is dragged to its final location.\n"
+msgstr "Dann wird die Drehscheibe an die endgültige Position geschoben.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrntab.xtr:22
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:317
+#: ../../../../build/work/app/i18n/custmsg.h:1159
+msgid "Introduction"
+msgstr "Einführung"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:318
+#: ../../../../build/work/app/i18n/custmsg.h:1161
+msgid "Mouse Actions"
+msgstr "Mausaktionen"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:319
+#: ../../../../build/work/app/i18n/custmsg.h:1163
+msgid "Dialogs"
+msgstr "Dialoge"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:320
+#: ../../../../build/work/app/i18n/custmsg.h:1165
+msgid "Moving about"
+msgstr "Zoom & Pan"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:321
+#: ../../../../build/work/app/i18n/custmsg.h:1167
+msgid "Describe and Select"
+msgstr "Eigenschaften und Auswählen"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:322
+#: ../../../../build/work/app/i18n/custmsg.h:1169
+msgid "Describe"
+msgstr "Beschreibe"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:324
+#: ../../../../build/work/app/i18n/custmsg.h:1173
+msgid "Simple tracks"
+msgstr "Einfache Gleise"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:325
+#: ../../../../build/work/app/i18n/custmsg.h:1175
+msgid "Straight tracks"
+msgstr "Gleisgeraden"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:326
+#: ../../../../build/work/app/i18n/custmsg.h:1177
+msgid "Curved tracks"
+msgstr "Gleisbögen"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:327
+#: ../../../../build/work/app/i18n/custmsg.h:1179
+msgid "Circles"
+msgstr "Kreise"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:328
+#: ../../../../build/work/app/i18n/custmsg.h:1181
+msgid "Turntables"
+msgstr "Drehscheiben"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:329
+#: ../../../../build/work/app/i18n/custmsg.h:1183
+msgid "Modifying tracks"
+msgstr "Gleise bearbeiten"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:330
+#: ../../../../build/work/app/i18n/custmsg.h:1185
+msgid "Modifying end points "
+msgstr "Endpunkte ändern "
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:331
+#: ../../../../build/work/app/i18n/custmsg.h:1187
+msgid "Extending"
+msgstr "Erweitern"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:332
+#: ../../../../build/work/app/i18n/custmsg.h:1189
+msgid "Medium and Thick Tracks"
+msgstr "Mittlere und dicke Gleise"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:333
+#: ../../../../build/work/app/i18n/custmsg.h:1191
+msgid "Joining Tracks"
+msgstr "Gleise verbinden"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:334
+#: ../../../../build/work/app/i18n/custmsg.h:1193
+msgid "Straight to straight"
+msgstr "Gerade zu Gerade"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:335
+#: ../../../../build/work/app/i18n/custmsg.h:1195
+msgid "Curve to straight"
+msgstr "Bogen zu Gerade"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:336
+#: ../../../../build/work/app/i18n/custmsg.h:1197
+msgid "Circle to circle"
+msgstr "Kreis zu Kreis"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:337
+#: ../../../../build/work/app/i18n/custmsg.h:1199
+msgid "Joining to turntables"
+msgstr "Mit Drehscheiben verbinden"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:338
+#: ../../../../build/work/app/i18n/custmsg.h:1201
+msgid "Easements"
+msgstr "Übergangsbögen"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:339
+#: ../../../../build/work/app/i18n/custmsg.h:1203
+msgid "Abutting tracks"
+msgstr "Angrenzende Gleise"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:340
+#: ../../../../build/work/app/i18n/custmsg.h:1205
+msgid "Move to Join"
+msgstr "Verbinden durch Verschieben"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:342
+#: ../../../../build/work/app/i18n/custmsg.h:1209
+msgid "Select and Placement"
+msgstr "Auswählen und Positionieren"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:343
+#: ../../../../build/work/app/i18n/custmsg.h:1211
+msgid "Building a yard throat."
+msgstr "Eine Gleisharfe erstellen."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:344
+#: ../../../../build/work/app/i18n/custmsg.h:1213
+msgid "Designing turnouts"
+msgstr "Weichen entwerfen"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:345
+#: ../../../../build/work/app/i18n/custmsg.h:1215
+msgid "Group and Ungroup"
+msgstr "Zusammenfassen und Zerlegen"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:346
+#: ../../../../build/work/app/i18n/custmsg.h:1217
+msgid "Triming Turnout Ends"
+msgstr "Weichenenden verändern"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:347
+#: ../../../../build/work/app/i18n/custmsg.h:1219
+msgid "Handlaid Turnouts"
+msgstr "Selbstbauweichen"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:348
+#: ../../../../build/work/app/i18n/custmsg.h:1221
+msgid "Elevations and Profile"
+msgstr "Höhen und Profil"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:349
+#: ../../../../build/work/app/i18n/custmsg.h:1223
+msgid "Elevations"
+msgstr "Höhen"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:351
+#: ../../../../build/work/app/i18n/custmsg.h:1227
+msgid "Misc track commands"
+msgstr "Verschiedene Gleismodifikationen"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:352
+#: ../../../../build/work/app/i18n/custmsg.h:1229
+msgid "Delete and Undo"
+msgstr "Löschen und Rückgängig machen"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:353
+#: ../../../../build/work/app/i18n/custmsg.h:1231
+msgid "Splitting and Tunnels"
+msgstr "Auftrennen und Tunnels"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:355
+#: ../../../../build/work/app/i18n/custmsg.h:1235
+msgid "Helix tracks"
+msgstr "Gleiswendel"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:356
+#: ../../../../build/work/app/i18n/custmsg.h:1237
+msgid "Exception Tracks"
+msgstr "Fehlerhafte Gleise"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:358
+#: ../../../../build/work/app/i18n/custmsg.h:1241
+msgid "Connect and Tighten - a siding"
+msgstr "Abstellgleis verbinden"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:359
+#: ../../../../build/work/app/i18n/custmsg.h:1243
+msgid "Connect and Tighten - figure-8"
+msgstr "Verbinden und Zusammenfügen"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:360
+#: ../../../../build/work/app/i18n/custmsg.h:1245
+msgid "Other commands"
+msgstr "Sonstige Befehle"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:362
+#: ../../../../build/work/app/i18n/custmsg.h:1249
+msgid "Table Edges"
+msgstr "Tischkanten"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:364
+#: ../../../../build/work/app/i18n/custmsg.h:1253
+msgid "Dimension Lines"
+msgstr "Maßlinien"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:365
+#: ../../../../build/work/app/i18n/custmsg.h:1255
+msgid "Lines"
+msgstr "Linien"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:366
+#: ../../../../build/work/app/i18n/custmsg.h:1257
+msgid "Poly-Shapes"
+msgstr "Polygone"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:367
+#: ../../../../build/work/app/i18n/custmsg.h:1259
+msgid "Modifying Poly-Shapes"
+msgstr "Polygone modifizieren"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:370
+#: ../../../../build/work/app/i18n/custmsg.h:1265
+msgid "Control Panels"
+msgstr "Stellpulte"
+
+#~ msgid "Origin to Centroid - 'c'"
+#~ msgstr "Schwerpunkt als Bezugspunkt - 'c"
+
+#~ msgid "Select 2nd track - desired radius %0.3f"
+#~ msgstr "Zweites Gleis auswählen, gewünschter Radius %03.f"
+
+#~ msgid "Pan to origin - 'o'/'0'"
+#~ msgstr "Ausschnitt auf Ursprung zurücksetzen - 'o'/ '0'."
+
+#~ msgid "Zoom keeps lower corner in view"
+#~ msgstr "Linke untere Ecke beim Zoomen festhalten"
+
+#~ msgid "Whether zoom is locked to the bottom left corner or the center point"
+#~ msgstr ""
+#~ "Festpunkt beim Zoomen ist die linke untere Ecke oder der Mittelpunkt"
+
+#~ msgid "Expected END not found!"
+#~ msgstr "Erwartete END-Anweisung nicht gefunden!"
+
+#~ msgid "Move Origin Mode"
+#~ msgstr "Modus Ursprung verschieben"
+
+#~ msgid "Find ..."
+#~ msgstr "Finden..."
+
+#~ msgid "Output type"
+#~ msgstr "Parallelen-Typ"
+
+#~ msgid "Output Type"
+#~ msgstr "Parallelen-Art"
+
+#~ msgid "Output type:"
+#~ msgstr "Parallelen-Typ:"
+
+#~ msgid "Specifies the type of the parallel object"
+#~ msgstr "Legt den Type des erstellten, parallelen Objekts fest"
+
+#~ msgid "Lock Origin Offset"
+#~ msgstr "Sperre Bezugspunkt"
+
+#, fuzzy
+#~ msgid "Type:"
+#~ msgstr "Typ"
+
+#, fuzzy
+#~ msgid "cmdSelectMode"
+#~ msgstr "Auswählen"
+
+#, fuzzy
+#~ msgid "cmdModifyMode"
+#~ msgstr "Verändern"
+
+#, fuzzy
+#~ msgid "cmdPanMode"
+#~ msgstr "cmdPanMode"
+
+#, fuzzy
+#~ msgid "cmdDescribeMode"
+#~ msgstr "Beschreibe"
+
+#, fuzzy
+#~ msgid "Place 1st end point of Bezier - snap to %s end"
+#~ msgstr ""
+#~ "Ersten Endpunkt der Bezier setzen, mit Umschalt das %s Ende benutzen"
+
+#~ msgid "SnapGrid Enable"
+#~ msgstr "Fangraster aktivieren"
+
+#, fuzzy
+#~ msgid "Drag to move, +Shift to drag out end track from Cornu"
+#~ msgstr ""
+#~ "Ziehen zum Verschieben, +Umschalten zum Herausziehen der Endspur aus Cornu"
+
+#~ msgid ""
+#~ "Place 2nd end point of Cornu track on track with an unconnected end-point"
+#~ msgstr ""
+#~ "Setze den zweiten Endpunkt des Cornu-Gleis auf ein Gleis mit einem "
+#~ "unverbundenen Endpunkt"
+
+#, fuzzy
+#~ msgid "Position End"
+#~ msgstr "Position X"
+
+#~ msgid "Origin Angle"
+#~ msgstr "Ausgangswinkel"
+
+#~ msgid "%s: Layer=%d"
+#~ msgstr "%s: Ebene=%d"
+
+#~ msgid "Drag to set size, +Shift to change radius"
+#~ msgstr ""
+#~ "Größe durch Ziehen festlegen, mit der Umschalttaste den Radius ändern"
+
+#~ msgid "# End Pts"
+#~ msgstr "Anzahl der Endpunkte"
+
+#~ msgid "Draw moving track normally"
+#~ msgstr "Bewegte Gleise normal zeichnen"
+
+#~ msgid "Draw moving track simply"
+#~ msgstr "Bewegte Gleise vereinfacht zeichnen"
+
+#~ msgid "Draw moving track as end-points"
+#~ msgstr "Bewegte Gleise als Endpunkte zeichnen"
+
+#~ msgid " Angle %0.3f"
+#~ msgstr " Winkel %0.3f"
+
+#~ msgid "Simple"
+#~ msgstr "Einfach"
+
+#~ msgid "End Points"
+#~ msgstr "Endpunkte"
+
+#~ msgid "Bitmap files (*.bmp)|*.bmp"
+#~ msgstr "Windows Bitmapdaiteien (+.bmp)|*.bmp"
+
+#~ msgid "Color Layers"
+#~ msgstr "Ebenenfarben"
+
+#~ msgid "End-Points"
+#~ msgstr "Endpunkte"
+
+#~ msgid "Draw Moving Tracks"
+#~ msgstr "Zeichne bewegte Gleise"
+
+#~ msgid "Unload"
+#~ msgstr "Entladen"
+
+#~ msgid "Use Shift+PageDwn to jump to preset Zoom In"
+#~ msgstr ""
+#~ "Mit Umschalt+Bild runter den gespeicherten unteren Zoom-Faktor verwenden"
+
+#~ msgid "Use Shift+PageUp to jump to preset Zoom Out"
+#~ msgstr ""
+#~ "Mit Umschalt+Bild hoch den gespeicherten oberen Zoom-Faktor verwenden"
+
+#~ msgid "Commands"
+#~ msgstr "Befehle"
+
+#~ msgid "Tunnel"
+#~ msgstr "Tunnel"
+
+#~ msgid "How to draw track being moved/rotated"
+#~ msgstr ""
+#~ "Festlegen wie Gleise gezeichnet werden, sobald sie bewegt/rotiert werden"
+
+#~ msgid "First turn off the Snap Grid.\n"
+#~ msgstr "Zuerst schalten Sie bitte das Fangraster aus.\n"
+
+#~ msgid "Rotate the signals and move them to the proper locations.\n"
+#~ msgstr ""
+#~ "Rotieren Sie die Signale und setzen diese dann an die richtige Stelle.\n"
+
+#~ msgid "Rotate the arrow head by 180° and move into position.\n"
+#~ msgstr ""
+#~ "Rotieren Sie die Pfeilspitze um 180° und bringen Sie diese in die "
+#~ "richtige Position.\n"
+
+#~ msgid ""
+#~ "Drawing lines with the Shift key held down will use the previous line End-"
+#~ "Point as the starting position. This makes it easy to draw connected "
+#~ "lines.\n"
+#~ msgstr ""
+#~ "Wird beim Zeichnen die Umschalttaste festgehalten wird der letzte "
+#~ "Endpunkt als Startpunkt für das neue Gleis benutzt. Dadurch wird das "
+#~ "Zeichnen verbundener Linien vereinfacht.\n"
+
+#~ msgid ""
+#~ "If you drag a Corner to another Corner the two are merged and the Edge "
+#~ "between them is removed.\n"
+#~ msgstr ""
+#~ "Wenn Sie eine Ecke auf eine andere Ecke ziehen, werden diese "
+#~ "zusammengefasst und die Kante dazwischen wird entfernt.\n"
+
+#~ msgid ""
+#~ "Shift-Right-Click will display a popup-menu that you can use to rotate by "
+#~ "fixed amount (15°, 30°, 45°, 90° or 180°). The demonstration cannot show "
+#~ "the popup-menu but it can show the effects.\n"
+#~ msgstr ""
+#~ "Umschalten-Rechts-Klick öffnet ein Auswahlmenu, das Sie nutzen können um "
+#~ "vorgegebene Werte für die Drehung (15°, 30°, 45°, 90° or 180°) "
+#~ "auszuwählen. Diese Demonstration kann das Auswahlmenu nicht darstellen, "
+#~ "aber sie zeigt den Effekt.\n"
+
+#~ msgid "Here we will rotate by 90° clockwise (CW).\n"
+#~ msgstr "Jetzt drehen wir um 90° im Uhrzeigersinn.\n"
+
+#~ msgid ""
+#~ "Another option of the <Rotate> command popup-menu is to Align the "
+#~ "Selected object with some other object.\n"
+#~ msgstr ""
+#~ "Der Befehl <Rotate> bietet auch die Möglichkeit, die ausgewählten Objekt "
+#~ "an anderen Objekten auszurichten.\n"
+
+#~ msgid ""
+#~ "First we will click on one line of the Selected object. The angle of "
+#~ "this part of the object will be Aligned.\n"
+#~ msgstr ""
+#~ "Zuerst klicken wir auf eine Linie des asgewählten Objektes. Diese Linie "
+#~ "wird als Grundllinie für die Ausrichtung benutzt.\n"
+
+#~ msgid ""
+#~ "Next, we click on an Unselected object. The Selected structure will be "
+#~ "rotated so that the line we clicked on will be parallel to the straight "
+#~ "track.\n"
+#~ msgstr ""
+#~ "Dann klicken wir auf ein Objekt, das nicht ausgewählt ist. Das "
+#~ "ausgewählte Gebäude wird so gedreht, dass die gewählte Linie parallel zu "
+#~ "dem geraden Gleis ist.\n"
+
+#~ msgid ""
+#~ "If we drag the mouse across the track, we can flip the structure by "
+#~ "180°. This is similar to how we place turnouts.\n"
+#~ msgstr ""
+#~ "Wenn wir die Maus auf die andere Seite des Gleises ziehen, wird das "
+#~ "Gebäude um 180° gedreht. Dies ist vergleichbar zu dem Setzen von "
+#~ "Weichen.\n"
+
+#~ msgid ""
+#~ "We can also align to curved shapes. The Selected object will be rotated "
+#~ "to be parallel to the curve under the cursor.\n"
+#~ msgstr ""
+#~ "Wir können auch an gebogenen Elementen ausrichten. Das ausgewählte Objekt "
+#~ "wird so gedreht, dass es parallel dem Punkt der Kurve ist, der sich unter "
+#~ "dem Mauszeiger befindet.\n"
+
+#~ msgid ""
+#~ "As we drag along the curved track the Selected object rotates to follow "
+#~ "the curve.\n"
+#~ msgstr ""
+#~ "Während wir entlang des gebogenen Gleises ziehen, dreht sich das "
+#~ "ausgewählte Objekt um der Kurve zu folgen.\n"
+
+#~ msgid "Again, if we drag across the track we can flip the stucture.\n"
+#~ msgstr ""
+#~ "Auch hier können wir das Gebäude spiegeln, indem wir auf die andere Seite "
+#~ "ziehen.\n"
+
+#~ msgid "We can also Align to another Structure or any object.\n"
+#~ msgstr ""
+#~ "Wir können auch an anderen Gebäuden oder jedem anderen Objekt "
+#~ "ausrichten.\n"
+
+#~ msgid "Shift used, but no Unconnected Track End there"
+#~ msgstr ""
+#~ "Umschalte-Taste gedrückt, aber es befindet sich hier kein offenes "
+#~ "Gleisende"
+
+#~ msgid "Shift used, but no Line End there"
+#~ msgstr ""
+#~ "Umschalt-Taste gedrückt, aber hier befindet sich kein Linienendpunkt"
+
+#~ msgid "Track picked - now select a Point"
+#~ msgstr "Gleis ausgewählt - jetzt einen Punkt auswählen"
+
+#~ msgid ""
+#~ "No unconnected end-point on track - Try again or release Shift and click"
+#~ msgstr ""
+#~ "Dieses Gleis hat keinen unverbundenen Endpunkt, nochmal versuchen oder "
+#~ "Umschalttaste lösen und dann klicken"
+
+#~ msgid "Not on a track - Try again or release Shift and click"
+#~ msgstr ""
+#~ "Nicht auf einem Gleis, nochmal versuchen oder Umschalttaste lösen und "
+#~ "Klicken"
+
+#~ msgid "End Locked: Drag out to center"
+#~ msgstr "Ende fixiert, zum Mittelpunkt ziehen"
+
+#~ msgid "Radius=%s Angle=%0.3f"
+#~ msgstr "Radius=%s Winkel=%0.3f"
+
+#~ msgid "Length=%s Angle=%0.3f"
+#~ msgstr "Länge=%s Winkel=%0.3f"
+
+#~ msgid "Polygonal Line"
+#~ msgstr "Vieleck"
+
+#~ msgid "There are no reachable Defined Elevations"
+#~ msgstr "Ziehen um die Höhe zu ändern"
+
+#~ msgid "Dist = %s"
+#~ msgstr "Entfernung = %s"
+
+#~ msgid "Select track to modify"
+#~ msgstr "Zu bearbeitendes Gleis auswählen"
+
+#~ msgid "Drag to create new track segment"
+#~ msgstr "Ziehen um einen neuen Gleisabschnitt zu erstellen"
+
+#~ msgid "Print Registration Marks"
+#~ msgstr "Drucke Positionierungshilfen"
+
+#~ msgid "Print Snap Grid"
+#~ msgstr "Fangraster drucken"
+
+#~ msgid "Print Rulers"
+#~ msgstr "Maßlinien drucken"
+
+#~ msgid "Cornu selected too tight after move - it was left alone"
+#~ msgstr ""
+#~ "Die ausgewählte Klothoide ist nach dem Verschieben zu eng und wurde daher "
+#~ "nicht verändert"
+
+#~ msgid "TURNOUT "
+#~ msgstr "WEICHE "
+
+#~ msgid "%s Files|*.xtc"
+#~ msgstr "%s-Gleispläne|*.xtc"
+
+#~ msgid "Bitmap files|*.xpm"
+#~ msgstr "Grafikdateien|*.xpm"
+
+#, fuzzy
+#~ msgid "Describe link"
+#~ msgstr "Beschreibe"
+
+#~ msgid "A&bove"
+#~ msgstr "Darüber"
+
+#~ msgid "Belo&w"
+#~ msgstr "Darunter"
+
+#~ msgid "Note: "
+#~ msgstr "Notiz: "
+
+#~ msgid "All files"
+#~ msgstr "Alle Dateien"
+
+#~ msgid "General note about the layout"
+#~ msgstr "Allgemeine Notiz zur Anlage"
+
+#, fuzzy
+#~ msgid "Select a note type"
+#~ msgstr "Wählen Sie eine Weiche aus"
+
+#, fuzzy
+#~ msgid "Place a weblink on the layout"
+#~ msgstr "Eine Notiz auf den Gleisplan setzen"
+
+#, fuzzy
+#~ msgid "Place a text note on the layout"
+#~ msgstr "Eine Notiz auf den Gleisplan setzen"
+
+#~ msgid ""
+#~ "A number of example layouts are provided. These files are located in the "
+#~ "'examples' directory where you installed XTrackCAD. The \"File|Open\" "
+#~ "command will open that directory when first used."
+#~ msgstr ""
+#~ "Einige Beispiel Gleisplänen stehen zu Ihrer Verfügung, diese wurden im "
+#~ "Unterverzeichnis 'examples' im Haupverzeichnis von XTrackCAD installiert. "
+#~ "Über den Dialog \"Datei|Öffnen\" können diese geladen werden."
+
+#~ msgid ""
+#~ "The length of the straight track is determined by the distance from the "
+#~ "far End-Point and the cursor.\n"
+#~ msgstr ""
+#~ "Die Länge des geraden Gleises wird durch den Abstand zwischen dem "
+#~ "entfernten Endpunkt und dem Mauszeiger festgelegt.\n"
+
+#~ msgid ""
+#~ "Now the cursor is about to be moved past the other (far) End-Point of the "
+#~ "straight track. You will receive a warning and the connecting track "
+#~ "turns Red.\n"
+#~ msgstr ""
+#~ "Jetzt wird der Mauszeiger über den anderen, entfernten, Endpunkt des "
+#~ "geraden Gleises verschoben. Sie erhalten einen Hinweis und das "
+#~ "Verbindungsgleis wird rot.\n"
+
+#~ msgid "And Right-Drag de-selects all tracks within an area.\n"
+#~ msgstr ""
+#~ "Und Ziehen mit rechter gedrückter Maustaste entfernt alle Objekte in "
+#~ "einem Bereich aus der Auswahl.\n"
+
+#~ msgid ""
+#~ "Drawing the tracks while moving can be very time-consuming. We had just "
+#~ "used the \"Normal\" method of drawing tracks.\n"
+#~ msgstr ""
+#~ "Das Zeichnen der Gleise während des Verschieben kann die Bewegung sehr "
+#~ "verzögern. Gerade haben wir die \"normale\" Methode des Zeichnen "
+#~ "benutzt.\n"
+
+#~ msgid ""
+#~ "The Command Options dialog (from the Options menu) contains a Radio "
+#~ "button group which you can use to pick the drawing method.\n"
+#~ msgstr ""
+#~ "Im Dialogfenster Befehlsoptionen (aus dem Einstellungen Menu) können Sie "
+#~ "die Zeichenmethode ändern.\n"
+
+#~ msgid ""
+#~ "You can also popup the Command Options Menu by pressing Shift-Right-Click "
+#~ "which includes options for setting the drawing method. These options are "
+#~ "also available for the Move and Rotate Command Options Menu.\n"
+#~ msgstr ""
+#~ "Sie können das Befehlsoptionen Menu auch aufrufen, indem sie Umschalt-"
+#~ "Rechts-Klick betätigen. Diese Optionen sind auch für die Befehle "
+#~ "Verschieben und Drehen vorhnden.\n"
+
+#~ msgid ""
+#~ "The next method is \"Simple\" draws. Here tracks are drawn using one "
+#~ "line, no End-Points are drawn, lines are not drawn and structures are "
+#~ "drawn using a box outline.\n"
+#~ msgstr ""
+#~ "Die nächste Methode ist \"einfaches\" Zeichnen. Hier werden Gleise durch "
+#~ "eine Linie dargestellt, Endpunkte und Linien werden nicht gezeichnet. "
+#~ "Gebäude werden während der Operation durch ein Rechteck ersetzt.\n"
+
+#~ msgid ""
+#~ "Note: you can move the Command Options dialog if it obscures the main "
+#~ "window.\n"
+#~ msgstr ""
+#~ "Beachten Sie, dass Sie die das Dialogfenster Befehlsoptionen verschieben "
+#~ "können, wenn es das Hauptfenster verdeckt.\n"
+
+#~ msgid ""
+#~ "The next method is to just draw the End-Points of the selected tracks.\n"
+#~ msgstr ""
+#~ "Die nächste Methode ist das einfache Zeichnen der Endpunkte der "
+#~ "ausgewählten Gleise.\n"
+
+#~ msgid ""
+#~ "Unconnected End-Points are indicated by Red crosses, and connected End-"
+#~ "Points are indicated by Red lines.\n"
+#~ msgstr ""
+#~ "Nicht verbundene Endpunkte werden durch ein rotes Kreuz markiert, "
+#~ "verbundene Endpunkte durch eine rote Linie.\n"
+
+#~ msgid "Now we will go back to using the Normal method again.\n"
+#~ msgstr "Jetzt gehen wir zu der normalen Methode zurück.\n"
+
+#~ msgid ""
+#~ "Note: because of differing display resolutions the next mouse click may "
+#~ "not be positioned correctly in this demo and the Move-To-Join operation "
+#~ "may not be demonstrated.\n"
+#~ msgstr ""
+#~ "Beachten Sie dass der Befehl \"Verbinden durch Bewegen\" in der Demo "
+#~ "nicht gezeigt werden kann.\n"
+
+#~ msgid "Modify Bezier Complete - select another"
+#~ msgstr "Ändern der Bezier-Kurve bendet, bitte eine neue auswählen"
+
+#~ msgid "Freeform"
+#~ msgstr "Freeform"
+
+#~ msgid "1 page"
+#~ msgstr "1 Seite"
+
+#~ msgid "Is Cornu End -> Not Selectable"
+#~ msgstr ""
+#~ "Dies ist das Ende einer Cornu und kann daher nicht ausgewählt werden."
+
+#~ msgid "Must be on the %s Track"
+#~ msgstr "Muss auf dem %s Gleis sein"
+
+#~ msgid "Select other end of Bezier, +Shift -> snaps to %s end"
+#~ msgstr ""
+#~ "Das andere Ender der Bezier wählen, mit Umschalt-Taste an %s Endpunkt "
+#~ "verbinden"
+
+#~ msgid ""
+#~ "No Unconnected end-point on track - Try again or release shift and click"
+#~ msgstr ""
+#~ "Dieses Gleis hat keinen offenen Endpunkt, nochmal versuchen oder "
+#~ "Umschalttaste lösen und dann klicken"
+
+#~ msgid "Not on a Track - Try again or release shift and click"
+#~ msgstr "Nicht auf einem Gleis, nochmal versuchen or "
+
+#, fuzzy
+#~ msgid ""
+#~ "Place 1st end point of Cornu track on track with an unconnected end-point"
+#~ msgstr "Ersten Endpunkt der Gleisgerade setzen"
+
+#~ msgid "Connect Sectional Tracks"
+#~ msgstr "Gleisstücke verbinden"
+
+#~ msgid "Drag to move selected tracks"
+#~ msgstr "Ausgewählte Gleise durch Ziehen verschieben"
+
+#, fuzzy
+#~ msgid "End Angle 2"
+#~ msgstr "Winkel eingeben..."
+
+#, fuzzy
+#~ msgid "Elev 1"
+#~ msgstr "Höhe = %s"
+
+#, fuzzy
+#~ msgid "End Radius Center 1: X"
+#~ msgstr "Endpunkt 1: X"
+
+#, fuzzy
+#~ msgid "Elev 2"
+#~ msgstr "Höhe = %s"
+
+#, fuzzy
+#~ msgid "Radius 2"
+#~ msgstr "Radius 2"
+
+#, fuzzy
+#~ msgid "End Radius Center 2: X"
+#~ msgstr "Endpunkt 2: X"
+
+#~ msgid "Angle=%0.3f"
+#~ msgstr "Winkel=%0.3f"
+
+#~ msgid "Place circle center"
+#~ msgstr "Setze Kreismittelpunkt"
+
+#~ msgid "Place circle"
+#~ msgstr "Platziere Kreis"
+
+#~ msgid "Draw"
+#~ msgstr "Zeichne"
+
+#~ msgid "Show Map"
+#~ msgstr "Karte anzeigen"
+
+#~ msgid "Blocks"
+#~ msgstr "Gleisabschnitte"
+
+#~ msgid "SwitchMotor"
+#~ msgstr "Weichenantrieb"
+
+#~ msgid "Switch Motors"
+#~ msgstr "Weichenatriebe"
+
+#~ msgid "Black"
+#~ msgstr "Schwarz"
+
+#~ msgid "Dark Blue"
+#~ msgstr "Dunkelblau"
+
+#~ msgid "Steel Blue"
+#~ msgstr "Stahlblau"
+
+#~ msgid "Royal Blue"
+#~ msgstr "Königsblau"
+
+#~ msgid "Blue"
+#~ msgstr "Blau"
+
+#~ msgid "Deep Sky Blue"
+#~ msgstr "Dunkles Himmelblau"
+
+#~ msgid "Light Sky Blue"
+#~ msgstr "Helles Himmelblau"
+
+#~ msgid "Powder Blue"
+#~ msgstr "Hellblau"
+
+#~ msgid "Dark Aqua"
+#~ msgstr "Dunkelaquamarin"
+
+#~ msgid "Aquamarine"
+#~ msgstr "Aquamarin"
+
+#~ msgid "Aqua"
+#~ msgstr "Wasserblau"
+
+#~ msgid "Dark Green"
+#~ msgstr "Dunkelgrün"
+
+#~ msgid "Forest Green"
+#~ msgstr "Waldgrün"
+
+#~ msgid "Lime Green"
+#~ msgstr "Limonengrün"
+
+#~ msgid "Green"
+#~ msgstr "Grün"
+
+#~ msgid "Lawn Green"
+#~ msgstr "Rasengrün"
+
+#~ msgid "Pale Green"
+#~ msgstr "Blassgrün"
+
+#~ msgid "Dark Yellow"
+#~ msgstr "Dunkelgelb"
+
+#~ msgid "Coral"
+#~ msgstr "Koralle"
+
+#~ msgid "Orange"
+#~ msgstr "Orange"
+
+#~ msgid "Yellow"
+#~ msgstr "Gelb"
+
+#~ msgid "Saddle Brown"
+#~ msgstr "Lederbraun"
+
+#~ msgid "Brown"
+#~ msgstr "Braun"
+
+#~ msgid "Chocolate"
+#~ msgstr "Schokolade"
+
+#~ msgid "Rosy Brown"
+#~ msgstr "Braun Rosa"
+
+#~ msgid "Tan"
+#~ msgstr "Loh"
+
+#~ msgid "Beige"
+#~ msgstr "Beige"
+
+#~ msgid "Dark Red"
+#~ msgstr "Dunkelrot"
+
+#~ msgid "Tomato"
+#~ msgstr "Tomatenrot"
+
+#~ msgid "Red"
+#~ msgstr "Rot"
+
+#~ msgid "Hot Pink"
+#~ msgstr "Knallrosa"
+
+#~ msgid "Pink"
+#~ msgstr "Rosa"
+
+#~ msgid "Dark Purple"
+#~ msgstr "Dunkelpurpur"
+
+#~ msgid "Maroon"
+#~ msgstr "Kastanie"
+
+#~ msgid "Purple2"
+#~ msgstr "Purpur 2"
+
+#~ msgid "Purple"
+#~ msgstr "Purpur"
+
+#~ msgid "Violet"
+#~ msgstr "Violett"
+
+#~ msgid "Dark Gray"
+#~ msgstr "Dunkelgrau"
+
+#~ msgid "Gray"
+#~ msgstr "Grau"
+
+#~ msgid "Light Gray"
+#~ msgstr "Hellgrau"
+
+#~ msgid "Describe objects"
+#~ msgstr "Objekte beschreiben"
+
+#~ msgid "Page %d"
+#~ msgstr "Seite %d"
+
+#~ msgid "Print to file ..."
+#~ msgstr "In Datei drucken..."
+
+#~ msgid "No file name specified"
+#~ msgstr "Kein Dateiname angegeben"
+
+#~ msgid "%s exists"
+#~ msgstr "%s existiert bereits"
+
+#~ msgid "Overwrite"
+#~ msgstr "Ãœberschreiben"
+
+#~ msgid ": cannot open"
+#~ msgstr ": kann nicht geöffnet werden"
+
+#~ msgid "Page 1"
+#~ msgstr "Seite 1"
+
+#~ msgid "Enter both printer name and command"
+#~ msgstr "Druckername und Befehl eingeben"
+
+#~ msgid "Can not save New Printer definition"
+#~ msgstr "Neue Druckerdefinition kann nicht gespeichert werden"
+
+#~ msgid "Enter printer name"
+#~ msgstr "Druckername eingeben"
+
+#~ msgid "Can not save New Margin definition"
+#~ msgstr "Seitendefinition kann nicht gespeichert werden"
+
+#~ msgid "Paper Size"
+#~ msgstr "Papiergrösse"
+
+#~ msgid "Printer"
+#~ msgstr "Drucker"
+
+#~ msgid "Format"
+#~ msgstr "Format"
+
+#~ msgid "X Font"
+#~ msgstr "X Schriftart"
+
+#~ msgid "PS Font"
+#~ msgstr "PS Schriftart"
+
+#~ msgid "Factor"
+#~ msgstr "Faktor"
+
+#~ msgid "Print Test Page"
+#~ msgstr "Drucke Testseite"
+
+#~ msgid "Name: "
+#~ msgstr "Name: "
+
+#~ msgid "Command: "
+#~ msgstr "Befehl: "
+
+#~ msgid "Add Margin"
+#~ msgstr "Rand hinzufügen"
+
+#~ msgid "Print To File"
+#~ msgstr "In Datei drucken"
+
+#~ msgid "File Name? "
+#~ msgstr "Dateiname? "
+
+#~ msgid "Font Alias"
+#~ msgstr "Alias für Schriftart"
+
+#~ msgid "Enter a post-script font name for:"
+#~ msgstr "Eingabe der Postscript Schriftart für:"
+
+#~ msgid "Printing"
+#~ msgstr "Drucke"
+
+#~ msgid "Now printing"
+#~ msgstr "Druck läuft"
+
+#~ msgid "Abort Print"
+#~ msgstr "Druck abbrechen"
+
+#~ msgid ""
+#~ " exists\n"
+#~ "Do you want to overwrite it?"
+#~ msgstr ""
+#~ "existiert.\n"
+#~ "Wollen Sie diese überschreiben?"
+
+#, fuzzy
+#~ msgid "Delete Switch motor"
+#~ msgstr "Weichenantrieb löschen"
+
+#~ msgid "Not a SwitchMotor!"
+#~ msgstr "Kein Weichenantrieb!"
+
+#~ msgid "Custom Update"
+#~ msgstr "Anpassungen hinzufügen"
+
+#~ msgid "No fonts"
+#~ msgstr "Keine Schriftarten"
+
+#~ msgid ""
+#~ "Can't find standard Serif font.\n"
+#~ "Please choose a font"
+#~ msgstr ""
+#~ "Die Standardschriftart für Serif kann nicht gefunden werden.\n"
+#~ "Bitte wählen Sie eine Schriftart aus"
+
+#~ msgid ""
+#~ "Can't find standard San-Serif font.\n"
+#~ "Please choose a font"
+#~ msgstr ""
+#~ "Die Standardschriftart für Sans-Serif kann nicht gefunden werden.\n"
+#~ "Bitte wählen Sie eine Schriftart aus"
+
+#~ msgid "XTrackCAD Help"
+#~ msgstr "XTrackCAD Hilfe"
+
+#~ msgid "Now printing %s"
+#~ msgstr "Drucke %s"
+
+#~ msgid "Creating %s"
+#~ msgstr "Erzeuge %s"
+
+#~ msgid "Scale / Gauge"
+#~ msgstr "Maßstab / Spurweite"
+
+#~ msgid "load last layout"
+#~ msgstr "Letzten Plan laden"
+
+#~ msgid "start with blank layout"
+#~ msgstr "Mit leerem Plan beginnen"
diff --git a/app/i18n/fi.po b/app/i18n/fi.po
index d43e427..1abb9e0 100644
--- a/app/i18n/fi.po
+++ b/app/i18n/fi.po
@@ -1,12830 +1,15824 @@
-# Finnish translations for xtrkcad package.
-# Copyright (C) 2007 Mikko Nissinen
-# This file is distributed under the same license as the xtrkcad package.
-# Mikko Nissinen <mni77@users.sourceforge.net>, 2007.
-#
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: xtrkcad 4.1.0b1\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-11-05 13:39+0100\n"
-"PO-Revision-Date: 2008-02-05 11:21+0200\n"
-"Last-Translator: Mikko Nissinen <mni77@users.sourceforge.net>\n"
-"Language-Team: Finnish <mni77@users.sourceforge.net>\n"
-"Language: fi\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../bin/cbezier.c:586
-#, fuzzy
-msgid "Select End-Point - Ctrl unlocks end-point"
-msgstr "Valitse ensimmäinen yhdistettävä päätepiste"
-
-#: ../bin/cbezier.c:588 ../bin/ccornu.c:462 ../bin/celev.c:418
-msgid "Select End-Point"
-msgstr "Valitse päätepiste"
-
-#: ../bin/cbezier.c:609
-msgid "Not close enough to any valid, selectable point, reselect"
-msgstr ""
-
-#: ../bin/cbezier.c:615 ../bin/ccornu.c:485
-#, c-format
-msgid "Drag point %d to new location and release it"
-msgstr ""
-
-#: ../bin/cbezier.c:625 ../bin/cbezier.c:716 ../bin/cbezier.c:718
-msgid "Pick any circle to adjust it - Enter to confirm, ESC to abort"
-msgstr ""
-
-#: ../bin/cbezier.c:648 ../bin/cbezier.c:706
-msgid "Bezier Curve Invalid has identical end points Change End Point"
-msgstr ""
-
-#: ../bin/cbezier.c:651 ../bin/cbezier.c:709
-#, c-format
-msgid "Bezier Curve Invalid has %s Change End Point"
-msgstr ""
-
-#: ../bin/cbezier.c:654 ../bin/cbezier.c:712
-msgid "Bezier Curve Invalid has three co-incident points"
-msgstr ""
-
-#: ../bin/cbezier.c:656
-#, fuzzy
-msgid "Bezier is Straight Line"
-msgstr "Suora viiva"
-
-#: ../bin/cbezier.c:658
-#, c-format
-msgid "Bezier %s : Min Radius=%s Length=%s fx=%0.3f fy=%0.3f cusp=%0.3f"
-msgstr ""
-
-#: ../bin/cbezier.c:662
-#, fuzzy, c-format
-msgid "Bezier %s : Min Radius=%s Length=%s"
-msgstr "Kaareva raideosa: Säde=%s Pituus=%s"
-
-#: ../bin/cbezier.c:688
-#, fuzzy
-msgid "No unconnected End Point to lock to"
-msgstr "Valitse toinen yhdistettävä päätepiste"
-
-#: ../bin/cbezier.c:714
-#, fuzzy
-msgid "Bezier Curve is Straight Line"
-msgstr "Luo suora viiva"
-
-#: ../bin/cbezier.c:729 ../bin/cbezier.c:743
-msgid "Invalid Bezier Track - end points are identical"
-msgstr ""
-
-#: ../bin/cbezier.c:736
-#, c-format
-msgid "Invalid Bezier Curve has a %s - Adjust"
-msgstr ""
-
-#: ../bin/cbezier.c:740
-msgid "Invalid Bezier Curve has three coincident points - Adjust"
-msgstr ""
-
-#: ../bin/cbezier.c:749
-#, fuzzy
-msgid "Create Bezier"
-msgstr "Luo viivoja"
-
-#: ../bin/cbezier.c:826
-#, fuzzy, c-format
-msgid "%s picked - now select a Point"
-msgstr "Valitsemattoman raideosan päätepiste"
-
-#: ../bin/cbezier.c:852 ../bin/ccornu.c:802
-msgid "No changes made"
-msgstr ""
-
-#: ../bin/cbezier.c:856
-#, fuzzy
-msgid "Modify Bezier"
-msgstr "Muokkaa raidetta"
-
-#: ../bin/cbezier.c:870
-msgid "Modify Bezier Complete - select another"
-msgstr ""
-
-#: ../bin/cbezier.c:875
-msgid "Modify Bezier Cancelled"
-msgstr ""
-
-#: ../bin/cbezier.c:964 ../bin/cbezier.c:1034
-#, fuzzy, c-format
-msgid "Place 1st end point of Bezier + Shift -> snap to %s end"
-msgstr "Aseta suoran raiteen 1. päätepiste"
-
-#: ../bin/cbezier.c:987
-msgid "Shift used, but no Unconnected Track End there"
-msgstr ""
-
-#: ../bin/cbezier.c:1000
-msgid "Shift used, but no Line End there"
-msgstr ""
-
-#: ../bin/cbezier.c:1011
-msgid "Drag end of first Control Arm"
-msgstr ""
-
-#: ../bin/cbezier.c:1019
-msgid "Drag end of second Control Arm"
-msgstr ""
-
-#: ../bin/cbezier.c:1038
-#, c-format
-msgid "Select other end of Bezier, +Shift -> snap to %s end"
-msgstr ""
-
-#: ../bin/cbezier.c:1073
-msgid "Control Arm 1 is too short, try again"
-msgstr ""
-
-#: ../bin/cbezier.c:1078
-#, c-format
-msgid "Select other end of Bezier, +Shift -> snaps to %s end"
-msgstr ""
-
-#: ../bin/cblock.c:105 ../bin/cblock.c:117 ../bin/cblock.c:160
-#: ../bin/ccontrol.c:167 ../bin/ccontrol.c:384 ../bin/compound.c:525
-#: ../bin/csensor.c:159 ../bin/csensor.c:356 ../bin/csignal.c:234
-#: ../bin/csignal.c:473 ../bin/csignal.c:484 ../bin/csignal.c:510
-#: ../bin/cswitchmotor.c:86 ../bin/cswitchmotor.c:105
-#: ../bin/cswitchmotor.c:216 ../bin/dcontmgm.c:91 ../bin/dlayer.c:445
-msgid "Name"
-msgstr "Nimi"
-
-#: ../bin/cblock.c:106 ../bin/cblock.c:118 ../bin/cblock.c:161
-#: ../bin/csensor.c:161 ../bin/csensor.c:362 ../bin/csignal.c:473
-#: ../bin/csignal.c:512
-msgid "Script"
-msgstr ""
-
-#: ../bin/cblock.c:119
-#, fuzzy
-msgid "Segments"
-msgstr "Lohkoja"
-
-#: ../bin/cblock.c:162 ../bin/cdraw.c:219 ../bin/ctodesgn.c:137
-#: ../bin/ctodesgn.c:138 ../bin/ctodesgn.c:139 ../bin/ctodesgn.c:188
-#: ../bin/ctodesgn.c:191 ../bin/ctodesgn.c:211 ../bin/ctodesgn.c:216
-#: ../bin/ctodesgn.c:249 ../bin/ctodesgn.c:254 ../bin/ctodesgn.c:286
-#: ../bin/ctodesgn.c:289 ../bin/ctodesgn.c:292 ../bin/ctodesgn.c:327
-#: ../bin/ctodesgn.c:329 ../bin/ctodesgn.c:347 ../bin/ctodesgn.c:349
-#: ../bin/ctodesgn.c:368 ../bin/ctodesgn.c:370 ../bin/ctodesgn.c:389
-#: ../bin/ctodesgn.c:409 ../bin/ctodesgn.c:429 ../bin/ctodesgn.c:449
-#: ../bin/ctodesgn.c:487 ../bin/ctodesgn.c:506 ../bin/ctodesgn.c:507
-#: ../bin/ctrain.c:184 ../bin/tbezier.c:240 ../bin/tcornu.c:290
-#: ../bin/tcurve.c:356 ../bin/tstraigh.c:89
-msgid "Length"
-msgstr "Pituus"
-
-#: ../bin/cblock.c:163 ../bin/cdraw.c:215 ../bin/compound.c:517
-#: ../bin/tbezier.c:231 ../bin/tcornu.c:277 ../bin/tcurve.c:348
-#: ../bin/tease.c:503 ../bin/tstraigh.c:85
-msgid "End Pt 1: X"
-msgstr "Päätepiste 1: X"
-
-#: ../bin/cblock.c:164 ../bin/cdraw.c:216 ../bin/compound.c:519
-#: ../bin/tbezier.c:236 ../bin/tcornu.c:282 ../bin/tcurve.c:350
-#: ../bin/tease.c:505 ../bin/tstraigh.c:87
-msgid "End Pt 2: X"
-msgstr "Päätepiste 2: X"
-
-#: ../bin/cblock.c:189
-#, fuzzy
-msgid "Change block"
-msgstr "Muuta raiteita"
-
-#: ../bin/cblock.c:240 ../bin/compound.c:694 ../bin/cswitchmotor.c:299
-#, c-format
-msgid "(%d): Layer=%d %s"
-msgstr "(%d): Taso=%d %s"
-
-#: ../bin/cblock.c:261 ../bin/cblock.c:910
-msgid "Block"
-msgstr ""
-
-#: ../bin/cblock.c:425
-#, c-format
-msgid "resolveBlockTrack: T%d[%d]: T%d doesn't exist"
-msgstr ""
-
-#: ../bin/cblock.c:425 ../bin/cswitchmotor.c:395 ../bin/dbench.c:147
-#: ../bin/dcar.c:4234 ../bin/dcar.c:4418 ../bin/dcar.c:4428 ../bin/dcar.c:4476
-#: ../bin/dcar.c:4483 ../bin/dcar.c:4501 ../bin/dcar.c:4514 ../bin/dcar.c:4519
-#: ../bin/dcar.c:4548 ../bin/dcar.c:4710 ../bin/dxfoutput.c:189
-#: ../bin/fileio.c:236 ../bin/fileio.c:541 ../bin/fileio.c:656
-#: ../bin/fileio.c:753 ../bin/fileio.c:944 ../bin/fileio.c:1212
-#: ../bin/fileio.c:1262 ../bin/fileio.c:1308 ../bin/macro.c:174
-#: ../bin/macro.c:838 ../bin/macro.c:854 ../bin/macro.c:1157
-#: ../bin/param.c:1947 ../bin/track.c:986 ../bin/track.c:1360
-#: ../bin/track.c:1651 ../bin/track.c:1655 ../bin/track.c:1675
-#: ../bin/track.c:1737 ../wlib/gtklib/wpref.c:248 ../wlib/gtklib/wpref.c:255
-msgid "Continue"
-msgstr "Jatka"
-
-#: ../bin/cblock.c:502 ../bin/cblock.c:718
-msgid "Block must have a name!"
-msgstr ""
-
-#: ../bin/cblock.c:502 ../bin/cblock.c:522 ../bin/cblock.c:530
-#: ../bin/cblock.c:589 ../bin/cblock.c:706 ../bin/cblock.c:718
-#: ../bin/cblock.c:755 ../bin/ccontrol.c:445 ../bin/cdraw.c:103
-#: ../bin/cdraw.c:909 ../bin/cgroup.c:982 ../bin/cgroup.c:1035
-#: ../bin/cgroup.c:1050 ../bin/cgroup.c:1089 ../bin/cgroup.c:1115
-#: ../bin/cgroup.c:1174 ../bin/cgroup.c:1618 ../bin/cnote.c:100
-#: ../bin/cprint.c:490 ../bin/cprint.c:916 ../bin/cpull.c:497
-#: ../bin/cpull.c:512 ../bin/cpull.c:514 ../bin/cpull.c:516
-#: ../bin/cselect.c:677 ../bin/cselect.c:774 ../bin/cselect.c:1299
-#: ../bin/csensor.c:411 ../bin/csignal.c:641 ../bin/csignal.c:709
-#: ../bin/csnap.c:584 ../bin/csnap.c:717 ../bin/cstruct.c:769
-#: ../bin/cstruct.c:778 ../bin/cstruct.c:880 ../bin/cswitchmotor.c:462
-#: ../bin/cswitchmotor.c:491 ../bin/cswitchmotor.c:625
-#: ../bin/cswitchmotor.c:656 ../bin/ctext.c:179 ../bin/ctodesgn.c:158
-#: ../bin/ctodesgn.c:1048 ../bin/ctodesgn.c:1098 ../bin/ctodesgn.c:1211
-#: ../bin/ctodesgn.c:1513 ../bin/cturnout.c:2410 ../bin/cturnout.c:2537
-#: ../bin/cundo.c:161 ../bin/cundo.c:166 ../bin/dbitmap.c:68
-#: ../bin/dbitmap.c:125 ../bin/dbitmap.c:203 ../bin/dbitmap.c:238
-#: ../bin/dcar.c:3536 ../bin/dcar.c:3720 ../bin/dcar.c:3724 ../bin/dcar.c:3728
-#: ../bin/dcar.c:3733 ../bin/dcar.c:4047 ../bin/dcar.c:4158 ../bin/dcar.c:4538
-#: ../bin/dcmpnd.c:393 ../bin/dcmpnd.c:404 ../bin/dcmpnd.c:536
-#: ../bin/dcustmgm.c:194 ../bin/dcustmgm.c:200 ../bin/dcustmgm.c:209
-#: ../bin/dcustmgm.c:225 ../bin/dease.c:230 ../bin/dlayer.c:206
-#: ../bin/dlayer.c:228 ../bin/dlayer.c:798 ../bin/dlayer.c:804
-#: ../bin/doption.c:164 ../bin/doption.c:244 ../bin/doption.c:398
-#: ../bin/doption.c:410 ../bin/doption.c:476 ../bin/dprmfile.c:91
-#: ../bin/dprmfile.c:105 ../bin/dprmfile.c:119 ../bin/dprmfile.c:165
-#: ../bin/dprmfile.c:533 ../bin/draw.c:2278 ../bin/fileio.c:610
-#: ../bin/fileio.c:678 ../bin/fileio.c:793 ../bin/fileio.c:795
-#: ../bin/fileio.c:800 ../bin/fileio.c:964 ../bin/layout.c:312
-#: ../bin/macro.c:939 ../bin/macro.c:943 ../bin/macro.c:1020
-#: ../bin/macro.c:1126 ../bin/macro.c:1354 ../bin/macro.c:1370
-#: ../bin/misc.c:312 ../bin/misc.c:362 ../bin/misc.c:1634 ../bin/misc.c:1764
-#: ../bin/misc.c:1828 ../bin/misc.c:2404 ../bin/misc.c:2414 ../bin/misc.c:2434
-#: ../bin/misc.c:2437 ../bin/misc2.c:457 ../bin/param.c:1710
-#: ../bin/param.c:1828 ../bin/param.c:1831 ../bin/param.c:1954
-#: ../bin/param.c:1960 ../bin/smalldlg.c:89 ../bin/smalldlg.c:220
-#: ../bin/tease.c:1044 ../bin/track.c:1374 ../wlib/gtklib/wpref.c:122
-#: ../../../../build/work/app/bin/bllnhlp.c:541
-msgid "Ok"
-msgstr "Ok"
-
-#: ../bin/cblock.c:530
-msgid "Block is discontigious!"
-msgstr ""
-
-#: ../bin/cblock.c:535
-#, fuzzy
-msgid "Create block"
-msgstr "Luo nelikulmio"
-
-#: ../bin/cblock.c:571
-#, fuzzy
-msgid "Non track object skipped!"
-msgstr "Yhtään raidetta ei irroitettu"
-
-#: ../bin/cblock.c:575
-msgid "Selected track is already in a block, skipped!"
-msgstr ""
-
-#: ../bin/cblock.c:589
-#, fuzzy
-msgid "Create Block"
-msgstr "Luo helix raide"
-
-#: ../bin/cblock.c:619 ../bin/cblock.c:651
-#, fuzzy
-msgid "Select a track"
-msgstr "Valitse raideosat"
-
-#: ../bin/cblock.c:628 ../bin/cblock.c:659
-msgid "Not a block!"
-msgstr ""
-
-#: ../bin/cblock.c:664
-#, c-format
-msgid "Really delete block %s?"
-msgstr ""
-
-#: ../bin/cblock.c:664 ../bin/cdraw.c:107 ../bin/cgroup.c:988
-#: ../bin/csignal.c:687 ../bin/cswitchmotor.c:581 ../bin/ctodesgn.c:1521
-#: ../bin/ctodesgn.c:2000 ../bin/ctrain.c:2425 ../bin/dbitmap.c:208
-#: ../bin/dcar.c:3672 ../bin/dcar.c:3750 ../bin/dcar.c:3834 ../bin/dcar.c:3853
-#: ../bin/dcar.c:4183 ../bin/dcar.c:4600 ../bin/dcontmgm.c:173
-#: ../bin/dcustmgm.c:141 ../bin/misc.c:1043 ../bin/misc.c:1048
-#: ../bin/misc.c:1113 ../bin/track.c:1376 ../bin/track.c:1473
-#: ../bin/track.c:1487
-msgid "Yes"
-msgstr "Kyllä"
-
-#: ../bin/cblock.c:664 ../bin/cdraw.c:107 ../bin/cgroup.c:988
-#: ../bin/csignal.c:687 ../bin/cswitchmotor.c:581 ../bin/ctodesgn.c:1521
-#: ../bin/ctodesgn.c:2000 ../bin/ctrain.c:2425 ../bin/dcar.c:3672
-#: ../bin/dcar.c:3750 ../bin/dcar.c:3834 ../bin/dcar.c:3853 ../bin/dcar.c:4183
-#: ../bin/dcar.c:4600 ../bin/dcontmgm.c:173 ../bin/dcustmgm.c:141
-#: ../bin/misc.c:1043 ../bin/misc.c:1048 ../bin/misc.c:1113
-#: ../bin/track.c:1376 ../bin/track.c:1473 ../bin/track.c:1487
-msgid "No"
-msgstr "Ei"
-
-#: ../bin/cblock.c:665
-#, fuzzy
-msgid "Delete Block"
-msgstr "Poista raiteita"
-
-#: ../bin/cblock.c:706
-#, fuzzy, c-format
-msgid "Deleting block %s"
-msgstr "Poista raiteita"
-
-#: ../bin/cblock.c:722
-#, fuzzy
-msgid "Modify Block"
-msgstr "Muokkaa raidetta"
-
-#: ../bin/cblock.c:754
-msgid "Edit block"
-msgstr ""
-
-#: ../bin/cblock.c:760
-#, c-format
-msgid "Edit block %d"
-msgstr ""
-
-#: ../bin/ccontrol.c:168 ../bin/cnote.c:162 ../bin/csensor.c:160
-#: ../bin/csignal.c:235 ../bin/ctrain.c:182
-msgid "Position"
-msgstr "Sijainti"
-
-#: ../bin/ccontrol.c:169 ../bin/ccontrol.c:390
-msgid "On Script"
-msgstr ""
-
-#: ../bin/ccontrol.c:170 ../bin/ccontrol.c:392
-msgid "Off Script"
-msgstr ""
-
-#: ../bin/ccontrol.c:213
-#, fuzzy
-msgid "Change Control"
-msgstr "Junien hallinta"
-
-#: ../bin/ccontrol.c:255 ../bin/csensor.c:233
-#, fuzzy, c-format
-msgid "(%d [%s]): Layer=%d, at %0.3f,%0.3f"
-msgstr "(%d): Taso=%d %s"
-
-#: ../bin/ccontrol.c:268 ../bin/ccontrol.c:594
-#, fuzzy
-msgid "Control"
-msgstr "Junien hallinta"
-
-#: ../bin/ccontrol.c:386 ../bin/csensor.c:358 ../bin/csignal.c:486
-#, fuzzy
-msgid "Orgin X"
-msgstr "Marginaali"
-
-#: ../bin/ccontrol.c:388 ../bin/csensor.c:360 ../bin/csignal.c:488
-#, fuzzy
-msgid "Origin Y"
-msgstr "Origo: X"
-
-#: ../bin/ccontrol.c:404
-#, fuzzy
-msgid "Create Control"
-msgstr "Junien hallinta"
-
-#: ../bin/ccontrol.c:407
-#, fuzzy
-msgid "Modify Control"
-msgstr "Junien hallinta"
-
-#: ../bin/ccontrol.c:444
-#, fuzzy
-msgid "Edit control"
-msgstr "Junien hallinta"
-
-#: ../bin/ccontrol.c:484
-#, fuzzy
-msgid "Place control"
-msgstr "Aseta ympyrä"
-
-#: ../bin/ccornu.c:480
-msgid "Not close enough to end point, reselect"
-msgstr ""
-
-#: ../bin/ccornu.c:498
-msgid ""
-"Pick any circle to adjust it by dragging - Enter to accept, Esc to cancel"
-msgstr ""
-
-#: ../bin/ccornu.c:509
-msgid "Track can't be split"
-msgstr ""
-
-#: ../bin/ccornu.c:522
-#, fuzzy
-msgid "Too close to other end of selected Track"
-msgstr "Nosta tai laske kaikkia valittuja raiteita"
-
-#: ../bin/ccornu.c:629
-#, c-format
-msgid "Must be on the %s Track"
-msgstr ""
-
-#: ../bin/ccornu.c:643
-#, c-format
-msgid ""
-"Cornu : Min Radius=%s Max Rate of Radius Change=%s Length=%s Winding Arc=%s"
-msgstr ""
-
-#: ../bin/ccornu.c:661
-msgid "Pick on point to adjust it along track - Enter to confirm, ESC to abort"
-msgstr ""
-
-#: ../bin/ccornu.c:671
-msgid "Cornu has too complex shape - adjust end pts"
-msgstr ""
-
-#: ../bin/ccornu.c:675
-#, fuzzy
-msgid "Create Cornu"
-msgstr "Luo viivoja"
-
-#: ../bin/ccornu.c:679 ../bin/ccornu.c:831 ../bin/tcornu.c:722
-#: ../bin/tcornu.c:919 ../bin/tcornu.c:1174
-#, c-format
-msgid ""
-"Cornu Create Failed for p1[%0.3f,%0.3f] p2[%0.3f,%0.3f], c1[%0.3f,%0.3f] c2"
-"[%0.3f,%0.3f], a1=%0.3f a2=%0.3f, r1=%s r2=%s"
-msgstr ""
-
-#: ../bin/ccornu.c:776
-msgid "Track picked - now select a Point"
-msgstr ""
-
-#: ../bin/ccornu.c:806
-#, fuzzy
-msgid "Modify Cornu"
-msgstr "Muokkaa raidetta"
-
-#: ../bin/ccornu.c:822
-#, c-format
-msgid "Cornu Extension Create Failed for end %d"
-msgstr ""
-
-#: ../bin/ccornu.c:866
-msgid "Modify Cornu Cancelled"
-msgstr ""
-
-#: ../bin/ccornu.c:984
-#, fuzzy
-msgid "Place 1st end point of Cornu track on unconnected end-point"
-msgstr "Aseta suoran raiteen 1. päätepiste"
-
-#: ../bin/ccornu.c:997
-msgid "No Unconnected end point there"
-msgstr ""
-
-#: ../bin/ccornu.c:1005
-msgid "Place 2nd end point of Cornu track on unconnected end-point"
-msgstr ""
-
-#: ../bin/ccornu.c:1008
-msgid "No Unconnected Track End there"
-msgstr ""
-
-#: ../bin/ccornu.c:1020
-#, fuzzy
-msgid "Move 1st end point of Cornu track along track 1"
-msgstr "Aseta suoran raiteen 1. päätepiste"
-
-#: ../bin/ccornu.c:1038
-#, fuzzy
-msgid "Move 2nd end point of Cornu track along track 2"
-msgstr "Aseta suoran raiteen 1. päätepiste"
-
-#: ../bin/ccornu.c:1056
-msgid "Can't Split - Locked to End Point"
-msgstr ""
-
-#: ../bin/ccornu.c:1061
-#, fuzzy
-msgid "Point not on track 1"
-msgstr "Yhdistä kaksi raidetta"
-
-#: ../bin/ccornu.c:1085
-msgid "Put other end of Cornu on an unconnected end point"
-msgstr ""
-
-#: ../bin/ccurve.c:118
-#, fuzzy
-msgid ""
-"Drag from End-Point in direction of curve - Shift locks to track open end-"
-"point"
-msgstr "Vedä päätepisteestä kaarteen suuntaan"
-
-#: ../bin/ccurve.c:120
-msgid "Drag from End-Point in direction of curve"
-msgstr "Vedä päätepisteestä kaarteen suuntaan"
-
-#: ../bin/ccurve.c:124
-#, fuzzy
-msgid "Drag from End-Point to Center - Shift locks to track open end-point"
-msgstr "Vedä päätepisteestä keskipisteeseen"
-
-#: ../bin/ccurve.c:126 ../bin/ccurve.c:187
-msgid "Drag from End-Point to Center"
-msgstr "Vedä päätepisteestä keskipisteeseen"
-
-#: ../bin/ccurve.c:129 ../bin/ccurve.c:187
-msgid "Drag from Center to End-Point"
-msgstr "Vedä keskipisteestä päätepisteeseen"
-
-#: ../bin/ccurve.c:132
-#, fuzzy
-msgid "Drag from one to other end of chord"
-msgstr "Vedä jänne päätepisteiden välille"
-
-#: ../bin/ccurve.c:155
-msgid ""
-"No unconnected end-point on Track - Try again or release Shift and click"
-msgstr ""
-
-#: ../bin/ccurve.c:160
-msgid "Not on a Track - Try again or release Shift and click"
-msgstr ""
-
-#: ../bin/ccurve.c:174
-msgid "End Locked: Drag out curve start"
-msgstr ""
-
-#: ../bin/ccurve.c:175
-#, fuzzy
-msgid "Drag along curve start"
-msgstr "Vedä luodaksesi lähtevän raiteen"
-
-#: ../bin/ccurve.c:185
-msgid "End Locked: Drag out to center"
-msgstr ""
-
-#: ../bin/ccurve.c:193
-msgid "Drag to other end of chord"
-msgstr "Vedä jänne päätepisteiden välille"
-
-#: ../bin/ccurve.c:221
-#, c-format
-msgid "Start Locked: Drag out curve start - Angle=%0.3f"
-msgstr ""
-
-#: ../bin/ccurve.c:222
-#, c-format
-msgid "Drag out curve start - Angle=%0.3f"
-msgstr ""
-
-#: ../bin/ccurve.c:226
-#, fuzzy, c-format
-msgid "Tangent Locked: Drag out center - Radius=%s Angle=%0.3f"
-msgstr "Tangentti raide: Pituus %s Kulma %0.3f"
-
-#: ../bin/ccurve.c:227
-#, fuzzy, c-format
-msgid "Drag out center - Radius=%s Angle=%0.3f"
-msgstr "Säde=%s Kulma=%0.3f"
-
-#: ../bin/ccurve.c:233
-#, c-format
-msgid "Radius=%s Angle=%0.3f"
-msgstr "Säde=%s Kulma=%0.3f"
-
-#: ../bin/ccurve.c:239
-#, c-format
-msgid "Length=%s Angle=%0.3f"
-msgstr "Pituus=%s Kulma=%0.3f"
-
-#: ../bin/ccurve.c:289 ../bin/ccurve.c:397 ../bin/drawgeom.c:440
-msgid "Drag on Red arrows to adjust curve"
-msgstr "Asettele kaari vetämällä punaisista nuolista"
-
-#: ../bin/ccurve.c:352 ../bin/cjoin.c:216 ../bin/cmodify.c:365
-#: ../bin/cturntbl.c:569
-#, c-format
-msgid "Straight Track: Length=%s Angle=%0.3f"
-msgstr "Suora raideosa: Pituus=%s Kulma=%0.3f"
-
-#: ../bin/ccurve.c:357 ../bin/cmodify.c:370 ../bin/drawgeom.c:324
-#: ../wlib/gtklib/ixhelp.c:235
-msgid "Back"
-msgstr "Takaisin"
-
-#: ../bin/ccurve.c:375
-#, c-format
-msgid "Curved Track: Radius=%s Angle=%0.3f Length=%s"
-msgstr "Kaareva raideosa: Säde=%s Kulma=%0.3f Pituus=%s"
-
-#: ../bin/ccurve.c:408 ../bin/cstraigh.c:133
-msgid "Create Straight Track"
-msgstr "Luo suora raideosa"
-
-#: ../bin/ccurve.c:420
-msgid "Create Curved Track"
-msgstr "Luo kaareva raideosa"
-
-#: ../bin/ccurve.c:491
-msgid "Elevation Difference"
-msgstr "Korkeusero"
-
-#: ../bin/ccurve.c:492 ../bin/cdraw.c:218 ../bin/ctodesgn.c:467
-#: ../bin/tcurve.c:353
-msgid "Radius"
-msgstr "Säde"
-
-#: ../bin/ccurve.c:493 ../bin/tcurve.c:354
-msgid "Turns"
-msgstr "Kierroksia"
-
-#: ../bin/ccurve.c:494
-msgid "Angular Separation"
-msgstr "Sisäänkäyntien välinen kulma"
-
-#: ../bin/ccurve.c:495 ../bin/celev.c:45 ../bin/compound.c:521
-#: ../bin/tbezier.c:241 ../bin/tcornu.c:291 ../bin/tcurve.c:360
-#: ../bin/tease.c:513 ../bin/tstraigh.c:91
-msgid "Grade"
-msgstr "Nousukulma"
-
-#: ../bin/ccurve.c:496
-msgid "Vertical Separation"
-msgstr "Kerrosten välinen etäisyys"
-
-#: ../bin/ccurve.c:498
-msgid "Total Length"
-msgstr "Kokonaispituus"
-
-#: ../bin/ccurve.c:574
-#, c-format
-msgid "Total Length %s"
-msgstr "Kokonaispituus %s"
-
-#: ../bin/ccurve.c:613 ../bin/ccurve.c:802 ../bin/tcurve.c:783
-msgid "Helix"
-msgstr "Helix"
-
-#: ../bin/ccurve.c:627
-msgid "Circle Radius"
-msgstr "Ympyrän säde"
-
-#: ../bin/ccurve.c:632
-msgid "Click on Circle Edge"
-msgstr "Aseta ympyrän kehän piste"
-
-#: ../bin/ccurve.c:636
-msgid "Click on Circle Center"
-msgstr "Aseta ympyrän keskipiste"
-
-#: ../bin/ccurve.c:667
-msgid "Drag to Center"
-msgstr "Raahaa keskustaan"
-
-#: ../bin/ccurve.c:671
-msgid "Drag to Edge"
-msgstr "Raahaa kehälle"
-
-#: ../bin/ccurve.c:692 ../bin/ccurve.c:696
-#, c-format
-msgid "Radius=%s"
-msgstr "Säde=%s"
-
-#: ../bin/ccurve.c:711
-msgid "Create Helix Track"
-msgstr "Luo helix raide"
-
-#: ../bin/ccurve.c:718
-msgid "Create Circle Track"
-msgstr "Luo ympyrärata"
-
-#: ../bin/ccurve.c:773
-msgid "Curve Track"
-msgstr "Kaareva raide"
-
-#: ../bin/ccurve.c:773
-msgid "Curve Tracks"
-msgstr "Kaarevat raideosat"
-
-#: ../bin/ccurve.c:774
-msgid "Curve from End-Pt"
-msgstr "Kaari päätepisteestä"
-
-#: ../bin/ccurve.c:775
-msgid "Curve from Tangent"
-msgstr "Kaari kehältä"
-
-#: ../bin/ccurve.c:776
-msgid "Curve from Center"
-msgstr "Kaari keskipisteestä"
-
-#: ../bin/ccurve.c:777
-msgid "Curve from Chord"
-msgstr "Kaari päätepisteiden välille"
-
-#: ../bin/ccurve.c:778 ../bin/cdraw.c:1091
-#, fuzzy
-msgid "Bezier Curve"
-msgstr "Yhdistä kaarteet"
-
-#: ../bin/ccurve.c:781 ../bin/tcurve.c:623
-msgid "Circle Track"
-msgstr "Ympyrärata"
-
-#: ../bin/ccurve.c:781
-msgid "Circle Tracks"
-msgstr "Ympyräradat"
-
-#: ../bin/ccurve.c:782
-msgid "Fixed Radius Circle"
-msgstr "Määriteltysäteinen ympyrä"
-
-#: ../bin/ccurve.c:783
-msgid "Circle from Tangent"
-msgstr "Ympyrä kehältä"
-
-#: ../bin/ccurve.c:784
-msgid "Circle from Center"
-msgstr "Ympyrä keskustasta"
-
-#: ../bin/cdraw.c:103
-msgid "Font Size must be > 0"
-msgstr "Kirjasinkoon on oltava > 0"
-
-#: ../bin/cdraw.c:217 ../bin/tcurve.c:352
-msgid "Center: X"
-msgstr "Keskipiste: X"
-
-#: ../bin/cdraw.c:220 ../bin/cdraw.c:230 ../bin/compound.c:523
-#: ../bin/cprint.c:143 ../bin/csignal.c:236 ../bin/csignal.c:490
-#: ../bin/ctodesgn.c:144 ../bin/ctodesgn.c:146 ../bin/ctodesgn.c:189
-#: ../bin/ctodesgn.c:212 ../bin/ctodesgn.c:214 ../bin/ctodesgn.c:250
-#: ../bin/ctodesgn.c:253 ../bin/ctodesgn.c:287 ../bin/ctodesgn.c:291
-#: ../bin/ctodesgn.c:328 ../bin/ctodesgn.c:348 ../bin/ctodesgn.c:369
-#: ../bin/ctodesgn.c:468 ../bin/ctrain.c:183 ../bin/tease.c:508
-#: ../bin/tstraigh.c:90
-msgid "Angle"
-msgstr "Kulma"
-
-#: ../bin/cdraw.c:221 ../bin/tcurve.c:358
-msgid "CCW Angle"
-msgstr "Vasemman pään kulma"
-
-#: ../bin/cdraw.c:222 ../bin/tcurve.c:359
-msgid "CW Angle"
-msgstr "Oikean pään kulma"
-
-#: ../bin/cdraw.c:223
-msgid "Point Count"
-msgstr "Pisteitä"
-
-#: ../bin/cdraw.c:224 ../bin/cdraw.c:847 ../bin/ctodesgn.c:156
-#: ../bin/tbezier.c:243
-msgid "Line Width"
-msgstr "Viivan paksuus"
-
-#: ../bin/cdraw.c:225 ../bin/cdraw.c:849 ../bin/cdraw.c:851 ../bin/cdraw.c:930
-#: ../bin/cdraw.c:955 ../bin/cmisc.c:97 ../bin/ctext.c:62 ../bin/ctext.c:146
-#: ../bin/ctodesgn.c:157 ../bin/dcar.c:1976 ../bin/dlayer.c:447
-#: ../bin/doption.c:476
-msgid "Color"
-msgstr "Väri"
-
-#: ../bin/cdraw.c:226 ../bin/cdraw.c:456 ../bin/cdraw.c:867
-msgid "Lumber"
-msgstr "Puutavara"
-
-#: ../bin/cdraw.c:227
-msgid "Orientation"
-msgstr "Suunta"
-
-#: ../bin/cdraw.c:228 ../bin/cdraw.c:861
-#: ../../../../build/work/app/bin/bllnhlp.c:543
-msgid "Size"
-msgstr "Koko"
-
-#: ../bin/cdraw.c:229 ../bin/compound.c:522 ../bin/cprint.c:140
-#: ../bin/cturntbl.c:245 ../bin/tease.c:507
-msgid "Origin: X"
-msgstr "Origo: X"
-
-#: ../bin/cdraw.c:231 ../bin/ctext.c:60 ../bin/ctext.c:145
-msgid "Font Size"
-msgstr "Kirjasinkoko"
-
-#: ../bin/cdraw.c:232 ../bin/cdraw.c:519 ../bin/ctext.c:264
-msgid "Text"
-msgstr "Teksti"
-
-#: ../bin/cdraw.c:233 ../bin/cmisc.c:114 ../bin/tcurve.c:361
-#: ../bin/tease.c:514 ../bin/tstraigh.c:92
-msgid "Pivot"
-msgstr "Kiertopiste"
-
-#: ../bin/cdraw.c:234 ../bin/cnote.c:163 ../bin/compound.c:529
-#: ../bin/cturntbl.c:248 ../bin/tbezier.c:242 ../bin/tcornu.c:292
-#: ../bin/tcurve.c:362 ../bin/tease.c:515 ../bin/tstraigh.c:93
-#: ../../../../build/work/app/bin/bllnhlp.c:621
-#: ../../../../build/work/app/bin/bllnhlp.c:622
-#: ../../../../build/work/app/bin/bllnhlp.c:623
-#: ../../../../build/work/app/bin/bllnhlp.c:624
-#: ../../../../build/work/app/bin/bllnhlp.c:625
-#: ../../../../build/work/app/bin/bllnhlp.c:626
-#: ../../../../build/work/app/bin/bllnhlp.c:627
-#: ../../../../build/work/app/bin/bllnhlp.c:628
-#: ../../../../build/work/app/bin/bllnhlp.c:629
-#: ../../../../build/work/app/bin/bllnhlp.c:630
-#: ../../../../build/work/app/bin/bllnhlp.c:631
-#: ../../../../build/work/app/bin/bllnhlp.c:632
-#: ../../../../build/work/app/bin/bllnhlp.c:633
-#: ../../../../build/work/app/bin/bllnhlp.c:634
-#: ../../../../build/work/app/bin/bllnhlp.c:635
-#: ../../../../build/work/app/bin/bllnhlp.c:636
-#: ../../../../build/work/app/bin/bllnhlp.c:637
-#: ../../../../build/work/app/bin/bllnhlp.c:638
-#: ../../../../build/work/app/bin/bllnhlp.c:639
-#: ../../../../build/work/app/bin/bllnhlp.c:640
-msgid "Layer"
-msgstr "Taso"
-
-#: ../bin/cdraw.c:446
-msgid "Straight Line"
-msgstr "Suora viiva"
-
-#: ../bin/cdraw.c:449 ../bin/cdraw.c:1083
-msgid "Dimension Line"
-msgstr "Mittajana"
-
-#: ../bin/cdraw.c:464 ../bin/cdraw.c:868 ../bin/cdraw.c:1085
-msgid "Table Edge"
-msgstr "Pöydän reuna"
-
-#: ../bin/cdraw.c:476 ../bin/cdraw.c:873 ../bin/cdraw.c:874 ../bin/cdraw.c:875
-msgid "Circle"
-msgstr "Ympyrä"
-
-#: ../bin/cdraw.c:484
-msgid "Curved Line"
-msgstr "Kaari"
-
-#: ../bin/cdraw.c:493 ../bin/cdraw.c:878 ../bin/cdraw.c:879 ../bin/cdraw.c:880
-msgid "Filled Circle"
-msgstr "Täytetty ympyrä"
-
-#: ../bin/cdraw.c:498 ../bin/cdraw.c:1102
-msgid "Poly Line"
-msgstr "Monikulmio"
-
-#: ../bin/cdraw.c:504 ../bin/cdraw.c:882 ../bin/cdraw.c:1103
-msgid "Polygon"
-msgstr "Monikulmio"
-
-#: ../bin/cdraw.c:525
-#, c-format
-msgid "%s: Layer=%d"
-msgstr "%s: Taso=%d"
-
-#: ../bin/cdraw.c:536 ../bin/cdraw.c:972
-msgid "Tiny"
-msgstr "Pikkuruinen"
-
-#: ../bin/cdraw.c:537 ../bin/cdraw.c:973
-msgid "Small"
-msgstr "Pieni"
-
-#: ../bin/cdraw.c:538 ../bin/cdraw.c:974
-msgid "Medium"
-msgstr "Keskikokoinen"
-
-#: ../bin/cdraw.c:539 ../bin/cdraw.c:975
-msgid "Large"
-msgstr "Suuri"
-
-#: ../bin/cdraw.c:853 ../bin/cdraw.c:953
-msgid "Lumber Type"
-msgstr "Puutavaran tyyppi"
-
-#: ../bin/cdraw.c:865
-msgid "Straight"
-msgstr "Suora"
-
-#: ../bin/cdraw.c:866
-msgid "Dimension"
-msgstr "Etäisyys"
-
-#: ../bin/cdraw.c:869 ../bin/cdraw.c:870 ../bin/cdraw.c:871 ../bin/cdraw.c:872
-msgid "Curved"
-msgstr "Kaareva"
-
-#: ../bin/cdraw.c:876 ../bin/cdraw.c:1100
-msgid "Box"
-msgstr "Nelikulmio"
-
-#: ../bin/cdraw.c:877
-msgid "Polyline"
-msgstr "Monikulmio"
-
-#: ../bin/cdraw.c:881 ../bin/cdraw.c:1101
-msgid "Filled Box"
-msgstr "Täytetty nelikulmio"
-
-#: ../bin/cdraw.c:883 ../bin/tbezier.c:401
-#, fuzzy
-msgid "Bezier Line"
-msgstr "Ympyrät"
-
-#: ../bin/cdraw.c:928
-#, c-format
-msgid "%s Line Width"
-msgstr "%s viivan paksuus"
-
-#: ../bin/cdraw.c:942
-#, c-format
-msgid "%s Color"
-msgstr "%s väri"
-
-#: ../bin/cdraw.c:970
-msgid "Dimension Line Size"
-msgstr "Mittajanan koko"
-
-#: ../bin/cdraw.c:983
-msgid "Drag to create Table Edge"
-msgstr "Piirrä pöydän reuna"
-
-#: ../bin/cdraw.c:1082
-msgid "Line"
-msgstr "Viiva"
-
-#: ../bin/cdraw.c:1082
-msgid "Draw Line"
-msgstr "Piirrä viiva"
-
-#: ../bin/cdraw.c:1083
-msgid "Draw Dimension Line"
-msgstr "Piirrä mittajana"
-
-#: ../bin/cdraw.c:1084 ../../../../build/work/app/i18n/custmsg.h:53
-msgid "Benchwork"
-msgstr "Runkorakenne"
-
-#: ../bin/cdraw.c:1084
-msgid "Draw Benchwork"
-msgstr "Piirrä runkorakenne"
-
-#: ../bin/cdraw.c:1085
-msgid "Draw Table Edge"
-msgstr "Piirrä pöydän reuna"
-
-#: ../bin/cdraw.c:1087
-msgid "Curve End"
-msgstr "Kaari päätepisteestä"
-
-#: ../bin/cdraw.c:1087
-msgid "Draw Curve from End"
-msgstr "Piirrä kaari päätepisteestä"
-
-#: ../bin/cdraw.c:1088
-msgid "Curve Tangent"
-msgstr "Kaari kehältä"
-
-#: ../bin/cdraw.c:1088
-msgid "Draw Curve from Tangent"
-msgstr "Piirrä kaari kehältä"
-
-#: ../bin/cdraw.c:1089
-msgid "Curve Center"
-msgstr "Kaari keskipisteestä"
-
-#: ../bin/cdraw.c:1089
-msgid "Draw Curve from Center"
-msgstr "Piirrä kaari keskipisteestä"
-
-#: ../bin/cdraw.c:1090
-msgid "Curve Chord"
-msgstr "Kaari jänteestä"
-
-#: ../bin/cdraw.c:1090
-msgid "Draw Curve from Chord"
-msgstr "Piirrä kaari·päätepisteiden·välille"
-
-#: ../bin/cdraw.c:1091
-#, fuzzy
-msgid "Draw Bezier"
-msgstr "Piirrä viiva"
-
-#: ../bin/cdraw.c:1094
-msgid "Circle Tangent"
-msgstr "Ympyrä kehältä"
-
-#: ../bin/cdraw.c:1094
-msgid "Draw Circle from Tangent"
-msgstr "Piirrä ympyrä kehältä"
-
-#: ../bin/cdraw.c:1095
-msgid "Circle Center"
-msgstr "Ympyrä keskustasta"
-
-#: ../bin/cdraw.c:1095
-msgid "Draw Circle from Center"
-msgstr "Piirrä ympyrä keskipisteestä"
-
-#: ../bin/cdraw.c:1097
-msgid "Circle Filled Tangent"
-msgstr "Täytetty ympyrä kehältä"
-
-#: ../bin/cdraw.c:1097
-msgid "Draw Filled Circle from Tangent"
-msgstr "Piirrä täytetty ympyrä kehältä"
-
-#: ../bin/cdraw.c:1098
-msgid "Circle Filled Center"
-msgstr "Täytetty ympyrä keskustasta"
-
-#: ../bin/cdraw.c:1098
-msgid "Draw Filled Circle from Center"
-msgstr "Piirrä täytetty ympyrä keskipisteestä"
-
-#: ../bin/cdraw.c:1100
-msgid "Draw Box"
-msgstr "Piirrä nelikulmio"
-
-#: ../bin/cdraw.c:1101
-msgid "Draw Filled Box"
-msgstr "Piirrä täytetty nelikulmio"
-
-#: ../bin/cdraw.c:1102
-msgid "Draw Polyline"
-msgstr "Piirrä monikulmio"
-
-#: ../bin/cdraw.c:1103
-msgid "Draw Polygon"
-msgstr "Piirrä täytetty monikulmio"
-
-#: ../bin/cdraw.c:1119
-msgid "Straight Objects"
-msgstr "Suorat objektit"
-
-#: ../bin/cdraw.c:1119
-msgid "Draw Straight Objects"
-msgstr "Suorien objektien piirto"
-
-#: ../bin/cdraw.c:1120
-msgid "Curved Lines"
-msgstr "Kaaret"
-
-#: ../bin/cdraw.c:1120
-msgid "Draw Curved Lines"
-msgstr "Kaarien piirto"
-
-#: ../bin/cdraw.c:1121
-msgid "Circle Lines"
-msgstr "Ympyrät"
-
-#: ../bin/cdraw.c:1121
-msgid "Draw Circles"
-msgstr "Ympyröiden piirto"
-
-#: ../bin/cdraw.c:1122
-msgid "Shapes"
-msgstr "Muodot"
-
-#: ../bin/cdraw.c:1122
-msgid "Draw Shapes"
-msgstr "Muotojen piirto"
-
-#: ../bin/celev.c:44 ../bin/cprofile.c:1383 ../bin/csplit.c:107
-#: ../bin/csplit.c:112 ../bin/dease.c:64 ../bin/doption.c:101
-#: ../bin/doption.c:103
-msgid "None"
-msgstr "Ei mitään"
-
-#: ../bin/celev.c:44
-msgid "Defined"
-msgstr "Määritelty"
-
-#: ../bin/celev.c:44
-msgid "Hidden"
-msgstr "Piilossa"
-
-#: ../bin/celev.c:45
-msgid "Computed"
-msgstr "Laskettu"
-
-#: ../bin/celev.c:45
-msgid "Station"
-msgstr "Asema"
-
-#: ../bin/celev.c:45 ../bin/cprofile.c:1382 ../bin/dcmpnd.c:74
-#: ../bin/misc.c:2352
-msgid "Ignore"
-msgstr "Hylkää"
-
-#: ../bin/celev.c:123 ../bin/celev.c:168
-msgid "There are no reachable Defined Elevations"
-msgstr "Ei määriteltyjä korkeustasoja saatavilla"
-
-#: ../bin/celev.c:204
-msgid "Set Elevation"
-msgstr "Aseta korkeus"
-
-#: ../bin/celev.c:308 ../bin/celev.c:325
-#, c-format
-msgid "Elev = %s"
-msgstr "Korkeus = %s"
-
-#: ../bin/celev.c:310 ../bin/celev.c:327
-#, c-format
-msgid "Dist = %s"
-msgstr "Etäisyys = %s"
-
-#: ../bin/celev.c:316 ../bin/celev.c:333 ../bin/celev.c:374 ../bin/celev.c:381
-#: ../bin/celev.c:384
-#, c-format
-msgid "Undefined"
-msgstr "Määrittelemätön"
-
-#: ../bin/celev.c:406 ../bin/celev.c:472
-msgid "Elevation"
-msgstr "Korkeustaso"
-
-#: ../bin/celev.c:406 ../bin/cmisc.c:401 ../bin/cprofile.c:1279
-#: ../bin/dcontmgm.c:300 ../bin/dcustmgm.c:358 ../bin/dlayer.c:1023
-#: ../bin/dpricels.c:154
-msgid "Done"
-msgstr "Valmis"
-
-#: ../bin/celev.c:434 ../bin/csplit.c:92 ../bin/csplit.c:155
-msgid "Split Track"
-msgstr "Pilko raide"
-
-#: ../bin/cgroup.c:591
-msgid "Ungroup Object"
-msgstr "Pura ryhmittely"
-
-#: ../bin/cgroup.c:603
-#, c-format
-msgid "%d objects ungrouped"
-msgstr "%d objetia purettu ryhmästä"
-
-#: ../bin/cgroup.c:605
-msgid "No objects ungrouped"
-msgstr "Yhtään objektia ei purettu ryhmästä"
-
-#: ../bin/cgroup.c:614
-msgid "Replace with new group?"
-msgstr "Korvaa uudella ryhmällä?"
-
-#: ../bin/cgroup.c:619 ../bin/compound.c:524 ../bin/cstruct.c:70
-#: ../bin/ctodesgn.c:148 ../bin/ctodesgn.c:1772 ../bin/cturnout.c:76
-#: ../bin/dcar.c:1941 ../bin/dcar.c:4078 ../bin/dcar.c:4083
-#: ../bin/dcmpnd.c:450 ../bin/dcustmgm.c:50
-#: ../../../../build/work/app/bin/bllnhlp.c:345
-#: ../../../../build/work/app/bin/bllnhlp.c:520
-msgid "Manufacturer"
-msgstr "Valmistaja"
-
-#: ../bin/cgroup.c:620 ../bin/cmisc.c:401 ../bin/cstruct.c:70
-#: ../bin/ctodesgn.c:1773 ../bin/ctodesgn.c:1774 ../bin/ctrain.c:186
-#: ../bin/cturnout.c:76 ../bin/dcar.c:1957 ../bin/dcar.c:4079
-#: ../bin/dcar.c:4084 ../bin/dcmpnd.c:451 ../bin/dcustmgm.c:51
-#: ../bin/denum.c:182 ../bin/denum.c:183 ../bin/denum.c:186
-#: ../../../../build/work/app/bin/bllnhlp.c:346
-msgid "Description"
-msgstr "Kuvaus"
-
-#: ../bin/cgroup.c:621 ../bin/dcmpnd.c:452
-msgid "#"
-msgstr "#"
-
-#: ../bin/cgroup.c:622 ../bin/compound.c:528
-msgid "# Segments"
-msgstr "Lohkoja"
-
-#: ../bin/cgroup.c:1089
-msgid "No endpts"
-msgstr "Ei päätepisteitä"
-
-#: ../bin/cgroup.c:1174
-msgid "No paths"
-msgstr "Ei reittejä"
-
-#: ../bin/cgroup.c:1508 ../bin/cgroup.c:1562
-msgid "Group Tracks"
-msgstr "Ryhmittele raideosia"
-
-#: ../bin/cgroup.c:1618
-msgid "Group Objects"
-msgstr "Ryhmittele"
-
-#: ../bin/chndldto.c:70
-msgid "Place frog and drag angle"
-msgstr "Aseta risteyskappale ja raahaa asettaaksesi kulma"
-
-#: ../bin/chndldto.c:87
-msgid "frog"
-msgstr "Risteyskappale"
-
-#: ../bin/chndldto.c:93
-msgid "Drag to set angle"
-msgstr "Aseta kulma raahaamalla"
-
-#: ../bin/chndldto.c:134
-#, c-format
-msgid "Angle = %0.2f Frog# = %0.2f"
-msgstr "Kulma = %0.2f Risteysnumero = %0.2f"
-
-#: ../bin/chndldto.c:136
-msgid "Frog angle is too close to 0"
-msgstr "Risteyskulma on liian lähellä nollaa"
-
-#: ../bin/chndldto.c:139
-msgid "Select point position"
-msgstr "Aseta kielten kärjet"
-
-#: ../bin/chndldto.c:153 ../bin/chndldto.c:178
-msgid "points"
-msgstr "Kielien päät"
-
-#: ../bin/chndldto.c:275
-#, c-format
-msgid "Length = %0.2f Angle = %0.2f Frog# = %0.2f"
-msgstr "Pituus = %0.2f Kulma = %0.2f Risteysnumero = %0.2f"
-
-#: ../bin/chndldto.c:279
-msgid "Create Hand Laid Turnout"
-msgstr "Luo käsin aseteltu vaihde"
-
-#: ../bin/chndldto.c:370
-msgid "HandLaidTurnout"
-msgstr "Käsin aseteltu vaihde"
-
-#: ../bin/cjoin.c:172
-#, c-format
-msgid "Curved Track: Radius=%s Length=%s"
-msgstr "Kaareva raideosa: Säde=%s Pituus=%s"
-
-#: ../bin/cjoin.c:258
-#, c-format
-msgid "Curved Track: Radius=%s Length=%s Angle=%0.3f"
-msgstr "Kaareva raideosa: Säde=%s Pituus=%s Kulma=%0.3f"
-
-#: ../bin/cjoin.c:354
-#, c-format
-msgid "Track (%d) is too short for transition-curve by %0.3f"
-msgstr "Raide (%d) on %0.3f liian lyhyt kaarreloivennusta varten"
-
-#: ../bin/cjoin.c:371
-#, c-format
-msgid "Connecting track is too short by %0.3f"
-msgstr "Yhdysraide on %0.3f liian lyhyt"
-
-#: ../bin/cjoin.c:415
-msgid "Click on an unselected End-Point"
-msgstr "Valitsemattoman raideosan päätepiste"
-
-#: ../bin/cjoin.c:416
-msgid "Click on a selected End-Point"
-msgstr "Valitun raideosan päätepiste"
-
-#: ../bin/cjoin.c:423
-msgid "unselected"
-msgstr "valitsematon"
-
-#: ../bin/cjoin.c:423 ../bin/cprint.c:148
-msgid "selected"
-msgstr "valittu"
-
-#: ../bin/cjoin.c:458
-msgid "Left click - join with track, Shift Left click - move to join"
-msgstr ""
-"Hiiren vasen: yhdistä raiteet, Vaihto + hiiren vasen: siirrä yhdistääksesi"
-
-#: ../bin/cjoin.c:493 ../bin/cjoin.c:802 ../bin/cjoin.c:811
-msgid "Select 2nd track"
-msgstr "Valitse 2. raideosa"
-
-#: ../bin/cjoin.c:520 ../bin/cmisc.c:52
-msgid "First"
-msgstr "Ensimmäinen"
-
-#: ../bin/cjoin.c:525 ../bin/cmisc.c:52
-msgid "Second"
-msgstr "Toinen"
-
-#: ../bin/cjoin.c:620
-msgid "Beyond end of 2nd track"
-msgstr "2. raideosan päätepisteen takana"
-
-#: ../bin/cjoin.c:655
-msgid "Beyond end of 1st track"
-msgstr "1. raideosan päätepisteen takana"
-
-#: ../bin/cjoin.c:679
-msgid "First "
-msgstr "Ensimmäinen "
-
-#: ../bin/cjoin.c:706
-msgid "Second "
-msgstr "Toinen "
-
-#: ../bin/cjoin.c:720 ../bin/track.c:1959
-msgid "Connecting "
-msgstr "Yhdistetään "
-
-#: ../bin/cjoin.c:814
-msgid "Join Tracks"
-msgstr "Yhdistä raiteet"
-
-#: ../bin/cjoin.c:882
-msgid "Join"
-msgstr "Yhdistä"
-
-#: ../bin/cmisc.c:52
-msgid "Middle"
-msgstr "Keskimmäinen"
-
-#: ../bin/cmisc.c:209 ../bin/cmodify.c:203 ../bin/cnote.c:190
-#: ../bin/compound.c:597 ../bin/ctrain.c:213
-msgid "Change Track"
-msgstr "Muuta raiteita"
-
-#: ../bin/cmisc.c:513
-msgid "Select track to describe"
-msgstr "Valitse määriteltävä raideosa"
-
-#: ../bin/cmisc.c:570 ../bin/doption.c:205
-msgid "Properties"
-msgstr "Asetukset"
-
-#: ../bin/cmisc2.c:52
-msgid "Bridge"
-msgstr "Silta"
-
-#: ../bin/cmodify.c:144
-msgid "Select track to modify"
-msgstr "Valitse muokattava raide"
-
-#: ../bin/cmodify.c:261
-msgid "Modify Track"
-msgstr "Muokkaa raidetta"
-
-#: ../bin/cmodify.c:299
-msgid "Drag to create new track segment"
-msgstr "Raahaa luodaksesi uuden raiteen"
-
-#: ../bin/cmodify.c:429
-#, c-format
-msgid "Curve Track: Radius=%s Length=%s Angle=%0.3f"
-msgstr "Kaareva raideosa: Säde=%s Pituus=%s Kulma=%0.3f"
-
-#: ../bin/cmodify.c:446
-msgid "Extend Track"
-msgstr "Jatka raidetta"
-
-#: ../bin/cmodify.c:522
-msgid "Modify"
-msgstr "Muokkaa"
-
-#: ../bin/cnote.c:100 ../bin/cnote.c:233 ../bin/cnote.c:462
-msgid "Note"
-msgstr "Muistiinpano"
-
-#: ../bin/cnote.c:106
-msgid "Replace this text with your layout notes"
-msgstr "Korvaa tämä teksti muistiinpanollasi"
-
-#: ../bin/cnote.c:217 ../bin/cnote.c:218 ../bin/cnote.c:219
-msgid "Note: "
-msgstr "Muistiinpano: "
-
-#: ../bin/cnote.c:415 ../../../../build/work/app/bin/bllnhlp.c:94
-msgid "Place a note on the layout"
-msgstr "Lisää muistiinpano ratasuunnitelmaan"
-
-#: ../bin/cnote.c:431
-msgid "New Note"
-msgstr "Uusi muistiinpano"
-
-#: ../bin/cnote.c:435
-msgid "Replace this text with your note"
-msgstr "Korvaa tämä teksti muistiinpanollasi"
-
-#: ../bin/compound.c:518 ../bin/compound.c:520 ../bin/tcurve.c:349
-#: ../bin/tcurve.c:351 ../bin/tease.c:504 ../bin/tease.c:506
-#: ../bin/tstraigh.c:86 ../bin/tstraigh.c:88
-msgid "Z"
-msgstr "Z"
-
-#: ../bin/compound.c:526 ../bin/cstruct.c:70 ../bin/cturnout.c:76
-#: ../bin/dcar.c:4078 ../bin/dcar.c:4083 ../bin/dcustmgm.c:51
-#: ../bin/doption.c:106 ../bin/doption.c:107
-msgid "Part No"
-msgstr "Tuotekoodi"
-
-#: ../bin/compound.c:527
-msgid "# End Pt"
-msgstr "Päätepisteitä"
-
-#: ../bin/compound.c:782 ../bin/cswitchmotor.c:220 ../bin/cturnout.c:894
-#: ../bin/cturnout.c:2401 ../bin/cturnout.c:2571
-msgid "Turnout"
-msgstr "Palaraide"
-
-#: ../bin/compound.c:782
-msgid "Sectional Track"
-msgstr "Palaraide"
-
-#: ../bin/compound.c:785 ../bin/cstruct.c:769 ../bin/cstruct.c:914
-msgid "Structure"
-msgstr "Rakennus"
-
-#: ../bin/cparalle.c:44 ../bin/cparalle.c:74 ../bin/cparalle.c:86
-#: ../bin/ctodesgn.c:390 ../bin/ctodesgn.c:410 ../bin/ctodesgn.c:430
-#: ../bin/tcurve.c:355
-msgid "Separation"
-msgstr "Väli"
-
-#: ../bin/cparalle.c:96
-msgid " Track doesn't support parallel"
-msgstr ""
-
-#: ../bin/cparalle.c:145
-msgid "Create Parallel Track"
-msgstr "Luo rinnakkainen raide"
-
-#: ../bin/cparalle.c:189 ../../../../build/work/app/i18n/custmsg.h:44
-msgid "Parallel"
-msgstr "Rinnakkainen"
-
-#: ../bin/cprint.c:102
-msgid "Portrait"
-msgstr "Pysty"
-
-#: ../bin/cprint.c:102
-msgid "Landscape"
-msgstr "Vaaka"
-
-#: ../bin/cprint.c:103 ../bin/cselect.c:1922 ../bin/cselect.c:1926
-#: ../bin/cswitchmotor.c:87 ../bin/cswitchmotor.c:106
-#: ../bin/cswitchmotor.c:217 ../bin/dbench.c:78 ../bin/dease.c:64
-#: ../bin/doption.c:100 ../bin/doption.c:102 ../bin/doption.c:200
-#: ../bin/macro.c:1233
-msgid "Normal"
-msgstr "Normaali"
-
-#: ../bin/cprint.c:103 ../bin/cswitchmotor.c:88 ../bin/cswitchmotor.c:107
-#: ../bin/cswitchmotor.c:218 ../bin/ctrain.c:877 ../bin/ctrain.c:1187
-msgid "Reverse"
-msgstr "Taakse"
-
-#: ../bin/cprint.c:104
-msgid "Engineering Data"
-msgstr "Suunnittelutiedot"
-
-#: ../bin/cprint.c:105
-msgid "Print Registration Marks"
-msgstr "Tulosta kohdistusmerkinnät"
-
-#: ../bin/cprint.c:106
-msgid "Ignore Page Margins"
-msgstr "Ei marginaaleja"
-
-#: ../bin/cprint.c:107
-msgid "Print Snap Grid"
-msgstr "Tulosta kohdistusruudukko"
-
-#: ../bin/cprint.c:108
-msgid "Print Rulers"
-msgstr "Tulosta viivaimet"
-
-#: ../bin/cprint.c:109 ../../../../build/work/app/bin/bllnhlp.c:424
-msgid "Print Roadbed Outline"
-msgstr "Tulosta ratapenkan ulkoreuna"
-
-#: ../bin/cprint.c:110
-#, fuzzy
-msgid "Print Centerline below Scale 1:1"
-msgstr "Tulosta keskiviiva"
-
-#: ../bin/cprint.c:118
-msgid "Print Scale"
-msgstr "Tulostuksen mittakaava"
-
-#: ../bin/cprint.c:119
-msgid "Page Width"
-msgstr "Sivun leveys"
-
-#: ../bin/cprint.c:120
-msgid "Max"
-msgstr "Max"
-
-#: ../bin/cprint.c:121
-msgid "Height"
-msgstr "Korkeus"
-
-#: ../bin/cprint.c:122
-msgid "Snap Shot"
-msgstr "Yhdelle sivulle"
-
-#: ../bin/cprint.c:123
-msgid "Page Format"
-msgstr "Sivun muotoilu"
-
-#: ../bin/cprint.c:124
-msgid "Print Order"
-msgstr "Tulostusjärjestys"
-
-#: ../bin/cprint.c:139 ../bin/ctrain.c:185 ../bin/dcar.c:1980
-msgid "Width"
-msgstr "Leveys"
-
-#: ../bin/cprint.c:141 ../bin/csnap.c:542
-msgid "Y"
-msgstr "Y"
-
-#: ../bin/cprint.c:142 ../bin/dcar.c:1961
-msgid "Reset"
-msgstr "Palauta"
-
-#: ../bin/cprint.c:144
-msgid "Setup"
-msgstr "Asetukset"
-
-#: ../bin/cprint.c:145 ../bin/cprofile.c:569 ../bin/misc.c:591
-msgid "Clear"
-msgstr "Tyhjennä"
-
-#: ../bin/cprint.c:147 ../bin/cprint.c:588
-msgid "0 pages"
-msgstr "0 sivua"
-
-#: ../bin/cprint.c:211 ../bin/cprint.c:260
-#, c-format
-msgid "%d pages"
-msgstr "%d sivua"
-
-#: ../bin/cprint.c:380
-#, fuzzy, c-format
-msgid "PrintScale 1:%ld Room %s x %s Model Scale %s File %s"
-msgstr "Tulostusmittakaava %ld:1 Huone %s x %s Mittakaava %s Tiedosto %s"
-
-#: ../bin/cprint.c:669
-msgid "1 page"
-msgstr "1 sivu"
-
-#: ../bin/cprint.c:1039 ../bin/cprofile.c:570 ../bin/ctodesgn.c:1720
-#: ../bin/denum.c:55
-msgid "Print"
-msgstr "Tulosta"
-
-#: ../bin/cprint.c:1061
-msgid "Select pages to print, or drag to move print grid"
-msgstr "Valitse tulostettavat sivut tai siirrä tulostusruudukkoa raahaamalla"
-
-#: ../bin/cprint.c:1160
-msgid "Print..."
-msgstr "Tulosta..."
-
-#: ../bin/cprofile.c:477 ../bin/cprofile.c:1279 ../bin/cprofile.c:1379
-#: ../../../../build/work/app/bin/bllnhlp.c:104
-#: ../../../../build/work/app/i18n/custmsg.h:40
-msgid "Profile"
-msgstr "Profiili"
-
-#: ../bin/cprofile.c:493
-#, c-format
-msgid "%s Profile: %s"
-msgstr "%s Profiili: %s"
-
-#: ../bin/cprofile.c:641 ../bin/cprofile.c:651
-#, c-format
-msgid "Elev = %0.1f"
-msgstr "Korkeus = %0.1f"
-
-#: ../bin/cprofile.c:653
-#, c-format
-msgid "Elev=%0.2f %0.1f%%"
-msgstr "Korkeus=%0.2f %0.1f%%"
-
-#: ../bin/cprofile.c:657
-#, c-format
-msgid "%0.1f%% Elev = %0.2f"
-msgstr "%0.1f%% Korkeus = %0.2f"
-
-#: ../bin/cprofile.c:661
-#, c-format
-msgid "%0.1f%% Elev = %0.2f %0.1f%%"
-msgstr "%0.1f%% Korkeus = %0.2f %0.1f%%"
-
-#: ../bin/cprofile.c:672 ../bin/cprofile.c:1226
-msgid "Profile Command"
-msgstr "Profiili komento"
-
-#: ../bin/cprofile.c:680 ../bin/cprofile.c:1284
-msgid "Drag to change Elevation"
-msgstr "Muuta korkeutta raahaamalla"
-
-#: ../bin/cprofile.c:747
-msgid "Select a Defined Elevation to start Profile"
-msgstr "Valitse määritelty korkeus aloittaaksesi profiili"
-
-#: ../bin/cprofile.c:749
-msgid "Select a Defined Elevation to extend Profile"
-msgstr "Valitse määritelty korkeus laajentaaksesi profiilia"
-
-#: ../bin/cprofile.c:1296
-msgid "Select a Defined Elevation to start profile"
-msgstr "Valitse määritelty korkeus aloittaaksesi profiili"
-
-#: ../bin/cprofile.c:1381
-msgid "Define"
-msgstr "Määrittele"
-
-#: ../bin/cpull.c:436 ../bin/cpull.c:581
-#, c-format
-msgid "%d tracks moved"
-msgstr "%d raideosaa siirretty"
-
-#: ../bin/cpull.c:471
-msgid "Pull Tracks"
-msgstr "Liitä raiteet"
-
-#: ../bin/cpull.c:545
-msgid "Tighten Tracks"
-msgstr "Yhdistä raiteet"
-
-#: ../bin/cpull.c:598
-msgid "Select first End-Point to connect"
-msgstr "Valitse ensimmäinen yhdistettävä päätepiste"
-
-#: ../bin/cpull.c:609
-msgid "Select second End-Point to connect"
-msgstr "Valitse toinen yhdistettävä päätepiste"
-
-#: ../bin/cpull.c:659
-msgid "Connect Sectional Tracks"
-msgstr "Liitä palaraiteet"
-
-#: ../bin/cruler.c:151 ../../../../build/work/app/i18n/custmsg.h:51
-msgid "Ruler"
-msgstr "Viivain"
-
-#: ../bin/cselect.c:313
-msgid "Change Track Width"
-msgstr "Muuta raiteen pituutta"
-
-#: ../bin/cselect.c:334
-msgid "Delete Tracks"
-msgstr "Poista raiteita"
-
-#: ../bin/cselect.c:386
-msgid "Hide Tracks (Tunnel)"
-msgstr "Piilota raiteet (tunneli)"
-
-#: ../bin/cselect.c:425 ../bin/misc.c:2060
-msgid "Move To Current Layer"
-msgstr "Siirrä nykyiselle tasolle"
-
-#: ../bin/cselect.c:464 ../bin/misc.c:2175
-msgid "Clear Elevations"
-msgstr "Poista korkeusmääritykset"
-
-#: ../bin/cselect.c:508
-msgid "Add Elevations"
-msgstr "Päätepisteiden korkeudet"
-
-#: ../bin/cselect.c:523
-msgid "Refresh Compound"
-msgstr "Päivitä vaihteet/rakennukset"
-
-#: ../bin/cselect.c:559 ../bin/dcar.c:4078 ../bin/dcar.c:4083
-#: ../bin/dcustmgm.c:51 ../bin/layout.c:239
-msgid "Scale"
-msgstr "Mittakaava"
-
-#: ../bin/cselect.c:559 ../bin/cselect.c:584
-msgid "Ratio"
-msgstr "Suhde"
-
-#: ../bin/cselect.c:568
-msgid "Do not resize track"
-msgstr "Älä muuta raiteiden kokoa"
-
-#: ../bin/cselect.c:572
-msgid "Rescale by:"
-msgstr "Muunnos:"
-
-#: ../bin/cselect.c:574
-msgid "From:"
-msgstr "Alkuperäinen:"
-
-#: ../bin/cselect.c:578
-msgid "To: "
-msgstr "Uusi:"
-
-#: ../bin/cselect.c:643
-msgid "Rescale Tracks"
-msgstr "Muuta raiteiden mittakaavaa"
-
-#: ../bin/cselect.c:774 ../../../../build/work/app/i18n/custmsg.h:47
-msgid "Rescale"
-msgstr "Mittakaavan muutos"
-
-#: ../bin/cselect.c:801
-msgid "Draw moving track normally"
-msgstr "Piirrä liikuteltavat raiteet normaalisti"
-
-#: ../bin/cselect.c:802
-msgid "Draw moving track simply"
-msgstr "Piirrä liikuteltavat raiteet yksinkertaistetuna"
-
-#: ../bin/cselect.c:803
-msgid "Draw moving track as end-points"
-msgstr "Piirrä liikuteltavat raiteet päätepisteinä"
-
-#: ../bin/cselect.c:1085
-msgid "Cornu too tight - it was deleted"
-msgstr ""
-
-#: ../bin/cselect.c:1105
-msgid "Cornu selected too tight after move - it was left alone"
-msgstr ""
-
-#: ../bin/cselect.c:1145
-msgid "Move To Join"
-msgstr "Siirrä yhdistääksesi"
-
-#: ../bin/cselect.c:1181
-msgid "Drag to move selected tracks"
-msgstr "Siirrä valitut raideosat raahaamalla"
-
-#: ../bin/cselect.c:1188
-msgid "Move Tracks"
-msgstr "Siirrä raiteita"
-
-#: ../bin/cselect.c:1245
-msgid "Click on selected object to align"
-msgstr "Klikkaa valittua objektia kohdistaaksesi"
-
-#: ../bin/cselect.c:1273
-msgid "Drag to rotate selected tracks"
-msgstr "Pyöritä valittuja raideosia raahaamalla"
-
-#: ../bin/cselect.c:1282 ../bin/cselect.c:1438
-msgid "Rotate Tracks"
-msgstr "Pyöritä raiteita"
-
-#: ../bin/cselect.c:1321 ../bin/cselect.c:1352
-#, c-format
-msgid "Angle %0.3f"
-msgstr "Kulma %0.3f"
-
-#: ../bin/cselect.c:1382
-#, c-format
-msgid " Angle %0.3f #%ld"
-msgstr " Kulma %0.3f #%ld"
-
-#: ../bin/cselect.c:1384
-#, c-format
-msgid " Angle %0.3f"
-msgstr " Kulma %0.3f"
-
-#: ../bin/cselect.c:1395
-msgid "Click on the 2nd Unselected object"
-msgstr "Klikkaa valitsematonta objektia"
-
-#: ../bin/cselect.c:1450
-msgid "Toggle Label"
-msgstr "Näytä/piilota merkintä"
-
-#: ../bin/cselect.c:1479
-msgid "Select and drag a description"
-msgstr "Valitse ja raahaa merkintöjä"
-
-#: ../bin/cselect.c:1521
-msgid "Move Label"
-msgstr "Siirrä merkintöjä"
-
-#: ../bin/cselect.c:1546
-msgid "Show Description"
-msgstr "Näytä kuvaus"
-
-#: ../bin/cselect.c:1628
-msgid "Drag to mark mirror line"
-msgstr "Vedä hiirellä peilauslinja"
-
-#: ../bin/cselect.c:1643
-#, c-format
-msgid "Angle %0.2f"
-msgstr "Kulma %0.2f"
-
-#: ../bin/cselect.c:1648
-msgid "Flip Tracks"
-msgstr "Peilaa raiteet"
-
-#: ../bin/cselect.c:1811
-msgid "Select tracks"
-msgstr "Valitse raideosat"
-
-#: ../bin/cselect.c:1909 ../bin/dcar.c:1544 ../bin/doption.c:205
-#: ../../../../build/work/app/i18n/custmsg.h:13
-msgid "Select"
-msgstr "Valitse"
-
-#: ../bin/cselect.c:1923 ../bin/cselect.c:1927 ../bin/doption.c:201
-msgid "Simple"
-msgstr "Yksinkertainen"
-
-#: ../bin/cselect.c:1924 ../bin/cselect.c:1928
-msgid "End Points"
-msgstr "Päätepisteet"
-
-#: ../bin/cselect.c:1931
-msgid "Align"
-msgstr "Kohdista"
-
-#: ../bin/cselect.c:1952 ../bin/misc.c:1990
-msgid "Tunnel"
-msgstr "Tunneli"
-
-#: ../bin/cselect.c:1961
-msgid "Move Description"
-msgstr "Siirrä merkintöjä"
-
-#: ../bin/cselect.c:1968 ../bin/misc.c:1988
-msgid "Move"
-msgstr "Siirrä"
-
-#: ../bin/cselect.c:1970 ../bin/misc.c:1764 ../bin/misc.c:1989
-#: ../../../../build/work/app/i18n/custmsg.h:58
-msgid "Rotate"
-msgstr "Pyöritä"
-
-#: ../bin/cselect.c:1972 ../bin/dcar.c:1963
-#: ../../../../build/work/app/i18n/custmsg.h:59
-msgid "Flip"
-msgstr "Peilikuva"
-
-#: ../bin/csensor.c:197
-#, fuzzy
-msgid "Change Sensor"
-msgstr "Muuta mittakaavaa"
-
-#: ../bin/csensor.c:243 ../bin/csensor.c:556
-msgid "Sensor"
-msgstr ""
-
-#: ../bin/csensor.c:374
-#, fuzzy
-msgid "Create Sensor"
-msgstr "Luo runkorakenne"
-
-#: ../bin/csensor.c:377
-#, fuzzy
-msgid "Modify Sensor"
-msgstr "Muokkaa raidetta"
-
-#: ../bin/csensor.c:410
-#, fuzzy
-msgid "Edit sensor"
-msgstr "Muokkaa -valikko"
-
-#: ../bin/csensor.c:446
-#, fuzzy
-msgid "Place sensor"
-msgstr "Aseta uusi vaihde"
-
-#: ../bin/csignal.c:237
-#, fuzzy
-msgid "Number Of Heads"
-msgstr "Numerot"
-
-#: ../bin/csignal.c:269
-#, fuzzy
-msgid "Change Signal"
-msgstr "Muuta mittakaavaa"
-
-#: ../bin/csignal.c:303
-#, c-format
-msgid "(%d [%s]): Layer=%d, %d heads at %0.3f,%0.3f A%0.3f"
-msgstr ""
-
-#: ../bin/csignal.c:314 ../bin/csignal.c:885
-msgid "Signal"
-msgstr ""
-
-#: ../bin/csignal.c:492
-#, fuzzy
-msgid "Number of Heads"
-msgstr "Numerot"
-
-#: ../bin/csignal.c:497
-#, fuzzy
-msgid "Edit Aspect"
-msgstr "Muokkaa -valikko"
-
-#: ../bin/csignal.c:499
-msgid "Add Aspect"
-msgstr ""
-
-#: ../bin/csignal.c:501
-#, fuzzy
-msgid "Delete Aspect"
-msgstr "Poista valitut objektit"
-
-#: ../bin/csignal.c:514
-msgid "Aspect Index"
-msgstr ""
-
-#: ../bin/csignal.c:529
-#, fuzzy
-msgid "Create Signal"
-msgstr "Luo viivoja"
-
-#: ../bin/csignal.c:533
-#, fuzzy
-msgid "Modify Signal"
-msgstr "Muokkaa raidetta"
-
-#: ../bin/csignal.c:640
-#, fuzzy
-msgid "Edit aspect"
-msgstr "Muokkaa -valikko"
-
-#: ../bin/csignal.c:687
-#, fuzzy, c-format
-msgid "Are you sure you want to delete the %d aspect(s)"
-msgstr "Haluatko varmasti poistaa nämä %d vaunua/veturia?"
-
-#: ../bin/csignal.c:708
-#, fuzzy
-msgid "Edit signal"
-msgstr "Muokkaa -valikko"
-
-#: ../bin/csignal.c:770
-msgid "Place base of signal"
-msgstr ""
-
-#: ../bin/csignal.c:775
-#, fuzzy
-msgid "Drag to orient signal"
-msgstr "Aseta kulma raahaamalla"
-
-#: ../bin/csnap.c:523
-msgid "Horz"
-msgstr "Vaaka"
-
-#: ../bin/csnap.c:525
-msgid "Spacing"
-msgstr "Väli"
-
-#: ../bin/csnap.c:527
-msgid "Divisions"
-msgstr "Jako"
-
-#: ../bin/csnap.c:530
-msgid "Enable"
-msgstr "Salli"
-
-#: ../bin/csnap.c:531
-msgid "Vert"
-msgstr "Pysty"
-
-#: ../bin/csnap.c:540 ../bin/dease.c:73
-msgid "X"
-msgstr "X"
-
-#: ../bin/csnap.c:544
-msgid "A"
-msgstr "K"
-
-#: ../bin/csnap.c:547
-msgid "Show"
-msgstr "Näytä"
-
-#: ../bin/csnap.c:717 ../bin/doption.c:448
-msgid "Snap Grid"
-msgstr "Kohdistusruudukko"
-
-#: ../bin/csnap.c:802
-msgid "Change Grid..."
-msgstr "Kohdistusruudukko..."
-
-#: ../bin/csplit.c:41
-msgid "Set Block Gaps"
-msgstr "Aseta lohkojen välit"
-
-#: ../bin/csplit.c:68
-msgid "Select track to split"
-msgstr "Valitse pilkottava raide"
-
-#: ../bin/csplit.c:84
-#, fuzzy
-msgid "Can't Split that Track"
-msgstr "Pilko raide"
-
-#: ../bin/csplit.c:108 ../bin/dbench.c:69 ../bin/dbench.c:80
-msgid "Left"
-msgstr "Vasen"
-
-#: ../bin/csplit.c:109 ../bin/dbench.c:70 ../bin/dbench.c:79
-msgid "Right"
-msgstr "Oikea"
-
-#: ../bin/csplit.c:110 ../bin/csplit.c:115
-msgid "Both"
-msgstr "Molemmat"
-
-#: ../bin/csplit.c:113
-msgid "Top"
-msgstr "Päällimmäiseksi"
-
-#: ../bin/csplit.c:114
-msgid "Bottom"
-msgstr "Alimmaiseksi"
-
-#: ../bin/cstraigh.c:58
-#, fuzzy
-msgid ""
-"Place 1st end point of Straight track + Shift -> snap to unconnected endpoint"
-msgstr "Aseta suoran raiteen 1. päätepiste"
-
-#: ../bin/cstraigh.c:74
-msgid ""
-"No Unconnected end-point on track - Try again or release shift and click"
-msgstr ""
-
-#: ../bin/cstraigh.c:80
-msgid "Not on a Track - Try again or release shift and click"
-msgstr ""
-
-#: ../bin/cstraigh.c:89
-msgid "Drag to place 2nd end point"
-msgstr "Raahaa asettaaksesi 2. päätepiste"
-
-#: ../bin/cstraigh.c:110
-#, c-format
-msgid "Straight Track Length=%s Angle=%0.3f"
-msgstr "Suora raideosa Pituus=%s Kulma=%0.3f"
-
-#: ../bin/cstraigh.c:158 ../bin/tstraigh.c:267
-msgid "Straight Track"
-msgstr "Suora raide"
-
-#: ../bin/cstruct.c:72 ../bin/cturnout.c:78 ../bin/doption.c:100
-#: ../bin/doption.c:208
-msgid "Hide"
-msgstr "Piilota"
-
-#: ../bin/cstruct.c:327 ../bin/cstruct.c:354
-msgid "Pier Number"
-msgstr "Pilarin numero"
-
-#: ../bin/cstruct.c:439
-#, c-format
-msgid "Scale %d:1"
-msgstr "Mittakaava %d:1"
-
-#: ../bin/cstruct.c:441
-#, c-format
-msgid "Width %s"
-msgstr "Leveys %s"
-
-#: ../bin/cstruct.c:443
-#, c-format
-msgid "Height %s"
-msgstr "Korkeus %s"
-
-#: ../bin/cstruct.c:541
-msgid "Place Structure"
-msgstr "Aseta rakennus"
-
-#: ../bin/cstruct.c:651
-msgid "Drag to place"
-msgstr "Raahaa paikoilleen"
-
-#: ../bin/cstruct.c:679
-msgid "Drag to rotate"
-msgstr "Raahaa pyörittääksesi"
-
-#: ../bin/cstruct.c:700
-#, c-format
-msgid "Angle = %0.3f"
-msgstr "Kulma = %0.3f"
-
-#: ../bin/cstruct.c:786
-msgid "Select Structure and then drag to place"
-msgstr "Valitse rakennus ja raahaa paikoilleen"
-
-#: ../bin/cstruct.c:804 ../bin/cstruct.c:891
-msgid ""
-"Left drag to move, right drag to rotate, or press Return or click Ok to "
-"finalize"
-msgstr ""
-"Siirrä raahaamalla hiiren vasemmalla, pyöritä rahaamalla hiiren oikealla, "
-"tai paina return tai klikkaa Ok kun valmis"
-
-#: ../bin/cstruct.c:884 ../bin/cturnout.c:2541
-#, c-format
-msgid "Place %s and draw into position"
-msgstr "Aseta %s ja raahaa paikoilleen"
-
-#: ../bin/cswitchmotor.c:89 ../bin/cswitchmotor.c:108
-#: ../bin/cswitchmotor.c:219
-#, fuzzy
-msgid "Point Sense"
-msgstr "Pisteitä"
-
-#: ../bin/cswitchmotor.c:109
-#, fuzzy
-msgid "Turnout Number"
-msgstr "Tuotekoodi"
-
-#: ../bin/cswitchmotor.c:255
-#, fuzzy
-msgid "Change Switch Motor"
-msgstr "Muuta suuntaa"
-
-#: ../bin/cswitchmotor.c:316
-msgid "Switch motor"
-msgstr ""
-
-#: ../bin/cswitchmotor.c:395
-#, c-format
-msgid "ResolveSwitchmotor: Turnout T%d: T%d doesn't exist"
-msgstr ""
-
-#: ../bin/cswitchmotor.c:462 ../bin/cswitchmotor.c:625
-msgid "Switch motor must have a name!"
-msgstr ""
-
-#: ../bin/cswitchmotor.c:466
-#, fuzzy
-msgid "Create Switch Motor"
-msgstr "Piirto"
-
-#: ../bin/cswitchmotor.c:491
-#, fuzzy
-msgid "Create switch motor"
-msgstr "Luo suora raideosa"
-
-#: ../bin/cswitchmotor.c:505 ../bin/cswitchmotor.c:536
-#: ../bin/cswitchmotor.c:568
-#, fuzzy
-msgid "Select a turnout"
-msgstr "Ensin valitsemme vaihteen.\n"
-
-#: ../bin/cswitchmotor.c:512
-msgid "Not a turnout!"
-msgstr ""
-
-#: ../bin/cswitchmotor.c:545 ../bin/cswitchmotor.c:576
-msgid "Not a switch motor!"
-msgstr ""
-
-#: ../bin/cswitchmotor.c:581
-#, c-format
-msgid "Really delete switch motor %s?"
-msgstr ""
-
-#: ../bin/cswitchmotor.c:582
-msgid "Delete Switch Motor"
-msgstr ""
-
-#: ../bin/cswitchmotor.c:629
-msgid "Modify Switch Motor"
-msgstr ""
-
-#: ../bin/cswitchmotor.c:655
-msgid "Edit switch motor"
-msgstr ""
-
-#: ../bin/cswitchmotor.c:661
-#, c-format
-msgid "Edit switch motor %d"
-msgstr ""
-
-#: ../bin/cswitchmotor.c:769
-msgid "Switch Motor"
-msgstr ""
-
-#: ../bin/cswitchmotor.c:781
-#, c-format
-msgid "Deleting Switch Motor %s"
-msgstr ""
-
-#: ../bin/ctext.c:196 ../bin/ctext.c:235
-msgid "Create Text"
-msgstr "Luo teksti"
-
-#: ../bin/ctext.c:266
-msgid "Fonts..."
-msgstr "Kirjasimet..."
-
-#: ../bin/ctodesgn.c:114
-msgid "Frog #"
-msgstr "Risteysnumero"
-
-#: ../bin/ctodesgn.c:114
-msgid "Degrees"
-msgstr "Astetta"
-
-#: ../bin/ctodesgn.c:141 ../bin/ctodesgn.c:142 ../bin/ctodesgn.c:190
-#: ../bin/ctodesgn.c:213 ../bin/ctodesgn.c:215 ../bin/ctodesgn.c:251
-#: ../bin/ctodesgn.c:252 ../bin/ctodesgn.c:288 ../bin/ctodesgn.c:290
-#: ../bin/ctodesgn.c:505
-msgid "Offset"
-msgstr "Siirtymä"
-
-#: ../bin/ctodesgn.c:150 ../bin/ctodesgn.c:1767 ../bin/ctodesgn.c:1768
-msgid "Left Description"
-msgstr "Vasemman kuvaus"
-
-#: ../bin/ctodesgn.c:151 ../bin/ctodesgn.c:154
-msgid " #"
-msgstr " #"
-
-#: ../bin/ctodesgn.c:153 ../bin/ctodesgn.c:1766
-msgid "Right Description"
-msgstr "Oikean kuvaus"
-
-#: ../bin/ctodesgn.c:155
-msgid "Roadbed Width"
-msgstr "Ratapenkan leveys"
-
-#: ../bin/ctodesgn.c:159 ../bin/denum.c:56
-msgid "Print Setup"
-msgstr "Tulostusasetukset"
-
-#: ../bin/ctodesgn.c:188
-msgid "Diverging Length"
-msgstr "Poikkeavan raiteen pituus"
-
-#: ../bin/ctodesgn.c:189
-msgid "Diverging Angle"
-msgstr "Poikkeavan raiteen kulma"
-
-#: ../bin/ctodesgn.c:190
-msgid "Diverging Offset"
-msgstr "Poikkeavan raiteen siirtymä"
-
-#: ../bin/ctodesgn.c:191
-msgid "Overall Length"
-msgstr "Kokonaispituus"
-
-#: ../bin/ctodesgn.c:201
-msgid "Regular Turnout"
-msgstr "Tavallinen vaihde"
-
-#: ../bin/ctodesgn.c:211
-msgid "Inner Length"
-msgstr "Sisemmän raiteen pituus"
-
-#: ../bin/ctodesgn.c:212
-msgid "Inner Angle"
-msgstr "Sisemmän raiteen kulma"
-
-#: ../bin/ctodesgn.c:213
-msgid "Inner Offset"
-msgstr "Sisemmän raiteen siirtymä"
-
-#: ../bin/ctodesgn.c:214
-msgid "Outer Angle"
-msgstr "Ulomman raiteen kulma"
-
-#: ../bin/ctodesgn.c:215
-msgid "Outer Offset"
-msgstr "Ulomman raiteen siirtymä"
-
-#: ../bin/ctodesgn.c:216
-msgid "Outer Length"
-msgstr "Ulomman raiteen pituus"
-
-#: ../bin/ctodesgn.c:238
-msgid "Curved Turnout"
-msgstr "Kaareva vaihde"
-
-#: ../bin/ctodesgn.c:249 ../bin/ctodesgn.c:286
-msgid "Left Length"
-msgstr "Vasemman raiteen pituus"
-
-#: ../bin/ctodesgn.c:250 ../bin/ctodesgn.c:287
-msgid "Left Angle"
-msgstr "Vasemman raiteen kulma"
-
-#: ../bin/ctodesgn.c:251 ../bin/ctodesgn.c:288
-msgid "Left Offset"
-msgstr "Vasemman raiteen siirtymä"
-
-#: ../bin/ctodesgn.c:252 ../bin/ctodesgn.c:290
-msgid "Right Offset"
-msgstr "Oikean raiteen siirtymä"
-
-#: ../bin/ctodesgn.c:253 ../bin/ctodesgn.c:291
-msgid "Right Angle"
-msgstr "Oikean raiteen kulma"
-
-#: ../bin/ctodesgn.c:254 ../bin/ctodesgn.c:292
-msgid "Right Length"
-msgstr "Oikean raiteen pituus"
-
-#: ../bin/ctodesgn.c:276
-msgid "Wye Turnout"
-msgstr "Y-vaihde"
-
-#: ../bin/ctodesgn.c:317
-msgid "3-way Turnout"
-msgstr "3-tie vaihde"
-
-#: ../bin/ctodesgn.c:337
-msgid "Crossing"
-msgstr "Risteys"
-
-#: ../bin/ctodesgn.c:358
-msgid "Single Slipswitch"
-msgstr "Yksipuolinen risteysvaihde"
-
-#: ../bin/ctodesgn.c:379
-msgid "Double Slipswitch"
-msgstr "Kaksipuolinen risteysvaihde"
-
-#: ../bin/ctodesgn.c:399
-msgid "Right Crossover"
-msgstr "Raiteenvaihto oikealle"
-
-#: ../bin/ctodesgn.c:419
-msgid "Left Crossover"
-msgstr "Raiteenvaihto vasemmalle"
-
-#: ../bin/ctodesgn.c:439
-msgid "Double Crossover"
-msgstr "Sovitettu raideristeys"
-
-#: ../bin/ctodesgn.c:457
-msgid "Straight Section"
-msgstr "Suora raideosa"
-
-#: ../bin/ctodesgn.c:468
-msgid "Angle (Degrees)"
-msgstr "Kulma (asteina)"
-
-#: ../bin/ctodesgn.c:476
-msgid "Curved Section"
-msgstr "Kaareva raideosa"
-
-#: ../bin/ctodesgn.c:495
-msgid "Bumper Section"
-msgstr "Puskuri raideosa"
-
-#: ../bin/ctodesgn.c:505 ../bin/denum.c:123 ../bin/denum.c:186
-#: ../bin/denum.c:218 ../bin/denum.c:219 ../bin/dlayer.c:455
-msgid "Count"
-msgstr "Lukumäärä"
-
-#: ../bin/ctodesgn.c:506
-msgid "Radius1"
-msgstr "Säde1"
-
-#: ../bin/ctodesgn.c:507
-msgid "Radius2"
-msgstr "Säde2"
-
-#: ../bin/ctodesgn.c:587
-msgid "Turntable Section"
-msgstr "Kääntöpöytä"
-
-#: ../bin/ctodesgn.c:1421
-#, c-format
-msgid "%s Designer"
-msgstr "%s - suunnittelu"
-
-#: ../bin/ctodesgn.c:1425
-#, c-format
-msgid "%s %d x %d (of %d x %d)"
-msgstr ""
-
-#: ../bin/ctodesgn.c:1425
-msgid "Page"
-msgstr "Sivu"
-
-#: ../bin/ctodesgn.c:1433
-msgid "Frog Number"
-msgstr "Risteysnumero"
-
-#: ../bin/ctodesgn.c:1720
-msgid "Turnout Designer"
-msgstr "Raideosien suunnittelu"
-
-#: ../bin/ctodesgn.c:1730
-#, c-format
-msgid "%s %s Designer"
-msgstr "%s %s - suunnittelu"
-
-#: ../bin/ctrain.c:181 ../bin/dcar.c:1994 ../bin/dcar.c:4078
-#: ../bin/dcar.c:4083
-msgid "Index"
-msgstr "Indeksi"
-
-#: ../bin/ctrain.c:187 ../bin/dcar.c:4079
-msgid "Rep Marks"
-msgstr "Tunnus"
-
-#: ../bin/ctrain.c:261
-msgid "Car"
-msgstr "Vaunu"
-
-#: ../bin/ctrain.c:592
-msgid "Follow"
-msgstr "Seuraa"
-
-#: ../bin/ctrain.c:593
-msgid "Auto Reverse"
-msgstr "Automaattinen peruutus"
-
-#: ../bin/ctrain.c:612 ../bin/dcar.c:4966
-msgid "Find"
-msgstr "Etsi"
-
-#: ../bin/ctrain.c:618 ../bin/ctrain.c:877 ../bin/ctrain.c:1187
-#: ../wlib/gtklib/ixhelp.c:239
-msgid "Forward"
-msgstr "Eteen"
-
-#: ../bin/ctrain.c:620 ../bin/ctrain.c:3027 ../bin/dcar.c:4418
-#: ../bin/dcar.c:4428 ../bin/dcar.c:4548 ../bin/fileio.c:236 ../bin/macro.c:87
-msgid "Stop"
-msgstr "Pysäytä"
-
-#: ../bin/ctrain.c:818 ../bin/ctrain.c:847
-msgid "Crashed"
-msgstr "Törmännyt"
-
-#: ../bin/ctrain.c:820
-msgid "Not on Track"
-msgstr "Ei raiteilla"
-
-#: ../bin/ctrain.c:824
-msgid "Trains Paused"
-msgstr "Junat pysäytetty"
-
-#: ../bin/ctrain.c:826
-msgid "Running"
-msgstr "Liikkeellä"
-
-#: ../bin/ctrain.c:831
-msgid "End of Track"
-msgstr "Rata loppu"
-
-#: ../bin/ctrain.c:835
-msgid "Open Turnout"
-msgstr "Avoin vaihde"
-
-#: ../bin/ctrain.c:839
-msgid "Manual Stop"
-msgstr "Pysäytetty"
-
-#: ../bin/ctrain.c:843
-msgid "No Room"
-msgstr "Ei tilaa"
-
-#: ../bin/ctrain.c:851
-msgid "Unknown Status"
-msgstr "Tuntematon tila"
-
-#: ../bin/ctrain.c:861
-msgid "No trains"
-msgstr "Ei junia"
-
-#: ../bin/ctrain.c:1238
-msgid "Train Control XXX"
-msgstr "Junien hallinta XXX"
-
-#: ../bin/ctrain.c:1239
-#, c-format
-msgid "Train Control %d"
-msgstr "Junien hallinta %d"
-
-#: ../bin/ctrain.c:1241
-msgid "Train Control"
-msgstr "Junien hallinta"
-
-#: ../bin/ctrain.c:3004
-msgid "Train"
-msgstr "Aja junilla"
-
-#: ../bin/ctrain.c:3017
-msgid "Uncouple"
-msgstr "Irrota"
-
-#: ../bin/ctrain.c:3019
-msgid "Flip Car"
-msgstr "Käännä vaunu"
-
-#: ../bin/ctrain.c:3021
-msgid "Flip Train"
-msgstr "Käännä juna"
-
-#: ../bin/ctrain.c:3023
-msgid "MU Master"
-msgstr "Vetovastuussa"
-
-#: ../bin/ctrain.c:3026
-msgid "Change Direction"
-msgstr "Muuta suuntaa"
-
-#: ../bin/ctrain.c:3030
-#, fuzzy
-msgid "Remove Car"
-msgstr "Poista vaunu"
-
-#: ../bin/ctrain.c:3033
-#, fuzzy
-msgid "Remove Train"
-msgstr "Poista juna"
-
-#: ../bin/cturnout.c:89 ../bin/dcar.c:2016 ../bin/dcar.c:2020
-#: ../bin/dcustmgm.c:64
-msgid "New"
-msgstr "Uusi"
-
-#: ../bin/cturnout.c:201
-#, c-format
-msgid "Turnout path[%d:%d] out of bounds: %d"
-msgstr ""
-
-#: ../bin/cturnout.c:213 ../bin/cturnout.c:218
-#, c-format
-msgid "Turnout path[%d] %d is not a track segment"
-msgstr ""
-
-#: ../bin/cturnout.c:226
-#, c-format
-msgid "Turnout path[%d] %d-%d not connected: %0.3f"
-msgstr ""
-
-#: ../bin/cturnout.c:262
-msgid "Unknown special case"
-msgstr "Tuntematon erikoistapaus"
-
-#: ../bin/cturnout.c:368
-msgid "Connect Adjustable Tracks"
-msgstr "Yhdistä säädettävä raide"
-
-#: ../bin/cturnout.c:927
-msgid "splitTurnout: can't find segment"
-msgstr "Pilko: Lohkoja ei löytynyt."
-
-#: ../bin/cturnout.c:1337 ../bin/track.c:1952 ../bin/tstraigh.c:542
-msgid "Drag to change track length"
-msgstr "Vedä muuttaaksesi raideosan pituutta"
-
-#: ../bin/cturnout.c:1348
-#, c-format
-msgid "Length=%s"
-msgstr "Pituus=%s"
-
-#: ../bin/cturnout.c:1609 ../bin/cturnout.c:2585
-msgid "TURNOUT "
-msgstr "PALARAIDE "
-
-#: ../bin/cturnout.c:1960
-#, c-format
-msgid "%d connections, max distance %0.3f (%s)"
-msgstr "%d liitosta, suurin etäisyys %0.3f (%s)"
-
-#: ../bin/cturnout.c:1965
-#, c-format
-msgid "0 connections (%s)"
-msgstr "0 liitosta (%s)"
-
-#: ../bin/cturnout.c:2005
-msgid "Place New Turnout"
-msgstr "Aseta uusi vaihde"
-
-#: ../bin/cturnout.c:2264 ../bin/cturnout.c:2320 ../bin/cturnout.c:2436
-#: ../bin/cturnout.c:2548
-msgid ""
-"Left drag to move, right drag to rotate, press Space or Return to fix track "
-"in place or Esc to cancel"
-msgstr ""
-"Siirrä vetämällä hiiren vasemmalla, pyöritä vetämällä hiiren oikealla, paina "
-"välilyönti tai return asettaaksesi raideosa paikalleen tai esc peruuttaaksesi"
-
-#: ../bin/cturnout.c:2311
-#, c-format
-msgid "Angle = %0.3f (%s)"
-msgstr "Kulma = %0.3f (%s)"
-
-#: ../bin/cturnout.c:2401 ../bin/param.c:2468
-msgid "Close"
-msgstr "Sulje"
-
-#: ../bin/cturnout.c:2418
-msgid "Pick turnout and active End Point, then place on the layout"
-msgstr ""
-"Valitse ensin vaihde ja aktiivinen päätepiste ja aseta sitten paikoilleen"
-
-#: ../bin/cturntbl.c:52 ../bin/cturntbl.c:246 ../bin/cturntbl.c:795
-#: ../bin/cturntbl.c:808
-msgid "Diameter"
-msgstr "Halkaisija"
-
-#: ../bin/cturntbl.c:247
-msgid "# EndPt"
-msgstr "Päätepisteitä"
-
-#: ../bin/cturntbl.c:281
-#, c-format
-msgid "Turntable(%d): Layer=%d Center=[%s %s] Diameter=%s #EP=%d"
-msgstr ""
-"Kääntöpöytä(%d): Taso=%d Keskipiste=[%s %s] Halkaisija=%s Päätepisteitä=%d"
-
-#: ../bin/cturntbl.c:296 ../bin/cturntbl.c:853
-msgid "Turntable"
-msgstr "Kääntöpöytä"
-
-#: ../bin/cturntbl.c:554
-msgid "Drag to create stall track"
-msgstr "Vedä luodaksesi lähtevän raiteen"
-
-#: ../bin/cturntbl.c:825
-msgid "Create Turntable"
-msgstr "Luo kääntöpöytä"
-
-#: ../bin/cundo.c:166
-msgid "Undo Trace"
-msgstr "Jäljitys"
-
-#: ../bin/cundo.c:501
-#, c-format
-msgid "Undo: %s"
-msgstr "Kumoa: %s"
-
-#: ../bin/cundo.c:504 ../../../../build/work/app/bin/bllnhlp.c:136
-msgid "Undo last command"
-msgstr "Kumoa edellinen komento"
-
-#: ../bin/cundo.c:509
-#, c-format
-msgid "Redo: %s"
-msgstr "Tee uudelleen: %s"
-
-#: ../bin/cundo.c:512 ../../../../build/work/app/bin/bllnhlp.c:106
-msgid "Redo last undo"
-msgstr "Tee uudelleen"
-
-#: ../bin/custom.c:164
-#, c-format
-msgid "%s Turnout Designer"
-msgstr "%s Vaihteiden suunnittelu"
-
-#: ../bin/custom.c:169
-#, c-format
-msgid "%s Version %s"
-msgstr "%s versio %s"
-
-#: ../bin/custom.c:174
-#, c-format
-msgid "%s Files|*.xtc"
-msgstr "%s tiedostot|*.xtc"
-
-#: ../bin/custom.c:179
-#, c-format
-msgid "%s Import Files|*.%sti"
-msgstr "%s Tuotavat tiedostot|*.%sti"
-
-#: ../bin/custom.c:184
-msgid "Data Exchange Format Files|*.dxf"
-msgstr ""
-
-#: ../bin/custom.c:188
-#, c-format
-msgid "%s Record Files|*.%str"
-msgstr "%s Nauhoitustiedostot|*.%str"
-
-#: ../bin/custom.c:193
-#, c-format
-msgid "%s Note Files|*.not"
-msgstr "%s Muistiinpanot|*.not"
-
-#: ../bin/custom.c:198
-#, c-format
-msgid "%s Log Files|*.log"
-msgstr "%s Lokitiedostot|*.log"
-
-#: ../bin/custom.c:203
-#, fuzzy, c-format
-msgid "%s PartsList Files|*.txt"
-msgstr "%s Osaluetelotiedostot|*.log"
-
-#: ../bin/dbench.c:43
-msgid " L-Girder"
-msgstr "L-palkki"
-
-#: ../bin/dbench.c:43
-msgid " T-Girder"
-msgstr "T-palkki"
-
-#: ../bin/dbench.c:66
-msgid "On Edge"
-msgstr "Pysty"
-
-#: ../bin/dbench.c:67
-msgid "Flat"
-msgstr "Vaaka"
-
-#: ../bin/dbench.c:71
-msgid "Left-Down"
-msgstr "Vasen-Alas"
-
-#: ../bin/dbench.c:72
-msgid "Right-Down"
-msgstr "Oikea-Alas"
-
-#: ../bin/dbench.c:73
-msgid "Left-Up"
-msgstr "Vasen-Ylös"
-
-#: ../bin/dbench.c:74
-msgid "Right-Up"
-msgstr "Oikea-Ylös"
-
-#: ../bin/dbench.c:75
-msgid "Left-Inverted"
-msgstr "Vasen-Käännetty"
-
-#: ../bin/dbench.c:76
-msgid "Right-Inverted"
-msgstr "Oikea-Käännetty"
-
-#: ../bin/dbench.c:81
-msgid "Inverted"
-msgstr "Käännetty"
-
-#: ../bin/dbench.c:147
-#, c-format
-msgid ""
-"Bad BenchType for %s:\n"
-"%s"
-msgstr ""
-"Väärä runkotyyppi %s:lle:\n"
-"%s"
-
-#: ../bin/dbitmap.c:102 ../bin/dbitmap.c:106
-msgid "Drawn with "
-msgstr "Suunnitteluohjelma: "
-
-#: ../bin/dbitmap.c:116
-msgid "Drawing tracks to BitMap"
-msgstr "Piirretään raiteet bitmap:ksi"
-
-#: ../bin/dbitmap.c:123
-msgid "Writing BitMap to file"
-msgstr "Kirjoitetaan bitmap tiedostoon"
-
-#: ../bin/dbitmap.c:144
-msgid "Print Titles"
-msgstr "Tulosta otsikot"
-
-#: ../bin/dbitmap.c:144
-msgid "Print Borders"
-msgstr "Tulosta kehys"
-
-#: ../bin/dbitmap.c:145
-msgid "Print Centerline"
-msgstr "Tulosta keskiviiva"
-
-#: ../bin/dbitmap.c:152
-msgid " dpi"
-msgstr " dpi"
-
-#: ../bin/dbitmap.c:154
-msgid "Bitmap : 99999 by 99999 pixels"
-msgstr "Bitmap : 99999 x 99999 pikseliä"
-
-#: ../bin/dbitmap.c:156
-msgid "Approximate file size: 999.9Mb"
-msgstr "Arvioitu tiedostokoko: 999.9Mt"
-
-#: ../bin/dbitmap.c:186
-#, c-format
-msgid "Bitmap : %ld by %ld pixels"
-msgstr "Bitmap : %ld x %ld pikseliä"
-
-#: ../bin/dbitmap.c:190
-#, c-format
-msgid "Approximate file size : %0.0f"
-msgstr "Arvioitu tiedostokoko: %0.0f"
-
-#: ../bin/dbitmap.c:192
-#, c-format
-msgid "Approximate file size : %0.1fKb"
-msgstr "Arvioitu tiedostokoko: %0.1fKt"
-
-#: ../bin/dbitmap.c:194
-#, c-format
-msgid "Approximate file size : %0.1fMb"
-msgstr "Arvioitu tiedostokoko: %0.1fMt"
-
-#: ../bin/dbitmap.c:208 ../bin/misc.c:1043 ../bin/misc.c:1113
-#: ../bin/param.c:2468 ../wlib/gtklib/browserhelp.c:127
-#: ../../../../build/work/app/bin/bllnhlp.c:539
-msgid "Cancel"
-msgstr "Peruuta"
-
-#: ../bin/dbitmap.c:213
-msgid "Save Bitmap"
-msgstr "Tallenna bitmap"
-
-#: ../bin/dbitmap.c:215
-msgid "Bitmap files|*.bmp"
-msgstr "Bitmap kuvatiedostot|*.bmp"
-
-#: ../bin/dbitmap.c:217
-msgid "Bitmap files|*.xpm"
-msgstr "Bitmap kuvatiedostot|*.xpm"
-
-#: ../bin/dbitmap.c:238
-msgid "BitMap"
-msgstr "BitMap"
-
-#: ../bin/dcar.c:53
-msgid "Truck"
-msgstr "Teli"
-
-#: ../bin/dcar.c:53
-msgid "Body"
-msgstr "Runko"
-
-#: ../bin/dcar.c:154 ../bin/dcar.c:2445 ../bin/dcar.c:2449
-msgid "Unknown"
-msgstr "Tuntematon"
-
-#: ../bin/dcar.c:487
-msgid "Diesel Loco"
-msgstr "Dieselveturi"
-
-#: ../bin/dcar.c:488
-msgid "Steam Loco"
-msgstr "Höyryveturi"
-
-#: ../bin/dcar.c:489
-msgid "Elect Loco"
-msgstr "Sähköveturi"
-
-#: ../bin/dcar.c:490
-msgid "Freight Car"
-msgstr "Tavaravaunu"
-
-#: ../bin/dcar.c:491
-msgid "Psngr Car"
-msgstr "Matkustajavaunu"
-
-#: ../bin/dcar.c:492
-msgid "M-O-W"
-msgstr "Työkone"
-
-#: ../bin/dcar.c:493 ../bin/doption.c:108
-msgid "Other"
-msgstr "Muut"
-
-#: ../bin/dcar.c:1092 ../bin/dcar.c:4787
-msgid "N/A"
-msgstr "Ei tiedossa"
-
-#: ../bin/dcar.c:1093 ../bin/dcar.c:4792
-msgid "Mint"
-msgstr "Loistava"
-
-#: ../bin/dcar.c:1094 ../bin/dcar.c:4791
-msgid "Excellent"
-msgstr "Erinomainen"
-
-#: ../bin/dcar.c:1095 ../bin/dcar.c:4790
-msgid "Good"
-msgstr "Hyvä"
-
-#: ../bin/dcar.c:1096 ../bin/dcar.c:4789
-msgid "Fair"
-msgstr "Tyydyttävä"
-
-#: ../bin/dcar.c:1097 ../bin/dcar.c:4788
-msgid "Poor"
-msgstr "Huono"
-
-#: ../bin/dcar.c:1373 ../bin/dpricels.c:45
-#: ../../../../build/work/app/bin/bllnhlp.c:404
-msgid "Item"
-msgstr "Tuote"
-
-#: ../bin/dcar.c:1920 ../wlib/gtklib/notice.c:91 ../wlib/mswlib/mswmisc.c:1967
-msgid "Information"
-msgstr "Tiedot"
-
-#: ../bin/dcar.c:1920
-msgid "Customize"
-msgstr "Mukauta"
-
-#: ../bin/dcar.c:1932
-msgid "Sequential"
-msgstr "Peräkkäinen"
-
-#: ../bin/dcar.c:1932
-msgid "Repeated"
-msgstr "Sama"
-
-#: ../bin/dcar.c:1943 ../bin/dcar.c:1945 ../bin/dcar.c:5117
-msgid "Prototype"
-msgstr "Esikuva"
-
-#: ../bin/dcar.c:1949 ../bin/dcar.c:4078 ../bin/dcar.c:4083
-msgid "Type"
-msgstr "Tyyppi"
-
-#: ../bin/dcar.c:1951
-msgid "Part"
-msgstr "Tuote"
-
-#: ../bin/dcar.c:1953 ../../../../build/work/app/bin/bllnhlp.c:347
-#: ../../../../build/work/app/bin/bllnhlp.c:523
-#: ../../../../build/work/app/bin/bllnhlp.c:524
-msgid "Part Number"
-msgstr "Tuotekoodi"
-
-#: ../bin/dcar.c:1955
-msgid "Loco?"
-msgstr "Veturi?"
-
-#: ../bin/dcar.c:1959 ../bin/dcar.c:4116
-msgid "Import"
-msgstr "Tuo tiedostosta"
-
-#: ../bin/dcar.c:1966
-msgid "Mode"
-msgstr "Tila"
-
-#: ../bin/dcar.c:1970
-msgid "Road"
-msgstr "Yhtiö"
-
-#: ../bin/dcar.c:1972
-msgid "Reporting Mark"
-msgstr "Yhtiön tunnus"
-
-#: ../bin/dcar.c:1974
-msgid "Number"
-msgstr "Numero"
-
-#: ../bin/dcar.c:1978
-msgid "Car Length"
-msgstr "Pituus"
-
-#: ../bin/dcar.c:1982
-msgid "Truck Centers"
-msgstr "Telien keskikohdat"
-
-#: ../bin/dcar.c:1984
-msgid "Coupler Mount"
-msgstr "Kytkimien sijoitus"
-
-#: ../bin/dcar.c:1986
-msgid "Coupled Length"
-msgstr "Pituus kytkimineen"
-
-#: ../bin/dcar.c:1988 ../bin/dcar.c:3954
-msgid "Coupler Length"
-msgstr "Kytkinten ulkonema"
-
-#: ../bin/dcar.c:1996
-msgid "Purchase Price"
-msgstr "Ostohinta"
-
-#: ../bin/dcar.c:1998 ../../../../build/work/app/bin/bllnhlp.c:213
-msgid "Current Price"
-msgstr "Nykyinen hinta"
-
-#: ../bin/dcar.c:2000 ../bin/dcar.c:4080 ../bin/dcar.c:4085
-msgid "Condition"
-msgstr "Kunto"
-
-#: ../bin/dcar.c:2002
-msgid "Purchase Date"
-msgstr "Ostopäivä"
-
-#: ../bin/dcar.c:2004 ../bin/dcar.c:4085
-msgid "Service Date"
-msgstr "Huollettu"
-
-#: ../bin/dcar.c:2006
-msgid "Quantity"
-msgstr "Määrä"
-
-#: ../bin/dcar.c:2008
-msgid "Numbers"
-msgstr "Numerot"
-
-#: ../bin/dcar.c:2010 ../bin/dcar.c:4081
-#: ../../../../build/work/app/i18n/custmsg.h:61
-msgid "Notes"
-msgstr "Muistiinpanot"
-
-#: ../bin/dcar.c:2017 ../bin/dcustmgm.c:65
-msgid "Car Part"
-msgstr "Malli"
-
-#: ../bin/dcar.c:2018 ../bin/dcustmgm.c:66
-#: ../../../../build/work/app/bin/bllnhlp.c:188
-#: ../../../../build/work/app/bin/bllnhlp.c:189
-msgid "Car Prototype"
-msgstr "Esikuva"
-
-#: ../bin/dcar.c:2379 ../bin/dcar.c:2696
-msgid "Undecorated"
-msgstr "Ei yhtiömerkintöjä"
-
-#: ../bin/dcar.c:2437 ../bin/dcar.c:2441 ../bin/fileio.c:656
-msgid "Custom"
-msgstr "Itse rakennettu"
-
-#: ../bin/dcar.c:2606
-msgid "Undecorated "
-msgstr "Ei yhtiömerkintöjä "
-
-#: ../bin/dcar.c:2826
-#, c-format
-msgid "New %s Scale Car"
-msgstr "Uusi %s mittakaavan vaunu/veturi"
-
-#: ../bin/dcar.c:2827 ../bin/dcar.c:2836 ../bin/dcar.c:2845 ../bin/dcar.c:3984
-#: ../bin/dcar.c:4112
-msgid "Add"
-msgstr "Lisää"
-
-#: ../bin/dcar.c:2829
-#, c-format
-msgid "Update %s Scale Car"
-msgstr "Päivitä %s mittakaavan vaunu"
-
-#: ../bin/dcar.c:2830 ../bin/dcar.c:2839 ../bin/dcar.c:2848
-#: ../bin/dcmpnd.c:172
-msgid "Update"
-msgstr "Päivitä"
-
-#: ../bin/dcar.c:2835
-#, c-format
-msgid "New %s Scale Car Part"
-msgstr "Uusi %s mittakaavan vaunu/veturi"
-
-#: ../bin/dcar.c:2838
-#, c-format
-msgid "Update %s Scale Car Part"
-msgstr "Päivitä %s mittakaavan vaunu"
-
-#: ../bin/dcar.c:2844
-msgid "New Prototype"
-msgstr "Uusi esikuva"
-
-#: ../bin/dcar.c:2847
-msgid "Update Prototype"
-msgstr "Päivitä esikuva"
-
-#: ../bin/dcar.c:3490
-msgid "Enter a 8 digit numeric date"
-msgstr "Syötä 8 numeroinen päiväys"
-
-#: ../bin/dcar.c:3493
-msgid "Enter a 8 digit date"
-msgstr "Syötä 8 numeroinen päiväys"
-
-#: ../bin/dcar.c:3495
-msgid "Enter a date between 19000101 and 21991231"
-msgstr "Syötä päivämärä %s ja %s väliltä"
-
-#: ../bin/dcar.c:3500
-msgid "Invalid month"
-msgstr "Epäkelpo kuukausi"
-
-#: ../bin/dcar.c:3502
-msgid "Invalid day"
-msgstr "Epäkelpo päivä"
-
-#: ../bin/dcar.c:3588
-msgid "Enter a Prototype name"
-msgstr "Syötä esikuvan nimi"
-
-#: ../bin/dcar.c:3590
-msgid "Select or Enter a Manufacturer"
-msgstr "Valitse tai syötä valmistaja"
-
-#: ../bin/dcar.c:3592
-msgid "Enter a Part Number"
-msgstr "Syötä tuotekoodi"
-
-#: ../bin/dcar.c:3594
-msgid "Enter the Car Length"
-msgstr "Syötä vaunun pituus"
-
-#: ../bin/dcar.c:3596
-msgid "Enter the Car Width"
-msgstr "Syötä vaunun leveys"
-
-#: ../bin/dcar.c:3598
-msgid "Enter the Truck Centers"
-msgstr "Syötä telien keskipisteiden etäisyys"
-
-#: ../bin/dcar.c:3600
-msgid "Truck Centers must be less than Car Length"
-msgstr ""
-"Telien keskikohtien välisen etäisyyden on oltava vaunun pituutta pienempi"
-
-#: ../bin/dcar.c:3602
-msgid "Enter the Coupled Length or Coupler Length"
-msgstr "Syötä pituus kytkimineen tai kytkimen pituus"
-
-#: ../bin/dcar.c:3604
-msgid "Enter the Coupled Length"
-msgstr "Syötä pituus kytkimineen"
-
-#: ../bin/dcar.c:3606
-msgid "Enter a item Index"
-msgstr "Syötä indeksi"
-
-#: ../bin/dcar.c:3608
-msgid "Purchase Price is not valid"
-msgstr "Ostohinta ei ole kelvollinen"
-
-#: ../bin/dcar.c:3610
-msgid "Current Price is not valid"
-msgstr "Nykyinen hinta ei ole kelvollinen"
-
-#: ../bin/dcar.c:3612
-msgid "Purchase Date is not valid"
-msgstr "Ostopäivä ei ole kelvollinen"
-
-#: ../bin/dcar.c:3614
-msgid "Service Date is not valid"
-msgstr "Huollon päiväys ei ole kelvollinen"
-
-#: ../bin/dcar.c:3617
-#, c-format
-msgid "Item Index %ld duplicated an existing item: updated to new value"
-msgstr "Indeksi %ld oli jo käytössä. Annettiin indeksille uusi arvo."
-
-#: ../bin/dcar.c:3812
-#, c-format
-msgid "Added %ld new Cars"
-msgstr "Lisätty %ld uutta vaunua/veturia"
-
-#: ../bin/dcar.c:3814
-msgid "Added new Car"
-msgstr "Lisätty uusi vaunu/veturi"
-
-#: ../bin/dcar.c:3817
-msgid "Updated Car"
-msgstr "Päivitä vaunu/veturi"
-
-#: ../bin/dcar.c:3820
-msgid " and Part"
-msgstr " ja malli"
-
-#: ../bin/dcar.c:3847
-#, c-format
-msgid "%s Part: %s %s %s %s %s %s"
-msgstr "%s malli: %s %s %s %s %s %s"
-
-#: ../bin/dcar.c:3847 ../bin/dcar.c:3864
-msgid "Added new"
-msgstr "Lisätty uusi"
-
-#: ../bin/dcar.c:3847 ../bin/dcar.c:3864
-msgid "Updated"
-msgstr "Päivitetty"
-
-#: ../bin/dcar.c:3863
-#, c-format
-msgid "%s Prototype: %s%s."
-msgstr "%s esikuva: %s%s."
-
-#: ../bin/dcar.c:3865
-msgid ". Enter new values or press Close"
-msgstr ". Syötä uudet arvot tai paina Sulje"
-
-#: ../bin/dcar.c:3984
-msgid "New Car Part"
-msgstr "Uusi malli"
-
-#: ../bin/dcar.c:4079 ../bin/dcar.c:4084
-#: ../../../../build/work/app/bin/bllnhlp.c:377
-msgid "Roadname"
-msgstr "Rautatieyhtiö"
-
-#: ../bin/dcar.c:4079
-msgid "Purc Price"
-msgstr "Ostohinta"
-
-#: ../bin/dcar.c:4080 ../bin/dcar.c:4085
-msgid "Curr Price"
-msgstr "Nykyinen hinta"
-
-#: ../bin/dcar.c:4080
-msgid "Purc Date"
-msgstr "Ostopäivä"
-
-#: ../bin/dcar.c:4080
-msgid "Srvc Date"
-msgstr "Huollettu"
-
-#: ../bin/dcar.c:4081
-msgid "Locat'n"
-msgstr "Sijainti"
-
-#: ../bin/dcar.c:4084
-msgid "RepMarks"
-msgstr "Tunnus"
-
-#: ../bin/dcar.c:4084
-msgid "Purch Price"
-msgstr "Ostohinta"
-
-#: ../bin/dcar.c:4085
-msgid "Purch Date"
-msgstr "Ostopäivä"
-
-#: ../bin/dcar.c:4102
-msgid "Sort By"
-msgstr "Lajittelu"
-
-#: ../bin/dcar.c:4110 ../bin/dcontmgm.c:99 ../bin/dcustmgm.c:58
-#: ../bin/dcustmgm.c:95
-msgid "Edit"
-msgstr "Muokkaa"
-
-#: ../bin/dcar.c:4114 ../bin/dcontmgm.c:101 ../bin/dcustmgm.c:60
-#: ../bin/misc.c:1993
-msgid "Delete"
-msgstr "Poista"
-
-#: ../bin/dcar.c:4118 ../bin/fileio.c:1212
-msgid "Export"
-msgstr "Vie tiedostoon"
-
-#: ../bin/dcar.c:4120 ../../../../build/work/app/bin/bllnhlp.c:540
-msgid "List"
-msgstr "Luettelo"
-
-#: ../bin/dcar.c:4234 ../bin/dcar.c:4966 ../bin/misc.c:2262
-msgid "Car Inventory"
-msgstr "Kalustoluettelo"
-
-#: ../bin/dcar.c:4354
-msgid "List Cars"
-msgstr "Luetteloi vaunut"
-
-#: ../bin/dcar.c:4476 ../bin/dcar.c:4639
-msgid "Import Cars"
-msgstr "Tuo vaunut tiedostosta"
-
-#: ../bin/dcar.c:4640 ../bin/dcar.c:4762
-msgid "Comma-Separated-Values|*.csv"
-msgstr "Pilkulla erotetut arvot|*.csv"
-
-#: ../bin/dcar.c:4710 ../bin/dcar.c:4761
-msgid "Export Cars"
-msgstr "Vie vaunut tiedostoon"
-
-#: ../bin/dcar.c:4795
-msgid "Layout"
-msgstr "Ratasuunnitelma"
-
-#: ../bin/dcar.c:4797
-msgid "Shelf"
-msgstr "Hyllyssä"
-
-#: ../bin/dcmpnd.c:76 ../bin/dlayer.c:457 ../bin/misc.c:480 ../bin/misc.c:509
-msgid "Load"
-msgstr "Lataa"
-
-#: ../bin/dcmpnd.c:109
-msgid "Updating definitions, please wait"
-msgstr "Päivitetään määrittelyjä, odota hetki."
-
-#: ../bin/dcmpnd.c:172
-msgid "Update Title"
-msgstr "Pävitä otsikko"
-
-#: ../bin/dcmpnd.c:232
-#, c-format
-msgid "End-Point #%d of the selected and actual turnouts are not close"
-msgstr "Valitun ja todellisen vaihteen %d. päätepisteet eivät ole lähekkäin"
-
-#: ../bin/dcmpnd.c:241
-#, c-format
-msgid "End-Point #%d of the selected and actual turnouts are not aligned"
-msgstr "Valitun ja todellisen vaihteen %d. päätepisteet eivät ole linjassa"
-
-#: ../bin/dcmpnd.c:260
-msgid "The selected Turnout had a differing number of End-Points"
-msgstr "Valitussa vaihteessa oli eri määrä päätepisteitä"
-
-#: ../bin/dcmpnd.c:321
-msgid "Skip"
-msgstr "Sivuuta"
-
-#: ../bin/dcmpnd.c:353
-#, c-format
-msgid "%d Track(s) refreshed"
-msgstr "%d raideosa(a) päivitetty"
-
-#: ../bin/dcmpnd.c:393
-msgid "Refresh Turnout/Structure"
-msgstr "Päivitä vaihde/rakennus"
-
-#: ../bin/dcmpnd.c:395
-msgid "Choose a Turnout/Structure to replace:"
-msgstr "Valitse vaihde/rakennus korvataksesi:"
-
-#: ../bin/dcmpnd.c:405 ../bin/doption.c:101
-#: ../../../../build/work/app/i18n/custmsg.h:31
-msgid "Turnouts"
-msgstr "Raideosat"
-
-#: ../bin/dcmpnd.c:405
-msgid "Structures"
-msgstr "Rakennukset"
-
-#: ../bin/dcmpnd.c:434
-msgid "Choose another Turnout/Structure to replace:"
-msgstr "Valitse toinen vaihde/rakennus korvataksesi:"
-
-#: ../bin/dcmpnd.c:536
-msgid "Rename Object"
-msgstr "Nimeä objekti uudelleen"
-
-#: ../bin/dcontmgm.c:92 ../bin/doption.c:108
-msgid "Tracks"
-msgstr "Raiteet"
-
-#: ../bin/dcontmgm.c:173
-#, fuzzy, c-format
-msgid "Are you sure you want to delete the %d control element(s)"
-msgstr "Haluatko varmasti poistaa nämä %d vaunua/veturia?"
-
-#: ../bin/dcontmgm.c:176
-#, fuzzy
-msgid "Control Elements"
-msgstr "Valitse värit"
-
-#: ../bin/dcontmgm.c:300
-msgid "Manage Layout Control Elements"
-msgstr ""
-
-#: ../bin/dcustmgm.c:62
-msgid "Move To"
-msgstr "Tiedostoon"
-
-#: ../bin/dcustmgm.c:95
-msgid "Rename"
-msgstr "Nimeä uudelleen"
-
-#: ../bin/dcustmgm.c:162
-msgid "Label"
-msgstr "Merkintä"
-
-#: ../bin/dcustmgm.c:200
-msgid "Contents Label"
-msgstr "Sisältömerkintä"
-
-#: ../bin/dcustmgm.c:247
-msgid "Move To XTP"
-msgstr "Siirrä XTP tiedostoon"
-
-#: ../bin/dcustmgm.c:248
-msgid "Parameter File|*.xtp"
-msgstr "Parametritiedosto|*.xtp"
-
-#: ../bin/dcustmgm.c:358
-#, fuzzy
-msgid "Manage custom designed parts"
-msgstr "Itse määriteltyjen raideosien, veturien ja vaunujen hallinta"
-
-#: ../bin/dease.c:64
-msgid "Sharp"
-msgstr "Jyrkkä"
-
-#: ../bin/dease.c:64
-msgid "Broad"
-msgstr "Laaja"
-
-#: ../bin/dease.c:64
-msgid "Cornu"
-msgstr ""
-
-#: ../bin/dease.c:71
-msgid "Value"
-msgstr "Arvo"
-
-#: ../bin/dease.c:72 ../bin/tease.c:509
-msgid "R"
-msgstr "R"
-
-#: ../bin/dease.c:74 ../bin/tease.c:510
-msgid "L"
-msgstr "P"
-
-#: ../bin/dease.c:230
-msgid "Easement"
-msgstr "Kaarreloivennus"
-
-#: ../bin/denum.c:49
-msgid "Prices"
-msgstr "Hinnat"
-
-#: ../bin/denum.c:54
-msgid "Save As ..."
-msgstr "Tallenna nimellä ..."
-
-#: ../bin/denum.c:134 ../bin/denum.c:189 ../bin/denum.c:224
-msgid "Each"
-msgstr ""
-
-#: ../bin/denum.c:148 ../bin/denum.c:149
-msgid "Parts List"
-msgstr "Osaluettelo"
-
-#: ../bin/denum.c:154
-#, fuzzy, c-format
-msgid ""
-"%s Parts List\n"
-"\n"
-msgstr "Osaluettelo"
-
-#: ../bin/denum.c:189 ../bin/denum.c:226 ../bin/denum.c:235
-#, fuzzy
-msgid "Extended"
-msgstr "Pidentäminen"
-
-#: ../bin/denum.c:235 ../bin/denum.c:238
-msgid "Total"
-msgstr ""
-
-#: ../bin/dlayer.c:449
-msgid "Visible"
-msgstr "Näkyvä"
-
-#: ../bin/dlayer.c:451
-msgid "Frozen"
-msgstr "Jäädytetty"
-
-#: ../bin/dlayer.c:453
-msgid "On Map"
-msgstr "Näkyy kartalla"
-
-#: ../bin/dlayer.c:456
-msgid "Personal Preferences"
-msgstr "Omat asetukset"
-
-#: ../bin/dlayer.c:458 ../bin/macro.c:1246
-msgid "Save"
-msgstr "Tallenna"
-
-#: ../bin/dlayer.c:459
-msgid "Defaults"
-msgstr "Oletukset"
-
-#: ../bin/dlayer.c:460
-msgid "Number of Layer Buttons"
-msgstr "Tasopainikkeiden lukumäärä"
-
-#: ../bin/dlayer.c:477 ../bin/dlayer.c:893 ../bin/dlayer.c:905
-#: ../bin/dlayer.c:950
-msgid "Main"
-msgstr "Päätaso"
-
-#: ../bin/dlayer.c:587 ../bin/dlayer.c:836 ../bin/dlayer.c:908
-#: ../bin/dlayer.c:952 ../bin/dlayer.c:1190
-msgid "Show/Hide Layer"
-msgstr "Näytä/piilota taso"
-
-#: ../bin/dlayer.c:1023
-msgid "Layers"
-msgstr "Tasot"
-
-#: ../bin/doption.c:99
-msgid "Auto Pan"
-msgstr "Automaattinen panorointi"
-
-#: ../bin/doption.c:100
-msgid "Dash"
-msgstr "Katkoviiva"
-
-#: ../bin/doption.c:101
-msgid "All"
-msgstr "Kaikki"
-
-#: ../bin/doption.c:102
-msgid "Thick"
-msgstr ""
-
-#: ../bin/doption.c:102
-#, fuzzy
-msgid "Exception"
-msgstr "Erityisraiteet"
-
-#: ../bin/doption.c:103
-msgid "Outline"
-msgstr "Ääriviivat"
-
-#: ../bin/doption.c:103
-msgid "Solid"
-msgstr "Yhtenäinen"
-
-#: ../bin/doption.c:104
-msgid "Off"
-msgstr "Pois"
-
-#: ../bin/doption.c:104
-msgid "On"
-msgstr "Päällä"
-
-#: ../bin/doption.c:105
-msgid "Track Descriptions"
-msgstr "Raideosien kuvaukset"
-
-#: ../bin/doption.c:105
-msgid "Lengths"
-msgstr "Pituudet"
-
-#: ../bin/doption.c:105
-msgid "EndPt Elevations"
-msgstr "Päätepisteiden korkeudet"
-
-#: ../bin/doption.c:105
-msgid "Track Elevations"
-msgstr "Raideosien korkeudet"
-
-#: ../bin/doption.c:105
-msgid "Cars"
-msgstr "Vaunut"
-
-#: ../bin/doption.c:106 ../bin/doption.c:107
-msgid "Descr"
-msgstr "Kuvaus"
-
-#: ../bin/doption.c:107
-msgid "Manuf"
-msgstr "Valmistaja"
-
-#: ../bin/doption.c:109
-msgid "Live Map"
-msgstr "Suunnitelma seuraa karttaa"
-
-#: ../bin/doption.c:110
-#, fuzzy
-msgid "Hide Trains On Hidden Track"
-msgstr "Junat piilossa olevalla radalla"
-
-#: ../bin/doption.c:111
-msgid "Zoom keeps lower corner in view"
-msgstr ""
-
-#: ../bin/doption.c:116
-msgid "Color Layers"
-msgstr "Väritys tason mukaan"
-
-#: ../bin/doption.c:117
-msgid "Draw Tunnel"
-msgstr "Piirrä tunneli"
-
-#: ../bin/doption.c:118
-msgid "Draw EndPts"
-msgstr "Piirrä päätepisteet"
-
-#: ../bin/doption.c:119
-#, fuzzy
-msgid "Draw Unconnected EndPts"
-msgstr "Piirrä päätepisteet"
-
-#: ../bin/doption.c:120
-msgid "Draw Ties"
-msgstr "Piirrä ratapölkyt"
-
-#: ../bin/doption.c:121
-#, fuzzy
-msgid "Draw Centers"
-msgstr "Raahaa keskustaan"
-
-#: ../bin/doption.c:122
-msgid "Two Rail Scale"
-msgstr "Kahden kiskon mittakaava"
-
-#: ../bin/doption.c:123
-msgid "Map Scale"
-msgstr "Kartan mittakaava"
-
-#: ../bin/doption.c:127
-msgid "Label Enable"
-msgstr "Näytettävät merkinnät"
-
-#: ../bin/doption.c:128
-msgid "Label Scale"
-msgstr "Merkintöjen mittakaava"
-
-#: ../bin/doption.c:129
-msgid "Label Font Size"
-msgstr "Merkintöjen kirjasinkoko"
-
-#: ../bin/doption.c:130
-msgid "Hot Bar Labels"
-msgstr "Hot Bar merkinnät"
-
-#: ../bin/doption.c:131
-msgid "Layout Labels"
-msgstr "Merkinnät"
-
-#: ../bin/doption.c:132
-msgid "List Labels"
-msgstr "Luettelon merkinnät"
-
-#: ../bin/doption.c:135
-msgid "Car Labels"
-msgstr "Vaunujen merkinnät"
-
-#: ../bin/doption.c:136
-msgid "Train Update Delay"
-msgstr "Junien päivitysväli"
-
-#: ../bin/doption.c:164
-msgid "Display Options"
-msgstr "Näyttöasetukset"
-
-#: ../bin/doption.c:165
-msgid "Proto"
-msgstr "Esikuva"
-
-#: ../bin/doption.c:166
-msgid "Proto/Manuf"
-msgstr "Esikuva/Valmistaja"
-
-#: ../bin/doption.c:167
-msgid "Proto/Manuf/Part Number"
-msgstr "Esikuva/Valmistaja/Tuotekoodi"
-
-#: ../bin/doption.c:168
-msgid "Proto/Manuf/Partno/Item"
-msgstr "Esikuva/Valmistaja/Tuotekoodi/Tuote"
-
-#: ../bin/doption.c:169
-msgid "Manuf/Proto"
-msgstr "Valmistaja/Esikuva"
-
-#: ../bin/doption.c:170
-msgid "Manuf/Proto/Part Number"
-msgstr "Valmistaja/Esikuva/Tuotekoodi"
-
-#: ../bin/doption.c:171
-msgid "Manuf/Proto/Partno/Item"
-msgstr "Valmistaja/Esikuva/Tuotekoodi/Tuote"
-
-#: ../bin/doption.c:202
-msgid "End-Points"
-msgstr "Päätepisteet"
-
-#: ../bin/doption.c:210
-msgid "Normal: Command List, Shift: Command Options"
-msgstr "Normaali: Komennot, Vaihto: Komentojen asetukset"
-
-#: ../bin/doption.c:210
-msgid "Normal: Command Options, Shift: Command List"
-msgstr "Normaali: Komentojen asetukset, Vaihto: Komennot"
-
-#: ../bin/doption.c:213
-msgid "Draw Moving Tracks"
-msgstr "Piirrä liikuteltavat raiteet"
-
-#: ../bin/doption.c:214
-msgid "Default Command"
-msgstr "Oletuskomento"
-
-#: ../bin/doption.c:216
-msgid "Hide Selection Window"
-msgstr "Piilota valintaikkuna"
-
-#: ../bin/doption.c:218
-msgid "Right Click"
-msgstr "Hiiren 2-painike"
-
-#: ../bin/doption.c:244
-msgid "Command Options"
-msgstr "Komentojen asetukset"
-
-#: ../bin/doption.c:268
-msgid "English"
-msgstr "Englantilaiset"
-
-#: ../bin/doption.c:268
-msgid "Metric"
-msgstr "Metrijärjestelmä"
-
-#: ../bin/doption.c:269
-msgid "Polar"
-msgstr "Polaarinen"
-
-#: ../bin/doption.c:269
-msgid "Cartesian"
-msgstr "Karteesinen"
-
-#: ../bin/doption.c:270
-msgid "Balloon Help"
-msgstr "Pikaopaste"
-
-#: ../bin/doption.c:271
-#, fuzzy
-msgid "Load Last Layout"
-msgstr "Lataa ratasuunnitelma"
-
-#: ../bin/doption.c:271
-#, fuzzy
-msgid "Start New Layout"
-msgstr "Uusi ratasuunnitelma"
-
-#: ../bin/doption.c:274
-msgid "Angles"
-msgstr "Kulmat"
-
-#: ../bin/doption.c:275
-msgid "Units"
-msgstr "Yksiköt"
-
-#: ../bin/doption.c:277
-msgid "Length Format"
-msgstr "Pituusmittojen muotoilu"
-
-#: ../bin/doption.c:278
-#, fuzzy
-msgid "Min Track Length"
-msgstr "Pienin raideosan pituus"
-
-#: ../bin/doption.c:279
-msgid "Connection Distance"
-msgstr "Liitosetäisyys"
-
-#: ../bin/doption.c:280
-msgid "Connection Angle"
-msgstr "Liitoskulma"
-
-#: ../bin/doption.c:281
-msgid "Turntable Angle"
-msgstr "Kääntöpöydän kulma"
-
-#: ../bin/doption.c:282
-msgid "Max Coupling Speed"
-msgstr "Suurin kytkentänopeus"
-
-#: ../bin/doption.c:284
-msgid "Drag Distance"
-msgstr "Raahausetäisyys"
-
-#: ../bin/doption.c:285
-msgid "Drag Timeout"
-msgstr "Raahauksen viive"
-
-#: ../bin/doption.c:286
-msgid "Min Grid Spacing"
-msgstr "Pienin ruudukon koko"
-
-#: ../bin/doption.c:287
-msgid "Check Point"
-msgstr "Automaattinen varmennus"
-
-#: ../bin/doption.c:288
-msgid "On Program Startup"
-msgstr "Ohjelman käynnistyksessä"
-
-#: ../bin/doption.c:298
-#, fuzzy
-msgid "999.999999"
-msgstr "999,999"
-
-#: ../bin/doption.c:299
-#, fuzzy
-msgid "999.99999"
-msgstr "999,999"
-
-#: ../bin/doption.c:300
-#, fuzzy
-msgid "999.9999"
-msgstr "999,999"
-
-#: ../bin/doption.c:301 ../bin/doption.c:318
-msgid "999.999"
-msgstr "999,999"
-
-#: ../bin/doption.c:302 ../bin/doption.c:319
-msgid "999.99"
-msgstr "999,99"
-
-#: ../bin/doption.c:303 ../bin/doption.c:320
-msgid "999.9"
-msgstr "999,9"
-
-#: ../bin/doption.c:304
-msgid "999 7/8"
-msgstr "999 7/8"
-
-#: ../bin/doption.c:305
-msgid "999 63/64"
-msgstr "999 63/64"
-
-#: ../bin/doption.c:306
-msgid "999' 11.999\""
-msgstr "999' 11.999\""
-
-#: ../bin/doption.c:307
-msgid "999' 11.99\""
-msgstr "999' 11.99\""
-
-#: ../bin/doption.c:308
-msgid "999' 11.9\""
-msgstr "999' 11.9\""
-
-#: ../bin/doption.c:309
-msgid "999' 11 7/8\""
-msgstr "999' 11 7/8\""
-
-#: ../bin/doption.c:310
-msgid "999' 11 63/64\""
-msgstr "999' 11 63/64\""
-
-#: ../bin/doption.c:311
-msgid "999ft 11.999in"
-msgstr "999ft 11.999in"
-
-#: ../bin/doption.c:312
-msgid "999ft 11.99in"
-msgstr "999ft 11.99in"
-
-#: ../bin/doption.c:313
-msgid "999ft 11.9in"
-msgstr "999ft 11.9in"
-
-#: ../bin/doption.c:314
-msgid "999ft 11 7/8in"
-msgstr "999ft 11 7/8in"
-
-#: ../bin/doption.c:315
-msgid "999ft 11 63/64in"
-msgstr "999ft 11 63/64in"
-
-#: ../bin/doption.c:321
-msgid "999.999mm"
-msgstr "999,999 mm"
-
-#: ../bin/doption.c:322
-msgid "999.99mm"
-msgstr "999,99 mm"
-
-#: ../bin/doption.c:323
-msgid "999.9mm"
-msgstr "999,9 mm"
-
-#: ../bin/doption.c:324
-msgid "999.999cm"
-msgstr "999,999 cm"
-
-#: ../bin/doption.c:325
-msgid "999.99cm"
-msgstr "999,99 cm"
-
-#: ../bin/doption.c:326
-msgid "999.9cm"
-msgstr "999,9 cm"
-
-#: ../bin/doption.c:327
-msgid "999.999m"
-msgstr "999,999 m"
-
-#: ../bin/doption.c:328
-msgid "999.99m"
-msgstr "999,99 m"
-
-#: ../bin/doption.c:329
-msgid "999.9m"
-msgstr "999,9 m"
-
-#: ../bin/doption.c:410
-msgid "Preferences"
-msgstr "Ominaisuudet"
-
-#: ../bin/doption.c:449
-msgid "Marker"
-msgstr "Markkeri"
-
-#: ../bin/doption.c:450
-msgid "Border"
-msgstr "Reunus"
-
-#: ../bin/doption.c:451
-msgid "Primary Axis"
-msgstr "Ensisijainen akseli"
-
-#: ../bin/doption.c:452
-msgid "Secondary Axis"
-msgstr "Toissijainen akseli"
-
-#: ../bin/doption.c:453
-msgid "Normal Track"
-msgstr "Normaalit raiteet"
-
-#: ../bin/doption.c:454
-msgid "Selected Track"
-msgstr "Valitut raiteet"
-
-#: ../bin/doption.c:455
-msgid "Profile Path"
-msgstr "Profiilirata"
-
-#: ../bin/doption.c:456
-msgid "Exception Track"
-msgstr "Erityisraiteet"
-
-#: ../bin/doption.c:457
-msgid "Track Ties"
-msgstr "Ratapölkyt"
-
-#: ../bin/dpricels.c:45
-msgid "Price"
-msgstr "Hinta"
-
-#: ../bin/dpricels.c:59
-msgid "Flex Track"
-msgstr "Fleksi"
-
-#: ../bin/dpricels.c:60
-msgid "costs"
-msgstr "maksaa"
-
-#: ../bin/dpricels.c:154
-msgid "Price List"
-msgstr "Hinnasto"
-
-#: ../bin/dprmfile.c:101
-#, c-format
-msgid "Updating %s"
-msgstr "Päivitetään %s"
-
-#: ../bin/dprmfile.c:228
-msgid "Show File Names"
-msgstr "Näytä tiedostojen nimet"
-
-#: ../bin/dprmfile.c:235
-#, fuzzy
-msgid "Select all"
-msgstr "Valitse kaikki"
-
-#: ../bin/dprmfile.c:238 ../bin/dprmfile.c:362
-msgid "Unload"
-msgstr "Poista"
-
-#: ../bin/dprmfile.c:239
-msgid "Browse ..."
-msgstr "Selaa ..."
-
-#: ../bin/dprmfile.c:384
-msgid "Reload"
-msgstr "Lataa"
-
-#: ../bin/dprmfile.c:533
-msgid "Parameter Files"
-msgstr "Parametritiedostot"
-
-#: ../bin/dprmfile.c:534
-msgid "Load Parameters"
-msgstr "Lataa parametrit"
-
-#: ../bin/dprmfile.c:534
-msgid "Parameter files|*.xtp"
-msgstr "Parametritiedostot|*.xtp"
-
-#: ../bin/draw.c:1802
-msgid "Macro Zoom Mode"
-msgstr ""
-
-#: ../bin/draw.c:1804
-msgid "Use Shift+PageDwn to jump to preset Zoom In"
-msgstr ""
-
-#: ../bin/draw.c:1809
-msgid "Scale 1:1 - Use Ctrl+PageDwn to go to Macro Zoom Mode"
-msgstr ""
-
-#: ../bin/draw.c:1813
-msgid "Preset Zoom In Value selected. Shift+Ctrl+PageDwn to reset value"
-msgstr ""
-
-#: ../bin/draw.c:1817
-#, fuzzy, c-format
-msgid "Zoom In Program Value %ld:1, Shift+PageDwn to use"
-msgstr "Lähennä arvoon %ld:1"
-
-#: ../bin/draw.c:1836
-msgid "Use Shift+PageUp to jump to preset Zoom Out"
-msgstr ""
-
-#: ../bin/draw.c:1839
-#, fuzzy
-msgid "At Maximum Zoom Out"
-msgstr "Suurin siirtymä"
-
-#: ../bin/draw.c:1844
-msgid "Preset Zoom Out Value selected. Shift+Ctrl+PageUp to reset value"
-msgstr ""
-
-#: ../bin/draw.c:1848
-#, fuzzy, c-format
-msgid "Zoom Out Program Value %ld:1 set, Shift+PageUp to use"
-msgstr "Loitonna arvoon %ld:1"
-
-#: ../bin/draw.c:2470
-msgid "Map"
-msgstr "Kartta"
-
-#: ../bin/drawgeom.c:79 ../bin/drawgeom.c:94
-msgid "Create Lines"
-msgstr "Luo viivoja"
-
-#: ../bin/drawgeom.c:193 ../bin/drawgeom.c:206
-msgid "Drag to place next end point"
-msgstr "Raahaa asettaaksesi seuraava päätepiste"
-
-#: ../bin/drawgeom.c:238
-msgid "Drag to set radius"
-msgstr "Aseta säde raahaamalla"
-
-#: ../bin/drawgeom.c:251
-msgid "Drag set box size"
-msgstr "Aseta nelikulmion koko rahaamalla"
-
-#: ../bin/drawgeom.c:293 ../bin/drawgeom.c:302
-#, c-format
-msgid "Length = %s, Angle = %0.2f"
-msgstr "Pituus = %s, Kulma = %0.2f"
-
-#: ../bin/drawgeom.c:319
-#, c-format
-msgid "Straight Line: Length=%s Angle=%0.3f"
-msgstr "Suora viiva: Pituus=%s Kulma=%0.3f"
-
-#: ../bin/drawgeom.c:342
-#, c-format
-msgid "Curved Line: Radius=%s Angle=%0.3f Length=%s"
-msgstr "Kaari: Säde=%s Kulma=%0.3f Pituus=%s"
-
-#: ../bin/drawgeom.c:357
-#, c-format
-msgid "Radius = %s"
-msgstr "Säde = %s"
-
-#: ../bin/drawgeom.c:367
-#, c-format
-msgid "Width = %s, Height = %s"
-msgstr "Leveys = %s, Korkeus = %s"
-
-#: ../bin/drawgeom.c:686
-#, c-format
-msgid "Length = %0.3f Angle = %0.3f"
-msgstr "Pituus = %0.3f Kulma = %0.3f"
-
-#: ../bin/dxfoutput.c:228
-msgid "Export to DXF"
-msgstr "Vie DXF tiedostoon"
-
-#: ../bin/fileio.c:235
-msgid ""
-"\n"
-"Do you want to continue?"
-msgstr ""
-"\n"
-"Haluatko jatkaa?"
-
-#: ../bin/fileio.c:541
-msgid "Parameter"
-msgstr "Parametri"
-
-#: ../bin/fileio.c:678
-#, c-format
-msgid "putTitle: title too long: %s"
-msgstr "putTitle: Otsikko on liian pitkä: %s"
-
-#: ../bin/fileio.c:698
-msgid "Unnamed Trackplan"
-msgstr "Nimetön ratasuunnitelma"
-
-#: ../bin/fileio.c:714 ../bin/fileio.c:1042
-msgid "Check Pointing"
-msgstr "Automaattinen varmennus"
-
-#: ../bin/fileio.c:944
-msgid "Track"
-msgstr "Raide"
-
-#: ../bin/fileio.c:1008
-msgid "Save Tracks"
-msgstr "Tallenna"
-
-#: ../bin/fileio.c:1022
-#, fuzzy
-msgid "Save Tracks As"
-msgstr "Tallenna"
-
-#: ../bin/fileio.c:1030
-msgid "Open Tracks"
-msgstr "Avaa"
-
-#: ../bin/fileio.c:1163 ../bin/fileio.c:1181
-msgid "Import Tracks"
-msgstr "Tuo raiteet tiedostosta"
-
-#: ../bin/fileio.c:1242
-msgid "Export Tracks"
-msgstr "Vie raiteet tiedostoon"
-
-#: ../bin/fileio.c:1262
-msgid "Clipboard"
-msgstr "Leikepöytä"
-
-#: ../bin/fileio.c:1305 ../bin/misc.c:1986
-msgid "Paste"
-msgstr "Liitä"
-
-#: ../bin/i18n.c:66
-#, c-format
-msgid "Gettext initialized (PACKAGE=%s, LOCALEDIR=%s, LC_ALL=%s).\n"
-msgstr "Gettext alustettu (PACKAGE=%s, LOCALEDIR=%s, LC_ALL=%s).\n"
-
-#: ../bin/layout.c:234
-msgid "Room Width"
-msgstr "Huoneen leveys"
-
-#: ../bin/layout.c:235
-#, fuzzy
-msgid " Height"
-msgstr "Korkeus"
-
-#: ../bin/layout.c:236
-#, fuzzy
-msgid "Layout Title"
-msgstr "Ratasuunnitelma"
-
-#: ../bin/layout.c:237
-#, fuzzy
-msgid "Subtitle"
-msgstr "Otsikko"
-
-#: ../bin/layout.c:241
-#, fuzzy
-msgid " Gauge"
-msgstr "Mittakaava / raideväli"
-
-#: ../bin/layout.c:243
-#, fuzzy
-msgid "Min Track Radius"
-msgstr "Pienin karresäde"
-
-#: ../bin/layout.c:244
-#, fuzzy
-msgid " Max Track Grade (%)"
-msgstr "Suurin nousukulma (%)"
-
-#: ../bin/layout.c:311
-msgid "Layout Options"
-msgstr "Ratasuunnitelman asetukset"
-
-#: ../bin/macro.c:90
-msgid "Message"
-msgstr "Viesti"
-
-#: ../bin/macro.c:93
-msgid "End"
-msgstr "Lopeta"
-
-#: ../bin/macro.c:174
-msgid "Recording"
-msgstr "Nauhoitus"
-
-#: ../bin/macro.c:209
-msgid "End of Playback. Hit Step to exit\n"
-msgstr "Toisto on lopussa. Paina Seuraava vaihe -painiketta poistuaksesi.\n"
-
-#: ../bin/macro.c:273
-msgid "Record"
-msgstr "Nauhoita"
-
-#: ../bin/macro.c:603
-msgid "Step"
-msgstr "Seuraava vaihe"
-
-#: ../bin/macro.c:606 ../bin/macro.c:1367
-msgid "Next"
-msgstr "Seuraava"
-
-#: ../bin/macro.c:609 ../bin/misc.c:565
-msgid "Quit"
-msgstr "Lopeta"
-
-#: ../bin/macro.c:612 ../../../../build/work/app/bin/bllnhlp.c:495
-msgid "Speed"
-msgstr "Nopeus"
-
-#: ../bin/macro.c:838 ../bin/macro.c:1228
-msgid "Demo"
-msgstr "Demo"
-
-#: ../bin/macro.c:1023
-#, c-format
-msgid "Elapsed time %lu\n"
-msgstr "Kulunut aika %lu\n"
-
-#: ../bin/macro.c:1157
-msgid "Playback"
-msgstr "Toisto"
-
-#: ../bin/macro.c:1231
-msgid "Slowest"
-msgstr "Hitain"
-
-#: ../bin/macro.c:1232
-msgid "Slow"
-msgstr "Hidas"
-
-#: ../bin/macro.c:1234
-msgid "Fast"
-msgstr "Nopea"
-
-#: ../bin/macro.c:1235
-msgid "Faster"
-msgstr "Nopeampi"
-
-#: ../bin/macro.c:1236
-msgid "Fastest"
-msgstr "Nopein"
-
-#: ../bin/macro.c:1354
-msgid "Can not find PARAMETER playback proc"
-msgstr "PARAMETER toistoproseduuria ei löydy"
-
-#: ../bin/misc.c:164
-msgid "No Messages"
-msgstr "Ei viestejä"
-
-#: ../bin/misc.c:309 ../bin/misc.c:312
-msgid "ABORT"
-msgstr "KESKEYTÄ"
-
-#: ../bin/misc.c:311
-msgid ""
-"\n"
-"Do you want to save your layout?"
-msgstr ""
-"\n"
-"Haluatko tallentaa ratasuunnitelman?"
-
-#: ../bin/misc.c:361
-#, c-format
-msgid "No help for %s"
-msgstr "Ei ohjetta aiheesta %s"
-
-#: ../bin/misc.c:464
-msgid ""
-"Save changes to the layout design before closing?\n"
-"\n"
-"If you don't save now, your unsaved changes will be discarded."
-msgstr ""
-"Tallennetaanko ratasuunnitelma ennen sulkemista?\n"
-"\n"
-"Jos ei tallenneta, kaikki muutokset menetetään."
-
-#: ../bin/misc.c:466 ../bin/misc.c:2028
-msgid "&Save"
-msgstr "&Tallenna"
-
-#: ../bin/misc.c:466 ../bin/misc.c:490
-msgid "&Cancel"
-msgstr "&Peruuta"
-
-#: ../bin/misc.c:466
-msgid "&Don't Save"
-msgstr "Älä tallenna"
-
-#: ../bin/misc.c:488
-msgid ""
-"Do you want to return to the last saved state?\n"
-"\n"
-"Revert will cause all changes done since last save to be lost."
-msgstr ""
-"Haluatko palata edelliseen tallennettuun tilaan?\n"
-"\n"
-"Palautuksessa menetetään kaikki tallennuksen jälkeiset muutokset."
-
-#: ../bin/misc.c:490
-msgid "&Revert"
-msgstr "Palauta"
-
-#: ../bin/misc.c:716
-msgid "XTrackCAD Font"
-msgstr "XTrackCAD kirjasin"
-
-#: ../bin/misc.c:779
-#, c-format
-msgid "No balloon help for %s\n"
-msgstr "Ei pikaopastetta %s:lle\n"
-
-#: ../bin/misc.c:781 ../../../../build/work/app/bin/bllnhlp.c:558
-#: ../../../../build/work/app/bin/bllnhlp.c:559
-#: ../../../../build/work/app/bin/bllnhlp.c:561
-#: ../../../../build/work/app/bin/bllnhlp.c:562
-#: ../../../../build/work/app/bin/bllnhlp.c:564
-#: ../../../../build/work/app/bin/bllnhlp.c:565
-#: ../../../../build/work/app/bin/bllnhlp.c:566
-#: ../../../../build/work/app/bin/bllnhlp.c:567
-#: ../../../../build/work/app/bin/bllnhlp.c:568
-#: ../../../../build/work/app/bin/bllnhlp.c:569
-#: ../../../../build/work/app/bin/bllnhlp.c:570
-#: ../../../../build/work/app/bin/bllnhlp.c:571
-#: ../../../../build/work/app/bin/bllnhlp.c:572
-#: ../../../../build/work/app/bin/bllnhlp.c:573
-#: ../../../../build/work/app/bin/bllnhlp.c:574
-#: ../../../../build/work/app/bin/bllnhlp.c:575
-#: ../../../../build/work/app/bin/bllnhlp.c:576
-#: ../../../../build/work/app/bin/bllnhlp.c:577
-#: ../../../../build/work/app/bin/bllnhlp.c:578
-#: ../../../../build/work/app/bin/bllnhlp.c:579
-#: ../../../../build/work/app/bin/bllnhlp.c:580
-#: ../../../../build/work/app/bin/bllnhlp.c:581
-#: ../../../../build/work/app/bin/bllnhlp.c:582
-#: ../../../../build/work/app/bin/bllnhlp.c:583
-#: ../../../../build/work/app/bin/bllnhlp.c:584
-#: ../../../../build/work/app/bin/bllnhlp.c:585
-#: ../../../../build/work/app/bin/bllnhlp.c:586
-#: ../../../../build/work/app/bin/bllnhlp.c:587
-#: ../../../../build/work/app/bin/bllnhlp.c:588
-#: ../../../../build/work/app/bin/bllnhlp.c:589
-#: ../../../../build/work/app/bin/bllnhlp.c:590
-#: ../../../../build/work/app/bin/bllnhlp.c:591
-#: ../../../../build/work/app/bin/bllnhlp.c:592
-#: ../../../../build/work/app/bin/bllnhlp.c:593
-#: ../../../../build/work/app/bin/bllnhlp.c:594
-#: ../../../../build/work/app/bin/bllnhlp.c:595
-#: ../../../../build/work/app/bin/bllnhlp.c:596
-#: ../../../../build/work/app/bin/bllnhlp.c:597
-#: ../../../../build/work/app/bin/bllnhlp.c:598
-#: ../../../../build/work/app/bin/bllnhlp.c:599
-#: ../../../../build/work/app/bin/bllnhlp.c:600
-#: ../../../../build/work/app/bin/bllnhlp.c:601
-#: ../../../../build/work/app/bin/bllnhlp.c:602
-#: ../../../../build/work/app/bin/bllnhlp.c:603
-#: ../../../../build/work/app/bin/bllnhlp.c:604
-#: ../../../../build/work/app/bin/bllnhlp.c:605
-#: ../../../../build/work/app/bin/bllnhlp.c:606
-#: ../../../../build/work/app/bin/bllnhlp.c:607
-#: ../../../../build/work/app/bin/bllnhlp.c:608
-#: ../../../../build/work/app/bin/bllnhlp.c:609
-#: ../../../../build/work/app/bin/bllnhlp.c:610
-#: ../../../../build/work/app/bin/bllnhlp.c:611
-#: ../../../../build/work/app/bin/bllnhlp.c:612
-#: ../../../../build/work/app/bin/bllnhlp.c:613
-#: ../../../../build/work/app/bin/bllnhlp.c:614
-#: ../../../../build/work/app/bin/bllnhlp.c:615
-#: ../../../../build/work/app/bin/bllnhlp.c:616
-#: ../../../../build/work/app/bin/bllnhlp.c:617
-#: ../../../../build/work/app/bin/bllnhlp.c:618
-#: ../../../../build/work/app/bin/bllnhlp.c:620
-msgid "No Help"
-msgstr "Ei ohjetta"
-
-#: ../bin/misc.c:1041 ../bin/misc.c:1046 ../bin/misc.c:1111
-msgid ""
-"Cancelling the current command will undo the changes\n"
-"you are currently making. Do you want to update?"
-msgstr ""
-"Komennon peruuttaminen kumoaa muutokset,\n"
-"joita olet tekemässä. Haluatko jatkaa?"
-
-#: ../bin/misc.c:1634
-msgid "Sticky Commands"
-msgstr "Pysyvät komennot"
-
-#: ../bin/misc.c:1647
-#, fuzzy
-msgid "File Buttons"
-msgstr "Viivain"
-
-#: ../bin/misc.c:1648
-msgid "Zoom Buttons"
-msgstr "Zoom"
-
-#: ../bin/misc.c:1649
-msgid "Undo Buttons"
-msgstr "Kumoa/Tee uudelleen"
-
-#: ../bin/misc.c:1650
-msgid "Easement Button"
-msgstr "Kaarreloivennus"
-
-#: ../bin/misc.c:1651
-msgid "SnapGrid Buttons"
-msgstr "Kohdistusruudukko"
-
-#: ../bin/misc.c:1652
-msgid "Create Track Buttons"
-msgstr "Luo raiteet"
-
-#: ../bin/misc.c:1653
-#, fuzzy
-msgid "Layout Control Elements"
-msgstr "Ratasuunnitelman asetukset"
-
-#: ../bin/misc.c:1654
-msgid "Modify Track Buttons"
-msgstr "Radan muokkaus"
-
-#: ../bin/misc.c:1655
-msgid "Properties/Select"
-msgstr "Määrittele/valitse"
-
-#: ../bin/misc.c:1656
-msgid "Track Group Buttons"
-msgstr "Raiteiden ryhmittely"
-
-#: ../bin/misc.c:1657
-msgid "Train Group Buttons"
-msgstr "Junat"
-
-#: ../bin/misc.c:1658
-msgid "Create Misc Buttons"
-msgstr "Piirto"
-
-#: ../bin/misc.c:1659
-msgid "Ruler Button"
-msgstr "Viivain"
-
-#: ../bin/misc.c:1660
-msgid "Layer Buttons"
-msgstr "Tasot"
-
-#: ../bin/misc.c:1661
-msgid "Hot Bar"
-msgstr "Hot Bar"
-
-#: ../bin/misc.c:1744 ../../../../build/work/app/bin/bllnhlp.c:72
-msgid "Change Elevations"
-msgstr "Muuta korkeustasoja"
-
-#: ../bin/misc.c:1744
-msgid "Change"
-msgstr "Muuta"
-
-#: ../bin/misc.c:1757
-msgid "Angle:"
-msgstr "Kulma:"
-
-#: ../bin/misc.c:1792
-msgid "180 "
-msgstr "180 "
-
-#: ../bin/misc.c:1793
-msgid "90 CW"
-msgstr "90 MP"
-
-#: ../bin/misc.c:1794
-msgid "45 CW"
-msgstr "45 MP"
-
-#: ../bin/misc.c:1795
-msgid "30 CW"
-msgstr "30 MP"
-
-#: ../bin/misc.c:1796
-msgid "15 CW"
-msgstr "15 MP"
-
-#: ../bin/misc.c:1797
-msgid "15 CCW"
-msgstr "15 VP"
-
-#: ../bin/misc.c:1798
-msgid "30 CCW"
-msgstr "30 VP"
-
-#: ../bin/misc.c:1799
-msgid "45 CCW"
-msgstr "45 VP"
-
-#: ../bin/misc.c:1800
-msgid "90 CCW"
-msgstr "90 VP"
-
-#: ../bin/misc.c:1801
-msgid "Enter Angle ..."
-msgstr "Syötä kulma ..."
-
-#: ../bin/misc.c:1828
-msgid "Debug"
-msgstr "Virheiden poisto (debug)"
-
-#: ../bin/misc.c:1956
-msgid "&File"
-msgstr "&Tiedosto"
-
-#: ../bin/misc.c:1957
-msgid "&Edit"
-msgstr "&Muokkaa"
-
-#: ../bin/misc.c:1958
-msgid "&View"
-msgstr "&Näytä"
-
-#: ../bin/misc.c:1959
-msgid "&Add"
-msgstr "&Lisää"
-
-#: ../bin/misc.c:1960
-msgid "&Change"
-msgstr "Muuta"
-
-#: ../bin/misc.c:1961
-msgid "&Draw"
-msgstr "Piirto"
-
-#: ../bin/misc.c:1962
-msgid "&Manage"
-msgstr "Hallinta"
-
-#: ../bin/misc.c:1963
-msgid "&Options"
-msgstr "Asetukset"
-
-#: ../bin/misc.c:1964
-msgid "&Macro"
-msgstr "Makro"
-
-#: ../bin/misc.c:1965
-msgid "&Window"
-msgstr "&Ikkuna"
-
-#: ../bin/misc.c:1966
-msgid "&Help"
-msgstr "&Ohje"
-
-#: ../bin/misc.c:1972 ../bin/misc.c:1973
-msgid "Commands"
-msgstr "Komennot"
-
-#: ../bin/misc.c:1974
-msgid "Undo"
-msgstr "Kumoa"
-
-#: ../bin/misc.c:1975
-msgid "Redo"
-msgstr "Tee uudelleen"
-
-#: ../bin/misc.c:1976 ../bin/misc.c:1977
-msgid "Zoom In"
-msgstr "Lähennä"
-
-#: ../bin/misc.c:1978 ../bin/misc.c:1979
-msgid "Zoom Out"
-msgstr "Loitonna"
-
-#: ../bin/misc.c:1980
-msgid "SnapGrid Enable"
-msgstr "Käytä kohdistusruudukkoa"
-
-#: ../bin/misc.c:1981
-msgid "SnapGrid Show"
-msgstr "Näytä kohdistusruudukko"
-
-#: ../bin/misc.c:1982 ../bin/misc.c:2107
-#, fuzzy
-msgid "Show/Hide Map"
-msgstr "Näytä/piilota taso"
-
-#: ../bin/misc.c:1985
-msgid "Copy"
-msgstr "Kopioi"
-
-#: ../bin/misc.c:1987
-msgid "Deselect All"
-msgstr "Poista valinnat"
-
-#: ../bin/misc.c:1995 ../bin/misc.c:1996
-msgid "More"
-msgstr "Lisää"
-
-#: ../bin/misc.c:2024
-msgid "&New ..."
-msgstr "&Uusi ..."
-
-#: ../bin/misc.c:2025
-msgid "&Open ..."
-msgstr "&Avaa ..."
-
-#: ../bin/misc.c:2029
-msgid "Save &As ..."
-msgstr "Tallenna &nimellä ..."
-
-#: ../bin/misc.c:2030
-msgid "Revert"
-msgstr "Palauta"
-
-#: ../bin/misc.c:2032
-msgid "P&rint Setup ..."
-msgstr "Tulostusasetukset ..."
-
-#: ../bin/misc.c:2035
-msgid "&Import"
-msgstr "Tuo tiedostosta"
-
-#: ../bin/misc.c:2036
-msgid "Export to &Bitmap"
-msgstr "Vie bitmap tiedostoon"
-
-#: ../bin/misc.c:2037
-msgid "E&xport"
-msgstr "Vie tiedostoon"
-
-#: ../bin/misc.c:2038
-msgid "Export D&XF"
-msgstr "Vie DXF tiedostoon"
-
-#: ../bin/misc.c:2041
-msgid "Parameter &Files ..."
-msgstr "Parametritiedostot ..."
-
-#: ../bin/misc.c:2042
-msgid "No&tes ..."
-msgstr "Muistiinpanot ..."
-
-#: ../bin/misc.c:2047
-msgid "E&xit"
-msgstr "Poistu"
-
-#: ../bin/misc.c:2053
-msgid "&Undo"
-msgstr "&Kumoa"
-
-#: ../bin/misc.c:2054
-msgid "R&edo"
-msgstr "&Tee uudestaan"
-
-#: ../bin/misc.c:2056
-msgid "Cu&t"
-msgstr "&Leikkaa"
-
-#: ../bin/misc.c:2057
-msgid "&Copy"
-msgstr "&Kopioi"
-
-#: ../bin/misc.c:2058
-msgid "&Paste"
-msgstr "L&iitä"
-
-#: ../bin/misc.c:2059
-msgid "De&lete"
-msgstr "Poista"
-
-#: ../bin/misc.c:2065
-msgid "Select &All"
-msgstr "Valitse kaikki"
-
-#: ../bin/misc.c:2066
-msgid "Select Current Layer"
-msgstr "Valitse nykyinen taso"
-
-#: ../bin/misc.c:2067
-msgid "&Deselect All"
-msgstr "Poista valinnat"
-
-#: ../bin/misc.c:2068
-msgid "&Invert Selection"
-msgstr "Käänteinen valinta"
-
-#: ../bin/misc.c:2069
-msgid "Select Stranded Track"
-msgstr "Valitse irtonaiset raiteet"
-
-#: ../bin/misc.c:2071
-msgid "Tu&nnel"
-msgstr "Tunneli"
-
-#: ../bin/misc.c:2072
-msgid "A&bove"
-msgstr "Päällimmäiseksi"
-
-#: ../bin/misc.c:2073
-msgid "Belo&w"
-msgstr "Alimmaiseksi"
-
-#: ../bin/misc.c:2076
-msgid "Thin Tracks"
-msgstr "Ohuet raiteet"
-
-#: ../bin/misc.c:2077
-msgid "Medium Tracks"
-msgstr "Keskipaksut raiteet"
-
-#: ../bin/misc.c:2078
-msgid "Thick Tracks"
-msgstr "Paksut raiteet"
-
-#: ../bin/misc.c:2083
-msgid "Zoom &In"
-msgstr "Lähennä"
-
-#: ../bin/misc.c:2084
-msgid "&Zoom"
-msgstr "&Zoom"
-
-#: ../bin/misc.c:2085
-msgid "Zoom &Out"
-msgstr "Loitonna"
-
-#: ../bin/misc.c:2094
-msgid "&Redraw"
-msgstr "Uudelleenpiirto"
-
-#: ../bin/misc.c:2095
-msgid "Redraw All"
-msgstr "Uudelleenpiirto kaikille"
-
-#: ../bin/misc.c:2098
-msgid "Enable SnapGrid"
-msgstr "Käytä kohdistusruudukkoa"
-
-#: ../bin/misc.c:2100
-msgid "Show SnapGrid"
-msgstr "Näytä kohdistusruudukko"
-
-#: ../bin/misc.c:2112
-msgid "&Tool Bar"
-msgstr "Työkalurivin painikkeet"
-
-#: ../bin/misc.c:2162
-msgid "&Loosen Tracks"
-msgstr "Irroita raiteet"
-
-#: ../bin/misc.c:2171
-msgid "Raise/Lower Elevations"
-msgstr "Nosta/laske korkeuksia"
-
-#: ../bin/misc.c:2176
-msgid "Recompute Elevations"
-msgstr "Laske korkeudet uudelleen"
-
-#: ../bin/misc.c:2180
-msgid "Change Scale"
-msgstr "Muuta mittakaavaa"
-
-#: ../bin/misc.c:2197
-msgid "L&ayout ..."
-msgstr "Ratasuunnitelma ..."
-
-#: ../bin/misc.c:2198
-msgid "&Display ..."
-msgstr "Näyttö ..."
-
-#: ../bin/misc.c:2199
-msgid "Co&mmand ..."
-msgstr "Komennot ..."
-
-#: ../bin/misc.c:2200
-msgid "&Easements ..."
-msgstr "Kaarreloivennus ..."
-
-#: ../bin/misc.c:2201
-msgid "&Fonts ..."
-msgstr "&Kirjasimet ..."
-
-#: ../bin/misc.c:2202
-msgid "Stic&ky ..."
-msgstr "Pysyvät komennot ..."
-
-#: ../bin/misc.c:2205
-msgid "&Debug ..."
-msgstr "Virheiden poisto (debug) ..."
-
-#: ../bin/misc.c:2207
-msgid "&Preferences ..."
-msgstr "&Ominaisuudet ..."
-
-#: ../bin/misc.c:2208
-msgid "&Colors ..."
-msgstr "Värit ..."
-
-#: ../bin/misc.c:2213
-msgid "&Record ..."
-msgstr "&Nauhoita ..."
-
-#: ../bin/misc.c:2214
-msgid "&Play Back ..."
-msgstr "&Toisto ..."
-
-#: ../bin/misc.c:2220
-msgid "Main window"
-msgstr "Pääikkuna"
-
-#: ../bin/misc.c:2232
-msgid "Recent Messages"
-msgstr "Viimeisimmät viestit"
-
-#: ../bin/misc.c:2238
-msgid "Tip of the Day..."
-msgstr "Päivän vinkki ..."
-
-#: ../bin/misc.c:2239
-msgid "&Demos"
-msgstr "Demot"
-
-#: ../bin/misc.c:2243 ../bin/smalldlg.c:220
-msgid "About"
-msgstr "Tietoja"
-
-#: ../bin/misc.c:2253
-msgid "Tur&nout Designer..."
-msgstr "Vaihteiden suunnittelu..."
-
-#: ../bin/misc.c:2255
-msgid "Layout &Control Elements"
-msgstr ""
-
-#: ../bin/misc.c:2256
-msgid "&Group"
-msgstr "Ryhmittele"
-
-#: ../bin/misc.c:2257
-msgid "&Ungroup"
-msgstr "Pura ryhmittely"
-
-#: ../bin/misc.c:2259
-#, fuzzy
-msgid "Custom defined parts..."
-msgstr "Omat raideosat ja kalusto..."
-
-#: ../bin/misc.c:2260
-msgid "Update Turnouts and Structures"
-msgstr "Päivitä vaihteet ja rakennukset"
-
-#: ../bin/misc.c:2266
-msgid "Layers ..."
-msgstr "Tasot ..."
-
-#: ../bin/misc.c:2269
-msgid "Parts &List ..."
-msgstr "Osaluettelo ..."
-
-#: ../bin/misc.c:2270
-msgid "Price List..."
-msgstr "Hinnasto ..."
-
-#: ../bin/misc.c:2351
-msgid ""
-"Program was not terminated properly. Do you want to resume working on the "
-"previous trackplan?"
-msgstr ""
-"Ohjelmaa ei lopetettu kunnolla. Haluatko jatkaa työskentelyä edellisen "
-"ratasuunnitelman parissa?"
-
-#: ../bin/misc.c:2352
-msgid "Resume"
-msgstr "Jatka"
-
-#: ../bin/misc.c:2461
-#, c-format
-msgid "Unnamed Trackplan - %s(%s)"
-msgstr "Nimetön ratasuunnitelma - %s(%s)"
-
-#: ../bin/misc.c:2529
-msgid "Initializing commands"
-msgstr "Alustetaan komennot"
-
-#: ../bin/misc.c:2538
-msgid "Initializing menus"
-msgstr "Alustetaan valikot"
-
-#: ../bin/misc.c:2575
-msgid "Reading parameter files"
-msgstr "Luetaan parametritiedostot"
-
-#: ../bin/misc.c:2609
-msgid "Initialization complete"
-msgstr "Alustus valmis"
-
-#: ../bin/param.c:95
-msgid "Unexpected End Of String"
-msgstr "Odottamaton merkkijonon loppu"
-
-#: ../bin/param.c:102
-msgid "Expected digit"
-msgstr "Odotettiin numeroa"
-
-#: ../bin/param.c:109
-msgid "Overflow"
-msgstr "Ylivuoto"
-
-#: ../bin/param.c:157
-msgid "Divide by 0"
-msgstr "Jako nollalla"
-
-#: ../bin/param.c:165
-msgid "Expected /"
-msgstr "Odotettiin /"
-
-#: ../bin/param.c:237
-msgid "Invalid Units Indicator"
-msgstr "Epäkelpo yksikön merkintä"
-
-#: ../bin/param.c:251
-msgid "Expected End Of String"
-msgstr "Odotettiin merkkijonon loppua"
-
-#: ../bin/param.c:274 ../bin/param.c:1294
-#, c-format
-msgid "Invalid Number"
-msgstr "Epäkelpo numero"
-
-#: ../bin/param.c:322
-msgid "End Of String"
-msgstr "Merkkijonon loppu"
-
-#: ../bin/param.c:1301
-#, c-format
-msgid "Enter a value > %ld"
-msgstr "Syötä arvo, joka on > %ld"
-
-#: ../bin/param.c:1303
-#, c-format
-msgid "Enter a value < %ld"
-msgstr "Syötä arvo, joka on < %ld"
-
-#: ../bin/param.c:1305
-#, c-format
-msgid "Enter a value between %ld and %ld"
-msgstr "Syötä arvo %ld ja %ld väliltä"
-
-#: ../bin/param.c:1353
-#, c-format
-msgid "Enter a value > %s"
-msgstr "Syätä arvo, joka on > %s"
-
-#: ../bin/param.c:1356
-#, c-format
-msgid "Enter a value < %s"
-msgstr "Syötä arvo, joka on < %s"
-
-#: ../bin/param.c:1359
-#, c-format
-msgid "Enter a value between %s and %s"
-msgstr "Syötä arvo %s ja %s väliltä"
-
-#: ../bin/param.c:2495
-msgid "Help"
-msgstr "Ohje"
-
-#: ../bin/smalldlg.c:63
-msgid "Show tips at start"
-msgstr "Vinkki ohjelman alussa"
-
-#: ../bin/smalldlg.c:69
-msgid "Did you know..."
-msgstr "Tiesitkö..."
-
-#: ../bin/smalldlg.c:71
-msgid "Previous Tip"
-msgstr "Edellinen"
-
-#: ../bin/smalldlg.c:72
-msgid "Next Tip"
-msgstr "Seuraava"
-
-#: ../bin/smalldlg.c:89
-msgid "Tip of the Day"
-msgstr "Päivän vinkki"
-
-#: ../bin/smalldlg.c:98
-msgid "No tips are available"
-msgstr "Vinkkejä ei ole saatavilla"
-
-#: ../bin/smalldlg.c:197
-#, fuzzy
-msgid ""
-"XTrackCAD is a CAD (computer-aided design) program for designing model "
-"railroad layouts."
-msgstr ""
-"\n"
-"XTrackCAD on CAD ohjelma pienoisrautateiden\n"
-"raidekaavioiden suunniteluun."
-
-#: ../bin/tbezier.c:170
-#, c-format
-msgid "Bezier Curve: length=%s min radius=%s"
-msgstr ""
-
-#: ../bin/tbezier.c:232
-#, fuzzy
-msgid "Z1"
-msgstr "Z"
-
-#: ../bin/tbezier.c:233 ../bin/tcornu.c:279
-#, fuzzy
-msgid "End Angle 1"
-msgstr "Syötä kulma ..."
-
-#: ../bin/tbezier.c:234
-#, fuzzy
-msgid "Ctl Pt 1: X"
-msgstr "Päätepiste 1: X"
-
-#: ../bin/tbezier.c:235
-#, fuzzy
-msgid "Ctl Pt 2: X"
-msgstr "Päätepiste 2: X"
-
-#: ../bin/tbezier.c:237
-#, fuzzy
-msgid "Z2"
-msgstr "Z"
-
-#: ../bin/tbezier.c:238 ../bin/tcornu.c:284
-#, fuzzy
-msgid "End Angle 2"
-msgstr "Syötä kulma ..."
-
-#: ../bin/tbezier.c:239
-#, fuzzy
-msgid "MinRadius"
-msgstr "Säde"
-
-#: ../bin/tbezier.c:244
-#, fuzzy
-msgid "Line Color"
-msgstr "%s väri"
-
-#: ../bin/tbezier.c:341
-#, fuzzy, c-format
-msgid ""
-"Bezier %s(%d): Layer=%u MinRadius=%s Length=%s EP=[%0.3f,%0.3f] [%0.3f,"
-"%0.3f] CP1=[%0.3f,%0.3f] CP2=[%0.3f, %0.3f]"
-msgstr ""
-"Kaareva raideosa(%d): Taso=%d Säde=%s Pituus=%s Keskipiste=[%s,%s] Päätep.="
-"[%0.3f,%0.3f K%0.3f] [%0.3f,%0.3f K%0.3f]"
-
-#: ../bin/tbezier.c:399
-#, fuzzy
-msgid "Bezier Track"
-msgstr "Helix raide"
-
-#: ../bin/tbezier.c:768
-msgid "Merge Bezier"
-msgstr ""
-
-#: ../bin/tcornu.c:210
-#, c-format
-msgid "Cornu Curve: length=%0.3f min radius=%0.3f"
-msgstr ""
-
-#: ../bin/tcornu.c:278
-#, fuzzy
-msgid "Elev 1"
-msgstr "Korkeus = %0.1f"
-
-#: ../bin/tcornu.c:280
-#, fuzzy
-msgid "Radius 1"
-msgstr "Säde1"
-
-#: ../bin/tcornu.c:281
-#, fuzzy
-msgid "End Radius Center 1: X"
-msgstr "Päätepiste 1: X"
-
-#: ../bin/tcornu.c:283
-#, fuzzy
-msgid "Elev 2"
-msgstr "Korkeus = %s"
-
-#: ../bin/tcornu.c:285
-#, fuzzy
-msgid "Radius 2"
-msgstr "Säde2"
-
-#: ../bin/tcornu.c:286
-#, fuzzy
-msgid "End Radius Center 2: X"
-msgstr "Päätepiste 2: X"
-
-#: ../bin/tcornu.c:287
-#, fuzzy
-msgid "Minimum Radius"
-msgstr "Pienin karresäde"
-
-#: ../bin/tcornu.c:288
-msgid "Maximum Rate Of Change Of Curvature"
-msgstr ""
-
-#: ../bin/tcornu.c:289
-msgid "Total Winding Angle"
-msgstr ""
-
-#: ../bin/tcornu.c:410
-#, fuzzy, c-format
-msgid ""
-"Cornu Track(%d): Layer=%u MinRadius=%s Length=%s EP=[%0.3f,%0.3f] [%0.3f,"
-"%0.3f]"
-msgstr ""
-"Kaareva raideosa(%d): Taso=%d Säde=%s Pituus=%s Keskipiste=[%s,%s] Päätep.="
-"[%0.3f,%0.3f K%0.3f] [%0.3f,%0.3f K%0.3f]"
-
-#: ../bin/tcornu.c:463
-#, fuzzy
-msgid "Cornu Track"
-msgstr "Kaareva raide"
-
-#: ../bin/tcornu.c:907
-#, fuzzy
-msgid "Merge Cornu"
-msgstr "Yhdistä kaarteet"
-
-#: ../bin/tcurve.c:234
-#, c-format
-msgid "Helix: turns=%ld length=%s grade=%0.1f%% sep=%s"
-msgstr "Helix: Kierroksia=%ld Pituus=%s Nousukulma=%0.1f%% Korkeusero=%s"
-
-#: ../bin/tcurve.c:240
-#, c-format
-msgid "Helix: turns=%ld length=%s"
-msgstr "Helix: Kierroksia=%ld Pituus=%s"
-
-#: ../bin/tcurve.c:357
-msgid "Angular Length"
-msgstr "Kulma"
-
-#: ../bin/tcurve.c:533
-#, c-format
-msgid ""
-"Helix Track(%d): Layer=%d Radius=%s Turns=%ld Length=%s Center=[%s,%s] EP="
-"[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A%0.3f]"
-msgstr ""
-"Helix(%d): Taso=%d Säde=%s Kierr.=%ld Pituus=%s Keskip.=[%s,%s] Päätep.="
-"[%0.3f,%0.3f K%0.3f] [%0.3f,%0.3f K%0.3f]"
-
-#: ../bin/tcurve.c:543
-#, c-format
-msgid ""
-"Curved Track(%d): Layer=%d Radius=%s Length=%s Center=[%s,%s] EP=[%0.3f,"
-"%0.3f A%0.3f] [%0.3f,%0.3f A%0.3f]"
-msgstr ""
-"Kaareva raideosa(%d): Taso=%d Säde=%s Pituus=%s Keskipiste=[%s,%s] Päätep.="
-"[%0.3f,%0.3f K%0.3f] [%0.3f,%0.3f K%0.3f]"
-
-#: ../bin/tcurve.c:620
-msgid "Helix Track"
-msgstr "Helix raide"
-
-#: ../bin/tcurve.c:626
-msgid "Curved Track"
-msgstr "Kaareva raideosa"
-
-#: ../bin/tcurve.c:980
-msgid "Merge Curves"
-msgstr "Yhdistä kaarteet"
-
-#: ../bin/tcurve.c:1047
-msgid "Drag to change angle or create tangent"
-msgstr "Raahaa muuttaaksesi kulmaa"
-
-#: ../bin/tcurve.c:1080 ../bin/tcurve.c:1112
-msgid "Curved "
-msgstr "Kaareva "
-
-#: ../bin/tcurve.c:1086
-msgid "Tangent "
-msgstr "Tangentti "
-
-#: ../bin/tcurve.c:1095
-#, c-format
-msgid "Tangent track: Length %s Angle %0.3f"
-msgstr "Tangentti raide: Pituus %s Kulma %0.3f"
-
-#: ../bin/tcurve.c:1117
-#, c-format
-msgid "Curved: Radius=%s Length=%s Angle=%0.3f"
-msgstr "Kaari: Säde=%s Pituus=%s Kulma=%0.3f"
-
-#: ../bin/tease.c:511
-msgid "l0"
-msgstr "l0"
-
-#: ../bin/tease.c:512
-msgid "l1"
-msgstr "l1"
-
-#: ../bin/tease.c:554
-#, c-format
-msgid ""
-"Joint Track(%d): Layer=%d Length=%0.3f EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A"
-"%0.3f]"
-msgstr ""
-"Yhdysraide(%d): Taso=%d Pituus=%0.3f Päätep.=[%0.3f,%0.3f K%0.3f] [%0.3f,"
-"%0.3f K%0.3f]"
-
-#: ../bin/tease.c:599
-msgid "Easement Track"
-msgstr "Kaarreloivennus"
-
-#: ../bin/tease.c:1265
-msgid "Merge Easements"
-msgstr "Yhdistä kaarreloivennukset"
-
-#: ../bin/tease.c:1330
-msgid "Split Easement Curve"
-msgstr "Pilko kaarreloivennus"
-
-#: ../bin/track.c:1112
-msgid "Move Objects Above"
-msgstr "Siirrä objekteja ylemmäs"
-
-#: ../bin/track.c:1132
-msgid "Mode Objects Below"
-msgstr "Siirrä objekteja alemmas"
-
-#: ../bin/track.c:1360
-msgid "Audit"
-msgstr "Tarkasta"
-
-#: ../bin/track.c:1634
-#, c-format
-msgid "%d Track(s) loosened"
-msgstr "%d raidetta irroitettu"
-
-#: ../bin/track.c:1641
-msgid "No tracks loosened"
-msgstr "Yhtään raidetta ei irroitettu"
-
-#: ../bin/track.c:1651 ../bin/track.c:1655
-#, c-format
-msgid "Connecting a non-track(%d) to (%d)"
-msgstr "Muun kuin raideosan (%d) yhdistäminen raiteeseen (%d)"
-
-#: ../bin/track.c:1716
-msgid "Join Abutting Tracks"
-msgstr "Yhdistä vastakkaiset raideosat"
-
-#: ../bin/track.c:1966 ../bin/tstraigh.c:556
-#, c-format
-msgid "Straight: Length=%s Angle=%0.3f"
-msgstr "Suora: Pituus=%s Kulma=%0.3f"
-
-#: ../bin/tstraigh.c:236
-#, c-format
-msgid ""
-"Straight Track(%d): Layer=%d Length=%s EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A"
-"%0.3f]"
-msgstr ""
-"Suora raideosa(%d): Taso=%d Pituus=%s Päätep.=[%0.3f,%0.3f K%0.3f] [%0.3f,"
-"%0.3f K%0.3f]"
-
-#: ../bin/tstraigh.c:470
-msgid "Extending Straight Track"
-msgstr "Jatketaan suoraa raidetta"
-
-#: ../bin/tstraigh.c:549
-msgid "Straight "
-msgstr "Suora "
-
-#: ../wlib/gtklib/filesel.c:114
-msgid "All files"
-msgstr ""
-
-#: ../wlib/gtklib/font.c:275
-msgid "Font Select"
-msgstr "Kirjasimen valinta"
-
-#: ../wlib/gtklib/help.c:68
-msgid "&Contents"
-msgstr "Sisältö"
-
-#: ../wlib/gtklib/ixhelp.c:243
-msgid "Home"
-msgstr "Aloitussivu"
-
-#: ../wlib/gtklib/ixhelp.c:247
-#, fuzzy
-msgid "Contents"
-msgstr "Sisältö"
-
-#: ../wlib/gtklib/menu.c:541
-msgid "<Empty List>"
-msgstr ""
-
-#: ../wlib/gtklib/notice.c:96 ../wlib/mswlib/mswmisc.c:1972
-#: ../wlib/mswlib/mswmisc.c:2015
-msgid "Warning"
-msgstr ""
-
-#: ../wlib/gtklib/notice.c:101 ../wlib/mswlib/mswmisc.c:1977
-msgid "Error"
-msgstr "Virhe"
-
-#: ../wlib/gtklib/text.c:286
-#, c-format
-msgid "%d of %d"
-msgstr ""
-
-#: ../wlib/gtklib/wpref.c:114
-#, c-format
-msgid ""
-"The required configuration files could not be located in the expected "
-"location.\n"
-"\n"
-"Usually this is an installation problem. Make sure that these files are "
-"installed in either \n"
-" %s/share/xtrkcad or\n"
-" /usr/lib/%s or\n"
-" /usr/local/lib/%s\n"
-"If this is not possible, the environment variable %s must contain the name "
-"of the correct directory."
-msgstr ""
-"Tarvittavia asetustiedostoja ei löydy oletetuista hakemistoista.\n"
-"\n"
-"Yleensä tämä johtuu virheellisestä asennuksesta. Varmista että nämä "
-"tiedostot on asennettu johonkin seuraavista hakemistoista:\n"
-" %s/share/xtrkcad\n"
-" /usr/lib/%s\n"
-" /usr/local/lib/%s\n"
-"Jos tämä ei ole mahdollista, täytyy ympäristömuuttujan %s sisältää oikean "
-"hakemiston nimi."
-
-#: ../wlib/gtklib/wpref.c:148 ../wlib/gtklib/wpref.c:193
-msgid "HOME is not set"
-msgstr "HOME ympäristömuuttujaa ei ole asetettu"
-
-#: ../wlib/gtklib/wpref.c:148 ../wlib/gtklib/wpref.c:157
-#: ../wlib/gtklib/wpref.c:193
-msgid "Exit"
-msgstr "Poistu"
-
-#: ../wlib/gtklib/wpref.c:156
-#, c-format
-msgid "Cannot create %s"
-msgstr "%s luonti ei onnistu."
-
-#: ../wlib/mswlib/mswmenu.c:884
-msgid "Ctrl+"
-msgstr ""
-
-#: ../wlib/mswlib/mswmenu.c:889
-msgid "Alt+"
-msgstr ""
-
-#: ../wlib/mswlib/mswmenu.c:894
-msgid "Shift+"
-msgstr ""
-
-#: ../wlib/mswlib/mswmenu.c:900
-#, fuzzy
-msgid "Space"
-msgstr "Väli"
-
-#: ../../../../build/work/app/help/messages.h:9
-#, c-format
-msgid ""
-"MSG_CANT_PLACE_FROGPOINTS\tFrog|Points cannot be placed on a turnout, circle "
-"or helix.\tA %s cannot be placed on a turnout, circle or helix."
-msgstr ""
-"MSG_CANT_PLACE_FROGPOINTS\tRieteyskappale|kielien päät ei voi olla "
-"ympyräradalla, helixissä tai palaraiteella\t%s ei voi olla ympyräradalla, "
-"helixissä tai palaraiteella."
-
-#: ../../../../build/work/app/help/messages.h:10
-#, fuzzy
-msgid ""
-"MSG_SEL_TRK_FROZEN\tA frozen layer contains selected track. Command cannot "
-"be executed."
-msgstr ""
-"MSG_SEL_TRK_FROZEN\tValittu raide on jäädytetyllä tasolla...\tValittu raide "
-"on jäädytetyllä tasolla.\n"
-"Komentoa ei voida suorittaa."
-
-#: ../../../../build/work/app/help/messages.h:11
-msgid "MSG_HELIX_TURNS_GTR_0\tA Helix must have one or more loops of track."
-msgstr "MSG_HELIX_TURNS_GTR_0\tHelixissä on oltava vähintään yksi ratakierros."
-
-#: ../../../../build/work/app/help/messages.h:12
-msgid ""
-"MSG_LARGE_FONT\tA large font has been selected....\tA large font has been "
-"selected.\n"
-"Large fonts may a take a while to load.\n"
-"\n"
-"Do you wish to continue?"
-msgstr ""
-"MSG_LARGE_FONT\tSuurikokoinen kirjasin valittu...\tSuurikokoinen kirjasin "
-"valittu.\n"
-"Suurien kirjasinten lataaminen saattaa kestää kauan.\n"
-"\n"
-"Haluatko jatkaa?"
-
-#: ../../../../build/work/app/help/messages.h:13
-msgid ""
-"MSG_TODSGN_DESC_NONBLANK\tAll description fields present in the Turnout..."
-"\tAll description fields present in the Turnout\n"
-"Designer must contain appropriate information.\n"
-"Correct inappropriate values and try again."
-msgstr ""
-"MSG_TODSGN_DESC_NONBLANK\tRaideosien Suunnittelu -dialogin kaikissa "
-"kentissä...\tRaideosien Suunnittelu -dialogin kaikissa kentissä\n"
-"on oltava asianmukaiset arvot.\n"
-"Korjaa arvot ja kokeile uudelleen."
-
-#: ../../../../build/work/app/help/messages.h:14
-msgid ""
-"MSG_GROUP_NONBLANK\tAll fields listed in the Group dialog must contain "
-"data....\tAll fields listed in the Group dialog must contain data.\n"
-"Please enter missing values and try again."
-msgstr ""
-"MSG_GROUP_NONBLANK\tKaikki kentät ryhmittelyikkunassa ovat pakollisia..."
-"\tKaikki kentät ryhmittelyikkunassa ovat pakollisia.\n"
-"Syötä puuttuvat arvot ja kokeile uudelleen."
-
-#: ../../../../build/work/app/help/messages.h:15
-msgid ""
-"MSG_TODSGN_VALUES_GTR_0\tAll values specified in the Turnout Designer must "
-"be...\tAll values specified in the Turnout Designer must be\n"
-"greater than 0. Correct inappropriate values and try again."
-msgstr ""
-"MSG_TODSGN_VALUES_GTR_0\tRaideosien Suunnittelussa annettujen arvojen..."
-"\tRaideosien Suunnittelussa annettujen arvojen on\n"
-"oltava suurempia kuin 0. Korjaa arvot ja yritä uudelleen."
-
-#: ../../../../build/work/app/help/messages.h:16
-#, fuzzy
-msgid "MSG_CURVE_OUT_OF_RANGE\tAngle must be between 0\\u00B0 and 360\\u00B0."
-msgstr "MSG_CURVE_OUT_OF_RANGE\tKulman täytyy olla 0° ja 360° välillä."
-
-#: ../../../../build/work/app/help/messages.h:17
-#, c-format
-msgid ""
-"MSG_CUSTMGM_DELETE_CONFIRM\tAre you sure you want to delete the NNN "
-"definition(s)?\tAre you sure you want to delete the\n"
-"%d definition(s)?"
-msgstr ""
-"MSG_CUSTMGM_DELETE_CONFIRM\tHaluatko varmasti poistaa NNN kohdetta?"
-"\tHaluatko varmasti poistaa %d kohdetta?"
-
-#: ../../../../build/work/app/help/messages.h:18
-msgid "MSG_WBITMAP_FAILED\tBitmap create or write function failed."
-msgstr "MSG_WBITMAP_FAILED\tBitmap kuvan luonti tai kirjoitus epäonnistui."
-
-#: ../../../../build/work/app/help/messages.h:19
-msgid "MSG_BITMAP_TOO_LARGE\tBitmap is too large."
-msgstr "MSG_BITMAP_TOO_LARGE\tBitmap on liian suuri."
-
-#: ../../../../build/work/app/help/messages.h:20
-msgid "MSG_CHANGE_ELEV_MODE\tCannot change elevation mode."
-msgstr "MSG_CHANGE_ELEV_MODE\tKorkeustason muutos ei onnistu."
-
-#: ../../../../build/work/app/help/messages.h:21
-msgid ""
-"MSG_GRID_ENABLE_SPACE_GTR_0\tCannot Enable Grid; spacing must be greater "
-"than 0"
-msgstr ""
-"MSG_GRID_ENABLE_SPACE_GTR_0\tVälin on oltava suurempi kuin 0, jos ruudukko "
-"on käytössä"
-
-#: ../../../../build/work/app/help/messages.h:22
-msgid "MSG_LAYER_FREEZE\tCannot freeze current layer"
-msgstr "MSG_LAYER_FREEZE\tAktiivista tasoa ei voi jäädyttää"
-
-#: ../../../../build/work/app/help/messages.h:23
-msgid ""
-"MSG_CANT_GROUP_BUMPER1\tCannot Group Bumper Track. The track has been "
-"unselected."
-msgstr ""
-"MSG_CANT_GROUP_BUMPER1\tPäätepuskinta ei voi liittää ryhmään. Raideosan "
-"valinta on poistettu."
-
-#: ../../../../build/work/app/help/messages.h:24
-msgid "MSG_CANNOT_GROUP_TRACK\tCannot Group selected track."
-msgstr "MSG_CANNOT_GROUP_TRACK\tValittua raideosaa ei voida ryhmitellä."
-
-#: ../../../../build/work/app/help/messages.h:25
-msgid "MSG_LAYER_HIDE\tCannot hide current layer"
-msgstr "MSG_LAYER_HIDE\tAktiivista tasoa ei voi piilottaa"
-
-#: ../../../../build/work/app/help/messages.h:26
-msgid "MSG_JOIN_EASEMENTS\tCannot Join; Easements do not align or abut."
-msgstr ""
-"MSG_JOIN_EASEMENTS\tEi voi yhdistää; Kaarreloivennukset eivät ole kohdakkain."
-
-#: ../../../../build/work/app/help/messages.h:27
-#, c-format
-msgid ""
-"MSG_TRK_ALREADY_CONN\tFirst|Second track is already connected.\tCannot Join; "
-"%s track is already connected."
-msgstr ""
-"MSG_TRK_ALREADY_CONN\tEnsimmäinen|Toinen raide on jo liitetty.\tEi voida "
-"liittää; %s raide on jo liitetty."
-
-#: ../../../../build/work/app/help/messages.h:28
-msgid "MSG_JOIN_TURNTABLE\tCannot join from a turntable, try to a turntable"
-msgstr ""
-"MSG_CANNOT_CHANGE\tKääntöpöydästä raiteeseen ei voi yhdistää. Kokeile "
-"raiteesta kääntöpöytään."
-
-#: ../../../../build/work/app/help/messages.h:29
-#, fuzzy
-msgid "MSG_JOIN_CORNU_SAME\tCannot Join; Selected endpoints are on same track."
-msgstr ""
-"MSG_JOIN_SAME\tEi voi liittää; valitut päätepisteet ovat samassa raideosassa."
-
-#: ../../../../build/work/app/help/messages.h:30
-msgid "MSG_JOIN_SAME\tCannot Join; Selected endpoints are on same track."
-msgstr ""
-"MSG_JOIN_SAME\tEi voi liittää; valitut päätepisteet ovat samassa raideosassa."
-
-#: ../../../../build/work/app/help/messages.h:31
-msgid ""
-"MSG_SELECTED_TRACKS_PARALLEL\tCannot Join; Selected tracks are parallel."
-msgstr ""
-"MSG_SELECTED_TRACKS_PARALLEL\tEi voida liittää; Valitut raiteet ovat "
-"samansuuntaiset."
-
-#: ../../../../build/work/app/help/messages.h:32
-#, c-format
-msgid ""
-"MSG_PRMFIL_OPEN_NEW\tCannot open New Parameter File: FILENAME\tCannot open "
-"New Parameter File: %s"
-msgstr ""
-"MSG_PRMFIL_OPEN_NEW\tUuden parametritiedoston TIEDOSTONIMI avaaminen ei "
-"onnistu\tUuden parametritiedoston %s avaaminen ei onnistu"
-
-#: ../../../../build/work/app/help/messages.h:33
-msgid "MSG_LAYER_SEL_FROZEN\tCannot select a frozen layer"
-msgstr "MSG_LAYER_SEL_FROZEN\tJäädytettyä tasoa ei voi valita"
-
-#: ../../../../build/work/app/help/messages.h:34
-msgid ""
-"MSG_GRID_SHOW_SPACE_GTR_0\tCannot Show Grid; spacing must be greater than 0"
-msgstr ""
-"MSG_GRID_SHOW_SPACE_GTR_0\tVälin on oltava suurempi kuin 0, jos ruudukko "
-"näytetään"
-
-#: ../../../../build/work/app/help/messages.h:35
-#, c-format
-msgid "MSG_CANT_SPLIT_TRK\tCannot split TYPE track\tCannot split %s track"
-msgstr "MSG_CANT_SPLIT_TRK\tRAIDETYYPPI: Ei voi pilkkoa\t%s: Ei voi pilkkoa"
-
-#: ../../../../build/work/app/help/messages.h:36
-#, c-format
-msgid ""
-"MSG_CUSTMGM_CANT_WRITE\tCannot write to parameter file: FILENAME\tCannot "
-"write to parameter file: %s"
-msgstr ""
-"MSG_CUSTMGM_CANT_WRITE\tEi voida kirjoittaa parametritiedostoon: TIEDOSTONIMI"
-"\tEi voida kirjoittaa parametritiedostoon: %s"
-
-#: ../../../../build/work/app/help/messages.h:37
-msgid "MSG_CARIMP_DUP_INDEX\tCar Index number duplicated."
-msgstr "MSG_CARIMP_DUP_INDEX\tKaksi samaa indeksiä löydetty."
-
-#: ../../../../build/work/app/help/messages.h:38
-msgid ""
-"MSG_CONN_PARAMS_TOO_SMALL\tConnection parameters reset to minimum values."
-msgstr ""
-"MSG_CONN_PARAMS_TOO_SMALL\tLiitosparametrit palautettu pienimpiin arvoihinsa."
-
-#: ../../../../build/work/app/help/messages.h:39
-msgid "MSG_CANT_PASTE\tCopy/Paste buffer is empty. There is nothing to Paste."
-msgstr ""
-"MSG_CANT_PASTE\tKopioi/liitä -puskuri on tyhjä. Ei ole mitään liitettävää."
-
-#: ../../../../build/work/app/help/messages.h:40
-msgid ""
-"MSG_TODSGN_CROSSOVER_TOO_SHORT\tCrossover length is too short. Correct..."
-"\tCrossover length is too short. Correct\n"
-"inappropriate value(s) and try again."
-msgstr ""
-"MSG_TODSGN_CROSSOVER_TOO_SHORT\tSovitettu raideristeys on liian lyhyt. "
-"Tarkasta...\tSovitettu raideristeys on liian lyhyt.\n"
-"Tarkasta arvot ja kokeile uudelleen."
-
-#: ../../../../build/work/app/help/messages.h:41
-msgid "MSG_CURVE_TOO_LARGE\tCurved track is too large."
-msgstr "MSG_CURVE_TOO_LARGE\tKaareva raide on liian suuri."
-
-#: ../../../../build/work/app/help/messages.h:42
-msgid ""
-"MSG_TODSGN_REPLACE\tDefinition name is already in use. Saving this..."
-"\tDefinition name is already in use. Saving this\n"
-"definition replaces the existing definition.\n"
-"\n"
-"Do you want to continue?"
-msgstr ""
-"MSG_TODSGN_REPLACE\tNimi on jo käytössä. Tallentamalla...\tNimi on jo "
-"käytössä. Tämän määrittelyn tallentaminen\n"
-"korvaa olemassa olevan saman nimisen määrittelyn.\n"
-"\n"
-"Haluatko jatkaa?"
-
-#: ../../../../build/work/app/help/messages.h:43
-msgid "MSG_SAVE_CHANGES\tDo you want to save the changes made to your Layout?"
-msgstr "MSG_SAVE_CHANGES\tHaluatko tallentaa ratasuunnitelman?"
-
-#: ../../../../build/work/app/help/messages.h:44
-msgid ""
-"MSG_CARIMP_DUP_COLUMNS\tDuplicate column headers found in Car Import file."
-msgstr ""
-"MSG_CARIMP_DUP_COLUMNS\tSama sarakeotsikko esiintyy useaan kertaan "
-"kalustotiedostossa."
-
-#: ../../../../build/work/app/help/messages.h:45
-msgid "MSG_EP_ON_PATH\tEndpoint already on Path."
-msgstr "MSG_EP_ON_PATH\tPäätepiste on jo reitillä."
-
-#: ../../../../build/work/app/help/messages.h:46
-#, c-format
-msgid ""
-"MSG_UPGRADE_VERSION1\tFile version %ld is greater than supported...\tFile "
-"version %ld is greater than supported\n"
-"version %d. You need to upgrade %s\n"
-"to at least version %s."
-msgstr ""
-"MSG_UPGRADE_VERSION1\tTiedoston versio %ld on suurempi kuin tuettu..."
-"\tTiedoston versio %ld on suurempi kuin tuettu versio %d\n"
-"%s täytyy päivittää vähintään versioon %s."
-
-#: ../../../../build/work/app/help/messages.h:47
-#, c-format
-msgid ""
-"MSG_UPGRADE_VERSION2\tFile version %ld is greater than supported...\tFile "
-"version %ld is greater than supported\n"
-"version %d. You need to upgrade your\n"
-"version of %s"
-msgstr ""
-"MSG_UPGRADE_VERSION2\tTiedoston versio %ld on suurempi kuin...\tTiedoston "
-"versio %ld on suurempi kuin tuettu versio %d.\n"
-"Versiosi %s:sta täytyy päivittää."
-
-#: ../../../../build/work/app/help/messages.h:48
-#, fuzzy
-msgid ""
-"MSG_MOVE_POINTS_OTHER_SIDE\tFrog angle prevents placement of points. Move "
-"points to opposite side of frog."
-msgstr ""
-"MSG_MOVE_POINTS_OTHER_SIDE\tVaihdekulma estää kielien päiden asettamisen..."
-"\tVaihdekulma estää kielien päiden asettamisen.\n"
-"Siirrä kielien päät risteyskappaleen toiselle puolelle."
-
-#: ../../../../build/work/app/help/messages.h:49
-msgid "MSG_NO_ROOM_BTW_TRKS\tInsufficient space between existing stall tracks."
-msgstr "MSG_NO_ROOM_BTW_TRKS\tRaiteiden välissä ei ole riittävästi tilaa."
-
-#: ../../../../build/work/app/help/messages.h:50
-#, c-format
-msgid ""
-"MSG_JOIN_DIFFER_ELEV\tJoining tracks with differing elevations (N."
-"NNN)\tJoining tracks with differing elevations (%0.2f)"
-msgstr ""
-"MSG_JOIN_DIFFER_ELEV\tEri korkeuksilla olevien raiteiden liitos (N.NN)\tEri "
-"korkeuksilla olevien raiteiden liitos (%0.2f)."
-
-#: ../../../../build/work/app/help/messages.h:51
-msgid "MSG_DESC_NOT_VISIBLE\tLabel descriptions not visible"
-msgstr "MSG_DESC_NOT_VISIBLE\tKuvaukset eivät ole näkyvissä"
-
-#: ../../../../build/work/app/help/messages.h:52
-msgid "MSG_OBJECT_TOO_SHORT\tLength of object is too short."
-msgstr "MSG_OBJECT_TOO_SHORT\tPituus on liian lyhyt."
-
-#: ../../../../build/work/app/help/messages.h:53
-#, c-format
-msgid ""
-"MSG_PRINT_MAX_SIZE\tMaximum allowed page size is W x H\tMaximum allowed page "
-"size is %s x %s"
-msgstr ""
-"MSG_PRINT_MAX_SIZE\tSivun maksimikoko on L x K.\tSivun maksimikoko on %s x "
-"%s."
-
-#: ../../../../build/work/app/help/messages.h:54
-#, c-format
-msgid ""
-"MSG_PRMFIL_NO_CONTENTS\tNew Parameter File has no CONTENTS line: FILENAME."
-"\tNew Parameter File has no CONTENTS line: %s"
-msgstr ""
-"MSG_PRMFIL_NO_CONTENTS\tUudessa parametritiedostossa ei ole CONTENTS riviä: "
-"TIEDOSTONIMI.\tUudessa parametritiedostossa ei ole CONTENTS riviä: %s"
-
-#: ../../../../build/work/app/help/messages.h:55
-msgid ""
-"MSG_NO_CARS\tNo Cars are defined for the current scale....\tNo Cars are "
-"defined for the current scale.\n"
-"\n"
-"Do you want to use the Car Inventory dialog?"
-msgstr ""
-"MSG_NO_CARS\tVaunuja tai vetureita ei ole määritelty tälle mittakaavalle..."
-"\tVaunuja tai vetureita ei ole määritelty tälle mittakaavalle.\n"
-"\n"
-"Haluatko avata kalustoluettelon?"
-
-#: ../../../../build/work/app/help/messages.h:56
-msgid ""
-"MSG_NO_CARPROTO\tNo Car Prototypes are defined....\tNo Car Prototypes are "
-"defined.\n"
-"Load a Prototype definition file using the\n"
-"Parameter Files dialog or create a Prototype\n"
-"definition using the Car Prototype dialog."
-msgstr ""
-"MSG_NO_CARPROTO\tEsikuvia ei ole määritelty...\tEsikuvia ei ole määritelty.\n"
-"Lataa esikuvien määrittely tiedosto Parametritiedostot -ikkunassa\n"
-"tai luo uusi esikuvan määrittely."
-
-#: ../../../../build/work/app/help/messages.h:57
-msgid "MSG_CARIMP_NO_DATA\tNo data present in Car Import file."
-msgstr "MSG_CARIMP_NO_DATA\tKalustotiedosto on tyhjä."
-
-#: ../../../../build/work/app/help/messages.h:58
-msgid "MSG_PRINT_NO_PAGES\tNo pages selected for printing."
-msgstr "MSG_PRINT_NO_PAGES\tYhtään sivua ei ole valittu tulostettavaksi."
-
-#: ../../../../build/work/app/help/messages.h:59
-msgid "MSG_NO_PATH_TO_EP\tNo path between Profile and selected endpoint."
-msgstr "MSG_NO_PATH_TO_EP\tValituun päätepisteeseen ei ole reittiä."
-
-#: ../../../../build/work/app/help/messages.h:60
-#, c-format
-msgid ""
-"MSG_PRMFIL_NO_MAP\tNo Parameter File Map for CONTENTS\tNo Parameter File Map "
-"for %s"
-msgstr ""
-"MSG_PRMFIL_NO_MAP\tParametritiedostolle \"NNN\" ei löydy \"Parameter File Map"
-"\" tietoa.\tParametritiedostolle \"%s\" ei löydy \"Parameter File Map\" "
-"tietoa."
-
-#: ../../../../build/work/app/help/messages.h:61
-msgid "MSG_NO_SELECTED_TRK\tNo track(s) selected!"
-msgstr "MSG_NO_SELECTED_TRK\tEi valittuja raiteita!"
-
-#: ../../../../build/work/app/help/messages.h:62
-#, c-format
-msgid ""
-"MSG_NO_TURNOUTS_AVAILABLE\tNo Turnouts|Structures are available.\tNo %s are "
-"available."
-msgstr ""
-"MSG_NO_TURNOUTS_AVAILABLE\tRaideosat|Rakennukset eivät ole saatavilla.\t%s "
-"eivät ole saatavilla."
-
-#: ../../../../build/work/app/help/messages.h:63
-msgid ""
-"MSG_CARDESC_VALUE_ZERO\tNumeric values on the Car Description...\tNumeric "
-"values on the Car Description\n"
-"dialog must be greater than 0."
-msgstr ""
-"MSG_CARDESC_VALUE_ZERO\tVaunun/veturin määrittelyn numeeristen arvojen..."
-"\tVaunun/veturin määrittelyn numeeristen arvojen täytyy olla suurempia kuin "
-"0."
-
-#: ../../../../build/work/app/help/messages.h:64
-msgid "MSG_MOVE_OUT_OF_BOUNDS\tObject has moved beyond room boundaries."
-msgstr ""
-"MSG_MOVE_OUT_OF_BOUNDS\tObjekti on siirretty huoneen rajojen ulkopuolelle."
-
-#: ../../../../build/work/app/help/messages.h:65
-msgid "MSG_PARALLEL_SEP_GTR_0\tParallel separation must be greater than 0."
-msgstr ""
-"MSG_PARALLEL_SEP_GTR_0\tRinnakkaisten raiteiden välin on oltava suurempi "
-"kuin 0."
-
-#: ../../../../build/work/app/help/messages.h:66
-msgid ""
-"MSG_CARPART_DUPNAME\tPart Number for this Manufacturer already exists...."
-"\tPart Number for this Manufacturer already exists.\n"
-"\n"
-"Do you want to update it?"
-msgstr ""
-"MSG_CARPART_DUPNAME\tTuotekoodi tälle valmistajalle on jo käytössä..."
-"\tTuotekoodi tälle valmistajalle on jo käytössä.\n"
-"\n"
-"Haluatko päivittää sen?"
-
-#: ../../../../build/work/app/help/messages.h:67
-#, c-format
-msgid ""
-"MSG_PLAYBACK_LISTENTRY\tPlayback: Cannot find list entry: NAME\tPlayback: "
-"Cannot find list entry: %s"
-msgstr ""
-"MSG_PLAYBACK_LISTENTRY\tMakrojen toisto: Luettelosta ei löydy: ...\tMakrojen "
-"toisto: Luettelosta ei löydy: %s"
-
-#: ../../../../build/work/app/help/messages.h:68
-#, c-format
-msgid ""
-"MSG_PLAYBACK_VERSION_UPGRADE\tPlayback file version %ld is...\tPlayback file "
-"version %ld is\n"
-"greater than supported version %d\n"
-"You need to upgrade your version of %s"
-msgstr ""
-"MSG_PLAYBACK_VERSION_UPGRADE\tMakro tiedoston versio %ld on...\tMakro "
-"tiedoston versio %ld on suurempi kuin tuettu versio %d\n"
-"Versiosi %s:sta täytyy päivittää."
-
-#: ../../../../build/work/app/help/messages.h:69
-#, c-format
-msgid ""
-"MSG_DOMOUSE_BAD_OP\tPlayback: unknown action NNN\tPlayback: unknown action %d"
-msgstr ""
-"MSG_DOMOUSE_BAD_OP\tToisto: tuntematon toimenpide NNN\tToisto: tuntematon "
-"toimenpide %d"
-
-#: ../../../../build/work/app/help/messages.h:70
-msgid "MSG_MOVE_POINTS_AWAY_CLOSE\tPoints are to close to frog; move away."
-msgstr ""
-"MSG_MOVE_POINTS_AWAY_CLOSE\tKielten päät ovat liian lähellä "
-"risteyskappaletta; siirrä kauemmaksi."
-
-#: ../../../../build/work/app/help/messages.h:71
-msgid "MSG_POLY_SHAPES_3_SIDES\tPoly shapes must have at least 3 sides."
-msgstr "MSG_POLY_SHAPES_3_SIDES\tMonikulmiossa on oltava vähintään 3 sivua."
-
-#: ../../../../build/work/app/help/messages.h:72
-msgid ""
-"MSG_CARPROTO_DUPNAME\tPrototype name already exists....\tPrototype name "
-"already exists.\n"
-"\n"
-"Do you want to update it?"
-msgstr ""
-"MSG_CARPROTO_DUPNAME\tSaman niminen esikuva on jo olemassa...\tSaman niminen "
-"esikuva on jo olemassa.\n"
-"\n"
-"Haluatko päivittää sen?"
-
-#: ../../../../build/work/app/help/messages.h:73
-msgid "MSG_RADIUS_GTR_0\tRadius must be greater than 0."
-msgstr "MSG_RADIUS_GTR_0\tSäteen on oltava suurempi kuin 0."
-
-#: ../../../../build/work/app/help/messages.h:74
-#, c-format
-msgid ""
-"MSG_RESCALE_TOO_BIG\tRescaled tracks do not fit within layouts room "
-"parameters...\tRescaled tracks do not fit within layouts room parameters\n"
-"(Height and width). The layouts room parameters should be\n"
-"set to at least %s by %s."
-msgstr ""
-"MSG_RESCALE_TOO_BIG\tSkaalatut raiteet eivät mahdu ratasuunnitelmassa..."
-"\tSkaalatut raiteet eivät mahdu ratasuunnitelmassa\n"
-"määritellyn huoneen rajojen sisäpuolelle. Huoneen koon\n"
-"pitäisi olla vähintään %s x %s (korkeus x leveys)."
-
-#: ../../../../build/work/app/help/messages.h:75
-msgid ""
-"MSG_CARIMP_MISSING_COLUMNS\tRequired column headers missing from Car Import "
-"file."
-msgstr ""
-"MSG_CARIMP_MISSING_COLUMNS\tKalustotiedostosta puuttuu tarpeellisia "
-"sarakkeiden otsikoita."
-
-#: ../../../../build/work/app/help/messages.h:76
-#, c-format
-msgid ""
-"MSG_2ND_TRK_NOT_SEL_UNSEL\tSecond track must be selected|unselected\tSecond "
-"track must be %s."
-msgstr ""
-"MSG_2ND_TRK_NOT_SEL_UNSEL\tToisen raiteen on oltava valittu|valitsematta"
-"\tToisen raiteen on oltava %s."
-
-#: ../../../../build/work/app/help/messages.h:77
-msgid "MSG_OUT_OF_BOUNDS\tSelected page is out of bounds."
-msgstr "MSG_OUT_OF_BOUNDS\tSivu ylittää rajat."
-
-#: ../../../../build/work/app/help/messages.h:78
-msgid "MSG_SEL_POS_FIRST\tSelect position prior to entering Text."
-msgstr "MSG_SEL_POS_FIRST\tValitse sijainti ennen tekstin syöttämistä."
-
-#: ../../../../build/work/app/help/messages.h:79
-msgid ""
-"MSG_CARPROTO_BADSEGS\tSelected shapes must define a rectangular area ..."
-"\tSelected shapes must define a rectangular\n"
-"area with length greater than height."
-msgstr ""
-"MSG_CARPROTO_BADSEGS\tValittujen muotojen on määriteltävä nelikulmio..."
-"\tValittujen muotojen on määriteltävä nelikulmio,\n"
-"jonka pituus on korkeutta suurempi."
-
-#: ../../../../build/work/app/help/messages.h:80
-#, fuzzy
-msgid ""
-"MSG_TOO_FAR_APART_DIVERGE\tSelected tracks deviate too much or are too far "
-"apart from each other."
-msgstr ""
-"MSG_TOO_FAR_APART_DIVERGE\tValitut raiteet poikkeavat liikaa...\tValitut "
-"raiteet poikkeavat liikaa toisistaan\n"
-"tai ovat liian kaukana toisistaan."
-
-#: ../../../../build/work/app/help/messages.h:81
-msgid "MSG_COMMAND_DISABLED\tSpecified command disabled."
-msgstr "MSG_COMMAND_DISABLED\tTämä komento ei ole käytössä."
-
-#: ../../../../build/work/app/help/messages.h:82
-msgid "MSG_SPLIT_POS_BTW_MERGEPTS\tSplit position between Turnout Points"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:83
-msgid "MSG_SPLIT_PATH_NOT_UNIQUE\tSplit position not on unique path"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:84
-#, c-format
-msgid ""
-"MSG_CARIMP_MISSING_DIMS\tThe following car has no dimensions and a...\tThe "
-"following car has no dimensions and a\n"
-"Car Part description can not be found.\n"
-"\n"
-"%s\n"
-"\n"
-"Do you wish to continue importing other Cars?"
-msgstr ""
-"MSG_CARIMP_MISSING_DIMS\tVaunun tai veturin mitat ja kuvaus puuttuvat..."
-"\tVaunun tai veturin mitat ja kuvaus puuttuvat:\n"
-"\n"
-"%s\n"
-"\n"
-"Haluatko jatkaa muiden vaunujen ja veturien tuontia tiedostosta?"
-
-#: ../../../../build/work/app/help/messages.h:85
-#, c-format
-msgid ""
-"MSG_CARIMP_MISSING_PARTNO\tThe following car has no Part Number...\tThe "
-"following car has no Part Number\n"
-"\n"
-"%s\n"
-"\n"
-"Do you wish to continue importing other Cars?"
-msgstr ""
-"MSG_CARIMP_MISSING_PARTNO\tVaunun tai veturin tuotenumero puuttuu...\tVaunun "
-"tai veturin tuotenumero puuttuu:\n"
-"\n"
-"%s\n"
-"\n"
-"Haluatko jatkaa muiden vaunujen ja veturien tuontia tiedostosta?"
-
-#: ../../../../build/work/app/help/messages.h:86
-#, c-format
-msgid ""
-"MSG_CARIMP_IGNORED_COLUMN\tThe following column in the Car Import file will "
-"be ignored:...\tThe following column in the Car Import file will be "
-"ignored:\n"
-"\n"
-"%s"
-msgstr ""
-"MSG_CARIMP_IGNORED_COLUMN\tSeuraava kalustotiedoston sarake jätetään "
-"huomiotta:...\tSeuraava kalustotiedoston sarake jätetään huomiotta:\n"
-"\n"
-"%s"
-
-#: ../../../../build/work/app/help/messages.h:87
-#, fuzzy
-msgid ""
-"MSG_CANT_MOVE_UNDER_TRAIN\tThe position of a turnout or turntable cannot be "
-"changed while occupied by a train."
-msgstr ""
-"MSG_CANT_MOVE_UNDER_TRAIN\tVaihteita tai kääntöpöytää ei voi kääntää..."
-"\tVaihteita tai kääntöpöytää ei voi kääntää junan ollessa päällä."
-
-#: ../../../../build/work/app/help/messages.h:88
-msgid ""
-"MSG_STRUCT_NO_STRUCTS\tThere are no structures to choose from in the "
-"structure...\tThere are no structures to choose from in the structure\n"
-"selection list. Please check your SCALE, select the\n"
-"<File|Parameter Files> menu to load a Parameter File or\n"
-"create a new Structure with the Group command."
-msgstr ""
-"MSG_STRUCT_NO_STRUCTS\tRakennusten valintaluettelossa ei ole yhtään..."
-"\tRakennusten valintaluettelossa ei ole yhtään rakennusta\n"
-"valittavissa. Tarkasta mittakaava, valitse\n"
-"<Tiedosto|Parametritiedostot> valikosta ladataksesi\n"
-"parametritiedostoja tai luo uusi rakennus Ryhmittele komennolla."
-
-#: ../../../../build/work/app/help/messages.h:89
-#, fuzzy
-msgid ""
-"MSG_TURNOUT_NO_TURNOUT\tThere are no turnouts to choose from in the "
-"turnout...\tThere are no turnouts to choose from in the turnout\n"
-"selection list. Please check your SCALE, select the\n"
-"<Manage|Turnout Designer> menu to enter a new turnout\n"
-"or select the <File|Parameter Files> menu to load a\n"
-"Parameter File"
-msgstr ""
-"MSG_TURNOUT_NO_TURNOUT\tRaideosien valintaluettelossa ei ole yhtään..."
-"\tRaideosien valintaluettelossa ei ole yhtään raideosaa\n"
-"valittavissa. Tarkasta mittakaava, valitse\n"
-"<Muokkaa|Raideosien suunnittelu> valikko lisätäksesi uusi raideosa\n"
-"tai valitse <Tiedosto|Parametritiedostot> valikko ladataksesi\n"
-"parametritiedoston."
-
-#: ../../../../build/work/app/help/messages.h:90
-msgid "MSG_NO_UNCONN_EP\tThere are no unconnected end points for this track"
-msgstr "MSG_NO_UNCONN_EP\tRaiteessa ei ole liittämättömiä päätepisteitä"
-
-#: ../../../../build/work/app/help/messages.h:91
-msgid "MSG_PULL_FEW_SECTIONS\tThere are too few sections in this loop."
-msgstr ""
-"MSG_PULL_FEW_SECTIONS\tSilmukassa tai sivuraiteessa on liian vähän raideosia."
-
-#: ../../../../build/work/app/help/messages.h:92
-msgid "MSG_NO_REDO\tThere is nothing to redo!"
-msgstr "MSG_NO_REDO\tEi ole mitään uudelleen tehtävää!"
-
-#: ../../../../build/work/app/help/messages.h:93
-msgid "MSG_NO_UNDO\tThere is nothing to undo!"
-msgstr "MSG_NO_UNDO\tEi ole mitään kumottavaa!"
-
-#: ../../../../build/work/app/help/messages.h:94
-msgid "MSG_TOOMANYSEGSINGROUP\tToo many segments in Group."
-msgstr "MSG_TOOMANYSEGSINGROUP\tRyhmässä on liian monta lohkoa."
-
-#: ../../../../build/work/app/help/messages.h:95
-msgid "MSG_CANNOT_CHANGE\tTrack cannot be changed."
-msgstr "MSG_CANNOT_CHANGE\tRaidetta ei voi muuttaa."
-
-#: ../../../../build/work/app/help/messages.h:96
-msgid "MSG_POINT_INSIDE_TURNTABLE\tTrack endpoint is within turntable radius."
-msgstr ""
-"MSG_POINT_INSIDE_TURNTABLE\tRaiteen päätepiste on kääntöpöydän säteen "
-"sisäpuolella."
-
-#: ../../../../build/work/app/help/messages.h:97
-msgid ""
-"MSG_MOVE_POINTS_AWAY_NO_INTERSECTION\tTrack intersection not possible; move "
-"points away from frog."
-msgstr ""
-"MSG_MOVE_POINTS_AWAY_NO_INTERSECTION\tRaiteet eivät kohtaa. Siirrä kielten "
-"päät kauemmaksi risteyskappaleesta."
-
-#: ../../../../build/work/app/help/messages.h:98
-#, c-format
-msgid ""
-"MSG_TRK_TOO_SHORT\tTrack is too short by N.NNN\t%strack is too short by %0.3f"
-msgstr ""
-"MSG_TRK_TOO_SHORT\tRaide on N.NNN liian lyhyt\t%sraide on %0.3f liian lyhyt"
-
-#: ../../../../build/work/app/help/messages.h:99
-#, fuzzy, c-format
-msgid ""
-"MSG_RADIUS_LSS_EASE_MIN\tTrack radius (N.NNN) is smaller than easement "
-"minimum (N.NNN).\tTrack radius (%s) is smaller than easement minimum (%s)."
-msgstr ""
-"MSG_RADIUS_LSS_EASE_MIN\tRaiteen säde (N.NNN) on pienempi kuin "
-"kaarreloivennuksen pienin sallittu säde (N.NNN).\tRaiteen säde (%s) on "
-"pienempi kuin kaarreloivennuksen pienin sallittu säde (%s)."
-
-#: ../../../../build/work/app/help/messages.h:100
-msgid ""
-"MSG_CANT_MODIFY_FROZEN_TRK\tTracks in a frozen layer cannot be modified."
-msgstr ""
-"MSG_CANT_MODIFY_FROZEN_TRK\tJäädytetyllä tasolla olevia raiteita ei voi "
-"muokata."
-
-#: ../../../../build/work/app/help/messages.h:101
-msgid ""
-"MSG_SEGMENTS_DIFFER\tTurnout definition contains non-track segments...."
-"\tTurnout definition contains non-track segments.\n"
-"\n"
-"Do you want to include them in this update?"
-msgstr ""
-"MSG_SEGMENTS_DIFFER\tRaideosan määrittelyssä on osia, jotka eivät ole "
-"raiteita...\tRaideosan määrittelyssä on osia, jotka eivät ole raiteita.\n"
-"\n"
-"Haluatko sisällyttää ne?"
-
-#: ../../../../build/work/app/help/messages.h:102
-msgid "MSG_TURNTABLE_DIAM_GTR_0\tTurntable diameter must greater than 0."
-msgstr ""
-"MSG_TURNTABLE_DIAM_GTR_0\tKääntöpöydän halkaisijan on oltava suurempi kuin 0."
-
-#: ../../../../build/work/app/help/messages.h:103
-#, c-format
-msgid ""
-"MSG_UNDO_ASSERT\tUndo assertion failure %s:%d...\tUndo assertion failure %s:"
-"%d\n"
-"Val = %ld(%lx)\n"
-"%s\n"
-"Please report this error to the XTrackCAD project development team at "
-"SourceForge."
-msgstr ""
-"MSG_UNDO_ASSERT\tVirhe kumottaessa edellinen toiminto (%s:%d)...\tVirhe "
-"kumottaessa edellinen toiminto (%s:%d)\n"
-"Arvo = %ld(%lx)\n"
-"%s\n"
-"Ole ystävällinen ja ilmoita tästä virheestä XTrackCAD projektin "
-"kehitysryhmälle SourceForge.net:ssä."
-
-#: ../../../../build/work/app/help/messages.h:104
-#, fuzzy, c-format
-msgid ""
-"MSG_PROG_CORRUPTED\tCritical file damaged!...\tCritical file damaged!\n"
-"\n"
-"%s is corrupt.\n"
-"\n"
-"Please reinstall software."
-msgstr ""
-"MSG_PROG_CORRUPTED\tKriittinen tiedosto on vaurioitunut!...\tKriittinen "
-"tiedosto on vaurioitunut!\n"
-"\n"
-"%s on korruptoitunut.\n"
-"\n"
-"Asenna ohjelmisto uudelleen."
-
-#: ../../../../build/work/app/help/messages.h:105
-#, c-format
-msgid "MSG_PT_IS_NOT_TRK\t[X Y] is not a track\t[%s %s] is not a track."
-msgstr "MSG_PT_IS_NOT_TRK\t[X Y] ei ole raide\t[%s %s] ei ole raide."
-
-#: ../../../../build/work/app/help/messages.h:106
-msgid ""
-"MSG_BITMAP_SIZE_WARNING\tYou have specified a large Bitmap....\tYou have "
-"specified a large Bitmap.\n"
-"\n"
-"Are you sure you want to continue?"
-msgstr ""
-"MSG_BITMAP_SIZE_WARNING\tOlet määritellyt suuren Bitmap kuvan...\tOlet "
-"määritellyt suuren Bitmap kuvan.\n"
-"\n"
-"Haluatko varmasti jatkaa?"
-
-#: ../../../../build/work/app/help/messages.h:107
-#, c-format
-msgid "Are you sure you want to delete these %d car(s)?"
-msgstr "Haluatko varmasti poistaa nämä %d vaunua/veturia?"
-
-#: ../../../../build/work/app/help/messages.h:108
-#, c-format
-msgid ""
-"Cannot open %s file:\n"
-"%s:%s"
-msgstr ""
-"Tiedostoa %s ei voida avata:\n"
-"%s: %s"
-
-#: ../../../../build/work/app/help/messages.h:109
-#, c-format
-msgid "Unrecognized Option: %s"
-msgstr "Tunnistamaton valinta: %s"
-
-#: ../../../../build/work/app/help/messages.h:110
-#, c-format
-msgid ""
-"End-Of-Line is unexpected in a quoted field.\n"
-"%s\n"
-"\n"
-"Do you want to continue reading the file?"
-msgstr ""
-"Odottamaton rivin loppu lainausmerkkien sisällä.\n"
-"%s\n"
-"\n"
-"Haluatko jatkaa tiedoston lukemista?"
-
-#: ../../../../build/work/app/help/messages.h:111
-#, c-format
-msgid ""
-"A comma was expected after this quoted field.\n"
-"%s\n"
-"\n"
-"Do you want to continue reading the file?"
-msgstr ""
-"Odotettiin pilkkua tämän kentän jälkeen.\n"
-"%s\n"
-"\n"
-"Haluatko jatkaa tiedoston lukemista?"
-
-#: ../../../../build/work/app/help/messages.h:112
-#, c-format
-msgid ""
-"Error \\\\\"%s\\\\\" occurred while writing %s.\n"
-"Please check disk space and system status."
-msgstr ""
-"Virhe \\\\\"%s\\\\\" tapahtui kirjoitettaessa %s.\n"
-"Tarkasta levytila ja järjestelmän tila."
-
-#: ../../../../build/work/app/help/messages.h:113
-#, fuzzy, c-format
-msgid ""
-"At least one path for the Turnout T%d does not\n"
-"terminate on an endpoint. Such a track cannot be grouped.\n"
-"The track has been unselected."
-msgstr ""
-"Ainakin yksi raideosan T%d reiteistä loppuu muuhun kuin\n"
-"päätepisteeseen. Tällaista raideosaa ei voi ryhmitellä.\n"
-"Raideosan valinta on poistettu."
-
-#: ../../../../build/work/app/help/messages.h:114
-msgid "inv-pathEndTrk on Path."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:115
-msgid "inv-pathStartTrk on Path"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:116
-#, c-format
-msgid "%s:%d- %s"
-msgstr "%s:%d- %s"
-
-#: ../../../../build/work/app/help/messages.h:117
-msgid "pathEndTrk not on Path."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:118
-msgid "pathStartTrk not on Path."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:119
-msgid ""
-"The tracks cannot be connected together.\n"
-"\n"
-"Try changing some tracks for a closer fit\n"
-"or increase the Connection Angle value on\n"
-"the Preferences dialog."
-msgstr ""
-"Raiteita ei voi yhdistää.\n"
-"\n"
-"Kokeile sovittaa raiteet paremmin keskenään\n"
-" tai kasvata liitoskulmaa ohjelman ominaisuuksista."
-
-#: ../../../../build/work/app/help/messages.h:120
-msgid ""
-"The tracks cannot be connected together.\n"
-"\n"
-"Try changing some tracks for a closer fit\n"
-"or increase the Connection Distance and\n"
-"Angle values on the Preferences dialog"
-msgstr ""
-"Raiteita ei voi yhdistää.\n"
-"\n"
-"Kokeile sovittaa raiteet paremmin keskenään\n"
-" tai kasvata liitoskulmaa ja liitosetäisyyttä ohjelman ominaisuuksista."
-
-#: ../../../../build/work/app/help/messages.h:121
-msgid ""
-"The tracks cannot be connected together.\n"
-"\n"
-"Try changing some tracks for a closer fit\n"
-"or increase the Connection Distance"
-msgstr ""
-"Raiteita ei voi yhdistää.\n"
-"\n"
-"Kokeile sovittaa raiteet paremmin keskenään\n"
-" tai kasvata liitosetäisyyttä ohjelman ominaisuuksista."
-
-#: ../../../../build/work/app/help/messages.h:122
-msgid ""
-"The first track for the Align\n"
-"Rotate command must be Selected."
-msgstr ""
-"Kohdistuskomennon ensimmäisen\n"
-"raideosan on oltava valittuna."
-
-#: ../../../../build/work/app/help/messages.h:123
-msgid ""
-"The second track for the Align\n"
-"Rotate command must be Unselected."
-msgstr ""
-"Kohdistuskomennon toisen raideosan\n"
-"on oltava valitsematon."
-
-#: ../../../../build/work/app/help/messages.h:124
-msgid "Too many selected tracks, drawing tracks as End Point."
-msgstr ""
-"Liian monta valittua raidetta. Piirretään raiteet pelkkinä päätepisteinä."
-
-#: ../../../../build/work/app/help/messages.h:125
-msgid "Select an endpoint between two tracks."
-msgstr "Valitse kahden raideosan välinen päätepiste."
-
-#: ../../../../build/work/app/help/messages.h:126
-msgid ""
-"According to values that have been entered the diverging\n"
-"track does not connect with the tangent track. Please\n"
-"check the values entered and try again. Check the angle\n"
-"is entered as a frog number or in degrees as specified\n"
-"by Angle Mode radio buttons."
-msgstr ""
-"Antamiesi arvojen perusteella, poikkeava ja suora\n"
-"raide eivät kohtaa.\n"
-"Tarkasta arvot ja kokeile uudelleen.\n"
-"Tarkasta myös onko kulma annettu risteysnumerona vai asteina."
-
-#: ../../../../build/work/app/help/messages.h:127
-msgid "Moved before the end of the turnout"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:128
-msgid ""
-"The Coupled Length must be greater than the Car Length,\n"
-"and the Coupler Length must be greater than 0."
-msgstr ""
-"Pituuden kytkimineen on oltava suurempi kuin vaunun/veturin pituus,\n"
-"ja kytkimen pituuden on oltava suurempi kuin 0."
-
-#: ../../../../build/work/app/help/messages.h:129
-msgid ""
-"The Car Length value must be greater\n"
-"than the Car Width value."
-msgstr "Pituuden on oltava leveyttä suurempi."
-
-#: ../../../../build/work/app/help/messages.h:130
-msgid ""
-"The specified Index is already in use.\n"
-"The Index will be updated to the next available value."
-msgstr ""
-"Määritelty indeksi on jo käytössä.\n"
-"Indeksi muutetaan seuraavaksi vapaaksi arvoksi."
-
-#: ../../../../build/work/app/help/messages.h:131
-msgid ""
-"You have changed values for this object.\n"
-"\n"
-"Are you sure you want to Close?"
-msgstr ""
-"Olet muuttanut tämän objektin arvoja.\n"
-"\n"
-"Haluatko varmasti sulkea?"
-
-#: ../../../../build/work/app/help/messages.h:132
-#, c-format
-msgid ""
-"File version %ld is lower than the minimum\n"
-"supported version %d. You need to update your\n"
-"layout file using an older version of %s"
-msgstr ""
-"Tiedoston versio %ld on pienempi kuin pienin tuettu versio %d\n"
-"Ratasuunnitelmasi täytyy päivittää käyttäen vanhempaa versiota %s:sta."
-
-#: ../../../../build/work/app/help/messages.h:133
-#, c-format
-msgid ""
-"%s cannot read the demo file:\n"
-"%s"
-msgstr ""
-"%s ei voi lukea demotiedostoa:\n"
-"%s"
-
-#: ../../../../build/work/app/help/messages.h:134
-#, c-format
-msgid "doDemo: bad number (%d)"
-msgstr "Demo: Virheellinen demon numero (%d)."
-
-#: ../../../../build/work/app/help/messages.h:135
-msgid "Playback TIMEEND without TIMESTART"
-msgstr "Toistossa TIMEEND ilman TIMESTART:ia"
-
-#: ../../../../build/work/app/help/messages.h:136
-#, c-format
-msgid ""
-"Unknown playback command (%d)\n"
-"%s"
-msgstr ""
-"Tuntematon toistokomento (%d)\n"
-"%s"
-
-#: ../../../../build/work/app/help/messages.h:137
-#, c-format
-msgid ""
-"Playback file version %ld is lower than the\n"
-"minimum supported version %d.\n"
-"You need to update your layout file using an\n"
-"older version of %s"
-msgstr ""
-"Tiedoston versio %ld on pienempi kuin pienin tuettu versio %d\n"
-"Ratasuunnitelmasi täytyy päivittää käyttäen vanhempaa versiota %s:sta."
-
-#: ../../../../build/work/app/help/messages.h:138
-#, c-format
-msgid "Scale index (%d) is not valid"
-msgstr "Mittakaavan indeksi (%d) on virheellinen."
-
-#: ../../../../build/work/app/help/messages.h:139
-#, c-format
-msgid ""
-"Scale %s is not valid\n"
-"Please check your %s.xtq file"
-msgstr ""
-"Mittakaava %s ei ole kelvollinen\n"
-"Tarkasta %s.xtq tiedostosi"
-
-#: ../../../../build/work/app/help/messages.h:140
-msgid "Cannot extend a helix"
-msgstr "Helixiä ei voida jatkaa"
-
-#: ../../../../build/work/app/help/messages.h:141
-msgid "Cannot trim a helix"
-msgstr "Helixiä ei voida lyhentää"
-
-#: ../../../../build/work/app/help/messages.h:142
-msgid "Ignore further audit notices?"
-msgstr "Sivuuta tarkastus huomautukset jatkossa?"
-
-#: ../../../../build/work/app/help/messages.h:143
-#, c-format
-msgid "%s"
-msgstr "%s"
-
-#: ../../../../build/work/app/help/messages.h:144
-msgid "Audit Abort?"
-msgstr "Keskeytä tarkastus?"
-
-#: ../../../../build/work/app/help/messages.h:145
-msgid "Write Audit File?"
-msgstr "Kirjoita tarkastustiedosto?"
-
-#: ../../../../build/work/app/help/messages.h:146
-#, c-format
-msgid "checkTrackLength: Short track length = %0.3f"
-msgstr "Raideosan pituuden tarkistus: Pienin raideosan pituus = %0.3f"
-
-#: ../../../../build/work/app/help/messages.h:147
-#, c-format
-msgid "checkTrackLength: unknown type: %d"
-msgstr "Raideosan pituuden tarkistus: Tuntematon tyyppi: %d"
-
-#: ../../../../build/work/app/help/messages.h:148
-#, c-format
-msgid "connectTracks: T%d[%d] T%d[%d] d=%0.3f a=%0.3f"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:149
-#, c-format
-msgid "GetAngleAtPoint: bad type(%d) for T(%d)"
-msgstr "GetAngleAtPoint: virheellinen tyyppi (%d) raitelle T(%d)"
-
-#: ../../../../build/work/app/help/messages.h:150
-#, c-format
-msgid "joinTracks: invalid track type=%d"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:151
-#, c-format
-msgid "resolveIndex: T%d[%d]: T%d doesn\\\\'t exist"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:152
-msgid "Moved beyond the end of the track"
-msgstr "Siirretty päätepisteen taakse"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:10
-msgid "Invokes on-line help for this dialog"
-msgstr "Avaa tämän dialogin ohjeen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:11
-msgid "Cancels this command"
-msgstr "Kumoaa edellisen komennon"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:12
-msgid "Closes the dialog"
-msgstr "Sulkee ikkunan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:13
-msgid "About box dialog"
-msgstr "Tietoja -ikkuna"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:14
-msgid "Move Selected object to top"
-msgstr "Siirrä valittu objekti päällimmäiseksi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:15
-msgid "Raise or Lower all Selected tracks"
-msgstr "Nosta tai laske valittuja raiteita"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:16
-msgid "Move Selected object to bottom"
-msgstr "Siirrä valittu objekti alimmaiseksi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:17
-msgid "Create a section of track for automation"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:18
-msgid "Edit a Block Definition "
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:19
-msgid "Create a new Car/Loco description"
-msgstr "Luo uusi veturin tai vaunun määrittely"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:20
-msgid "Manage your Car and Loco Inventory"
-msgstr "Hallinnoi vaunu- ja veturiluetteloa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:21
-msgid "Create track circle from center"
-msgstr "Piirrä ympyrärata keskipisteestä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:22
-msgid "Create fixed radius track circle"
-msgstr "Määriteltysäteinen ympyrärata"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:23
-msgid "Set Circle Track creation mode"
-msgstr "Aseta ympyräradan luonti komento"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:24
-msgid "Create track circle from tangent"
-msgstr "Piirrä ympyrärata kehältä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:25
-msgid "Removes elevation from Selected tracks"
-msgstr "Poista korkeusmääritykset valituista raiteista"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:26
-msgid "Command Options dialog"
-msgstr "Komentojen asetukset"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:27
-msgid "Controls colors"
-msgstr "Valitse värit"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:28
-msgid "Connect two tracks"
-msgstr "Liitä kaksi raidetta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:29
-msgid "Create a control for layout automation"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:30
-msgid "Manage control elements"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:31
-msgid "Copy selected objects to clipboard"
-msgstr "Kopioi valitut objektit leikepöydälle"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:32
-msgid "Create curved track from center"
-msgstr "Luo kaareva raideosa alkaen keskipisteestä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:33
-msgid "Create curved track from chord"
-msgstr "Luo kaareva raideosa päätepisteiden välille"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:34
-msgid "Create curved track from end-point"
-msgstr "Luo kaareva raideosa alkaen päätepisteestä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:35
-#, fuzzy
-msgid "Create Bezier track"
-msgstr "Luo helix raide"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:36
-msgid "Set Curve Track creation mode"
-msgstr "Aseta kaarevan raiteen luonti komento"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:37
-msgid "Create curved track from tangent"
-msgstr "Luo kaareva raideosa alkaen kehältä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:38
-msgid "Manipulate Custom designer entries"
-msgstr "Itse määriteltyjen raideosien, veturien ja vaunujen hallinta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:39
-msgid "Moves selected objects to clipboard"
-msgstr "Siirtää valitut objektit leikepöydälle"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:40
-msgid "Delete objects"
-msgstr "Poista valitut objektit"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:41
-msgid "Playback demos"
-msgstr "Toista nauhoitettuja demoja"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:42
-msgid "Change Object Properties"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:43
-msgid "Deselect all selected objects"
-msgstr "Poista valinnat kaikista objekteista"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:44
-msgid "Change Display parameters"
-msgstr "Muuta näyttöasetuksia"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:45
-msgid "Create benchwork"
-msgstr "Luo runkorakenne"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:46
-msgid "Create a box"
-msgstr "Luo nelikulmio"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:47
-msgid "Set Circle drawing command"
-msgstr "Aseta ympyrän piirto komento"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:48
-msgid "Create a circle"
-msgstr "Luo ympyrä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:49
-msgid "Draw a circle line from center"
-msgstr "Piirrä ympyrä keskipisteestä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:50
-msgid "Draw a fixed radius circle line"
-msgstr "Piirrä määriteltysäteinen ympyrä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:51
-msgid "Draw a circle line from tangent"
-msgstr "Piirrä ympyrä kehältä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:52
-msgid "Set Curve drawing command"
-msgstr "Aseta kaaren piirto komento"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:53
-msgid "Create a curved line"
-msgstr "Luo kaari"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:54
-msgid "Create a curved line from End"
-msgstr "Piirrä kaari päätepisteestä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:55
-msgid "Create a curved line from center"
-msgstr "Piirrä kaari keskipisteestä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:56
-msgid "Create a curved line from chord"
-msgstr "Piirrä kaari·päätepisteiden·välille"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:57
-msgid "Create a curved line from tangent"
-msgstr "Piirrä kaari kehältä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:58
-#, fuzzy
-msgid "Create a Bezier line"
-msgstr "Luo kaari"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:59
-msgid "Create a dimension line"
-msgstr "Luo mittajana"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:60
-msgid "Create a filled box"
-msgstr "Piirrä täytetty nelikulmio"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:61
-msgid "Create a filled circle"
-msgstr "Luo täytetty ympyrä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:62
-msgid "Draw a filled circle from center"
-msgstr "Piirrä täytetty ympyrä keskipisteestä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:63
-msgid "Draw a fixed radius filled circle"
-msgstr "Piirrä täytetty määriteltysäteinen ympyrä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:64
-msgid "Draw a filled circle from tangent"
-msgstr "Piirrä täytetty ympyrä kehältä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:65
-msgid "Create a filled polygon"
-msgstr "Luo täytetty monikulmio"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:66
-msgid "Create a polyline"
-msgstr "Luo monikulmio"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:67
-msgid "Create a straight line"
-msgstr "Luo suora viiva"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:68
-msgid "Set Line drawing command"
-msgstr "Aseta suorien objektien piirto komento"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:69
-msgid "Set Shape drawing command"
-msgstr "Aseta muotojen piirto komento"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:70
-msgid "Draw table edge"
-msgstr "Piirrä pöydän reuna"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:71
-msgid "Easement menu"
-msgstr "Kaarreloivennuksen asetukset"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:73
-msgid "Generate a Parts List of selected objects"
-msgstr "Luo osaluettelo valituista objekteista"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:74
-msgid "Export a .xti file"
-msgstr "Vie .xti tiedostoon"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:75
-msgid "Export a DXF file"
-msgstr "Vie DXF tiedostoon"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:76
-msgid "General note about the layout"
-msgstr "Ratasuunnitelman muistiinpanoja"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:77
-msgid "Flip selected objects"
-msgstr "Käännä valitut objektit annetun peilauslinjan mukaan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:78
-msgid "Adjust snap grid"
-msgstr "Muuta kohdistusruudukon asetuksia"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:79
-msgid "Enable snap grid"
-msgstr "Käytä kohdistusruudukkoa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:80
-msgid "Show snap grid"
-msgstr "Näytä kohdistusruudukko"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:81
-msgid "Create a structure from a Group of objects"
-msgstr "Luo rakennus valituista objekteista"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:82
-msgid "Create a hand-laid turnout"
-msgstr "Luo käsin aseteltu vaihde"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:83
-msgid "Create a track helix"
-msgstr "Luo helix raide (kierrenousu)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:84
-msgid "Import a .xti file"
-msgstr "Tuo .xti tiedosto"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:85
-msgid "Join two tracks"
-msgstr "Yhdistä kaksi raidetta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:86
-msgid "Change Layers"
-msgstr "Muuta tasojen asetuksia"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:87
-msgid "Selects the current drawing layer"
-msgstr "Valitsee piirtotason"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:88
-msgid "Layout parameters"
-msgstr "Ratasuunnitelman asetukset"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:89
-#, fuzzy
-msgid "Show/Hide Map Window"
-msgstr "Näytä/piilota taso"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:90
-msgid "Modify or extend a track"
-msgstr "Muokkaa tai jatka raidetta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:91
-msgid "Move selected objects"
-msgstr "Siirrä valittuja objekteja"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:92
-msgid "Move a label"
-msgstr "Siirrä merkintöjä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:93
-msgid "Move selected objects to current layer"
-msgstr "Siirrä valitut objektit nykyiselle tasolle"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:95
-msgid "Print a BitMap"
-msgstr "Tulosta bitmap tiedostoon"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:96
-msgid "Create a parallel track"
-msgstr "Luo rinnakkainen raide"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:97
-msgid "Register"
-msgstr "Rekisteröi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:98
-msgid "Copy objects from clipboard"
-msgstr "Liitä objektit leikepöydältä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:99
-msgid "Perferences dialog"
-msgstr "Ominaisuudet"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:100
-msgid "Display prices of turnouts, sectional tracks and structures"
-msgstr "Vaihteiden, palaraiteiden ja rakennusten hinnat"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:101
-msgid "Print the layout"
-msgstr "Tulosta ratasuunnitelma"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:102
-msgid "Loads and unloads parameter files"
-msgstr "Lataa tai poista parametritiedostoja käytöstä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:103
-msgid "Elevation Profile Command"
-msgstr "Muokkaa korkeusprofiilia"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:105
-msgid "Command recorder"
-msgstr "Komentojen nauhoitus"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:107
-msgid "Update selected Turnout and Structure definitions"
-msgstr "Päivitä valittujen vaihteiden ja rakennusten määrittelyt"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:108
-msgid "Rescale selected objects"
-msgstr "Muuta valittujen objektien mittakaavaa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:109
-msgid "Rotate selected object(s)"
-msgstr "Pyöritä valittuja objekteja"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:110
-msgid "Show a ruler"
-msgstr "Näytä viivain"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:111
-msgid "Select objects"
-msgstr "Valitse objekteja"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:112
-msgid "Selects all objects on the layout"
-msgstr "Valitse kaikki ratasuunnitelman objektit"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:113
-msgid "Selects all objects in the current Layer"
-msgstr "Valitse kaikki nykyisen tason objektit"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:114
-msgid "Invert current selection"
-msgstr "Käänteinen valinta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:115
-msgid "Split a track"
-msgstr "Pilko raide"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:116
-msgid "Select stranded (unconnected) track pieces"
-msgstr "Valitse yksittäiset raiteet, joita ei ole liitetty toisiin raiteisiin"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:117
-msgid "Create a sensor (ie. a occupancy detector or a toggle switch)"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:118
-#, fuzzy
-msgid "Create a signal for train control"
-msgstr "Piirrä ympyrärata kehältä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:119
-msgid "Choose which commands are sticky"
-msgstr "Valitse mitkä komennot ovat pysyviä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:120
-msgid "Create straight track"
-msgstr "Luo suora raideosa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:121
-msgid "Place a structure on the layout"
-msgstr "Lisää rakennus"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:122
-#, fuzzy
-msgid "Create a switchmotor for turnout control"
-msgstr "Luo uuden rakennuksen (tai raideosan)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:123
-#, fuzzy
-msgid "Edit a switchmotor definition"
-msgstr "Luo uusi raideosan määrittely"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:124
-msgid "Enter text on the layout"
-msgstr "Lisää tekstiä ratasuunnitelmaan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:125
-#: ../../../../build/work/app/bin/bllnhlp.c:486
-msgid "Controls the size of the entered text"
-msgstr "Muuttaa syötettävän tekstin kokoa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:126
-msgid "Tip of the Day window"
-msgstr "Näytä päivän vinkki"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:127
-msgid "Run Trains"
-msgstr "Aja junilla ratasuunnitelmassa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:128
-msgid "Pause/Resume Trains"
-msgstr "Pysäytä/jatka ajamista"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:129
-msgid "Place a car on the layout"
-msgstr "Sijoita vaunu tai veturi ratasuunnitelmaan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:130
-msgid "Exit Trains"
-msgstr "Poistu junien ajosta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:131
-msgid "Hide/Unhide a track"
-msgstr "Piilota/näytä raide"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:132
-msgid "Place a turnout or sectional track"
-msgstr "Lisää vaihde tai palaraide"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:133
-msgid "Create a new turnout definition"
-msgstr "Luo uusi raideosan määrittely"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:134
-msgid "Place a turntable"
-msgstr "Lisää kääntöpöytä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:135
-msgid "Updates old source files with 3 part titles"
-msgstr "Päivittää vanhat lähdetiedostot kolmiosaisilla otsikoilla"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:137
-msgid "Ungroup objects"
-msgstr "Pura ryhmittely"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:138
-msgid "Draw tracks with thin lines"
-msgstr "Piirrä raiteet ohuilla viivoilla"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:139
-msgid "Draw tracks with medium lines"
-msgstr "Piirrä raiteet keskipaksuilla viivoilla"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:140
-msgid "Draw tracks with thick lines"
-msgstr "Piirrä raiteet paksuilla viivoilla"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:141
-msgid "Change drawing scale"
-msgstr "Muuta piirron mittakaavaa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:142
-#: ../../../../build/work/app/bin/bllnhlp.c:154
-msgid "Zoom in"
-msgstr "Lähennä näkymää"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:143
-#: ../../../../build/work/app/bin/bllnhlp.c:155
-msgid "Zoom out"
-msgstr "Loitonna näkymää"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:144
-msgid "File Menu"
-msgstr "Tiedosto valikko"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:145
-msgid "Save layout"
-msgstr "Tallenna ratasuunnitelma"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:146
-msgid "Save layout under a new name "
-msgstr "Tallenna ratasuunnitelma uudella nimellä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:147
-msgid "New layout"
-msgstr "Uusi ratasuunnitelma"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:148
-msgid "Generate parts list"
-msgstr "Luo osaluettelo"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:149
-msgid "Load a layout"
-msgstr "Lataa ratasuunnitelma"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:150
-msgid "Exit the program"
-msgstr "Poistu ohjelmasta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:151
-msgid "Revert to last saved state of layout plan"
-msgstr "Palauta ratasuunnitelma edelliseen tallennettuun tilaan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:152
-msgid "Edit menu"
-msgstr "Muokkaa -valikko"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:153
-msgid "Redraw layout"
-msgstr "Uudelleenpiirto ratasuunnitelman objekteille"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:156
-#: ../../../../build/work/app/bin/bllnhlp.c:159
-msgid "Tools menu"
-msgstr "Työkalut -valikko"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:157
-msgid "View menu"
-msgstr "Näytä -valikko"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:158
-msgid "Toolbar configuration"
-msgstr "Työkalurivin asetukset"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:160
-msgid "Options menu"
-msgstr "Asetukset -valikko"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:161
-msgid "Playback/Record commands"
-msgstr "Nauhoita/toista komentoja"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:162
-msgid "Window menu"
-msgstr "Ikkunoiden valinta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:163
-msgid "Help menu"
-msgstr "Ohje -valikko"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:164
-msgid "Recent error messages and explanations"
-msgstr "Viimeisimmät virhesanomat ja selitteet"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:165
-msgid "Move Hot Bar left"
-msgstr "Siirry vasemmalle"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:166
-msgid "Move Hot Bar right"
-msgstr "Siirry oikealle"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:167
-msgid "Total track count"
-msgstr "Raideosien kokonaismäärä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:168
-msgid "X Position of cursor"
-msgstr "Kohdistimen X sijainti"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:169
-msgid "Y Position of cursor"
-msgstr "Kohdistimen Y sijainti"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:170
-msgid "Drawing scale"
-msgstr "Piirron mittakaava"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:171
-msgid "Message and status line"
-msgstr "Viesti- ja tilarivi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:172
-#: ../../../../build/work/app/bin/bllnhlp.c:173
-msgid "Main layout canvas"
-msgstr "Piirtoalue"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:174
-msgid "Main drawing canvas"
-msgstr "Piirtoalue"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:175
-msgid "Command buttons"
-msgstr "Komentopainikkeet"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:176
-msgid "Menus"
-msgstr "Valikot"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:177
-msgid "Tile, Filename and Window Manager buttons"
-msgstr "Otsikko, tiedostonimi ja ikkunanhallintapainikkeet"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:178
-msgid "Turnout and Structure Hot Bar"
-msgstr "Raideosien ja rakennusten valikko"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:179
-msgid "Active layer list and layer buttons"
-msgstr "Tasoluettelo ja tasopainikkeet"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:180
-msgid "Map window"
-msgstr "Karttaikkuna"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:181
-msgid "This is the portion of the layout shown in the Main Window canvas"
-msgstr "Tämä osa suunnitelmasta näytetään pääikkunan piirtoalueella"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:182
-msgid "Raise or Lower all Selected Track"
-msgstr "Nosta tai laske kaikkia valittuja raiteita"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:183
-msgid "Name of block"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:184
-msgid "Script that the block will run"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:185
-msgid "List of tracks in the Block"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:186
-msgid "Add or Update car object"
-msgstr "Lisää/päivitä tämä vaunu tai veturi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:187
-msgid "Manufacturer name"
-msgstr "Valmistajan nimi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:190
-msgid "Is the Car a Locomotive?"
-msgstr "Onko kyseessä veturi vai vaunu?"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:191
-msgid "Part Number and Description"
-msgstr "Tuotekoodi ja kuvaus"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:192
-msgid "Manufacturer Part Number"
-msgstr "Valmistajan tuotekoodi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:193
-msgid "Use the Selected figure as the car image"
-msgstr "Käytä valittua kuvaa vaunun tai veturin kuvana"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:194
-msgid "Use the default figure as the car image"
-msgstr "Käytä oletuskuvaa vaunun tai veturin kuvana"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:195
-msgid "Optional description of the Car Part"
-msgstr "Valinnainen kuvaus mallista"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:196
-msgid "Flip car image"
-msgstr "Käännä kuva"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:197
-msgid "Display Car Item information or reporting marks and dimensions"
-msgstr "Näytä vaunun tai veturin tiedot, tai yhtiötunnukset ja mitat"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:198
-msgid "Full Roadname"
-msgstr "Rautatieyhtiön koko nimi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:199
-#: ../../../../build/work/app/bin/bllnhlp.c:200
-msgid "Car Type"
-msgstr "Vaunun tai veturin tyyppi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:201
-msgid "Reporting Marks (Roadname abbreviation)"
-msgstr "Rautatieyhtiön merkintä (lyhenne)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:202
-#: ../../../../build/work/app/bin/bllnhlp.c:378
-msgid "Car Number"
-msgstr "Vaunun tai veturin numero"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:203
-msgid "Car body Color"
-msgstr "Vaunun tai veturin rungon väri"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:204
-msgid "Length of car body"
-msgstr "Rungon pituus"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:205
-msgid "Width of car body"
-msgstr "Rungon leveys"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:206
-msgid "Distance between Trucks "
-msgstr "Telien keskikohtien välinen etäisyys"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:207
-msgid "Coupler are mounted on body or truck"
-msgstr "Onko kytkimet kiinnitetty runkoon vai teleihin"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:208
-msgid "Overall Coupled Length"
-msgstr "Kokonaispituus kytkimet mukaan lukien"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:209
-msgid "Coupler Length from end of car"
-msgstr "Kytkinten ulkonema vaunun tai veturin päästä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:210
-msgid "Diagram of Car"
-msgstr "Vaunun tai veturin kaaviokuva"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:211
-msgid "Item Index Number"
-msgstr "Kohteen indeksinumero"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:212
-msgid "Original Purchase Price"
-msgstr "Alkuperäinen ostohinta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:214
-msgid "Condition of car"
-msgstr "Vaunun tai veturin kunto"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:215
-msgid "Original Purchase Date"
-msgstr "Ostopäivä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:216
-msgid "Last Service Date"
-msgstr "Milloin viimeksi huollettu"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:217
-msgid "Number of identical cars to be entered"
-msgstr "Samanlaisten vaunujen tai veturien lukumäärä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:218
-msgid "Do all the cars have the same Number?"
-msgstr "Onko kaikilla vaunuilla tai vetureilla sama numero?"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:219
-msgid "Notes about the car"
-msgstr "Vaunuun tai veturiin liittyviä muistiinpanoja"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:220
-#: ../../../../build/work/app/bin/bllnhlp.c:221
-msgid "Create a new car Part or Prototype definitions"
-msgstr "Luo uusi malli tai esikuva"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:222
-msgid "Finds the selected Car Item on the layout"
-msgstr "Etsii valitun junan ratasuunnitelmasta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:223
-#: ../../../../build/work/app/bin/bllnhlp.c:224
-#: ../../../../build/work/app/bin/bllnhlp.c:225
-#: ../../../../build/work/app/bin/bllnhlp.c:226
-msgid "Sort the Item list"
-msgstr "Lajittele luettelo"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:228
-msgid "Edit the selected Car Item"
-msgstr "Muokkaa valittua kohdetta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:229
-msgid "Add a new Car Item"
-msgstr "Lisää uusi vaunu tai veturi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:230
-msgid "Delete the selected Car Items"
-msgstr "Poista valitut kohteet"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:231
-msgid "Import a Car Item .csv file"
-msgstr "Tuo .cvs tiedostosta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:232
-msgid "Export a Car Item .csv file"
-msgstr "Vie .cvs tiedostoon"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:233
-msgid "Create a text list of the Car Items"
-msgstr "Tallenna tekstitiedostoon"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:234
-msgid "Specifies the radius of the circle track"
-msgstr "Määrittelee ympyräradan säteen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:235
-msgid "How to draw track being moved/rotated"
-msgstr "Raiteiden piirtotapa liikuteltaessa tai pyöritettäessä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:236
-msgid "Default command is Describe or Select"
-msgstr "Onko oletuskomentona \"määrittele\" vai \"valitse\""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:237
-msgid "Action to invoke on Right-Click"
-msgstr "Hiiren 2-painikkeen toiminto"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:239
-msgid "The list of control elements"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:240
-#, fuzzy
-msgid "Edit the element"
-msgstr "Muokkaa valittua kohdetta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:241
-#, fuzzy
-msgid "Delete the element"
-msgstr "Poista valitut kohteet"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:242
-msgid "Contents Label for new Parameter file"
-msgstr "Parametritiedoston sisältömerkintä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:243
-msgid "List of custom designed turnouts and structures"
-msgstr "Luettelo itse suunnitelluista raideosista ja rakennuksista"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:244
-msgid "Invoke designer editor"
-msgstr "Muokkaa valittua kohdetta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:245
-msgid "Remove selected entries"
-msgstr "Poista valitut kohteet"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:246
-msgid "Copy selected entries to Parameter File"
-msgstr "Siirrä valitut kohteet parametritiedostoon"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:247
-msgid "Create a New part or prototype"
-msgstr "Luo uusi malli tai esikuva"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:248
-msgid "Update custom file and close"
-msgstr "Päivitä tiedosto ja sulje ikkuna"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:249
-msgid "Executes the next step of the demo"
-msgstr "Suorittaa seuraavan vaiheen demossa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:250
-msgid "Skip to next demo"
-msgstr "Siirry seuraavaan demoon"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:251
-msgid "Stops the demonstration and returns you to XTrackCAD"
-msgstr "Pysäyttää demon ja palaa XTrackCADin normaaliin tilaan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:252
-msgid "Select speed of Playback"
-msgstr "Valitse toiston nopeus"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:253
-msgid "This is where comments about the demo are displayed"
-msgstr "Tässä näytetään demojen kommentit"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:290
-msgid "Move the Main canvas if you drag near the edge"
-msgstr "Siirrä näkymää automaattisesti raahattaessa hiirellä lähellä reunoja"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:291
-msgid "Color tracks or other objects by layer"
-msgstr "Väritä raiteet ja muut objektit tasojen mukaan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:292
-msgid "Controls the drawing of hidden tracks"
-msgstr "Piilossa olevien raiteiden piirtotapa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:293
-msgid "Controls the drawing of End-Points"
-msgstr ""
-"Näytetäänkö raiteiden päätepisteet kaikissa raiteissa, vaihteissa vai ei "
-"missään"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:294
-msgid "How to draw track ties"
-msgstr "Ratapölkkyjen piirtotapa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:295
-msgid "Show crosshair at center of curves"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:296
-msgid "Drawing scale when to draw tracks with 2 rails"
-msgstr ""
-"Näytön mittakaavan raja-arvo, jolloin raiteet piirretään yhtenä tai kahtena "
-"kiskona."
-
-#: ../../../../build/work/app/bin/bllnhlp.c:297
-msgid "Drawing scale of the map window"
-msgstr "Karttaikkunan piirtomittakaava"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:298
-msgid "Whether the main layout is updated while dragging on the Map"
-msgstr "Päivitetäänkö pääikkunan näkymä kartassa valitun alueen mukaan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:299
-msgid "Enable labels for Turnouts, Flextrack Lengths and Elevations"
-msgstr "Määrittelee missä kohteissa näytetään merkintöjä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:300
-msgid "When to label Turnout, Flextrack Lengths and Elevations"
-msgstr ""
-"Milloin näytetään merkinnät. Loitonnettaessa tästä arvosta, merkinnät eivät "
-"enää näy."
-
-#: ../../../../build/work/app/bin/bllnhlp.c:301
-msgid "Font size for labels on layout"
-msgstr "Merkintöjen kirjasinkoko ratasuunnitelmassa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:302
-msgid "Label elements on the Hot Bar"
-msgstr "Hot Bar:ssa esitettävät merkinnät"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:303
-msgid "Label elements on layout"
-msgstr "Merkintöjen sisältö ratasuunnitelmassa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:304
-msgid "Label elements for lists"
-msgstr "Luetteloissa näytettävät merkinnät"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:305
-msgid "How to group cars on the Train Hot Bar"
-msgstr "Miten vaunut ja veturit ryhmitellään Junat-Hot Bar:ssa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:306
-msgid "Delay (in mS) between updating train movements"
-msgstr "Junien piirtoväli ajettaessa (millisekunteina)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:307
-msgid "Don't show trains in tunnels when tunnels are hidden"
-msgstr ""
-"Ei näytetä junia tunneleissa, jos tunnelien piirtotapa on \"piilotettu\""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:308
-msgid "Display unconnected endpoints of track with sepecial marks"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:309
-msgid "Whether zoom is locked to the bottom left corner or the center point"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:311
-msgid "Width of the lines"
-msgstr "Viivojen paksuus"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:312
-msgid "Color of the lines"
-msgstr "Viivojen väri"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:313
-msgid "List of types of Lumber"
-msgstr "Luettelo puutavaran tyypeistä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:314
-msgid "Color of Benchwork"
-msgstr "Runkorakenteen väri"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:315
-msgid "Orientation of Benchwork"
-msgstr "Runkorakenteen suunta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:316
-msgid "Size of Dimension Arrows"
-msgstr "Mittajanan nuolten koko"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:317
-msgid "This controls the sharpness of the easement curve"
-msgstr "Tällä säädellään kaarreloivennuksen jyrkkyyttä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:318
-msgid "Minimum radius"
-msgstr "Pienin karresäde"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:319
-msgid "Maximum offset"
-msgstr "Suurin siirtymä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:320
-msgid "Easement length"
-msgstr "Kaarreloivennuksen pituus"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:321
-msgid ""
-"These radio buttons are a short-cut for Values of 0.0, 0.5, 1.0 and 2.0. "
-"None turns Easements off"
-msgstr ""
-"Nämä painikkeet ovat pikavalintoja arvoille 0,0, 0,5, 1,0 ja 2,0. Mikään "
-"näistä ei poista kaarreloivennusta käytöstä."
-
-#: ../../../../build/work/app/bin/bllnhlp.c:322
-msgid "Complete easement selection"
-msgstr "Hyväksy kaarreloivennukse asetukset ja sulje ikkuna"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:323
-msgid "Type of elevation"
-msgstr "Tyyppi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:324
-msgid "Height of End Point"
-msgstr "Päätepisteen korkeus"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:325
-msgid "Compute elevation based on neighbors"
-msgstr "Laske korkeudet viereisten perusteella"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:326
-msgid "Compute grade based on neighbors"
-msgstr "Laske nousukulma viereisten perusteella"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:327
-msgid "Specify a name for an End-Point"
-msgstr "Määrittele päätepisteen nimi (aseman nimi)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:329
-msgid "Print parts list"
-msgstr "Tulosta osaluettelo"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:330
-#: ../../../../build/work/app/bin/bllnhlp.c:430
-#: ../../../../build/work/app/bin/bllnhlp.c:530
-msgid "Invoke the Print Setup dialog"
-msgstr "Avaa tulostusasetusten ikkuna"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:331
-msgid "Save parts list to file"
-msgstr "Tallenna osaluettelo tiedostoon"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:332
-msgid "This is the list of parts for the layout"
-msgstr "Tämä on ratasuunnitelman osaluettelo"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:333
-msgid "Enable prices on the Parts List"
-msgstr "Näytä hinnat osaluettelossa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:334
-#: ../../../../build/work/app/bin/bllnhlp.c:337
-msgid "Spacing between major grid lines"
-msgstr "Ruudukon pääviivojen väli"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:335
-#: ../../../../build/work/app/bin/bllnhlp.c:338
-msgid "Allows the spacing to be subdivided"
-msgstr "Aliviivojen jako"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:336
-#: ../../../../build/work/app/bin/bllnhlp.c:339
-msgid "Specifies if positions are snaped in this direction"
-msgstr "Määrittelee kohdistetaanko tässä suunnassa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:340
-#: ../../../../build/work/app/bin/bllnhlp.c:341
-#: ../../../../build/work/app/bin/bllnhlp.c:342
-msgid "Shows the origin and angle of the grid"
-msgstr "Ruudukon origo ja kulma"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:343
-msgid "Specifies if the grid is shown"
-msgstr "Määrittelee näytetäänkö ruudukko"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:344
-msgid "Completes the grid specification"
-msgstr "Hyväksy ruudukon asetukset"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:348
-msgid "Number of segments in Group"
-msgstr "Lohkojen määrä ryhmässä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:349
-msgid "Replace the Selected object with the new definition?"
-msgstr "Korvaa valittu objekti uudella määrittelyllä?"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:350
-msgid "Creates a new Structure (or Turnout)"
-msgstr "Luo uuden rakennuksen (tai raideosan)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:351
-msgid "Elevation difference of Helix End-Points"
-msgstr "Päätepisteiden välinen korkeusero"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:352
-msgid "Helix Radius"
-msgstr "Helixin säde"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:353
-msgid "Number of turns in the helix"
-msgstr "Kokonaisten kierrosten lukumäärä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:354
-msgid "Angle betweek helix entrance and exit"
-msgstr "Sisäänmenon ja ulostulon välinen kulma"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:355
-msgid "Grade in helix"
-msgstr "Nousukulma"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:356
-msgid "Separation between helix layers"
-msgstr "Helixin kerrosten välinen etäisyys"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:357
-msgid "Layer list"
-msgstr "Tasoluettelo"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:358
-msgid "Layer Name"
-msgstr "Tason nimi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:359
-msgid "Color of layer"
-msgstr "Tason väri"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:360
-msgid "Layer is drawn on Main window"
-msgstr "Taso piirretään pääikkunaan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:361
-msgid "Layer cannot be changed"
-msgstr "Tasoa ei voi muokata"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:362
-msgid "Layer is drawn on Map window"
-msgstr "Taso piirretään kartalle"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:363
-msgid "Number of layer buttons to show"
-msgstr "Työkalurivillä näytettävien tasopainikkeiden lukumäärä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:364
-msgid "Number of objects in this layer"
-msgstr "Objektien lukumäärä tällä tasolla"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:366
-msgid "Load layer configuration from default"
-msgstr "Lataa oletusasetukset tiedostosta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:367
-msgid "Save current layer configuration as default"
-msgstr "Tallenna nykyiset tasojen asetukset oletuksiksi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:368
-msgid "Overwrite layer configuration with system default values"
-msgstr "Käytä järjestelmän oletusasetuksia"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:369
-#: ../../../../build/work/app/bin/bllnhlp.c:370
-msgid "Specifies the size of the room (in inches or centimeters)"
-msgstr "Määrittele huoneen koko (senttimetreinä tai tuumina)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:371
-#, fuzzy
-msgid "Specifies the layout Title that will appear on printouts"
-msgstr "Ratasuunnitelman otsikko. Tämä näkyy tulostuksissa."
-
-#: ../../../../build/work/app/bin/bllnhlp.c:372
-#, fuzzy
-msgid "Specifies the layout Subtitle that will appear on printouts"
-msgstr "Ratasuunnitelman otsikko. Tämä näkyy tulostuksissa."
-
-#: ../../../../build/work/app/bin/bllnhlp.c:373
-msgid "Specifies the Modelling Scale"
-msgstr "Määrittelee mittakaavan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:374
-msgid "Specifies the rail gauge, ie. the distance between the rails"
-msgstr "Määrittelee raideleveyden"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:375
-msgid ""
-"Specifies minimum track radius (in inches or centimeters). Tracks with a "
-"smaller radius are considered exceptional."
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:376
-msgid ""
-"Specifies maximum track elevation expressed as a percent (%). Tracks with a "
-"larger elevation are considered exceptional."
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:379
-msgid ""
-"This is the body of the Note. To change this select Modify from the File "
-"Menu"
-msgstr ""
-"Tämä on muistiinpanon runko. Muuttaaksesi tätä, valitse Tiedosto-valikosta "
-"Muokkaa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:381
-msgid "Specifies number of pixels per inch (or centimeter)"
-msgstr "Määrittelee pikseleiden määrän tuumalla (tai sentillä)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:383
-msgid ""
-"Specifies whether Layout Titles, Borders or Track Centerlines are printed on "
-"the BitMap"
-msgstr ""
-"Määritelee tulostetaanko ratasuunnitelman otsikot, reunukset tai ratojen "
-"keskiviivat"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:384
-msgid "Specifies the separation between parallel tracks"
-msgstr "Määrittelee rinnakkaisten raiteiden etäisyyden toisistaan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:385
-msgid "Enter your name as specified in the XTrackCAD Registration Notice"
-msgstr "Syötä nimesi kuten XTrackCAD rekisteröintitiedotteessa on määritelty"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:386
-msgid "Enter the key value as specified in the XTrackCAD Registration Notice"
-msgstr "Syötä avain kuten XTrackCAD rekisteröintitiedotteessa on määritelty"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:387
-msgid "Validates the name and key. Terminates the registration command"
-msgstr "Vahvistaa nimen ja avainen, sekä päättää rekisteröitymisen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:388
-#, fuzzy
-msgid "0ᅵ is up or to the right"
-msgstr "Onko 0° ylhäällä vai oikealla"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:389
-msgid "Choose english (inches) or metric (centimeters)"
-msgstr ""
-"Valitse englantilaiset (tuumat) tai metrijärjestelmän (sentit) mukaiset mitat"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:390
-msgid "How to display length measurements"
-msgstr "Pituusmittojen esitystapa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:391
-msgid "Do not create tracks to be shorter than this value"
-msgstr "Älä luo tätä lyhyempiä raiteita"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:392
-msgid "Maximum distance between connected end points"
-msgstr "Suurin sallittu etäisyys kahden liitettävän raiteen välillä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:393
-msgid "Minimum angle between connected End-Points"
-msgstr "Suurin sallittu kulma kahden liitettävän raiteen välillä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:394
-msgid "Specifies the minimum angle between tracks connected to a turntable"
-msgstr ""
-"Määrittelee pienimmän kääntöpöydästä lähtevien raiteiden välisen kulman"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:395
-msgid "Trains will crash above this speed"
-msgstr ""
-"Suurin sallittu vaunujen kytkentänopeus. Suuremmalla nopeudella aiheutuu "
-"törmäys."
-
-#: ../../../../build/work/app/bin/bllnhlp.c:396
-msgid "Enable/Disable balloon popup help windows"
-msgstr "Käytetäänkö pikaopasteita (tooltip)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:397
-msgid "How far you can move the mouse before its considered a drag"
-msgstr ""
-"Kuinka pitkälle hiirtä voi liikuttaa ennen kuin se käsitetään raahaamiseksi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:398
-msgid "How long you can hold a mouse button down before its considered a drag"
-msgstr ""
-"Kuinka kauan hiiren painiketta voi pitää alhaalla ennen kuin se käsitetään "
-"raahaamiseksi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:399
-msgid "Minimum distance (in pixels) between grid lines/ticks"
-msgstr "Ruudukon viivojen pienin etäisyys toisistaan pikseleinä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:400
-msgid ""
-"Specifies the Check Point frequency; number of modifications made since the "
-"last save."
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:401
-msgid "Resume work on last layout or start with new layout"
-msgstr "Jatka edellistä ratasuunnitelmaa tai aloita uusi ratasuunnitelma"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:403
-msgid "Updated cost of current selected item"
-msgstr "Syötä valitulle tuotteelle uusi hinta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:405
-msgid "Selection list for prices"
-msgstr "Hintojen valintaluettelo"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:406
-#: ../../../../build/work/app/bin/bllnhlp.c:407
-#: ../../../../build/work/app/bin/bllnhlp.c:408
-msgid "Price of specified length of flex-track"
-msgstr "Määrätyn mittaisen fleksin hinta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:410
-#, fuzzy
-msgid "Controls the printing of a centerline of track cmdPrint"
-msgstr "Piilossa olevien raiteiden piirtotapa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:411
-msgid "Controls the reduction (scale) of the printout"
-msgstr "Tulostuksen mittakaava"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:412
-msgid "Scaled page width (Scale times physical page width)"
-msgstr "Skaalattu sivun leveys (mittakaava x fyysinen sivun leveys)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:413
-msgid "Sets page size to the maximum (based on scale and physical page size)"
-msgstr ""
-"Aseta sivun koko suurimmaksi mahdolliseksi mittakaavan ja fyysisen sivukoon "
-"mukaan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:414
-msgid "Scaled page height (Scale times physical page height)"
-msgstr "Skaalattu sivun korkeus (mittakaava x fyysinen sivun korkeus)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:415
-msgid "Sets scale, origin and angle for a one page printout of the layout"
-msgstr ""
-"Asettaa tulostusmittakaavan, origon ja kulman siten, että koko "
-"ratasuunnitelma mahtuu yhdelle sivulle"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:416
-msgid "Print page in Portrait or Landscape format"
-msgstr "Tulosta sivu pysty- tai vaakasuunnassa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:417
-msgid "Order of printing pages"
-msgstr "Sivujen tulostusjärjestys"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:418
-msgid "Print Title, Date, Author and other information at bottom of page?"
-msgstr "Tulosta otsikko, päivämäärä, rekijä ja muut tiedot sivun alaosaan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:419
-msgid "Ignore unprintable page margins?"
-msgstr "Ohita tulostumattomat marginaalit?"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:420
-msgid "Print Registration Marks at 1:1?"
-msgstr "Tulosta sivujen kohdistusmerkinnät tulostusmittakaavan ollessa 1:1?"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:421
-msgid "Print Snap Grid?"
-msgstr "Tulosta kohdistusruudukko?"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:422
-msgid "Print Rulers on all page edges?"
-msgstr "Tulosta viivaimet kaikilla reunoilla?"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:423
-msgid "Print Roadbed Outline?"
-msgstr "Tulosta ratapenkan ulkoreuna?"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:425
-#: ../../../../build/work/app/bin/bllnhlp.c:426
-#: ../../../../build/work/app/bin/bllnhlp.c:428
-msgid ""
-"Origin of the print grid. This is useful if you want to reprint a set of "
-"pages"
-msgstr ""
-"Tulostusruudukon origo. Tämä on hyödyllinen tulostettaessa sivuja uudelleen"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:427
-msgid "Resets the origin and angle to 0"
-msgstr "Palauttaa origon ja kulman nollaksi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:429
-msgid "Deselects all pages"
-msgstr "Poista sivujen valinnat"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:431
-msgid "Print selected pages and terminates the print command"
-msgstr "Tulostaa valitut sivut ja päättää tulostuskomennon"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:432
-msgid "List of loaded and unloaded parameter files"
-msgstr "Luettelo ladatuista ja saatavilla olevista parametritiedostoista"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:433
-msgid "Show parameter files by names or descriptions"
-msgstr "Näytä parametritiedostojen nimet tai kuvaukset"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:434
-msgid "Toggle the loaded status of the selected parameter file"
-msgstr "Lataa tai poista valittu parametritiedosto"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:435
-msgid "Find a parameter file for loading"
-msgstr "Etsi ladattava parametritiedosto"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:436
-msgid "Update parameter file list"
-msgstr "Päivitä parametritiedostojen luettelo"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:437
-#, fuzzy
-msgid "Select all parameter files shown"
-msgstr "Luetaan parametritiedostot"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:438
-msgid "Profile of specified path"
-msgstr "Määritellyn reitin profiili"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:439
-msgid "Clear the profile"
-msgstr "Tyhjennä profiilikäyrä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:440
-msgid "Print the profile"
-msgstr "Tulosta profiili"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:442
-msgid "Stop recording"
-msgstr "Lopeta nauhoitus"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:443
-msgid "Insert a message"
-msgstr "Lisää viesti"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:444
-msgid "End a message"
-msgstr "Lopeta viestin kirjoitus"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:445
-msgid "Message body"
-msgstr "Viestin runko"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:446
-msgid "Possible turnouts"
-msgstr "Mahdolliset raideosat"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:447
-msgid "Skip this turnout"
-msgstr "Hyppää tämän vaihteen yli"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:449
-msgid "Manufacturer of Object"
-msgstr "Valmistaja"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:450
-msgid "Description of Object"
-msgstr "Objektin kuvaus"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:451
-msgid "Part Nuber of Object"
-msgstr "Tuotekoodi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:453
-msgid "Rescale by Scale Conversion or by Ratio"
-msgstr "Muunna käyttämällä mittakaavaa tai suhdelukua"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:454
-msgid "Original Scale of the selected objects"
-msgstr "Valittujen objektien alkuperäinen mittakaava"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:455
-#, fuzzy
-msgid "Original Gauge of the selected objects"
-msgstr "Valittujen objektien alkuperäinen raideleveys"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:456
-msgid "New Scale of the selected objects"
-msgstr "Valittujen objektien uusi mittakaava"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:457
-msgid "New Gauge of the selected objects"
-msgstr "Valittujen objektien uusi raideleveys"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:458
-msgid "Change track dimensions to new scale"
-msgstr "Muuta raiteiden mitat uuteen mittakaavaan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:459
-msgid "Change size by this amount"
-msgstr "Muuta kokoa tämän suhdeluvun verran"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:461
-msgid "Snap Grid Line and Division"
-msgstr "Kohdistusruudukko ja jakomerkinnät"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:462
-msgid "X and Y position markers"
-msgstr "Kohdistimen X ja Y sijainnin markkerit"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:463
-msgid "Border rulers, room boundaries and table edges"
-msgstr "Reunaviivaimet, huoneen rajat sekä pöydän reunat"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:464
-msgid "Primary Axis of grid rotation"
-msgstr "Ruudukon asettelun ensisijainen akseli"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:465
-msgid "Secondary Axis of grid rotation"
-msgstr "Ruudukon asettelun toissijainen akseli"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:466
-msgid "Unselected tracks"
-msgstr "Normaalit raideosat, joita ei ole valittu"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:467
-msgid "Selected tracks"
-msgstr "Valitut raiteet"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:468
-msgid "Color of tracks on the Profile path"
-msgstr "Profiilin muokkauksessa olevat raiteet"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:469
-msgid "Color of Exceptional tracks"
-msgstr "Erityisraiteiden väri"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:470
-msgid "Color of track ties"
-msgstr "Ratapölkkyjen väri"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:471
-msgid "Updates the colors"
-msgstr "Pävitä värit ja sulje ikkuna"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:472
-msgid "Angle in degrees"
-msgstr "Kulma (asteina)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:473
-msgid "Rotate object(s) by specified amount"
-msgstr "Pyöritä objekteja määrätyn verran"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:474
-msgid "Choose commands to be sticky"
-msgstr "Valitse pysyvät komennot"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:475
-msgid "Make the commands sticky"
-msgstr "Hyväksy asetukset ja sulje ikkuna"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:476
-msgid "List of available structure"
-msgstr "Luettelo saatavilla olevista rakennuksista"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:477
-msgid "Diagram of the selected structure"
-msgstr "Valitun rakennuksen kuva"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:478
-msgid "Hide Selection window when placing Structure"
-msgstr "Piilota valintaikkuna rakennuksen asettamisen ajaksi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:479
-msgid "Drawing scale and size"
-msgstr "Mittakaava ja koko"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:480
-msgid "Complete structure placement"
-msgstr "Lisää rakennus"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:481
-msgid "Choose a Pier number"
-msgstr "Valitse pilarin numero"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:482
-msgid "Name of the Motor"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:483
-msgid "Value when switch is normal"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:484
-msgid "Value when the switch is reversed"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:485
-msgid "Value for a positive comfirmation of switch position"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:487
-msgid "Useful information about the program"
-msgstr "Hyödyllisiä tietoja ohjelmasta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:488
-msgid "Show Tip of the Day every time the program starts"
-msgstr "Näytä päivän vinkki jokaisen käynnistyksen yhteydessä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:489
-msgid "Show the next Tip of the Day"
-msgstr "Näytä seuraava vinkki"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:490
-msgid "Show the previous Tip of the Day"
-msgstr "Näytä edellinen vinkki"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:492
-msgid "Controls which Command Buttons are displayed"
-msgstr "Valitse työkalurivillä näytettävät painikkeet"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:493
-msgid "List of Cars"
-msgstr "Luettelo vaunuista ja vetureista"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:494
-msgid "List of active trains"
-msgstr "Luettelo aktiivisista junista"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:496
-msgid "Train odometer"
-msgstr "Junan matkamittari"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:497
-msgid "Reset odometer to 0"
-msgstr "Nollaa matkamittarin lukema"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:498
-msgid "Find train on layout"
-msgstr "Etsi juna ratasuunnitelmasta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:499
-msgid "Follow train around layout"
-msgstr "Seuraa junaa ratasuunnitelmassa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:500
-msgid "Flip direction at End Of Track"
-msgstr "Muuta kulkusuunta automaattisesti radan päässä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:501
-msgid "Change direction of train"
-msgstr "Muuta junan kulkusuunta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:502
-msgid "Stop the train"
-msgstr "Pysäytä juna"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:503
-msgid "List of available turnouts for the current scale"
-msgstr "Luettelo saatavilla olevista raideosista tässä mittakaavassa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:504
-msgid ""
-"Diagram of the currently selected turnout. Click on a End-Point to select "
-"the Active End-Point"
-msgstr "Valitun raideosan kaaviokuva. Valitse aktiivinen päätepiste hiirellä."
-
-#: ../../../../build/work/app/bin/bllnhlp.c:505
-msgid ""
-"A menu list of various type of turnouts and sectional tracks you can define"
-msgstr ""
-"Valikko eri tyyppisistä vaihteista ja palaraiteista joita voit määritellä"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:506
-msgid "Hide Selection window when placing Turnout"
-msgstr "Piilota valintaikkuna vaihteen asettamisen ajaksi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:507
-msgid "The selected Active End-Point"
-msgstr "Valittu aktiivinen päätepiste"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:508
-msgid "Current selected turnout, (displayed in the diagram window)"
-msgstr "Valittu raideosa (kaaviokuva ikkunassa)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:509
-msgid "One the End-Points that can be selected"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:511
-#: ../../../../build/work/app/bin/bllnhlp.c:512
-msgid "Angle of the specified track to the center line of the turnout"
-msgstr "Raiteen ja vaihteen keskilinjan välinen kulma"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:513
-msgid "Specifies if angles are entered as Frog Numbers or in degrees"
-msgstr "Määrittelee annetaanko kulmat asteina vai risteysnumerona"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:514
-#: ../../../../build/work/app/bin/bllnhlp.c:515
-msgid "Desciption"
-msgstr "Kuvaus"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:516
-msgid "Turnout description (Manuf., Size, Part Number, etc)"
-msgstr "Raideosan kuvaus (valmistaja, koko, tuotekoodi, jne.)"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:517
-#: ../../../../build/work/app/bin/bllnhlp.c:518
-#: ../../../../build/work/app/bin/bllnhlp.c:519
-msgid "Length from the base to the end of the specified track"
-msgstr "Etäisyys vaihteen alusta raiteen päähän"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:521
-#: ../../../../build/work/app/bin/bllnhlp.c:522
-msgid "Offset of the track End-Point from the center line of the turnout"
-msgstr "Raiteen päätepisteen ja vaihteen keskilinjan välinen etäisyys"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:525
-#: ../../../../build/work/app/bin/bllnhlp.c:526
-msgid "Prints a full size diagram of the turnout for checking"
-msgstr "Tulostaa täysikokoisen kaavion vaihteesta tarkastusta varten"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:527
-msgid "Color of Roadbed lines"
-msgstr "Ratapenkan viivan väri"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:528
-msgid "Width of Roadbed lines"
-msgstr "Ratapenkan viivan paksuus"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:529
-msgid "Width of Roadbed"
-msgstr "Ratapenkan leveys"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:531
-msgid "Closes the window and returns to the Turnout Selection window"
-msgstr "Sulkee ikkunan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:532
-msgid "Specifies the diameter of the turntable"
-msgstr "Määrittelee kääntöpöydän halkaisijan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:533
-msgid "Old Turnout title"
-msgstr "Vanha raideosan otsikko"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:534
-msgid "List of available titles"
-msgstr "Luettelo saatavilla olevista otsikoista"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:535
-msgid "Leave the Turnouts' title unchanged"
-msgstr "Älä muuta raideosan otsikkoa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:536
-msgid "Invoke the Parameter Files dialog"
-msgstr "Avaa parametritiedostot ikkuna"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:537
-msgid "List of available turnouts"
-msgstr "Luettelo saatavilla olevista raideosista"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:538
-msgid "Update the Turnouts' title"
-msgstr "Päivitä raideosan otsikko"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:542
-msgid "Sample"
-msgstr "Näyte"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:544
-msgid "Slant"
-msgstr "Kursivoitu"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:545
-msgid "Font selection dialog"
-msgstr "Kirjasimen valinta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:546
-msgid "Weight"
-msgstr "Lihavoitu"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:547
-msgid "Printer Abort Window"
-msgstr "Tulostuksen keskeytys"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:548
-msgid "Print to filename"
-msgstr "Tulostuksen tiedostonimi"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:549
-msgid "Specify Postscript font alias mapping"
-msgstr "Määrittele Postscript kirjasinalias"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:550
-msgid ""
-"Displays the Print Setup window to change printers, orientation, paper size, "
-"etc."
-msgstr ""
-"Näyttää tulostusasetusikkunan, josta voi valita tulostimen, muutaa paperin "
-"koon, yms."
-
-#: ../../../../build/work/app/bin/bllnhlp.c:551
-msgid "Closes this dialog"
-msgstr "Sulkee tämän ikkunan"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:552
-msgid "Page orientation"
-msgstr "Sivun suunta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:553
-msgid "Unprintable margins"
-msgstr "Tulostumattomat marginaalit"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:554
-msgid "Updates and closes this dialog"
-msgstr "Hyväksy asetukset ja sulje ikkuna"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:555
-msgid "Choose paper size"
-msgstr "Valitse paperin koko"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:556
-msgid "Choose printer"
-msgstr "Valitse tulostin"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:557
-msgid "Print test page"
-msgstr "Tulosta testisivu"
-
-#: ../../../../build/work/app/i18n/custmsg.h:7
-msgid "Introduction"
-msgstr "Johdanto"
-
-#: ../../../../build/work/app/i18n/custmsg.h:8
-msgid "Mouse Actions"
-msgstr "Hiiren toiminnot"
-
-#: ../../../../build/work/app/i18n/custmsg.h:9
-msgid "Dialogs"
-msgstr "Dialogit (ikkunat)"
-
-#: ../../../../build/work/app/i18n/custmsg.h:10
-msgid "Moving about"
-msgstr "Liikkuminen"
-
-#: ../../../../build/work/app/i18n/custmsg.h:11
-msgid "Describe and Select"
-msgstr "Määrittele ja valitse -toiminnot"
-
-#: ../../../../build/work/app/i18n/custmsg.h:12
-#, fuzzy
-msgid "Describe"
-msgstr "Kuvaus"
-
-#: ../../../../build/work/app/i18n/custmsg.h:14
-msgid "Simple tracks"
-msgstr "Yksinkertaiset raideosat"
-
-#: ../../../../build/work/app/i18n/custmsg.h:15
-msgid "Straight tracks"
-msgstr "Suorat raiteet"
-
-#: ../../../../build/work/app/i18n/custmsg.h:16
-msgid "Curved tracks"
-msgstr "Kaarevat raiteet"
-
-#: ../../../../build/work/app/i18n/custmsg.h:17
-msgid "Circles"
-msgstr "Ympyrät"
-
-#: ../../../../build/work/app/i18n/custmsg.h:18
-msgid "Turntables"
-msgstr "Kääntöpöydät"
-
-#: ../../../../build/work/app/i18n/custmsg.h:19
-msgid "Modifying tracks"
-msgstr "Raiteiden muokkaaminen"
-
-#: ../../../../build/work/app/i18n/custmsg.h:20
-msgid "Modifying end points "
-msgstr "Päätepisteiden muokkaaminen"
-
-#: ../../../../build/work/app/i18n/custmsg.h:21
-msgid "Extending"
-msgstr "Pidentäminen"
-
-#: ../../../../build/work/app/i18n/custmsg.h:22
-msgid "Medium and Thick Tracks"
-msgstr "Keskipaksut ja paksut raiteet"
-
-#: ../../../../build/work/app/i18n/custmsg.h:23
-msgid "Joining Tracks"
-msgstr "Raiteiden yhdistäminen"
-
-#: ../../../../build/work/app/i18n/custmsg.h:24
-msgid "Straight to straight"
-msgstr "Suora - suora"
-
-#: ../../../../build/work/app/i18n/custmsg.h:25
-msgid "Curve to straight"
-msgstr "Kaareva - suora"
-
-#: ../../../../build/work/app/i18n/custmsg.h:26
-msgid "Circle to circle"
-msgstr "Ympyrä - ympyrä"
-
-#: ../../../../build/work/app/i18n/custmsg.h:27
-msgid "Joining to turntables"
-msgstr "Yhdistäminen kääntöpäytään"
-
-#: ../../../../build/work/app/i18n/custmsg.h:28
-msgid "Easements"
-msgstr "Kaarreloivennukset"
-
-#: ../../../../build/work/app/i18n/custmsg.h:29
-msgid "Abutting tracks"
-msgstr "Vastakkaiset raideosat"
-
-#: ../../../../build/work/app/i18n/custmsg.h:30
-msgid "Move to Join"
-msgstr "Siirrä yhdistääksesi"
-
-#: ../../../../build/work/app/i18n/custmsg.h:32
-msgid "Select and Placement"
-msgstr "Valinta ja asettelu"
-
-#: ../../../../build/work/app/i18n/custmsg.h:33
-msgid "Building a yard throat."
-msgstr "Vaihdekujan luominen"
-
-#: ../../../../build/work/app/i18n/custmsg.h:34
-msgid "Designing turnouts"
-msgstr "Raideosien suunnittelu"
-
-#: ../../../../build/work/app/i18n/custmsg.h:35
-msgid "Group and Ungroup"
-msgstr "Ryhmittely ja ryhmittelyn purku"
-
-#: ../../../../build/work/app/i18n/custmsg.h:36
-msgid "Triming Turnout Ends"
-msgstr "Vaihteen päiden säätö"
-
-#: ../../../../build/work/app/i18n/custmsg.h:37
-msgid "Handlaid Turnouts"
-msgstr "Käsin asetellut vaihteet"
-
-#: ../../../../build/work/app/i18n/custmsg.h:38
-msgid "Elevations and Profile"
-msgstr "Korkeustasot ja profiili"
-
-#: ../../../../build/work/app/i18n/custmsg.h:39
-msgid "Elevations"
-msgstr "Korkeustasot"
-
-#: ../../../../build/work/app/i18n/custmsg.h:41
-msgid "Misc track commands"
-msgstr "Muita raidekomentoja"
-
-#: ../../../../build/work/app/i18n/custmsg.h:42
-msgid "Delete and Undo"
-msgstr "Poista ja kumoa"
-
-#: ../../../../build/work/app/i18n/custmsg.h:43
-msgid "Splitting and Tunnels"
-msgstr "Pilkkominen ja tunnelit"
-
-#: ../../../../build/work/app/i18n/custmsg.h:45
-msgid "Helix tracks"
-msgstr "Helix raiteet (kierrenousu)"
-
-#: ../../../../build/work/app/i18n/custmsg.h:46
-msgid "Exception Tracks"
-msgstr "Erityisraiteet"
-
-#: ../../../../build/work/app/i18n/custmsg.h:48
-msgid "Connect and Tighten - a siding"
-msgstr "Liittäminen ja tiukennus - sivuraide"
-
-#: ../../../../build/work/app/i18n/custmsg.h:49
-msgid "Connect and Tighten - figure-8"
-msgstr "Liittäminen ja tiukennus - kahdeksikko"
-
-#: ../../../../build/work/app/i18n/custmsg.h:50
-msgid "Other commands"
-msgstr "Muut komennot"
-
-#: ../../../../build/work/app/i18n/custmsg.h:52
-msgid "Table Edges"
-msgstr "Pöydän reunat"
-
-#: ../../../../build/work/app/i18n/custmsg.h:54
-msgid "Dimension Lines"
-msgstr "Mittajanat"
-
-#: ../../../../build/work/app/i18n/custmsg.h:55
-msgid "Lines"
-msgstr "Viivat"
-
-#: ../../../../build/work/app/i18n/custmsg.h:56
-msgid "Poly-Shapes"
-msgstr "Monikulmiot"
-
-#: ../../../../build/work/app/i18n/custmsg.h:57
-msgid "Modifying Poly-Shapes"
-msgstr "Monikulmioiden muokkaaminen"
-
-#: ../../../../build/work/app/i18n/custmsg.h:60
-msgid "Control Panels (New)"
-msgstr "Ohjauspaneelit"
-
-#: ../../../../build/work/app/i18n/custmsg.h:62
-msgid ""
-"The unconnected End-Points of a straight or curved track can be changed with "
-"the 'Modify Track' command.\n"
-msgstr ""
-"Suorien ja kaarevien raiteiden irtonaisia päätepisteitä voidaan muuttaa "
-"Muokkaa-komennolla.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:63
-msgid ""
-"The End-Point of a straight track is selected and then Left-Dragged to "
-"change its length.\n"
-msgstr ""
-"Suoran raiteen pituutta muutetaan raahaamalla hiiren vasemmalla painikkeella "
-"sen päätepisteestä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:64
-msgid ""
-"Watch what happens if you try to drag the selected End-Point beyond the far "
-"End-Point.\n"
-msgstr ""
-"Katso mitä tapahtuu, jos raahaat valitun päätepisteen toisen päätepisteen "
-"yli.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:65
-msgid ""
-"The length of the straight track is determined by the distance from the far "
-"End-Point and the cursor.\n"
-msgstr ""
-"Suoran raiteen pituus määräytyy päätepisteen ja osoittimen välisen "
-"etäisyyden mukaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:66
-msgid ""
-"A curved track is selected and it's new End-Point is determined by the angle "
-"to the cursor.\n"
-msgstr "Kaarteen päätepistettä voidaan siirtää kehää pitkin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:67
-msgid "It's possible to almost create a complete circle.\n"
-msgstr "On mahdollista luoda lähes täydellinen ympyrä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:68
-msgid ""
-"If you drag the mouse beyond the start of the curve the track becomes very "
-"short.\n"
-msgstr ""
-"Jos raahaat hiirellä kaarteen alkupisteen yli raiteesta tulee erittäin "
-"lyhyt.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:69
-msgid "Here you are warned that the track will be too short.\n"
-msgstr "Tällöin varoitetaan liian lyhyestä raiteesta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:70
-msgid ""
-"If you move the cursor away from the curve, you will create a straight track "
-"tangent to the curve.\n"
-msgstr ""
-"Jos siirrät osoitinta kauemmas kaarteesta, voit luoda suoran raiteen "
-"kaarteen tangentin suuntaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:71
-msgid ""
-"If you adjust the End-Point of a turnout or sectional track the track is "
-"extended by a straight track segment.\n"
-msgstr ""
-"Jos muutat palaraiteen tai vaihteen päätepistettä, uusi raideosa luodaan "
-"edellisen jatkeeksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:72
-msgid ""
-"You can change the radius of a Straight or Curved track that is connected at "
-"one End-Point by holding down the Shift key while dragging on it.\n"
-msgstr ""
-"Voit muuttaa suoran tai kaarevan raiteen sädettä, mikäli se on toisesta "
-"päästä liitetty. Tämä tapahtuu pitämällä vaihto-näppäintä painettuna "
-"raahattaessa raiteen toisesta päästä hiiren vasemmalla painikkeella.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:73
-msgid ""
-"This lets you change a Straight track into a Curved track (and vice versa) "
-"as well as changing the radius of a Curved track.\n"
-msgstr ""
-"Näin voit muuttaa suoran raiteen kaarteeksi ja päin vastoin, sekä muuttaa "
-"kaarteen sädettä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:74
-msgid "You can draw a variety of different types of benchwork:\n"
-msgstr "Voit piirtää eri tyyppisiä runkorakenteita:\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:75
-msgid "- rectangular (1x2, 2x4 etc)\n"
-msgstr "- suora (25 x 50 mm, 50 x 100 mm jne)\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:76
-msgid "- L girders\n"
-msgstr "- L-palkki\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:77
-msgid "- T girders\n"
-msgstr "- T-palkki\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:78
-msgid "You can also draw them in different orientations.\n"
-msgstr "Voit myös piirtää ne eri asentoihin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:79
-msgid "We will draw two 3x6 inch L-girders.\n"
-msgstr "Piirrämme nyt 3x6 tuuman L-palkkeja.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:80
-msgid ""
-"The flange of the top L-Girders is on the outside edge of the girders. We "
-"want to change the girder so both flanges are on the inside.\n"
-msgstr ""
-"Ylemmän L-palkin pystylape on rakenteen ulkopuolella. Haluamme että "
-"molempien palkkien pystylappeet ovat sisäpuolella.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:81
-msgid "We will use the <Describe> command for this.\n"
-msgstr "Käytämme määrittele-komentoa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:82
-msgid "Change the Orientation to Right.\n"
-msgstr "Muuta \"suunta\" \"oikeaksi\".\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:83
-msgid "Now both flanges are on the inside of the two girders.\n"
-msgstr "Nyt kummankin L-palkin pystylappeet ovat sisäpuolella.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:84
-msgid ""
-"Pushing the <Describe> button will cancel any other command in progress.\n"
-msgstr ""
-"Määrittele -komennon valitseminen keskeyttää minkä tahansa meneillään olevan "
-"komennon.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:85
-msgid ""
-"Here we will begin to create a Curved track which is a two step process.\n"
-msgstr ""
-"Tässä aloitamme luomaan kaarevaa raidetta, joka on kaksiosainen toiminto.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:86
-msgid ""
-"When we clicked on the <Describe> button, the current command was "
-"cancelled.\n"
-msgstr ""
-"Klikkaamalla Määrittele -painiketta, sen hetkinen komento peruutettiin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:87
-msgid ""
-"When in <Describe> mode, selecting any object will print a description in "
-"the Status Bar and display a Dialog showing properties of the clicked-on "
-"object.\n"
-msgstr ""
-"Määrittely -tilassa minkä tahansa objektin valinta tulostaa sen kuvauksen "
-"tilariville sekä avaa ikkunan, jossa esitetään valitun kohteen "
-"ominaisuudet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:88
-msgid ""
-"Certain parameters of the object can be changed. In this case we'll change "
-"the Length\n"
-msgstr ""
-"Tiettyjä parametreja voi muuttaa. Tässä tapauksesa muutamme pituutta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:89
-msgid "Let's look at the Turnout...\n"
-msgstr "Katsokaamme vaihdetta...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:90
-msgid "and change the turnout Title.\n"
-msgstr "ja muuttakaamme sen otsikkoa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:91
-msgid "You can change the contents of Text...\n"
-msgstr "Voit muuttaa tekstin sisältöä...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:92
-msgid "and its size.\n"
-msgstr "ja kokoa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:93
-msgid ""
-"If you select a Note, the Description dialog appears which displays the "
-"contents of the note.\n"
-msgstr ""
-"Jos valitset muistiinpanon, avautuu ikkuna, josta voit muuttaa muistiinpanon "
-"sisältöä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:94
-msgid ""
-"Like the <Curve> track command, there are several ways to create a Circle "
-"track.\n"
-msgstr "Kuten kaarteet, myös ympyräradat voidaan luoda usealla eri tavalla.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:95
-msgid ""
-"The first is to specify a fixed radius and simply drag the Circle into "
-"position.\n"
-msgstr ""
-"Ensimmäinen tapa on määritellä ympyrän säde ja yksinkertaisesti raahaamalla "
-"ympyrä paikoilleen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:96
-msgid "We will change the Radius before proceeding.\n"
-msgstr "Muutamme säteen ennen kuin jatkamme.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:97
-msgid "The next method is to drag from the edge of the Circle to the center.\n"
-msgstr "Seuraava tapa on raahata ympyrän kehältä kohti keskipistettä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:98
-msgid ""
-"The last is similar, but you drag from the center of the Circle to the "
-"edge.\n"
-msgstr ""
-"Viimeinen tapa on vastaavanlainen, mutta raahataan ympyrän keskipisteestä "
-"ulos päin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:99
-msgid ""
-"We have built a siding using Sectional track and have 2 End-Points that "
-"don't line up and are not connected automatically when placing the sectional "
-"track.\n"
-msgstr ""
-"Olemme rakentaneet sivuraiteen käyttäen palaraiteita. Kaksi päätepistettä "
-"eivät ole riittävän kohdakkain, jotta ne olisi automaattisesti liitetty "
-"toisiinsa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:100
-msgid ""
-"We use the <Connect> command to adjust neighboring tracks so the gap is "
-"closed.\n"
-msgstr ""
-"Käytämme liitä-komentoa säätääksemme viereisiä raideosia siten, että rako "
-"saadaan suljettua.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:101
-msgid ""
-"Note: the adjustments are only done on tracks which have only 1 or 2 "
-"connections. In this example the Turnouts would not be affected.\n"
-msgstr ""
-"Huom: Säätö tehdään vain niille raideosille, joilla on vain yksi tai kaksi "
-"liitosta. Tässä esimerkissä vaihteet jäävät koskemattomiksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:102
-msgid "And now the gap is closed.\n"
-msgstr "Nyt rako on suljettu.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:103
-msgid "Other tracks have been shifted slightly to close the gap.\n"
-msgstr "Muita raideosia siirrettiin hieman, jotta rako saatiin suljettua.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:104
-msgid "You can see these slight mis-alignments.\n"
-msgstr "Voit nähdä hienoisen heiton raideosien kohdistuksessa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:105
-msgid "But they will have no effect when the layout is actually built.\n"
-msgstr "Mutta sillä ei ole merkitystä kun rata todellisuudessa rakennetaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:106
-msgid ""
-"After working with Sectional track you might get to point where these mis-"
-"alignments have accumulated and you wish to remove them.\n"
-msgstr ""
-"Työskenneltyäsi palaraiteiden kanssa voit päätyä tilanteeseen, jossa nämä "
-"kohdistusten heitot ovat kertautuneet ja haluat korjata ne.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:107
-msgid ""
-"You can remove these slight mis-alignments by tightening the tracks starting "
-"from a unconnected End-Point. Use Shift-Left-Click with the <Connect> "
-"command.\n"
-msgstr ""
-"Voit poistaa kohdistusten heiton tiukentamalla raideosat alkaen irrallisesta "
-"päätepisteestä. Käytä liitä-komentoa ja pidä vaihto-näppäintä painettuna kun "
-"klikkaat hiiren vasemmalla painikkeella.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:108
-msgid "First use the <Split> command to disconnect the tracks.\n"
-msgstr "Ensin irrotamme raideosat pilko-komennolla.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:109
-msgid ""
-"Then with the <Connect> command, Shift-Left-Click on the 2 End-Points.\n"
-msgstr ""
-"Sitten liitä-komennolla, vaihto + hiiren vasen klikkaus molempiin "
-"päätepisteisiin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:110
-msgid "In example shows a simple figure-8 layout using Sectional track.\n"
-msgstr ""
-"Tässä esimerkissä on yksinkertainen palaraiteista tehty kahdeksikkorata.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:111
-msgid ""
-"You will notice that the tracks do not line up exactly in one location.\n"
-msgstr "Huomaat, etteivät raiteet aivan kohtaa yhdessä kohdassa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:112
-msgid ""
-"We can use the <Connect> command to move the connecting tracks slightly and "
-"connect the 2 End-Points.\n"
-msgstr ""
-"Voimme käyttää liitä-komentoa siirtääksemme raideosia hieman, jotta raiteet "
-"saadaan liitetyksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:113
-msgid "The two End-Points are now aligned and connected.\n"
-msgstr "Päätepisteet ovat nyt kohdistettu ja liitetty.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:114
-msgid "The connection was made by adding small gaps in other tracks.\n"
-msgstr "Liitos tehtiin lisäämällä hienoisia rakoja muiden raideosien väliin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:115
-msgid "There are several ways to create a Curved track.\n"
-msgstr "On useita tapoja luoda kaarevia raiteita.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:116
-msgid ""
-"You can choose which to use by clicking on the small button to the left of "
-"<Curve> command button if the current Curve command is not the one you "
-"want.\n"
-msgstr ""
-"Tavan voi valita Kaarre-painikkeen oikealla puolella olevasta pienestä "
-"nuolesta avautuvan valikon kautta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:117
-msgid ""
-"The first is by clicking on the first End-Point and dragging in the "
-"direction of the Curve.\n"
-msgstr ""
-"Ensimmäinen tapa on klikata kaarteen ensimmäistä päätepistettä ja raahata "
-"hiirellä kaarteen suntaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:118
-msgid ""
-"You will see a straight track with a double ended Red arrow at the end.\n"
-msgstr "Näet suoran raiteen, jonka päässä on kaksisuuntainen punainen nuoli.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:119
-msgid "Click and drag on one of the Red arrows to complete the Curve.\n"
-msgstr "Raahaa nuolesta asetellaksesi kaarre oikean muotoiseksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:120
-msgid ""
-"The next method is to click at one End-Point and drag to the center of the "
-"Curve.\n"
-msgstr ""
-"Seuraava tapa on klikata kaarteen päätepistettä ja raahata hiirellä kaarteen "
-"keskipisteeseen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:121
-msgid ""
-"Now you will see the double ended Red arrow connected to the center of the "
-"Curve marked by a small circle.\n"
-msgstr ""
-"Näet kaksisuuntaisen nuolen, joka on yhdistetty viivalla karteen "
-"keskipistettä kuvaavaan pieneen ympyrään.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:122
-msgid "As before, drag on one of the Red arrows to complete the Curve.\n"
-msgstr "Kuten aikaisemminkin, raahaa nuolesta viimeistelläksesi kaarteen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:123
-msgid ""
-"The next method is similar to the last except that you drag first from the "
-"center of the Curve to one End-Point.\n"
-msgstr ""
-"Seuraava tapa on saman kaltainen kuin edellinen, paitsi että toiminto "
-"aloitetaan raahaamalla kaarteen keskipisteestä kaarteen päätepisteeseen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:124
-msgid "Once again, drag on a Red arrow to complete the Curve.\n"
-msgstr "Viimeistele kaarre raahaamalla nuolesta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:125
-msgid ""
-"The last method begins by drawing a line between the two End-Points of the "
-"Curve. This forms the Chord of the Curve.\n"
-msgstr ""
-"Viimeinen tapa aloitetaan vetämällä viiva kaarteen päätepisteiden välille. "
-"Tämä muodostaa kaarteen jänteen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:126
-msgid "Now drag on a Red arrow to complete the Curve.\n"
-msgstr "Viimeistele kaarre nuolesta raahaamalla.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:127
-msgid "This demo will construct a control panel for part of a bigger layout.\n"
-msgstr ""
-"Tässä demossa luodaan ohjauspaneeli osaksi suurempaa ratasuunnitelmaa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:128
-msgid "For our control panel we will use Œ\" lines. \n"
-msgstr "Ohjauspaneelissa käytämme 1/4 tuuman viivoja.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:129
-msgid "Also, we will use a 1/8\" grid to lay out our controls.\n"
-msgstr "Käytämme myös 1/8 tuuman kohdistusruudukkoa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:130
-msgid ""
-"First, we will set up the Snap Grid for 1\" grid lines and 8 divisions.\n"
-msgstr ""
-"Ensin asetamme kohdistusruudukkoon 1 tuuman ruutuvälin 8 osan jaolla.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:131
-msgid "Now, clear the layout and turn on the Snap Grid.\n"
-msgstr ""
-"Nyt tyhjennämme ratasuunnitelman ja otamme kohdistusruudukon käyttöön.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:132
-msgid "First step: draw the lines representing the tracks.\n"
-msgstr "Ensimmäiseksi: Piirrä viivat kuvaamaan raiteita.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:133
-msgid "We specify the line width in pixels.\n"
-msgstr "Määrittelemme viivan paksuuden pikseleinä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:134
-msgid ""
-"To create a Œ\" line, divide the dots-per-inch (DPI) of your display by 4 "
-"and then by the drawing scale (which is 2 right now).\n"
-msgstr ""
-"Luodaksesi 1/4 tuuman viivan, jaa näyttösi DPI (pisteitä tuumalla, dots per "
-"inch) neljällä ja sitten piirron mittakaavalla (joka tässä on 2).\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:135
-msgid ""
-"For MS-Windows the DPI is usually 98, so choose: 98/4/2 = 12 "
-"(approximately).\n"
-msgstr ""
-"Microsoft Windows käyttää yleensä DPI arvoa 98, joten valitse: 98/4/2 = 12 "
-"(suunnilleen).\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:136
-msgid "For Linux, the DPI is usually 72, so choose: 72/4/2 = 9.\n"
-msgstr "Linuxissa DPI on usein 72, joten valitse: 72/4/2 = 9.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:137
-msgid ""
-"Notice how the Snap Grid keeps the main line and siding track parallel and "
-"the connecting tracks and spur at a 45° angle.\n"
-msgstr ""
-"Huomaa, kuinka kohdistusruudukko auttaa pitämään pääradan ja sivuraiteen "
-"saman suuntaisina, sekä yhdistävät raiteet ja piston 45° kulmassa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:138
-msgid "Second step: add LEDs for the turnout position indicators.\n"
-msgstr "Toinen vaihe: Lisää LEDit osoittamaan vaihteiden asentoa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:139
-msgid "We will use T1 red and green LEDs.\n"
-msgstr "Käytämme punaisia ja vihreitä T1 LEDejä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:140
-msgid "We will zoom in to show positioning.\n"
-msgstr "Lähennämme näkymää asettelun helpottamiseksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:141
-msgid ""
-"Notice that when we are in the correct position (on the 1/8\" grid), the "
-"Marker lines on the bottom and left rulers will high-light the tick marks. "
-"When both ticks are high-lighted, press the space bar to finalize the LED.\n"
-msgstr ""
-"Huomaa että kun LEDi on oikeassa kohdassa kohdistusruudukon jakoon nähden, "
-"viivaimien merkinnät korostetaan. Kun sekä vaaka- että pystyviivaimen "
-"merkinnät ovat korostettuna, paina välilyöntiä hyväksyäksesi LEDin "
-"asettelun.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:142
-msgid "Now we'll add push buttons to control the turnouts.\n"
-msgstr "Nyt lisäämme painonapit, joilla ohjataan vaihteita.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:143
-msgid "Let's add signals to our siding.\n"
-msgstr "Lisätään sivuraiteelle opastimet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:144
-msgid ""
-"The entrance to the siding will be protected by double headed signals.\n"
-msgstr "Sivuraiteelle tulo suojataan kaksiosaisella opastimella.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:145
-msgid "First turn off the Snap Grid.\n"
-msgstr "Ota ensin kohdistusruudukko pois käytöstä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:146
-msgid "Rotate the signals and move them to the proper locations.\n"
-msgstr "Pyöritä opastimia ja siirrä ne paikoilleen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:147
-msgid ""
-"We rotate the signals by Shift-Right-Click and select 90° CW on the popup "
-"menu. We can not show the popup menu in demo mode, but will simulate the "
-"effect.\n"
-msgstr ""
-"Pyöritämme opastimia pitämällä vaihto-näppäintä painettuna ja klikkaamalla "
-"hiiren oikealla painikkeella avataksemme ponnahdusvalikon. Sieltä valitsemme "
-"90° MP (myötäpäivään). Demossa ei voida näyttää ponnahdusvalikkoa, mutta "
-"näytämme komennon vaikutuksen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:148
-msgid "The exits from the siding will be protected by single headed signals.\n"
-msgstr "Sivuraiteelta lähdöt suojataan yksiosaisilla opastimilla.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:149
-msgid "Now for some touch-ups.\n"
-msgstr "Nyt kohennetaan hieman kaaviota.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:150
-msgid "Notice when the line meet at an angle there is a gap.\n"
-msgstr "Huomaa viivojen liitoskohdissa pienet raot.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:151
-msgid "We will fill this gap with the Œ\" dot.\n"
-msgstr "Näytämme ne 1/4 tuuman pisteillä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:152
-msgid ""
-"Note: Win95/Win98/WinME does not support drawing lines with flat end-caps, "
-"but only with round end-caps.\n"
-msgstr ""
-"Huom: Win96/Win98/WinME ei tue tasapäisten viivojen piirtoa, vaan ainoastaan "
-"pyöreäpäisiä viivoja.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:153
-msgid "Users on those platforms will not see the gap.\n"
-msgstr "Mainittujen käyttöjärjestelmien käyttäjät eivät näe näitä rakoja.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:154
-msgid ""
-"Add an arrow head to indicate the tracks that connect to the rest of the "
-"layout.\n"
-msgstr ""
-"Lisää nuolenkärjet kuvaamaan raiteiden jatkumista muihin radan osiin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:155
-msgid "Rotate the arrow head by 180° and move into position.\n"
-msgstr "Pyöritä nuolenkärkeä 180° ja siirrä se paikoilleen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:156
-msgid "And add some labels.\n"
-msgstr "Lisää joitakin merkintöjä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:157
-msgid ""
-"We want to print our control panel onto a 8œx11 page, but the control panel "
-"is a bit too wide.\n"
-msgstr ""
-"Haluamme tulostaa ohjeuspaneelin 8 1/2 x 11 tuuman kokoiseksi, mutta "
-"ohjauspaneeli on hieman liian suuri.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:158
-msgid "Lets tighten it up a bit.\n"
-msgstr "Tiivistetään hieman.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:159
-msgid ""
-"First turn the Snap Grid on again so any moves we make will keep objects on "
-"the grid.\n"
-msgstr ""
-"Ota taas kohdistusruudukko käyttöön, jotta objektit pysyvät linjassa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:160
-msgid "Lets move the spur track the left 3/4\"\n"
-msgstr "Siirrämme pistoraidetta vasemmalle 3/4 tuumaa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:161
-msgid "Now move the right side of the siding over.\n"
-msgstr "Siirretään liikennepaikan oikeaa puolta vasemmalle.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:162
-msgid "Now, adjust the ends of the mainline and siding tracks.\n"
-msgstr "Lyhennä nyt pääraide ja sivuraide sopivan mittaisiksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:163
-msgid "And move the title over as well.\n"
-msgstr "Siirrä myös otsikkoa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:164
-msgid "Now you can print it.\n"
-msgstr "Nyt voit tulostaa sen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:165
-msgid "The cross-hairs on the LEDs and switch show the centers for drilling.\n"
-msgstr ""
-"LEDien ja kytkimien ristikkoviiva osoittaa niiden keskipisteet poraamista "
-"varten.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:166
-msgid ""
-"Pressing the <Delete> button lets you delete selected tracks from the "
-"layout.\n"
-msgstr ""
-"Poista-painikkeella voidaan poistaa valitut raiteet ratasuunnitelmsta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:167
-msgid ""
-"First you select the tracks you want to delete, and then press the <Delete> "
-"button.\n"
-msgstr ""
-"Valitse ensin raideosat, jotka haluat poistaa ja paina sitten Poista-"
-"nappia.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:168
-msgid ""
-"If you delete a track connected to an easement curve, then the easement "
-"curve is deleted as well.\n"
-msgstr ""
-"Jos poistat raideosan, joka on liitetty kaarreloivennukseen, poistetaan myös "
-"kaarreloivennus.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:169
-msgid "You can use the <Undo> command to undelete tracks.\n"
-msgstr "Voit käyttää Kumoa-toimintoa palauttaaksesi poistamasi raideosat.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:170
-msgid ""
-"If you Left-Drag on the layout you can select all tracks within an area.\n"
-msgstr ""
-"Raahaamalla hiiren vasemmalla voit valita kaikki raideosat valitulta "
-"alueelta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:171
-msgid ""
-"Note, only tracks within the selected area are deleted. Since the easement "
-"curve is connected to a deleted track, it is deleted as well.\n"
-msgstr ""
-"Huom: Vain valitulla alueella olevat raideosat poistetaan. Koska "
-"kaarreloivennus liittyy poistettavaan raideosaan, poistetaan se myös.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:172
-msgid ""
-"The demo also simulates entering values and selecting options on various "
-"dialogs.\n"
-msgstr ""
-"Tässä demossa simuloidaan myös arvojen syöttämistä ja valintojen tekemistä "
-"dialogeissa (ikkunoissa).\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:173
-msgid ""
-"This is simulated by drawing a rectangle around the control when values are "
-"entered or changed.\n"
-msgstr ""
-"Tämä esitetään piirtämällä nelikulmio sen kontrollin ympärille, jonka arvoja "
-"ollaan syöttämässä tai muuttamassa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:174
-msgid ""
-"Here we are going to make some changes to the Display dialog. Notice how "
-"this is simulated.\n"
-msgstr ""
-"Tässä teemme joitakin muutoksia Näyttö asetuksiin. Huomaa esitystapa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:175
-msgid ""
-"This effect is only used in demonstration mode. During normal operation you "
-"will not see this.\n"
-msgstr ""
-"Tämä tehoste on käytössä ainoastaan demo -tilassa. Normaalissa käyttötilassa "
-"näin ei ole.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:176
-msgid "Dimension Lines are used to mark the distances between two points.\n"
-msgstr ""
-"Mittajanoja käytetään merkitsemään kahden pisteen välisiä etäisyyksiä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:177
-msgid ""
-"Here we will create a Dimension Line to show the separation between two "
-"tracks.\n"
-msgstr ""
-"Tässä luodaan mittajana näyttämään kahden raiteen välistä etäisyyttä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:178
-msgid ""
-"We might also want to measure the distance between two structures. In this "
-"case we will use a larger dimension line.\n"
-msgstr ""
-"Haluamme myös mitata kahden rakennuksen välisen etäisyyden. Tässä "
-"tapauksessa käytämme suurempaa mittajanaa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:179
-msgid ""
-"We can use the <Describe> command to change the position of the Dimension "
-"Line and the size of the numbers.\n"
-msgstr ""
-"Voimme käyttää määrittele-komentoa muuttaaksemme mittajanan sijaintia ja "
-"numeroiden kokoa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:180
-msgid ""
-"This example will show the effect of using easements while joining tracks.\n"
-msgstr ""
-"Tässä esimerkissä näytetään kaarreloivennuksen vaikutus yhdistettäessä "
-"raiteita.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:181
-msgid "First, we'll enable easements.\n"
-msgstr "Ensiksi otetaan kaarreloivennus käyttöön.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:182
-msgid ""
-"We've selected sharp easements. The minimum radius curve we can use will be "
-"9.75\"\n"
-msgstr ""
-"Olemme valinneet jyrkät kaarreloivennukset. Pienin käytettävissä oleva "
-"kaarresäde on 9,75 tuumaa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:183
-msgid "Notice the label on the Easement button has changed to 'Sharp'.\n"
-msgstr ""
-"Huomaa että kaarreloivennus-painikkeen (Easements) tila on muuttunut "
-"\"jyrkäksi\" (Sharp).\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:184
-msgid ""
-"Note the connecting curve does not quite meet the straight tracks. This the "
-"'Offset'.\n"
-msgstr ""
-"Huomaa, ettei yhdistävä kaarre kohtaa aivan tarkasti suoria raiteita. Tämä "
-"on \"siirtymä\".\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:185
-msgid "Here the connecting curve is too small.\n"
-msgstr "Tässä yhdistävä kaarre on liian pieni.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:186
-msgid ""
-"The connecting curve is made of three tracks, the curve and two easement "
-"segments on each end.\n"
-msgstr ""
-"Yhdistävä kaarre on tehty kolmesta raideosasta: kaarteesta ja molemmissa "
-"päissä olevista kaarreloivennuksesta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:187
-msgid ""
-"We have designed part of the layout with a siding, 2 branches and a spiral "
-"loop. We want to set Elevations.\n"
-msgstr ""
-"Meillä on ratasuunnitelma jossa on sivuraide, kaksi haaraa ja silmukka, joka "
-"muodostaa radalle risteyksen.\n"
-" Haluamme asetella radan korkeustasot.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:188
-msgid "First we will set elevations at the end of the branches.\n"
-msgstr "Ensin asetamme korkeustasot haarojen päihin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:189
-msgid "We'll select the end of the top branch and set the Elevation to 4\"\n"
-msgstr ""
-"Valitsemme ylemmän haaran pään ja asetamme sille haluamamme korkeustason.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:190
-msgid "First, click on the End-Point.\n"
-msgstr "Klikkaa ensin päätepistettä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:191
-msgid "Next, pick Defined on the Elevation dialog Radio box.\n"
-msgstr ""
-"Seuraavaksi muuta korkeustasojen määrittely ikkunassa tyypiksi \"Määritelty"
-"\".\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:192
-msgid "And set the Elevation to 4.\n"
-msgstr "Ja aseta haluttu korkeustaso.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:193
-msgid "Now, select the other branch and set it's elevation to 2\"\n"
-msgstr "Vlitse nyt toinen haara ja aseta sen korkeustaso.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:194
-msgid "We can move the Elevations by using Right-Drag\n"
-msgstr ""
-"Voimme siirtää korkeustasojen merkintöjä raahaamalla hiiren oikealla "
-"painikkeella.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:195
-msgid "Now, we set the Elevation at one end of the Siding.\n"
-msgstr "Asetetaan nyt sivuraiteen toisen pään korkeustaso.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:196
-msgid "We want to find the elevations where the 2 tracks cross.\n"
-msgstr "Voimme selvittää korkeustasot raiteiden risteyskohdassa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:197
-msgid "We picked an End-Point on the upper track.\n"
-msgstr "Valitsimme raiteiden liitoskohdan ylemmältä radalta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:198
-msgid ""
-"XTrackCAD has computed the Elevation (2.34\") at this point based on the "
-"Elevation at the siding and a combination of the of the first Elevations.\n"
-msgstr ""
-"XTrackCAD on laskenut tälle pisteelle korkeustason aiemmin antamiemme "
-"korkeustasojen perusteella.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:199
-msgid ""
-"We create a Computed Elevation here that will be automatically adjusted "
-"whenever the other Elevations are changed.\n"
-msgstr ""
-"Luomme tähän \"lasketun\" korkeustason, joka päivitetään automaattisesti jos "
-"muita korkeustasoja muutetaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:200
-msgid ""
-"The Compute Elevation is based on Elevations at end of both of the "
-"branches. We may want to base the Elevation on only one branch. For "
-"example if one branch was the mainline we don't want the other branch "
-"affecting this Computed Elevation.\n"
-msgstr ""
-"Laskettu korkeustaso perustuu molempien haarojen korkeustasoihin. Saatamme "
-"haluta sitoa lasketun korkeustason vain yhteen haaraan. Jos esimerkiksi yksi "
-"haaroista on päärata, emme halua muiden haarojen vaikuttavan tähän "
-"laskettuun korkeustasoon.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:201
-msgid "We do this by Ignoring the branch we don't want.\n"
-msgstr "Teemme tämän hylkäämällä haaran, jota emme halua käyttää.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:202
-msgid "We'll ignore the lower branch.\n"
-msgstr "Hylkäämme alemman haaran.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:203
-msgid ""
-"Notice at the End-Point where the tracks cross, we see the Elevation has "
-"changed from 2.34 to 2.64.\n"
-msgstr ""
-"Huomaa kuinka risteyskohdan laskettu korkeustaso muuttui 2,34 tuumasta 2,64 "
-"tuumaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:204
-msgid "Now we want to know the elevation of the lower track.\n"
-msgstr "Nyt haluamme tietää alemman radan korkeustason.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:205
-msgid "There is no End-Point on the lower track here.\n"
-msgstr "Risteyksen kohdalla ei ole raiteiden liitosta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:206
-msgid ""
-"Use Shift-Left-Click to Split the track and create an End-Point we can use "
-"for an Elevation,\n"
-msgstr ""
-"Paina vaihto-näppäintä ja klikkaa hiiren vasemmalla painikkeella rataa "
-"luodaksesi liitoskohdan korkeustasoja varten\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:207
-msgid "and create another Computed Elevation point.\n"
-msgstr "ja luo sen kohdalle toinen laskettu korkeustaso.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:208
-msgid "Now we want to label the Grade on this section of track.\n"
-msgstr "Nyt haluamme merkitä raiteen tämän kohdan nousukulman.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:209
-msgid ""
-"Again, since there is no End-Point nearby, we split the track to create an "
-"End-Point we can use,\n"
-msgstr ""
-"Taaskaan ei ole sopivaa raideliitosta lähistöllä, joten pilkomme raiteen\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:210
-msgid "and create a Grade marker.\n"
-msgstr "ja luomme uuteen liitoskohtaan nousukulman merkinnän.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:211
-msgid "Note the marker has an arrow pointing in the upwards direction.\n"
-msgstr "Huomaa kuinka nuolella ilmaistaan nousun suunta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:212
-msgid ""
-"The last thing we want to do is to create a Station label that we'll use in "
-"the <Profile> command.\n"
-msgstr ""
-"Lopuksi haluamme vielä luoda aseman merkinnän, jota käytämme myöhemmin "
-"rataprofiilissa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:213
-msgid "Now, set the Elevation to Station and enter the its name.\n"
-msgstr "Valitse \"Asema\" ja syötä tekstikenttään aseman nimi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:214
-msgid ""
-"XTrackCAD can help find tracks that are curved too sharply or are too "
-"steep. These tracks are Exception tracks and are drawn in the Exception "
-"track color.\n"
-msgstr ""
-"XTrackCAD auttaa löytämään raiteet, jotka ovat kaartuvat liian jyrkästi tai "
-"ovat liian jyrkkiä. Näitä kutsutaan erityisraiteiksi ja ne piirretään omalla "
-"värillään.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:215
-msgid ""
-"In this example we have a curved track with radius of 9\" and a straight "
-"track with a grade of 3.8%.\n"
-msgstr ""
-"Tässä esimerkissä meillä on karre, jonka säde on 9 tuumaa ja suora jonka "
-"nousukulma on 3,8%.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:216
-msgid " \n"
-msgstr " \n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:217
-#, fuzzy
-msgid ""
-"The Layout dialog shows the Minimum Track Radius is 9\" and the Maximum "
-"Track Grade is 5%.\n"
-msgstr ""
-"Ohjelman ominaisuuksissa on määritelty pienimmäksi kaarresäteeksi 9 tuumaa "
-"ja suurimmaksi nousukulmaksi 5%.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:218
-msgid ""
-"If we make the curved track sharper it will be drawn in the Exception "
-"color.\n"
-msgstr ""
-"Jos muutamme kaarretta jyrkemmäksi, se piirretään erityisraiteiden värillä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:219
-msgid ""
-"If we make the straight track steeper it will also be drawn in the Exception "
-"color.\n"
-msgstr ""
-"Jos teemme suorasta raiteesta jyrkemmän, myös se piirretään erityisraiteiden "
-"värillä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:220
-msgid ""
-"You can change the Exception color on the Colors dialog from the Options "
-"menu.\n"
-msgstr "Erityisraiteiden väritystä voi muuttaa Asetukset|Värit valikosta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:221
-msgid ""
-"The unconnected End-Point of any track can be extended with the <Modify> "
-"command using Right-Drag.\n"
-msgstr ""
-"Minkä tahansa raiteen irrallista päätä voi pidentää Muokkaa-komennolla "
-"raahaamalla hiiren oikealla painikkeella.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:222
-msgid "Select the End-Point and Right-Drag.\n"
-msgstr "Valitse päätepiste ja raahaa oikealla painikkeella.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:223
-msgid "The extending track can be straight...\n"
-msgstr "Jatke voi olla suora...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:224
-msgid "... or curved.\n"
-msgstr "...tai kaareva.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:225
-msgid ""
-"If you extend a Straight or Curved flex track and enable Easements then an "
-"Easement curve will be automatically generated when you extend the track.\n"
-msgstr ""
-"Jos jatkat suoraa tai kaarevaa fleksiraidetta ja kaarreloivennus on "
-"käytössä, luodaan automaattisesti kaarreloivennus pidentämisen yhteydessä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:226
-msgid ""
-"The <Flip> command will create a mirror image of the selected objects.\n"
-msgstr "Peilaus-komento luo peilikuvan valitusta objektista.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:227
-msgid "After selecting the object, drag a line which will form the mirror.\n"
-msgstr "Valittuasi objektin, raahaa hiirellä peilauslinja.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:228
-msgid "The mirror line does not have to be vertical or horizontal.\n"
-msgstr "Peilauslinjan ei tarvitse olla vaaka- tai pystysuuntainen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:229
-msgid "You can also flip any number of objects.\n"
-msgstr "Voit myös peilata useita objekteja.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:230
-msgid "Watch what happens to the structure and turnout titles.\n"
-msgstr "Katso mitä tapahtuu rakennusten ja vaihteen otsikoille.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:231
-msgid ""
-"Note that the turnout title has been changed from the Medium Right to Medium "
-"Left. When turnouts are flipped, XTrackCAD will try to find a matching "
-"turnout and if found will change the name.\n"
-msgstr ""
-"Huomaa, että vaihteen otsikko muutettiin oikeasta (right) vasemmaksi (left). "
-"Kun vaihteita peilataan, XTrackCAD yrittää löytää vastaavan toispuoleisen "
-"vaihteen ja sellaisen löytäessään vaihtaa nimen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:232
-msgid ""
-"Structures do not have Right and Left hand versions. Their title is changed "
-"to indicate that they were flipped.\n"
-msgstr ""
-"Rakennuksilla ei ole oikeaa ja vasenta versiota. Niiden otsikko muutetaan "
-"siten, että se kuvaa objektin olevan peilattu (flipped).\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:233
-msgid "You can use the <Describe> command to change their title.\n"
-msgstr "Voit käyttää määrittele-komentoa muuttaaksesi niiden otsikoita.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:234
-msgid ""
-"The <Group> and <Ungroup> commands (on the Tools menu) are a powerful way to "
-"manipulate Turnout and Structure definitions.\n"
-msgstr ""
-"Ryhmittele ja rymittelyn purku komennot (Hallinta-valikossa) ovat tehokas "
-"keino käsitellä raideosien ja rakennusten määrittelyjä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:235
-msgid "We'll start with a simple turnout and add a switch machine.\n"
-msgstr "Aloitamme yksinkertaisesta vaihteesta ja vaihdekoneistosta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:236
-msgid ""
-"Now that we have drawn a rough outline of a switch machine we will group it "
-"with the turnout definition.\n"
-msgstr ""
-"Nyt kun olemme piirtäneet karkean hahmotelman vaihdekoneistosta, "
-"ryhmittelemme sen uudeksi vaihdemäärittelyksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:237
-msgid "First we Select the objects in the new definition.\n"
-msgstr "Ensin valitsemme objektit uutta määrittelyä varten.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:238
-msgid "Now do the <Group> command.\n"
-msgstr "Nyt suoritetaan ryhmittely-komento.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:239
-msgid ""
-"The <Group> command dialog shows the Title (Manufacturer, Description and "
-"Part Number) of the new definition. This information is taken from the "
-"Selected objects you are grouping.\n"
-msgstr ""
-"Ryhmittely-komennon ikkunassa näytetään valmistaja, kuvaus sekä tuotenumero. "
-"Nämä tiedot on saatu ryhmittelyä varten valituista objekteista.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:240
-msgid ""
-"The 'Replace with new group?' toggle will replace the Selected objects with "
-"the new definition.\n"
-msgstr ""
-"Jos \"Korvaa uudella ryhmällä?\" on valittuna, ryhmittelyä varten valitut "
-"objektit korvataan juuri luodulla uudella ryhmällä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:241
-msgid ""
-"If we don't change the Title then the new definition will replace the "
-"existing definition.\n"
-msgstr ""
-"Jos otsikkotietoja (valmistaja, kuvaus ja tuotenumero) ei muuteta, korvaa "
-"tämä uusi määrittely jo olemassa olevan saman nimisen määrittelyn.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:242
-msgid "We'll give this definition a new Description.\n"
-msgstr "Annamme tälle määrittelylle uuden kuvauksen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:243
-msgid "We're done with this definition. Press Ok.\n"
-msgstr "Määrittely on valmis ja se hyväksytään painamalla Ok.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:244
-msgid "You will see the updated image on the HotBar.\n"
-msgstr "Näet päivitetyn kuvan Hot Barissa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:245
-msgid ""
-"The <Ungroup> command replaces any Selected turnouts or structures with "
-"their parts.\n"
-msgstr ""
-"Ryhmittelyn purku komento korvaa valittut vaihteet tai rakennukset niiden "
-"osilla.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:246
-msgid ""
-"Structures and non-track segements of turnouts are composed of Lines, "
-"Circles and other shapes. In this turnout these are the two lines and the "
-"two squares.\n"
-msgstr ""
-"Rakennukset ja muut lohkot, jotka eivät ole raiteita, muodostuvat viivoista "
-"ympyröistä ja muista muodoista. Tässä vaihteessa on kaksi viivaa ja kaksi "
-"nelikulmiota.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:247
-msgid ""
-"We will Ungroup this turnout and see how the individual parts can be "
-"changed.\n"
-msgstr ""
-"Puramme tämän vaihteen ryhmittelyn nähdäksemme kuinka yksittäisiä osia "
-"voidaan muuttaa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:248
-msgid "First Select the turnout and then Ungroup it.\n"
-msgstr "Ensin valitsemme vaihteen ja sitten puramme ryhmittelyn.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:249
-msgid "Notice that the Title now indicates the turnout is Ungrouped.\n"
-msgstr "Huomaa että otsikko näyttää vaihteen ryhmittelyn olevan purettu.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:250
-msgid "Hit Escape to deselect everything.\n"
-msgstr "Paina Esc-näppäintä poistaaksesi valinnat objekteista.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:251
-msgid "Now Select the lines and squares.\n"
-msgstr "Valitse nyt viivat ja nelikulmiont.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:252
-msgid ""
-"We could modify these object or add new ones. For now we'll just delete "
-"them.\n"
-msgstr ""
-"Voisimme muokata näitä objekteja tai lisätä uusia. Nyt kuitenkin vain "
-"poistamme ne.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:253
-msgid "And move the Label out of the way.\n"
-msgstr "Ja siirrämme otsikon pois tieltä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:254
-msgid "Notice that the turnout has been broken into three parts.\n"
-msgstr "Huomaa että vaihde on purettu kolmeen osaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:255
-msgid ""
-"Two ends of the turnout, from the frog to the end of the diverging leg and "
-"from the points to the left, are now straight track sections.\n"
-msgstr ""
-"Haarautuvan raiteen takajatkos sekä vaihteen etujatkos ovat nyt suoria "
-"raideosia.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:256
-msgid ""
-"The a turnout is made of a number of individual straight and curved track "
-"segements. This turnout had four segments:\n"
-msgstr ""
-"Vaihde on tehty useasta erillisestä suorasta ja kaarevasta raideosasta. Tämä "
-"vaihde koostui neljästä osasta:\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:257
-msgid " 1 a short straight segment to the left of the points\n"
-msgstr " 1 Lyhyestä suorasta etujatkoksesta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:258
-msgid " 2 a long straight segment to the right of the points\n"
-msgstr " 2 Pitkästä suorasta raiteesta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:259
-msgid " 3 a curved segment from the points to the frog\n"
-msgstr " 3 Kaarteesta kielten päistä risteyskappaleeseen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:260
-msgid ""
-" 4 a straight segment from the frog to the end of the diverging leg.\n"
-msgstr " 4 Haarautuvan raiteen suorasta takajatkoksesta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:261
-msgid "The first and last segments have be converted to straight tracks.\n"
-msgstr "Ensimmäinen ja viimeinen osa on muutettu suoriksi raideosiksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:262
-msgid ""
-"The second and third segments form the the body of the turnout and can not "
-"be ungrouped further.\n"
-msgstr ""
-"Toinen ja kolmas osa muodostavat vaihteen rungon, eikä niiden ryhmittelyä "
-"voi purkaa tämän pidemmälle.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:263
-msgid ""
-"You can later Group this turnout with the straight segments to recreate the "
-"turnout definition. You can also add other track segments to turnout "
-"definitions.\n"
-msgstr ""
-"Voit myöhemmin ryhmitellä tämän vaihteen suorien raideosien kanssa ja luoda "
-"vaihteen määrittelyn uudelleen. Voit myös lisätä muita raideosia vaihteiden "
-"määrittelyihin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:264
-msgid "Now, create a track and place the new turnout on it.\n"
-msgstr "Nyt luodaan raide ja lisätään siihen uusi vaihde.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:265
-msgid "Now suppose we want to replace the black squares with green circles.\n"
-msgstr ""
-"Oletetaan, että haluamme vaihtaa mustien nelikulmioiden paikalle vihreät "
-"ympyrät.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:266
-msgid "First we Select the turnout.\n"
-msgstr "Ensin valitsemme vaihteen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:267
-msgid "And now Ungroup it (from the Tools Menu)\n"
-msgstr "Ja sitten puramme ryhmittelyn.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:268
-msgid ""
-"Notice that the name has changed to indicate the turnout was Ungrouped.\n"
-msgstr "Huomaa kuinka nimi on muutettu kuvaamaan vaihteen purkua.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:269
-msgid ""
-"Now, hit escape to deselect everything and then Select the 2 squares and "
-"delete them.\n"
-msgstr ""
-"Paina Esc-näppäintä poistaaksesi valinnat objekteista ja valitse sitten "
-"nelikulmiot ja poista ne.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:270
-msgid "Now draw the green circles...\n"
-msgstr "Piirrä nyt vihreät ympyrät...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:271
-msgid "and Group the new definition.\n"
-msgstr "ja ryhmittele tämä uusi määrittely.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:272
-msgid ""
-"Notice that the turnout in the HotBar is angled the same as the turnout on "
-"the layout. Make sure your new definition is rotated the way you want it.\n"
-msgstr ""
-"Huomaa että vaihteen kuva Hot Barissa on nyt samassa kulmassa kuin vaide "
-"ratasuunnitelmassa. Ole siis huolellinen tehdessäsi uusia määrittelyitä, "
-"jotta ne ovat haluamassasi kulmassa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:273
-msgid "We can also create turnouts from simple straight and curved tracks.\n"
-msgstr ""
-"Voimme myös luoda vaihteita yksinkertaisista suorista ja kaarevista "
-"raideosista.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:274
-msgid "We'll create two tracks that have a common End-Point.\n"
-msgstr "Luomme kaksi raidetta, joilla on yhteinen päätepiste.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:275
-msgid "At this point we can modify the tracks if necessary.\n"
-msgstr "Tässä vaiheessa voimme muokata raiteita, jos se on tarpeen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:276
-msgid "We will use the <Describe> command to change the tracks.\n"
-msgstr "Käytämme kuvaile-komentoa muuttaaksemme raiteiden ominaisuuksia.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:277
-msgid "We'll make the Length 7.5\".\n"
-msgstr "Muutamme pituutta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:278
-msgid ""
-"If we change the Length, each End-Point will be moved to shorten the track. "
-"We want to just move the Right End-Point. To control this, change the Pivot "
-"to First which means the Left End-Point will be unchanged when we change the "
-"length (or angle) of the track.\n"
-msgstr ""
-"Jos nyt vain muutamme pituutta, lyhennetään raidetta molemmista päistä. "
-"Haluamme muuttaa raiteen pituutta vain oikeasta päästä, vaihdamme ensin "
-"kiertopisteeksi ensimmäisen pään, jolloin valittu kiertopiste pysyy "
-"paikoillaan muutettaessa raiteen pituutta (tai kulmaa).\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:279
-msgid "Now when change the Length only the Right End-Point will move.\n"
-msgstr "Nyt kun muutamme pituutta, vain oikeaa päätä lyhennetään.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:280
-msgid "Now let's look at the curved track.\n"
-msgstr "Katsotaanpa sitten kaarevaa raidetta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:281
-msgid ""
-"Here the Left End-Point (which we don't want to move) is the Second End-"
-"Point, so we'll make that the Pivot.\n"
-msgstr ""
-"Tässä vasen päätepiste (jota emme halua siirtää) on toinen päätepiste, joten "
-"valitsemme sen kiertopisteeksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:282
-msgid "We want the curve to have a radius of 20\" and an angle of 17.5°.\n"
-msgstr "Haluamme kaarteelle tietyn säteen ja kulman.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:283
-msgid "First change the Radius...\n"
-msgstr "Ensin muutetaan säde...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:284
-msgid "and the the Angular Length.\n"
-msgstr "ja sitten kulma.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:285
-msgid "Now Select both tracks...\n"
-msgstr "Valitse molemmat raiteet...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:286
-msgid "and Group them.\n"
-msgstr "ja ryhmittele ne.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:287
-msgid ""
-"If the two tracks have a common End-Point then they will form a Turnout and "
-"can be switched with the <Train> command. Otherwise they will just be two "
-"track segments grouped together.\n"
-msgstr ""
-"Jos molemmilla raiteilla on yhteinen päätepiste, ne muodostavat vaihteen, "
-"jonka asentoa voidaan vaihtaa simuloitaessa junien ajoa. Muussa tapauksessa "
-"ne ovat vain kaksi raideosaa, jotka ovat ryhmitelty keskenään.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:288
-msgid ""
-"We have created a left hand turnout and we also want a right hand version.\n"
-msgstr ""
-"Olemme luoneen vasemman puoleisen vaihteen ja haluamme myös oikean puoleisen "
-"version.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:289
-msgid "We'll use the <Flip> command.\n"
-msgstr "Käytämme peilaustoimintoa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:290
-msgid ""
-"Drag a horizontal line that will be the mirror for the <Flip> command.\n"
-msgstr "Piirrä peilayslinja vaakatasoon.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:291
-msgid "Notice the title has changed to Flipped Left.\n"
-msgstr "Huomaa että otsikko ilmaisee vaihteen olevan peilikuva.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:292
-msgid "Now Group the turnout.\n"
-msgstr "Ryhmittele.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:293
-msgid "We'll change the Title and Part No for the new defintion.\n"
-msgstr "Muutamme kuvausta ja tuotenumeroa uutta määrittelyä varten.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:294
-msgid ""
-"To Remove the definitions, use the Custom Management dialog on the Tools "
-"menu.\n"
-msgstr ""
-"Poistaaksesi määrittelyt, käytä \"Omat raideosat ja kalusto\" ikkunaa "
-"Hallinta valikosta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:295
-msgid "Select the definitions you added and Delete them.\n"
-msgstr "Valitse lisäämäsi määrittelyt ja poista ne.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:296
-msgid ""
-"Now we will create a helix in the corner of the layout connected to 2 "
-"tracks.\n"
-msgstr ""
-"Nyt luomme helixin (kierrenousun) ratasuunnitelman nurkkaukseen ja "
-"yhdistämme sen kahteen raiteeseen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:297
-#, c-format
-msgid ""
-"We will be creating a helix with a Elevation Difference of 12\", Grade of "
-"1.5% and limit the Vertical Separation to at least 2\".\n"
-msgstr ""
-"Luomme helixin, jonka korkeusero on 12 tuumaa, nousukulma 1,5% ja määräämme "
-"kerrosten välisen tilan olevan vähintään 2 tuumaa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:298
-msgid "First set the Elevation Difference to 12\"\n"
-msgstr "Ensin asetamme korkeuseron 12 tuumaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:299
-msgid "Next set the Vertical Separation to 2\"\n"
-msgstr "Sauraavaksi kerrosten välinen etäisyys 2 tuumaksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:300
-msgid "Notice how this causes the number of Turns to be set to 6\n"
-msgstr "Huomaa kuinka tämä muuttaa kierrosten lukumääräksi 6.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:301
-msgid "Next set the Grade to 1.5%\n"
-msgstr "Seuraavaksi nousukulmaksi 1,5%.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:302
-msgid "Notice how this causes the Radius to change.\n"
-msgstr "Huomaa, kuinka säde muuttuu.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:303
-msgid ""
-"Setting these values changes the Radius to 21.2\" and the number of Turns to "
-"6.\n"
-msgstr ""
-"Näillä arvoilla säde muuttui 21,2 tuumaksi ja kierrosten lukumäärä 6:ksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:304
-msgid ""
-"Now we specify the Angular Separation between the enterance and exit to the "
-"helix.\n"
-msgstr "Nyt määrittelemme helixin sisäänkäyntien välisen kulman.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:305
-msgid "Note: this will decrease the Radius slightly.\n"
-msgstr "Huom: Tämä pienentää sädettä hieman.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:306
-msgid "Next we can fine tune the helix by decreasing the Radius to 15\".\n"
-msgstr ""
-"Seuraavaksi voimme hienosäätää helixiä asettamalla säteeksi 15 tuumaa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:307
-msgid "Note the change to the Grade.\n"
-msgstr "Huomaa nousukulman muutos.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:308
-msgid ""
-"Lastly change the Vertical Separation to 2.5\". The number of Turns will "
-"change to 4 and the grade increase to almost 3%.\n"
-msgstr ""
-"Viimeiseksi muutamme kerrosten välisen etäisyyden 2,5 tuumaksi. Kierrosten "
-"lukumäärä muuttuu 4:ksi ja nousukulma kasvaa lähes 3%:iin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:309
-msgid ""
-"Note: the Vertical Separation will be increased. This value is the "
-"Elevation Difference (12.0) divided by the total number of turns. The total "
-"number of turns is 4.25: 4 whole Turns plus a quarter turn for the Angular "
-"Separation.\n"
-msgstr ""
-"Huom: Kerrosten välistä etäisyyttä kasvatetaan. Tämä arvo on "
-"kokonaiskorkeusero (12,0) jaettuna kierrosten kokonaislukumäärällä. "
-"Kierrosten kokonaislukumäärä on 4,25: 4 täyttä kierrosta sekä neljännes "
-"kierros johtuen sisäänkäyntien välisestä kulmasta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:310
-msgid ""
-"Now that the helix parameters are set we can place the helix on the layout.\n"
-msgstr ""
-"Nyt kun helixin parametrit on aseteltu, voimme asettaa helixin "
-"ratasuunnitelmaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:311
-msgid ""
-"Next, join the 2 straight tracks to the helix in the same way we join to a "
-"circle.\n"
-msgstr ""
-"Seuraavaksi yhdistetään suorat raiteet helixiin aivan kuten ympyrään.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:312
-msgid ""
-"Notice that the length has increased because we have more than 4 turns in "
-"the helix. It is closer to 4.25 turns.\n"
-msgstr ""
-"Huomaa kuinka pituus kasvoi hieman koska helixissä on yli 4 kierrosta. "
-"Kierrosten lukumäärä on lähempänä 4,25:tä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:313
-msgid ""
-"Next, we assign elevations to the 2 End-Points of the helix. This will "
-"determine the grade and separation between the helix coils.\n"
-msgstr ""
-"Seuraavaksi määrittelemme korkeustason helixin toiselle päätepisteelle. Tämä "
-"määrittää nousukulman ja kierteiden välisen eron.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:314
-msgid ""
-"Note: we could set the elevations anywhere along the connecting tracks "
-"instead. XTrackCAD treats a helix as a single length of track for "
-"elevations.\n"
-msgstr ""
-"Huom: Voisimme määrittää korkeustason missä tahansa helixiin yhdistetyllä "
-"raiteella. Korkeustasojen kannalta XTrackCAD käsittelee helixiä yhtenä "
-"tietyn mittaisena raiteena.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:315
-msgid ""
-"We have set the elevations to 1\" and 13\" to produce a grade of 3.0% with "
-"2.8\" between coils.\n"
-msgstr ""
-"Asetimme korkeustasot 1 ja 13 tuumaksi luodaksemme 3,0% nousukulman ja 2,8 "
-"tuuman kerrosvälin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:316
-msgid ""
-"You can use the <Describe> command to change the number of Turns or the "
-"Elevations at either end of the Helix. This will affect the Grade and "
-"Vertical Separation.\n"
-msgstr ""
-"Voit käyttää määrittele-komentoa muuttaaksesi kierrosten lukumäärää tai "
-"korkeustasoja kummassa tahansa päässä helixiä. Tämä vaikuttaa nousukulmaan "
-"ja kerrosten väliseen tilaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:317
-msgid "The helix description can be moved by the <Move Label> command.\n"
-msgstr "Helixin kuvausta voidaan siirtää aivan kuten muitakin merkintöjä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:318
-msgid ""
-"In addition to using the turnout definitions you can create 'Hand Laid "
-"Turnout'.\n"
-msgstr ""
-"Valmiiden vaihdemäärittelyjen lisäksi voit luoda \"käsin asetellun vaihteen"
-"\".\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:319
-msgid "This is two step process:\n"
-msgstr "Tämä on kaksiosainen prosessi:\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:320
-msgid "1 - click on the frog and drag away to set the frog angle\n"
-msgstr "1 - klikkaa risteyskappaleen kohdalle ja raahaa asettaaksesi kulman.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:321
-msgid ""
-" Hint: the further you drag from the frog, the more accurate the angle.\n"
-msgstr ""
-" Vinkki: Mitä kauemmas raahaat, sitä tarkemmin saat kulman asetelluksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:322
-msgid "2 - click and drag to set the position of the points\n"
-msgstr "2 - Klikkaa ja raahaa asetellaksesi kielten päät.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:323
-msgid "We can create Hand Laid Turnouts on curved tracks.\n"
-msgstr "Voimme luoda käsin asetellun vaihteen myös kaarteeseen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:324
-msgid "A Hand Laid Turnout is composed of several parts.\n"
-msgstr "Käsin asetellut vaihteet koostuvat useasta osasta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:325
-msgid "The actual Turnout is a short portion at the points.\n"
-msgstr "Varsinainen vaihde on lyhyt osa kielten päiden luona.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:326
-msgid "The other parts are various straight and curved segments.\n"
-msgstr "Muut osat ovat suoria ja kaarevia raideosia.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:327
-msgid "The new curved turnout is also composed of several segments.\n"
-msgstr "Myös kaarrevaihde koostuu useasta osasta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:328
-msgid "Welcome to the XTrackCAD demonstration.\n"
-msgstr "Tervetuloa XTrackCADin havaintoesitykseen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:329
-msgid ""
-"This will show some the features of XTrackCAD in an automated presentation. "
-"This window contains a number of controls and a message area (which I hope "
-"you are reading now). \n"
-msgstr ""
-"Havaintoesitykset näyttävät joitakin XTrackCADin ominaisuuksia "
-"automaattisina esityksinä. Tämä ikkuna sisältää joitakin kontrolleja sekä "
-"viestialueen, jota juuri nyt luet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:330
-msgid "The controls are:\n"
-msgstr "Kontrollit ovat:\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:331
-msgid "Step - advances to the next step of the demo.\n"
-msgstr "Seuraava vaihe - Siirtyy seuraavaan vaiheeseen demossa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:332
-msgid "Next - skips ahead to the next demo.\n"
-msgstr "Seuraava - Siirry seuraavaan demoon.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:333
-msgid "Quit - exits the demo and returns to XTrackCAD.\n"
-msgstr "Lopeta - Pysäyttää demon ja palaa XTrackCADin normaaliin tilaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:334
-msgid "Speed - controls the speed of the demo.\n"
-msgstr "Nopeus - Säätelee demojen suoritusnopeutta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:335
-msgid "Click Step now for the next message.\n"
-msgstr ""
-"Klikkaa nyt Seuraava vaihe -painiketta katsoaksesi seuraavan viestin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:336
-msgid ""
-"If this is the first time you have used the demo you may want to rearrange "
-"the windows so the demo window does not obscure the main window.\n"
-msgstr ""
-"Jos tämä on ensimmäinen kerta, kun käytät näitä havaintoesityksiä, saatat "
-"haluta järjestellä ikkunat siten, ettei demo-ikkuna peitä pääikkunaa "
-"oleellisesti.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:337
-msgid ""
-"You can move the demo window now by dragging on the title bar at the top of "
-"the window. I suggest you move it to the top of your screen.\n"
-msgstr ""
-"Voit siirrellä demo-ikkunaa raahaamalla otsikkopalkista. Ehdotan, että "
-"siirrät demo-ikkunan näyttösi yläosaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:338
-msgid ""
-"The various controls are disabled when it would be inappropiate to click on "
-"them. When the demo is running the Step button is disabled. When the demo "
-"is paused the Step button is enabled and you can click it when you are ready "
-"to view the next part of the demo.\n"
-msgstr ""
-"Useimmat kontrollit eivät ole käytettävissä oltaessa demo-tilassa, jolloin "
-"niitä ei voi painella tarpeettomasti. Demon ollessa käynnissä Seuraava vaihe "
-"-painike ei ole käytettävissä. Kun demo on pysähdyksissä Seuraava vaihe -"
-"painike on käytettävissä, jolloin voit siirtyä sen avulla demossa seuraavaan "
-"vaiheeseen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:339
-msgid "You can click on Quit to return to XTrackCAD at any time.\n"
-msgstr ""
-"Voit painaa Lopeta -painiketta milloin tahansa palataksesi XTrackCADin "
-"perustilaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:340
-msgid "You can adjust the speed of the demonstration with the Speed control.\n"
-msgstr ""
-"Voit säätää demojen suoritusnopeutta Nopeus -valintaluettelon avulla.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:341
-msgid "The demos are designed to fit within a certain sized window.\n"
-msgstr ""
-"Demot on suunniteltu niin, että ne mahtuvat tietyn kokoiseen ikkunaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:342
-msgid ""
-"For best results, change the size of the main XTrackCAD window so the box "
-"shape is completely visible.\n"
-msgstr ""
-"Parhaan tuloksen saavuttamiseksi, muuta XTrackCADin pääikkunan kokoa siten, "
-"että nelikulmio on kokonaan näkyvissä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:343
-msgid "You can do this by clicking and dragging on a corner of the window.\n"
-msgstr ""
-"Voit tehdä tämän klikkaamalla ja raahaamalla hiidella ikkunan reunoista tai "
-"nurkasta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:344
-msgid "This is the end of the introductory demo.\n"
-msgstr "Tähän päättyy johdanto.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:345
-msgid ""
-"Please click Step for the next demo or click Quit to return to XTrackCAD.\n"
-msgstr ""
-"Paina Seuraava vaihe tai Seuraava, siirtyäksesi seuraavaan demoon tai Lopeta "
-"palataksesi XTrackCADin perustilaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:346
-msgid ""
-"You can also join to and from circles. This will change the circles to "
-"curves.\n"
-msgstr ""
-"Voit myös yhdistää alkaen ympyrästä ja päättyen ympyrään. Tämä muuttaa "
-"ympyrät kaarteiksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:347
-msgid "In this example we will join two circles.\n"
-msgstr "Tässä esimerkissä yhdistetään kaksi ympyrää.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:348
-msgid ""
-"Here we've selected points on the two circles. The direction of the "
-"connections (whether clockwise or counter clockwise) is controlled by where "
-"on the circle you select the connection points.\n"
-msgstr ""
-"Nyt olemme valinneet pisteet molemmilta ympyräraiteilta. Liitoksen suuntaa "
-"kontrolloidaan sen mukaan mistä kohtaa ympyröitä liitoskohdat valitaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:349
-msgid "Now let's try a cross connection.\n"
-msgstr "Kokeillaanpa risteävää liitosta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:350
-msgid ""
-"Note that the connection is from different 'ends' of the circle than in the "
-"last example.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:351
-msgid "This examples shows joining tracks whose End-Points are aligned.\n"
-msgstr ""
-"Tämä esimerkki näyttää kahden kohdakkain olevan päätepisteen yhdistämisen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:352
-msgid ""
-"Note the 2 pairs of tracks have End-Points that are close and aligned but "
-"not connected.\n"
-msgstr ""
-"Huomaa, että molemmissa raidepareissa raiteet ovat aivan lähekkäin ja "
-"samansuuntaisesti, mutta toisistaan irrallisia.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:353
-msgid "The first case joins the curve and straight track.\n"
-msgstr "Ensin yhdistetään kaarre suoraan raiteeseen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:354
-msgid "The second case will join the two straight tracks.\n"
-msgstr "Seuraavaksi yhdistetään kaksi suoraa raidetta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:355
-msgid "Note that the two straight tracks were combined to form one track.\n"
-msgstr ""
-"Huomaa, että kaksi suoraa raidetta yhdistettiin siten, että ne muodostavat "
-"nyt yhden raideosan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:356
-msgid ""
-"The <Join> command can join straight and curved tracks (in either order).\n"
-msgstr ""
-"Yhdistä-komennolla voi liittää suoran ja kaarevan raiteen (kummassa tahansa "
-"järjestyksessä).\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:357
-msgid "A connecting track is drawn between the two tracks.\n"
-msgstr "Yhdistävä raide piirretään yhdistettävien raiteiden väliin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:358
-msgid ""
-"Notice that the curved track is extended as the connection point moves past "
-"the End-Point.\n"
-msgstr ""
-"Huomaa kuinka kaarevaa raidetta jatketaan liitoskohdan siirtyessä "
-"päätepisteen ohi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:359
-msgid "Here the connection makes the curved track wrap around.\n"
-msgstr "Tässä liitos saa kaarevan raiteen kiepsahtamaan ympäri.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:360
-msgid ""
-"Now the cursor is about to be moved past the other (far) End-Point of the "
-"straight track. You will receive a warning and the connecting track turns "
-"Red.\n"
-msgstr ""
-"Nyt osoitin siirretään suoran raiteen kauemman päätepisteen ohi. Tästä "
-"varoitetaan tilarivillä ja yhdysraide muuttuu punaiseksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:361
-msgid "The <Join> command can move one group of tracks to join with another.\n"
-msgstr ""
-"Yhdistä-komento pystyy siirtämään raiteita yhdistääkseen ne toisiin "
-"raiteisiin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:362
-msgid "First <Select> the tracks you want to move.\n"
-msgstr "Valitse ensin raiteet, jotka haluat siirtää.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:363
-msgid "Click <Join> and Shift-Left-Click on the two End-Points.\n"
-msgstr ""
-"Klikkaa Yhdistä ja sen jälkeen vaihto-näppäintä painettuna klikkaa hiiren "
-"vasemmalla painikkeella yhdistettäviä päätepisteitä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:364
-msgid "The selected tracks are moved into position.\n"
-msgstr "Valitut raiteet siirrettiin paikoilleen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:365
-msgid ""
-"Two straight tracks are joined by selecting the two End-Points. The "
-"selected End-Points will be those closest to the cursor when the track is "
-"selected.\n"
-msgstr ""
-"Kaksi suoraa raidetta yhdistetään valitsemalla kaksi päätepistettä. Valittu "
-"päätepiste on se, joka on lähempänä hiiren osoitinta raidetta valittaessa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:366
-msgid ""
-"A connecting track is drawn between the two tracks. Notice how it moves as "
-"the cursor is dragged along the second track.\n"
-msgstr ""
-"Yhdistävä raide piirretään yhdistettävien raiteiden väliin. Huomaa kuinka se "
-"siirtyy raahattaessa osoitinta toista raidetta pitkin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:367
-msgid ""
-"Note that two tracks are extended if you move past the end of the track.\n"
-msgstr ""
-"Huomaa, että raiteita pidennetään automaattisesti siirryttäessä raiteen pään "
-"ohi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:368
-msgid ""
-"Notice what happens if you drag past the intersection points of the two "
-"tracks.\n"
-msgstr "Katso mitä tapahtuu, jos raahaat raiteiden leikkauspisteen ohi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:369
-msgid "This is probably not a very useful thing to do.\n"
-msgstr "Tämä ei luultavasti ole kovin hyödyllistä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:370
-msgid "You can connect from any track to a turntable\n"
-msgstr "Voit yhdistää mistä tahansa raiteesta kääntöpöytään.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:371
-msgid "Note: you cannot have a turntable as your first connection point.\n"
-msgstr ""
-"Huom: Kääntöpöytä ei voi olla ensimmäinen liitoskohta, eli aina yhdistetään "
-"muusta raiteesta kääntöpöytää kohti.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:372
-msgid ""
-"You cannot place the connecting track too close to an existing stall track. "
-"How close you can get is controlled by the Turntable Angle on the Setup "
-"dialog.\n"
-msgstr ""
-"Liitosraidetta ei voi yhdistää liian lähelle kääntöpöytään ennestään "
-"liittyvää raidetta. Tämä etäisyys, eli kääntöpöydän kulma, määritellään "
-"komentojen asetuksissa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:373
-msgid "In this example it is set to 7.5 degrees.\n"
-msgstr "Tässä esimerkissä se on asetettu 7,5 asteeksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:374
-msgid "You can drag the connecting point all round the turntable.\n"
-msgstr "Voit raahata liitoskohtaa ympäti kääntöpöytää.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:375
-msgid ""
-"As you drag away from the turntable a straight track will be drawn to the "
-"cursor postion and a curve will be drawn from the cursor to the connecting "
-"track.\n"
-msgstr ""
-"Raahatessasi kääntöpöydästä pois päin, suora raide piirretään osoittimeen "
-"asti ja siitä jatketaan kaarteella liitettävään raiteeseen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:376
-msgid ""
-"Now the cursor will be moved within the turntable. Notice the error "
-"message.\n"
-msgstr ""
-"Nyt osoitin viedään kääntöpöydän sisälle. Huomaa virheilmoitus tilarivillä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:377
-msgid "All done.\n"
-msgstr "Valmis.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:378
-msgid ""
-"The Draw Commands are used to draw straight and curved lines on the layout.\n"
-msgstr ""
-"Piirtokomennoilla voidaan piirtää suoria ja kaarevia viivoja "
-"ratasuunnitelmaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:379
-msgid ""
-"Lines are drawn by clicking at the starting postion and dragging to the "
-"final position.\n"
-msgstr ""
-"Viivat piirretään klikkaamalla alkupistettä ja raahaamalla loppupisteeseen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:380
-msgid ""
-"Drawing lines with the Shift key held down will use the previous line End-"
-"Point as the starting position. This makes it easy to draw connected "
-"lines.\n"
-msgstr ""
-"Jos vaihto-näppäin pidetään painettuna, seuraavan viivan piirto aloitetaan "
-"edellisen viivan loppupäästä. Näin voidaan helposti piirtää yhdistettyjä "
-"viivoja.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:381
-msgid "You also draw in various colors and line widths.\n"
-msgstr "Voit myös piirtää eri väreillä ja muuttaa viivan paksuutta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:382
-msgid ""
-"Like Curved Tracks, Curved Lines can be drawn by a variety of methods.\n"
-msgstr ""
-"Aivan kuten kaarevat raideosat, myös kaarevat viivat voidaan piirtää eri "
-"tavoin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:383
-msgid ""
-"Here we will draw a Curve by dragging from one End-Point to the other to "
-"define the chord of the Curve. Then we will drag from the center to shape "
-"the curve.\n"
-msgstr ""
-"Tässä piirrämme kaaren raahaamalla ensin jänteen päätepisteiden välille ja "
-"raahaamme sitten jänteen keskeltä muodostaaksemme halutun kaaren.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:384
-msgid "Boxes are useful for drawing rectangular shapes.\n"
-msgstr ""
-"Nelikulmio koostuu neljästä yksittäisestä viivasta, mutta sen voi piirtää "
-"yhdellä komennolla.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:385
-msgid ""
-"Circles can be drawn by clicking on the center or edge and dragging to set "
-"the radius.\n"
-msgstr ""
-"Ympyrät voidaan piirtää esimerkiksi klikkaamalla haluttua keskipistettä ja "
-"asettamalla ympyrän säde raahaamalla.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:386
-msgid "Here we will drag from the Center.\n"
-msgstr "Raahaamme keskipisteestä poispäin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:387
-msgid "Lines and Shapes can be deleted by Selecting and Deleting.\n"
-msgstr ""
-"Viivat ja muodot poistetaan valitsemalla ne ensin ja sitten poistamalla ne.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:388
-msgid "We also draw Polylines and filled shapes.\n"
-msgstr "Voimme myös luoda monikulmioita ja täytettyjä monikulmioita.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:389
-msgid ""
-"A Polyline is drawn by dragging to place each of the point in the Polyline.\n"
-msgstr "Monikulmio piirretään raahaamalla kukin kulma paikoilleen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:390
-msgid ""
-"To finish off the Polyline press the <Space> key or choose another drawing "
-"type.\n"
-msgstr ""
-"Viimeistelläksesi monikulmion, paina välilyöntiä tai valitse toinen "
-"piirtotyyppi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:391
-msgid "A Polygon is drawn in the same way\n"
-msgstr "Täytetty monikulmio piirretään samalla tavalla.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:392
-msgid ""
-"You can use the Above and Below Commands to move lines and shapes to the "
-"front or back of the drawing.\n"
-msgstr ""
-"Voit vaihtaa viivojen ja muotojen järjestystä viemällä niitä alimmaiseksi "
-"tai päällimmäiseksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:393
-msgid "Filled Boxes and Circles work the same as line Boxes and Circles.\n"
-msgstr ""
-"Täytetyt nelikulmiot ja täytetyt ympyrät toimivat samoin kuin tyhjät "
-"nelikulmiot ja ympyrät.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:394
-msgid ""
-"In the drawing area of the main window you can see an hollow arrow which "
-"represents the mouse cursor. In this demo the mouse will move about to show "
-"you the actions of different commands.\n"
-msgstr ""
-"Pääikkunan piirtoalueella näet läpinäkyvän nuolen, joka kuvaa hiiren "
-"osoitinta. Tässä demossa esitellään erilaiset hiiren toiminnot.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:395
-msgid ""
-"The hollow arrow represents the mouse cursor without a mouse button being "
-"pressed.\n"
-msgstr ""
-"Läpinäkyvä nuoli kuvaa hiiren osoitinta silloin kun hiiren painikkeita ei "
-"ole painettu.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:396
-msgid ""
-"When the left mouse button would be pressed, the mouse cursor appears to "
-"flash and the hollow arrow is replaced by a solid red arrow. While the left "
-"button is pressed the mouse cursor will be a solid arrow.\n"
-msgstr ""
-"Osoittimen välähdys ja sen muuttuminen punaiseksi kuvaa hiiren vasemman "
-"painikkeen painamista. Koko sen ajan, kun hiiren painike on painettuna alas, "
-"osoitin esitetään punaisella nuolella.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:397
-msgid ""
-"Note: these color changes occur only during the demo to simulate mouse "
-"button presses.\n"
-msgstr ""
-"Huom: Hiiren osoittimen väri muuttuu vain demo-tilassa kuvaten hiiren "
-"painikkeiden käyttöä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:398
-msgid ""
-"Moving the mouse while a mouse button is pressed is called 'dragging'.\n"
-msgstr ""
-"Hiiren liikuttelua silloin kun hiiren painike on painettuna, kutsutaan "
-"\"raahaamiseksi\".\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:399
-msgid ""
-"When the left mouse button is released, the mouse cursor flashes and the "
-"hollow arrow is restored.\n"
-msgstr ""
-"Kun hiiren vasen painike vapautetaan, osoitin välähtää ja se palautetaan "
-"läpinäkyväksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:400
-msgid "Dragging with the right button is simulated by a blue solid cursor.\n"
-msgstr ""
-"Hiiren oikealla painikkeella raahaamista kuvataan sinisellä nuolella.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:401
-msgid ""
-"Sometimes the Shift key is held down while using the mouse for a Shift-Click "
-"or a Shift-Drag. \n"
-msgstr ""
-"Joskus vaihto -näppäintä (shift) on painettava samalla kun hiirellä "
-"klikataan tai raahataan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:402
-msgid "This is indicated by an outline drawn around the solid arrow.\n"
-msgstr "Tämä esitetään lisäämällä värilliseen osoittimeen ääriviivat.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:403
-msgid ""
-"The main drawing area shows a portion of total layout. You can zoom in or "
-"zoom out by choosing 'Zoom In' or 'Zoom Out' in the 'Edit' menu, by using "
-"the Zoom buttons on the toolbar or by using the 'Page Down' and 'Page Up' "
-"keys.\n"
-msgstr ""
-"Piirtoalueella näytetään osa ratasuunnitelmasta. Voit lähentää tai loitontaa "
-"näkymää valitsemalla Muokkaa -valikosta \"Lähennä\" tai \"Loitonna\", "
-"käyttämällä vastaavia painikkeita työkaluriviltä, näppäimistön PgUp ja PgDn -"
-"näppäimillä tai rullahiiren rullasta pyörittämällä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:404
-msgid "You can see the entire layout in the Map window.\n"
-msgstr "Kartta -ikkunassa esitetään koko ratasuunnitelma.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:405
-msgid "As you Zoom Out tracks are drawn with one line instead of two.\n"
-msgstr ""
-"Loitonnettaessa riittävästi, raiteet piirretään ainoastaan yhdellä viivalla "
-"normaalin kahden sijaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:406
-msgid ""
-"You can change what portion of the layout is shown by using the 'Map' window "
-"which shows a compressed version of the entire layout. A hilighted area of "
-"the 'Map' (in reverse video) shows what portion of the layout is displayed "
-"in the main drawing area.\n"
-msgstr ""
-"Kartta -ikkunan avulla voit valita mikä osa ratasuunnitelmaa näytetään. "
-"Kartta -ikkunassa esitetään piennennetty kuva koko ratasuunnitelmasta. "
-"Korostettu alue esittää pääikkunan piirtoalueella näytettävän alueen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:407
-msgid ""
-"You can Left-Drag the hilighted area in the Map window to change the "
-"displayed portion of the layout.\n"
-msgstr ""
-"Raahaamalla hiiren vasemmalla painikkeella korostettua aluetta muuttaaksesi "
-"ratasuunnitelman näytettävän alueen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:408
-msgid ""
-"You can also Right-Drag on the Map window to set the scale and position of "
-"the Main window.\n"
-msgstr ""
-"Hiiren oikealla painikkeella raahaaminen puolestaan muuttaa näytettävän "
-"alueen skaalausta (kokoa).\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:409
-msgid ""
-"The <Note> command lets you attach notes to various spots on the layout.\n"
-msgstr "Voit liittää ratasuunnitelmaasi muistiinpanoja.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:410
-msgid ""
-"When you place a note, the Note editor window is displayed which lets you "
-"enter the note.\n"
-msgstr ""
-"Kun lisäät ratasuunnitelmaan muistiinpanon, avataan editori jossa voit "
-"kirjoittaa muistiinpanon sisällön.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:411
-msgid ""
-"If you click on a note in <Describe> mode the Note editor displays the "
-"note.\n"
-msgstr ""
-"Jos määrittele-komento on aktiivinen ja klikkaat muistiinpanoa, sen sisältö "
-"näytetään editorissa. Näin voit myös muokata aiemmin kirjoittamaasi "
-"muistiinpanoa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:412
-msgid "This is the end of the XTrackCAD Demos.\n"
-msgstr "Tähän päättyivät XTrackCADin demot.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:413
-msgid "Click Step to return to XTrackCAD.\n"
-msgstr ""
-"Paina seuraava vaihe, seuraava tai lopeta painiketta palataksesi XTrackCADin "
-"normaaliin tilaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:414
-msgid "Thanks for watching.\n"
-msgstr "Kiitos kun katsoit.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:415
-msgid "This example shows how to create parallel tracks.\n"
-msgstr "Tämä esimerkki näyttää miten rinnakkaisia raiteita luodaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:416
-msgid ""
-"The separation is set in the <Parallel Separation> window. You should set "
-"this value before you begin to select tracks.\n"
-msgstr ""
-"Raiteiden välinen etäisyys asetetaan työkalurivillä olevan tekstikentän "
-"avulla. Tämä arvo on asetettava ennen kuin raiteita valitaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:417
-msgid ""
-"You control which side the parallel track will be on by moving the cursor "
-"from one side of the track centerline to the other.\n"
-msgstr ""
-"Voit kontrolloida kummalle puolelle rinnakkainen raide luodaan siirtämällä "
-"hiiren osoitinta alkuperäisen raiteen puolelta toiselle.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:418
-msgid "When you release the mouse button the new parallel track is created.\n"
-msgstr "Uusi rinnakkainen raide luodaan kun vapautat hiiren painikkeen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:419
-msgid ""
-"Note that the <Parallel> command remains active after you created the "
-"track. This is controlled by the Sticky dialog in the Options menu.\n"
-msgstr ""
-"Huomaa, että rinnakkainen-komento pysyy aktiivisena komentona luotuamme "
-"raiteen. Tätä käyttäytymistä voidaan muuttaa valikosta Asetukset|Pysyvät "
-"komennot.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:420
-msgid "You cannot create a track parallel to a turnout.\n"
-msgstr "Vaihteesta ei voi luoda rinnakkaista raidetta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:421
-msgid ""
-"Note that the new curved track is automatically connected to the short "
-"parallel track.\n"
-msgstr ""
-"Huomaa, että uusi kaarre liitettiin automaattisesti lyhyeen rinnakkaiseen "
-"raiteeseen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:422
-msgid ""
-"Polylines and Polygons (created with the <Draw> command) can be modified by "
-"dragging on their Corners or Edges.\n"
-msgstr ""
-"Monikulmioita voidaan muokata raahaamalla niiden kulmista tai reunoista.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:423
-msgid "If you select the middle of an Edge a new Corner is created.\n"
-msgstr ""
-"Jos valitset raahauskohdan kulmien väliltä, siihen luodaan uusi kulma.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:424
-msgid ""
-"If you drag a Corner to another Corner the two are merged and the Edge "
-"between them is removed.\n"
-msgstr ""
-"Jos raahaat kulman toisen kulman päälle, ne yhdistetään yhdeksi "
-"kulmapisteeksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:425
-msgid "But you cannot have a Poly-shape with less than 3 sides.\n"
-msgstr "Monikulmiossa on kuitenkin aina oltava vähintään kolme kulmaa/sivua.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:426
-msgid ""
-"To use the <Profile> command you first need to define Elevations on your "
-"layout.\n"
-msgstr ""
-"Käyttääksesi profiili-komentoa täytyy ratasuunnitelmassa olla määriteltyjä "
-"korkeustasoja.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:427
-msgid "In this example we'll use the Elevations defined in the last example.\n"
-msgstr ""
-"Tässä esimerkissä käytämme edellisessä esimerkissä käytettyjä "
-"korkeustasoja.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:428
-msgid "You can move or resize the Profile dialog now if you want.\n"
-msgstr "Voit siirtää Profiili-ikkunaa tai muuttaa sen kokoa jos haluat.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:429
-msgid ""
-"To show the Profile you need to select a Path on the tracks of your layout.\n"
-msgstr "Näyttääksesi rataprofiilin täytyy valita reitti suunnitelmastasi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:430
-msgid "Select a Defined Elevation point (marked by Gold dots).\n"
-msgstr "Valitse määriteltyjä korkeustasoja (merkitty keltaisilla täplillä).\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:431
-msgid "We will start with the right end of the siding.\n"
-msgstr "Aloitamme aseman oikeasta päästä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:432
-msgid ""
-"The second Point is at the left end of the siding. The Path will be drawn "
-"in Purple on the layout.\n"
-msgstr ""
-"Toinen piste on aseman vasen pää. Reitti merkitään ratasuunnitelmaan "
-"purppuralla.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:433
-msgid "Now select the end of one of the Branches\n"
-msgstr "Valitse nyt toisen haaran pää.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:434
-msgid ""
-"The Profile line is drawn in Red. This indicates that there some turnouts "
-"on that section of the Path which have more than 2 connections.\n"
-msgstr ""
-"Rataprofiili on piirretty punaisella viivalla. Tämä tarkoittaa sitä, että "
-"kyseisellä osuudella on vaihteita, jotka ovat yhteydessä useampaan kuin "
-"kahteen määriteltyyn korkeustasoon.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:435
-msgid ""
-"The grade on this part of the Path is the average and may be affected by "
-"other Elevations, such the end of the lower branch.\n"
-msgstr ""
-"Osuuden nousukulma on keskiarvo ja siihen voi vaikuttaa muut korkeustasot, "
-"kuten alemman haaran pään korkeustaso.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:436
-msgid "Now try to select the End-Point of the other branch.\n"
-msgstr "Yritä nyt valita toisen haaran pää.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:437
-msgid ""
-"You will get an error message because there is no route to one of the ends "
-"of the existing Path.\n"
-msgstr ""
-"Saat virheilmoituksen, koska valitun reitin päistä ei ole reittiä tähän "
-"pisteeseen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:438
-msgid ""
-"In this case remove the last part of the Path by clicking on current end of "
-"the Path and reselect the End-Point.\n"
-msgstr ""
-"Poista tässä tapauksessa viimeinen osuus klikkaamalla valittuna olevan "
-"haaran päätä ja valitse sitten toisen haaran pää.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:439
-msgid "Notice that the Grade has changed on the Profile.\n"
-msgstr "Huomaa että nousukulma on muuttunut profiili-ikkunassa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:440
-msgid ""
-"You can Ignore End-Points on the Path by using Shift-Right-Click to display "
-"the Profile Options popup menu and chosing Ignore.\n"
-msgstr ""
-"Voit hylätä reitillä olevia raiteiden liitoskohtia ponnahdusvalikosta, joka "
-"aukeaa painamalla vaihto-nnäppäintä ja klikkaamalla hiiren oikealla. Valitse "
-"\"Hylkää\".\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:441
-msgid ""
-"Note: We can't show the menu in demo mode but we will show the effect of a "
-"Shift Right Click and selecting ignore. We will be Ignoring the End-Point "
-"of the Turnout that is not on the Path.\n"
-msgstr ""
-"Huom: Demossa ei voida esittää valikoita, mutta näytämme ponnahdusvalikosta "
-"suoritetun hylkää-komennon vaikutuksen. Hylkäämme vaihteesta sen "
-"päätepisteen, joka ei ole profiilin reitillä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:442
-msgid "Notice that part of the Profile line is redrawn in Blue.\n"
-msgstr "Huomaa että osa profiilista on piirretty sinisellä viivalla.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:443
-msgid ""
-"Also, the Computed Elevations and Grade marker on the right side of the "
-"layout have been updated.\n"
-msgstr "Myös lasketut korkeustasot sekä nousukulman merkintä on päivitetty.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:444
-msgid ""
-"You can set additional Defined Elevation points using the Profile Options "
-"popup menu. These points are added to the Profile if they are on the Path.\n"
-msgstr ""
-"Ponnahtusvalikon avulla voit lisätä myös uusia määriteltyjä korkeustasoja. "
-"Nämä pisteet lisätään profiiliin, jos ne ovat profiilin reitillä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:445
-msgid ""
-"We do this by Shift Right Click to display the Profile Options popup menu "
-"and selecting Define.\n"
-msgstr ""
-"Teemme tämän avaamalla ponnahdusvalikon ja valitsemalla \"Määritelty\".\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:446
-msgid ""
-"We've just added a Defined Elevation point to the middle of the lower "
-"branch. Notice the addition on the Profile dialog.\n"
-msgstr ""
-"Olemme juuri lisänneet määritellyn korkeustason keskelle alempaa haaraa. "
-"Huomaa lisäys profiili-ikkunassa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:447
-msgid ""
-"For the siding we defined a Station name but it's not on the Path, since the "
-"Path takes the shortest distance between points.\n"
-msgstr ""
-"Sivuraiteelle määrittelimme aseman, mutta se ei ole reitillä, koska "
-"profiilin reitti valitaan lyhyimmän pisteiden välisen etäisyyden mukaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:448
-msgid ""
-"We can Ignore one of the End-Points on a Turnout to force the Path to take "
-"the other route.\n"
-msgstr ""
-"Voimme hylätä yhden vaihteen päätepisteistä pakottaaksemme reitin kulkemaan "
-"toista kautta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:449
-msgid ""
-"Again we use Shift-Right-Click to display the Profile Options menu and "
-"select ignore.\n"
-msgstr "Käytämme jälleen ponnahdusvalikkoa ja valitsemme \"Hylkää\".\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:450
-msgid "Now remove the First section of the Path,\n"
-msgstr "Valitse nyt reitin ensimmäinen osuus,\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:451
-msgid "and reselect it.\n"
-msgstr "ja valitse se uudelleen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:452
-msgid ""
-"Now the Path goes through the Station End-Point and the name appears on the "
-"Profile dialog.\n"
-msgstr ""
-"Nyt reitti kulkee määrittelemämme aseman kautta ja sen nimi näkyy profiili-"
-"ikkunassa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:453
-msgid "Now we need to increase the separation where the tracks cross.\n"
-msgstr "Nyt meidän on kasvatettava risteävien raiteiden välistä etäisyyttä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:454
-msgid ""
-"The two Elevations you see here are Computed Elevations which means "
-"XTrackCAD dynamically computes the Elevation based on the Elevations of "
-"connecting tracks.\n"
-msgstr ""
-"Tässä näkyvät kaksi korkeustason merkintää ovat laskettuja, mikä tarkoittaa "
-"sitä että XTrackCAD laskee tämän pisteen korkeuden automaattisesti muiden "
-"tähän liittyvien korkeustasojen mukaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:455
-msgid ""
-"First make the lower End-Point a Defined Elevation point using Shift-Right-"
-"Click and the Profile Options menu. You will see the End-Point marked by a "
-"Gold dot and a new line is added to the Profile dialog.\n"
-msgstr ""
-"Muuta ensin alempi \"laskettu\" korkeustaso \"määritellyksi\" käyttämällä "
-"jälleen ponnahdusvalikkoa. Piste merkitään nyt keltaisella täplällä ja uusi "
-"viiva lisätään profiili-ikkunaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:456
-msgid "Now, drag the point on the Profile Dialog to change the Elevation.\n"
-msgstr ""
-"Raahaa nyt profiili-ikkunassa tätä pistettä muuttaaksesi sen korkeustasoa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:457
-msgid ""
-"Note the grade on each side of the point will be displayed at the bottom of "
-"the Profile dialog.\n"
-msgstr ""
-"Nousukulmat pisteen molemmin puolin näytetään profiili-ikkunan alaosassa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:458
-msgid ""
-"After we release the Profile is updated to show the new Elevation and "
-"Grade.\n"
-msgstr ""
-"Kun vapautamme hiiren painikkeen, profiili on päivitetty uuden korkeustason "
-"mukaisesti.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:459
-msgid "The <Rescale> command will change the size of the selected objects.\n"
-msgstr "Mittakaavan muutos -komennolla muutetaan valittujen objektien kokoa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:460
-msgid "First we will try rescaling by ratio.\n"
-msgstr "Ensin kokeilemme suhteellista muutosta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:461
-msgid "We are going to make everything 150% bigger.\n"
-msgstr "Suurennamme kaiken 150%:ksi entiseen verrattuna.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:462
-msgid "Note the track gauge did not change.\n"
-msgstr "Huomaa ettei raideleveys muuttunut.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:463
-msgid "Let's try that again.\n"
-msgstr "Kokeillaan uudestaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:464
-msgid "Now we are going to convert from one scale to another.\n"
-msgstr "Nyt muutamme mittakaavasta toiseen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:465
-msgid "We will convert everything from N scale to HO scale...\n"
-msgstr "Muutamme kaiken N-mittakaavasta H0:ksi...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:466
-msgid "and change the track gauge as well.\n"
-msgstr "ja muutamme myös raideleveyden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:467
-msgid "Note that the Title of the turnout did not change.\n"
-msgstr "Huomaa ettei vaihteen otsikko muuttunut.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:468
-msgid ""
-"The <Rotate> command will pivot the Selected objects. First Click on the "
-"pivot point and then drag to Rotate the objects.\n"
-msgstr ""
-"Voit pyörittää valittuja objekteja. Klikkaa ensin haluttua kiertopistettä ja "
-"raahaa sitten pyörittääksesi objekteja.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:469
-msgid ""
-"In this example we will rotate the selected structure about it's center.\n"
-msgstr ""
-"Tässä esimerkissä pyöritämme valittua rakennusta keskipisteensä ympäri.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:470
-msgid ""
-"The <Rotate> command will restrict the rotation to increments of 15° if you "
-"hold down the Control key.\n"
-msgstr ""
-"Jos pidät contol-näppäintä painettuna pyörittäminen tapahtuu 15°:n välein.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:471
-msgid ""
-"Shift-Right-Click will display a popup-menu that you can use to rotate by "
-"fixed amount (15°, 30°, 45°, 90° or 180°). The demonstration cannot show "
-"the popup-menu but it can show the effects.\n"
-msgstr ""
-"Vaihto + oikea klikkaus avaa ponnahdusvalikon, josta voi pyörittää määrätyn "
-"kulman verran (15°, 30°, 45°, 90° or 180°). Demossa ei voida näyttää "
-"ponnahdusvalikkoa, mutta näytämme toiminnon vaikutuksen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:472
-msgid "Here we will rotate by 90° clockwise (CW).\n"
-msgstr "Pyöritämme 90° myötäpäivään (MP).\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:473
-msgid ""
-"Another option of the <Rotate> command popup-menu is to Align the Selected "
-"object with some other object.\n"
-msgstr ""
-"Toinen vaihtoehto ponnahdusvalikossa on suunnata valittu objekti jonkin "
-"toisen objektin mukaisesti.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:474
-msgid ""
-"First we will click on one line of the Selected object. The angle of this "
-"part of the object will be Aligned.\n"
-msgstr ""
-"Ensin klikkaamme valitun objektin jotakin viivaa. Objekti suunnataan tämän "
-"viivan avulla.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:475
-msgid ""
-"Next, we click on an Unselected object. The Selected structure will be "
-"rotated so that the line we clicked on will be parallel to the straight "
-"track.\n"
-msgstr ""
-"Seuraavaksi klikataan valitsematonta objektia. Valittu rakennus käännetään "
-"siten, että valittu viiva on saman suuntainen suoran radan kanssa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:476
-msgid ""
-"If we drag the mouse across the track, we can flip the structure by 180°. "
-"This is similar to how we place turnouts.\n"
-msgstr ""
-"Jos raahaamme hiirellä radan puolelta toiselle, rakennus peilataan 180°. "
-"Samalla tavalla kuin vaihteiden asettelussa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:477
-msgid ""
-"We can also align to curved shapes. The Selected object will be rotated to "
-"be parallel to the curve under the cursor.\n"
-msgstr ""
-"Voimme myös suunnata kaarevien muotojen mukaisesti. Valittua objektia "
-"pyöritetään siten, että se on yhdensuuntainen hiiren osoittimen alla olevan "
-"kaaren mukaisesti.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:478
-msgid ""
-"As we drag along the curved track the Selected object rotates to follow the "
-"curve.\n"
-msgstr ""
-"Raahaamalla kaarretta pitkin, valittua objektia pyöritetään vastaavalla "
-"tavalla.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:479
-msgid "Again, if we drag across the track we can flip the stucture.\n"
-msgstr ""
-"Rakennus voidaan jälleen peilata raahaamalla raiteen puolelta toiselle.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:480
-msgid "We can also Align to another Structure or any object.\n"
-msgstr ""
-"Voimme myös suunnata jonkin toisen rakennuksen tai minkä tahansa objektin "
-"mukaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:481
-msgid ""
-"The <Ruler> command draws a Ruler on the layout you can use to measure "
-"distances.\n"
-msgstr ""
-"Viivain-komento piirtää viivaimen, jolla voit mitata etäisyyksiä "
-"ratasuunnitelmassasi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:482
-msgid "If you press the <Ruler> command again the Ruler is removed.\n"
-msgstr "Jos aktivoit toiminnon uudelleen, viivain poistetaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:483
-msgid "But you can place it somewhere else.\n"
-msgstr "Mutta voit sijoittaa sen johonkin toiseen paikkaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:484
-msgid "The <Select> command is used to select tracks.\n"
-msgstr "Valitse -komentoa käytetään raiteiden valitsemiseen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:485
-msgid "Selected tracks can be moved or rotated during the <Select> command.\n"
-msgstr ""
-"Valittuja raiteita voidaan siirtää tai pyörittää Valitse -komennon ollessa "
-"aktiivisena.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:486
-msgid "Selected tracks can also be deleted, hidden, listed and exported.\n"
-msgstr ""
-"Valitut raiteet voidaan myös poistaa, piilottaa (tunneli), luetteloida tai "
-"eksportoida (viedä tiedostoon).\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:487
-msgid "A single Left-Click selects tracks.\n"
-msgstr "Yksi klikkaus hiiren vasemmalla painikkeella valitsee raiteen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:488
-msgid "Selecting a selected track de-selects it.\n"
-msgstr "Klikkaamalla jo valittuna olevaa raidetta, sen valinta poistuu.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:489
-msgid ""
-"Shift-Left-Click on a track will select all unselected tracks connected to "
-"the track. Selection stops at a previously selected track.\n"
-msgstr ""
-"Pitämällä vaihto-näppäintä pohjassa ja klikkaamalla raidetta, valitaan "
-"kaikki tähän raiteeseen yhtyvät raiteet. Valinta pysähtyy kuitenkin "
-"ensimmäiseen jo valittuun raiteeseen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:490
-msgid "Be careful with this because its easy to select all tracks this way.\n"
-msgstr ""
-"Ole kuitenkin varovainen, sillä näin voit helposti tulla valinneeksi kaikki "
-"raiteet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:491
-msgid "The <esc> key will deselect all objects.\n"
-msgstr "Esc -näppäin poistaa valinnat kaikista objekteista.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:492
-msgid "Left-Drag is used to select all objects within an area.\n"
-msgstr ""
-"Raahaamalla hiiren vasemmalla painikkeella, voidaan valita kaikki alueella "
-"olevat objektit.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:493
-msgid "And Right-Drag de-selects all tracks within an area.\n"
-msgstr ""
-"Raahaaminen hiiren oikealla painikkeella puolestaan poistaa alueella olevien "
-"kohteiden valinnat.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:494
-msgid "Shift-Left-Drag is used to move selected tracks.\n"
-msgstr ""
-"Voit siirtää valittuja objekteja pitämällä vaihto-näppäintä painettuna ja "
-"raahaamalla hiiren vasemmalla painikkeella.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:495
-msgid ""
-"When you move selected tracks that are connected to unselected tracks, the "
-"tracks will be disconnected. These points are marked by a Red cross on the "
-"layout.\n"
-msgstr ""
-"Kun siirrät valittuja raiteita, jotka on liitetty valitsemattomiin "
-"raiteisiin, raiteet irrotetaan toisistaan. Nämä pisteet merkitään punaisilla "
-"risteillä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:496
-msgid ""
-"Drawing the tracks while moving can be very time-consuming. We had just "
-"used the \"Normal\" method of drawing tracks.\n"
-msgstr ""
-"Raiteita siirrettäessä niiden piirto voi olla hyvinkin aikaa vievää. Tässä "
-"on käytetty reiteiden piirron asetusta \"normaali\".\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:497
-msgid ""
-"The Command Options dialog (from the Options menu) contains a Radio button "
-"group which you can use to pick the drawing method.\n"
-msgstr ""
-"Komentojen asetuksista (Asetukset|Komennot) voit valita raiteiden "
-"piirtotavan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:498
-msgid ""
-"You can also popup the Command Options Menu by pressing Shift-Right-Click "
-"which includes options for setting the drawing method. These options are "
-"also available for the Move and Rotate Command Options Menu.\n"
-msgstr ""
-"Piirtotavan voi valita myös painamalla vaihto-näppäintä ja klikkaamalla "
-"hiiren oikealla painikkeella, jolloin avautuu komennon ponnahdusvalikko. "
-"Piirtotavan valinta on saatavilla Siirrä ja Pyöritä komentojen "
-"ponnahdusvalikoissa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:499
-msgid ""
-"The next method is \"Simple\" draws. Here tracks are drawn using one line, "
-"no End-Points are drawn, lines are not drawn and structures are drawn using "
-"a box outline.\n"
-msgstr ""
-"Seuraava piirtotapa on \"Yksinkertainen\", jolloin raiteet piirretään "
-"yhdellä viivalla, ilman päätepisteiden merkintää. Viivoja ei piirretä ja "
-"rakennukset piirretään yksinkertaisina nelikulmioina.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:500
-msgid ""
-"Note: you can move the Command Options dialog if it obscures the main "
-"window.\n"
-msgstr ""
-"Huom: Voit siirtää Komentojen asetukset -ikkunaa, jos se peittää pääikkunaa "
-"oleellisesti.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:501
-msgid ""
-"The next method is to just draw the End-Points of the selected tracks.\n"
-msgstr ""
-"Seuraava tapa on piirtää ainoastaan valittujen raiteiden päätepisteet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:502
-msgid ""
-"Unconnected End-Points are indicated by Red crosses, and connected End-"
-"Points are indicated by Red lines.\n"
-msgstr ""
-"Irralliset päätepisteet merkitään punaisilla risteillä ja liitetyt "
-"punaisilla viivoilla.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:503
-msgid "Now we will go back to using the Normal method again.\n"
-msgstr "Nyt palautetaan normaali piirtotapa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:504
-msgid ""
-"Shift-Right-Drag rotates the selected tracks about the pivot point (which is "
-"where you started the drag)\n"
-msgstr ""
-"Painamalla vaihto-näppäintä ja raahaamalla hiiren oikealla painikkeella voit "
-"pyörittää valittuja raiteita. Kiertopiste määräytyy sen mukaan, mistä "
-"raahaaminen aloitettiin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:505
-msgid ""
-"Next we select the <Join Tracks> command. You can use Shift-Left-Click to "
-"move an End-Point of a selected track to join with an unselected track.\n"
-msgstr ""
-"Seuraavaksi käytämme Yhdistä-komentoa. Vaihto + hiiren vasen siirtää valitut "
-"raiteet ja liittää ne valitsemattomiin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:506
-msgid ""
-"Note: because of differing display resolutions the next mouse click may not "
-"be positioned correctly in this demo and the Move-To-Join operation may not "
-"be demonstrated.\n"
-msgstr ""
-"Huom: Johtuen erilaisista näytön resoluutioista seuraava hiiren klikkaus voi "
-"olla virheellisesti kohdistettu tässä demossa, jolloin \"siirrä yhdistääksesi"
-"\" operaation esitys ei toimi oikein.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:507
-msgid "The <Split> command is used to split and disconnect tracks.\n"
-msgstr "Pilko-komentoa käytetään raiteiden pilkkomiseen ja irrottamiseen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:508
-msgid "Simply select the spot on the track you want to split.\n"
-msgstr "Valitse radalta kohta, jonka haluat pilkkoa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:509
-msgid "You cannot split turnouts (unless you hold down the Shift key).\n"
-msgstr ""
-"Palaraiteita ja vaihteita ei voi pilkkoa, ellei vaihto-näppäintä pidetä "
-"samanaikaisesti painettuna.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:510
-msgid ""
-"If you split at spot that is already an End-Point between two tracks, or "
-"split twice at the same spot, the track is disconnected.\n"
-msgstr ""
-"Jos pilkot kohdasta, joka on raiteiden liitos tai pilkot kaksi kertaa "
-"samasta kohdasta, raiteet irrotetaan toisistaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:511
-msgid "The <Tunnel> command marks selected tracks as hidden.\n"
-msgstr "Tunneli-komento merkitsee valitut raideosat piilotetuiksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:512
-msgid ""
-"A tunnel portal is drawn at the boundary between hidden and normal track.\n"
-msgstr ""
-"Tunnelin suuaukko piirretään piilotetun ja normaalin raideosan "
-"liitoskohtaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:513
-msgid ""
-"How the hidden tracks are drawn (solid, dashed or invisible) is controlled "
-"by the Draw EndPts radio button group on the Setup dialog.\n"
-msgstr ""
-"Piilotettujen raiteiden esitystapa valitaan näyttöasetuksista, kohdasta "
-"\"Piirrä tunneli\". Tunneli voidaan piirtää yhtenäisellä viivalla, "
-"katkoviivalla tai jättää kokonaan piirtämättä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:514
-msgid ""
-"To 'un-hide' a track just Select it again and click the Tunnel button.\n"
-msgstr ""
-"Palauttaaksesi tunneliksi merkityt raideosat normaaleiksi, valitse ne ja "
-"paina uudelleen tunneli-napista.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:515
-msgid ""
-"Straight tracks are created by selecting the first End-Point of the track.\n"
-msgstr ""
-"Suorat raiteet luodaan valitsemalla hiiren vasemmalla painikkeella raiteen "
-"ensimmäinen päätepiste.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:516
-msgid "Then the other End-Point is dragged to its final postion.\n"
-msgstr ""
-"Toinen päätepiste valitaan pitämällä hiiren vasen painike alhaalla ja "
-"valitsemalla oikea paikka.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:517
-msgid "The left mouse button is released at the final end postion.\n"
-msgstr "Hiiren vasen painike vapautetaan loppupisteessä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:518
-msgid ""
-"Table Edges are used to mark the edges of the layout, either for aisles or "
-"room walls.\n"
-msgstr ""
-"Pöydän reunoja käytetään kuvaamaan ratasuunnitelman reunoja, joko "
-"kulkuväyliä tai seiniä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:519
-msgid "A Table Edge is attracted to the ends of other Table Edges.\n"
-msgstr "Pyödän reunojen päät vetävät toisiaan puoleensa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:520
-msgid "Table Edges can be modified by dragging on their ends.\n"
-msgstr "Pöydän reunoje voidaan muokara raahaamalla niiden päistä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:521
-msgid ""
-"If you hold down the Control key while dragging then the Table Edge will be "
-"attracted to other objects.\n"
-msgstr ""
-"Jos pidät control-näppäintä painettuna raahatessasi, pöydän reuna ja muut "
-"objektit vetävät toisiaan puoleensa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:522
-msgid ""
-"These examples shows some of the various Turnout Designer windows. Each "
-"window defines a different type of turnout.\n"
-msgstr ""
-"Tässä esimerkissä näytetään joitakin monista vaihteiden ja raideosien "
-"suunnitteluikkunoista. Kussakin ikkunassa määritellään eri tyyppinen "
-"vaihde.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:523
-msgid ""
-"In each window there are a number of parameters to fill in and one or two "
-"description lines.\n"
-msgstr ""
-"Jokaisessa ikkunassa on useita parametrikenttiä sekä yksi tai kaksi riviä "
-"kuvausta varten.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:524
-msgid "You can print the design to check the dimensions before saving them.\n"
-msgstr ""
-"Voit tulostaa suunnittelemasi vaihteen tarkastaaksesi sen mitat ennen "
-"tallentamista.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:525
-msgid "This is the regular turnout.\n"
-msgstr "Tämä on tavallinen vaihde.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:526
-msgid ""
-"In addition to the dimensions, you also enter the Title (Manufacturer, "
-"Description and Part Number). For Turnouts with Left and Right hand "
-"versions there are separate Descriptions and Part Numbers.\n"
-msgstr ""
-"Mittatietojen lisäksi voit syöttää otsikon (valmistaja, kuvaus ja "
-"tuotenumero). Vaihteille, joilla on vasen ja oikea versio, on molempia "
-"versioita varten omat kentät kuvausta ja tuotenumeroa varten.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:527
-msgid ""
-"Some Turnouts and Sectional track are pre-mounted on roadbed. For these "
-"parts you can specify the width of the roadbed, the thickness of the lines "
-"drawn for the edge of the roadbed and the color.\n"
-msgstr ""
-"Joihinkin raideosiin kuuluu kiinteä ratapenkka. Näitä osia varten voit "
-"määrittää ratapenkan leveyden, reunaviivan paksuuden sekä reunaviivan "
-"värin.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:528
-msgid "The double slip switch is described by only a few parameters.\n"
-msgstr ""
-"Kaksipuolinen risteysvaihde määritellään vain muutamalla parametrilla.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:529
-msgid "The double crossover only needs length and track separation.\n"
-msgstr ""
-"Sovitettu raideristeys tarvitsee ainoastaan pituuden ja raiteiden välisen "
-"etäisyyden.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:530
-msgid ""
-"Pressing the turnout button displays the Turnout Selection window to let you "
-"choose a turnout to place.\n"
-msgstr ""
-"\"Lisää|Palaraide\" valikosta tai vastaava painike työkaluriviltä avaa "
-"palaraiteiden valinta ikkunan, josta voit valita valmiita raideosia "
-"liitettäväksi ratasuunnitelmaasi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:531
-msgid ""
-"Note that once you start to place the turnout on the Main window the Turnout "
-"Selection window disappears. This feature is enabled by the Hide toggle "
-"button on the dialog.\n"
-msgstr ""
-"Huomaa, että kun aloitat raideosan paikoilleen asettelun pääikkunassa, "
-"valintaikkuna katoaa. Tämä voidaan myös estää poistamalla ruksi valinnasta "
-"\"Piilota\".\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:532
-msgid ""
-"You can place the turnout on a arbitrary position on the layout. Left-drag "
-"the turnout into place...\n"
-msgstr ""
-"Aseta palaraide ratasuunnitelmaasi klikkaamalla. Raahaa se sitten hiiren "
-"vasemmalla painikkeella paikoilleen...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:533
-msgid "Then you can rotate the turnout by Right dragging.\n"
-msgstr "Voit myös pyörittää sitä raahaamalla hiiren oikealla painikkeella.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:534
-msgid ""
-"You can also use Shift-Right-Click to display a popup menu that lets you "
-"rotate the Turnout by specific angles.\n"
-msgstr ""
-"Vaihto + hiiren oikea avaa ponnahdusvalikon, josta voit pyörittää raideosaa "
-"tietyn kulman verran.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:535
-msgid ""
-"When you are satisfied with the position and orientation of the turnout "
-"press Space bar or the Return key on the keyboard to finish placing the "
-"turnout.\n"
-msgstr ""
-"Kun olet tyytyväinen raideosan asetteluun, paina Välilyönti tai Return "
-"viimeistelläksesi raideosan asettelun.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:536
-msgid ""
-"Pressing the Ok button on the Turnout dialog will end the <Turnout> command "
-"as well as placing the turnout.\n"
-msgstr ""
-"\"Sulje\" painike valintaikkunassa viimeistelee raideosan asettelun ja "
-"lopettaa toiminnon.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:537
-msgid ""
-"If you drag along an existing track the new turnout will be attached to the "
-"track.\n"
-msgstr ""
-"Jos raahaat vaihdetta olemassa olevaa raidetta pitkin, uusi vaihde liitetään "
-"raiteeseen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:538
-msgid ""
-"Note that the status line tells you the number of End-Points that would be "
-"connected and, the maximum displacement of the End-Points. This will be "
-"useful when building complex track, as we will see later.\n"
-msgstr ""
-"Huomaa, että tilarivillä kerrotaan kuinka monta päätepistettä ollaan "
-"liittämässä, sekä suurin päätepisteiden siirtymä. Tämä auttaa rakentamaan "
-"monimutkaisia ratoja, kuten myöhemmin näemme.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:539
-msgid ""
-"By moving the cursor from one side to the other of the track centerline you "
-"can flip the turnout 180°.\n"
-msgstr ""
-"Siirtämällä hiiren osoitinta radan keskilinjan puolelta toiselle, voit "
-"kääntää vaihdetta 180°.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:540
-msgid ""
-"If you try to drag across another turnout the new turnout will placed at the "
-"nearest End-Point of the existing turnout.\n"
-msgstr ""
-"Jos yrität raahata toisen vaihteen päälle, uusi vaihde asetetaan olemassa "
-"olevan vaihteen lähimmän päätepisteen kohdalle.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:541
-msgid ""
-"When you press Space or Return while the turnout is on a track, the track "
-"will be split and the new turnout attached automatically.\n"
-msgstr ""
-"Vaihteen ollessa olemassa olevan radan päällä, rata pilkotaan ja uusi vaihde "
-"liitetään automaattisesti.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:542
-msgid "Pressing Close ends the <Turnout> command.\n"
-msgstr "Sulje-painike peruuttaa palaraiteiden asettelun.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:543
-msgid "Sometimes it's useful to modify turnouts triming one of the ends.\n"
-msgstr ""
-"Joskus on tarpeen muokata vaihteita säätämällä jonkin raiteen pituutta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:544
-msgid "We use the <Split> command for this.\n"
-msgstr "Käytämme Pilko-komentoa tähän tarkoitukseen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:545
-msgid "Normally, if we try to Split a turnout we get an error message.\n"
-msgstr ""
-"Normaalisti, jos vaihdetta tai palaraidetta yritetään pilkkoa, saadaan "
-"virheilmoitus.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:546
-msgid "Hold down the Shift key and try again.\n"
-msgstr "Pidä vaihto-näppäi painettuna ja yritä uudelleen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:547
-msgid ""
-"The end of the turnout has been replaced by a piece of straight flex track "
-"which we can modify.\n"
-msgstr ""
-"Vaihteen pää korvattiin pätkällä suoraa fleksiraidetta, jota voi muokata "
-"normaalisti.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:548
-msgid "We can try splitting the diverging leg.\n"
-msgstr "Voimme yrittää pikkoa haarautuvan raiteen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:549
-msgid ""
-"Notice that the tail of the diverging leg has been changed to a curved "
-"track...\n"
-msgstr "Huomaa, että haarautuva raide on muutettu kaarteeksi...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:550
-msgid "and a straight track.\n"
-msgstr "ja suoraksi raideosaksi.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:551
-msgid ""
-"This example show how to layout a yard using the <Turnout> and <Parallel> "
-"commands.\n"
-msgstr ""
-"Tässä esimerkissä näytetään ratapihan luominen käyttäen \"Palaraide\" ja "
-"\"Rinnakkainen raide\" komentoja.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:552
-msgid ""
-"You can resize and move the Turnout Selection dialog if it obscures the "
-"other windows.\n"
-msgstr ""
-"Voit pienentää tai siirtää raideosien valintaikkunaa, jos se peittää muita "
-"ikkunoita.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:553
-#, fuzzy
-msgid "First we place a turnout on the main line.\n"
-msgstr "Asetetaan ensin vaihde pääradalle.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:554
-msgid "Next extend the turnout with the <Modify> command.\n"
-msgstr "Seuraavaksi jatketaan vaihdetta \"Muokkaa\" komennolla.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:555
-#, fuzzy
-msgid ""
-"Now create a track parallel to the main line. Make sure the separation is "
-"reasonable for your scale.\n"
-msgstr ""
-"Luo sitten pääradalle rinnakkainen raide. Varmista, että raideväli on "
-"mittakaavallesi sopiva.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:556
-msgid "And place a turnout to connect the new track.\n"
-msgstr "Ja aseta vaihde liittääksesi uuden raiteen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:557
-msgid "We'll zoom in here to see what's going on.\n"
-msgstr "Lähennämme, jotta näet paremmin mitä tapahtuu.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:558
-msgid ""
-"Notice how we control which way the turnout is facing by moving the mouse "
-"across the center line of the track.\n"
-msgstr ""
-"Huomaa kuinka kontrolloimme vaihteen suuntaa siirtämällä hiiren osoitinta "
-"raiteen keskilinjan yli.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:559
-msgid ""
-"The Status bar displays the number of auto-connections that will be made and "
-"the maximum offset.\n"
-msgstr ""
-"Tilarivillä näytetään automaattisten liitosten lukumäärä, sekä suurin "
-"päätepisteen siirtymä.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:560
-msgid ""
-"XTrackCAD adjusts the turnout position for the best fit to minimize any "
-"connection offset\n"
-msgstr ""
-"XTrackCAD sijoittelee vaihteen siten, että se istuu parhaiten ja siirtymät "
-"ovat mahdollisimman pienet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:561
-msgid "Note that placing the turnout splits the parallel track.\n"
-msgstr "Huomaa, kuinka vaihteen asettaminen pilkkoi rinnakkaisen raiteen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:562
-msgid "We have to delete the leftover piece by Selecting and Deleting it.\n"
-msgstr "Pilkkomisesta yli jäänyt raideosa täytyy poistaa.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:563
-msgid "Repeat the process for the other tracks in the yard.\n"
-msgstr "Toista prosessi ratapihan muille raiteille.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:564
-msgid "For the last track we will join with a curve instead of a turnout.\n"
-msgstr "Viimeinen raide yhdistetään kaarteella vaihteen sijaan.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:565
-msgid "We can indicate the mainline by making the rails wider.\n"
-msgstr "Voimme kuvata päärataa paksummalla raiteella.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:566
-msgid "First we select the mainline tracks...\n"
-msgstr "Ensin valitaan pääradan raiteet...\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:567
-msgid "And then select Medium Tracks from the Edit menu.\n"
-msgstr "Valitse sitten keskikokoiset raiteet Muokkaa-valikosta.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:568
-msgid "We can make the rail thicker by selecting Thick Tracks.\n"
-msgstr "Tai paksut raiteet.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:569
-msgid ""
-"Turntables are created by specifying the radius in a dialog box on the "
-"Status Bar. The radius in the dialog can be changed before proceeding.\n"
-msgstr ""
-"Kääntöpöydät luodaan määrittelemällä ensiksi kääntöpöydän säde tilarivillä "
-"olevaan tekstikenttään.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:570
-msgid "Then the turntable is dragged to its final location.\n"
-msgstr "Sitten kääntöpöytä raahataan paikoilleen.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:571
-msgid ""
-"XTrackCAD provides demonstrations on most of the program's features. The "
-"demos can be run by clicking on the Help menu on the Main window and then "
-"selecting Demos."
-msgstr ""
-"XTrackCAD tarjoaa havaintoesityksiä (demoja) useimmista ohjelman "
-"ominaisuuksista. Demoja voidaan suorittaa valitsemalla pääikkunan Ohje-"
-"valikosta Demot."
-
-#: ../../../../build/work/app/i18n/custmsg.h:572
-msgid ""
-"The notation \"Menu|Item\" is used in the documentation (and the on-line "
-"demos and tips) to indicate the selection of a menu item.\n"
-"For example File|Open means to open the menu by clicking on File on the menu "
-"bar of the Main window and then selecting the Open item from that menu."
-msgstr ""
-"Merkintätapa \"Valikko|Komennot\" on käytössä dokumentaatiossa, ohjeessa, "
-"demoissa ja vinkeissä. Se kuvaa kyseessä olevaa valikon toimintoa.\n"
-"Esimerkiksi Tiedosto|Avaa tarkoittaa, että päävalikosta on ensin avattava "
-"Tiedosto-valikko ja sieltä valittava Avaa-komento."
-
-#: ../../../../build/work/app/i18n/custmsg.h:573
-msgid ""
-"A number of example layouts are provided. These files are located in the "
-"'examples' directory where you installed XTrackCAD. The \"File|Open\" "
-"command will open that directory when first used."
-msgstr ""
-"Tarjolla on useita esimerkkejä ratasuunnitelmista. Nämä tiedostot "
-"sijaitsevat 'examples' hakemistossa sen hakemiston alla, johon XTrackCAD on "
-"asennettu. \"Tiedosto|Avaa\" näyttää tämän hakemiston ensimmäisellä "
-"käyttökerralla."
-
-#: ../../../../build/work/app/i18n/custmsg.h:574
-msgid ""
-"When installed, the program measures all units in inches. You can change "
-"this on the \"Options|Preferences\" dialog by changing the Units item to "
-"Metric instead of English."
-msgstr ""
-"Asennuksen jälkeen ohjelmassa on tuuma-mitat käytössä. Tämän voi muuttaa "
-"\"Asetukset|Ominaisuudet\" ikkunasta muuttamalla yksiköt metrijärjestelmään "
-"englantilaisen sijaan."
-
-#: ../../../../build/work/app/i18n/custmsg.h:575
-msgid ""
-"You can change the overall size of your layout on the \"Options|Layout\" "
-"dialog."
-msgstr ""
-"Voit muuttaa ratasuunnitelmasi kokoa \"Asetukset|Ratasuunnitelma\" ikkunasta."
-
-#: ../../../../build/work/app/i18n/custmsg.h:576
-msgid ""
-"When installed, the default command is the Describe command. More "
-"experienced users will probably want to change this to the Select command. "
-"You can do this on the \"Options|Command Options\" dialog."
-msgstr ""
-"Asennuksen jälkeen hiiren oletuskomento on Määritä-komento. Kokeneemmat "
-"käyttäjät saattavat haluta muuttaa tämän Valitse-komennoksi. Se tapahtuu "
-"\"Asetukset|Komennot\" ikkunasta."
-
-#: ../../../../build/work/app/i18n/custmsg.h:577
-msgid ""
-"Set your modeling scale on the \"Options|Layout\" dialog. This controls the "
-"Turnouts and Structures that are available, Easement values and track gauge."
-msgstr ""
-"Mittakaava asetetaan \"Asetukset|Ratasuunnitelma\" ikkunasta. Tämä asetus "
-"määrää mitkä raideosat ja rakennukset ovat käytettävissä sekä "
-"kaarreloivennuksen arvot ja raideleveyden."
-
-#: ../../../../build/work/app/i18n/custmsg.h:578
-msgid ""
-"When Selecting tracks, the connection between Selected and Unselected tracks "
-"is marked by a Red X. This indicates points where the connection between "
-"tracks will be broken if you Move or Rotate the Selected tracks."
-msgstr ""
-"Raideosia valittaessa, valitun ja valitsemattoman raideosan välinen liitos "
-"esitetään punaisella ristillä. Tämä kertoo ne pisteet, joissa raiteiden "
-"liitos irroitetaan valittuja raiteita siirrettäessä tai pyöritettäessä."
-
-#: ../../../../build/work/app/i18n/custmsg.h:579
-msgid ""
-"You can change orientation of the pages on the Print command by moving or "
-"rotating the Print Grid.\n"
-"Shift-Left-Drag moves the grid and Shift-Right-Drag rotates the grid."
-msgstr ""
-"Voit muuttaa tulostettavien sivujen asettelua siirtämällä tai pyörittämällä "
-"tulostusruudukkoa.\n"
-"Vaihto-näppäin ja hiiren vasen raahaus siirtää ruudukkoa ja vaihto-hiiren "
-"oikea pyörittää sitä."
-
-#: ../../../../build/work/app/i18n/custmsg.h:580
-msgid ""
-"You can add track to any unconnected End-Point with the Modify command.\n"
-"Hold down the Shift key and click on the End-Point and drag away to create a "
-"new track segment attached to the End-Point.\n"
-"Repeat with the new End-Point to create flowing tracks."
-msgstr ""
-"Voit lisätä reiteita mihin tahansa irtonaiseen päätepisteeseen Muokkaa "
-"komennolla.\n"
-"Pidä vaihto-näppäin painettuna ja raahaa hiiren oikealla päätepisteestä "
-"luodaksesi uuden raideosan päätepisteen jatkeeksi.\n"
-"Tee sama uudesta päätepisteestä luodaksesi vapaamuotoisia raiteita."
-
-#: ../../../../build/work/app/i18n/custmsg.h:581
-msgid ""
-"You can create Curved tracks in four ways by dragging from:\n"
-" the 1st End-Point in the direction of the curve\n"
-" Center of the Curve to the 1st End-Point\n"
-" End-Point to the Center\n"
-" the 1st to 2nd End-Point\n"
-"Then drag on one of the Red arrows to create the final shape of the curve.\n"
-"\n"
-"You can click on the small button to the left of the Curve command button to "
-"change the method."
-msgstr ""
-"Voit luoda kaarevia raiteita neljällä tavalla raahaamalla:\n"
-" - 1. päätepisteestä kaarteen suuntaan\n"
-" - keskipisteestä kaarteen ensimmäiseen päätepisteeseen\n"
-" - päätepisteestä keskipisteeseen\n"
-" - ensimmäisestä toiseen päätepisteeseen\n"
-"Asettele sitten kaarre lopulliseen muotoonsa raahaamalla punaisista "
-"nuolista.\n"
-"\n"
-"Voit valita tavan Kaarre painikkeen oikealla puolella olevasta pienestä "
-"painikkeesta avautuvan valikon kautta."
-
-#: ../../../../build/work/app/i18n/custmsg.h:582
-msgid ""
-"When creating a straight or a curved track by dragging from the 1st End "
-"Point, you can snap the new track to an existing open end point by holding "
-"down Shift while you click.\n"
-"The new track will be joined to the old when you create it."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:583
-msgid ""
-"Track Circles provide a quick way to see what arrangement of tracks will fit "
-"in your layout spaces. Create Circles with your typical radius and place "
-"them in corners and other locations where your main-line will make changes "
-"of direction. This will give you an overall idea of how your layout will "
-"look.\n"
-"\n"
-"You can create Circles by:\n"
-" using a fixed radius\n"
-" dragging from the Center to edge\n"
-" dragging from an edge to the Center\n"
-"You can click on the small button to the left of the Circle command button "
-"to change the method."
-msgstr ""
-"Ympyräraiteet tarjoavat nopean tavan hahmottaa millainen raidejärjestely "
-"mahtuu suunniteltuun tilaan. Luo ympyräraiteita käyttäen aikomaasi "
-"kaarresädettä ja asettele niitä nurkkiin ja muihin paikkoihin, joissa "
-"pääraiteesi vaihtaa suuntaa. Tämä antaa yleiskuvan tulevan ratasi muodosta.\n"
-"\n"
-"Voit luoda ympyräraiteita:\n"
-" - Käyttämällä määrättyä sädettä.\n"
-" - Raahaamalla keskipisteestä pois päin.\n"
-" - Raahaamalla kehältä kohti keskipistettä.\n"
-"Voit valita tavan valikosta, joka avautuu Ympyrärata-painikkeen oikealta "
-"puolelta."
-
-#: ../../../../build/work/app/i18n/custmsg.h:584
-msgid ""
-"Easements (spiral transition curves) are used when track changes from "
-"straight to curved by gradually changing the radius. This improves "
-"operation and appearance.\n"
-"Easements are created with Joining or Extending Tracks.\n"
-"The Easement dialog is used to control easements."
-msgstr ""
-"Kaarreloivennuksia käytetään radan muuttuessa suorasta kaarteeksi "
-"muuttamalla vaihdoskohdassa kaarresädettä asteittain. Tämä parantaa radan "
-"ajettavuutta ja ulkonäköä.\n"
-"Kaarreloivennukset luodaan yhdistämällä tai jatkamalla raiteita.\n"
-"Kaarreloivennus-ikkunasta asetellaan tarvittavat parametrit."
-
-#: ../../../../build/work/app/i18n/custmsg.h:585
-msgid ""
-"\"Help|Recent Messages\" shows the last error and warning messages that were "
-"generated by the program. Also an explanation of each message is displayed."
-msgstr ""
-"\"Ohje|Viimeisimmät viestit\" näyttää tapahtuneet virheet ja varoitukset. "
-"Valitsemalla jonkin viesteistä saat tarkennetun kuvauksen viestistä."
-
-#: ../../../../build/work/app/i18n/custmsg.h:586
-msgid ""
-"When creating stall tracks for a turntable, you usually want the the stall "
-"tracks to be spaced evenly.\n"
-"The \"Turntable Angle\" item on \"Options|Command Options\" dialog can be "
-"used specify the minimum angle between stall tracks."
-msgstr ""
-"Luodessasi kääntöpöytään liittyviä raiteita, haluat yleensä ainakin osan "
-"niistä olevan tasavälein.\n"
-"\"Kääntöpöydän kulma\" parametrilla asetetaan pienin kääntöpöytään "
-"liittyvien raiteiden välinen kulma. Tämä parametri löytyy \"Asetukset|"
-"Komennot\" valikosta."
-
-#: ../../../../build/work/app/i18n/custmsg.h:587
-msgid ""
-"XTrackCAD periodically saves the current layout in a check point file. The "
-"'Check Point' item on the 'Options|Preferences' dialog controls how often "
-"the file is saved.\n"
-"You can recover your working file after a system crash by copying the "
-"checkpoint file (xtrkcad.ckp in the XTrackCAD Working directory) to file.xtc"
-msgstr ""
-"XTrackCAD tallentaa säännöllisesti ratasuunnitelman varmennustiedostoon. "
-"\"Automaattinen varmennus\" asetus \"Asetukset|Ominaisuudet\" ikkunassa "
-"määrää kuinka usein tiedosto tallennetaan.\n"
-"Voit palauttaa työkopiosi järjestelmän kaatumisen jälkeen kopioimalla "
-"varmennustiedosto xtrkcad.ckp, joka sijaitsee XTrackCADin työhakemistossa, ."
-"xtc tiedostoksi."
-
-#: ../../../../build/work/app/i18n/custmsg.h:588
-msgid ""
-"The Parallel command is helpful to layout yards and sidings. If the "
-"Parallel track abuts with an existing track, it is automatically connected."
-msgstr ""
-"Luo rinnakkainen raide -komento on avuksi tehtäessä ratapihoja ja "
-"sivuraiteita. Jos luotava rinnakkainen raide rajoittuu olemassa olevaan "
-"raiteeseen, ne yhdistetään automaattisesti."
-
-#: ../../../../build/work/app/i18n/custmsg.h:589
-msgid ""
-"You can use Shift-Drag in Select command to move and rotate selected "
-"tracks.\n"
-"Shift-Left-Drag moves tracks and Shift-Right-Drag rotates them.\n"
-"Control-Left-Drag can move labels."
-msgstr ""
-"Valitse-komennon ollessa käytössä voit siirtää ja pyörittää raiteita "
-"pitämällä vaihto-näppäin painettuna ja raahaamalla hiirellä. Vaihto + "
-"vasemmalla raahaus siirtää ja vaihto + oikealla raahaus pyörittää niitä.\n"
-"Control + vasemmalla raahaaminen siirtää merkintöjä."
-
-#: ../../../../build/work/app/i18n/custmsg.h:590
-msgid ""
-"You can move and rotate the Snap Grid to align with existing track or "
-"benchwork."
-msgstr ""
-"Voit siirtää ja pyörittää kohdistusruudukkoa halutessasi kohdistaa jonkin "
-"olemassa olevan raiteen, runkorakenteen tai pöydän reunan kanssa."
-
-#: ../../../../build/work/app/i18n/custmsg.h:591
-msgid ""
-"Use the Parts List command to measure track length.\n"
-"Select the tracks you want to measure and then click on the Parts List "
-"button. The report will list the total of length of the selected flex-"
-"track. You will have to add in the length of any Turnouts."
-msgstr ""
-"Käytä osaluetteloa mitataksesi radan pituuksia.\n"
-"Valitse mitattava rataosuus ja avaa sitten osaluettelo. Raportissa on "
-"laskettuna fleksi raiteen kokonaispituus valitulla rataosuudella. "
-"Palaraiteiden pituudet täytyy lisätä erikseen."
-
-#: ../../../../build/work/app/i18n/custmsg.h:592
-msgid ""
-"The length of flex-track attached to each Turnout is displayed on layout "
-"near the end-points of the Turnouts.\n"
-"Make sure 'Lengths' option of the 'Label Enable' toggle button on the "
-"Display dialog is selected."
-msgstr ""
-"Kuhunkin palaraiteeseen liittyvän fleksiraiteen pituus näytetään "
-"ratasuunnitelmassa palaraiteiden päiden lähellä.\n"
-"Varmista että Asetukset|Näyttöasetukset ikkunassa on ruksittu kohta "
-"\"Pituudet\" näytettävien merkintöjen kohdalla."
-
-#: ../../../../build/work/app/i18n/custmsg.h:593
-msgid ""
-"The Profile command can be used to find the length of a continous section of "
-"track.\n"
-"Select the track at the beginning and end of the section. The total length "
-"of track will be displayed on the Profile window in the lower right corner.\n"
-"Note: the Profile selects the shortest path between the two selected tracks, "
-"which might not be the path you are interested in. In this case, select the "
-"first track and then select other tracks along the path."
-msgstr ""
-"Profiili-komentoa voidaan käyttää selvitettäessä jonkin yhtenäisen "
-"raideosuuden pituus.\n"
-"Valitse halutun raideosuuden alku- ja loppupää, jolloin osuuden "
-"kokonaispituus näytetään profiilikäyrän vaaka-akselin oikeassa reunassa.\n"
-"Huom: Profiili-komento valitsee aina lyhyimmän reitin annettujen pisteiden "
-"välillä. Jos haluat itse valita toisen reitin, valitse ensin alkupiste ja "
-"etene sitten haluttua reittiä pitkin loppupisteeseen."
-
-#: ../../../../build/work/app/i18n/custmsg.h:594
-msgid ""
-"Layers can be used to contain different groups of tracks or other features. "
-"You might use one layer for the main-line, another of staging tracks and "
-"another of benchwork.\n"
-"You can give each layer a name (by using the Layer dialog). This name will "
-"be displayed as the Balloon Help for the corresponding Layer button, if you "
-"have Balloon Help enabled on the Display dialog."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:595
-msgid ""
-"You can remove groups of buttons or the Hot Bar from the Main window to give "
-"you more room if you are not using some features. Also, the number of Layer "
-"buttons displayed is controlled by the Layers dialog."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:596
-msgid ""
-"The size of the Map window is controlled by the overall size of the room "
-"(specified on the Layout dialog) and the Map Scale (on the Display dialog). "
-"You can make the Map window larger (or smaller) by decreasing (or "
-"increasing) the Map Scale.\n"
-"XTrackCAD will prevent you from making the Map window too small or too large."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:597
-msgid ""
-"You can unload parameter files you are not using by the Parameter Files "
-"dialog. This removes unused Turnout and Structure definitions from the Hot "
-"Bar and makes the program start faster."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:598
-msgid ""
-"Right-Click on the Main window displays a menu list of commands as an "
-"alternative to pressing the buttons on the tool bar or using the menu "
-"accelerator keys."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:599
-msgid ""
-"Holding down the Shift key while you Right-Click will display options for "
-"the current command (if any)."
-msgstr ""
-"Jos pidät vaihto-näppäintä painettuna, kun klikkaat hiiren oikealla "
-"painilleella, saat aktiiviseen komentoon liittyvän ponnahdusvalikon, mikäli "
-"komentoon sellainen liittyy."
-
-#: ../../../../build/work/app/i18n/custmsg.h:600
-msgid ""
-"Right-Click on the Hot Bar displays a menu of the different groups of "
-"objects which you can use to jump to the group you are interested in.\n"
-"Pressing a numeric key (1-9 and 0) moves the Hot Bar to corresponding "
-"position (1 is the start, 5 is half way, 0 is the end)."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:601
-msgid ""
-"Right-Drag on the Map window sets the origin and scale of the Main window.\n"
-"The Main window will be centered on the spot where you started the Draw and "
-"how far you Drag will control how large an area you can see on the Main "
-"window."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:602
-msgid ""
-"To refresh the Main window, press Control-L (hold down the 'Ctrl' key and "
-"then press the 'l' key)."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:603
-msgid ""
-"The File menu contains a list of the last 5 layouts you were working on."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:604
-msgid ""
-"The Print command can optionally print lines representing the roadbed for "
-"all tracks. This is useful when printing full size (1:1) for cutting "
-"roadbed."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:605
-msgid ""
-"Pressing the 'Esc' key cancels the current command and invokes the default "
-"command, (which is either Describe or Select)."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:606
-msgid ""
-"When moving or rotating tracks on slow machines or with a large number of "
-"tracks, you can improve performance by changing the way tracks are drawn "
-"while being moved.\n"
-"Shift-Right click will display a menu containing options to draw tracks "
-"normally, as simple lines or just draw end-points."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:607
-msgid ""
-"The colors of different parts of the Main window can be changed with the "
-"Colors dialog. In particular, the Snap Grid color can be changed to make it "
-"more visible when printed."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:608
-msgid ""
-"By default objects are drawn in their normal colors. Tracks will be drawn "
-"in Black. Objects can also be drawn in the color according to their Layer. "
-"The color of a Layer is displayed on the corresponding Layer button.\n"
-"The Display dialog 'Color Layers' item has separate toggles for Tracks and "
-"non-Tracks."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:609
-msgid ""
-"Each Layer can be drawn or hidden by the 'Visible' toggle on the Layers "
-"dialog. "
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:610
-msgid ""
-"Short cut Layer buttons can also be displayed on the tool bar for up to the "
-"first 20 layers.\n"
-"This buttons allow to Show or Hide the layers."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:611
-msgid "The name of the Layer is the Balloon Help for the Layer button."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:612
-msgid ""
-"The playback speed of the Demos can be changed by using Speed drop down list "
-"on the Demo window."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:613
-msgid ""
-"Many of the commands and dialogs can be invoked by special key combinations "
-"called Menu-Accelerators. These are listed on the Menus next to the command "
-"name. For example, Control-P will invoke the Print command."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:614
-msgid ""
-"The Connect command is used to join Sectional track pieces that don't quite "
-"fit together.\n"
-"This command works by adding small gaps between other tracks to move the "
-"selected End-Points closer together."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:615
-msgid ""
-"To copy a group of objects: Select the objects, press Control-C (or select "
-"Copy from the Edit menu), press Control-V (or select Paste from the Edit "
-"menu).\n"
-"The selected tracks will be copied to the layout and you can Move or Rotate "
-"them into position."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:616
-msgid ""
-"In the Rotate (or Select) commands you can press Shift-Right-Click to "
-"display the Rotate menu which allows you to rotate the selected objects by a "
-"specific angle."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:617
-msgid ""
-"You can use the Move-To-Join option of the Join command (hold down the Shift "
-"key) to move a group of Selected tracks to attach with some unselected End-"
-"Point."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:618
-msgid ""
-"The Price List dialog (on the File Menu) is used to specify the prices of "
-"each type of Turnout, Sectional Track and Structure. Also, the length and "
-"price of flex-track pieces can be specified for each scale.\n"
-"This values will be used on the Parts List report to generate total cost of "
-"the selected objects."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:619
-msgid ""
-"Areas of water can represented by a Polygon (use the Draw command) of the "
-"appropiate color.\n"
-"By using the Modify command, you can move, add or remove corners of the "
-"Polygon to fit the shape of the water.\n"
-"You use the Below command to place the Polygon below (or behind) other "
-"objects.\n"
-"\n"
-"You can also use a Polygon to represent aisles. "
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:620
-msgid ""
-"When you create Benchwork you can move it below other objects by Selecting "
-"the Benchwork and use the Below command.\n"
-"Also, put Benchwork in a separate Layer so you can hide it if desired."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:621
-msgid ""
-"You can enter Distances and Lengths using any format regardless of the "
-"Length Format on the Preferences dialog."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:622
-msgid ""
-"You can enter Metric values when English is the default Units and vice versa."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:623
-msgid ""
-"When entering Distances and Lengths you can press the '=' key to redisplay "
-"the value in the default format."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:624
-msgid ""
-"You can also press the 's' key to convert a Prototype measurement to a Scale "
-"measurement y dividing by the ratio for the current scale."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:625
-msgid ""
-"The 'p' key will convert a Scale measurement to a Prototype measurement."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:626
-msgid ""
-"You can place cars on the layout using the Train Simulation command to check "
-"clearance points, track to track separation and coupling."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:627
-msgid ""
-"Use the MoveTo button on the Custom Management dialog to move your custom "
-"Turnout, Structure and Car definitions to a .XTP parameter file."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:628
-msgid ""
-"If you are printing multiple pages on a continuous feed printer (such a Dot "
-"Matrix) you can change the Page Order if necessary to print pages out in "
-"proper order."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:629
-msgid ""
-"On the Car Item and Car Part dialogs, you can enter custom values for "
-"Manufacturer, Part and Road by typing the new value directly into the Drop "
-"Down List."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:630
-msgid ""
-"On the Car Item dialog, you can change the Road, Number, Color and other "
-"values for a Car. This is useful if you repaint or renumber a car. \n"
-"You can also change the Coupler Mounting and Coupler Length if you change "
-"the couplers."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:631
-msgid ""
-"You can Export your Car Inventory to a file in Comma-Separated-Value format "
-"which can be read by most spread-sheet programs."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:632
-msgid "Use the Train Odometer to measure distances along the track."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:633
-msgid ""
-"Holding down the Shift key when clicking the Zoom In or Zoom Out button will "
-"zoom to a programmed Drawing Scale. \n"
-"Holding down the Shift and Control keys when clicking a Zoom button will set "
-"it's program Zoom to the current Drawing Scale."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:634
-msgid ""
-"You can trim the ends of turnouts by holding down the Shift key when using "
-"the Split command."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:635
-msgid ""
-"The Split command can be used to create Block Gaps at end points between two "
-"tracks. \n"
-"Either rail or both rails can be gapped, which are drawn as thick lines."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:636
-msgid ""
-"Trains will 'crash' if they hit another car when travelling faster than the "
-"'Max Coupling Speed' (on the Command Options dialog). \n"
-"They will also 'crash' if they hit the end of the track or an open "
-"turnout. \n"
-"Crashed trains must be manually moved back onto the track."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:637
-msgid ""
-"You can add new track segments to a turnout definition or create a "
-"definition from individual tracks using the Group command."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:638
-msgid ""
-"The center point and radius of Curved and Circle tracks can optionally be "
-"drawn. \n"
-"This feature is toggled by using the Move Label command and doing a Shift-"
-"Left-Click on the track."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:639
-msgid ""
-"Turnout, Curved and Helix track labels can be individually turned on and off "
-"by doing a Shift-Right-Click on the track when using the Move Label command."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:640
-msgid ""
-"You can use the Describe command to change the font size of Text objects."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:641
-msgid ""
-"You can use the Describe command to change the size of Dimension Line labels."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:642
-msgid ""
-"Normally Right-Click displays a popup menu of commands and Shift-Right-Click "
-"displays options for the current command. \n"
-"This can reversed by using the Right Click toggle button on the Command "
-"Options dialog."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:643
-msgid ""
-"The Align item on the Rotate command options menu will let you Align "
-"selected objects with any unselected object. \n"
-"The selected objects are rotated so the first point is parallel to the "
-"second point you selected."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:644
-msgid ""
-"Print To Bitmap allows you to print the track center line. \n"
-"This is useful if you later print the bitmap full size as a template when "
-"laying track."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:645
-msgid ""
-"You can export the selected tracks to a DXF file which can be read by most "
-"CAD programs."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:646
-msgid ""
-"Lengths and distances can be displayed in a variety of units and formats "
-"such as 1' 10 3/4\", 1ft 10.75in or 22.750. In Metric mode, distances can "
-"be displayed as millimeters, centimeters or meters. See the Length Format "
-"item on the Preferences dialog."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:647
-msgid ""
-"Tracks that are too steep or curve too tightly are drawn in the Expection "
-"color (Purple by default). \n"
-"This helps to identify potential problem areas. \n"
-"The maximum grade and minimum radius are set on the Preferences dialog."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:648
-msgid ""
-"The Flip command produces a mirror-image of the selected tracks. \n"
-"If possible, right-hand turnouts are relabeled as left-hand turnouts (and "
-"vice versa)."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:649
-msgid ""
-"Then Ungroup command will break turnouts and structures into individual "
-"track, line and shape segments. \n"
-"You can modify each segment and add new ones. \n"
-"Then use the Group command to update the definition."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:650
-msgid "Dimension lines show the distance between two points."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:651
-msgid ""
-"A variety of Benchwork (rectangular, L-girder and T-girder) can be drawn. \n"
-"Use the Below command to move the Benchwork below the track for proper "
-"display."
-msgstr ""
-"Erilaisia runkorakenteita voidaan piirtää (suora, L-palkki ja T-palkki).\n"
-"Käytä \"alimmaiseksi\" komentoa siirtääksesi runkorakenteen radan ja "
-"maisemoinnin alapuolelle."
-
-#: ../../../../build/work/app/i18n/custmsg.h:652
-msgid ""
-"The Turnout Designer dialogs allow you to specify the width of any attached "
-"roadbed. \n"
-"As well, the color and thickness of the lines used to represent the roadbed "
-"can be specified."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:653
-msgid ""
-"The Color dialog (on the Options menu) is used to change the color of "
-"different objects on the display. \n"
-"You can change the color of the Snap Grid and Borders, as well as Normal, "
-"Selected and Exception tracks."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:654
-msgid ""
-"You can draw tracks with wider lines for rails. \n"
-"Select the tracks and use Medium or Thick Tracks on the Edit menu."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:655
-msgid ""
-"Many objects on the layout have labels: Turnouts/Helix/Curved Titles, Track "
-"Lenghts, End-Point Elevations, Track Elevations and Cars. \n"
-"You can turn these labels on or off with the Label Enable toggle buttons on "
-"the Display options dialog."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:656
-msgid ""
-"If you hold down the Control key when using the Rotate command, the rotation "
-"will be down in increments of 15°."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:657
-msgid ""
-"When using the Rotate command, Shift-Right-Click displays a menu allowing "
-"you to rotate by specific amounts or to align the selected objects with "
-"another object."
-msgstr ""
-
-#~ msgid ""
-#~ " exists\n"
-#~ "Do you want to overwrite it?"
-#~ msgstr ""
-#~ " on olemassa.\n"
-#~ "Haluatko korvata olemassa olevan tiedoston?"
-
-#~ msgid "%s exists"
-#~ msgstr "%s on olemassa"
-
-#~ msgid ": cannot open"
-#~ msgstr ": ei voida avata"
-
-#~ msgid "Abort Print"
-#~ msgstr "Keskeytä tulostus"
-
-#~ msgid "Add Margin"
-#~ msgstr "Lisää marginaali"
-
-#~ msgid "Add Printer"
-#~ msgstr "Lisää tulostin"
-
-#~ msgid "Angle=%0.3f"
-#~ msgstr "Kulma=%0.3f"
-
-#~ msgid "Beige"
-#~ msgstr "Beige"
-
-#~ msgid "Black"
-#~ msgstr "Musta"
-
-#~ msgid "Blue"
-#~ msgstr "Sininen"
-
-#~ msgid "Brown"
-#~ msgstr "Ruskea"
-
-#~ msgid "Can not save New Margin definition"
-#~ msgstr "Uuden marginaalin määrittelyjen tallennus ei onnistu"
-
-#~ msgid "Can not save New Printer definition"
-#~ msgstr "Uuden tulostimen määrittelyjen tallennus ei onnistu"
-
-#~ msgid ""
-#~ "Can't find standard San-Serif font.\n"
-#~ "Please choose a font"
-#~ msgstr ""
-#~ "San-Serif kirjasinta ei löydy.\n"
-#~ "Ole hyvä ja valitse kirjasin"
-
-#~ msgid ""
-#~ "Can't find standard Serif font.\n"
-#~ "Please choose a font"
-#~ msgstr ""
-#~ "Serif kirjasinta ei löydy.\n"
-#~ "Ole hyvä ja valitse kirjasin"
-
-#~ msgid "Chocolate"
-#~ msgstr "Suklaa"
-
-#~ msgid "Command: "
-#~ msgstr "Komento: "
-
-#~ msgid "Creating %s"
-#~ msgstr "Luodaan %s"
-
-#~ msgid "Custom Update"
-#~ msgstr "Omat raideosat ja kalusto"
-
-#~ msgid "Dark Blue"
-#~ msgstr "Tummansininen"
-
-#~ msgid "Dark Gray"
-#~ msgstr "Tummanharmaa"
-
-#~ msgid "Dark Green"
-#~ msgstr "Tummanvihreä"
-
-#~ msgid "Dark Red"
-#~ msgstr "Tummanpunainen"
-
-#~ msgid "Describe objects"
-#~ msgstr "Määrittele objekteja"
-
-#~ msgid "Draw"
-#~ msgstr "Piirto"
-
-#~ msgid "Enter a post-script font name for:"
-#~ msgstr "Syötä post-script kirjasimen nimi:"
-
-#~ msgid "Enter both printer name and command"
-#~ msgstr "Syötä tulostimen nimi ja komento"
-
-#~ msgid "Enter printer name"
-#~ msgstr "Syötä tulostimen nimi"
-
-#~ msgid "Factor"
-#~ msgstr "Kerroin"
-
-#~ msgid "File Name? "
-#~ msgstr "Tiedostonimi?"
-
-#~ msgid "Font Alias"
-#~ msgstr "Kirjasinalias"
-
-#~ msgid "Forest Green"
-#~ msgstr "Metsän vihreä"
-
-#~ msgid "Format"
-#~ msgstr "Muotoilu"
-
-#~ msgid "Gold"
-#~ msgstr "Kulta"
-
-#~ msgid "Gray"
-#~ msgstr "Harmaa"
-
-#~ msgid "Green"
-#~ msgstr "Vihreä"
-
-#~ msgid "Lawn Green"
-#~ msgstr "Ruohonvihreä"
-
-#~ msgid "Light Gray"
-#~ msgstr "Vaaleanharmaa"
-
-#~ msgid "Live"
-#~ msgstr "Seuraa"
-
-#~ msgid "Name: "
-#~ msgstr "Nimi: "
-
-#~ msgid "No file name specified"
-#~ msgstr "Tiedostonimeä ei ole annettu"
-
-#~ msgid "No font selected"
-#~ msgstr "Kirjasinta ei valittu"
-
-#~ msgid "No fonts"
-#~ msgstr "Ei kirjasimia"
-
-#~ msgid "Now printing"
-#~ msgstr "Tulostetaan"
-
-#~ msgid "Now printing %s"
-#~ msgstr "Tulostetaan %s"
-
-#~ msgid "Orange"
-#~ msgstr "Oranssi"
-
-#~ msgid "Overwrite"
-#~ msgstr "Kirjoita päälle"
-
-#~ msgid "PS Font"
-#~ msgstr "PS kirjasin"
-
-#~ msgid "Page %d"
-#~ msgstr "Sivu %d"
-
-#~ msgid "Page 1"
-#~ msgstr "Sivu 1"
-
-#~ msgid "Paper Size"
-#~ msgstr "Paperin koko"
-
-#~ msgid "Pink"
-#~ msgstr "Vaaleanpunainen"
-
-#~ msgid "Place circle center"
-#~ msgstr "Aseta ympyrän keskipiste"
-
-#~ msgid "Print Test Page"
-#~ msgstr "Tulosta testisivu"
-
-#~ msgid "Print To File"
-#~ msgstr "Tulosta tiedostoon"
-
-#~ msgid "Print to file ..."
-#~ msgstr "Tulosta tiedostoon..."
-
-#~ msgid "Printer"
-#~ msgstr "Tulostin"
-
-#~ msgid "Printer Margin Test Page"
-#~ msgstr "Tulostimen marginaalien testisivu"
-
-#~ msgid "Printing"
-#~ msgstr "Tulostetaan"
-
-#~ msgid "Purple"
-#~ msgstr "Purppura"
-
-#~ msgid "Red"
-#~ msgstr "Punainen"
-
-#~ msgid "Specifies the check point frequency"
-#~ msgstr "Kuinka usein automaattinen varmennus suoritetaan"
-
-#~ msgid "Tan"
-#~ msgstr "Keltaisenruskea"
-
-#~ msgid "Tomato"
-#~ msgstr "Tomaatti"
-
-#~ msgid "Tracks with grades steeper than this are exceptional"
-#~ msgstr "Raiteet, joissa on jyrkempi nousukulma, käsitetään erityiraiteiksi"
-
-#~ msgid "Tracks with tighter radius than this are exceptional"
-#~ msgstr "Raiteet, joissa on pienempi kaarresäde, käsitetään erityiraiteiksi"
-
-#~ msgid "Violet"
-#~ msgstr "Violetti"
-
-#~ msgid "X Font"
-#~ msgstr "X kirjasin"
-
-#~ msgid "XTrackCAD Help"
-#~ msgstr "XTrackCAD ohje"
-
-#~ msgid "Yellow"
-#~ msgstr "Keltainen"
-
-#~ msgid "load last layout"
-#~ msgstr "Lataa edellinen ratasuunnitelma"
-
-#~ msgid "start with blank layout"
-#~ msgstr "Uusi ratasuunnitelma"
-
-#~ msgid " DXF Files|*.dxf"
-#~ msgstr " DXF tiedostot|*.dxf"
-
-#~ msgid "%s Font"
-#~ msgstr "%s kirjasin"
-
-#~ msgid ""
-#~ "%s has been corrupted\n"
-#~ "Please see reinstall your software or contact the Vendor."
-#~ msgstr ""
-#~ "%s on korruptoitunut\n"
-#~ "Asenna ohjelmisto uudelleen tai ota yhteyttä ohjelman toimittajaan."
-
-#~ msgid ""
-#~ "<html><head><meta http-equiv=\"content-type\" content=\"text/html; "
-#~ "charset=US-ASCII\"><title>Help Error</title><body><h1>Error - help "
-#~ "information can not be found.</h1><p>The help information you requested "
-#~ "cannot be found on this system.<br>Usually this is an installation "
-#~ "problem, Make sure that XTrkCad and the included HTML files are installed "
-#~ "properly and can be found via the XTRKCADLIB environment variable. Also "
-#~ "make sure that the user has sufficient access rights to read these files."
-#~ "</p></body></html>"
-#~ msgstr ""
-#~ "<html><head><meta http-equiv=\"content-type\" content=\"text/html; "
-#~ "charset=US-ASCII\"><title>Ohjeen virhe</title><body><h1>Virhe - Ohjeen "
-#~ "tietoja ei löydy.</h1><p>Pyytämääsi ohjetta ei löydy järjestelmästä."
-#~ "<br>Yleensä tämä johtuu asennusvirheestä. Varmista, että XTrkCad ja sen "
-#~ "mukana tulevat HTML-tiedostot on asennettu oikein ja että HTML-tiedostot "
-#~ "löytyvät XTRKCADLIB ympäristömuuttujan osoittamasta hakemistosta. "
-#~ "Varmista myös, että käyttäjällä on lukuoikeus näihin tiedostoihin.</p></"
-#~ "body></html>"
-
-#~ msgid ""
-#~ "All descriptions specified in the turnout designer must\n"
-#~ "be non-blank. Please enter missing values and try again."
-#~ msgstr ""
-#~ "Kaikki kentät raideosan suunnittelussa ovat pakollisia.\n"
-#~ "Syötä puuttuvat arvot ja kokeile uudelleen."
-
-#~ msgid ""
-#~ "Bumper tracks (tracks with 1 End-Point) are not supported with the Group "
-#~ "command. \n"
-#~ "The track has been unselected."
-#~ msgstr ""
-#~ "Ryhmittely komento ei tue puskinraideosia (raideosia joissa on vain yksi "
-#~ "pää).\n"
-#~ "Raideosan valinta on poistettu."
-
-#~ msgid "Can't get app dir"
-#~ msgstr "Sovellushakemiston haku ei onnistunut"
-
-#, fuzzy
-#~ msgid "Car Item"
-#~ msgstr "Tuote"
-
-#, fuzzy
-#~ msgid "Connecting"
-#~ msgstr "Yhdistetään "
-
-#~ msgid "Copyright (c) 2007 Sillub Technology and XTrkCad Team"
-#~ msgstr "Copyright (c) 2007 Sillub Technology ja XTrkCad Team"
-
-#, fuzzy
-#~ msgid "Help - %s"
-#~ msgstr "Ohje"
-
-#, fuzzy
-#~ msgid "ItemEnter"
-#~ msgstr "Tuote"
-
-#, fuzzy
-#~ msgid "ItemSel"
-#~ msgstr "Tuote"
-
-#~ msgid "MSG_MOVE_POINTS_OTHER_SIDE\tMove points to other side of frog"
-#~ msgstr ""
-#~ "MSG_MOVE_POINTS_OTHER_SIDE\tSiirrä kielten päät risteyskappaleen toiselle "
-#~ "puolelle"
-
-#~ msgid ""
-#~ "MSG_PRINT_SCALE_1\tThe Print Scale cannot be 1 in unregistered version of "
-#~ "XTrkCad\tThe Print Scale cannot be 1 in unregistered version of %s"
-#~ msgstr ""
-#~ "MSG_PRINT_SCALE_1\tTulostusmittakaava ei voi olla 1 XTrkCad:n "
-#~ "rekisteröimättömässä versiossa\tTulostusmittakaava ei voi olla 1 %s:n "
-#~ "rekisteröimättömässä versiossa"
-
-#~ msgid ""
-#~ "MSG_SAVE_CHANGES\tYour changes will be lost....\tYour changes will be "
-#~ "lost.\n"
-#~ "Do you want to save?"
-#~ msgstr ""
-#~ "MSG_SAVE_CHANGES\tTekemäsi muutokset menetetään...\tTekemäsi muutokset "
-#~ "menetetään.\n"
-#~ "Haluatko tallentaa?"
-
-#~ msgid "MSG_SEL_TRK_FROZEN\tSome Selected tracks are frozen"
-#~ msgstr "MSG_SEL_TRK_FROZEN\tJotkut valituista raiteista on jäädytetty"
-
-#~ msgid ""
-#~ "MSG_TOO_FAR_APART_DIVERGE\tTracks are too far apart or diverge too much"
-#~ msgstr ""
-#~ "MSG_TOO_FAR_APART_DIVERGE\tRaiteet ovat liian kaukana toisistaan tai "
-#~ "niiden välinen kulma on liian suuri"
-
-#, fuzzy
-#~ msgid "No %s are available"
-#~ msgstr "Vinkkejä ei ole saatavilla"
-
-#, fuzzy
-#~ msgid "No help found for %s"
-#~ msgstr "Ei ohjetta aiheesta %s"
-
-#, fuzzy
-#~ msgid "PartnoEnter"
-#~ msgstr "Tulostin"
-
-#, fuzzy
-#~ msgid "PartnoSel"
-#~ msgstr "Tuotekoodi"
-
-#~ msgid "Print Grid Rotate"
-#~ msgstr "Tulostusruudukon pyöritys"
-
-#~ msgid "Profile Mode"
-#~ msgstr "Profiili tila"
-
-#, fuzzy
-#~ msgid "ProtoEnter"
-#~ msgstr "Esikuva"
-
-#, fuzzy
-#~ msgid "ProtoSel"
-#~ msgstr "Esikuva"
-
-#~ msgid ""
-#~ "Rescaled tracks do not fit on the layout.\n"
-#~ "You should increase the layout size to at least %s by %s."
-#~ msgstr ""
-#~ "Uudelleen skaalatut raiteet eivät mahdu ratasuunnitelmaan.\n"
-#~ "Suunnitelman koko pitäisi kasvattaa vähintään %s x %s:ksi."
-
-#, fuzzy
-#~ msgid ""
-#~ "Right-Drag on the Map window sets the origin and scale of the Main window."
-#~ msgstr ""
-#~ "Hiiren oikealla painikkeella raahaaminen puolestaan muuttaa näytettävän "
-#~ "alueen skaalausta (kokoa).\n"
-
-#~ msgid "Snap Grid Rotate"
-#~ msgstr "Käännä kohdistusruudukkoa"
-
-#, fuzzy
-#~ msgid ""
-#~ "Straight tracks are created by selecting the first End-Point of the "
-#~ "track.);"
-#~ msgstr ""
-#~ "Suorat raiteet luodaan valitsemalla hiiren vasemmalla painikkeella "
-#~ "raiteen ensimmäinen päätepiste."
-
-#, fuzzy
-#~ msgid "The left mouse button is released at the final end postion.);"
-#~ msgstr "Hiiren vasen painike vapautetaan loppupisteessä."
-
-#~ msgid ""
-#~ "The unregistered version of this program is restricted to less than 50 "
-#~ "tracks and cars."
-#~ msgstr ""
-#~ "Ohjelman rekisteröimätön versio on rajoitettu alle 50:n raideosaan ja "
-#~ "vaunuun/veturiin."
-
-#, fuzzy
-#~ msgid "Then the other End-Point is dragged to its final postion.);"
-#~ msgstr ""
-#~ "Toinen päätepiste valitaan pitämällä hiiren vasen painike alhaalla ja "
-#~ "valitsemalla oikea paikka."
-
-#~ msgid ""
-#~ "There is nothing to Paste,\n"
-#~ "try Copy first."
-#~ msgstr ""
-#~ "Ei ole mitään liitettävää,\n"
-#~ "kopioi ensin."
-
-#~ msgid ""
-#~ "This Car has no Part Number\n"
-#~ "%s\n"
-#~ "Do you want to continue with the other Cars?"
-#~ msgstr ""
-#~ "Vaunulla/veturilla ei ole tuotekoodia\n"
-#~ "%s\n"
-#~ "Haluatko jatkaa muihin vaunuihin/vetureihin?"
-
-#, fuzzy
-#~ msgid "Track is too short by N.NNN"
-#~ msgstr "Yhdysraide on %0.3f liian lyhyt"
-
-#~ msgid "Turnout Rotate"
-#~ msgstr "Pyöritä raideosaa"
-
-#, fuzzy
-#~ msgid "You can draw tracks with wider lines for rails. "
-#~ msgstr "Piirrä raiteet ohuilla viivoilla"
-
-#~ msgid ""
-#~ "You can not change the position of a Turnout or Turntable while it is "
-#~ "spanned by a Train."
-#~ msgstr ""
-#~ "Vaihteen tai kääntöpöydän asentoa ei voi muuttaa junan ollessa päällä."
-
-#~ msgid ""
-#~ "You have chosen a large font which may a take a long time.\n"
-#~ "Do you wish to continue?"
-#~ msgstr ""
-#~ "Olet valinnut suuren kirjasinkoon joka saattaa kestää kauan.\n"
-#~ "Haluatko jatkaa?"
+# Finnish translations for xtrkcad package.
+# Copyright (C) 2007 Mikko Nissinen
+# This file is distributed under the same license as the xtrkcad package.
+# Mikko Nissinen <mni77@users.sourceforge.net>, 2007.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xtrkcad 4.1.0b1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-07-11 09:01+0200\n"
+"PO-Revision-Date: 2008-02-05 11:21+0200\n"
+"Last-Translator: Mikko Nissinen <mni77@users.sourceforge.net>\n"
+"Language-Team: Finnish <mni77@users.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../bin/archive.c:178 ../bin/archive.c:185 ../bin/archive.c:214
+#: ../bin/archive.c:239 ../bin/archive.c:294 ../bin/archive.c:307
+#: ../bin/archive.c:315 ../bin/archive.c:365 ../bin/archive.c:400
+#: ../bin/archive.c:416 ../bin/archive.c:426 ../bin/archive.c:449
+#: ../bin/cblock.c:491 ../bin/cswitchmotor.c:475 ../bin/dbench.c:147
+#: ../bin/dcar.c:4520 ../bin/dcar.c:4706 ../bin/dcar.c:4716 ../bin/dcar.c:4764
+#: ../bin/dcar.c:4771 ../bin/dcar.c:4789 ../bin/dcar.c:4802 ../bin/dcar.c:4807
+#: ../bin/dcar.c:4836 ../bin/dcar.c:5000 ../bin/directory.c:65
+#: ../bin/directory.c:100 ../bin/directory.c:107 ../bin/directory.c:138
+#: ../bin/directory.c:154 ../bin/dxfoutput.c:193 ../bin/fileio.c:241
+#: ../bin/fileio.c:698 ../bin/fileio.c:898 ../bin/fileio.c:1025
+#: ../bin/fileio.c:1092 ../bin/fileio.c:1098 ../bin/fileio.c:1174
+#: ../bin/fileio.c:1184 ../bin/fileio.c:1517 ../bin/fileio.c:1567
+#: ../bin/fileio.c:1623 ../bin/macro.c:179 ../bin/macro.c:832
+#: ../bin/macro.c:877 ../bin/macro.c:898 ../bin/macro.c:1043
+#: ../bin/macro.c:1060 ../bin/macro.c:1322 ../bin/param.c:2090
+#: ../bin/paramfile.c:250 ../bin/paramfilelist.c:376 ../bin/track.c:1116
+#: ../bin/track.c:1640 ../bin/track.c:1946 ../bin/track.c:1950
+#: ../bin/track.c:1962 ../bin/track.c:2026 ../wlib/gtklib/wpref.c:248
+#: ../wlib/gtklib/wpref.c:255
+msgid "Continue"
+msgstr "Jatka"
+
+#: ../bin/cbezier.c:599
+#, fuzzy
+msgid "Select End-Point - Ctrl unlocks end-point"
+msgstr "Valitse ensimmäinen yhdistettävä päätepiste"
+
+#: ../bin/cbezier.c:601
+msgid "Select End-Point"
+msgstr "Valitse päätepiste"
+
+#: ../bin/cbezier.c:633
+msgid "Not close enough to any valid, selectable point, reselect"
+msgstr ""
+
+#: ../bin/cbezier.c:639
+#, c-format
+msgid "Drag point %d to new location and release it"
+msgstr ""
+
+#: ../bin/cbezier.c:648 ../bin/cbezier.c:739 ../bin/cbezier.c:741
+msgid "Pick any circle to adjust it - Enter to confirm, ESC to abort"
+msgstr ""
+
+#: ../bin/cbezier.c:672
+msgid "Bezier Curve Invalid has identical end points Change End Point"
+msgstr ""
+
+#: ../bin/cbezier.c:675
+#, c-format
+msgid "Bezier Curve Invalid has %s Change End Point"
+msgstr ""
+
+#: ../bin/cbezier.c:678
+msgid "Bezier Curve Invalid has three co-incident points"
+msgstr ""
+
+#: ../bin/cbezier.c:680
+#, fuzzy
+msgid "Bezier is Straight Line"
+msgstr "Suora viiva"
+
+#: ../bin/cbezier.c:682
+#, c-format
+msgid "Bezier %s : Min Radius=%s Length=%s fx=%0.3f fy=%0.3f cusp=%0.3f"
+msgstr ""
+
+#: ../bin/cbezier.c:686
+#, fuzzy, c-format
+msgid "Bezier %s : Min Radius=%s Length=%s"
+msgstr "Kaareva raideosa: Säde=%s Pituus=%s"
+
+#: ../bin/cbezier.c:711
+#, fuzzy
+msgid "No unconnected End Point to lock to"
+msgstr "Valitse toinen yhdistettävä päätepiste"
+
+#: ../bin/cbezier.c:729
+msgid "Bezier curve invalid has identical end points Change End Point"
+msgstr ""
+
+#: ../bin/cbezier.c:732
+#, c-format
+msgid "Bezier curve invalid has %s Change End Point"
+msgstr ""
+
+#: ../bin/cbezier.c:735
+msgid "Bezier curve invalid has three co-incident points"
+msgstr ""
+
+#: ../bin/cbezier.c:737
+#, fuzzy
+msgid "Bezier curve is straight line"
+msgstr "Luo suora viiva"
+
+#: ../bin/cbezier.c:751 ../bin/cbezier.c:765
+msgid "Invalid Bezier Track - end points are identical"
+msgstr ""
+
+#: ../bin/cbezier.c:758
+#, c-format
+msgid "Invalid Bezier Curve has a %s - Adjust"
+msgstr ""
+
+#: ../bin/cbezier.c:762
+msgid "Invalid Bezier Curve has three coincident points - Adjust"
+msgstr ""
+
+#: ../bin/cbezier.c:770
+#, fuzzy
+msgid "Create Bezier"
+msgstr "Luo viivoja"
+
+#: ../bin/cbezier.c:858
+#, fuzzy, c-format
+msgid "%s picked - now select a Point"
+msgstr "Valitsemattoman raideosan päätepiste"
+
+#: ../bin/cbezier.c:888 ../bin/ccornu.c:1953
+msgid "No changes made"
+msgstr ""
+
+#: ../bin/cbezier.c:892
+#, fuzzy
+msgid "Modify Bezier"
+msgstr "Muokkaa raidetta"
+
+#: ../bin/cbezier.c:910
+#, fuzzy
+msgid "Modify Bezier Complete"
+msgstr "Muokkaa raidetta"
+
+#: ../bin/cbezier.c:914
+msgid "Modify Bezier Cancelled"
+msgstr ""
+
+#: ../bin/cbezier.c:1038 ../bin/cbezier.c:1129
+#, fuzzy, c-format
+msgid "Place 1st endpoint of Bezier - snap to %s"
+msgstr "Aseta suoran raiteen 1. päätepiste"
+
+#: ../bin/cbezier.c:1056 ../bin/ccornu.c:2290 ../bin/ccurve.c:205
+#: ../bin/ccurve.c:439 ../bin/cstraigh.c:91
+msgid "Track is different gauge"
+msgstr ""
+
+#: ../bin/cbezier.c:1084
+msgid "Drag end of first control arm"
+msgstr ""
+
+#: ../bin/cbezier.c:1091
+msgid "Drag end of second control arm"
+msgstr ""
+
+#: ../bin/cbezier.c:1133 ../bin/cbezier.c:1170
+#, fuzzy, c-format
+msgid "Select other end of Bezier - snap to %s end"
+msgstr "Aseta suoran raiteen 1. päätepiste"
+
+#: ../bin/cbezier.c:1165
+msgid "Control Arm 1 is too short, try again"
+msgstr ""
+
+#: ../bin/cblock.c:111 ../bin/cblock.c:123 ../bin/cblock.c:168
+#: ../bin/ccontrol.c:171 ../bin/ccontrol.c:425 ../bin/compound.c:567
+#: ../bin/csensor.c:163 ../bin/csensor.c:389 ../bin/csignal.c:238
+#: ../bin/csignal.c:498 ../bin/csignal.c:509 ../bin/csignal.c:535
+#: ../bin/cswitchmotor.c:93 ../bin/cswitchmotor.c:112
+#: ../bin/cswitchmotor.c:224 ../bin/dcontmgm.c:91 ../bin/dlayer.c:483
+msgid "Name"
+msgstr "Nimi"
+
+#: ../bin/cblock.c:112 ../bin/cblock.c:124 ../bin/cblock.c:169
+#: ../bin/csensor.c:165 ../bin/csensor.c:395 ../bin/csignal.c:498
+#: ../bin/csignal.c:537
+msgid "Script"
+msgstr ""
+
+#: ../bin/cblock.c:125
+#, fuzzy
+msgid "Segments"
+msgstr "Lohkoja"
+
+#: ../bin/cblock.c:170 ../bin/cdraw.c:515 ../bin/cdraw.c:1425
+#: ../bin/cdraw.c:1571 ../bin/cdraw.c:2224 ../bin/cdraw.c:2450
+#: ../bin/cdraw.c:2487 ../bin/ctodesgn.c:170 ../bin/ctodesgn.c:171
+#: ../bin/ctodesgn.c:172 ../bin/ctodesgn.c:173 ../bin/ctodesgn.c:185
+#: ../bin/ctodesgn.c:186 ../bin/ctodesgn.c:236 ../bin/ctodesgn.c:239
+#: ../bin/ctodesgn.c:259 ../bin/ctodesgn.c:264 ../bin/ctodesgn.c:296
+#: ../bin/ctodesgn.c:303 ../bin/ctodesgn.c:305 ../bin/ctodesgn.c:325
+#: ../bin/ctodesgn.c:330 ../bin/ctodesgn.c:362 ../bin/ctodesgn.c:369
+#: ../bin/ctodesgn.c:370 ../bin/ctodesgn.c:391 ../bin/ctodesgn.c:394
+#: ../bin/ctodesgn.c:397 ../bin/ctodesgn.c:432 ../bin/ctodesgn.c:436
+#: ../bin/ctodesgn.c:443 ../bin/ctodesgn.c:444 ../bin/ctodesgn.c:445
+#: ../bin/ctodesgn.c:467 ../bin/ctodesgn.c:469 ../bin/ctodesgn.c:487
+#: ../bin/ctodesgn.c:489 ../bin/ctodesgn.c:508 ../bin/ctodesgn.c:510
+#: ../bin/ctodesgn.c:537 ../bin/ctodesgn.c:557 ../bin/ctodesgn.c:577
+#: ../bin/ctodesgn.c:597 ../bin/ctodesgn.c:635 ../bin/ctodesgn.c:654
+#: ../bin/ctodesgn.c:655 ../bin/ctrain.c:185 ../bin/tbezier.c:258
+#: ../bin/tcornu.c:307 ../bin/tcurve.c:372 ../bin/tstraigh.c:89
+msgid "Length"
+msgstr "Pituus"
+
+#: ../bin/cblock.c:171 ../bin/cdraw.c:507 ../bin/compound.c:542
+#: ../bin/tbezier.c:245 ../bin/tcornu.c:294 ../bin/tcurve.c:364
+#: ../bin/tease.c:519 ../bin/tstraigh.c:85
+#, fuzzy
+msgid "End Pt 1: X,Y"
+msgstr "Päätepiste 1: X"
+
+#: ../bin/cblock.c:172 ../bin/cdraw.c:508 ../bin/compound.c:547
+#: ../bin/tbezier.c:252 ../bin/tcornu.c:299 ../bin/tcurve.c:366
+#: ../bin/tease.c:521 ../bin/tstraigh.c:87
+#, fuzzy
+msgid "End Pt 2: X,Y"
+msgstr "Päätepiste 2: X"
+
+#: ../bin/cblock.c:195 ../bin/cblock.c:207 ../bin/cblock.c:575
+#: ../bin/cblock.c:596 ../bin/cblock.c:604 ../bin/cblock.c:674
+#: ../bin/cblock.c:795 ../bin/cblock.c:807 ../bin/cblock.c:845
+#: ../bin/ccontrol.c:205 ../bin/ccontrol.c:218 ../bin/ccontrol.c:230
+#: ../bin/ccontrol.c:486 ../bin/cdraw.c:130 ../bin/cdraw.c:2283
+#: ../bin/cgroup.c:1075 ../bin/cgroup.c:1146 ../bin/cgroup.c:1185
+#: ../bin/cgroup.c:1235 ../bin/cgroup.c:1262 ../bin/cgroup.c:1350
+#: ../bin/cgroup.c:1729 ../bin/cnote.c:69 ../bin/compound.c:603
+#: ../bin/compound.c:618 ../bin/compound.c:651 ../bin/cprint.c:512
+#: ../bin/cprint.c:716 ../bin/cprint.c:723 ../bin/cprint.c:1247
+#: ../bin/cpull.c:511 ../bin/cpull.c:526 ../bin/cpull.c:528 ../bin/cpull.c:530
+#: ../bin/cpull.c:690 ../bin/cselect.c:1068 ../bin/cselect.c:1164
+#: ../bin/cselect.c:1980 ../bin/csensor.c:194 ../bin/csensor.c:206
+#: ../bin/csensor.c:444 ../bin/csignal.c:267 ../bin/csignal.c:666
+#: ../bin/csignal.c:734 ../bin/csnap.c:576 ../bin/csnap.c:705
+#: ../bin/cstruct.c:935 ../bin/cstruct.c:944 ../bin/cstruct.c:1069
+#: ../bin/cswitchmotor.c:250 ../bin/cswitchmotor.c:262
+#: ../bin/cswitchmotor.c:274 ../bin/cswitchmotor.c:286
+#: ../bin/cswitchmotor.c:544 ../bin/cswitchmotor.c:580
+#: ../bin/cswitchmotor.c:714 ../bin/cswitchmotor.c:745 ../bin/ctext.c:173
+#: ../bin/ctodesgn.c:204 ../bin/ctodesgn.c:1199 ../bin/ctodesgn.c:1336
+#: ../bin/ctodesgn.c:1934 ../bin/ctodesgn.c:2049 ../bin/ctodesgn.c:2348
+#: ../bin/ctodesgn.c:2630 ../bin/ctrain.c:205 ../bin/cturnout.c:2897
+#: ../bin/cturnout.c:3035 ../bin/cundo.c:161 ../bin/cundo.c:166
+#: ../bin/dbitmap.c:68 ../bin/dbitmap.c:125 ../bin/dbitmap.c:203
+#: ../bin/dbitmap.c:238 ../bin/dcar.c:3824 ../bin/dcar.c:4019
+#: ../bin/dcar.c:4023 ../bin/dcar.c:4027 ../bin/dcar.c:4032 ../bin/dcar.c:4336
+#: ../bin/dcar.c:4444 ../bin/dcar.c:4826 ../bin/dcmpnd.c:399
+#: ../bin/dcmpnd.c:410 ../bin/dcmpnd.c:542 ../bin/dcustmgm.c:221
+#: ../bin/dcustmgm.c:227 ../bin/dcustmgm.c:236 ../bin/dcustmgm.c:261
+#: ../bin/dease.c:242 ../bin/dlayer.c:240 ../bin/dlayer.c:262
+#: ../bin/dlayer.c:879 ../bin/dlayer.c:885 ../bin/dlayer.c:891
+#: ../bin/doption.c:199 ../bin/doption.c:275 ../bin/doption.c:476
+#: ../bin/doption.c:479 ../bin/doption.c:492 ../bin/doption.c:558
+#: ../bin/dprmfile.c:434 ../bin/draw.c:2629 ../bin/fileio.c:197
+#: ../bin/fileio.c:607 ../bin/fileio.c:742 ../bin/fileio.c:744
+#: ../bin/fileio.c:749 ../bin/fileio.c:812 ../bin/fileio.c:1045
+#: ../bin/layout.c:373 ../bin/layout.c:561 ../bin/macro.c:1156
+#: ../bin/macro.c:1160 ../bin/macro.c:1218 ../bin/macro.c:1287
+#: ../bin/macro.c:1527 ../bin/macro.c:1545 ../bin/misc.c:434 ../bin/misc.c:481
+#: ../bin/misc.c:1806 ../bin/misc.c:1927 ../bin/misc.c:1935 ../bin/misc.c:2013
+#: ../bin/misc.c:2799 ../bin/misc.c:2808 ../bin/misc.c:2828 ../bin/misc.c:2834
+#: ../bin/misc2.c:456 ../bin/param.c:738 ../bin/param.c:1848
+#: ../bin/param.c:1971 ../bin/param.c:1974 ../bin/param.c:2097
+#: ../bin/param.c:2103 ../bin/paramfile.c:324 ../bin/paramfile.c:326
+#: ../bin/paramfile.c:331 ../bin/paramfile.c:355 ../bin/paramfile.c:381
+#: ../bin/paramfile.c:387 ../bin/paramfilelist.c:94 ../bin/paramfilelist.c:114
+#: ../bin/paramfilelist.c:128 ../bin/paramfilelist.c:192 ../bin/smalldlg.c:90
+#: ../bin/smalldlg.c:222 ../bin/tease.c:1014 ../bin/track.c:1654
+#: ../wlib/gtklib/wpref.c:122 ../../../../build/work/app/bin/bllnhlp.c:586
+msgid "Ok"
+msgstr "Ok"
+
+#: ../bin/cblock.c:212
+#, fuzzy
+msgid "Change block"
+msgstr "Muuta raiteita"
+
+#: ../bin/cblock.c:264 ../bin/cswitchmotor.c:342
+#, fuzzy, c-format
+msgid "(%d): Layer=%u %s"
+msgstr "(%d): Taso=%d %s"
+
+#: ../bin/cblock.c:288 ../bin/cblock.c:1000
+msgid "Block"
+msgstr ""
+
+#: ../bin/cblock.c:491
+#, c-format
+msgid "resolveBlockTrack: T%d[%d]: T%d doesn't exist"
+msgstr ""
+
+#: ../bin/cblock.c:575 ../bin/cblock.c:807
+msgid "Block must have a name!"
+msgstr ""
+
+#: ../bin/cblock.c:604
+msgid "Block is discontigious!"
+msgstr ""
+
+#: ../bin/cblock.c:609
+#, fuzzy
+msgid "Create block"
+msgstr "Luo nelikulmio"
+
+#: ../bin/cblock.c:656
+#, fuzzy
+msgid "Non track object skipped!"
+msgstr "Yhtään raidetta ei irroitettu"
+
+#: ../bin/cblock.c:660
+msgid "Selected track is already in a block, skipped!"
+msgstr ""
+
+#: ../bin/cblock.c:674
+#, fuzzy
+msgid "Create Block"
+msgstr "Luo helix raide"
+
+#: ../bin/cblock.c:704 ../bin/cblock.c:736
+#, fuzzy
+msgid "Select a track"
+msgstr "Valitse raideosat"
+
+#: ../bin/cblock.c:713 ../bin/cblock.c:744
+msgid "Not a block!"
+msgstr ""
+
+#: ../bin/cblock.c:749
+#, c-format
+msgid "Really delete block %s?"
+msgstr ""
+
+#: ../bin/cblock.c:749 ../bin/ccornu.c:2729 ../bin/ccornu.c:2940
+#: ../bin/cdraw.c:134 ../bin/cgroup.c:1081 ../bin/cpull.c:648
+#: ../bin/csignal.c:712 ../bin/cswitchmotor.c:670 ../bin/ctodesgn.c:2638
+#: ../bin/ctodesgn.c:3170 ../bin/ctrain.c:2507 ../bin/dbitmap.c:208
+#: ../bin/dcar.c:3970 ../bin/dcar.c:4049 ../bin/dcar.c:4133 ../bin/dcar.c:4152
+#: ../bin/dcar.c:4469 ../bin/dcar.c:4890 ../bin/dcontmgm.c:173
+#: ../bin/dcustmgm.c:168 ../bin/misc.c:1235 ../bin/misc.c:1242
+#: ../bin/misc.c:1313 ../bin/track.c:1656 ../bin/track.c:1753
+#: ../bin/track.c:1767
+msgid "Yes"
+msgstr "Kyllä"
+
+#: ../bin/cblock.c:749 ../bin/ccornu.c:2729 ../bin/ccornu.c:2940
+#: ../bin/cdraw.c:134 ../bin/cgroup.c:1081 ../bin/cpull.c:648
+#: ../bin/csignal.c:712 ../bin/cswitchmotor.c:670 ../bin/ctodesgn.c:2638
+#: ../bin/ctodesgn.c:3170 ../bin/ctrain.c:2507 ../bin/dcar.c:3970
+#: ../bin/dcar.c:4049 ../bin/dcar.c:4133 ../bin/dcar.c:4152 ../bin/dcar.c:4469
+#: ../bin/dcar.c:4890 ../bin/dcontmgm.c:173 ../bin/dcustmgm.c:168
+#: ../bin/misc.c:1235 ../bin/misc.c:1242 ../bin/misc.c:1313
+#: ../bin/track.c:1656 ../bin/track.c:1753 ../bin/track.c:1767
+msgid "No"
+msgstr "Ei"
+
+#: ../bin/cblock.c:750
+#, fuzzy
+msgid "Delete Block"
+msgstr "Poista raiteita"
+
+#: ../bin/cblock.c:795
+#, fuzzy, c-format
+msgid "Deleting block %s"
+msgstr "Poista raiteita"
+
+#: ../bin/cblock.c:811
+#, fuzzy
+msgid "Modify Block"
+msgstr "Muokkaa raidetta"
+
+#: ../bin/cblock.c:844
+msgid "Edit block"
+msgstr ""
+
+#: ../bin/cblock.c:850
+#, c-format
+msgid "Edit block %d"
+msgstr ""
+
+#: ../bin/ccontrol.c:172 ../bin/csensor.c:164 ../bin/csignal.c:239
+#: ../bin/ctrain.c:183
+msgid "Position"
+msgstr "Sijainti"
+
+#: ../bin/ccontrol.c:173 ../bin/ccontrol.c:431
+msgid "On Script"
+msgstr ""
+
+#: ../bin/ccontrol.c:174 ../bin/ccontrol.c:433
+msgid "Off Script"
+msgstr ""
+
+#: ../bin/ccontrol.c:240
+#, fuzzy
+msgid "Change Control"
+msgstr "Junien hallinta"
+
+#: ../bin/ccontrol.c:282 ../bin/csensor.c:252
+#, fuzzy, c-format
+msgid "(%d [%s]): Layer=%u, at %0.3f,%0.3f"
+msgstr "(%d): Taso=%d %s"
+
+#: ../bin/ccontrol.c:295 ../bin/ccontrol.c:640
+#, fuzzy
+msgid "Control"
+msgstr "Junien hallinta"
+
+#: ../bin/ccontrol.c:427
+#, fuzzy
+msgid "Origin X"
+msgstr "Origo: X"
+
+#: ../bin/ccontrol.c:429 ../bin/csensor.c:393 ../bin/csignal.c:513
+#, fuzzy
+msgid "Origin Y"
+msgstr "Origo: X"
+
+#: ../bin/ccontrol.c:445
+#, fuzzy
+msgid "Create Control"
+msgstr "Junien hallinta"
+
+#: ../bin/ccontrol.c:448
+#, fuzzy
+msgid "Modify Control"
+msgstr "Junien hallinta"
+
+#: ../bin/ccontrol.c:485
+#, fuzzy
+msgid "Edit control"
+msgstr "Junien hallinta"
+
+#: ../bin/ccontrol.c:526
+#, fuzzy
+msgid "Place control"
+msgstr "Aseta ympyrä"
+
+#: ../bin/ccornu.c:200 ../bin/ccornu.c:203 ../bin/ccornu.c:206
+#: ../bin/ccornu.c:260
+#, fuzzy, c-format
+msgid "%s FlexTrack"
+msgstr "Fleksi"
+
+#: ../bin/ccornu.c:254
+msgid " FLEX "
+msgstr ""
+
+#: ../bin/ccornu.c:903 ../bin/cjoin.c:894 ../bin/cmisc.c:59
+msgid "First"
+msgstr "Ensimmäinen"
+
+#: ../bin/ccornu.c:910 ../bin/cjoin.c:899
+msgid "Second"
+msgstr "Toinen"
+
+#: ../bin/ccornu.c:981 ../bin/ccornu.c:2005 ../bin/ccornu.c:2035
+#: ../bin/tcornu.c:830 ../bin/tcornu.c:1037 ../bin/tcornu.c:1363
+#, c-format
+msgid ""
+"Cornu Create Failed for p1[%0.3f,%0.3f] p2[%0.3f,%0.3f], c1[%0.3f,%0.3f] c2[%"
+"0.3f,%0.3f], a1=%0.3f a2=%0.3f, r1=%s r2=%s"
+msgstr ""
+
+#: ../bin/ccornu.c:1020 ../bin/ccornu.c:1640 ../bin/ccornu.c:1659
+#: ../bin/tbezier.c:246 ../bin/tbezier.c:253 ../bin/tcornu.c:295
+#: ../bin/tcornu.c:300
+#, fuzzy
+msgid "End Angle"
+msgstr "Syötä kulma ..."
+
+#: ../bin/ccornu.c:1023 ../bin/ccornu.c:1639 ../bin/ccornu.c:1658
+#, fuzzy
+msgid "End Radius"
+msgstr "Säde"
+
+#: ../bin/ccornu.c:1076
+#, fuzzy
+msgid "Select Point, or Add Point"
+msgstr "Valitse päätepiste"
+
+#: ../bin/ccornu.c:1248
+msgid "Not close enough to track or point, reselect"
+msgstr ""
+
+#: ../bin/ccornu.c:1254
+#, fuzzy
+msgid "Drag out end of Cornu"
+msgstr "Vedä jänne päätepisteiden välille"
+
+#: ../bin/ccornu.c:1256
+#, fuzzy
+msgid "Drag along end of track"
+msgstr "Vedä luodaksesi lähtevän raiteen"
+
+#: ../bin/ccornu.c:1258
+#, fuzzy
+msgid "Drag to move"
+msgstr "Raahaa pyörittääksesi"
+
+#: ../bin/ccornu.c:1261
+msgid "Drag point to new location, Delete to remove"
+msgstr ""
+
+#: ../bin/ccornu.c:1265
+#, fuzzy
+msgid "Drag to change end radius"
+msgstr "Aseta säde raahaamalla"
+
+#: ../bin/ccornu.c:1268
+#, fuzzy
+msgid "Drag to change end angle"
+msgstr "Muuta korkeutta raahaamalla"
+
+#: ../bin/ccornu.c:1283
+msgid "Pick any circle to adjust or add - Enter to accept, Esc to cancel"
+msgstr ""
+
+#: ../bin/ccornu.c:1295
+msgid "Track can't be split"
+msgstr ""
+
+#: ../bin/ccornu.c:1357
+#, fuzzy
+msgid "Too close to other end of selected Track"
+msgstr "Nosta tai laske kaikkia valittuja raiteita"
+
+#: ../bin/ccornu.c:1365
+#, fuzzy
+msgid "Can't move end inside a turnout"
+msgstr "Luo käsin aseteltu vaihde"
+
+#: ../bin/ccornu.c:1507
+msgid "Can't extend connected Bezier or Cornu"
+msgstr ""
+
+#: ../bin/ccornu.c:1579
+#, c-format
+msgid ""
+"Cornu : Min Radius=%s MaxRateofCurveChange/Scale=%s Length=%s Winding Arc=%s"
+msgstr ""
+
+#: ../bin/ccornu.c:1601 ../bin/ccornu.c:2271
+msgid "Helix Already Connected"
+msgstr ""
+
+#: ../bin/ccornu.c:1615
+#, fuzzy
+msgid "No Valid end point on that track"
+msgstr "Aseta suoran raiteen 1. päätepiste"
+
+#: ../bin/ccornu.c:1620
+msgid "Track is different scale"
+msgstr ""
+
+#: ../bin/ccornu.c:1673
+msgid ""
+"Pick on point to adjust it along track - Delete to remove, Enter to confirm, "
+"ESC to abort"
+msgstr ""
+
+#: ../bin/ccornu.c:1703
+msgid "Cornu has too complex shape - adjust end pts"
+msgstr ""
+
+#: ../bin/ccornu.c:1714
+#, fuzzy, c-format
+msgid "Cornu point %d too close to other end of connect track - reposition it"
+msgstr "Nosta tai laske kaikkia valittuja raiteita"
+
+#: ../bin/ccornu.c:1719
+#, fuzzy
+msgid "Create Cornu"
+msgstr "Luo viivoja"
+
+#: ../bin/ccornu.c:1908
+msgid "Now Select or Add (+Shift) a Point"
+msgstr ""
+
+#: ../bin/ccornu.c:1967
+#, fuzzy, c-format
+msgid "Cornu end %d too close to other end of connect track - reposition it"
+msgstr "Nosta tai laske kaikkia valittuja raiteita"
+
+#: ../bin/ccornu.c:1972
+#, fuzzy
+msgid "Modify Cornu"
+msgstr "Muokkaa raidetta"
+
+#: ../bin/ccornu.c:1987
+#, c-format
+msgid "Cornu Extension Create Failed for end %d"
+msgstr ""
+
+#: ../bin/ccornu.c:2079
+#, c-format
+msgid "Connected Track End Adjust for end %d failed"
+msgstr ""
+
+#: ../bin/ccornu.c:2090
+msgid "Modify Cornu Cancelled"
+msgstr ""
+
+#: ../bin/ccornu.c:2247
+msgid "Left click - Start Cornu track"
+msgstr ""
+
+#: ../bin/ccornu.c:2249
+msgid "Left click - Place Flextrack"
+msgstr ""
+
+#: ../bin/ccornu.c:2252
+msgid "Left click - join with Cornu track"
+msgstr ""
+
+#: ../bin/ccornu.c:2254
+#, fuzzy
+msgid "Left click - join with Cornu track, Shift Left click - move to join"
+msgstr ""
+"Hiiren vasen: yhdistä raiteet, Vaihto + hiiren vasen: siirrä yhdistääksesi"
+
+#: ../bin/ccornu.c:2285
+#, fuzzy
+msgid "No valid open endpoint on that track"
+msgstr "Siirretty päätepisteen taakse"
+
+#: ../bin/ccornu.c:2313 ../bin/ccornu.c:2325
+#, fuzzy
+msgid "Drag arm in the direction of track"
+msgstr "Vedä päätepisteestä kaarteen suuntaan"
+
+#: ../bin/ccornu.c:2329
+msgid "No Unconnected Track End there"
+msgstr ""
+
+#: ../bin/ccornu.c:2340 ../bin/ccornu.c:2364
+msgid "No Valid Track End there"
+msgstr ""
+
+#: ../bin/ccornu.c:2352
+#, fuzzy
+msgid "Locked - Move 1st end point of Cornu track along track 1"
+msgstr "Aseta suoran raiteen 1. päätepiste"
+
+#: ../bin/ccornu.c:2376
+#, fuzzy
+msgid "Locked - Move 2nd end point of Cornu track along track 2"
+msgstr "Aseta suoran raiteen 1. päätepiste"
+
+#: ../bin/ccornu.c:2450
+msgid "Track can't be split - so locked to endpoint"
+msgstr ""
+
+#: ../bin/ccornu.c:2455
+#, fuzzy
+msgid "Point not on track 1"
+msgstr "Yhdistä kaksi raidetta"
+
+#: ../bin/ccornu.c:2493
+#, fuzzy
+msgid "Pick other end of Cornu"
+msgstr "Vedä jänne päätepisteiden välille"
+
+#: ../bin/ccornu.c:2495
+msgid ""
+"Select flextrack ends or anchors and drag, Enter to approve, Esc to Cancel"
+msgstr ""
+
+#: ../bin/ccornu.c:2499
+#, fuzzy
+msgid "Put other end of Cornu on a track with an unconnected end point"
+msgstr "Aseta suoran raiteen 1. päätepiste"
+
+#: ../bin/ccornu.c:2717 ../bin/ccornu.c:2930
+#, fuzzy
+msgid "Not on a Track"
+msgstr "Ei raiteilla"
+
+#: ../bin/ccornu.c:2725
+#, fuzzy
+msgid "Select a Track To Convert"
+msgstr "Valitse raideosat"
+
+#: ../bin/ccornu.c:2729
+msgid "Convert all Selected Tracks to Cornu Tracks?"
+msgstr ""
+
+#: ../bin/ccornu.c:2734
+#, fuzzy
+msgid "Convert Cornu"
+msgstr "Luo viivoja"
+
+#: ../bin/ccornu.c:2886
+#, c-format
+msgid "Tracks Counts: %d converted %d unconvertible %d created %d deleted"
+msgstr ""
+
+#: ../bin/ccornu.c:2886 ../bin/ccornu.c:3000
+msgid "OK"
+msgstr ""
+
+#: ../bin/ccornu.c:2936
+msgid "Select a Cornu or Bezier Track To Convert to Fixed"
+msgstr ""
+
+#: ../bin/ccornu.c:2940
+msgid "Convert all Selected Tracks to Fixed Tracks?"
+msgstr ""
+
+#: ../bin/ccornu.c:2949
+msgid "Convert Bezier and Cornu"
+msgstr ""
+
+#: ../bin/ccornu.c:3000
+#, c-format
+msgid "Tracks Counts: %d converted %d unconvertible %d deleted"
+msgstr ""
+
+#: ../bin/ccornu.c:3028
+#, fuzzy
+msgid "Convert"
+msgstr "Sisältö"
+
+#: ../bin/ccornu.c:3029
+#, fuzzy
+msgid "Convert To Cornu"
+msgstr "Luo viivoja"
+
+#: ../bin/ccornu.c:3030
+#, fuzzy
+msgid "Convert From Cornu"
+msgstr "Kaari päätepisteiden välille"
+
+#: ../bin/ccurve.c:169
+#, fuzzy
+msgid "Drag from endpoint in direction of curve - lock to track open endpoint"
+msgstr "Vedä päätepisteestä kaarteen suuntaan"
+
+#: ../bin/ccurve.c:171
+#, fuzzy
+msgid "Drag from endpoint in direction of curve"
+msgstr "Vedä päätepisteestä kaarteen suuntaan"
+
+#: ../bin/ccurve.c:175
+#, fuzzy
+msgid "Drag from endpoint to center - lock to track open endpoint"
+msgstr "Vedä päätepisteestä keskipisteeseen"
+
+#: ../bin/ccurve.c:177
+#, fuzzy
+msgid "Drag from endpoint to center"
+msgstr "Vedä päätepisteestä keskipisteeseen"
+
+#: ../bin/ccurve.c:180
+#, fuzzy
+msgid "Drag from center to endpoint"
+msgstr "Vedä keskipisteestä päätepisteeseen"
+
+#: ../bin/ccurve.c:183
+#, fuzzy
+msgid "Drag from one to other end of chord"
+msgstr "Vedä jänne päätepisteiden välille"
+
+#: ../bin/ccurve.c:241
+#, fuzzy
+msgid "End locked: Drag out curve start"
+msgstr "Vedä luodaksesi lähtevän raiteen"
+
+#: ../bin/ccurve.c:242
+#, fuzzy
+msgid "Drag along curve start"
+msgstr "Vedä luodaksesi lähtevän raiteen"
+
+#: ../bin/ccurve.c:250
+msgid "End locked: Drag out curve center"
+msgstr ""
+
+#: ../bin/ccurve.c:251
+#, fuzzy
+msgid "Drag out curve center"
+msgstr "Vedä luodaksesi lähtevän raiteen"
+
+#: ../bin/ccurve.c:258
+#, fuzzy
+msgid "Drag out from center to endpoint"
+msgstr "Vedä keskipisteestä päätepisteeseen"
+
+#: ../bin/ccurve.c:267
+#, fuzzy
+msgid "End locked: Drag to other end of chord"
+msgstr "Vedä jänne päätepisteiden välille"
+
+#: ../bin/ccurve.c:269
+msgid "Drag to other end of chord"
+msgstr "Vedä jänne päätepisteiden välille"
+
+#: ../bin/ccurve.c:324
+#, c-format
+msgid "Start Locked: Drag out curve start - Angle=%0.3f"
+msgstr ""
+
+#: ../bin/ccurve.c:325
+#, c-format
+msgid "Drag out curve start - Angle=%0.3f"
+msgstr ""
+
+#: ../bin/ccurve.c:331
+#, fuzzy, c-format
+msgid "Tangent locked: Drag out center - Radius=%s Angle=%0.3f"
+msgstr "Tangentti raide: Pituus %s Kulma %0.3f"
+
+#: ../bin/ccurve.c:332
+#, fuzzy, c-format
+msgid "Drag out center - Radius=%s Angle=%0.3f"
+msgstr "Säde=%s Kulma=%0.3f"
+
+#: ../bin/ccurve.c:338
+#, fuzzy, c-format
+msgid "Drag to Edge: Radius=%s Angle=%0.3f"
+msgstr "Säde=%s Kulma=%0.3f"
+
+#: ../bin/ccurve.c:344
+#, fuzzy, c-format
+msgid "Start locked: Drag out chord length=%s angle=%0.3f"
+msgstr "Tangentti raide: Pituus %s Kulma %0.3f"
+
+#: ../bin/ccurve.c:345
+#, fuzzy, c-format
+msgid "Drag out chord length=%s angle=%0.3f"
+msgstr "Suora raideosa Pituus=%s Kulma=%0.3f"
+
+#: ../bin/ccurve.c:399 ../bin/ccurve.c:557 ../bin/drawgeom.c:735
+msgid "Drag on Red arrows to adjust curve"
+msgstr "Asettele kaari vetämällä punaisista nuolista"
+
+#: ../bin/ccurve.c:497 ../bin/cjoin.c:210 ../bin/cmodify.c:580
+#: ../bin/cturntbl.c:580
+#, c-format
+msgid "Straight Track: Length=%s Angle=%0.3f"
+msgstr "Suora raideosa: Pituus=%s Kulma=%0.3f"
+
+#: ../bin/ccurve.c:504 ../bin/cmodify.c:585 ../bin/drawgeom.c:618
+#: ../wlib/gtklib/ixhelp.c:235
+msgid "Back"
+msgstr "Takaisin"
+
+#: ../bin/ccurve.c:523
+#, c-format
+msgid "Curved Track: Radius=%s Angle=%0.3f Length=%s"
+msgstr "Kaareva raideosa: Säde=%s Kulma=%0.3f Pituus=%s"
+
+#: ../bin/ccurve.c:577 ../bin/cstraigh.c:162
+msgid "Create Straight Track"
+msgstr "Luo suora raideosa"
+
+#: ../bin/ccurve.c:589
+msgid "Create Curved Track"
+msgstr "Luo kaareva raideosa"
+
+#: ../bin/ccurve.c:660
+msgid "Elevation Difference"
+msgstr "Korkeusero"
+
+#: ../bin/ccurve.c:661 ../bin/cdraw.c:514 ../bin/cdraw.c:1437
+#: ../bin/cdraw.c:1583 ../bin/cdraw.c:2231 ../bin/cdraw.c:2430
+#: ../bin/cdraw.c:2444 ../bin/compound.c:545 ../bin/compound.c:550
+#: ../bin/compound.c:555 ../bin/compound.c:560 ../bin/ctodesgn.c:180
+#: ../bin/ctodesgn.c:181 ../bin/ctodesgn.c:182 ../bin/ctodesgn.c:183
+#: ../bin/ctodesgn.c:299 ../bin/ctodesgn.c:302 ../bin/ctodesgn.c:304
+#: ../bin/ctodesgn.c:365 ../bin/ctodesgn.c:366 ../bin/ctodesgn.c:371
+#: ../bin/ctodesgn.c:435 ../bin/ctodesgn.c:439 ../bin/ctodesgn.c:440
+#: ../bin/ctodesgn.c:446 ../bin/ctodesgn.c:615 ../bin/tbezier.c:247
+#: ../bin/tbezier.c:254 ../bin/tcornu.c:301 ../bin/tcurve.c:369
+msgid "Radius"
+msgstr "Säde"
+
+#: ../bin/ccurve.c:662 ../bin/tcurve.c:370
+msgid "Turns"
+msgstr "Kierroksia"
+
+#: ../bin/ccurve.c:663
+msgid "Angular Separation"
+msgstr "Sisäänkäyntien välinen kulma"
+
+#: ../bin/ccurve.c:664 ../bin/celev.c:47 ../bin/compound.c:562
+#: ../bin/tbezier.c:259 ../bin/tcornu.c:308 ../bin/tcurve.c:376
+#: ../bin/tease.c:529 ../bin/tstraigh.c:91
+msgid "Grade"
+msgstr "Nousukulma"
+
+#: ../bin/ccurve.c:665
+msgid "Vertical Separation"
+msgstr "Kerrosten välinen etäisyys"
+
+#: ../bin/ccurve.c:667
+msgid "Total Length"
+msgstr "Kokonaispituus"
+
+#: ../bin/ccurve.c:743
+#, c-format
+msgid "Total Length %s"
+msgstr "Kokonaispituus %s"
+
+#: ../bin/ccurve.c:781 ../bin/ccurve.c:985 ../bin/tcurve.c:809
+msgid "Helix"
+msgstr "Helix"
+
+#: ../bin/ccurve.c:795
+msgid "Circle Radius"
+msgstr "Ympyrän säde"
+
+#: ../bin/ccurve.c:800
+msgid "Click on Circle Edge"
+msgstr "Aseta ympyrän kehän piste"
+
+#: ../bin/ccurve.c:804
+msgid "Click on Circle Center"
+msgstr "Aseta ympyrän keskipiste"
+
+#: ../bin/ccurve.c:835
+msgid "Drag to Center"
+msgstr "Raahaa keskustaan"
+
+#: ../bin/ccurve.c:839
+msgid "Drag to Edge"
+msgstr "Raahaa kehälle"
+
+#: ../bin/ccurve.c:859 ../bin/ccurve.c:863
+#, c-format
+msgid "Radius=%s"
+msgstr "Säde=%s"
+
+#: ../bin/ccurve.c:884
+msgid "Create Helix Track"
+msgstr "Luo helix raide"
+
+#: ../bin/ccurve.c:899
+msgid "Create Circle Track"
+msgstr "Luo ympyrärata"
+
+#: ../bin/ccurve.c:954
+#, fuzzy
+msgid "Cornu Curve"
+msgstr "Kaareva raide"
+
+#: ../bin/ccurve.c:956
+msgid "Curve Track"
+msgstr "Kaareva raide"
+
+#: ../bin/ccurve.c:956
+msgid "Curve Tracks"
+msgstr "Kaarevat raideosat"
+
+#: ../bin/ccurve.c:957
+msgid "Curve from End-Pt"
+msgstr "Kaari päätepisteestä"
+
+#: ../bin/ccurve.c:958
+msgid "Curve from Tangent"
+msgstr "Kaari kehältä"
+
+#: ../bin/ccurve.c:959
+msgid "Curve from Center"
+msgstr "Kaari keskipisteestä"
+
+#: ../bin/ccurve.c:960
+msgid "Curve from Chord"
+msgstr "Kaari päätepisteiden välille"
+
+#: ../bin/ccurve.c:961 ../bin/cdraw.c:2572
+#, fuzzy
+msgid "Bezier Curve"
+msgstr "Yhdistä kaarteet"
+
+#: ../bin/ccurve.c:964 ../bin/tcurve.c:643
+msgid "Circle Track"
+msgstr "Ympyrärata"
+
+#: ../bin/ccurve.c:964
+msgid "Circle Tracks"
+msgstr "Ympyräradat"
+
+#: ../bin/ccurve.c:965
+msgid "Fixed Radius Circle"
+msgstr "Määriteltysäteinen ympyrä"
+
+#: ../bin/ccurve.c:966
+msgid "Circle from Tangent"
+msgstr "Ympyrä kehältä"
+
+#: ../bin/ccurve.c:967
+msgid "Circle from Center"
+msgstr "Ympyrä keskustasta"
+
+#: ../bin/cdraw.c:130
+msgid "Font Size must be > 0"
+msgstr "Kirjasinkoon on oltava > 0"
+
+#: ../bin/cdraw.c:509
+msgid "First Point: X,Y"
+msgstr ""
+
+#: ../bin/cdraw.c:510 ../bin/tcurve.c:368
+#, fuzzy
+msgid "Center: X,Y"
+msgstr "Keskipiste: X"
+
+#: ../bin/cdraw.c:511 ../bin/cdraw.c:532 ../bin/cdraw.c:1427
+#: ../bin/cdraw.c:1572 ../bin/cdraw.c:2229 ../bin/cdraw.c:2451
+#: ../bin/cdraw.c:2471 ../bin/cdraw.c:2475 ../bin/compound.c:543
+#: ../bin/compound.c:548 ../bin/compound.c:553 ../bin/compound.c:558
+#: ../bin/compound.c:564 ../bin/cprint.c:155 ../bin/csignal.c:240
+#: ../bin/csignal.c:515 ../bin/ctodesgn.c:188 ../bin/ctodesgn.c:189
+#: ../bin/ctodesgn.c:190 ../bin/ctodesgn.c:192 ../bin/ctodesgn.c:237
+#: ../bin/ctodesgn.c:260 ../bin/ctodesgn.c:262 ../bin/ctodesgn.c:297
+#: ../bin/ctodesgn.c:300 ../bin/ctodesgn.c:326 ../bin/ctodesgn.c:329
+#: ../bin/ctodesgn.c:363 ../bin/ctodesgn.c:368 ../bin/ctodesgn.c:392
+#: ../bin/ctodesgn.c:396 ../bin/ctodesgn.c:433 ../bin/ctodesgn.c:437
+#: ../bin/ctodesgn.c:442 ../bin/ctodesgn.c:468 ../bin/ctodesgn.c:488
+#: ../bin/ctodesgn.c:509 ../bin/ctodesgn.c:616 ../bin/ctrain.c:184
+#: ../bin/tease.c:524 ../bin/tstraigh.c:90
+msgid "Angle"
+msgstr "Kulma"
+
+#: ../bin/cdraw.c:512 ../bin/tcurve.c:374
+msgid "CCW Angle"
+msgstr "Vasemman pään kulma"
+
+#: ../bin/cdraw.c:513 ../bin/tcurve.c:375
+msgid "CW Angle"
+msgstr "Oikean pään kulma"
+
+#: ../bin/cdraw.c:516 ../bin/cdraw.c:1434 ../bin/cdraw.c:1556
+#: ../bin/cprint.c:130
+msgid "Height"
+msgstr "Korkeus"
+
+#: ../bin/cdraw.c:517 ../bin/cdraw.c:1432 ../bin/cdraw.c:1555
+#: ../bin/cdraw.c:2226 ../bin/cdraw.c:2488 ../bin/ctrain.c:186
+#: ../bin/dcar.c:2234
+msgid "Width"
+msgstr "Leveys"
+
+#: ../bin/cdraw.c:518
+msgid "Keep Origin Relative"
+msgstr ""
+
+#: ../bin/cdraw.c:519
+#, fuzzy
+msgid "Rot Origin: X,Y"
+msgstr "Origo: X"
+
+#: ../bin/cdraw.c:520 ../bin/cdraw.c:1441
+#, fuzzy
+msgid "Rotate Angle"
+msgstr "Oikean raiteen kulma"
+
+#: ../bin/cdraw.c:521
+msgid "Point Count"
+msgstr "Pisteitä"
+
+#: ../bin/cdraw.c:522 ../bin/cdraw.c:2204 ../bin/ctodesgn.c:202
+#: ../bin/tbezier.c:261
+msgid "Line Width"
+msgstr "Viivan paksuus"
+
+#: ../bin/cdraw.c:523 ../bin/cdraw.c:2233 ../bin/tbezier.c:260
+#, fuzzy
+msgid "Line Type"
+msgstr "Puutavaran tyyppi"
+
+#: ../bin/cdraw.c:524 ../bin/cdraw.c:2206 ../bin/cdraw.c:2208
+#: ../bin/cdraw.c:2306 ../bin/cdraw.c:2339 ../bin/cmisc.c:125
+#: ../bin/ctext.c:68 ../bin/ctext.c:147 ../bin/ctodesgn.c:203
+#: ../bin/dcar.c:2230 ../bin/dlayer.c:485 ../bin/doption.c:558
+msgid "Color"
+msgstr "Väri"
+
+#: ../bin/cdraw.c:525
+#, fuzzy
+msgid "Filled"
+msgstr "Täytetty nelikulmio"
+
+#: ../bin/cdraw.c:526
+#, fuzzy
+msgid "Open End"
+msgstr "Pysty"
+
+#: ../bin/cdraw.c:527 ../bin/cmisc.c:148 ../bin/cmisc.c:149 ../bin/cmisc.c:150
+#: ../bin/cmisc.c:151 ../bin/ctext.c:70 ../bin/ctext.c:148
+#, fuzzy
+msgid "Boxed"
+msgstr "Nelikulmio"
+
+#: ../bin/cdraw.c:528 ../bin/cdraw.c:1108 ../bin/cdraw.c:2240
+msgid "Lumber"
+msgstr "Puutavara"
+
+#: ../bin/cdraw.c:529
+msgid "Orientation"
+msgstr "Suunta"
+
+#: ../bin/cdraw.c:530 ../bin/cdraw.c:2222
+#: ../../../../build/work/app/bin/bllnhlp.c:588
+msgid "Size"
+msgstr "Koko"
+
+#: ../bin/cdraw.c:531 ../bin/compound.c:563 ../bin/tease.c:523
+#, fuzzy
+msgid "Origin: X,Y"
+msgstr "Origo: X"
+
+#: ../bin/cdraw.c:533 ../bin/ctext.c:66 ../bin/ctext.c:146
+msgid "Font Size"
+msgstr "Kirjasinkoko"
+
+#: ../bin/cdraw.c:534 ../bin/cdraw.c:1254 ../bin/ctext.c:262
+msgid "Text"
+msgstr "Teksti"
+
+#: ../bin/cdraw.c:535 ../bin/cmisc.c:144 ../bin/compound.c:565
+#: ../bin/tcurve.c:377 ../bin/tease.c:530 ../bin/tstraigh.c:92
+msgid "Pivot"
+msgstr "Kiertopiste"
+
+#: ../bin/cdraw.c:536 ../bin/compound.c:571 ../bin/cturntbl.c:253
+#: ../bin/doption.c:139 ../bin/doption.c:140 ../bin/tbezier.c:263
+#: ../bin/tcornu.c:309 ../bin/tcurve.c:378 ../bin/tease.c:531
+#: ../bin/tstraigh.c:93 ../../../../build/work/app/bin/bllnhlp.c:666
+#: ../../../../build/work/app/bin/bllnhlp.c:667
+#: ../../../../build/work/app/bin/bllnhlp.c:668
+#: ../../../../build/work/app/bin/bllnhlp.c:669
+#: ../../../../build/work/app/bin/bllnhlp.c:670
+#: ../../../../build/work/app/bin/bllnhlp.c:671
+#: ../../../../build/work/app/bin/bllnhlp.c:672
+#: ../../../../build/work/app/bin/bllnhlp.c:673
+#: ../../../../build/work/app/bin/bllnhlp.c:674
+#: ../../../../build/work/app/bin/bllnhlp.c:675
+#: ../../../../build/work/app/bin/bllnhlp.c:676
+#: ../../../../build/work/app/bin/bllnhlp.c:677
+#: ../../../../build/work/app/bin/bllnhlp.c:678
+#: ../../../../build/work/app/bin/bllnhlp.c:679
+#: ../../../../build/work/app/bin/bllnhlp.c:680
+#: ../../../../build/work/app/bin/bllnhlp.c:681
+#: ../../../../build/work/app/bin/bllnhlp.c:682
+#: ../../../../build/work/app/bin/bllnhlp.c:683
+#: ../../../../build/work/app/bin/bllnhlp.c:684
+#: ../../../../build/work/app/bin/bllnhlp.c:685
+msgid "Layer"
+msgstr "Taso"
+
+#: ../bin/cdraw.c:1093
+msgid "Straight Line"
+msgstr "Suora viiva"
+
+#: ../bin/cdraw.c:1098 ../bin/cdraw.c:2564
+msgid "Dimension Line"
+msgstr "Mittajana"
+
+#: ../bin/cdraw.c:1119 ../bin/cdraw.c:2241 ../bin/cdraw.c:2566
+msgid "Table Edge"
+msgstr "Pöydän reuna"
+
+#: ../bin/cdraw.c:1139 ../bin/cdraw.c:2246 ../bin/cdraw.c:2247
+#: ../bin/cdraw.c:2248
+msgid "Circle"
+msgstr "Ympyrä"
+
+#: ../bin/cdraw.c:1150
+msgid "Curved Line"
+msgstr "Kaari"
+
+#: ../bin/cdraw.c:1166 ../bin/cdraw.c:2251 ../bin/cdraw.c:2252
+#: ../bin/cdraw.c:2253
+msgid "Filled Circle"
+msgstr "Täytetty ympyrä"
+
+#: ../bin/cdraw.c:1185
+#, fuzzy
+msgid "Rectangle"
+msgstr "Mittakaavan muutos"
+
+#: ../bin/cdraw.c:1199 ../bin/cdraw.c:2257
+msgid "Polyline"
+msgstr "Monikulmio"
+
+#: ../bin/cdraw.c:1203 ../bin/cdraw.c:2250 ../bin/cdraw.c:2583
+msgid "Polygon"
+msgstr "Monikulmio"
+
+#: ../bin/cdraw.c:1221
+#, fuzzy
+msgid "Filled Rectangle"
+msgstr "Täytetty ympyrä"
+
+#: ../bin/cdraw.c:1234 ../bin/cdraw.c:2255 ../bin/cdraw.c:2584
+#, fuzzy
+msgid "Filled Polygon"
+msgstr "Täytetty nelikulmio"
+
+#: ../bin/cdraw.c:1260
+#, fuzzy, c-format
+msgid "%s(%d) Layer=%d"
+msgstr "%s: Taso=%d"
+
+#: ../bin/cdraw.c:1280 ../bin/cdraw.c:2309 ../bin/compound.c:956
+#: ../bin/doption.c:134 ../bin/tbezier.c:458
+msgid "Solid"
+msgstr "Yhtenäinen"
+
+#: ../bin/cdraw.c:1281 ../bin/cdraw.c:2311 ../bin/compound.c:957
+#: ../bin/doption.c:131 ../bin/tbezier.c:459
+msgid "Dash"
+msgstr "Katkoviiva"
+
+#: ../bin/cdraw.c:1282 ../bin/cdraw.c:2310 ../bin/compound.c:958
+#: ../bin/tbezier.c:460
+msgid "Dot"
+msgstr ""
+
+#: ../bin/cdraw.c:1283 ../bin/compound.c:959 ../bin/tbezier.c:461
+#, fuzzy
+msgid "DashDot"
+msgstr "Katkoviiva"
+
+#: ../bin/cdraw.c:1284 ../bin/compound.c:960 ../bin/tbezier.c:462
+msgid "DashDotDot"
+msgstr ""
+
+#: ../bin/cdraw.c:1285 ../bin/compound.c:961 ../bin/tbezier.c:463
+#, fuzzy
+msgid "CenterDot"
+msgstr "Keskipiste: X"
+
+#: ../bin/cdraw.c:1286 ../bin/compound.c:962 ../bin/tbezier.c:464
+msgid "PhantomDot"
+msgstr ""
+
+#: ../bin/cdraw.c:1291 ../bin/cdraw.c:2357
+msgid "Tiny"
+msgstr "Pikkuruinen"
+
+#: ../bin/cdraw.c:1292 ../bin/cdraw.c:2358
+msgid "Small"
+msgstr "Pieni"
+
+#: ../bin/cdraw.c:1293 ../bin/cdraw.c:2359
+msgid "Medium"
+msgstr "Keskikokoinen"
+
+#: ../bin/cdraw.c:1294 ../bin/cdraw.c:2360
+msgid "Large"
+msgstr "Suuri"
+
+#: ../bin/cdraw.c:1430
+#, fuzzy
+msgid "Relative Angle"
+msgstr "Vasemman raiteen kulma"
+
+#: ../bin/cdraw.c:1439 ../bin/cdraw.c:1587 ../bin/cdraw.c:2445
+#, fuzzy
+msgid "Arc Angle"
+msgstr "Kulma"
+
+#: ../bin/cdraw.c:1444
+#, fuzzy
+msgid "Rot Center X"
+msgstr "Keskipiste: X"
+
+#: ../bin/cdraw.c:1446
+#, fuzzy
+msgid "Rot Center Y"
+msgstr "Keskipiste: X"
+
+#: ../bin/cdraw.c:1543
+#, fuzzy
+msgid "Seg Lth"
+msgstr "Pituus"
+
+#: ../bin/cdraw.c:1544
+msgid "Rel Ang"
+msgstr ""
+
+#: ../bin/cdraw.c:2211 ../bin/cdraw.c:2213 ../bin/cdraw.c:2337
+msgid "Lumber Type"
+msgstr "Puutavaran tyyppi"
+
+#: ../bin/cdraw.c:2238
+msgid "Straight"
+msgstr "Suora"
+
+#: ../bin/cdraw.c:2239
+msgid "Dimension"
+msgstr "Etäisyys"
+
+#: ../bin/cdraw.c:2242 ../bin/cdraw.c:2243 ../bin/cdraw.c:2244
+#: ../bin/cdraw.c:2245
+msgid "Curved"
+msgstr "Kaareva"
+
+#: ../bin/cdraw.c:2249 ../bin/cdraw.c:2581
+msgid "Box"
+msgstr "Nelikulmio"
+
+#: ../bin/cdraw.c:2254 ../bin/cdraw.c:2582
+msgid "Filled Box"
+msgstr "Täytetty nelikulmio"
+
+#: ../bin/cdraw.c:2256 ../bin/tbezier.c:455
+#, fuzzy
+msgid "Bezier Line"
+msgstr "Ympyrät"
+
+#: ../bin/cdraw.c:2304
+#, c-format
+msgid "%s Line Width"
+msgstr "%s viivan paksuus"
+
+#: ../bin/cdraw.c:2307 ../bin/dcar.c:2203 ../bin/dcar.c:4367
+#: ../bin/dcar.c:4372
+msgid "Type"
+msgstr "Tyyppi"
+
+#: ../bin/cdraw.c:2312
+#, fuzzy
+msgid "Dash-Dot"
+msgstr "Katkoviiva"
+
+#: ../bin/cdraw.c:2313
+msgid "Dash-Dot-Dot"
+msgstr ""
+
+#: ../bin/cdraw.c:2326
+#, c-format
+msgid "%s Color"
+msgstr "%s väri"
+
+#: ../bin/cdraw.c:2355
+msgid "Dimension Line Size"
+msgstr "Mittajanan koko"
+
+#: ../bin/cdraw.c:2367
+msgid "Drag to create Table Edge"
+msgstr "Piirrä pöydän reuna"
+
+#: ../bin/cdraw.c:2469
+#, fuzzy
+msgid "Seg Length"
+msgstr "Vasemman raiteen pituus"
+
+#: ../bin/cdraw.c:2473
+#, fuzzy
+msgid "Rel Angle"
+msgstr "Vasemman raiteen kulma"
+
+#: ../bin/cdraw.c:2563
+msgid "Line"
+msgstr "Viiva"
+
+#: ../bin/cdraw.c:2563
+msgid "Draw Line"
+msgstr "Piirrä viiva"
+
+#: ../bin/cdraw.c:2564
+msgid "Draw Dimension Line"
+msgstr "Piirrä mittajana"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:363
+#: ../bin/cdraw.c:2565 ../../../../build/work/app/i18n/custmsg.h:1249
+msgid "Benchwork"
+msgstr "Runkorakenne"
+
+#: ../bin/cdraw.c:2565
+msgid "Draw Benchwork"
+msgstr "Piirrä runkorakenne"
+
+#: ../bin/cdraw.c:2566
+msgid "Draw Table Edge"
+msgstr "Piirrä pöydän reuna"
+
+#: ../bin/cdraw.c:2568
+msgid "Curve End"
+msgstr "Kaari päätepisteestä"
+
+#: ../bin/cdraw.c:2568
+msgid "Draw Curve from End"
+msgstr "Piirrä kaari päätepisteestä"
+
+#: ../bin/cdraw.c:2569
+msgid "Curve Tangent"
+msgstr "Kaari kehältä"
+
+#: ../bin/cdraw.c:2569
+msgid "Draw Curve from Tangent"
+msgstr "Piirrä kaari kehältä"
+
+#: ../bin/cdraw.c:2570
+msgid "Curve Center"
+msgstr "Kaari keskipisteestä"
+
+#: ../bin/cdraw.c:2570
+msgid "Draw Curve from Center"
+msgstr "Piirrä kaari keskipisteestä"
+
+#: ../bin/cdraw.c:2571
+msgid "Curve Chord"
+msgstr "Kaari jänteestä"
+
+#: ../bin/cdraw.c:2571
+msgid "Draw Curve from Chord"
+msgstr "Piirrä kaari·päätepisteiden·välille"
+
+#: ../bin/cdraw.c:2572
+#, fuzzy
+msgid "Draw Bezier"
+msgstr "Piirrä viiva"
+
+#: ../bin/cdraw.c:2575
+msgid "Circle Tangent"
+msgstr "Ympyrä kehältä"
+
+#: ../bin/cdraw.c:2575
+msgid "Draw Circle from Tangent"
+msgstr "Piirrä ympyrä kehältä"
+
+#: ../bin/cdraw.c:2576
+msgid "Circle Center"
+msgstr "Ympyrä keskustasta"
+
+#: ../bin/cdraw.c:2576
+msgid "Draw Circle from Center"
+msgstr "Piirrä ympyrä keskipisteestä"
+
+#: ../bin/cdraw.c:2578
+msgid "Circle Filled Tangent"
+msgstr "Täytetty ympyrä kehältä"
+
+#: ../bin/cdraw.c:2578
+msgid "Draw Filled Circle from Tangent"
+msgstr "Piirrä täytetty ympyrä kehältä"
+
+#: ../bin/cdraw.c:2579
+msgid "Circle Filled Center"
+msgstr "Täytetty ympyrä keskustasta"
+
+#: ../bin/cdraw.c:2579
+msgid "Draw Filled Circle from Center"
+msgstr "Piirrä täytetty ympyrä keskipisteestä"
+
+#: ../bin/cdraw.c:2581
+msgid "Draw Box"
+msgstr "Piirrä nelikulmio"
+
+#: ../bin/cdraw.c:2582
+msgid "Draw Filled Box"
+msgstr "Piirrä täytetty nelikulmio"
+
+#: ../bin/cdraw.c:2583
+msgid "Draw Polygon"
+msgstr "Piirrä täytetty monikulmio"
+
+#: ../bin/cdraw.c:2584
+#, fuzzy
+msgid "Draw Filled Polygon"
+msgstr "Piirrä täytetty monikulmio"
+
+#: ../bin/cdraw.c:2585
+#, fuzzy
+msgid "PolyLine"
+msgstr "Monikulmio"
+
+#: ../bin/cdraw.c:2585
+#, fuzzy
+msgid "Draw PolyLine"
+msgstr "Piirrä monikulmio"
+
+#: ../bin/cdraw.c:2602
+msgid "Straight Objects"
+msgstr "Suorat objektit"
+
+#: ../bin/cdraw.c:2602
+msgid "Draw Straight Objects"
+msgstr "Suorien objektien piirto"
+
+#: ../bin/cdraw.c:2603
+msgid "Curved Lines"
+msgstr "Kaaret"
+
+#: ../bin/cdraw.c:2603
+msgid "Draw Curved Lines"
+msgstr "Kaarien piirto"
+
+#: ../bin/cdraw.c:2604
+msgid "Circle Lines"
+msgstr "Ympyrät"
+
+#: ../bin/cdraw.c:2604
+msgid "Draw Circles"
+msgstr "Ympyröiden piirto"
+
+#: ../bin/cdraw.c:2605
+msgid "Shapes"
+msgstr "Muodot"
+
+#: ../bin/cdraw.c:2605
+msgid "Draw Shapes"
+msgstr "Muotojen piirto"
+
+#: ../bin/cdraw.c:2893
+msgid "Close Polygon - 'c'"
+msgstr ""
+
+#: ../bin/cdraw.c:2894
+msgid "Make PolyLine - 'l'"
+msgstr ""
+
+#: ../bin/cdraw.c:2895
+msgid "Fill Polygon - 'f'"
+msgstr ""
+
+#: ../bin/cdraw.c:2896
+msgid "Empty Polygon - 'e'"
+msgstr ""
+
+#: ../bin/cdraw.c:2898
+msgid "Points Mode - 'p'"
+msgstr ""
+
+#: ../bin/cdraw.c:2899
+msgid "Delete Selected Point - 'Del'"
+msgstr ""
+
+#: ../bin/cdraw.c:2900
+msgid "Vertex Point - 'v'"
+msgstr ""
+
+#: ../bin/cdraw.c:2901
+msgid "Round Corner - 'r'"
+msgstr ""
+
+#: ../bin/cdraw.c:2902
+msgid "Smooth Corner - 's'"
+msgstr ""
+
+#: ../bin/cdraw.c:2904 ../bin/cselect.c:3348
+msgid "LineType..."
+msgstr ""
+
+#: ../bin/cdraw.c:2905 ../bin/cselect.c:3349
+#, fuzzy
+msgid "Solid Line"
+msgstr "Monikulmio"
+
+#: ../bin/cdraw.c:2906 ../bin/cselect.c:3350
+#, fuzzy
+msgid "Dashed Line"
+msgstr "Piirrä viiva"
+
+#: ../bin/cdraw.c:2907 ../bin/cselect.c:3351
+#, fuzzy
+msgid "Dotted Line"
+msgstr "Kaari"
+
+#: ../bin/cdraw.c:2908
+#, fuzzy
+msgid "Dash-Dot Line"
+msgstr "Piirrä viiva"
+
+#: ../bin/cdraw.c:2909
+msgid "Dash-Dot-Dot Line"
+msgstr ""
+
+#: ../bin/cdraw.c:2910
+#, fuzzy
+msgid "Center-Dot Line"
+msgstr "Luo viivoja"
+
+#: ../bin/cdraw.c:2911
+msgid "Phantom-Dot Line"
+msgstr ""
+
+#: ../bin/cdraw.c:2913
+msgid "Origin Mode - 'o'"
+msgstr ""
+
+#: ../bin/cdraw.c:2914
+msgid "Reset Origin - '0'"
+msgstr ""
+
+#: ../bin/cdraw.c:2915
+msgid "Origin to Selected - 'l'"
+msgstr ""
+
+#: ../bin/cdraw.c:2916
+msgid "Origin to Centroid - 'c'"
+msgstr ""
+
+#: ../bin/celev.c:46 ../bin/cprofile.c:1535 ../bin/csplit.c:148
+#: ../bin/csplit.c:153 ../bin/dease.c:67 ../bin/doption.c:132
+#: ../bin/doption.c:134
+msgid "None"
+msgstr "Ei mitään"
+
+#: ../bin/celev.c:46
+msgid "Defined"
+msgstr "Määritelty"
+
+#: ../bin/celev.c:46
+msgid "Hidden"
+msgstr "Piilossa"
+
+#: ../bin/celev.c:47
+msgid "Computed"
+msgstr "Laskettu"
+
+#: ../bin/celev.c:47
+msgid "Station"
+msgstr "Asema"
+
+#: ../bin/celev.c:47 ../bin/cprofile.c:1533 ../bin/dcmpnd.c:75
+msgid "Ignore"
+msgstr "Hylkää"
+
+#: ../bin/celev.c:203
+msgid "Set Elevation"
+msgstr "Aseta korkeus"
+
+#: ../bin/celev.c:296 ../bin/celev.c:303 ../bin/celev.c:306
+#, c-format
+msgid "Undefined"
+msgstr "Määrittelemätön"
+
+#: ../bin/celev.c:362 ../bin/celev.c:495
+msgid "Elevation"
+msgstr "Korkeustaso"
+
+#: ../bin/celev.c:362 ../bin/cmisc.c:459 ../bin/dcontmgm.c:299
+#: ../bin/dcustmgm.c:395 ../bin/dlayer.c:1124 ../bin/dpricels.c:154
+#: ../bin/filenoteui.c:249 ../bin/linknoteui.c:182
+#: ../bin/paramfilesearch_ui.c:396 ../bin/textnoteui.c:171
+msgid "Done"
+msgstr "Valmis"
+
+#: ../bin/celev.c:374 ../bin/celev.c:426 ../bin/celev.c:428 ../bin/celev.c:447
+msgid "Click on end, +Shift to split, +Ctrl to move description"
+msgstr ""
+
+#: ../bin/celev.c:394
+msgid "Move to end or track crossing +Shift to split"
+msgstr ""
+
+#: ../bin/celev.c:398
+#, fuzzy
+msgid "Move to end or track crossing"
+msgstr "Aseta suoran raiteen 1. päätepiste"
+
+#: ../bin/celev.c:407
+#, c-format
+msgid "Crossing - First %0.3f, Second %0.3f, Clearance %0.3f - Click to Split"
+msgstr ""
+
+#: ../bin/celev.c:409
+#, c-format
+msgid "Crossing - First %0.3f, Second %0.3f, Clearance %0.3f"
+msgstr ""
+
+#: ../bin/celev.c:420
+#, fuzzy, c-format
+msgid "Track elevation %0.3f"
+msgstr "Raideosien korkeudet"
+
+#: ../bin/celev.c:423
+#, c-format
+msgid "Click to split here - elevation %0.3f"
+msgstr ""
+
+#: ../bin/celev.c:451
+#, fuzzy
+msgid "Point selected!"
+msgstr "Kirjasinta ei valittu"
+
+#: ../bin/celev.c:454
+#, fuzzy
+msgid "Split track"
+msgstr "Pilko raide"
+
+#: ../bin/celev.c:459
+#, fuzzy
+msgid "Track split!"
+msgstr "Raiteet"
+
+#: ../bin/cgroup.c:592
+msgid "Ungroup Object"
+msgstr "Pura ryhmittely"
+
+#: ../bin/cgroup.c:604
+#, c-format
+msgid "%d objects ungrouped"
+msgstr "%d objetia purettu ryhmästä"
+
+#: ../bin/cgroup.c:606
+msgid "No objects ungrouped"
+msgstr "Yhtään objektia ei purettu ryhmästä"
+
+#: ../bin/cgroup.c:617
+msgid "Replace with new group?"
+msgstr "Korvaa uudella ryhmällä?"
+
+#: ../bin/cgroup.c:623 ../bin/compound.c:566 ../bin/cstruct.c:69
+#: ../bin/ctodesgn.c:194 ../bin/ctodesgn.c:2916 ../bin/cturnout.c:82
+#: ../bin/dcar.c:2195 ../bin/dcar.c:4367 ../bin/dcar.c:4372
+#: ../bin/dcmpnd.c:456 ../bin/dcustmgm.c:59
+#: ../../../../build/work/app/bin/bllnhlp.c:370
+#: ../../../../build/work/app/bin/bllnhlp.c:565
+msgid "Manufacturer"
+msgstr "Valmistaja"
+
+#: ../bin/cgroup.c:624 ../bin/cmisc.c:459 ../bin/cstruct.c:69
+#: ../bin/ctodesgn.c:2917 ../bin/ctodesgn.c:2918 ../bin/ctrain.c:187
+#: ../bin/cturnout.c:82 ../bin/dcar.c:2211 ../bin/dcar.c:4368
+#: ../bin/dcar.c:4373 ../bin/dcmpnd.c:457 ../bin/dcustmgm.c:60
+#: ../bin/denum.c:182 ../bin/denum.c:183 ../bin/denum.c:186
+#: ../../../../build/work/app/bin/bllnhlp.c:371
+msgid "Description"
+msgstr "Kuvaus"
+
+#: ../bin/cgroup.c:625 ../bin/dcmpnd.c:458
+msgid "#"
+msgstr "#"
+
+#: ../bin/cgroup.c:626 ../bin/compound.c:570
+msgid "# Segments"
+msgstr "Lohkoja"
+
+#: ../bin/cgroup.c:628
+#, fuzzy
+msgid "Offset X,Y:"
+msgstr "Siirtymä"
+
+#: ../bin/cgroup.c:1235
+msgid "No endpts"
+msgstr "Ei päätepisteitä"
+
+#: ../bin/cgroup.c:1350
+msgid "No paths"
+msgstr "Ei reittejä"
+
+#: ../bin/cgroup.c:1619 ../bin/cgroup.c:1669
+msgid "Group Tracks"
+msgstr "Ryhmittele raideosia"
+
+#: ../bin/cgroup.c:1729
+msgid "Group Objects"
+msgstr "Ryhmittele"
+
+#: ../bin/chndldto.c:70
+msgid "Place frog and drag angle"
+msgstr "Aseta risteyskappale ja raahaa asettaaksesi kulma"
+
+#: ../bin/chndldto.c:87
+msgid "frog"
+msgstr "Risteyskappale"
+
+#: ../bin/chndldto.c:93
+msgid "Drag to set angle"
+msgstr "Aseta kulma raahaamalla"
+
+#: ../bin/chndldto.c:132
+#, c-format
+msgid "Angle = %0.2f Frog# = %0.2f"
+msgstr "Kulma = %0.2f Risteysnumero = %0.2f"
+
+#: ../bin/chndldto.c:134
+msgid "Frog angle is too close to 0"
+msgstr "Risteyskulma on liian lähellä nollaa"
+
+#: ../bin/chndldto.c:137
+msgid "Select point position"
+msgstr "Aseta kielten kärjet"
+
+#: ../bin/chndldto.c:149 ../bin/chndldto.c:174
+msgid "points"
+msgstr "Kielien päät"
+
+#: ../bin/chndldto.c:271
+#, c-format
+msgid "Length = %0.2f Angle = %0.2f Frog# = %0.2f"
+msgstr "Pituus = %0.2f Kulma = %0.2f Risteysnumero = %0.2f"
+
+#: ../bin/chndldto.c:274
+msgid "Create Hand Laid Turnout"
+msgstr "Luo käsin aseteltu vaihde"
+
+#: ../bin/chndldto.c:358
+msgid "HandLaidTurnout"
+msgstr "Käsin aseteltu vaihde"
+
+#: ../bin/cjoin.c:166
+#, c-format
+msgid "Curved Track: Radius=%s Length=%s"
+msgstr "Kaareva raideosa: Säde=%s Pituus=%s"
+
+#: ../bin/cjoin.c:252
+#, c-format
+msgid "Curved Track: Radius=%s Length=%s Angle=%0.3f"
+msgstr "Kaareva raideosa: Säde=%s Pituus=%s Kulma=%0.3f"
+
+#: ../bin/cjoin.c:348
+#, c-format
+msgid "Track (%d) is too short for transition-curve by %0.3f"
+msgstr "Raide (%d) on %0.3f liian lyhyt kaarreloivennusta varten"
+
+#: ../bin/cjoin.c:366
+#, c-format
+msgid "Connecting track is too short by %0.3f"
+msgstr "Yhdysraide on %0.3f liian lyhyt"
+
+#: ../bin/cjoin.c:410
+msgid "Click on an unselected End-Point"
+msgstr "Valitsemattoman raideosan päätepiste"
+
+#: ../bin/cjoin.c:411
+msgid "Click on a selected End-Point"
+msgstr "Valitun raideosan päätepiste"
+
+#: ../bin/cjoin.c:417
+msgid "unselected"
+msgstr "valitsematon"
+
+#: ../bin/cjoin.c:417 ../bin/cprint.c:161
+msgid "selected"
+msgstr "valittu"
+
+#: ../bin/cjoin.c:474
+msgid "Left click - Select first draw object end"
+msgstr ""
+
+#: ../bin/cjoin.c:513 ../bin/cjoin.c:539
+msgid "Not a line - Try again"
+msgstr ""
+
+#: ../bin/cjoin.c:535
+#, fuzzy
+msgid "Left click - Select second object end"
+msgstr "Klikkaa valittua objektia kohdistaaksesi"
+
+#: ../bin/cjoin.c:547
+msgid "Same draw object and same endpoint - Try again"
+msgstr ""
+
+#: ../bin/cjoin.c:581
+#, fuzzy
+msgid "Create PolyLine"
+msgstr "Luo viivoja"
+
+#: ../bin/cjoin.c:654 ../bin/cjoin.c:863
+#, fuzzy
+msgid "Desired Radius"
+msgstr "Ympyrän säde"
+
+#: ../bin/cjoin.c:804
+#, fuzzy
+msgid "Left click - join with track"
+msgstr ""
+"Hiiren vasen: yhdistä raiteet, Vaihto + hiiren vasen: siirrä yhdistääksesi"
+
+#: ../bin/cjoin.c:806
+msgid "Left click - join with track, Shift Left click - move to join"
+msgstr ""
+"Hiiren vasen: yhdistä raiteet, Vaihto + hiiren vasen: siirrä yhdistääksesi"
+
+#: ../bin/cjoin.c:856
+#, fuzzy, c-format
+msgid "Select 2nd track - desired radius %0.3f"
+msgstr "Valitse määriteltävä raideosa"
+
+#: ../bin/cjoin.c:858 ../bin/cjoin.c:1256 ../bin/cjoin.c:1263
+msgid "Select 2nd track"
+msgstr "Valitse 2. raideosa"
+
+#: ../bin/cjoin.c:1065
+msgid "Beyond end of 2nd track"
+msgstr "2. raideosan päätepisteen takana"
+
+#: ../bin/cjoin.c:1100
+msgid "Beyond end of 1st track"
+msgstr "1. raideosan päätepisteen takana"
+
+#: ../bin/cjoin.c:1122
+msgid "First Track Type not supported for non-Cornu Join"
+msgstr ""
+
+#: ../bin/cjoin.c:1129
+msgid "First "
+msgstr "Ensimmäinen "
+
+#: ../bin/cjoin.c:1154
+msgid "Second Track Type not supported for non-Cornu Join"
+msgstr ""
+
+#: ../bin/cjoin.c:1161
+msgid "Second "
+msgstr "Toinen "
+
+#: ../bin/cjoin.c:1175 ../bin/track.c:2270 ../bin/track.c:2306
+#: ../bin/track.c:2372
+msgid "Connecting "
+msgstr "Yhdistetään "
+
+#: ../bin/cjoin.c:1266
+msgid "Join Tracks"
+msgstr "Yhdistä raiteet"
+
+#: ../bin/cjoin.c:1348
+msgid "Join"
+msgstr "Yhdistä"
+
+#: ../bin/cjoin.c:1349
+#, fuzzy
+msgid "Join Track"
+msgstr "Yhdistä raiteet"
+
+#: ../bin/cjoin.c:1350
+#, fuzzy
+msgid "Join Lines"
+msgstr "Viivat"
+
+#: ../bin/cmisc.c:59
+msgid "Middle"
+msgstr "Keskimmäinen"
+
+#: ../bin/cmisc.c:59 ../bin/macro.c:98
+msgid "End"
+msgstr "Lopeta"
+
+#: ../bin/cmisc.c:242 ../bin/cmodify.c:353 ../bin/compound.c:664
+#: ../bin/ctrain.c:218
+msgid "Change Track"
+msgstr "Muuta raiteita"
+
+#: ../bin/cmisc.c:572
+msgid "Select track to describe"
+msgstr "Valitse määriteltävä raideosa"
+
+#: ../bin/cmisc.c:650 ../bin/doption.c:235
+msgid "Properties"
+msgstr "Asetukset"
+
+#: ../bin/cmisc2.c:52
+msgid "Bridge"
+msgstr "Silta"
+
+#: ../bin/cmodify.c:203 ../bin/cmodify.c:471
+msgid "Modify Track"
+msgstr "Muokkaa raidetta"
+
+#: ../bin/cmodify.c:266
+msgid ""
+"Select a track to modify, Left-Click change length, Right-Click to add "
+"flextrack"
+msgstr ""
+
+#: ../bin/cmodify.c:512
+#, fuzzy
+msgid "Drag to add flex track"
+msgstr "Vedä luodaksesi lähtevän raiteen"
+
+#: ../bin/cmodify.c:517
+#, fuzzy
+msgid "No track to extend"
+msgstr "Yhtään raidetta ei irroitettu"
+
+#: ../bin/cmodify.c:522
+#, fuzzy
+msgid "No track selected"
+msgstr "Kirjasinta ei valittu"
+
+#: ../bin/cmodify.c:655
+#, c-format
+msgid "Curve Track: Radius=%s Length=%s Angle=%0.3f"
+msgstr "Kaareva raideosa: Säde=%s Pituus=%s Kulma=%0.3f"
+
+#: ../bin/cmodify.c:670
+msgid "Extend Track"
+msgstr "Jatka raidetta"
+
+#: ../bin/cmodify.c:794
+msgid "Modify"
+msgstr "Muokkaa"
+
+#: ../bin/cmodify.c:801 ../bin/cselect.c:3305 ../bin/cselect.c:3321
+#: ../bin/misc.c:2197 ../bin/misc.c:2199
+msgid "Zoom In"
+msgstr "Lähennä"
+
+#: ../bin/cmodify.c:802 ../bin/cselect.c:3309 ../bin/cselect.c:3322
+#: ../bin/misc.c:2201 ../bin/misc.c:2203
+msgid "Zoom Out"
+msgstr "Loitonna"
+
+#: ../bin/cmodify.c:803
+msgid "Pan center - 'c'"
+msgstr ""
+
+#: ../bin/cnote.c:69 ../bin/textnoteui.c:48 ../bin/trknote.c:60
+msgid "Note"
+msgstr "Muistiinpano"
+
+#: ../bin/cnote.c:75
+msgid "Replace this text with your layout notes"
+msgstr "Korvaa tämä teksti muistiinpanollasi"
+
+#: ../bin/compound.c:544 ../bin/compound.c:549 ../bin/compound.c:554
+#: ../bin/compound.c:559 ../bin/tbezier.c:248 ../bin/tbezier.c:255
+#: ../bin/tcornu.c:297 ../bin/tcornu.c:302
+#, fuzzy
+msgid "Center X,Y"
+msgstr "Keskipiste: X"
+
+#: ../bin/compound.c:546 ../bin/tbezier.c:249 ../bin/tcornu.c:298
+#, fuzzy
+msgid "Z1"
+msgstr "Z"
+
+#: ../bin/compound.c:551 ../bin/tbezier.c:256 ../bin/tcornu.c:303
+#, fuzzy
+msgid "Z2"
+msgstr "Z"
+
+#: ../bin/compound.c:552
+#, fuzzy
+msgid "End Pt 3: X,Y"
+msgstr "Päätepiste 1: X"
+
+#: ../bin/compound.c:556
+#, fuzzy
+msgid "Z3"
+msgstr "Z"
+
+#: ../bin/compound.c:557
+#, fuzzy
+msgid "End Pt 4: X,Y"
+msgstr "Päätepiste 1: X"
+
+#: ../bin/compound.c:561
+#, fuzzy
+msgid "Z4"
+msgstr "Z"
+
+#: ../bin/compound.c:568 ../bin/cstruct.c:69 ../bin/cturnout.c:82
+#: ../bin/dcar.c:4367 ../bin/dcar.c:4372 ../bin/dcustmgm.c:60
+#: ../bin/doption.c:137 ../bin/doption.c:138
+msgid "Part No"
+msgstr "Tuotekoodi"
+
+#: ../bin/compound.c:569
+#, fuzzy
+msgid "LineType"
+msgstr "Tyyppi"
+
+#: ../bin/compound.c:830 ../bin/cstruct.c:935 ../bin/cstruct.c:1126
+msgid "Structure"
+msgstr "Rakennus"
+
+#: ../bin/compound.c:832 ../bin/cswitchmotor.c:228 ../bin/cturnout.c:1063
+#: ../bin/cturnout.c:2888
+msgid "Turnout"
+msgstr "Palaraide"
+
+#: ../bin/compound.c:832
+msgid "Sectional Track"
+msgstr "Palaraide"
+
+#: ../bin/compound.c:836
+#, fuzzy, c-format
+msgid "%s (%d) Layer= %d %s"
+msgstr "(%d): Taso=%d %s"
+
+#: ../bin/cparalle.c:52 ../bin/cparalle.c:100 ../bin/cparalle.c:140
+#: ../bin/ctodesgn.c:538 ../bin/ctodesgn.c:558 ../bin/ctodesgn.c:578
+#: ../bin/tcurve.c:371
+msgid "Separation"
+msgstr "Väli"
+
+#: ../bin/cparalle.c:55 ../bin/cparalle.c:101
+#, fuzzy
+msgid "Radius Factor"
+msgstr "Säde2"
+
+#: ../bin/cparalle.c:141
+#, fuzzy
+msgid "Radius factor"
+msgstr "Säde2"
+
+#: ../bin/cparalle.c:154
+msgid " Track/Line doesn't support parallel"
+msgstr ""
+
+#: ../bin/cparalle.c:226
+msgid "Create Parallel Track"
+msgstr "Luo rinnakkainen raide"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:354
+#: ../bin/cparalle.c:296 ../../../../build/work/app/i18n/custmsg.h:1231
+msgid "Parallel"
+msgstr "Rinnakkainen"
+
+#: ../bin/cparalle.c:297
+#, fuzzy
+msgid "Parallel Track"
+msgstr "Luo rinnakkainen raide"
+
+#: ../bin/cparalle.c:298
+#, fuzzy
+msgid "Parallel Line"
+msgstr "Rinnakkainen"
+
+#: ../bin/cprint.c:110
+msgid "Portrait"
+msgstr "Pysty"
+
+#: ../bin/cprint.c:110
+msgid "Landscape"
+msgstr "Vaaka"
+
+#: ../bin/cprint.c:111 ../bin/cswitchmotor.c:94 ../bin/cswitchmotor.c:113
+#: ../bin/cswitchmotor.c:225 ../bin/dbench.c:78 ../bin/dease.c:67
+#: ../bin/doption.c:131 ../bin/doption.c:133 ../bin/macro.c:1406
+msgid "Normal"
+msgstr "Normaali"
+
+#: ../bin/cprint.c:111 ../bin/cswitchmotor.c:95 ../bin/cswitchmotor.c:114
+#: ../bin/cswitchmotor.c:226 ../bin/ctrain.c:941 ../bin/ctrain.c:1248
+msgid "Reverse"
+msgstr "Taakse"
+
+#: ../bin/cprint.c:112
+msgid "Engineering Data"
+msgstr "Suunnittelutiedot"
+
+#: ../bin/cprint.c:113
+#, fuzzy
+msgid "Registration Marks (in 1:1 scale only)"
+msgstr "Tulosta sivujen kohdistusmerkinnät tulostusmittakaavan ollessa 1:1?"
+
+#: ../bin/cprint.c:114
+#, fuzzy
+msgid "Page Numbers"
+msgstr "Pilarin numero"
+
+#: ../bin/cprint.c:115
+msgid "Ignore Page Margins"
+msgstr "Ei marginaaleja"
+
+#: ../bin/cprint.c:116 ../bin/csnap.c:705 ../bin/doption.c:530
+msgid "Snap Grid"
+msgstr "Kohdistusruudukko"
+
+#: ../bin/cprint.c:117
+#, fuzzy
+msgid "Rulers"
+msgstr "Viivain"
+
+#: ../bin/cprint.c:118
+#, fuzzy
+msgid "Roadbed Outline"
+msgstr "Tulosta ratapenkan ulkoreuna"
+
+#: ../bin/cprint.c:119
+#, fuzzy
+msgid "Centerline below Scale 1:1"
+msgstr "Tulosta keskiviiva"
+
+#: ../bin/cprint.c:127
+msgid "Print Scale"
+msgstr "Tulostuksen mittakaava"
+
+#: ../bin/cprint.c:128
+msgid "Page Width"
+msgstr "Sivun leveys"
+
+#: ../bin/cprint.c:129
+msgid "Max"
+msgstr "Max"
+
+#: ../bin/cprint.c:131
+msgid "Snap Shot"
+msgstr "Yhdelle sivulle"
+
+#: ../bin/cprint.c:132
+msgid "Page Format"
+msgstr "Sivun muotoilu"
+
+#: ../bin/cprint.c:133
+msgid "Print Order"
+msgstr "Tulostusjärjestys"
+
+#: ../bin/cprint.c:134
+#, fuzzy
+msgid "Print "
+msgstr "Tulosta"
+
+#: ../bin/cprint.c:149
+#, fuzzy
+msgid " Width"
+msgstr "Leveys"
+
+#: ../bin/cprint.c:151
+#, fuzzy
+msgid "Margins"
+msgstr "Päätaso"
+
+#: ../bin/cprint.c:152 ../bin/cturntbl.c:250
+msgid "Origin: X"
+msgstr "Origo: X"
+
+#: ../bin/cprint.c:153 ../bin/csnap.c:535
+msgid "Y"
+msgstr "Y"
+
+#: ../bin/cprint.c:154 ../bin/cprint.c:620 ../bin/cprofile.c:715
+#: ../bin/dcar.c:2215
+msgid "Reset"
+msgstr "Palauta"
+
+#: ../bin/cprint.c:156
+msgid "Setup"
+msgstr "Asetukset"
+
+#: ../bin/cprint.c:157 ../bin/cselect.c:3313 ../bin/misc.c:2228
+#, fuzzy
+msgid "Select All"
+msgstr "Valitse kaikki"
+
+#: ../bin/cprint.c:158 ../bin/cprofile.c:717 ../bin/layout.c:472
+#: ../bin/misc.c:726
+msgid "Clear"
+msgstr "Tyhjennä"
+
+#: ../bin/cprint.c:160
+msgid "0 pages"
+msgstr "0 sivua"
+
+#: ../bin/cprint.c:187
+#, fuzzy, c-format
+msgid "%d page"
+msgstr "%d sivua"
+
+#: ../bin/cprint.c:187
+#, c-format
+msgid "%d pages"
+msgstr "%d sivua"
+
+#: ../bin/cprint.c:408
+#, fuzzy, c-format
+msgid "PrintScale 1:%ld Room %s x %s Model Scale %s File %s"
+msgstr "Tulostusmittakaava %ld:1 Huone %s x %s Mittakaava %s Tiedosto %s"
+
+#: ../bin/cprint.c:716 ../bin/dbitmap.c:208 ../bin/filenoteui.c:158
+#: ../bin/misc.c:1235 ../bin/misc.c:1313 ../bin/param.c:2618
+#: ../wlib/gtklib/browserhelp.c:88
+#: ../../../../build/work/app/bin/bllnhlp.c:584
+msgid "Cancel"
+msgstr "Peruuta"
+
+#: ../bin/cprint.c:723
+#, fuzzy
+msgid "Print Margins"
+msgstr "Tulostimen marginaalien testisivu"
+
+#: ../bin/cprint.c:1367 ../bin/cprofile.c:719 ../bin/ctodesgn.c:2864
+#: ../bin/denum.c:55
+msgid "Print"
+msgstr "Tulosta"
+
+#: ../bin/cprint.c:1388
+msgid "Select pages to print, or drag to move print grid"
+msgstr "Valitse tulostettavat sivut tai siirrä tulostusruudukkoa raahaamalla"
+
+#: ../bin/cprint.c:1485
+msgid "Print..."
+msgstr "Tulosta..."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:350
+#: ../bin/cprofile.c:614 ../bin/cprofile.c:1448 ../bin/cprofile.c:1527
+#: ../../../../build/work/app/bin/bllnhlp.c:122
+#: ../../../../build/work/app/i18n/custmsg.h:1223
+msgid "Profile"
+msgstr "Profiili"
+
+#: ../bin/cprofile.c:632
+#, c-format
+msgid "%s Profile: %s"
+msgstr "%s Profiili: %s"
+
+#: ../bin/cprofile.c:713 ../bin/misc.c:1894
+msgid "Change"
+msgstr "Muuta"
+
+#: ../bin/cprofile.c:757 ../bin/cprofile.c:767
+#, c-format
+msgid "Elev = %0.1f"
+msgstr "Korkeus = %0.1f"
+
+#: ../bin/cprofile.c:769
+#, c-format
+msgid "Elev=%0.2f %0.1f%%"
+msgstr "Korkeus=%0.2f %0.1f%%"
+
+#: ../bin/cprofile.c:774
+#, c-format
+msgid "%0.1f%% Elev = %0.2f"
+msgstr "%0.1f%% Korkeus = %0.2f"
+
+#: ../bin/cprofile.c:779
+#, c-format
+msgid "%0.1f%% Elev = %0.2f %0.1f%%"
+msgstr "%0.1f%% Korkeus = %0.2f %0.1f%%"
+
+#: ../bin/cprofile.c:794 ../bin/cprofile.c:864 ../bin/cprofile.c:1400
+msgid "Profile Command"
+msgstr "Profiili komento"
+
+#: ../bin/cprofile.c:803 ../bin/cprofile.c:1454
+msgid "Drag to change Elevation"
+msgstr "Muuta korkeutta raahaamalla"
+
+#: ../bin/cprofile.c:905
+msgid "Select a Defined Elevation to start Profile"
+msgstr "Valitse määritelty korkeus aloittaaksesi profiili"
+
+#: ../bin/cprofile.c:907
+msgid "Select a Defined Elevation to extend Profile"
+msgstr "Valitse määritelty korkeus laajentaaksesi profiilia"
+
+#: ../bin/cprofile.c:1462
+msgid "Select a Defined Elevation to start profile"
+msgstr "Valitse määritelty korkeus aloittaaksesi profiili"
+
+#: ../bin/cprofile.c:1531
+msgid "Define"
+msgstr "Määrittele"
+
+#: ../bin/cpull.c:439 ../bin/cpull.c:595
+#, c-format
+msgid "%d tracks moved"
+msgstr "%d raideosaa siirretty"
+
+#: ../bin/cpull.c:485
+msgid "Pull Tracks"
+msgstr "Liitä raiteet"
+
+#: ../bin/cpull.c:559
+msgid "Tighten Tracks"
+msgstr "Yhdistä raiteet"
+
+#: ../bin/cpull.c:645
+msgid "Connect Multiple Tracks - Select multiple tracks to join first"
+msgstr ""
+
+#: ../bin/cpull.c:648
+#, fuzzy
+msgid "Try to Connect all Selected Tracks?"
+msgstr "Nosta tai laske kaikkia valittuja raiteita"
+
+#: ../bin/cpull.c:654
+#, fuzzy
+msgid "ReConnect"
+msgstr "Yhdistetään "
+
+#: ../bin/cpull.c:690
+#, c-format
+msgid ""
+"Round 1 %d and Round 2 %d tracks connected, %d close pairs of end Points "
+"were not connected"
+msgstr ""
+
+#: ../bin/cpull.c:715
+#, fuzzy
+msgid "Select first endpoint or turntable to connect, +Shift to tighten"
+msgstr "Valitse ensimmäinen yhdistettävä päätepiste"
+
+#: ../bin/cpull.c:717
+msgid ""
+"Select first endpoint to connect, or Right-Click for connecting selected "
+"tracks (not turntable)"
+msgstr ""
+
+#: ../bin/cpull.c:776
+#, fuzzy
+msgid "Select second endpoint or turntable to connect"
+msgstr "Valitse toinen yhdistettävä päätepiste"
+
+#: ../bin/cpull.c:783
+msgid "Same Track! - please select another"
+msgstr ""
+
+#: ../bin/cpull.c:870
+#, fuzzy
+msgid "Connect Two Tracks"
+msgstr "Liitä kaksi raidetta"
+
+#: ../bin/cpull.c:872
+msgid "Connect All Selected - 'S'"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:361
+#: ../bin/cruler.c:143 ../../../../build/work/app/i18n/custmsg.h:1245
+msgid "Ruler"
+msgstr "Viivain"
+
+#: ../bin/cselect.c:616
+msgid "Change Track Width"
+msgstr "Muuta raiteen pituutta"
+
+#: ../bin/cselect.c:640
+#, fuzzy
+msgid "Change Line Type"
+msgstr "Muuta tasojen asetuksia"
+
+#: ../bin/cselect.c:669
+msgid "Delete Tracks"
+msgstr "Poista raiteita"
+
+#: ../bin/cselect.c:745
+msgid "Hide Tracks (Tunnel)"
+msgstr "Piilota raiteet (tunneli)"
+
+#: ../bin/cselect.c:763
+#, fuzzy
+msgid "Bridge Tracks "
+msgstr "Yhdistä raiteet"
+
+#: ../bin/cselect.c:780
+#, fuzzy
+msgid "Ties Tracks "
+msgstr "Ohuet raiteet"
+
+#: ../bin/cselect.c:817 ../bin/misc.c:2348
+msgid "Move To Current Layer"
+msgstr "Siirrä nykyiselle tasolle"
+
+#: ../bin/cselect.c:857 ../bin/misc.c:2498
+msgid "Clear Elevations"
+msgstr "Poista korkeusmääritykset"
+
+#: ../bin/cselect.c:901
+msgid "Add Elevations"
+msgstr "Päätepisteiden korkeudet"
+
+#: ../bin/cselect.c:916
+msgid "Refresh Compound"
+msgstr "Päivitä vaihteet/rakennukset"
+
+#: ../bin/cselect.c:948 ../bin/dcar.c:4367 ../bin/dcar.c:4372
+#: ../bin/dcustmgm.c:60 ../bin/layout.c:463
+msgid "Scale"
+msgstr "Mittakaava"
+
+#: ../bin/cselect.c:948 ../bin/cselect.c:973
+msgid "Ratio"
+msgstr "Suhde"
+
+#: ../bin/cselect.c:957
+msgid "Do not resize track"
+msgstr "Älä muuta raiteiden kokoa"
+
+#: ../bin/cselect.c:961
+msgid "Rescale by:"
+msgstr "Muunnos:"
+
+#: ../bin/cselect.c:963
+msgid "From:"
+msgstr "Alkuperäinen:"
+
+#: ../bin/cselect.c:967
+msgid "To: "
+msgstr "Uusi:"
+
+#: ../bin/cselect.c:1034
+msgid "Rescale Tracks"
+msgstr "Muuta raiteiden mittakaavaa"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:357
+#: ../bin/cselect.c:1164 ../../../../build/work/app/i18n/custmsg.h:1237
+msgid "Rescale"
+msgstr "Mittakaavan muutos"
+
+#: ../bin/cselect.c:1465
+msgid "Cornu too tight - it was deleted"
+msgstr ""
+
+#: ../bin/cselect.c:1520
+msgid "Move To Join"
+msgstr "Siirrä yhdistääksesi"
+
+#: ../bin/cselect.c:1714
+msgid "Drag to move selected tracks - Shift+Ctrl+Arrow micro-steps the move"
+msgstr ""
+
+#: ../bin/cselect.c:1735 ../bin/cselect.c:1848 ../bin/cselect.c:2205
+msgid "Move Tracks"
+msgstr "Siirrä raiteita"
+
+#: ../bin/cselect.c:1893
+#, fuzzy
+msgid "Align: Click on a selected object to be aligned"
+msgstr "Klikkaa valittua objektia kohdistaaksesi"
+
+#: ../bin/cselect.c:1931
+#, fuzzy
+msgid "Drag to rotate selected tracks, Shift+RightClick for QuickRotate Menu"
+msgstr "Pyöritä valittuja raideosia raahaamalla"
+
+#: ../bin/cselect.c:1947 ../bin/cselect.c:2218
+msgid "Rotate Tracks"
+msgstr "Pyöritä raiteita"
+
+#: ../bin/cselect.c:1960
+msgid "Center of Rotation snapped to Turntable center"
+msgstr ""
+
+#: ../bin/cselect.c:2002 ../bin/cselect.c:2033
+#, c-format
+msgid "Angle %0.3f"
+msgstr "Kulma %0.3f"
+
+#: ../bin/cselect.c:2089
+#, fuzzy, c-format
+msgid "Angle %0.3f #%ld"
+msgstr " Kulma %0.3f #%ld"
+
+#: ../bin/cselect.c:2091
+#, fuzzy, c-format
+msgid "Angle %0.3f %s"
+msgstr "Kulma %0.3f"
+
+#: ../bin/cselect.c:2096
+msgid "Origin Set. Drag away to set start angle"
+msgstr ""
+
+#: ../bin/cselect.c:2110
+#, fuzzy
+msgid "Align: Click on the 2nd unselected object"
+msgstr "Klikkaa valitsematonta objektia"
+
+#: ../bin/cselect.c:2230
+msgid "Toggle Label"
+msgstr "Näytä/piilota merkintä"
+
+#: ../bin/cselect.c:2349 ../bin/cselect.c:2388
+msgid "Select and drag a description"
+msgstr "Valitse ja raahaa merkintöjä"
+
+#: ../bin/cselect.c:2374
+#, fuzzy
+msgid "Elevation description"
+msgstr "Vasemman kuvaus"
+
+#: ../bin/cselect.c:2377
+msgid "Hidden description - 's' to Show"
+msgstr ""
+
+#: ../bin/cselect.c:2381
+#, fuzzy
+msgid "Shown description - 'h' to Hide"
+msgstr "Näytä kuvaus"
+
+#: ../bin/cselect.c:2402
+msgid "Hidden Label - Drag to reveal"
+msgstr ""
+
+#: ../bin/cselect.c:2404
+#, fuzzy
+msgid "Drag label"
+msgstr "Raahaa paikoilleen"
+
+#: ../bin/cselect.c:2406
+msgid "Move Label"
+msgstr "Siirrä merkintöjä"
+
+#: ../bin/cselect.c:2443
+msgid "To Hide, use Context Menu"
+msgstr ""
+
+#: ../bin/cselect.c:2459 ../bin/cselect.c:3339
+#, fuzzy
+msgid "Show/Hide Description"
+msgstr "Näytä kuvaus"
+
+#: ../bin/cselect.c:2538
+msgid "Drag to mark mirror line"
+msgstr "Vedä hiirellä peilauslinja"
+
+#: ../bin/cselect.c:2549
+#, c-format
+msgid "Angle %0.2f"
+msgstr "Kulma %0.2f"
+
+#: ../bin/cselect.c:2552
+msgid "Flip Tracks"
+msgstr "Peilaa raiteet"
+
+#: ../bin/cselect.c:2899
+#, fuzzy
+msgid "Select track"
+msgstr "Valitse raideosat"
+
+#: ../bin/cselect.c:2927
+msgid "Track is in Frozen Layer"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:323
+#: ../bin/cselect.c:3279 ../bin/dcar.c:1673 ../bin/doption.c:235
+#: ../../../../build/work/app/i18n/custmsg.h:1169
+msgid "Select"
+msgstr "Valitse"
+
+#: ../bin/cselect.c:3298 ../bin/cselect.c:3318 ../bin/misc.c:2192
+msgid "Undo"
+msgstr "Kumoa"
+
+#: ../bin/cselect.c:3299 ../bin/cselect.c:3319 ../bin/misc.c:2194
+msgid "Redo"
+msgstr "Tee uudelleen"
+
+#: ../bin/cselect.c:3306 ../bin/draw.c:3112
+msgid "Zoom to extents - 'e'"
+msgstr ""
+
+#: ../bin/cselect.c:3307 ../bin/draw.c:3123 ../bin/misc.c:2375
+msgid "&Zoom"
+msgstr "&Zoom"
+
+#: ../bin/cselect.c:3310 ../bin/draw.c:3122
+msgid "Pan to Origin - 'o'/'0'"
+msgstr ""
+
+#: ../bin/cselect.c:3311 ../bin/cselect.c:3323
+msgid "Pan Center Here - 'c'"
+msgstr ""
+
+#: ../bin/cselect.c:3314 ../bin/misc.c:2231 ../bin/misc.c:2354
+msgid "Select Current Layer"
+msgstr "Valitse nykyinen taso"
+
+#: ../bin/cselect.c:3325 ../bin/misc.c:2233
+msgid "Deselect All"
+msgstr "Poista valinnat"
+
+#: ../bin/cselect.c:3327
+#, fuzzy
+msgid "Properties -'?'"
+msgstr "Asetukset"
+
+#: ../bin/cselect.c:3328
+#, fuzzy
+msgid "Modify/Activate Track"
+msgstr "Muokkaa raidetta"
+
+#: ../bin/cselect.c:3330 ../bin/misc.c:2219
+#, fuzzy
+msgid "Cut"
+msgstr "&Leikkaa"
+
+#: ../bin/cselect.c:3331 ../bin/misc.c:2221
+msgid "Copy"
+msgstr "Kopioi"
+
+#: ../bin/cselect.c:3332 ../bin/fileio.c:1620 ../bin/misc.c:2223
+msgid "Paste"
+msgstr "Liitä"
+
+#: ../bin/cselect.c:3333 ../bin/misc.c:2225
+#, fuzzy
+msgid "Clone"
+msgstr "Sulje"
+
+#: ../bin/cselect.c:3335
+#, fuzzy
+msgid "Rotate..."
+msgstr "Pyöritä"
+
+#: ../bin/cselect.c:3337
+msgid "Align"
+msgstr "Kohdista"
+
+#: ../bin/cselect.c:3341
+msgid "Hide/NoHide"
+msgstr ""
+
+#: ../bin/cselect.c:3342
+msgid "Bridge/NoBridge"
+msgstr ""
+
+#: ../bin/cselect.c:3343
+msgid "NoTies/Ties"
+msgstr ""
+
+#: ../bin/cselect.c:3344
+msgid "Thickness..."
+msgstr ""
+
+#: ../bin/cselect.c:3345 ../bin/misc.c:2366
+msgid "Thin Tracks"
+msgstr "Ohuet raiteet"
+
+#: ../bin/cselect.c:3346 ../bin/misc.c:2367
+msgid "Medium Tracks"
+msgstr "Keskipaksut raiteet"
+
+#: ../bin/cselect.c:3347 ../bin/misc.c:2368
+msgid "Thick Tracks"
+msgstr "Paksut raiteet"
+
+#: ../bin/cselect.c:3352
+msgid "Dash-Dotted Line"
+msgstr ""
+
+#: ../bin/cselect.c:3353
+msgid "Dash-Dot-Dotted Line"
+msgstr ""
+
+#: ../bin/cselect.c:3355
+#, fuzzy
+msgid "Move To Front"
+msgstr "Siirrä yhdistääksesi"
+
+#: ../bin/cselect.c:3356
+#, fuzzy
+msgid "Move To Back"
+msgstr "Siirrä raiteita"
+
+#: ../bin/cselect.c:3358
+#, fuzzy
+msgid "Group"
+msgstr "Ryhmittele"
+
+#: ../bin/cselect.c:3359
+#, fuzzy
+msgid "UnGroup"
+msgstr "Pura ryhmittely"
+
+#: ../bin/cselect.c:3394
+msgid "Move Description"
+msgstr "Siirrä merkintöjä"
+
+#: ../bin/cselect.c:3401 ../bin/misc.c:1935 ../bin/misc.c:2236
+msgid "Move"
+msgstr "Siirrä"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:368
+#: ../bin/cselect.c:3403 ../bin/misc.c:1926 ../bin/misc.c:2238
+#: ../../../../build/work/app/i18n/custmsg.h:1259
+msgid "Rotate"
+msgstr "Pyöritä"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:369
+#: ../bin/cselect.c:3405 ../bin/dcar.c:2217
+#: ../../../../build/work/app/i18n/custmsg.h:1261
+msgid "Flip"
+msgstr "Peilikuva"
+
+#: ../bin/csensor.c:216
+#, fuzzy
+msgid "Change Sensor"
+msgstr "Muuta mittakaavaa"
+
+#: ../bin/csensor.c:262 ../bin/csensor.c:596
+msgid "Sensor"
+msgstr ""
+
+#: ../bin/csensor.c:391 ../bin/csignal.c:511
+#, fuzzy
+msgid "Orgin X"
+msgstr "Marginaali"
+
+#: ../bin/csensor.c:407
+#, fuzzy
+msgid "Create Sensor"
+msgstr "Luo runkorakenne"
+
+#: ../bin/csensor.c:410
+#, fuzzy
+msgid "Modify Sensor"
+msgstr "Muokkaa raidetta"
+
+#: ../bin/csensor.c:443
+#, fuzzy
+msgid "Edit sensor"
+msgstr "Muokkaa -valikko"
+
+#: ../bin/csensor.c:481
+#, fuzzy
+msgid "Place sensor"
+msgstr "Aseta uusi vaihde"
+
+#: ../bin/csignal.c:241
+#, fuzzy
+msgid "Number Of Heads"
+msgstr "Numerot"
+
+#: ../bin/csignal.c:280
+#, fuzzy
+msgid "Change Signal"
+msgstr "Muuta mittakaavaa"
+
+#: ../bin/csignal.c:314
+#, fuzzy, c-format
+msgid "(%d [%s]): Layer=%u, %d heads at %0.3f,%0.3f A%0.3f"
+msgstr "(%d): Taso=%d %s"
+
+#: ../bin/csignal.c:325 ../bin/csignal.c:914
+msgid "Signal"
+msgstr ""
+
+#: ../bin/csignal.c:517
+#, fuzzy
+msgid "Number of Heads"
+msgstr "Numerot"
+
+#: ../bin/csignal.c:522
+#, fuzzy
+msgid "Edit Aspect"
+msgstr "Muokkaa -valikko"
+
+#: ../bin/csignal.c:524
+msgid "Add Aspect"
+msgstr ""
+
+#: ../bin/csignal.c:526
+#, fuzzy
+msgid "Delete Aspect"
+msgstr "Poista valitut objektit"
+
+#: ../bin/csignal.c:539
+msgid "Aspect Index"
+msgstr ""
+
+#: ../bin/csignal.c:554
+#, fuzzy
+msgid "Create Signal"
+msgstr "Luo viivoja"
+
+#: ../bin/csignal.c:558
+#, fuzzy
+msgid "Modify Signal"
+msgstr "Muokkaa raidetta"
+
+#: ../bin/csignal.c:665
+#, fuzzy
+msgid "Edit aspect"
+msgstr "Muokkaa -valikko"
+
+#: ../bin/csignal.c:712
+#, fuzzy, c-format
+msgid "Are you sure you want to delete the %d aspect(s)"
+msgstr "Haluatko varmasti poistaa nämä %d vaunua/veturia?"
+
+#: ../bin/csignal.c:733
+#, fuzzy
+msgid "Edit signal"
+msgstr "Muokkaa -valikko"
+
+#: ../bin/csignal.c:795
+msgid "Place base of signal"
+msgstr ""
+
+#: ../bin/csignal.c:802
+#, fuzzy
+msgid "Drag to orient signal"
+msgstr "Aseta kulma raahaamalla"
+
+#: ../bin/csnap.c:516
+msgid "Horz"
+msgstr "Vaaka"
+
+#: ../bin/csnap.c:518
+msgid "Spacing"
+msgstr "Väli"
+
+#: ../bin/csnap.c:520
+msgid "Divisions"
+msgstr "Jako"
+
+#: ../bin/csnap.c:523
+msgid "Enable"
+msgstr "Salli"
+
+#: ../bin/csnap.c:524
+msgid "Vert"
+msgstr "Pysty"
+
+#: ../bin/csnap.c:533 ../bin/dease.c:76
+msgid "X"
+msgstr "X"
+
+#: ../bin/csnap.c:537
+msgid "A"
+msgstr "K"
+
+#: ../bin/csnap.c:540
+msgid "Show"
+msgstr "Näytä"
+
+#: ../bin/csnap.c:790
+msgid "Change Grid..."
+msgstr "Kohdistusruudukko..."
+
+#: ../bin/csplit.c:44
+msgid "Set Block Gaps"
+msgstr "Aseta lohkojen välit"
+
+#: ../bin/csplit.c:105
+msgid "Select track to split"
+msgstr "Valitse pilkottava raide"
+
+#: ../bin/csplit.c:125
+#, fuzzy
+msgid "Can't Split that Track"
+msgstr "Pilko raide"
+
+#: ../bin/csplit.c:133 ../bin/csplit.c:221
+msgid "Split Track"
+msgstr "Pilko raide"
+
+#: ../bin/csplit.c:149 ../bin/dbench.c:69 ../bin/dbench.c:80
+msgid "Left"
+msgstr "Vasen"
+
+#: ../bin/csplit.c:150 ../bin/dbench.c:70 ../bin/dbench.c:79
+msgid "Right"
+msgstr "Oikea"
+
+#: ../bin/csplit.c:151 ../bin/csplit.c:156
+msgid "Both"
+msgstr "Molemmat"
+
+#: ../bin/csplit.c:154
+msgid "Top"
+msgstr "Päällimmäiseksi"
+
+#: ../bin/csplit.c:155
+msgid "Bottom"
+msgstr "Alimmaiseksi"
+
+#: ../bin/cstraigh.c:77
+#, fuzzy
+msgid "Place 1st endpoint of straight track, snap to unconnected endpoint"
+msgstr "Aseta suoran raiteen 1. päätepiste"
+
+#: ../bin/cstraigh.c:104
+msgid "Drag to place 2nd end point"
+msgstr "Raahaa asettaaksesi 2. päätepiste"
+
+#: ../bin/cstraigh.c:140
+#, c-format
+msgid "Straight Track Length=%s Angle=%0.3f"
+msgstr "Suora raideosa Pituus=%s Kulma=%0.3f"
+
+#: ../bin/cstraigh.c:191 ../bin/tstraigh.c:267
+msgid "Straight Track"
+msgstr "Suora raide"
+
+#: ../bin/cstruct.c:71 ../bin/cturnout.c:84 ../bin/doption.c:131
+#: ../bin/doption.c:240
+msgid "Hide"
+msgstr "Piilota"
+
+#: ../bin/cstruct.c:449 ../bin/cstruct.c:476
+msgid "Pier Number"
+msgstr "Pilarin numero"
+
+#: ../bin/cstruct.c:561
+#, c-format
+msgid "Scale %d:1"
+msgstr "Mittakaava %d:1"
+
+#: ../bin/cstruct.c:563
+#, c-format
+msgid "Width %s"
+msgstr "Leveys %s"
+
+#: ../bin/cstruct.c:565
+#, c-format
+msgid "Height %s"
+msgstr "Korkeus %s"
+
+#: ../bin/cstruct.c:706
+msgid "Place Structure"
+msgstr "Aseta rakennus"
+
+#: ../bin/cstruct.c:798 ../bin/cstruct.c:872 ../bin/cstruct.c:1103
+#: ../bin/cturnout.c:2753 ../bin/cturnout.c:2808 ../bin/cturnout.c:2933
+#: ../bin/cturnout.c:3072
+#, fuzzy
+msgid ""
+"Left-Drag to place, Ctrl+Left-Drag or Right-Drag to Rotate, Space or Enter "
+"to accept, Esc to Cancel"
+msgstr ""
+"Siirrä vetämällä hiiren vasemmalla, pyöritä vetämällä hiiren oikealla, paina "
+"välilyönti tai return asettaaksesi raideosa paikalleen tai esc peruuttaaksesi"
+
+#: ../bin/cstruct.c:820
+msgid "Drag to place"
+msgstr "Raahaa paikoilleen"
+
+#: ../bin/cstruct.c:842
+msgid "Drag to rotate"
+msgstr "Raahaa pyörittääksesi"
+
+#: ../bin/cstruct.c:862
+#, c-format
+msgid "Angle = %0.3f"
+msgstr "Kulma = %0.3f"
+
+#: ../bin/cstruct.c:952
+msgid "Select Structure and then drag to place"
+msgstr "Valitse rakennus ja raahaa paikoilleen"
+
+#: ../bin/cstruct.c:990
+msgid ""
+"Left drag to move, right drag to rotate, or press Return or click Ok to "
+"finalize"
+msgstr ""
+"Siirrä raahaamalla hiiren vasemmalla, pyöritä rahaamalla hiiren oikealla, "
+"tai paina return tai klikkaa Ok kun valmis"
+
+#: ../bin/cstruct.c:1073 ../bin/cturnout.c:3039
+#, c-format
+msgid "Place %s and draw into position"
+msgstr "Aseta %s ja raahaa paikoilleen"
+
+#: ../bin/cswitchmotor.c:96 ../bin/cswitchmotor.c:115
+#: ../bin/cswitchmotor.c:227
+#, fuzzy
+msgid "Point Sense"
+msgstr "Pisteitä"
+
+#: ../bin/cswitchmotor.c:116
+#, fuzzy
+msgid "Turnout Number"
+msgstr "Tuotekoodi"
+
+#: ../bin/cswitchmotor.c:292
+#, fuzzy
+msgid "Change Switch Motor"
+msgstr "Muuta suuntaa"
+
+#: ../bin/cswitchmotor.c:359
+msgid "Switch motor"
+msgstr ""
+
+#: ../bin/cswitchmotor.c:475
+#, c-format
+msgid "ResolveSwitchmotor: Turnout T%d: T%d doesn't exist"
+msgstr ""
+
+#: ../bin/cswitchmotor.c:544 ../bin/cswitchmotor.c:714
+msgid "Switch motor must have a name!"
+msgstr ""
+
+#: ../bin/cswitchmotor.c:548
+#, fuzzy
+msgid "Create Switch Motor"
+msgstr "Piirto"
+
+#: ../bin/cswitchmotor.c:580
+#, fuzzy
+msgid "Create switch motor"
+msgstr "Luo suora raideosa"
+
+#: ../bin/cswitchmotor.c:594 ../bin/cswitchmotor.c:625
+#: ../bin/cswitchmotor.c:657
+#, fuzzy
+msgid "Select a turnout"
+msgstr "Ensin valitsemme vaihteen.\n"
+
+#: ../bin/cswitchmotor.c:601
+msgid "Not a turnout!"
+msgstr ""
+
+#: ../bin/cswitchmotor.c:634 ../bin/cswitchmotor.c:665
+msgid "Not a switch motor!"
+msgstr ""
+
+#: ../bin/cswitchmotor.c:670
+#, c-format
+msgid "Really delete switch motor %s?"
+msgstr ""
+
+#: ../bin/cswitchmotor.c:671
+msgid "Delete Switch Motor"
+msgstr ""
+
+#: ../bin/cswitchmotor.c:718
+msgid "Modify Switch Motor"
+msgstr ""
+
+#: ../bin/cswitchmotor.c:744
+msgid "Edit switch motor"
+msgstr ""
+
+#: ../bin/cswitchmotor.c:750
+#, c-format
+msgid "Edit switch motor %d"
+msgstr ""
+
+#: ../bin/cswitchmotor.c:858
+msgid "Switch Motor"
+msgstr ""
+
+#: ../bin/cswitchmotor.c:871
+#, c-format
+msgid "Deleting Switch Motor %s"
+msgstr ""
+
+#: ../bin/ctext.c:195 ../bin/ctext.c:234
+msgid "Create Text"
+msgstr "Luo teksti"
+
+#: ../bin/ctext.c:264
+msgid "Fonts..."
+msgstr "Kirjasimet..."
+
+#: ../bin/ctodesgn.c:139
+msgid "Frog #"
+msgstr "Risteysnumero"
+
+#: ../bin/ctodesgn.c:139
+msgid "Degrees"
+msgstr "Astetta"
+
+#: ../bin/ctodesgn.c:140
+msgid "Dual Path"
+msgstr ""
+
+#: ../bin/ctodesgn.c:140
+#, fuzzy
+msgid "Quad Path"
+msgstr " ja malli"
+
+#: ../bin/ctodesgn.c:175 ../bin/ctodesgn.c:176 ../bin/ctodesgn.c:177
+#: ../bin/ctodesgn.c:178 ../bin/ctodesgn.c:238 ../bin/ctodesgn.c:261
+#: ../bin/ctodesgn.c:263 ../bin/ctodesgn.c:298 ../bin/ctodesgn.c:301
+#: ../bin/ctodesgn.c:327 ../bin/ctodesgn.c:328 ../bin/ctodesgn.c:364
+#: ../bin/ctodesgn.c:367 ../bin/ctodesgn.c:393 ../bin/ctodesgn.c:395
+#: ../bin/ctodesgn.c:434 ../bin/ctodesgn.c:438 ../bin/ctodesgn.c:441
+#: ../bin/ctodesgn.c:653
+msgid "Offset"
+msgstr "Siirtymä"
+
+#: ../bin/ctodesgn.c:196 ../bin/ctodesgn.c:2911 ../bin/ctodesgn.c:2912
+msgid "Left Description"
+msgstr "Vasemman kuvaus"
+
+#: ../bin/ctodesgn.c:197 ../bin/ctodesgn.c:200
+msgid " #"
+msgstr " #"
+
+#: ../bin/ctodesgn.c:199 ../bin/ctodesgn.c:2910
+msgid "Right Description"
+msgstr "Oikean kuvaus"
+
+#: ../bin/ctodesgn.c:201
+msgid "Roadbed Width"
+msgstr "Ratapenkan leveys"
+
+#: ../bin/ctodesgn.c:205 ../bin/denum.c:56
+msgid "Print Setup"
+msgstr "Tulostusasetukset"
+
+#: ../bin/ctodesgn.c:236
+msgid "Diverging Length"
+msgstr "Poikkeavan raiteen pituus"
+
+#: ../bin/ctodesgn.c:237
+msgid "Diverging Angle"
+msgstr "Poikkeavan raiteen kulma"
+
+#: ../bin/ctodesgn.c:238
+msgid "Diverging Offset"
+msgstr "Poikkeavan raiteen siirtymä"
+
+#: ../bin/ctodesgn.c:239
+msgid "Overall Length"
+msgstr "Kokonaispituus"
+
+#: ../bin/ctodesgn.c:249
+msgid "Regular Turnout"
+msgstr "Tavallinen vaihde"
+
+#: ../bin/ctodesgn.c:259 ../bin/ctodesgn.c:296
+msgid "Inner Length"
+msgstr "Sisemmän raiteen pituus"
+
+#: ../bin/ctodesgn.c:260 ../bin/ctodesgn.c:297
+msgid "Inner Angle"
+msgstr "Sisemmän raiteen kulma"
+
+#: ../bin/ctodesgn.c:261 ../bin/ctodesgn.c:298
+msgid "Inner Offset"
+msgstr "Sisemmän raiteen siirtymä"
+
+#: ../bin/ctodesgn.c:262 ../bin/ctodesgn.c:300
+msgid "Outer Angle"
+msgstr "Ulomman raiteen kulma"
+
+#: ../bin/ctodesgn.c:263 ../bin/ctodesgn.c:301
+msgid "Outer Offset"
+msgstr "Ulomman raiteen siirtymä"
+
+#: ../bin/ctodesgn.c:264 ../bin/ctodesgn.c:303
+msgid "Outer Length"
+msgstr "Ulomman raiteen pituus"
+
+#: ../bin/ctodesgn.c:286
+msgid "Curved Turnout"
+msgstr "Kaareva vaihde"
+
+#: ../bin/ctodesgn.c:299
+#, fuzzy
+msgid "Inner Radius"
+msgstr "Helixin säde"
+
+#: ../bin/ctodesgn.c:302
+#, fuzzy
+msgid "Outer Radius"
+msgstr "Helixin säde"
+
+#: ../bin/ctodesgn.c:304 ../bin/ctodesgn.c:371 ../bin/ctodesgn.c:446
+#, fuzzy
+msgid "Toe Radius"
+msgstr "Säde"
+
+#: ../bin/ctodesgn.c:305 ../bin/ctodesgn.c:370
+#, fuzzy
+msgid "Toe Length"
+msgstr "Kokonaispituus"
+
+#: ../bin/ctodesgn.c:315
+#, fuzzy
+msgid "Cornu Curved Turnout"
+msgstr "Kaareva vaihde"
+
+#: ../bin/ctodesgn.c:325 ../bin/ctodesgn.c:362 ../bin/ctodesgn.c:391
+#: ../bin/ctodesgn.c:432
+msgid "Left Length"
+msgstr "Vasemman raiteen pituus"
+
+#: ../bin/ctodesgn.c:326 ../bin/ctodesgn.c:363 ../bin/ctodesgn.c:392
+#: ../bin/ctodesgn.c:433
+msgid "Left Angle"
+msgstr "Vasemman raiteen kulma"
+
+#: ../bin/ctodesgn.c:327 ../bin/ctodesgn.c:364 ../bin/ctodesgn.c:393
+#: ../bin/ctodesgn.c:434
+msgid "Left Offset"
+msgstr "Vasemman raiteen siirtymä"
+
+#: ../bin/ctodesgn.c:328 ../bin/ctodesgn.c:367 ../bin/ctodesgn.c:395
+#: ../bin/ctodesgn.c:441
+msgid "Right Offset"
+msgstr "Oikean raiteen siirtymä"
+
+#: ../bin/ctodesgn.c:329 ../bin/ctodesgn.c:368 ../bin/ctodesgn.c:396
+#: ../bin/ctodesgn.c:442
+msgid "Right Angle"
+msgstr "Oikean raiteen kulma"
+
+#: ../bin/ctodesgn.c:330 ../bin/ctodesgn.c:369 ../bin/ctodesgn.c:397
+#: ../bin/ctodesgn.c:443
+msgid "Right Length"
+msgstr "Oikean raiteen pituus"
+
+#: ../bin/ctodesgn.c:352
+msgid "Wye Turnout"
+msgstr "Y-vaihde"
+
+#: ../bin/ctodesgn.c:365 ../bin/ctodesgn.c:435
+#, fuzzy
+msgid "Left Radius"
+msgstr "Säde"
+
+#: ../bin/ctodesgn.c:366 ../bin/ctodesgn.c:440
+#, fuzzy
+msgid "Right Radius"
+msgstr "Helixin säde"
+
+#: ../bin/ctodesgn.c:381
+#, fuzzy
+msgid "Cornu Wye Turnout"
+msgstr "Y-vaihde"
+
+#: ../bin/ctodesgn.c:422
+msgid "3-way Turnout"
+msgstr "3-tie vaihde"
+
+#: ../bin/ctodesgn.c:436
+#, fuzzy
+msgid "Center Length"
+msgstr "Sisemmän raiteen pituus"
+
+#: ../bin/ctodesgn.c:437
+#, fuzzy
+msgid "Center Angle"
+msgstr "Sisemmän raiteen kulma"
+
+#: ../bin/ctodesgn.c:438 ../bin/dcar.c:2238
+#, fuzzy
+msgid "Center Offset"
+msgstr "Sisemmän raiteen siirtymä"
+
+#: ../bin/ctodesgn.c:439
+#, fuzzy
+msgid "Center Radius"
+msgstr "Ympyrän säde"
+
+#: ../bin/ctodesgn.c:444
+#, fuzzy
+msgid "Toe Length Left"
+msgstr "Kokonaispituus"
+
+#: ../bin/ctodesgn.c:445
+#, fuzzy
+msgid "Toe Length Right"
+msgstr "Kokonaispituus"
+
+#: ../bin/ctodesgn.c:457
+#, fuzzy
+msgid "Cornu 3-way Turnout"
+msgstr "3-tie vaihde"
+
+#: ../bin/ctodesgn.c:477
+msgid "Crossing"
+msgstr "Risteys"
+
+#: ../bin/ctodesgn.c:498
+msgid "Single Slipswitch"
+msgstr "Yksipuolinen risteysvaihde"
+
+#: ../bin/ctodesgn.c:527
+msgid "Double Slipswitch"
+msgstr "Kaksipuolinen risteysvaihde"
+
+#: ../bin/ctodesgn.c:547
+msgid "Right Crossover"
+msgstr "Raiteenvaihto oikealle"
+
+#: ../bin/ctodesgn.c:567
+msgid "Left Crossover"
+msgstr "Raiteenvaihto vasemmalle"
+
+#: ../bin/ctodesgn.c:587
+msgid "Double Crossover"
+msgstr "Sovitettu raideristeys"
+
+#: ../bin/ctodesgn.c:605
+msgid "Straight Section"
+msgstr "Suora raideosa"
+
+#: ../bin/ctodesgn.c:616
+msgid "Angle (Degrees)"
+msgstr "Kulma (asteina)"
+
+#: ../bin/ctodesgn.c:624
+msgid "Curved Section"
+msgstr "Kaareva raideosa"
+
+#: ../bin/ctodesgn.c:643
+msgid "Bumper Section"
+msgstr "Puskuri raideosa"
+
+#: ../bin/ctodesgn.c:653 ../bin/denum.c:123 ../bin/denum.c:186
+#: ../bin/denum.c:218 ../bin/denum.c:219 ../bin/dlayer.c:497
+msgid "Count"
+msgstr "Lukumäärä"
+
+#: ../bin/ctodesgn.c:654
+msgid "Radius1"
+msgstr "Säde1"
+
+#: ../bin/ctodesgn.c:655
+msgid "Radius2"
+msgstr "Säde2"
+
+#: ../bin/ctodesgn.c:735
+msgid "Turntable Section"
+msgstr "Kääntöpöytä"
+
+#: ../bin/ctodesgn.c:2538
+#, c-format
+msgid "%s Designer"
+msgstr "%s - suunnittelu"
+
+#: ../bin/ctodesgn.c:2542
+#, c-format
+msgid "%s %d x %d (of %d x %d)"
+msgstr ""
+
+#: ../bin/ctodesgn.c:2542
+msgid "Page"
+msgstr "Sivu"
+
+#: ../bin/ctodesgn.c:2550
+msgid "Frog Number"
+msgstr "Risteysnumero"
+
+#: ../bin/ctodesgn.c:2864
+msgid "Turnout Designer"
+msgstr "Raideosien suunnittelu"
+
+#: ../bin/ctodesgn.c:2874
+#, c-format
+msgid "%s %s Designer"
+msgstr "%s %s - suunnittelu"
+
+#: ../bin/ctrain.c:182 ../bin/dcar.c:2250 ../bin/dcar.c:4367
+#: ../bin/dcar.c:4372
+msgid "Index"
+msgstr "Indeksi"
+
+#: ../bin/ctrain.c:188 ../bin/dcar.c:4368
+msgid "Rep Marks"
+msgstr "Tunnus"
+
+#: ../bin/ctrain.c:272
+msgid "Car"
+msgstr "Vaunu"
+
+#: ../bin/ctrain.c:656
+msgid "Follow"
+msgstr "Seuraa"
+
+#: ../bin/ctrain.c:657
+msgid "Auto Reverse"
+msgstr "Automaattinen peruutus"
+
+#: ../bin/ctrain.c:676 ../bin/dcar.c:5257
+msgid "Find"
+msgstr "Etsi"
+
+#: ../bin/ctrain.c:682 ../bin/ctrain.c:941 ../bin/ctrain.c:1248
+#: ../wlib/gtklib/ixhelp.c:239
+msgid "Forward"
+msgstr "Eteen"
+
+#: ../bin/ctrain.c:684 ../bin/ctrain.c:3123 ../bin/dcar.c:4706
+#: ../bin/dcar.c:4716 ../bin/dcar.c:4836 ../bin/fileio.c:241 ../bin/macro.c:92
+#: ../bin/macro.c:898
+msgid "Stop"
+msgstr "Pysäytä"
+
+#: ../bin/ctrain.c:882 ../bin/ctrain.c:911
+msgid "Crashed"
+msgstr "Törmännyt"
+
+#: ../bin/ctrain.c:884
+msgid "Not on Track"
+msgstr "Ei raiteilla"
+
+#: ../bin/ctrain.c:888
+msgid "Trains Paused"
+msgstr "Junat pysäytetty"
+
+#: ../bin/ctrain.c:890
+msgid "Running"
+msgstr "Liikkeellä"
+
+#: ../bin/ctrain.c:895
+msgid "End of Track"
+msgstr "Rata loppu"
+
+#: ../bin/ctrain.c:899
+msgid "Open Turnout"
+msgstr "Avoin vaihde"
+
+#: ../bin/ctrain.c:903
+msgid "Manual Stop"
+msgstr "Pysäytetty"
+
+#: ../bin/ctrain.c:907
+msgid "No Room"
+msgstr "Ei tilaa"
+
+#: ../bin/ctrain.c:915
+msgid "Unknown Status"
+msgstr "Tuntematon tila"
+
+#: ../bin/ctrain.c:925
+msgid "No trains"
+msgstr "Ei junia"
+
+#: ../bin/ctrain.c:1299
+msgid "Train Control XXX"
+msgstr "Junien hallinta XXX"
+
+#: ../bin/ctrain.c:1300
+#, c-format
+msgid "Train Control %d"
+msgstr "Junien hallinta %d"
+
+#: ../bin/ctrain.c:1302
+msgid "Train Control"
+msgstr "Junien hallinta"
+
+#: ../bin/ctrain.c:3096
+msgid "Train"
+msgstr "Aja junilla"
+
+#: ../bin/ctrain.c:3109
+msgid "Uncouple"
+msgstr "Irrota"
+
+#: ../bin/ctrain.c:3111
+msgid "Flip Car"
+msgstr "Käännä vaunu"
+
+#: ../bin/ctrain.c:3113
+#, fuzzy
+msgid "Clearance Lines On"
+msgstr "Luo viivoja"
+
+#: ../bin/ctrain.c:3115
+#, fuzzy
+msgid "Clearance Lines Off"
+msgstr "Luo viivoja"
+
+#: ../bin/ctrain.c:3117
+msgid "Flip Train"
+msgstr "Käännä juna"
+
+#: ../bin/ctrain.c:3119
+msgid "MU Master"
+msgstr "Vetovastuussa"
+
+#: ../bin/ctrain.c:3122
+msgid "Change Direction"
+msgstr "Muuta suuntaa"
+
+#: ../bin/ctrain.c:3126
+#, fuzzy
+msgid "Remove Car"
+msgstr "Poista vaunu"
+
+#: ../bin/ctrain.c:3129
+#, fuzzy
+msgid "Remove Train"
+msgstr "Poista juna"
+
+#: ../bin/cturnout.c:95 ../bin/dcar.c:2272 ../bin/dcar.c:2276
+msgid "New"
+msgstr "Uusi"
+
+#: ../bin/cturnout.c:368
+#, c-format
+msgid "Turnout path[%d:%d] out of bounds: %d"
+msgstr ""
+
+#: ../bin/cturnout.c:379 ../bin/cturnout.c:389
+#, c-format
+msgid "Turnout path[%d] %d is not a valid track segment"
+msgstr ""
+
+#: ../bin/cturnout.c:399 ../bin/cturnout.c:404
+#, c-format
+msgid "Turnout path[%d] %d is not a track segment"
+msgstr ""
+
+#: ../bin/cturnout.c:412
+#, c-format
+msgid "Turnout path[%d] %d-%d not connected: %0.3f P0(%f,%f) P1(%f,%f)"
+msgstr ""
+
+#: ../bin/cturnout.c:450
+msgid "Unknown special case"
+msgstr "Tuntematon erikoistapaus"
+
+#: ../bin/cturnout.c:560
+msgid "Connect Adjustable Tracks"
+msgstr "Yhdistä säädettävä raide"
+
+#: ../bin/cturnout.c:1096
+msgid "splitTurnout: can't find segment"
+msgstr "Pilko: Lohkoja ei löytynyt."
+
+#: ../bin/cturnout.c:1522 ../bin/track.c:2259 ../bin/track.c:2365
+#: ../bin/tstraigh.c:554
+msgid "Drag to change track length"
+msgstr "Vedä muuttaaksesi raideosan pituutta"
+
+#: ../bin/cturnout.c:1533
+#, c-format
+msgid "Length=%s"
+msgstr "Pituus=%s"
+
+#: ../bin/cturnout.c:2344
+#, c-format
+msgid "%d connections, max distance %0.3f (%s)"
+msgstr "%d liitosta, suurin etäisyys %0.3f (%s)"
+
+#: ../bin/cturnout.c:2349
+#, c-format
+msgid "0 connections (%s)"
+msgstr "0 liitosta (%s)"
+
+#: ../bin/cturnout.c:2389
+msgid "Place New Turnout"
+msgstr "Aseta uusi vaihde"
+
+#: ../bin/cturnout.c:2798
+#, c-format
+msgid "Angle = %0.3f (%s)"
+msgstr "Kulma = %0.3f (%s)"
+
+#: ../bin/cturnout.c:2888 ../bin/param.c:2618
+msgid "Close"
+msgstr "Sulje"
+
+#: ../bin/cturnout.c:2905
+msgid "Pick turnout and active End Point, then place on the layout"
+msgstr ""
+"Valitse ensin vaihde ja aktiivinen päätepiste ja aseta sitten paikoilleen"
+
+#: ../bin/cturnout.c:3099
+#, fuzzy
+msgid "Predefined Track"
+msgstr "Valitut raiteet"
+
+#: ../bin/cturntbl.c:52 ../bin/cturntbl.c:251 ../bin/cturntbl.c:857
+#: ../bin/cturntbl.c:871
+msgid "Diameter"
+msgstr "Halkaisija"
+
+#: ../bin/cturntbl.c:252
+msgid "# EndPt"
+msgstr "Päätepisteitä"
+
+#: ../bin/cturntbl.c:286
+#, c-format
+msgid "Turntable(%d): Layer=%d Center=[%s %s] Diameter=%s #EP=%d"
+msgstr ""
+"Kääntöpöytä(%d): Taso=%d Keskipiste=[%s %s] Halkaisija=%s Päätepisteitä=%d"
+
+#: ../bin/cturntbl.c:301
+msgid "Turntable"
+msgstr "Kääntöpöytä"
+
+#: ../bin/cturntbl.c:565
+msgid "Drag to create stall track"
+msgstr "Vedä luodaksesi lähtevän raiteen"
+
+#: ../bin/cturntbl.c:618
+#, fuzzy
+msgid "Connect Turntable Tracks"
+msgstr "Yhdistä säädettävä raide"
+
+#: ../bin/cturntbl.c:885
+msgid "Create Turntable"
+msgstr "Luo kääntöpöytä"
+
+#: ../bin/cturntbl.c:916
+#, fuzzy
+msgid "Custom Turntable"
+msgstr "Luo kääntöpöytä"
+
+#: ../bin/cundo.c:166
+msgid "Undo Trace"
+msgstr "Jäljitys"
+
+#: ../bin/cundo.c:536
+#, c-format
+msgid "Undo: %s"
+msgstr "Kumoa: %s"
+
+#: ../bin/cundo.c:539 ../../../../build/work/app/bin/bllnhlp.c:158
+msgid "Undo last command"
+msgstr "Kumoa edellinen komento"
+
+#: ../bin/cundo.c:544
+#, c-format
+msgid "Redo: %s"
+msgstr "Tee uudelleen: %s"
+
+#: ../bin/cundo.c:547 ../../../../build/work/app/bin/bllnhlp.c:124
+msgid "Redo last undo"
+msgstr "Tee uudelleen"
+
+#: ../bin/custom.c:167
+#, c-format
+msgid "%s Turnout Designer"
+msgstr "%s Vaihteiden suunnittelu"
+
+#: ../bin/custom.c:172
+#, c-format
+msgid "%s Version %s"
+msgstr "%s versio %s"
+
+#: ../bin/custom.c:177
+#, c-format
+msgid ""
+"All %s Files (*.xtc,*.xtce)|*.xtc;*.xtce|%s Trackplan (*.xtc)|*.xtc|%s "
+"Extended Trackplan (*.xtce)|*.xtce|All Files (*)|*"
+msgstr ""
+
+#: ../bin/custom.c:188
+#, c-format
+msgid ""
+"%s Trackplan (*.xtc)|*.xtc|%s Extended Trackplan (*.xtce)|*.xtce|All Files "
+"(*)|*"
+msgstr ""
+
+#: ../bin/custom.c:197
+#, c-format
+msgid "All Files (*)|*"
+msgstr ""
+
+#: ../bin/custom.c:202
+#, fuzzy, c-format
+msgid "%s Import Files (*.xti)|*.xti"
+msgstr "%s Tuotavat tiedostot|*.%sti"
+
+#: ../bin/custom.c:207
+msgid "Data Exchange Format Files (*.dxf)|*.dxf"
+msgstr ""
+
+#: ../bin/custom.c:211
+#, fuzzy, c-format
+msgid "%s Record Files (*.xtr)|*.xtr"
+msgstr "%s Nauhoitustiedostot|*.%str"
+
+#: ../bin/custom.c:216
+#, fuzzy, c-format
+msgid "%s Note Files (*.not)|*.not"
+msgstr "%s Muistiinpanot|*.not"
+
+#: ../bin/custom.c:221
+#, fuzzy, c-format
+msgid "%s Log Files (*.log)|*.log"
+msgstr "%s Lokitiedostot|*.log"
+
+#: ../bin/custom.c:226
+#, fuzzy, c-format
+msgid "%s PartsList Files (*.txt)|*.txt"
+msgstr "%s Osaluetelotiedostot|*.log"
+
+#: ../bin/dbench.c:43
+msgid " L-Girder"
+msgstr "L-palkki"
+
+#: ../bin/dbench.c:43
+msgid " T-Girder"
+msgstr "T-palkki"
+
+#: ../bin/dbench.c:66
+msgid "On Edge"
+msgstr "Pysty"
+
+#: ../bin/dbench.c:67
+msgid "Flat"
+msgstr "Vaaka"
+
+#: ../bin/dbench.c:71
+msgid "Left-Down"
+msgstr "Vasen-Alas"
+
+#: ../bin/dbench.c:72
+msgid "Right-Down"
+msgstr "Oikea-Alas"
+
+#: ../bin/dbench.c:73
+msgid "Left-Up"
+msgstr "Vasen-Ylös"
+
+#: ../bin/dbench.c:74
+msgid "Right-Up"
+msgstr "Oikea-Ylös"
+
+#: ../bin/dbench.c:75
+msgid "Left-Inverted"
+msgstr "Vasen-Käännetty"
+
+#: ../bin/dbench.c:76
+msgid "Right-Inverted"
+msgstr "Oikea-Käännetty"
+
+#: ../bin/dbench.c:81
+msgid "Inverted"
+msgstr "Käännetty"
+
+#: ../bin/dbench.c:147
+#, c-format
+msgid ""
+"Bad BenchType for %s:\n"
+"%s"
+msgstr ""
+"Väärä runkotyyppi %s:lle:\n"
+"%s"
+
+#: ../bin/dbitmap.c:102 ../bin/dbitmap.c:106
+msgid "Drawn with "
+msgstr "Suunnitteluohjelma: "
+
+#: ../bin/dbitmap.c:116
+msgid "Drawing tracks to BitMap"
+msgstr "Piirretään raiteet bitmap:ksi"
+
+#: ../bin/dbitmap.c:123
+msgid "Writing BitMap to file"
+msgstr "Kirjoitetaan bitmap tiedostoon"
+
+#: ../bin/dbitmap.c:144
+msgid "Print Titles"
+msgstr "Tulosta otsikot"
+
+#: ../bin/dbitmap.c:144
+msgid "Print Borders"
+msgstr "Tulosta kehys"
+
+#: ../bin/dbitmap.c:145
+msgid "Print Centerline"
+msgstr "Tulosta keskiviiva"
+
+#: ../bin/dbitmap.c:152
+msgid " dpi"
+msgstr " dpi"
+
+#: ../bin/dbitmap.c:154
+msgid "Bitmap : 99999 by 99999 pixels"
+msgstr "Bitmap : 99999 x 99999 pikseliä"
+
+#: ../bin/dbitmap.c:156
+msgid "Approximate file size: 999.9Mb"
+msgstr "Arvioitu tiedostokoko: 999.9Mt"
+
+#: ../bin/dbitmap.c:186
+#, c-format
+msgid "Bitmap : %ld by %ld pixels"
+msgstr "Bitmap : %ld x %ld pikseliä"
+
+#: ../bin/dbitmap.c:190
+#, c-format
+msgid "Approximate file size : %0.0f"
+msgstr "Arvioitu tiedostokoko: %0.0f"
+
+#: ../bin/dbitmap.c:192
+#, c-format
+msgid "Approximate file size : %0.1fKb"
+msgstr "Arvioitu tiedostokoko: %0.1fKt"
+
+#: ../bin/dbitmap.c:194
+#, c-format
+msgid "Approximate file size : %0.1fMb"
+msgstr "Arvioitu tiedostokoko: %0.1fMt"
+
+#: ../bin/dbitmap.c:213
+msgid "Save Bitmap"
+msgstr "Tallenna bitmap"
+
+#: ../bin/dbitmap.c:217
+#, fuzzy
+msgid "Bitmap files (*.png)|*.png"
+msgstr "Bitmap kuvatiedostot|*.bmp"
+
+#: ../bin/dbitmap.c:238
+msgid "BitMap"
+msgstr "BitMap"
+
+#: ../bin/dcar.c:54
+msgid "Truck"
+msgstr "Teli"
+
+#: ../bin/dcar.c:54
+msgid "Body"
+msgstr "Runko"
+
+#: ../bin/dcar.c:156 ../bin/dcar.c:2702 ../bin/dcar.c:2706
+msgid "Unknown"
+msgstr "Tuntematon"
+
+#: ../bin/dcar.c:478
+msgid "Diesel Loco"
+msgstr "Dieselveturi"
+
+#: ../bin/dcar.c:479
+msgid "Steam Loco"
+msgstr "Höyryveturi"
+
+#: ../bin/dcar.c:480
+msgid "Elect Loco"
+msgstr "Sähköveturi"
+
+#: ../bin/dcar.c:481
+msgid "Freight Car"
+msgstr "Tavaravaunu"
+
+#: ../bin/dcar.c:482
+msgid "Psngr Car"
+msgstr "Matkustajavaunu"
+
+#: ../bin/dcar.c:483
+msgid "M-O-W"
+msgstr "Työkone"
+
+#: ../bin/dcar.c:484
+msgid "Other"
+msgstr "Muut"
+
+#: ../bin/dcar.c:1183 ../bin/dcar.c:5078
+msgid "N/A"
+msgstr "Ei tiedossa"
+
+#: ../bin/dcar.c:1184 ../bin/dcar.c:5083
+msgid "Mint"
+msgstr "Loistava"
+
+#: ../bin/dcar.c:1185 ../bin/dcar.c:5082
+msgid "Excellent"
+msgstr "Erinomainen"
+
+#: ../bin/dcar.c:1186 ../bin/dcar.c:5081
+msgid "Good"
+msgstr "Hyvä"
+
+#: ../bin/dcar.c:1187 ../bin/dcar.c:5080
+msgid "Fair"
+msgstr "Tyydyttävä"
+
+#: ../bin/dcar.c:1188 ../bin/dcar.c:5079
+msgid "Poor"
+msgstr "Huono"
+
+#: ../bin/dcar.c:1502 ../bin/dpricels.c:45
+#: ../../../../build/work/app/bin/bllnhlp.c:440
+msgid "Item"
+msgstr "Tuote"
+
+#: ../bin/dcar.c:2174 ../wlib/gtklib/notice.c:96 ../wlib/mswlib/mswmisc.c:2097
+msgid "Information"
+msgstr "Tiedot"
+
+#: ../bin/dcar.c:2174
+msgid "Customize"
+msgstr "Mukauta"
+
+#: ../bin/dcar.c:2186
+msgid "Sequential"
+msgstr "Peräkkäinen"
+
+#: ../bin/dcar.c:2186
+msgid "Repeated"
+msgstr "Sama"
+
+#: ../bin/dcar.c:2197 ../bin/dcar.c:2199 ../bin/dcar.c:5408
+msgid "Prototype"
+msgstr "Esikuva"
+
+#: ../bin/dcar.c:2205
+msgid "Part"
+msgstr "Tuote"
+
+#: ../bin/dcar.c:2207 ../../../../build/work/app/bin/bllnhlp.c:372
+#: ../../../../build/work/app/bin/bllnhlp.c:568
+#: ../../../../build/work/app/bin/bllnhlp.c:569
+msgid "Part Number"
+msgstr "Tuotekoodi"
+
+#: ../bin/dcar.c:2209
+msgid "Loco?"
+msgstr "Veturi?"
+
+#: ../bin/dcar.c:2213 ../bin/dcar.c:4405
+msgid "Import"
+msgstr "Tuo tiedostosta"
+
+#: ../bin/dcar.c:2220
+msgid "Mode"
+msgstr "Tila"
+
+#: ../bin/dcar.c:2224
+msgid "Road"
+msgstr "Yhtiö"
+
+#: ../bin/dcar.c:2226
+msgid "Reporting Mark"
+msgstr "Yhtiön tunnus"
+
+#: ../bin/dcar.c:2228
+msgid "Number"
+msgstr "Numero"
+
+#: ../bin/dcar.c:2232
+msgid "Car Length"
+msgstr "Pituus"
+
+#: ../bin/dcar.c:2236
+msgid "Truck Centers"
+msgstr "Telien keskikohdat"
+
+#: ../bin/dcar.c:2240
+msgid "Coupler Mount"
+msgstr "Kytkimien sijoitus"
+
+#: ../bin/dcar.c:2242
+msgid "Coupled Length"
+msgstr "Pituus kytkimineen"
+
+#: ../bin/dcar.c:2244 ../bin/dcar.c:4252
+msgid "Coupler Length"
+msgstr "Kytkinten ulkonema"
+
+#: ../bin/dcar.c:2252
+msgid "Purchase Price"
+msgstr "Ostohinta"
+
+#: ../bin/dcar.c:2254 ../../../../build/work/app/bin/bllnhlp.c:236
+msgid "Current Price"
+msgstr "Nykyinen hinta"
+
+#: ../bin/dcar.c:2256 ../bin/dcar.c:4369 ../bin/dcar.c:4374
+msgid "Condition"
+msgstr "Kunto"
+
+#: ../bin/dcar.c:2258
+msgid "Purchase Date"
+msgstr "Ostopäivä"
+
+#: ../bin/dcar.c:2260 ../bin/dcar.c:4374
+msgid "Service Date"
+msgstr "Huollettu"
+
+#: ../bin/dcar.c:2262
+msgid "Quantity"
+msgstr "Määrä"
+
+#: ../bin/dcar.c:2264
+msgid "Numbers"
+msgstr "Numerot"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:371
+#: ../bin/dcar.c:2266 ../bin/dcar.c:4370 ../bin/trknote.c:708
+#: ../../../../build/work/app/i18n/custmsg.h:1265
+msgid "Notes"
+msgstr "Muistiinpanot"
+
+#: ../bin/dcar.c:2273
+msgid "Car Part"
+msgstr "Malli"
+
+#: ../bin/dcar.c:2274 ../../../../build/work/app/bin/bllnhlp.c:210
+#: ../../../../build/work/app/bin/bllnhlp.c:211
+msgid "Car Prototype"
+msgstr "Esikuva"
+
+#: ../bin/dcar.c:2636 ../bin/dcar.c:2953
+msgid "Undecorated"
+msgstr "Ei yhtiömerkintöjä"
+
+#: ../bin/dcar.c:2694 ../bin/dcar.c:2698 ../bin/paramfilelist.c:376
+msgid "Custom"
+msgstr "Itse rakennettu"
+
+#: ../bin/dcar.c:2863
+msgid "Undecorated "
+msgstr "Ei yhtiömerkintöjä "
+
+#: ../bin/dcar.c:3085
+#, c-format
+msgid "New %s Scale Car"
+msgstr "Uusi %s mittakaavan vaunu/veturi"
+
+#: ../bin/dcar.c:3086 ../bin/dcar.c:3095 ../bin/dcar.c:3104 ../bin/dcar.c:4285
+#: ../bin/dcar.c:4401 ../bin/paramfilesearch_ui.c:74
+msgid "Add"
+msgstr "Lisää"
+
+#: ../bin/dcar.c:3088
+#, c-format
+msgid "Update %s Scale Car"
+msgstr "Päivitä %s mittakaavan vaunu"
+
+#: ../bin/dcar.c:3089 ../bin/dcar.c:3098 ../bin/dcar.c:3107
+#: ../bin/dcmpnd.c:173
+msgid "Update"
+msgstr "Päivitä"
+
+#: ../bin/dcar.c:3094
+#, c-format
+msgid "New %s Scale Car Part"
+msgstr "Uusi %s mittakaavan vaunu/veturi"
+
+#: ../bin/dcar.c:3097
+#, c-format
+msgid "Update %s Scale Car Part"
+msgstr "Päivitä %s mittakaavan vaunu"
+
+#: ../bin/dcar.c:3103
+msgid "New Prototype"
+msgstr "Uusi esikuva"
+
+#: ../bin/dcar.c:3106
+msgid "Update Prototype"
+msgstr "Päivitä esikuva"
+
+#: ../bin/dcar.c:3778
+msgid "Enter a 8 digit numeric date"
+msgstr "Syötä 8 numeroinen päiväys"
+
+#: ../bin/dcar.c:3781
+msgid "Enter a 8 digit date"
+msgstr "Syötä 8 numeroinen päiväys"
+
+#: ../bin/dcar.c:3783
+msgid "Enter a date between 19000101 and 21991231"
+msgstr "Syötä päivämärä %s ja %s väliltä"
+
+#: ../bin/dcar.c:3788
+msgid "Invalid month"
+msgstr "Epäkelpo kuukausi"
+
+#: ../bin/dcar.c:3790
+msgid "Invalid day"
+msgstr "Epäkelpo päivä"
+
+#: ../bin/dcar.c:3882
+msgid "Enter a Prototype name"
+msgstr "Syötä esikuvan nimi"
+
+#: ../bin/dcar.c:3884
+msgid "Select or Enter a Manufacturer"
+msgstr "Valitse tai syötä valmistaja"
+
+#: ../bin/dcar.c:3886
+msgid "Enter a Part Number"
+msgstr "Syötä tuotekoodi"
+
+#: ../bin/dcar.c:3888
+msgid "Enter the Car Length"
+msgstr "Syötä vaunun pituus"
+
+#: ../bin/dcar.c:3890
+msgid "Enter the Car Width"
+msgstr "Syötä vaunun leveys"
+
+#: ../bin/dcar.c:3892
+msgid "Enter the Truck Centers"
+msgstr "Syötä telien keskipisteiden etäisyys"
+
+#: ../bin/dcar.c:3894
+#, fuzzy
+msgid "Truck Center Offset must be greater than 0 or 0"
+msgstr ""
+"Telien keskikohtien välisen etäisyyden on oltava vaunun pituutta pienempi"
+
+#: ../bin/dcar.c:3896
+msgid "Truck Centers must be less than Car Length"
+msgstr ""
+"Telien keskikohtien välisen etäisyyden on oltava vaunun pituutta pienempi"
+
+#: ../bin/dcar.c:3898
+#, fuzzy
+msgid "Truck Center Offset plus Truck Centers must be less than Car Length"
+msgstr ""
+"Telien keskikohtien välisen etäisyyden on oltava vaunun pituutta pienempi"
+
+#: ../bin/dcar.c:3900
+msgid "Enter the Coupled Length or Coupler Length"
+msgstr "Syötä pituus kytkimineen tai kytkimen pituus"
+
+#: ../bin/dcar.c:3902
+msgid "Enter the Coupled Length"
+msgstr "Syötä pituus kytkimineen"
+
+#: ../bin/dcar.c:3904
+msgid "Enter a item Index"
+msgstr "Syötä indeksi"
+
+#: ../bin/dcar.c:3906
+msgid "Purchase Price is not valid"
+msgstr "Ostohinta ei ole kelvollinen"
+
+#: ../bin/dcar.c:3908
+msgid "Current Price is not valid"
+msgstr "Nykyinen hinta ei ole kelvollinen"
+
+#: ../bin/dcar.c:3910
+msgid "Purchase Date is not valid"
+msgstr "Ostopäivä ei ole kelvollinen"
+
+#: ../bin/dcar.c:3912
+msgid "Service Date is not valid"
+msgstr "Huollon päiväys ei ole kelvollinen"
+
+#: ../bin/dcar.c:3915
+#, c-format
+msgid "Item Index %ld duplicated an existing item: updated to new value"
+msgstr "Indeksi %ld oli jo käytössä. Annettiin indeksille uusi arvo."
+
+#: ../bin/dcar.c:4111
+#, c-format
+msgid "Added %ld new Cars"
+msgstr "Lisätty %ld uutta vaunua/veturia"
+
+#: ../bin/dcar.c:4113
+msgid "Added new Car"
+msgstr "Lisätty uusi vaunu/veturi"
+
+#: ../bin/dcar.c:4116
+msgid "Updated Car"
+msgstr "Päivitä vaunu/veturi"
+
+#: ../bin/dcar.c:4119
+msgid " and Part"
+msgstr " ja malli"
+
+#: ../bin/dcar.c:4146
+#, c-format
+msgid "%s Part: %s %s %s %s %s %s"
+msgstr "%s malli: %s %s %s %s %s %s"
+
+#: ../bin/dcar.c:4146 ../bin/dcar.c:4163
+msgid "Added new"
+msgstr "Lisätty uusi"
+
+#: ../bin/dcar.c:4146 ../bin/dcar.c:4163
+msgid "Updated"
+msgstr "Päivitetty"
+
+#: ../bin/dcar.c:4162
+#, c-format
+msgid "%s Prototype: %s%s."
+msgstr "%s esikuva: %s%s."
+
+#: ../bin/dcar.c:4164
+msgid ". Enter new values or press Close"
+msgstr ". Syötä uudet arvot tai paina Sulje"
+
+#: ../bin/dcar.c:4285
+msgid "New Car Part"
+msgstr "Uusi malli"
+
+#: ../bin/dcar.c:4368 ../bin/dcar.c:4373
+#: ../../../../build/work/app/bin/bllnhlp.c:410
+msgid "Roadname"
+msgstr "Rautatieyhtiö"
+
+#: ../bin/dcar.c:4368
+msgid "Purc Price"
+msgstr "Ostohinta"
+
+#: ../bin/dcar.c:4369 ../bin/dcar.c:4374
+msgid "Curr Price"
+msgstr "Nykyinen hinta"
+
+#: ../bin/dcar.c:4369
+msgid "Purc Date"
+msgstr "Ostopäivä"
+
+#: ../bin/dcar.c:4369
+msgid "Srvc Date"
+msgstr "Huollettu"
+
+#: ../bin/dcar.c:4370
+msgid "Locat'n"
+msgstr "Sijainti"
+
+#: ../bin/dcar.c:4373
+msgid "RepMarks"
+msgstr "Tunnus"
+
+#: ../bin/dcar.c:4373
+msgid "Purch Price"
+msgstr "Ostohinta"
+
+#: ../bin/dcar.c:4374
+msgid "Purch Date"
+msgstr "Ostopäivä"
+
+#: ../bin/dcar.c:4391
+msgid "Sort By"
+msgstr "Lajittelu"
+
+#: ../bin/dcar.c:4399 ../bin/dcontmgm.c:99 ../bin/dcustmgm.c:71
+#: ../bin/dcustmgm.c:108
+msgid "Edit"
+msgstr "Muokkaa"
+
+#: ../bin/dcar.c:4403 ../bin/dcontmgm.c:101 ../bin/dcustmgm.c:73
+#: ../bin/misc.c:2242
+msgid "Delete"
+msgstr "Poista"
+
+#: ../bin/dcar.c:4407 ../bin/fileio.c:1517
+msgid "Export"
+msgstr "Vie tiedostoon"
+
+#: ../bin/dcar.c:4409 ../../../../build/work/app/bin/bllnhlp.c:585
+msgid "List"
+msgstr "Luettelo"
+
+#: ../bin/dcar.c:4520 ../bin/dcar.c:5257 ../bin/misc.c:2618
+msgid "Car Inventory"
+msgstr "Kalustoluettelo"
+
+#: ../bin/dcar.c:4640
+msgid "List Cars"
+msgstr "Luetteloi vaunut"
+
+#: ../bin/dcar.c:4764 ../bin/dcar.c:4929
+msgid "Import Cars"
+msgstr "Tuo vaunut tiedostosta"
+
+#: ../bin/dcar.c:4930 ../bin/dcar.c:5053
+#, fuzzy
+msgid "Comma-Separated-Values (*.csv)|*.csv"
+msgstr "Pilkulla erotetut arvot|*.csv"
+
+#: ../bin/dcar.c:5000 ../bin/dcar.c:5052
+msgid "Export Cars"
+msgstr "Vie vaunut tiedostoon"
+
+#: ../bin/dcar.c:5086
+msgid "Layout"
+msgstr "Ratasuunnitelma"
+
+#: ../bin/dcar.c:5088
+msgid "Shelf"
+msgstr "Hyllyssä"
+
+#: ../bin/dcmpnd.c:77 ../bin/dlayer.c:499 ../bin/misc.c:613 ../bin/misc.c:645
+msgid "Load"
+msgstr "Lataa"
+
+#: ../bin/dcmpnd.c:110
+msgid "Updating definitions, please wait"
+msgstr "Päivitetään määrittelyjä, odota hetki."
+
+#: ../bin/dcmpnd.c:173
+msgid "Update Title"
+msgstr "Pävitä otsikko"
+
+#: ../bin/dcmpnd.c:233
+#, c-format
+msgid "End-Point #%d of the selected and actual turnouts are not close"
+msgstr "Valitun ja todellisen vaihteen %d. päätepisteet eivät ole lähekkäin"
+
+#: ../bin/dcmpnd.c:242
+#, c-format
+msgid "End-Point #%d of the selected and actual turnouts are not aligned"
+msgstr "Valitun ja todellisen vaihteen %d. päätepisteet eivät ole linjassa"
+
+#: ../bin/dcmpnd.c:261
+msgid "The selected Turnout had a differing number of End-Points"
+msgstr "Valitussa vaihteessa oli eri määrä päätepisteitä"
+
+#: ../bin/dcmpnd.c:327
+msgid "Skip"
+msgstr "Sivuuta"
+
+#: ../bin/dcmpnd.c:359
+#, c-format
+msgid "%d Track(s) refreshed"
+msgstr "%d raideosa(a) päivitetty"
+
+#: ../bin/dcmpnd.c:399
+msgid "Refresh Turnout/Structure"
+msgstr "Päivitä vaihde/rakennus"
+
+#: ../bin/dcmpnd.c:401
+msgid "Choose a Turnout/Structure to replace:"
+msgstr "Valitse vaihde/rakennus korvataksesi:"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:341
+#: ../bin/dcmpnd.c:411 ../bin/doption.c:132
+#: ../../../../build/work/app/i18n/custmsg.h:1205
+msgid "Turnouts"
+msgstr "Raideosat"
+
+#: ../bin/dcmpnd.c:411
+msgid "Structures"
+msgstr "Rakennukset"
+
+#: ../bin/dcmpnd.c:440
+msgid "Choose another Turnout/Structure to replace:"
+msgstr "Valitse toinen vaihde/rakennus korvataksesi:"
+
+#: ../bin/dcmpnd.c:542
+msgid "Rename Object"
+msgstr "Nimeä objekti uudelleen"
+
+#: ../bin/dcontmgm.c:92
+msgid "Tracks"
+msgstr "Raiteet"
+
+#: ../bin/dcontmgm.c:173
+#, fuzzy, c-format
+msgid "Are you sure you want to delete the %d control element(s)"
+msgstr "Haluatko varmasti poistaa nämä %d vaunua/veturia?"
+
+#: ../bin/dcontmgm.c:176
+#, fuzzy
+msgid "Control Elements"
+msgstr "Valitse värit"
+
+#: ../bin/dcontmgm.c:299
+msgid "Manage Layout Control Elements"
+msgstr ""
+
+#: ../bin/dcustmgm.c:67
+#, fuzzy
+msgid "Create a new "
+msgstr "Luo monikulmio"
+
+#: ../bin/dcustmgm.c:69
+#, fuzzy
+msgid "Go"
+msgstr "Kulta"
+
+#: ../bin/dcustmgm.c:75
+msgid "Move To"
+msgstr "Tiedostoon"
+
+#: ../bin/dcustmgm.c:108
+msgid "Rename"
+msgstr "Nimeä uudelleen"
+
+#: ../bin/dcustmgm.c:189
+msgid "Label"
+msgstr "Merkintä"
+
+#: ../bin/dcustmgm.c:227
+msgid "Contents Label"
+msgstr "Sisältömerkintä"
+
+#: ../bin/dcustmgm.c:283
+msgid "Move To XTP"
+msgstr "Siirrä XTP tiedostoon"
+
+#: ../bin/dcustmgm.c:284
+#, fuzzy
+msgid "Parameter File (*.xtp)|*.xtp"
+msgstr "Parametritiedosto|*.xtp"
+
+#: ../bin/dcustmgm.c:395
+#, fuzzy
+msgid "Manage custom designed parts"
+msgstr "Itse määriteltyjen raideosien, veturien ja vaunujen hallinta"
+
+#: ../bin/dease.c:67
+msgid "Sharp"
+msgstr "Jyrkkä"
+
+#: ../bin/dease.c:67
+msgid "Broad"
+msgstr "Laaja"
+
+#: ../bin/dease.c:67
+msgid "Cornu"
+msgstr ""
+
+#: ../bin/dease.c:74
+msgid "Value"
+msgstr "Arvo"
+
+#: ../bin/dease.c:75 ../bin/tease.c:525
+msgid "R"
+msgstr "R"
+
+#: ../bin/dease.c:77 ../bin/tease.c:526
+msgid "L"
+msgstr "P"
+
+#: ../bin/dease.c:242
+msgid "Easement"
+msgstr "Kaarreloivennus"
+
+#: ../bin/denum.c:49
+msgid "Prices"
+msgstr "Hinnat"
+
+#: ../bin/denum.c:54
+msgid "Save As ..."
+msgstr "Tallenna nimellä ..."
+
+#: ../bin/denum.c:134 ../bin/denum.c:189 ../bin/denum.c:224
+msgid "Each"
+msgstr ""
+
+#: ../bin/denum.c:148 ../bin/denum.c:149
+msgid "Parts List"
+msgstr "Osaluettelo"
+
+#: ../bin/denum.c:154
+#, fuzzy, c-format
+msgid ""
+"%s Parts List\n"
+"\n"
+msgstr "Osaluettelo"
+
+#: ../bin/denum.c:189 ../bin/denum.c:226 ../bin/denum.c:235
+#, fuzzy
+msgid "Extended"
+msgstr "Pidentäminen"
+
+#: ../bin/denum.c:235 ../bin/denum.c:238
+msgid "Total"
+msgstr ""
+
+#: ../bin/dlayer.c:487
+#, fuzzy
+msgid "Use Color"
+msgstr "%s väri"
+
+#: ../bin/dlayer.c:489
+msgid "Visible"
+msgstr "Näkyvä"
+
+#: ../bin/dlayer.c:491
+msgid "Frozen"
+msgstr "Jäädytetty"
+
+#: ../bin/dlayer.c:493
+msgid "On Map"
+msgstr "Näkyy kartalla"
+
+#: ../bin/dlayer.c:495
+#, fuzzy
+msgid "Module"
+msgstr "Tila"
+
+#: ../bin/dlayer.c:498
+msgid "Personal Preferences"
+msgstr "Omat asetukset"
+
+#: ../bin/dlayer.c:500 ../bin/macro.c:1419
+msgid "Save"
+msgstr "Tallenna"
+
+#: ../bin/dlayer.c:501
+msgid "Defaults"
+msgstr "Oletukset"
+
+#: ../bin/dlayer.c:502
+msgid "Number of Layer Buttons"
+msgstr "Tasopainikkeiden lukumäärä"
+
+#: ../bin/dlayer.c:519 ../bin/dlayer.c:987 ../bin/dlayer.c:1000
+#: ../bin/dlayer.c:1051
+msgid "Main"
+msgstr "Päätaso"
+
+#: ../bin/dlayer.c:632 ../bin/dlayer.c:925 ../bin/dlayer.c:1003
+#: ../bin/dlayer.c:1053 ../bin/dlayer.c:1303
+msgid "Show/Hide Layer"
+msgstr "Näytä/piilota taso"
+
+#: ../bin/dlayer.c:1124
+msgid "Layers"
+msgstr "Tasot"
+
+#: ../bin/doption.c:95
+msgid "Turning off AutoSave"
+msgstr ""
+
+#: ../bin/doption.c:104
+#, fuzzy
+msgid "Turning on CheckPointing"
+msgstr "Automaattinen varmennus"
+
+#: ../bin/doption.c:130
+msgid "Auto Pan"
+msgstr "Automaattinen panorointi"
+
+#: ../bin/doption.c:132
+msgid "All"
+msgstr "Kaikki"
+
+#: ../bin/doption.c:133
+msgid "Thick"
+msgstr ""
+
+#: ../bin/doption.c:133
+#, fuzzy
+msgid "Exception"
+msgstr "Erityisraiteet"
+
+#: ../bin/doption.c:134
+msgid "Outline"
+msgstr "Ääriviivat"
+
+#: ../bin/doption.c:135
+msgid "Off"
+msgstr "Pois"
+
+#: ../bin/doption.c:135
+msgid "On"
+msgstr "Päällä"
+
+#: ../bin/doption.c:136
+msgid "Track Descriptions"
+msgstr "Raideosien kuvaukset"
+
+#: ../bin/doption.c:136
+msgid "Lengths"
+msgstr "Pituudet"
+
+#: ../bin/doption.c:136
+msgid "EndPt Elevations"
+msgstr "Päätepisteiden korkeudet"
+
+#: ../bin/doption.c:136
+msgid "Track Elevations"
+msgstr "Raideosien korkeudet"
+
+#: ../bin/doption.c:136
+msgid "Cars"
+msgstr "Vaunut"
+
+#: ../bin/doption.c:137 ../bin/doption.c:138
+msgid "Descr"
+msgstr "Kuvaus"
+
+#: ../bin/doption.c:138
+msgid "Manuf"
+msgstr "Valmistaja"
+
+#: ../bin/doption.c:139 ../bin/doption.c:140
+#, fuzzy
+msgid "Object"
+msgstr "Nimeä objekti uudelleen"
+
+#: ../bin/doption.c:141
+msgid "Live Map"
+msgstr "Suunnitelma seuraa karttaa"
+
+#: ../bin/doption.c:142
+#, fuzzy
+msgid "Hide Trains On Hidden Track"
+msgstr "Junat piilossa olevalla radalla"
+
+#: ../bin/doption.c:143
+msgid "Constrain Drawing Area to Room boundaries"
+msgstr ""
+
+#: ../bin/doption.c:150
+#, fuzzy
+msgid "Color Track"
+msgstr "Kaareva raide"
+
+#: ../bin/doption.c:151
+#, fuzzy
+msgid "Color Draw"
+msgstr "Väri"
+
+#: ../bin/doption.c:152
+msgid "Draw Tunnel"
+msgstr "Piirrä tunneli"
+
+#: ../bin/doption.c:153
+msgid "Draw EndPts"
+msgstr "Piirrä päätepisteet"
+
+#: ../bin/doption.c:154
+#, fuzzy
+msgid "Draw Unconnected EndPts"
+msgstr "Piirrä päätepisteet"
+
+#: ../bin/doption.c:155
+msgid "Draw Ties"
+msgstr "Piirrä ratapölkyt"
+
+#: ../bin/doption.c:156
+#, fuzzy
+msgid "Draw Centers"
+msgstr "Raahaa keskustaan"
+
+#: ../bin/doption.c:157
+msgid "Two Rail Scale"
+msgstr "Kahden kiskon mittakaava"
+
+#: ../bin/doption.c:158
+msgid "Map Scale"
+msgstr "Kartan mittakaava"
+
+#: ../bin/doption.c:162
+msgid "Label Enable"
+msgstr "Näytettävät merkinnät"
+
+#: ../bin/doption.c:163
+msgid "Label Scale"
+msgstr "Merkintöjen mittakaava"
+
+#: ../bin/doption.c:164
+msgid "Label Font Size"
+msgstr "Merkintöjen kirjasinkoko"
+
+#: ../bin/doption.c:165
+msgid "Hot Bar Labels"
+msgstr "Hot Bar merkinnät"
+
+#: ../bin/doption.c:166
+msgid "Layout Labels"
+msgstr "Merkinnät"
+
+#: ../bin/doption.c:167
+msgid "List Labels"
+msgstr "Luettelon merkinnät"
+
+#: ../bin/doption.c:170
+msgid "Car Labels"
+msgstr "Vaunujen merkinnät"
+
+#: ../bin/doption.c:171
+msgid "Train Update Delay"
+msgstr "Junien päivitysväli"
+
+#: ../bin/doption.c:199
+msgid "Display Options"
+msgstr "Näyttöasetukset"
+
+#: ../bin/doption.c:200
+msgid "Proto"
+msgstr "Esikuva"
+
+#: ../bin/doption.c:201
+msgid "Proto/Manuf"
+msgstr "Esikuva/Valmistaja"
+
+#: ../bin/doption.c:202
+msgid "Proto/Manuf/Part Number"
+msgstr "Esikuva/Valmistaja/Tuotekoodi"
+
+#: ../bin/doption.c:203
+msgid "Proto/Manuf/Partno/Item"
+msgstr "Esikuva/Valmistaja/Tuotekoodi/Tuote"
+
+#: ../bin/doption.c:204
+msgid "Manuf/Proto"
+msgstr "Valmistaja/Esikuva"
+
+#: ../bin/doption.c:205
+msgid "Manuf/Proto/Part Number"
+msgstr "Valmistaja/Esikuva/Tuotekoodi"
+
+#: ../bin/doption.c:206
+msgid "Manuf/Proto/Partno/Item"
+msgstr "Valmistaja/Esikuva/Tuotekoodi/Tuote"
+
+#: ../bin/doption.c:236
+#, fuzzy
+msgid "Single item selected, +Ctrl Add to selection"
+msgstr "Klikkaamalla jo valittuna olevaa raidetta, sen valinta poistuu.\n"
+
+#: ../bin/doption.c:236
+msgid "Add to selection, +Ctrl Single item selected"
+msgstr ""
+
+#: ../bin/doption.c:237
+#, fuzzy
+msgid "Deselect all on select nothing"
+msgstr "Poista valinnat kaikista objekteista"
+
+#: ../bin/doption.c:242
+msgid "Normal: Command List, Shift: Command Options"
+msgstr "Normaali: Komennot, Vaihto: Komentojen asetukset"
+
+#: ../bin/doption.c:242
+msgid "Normal: Command Options, Shift: Command List"
+msgstr "Normaali: Komentojen asetukset, Vaihto: Komennot"
+
+#: ../bin/doption.c:245
+msgid "Default Command"
+msgstr "Oletuskomento"
+
+#: ../bin/doption.c:247
+msgid "Hide Selection Window"
+msgstr "Piilota valintaikkuna"
+
+#: ../bin/doption.c:249
+msgid "Right Click"
+msgstr "Hiiren 2-painike"
+
+#: ../bin/doption.c:250
+#, fuzzy
+msgid "Select Mode"
+msgstr "Valitse objekteja"
+
+#: ../bin/doption.c:275
+msgid "Command Options"
+msgstr "Komentojen asetukset"
+
+#: ../bin/doption.c:298
+msgid "English"
+msgstr "Englantilaiset"
+
+#: ../bin/doption.c:298
+msgid "Metric"
+msgstr "Metrijärjestelmä"
+
+#: ../bin/doption.c:299
+msgid "Polar"
+msgstr "Polaarinen"
+
+#: ../bin/doption.c:299
+msgid "Cartesian"
+msgstr "Karteesinen"
+
+#: ../bin/doption.c:300
+msgid "Balloon Help"
+msgstr "Pikaopaste"
+
+#: ../bin/doption.c:301
+msgid "Show FlexTrack in HotBar"
+msgstr ""
+
+#: ../bin/doption.c:302
+#, fuzzy
+msgid "Load Last Layout"
+msgstr "Lataa ratasuunnitelma"
+
+#: ../bin/doption.c:302
+#, fuzzy
+msgid "Start New Layout"
+msgstr "Uusi ratasuunnitelma"
+
+#: ../bin/doption.c:305
+msgid "Angles"
+msgstr "Kulmat"
+
+#: ../bin/doption.c:306
+msgid "Units"
+msgstr "Yksiköt"
+
+#: ../bin/doption.c:308
+msgid "Length Format"
+msgstr "Pituusmittojen muotoilu"
+
+#: ../bin/doption.c:309
+#, fuzzy
+msgid "Min Track Length"
+msgstr "Pienin raideosan pituus"
+
+#: ../bin/doption.c:310
+msgid "Connection Distance"
+msgstr "Liitosetäisyys"
+
+#: ../bin/doption.c:311
+msgid "Connection Angle"
+msgstr "Liitoskulma"
+
+#: ../bin/doption.c:312
+msgid "Turntable Angle"
+msgstr "Kääntöpöydän kulma"
+
+#: ../bin/doption.c:313
+msgid "Max Coupling Speed"
+msgstr "Suurin kytkentänopeus"
+
+#: ../bin/doption.c:316
+msgid "Drag Distance"
+msgstr "Raahausetäisyys"
+
+#: ../bin/doption.c:317
+msgid "Drag Timeout"
+msgstr "Raahauksen viive"
+
+#: ../bin/doption.c:318
+msgid "Min Grid Spacing"
+msgstr "Pienin ruudukon koko"
+
+#: ../bin/doption.c:320
+#, fuzzy
+msgid "Check Point Frequency"
+msgstr "Automaattinen varmennus"
+
+#: ../bin/doption.c:322
+#, fuzzy
+msgid "Autosave Checkpoint Frequency"
+msgstr "Kuinka usein automaattinen varmennus suoritetaan"
+
+#: ../bin/doption.c:323
+msgid "On Program Startup"
+msgstr "Ohjelman käynnistyksessä"
+
+#: ../bin/doption.c:333 ../bin/doption.c:337 ../bin/doption.c:354
+msgid "999.999"
+msgstr "999,999"
+
+#: ../bin/doption.c:334
+#, fuzzy
+msgid "999.999999"
+msgstr "999,999"
+
+#: ../bin/doption.c:335
+#, fuzzy
+msgid "999.99999"
+msgstr "999,999"
+
+#: ../bin/doption.c:336
+#, fuzzy
+msgid "999.9999"
+msgstr "999,999"
+
+#: ../bin/doption.c:338 ../bin/doption.c:355
+msgid "999.99"
+msgstr "999,99"
+
+#: ../bin/doption.c:339 ../bin/doption.c:356
+msgid "999.9"
+msgstr "999,9"
+
+#: ../bin/doption.c:340
+msgid "999 7/8"
+msgstr "999 7/8"
+
+#: ../bin/doption.c:341
+msgid "999 63/64"
+msgstr "999 63/64"
+
+#: ../bin/doption.c:342
+msgid "999' 11.999\""
+msgstr "999' 11.999\""
+
+#: ../bin/doption.c:343
+msgid "999' 11.99\""
+msgstr "999' 11.99\""
+
+#: ../bin/doption.c:344
+msgid "999' 11.9\""
+msgstr "999' 11.9\""
+
+#: ../bin/doption.c:345
+msgid "999' 11 7/8\""
+msgstr "999' 11 7/8\""
+
+#: ../bin/doption.c:346
+msgid "999' 11 63/64\""
+msgstr "999' 11 63/64\""
+
+#: ../bin/doption.c:347
+msgid "999ft 11.999in"
+msgstr "999ft 11.999in"
+
+#: ../bin/doption.c:348
+msgid "999ft 11.99in"
+msgstr "999ft 11.99in"
+
+#: ../bin/doption.c:349
+msgid "999ft 11.9in"
+msgstr "999ft 11.9in"
+
+#: ../bin/doption.c:350
+msgid "999ft 11 7/8in"
+msgstr "999ft 11 7/8in"
+
+#: ../bin/doption.c:351
+msgid "999ft 11 63/64in"
+msgstr "999ft 11 63/64in"
+
+#: ../bin/doption.c:357
+msgid "999.999mm"
+msgstr "999,999 mm"
+
+#: ../bin/doption.c:358
+msgid "999.99mm"
+msgstr "999,99 mm"
+
+#: ../bin/doption.c:359
+msgid "999.9mm"
+msgstr "999,9 mm"
+
+#: ../bin/doption.c:360
+msgid "999.999cm"
+msgstr "999,999 cm"
+
+#: ../bin/doption.c:361
+msgid "999.99cm"
+msgstr "999,99 cm"
+
+#: ../bin/doption.c:362
+msgid "999.9cm"
+msgstr "999,9 cm"
+
+#: ../bin/doption.c:363
+msgid "999.999m"
+msgstr "999,999 m"
+
+#: ../bin/doption.c:364
+msgid "999.99m"
+msgstr "999,99 m"
+
+#: ../bin/doption.c:365
+msgid "999.9m"
+msgstr "999,9 m"
+
+#: ../bin/doption.c:492
+msgid "Preferences"
+msgstr "Ominaisuudet"
+
+#: ../bin/doption.c:531
+msgid "Marker"
+msgstr "Markkeri"
+
+#: ../bin/doption.c:532
+msgid "Border"
+msgstr "Reunus"
+
+#: ../bin/doption.c:533
+msgid "Primary Axis"
+msgstr "Ensisijainen akseli"
+
+#: ../bin/doption.c:534
+msgid "Secondary Axis"
+msgstr "Toissijainen akseli"
+
+#: ../bin/doption.c:535
+msgid "Normal Track"
+msgstr "Normaalit raiteet"
+
+#: ../bin/doption.c:536
+msgid "Selected Track"
+msgstr "Valitut raiteet"
+
+#: ../bin/doption.c:537
+msgid "Profile Path"
+msgstr "Profiilirata"
+
+#: ../bin/doption.c:538
+msgid "Exception Track"
+msgstr "Erityisraiteet"
+
+#: ../bin/doption.c:539
+msgid "Track Ties"
+msgstr "Ratapölkyt"
+
+#: ../bin/dpricels.c:45
+msgid "Price"
+msgstr "Hinta"
+
+#: ../bin/dpricels.c:59
+msgid "Flex Track"
+msgstr "Fleksi"
+
+#: ../bin/dpricels.c:60
+msgid "costs"
+msgstr "maksaa"
+
+#: ../bin/dpricels.c:154
+msgid "Price List"
+msgstr "Hinnasto"
+
+#: ../bin/dprmfile.c:73 ../bin/paramfilesearch_ui.c:60
+msgid "Show File Names"
+msgstr "Näytä tiedostojen nimet"
+
+#: ../bin/dprmfile.c:82 ../bin/paramfilesearch_ui.c:76
+#, fuzzy
+msgid "Select all"
+msgstr "Valitse kaikki"
+
+#: ../bin/dprmfile.c:84
+msgid "Favorite"
+msgstr ""
+
+#: ../bin/dprmfile.c:87
+msgid "Search Library"
+msgstr ""
+
+#: ../bin/dprmfile.c:88 ../bin/layout.c:471
+msgid "Browse ..."
+msgstr "Selaa ..."
+
+#: ../bin/dprmfile.c:331
+#, fuzzy, c-format
+msgid "%d parameter files reloaded."
+msgstr "Etsi ladattava parametritiedosto"
+
+#: ../bin/dprmfile.c:333
+#, fuzzy
+msgid "One parameter file reloaded."
+msgstr "Etsi ladattava parametritiedosto"
+
+#: ../bin/dprmfile.c:434
+msgid "Parameter Files"
+msgstr "Parametritiedostot"
+
+#: ../bin/dprmfile.c:437 ../bin/paramfilesearch_ui.c:405
+msgid "Load Parameters"
+msgstr "Lataa parametrit"
+
+#: ../bin/dprmfile.c:437 ../bin/paramfilesearch_ui.c:405
+#, fuzzy
+msgid "Parameter files (*.xtp)|*.xtp"
+msgstr "Parametritiedostot|*.xtp"
+
+#: ../bin/draw.c:2134
+msgid "Macro Zoom Mode"
+msgstr ""
+
+#: ../bin/draw.c:2141
+msgid "Scale 1:1 - Use Ctrl+ to go to Macro Zoom Mode"
+msgstr ""
+
+#: ../bin/draw.c:2145
+msgid "Preset Zoom In Value selected. Shift+Ctrl+PageDwn to reset value"
+msgstr ""
+
+#: ../bin/draw.c:2149
+#, fuzzy, c-format
+msgid "Zoom In Program Value %ld:1, Shift+PageDwn to use"
+msgstr "Lähennä arvoon %ld:1"
+
+#: ../bin/draw.c:2187
+#, fuzzy
+msgid "At Maximum Zoom Out"
+msgstr "Suurin siirtymä"
+
+#: ../bin/draw.c:2192
+msgid "Preset Zoom Out Value selected. Shift+Ctrl+PageUp to reset value"
+msgstr ""
+
+#: ../bin/draw.c:2196
+#, fuzzy, c-format
+msgid "Zoom Out Program Value %ld:1 set, Shift+PageUp to use"
+msgstr "Loitonna arvoon %ld:1"
+
+#: ../bin/draw.c:2893
+msgid "Map"
+msgstr "Kartta"
+
+#: ../bin/draw.c:2941
+msgid ""
+"Left-Drag to pan, Ctrl+Left-Drag to zoom, 0 to set origin to zero, 1-9 to "
+"zoom#, e to set to extents"
+msgstr ""
+
+#: ../bin/draw.c:2948
+#, fuzzy
+msgid "Pan Mode - drag point to new position"
+msgstr "Aseta %s ja raahaa paikoilleen"
+
+#: ../bin/draw.c:2955
+msgid "Zoom Mode - drag area to zoom"
+msgstr ""
+
+#: ../bin/draw.c:2981
+msgid "Can't move any further in that direction"
+msgstr ""
+
+#: ../bin/draw.c:2983
+msgid "Left click to pan, right click to zoom, 'o' for origin, 'e' for extents"
+msgstr ""
+
+#: ../bin/draw.c:3022
+msgid ""
+"Left Drag to Pan, +CTRL to Zoom, 0 to set Origin to 0,0, 1-9 to Zoom#, e to "
+"set to Extent"
+msgstr ""
+
+#: ../bin/draw.c:3102
+#, fuzzy
+msgid "Pan/Zoom"
+msgstr "&Zoom"
+
+#: ../bin/draw.c:3113
+msgid "Zoom to 1:1 - '1'"
+msgstr ""
+
+#: ../bin/draw.c:3114
+msgid "Zoom to 1:2 - '2'"
+msgstr ""
+
+#: ../bin/draw.c:3115
+msgid "Zoom to 1:3 - '3'"
+msgstr ""
+
+#: ../bin/draw.c:3116
+msgid "Zoom to 1:4 - '4'"
+msgstr ""
+
+#: ../bin/draw.c:3117
+msgid "Zoom to 1:5 - '5'"
+msgstr ""
+
+#: ../bin/draw.c:3118
+msgid "Zoom to 1:6 - '6'"
+msgstr ""
+
+#: ../bin/draw.c:3119
+msgid "Zoom to 1:7 - '7'"
+msgstr ""
+
+#: ../bin/draw.c:3120
+msgid "Zoom to 1:8 - '8'"
+msgstr ""
+
+#: ../bin/draw.c:3121
+msgid "Zoom to 1:9 - '9'"
+msgstr ""
+
+#: ../bin/draw.c:3125
+msgid "Pan center here - 'c'"
+msgstr ""
+
+#: ../bin/drawgeom.c:76 ../bin/drawgeom.c:91
+msgid "Create Lines"
+msgstr "Luo viivoja"
+
+#: ../bin/drawgeom.c:291
+msgid "+Shift to lock to nearby objects"
+msgstr ""
+
+#: ../bin/drawgeom.c:293
+msgid "+Shift to not lock to nearby objects"
+msgstr ""
+
+#: ../bin/drawgeom.c:393
+msgid "Drag to next point, +Shift to lock to object, +Ctrl to lock to 90deg"
+msgstr ""
+
+#: ../bin/drawgeom.c:403
+msgid "Drag to place next end point"
+msgstr "Raahaa asettaaksesi seuraava päätepiste"
+
+#: ../bin/drawgeom.c:434
+msgid "Drag to set radius"
+msgstr "Aseta säde raahaamalla"
+
+#: ../bin/drawgeom.c:447
+msgid "Drag set box size"
+msgstr "Aseta nelikulmion koko rahaamalla"
+
+#: ../bin/drawgeom.c:488
+msgid "+Shift - lock to close object, +Ctrl - lock to 90 deg"
+msgstr ""
+
+#: ../bin/drawgeom.c:536 ../bin/drawgeom.c:592
+#, c-format
+msgid "Length = %s, Angle = %0.2f"
+msgstr "Pituus = %s, Kulma = %0.2f"
+
+#: ../bin/drawgeom.c:613
+#, c-format
+msgid "Straight Line: Length=%s Angle=%0.3f"
+msgstr "Suora viiva: Pituus=%s Kulma=%0.3f"
+
+#: ../bin/drawgeom.c:635
+#, c-format
+msgid "Curved Line: Radius=%s Angle=%0.3f Length=%s"
+msgstr "Kaari: Säde=%s Kulma=%0.3f Pituus=%s"
+
+#: ../bin/drawgeom.c:659
+#, c-format
+msgid "Radius = %s"
+msgstr "Säde = %s"
+
+#: ../bin/drawgeom.c:669
+#, c-format
+msgid "Width = %s, Height = %s"
+msgstr "Leveys = %s, Korkeus = %s"
+
+#: ../bin/drawgeom.c:1132
+#, fuzzy
+msgid "Select points or use context menu"
+msgstr "Aseta kielten kärjet"
+
+#: ../bin/drawgeom.c:1387
+#, fuzzy, c-format
+msgid "Length = %s, Last angle = %0.2f"
+msgstr "Pituus = %s, Kulma = %0.2f"
+
+#: ../bin/drawgeom.c:1538
+#, fuzzy
+msgid "Point Deleted"
+msgstr "Kirjasinta ei valittu"
+
+#: ../bin/drawgeom.c:1934
+#, fuzzy
+msgid "Not close to end of line"
+msgstr "Nosta tai laske kaikkia valittuja raiteita"
+
+#: ../bin/drawgeom.c:1987
+msgid "Not close to ends or middle of mine, reselect"
+msgstr ""
+
+#: ../bin/drawgeom.c:2035 ../bin/drawgeom.c:2257
+#, fuzzy
+msgid "Drag to Move Corner Point"
+msgstr "Raahaa asettaaksesi 2. päätepiste"
+
+#: ../bin/drawgeom.c:2042
+#, fuzzy
+msgid "Drag to Move Edge "
+msgstr "Raahaa kehälle"
+
+#: ../bin/drawgeom.c:2104
+#, c-format
+msgid "Length = %0.3f Angle = %0.3f"
+msgstr "Pituus = %0.3f Kulma = %0.3f"
+
+#: ../bin/drawgeom.c:2252
+#, fuzzy
+msgid "Drag to Move Edge"
+msgstr "Raahaa kehälle"
+
+#: ../bin/dxfoutput.c:232
+msgid "Export to DXF"
+msgstr "Vie DXF tiedostoon"
+
+#: ../bin/fileio.c:240
+msgid ""
+"\n"
+"Do you want to continue?"
+msgstr ""
+"\n"
+"Haluatko jatkaa?"
+
+#: ../bin/fileio.c:607
+#, c-format
+msgid "putTitle: title too long: %s"
+msgstr "putTitle: Otsikko on liian pitkä: %s"
+
+#: ../bin/fileio.c:637
+msgid "Unnamed Trackplan"
+msgstr "Nimetön ratasuunnitelma"
+
+#: ../bin/fileio.c:638
+msgid " (R/O)"
+msgstr ""
+
+#: ../bin/fileio.c:658 ../bin/fileio.c:1277
+msgid "Check Pointing"
+msgstr "Automaattinen varmennus"
+
+#: ../bin/fileio.c:788
+msgid "Unknown layout file object - skip until next good object?"
+msgstr ""
+
+#: ../bin/fileio.c:1025
+msgid "Track"
+msgstr "Raide"
+
+#: ../bin/fileio.c:1211
+msgid "Save Tracks"
+msgstr "Tallenna"
+
+#: ../bin/fileio.c:1227
+#, fuzzy
+msgid "Save Tracks As"
+msgstr "Tallenna"
+
+#: ../bin/fileio.c:1238
+msgid "Open Tracks"
+msgstr "Avaa"
+
+#: ../bin/fileio.c:1252
+#, fuzzy
+msgid "Example Tracks"
+msgstr "Yksinkertaiset raideosat"
+
+#: ../bin/fileio.c:1460
+#, fuzzy, c-format
+msgid "Module - %s"
+msgstr "Ohje"
+
+#: ../bin/fileio.c:1465 ../bin/fileio.c:1486
+msgid "Import Tracks"
+msgstr "Tuo raiteet tiedostosta"
+
+#: ../bin/fileio.c:1548
+msgid "Export Tracks"
+msgstr "Vie raiteet tiedostoon"
+
+#: ../bin/fileio.c:1567
+msgid "Clipboard"
+msgstr "Leikepöytä"
+
+#: ../bin/filenoteui.c:62 ../bin/linknoteui.c:50 ../bin/textnoteui.c:42
+#, fuzzy
+msgid "Position X"
+msgstr "Sijainti"
+
+#: ../bin/filenoteui.c:64 ../bin/linknoteui.c:52 ../bin/textnoteui.c:44
+#, fuzzy
+msgid "Position Y"
+msgstr "Sijainti"
+
+#: ../bin/filenoteui.c:68 ../bin/linknoteui.c:56
+#, fuzzy
+msgid "Title"
+msgstr "Otsikko"
+
+#: ../bin/filenoteui.c:70 ../bin/trknote.c:62
+#: ../../../../build/work/app/bin/bllnhlp.c:85
+#, fuzzy
+msgid "Document"
+msgstr "Lukumäärä"
+
+#: ../bin/filenoteui.c:72
+#, fuzzy
+msgid "Select..."
+msgstr "Valitse"
+
+#: ../bin/filenoteui.c:74 ../bin/linknoteui.c:60
+#, fuzzy
+msgid "Open..."
+msgstr "&Avaa ..."
+
+#: ../bin/filenoteui.c:136
+msgid "Add Document"
+msgstr ""
+
+#: ../bin/filenoteui.c:158
+msgid "The file doesn't exist or cannot be read!"
+msgstr ""
+
+#: ../bin/filenoteui.c:297
+#, fuzzy, c-format
+msgid "Document(%d) Layer=%d %-.80s [%s]"
+msgstr "(%d): Taso=%d %s"
+
+#: ../bin/filenoteui.c:309
+#, fuzzy
+msgid "Update document"
+msgstr "Päivitetty"
+
+#: ../bin/filenoteui.c:323
+#, fuzzy
+msgid "Describe the file"
+msgstr "Määrittele ja valitse -toiminnot"
+
+#: ../bin/filenoteui.c:329
+msgid "Attach document"
+msgstr ""
+
+#: ../bin/i18n.c:66
+#, c-format
+msgid "Gettext initialized (PACKAGE=%s, LOCALEDIR=%s, LC_ALL=%s).\n"
+msgstr "Gettext alustettu (PACKAGE=%s, LOCALEDIR=%s, LC_ALL=%s).\n"
+
+#: ../bin/layout.c:373
+#, c-format
+msgid "Unable to load Image File - %s"
+msgstr ""
+
+#: ../bin/layout.c:436
+msgid "Load Background"
+msgstr ""
+
+#: ../bin/layout.c:458
+msgid "Room Width"
+msgstr "Huoneen leveys"
+
+#: ../bin/layout.c:459
+#, fuzzy
+msgid " Height"
+msgstr "Korkeus"
+
+#: ../bin/layout.c:460
+#, fuzzy
+msgid "Layout Title"
+msgstr "Ratasuunnitelma"
+
+#: ../bin/layout.c:461
+#, fuzzy
+msgid "Subtitle"
+msgstr "Otsikko"
+
+#: ../bin/layout.c:465
+#, fuzzy
+msgid " Gauge"
+msgstr "Mittakaava / raideväli"
+
+#: ../bin/layout.c:467
+#, fuzzy
+msgid "Min Track Radius"
+msgstr "Pienin karresäde"
+
+#: ../bin/layout.c:468
+#, fuzzy
+msgid " Max Track Grade (%)"
+msgstr "Suurin nousukulma (%)"
+
+#: ../bin/layout.c:470
+#, fuzzy
+msgid "Background File Path"
+msgstr "Profiilirata"
+
+#: ../bin/layout.c:474
+msgid "Background PosX,Y"
+msgstr ""
+
+#: ../bin/layout.c:478
+msgid "Background Size"
+msgstr ""
+
+#: ../bin/layout.c:480
+msgid "Background Screen %"
+msgstr ""
+
+#: ../bin/layout.c:482
+msgid "Background Angle"
+msgstr ""
+
+#: ../bin/layout.c:560
+msgid "Layout Options"
+msgstr "Ratasuunnitelman asetukset"
+
+#: ../bin/linknoteui.c:58
+msgid "URL"
+msgstr ""
+
+#: ../bin/linknoteui.c:107
+#, c-format
+msgid ""
+"The entered URL is too long. The maximum allowed length is %d. Please edit "
+"the entered value."
+msgstr ""
+
+#: ../bin/linknoteui.c:110
+#, fuzzy
+msgid "Re-edit"
+msgstr "Palauta"
+
+#: ../bin/linknoteui.c:241
+#, fuzzy
+msgid "Update link"
+msgstr "Päivitä"
+
+#: ../bin/linknoteui.c:259
+#, fuzzy
+msgid "Create link"
+msgstr "Luo nelikulmio"
+
+#: ../bin/macro.c:95
+msgid "Message"
+msgstr "Viesti"
+
+#: ../bin/macro.c:179
+msgid "Recording"
+msgstr "Nauhoitus"
+
+#: ../bin/macro.c:214
+msgid "End of Playback. Hit Step to exit\n"
+msgstr "Toisto on lopussa. Paina Seuraava vaihe -painiketta poistuaksesi.\n"
+
+#: ../bin/macro.c:278
+msgid "Record"
+msgstr "Nauhoita"
+
+#: ../bin/macro.c:676
+msgid "Step"
+msgstr "Seuraava vaihe"
+
+#: ../bin/macro.c:679 ../bin/macro.c:1542
+msgid "Next"
+msgstr "Seuraava"
+
+#: ../bin/macro.c:682 ../bin/misc.c:699 ../bin/track.c:1116
+msgid "Quit"
+msgstr "Lopeta"
+
+#: ../bin/macro.c:685 ../../../../build/work/app/bin/bllnhlp.c:540
+msgid "Speed"
+msgstr "Nopeus"
+
+#: ../bin/macro.c:832 ../bin/macro.c:877
+msgid "Regression"
+msgstr ""
+
+#: ../bin/macro.c:1043 ../bin/macro.c:1401
+msgid "Demo"
+msgstr "Demo"
+
+#: ../bin/macro.c:1221
+#, c-format
+msgid "Elapsed time %lu\n"
+msgstr "Kulunut aika %lu\n"
+
+#: ../bin/macro.c:1322
+msgid "Playback"
+msgstr "Toisto"
+
+#: ../bin/macro.c:1404
+msgid "Slowest"
+msgstr "Hitain"
+
+#: ../bin/macro.c:1405
+msgid "Slow"
+msgstr "Hidas"
+
+#: ../bin/macro.c:1407
+msgid "Fast"
+msgstr "Nopea"
+
+#: ../bin/macro.c:1408
+msgid "Faster"
+msgstr "Nopeampi"
+
+#: ../bin/macro.c:1409
+msgid "Fastest"
+msgstr "Nopein"
+
+#: ../bin/macro.c:1527
+msgid "Can not find PARAMETER playback proc"
+msgstr "PARAMETER toistoproseduuria ei löydy"
+
+#: ../bin/misc.c:169
+msgid "No Messages"
+msgstr "Ei viestejä"
+
+#: ../bin/misc.c:431 ../bin/misc.c:434
+msgid "ABORT"
+msgstr "KESKEYTÄ"
+
+#: ../bin/misc.c:433
+msgid ""
+"\n"
+"Do you want to save your layout?"
+msgstr ""
+"\n"
+"Haluatko tallentaa ratasuunnitelman?"
+
+#: ../bin/misc.c:480
+#, c-format
+msgid "No help for %s"
+msgstr "Ei ohjetta aiheesta %s"
+
+#: ../bin/misc.c:592
+msgid ""
+"Save changes to the layout design before closing?\n"
+"\n"
+"If you don't save now, your unsaved changes will be discarded."
+msgstr ""
+"Tallennetaanko ratasuunnitelma ennen sulkemista?\n"
+"\n"
+"Jos ei tallenneta, kaikki muutokset menetetään."
+
+#: ../bin/misc.c:594 ../bin/misc.c:2291
+msgid "&Save"
+msgstr "&Tallenna"
+
+#: ../bin/misc.c:594 ../bin/misc.c:629
+msgid "&Cancel"
+msgstr "&Peruuta"
+
+#: ../bin/misc.c:594
+msgid "&Don't Save"
+msgstr "Älä tallenna"
+
+#: ../bin/misc.c:618
+#, fuzzy
+msgid "examples"
+msgstr "Näyte"
+
+#: ../bin/misc.c:627
+msgid ""
+"Do you want to return to the last saved state?\n"
+"\n"
+"Revert will cause all changes done since last save to be lost."
+msgstr ""
+"Haluatko palata edelliseen tallennettuun tilaan?\n"
+"\n"
+"Palautuksessa menetetään kaikki tallennuksen jälkeiset muutokset."
+
+#: ../bin/misc.c:629
+msgid "&Revert"
+msgstr "Palauta"
+
+#: ../bin/misc.c:851
+msgid "XTrackCAD Font"
+msgstr "XTrackCAD kirjasin"
+
+#: ../bin/misc.c:912
+#, c-format
+msgid "No balloon help for %s\n"
+msgstr "Ei pikaopastetta %s:lle\n"
+
+#: ../bin/misc.c:914 ../../../../build/work/app/bin/bllnhlp.c:603
+#: ../../../../build/work/app/bin/bllnhlp.c:604
+#: ../../../../build/work/app/bin/bllnhlp.c:606
+#: ../../../../build/work/app/bin/bllnhlp.c:607
+#: ../../../../build/work/app/bin/bllnhlp.c:609
+#: ../../../../build/work/app/bin/bllnhlp.c:610
+#: ../../../../build/work/app/bin/bllnhlp.c:611
+#: ../../../../build/work/app/bin/bllnhlp.c:612
+#: ../../../../build/work/app/bin/bllnhlp.c:613
+#: ../../../../build/work/app/bin/bllnhlp.c:614
+#: ../../../../build/work/app/bin/bllnhlp.c:615
+#: ../../../../build/work/app/bin/bllnhlp.c:616
+#: ../../../../build/work/app/bin/bllnhlp.c:617
+#: ../../../../build/work/app/bin/bllnhlp.c:618
+#: ../../../../build/work/app/bin/bllnhlp.c:619
+#: ../../../../build/work/app/bin/bllnhlp.c:620
+#: ../../../../build/work/app/bin/bllnhlp.c:621
+#: ../../../../build/work/app/bin/bllnhlp.c:622
+#: ../../../../build/work/app/bin/bllnhlp.c:623
+#: ../../../../build/work/app/bin/bllnhlp.c:624
+#: ../../../../build/work/app/bin/bllnhlp.c:625
+#: ../../../../build/work/app/bin/bllnhlp.c:626
+#: ../../../../build/work/app/bin/bllnhlp.c:627
+#: ../../../../build/work/app/bin/bllnhlp.c:628
+#: ../../../../build/work/app/bin/bllnhlp.c:629
+#: ../../../../build/work/app/bin/bllnhlp.c:630
+#: ../../../../build/work/app/bin/bllnhlp.c:631
+#: ../../../../build/work/app/bin/bllnhlp.c:632
+#: ../../../../build/work/app/bin/bllnhlp.c:633
+#: ../../../../build/work/app/bin/bllnhlp.c:634
+#: ../../../../build/work/app/bin/bllnhlp.c:635
+#: ../../../../build/work/app/bin/bllnhlp.c:636
+#: ../../../../build/work/app/bin/bllnhlp.c:637
+#: ../../../../build/work/app/bin/bllnhlp.c:638
+#: ../../../../build/work/app/bin/bllnhlp.c:639
+#: ../../../../build/work/app/bin/bllnhlp.c:640
+#: ../../../../build/work/app/bin/bllnhlp.c:641
+#: ../../../../build/work/app/bin/bllnhlp.c:642
+#: ../../../../build/work/app/bin/bllnhlp.c:643
+#: ../../../../build/work/app/bin/bllnhlp.c:644
+#: ../../../../build/work/app/bin/bllnhlp.c:645
+#: ../../../../build/work/app/bin/bllnhlp.c:646
+#: ../../../../build/work/app/bin/bllnhlp.c:647
+#: ../../../../build/work/app/bin/bllnhlp.c:648
+#: ../../../../build/work/app/bin/bllnhlp.c:649
+#: ../../../../build/work/app/bin/bllnhlp.c:650
+#: ../../../../build/work/app/bin/bllnhlp.c:651
+#: ../../../../build/work/app/bin/bllnhlp.c:652
+#: ../../../../build/work/app/bin/bllnhlp.c:653
+#: ../../../../build/work/app/bin/bllnhlp.c:654
+#: ../../../../build/work/app/bin/bllnhlp.c:655
+#: ../../../../build/work/app/bin/bllnhlp.c:656
+#: ../../../../build/work/app/bin/bllnhlp.c:657
+#: ../../../../build/work/app/bin/bllnhlp.c:658
+#: ../../../../build/work/app/bin/bllnhlp.c:659
+#: ../../../../build/work/app/bin/bllnhlp.c:660
+#: ../../../../build/work/app/bin/bllnhlp.c:661
+#: ../../../../build/work/app/bin/bllnhlp.c:662
+#: ../../../../build/work/app/bin/bllnhlp.c:663
+#: ../../../../build/work/app/bin/bllnhlp.c:665
+msgid "No Help"
+msgstr "Ei ohjetta"
+
+#: ../bin/misc.c:1022
+#, fuzzy
+msgid "File AutoSaved"
+msgstr "Viivain"
+
+#: ../bin/misc.c:1233 ../bin/misc.c:1240 ../bin/misc.c:1311
+msgid ""
+"Cancelling the current command will undo the changes\n"
+"you are currently making. Do you want to update?"
+msgstr ""
+"Komennon peruuttaminen kumoaa muutokset,\n"
+"joita olet tekemässä. Haluatko jatkaa?"
+
+#: ../bin/misc.c:1806
+msgid "Sticky Commands"
+msgstr "Pysyvät komennot"
+
+#: ../bin/misc.c:1819
+#, fuzzy
+msgid "File Buttons"
+msgstr "Viivain"
+
+#: ../bin/misc.c:1819
+#, fuzzy
+msgid "Import/Export Buttons"
+msgstr "Zoom"
+
+#: ../bin/misc.c:1819
+msgid "Zoom Buttons"
+msgstr "Zoom"
+
+#: ../bin/misc.c:1820
+msgid "Undo Buttons"
+msgstr "Kumoa/Tee uudelleen"
+
+#: ../bin/misc.c:1820
+msgid "Easement Button"
+msgstr "Kaarreloivennus"
+
+#: ../bin/misc.c:1820
+msgid "SnapGrid Buttons"
+msgstr "Kohdistusruudukko"
+
+#: ../bin/misc.c:1821
+msgid "Create Track Buttons"
+msgstr "Luo raiteet"
+
+#: ../bin/misc.c:1821
+#, fuzzy
+msgid "Layout Control Elements"
+msgstr "Ratasuunnitelman asetukset"
+
+#: ../bin/misc.c:1822
+msgid "Modify Track Buttons"
+msgstr "Radan muokkaus"
+
+#: ../bin/misc.c:1822
+msgid "Properties/Select"
+msgstr "Määrittele/valitse"
+
+#: ../bin/misc.c:1823
+msgid "Track Group Buttons"
+msgstr "Raiteiden ryhmittely"
+
+#: ../bin/misc.c:1823
+msgid "Train Group Buttons"
+msgstr "Junat"
+
+#: ../bin/misc.c:1824
+msgid "Create Misc Buttons"
+msgstr "Piirto"
+
+#: ../bin/misc.c:1824
+msgid "Ruler Button"
+msgstr "Viivain"
+
+#: ../bin/misc.c:1824
+msgid "Layer Buttons"
+msgstr "Tasot"
+
+#: ../bin/misc.c:1825
+msgid "Hot Bar"
+msgstr "Hot Bar"
+
+#: ../bin/misc.c:1894 ../../../../build/work/app/bin/bllnhlp.c:80
+msgid "Change Elevations"
+msgstr "Muuta korkeustasoja"
+
+#: ../bin/misc.c:1912
+msgid "Angle:"
+msgstr "Kulma:"
+
+#: ../bin/misc.c:1919
+#, fuzzy
+msgid "Move X:"
+msgstr "Siirrä"
+
+#: ../bin/misc.c:1920
+#, fuzzy
+msgid "Move Y:"
+msgstr "Siirrä"
+
+#: ../bin/misc.c:1967
+#, fuzzy
+msgid "Enter Move ..."
+msgstr "Syötä kulma ..."
+
+#: ../bin/misc.c:1973
+msgid "180 "
+msgstr "180 "
+
+#: ../bin/misc.c:1974
+msgid "90 CW"
+msgstr "90 MP"
+
+#: ../bin/misc.c:1975
+msgid "45 CW"
+msgstr "45 MP"
+
+#: ../bin/misc.c:1976
+msgid "30 CW"
+msgstr "30 MP"
+
+#: ../bin/misc.c:1977
+msgid "15 CW"
+msgstr "15 MP"
+
+#: ../bin/misc.c:1978
+msgid "15 CCW"
+msgstr "15 VP"
+
+#: ../bin/misc.c:1979
+msgid "30 CCW"
+msgstr "30 VP"
+
+#: ../bin/misc.c:1980
+msgid "45 CCW"
+msgstr "45 VP"
+
+#: ../bin/misc.c:1981
+msgid "90 CCW"
+msgstr "90 VP"
+
+#: ../bin/misc.c:1982
+msgid "Enter Angle ..."
+msgstr "Syötä kulma ..."
+
+#: ../bin/misc.c:2013
+msgid "Debug"
+msgstr "Virheiden poisto (debug)"
+
+#: ../bin/misc.c:2144
+msgid "&File"
+msgstr "&Tiedosto"
+
+#: ../bin/misc.c:2145
+msgid "&Edit"
+msgstr "&Muokkaa"
+
+#: ../bin/misc.c:2146
+msgid "&View"
+msgstr "&Näytä"
+
+#: ../bin/misc.c:2147
+msgid "&Add"
+msgstr "&Lisää"
+
+#: ../bin/misc.c:2148
+msgid "&Change"
+msgstr "Muuta"
+
+#: ../bin/misc.c:2149
+msgid "&Draw"
+msgstr "Piirto"
+
+#: ../bin/misc.c:2150
+msgid "&Manage"
+msgstr "Hallinta"
+
+#: ../bin/misc.c:2151
+msgid "&Options"
+msgstr "Asetukset"
+
+#: ../bin/misc.c:2152
+msgid "&Macro"
+msgstr "Makro"
+
+#: ../bin/misc.c:2153
+msgid "&Window"
+msgstr "&Ikkuna"
+
+#: ../bin/misc.c:2154
+msgid "&Help"
+msgstr "&Ohje"
+
+#: ../bin/misc.c:2190
+#, fuzzy
+msgid "Context Commands"
+msgstr "Muut komennot"
+
+#: ../bin/misc.c:2191
+msgid "Shift Context Commands"
+msgstr ""
+
+#: ../bin/misc.c:2206 ../bin/misc.c:2393
+msgid "Enable SnapGrid"
+msgstr "Käytä kohdistusruudukkoa"
+
+#: ../bin/misc.c:2208
+msgid "SnapGrid Show"
+msgstr "Näytä kohdistusruudukko"
+
+#: ../bin/misc.c:2210
+#, fuzzy
+msgid " Enable Magnetic Snap"
+msgstr "Käytä kohdistusruudukkoa"
+
+#: ../bin/misc.c:2212 ../bin/misc.c:2414
+#, fuzzy
+msgid "Show/Hide Map"
+msgstr "Näytä/piilota taso"
+
+#: ../bin/misc.c:2214
+#, fuzzy
+msgid "Show/Hide Background"
+msgstr "Näytä/piilota taso"
+
+#: ../bin/misc.c:2245 ../bin/misc.c:2246
+#, fuzzy
+msgid "Add..."
+msgstr "Lisää"
+
+#: ../bin/misc.c:2249 ../bin/misc.c:2250
+#, fuzzy
+msgid "More..."
+msgstr "Lisää"
+
+#: ../bin/misc.c:2285
+msgid "&New ..."
+msgstr "&Uusi ..."
+
+#: ../bin/misc.c:2287
+msgid "&Open ..."
+msgstr "&Avaa ..."
+
+#: ../bin/misc.c:2293
+msgid "Save &As ..."
+msgstr "Tallenna &nimellä ..."
+
+#: ../bin/misc.c:2295
+msgid "Revert"
+msgstr "Palauta"
+
+#: ../bin/misc.c:2298
+msgid "P&rint Setup ..."
+msgstr "Tulostusasetukset ..."
+
+#: ../bin/misc.c:2303
+msgid "&Import"
+msgstr "Tuo tiedostosta"
+
+#: ../bin/misc.c:2305
+#, fuzzy
+msgid "Import &Module"
+msgstr "Tuo tiedostosta"
+
+#: ../bin/misc.c:2307
+msgid "Export to &Bitmap"
+msgstr "Vie bitmap tiedostoon"
+
+#: ../bin/misc.c:2310
+msgid "E&xport"
+msgstr "Vie tiedostoon"
+
+#: ../bin/misc.c:2312
+msgid "Export D&XF"
+msgstr "Vie DXF tiedostoon"
+
+#: ../bin/misc.c:2317
+msgid "Parameter &Files ..."
+msgstr "Parametritiedostot ..."
+
+#: ../bin/misc.c:2319
+msgid "No&tes ..."
+msgstr "Muistiinpanot ..."
+
+#: ../bin/misc.c:2326
+msgid "E&xit"
+msgstr "Poistu"
+
+#: ../bin/misc.c:2332
+msgid "&Undo"
+msgstr "&Kumoa"
+
+#: ../bin/misc.c:2334
+msgid "R&edo"
+msgstr "&Tee uudestaan"
+
+#: ../bin/misc.c:2337
+msgid "Cu&t"
+msgstr "&Leikkaa"
+
+#: ../bin/misc.c:2339
+msgid "&Copy"
+msgstr "&Kopioi"
+
+#: ../bin/misc.c:2341
+msgid "&Paste"
+msgstr "L&iitä"
+
+#: ../bin/misc.c:2343
+#, fuzzy
+msgid "C&lone"
+msgstr "Sulje"
+
+#: ../bin/misc.c:2345
+msgid "De&lete"
+msgstr "Poista"
+
+#: ../bin/misc.c:2353
+msgid "Select &All"
+msgstr "Valitse kaikki"
+
+#: ../bin/misc.c:2355
+msgid "&Deselect All"
+msgstr "Poista valinnat"
+
+#: ../bin/misc.c:2356
+msgid "&Invert Selection"
+msgstr "Käänteinen valinta"
+
+#: ../bin/misc.c:2357
+msgid "Select Stranded Track"
+msgstr "Valitse irtonaiset raiteet"
+
+#: ../bin/misc.c:2359
+msgid "Tu&nnel"
+msgstr "Tunneli"
+
+#: ../bin/misc.c:2360
+#, fuzzy
+msgid "B&ridge"
+msgstr "Silta"
+
+#: ../bin/misc.c:2361
+msgid "Ties/NoTies"
+msgstr ""
+
+#: ../bin/misc.c:2362
+#, fuzzy
+msgid "Move to &Front"
+msgstr "Siirrä yhdistääksesi"
+
+#: ../bin/misc.c:2363
+#, fuzzy
+msgid "Move to &Back"
+msgstr "Siirrä raiteita"
+
+#: ../bin/misc.c:2373
+msgid "Zoom &In"
+msgstr "Lähennä"
+
+#: ../bin/misc.c:2376
+msgid "Zoom &Out"
+msgstr "Loitonna"
+
+#: ../bin/misc.c:2386
+msgid "&Redraw"
+msgstr "Uudelleenpiirto"
+
+#: ../bin/misc.c:2388
+msgid "Redraw All"
+msgstr "Uudelleenpiirto kaikille"
+
+#: ../bin/misc.c:2395
+msgid "Show SnapGrid"
+msgstr "Näytä kohdistusruudukko"
+
+#: ../bin/misc.c:2405
+#, fuzzy
+msgid "Enable Magnetic Snap"
+msgstr "Käytä kohdistusruudukkoa"
+
+#: ../bin/misc.c:2420
+msgid "&Tool Bar"
+msgstr "Työkalurivin painikkeet"
+
+#: ../bin/misc.c:2453
+#, fuzzy
+msgid "Control Element"
+msgstr "Valitse värit"
+
+#: ../bin/misc.c:2479
+msgid "&Loosen Tracks"
+msgstr "Irroita raiteet"
+
+#: ../bin/misc.c:2491
+msgid "Raise/Lower Elevations"
+msgstr "Nosta/laske korkeuksia"
+
+#: ../bin/misc.c:2500
+msgid "Recompute Elevations"
+msgstr "Laske korkeudet uudelleen"
+
+#: ../bin/misc.c:2505
+msgid "Change Scale"
+msgstr "Muuta mittakaavaa"
+
+#: ../bin/misc.c:2526
+msgid "L&ayout ..."
+msgstr "Ratasuunnitelma ..."
+
+#: ../bin/misc.c:2528
+msgid "&Display ..."
+msgstr "Näyttö ..."
+
+#: ../bin/misc.c:2530
+msgid "Co&mmand ..."
+msgstr "Komennot ..."
+
+#: ../bin/misc.c:2532
+msgid "&Easements ..."
+msgstr "Kaarreloivennus ..."
+
+#: ../bin/misc.c:2535
+msgid "&Fonts ..."
+msgstr "&Kirjasimet ..."
+
+#: ../bin/misc.c:2537
+msgid "Stic&ky ..."
+msgstr "Pysyvät komennot ..."
+
+#: ../bin/misc.c:2542
+msgid "&Debug ..."
+msgstr "Virheiden poisto (debug) ..."
+
+#: ../bin/misc.c:2545
+msgid "&Preferences ..."
+msgstr "&Ominaisuudet ..."
+
+#: ../bin/misc.c:2547
+msgid "&Colors ..."
+msgstr "Värit ..."
+
+#: ../bin/misc.c:2553
+msgid "&Record ..."
+msgstr "&Nauhoita ..."
+
+#: ../bin/misc.c:2555
+msgid "&Play Back ..."
+msgstr "&Toisto ..."
+
+#: ../bin/misc.c:2561
+msgid "Main window"
+msgstr "Pääikkuna"
+
+#: ../bin/misc.c:2575
+msgid "Recent Messages"
+msgstr "Viimeisimmät viestit"
+
+#: ../bin/misc.c:2582
+msgid "Tip of the Day..."
+msgstr "Päivän vinkki ..."
+
+#: ../bin/misc.c:2583
+msgid "&Demos"
+msgstr "Demot"
+
+#: ../bin/misc.c:2584
+#, fuzzy
+msgid "Examples..."
+msgstr "Kaarreloivennus ..."
+
+#: ../bin/misc.c:2588 ../bin/smalldlg.c:222
+msgid "About"
+msgstr "Tietoja"
+
+#: ../bin/misc.c:2601
+msgid "Tur&nout Designer..."
+msgstr "Vaihteiden suunnittelu..."
+
+#: ../bin/misc.c:2604
+msgid "Layout &Control Elements"
+msgstr ""
+
+#: ../bin/misc.c:2606
+msgid "&Group"
+msgstr "Ryhmittele"
+
+#: ../bin/misc.c:2608
+msgid "&Ungroup"
+msgstr "Pura ryhmittely"
+
+#: ../bin/misc.c:2612
+#, fuzzy
+msgid "Custom defined parts..."
+msgstr "Omat raideosat ja kalusto..."
+
+#: ../bin/misc.c:2615
+msgid "Update Turnouts and Structures"
+msgstr "Päivitä vaihteet ja rakennukset"
+
+#: ../bin/misc.c:2624
+msgid "Layers ..."
+msgstr "Tasot ..."
+
+#: ../bin/misc.c:2628
+msgid "Parts &List ..."
+msgstr "Osaluettelo ..."
+
+#: ../bin/misc.c:2631
+msgid "Price List..."
+msgstr "Hinnasto ..."
+
+#: ../bin/misc.c:2713
+#, fuzzy
+msgid "Import/Export"
+msgstr "Vie tiedostoon"
+
+#: ../bin/misc.c:2743
+msgid ""
+"Program was not terminated properly. Do you want to resume working on the "
+"previous trackplan?"
+msgstr ""
+"Ohjelmaa ei lopetettu kunnolla. Haluatko jatkaa työskentelyä edellisen "
+"ratasuunnitelman parissa?"
+
+#: ../bin/misc.c:2744
+msgid "Resume"
+msgstr "Jatka"
+
+#: ../bin/misc.c:2744
+msgid "Resume with New Name"
+msgstr ""
+
+#: ../bin/misc.c:2744
+msgid "Ignore Checkpoint"
+msgstr ""
+
+#: ../bin/misc.c:2859
+#, c-format
+msgid "Unnamed Trackplan - %s(%s)"
+msgstr "Nimetön ratasuunnitelma - %s(%s)"
+
+#: ../bin/misc.c:2945
+msgid "Initializing commands"
+msgstr "Alustetaan komennot"
+
+#: ../bin/misc.c:2954
+msgid "Initializing menus"
+msgstr "Alustetaan valikot"
+
+#: ../bin/misc.c:2989
+msgid "Reading parameter files"
+msgstr "Luetaan parametritiedostot"
+
+#: ../bin/misc.c:3026
+msgid "Initialization complete"
+msgstr "Alustus valmis"
+
+#: ../bin/param.c:92
+msgid "Unexpected End Of String"
+msgstr "Odottamaton merkkijonon loppu"
+
+#: ../bin/param.c:99
+msgid "Expected digit"
+msgstr "Odotettiin numeroa"
+
+#: ../bin/param.c:106
+msgid "Overflow"
+msgstr "Ylivuoto"
+
+#: ../bin/param.c:154
+msgid "Divide by 0"
+msgstr "Jako nollalla"
+
+#: ../bin/param.c:162
+msgid "Expected /"
+msgstr "Odotettiin /"
+
+#: ../bin/param.c:248
+msgid "Invalid Units Indicator"
+msgstr "Epäkelpo yksikön merkintä"
+
+#: ../bin/param.c:276
+msgid "Expected End Of String"
+msgstr "Odotettiin merkkijonon loppua"
+
+#: ../bin/param.c:302 ../bin/param.c:1406
+#, c-format
+msgid "Invalid Number"
+msgstr "Epäkelpo numero"
+
+#: ../bin/param.c:361
+msgid "End Of String"
+msgstr "Merkkijonon loppu"
+
+#: ../bin/param.c:1413
+#, c-format
+msgid "Enter a value > %ld"
+msgstr "Syötä arvo, joka on > %ld"
+
+#: ../bin/param.c:1415
+#, c-format
+msgid "Enter a value < %ld"
+msgstr "Syötä arvo, joka on < %ld"
+
+#: ../bin/param.c:1417
+#, c-format
+msgid "Enter a value between %ld and %ld"
+msgstr "Syötä arvo %ld ja %ld väliltä"
+
+#: ../bin/param.c:1473
+#, c-format
+msgid "Enter a value > %s"
+msgstr "Syätä arvo, joka on > %s"
+
+#: ../bin/param.c:1476
+#, c-format
+msgid "Enter a value < %s"
+msgstr "Syötä arvo, joka on < %s"
+
+#: ../bin/param.c:1479
+#, c-format
+msgid "Enter a value between %s and %s"
+msgstr "Syötä arvo %s ja %s väliltä"
+
+#: ../bin/param.c:2643
+msgid "Help"
+msgstr "Ohje"
+
+#: ../bin/paramfile.c:250
+msgid "Parameter"
+msgstr "Parametri"
+
+#: ../bin/paramfile.c:348
+msgid "Unknown param file line - skip until next good object?"
+msgstr ""
+
+#: ../bin/paramfilelist.c:110
+#, c-format
+msgid "Updating %s"
+msgstr "Päivitetään %s"
+
+#: ../bin/paramfilesearch_ui.c:68
+msgid "Enter at least one search word"
+msgstr ""
+
+#: ../bin/paramfilesearch_ui.c:77
+#, fuzzy
+msgid "Reload Library"
+msgstr "Lataa"
+
+#: ../bin/paramfilesearch_ui.c:274
+#, fuzzy, c-format
+msgid "%d parameter files found."
+msgstr "Luetaan parametritiedostot"
+
+#: ../bin/paramfilesearch_ui.c:284
+msgid "No matches found."
+msgstr ""
+
+#: ../bin/paramfilesearch_ui.c:396
+#, fuzzy
+msgid "Choose parameter files"
+msgstr "Luetaan parametritiedostot"
+
+#: ../bin/paramfilesearch_ui.c:416
+msgid "No system parameter files found, search is disabled."
+msgstr ""
+
+#: ../bin/smalldlg.c:64
+msgid "Show tips at start"
+msgstr "Vinkki ohjelman alussa"
+
+#: ../bin/smalldlg.c:70
+msgid "Did you know..."
+msgstr "Tiesitkö..."
+
+#: ../bin/smalldlg.c:72
+msgid "Previous Tip"
+msgstr "Edellinen"
+
+#: ../bin/smalldlg.c:73
+msgid "Next Tip"
+msgstr "Seuraava"
+
+#: ../bin/smalldlg.c:90
+msgid "Tip of the Day"
+msgstr "Päivän vinkki"
+
+#: ../bin/smalldlg.c:99
+msgid "No tips are available"
+msgstr "Vinkkejä ei ole saatavilla"
+
+#: ../bin/smalldlg.c:199
+#, fuzzy
+msgid ""
+"XTrackCAD is a CAD (computer-aided design) program for designing model "
+"railroad layouts."
+msgstr ""
+"\n"
+"XTrackCAD on CAD ohjelma pienoisrautateiden\n"
+"raidekaavioiden suunniteluun."
+
+#: ../bin/tbezier.c:177
+#, c-format
+msgid "Bezier: len=%0.2f min_rad=%0.2f"
+msgstr ""
+
+#: ../bin/tbezier.c:250
+#, fuzzy
+msgid "Ctl Pt 1: X,Y"
+msgstr "Päätepiste 1: X"
+
+#: ../bin/tbezier.c:251
+#, fuzzy
+msgid "Ctl Pt 2: X,Y"
+msgstr "Päätepiste 2: X"
+
+#: ../bin/tbezier.c:257
+#, fuzzy
+msgid "MinRadius"
+msgstr "Säde"
+
+#: ../bin/tbezier.c:262
+#, fuzzy
+msgid "Line Color"
+msgstr "%s väri"
+
+#: ../bin/tbezier.c:379
+#, fuzzy, c-format
+msgid ""
+"Bezier %s(%d): Layer=%u MinRadius=%s Length=%s EP=[%0.3f,%0.3f] [%0.3f,%"
+"0.3f] CP1=[%0.3f,%0.3f] CP2=[%0.3f, %0.3f]"
+msgstr ""
+"Kaareva raideosa(%d): Taso=%d Säde=%s Pituus=%s Keskipiste=[%s,%s] Päätep.=[%"
+"0.3f,%0.3f K%0.3f] [%0.3f,%0.3f K%0.3f]"
+
+#: ../bin/tbezier.c:453
+#, fuzzy
+msgid "Bezier Track"
+msgstr "Helix raide"
+
+#: ../bin/tbezier.c:870
+msgid "Merge Bezier"
+msgstr ""
+
+#: ../bin/tcornu.c:222
+#, c-format
+msgid "Cornu: len=%0.2f min_rad=%0.2f"
+msgstr ""
+
+#: ../bin/tcornu.c:296
+#, fuzzy
+msgid "Radius "
+msgstr "Säde1"
+
+#: ../bin/tcornu.c:304
+#, fuzzy
+msgid "Minimum Radius"
+msgstr "Pienin karresäde"
+
+#: ../bin/tcornu.c:305
+msgid "Max Rate Of Curve Change/Scale"
+msgstr ""
+
+#: ../bin/tcornu.c:306
+msgid "Total Winding Angle"
+msgstr ""
+
+#: ../bin/tcornu.c:444
+#, fuzzy, c-format
+msgid ""
+"Cornu Track(%d): Layer=%u MinRadius=%s Length=%s EP=[%0.3f,%0.3f] [%0.3f,%"
+"0.3f]"
+msgstr ""
+"Kaareva raideosa(%d): Taso=%d Säde=%s Pituus=%s Keskipiste=[%s,%s] Päätep.=[%"
+"0.3f,%0.3f K%0.3f] [%0.3f,%0.3f K%0.3f]"
+
+#: ../bin/tcornu.c:497
+#, fuzzy
+msgid "Cornu Track"
+msgstr "Kaareva raide"
+
+#: ../bin/tcornu.c:1025
+#, fuzzy
+msgid "Merge Cornu"
+msgstr "Yhdistä kaarteet"
+
+#: ../bin/tcurve.c:243
+#, fuzzy, c-format
+msgid "Helix: turns=%ld len=%0.2f grade=%0.1f%% sep=%0.2f"
+msgstr "Helix: Kierroksia=%ld Pituus=%s Nousukulma=%0.1f%% Korkeusero=%s"
+
+#: ../bin/tcurve.c:249
+#, fuzzy, c-format
+msgid "Helix: turns=%ld len=%0.2f"
+msgstr "Helix: Kierroksia=%ld Pituus=%s"
+
+#: ../bin/tcurve.c:365 ../bin/tcurve.c:367 ../bin/tease.c:520
+#: ../bin/tease.c:522 ../bin/tstraigh.c:86 ../bin/tstraigh.c:88
+msgid "Z"
+msgstr "Z"
+
+#: ../bin/tcurve.c:373
+msgid "Angular Length"
+msgstr "Kulma"
+
+#: ../bin/tcurve.c:553
+#, c-format
+msgid ""
+"Helix Track(%d): Layer=%d Radius=%s Turns=%ld Length=%s Center=[%s,%s] EP=[%"
+"0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A%0.3f]"
+msgstr ""
+"Helix(%d): Taso=%d Säde=%s Kierr.=%ld Pituus=%s Keskip.=[%s,%s] Päätep.=[%"
+"0.3f,%0.3f K%0.3f] [%0.3f,%0.3f K%0.3f]"
+
+#: ../bin/tcurve.c:563
+#, c-format
+msgid ""
+"Curved Track(%d): Layer=%d Radius=%s Length=%s Center=[%s,%s] EP=[%0.3f,%"
+"0.3f A%0.3f] [%0.3f,%0.3f A%0.3f]"
+msgstr ""
+"Kaareva raideosa(%d): Taso=%d Säde=%s Pituus=%s Keskipiste=[%s,%s] Päätep.=[%"
+"0.3f,%0.3f K%0.3f] [%0.3f,%0.3f K%0.3f]"
+
+#: ../bin/tcurve.c:640
+msgid "Helix Track"
+msgstr "Helix raide"
+
+#: ../bin/tcurve.c:646
+msgid "Curved Track"
+msgstr "Kaareva raideosa"
+
+#: ../bin/tcurve.c:1011
+msgid "Merge Curves"
+msgstr "Yhdistä kaarteet"
+
+#: ../bin/tcurve.c:1078
+msgid "Drag to change angle or create tangent"
+msgstr "Raahaa muuttaaksesi kulmaa"
+
+#: ../bin/tcurve.c:1111 ../bin/tcurve.c:1143
+msgid "Curved "
+msgstr "Kaareva "
+
+#: ../bin/tcurve.c:1117
+msgid "Tangent "
+msgstr "Tangentti "
+
+#: ../bin/tcurve.c:1126
+#, c-format
+msgid "Tangent track: Length %s Angle %0.3f"
+msgstr "Tangentti raide: Pituus %s Kulma %0.3f"
+
+#: ../bin/tcurve.c:1148
+#, c-format
+msgid "Curved: Radius=%s Length=%s Angle=%0.3f"
+msgstr "Kaari: Säde=%s Pituus=%s Kulma=%0.3f"
+
+#: ../bin/tease.c:527
+msgid "l0"
+msgstr "l0"
+
+#: ../bin/tease.c:528
+msgid "l1"
+msgstr "l1"
+
+#: ../bin/tease.c:570
+#, c-format
+msgid ""
+"Joint Track(%d): Layer=%d Length=%0.3f EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A"
+"%0.3f]"
+msgstr ""
+"Yhdysraide(%d): Taso=%d Pituus=%0.3f Päätep.=[%0.3f,%0.3f K%0.3f] [%0.3f,%"
+"0.3f K%0.3f]"
+
+#: ../bin/tease.c:615
+msgid "Easement Track"
+msgstr "Kaarreloivennus"
+
+#: ../bin/tease.c:1235
+msgid "Merge Easements"
+msgstr "Yhdistä kaarreloivennukset"
+
+#: ../bin/tease.c:1300
+msgid "Split Easement Curve"
+msgstr "Pilko kaarreloivennus"
+
+#: ../bin/textnoteui.c:214
+#, fuzzy, c-format
+msgid "Note: Layer=%d %-.80s"
+msgstr "(%d): Taso=%d %s"
+
+#: ../bin/textnoteui.c:225
+#, fuzzy
+msgid "Update comment"
+msgstr "Kumoa edellinen komento"
+
+#: ../bin/textnoteui.c:237
+msgid "Replace this text with your note"
+msgstr "Korvaa tämä teksti muistiinpanollasi"
+
+#: ../bin/textnoteui.c:241
+#, fuzzy
+msgid "Create Text Note"
+msgstr "Luo teksti"
+
+#: ../bin/track.c:1329
+msgid "Move Objects Above"
+msgstr "Siirrä objekteja ylemmäs"
+
+#: ../bin/track.c:1349
+msgid "Mode Objects Below"
+msgstr "Siirrä objekteja alemmas"
+
+#: ../bin/track.c:1640
+msgid "Audit"
+msgstr "Tarkasta"
+
+#: ../bin/track.c:1929
+#, c-format
+msgid "%d Track(s) loosened"
+msgstr "%d raidetta irroitettu"
+
+#: ../bin/track.c:1936
+msgid "No tracks loosened"
+msgstr "Yhtään raidetta ei irroitettu"
+
+#: ../bin/track.c:1946 ../bin/track.c:1950
+#, c-format
+msgid "Connecting a non-track(%d) to (%d)"
+msgstr "Muun kuin raideosan (%d) yhdistäminen raiteeseen (%d)"
+
+#: ../bin/track.c:2005
+msgid "Join Abutting Tracks"
+msgstr "Yhdistä vastakkaiset raideosat"
+
+#: ../bin/track.c:2280 ../bin/track.c:2315
+msgid "Inside turnout track"
+msgstr ""
+
+#: ../bin/track.c:2298
+#, fuzzy, c-format
+msgid "Curve: Length=%s Radius=%0.3f Arc=%0.3f"
+msgstr "Pituus = %0.3f Kulma = %0.3f"
+
+#: ../bin/track.c:2321 ../bin/track.c:2379 ../bin/tstraigh.c:568
+#, c-format
+msgid "Straight: Length=%s Angle=%0.3f"
+msgstr "Suora: Pituus=%s Kulma=%0.3f"
+
+#: ../bin/trknote.c:60
+#, fuzzy
+msgid "Comment"
+msgstr "Sisältö"
+
+#: ../bin/trknote.c:61
+#, fuzzy
+msgid "Link"
+msgstr "Viiva"
+
+#: ../bin/trknote.c:61 ../../../../build/work/app/bin/bllnhlp.c:101
+msgid "Weblink"
+msgstr ""
+
+#: ../bin/trknote.c:638 ../../../../build/work/app/bin/bllnhlp.c:108
+msgid "Place a note on the layout"
+msgstr "Lisää muistiinpano ratasuunnitelmaan"
+
+#: ../bin/trknote.c:652
+msgid "New Note"
+msgstr "Uusi muistiinpano"
+
+#: ../bin/trknote.c:708
+#, fuzzy
+msgid "Add notes"
+msgstr "Lisää tulostin"
+
+#: ../bin/tstraigh.c:236
+#, c-format
+msgid ""
+"Straight Track(%d): Layer=%d Length=%s EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A"
+"%0.3f]"
+msgstr ""
+"Suora raideosa(%d): Taso=%d Pituus=%s Päätep.=[%0.3f,%0.3f K%0.3f] [%0.3f,%"
+"0.3f K%0.3f]"
+
+#: ../bin/tstraigh.c:481
+msgid "Extending Straight Track"
+msgstr "Jatketaan suoraa raidetta"
+
+#: ../bin/tstraigh.c:561
+msgid "Straight "
+msgstr "Suora "
+
+#: ../wlib/gtklib/filesel.c:94
+#, fuzzy
+msgid "Save format:"
+msgstr "Sivun muotoilu"
+
+#: ../wlib/gtklib/filesel.c:187
+msgid "Image files"
+msgstr ""
+
+#: ../wlib/gtklib/font.c:281
+msgid "Font Select"
+msgstr "Kirjasimen valinta"
+
+#: ../wlib/gtklib/help.c:83
+msgid "&Contents"
+msgstr "Sisältö"
+
+#: ../wlib/gtklib/help.c:84
+msgid "Co&mmand Context help"
+msgstr ""
+
+#: ../wlib/gtklib/ixhelp.c:243
+msgid "Home"
+msgstr "Aloitussivu"
+
+#: ../wlib/gtklib/ixhelp.c:247
+#, fuzzy
+msgid "Contents"
+msgstr "Sisältö"
+
+#: ../wlib/gtklib/menu.c:541
+msgid "<Empty List>"
+msgstr ""
+
+#: ../wlib/gtklib/notice.c:101 ../wlib/mswlib/mswmisc.c:2102
+#: ../wlib/mswlib/mswmisc.c:2145
+msgid "Warning"
+msgstr ""
+
+#: ../wlib/gtklib/notice.c:106 ../wlib/mswlib/mswmisc.c:2107
+msgid "Error"
+msgstr "Virhe"
+
+#: ../wlib/gtklib/text.c:300
+#, c-format
+msgid "%d of %d"
+msgstr ""
+
+#: ../wlib/gtklib/wpref.c:114
+#, c-format
+msgid ""
+"The required configuration files could not be located in the expected "
+"location.\n"
+"\n"
+"Usually this is an installation problem. Make sure that these files are "
+"installed in either \n"
+" %s/share/xtrkcad or\n"
+" /usr/lib/%s or\n"
+" /usr/local/lib/%s\n"
+"If this is not possible, the environment variable %s must contain the name "
+"of the correct directory."
+msgstr ""
+"Tarvittavia asetustiedostoja ei löydy oletetuista hakemistoista.\n"
+"\n"
+"Yleensä tämä johtuu virheellisestä asennuksesta. Varmista että nämä "
+"tiedostot on asennettu johonkin seuraavista hakemistoista:\n"
+" %s/share/xtrkcad\n"
+" /usr/lib/%s\n"
+" /usr/local/lib/%s\n"
+"Jos tämä ei ole mahdollista, täytyy ympäristömuuttujan %s sisältää oikean "
+"hakemiston nimi."
+
+#: ../wlib/gtklib/wpref.c:148 ../wlib/gtklib/wpref.c:193
+msgid "HOME is not set"
+msgstr "HOME ympäristömuuttujaa ei ole asetettu"
+
+#: ../wlib/gtklib/wpref.c:148 ../wlib/gtklib/wpref.c:157
+#: ../wlib/gtklib/wpref.c:193
+msgid "Exit"
+msgstr "Poistu"
+
+#: ../wlib/gtklib/wpref.c:156
+#, c-format
+msgid "Cannot create %s"
+msgstr "%s luonti ei onnistu."
+
+#: ../wlib/mswlib/backgnd.c:103
+msgid "Image file is invalid or cannot be read."
+msgstr ""
+
+#: ../wlib/mswlib/mswmenu.c:886
+msgid "Ctrl+"
+msgstr ""
+
+#: ../wlib/mswlib/mswmenu.c:891
+msgid "Alt+"
+msgstr ""
+
+#: ../wlib/mswlib/mswmenu.c:896
+msgid "Shift+"
+msgstr ""
+
+#: ../wlib/mswlib/mswmenu.c:902
+#, fuzzy
+msgid "Space"
+msgstr "Väli"
+
+#: ../wlib/mswlib/mswmisc.c:190
+msgid "All image files"
+msgstr ""
+
+#: ../wlib/mswlib/mswmisc.c:192
+msgid "GIF files (*.gif)"
+msgstr ""
+
+#: ../wlib/mswlib/mswmisc.c:194
+msgid "JPEG files (*.jpeg,*.jpg)"
+msgstr ""
+
+#: ../wlib/mswlib/mswmisc.c:196
+msgid "PNG files (*.png)"
+msgstr ""
+
+#: ../wlib/mswlib/mswmisc.c:198
+msgid "TIFF files (*.tiff, *.tif)"
+msgstr ""
+
+#: ../wlib/mswlib/mswmisc.c:200
+msgid "All files (*)"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:9
+#, c-format
+msgid ""
+"MSG_CANT_PLACE_FROGPOINTS\tFrog|Points cannot be placed on a turnout, circle "
+"or helix.\tA %s cannot be placed on a turnout, circle or helix."
+msgstr ""
+"MSG_CANT_PLACE_FROGPOINTS\tRieteyskappale|kielien päät ei voi olla "
+"ympyräradalla, helixissä tai palaraiteella\t%s ei voi olla ympyräradalla, "
+"helixissä tai palaraiteella."
+
+#: ../../../../build/work/app/help/messages.h:10
+#, fuzzy
+msgid ""
+"MSG_SEL_TRK_FROZEN\tA frozen layer contains selected track. Command cannot "
+"be executed."
+msgstr ""
+"MSG_SEL_TRK_FROZEN\tValittu raide on jäädytetyllä tasolla...\tValittu raide "
+"on jäädytetyllä tasolla.\n"
+"Komentoa ei voida suorittaa."
+
+#: ../../../../build/work/app/help/messages.h:11
+msgid "MSG_HELIX_TURNS_GTR_0\tA Helix must have one or more loops of track."
+msgstr "MSG_HELIX_TURNS_GTR_0\tHelixissä on oltava vähintään yksi ratakierros."
+
+#: ../../../../build/work/app/help/messages.h:12
+msgid ""
+"MSG_LARGE_FONT\tA large font has been selected....\tA large font has been "
+"selected.\n"
+"Large fonts may a take a while to load.\n"
+"\n"
+"Do you wish to continue?"
+msgstr ""
+"MSG_LARGE_FONT\tSuurikokoinen kirjasin valittu...\tSuurikokoinen kirjasin "
+"valittu.\n"
+"Suurien kirjasinten lataaminen saattaa kestää kauan.\n"
+"\n"
+"Haluatko jatkaa?"
+
+#: ../../../../build/work/app/help/messages.h:13
+msgid ""
+"MSG_TODSGN_DESC_NONBLANK\tAll description fields present in the Turnout..."
+"\tAll description fields present in the Turnout\n"
+"Designer must contain appropriate information.\n"
+"Correct inappropriate values and try again."
+msgstr ""
+"MSG_TODSGN_DESC_NONBLANK\tRaideosien Suunnittelu -dialogin kaikissa "
+"kentissä...\tRaideosien Suunnittelu -dialogin kaikissa kentissä\n"
+"on oltava asianmukaiset arvot.\n"
+"Korjaa arvot ja kokeile uudelleen."
+
+#: ../../../../build/work/app/help/messages.h:14
+msgid ""
+"MSG_GROUP_NONBLANK\tAll fields listed in the Group dialog must contain "
+"data....\tAll fields listed in the Group dialog must contain data.\n"
+"Please enter missing values and try again."
+msgstr ""
+"MSG_GROUP_NONBLANK\tKaikki kentät ryhmittelyikkunassa ovat pakollisia..."
+"\tKaikki kentät ryhmittelyikkunassa ovat pakollisia.\n"
+"Syötä puuttuvat arvot ja kokeile uudelleen."
+
+#: ../../../../build/work/app/help/messages.h:15
+msgid ""
+"MSG_TODSGN_VALUES_GTR_0\tAll values specified in the Turnout Designer must "
+"be...\tAll values specified in the Turnout Designer must be\n"
+"greater than 0. Correct inappropriate values and try again."
+msgstr ""
+"MSG_TODSGN_VALUES_GTR_0\tRaideosien Suunnittelussa annettujen arvojen..."
+"\tRaideosien Suunnittelussa annettujen arvojen on\n"
+"oltava suurempia kuin 0. Korjaa arvot ja yritä uudelleen."
+
+#: ../../../../build/work/app/help/messages.h:16
+#, fuzzy
+msgid "MSG_CURVE_OUT_OF_RANGE\tAngle must be between 0\\u00B0 and 360\\u00B0."
+msgstr "MSG_CURVE_OUT_OF_RANGE\tKulman täytyy olla 0° ja 360° välillä."
+
+#: ../../../../build/work/app/help/messages.h:17
+msgid ""
+"MSG_TODSGN_CORNU_TOO_COMPLEX\tThe curves created by the Turnout Designer for "
+"a cornu curve have more than 128 segments....\tThe curves created by the "
+"Turnout Designer for a cornu curve have more than 128 segments.\n"
+"Try adjusting the end angles and radii to be closer in values."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:18
+#, c-format
+msgid ""
+"MSG_CUSTMGM_DELETE_CONFIRM\tAre you sure you want to delete the NNN "
+"definition(s)?\tAre you sure you want to delete the\n"
+"%d definition(s)?"
+msgstr ""
+"MSG_CUSTMGM_DELETE_CONFIRM\tHaluatko varmasti poistaa NNN kohdetta?"
+"\tHaluatko varmasti poistaa %d kohdetta?"
+
+#: ../../../../build/work/app/help/messages.h:19
+msgid "MSG_WBITMAP_FAILED\tBitmap create or write function failed."
+msgstr "MSG_WBITMAP_FAILED\tBitmap kuvan luonti tai kirjoitus epäonnistui."
+
+#: ../../../../build/work/app/help/messages.h:20
+msgid "MSG_BITMAP_TOO_LARGE\tBitmap is too large."
+msgstr "MSG_BITMAP_TOO_LARGE\tBitmap on liian suuri."
+
+#: ../../../../build/work/app/help/messages.h:21
+msgid "MSG_CHANGE_ELEV_MODE\tCannot change elevation mode."
+msgstr "MSG_CHANGE_ELEV_MODE\tKorkeustason muutos ei onnistu."
+
+#: ../../../../build/work/app/help/messages.h:22
+msgid ""
+"MSG_GRID_ENABLE_SPACE_GTR_0\tCannot Enable Grid; spacing must be greater "
+"than 0"
+msgstr ""
+"MSG_GRID_ENABLE_SPACE_GTR_0\tVälin on oltava suurempi kuin 0, jos ruudukko "
+"on käytössä"
+
+#: ../../../../build/work/app/help/messages.h:23
+msgid "MSG_LAYER_FREEZE\tCannot freeze current layer"
+msgstr "MSG_LAYER_FREEZE\tAktiivista tasoa ei voi jäädyttää"
+
+#: ../../../../build/work/app/help/messages.h:24
+msgid ""
+"MSG_CANT_GROUP_BUMPER1\tCannot Group Bumper Track. The track has been "
+"unselected."
+msgstr ""
+"MSG_CANT_GROUP_BUMPER1\tPäätepuskinta ei voi liittää ryhmään. Raideosan "
+"valinta on poistettu."
+
+#: ../../../../build/work/app/help/messages.h:25
+msgid "MSG_CANNOT_GROUP_TRACK\tCannot Group selected track."
+msgstr "MSG_CANNOT_GROUP_TRACK\tValittua raideosaa ei voida ryhmitellä."
+
+#: ../../../../build/work/app/help/messages.h:26
+msgid "MSG_LAYER_HIDE\tCannot hide current layer"
+msgstr "MSG_LAYER_HIDE\tAktiivista tasoa ei voi piilottaa"
+
+#: ../../../../build/work/app/help/messages.h:27
+#, fuzzy
+msgid "MSG_LAYER_MODULE\tCannot turn current layer into a Module"
+msgstr "MSG_LAYER_HIDE\tAktiivista tasoa ei voi piilottaa"
+
+#: ../../../../build/work/app/help/messages.h:28
+msgid "MSG_JOIN_EASEMENTS\tCannot Join; Easements do not align or abut."
+msgstr ""
+"MSG_JOIN_EASEMENTS\tEi voi yhdistää; Kaarreloivennukset eivät ole kohdakkain."
+
+#: ../../../../build/work/app/help/messages.h:29
+#, c-format
+msgid ""
+"MSG_TRK_ALREADY_CONN\tFirst|Second track is already connected.\tCannot Join; "
+"%s track is already connected."
+msgstr ""
+"MSG_TRK_ALREADY_CONN\tEnsimmäinen|Toinen raide on jo liitetty.\tEi voida "
+"liittää; %s raide on jo liitetty."
+
+#: ../../../../build/work/app/help/messages.h:30
+msgid "MSG_JOIN_TURNTABLE\tCannot join from a turntable, try to a turntable"
+msgstr ""
+"MSG_CANNOT_CHANGE\tKääntöpöydästä raiteeseen ei voi yhdistää. Kokeile "
+"raiteesta kääntöpöytään."
+
+#: ../../../../build/work/app/help/messages.h:31
+#, fuzzy
+msgid "MSG_JOIN_CORNU_SAME\tCannot Join; Selected endpoints are on same track."
+msgstr ""
+"MSG_JOIN_SAME\tEi voi liittää; valitut päätepisteet ovat samassa raideosassa."
+
+#: ../../../../build/work/app/help/messages.h:32
+msgid "MSG_JOIN_SAME\tCannot Join; Selected endpoints are on same track."
+msgstr ""
+"MSG_JOIN_SAME\tEi voi liittää; valitut päätepisteet ovat samassa raideosassa."
+
+#: ../../../../build/work/app/help/messages.h:33
+msgid ""
+"MSG_SELECTED_TRACKS_PARALLEL\tCannot Join; Selected tracks are parallel."
+msgstr ""
+"MSG_SELECTED_TRACKS_PARALLEL\tEi voida liittää; Valitut raiteet ovat "
+"samansuuntaiset."
+
+#: ../../../../build/work/app/help/messages.h:34
+#, c-format
+msgid ""
+"MSG_PRMFIL_OPEN_NEW\tCannot open New Parameter File: FILENAME\tCannot open "
+"New Parameter File: %s"
+msgstr ""
+"MSG_PRMFIL_OPEN_NEW\tUuden parametritiedoston TIEDOSTONIMI avaaminen ei "
+"onnistu\tUuden parametritiedoston %s avaaminen ei onnistu"
+
+#: ../../../../build/work/app/help/messages.h:35
+msgid "MSG_LAYER_SEL_FROZEN\tCannot select a frozen layer"
+msgstr "MSG_LAYER_SEL_FROZEN\tJäädytettyä tasoa ei voi valita"
+
+#: ../../../../build/work/app/help/messages.h:36
+msgid ""
+"MSG_GRID_SHOW_SPACE_GTR_0\tCannot Show Grid; spacing must be greater than 0"
+msgstr ""
+"MSG_GRID_SHOW_SPACE_GTR_0\tVälin on oltava suurempi kuin 0, jos ruudukko "
+"näytetään"
+
+#: ../../../../build/work/app/help/messages.h:37
+#, c-format
+msgid "MSG_CANT_SPLIT_TRK\tCannot split TYPE track\tCannot split %s track"
+msgstr "MSG_CANT_SPLIT_TRK\tRAIDETYYPPI: Ei voi pilkkoa\t%s: Ei voi pilkkoa"
+
+#: ../../../../build/work/app/help/messages.h:38
+#, c-format
+msgid ""
+"MSG_CUSTMGM_CANT_WRITE\tCannot write to parameter file: FILENAME\tCannot "
+"write to parameter file: %s"
+msgstr ""
+"MSG_CUSTMGM_CANT_WRITE\tEi voida kirjoittaa parametritiedostoon: TIEDOSTONIMI"
+"\tEi voida kirjoittaa parametritiedostoon: %s"
+
+#: ../../../../build/work/app/help/messages.h:39
+msgid "MSG_CARIMP_DUP_INDEX\tCar Index number duplicated."
+msgstr "MSG_CARIMP_DUP_INDEX\tKaksi samaa indeksiä löydetty."
+
+#: ../../../../build/work/app/help/messages.h:40
+msgid ""
+"MSG_CONN_PARAMS_TOO_SMALL\tConnection parameters reset to minimum values."
+msgstr ""
+"MSG_CONN_PARAMS_TOO_SMALL\tLiitosparametrit palautettu pienimpiin arvoihinsa."
+
+#: ../../../../build/work/app/help/messages.h:41
+#, fuzzy
+msgid "MSG_CONN_PARAMS_TOO_BIG\tConnection parameters reset to maximum values."
+msgstr ""
+"MSG_CONN_PARAMS_TOO_SMALL\tLiitosparametrit palautettu pienimpiin arvoihinsa."
+
+#: ../../../../build/work/app/help/messages.h:42
+msgid "MSG_CANT_PASTE\tCopy/Paste buffer is empty. There is nothing to Paste."
+msgstr ""
+"MSG_CANT_PASTE\tKopioi/liitä -puskuri on tyhjä. Ei ole mitään liitettävää."
+
+#: ../../../../build/work/app/help/messages.h:43
+msgid ""
+"MSG_TODSGN_CROSSOVER_TOO_SHORT\tCrossover length is too short. Correct..."
+"\tCrossover length is too short. Correct\n"
+"inappropriate value(s) and try again."
+msgstr ""
+"MSG_TODSGN_CROSSOVER_TOO_SHORT\tSovitettu raideristeys on liian lyhyt. "
+"Tarkasta...\tSovitettu raideristeys on liian lyhyt.\n"
+"Tarkasta arvot ja kokeile uudelleen."
+
+#: ../../../../build/work/app/help/messages.h:44
+msgid "MSG_CURVE_TOO_LARGE\tCurved track is too large."
+msgstr "MSG_CURVE_TOO_LARGE\tKaareva raide on liian suuri."
+
+#: ../../../../build/work/app/help/messages.h:45
+msgid ""
+"MSG_TODSGN_REPLACE\tDefinition name is already in use. Saving this..."
+"\tDefinition name is already in use. Saving this\n"
+"definition replaces the existing definition.\n"
+"\n"
+"Do you want to continue?"
+msgstr ""
+"MSG_TODSGN_REPLACE\tNimi on jo käytössä. Tallentamalla...\tNimi on jo "
+"käytössä. Tämän määrittelyn tallentaminen\n"
+"korvaa olemassa olevan saman nimisen määrittelyn.\n"
+"\n"
+"Haluatko jatkaa?"
+
+#: ../../../../build/work/app/help/messages.h:46
+msgid "MSG_SAVE_CHANGES\tDo you want to save the changes made to your Layout?"
+msgstr "MSG_SAVE_CHANGES\tHaluatko tallentaa ratasuunnitelman?"
+
+#: ../../../../build/work/app/help/messages.h:47
+msgid ""
+"MSG_CARIMP_DUP_COLUMNS\tDuplicate column headers found in Car Import file."
+msgstr ""
+"MSG_CARIMP_DUP_COLUMNS\tSama sarakeotsikko esiintyy useaan kertaan "
+"kalustotiedostossa."
+
+#: ../../../../build/work/app/help/messages.h:48
+msgid "MSG_EP_ON_PATH\tEndpoint already on Path."
+msgstr "MSG_EP_ON_PATH\tPäätepiste on jo reitillä."
+
+#: ../../../../build/work/app/help/messages.h:49
+#, c-format
+msgid ""
+"MSG_UPGRADE_VERSION1\tFile version %ld is greater than supported...\tFile "
+"version %ld is greater than supported\n"
+"version %d. You need to upgrade %s\n"
+"to at least version %s."
+msgstr ""
+"MSG_UPGRADE_VERSION1\tTiedoston versio %ld on suurempi kuin tuettu..."
+"\tTiedoston versio %ld on suurempi kuin tuettu versio %d\n"
+"%s täytyy päivittää vähintään versioon %s."
+
+#: ../../../../build/work/app/help/messages.h:50
+#, c-format
+msgid ""
+"MSG_UPGRADE_VERSION2\tFile version %ld is greater than supported...\tFile "
+"version %ld is greater than supported\n"
+"version %d. You need to upgrade your\n"
+"version of %s"
+msgstr ""
+"MSG_UPGRADE_VERSION2\tTiedoston versio %ld on suurempi kuin...\tTiedoston "
+"versio %ld on suurempi kuin tuettu versio %d.\n"
+"Versiosi %s:sta täytyy päivittää."
+
+#: ../../../../build/work/app/help/messages.h:51
+#, c-format
+msgid ""
+"MSG_LAYOUT_LINES_SKIPPED\tWhile processing Layout file %s, %d lines were "
+"skipped because they were not recognized."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:52
+#, fuzzy, c-format
+msgid ""
+"MSG_PARAM_UPGRADE_VERSION1\tFile version %ld is greater than supported..."
+"\tFile version %ld is greater than supported\n"
+"version %d. You need to upgrade %s\n"
+"to at least version %s."
+msgstr ""
+"MSG_UPGRADE_VERSION1\tTiedoston versio %ld on suurempi kuin tuettu..."
+"\tTiedoston versio %ld on suurempi kuin tuettu versio %d\n"
+"%s täytyy päivittää vähintään versioon %s."
+
+#: ../../../../build/work/app/help/messages.h:53
+#, fuzzy, c-format
+msgid ""
+"MSG_PARAM_UPGRADE_VERSION2\tFile version %ld is greater than supported..."
+"\tFile version %ld is greater than supported\n"
+"version %d. You need to upgrade your\n"
+"version of %s"
+msgstr ""
+"MSG_UPGRADE_VERSION2\tTiedoston versio %ld on suurempi kuin...\tTiedoston "
+"versio %ld on suurempi kuin tuettu versio %d.\n"
+"Versiosi %s:sta täytyy päivittää."
+
+#: ../../../../build/work/app/help/messages.h:54
+#, c-format
+msgid ""
+"MSG_PARAM_LINES_SKIPPED\tWhile processing Parameter file %s, %d lines were "
+"skipped because they were not recognized."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:55
+#, fuzzy
+msgid ""
+"MSG_MOVE_POINTS_OTHER_SIDE\tFrog angle prevents placement of points. Move "
+"points to opposite side of frog."
+msgstr ""
+"MSG_MOVE_POINTS_OTHER_SIDE\tVaihdekulma estää kielien päiden asettamisen..."
+"\tVaihdekulma estää kielien päiden asettamisen.\n"
+"Siirrä kielien päät risteyskappaleen toiselle puolelle."
+
+#: ../../../../build/work/app/help/messages.h:56
+msgid "MSG_NO_ROOM_BTW_TRKS\tInsufficient space between existing stall tracks."
+msgstr "MSG_NO_ROOM_BTW_TRKS\tRaiteiden välissä ei ole riittävästi tilaa."
+
+#: ../../../../build/work/app/help/messages.h:57
+#, c-format
+msgid ""
+"MSG_JOIN_DIFFER_ELEV\tJoining tracks with differing elevations (N.NNN)"
+"\tJoining tracks with differing elevations (%0.2f)"
+msgstr ""
+"MSG_JOIN_DIFFER_ELEV\tEri korkeuksilla olevien raiteiden liitos (N.NN)\tEri "
+"korkeuksilla olevien raiteiden liitos (%0.2f)."
+
+#: ../../../../build/work/app/help/messages.h:58
+#, fuzzy
+msgid "MSG_TRK_DESC_NOT_VISIBLE\tLabel description is hidden"
+msgstr "MSG_DESC_NOT_VISIBLE\tKuvaukset eivät ole näkyvissä"
+
+#: ../../../../build/work/app/help/messages.h:59
+msgid "MSG_DESC_NOT_VISIBLE\tLabel descriptions not visible"
+msgstr "MSG_DESC_NOT_VISIBLE\tKuvaukset eivät ole näkyvissä"
+
+#: ../../../../build/work/app/help/messages.h:60
+msgid "MSG_OBJECT_TOO_SHORT\tLength of object is too short."
+msgstr "MSG_OBJECT_TOO_SHORT\tPituus on liian lyhyt."
+
+#: ../../../../build/work/app/help/messages.h:61
+#, c-format
+msgid ""
+"MSG_PRINT_MAX_SIZE\tMaximum allowed page size is W x H\tMaximum allowed page "
+"size is %s x %s"
+msgstr ""
+"MSG_PRINT_MAX_SIZE\tSivun maksimikoko on L x K.\tSivun maksimikoko on %s x %"
+"s."
+
+#: ../../../../build/work/app/help/messages.h:62
+msgid ""
+"MSG_NO_PRINTER_SELECTED\tPlease select a printer from the Print Setup dialog."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:63
+#, c-format
+msgid ""
+"MSG_PRMFIL_NO_CONTENTS\tNew Parameter File has no CONTENTS line: FILENAME."
+"\tNew Parameter File has no CONTENTS line: %s"
+msgstr ""
+"MSG_PRMFIL_NO_CONTENTS\tUudessa parametritiedostossa ei ole CONTENTS riviä: "
+"TIEDOSTONIMI.\tUudessa parametritiedostossa ei ole CONTENTS riviä: %s"
+
+#: ../../../../build/work/app/help/messages.h:64
+msgid ""
+"MSG_NO_CARS\tNo Cars are defined for the current scale....\tNo Cars are "
+"defined for the current scale.\n"
+"\n"
+"Do you want to use the Car Inventory dialog?"
+msgstr ""
+"MSG_NO_CARS\tVaunuja tai vetureita ei ole määritelty tälle mittakaavalle..."
+"\tVaunuja tai vetureita ei ole määritelty tälle mittakaavalle.\n"
+"\n"
+"Haluatko avata kalustoluettelon?"
+
+#: ../../../../build/work/app/help/messages.h:65
+msgid ""
+"MSG_NO_CARPROTO\tNo Car Prototypes are defined....\tNo Car Prototypes are "
+"defined.\n"
+"Load a Prototype definition file using the\n"
+"Parameter Files dialog or create a Prototype\n"
+"definition using the Car Prototype dialog."
+msgstr ""
+"MSG_NO_CARPROTO\tEsikuvia ei ole määritelty...\tEsikuvia ei ole määritelty.\n"
+"Lataa esikuvien määrittely tiedosto Parametritiedostot -ikkunassa\n"
+"tai luo uusi esikuvan määrittely."
+
+#: ../../../../build/work/app/help/messages.h:66
+msgid "MSG_CARIMP_NO_DATA\tNo data present in Car Import file."
+msgstr "MSG_CARIMP_NO_DATA\tKalustotiedosto on tyhjä."
+
+#: ../../../../build/work/app/help/messages.h:67
+msgid "MSG_PRINT_NO_PAGES\tNo pages selected for printing."
+msgstr "MSG_PRINT_NO_PAGES\tYhtään sivua ei ole valittu tulostettavaksi."
+
+#: ../../../../build/work/app/help/messages.h:68
+msgid "MSG_NO_PATH_TO_EP\tNo path between Profile and selected endpoint."
+msgstr "MSG_NO_PATH_TO_EP\tValituun päätepisteeseen ei ole reittiä."
+
+#: ../../../../build/work/app/help/messages.h:69
+#, c-format
+msgid ""
+"MSG_PRMFIL_NO_MAP\tNo Parameter File Map for CONTENTS\tNo Parameter File Map "
+"for %s"
+msgstr ""
+"MSG_PRMFIL_NO_MAP\tParametritiedostolle \"NNN\" ei löydy \"Parameter File Map"
+"\" tietoa.\tParametritiedostolle \"%s\" ei löydy \"Parameter File Map\" "
+"tietoa."
+
+#: ../../../../build/work/app/help/messages.h:70
+msgid "MSG_NO_SELECTED_TRK\tNo track(s) selected!"
+msgstr "MSG_NO_SELECTED_TRK\tEi valittuja raiteita!"
+
+#: ../../../../build/work/app/help/messages.h:71
+msgid ""
+"MSG_NO_EMPTY_LAYER\tNo layer was found that has no contents, so the module "
+"can not be imported"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:72
+#, c-format
+msgid ""
+"MSG_NO_TURNOUTS_AVAILABLE\tNo Turnouts|Structures are available.\tNo %s are "
+"available."
+msgstr ""
+"MSG_NO_TURNOUTS_AVAILABLE\tRaideosat|Rakennukset eivät ole saatavilla.\t%s "
+"eivät ole saatavilla."
+
+#: ../../../../build/work/app/help/messages.h:73
+msgid ""
+"MSG_CARDESC_VALUE_ZERO\tNumeric values on the Car Description...\tNumeric "
+"values on the Car Description\n"
+"dialog must be greater than 0."
+msgstr ""
+"MSG_CARDESC_VALUE_ZERO\tVaunun/veturin määrittelyn numeeristen arvojen..."
+"\tVaunun/veturin määrittelyn numeeristen arvojen täytyy olla suurempia kuin "
+"0."
+
+#: ../../../../build/work/app/help/messages.h:74
+msgid "MSG_MOVE_OUT_OF_BOUNDS\tObject has moved beyond room boundaries."
+msgstr ""
+"MSG_MOVE_OUT_OF_BOUNDS\tObjekti on siirretty huoneen rajojen ulkopuolelle."
+
+#: ../../../../build/work/app/help/messages.h:75
+#, fuzzy
+msgid ""
+"MSG_PARALLEL_SEP_GTR_0\tParallel separation must be greater than 0, or the "
+"new guage must be different than the old."
+msgstr ""
+"MSG_PARALLEL_SEP_GTR_0\tRinnakkaisten raiteiden välin on oltava suurempi "
+"kuin 0."
+
+#: ../../../../build/work/app/help/messages.h:76
+msgid ""
+"MSG_CARPART_DUPNAME\tPart Number for this Manufacturer already exists...."
+"\tPart Number for this Manufacturer already exists.\n"
+"\n"
+"Do you want to update it?"
+msgstr ""
+"MSG_CARPART_DUPNAME\tTuotekoodi tälle valmistajalle on jo käytössä..."
+"\tTuotekoodi tälle valmistajalle on jo käytössä.\n"
+"\n"
+"Haluatko päivittää sen?"
+
+#: ../../../../build/work/app/help/messages.h:77
+#, c-format
+msgid ""
+"MSG_PLAYBACK_LISTENTRY\tPlayback: Cannot find list entry: NAME\tPlayback: "
+"Cannot find list entry: %s"
+msgstr ""
+"MSG_PLAYBACK_LISTENTRY\tMakrojen toisto: Luettelosta ei löydy: ...\tMakrojen "
+"toisto: Luettelosta ei löydy: %s"
+
+#: ../../../../build/work/app/help/messages.h:78
+#, c-format
+msgid ""
+"MSG_PLAYBACK_VERSION_UPGRADE\tPlayback file version %ld is...\tPlayback file "
+"version %ld is\n"
+"greater than supported version %d\n"
+"You need to upgrade your version of %s"
+msgstr ""
+"MSG_PLAYBACK_VERSION_UPGRADE\tMakro tiedoston versio %ld on...\tMakro "
+"tiedoston versio %ld on suurempi kuin tuettu versio %d\n"
+"Versiosi %s:sta täytyy päivittää."
+
+#: ../../../../build/work/app/help/messages.h:79
+#, c-format
+msgid ""
+"MSG_DOMOUSE_BAD_OP\tPlayback: unknown action NNN\tPlayback: unknown action %d"
+msgstr ""
+"MSG_DOMOUSE_BAD_OP\tToisto: tuntematon toimenpide NNN\tToisto: tuntematon "
+"toimenpide %d"
+
+#: ../../../../build/work/app/help/messages.h:80
+msgid "MSG_MOVE_POINTS_AWAY_CLOSE\tPoints are to close to frog; move away."
+msgstr ""
+"MSG_MOVE_POINTS_AWAY_CLOSE\tKielten päät ovat liian lähellä "
+"risteyskappaletta; siirrä kauemmaksi."
+
+#: ../../../../build/work/app/help/messages.h:81
+msgid "MSG_POLY_SHAPES_3_SIDES\tPoly shapes must have at least 3 sides."
+msgstr "MSG_POLY_SHAPES_3_SIDES\tMonikulmiossa on oltava vähintään 3 sivua."
+
+#: ../../../../build/work/app/help/messages.h:82
+msgid "MSG_POLY_MULTIPLE_SELECTED\tCan't delete multiple points at once"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:83
+msgid ""
+"MSG_CARPROTO_DUPNAME\tPrototype name already exists....\tPrototype name "
+"already exists.\n"
+"\n"
+"Do you want to update it?"
+msgstr ""
+"MSG_CARPROTO_DUPNAME\tSaman niminen esikuva on jo olemassa...\tSaman niminen "
+"esikuva on jo olemassa.\n"
+"\n"
+"Haluatko päivittää sen?"
+
+#: ../../../../build/work/app/help/messages.h:84
+msgid "MSG_RADIUS_GTR_0\tRadius must be greater than 0."
+msgstr "MSG_RADIUS_GTR_0\tSäteen on oltava suurempi kuin 0."
+
+#: ../../../../build/work/app/help/messages.h:85
+#, fuzzy
+msgid "MSG_RADIUS_GTR_10000\tRadius must be less than 10000."
+msgstr "MSG_RADIUS_GTR_0\tSäteen on oltava suurempi kuin 0."
+
+#: ../../../../build/work/app/help/messages.h:86
+msgid ""
+"MSG_RADIUS_TOO_BIG\tThe Circle or Helix will not fit within the layouts room "
+"parameters (Height and Width)."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:87
+#, c-format
+msgid ""
+"MSG_RESCALE_TOO_BIG\tRescaled tracks do not fit within layouts room "
+"parameters...\tRescaled tracks do not fit within layouts room parameters\n"
+"(Height and width). The layouts room parameters should be\n"
+"set to at least %s by %s."
+msgstr ""
+"MSG_RESCALE_TOO_BIG\tSkaalatut raiteet eivät mahdu ratasuunnitelmassa..."
+"\tSkaalatut raiteet eivät mahdu ratasuunnitelmassa\n"
+"määritellyn huoneen rajojen sisäpuolelle. Huoneen koon\n"
+"pitäisi olla vähintään %s x %s (korkeus x leveys)."
+
+#: ../../../../build/work/app/help/messages.h:88
+msgid ""
+"MSG_CARIMP_MISSING_COLUMNS\tRequired column headers missing from Car Import "
+"file."
+msgstr ""
+"MSG_CARIMP_MISSING_COLUMNS\tKalustotiedostosta puuttuu tarpeellisia "
+"sarakkeiden otsikoita."
+
+#: ../../../../build/work/app/help/messages.h:89
+#, c-format
+msgid ""
+"MSG_2ND_TRK_NOT_SEL_UNSEL\tSecond track must be selected|unselected\tSecond "
+"track must be %s."
+msgstr ""
+"MSG_2ND_TRK_NOT_SEL_UNSEL\tToisen raiteen on oltava valittu|valitsematta"
+"\tToisen raiteen on oltava %s."
+
+#: ../../../../build/work/app/help/messages.h:90
+msgid "MSG_OUT_OF_BOUNDS\tSelected page is out of bounds."
+msgstr "MSG_OUT_OF_BOUNDS\tSivu ylittää rajat."
+
+#: ../../../../build/work/app/help/messages.h:91
+msgid "MSG_SEL_POS_FIRST\tSelect position prior to entering Text."
+msgstr "MSG_SEL_POS_FIRST\tValitse sijainti ennen tekstin syöttämistä."
+
+#: ../../../../build/work/app/help/messages.h:92
+msgid ""
+"MSG_CARPROTO_BADSEGS\tSelected shapes must define a rectangular area ..."
+"\tSelected shapes must define a rectangular\n"
+"area with length greater than height."
+msgstr ""
+"MSG_CARPROTO_BADSEGS\tValittujen muotojen on määriteltävä nelikulmio..."
+"\tValittujen muotojen on määriteltävä nelikulmio,\n"
+"jonka pituus on korkeutta suurempi."
+
+#: ../../../../build/work/app/help/messages.h:93
+#, fuzzy
+msgid ""
+"MSG_TOO_FAR_APART_DIVERGE\tSelected tracks deviate too much or are too far "
+"apart from each other."
+msgstr ""
+"MSG_TOO_FAR_APART_DIVERGE\tValitut raiteet poikkeavat liikaa...\tValitut "
+"raiteet poikkeavat liikaa toisistaan\n"
+"tai ovat liian kaukana toisistaan."
+
+#: ../../../../build/work/app/help/messages.h:94
+msgid "MSG_COMMAND_DISABLED\tSpecified command disabled."
+msgstr "MSG_COMMAND_DISABLED\tTämä komento ei ole käytössä."
+
+#: ../../../../build/work/app/help/messages.h:95
+msgid "MSG_SPLIT_POS_BTW_MERGEPTS\tSplit position between Turnout Points"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:96
+msgid "MSG_SPLIT_PATH_NOT_UNIQUE\tSplit position not on unique path"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:97
+#, c-format
+msgid ""
+"MSG_CARIMP_MISSING_DIMS\tThe following car has no dimensions and a...\tThe "
+"following car has no dimensions and a\n"
+"Car Part description can not be found.\n"
+"\n"
+"%s\n"
+"\n"
+"Do you wish to continue importing other Cars?"
+msgstr ""
+"MSG_CARIMP_MISSING_DIMS\tVaunun tai veturin mitat ja kuvaus puuttuvat..."
+"\tVaunun tai veturin mitat ja kuvaus puuttuvat:\n"
+"\n"
+"%s\n"
+"\n"
+"Haluatko jatkaa muiden vaunujen ja veturien tuontia tiedostosta?"
+
+#: ../../../../build/work/app/help/messages.h:98
+#, c-format
+msgid ""
+"MSG_CARIMP_MISSING_PARTNO\tThe following car has no Part Number...\tThe "
+"following car has no Part Number\n"
+"\n"
+"%s\n"
+"\n"
+"Do you wish to continue importing other Cars?"
+msgstr ""
+"MSG_CARIMP_MISSING_PARTNO\tVaunun tai veturin tuotenumero puuttuu...\tVaunun "
+"tai veturin tuotenumero puuttuu:\n"
+"\n"
+"%s\n"
+"\n"
+"Haluatko jatkaa muiden vaunujen ja veturien tuontia tiedostosta?"
+
+#: ../../../../build/work/app/help/messages.h:99
+#, c-format
+msgid ""
+"MSG_CARIMP_IGNORED_COLUMN\tThe following column in the Car Import file will "
+"be ignored:...\tThe following column in the Car Import file will be "
+"ignored:\n"
+"\n"
+"%s"
+msgstr ""
+"MSG_CARIMP_IGNORED_COLUMN\tSeuraava kalustotiedoston sarake jätetään "
+"huomiotta:...\tSeuraava kalustotiedoston sarake jätetään huomiotta:\n"
+"\n"
+"%s"
+
+#: ../../../../build/work/app/help/messages.h:100
+#, fuzzy
+msgid ""
+"MSG_CANT_MOVE_UNDER_TRAIN\tThe position of a turnout or turntable cannot be "
+"changed while occupied by a train."
+msgstr ""
+"MSG_CANT_MOVE_UNDER_TRAIN\tVaihteita tai kääntöpöytää ei voi kääntää..."
+"\tVaihteita tai kääntöpöytää ei voi kääntää junan ollessa päällä."
+
+#: ../../../../build/work/app/help/messages.h:101
+msgid ""
+"MSG_STRUCT_NO_STRUCTS\tThere are no structures to choose from in the "
+"structure...\tThere are no structures to choose from in the structure\n"
+"selection list. Please check your SCALE, select the\n"
+"<File|Parameter Files> menu to load a Parameter File or\n"
+"create a new Structure with the Group command."
+msgstr ""
+"MSG_STRUCT_NO_STRUCTS\tRakennusten valintaluettelossa ei ole yhtään..."
+"\tRakennusten valintaluettelossa ei ole yhtään rakennusta\n"
+"valittavissa. Tarkasta mittakaava, valitse\n"
+"<Tiedosto|Parametritiedostot> valikosta ladataksesi\n"
+"parametritiedostoja tai luo uusi rakennus Ryhmittele komennolla."
+
+#: ../../../../build/work/app/help/messages.h:102
+#, fuzzy
+msgid ""
+"MSG_TURNOUT_NO_TURNOUT\tThere are no turnouts to choose from in the "
+"turnout...\tThere are no turnouts to choose from in the turnout\n"
+"selection list. Please check your SCALE, select the\n"
+"<Manage|Turnout Designer> menu to enter a new turnout\n"
+"or select the <File|Parameter Files> menu to load a\n"
+"Parameter File"
+msgstr ""
+"MSG_TURNOUT_NO_TURNOUT\tRaideosien valintaluettelossa ei ole yhtään..."
+"\tRaideosien valintaluettelossa ei ole yhtään raideosaa\n"
+"valittavissa. Tarkasta mittakaava, valitse\n"
+"<Muokkaa|Raideosien suunnittelu> valikko lisätäksesi uusi raideosa\n"
+"tai valitse <Tiedosto|Parametritiedostot> valikko ladataksesi\n"
+"parametritiedoston."
+
+#: ../../../../build/work/app/help/messages.h:103
+msgid "MSG_NO_UNCONN_EP\tThere are no unconnected end points for this track"
+msgstr "MSG_NO_UNCONN_EP\tRaiteessa ei ole liittämättömiä päätepisteitä"
+
+#: ../../../../build/work/app/help/messages.h:104
+msgid "MSG_PULL_FEW_SECTIONS\tThere are too few sections in this loop."
+msgstr ""
+"MSG_PULL_FEW_SECTIONS\tSilmukassa tai sivuraiteessa on liian vähän raideosia."
+
+#: ../../../../build/work/app/help/messages.h:105
+msgid "MSG_NO_REDO\tThere is nothing to redo!"
+msgstr "MSG_NO_REDO\tEi ole mitään uudelleen tehtävää!"
+
+#: ../../../../build/work/app/help/messages.h:106
+msgid "MSG_NO_UNDO\tThere is nothing to undo!"
+msgstr "MSG_NO_UNDO\tEi ole mitään kumottavaa!"
+
+#: ../../../../build/work/app/help/messages.h:107
+msgid "MSG_TOOMANYSEGSINGROUP\tToo many segments in Group."
+msgstr "MSG_TOOMANYSEGSINGROUP\tRyhmässä on liian monta lohkoa."
+
+#: ../../../../build/work/app/help/messages.h:108
+msgid "MSG_CANNOT_CHANGE\tTrack cannot be changed."
+msgstr "MSG_CANNOT_CHANGE\tRaidetta ei voi muuttaa."
+
+#: ../../../../build/work/app/help/messages.h:109
+msgid "MSG_POINT_INSIDE_TURNTABLE\tTrack endpoint is within turntable radius."
+msgstr ""
+"MSG_POINT_INSIDE_TURNTABLE\tRaiteen päätepiste on kääntöpöydän säteen "
+"sisäpuolella."
+
+#: ../../../../build/work/app/help/messages.h:110
+msgid ""
+"MSG_MOVE_POINTS_AWAY_NO_INTERSECTION\tTrack intersection not possible; move "
+"points away from frog."
+msgstr ""
+"MSG_MOVE_POINTS_AWAY_NO_INTERSECTION\tRaiteet eivät kohtaa. Siirrä kielten "
+"päät kauemmaksi risteyskappaleesta."
+
+#: ../../../../build/work/app/help/messages.h:111
+#, c-format
+msgid ""
+"MSG_TRK_TOO_SHORT\tTrack is too short by N.NNN\t%strack is too short by %0.3f"
+msgstr ""
+"MSG_TRK_TOO_SHORT\tRaide on N.NNN liian lyhyt\t%sraide on %0.3f liian lyhyt"
+
+#: ../../../../build/work/app/help/messages.h:112
+#, fuzzy, c-format
+msgid ""
+"MSG_RADIUS_LSS_EASE_MIN\tTrack radius (N.NNN) is smaller than easement "
+"minimum (N.NNN).\tTrack radius (%s) is smaller than easement minimum (%s)."
+msgstr ""
+"MSG_RADIUS_LSS_EASE_MIN\tRaiteen säde (N.NNN) on pienempi kuin "
+"kaarreloivennuksen pienin sallittu säde (N.NNN).\tRaiteen säde (%s) on "
+"pienempi kuin kaarreloivennuksen pienin sallittu säde (%s)."
+
+#: ../../../../build/work/app/help/messages.h:113
+msgid ""
+"MSG_CANT_MODIFY_FROZEN_TRK\tTracks in a frozen layer cannot be modified."
+msgstr ""
+"MSG_CANT_MODIFY_FROZEN_TRK\tJäädytetyllä tasolla olevia raiteita ei voi "
+"muokata."
+
+#: ../../../../build/work/app/help/messages.h:114
+#, fuzzy
+msgid "MSG_CANT_MODIFY_MODULE_TRK\tTracks in a module cannot be modified."
+msgstr ""
+"MSG_CANT_MODIFY_FROZEN_TRK\tJäädytetyllä tasolla olevia raiteita ei voi "
+"muokata."
+
+#: ../../../../build/work/app/help/messages.h:115
+msgid ""
+"MSG_SEGMENTS_DIFFER\tTurnout definition contains non-track segments...."
+"\tTurnout definition contains non-track segments.\n"
+"\n"
+"Do you want to include them in this update?"
+msgstr ""
+"MSG_SEGMENTS_DIFFER\tRaideosan määrittelyssä on osia, jotka eivät ole "
+"raiteita...\tRaideosan määrittelyssä on osia, jotka eivät ole raiteita.\n"
+"\n"
+"Haluatko sisällyttää ne?"
+
+#: ../../../../build/work/app/help/messages.h:116
+msgid "MSG_TURNTABLE_DIAM_GTR_0\tTurntable diameter must greater than 0."
+msgstr ""
+"MSG_TURNTABLE_DIAM_GTR_0\tKääntöpöydän halkaisijan on oltava suurempi kuin 0."
+
+#: ../../../../build/work/app/help/messages.h:117
+#, c-format
+msgid ""
+"MSG_UNDO_ASSERT\tUndo assertion failure %s:%d...\tUndo assertion failure %s:%"
+"d\n"
+"Val = %ld(%lx)\n"
+"%s\n"
+"Please report this error to the XTrackCAD project development team at "
+"SourceForge."
+msgstr ""
+"MSG_UNDO_ASSERT\tVirhe kumottaessa edellinen toiminto (%s:%d)...\tVirhe "
+"kumottaessa edellinen toiminto (%s:%d)\n"
+"Arvo = %ld(%lx)\n"
+"%s\n"
+"Ole ystävällinen ja ilmoita tästä virheestä XTrackCAD projektin "
+"kehitysryhmälle SourceForge.net:ssä."
+
+#: ../../../../build/work/app/help/messages.h:118
+#, fuzzy, c-format
+msgid ""
+"MSG_PROG_CORRUPTED\tCritical file damaged!...\tCritical file damaged!\n"
+"\n"
+"%s is corrupt.\n"
+"\n"
+"Please reinstall software."
+msgstr ""
+"MSG_PROG_CORRUPTED\tKriittinen tiedosto on vaurioitunut!...\tKriittinen "
+"tiedosto on vaurioitunut!\n"
+"\n"
+"%s on korruptoitunut.\n"
+"\n"
+"Asenna ohjelmisto uudelleen."
+
+#: ../../../../build/work/app/help/messages.h:119
+#, c-format
+msgid ""
+"MSG_ENTERED_STRING_TRUNCATED\tThe entered text is too long. Maximum length "
+"is %d."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:120
+#, c-format
+msgid "MSG_PT_IS_NOT_TRK\t[X Y] is not a track\t[%s %s] is not a track."
+msgstr "MSG_PT_IS_NOT_TRK\t[X Y] ei ole raide\t[%s %s] ei ole raide."
+
+#: ../../../../build/work/app/help/messages.h:121
+msgid ""
+"MSG_BITMAP_SIZE_WARNING\tYou have specified a large Bitmap....\tYou have "
+"specified a large Bitmap.\n"
+"\n"
+"Are you sure you want to continue?"
+msgstr ""
+"MSG_BITMAP_SIZE_WARNING\tOlet määritellyt suuren Bitmap kuvan...\tOlet "
+"määritellyt suuren Bitmap kuvan.\n"
+"\n"
+"Haluatko varmasti jatkaa?"
+
+#: ../../../../build/work/app/help/messages.h:122
+#, c-format
+msgid "Are you sure you want to delete these %d car(s)?"
+msgstr "Haluatko varmasti poistaa nämä %d vaunua/veturia?"
+
+#: ../../../../build/work/app/help/messages.h:123
+#, c-format
+msgid ""
+"Cannot open %s file:\n"
+"%s:%s"
+msgstr ""
+"Tiedostoa %s ei voida avata:\n"
+"%s: %s"
+
+#: ../../../../build/work/app/help/messages.h:124
+#, fuzzy, c-format
+msgid "Cannot create directory: %s - %s"
+msgstr "%s luonti ei onnistu."
+
+#: ../../../../build/work/app/help/messages.h:125
+#, fuzzy, c-format
+msgid "Cannot open directory: %s"
+msgstr ""
+"Tiedostoa %s ei voida avata:\n"
+"%s: %s"
+
+#: ../../../../build/work/app/help/messages.h:126
+#, c-format
+msgid "Path for deletion is not a directory: %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:127
+#, c-format
+msgid "Open failed for directory: %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:128
+#, c-format
+msgid "Can't add directory record %s to zip - %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:129
+#, c-format
+msgid "Can't add file record %s to zip at %s - %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:130
+#, fuzzy, c-format
+msgid "Can't create zip %s - %s"
+msgstr "%s luonti ei onnistu."
+
+#: ../../../../build/work/app/help/messages.h:131
+#, c-format
+msgid "Close failure for zip %s - %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:132
+#, c-format
+msgid "Rename failure for zip from %s to %s - %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:133
+#, c-format
+msgid "Open failure for zip %s - %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:134
+#, c-format
+msgid "Index failure for zip %s - %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:135
+#, c-format
+msgid "Open read file failure %s %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:136
+#, c-format
+msgid "Open file in zip failure %s %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:137
+#, c-format
+msgid "Unlink failed for: %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:138
+#, c-format
+msgid "Remove Directory failed for: %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:139
+#, c-format
+msgid "Cannot save archive to %s from directory: %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:140
+#, c-format
+msgid "Cannot save manifest file to %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:141
+#, fuzzy, c-format
+msgid "Cannot open manifest file %s"
+msgstr ""
+"Tiedostoa %s ei voida avata:\n"
+"%s: %s"
+
+#: ../../../../build/work/app/help/messages.h:142
+#, c-format
+msgid "Cannot unpack file: %s for file: %s in directory: %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:143
+#, fuzzy, c-format
+msgid "Cannot open file %s"
+msgstr ""
+"Tiedostoa %s ei voida avata:\n"
+"%s: %s"
+
+#: ../../../../build/work/app/help/messages.h:144
+#, c-format
+msgid "Cannot copy file %s into directory %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:145
+#, c-format
+msgid "Unrecognized Option: %s"
+msgstr "Tunnistamaton valinta: %s"
+
+#: ../../../../build/work/app/help/messages.h:146
+#, c-format
+msgid ""
+"End-Of-Line is unexpected in a quoted field.\n"
+"%s\n"
+"\n"
+"Do you want to continue reading the file?"
+msgstr ""
+"Odottamaton rivin loppu lainausmerkkien sisällä.\n"
+"%s\n"
+"\n"
+"Haluatko jatkaa tiedoston lukemista?"
+
+#: ../../../../build/work/app/help/messages.h:147
+#, c-format
+msgid ""
+"A comma was expected after this quoted field.\n"
+"%s\n"
+"\n"
+"Do you want to continue reading the file?"
+msgstr ""
+"Odotettiin pilkkua tämän kentän jälkeen.\n"
+"%s\n"
+"\n"
+"Haluatko jatkaa tiedoston lukemista?"
+
+#: ../../../../build/work/app/help/messages.h:148
+#, c-format
+msgid ""
+"Error \\\\\"%s\\\\\" occurred while writing %s.\n"
+"Please check disk space and system status."
+msgstr ""
+"Virhe \\\\\"%s\\\\\" tapahtui kirjoitettaessa %s.\n"
+"Tarkasta levytila ja järjestelmän tila."
+
+#: ../../../../build/work/app/help/messages.h:149
+#, fuzzy, c-format
+msgid ""
+"At least one path for the Turnout T%d does not\n"
+"terminate on an endpoint. Such a track cannot be grouped.\n"
+"The track has been unselected."
+msgstr ""
+"Ainakin yksi raideosan T%d reiteistä loppuu muuhun kuin\n"
+"päätepisteeseen. Tällaista raideosaa ei voi ryhmitellä.\n"
+"Raideosan valinta on poistettu."
+
+#: ../../../../build/work/app/help/messages.h:150
+msgid "inv-pathEndTrk on Path."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:151
+msgid "inv-pathStartTrk on Path"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:152
+#, c-format
+msgid "%s:%d- %s"
+msgstr "%s:%d- %s"
+
+#: ../../../../build/work/app/help/messages.h:153
+msgid "pathEndTrk not on Path."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:154
+msgid "pathStartTrk not on Path."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:155
+msgid ""
+"The tracks cannot be connected together.\n"
+"\n"
+"Try changing some tracks for a closer fit\n"
+"or increase the Connection Angle value on\n"
+"the Preferences dialog."
+msgstr ""
+"Raiteita ei voi yhdistää.\n"
+"\n"
+"Kokeile sovittaa raiteet paremmin keskenään\n"
+" tai kasvata liitoskulmaa ohjelman ominaisuuksista."
+
+#: ../../../../build/work/app/help/messages.h:156
+msgid ""
+"The tracks cannot be connected together.\n"
+"\n"
+"Try changing some tracks for a closer fit\n"
+"or increase the Connection Distance and\n"
+"Angle values on the Preferences dialog"
+msgstr ""
+"Raiteita ei voi yhdistää.\n"
+"\n"
+"Kokeile sovittaa raiteet paremmin keskenään\n"
+" tai kasvata liitoskulmaa ja liitosetäisyyttä ohjelman ominaisuuksista."
+
+#: ../../../../build/work/app/help/messages.h:157
+msgid ""
+"The tracks cannot be connected together.\n"
+"\n"
+"Try changing some tracks for a closer fit\n"
+"or increase the Connection Distance"
+msgstr ""
+"Raiteita ei voi yhdistää.\n"
+"\n"
+"Kokeile sovittaa raiteet paremmin keskenään\n"
+" tai kasvata liitosetäisyyttä ohjelman ominaisuuksista."
+
+#: ../../../../build/work/app/help/messages.h:158
+msgid ""
+"The first track for the Align\n"
+"Rotate command must be Selected."
+msgstr ""
+"Kohdistuskomennon ensimmäisen\n"
+"raideosan on oltava valittuna."
+
+#: ../../../../build/work/app/help/messages.h:159
+msgid ""
+"The second track for the Align\n"
+"Rotate command must be Unselected."
+msgstr ""
+"Kohdistuskomennon toisen raideosan\n"
+"on oltava valitsematon."
+
+#: ../../../../build/work/app/help/messages.h:160
+msgid "Too many selected tracks, drawing tracks as End Point."
+msgstr ""
+"Liian monta valittua raidetta. Piirretään raiteet pelkkinä päätepisteinä."
+
+#: ../../../../build/work/app/help/messages.h:161
+msgid "Select an endpoint between two tracks."
+msgstr "Valitse kahden raideosan välinen päätepiste."
+
+#: ../../../../build/work/app/help/messages.h:162
+msgid ""
+"According to values that have been entered the diverging\n"
+"track does not connect with the tangent track. Please\n"
+"check the values entered and try again. Check the angle\n"
+"is entered as a frog number or in degrees as specified\n"
+"by Angle Mode radio buttons."
+msgstr ""
+"Antamiesi arvojen perusteella, poikkeava ja suora\n"
+"raide eivät kohtaa.\n"
+"Tarkasta arvot ja kokeile uudelleen.\n"
+"Tarkasta myös onko kulma annettu risteysnumerona vai asteina."
+
+#: ../../../../build/work/app/help/messages.h:163
+msgid "Moved before the end of the turnout"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:164
+msgid ""
+"The Coupled Length must be greater than the Car Length,\n"
+"and the Coupler Length must be greater than 0."
+msgstr ""
+"Pituuden kytkimineen on oltava suurempi kuin vaunun/veturin pituus,\n"
+"ja kytkimen pituuden on oltava suurempi kuin 0."
+
+#: ../../../../build/work/app/help/messages.h:165
+msgid ""
+"The Car Length value must be greater\n"
+"than the Car Width value."
+msgstr "Pituuden on oltava leveyttä suurempi."
+
+#: ../../../../build/work/app/help/messages.h:166
+msgid ""
+"The specified Index is already in use.\n"
+"The Index will be updated to the next available value."
+msgstr ""
+"Määritelty indeksi on jo käytössä.\n"
+"Indeksi muutetaan seuraavaksi vapaaksi arvoksi."
+
+#: ../../../../build/work/app/help/messages.h:167
+msgid ""
+"You have changed values for this object.\n"
+"\n"
+"Are you sure you want to Close?"
+msgstr ""
+"Olet muuttanut tämän objektin arvoja.\n"
+"\n"
+"Haluatko varmasti sulkea?"
+
+#: ../../../../build/work/app/help/messages.h:168
+#, c-format
+msgid ""
+"File version %ld is lower than the minimum\n"
+"supported version %d. You need to update your\n"
+"layout file using an older version of %s"
+msgstr ""
+"Tiedoston versio %ld on pienempi kuin pienin tuettu versio %d\n"
+"Ratasuunnitelmasi täytyy päivittää käyttäen vanhempaa versiota %s:sta."
+
+#: ../../../../build/work/app/help/messages.h:169
+#, fuzzy, c-format
+msgid ""
+"File version %ld is lower than the minimum\n"
+"supported version %d.This parameter file will only work using an older "
+"version of %s"
+msgstr ""
+"Tiedoston versio %ld on pienempi kuin pienin tuettu versio %d\n"
+"Ratasuunnitelmasi täytyy päivittää käyttäen vanhempaa versiota %s:sta."
+
+#: ../../../../build/work/app/help/messages.h:170
+#, c-format
+msgid ""
+"%s cannot read the demo file:\n"
+"%s"
+msgstr ""
+"%s ei voi lukea demotiedostoa:\n"
+"%s"
+
+#: ../../../../build/work/app/help/messages.h:171
+#, c-format
+msgid "doDemo: bad number (%d)"
+msgstr "Demo: Virheellinen demon numero (%d)."
+
+#: ../../../../build/work/app/help/messages.h:172
+msgid "Playback TIMEEND without TIMESTART"
+msgstr "Toistossa TIMEEND ilman TIMESTART:ia"
+
+#: ../../../../build/work/app/help/messages.h:173
+#, c-format
+msgid ""
+"Unknown playback command (%d)\n"
+"%s"
+msgstr ""
+"Tuntematon toistokomento (%d)\n"
+"%s"
+
+#: ../../../../build/work/app/help/messages.h:174
+#, c-format
+msgid ""
+"Playback file version %ld is lower than the\n"
+"minimum supported version %d.\n"
+"You need to update your layout file using an\n"
+"older version of %s"
+msgstr ""
+"Tiedoston versio %ld on pienempi kuin pienin tuettu versio %d\n"
+"Ratasuunnitelmasi täytyy päivittää käyttäen vanhempaa versiota %s:sta."
+
+#: ../../../../build/work/app/help/messages.h:175
+#, c-format
+msgid "Scale index (%d) is not valid"
+msgstr "Mittakaavan indeksi (%d) on virheellinen."
+
+#: ../../../../build/work/app/help/messages.h:176
+#, c-format
+msgid ""
+"Scale %s is not valid\n"
+"Please check your %s.xtq file"
+msgstr ""
+"Mittakaava %s ei ole kelvollinen\n"
+"Tarkasta %s.xtq tiedostosi"
+
+#: ../../../../build/work/app/help/messages.h:177
+msgid "Cannot extend a helix"
+msgstr "Helixiä ei voida jatkaa"
+
+#: ../../../../build/work/app/help/messages.h:178
+msgid "Cannot trim a helix"
+msgstr "Helixiä ei voida lyhentää"
+
+#: ../../../../build/work/app/help/messages.h:179
+msgid "Ignore further audit notices?"
+msgstr "Sivuuta tarkastus huomautukset jatkossa?"
+
+#: ../../../../build/work/app/help/messages.h:180
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: ../../../../build/work/app/help/messages.h:181
+msgid "Audit Abort?"
+msgstr "Keskeytä tarkastus?"
+
+#: ../../../../build/work/app/help/messages.h:182
+msgid "Write Audit File?"
+msgstr "Kirjoita tarkastustiedosto?"
+
+#: ../../../../build/work/app/help/messages.h:183
+#, c-format
+msgid "checkTrackLength: Short track length = %0.3f"
+msgstr "Raideosan pituuden tarkistus: Pienin raideosan pituus = %0.3f"
+
+#: ../../../../build/work/app/help/messages.h:184
+#, c-format
+msgid "checkTrackLength: unknown type: %d"
+msgstr "Raideosan pituuden tarkistus: Tuntematon tyyppi: %d"
+
+#: ../../../../build/work/app/help/messages.h:185
+#, c-format
+msgid "connectTracks: T%d[%d] T%d[%d] d=%0.3f a=%0.3f"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:186
+#, c-format
+msgid "GetAngleAtPoint: bad type(%d) for T(%d)"
+msgstr "GetAngleAtPoint: virheellinen tyyppi (%d) raitelle T(%d)"
+
+#: ../../../../build/work/app/help/messages.h:187
+#, c-format
+msgid "joinTracks: invalid track type=%d"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:188
+#, c-format
+msgid "resolveIndex: T%d[%d]: T%d doesn\\\\'t exist"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:189
+msgid "Moved beyond the end of the track"
+msgstr "Siirretty päätepisteen taakse"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:9
+#, fuzzy
+msgid "Invokes online help for this dialog"
+msgstr "Avaa tämän dialogin ohjeen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:10
+msgid "Cancels this command"
+msgstr "Kumoaa edellisen komennon"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:11
+msgid "Closes the dialog"
+msgstr "Sulkee ikkunan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:12
+#, fuzzy
+msgid "About program dialog"
+msgstr "Tietoja -ikkuna"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:13
+#, fuzzy
+msgid "Move selected object to top"
+msgstr "Siirrä valittu objekti päällimmäiseksi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:14
+#, fuzzy
+msgid "Raise or lower all selected tracks"
+msgstr "Nosta tai laske valittuja raiteita"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:15
+msgid "Turn magnetic snap on or off"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:16
+#, fuzzy
+msgid "Move selected object to bottom"
+msgstr "Siirrä valittu objekti alimmaiseksi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:17
+msgid "Create a section of track for automation"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:18
+#, fuzzy
+msgid "Edit a block definition "
+msgstr "Luo uusi raideosan määrittely"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:19
+msgid "Create a new Car/Loco description"
+msgstr "Luo uusi veturin tai vaunun määrittely"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:20
+msgid "Manage your Car and Loco Inventory"
+msgstr "Hallinnoi vaunu- ja veturiluetteloa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:21
+msgid "Create track circle from center"
+msgstr "Piirrä ympyrärata keskipisteestä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:22
+msgid "Create fixed radius track circle"
+msgstr "Määriteltysäteinen ympyrärata"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:23
+msgid "Set Circle Track creation mode"
+msgstr "Aseta ympyräradan luonti komento"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:24
+msgid "Create track circle from tangent"
+msgstr "Piirrä ympyrärata kehältä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:25
+msgid "Removes elevation from Selected tracks"
+msgstr "Poista korkeusmääritykset valituista raiteista"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:26
+msgid "Copy objects to clipboard and duplicate them in exactly the same place"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:27
+msgid "Command Options dialog"
+msgstr "Komentojen asetukset"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:28
+msgid "Controls colors"
+msgstr "Valitse värit"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:29
+msgid "Connect two tracks"
+msgstr "Liitä kaksi raidetta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:30
+msgid "Create a control for layout automation"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:31
+#, fuzzy
+msgid "Select control element to create"
+msgstr "Valitse toinen yhdistettävä päätepiste"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:32
+msgid "Manage control elements"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:33
+#, fuzzy
+msgid "Set Convert mode"
+msgstr "Aseta kaarevan raiteen luonti komento"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:34
+msgid "Convert from Fixed Track to Cornu"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:35
+msgid "Convert from Cornu and Bezier to Fixed Track"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:36
+msgid "Copy selected objects to clipboard"
+msgstr "Kopioi valitut objektit leikepöydälle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:37
+#, fuzzy
+msgid "Create Cornu track"
+msgstr "Luo viivoja"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:38
+msgid "Create curved track from center"
+msgstr "Luo kaareva raideosa alkaen keskipisteestä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:39
+msgid "Create curved track from chord"
+msgstr "Luo kaareva raideosa päätepisteiden välille"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:40
+msgid "Create curved track from end-point"
+msgstr "Luo kaareva raideosa alkaen päätepisteestä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:41
+#, fuzzy
+msgid "Create Bezier track"
+msgstr "Luo helix raide"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:42
+msgid "Set Curve Track creation mode"
+msgstr "Aseta kaarevan raiteen luonti komento"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:43
+msgid "Create curved track from tangent"
+msgstr "Luo kaareva raideosa alkaen kehältä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:44
+msgid "Manipulate Custom designer entries"
+msgstr "Itse määriteltyjen raideosien, veturien ja vaunujen hallinta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:45
+msgid "Moves selected objects to clipboard"
+msgstr "Siirtää valitut objektit leikepöydälle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:46
+msgid "Delete objects"
+msgstr "Poista valitut objektit"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:47
+msgid "Playback demos"
+msgstr "Toista nauhoitettuja demoja"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:48
+msgid "Change Object Properties"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:49
+msgid "Change to properties mode"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:50
+msgid "Deselect all selected objects"
+msgstr "Poista valinnat kaikista objekteista"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:51
+msgid "Change Display parameters"
+msgstr "Muuta näyttöasetuksia"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:52
+msgid "Create benchwork"
+msgstr "Luo runkorakenne"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:53
+msgid "Create a box"
+msgstr "Luo nelikulmio"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:54
+msgid "Set Circle drawing command"
+msgstr "Aseta ympyrän piirto komento"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:55
+msgid "Create a circle"
+msgstr "Luo ympyrä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:56
+msgid "Draw a circle line from center"
+msgstr "Piirrä ympyrä keskipisteestä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:57
+msgid "Draw a fixed radius circle line"
+msgstr "Piirrä määriteltysäteinen ympyrä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:58
+msgid "Draw a circle line from tangent"
+msgstr "Piirrä ympyrä kehältä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:59
+msgid "Set Curve drawing command"
+msgstr "Aseta kaaren piirto komento"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:60
+msgid "Create a curved line"
+msgstr "Luo kaari"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:61
+msgid "Create a curved line from End"
+msgstr "Piirrä kaari päätepisteestä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:62
+msgid "Create a curved line from center"
+msgstr "Piirrä kaari keskipisteestä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:63
+msgid "Create a curved line from chord"
+msgstr "Piirrä kaari·päätepisteiden·välille"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:64
+msgid "Create a curved line from tangent"
+msgstr "Piirrä kaari kehältä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:65
+#, fuzzy
+msgid "Create a Bezier line"
+msgstr "Luo kaari"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:66
+msgid "Create a dimension line"
+msgstr "Luo mittajana"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:67
+msgid "Create a filled box"
+msgstr "Piirrä täytetty nelikulmio"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:68
+msgid "Create a filled circle"
+msgstr "Luo täytetty ympyrä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:69
+msgid "Draw a filled circle from center"
+msgstr "Piirrä täytetty ympyrä keskipisteestä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:70
+msgid "Draw a fixed radius filled circle"
+msgstr "Piirrä täytetty määriteltysäteinen ympyrä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:71
+msgid "Draw a filled circle from tangent"
+msgstr "Piirrä täytetty ympyrä kehältä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:72
+#, fuzzy
+msgid "Create a polygon"
+msgstr "Luo monikulmio"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:73
+msgid "Create a filled polygon"
+msgstr "Luo täytetty monikulmio"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:74
+msgid "Create a polyline"
+msgstr "Luo monikulmio"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:75
+msgid "Create a straight line"
+msgstr "Luo suora viiva"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:76
+msgid "Set Line drawing command"
+msgstr "Aseta suorien objektien piirto komento"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:77
+msgid "Set Shape drawing command"
+msgstr "Aseta muotojen piirto komento"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:78
+msgid "Draw table edge"
+msgstr "Piirrä pöydän reuna"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:79
+msgid "Easement menu"
+msgstr "Kaarreloivennuksen asetukset"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:81
+msgid "Generate a Parts List of selected objects"
+msgstr "Luo osaluettelo valituista objekteista"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:82
+msgid "Set Import/Export mode"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:83
+msgid "Export a .xti file"
+msgstr "Vie .xti tiedostoon"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:84
+msgid "Export a DXF file"
+msgstr "Vie DXF tiedostoon"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:86
+msgid "Flip selected objects"
+msgstr "Käännä valitut objektit annetun peilauslinjan mukaan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:87
+msgid "Adjust snap grid"
+msgstr "Muuta kohdistusruudukon asetuksia"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:88
+msgid "Enable snap grid"
+msgstr "Käytä kohdistusruudukkoa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:89
+msgid "Show snap grid"
+msgstr "Näytä kohdistusruudukko"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:90
+msgid "Create a structure from a Group of objects"
+msgstr "Luo rakennus valituista objekteista"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:91
+msgid "Create a hand-laid turnout"
+msgstr "Luo käsin aseteltu vaihde"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:92
+msgid "Create a track helix"
+msgstr "Luo helix raide (kierrenousu)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:93
+msgid "Import a .xti file"
+msgstr "Tuo .xti tiedosto"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:94
+#, fuzzy
+msgid "Import an .xti file as a Module"
+msgstr "Tuo .xti tiedosto"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:95
+msgid "Join two tracks"
+msgstr "Yhdistä kaksi raidetta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:96
+msgid "Join two lines or polylines"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:97
+msgid "Set Join mode"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:98
+msgid "Change Layers"
+msgstr "Muuta tasojen asetuksia"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:99
+msgid "Selects the current drawing layer"
+msgstr "Valitsee piirtotason"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:100
+msgid "Layout parameters"
+msgstr "Ratasuunnitelman asetukset"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:102
+#, fuzzy
+msgid "Show/Hide Map Window"
+msgstr "Näytä/piilota taso"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:103
+msgid "Modify or extend a track"
+msgstr "Muokkaa tai jatka raidetta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:104
+msgid "Change To modify mode"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:105
+msgid "Move selected objects"
+msgstr "Siirrä valittuja objekteja"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:106
+msgid "Move a label"
+msgstr "Siirrä merkintöjä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:107
+msgid "Move selected objects to current layer"
+msgstr "Siirrä valitut objektit nykyiselle tasolle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:109
+#, fuzzy
+msgid "Print a bitmap"
+msgstr "Tulosta bitmap tiedostoon"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:110
+#, fuzzy
+msgid "Pan or zoom the layout"
+msgstr "Sijoita vaunu tai veturi ratasuunnitelmaan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:111
+msgid "Change to zoom/pan mode"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:112
+msgid "Create a parallel track"
+msgstr "Luo rinnakkainen raide"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:113
+#, fuzzy
+msgid "Create a parallel line"
+msgstr "Luo rinnakkainen raide"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:114
+#, fuzzy
+msgid "Set Parallel mode"
+msgstr "Rinnakkainen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:115
+msgid "Register"
+msgstr "Rekisteröi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:116
+msgid "Copy objects from clipboard"
+msgstr "Liitä objektit leikepöydältä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:117
+msgid "Perferences dialog"
+msgstr "Ominaisuudet"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:118
+msgid "Display prices of turnouts, sectional tracks and structures"
+msgstr "Vaihteiden, palaraiteiden ja rakennusten hinnat"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:119
+msgid "Print the layout"
+msgstr "Tulosta ratasuunnitelma"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:120
+#, fuzzy
+msgid "Loads and unloads parameter files into/from toolbar"
+msgstr "Lataa tai poista parametritiedostoja käytöstä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:121
+msgid "Elevation Profile Command"
+msgstr "Muokkaa korkeusprofiilia"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:123
+msgid "Command recorder"
+msgstr "Komentojen nauhoitus"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:125
+msgid "Update selected Turnout and Structure definitions"
+msgstr "Päivitä valittujen vaihteiden ja rakennusten määrittelyt"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:126
+msgid "Rescale selected objects"
+msgstr "Muuta valittujen objektien mittakaavaa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:127
+msgid "Rotate selected object(s)"
+msgstr "Pyöritä valittuja objekteja"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:128
+msgid "Show a ruler"
+msgstr "Näytä viivain"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:129
+msgid "Select objects"
+msgstr "Valitse objekteja"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:130
+#, fuzzy
+msgid "Change To Select Mode"
+msgstr "Muuta mittakaavaa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:131
+msgid "Selects all objects on the layout"
+msgstr "Valitse kaikki ratasuunnitelman objektit"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:132
+msgid "Selects all objects in the current Layer"
+msgstr "Valitse kaikki nykyisen tason objektit"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:133
+msgid "Invert current selection"
+msgstr "Käänteinen valinta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:134
+msgid "Split a track"
+msgstr "Pilko raide"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:135
+msgid "Select stranded (unconnected) track pieces"
+msgstr "Valitse yksittäiset raiteet, joita ei ole liitetty toisiin raiteisiin"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:136
+msgid "Create a sensor (ie. a occupancy detector or a toggle switch)"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:137
+#, fuzzy
+msgid "Create a signal for train control"
+msgstr "Piirrä ympyrärata kehältä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:138
+msgid "Choose which commands are sticky"
+msgstr "Valitse mitkä komennot ovat pysyviä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:139
+msgid "Create straight track"
+msgstr "Luo suora raideosa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:140
+msgid "Place a structure on the layout"
+msgstr "Lisää rakennus"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:141
+#, fuzzy
+msgid "Create a switchmotor for turnout control"
+msgstr "Luo uuden rakennuksen (tai raideosan)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:142
+#, fuzzy
+msgid "Edit a switchmotor definition"
+msgstr "Luo uusi raideosan määrittely"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:143
+msgid "Enter text on the layout"
+msgstr "Lisää tekstiä ratasuunnitelmaan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:144
+#: ../../../../build/work/app/bin/bllnhlp.c:531
+msgid "Controls the size of the entered text"
+msgstr "Muuttaa syötettävän tekstin kokoa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:145
+msgid "Plain Text"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:146
+msgid "Tip of the Day window"
+msgstr "Näytä päivän vinkki"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:147
+msgid "Run Trains"
+msgstr "Aja junilla ratasuunnitelmassa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:148
+msgid "Change To Run Trains Mode"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:149
+msgid "Pause/Resume Trains"
+msgstr "Pysäytä/jatka ajamista"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:150
+msgid "Place a car on the layout"
+msgstr "Sijoita vaunu tai veturi ratasuunnitelmaan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:151
+msgid "Exit Trains"
+msgstr "Poistu junien ajosta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:152
+msgid "Hide/Unhide a track"
+msgstr "Piilota/näytä raide"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:153
+msgid "Make/Unmake a track a bridge"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:154
+msgid "Place a turnout or sectional track"
+msgstr "Lisää vaihde tai palaraide"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:155
+msgid "Create a new turnout definition"
+msgstr "Luo uusi raideosan määrittely"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:156
+msgid "Place a turntable"
+msgstr "Lisää kääntöpöytä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:157
+msgid "Updates old source files with 3 part titles"
+msgstr "Päivittää vanhat lähdetiedostot kolmiosaisilla otsikoilla"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:159
+msgid "Ungroup objects"
+msgstr "Pura ryhmittely"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:160
+msgid "Draw tracks with thin lines"
+msgstr "Piirrä raiteet ohuilla viivoilla"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:161
+msgid "Draw tracks with medium lines"
+msgstr "Piirrä raiteet keskipaksuilla viivoilla"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:162
+msgid "Draw tracks with thick lines"
+msgstr "Piirrä raiteet paksuilla viivoilla"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:163
+msgid "Change drawing scale"
+msgstr "Muuta piirron mittakaavaa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:164
+#: ../../../../build/work/app/bin/bllnhlp.c:176
+msgid "Zoom in"
+msgstr "Lähennä näkymää"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:165
+#: ../../../../build/work/app/bin/bllnhlp.c:177
+msgid "Zoom out"
+msgstr "Loitonna näkymää"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:166
+msgid "File Menu"
+msgstr "Tiedosto valikko"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:167
+msgid "Save layout"
+msgstr "Tallenna ratasuunnitelma"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:168
+msgid "Save layout under a new name "
+msgstr "Tallenna ratasuunnitelma uudella nimellä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:169
+msgid "New layout"
+msgstr "Uusi ratasuunnitelma"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:170
+msgid "Generate parts list"
+msgstr "Luo osaluettelo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:171
+msgid "Load a layout"
+msgstr "Lataa ratasuunnitelma"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:172
+msgid "Exit the program"
+msgstr "Poistu ohjelmasta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:173
+msgid "Revert to last saved state of layout plan"
+msgstr "Palauta ratasuunnitelma edelliseen tallennettuun tilaan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:174
+msgid "Edit menu"
+msgstr "Muokkaa -valikko"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:175
+msgid "Redraw layout"
+msgstr "Uudelleenpiirto ratasuunnitelman objekteille"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:178
+#: ../../../../build/work/app/bin/bllnhlp.c:181
+msgid "Tools menu"
+msgstr "Työkalut -valikko"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:179
+msgid "View menu"
+msgstr "Näytä -valikko"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:180
+msgid "Toolbar configuration"
+msgstr "Työkalurivin asetukset"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:182
+msgid "Options menu"
+msgstr "Asetukset -valikko"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:183
+msgid "Playback/Record commands"
+msgstr "Nauhoita/toista komentoja"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:184
+msgid "Window menu"
+msgstr "Ikkunoiden valinta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:185
+msgid "Help menu"
+msgstr "Ohje -valikko"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:186
+msgid "Recent error messages and explanations"
+msgstr "Viimeisimmät virhesanomat ja selitteet"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:187
+msgid "Move Hot Bar left"
+msgstr "Siirry vasemmalle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:188
+msgid "Move Hot Bar right"
+msgstr "Siirry oikealle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:189
+msgid "Total track count"
+msgstr "Raideosien kokonaismäärä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:190
+msgid "X Position of cursor"
+msgstr "Kohdistimen X sijainti"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:191
+msgid "Y Position of cursor"
+msgstr "Kohdistimen Y sijainti"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:192
+msgid "Drawing scale"
+msgstr "Piirron mittakaava"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:193
+msgid "Message and status line"
+msgstr "Viesti- ja tilarivi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:194
+#: ../../../../build/work/app/bin/bllnhlp.c:195
+msgid "Main layout canvas"
+msgstr "Piirtoalue"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:196
+msgid "Main drawing canvas"
+msgstr "Piirtoalue"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:197
+msgid "Command buttons"
+msgstr "Komentopainikkeet"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:198
+msgid "Menus"
+msgstr "Valikot"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:199
+msgid "Tile, Filename and Window Manager buttons"
+msgstr "Otsikko, tiedostonimi ja ikkunanhallintapainikkeet"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:200
+msgid "Turnout and Structure Hot Bar"
+msgstr "Raideosien ja rakennusten valikko"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:201
+msgid "Active layer list and layer buttons"
+msgstr "Tasoluettelo ja tasopainikkeet"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:202
+msgid "Map window"
+msgstr "Karttaikkuna"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:203
+msgid "This is the portion of the layout shown in the Main Window canvas"
+msgstr "Tämä osa suunnitelmasta näytetään pääikkunan piirtoalueella"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:204
+msgid "Raise or Lower all Selected Track"
+msgstr "Nosta tai laske kaikkia valittuja raiteita"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:205
+msgid "Name of block"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:206
+msgid "Script that the block will run"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:207
+msgid "List of tracks in the Block"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:208
+msgid "Add or Update car object"
+msgstr "Lisää/päivitä tämä vaunu tai veturi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:209
+msgid "Manufacturer name"
+msgstr "Valmistajan nimi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:212
+msgid "Is the Car a Locomotive?"
+msgstr "Onko kyseessä veturi vai vaunu?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:213
+msgid "Part Number and Description"
+msgstr "Tuotekoodi ja kuvaus"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:214
+msgid "Manufacturer Part Number"
+msgstr "Valmistajan tuotekoodi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:215
+msgid "Use the Selected figure as the car image"
+msgstr "Käytä valittua kuvaa vaunun tai veturin kuvana"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:216
+msgid "Use the default figure as the car image"
+msgstr "Käytä oletuskuvaa vaunun tai veturin kuvana"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:217
+msgid "Optional description of the Car Part"
+msgstr "Valinnainen kuvaus mallista"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:218
+msgid "Flip car image"
+msgstr "Käännä kuva"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:219
+msgid "Display Car Item information or reporting marks and dimensions"
+msgstr "Näytä vaunun tai veturin tiedot, tai yhtiötunnukset ja mitat"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:220
+msgid "Full Roadname"
+msgstr "Rautatieyhtiön koko nimi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:221
+#: ../../../../build/work/app/bin/bllnhlp.c:222
+msgid "Car Type"
+msgstr "Vaunun tai veturin tyyppi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:223
+msgid "Reporting Marks (Roadname abbreviation)"
+msgstr "Rautatieyhtiön merkintä (lyhenne)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:224
+#: ../../../../build/work/app/bin/bllnhlp.c:411
+msgid "Car Number"
+msgstr "Vaunun tai veturin numero"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:225
+msgid "Car body Color"
+msgstr "Vaunun tai veturin rungon väri"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:226
+msgid "Length of car body"
+msgstr "Rungon pituus"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:227
+msgid "Width of car body"
+msgstr "Rungon leveys"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:228
+msgid "Distance between Trucks "
+msgstr "Telien keskikohtien välinen etäisyys"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:229
+msgid "Distance Trucks are displaced along Car"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:230
+msgid "Coupler are mounted on body or truck"
+msgstr "Onko kytkimet kiinnitetty runkoon vai teleihin"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:231
+msgid "Overall Coupled Length"
+msgstr "Kokonaispituus kytkimet mukaan lukien"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:232
+msgid "Coupler Length from end of car"
+msgstr "Kytkinten ulkonema vaunun tai veturin päästä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:233
+msgid "Diagram of Car"
+msgstr "Vaunun tai veturin kaaviokuva"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:234
+msgid "Item Index Number"
+msgstr "Kohteen indeksinumero"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:235
+msgid "Original Purchase Price"
+msgstr "Alkuperäinen ostohinta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:237
+msgid "Condition of car"
+msgstr "Vaunun tai veturin kunto"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:238
+msgid "Original Purchase Date"
+msgstr "Ostopäivä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:239
+msgid "Last Service Date"
+msgstr "Milloin viimeksi huollettu"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:240
+msgid "Number of identical cars to be entered"
+msgstr "Samanlaisten vaunujen tai veturien lukumäärä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:241
+msgid "Do all the cars have the same Number?"
+msgstr "Onko kaikilla vaunuilla tai vetureilla sama numero?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:242
+msgid "Notes about the car"
+msgstr "Vaunuun tai veturiin liittyviä muistiinpanoja"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:243
+#: ../../../../build/work/app/bin/bllnhlp.c:244
+msgid "Create a new car Part or Prototype definitions"
+msgstr "Luo uusi malli tai esikuva"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:245
+msgid "Finds the selected Car Item on the layout"
+msgstr "Etsii valitun junan ratasuunnitelmasta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:246
+#: ../../../../build/work/app/bin/bllnhlp.c:247
+#: ../../../../build/work/app/bin/bllnhlp.c:248
+#: ../../../../build/work/app/bin/bllnhlp.c:249
+msgid "Sort the Item list"
+msgstr "Lajittele luettelo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:251
+msgid "Edit the selected Car Item"
+msgstr "Muokkaa valittua kohdetta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:252
+msgid "Add a new Car Item"
+msgstr "Lisää uusi vaunu tai veturi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:253
+msgid "Delete the selected Car Items"
+msgstr "Poista valitut kohteet"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:254
+msgid "Import a Car Item .csv file"
+msgstr "Tuo .cvs tiedostosta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:255
+msgid "Export a Car Item .csv file"
+msgstr "Vie .cvs tiedostoon"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:256
+msgid "Create a text list of the Car Items"
+msgstr "Tallenna tekstitiedostoon"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:257
+msgid "Specifies the radius of the circle track"
+msgstr "Määrittelee ympyräradan säteen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:258
+msgid "Default command is Describe or Select"
+msgstr "Onko oletuskomentona \"määrittele\" vai \"valitse\""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:259
+msgid "Action to invoke on Right-Click"
+msgstr "Hiiren 2-painikkeen toiminto"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:260
+msgid ""
+"Replace current selection with clicked object or add clicked object to "
+"selection"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:261
+msgid "Clicking into an empty area clears selection if select mode is <add>"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:263
+msgid "The list of control elements"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:264
+#, fuzzy
+msgid "Edit the element"
+msgstr "Muokkaa valittua kohdetta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:265
+#, fuzzy
+msgid "Delete the element"
+msgstr "Poista valitut kohteet"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:266
+msgid "Contents Label for new Parameter file"
+msgstr "Parametritiedoston sisältömerkintä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:267
+msgid "List of custom designed turnouts and structures"
+msgstr "Luettelo itse suunnitelluista raideosista ja rakennuksista"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:268
+msgid "Invoke designer editor"
+msgstr "Muokkaa valittua kohdetta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:269
+msgid "Remove selected entries"
+msgstr "Poista valitut kohteet"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:270
+msgid "Copy selected entries to Parameter File"
+msgstr "Siirrä valitut kohteet parametritiedostoon"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:271
+msgid "Create a New part or prototype"
+msgstr "Luo uusi malli tai esikuva"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:272
+msgid "Update custom file and close"
+msgstr "Päivitä tiedosto ja sulje ikkuna"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:273
+msgid "Executes the next step of the demo"
+msgstr "Suorittaa seuraavan vaiheen demossa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:274
+msgid "Skip to next demo"
+msgstr "Siirry seuraavaan demoon"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:275
+msgid "Stops the demonstration and returns you to XTrackCAD"
+msgstr "Pysäyttää demon ja palaa XTrackCADin normaaliin tilaan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:276
+msgid "Select speed of Playback"
+msgstr "Valitse toiston nopeus"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:277
+msgid "This is where comments about the demo are displayed"
+msgstr "Tässä näytetään demojen kommentit"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:314
+msgid "Move the Main canvas if you drag near the edge"
+msgstr "Siirrä näkymää automaattisesti raahattaessa hiirellä lähellä reunoja"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:315
+msgid "Color tracks by layer or individually"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:316
+#, fuzzy
+msgid "Color draw objects by layer or individually"
+msgstr "Väritä raiteet ja muut objektit tasojen mukaan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:317
+msgid "Controls the drawing of hidden tracks"
+msgstr "Piilossa olevien raiteiden piirtotapa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:318
+msgid "Controls the drawing of End-Points"
+msgstr ""
+"Näytetäänkö raiteiden päätepisteet kaikissa raiteissa, vaihteissa vai ei "
+"missään"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:319
+msgid "How to draw track ties"
+msgstr "Ratapölkkyjen piirtotapa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:320
+msgid "Show crosshair at center of curves"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:321
+msgid "Drawing scale when to draw tracks with 2 rails"
+msgstr ""
+"Näytön mittakaavan raja-arvo, jolloin raiteet piirretään yhtenä tai kahtena "
+"kiskona."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:322
+msgid "Drawing scale of the map window"
+msgstr "Karttaikkunan piirtomittakaava"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:323
+msgid "Whether the main layout is updated while dragging on the Map"
+msgstr "Päivitetäänkö pääikkunan näkymä kartassa valitun alueen mukaan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:324
+msgid "Enable labels for Turnouts, Flextrack Lengths and Elevations"
+msgstr "Määrittelee missä kohteissa näytetään merkintöjä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:325
+msgid "When to label Turnout, Flextrack Lengths and Elevations"
+msgstr ""
+"Milloin näytetään merkinnät. Loitonnettaessa tästä arvosta, merkinnät eivät "
+"enää näy."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:326
+msgid "Font size for labels on layout"
+msgstr "Merkintöjen kirjasinkoko ratasuunnitelmassa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:327
+msgid "Label elements on the Hot Bar"
+msgstr "Hot Bar:ssa esitettävät merkinnät"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:328
+msgid "Label elements on layout"
+msgstr "Merkintöjen sisältö ratasuunnitelmassa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:329
+msgid "Label elements for lists"
+msgstr "Luetteloissa näytettävät merkinnät"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:330
+msgid "How to group cars on the Train Hot Bar"
+msgstr "Miten vaunut ja veturit ryhmitellään Junat-Hot Bar:ssa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:331
+msgid "Delay (in mS) between updating train movements"
+msgstr "Junien piirtoväli ajettaessa (millisekunteina)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:332
+msgid "Don't show trains in tunnels when tunnels are hidden"
+msgstr ""
+"Ei näytetä junia tunneleissa, jos tunnelien piirtotapa on \"piilotettu\""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:333
+msgid "Display unconnected endpoints of track with special marks"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:334
+msgid "Whether the Main Drawing Area shows as much of the room as possible"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:336
+msgid "Width of the lines"
+msgstr "Viivojen paksuus"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:337
+msgid "Color of the lines"
+msgstr "Viivojen väri"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:338
+msgid "List of types of Lumber"
+msgstr "Luettelo puutavaran tyypeistä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:339
+msgid "Color of Benchwork"
+msgstr "Runkorakenteen väri"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:340
+msgid "Orientation of Benchwork"
+msgstr "Runkorakenteen suunta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:341
+msgid "Size of Dimension Arrows"
+msgstr "Mittajanan nuolten koko"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:342
+msgid "This controls the sharpness of the easement curve"
+msgstr "Tällä säädellään kaarreloivennuksen jyrkkyyttä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:343
+msgid "Minimum radius"
+msgstr "Pienin karresäde"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:344
+msgid "Maximum offset"
+msgstr "Suurin siirtymä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:345
+msgid "Easement length"
+msgstr "Kaarreloivennuksen pituus"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:346
+msgid ""
+"These radio buttons are a short-cut for Values of 0.0, 0.5, 1.0 and 2.0. "
+"None turns Easements off"
+msgstr ""
+"Nämä painikkeet ovat pikavalintoja arvoille 0,0, 0,5, 1,0 ja 2,0. Mikään "
+"näistä ei poista kaarreloivennusta käytöstä."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:347
+msgid "Complete easement selection"
+msgstr "Hyväksy kaarreloivennukse asetukset ja sulje ikkuna"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:348
+msgid "Type of elevation"
+msgstr "Tyyppi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:349
+msgid "Height of End Point"
+msgstr "Päätepisteen korkeus"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:350
+msgid "Compute elevation based on neighbors"
+msgstr "Laske korkeudet viereisten perusteella"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:351
+msgid "Compute grade based on neighbors"
+msgstr "Laske nousukulma viereisten perusteella"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:352
+msgid "Specify a name for an End-Point"
+msgstr "Määrittele päätepisteen nimi (aseman nimi)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:354
+msgid "Print parts list"
+msgstr "Tulosta osaluettelo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:355
+#: ../../../../build/work/app/bin/bllnhlp.c:466
+#: ../../../../build/work/app/bin/bllnhlp.c:575
+msgid "Invoke the Print Setup dialog"
+msgstr "Avaa tulostusasetusten ikkuna"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:356
+msgid "Save parts list to file"
+msgstr "Tallenna osaluettelo tiedostoon"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:357
+msgid "This is the list of parts for the layout"
+msgstr "Tämä on ratasuunnitelman osaluettelo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:358
+msgid "Enable prices on the Parts List"
+msgstr "Näytä hinnat osaluettelossa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:359
+#: ../../../../build/work/app/bin/bllnhlp.c:362
+msgid "Spacing between major grid lines"
+msgstr "Ruudukon pääviivojen väli"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:360
+#: ../../../../build/work/app/bin/bllnhlp.c:363
+msgid "Allows the spacing to be subdivided"
+msgstr "Aliviivojen jako"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:361
+#: ../../../../build/work/app/bin/bllnhlp.c:364
+msgid "Specifies if positions are snaped in this direction"
+msgstr "Määrittelee kohdistetaanko tässä suunnassa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:365
+#: ../../../../build/work/app/bin/bllnhlp.c:366
+#: ../../../../build/work/app/bin/bllnhlp.c:367
+msgid "Shows the origin and angle of the grid"
+msgstr "Ruudukon origo ja kulma"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:368
+msgid "Specifies if the grid is shown"
+msgstr "Määrittelee näytetäänkö ruudukko"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:369
+msgid "Completes the grid specification"
+msgstr "Hyväksy ruudukon asetukset"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:373
+msgid "Number of segments in Group"
+msgstr "Lohkojen määrä ryhmässä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:374
+msgid "Replace the Selected object with the new definition?"
+msgstr "Korvaa valittu objekti uudella määrittelyllä?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:375
+msgid "Creates a new Structure (or Turnout)"
+msgstr "Luo uuden rakennuksen (tai raideosan)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:376
+msgid "Elevation difference of Helix End-Points"
+msgstr "Päätepisteiden välinen korkeusero"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:377
+msgid "Helix Radius"
+msgstr "Helixin säde"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:378
+msgid "Number of turns in the helix"
+msgstr "Kokonaisten kierrosten lukumäärä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:379
+msgid "Angle betweek helix entrance and exit"
+msgstr "Sisäänmenon ja ulostulon välinen kulma"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:380
+msgid "Grade in helix"
+msgstr "Nousukulma"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:381
+msgid "Separation between helix layers"
+msgstr "Helixin kerrosten välinen etäisyys"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:382
+#, fuzzy
+msgid "Desired curve radius between straight tracks"
+msgstr "Luo suora raideosa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:383
+msgid "Layer list"
+msgstr "Tasoluettelo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:384
+msgid "Layer Name"
+msgstr "Tason nimi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:385
+msgid "Color of layer"
+msgstr "Tason väri"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:386
+msgid "Layer is drawn on Main window"
+msgstr "Taso piirretään pääikkunaan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:387
+msgid "Layer cannot be changed"
+msgstr "Tasoa ei voi muokata"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:388
+msgid "Layer is drawn on Map window"
+msgstr "Taso piirretään kartalle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:389
+msgid "Number of layer buttons to show"
+msgstr "Työkalurivillä näytettävien tasopainikkeiden lukumäärä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:390
+msgid "Number of objects in this layer"
+msgstr "Objektien lukumäärä tällä tasolla"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:392
+msgid "Load layer configuration from default"
+msgstr "Lataa oletusasetukset tiedostosta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:393
+msgid "Save current layer configuration as default"
+msgstr "Tallenna nykyiset tasojen asetukset oletuksiksi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:394
+msgid "Overwrite layer configuration with system default values"
+msgstr "Käytä järjestelmän oletusasetuksia"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:395
+#: ../../../../build/work/app/bin/bllnhlp.c:396
+msgid "Specifies the size of the room (in inches or centimeters)"
+msgstr "Määrittele huoneen koko (senttimetreinä tai tuumina)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:397
+#, fuzzy
+msgid "Specifies the layout Title that will appear on printouts"
+msgstr "Ratasuunnitelman otsikko. Tämä näkyy tulostuksissa."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:398
+#, fuzzy
+msgid "Specifies the layout Subtitle that will appear on printouts"
+msgstr "Ratasuunnitelman otsikko. Tämä näkyy tulostuksissa."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:399
+msgid "Specifies the Modelling Scale"
+msgstr "Määrittelee mittakaavan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:400
+msgid "Specifies the rail gauge, ie. the distance between the rails"
+msgstr "Määrittelee raideleveyden"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:401
+msgid ""
+"Specifies minimum track radius (in inches or centimeters). Tracks with a "
+"smaller radius are considered exceptional."
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:402
+msgid ""
+"Specifies maximum track elevation expressed as a percent (%). Tracks with a "
+"larger elevation are considered exceptional."
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:403
+#, fuzzy
+msgid "Select the background image"
+msgstr "Valitsee piirtotason"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:404
+msgid "Remove the background image"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:405
+#, fuzzy
+msgid "Specifies the x offset of the bottom left of the background image"
+msgstr "Määrittele huoneen koko (senttimetreinä tai tuumina)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:406
+#, fuzzy
+msgid "Specifies the y offset of the bottom left of the background image"
+msgstr "Määrittele huoneen koko (senttimetreinä tai tuumina)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:407
+msgid ""
+"Specifies how large the bottom edge of the background image should be in "
+"model units"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:408
+msgid ""
+"Specifies the screening of the background image from 0 (none) to 100% "
+"(vanishes)"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:409
+#, fuzzy
+msgid "Specifies the rotation angle of the background image in degrees"
+msgstr "Määrittelee annetaanko kulmat asteina vai risteysnumerona"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:412
+msgid ""
+"This is the body of the Note. To change this select Modify from the File "
+"Menu"
+msgstr ""
+"Tämä on muistiinpanon runko. Muuttaaksesi tätä, valitse Tiedosto-valikosta "
+"Muokkaa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:414
+msgid "Specifies number of pixels per inch (or centimeter)"
+msgstr "Määrittelee pikseleiden määrän tuumalla (tai sentillä)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:416
+msgid ""
+"Specifies whether Layout Titles, Borders or Track Centerlines are printed on "
+"the BitMap"
+msgstr ""
+"Määritelee tulostetaanko ratasuunnitelman otsikot, reunukset tai ratojen "
+"keskiviivat"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:417
+#, fuzzy
+msgid ""
+"Specifies the separation between the original track and the parallel track/"
+"line"
+msgstr "Määrittelee rinnakkaisten raiteiden etäisyyden toisistaan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:418
+msgid ""
+"Specifies the a factor that increases the seperation as the radius of the "
+"original track reduces. 0.0 means no increase."
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:419
+msgid "Enter your name as specified in the XTrackCAD Registration Notice"
+msgstr "Syötä nimesi kuten XTrackCAD rekisteröintitiedotteessa on määritelty"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:420
+msgid "Enter the key value as specified in the XTrackCAD Registration Notice"
+msgstr "Syötä avain kuten XTrackCAD rekisteröintitiedotteessa on määritelty"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:421
+msgid "Validates the name and key. Terminates the registration command"
+msgstr "Vahvistaa nimen ja avainen, sekä päättää rekisteröitymisen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:422
+#, fuzzy
+msgid "0ᅵ is up or to the right"
+msgstr "Onko 0° ylhäällä vai oikealla"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:423
+msgid "Choose english (inches) or metric (centimeters)"
+msgstr ""
+"Valitse englantilaiset (tuumat) tai metrijärjestelmän (sentit) mukaiset mitat"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:424
+msgid "How to display length measurements"
+msgstr "Pituusmittojen esitystapa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:425
+msgid "Do not create tracks to be shorter than this value"
+msgstr "Älä luo tätä lyhyempiä raiteita"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:426
+msgid "Maximum distance between connected end points"
+msgstr "Suurin sallittu etäisyys kahden liitettävän raiteen välillä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:427
+msgid "Minimum angle between connected End-Points"
+msgstr "Suurin sallittu kulma kahden liitettävän raiteen välillä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:428
+msgid "Specifies the minimum angle between tracks connected to a turntable"
+msgstr ""
+"Määrittelee pienimmän kääntöpöydästä lähtevien raiteiden välisen kulman"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:429
+msgid "Trains will crash above this speed"
+msgstr ""
+"Suurin sallittu vaunujen kytkentänopeus. Suuremmalla nopeudella aiheutuu "
+"törmäys."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:430
+msgid "Enable/Disable balloon popup help windows"
+msgstr "Käytetäänkö pikaopasteita (tooltip)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:431
+msgid "Enable/Disable show of flextrack on hotbar"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:432
+msgid "How far you can move the mouse before its considered a drag"
+msgstr ""
+"Kuinka pitkälle hiirtä voi liikuttaa ennen kuin se käsitetään raahaamiseksi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:433
+msgid "How long you can hold a mouse button down before its considered a drag"
+msgstr ""
+"Kuinka kauan hiiren painiketta voi pitää alhaalla ennen kuin se käsitetään "
+"raahaamiseksi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:434
+msgid "Minimum distance (in pixels) between grid lines/ticks"
+msgstr "Ruudukon viivojen pienin etäisyys toisistaan pikseleinä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:435
+msgid ""
+"Specifies the Check Point frequency; number of modifications made since the "
+"last checkpoint."
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:436
+msgid "Specifies the number of checkpoints after save before auto-saving."
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:437
+msgid "Resume work on last layout or start with new layout"
+msgstr "Jatka edellistä ratasuunnitelmaa tai aloita uusi ratasuunnitelma"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:439
+msgid "Updated cost of current selected item"
+msgstr "Syötä valitulle tuotteelle uusi hinta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:441
+msgid "Selection list for prices"
+msgstr "Hintojen valintaluettelo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:442
+#: ../../../../build/work/app/bin/bllnhlp.c:443
+#: ../../../../build/work/app/bin/bllnhlp.c:444
+msgid "Price of specified length of flex-track"
+msgstr "Määrätyn mittaisen fleksin hinta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:446
+#, fuzzy
+msgid "Controls the printing of a centerline of track cmdPrint"
+msgstr "Piilossa olevien raiteiden piirtotapa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:447
+msgid "Controls the reduction (scale) of the printout"
+msgstr "Tulostuksen mittakaava"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:448
+msgid "Scaled page width (Scale times physical page width)"
+msgstr "Skaalattu sivun leveys (mittakaava x fyysinen sivun leveys)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:449
+msgid "Sets page size to the maximum (based on scale and physical page size)"
+msgstr ""
+"Aseta sivun koko suurimmaksi mahdolliseksi mittakaavan ja fyysisen sivukoon "
+"mukaan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:450
+msgid "Scaled page height (Scale times physical page height)"
+msgstr "Skaalattu sivun korkeus (mittakaava x fyysinen sivun korkeus)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:451
+msgid "Sets scale, origin and angle for a one page printout of the layout"
+msgstr ""
+"Asettaa tulostusmittakaavan, origon ja kulman siten, että koko "
+"ratasuunnitelma mahtuu yhdelle sivulle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:452
+msgid "Print page in Portrait or Landscape format"
+msgstr "Tulosta sivu pysty- tai vaakasuunnassa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:453
+msgid "Order of printing pages"
+msgstr "Sivujen tulostusjärjestys"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:454
+msgid "Print Title, Date, Author and other information at bottom of page?"
+msgstr "Tulosta otsikko, päivämäärä, rekijä ja muut tiedot sivun alaosaan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:455
+msgid "Ignore unprintable page margins?"
+msgstr "Ohita tulostumattomat marginaalit?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:456
+msgid "Print Registration Marks at 1:1?"
+msgstr "Tulosta sivujen kohdistusmerkinnät tulostusmittakaavan ollessa 1:1?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:457
+msgid "Print Snap Grid?"
+msgstr "Tulosta kohdistusruudukko?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:458
+msgid "Print Rulers on all page edges?"
+msgstr "Tulosta viivaimet kaikilla reunoilla?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:459
+msgid "Print Roadbed Outline?"
+msgstr "Tulosta ratapenkan ulkoreuna?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:460
+msgid "Print Roadbed Outline"
+msgstr "Tulosta ratapenkan ulkoreuna"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:461
+#: ../../../../build/work/app/bin/bllnhlp.c:462
+#: ../../../../build/work/app/bin/bllnhlp.c:464
+msgid ""
+"Origin of the print grid. This is useful if you want to reprint a set of "
+"pages"
+msgstr ""
+"Tulostusruudukon origo. Tämä on hyödyllinen tulostettaessa sivuja uudelleen"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:463
+msgid "Resets the origin and angle to 0"
+msgstr "Palauttaa origon ja kulman nollaksi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:465
+msgid "Deselects all pages"
+msgstr "Poista sivujen valinnat"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:467
+msgid "Print selected pages and terminates the print command"
+msgstr "Tulostaa valitut sivut ja päättää tulostuskomennon"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:468
+#, fuzzy
+msgid "List of loaded, shown or hidden parameter files"
+msgstr "Luettelo ladatuista ja saatavilla olevista parametritiedostoista"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:469
+msgid "Show parameter files by names or descriptions"
+msgstr "Näytä parametritiedostojen nimet tai kuvaukset"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:470
+#, fuzzy
+msgid "Toggle the shown status of the selected parameter file"
+msgstr "Lataa tai poista valittu parametritiedosto"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:471
+#, fuzzy
+msgid "Find extra parameter files from the filesystem"
+msgstr "Etsi ladattava parametritiedosto"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:472
+#, fuzzy
+msgid "Find parameter files from the system library"
+msgstr "Etsi ladattava parametritiedosto"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:473
+msgid "Update parameter file list"
+msgstr "Päivitä parametritiedostojen luettelo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:474
+#, fuzzy
+msgid "Reload parameter file from list"
+msgstr "Luetaan parametritiedostot"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:475
+#, fuzzy
+msgid "Select all parameter files shown"
+msgstr "Luetaan parametritiedostot"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:476
+msgid "Profile of specified path"
+msgstr "Määritellyn reitin profiili"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:477
+msgid "Clear the profile"
+msgstr "Tyhjennä profiilikäyrä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:478
+msgid "Print the profile"
+msgstr "Tulosta profiili"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:480
+msgid "Stop recording"
+msgstr "Lopeta nauhoitus"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:481
+msgid "Insert a message"
+msgstr "Lisää viesti"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:482
+msgid "End a message"
+msgstr "Lopeta viestin kirjoitus"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:483
+msgid "Message body"
+msgstr "Viestin runko"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:484
+msgid "Possible turnouts"
+msgstr "Mahdolliset raideosat"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:485
+msgid "Skip this turnout"
+msgstr "Hyppää tämän vaihteen yli"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:487
+msgid "Manufacturer of Object"
+msgstr "Valmistaja"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:488
+msgid "Description of Object"
+msgstr "Objektin kuvaus"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:489
+msgid "Part Nuber of Object"
+msgstr "Tuotekoodi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:491
+msgid "Rescale by Scale Conversion or by Ratio"
+msgstr "Muunna käyttämällä mittakaavaa tai suhdelukua"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:492
+msgid "Original Scale of the selected objects"
+msgstr "Valittujen objektien alkuperäinen mittakaava"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:493
+#, fuzzy
+msgid "Original Gauge of the selected objects"
+msgstr "Valittujen objektien alkuperäinen raideleveys"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:494
+msgid "New Scale of the selected objects"
+msgstr "Valittujen objektien uusi mittakaava"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:495
+msgid "New Gauge of the selected objects"
+msgstr "Valittujen objektien uusi raideleveys"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:496
+msgid "Change track dimensions to new scale"
+msgstr "Muuta raiteiden mitat uuteen mittakaavaan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:497
+msgid "Change size by this amount"
+msgstr "Muuta kokoa tämän suhdeluvun verran"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:499
+msgid "Snap Grid Line and Division"
+msgstr "Kohdistusruudukko ja jakomerkinnät"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:500
+msgid "X and Y position markers"
+msgstr "Kohdistimen X ja Y sijainnin markkerit"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:501
+msgid "Border rulers, room boundaries and table edges"
+msgstr "Reunaviivaimet, huoneen rajat sekä pöydän reunat"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:502
+msgid "Primary Axis of grid rotation"
+msgstr "Ruudukon asettelun ensisijainen akseli"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:503
+msgid "Secondary Axis of grid rotation"
+msgstr "Ruudukon asettelun toissijainen akseli"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:504
+msgid "Unselected tracks"
+msgstr "Normaalit raideosat, joita ei ole valittu"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:505
+msgid "Selected tracks"
+msgstr "Valitut raiteet"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:506
+msgid "Color of tracks on the Profile path"
+msgstr "Profiilin muokkauksessa olevat raiteet"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:507
+msgid "Color of Exceptional tracks"
+msgstr "Erityisraiteiden väri"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:508
+msgid "Color of track ties"
+msgstr "Ratapölkkyjen väri"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:509
+msgid "Updates the colors"
+msgstr "Pävitä värit ja sulje ikkuna"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:510
+msgid "Angle in degrees"
+msgstr "Kulma (asteina)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:511
+msgid "Rotate object(s) by specified amount"
+msgstr "Pyöritä objekteja määrätyn verran"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:512
+msgid "Enter one or more words as search terms '*' means all"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:513
+#, fuzzy
+msgid "Find matching file descriptions"
+msgstr "Valitse ja raahaa merkintöjä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:514
+msgid "Search Results"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:515
+msgid "Show Descriptions or FileNames in results"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:516
+#, fuzzy
+msgid "Add selected entries into parameter file list"
+msgstr "Siirrä valitut kohteet parametritiedostoon"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:517
+#, fuzzy
+msgid "Select All found entries"
+msgstr "Hintojen valintaluettelo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:518
+msgid "Reload the system library contents for finding"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:519
+msgid "Choose commands to be sticky"
+msgstr "Valitse pysyvät komennot"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:520
+msgid "Make the commands sticky"
+msgstr "Hyväksy asetukset ja sulje ikkuna"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:521
+msgid "List of available structure"
+msgstr "Luettelo saatavilla olevista rakennuksista"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:522
+msgid "Diagram of the selected structure"
+msgstr "Valitun rakennuksen kuva"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:523
+msgid "Hide Selection window when placing Structure"
+msgstr "Piilota valintaikkuna rakennuksen asettamisen ajaksi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:524
+msgid "Drawing scale and size"
+msgstr "Mittakaava ja koko"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:525
+msgid "Complete structure placement"
+msgstr "Lisää rakennus"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:526
+msgid "Choose a Pier number"
+msgstr "Valitse pilarin numero"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:527
+msgid "Name of the Motor"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:528
+msgid "Value when switch is normal"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:529
+msgid "Value when the switch is reversed"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:530
+msgid "Value for a positive comfirmation of switch position"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:532
+msgid "Useful information about the program"
+msgstr "Hyödyllisiä tietoja ohjelmasta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:533
+msgid "Show Tip of the Day every time the program starts"
+msgstr "Näytä päivän vinkki jokaisen käynnistyksen yhteydessä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:534
+msgid "Show the next Tip of the Day"
+msgstr "Näytä seuraava vinkki"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:535
+msgid "Show the previous Tip of the Day"
+msgstr "Näytä edellinen vinkki"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:537
+msgid "Controls which Command Buttons are displayed"
+msgstr "Valitse työkalurivillä näytettävät painikkeet"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:538
+msgid "List of Cars"
+msgstr "Luettelo vaunuista ja vetureista"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:539
+msgid "List of active trains"
+msgstr "Luettelo aktiivisista junista"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:541
+msgid "Train odometer"
+msgstr "Junan matkamittari"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:542
+msgid "Reset odometer to 0"
+msgstr "Nollaa matkamittarin lukema"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:543
+msgid "Find train on layout"
+msgstr "Etsi juna ratasuunnitelmasta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:544
+msgid "Follow train around layout"
+msgstr "Seuraa junaa ratasuunnitelmassa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:545
+msgid "Flip direction at End Of Track"
+msgstr "Muuta kulkusuunta automaattisesti radan päässä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:546
+msgid "Change direction of train"
+msgstr "Muuta junan kulkusuunta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:547
+msgid "Stop the train"
+msgstr "Pysäytä juna"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:548
+msgid "List of available turnouts for the current scale"
+msgstr "Luettelo saatavilla olevista raideosista tässä mittakaavassa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:549
+msgid ""
+"Diagram of the currently selected turnout. Click on a End-Point to select "
+"the Active End-Point"
+msgstr "Valitun raideosan kaaviokuva. Valitse aktiivinen päätepiste hiirellä."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:550
+msgid ""
+"A menu list of various type of turnouts and sectional tracks you can define"
+msgstr ""
+"Valikko eri tyyppisistä vaihteista ja palaraiteista joita voit määritellä"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:551
+msgid "Hide Selection window when placing Turnout"
+msgstr "Piilota valintaikkuna vaihteen asettamisen ajaksi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:552
+msgid "The selected Active End-Point"
+msgstr "Valittu aktiivinen päätepiste"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:553
+msgid "Current selected turnout, (displayed in the diagram window)"
+msgstr "Valittu raideosa (kaaviokuva ikkunassa)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:554
+msgid "One the End-Points that can be selected"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:556
+#: ../../../../build/work/app/bin/bllnhlp.c:557
+msgid "Angle of the specified track to the center line of the turnout"
+msgstr "Raiteen ja vaihteen keskilinjan välinen kulma"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:558
+msgid "Specifies if angles are entered as Frog Numbers or in degrees"
+msgstr "Määrittelee annetaanko kulmat asteina vai risteysnumerona"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:559
+#: ../../../../build/work/app/bin/bllnhlp.c:560
+msgid "Desciption"
+msgstr "Kuvaus"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:561
+msgid "Turnout description (Manuf., Size, Part Number, etc)"
+msgstr "Raideosan kuvaus (valmistaja, koko, tuotekoodi, jne.)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:562
+#: ../../../../build/work/app/bin/bllnhlp.c:563
+#: ../../../../build/work/app/bin/bllnhlp.c:564
+msgid "Length from the base to the end of the specified track"
+msgstr "Etäisyys vaihteen alusta raiteen päähän"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:566
+#: ../../../../build/work/app/bin/bllnhlp.c:567
+msgid "Offset of the track End-Point from the center line of the turnout"
+msgstr "Raiteen päätepisteen ja vaihteen keskilinjan välinen etäisyys"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:570
+#: ../../../../build/work/app/bin/bllnhlp.c:571
+msgid "Prints a full size diagram of the turnout for checking"
+msgstr "Tulostaa täysikokoisen kaavion vaihteesta tarkastusta varten"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:572
+msgid "Color of Roadbed lines"
+msgstr "Ratapenkan viivan väri"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:573
+msgid "Width of Roadbed lines"
+msgstr "Ratapenkan viivan paksuus"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:574
+msgid "Width of Roadbed"
+msgstr "Ratapenkan leveys"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:576
+msgid "Closes the window and returns to the Turnout Selection window"
+msgstr "Sulkee ikkunan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:577
+msgid "Specifies the diameter of the turntable"
+msgstr "Määrittelee kääntöpöydän halkaisijan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:578
+msgid "Old Turnout title"
+msgstr "Vanha raideosan otsikko"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:579
+msgid "List of available titles"
+msgstr "Luettelo saatavilla olevista otsikoista"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:580
+msgid "Leave the Turnouts' title unchanged"
+msgstr "Älä muuta raideosan otsikkoa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:581
+msgid "Invoke the Parameter Files dialog"
+msgstr "Avaa parametritiedostot ikkuna"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:582
+msgid "List of available turnouts"
+msgstr "Luettelo saatavilla olevista raideosista"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:583
+msgid "Update the Turnouts' title"
+msgstr "Päivitä raideosan otsikko"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:587
+msgid "Sample"
+msgstr "Näyte"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:589
+msgid "Slant"
+msgstr "Kursivoitu"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:590
+msgid "Font selection dialog"
+msgstr "Kirjasimen valinta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:591
+msgid "Weight"
+msgstr "Lihavoitu"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:592
+msgid "Printer Abort Window"
+msgstr "Tulostuksen keskeytys"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:593
+msgid "Print to filename"
+msgstr "Tulostuksen tiedostonimi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:594
+msgid "Specify Postscript font alias mapping"
+msgstr "Määrittele Postscript kirjasinalias"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:595
+msgid ""
+"Displays the Print Setup window to change printers, orientation, paper size, "
+"etc."
+msgstr ""
+"Näyttää tulostusasetusikkunan, josta voi valita tulostimen, muutaa paperin "
+"koon, yms."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:596
+msgid "Closes this dialog"
+msgstr "Sulkee tämän ikkunan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:597
+msgid "Page orientation"
+msgstr "Sivun suunta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:598
+msgid "Unprintable margins"
+msgstr "Tulostumattomat marginaalit"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:599
+msgid "Updates and closes this dialog"
+msgstr "Hyväksy asetukset ja sulje ikkuna"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:600
+msgid "Choose paper size"
+msgstr "Valitse paperin koko"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:601
+msgid "Choose printer"
+msgstr "Valitse tulostin"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:602
+msgid "Print test page"
+msgstr "Tulosta testisivu"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:1
+#: ../../../../build/work/app/i18n/custmsg.h:8
+msgid ""
+"XTrackCAD provides demonstrations on most of the program's features. The "
+"demos can be run by clicking on the Help menu on the Main window and then "
+"selecting Demos."
+msgstr ""
+"XTrackCAD tarjoaa havaintoesityksiä (demoja) useimmista ohjelman "
+"ominaisuuksista. Demoja voidaan suorittaa valitsemalla pääikkunan Ohje-"
+"valikosta Demot."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:3
+#: ../../../../build/work/app/i18n/custmsg.h:10
+#, fuzzy
+msgid ""
+"The notation \"Menu|Item\" is used in the documentation (and the on-line "
+"demos and tips) to indicate the selection of a menu item.\n"
+"For example, \"File|Open\" means to open the menu by clicking on File on the "
+"menu bar of the Main window and then selecting the Open item from that menu."
+msgstr ""
+"Merkintätapa \"Valikko|Komennot\" on käytössä dokumentaatiossa, ohjeessa, "
+"demoissa ja vinkeissä. Se kuvaa kyseessä olevaa valikon toimintoa.\n"
+"Esimerkiksi Tiedosto|Avaa tarkoittaa, että päävalikosta on ensin avattava "
+"Tiedosto-valikko ja sieltä valittava Avaa-komento."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:6
+#: ../../../../build/work/app/i18n/custmsg.h:12
+msgid ""
+"Set your modeling scale on the \"Options|Layout\" dialog. This controls the "
+"Turnouts and Structures that are available, Easement values and track gauge."
+msgstr ""
+"Mittakaava asetetaan \"Asetukset|Ratasuunnitelma\" ikkunasta. Tämä asetus "
+"määrää mitkä raideosat ja rakennukset ovat käytettävissä sekä "
+"kaarreloivennuksen arvot ja raideleveyden."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:8
+#: ../../../../build/work/app/i18n/custmsg.h:14
+msgid ""
+"A number of example layouts are provided. These files can be accessed by "
+"\"Help|Examples\"."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:10
+#: ../../../../build/work/app/i18n/custmsg.h:16
+#, fuzzy
+msgid ""
+"When installed, the length units are set based on your contry: inches for "
+"United States or Canada and centimeters elsewhere. You can change this on "
+"the \"Options|Preferences\" dialog by choosing between Metric and English."
+msgstr ""
+"Asennuksen jälkeen ohjelmassa on tuuma-mitat käytössä. Tämän voi muuttaa "
+"\"Asetukset|Ominaisuudet\" ikkunasta muuttamalla yksiköt metrijärjestelmään "
+"englantilaisen sijaan."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:12
+#: ../../../../build/work/app/i18n/custmsg.h:18
+msgid ""
+"You can change the overall size of your layout on the \"Options|Layout\" "
+"dialog."
+msgstr ""
+"Voit muuttaa ratasuunnitelmasi kokoa \"Asetukset|Ratasuunnitelma\" ikkunasta."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:14
+#: ../../../../build/work/app/i18n/custmsg.h:20
+#, fuzzy
+msgid ""
+"When installed, the default command is the Select command. You might want to "
+"change this to the Decribe command. You can do this on the \"Options|"
+"Command Options\" dialog."
+msgstr ""
+"Asennuksen jälkeen hiiren oletuskomento on Määritä-komento. Kokeneemmat "
+"käyttäjät saattavat haluta muuttaa tämän Valitse-komennoksi. Se tapahtuu "
+"\"Asetukset|Komennot\" ikkunasta."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:16
+#: ../../../../build/work/app/i18n/custmsg.h:22
+msgid ""
+"When Selecting tracks, the connection between Selected and Unselected tracks "
+"is marked by a Red X. This indicates points where the connection between "
+"tracks will be broken if you Move or Rotate the Selected tracks."
+msgstr ""
+"Raideosia valittaessa, valitun ja valitsemattoman raideosan välinen liitos "
+"esitetään punaisella ristillä. Tämä kertoo ne pisteet, joissa raiteiden "
+"liitos irroitetaan valittuja raiteita siirrettäessä tai pyöritettäessä."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:18
+#: ../../../../build/work/app/i18n/custmsg.h:24
+msgid ""
+"You can change orientation of the pages on the Print command by moving or "
+"rotating the Print Grid.\n"
+"Shift-Left-Drag moves the grid and Shift-Right-Drag rotates the grid."
+msgstr ""
+"Voit muuttaa tulostettavien sivujen asettelua siirtämällä tai pyörittämällä "
+"tulostusruudukkoa.\n"
+"Vaihto-näppäin ja hiiren vasen raahaus siirtää ruudukkoa ja vaihto-hiiren "
+"oikea pyörittää sitä."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:21
+#: ../../../../build/work/app/i18n/custmsg.h:26
+msgid ""
+"You can add track to any unconnected End-Point with the Modify command.\n"
+"Hold down the Shift key and click on the End-Point and drag away to create a "
+"new track segment attached to the End-Point.\n"
+"Repeat with the new End-Point to create flowing tracks."
+msgstr ""
+"Voit lisätä reiteita mihin tahansa irtonaiseen päätepisteeseen Muokkaa "
+"komennolla.\n"
+"Pidä vaihto-näppäin painettuna ja raahaa hiiren oikealla päätepisteestä "
+"luodaksesi uuden raideosan päätepisteen jatkeeksi.\n"
+"Tee sama uudesta päätepisteestä luodaksesi vapaamuotoisia raiteita."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:25
+#: ../../../../build/work/app/i18n/custmsg.h:28
+#, fuzzy
+msgid ""
+"You can create curved tracks in four ways by dragging from:\n"
+" the 1st endpoint in the direction of the curve\n"
+" center of the curve to the 1st endpoint\n"
+" endpoint to the center\n"
+" the 1st to 2nd endpoint\n"
+"Then drag on one of the Red arrows to create the final shape of the curve.\n"
+"\n"
+"You can click on the small button to the right of the Curve command button "
+"to change the method."
+msgstr ""
+"Voit luoda kaarevia raiteita neljällä tavalla raahaamalla:\n"
+" - 1. päätepisteestä kaarteen suuntaan\n"
+" - keskipisteestä kaarteen ensimmäiseen päätepisteeseen\n"
+" - päätepisteestä keskipisteeseen\n"
+" - ensimmäisestä toiseen päätepisteeseen\n"
+"Asettele sitten kaarre lopulliseen muotoonsa raahaamalla punaisista "
+"nuolista.\n"
+"\n"
+"Voit valita tavan Kaarre painikkeen oikealla puolella olevasta pienestä "
+"painikkeesta avautuvan valikon kautta."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:34
+#: ../../../../build/work/app/i18n/custmsg.h:30
+msgid ""
+"When creating a straight or a curved track by dragging from the 1st End "
+"Point, you can snap the new track to an existing open end point by holding "
+"down Shift while you click.\n"
+"The new track will be joined to the old when you create it."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:37
+#: ../../../../build/work/app/i18n/custmsg.h:32
+msgid ""
+"Track Circles provide a quick way to see what arrangement of tracks will fit "
+"in your layout spaces. Create Circles with your typical radius and place "
+"them in corners and other locations where your main-line will make changes "
+"of direction. This will give you an overall idea of how your layout will "
+"look.\n"
+"\n"
+"You can create Circles by:\n"
+" using a fixed radius\n"
+" dragging from the Center to edge\n"
+" dragging from an edge to the Center\n"
+"You can click on the small button to the left of the Circle command button "
+"to change the method."
+msgstr ""
+"Ympyräraiteet tarjoavat nopean tavan hahmottaa millainen raidejärjestely "
+"mahtuu suunniteltuun tilaan. Luo ympyräraiteita käyttäen aikomaasi "
+"kaarresädettä ja asettele niitä nurkkiin ja muihin paikkoihin, joissa "
+"pääraiteesi vaihtaa suuntaa. Tämä antaa yleiskuvan tulevan ratasi muodosta.\n"
+"\n"
+"Voit luoda ympyräraiteita:\n"
+" - Käyttämällä määrättyä sädettä.\n"
+" - Raahaamalla keskipisteestä pois päin.\n"
+" - Raahaamalla kehältä kohti keskipistettä.\n"
+"Voit valita tavan valikosta, joka avautuu Ympyrärata-painikkeen oikealta "
+"puolelta."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:45
+#: ../../../../build/work/app/i18n/custmsg.h:34
+msgid ""
+"Easements (spiral transition curves) are used when track changes from "
+"straight to curved by gradually changing the radius. This improves "
+"operation and appearance.\n"
+"Easements are created with Joining or Extending Tracks.\n"
+"The Easement dialog is used to control easements."
+msgstr ""
+"Kaarreloivennuksia käytetään radan muuttuessa suorasta kaarteeksi "
+"muuttamalla vaihdoskohdassa kaarresädettä asteittain. Tämä parantaa radan "
+"ajettavuutta ja ulkonäköä.\n"
+"Kaarreloivennukset luodaan yhdistämällä tai jatkamalla raiteita.\n"
+"Kaarreloivennus-ikkunasta asetellaan tarvittavat parametrit."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:49
+#: ../../../../build/work/app/i18n/custmsg.h:36
+msgid ""
+"\"Help|Recent Messages\" shows the last error and warning messages that were "
+"generated by the program. Also an explanation of each message is displayed."
+msgstr ""
+"\"Ohje|Viimeisimmät viestit\" näyttää tapahtuneet virheet ja varoitukset. "
+"Valitsemalla jonkin viesteistä saat tarkennetun kuvauksen viestistä."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:51
+#: ../../../../build/work/app/i18n/custmsg.h:38
+#, fuzzy
+msgid ""
+"When creating stall tracks for a turntable, you usually want the the stall "
+"tracks to be spaced evenly.\n"
+"The \"Turntable Angle\" item on \"Options|Preferences\" dialog can be used "
+"specify the minimum angle between stall tracks."
+msgstr ""
+"Luodessasi kääntöpöytään liittyviä raiteita, haluat yleensä ainakin osan "
+"niistä olevan tasavälein.\n"
+"\"Kääntöpöydän kulma\" parametrilla asetetaan pienin kääntöpöytään "
+"liittyvien raiteiden välinen kulma. Tämä parametri löytyy \"Asetukset|"
+"Komennot\" valikosta."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:54
+#: ../../../../build/work/app/i18n/custmsg.h:40
+msgid ""
+"XTrackCAD periodically saves the current layout in a check point file. The "
+"'Check Point' item on the 'Options|Preferences' dialog controls how often "
+"the file is saved.\n"
+"You can recover your working file after a system crash by copying the "
+"checkpoint file (xtrkcad.ckp in the XTrackCAD Working directory) to file.xtc"
+msgstr ""
+"XTrackCAD tallentaa säännöllisesti ratasuunnitelman varmennustiedostoon. "
+"\"Automaattinen varmennus\" asetus \"Asetukset|Ominaisuudet\" ikkunassa "
+"määrää kuinka usein tiedosto tallennetaan.\n"
+"Voit palauttaa työkopiosi järjestelmän kaatumisen jälkeen kopioimalla "
+"varmennustiedosto xtrkcad.ckp, joka sijaitsee XTrackCADin työhakemistossa, ."
+"xtc tiedostoksi."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:57
+#: ../../../../build/work/app/i18n/custmsg.h:42
+msgid ""
+"The Parallel command is helpful to layout yards and sidings. If the "
+"Parallel track abuts with an existing track, it is automatically connected."
+msgstr ""
+"Luo rinnakkainen raide -komento on avuksi tehtäessä ratapihoja ja "
+"sivuraiteita. Jos luotava rinnakkainen raide rajoittuu olemassa olevaan "
+"raiteeseen, ne yhdistetään automaattisesti."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:59
+#: ../../../../build/work/app/i18n/custmsg.h:44
+msgid ""
+"You can use Shift-Drag in Select command to move and rotate selected "
+"tracks.\n"
+"Shift-Left-Drag moves tracks and Shift-Right-Drag rotates them.\n"
+"Control-Left-Drag can move labels."
+msgstr ""
+"Valitse-komennon ollessa käytössä voit siirtää ja pyörittää raiteita "
+"pitämällä vaihto-näppäin painettuna ja raahaamalla hiirellä. Vaihto + "
+"vasemmalla raahaus siirtää ja vaihto + oikealla raahaus pyörittää niitä.\n"
+"Control + vasemmalla raahaaminen siirtää merkintöjä."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:63
+#: ../../../../build/work/app/i18n/custmsg.h:46
+msgid ""
+"You can move and rotate the Snap Grid to align with existing track or "
+"benchwork."
+msgstr ""
+"Voit siirtää ja pyörittää kohdistusruudukkoa halutessasi kohdistaa jonkin "
+"olemassa olevan raiteen, runkorakenteen tai pöydän reunan kanssa."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:65
+#: ../../../../build/work/app/i18n/custmsg.h:48
+msgid ""
+"Use the Parts List command to measure track length.\n"
+"Select the tracks you want to measure and then click on the Parts List "
+"button. The report will list the total of length of the selected flex-"
+"track. You will have to add in the length of any Turnouts."
+msgstr ""
+"Käytä osaluetteloa mitataksesi radan pituuksia.\n"
+"Valitse mitattava rataosuus ja avaa sitten osaluettelo. Raportissa on "
+"laskettuna fleksi raiteen kokonaispituus valitulla rataosuudella. "
+"Palaraiteiden pituudet täytyy lisätä erikseen."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:68
+#: ../../../../build/work/app/i18n/custmsg.h:50
+msgid ""
+"The length of flex-track attached to each Turnout is displayed on layout "
+"near the end-points of the Turnouts.\n"
+"Make sure 'Lengths' option of the 'Label Enable' toggle button on the "
+"Display dialog is selected."
+msgstr ""
+"Kuhunkin palaraiteeseen liittyvän fleksiraiteen pituus näytetään "
+"ratasuunnitelmassa palaraiteiden päiden lähellä.\n"
+"Varmista että Asetukset|Näyttöasetukset ikkunassa on ruksittu kohta "
+"\"Pituudet\" näytettävien merkintöjen kohdalla."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:71
+#: ../../../../build/work/app/i18n/custmsg.h:52
+msgid ""
+"The Profile command can be used to find the length of a continous section of "
+"track.\n"
+"Select the track at the beginning and end of the section. The total length "
+"of track will be displayed on the Profile window in the lower right corner.\n"
+"Note: the Profile selects the shortest path between the two selected tracks, "
+"which might not be the path you are interested in. In this case, select the "
+"first track and then select other tracks along the path."
+msgstr ""
+"Profiili-komentoa voidaan käyttää selvitettäessä jonkin yhtenäisen "
+"raideosuuden pituus.\n"
+"Valitse halutun raideosuuden alku- ja loppupää, jolloin osuuden "
+"kokonaispituus näytetään profiilikäyrän vaaka-akselin oikeassa reunassa.\n"
+"Huom: Profiili-komento valitsee aina lyhyimmän reitin annettujen pisteiden "
+"välillä. Jos haluat itse valita toisen reitin, valitse ensin alkupiste ja "
+"etene sitten haluttua reittiä pitkin loppupisteeseen."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:75
+#: ../../../../build/work/app/i18n/custmsg.h:54
+msgid ""
+"Layers can be used to contain different groups of tracks or other features. "
+"You might use one layer for the main-line, another of staging tracks and "
+"another of benchwork.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:77
+#: ../../../../build/work/app/i18n/custmsg.h:56
+msgid ""
+"You can give each layer a name (by using the \"Manage|Layer\" dialog). This "
+"name will be displayed as the Balloon Help for the corresponding Layer "
+"button, if you have Balloon Help enabled on the \"Options|Display\" dialog."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:79
+#: ../../../../build/work/app/i18n/custmsg.h:58
+msgid ""
+"You can remove groups of buttons or the Hot Bar from the Main window to give "
+"you more room if you are not using some features. Also, the number of Layer "
+"buttons displayed is controlled by the \"Manage|Layers\" dialog."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:81
+#: ../../../../build/work/app/i18n/custmsg.h:60
+msgid ""
+"The size of the map window is controlled by the overall size of the room "
+"(specified on the layout dialog) and the map scale (on the display dialog). "
+"You can make the Map window larger (or smaller) by decreasing (or "
+"increasing) the map scale.\n"
+"XTrackCad will prevent you from making the map window too small or too large."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:84
+#: ../../../../build/work/app/i18n/custmsg.h:62
+msgid ""
+"You can unload parameter files you are not using by the Parameter Files "
+"dialog. This removes unused Turnout and Structure definitions from the Hot "
+"Bar and makes the program start faster."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:86
+#: ../../../../build/work/app/i18n/custmsg.h:64
+msgid ""
+"Right-Click on the Main window displays a menu list of commands as an "
+"alternative to pressing the buttons on the tool bar or using the menu "
+"accelerator keys."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:87
+#: ../../../../build/work/app/i18n/custmsg.h:66
+msgid ""
+"Holding down the Shift key while you Right-Click will display options for "
+"the current command (if any)."
+msgstr ""
+"Jos pidät vaihto-näppäintä painettuna, kun klikkaat hiiren oikealla "
+"painilleella, saat aktiiviseen komentoon liittyvän ponnahdusvalikon, mikäli "
+"komentoon sellainen liittyy."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:89
+#: ../../../../build/work/app/i18n/custmsg.h:68
+msgid ""
+"Right-Click on the Hot Bar displays a menu of the different groups of "
+"objects which you can use to jump to the group you are interested in.\n"
+"Pressing a numeric key (1-9 and 0) moves the Hot Bar to corresponding "
+"position (1 is the start, 5 is half way, 0 is the end)."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:92
+#: ../../../../build/work/app/i18n/custmsg.h:70
+msgid ""
+"Right-Drag on the Map window sets the origin and scale of the Main window.\n"
+"The Main window will be centered on the spot where you started the Draw and "
+"how far you Drag will control how large an area you can see on the Main "
+"window."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:95
+#: ../../../../build/work/app/i18n/custmsg.h:72
+msgid ""
+"To refresh the Main window, press Control-L (hold down the 'Ctrl' key and "
+"then press the 'l' key)."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:97
+#: ../../../../build/work/app/i18n/custmsg.h:74
+msgid ""
+"The File menu contains a list of the last 5 layouts you were working on."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:99
+#: ../../../../build/work/app/i18n/custmsg.h:76
+msgid ""
+"The Print command can optionally print lines representing the roadbed for "
+"all tracks. This is useful when printing full size (1:1) for cutting "
+"roadbed."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:101
+#: ../../../../build/work/app/i18n/custmsg.h:78
+msgid ""
+"Pressing the 'Esc' key cancels the current command and invokes the default "
+"command, (which is either Describe or Select)."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:103
+#: ../../../../build/work/app/i18n/custmsg.h:80
+msgid ""
+"When moving or rotating tracks on slow machines or with a large number of "
+"tracks, you can improve performance by changing the way tracks are drawn "
+"while being moved.\n"
+"Shift-Right click will display a menu containing options to draw tracks "
+"normally, as simple lines or just draw end-points."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:106
+#: ../../../../build/work/app/i18n/custmsg.h:82
+msgid ""
+"The colors of different parts of the Main window can be changed with the "
+"Colors dialog. In particular, the Snap Grid color can be changed to make it "
+"more visible when printed."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:108
+#: ../../../../build/work/app/i18n/custmsg.h:84
+msgid ""
+"By default objects are drawn in their normal colors. Tracks will be drawn "
+"in Black. Objects can also be drawn in the color according to their Layer. "
+"The color of a Layer is displayed on the corresponding Layer button.\n"
+"The Display dialog 'Color Layers' item has separate toggles for Tracks and "
+"non-Tracks."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:111
+#: ../../../../build/work/app/i18n/custmsg.h:86
+msgid ""
+"Each Layer can be drawn or hidden by the 'Visible' toggle on the Layers "
+"dialog."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:112
+#: ../../../../build/work/app/i18n/custmsg.h:88
+msgid ""
+"Short cut Layer buttons can also be displayed on the tool bar for up to the "
+"first 20 layers.\n"
+"This buttons allow to Show or Hide the layers."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:115
+#: ../../../../build/work/app/i18n/custmsg.h:90
+msgid "The name of the Layer is the Balloon Help for the Layer button."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:117
+#: ../../../../build/work/app/i18n/custmsg.h:92
+msgid ""
+"The playback speed of the Demos can be changed by using Speed drop down list "
+"on the Demo window."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:119
+#: ../../../../build/work/app/i18n/custmsg.h:94
+msgid ""
+"Many of the commands and dialogs can be invoked by special key combinations "
+"called Menu-Accelerators. These are listed on the Menus next to the command "
+"name. For example, Control-P will invoke the Print command."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:121
+#: ../../../../build/work/app/i18n/custmsg.h:96
+msgid ""
+"The Connect command is used to join Sectional track pieces that don't quite "
+"fit together.\n"
+"This command works by adding small gaps between other tracks to move the "
+"selected End-Points closer together."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:124
+#: ../../../../build/work/app/i18n/custmsg.h:98
+msgid ""
+"To copy a group of objects: Select the objects, press Control-c (or select "
+"Copy from the Edit menu), press Control-v (or select Paste from the Edit "
+"menu).\n"
+"The selected tracks will be copied to the layout and you can Move or Rotate "
+"them into position."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:127
+#: ../../../../build/work/app/i18n/custmsg.h:100
+msgid ""
+"In the Rotate (or Select) commands you can press Shift-Right-Click to "
+"display the Rotate menu which allows you to rotate the selected objects by a "
+"specific angle."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:129
+#: ../../../../build/work/app/i18n/custmsg.h:102
+msgid ""
+"You can use the Move-To-Join option of the Join command (hold down the Shift "
+"key) to move a group of Selected tracks to attach with some unselected End-"
+"Point."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:131
+#: ../../../../build/work/app/i18n/custmsg.h:104
+msgid ""
+"The Price List dialog (on the File Menu) is used to specify the prices of "
+"each type of Turnout, Sectional Track and Structure. Also, the length and "
+"price of flex-track pieces can be specified for each scale.\n"
+"This values will be used on the Parts List report to generate total cost of "
+"the selected objects."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:134
+#: ../../../../build/work/app/i18n/custmsg.h:106
+msgid ""
+"Areas of water can represented by a Polygon (use the Draw command) of the "
+"appropiate color.\n"
+"By using the Modify command, you can move, add or remove corners of the "
+"Polygon to fit the shape of the water.\n"
+"You use the Below command to place the Polygon below (or behind) other "
+"objects.\n"
+"\n"
+"You can also use a Polygon to represent aisles."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:140
+#: ../../../../build/work/app/i18n/custmsg.h:108
+msgid ""
+"When you create Benchwork you can move it below other objects by Selecting "
+"the Benchwork and use the Below command.\n"
+"Also, put Benchwork in a separate Layer so you can hide it if desired."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:143
+#: ../../../../build/work/app/i18n/custmsg.h:110
+msgid ""
+"You can enter Distances and Lengths using any format regardless of the "
+"Length Format on the Preferences dialog."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:144
+#: ../../../../build/work/app/i18n/custmsg.h:112
+msgid ""
+"You can enter Metric values when English is the default Units and vice versa."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:146
+#: ../../../../build/work/app/i18n/custmsg.h:114
+msgid ""
+"When entering Distances and Lengths you can press the '=' key to redisplay "
+"the value in the default format."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:147
+#: ../../../../build/work/app/i18n/custmsg.h:116
+msgid ""
+"You can also press the 's' key to convert a Prototype measurement to a Scale "
+"measurement by dividing by the ratio for the current scale."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:148
+#: ../../../../build/work/app/i18n/custmsg.h:118
+msgid ""
+"The 'p' key will convert a Scale measurement to a Prototype measurement."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:150
+#: ../../../../build/work/app/i18n/custmsg.h:120
+msgid ""
+"You can place cars on the layout using the Train Simulation command to check "
+"clearance points, track to track separation and coupling."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:152
+#: ../../../../build/work/app/i18n/custmsg.h:122
+msgid ""
+"Use the MoveTo button on the Custom Management dialog to move your custom "
+"Turnout, Structure and Car definitions to a .XTP parameter file."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:154
+#: ../../../../build/work/app/i18n/custmsg.h:124
+msgid ""
+"If you are printing multiple pages on a continuous feed printer (such a Dot "
+"Matrix) you can change the Page Order if necessary to print pages out in "
+"proper order."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:156
+#: ../../../../build/work/app/i18n/custmsg.h:126
+msgid ""
+"On the Car Item and Car Part dialogs, you can enter custom values for "
+"Manufacturer, Part and Road by typing the new value directly into the Drop "
+"Down List."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:158
+#: ../../../../build/work/app/i18n/custmsg.h:128
+msgid ""
+"On the Car Item dialog, you can change the Road, Number, Color and other "
+"values for a Car. This is useful if you repaint or renumber a car. \n"
+"You can also change the Coupler Mounting and Coupler Length if you change "
+"the couplers."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:161
+#: ../../../../build/work/app/i18n/custmsg.h:130
+msgid ""
+"You can Export your Car Inventory to a file in Comma-Separated-Value format "
+"which can be read by most spread-sheet programs."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:163
+#: ../../../../build/work/app/i18n/custmsg.h:132
+msgid "Use the Train Odometer to measure distances along the track."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:165
+#: ../../../../build/work/app/i18n/custmsg.h:134
+msgid ""
+"Holding down the Shift key when clicking the Zoom In or Zoom Out button will "
+"zoom to a programmed Drawing Scale. \n"
+"Holding down the Shift and Control keys when clicking a Zoom button will set "
+"it's program Zoom to the current Drawing Scale."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:168
+#: ../../../../build/work/app/i18n/custmsg.h:136
+msgid ""
+"You can trim the ends of turnouts by holding down the Shift key when using "
+"the Split command."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:170
+#: ../../../../build/work/app/i18n/custmsg.h:138
+msgid ""
+"The Split command can be used to create Block Gaps at end points between two "
+"tracks. \n"
+"Either rail or both rails can be gapped, which are drawn as thick lines."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:173
+#: ../../../../build/work/app/i18n/custmsg.h:140
+msgid ""
+"Trains will 'crash' if they hit another car when travelling faster than the "
+"'Max Coupling Speed' (on the Command Options dialog). \n"
+"They will also 'crash' if they hit the end of the track or an open "
+"turnout. \n"
+"Crashed trains must be manually moved back onto the track."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:177
+#: ../../../../build/work/app/i18n/custmsg.h:142
+msgid ""
+"You can add new track segments to a turnout definition or create a "
+"definition from individual tracks using the Group command."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:179
+#: ../../../../build/work/app/i18n/custmsg.h:144
+msgid ""
+"The center point and radius of Curved and Circle tracks can optionally be "
+"drawn. \n"
+"This feature is toggled by using the Move Label command and doing a Shift-"
+"Left-Click on the track."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:182
+#: ../../../../build/work/app/i18n/custmsg.h:146
+msgid ""
+"Turnout, Curved and Helix track labels can be individually turned on and off "
+"by doing a Shift-Right-Click on the track when using the Move Label command."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:184
+#: ../../../../build/work/app/i18n/custmsg.h:148
+msgid ""
+"You can use the Describe command to change the font size of Text objects."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:186
+#: ../../../../build/work/app/i18n/custmsg.h:150
+msgid ""
+"You can use the Describe command to change the size of Dimension Line labels."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:188
+#: ../../../../build/work/app/i18n/custmsg.h:152
+msgid ""
+"Normally Right-Click displays a popup menu of commands and Shift-Right-Click "
+"displays options for the current command. \n"
+"This can reversed by using the Right Click toggle button on the Command "
+"Options dialog."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:191
+#: ../../../../build/work/app/i18n/custmsg.h:154
+msgid ""
+"The Align item on the Rotate command options menu will let you Align "
+"selected objects with any unselected object. \n"
+"The selected objects are rotated so the first point is parallel to the "
+"second point you selected."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:194
+#: ../../../../build/work/app/i18n/custmsg.h:156
+msgid ""
+"Print To Bitmap allows you to print the track center line. \n"
+"This is useful if you later print the bitmap full size as a template when "
+"laying track."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:197
+#: ../../../../build/work/app/i18n/custmsg.h:158
+msgid ""
+"You can export the selected tracks to a DXF file which can be read by most "
+"CAD programs."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:199
+#: ../../../../build/work/app/i18n/custmsg.h:160
+msgid ""
+"Lengths and distances can be displayed in a variety of units and formats "
+"such as 1' 10 3/4\", 1ft 10.75in or 22.750. In Metric mode, distances can "
+"be displayed as millimeters, centimeters or meters. See the Length Format "
+"item on the Preferences dialog."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:201
+#: ../../../../build/work/app/i18n/custmsg.h:162
+msgid ""
+"Tracks that are too steep or curve too tightly are drawn in the Exception "
+"color (Yellow by default). \n"
+"This helps to identify potential problem areas. \n"
+"The maximum grade and minimum radius are set on the Preferences dialog."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:205
+#: ../../../../build/work/app/i18n/custmsg.h:164
+msgid ""
+"The Flip command produces a mirror-image of the selected tracks. \n"
+"If possible, right-hand turnouts are relabeled as left-hand turnouts (and "
+"vice versa)."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:208
+#: ../../../../build/work/app/i18n/custmsg.h:166
+msgid ""
+"Then Ungroup command will break turnouts and structures into individual "
+"track, line and shape segments. \n"
+"You can modify each segment and add new ones. \n"
+"Then use the Group command to update the definition."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:212
+#: ../../../../build/work/app/i18n/custmsg.h:168
+msgid "Dimension lines show the distance between two points."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:214
+#: ../../../../build/work/app/i18n/custmsg.h:170
+msgid ""
+"A variety of Benchwork (rectangular, L-girder and T-girder) can be drawn. \n"
+"Use the Below command to move the Benchwork below the track for proper "
+"display."
+msgstr ""
+"Erilaisia runkorakenteita voidaan piirtää (suora, L-palkki ja T-palkki).\n"
+"Käytä \"alimmaiseksi\" komentoa siirtääksesi runkorakenteen radan ja "
+"maisemoinnin alapuolelle."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:217
+#: ../../../../build/work/app/i18n/custmsg.h:172
+msgid ""
+"The Turnout Designer dialogs allow you to specify the width of any attached "
+"roadbed. \n"
+"As well, the color and thickness of the lines used to represent the roadbed "
+"can be specified."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:220
+#: ../../../../build/work/app/i18n/custmsg.h:174
+msgid ""
+"The Color dialog (on the Options menu) is used to change the color of "
+"different objects on the display. \n"
+"You can change the color of the Snap Grid and Borders, as well as Normal, "
+"Selected and Exception tracks."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:223
+#: ../../../../build/work/app/i18n/custmsg.h:176
+msgid ""
+"You can set the elevation (height) of track end-points. \n"
+"Elevations of intermediate end points can be computed automatically based on "
+"the distance to the nearest end points with defined elevations. \n"
+"Grades can also be displayed at selected end points. \n"
+"Please see the Elevations help and demo."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:228
+#: ../../../../build/work/app/i18n/custmsg.h:178
+msgid ""
+"Once you have elevations on some endpoints, you can use the Profile command "
+"to produce an elevation graph. \n"
+"The graph shows the selected elevations, grades and distances. \n"
+"Please see the Profile help and demo for details."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:232
+#: ../../../../build/work/app/i18n/custmsg.h:180
+msgid ""
+"You can draw tracks with wider lines for rails. \n"
+"Select the tracks and use Medium or Thick Tracks on the Edit menu."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:235
+#: ../../../../build/work/app/i18n/custmsg.h:182
+msgid ""
+"The Helix command is used to create a Helix track. \n"
+"You specify some parameters: height, radius, number of turns, grade and "
+"vertical separation between layers. \n"
+"These values are interrelated so changing one value will affect ohers. \n"
+"Then you can place the Helix and join to other tracks as you would a Circle "
+"track."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:240
+#: ../../../../build/work/app/i18n/custmsg.h:184
+msgid ""
+"Many objects on the layout have labels: Turnouts/Helix/Curved Titles, Track "
+"Lenghts, End-Point Elevations, Track Elevations and Cars. \n"
+"You can turn these labels on or off with the Label Enable toggle buttons on "
+"the Display options dialog."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:243
+#: ../../../../build/work/app/i18n/custmsg.h:186
+#, fuzzy
+msgid ""
+"If you hold down the Control key when using the Rotate command, the rotation "
+"will be done in increments of 15ᅵ."
+msgstr ""
+"Jos pidät control-näppäintä painettuna raahatessasi, pöydän reuna ja muut "
+"objektit vetävät toisiaan puoleensa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:245
+#: ../../../../build/work/app/i18n/custmsg.h:188
+msgid ""
+"When using the Rotate command, Shift-Right-Click displays a menu allowing "
+"you to rotate by specific amounts or to align the selected objects with "
+"another object."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:247
+#: ../../../../build/work/app/i18n/custmsg.h:190
+msgid ""
+"This is last tip. If you have any additions or comments, please let us know."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:25
+#: ../../../../build/work/app/i18n/custmsg.h:192
+#, fuzzy
+msgid ""
+"The unconnected endpoints of a straight or curved track can be changed with "
+"the 'Modify Track' command.\n"
+msgstr ""
+"Suorien ja kaarevien raiteiden irtonaisia päätepisteitä voidaan muuttaa "
+"Muokkaa-komennolla.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:31
+#: ../../../../build/work/app/i18n/custmsg.h:194
+#, fuzzy
+msgid ""
+"The endpoint of a straight track is selected and then Left-Dragged to change "
+"its length. A blue anchor shows that the length can be extended.\n"
+msgstr ""
+"Suoran raiteen pituutta muutetaan raahaamalla hiiren vasemmalla painikkeella "
+"sen päätepisteestä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:48
+#: ../../../../build/work/app/i18n/custmsg.h:196
+#, fuzzy
+msgid ""
+"If you try to drag the selected endpoint beyond the far endpoint, the track "
+"extends in the opposite direction.\n"
+msgstr ""
+"Katso mitä tapahtuu, jos raahaat valitun päätepisteen toisen päätepisteen "
+"yli.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:68
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:73
+#: ../../../../build/work/app/i18n/custmsg.h:199
+#, fuzzy
+msgid ""
+"A curved track is selected and it's new endpoint is determined by the angle "
+"to the cursor. \n"
+msgstr "Kaarteen päätepistettä voidaan siirtää kehää pitkin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:105
+#: ../../../../build/work/app/i18n/custmsg.h:201
+msgid "It's possible to almost create a complete circle.\n"
+msgstr "On mahdollista luoda lähes täydellinen ympyrä.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:202
+msgid ""
+"If you drag the mouse beyond the start of the curve the track becomes very "
+"short.\n"
+msgstr ""
+"Jos raahaat hiirellä kaarteen alkupisteen yli raiteesta tulee erittäin "
+"lyhyt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:113
+#: ../../../../build/work/app/i18n/custmsg.h:204
+msgid "Here you are warned that the track will be too short.\n"
+msgstr "Tällöin varoitetaan liian lyhyestä raiteesta.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:147
+#: ../../../../build/work/app/i18n/custmsg.h:206
+msgid ""
+"If you move the cursor away from the curve, you will create a straight track "
+"tangent to the curve.\n"
+msgstr ""
+"Jos siirrät osoitinta kauemmas kaarteesta, voit luoda suoran raiteen "
+"kaarteen tangentin suuntaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:169
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:174
+#: ../../../../build/work/app/i18n/custmsg.h:209
+#, fuzzy
+msgid ""
+"If you adjust the endpoint of a turnout or sectional track the track is "
+"extended by a similar track segment. The extension can be \n"
+msgstr ""
+"Jos muutat palaraiteen tai vaihteen päätepistettä, uusi raideosa luodaan "
+"edellisen jatkeeksi.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:210
+#, fuzzy
+msgid "a straight or a curve.\n"
+msgstr "ja suoraksi raideosaksi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:190
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:195
+#: ../../../../build/work/app/i18n/custmsg.h:213
+#, fuzzy
+msgid ""
+"You can change the radius of a straight or curved track that is connected at "
+"one endpoint by holding down the Shift key while Left-dragging on it.\n"
+msgstr ""
+"Voit muuttaa suoran tai kaarevan raiteen sädettä, mikäli se on toisesta "
+"päästä liitetty. Tämä tapahtuu pitämällä vaihto-näppäintä painettuna "
+"raahattaessa raiteen toisesta päästä hiiren vasemmalla painikkeella.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:214
+msgid ""
+"The blue cross anchor shows that this is possible when shift is held down "
+"with no buttons.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:209
+#: ../../../../build/work/app/i18n/custmsg.h:216
+#, fuzzy
+msgid ""
+"This lets you change a straight track into a curved track (and vice versa) "
+"as well as changing the radius of a curved track.\n"
+msgstr ""
+"Näin voit muuttaa suoran raiteen kaarteeksi ja päin vastoin, sekä muuttaa "
+"kaarteen sädettä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:252
+#: ../../../../build/work/app/i18n/custmsg.h:218
+#, fuzzy
+msgid ""
+"You can form an extension of a straight or curved Track that is connected at "
+"one endpoint using an easement by holding down the Ctrl key while Left-"
+"dragging on it.\n"
+msgstr ""
+"Voit muuttaa suoran tai kaarevan raiteen sädettä, mikäli se on toisesta "
+"päästä liitetty. Tämä tapahtuu pitämällä vaihto-näppäintä painettuna "
+"raahattaessa raiteen toisesta päästä hiiren vasemmalla painikkeella.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:219
+msgid ""
+"The blue half cross anchor shows that this is possible when the Ctrl key is "
+"held down with no mouse button.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:267
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:9
+#: ../../../../build/work/app/i18n/custmsg.h:222
+msgid "You can draw a variety of different types of benchwork:\n"
+msgstr "Voit piirtää eri tyyppisiä runkorakenteita:\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:223
+msgid "- rectangular (1x2, 2x4 etc)\n"
+msgstr "- suora (25 x 50 mm, 50 x 100 mm jne)\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:224
+msgid "- L girders\n"
+msgstr "- L-palkki\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:225
+msgid "- T girders\n"
+msgstr "- T-palkki\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:226
+msgid "You can also draw them in different orientations.\n"
+msgstr "Voit myös piirtää ne eri asentoihin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:25
+#: ../../../../build/work/app/i18n/custmsg.h:228
+msgid "We will draw two 3x6 inch L-girders.\n"
+msgstr "Piirrämme nyt 3x6 tuuman L-palkkeja.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:43
+#: ../../../../build/work/app/i18n/custmsg.h:230
+msgid ""
+"The flange of the top L-Girders is on the outside edge of the girders. We "
+"want to change the girder so both flanges are on the inside.\n"
+msgstr ""
+"Ylemmän L-palkin pystylape on rakenteen ulkopuolella. Haluamme että "
+"molempien palkkien pystylappeet ovat sisäpuolella.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:231
+msgid "We will use the <Describe> command for this.\n"
+msgstr "Käytämme määrittele-komentoa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:233
+msgid "Change the Orientation to Right.\n"
+msgstr "Muuta \"suunta\" \"oikeaksi\".\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:235
+msgid "Now both flanges are on the inside of the two girders.\n"
+msgstr "Nyt kummankin L-palkin pystylappeet ovat sisäpuolella.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:34
+#: ../../../../build/work/app/i18n/custmsg.h:237
+msgid ""
+"Pushing the <Describe> button will cancel any other command in progress.\n"
+msgstr ""
+"Määrittele -komennon valitseminen keskeyttää minkä tahansa meneillään olevan "
+"komennon.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:238
+#, fuzzy
+msgid ""
+"Here we will begin to create a curved track which is a two step process.\n"
+msgstr ""
+"Tässä aloitamme luomaan kaarevaa raidetta, joka on kaksiosainen toiminto.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:47
+#: ../../../../build/work/app/i18n/custmsg.h:240
+msgid ""
+"When we clicked on the <Describe> button, the current command was "
+"cancelled.\n"
+msgstr ""
+"Klikkaamalla Määrittele -painiketta, sen hetkinen komento peruutettiin.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:241
+#, fuzzy
+msgid ""
+"When in <Describe> mode, selecting any object will print a description in "
+"the Status Bar and display a dialog showing properties of the clicked-on "
+"object.\n"
+msgstr ""
+"Määrittely -tilassa minkä tahansa objektin valinta tulostaa sen kuvauksen "
+"tilariville sekä avaa ikkunan, jossa esitetään valitun kohteen "
+"ominaisuudet.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:57
+#: ../../../../build/work/app/i18n/custmsg.h:243
+#, fuzzy
+msgid ""
+"Certain parameters of the object can be changed. In this case we'll change "
+"the length\n"
+msgstr ""
+"Tiettyjä parametreja voi muuttaa. Tässä tapauksesa muutamme pituutta.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:65
+#: ../../../../build/work/app/i18n/custmsg.h:245
+msgid "Let's look at the Turnout...\n"
+msgstr "Katsokaamme vaihdetta...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:73
+#: ../../../../build/work/app/i18n/custmsg.h:247
+#, fuzzy
+msgid "and change the turnout name and part no.\n"
+msgstr "ja muuttakaamme sen otsikkoa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:84
+#: ../../../../build/work/app/i18n/custmsg.h:249
+#, fuzzy
+msgid "You can change the contents of text...\n"
+msgstr "Voit muuttaa tekstin sisältöä...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:93
+#: ../../../../build/work/app/i18n/custmsg.h:251
+msgid "and its size.\n"
+msgstr "ja kokoa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:100
+#: ../../../../build/work/app/i18n/custmsg.h:253
+#, fuzzy
+msgid ""
+"If you select a note, the Description dialog appears which displays the "
+"contents of the note.\n"
+msgstr ""
+"Jos valitset muistiinpanon, avautuu ikkuna, josta voit muuttaa muistiinpanon "
+"sisältöä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:112
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcircle.xtr:7
+#: ../../../../build/work/app/i18n/custmsg.h:256
+msgid ""
+"Like the <Curve> track command, there are several ways to create a Circle "
+"track.\n"
+msgstr "Kuten kaarteet, myös ympyräradat voidaan luoda usealla eri tavalla.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:257
+msgid ""
+"The first is to specify a fixed radius and simply drag the Circle into "
+"position.\n"
+msgstr ""
+"Ensimmäinen tapa on määritellä ympyrän säde ja yksinkertaisesti raahaamalla "
+"ympyrä paikoilleen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:258
+msgid "We will change the Radius before proceeding.\n"
+msgstr "Muutamme säteen ennen kuin jatkamme.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcircle.xtr:24
+#: ../../../../build/work/app/i18n/custmsg.h:260
+msgid "The next method is to drag from the edge of the Circle to the center.\n"
+msgstr "Seuraava tapa on raahata ympyrän kehältä kohti keskipistettä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcircle.xtr:37
+#: ../../../../build/work/app/i18n/custmsg.h:262
+msgid ""
+"The last is similar, but you drag from the center of the Circle to the "
+"edge.\n"
+msgstr ""
+"Viimeinen tapa on vastaavanlainen, mutta raahataan ympyrän keskipisteestä "
+"ulos päin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcircle.xtr:50
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:157
+#: ../../../../build/work/app/i18n/custmsg.h:265
+msgid ""
+"We have built a siding using Sectional track and have 2 End-Points that "
+"don't line up and are not connected automatically when placing the sectional "
+"track.\n"
+msgstr ""
+"Olemme rakentaneet sivuraiteen käyttäen palaraiteita. Kaksi päätepistettä "
+"eivät ole riittävän kohdakkain, jotta ne olisi automaattisesti liitetty "
+"toisiinsa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:162
+#: ../../../../build/work/app/i18n/custmsg.h:267
+msgid ""
+"We use the <Connect> command to adjust neighboring tracks so the gap is "
+"closed.\n"
+msgstr ""
+"Käytämme liitä-komentoa säätääksemme viereisiä raideosia siten, että rako "
+"saadaan suljettua.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:268
+msgid ""
+"Note: the adjustments are only done on tracks which have only 1 or 2 "
+"connections. In this example the Turnouts would not be affected.\n"
+msgstr ""
+"Huom: Säätö tehdään vain niille raideosille, joilla on vain yksi tai kaksi "
+"liitosta. Tässä esimerkissä vaihteet jäävät koskemattomiksi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:175
+#: ../../../../build/work/app/i18n/custmsg.h:270
+msgid "And now the gap is closed.\n"
+msgstr "Nyt rako on suljettu.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:181
+#: ../../../../build/work/app/i18n/custmsg.h:272
+msgid "Other tracks have been shifted slightly to close the gap.\n"
+msgstr "Muita raideosia siirrettiin hieman, jotta rako saatiin suljettua.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:188
+#: ../../../../build/work/app/i18n/custmsg.h:274
+msgid "You can see these slight mis-alignments.\n"
+msgstr "Voit nähdä hienoisen heiton raideosien kohdistuksessa.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:275
+msgid "But they will have no effect when the layout is actually built.\n"
+msgstr "Mutta sillä ei ole merkitystä kun rata todellisuudessa rakennetaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:196
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:353
+#: ../../../../build/work/app/i18n/custmsg.h:278
+msgid ""
+"After working with Sectional track you might get to point where these mis-"
+"alignments have accumulated and you wish to remove them.\n"
+msgstr ""
+"Työskenneltyäsi palaraiteiden kanssa voit päätyä tilanteeseen, jossa nämä "
+"kohdistusten heitot ovat kertautuneet ja haluat korjata ne.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:279
+msgid ""
+"You can remove these slight mis-alignments by tightening the tracks starting "
+"from a unconnected End-Point. Use Shift-Left-Click with the <Connect> "
+"command.\n"
+msgstr ""
+"Voit poistaa kohdistusten heiton tiukentamalla raideosat alkaen irrallisesta "
+"päätepisteestä. Käytä liitä-komentoa ja pidä vaihto-näppäintä painettuna kun "
+"klikkaat hiiren vasemmalla painikkeella.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:280
+msgid "First use the <Split> command to disconnect the tracks.\n"
+msgstr "Ensin irrotamme raideosat pilko-komennolla.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:363
+#: ../../../../build/work/app/i18n/custmsg.h:282
+msgid ""
+"Then with the <Connect> command, Shift-Left-Click on the 2 End-Points.\n"
+msgstr ""
+"Sitten liitä-komennolla, vaihto + hiiren vasen klikkaus molempiin "
+"päätepisteisiin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:378
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:199
+#: ../../../../build/work/app/i18n/custmsg.h:285
+msgid "In example shows a simple figure-8 layout using Sectional track.\n"
+msgstr ""
+"Tässä esimerkissä on yksinkertainen palaraiteista tehty kahdeksikkorata.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:286
+msgid ""
+"You will notice that the tracks do not line up exactly in one location.\n"
+msgstr "Huomaat, etteivät raiteet aivan kohtaa yhdessä kohdassa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:211
+#: ../../../../build/work/app/i18n/custmsg.h:288
+msgid ""
+"We can use the <Connect> command to move the connecting tracks slightly and "
+"connect the 2 End-Points.\n"
+msgstr ""
+"Voimme käyttää liitä-komentoa siirtääksemme raideosia hieman, jotta raiteet "
+"saadaan liitetyksi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:224
+#: ../../../../build/work/app/i18n/custmsg.h:290
+msgid "The two End-Points are now aligned and connected.\n"
+msgstr "Päätepisteet ovat nyt kohdistettu ja liitetty.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:231
+#: ../../../../build/work/app/i18n/custmsg.h:292
+msgid "The connection was made by adding small gaps in other tracks.\n"
+msgstr "Liitos tehtiin lisäämällä hienoisia rakoja muiden raideosien väliin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:238
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:7
+#: ../../../../build/work/app/i18n/custmsg.h:295
+msgid "There are several ways to create a Curved track.\n"
+msgstr "On useita tapoja luoda kaarevia raiteita.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:296
+msgid ""
+"You can choose which to use by clicking on the small button to the left of "
+"<Curve> command button if the current Curve command is not the one you "
+"want.\n"
+msgstr ""
+"Tavan voi valita Kaarre-painikkeen oikealla puolella olevasta pienestä "
+"nuolesta avautuvan valikon kautta.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:297
+msgid ""
+"The first is by clicking on the first End-Point and dragging in the "
+"direction of the Curve.\n"
+msgstr ""
+"Ensimmäinen tapa on klikata kaarteen ensimmäistä päätepistettä ja raahata "
+"hiirellä kaarteen suntaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:20
+#: ../../../../build/work/app/i18n/custmsg.h:299
+msgid ""
+"You will see a straight track with a double ended Red arrow at the end.\n"
+msgstr "Näet suoran raiteen, jonka päässä on kaksisuuntainen punainen nuoli.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:300
+msgid "Click and drag on one of the Red arrows to complete the Curve.\n"
+msgstr "Raahaa nuolesta asetellaksesi kaarre oikean muotoiseksi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:302
+msgid ""
+"The next method is to click at one End-Point and drag to the center of the "
+"Curve.\n"
+msgstr ""
+"Seuraava tapa on klikata kaarteen päätepistettä ja raahata hiirellä kaarteen "
+"keskipisteeseen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:50
+#: ../../../../build/work/app/i18n/custmsg.h:304
+msgid ""
+"Now you will see the double ended Red arrow connected to the center of the "
+"Curve marked by a small circle.\n"
+msgstr ""
+"Näet kaksisuuntaisen nuolen, joka on yhdistetty viivalla karteen "
+"keskipistettä kuvaavaan pieneen ympyrään.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:305
+msgid "As before, drag on one of the Red arrows to complete the Curve.\n"
+msgstr "Kuten aikaisemminkin, raahaa nuolesta viimeistelläksesi kaarteen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:307
+msgid ""
+"The next method is similar to the last except that you drag first from the "
+"center of the Curve to one End-Point.\n"
+msgstr ""
+"Seuraava tapa on saman kaltainen kuin edellinen, paitsi että toiminto "
+"aloitetaan raahaamalla kaarteen keskipisteestä kaarteen päätepisteeseen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:80
+#: ../../../../build/work/app/i18n/custmsg.h:309
+msgid "Once again, drag on a Red arrow to complete the Curve.\n"
+msgstr "Viimeistele kaarre raahaamalla nuolesta.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:90
+#: ../../../../build/work/app/i18n/custmsg.h:311
+msgid ""
+"The last method begins by drawing a line between the two End-Points of the "
+"Curve. This forms the Chord of the Curve.\n"
+msgstr ""
+"Viimeinen tapa aloitetaan vetämällä viiva kaarteen päätepisteiden välille. "
+"Tämä muodostaa kaarteen jänteen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:108
+#: ../../../../build/work/app/i18n/custmsg.h:313
+msgid "Now drag on a Red arrow to complete the Curve.\n"
+msgstr "Viimeistele kaarre nuolesta raahaamalla.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:118
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:112
+#: ../../../../build/work/app/i18n/custmsg.h:316
+msgid "This demo will construct a control panel for part of a bigger layout.\n"
+msgstr ""
+"Tässä demossa luodaan ohjauspaneeli osaksi suurempaa ratasuunnitelmaa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:117
+#: ../../../../build/work/app/i18n/custmsg.h:318
+msgid "For our control panel we will use Œ\" lines. \n"
+msgstr "Ohjauspaneelissa käytämme 1/4 tuuman viivoja.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:319
+msgid "Also, we will use a 1/8\" grid to lay out our controls.\n"
+msgstr "Käytämme myös 1/8 tuuman kohdistusruudukkoa.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:320
+msgid ""
+"First, we will set up the Snap Grid for 1\" grid lines and 8 divisions.\n"
+msgstr ""
+"Ensin asetamme kohdistusruudukkoon 1 tuuman ruutuvälin 8 osan jaolla.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:322
+msgid "Now, clear the layout and turn on the Snap Grid.\n"
+msgstr ""
+"Nyt tyhjennämme ratasuunnitelman ja otamme kohdistusruudukon käyttöön.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:147
+#: ../../../../build/work/app/i18n/custmsg.h:324
+msgid "First step: draw the lines representing the tracks.\n"
+msgstr "Ensimmäiseksi: Piirrä viivat kuvaamaan raiteita.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:325
+#, fuzzy
+msgid "We specify the line width in pixels when at 1:1 zoom.\n"
+msgstr "Määrittelemme viivan paksuuden pikseleinä.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:326
+#, fuzzy
+msgid ""
+"To create a 1/4\" line, divide the dots-per-inch (DPI) of your display by "
+"4.\n"
+msgstr ""
+"Luodaksesi 1/4 tuuman viivan, jaa näyttösi DPI (pisteitä tuumalla, dots per "
+"inch) neljällä ja sitten piirron mittakaavalla (joka tässä on 2).\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:327
+#, fuzzy
+msgid ""
+"For MS-Windows the DPI is usually 98, so choose: 98/4 = 24 (approximately).\n"
+msgstr ""
+"Microsoft Windows käyttää yleensä DPI arvoa 98, joten valitse: 98/4/2 = 12 "
+"(suunnilleen).\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:328
+#, fuzzy
+msgid "For Linux, the DPI is usually 72, so choose: 72/4 = 18.\n"
+msgstr "Linuxissa DPI on usein 72, joten valitse: 72/4/2 = 9.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:495
+#: ../../../../build/work/app/i18n/custmsg.h:330
+msgid ""
+"Notice how the Snap Grid keeps the main line and siding track parallel and "
+"the connecting tracks and spur at a 45° angle.\n"
+msgstr ""
+"Huomaa, kuinka kohdistusruudukko auttaa pitämään pääradan ja sivuraiteen "
+"saman suuntaisina, sekä yhdistävät raiteet ja piston 45° kulmassa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:503
+#: ../../../../build/work/app/i18n/custmsg.h:332
+msgid "Second step: add LEDs for the turnout position indicators.\n"
+msgstr "Toinen vaihe: Lisää LEDit osoittamaan vaihteiden asentoa.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:333
+msgid "We will use T1 red and green LEDs.\n"
+msgstr "Käytämme punaisia ja vihreitä T1 LEDejä.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:334
+msgid "We will zoom in to show positioning.\n"
+msgstr "Lähennämme näkymää asettelun helpottamiseksi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:513
+#: ../../../../build/work/app/i18n/custmsg.h:336
+msgid ""
+"Notice that when we are in the correct position (on the 1/8\" grid), the "
+"Marker lines on the bottom and left rulers will high-light the tick marks. "
+"When both ticks are high-lighted, press the space bar to finalize the LED.\n"
+msgstr ""
+"Huomaa että kun LEDi on oikeassa kohdassa kohdistusruudukon jakoon nähden, "
+"viivaimien merkinnät korostetaan. Kun sekä vaaka- että pystyviivaimen "
+"merkinnät ovat korostettuna, paina välilyöntiä hyväksyäksesi LEDin "
+"asettelun.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:558
+#: ../../../../build/work/app/i18n/custmsg.h:338
+msgid "Now we'll add push buttons to control the turnouts.\n"
+msgstr "Nyt lisäämme painonapit, joilla ohjataan vaihteita.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:595
+#: ../../../../build/work/app/i18n/custmsg.h:340
+msgid "Let's add signals to our siding.\n"
+msgstr "Lisätään sivuraiteelle opastimet.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:341
+msgid ""
+"The entrance to the siding will be protected by double headed signals.\n"
+msgstr "Sivuraiteelle tulo suojataan kaksiosaisella opastimella.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:342
+msgid "We'll select a signal from the HotBar and place it into position.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:608
+#: ../../../../build/work/app/i18n/custmsg.h:344
+msgid ""
+"We rotate the signals by Shift-Right-Click and select 90° CW on the popup "
+"menu. We can not show the popup menu in demo mode, but will simulate the "
+"effect.\n"
+msgstr ""
+"Pyöritämme opastimia pitämällä vaihto-näppäintä painettuna ja klikkaamalla "
+"hiiren oikealla painikkeella avataksemme ponnahdusvalikon. Sieltä valitsemme "
+"90° MP (myötäpäivään). Demossa ei voida näyttää ponnahdusvalikkoa, mutta "
+"näytämme komennon vaikutuksen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:657
+#: ../../../../build/work/app/i18n/custmsg.h:346
+msgid "The exits from the siding will be protected by single headed signals.\n"
+msgstr "Sivuraiteelta lähdöt suojataan yksiosaisilla opastimilla.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:711
+#: ../../../../build/work/app/i18n/custmsg.h:348
+msgid "Now for some touch-ups.\n"
+msgstr "Nyt kohennetaan hieman kaaviota.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:349
+msgid "Notice when the line meet at an angle there is a gap.\n"
+msgstr "Huomaa viivojen liitoskohdissa pienet raot.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:350
+msgid "We will fill this gap with the Œ\" dot.\n"
+msgstr "Näytämme ne 1/4 tuuman pisteillä.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:351
+msgid ""
+"Note: Win95/Win98/WinME does not support drawing lines with flat end-caps, "
+"but only with round end-caps.\n"
+msgstr ""
+"Huom: Win96/Win98/WinME ei tue tasapäisten viivojen piirtoa, vaan ainoastaan "
+"pyöreäpäisiä viivoja.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:352
+msgid "Users on those platforms will not see the gap.\n"
+msgstr "Mainittujen käyttöjärjestelmien käyttäjät eivät näe näitä rakoja.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:734
+#: ../../../../build/work/app/i18n/custmsg.h:354
+msgid ""
+"Add an arrow head to indicate the tracks that connect to the rest of the "
+"layout.\n"
+msgstr ""
+"Lisää nuolenkärjet kuvaamaan raiteiden jatkumista muihin radan osiin.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:355
+msgid "The second arrow will be flipped 180°\"\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:772
+#: ../../../../build/work/app/i18n/custmsg.h:357
+msgid "And add some labels.\n"
+msgstr "Lisää joitakin merkintöjä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:831
+#: ../../../../build/work/app/i18n/custmsg.h:359
+msgid ""
+"We want to print our control panel onto a 8œx11 page, but the control panel "
+"is a bit too wide.\n"
+msgstr ""
+"Haluamme tulostaa ohjeuspaneelin 8 1/2 x 11 tuuman kokoiseksi, mutta "
+"ohjauspaneeli on hieman liian suuri.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:360
+msgid "Lets tighten it up a bit.\n"
+msgstr "Tiivistetään hieman.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:361
+msgid ""
+"First turn the Snap Grid on again so any moves we make will keep objects on "
+"the grid.\n"
+msgstr ""
+"Ota taas kohdistusruudukko käyttöön, jotta objektit pysyvät linjassa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:840
+#: ../../../../build/work/app/i18n/custmsg.h:363
+#, fuzzy
+msgid "Lets move the spur track to the left 3/4\"\n"
+msgstr "Siirrämme pistoraidetta vasemmalle 3/4 tuumaa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:862
+#: ../../../../build/work/app/i18n/custmsg.h:365
+msgid "Now move the right side of the siding over.\n"
+msgstr "Siirretään liikennepaikan oikeaa puolta vasemmalle.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:882
+#: ../../../../build/work/app/i18n/custmsg.h:367
+msgid "Now, adjust the ends of the mainline and siding tracks.\n"
+msgstr "Lyhennä nyt pääraide ja sivuraide sopivan mittaisiksi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:902
+#: ../../../../build/work/app/i18n/custmsg.h:369
+msgid "And move the title over as well.\n"
+msgstr "Siirrä myös otsikkoa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:919
+#: ../../../../build/work/app/i18n/custmsg.h:371
+msgid "Now you can print it.\n"
+msgstr "Nyt voit tulostaa sen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:372
+msgid "The cross-hairs on the LEDs and switch show the centers for drilling.\n"
+msgstr ""
+"LEDien ja kytkimien ristikkoviiva osoittaa niiden keskipisteet poraamista "
+"varten.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:33
+#: ../../../../build/work/app/i18n/custmsg.h:374
+msgid ""
+"Pressing the <Delete> button lets you delete selected tracks from the "
+"layout.\n"
+msgstr ""
+"Poista-painikkeella voidaan poistaa valitut raiteet ratasuunnitelmsta.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:375
+msgid ""
+"First you select the tracks you want to delete, and then press the <Delete> "
+"button.\n"
+msgstr ""
+"Valitse ensin raideosat, jotka haluat poistaa ja paina sitten Poista-"
+"nappia.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:47
+#: ../../../../build/work/app/i18n/custmsg.h:377
+msgid ""
+"If you delete a track connected to an easement curve, then the easement "
+"curve is deleted as well.\n"
+msgstr ""
+"Jos poistat raideosan, joka on liitetty kaarreloivennukseen, poistetaan myös "
+"kaarreloivennus.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:57
+#: ../../../../build/work/app/i18n/custmsg.h:379
+msgid "You can use the <Undo> command to undelete tracks.\n"
+msgstr "Voit käyttää Kumoa-toimintoa palauttaaksesi poistamasi raideosat.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:67
+#: ../../../../build/work/app/i18n/custmsg.h:381
+msgid ""
+"If you Left-Drag on the layout you can select all tracks within an area.\n"
+msgstr ""
+"Raahaamalla hiiren vasemmalla voit valita kaikki raideosat valitulta "
+"alueelta.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:382
+msgid ""
+"Note, only tracks within the selected area are deleted. Since the easement "
+"curve is connected to a deleted track, it is deleted as well.\n"
+msgstr ""
+"Huom: Vain valitulla alueella olevat raideosat poistetaan. Koska "
+"kaarreloivennus liittyy poistettavaan raideosaan, poistetaan se myös.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:80
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:385
+msgid ""
+"The demo also simulates entering values and selecting options on various "
+"dialogs.\n"
+msgstr ""
+"Tässä demossa simuloidaan myös arvojen syöttämistä ja valintojen tekemistä "
+"dialogeissa (ikkunoissa).\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:386
+msgid ""
+"This is simulated by drawing a rectangle around the control when values are "
+"entered or changed.\n"
+msgstr ""
+"Tämä esitetään piirtämällä nelikulmio sen kontrollin ympärille, jonka arvoja "
+"ollaan syöttämässä tai muuttamassa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:13
+#: ../../../../build/work/app/i18n/custmsg.h:388
+msgid ""
+"Here we are going to make some changes to the Display dialog. Notice how "
+"this is simulated.\n"
+msgstr ""
+"Tässä teemme joitakin muutoksia Näyttö asetuksiin. Huomaa esitystapa.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:389
+msgid "First we are setting 'Draw Tunnel' to 'Normal'\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:21
+#: ../../../../build/work/app/i18n/custmsg.h:391
+msgid "Now we're changing 'Label Font Size' to '56'\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:26
+#: ../../../../build/work/app/i18n/custmsg.h:393
+msgid "We'll change some other options\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:38
+#: ../../../../build/work/app/i18n/custmsg.h:395
+msgid ""
+"This effect is only used in demonstration mode. During normal operation you "
+"will not see this.\n"
+msgstr ""
+"Tämä tehoste on käytössä ainoastaan demo -tilassa. Normaalissa käyttötilassa "
+"näin ei ole.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:45
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdimlin.xtr:117
+#: ../../../../build/work/app/i18n/custmsg.h:398
+msgid "Dimension Lines are used to mark the distances between two points.\n"
+msgstr ""
+"Mittajanoja käytetään merkitsemään kahden pisteen välisiä etäisyyksiä.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:399
+msgid ""
+"Here we will create a Dimension Line to show the separation between two "
+"tracks.\n"
+msgstr ""
+"Tässä luodaan mittajana näyttämään kahden raiteen välistä etäisyyttä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdimlin.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:401
+msgid ""
+"We might also want to measure the distance between two structures. In this "
+"case we will use a larger dimension line.\n"
+msgstr ""
+"Haluamme myös mitata kahden rakennuksen välisen etäisyyden. Tässä "
+"tapauksessa käytämme suurempaa mittajanaa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdimlin.xtr:143
+#: ../../../../build/work/app/i18n/custmsg.h:403
+msgid ""
+"We can use the <Describe> command to change the position of the Dimension "
+"Line and the size of the numbers.\n"
+msgstr ""
+"Voimme käyttää määrittele-komentoa muuttaaksemme mittajanan sijaintia ja "
+"numeroiden kokoa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdimlin.xtr:161
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:406
+msgid ""
+"This example will show the effect of using easements while joining tracks.\n"
+msgstr ""
+"Tässä esimerkissä näytetään kaarreloivennuksen vaikutus yhdistettäessä "
+"raiteita.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:407
+#, fuzzy
+msgid "First, we will enable Cornu Easements and select Join\n"
+msgstr "Ensiksi otetaan kaarreloivennus käyttöön.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:28
+#: ../../../../build/work/app/i18n/custmsg.h:409
+#, fuzzy
+msgid "First select one end of the track\n"
+msgstr "Ensin asetamme korkeustasot haarojen päihin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:411
+#, fuzzy
+msgid "Now the end of different track\n"
+msgstr "Siirretty päätepisteen taakse"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:49
+#: ../../../../build/work/app/i18n/custmsg.h:413
+#, fuzzy
+msgid "You can reposition the ends by dragging them \n"
+msgstr ""
+"Voit tulostaa suunnittelemasi vaihteen tarkastaaksesi sen mitat ennen "
+"tallentamista.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:65
+#: ../../../../build/work/app/i18n/custmsg.h:415
+msgid "When you are happy, Hit Enter or Space, if not use Esc\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:73
+#: ../../../../build/work/app/i18n/custmsg.h:417
+msgid ""
+"The Curve is made up of Beziers parts that smooth the shape the best way it "
+"can be in the space available\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:87
+#: ../../../../build/work/app/i18n/custmsg.h:419
+msgid "Now, we'll show traditional easements instead.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:142
+#: ../../../../build/work/app/i18n/custmsg.h:421
+msgid ""
+"We've selected sharp easements. The minimum radius curve we can use will be "
+"9.75\"\n"
+msgstr ""
+"Olemme valinneet jyrkät kaarreloivennukset. Pienin käytettävissä oleva "
+"kaarresäde on 9,75 tuumaa.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:422
+msgid "Notice the label on the Easement button has changed to 'Sharp'.\n"
+msgstr ""
+"Huomaa että kaarreloivennus-painikkeen (Easements) tila on muuttunut "
+"\"jyrkäksi\" (Sharp).\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:157
+#: ../../../../build/work/app/i18n/custmsg.h:424
+msgid ""
+"Note the connecting curve does not quite meet the straight tracks. This the "
+"'Offset'.\n"
+msgstr ""
+"Huomaa, ettei yhdistävä kaarre kohtaa aivan tarkasti suoria raiteita. Tämä "
+"on \"siirtymä\".\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:165
+#: ../../../../build/work/app/i18n/custmsg.h:426
+msgid "Here the connecting curve is too small.\n"
+msgstr "Tässä yhdistävä kaarre on liian pieni.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:175
+#: ../../../../build/work/app/i18n/custmsg.h:428
+msgid ""
+"The connecting curve is made of three tracks, the curve and two easement "
+"segments on each end.\n"
+msgstr ""
+"Yhdistävä kaarre on tehty kolmesta raideosasta: kaarteesta ja molemmissa "
+"päissä olevista kaarreloivennuksesta.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:112
+#: ../../../../build/work/app/i18n/custmsg.h:430
+#, fuzzy
+msgid ""
+"We have designed part of the layout with a siding, 2 branches and a spiral "
+"loop. We want to set elevations.\n"
+msgstr ""
+"Meillä on ratasuunnitelma jossa on sivuraide, kaksi haaraa ja silmukka, joka "
+"muodostaa radalle risteyksen.\n"
+" Haluamme asetella radan korkeustasot.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:431
+msgid "Note: make sure you set endpoint elevations on the Display dialog.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:122
+#: ../../../../build/work/app/i18n/custmsg.h:433
+msgid "First we will set elevations at the end of the branches.\n"
+msgstr "Ensin asetamme korkeustasot haarojen päihin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:435
+msgid "We'll select the end of the top branch and set the Elevation to 4\"\n"
+msgstr ""
+"Valitsemme ylemmän haaran pään ja asetamme sille haluamamme korkeustason.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:436
+msgid "First, click on the End-Point.\n"
+msgstr "Klikkaa ensin päätepistettä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:142
+#: ../../../../build/work/app/i18n/custmsg.h:438
+msgid "Next, pick Defined on the Elevation dialog Radio box.\n"
+msgstr ""
+"Seuraavaksi muuta korkeustasojen määrittely ikkunassa tyypiksi \"Määritelty"
+"\".\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:148
+#: ../../../../build/work/app/i18n/custmsg.h:440
+msgid "And set the Elevation to 4.\n"
+msgstr "Ja aseta haluttu korkeustaso.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:156
+#: ../../../../build/work/app/i18n/custmsg.h:442
+msgid "Now, select the other branch and set it's elevation to 2\"\n"
+msgstr "Vlitse nyt toinen haara ja aseta sen korkeustaso.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:170
+#: ../../../../build/work/app/i18n/custmsg.h:444
+#, fuzzy
+msgid "We can move the Elevation label by using Ctrl-Left-Drag\n"
+msgstr ""
+"Voimme siirtää korkeustasojen merkintöjä raahaamalla hiiren oikealla "
+"painikkeella.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:182
+#: ../../../../build/work/app/i18n/custmsg.h:446
+msgid "Now, we set the Elevation at one end of the Siding.\n"
+msgstr "Asetetaan nyt sivuraiteen toisen pään korkeustaso.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:209
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:215
+#: ../../../../build/work/app/i18n/custmsg.h:449
+msgid "We want to find the elevations where the 2 tracks cross.\n"
+msgstr "Voimme selvittää korkeustasot raiteiden risteyskohdassa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:224
+#: ../../../../build/work/app/i18n/custmsg.h:451
+msgid "We picked an End-Point on the upper track.\n"
+msgstr "Valitsimme raiteiden liitoskohdan ylemmältä radalta.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:452
+#, fuzzy
+msgid ""
+"XTrackCAD has computed the Elevation (2.33\") at this point based on the "
+"Elevation at the siding and a combination of the of the first Elevations.\n"
+msgstr ""
+"XTrackCAD on laskenut tälle pisteelle korkeustason aiemmin antamiemme "
+"korkeustasojen perusteella.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:453
+msgid ""
+"We create a Computed Elevation here that will be automatically adjusted "
+"whenever the other Elevations are changed.\n"
+msgstr ""
+"Luomme tähän \"lasketun\" korkeustason, joka päivitetään automaattisesti jos "
+"muita korkeustasoja muutetaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:243
+#: ../../../../build/work/app/i18n/custmsg.h:455
+msgid ""
+"The Compute Elevation is based on Elevations at end of both of the "
+"branches. We may want to base the Elevation on only one branch. For "
+"example if one branch was the mainline we don't want the other branch "
+"affecting this Computed Elevation.\n"
+msgstr ""
+"Laskettu korkeustaso perustuu molempien haarojen korkeustasoihin. Saatamme "
+"haluta sitoa lasketun korkeustason vain yhteen haaraan. Jos esimerkiksi yksi "
+"haaroista on päärata, emme halua muiden haarojen vaikuttavan tähän "
+"laskettuun korkeustasoon.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:456
+msgid "We do this by Ignoring the branch we don't want.\n"
+msgstr "Teemme tämän hylkäämällä haaran, jota emme halua käyttää.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:457
+msgid "We'll ignore the lower branch.\n"
+msgstr "Hylkäämme alemman haaran.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:258
+#: ../../../../build/work/app/i18n/custmsg.h:459
+#, fuzzy
+msgid ""
+"Notice at the endpoint where the tracks cross, we see the elevation has "
+"changed from 2.33 to 2.64.\n"
+msgstr ""
+"Huomaa kuinka risteyskohdan laskettu korkeustaso muuttui 2,34 tuumasta 2,64 "
+"tuumaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:264
+#: ../../../../build/work/app/i18n/custmsg.h:461
+msgid "Now we want to know the elevation of the lower track.\n"
+msgstr "Nyt haluamme tietää alemman radan korkeustason.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:274
+#: ../../../../build/work/app/i18n/custmsg.h:463
+#, fuzzy
+msgid "There is no endpoint on the lower track here.\n"
+msgstr "Risteyksen kohdalla ei ole raiteiden liitosta.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:464
+#, fuzzy
+msgid ""
+"Use Shift-Left-Click to Split the track and create an endpoint we can use "
+"for an elevation,\n"
+msgstr ""
+"Paina vaihto-näppäintä ja klikkaa hiiren vasemmalla painikkeella rataa "
+"luodaksesi liitoskohdan korkeustasoja varten\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:287
+#: ../../../../build/work/app/i18n/custmsg.h:466
+msgid "and create another Computed Elevation point.\n"
+msgstr "ja luo sen kohdalle toinen laskettu korkeustaso.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:302
+#: ../../../../build/work/app/i18n/custmsg.h:468
+#, fuzzy
+msgid "Now we want to label the grade on this section of track.\n"
+msgstr "Nyt haluamme merkitä raiteen tämän kohdan nousukulman.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:311
+#: ../../../../build/work/app/i18n/custmsg.h:470
+#, fuzzy
+msgid ""
+"Again, since there is no endpoint nearby, we split the track to create an "
+"endpoint we can use,\n"
+msgstr ""
+"Taaskaan ei ole sopivaa raideliitosta lähistöllä, joten pilkomme raiteen\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:321
+#: ../../../../build/work/app/i18n/custmsg.h:472
+#, fuzzy
+msgid "and create a grade marker.\n"
+msgstr "ja luomme uuteen liitoskohtaan nousukulman merkinnän.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:335
+#: ../../../../build/work/app/i18n/custmsg.h:474
+msgid "Note the marker has an arrow pointing in the upwards direction.\n"
+msgstr "Huomaa kuinka nuolella ilmaistaan nousun suunta.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:344
+#: ../../../../build/work/app/i18n/custmsg.h:476
+msgid ""
+"The last thing we want to do is to create a Station label that we'll use in "
+"the <Profile> command.\n"
+msgstr ""
+"Lopuksi haluamme vielä luoda aseman merkinnän, jota käytämme myöhemmin "
+"rataprofiilissa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:358
+#: ../../../../build/work/app/i18n/custmsg.h:478
+msgid "Now, set the Elevation to Station and enter the its name.\n"
+msgstr "Valitse \"Asema\" ja syötä tekstikenttään aseman nimi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:376
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:31
+#: ../../../../build/work/app/i18n/custmsg.h:481
+msgid ""
+"XTrackCAD can help find tracks that are curved too sharply or are too "
+"steep. These tracks are Exception tracks and are drawn in the Exception "
+"track color.\n"
+msgstr ""
+"XTrackCAD auttaa löytämään raiteet, jotka ovat kaartuvat liian jyrkästi tai "
+"ovat liian jyrkkiä. Näitä kutsutaan erityisraiteiksi ja ne piirretään omalla "
+"värillään.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:482
+msgid ""
+"In this example we have a curved track with radius of 9\" and a straight "
+"track with a grade of 3.8%.\n"
+msgstr ""
+"Tässä esimerkissä meillä on karre, jonka säde on 9 tuumaa ja suora jonka "
+"nousukulma on 3,8%.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:483
+msgid " \n"
+msgstr " \n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:485
+#, fuzzy
+msgid ""
+"The Layout dialog shows the Minimum Track Radius is 9\" and the Maximum "
+"Track Grade is 5%.\n"
+msgstr ""
+"Ohjelman ominaisuuksissa on määritelty pienimmäksi kaarresäteeksi 9 tuumaa "
+"ja suurimmaksi nousukulmaksi 5%.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:48
+#: ../../../../build/work/app/i18n/custmsg.h:487
+msgid ""
+"If we make the curved track sharper it will be drawn in the Exception "
+"color.\n"
+msgstr ""
+"Jos muutamme kaarretta jyrkemmäksi, se piirretään erityisraiteiden värillä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:61
+#: ../../../../build/work/app/i18n/custmsg.h:489
+msgid ""
+"If we make the straight track steeper it will also be drawn in the Exception "
+"color.\n"
+msgstr ""
+"Jos teemme suorasta raiteesta jyrkemmän, myös se piirretään erityisraiteiden "
+"värillä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:78
+#: ../../../../build/work/app/i18n/custmsg.h:491
+msgid ""
+"You can change the Exception color on the Colors dialog from the Options "
+"menu.\n"
+msgstr "Erityisraiteiden väritystä voi muuttaa Asetukset|Värit valikosta.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:85
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:21
+#: ../../../../build/work/app/i18n/custmsg.h:494
+#, fuzzy
+msgid ""
+"The unconnected endpoint of any track can also be extended with the <Modify> "
+"command using Right-Drag.\n"
+msgstr ""
+"Minkä tahansa raiteen irrallista päätä voi pidentää Muokkaa-komennolla "
+"raahaamalla hiiren oikealla painikkeella.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:26
+#: ../../../../build/work/app/i18n/custmsg.h:496
+#, fuzzy
+msgid "Select the endoint and Right-Drag.\n"
+msgstr "Valitse päätepiste ja raahaa oikealla painikkeella.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:34
+#: ../../../../build/work/app/i18n/custmsg.h:498
+msgid "The extending track can be straight...\n"
+msgstr "Jatke voi olla suora...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:44
+#: ../../../../build/work/app/i18n/custmsg.h:500
+msgid "... or curved.\n"
+msgstr "...tai kaareva.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:51
+#: ../../../../build/work/app/i18n/custmsg.h:502
+#, fuzzy
+msgid ""
+"If you extend a straight or curved flex track and enable Easements then an "
+"Easement curve will be automatically generated when you extend the track.\n"
+msgstr ""
+"Jos jatkat suoraa tai kaarevaa fleksiraidetta ja kaarreloivennus on "
+"käytössä, luodaan automaattisesti kaarreloivennus pidentämisen yhteydessä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:65
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:124
+#: ../../../../build/work/app/i18n/custmsg.h:505
+msgid ""
+"The <Flip> command will create a mirror image of the selected objects.\n"
+msgstr "Peilaus-komento luo peilikuvan valitusta objektista.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:131
+#: ../../../../build/work/app/i18n/custmsg.h:507
+msgid "After selecting the object, drag a line which will form the mirror.\n"
+msgstr "Valittuasi objektin, raahaa hiirellä peilauslinja.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:140
+#: ../../../../build/work/app/i18n/custmsg.h:509
+msgid "The mirror line does not have to be vertical or horizontal.\n"
+msgstr "Peilauslinjan ei tarvitse olla vaaka- tai pystysuuntainen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:149
+#: ../../../../build/work/app/i18n/custmsg.h:511
+msgid "You can also flip any number of objects.\n"
+msgstr "Voit myös peilata useita objekteja.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:512
+msgid "Watch what happens to the structure and turnout titles.\n"
+msgstr "Katso mitä tapahtuu rakennusten ja vaihteen otsikoille.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:163
+#: ../../../../build/work/app/i18n/custmsg.h:514
+msgid ""
+"Note that the turnout title has been changed from the Medium Right to Medium "
+"Left. When turnouts are flipped, XTrackCAD will try to find a matching "
+"turnout and if found will change the name.\n"
+msgstr ""
+"Huomaa, että vaihteen otsikko muutettiin oikeasta (right) vasemmaksi (left). "
+"Kun vaihteita peilataan, XTrackCAD yrittää löytää vastaavan toispuoleisen "
+"vaihteen ja sellaisen löytäessään vaihtaa nimen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:170
+#: ../../../../build/work/app/i18n/custmsg.h:516
+msgid ""
+"Structures do not have Right and Left hand versions. Their title is changed "
+"to indicate that they were flipped.\n"
+msgstr ""
+"Rakennuksilla ei ole oikeaa ja vasenta versiota. Niiden otsikko muutetaan "
+"siten, että se kuvaa objektin olevan peilattu (flipped).\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:517
+msgid "You can use the <Describe> command to change their title.\n"
+msgstr "Voit käyttää määrittele-komentoa muuttaaksesi niiden otsikoita.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:187
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:21
+#: ../../../../build/work/app/i18n/custmsg.h:520
+msgid ""
+"The <Group> and <Ungroup> commands (on the Tools menu) are a powerful way to "
+"manipulate Turnout and Structure definitions.\n"
+msgstr ""
+"Ryhmittele ja rymittelyn purku komennot (Hallinta-valikossa) ovat tehokas "
+"keino käsitellä raideosien ja rakennusten määrittelyjä.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:521
+msgid "We'll start with a simple turnout and add a switch machine.\n"
+msgstr "Aloitamme yksinkertaisesta vaihteesta ja vaihdekoneistosta.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:50
+#: ../../../../build/work/app/i18n/custmsg.h:523
+msgid ""
+"Now that we have drawn a rough outline of a switch machine we will group it "
+"with the turnout definition.\n"
+msgstr ""
+"Nyt kun olemme piirtäneet karkean hahmotelman vaihdekoneistosta, "
+"ryhmittelemme sen uudeksi vaihdemäärittelyksi.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:524
+msgid "First we Select the objects in the new definition.\n"
+msgstr "Ensin valitsemme objektit uutta määrittelyä varten.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:526
+msgid "Now do the <Group> command.\n"
+msgstr "Nyt suoritetaan ryhmittely-komento.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:70
+#: ../../../../build/work/app/i18n/custmsg.h:528
+msgid ""
+"The <Group> command dialog shows the Title (Manufacturer, Description and "
+"Part Number) of the new definition. This information is taken from the "
+"Selected objects you are grouping.\n"
+msgstr ""
+"Ryhmittely-komennon ikkunassa näytetään valmistaja, kuvaus sekä tuotenumero. "
+"Nämä tiedot on saatu ryhmittelyä varten valituista objekteista.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:76
+#: ../../../../build/work/app/i18n/custmsg.h:530
+msgid ""
+"The 'Replace with new group?' toggle will replace the Selected objects with "
+"the new definition.\n"
+msgstr ""
+"Jos \"Korvaa uudella ryhmällä?\" on valittuna, ryhmittelyä varten valitut "
+"objektit korvataan juuri luodulla uudella ryhmällä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:83
+#: ../../../../build/work/app/i18n/custmsg.h:532
+msgid ""
+"If we don't change the Title then the new definition will replace the "
+"existing definition.\n"
+msgstr ""
+"Jos otsikkotietoja (valmistaja, kuvaus ja tuotenumero) ei muuteta, korvaa "
+"tämä uusi määrittely jo olemassa olevan saman nimisen määrittelyn.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:533
+msgid "We'll give this definition a new Description.\n"
+msgstr "Annamme tälle määrittelylle uuden kuvauksen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:94
+#: ../../../../build/work/app/i18n/custmsg.h:535
+msgid "We're done with this definition. Press Ok.\n"
+msgstr "Määrittely on valmis ja se hyväksytään painamalla Ok.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:101
+#: ../../../../build/work/app/i18n/custmsg.h:537
+msgid "You will see the updated image on the HotBar.\n"
+msgstr "Näet päivitetyn kuvan Hot Barissa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:108
+#: ../../../../build/work/app/i18n/custmsg.h:539
+msgid ""
+"The <Ungroup> command replaces any Selected turnouts or structures with "
+"their parts.\n"
+msgstr ""
+"Ryhmittelyn purku komento korvaa valittut vaihteet tai rakennukset niiden "
+"osilla.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:540
+msgid ""
+"Structures and non-track segements of turnouts are composed of Lines, "
+"Circles and other shapes. In this turnout these are the two lines and the "
+"two squares.\n"
+msgstr ""
+"Rakennukset ja muut lohkot, jotka eivät ole raiteita, muodostuvat viivoista "
+"ympyröistä ja muista muodoista. Tässä vaihteessa on kaksi viivaa ja kaksi "
+"nelikulmiota.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:541
+msgid ""
+"We will Ungroup this turnout and see how the individual parts can be "
+"changed.\n"
+msgstr ""
+"Puramme tämän vaihteen ryhmittelyn nähdäksemme kuinka yksittäisiä osia "
+"voidaan muuttaa.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:542
+msgid "First Select the turnout and then Ungroup it.\n"
+msgstr "Ensin valitsemme vaihteen ja sitten puramme ryhmittelyn.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:123
+#: ../../../../build/work/app/i18n/custmsg.h:544
+msgid "Notice that the Title now indicates the turnout is Ungrouped.\n"
+msgstr "Huomaa että otsikko näyttää vaihteen ryhmittelyn olevan purettu.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:545
+msgid "Hit Escape to deselect everything.\n"
+msgstr "Paina Esc-näppäintä poistaaksesi valinnat objekteista.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:133
+#: ../../../../build/work/app/i18n/custmsg.h:547
+msgid "Now Select the lines and squares.\n"
+msgstr "Valitse nyt viivat ja nelikulmiont.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:158
+#: ../../../../build/work/app/i18n/custmsg.h:549
+msgid ""
+"We could modify these object or add new ones. For now we'll just delete "
+"them.\n"
+msgstr ""
+"Voisimme muokata näitä objekteja tai lisätä uusia. Nyt kuitenkin vain "
+"poistamme ne.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:165
+#: ../../../../build/work/app/i18n/custmsg.h:551
+msgid "And move the Label out of the way.\n"
+msgstr "Ja siirrämme otsikon pois tieltä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:176
+#: ../../../../build/work/app/i18n/custmsg.h:553
+msgid "Notice that the turnout has been broken into three parts.\n"
+msgstr "Huomaa että vaihde on purettu kolmeen osaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:198
+#: ../../../../build/work/app/i18n/custmsg.h:555
+msgid ""
+"Two ends of the turnout, from the frog to the end of the diverging leg and "
+"from the points to the left, are now straight track sections.\n"
+msgstr ""
+"Haarautuvan raiteen takajatkos sekä vaihteen etujatkos ovat nyt suoria "
+"raideosia.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:556
+msgid ""
+"The a turnout is made of a number of individual straight and curved track "
+"segements. This turnout had four segments:\n"
+msgstr ""
+"Vaihde on tehty useasta erillisestä suorasta ja kaarevasta raideosasta. Tämä "
+"vaihde koostui neljästä osasta:\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:557
+msgid " 1 a short straight segment to the left of the points\n"
+msgstr " 1 Lyhyestä suorasta etujatkoksesta.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:558
+msgid " 2 a long straight segment to the right of the points\n"
+msgstr " 2 Pitkästä suorasta raiteesta.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:559
+msgid " 3 a curved segment from the points to the frog\n"
+msgstr " 3 Kaarteesta kielten päistä risteyskappaleeseen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:560
+msgid ""
+" 4 a straight segment from the frog to the end of the diverging leg.\n"
+msgstr " 4 Haarautuvan raiteen suorasta takajatkoksesta.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:561
+msgid "The first and last segments have be converted to straight tracks.\n"
+msgstr "Ensimmäinen ja viimeinen osa on muutettu suoriksi raideosiksi.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:562
+msgid ""
+"The second and third segments form the the body of the turnout and can not "
+"be ungrouped further.\n"
+msgstr ""
+"Toinen ja kolmas osa muodostavat vaihteen rungon, eikä niiden ryhmittelyä "
+"voi purkaa tämän pidemmälle.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:563
+msgid ""
+"You can later Group this turnout with the straight segments to recreate the "
+"turnout definition. You can also add other track segments to turnout "
+"definitions.\n"
+msgstr ""
+"Voit myöhemmin ryhmitellä tämän vaihteen suorien raideosien kanssa ja luoda "
+"vaihteen määrittelyn uudelleen. Voit myös lisätä muita raideosia vaihteiden "
+"määrittelyihin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:242
+#: ../../../../build/work/app/i18n/custmsg.h:565
+msgid "Now, create a track and place the new turnout on it.\n"
+msgstr "Nyt luodaan raide ja lisätään siihen uusi vaihde.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:260
+#: ../../../../build/work/app/i18n/custmsg.h:567
+msgid "Now suppose we want to replace the black squares with green circles.\n"
+msgstr ""
+"Oletetaan, että haluamme vaihtaa mustien nelikulmioiden paikalle vihreät "
+"ympyrät.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:568
+msgid "First we Select the turnout.\n"
+msgstr "Ensin valitsemme vaihteen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:272
+#: ../../../../build/work/app/i18n/custmsg.h:570
+msgid "And now Ungroup it (from the Tools Menu)\n"
+msgstr "Ja sitten puramme ryhmittelyn.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:277
+#: ../../../../build/work/app/i18n/custmsg.h:572
+msgid ""
+"Notice that the name has changed to indicate the turnout was Ungrouped.\n"
+msgstr "Huomaa kuinka nimi on muutettu kuvaamaan vaihteen purkua.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:283
+#: ../../../../build/work/app/i18n/custmsg.h:574
+msgid ""
+"Now, hit escape to deselect everything and then Select the 2 squares and "
+"delete them.\n"
+msgstr ""
+"Paina Esc-näppäintä poistaaksesi valinnat objekteista ja valitse sitten "
+"nelikulmiot ja poista ne.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:300
+#: ../../../../build/work/app/i18n/custmsg.h:576
+msgid "Now draw the green circles...\n"
+msgstr "Piirrä nyt vihreät ympyrät...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:321
+#: ../../../../build/work/app/i18n/custmsg.h:578
+msgid "and Group the new definition.\n"
+msgstr "ja ryhmittele tämä uusi määrittely.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:340
+#: ../../../../build/work/app/i18n/custmsg.h:580
+msgid ""
+"Notice that the turnout in the HotBar is angled the same as the turnout on "
+"the layout. Make sure your new definition is rotated the way you want it.\n"
+msgstr ""
+"Huomaa että vaihteen kuva Hot Barissa on nyt samassa kulmassa kuin vaide "
+"ratasuunnitelmassa. Ole siis huolellinen tehdessäsi uusia määrittelyitä, "
+"jotta ne ovat haluamassasi kulmassa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:379
+#: ../../../../build/work/app/i18n/custmsg.h:582
+msgid "We can also create turnouts from simple straight and curved tracks.\n"
+msgstr ""
+"Voimme myös luoda vaihteita yksinkertaisista suorista ja kaarevista "
+"raideosista.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:583
+#, fuzzy
+msgid "We'll create two tracks that have a common endpoint.\n"
+msgstr "Luomme kaksi raidetta, joilla on yhteinen päätepiste.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:390
+#: ../../../../build/work/app/i18n/custmsg.h:585
+msgid ""
+"When we create the curve from the straight track endpoint we need to hold "
+"down the Shift key to prevent XTrackCAD from trying to join the two tracks.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:408
+#: ../../../../build/work/app/i18n/custmsg.h:587
+msgid "At this point we can modify the tracks if necessary.\n"
+msgstr "Tässä vaiheessa voimme muokata raiteita, jos se on tarpeen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:588
+msgid "We will use the <Describe> command to change the tracks.\n"
+msgstr "Käytämme kuvaile-komentoa muuttaaksemme raiteiden ominaisuuksia.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:420
+#: ../../../../build/work/app/i18n/custmsg.h:590
+msgid "We'll make the Length 7.5\".\n"
+msgstr "Muutamme pituutta.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:591
+msgid ""
+"If we change the Length, each End-Point will be moved to shorten the track. "
+"We want to just move the Right End-Point. To control this, change the Pivot "
+"to First which means the Left End-Point will be unchanged when we change the "
+"length (or angle) of the track.\n"
+msgstr ""
+"Jos nyt vain muutamme pituutta, lyhennetään raidetta molemmista päistä. "
+"Haluamme muuttaa raiteen pituutta vain oikeasta päästä, vaihdamme ensin "
+"kiertopisteeksi ensimmäisen pään, jolloin valittu kiertopiste pysyy "
+"paikoillaan muutettaessa raiteen pituutta (tai kulmaa).\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:430
+#: ../../../../build/work/app/i18n/custmsg.h:593
+msgid "Now when change the Length only the Right End-Point will move.\n"
+msgstr "Nyt kun muutamme pituutta, vain oikeaa päätä lyhennetään.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:441
+#: ../../../../build/work/app/i18n/custmsg.h:595
+msgid "Now let's look at the curved track.\n"
+msgstr "Katsotaanpa sitten kaarevaa raidetta.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:451
+#: ../../../../build/work/app/i18n/custmsg.h:597
+msgid ""
+"Here the Left End-Point (which we don't want to move) is the Second End-"
+"Point, so we'll make that the Pivot.\n"
+msgstr ""
+"Tässä vasen päätepiste (jota emme halua siirtää) on toinen päätepiste, joten "
+"valitsemme sen kiertopisteeksi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:459
+#: ../../../../build/work/app/i18n/custmsg.h:599
+#, fuzzy
+msgid "We want the curve to have a radius of 20\" and an angle of 17.5ᅵ.\n"
+msgstr "Haluamme kaarteelle tietyn säteen ja kulman.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:600
+msgid "First change the Radius...\n"
+msgstr "Ensin muutetaan säde...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:468
+#: ../../../../build/work/app/i18n/custmsg.h:602
+msgid "and the the Angular Length.\n"
+msgstr "ja sitten kulma.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:476
+#: ../../../../build/work/app/i18n/custmsg.h:604
+msgid "Now Select both tracks...\n"
+msgstr "Valitse molemmat raiteet...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:492
+#: ../../../../build/work/app/i18n/custmsg.h:606
+msgid "and Group them.\n"
+msgstr "ja ryhmittele ne.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:503
+#: ../../../../build/work/app/i18n/custmsg.h:608
+msgid ""
+"If the two tracks have a common End-Point then they will form a Turnout and "
+"can be switched with the <Train> command. Otherwise they will just be two "
+"track segments grouped together.\n"
+msgstr ""
+"Jos molemmilla raiteilla on yhteinen päätepiste, ne muodostavat vaihteen, "
+"jonka asentoa voidaan vaihtaa simuloitaessa junien ajoa. Muussa tapauksessa "
+"ne ovat vain kaksi raideosaa, jotka ovat ryhmitelty keskenään.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:510
+#: ../../../../build/work/app/i18n/custmsg.h:610
+msgid ""
+"We have created a left hand turnout and we also want a right hand version.\n"
+msgstr ""
+"Olemme luoneen vasemman puoleisen vaihteen ja haluamme myös oikean puoleisen "
+"version.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:611
+msgid "We'll use the <Flip> command.\n"
+msgstr "Käytämme peilaustoimintoa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:523
+#: ../../../../build/work/app/i18n/custmsg.h:613
+msgid ""
+"Drag a horizontal line that will be the mirror for the <Flip> command.\n"
+msgstr "Piirrä peilayslinja vaakatasoon.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:533
+#: ../../../../build/work/app/i18n/custmsg.h:615
+msgid "Notice the title has changed to Flipped Left.\n"
+msgstr "Huomaa että otsikko ilmaisee vaihteen olevan peilikuva.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:616
+msgid "Now Group the turnout.\n"
+msgstr "Ryhmittele.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:542
+#: ../../../../build/work/app/i18n/custmsg.h:618
+msgid "We'll change the Title and Part No for the new defintion.\n"
+msgstr "Muutamme kuvausta ja tuotenumeroa uutta määrittelyä varten.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:555
+#: ../../../../build/work/app/i18n/custmsg.h:620
+msgid ""
+"To Remove the definitions, use the Custom Management dialog on the Tools "
+"menu.\n"
+msgstr ""
+"Poistaaksesi määrittelyt, käytä \"Omat raideosat ja kalusto\" ikkunaa "
+"Hallinta valikosta.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:560
+#: ../../../../build/work/app/i18n/custmsg.h:622
+msgid "Select the definitions you added and Delete them.\n"
+msgstr "Valitse lisäämäsi määrittelyt ja poista ne.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:573
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:625
+msgid ""
+"Now we will create a helix in the corner of the layout connected to 2 "
+"tracks.\n"
+msgstr ""
+"Nyt luomme helixin (kierrenousun) ratasuunnitelman nurkkaukseen ja "
+"yhdistämme sen kahteen raiteeseen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:28
+#: ../../../../build/work/app/i18n/custmsg.h:627
+#, c-format
+msgid ""
+"We will be creating a helix with a Elevation Difference of 12\", Grade of "
+"1.5% and limit the Vertical Separation to at least 2\".\n"
+msgstr ""
+"Luomme helixin, jonka korkeusero on 12 tuumaa, nousukulma 1,5% ja määräämme "
+"kerrosten välisen tilan olevan vähintään 2 tuumaa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:34
+#: ../../../../build/work/app/i18n/custmsg.h:629
+msgid "First set the Elevation Difference to 12\"\n"
+msgstr "Ensin asetamme korkeuseron 12 tuumaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:43
+#: ../../../../build/work/app/i18n/custmsg.h:631
+msgid "Next set the Vertical Separation to 2\"\n"
+msgstr "Sauraavaksi kerrosten välinen etäisyys 2 tuumaksi.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:632
+msgid "Notice how this causes the number of Turns to be set to 6\n"
+msgstr "Huomaa kuinka tämä muuttaa kierrosten lukumääräksi 6.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:52
+#: ../../../../build/work/app/i18n/custmsg.h:634
+msgid "Next set the Grade to 1.5%\n"
+msgstr "Seuraavaksi nousukulmaksi 1,5%.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:635
+msgid "Notice how this causes the Radius to change.\n"
+msgstr "Huomaa, kuinka säde muuttuu.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:60
+#: ../../../../build/work/app/i18n/custmsg.h:637
+msgid ""
+"Setting these values changes the Radius to 21.2\" and the number of Turns to "
+"6.\n"
+msgstr ""
+"Näillä arvoilla säde muuttui 21,2 tuumaksi ja kierrosten lukumäärä 6:ksi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:66
+#: ../../../../build/work/app/i18n/custmsg.h:639
+msgid ""
+"Now we specify the Angular Separation between the enterance and exit to the "
+"helix.\n"
+msgstr "Nyt määrittelemme helixin sisäänkäyntien välisen kulman.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:640
+msgid "Note: this will decrease the Radius slightly.\n"
+msgstr "Huom: Tämä pienentää sädettä hieman.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:76
+#: ../../../../build/work/app/i18n/custmsg.h:642
+msgid "Next we can fine tune the helix by decreasing the Radius to 15\".\n"
+msgstr ""
+"Seuraavaksi voimme hienosäätää helixiä asettamalla säteeksi 15 tuumaa.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:643
+msgid "Note the change to the Grade.\n"
+msgstr "Huomaa nousukulman muutos.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:85
+#: ../../../../build/work/app/i18n/custmsg.h:645
+msgid ""
+"Lastly change the Vertical Separation to 2.5\". The number of Turns will "
+"change to 4 and the grade increase to almost 3%.\n"
+msgstr ""
+"Viimeiseksi muutamme kerrosten välisen etäisyyden 2,5 tuumaksi. Kierrosten "
+"lukumäärä muuttuu 4:ksi ja nousukulma kasvaa lähes 3%:iin.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:646
+msgid ""
+"Note: the Vertical Separation will be increased. This value is the "
+"Elevation Difference (12.0) divided by the total number of turns. The total "
+"number of turns is 4.25: 4 whole Turns plus a quarter turn for the Angular "
+"Separation.\n"
+msgstr ""
+"Huom: Kerrosten välistä etäisyyttä kasvatetaan. Tämä arvo on "
+"kokonaiskorkeusero (12,0) jaettuna kierrosten kokonaislukumäärällä. "
+"Kierrosten kokonaislukumäärä on 4,25: 4 täyttä kierrosta sekä neljännes "
+"kierros johtuen sisäänkäyntien välisestä kulmasta.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:94
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:99
+#: ../../../../build/work/app/i18n/custmsg.h:649
+msgid ""
+"Now that the helix parameters are set we can place the helix on the layout.\n"
+msgstr ""
+"Nyt kun helixin parametrit on aseteltu, voimme asettaa helixin "
+"ratasuunnitelmaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:112
+#: ../../../../build/work/app/i18n/custmsg.h:651
+msgid ""
+"Next, join the 2 straight tracks to the helix in the same way we join to a "
+"circle.\n"
+msgstr ""
+"Seuraavaksi yhdistetään suorat raiteet helixiin aivan kuten ympyrään.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:145
+#: ../../../../build/work/app/i18n/custmsg.h:653
+msgid ""
+"Notice that the length has increased because we have more than 4 turns in "
+"the helix. It is closer to 4.25 turns.\n"
+msgstr ""
+"Huomaa kuinka pituus kasvoi hieman koska helixissä on yli 4 kierrosta. "
+"Kierrosten lukumäärä on lähempänä 4,25:tä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:155
+#: ../../../../build/work/app/i18n/custmsg.h:655
+msgid ""
+"Next, we assign elevations to the 2 End-Points of the helix. This will "
+"determine the grade and separation between the helix coils.\n"
+msgstr ""
+"Seuraavaksi määrittelemme korkeustason helixin toiselle päätepisteelle. Tämä "
+"määrittää nousukulman ja kierteiden välisen eron.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:656
+msgid ""
+"Note: we could set the elevations anywhere along the connecting tracks "
+"instead. XTrackCAD treats a helix as a single length of track for "
+"elevations.\n"
+msgstr ""
+"Huom: Voisimme määrittää korkeustason missä tahansa helixiin yhdistetyllä "
+"raiteella. Korkeustasojen kannalta XTrackCAD käsittelee helixiä yhtenä "
+"tietyn mittaisena raiteena.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:176
+#: ../../../../build/work/app/i18n/custmsg.h:658
+msgid ""
+"We have set the elevations to 1\" and 13\" to produce a grade of 3.0% with "
+"2.8\" between coils.\n"
+msgstr ""
+"Asetimme korkeustasot 1 ja 13 tuumaksi luodaksemme 3,0% nousukulman ja 2,8 "
+"tuuman kerrosvälin.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:659
+msgid ""
+"You can use the <Describe> command to change the number of Turns or the "
+"Elevations at either end of the Helix. This will affect the Grade and "
+"Vertical Separation.\n"
+msgstr ""
+"Voit käyttää määrittele-komentoa muuttaaksesi kierrosten lukumäärää tai "
+"korkeustasoja kummassa tahansa päässä helixiä. Tämä vaikuttaa nousukulmaan "
+"ja kerrosten väliseen tilaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:184
+#: ../../../../build/work/app/i18n/custmsg.h:661
+msgid "The helix description can be moved by the <Move Label> command.\n"
+msgstr "Helixin kuvausta voidaan siirtää aivan kuten muitakin merkintöjä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:194
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:664
+msgid ""
+"In addition to using the turnout definitions you can create 'Hand Laid "
+"Turnout'.\n"
+msgstr ""
+"Valmiiden vaihdemäärittelyjen lisäksi voit luoda \"käsin asetellun vaihteen"
+"\".\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:665
+msgid "This is two step process:\n"
+msgstr "Tämä on kaksiosainen prosessi:\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:23
+#: ../../../../build/work/app/i18n/custmsg.h:667
+msgid "1 - click on the frog and drag away to set the frog angle\n"
+msgstr "1 - klikkaa risteyskappaleen kohdalle ja raahaa asettaaksesi kulman.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:29
+#: ../../../../build/work/app/i18n/custmsg.h:669
+msgid ""
+" Hint: the further you drag from the frog, the more accurate the angle.\n"
+msgstr ""
+" Vinkki: Mitä kauemmas raahaat, sitä tarkemmin saat kulman asetelluksi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:34
+#: ../../../../build/work/app/i18n/custmsg.h:671
+msgid "2 - click and drag to set the position of the points\n"
+msgstr "2 - Klikkaa ja raahaa asetellaksesi kielten päät.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:42
+#: ../../../../build/work/app/i18n/custmsg.h:673
+msgid "We can create Hand Laid Turnouts on curved tracks.\n"
+msgstr "Voimme luoda käsin asetellun vaihteen myös kaarteeseen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:58
+#: ../../../../build/work/app/i18n/custmsg.h:675
+msgid "A Hand Laid Turnout is composed of several parts.\n"
+msgstr "Käsin asetellut vaihteet koostuvat useasta osasta.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:67
+#: ../../../../build/work/app/i18n/custmsg.h:677
+msgid "The actual Turnout is a short portion at the points.\n"
+msgstr "Varsinainen vaihde on lyhyt osa kielten päiden luona.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:77
+#: ../../../../build/work/app/i18n/custmsg.h:679
+msgid "The other parts are various straight and curved segments.\n"
+msgstr "Muut osat ovat suoria ja kaarevia raideosia.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:81
+#: ../../../../build/work/app/i18n/custmsg.h:681
+msgid "The new curved turnout is also composed of several segments.\n"
+msgstr "Myös kaarrevaihde koostuu useasta osasta.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:107
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:7
+#: ../../../../build/work/app/i18n/custmsg.h:684
+msgid "Welcome to the XTrackCAD demonstration.\n"
+msgstr "Tervetuloa XTrackCADin havaintoesitykseen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:685
+msgid ""
+"This will show some the features of XTrackCAD in an automated presentation. "
+"This window contains a number of controls and a message area (which I hope "
+"you are reading now). \n"
+msgstr ""
+"Havaintoesitykset näyttävät joitakin XTrackCADin ominaisuuksia "
+"automaattisina esityksinä. Tämä ikkuna sisältää joitakin kontrolleja sekä "
+"viestialueen, jota juuri nyt luet.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:686
+msgid "The controls are:\n"
+msgstr "Kontrollit ovat:\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:687
+msgid "Step - advances to the next step of the demo.\n"
+msgstr "Seuraava vaihe - Siirtyy seuraavaan vaiheeseen demossa.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:688
+msgid "Next - skips ahead to the next demo.\n"
+msgstr "Seuraava - Siirry seuraavaan demoon.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:689
+msgid "Quit - exits the demo and returns to XTrackCAD.\n"
+msgstr "Lopeta - Pysäyttää demon ja palaa XTrackCADin normaaliin tilaan.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:690
+msgid "Speed - controls the speed of the demo.\n"
+msgstr "Nopeus - Säätelee demojen suoritusnopeutta.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:691
+msgid "Click Step now for the next message.\n"
+msgstr ""
+"Klikkaa nyt Seuraava vaihe -painiketta katsoaksesi seuraavan viestin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:23
+#: ../../../../build/work/app/i18n/custmsg.h:693
+msgid ""
+"If this is the first time you have used the demo you may want to rearrange "
+"the windows so the demo window does not obscure the main window.\n"
+msgstr ""
+"Jos tämä on ensimmäinen kerta, kun käytät näitä havaintoesityksiä, saatat "
+"haluta järjestellä ikkunat siten, ettei demo-ikkuna peitä pääikkunaa "
+"oleellisesti.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:694
+msgid ""
+"You can move the demo window now by dragging on the title bar at the top of "
+"the window. I suggest you move it to the top of your screen.\n"
+msgstr ""
+"Voit siirrellä demo-ikkunaa raahaamalla otsikkopalkista. Ehdotan, että "
+"siirrät demo-ikkunan näyttösi yläosaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:31
+#: ../../../../build/work/app/i18n/custmsg.h:696
+msgid ""
+"The various controls are disabled when it would be inappropiate to click on "
+"them. When the demo is running the Step button is disabled. When the demo "
+"is paused the Step button is enabled and you can click it when you are ready "
+"to view the next part of the demo.\n"
+msgstr ""
+"Useimmat kontrollit eivät ole käytettävissä oltaessa demo-tilassa, jolloin "
+"niitä ei voi painella tarpeettomasti. Demon ollessa käynnissä Seuraava vaihe "
+"-painike ei ole käytettävissä. Kun demo on pysähdyksissä Seuraava vaihe -"
+"painike on käytettävissä, jolloin voit siirtyä sen avulla demossa seuraavaan "
+"vaiheeseen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:697
+msgid "You can click on Quit to return to XTrackCAD at any time.\n"
+msgstr ""
+"Voit painaa Lopeta -painiketta milloin tahansa palataksesi XTrackCADin "
+"perustilaan.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:698
+msgid "You can adjust the speed of the demonstration with the Speed control.\n"
+msgstr ""
+"Voit säätää demojen suoritusnopeutta Nopeus -valintaluettelon avulla.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:60
+#: ../../../../build/work/app/i18n/custmsg.h:700
+msgid "The demos are designed to fit within a certain sized window.\n"
+msgstr ""
+"Demot on suunniteltu niin, että ne mahtuvat tietyn kokoiseen ikkunaan.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:701
+msgid ""
+"For best results, change the size of the main XTrackCAD window so the box "
+"shape is completely visible.\n"
+msgstr ""
+"Parhaan tuloksen saavuttamiseksi, muuta XTrackCADin pääikkunan kokoa siten, "
+"että nelikulmio on kokonaan näkyvissä.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:702
+msgid "You can do this by clicking and dragging on a corner of the window.\n"
+msgstr ""
+"Voit tehdä tämän klikkaamalla ja raahaamalla hiidella ikkunan reunoista tai "
+"nurkasta.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:67
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:72
+#: ../../../../build/work/app/i18n/custmsg.h:705
+msgid "This is the end of the introductory demo.\n"
+msgstr "Tähän päättyy johdanto.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:706
+msgid ""
+"Please click Step for the next demo or click Quit to return to XTrackCAD.\n"
+msgstr ""
+"Paina Seuraava vaihe tai Seuraava, siirtyäksesi seuraavaan demoon tai Lopeta "
+"palataksesi XTrackCADin perustilaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:708
+msgid ""
+"You can also join to and from circles. This will change the circles to "
+"curves.\n"
+msgstr ""
+"Voit myös yhdistää alkaen ympyrästä ja päättyen ympyrään. Tämä muuttaa "
+"ympyrät kaarteiksi.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:709
+msgid "In this example we will join two circles.\n"
+msgstr "Tässä esimerkissä yhdistetään kaksi ympyrää.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:24
+#: ../../../../build/work/app/i18n/custmsg.h:711
+msgid ""
+"Here we've selected points on the two circles. The direction of the "
+"connections (whether clockwise or counter clockwise) is controlled by where "
+"on the circle you select the connection points.\n"
+msgstr ""
+"Nyt olemme valinneet pisteet molemmilta ympyräraiteilta. Liitoksen suuntaa "
+"kontrolloidaan sen mukaan mistä kohtaa ympyröitä liitoskohdat valitaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:133
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:152
+#: ../../../../build/work/app/i18n/custmsg.h:714
+msgid "Now let's try a cross connection.\n"
+msgstr "Kokeillaanpa risteävää liitosta.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:246
+#: ../../../../build/work/app/i18n/custmsg.h:716
+msgid ""
+"Note that the connection is from different 'ends' of the circle than in the "
+"last example.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:22
+#: ../../../../build/work/app/i18n/custmsg.h:718
+msgid "This examples shows joining tracks whose End-Points are aligned.\n"
+msgstr ""
+"Tämä esimerkki näyttää kahden kohdakkain olevan päätepisteen yhdistämisen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:719
+msgid ""
+"Note the 2 pairs of tracks have End-Points that are close and aligned but "
+"not connected.\n"
+msgstr ""
+"Huomaa, että molemmissa raidepareissa raiteet ovat aivan lähekkäin ja "
+"samansuuntaisesti, mutta toisistaan irrallisia.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:30
+#: ../../../../build/work/app/i18n/custmsg.h:721
+msgid "The first case joins the curve and straight track.\n"
+msgstr "Ensin yhdistetään kaarre suoraan raiteeseen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:40
+#: ../../../../build/work/app/i18n/custmsg.h:723
+msgid "The second case will join the two straight tracks.\n"
+msgstr "Seuraavaksi yhdistetään kaksi suoraa raidetta.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:50
+#: ../../../../build/work/app/i18n/custmsg.h:725
+msgid "Note that the two straight tracks were combined to form one track.\n"
+msgstr ""
+"Huomaa, että kaksi suoraa raidetta yhdistettiin siten, että ne muodostavat "
+"nyt yhden raideosan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:55
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:728
+#, fuzzy
+msgid ""
+"The <Join> command can also join straight and curved tracks (in either "
+"order).\n"
+msgstr ""
+"Yhdistä-komennolla voi liittää suoran ja kaarevan raiteen (kummassa tahansa "
+"järjestyksessä).\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:729
+#, fuzzy
+msgid "We will enable Cornu easements\n"
+msgstr "Ensiksi otetaan kaarreloivennus käyttöön.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:32
+#: ../../../../build/work/app/i18n/custmsg.h:731
+#, fuzzy
+msgid "A connecting cornu track is drawn between the two tracks.\n"
+msgstr "Yhdistävä raide piirretään yhdistettävien raiteiden väliin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:41
+#: ../../../../build/work/app/i18n/custmsg.h:733
+msgid ""
+"Notice that the curved track is extended as the connection point moves past "
+"the End-Point.\n"
+msgstr ""
+"Huomaa kuinka kaarevaa raidetta jatketaan liitoskohdan siirtyessä "
+"päätepisteen ohi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:735
+#, fuzzy
+msgid ""
+"Here the connection makes the curved track wrap around. This is not a "
+"useful shape, there is a discontinuity at the end. \n"
+msgstr "Tässä liitos saa kaarevan raiteen kiepsahtamaan ympäri.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:736
+msgid "Adjusting the end point will fix it. \n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:64
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnmove.xtr:18
+#: ../../../../build/work/app/i18n/custmsg.h:739
+msgid "The <Join> command can move one group of tracks to join with another.\n"
+msgstr ""
+"Yhdistä-komento pystyy siirtämään raiteita yhdistääkseen ne toisiin "
+"raiteisiin.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:740
+#, fuzzy
+msgid ""
+"First <Select> the tracks you want to move with Ctrl so that they are both "
+"selected.\n"
+msgstr "Valitse ensin raiteet, jotka haluat siirtää.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnmove.xtr:36
+#: ../../../../build/work/app/i18n/custmsg.h:742
+msgid "Click <Join> and Shift-Left-Click on the two End-Points.\n"
+msgstr ""
+"Klikkaa Yhdistä ja sen jälkeen vaihto-näppäintä painettuna klikkaa hiiren "
+"vasemmalla painikkeella yhdistettäviä päätepisteitä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnmove.xtr:51
+#: ../../../../build/work/app/i18n/custmsg.h:744
+msgid "The selected tracks are moved into position.\n"
+msgstr "Valitut raiteet siirrettiin paikoilleen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:746
+#, fuzzy
+msgid ""
+"Two straight tracks can be joined by selecting the two endoints. The "
+"selected endpoints will be those closest to the cursor when the track is "
+"selected.\n"
+msgstr ""
+"Kaksi suoraa raidetta yhdistetään valitsemalla kaksi päätepistettä. Valittu "
+"päätepiste on se, joka on lähempänä hiiren osoitinta raidetta valittaessa.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:747
+#, fuzzy
+msgid "First, we will select Easements None and then select Join\n"
+msgstr "Ensin asetamme korkeustasot haarojen päihin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:26
+#: ../../../../build/work/app/i18n/custmsg.h:749
+#, fuzzy
+msgid "Now we select two points on the tracks\n"
+msgstr "Valitse nyt toisen haaran pää.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:36
+#: ../../../../build/work/app/i18n/custmsg.h:751
+msgid ""
+"A connecting track is drawn between the two tracks. Notice how it moves as "
+"the cursor is dragged along the second track.\n"
+msgstr ""
+"Yhdistävä raide piirretään yhdistettävien raiteiden väliin. Huomaa kuinka se "
+"siirtyy raahattaessa osoitinta toista raidetta pitkin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:47
+#: ../../../../build/work/app/i18n/custmsg.h:753
+msgid ""
+"Note that two tracks are extended if you move past the end of the track.\n"
+msgstr ""
+"Huomaa, että raiteita pidennetään automaattisesti siirryttäessä raiteen pään "
+"ohi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:55
+#: ../../../../build/work/app/i18n/custmsg.h:755
+msgid ""
+"Notice what happens if you drag past the intersection points of the two "
+"tracks.\n"
+msgstr "Katso mitä tapahtuu, jos raahaat raiteiden leikkauspisteen ohi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:757
+msgid "This is probably not a very useful thing to do.\n"
+msgstr "Tämä ei luultavasti ole kovin hyödyllistä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:70
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:90
+#: ../../../../build/work/app/i18n/custmsg.h:760
+msgid "Now we will do this with Cornu Easements \n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:761
+#, fuzzy
+msgid "First, we will select Easements Cornu and then select Join\n"
+msgstr "Ensin asetamme korkeustasot haarojen päihin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:102
+#: ../../../../build/work/app/i18n/custmsg.h:763
+#, fuzzy
+msgid "Now we again select two points on the tracks\n"
+msgstr "Valitse nyt toisen haaran pää.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:112
+#: ../../../../build/work/app/i18n/custmsg.h:765
+#, fuzzy
+msgid ""
+"A connecting cornu is drawn between the two tracks. Notice how it behaves "
+"as the cursor is dragged along the second track.\n"
+msgstr ""
+"Yhdistävä raide piirretään yhdistettävien raiteiden väliin. Huomaa kuinka se "
+"siirtyy raahattaessa osoitinta toista raidetta pitkin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:123
+#: ../../../../build/work/app/i18n/custmsg.h:767
+#, fuzzy
+msgid ""
+"Note that either tracks can be extended if you move past the end of it.\n"
+msgstr ""
+"Huomaa, että raiteita pidennetään automaattisesti siirryttäessä raiteen pään "
+"ohi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:131
+#: ../../../../build/work/app/i18n/custmsg.h:769
+#, fuzzy
+msgid ""
+"Notice this time what happens if you drag past the intersection points of "
+"the two tracks.\n"
+msgstr "Katso mitä tapahtuu, jos raahaat raiteiden leikkauspisteen ohi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:139
+#: ../../../../build/work/app/i18n/custmsg.h:771
+msgid "This is more useful because you can move the other end as well.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:150
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:774
+msgid "You can connect from any track to a turntable\n"
+msgstr "Voit yhdistää mistä tahansa raiteesta kääntöpöytään.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:775
+#, fuzzy
+msgid "With a Cornu Easement you can have a turntable as the first point.\n"
+msgstr ""
+"Huom: Kääntöpöytä ei voi olla ensimmäinen liitoskohta, eli aina yhdistetään "
+"muusta raiteesta kääntöpöytää kohti.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:38
+#: ../../../../build/work/app/i18n/custmsg.h:777
+msgid ""
+"You cannot place the connecting track too close to an existing stall track. "
+"How close you can get is controlled by the Turntable Angle on the Setup "
+"dialog.\n"
+msgstr ""
+"Liitosraidetta ei voi yhdistää liian lähelle kääntöpöytään ennestään "
+"liittyvää raidetta. Tämä etäisyys, eli kääntöpöydän kulma, määritellään "
+"komentojen asetuksissa.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:778
+#, fuzzy
+msgid "In this example it is set to 15 degrees.\n"
+msgstr "Tässä esimerkissä se on asetettu 7,5 asteeksi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:780
+msgid "You can drag the connecting point all round the turntable.\n"
+msgstr "Voit raahata liitoskohtaa ympäti kääntöpöytää.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:103
+#: ../../../../build/work/app/i18n/custmsg.h:782
+msgid ""
+"As you drag away from the turntable a straight track will be drawn to the "
+"cursor postion and a curve will be drawn from the cursor to the connecting "
+"track.\n"
+msgstr ""
+"Raahatessasi kääntöpöydästä pois päin, suora raide piirretään osoittimeen "
+"asti ja siitä jatketaan kaarteella liitettävään raiteeseen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:111
+#: ../../../../build/work/app/i18n/custmsg.h:784
+#, fuzzy
+msgid ""
+"Now the cursor will be moved within the turntable, but the end stays on the "
+"edge of the well.\n"
+msgstr ""
+"Nyt osoitin viedään kääntöpöydän sisälle. Huomaa virheilmoitus tilarivillä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:161
+#: ../../../../build/work/app/i18n/custmsg.h:786
+msgid "All done.\n"
+msgstr "Valmis.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:169
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:38
+#: ../../../../build/work/app/i18n/custmsg.h:789
+msgid ""
+"The Draw Commands are used to draw straight and curved lines on the layout.\n"
+msgstr ""
+"Piirtokomennoilla voidaan piirtää suoria ja kaarevia viivoja "
+"ratasuunnitelmaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:46
+#: ../../../../build/work/app/i18n/custmsg.h:791
+msgid ""
+"Lines are drawn by clicking at the starting postion and dragging to the "
+"final position.\n"
+msgstr ""
+"Viivat piirretään klikkaamalla alkupistettä ja raahaamalla loppupisteeseen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:792
+msgid ""
+"By default, the new line will snap to existing objects. Hold down the "
+"<Ctrl> and <Alt> keys to prevent this from happening.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:91
+#: ../../../../build/work/app/i18n/custmsg.h:794
+msgid "You also draw in various colors and line widths.\n"
+msgstr "Voit myös piirtää eri väreillä ja muuttaa viivan paksuutta.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:109
+#: ../../../../build/work/app/i18n/custmsg.h:796
+msgid ""
+"Like Curved Tracks, Curved Lines can be drawn by a variety of methods.\n"
+msgstr ""
+"Aivan kuten kaarevat raideosat, myös kaarevat viivat voidaan piirtää eri "
+"tavoin.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:797
+msgid ""
+"Here we will draw a Curve by dragging from one End-Point to the other to "
+"define the chord of the Curve. Then we will drag from the center to shape "
+"the curve.\n"
+msgstr ""
+"Tässä piirrämme kaaren raahaamalla ensin jänteen päätepisteiden välille ja "
+"raahaamme sitten jänteen keskeltä muodostaaksemme halutun kaaren.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:184
+#: ../../../../build/work/app/i18n/custmsg.h:799
+msgid "Boxes are useful for drawing rectangular shapes.\n"
+msgstr ""
+"Nelikulmio koostuu neljästä yksittäisestä viivasta, mutta sen voi piirtää "
+"yhdellä komennolla.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:194
+#: ../../../../build/work/app/i18n/custmsg.h:801
+msgid ""
+"Circles can be drawn by clicking on the center or edge and dragging to set "
+"the radius.\n"
+msgstr ""
+"Ympyrät voidaan piirtää esimerkiksi klikkaamalla haluttua keskipistettä ja "
+"asettamalla ympyrän säde raahaamalla.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:802
+msgid "Here we will drag from the Center.\n"
+msgstr "Raahaamme keskipisteestä poispäin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:204
+#: ../../../../build/work/app/i18n/custmsg.h:804
+msgid "Lines and Shapes can be deleted by Selecting and Deleting.\n"
+msgstr ""
+"Viivat ja muodot poistetaan valitsemalla ne ensin ja sitten poistamalla ne.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:227
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:91
+#: ../../../../build/work/app/i18n/custmsg.h:807
+msgid "We also draw Polylines and filled shapes.\n"
+msgstr "Voimme myös luoda monikulmioita ja täytettyjä monikulmioita.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:98
+#: ../../../../build/work/app/i18n/custmsg.h:809
+msgid ""
+"A Polyline is drawn by dragging to place each of the point in the Polyline.\n"
+msgstr "Monikulmio piirretään raahaamalla kukin kulma paikoilleen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:125
+#: ../../../../build/work/app/i18n/custmsg.h:811
+msgid ""
+"To finish off the Polyline press the <Space> key or choose another drawing "
+"type.\n"
+msgstr ""
+"Viimeistelläksesi monikulmion, paina välilyöntiä tai valitse toinen "
+"piirtotyyppi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:813
+#, fuzzy
+msgid "A filled Polygon is drawn in the same way.\n"
+msgstr "Täytetty monikulmio piirretään samalla tavalla.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:158
+#: ../../../../build/work/app/i18n/custmsg.h:815
+msgid "When you are finished, press the <Space> key to complete the polygon.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:165
+#: ../../../../build/work/app/i18n/custmsg.h:817
+msgid ""
+"You can use the Above and Below Commands to move lines and shapes to the "
+"front or back of the drawing.\n"
+msgstr ""
+"Voit vaihtaa viivojen ja muotojen järjestystä viemällä niitä alimmaiseksi "
+"tai päällimmäiseksi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:182
+#: ../../../../build/work/app/i18n/custmsg.h:819
+msgid "Filled Boxes and Circles work the same as line Boxes and Circles.\n"
+msgstr ""
+"Täytetyt nelikulmiot ja täytetyt ympyrät toimivat samoin kuin tyhjät "
+"nelikulmiot ja ympyrät.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:199
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:8
+#: ../../../../build/work/app/i18n/custmsg.h:822
+#, fuzzy
+msgid ""
+"In the drawing area of the main window you can see an hollow upwards arrow "
+"which represents the mouse cursor. In this demo the mouse will move about "
+"to show you the actions of different commands.\n"
+msgstr ""
+"Pääikkunan piirtoalueella näet läpinäkyvän nuolen, joka kuvaa hiiren "
+"osoitinta. Tässä demossa esitellään erilaiset hiiren toiminnot.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:823
+msgid ""
+"The hollow arrow represents the mouse cursor without a mouse button being "
+"pressed.\n"
+msgstr ""
+"Läpinäkyvä nuoli kuvaa hiiren osoitinta silloin kun hiiren painikkeita ei "
+"ole painettu.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:825
+#, fuzzy
+msgid ""
+"When the left mouse button would be pressed, the mouse cursor appears to "
+"flash and the hollow arrow is replaced by a solid left-pointing red arrow "
+"while the button is pressed.\n"
+msgstr ""
+"Osoittimen välähdys ja sen muuttuminen punaiseksi kuvaa hiiren vasemman "
+"painikkeen painamista. Koko sen ajan, kun hiiren painike on painettuna alas, "
+"osoitin esitetään punaisella nuolella.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:826
+msgid ""
+"Note: these color changes occur only during the demo to simulate mouse "
+"button presses.\n"
+msgstr ""
+"Huom: Hiiren osoittimen väri muuttuu vain demo-tilassa kuvaten hiiren "
+"painikkeiden käyttöä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:24
+#: ../../../../build/work/app/i18n/custmsg.h:828
+msgid ""
+"Moving the mouse while a mouse button is pressed is called 'dragging'.\n"
+msgstr ""
+"Hiiren liikuttelua silloin kun hiiren painike on painettuna, kutsutaan "
+"\"raahaamiseksi\".\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:32
+#: ../../../../build/work/app/i18n/custmsg.h:830
+#, fuzzy
+msgid ""
+"When the left mouse button is released, the mouse cursor flashes and the "
+"hollow up black arrow is restored.\n"
+msgstr ""
+"Kun hiiren vasen painike vapautetaan, osoitin välähtää ja se palautetaan "
+"läpinäkyväksi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:40
+#: ../../../../build/work/app/i18n/custmsg.h:832
+#, fuzzy
+msgid ""
+"Dragging with the right button is simulated by a blue right-facing solid "
+"cursor.\n"
+msgstr ""
+"Hiiren oikealla painikkeella raahaamista kuvataan sinisellä nuolella.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:49
+#: ../../../../build/work/app/i18n/custmsg.h:834
+#, fuzzy
+msgid "Release Right Click\n"
+msgstr "Hiiren 2-painike"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:57
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:62
+#: ../../../../build/work/app/i18n/custmsg.h:837
+#, fuzzy
+msgid "Sometimes the Shift key is held down while using the mouse \n"
+msgstr ""
+"Joskus vaihto -näppäintä (shift) on painettava samalla kun hiirellä "
+"klikataan tai raahataan.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:838
+#, fuzzy
+msgid ""
+"This is indicated by an outlined arrow with the letter S near the arrow.\n"
+msgstr "Tämä esitetään lisäämällä värilliseen osoittimeen ääriviivat.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:71
+#: ../../../../build/work/app/i18n/custmsg.h:840
+#, fuzzy
+msgid ""
+"The left mouse button is held down with the Shift and dragged for a Left-"
+"Shift-Drag. \n"
+msgstr "Hiiren vasen painike vapautetaan loppupisteessä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:86
+#: ../../../../build/work/app/i18n/custmsg.h:842
+#, fuzzy
+msgid "Sometimes the Control key is held down while using the mouse. \n"
+msgstr ""
+"Joskus vaihto -näppäintä (shift) on painettava samalla kun hiirellä "
+"klikataan tai raahataan.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:843
+msgid ""
+"This is indicated with an upward filled arrow head with the letter C near "
+"the arrow \n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:98
+#: ../../../../build/work/app/i18n/custmsg.h:845
+msgid ""
+"If while the Control is held the Left mouse button is held down it is a Ctrl-"
+"Move and a Ctrl-Left-Drag. \n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:846
+#, fuzzy
+msgid ""
+"This is indicated by an an left-facing open-headed arrow with the letter C "
+"near it.\n"
+msgstr "Tämä esitetään lisäämällä värilliseen osoittimeen ääriviivat.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:114
+#: ../../../../build/work/app/i18n/custmsg.h:848
+msgid "You can also use the Control key with the Right mouse button. \n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:849
+msgid ""
+"This is indicated with a right-facing filled arrow with an open arrow head "
+"and the letter C near the arrow \n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:130
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:23
+#: ../../../../build/work/app/i18n/custmsg.h:852
+msgid ""
+"The main drawing area shows a portion of total layout. You can zoom in or "
+"zoom out by choosing 'Zoom In' or 'Zoom Out' in the 'Edit' menu, by using "
+"the Zoom buttons on the toolbar or by using the 'Page Down' and 'Page Up' "
+"keys.\n"
+msgstr ""
+"Piirtoalueella näytetään osa ratasuunnitelmasta. Voit lähentää tai loitontaa "
+"näkymää valitsemalla Muokkaa -valikosta \"Lähennä\" tai \"Loitonna\", "
+"käyttämällä vastaavia painikkeita työkaluriviltä, näppäimistön PgUp ja PgDn -"
+"näppäimillä tai rullahiiren rullasta pyörittämällä.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:853
+msgid "You can see the entire layout in the Map window.\n"
+msgstr "Kartta -ikkunassa esitetään koko ratasuunnitelma.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:33
+#: ../../../../build/work/app/i18n/custmsg.h:855
+msgid "As you Zoom Out tracks are drawn with one line instead of two.\n"
+msgstr ""
+"Loitonnettaessa riittävästi, raiteet piirretään ainoastaan yhdellä viivalla "
+"normaalin kahden sijaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:49
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:858
+#, fuzzy
+msgid ""
+"You can change what portion of the layout is shown by using the 'Map' window "
+"which shows a compressed version of the entire layout. A hilighted area of "
+"the 'Map' (in blue highlight) shows what portion of the layout is displayed "
+"in the main drawing area.\n"
+msgstr ""
+"Kartta -ikkunan avulla voit valita mikä osa ratasuunnitelmaa näytetään. "
+"Kartta -ikkunassa esitetään piennennetty kuva koko ratasuunnitelmasta. "
+"Korostettu alue esittää pääikkunan piirtoalueella näytettävän alueen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:859
+msgid ""
+"You can Left-Drag the hilighted area in the Map window to change the "
+"displayed portion of the layout.\n"
+msgstr ""
+"Raahaamalla hiiren vasemmalla painikkeella korostettua aluetta muuttaaksesi "
+"ratasuunnitelman näytettävän alueen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:861
+msgid ""
+"You can also Right-Drag on the Map window to set the scale and position of "
+"the Main window.\n"
+msgstr ""
+"Hiiren oikealla painikkeella raahaaminen puolestaan muuttaa näytettävän "
+"alueen skaalausta (kokoa).\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:72
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmnotes.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:864
+msgid ""
+"The <Note> command lets you attach notes to various spots on the layout.\n"
+msgstr "Voit liittää ratasuunnitelmaasi muistiinpanoja.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmnotes.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:866
+msgid ""
+"When you place a note, the Note editor window is displayed which lets you "
+"enter the note.\n"
+msgstr ""
+"Kun lisäät ratasuunnitelmaan muistiinpanon, avataan editori jossa voit "
+"kirjoittaa muistiinpanon sisällön.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmnotes.xtr:22
+#: ../../../../build/work/app/i18n/custmsg.h:868
+msgid ""
+"If you click on a note in <Describe> mode the Note editor displays the "
+"note.\n"
+msgstr ""
+"Jos määrittele-komento on aktiivinen ja klikkaat muistiinpanoa, sen sisältö "
+"näytetään editorissa. Näin voit myös muokata aiemmin kirjoittamaasi "
+"muistiinpanoa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmnotes.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:870
+msgid "This is the end of the XTrackCAD Demos.\n"
+msgstr "Tähän päättyivät XTrackCADin demot.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:871
+msgid "Click Step to return to XTrackCAD.\n"
+msgstr ""
+"Paina seuraava vaihe, seuraava tai lopeta painiketta palataksesi XTrackCADin "
+"normaaliin tilaan.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:872
+msgid "Thanks for watching.\n"
+msgstr "Kiitos kun katsoit.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:32
+#: ../../../../build/work/app/i18n/custmsg.h:874
+msgid "This example shows how to create parallel tracks.\n"
+msgstr "Tämä esimerkki näyttää miten rinnakkaisia raiteita luodaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:37
+#: ../../../../build/work/app/i18n/custmsg.h:876
+msgid ""
+"The separation is set in the <Parallel Separation> window. You should set "
+"this value before you begin to select tracks.\n"
+msgstr ""
+"Raiteiden välinen etäisyys asetetaan työkalurivillä olevan tekstikentän "
+"avulla. Tämä arvo on asetettava ennen kuin raiteita valitaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:49
+#: ../../../../build/work/app/i18n/custmsg.h:878
+msgid ""
+"You control which side the parallel track will be on by moving the cursor "
+"from one side of the track centerline to the other.\n"
+msgstr ""
+"Voit kontrolloida kummalle puolelle rinnakkainen raide luodaan siirtämällä "
+"hiiren osoitinta alkuperäisen raiteen puolelta toiselle.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:81
+#: ../../../../build/work/app/i18n/custmsg.h:880
+msgid "When you release the mouse button the new parallel track is created.\n"
+msgstr "Uusi rinnakkainen raide luodaan kun vapautat hiiren painikkeen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:881
+msgid ""
+"Note that the <Parallel> command remains active after you created the "
+"track. This is controlled by the Sticky dialog in the Options menu.\n"
+msgstr ""
+"Huomaa, että rinnakkainen-komento pysyy aktiivisena komentona luotuamme "
+"raiteen. Tätä käyttäytymistä voidaan muuttaa valikosta Asetukset|Pysyvät "
+"komennot.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:92
+#: ../../../../build/work/app/i18n/custmsg.h:883
+msgid "You cannot create a track parallel to a turnout.\n"
+msgstr "Vaihteesta ei voi luoda rinnakkaista raidetta.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:172
+#: ../../../../build/work/app/i18n/custmsg.h:885
+msgid ""
+"Note that the new curved track is automatically connected to the short "
+"parallel track.\n"
+msgstr ""
+"Huomaa, että uusi kaarre liitettiin automaattisesti lyhyeen rinnakkaiseen "
+"raiteeseen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:180
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:19
+#: ../../../../build/work/app/i18n/custmsg.h:888
+#, fuzzy
+msgid ""
+"Polylines and polygons (created with the <Draw> command) can be modified by "
+"dragging on their corners or edges.\n"
+msgstr ""
+"Monikulmioita voidaan muokata raahaamalla niiden kulmista tai reunoista.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:889
+#, fuzzy
+msgid "First Left Click on the shape you want to modify.\n"
+msgstr "Valitse ensin raiteet, jotka haluat siirtää.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:29
+#: ../../../../build/work/app/i18n/custmsg.h:891
+#, fuzzy
+msgid "Then drag on the point you want to move\n"
+msgstr "Valitse ensin raiteet, jotka haluat siirtää.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:893
+msgid "And finally press the Space bar to finish the change\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:895
+msgid "If you select the middle of an Edge a new Corner is created.\n"
+msgstr ""
+"Jos valitset raahauskohdan kulmien väliltä, siihen luodaan uusi kulma.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:72
+#: ../../../../build/work/app/i18n/custmsg.h:897
+msgid "To delete a corner, select and then press Delete or Backspace\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:98
+#: ../../../../build/work/app/i18n/custmsg.h:899
+msgid "But you cannot have a Poly-shape with less than 3 sides.\n"
+msgstr "Monikulmiossa on kuitenkin aina oltava vähintään kolme kulmaa/sivua.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:126
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:126
+#: ../../../../build/work/app/i18n/custmsg.h:902
+msgid ""
+"To use the <Profile> command you first need to define Elevations on your "
+"layout.\n"
+msgstr ""
+"Käyttääksesi profiili-komentoa täytyy ratasuunnitelmassa olla määriteltyjä "
+"korkeustasoja.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:903
+msgid "In this example we'll use the Elevations defined in the last example.\n"
+msgstr ""
+"Tässä esimerkissä käytämme edellisessä esimerkissä käytettyjä "
+"korkeustasoja.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:904
+msgid "You can move or resize the Profile dialog now if you want.\n"
+msgstr "Voit siirtää Profiili-ikkunaa tai muuttaa sen kokoa jos haluat.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:135
+#: ../../../../build/work/app/i18n/custmsg.h:906
+msgid ""
+"To show the Profile you need to select a Path on the tracks of your layout.\n"
+msgstr "Näyttääksesi rataprofiilin täytyy valita reitti suunnitelmastasi.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:907
+msgid "Select a Defined Elevation point (marked by Gold dots).\n"
+msgstr "Valitse määriteltyjä korkeustasoja (merkitty keltaisilla täplillä).\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:908
+msgid "We will start with the right end of the siding.\n"
+msgstr "Aloitamme aseman oikeasta päästä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:148
+#: ../../../../build/work/app/i18n/custmsg.h:910
+msgid ""
+"The second Point is at the left end of the siding. The Path will be drawn "
+"in Purple on the layout.\n"
+msgstr ""
+"Toinen piste on aseman vasen pää. Reitti merkitään ratasuunnitelmaan "
+"purppuralla.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:160
+#: ../../../../build/work/app/i18n/custmsg.h:912
+msgid "Now select the end of one of the Branches\n"
+msgstr "Valitse nyt toisen haaran pää.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:169
+#: ../../../../build/work/app/i18n/custmsg.h:914
+msgid ""
+"The Profile line is drawn in Red. This indicates that there some turnouts "
+"on that section of the Path which have more than 2 connections.\n"
+msgstr ""
+"Rataprofiili on piirretty punaisella viivalla. Tämä tarkoittaa sitä, että "
+"kyseisellä osuudella on vaihteita, jotka ovat yhteydessä useampaan kuin "
+"kahteen määriteltyyn korkeustasoon.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:915
+msgid ""
+"The grade on this part of the Path is the average and may be affected by "
+"other Elevations, such the end of the lower branch.\n"
+msgstr ""
+"Osuuden nousukulma on keskiarvo ja siihen voi vaikuttaa muut korkeustasot, "
+"kuten alemman haaran pään korkeustaso.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:178
+#: ../../../../build/work/app/i18n/custmsg.h:917
+msgid "Now try to select the End-Point of the other branch.\n"
+msgstr "Yritä nyt valita toisen haaran pää.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:918
+msgid ""
+"You will get an error message because there is no route to one of the ends "
+"of the existing Path.\n"
+msgstr ""
+"Saat virheilmoituksen, koska valitun reitin päistä ei ole reittiä tähän "
+"pisteeseen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:187
+#: ../../../../build/work/app/i18n/custmsg.h:920
+msgid ""
+"In this case remove the last part of the Path by clicking on current end of "
+"the Path and reselect the End-Point.\n"
+msgstr ""
+"Poista tässä tapauksessa viimeinen osuus klikkaamalla valittuna olevan "
+"haaran päätä ja valitse sitten toisen haaran pää.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:198
+#: ../../../../build/work/app/i18n/custmsg.h:922
+msgid "Notice that the Grade has changed on the Profile.\n"
+msgstr "Huomaa että nousukulma on muuttunut profiili-ikkunassa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:205
+#: ../../../../build/work/app/i18n/custmsg.h:924
+msgid ""
+"You can Ignore End-Points on the Path by using Shift-Right-Click to display "
+"the Profile Options popup menu and chosing Ignore.\n"
+msgstr ""
+"Voit hylätä reitillä olevia raiteiden liitoskohtia ponnahdusvalikosta, joka "
+"aukeaa painamalla vaihto-nnäppäintä ja klikkaamalla hiiren oikealla. Valitse "
+"\"Hylkää\".\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:925
+msgid ""
+"Note: We can't show the menu in demo mode but we will show the effect of a "
+"Shift Right Click and selecting ignore. We will be Ignoring the End-Point "
+"of the Turnout that is not on the Path.\n"
+msgstr ""
+"Huom: Demossa ei voida esittää valikoita, mutta näytämme ponnahdusvalikosta "
+"suoritetun hylkää-komennon vaikutuksen. Hylkäämme vaihteesta sen "
+"päätepisteen, joka ei ole profiilin reitillä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:217
+#: ../../../../build/work/app/i18n/custmsg.h:927
+msgid "Notice that part of the Profile line is redrawn in Blue.\n"
+msgstr "Huomaa että osa profiilista on piirretty sinisellä viivalla.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:928
+msgid ""
+"Also, the Computed Elevations and Grade marker on the right side of the "
+"layout have been updated.\n"
+msgstr "Myös lasketut korkeustasot sekä nousukulman merkintä on päivitetty.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:225
+#: ../../../../build/work/app/i18n/custmsg.h:930
+msgid ""
+"You can set additional Defined Elevation points using the Profile Options "
+"popup menu. These points are added to the Profile if they are on the Path.\n"
+msgstr ""
+"Ponnahtusvalikon avulla voit lisätä myös uusia määriteltyjä korkeustasoja. "
+"Nämä pisteet lisätään profiiliin, jos ne ovat profiilin reitillä.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:931
+msgid ""
+"We do this by Shift Right Click to display the Profile Options popup menu "
+"and selecting Define.\n"
+msgstr ""
+"Teemme tämän avaamalla ponnahdusvalikon ja valitsemalla \"Määritelty\".\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:237
+#: ../../../../build/work/app/i18n/custmsg.h:933
+msgid ""
+"We've just added a Defined Elevation point to the middle of the lower "
+"branch. Notice the addition on the Profile dialog.\n"
+msgstr ""
+"Olemme juuri lisänneet määritellyn korkeustason keskelle alempaa haaraa. "
+"Huomaa lisäys profiili-ikkunassa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:246
+#: ../../../../build/work/app/i18n/custmsg.h:935
+msgid ""
+"For the siding we defined a Station name but it's not on the Path, since the "
+"Path takes the shortest distance between points.\n"
+msgstr ""
+"Sivuraiteelle määrittelimme aseman, mutta se ei ole reitillä, koska "
+"profiilin reitti valitaan lyhyimmän pisteiden välisen etäisyyden mukaan.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:936
+msgid ""
+"We can Ignore one of the End-Points on a Turnout to force the Path to take "
+"the other route.\n"
+msgstr ""
+"Voimme hylätä yhden vaihteen päätepisteistä pakottaaksemme reitin kulkemaan "
+"toista kautta.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:937
+msgid ""
+"Again we use Shift-Right-Click to display the Profile Options menu and "
+"select ignore.\n"
+msgstr "Käytämme jälleen ponnahdusvalikkoa ja valitsemme \"Hylkää\".\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:258
+#: ../../../../build/work/app/i18n/custmsg.h:939
+msgid "Now remove the First section of the Path,\n"
+msgstr "Valitse nyt reitin ensimmäinen osuus,\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:268
+#: ../../../../build/work/app/i18n/custmsg.h:941
+msgid "and reselect it.\n"
+msgstr "ja valitse se uudelleen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:277
+#: ../../../../build/work/app/i18n/custmsg.h:943
+msgid ""
+"Now the Path goes through the Station End-Point and the name appears on the "
+"Profile dialog.\n"
+msgstr ""
+"Nyt reitti kulkee määrittelemämme aseman kautta ja sen nimi näkyy profiili-"
+"ikkunassa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:286
+#: ../../../../build/work/app/i18n/custmsg.h:945
+msgid "Now we need to increase the separation where the tracks cross.\n"
+msgstr "Nyt meidän on kasvatettava risteävien raiteiden välistä etäisyyttä.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:946
+msgid ""
+"The two Elevations you see here are Computed Elevations which means "
+"XTrackCAD dynamically computes the Elevation based on the Elevations of "
+"connecting tracks.\n"
+msgstr ""
+"Tässä näkyvät kaksi korkeustason merkintää ovat laskettuja, mikä tarkoittaa "
+"sitä että XTrackCAD laskee tämän pisteen korkeuden automaattisesti muiden "
+"tähän liittyvien korkeustasojen mukaan.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:947
+msgid ""
+"First make the lower End-Point a Defined Elevation point using Shift-Right-"
+"Click and the Profile Options menu. You will see the End-Point marked by a "
+"Gold dot and a new line is added to the Profile dialog.\n"
+msgstr ""
+"Muuta ensin alempi \"laskettu\" korkeustaso \"määritellyksi\" käyttämällä "
+"jälleen ponnahdusvalikkoa. Piste merkitään nyt keltaisella täplällä ja uusi "
+"viiva lisätään profiili-ikkunaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:297
+#: ../../../../build/work/app/i18n/custmsg.h:949
+msgid "Now, drag the point on the Profile Dialog to change the Elevation.\n"
+msgstr ""
+"Raahaa nyt profiili-ikkunassa tätä pistettä muuttaaksesi sen korkeustasoa.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:950
+msgid ""
+"Note the grade on each side of the point will be displayed at the bottom of "
+"the Profile dialog.\n"
+msgstr ""
+"Nousukulmat pisteen molemmin puolin näytetään profiili-ikkunan alaosassa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:319
+#: ../../../../build/work/app/i18n/custmsg.h:952
+msgid ""
+"After we release the Profile is updated to show the new Elevation and "
+"Grade.\n"
+msgstr ""
+"Kun vapautamme hiiren painikkeen, profiili on päivitetty uuden korkeustason "
+"mukaisesti.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:326
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:119
+#: ../../../../build/work/app/i18n/custmsg.h:955
+msgid "The <Rescale> command will change the size of the selected objects.\n"
+msgstr "Mittakaavan muutos -komennolla muutetaan valittujen objektien kokoa.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:956
+msgid "First we will try rescaling by ratio.\n"
+msgstr "Ensin kokeilemme suhteellista muutosta.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:126
+#: ../../../../build/work/app/i18n/custmsg.h:958
+msgid "We are going to make everything 150% bigger.\n"
+msgstr "Suurennamme kaiken 150%:ksi entiseen verrattuna.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:136
+#: ../../../../build/work/app/i18n/custmsg.h:960
+msgid "Note the track gauge did not change.\n"
+msgstr "Huomaa ettei raideleveys muuttunut.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:143
+#: ../../../../build/work/app/i18n/custmsg.h:962
+msgid "Let's try that again.\n"
+msgstr "Kokeillaan uudestaan.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:963
+msgid "Now we are going to convert from one scale to another.\n"
+msgstr "Nyt muutamme mittakaavasta toiseen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:154
+#: ../../../../build/work/app/i18n/custmsg.h:965
+msgid "We will convert everything from N scale to HO scale...\n"
+msgstr "Muutamme kaiken N-mittakaavasta H0:ksi...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:161
+#: ../../../../build/work/app/i18n/custmsg.h:967
+msgid "and change the track gauge as well.\n"
+msgstr "ja muutamme myös raideleveyden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:169
+#: ../../../../build/work/app/i18n/custmsg.h:969
+msgid "Note that the Title of the turnout did not change.\n"
+msgstr "Huomaa ettei vaihteen otsikko muuttunut.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:177
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrotate.xtr:72
+#: ../../../../build/work/app/i18n/custmsg.h:972
+msgid ""
+"The <Rotate> command will pivot the Selected objects. First Click on the "
+"pivot point and then drag to Rotate the objects.\n"
+msgstr ""
+"Voit pyörittää valittuja objekteja. Klikkaa ensin haluttua kiertopistettä ja "
+"raahaa sitten pyörittääksesi objekteja.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:973
+msgid ""
+"In this example we will rotate the selected structure about it's center.\n"
+msgstr ""
+"Tässä esimerkissä pyöritämme valittua rakennusta keskipisteensä ympäri.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrotate.xtr:135
+#: ../../../../build/work/app/i18n/custmsg.h:975
+#, fuzzy
+msgid ""
+"The <Rotate> command will restrict the rotation to increments of 15° if you "
+"hold down the <Shift> and <Ctrl> keys.\n"
+msgstr ""
+"Jos pidät contol-näppäintä painettuna pyörittäminen tapahtuu 15°:n välein.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrotate.xtr:316
+#: ../../../../build/work/app/i18n/custmsg.h:977
+msgid ""
+"There are Rotate options that you can access by Shift-Right-Click command "
+"menu and choosing 'Rotate...'.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:978
+msgid ""
+"You can rotate the selected object by a fixed rotatation (15, 30, 45, 90, "
+"180) either clockwise or counter-clockwise, or by manually entering any "
+"angle.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:979
+msgid ""
+"The other option is 'Align' which allows you align selected objects with an "
+"unselected object. This is useful to align railside buildings with track.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:980
+msgid "Unfortunately, we can not currently demonstrate these features.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrotate.xtr:529
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmruler.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:983
+msgid ""
+"The <Ruler> command draws a Ruler on the layout you can use to measure "
+"distances.\n"
+msgstr ""
+"Viivain-komento piirtää viivaimen, jolla voit mitata etäisyyksiä "
+"ratasuunnitelmassasi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmruler.xtr:24
+#: ../../../../build/work/app/i18n/custmsg.h:985
+msgid "If you press the <Ruler> command again the Ruler is removed.\n"
+msgstr "Jos aktivoit toiminnon uudelleen, viivain poistetaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmruler.xtr:32
+#: ../../../../build/work/app/i18n/custmsg.h:987
+msgid "But you can place it somewhere else.\n"
+msgstr "Mutta voit sijoittaa sen johonkin toiseen paikkaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmruler.xtr:42
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:173
+#: ../../../../build/work/app/i18n/custmsg.h:990
+msgid "The <Select> command is used to select tracks.\n"
+msgstr "Valitse -komentoa käytetään raiteiden valitsemiseen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:991
+msgid "Selected tracks can be moved or rotated during the <Select> command.\n"
+msgstr ""
+"Valittuja raiteita voidaan siirtää tai pyörittää Valitse -komennon ollessa "
+"aktiivisena.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:992
+msgid "Selected tracks can also be deleted, hidden, listed and exported.\n"
+msgstr ""
+"Valitut raiteet voidaan myös poistaa, piilottaa (tunneli), luetteloida tai "
+"eksportoida (viedä tiedostoon).\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:993
+msgid ""
+"When you move the cursor near a track that could be selected, the track is "
+"drawn with think blue lines.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:184
+#: ../../../../build/work/app/i18n/custmsg.h:995
+#, fuzzy
+msgid "A Left-Click selects a track\n"
+msgstr "Yksi klikkaus hiiren vasemmalla painikkeella valitsee raiteen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:192
+#: ../../../../build/work/app/i18n/custmsg.h:997
+#, fuzzy
+msgid ""
+"The selected track will have red X's drawn where it is connected to "
+"unselected tracks. This indicates where the track will be disconnected if "
+"the selected tracks are moved, rotated or deleted.\n"
+msgstr ""
+"Kun siirrät valittuja raiteita, jotka on liitetty valitsemattomiin "
+"raiteisiin, raiteet irrotetaan toisistaan. Nämä pisteet merkitään punaisilla "
+"risteillä.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:998
+msgid "A Ctrl-Left-Click adds tracks to the selection\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:211
+#: ../../../../build/work/app/i18n/custmsg.h:1000
+#, fuzzy
+msgid "Selecting a selected track re-selects only it.\n"
+msgstr "Klikkaamalla jo valittuna olevaa raidetta, sen valinta poistuu.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:219
+#: ../../../../build/work/app/i18n/custmsg.h:1002
+#, fuzzy
+msgid "Selecting off all tracks de-selects them.\n"
+msgstr "Klikkaamalla jo valittuna olevaa raidetta, sen valinta poistuu.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:227
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:232
+#: ../../../../build/work/app/i18n/custmsg.h:1005
+msgid ""
+"To demonstrate Select Connected, first select two tracks at the end of a "
+"part to be selected \n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:248
+#: ../../../../build/work/app/i18n/custmsg.h:1007
+msgid ""
+"Shift-Left-Click on a track will select all unselected tracks connected to "
+"the track. Selection stops at a previously selected track.\n"
+msgstr ""
+"Pitämällä vaihto-näppäintä pohjassa ja klikkaamalla raidetta, valitaan "
+"kaikki tähän raiteeseen yhtyvät raiteet. Valinta pysähtyy kuitenkin "
+"ensimmäiseen jo valittuun raiteeseen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:260
+#: ../../../../build/work/app/i18n/custmsg.h:1009
+#, fuzzy
+msgid ""
+"Be careful with this because its very easy to select all tracks this way\n"
+msgstr ""
+"Ole kuitenkin varovainen, sillä näin voit helposti tulla valinneeksi kaikki "
+"raiteet.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:274
+#: ../../../../build/work/app/i18n/custmsg.h:1011
+msgid "The <esc> key will deselect all objects.\n"
+msgstr "Esc -näppäin poistaa valinnat kaikista objekteista.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:282
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:287
+#: ../../../../build/work/app/i18n/custmsg.h:1014
+msgid "Left-Drag is used to select all objects within an area.\n"
+msgstr ""
+"Raahaamalla hiiren vasemmalla painikkeella, voidaan valita kaikki alueella "
+"olevat objektit.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:295
+#: ../../../../build/work/app/i18n/custmsg.h:1016
+msgid "Shift-Left-Drag is used to move selected tracks.\n"
+msgstr ""
+"Voit siirtää valittuja objekteja pitämällä vaihto-näppäintä painettuna ja "
+"raahaamalla hiiren vasemmalla painikkeella.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1017
+msgid ""
+"When you move selected tracks that are connected to unselected tracks, the "
+"tracks will be disconnected. These points are marked by a Red cross on the "
+"layout.\n"
+msgstr ""
+"Kun siirrät valittuja raiteita, jotka on liitetty valitsemattomiin "
+"raiteisiin, raiteet irrotetaan toisistaan. Nämä pisteet merkitään punaisilla "
+"risteillä.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1018
+msgid ""
+"If the unconnected end point of a track and one being moved are close "
+"enough, two circles are displayed, showing where the tracks will be snapped "
+"together. \n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:313
+#: ../../../../build/work/app/i18n/custmsg.h:1020
+#, fuzzy
+msgid "Let's move the Main window to see what's going on next\n"
+msgstr "Lähennämme, jotta näet paremmin mitä tapahtuu.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:320
+#: ../../../../build/work/app/i18n/custmsg.h:1022
+#, fuzzy
+msgid ""
+"Ctrl-Left-Drag rotates the selected tracks about the pivot point (which is "
+"where you started the drag)\n"
+msgstr ""
+"Painamalla vaihto-näppäintä ja raahaamalla hiiren oikealla painikkeella voit "
+"pyörittää valittuja raiteita. Kiertopiste määräytyy sen mukaan, mistä "
+"raahaaminen aloitettiin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:382
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:387
+#: ../../../../build/work/app/i18n/custmsg.h:1025
+msgid ""
+"Next we select the <Join Tracks> command to demonstrate \"Move To Join\" \n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:392
+#: ../../../../build/work/app/i18n/custmsg.h:1027
+#, fuzzy
+msgid ""
+"You can use Shift-Left-Click to select an open endpoint of a selected track "
+"to join with an unselected track. \n"
+msgstr ""
+"Seuraavaksi käytämme Yhdistä-komentoa. Vaihto + hiiren vasen siirtää valitut "
+"raiteet ja liittää ne valitsemattomiin.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1028
+#, fuzzy
+msgid "We'll move the Main window again.\n"
+msgstr "Hylkäämme alemman haaran.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:415
+#: ../../../../build/work/app/i18n/custmsg.h:1030
+#, fuzzy
+msgid ""
+"You then Left-Click on an endpoint of a unselected track to move the "
+"selected tracks to join. \n"
+msgstr ""
+"Seuraavaksi käytämme Yhdistä-komentoa. Vaihto + hiiren vasen siirtää valitut "
+"raiteet ja liittää ne valitsemattomiin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:430
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:30
+#: ../../../../build/work/app/i18n/custmsg.h:1033
+msgid "The <Split> command is used to split and disconnect tracks.\n"
+msgstr "Pilko-komentoa käytetään raiteiden pilkkomiseen ja irrottamiseen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:35
+#: ../../../../build/work/app/i18n/custmsg.h:1035
+msgid "Simply select the spot on the track you want to split.\n"
+msgstr "Valitse radalta kohta, jonka haluat pilkkoa.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1036
+msgid "You cannot split turnouts (unless you hold down the Shift key).\n"
+msgstr ""
+"Palaraiteita ja vaihteita ei voi pilkkoa, ellei vaihto-näppäintä pidetä "
+"samanaikaisesti painettuna.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:48
+#: ../../../../build/work/app/i18n/custmsg.h:1038
+msgid ""
+"If you split at spot that is already an End-Point between two tracks, or "
+"split twice at the same spot, the track is disconnected.\n"
+msgstr ""
+"Jos pilkot kohdasta, joka on raiteiden liitos tai pilkot kaksi kertaa "
+"samasta kohdasta, raiteet irrotetaan toisistaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:60
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:65
+#: ../../../../build/work/app/i18n/custmsg.h:1041
+msgid "The <Tunnel> command marks selected tracks as hidden.\n"
+msgstr "Tunneli-komento merkitsee valitut raideosat piilotetuiksi.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1042
+msgid ""
+"A tunnel portal is drawn at the boundary between hidden and normal track.\n"
+msgstr ""
+"Tunnelin suuaukko piirretään piilotetun ja normaalin raideosan "
+"liitoskohtaan.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1043
+msgid ""
+"How the hidden tracks are drawn (solid, dashed or invisible) is controlled "
+"by the Draw EndPts radio button group on the Setup dialog.\n"
+msgstr ""
+"Piilotettujen raiteiden esitystapa valitaan näyttöasetuksista, kohdasta "
+"\"Piirrä tunneli\". Tunneli voidaan piirtää yhtenäisellä viivalla, "
+"katkoviivalla tai jättää kokonaan piirtämättä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:86
+#: ../../../../build/work/app/i18n/custmsg.h:1045
+msgid ""
+"To 'un-hide' a track just Select it again and click the Tunnel button.\n"
+msgstr ""
+"Palauttaaksesi tunneliksi merkityt raideosat normaaleiksi, valitse ne ja "
+"paina uudelleen tunneli-napista.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:100
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmstrtrk.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:1048
+msgid ""
+"Straight tracks are created by selecting the first End-Point of the track.\n"
+msgstr ""
+"Suorat raiteet luodaan valitsemalla hiiren vasemmalla painikkeella raiteen "
+"ensimmäinen päätepiste.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmstrtrk.xtr:12
+#: ../../../../build/work/app/i18n/custmsg.h:1050
+msgid "Then the other End-Point is dragged to its final postion.\n"
+msgstr ""
+"Toinen päätepiste valitaan pitämällä hiiren vasen painike alhaalla ja "
+"valitsemalla oikea paikka.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmstrtrk.xtr:20
+#: ../../../../build/work/app/i18n/custmsg.h:1052
+msgid "The left mouse button is released at the final end postion.\n"
+msgstr "Hiiren vasen painike vapautetaan loppupisteessä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmstrtrk.xtr:27
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:23
+#: ../../../../build/work/app/i18n/custmsg.h:1055
+msgid ""
+"Table Edges are used to mark the edges of the layout, either for aisles or "
+"room walls.\n"
+msgstr ""
+"Pöydän reunoja käytetään kuvaamaan ratasuunnitelman reunoja, joko "
+"kulkuväyliä tai seiniä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:47
+#: ../../../../build/work/app/i18n/custmsg.h:1057
+msgid "A Table Edge is attracted to the ends of other Table Edges.\n"
+msgstr "Pyödän reunojen päät vetävät toisiaan puoleensa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:1059
+msgid "Table Edges can be modified by dragging on their ends.\n"
+msgstr "Pöydän reunoje voidaan muokara raahaamalla niiden päistä.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:180
+#: ../../../../build/work/app/i18n/custmsg.h:1061
+msgid ""
+"If you hold down the Control key while dragging then the Table Edge will be "
+"attracted to other objects.\n"
+msgstr ""
+"Jos pidät control-näppäintä painettuna raahatessasi, pöydän reuna ja muut "
+"objektit vetävät toisiaan puoleensa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:218
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:1064
+msgid ""
+"These examples shows some of the various Turnout Designer windows. Each "
+"window defines a different type of turnout.\n"
+msgstr ""
+"Tässä esimerkissä näytetään joitakin monista vaihteiden ja raideosien "
+"suunnitteluikkunoista. Kussakin ikkunassa määritellään eri tyyppinen "
+"vaihde.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1065
+msgid ""
+"In each window there are a number of parameters to fill in and one or two "
+"description lines.\n"
+msgstr ""
+"Jokaisessa ikkunassa on useita parametrikenttiä sekä yksi tai kaksi riviä "
+"kuvausta varten.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1066
+msgid "You can print the design to check the dimensions before saving them.\n"
+msgstr ""
+"Voit tulostaa suunnittelemasi vaihteen tarkastaaksesi sen mitat ennen "
+"tallentamista.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:1068
+msgid "This is the regular turnout.\n"
+msgstr "Tämä on tavallinen vaihde.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1069
+msgid ""
+"In addition to the dimensions, you also enter the Title (Manufacturer, "
+"Description and Part Number). For Turnouts with Left and Right hand "
+"versions there are separate Descriptions and Part Numbers.\n"
+msgstr ""
+"Mittatietojen lisäksi voit syöttää otsikon (valmistaja, kuvaus ja "
+"tuotenumero). Vaihteille, joilla on vasen ja oikea versio, on molempia "
+"versioita varten omat kentät kuvausta ja tuotenumeroa varten.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1070
+msgid ""
+"Some Turnouts and Sectional track are pre-mounted on roadbed. For these "
+"parts you can specify the width of the roadbed, the thickness of the lines "
+"drawn for the edge of the roadbed and the color.\n"
+msgstr ""
+"Joihinkin raideosiin kuuluu kiinteä ratapenkka. Näitä osia varten voit "
+"määrittää ratapenkan leveyden, reunaviivan paksuuden sekä reunaviivan "
+"värin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:30
+#: ../../../../build/work/app/i18n/custmsg.h:1072
+msgid "The double slip switch is described by only a few parameters.\n"
+msgstr ""
+"Kaksipuolinen risteysvaihde määritellään vain muutamalla parametrilla.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:40
+#: ../../../../build/work/app/i18n/custmsg.h:1074
+msgid "The double crossover only needs length and track separation.\n"
+msgstr ""
+"Sovitettu raideristeys tarvitsee ainoastaan pituuden ja raiteiden välisen "
+"etäisyyden.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:48
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:30
+#: ../../../../build/work/app/i18n/custmsg.h:1077
+msgid ""
+"Pressing the turnout button displays the Turnout Selection window to let you "
+"choose a turnout to place.\n"
+msgstr ""
+"\"Lisää|Palaraide\" valikosta tai vastaava painike työkaluriviltä avaa "
+"palaraiteiden valinta ikkunan, josta voit valita valmiita raideosia "
+"liitettäväksi ratasuunnitelmaasi.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1078
+msgid ""
+"Note that once you start to place the turnout on the Main window the Turnout "
+"Selection window disappears. This feature is enabled by the Hide toggle "
+"button on the dialog.\n"
+msgstr ""
+"Huomaa, että kun aloitat raideosan paikoilleen asettelun pääikkunassa, "
+"valintaikkuna katoaa. Tämä voidaan myös estää poistamalla ruksi valinnasta "
+"\"Piilota\".\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:38
+#: ../../../../build/work/app/i18n/custmsg.h:1080
+msgid ""
+"You can place the turnout on a arbitrary position on the layout. Left-drag "
+"the turnout into place...\n"
+msgstr ""
+"Aseta palaraide ratasuunnitelmaasi klikkaamalla. Raahaa se sitten hiiren "
+"vasemmalla painikkeella paikoilleen...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:85
+#: ../../../../build/work/app/i18n/custmsg.h:1082
+msgid "Then you can rotate the turnout by Right dragging.\n"
+msgstr "Voit myös pyörittää sitä raahaamalla hiiren oikealla painikkeella.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1083
+msgid ""
+"You can also use Shift-Right-Click to display a popup menu that lets you "
+"rotate the Turnout by specific angles.\n"
+msgstr ""
+"Vaihto + hiiren oikea avaa ponnahdusvalikon, josta voit pyörittää raideosaa "
+"tietyn kulman verran.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:136
+#: ../../../../build/work/app/i18n/custmsg.h:1085
+msgid ""
+"When you are satisfied with the position and orientation of the turnout "
+"press Space bar or the Return key on the keyboard to finish placing the "
+"turnout.\n"
+msgstr ""
+"Kun olet tyytyväinen raideosan asetteluun, paina Välilyönti tai Return "
+"viimeistelläksesi raideosan asettelun.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1086
+#, fuzzy
+msgid ""
+"Pressing the Close button on the Turnout dialog will end the <Turnout> "
+"command as well as placing the turnout.\n"
+msgstr ""
+"\"Sulje\" painike valintaikkunassa viimeistelee raideosan asettelun ja "
+"lopettaa toiminnon.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:146
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:189
+#: ../../../../build/work/app/i18n/custmsg.h:1089
+msgid ""
+"If you drag along an existing track the new turnout will be attached to the "
+"track.\n"
+msgstr ""
+"Jos raahaat vaihdetta olemassa olevaa raidetta pitkin, uusi vaihde liitetään "
+"raiteeseen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1090
+msgid ""
+"Note that the status line tells you the number of End-Points that would be "
+"connected and, the maximum displacement of the End-Points. This will be "
+"useful when building complex track, as we will see later.\n"
+msgstr ""
+"Huomaa, että tilarivillä kerrotaan kuinka monta päätepistettä ollaan "
+"liittämässä, sekä suurin päätepisteiden siirtymä. Tämä auttaa rakentamaan "
+"monimutkaisia ratoja, kuten myöhemmin näemme.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:220
+#: ../../../../build/work/app/i18n/custmsg.h:1092
+#, fuzzy
+msgid ""
+"By moving the cursor from one side to the other of the track centerline you "
+"can flip the turnout 180ᅵ.\n"
+msgstr ""
+"Siirtämällä hiiren osoitinta radan keskilinjan puolelta toiselle, voit "
+"kääntää vaihdetta 180°.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:236
+#: ../../../../build/work/app/i18n/custmsg.h:1094
+msgid ""
+"If you try to drag across another turnout the new turnout will placed at the "
+"nearest End-Point of the existing turnout.\n"
+msgstr ""
+"Jos yrität raahata toisen vaihteen päälle, uusi vaihde asetetaan olemassa "
+"olevan vaihteen lähimmän päätepisteen kohdalle.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:299
+#: ../../../../build/work/app/i18n/custmsg.h:1096
+msgid ""
+"When you press Space or Return while the turnout is on a track, the track "
+"will be split and the new turnout attached automatically.\n"
+msgstr ""
+"Vaihteen ollessa olemassa olevan radan päällä, rata pilkotaan ja uusi vaihde "
+"liitetään automaattisesti.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:307
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:366
+#: ../../../../build/work/app/i18n/custmsg.h:1099
+msgid "Pressing Close ends the <Turnout> command.\n"
+msgstr "Sulje-painike peruuttaa palaraiteiden asettelun.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:372
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:21
+#: ../../../../build/work/app/i18n/custmsg.h:1102
+msgid "Sometimes it's useful to modify turnouts triming one of the ends.\n"
+msgstr ""
+"Joskus on tarpeen muokata vaihteita säätämällä jonkin raiteen pituutta.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1103
+msgid "We use the <Split> command for this.\n"
+msgstr "Käytämme Pilko-komentoa tähän tarkoitukseen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:28
+#: ../../../../build/work/app/i18n/custmsg.h:1105
+msgid "Normally, if we try to Split a turnout we get an error message.\n"
+msgstr ""
+"Normaalisti, jos vaihdetta tai palaraidetta yritetään pilkkoa, saadaan "
+"virheilmoitus.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:37
+#: ../../../../build/work/app/i18n/custmsg.h:1107
+msgid "Hold down the Shift key and try again.\n"
+msgstr "Pidä vaihto-näppäi painettuna ja yritä uudelleen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:52
+#: ../../../../build/work/app/i18n/custmsg.h:1109
+msgid ""
+"The end of the turnout has been replaced by a piece of straight flex track "
+"which we can modify.\n"
+msgstr ""
+"Vaihteen pää korvattiin pätkällä suoraa fleksiraidetta, jota voi muokata "
+"normaalisti.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:1111
+msgid "We can try splitting the diverging leg.\n"
+msgstr "Voimme yrittää pikkoa haarautuvan raiteen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:74
+#: ../../../../build/work/app/i18n/custmsg.h:1113
+msgid ""
+"Notice that the tail of the diverging leg has been changed to a curved "
+"track...\n"
+msgstr "Huomaa, että haarautuva raide on muutettu kaarteeksi...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:84
+#: ../../../../build/work/app/i18n/custmsg.h:1115
+msgid "and a straight track.\n"
+msgstr "ja suoraksi raideosaksi.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:92
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:12
+#: ../../../../build/work/app/i18n/custmsg.h:1118
+msgid ""
+"This example show how to layout a yard using the <Turnout> and <Parallel> "
+"commands.\n"
+msgstr ""
+"Tässä esimerkissä näytetään ratapihan luominen käyttäen \"Palaraide\" ja "
+"\"Rinnakkainen raide\" komentoja.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:17
+#: ../../../../build/work/app/i18n/custmsg.h:1120
+msgid ""
+"You can resize and move the Turnout Selection dialog if it obscures the "
+"other windows.\n"
+msgstr ""
+"Voit pienentää tai siirtää raideosien valintaikkunaa, jos se peittää muita "
+"ikkunoita.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1121
+#, fuzzy
+msgid "First we place a turnout on the main line.\n"
+msgstr "Asetetaan ensin vaihde pääradalle.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:35
+#: ../../../../build/work/app/i18n/custmsg.h:1123
+msgid "Next extend the turnout with the <Modify> command.\n"
+msgstr "Seuraavaksi jatketaan vaihdetta \"Muokkaa\" komennolla.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:46
+#: ../../../../build/work/app/i18n/custmsg.h:1125
+#, fuzzy
+msgid ""
+"Now create a track parallel to the main line. Make sure the separation is "
+"reasonable for your scale.\n"
+msgstr ""
+"Luo sitten pääradalle rinnakkainen raide. Varmista, että raideväli on "
+"mittakaavallesi sopiva.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:62
+#: ../../../../build/work/app/i18n/custmsg.h:1127
+msgid "And place a turnout to connect the new track.\n"
+msgstr "Ja aseta vaihde liittääksesi uuden raiteen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1128
+msgid "We'll zoom in here to see what's going on.\n"
+msgstr "Lähennämme, jotta näet paremmin mitä tapahtuu.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:78
+#: ../../../../build/work/app/i18n/custmsg.h:1130
+msgid ""
+"Notice how we control which way the turnout is facing by moving the mouse "
+"across the center line of the track.\n"
+msgstr ""
+"Huomaa kuinka kontrolloimme vaihteen suuntaa siirtämällä hiiren osoitinta "
+"raiteen keskilinjan yli.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:94
+#: ../../../../build/work/app/i18n/custmsg.h:1132
+msgid ""
+"The Status bar displays the number of auto-connections that will be made and "
+"the maximum offset.\n"
+msgstr ""
+"Tilarivillä näytetään automaattisten liitosten lukumäärä, sekä suurin "
+"päätepisteen siirtymä.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1133
+msgid ""
+"XTrackCAD adjusts the turnout position for the best fit to minimize any "
+"connection offset\n"
+msgstr ""
+"XTrackCAD sijoittelee vaihteen siten, että se istuu parhaiten ja siirtymät "
+"ovat mahdollisimman pienet.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:106
+#: ../../../../build/work/app/i18n/custmsg.h:1135
+msgid "Note that placing the turnout splits the parallel track.\n"
+msgstr "Huomaa, kuinka vaihteen asettaminen pilkkoi rinnakkaisen raiteen.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1136
+msgid "We have to delete the leftover piece by Selecting and Deleting it.\n"
+msgstr "Pilkkomisesta yli jäänyt raideosa täytyy poistaa.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:120
+#: ../../../../build/work/app/i18n/custmsg.h:1138
+msgid "Repeat the process for the other tracks in the yard.\n"
+msgstr "Toista prosessi ratapihan muille raiteille.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:149
+#: ../../../../build/work/app/i18n/custmsg.h:1140
+msgid "For the last track we will join with a curve instead of a turnout.\n"
+msgstr "Viimeinen raide yhdistetään kaarteella vaihteen sijaan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:185
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrkwid.xtr:91
+#: ../../../../build/work/app/i18n/custmsg.h:1143
+msgid "We can indicate the mainline by making the rails wider.\n"
+msgstr "Voimme kuvata päärataa paksummalla raiteella.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1144
+msgid "First we select the mainline tracks...\n"
+msgstr "Ensin valitaan pääradan raiteet...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrkwid.xtr:128
+#: ../../../../build/work/app/i18n/custmsg.h:1146
+msgid "And then select Medium Tracks from the Edit menu.\n"
+msgstr "Valitse sitten keskikokoiset raiteet Muokkaa-valikosta.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1147
+msgid "We can't show the Edit menu, but we can show the effect.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrkwid.xtr:137
+#: ../../../../build/work/app/i18n/custmsg.h:1149
+msgid "We can make the rail thicker by selecting Thick Tracks.\n"
+msgstr "Tai paksut raiteet.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrkwid.xtr:148
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrntab.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:1152
+msgid ""
+"Turntables are created by specifying the radius in a dialog box on the "
+"Status Bar. The radius in the dialog can be changed before proceeding.\n"
+msgstr ""
+"Kääntöpöydät luodaan määrittelemällä ensiksi kääntöpöydän säde tilarivillä "
+"olevaan tekstikenttään.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrntab.xtr:15
+#: ../../../../build/work/app/i18n/custmsg.h:1154
+msgid "Then the turntable is dragged to its final location.\n"
+msgstr "Sitten kääntöpöytä raahataan paikoilleen.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrntab.xtr:22
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:317
+#: ../../../../build/work/app/i18n/custmsg.h:1157
+msgid "Introduction"
+msgstr "Johdanto"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:318
+#: ../../../../build/work/app/i18n/custmsg.h:1159
+msgid "Mouse Actions"
+msgstr "Hiiren toiminnot"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:319
+#: ../../../../build/work/app/i18n/custmsg.h:1161
+msgid "Dialogs"
+msgstr "Dialogit (ikkunat)"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:320
+#: ../../../../build/work/app/i18n/custmsg.h:1163
+msgid "Moving about"
+msgstr "Liikkuminen"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:321
+#: ../../../../build/work/app/i18n/custmsg.h:1165
+msgid "Describe and Select"
+msgstr "Määrittele ja valitse -toiminnot"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:322
+#: ../../../../build/work/app/i18n/custmsg.h:1167
+#, fuzzy
+msgid "Describe"
+msgstr "Kuvaus"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:324
+#: ../../../../build/work/app/i18n/custmsg.h:1171
+msgid "Simple tracks"
+msgstr "Yksinkertaiset raideosat"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:325
+#: ../../../../build/work/app/i18n/custmsg.h:1173
+msgid "Straight tracks"
+msgstr "Suorat raiteet"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:326
+#: ../../../../build/work/app/i18n/custmsg.h:1175
+msgid "Curved tracks"
+msgstr "Kaarevat raiteet"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:327
+#: ../../../../build/work/app/i18n/custmsg.h:1177
+msgid "Circles"
+msgstr "Ympyrät"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:328
+#: ../../../../build/work/app/i18n/custmsg.h:1179
+msgid "Turntables"
+msgstr "Kääntöpöydät"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:329
+#: ../../../../build/work/app/i18n/custmsg.h:1181
+msgid "Modifying tracks"
+msgstr "Raiteiden muokkaaminen"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:330
+#: ../../../../build/work/app/i18n/custmsg.h:1183
+msgid "Modifying end points "
+msgstr "Päätepisteiden muokkaaminen"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:331
+#: ../../../../build/work/app/i18n/custmsg.h:1185
+msgid "Extending"
+msgstr "Pidentäminen"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:332
+#: ../../../../build/work/app/i18n/custmsg.h:1187
+msgid "Medium and Thick Tracks"
+msgstr "Keskipaksut ja paksut raiteet"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:333
+#: ../../../../build/work/app/i18n/custmsg.h:1189
+msgid "Joining Tracks"
+msgstr "Raiteiden yhdistäminen"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:334
+#: ../../../../build/work/app/i18n/custmsg.h:1191
+msgid "Straight to straight"
+msgstr "Suora - suora"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:335
+#: ../../../../build/work/app/i18n/custmsg.h:1193
+msgid "Curve to straight"
+msgstr "Kaareva - suora"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:336
+#: ../../../../build/work/app/i18n/custmsg.h:1195
+msgid "Circle to circle"
+msgstr "Ympyrä - ympyrä"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:337
+#: ../../../../build/work/app/i18n/custmsg.h:1197
+msgid "Joining to turntables"
+msgstr "Yhdistäminen kääntöpäytään"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:338
+#: ../../../../build/work/app/i18n/custmsg.h:1199
+msgid "Easements"
+msgstr "Kaarreloivennukset"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:339
+#: ../../../../build/work/app/i18n/custmsg.h:1201
+msgid "Abutting tracks"
+msgstr "Vastakkaiset raideosat"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:340
+#: ../../../../build/work/app/i18n/custmsg.h:1203
+msgid "Move to Join"
+msgstr "Siirrä yhdistääksesi"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:342
+#: ../../../../build/work/app/i18n/custmsg.h:1207
+msgid "Select and Placement"
+msgstr "Valinta ja asettelu"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:343
+#: ../../../../build/work/app/i18n/custmsg.h:1209
+msgid "Building a yard throat."
+msgstr "Vaihdekujan luominen"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:344
+#: ../../../../build/work/app/i18n/custmsg.h:1211
+msgid "Designing turnouts"
+msgstr "Raideosien suunnittelu"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:345
+#: ../../../../build/work/app/i18n/custmsg.h:1213
+msgid "Group and Ungroup"
+msgstr "Ryhmittely ja ryhmittelyn purku"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:346
+#: ../../../../build/work/app/i18n/custmsg.h:1215
+msgid "Triming Turnout Ends"
+msgstr "Vaihteen päiden säätö"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:347
+#: ../../../../build/work/app/i18n/custmsg.h:1217
+msgid "Handlaid Turnouts"
+msgstr "Käsin asetellut vaihteet"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:348
+#: ../../../../build/work/app/i18n/custmsg.h:1219
+msgid "Elevations and Profile"
+msgstr "Korkeustasot ja profiili"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:349
+#: ../../../../build/work/app/i18n/custmsg.h:1221
+msgid "Elevations"
+msgstr "Korkeustasot"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:351
+#: ../../../../build/work/app/i18n/custmsg.h:1225
+msgid "Misc track commands"
+msgstr "Muita raidekomentoja"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:352
+#: ../../../../build/work/app/i18n/custmsg.h:1227
+msgid "Delete and Undo"
+msgstr "Poista ja kumoa"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:353
+#: ../../../../build/work/app/i18n/custmsg.h:1229
+msgid "Splitting and Tunnels"
+msgstr "Pilkkominen ja tunnelit"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:355
+#: ../../../../build/work/app/i18n/custmsg.h:1233
+msgid "Helix tracks"
+msgstr "Helix raiteet (kierrenousu)"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:356
+#: ../../../../build/work/app/i18n/custmsg.h:1235
+msgid "Exception Tracks"
+msgstr "Erityisraiteet"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:358
+#: ../../../../build/work/app/i18n/custmsg.h:1239
+msgid "Connect and Tighten - a siding"
+msgstr "Liittäminen ja tiukennus - sivuraide"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:359
+#: ../../../../build/work/app/i18n/custmsg.h:1241
+msgid "Connect and Tighten - figure-8"
+msgstr "Liittäminen ja tiukennus - kahdeksikko"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:360
+#: ../../../../build/work/app/i18n/custmsg.h:1243
+msgid "Other commands"
+msgstr "Muut komennot"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:362
+#: ../../../../build/work/app/i18n/custmsg.h:1247
+msgid "Table Edges"
+msgstr "Pöydän reunat"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:364
+#: ../../../../build/work/app/i18n/custmsg.h:1251
+msgid "Dimension Lines"
+msgstr "Mittajanat"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:365
+#: ../../../../build/work/app/i18n/custmsg.h:1253
+msgid "Lines"
+msgstr "Viivat"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:366
+#: ../../../../build/work/app/i18n/custmsg.h:1255
+msgid "Poly-Shapes"
+msgstr "Monikulmiot"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:367
+#: ../../../../build/work/app/i18n/custmsg.h:1257
+msgid "Modifying Poly-Shapes"
+msgstr "Monikulmioiden muokkaaminen"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:370
+#: ../../../../build/work/app/i18n/custmsg.h:1263
+#, fuzzy
+msgid "Control Panels"
+msgstr "Ohjauspaneelit"
+
+#~ msgid "Radius=%s Angle=%0.3f"
+#~ msgstr "Säde=%s Kulma=%0.3f"
+
+#~ msgid "Length=%s Angle=%0.3f"
+#~ msgstr "Pituus=%s Kulma=%0.3f"
+
+#~ msgid "There are no reachable Defined Elevations"
+#~ msgstr "Ei määriteltyjä korkeustasoja saatavilla"
+
+#~ msgid "Elev = %s"
+#~ msgstr "Korkeus = %s"
+
+#~ msgid "Dist = %s"
+#~ msgstr "Etäisyys = %s"
+
+#~ msgid "Select track to modify"
+#~ msgstr "Valitse muokattava raide"
+
+#~ msgid "Drag to create new track segment"
+#~ msgstr "Raahaa luodaksesi uuden raiteen"
+
+#~ msgid "Note: "
+#~ msgstr "Muistiinpano: "
+
+#~ msgid "# End Pt"
+#~ msgstr "Päätepisteitä"
+
+#~ msgid "Print Registration Marks"
+#~ msgstr "Tulosta kohdistusmerkinnät"
+
+#~ msgid "Print Snap Grid"
+#~ msgstr "Tulosta kohdistusruudukko"
+
+#~ msgid "Print Rulers"
+#~ msgstr "Tulosta viivaimet"
+
+#~ msgid "1 page"
+#~ msgstr "1 sivu"
+
+#~ msgid "Connect Sectional Tracks"
+#~ msgstr "Liitä palaraiteet"
+
+#~ msgid "Draw moving track normally"
+#~ msgstr "Piirrä liikuteltavat raiteet normaalisti"
+
+#~ msgid "Draw moving track simply"
+#~ msgstr "Piirrä liikuteltavat raiteet yksinkertaistetuna"
+
+#~ msgid "Draw moving track as end-points"
+#~ msgstr "Piirrä liikuteltavat raiteet päätepisteinä"
+
+#~ msgid "Drag to move selected tracks"
+#~ msgstr "Siirrä valitut raideosat raahaamalla"
+
+#~ msgid " Angle %0.3f"
+#~ msgstr " Kulma %0.3f"
+
+#~ msgid "Simple"
+#~ msgstr "Yksinkertainen"
+
+#~ msgid "End Points"
+#~ msgstr "Päätepisteet"
+
+#~ msgid "Tunnel"
+#~ msgstr "Tunneli"
+
+#~ msgid "TURNOUT "
+#~ msgstr "PALARAIDE "
+
+#~ msgid "%s Files|*.xtc"
+#~ msgstr "%s tiedostot|*.xtc"
+
+#~ msgid "Bitmap files|*.xpm"
+#~ msgstr "Bitmap kuvatiedostot|*.xpm"
+
+#~ msgid "Color Layers"
+#~ msgstr "Väritys tason mukaan"
+
+#~ msgid "End-Points"
+#~ msgstr "Päätepisteet"
+
+#~ msgid "Draw Moving Tracks"
+#~ msgstr "Piirrä liikuteltavat raiteet"
+
+#~ msgid "Unload"
+#~ msgstr "Poista"
+
+#~ msgid "Commands"
+#~ msgstr "Komennot"
+
+#~ msgid "SnapGrid Enable"
+#~ msgstr "Käytä kohdistusruudukkoa"
+
+#~ msgid "A&bove"
+#~ msgstr "Päällimmäiseksi"
+
+#~ msgid "Belo&w"
+#~ msgstr "Alimmaiseksi"
+
+#, fuzzy
+#~ msgid "End Angle 2"
+#~ msgstr "Syötä kulma ..."
+
+#, fuzzy
+#~ msgid "Elev 1"
+#~ msgstr "Korkeus = %0.1f"
+
+#, fuzzy
+#~ msgid "End Radius Center 1: X"
+#~ msgstr "Päätepiste 1: X"
+
+#, fuzzy
+#~ msgid "Elev 2"
+#~ msgstr "Korkeus = %s"
+
+#, fuzzy
+#~ msgid "End Radius Center 2: X"
+#~ msgstr "Päätepiste 2: X"
+
+#~ msgid "General note about the layout"
+#~ msgstr "Ratasuunnitelman muistiinpanoja"
+
+#~ msgid "How to draw track being moved/rotated"
+#~ msgstr "Raiteiden piirtotapa liikuteltaessa tai pyöritettäessä"
+
+#~ msgid ""
+#~ "The length of the straight track is determined by the distance from the "
+#~ "far End-Point and the cursor.\n"
+#~ msgstr ""
+#~ "Suoran raiteen pituus määräytyy päätepisteen ja osoittimen välisen "
+#~ "etäisyyden mukaan.\n"
+
+#~ msgid "First turn off the Snap Grid.\n"
+#~ msgstr "Ota ensin kohdistusruudukko pois käytöstä.\n"
+
+#~ msgid "Rotate the signals and move them to the proper locations.\n"
+#~ msgstr "Pyöritä opastimia ja siirrä ne paikoilleen.\n"
+
+#~ msgid "Rotate the arrow head by 180° and move into position.\n"
+#~ msgstr "Pyöritä nuolenkärkeä 180° ja siirrä se paikoilleen.\n"
+
+#~ msgid ""
+#~ "Now the cursor is about to be moved past the other (far) End-Point of the "
+#~ "straight track. You will receive a warning and the connecting track "
+#~ "turns Red.\n"
+#~ msgstr ""
+#~ "Nyt osoitin siirretään suoran raiteen kauemman päätepisteen ohi. Tästä "
+#~ "varoitetaan tilarivillä ja yhdysraide muuttuu punaiseksi.\n"
+
+#~ msgid ""
+#~ "Drawing lines with the Shift key held down will use the previous line End-"
+#~ "Point as the starting position. This makes it easy to draw connected "
+#~ "lines.\n"
+#~ msgstr ""
+#~ "Jos vaihto-näppäin pidetään painettuna, seuraavan viivan piirto "
+#~ "aloitetaan edellisen viivan loppupäästä. Näin voidaan helposti piirtää "
+#~ "yhdistettyjä viivoja.\n"
+
+#~ msgid ""
+#~ "If you drag a Corner to another Corner the two are merged and the Edge "
+#~ "between them is removed.\n"
+#~ msgstr ""
+#~ "Jos raahaat kulman toisen kulman päälle, ne yhdistetään yhdeksi "
+#~ "kulmapisteeksi.\n"
+
+#~ msgid ""
+#~ "Shift-Right-Click will display a popup-menu that you can use to rotate by "
+#~ "fixed amount (15°, 30°, 45°, 90° or 180°). The demonstration cannot show "
+#~ "the popup-menu but it can show the effects.\n"
+#~ msgstr ""
+#~ "Vaihto + oikea klikkaus avaa ponnahdusvalikon, josta voi pyörittää "
+#~ "määrätyn kulman verran (15°, 30°, 45°, 90° or 180°). Demossa ei voida "
+#~ "näyttää ponnahdusvalikkoa, mutta näytämme toiminnon vaikutuksen.\n"
+
+#~ msgid "Here we will rotate by 90° clockwise (CW).\n"
+#~ msgstr "Pyöritämme 90° myötäpäivään (MP).\n"
+
+#~ msgid ""
+#~ "Another option of the <Rotate> command popup-menu is to Align the "
+#~ "Selected object with some other object.\n"
+#~ msgstr ""
+#~ "Toinen vaihtoehto ponnahdusvalikossa on suunnata valittu objekti jonkin "
+#~ "toisen objektin mukaisesti.\n"
+
+#~ msgid ""
+#~ "First we will click on one line of the Selected object. The angle of "
+#~ "this part of the object will be Aligned.\n"
+#~ msgstr ""
+#~ "Ensin klikkaamme valitun objektin jotakin viivaa. Objekti suunnataan "
+#~ "tämän viivan avulla.\n"
+
+#~ msgid ""
+#~ "Next, we click on an Unselected object. The Selected structure will be "
+#~ "rotated so that the line we clicked on will be parallel to the straight "
+#~ "track.\n"
+#~ msgstr ""
+#~ "Seuraavaksi klikataan valitsematonta objektia. Valittu rakennus "
+#~ "käännetään siten, että valittu viiva on saman suuntainen suoran radan "
+#~ "kanssa.\n"
+
+#~ msgid ""
+#~ "If we drag the mouse across the track, we can flip the structure by "
+#~ "180°. This is similar to how we place turnouts.\n"
+#~ msgstr ""
+#~ "Jos raahaamme hiirellä radan puolelta toiselle, rakennus peilataan 180°. "
+#~ "Samalla tavalla kuin vaihteiden asettelussa.\n"
+
+#~ msgid ""
+#~ "We can also align to curved shapes. The Selected object will be rotated "
+#~ "to be parallel to the curve under the cursor.\n"
+#~ msgstr ""
+#~ "Voimme myös suunnata kaarevien muotojen mukaisesti. Valittua objektia "
+#~ "pyöritetään siten, että se on yhdensuuntainen hiiren osoittimen alla "
+#~ "olevan kaaren mukaisesti.\n"
+
+#~ msgid ""
+#~ "As we drag along the curved track the Selected object rotates to follow "
+#~ "the curve.\n"
+#~ msgstr ""
+#~ "Raahaamalla kaarretta pitkin, valittua objektia pyöritetään vastaavalla "
+#~ "tavalla.\n"
+
+#~ msgid "Again, if we drag across the track we can flip the stucture.\n"
+#~ msgstr ""
+#~ "Rakennus voidaan jälleen peilata raahaamalla raiteen puolelta toiselle.\n"
+
+#~ msgid "We can also Align to another Structure or any object.\n"
+#~ msgstr ""
+#~ "Voimme myös suunnata jonkin toisen rakennuksen tai minkä tahansa objektin "
+#~ "mukaan.\n"
+
+#~ msgid "And Right-Drag de-selects all tracks within an area.\n"
+#~ msgstr ""
+#~ "Raahaaminen hiiren oikealla painikkeella puolestaan poistaa alueella "
+#~ "olevien kohteiden valinnat.\n"
+
+#~ msgid ""
+#~ "Drawing the tracks while moving can be very time-consuming. We had just "
+#~ "used the \"Normal\" method of drawing tracks.\n"
+#~ msgstr ""
+#~ "Raiteita siirrettäessä niiden piirto voi olla hyvinkin aikaa vievää. "
+#~ "Tässä on käytetty reiteiden piirron asetusta \"normaali\".\n"
+
+#~ msgid ""
+#~ "The Command Options dialog (from the Options menu) contains a Radio "
+#~ "button group which you can use to pick the drawing method.\n"
+#~ msgstr ""
+#~ "Komentojen asetuksista (Asetukset|Komennot) voit valita raiteiden "
+#~ "piirtotavan.\n"
+
+#~ msgid ""
+#~ "You can also popup the Command Options Menu by pressing Shift-Right-Click "
+#~ "which includes options for setting the drawing method. These options are "
+#~ "also available for the Move and Rotate Command Options Menu.\n"
+#~ msgstr ""
+#~ "Piirtotavan voi valita myös painamalla vaihto-näppäintä ja klikkaamalla "
+#~ "hiiren oikealla painikkeella, jolloin avautuu komennon ponnahdusvalikko. "
+#~ "Piirtotavan valinta on saatavilla Siirrä ja Pyöritä komentojen "
+#~ "ponnahdusvalikoissa.\n"
+
+#~ msgid ""
+#~ "The next method is \"Simple\" draws. Here tracks are drawn using one "
+#~ "line, no End-Points are drawn, lines are not drawn and structures are "
+#~ "drawn using a box outline.\n"
+#~ msgstr ""
+#~ "Seuraava piirtotapa on \"Yksinkertainen\", jolloin raiteet piirretään "
+#~ "yhdellä viivalla, ilman päätepisteiden merkintää. Viivoja ei piirretä ja "
+#~ "rakennukset piirretään yksinkertaisina nelikulmioina.\n"
+
+#~ msgid ""
+#~ "Note: you can move the Command Options dialog if it obscures the main "
+#~ "window.\n"
+#~ msgstr ""
+#~ "Huom: Voit siirtää Komentojen asetukset -ikkunaa, jos se peittää "
+#~ "pääikkunaa oleellisesti.\n"
+
+#~ msgid ""
+#~ "The next method is to just draw the End-Points of the selected tracks.\n"
+#~ msgstr ""
+#~ "Seuraava tapa on piirtää ainoastaan valittujen raiteiden päätepisteet.\n"
+
+#~ msgid ""
+#~ "Unconnected End-Points are indicated by Red crosses, and connected End-"
+#~ "Points are indicated by Red lines.\n"
+#~ msgstr ""
+#~ "Irralliset päätepisteet merkitään punaisilla risteillä ja liitetyt "
+#~ "punaisilla viivoilla.\n"
+
+#~ msgid "Now we will go back to using the Normal method again.\n"
+#~ msgstr "Nyt palautetaan normaali piirtotapa.\n"
+
+#~ msgid ""
+#~ "Note: because of differing display resolutions the next mouse click may "
+#~ "not be positioned correctly in this demo and the Move-To-Join operation "
+#~ "may not be demonstrated.\n"
+#~ msgstr ""
+#~ "Huom: Johtuen erilaisista näytön resoluutioista seuraava hiiren klikkaus "
+#~ "voi olla virheellisesti kohdistettu tässä demossa, jolloin \"siirrä "
+#~ "yhdistääksesi\" operaation esitys ei toimi oikein.\n"
+
+#~ msgid ""
+#~ "A number of example layouts are provided. These files are located in the "
+#~ "'examples' directory where you installed XTrackCAD. The \"File|Open\" "
+#~ "command will open that directory when first used."
+#~ msgstr ""
+#~ "Tarjolla on useita esimerkkejä ratasuunnitelmista. Nämä tiedostot "
+#~ "sijaitsevat 'examples' hakemistossa sen hakemiston alla, johon XTrackCAD "
+#~ "on asennettu. \"Tiedosto|Avaa\" näyttää tämän hakemiston ensimmäisellä "
+#~ "käyttökerralla."
+
+#~ msgid ""
+#~ " exists\n"
+#~ "Do you want to overwrite it?"
+#~ msgstr ""
+#~ " on olemassa.\n"
+#~ "Haluatko korvata olemassa olevan tiedoston?"
+
+#~ msgid "%s exists"
+#~ msgstr "%s on olemassa"
+
+#~ msgid ": cannot open"
+#~ msgstr ": ei voida avata"
+
+#~ msgid "Abort Print"
+#~ msgstr "Keskeytä tulostus"
+
+#~ msgid "Add Margin"
+#~ msgstr "Lisää marginaali"
+
+#~ msgid "Angle=%0.3f"
+#~ msgstr "Kulma=%0.3f"
+
+#~ msgid "Beige"
+#~ msgstr "Beige"
+
+#~ msgid "Black"
+#~ msgstr "Musta"
+
+#~ msgid "Blue"
+#~ msgstr "Sininen"
+
+#~ msgid "Brown"
+#~ msgstr "Ruskea"
+
+#~ msgid "Can not save New Margin definition"
+#~ msgstr "Uuden marginaalin määrittelyjen tallennus ei onnistu"
+
+#~ msgid "Can not save New Printer definition"
+#~ msgstr "Uuden tulostimen määrittelyjen tallennus ei onnistu"
+
+#~ msgid ""
+#~ "Can't find standard San-Serif font.\n"
+#~ "Please choose a font"
+#~ msgstr ""
+#~ "San-Serif kirjasinta ei löydy.\n"
+#~ "Ole hyvä ja valitse kirjasin"
+
+#~ msgid ""
+#~ "Can't find standard Serif font.\n"
+#~ "Please choose a font"
+#~ msgstr ""
+#~ "Serif kirjasinta ei löydy.\n"
+#~ "Ole hyvä ja valitse kirjasin"
+
+#~ msgid "Chocolate"
+#~ msgstr "Suklaa"
+
+#~ msgid "Command: "
+#~ msgstr "Komento: "
+
+#~ msgid "Creating %s"
+#~ msgstr "Luodaan %s"
+
+#~ msgid "Custom Update"
+#~ msgstr "Omat raideosat ja kalusto"
+
+#~ msgid "Dark Blue"
+#~ msgstr "Tummansininen"
+
+#~ msgid "Dark Gray"
+#~ msgstr "Tummanharmaa"
+
+#~ msgid "Dark Green"
+#~ msgstr "Tummanvihreä"
+
+#~ msgid "Dark Red"
+#~ msgstr "Tummanpunainen"
+
+#~ msgid "Describe objects"
+#~ msgstr "Määrittele objekteja"
+
+#~ msgid "Draw"
+#~ msgstr "Piirto"
+
+#~ msgid "Enter a post-script font name for:"
+#~ msgstr "Syötä post-script kirjasimen nimi:"
+
+#~ msgid "Enter both printer name and command"
+#~ msgstr "Syötä tulostimen nimi ja komento"
+
+#~ msgid "Enter printer name"
+#~ msgstr "Syötä tulostimen nimi"
+
+#~ msgid "Factor"
+#~ msgstr "Kerroin"
+
+#~ msgid "File Name? "
+#~ msgstr "Tiedostonimi?"
+
+#~ msgid "Font Alias"
+#~ msgstr "Kirjasinalias"
+
+#~ msgid "Forest Green"
+#~ msgstr "Metsän vihreä"
+
+#~ msgid "Format"
+#~ msgstr "Muotoilu"
+
+#~ msgid "Gray"
+#~ msgstr "Harmaa"
+
+#~ msgid "Green"
+#~ msgstr "Vihreä"
+
+#~ msgid "Lawn Green"
+#~ msgstr "Ruohonvihreä"
+
+#~ msgid "Light Gray"
+#~ msgstr "Vaaleanharmaa"
+
+#~ msgid "Live"
+#~ msgstr "Seuraa"
+
+#~ msgid "Name: "
+#~ msgstr "Nimi: "
+
+#~ msgid "No file name specified"
+#~ msgstr "Tiedostonimeä ei ole annettu"
+
+#~ msgid "No fonts"
+#~ msgstr "Ei kirjasimia"
+
+#~ msgid "Now printing"
+#~ msgstr "Tulostetaan"
+
+#~ msgid "Now printing %s"
+#~ msgstr "Tulostetaan %s"
+
+#~ msgid "Orange"
+#~ msgstr "Oranssi"
+
+#~ msgid "Overwrite"
+#~ msgstr "Kirjoita päälle"
+
+#~ msgid "PS Font"
+#~ msgstr "PS kirjasin"
+
+#~ msgid "Page %d"
+#~ msgstr "Sivu %d"
+
+#~ msgid "Page 1"
+#~ msgstr "Sivu 1"
+
+#~ msgid "Paper Size"
+#~ msgstr "Paperin koko"
+
+#~ msgid "Pink"
+#~ msgstr "Vaaleanpunainen"
+
+#~ msgid "Place circle center"
+#~ msgstr "Aseta ympyrän keskipiste"
+
+#~ msgid "Print Test Page"
+#~ msgstr "Tulosta testisivu"
+
+#~ msgid "Print To File"
+#~ msgstr "Tulosta tiedostoon"
+
+#~ msgid "Print to file ..."
+#~ msgstr "Tulosta tiedostoon..."
+
+#~ msgid "Printer"
+#~ msgstr "Tulostin"
+
+#~ msgid "Printing"
+#~ msgstr "Tulostetaan"
+
+#~ msgid "Purple"
+#~ msgstr "Purppura"
+
+#~ msgid "Red"
+#~ msgstr "Punainen"
+
+#~ msgid "Tan"
+#~ msgstr "Keltaisenruskea"
+
+#~ msgid "Tomato"
+#~ msgstr "Tomaatti"
+
+#~ msgid "Tracks with grades steeper than this are exceptional"
+#~ msgstr "Raiteet, joissa on jyrkempi nousukulma, käsitetään erityiraiteiksi"
+
+#~ msgid "Tracks with tighter radius than this are exceptional"
+#~ msgstr "Raiteet, joissa on pienempi kaarresäde, käsitetään erityiraiteiksi"
+
+#~ msgid "Violet"
+#~ msgstr "Violetti"
+
+#~ msgid "X Font"
+#~ msgstr "X kirjasin"
+
+#~ msgid "XTrackCAD Help"
+#~ msgstr "XTrackCAD ohje"
+
+#~ msgid "Yellow"
+#~ msgstr "Keltainen"
+
+#~ msgid "load last layout"
+#~ msgstr "Lataa edellinen ratasuunnitelma"
+
+#~ msgid "start with blank layout"
+#~ msgstr "Uusi ratasuunnitelma"
+
+#~ msgid " DXF Files|*.dxf"
+#~ msgstr " DXF tiedostot|*.dxf"
+
+#~ msgid "%s Font"
+#~ msgstr "%s kirjasin"
+
+#~ msgid ""
+#~ "%s has been corrupted\n"
+#~ "Please see reinstall your software or contact the Vendor."
+#~ msgstr ""
+#~ "%s on korruptoitunut\n"
+#~ "Asenna ohjelmisto uudelleen tai ota yhteyttä ohjelman toimittajaan."
+
+#~ msgid ""
+#~ "<html><head><meta http-equiv=\"content-type\" content=\"text/html; "
+#~ "charset=US-ASCII\"><title>Help Error</title><body><h1>Error - help "
+#~ "information can not be found.</h1><p>The help information you requested "
+#~ "cannot be found on this system.<br>Usually this is an installation "
+#~ "problem, Make sure that XTrkCad and the included HTML files are installed "
+#~ "properly and can be found via the XTRKCADLIB environment variable. Also "
+#~ "make sure that the user has sufficient access rights to read these files."
+#~ "</p></body></html>"
+#~ msgstr ""
+#~ "<html><head><meta http-equiv=\"content-type\" content=\"text/html; "
+#~ "charset=US-ASCII\"><title>Ohjeen virhe</title><body><h1>Virhe - Ohjeen "
+#~ "tietoja ei löydy.</h1><p>Pyytämääsi ohjetta ei löydy järjestelmästä."
+#~ "<br>Yleensä tämä johtuu asennusvirheestä. Varmista, että XTrkCad ja sen "
+#~ "mukana tulevat HTML-tiedostot on asennettu oikein ja että HTML-tiedostot "
+#~ "löytyvät XTRKCADLIB ympäristömuuttujan osoittamasta hakemistosta. "
+#~ "Varmista myös, että käyttäjällä on lukuoikeus näihin tiedostoihin.</p></"
+#~ "body></html>"
+
+#~ msgid ""
+#~ "All descriptions specified in the turnout designer must\n"
+#~ "be non-blank. Please enter missing values and try again."
+#~ msgstr ""
+#~ "Kaikki kentät raideosan suunnittelussa ovat pakollisia.\n"
+#~ "Syötä puuttuvat arvot ja kokeile uudelleen."
+
+#~ msgid ""
+#~ "Bumper tracks (tracks with 1 End-Point) are not supported with the Group "
+#~ "command. \n"
+#~ "The track has been unselected."
+#~ msgstr ""
+#~ "Ryhmittely komento ei tue puskinraideosia (raideosia joissa on vain yksi "
+#~ "pää).\n"
+#~ "Raideosan valinta on poistettu."
+
+#~ msgid "Can't get app dir"
+#~ msgstr "Sovellushakemiston haku ei onnistunut"
+
+#, fuzzy
+#~ msgid "Car Item"
+#~ msgstr "Tuote"
+
+#~ msgid "Copyright (c) 2007 Sillub Technology and XTrkCad Team"
+#~ msgstr "Copyright (c) 2007 Sillub Technology ja XTrkCad Team"
+
+#, fuzzy
+#~ msgid "ItemEnter"
+#~ msgstr "Tuote"
+
+#, fuzzy
+#~ msgid "ItemSel"
+#~ msgstr "Tuote"
+
+#~ msgid "MSG_MOVE_POINTS_OTHER_SIDE\tMove points to other side of frog"
+#~ msgstr ""
+#~ "MSG_MOVE_POINTS_OTHER_SIDE\tSiirrä kielten päät risteyskappaleen toiselle "
+#~ "puolelle"
+
+#~ msgid ""
+#~ "MSG_PRINT_SCALE_1\tThe Print Scale cannot be 1 in unregistered version of "
+#~ "XTrkCad\tThe Print Scale cannot be 1 in unregistered version of %s"
+#~ msgstr ""
+#~ "MSG_PRINT_SCALE_1\tTulostusmittakaava ei voi olla 1 XTrkCad:n "
+#~ "rekisteröimättömässä versiossa\tTulostusmittakaava ei voi olla 1 %s:n "
+#~ "rekisteröimättömässä versiossa"
+
+#~ msgid ""
+#~ "MSG_SAVE_CHANGES\tYour changes will be lost....\tYour changes will be "
+#~ "lost.\n"
+#~ "Do you want to save?"
+#~ msgstr ""
+#~ "MSG_SAVE_CHANGES\tTekemäsi muutokset menetetään...\tTekemäsi muutokset "
+#~ "menetetään.\n"
+#~ "Haluatko tallentaa?"
+
+#~ msgid "MSG_SEL_TRK_FROZEN\tSome Selected tracks are frozen"
+#~ msgstr "MSG_SEL_TRK_FROZEN\tJotkut valituista raiteista on jäädytetty"
+
+#~ msgid ""
+#~ "MSG_TOO_FAR_APART_DIVERGE\tTracks are too far apart or diverge too much"
+#~ msgstr ""
+#~ "MSG_TOO_FAR_APART_DIVERGE\tRaiteet ovat liian kaukana toisistaan tai "
+#~ "niiden välinen kulma on liian suuri"
+
+#, fuzzy
+#~ msgid "No %s are available"
+#~ msgstr "Vinkkejä ei ole saatavilla"
+
+#, fuzzy
+#~ msgid "No help found for %s"
+#~ msgstr "Ei ohjetta aiheesta %s"
+
+#, fuzzy
+#~ msgid "PartnoEnter"
+#~ msgstr "Tulostin"
+
+#, fuzzy
+#~ msgid "PartnoSel"
+#~ msgstr "Tuotekoodi"
+
+#~ msgid "Print Grid Rotate"
+#~ msgstr "Tulostusruudukon pyöritys"
+
+#~ msgid "Profile Mode"
+#~ msgstr "Profiili tila"
+
+#, fuzzy
+#~ msgid "ProtoEnter"
+#~ msgstr "Esikuva"
+
+#, fuzzy
+#~ msgid "ProtoSel"
+#~ msgstr "Esikuva"
+
+#~ msgid ""
+#~ "Rescaled tracks do not fit on the layout.\n"
+#~ "You should increase the layout size to at least %s by %s."
+#~ msgstr ""
+#~ "Uudelleen skaalatut raiteet eivät mahdu ratasuunnitelmaan.\n"
+#~ "Suunnitelman koko pitäisi kasvattaa vähintään %s x %s:ksi."
+
+#, fuzzy
+#~ msgid ""
+#~ "Right-Drag on the Map window sets the origin and scale of the Main window."
+#~ msgstr ""
+#~ "Hiiren oikealla painikkeella raahaaminen puolestaan muuttaa näytettävän "
+#~ "alueen skaalausta (kokoa).\n"
+
+#~ msgid "Snap Grid Rotate"
+#~ msgstr "Käännä kohdistusruudukkoa"
+
+#, fuzzy
+#~ msgid ""
+#~ "Straight tracks are created by selecting the first End-Point of the "
+#~ "track.);"
+#~ msgstr ""
+#~ "Suorat raiteet luodaan valitsemalla hiiren vasemmalla painikkeella "
+#~ "raiteen ensimmäinen päätepiste."
+
+#, fuzzy
+#~ msgid "The left mouse button is released at the final end postion.);"
+#~ msgstr "Hiiren vasen painike vapautetaan loppupisteessä."
+
+#~ msgid ""
+#~ "The unregistered version of this program is restricted to less than 50 "
+#~ "tracks and cars."
+#~ msgstr ""
+#~ "Ohjelman rekisteröimätön versio on rajoitettu alle 50:n raideosaan ja "
+#~ "vaunuun/veturiin."
+
+#, fuzzy
+#~ msgid "Then the other End-Point is dragged to its final postion.);"
+#~ msgstr ""
+#~ "Toinen päätepiste valitaan pitämällä hiiren vasen painike alhaalla ja "
+#~ "valitsemalla oikea paikka."
+
+#~ msgid ""
+#~ "There is nothing to Paste,\n"
+#~ "try Copy first."
+#~ msgstr ""
+#~ "Ei ole mitään liitettävää,\n"
+#~ "kopioi ensin."
+
+#~ msgid ""
+#~ "This Car has no Part Number\n"
+#~ "%s\n"
+#~ "Do you want to continue with the other Cars?"
+#~ msgstr ""
+#~ "Vaunulla/veturilla ei ole tuotekoodia\n"
+#~ "%s\n"
+#~ "Haluatko jatkaa muihin vaunuihin/vetureihin?"
+
+#, fuzzy
+#~ msgid "Track is too short by N.NNN"
+#~ msgstr "Yhdysraide on %0.3f liian lyhyt"
+
+#~ msgid "Turnout Rotate"
+#~ msgstr "Pyöritä raideosaa"
+
+#, fuzzy
+#~ msgid "You can draw tracks with wider lines for rails. "
+#~ msgstr "Piirrä raiteet ohuilla viivoilla"
+
+#~ msgid ""
+#~ "You can not change the position of a Turnout or Turntable while it is "
+#~ "spanned by a Train."
+#~ msgstr ""
+#~ "Vaihteen tai kääntöpöydän asentoa ei voi muuttaa junan ollessa päällä."
+
+#~ msgid ""
+#~ "You have chosen a large font which may a take a long time.\n"
+#~ "Do you wish to continue?"
+#~ msgstr ""
+#~ "Olet valinnut suuren kirjasinkoon joka saattaa kestää kauan.\n"
+#~ "Haluatko jatkaa?"
diff --git a/app/i18n/fr_FR.po b/app/i18n/fr_FR.po
new file mode 100644
index 0000000..b9afa90
--- /dev/null
+++ b/app/i18n/fr_FR.po
@@ -0,0 +1,16142 @@
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xtrkcad 5.2.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-07-11 09:01+0200\n"
+"PO-Revision-Date: 2020-07-11 08:53+0200\n"
+"Last-Translator: zileg31 <zileg31@users.sourceforge.net>\n"
+"Language-Team: French <zileg31@users.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr_FR\n"
+"X-Generator: Poedit 2.3\n"
+
+#: ../bin/archive.c:178 ../bin/archive.c:185 ../bin/archive.c:214
+#: ../bin/archive.c:239 ../bin/archive.c:294 ../bin/archive.c:307
+#: ../bin/archive.c:315 ../bin/archive.c:365 ../bin/archive.c:400
+#: ../bin/archive.c:416 ../bin/archive.c:426 ../bin/archive.c:449
+#: ../bin/cblock.c:491 ../bin/cswitchmotor.c:475 ../bin/dbench.c:147
+#: ../bin/dcar.c:4520 ../bin/dcar.c:4706 ../bin/dcar.c:4716 ../bin/dcar.c:4764
+#: ../bin/dcar.c:4771 ../bin/dcar.c:4789 ../bin/dcar.c:4802 ../bin/dcar.c:4807
+#: ../bin/dcar.c:4836 ../bin/dcar.c:5000 ../bin/directory.c:65
+#: ../bin/directory.c:100 ../bin/directory.c:107 ../bin/directory.c:138
+#: ../bin/directory.c:154 ../bin/dxfoutput.c:193 ../bin/fileio.c:241
+#: ../bin/fileio.c:698 ../bin/fileio.c:898 ../bin/fileio.c:1025
+#: ../bin/fileio.c:1092 ../bin/fileio.c:1098 ../bin/fileio.c:1174
+#: ../bin/fileio.c:1184 ../bin/fileio.c:1517 ../bin/fileio.c:1567
+#: ../bin/fileio.c:1623 ../bin/macro.c:179 ../bin/macro.c:832
+#: ../bin/macro.c:877 ../bin/macro.c:898 ../bin/macro.c:1043
+#: ../bin/macro.c:1060 ../bin/macro.c:1322 ../bin/param.c:2090
+#: ../bin/paramfile.c:250 ../bin/paramfilelist.c:376 ../bin/track.c:1116
+#: ../bin/track.c:1640 ../bin/track.c:1946 ../bin/track.c:1950
+#: ../bin/track.c:1962 ../bin/track.c:2026 ../wlib/gtklib/wpref.c:248
+#: ../wlib/gtklib/wpref.c:255
+msgid "Continue"
+msgstr "Continuez"
+
+#: ../bin/cbezier.c:599
+msgid "Select End-Point - Ctrl unlocks end-point"
+msgstr "Sélectionner le point de fin - Ctrl déverrouille ce dernier"
+
+#: ../bin/cbezier.c:601
+msgid "Select End-Point"
+msgstr "Sélectionnez le point de fin"
+
+#: ../bin/cbezier.c:633
+msgid "Not close enough to any valid, selectable point, reselect"
+msgstr ""
+"Pas assez proche d'un point valide et sélectionnable, veuillez en choisir un "
+"autre"
+
+#: ../bin/cbezier.c:639
+#, c-format
+msgid "Drag point %d to new location and release it"
+msgstr "Déplacez le point %d vers le nouvel emplacement et relâchez"
+
+#: ../bin/cbezier.c:648 ../bin/cbezier.c:739 ../bin/cbezier.c:741
+msgid "Pick any circle to adjust it - Enter to confirm, ESC to abort"
+msgstr ""
+"Sélectionnez un cercle à modifier - 'Entr' pour confirmer, 'Ech' pour "
+"abandonner"
+
+#: ../bin/cbezier.c:672
+msgid "Bezier Curve Invalid has identical end points Change End Point"
+msgstr ""
+"La courbe de Bezier n'est pas Valide avec des extrémités identiques, changez "
+"de point de fin"
+
+#: ../bin/cbezier.c:675
+#, c-format
+msgid "Bezier Curve Invalid has %s Change End Point"
+msgstr "La courbe de Bézier n'est pas Valide à %s changez le point de fin"
+
+#: ../bin/cbezier.c:678
+msgid "Bezier Curve Invalid has three co-incident points"
+msgstr "Courbe de Bézier non valide sur trois points correspondants"
+
+#: ../bin/cbezier.c:680
+msgid "Bezier is Straight Line"
+msgstr "Bézier est une voie droite"
+
+#: ../bin/cbezier.c:682
+#, c-format
+msgid "Bezier %s : Min Radius=%s Length=%s fx=%0.3f fy=%0.3f cusp=%0.3f"
+msgstr "Bezier %s : Rayon Min=%s Longueur=%s fx=%0.3f fy=%0.3f cusp=%0.3f"
+
+#: ../bin/cbezier.c:686
+#, c-format
+msgid "Bezier %s : Min Radius=%s Length=%s"
+msgstr "Bezier %s : Rayon Min=%s Longueur=%s"
+
+#: ../bin/cbezier.c:711
+msgid "No unconnected End Point to lock to"
+msgstr "Il n'y a pas de point d'extrémité non connecté à verrouiller"
+
+#: ../bin/cbezier.c:729
+msgid "Bezier curve invalid has identical end points Change End Point"
+msgstr ""
+"La courbe de Bezier n'est pas valide avec des extrémités identiques, changez "
+"un point de fin"
+
+#: ../bin/cbezier.c:732
+#, c-format
+msgid "Bezier curve invalid has %s Change End Point"
+msgstr "La courbe de Bézier n'est pas valide à %s changez le point de fin"
+
+#: ../bin/cbezier.c:735
+msgid "Bezier curve invalid has three co-incident points"
+msgstr "Courbe de Bézier non valide sur trois points correspondants"
+
+#: ../bin/cbezier.c:737
+msgid "Bezier curve is straight line"
+msgstr "La courbe de Bézier est une voie droite"
+
+#: ../bin/cbezier.c:751 ../bin/cbezier.c:765
+msgid "Invalid Bezier Track - end points are identical"
+msgstr "Courbe de Bezier invalide - les points de fin sont identiques"
+
+#: ../bin/cbezier.c:758
+#, c-format
+msgid "Invalid Bezier Curve has a %s - Adjust"
+msgstr "Courbe de Bézier non valide a %s - Ajuster"
+
+#: ../bin/cbezier.c:762
+msgid "Invalid Bezier Curve has three coincident points - Adjust"
+msgstr "Courbe de Bézier non valide avec trois points de coïncidence - Ajuster"
+
+#: ../bin/cbezier.c:770
+msgid "Create Bezier"
+msgstr "Créer une Bézier"
+
+#: ../bin/cbezier.c:858
+#, c-format
+msgid "%s picked - now select a Point"
+msgstr "%s choisi - maintenant sélectionnez un point"
+
+#: ../bin/cbezier.c:888 ../bin/ccornu.c:1953
+msgid "No changes made"
+msgstr "Aucune modification apportée"
+
+#: ../bin/cbezier.c:892
+msgid "Modify Bezier"
+msgstr "Modifier une Bézier"
+
+#: ../bin/cbezier.c:910
+msgid "Modify Bezier Complete"
+msgstr "Modifier une Bézier terminée"
+
+#: ../bin/cbezier.c:914
+msgid "Modify Bezier Cancelled"
+msgstr "Annuler modifier une Bézier"
+
+#: ../bin/cbezier.c:1038 ../bin/cbezier.c:1129
+#, c-format
+msgid "Place 1st endpoint of Bezier - snap to %s"
+msgstr ""
+"Définissez le 1er point de fin de la Bézier + Maj -> accrochez à la fin de %s"
+
+#: ../bin/cbezier.c:1056 ../bin/ccornu.c:2290 ../bin/ccurve.c:205
+#: ../bin/ccurve.c:439 ../bin/cstraigh.c:91
+msgid "Track is different gauge"
+msgstr "La voie à un écartement différent"
+
+#: ../bin/cbezier.c:1084
+msgid "Drag end of first control arm"
+msgstr "Faites glisser l'extrémité du premier bras de commande"
+
+#: ../bin/cbezier.c:1091
+msgid "Drag end of second control arm"
+msgstr "Faites glisser l'extrémité du second bras de commande"
+
+#: ../bin/cbezier.c:1133 ../bin/cbezier.c:1170
+#, c-format
+msgid "Select other end of Bezier - snap to %s end"
+msgstr ""
+"Sélectionnez l'autre extrémité de la Bézier, accrochez la à la fin de %s en "
+"maintenant la touche Maj enfoncée"
+
+#: ../bin/cbezier.c:1165
+msgid "Control Arm 1 is too short, try again"
+msgstr "Le bras de commande 1 est trop court, veuillez réessayer"
+
+#: ../bin/cblock.c:111 ../bin/cblock.c:123 ../bin/cblock.c:168
+#: ../bin/ccontrol.c:171 ../bin/ccontrol.c:425 ../bin/compound.c:567
+#: ../bin/csensor.c:163 ../bin/csensor.c:389 ../bin/csignal.c:238
+#: ../bin/csignal.c:498 ../bin/csignal.c:509 ../bin/csignal.c:535
+#: ../bin/cswitchmotor.c:93 ../bin/cswitchmotor.c:112
+#: ../bin/cswitchmotor.c:224 ../bin/dcontmgm.c:91 ../bin/dlayer.c:483
+msgid "Name"
+msgstr "Nom"
+
+#: ../bin/cblock.c:112 ../bin/cblock.c:124 ../bin/cblock.c:169
+#: ../bin/csensor.c:165 ../bin/csensor.c:395 ../bin/csignal.c:498
+#: ../bin/csignal.c:537
+msgid "Script"
+msgstr "Script"
+
+#: ../bin/cblock.c:125
+msgid "Segments"
+msgstr "Segments"
+
+#: ../bin/cblock.c:170 ../bin/cdraw.c:515 ../bin/cdraw.c:1425
+#: ../bin/cdraw.c:1571 ../bin/cdraw.c:2224 ../bin/cdraw.c:2450
+#: ../bin/cdraw.c:2487 ../bin/ctodesgn.c:170 ../bin/ctodesgn.c:171
+#: ../bin/ctodesgn.c:172 ../bin/ctodesgn.c:173 ../bin/ctodesgn.c:185
+#: ../bin/ctodesgn.c:186 ../bin/ctodesgn.c:236 ../bin/ctodesgn.c:239
+#: ../bin/ctodesgn.c:259 ../bin/ctodesgn.c:264 ../bin/ctodesgn.c:296
+#: ../bin/ctodesgn.c:303 ../bin/ctodesgn.c:305 ../bin/ctodesgn.c:325
+#: ../bin/ctodesgn.c:330 ../bin/ctodesgn.c:362 ../bin/ctodesgn.c:369
+#: ../bin/ctodesgn.c:370 ../bin/ctodesgn.c:391 ../bin/ctodesgn.c:394
+#: ../bin/ctodesgn.c:397 ../bin/ctodesgn.c:432 ../bin/ctodesgn.c:436
+#: ../bin/ctodesgn.c:443 ../bin/ctodesgn.c:444 ../bin/ctodesgn.c:445
+#: ../bin/ctodesgn.c:467 ../bin/ctodesgn.c:469 ../bin/ctodesgn.c:487
+#: ../bin/ctodesgn.c:489 ../bin/ctodesgn.c:508 ../bin/ctodesgn.c:510
+#: ../bin/ctodesgn.c:537 ../bin/ctodesgn.c:557 ../bin/ctodesgn.c:577
+#: ../bin/ctodesgn.c:597 ../bin/ctodesgn.c:635 ../bin/ctodesgn.c:654
+#: ../bin/ctodesgn.c:655 ../bin/ctrain.c:185 ../bin/tbezier.c:258
+#: ../bin/tcornu.c:307 ../bin/tcurve.c:372 ../bin/tstraigh.c:89
+msgid "Length"
+msgstr "Longueur"
+
+#: ../bin/cblock.c:171 ../bin/cdraw.c:507 ../bin/compound.c:542
+#: ../bin/tbezier.c:245 ../bin/tcornu.c:294 ../bin/tcurve.c:364
+#: ../bin/tease.c:519 ../bin/tstraigh.c:85
+msgid "End Pt 1: X,Y"
+msgstr "Bout 1: X,Y"
+
+#: ../bin/cblock.c:172 ../bin/cdraw.c:508 ../bin/compound.c:547
+#: ../bin/tbezier.c:252 ../bin/tcornu.c:299 ../bin/tcurve.c:366
+#: ../bin/tease.c:521 ../bin/tstraigh.c:87
+msgid "End Pt 2: X,Y"
+msgstr "Bout 2: X,Y"
+
+#: ../bin/cblock.c:195 ../bin/cblock.c:207 ../bin/cblock.c:575
+#: ../bin/cblock.c:596 ../bin/cblock.c:604 ../bin/cblock.c:674
+#: ../bin/cblock.c:795 ../bin/cblock.c:807 ../bin/cblock.c:845
+#: ../bin/ccontrol.c:205 ../bin/ccontrol.c:218 ../bin/ccontrol.c:230
+#: ../bin/ccontrol.c:486 ../bin/cdraw.c:130 ../bin/cdraw.c:2283
+#: ../bin/cgroup.c:1075 ../bin/cgroup.c:1146 ../bin/cgroup.c:1185
+#: ../bin/cgroup.c:1235 ../bin/cgroup.c:1262 ../bin/cgroup.c:1350
+#: ../bin/cgroup.c:1729 ../bin/cnote.c:69 ../bin/compound.c:603
+#: ../bin/compound.c:618 ../bin/compound.c:651 ../bin/cprint.c:512
+#: ../bin/cprint.c:716 ../bin/cprint.c:723 ../bin/cprint.c:1247
+#: ../bin/cpull.c:511 ../bin/cpull.c:526 ../bin/cpull.c:528 ../bin/cpull.c:530
+#: ../bin/cpull.c:690 ../bin/cselect.c:1068 ../bin/cselect.c:1164
+#: ../bin/cselect.c:1980 ../bin/csensor.c:194 ../bin/csensor.c:206
+#: ../bin/csensor.c:444 ../bin/csignal.c:267 ../bin/csignal.c:666
+#: ../bin/csignal.c:734 ../bin/csnap.c:576 ../bin/csnap.c:705
+#: ../bin/cstruct.c:935 ../bin/cstruct.c:944 ../bin/cstruct.c:1069
+#: ../bin/cswitchmotor.c:250 ../bin/cswitchmotor.c:262
+#: ../bin/cswitchmotor.c:274 ../bin/cswitchmotor.c:286
+#: ../bin/cswitchmotor.c:544 ../bin/cswitchmotor.c:580
+#: ../bin/cswitchmotor.c:714 ../bin/cswitchmotor.c:745 ../bin/ctext.c:173
+#: ../bin/ctodesgn.c:204 ../bin/ctodesgn.c:1199 ../bin/ctodesgn.c:1336
+#: ../bin/ctodesgn.c:1934 ../bin/ctodesgn.c:2049 ../bin/ctodesgn.c:2348
+#: ../bin/ctodesgn.c:2630 ../bin/ctrain.c:205 ../bin/cturnout.c:2897
+#: ../bin/cturnout.c:3035 ../bin/cundo.c:161 ../bin/cundo.c:166
+#: ../bin/dbitmap.c:68 ../bin/dbitmap.c:125 ../bin/dbitmap.c:203
+#: ../bin/dbitmap.c:238 ../bin/dcar.c:3824 ../bin/dcar.c:4019
+#: ../bin/dcar.c:4023 ../bin/dcar.c:4027 ../bin/dcar.c:4032 ../bin/dcar.c:4336
+#: ../bin/dcar.c:4444 ../bin/dcar.c:4826 ../bin/dcmpnd.c:399
+#: ../bin/dcmpnd.c:410 ../bin/dcmpnd.c:542 ../bin/dcustmgm.c:221
+#: ../bin/dcustmgm.c:227 ../bin/dcustmgm.c:236 ../bin/dcustmgm.c:261
+#: ../bin/dease.c:242 ../bin/dlayer.c:240 ../bin/dlayer.c:262
+#: ../bin/dlayer.c:879 ../bin/dlayer.c:885 ../bin/dlayer.c:891
+#: ../bin/doption.c:199 ../bin/doption.c:275 ../bin/doption.c:476
+#: ../bin/doption.c:479 ../bin/doption.c:492 ../bin/doption.c:558
+#: ../bin/dprmfile.c:434 ../bin/draw.c:2629 ../bin/fileio.c:197
+#: ../bin/fileio.c:607 ../bin/fileio.c:742 ../bin/fileio.c:744
+#: ../bin/fileio.c:749 ../bin/fileio.c:812 ../bin/fileio.c:1045
+#: ../bin/layout.c:373 ../bin/layout.c:561 ../bin/macro.c:1156
+#: ../bin/macro.c:1160 ../bin/macro.c:1218 ../bin/macro.c:1287
+#: ../bin/macro.c:1527 ../bin/macro.c:1545 ../bin/misc.c:434 ../bin/misc.c:481
+#: ../bin/misc.c:1806 ../bin/misc.c:1927 ../bin/misc.c:1935 ../bin/misc.c:2013
+#: ../bin/misc.c:2799 ../bin/misc.c:2808 ../bin/misc.c:2828 ../bin/misc.c:2834
+#: ../bin/misc2.c:456 ../bin/param.c:738 ../bin/param.c:1848
+#: ../bin/param.c:1971 ../bin/param.c:1974 ../bin/param.c:2097
+#: ../bin/param.c:2103 ../bin/paramfile.c:324 ../bin/paramfile.c:326
+#: ../bin/paramfile.c:331 ../bin/paramfile.c:355 ../bin/paramfile.c:381
+#: ../bin/paramfile.c:387 ../bin/paramfilelist.c:94 ../bin/paramfilelist.c:114
+#: ../bin/paramfilelist.c:128 ../bin/paramfilelist.c:192 ../bin/smalldlg.c:90
+#: ../bin/smalldlg.c:222 ../bin/tease.c:1014 ../bin/track.c:1654
+#: ../wlib/gtklib/wpref.c:122 ../../../../build/work/app/bin/bllnhlp.c:586
+msgid "Ok"
+msgstr "Ok"
+
+#: ../bin/cblock.c:212
+msgid "Change block"
+msgstr "Changer de bloc"
+
+#: ../bin/cblock.c:264 ../bin/cswitchmotor.c:342
+#, fuzzy, c-format
+msgid "(%d): Layer=%u %s"
+msgstr "(%d): Calque=%d %s"
+
+#: ../bin/cblock.c:288 ../bin/cblock.c:1000
+msgid "Block"
+msgstr "Bloc"
+
+#: ../bin/cblock.c:491
+#, c-format
+msgid "resolveBlockTrack: T%d[%d]: T%d doesn't exist"
+msgstr "revoir le bloc de voies : T%d[%d] : T%d n'existe pas"
+
+#: ../bin/cblock.c:575 ../bin/cblock.c:807
+msgid "Block must have a name!"
+msgstr "La section de voie doit avoir un nom !"
+
+#: ../bin/cblock.c:604
+msgid "Block is discontigious!"
+msgstr "La section de voie est discontinue !"
+
+#: ../bin/cblock.c:609
+msgid "Create block"
+msgstr "Créer un bloc"
+
+#: ../bin/cblock.c:656
+msgid "Non track object skipped!"
+msgstr "Pas de voies manquante!"
+
+#: ../bin/cblock.c:660
+msgid "Selected track is already in a block, skipped!"
+msgstr "Ignorée, la voie sélectionnée est déjà dans un bloc !"
+
+#: ../bin/cblock.c:674
+msgid "Create Block"
+msgstr "Créer un Bloc"
+
+#: ../bin/cblock.c:704 ../bin/cblock.c:736
+msgid "Select a track"
+msgstr "Sélectionner une voie"
+
+#: ../bin/cblock.c:713 ../bin/cblock.c:744
+msgid "Not a block!"
+msgstr "Pas un bloc!"
+
+#: ../bin/cblock.c:749
+#, c-format
+msgid "Really delete block %s?"
+msgstr "Voulez-vous vraiment supprimer le bloc %s ?"
+
+#: ../bin/cblock.c:749 ../bin/ccornu.c:2729 ../bin/ccornu.c:2940
+#: ../bin/cdraw.c:134 ../bin/cgroup.c:1081 ../bin/cpull.c:648
+#: ../bin/csignal.c:712 ../bin/cswitchmotor.c:670 ../bin/ctodesgn.c:2638
+#: ../bin/ctodesgn.c:3170 ../bin/ctrain.c:2507 ../bin/dbitmap.c:208
+#: ../bin/dcar.c:3970 ../bin/dcar.c:4049 ../bin/dcar.c:4133 ../bin/dcar.c:4152
+#: ../bin/dcar.c:4469 ../bin/dcar.c:4890 ../bin/dcontmgm.c:173
+#: ../bin/dcustmgm.c:168 ../bin/misc.c:1235 ../bin/misc.c:1242
+#: ../bin/misc.c:1313 ../bin/track.c:1656 ../bin/track.c:1753
+#: ../bin/track.c:1767
+msgid "Yes"
+msgstr "Oui"
+
+#: ../bin/cblock.c:749 ../bin/ccornu.c:2729 ../bin/ccornu.c:2940
+#: ../bin/cdraw.c:134 ../bin/cgroup.c:1081 ../bin/cpull.c:648
+#: ../bin/csignal.c:712 ../bin/cswitchmotor.c:670 ../bin/ctodesgn.c:2638
+#: ../bin/ctodesgn.c:3170 ../bin/ctrain.c:2507 ../bin/dcar.c:3970
+#: ../bin/dcar.c:4049 ../bin/dcar.c:4133 ../bin/dcar.c:4152 ../bin/dcar.c:4469
+#: ../bin/dcar.c:4890 ../bin/dcontmgm.c:173 ../bin/dcustmgm.c:168
+#: ../bin/misc.c:1235 ../bin/misc.c:1242 ../bin/misc.c:1313
+#: ../bin/track.c:1656 ../bin/track.c:1753 ../bin/track.c:1767
+msgid "No"
+msgstr "Non"
+
+#: ../bin/cblock.c:750
+msgid "Delete Block"
+msgstr "Supprimer la section de voie"
+
+#: ../bin/cblock.c:795
+#, c-format
+msgid "Deleting block %s"
+msgstr "Supprimer la section de voie %s"
+
+#: ../bin/cblock.c:811
+msgid "Modify Block"
+msgstr "Modifier le bloc"
+
+#: ../bin/cblock.c:844
+msgid "Edit block"
+msgstr "Editer le bloc"
+
+#: ../bin/cblock.c:850
+#, c-format
+msgid "Edit block %d"
+msgstr "Editer le bloc %d"
+
+#: ../bin/ccontrol.c:172 ../bin/csensor.c:164 ../bin/csignal.c:239
+#: ../bin/ctrain.c:183
+msgid "Position"
+msgstr "Position"
+
+#: ../bin/ccontrol.c:173 ../bin/ccontrol.c:431
+msgid "On Script"
+msgstr "Script On"
+
+#: ../bin/ccontrol.c:174 ../bin/ccontrol.c:433
+msgid "Off Script"
+msgstr "Script Off"
+
+#: ../bin/ccontrol.c:240
+msgid "Change Control"
+msgstr "Changer le contrôle"
+
+#: ../bin/ccontrol.c:282 ../bin/csensor.c:252
+#, fuzzy, c-format
+msgid "(%d [%s]): Layer=%u, at %0.3f,%0.3f"
+msgstr "(%d [%s]): Calque=%d, à %0.3f,%0.3f"
+
+#: ../bin/ccontrol.c:295 ../bin/ccontrol.c:640
+msgid "Control"
+msgstr "Contrôle"
+
+#: ../bin/ccontrol.c:427
+msgid "Origin X"
+msgstr "Origine X"
+
+#: ../bin/ccontrol.c:429 ../bin/csensor.c:393 ../bin/csignal.c:513
+msgid "Origin Y"
+msgstr "Origine Y"
+
+#: ../bin/ccontrol.c:445
+msgid "Create Control"
+msgstr "Créer un contrôle"
+
+#: ../bin/ccontrol.c:448
+msgid "Modify Control"
+msgstr "Modifier le contrôle"
+
+#: ../bin/ccontrol.c:485
+msgid "Edit control"
+msgstr "Editer un contrôle"
+
+#: ../bin/ccontrol.c:526
+msgid "Place control"
+msgstr "Placer un contrôle"
+
+#: ../bin/ccornu.c:200 ../bin/ccornu.c:203 ../bin/ccornu.c:206
+#: ../bin/ccornu.c:260
+#, c-format
+msgid "%s FlexTrack"
+msgstr "Voie flexible %s"
+
+#: ../bin/ccornu.c:254
+msgid " FLEX "
+msgstr ""
+
+#: ../bin/ccornu.c:903 ../bin/cjoin.c:894 ../bin/cmisc.c:59
+msgid "First"
+msgstr "Premier"
+
+#: ../bin/ccornu.c:910 ../bin/cjoin.c:899
+msgid "Second"
+msgstr "Second"
+
+#: ../bin/ccornu.c:981 ../bin/ccornu.c:2005 ../bin/ccornu.c:2035
+#: ../bin/tcornu.c:830 ../bin/tcornu.c:1037 ../bin/tcornu.c:1363
+#, c-format
+msgid ""
+"Cornu Create Failed for p1[%0.3f,%0.3f] p2[%0.3f,%0.3f], c1[%0.3f,%0.3f] c2[%"
+"0.3f,%0.3f], a1=%0.3f a2=%0.3f, r1=%s r2=%s"
+msgstr ""
+"La création de Cornu a échoué pour p1[%0.3f,%0.3f] p2[%0.3f,%0.3f], c1[%0.3f,"
+"%0.3f] c2[%0.3f,%0.3f], a1=%0.3f a2=%0.3f, r1=%s r2=%s"
+
+#: ../bin/ccornu.c:1020 ../bin/ccornu.c:1640 ../bin/ccornu.c:1659
+#: ../bin/tbezier.c:246 ../bin/tbezier.c:253 ../bin/tcornu.c:295
+#: ../bin/tcornu.c:300
+msgid "End Angle"
+msgstr "Fin d'angle"
+
+#: ../bin/ccornu.c:1023 ../bin/ccornu.c:1639 ../bin/ccornu.c:1658
+msgid "End Radius"
+msgstr "Rayon final"
+
+#: ../bin/ccornu.c:1076
+msgid "Select Point, or Add Point"
+msgstr "Sélectionner un point, ou ajouter un point"
+
+#: ../bin/ccornu.c:1248
+msgid "Not close enough to track or point, reselect"
+msgstr ""
+"Pas assez proche d'un point valide et sélectionnable, veuillez en choisir un "
+"autre"
+
+#: ../bin/ccornu.c:1254
+msgid "Drag out end of Cornu"
+msgstr "Faire glisser l'extrémité de la Cornu"
+
+#: ../bin/ccornu.c:1256
+msgid "Drag along end of track"
+msgstr "Faites glisser vers le bout de la voie"
+
+#: ../bin/ccornu.c:1258
+msgid "Drag to move"
+msgstr "Faites glisser pour déplacer"
+
+#: ../bin/ccornu.c:1261
+msgid "Drag point to new location, Delete to remove"
+msgstr "Déplacer le point vers sa nouvelle position, supprimer avec Suppr"
+
+#: ../bin/ccornu.c:1265
+msgid "Drag to change end radius"
+msgstr "Faites glisser pour modifier le rayon de fin"
+
+#: ../bin/ccornu.c:1268
+msgid "Drag to change end angle"
+msgstr "Faites glisser pour changer l'angle de fin"
+
+#: ../bin/ccornu.c:1283
+msgid "Pick any circle to adjust or add - Enter to accept, Esc to cancel"
+msgstr ""
+"Sélectionnez un cercle à modifier pour ajuster ou ajouter - 'Entr' pour "
+"confirmer, 'Ech' pour abandonner"
+
+#: ../bin/ccornu.c:1295
+msgid "Track can't be split"
+msgstr "La voie ne peut pas être divisée"
+
+#: ../bin/ccornu.c:1357
+msgid "Too close to other end of selected Track"
+msgstr "Trop proche de l'autre extrémité de la voie sélectionnée"
+
+#: ../bin/ccornu.c:1365
+msgid "Can't move end inside a turnout"
+msgstr "Impossible de se déplacer à l'intérieur d'un aiguillage"
+
+#: ../bin/ccornu.c:1507
+msgid "Can't extend connected Bezier or Cornu"
+msgstr "Impossible d'étendre la connection Bézier ou Cornu"
+
+#: ../bin/ccornu.c:1579
+#, c-format
+msgid ""
+"Cornu : Min Radius=%s MaxRateofCurveChange/Scale=%s Length=%s Winding Arc=%s"
+msgstr ""
+"Cornu : Rayon Min =%s Taux de changement de rayon maximal =%s Longueur =%s "
+"Arc =%s"
+
+#: ../bin/ccornu.c:1601 ../bin/ccornu.c:2271
+msgid "Helix Already Connected"
+msgstr "Hélicoïde déjà connectée"
+
+#: ../bin/ccornu.c:1615
+msgid "No Valid end point on that track"
+msgstr "Aucun point de fin valable sur cette voie"
+
+#: ../bin/ccornu.c:1620
+msgid "Track is different scale"
+msgstr "La voie a une échelle différente"
+
+#: ../bin/ccornu.c:1673
+msgid ""
+"Pick on point to adjust it along track - Delete to remove, Enter to confirm, "
+"ESC to abort"
+msgstr ""
+"Sélectionnez un point et déplacez-le le long de la voie - 'Suppr' pour "
+"supprimer, 'Entr' pour confirmer, 'Ech' pour abandonner"
+
+#: ../bin/ccornu.c:1703
+msgid "Cornu has too complex shape - adjust end pts"
+msgstr "Cornu d'une forme trop complexe - ajustez les points finaux"
+
+#: ../bin/ccornu.c:1714
+#, c-format
+msgid "Cornu point %d too close to other end of connect track - reposition it"
+msgstr ""
+"Fin de Cornu %d trop proche de l’autre extrémité de la connexion de voie - "
+"repositionnez-la"
+
+#: ../bin/ccornu.c:1719
+msgid "Create Cornu"
+msgstr "Créer une Cornu"
+
+#: ../bin/ccornu.c:1908
+msgid "Now Select or Add (+Shift) a Point"
+msgstr "Maintenant, sélectionnez ou ajoutez (+Maj) un point"
+
+#: ../bin/ccornu.c:1967
+#, c-format
+msgid "Cornu end %d too close to other end of connect track - reposition it"
+msgstr ""
+"Fin de Cornu %d trop proche de l’autre extrémité de la connexion de voie - "
+"repositionnez-la"
+
+#: ../bin/ccornu.c:1972
+msgid "Modify Cornu"
+msgstr "Modifier une Cornu"
+
+#: ../bin/ccornu.c:1987
+#, c-format
+msgid "Cornu Extension Create Failed for end %d"
+msgstr "Extension de création de Cornu a échoué pour la fin %d"
+
+#: ../bin/ccornu.c:2079
+#, c-format
+msgid "Connected Track End Adjust for end %d failed"
+msgstr "Le bout %d de la voie est connecté et ne peut pas être ajusté"
+
+#: ../bin/ccornu.c:2090
+msgid "Modify Cornu Cancelled"
+msgstr "Annuler modifier une Cornu"
+
+#: ../bin/ccornu.c:2247
+msgid "Left click - Start Cornu track"
+msgstr "Commencez par une cornu en appuyant sur le bouton gauche de la souris"
+
+#: ../bin/ccornu.c:2249
+msgid "Left click - Place Flextrack"
+msgstr "Clic gauche - Positionner la voie flexible"
+
+#: ../bin/ccornu.c:2252
+msgid "Left click - join with Cornu track"
+msgstr "Clic gauche - raccorder avec une voie Cornu"
+
+#: ../bin/ccornu.c:2254
+msgid "Left click - join with Cornu track, Shift Left click - move to join"
+msgstr ""
+"Clic gauche - raccorder avec une voie Cornu, Maj+Clic gauche - déplacer pour "
+"raccorder"
+
+#: ../bin/ccornu.c:2285
+msgid "No valid open endpoint on that track"
+msgstr "Aucun point de fin non connecté sur cette voie"
+
+#: ../bin/ccornu.c:2313 ../bin/ccornu.c:2325
+msgid "Drag arm in the direction of track"
+msgstr "Tirez le bras de commande dans la direction de la voie"
+
+#: ../bin/ccornu.c:2329
+msgid "No Unconnected Track End there"
+msgstr "Il n'y a aucune voie non connectée"
+
+#: ../bin/ccornu.c:2340 ../bin/ccornu.c:2364
+msgid "No Valid Track End there"
+msgstr "Il n'y a aucune voie non connectée"
+
+#: ../bin/ccornu.c:2352
+msgid "Locked - Move 1st end point of Cornu track along track 1"
+msgstr ""
+"Verrouillé - Déplacer le 1er point de fin de la voie Cornu le long de la "
+"voie 1"
+
+#: ../bin/ccornu.c:2376
+msgid "Locked - Move 2nd end point of Cornu track along track 2"
+msgstr ""
+"Verrouillé - Déplacer le 2nd point de fin de la voie Cornu le long de la "
+"voie 2"
+
+#: ../bin/ccornu.c:2450
+msgid "Track can't be split - so locked to endpoint"
+msgstr ""
+"La voie ne peut pas être divisée - donc verrouillée sur son point de fin"
+
+#: ../bin/ccornu.c:2455
+msgid "Point not on track 1"
+msgstr "Les aiguilles ne sont pas sur la bonne voie 1"
+
+#: ../bin/ccornu.c:2493
+msgid "Pick other end of Cornu"
+msgstr "Choisissez l'autre extrémité de la Cornu"
+
+#: ../bin/ccornu.c:2495
+msgid ""
+"Select flextrack ends or anchors and drag, Enter to approve, Esc to Cancel"
+msgstr ""
+"Sélectionnez les extrémités ou les ancres de la flextrack et faites glisser, "
+"Entr. pour approuver, Ech. pour annuler"
+
+#: ../bin/ccornu.c:2499
+msgid "Put other end of Cornu on a track with an unconnected end point"
+msgstr ""
+"Mettre l'autre extrémité de la Cornu sur une voie avec un point de fin non "
+"connecté"
+
+#: ../bin/ccornu.c:2717 ../bin/ccornu.c:2930
+msgid "Not on a Track"
+msgstr "Pas sur la voie"
+
+#: ../bin/ccornu.c:2725
+msgid "Select a Track To Convert"
+msgstr "Sélectionner une voie à convertir"
+
+#: ../bin/ccornu.c:2729
+msgid "Convert all Selected Tracks to Cornu Tracks?"
+msgstr "Convertir toutes les voies sélectionnées en une voie Cornu ?"
+
+#: ../bin/ccornu.c:2734
+msgid "Convert Cornu"
+msgstr "Convertir une Cornu"
+
+#: ../bin/ccornu.c:2886
+#, c-format
+msgid "Tracks Counts: %d converted %d unconvertible %d created %d deleted"
+msgstr ""
+
+#: ../bin/ccornu.c:2886 ../bin/ccornu.c:3000
+msgid "OK"
+msgstr "OK"
+
+#: ../bin/ccornu.c:2936
+msgid "Select a Cornu or Bezier Track To Convert to Fixed"
+msgstr "Sélectionnez une voie Cornu ou Bézier à convertir en fixe"
+
+#: ../bin/ccornu.c:2940
+msgid "Convert all Selected Tracks to Fixed Tracks?"
+msgstr "Convertir toutes les voies sélectionnées en voies fixes ?"
+
+#: ../bin/ccornu.c:2949
+msgid "Convert Bezier and Cornu"
+msgstr "Convertir des Bezier et Cornu"
+
+#: ../bin/ccornu.c:3000
+#, c-format
+msgid "Tracks Counts: %d converted %d unconvertible %d deleted"
+msgstr ""
+
+#: ../bin/ccornu.c:3028
+msgid "Convert"
+msgstr "Convertir"
+
+#: ../bin/ccornu.c:3029
+msgid "Convert To Cornu"
+msgstr "Convertir en Cornu"
+
+#: ../bin/ccornu.c:3030
+msgid "Convert From Cornu"
+msgstr "Convertir depuis une Cornu"
+
+#: ../bin/ccurve.c:169
+msgid "Drag from endpoint in direction of curve - lock to track open endpoint"
+msgstr ""
+"Faites glisser du point d'extrémité dans la direction de la courbe - "
+"connexion au point d'extrémité non connecté"
+
+#: ../bin/ccurve.c:171
+msgid "Drag from endpoint in direction of curve"
+msgstr "Faites glisser depuis l'extrémité dans le sens de la courbe"
+
+#: ../bin/ccurve.c:175
+msgid "Drag from endpoint to center - lock to track open endpoint"
+msgstr ""
+"Glisser de l'extrémité de la voie vers le centre - utilisez Maj pour "
+"connecter à l'extrémité non connectée"
+
+#: ../bin/ccurve.c:177
+msgid "Drag from endpoint to center"
+msgstr "Faire glisser de l'extrémité de voie vers le centre"
+
+#: ../bin/ccurve.c:180
+msgid "Drag from center to endpoint"
+msgstr "Faites glisser du centre vers l'extrémité"
+
+#: ../bin/ccurve.c:183
+msgid "Drag from one to other end of chord"
+msgstr "Faites glisser d'un bout à l'autre de la corde"
+
+#: ../bin/ccurve.c:241
+msgid "End locked: Drag out curve start"
+msgstr "Point de fin fixé, faites glisser pour dessiner le départ de la courbe"
+
+#: ../bin/ccurve.c:242
+msgid "Drag along curve start"
+msgstr "Faire glisser le long du début de courbe"
+
+#: ../bin/ccurve.c:250
+msgid "End locked: Drag out curve center"
+msgstr "Point de fin fixé, faites glisser pour dessiner le centre de la courbe"
+
+#: ../bin/ccurve.c:251
+msgid "Drag out curve center"
+msgstr "Faire glisser vers le centre de la courbe"
+
+#: ../bin/ccurve.c:258
+msgid "Drag out from center to endpoint"
+msgstr "Glisser du centre au point de fin"
+
+#: ../bin/ccurve.c:267
+msgid "End locked: Drag to other end of chord"
+msgstr ""
+"Point de fin fixé, faites glisser pour dessiner l'autre extrémité de la corde"
+
+#: ../bin/ccurve.c:269
+msgid "Drag to other end of chord"
+msgstr "Tirez à l'autre bout de la corde"
+
+#: ../bin/ccurve.c:324
+#, c-format
+msgid "Start Locked: Drag out curve start - Angle=%0.3f"
+msgstr "Départ verrouillé : faites glisser le début de la courbe - Angle=%0.3f"
+
+#: ../bin/ccurve.c:325
+#, c-format
+msgid "Drag out curve start - Angle=%0.3f"
+msgstr "Faites glisser le point de départ de la courbe - Angle =%0.3f"
+
+#: ../bin/ccurve.c:331
+#, c-format
+msgid "Tangent locked: Drag out center - Radius=%s Angle=%0.3f"
+msgstr ""
+"Tangente verrouillée : faites glisser le centre vers l'extérieur - Rayon=%s "
+"Angle=%0.3f"
+
+#: ../bin/ccurve.c:332
+#, c-format
+msgid "Drag out center - Radius=%s Angle=%0.3f"
+msgstr "Faire glisser le centre - Rayon =%s Angle =%0.3f"
+
+#: ../bin/ccurve.c:338
+#, c-format
+msgid "Drag to Edge: Radius=%s Angle=%0.3f"
+msgstr "Faire glisser vers le bord - Rayon =%s Angle =%0.3f"
+
+#: ../bin/ccurve.c:344
+#, c-format
+msgid "Start locked: Drag out chord length=%s angle=%0.3f"
+msgstr "Départ verrouillé : faites glisser la corde, longueur=%s Angle=%0.3f"
+
+#: ../bin/ccurve.c:345
+#, c-format
+msgid "Drag out chord length=%s angle=%0.3f"
+msgstr "Faites glisser sur la corde, longueur =%s Angle =%0.3f"
+
+#: ../bin/ccurve.c:399 ../bin/ccurve.c:557 ../bin/drawgeom.c:735
+msgid "Drag on Red arrows to adjust curve"
+msgstr "Faites glisser les flèches rouges pour ajuster la courbe"
+
+#: ../bin/ccurve.c:497 ../bin/cjoin.c:210 ../bin/cmodify.c:580
+#: ../bin/cturntbl.c:580
+#, c-format
+msgid "Straight Track: Length=%s Angle=%0.3f"
+msgstr "Voie droite : Longueur = %s Angle =%0.3f"
+
+#: ../bin/ccurve.c:504 ../bin/cmodify.c:585 ../bin/drawgeom.c:618
+#: ../wlib/gtklib/ixhelp.c:235
+msgid "Back"
+msgstr "Arrière"
+
+#: ../bin/ccurve.c:523
+#, c-format
+msgid "Curved Track: Radius=%s Angle=%0.3f Length=%s"
+msgstr "Voie courbe : Rayon = %s Angle = %0.3f Longueur = %s"
+
+#: ../bin/ccurve.c:577 ../bin/cstraigh.c:162
+msgid "Create Straight Track"
+msgstr "Créer une voie Droite"
+
+#: ../bin/ccurve.c:589
+msgid "Create Curved Track"
+msgstr "Créer une voie courbe"
+
+#: ../bin/ccurve.c:660
+msgid "Elevation Difference"
+msgstr "Différence d'élévation"
+
+#: ../bin/ccurve.c:661 ../bin/cdraw.c:514 ../bin/cdraw.c:1437
+#: ../bin/cdraw.c:1583 ../bin/cdraw.c:2231 ../bin/cdraw.c:2430
+#: ../bin/cdraw.c:2444 ../bin/compound.c:545 ../bin/compound.c:550
+#: ../bin/compound.c:555 ../bin/compound.c:560 ../bin/ctodesgn.c:180
+#: ../bin/ctodesgn.c:181 ../bin/ctodesgn.c:182 ../bin/ctodesgn.c:183
+#: ../bin/ctodesgn.c:299 ../bin/ctodesgn.c:302 ../bin/ctodesgn.c:304
+#: ../bin/ctodesgn.c:365 ../bin/ctodesgn.c:366 ../bin/ctodesgn.c:371
+#: ../bin/ctodesgn.c:435 ../bin/ctodesgn.c:439 ../bin/ctodesgn.c:440
+#: ../bin/ctodesgn.c:446 ../bin/ctodesgn.c:615 ../bin/tbezier.c:247
+#: ../bin/tbezier.c:254 ../bin/tcornu.c:301 ../bin/tcurve.c:369
+msgid "Radius"
+msgstr "Rayon"
+
+#: ../bin/ccurve.c:662 ../bin/tcurve.c:370
+msgid "Turns"
+msgstr "Tours"
+
+#: ../bin/ccurve.c:663
+msgid "Angular Separation"
+msgstr "Séparation angulaire"
+
+#: ../bin/ccurve.c:664 ../bin/celev.c:47 ../bin/compound.c:562
+#: ../bin/tbezier.c:259 ../bin/tcornu.c:308 ../bin/tcurve.c:376
+#: ../bin/tease.c:529 ../bin/tstraigh.c:91
+msgid "Grade"
+msgstr "Pente"
+
+#: ../bin/ccurve.c:665
+msgid "Vertical Separation"
+msgstr "Séparation verticale"
+
+#: ../bin/ccurve.c:667
+msgid "Total Length"
+msgstr "Longueur totale"
+
+#: ../bin/ccurve.c:743
+#, c-format
+msgid "Total Length %s"
+msgstr "Longueur totale %s"
+
+#: ../bin/ccurve.c:781 ../bin/ccurve.c:985 ../bin/tcurve.c:809
+msgid "Helix"
+msgstr "Hélicoïde"
+
+#: ../bin/ccurve.c:795
+msgid "Circle Radius"
+msgstr "Rayon du cercle"
+
+#: ../bin/ccurve.c:800
+msgid "Click on Circle Edge"
+msgstr "Cliquez sur le bord du cercle"
+
+#: ../bin/ccurve.c:804
+msgid "Click on Circle Center"
+msgstr "Cliquez sur le centre du cercle"
+
+#: ../bin/ccurve.c:835
+msgid "Drag to Center"
+msgstr "Glisser vers le centre"
+
+#: ../bin/ccurve.c:839
+msgid "Drag to Edge"
+msgstr "Glisser vers le bord"
+
+#: ../bin/ccurve.c:859 ../bin/ccurve.c:863
+#, c-format
+msgid "Radius=%s"
+msgstr "Rayon=%s"
+
+#: ../bin/ccurve.c:884
+msgid "Create Helix Track"
+msgstr "Créer une voie hélicoïdale"
+
+#: ../bin/ccurve.c:899
+msgid "Create Circle Track"
+msgstr "Créer une voie circulaire"
+
+#: ../bin/ccurve.c:954
+msgid "Cornu Curve"
+msgstr "Spirale de Cornu"
+
+#: ../bin/ccurve.c:956
+msgid "Curve Track"
+msgstr "Voie courbe"
+
+#: ../bin/ccurve.c:956
+msgid "Curve Tracks"
+msgstr "Voies courbes"
+
+#: ../bin/ccurve.c:957
+msgid "Curve from End-Pt"
+msgstr "Point de fin de la courbe"
+
+#: ../bin/ccurve.c:958
+msgid "Curve from Tangent"
+msgstr "Tangente de la courbe"
+
+#: ../bin/ccurve.c:959
+msgid "Curve from Center"
+msgstr "Centre de la courbe"
+
+#: ../bin/ccurve.c:960
+msgid "Curve from Chord"
+msgstr "Corde de la courbe"
+
+#: ../bin/ccurve.c:961 ../bin/cdraw.c:2572
+msgid "Bezier Curve"
+msgstr "Courbe de Bezier"
+
+#: ../bin/ccurve.c:964 ../bin/tcurve.c:643
+msgid "Circle Track"
+msgstr "Voie circulaire"
+
+#: ../bin/ccurve.c:964
+msgid "Circle Tracks"
+msgstr "Voies circulaires"
+
+#: ../bin/ccurve.c:965
+msgid "Fixed Radius Circle"
+msgstr "Cercle de rayon fixe"
+
+#: ../bin/ccurve.c:966
+msgid "Circle from Tangent"
+msgstr "Cercle de la tangente"
+
+#: ../bin/ccurve.c:967
+msgid "Circle from Center"
+msgstr "Cercle autour du centre"
+
+#: ../bin/cdraw.c:130
+msgid "Font Size must be > 0"
+msgstr "La taille de la police doit être >0"
+
+#: ../bin/cdraw.c:509
+msgid "First Point: X,Y"
+msgstr "D'abord, Point: X,Y"
+
+#: ../bin/cdraw.c:510 ../bin/tcurve.c:368
+msgid "Center: X,Y"
+msgstr "Centre : X,Y"
+
+#: ../bin/cdraw.c:511 ../bin/cdraw.c:532 ../bin/cdraw.c:1427
+#: ../bin/cdraw.c:1572 ../bin/cdraw.c:2229 ../bin/cdraw.c:2451
+#: ../bin/cdraw.c:2471 ../bin/cdraw.c:2475 ../bin/compound.c:543
+#: ../bin/compound.c:548 ../bin/compound.c:553 ../bin/compound.c:558
+#: ../bin/compound.c:564 ../bin/cprint.c:155 ../bin/csignal.c:240
+#: ../bin/csignal.c:515 ../bin/ctodesgn.c:188 ../bin/ctodesgn.c:189
+#: ../bin/ctodesgn.c:190 ../bin/ctodesgn.c:192 ../bin/ctodesgn.c:237
+#: ../bin/ctodesgn.c:260 ../bin/ctodesgn.c:262 ../bin/ctodesgn.c:297
+#: ../bin/ctodesgn.c:300 ../bin/ctodesgn.c:326 ../bin/ctodesgn.c:329
+#: ../bin/ctodesgn.c:363 ../bin/ctodesgn.c:368 ../bin/ctodesgn.c:392
+#: ../bin/ctodesgn.c:396 ../bin/ctodesgn.c:433 ../bin/ctodesgn.c:437
+#: ../bin/ctodesgn.c:442 ../bin/ctodesgn.c:468 ../bin/ctodesgn.c:488
+#: ../bin/ctodesgn.c:509 ../bin/ctodesgn.c:616 ../bin/ctrain.c:184
+#: ../bin/tease.c:524 ../bin/tstraigh.c:90
+msgid "Angle"
+msgstr "Angle"
+
+#: ../bin/cdraw.c:512 ../bin/tcurve.c:374
+msgid "CCW Angle"
+msgstr "Angle CCW"
+
+#: ../bin/cdraw.c:513 ../bin/tcurve.c:375
+msgid "CW Angle"
+msgstr "Angle CW"
+
+#: ../bin/cdraw.c:516 ../bin/cdraw.c:1434 ../bin/cdraw.c:1556
+#: ../bin/cprint.c:130
+msgid "Height"
+msgstr "Hauteur"
+
+#: ../bin/cdraw.c:517 ../bin/cdraw.c:1432 ../bin/cdraw.c:1555
+#: ../bin/cdraw.c:2226 ../bin/cdraw.c:2488 ../bin/ctrain.c:186
+#: ../bin/dcar.c:2234
+msgid "Width"
+msgstr "Largeur"
+
+#: ../bin/cdraw.c:518
+msgid "Keep Origin Relative"
+msgstr "Conserver l'origine relative"
+
+#: ../bin/cdraw.c:519
+msgid "Rot Origin: X,Y"
+msgstr "Centre de rotation : X,Y"
+
+#: ../bin/cdraw.c:520 ../bin/cdraw.c:1441
+msgid "Rotate Angle"
+msgstr "Angle de rotation"
+
+#: ../bin/cdraw.c:521
+msgid "Point Count"
+msgstr "Nombre de points"
+
+#: ../bin/cdraw.c:522 ../bin/cdraw.c:2204 ../bin/ctodesgn.c:202
+#: ../bin/tbezier.c:261
+msgid "Line Width"
+msgstr "Épaisseur de trait"
+
+#: ../bin/cdraw.c:523 ../bin/cdraw.c:2233 ../bin/tbezier.c:260
+msgid "Line Type"
+msgstr "Type de ligne"
+
+#: ../bin/cdraw.c:524 ../bin/cdraw.c:2206 ../bin/cdraw.c:2208
+#: ../bin/cdraw.c:2306 ../bin/cdraw.c:2339 ../bin/cmisc.c:125
+#: ../bin/ctext.c:68 ../bin/ctext.c:147 ../bin/ctodesgn.c:203
+#: ../bin/dcar.c:2230 ../bin/dlayer.c:485 ../bin/doption.c:558
+msgid "Color"
+msgstr "Couleur"
+
+#: ../bin/cdraw.c:525
+msgid "Filled"
+msgstr "Plein"
+
+#: ../bin/cdraw.c:526
+msgid "Open End"
+msgstr "Côté ouvert"
+
+#: ../bin/cdraw.c:527 ../bin/cmisc.c:148 ../bin/cmisc.c:149 ../bin/cmisc.c:150
+#: ../bin/cmisc.c:151 ../bin/ctext.c:70 ../bin/ctext.c:148
+msgid "Boxed"
+msgstr "En boîte"
+
+#: ../bin/cdraw.c:528 ../bin/cdraw.c:1108 ../bin/cdraw.c:2240
+msgid "Lumber"
+msgstr "Structure"
+
+#: ../bin/cdraw.c:529
+msgid "Orientation"
+msgstr "Orientation"
+
+#: ../bin/cdraw.c:530 ../bin/cdraw.c:2222
+#: ../../../../build/work/app/bin/bllnhlp.c:588
+msgid "Size"
+msgstr "Dimension"
+
+#: ../bin/cdraw.c:531 ../bin/compound.c:563 ../bin/tease.c:523
+msgid "Origin: X,Y"
+msgstr "Origine : X,Y"
+
+#: ../bin/cdraw.c:533 ../bin/ctext.c:66 ../bin/ctext.c:146
+msgid "Font Size"
+msgstr "Taille police"
+
+#: ../bin/cdraw.c:534 ../bin/cdraw.c:1254 ../bin/ctext.c:262
+msgid "Text"
+msgstr "Texte"
+
+#: ../bin/cdraw.c:535 ../bin/cmisc.c:144 ../bin/compound.c:565
+#: ../bin/tcurve.c:377 ../bin/tease.c:530 ../bin/tstraigh.c:92
+msgid "Pivot"
+msgstr "Pivot"
+
+#: ../bin/cdraw.c:536 ../bin/compound.c:571 ../bin/cturntbl.c:253
+#: ../bin/doption.c:139 ../bin/doption.c:140 ../bin/tbezier.c:263
+#: ../bin/tcornu.c:309 ../bin/tcurve.c:378 ../bin/tease.c:531
+#: ../bin/tstraigh.c:93 ../../../../build/work/app/bin/bllnhlp.c:666
+#: ../../../../build/work/app/bin/bllnhlp.c:667
+#: ../../../../build/work/app/bin/bllnhlp.c:668
+#: ../../../../build/work/app/bin/bllnhlp.c:669
+#: ../../../../build/work/app/bin/bllnhlp.c:670
+#: ../../../../build/work/app/bin/bllnhlp.c:671
+#: ../../../../build/work/app/bin/bllnhlp.c:672
+#: ../../../../build/work/app/bin/bllnhlp.c:673
+#: ../../../../build/work/app/bin/bllnhlp.c:674
+#: ../../../../build/work/app/bin/bllnhlp.c:675
+#: ../../../../build/work/app/bin/bllnhlp.c:676
+#: ../../../../build/work/app/bin/bllnhlp.c:677
+#: ../../../../build/work/app/bin/bllnhlp.c:678
+#: ../../../../build/work/app/bin/bllnhlp.c:679
+#: ../../../../build/work/app/bin/bllnhlp.c:680
+#: ../../../../build/work/app/bin/bllnhlp.c:681
+#: ../../../../build/work/app/bin/bllnhlp.c:682
+#: ../../../../build/work/app/bin/bllnhlp.c:683
+#: ../../../../build/work/app/bin/bllnhlp.c:684
+#: ../../../../build/work/app/bin/bllnhlp.c:685
+msgid "Layer"
+msgstr "Calque"
+
+#: ../bin/cdraw.c:1093
+msgid "Straight Line"
+msgstr "Ligne droite"
+
+#: ../bin/cdraw.c:1098 ../bin/cdraw.c:2564
+msgid "Dimension Line"
+msgstr "Ligne de cote"
+
+#: ../bin/cdraw.c:1119 ../bin/cdraw.c:2241 ../bin/cdraw.c:2566
+msgid "Table Edge"
+msgstr "Bord de table"
+
+#: ../bin/cdraw.c:1139 ../bin/cdraw.c:2246 ../bin/cdraw.c:2247
+#: ../bin/cdraw.c:2248
+msgid "Circle"
+msgstr "Cercle"
+
+#: ../bin/cdraw.c:1150
+msgid "Curved Line"
+msgstr "Ligne courbe"
+
+#: ../bin/cdraw.c:1166 ../bin/cdraw.c:2251 ../bin/cdraw.c:2252
+#: ../bin/cdraw.c:2253
+msgid "Filled Circle"
+msgstr "Cercle plein"
+
+#: ../bin/cdraw.c:1185
+msgid "Rectangle"
+msgstr "Rectangle"
+
+#: ../bin/cdraw.c:1199 ../bin/cdraw.c:2257
+msgid "Polyline"
+msgstr "Polyligne"
+
+#: ../bin/cdraw.c:1203 ../bin/cdraw.c:2250 ../bin/cdraw.c:2583
+msgid "Polygon"
+msgstr "Polygone"
+
+#: ../bin/cdraw.c:1221
+msgid "Filled Rectangle"
+msgstr "Rectangle plein"
+
+#: ../bin/cdraw.c:1234 ../bin/cdraw.c:2255 ../bin/cdraw.c:2584
+msgid "Filled Polygon"
+msgstr "Polygone plein"
+
+#: ../bin/cdraw.c:1260
+#, c-format
+msgid "%s(%d) Layer=%d"
+msgstr "%s(%d) Calque=%d"
+
+#: ../bin/cdraw.c:1280 ../bin/cdraw.c:2309 ../bin/compound.c:956
+#: ../bin/doption.c:134 ../bin/tbezier.c:458
+msgid "Solid"
+msgstr "Solide"
+
+#: ../bin/cdraw.c:1281 ../bin/cdraw.c:2311 ../bin/compound.c:957
+#: ../bin/doption.c:131 ../bin/tbezier.c:459
+msgid "Dash"
+msgstr "Tiret"
+
+#: ../bin/cdraw.c:1282 ../bin/cdraw.c:2310 ../bin/compound.c:958
+#: ../bin/tbezier.c:460
+msgid "Dot"
+msgstr "Pointillé"
+
+#: ../bin/cdraw.c:1283 ../bin/compound.c:959 ../bin/tbezier.c:461
+msgid "DashDot"
+msgstr "Tiret point"
+
+#: ../bin/cdraw.c:1284 ../bin/compound.c:960 ../bin/tbezier.c:462
+msgid "DashDotDot"
+msgstr "Tiret pointillés"
+
+#: ../bin/cdraw.c:1285 ../bin/compound.c:961 ../bin/tbezier.c:463
+#, fuzzy
+msgid "CenterDot"
+msgstr "Décalage interne"
+
+#: ../bin/cdraw.c:1286 ../bin/compound.c:962 ../bin/tbezier.c:464
+msgid "PhantomDot"
+msgstr ""
+
+#: ../bin/cdraw.c:1291 ../bin/cdraw.c:2357
+msgid "Tiny"
+msgstr "Minuscule"
+
+#: ../bin/cdraw.c:1292 ../bin/cdraw.c:2358
+msgid "Small"
+msgstr "Petit"
+
+#: ../bin/cdraw.c:1293 ../bin/cdraw.c:2359
+msgid "Medium"
+msgstr "Moyen"
+
+#: ../bin/cdraw.c:1294 ../bin/cdraw.c:2360
+msgid "Large"
+msgstr "Grand"
+
+#: ../bin/cdraw.c:1430
+msgid "Relative Angle"
+msgstr "Angle relatif"
+
+#: ../bin/cdraw.c:1439 ../bin/cdraw.c:1587 ../bin/cdraw.c:2445
+msgid "Arc Angle"
+msgstr "Angle de l'arc"
+
+#: ../bin/cdraw.c:1444
+msgid "Rot Center X"
+msgstr "Centre de rotation X"
+
+#: ../bin/cdraw.c:1446
+msgid "Rot Center Y"
+msgstr "Centre de rotation Y"
+
+#: ../bin/cdraw.c:1543
+msgid "Seg Lth"
+msgstr "Long. segmt"
+
+#: ../bin/cdraw.c:1544
+msgid "Rel Ang"
+msgstr "Angle Rel"
+
+#: ../bin/cdraw.c:2211 ../bin/cdraw.c:2213 ../bin/cdraw.c:2337
+msgid "Lumber Type"
+msgstr "Type de structure"
+
+#: ../bin/cdraw.c:2238
+msgid "Straight"
+msgstr "Trait"
+
+#: ../bin/cdraw.c:2239
+msgid "Dimension"
+msgstr "Dimension"
+
+#: ../bin/cdraw.c:2242 ../bin/cdraw.c:2243 ../bin/cdraw.c:2244
+#: ../bin/cdraw.c:2245
+msgid "Curved"
+msgstr "Courbe"
+
+#: ../bin/cdraw.c:2249 ../bin/cdraw.c:2581
+msgid "Box"
+msgstr "Boite"
+
+#: ../bin/cdraw.c:2254 ../bin/cdraw.c:2582
+msgid "Filled Box"
+msgstr "Boîte pleine"
+
+#: ../bin/cdraw.c:2256 ../bin/tbezier.c:455
+msgid "Bezier Line"
+msgstr "Ligne Bézier"
+
+#: ../bin/cdraw.c:2304
+#, c-format
+msgid "%s Line Width"
+msgstr "%s épaisseur"
+
+#: ../bin/cdraw.c:2307 ../bin/dcar.c:2203 ../bin/dcar.c:4367
+#: ../bin/dcar.c:4372
+msgid "Type"
+msgstr "Type"
+
+#: ../bin/cdraw.c:2312
+msgid "Dash-Dot"
+msgstr "En pointillés"
+
+#: ../bin/cdraw.c:2313
+msgid "Dash-Dot-Dot"
+msgstr "Petits pointillés"
+
+#: ../bin/cdraw.c:2326
+#, c-format
+msgid "%s Color"
+msgstr "%s Couleur"
+
+#: ../bin/cdraw.c:2355
+msgid "Dimension Line Size"
+msgstr "Dimension des voies"
+
+#: ../bin/cdraw.c:2367
+msgid "Drag to create Table Edge"
+msgstr "Faites glisser pour créer un bord de table"
+
+#: ../bin/cdraw.c:2469
+msgid "Seg Length"
+msgstr "Longueur du segment"
+
+#: ../bin/cdraw.c:2473
+msgid "Rel Angle"
+msgstr "Angle Rel"
+
+#: ../bin/cdraw.c:2563
+msgid "Line"
+msgstr "Ligne"
+
+#: ../bin/cdraw.c:2563
+msgid "Draw Line"
+msgstr "Dessiner un trait"
+
+#: ../bin/cdraw.c:2564
+msgid "Draw Dimension Line"
+msgstr "Tracer une ligne de cote"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:363
+#: ../bin/cdraw.c:2565 ../../../../build/work/app/i18n/custmsg.h:1249
+msgid "Benchwork"
+msgstr "Plan de travail"
+
+#: ../bin/cdraw.c:2565
+msgid "Draw Benchwork"
+msgstr "Dessinez un chassis"
+
+#: ../bin/cdraw.c:2566
+msgid "Draw Table Edge"
+msgstr "Dessiner un bord de Table"
+
+#: ../bin/cdraw.c:2568
+msgid "Curve End"
+msgstr "Fin de courbe"
+
+#: ../bin/cdraw.c:2568
+msgid "Draw Curve from End"
+msgstr "Dessiner une courbe depuis l'extrémité"
+
+#: ../bin/cdraw.c:2569
+msgid "Curve Tangent"
+msgstr "Courbe tangente"
+
+#: ../bin/cdraw.c:2569
+msgid "Draw Curve from Tangent"
+msgstr "Dessiner une courbe depuis la tangente"
+
+#: ../bin/cdraw.c:2570
+msgid "Curve Center"
+msgstr "Centre de la courbe"
+
+#: ../bin/cdraw.c:2570
+msgid "Draw Curve from Center"
+msgstr "Dessiner une courbe à partir du centre"
+
+#: ../bin/cdraw.c:2571
+msgid "Curve Chord"
+msgstr "Corde de la Courbe"
+
+#: ../bin/cdraw.c:2571
+msgid "Draw Curve from Chord"
+msgstr "Dessiner une courbe à partir de la corde"
+
+#: ../bin/cdraw.c:2572
+msgid "Draw Bezier"
+msgstr "Dessinez une Bézier"
+
+#: ../bin/cdraw.c:2575
+msgid "Circle Tangent"
+msgstr "Cercle tangent"
+
+#: ../bin/cdraw.c:2575
+msgid "Draw Circle from Tangent"
+msgstr "Dessiner un cercle à partir de la tangente"
+
+#: ../bin/cdraw.c:2576
+msgid "Circle Center"
+msgstr "Centre du cercle"
+
+#: ../bin/cdraw.c:2576
+msgid "Draw Circle from Center"
+msgstr "Tracer un cercle à partir du centre"
+
+#: ../bin/cdraw.c:2578
+msgid "Circle Filled Tangent"
+msgstr "Cercle rempli Tangent"
+
+#: ../bin/cdraw.c:2578
+msgid "Draw Filled Circle from Tangent"
+msgstr "Dessiner un cercle plein à partir de la tangente"
+
+#: ../bin/cdraw.c:2579
+msgid "Circle Filled Center"
+msgstr "Cercle rempli au centre"
+
+#: ../bin/cdraw.c:2579
+msgid "Draw Filled Circle from Center"
+msgstr "Dessiner un cercle plein à partir du centre"
+
+#: ../bin/cdraw.c:2581
+msgid "Draw Box"
+msgstr "Dessinez une Boite"
+
+#: ../bin/cdraw.c:2582
+msgid "Draw Filled Box"
+msgstr "Dessiner une boîte pleine"
+
+#: ../bin/cdraw.c:2583
+msgid "Draw Polygon"
+msgstr "Dessiner un polygone"
+
+#: ../bin/cdraw.c:2584
+msgid "Draw Filled Polygon"
+msgstr "Dessiner un polygone plein"
+
+#: ../bin/cdraw.c:2585
+msgid "PolyLine"
+msgstr "Polyligne"
+
+#: ../bin/cdraw.c:2585
+msgid "Draw PolyLine"
+msgstr "Dessiner une polyligne"
+
+#: ../bin/cdraw.c:2602
+msgid "Straight Objects"
+msgstr "Objets droits"
+
+#: ../bin/cdraw.c:2602
+msgid "Draw Straight Objects"
+msgstr "Dessiner des objets droits"
+
+#: ../bin/cdraw.c:2603
+msgid "Curved Lines"
+msgstr "Lignes courbes"
+
+#: ../bin/cdraw.c:2603
+msgid "Draw Curved Lines"
+msgstr "Tracer des voies courbes"
+
+#: ../bin/cdraw.c:2604
+msgid "Circle Lines"
+msgstr "Lignes circulaires"
+
+#: ../bin/cdraw.c:2604
+msgid "Draw Circles"
+msgstr "Dessinez des cercles"
+
+#: ../bin/cdraw.c:2605
+msgid "Shapes"
+msgstr "Formes"
+
+#: ../bin/cdraw.c:2605
+msgid "Draw Shapes"
+msgstr "Dessiner des formes"
+
+#: ../bin/cdraw.c:2893
+msgid "Close Polygon - 'c'"
+msgstr "Fermer le polygone - 'c'"
+
+#: ../bin/cdraw.c:2894
+msgid "Make PolyLine - 'l'"
+msgstr "Créer une polyligne - 'l'"
+
+#: ../bin/cdraw.c:2895
+msgid "Fill Polygon - 'f'"
+msgstr "Remplir le polygone - 'f'"
+
+#: ../bin/cdraw.c:2896
+msgid "Empty Polygon - 'e'"
+msgstr "Polygone vide - 'e'"
+
+#: ../bin/cdraw.c:2898
+msgid "Points Mode - 'p'"
+msgstr "Mode Points - 'p'"
+
+#: ../bin/cdraw.c:2899
+msgid "Delete Selected Point - 'Del'"
+msgstr "Supprimer le point sélectionné - 'Suppr'"
+
+#: ../bin/cdraw.c:2900
+msgid "Vertex Point - 'v'"
+msgstr "Point du sommet - 'v'"
+
+#: ../bin/cdraw.c:2901
+msgid "Round Corner - 'r'"
+msgstr "Coin rond - 'r"
+
+#: ../bin/cdraw.c:2902
+msgid "Smooth Corner - 's'"
+msgstr "Coin lisse - 's'"
+
+#: ../bin/cdraw.c:2904 ../bin/cselect.c:3348
+msgid "LineType..."
+msgstr "Type de ligne ..."
+
+#: ../bin/cdraw.c:2905 ../bin/cselect.c:3349
+msgid "Solid Line"
+msgstr "Ligne continue"
+
+#: ../bin/cdraw.c:2906 ../bin/cselect.c:3350
+msgid "Dashed Line"
+msgstr "Ligne en pointillés"
+
+#: ../bin/cdraw.c:2907 ../bin/cselect.c:3351
+msgid "Dotted Line"
+msgstr "Ligne en pointillé"
+
+#: ../bin/cdraw.c:2908
+msgid "Dash-Dot Line"
+msgstr "Ligne en pointillé"
+
+#: ../bin/cdraw.c:2909
+msgid "Dash-Dot-Dot Line"
+msgstr "Ligne en petits pointillés"
+
+#: ../bin/cdraw.c:2910
+#, fuzzy
+msgid "Center-Dot Line"
+msgstr "Créer des lignes"
+
+#: ../bin/cdraw.c:2911
+#, fuzzy
+msgid "Phantom-Dot Line"
+msgstr "Ligne en pointillé"
+
+#: ../bin/cdraw.c:2913
+msgid "Origin Mode - 'o'"
+msgstr "Mode origine - 'o'"
+
+#: ../bin/cdraw.c:2914
+msgid "Reset Origin - '0'"
+msgstr "Réinitialiser l'origine - '0'"
+
+#: ../bin/cdraw.c:2915
+msgid "Origin to Selected - 'l'"
+msgstr "Origine de la sélection - 'l'"
+
+#: ../bin/cdraw.c:2916
+msgid "Origin to Centroid - 'c'"
+msgstr "Origine de Centroid - 'c'"
+
+#: ../bin/celev.c:46 ../bin/cprofile.c:1535 ../bin/csplit.c:148
+#: ../bin/csplit.c:153 ../bin/dease.c:67 ../bin/doption.c:132
+#: ../bin/doption.c:134
+msgid "None"
+msgstr "Aucun"
+
+#: ../bin/celev.c:46
+msgid "Defined"
+msgstr "Défini(e)"
+
+#: ../bin/celev.c:46
+msgid "Hidden"
+msgstr "Caché"
+
+#: ../bin/celev.c:47
+msgid "Computed"
+msgstr "Calculé"
+
+#: ../bin/celev.c:47
+msgid "Station"
+msgstr "Gare"
+
+#: ../bin/celev.c:47 ../bin/cprofile.c:1533 ../bin/dcmpnd.c:75
+msgid "Ignore"
+msgstr "Ignoré"
+
+#: ../bin/celev.c:203
+msgid "Set Elevation"
+msgstr "Définir l'élévation"
+
+#: ../bin/celev.c:296 ../bin/celev.c:303 ../bin/celev.c:306
+#, c-format
+msgid "Undefined"
+msgstr "Non défini"
+
+#: ../bin/celev.c:362 ../bin/celev.c:495
+msgid "Elevation"
+msgstr "Élévation"
+
+#: ../bin/celev.c:362 ../bin/cmisc.c:459 ../bin/dcontmgm.c:299
+#: ../bin/dcustmgm.c:395 ../bin/dlayer.c:1124 ../bin/dpricels.c:154
+#: ../bin/filenoteui.c:249 ../bin/linknoteui.c:182
+#: ../bin/paramfilesearch_ui.c:396 ../bin/textnoteui.c:171
+msgid "Done"
+msgstr "Valider"
+
+#: ../bin/celev.c:374 ../bin/celev.c:426 ../bin/celev.c:428 ../bin/celev.c:447
+msgid "Click on end, +Shift to split, +Ctrl to move description"
+msgstr ""
+"Cliquez sur fin, +Maj pour segmenter, +Ctrl pour déplacer la description"
+
+#: ../bin/celev.c:394
+msgid "Move to end or track crossing +Shift to split"
+msgstr "Déplacez en fin ou à l'intersection de la voie + Maj pour diviser"
+
+#: ../bin/celev.c:398
+msgid "Move to end or track crossing"
+msgstr "Déplacez en fin ou à l'intersection de la voie"
+
+#: ../bin/celev.c:407
+#, fuzzy, c-format
+msgid "Crossing - First %0.3f, Second %0.3f, Clearance %0.3f - Click to Split"
+msgstr ""
+"Croisement - ElevBasse %0.3f, Haute %0.3f, Clearance %0.3f- Cliquez pour "
+"segmenter"
+
+#: ../bin/celev.c:409
+#, fuzzy, c-format
+msgid "Crossing - First %0.3f, Second %0.3f, Clearance %0.3f"
+msgstr "Croisement - ElevBasse %0.3f, Haute %0.3f, Clearance %0.3f"
+
+#: ../bin/celev.c:420
+#, c-format
+msgid "Track elevation %0.3f"
+msgstr "Elévation de voie %0.3f"
+
+#: ../bin/celev.c:423
+#, c-format
+msgid "Click to split here - elevation %0.3f"
+msgstr "Cliquez ici pour segmenter - élévation %0.3f"
+
+#: ../bin/celev.c:451
+msgid "Point selected!"
+msgstr "Point sélectionné !"
+
+#: ../bin/celev.c:454
+msgid "Split track"
+msgstr "Segmenter une voie"
+
+#: ../bin/celev.c:459
+msgid "Track split!"
+msgstr "La voie est coupée !"
+
+#: ../bin/cgroup.c:592
+msgid "Ungroup Object"
+msgstr "Dissocier l'Objet"
+
+#: ../bin/cgroup.c:604
+#, c-format
+msgid "%d objects ungrouped"
+msgstr "%d objets dissociés"
+
+#: ../bin/cgroup.c:606
+msgid "No objects ungrouped"
+msgstr "Aucun objet dégroupé"
+
+#: ../bin/cgroup.c:617
+msgid "Replace with new group?"
+msgstr "Remplacer par un nouveau groupe ?"
+
+#: ../bin/cgroup.c:623 ../bin/compound.c:566 ../bin/cstruct.c:69
+#: ../bin/ctodesgn.c:194 ../bin/ctodesgn.c:2916 ../bin/cturnout.c:82
+#: ../bin/dcar.c:2195 ../bin/dcar.c:4367 ../bin/dcar.c:4372
+#: ../bin/dcmpnd.c:456 ../bin/dcustmgm.c:59
+#: ../../../../build/work/app/bin/bllnhlp.c:370
+#: ../../../../build/work/app/bin/bllnhlp.c:565
+msgid "Manufacturer"
+msgstr "Fabricant"
+
+#: ../bin/cgroup.c:624 ../bin/cmisc.c:459 ../bin/cstruct.c:69
+#: ../bin/ctodesgn.c:2917 ../bin/ctodesgn.c:2918 ../bin/ctrain.c:187
+#: ../bin/cturnout.c:82 ../bin/dcar.c:2211 ../bin/dcar.c:4368
+#: ../bin/dcar.c:4373 ../bin/dcmpnd.c:457 ../bin/dcustmgm.c:60
+#: ../bin/denum.c:182 ../bin/denum.c:183 ../bin/denum.c:186
+#: ../../../../build/work/app/bin/bllnhlp.c:371
+msgid "Description"
+msgstr "Description"
+
+#: ../bin/cgroup.c:625 ../bin/dcmpnd.c:458
+msgid "#"
+msgstr "#"
+
+#: ../bin/cgroup.c:626 ../bin/compound.c:570
+msgid "# Segments"
+msgstr "# Série"
+
+#: ../bin/cgroup.c:628
+msgid "Offset X,Y:"
+msgstr "Décalage X, Y:"
+
+#: ../bin/cgroup.c:1235
+msgid "No endpts"
+msgstr "Pas de pts de fin"
+
+#: ../bin/cgroup.c:1350
+msgid "No paths"
+msgstr "Pas de chemins"
+
+#: ../bin/cgroup.c:1619 ../bin/cgroup.c:1669
+msgid "Group Tracks"
+msgstr "Voies du groupe"
+
+#: ../bin/cgroup.c:1729
+msgid "Group Objects"
+msgstr "Objets du groupe"
+
+#: ../bin/chndldto.c:70
+msgid "Place frog and drag angle"
+msgstr "Placer le cœur et l'angle de déviation"
+
+#: ../bin/chndldto.c:87
+msgid "frog"
+msgstr "coeur"
+
+#: ../bin/chndldto.c:93
+msgid "Drag to set angle"
+msgstr "Faites glisser pour définir l'angle"
+
+#: ../bin/chndldto.c:132
+#, c-format
+msgid "Angle = %0.2f Frog# = %0.2f"
+msgstr "Angle = %0.2f Coeur# = %0.2f"
+
+#: ../bin/chndldto.c:134
+msgid "Frog angle is too close to 0"
+msgstr "L'angle du cœur est trop proche de 0"
+
+#: ../bin/chndldto.c:137
+msgid "Select point position"
+msgstr "Sélectionnez la position du point"
+
+#: ../bin/chndldto.c:149 ../bin/chndldto.c:174
+msgid "points"
+msgstr "aiguilles"
+
+#: ../bin/chndldto.c:271
+#, c-format
+msgid "Length = %0.2f Angle = %0.2f Frog# = %0.2f"
+msgstr "Longueur = %0.2f angle = %0.2f cœur# = %0.2f"
+
+#: ../bin/chndldto.c:274
+msgid "Create Hand Laid Turnout"
+msgstr "Créer un aiguillage paramétré à la main"
+
+#: ../bin/chndldto.c:358
+msgid "HandLaidTurnout"
+msgstr "Aiguillage de conception libre"
+
+#: ../bin/cjoin.c:166
+#, c-format
+msgid "Curved Track: Radius=%s Length=%s"
+msgstr "Voie courbe : Rayon =%s Longueur =%s"
+
+#: ../bin/cjoin.c:252
+#, c-format
+msgid "Curved Track: Radius=%s Length=%s Angle=%0.3f"
+msgstr "Voie courbe : Rayon =%s Longueur =%s Angle =%0.3f"
+
+#: ../bin/cjoin.c:348
+#, c-format
+msgid "Track (%d) is too short for transition-curve by %0.3f"
+msgstr "La voie (%d) est trop courte pour la courbe de transition de %0.3f"
+
+#: ../bin/cjoin.c:366
+#, c-format
+msgid "Connecting track is too short by %0.3f"
+msgstr "La voie de connexion est trop courte de %0.3f"
+
+#: ../bin/cjoin.c:410
+msgid "Click on an unselected End-Point"
+msgstr "Cliquez sur un point d'extrémité non sélectionné"
+
+#: ../bin/cjoin.c:411
+msgid "Click on a selected End-Point"
+msgstr "Cliquez sur un point d'extrémité sélectionné"
+
+#: ../bin/cjoin.c:417
+msgid "unselected"
+msgstr "non sélectionné"
+
+#: ../bin/cjoin.c:417 ../bin/cprint.c:161
+msgid "selected"
+msgstr "sélectionnée(s)"
+
+#: ../bin/cjoin.c:474
+msgid "Left click - Select first draw object end"
+msgstr "Clic gauche - Sélectionner la première extrémité de l'objet de dessin"
+
+#: ../bin/cjoin.c:513 ../bin/cjoin.c:539
+msgid "Not a line - Try again"
+msgstr "Pas de ligne - Réessayez"
+
+#: ../bin/cjoin.c:535
+msgid "Left click - Select second object end"
+msgstr "Clic gauche - Sélectionnez la deuxième extrémité de l'objet"
+
+#: ../bin/cjoin.c:547
+msgid "Same draw object and same endpoint - Try again"
+msgstr "Même objet du dessin et même point de fin - Réessayer"
+
+#: ../bin/cjoin.c:581
+msgid "Create PolyLine"
+msgstr "Créer une polyligne"
+
+#: ../bin/cjoin.c:654 ../bin/cjoin.c:863
+#, fuzzy
+msgid "Desired Radius"
+msgstr "Rayon du cercle"
+
+#: ../bin/cjoin.c:804
+msgid "Left click - join with track"
+msgstr "Clic gauche - raccorder avec la voie"
+
+#: ../bin/cjoin.c:806
+msgid "Left click - join with track, Shift Left click - move to join"
+msgstr ""
+"Clic gauche - raccorder avec la voie, Shift+clic gauche - déplacer pour "
+"raccorder"
+
+#: ../bin/cjoin.c:856
+#, fuzzy, c-format
+msgid "Select 2nd track - desired radius %0.3f"
+msgstr "Sélectionnez la voie à décrire"
+
+#: ../bin/cjoin.c:858 ../bin/cjoin.c:1256 ../bin/cjoin.c:1263
+msgid "Select 2nd track"
+msgstr "Sélectionner une 2nd voie"
+
+#: ../bin/cjoin.c:1065
+msgid "Beyond end of 2nd track"
+msgstr "Au-delà de la fin de la 2ème voie"
+
+#: ../bin/cjoin.c:1100
+msgid "Beyond end of 1st track"
+msgstr "Au-delà de la fin de la 1ère voie"
+
+#: ../bin/cjoin.c:1122
+msgid "First Track Type not supported for non-Cornu Join"
+msgstr "La première voie ne peut être connectée que via des courbes de Cornu"
+
+#: ../bin/cjoin.c:1129
+msgid "First "
+msgstr "Premier "
+
+#: ../bin/cjoin.c:1154
+msgid "Second Track Type not supported for non-Cornu Join"
+msgstr "Deuxième type de voie non pris en charge pour un raccord non Cornu"
+
+#: ../bin/cjoin.c:1161
+msgid "Second "
+msgstr "Second "
+
+#: ../bin/cjoin.c:1175 ../bin/track.c:2270 ../bin/track.c:2306
+#: ../bin/track.c:2372
+msgid "Connecting "
+msgstr "Se connecter "
+
+#: ../bin/cjoin.c:1266
+msgid "Join Tracks"
+msgstr "Raccorder les voies"
+
+#: ../bin/cjoin.c:1348
+msgid "Join"
+msgstr "Raccorder"
+
+#: ../bin/cjoin.c:1349
+msgid "Join Track"
+msgstr "Raccorder une voie"
+
+#: ../bin/cjoin.c:1350
+msgid "Join Lines"
+msgstr "Raccorder des lignes"
+
+#: ../bin/cmisc.c:59
+msgid "Middle"
+msgstr "Milieu"
+
+#: ../bin/cmisc.c:59 ../bin/macro.c:98
+msgid "End"
+msgstr "Fin"
+
+#: ../bin/cmisc.c:242 ../bin/cmodify.c:353 ../bin/compound.c:664
+#: ../bin/ctrain.c:218
+msgid "Change Track"
+msgstr "Changer de voie"
+
+#: ../bin/cmisc.c:572
+msgid "Select track to describe"
+msgstr "Sélectionnez la voie à décrire"
+
+#: ../bin/cmisc.c:650 ../bin/doption.c:235
+msgid "Properties"
+msgstr "Propriétés"
+
+#: ../bin/cmisc2.c:52
+msgid "Bridge"
+msgstr "Pont"
+
+#: ../bin/cmodify.c:203 ../bin/cmodify.c:471
+msgid "Modify Track"
+msgstr "Modifier la voie"
+
+#: ../bin/cmodify.c:266
+msgid ""
+"Select a track to modify, Left-Click change length, Right-Click to add "
+"flextrack"
+msgstr ""
+"Sélectionnez une voie à modifier, cliquez sur le bouton gauche pour changer "
+"sa longueur, cliquez sur le bouton droit pour ajouter une voie"
+
+#: ../bin/cmodify.c:512
+msgid "Drag to add flex track"
+msgstr "Faites glisser pour créer une voie flexible"
+
+#: ../bin/cmodify.c:517
+msgid "No track to extend"
+msgstr "Pas de voies à prolonger"
+
+#: ../bin/cmodify.c:522
+msgid "No track selected"
+msgstr "Aucune voie sélectionnée"
+
+#: ../bin/cmodify.c:655
+#, c-format
+msgid "Curve Track: Radius=%s Length=%s Angle=%0.3f"
+msgstr "Voie courbe : Rayon = %s Longueur = %s Angle = %0.3f"
+
+#: ../bin/cmodify.c:670
+msgid "Extend Track"
+msgstr "Prolonger la voie"
+
+#: ../bin/cmodify.c:794
+msgid "Modify"
+msgstr "Modifier"
+
+#: ../bin/cmodify.c:801 ../bin/cselect.c:3305 ../bin/cselect.c:3321
+#: ../bin/misc.c:2197 ../bin/misc.c:2199
+msgid "Zoom In"
+msgstr "Zoom Avant"
+
+#: ../bin/cmodify.c:802 ../bin/cselect.c:3309 ../bin/cselect.c:3322
+#: ../bin/misc.c:2201 ../bin/misc.c:2203
+msgid "Zoom Out"
+msgstr "Zoom Arrière"
+
+#: ../bin/cmodify.c:803
+msgid "Pan center - 'c'"
+msgstr "Centre du panoramique - 'c'"
+
+#: ../bin/cnote.c:69 ../bin/textnoteui.c:48 ../bin/trknote.c:60
+msgid "Note"
+msgstr "Remarque"
+
+#: ../bin/cnote.c:75
+msgid "Replace this text with your layout notes"
+msgstr "Remplacez ce texte par vos notes de plan"
+
+#: ../bin/compound.c:544 ../bin/compound.c:549 ../bin/compound.c:554
+#: ../bin/compound.c:559 ../bin/tbezier.c:248 ../bin/tbezier.c:255
+#: ../bin/tcornu.c:297 ../bin/tcornu.c:302
+msgid "Center X,Y"
+msgstr "Centre X,Y"
+
+#: ../bin/compound.c:546 ../bin/tbezier.c:249 ../bin/tcornu.c:298
+msgid "Z1"
+msgstr "Z1"
+
+#: ../bin/compound.c:551 ../bin/tbezier.c:256 ../bin/tcornu.c:303
+msgid "Z2"
+msgstr "Z2"
+
+#: ../bin/compound.c:552
+msgid "End Pt 3: X,Y"
+msgstr "Bout 3: X,Y"
+
+#: ../bin/compound.c:556
+msgid "Z3"
+msgstr "Z3"
+
+#: ../bin/compound.c:557
+msgid "End Pt 4: X,Y"
+msgstr "Bout 4: X,Y"
+
+#: ../bin/compound.c:561
+msgid "Z4"
+msgstr "Z4"
+
+#: ../bin/compound.c:568 ../bin/cstruct.c:69 ../bin/cturnout.c:82
+#: ../bin/dcar.c:4367 ../bin/dcar.c:4372 ../bin/dcustmgm.c:60
+#: ../bin/doption.c:137 ../bin/doption.c:138
+msgid "Part No"
+msgstr "Référence N°"
+
+#: ../bin/compound.c:569
+msgid "LineType"
+msgstr "Type de Ligne"
+
+#: ../bin/compound.c:830 ../bin/cstruct.c:935 ../bin/cstruct.c:1126
+msgid "Structure"
+msgstr "Structure"
+
+#: ../bin/compound.c:832 ../bin/cswitchmotor.c:228 ../bin/cturnout.c:1063
+#: ../bin/cturnout.c:2888
+msgid "Turnout"
+msgstr "Aiguillage"
+
+#: ../bin/compound.c:832
+msgid "Sectional Track"
+msgstr "Section de voie"
+
+#: ../bin/compound.c:836
+#, c-format
+msgid "%s (%d) Layer= %d %s"
+msgstr "%s (%d) Calque= %d %s"
+
+#: ../bin/cparalle.c:52 ../bin/cparalle.c:100 ../bin/cparalle.c:140
+#: ../bin/ctodesgn.c:538 ../bin/ctodesgn.c:558 ../bin/ctodesgn.c:578
+#: ../bin/tcurve.c:371
+msgid "Separation"
+msgstr "Séparation"
+
+#: ../bin/cparalle.c:55 ../bin/cparalle.c:101
+msgid "Radius Factor"
+msgstr "Facteur de Rayon"
+
+#: ../bin/cparalle.c:141
+msgid "Radius factor"
+msgstr "Facteur de rayon"
+
+#: ../bin/cparalle.c:154
+#, fuzzy
+msgid " Track/Line doesn't support parallel"
+msgstr " Aucun parallèle ne peut être créé pour cette voie"
+
+#: ../bin/cparalle.c:226
+msgid "Create Parallel Track"
+msgstr "Créer une voie parallèle"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:354
+#: ../bin/cparalle.c:296 ../../../../build/work/app/i18n/custmsg.h:1231
+msgid "Parallel"
+msgstr "Parallèle"
+
+#: ../bin/cparalle.c:297
+msgid "Parallel Track"
+msgstr "Voie parallèle"
+
+#: ../bin/cparalle.c:298
+msgid "Parallel Line"
+msgstr "Ligne parallèle"
+
+#: ../bin/cprint.c:110
+msgid "Portrait"
+msgstr "Portrait"
+
+#: ../bin/cprint.c:110
+msgid "Landscape"
+msgstr "Paysage"
+
+#: ../bin/cprint.c:111 ../bin/cswitchmotor.c:94 ../bin/cswitchmotor.c:113
+#: ../bin/cswitchmotor.c:225 ../bin/dbench.c:78 ../bin/dease.c:67
+#: ../bin/doption.c:131 ../bin/doption.c:133 ../bin/macro.c:1406
+msgid "Normal"
+msgstr "Normal"
+
+#: ../bin/cprint.c:111 ../bin/cswitchmotor.c:95 ../bin/cswitchmotor.c:114
+#: ../bin/cswitchmotor.c:226 ../bin/ctrain.c:941 ../bin/ctrain.c:1248
+msgid "Reverse"
+msgstr "Inversé"
+
+#: ../bin/cprint.c:112
+msgid "Engineering Data"
+msgstr "Données d'ingénierie"
+
+#: ../bin/cprint.c:113
+msgid "Registration Marks (in 1:1 scale only)"
+msgstr "Aides au positionnement (à l'échelle 1:1 uniquement)"
+
+#: ../bin/cprint.c:114
+msgid "Page Numbers"
+msgstr "Numéro de page"
+
+#: ../bin/cprint.c:115
+msgid "Ignore Page Margins"
+msgstr "Impression sans marge"
+
+#: ../bin/cprint.c:116 ../bin/csnap.c:705 ../bin/doption.c:530
+msgid "Snap Grid"
+msgstr "Grille magnétique"
+
+#: ../bin/cprint.c:117
+msgid "Rulers"
+msgstr "Règles"
+
+#: ../bin/cprint.c:118
+msgid "Roadbed Outline"
+msgstr "Rayon droit"
+
+#: ../bin/cprint.c:119
+msgid "Centerline below Scale 1:1"
+msgstr "Imprimer l'axe central (en dessous de l'échelle 1:1)"
+
+#: ../bin/cprint.c:127
+msgid "Print Scale"
+msgstr "Echelle d'impression"
+
+#: ../bin/cprint.c:128
+msgid "Page Width"
+msgstr "Largeur de page"
+
+#: ../bin/cprint.c:129
+msgid "Max"
+msgstr "Max"
+
+#: ../bin/cprint.c:131
+msgid "Snap Shot"
+msgstr "Copie Ecran"
+
+#: ../bin/cprint.c:132
+msgid "Page Format"
+msgstr "Format de la page"
+
+#: ../bin/cprint.c:133
+msgid "Print Order"
+msgstr "Ordre d'impression"
+
+#: ../bin/cprint.c:134
+msgid "Print "
+msgstr "Imprimer "
+
+#: ../bin/cprint.c:149
+msgid " Width"
+msgstr " Largeur"
+
+#: ../bin/cprint.c:151
+#, fuzzy
+msgid "Margins"
+msgstr "Principal"
+
+#: ../bin/cprint.c:152 ../bin/cturntbl.c:250
+msgid "Origin: X"
+msgstr "Origine : X"
+
+#: ../bin/cprint.c:153 ../bin/csnap.c:535
+msgid "Y"
+msgstr "Y"
+
+#: ../bin/cprint.c:154 ../bin/cprint.c:620 ../bin/cprofile.c:715
+#: ../bin/dcar.c:2215
+msgid "Reset"
+msgstr "Remise à zéro"
+
+#: ../bin/cprint.c:156
+msgid "Setup"
+msgstr "Configuration"
+
+#: ../bin/cprint.c:157 ../bin/cselect.c:3313 ../bin/misc.c:2228
+msgid "Select All"
+msgstr "Tout sélectionner"
+
+#: ../bin/cprint.c:158 ../bin/cprofile.c:717 ../bin/layout.c:472
+#: ../bin/misc.c:726
+msgid "Clear"
+msgstr "Effacer"
+
+#: ../bin/cprint.c:160
+msgid "0 pages"
+msgstr "0 pages"
+
+#: ../bin/cprint.c:187
+#, c-format
+msgid "%d page"
+msgstr "pages %d"
+
+#: ../bin/cprint.c:187
+#, c-format
+msgid "%d pages"
+msgstr "pages %d"
+
+#: ../bin/cprint.c:408
+#, c-format
+msgid "PrintScale 1:%ld Room %s x %s Model Scale %s File %s"
+msgstr "Échelle d'impression 1:%ld Espace %s x %s Échelle %s Fichier %s"
+
+#: ../bin/cprint.c:716 ../bin/dbitmap.c:208 ../bin/filenoteui.c:158
+#: ../bin/misc.c:1235 ../bin/misc.c:1313 ../bin/param.c:2618
+#: ../wlib/gtklib/browserhelp.c:88
+#: ../../../../build/work/app/bin/bllnhlp.c:584
+msgid "Cancel"
+msgstr "Annuler"
+
+#: ../bin/cprint.c:723
+#, fuzzy
+msgid "Print Margins"
+msgstr "Page de test pour les marges d'impression"
+
+#: ../bin/cprint.c:1367 ../bin/cprofile.c:719 ../bin/ctodesgn.c:2864
+#: ../bin/denum.c:55
+msgid "Print"
+msgstr "Imprimer"
+
+#: ../bin/cprint.c:1388
+msgid "Select pages to print, or drag to move print grid"
+msgstr ""
+"Sélectionnez ou faites glisser les pages à imprimer pour déplacer la grille "
+"d'impression"
+
+#: ../bin/cprint.c:1485
+msgid "Print..."
+msgstr "Imprimer ..."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:350
+#: ../bin/cprofile.c:614 ../bin/cprofile.c:1448 ../bin/cprofile.c:1527
+#: ../../../../build/work/app/bin/bllnhlp.c:122
+#: ../../../../build/work/app/i18n/custmsg.h:1223
+msgid "Profile"
+msgstr "Profil"
+
+#: ../bin/cprofile.c:632
+#, c-format
+msgid "%s Profile: %s"
+msgstr "%s Profil: %s"
+
+#: ../bin/cprofile.c:713 ../bin/misc.c:1894
+msgid "Change"
+msgstr "Modifier"
+
+#: ../bin/cprofile.c:757 ../bin/cprofile.c:767
+#, c-format
+msgid "Elev = %0.1f"
+msgstr "Élév = %0.1f"
+
+#: ../bin/cprofile.c:769
+#, c-format
+msgid "Elev=%0.2f %0.1f%%"
+msgstr "Élév =%0.2f %0.1f%%"
+
+#: ../bin/cprofile.c:774
+#, c-format
+msgid "%0.1f%% Elev = %0.2f"
+msgstr "%0.1f%% Elev = %0.2f"
+
+#: ../bin/cprofile.c:779
+#, c-format
+msgid "%0.1f%% Elev = %0.2f %0.1f%%"
+msgstr "%0.1f%% Elev = %0.2f %0.1f%%"
+
+#: ../bin/cprofile.c:794 ../bin/cprofile.c:864 ../bin/cprofile.c:1400
+msgid "Profile Command"
+msgstr "Commande de profil"
+
+#: ../bin/cprofile.c:803 ../bin/cprofile.c:1454
+msgid "Drag to change Elevation"
+msgstr "Faites glisser pour modifier l'élévation"
+
+#: ../bin/cprofile.c:905
+msgid "Select a Defined Elevation to start Profile"
+msgstr "Sélectionnez une élévation définie pour démarrer le Profil"
+
+#: ../bin/cprofile.c:907
+msgid "Select a Defined Elevation to extend Profile"
+msgstr "Sélectionnez une élévation définie pour étendre le profil"
+
+#: ../bin/cprofile.c:1462
+msgid "Select a Defined Elevation to start profile"
+msgstr "Sélectionnez une élévation définie pour démarrer le profil"
+
+#: ../bin/cprofile.c:1531
+msgid "Define"
+msgstr "Définir"
+
+#: ../bin/cpull.c:439 ../bin/cpull.c:595
+#, c-format
+msgid "%d tracks moved"
+msgstr "%d Voies déplacées"
+
+#: ../bin/cpull.c:485
+msgid "Pull Tracks"
+msgstr "Voies de service"
+
+#: ../bin/cpull.c:559
+msgid "Tighten Tracks"
+msgstr "Resserrer les voies"
+
+#: ../bin/cpull.c:645
+msgid "Connect Multiple Tracks - Select multiple tracks to join first"
+msgstr ""
+"Connecter plusieurs voies - Sélectionnez plusieurs voies à raccorder en "
+"premier"
+
+#: ../bin/cpull.c:648
+msgid "Try to Connect all Selected Tracks?"
+msgstr "Toutes les voies sélectionnées doivent-elles être connectées?"
+
+#: ../bin/cpull.c:654
+msgid "ReConnect"
+msgstr "Reconnecter"
+
+#: ../bin/cpull.c:690
+#, c-format
+msgid ""
+"Round 1 %d and Round 2 %d tracks connected, %d close pairs of end Points "
+"were not connected"
+msgstr ""
+"Les séries 1 %d et séries 2 %d de voies sont connectées, %d paires de points "
+"de fin de voies proches ne sont pas connectées"
+
+#: ../bin/cpull.c:715
+msgid "Select first endpoint or turntable to connect, +Shift to tighten"
+msgstr ""
+"Sélectionnez le premier point de fin ou le pont tournant à connecter, +Maj "
+"pour resserrer"
+
+#: ../bin/cpull.c:717
+msgid ""
+"Select first endpoint to connect, or Right-Click for connecting selected "
+"tracks (not turntable)"
+msgstr ""
+"Sélectionnez le premier point de fin à connecter, ou cliquez avec le bouton "
+"droit pour connecter les voies sélectionnées (pas le pont tournant)"
+
+#: ../bin/cpull.c:776
+msgid "Select second endpoint or turntable to connect"
+msgstr "Sélectionnez le deuxième point de fin ou le pont tournant à connecter"
+
+#: ../bin/cpull.c:783
+msgid "Same Track! - please select another"
+msgstr "Même voie ! - veuillez en choisir une autre"
+
+#: ../bin/cpull.c:870
+msgid "Connect Two Tracks"
+msgstr "Connecter deux Voies"
+
+#: ../bin/cpull.c:872
+msgid "Connect All Selected - 'S'"
+msgstr "Connecter tous les éléments sélectionnés - 'S'"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:361
+#: ../bin/cruler.c:143 ../../../../build/work/app/i18n/custmsg.h:1245
+msgid "Ruler"
+msgstr "Règle"
+
+#: ../bin/cselect.c:616
+msgid "Change Track Width"
+msgstr "Changer la largeur de la voie"
+
+#: ../bin/cselect.c:640
+msgid "Change Line Type"
+msgstr "Changer le type de ligne"
+
+#: ../bin/cselect.c:669
+msgid "Delete Tracks"
+msgstr "Supprimer des voies"
+
+#: ../bin/cselect.c:745
+msgid "Hide Tracks (Tunnel)"
+msgstr "Masquer les voies (tunnel)"
+
+#: ../bin/cselect.c:763
+msgid "Bridge Tracks "
+msgstr "Raccorder les voies "
+
+#: ../bin/cselect.c:780
+msgid "Ties Tracks "
+msgstr "Voies groupées "
+
+#: ../bin/cselect.c:817 ../bin/misc.c:2348
+msgid "Move To Current Layer"
+msgstr "Déplacer vers le calque actuel"
+
+#: ../bin/cselect.c:857 ../bin/misc.c:2498
+msgid "Clear Elevations"
+msgstr "Effacer les élévations"
+
+#: ../bin/cselect.c:901
+msgid "Add Elevations"
+msgstr "Ajouter des élévations"
+
+#: ../bin/cselect.c:916
+msgid "Refresh Compound"
+msgstr "Mettre à jour la compilation"
+
+#: ../bin/cselect.c:948 ../bin/dcar.c:4367 ../bin/dcar.c:4372
+#: ../bin/dcustmgm.c:60 ../bin/layout.c:463
+msgid "Scale"
+msgstr "Échelle"
+
+#: ../bin/cselect.c:948 ../bin/cselect.c:973
+msgid "Ratio"
+msgstr "Rapport"
+
+#: ../bin/cselect.c:957
+msgid "Do not resize track"
+msgstr "Ne pas redimensionner la voie"
+
+#: ../bin/cselect.c:961
+msgid "Rescale by:"
+msgstr "Changer d'échelle par :"
+
+#: ../bin/cselect.c:963
+msgid "From:"
+msgstr "De :"
+
+#: ../bin/cselect.c:967
+msgid "To: "
+msgstr "À : "
+
+#: ../bin/cselect.c:1034
+msgid "Rescale Tracks"
+msgstr "Changer d'échelle les voies"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:357
+#: ../bin/cselect.c:1164 ../../../../build/work/app/i18n/custmsg.h:1237
+msgid "Rescale"
+msgstr "Changer d'échelle"
+
+#: ../bin/cselect.c:1465
+msgid "Cornu too tight - it was deleted"
+msgstr "Cornu trop serrée - elle a été supprimée"
+
+#: ../bin/cselect.c:1520
+msgid "Move To Join"
+msgstr "Déplacer pour Raccorder"
+
+#: ../bin/cselect.c:1714
+msgid "Drag to move selected tracks - Shift+Ctrl+Arrow micro-steps the move"
+msgstr ""
+"Faites glisser pour déplacer la voie sélectionnée - utilisez Maj+Ctrl+4 "
+"flèches pour déplacer en pas fins"
+
+#: ../bin/cselect.c:1735 ../bin/cselect.c:1848 ../bin/cselect.c:2205
+msgid "Move Tracks"
+msgstr "Déplacer des voies"
+
+#: ../bin/cselect.c:1893
+msgid "Align: Click on a selected object to be aligned"
+msgstr "Aligner : cliquez sur un objet sélectionné à aligner"
+
+#: ../bin/cselect.c:1931
+msgid "Drag to rotate selected tracks, Shift+RightClick for QuickRotate Menu"
+msgstr ""
+"Faites glisser pour faire pivoter les voies sélectionnées, Maj+Clic droit "
+"pour ouvrir le menu Rotation rapide"
+
+#: ../bin/cselect.c:1947 ../bin/cselect.c:2218
+msgid "Rotate Tracks"
+msgstr "Faire pivoter les voies"
+
+#: ../bin/cselect.c:1960
+msgid "Center of Rotation snapped to Turntable center"
+msgstr "Le centre de rotation est aligné sur le centre du pont tournant"
+
+#: ../bin/cselect.c:2002 ../bin/cselect.c:2033
+#, c-format
+msgid "Angle %0.3f"
+msgstr "Angle %0.3f"
+
+#: ../bin/cselect.c:2089
+#, c-format
+msgid "Angle %0.3f #%ld"
+msgstr "Angle %0.3f #%ld"
+
+#: ../bin/cselect.c:2091
+#, c-format
+msgid "Angle %0.3f %s"
+msgstr "Angle %0.3f %s"
+
+#: ../bin/cselect.c:2096
+msgid "Origin Set. Drag away to set start angle"
+msgstr "Réglage d'origine. Faites glisser pour définir l'angle de départ"
+
+#: ../bin/cselect.c:2110
+msgid "Align: Click on the 2nd unselected object"
+msgstr "Aligner : Cliquez sur le 2ème objet non sélectionné"
+
+#: ../bin/cselect.c:2230
+msgid "Toggle Label"
+msgstr "Modifie l'étiquette"
+
+#: ../bin/cselect.c:2349 ../bin/cselect.c:2388
+msgid "Select and drag a description"
+msgstr "Sélectionnez et faites glisser une description"
+
+#: ../bin/cselect.c:2374
+msgid "Elevation description"
+msgstr "Description de l'élévation"
+
+#: ../bin/cselect.c:2377
+msgid "Hidden description - 's' to Show"
+msgstr "Description cachée - 's' à afficher"
+
+#: ../bin/cselect.c:2381
+msgid "Shown description - 'h' to Hide"
+msgstr "Description visible - Cacher avec 'h'"
+
+#: ../bin/cselect.c:2402
+msgid "Hidden Label - Drag to reveal"
+msgstr "Étiquette cachée - Faites glisser pour afficher"
+
+#: ../bin/cselect.c:2404
+msgid "Drag label"
+msgstr "Faites glisser l'étiquette pour la positionner"
+
+#: ../bin/cselect.c:2406
+msgid "Move Label"
+msgstr "Déplacer l'étiquette"
+
+#: ../bin/cselect.c:2443
+msgid "To Hide, use Context Menu"
+msgstr "Pour masquer, utilisez le menu contextuel"
+
+#: ../bin/cselect.c:2459 ../bin/cselect.c:3339
+msgid "Show/Hide Description"
+msgstr "Montrer/cacher la description"
+
+#: ../bin/cselect.c:2538
+msgid "Drag to mark mirror line"
+msgstr "Faites glisser pour créer la voie d'axe du miroir"
+
+#: ../bin/cselect.c:2549
+#, c-format
+msgid "Angle %0.2f"
+msgstr "Angle %0.2f"
+
+#: ../bin/cselect.c:2552
+msgid "Flip Tracks"
+msgstr "Voies en miroir"
+
+#: ../bin/cselect.c:2899
+msgid "Select track"
+msgstr "Sélectionner une voie"
+
+#: ../bin/cselect.c:2927
+msgid "Track is in Frozen Layer"
+msgstr "La voie est sur une couche bloquée"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:323
+#: ../bin/cselect.c:3279 ../bin/dcar.c:1673 ../bin/doption.c:235
+#: ../../../../build/work/app/i18n/custmsg.h:1169
+msgid "Select"
+msgstr "Sélectionner"
+
+#: ../bin/cselect.c:3298 ../bin/cselect.c:3318 ../bin/misc.c:2192
+msgid "Undo"
+msgstr "Annuler"
+
+#: ../bin/cselect.c:3299 ../bin/cselect.c:3319 ../bin/misc.c:2194
+msgid "Redo"
+msgstr "Refaire"
+
+#: ../bin/cselect.c:3306 ../bin/draw.c:3112
+msgid "Zoom to extents - 'e'"
+msgstr "Zoom sur les extensions - 'e'"
+
+#: ../bin/cselect.c:3307 ../bin/draw.c:3123 ../bin/misc.c:2375
+msgid "&Zoom"
+msgstr "&Zoom"
+
+#: ../bin/cselect.c:3310 ../bin/draw.c:3122
+#, fuzzy
+msgid "Pan to Origin - 'o'/'0'"
+msgstr "Pan à l'origine - 'o'"
+
+#: ../bin/cselect.c:3311 ../bin/cselect.c:3323
+msgid "Pan Center Here - 'c'"
+msgstr "Centre du Panoramique ici - 'c'"
+
+#: ../bin/cselect.c:3314 ../bin/misc.c:2231 ../bin/misc.c:2354
+msgid "Select Current Layer"
+msgstr "Sélectionner le calque actuel"
+
+#: ../bin/cselect.c:3325 ../bin/misc.c:2233
+msgid "Deselect All"
+msgstr "Tout désélectionner"
+
+#: ../bin/cselect.c:3327
+msgid "Properties -'?'"
+msgstr "Propriétés -'?'"
+
+#: ../bin/cselect.c:3328
+msgid "Modify/Activate Track"
+msgstr "Modifier/Activer la voie"
+
+#: ../bin/cselect.c:3330 ../bin/misc.c:2219
+msgid "Cut"
+msgstr "Couper"
+
+#: ../bin/cselect.c:3331 ../bin/misc.c:2221
+msgid "Copy"
+msgstr "Copier"
+
+#: ../bin/cselect.c:3332 ../bin/fileio.c:1620 ../bin/misc.c:2223
+msgid "Paste"
+msgstr "Coller"
+
+#: ../bin/cselect.c:3333 ../bin/misc.c:2225
+#, fuzzy
+msgid "Clone"
+msgstr "Fermer"
+
+#: ../bin/cselect.c:3335
+msgid "Rotate..."
+msgstr "Rotation ..."
+
+#: ../bin/cselect.c:3337
+msgid "Align"
+msgstr "Aligner"
+
+#: ../bin/cselect.c:3341
+msgid "Hide/NoHide"
+msgstr "Masqué/Affiché"
+
+#: ../bin/cselect.c:3342
+msgid "Bridge/NoBridge"
+msgstr "Raccordé/Non raccordé"
+
+#: ../bin/cselect.c:3343
+msgid "NoTies/Ties"
+msgstr "Non connectés/connectés"
+
+#: ../bin/cselect.c:3344
+msgid "Thickness..."
+msgstr "Épaisseur..."
+
+#: ../bin/cselect.c:3345 ../bin/misc.c:2366
+msgid "Thin Tracks"
+msgstr "Voies fines"
+
+#: ../bin/cselect.c:3346 ../bin/misc.c:2367
+msgid "Medium Tracks"
+msgstr "Voies moyennes"
+
+#: ../bin/cselect.c:3347 ../bin/misc.c:2368
+msgid "Thick Tracks"
+msgstr "Voies épaisses"
+
+#: ../bin/cselect.c:3352
+msgid "Dash-Dotted Line"
+msgstr "Ligne tiret-pointillé"
+
+#: ../bin/cselect.c:3353
+msgid "Dash-Dot-Dotted Line"
+msgstr "Ligne en pointillé"
+
+#: ../bin/cselect.c:3355
+msgid "Move To Front"
+msgstr "Déplacer vers l'avant"
+
+#: ../bin/cselect.c:3356
+msgid "Move To Back"
+msgstr "Déplacer vers l'arrière"
+
+#: ../bin/cselect.c:3358
+msgid "Group"
+msgstr "Grouper"
+
+#: ../bin/cselect.c:3359
+msgid "UnGroup"
+msgstr "Dissocier"
+
+#: ../bin/cselect.c:3394
+msgid "Move Description"
+msgstr "Déplacer l'étiquette"
+
+#: ../bin/cselect.c:3401 ../bin/misc.c:1935 ../bin/misc.c:2236
+msgid "Move"
+msgstr "Déplacer"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:368
+#: ../bin/cselect.c:3403 ../bin/misc.c:1926 ../bin/misc.c:2238
+#: ../../../../build/work/app/i18n/custmsg.h:1259
+msgid "Rotate"
+msgstr "Rotation"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:369
+#: ../bin/cselect.c:3405 ../bin/dcar.c:2217
+#: ../../../../build/work/app/i18n/custmsg.h:1261
+msgid "Flip"
+msgstr "Miroir"
+
+#: ../bin/csensor.c:216
+msgid "Change Sensor"
+msgstr "Changer de capteur"
+
+#: ../bin/csensor.c:262 ../bin/csensor.c:596
+msgid "Sensor"
+msgstr "Capteur"
+
+#: ../bin/csensor.c:391 ../bin/csignal.c:511
+msgid "Orgin X"
+msgstr "Origine X"
+
+#: ../bin/csensor.c:407
+msgid "Create Sensor"
+msgstr "Créer un capteur"
+
+#: ../bin/csensor.c:410
+msgid "Modify Sensor"
+msgstr "Modifier le capteur"
+
+#: ../bin/csensor.c:443
+msgid "Edit sensor"
+msgstr "Editer un capteur"
+
+#: ../bin/csensor.c:481
+msgid "Place sensor"
+msgstr "Mettre un capteur"
+
+#: ../bin/csignal.c:241
+msgid "Number Of Heads"
+msgstr "Nombre De têtes"
+
+#: ../bin/csignal.c:280
+msgid "Change Signal"
+msgstr "Changer le signal"
+
+#: ../bin/csignal.c:314
+#, fuzzy, c-format
+msgid "(%d [%s]): Layer=%u, %d heads at %0.3f,%0.3f A%0.3f"
+msgstr "(%d [%s]): Calque=%d, %d entêtes à %0.3f,%0.3f A%0.3f"
+
+#: ../bin/csignal.c:325 ../bin/csignal.c:914
+msgid "Signal"
+msgstr "Signal"
+
+#: ../bin/csignal.c:517
+msgid "Number of Heads"
+msgstr "Nombre de têtes"
+
+#: ../bin/csignal.c:522
+msgid "Edit Aspect"
+msgstr "Modifier un état"
+
+#: ../bin/csignal.c:524
+msgid "Add Aspect"
+msgstr "Ajouter un état"
+
+#: ../bin/csignal.c:526
+msgid "Delete Aspect"
+msgstr "Effacer un état"
+
+#: ../bin/csignal.c:539
+msgid "Aspect Index"
+msgstr "Numéro d'affichage du signal"
+
+#: ../bin/csignal.c:554
+msgid "Create Signal"
+msgstr "Créer un signal"
+
+#: ../bin/csignal.c:558
+msgid "Modify Signal"
+msgstr "Modifier le signal"
+
+#: ../bin/csignal.c:665
+msgid "Edit aspect"
+msgstr "Modifier l'état"
+
+#: ../bin/csignal.c:712
+#, c-format
+msgid "Are you sure you want to delete the %d aspect(s)"
+msgstr "Êtes-vous sûr de vouloir supprimer %d état(s)"
+
+#: ../bin/csignal.c:733
+msgid "Edit signal"
+msgstr "Editer un signal"
+
+#: ../bin/csignal.c:795
+msgid "Place base of signal"
+msgstr "Réglez la base du signal"
+
+#: ../bin/csignal.c:802
+msgid "Drag to orient signal"
+msgstr "Faites glisser pour orienter le signal"
+
+#: ../bin/csnap.c:516
+msgid "Horz"
+msgstr "Horz"
+
+#: ../bin/csnap.c:518
+msgid "Spacing"
+msgstr "Espacement"
+
+#: ../bin/csnap.c:520
+msgid "Divisions"
+msgstr "Divisions"
+
+#: ../bin/csnap.c:523
+msgid "Enable"
+msgstr "Activer"
+
+#: ../bin/csnap.c:524
+msgid "Vert"
+msgstr "Vertical"
+
+#: ../bin/csnap.c:533 ../bin/dease.c:76
+msgid "X"
+msgstr "X"
+
+#: ../bin/csnap.c:537
+msgid "A"
+msgstr "A"
+
+#: ../bin/csnap.c:540
+msgid "Show"
+msgstr "Afficher"
+
+#: ../bin/csnap.c:790
+msgid "Change Grid..."
+msgstr "Modifier la grille ..."
+
+#: ../bin/csplit.c:44
+msgid "Set Block Gaps"
+msgstr "Définir des points de séparation"
+
+#: ../bin/csplit.c:105
+msgid "Select track to split"
+msgstr "Sélectionnez la voie à scinder"
+
+#: ../bin/csplit.c:125
+msgid "Can't Split that Track"
+msgstr "Impossible de scinder cette voie"
+
+#: ../bin/csplit.c:133 ../bin/csplit.c:221
+msgid "Split Track"
+msgstr "Segmentation de Voie"
+
+#: ../bin/csplit.c:149 ../bin/dbench.c:69 ../bin/dbench.c:80
+msgid "Left"
+msgstr "Gauche"
+
+#: ../bin/csplit.c:150 ../bin/dbench.c:70 ../bin/dbench.c:79
+msgid "Right"
+msgstr "Droit"
+
+#: ../bin/csplit.c:151 ../bin/csplit.c:156
+msgid "Both"
+msgstr "Les deux"
+
+#: ../bin/csplit.c:154
+msgid "Top"
+msgstr "Haut"
+
+#: ../bin/csplit.c:155
+msgid "Bottom"
+msgstr "Bas"
+
+#: ../bin/cstraigh.c:77
+msgid "Place 1st endpoint of straight track, snap to unconnected endpoint"
+msgstr ""
+"Placer le 1er point de fin de la voie droite +Maj -> accrocher au point de "
+"fin non connecté"
+
+#: ../bin/cstraigh.c:104
+msgid "Drag to place 2nd end point"
+msgstr "Faites glisser pour placer la 2ème extrémité"
+
+#: ../bin/cstraigh.c:140
+#, c-format
+msgid "Straight Track Length=%s Angle=%0.3f"
+msgstr "Longueur de voie droite = %s Angle = %0.3f"
+
+#: ../bin/cstraigh.c:191 ../bin/tstraigh.c:267
+msgid "Straight Track"
+msgstr "Voie droite"
+
+#: ../bin/cstruct.c:71 ../bin/cturnout.c:84 ../bin/doption.c:131
+#: ../bin/doption.c:240
+msgid "Hide"
+msgstr "Cacher"
+
+#: ../bin/cstruct.c:449 ../bin/cstruct.c:476
+msgid "Pier Number"
+msgstr "Travaux de voie d'évitement"
+
+#: ../bin/cstruct.c:561
+#, c-format
+msgid "Scale %d:1"
+msgstr "Echelle %d :1"
+
+#: ../bin/cstruct.c:563
+#, c-format
+msgid "Width %s"
+msgstr "Largeur %s"
+
+#: ../bin/cstruct.c:565
+#, c-format
+msgid "Height %s"
+msgstr "Hauteur %s"
+
+#: ../bin/cstruct.c:706
+msgid "Place Structure"
+msgstr "Mettre un bâtiment"
+
+#: ../bin/cstruct.c:798 ../bin/cstruct.c:872 ../bin/cstruct.c:1103
+#: ../bin/cturnout.c:2753 ../bin/cturnout.c:2808 ../bin/cturnout.c:2933
+#: ../bin/cturnout.c:3072
+msgid ""
+"Left-Drag to place, Ctrl+Left-Drag or Right-Drag to Rotate, Space or Enter "
+"to accept, Esc to Cancel"
+msgstr ""
+"Faites glisser vers la gauche pour déplacer, Ctrl +glisser à gauche ou "
+"glisser à droite pour faire pivoter, espace ou entrée pour valider, ESC pour "
+"annuler"
+
+#: ../bin/cstruct.c:820
+msgid "Drag to place"
+msgstr "Faites glisser pour positionner"
+
+#: ../bin/cstruct.c:842
+msgid "Drag to rotate"
+msgstr "Faites glisser pour faire pivoter"
+
+#: ../bin/cstruct.c:862
+#, c-format
+msgid "Angle = %0.3f"
+msgstr "Angle = %0.3f"
+
+#: ../bin/cstruct.c:952
+msgid "Select Structure and then drag to place"
+msgstr "Sélectionnez le bâtiment et déplacez-vous vers la position"
+
+#: ../bin/cstruct.c:990
+msgid ""
+"Left drag to move, right drag to rotate, or press Return or click Ok to "
+"finalize"
+msgstr ""
+"Faites glisser avec le bouton gauche de la souris pour vous déplacer, vers "
+"la droite pour faire pivoter ou sur Entrée ou sur OK pour terminer"
+
+#: ../bin/cstruct.c:1073 ../bin/cturnout.c:3039
+#, c-format
+msgid "Place %s and draw into position"
+msgstr "Placer %s et mettre en position"
+
+#: ../bin/cswitchmotor.c:96 ../bin/cswitchmotor.c:115
+#: ../bin/cswitchmotor.c:227
+msgid "Point Sense"
+msgstr "Sens des aiguilles"
+
+#: ../bin/cswitchmotor.c:116
+msgid "Turnout Number"
+msgstr "Numéro d'angle d'aiguillage"
+
+#: ../bin/cswitchmotor.c:292
+msgid "Change Switch Motor"
+msgstr "Changer de moteur d'aiguillage"
+
+#: ../bin/cswitchmotor.c:359
+msgid "Switch motor"
+msgstr "Moteur d'aiguillage"
+
+#: ../bin/cswitchmotor.c:475
+#, c-format
+msgid "ResolveSwitchmotor: Turnout T%d: T%d doesn't exist"
+msgstr "Revoir le moteur d'aiguillage : l'aiguillage T%d : T%d n'existe pas"
+
+#: ../bin/cswitchmotor.c:544 ../bin/cswitchmotor.c:714
+msgid "Switch motor must have a name!"
+msgstr "Le moteur d'aiguillage doit avoir un nom !"
+
+#: ../bin/cswitchmotor.c:548
+msgid "Create Switch Motor"
+msgstr "Créer un moteur d'aiguillage"
+
+#: ../bin/cswitchmotor.c:580
+msgid "Create switch motor"
+msgstr "Créer un moteur d'aiguillage"
+
+#: ../bin/cswitchmotor.c:594 ../bin/cswitchmotor.c:625
+#: ../bin/cswitchmotor.c:657
+msgid "Select a turnout"
+msgstr "Sélectionner un aiguillage"
+
+#: ../bin/cswitchmotor.c:601
+msgid "Not a turnout!"
+msgstr "Pas d'aiguillage !"
+
+#: ../bin/cswitchmotor.c:634 ../bin/cswitchmotor.c:665
+msgid "Not a switch motor!"
+msgstr "Pas de moteur d'aiguillage !"
+
+#: ../bin/cswitchmotor.c:670
+#, c-format
+msgid "Really delete switch motor %s?"
+msgstr "Voulez-vous vraiment supprimer le moteur d'aiguillage %s ?"
+
+#: ../bin/cswitchmotor.c:671
+msgid "Delete Switch Motor"
+msgstr "Supprimer le Moteur d'aiguillage"
+
+#: ../bin/cswitchmotor.c:718
+msgid "Modify Switch Motor"
+msgstr "Modifier le moteur d'aiguillage"
+
+#: ../bin/cswitchmotor.c:744
+msgid "Edit switch motor"
+msgstr "Editer le moteur d'aiguillage"
+
+#: ../bin/cswitchmotor.c:750
+#, c-format
+msgid "Edit switch motor %d"
+msgstr "Editer le moteur d'aiguillage %d"
+
+#: ../bin/cswitchmotor.c:858
+msgid "Switch Motor"
+msgstr "Moteur d'aiguillage"
+
+#: ../bin/cswitchmotor.c:871
+#, c-format
+msgid "Deleting Switch Motor %s"
+msgstr "Suppression du moteur d'aiguillage %s"
+
+#: ../bin/ctext.c:195 ../bin/ctext.c:234
+msgid "Create Text"
+msgstr "Créer un texte"
+
+#: ../bin/ctext.c:264
+msgid "Fonts..."
+msgstr "Polices ..."
+
+#: ../bin/ctodesgn.c:139
+msgid "Frog #"
+msgstr "N° #"
+
+#: ../bin/ctodesgn.c:139
+msgid "Degrees"
+msgstr "Degrés"
+
+#: ../bin/ctodesgn.c:140
+msgid "Dual Path"
+msgstr "Double voie"
+
+#: ../bin/ctodesgn.c:140
+msgid "Quad Path"
+msgstr "Quadruple voie"
+
+#: ../bin/ctodesgn.c:175 ../bin/ctodesgn.c:176 ../bin/ctodesgn.c:177
+#: ../bin/ctodesgn.c:178 ../bin/ctodesgn.c:238 ../bin/ctodesgn.c:261
+#: ../bin/ctodesgn.c:263 ../bin/ctodesgn.c:298 ../bin/ctodesgn.c:301
+#: ../bin/ctodesgn.c:327 ../bin/ctodesgn.c:328 ../bin/ctodesgn.c:364
+#: ../bin/ctodesgn.c:367 ../bin/ctodesgn.c:393 ../bin/ctodesgn.c:395
+#: ../bin/ctodesgn.c:434 ../bin/ctodesgn.c:438 ../bin/ctodesgn.c:441
+#: ../bin/ctodesgn.c:653
+msgid "Offset"
+msgstr "Écart"
+
+#: ../bin/ctodesgn.c:196 ../bin/ctodesgn.c:2911 ../bin/ctodesgn.c:2912
+msgid "Left Description"
+msgstr "Description gauche"
+
+#: ../bin/ctodesgn.c:197 ../bin/ctodesgn.c:200
+msgid " #"
+msgstr " #"
+
+#: ../bin/ctodesgn.c:199 ../bin/ctodesgn.c:2910
+msgid "Right Description"
+msgstr "Description droite"
+
+#: ../bin/ctodesgn.c:201
+msgid "Roadbed Width"
+msgstr "Largeur de balast"
+
+#: ../bin/ctodesgn.c:205 ../bin/denum.c:56
+msgid "Print Setup"
+msgstr "Réglages Imp"
+
+#: ../bin/ctodesgn.c:236
+msgid "Diverging Length"
+msgstr "Longueur voie déviée"
+
+#: ../bin/ctodesgn.c:237
+msgid "Diverging Angle"
+msgstr "Angle voie déviée"
+
+#: ../bin/ctodesgn.c:238
+msgid "Diverging Offset"
+msgstr "Décalage voie déviée"
+
+#: ../bin/ctodesgn.c:239
+msgid "Overall Length"
+msgstr "Longueur totale"
+
+#: ../bin/ctodesgn.c:249
+msgid "Regular Turnout"
+msgstr "Aiguillage droit"
+
+#: ../bin/ctodesgn.c:259 ../bin/ctodesgn.c:296
+msgid "Inner Length"
+msgstr "Longueur intérieure"
+
+#: ../bin/ctodesgn.c:260 ../bin/ctodesgn.c:297
+msgid "Inner Angle"
+msgstr "Angle Intérieur"
+
+#: ../bin/ctodesgn.c:261 ../bin/ctodesgn.c:298
+msgid "Inner Offset"
+msgstr "Décalage interne"
+
+#: ../bin/ctodesgn.c:262 ../bin/ctodesgn.c:300
+msgid "Outer Angle"
+msgstr "Angle extérieur"
+
+#: ../bin/ctodesgn.c:263 ../bin/ctodesgn.c:301
+msgid "Outer Offset"
+msgstr "Décalage extérieur"
+
+#: ../bin/ctodesgn.c:264 ../bin/ctodesgn.c:303
+msgid "Outer Length"
+msgstr "Longueur extérieure"
+
+#: ../bin/ctodesgn.c:286
+msgid "Curved Turnout"
+msgstr "Aiguillage courbe"
+
+#: ../bin/ctodesgn.c:299
+msgid "Inner Radius"
+msgstr "Rayon intérieur"
+
+#: ../bin/ctodesgn.c:302
+msgid "Outer Radius"
+msgstr "Rayon extérieur"
+
+#: ../bin/ctodesgn.c:304 ../bin/ctodesgn.c:371 ../bin/ctodesgn.c:446
+msgid "Toe Radius"
+msgstr "Rayon initial"
+
+#: ../bin/ctodesgn.c:305 ../bin/ctodesgn.c:370
+msgid "Toe Length"
+msgstr "Longueur initiale"
+
+#: ../bin/ctodesgn.c:315
+msgid "Cornu Curved Turnout"
+msgstr "Aiguillage courbe Cornu"
+
+#: ../bin/ctodesgn.c:325 ../bin/ctodesgn.c:362 ../bin/ctodesgn.c:391
+#: ../bin/ctodesgn.c:432
+msgid "Left Length"
+msgstr "Longueur à gauche"
+
+#: ../bin/ctodesgn.c:326 ../bin/ctodesgn.c:363 ../bin/ctodesgn.c:392
+#: ../bin/ctodesgn.c:433
+msgid "Left Angle"
+msgstr "Angle gauche"
+
+#: ../bin/ctodesgn.c:327 ../bin/ctodesgn.c:364 ../bin/ctodesgn.c:393
+#: ../bin/ctodesgn.c:434
+msgid "Left Offset"
+msgstr "Décalage gauche"
+
+#: ../bin/ctodesgn.c:328 ../bin/ctodesgn.c:367 ../bin/ctodesgn.c:395
+#: ../bin/ctodesgn.c:441
+msgid "Right Offset"
+msgstr "Bon offset"
+
+#: ../bin/ctodesgn.c:329 ../bin/ctodesgn.c:368 ../bin/ctodesgn.c:396
+#: ../bin/ctodesgn.c:442
+msgid "Right Angle"
+msgstr "Angle droit"
+
+#: ../bin/ctodesgn.c:330 ../bin/ctodesgn.c:369 ../bin/ctodesgn.c:397
+#: ../bin/ctodesgn.c:443
+msgid "Right Length"
+msgstr "Bonne longueur"
+
+#: ../bin/ctodesgn.c:352
+msgid "Wye Turnout"
+msgstr "Aiguillage symétrique"
+
+#: ../bin/ctodesgn.c:365 ../bin/ctodesgn.c:435
+msgid "Left Radius"
+msgstr "Rayon gauche"
+
+#: ../bin/ctodesgn.c:366 ../bin/ctodesgn.c:440
+msgid "Right Radius"
+msgstr "Rayon droit"
+
+#: ../bin/ctodesgn.c:381
+msgid "Cornu Wye Turnout"
+msgstr "Aiguillage symétrique Cornu"
+
+#: ../bin/ctodesgn.c:422
+msgid "3-way Turnout"
+msgstr "Aiguillage 3-voies"
+
+#: ../bin/ctodesgn.c:436
+msgid "Center Length"
+msgstr "Longueur intérieure"
+
+#: ../bin/ctodesgn.c:437
+msgid "Center Angle"
+msgstr "Angle Intérieur"
+
+#: ../bin/ctodesgn.c:438 ../bin/dcar.c:2238
+msgid "Center Offset"
+msgstr "Décalage interne"
+
+#: ../bin/ctodesgn.c:439
+msgid "Center Radius"
+msgstr "Rayon du cercle"
+
+#: ../bin/ctodesgn.c:444
+msgid "Toe Length Left"
+msgstr "Longueur initiale gauche"
+
+#: ../bin/ctodesgn.c:445
+msgid "Toe Length Right"
+msgstr "Longueur initiale droite"
+
+#: ../bin/ctodesgn.c:457
+msgid "Cornu 3-way Turnout"
+msgstr "Aiguillage 3-voies Cornu"
+
+#: ../bin/ctodesgn.c:477
+msgid "Crossing"
+msgstr "Croisement"
+
+#: ../bin/ctodesgn.c:498
+msgid "Single Slipswitch"
+msgstr "Traversée jonction simple"
+
+#: ../bin/ctodesgn.c:527
+msgid "Double Slipswitch"
+msgstr "Traversée jonction double"
+
+#: ../bin/ctodesgn.c:547
+msgid "Right Crossover"
+msgstr "Traversée droite"
+
+#: ../bin/ctodesgn.c:567
+msgid "Left Crossover"
+msgstr "Traversée gauche"
+
+#: ../bin/ctodesgn.c:587
+msgid "Double Crossover"
+msgstr "Traversée double"
+
+#: ../bin/ctodesgn.c:605
+msgid "Straight Section"
+msgstr "Section droite"
+
+#: ../bin/ctodesgn.c:616
+msgid "Angle (Degrees)"
+msgstr "Angle (Degrés)"
+
+#: ../bin/ctodesgn.c:624
+msgid "Curved Section"
+msgstr "Section courbe"
+
+#: ../bin/ctodesgn.c:643
+msgid "Bumper Section"
+msgstr "Section Butoir"
+
+#: ../bin/ctodesgn.c:653 ../bin/denum.c:123 ../bin/denum.c:186
+#: ../bin/denum.c:218 ../bin/denum.c:219 ../bin/dlayer.c:497
+msgid "Count"
+msgstr "Qté"
+
+#: ../bin/ctodesgn.c:654
+msgid "Radius1"
+msgstr "Rayon1"
+
+#: ../bin/ctodesgn.c:655
+msgid "Radius2"
+msgstr "Rayon2"
+
+#: ../bin/ctodesgn.c:735
+msgid "Turntable Section"
+msgstr "Section de pont tournant"
+
+#: ../bin/ctodesgn.c:2538
+#, c-format
+msgid "%s Designer"
+msgstr "%s Designer"
+
+#: ../bin/ctodesgn.c:2542
+#, c-format
+msgid "%s %d x %d (of %d x %d)"
+msgstr "%s %d x %d (de %d x %d)"
+
+#: ../bin/ctodesgn.c:2542
+msgid "Page"
+msgstr "Page"
+
+#: ../bin/ctodesgn.c:2550
+msgid "Frog Number"
+msgstr "N° de coeur"
+
+#: ../bin/ctodesgn.c:2864
+msgid "Turnout Designer"
+msgstr "Conception d'aiguillage"
+
+#: ../bin/ctodesgn.c:2874
+#, c-format
+msgid "%s %s Designer"
+msgstr "%s concepteur de %s"
+
+#: ../bin/ctrain.c:182 ../bin/dcar.c:2250 ../bin/dcar.c:4367
+#: ../bin/dcar.c:4372
+msgid "Index"
+msgstr "Index"
+
+#: ../bin/ctrain.c:188 ../bin/dcar.c:4368
+msgid "Rep Marks"
+msgstr "Numéros de voiture"
+
+#: ../bin/ctrain.c:272
+msgid "Car"
+msgstr "Véhicule"
+
+#: ../bin/ctrain.c:656
+msgid "Follow"
+msgstr "Suivre"
+
+#: ../bin/ctrain.c:657
+msgid "Auto Reverse"
+msgstr "Inversion automatique"
+
+#: ../bin/ctrain.c:676 ../bin/dcar.c:5257
+msgid "Find"
+msgstr "Chercher"
+
+#: ../bin/ctrain.c:682 ../bin/ctrain.c:941 ../bin/ctrain.c:1248
+#: ../wlib/gtklib/ixhelp.c:239
+msgid "Forward"
+msgstr "Avant"
+
+#: ../bin/ctrain.c:684 ../bin/ctrain.c:3123 ../bin/dcar.c:4706
+#: ../bin/dcar.c:4716 ../bin/dcar.c:4836 ../bin/fileio.c:241 ../bin/macro.c:92
+#: ../bin/macro.c:898
+msgid "Stop"
+msgstr "Stop"
+
+#: ../bin/ctrain.c:882 ../bin/ctrain.c:911
+msgid "Crashed"
+msgstr "Dérailler"
+
+#: ../bin/ctrain.c:884
+msgid "Not on Track"
+msgstr "Pas sur la voie"
+
+#: ../bin/ctrain.c:888
+msgid "Trains Paused"
+msgstr "Trains en pause"
+
+#: ../bin/ctrain.c:890
+msgid "Running"
+msgstr "Marche"
+
+#: ../bin/ctrain.c:895
+msgid "End of Track"
+msgstr "Fin de voie"
+
+#: ../bin/ctrain.c:899
+msgid "Open Turnout"
+msgstr "Aiguillage ouvert"
+
+#: ../bin/ctrain.c:903
+msgid "Manual Stop"
+msgstr "Arrêt manuel"
+
+#: ../bin/ctrain.c:907
+msgid "No Room"
+msgstr "Pas d'espace de travail"
+
+#: ../bin/ctrain.c:915
+msgid "Unknown Status"
+msgstr "Statut inconnu"
+
+#: ../bin/ctrain.c:925
+msgid "No trains"
+msgstr "Pas de trains"
+
+#: ../bin/ctrain.c:1299
+msgid "Train Control XXX"
+msgstr "Contrôle du train XXX"
+
+#: ../bin/ctrain.c:1300
+#, c-format
+msgid "Train Control %d"
+msgstr "Contrôle du train %d"
+
+#: ../bin/ctrain.c:1302
+msgid "Train Control"
+msgstr "Panneau de commande"
+
+#: ../bin/ctrain.c:3096
+msgid "Train"
+msgstr "Train"
+
+#: ../bin/ctrain.c:3109
+msgid "Uncouple"
+msgstr "Découpler"
+
+#: ../bin/ctrain.c:3111
+msgid "Flip Car"
+msgstr "Inverser un véhicule"
+
+#: ../bin/ctrain.c:3113
+#, fuzzy
+msgid "Clearance Lines On"
+msgstr "Créer des lignes"
+
+#: ../bin/ctrain.c:3115
+#, fuzzy
+msgid "Clearance Lines Off"
+msgstr "Créer des lignes"
+
+#: ../bin/ctrain.c:3117
+msgid "Flip Train"
+msgstr "Inverser le train"
+
+#: ../bin/ctrain.c:3119
+msgid "MU Master"
+msgstr "MU Master"
+
+#: ../bin/ctrain.c:3122
+msgid "Change Direction"
+msgstr "Changer de direction"
+
+#: ../bin/ctrain.c:3126
+msgid "Remove Car"
+msgstr "Supprimer un véhicule"
+
+#: ../bin/ctrain.c:3129
+msgid "Remove Train"
+msgstr "Supprimer le train"
+
+#: ../bin/cturnout.c:95 ../bin/dcar.c:2272 ../bin/dcar.c:2276
+msgid "New"
+msgstr "Nouveau"
+
+#: ../bin/cturnout.c:368
+#, c-format
+msgid "Turnout path[%d:%d] out of bounds: %d"
+msgstr "Aiguillage [%d:%d] hors limites : %d"
+
+#: ../bin/cturnout.c:379 ../bin/cturnout.c:389
+#, c-format
+msgid "Turnout path[%d] %d is not a valid track segment"
+msgstr "L'accès à l'aiguillage [%d] %d n'est pas un segment de voie valide"
+
+#: ../bin/cturnout.c:399 ../bin/cturnout.c:404
+#, c-format
+msgid "Turnout path[%d] %d is not a track segment"
+msgstr "L'aiguillage [%d] %d n'est pas un segment de voie"
+
+#: ../bin/cturnout.c:412
+#, c-format
+msgid "Turnout path[%d] %d-%d not connected: %0.3f P0(%f,%f) P1(%f,%f)"
+msgstr ""
+"Accès à l'aiguillage [%d] %d-%d non connecté : %0.3f P0(%f,%f) P1(%f,%f)"
+
+#: ../bin/cturnout.c:450
+msgid "Unknown special case"
+msgstr "Cas spécial inconnu"
+
+#: ../bin/cturnout.c:560
+msgid "Connect Adjustable Tracks"
+msgstr "Connecter les voies ajustables"
+
+#: ../bin/cturnout.c:1096
+msgid "splitTurnout: can't find segment"
+msgstr "aiguillage fractionné : impossible de trouver le segment"
+
+#: ../bin/cturnout.c:1522 ../bin/track.c:2259 ../bin/track.c:2365
+#: ../bin/tstraigh.c:554
+msgid "Drag to change track length"
+msgstr "Faites glisser pour changer la longueur de la voie"
+
+#: ../bin/cturnout.c:1533
+#, c-format
+msgid "Length=%s"
+msgstr "Longueur = %s"
+
+#: ../bin/cturnout.c:2344
+#, c-format
+msgid "%d connections, max distance %0.3f (%s)"
+msgstr "%d connections, distance max %0.3f (%s)"
+
+#: ../bin/cturnout.c:2349
+#, c-format
+msgid "0 connections (%s)"
+msgstr "0 connections (%s)"
+
+#: ../bin/cturnout.c:2389
+msgid "Place New Turnout"
+msgstr "Mettre un nouvel aiguillage"
+
+#: ../bin/cturnout.c:2798
+#, c-format
+msgid "Angle = %0.3f (%s)"
+msgstr "Angle = %0.3f (%s)"
+
+#: ../bin/cturnout.c:2888 ../bin/param.c:2618
+msgid "Close"
+msgstr "Fermer"
+
+#: ../bin/cturnout.c:2905
+msgid "Pick turnout and active End Point, then place on the layout"
+msgstr ""
+"Choisissez l'aiguillage avec son point de fin actif, puis placez-le sur le "
+"plan"
+
+#: ../bin/cturnout.c:3099
+msgid "Predefined Track"
+msgstr "Voie sélectionnée"
+
+#: ../bin/cturntbl.c:52 ../bin/cturntbl.c:251 ../bin/cturntbl.c:857
+#: ../bin/cturntbl.c:871
+msgid "Diameter"
+msgstr "Diamètre"
+
+#: ../bin/cturntbl.c:252
+msgid "# EndPt"
+msgstr "# Bout"
+
+#: ../bin/cturntbl.c:286
+#, c-format
+msgid "Turntable(%d): Layer=%d Center=[%s %s] Diameter=%s #EP=%d"
+msgstr ""
+"Pont tournant(%d) : Couche=%d Centre=[%s %s] Diamètre=%s #Nb de points=%d"
+
+#: ../bin/cturntbl.c:301
+msgid "Turntable"
+msgstr "Pont tournant"
+
+#: ../bin/cturntbl.c:565
+msgid "Drag to create stall track"
+msgstr "Faites glisser pour créer une voie de dépassement"
+
+#: ../bin/cturntbl.c:618
+msgid "Connect Turntable Tracks"
+msgstr "Connecter les voies du pont tournant"
+
+#: ../bin/cturntbl.c:885
+msgid "Create Turntable"
+msgstr "Créer un pont tournant"
+
+#: ../bin/cturntbl.c:916
+msgid "Custom Turntable"
+msgstr "Pont tournant prototype"
+
+#: ../bin/cundo.c:166
+msgid "Undo Trace"
+msgstr "Annuler la trace"
+
+#: ../bin/cundo.c:536
+#, c-format
+msgid "Undo: %s"
+msgstr "Annuler : %s"
+
+#: ../bin/cundo.c:539 ../../../../build/work/app/bin/bllnhlp.c:158
+msgid "Undo last command"
+msgstr "Annuler la dernière commande"
+
+#: ../bin/cundo.c:544
+#, c-format
+msgid "Redo: %s"
+msgstr "Refaire : %s"
+
+#: ../bin/cundo.c:547 ../../../../build/work/app/bin/bllnhlp.c:124
+msgid "Redo last undo"
+msgstr "Refaire la dernière annulation"
+
+#: ../bin/custom.c:167
+#, c-format
+msgid "%s Turnout Designer"
+msgstr "%s Conception d'aiguillage"
+
+#: ../bin/custom.c:172
+#, c-format
+msgid "%s Version %s"
+msgstr "%s Version %s"
+
+#: ../bin/custom.c:177
+#, c-format
+msgid ""
+"All %s Files (*.xtc,*.xtce)|*.xtc;*.xtce|%s Trackplan (*.xtc)|*.xtc|%s "
+"Extended Trackplan (*.xtce)|*.xtce|All Files (*)|*"
+msgstr ""
+"Tous les fichiers %s (*.xtc,*.xtce)|*.xtc;*.xtce|%s Trackplan (*.xtc)|*.xtc|%"
+"s Trackplan étendu (*.xtce)|*.xtce|Tous les fichiers (*)|*"
+
+#: ../bin/custom.c:188
+#, c-format
+msgid ""
+"%s Trackplan (*.xtc)|*.xtc|%s Extended Trackplan (*.xtce)|*.xtce|All Files "
+"(*)|*"
+msgstr ""
+"%s Trackplan (*.xtc)|*.xtc|%s Trackplan étendu (*.xtce)|*.xtce|Tous les "
+"fichiers (*)|*"
+
+#: ../bin/custom.c:197
+#, c-format
+msgid "All Files (*)|*"
+msgstr "Tous les fichiers (*)|*"
+
+#: ../bin/custom.c:202
+#, c-format
+msgid "%s Import Files (*.xti)|*.xti"
+msgstr "%s Fichiers (*.xti) importés|*.xti"
+
+#: ../bin/custom.c:207
+msgid "Data Exchange Format Files (*.dxf)|*.dxf"
+msgstr "Fichiers de format d'échange de données (*.dxf)|*.dxf"
+
+#: ../bin/custom.c:211
+#, c-format
+msgid "%s Record Files (*.xtr)|*.xtr"
+msgstr "%s Fichiers d'enregistrement (*.xtr)|*.xtr"
+
+#: ../bin/custom.c:216
+#, c-format
+msgid "%s Note Files (*.not)|*.not"
+msgstr "Pas de fichiers %s (*.not)|*.not"
+
+#: ../bin/custom.c:221
+#, c-format
+msgid "%s Log Files (*.log)|*.log"
+msgstr "Fichiers Log %s (*.log)|*.log"
+
+#: ../bin/custom.c:226
+#, c-format
+msgid "%s PartsList Files (*.txt)|*.txt"
+msgstr "Fichiers de nomenclature %s (*.txt|*.txt"
+
+#: ../bin/dbench.c:43
+msgid " L-Girder"
+msgstr " L-Support"
+
+#: ../bin/dbench.c:43
+msgid " T-Girder"
+msgstr " T-Support"
+
+#: ../bin/dbench.c:66
+msgid "On Edge"
+msgstr "Sur le bord"
+
+#: ../bin/dbench.c:67
+msgid "Flat"
+msgstr "Plat"
+
+#: ../bin/dbench.c:71
+msgid "Left-Down"
+msgstr "En bas à gauche"
+
+#: ../bin/dbench.c:72
+msgid "Right-Down"
+msgstr "En bas à droite"
+
+#: ../bin/dbench.c:73
+msgid "Left-Up"
+msgstr "En haut à gauche"
+
+#: ../bin/dbench.c:74
+msgid "Right-Up"
+msgstr "En haut à droite"
+
+#: ../bin/dbench.c:75
+msgid "Left-Inverted"
+msgstr "Inversé à gauche"
+
+#: ../bin/dbench.c:76
+msgid "Right-Inverted"
+msgstr "Inversé à droite"
+
+#: ../bin/dbench.c:81
+msgid "Inverted"
+msgstr "Inversé"
+
+#: ../bin/dbench.c:147
+#, c-format
+msgid ""
+"Bad BenchType for %s:\n"
+"%s"
+msgstr ""
+"Mauvais type de support pour%s:\n"
+"%s"
+
+#: ../bin/dbitmap.c:102 ../bin/dbitmap.c:106
+msgid "Drawn with "
+msgstr "Dessiné avec "
+
+#: ../bin/dbitmap.c:116
+msgid "Drawing tracks to BitMap"
+msgstr "Afficher le plan de voies dans BitMap"
+
+#: ../bin/dbitmap.c:123
+msgid "Writing BitMap to file"
+msgstr "Enregistrer en Bitmap dans un fichier"
+
+#: ../bin/dbitmap.c:144
+msgid "Print Titles"
+msgstr "Impression des titres"
+
+#: ../bin/dbitmap.c:144
+msgid "Print Borders"
+msgstr "Imprimer les bordures"
+
+#: ../bin/dbitmap.c:145
+msgid "Print Centerline"
+msgstr "Imprimer la voie d'axe"
+
+#: ../bin/dbitmap.c:152
+msgid " dpi"
+msgstr " ppp"
+
+#: ../bin/dbitmap.c:154
+msgid "Bitmap : 99999 by 99999 pixels"
+msgstr "Bitmap : 99999 par 99999 pixels"
+
+#: ../bin/dbitmap.c:156
+msgid "Approximate file size: 999.9Mb"
+msgstr "Taille approchée du fichier : 999.9Mb"
+
+#: ../bin/dbitmap.c:186
+#, c-format
+msgid "Bitmap : %ld by %ld pixels"
+msgstr "Bitmap : %ld par %ld pixels"
+
+#: ../bin/dbitmap.c:190
+#, c-format
+msgid "Approximate file size : %0.0f"
+msgstr "Taille approchée du fichier : %0.0f"
+
+#: ../bin/dbitmap.c:192
+#, c-format
+msgid "Approximate file size : %0.1fKb"
+msgstr "Taille approchée du fichier : %0.1fKb"
+
+#: ../bin/dbitmap.c:194
+#, c-format
+msgid "Approximate file size : %0.1fMb"
+msgstr "Taille approchée du fichier : %0.1fMb"
+
+#: ../bin/dbitmap.c:213
+msgid "Save Bitmap"
+msgstr "Enregistrer le bitmap"
+
+#: ../bin/dbitmap.c:217
+msgid "Bitmap files (*.png)|*.png"
+msgstr "Fichiers Bitmap (*.png)|*.png"
+
+#: ../bin/dbitmap.c:238
+msgid "BitMap"
+msgstr "BitMap"
+
+#: ../bin/dcar.c:54
+msgid "Truck"
+msgstr "Bogies"
+
+#: ../bin/dcar.c:54
+msgid "Body"
+msgstr "Structure"
+
+#: ../bin/dcar.c:156 ../bin/dcar.c:2702 ../bin/dcar.c:2706
+msgid "Unknown"
+msgstr "Inconnu"
+
+#: ../bin/dcar.c:478
+msgid "Diesel Loco"
+msgstr "Loco Diesel"
+
+#: ../bin/dcar.c:479
+msgid "Steam Loco"
+msgstr "Loco vapeur"
+
+#: ../bin/dcar.c:480
+msgid "Elect Loco"
+msgstr "Loco Elect"
+
+#: ../bin/dcar.c:481
+msgid "Freight Car"
+msgstr "Wagon march"
+
+#: ../bin/dcar.c:482
+msgid "Psngr Car"
+msgstr "Voiture voy"
+
+#: ../bin/dcar.c:483
+msgid "M-O-W"
+msgstr "Chariot"
+
+#: ../bin/dcar.c:484
+msgid "Other"
+msgstr "Autres"
+
+#: ../bin/dcar.c:1183 ../bin/dcar.c:5078
+msgid "N/A"
+msgstr "Non applicable"
+
+#: ../bin/dcar.c:1184 ../bin/dcar.c:5083
+msgid "Mint"
+msgstr "Mint"
+
+#: ../bin/dcar.c:1185 ../bin/dcar.c:5082
+msgid "Excellent"
+msgstr "Excellent"
+
+#: ../bin/dcar.c:1186 ../bin/dcar.c:5081
+msgid "Good"
+msgstr "Bon"
+
+#: ../bin/dcar.c:1187 ../bin/dcar.c:5080
+msgid "Fair"
+msgstr "Juste"
+
+#: ../bin/dcar.c:1188 ../bin/dcar.c:5079
+msgid "Poor"
+msgstr "Mauvais"
+
+#: ../bin/dcar.c:1502 ../bin/dpricels.c:45
+#: ../../../../build/work/app/bin/bllnhlp.c:440
+msgid "Item"
+msgstr "Objet"
+
+#: ../bin/dcar.c:2174 ../wlib/gtklib/notice.c:96 ../wlib/mswlib/mswmisc.c:2097
+msgid "Information"
+msgstr "Information"
+
+#: ../bin/dcar.c:2174
+msgid "Customize"
+msgstr "Personnaliser"
+
+#: ../bin/dcar.c:2186
+msgid "Sequential"
+msgstr "Séquentiel"
+
+#: ../bin/dcar.c:2186
+msgid "Repeated"
+msgstr "Répété"
+
+#: ../bin/dcar.c:2197 ../bin/dcar.c:2199 ../bin/dcar.c:5408
+msgid "Prototype"
+msgstr "Prototype"
+
+#: ../bin/dcar.c:2205
+msgid "Part"
+msgstr "Référence"
+
+#: ../bin/dcar.c:2207 ../../../../build/work/app/bin/bllnhlp.c:372
+#: ../../../../build/work/app/bin/bllnhlp.c:568
+#: ../../../../build/work/app/bin/bllnhlp.c:569
+msgid "Part Number"
+msgstr "Référence N°"
+
+#: ../bin/dcar.c:2209
+msgid "Loco?"
+msgstr "Loco ?"
+
+#: ../bin/dcar.c:2213 ../bin/dcar.c:4405
+msgid "Import"
+msgstr "Importation"
+
+#: ../bin/dcar.c:2220
+msgid "Mode"
+msgstr "Mode"
+
+#: ../bin/dcar.c:2224
+msgid "Road"
+msgstr "Compagnie ferroviaire"
+
+#: ../bin/dcar.c:2226
+msgid "Reporting Mark"
+msgstr "Sigle"
+
+#: ../bin/dcar.c:2228
+msgid "Number"
+msgstr "Nombre"
+
+#: ../bin/dcar.c:2232
+msgid "Car Length"
+msgstr "Longueur hors tampons"
+
+#: ../bin/dcar.c:2236
+msgid "Truck Centers"
+msgstr "Centre des bogies"
+
+#: ../bin/dcar.c:2240
+msgid "Coupler Mount"
+msgstr "Support d'attelage"
+
+#: ../bin/dcar.c:2242
+msgid "Coupled Length"
+msgstr "Longueur de couplage"
+
+#: ../bin/dcar.c:2244 ../bin/dcar.c:4252
+msgid "Coupler Length"
+msgstr "Longueur de l'attelage"
+
+#: ../bin/dcar.c:2252
+msgid "Purchase Price"
+msgstr "Prix d'achat"
+
+#: ../bin/dcar.c:2254 ../../../../build/work/app/bin/bllnhlp.c:236
+msgid "Current Price"
+msgstr "Prix actuel"
+
+#: ../bin/dcar.c:2256 ../bin/dcar.c:4369 ../bin/dcar.c:4374
+msgid "Condition"
+msgstr "Condition"
+
+#: ../bin/dcar.c:2258
+msgid "Purchase Date"
+msgstr "Date d'achat"
+
+#: ../bin/dcar.c:2260 ../bin/dcar.c:4374
+msgid "Service Date"
+msgstr "Date de service"
+
+#: ../bin/dcar.c:2262
+msgid "Quantity"
+msgstr "Quantité"
+
+#: ../bin/dcar.c:2264
+msgid "Numbers"
+msgstr "Nombres"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:371
+#: ../bin/dcar.c:2266 ../bin/dcar.c:4370 ../bin/trknote.c:708
+#: ../../../../build/work/app/i18n/custmsg.h:1265
+msgid "Notes"
+msgstr "Remarques"
+
+#: ../bin/dcar.c:2273
+msgid "Car Part"
+msgstr "Partie de véhicule"
+
+#: ../bin/dcar.c:2274 ../../../../build/work/app/bin/bllnhlp.c:210
+#: ../../../../build/work/app/bin/bllnhlp.c:211
+msgid "Car Prototype"
+msgstr "Prototype de véhicule"
+
+#: ../bin/dcar.c:2636 ../bin/dcar.c:2953
+msgid "Undecorated"
+msgstr "Sans étiquette"
+
+#: ../bin/dcar.c:2694 ../bin/dcar.c:2698 ../bin/paramfilelist.c:376
+msgid "Custom"
+msgstr "Personnalisé"
+
+#: ../bin/dcar.c:2863
+msgid "Undecorated "
+msgstr "Sans étiquette "
+
+#: ../bin/dcar.c:3085
+#, c-format
+msgid "New %s Scale Car"
+msgstr "Nouveau véhicule à l'échelle %s"
+
+#: ../bin/dcar.c:3086 ../bin/dcar.c:3095 ../bin/dcar.c:3104 ../bin/dcar.c:4285
+#: ../bin/dcar.c:4401 ../bin/paramfilesearch_ui.c:74
+msgid "Add"
+msgstr "Ajouter"
+
+#: ../bin/dcar.c:3088
+#, c-format
+msgid "Update %s Scale Car"
+msgstr "Mettre à jour le véhicule à l'échelle %s"
+
+#: ../bin/dcar.c:3089 ../bin/dcar.c:3098 ../bin/dcar.c:3107
+#: ../bin/dcmpnd.c:173
+msgid "Update"
+msgstr "Mise à jour"
+
+#: ../bin/dcar.c:3094
+#, c-format
+msgid "New %s Scale Car Part"
+msgstr "Nouvelle fiche véhicule à l'échelle %s"
+
+#: ../bin/dcar.c:3097
+#, c-format
+msgid "Update %s Scale Car Part"
+msgstr "Mettre à jour %s la pièce de véhicule à l'échelle"
+
+#: ../bin/dcar.c:3103
+msgid "New Prototype"
+msgstr "Nouveau prototype"
+
+#: ../bin/dcar.c:3106
+msgid "Update Prototype"
+msgstr "Mettre à jour le prototype"
+
+#: ../bin/dcar.c:3778
+msgid "Enter a 8 digit numeric date"
+msgstr "Entrez une date numérique à 8 chiffres"
+
+#: ../bin/dcar.c:3781
+msgid "Enter a 8 digit date"
+msgstr "Entrez une date à 8 chiffres"
+
+#: ../bin/dcar.c:3783
+msgid "Enter a date between 19000101 and 21991231"
+msgstr "Entrez une date comprise entre 19000101 et 21991231"
+
+#: ../bin/dcar.c:3788
+msgid "Invalid month"
+msgstr "Mois invalide"
+
+#: ../bin/dcar.c:3790
+msgid "Invalid day"
+msgstr "Jour invalide"
+
+#: ../bin/dcar.c:3882
+msgid "Enter a Prototype name"
+msgstr "Entrez le nom du prototype"
+
+#: ../bin/dcar.c:3884
+msgid "Select or Enter a Manufacturer"
+msgstr "Sélectionnez ou entrez un fabricant"
+
+#: ../bin/dcar.c:3886
+msgid "Enter a Part Number"
+msgstr "Entrez un numéro d'article"
+
+#: ../bin/dcar.c:3888
+msgid "Enter the Car Length"
+msgstr "Entrez la longueur du véhicule"
+
+#: ../bin/dcar.c:3890
+msgid "Enter the Car Width"
+msgstr "Entrez la largeur du véhicule"
+
+#: ../bin/dcar.c:3892
+msgid "Enter the Truck Centers"
+msgstr "Entrez la distance entre les bogies"
+
+#: ../bin/dcar.c:3894
+#, fuzzy
+msgid "Truck Center Offset must be greater than 0 or 0"
+msgstr "L'écartement des bogies doit être inférieur à la longueur du véhicule"
+
+#: ../bin/dcar.c:3896
+msgid "Truck Centers must be less than Car Length"
+msgstr "L'écartement des bogies doit être inférieur à la longueur du véhicule"
+
+#: ../bin/dcar.c:3898
+#, fuzzy
+msgid "Truck Center Offset plus Truck Centers must be less than Car Length"
+msgstr "L'écartement des bogies doit être inférieur à la longueur du véhicule"
+
+#: ../bin/dcar.c:3900
+msgid "Enter the Coupled Length or Coupler Length"
+msgstr "Entrez la longueur couplée ou la longueur de l'attelage"
+
+#: ../bin/dcar.c:3902
+msgid "Enter the Coupled Length"
+msgstr "Entrez la longueur couplé"
+
+#: ../bin/dcar.c:3904
+msgid "Enter a item Index"
+msgstr "Entrez un numéro d'identification"
+
+#: ../bin/dcar.c:3906
+msgid "Purchase Price is not valid"
+msgstr "Le prix d'achat n'est pas valide"
+
+#: ../bin/dcar.c:3908
+msgid "Current Price is not valid"
+msgstr "Le prix actuel n'est pas valide"
+
+#: ../bin/dcar.c:3910
+msgid "Purchase Date is not valid"
+msgstr "La date d'achat n'est pas valide"
+
+#: ../bin/dcar.c:3912
+msgid "Service Date is not valid"
+msgstr "La date de service n'est pas valide"
+
+#: ../bin/dcar.c:3915
+#, c-format
+msgid "Item Index %ld duplicated an existing item: updated to new value"
+msgstr ""
+"L'index de l'objet %ld existe déjà : mis à jour avec une nouvelle valeur"
+
+#: ../bin/dcar.c:4111
+#, c-format
+msgid "Added %ld new Cars"
+msgstr "Ajout de %ld nouveaux matériels roulants"
+
+#: ../bin/dcar.c:4113
+msgid "Added new Car"
+msgstr "Ajout d'un nouveau véhicule"
+
+#: ../bin/dcar.c:4116
+msgid "Updated Car"
+msgstr "Véhicule mis à jour"
+
+#: ../bin/dcar.c:4119
+msgid " and Part"
+msgstr " et une partie"
+
+#: ../bin/dcar.c:4146
+#, c-format
+msgid "%s Part: %s %s %s %s %s %s"
+msgstr "%s Partie : %s %s %s %s %s %s"
+
+#: ../bin/dcar.c:4146 ../bin/dcar.c:4163
+msgid "Added new"
+msgstr "Ajout d'un nouveau"
+
+#: ../bin/dcar.c:4146 ../bin/dcar.c:4163
+msgid "Updated"
+msgstr "Mis à jour"
+
+#: ../bin/dcar.c:4162
+#, c-format
+msgid "%s Prototype: %s%s."
+msgstr "%s Prototype: %s%s."
+
+#: ../bin/dcar.c:4164
+msgid ". Enter new values or press Close"
+msgstr ". Entrez de nouvelles valeurs ou appuyez sur Fermer"
+
+#: ../bin/dcar.c:4285
+msgid "New Car Part"
+msgstr "Nouvelle fiche de véhicule"
+
+#: ../bin/dcar.c:4368 ../bin/dcar.c:4373
+#: ../../../../build/work/app/bin/bllnhlp.c:410
+msgid "Roadname"
+msgstr "Compagnie ferroviaire"
+
+#: ../bin/dcar.c:4368
+msgid "Purc Price"
+msgstr "Prix d'achat"
+
+#: ../bin/dcar.c:4369 ../bin/dcar.c:4374
+msgid "Curr Price"
+msgstr "Prix act"
+
+#: ../bin/dcar.c:4369
+msgid "Purc Date"
+msgstr "Date d'achat"
+
+#: ../bin/dcar.c:4369
+msgid "Srvc Date"
+msgstr "Date de service"
+
+#: ../bin/dcar.c:4370
+msgid "Locat'n"
+msgstr "Lieu"
+
+#: ../bin/dcar.c:4373
+msgid "RepMarks"
+msgstr "Sigles"
+
+#: ../bin/dcar.c:4373
+msgid "Purch Price"
+msgstr "Prix d'achat"
+
+#: ../bin/dcar.c:4374
+msgid "Purch Date"
+msgstr "Date d'achat"
+
+#: ../bin/dcar.c:4391
+msgid "Sort By"
+msgstr "Trier par"
+
+#: ../bin/dcar.c:4399 ../bin/dcontmgm.c:99 ../bin/dcustmgm.c:71
+#: ../bin/dcustmgm.c:108
+msgid "Edit"
+msgstr "Editer"
+
+#: ../bin/dcar.c:4403 ../bin/dcontmgm.c:101 ../bin/dcustmgm.c:73
+#: ../bin/misc.c:2242
+msgid "Delete"
+msgstr "Effacer"
+
+#: ../bin/dcar.c:4407 ../bin/fileio.c:1517
+msgid "Export"
+msgstr "Exporter"
+
+#: ../bin/dcar.c:4409 ../../../../build/work/app/bin/bllnhlp.c:585
+msgid "List"
+msgstr "Liste"
+
+#: ../bin/dcar.c:4520 ../bin/dcar.c:5257 ../bin/misc.c:2618
+msgid "Car Inventory"
+msgstr "Inventaire des véhicules"
+
+#: ../bin/dcar.c:4640
+msgid "List Cars"
+msgstr "Liste de véhicules"
+
+#: ../bin/dcar.c:4764 ../bin/dcar.c:4929
+msgid "Import Cars"
+msgstr "Importer du véhicule"
+
+#: ../bin/dcar.c:4930 ../bin/dcar.c:5053
+msgid "Comma-Separated-Values (*.csv)|*.csv"
+msgstr "Valeurs séparées par des virgules (*.csv)|*.csv"
+
+#: ../bin/dcar.c:5000 ../bin/dcar.c:5052
+msgid "Export Cars"
+msgstr "Exporter le véhicule"
+
+#: ../bin/dcar.c:5086
+msgid "Layout"
+msgstr "Plan"
+
+#: ../bin/dcar.c:5088
+msgid "Shelf"
+msgstr "Étagère"
+
+#: ../bin/dcmpnd.c:77 ../bin/dlayer.c:499 ../bin/misc.c:613 ../bin/misc.c:645
+msgid "Load"
+msgstr "Charger"
+
+#: ../bin/dcmpnd.c:110
+msgid "Updating definitions, please wait"
+msgstr "Mise à jour des définitions, veuillez patienter"
+
+#: ../bin/dcmpnd.c:173
+msgid "Update Title"
+msgstr "Mettre à jour le titre"
+
+#: ../bin/dcmpnd.c:233
+#, c-format
+msgid "End-Point #%d of the selected and actual turnouts are not close"
+msgstr ""
+"Le point de fin #%d de la sélection et l'aiguillage actuel ne sont pas "
+"proches"
+
+#: ../bin/dcmpnd.c:242
+#, c-format
+msgid "End-Point #%d of the selected and actual turnouts are not aligned"
+msgstr ""
+"Le point de fin #%d de la sélection et l'aiguillage actuel ne sont pas "
+"alignés"
+
+#: ../bin/dcmpnd.c:261
+msgid "The selected Turnout had a differing number of End-Points"
+msgstr "L'aiguillage sélectionné avait un nombre différent de points de fin"
+
+#: ../bin/dcmpnd.c:327
+msgid "Skip"
+msgstr "Ignorer"
+
+#: ../bin/dcmpnd.c:359
+#, c-format
+msgid "%d Track(s) refreshed"
+msgstr "%d Voie(s) revues"
+
+#: ../bin/dcmpnd.c:399
+msgid "Refresh Turnout/Structure"
+msgstr "Actualiser les aiguillages/les bâtiments"
+
+#: ../bin/dcmpnd.c:401
+msgid "Choose a Turnout/Structure to replace:"
+msgstr "Choisissez un aiguillage/bâtiment à remplacer :"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:341
+#: ../bin/dcmpnd.c:411 ../bin/doption.c:132
+#: ../../../../build/work/app/i18n/custmsg.h:1205
+msgid "Turnouts"
+msgstr "Aiguillages"
+
+#: ../bin/dcmpnd.c:411
+msgid "Structures"
+msgstr "Structures"
+
+#: ../bin/dcmpnd.c:440
+msgid "Choose another Turnout/Structure to replace:"
+msgstr "Choisissez un autre aiguillage/bâtiment à remplacer :"
+
+#: ../bin/dcmpnd.c:542
+msgid "Rename Object"
+msgstr "Renommer un objet"
+
+#: ../bin/dcontmgm.c:92
+msgid "Tracks"
+msgstr "Voies"
+
+#: ../bin/dcontmgm.c:173
+#, c-format
+msgid "Are you sure you want to delete the %d control element(s)"
+msgstr "Êtes-vous sûr de vouloir supprimer %d élément(s) de contrôle"
+
+#: ../bin/dcontmgm.c:176
+msgid "Control Elements"
+msgstr "Éléments de contrôle"
+
+#: ../bin/dcontmgm.c:299
+msgid "Manage Layout Control Elements"
+msgstr "Gérer les contrôles du plan"
+
+#: ../bin/dcustmgm.c:67
+msgid "Create a new "
+msgstr "Créer un nouveau "
+
+#: ../bin/dcustmgm.c:69
+msgid "Go"
+msgstr "Go"
+
+#: ../bin/dcustmgm.c:75
+msgid "Move To"
+msgstr "Déplacer vers"
+
+#: ../bin/dcustmgm.c:108
+msgid "Rename"
+msgstr "Renommer"
+
+#: ../bin/dcustmgm.c:189
+msgid "Label"
+msgstr "Étiquette"
+
+#: ../bin/dcustmgm.c:227
+msgid "Contents Label"
+msgstr "Contenu de l'étiquette"
+
+#: ../bin/dcustmgm.c:283
+msgid "Move To XTP"
+msgstr "Déplacer vers le fichier de paramètres"
+
+#: ../bin/dcustmgm.c:284
+msgid "Parameter File (*.xtp)|*.xtp"
+msgstr "Fichier de Paramètres (*.xtp)|*.xtp"
+
+#: ../bin/dcustmgm.c:395
+msgid "Manage custom designed parts"
+msgstr "Gérer les matériels prototypes"
+
+#: ../bin/dease.c:67
+msgid "Sharp"
+msgstr "Etroit"
+
+#: ../bin/dease.c:67
+msgid "Broad"
+msgstr "Large"
+
+#: ../bin/dease.c:67
+msgid "Cornu"
+msgstr "Cornu"
+
+#: ../bin/dease.c:74
+msgid "Value"
+msgstr "Valeur"
+
+#: ../bin/dease.c:75 ../bin/tease.c:525
+msgid "R"
+msgstr "R"
+
+#: ../bin/dease.c:77 ../bin/tease.c:526
+msgid "L"
+msgstr "L"
+
+#: ../bin/dease.c:242
+msgid "Easement"
+msgstr "Courbe de transition (Easement)"
+
+#: ../bin/denum.c:49
+msgid "Prices"
+msgstr "Prix"
+
+#: ../bin/denum.c:54
+msgid "Save As ..."
+msgstr "Sauver sous ..."
+
+#: ../bin/denum.c:134 ../bin/denum.c:189 ../bin/denum.c:224
+msgid "Each"
+msgstr "L'unité"
+
+#: ../bin/denum.c:148 ../bin/denum.c:149
+msgid "Parts List"
+msgstr "Nomenclature"
+
+#: ../bin/denum.c:154
+#, c-format
+msgid ""
+"%s Parts List\n"
+"\n"
+msgstr ""
+"%s Nomenclature\n"
+"\n"
+
+#: ../bin/denum.c:189 ../bin/denum.c:226 ../bin/denum.c:235
+msgid "Extended"
+msgstr "L'ensemble"
+
+#: ../bin/denum.c:235 ../bin/denum.c:238
+msgid "Total"
+msgstr "Total"
+
+#: ../bin/dlayer.c:487
+msgid "Use Color"
+msgstr "Utiliser la couleur"
+
+#: ../bin/dlayer.c:489
+msgid "Visible"
+msgstr "Visible"
+
+#: ../bin/dlayer.c:491
+msgid "Frozen"
+msgstr "Gelé"
+
+#: ../bin/dlayer.c:493
+msgid "On Map"
+msgstr "Sur la carte"
+
+#: ../bin/dlayer.c:495
+msgid "Module"
+msgstr "Module"
+
+#: ../bin/dlayer.c:498
+msgid "Personal Preferences"
+msgstr "Préférences personnelles"
+
+#: ../bin/dlayer.c:500 ../bin/macro.c:1419
+msgid "Save"
+msgstr "Sauver"
+
+#: ../bin/dlayer.c:501
+msgid "Defaults"
+msgstr "Defauts"
+
+#: ../bin/dlayer.c:502
+msgid "Number of Layer Buttons"
+msgstr "Nombre de boutons de calques"
+
+#: ../bin/dlayer.c:519 ../bin/dlayer.c:987 ../bin/dlayer.c:1000
+#: ../bin/dlayer.c:1051
+msgid "Main"
+msgstr "Principal"
+
+#: ../bin/dlayer.c:632 ../bin/dlayer.c:925 ../bin/dlayer.c:1003
+#: ../bin/dlayer.c:1053 ../bin/dlayer.c:1303
+msgid "Show/Hide Layer"
+msgstr "Afficher/masquer le calque"
+
+#: ../bin/dlayer.c:1124
+msgid "Layers"
+msgstr "Calques"
+
+#: ../bin/doption.c:95
+msgid "Turning off AutoSave"
+msgstr ""
+
+#: ../bin/doption.c:104
+#, fuzzy
+msgid "Turning on CheckPointing"
+msgstr "Écrire une sauvegarde"
+
+#: ../bin/doption.c:130
+msgid "Auto Pan"
+msgstr "Panoramique auto"
+
+#: ../bin/doption.c:132
+msgid "All"
+msgstr "Tout"
+
+#: ../bin/doption.c:133
+msgid "Thick"
+msgstr "Épais"
+
+#: ../bin/doption.c:133
+msgid "Exception"
+msgstr "Exception"
+
+#: ../bin/doption.c:134
+msgid "Outline"
+msgstr "Contour"
+
+#: ../bin/doption.c:135
+msgid "Off"
+msgstr "De"
+
+#: ../bin/doption.c:135
+msgid "On"
+msgstr "On"
+
+#: ../bin/doption.c:136
+msgid "Track Descriptions"
+msgstr "Descriptions de voies"
+
+#: ../bin/doption.c:136
+msgid "Lengths"
+msgstr "Longueurs"
+
+#: ../bin/doption.c:136
+msgid "EndPt Elevations"
+msgstr "Elévations des bouts de voies"
+
+#: ../bin/doption.c:136
+msgid "Track Elevations"
+msgstr "Elévations de voies"
+
+#: ../bin/doption.c:136
+msgid "Cars"
+msgstr "Véhicules"
+
+#: ../bin/doption.c:137 ../bin/doption.c:138
+msgid "Descr"
+msgstr "Descr"
+
+#: ../bin/doption.c:138
+msgid "Manuf"
+msgstr "Fabric"
+
+#: ../bin/doption.c:139 ../bin/doption.c:140
+msgid "Object"
+msgstr "Objet"
+
+#: ../bin/doption.c:141
+msgid "Live Map"
+msgstr "Carte en direct"
+
+#: ../bin/doption.c:142
+msgid "Hide Trains On Hidden Track"
+msgstr "Masquer les trains sur voie cachée"
+
+#: ../bin/doption.c:143
+msgid "Constrain Drawing Area to Room boundaries"
+msgstr ""
+
+#: ../bin/doption.c:150
+msgid "Color Track"
+msgstr "Couleur de la voie"
+
+#: ../bin/doption.c:151
+msgid "Color Draw"
+msgstr "Dessin en couleur"
+
+#: ../bin/doption.c:152
+msgid "Draw Tunnel"
+msgstr "Dessin des tunnels"
+
+#: ../bin/doption.c:153
+msgid "Draw EndPts"
+msgstr "Dessin des bouts de voie"
+
+#: ../bin/doption.c:154
+msgid "Draw Unconnected EndPts"
+msgstr "Dessin des voies non connectées"
+
+#: ../bin/doption.c:155
+msgid "Draw Ties"
+msgstr "Dessin des traverses"
+
+#: ../bin/doption.c:156
+msgid "Draw Centers"
+msgstr "Dessin des centres"
+
+#: ../bin/doption.c:157
+msgid "Two Rail Scale"
+msgstr "Échelle pour 2 voies"
+
+#: ../bin/doption.c:158
+msgid "Map Scale"
+msgstr "Échelle de la carte de navigation"
+
+#: ../bin/doption.c:162
+msgid "Label Enable"
+msgstr "Étiquettes activées"
+
+#: ../bin/doption.c:163
+msgid "Label Scale"
+msgstr "Échelle d'étiquette"
+
+#: ../bin/doption.c:164
+msgid "Label Font Size"
+msgstr "Taille de police des étiquettes"
+
+#: ../bin/doption.c:165
+msgid "Hot Bar Labels"
+msgstr "Etiquettes barre rapide"
+
+#: ../bin/doption.c:166
+msgid "Layout Labels"
+msgstr "Etiquettes de calques"
+
+#: ../bin/doption.c:167
+msgid "List Labels"
+msgstr "Liste des étiquettes"
+
+#: ../bin/doption.c:170
+msgid "Car Labels"
+msgstr "Etiquettes des véhicules"
+
+#: ../bin/doption.c:171
+msgid "Train Update Delay"
+msgstr "Délai de mise à jour du train"
+
+#: ../bin/doption.c:199
+msgid "Display Options"
+msgstr "Options d'affichage"
+
+#: ../bin/doption.c:200
+msgid "Proto"
+msgstr "Proto"
+
+#: ../bin/doption.c:201
+msgid "Proto/Manuf"
+msgstr "Proto/Fabric"
+
+#: ../bin/doption.c:202
+msgid "Proto/Manuf/Part Number"
+msgstr "Proto/Fabric/N° de référence"
+
+#: ../bin/doption.c:203
+msgid "Proto/Manuf/Partno/Item"
+msgstr "Proto/Fabric/N° de référence/Objet"
+
+#: ../bin/doption.c:204
+msgid "Manuf/Proto"
+msgstr "Fabricant/Proto"
+
+#: ../bin/doption.c:205
+msgid "Manuf/Proto/Part Number"
+msgstr "Fabricant/Proto/N° de référence"
+
+#: ../bin/doption.c:206
+msgid "Manuf/Proto/Partno/Item"
+msgstr "Fabricant/Proto/N° de référence/Objet"
+
+#: ../bin/doption.c:236
+msgid "Single item selected, +Ctrl Add to selection"
+msgstr "Élément unique sélectionné, +Ctrl Ajouter à la sélection"
+
+#: ../bin/doption.c:236
+msgid "Add to selection, +Ctrl Single item selected"
+msgstr "Ajouter à la sélection, +Ctrl Élément unique sélectionné"
+
+#: ../bin/doption.c:237
+msgid "Deselect all on select nothing"
+msgstr "Désélectionner tout / ne rien sélectionner"
+
+#: ../bin/doption.c:242
+msgid "Normal: Command List, Shift: Command Options"
+msgstr "Normal : Liste de cde, Maj. : Options de cde"
+
+#: ../bin/doption.c:242
+msgid "Normal: Command Options, Shift: Command List"
+msgstr "Normal : Options de cde, Maj.: Liste de cde"
+
+#: ../bin/doption.c:245
+msgid "Default Command"
+msgstr "Commande par défaut"
+
+#: ../bin/doption.c:247
+msgid "Hide Selection Window"
+msgstr "Masquer la fenêtre de sélection"
+
+#: ../bin/doption.c:249
+msgid "Right Click"
+msgstr "Clic droit"
+
+#: ../bin/doption.c:250
+msgid "Select Mode"
+msgstr "Mode sélection"
+
+#: ../bin/doption.c:275
+msgid "Command Options"
+msgstr "Options de commande"
+
+#: ../bin/doption.c:298
+msgid "English"
+msgstr "Anglais"
+
+#: ../bin/doption.c:298
+msgid "Metric"
+msgstr "Métrique"
+
+#: ../bin/doption.c:299
+msgid "Polar"
+msgstr "Polaire"
+
+#: ../bin/doption.c:299
+msgid "Cartesian"
+msgstr "Cartésien"
+
+#: ../bin/doption.c:300
+msgid "Balloon Help"
+msgstr "Bulle d'aide"
+
+#: ../bin/doption.c:301
+msgid "Show FlexTrack in HotBar"
+msgstr ""
+
+#: ../bin/doption.c:302
+msgid "Load Last Layout"
+msgstr "Charger le dernier plan"
+
+#: ../bin/doption.c:302
+msgid "Start New Layout"
+msgstr "Commencer un nouveau plan"
+
+#: ../bin/doption.c:305
+msgid "Angles"
+msgstr "Angles"
+
+#: ../bin/doption.c:306
+msgid "Units"
+msgstr "Unités"
+
+#: ../bin/doption.c:308
+msgid "Length Format"
+msgstr "Format de longueur"
+
+#: ../bin/doption.c:309
+msgid "Min Track Length"
+msgstr "Longueur de voie min"
+
+#: ../bin/doption.c:310
+msgid "Connection Distance"
+msgstr "Distance de connexion"
+
+#: ../bin/doption.c:311
+msgid "Connection Angle"
+msgstr "Angle de connexion"
+
+#: ../bin/doption.c:312
+msgid "Turntable Angle"
+msgstr "Angle de pont tournant"
+
+#: ../bin/doption.c:313
+msgid "Max Coupling Speed"
+msgstr "Vitesse maximale de couplage"
+
+#: ../bin/doption.c:316
+msgid "Drag Distance"
+msgstr "Distance du glissé du curseur"
+
+#: ../bin/doption.c:317
+msgid "Drag Timeout"
+msgstr "Ajuster le délai d'attente"
+
+#: ../bin/doption.c:318
+msgid "Min Grid Spacing"
+msgstr "Pas min. de la grille"
+
+#: ../bin/doption.c:320
+#, fuzzy
+msgid "Check Point Frequency"
+msgstr "Sauvegarde"
+
+#: ../bin/doption.c:322
+msgid "Autosave Checkpoint Frequency"
+msgstr ""
+
+#: ../bin/doption.c:323
+msgid "On Program Startup"
+msgstr "Au démarrage du programme"
+
+#: ../bin/doption.c:333 ../bin/doption.c:337 ../bin/doption.c:354
+msgid "999.999"
+msgstr "999.999"
+
+#: ../bin/doption.c:334
+msgid "999.999999"
+msgstr "999.999999"
+
+#: ../bin/doption.c:335
+msgid "999.99999"
+msgstr "999.99999"
+
+#: ../bin/doption.c:336
+msgid "999.9999"
+msgstr "999.9999"
+
+#: ../bin/doption.c:338 ../bin/doption.c:355
+msgid "999.99"
+msgstr "999.99"
+
+#: ../bin/doption.c:339 ../bin/doption.c:356
+msgid "999.9"
+msgstr "999.9"
+
+#: ../bin/doption.c:340
+msgid "999 7/8"
+msgstr "999 7/8"
+
+#: ../bin/doption.c:341
+msgid "999 63/64"
+msgstr "999 63/64"
+
+#: ../bin/doption.c:342
+msgid "999' 11.999\""
+msgstr "999' 11.999\""
+
+#: ../bin/doption.c:343
+msgid "999' 11.99\""
+msgstr "999' 11.99\""
+
+#: ../bin/doption.c:344
+msgid "999' 11.9\""
+msgstr "999' 11.9\""
+
+#: ../bin/doption.c:345
+msgid "999' 11 7/8\""
+msgstr "999' 11 7/8\""
+
+#: ../bin/doption.c:346
+msgid "999' 11 63/64\""
+msgstr "999' 11 63/64\""
+
+#: ../bin/doption.c:347
+msgid "999ft 11.999in"
+msgstr "999ft 11.999in"
+
+#: ../bin/doption.c:348
+msgid "999ft 11.99in"
+msgstr "999ft 11.99in"
+
+#: ../bin/doption.c:349
+msgid "999ft 11.9in"
+msgstr "999ft 11.9in"
+
+#: ../bin/doption.c:350
+msgid "999ft 11 7/8in"
+msgstr "999ft 11 7/8in"
+
+#: ../bin/doption.c:351
+msgid "999ft 11 63/64in"
+msgstr "999ft 11 63/64in"
+
+#: ../bin/doption.c:357
+msgid "999.999mm"
+msgstr "999.999mm"
+
+#: ../bin/doption.c:358
+msgid "999.99mm"
+msgstr "999.99mm"
+
+#: ../bin/doption.c:359
+msgid "999.9mm"
+msgstr "999.9mm"
+
+#: ../bin/doption.c:360
+msgid "999.999cm"
+msgstr "999.999cm"
+
+#: ../bin/doption.c:361
+msgid "999.99cm"
+msgstr "999.99cm"
+
+#: ../bin/doption.c:362
+msgid "999.9cm"
+msgstr "999.9cm"
+
+#: ../bin/doption.c:363
+msgid "999.999m"
+msgstr "999.999m"
+
+#: ../bin/doption.c:364
+msgid "999.99m"
+msgstr "999.99m"
+
+#: ../bin/doption.c:365
+msgid "999.9m"
+msgstr "999.9m"
+
+#: ../bin/doption.c:492
+msgid "Preferences"
+msgstr "Préférences"
+
+#: ../bin/doption.c:531
+msgid "Marker"
+msgstr "Marqueur"
+
+#: ../bin/doption.c:532
+msgid "Border"
+msgstr "Bordure"
+
+#: ../bin/doption.c:533
+msgid "Primary Axis"
+msgstr "Axe primaire"
+
+#: ../bin/doption.c:534
+msgid "Secondary Axis"
+msgstr "Axe secondaire"
+
+#: ../bin/doption.c:535
+msgid "Normal Track"
+msgstr "Voie normale"
+
+#: ../bin/doption.c:536
+msgid "Selected Track"
+msgstr "Voie sélectionnée"
+
+#: ../bin/doption.c:537
+msgid "Profile Path"
+msgstr "Profil de voie"
+
+#: ../bin/doption.c:538
+msgid "Exception Track"
+msgstr "Voie non conforme"
+
+#: ../bin/doption.c:539
+msgid "Track Ties"
+msgstr "Traverses de voies"
+
+#: ../bin/dpricels.c:45
+msgid "Price"
+msgstr "Prix"
+
+#: ../bin/dpricels.c:59
+msgid "Flex Track"
+msgstr "Voie flexible"
+
+#: ../bin/dpricels.c:60
+msgid "costs"
+msgstr "coûts"
+
+#: ../bin/dpricels.c:154
+msgid "Price List"
+msgstr "Liste de prix"
+
+#: ../bin/dprmfile.c:73 ../bin/paramfilesearch_ui.c:60
+msgid "Show File Names"
+msgstr "Montrer les noms de fichiers"
+
+#: ../bin/dprmfile.c:82 ../bin/paramfilesearch_ui.c:76
+msgid "Select all"
+msgstr "Tt sélectionner"
+
+#: ../bin/dprmfile.c:84
+msgid "Favorite"
+msgstr "Préféré"
+
+#: ../bin/dprmfile.c:87
+msgid "Search Library"
+msgstr ""
+
+#: ../bin/dprmfile.c:88 ../bin/layout.c:471
+msgid "Browse ..."
+msgstr "Parcourir ..."
+
+#: ../bin/dprmfile.c:331
+#, fuzzy, c-format
+msgid "%d parameter files reloaded."
+msgstr "Lecture des fichiers de paramètres %d ."
+
+#: ../bin/dprmfile.c:333
+#, fuzzy
+msgid "One parameter file reloaded."
+msgstr "Trouver un fichier de paramètres à charger"
+
+#: ../bin/dprmfile.c:434
+msgid "Parameter Files"
+msgstr "Fichiers de paramètres"
+
+#: ../bin/dprmfile.c:437 ../bin/paramfilesearch_ui.c:405
+msgid "Load Parameters"
+msgstr "Chargers des paramètres d'objets"
+
+#: ../bin/dprmfile.c:437 ../bin/paramfilesearch_ui.c:405
+msgid "Parameter files (*.xtp)|*.xtp"
+msgstr "Fichier de paramètres (*.xtp)|*.xtp"
+
+#: ../bin/draw.c:2134
+msgid "Macro Zoom Mode"
+msgstr "Mode zoom macro"
+
+#: ../bin/draw.c:2141
+msgid "Scale 1:1 - Use Ctrl+ to go to Macro Zoom Mode"
+msgstr "Échelle 1:1 - Utilisez Ctrl+Pg.Suiv pour passer en mode Zoom macro"
+
+#: ../bin/draw.c:2145
+msgid "Preset Zoom In Value selected. Shift+Ctrl+PageDwn to reset value"
+msgstr ""
+"Facteur de zoom avant sélectionné. Maj + Ctrl + Pg.Suiv pour réinitialiser "
+"la valeur"
+
+#: ../bin/draw.c:2149
+#, c-format
+msgid "Zoom In Program Value %ld:1, Shift+PageDwn to use"
+msgstr "Zoom programmé Valeur plus grande %ld : 1, à utiliser avec Maj+Pg.Suiv"
+
+#: ../bin/draw.c:2187
+msgid "At Maximum Zoom Out"
+msgstr "Au zoom maximum"
+
+#: ../bin/draw.c:2192
+msgid "Preset Zoom Out Value selected. Shift+Ctrl+PageUp to reset value"
+msgstr ""
+"Facteur de zoom arrière sélectionné. Maj + Ctrl + Pg.Suiv pour réinitialiser "
+"la valeur"
+
+#: ../bin/draw.c:2196
+#, c-format
+msgid "Zoom Out Program Value %ld:1 set, Shift+PageUp to use"
+msgstr "Zoom programmé Valeur supérieure %ld : 1, à utiliser avec Maj+Pg.Préc"
+
+#: ../bin/draw.c:2893
+msgid "Map"
+msgstr "Carte de navigation"
+
+#: ../bin/draw.c:2941
+msgid ""
+"Left-Drag to pan, Ctrl+Left-Drag to zoom, 0 to set origin to zero, 1-9 to "
+"zoom#, e to set to extents"
+msgstr ""
+"Faites glisser à gauche pour recadrer, Ctrl + glisser vers la gauche pour "
+"zoomer, 0 pour définir l'origine à 0.0, 1-9 pour le niveau de zoom#, e pour "
+"définir la taille"
+
+#: ../bin/draw.c:2948
+msgid "Pan Mode - drag point to new position"
+msgstr ""
+"Sélectionner une section - faites glisser le point vers la nouvelle position"
+
+#: ../bin/draw.c:2955
+msgid "Zoom Mode - drag area to zoom"
+msgstr "Mode Zoom - faites glisser la zone pour zoomer"
+
+#: ../bin/draw.c:2981
+msgid "Can't move any further in that direction"
+msgstr "Je ne peux plus avancer dans cette direction"
+
+#: ../bin/draw.c:2983
+msgid "Left click to pan, right click to zoom, 'o' for origin, 'e' for extents"
+msgstr ""
+"Clic gauche pour faire un panoramique, clic droit pour zoomer, 'o' pour "
+"origine, 'e' pour étendue"
+
+#: ../bin/draw.c:3022
+msgid ""
+"Left Drag to Pan, +CTRL to Zoom, 0 to set Origin to 0,0, 1-9 to Zoom#, e to "
+"set to Extent"
+msgstr ""
+"Faites glisser à gauche pour un recadrage, +Ctrl pour zoomer, 0 pour définir "
+"le point de départ sur 0.0, 1-9 pour le niveau de zoom, e pour définir la "
+"taille"
+
+#: ../bin/draw.c:3102
+msgid "Pan/Zoom"
+msgstr "Pan./Zoom"
+
+#: ../bin/draw.c:3113
+msgid "Zoom to 1:1 - '1'"
+msgstr "Zoom sur 1:1 - '1'"
+
+#: ../bin/draw.c:3114
+msgid "Zoom to 1:2 - '2'"
+msgstr "Zoom sur 1:2 - '2'"
+
+#: ../bin/draw.c:3115
+msgid "Zoom to 1:3 - '3'"
+msgstr "Zoom sur 1:3 - '3'"
+
+#: ../bin/draw.c:3116
+msgid "Zoom to 1:4 - '4'"
+msgstr "Zoom sur 1:4 - '4'"
+
+#: ../bin/draw.c:3117
+msgid "Zoom to 1:5 - '5'"
+msgstr "Zoom sur 1:5 - '5'"
+
+#: ../bin/draw.c:3118
+msgid "Zoom to 1:6 - '6'"
+msgstr "Zoom sur 1:6 - '6'"
+
+#: ../bin/draw.c:3119
+msgid "Zoom to 1:7 - '7'"
+msgstr "Zoom sur 1:7 - '7'"
+
+#: ../bin/draw.c:3120
+msgid "Zoom to 1:8 - '8'"
+msgstr "Zoom sur 1:8 - '8'"
+
+#: ../bin/draw.c:3121
+msgid "Zoom to 1:9 - '9'"
+msgstr "Zoom sur 1:9 - '9'"
+
+#: ../bin/draw.c:3125
+msgid "Pan center here - 'c'"
+msgstr "Centre du panoramique ici - 'c'"
+
+#: ../bin/drawgeom.c:76 ../bin/drawgeom.c:91
+msgid "Create Lines"
+msgstr "Créer des lignes"
+
+#: ../bin/drawgeom.c:291
+msgid "+Shift to lock to nearby objects"
+msgstr "+Maj pour verrouiller les objets à proximité"
+
+#: ../bin/drawgeom.c:293
+msgid "+Shift to not lock to nearby objects"
+msgstr "+Maj pour ne pas verrouiller les objets à proximité"
+
+#: ../bin/drawgeom.c:393
+msgid "Drag to next point, +Shift to lock to object, +Ctrl to lock to 90deg"
+msgstr ""
+"Faites glisser vers le point suivant, +Maj pour verrouiller sur l'objet, "
+"+Ctrl pour verrouiller à 90 degrés"
+
+#: ../bin/drawgeom.c:403
+msgid "Drag to place next end point"
+msgstr "Faites glisser pour placer la prochaine extrémité"
+
+#: ../bin/drawgeom.c:434
+msgid "Drag to set radius"
+msgstr "Faites glisser pour définir le rayon"
+
+#: ../bin/drawgeom.c:447
+msgid "Drag set box size"
+msgstr "Faites glisser pour définir la taille du rectangle"
+
+#: ../bin/drawgeom.c:488
+msgid "+Shift - lock to close object, +Ctrl - lock to 90 deg"
+msgstr "+Maj - verrouille pour fermer l'objet, +Ctrl - verrouille à 90 degrés"
+
+#: ../bin/drawgeom.c:536 ../bin/drawgeom.c:592
+#, c-format
+msgid "Length = %s, Angle = %0.2f"
+msgstr "Longueur = %s, Angle = %0.2f"
+
+#: ../bin/drawgeom.c:613
+#, c-format
+msgid "Straight Line: Length=%s Angle=%0.3f"
+msgstr "Ligne droite : Longueur=%s Angle=%0.3f"
+
+#: ../bin/drawgeom.c:635
+#, c-format
+msgid "Curved Line: Radius=%s Angle=%0.3f Length=%s"
+msgstr "Ligne courbe : Rayon = %s Angle = %0.3f Longueur = %s"
+
+#: ../bin/drawgeom.c:659
+#, c-format
+msgid "Radius = %s"
+msgstr "Rayon = %s"
+
+#: ../bin/drawgeom.c:669
+#, c-format
+msgid "Width = %s, Height = %s"
+msgstr "Largeur = %s, Hauteur = %s"
+
+#: ../bin/drawgeom.c:1132
+msgid "Select points or use context menu"
+msgstr "Sélectionnez des points ou utilisez le menu contextuel"
+
+#: ../bin/drawgeom.c:1387
+#, c-format
+msgid "Length = %s, Last angle = %0.2f"
+msgstr "Longueur = %s, Dernier angle = %0.2f"
+
+#: ../bin/drawgeom.c:1538
+msgid "Point Deleted"
+msgstr "Point supprimé"
+
+#: ../bin/drawgeom.c:1934
+msgid "Not close to end of line"
+msgstr "Aucun point de fin à proximité"
+
+#: ../bin/drawgeom.c:1987
+msgid "Not close to ends or middle of mine, reselect"
+msgstr "Pas à une extrémité ou au milieu de la voie resélectionnez"
+
+#: ../bin/drawgeom.c:2035 ../bin/drawgeom.c:2257
+msgid "Drag to Move Corner Point"
+msgstr "Faites glisser pour déplacer le sommet"
+
+#: ../bin/drawgeom.c:2042
+msgid "Drag to Move Edge "
+msgstr "Faites glisser pour déplacer le bord "
+
+#: ../bin/drawgeom.c:2104
+#, c-format
+msgid "Length = %0.3f Angle = %0.3f"
+msgstr "Longueur = %0.3f angle = %0.3f"
+
+#: ../bin/drawgeom.c:2252
+msgid "Drag to Move Edge"
+msgstr "Faites glisser pour déplacer le bord"
+
+#: ../bin/dxfoutput.c:232
+msgid "Export to DXF"
+msgstr "Exporter en DXF"
+
+#: ../bin/fileio.c:240
+msgid ""
+"\n"
+"Do you want to continue?"
+msgstr ""
+"\n"
+"Voulez-vous continuer?"
+
+#: ../bin/fileio.c:607
+#, c-format
+msgid "putTitle: title too long: %s"
+msgstr "poser le titre : titre trop long : %s"
+
+#: ../bin/fileio.c:637
+msgid "Unnamed Trackplan"
+msgstr "Plan de voie sans nom"
+
+#: ../bin/fileio.c:638
+msgid " (R/O)"
+msgstr " (R/O)"
+
+#: ../bin/fileio.c:658 ../bin/fileio.c:1277
+msgid "Check Pointing"
+msgstr "Écrire une sauvegarde"
+
+#: ../bin/fileio.c:788
+msgid "Unknown layout file object - skip until next good object?"
+msgstr ""
+
+#: ../bin/fileio.c:1025
+msgid "Track"
+msgstr "Voie"
+
+#: ../bin/fileio.c:1211
+msgid "Save Tracks"
+msgstr "Sauver le réseau"
+
+#: ../bin/fileio.c:1227
+msgid "Save Tracks As"
+msgstr "Enregistrer les voies sous"
+
+#: ../bin/fileio.c:1238
+msgid "Open Tracks"
+msgstr "Ouvrir un réseau"
+
+#: ../bin/fileio.c:1252
+msgid "Example Tracks"
+msgstr "Exemples de voies"
+
+#: ../bin/fileio.c:1460
+#, c-format
+msgid "Module - %s"
+msgstr "Module - %s"
+
+#: ../bin/fileio.c:1465 ../bin/fileio.c:1486
+msgid "Import Tracks"
+msgstr "Importer des voies"
+
+#: ../bin/fileio.c:1548
+msgid "Export Tracks"
+msgstr "Exporter les voies"
+
+#: ../bin/fileio.c:1567
+msgid "Clipboard"
+msgstr "Presse-papiers"
+
+#: ../bin/filenoteui.c:62 ../bin/linknoteui.c:50 ../bin/textnoteui.c:42
+msgid "Position X"
+msgstr "Position X"
+
+#: ../bin/filenoteui.c:64 ../bin/linknoteui.c:52 ../bin/textnoteui.c:44
+msgid "Position Y"
+msgstr "Position Y"
+
+#: ../bin/filenoteui.c:68 ../bin/linknoteui.c:56
+msgid "Title"
+msgstr "Titre"
+
+#: ../bin/filenoteui.c:70 ../bin/trknote.c:62
+#: ../../../../build/work/app/bin/bllnhlp.c:85
+msgid "Document"
+msgstr "Document"
+
+#: ../bin/filenoteui.c:72
+msgid "Select..."
+msgstr "Sélectionner ..."
+
+#: ../bin/filenoteui.c:74 ../bin/linknoteui.c:60
+msgid "Open..."
+msgstr "Ouvert ..."
+
+#: ../bin/filenoteui.c:136
+msgid "Add Document"
+msgstr "Ajouter un document"
+
+#: ../bin/filenoteui.c:158
+msgid "The file doesn't exist or cannot be read!"
+msgstr "Le fichier n'existe pas ou ne peut pas être lu!"
+
+#: ../bin/filenoteui.c:297
+#, c-format
+msgid "Document(%d) Layer=%d %-.80s [%s]"
+msgstr "Document(%d) Calque=%d %-.80s [%s]"
+
+#: ../bin/filenoteui.c:309
+msgid "Update document"
+msgstr "Mettre à jour le document"
+
+#: ../bin/filenoteui.c:323
+msgid "Describe the file"
+msgstr "Décrivez le fichier"
+
+#: ../bin/filenoteui.c:329
+msgid "Attach document"
+msgstr "Joindre un document"
+
+#: ../bin/i18n.c:66
+#, c-format
+msgid "Gettext initialized (PACKAGE=%s, LOCALEDIR=%s, LC_ALL=%s).\n"
+msgstr ""
+"Obtenir le texte initialisé (PACKAGE =%s, LOCALEDIR =%s, LC_ALL =%s).\n"
+
+#: ../bin/layout.c:373
+#, c-format
+msgid "Unable to load Image File - %s"
+msgstr "Impossible de charger le fichier image -%s"
+
+#: ../bin/layout.c:436
+msgid "Load Background"
+msgstr "Charger l'arrière-plan"
+
+#: ../bin/layout.c:458
+msgid "Room Width"
+msgstr "Largeur du plan"
+
+#: ../bin/layout.c:459
+msgid " Height"
+msgstr " Hauteur"
+
+#: ../bin/layout.c:460
+msgid "Layout Title"
+msgstr "Titre du plan"
+
+#: ../bin/layout.c:461
+msgid "Subtitle"
+msgstr "Sous-titre"
+
+#: ../bin/layout.c:465
+msgid " Gauge"
+msgstr " Ecartement"
+
+#: ../bin/layout.c:467
+msgid "Min Track Radius"
+msgstr "Rayon de voie min"
+
+#: ../bin/layout.c:468
+msgid " Max Track Grade (%)"
+msgstr " Pente maximale de la voie (%)"
+
+#: ../bin/layout.c:470
+msgid "Background File Path"
+msgstr "Chemin d'accès au fichier d'arrière-plan"
+
+#: ../bin/layout.c:474
+msgid "Background PosX,Y"
+msgstr "Arrière-plan, PosX,Y"
+
+#: ../bin/layout.c:478
+msgid "Background Size"
+msgstr "Taille de l'arrière-plan"
+
+#: ../bin/layout.c:480
+msgid "Background Screen %"
+msgstr "Niveau de noir de l'arrière-plan %"
+
+#: ../bin/layout.c:482
+msgid "Background Angle"
+msgstr "Angle de l'arrière-plan"
+
+#: ../bin/layout.c:560
+msgid "Layout Options"
+msgstr "Options du plan"
+
+#: ../bin/linknoteui.c:58
+msgid "URL"
+msgstr "URL"
+
+#: ../bin/linknoteui.c:107
+#, c-format
+msgid ""
+"The entered URL is too long. The maximum allowed length is %d. Please edit "
+"the entered value."
+msgstr ""
+"L'URL saisie est trop longue. La longueur maximale autorisée est %d. "
+"Veuillez modifier la valeur entrée."
+
+#: ../bin/linknoteui.c:110
+msgid "Re-edit"
+msgstr "Modifier à nouveau"
+
+#: ../bin/linknoteui.c:241
+msgid "Update link"
+msgstr "Mise à jour le lien"
+
+#: ../bin/linknoteui.c:259
+msgid "Create link"
+msgstr "Créer un lien"
+
+#: ../bin/macro.c:95
+msgid "Message"
+msgstr "Message"
+
+#: ../bin/macro.c:179
+msgid "Recording"
+msgstr "Enregistrement"
+
+#: ../bin/macro.c:214
+msgid "End of Playback. Hit Step to exit\n"
+msgstr "Fin de la lecture. Appuyez sur Step pour quitter\n"
+
+#: ../bin/macro.c:278
+msgid "Record"
+msgstr "Enregistrer"
+
+#: ../bin/macro.c:676
+msgid "Step"
+msgstr "Pas à pas"
+
+#: ../bin/macro.c:679 ../bin/macro.c:1542
+msgid "Next"
+msgstr "Suivant"
+
+#: ../bin/macro.c:682 ../bin/misc.c:699 ../bin/track.c:1116
+msgid "Quit"
+msgstr "Quitter"
+
+#: ../bin/macro.c:685 ../../../../build/work/app/bin/bllnhlp.c:540
+msgid "Speed"
+msgstr "Vitesse"
+
+#: ../bin/macro.c:832 ../bin/macro.c:877
+msgid "Regression"
+msgstr "Régression"
+
+#: ../bin/macro.c:1043 ../bin/macro.c:1401
+msgid "Demo"
+msgstr "Demo"
+
+#: ../bin/macro.c:1221
+#, c-format
+msgid "Elapsed time %lu\n"
+msgstr "Temps écoulé %lu\n"
+
+#: ../bin/macro.c:1322
+msgid "Playback"
+msgstr "Lecture"
+
+#: ../bin/macro.c:1404
+msgid "Slowest"
+msgstr "Le plus lent"
+
+#: ../bin/macro.c:1405
+msgid "Slow"
+msgstr "Lent"
+
+#: ../bin/macro.c:1407
+msgid "Fast"
+msgstr "Rapide"
+
+#: ../bin/macro.c:1408
+msgid "Faster"
+msgstr "Plus rapide"
+
+#: ../bin/macro.c:1409
+msgid "Fastest"
+msgstr "Le plus rapide"
+
+#: ../bin/macro.c:1527
+msgid "Can not find PARAMETER playback proc"
+msgstr "Vous ne trouvez pas la procédure de lecture PARAMETER"
+
+#: ../bin/misc.c:169
+msgid "No Messages"
+msgstr "Pas de message"
+
+#: ../bin/misc.c:431 ../bin/misc.c:434
+msgid "ABORT"
+msgstr "ANNULER"
+
+#: ../bin/misc.c:433
+msgid ""
+"\n"
+"Do you want to save your layout?"
+msgstr ""
+"\n"
+"Voulez-vous enregistrer votre plan ?"
+
+#: ../bin/misc.c:480
+#, c-format
+msgid "No help for %s"
+msgstr "Aucune aide pour %s"
+
+#: ../bin/misc.c:592
+msgid ""
+"Save changes to the layout design before closing?\n"
+"\n"
+"If you don't save now, your unsaved changes will be discarded."
+msgstr ""
+"Les modifications apportées à la conception du plan doivent-elles être "
+"enregistrées avant de fermer ?\n"
+"\n"
+"Si vous n'enregistrez pas maintenant, vos modifications seront ignorées."
+
+#: ../bin/misc.c:594 ../bin/misc.c:2291
+msgid "&Save"
+msgstr "&Sauver"
+
+#: ../bin/misc.c:594 ../bin/misc.c:629
+msgid "&Cancel"
+msgstr "&Annuler"
+
+#: ../bin/misc.c:594
+msgid "&Don't Save"
+msgstr "&Ne pas enregistrer"
+
+#: ../bin/misc.c:618
+msgid "examples"
+msgstr "exemple"
+
+#: ../bin/misc.c:627
+msgid ""
+"Do you want to return to the last saved state?\n"
+"\n"
+"Revert will cause all changes done since last save to be lost."
+msgstr ""
+"Voulez-vous revenir au dernier état enregistré?\n"
+"\n"
+"La réinitialisation entraînera la perte des modifications apportées depuis "
+"la dernière sauvegarde."
+
+#: ../bin/misc.c:629
+msgid "&Revert"
+msgstr "&Revenir"
+
+#: ../bin/misc.c:851
+msgid "XTrackCAD Font"
+msgstr "XTrackCAD Font"
+
+#: ../bin/misc.c:912
+#, c-format
+msgid "No balloon help for %s\n"
+msgstr "Aucune bulle d'aide pour %s\n"
+
+#: ../bin/misc.c:914 ../../../../build/work/app/bin/bllnhlp.c:603
+#: ../../../../build/work/app/bin/bllnhlp.c:604
+#: ../../../../build/work/app/bin/bllnhlp.c:606
+#: ../../../../build/work/app/bin/bllnhlp.c:607
+#: ../../../../build/work/app/bin/bllnhlp.c:609
+#: ../../../../build/work/app/bin/bllnhlp.c:610
+#: ../../../../build/work/app/bin/bllnhlp.c:611
+#: ../../../../build/work/app/bin/bllnhlp.c:612
+#: ../../../../build/work/app/bin/bllnhlp.c:613
+#: ../../../../build/work/app/bin/bllnhlp.c:614
+#: ../../../../build/work/app/bin/bllnhlp.c:615
+#: ../../../../build/work/app/bin/bllnhlp.c:616
+#: ../../../../build/work/app/bin/bllnhlp.c:617
+#: ../../../../build/work/app/bin/bllnhlp.c:618
+#: ../../../../build/work/app/bin/bllnhlp.c:619
+#: ../../../../build/work/app/bin/bllnhlp.c:620
+#: ../../../../build/work/app/bin/bllnhlp.c:621
+#: ../../../../build/work/app/bin/bllnhlp.c:622
+#: ../../../../build/work/app/bin/bllnhlp.c:623
+#: ../../../../build/work/app/bin/bllnhlp.c:624
+#: ../../../../build/work/app/bin/bllnhlp.c:625
+#: ../../../../build/work/app/bin/bllnhlp.c:626
+#: ../../../../build/work/app/bin/bllnhlp.c:627
+#: ../../../../build/work/app/bin/bllnhlp.c:628
+#: ../../../../build/work/app/bin/bllnhlp.c:629
+#: ../../../../build/work/app/bin/bllnhlp.c:630
+#: ../../../../build/work/app/bin/bllnhlp.c:631
+#: ../../../../build/work/app/bin/bllnhlp.c:632
+#: ../../../../build/work/app/bin/bllnhlp.c:633
+#: ../../../../build/work/app/bin/bllnhlp.c:634
+#: ../../../../build/work/app/bin/bllnhlp.c:635
+#: ../../../../build/work/app/bin/bllnhlp.c:636
+#: ../../../../build/work/app/bin/bllnhlp.c:637
+#: ../../../../build/work/app/bin/bllnhlp.c:638
+#: ../../../../build/work/app/bin/bllnhlp.c:639
+#: ../../../../build/work/app/bin/bllnhlp.c:640
+#: ../../../../build/work/app/bin/bllnhlp.c:641
+#: ../../../../build/work/app/bin/bllnhlp.c:642
+#: ../../../../build/work/app/bin/bllnhlp.c:643
+#: ../../../../build/work/app/bin/bllnhlp.c:644
+#: ../../../../build/work/app/bin/bllnhlp.c:645
+#: ../../../../build/work/app/bin/bllnhlp.c:646
+#: ../../../../build/work/app/bin/bllnhlp.c:647
+#: ../../../../build/work/app/bin/bllnhlp.c:648
+#: ../../../../build/work/app/bin/bllnhlp.c:649
+#: ../../../../build/work/app/bin/bllnhlp.c:650
+#: ../../../../build/work/app/bin/bllnhlp.c:651
+#: ../../../../build/work/app/bin/bllnhlp.c:652
+#: ../../../../build/work/app/bin/bllnhlp.c:653
+#: ../../../../build/work/app/bin/bllnhlp.c:654
+#: ../../../../build/work/app/bin/bllnhlp.c:655
+#: ../../../../build/work/app/bin/bllnhlp.c:656
+#: ../../../../build/work/app/bin/bllnhlp.c:657
+#: ../../../../build/work/app/bin/bllnhlp.c:658
+#: ../../../../build/work/app/bin/bllnhlp.c:659
+#: ../../../../build/work/app/bin/bllnhlp.c:660
+#: ../../../../build/work/app/bin/bllnhlp.c:661
+#: ../../../../build/work/app/bin/bllnhlp.c:662
+#: ../../../../build/work/app/bin/bllnhlp.c:663
+#: ../../../../build/work/app/bin/bllnhlp.c:665
+msgid "No Help"
+msgstr "Pas d'aide"
+
+#: ../bin/misc.c:1022
+#, fuzzy
+msgid "File AutoSaved"
+msgstr "Boutons de fichier"
+
+#: ../bin/misc.c:1233 ../bin/misc.c:1240 ../bin/misc.c:1311
+msgid ""
+"Cancelling the current command will undo the changes\n"
+"you are currently making. Do you want to update?"
+msgstr ""
+"L'annulation de la commande en cours annulera les \n"
+"modifications en cours. Voulez-vous mettre à jour?"
+
+#: ../bin/misc.c:1806
+msgid "Sticky Commands"
+msgstr "Commandes maintenues"
+
+#: ../bin/misc.c:1819
+msgid "File Buttons"
+msgstr "Boutons de fichier"
+
+#: ../bin/misc.c:1819
+msgid "Import/Export Buttons"
+msgstr "Boutons Import/Export"
+
+#: ../bin/misc.c:1819
+msgid "Zoom Buttons"
+msgstr "Boutons de zoom"
+
+#: ../bin/misc.c:1820
+msgid "Undo Buttons"
+msgstr "Annuler les boutons"
+
+#: ../bin/misc.c:1820
+msgid "Easement Button"
+msgstr "Bouton Aide de courbes de transition"
+
+#: ../bin/misc.c:1820
+msgid "SnapGrid Buttons"
+msgstr "Bouton Grille magnétique"
+
+#: ../bin/misc.c:1821
+msgid "Create Track Buttons"
+msgstr "Créer des boutons de voie"
+
+#: ../bin/misc.c:1821
+msgid "Layout Control Elements"
+msgstr "Éléments de contrôle du plan"
+
+#: ../bin/misc.c:1822
+msgid "Modify Track Buttons"
+msgstr "Modifier les boutons de voie"
+
+#: ../bin/misc.c:1822
+msgid "Properties/Select"
+msgstr "Propriétés/Sélectionner"
+
+#: ../bin/misc.c:1823
+msgid "Track Group Buttons"
+msgstr "Boutons de groupe de voies"
+
+#: ../bin/misc.c:1823
+msgid "Train Group Buttons"
+msgstr "Boutons d'exploitation des trains"
+
+#: ../bin/misc.c:1824
+msgid "Create Misc Buttons"
+msgstr "Créer divers boutons"
+
+#: ../bin/misc.c:1824
+msgid "Ruler Button"
+msgstr "Bouton Règle"
+
+#: ../bin/misc.c:1824
+msgid "Layer Buttons"
+msgstr "Boutons de calques"
+
+#: ../bin/misc.c:1825
+msgid "Hot Bar"
+msgstr "Barre rapide"
+
+#: ../bin/misc.c:1894 ../../../../build/work/app/bin/bllnhlp.c:80
+msgid "Change Elevations"
+msgstr "Modifier les élévations"
+
+#: ../bin/misc.c:1912
+msgid "Angle:"
+msgstr "Angle:"
+
+#: ../bin/misc.c:1919
+msgid "Move X:"
+msgstr "Déplacer X :"
+
+#: ../bin/misc.c:1920
+msgid "Move Y:"
+msgstr "Déplacer Y :"
+
+#: ../bin/misc.c:1967
+msgid "Enter Move ..."
+msgstr "Entrez le déplacement ..."
+
+#: ../bin/misc.c:1973
+msgid "180 "
+msgstr "180 "
+
+#: ../bin/misc.c:1974
+msgid "90 CW"
+msgstr "90 CW"
+
+#: ../bin/misc.c:1975
+msgid "45 CW"
+msgstr "45 CW"
+
+#: ../bin/misc.c:1976
+msgid "30 CW"
+msgstr "30 CW"
+
+#: ../bin/misc.c:1977
+msgid "15 CW"
+msgstr "15 CW"
+
+#: ../bin/misc.c:1978
+msgid "15 CCW"
+msgstr "15 CCW"
+
+#: ../bin/misc.c:1979
+msgid "30 CCW"
+msgstr "30 CCW"
+
+#: ../bin/misc.c:1980
+msgid "45 CCW"
+msgstr "45 CCW"
+
+#: ../bin/misc.c:1981
+msgid "90 CCW"
+msgstr "90 CCW"
+
+#: ../bin/misc.c:1982
+msgid "Enter Angle ..."
+msgstr "Entrez l'angle ..."
+
+#: ../bin/misc.c:2013
+msgid "Debug"
+msgstr "Debug"
+
+#: ../bin/misc.c:2144
+msgid "&File"
+msgstr "&Fichier"
+
+#: ../bin/misc.c:2145
+msgid "&Edit"
+msgstr "&Editer"
+
+#: ../bin/misc.c:2146
+msgid "&View"
+msgstr "&Affichage"
+
+#: ../bin/misc.c:2147
+msgid "&Add"
+msgstr "&Ajouter"
+
+#: ../bin/misc.c:2148
+msgid "&Change"
+msgstr "&Modifier"
+
+#: ../bin/misc.c:2149
+msgid "&Draw"
+msgstr "&Dessiner"
+
+#: ../bin/misc.c:2150
+msgid "&Manage"
+msgstr "&Gérer"
+
+#: ../bin/misc.c:2151
+msgid "&Options"
+msgstr "&Options"
+
+#: ../bin/misc.c:2152
+msgid "&Macro"
+msgstr "&Macro"
+
+#: ../bin/misc.c:2153
+msgid "&Window"
+msgstr "&Fenêtre"
+
+#: ../bin/misc.c:2154
+msgid "&Help"
+msgstr "&Aide"
+
+#: ../bin/misc.c:2190
+msgid "Context Commands"
+msgstr "Commandes contextuelles"
+
+#: ../bin/misc.c:2191
+msgid "Shift Context Commands"
+msgstr "Commandes de changement de contexte"
+
+#: ../bin/misc.c:2206 ../bin/misc.c:2393
+msgid "Enable SnapGrid"
+msgstr "Activer la Grille magnétique"
+
+#: ../bin/misc.c:2208
+msgid "SnapGrid Show"
+msgstr "Montrer la grille magnétique"
+
+#: ../bin/misc.c:2210
+msgid " Enable Magnetic Snap"
+msgstr " Activer la Grille magnétique"
+
+#: ../bin/misc.c:2212 ../bin/misc.c:2414
+msgid "Show/Hide Map"
+msgstr "Afficher/Masquer la carte de navigation"
+
+#: ../bin/misc.c:2214
+msgid "Show/Hide Background"
+msgstr "Montrer/cacher l'image d'arrière plan"
+
+#: ../bin/misc.c:2245 ../bin/misc.c:2246
+msgid "Add..."
+msgstr "Ajouter ..."
+
+#: ../bin/misc.c:2249 ../bin/misc.c:2250
+msgid "More..."
+msgstr "Plus ..."
+
+#: ../bin/misc.c:2285
+msgid "&New ..."
+msgstr "&Nouveau ..."
+
+#: ../bin/misc.c:2287
+msgid "&Open ..."
+msgstr "&Ouvrir ..."
+
+#: ../bin/misc.c:2293
+msgid "Save &As ..."
+msgstr "Sauver &Sous ..."
+
+#: ../bin/misc.c:2295
+msgid "Revert"
+msgstr "Revenir"
+
+#: ../bin/misc.c:2298
+msgid "P&rint Setup ..."
+msgstr "R&églages d'impression ..."
+
+#: ../bin/misc.c:2303
+msgid "&Import"
+msgstr "&Importer"
+
+#: ../bin/misc.c:2305
+msgid "Import &Module"
+msgstr "Importation d'un &Module"
+
+#: ../bin/misc.c:2307
+msgid "Export to &Bitmap"
+msgstr "Exporter en &bitmap"
+
+#: ../bin/misc.c:2310
+msgid "E&xport"
+msgstr "E&xporter"
+
+#: ../bin/misc.c:2312
+msgid "Export D&XF"
+msgstr "Exporter en D&XF"
+
+#: ../bin/misc.c:2317
+msgid "Parameter &Files ..."
+msgstr "&Fichiers de paramètres ..."
+
+#: ../bin/misc.c:2319
+msgid "No&tes ..."
+msgstr "R&emarques ..."
+
+#: ../bin/misc.c:2326
+msgid "E&xit"
+msgstr "Q&uitter"
+
+#: ../bin/misc.c:2332
+msgid "&Undo"
+msgstr "&Annuler"
+
+#: ../bin/misc.c:2334
+msgid "R&edo"
+msgstr "R&efaire"
+
+#: ../bin/misc.c:2337
+msgid "Cu&t"
+msgstr "C&ouper"
+
+#: ../bin/misc.c:2339
+msgid "&Copy"
+msgstr "&Copier"
+
+#: ../bin/misc.c:2341
+msgid "&Paste"
+msgstr "&Coller"
+
+#: ../bin/misc.c:2343
+#, fuzzy
+msgid "C&lone"
+msgstr "Fermer"
+
+#: ../bin/misc.c:2345
+msgid "De&lete"
+msgstr "E&ffacer"
+
+#: ../bin/misc.c:2353
+msgid "Select &All"
+msgstr "T&out sélectionner"
+
+#: ../bin/misc.c:2355
+msgid "&Deselect All"
+msgstr "&Tout désélectionner"
+
+#: ../bin/misc.c:2356
+msgid "&Invert Selection"
+msgstr "&Inverser la sélection"
+
+#: ../bin/misc.c:2357
+msgid "Select Stranded Track"
+msgstr "Sélectionnez une voie isolée"
+
+#: ../bin/misc.c:2359
+msgid "Tu&nnel"
+msgstr "Tu&nnel"
+
+#: ../bin/misc.c:2360
+msgid "B&ridge"
+msgstr "P&ont"
+
+#: ../bin/misc.c:2361
+msgid "Ties/NoTies"
+msgstr "Groupées/non groupées"
+
+#: ../bin/misc.c:2362
+msgid "Move to &Front"
+msgstr "Déplacer vers &l'avant"
+
+#: ../bin/misc.c:2363
+msgid "Move to &Back"
+msgstr "Déplacer vers &l'arrière"
+
+#: ../bin/misc.c:2373
+msgid "Zoom &In"
+msgstr "Zoom &avant"
+
+#: ../bin/misc.c:2376
+msgid "Zoom &Out"
+msgstr "Zoom &Arrière"
+
+#: ../bin/misc.c:2386
+msgid "&Redraw"
+msgstr "&Redessiner"
+
+#: ../bin/misc.c:2388
+msgid "Redraw All"
+msgstr "Tout redessiner"
+
+#: ../bin/misc.c:2395
+msgid "Show SnapGrid"
+msgstr "Afficher la Grille magnétique"
+
+#: ../bin/misc.c:2405
+msgid "Enable Magnetic Snap"
+msgstr "Activer la grille Magnétique"
+
+#: ../bin/misc.c:2420
+msgid "&Tool Bar"
+msgstr "&Barre d'outils"
+
+#: ../bin/misc.c:2453
+msgid "Control Element"
+msgstr "Éléments de contrôle"
+
+#: ../bin/misc.c:2479
+msgid "&Loosen Tracks"
+msgstr "&Desserrer les voies"
+
+#: ../bin/misc.c:2491
+msgid "Raise/Lower Elevations"
+msgstr "Monter/Descendre les Elévations"
+
+#: ../bin/misc.c:2500
+msgid "Recompute Elevations"
+msgstr "Recalculer les élévations"
+
+#: ../bin/misc.c:2505
+msgid "Change Scale"
+msgstr "Modifier l'échelle"
+
+#: ../bin/misc.c:2526
+msgid "L&ayout ..."
+msgstr "P&lan ..."
+
+#: ../bin/misc.c:2528
+msgid "&Display ..."
+msgstr "&Affichage ..."
+
+#: ../bin/misc.c:2530
+msgid "Co&mmand ..."
+msgstr "Co&mmande ..."
+
+#: ../bin/misc.c:2532
+msgid "&Easements ..."
+msgstr "&Courbes de transition ..."
+
+#: ../bin/misc.c:2535
+msgid "&Fonts ..."
+msgstr "&Polices ..."
+
+#: ../bin/misc.c:2537
+msgid "Stic&ky ..."
+msgstr "M&aintient ..."
+
+#: ../bin/misc.c:2542
+msgid "&Debug ..."
+msgstr "&Déboguer ..."
+
+#: ../bin/misc.c:2545
+msgid "&Preferences ..."
+msgstr "&Préférences ..."
+
+#: ../bin/misc.c:2547
+msgid "&Colors ..."
+msgstr "&Couleurs ..."
+
+#: ../bin/misc.c:2553
+msgid "&Record ..."
+msgstr "&Enregistrer ..."
+
+#: ../bin/misc.c:2555
+msgid "&Play Back ..."
+msgstr "&Lecture ..."
+
+#: ../bin/misc.c:2561
+msgid "Main window"
+msgstr "Fenêtre principale"
+
+#: ../bin/misc.c:2575
+msgid "Recent Messages"
+msgstr "Messages récents"
+
+#: ../bin/misc.c:2582
+msgid "Tip of the Day..."
+msgstr "Astuce du jour ..."
+
+#: ../bin/misc.c:2583
+msgid "&Demos"
+msgstr "&Demos"
+
+#: ../bin/misc.c:2584
+msgid "Examples..."
+msgstr "Exemples ..."
+
+#: ../bin/misc.c:2588 ../bin/smalldlg.c:222
+msgid "About"
+msgstr "À propos"
+
+#: ../bin/misc.c:2601
+msgid "Tur&nout Designer..."
+msgstr "Conception d'a&iguillage ..."
+
+#: ../bin/misc.c:2604
+msgid "Layout &Control Elements"
+msgstr "Éléments de &contrôle du plan"
+
+#: ../bin/misc.c:2606
+msgid "&Group"
+msgstr "Grouper"
+
+#: ../bin/misc.c:2608
+msgid "&Ungroup"
+msgstr "&Dissocier"
+
+#: ../bin/misc.c:2612
+msgid "Custom defined parts..."
+msgstr "Matériels prototypes ..."
+
+#: ../bin/misc.c:2615
+msgid "Update Turnouts and Structures"
+msgstr "Mise à jour des aiguillages et structures"
+
+#: ../bin/misc.c:2624
+msgid "Layers ..."
+msgstr "Calques ..."
+
+#: ../bin/misc.c:2628
+msgid "Parts &List ..."
+msgstr "N&omenclature ..."
+
+#: ../bin/misc.c:2631
+msgid "Price List..."
+msgstr "Liste de prix ..."
+
+#: ../bin/misc.c:2713
+msgid "Import/Export"
+msgstr "Import/Export"
+
+#: ../bin/misc.c:2743
+msgid ""
+"Program was not terminated properly. Do you want to resume working on the "
+"previous trackplan?"
+msgstr ""
+"Le programme ne s'est pas été terminé correctement. Voulez-vous reprendre le "
+"travail précédent?"
+
+#: ../bin/misc.c:2744
+msgid "Resume"
+msgstr "Résumé"
+
+#: ../bin/misc.c:2744
+msgid "Resume with New Name"
+msgstr ""
+
+#: ../bin/misc.c:2744
+msgid "Ignore Checkpoint"
+msgstr ""
+
+#: ../bin/misc.c:2859
+#, c-format
+msgid "Unnamed Trackplan - %s(%s)"
+msgstr "Plan de voie sans nom -%s(%s)"
+
+#: ../bin/misc.c:2945
+msgid "Initializing commands"
+msgstr "Initialisation des commandes"
+
+#: ../bin/misc.c:2954
+msgid "Initializing menus"
+msgstr "Initialisation des menus"
+
+#: ../bin/misc.c:2989
+msgid "Reading parameter files"
+msgstr "Lecture des fichiers de paramètres"
+
+#: ../bin/misc.c:3026
+msgid "Initialization complete"
+msgstr "Initialisation terminée"
+
+#: ../bin/param.c:92
+msgid "Unexpected End Of String"
+msgstr "Fin de chaîne inattendue"
+
+#: ../bin/param.c:99
+msgid "Expected digit"
+msgstr "Chiffre attendu"
+
+#: ../bin/param.c:106
+msgid "Overflow"
+msgstr "Débordement"
+
+#: ../bin/param.c:154
+msgid "Divide by 0"
+msgstr "Diviser par 0"
+
+#: ../bin/param.c:162
+msgid "Expected /"
+msgstr "Attendu /"
+
+#: ../bin/param.c:248
+msgid "Invalid Units Indicator"
+msgstr "Indicateur d'unités non valide"
+
+#: ../bin/param.c:276
+msgid "Expected End Of String"
+msgstr "Fin de chaîne attendue"
+
+#: ../bin/param.c:302 ../bin/param.c:1406
+#, c-format
+msgid "Invalid Number"
+msgstr "Nombre invalide"
+
+#: ../bin/param.c:361
+msgid "End Of String"
+msgstr "Fin de chaîne"
+
+#: ../bin/param.c:1413
+#, c-format
+msgid "Enter a value > %ld"
+msgstr "Entrez une valeur > %ld"
+
+#: ../bin/param.c:1415
+#, c-format
+msgid "Enter a value < %ld"
+msgstr "Entrez une valeur < %ld"
+
+#: ../bin/param.c:1417
+#, c-format
+msgid "Enter a value between %ld and %ld"
+msgstr "Entrez une valeur entre %ld et %ld"
+
+#: ../bin/param.c:1473
+#, c-format
+msgid "Enter a value > %s"
+msgstr "Entrez une valeur > %s"
+
+#: ../bin/param.c:1476
+#, c-format
+msgid "Enter a value < %s"
+msgstr "Entrez une valeur < %s"
+
+#: ../bin/param.c:1479
+#, c-format
+msgid "Enter a value between %s and %s"
+msgstr "Entrez une valeur entre %s et %s"
+
+#: ../bin/param.c:2643
+msgid "Help"
+msgstr "Aide"
+
+#: ../bin/paramfile.c:250
+msgid "Parameter"
+msgstr "Paramètre"
+
+#: ../bin/paramfile.c:348
+msgid "Unknown param file line - skip until next good object?"
+msgstr ""
+
+#: ../bin/paramfilelist.c:110
+#, c-format
+msgid "Updating %s"
+msgstr "Mise à jour de %s"
+
+#: ../bin/paramfilesearch_ui.c:68
+#, fuzzy
+msgid "Enter at least one search word"
+msgstr "Entrez un seul mot de recherche"
+
+#: ../bin/paramfilesearch_ui.c:77
+#, fuzzy
+msgid "Reload Library"
+msgstr "Recharger"
+
+#: ../bin/paramfilesearch_ui.c:274
+#, c-format
+msgid "%d parameter files found."
+msgstr "Lecture des fichiers de paramètres %d ."
+
+#: ../bin/paramfilesearch_ui.c:284
+msgid "No matches found."
+msgstr "Aucun résultat."
+
+#: ../bin/paramfilesearch_ui.c:396
+#, fuzzy
+msgid "Choose parameter files"
+msgstr "Chercher des fichiers de paramètres"
+
+#: ../bin/paramfilesearch_ui.c:416
+#, fuzzy
+msgid "No system parameter files found, search is disabled."
+msgstr "Aucun fichier de paramètres trouvé, la recherche est désactivée."
+
+#: ../bin/smalldlg.c:64
+msgid "Show tips at start"
+msgstr "Afficher les conseils au démarrage"
+
+#: ../bin/smalldlg.c:70
+msgid "Did you know..."
+msgstr "Saviez-vous que ..."
+
+#: ../bin/smalldlg.c:72
+msgid "Previous Tip"
+msgstr "Précédent"
+
+#: ../bin/smalldlg.c:73
+msgid "Next Tip"
+msgstr "Conseil suivant"
+
+#: ../bin/smalldlg.c:90
+msgid "Tip of the Day"
+msgstr "Astuce du jour"
+
+#: ../bin/smalldlg.c:99
+msgid "No tips are available"
+msgstr "Pas de conseils disponibles"
+
+#: ../bin/smalldlg.c:199
+msgid ""
+"XTrackCAD is a CAD (computer-aided design) program for designing model "
+"railroad layouts."
+msgstr ""
+"XTrackCAD est un programme de CAO (conception assistée par ordinateur) pour "
+"concevoir des plans de chemin de fer miniature."
+
+#: ../bin/tbezier.c:177
+#, c-format
+msgid "Bezier: len=%0.2f min_rad=%0.2f"
+msgstr "Courbe de Bézier : longueur =%0.2f rayon min =%0.2f"
+
+#: ../bin/tbezier.c:250
+msgid "Ctl Pt 1: X,Y"
+msgstr "Ctl Pt 1: X,Y"
+
+#: ../bin/tbezier.c:251
+msgid "Ctl Pt 2: X,Y"
+msgstr "Ctl Pt 2: X,Y"
+
+#: ../bin/tbezier.c:257
+msgid "MinRadius"
+msgstr "RayonMin"
+
+#: ../bin/tbezier.c:262
+msgid "Line Color"
+msgstr "Couleur de ligne"
+
+#: ../bin/tbezier.c:379
+#, c-format
+msgid ""
+"Bezier %s(%d): Layer=%u MinRadius=%s Length=%s EP=[%0.3f,%0.3f] [%0.3f,%"
+"0.3f] CP1=[%0.3f,%0.3f] CP2=[%0.3f, %0.3f]"
+msgstr ""
+"Bezier %s(%d): Calque=%u Rayon Min=%s Longueur=%s EP=[%0.3f,%0.3f] [%0.3f,%"
+"0.3f] CP1=[%0.3f,%0.3f] CP2=[%0.3f, %0.3f]"
+
+#: ../bin/tbezier.c:453
+msgid "Bezier Track"
+msgstr "Voie Bézier"
+
+#: ../bin/tbezier.c:870
+msgid "Merge Bezier"
+msgstr "Fusionner des Bézier"
+
+#: ../bin/tcornu.c:222
+#, c-format
+msgid "Cornu: len=%0.2f min_rad=%0.2f"
+msgstr "Spirale de Cornu : longueur =%0.2f rayon mini =%0.2f"
+
+#: ../bin/tcornu.c:296
+msgid "Radius "
+msgstr "Rayon "
+
+#: ../bin/tcornu.c:304
+msgid "Minimum Radius"
+msgstr "Rayon Minimum"
+
+#: ../bin/tcornu.c:305
+msgid "Max Rate Of Curve Change/Scale"
+msgstr "Taux maximum de variation de courbe/échelle"
+
+#: ../bin/tcornu.c:306
+msgid "Total Winding Angle"
+msgstr "Angle total"
+
+#: ../bin/tcornu.c:444
+#, c-format
+msgid ""
+"Cornu Track(%d): Layer=%u MinRadius=%s Length=%s EP=[%0.3f,%0.3f] [%0.3f,%"
+"0.3f]"
+msgstr ""
+"Voie de Cornu(%d) : couche =%u Rayon Min =%s longueur =%s EP=[%0.3f,%0.3f] "
+"[%0.3f,%0.3f]"
+
+#: ../bin/tcornu.c:497
+msgid "Cornu Track"
+msgstr "Voie de Cornu"
+
+#: ../bin/tcornu.c:1025
+msgid "Merge Cornu"
+msgstr "Fusionner des Cornu"
+
+#: ../bin/tcurve.c:243
+#, c-format
+msgid "Helix: turns=%ld len=%0.2f grade=%0.1f%% sep=%0.2f"
+msgstr ""
+"Hélicoïde : Tours =%ld Longueur =%0.2f Pente =%0.1f%% séparation vert.=%0.2f"
+
+#: ../bin/tcurve.c:249
+#, c-format
+msgid "Helix: turns=%ld len=%0.2f"
+msgstr "Hélicoïde : Tours =%ld Longueur =%0.2f"
+
+#: ../bin/tcurve.c:365 ../bin/tcurve.c:367 ../bin/tease.c:520
+#: ../bin/tease.c:522 ../bin/tstraigh.c:86 ../bin/tstraigh.c:88
+msgid "Z"
+msgstr "Z"
+
+#: ../bin/tcurve.c:373
+msgid "Angular Length"
+msgstr "Longueur angulaire"
+
+#: ../bin/tcurve.c:553
+#, c-format
+msgid ""
+"Helix Track(%d): Layer=%d Radius=%s Turns=%ld Length=%s Center=[%s,%s] EP=[%"
+"0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A%0.3f]"
+msgstr ""
+"Voie de l'hélicoïde\n"
+"\n"
+"Voie de l'hélicoïde (%d) : Couche =%d Rayon =%s Tours =%ld Longueur =%s "
+"Centre = [%s,%s] EP =[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A%0.3f]"
+
+#: ../bin/tcurve.c:563
+#, c-format
+msgid ""
+"Curved Track(%d): Layer=%d Radius=%s Length=%s Center=[%s,%s] EP=[%0.3f,%"
+"0.3f A%0.3f] [%0.3f,%0.3f A%0.3f]"
+msgstr ""
+"Voie courbe (%d) : Couche =%d Rayon =%s Longueur =%s Centre = [%s,%s] EP=[%"
+"0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A%0.3f]"
+
+#: ../bin/tcurve.c:640
+msgid "Helix Track"
+msgstr "Voie de l'hélicoïde"
+
+#: ../bin/tcurve.c:646
+msgid "Curved Track"
+msgstr "Voie courbe"
+
+#: ../bin/tcurve.c:1011
+msgid "Merge Curves"
+msgstr "Fusionner des courbes"
+
+#: ../bin/tcurve.c:1078
+msgid "Drag to change angle or create tangent"
+msgstr "Faites glisser pour changer d'angle ou créer une tangente"
+
+#: ../bin/tcurve.c:1111 ../bin/tcurve.c:1143
+msgid "Curved "
+msgstr "Courbe "
+
+#: ../bin/tcurve.c:1117
+msgid "Tangent "
+msgstr "Tangente "
+
+#: ../bin/tcurve.c:1126
+#, c-format
+msgid "Tangent track: Length %s Angle %0.3f"
+msgstr "Voie tangente : Longueur %s Angle %0.3f"
+
+#: ../bin/tcurve.c:1148
+#, c-format
+msgid "Curved: Radius=%s Length=%s Angle=%0.3f"
+msgstr "Courbé : Rayon =%s Longueur =%s Angle =%0.3f"
+
+#: ../bin/tease.c:527
+msgid "l0"
+msgstr "l0"
+
+#: ../bin/tease.c:528
+msgid "l1"
+msgstr "l1"
+
+#: ../bin/tease.c:570
+#, c-format
+msgid ""
+"Joint Track(%d): Layer=%d Length=%0.3f EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A"
+"%0.3f]"
+msgstr ""
+"Voie raccordée(%d): Couche=%d Longueur=%0.3f EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%"
+"0.3f A%0.3f]"
+
+#: ../bin/tease.c:615
+msgid "Easement Track"
+msgstr "Voie courbe de transition"
+
+#: ../bin/tease.c:1235
+msgid "Merge Easements"
+msgstr "Fusionner des courbes de transition"
+
+#: ../bin/tease.c:1300
+msgid "Split Easement Curve"
+msgstr "Courbe de transition fractionnée"
+
+#: ../bin/textnoteui.c:214
+#, c-format
+msgid "Note: Layer=%d %-.80s"
+msgstr "Remarque : Calque=%d %-.80s"
+
+#: ../bin/textnoteui.c:225
+msgid "Update comment"
+msgstr "Mettre à jour le commentaire"
+
+#: ../bin/textnoteui.c:237
+msgid "Replace this text with your note"
+msgstr "Remplacez ce texte par votre note"
+
+#: ../bin/textnoteui.c:241
+msgid "Create Text Note"
+msgstr "Créer une note texte"
+
+#: ../bin/track.c:1329
+msgid "Move Objects Above"
+msgstr "Déplacer les objets ci-dessus"
+
+#: ../bin/track.c:1349
+msgid "Mode Objects Below"
+msgstr "Objets ci-dessous"
+
+#: ../bin/track.c:1640
+msgid "Audit"
+msgstr "Vérification"
+
+#: ../bin/track.c:1929
+#, c-format
+msgid "%d Track(s) loosened"
+msgstr "%d Voie(s) détachées"
+
+#: ../bin/track.c:1936
+msgid "No tracks loosened"
+msgstr "Pas de voies détachées"
+
+#: ../bin/track.c:1946 ../bin/track.c:1950
+#, c-format
+msgid "Connecting a non-track(%d) to (%d)"
+msgstr "Connecter un autre objet (%d) à une voie (%d)"
+
+#: ../bin/track.c:2005
+msgid "Join Abutting Tracks"
+msgstr "Raccorder les voies adjacentes"
+
+#: ../bin/track.c:2280 ../bin/track.c:2315
+msgid "Inside turnout track"
+msgstr "Voie d'aiguillage intérieure"
+
+#: ../bin/track.c:2298
+#, c-format
+msgid "Curve: Length=%s Radius=%0.3f Arc=%0.3f"
+msgstr "Courbe : longueur=%s Rayon=%0.3f Arc=%0.3f"
+
+#: ../bin/track.c:2321 ../bin/track.c:2379 ../bin/tstraigh.c:568
+#, c-format
+msgid "Straight: Length=%s Angle=%0.3f"
+msgstr "Droit : Longueur = %s Angle = %0.3f"
+
+#: ../bin/trknote.c:60
+msgid "Comment"
+msgstr "Commentaire"
+
+#: ../bin/trknote.c:61
+msgid "Link"
+msgstr "Lien"
+
+#: ../bin/trknote.c:61 ../../../../build/work/app/bin/bllnhlp.c:101
+msgid "Weblink"
+msgstr "Lien Web"
+
+#: ../bin/trknote.c:638 ../../../../build/work/app/bin/bllnhlp.c:108
+msgid "Place a note on the layout"
+msgstr "Mettre une note sur le plan"
+
+#: ../bin/trknote.c:652
+msgid "New Note"
+msgstr "Nouvelle note"
+
+#: ../bin/trknote.c:708
+msgid "Add notes"
+msgstr "Ajouter des notes"
+
+#: ../bin/tstraigh.c:236
+#, c-format
+msgid ""
+"Straight Track(%d): Layer=%d Length=%s EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A"
+"%0.3f]"
+msgstr ""
+"Voie droite (%d) : Couche =%d Longueur =%s EP =[%0.3f,%0.3f A%0.3f] [%0.3f,%"
+"0.3f A%0.3f]"
+
+#: ../bin/tstraigh.c:481
+msgid "Extending Straight Track"
+msgstr "Extension d'une voie droite"
+
+#: ../bin/tstraigh.c:561
+msgid "Straight "
+msgstr "Trait "
+
+#: ../wlib/gtklib/filesel.c:94
+msgid "Save format:"
+msgstr "Format d'enregistrement :"
+
+#: ../wlib/gtklib/filesel.c:187
+msgid "Image files"
+msgstr "Fichiers images"
+
+#: ../wlib/gtklib/font.c:281
+msgid "Font Select"
+msgstr "Sélection de police"
+
+#: ../wlib/gtklib/help.c:83
+msgid "&Contents"
+msgstr "&Sommaire"
+
+#: ../wlib/gtklib/help.c:84
+msgid "Co&mmand Context help"
+msgstr ""
+
+#: ../wlib/gtklib/ixhelp.c:243
+msgid "Home"
+msgstr "Accueil"
+
+#: ../wlib/gtklib/ixhelp.c:247
+msgid "Contents"
+msgstr "Sommaire"
+
+#: ../wlib/gtklib/menu.c:541
+msgid "<Empty List>"
+msgstr "<Liste vide>"
+
+#: ../wlib/gtklib/notice.c:101 ../wlib/mswlib/mswmisc.c:2102
+#: ../wlib/mswlib/mswmisc.c:2145
+msgid "Warning"
+msgstr "Attention"
+
+#: ../wlib/gtklib/notice.c:106 ../wlib/mswlib/mswmisc.c:2107
+msgid "Error"
+msgstr "Erreur"
+
+#: ../wlib/gtklib/text.c:300
+#, c-format
+msgid "%d of %d"
+msgstr "%d de %d"
+
+#: ../wlib/gtklib/wpref.c:114
+#, c-format
+msgid ""
+"The required configuration files could not be located in the expected "
+"location.\n"
+"\n"
+"Usually this is an installation problem. Make sure that these files are "
+"installed in either \n"
+" %s/share/xtrkcad or\n"
+" /usr/lib/%s or\n"
+" /usr/local/lib/%s\n"
+"If this is not possible, the environment variable %s must contain the name "
+"of the correct directory."
+msgstr ""
+"Les données de configuration nécessaires sont introuvables dans le "
+"répertoire attendu.\n"
+"\n"
+"Il s'agit généralement d'un problème d'installation. Assurez-vous que ces "
+"fichiers sont stockés dans\n"
+" %s/share/xtrkcad or\n"
+" /usr/lib/%s or\n"
+" /usr/local/lib/%s\n"
+"Si cela n'est pas possible, la variable d'environnement %s doit contenir le "
+"nom du répertoire correct."
+
+#: ../wlib/gtklib/wpref.c:148 ../wlib/gtklib/wpref.c:193
+msgid "HOME is not set"
+msgstr "HOME n'est pas défini"
+
+#: ../wlib/gtklib/wpref.c:148 ../wlib/gtklib/wpref.c:157
+#: ../wlib/gtklib/wpref.c:193
+msgid "Exit"
+msgstr "Quitter"
+
+#: ../wlib/gtklib/wpref.c:156
+#, c-format
+msgid "Cannot create %s"
+msgstr "Impossible de créer %s"
+
+#: ../wlib/mswlib/backgnd.c:103
+msgid "Image file is invalid or cannot be read."
+msgstr "Le fichier image n'est pas valide ou ne peut pas être lu."
+
+#: ../wlib/mswlib/mswmenu.c:886
+msgid "Ctrl+"
+msgstr "Ctrl+"
+
+#: ../wlib/mswlib/mswmenu.c:891
+msgid "Alt+"
+msgstr "Alt+"
+
+#: ../wlib/mswlib/mswmenu.c:896
+msgid "Shift+"
+msgstr "Maj+"
+
+#: ../wlib/mswlib/mswmenu.c:902
+msgid "Space"
+msgstr "Espace"
+
+#: ../wlib/mswlib/mswmisc.c:190
+msgid "All image files"
+msgstr "Tous les fichiers image"
+
+#: ../wlib/mswlib/mswmisc.c:192
+msgid "GIF files (*.gif)"
+msgstr "Fichiers GIF (*.gif)"
+
+#: ../wlib/mswlib/mswmisc.c:194
+msgid "JPEG files (*.jpeg,*.jpg)"
+msgstr "Fichier JPEG (*.jpeg,*.jpg)"
+
+#: ../wlib/mswlib/mswmisc.c:196
+msgid "PNG files (*.png)"
+msgstr "Fichier PNG (*.png)"
+
+#: ../wlib/mswlib/mswmisc.c:198
+msgid "TIFF files (*.tiff, *.tif)"
+msgstr "Fichiers TIFF (*.tiff, *.tif)"
+
+#: ../wlib/mswlib/mswmisc.c:200
+msgid "All files (*)"
+msgstr "Tous les fichiers (*)"
+
+#: ../../../../build/work/app/help/messages.h:9
+#, c-format
+msgid ""
+"MSG_CANT_PLACE_FROGPOINTS\tFrog|Points cannot be placed on a turnout, circle "
+"or helix.\tA %s cannot be placed on a turnout, circle or helix."
+msgstr ""
+"MSG_CANT_PLACE_FROGPOINTS\t Coeur|Points ne peuvent pas être placés sur une "
+"aiguille, un cercle ou une hélicoïde. Un %s ne peut pas être placé sur une "
+"aiguille, un cercle ou une hélicoïde."
+
+#: ../../../../build/work/app/help/messages.h:10
+msgid ""
+"MSG_SEL_TRK_FROZEN\tA frozen layer contains selected track. Command cannot "
+"be executed."
+msgstr ""
+"MSG_SEL_TRK_FROZEN\tUn calque gelé contient la voie sélectionnée. La "
+"commande ne peut pas être exécutée."
+
+#: ../../../../build/work/app/help/messages.h:11
+msgid "MSG_HELIX_TURNS_GTR_0\tA Helix must have one or more loops of track."
+msgstr ""
+"MSG_HELIX_TURNS_GTR_0\tUne hélice doit avoir une ou plusieurs boucles de "
+"voie."
+
+#: ../../../../build/work/app/help/messages.h:12
+msgid ""
+"MSG_LARGE_FONT\tA large font has been selected....\tA large font has been "
+"selected.\n"
+"Large fonts may a take a while to load.\n"
+"\n"
+"Do you wish to continue?"
+msgstr ""
+"MSG_LARGE_FONT\tUne grande police a été sélectionnée....\tUne grande police "
+"a été sélectionnée.\n"
+"Le chargement de grandes polices peut prendre un certain temps.\n"
+"\n"
+"Souhaitez-vous continuer?"
+
+#: ../../../../build/work/app/help/messages.h:13
+msgid ""
+"MSG_TODSGN_DESC_NONBLANK\tAll description fields present in the Turnout..."
+"\tAll description fields present in the Turnout\n"
+"Designer must contain appropriate information.\n"
+"Correct inappropriate values and try again."
+msgstr ""
+"MSG_TODSGN_DESC_NONBLANK\tTous les champs de description présents dans "
+"l'éditeur d'aiguillage...\tTous les champs de description présents dans "
+"l'éditeur \n"
+"d'aiguillage doivent contenir les informations appropriées.\n"
+"Corrigez les valeurs inappropriées et réessayez."
+
+#: ../../../../build/work/app/help/messages.h:14
+msgid ""
+"MSG_GROUP_NONBLANK\tAll fields listed in the Group dialog must contain "
+"data....\tAll fields listed in the Group dialog must contain data.\n"
+"Please enter missing values and try again."
+msgstr ""
+"MSG_GROUP_NONBLANK\tTous les champs répertoriés dans la boîte de dialogue "
+"Groupe doivent contenir des données....\tTous les champs répertoriés dans la "
+"boîte de dialogue Groupe doivent contenir des données.\n"
+"Veuillez entrer les valeurs manquantes et réessayer."
+
+#: ../../../../build/work/app/help/messages.h:15
+msgid ""
+"MSG_TODSGN_VALUES_GTR_0\tAll values specified in the Turnout Designer must "
+"be...\tAll values specified in the Turnout Designer must be\n"
+"greater than 0. Correct inappropriate values and try again."
+msgstr ""
+"MSG_TODSGN_VALUES_GTR_0\tToutes les valeurs spécifiées dans l'éditeur "
+"d'aiguillage doivent ...\tToutes les valeurs spécifiées dans Turnout "
+"Designer \n"
+"doivent être supérieures à 0. Corrigez les valeurs inappropriées et "
+"réessayez."
+
+#: ../../../../build/work/app/help/messages.h:16
+msgid "MSG_CURVE_OUT_OF_RANGE\tAngle must be between 0\\u00B0 and 360\\u00B0."
+msgstr ""
+"MSG_CURVE_OUT_OF_RANGE\tL'angle doit être compris entre 0\\u00B0 et 360"
+"\\u00B0."
+
+#: ../../../../build/work/app/help/messages.h:17
+msgid ""
+"MSG_TODSGN_CORNU_TOO_COMPLEX\tThe curves created by the Turnout Designer for "
+"a cornu curve have more than 128 segments....\tThe curves created by the "
+"Turnout Designer for a cornu curve have more than 128 segments.\n"
+"Try adjusting the end angles and radii to be closer in values."
+msgstr ""
+"MSG_TODSGN_CORNU_TOO_COMPLEX\tLes courbes créées avec Conception "
+"d'aiguillage pour une courbe de cornu ont plus de 128 segments ...\tLes "
+"courbes créées avec Conception d'aiguillage pour une courbe de cornu ont "
+"plus de 128 segments.\n"
+"Essayez d'ajuster les angles de fin et les rayons pour vous rapprocher des "
+"valeurs."
+
+#: ../../../../build/work/app/help/messages.h:18
+#, c-format
+msgid ""
+"MSG_CUSTMGM_DELETE_CONFIRM\tAre you sure you want to delete the NNN "
+"definition(s)?\tAre you sure you want to delete the\n"
+"%d definition(s)?"
+msgstr ""
+"MSG_CUSTMGM_DELETE_CONFIRM\tÊtes-vous sûr de vouloir supprimer la ou les "
+"définitions NNN ?\tÊtes-vous sûr de vouloir supprimer le\n"
+"%d définition(s)?"
+
+#: ../../../../build/work/app/help/messages.h:19
+msgid "MSG_WBITMAP_FAILED\tBitmap create or write function failed."
+msgstr ""
+"MSG_WBITMAP_FAILED\tLa fonction de création ou d'écriture bitmap a échoué."
+
+#: ../../../../build/work/app/help/messages.h:20
+msgid "MSG_BITMAP_TOO_LARGE\tBitmap is too large."
+msgstr "MSG_BITMAP_TOO_LARGE\tLe bitmap est trop volumineux."
+
+#: ../../../../build/work/app/help/messages.h:21
+msgid "MSG_CHANGE_ELEV_MODE\tCannot change elevation mode."
+msgstr "MSG_CHANGE_ELEV_MODE\tImpossible de changer le mode d'élevation."
+
+#: ../../../../build/work/app/help/messages.h:22
+msgid ""
+"MSG_GRID_ENABLE_SPACE_GTR_0\tCannot Enable Grid; spacing must be greater "
+"than 0"
+msgstr ""
+"MSG_GRID_ENABLE_SPACE_GTR_0\tImpossible d'activer la grille; l'espacement "
+"doit être supérieur à 0"
+
+#: ../../../../build/work/app/help/messages.h:23
+msgid "MSG_LAYER_FREEZE\tCannot freeze current layer"
+msgstr "MSG_LAYER_FREEZE\tImpossible de geler le calque actuel"
+
+#: ../../../../build/work/app/help/messages.h:24
+msgid ""
+"MSG_CANT_GROUP_BUMPER1\tCannot Group Bumper Track. The track has been "
+"unselected."
+msgstr ""
+"MSG_CANT_GROUP_BUMPER1\tImpossible de regrouper la voie exceptionnelle. La "
+"voie a été désélectionnée."
+
+#: ../../../../build/work/app/help/messages.h:25
+msgid "MSG_CANNOT_GROUP_TRACK\tCannot Group selected track."
+msgstr "MSG_CANNOT_GROUP_TRACK\tImpossible de grouper la voie sélectionnée."
+
+#: ../../../../build/work/app/help/messages.h:26
+msgid "MSG_LAYER_HIDE\tCannot hide current layer"
+msgstr "MSG_LAYER_HIDE\tImpossible de masquer le calque actuel"
+
+#: ../../../../build/work/app/help/messages.h:27
+msgid "MSG_LAYER_MODULE\tCannot turn current layer into a Module"
+msgstr "MSG_LAYER_MODULE\tImpossible de transformer le calque actuel en module"
+
+#: ../../../../build/work/app/help/messages.h:28
+msgid "MSG_JOIN_EASEMENTS\tCannot Join; Easements do not align or abut."
+msgstr ""
+"MSG_JOIN_EASEMENTS\tImpossible de raccorder; Les courbes de transition ne "
+"sont ni alignées ni abouties."
+
+#: ../../../../build/work/app/help/messages.h:29
+#, c-format
+msgid ""
+"MSG_TRK_ALREADY_CONN\tFirst|Second track is already connected.\tCannot Join; "
+"%s track is already connected."
+msgstr ""
+"MSG_TRK_ALREADY_CONN\tLa première|seconde voie est déjà connectée."
+"\tImpossible de raccorder; La voie %s est déjà connectée."
+
+#: ../../../../build/work/app/help/messages.h:30
+msgid "MSG_JOIN_TURNTABLE\tCannot join from a turntable, try to a turntable"
+msgstr ""
+"MSG_JOIN_TURNTABLE\tImpossible de raccorder un pont tournant, essayez de "
+"vous raccorder à lui"
+
+#: ../../../../build/work/app/help/messages.h:31
+msgid "MSG_JOIN_CORNU_SAME\tCannot Join; Selected endpoints are on same track."
+msgstr ""
+"MSG_JOIN_CORNU_SAME\tImpossible de raccorder; Les points de fin sélectionnés "
+"sont sur la même voie."
+
+#: ../../../../build/work/app/help/messages.h:32
+msgid "MSG_JOIN_SAME\tCannot Join; Selected endpoints are on same track."
+msgstr ""
+"MSG_JOIN_SAME\tImpossible de raccorder; Les terminaux sélectionnés sont sur "
+"la même voie."
+
+#: ../../../../build/work/app/help/messages.h:33
+msgid ""
+"MSG_SELECTED_TRACKS_PARALLEL\tCannot Join; Selected tracks are parallel."
+msgstr ""
+"MSG_SELECTED_TRACKS_PARALLEL\tImpossible de raccorder; Les voies "
+"sélectionnées sont parallèles."
+
+#: ../../../../build/work/app/help/messages.h:34
+#, c-format
+msgid ""
+"MSG_PRMFIL_OPEN_NEW\tCannot open New Parameter File: FILENAME\tCannot open "
+"New Parameter File: %s"
+msgstr ""
+"MSG_PRMFIL_OPEN_NEW\tImpossible d'ouvrir le nouveau fichier de paramètres : "
+"FILENAME\tImpossible d'ouvrir le nouveau fichier de paramètres : %s"
+
+#: ../../../../build/work/app/help/messages.h:35
+msgid "MSG_LAYER_SEL_FROZEN\tCannot select a frozen layer"
+msgstr "MSG_LAYER_SEL_FROZEN\tImpossible de sélectionner un calque gelé"
+
+#: ../../../../build/work/app/help/messages.h:36
+msgid ""
+"MSG_GRID_SHOW_SPACE_GTR_0\tCannot Show Grid; spacing must be greater than 0"
+msgstr ""
+"MSG_GRID_SHOW_SPACE_GTR_0\tImpossible d'afficher la grille; l'espacement "
+"doit être supérieur à 0"
+
+#: ../../../../build/work/app/help/messages.h:37
+#, c-format
+msgid "MSG_CANT_SPLIT_TRK\tCannot split TYPE track\tCannot split %s track"
+msgstr ""
+"MSG_CANT_SPLIT_TRK\tImpossible de scinder la voie TYPE\tImpossible de "
+"scinder la voie %s"
+
+#: ../../../../build/work/app/help/messages.h:38
+#, c-format
+msgid ""
+"MSG_CUSTMGM_CANT_WRITE\tCannot write to parameter file: FILENAME\tCannot "
+"write to parameter file: %s"
+msgstr ""
+"MSG_CUSTMGM_CANT_WRITE\tImpossible d'écrire dans le fichier de paramètres : "
+"FILENAME\tImpossible d'écrire dans le fichier de paramètres : %s"
+
+#: ../../../../build/work/app/help/messages.h:39
+msgid "MSG_CARIMP_DUP_INDEX\tCar Index number duplicated."
+msgstr "MSG_CARIMP_DUP_INDEX\tNuméro de véhicule dupliqué."
+
+#: ../../../../build/work/app/help/messages.h:40
+msgid ""
+"MSG_CONN_PARAMS_TOO_SMALL\tConnection parameters reset to minimum values."
+msgstr ""
+"MSG_CONN_PARAMS_TOO_SMALL\tLes paramètres de connexion sont réinitialisés "
+"aux valeurs minimales."
+
+#: ../../../../build/work/app/help/messages.h:41
+msgid "MSG_CONN_PARAMS_TOO_BIG\tConnection parameters reset to maximum values."
+msgstr ""
+"MSG_CONN_PARAMS_TOO_BIG\tLes paramètres de connexion sont réinitialisés aux "
+"valeurs maximales."
+
+#: ../../../../build/work/app/help/messages.h:42
+msgid "MSG_CANT_PASTE\tCopy/Paste buffer is empty. There is nothing to Paste."
+msgstr ""
+"MSG_CANT_PASTE\tLe buffer copier/coller est vide. Il n'y a rien à coller."
+
+#: ../../../../build/work/app/help/messages.h:43
+msgid ""
+"MSG_TODSGN_CROSSOVER_TOO_SHORT\tCrossover length is too short. Correct..."
+"\tCrossover length is too short. Correct\n"
+"inappropriate value(s) and try again."
+msgstr ""
+"MSG_TODSGN_CROSSOVER_TOO_SHORT\tLa longueur de croisement est trop courte. "
+"Corrigez...\tLa longueur de croisement est trop \n"
+"courte. Corrigez les valeurs inappropriées et réessayez."
+
+#: ../../../../build/work/app/help/messages.h:44
+msgid "MSG_CURVE_TOO_LARGE\tCurved track is too large."
+msgstr "MSG_CURVE_TOO_LARGE\tLa voie courbe est trop grande."
+
+#: ../../../../build/work/app/help/messages.h:45
+msgid ""
+"MSG_TODSGN_REPLACE\tDefinition name is already in use. Saving this..."
+"\tDefinition name is already in use. Saving this\n"
+"definition replaces the existing definition.\n"
+"\n"
+"Do you want to continue?"
+msgstr ""
+"MSG_TODSGN_REPLACE\tLe nom de la définition est déjà utilisé. "
+"L'enregistrement...\tLe nom de la définition est déjà utilisé. "
+"L'enregistrement de cette définition \n"
+"remplace la définition existante.\n"
+"\n"
+"Voulez-vous continuer?"
+
+#: ../../../../build/work/app/help/messages.h:46
+msgid "MSG_SAVE_CHANGES\tDo you want to save the changes made to your Layout?"
+msgstr ""
+"MSG_SAVE_CHANGES\tVoulez-vous enregistrer les modifications apportées à "
+"votre plan?"
+
+#: ../../../../build/work/app/help/messages.h:47
+msgid ""
+"MSG_CARIMP_DUP_COLUMNS\tDuplicate column headers found in Car Import file."
+msgstr ""
+"MSG_CARIMP_DUP_COLUMNS\tIl y a des en-têtes de colonne en double trouvées "
+"dans le fichier d'importation de véhicule."
+
+#: ../../../../build/work/app/help/messages.h:48
+msgid "MSG_EP_ON_PATH\tEndpoint already on Path."
+msgstr "MSG_EP_ON_PATH\tLe point de fin est déjà sur le chemin."
+
+#: ../../../../build/work/app/help/messages.h:49
+#, c-format
+msgid ""
+"MSG_UPGRADE_VERSION1\tFile version %ld is greater than supported...\tFile "
+"version %ld is greater than supported\n"
+"version %d. You need to upgrade %s\n"
+"to at least version %s."
+msgstr ""
+"MSG_UPGRADE_VERSION1\tLa version du fichier %ld est supérieure à celle "
+"supportée ...\tLa version du fichier %ld est supérieure \n"
+"à la version prise en charge %d. Vous devez \n"
+"mettre à niveau %s au moins vers la version %s ."
+
+#: ../../../../build/work/app/help/messages.h:50
+#, c-format
+msgid ""
+"MSG_UPGRADE_VERSION2\tFile version %ld is greater than supported...\tFile "
+"version %ld is greater than supported\n"
+"version %d. You need to upgrade your\n"
+"version of %s"
+msgstr ""
+"MSG_UPGRADE_VERSION2\tLa version du fichier %ld est supérieure à celle "
+"supportée...\tLa version du fichier %ld est supérieure à \n"
+"la version prise en charge %d. Vous devez \n"
+"mettre à jour votre version de %s"
+
+#: ../../../../build/work/app/help/messages.h:51
+#, c-format
+msgid ""
+"MSG_LAYOUT_LINES_SKIPPED\tWhile processing Layout file %s, %d lines were "
+"skipped because they were not recognized."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:52
+#, fuzzy, c-format
+msgid ""
+"MSG_PARAM_UPGRADE_VERSION1\tFile version %ld is greater than supported..."
+"\tFile version %ld is greater than supported\n"
+"version %d. You need to upgrade %s\n"
+"to at least version %s."
+msgstr ""
+"MSG_UPGRADE_VERSION1\tLa version du fichier %ld est supérieure à celle "
+"supportée ...\tLa version du fichier %ld est supérieure \n"
+"à la version prise en charge %d. Vous devez \n"
+"mettre à niveau %s au moins vers la version %s ."
+
+#: ../../../../build/work/app/help/messages.h:53
+#, fuzzy, c-format
+msgid ""
+"MSG_PARAM_UPGRADE_VERSION2\tFile version %ld is greater than supported..."
+"\tFile version %ld is greater than supported\n"
+"version %d. You need to upgrade your\n"
+"version of %s"
+msgstr ""
+"MSG_UPGRADE_VERSION2\tLa version du fichier %ld est supérieure à celle "
+"supportée...\tLa version du fichier %ld est supérieure à \n"
+"la version prise en charge %d. Vous devez \n"
+"mettre à jour votre version de %s"
+
+#: ../../../../build/work/app/help/messages.h:54
+#, c-format
+msgid ""
+"MSG_PARAM_LINES_SKIPPED\tWhile processing Parameter file %s, %d lines were "
+"skipped because they were not recognized."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:55
+msgid ""
+"MSG_MOVE_POINTS_OTHER_SIDE\tFrog angle prevents placement of points. Move "
+"points to opposite side of frog."
+msgstr ""
+"MSG_MOVE_POINTS_OTHER_SIDE\tL'angle du cœur empêche le placement des points. "
+"Déplacez les points sur le côté opposé au cœur."
+
+#: ../../../../build/work/app/help/messages.h:56
+msgid "MSG_NO_ROOM_BTW_TRKS\tInsufficient space between existing stall tracks."
+msgstr ""
+"MSG_NO_ROOM_BTW_TRKS\tEspace insuffisant entre les voies de manœuvre "
+"existantes."
+
+#: ../../../../build/work/app/help/messages.h:57
+#, c-format
+msgid ""
+"MSG_JOIN_DIFFER_ELEV\tJoining tracks with differing elevations (N.NNN)"
+"\tJoining tracks with differing elevations (%0.2f)"
+msgstr ""
+"MSG_JOIN_DIFFER_ELEV\tJonction de voies d’élévation différentes (N.NNN)"
+"\tJonction de voies d’élévation différentes (%0.2f)"
+
+#: ../../../../build/work/app/help/messages.h:58
+msgid "MSG_TRK_DESC_NOT_VISIBLE\tLabel description is hidden"
+msgstr "MSG_TRK_DESC_NOT_VISIBLE\tLa description de l'étiquette est masquée"
+
+#: ../../../../build/work/app/help/messages.h:59
+msgid "MSG_DESC_NOT_VISIBLE\tLabel descriptions not visible"
+msgstr "MSG_DESC_NOT_VISIBLE\tDescriptions d'étiquettes non visibles"
+
+#: ../../../../build/work/app/help/messages.h:60
+msgid "MSG_OBJECT_TOO_SHORT\tLength of object is too short."
+msgstr "MSG_OBJECT_TOO_SHORT\tLa longueur de l'objet est trop courte."
+
+#: ../../../../build/work/app/help/messages.h:61
+#, c-format
+msgid ""
+"MSG_PRINT_MAX_SIZE\tMaximum allowed page size is W x H\tMaximum allowed page "
+"size is %s x %s"
+msgstr ""
+"MSG_PRINT_MAX_SIZE\tLa taille de page maximale autorisée est W x H\tLa "
+"taille de page maximale autorisée est %s x %s"
+
+#: ../../../../build/work/app/help/messages.h:62
+msgid ""
+"MSG_NO_PRINTER_SELECTED\tPlease select a printer from the Print Setup dialog."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:63
+#, c-format
+msgid ""
+"MSG_PRMFIL_NO_CONTENTS\tNew Parameter File has no CONTENTS line: FILENAME."
+"\tNew Parameter File has no CONTENTS line: %s"
+msgstr ""
+"MSG_PRMFIL_NO_CONTENTS\tLe nouveau fichier de paramètres n'a pas de ligne "
+"CONTENTS : FILENAME.\tLe nouveau fichier de paramètres n'a pas de ligne "
+"CONTENTS :%s"
+
+#: ../../../../build/work/app/help/messages.h:64
+msgid ""
+"MSG_NO_CARS\tNo Cars are defined for the current scale....\tNo Cars are "
+"defined for the current scale.\n"
+"\n"
+"Do you want to use the Car Inventory dialog?"
+msgstr ""
+"MSG_NO_CARS\tAucune voiture n'est définie pour l'échelle actuelle ..."
+"\tAucune voiture n'est définie pour l'échelle actuelle.\n"
+"\n"
+"Voulez-vous utiliser la boîte de dialogue Car Inventory ?"
+
+#: ../../../../build/work/app/help/messages.h:65
+msgid ""
+"MSG_NO_CARPROTO\tNo Car Prototypes are defined....\tNo Car Prototypes are "
+"defined.\n"
+"Load a Prototype definition file using the\n"
+"Parameter Files dialog or create a Prototype\n"
+"definition using the Car Prototype dialog."
+msgstr ""
+"MSG_NO_CARPROTO\tAucun prototype de voiture n'est défini ....\tAucun "
+"prototype de voiture n'est défini.\n"
+"Chargez un fichier de définition de prototype à l'aide de la boîte \n"
+"de dialogue Fichiers de paramètres ou créez une définition de \n"
+"prototype à l'aide de la boîte de dialogue Prototype de voiture."
+
+#: ../../../../build/work/app/help/messages.h:66
+msgid "MSG_CARIMP_NO_DATA\tNo data present in Car Import file."
+msgstr ""
+"MSG_CARIMP_NO_DATA\tAucune donnée présente dans le fichier d'importation de "
+"véhicule."
+
+#: ../../../../build/work/app/help/messages.h:67
+msgid "MSG_PRINT_NO_PAGES\tNo pages selected for printing."
+msgstr "MSG_PRINT_NO_PAGES\tAucune page sélectionnée pour l'impression."
+
+#: ../../../../build/work/app/help/messages.h:68
+msgid "MSG_NO_PATH_TO_EP\tNo path between Profile and selected endpoint."
+msgstr ""
+"MSG_NO_PATH_TO_EP\tIl n'y a pas de connexion entre le profil de la grotte et "
+"le point final sélectionné."
+
+#: ../../../../build/work/app/help/messages.h:69
+#, c-format
+msgid ""
+"MSG_PRMFIL_NO_MAP\tNo Parameter File Map for CONTENTS\tNo Parameter File Map "
+"for %s"
+msgstr ""
+"MSG_PRMFIL_NO_MAP\tAucun fichier de paramètre de carte pour CONTENTS\tLe "
+"nouveau fichier de paramètres %s ne peut pas être ouvert"
+
+#: ../../../../build/work/app/help/messages.h:70
+msgid "MSG_NO_SELECTED_TRK\tNo track(s) selected!"
+msgstr "MSG_NO_SELECTED_TRK\tAucune voie(s) sélectionnée!"
+
+#: ../../../../build/work/app/help/messages.h:71
+msgid ""
+"MSG_NO_EMPTY_LAYER\tNo layer was found that has no contents, so the module "
+"can not be imported"
+msgstr ""
+"MSG_NO_EMPTY_LAYER\tAucune couche n'a été trouvée sans contenu, le module ne "
+"peut donc pas être importé"
+
+#: ../../../../build/work/app/help/messages.h:72
+#, c-format
+msgid ""
+"MSG_NO_TURNOUTS_AVAILABLE\tNo Turnouts|Structures are available.\tNo %s are "
+"available."
+msgstr ""
+"MSG_NO_TURNOUTS_AVAILABLE\tAucun aiguillages|bâtiments sont disponibles."
+"\tAucun %s n'est disponible."
+
+#: ../../../../build/work/app/help/messages.h:73
+msgid ""
+"MSG_CARDESC_VALUE_ZERO\tNumeric values on the Car Description...\tNumeric "
+"values on the Car Description\n"
+"dialog must be greater than 0."
+msgstr ""
+"MSG_CARDESC_VALUE_ZERO\tValeurs numériques de la description de véhicule…"
+"\tValeurs numériques de la description de véhicule\n"
+"Doit être supérieur à 0."
+
+#: ../../../../build/work/app/help/messages.h:74
+msgid "MSG_MOVE_OUT_OF_BOUNDS\tObject has moved beyond room boundaries."
+msgstr "MSG_MOVE_OUT_OF_BOUNDS\tL'objet a dépassé les limites de la pièce."
+
+#: ../../../../build/work/app/help/messages.h:75
+msgid ""
+"MSG_PARALLEL_SEP_GTR_0\tParallel separation must be greater than 0, or the "
+"new guage must be different than the old."
+msgstr ""
+"MSG_PARALLEL_SEP_GTR_0\tLa séparation parallèle doit être supérieure à 0, ou "
+"le nouveau gabarit doit être différent de l'ancien."
+
+#: ../../../../build/work/app/help/messages.h:76
+msgid ""
+"MSG_CARPART_DUPNAME\tPart Number for this Manufacturer already exists...."
+"\tPart Number for this Manufacturer already exists.\n"
+"\n"
+"Do you want to update it?"
+msgstr ""
+"MSG_CARPART_DUPNAME\tLe numéro de pièce de ce fabricant existe déjà....\tLe "
+"numéro de pièce de ce fabricant existe déjà.\n"
+"\n"
+"Voulez-vous le mettre à jour?"
+
+#: ../../../../build/work/app/help/messages.h:77
+#, c-format
+msgid ""
+"MSG_PLAYBACK_LISTENTRY\tPlayback: Cannot find list entry: NAME\tPlayback: "
+"Cannot find list entry: %s"
+msgstr ""
+"MSG_PLAYBACK_LISTENTRY\tLecture : entrée de liste introuvable : NOM"
+"\tLecture : entrée de liste introuvable : %s"
+
+#: ../../../../build/work/app/help/messages.h:78
+#, c-format
+msgid ""
+"MSG_PLAYBACK_VERSION_UPGRADE\tPlayback file version %ld is...\tPlayback file "
+"version %ld is\n"
+"greater than supported version %d\n"
+"You need to upgrade your version of %s"
+msgstr ""
+"MSG_PLAYBACK_VERSION_UPGRADE\tLa version du fichier de lecture %ld est ..."
+"\tLa version du fichier de lecture %ld est\n"
+"supérieure à la version prise en charge %d\n"
+"Vous devez mettre à jour votre version de %s"
+
+#: ../../../../build/work/app/help/messages.h:79
+#, c-format
+msgid ""
+"MSG_DOMOUSE_BAD_OP\tPlayback: unknown action NNN\tPlayback: unknown action %d"
+msgstr ""
+"MSG_DOMOUSE_BAD_OP\tLecture : action inconnue NNN\tLecture : action inconnue "
+"%d"
+
+#: ../../../../build/work/app/help/messages.h:80
+msgid "MSG_MOVE_POINTS_AWAY_CLOSE\tPoints are to close to frog; move away."
+msgstr ""
+"MSG_MOVE_POINTS_AWAY_CLOSE\tLes points sont trop proches du cœur; s'éloigner."
+
+#: ../../../../build/work/app/help/messages.h:81
+msgid "MSG_POLY_SHAPES_3_SIDES\tPoly shapes must have at least 3 sides."
+msgstr ""
+"MSG_POLY_SHAPES_3_SIDES\tLes Polyformes doivent avoir au moins 3 côtés."
+
+#: ../../../../build/work/app/help/messages.h:82
+msgid "MSG_POLY_MULTIPLE_SELECTED\tCan't delete multiple points at once"
+msgstr ""
+"MSG_POLY_MULTIPLE_SELECTED\tImpossible de supprimer plusieurs points à la "
+"fois"
+
+#: ../../../../build/work/app/help/messages.h:83
+msgid ""
+"MSG_CARPROTO_DUPNAME\tPrototype name already exists....\tPrototype name "
+"already exists.\n"
+"\n"
+"Do you want to update it?"
+msgstr ""
+"MSG_CARPROTO_DUPNAME\tLe nom du prototype existe déjà....\tLe nom du "
+"prototype existe déjà.\n"
+"\n"
+"Voulez-vous le mettre à jour?"
+
+#: ../../../../build/work/app/help/messages.h:84
+msgid "MSG_RADIUS_GTR_0\tRadius must be greater than 0."
+msgstr "MSG_RADIUS_GTR_0\tLe rayon doit être supérieur à 0."
+
+#: ../../../../build/work/app/help/messages.h:85
+msgid "MSG_RADIUS_GTR_10000\tRadius must be less than 10000."
+msgstr "MSG_RADIUS_GTR_10000\tLe rayon doit être inférieur à 10000."
+
+#: ../../../../build/work/app/help/messages.h:86
+msgid ""
+"MSG_RADIUS_TOO_BIG\tThe Circle or Helix will not fit within the layouts room "
+"parameters (Height and Width)."
+msgstr ""
+"MSG_RADIUS_TOO_BIG\tLe cercle ou l'hélicoïde ne rentre pas dans le plan de "
+"la pièce (hauteur et largeur)."
+
+#: ../../../../build/work/app/help/messages.h:87
+#, c-format
+msgid ""
+"MSG_RESCALE_TOO_BIG\tRescaled tracks do not fit within layouts room "
+"parameters...\tRescaled tracks do not fit within layouts room parameters\n"
+"(Height and width). The layouts room parameters should be\n"
+"set to at least %s by %s."
+msgstr ""
+"MSG_RESCALE_TOO_BIG\tLes voies récemment mises à l'échelle ne rentrent pas "
+"dans la pièce...\tLes voies récemment mises à l'échelle ne rentrent pas dans "
+"la pièce\n"
+"(Longueur et largeur). La taille requise est\n"
+"au moins %s sur %s."
+
+#: ../../../../build/work/app/help/messages.h:88
+msgid ""
+"MSG_CARIMP_MISSING_COLUMNS\tRequired column headers missing from Car Import "
+"file."
+msgstr ""
+"MSG_CARIMP_MISSING_COLUMNS\tLes en-têtes de colonne requises sont absentes "
+"du fichier d'importation de véhicule."
+
+#: ../../../../build/work/app/help/messages.h:89
+#, c-format
+msgid ""
+"MSG_2ND_TRK_NOT_SEL_UNSEL\tSecond track must be selected|unselected\tSecond "
+"track must be %s."
+msgstr ""
+"MSG_2ND_TRK_NOT_SEL_UNSEL\t La deuxième voie peut être sélectionnée ou non\t "
+"La deuxième voie doit être %s."
+
+#: ../../../../build/work/app/help/messages.h:90
+msgid "MSG_OUT_OF_BOUNDS\tSelected page is out of bounds."
+msgstr "MSG_OUT_OF_BOUNDS\tLa page sélectionnée est hors de portée."
+
+#: ../../../../build/work/app/help/messages.h:91
+msgid "MSG_SEL_POS_FIRST\tSelect position prior to entering Text."
+msgstr "MSG_SEL_POS_FIRST\tSélectionnez la position avant de saisir du texte."
+
+#: ../../../../build/work/app/help/messages.h:92
+msgid ""
+"MSG_CARPROTO_BADSEGS\tSelected shapes must define a rectangular area ..."
+"\tSelected shapes must define a rectangular\n"
+"area with length greater than height."
+msgstr ""
+"MSG_CARPROTO_BADSEGS\tLes formes sélectionnées doivent définir une zone "
+"rectangulaire ...\tLes formes sélectionnées doivent définir une zone "
+"rectangulaire\n"
+"zone de longueur supérieure à la hauteur."
+
+#: ../../../../build/work/app/help/messages.h:93
+msgid ""
+"MSG_TOO_FAR_APART_DIVERGE\tSelected tracks deviate too much or are too far "
+"apart from each other."
+msgstr ""
+"MSG_TOO_FAR_APART_DIVERGE\tLes voies sélectionnées s'écartent trop ou sont "
+"trop éloignées les unes des autres."
+
+#: ../../../../build/work/app/help/messages.h:94
+msgid "MSG_COMMAND_DISABLED\tSpecified command disabled."
+msgstr "MSG_COMMAND_DISABLED\tCommande spécifiée désactivée."
+
+#: ../../../../build/work/app/help/messages.h:95
+msgid "MSG_SPLIT_POS_BTW_MERGEPTS\tSplit position between Turnout Points"
+msgstr ""
+"MSG_SPLIT_POS_BTW_MERGEPTS\tLe point de séparation est situé entre les "
+"points de l'aiguillage"
+
+#: ../../../../build/work/app/help/messages.h:96
+msgid "MSG_SPLIT_PATH_NOT_UNIQUE\tSplit position not on unique path"
+msgstr "MSG_SPLIT_PATH_NOT_UNIQUE\tLe point de séparation n'est pas clair"
+
+#: ../../../../build/work/app/help/messages.h:97
+#, c-format
+msgid ""
+"MSG_CARIMP_MISSING_DIMS\tThe following car has no dimensions and a...\tThe "
+"following car has no dimensions and a\n"
+"Car Part description can not be found.\n"
+"\n"
+"%s\n"
+"\n"
+"Do you wish to continue importing other Cars?"
+msgstr ""
+"MSG_CARIMP_MISSING_DIMS\tLe véhicule suivant n'a pas de dimensions et une..."
+"\tLe véhicule suivant n'a pas de dimensions et une\n"
+"Une description de véhicule n'existe pas.\n"
+"\n"
+"%s\n"
+"\n"
+"Souhaitez-vous continuer à importer d'autres véhicule ?"
+
+#: ../../../../build/work/app/help/messages.h:98
+#, c-format
+msgid ""
+"MSG_CARIMP_MISSING_PARTNO\tThe following car has no Part Number...\tThe "
+"following car has no Part Number\n"
+"\n"
+"%s\n"
+"\n"
+"Do you wish to continue importing other Cars?"
+msgstr ""
+"MSG_CARIMP_MISSING_PARTNO\tLe véhicule suivant n'a pas de numéro de pièce..."
+"\tLe véhicule suivant n'a pas de numéro de pièce\n"
+"\n"
+"%s\n"
+"\n"
+"Souhaitez-vous continuer à importer d'autres matériels roulants ?"
+
+#: ../../../../build/work/app/help/messages.h:99
+#, c-format
+msgid ""
+"MSG_CARIMP_IGNORED_COLUMN\tThe following column in the Car Import file will "
+"be ignored:...\tThe following column in the Car Import file will be "
+"ignored:\n"
+"\n"
+"%s"
+msgstr ""
+"MSG_CARIMP_IGNORED_COLUMN\tLa colonne suivante du fichier d'importation de "
+"véhicule sera ignorée :...\tLa colonne suivante du fichier d'importation de "
+"véhicule sera ignorée :\n"
+"\n"
+"%s"
+
+#: ../../../../build/work/app/help/messages.h:100
+msgid ""
+"MSG_CANT_MOVE_UNDER_TRAIN\tThe position of a turnout or turntable cannot be "
+"changed while occupied by a train."
+msgstr ""
+"MSG_CANT_MOVE_UNDER_TRAIN\tLa position d'un aiguillage ou d'un pont tournant "
+"ne peut pas être modifiée tant qu'elle est occupée par un train."
+
+#: ../../../../build/work/app/help/messages.h:101
+msgid ""
+"MSG_STRUCT_NO_STRUCTS\tThere are no structures to choose from in the "
+"structure...\tThere are no structures to choose from in the structure\n"
+"selection list. Please check your SCALE, select the\n"
+"<File|Parameter Files> menu to load a Parameter File or\n"
+"create a new Structure with the Group command."
+msgstr ""
+"MSG_STRUCT_NO_STRUCTS\tDans la liste des bâtiments il n'y a pas de "
+"bâtiments...\tDans la liste des bâtiments il n'y a pas de bâtiments \n"
+"pouvant être sélectionnés. Vérifiez l’échelle, sélectionnez \n"
+"un fichier de paramètres dans l’option de menu \n"
+"<Fichier|Fichiers de paramètres> ou créez un nouveau \n"
+"bâtiment à l’aide de la commande Grouper."
+
+#: ../../../../build/work/app/help/messages.h:102
+msgid ""
+"MSG_TURNOUT_NO_TURNOUT\tThere are no turnouts to choose from in the "
+"turnout...\tThere are no turnouts to choose from in the turnout\n"
+"selection list. Please check your SCALE, select the\n"
+"<Manage|Turnout Designer> menu to enter a new turnout\n"
+"or select the <File|Parameter Files> menu to load a\n"
+"Parameter File"
+msgstr ""
+"MSG_TURNOUT_NO_TURNOUT\tIl n'y a pas d'aiguillage dans la sélection "
+"d'aiguillage ...\tIl n'y a pas d'aiguillage dans la sélection d'aiguillage \n"
+"qui puisse être sélectionné. Vérifiez votre ECHELLE, \n"
+"sélectionnez le menu <Gérer|Conception d'aiguillages> \n"
+"pour entrer un nouvel aiguillage ou sélectionnez le menu \n"
+"<Fichier|Fichiers de paramètres> pour charger un autre \n"
+"fichier de paramètres"
+
+#: ../../../../build/work/app/help/messages.h:103
+msgid "MSG_NO_UNCONN_EP\tThere are no unconnected end points for this track"
+msgstr ""
+"MSG_NO_UNCONN_EP\tIl n'y a pas de points de fin non connectés pour cette voie"
+
+#: ../../../../build/work/app/help/messages.h:104
+msgid "MSG_PULL_FEW_SECTIONS\tThere are too few sections in this loop."
+msgstr "MSG_PULL_FEW_SECTIONS\tIl y a trop peu de sections dans cette boucle."
+
+#: ../../../../build/work/app/help/messages.h:105
+msgid "MSG_NO_REDO\tThere is nothing to redo!"
+msgstr "MSG_NO_REDO\tIl n'y a rien à refaire!"
+
+#: ../../../../build/work/app/help/messages.h:106
+msgid "MSG_NO_UNDO\tThere is nothing to undo!"
+msgstr "MSG_NO_UNDO\tIl n'y a rien à défaire!"
+
+#: ../../../../build/work/app/help/messages.h:107
+msgid "MSG_TOOMANYSEGSINGROUP\tToo many segments in Group."
+msgstr "MSG_TOOMANYSEGSINGROUP\tTrop de segments dans le groupe."
+
+#: ../../../../build/work/app/help/messages.h:108
+msgid "MSG_CANNOT_CHANGE\tTrack cannot be changed."
+msgstr "MSG_CANNOT_CHANGE\tLa voie ne peut pas être modifiée."
+
+#: ../../../../build/work/app/help/messages.h:109
+msgid "MSG_POINT_INSIDE_TURNTABLE\tTrack endpoint is within turntable radius."
+msgstr ""
+"MSG_POINT_INSIDE_TURNTABLE\tLe point de fin de la voie est à l'intérieur du "
+"pont tournant."
+
+#: ../../../../build/work/app/help/messages.h:110
+msgid ""
+"MSG_MOVE_POINTS_AWAY_NO_INTERSECTION\tTrack intersection not possible; move "
+"points away from frog."
+msgstr ""
+"MSG_MOVE_POINTS_AWAY_NO_INTERSECTION\tIntersection de la voie impossible; "
+"éloignez les points du cœur."
+
+#: ../../../../build/work/app/help/messages.h:111
+#, c-format
+msgid ""
+"MSG_TRK_TOO_SHORT\tTrack is too short by N.NNN\t%strack is too short by %0.3f"
+msgstr ""
+"MSG_TRK_TOO_SHORT\tLa voie est trop courte autour de N.NNN\tLa voie %s est "
+"trop courte de %0.3f"
+
+#: ../../../../build/work/app/help/messages.h:112
+#, c-format
+msgid ""
+"MSG_RADIUS_LSS_EASE_MIN\tTrack radius (N.NNN) is smaller than easement "
+"minimum (N.NNN).\tTrack radius (%s) is smaller than easement minimum (%s)."
+msgstr ""
+"MSG_RADIUS_LSS_EASE_MIN\tLe rayon de la voie (N.NNN) est inférieur à l'arc "
+"de transition minimum (N.NNN).\tLe rayon de la voie (%s) est inférieur à "
+"l'arc de transition minimum (%s)."
+
+#: ../../../../build/work/app/help/messages.h:113
+msgid ""
+"MSG_CANT_MODIFY_FROZEN_TRK\tTracks in a frozen layer cannot be modified."
+msgstr ""
+"MSG_CANT_MODIFY_FROZEN_TRK\tLes voies d'un calque gelé ne peuvent pas être "
+"modifiées."
+
+#: ../../../../build/work/app/help/messages.h:114
+msgid "MSG_CANT_MODIFY_MODULE_TRK\tTracks in a module cannot be modified."
+msgstr ""
+"MSG_CANT_MODIFY_MODULE_TRK\tLes voies d'un module ne peuvent pas être "
+"modifiées."
+
+#: ../../../../build/work/app/help/messages.h:115
+msgid ""
+"MSG_SEGMENTS_DIFFER\tTurnout definition contains non-track segments...."
+"\tTurnout definition contains non-track segments.\n"
+"\n"
+"Do you want to include them in this update?"
+msgstr ""
+"MSG_SEGMENTS_DIFFER\tLa définition d'aiguillage n'inclut pas que des "
+"voies....\tLa définition d'aiguillage n'inclut pas que des voies.\n"
+"\n"
+"Voulez-vous les inclure dans cette mise à jour ?"
+
+#: ../../../../build/work/app/help/messages.h:116
+msgid "MSG_TURNTABLE_DIAM_GTR_0\tTurntable diameter must greater than 0."
+msgstr ""
+"MSG_TURNTABLE_DIAM_GTR_0\tLe diamètre du pont tournant doit être supérieur à "
+"0."
+
+#: ../../../../build/work/app/help/messages.h:117
+#, c-format
+msgid ""
+"MSG_UNDO_ASSERT\tUndo assertion failure %s:%d...\tUndo assertion failure %s:%"
+"d\n"
+"Val = %ld(%lx)\n"
+"%s\n"
+"Please report this error to the XTrackCAD project development team at "
+"SourceForge."
+msgstr ""
+"MSG_UNDO_ASSERT\tAnnuler l'assertion d'échec %s:%d...\tAnnuler l'assertion "
+"d'échec %s:%d\n"
+"Val = %ld(%lx)\n"
+"%s\n"
+"Signalez cette erreur à l'équipe de développement du projet XTrackCAD de "
+"SourceForge."
+
+#: ../../../../build/work/app/help/messages.h:118
+#, c-format
+msgid ""
+"MSG_PROG_CORRUPTED\tCritical file damaged!...\tCritical file damaged!\n"
+"\n"
+"%s is corrupt.\n"
+"\n"
+"Please reinstall software."
+msgstr ""
+"MSG_PROG_CORRUPTED\tFichier critique endommagé!...\tFichier critique "
+"endommagé!\n"
+"\n"
+"% s est corrompu.\n"
+"\n"
+"Veuillez réinstaller le logiciel."
+
+#: ../../../../build/work/app/help/messages.h:119
+#, c-format
+msgid ""
+"MSG_ENTERED_STRING_TRUNCATED\tThe entered text is too long. Maximum length "
+"is %d."
+msgstr ""
+"MSG_ENTERED_STRING_TRUNCATED\tLe texte saisi est trop long. La longueur "
+"maximale est %d."
+
+#: ../../../../build/work/app/help/messages.h:120
+#, c-format
+msgid "MSG_PT_IS_NOT_TRK\t[X Y] is not a track\t[%s %s] is not a track."
+msgstr ""
+"MSG_PT_IS_NOT_TRK\t[X Y] n'est pas une voie\t[%s %s] n'est pas une voie."
+
+#: ../../../../build/work/app/help/messages.h:121
+msgid ""
+"MSG_BITMAP_SIZE_WARNING\tYou have specified a large Bitmap....\tYou have "
+"specified a large Bitmap.\n"
+"\n"
+"Are you sure you want to continue?"
+msgstr ""
+"MSG_BITMAP_SIZE_WARNING\tVous avez spécifié un bitmap volumineux....\tVous "
+"avez spécifié un bitmap volumineux.\n"
+"\n"
+"Etes-vous sur de vouloir continuer ?"
+
+#: ../../../../build/work/app/help/messages.h:122
+#, c-format
+msgid "Are you sure you want to delete these %d car(s)?"
+msgstr "Êtes-vous sûr de vouloir supprimer ces %d matériels roulants ?"
+
+#: ../../../../build/work/app/help/messages.h:123
+#, c-format
+msgid ""
+"Cannot open %s file:\n"
+"%s:%s"
+msgstr ""
+"Impossible d'ouvrir le fichier %s :\n"
+"%s : %s"
+
+#: ../../../../build/work/app/help/messages.h:124
+#, c-format
+msgid "Cannot create directory: %s - %s"
+msgstr "Impossible de créer le répertoire : %s -%s"
+
+#: ../../../../build/work/app/help/messages.h:125
+#, c-format
+msgid "Cannot open directory: %s"
+msgstr "Impossible d'ouvrir le répertoire : %s"
+
+#: ../../../../build/work/app/help/messages.h:126
+#, c-format
+msgid "Path for deletion is not a directory: %s"
+msgstr "Le chemin de suppression n'est pas un répertoire : %s"
+
+#: ../../../../build/work/app/help/messages.h:127
+#, c-format
+msgid "Open failed for directory: %s"
+msgstr "Échec de l'ouverture du répertoire : %s"
+
+#: ../../../../build/work/app/help/messages.h:128
+#, c-format
+msgid "Can't add directory record %s to zip - %s"
+msgstr "Impossible d'ajouter l'enregistrement du répertoire %s au zip -%s"
+
+#: ../../../../build/work/app/help/messages.h:129
+#, c-format
+msgid "Can't add file record %s to zip at %s - %s"
+msgstr "Impossible d'ajouter l'enregistrement du fichier %s au zip %s - %s"
+
+#: ../../../../build/work/app/help/messages.h:130
+#, c-format
+msgid "Can't create zip %s - %s"
+msgstr "Impossible de créer le zip %s - %s"
+
+#: ../../../../build/work/app/help/messages.h:131
+#, c-format
+msgid "Close failure for zip %s - %s"
+msgstr "Échec de fermeture pour le zip %s - %s"
+
+#: ../../../../build/work/app/help/messages.h:132
+#, c-format
+msgid "Rename failure for zip from %s to %s - %s"
+msgstr "Échec de changement de nom pour le zip de %s à %s - %s"
+
+#: ../../../../build/work/app/help/messages.h:133
+#, c-format
+msgid "Open failure for zip %s - %s"
+msgstr "Échec d'ouverture du zip %s -%s"
+
+#: ../../../../build/work/app/help/messages.h:134
+#, c-format
+msgid "Index failure for zip %s - %s"
+msgstr "Echec de l'index pour les zip %s - %s"
+
+#: ../../../../build/work/app/help/messages.h:135
+#, c-format
+msgid "Open read file failure %s %s"
+msgstr "Échec de l'ouverture du fichier pour la lecture de %s %s"
+
+#: ../../../../build/work/app/help/messages.h:136
+#, c-format
+msgid "Open file in zip failure %s %s"
+msgstr "Erreur lors de l'ouverture du fichier dans le zip %s %s"
+
+#: ../../../../build/work/app/help/messages.h:137
+#, c-format
+msgid "Unlink failed for: %s"
+msgstr "La déconnexion a échoué pour : %s"
+
+#: ../../../../build/work/app/help/messages.h:138
+#, c-format
+msgid "Remove Directory failed for: %s"
+msgstr "Échec de la suppression du répertoire pour : %s"
+
+#: ../../../../build/work/app/help/messages.h:139
+#, c-format
+msgid "Cannot save archive to %s from directory: %s"
+msgstr "Impossible d'enregistrer l'archive dans %s à partir du répertoire : %s"
+
+#: ../../../../build/work/app/help/messages.h:140
+#, c-format
+msgid "Cannot save manifest file to %s"
+msgstr "Impossible d'enregistrer le fichier manifeste dans %s"
+
+#: ../../../../build/work/app/help/messages.h:141
+#, c-format
+msgid "Cannot open manifest file %s"
+msgstr "Impossible d'ouvrir le fichier manifeste %s"
+
+#: ../../../../build/work/app/help/messages.h:142
+#, c-format
+msgid "Cannot unpack file: %s for file: %s in directory: %s"
+msgstr ""
+"Impossible de décompresser le fichier : %s pour le fichier : %s dans le "
+"répertoire : %s"
+
+#: ../../../../build/work/app/help/messages.h:143
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Impossible d'ouvrir le fichier %s"
+
+#: ../../../../build/work/app/help/messages.h:144
+#, c-format
+msgid "Cannot copy file %s into directory %s"
+msgstr "Impossible de copier le fichier %s dans le répertoire %s"
+
+#: ../../../../build/work/app/help/messages.h:145
+#, c-format
+msgid "Unrecognized Option: %s"
+msgstr "Option non reconnue : %s"
+
+#: ../../../../build/work/app/help/messages.h:146
+#, c-format
+msgid ""
+"End-Of-Line is unexpected in a quoted field.\n"
+"%s\n"
+"\n"
+"Do you want to continue reading the file?"
+msgstr ""
+"Fin de voie inattendue entre guillemets.\n"
+"%s\n"
+"\n"
+"Voulez-vous continuer à lire le fichier?"
+
+#: ../../../../build/work/app/help/messages.h:147
+#, c-format
+msgid ""
+"A comma was expected after this quoted field.\n"
+"%s\n"
+"\n"
+"Do you want to continue reading the file?"
+msgstr ""
+"Une virgule attendue après ce champ est manquante.\n"
+"%s\n"
+"\n"
+"Voulez-vous continuer à charger le fichier?"
+
+#: ../../../../build/work/app/help/messages.h:148
+#, c-format
+msgid ""
+"Error \\\\\"%s\\\\\" occurred while writing %s.\n"
+"Please check disk space and system status."
+msgstr ""
+"Une erreur \\\\\"%s\\\\\" s'est produite lors de l'écriture de %s.\n"
+"Veuillez vérifier l'espace disque et l'état du système."
+
+#: ../../../../build/work/app/help/messages.h:149
+#, c-format
+msgid ""
+"At least one path for the Turnout T%d does not\n"
+"terminate on an endpoint. Such a track cannot be grouped.\n"
+"The track has been unselected."
+msgstr ""
+"Au moins un chemin pour l'aiguillage T%d ne se\n"
+"termine pas sur un bout. Une telle voie ne peut pas être groupée.\n"
+"La voie a été désélectionnée."
+
+#: ../../../../build/work/app/help/messages.h:150
+msgid "inv-pathEndTrk on Path."
+msgstr "tracé invalide de fin de voie."
+
+#: ../../../../build/work/app/help/messages.h:151
+msgid "inv-pathStartTrk on Path"
+msgstr "tracé invalide de début de voie"
+
+#: ../../../../build/work/app/help/messages.h:152
+#, c-format
+msgid "%s:%d- %s"
+msgstr "%s:%d- %s"
+
+#: ../../../../build/work/app/help/messages.h:153
+msgid "pathEndTrk not on Path."
+msgstr "tracé de fin de voie invalide."
+
+#: ../../../../build/work/app/help/messages.h:154
+msgid "pathStartTrk not on Path."
+msgstr "tracé invalide de début de voie."
+
+#: ../../../../build/work/app/help/messages.h:155
+msgid ""
+"The tracks cannot be connected together.\n"
+"\n"
+"Try changing some tracks for a closer fit\n"
+"or increase the Connection Angle value on\n"
+"the Preferences dialog."
+msgstr ""
+"Les voies ne peuvent pas être connectées ensemble.\n"
+"\n"
+"Essayez de changer certaines voies pour un ajustement plus serré\n"
+"ou augmentez la valeur Angle de connexion sur\n"
+"la boîte de dialogue \"Options|Préférences\"."
+
+#: ../../../../build/work/app/help/messages.h:156
+msgid ""
+"The tracks cannot be connected together.\n"
+"\n"
+"Try changing some tracks for a closer fit\n"
+"or increase the Connection Distance and\n"
+"Angle values on the Preferences dialog"
+msgstr ""
+"Les voies ne peuvent pas être connectées ensemble.\n"
+"\n"
+"Essayez de changer certaines voies pour un ajustement plus serré\n"
+"ou augmentez la distance de connexion et\n"
+"Valeurs d'angle dans la boîte de dialogue \"Options|Préférences\""
+
+#: ../../../../build/work/app/help/messages.h:157
+msgid ""
+"The tracks cannot be connected together.\n"
+"\n"
+"Try changing some tracks for a closer fit\n"
+"or increase the Connection Distance"
+msgstr ""
+"Les voies ne peuvent pas être connectées ensemble.\n"
+"\n"
+"Essayez de changer certaines voies pour un ajustement plus serré\n"
+"ou augmentez la distance de connexion sur\n"
+"la boîte de dialogue \"Options|Préférences\""
+
+#: ../../../../build/work/app/help/messages.h:158
+msgid ""
+"The first track for the Align\n"
+"Rotate command must be Selected."
+msgstr ""
+"Première voie pour \"Alignement\n"
+"La commande \"Rotation\" doit être sélectionnée."
+
+#: ../../../../build/work/app/help/messages.h:159
+msgid ""
+"The second track for the Align\n"
+"Rotate command must be Unselected."
+msgstr ""
+"La deuxième voie pour l'Aligner\n"
+"La commande de rotation doit être désélectionnée."
+
+#: ../../../../build/work/app/help/messages.h:160
+msgid "Too many selected tracks, drawing tracks as End Point."
+msgstr "Trop de voies sélectionnées, seuls les points de fin sont affichés."
+
+#: ../../../../build/work/app/help/messages.h:161
+msgid "Select an endpoint between two tracks."
+msgstr "Sélectionnez un point de fin entre deux voies."
+
+#: ../../../../build/work/app/help/messages.h:162
+msgid ""
+"According to values that have been entered the diverging\n"
+"track does not connect with the tangent track. Please\n"
+"check the values entered and try again. Check the angle\n"
+"is entered as a frog number or in degrees as specified\n"
+"by Angle Mode radio buttons."
+msgstr ""
+"Avec les valeurs entrées, la voie divergente ne se connecte \n"
+"pas à la voie tangente. Svp vérifiez les valeurs saisies et \n"
+"réessayez. Vérifiez que l'angle est entré en numéro de \n"
+"cœur ou en degrés, comme spécifié par les boutons \n"
+"radio du mode Angle."
+
+#: ../../../../build/work/app/help/messages.h:163
+msgid "Moved before the end of the turnout"
+msgstr "Déplacé avant la fin de l'aiguillage"
+
+#: ../../../../build/work/app/help/messages.h:164
+msgid ""
+"The Coupled Length must be greater than the Car Length,\n"
+"and the Coupler Length must be greater than 0."
+msgstr ""
+"La longueur attelée doit être supérieure à la longueur du chaudron,\n"
+"et la longueur de l'attelage doit être supérieure à 0."
+
+#: ../../../../build/work/app/help/messages.h:165
+msgid ""
+"The Car Length value must be greater\n"
+"than the Car Width value."
+msgstr ""
+"La longueur du véhicule doit \n"
+"être supérieure à sa largeur."
+
+#: ../../../../build/work/app/help/messages.h:166
+msgid ""
+"The specified Index is already in use.\n"
+"The Index will be updated to the next available value."
+msgstr ""
+"Le numéro d'index spécifié est déjà pris.\n"
+"Le numéro d'index est mis à jour avec la valeur libre suivante."
+
+#: ../../../../build/work/app/help/messages.h:167
+msgid ""
+"You have changed values for this object.\n"
+"\n"
+"Are you sure you want to Close?"
+msgstr ""
+"Vous avez apporté des modifications à cet objet\n"
+"\n"
+"Voulez-vous vraiment fermer cette boîte de dialogue?"
+
+#: ../../../../build/work/app/help/messages.h:168
+#, c-format
+msgid ""
+"File version %ld is lower than the minimum\n"
+"supported version %d. You need to update your\n"
+"layout file using an older version of %s"
+msgstr ""
+"La version du fichier %ld est plus ancienne que \n"
+"plus ancienne celle prise en charge %d. Vous \n"
+"devez mettre à jour votre fichier du projet \n"
+"utilisant une ancienne version de %s"
+
+#: ../../../../build/work/app/help/messages.h:169
+#, fuzzy, c-format
+msgid ""
+"File version %ld is lower than the minimum\n"
+"supported version %d.This parameter file will only work using an older "
+"version of %s"
+msgstr ""
+"La version du fichier %ld est plus ancienne que \n"
+"plus ancienne celle prise en charge %d. Vous \n"
+"devez mettre à jour votre fichier du projet \n"
+"utilisant une ancienne version de %s"
+
+#: ../../../../build/work/app/help/messages.h:170
+#, c-format
+msgid ""
+"%s cannot read the demo file:\n"
+"%s"
+msgstr ""
+"%s ne peut pas lire le fichier de démonstration:\n"
+"%s"
+
+#: ../../../../build/work/app/help/messages.h:171
+#, c-format
+msgid "doDemo: bad number (%d)"
+msgstr "doDemo : nombre invalide (%d)"
+
+#: ../../../../build/work/app/help/messages.h:172
+msgid "Playback TIMEEND without TIMESTART"
+msgstr "TIMEEND en lecture sans TIMESTART"
+
+#: ../../../../build/work/app/help/messages.h:173
+#, c-format
+msgid ""
+"Unknown playback command (%d)\n"
+"%s"
+msgstr ""
+"Commande de lecture inconnue (%d)\n"
+"%s"
+
+#: ../../../../build/work/app/help/messages.h:174
+#, c-format
+msgid ""
+"Playback file version %ld is lower than the\n"
+"minimum supported version %d.\n"
+"You need to update your layout file using an\n"
+"older version of %s"
+msgstr ""
+"La version du fichier de lecture %ld est inférieure \n"
+"à la version minimale prise en charge %d.\n"
+"Vous devez mettre à jour votre fichier de plan \n"
+"en utilisant une ancienne version de %s"
+
+#: ../../../../build/work/app/help/messages.h:175
+#, c-format
+msgid "Scale index (%d) is not valid"
+msgstr "L'indice d'échelle (%d) n'est pas valide"
+
+#: ../../../../build/work/app/help/messages.h:176
+#, c-format
+msgid ""
+"Scale %s is not valid\n"
+"Please check your %s.xtq file"
+msgstr ""
+"L'échelle %s n'est pas valide\n"
+"Veuillez vérifier votre fichier %s.xtq"
+
+#: ../../../../build/work/app/help/messages.h:177
+msgid "Cannot extend a helix"
+msgstr "Impossible d'étendre une hélicoïde"
+
+#: ../../../../build/work/app/help/messages.h:178
+msgid "Cannot trim a helix"
+msgstr "Impossible de couper une hélicoïde"
+
+#: ../../../../build/work/app/help/messages.h:179
+msgid "Ignore further audit notices?"
+msgstr "Ignorer les autres indications de protocole?"
+
+#: ../../../../build/work/app/help/messages.h:180
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: ../../../../build/work/app/help/messages.h:181
+msgid "Audit Abort?"
+msgstr "Abandonner la vérification ?"
+
+#: ../../../../build/work/app/help/messages.h:182
+msgid "Write Audit File?"
+msgstr "Écrire un fichier journal?"
+
+#: ../../../../build/work/app/help/messages.h:183
+#, c-format
+msgid "checkTrackLength: Short track length = %0.3f"
+msgstr "vérifier la longueur de voie : longueur voie courte =%0.3f"
+
+#: ../../../../build/work/app/help/messages.h:184
+#, c-format
+msgid "checkTrackLength: unknown type: %d"
+msgstr "vérifier la longueur de voie : type inconnu :%d"
+
+#: ../../../../build/work/app/help/messages.h:185
+#, c-format
+msgid "connectTracks: T%d[%d] T%d[%d] d=%0.3f a=%0.3f"
+msgstr "connecter des voies : T%d[%d] T%d[%d] d=%0.3f a=%0.3f"
+
+#: ../../../../build/work/app/help/messages.h:186
+#, c-format
+msgid "GetAngleAtPoint: bad type(%d) for T(%d)"
+msgstr "Obtenir l'angle à un point : type incorrect (%d) pour T (%d)"
+
+#: ../../../../build/work/app/help/messages.h:187
+#, c-format
+msgid "joinTracks: invalid track type=%d"
+msgstr "raccorder des voies : type de voie non valide =%d"
+
+#: ../../../../build/work/app/help/messages.h:188
+#, c-format
+msgid "resolveIndex: T%d[%d]: T%d doesn\\\\'t exist"
+msgstr "revoir l'index : T%d[%d] : T%d n'existe\\\\ pas"
+
+#: ../../../../build/work/app/help/messages.h:189
+msgid "Moved beyond the end of the track"
+msgstr "Déplacé au-delà de la fin de voie"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:9
+msgid "Invokes online help for this dialog"
+msgstr "Ouvre l'aide en ligne pour cette boîte de dialogue"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:10
+msgid "Cancels this command"
+msgstr "Annule cette commande"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:11
+msgid "Closes the dialog"
+msgstr "Fermer la fenêtre de dialogue"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:12
+msgid "About program dialog"
+msgstr "Boîte de dialogue \"A propos de\""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:13
+msgid "Move selected object to top"
+msgstr "Déplacer l'objet sélectionné vers le haut"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:14
+msgid "Raise or lower all selected tracks"
+msgstr "Elever ou abaisser toute les voies sélectionnées"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:15
+msgid "Turn magnetic snap on or off"
+msgstr "Activer ou désactiver la grille magnétique"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:16
+msgid "Move selected object to bottom"
+msgstr "Déplacer l'objet sélectionné vers le bas"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:17
+msgid "Create a section of track for automation"
+msgstr "Créer une section de voie pour l'automatisation"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:18
+msgid "Edit a block definition "
+msgstr "Editer une définition de bloc "
+
+#: ../../../../build/work/app/bin/bllnhlp.c:19
+msgid "Create a new Car/Loco description"
+msgstr "Créer une nouvelle description de wagon/voiture/loco"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:20
+msgid "Manage your Car and Loco Inventory"
+msgstr "Gérez votre inventaire de véhicule"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:21
+msgid "Create track circle from center"
+msgstr "Créer un cercle de voie à partir du centre"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:22
+msgid "Create fixed radius track circle"
+msgstr "Créer une voie circulaire d'un rayon donné"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:23
+msgid "Set Circle Track creation mode"
+msgstr "Choisissez la commande pour créer des courbes de voie"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:24
+msgid "Create track circle from tangent"
+msgstr "Créer une voie circulaire à partir de la tangente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:25
+msgid "Removes elevation from Selected tracks"
+msgstr "Supprime l'élévation des voies sélectionnées"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:26
+msgid "Copy objects to clipboard and duplicate them in exactly the same place"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:27
+msgid "Command Options dialog"
+msgstr "Boîte de dialogue pour les options de commande"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:28
+msgid "Controls colors"
+msgstr "Ajuste les couleurs"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:29
+msgid "Connect two tracks"
+msgstr "Connecter deux voies"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:30
+msgid "Create a control for layout automation"
+msgstr "Créer un contrôle pour l'automatisation du réseau"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:31
+msgid "Select control element to create"
+msgstr "Sélectionner l'élément de contrôle à créer"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:32
+msgid "Manage control elements"
+msgstr "Gérer les contrôles"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:33
+msgid "Set Convert mode"
+msgstr "Définir le mode de conversion"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:34
+msgid "Convert from Fixed Track to Cornu"
+msgstr "Convertir depuis des voies fixes en Cornu"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:35
+msgid "Convert from Cornu and Bezier to Fixed Track"
+msgstr "Convertir depuis des Cornu et Bezier en voies fixes"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:36
+msgid "Copy selected objects to clipboard"
+msgstr "Copier les objets sélectionnés du presse-papiers"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:37
+msgid "Create Cornu track"
+msgstr "Créer une voie Cornu"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:38
+msgid "Create curved track from center"
+msgstr "Créer une voie courbe à partir du centre"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:39
+msgid "Create curved track from chord"
+msgstr "Créer une voie courbe à partir d'une corde"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:40
+msgid "Create curved track from end-point"
+msgstr "Créer une voie courbe à partir de l'extrémité"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:41
+msgid "Create Bezier track"
+msgstr "Créer une voie de Bézier"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:42
+msgid "Set Curve Track creation mode"
+msgstr "Définir le mode de création de voie de courbe"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:43
+msgid "Create curved track from tangent"
+msgstr "Créer une voie courbe à partir de la tangente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:44
+msgid "Manipulate Custom designer entries"
+msgstr "Éditez vos propres dessins"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:45
+msgid "Moves selected objects to clipboard"
+msgstr "Déplace les objets sélectionnés vers le presse-papiers"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:46
+msgid "Delete objects"
+msgstr "Supprimer des objets"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:47
+msgid "Playback demos"
+msgstr "Lecture des démos"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:48
+msgid "Change Object Properties"
+msgstr "Modifier les propriétés d'un objet"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:49
+msgid "Change to properties mode"
+msgstr "Passer en mode propriétés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:50
+msgid "Deselect all selected objects"
+msgstr "Désélectionner tous les objets"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:51
+msgid "Change Display parameters"
+msgstr "Modifier les paramètres d'affichage"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:52
+msgid "Create benchwork"
+msgstr "Tracer un plateau de travail"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:53
+msgid "Create a box"
+msgstr "Tracer une boite"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:54
+msgid "Set Circle drawing command"
+msgstr "Définir la commande de dessin du cercle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:55
+msgid "Create a circle"
+msgstr "Créer un cercle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:56
+msgid "Draw a circle line from center"
+msgstr "Tracer un Cercle à partir du centre"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:57
+msgid "Draw a fixed radius circle line"
+msgstr "Trace un cercle d'un rayon donné"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:58
+msgid "Draw a circle line from tangent"
+msgstr "Tracer un Cercle à partir de la tangente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:59
+msgid "Set Curve drawing command"
+msgstr "Choisissez la commande pour dessiner des lignes courbes"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:60
+msgid "Create a curved line"
+msgstr "Créer une ligne courbe"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:61
+msgid "Create a curved line from End"
+msgstr "Tracer une courbe à partir de l'extrémité"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:62
+msgid "Create a curved line from center"
+msgstr "Tracer une courbe à partir du centre"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:63
+msgid "Create a curved line from chord"
+msgstr "Tracer une courbe à partir de la corde"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:64
+msgid "Create a curved line from tangent"
+msgstr "Tracer une courbe à partir de la tangente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:65
+msgid "Create a Bezier line"
+msgstr "Tracer une ligne de Bézier"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:66
+msgid "Create a dimension line"
+msgstr "Tracer une ligne de cote"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:67
+msgid "Create a filled box"
+msgstr "Tracer une boite pleine"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:68
+msgid "Create a filled circle"
+msgstr "Créer un cercle rempli"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:69
+msgid "Draw a filled circle from center"
+msgstr "Tracer un Cercle plein autour du centre"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:70
+msgid "Draw a fixed radius filled circle"
+msgstr "Trace un cercle plein d'un rayon donné"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:71
+msgid "Draw a filled circle from tangent"
+msgstr "Tracer un Cercle plein depuis la tangente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:72
+msgid "Create a polygon"
+msgstr "Tracer un polygone"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:73
+msgid "Create a filled polygon"
+msgstr "Tracer un polygone plein"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:74
+msgid "Create a polyline"
+msgstr "Tracer une polyligne"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:75
+msgid "Create a straight line"
+msgstr "Tracer une ligne droite"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:76
+msgid "Set Line drawing command"
+msgstr "Choisissez la commande pour dessiner des lignes"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:77
+msgid "Set Shape drawing command"
+msgstr "Choisir la commande pour dessiner des formes"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:78
+msgid "Draw table edge"
+msgstr "Tracer le bord de table"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:79
+msgid "Easement menu"
+msgstr "Menu courbes de transition"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:81
+msgid "Generate a Parts List of selected objects"
+msgstr "Créer une liste de pièces à partir des objets sélectionnés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:82
+msgid "Set Import/Export mode"
+msgstr "Définir le mode Import/Export"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:83
+msgid "Export a .xti file"
+msgstr "Exporter un fichier *.xti"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:84
+msgid "Export a DXF file"
+msgstr "Exporter dans un fichier DXF"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:86
+msgid "Flip selected objects"
+msgstr "Retourner les objets sélectionnés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:87
+msgid "Adjust snap grid"
+msgstr "Ajuster la grille magnétique"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:88
+msgid "Enable snap grid"
+msgstr "Activer la grille magnétique"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:89
+msgid "Show snap grid"
+msgstr "Afficher la grille magnétique"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:90
+msgid "Create a structure from a Group of objects"
+msgstr "Créer une bâtiment à partir d'un groupe d'objets"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:91
+msgid "Create a hand-laid turnout"
+msgstr "Créer un aiguillage conçu en manuel"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:92
+msgid "Create a track helix"
+msgstr "Créer une voie hélicoïdale"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:93
+msgid "Import a .xti file"
+msgstr "Importer un fichier *.xti"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:94
+msgid "Import an .xti file as a Module"
+msgstr "Importez un fichier .xti en tant que module"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:95
+msgid "Join two tracks"
+msgstr "Raccorder deux voies"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:96
+msgid "Join two lines or polylines"
+msgstr "Raccorder deux lignes ou polylignes"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:97
+msgid "Set Join mode"
+msgstr "Définir le mode Raccorder"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:98
+msgid "Change Layers"
+msgstr "Changer de calques"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:99
+msgid "Selects the current drawing layer"
+msgstr "Sélectionne le calque courant du dessin"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:100
+msgid "Layout parameters"
+msgstr "Paramètres de calques"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:102
+msgid "Show/Hide Map Window"
+msgstr "Afficher/Masquer la fenêtre de navigation"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:103
+msgid "Modify or extend a track"
+msgstr "Modifier ou prolonger une voie"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:104
+msgid "Change To modify mode"
+msgstr "Changer pour Modifier le mode"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:105
+msgid "Move selected objects"
+msgstr "Déplacer les objets sélectionnés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:106
+msgid "Move a label"
+msgstr "Déplacer une étiquette"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:107
+msgid "Move selected objects to current layer"
+msgstr "Déplacer les objets sélectionnés vers le calque actuel"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:109
+msgid "Print a bitmap"
+msgstr "Imprimer un BitMap"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:110
+msgid "Pan or zoom the layout"
+msgstr "Panoramique ou zoom sur le plan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:111
+msgid "Change to zoom/pan mode"
+msgstr "Passer en mode zoom/pan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:112
+msgid "Create a parallel track"
+msgstr "Créer une voie parallèle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:113
+msgid "Create a parallel line"
+msgstr "Tracer une ligne parallèle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:114
+msgid "Set Parallel mode"
+msgstr "Définir le mode parallèle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:115
+msgid "Register"
+msgstr "Registre"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:116
+msgid "Copy objects from clipboard"
+msgstr "Copier les objets du presse-papiers"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:117
+msgid "Perferences dialog"
+msgstr "Boîte de dialogue des préférences"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:118
+msgid "Display prices of turnouts, sectional tracks and structures"
+msgstr ""
+"Affichage des prix des aiguillages, des sections de voies et des bâtiments"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:119
+msgid "Print the layout"
+msgstr "Imprimer le plan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:120
+msgid "Loads and unloads parameter files into/from toolbar"
+msgstr ""
+"Charge et décharge les fichiers de paramètres dans/depuis la barre d'outils"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:121
+msgid "Elevation Profile Command"
+msgstr "Commande de profil d'élévation"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:123
+msgid "Command recorder"
+msgstr "Enregistrement de commande"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:125
+msgid "Update selected Turnout and Structure definitions"
+msgstr ""
+"Mettre à jour les définitions sélectionnées d'aiguillage et de bâtiment"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:126
+msgid "Rescale selected objects"
+msgstr "Changer d'échelle les objets sélectionnés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:127
+msgid "Rotate selected object(s)"
+msgstr "Faire pivoter le ou les objets sélectionnés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:128
+msgid "Show a ruler"
+msgstr "Afficher une règle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:129
+msgid "Select objects"
+msgstr "Sélectionnez des objets"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:130
+msgid "Change To Select Mode"
+msgstr "Passer en mode sélection"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:131
+msgid "Selects all objects on the layout"
+msgstr "Sélectionne tous les objets du plan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:132
+msgid "Selects all objects in the current Layer"
+msgstr "Sélectionne tous les objets du calque actuel"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:133
+msgid "Invert current selection"
+msgstr "Inverser la sélection actuelle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:134
+msgid "Split a track"
+msgstr "Segmenter une voie"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:135
+msgid "Select stranded (unconnected) track pieces"
+msgstr "Sélectionner des segments de voie isolés (non connectés)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:136
+msgid "Create a sensor (ie. a occupancy detector or a toggle switch)"
+msgstr ""
+"Créer un capteur (c.a.d. détecteur de présence ou interrupteur à bascule)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:137
+msgid "Create a signal for train control"
+msgstr "Créer un signal pour le contrôle du train"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:138
+msgid "Choose which commands are sticky"
+msgstr "Choisissez les commandes qui sont maintenues (sticky)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:139
+msgid "Create straight track"
+msgstr "Créer une voie droite"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:140
+msgid "Place a structure on the layout"
+msgstr "Mettre une bâtiment sur le plan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:141
+msgid "Create a switchmotor for turnout control"
+msgstr "Créer un moteur pour le contrôle d'un aiguillage"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:142
+msgid "Edit a switchmotor definition"
+msgstr "Editer une définition de moteur d'aiguillage"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:143
+msgid "Enter text on the layout"
+msgstr "Entrer du texte sur le plan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:144
+#: ../../../../build/work/app/bin/bllnhlp.c:531
+msgid "Controls the size of the entered text"
+msgstr "Ajuste la taille du texte saisi"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:145
+msgid "Plain Text"
+msgstr "Texte simple"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:146
+msgid "Tip of the Day window"
+msgstr "Fenêtre d'astuce du jour"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:147
+msgid "Run Trains"
+msgstr "Mode Trains"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:148
+msgid "Change To Run Trains Mode"
+msgstr "Passer en mode Trains"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:149
+msgid "Pause/Resume Trains"
+msgstr "Pause/Go Trains"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:150
+msgid "Place a car on the layout"
+msgstr "Mettre un véhicule sur le plan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:151
+msgid "Exit Trains"
+msgstr "Quitter \"Trains\""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:152
+msgid "Hide/Unhide a track"
+msgstr "Masquer/afficher une voie"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:153
+msgid "Make/Unmake a track a bridge"
+msgstr "Construire/défaire une voie un pont"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:154
+msgid "Place a turnout or sectional track"
+msgstr "Placer un aiguillage ou une section de voie"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:155
+msgid "Create a new turnout definition"
+msgstr "Créer une nouvelle définition d'aiguillage"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:156
+msgid "Place a turntable"
+msgstr "Mettre un pont tournant"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:157
+msgid "Updates old source files with 3 part titles"
+msgstr "Met à jour les anciens fichiers source avec des titres en 3 parties"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:159
+msgid "Ungroup objects"
+msgstr "Dissocier l'objet"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:160
+msgid "Draw tracks with thin lines"
+msgstr "Tracez des voies avec des voies fines"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:161
+msgid "Draw tracks with medium lines"
+msgstr "Tracez des voies avec des voies moyennes"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:162
+msgid "Draw tracks with thick lines"
+msgstr "Tracez des voies avec des voies épaisses"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:163
+msgid "Change drawing scale"
+msgstr "Changer l'échelle de dessin"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:164
+#: ../../../../build/work/app/bin/bllnhlp.c:176
+msgid "Zoom in"
+msgstr "Zoom avant"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:165
+#: ../../../../build/work/app/bin/bllnhlp.c:177
+msgid "Zoom out"
+msgstr "Zoom arrière"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:166
+msgid "File Menu"
+msgstr "Menu fichier"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:167
+msgid "Save layout"
+msgstr "Enregistrer le plan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:168
+msgid "Save layout under a new name "
+msgstr "Enregistrer le plan sous un nouveau nom "
+
+#: ../../../../build/work/app/bin/bllnhlp.c:169
+msgid "New layout"
+msgstr "Nouveau plan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:170
+msgid "Generate parts list"
+msgstr "Créer une liste de pièces"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:171
+msgid "Load a layout"
+msgstr "Charger un plan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:172
+msgid "Exit the program"
+msgstr "Quitter le programme"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:173
+msgid "Revert to last saved state of layout plan"
+msgstr "Revenir au dernier état enregistré du plan de réseau"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:174
+msgid "Edit menu"
+msgstr "Menu d'édition"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:175
+msgid "Redraw layout"
+msgstr "Redessiner le plan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:178
+#: ../../../../build/work/app/bin/bllnhlp.c:181
+msgid "Tools menu"
+msgstr "Menu d'outils"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:179
+msgid "View menu"
+msgstr "Afficher le menu"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:180
+msgid "Toolbar configuration"
+msgstr "Configuration de la barre d'outils"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:182
+msgid "Options menu"
+msgstr "Menu d'options"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:183
+msgid "Playback/Record commands"
+msgstr "Commandes de Lecture/Enregistrement"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:184
+msgid "Window menu"
+msgstr "Menu fenêtre"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:185
+msgid "Help menu"
+msgstr "Menu d'aide"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:186
+msgid "Recent error messages and explanations"
+msgstr "Messages d'erreur récents et explications"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:187
+msgid "Move Hot Bar left"
+msgstr "Faire défiler la Hot Bar à gauche"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:188
+msgid "Move Hot Bar right"
+msgstr "Faire défiler la Hot Bar à droite"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:189
+msgid "Total track count"
+msgstr "Nombre total de voies"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:190
+msgid "X Position of cursor"
+msgstr "Position X du curseur"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:191
+msgid "Y Position of cursor"
+msgstr "Position Y du curseur"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:192
+msgid "Drawing scale"
+msgstr "Échelle du dessin"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:193
+msgid "Message and status line"
+msgstr "Message et ligne d'état"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:194
+#: ../../../../build/work/app/bin/bllnhlp.c:195
+msgid "Main layout canvas"
+msgstr "Zone de dessin principale"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:196
+msgid "Main drawing canvas"
+msgstr "Zone de travail principale"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:197
+msgid "Command buttons"
+msgstr "Boutons de commande"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:198
+msgid "Menus"
+msgstr "Menus"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:199
+msgid "Tile, Filename and Window Manager buttons"
+msgstr "Boutons, Nom de fichier et Gestionnaire de fenêtres"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:200
+msgid "Turnout and Structure Hot Bar"
+msgstr "Barre de sélection des aiguillages et bâtiments"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:201
+msgid "Active layer list and layer buttons"
+msgstr "Liste de calques actifs et boutons de calque"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:202
+msgid "Map window"
+msgstr "Fenêtre principale"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:203
+msgid "This is the portion of the layout shown in the Main Window canvas"
+msgstr ""
+"Il s'agit de la partie du plan affichée dans le zone de dessin de la fenêtre "
+"principale"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:204
+msgid "Raise or Lower all Selected Track"
+msgstr "Elever ou abaisser toute la voie sélectionnée"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:205
+msgid "Name of block"
+msgstr "Nom du bloc"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:206
+msgid "Script that the block will run"
+msgstr "Script d'exécution du bloc"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:207
+msgid "List of tracks in the Block"
+msgstr "Liste des voies du bloc"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:208
+msgid "Add or Update car object"
+msgstr "Ajouter ou mettre à jour un objet véhicule"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:209
+msgid "Manufacturer name"
+msgstr "Nom du fabricant"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:212
+msgid "Is the Car a Locomotive?"
+msgstr "Le véhicule est-il une locomotive?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:213
+msgid "Part Number and Description"
+msgstr "Référence N° et description"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:214
+msgid "Manufacturer Part Number"
+msgstr "Référence fabricant"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:215
+msgid "Use the Selected figure as the car image"
+msgstr "Utilisez la figure sélectionnée comme image de véhicule"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:216
+msgid "Use the default figure as the car image"
+msgstr "Utilisez la figure par défaut comme image de véhicule"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:217
+msgid "Optional description of the Car Part"
+msgstr "Description facultative du modèle de véhicule"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:218
+msgid "Flip car image"
+msgstr "Effet miroir d'un véhicule"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:219
+msgid "Display Car Item information or reporting marks and dimensions"
+msgstr ""
+"Afficher des informations sur le véhicule ou la plaque d'immatriculation et "
+"les dimensions"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:220
+msgid "Full Roadname"
+msgstr "Nom complet de la route"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:221
+#: ../../../../build/work/app/bin/bllnhlp.c:222
+msgid "Car Type"
+msgstr "Type de véhicule"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:223
+msgid "Reporting Marks (Roadname abbreviation)"
+msgstr "Sigles (abréviation du nom du réseau)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:224
+#: ../../../../build/work/app/bin/bllnhlp.c:411
+msgid "Car Number"
+msgstr "N° de véhicule"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:225
+msgid "Car body Color"
+msgstr "Couleur de carrosserie"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:226
+msgid "Length of car body"
+msgstr "Longueur du chaudron"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:227
+msgid "Width of car body"
+msgstr "Largeur du chaudron"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:228
+msgid "Distance between Trucks "
+msgstr "Distance entre les bogies "
+
+#: ../../../../build/work/app/bin/bllnhlp.c:229
+msgid "Distance Trucks are displaced along Car"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:230
+msgid "Coupler are mounted on body or truck"
+msgstr "Les attelages sont montés sur les chassis ou les bogies"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:231
+msgid "Overall Coupled Length"
+msgstr "Longueur totale couplée"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:232
+msgid "Coupler Length from end of car"
+msgstr "Longueur de l'attelage à partir du bout du wagon"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:233
+msgid "Diagram of Car"
+msgstr "Schéma de véhicule"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:234
+msgid "Item Index Number"
+msgstr "Numéro d'index de l'objet"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:235
+msgid "Original Purchase Price"
+msgstr "Prix d'achat d'origine"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:237
+msgid "Condition of car"
+msgstr "Etat du véhicule"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:238
+msgid "Original Purchase Date"
+msgstr "Date d'achat d'origine"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:239
+msgid "Last Service Date"
+msgstr "Date du dernier service"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:240
+msgid "Number of identical cars to be entered"
+msgstr "Nombre de matériels roulants identiques à inscrire"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:241
+msgid "Do all the cars have the same Number?"
+msgstr "Est-ce que toutes les matériels roulants ont le même numéro ?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:242
+msgid "Notes about the car"
+msgstr "Notes sur le véhicule"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:243
+#: ../../../../build/work/app/bin/bllnhlp.c:244
+msgid "Create a new car Part or Prototype definitions"
+msgstr "Créer une nouvelle définition de pièce ou de prototype de véhicule"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:245
+msgid "Finds the selected Car Item on the layout"
+msgstr "Trouve l'article de véhicule sélectionné sur le plan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:246
+#: ../../../../build/work/app/bin/bllnhlp.c:247
+#: ../../../../build/work/app/bin/bllnhlp.c:248
+#: ../../../../build/work/app/bin/bllnhlp.c:249
+msgid "Sort the Item list"
+msgstr "Trier la liste d'articles"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:251
+msgid "Edit the selected Car Item"
+msgstr "Modifier le titre du véhicule sélectionné"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:252
+msgid "Add a new Car Item"
+msgstr "Ajouter un nouveau nom de véhicule"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:253
+msgid "Delete the selected Car Items"
+msgstr "Supprimer les wagons ou locomotives sélectionnés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:254
+msgid "Import a Car Item .csv file"
+msgstr "Importer du véhicule à partir d'un fichier .csv"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:255
+msgid "Export a Car Item .csv file"
+msgstr "Exporter un fichier Car Item .csv"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:256
+msgid "Create a text list of the Car Items"
+msgstr "Créer la liste des noms de matériels roulants"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:257
+msgid "Specifies the radius of the circle track"
+msgstr "Spécifie le rayon de la voie circulaire"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:258
+msgid "Default command is Describe or Select"
+msgstr "La commande par défaut est \"Propriétés\" ou \"Sélectionner\""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:259
+msgid "Action to invoke on Right-Click"
+msgstr "Action à appeler lors d'un clic droit"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:260
+msgid ""
+"Replace current selection with clicked object or add clicked object to "
+"selection"
+msgstr ""
+"Remplacer la sélection actuelle par un objet cliqué ou ajouter un objet "
+"cliqué à la sélection"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:261
+msgid "Clicking into an empty area clears selection if select mode is <add>"
+msgstr ""
+"Cliquer dans une zone vide efface la sélection si le mode de sélection est "
+"<Ajouter>"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:263
+msgid "The list of control elements"
+msgstr "La liste des éléments de contrôle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:264
+msgid "Edit the element"
+msgstr "Editer l'élément"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:265
+msgid "Delete the element"
+msgstr "Supprimer l'élément"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:266
+msgid "Contents Label for new Parameter file"
+msgstr "Contenu de l'étiquette du nouveau fichier de paramètres"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:267
+msgid "List of custom designed turnouts and structures"
+msgstr "Liste des aiguillages et des bâtiments conçus sur mesure"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:268
+msgid "Invoke designer editor"
+msgstr "Ouvre l'éditeur de modélisation"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:269
+msgid "Remove selected entries"
+msgstr "Supprimer les entrées sélectionnées"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:270
+msgid "Copy selected entries to Parameter File"
+msgstr "Copier les entrées sélectionnées dans le fichier de paramètres"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:271
+msgid "Create a New part or prototype"
+msgstr "Créer une nouvelle pièce ou un prototype"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:272
+msgid "Update custom file and close"
+msgstr "Mettre à jour le fichier personnalisé et fermer"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:273
+msgid "Executes the next step of the demo"
+msgstr "Exécute la prochaine étape de la démo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:274
+msgid "Skip to next demo"
+msgstr "Passer à la prochaine démo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:275
+msgid "Stops the demonstration and returns you to XTrackCAD"
+msgstr "Arrêt de la démonstration et retour à XTrackCAD"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:276
+msgid "Select speed of Playback"
+msgstr "Sélectionnez la vitesse de lecture"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:277
+msgid "This is where comments about the demo are displayed"
+msgstr "C'est là que les commentaires sur la démo sont affichés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:314
+msgid "Move the Main canvas if you drag near the edge"
+msgstr ""
+"Déplacez la zone de dessin principale lorsque vous vous approchez des bords"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:315
+msgid "Color tracks by layer or individually"
+msgstr "Voies en couleur par calque ou individuellement"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:316
+msgid "Color draw objects by layer or individually"
+msgstr "Dessiner en couleur des objets par couche ou individuellement"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:317
+msgid "Controls the drawing of hidden tracks"
+msgstr "Ajuste le dessin des voies cachées"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:318
+msgid "Controls the drawing of End-Points"
+msgstr "Ajuste le dessin des points d'extrémité"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:319
+msgid "How to draw track ties"
+msgstr "Comment dessiner des traverses"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:320
+msgid "Show crosshair at center of curves"
+msgstr "Afficher le réticule au centre des courbes"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:321
+msgid "Drawing scale when to draw tracks with 2 rails"
+msgstr "Échelle minimale pour dessiner les voies avec 2 rails"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:322
+msgid "Drawing scale of the map window"
+msgstr "Échelle de dessin de la fenêtre de navigation"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:323
+msgid "Whether the main layout is updated while dragging on the Map"
+msgstr "Mise à jour du plan de trajet lors du dessin sur la carte"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:324
+msgid "Enable labels for Turnouts, Flextrack Lengths and Elevations"
+msgstr ""
+"Afficher les étiquettes pour les aiguillages, les voies flexibles et les "
+"élévations"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:325
+msgid "When to label Turnout, Flextrack Lengths and Elevations"
+msgstr ""
+"Quand étiqueter les aiguillages, les longueurs de voie flexibles ou les "
+"mesures d'élévation"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:326
+msgid "Font size for labels on layout"
+msgstr "Taille de police des étiquettes sur le plan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:327
+msgid "Label elements on the Hot Bar"
+msgstr "Éléments d'étiquetage sur la barre d'objets"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:328
+msgid "Label elements on layout"
+msgstr "Éléments d'étiquetage sur le plan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:329
+msgid "Label elements for lists"
+msgstr "Éléments d'étiquetage pour les listes"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:330
+msgid "How to group cars on the Train Hot Bar"
+msgstr "Regroupement des matériels roulants dans le catalogue de pièces"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:331
+msgid "Delay (in mS) between updating train movements"
+msgstr "Intervalle de mise à jour (en ms) des mouvements de train"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:332
+msgid "Don't show trains in tunnels when tunnels are hidden"
+msgstr ""
+"Ne pas visualiser les trains dans les tunnels quand les tunnels sont cachés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:333
+msgid "Display unconnected endpoints of track with special marks"
+msgstr "Mettez en surbrillance les extrémités non connectées"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:334
+msgid "Whether the Main Drawing Area shows as much of the room as possible"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:336
+msgid "Width of the lines"
+msgstr "Largeur des lignes"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:337
+msgid "Color of the lines"
+msgstr "Couleur des voies"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:338
+msgid "List of types of Lumber"
+msgstr "Liste des types d'éléments de structure"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:339
+msgid "Color of Benchwork"
+msgstr "Couleur de la sous-bâtiment"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:340
+msgid "Orientation of Benchwork"
+msgstr "Orientation de la sous-bâtiment"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:341
+msgid "Size of Dimension Arrows"
+msgstr "Largeur des Flèches de cotation"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:342
+msgid "This controls the sharpness of the easement curve"
+msgstr "Cela contrôle la netteté et la taille de la courbe de transition"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:343
+msgid "Minimum radius"
+msgstr "Rayon minimum"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:344
+msgid "Maximum offset"
+msgstr "Décalage maximum"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:345
+msgid "Easement length"
+msgstr "Longueur de la courbe de transition"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:346
+msgid ""
+"These radio buttons are a short-cut for Values of 0.0, 0.5, 1.0 and 2.0. "
+"None turns Easements off"
+msgstr ""
+"Ces boutons sont un raccourci pour les valeurs de 0.0, 0.5, 1.0 et 2.0. "
+"Aucun ne désactive les courbes de transition"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:347
+msgid "Complete easement selection"
+msgstr "Terminer la sélection des courbes de transition"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:348
+msgid "Type of elevation"
+msgstr "Type d'élévation"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:349
+msgid "Height of End Point"
+msgstr "Hauteur du point de fin"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:350
+msgid "Compute elevation based on neighbors"
+msgstr "Calculer la hauteur en fonction des voies adjacentes"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:351
+msgid "Compute grade based on neighbors"
+msgstr "Calculer la pente en fonction des voies adjacentes"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:352
+msgid "Specify a name for an End-Point"
+msgstr "Spécifiez un nom pour un point de fin"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:354
+msgid "Print parts list"
+msgstr "Imprimer la nomenclature"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:355
+#: ../../../../build/work/app/bin/bllnhlp.c:466
+#: ../../../../build/work/app/bin/bllnhlp.c:575
+msgid "Invoke the Print Setup dialog"
+msgstr "Ouvre la boîte de dialogue Configuration d'impression"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:356
+msgid "Save parts list to file"
+msgstr "Enregistrer la nomenclature dans un fichier"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:357
+msgid "This is the list of parts for the layout"
+msgstr "Voici la liste des pièces pour ce plan de voie"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:358
+msgid "Enable prices on the Parts List"
+msgstr "Activer les prix sur la liste des pièces"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:359
+#: ../../../../build/work/app/bin/bllnhlp.c:362
+msgid "Spacing between major grid lines"
+msgstr "Espacement entre les lignes principales de la grille"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:360
+#: ../../../../build/work/app/bin/bllnhlp.c:363
+msgid "Allows the spacing to be subdivided"
+msgstr "Permet de diviser l'espacement"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:361
+#: ../../../../build/work/app/bin/bllnhlp.c:364
+msgid "Specifies if positions are snaped in this direction"
+msgstr "Activez la grille magnétique pour cette orientation"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:365
+#: ../../../../build/work/app/bin/bllnhlp.c:366
+#: ../../../../build/work/app/bin/bllnhlp.c:367
+msgid "Shows the origin and angle of the grid"
+msgstr "Affiche l'origine et l'angle de la grille"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:368
+msgid "Specifies if the grid is shown"
+msgstr "Spécifie si la grille est affichée"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:369
+msgid "Completes the grid specification"
+msgstr "Enregistrer le réglage de la grille et quitter"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:373
+msgid "Number of segments in Group"
+msgstr "Nombre de segments dans le groupe"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:374
+msgid "Replace the Selected object with the new definition?"
+msgstr "Faut-il remplacer l'objet sélectionné par la nouvelle définition?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:375
+msgid "Creates a new Structure (or Turnout)"
+msgstr "Crée une nouvelle bâtiment (ou aiguillage)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:376
+msgid "Elevation difference of Helix End-Points"
+msgstr "Différence d'élévation des bouts de l'hélicoïde"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:377
+msgid "Helix Radius"
+msgstr "Rayon de l'hélicoïde"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:378
+msgid "Number of turns in the helix"
+msgstr "Nombre de tours de l'hélicoïde"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:379
+msgid "Angle betweek helix entrance and exit"
+msgstr "Angle entre l'entrée et la sortie de l'hélicoïde"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:380
+msgid "Grade in helix"
+msgstr "Pente de l'hélicoïde"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:381
+msgid "Separation between helix layers"
+msgstr "Séparation entre couches hélicoïdales"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:382
+#, fuzzy
+msgid "Desired curve radius between straight tracks"
+msgstr "Créer une voie droite"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:383
+msgid "Layer list"
+msgstr "Liste des calques"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:384
+msgid "Layer Name"
+msgstr "Nom du calque"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:385
+msgid "Color of layer"
+msgstr "Couleur de la couche"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:386
+msgid "Layer is drawn on Main window"
+msgstr "La couche est dessinée dans la fenêtre principale"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:387
+msgid "Layer cannot be changed"
+msgstr "Le calque ne peut pas être modifié"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:388
+msgid "Layer is drawn on Map window"
+msgstr "La couche est dessinée dans la fenêtre de navigation"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:389
+msgid "Number of layer buttons to show"
+msgstr "Nombre de boutons de calques à afficher"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:390
+msgid "Number of objects in this layer"
+msgstr "Nombre d'objets dans cette couche"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:392
+msgid "Load layer configuration from default"
+msgstr "Charger la configuration de la couche par défaut"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:393
+msgid "Save current layer configuration as default"
+msgstr "Enregistrer la configuration actuelle comme couche par défaut"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:394
+msgid "Overwrite layer configuration with system default values"
+msgstr "Réinitialiser le réglage des couches aux valeurs par défaut du système"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:395
+#: ../../../../build/work/app/bin/bllnhlp.c:396
+msgid "Specifies the size of the room (in inches or centimeters)"
+msgstr "Spécifie la taille de la pièce (en pouces ou en centimètres)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:397
+msgid "Specifies the layout Title that will appear on printouts"
+msgstr "Spécifie le titre du plan qui apparaîtra sur les impressions"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:398
+msgid "Specifies the layout Subtitle that will appear on printouts"
+msgstr "Spécifie le sous-titre du plan qui apparaîtra sur les impressions"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:399
+msgid "Specifies the Modelling Scale"
+msgstr "Spécifie l'échelle de modélisation"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:400
+msgid "Specifies the rail gauge, ie. the distance between the rails"
+msgstr "Spécifie l'écartement des rails, c.à.d. la distance entre les rails"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:401
+msgid ""
+"Specifies minimum track radius (in inches or centimeters). Tracks with a "
+"smaller radius are considered exceptional."
+msgstr ""
+"Spécifie le rayon de voie minimal (en pouces ou en centimètres). Les voies "
+"avec un rayon plus petit sont considérées comme exceptionnelles."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:402
+msgid ""
+"Specifies maximum track elevation expressed as a percent (%). Tracks with a "
+"larger elevation are considered exceptional."
+msgstr ""
+"Spécifie l'élévation maximale de la voie exprimée en pourcentage (%). Les "
+"voies avec une élévation plus grande sont considérées comme exceptionnelles."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:403
+msgid "Select the background image"
+msgstr "Sélectionnez l'image d'arrière-plan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:404
+msgid "Remove the background image"
+msgstr "Supprimer l'image de fond"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:405
+msgid "Specifies the x offset of the bottom left of the background image"
+msgstr "Spécifie le décalage x en bas à gauche de l'image d'arrière-plan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:406
+msgid "Specifies the y offset of the bottom left of the background image"
+msgstr "Spécifie le décalage y en bas à gauche de l'image d'arrière-plan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:407
+msgid ""
+"Specifies how large the bottom edge of the background image should be in "
+"model units"
+msgstr ""
+"Spécifie la taille du bord inférieur de l'image d'arrière plan en unités du "
+"modèle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:408
+msgid ""
+"Specifies the screening of the background image from 0 (none) to 100% "
+"(vanishes)"
+msgstr ""
+"Spécifie le filtrage de l'image d'arrière-plan, de 0 (aucun) à 100% "
+"(disparaît)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:409
+msgid "Specifies the rotation angle of the background image in degrees"
+msgstr "Spécifie l'angle de rotation de l'image d'arrière-plan en degrés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:412
+msgid ""
+"This is the body of the Note. To change this select Modify from the File "
+"Menu"
+msgstr ""
+"Ceci est le texte de la note. Pour le changer, sélectionnez «Modifier» dans "
+"le menu «Fichier»"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:414
+msgid "Specifies number of pixels per inch (or centimeter)"
+msgstr "Spécifie le nombre de pixels par pouce (ou centimètre)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:416
+msgid ""
+"Specifies whether Layout Titles, Borders or Track Centerlines are printed on "
+"the BitMap"
+msgstr ""
+"Spécifie si les titres du plan, les bordures ou les axes des voies sont "
+"imprimés sur le BitMap"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:417
+msgid ""
+"Specifies the separation between the original track and the parallel track/"
+"line"
+msgstr ""
+"Spécifie la séparation entre la voie d'origine et la voie/ligne parallèle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:418
+msgid ""
+"Specifies the a factor that increases the seperation as the radius of the "
+"original track reduces. 0.0 means no increase."
+msgstr ""
+"Spécifie le facteur qui augmente la séparation à mesure que le rayon de la "
+"voie d'origine diminue. 0,0 signifie aucune augmentation."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:419
+msgid "Enter your name as specified in the XTrackCAD Registration Notice"
+msgstr ""
+"Entrez votre nom comme spécifié dans la notification d'enregistrement "
+"d'XTrackCAD"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:420
+msgid "Enter the key value as specified in the XTrackCAD Registration Notice"
+msgstr ""
+"Entrez la valeur de la clé telle que spécifiée dans la notification "
+"d'enregistrement d'XTrackCAD"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:421
+msgid "Validates the name and key. Terminates the registration command"
+msgstr "Valide le nom et la clé. Met fin à la commande d'enregistrement"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:422
+msgid "0ᅵ is up or to the right"
+msgstr "0ï¿œ est en haut ou à droite"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:423
+msgid "Choose english (inches) or metric (centimeters)"
+msgstr "Choisissez anglais (pouces) ou métrique (cm)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:424
+msgid "How to display length measurements"
+msgstr "Comment afficher les mesures de longueur"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:425
+msgid "Do not create tracks to be shorter than this value"
+msgstr "Ne créez pas de voies plus courtes que cette valeur"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:426
+msgid "Maximum distance between connected end points"
+msgstr "Distance maximale entre des extrémités connectées"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:427
+msgid "Minimum angle between connected End-Points"
+msgstr "Angle minimal entre les extrémités connectées"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:428
+msgid "Specifies the minimum angle between tracks connected to a turntable"
+msgstr "Spécifie l'angle minimum entre les voies connectées à un pont tournant"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:429
+msgid "Trains will crash above this speed"
+msgstr "Les trains dérailleront au-dessus de cette vitesse"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:430
+msgid "Enable/Disable balloon popup help windows"
+msgstr "Activer/Désactiver les bulles d'aide contextuelles"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:431
+msgid "Enable/Disable show of flextrack on hotbar"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:432
+msgid "How far you can move the mouse before its considered a drag"
+msgstr ""
+"Jusqu'où vous pouvez déplacer la souris avant que ce soit considéré comme un "
+"glisser"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:433
+msgid "How long you can hold a mouse button down before its considered a drag"
+msgstr ""
+"Combien de temps pouvez-vous maintenir un bouton de la souris enfoncé avant "
+"que ce soit considéré comme un glisser"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:434
+msgid "Minimum distance (in pixels) between grid lines/ticks"
+msgstr "Distance minimale (en pixels) entre les lignes/marques de quadrillage"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:435
+#, fuzzy
+msgid ""
+"Specifies the Check Point frequency; number of modifications made since the "
+"last checkpoint."
+msgstr ""
+"Nombre de modifications avant qu'une nouvelle sauvegarde automatique n'ait "
+"lieu."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:436
+msgid "Specifies the number of checkpoints after save before auto-saving."
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:437
+msgid "Resume work on last layout or start with new layout"
+msgstr "Modifier le dernier plan de voies ou en créer un nouveau"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:439
+msgid "Updated cost of current selected item"
+msgstr "Coût actualisé de l'élément actuellement sélectionné"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:441
+msgid "Selection list for prices"
+msgstr "Liste de sélection des prix"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:442
+#: ../../../../build/work/app/bin/bllnhlp.c:443
+#: ../../../../build/work/app/bin/bllnhlp.c:444
+msgid "Price of specified length of flex-track"
+msgstr "Prix d'une longueur spécifiée de voie flexible"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:446
+msgid "Controls the printing of a centerline of track cmdPrint"
+msgstr "Ajuste le dessin de l’axe des voies"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:447
+msgid "Controls the reduction (scale) of the printout"
+msgstr "Ajuste la réduction (d'échelle) pour l'impression"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:448
+msgid "Scaled page width (Scale times physical page width)"
+msgstr ""
+"Spécifiez la largeur de la page (échelle multipliée par la largeur du papier "
+"physique)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:449
+msgid "Sets page size to the maximum (based on scale and physical page size)"
+msgstr ""
+"Définit le format maximum de la page (en fonction de l'échelle et du format "
+"de papier physique)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:450
+msgid "Scaled page height (Scale times physical page height)"
+msgstr ""
+"Hauteur de page mise à l'échelle (échelle multipliée par la hauteur de page "
+"physique)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:451
+msgid "Sets scale, origin and angle for a one page printout of the layout"
+msgstr ""
+"Définit l'échelle, l'orientation et l'angle pour l'impression d'une page du "
+"plan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:452
+msgid "Print page in Portrait or Landscape format"
+msgstr "Imprimer la page au format Portrait ou Paysage"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:453
+msgid "Order of printing pages"
+msgstr "Ordre des pages d'impression"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:454
+msgid "Print Title, Date, Author and other information at bottom of page?"
+msgstr ""
+"Imprimer le titre, la date, l'auteur et d'autres informations en bas de "
+"page ?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:455
+msgid "Ignore unprintable page margins?"
+msgstr "Ignorer les marges non imprimables?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:456
+msgid "Print Registration Marks at 1:1?"
+msgstr "Imprimer les aides au positionnement à l'échelle 1:1 ?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:457
+msgid "Print Snap Grid?"
+msgstr "Imprimer la grille magnétique ?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:458
+msgid "Print Rulers on all page edges?"
+msgstr "Imprimer des règles sur tous les bords de page ?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:459
+msgid "Print Roadbed Outline?"
+msgstr "Imprimer le contour du ballast ?"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:460
+msgid "Print Roadbed Outline"
+msgstr "Imprimer le contour du ballast"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:461
+#: ../../../../build/work/app/bin/bllnhlp.c:462
+#: ../../../../build/work/app/bin/bllnhlp.c:464
+msgid ""
+"Origin of the print grid. This is useful if you want to reprint a set of "
+"pages"
+msgstr ""
+"Origine de la grille d'impression. Utile si certaines pages sont réimprimées"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:463
+msgid "Resets the origin and angle to 0"
+msgstr "Réinitialise à 0 l'alignement et l'angle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:465
+msgid "Deselects all pages"
+msgstr "Désélectionner toutes les pages"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:467
+msgid "Print selected pages and terminates the print command"
+msgstr "Imprime les pages sélectionnées et termine la commande d'impression"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:468
+#, fuzzy
+msgid "List of loaded, shown or hidden parameter files"
+msgstr "Liste des fichiers de paramètres chargés et non chargés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:469
+msgid "Show parameter files by names or descriptions"
+msgstr "Afficher les fichiers de paramètres par noms ou descriptions"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:470
+#, fuzzy
+msgid "Toggle the shown status of the selected parameter file"
+msgstr "Modifie l'état des fichiers de paramètres sélectionnés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:471
+#, fuzzy
+msgid "Find extra parameter files from the filesystem"
+msgstr "Trouver un fichier de paramètres à charger"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:472
+#, fuzzy
+msgid "Find parameter files from the system library"
+msgstr "Trouver un fichier de paramètres à charger"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:473
+msgid "Update parameter file list"
+msgstr "Mettre à jour la liste des fichiers de paramètres"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:474
+#, fuzzy
+msgid "Reload parameter file from list"
+msgstr "Lecture des fichiers de paramètres"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:475
+msgid "Select all parameter files shown"
+msgstr "Sélectionnez tous les fichiers de paramètres affichés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:476
+msgid "Profile of specified path"
+msgstr "Profil de la voie spécifiée"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:477
+msgid "Clear the profile"
+msgstr "Effacer le profil de hauteur"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:478
+msgid "Print the profile"
+msgstr "Imprimer le profil"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:480
+msgid "Stop recording"
+msgstr "Arrêt d'enregistrement"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:481
+msgid "Insert a message"
+msgstr "Insérer un message"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:482
+msgid "End a message"
+msgstr "Fin du message"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:483
+msgid "Message body"
+msgstr "Corps du message"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:484
+msgid "Possible turnouts"
+msgstr "Aiguillages possibles"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:485
+msgid "Skip this turnout"
+msgstr "Ignorer cette participation"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:487
+msgid "Manufacturer of Object"
+msgstr "Marque de l'objet"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:488
+msgid "Description of Object"
+msgstr "Description d'objet"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:489
+msgid "Part Nuber of Object"
+msgstr "Référence de l'objet"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:491
+msgid "Rescale by Scale Conversion or by Ratio"
+msgstr "Redimensionner par conversion d'échelle ou rapport"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:492
+msgid "Original Scale of the selected objects"
+msgstr "Échelle d'origine des objets sélectionnés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:493
+msgid "Original Gauge of the selected objects"
+msgstr "Ecartement de voies d'origine des objets sélectionnés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:494
+msgid "New Scale of the selected objects"
+msgstr "Nouvelle échelle des objets sélectionnés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:495
+msgid "New Gauge of the selected objects"
+msgstr "Nouvel écartement de voies des objets sélectionnés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:496
+msgid "Change track dimensions to new scale"
+msgstr "Convertir les dimensions de la voie à la nouvelle échelle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:497
+msgid "Change size by this amount"
+msgstr "Changer la taille d'un facteur"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:499
+msgid "Snap Grid Line and Division"
+msgstr "Grille magnétique voie et division"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:500
+msgid "X and Y position markers"
+msgstr "Repères de position X et Y"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:501
+msgid "Border rulers, room boundaries and table edges"
+msgstr "Règles de bordures, limites de pièce et bords de table"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:502
+msgid "Primary Axis of grid rotation"
+msgstr "Axe principal de rotation de la grille"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:503
+msgid "Secondary Axis of grid rotation"
+msgstr "Axe secondaire de rotation de la grille"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:504
+msgid "Unselected tracks"
+msgstr "Voies non sélectionnées"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:505
+msgid "Selected tracks"
+msgstr "Voies sélectionnées"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:506
+msgid "Color of tracks on the Profile path"
+msgstr "Couleur des voies sur le profil de hauteur"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:507
+msgid "Color of Exceptional tracks"
+msgstr "Couleur des voies exceptionnelles (hors limites)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:508
+msgid "Color of track ties"
+msgstr "Couleur des traverses"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:509
+msgid "Updates the colors"
+msgstr "Met à jour les couleurs"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:510
+msgid "Angle in degrees"
+msgstr "Angle en degrés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:511
+msgid "Rotate object(s) by specified amount"
+msgstr "Faire pivoter le ou les objets d'un certain angle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:512
+msgid "Enter one or more words as search terms '*' means all"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:513
+#, fuzzy
+msgid "Find matching file descriptions"
+msgstr "Description de l'élévation"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:514
+msgid "Search Results"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:515
+msgid "Show Descriptions or FileNames in results"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:516
+#, fuzzy
+msgid "Add selected entries into parameter file list"
+msgstr "Copier les entrées sélectionnées dans le fichier de paramètres"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:517
+#, fuzzy
+msgid "Select All found entries"
+msgstr "Liste de sélection des prix"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:518
+msgid "Reload the system library contents for finding"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:519
+msgid "Choose commands to be sticky"
+msgstr "Choisissez les commandes à maintenir (sticky)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:520
+msgid "Make the commands sticky"
+msgstr "Rendre les commandes collantes (sticky)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:521
+msgid "List of available structure"
+msgstr "Liste des bâtiments disponibles"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:522
+msgid "Diagram of the selected structure"
+msgstr "Schéma de la bâtiment sélectionnée"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:523
+msgid "Hide Selection window when placing Structure"
+msgstr "Masquer la fenêtre de sélection lors du placement de la bâtiment"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:524
+msgid "Drawing scale and size"
+msgstr "Échelle et taille du dessin"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:525
+msgid "Complete structure placement"
+msgstr "Placement complet de la bâtiment"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:526
+msgid "Choose a Pier number"
+msgstr "Choisissez un numéro de colonne"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:527
+msgid "Name of the Motor"
+msgstr "Nom du moteur"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:528
+msgid "Value when switch is normal"
+msgstr "Valeur lorsque l'aiguillage est normal"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:529
+msgid "Value when the switch is reversed"
+msgstr "Valeur lorsque l'aiguillage est dévié"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:530
+msgid "Value for a positive comfirmation of switch position"
+msgstr "Valeur pour une confirmation positive de la position de l'aiguillage"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:532
+msgid "Useful information about the program"
+msgstr "Informations utiles sur le programme"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:533
+msgid "Show Tip of the Day every time the program starts"
+msgstr "Montrer le conseil du jour à chaque démarrage du programme"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:534
+msgid "Show the next Tip of the Day"
+msgstr "Montrer le prochain conseil du jour"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:535
+msgid "Show the previous Tip of the Day"
+msgstr "Montrer le précédent conseil du jour"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:537
+msgid "Controls which Command Buttons are displayed"
+msgstr "Afficher ou masquer les boutons de commande dans la barre d'outils"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:538
+msgid "List of Cars"
+msgstr "Liste des matériels roulants"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:539
+msgid "List of active trains"
+msgstr "Liste des trains actifs"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:541
+msgid "Train odometer"
+msgstr "Compteur de distance"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:542
+msgid "Reset odometer to 0"
+msgstr "Remise à 0"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:543
+msgid "Find train on layout"
+msgstr "Chercher la train sur le plan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:544
+msgid "Follow train around layout"
+msgstr "Suivre le train sur le plan"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:545
+msgid "Flip direction at End Of Track"
+msgstr "Inverser la direction à la fin de la voie"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:546
+msgid "Change direction of train"
+msgstr "Inverser la direction du train"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:547
+msgid "Stop the train"
+msgstr "Arrêt du train"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:548
+msgid "List of available turnouts for the current scale"
+msgstr "Liste des aiguilles disponibles pour l'échelle actuelle"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:549
+msgid ""
+"Diagram of the currently selected turnout. Click on a End-Point to select "
+"the Active End-Point"
+msgstr ""
+"Schéma de l'aiguillage actuellement sélectionné. Cliquez sur une extrémité "
+"pour sélectionner l'extrémité active"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:550
+msgid ""
+"A menu list of various type of turnouts and sectional tracks you can define"
+msgstr ""
+"Une gamme de différents types d'aiguillages et de sections de voies que vous "
+"pouvez définir"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:551
+msgid "Hide Selection window when placing Turnout"
+msgstr "Masquer la fenêtre de sélection lorsque vous placez l'aiguillage"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:552
+msgid "The selected Active End-Point"
+msgstr "Le point de fin actif sélectionné"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:553
+msgid "Current selected turnout, (displayed in the diagram window)"
+msgstr ""
+"Aiguillage sélectionné actuellement, (affiché dans la fenêtre du diagramme)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:554
+msgid "One the End-Points that can be selected"
+msgstr "L'un des points d'extrémité pouvant être sélectionnés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:556
+#: ../../../../build/work/app/bin/bllnhlp.c:557
+msgid "Angle of the specified track to the center line of the turnout"
+msgstr "Angle de la voie spécifiée par rapport à l'axe de l'aiguillage"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:558
+msgid "Specifies if angles are entered as Frog Numbers or in degrees"
+msgstr ""
+"Spécifie si les angles sont entrés sous forme de N° de cœur ou en degrés"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:559
+#: ../../../../build/work/app/bin/bllnhlp.c:560
+msgid "Desciption"
+msgstr "Desciption"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:561
+msgid "Turnout description (Manuf., Size, Part Number, etc)"
+msgstr "Description de l'aiguillage (fabricant, angle, numéro de pièce, etc.)"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:562
+#: ../../../../build/work/app/bin/bllnhlp.c:563
+#: ../../../../build/work/app/bin/bllnhlp.c:564
+msgid "Length from the base to the end of the specified track"
+msgstr "Longueur de la ligne de base à la fin de la voie sélectionnée"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:566
+#: ../../../../build/work/app/bin/bllnhlp.c:567
+msgid "Offset of the track End-Point from the center line of the turnout"
+msgstr ""
+"Décalage du point de fin de la voie par rapport à l'axe central de "
+"l'aiguillage"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:570
+#: ../../../../build/work/app/bin/bllnhlp.c:571
+msgid "Prints a full size diagram of the turnout for checking"
+msgstr ""
+"Imprime un diagramme en taille réelle de l'aiguillage pour vérification"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:572
+msgid "Color of Roadbed lines"
+msgstr "Couleur des voies de balast"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:573
+msgid "Width of Roadbed lines"
+msgstr "Largeur des lignes de ballast"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:574
+msgid "Width of Roadbed"
+msgstr "Largeur du ballast"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:576
+msgid "Closes the window and returns to the Turnout Selection window"
+msgstr "Ferme la fenêtre et retourne à la sélection d'aiguillage"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:577
+msgid "Specifies the diameter of the turntable"
+msgstr "Spécifie le diamètre du pont tournant"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:578
+msgid "Old Turnout title"
+msgstr "Ancien titre de l'aiguillage"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:579
+msgid "List of available titles"
+msgstr "Liste des titres disponibles"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:580
+msgid "Leave the Turnouts' title unchanged"
+msgstr "Laisser le titre d'aiguillage inchangé"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:581
+msgid "Invoke the Parameter Files dialog"
+msgstr "Ouvre la boîte de dialogue Fichier de paramètres"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:582
+msgid "List of available turnouts"
+msgstr "Liste des aiguillages disponibles"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:583
+msgid "Update the Turnouts' title"
+msgstr "Mettre à jour le titre des aiguillages"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:587
+msgid "Sample"
+msgstr "Exemple"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:589
+msgid "Slant"
+msgstr "Incliner"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:590
+msgid "Font selection dialog"
+msgstr "Boite de dialogue de sélection de police"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:591
+msgid "Weight"
+msgstr "Poids"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:592
+msgid "Printer Abort Window"
+msgstr "Annuler l'impression"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:593
+msgid "Print to filename"
+msgstr "Nom du fichier d'impression"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:594
+msgid "Specify Postscript font alias mapping"
+msgstr "Spécifier l'affectation des polices Postscript"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:595
+msgid ""
+"Displays the Print Setup window to change printers, orientation, paper size, "
+"etc."
+msgstr ""
+"Affiche la fenêtre configuration de l’impression pour changer d'imprimante, "
+"d'orientation, de format du papier, etc."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:596
+msgid "Closes this dialog"
+msgstr "Ferme cette boîte de dialogue"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:597
+msgid "Page orientation"
+msgstr "Orientation de la page"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:598
+msgid "Unprintable margins"
+msgstr "Marges non imprimables"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:599
+msgid "Updates and closes this dialog"
+msgstr "Met à jour et ferme cette boîte de dialogue"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:600
+msgid "Choose paper size"
+msgstr "Choisissez le format de papier"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:601
+msgid "Choose printer"
+msgstr "Choisissez une imprimante"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:602
+msgid "Print test page"
+msgstr "Impression de la page de test"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:1
+#: ../../../../build/work/app/i18n/custmsg.h:8
+msgid ""
+"XTrackCAD provides demonstrations on most of the program's features. The "
+"demos can be run by clicking on the Help menu on the Main window and then "
+"selecting Demos."
+msgstr ""
+"XTrackCAD a des démos sur la plupart des fonctions. Ces démos peuvent être "
+"lues en sélectionnant \"Démos\" dans le menu Aide de la fenêtre principale."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:3
+#: ../../../../build/work/app/i18n/custmsg.h:10
+msgid ""
+"The notation \"Menu|Item\" is used in the documentation (and the on-line "
+"demos and tips) to indicate the selection of a menu item.\n"
+"For example, \"File|Open\" means to open the menu by clicking on File on the "
+"menu bar of the Main window and then selecting the Open item from that menu."
+msgstr ""
+"La notation \"Menu|Item\" est utilisée dans la documentation (et les démos "
+"et astuces en ligne) pour indiquer la sélection d'un élément de menu.\n"
+"Par exemple, \"Fichier|Ouvrir\" signifie ouvrir le menu en cliquant sur "
+"Fichier dans la barre de menu de la fenêtre principale, puis en "
+"sélectionnant l'élément Ouvrir dans ce menu."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:6
+#: ../../../../build/work/app/i18n/custmsg.h:12
+msgid ""
+"Set your modeling scale on the \"Options|Layout\" dialog. This controls the "
+"Turnouts and Structures that are available, Easement values and track gauge."
+msgstr ""
+"Définissez votre échelle de modélisation dans la boîte de dialogue \"Options|"
+"Plan ...\". Cela contrôle les aiguillages et les bâtiments disponibles, les "
+"valeurs des courbes de transition et l'écartement des voies."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:8
+#: ../../../../build/work/app/i18n/custmsg.h:14
+msgid ""
+"A number of example layouts are provided. These files can be accessed by "
+"\"Help|Examples\"."
+msgstr ""
+"Un certain nombre d'exemples de plans sont fournis. Ces fichiers sont "
+"accessibles par \"Aide|Exemples\"."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:10
+#: ../../../../build/work/app/i18n/custmsg.h:16
+msgid ""
+"When installed, the length units are set based on your contry: inches for "
+"United States or Canada and centimeters elsewhere. You can change this on "
+"the \"Options|Preferences\" dialog by choosing between Metric and English."
+msgstr ""
+"Une fois installés, les unités de longueur sont définies en fonction de "
+"votre pays : pouces pour les États-Unis ou le Canada et centimètres "
+"ailleurs. Vous pouvez changer cela dans la boîte de dialogue \"Options | "
+"Préférences\" en choisissant entre métrique et anglais."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:12
+#: ../../../../build/work/app/i18n/custmsg.h:18
+msgid ""
+"You can change the overall size of your layout on the \"Options|Layout\" "
+"dialog."
+msgstr ""
+"Vous pouvez modifier la taille globale de votre plan dans la boîte de "
+"dialogue \"Options|Plan\"."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:14
+#: ../../../../build/work/app/i18n/custmsg.h:20
+msgid ""
+"When installed, the default command is the Select command. You might want to "
+"change this to the Decribe command. You can do this on the \"Options|"
+"Command Options\" dialog."
+msgstr ""
+"Une fois installée, la commande par défaut est la commande 'Sélectionner'. "
+"Vous voudrez peut-être changer cela en commande 'Propriétés'. Vous pouvez le "
+"faire dans la boîte de dialogue \"Options | Commande\"."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:16
+#: ../../../../build/work/app/i18n/custmsg.h:22
+msgid ""
+"When Selecting tracks, the connection between Selected and Unselected tracks "
+"is marked by a Red X. This indicates points where the connection between "
+"tracks will be broken if you Move or Rotate the Selected tracks."
+msgstr ""
+"Pour les voies sélectionnées, la connexion de la voie est marquée par un X "
+"rouge. C'est exactement là où la voie sera séparée lorsqu'elle sera déplacée "
+"ou pivotée."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:18
+#: ../../../../build/work/app/i18n/custmsg.h:24
+msgid ""
+"You can change orientation of the pages on the Print command by moving or "
+"rotating the Print Grid.\n"
+"Shift-Left-Drag moves the grid and Shift-Right-Drag rotates the grid."
+msgstr ""
+"L'orientation des pages à imprimer peut être modifiée en déplaçant ou en "
+"faisant pivoter la grille d'impression.\n"
+"Maj+Left-Drag déplace la grille et Maj+Right-Drag fait pivoter la grille."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:21
+#: ../../../../build/work/app/i18n/custmsg.h:26
+msgid ""
+"You can add track to any unconnected End-Point with the Modify command.\n"
+"Hold down the Shift key and click on the End-Point and drag away to create a "
+"new track segment attached to the End-Point.\n"
+"Repeat with the new End-Point to create flowing tracks."
+msgstr ""
+"Les voies peuvent être ajoutées à n'importe quel point de fin non connecté "
+"avec \"Modifier\".\n"
+"Pour créer une nouvelle section de voie, marquez un point de fin, puis "
+"maintenez la touche Maj enfoncée tout en déplaçant la section de voie.\n"
+"Répétez cette action avec ce nouveau point de fin pour créer des voies "
+"fluides."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:25
+#: ../../../../build/work/app/i18n/custmsg.h:28
+msgid ""
+"You can create curved tracks in four ways by dragging from:\n"
+" the 1st endpoint in the direction of the curve\n"
+" center of the curve to the 1st endpoint\n"
+" endpoint to the center\n"
+" the 1st to 2nd endpoint\n"
+"Then drag on one of the Red arrows to create the final shape of the curve.\n"
+"\n"
+"You can click on the small button to the right of the Curve command button "
+"to change the method."
+msgstr ""
+"Les voies courbes peuvent être créées de quatre manières différentes:\n"
+" à partir du premier point de fin dans la direction de la courbe\n"
+" du centre de la courbe au premier point de fin\n"
+" du point de fin au centre\n"
+" du premier au deuxième point de fin\n"
+"Faites ensuite glisser l'une des deux flèches rouges pour définir la courbe "
+"finale.\n"
+"\n"
+"Les différentes méthodes de création de courbes de voie peuvent être "
+"sélectionnées en cliquant sur le bouton à droite du bouton de courbe dans la "
+"barre d'outils."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:34
+#: ../../../../build/work/app/i18n/custmsg.h:30
+msgid ""
+"When creating a straight or a curved track by dragging from the 1st End "
+"Point, you can snap the new track to an existing open end point by holding "
+"down Shift while you click.\n"
+"The new track will be joined to the old when you create it."
+msgstr ""
+"Lors de la création d'une voie droite ou courbe en faisant glisser depuis le "
+"premier point de fin, la nouvelle voie peut être alignée avec le point de "
+"fin existant en appuyant sur la touche Maj pendant que vous cliquez.\n"
+"La nouvelle voie sera connectée à la voie existante lorsque vous la créerez."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:37
+#: ../../../../build/work/app/i18n/custmsg.h:32
+msgid ""
+"Track Circles provide a quick way to see what arrangement of tracks will fit "
+"in your layout spaces. Create Circles with your typical radius and place "
+"them in corners and other locations where your main-line will make changes "
+"of direction. This will give you an overall idea of how your layout will "
+"look.\n"
+"\n"
+"You can create Circles by:\n"
+" using a fixed radius\n"
+" dragging from the Center to edge\n"
+" dragging from an edge to the Center\n"
+"You can click on the small button to the left of the Circle command button "
+"to change the method."
+msgstr ""
+"Les cercles de voies offrent un moyen rapide de voir quelle disposition des "
+"voies s'adaptera aux espaces du plan. Créez des cercles de voie avec des "
+"rayons communs et placez-les dans les coins ou n'importe où sur votre voie "
+"principale où vous souhaitez changer de direction. Cela vous aidera à "
+"obtenir un premier aperçu de l'ensemble de votre plan de parcours.\n"
+"\n"
+"Les cercles peuvent être créés comme suit :\n"
+" avec un rayon fixe\n"
+" en tirant du milieu vers le bord\n"
+" en tirant du bord vers le milieu\n"
+"Vous pouvez cliquer sur le petit bouton à gauche du bouton de commande "
+"Cercle pour changer la méthode."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:45
+#: ../../../../build/work/app/i18n/custmsg.h:34
+msgid ""
+"Easements (spiral transition curves) are used when track changes from "
+"straight to curved by gradually changing the radius. This improves "
+"operation and appearance.\n"
+"Easements are created with Joining or Extending Tracks.\n"
+"The Easement dialog is used to control easements."
+msgstr ""
+"Les Easements (courbes de transition en spirale) sont utilisées lorsque la "
+"voie passe d'une droite à une courbe en modifiant progressivement le rayon. "
+"Cela améliore le fonctionnement et l'apparence.\n"
+"Les Easements sont créées avec Raccorder ou Étendre les voies.\n"
+"La boîte de dialogue Easement permet leur contrôle."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:49
+#: ../../../../build/work/app/i18n/custmsg.h:36
+msgid ""
+"\"Help|Recent Messages\" shows the last error and warning messages that were "
+"generated by the program. Also an explanation of each message is displayed."
+msgstr ""
+"\"Aide|Messages récents\" affiche les derniers messages d'erreur et "
+"d'avertissement générés par le programme. Une explication pour chaque "
+"message est également affichée."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:51
+#: ../../../../build/work/app/i18n/custmsg.h:38
+msgid ""
+"When creating stall tracks for a turntable, you usually want the the stall "
+"tracks to be spaced evenly.\n"
+"The \"Turntable Angle\" item on \"Options|Preferences\" dialog can be used "
+"specify the minimum angle between stall tracks."
+msgstr ""
+"Lorsque vous créez des voies de manœuvre pour un pont tournant, vous "
+"souhaitez généralement que les voies de manœuvre soient espacées "
+"uniformément.\n"
+"L'élément \"Angle de pont tournant\" de la boîte de dialogue \"Options|"
+"Préférences\" peut être utilisé pour spécifier l'angle minimum entre les "
+"voies de manœuvre."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:54
+#: ../../../../build/work/app/i18n/custmsg.h:40
+msgid ""
+"XTrackCAD periodically saves the current layout in a check point file. The "
+"'Check Point' item on the 'Options|Preferences' dialog controls how often "
+"the file is saved.\n"
+"You can recover your working file after a system crash by copying the "
+"checkpoint file (xtrkcad.ckp in the XTrackCAD Working directory) to file.xtc"
+msgstr ""
+"XTrackCAD enregistre constamment votre travail actuel dans un fichier "
+"temporaire. Vous pouvez spécifier la fréquence de cette sauvegarde "
+"automatique dans le champ «Sauvegarde» sous l'élément de menu «Options|"
+"Préférences».\n"
+"Après un crash système/programme, copiez simplement le fichier xtrkcad.ckp "
+"(depuis le répertoire \"C:\\Users\\Nom\\AppData\\Roaming\\XTrackCad\") vers "
+"le répertoire de travail où se trouvent les fichiers \"file.xtc\""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:57
+#: ../../../../build/work/app/i18n/custmsg.h:42
+msgid ""
+"The Parallel command is helpful to layout yards and sidings. If the "
+"Parallel track abuts with an existing track, it is automatically connected."
+msgstr ""
+"La commande Parallèle est utile pour créer des dépôts et des voies "
+"d'évitement. Si une voie parallèle touche presque une voie existante, elle "
+"se connecte automatiquement."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:59
+#: ../../../../build/work/app/i18n/custmsg.h:44
+msgid ""
+"You can use Shift-Drag in Select command to move and rotate selected "
+"tracks.\n"
+"Shift-Left-Drag moves tracks and Shift-Right-Drag rotates them.\n"
+"Control-Left-Drag can move labels."
+msgstr ""
+"Vous pouvez utiliser Maj + bouton de souris dans la commande Select pour "
+"déplacer et faire pivoter les voies sélectionnées.\n"
+"Maj + bouton gauche déplace les voies et Maj et le bouton droit les fait "
+"pivoter.\n"
+"Ctrl + bouton gauche peut déplacer des étiquettes."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:63
+#: ../../../../build/work/app/i18n/custmsg.h:46
+msgid ""
+"You can move and rotate the Snap Grid to align with existing track or "
+"benchwork."
+msgstr ""
+"La grille de capture peut être déplacée ou tournée de manière à pouvoir être "
+"alignée avec des rails ou des superstructures."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:65
+#: ../../../../build/work/app/i18n/custmsg.h:48
+msgid ""
+"Use the Parts List command to measure track length.\n"
+"Select the tracks you want to measure and then click on the Parts List "
+"button. The report will list the total of length of the selected flex-"
+"track. You will have to add in the length of any Turnouts."
+msgstr ""
+"La boîte de dialogue \"Gérer|Liste des pièces\" peut être utilisée pour "
+"mesurer les longueurs de voie.\n"
+"Sélectionnez les voies que vous souhaitez mesurer, puis cliquez sur le "
+"bouton Liste des pièces. Le rapport répertorie la longueur totale de la voie "
+"flexible sélectionnée. Vous devrez ajouter la longueur des aiguillages."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:68
+#: ../../../../build/work/app/i18n/custmsg.h:50
+msgid ""
+"The length of flex-track attached to each Turnout is displayed on layout "
+"near the end-points of the Turnouts.\n"
+"Make sure 'Lengths' option of the 'Label Enable' toggle button on the "
+"Display dialog is selected."
+msgstr ""
+"La longueur de la voie flexible connectée à chaque aiguillage est affichée "
+"près du point final de l'aiguillage.\n"
+"Assurez-vous que l'option \"Longueurs\" est sélectionnée dans la boîte de "
+"dialogue \"Options|Affichage\"."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:71
+#: ../../../../build/work/app/i18n/custmsg.h:52
+msgid ""
+"The Profile command can be used to find the length of a continous section of "
+"track.\n"
+"Select the track at the beginning and end of the section. The total length "
+"of track will be displayed on the Profile window in the lower right corner.\n"
+"Note: the Profile selects the shortest path between the two selected tracks, "
+"which might not be the path you are interested in. In this case, select the "
+"first track and then select other tracks along the path."
+msgstr ""
+"La commande \"Profil\" du menu \"Modifier\" peut être utilisée pour trouver "
+"la longueur d'une section continue de voie.\n"
+"Sélectionnez la voie au début et à la fin de la section. La longueur totale "
+"de la voie sera affichée dans la fenêtre Profil dans le coin inférieur "
+"droit.\n"
+"Remarque : le profil sélectionne le chemin le plus court entre les deux "
+"voies sélectionnées, qui peut ne pas être le chemin qui vous intéresse. Dans "
+"ce cas, sélectionnez la première voie, puis sélectionnez d'autres voies le "
+"long du chemin."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:75
+#: ../../../../build/work/app/i18n/custmsg.h:54
+msgid ""
+"Layers can be used to contain different groups of tracks or other features. "
+"You might use one layer for the main-line, another of staging tracks and "
+"another of benchwork.\n"
+msgstr ""
+"Les calques peuvent être utilisés pour contenir différents groupes de voies "
+"ou d’autres fonctionnalités. Vous pouvez utiliser une couche pour la ligne "
+"principale, une autre pour les gares cachées et une autre pour les sous-"
+"bâtiments.\n"
+"Vous pouvez attribuer un nom à chaque couche (à l'aide de la boîte de "
+"dialogue Calque). Ce nom sera affiché dans la bulle d'aide du bouton de "
+"calque correspondant, si la bulle d'aide est activée dans la boîte de "
+"dialogue Affichage.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:77
+#: ../../../../build/work/app/i18n/custmsg.h:56
+msgid ""
+"You can give each layer a name (by using the \"Manage|Layer\" dialog). This "
+"name will be displayed as the Balloon Help for the corresponding Layer "
+"button, if you have Balloon Help enabled on the \"Options|Display\" dialog."
+msgstr ""
+"Les calques peuvent être utilisés pour contenir différents groupes de voies "
+"ou d’autres fonctionnalités. Vous pouvez utiliser une couche pour la ligne "
+"principale, une autre pour les gares cachées et une autre pour les sous-"
+"bâtiments.\n"
+"Vous pouvez attribuer un nom à chaque couche (à l'aide de la boîte de "
+"dialogue Calque). Ce nom sera affiché dans la bulle d'aide du bouton de "
+"calque correspondant, si la bulle d'aide est activée dans la boîte de "
+"dialogue \"Options|Affichage\"."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:79
+#: ../../../../build/work/app/i18n/custmsg.h:58
+msgid ""
+"You can remove groups of buttons or the Hot Bar from the Main window to give "
+"you more room if you are not using some features. Also, the number of Layer "
+"buttons displayed is controlled by the \"Manage|Layers\" dialog."
+msgstr ""
+"Vous pouvez alléger la fenêtre principale de certains groupes de boutons ou "
+"de la barre dynamique pour vous donner plus d'espace si vous n'utilisez pas "
+"certaines fonctionnalités. De plus, le nombre de boutons de calque affichés "
+"est contrôlé par la boîte \"Gérer|Calques\"."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:81
+#: ../../../../build/work/app/i18n/custmsg.h:60
+msgid ""
+"The size of the map window is controlled by the overall size of the room "
+"(specified on the layout dialog) and the map scale (on the display dialog). "
+"You can make the Map window larger (or smaller) by decreasing (or "
+"increasing) the map scale.\n"
+"XTrackCad will prevent you from making the map window too small or too large."
+msgstr ""
+"La taille de la fenêtre de la carte est contrôlée par la taille globale de "
+"la pièce (spécifiée dans la boîte de dialogue Options|Plan) et l'échelle de "
+"la carte (dans la boîte de dialogue Options|Affichage). Vous pouvez agrandir "
+"(ou réduire) la fenêtre Carte en diminuant (ou en augmentant) l'échelle de "
+"la carte.\n"
+"XTrackCad vous empêchera de rendre la fenêtre de carte trop petite ou trop "
+"grande."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:84
+#: ../../../../build/work/app/i18n/custmsg.h:62
+msgid ""
+"You can unload parameter files you are not using by the Parameter Files "
+"dialog. This removes unused Turnout and Structure definitions from the Hot "
+"Bar and makes the program start faster."
+msgstr ""
+"Vous pouvez décharger les fichiers de paramètres que vous n'utilisez pas "
+"dans la boîte de dialogue \"Fichiers de paramètres\". Cela supprime les "
+"définitions d'aiguillage et de structure inutilisées de la barre dynamique "
+"et accélère le démarrage du programme."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:86
+#: ../../../../build/work/app/i18n/custmsg.h:64
+msgid ""
+"Right-Click on the Main window displays a menu list of commands as an "
+"alternative to pressing the buttons on the tool bar or using the menu "
+"accelerator keys."
+msgstr ""
+"Comme alternative à la barre d'outils ou aux touches de menu, un autre menu "
+"de commande peut être utilisé en cliquant avec le bouton droit dans la "
+"fenêtre principale."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:87
+#: ../../../../build/work/app/i18n/custmsg.h:66
+msgid ""
+"Holding down the Shift key while you Right-Click will display options for "
+"the current command (if any)."
+msgstr ""
+"Si la touche Maj reste enfoncée pendant que vous avez sélectionné une "
+"commande (le cas échéant), les options pour cette commande seront affichées."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:89
+#: ../../../../build/work/app/i18n/custmsg.h:68
+msgid ""
+"Right-Click on the Hot Bar displays a menu of the different groups of "
+"objects which you can use to jump to the group you are interested in.\n"
+"Pressing a numeric key (1-9 and 0) moves the Hot Bar to corresponding "
+"position (1 is the start, 5 is half way, 0 is the end)."
+msgstr ""
+"Un clic droit dans la sélection rapide ouvre un menu avec différents groupes "
+"d'objets, ceux-ci peuvent être utilisés pour passer rapidement à ce type de "
+"voie.\n"
+"En appuyant sur les chiffres de la sélection rapide (1-9 et 0), la position "
+"correspondante de la sélection de voie peut également être modifiée, où 1 "
+"indique la première sélection de voie, 5 indique le milieu de la sélection "
+"et 0 indique la fin."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:92
+#: ../../../../build/work/app/i18n/custmsg.h:70
+msgid ""
+"Right-Drag on the Map window sets the origin and scale of the Main window.\n"
+"The Main window will be centered on the spot where you started the Draw and "
+"how far you Drag will control how large an area you can see on the Main "
+"window."
+msgstr ""
+"En faisant glisser la souris avec le bouton droit dans la fenêtre de "
+"navigation on définit l'origine et l'échelle de la fenêtre principale.\n"
+"La fenêtre principale est centrée à l'endroit où vous avez commencé le "
+"dessin. La sélection en surbrillance de la fenêtre de navigation détermine "
+"la zone que vous pouvez voir dans la fenêtre principale."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:95
+#: ../../../../build/work/app/i18n/custmsg.h:72
+msgid ""
+"To refresh the Main window, press Control-L (hold down the 'Ctrl' key and "
+"then press the 'l' key)."
+msgstr ""
+"Pour actualiser la fenêtre principale, appuyez sur Ctrl+L (maintenez "
+"enfoncée la touche «Ctrl», puis appuyez sur la touche «l»)."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:97
+#: ../../../../build/work/app/i18n/custmsg.h:74
+msgid ""
+"The File menu contains a list of the last 5 layouts you were working on."
+msgstr ""
+"Le menu Fichier contient une liste des 5 derniers plans sur lesquels vous "
+"travailliez."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:99
+#: ../../../../build/work/app/i18n/custmsg.h:76
+msgid ""
+"The Print command can optionally print lines representing the roadbed for "
+"all tracks. This is useful when printing full size (1:1) for cutting "
+"roadbed."
+msgstr ""
+"Dans la boîte de dialogue \"Imprimer\", l'option \"Imprimer le contour du "
+"ballast\" peut être sélectionnée afin de pouvoir imprimer des modèles de "
+"ballast à l'échelle (1:1)."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:101
+#: ../../../../build/work/app/i18n/custmsg.h:78
+msgid ""
+"Pressing the 'Esc' key cancels the current command and invokes the default "
+"command, (which is either Describe or Select)."
+msgstr ""
+"Appuyez sur la touche «ESC» pour annuler la commande en cours et activer "
+"automatiquement la commande par défaut (qui est soit Propriétés, soit "
+"Sélectionner)."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:103
+#: ../../../../build/work/app/i18n/custmsg.h:80
+msgid ""
+"When moving or rotating tracks on slow machines or with a large number of "
+"tracks, you can improve performance by changing the way tracks are drawn "
+"while being moved.\n"
+"Shift-Right click will display a menu containing options to draw tracks "
+"normally, as simple lines or just draw end-points."
+msgstr ""
+"Sur les ordinateurs lents ou avec un nombre élevé de voies, la façon dont "
+"les voies sont redessinées peut être modifiée.\n"
+"Une fois les voies dessinées, le fait de maintenir la touche Maj enfoncée et "
+"de cliquer avec le bouton droit de la souris dans un menu d'options vous "
+"permet de choisir comment afficher les voies : normales, simples ou "
+"simplement comme points de fin."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:106
+#: ../../../../build/work/app/i18n/custmsg.h:82
+msgid ""
+"The colors of different parts of the Main window can be changed with the "
+"Colors dialog. In particular, the Snap Grid color can be changed to make it "
+"more visible when printed."
+msgstr ""
+"Les couleurs des différents assemblages dans la fenêtre principale peuvent "
+"être modifiées via la boîte de dialogue \"Options|Couleurs\". En "
+"particulier, la couleur de la grille magnétique peut être modifiée pour la "
+"rendre plus visible lors de l'impression."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:108
+#: ../../../../build/work/app/i18n/custmsg.h:84
+msgid ""
+"By default objects are drawn in their normal colors. Tracks will be drawn "
+"in Black. Objects can also be drawn in the color according to their Layer. "
+"The color of a Layer is displayed on the corresponding Layer button.\n"
+"The Display dialog 'Color Layers' item has separate toggles for Tracks and "
+"non-Tracks."
+msgstr ""
+"Habituellement, les objets sont dessinés dans leurs couleurs par défaut. Les "
+"voies sont affichées en noir. Les objets peuvent être affichés dans les "
+"couleurs de leurs calques respectifs. La couleur d'un calque est affichée "
+"sur son bouton de calque associé.\n"
+"L'option \"Couleurs des calques\" dans la boîte de dialogue "
+"\"Options>Affichage\" dispose d'une option distincte pour les voies et "
+"l'autre pour l'activation des couleurs."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:111
+#: ../../../../build/work/app/i18n/custmsg.h:86
+msgid ""
+"Each Layer can be drawn or hidden by the 'Visible' toggle on the Layers "
+"dialog."
+msgstr ""
+"Chaque calque peut être affiché ou masqué par la bascule 'Visible' dans la "
+"boîte de dialogue Gérer|Calques."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:112
+#: ../../../../build/work/app/i18n/custmsg.h:88
+msgid ""
+"Short cut Layer buttons can also be displayed on the tool bar for up to the "
+"first 20 layers.\n"
+"This buttons allow to Show or Hide the layers."
+msgstr ""
+"Des boutons de calque raccourcis peuvent également être affichés dans la "
+"barre d'outils pour les 20 premiers calques au maximum.\n"
+"Ces boutons permettent d'afficher ou de masquer les calques."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:115
+#: ../../../../build/work/app/i18n/custmsg.h:90
+msgid "The name of the Layer is the Balloon Help for the Layer button."
+msgstr ""
+"Le nom d'un calque est affiché dans la bulle de dialogue de chaque calque "
+"respectif."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:117
+#: ../../../../build/work/app/i18n/custmsg.h:92
+msgid ""
+"The playback speed of the Demos can be changed by using Speed drop down list "
+"on the Demo window."
+msgstr ""
+"La vitesse de lecture des démos peut être modifiée par l'onglet de sélection "
+"dans le coin supérieur droit de la fenêtre de démonstration."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:119
+#: ../../../../build/work/app/i18n/custmsg.h:94
+msgid ""
+"Many of the commands and dialogs can be invoked by special key combinations "
+"called Menu-Accelerators. These are listed on the Menus next to the command "
+"name. For example, Control-P will invoke the Print command."
+msgstr ""
+"De nombreuses commandes et dialogues peuvent être appelés à l'aide de "
+"combinaisons de touches spéciales appelées Accélérateurs de menu. Celles-ci "
+"sont répertoriées dans les menus en regard du nom de la commande. Par "
+"exemple, Ctrl+P appellera la commande Imprimer."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:121
+#: ../../../../build/work/app/i18n/custmsg.h:96
+msgid ""
+"The Connect command is used to join Sectional track pieces that don't quite "
+"fit together.\n"
+"This command works by adding small gaps between other tracks to move the "
+"selected End-Points closer together."
+msgstr ""
+"La commande 'Connecter deux voies' est utilisée pour joindre des morceaux de "
+"section de voie qui ne s'emboîtent pas tout à fait ensemble.\n"
+"Cette commande fonctionne en ajoutant de petits espaces entre les autres "
+"voies pour que les points de fin puissent être connectés l'un à l'autre."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:124
+#: ../../../../build/work/app/i18n/custmsg.h:98
+#, fuzzy
+msgid ""
+"To copy a group of objects: Select the objects, press Control-c (or select "
+"Copy from the Edit menu), press Control-v (or select Paste from the Edit "
+"menu).\n"
+"The selected tracks will be copied to the layout and you can Move or Rotate "
+"them into position."
+msgstr ""
+"Pour copier un groupe d'objets : sélectionnez-les, appuyez sur Ctrl+C (ou "
+"choisissez Copier dans le menu Editer), appuyez sur Ctrl+V (ou choisissez "
+"Coller dans le menu Editer ).\n"
+"Les objets copiés sont insérés sur le plan de voie et peuvent ensuite être "
+"déplacés ou tournés et ainsi mis en position."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:127
+#: ../../../../build/work/app/i18n/custmsg.h:100
+msgid ""
+"In the Rotate (or Select) commands you can press Shift-Right-Click to "
+"display the Rotate menu which allows you to rotate the selected objects by a "
+"specific angle."
+msgstr ""
+"Dans les commandes Rotation (ou Sélection), vous pouvez appuyer sur Maj+Clic-"
+"droit pour afficher le menu Rotation qui vous permet de faire pivoter les "
+"objets sélectionnés d'un angle spécifique."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:129
+#: ../../../../build/work/app/i18n/custmsg.h:102
+msgid ""
+"You can use the Move-To-Join option of the Join command (hold down the Shift "
+"key) to move a group of Selected tracks to attach with some unselected End-"
+"Point."
+msgstr ""
+"La commande \"Connecter deux voies\" du menu \"Modifier\" a une option pour "
+"pouvoir connecter un groupe de voies sélectionnées à un point de fin non "
+"spécifié précédemment. Marquez d'abord les voies à connecter, puis "
+"sélectionnez la boîte de dialogue \"Modifier|Connecter deux voies\", "
+"maintenez la touche Maj enfoncée tout en maintenant le bouton gauche de la "
+"souris enfoncé et déplacez le groupe de voies marqué vers le point cible en "
+"appuyant à nouveau sur le bouton gauche de la souris, les voies "
+"sélectionnées sont ajoutées au point de fin."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:131
+#: ../../../../build/work/app/i18n/custmsg.h:104
+msgid ""
+"The Price List dialog (on the File Menu) is used to specify the prices of "
+"each type of Turnout, Sectional Track and Structure. Also, the length and "
+"price of flex-track pieces can be specified for each scale.\n"
+"This values will be used on the Parts List report to generate total cost of "
+"the selected objects."
+msgstr ""
+"La boîte de dialogue 'Gérer|Liste de prix' peut être utilisée pour saisir "
+"les prix de chaque voie, aiguillage ou autre élément. Vous pouvez également "
+"saisir la longueur et le prix des voies Flex pour n'importe quelle échelle.\n"
+"Les prix indiqués sont utilisés pour lister les coûts totaux dans la boîte "
+"de dialogue \"Gérer|Liste des pièces\"."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:134
+#: ../../../../build/work/app/i18n/custmsg.h:106
+msgid ""
+"Areas of water can represented by a Polygon (use the Draw command) of the "
+"appropiate color.\n"
+"By using the Modify command, you can move, add or remove corners of the "
+"Polygon to fit the shape of the water.\n"
+"You use the Below command to place the Polygon below (or behind) other "
+"objects.\n"
+"\n"
+"You can also use a Polygon to represent aisles."
+msgstr ""
+"Les zones d'eau peuvent être représentées par un polygone (utilisez la "
+"commande Dessiner) de la couleur appropriée.\n"
+"En utilisant la commande Modifier, vous pouvez déplacer, ajouter ou "
+"supprimer des angles du polygone pour l’ajuster à la forme de l’eau.\n"
+"Vous utilisez la commande Au-dessous pour placer le polygone au-dessous (ou "
+"derrière) d'autres objets.\n"
+"\n"
+"Vous pouvez également utiliser un polygone pour représenter des allées."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:140
+#: ../../../../build/work/app/i18n/custmsg.h:108
+msgid ""
+"When you create Benchwork you can move it below other objects by Selecting "
+"the Benchwork and use the Below command.\n"
+"Also, put Benchwork in a separate Layer so you can hide it if desired."
+msgstr ""
+"Lorsque vous créez une structure, vous pouvez la déplacer sous d'autres "
+"objets en sélectionnant la structure et en utilisant la commande \"Au-dessous"
+"\" du menu \"Edition\".\n"
+"Placez également la structure dans un calque séparé afin de pouvoir la "
+"masquer si vous le souhaitez."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:143
+#: ../../../../build/work/app/i18n/custmsg.h:110
+msgid ""
+"You can enter Distances and Lengths using any format regardless of the "
+"Length Format on the Preferences dialog."
+msgstr ""
+"Les longueurs peuvent être saisies indépendamment des valeurs prédéfinies "
+"dans la boîte de dialogue \"Options|Paramètres\"."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:144
+#: ../../../../build/work/app/i18n/custmsg.h:112
+msgid ""
+"You can enter Metric values when English is the default Units and vice versa."
+msgstr ""
+"Les valeurs métriques peuvent être saisies même si le paramètre pour les "
+"unités anglaises est sélectionné et vice versa."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:146
+#: ../../../../build/work/app/i18n/custmsg.h:114
+msgid ""
+"When entering Distances and Lengths you can press the '=' key to redisplay "
+"the value in the default format."
+msgstr ""
+"Lorsque vous entrez des distances et des longueurs, vous pouvez utiliser le "
+"caractère '=' pour afficher de nouveau la valeur au format par défaut."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:147
+#: ../../../../build/work/app/i18n/custmsg.h:116
+msgid ""
+"You can also press the 's' key to convert a Prototype measurement to a Scale "
+"measurement by dividing by the ratio for the current scale."
+msgstr ""
+"Vous pouvez également appuyer sur la touche «s» pour convertir une mesure de "
+"prototype en une mesure d'échelle en divisant par le rapport de l'échelle "
+"actuelle."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:148
+#: ../../../../build/work/app/i18n/custmsg.h:118
+msgid ""
+"The 'p' key will convert a Scale measurement to a Prototype measurement."
+msgstr ""
+"La touche «p» convertira une mesure d'échelle en une mesure de prototype."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:150
+#: ../../../../build/work/app/i18n/custmsg.h:120
+msgid ""
+"You can place cars on the layout using the Train Simulation command to check "
+"clearance points, track to track separation and coupling."
+msgstr ""
+"Les véhicules peuvent être placées dans le plan de voie à l'aide de la "
+"commande Train Simulation afin de simuler les passages à niveau, les "
+"liaisons voie à voie ou le couplage."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:152
+#: ../../../../build/work/app/i18n/custmsg.h:122
+msgid ""
+"Use the MoveTo button on the Custom Management dialog to move your custom "
+"Turnout, Structure and Car definitions to a .XTP parameter file."
+msgstr ""
+"Utilisez le bouton \"Déplacer vers\" dans le menu \"Gérer|Eléments définis "
+"sur mesure\" pour déplacer vos définitions d'aiguillage personnalisées, de "
+"bâtiments ou de définitions de véhicule vers un fichier de paramètres .XTP."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:154
+#: ../../../../build/work/app/i18n/custmsg.h:124
+msgid ""
+"If you are printing multiple pages on a continuous feed printer (such a Dot "
+"Matrix) you can change the Page Order if necessary to print pages out in "
+"proper order."
+msgstr ""
+"Si vous utilisez une imprimante avec du papier listing, vous pouvez modifier "
+"l'ordre des pages pour les imprimer dans le bon ordre."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:156
+#: ../../../../build/work/app/i18n/custmsg.h:126
+msgid ""
+"On the Car Item and Car Part dialogs, you can enter custom values for "
+"Manufacturer, Part and Road by typing the new value directly into the Drop "
+"Down List."
+msgstr ""
+"Dans les boîtes de dialogue Elément et Pièce de véhicule, vous pouvez entrer "
+"des valeurs personnalisées propres au fabricant, numéro d'article et chemin "
+"en tapant la nouvelle valeur directement dans la liste déroulante."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:158
+#: ../../../../build/work/app/i18n/custmsg.h:128
+msgid ""
+"On the Car Item dialog, you can change the Road, Number, Color and other "
+"values for a Car. This is useful if you repaint or renumber a car. \n"
+"You can also change the Coupler Mounting and Coupler Length if you change "
+"the couplers."
+msgstr ""
+"Dans la boîte de dialogue \"Gérer|Inventaire du véhicule\", vous pouvez "
+"modifier les valeurs Compagnie ferroviaire, Nombres, Couleur et autres d'un "
+"véhicule. C'est utile si vous repeignez ou renumérotez une voiture.\n"
+"Vous pouvez également modifier le montage et la longueur de l'attelage si "
+"vous changez les attelages."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:161
+#: ../../../../build/work/app/i18n/custmsg.h:130
+msgid ""
+"You can Export your Car Inventory to a file in Comma-Separated-Value format "
+"which can be read by most spread-sheet programs."
+msgstr ""
+"Votre inventaire de véhicules peut être exporté dans un fichier texte, "
+"séparé par des virgules, qui peut être lu par tous les tableurs courants."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:163
+#: ../../../../build/work/app/i18n/custmsg.h:132
+msgid "Use the Train Odometer to measure distances along the track."
+msgstr ""
+"Utilisez le compteur de la commande du train pour mesurer les distances de "
+"la voie."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:165
+#: ../../../../build/work/app/i18n/custmsg.h:134
+msgid ""
+"Holding down the Shift key when clicking the Zoom In or Zoom Out button will "
+"zoom to a programmed Drawing Scale. \n"
+"Holding down the Shift and Control keys when clicking a Zoom button will set "
+"it's program Zoom to the current Drawing Scale."
+msgstr ""
+"Si vous cliquez sur les boutons en forme de loupe alors que vous appuyez sur "
+"la touche Maj, le programme revient à une échelle prédéterminée.\n"
+"En maintenant simultanément les touches Ctrl+Maj enfoncées, vous pouvez "
+"définir le grossissement ou la réduction en cliquant sur les boutons de la "
+"loupe correspondants."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:168
+#: ../../../../build/work/app/i18n/custmsg.h:136
+msgid ""
+"You can trim the ends of turnouts by holding down the Shift key when using "
+"the Split command."
+msgstr ""
+"Vous pouvez couper les extrémités des aiguillages en maintenant la touche "
+"Maj enfoncée lorsque vous utilisez la commande \"Segmentation de voie\"."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:170
+#: ../../../../build/work/app/i18n/custmsg.h:138
+msgid ""
+"The Split command can be used to create Block Gaps at end points between two "
+"tracks. \n"
+"Either rail or both rails can be gapped, which are drawn as thick lines."
+msgstr ""
+"La commande \"Modifier|Segmentation de voie\" peut être utilisée pour "
+"insérer des intervalles de bloc entre les extrémités de deux voies.\n"
+"Les distances peuvent être insérées à l'une ou aux deux extrémités, elles "
+"sont tracées sous forme de lignes épaisses."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:173
+#: ../../../../build/work/app/i18n/custmsg.h:140
+msgid ""
+"Trains will 'crash' if they hit another car when travelling faster than the "
+"'Max Coupling Speed' (on the Command Options dialog). \n"
+"They will also 'crash' if they hit the end of the track or an open "
+"turnout. \n"
+"Crashed trains must be manually moved back onto the track."
+msgstr ""
+"Les trains «déraillent» s'ils heurtent un autre véhicule lorsqu'ils roulent "
+"plus vite que la «Vitesse maximale de couplage» (dans la boîte de dialogue "
+"\"Options|Préférences\").\n"
+"Ils seront également «déraillés» s'ils atteignent une fin de la voie ou un "
+"aiguillage ouvert.\n"
+"Les trains déraillés doivent être remis sue la voie à la main."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:177
+#: ../../../../build/work/app/i18n/custmsg.h:142
+msgid ""
+"You can add new track segments to a turnout definition or create a "
+"definition from individual tracks using the Group command."
+msgstr ""
+"Vous pouvez ajouter de nouveaux segments de voie à une définition "
+"d'aiguillage ou pour créer une nouvelle définition dans laquelle des voies "
+"individuelles sont combinées."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:179
+#: ../../../../build/work/app/i18n/custmsg.h:144
+msgid ""
+"The center point and radius of Curved and Circle tracks can optionally be "
+"drawn. \n"
+"This feature is toggled by using the Move Label command and doing a Shift-"
+"Left-Click on the track."
+msgstr ""
+"Le centre des courbes ou des cercles peut également être affiché.\n"
+"Cette option peut être activée/désactivée en maintenant la touche Maj "
+"enfoncée tout en cliquant avec le bouton gauche de la souris."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:182
+#: ../../../../build/work/app/i18n/custmsg.h:146
+msgid ""
+"Turnout, Curved and Helix track labels can be individually turned on and off "
+"by doing a Shift-Right-Click on the track when using the Move Label command."
+msgstr ""
+"Les étiquettes d'aiguillage, de courbe et d'hélicoïde peuvent être activées "
+"et désactivées individuellement en faisant un Maj-clic droit sur la voie "
+"lors de l'utilisation de la commande \"Modifier|Déplacer la description\" ."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:184
+#: ../../../../build/work/app/i18n/custmsg.h:148
+msgid ""
+"You can use the Describe command to change the font size of Text objects."
+msgstr ""
+"La commande \"Modifier|Propriétés\" permet de modifier la taille de police "
+"des objets texte."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:186
+#: ../../../../build/work/app/i18n/custmsg.h:150
+msgid ""
+"You can use the Describe command to change the size of Dimension Line labels."
+msgstr ""
+"La commande \"Modifier|Propriétés\" permet de modifier la taille des "
+"descriptions de ligne de cote."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:188
+#: ../../../../build/work/app/i18n/custmsg.h:152
+msgid ""
+"Normally Right-Click displays a popup menu of commands and Shift-Right-Click "
+"displays options for the current command. \n"
+"This can reversed by using the Right Click toggle button on the Command "
+"Options dialog."
+msgstr ""
+"Normalement, le clic droit affiche un menu contextuel de commandes et Maj-"
+"clic droit affiche les options de la commande en cours.\n"
+"Ce comportement peut être inversé via la boîte de dialogue des options de "
+"commande."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:191
+#: ../../../../build/work/app/i18n/custmsg.h:154
+msgid ""
+"The Align item on the Rotate command options menu will let you Align "
+"selected objects with any unselected object. \n"
+"The selected objects are rotated so the first point is parallel to the "
+"second point you selected."
+msgstr ""
+"L'élément Aligner du menu d'options de la commande Rotation vous permet "
+"d'aligner les objets sélectionnés avec n'importe quel objet non "
+"sélectionné.\n"
+"Les objets sélectionnés pivotent de sorte que le premier point soit "
+"parallèle au deuxième point sélectionné."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:194
+#: ../../../../build/work/app/i18n/custmsg.h:156
+msgid ""
+"Print To Bitmap allows you to print the track center line. \n"
+"This is useful if you later print the bitmap full size as a template when "
+"laying track."
+msgstr ""
+"Imprimer en bitmap vous permet d'imprimer la ligne centrale de la voie.\n"
+"C'est utile si vous imprimez ultérieurement le bitmap en taille réelle comme "
+"modèle pour poser la voie."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:197
+#: ../../../../build/work/app/i18n/custmsg.h:158
+msgid ""
+"You can export the selected tracks to a DXF file which can be read by most "
+"CAD programs."
+msgstr ""
+"Vous pouvez exporter les voies sélectionnées dans un fichier DXF qui peut "
+"être lu par la plupart des programmes de CAO."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:199
+#: ../../../../build/work/app/i18n/custmsg.h:160
+msgid ""
+"Lengths and distances can be displayed in a variety of units and formats "
+"such as 1' 10 3/4\", 1ft 10.75in or 22.750. In Metric mode, distances can "
+"be displayed as millimeters, centimeters or meters. See the Length Format "
+"item on the Preferences dialog."
+msgstr ""
+"Les longueurs et les distances peuvent être affichées dans une variété "
+"d'unités et de formats, tels que 1' 10 3/4\", 1ft 10.75in ou 22.750. Lorsque "
+"les unités métriques sont sélectionnées, les distances et les longueurs sont "
+"affichées en millimètres, centimètres ou mètres avec la sélection \"Unités\" "
+"dans la boîte de dialogue \"Options|Préférences\"."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:201
+#: ../../../../build/work/app/i18n/custmsg.h:162
+msgid ""
+"Tracks that are too steep or curve too tightly are drawn in the Exception "
+"color (Yellow by default). \n"
+"This helps to identify potential problem areas. \n"
+"The maximum grade and minimum radius are set on the Preferences dialog."
+msgstr ""
+"Les voies trop raides ou trop serrées sont dessinées dans la couleur "
+"d'exception (Violet par défaut).\n"
+"Cela aide à trouver les zones à problèmes.\n"
+"La pente maximale et le rayon minimum sont définis dans la boîte de dialogue "
+"Propriétés."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:205
+#: ../../../../build/work/app/i18n/custmsg.h:164
+msgid ""
+"The Flip command produces a mirror-image of the selected tracks. \n"
+"If possible, right-hand turnouts are relabeled as left-hand turnouts (and "
+"vice versa)."
+msgstr ""
+"La commande \"Miroir\" du menu \"Modifier\" reflète les voies "
+"sélectionnées.\n"
+"Si possible, les aiguillages à droite sont renommés aiguillages à gauche (et "
+"vice versa)."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:208
+#: ../../../../build/work/app/i18n/custmsg.h:166
+msgid ""
+"Then Ungroup command will break turnouts and structures into individual "
+"track, line and shape segments. \n"
+"You can modify each segment and add new ones. \n"
+"Then use the Group command to update the definition."
+msgstr ""
+"La commande \"Gérer|Dissocier\" sépare les commutateurs et/ou les structures "
+"en segments individuels de voie, de ligne et de forme.\n"
+"Vous pouvez maintenant modifier chaque segment pour en ajouter de nouveaux, "
+"etc.\n"
+"Utilisez ensuite la commande \"Gérer|Grouper\" pour mettre à jour votre "
+"nouvelle définition en tant que groupe."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:212
+#: ../../../../build/work/app/i18n/custmsg.h:168
+msgid "Dimension lines show the distance between two points."
+msgstr "Les voies de cote indiquent la distance entre deux points."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:214
+#: ../../../../build/work/app/i18n/custmsg.h:170
+msgid ""
+"A variety of Benchwork (rectangular, L-girder and T-girder) can be drawn. \n"
+"Use the Below command to move the Benchwork below the track for proper "
+"display."
+msgstr ""
+"Une variété de sous-bâtiments (rectangulaires, formes en L ou en T) peuvent "
+"être dessinées.\n"
+"Utilisez la commande \"Au dessous\" du menu \"Editer\" pour déplacer les "
+"sous-bâtiments sous les \n"
+"voies pour un affichage correct."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:217
+#: ../../../../build/work/app/i18n/custmsg.h:172
+msgid ""
+"The Turnout Designer dialogs allow you to specify the width of any attached "
+"roadbed. \n"
+"As well, the color and thickness of the lines used to represent the roadbed "
+"can be specified."
+msgstr ""
+"Les boîtes de dialogue \"Gérer|Conception d'aiguillage\" vous permettent de "
+"spécifier la largeur de n'importe quel ballast associé.\n"
+"De plus, la couleur et l'épaisseur des lignes utilisées pour représenter le "
+"ballast peuvent être précisées."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:220
+#: ../../../../build/work/app/i18n/custmsg.h:174
+msgid ""
+"The Color dialog (on the Options menu) is used to change the color of "
+"different objects on the display. \n"
+"You can change the color of the Snap Grid and Borders, as well as Normal, "
+"Selected and Exception tracks."
+msgstr ""
+"La boîte de dialogue \"Options|Couleurs\" permet de définir les couleurs des "
+"différents objets.\n"
+"Vous pouvez modifier la couleur de la Grille magnétique, des Bordures ainsi "
+"que des Voies normale, sélectionnée ou non conformes."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:223
+#: ../../../../build/work/app/i18n/custmsg.h:176
+msgid ""
+"You can set the elevation (height) of track end-points. \n"
+"Elevations of intermediate end points can be computed automatically based on "
+"the distance to the nearest end points with defined elevations. \n"
+"Grades can also be displayed at selected end points. \n"
+"Please see the Elevations help and demo."
+msgstr ""
+"Vous pouvez définir l'élévation (hauteur) des extrémités de la voie.\n"
+"Les élévations des extrémités intermédiaires peuvent être calculées "
+"automatiquement en fonction de la distance aux extrémités les plus proches "
+"avec des élévations définies.\n"
+"Les gradients peuvent également être affichées aux points de fin "
+"sélectionnés.\n"
+"Veuillez consulter l'aide et la démonstration pour les Elévations."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:228
+#: ../../../../build/work/app/i18n/custmsg.h:178
+msgid ""
+"Once you have elevations on some endpoints, you can use the Profile command "
+"to produce an elevation graph. \n"
+"The graph shows the selected elevations, grades and distances. \n"
+"Please see the Profile help and demo for details."
+msgstr ""
+"Une fois que vous avez des élévations sur certains points de fin, vous "
+"pouvez utiliser la commande Profil pour produire un graphique d'élévation.\n"
+"Le graphique montre les élévations, les pentes et les distances "
+"sélectionnées.\n"
+"Veuillez consulter l'aide et la démo du profil pour plus de détails."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:232
+#: ../../../../build/work/app/i18n/custmsg.h:180
+msgid ""
+"You can draw tracks with wider lines for rails. \n"
+"Select the tracks and use Medium or Thick Tracks on the Edit menu."
+msgstr ""
+"Les rails peuvent être dessinés avec des lignes plus larges pour les voies.\n"
+"Pour ce faire, sélectionnez 'Voies moyennes' ou 'Voies épaisses' dans le "
+"menu \"Editer\"."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:235
+#: ../../../../build/work/app/i18n/custmsg.h:182
+msgid ""
+"The Helix command is used to create a Helix track. \n"
+"You specify some parameters: height, radius, number of turns, grade and "
+"vertical separation between layers. \n"
+"These values are interrelated so changing one value will affect ohers. \n"
+"Then you can place the Helix and join to other tracks as you would a Circle "
+"track."
+msgstr ""
+"La commande Hélicoïde est utilisée pour créer une voie Hélicoïdale.\n"
+"Vous spécifiez certains paramètres : hauteur, rayon, nombre de tours, pente "
+"et séparation verticale entre les couches.\n"
+"Ces valeurs étant interdépendantes, la modification d'une valeur affectera "
+"d'autres.\n"
+"Ensuite, vous pouvez placer l'Hélicoïde et la joindre à d'autres voies comme "
+"vous le feriez pour une voie circulaire."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:240
+#: ../../../../build/work/app/i18n/custmsg.h:184
+msgid ""
+"Many objects on the layout have labels: Turnouts/Helix/Curved Titles, Track "
+"Lenghts, End-Point Elevations, Track Elevations and Cars. \n"
+"You can turn these labels on or off with the Label Enable toggle buttons on "
+"the Display options dialog."
+msgstr ""
+"De nombreux objets du plan ont des étiquettes : Titres d'Aiguillages/"
+"Hélicoïdes/Courbes, Longueurs de voie, Elévations des bouts de voies, "
+"Elévations de voie et Matériels roulants.\n"
+"Vous pouvez activer ou désactiver ces étiquettes à l'aide des cases à cocher "
+"\"Etiquettes activées\" de la boîte de dialogue \"Options d'affichage\"."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:243
+#: ../../../../build/work/app/i18n/custmsg.h:186
+msgid ""
+"If you hold down the Control key when using the Rotate command, the rotation "
+"will be done in increments of 15ᅵ."
+msgstr ""
+"Si vous maintenez la touche Ctrl enfoncée lorsque vous utilisez la commande "
+"Rotation, la rotation diminue par incréments de 15°."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:245
+#: ../../../../build/work/app/i18n/custmsg.h:188
+msgid ""
+"When using the Rotate command, Shift-Right-Click displays a menu allowing "
+"you to rotate by specific amounts or to align the selected objects with "
+"another object."
+msgstr ""
+"Lorsque vous utilisez la commande <Rotation>, l'angle de rotation de l'objet "
+"peut être sélectionné dans un menu en maintenant la touche Maj enfoncée, ou "
+"l'objet peut être aligné avec un autre objet."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:247
+#: ../../../../build/work/app/i18n/custmsg.h:190
+msgid ""
+"This is last tip. If you have any additions or comments, please let us know."
+msgstr ""
+"C'est le dernier conseil. Si vous avez des ajouts ou des commentaires, "
+"veuillez nous en faire part."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:25
+#: ../../../../build/work/app/i18n/custmsg.h:192
+msgid ""
+"The unconnected endpoints of a straight or curved track can be changed with "
+"the 'Modify Track' command.\n"
+msgstr ""
+"Les points de fin non connectés d'une voie droite ou courbe peuvent être "
+"modifiés avec la commande «Modifier la voie».\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:31
+#: ../../../../build/work/app/i18n/custmsg.h:194
+msgid ""
+"The endpoint of a straight track is selected and then Left-Dragged to change "
+"its length. A blue anchor shows that the length can be extended.\n"
+msgstr ""
+"Le point de fin d'une voie droite est sélectionné, puis déplacé vers la "
+"gauche pour modifier sa longueur. Une ancre bleue montre que la longueur "
+"peut être allongée.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:48
+#: ../../../../build/work/app/i18n/custmsg.h:196
+msgid ""
+"If you try to drag the selected endpoint beyond the far endpoint, the track "
+"extends in the opposite direction.\n"
+msgstr ""
+"Si le point d'extrémité sélectionné est déplacé au-delà du point d'extrémité "
+"distant, la voie sera prolongée dans la direction opposée.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:68
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:73
+#: ../../../../build/work/app/i18n/custmsg.h:199
+msgid ""
+"A curved track is selected and it's new endpoint is determined by the angle "
+"to the cursor. \n"
+msgstr ""
+"Une voie courbe est sélectionnée et sa nouvelle extrémité est définie par "
+"l'angle obtenu avec le curseur.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:105
+#: ../../../../build/work/app/i18n/custmsg.h:201
+msgid "It's possible to almost create a complete circle.\n"
+msgstr "Il est presque possible de créer un cercle complet.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:202
+msgid ""
+"If you drag the mouse beyond the start of the curve the track becomes very "
+"short.\n"
+msgstr ""
+"Si vous déplacez la souris au-delà du point de départ de l'arc, le tracé "
+"devient très court.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:113
+#: ../../../../build/work/app/i18n/custmsg.h:204
+msgid "Here you are warned that the track will be too short.\n"
+msgstr "Ici, vous êtes averti que la voie sera trop courte.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:147
+#: ../../../../build/work/app/i18n/custmsg.h:206
+msgid ""
+"If you move the cursor away from the curve, you will create a straight track "
+"tangent to the curve.\n"
+msgstr ""
+"Lorsque vous éloignez le curseur de l'arc, vous créez une voie droite "
+"tangente à l'arc.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:169
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:174
+#: ../../../../build/work/app/i18n/custmsg.h:209
+msgid ""
+"If you adjust the endpoint of a turnout or sectional track the track is "
+"extended by a similar track segment. The extension can be \n"
+msgstr ""
+"Si vous ajustez l'extrémité d'un aiguillage ou d'un élément de voie, celle-"
+"ci est prolongée par un segment droit. L'extension est possible\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:210
+msgid "a straight or a curve.\n"
+msgstr ""
+"droite ou courbe.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:190
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:195
+#: ../../../../build/work/app/i18n/custmsg.h:213
+msgid ""
+"You can change the radius of a straight or curved track that is connected at "
+"one endpoint by holding down the Shift key while Left-dragging on it.\n"
+msgstr ""
+"Vous pouvez modifier le rayon d'une voie droite ou courbe connectée à un "
+"point de fin en maintenant la touche Maj enfoncée tout en la faisant glisser "
+"vers la gauche..\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:214
+msgid ""
+"The blue cross anchor shows that this is possible when shift is held down "
+"with no buttons.\n"
+msgstr ""
+"L'ancre de la croix bleue montre que c'est possible lorsque shift est "
+"maintenu enfoncé sans boutons.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:209
+#: ../../../../build/work/app/i18n/custmsg.h:216
+msgid ""
+"This lets you change a straight track into a curved track (and vice versa) "
+"as well as changing the radius of a curved track.\n"
+msgstr ""
+"Cela vous permet de changer une voie droite en voie courbe (et vice versa) "
+"ainsi que de changer le rayon d'une voie courbe.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:252
+#: ../../../../build/work/app/i18n/custmsg.h:218
+msgid ""
+"You can form an extension of a straight or curved Track that is connected at "
+"one endpoint using an easement by holding down the Ctrl key while Left-"
+"dragging on it.\n"
+msgstr ""
+"Vous pouvez créer une extension à une voie droite ou courbe connectée à un "
+"point de fin à l'aide d'une voie de transition en maintenant la touche Ctrl "
+"enfoncée tout en faisant un glisser-gauche.\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:219
+msgid ""
+"The blue half cross anchor shows that this is possible when the Ctrl key is "
+"held down with no mouse button.\n"
+msgstr ""
+"L'ancre bleue en forme de demi-croix montre que c'est possible lorsque la "
+"touche Ctrl est maintenue enfoncée sans aucun bouton de la souris.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:267
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:9
+#: ../../../../build/work/app/i18n/custmsg.h:222
+msgid "You can draw a variety of different types of benchwork:\n"
+msgstr "Vous pouvez dessiner différentes formes de chassis :\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:223
+msgid "- rectangular (1x2, 2x4 etc)\n"
+msgstr "- rectangulaire (1x2, 2x4 etc.)\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:224
+msgid "- L girders\n"
+msgstr "- L Supports\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:225
+msgid "- T girders\n"
+msgstr "- T Supports\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:226
+msgid "You can also draw them in different orientations.\n"
+msgstr "Vous pouvez également les dessiner dans différentes orientations.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:25
+#: ../../../../build/work/app/i18n/custmsg.h:228
+msgid "We will draw two 3x6 inch L-girders.\n"
+msgstr "Nous dessinons deux équerres de 3x6 pouces.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:43
+#: ../../../../build/work/app/i18n/custmsg.h:230
+msgid ""
+"The flange of the top L-Girders is on the outside edge of the girders. We "
+"want to change the girder so both flanges are on the inside.\n"
+msgstr ""
+"La bride des équerres supérieures se trouve sur le bord extérieur du "
+"support. Nous voulons changer le support afin que les deux brides soient à "
+"l'intérieur.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:231
+msgid "We will use the <Describe> command for this.\n"
+msgstr "Pour cela nous utiliserons la commande <Propriétés>.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:233
+msgid "Change the Orientation to Right.\n"
+msgstr "Changer l'orientation à droite.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:235
+msgid "Now both flanges are on the inside of the two girders.\n"
+msgstr "Maintenant, les deux rebords sont à l'intérieur des deux longerons.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:34
+#: ../../../../build/work/app/i18n/custmsg.h:237
+msgid ""
+"Pushing the <Describe> button will cancel any other command in progress.\n"
+msgstr ""
+"Appuyez sur le bouton <Propriétés> pour annuler toute autre commande en "
+"cours.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:238
+msgid ""
+"Here we will begin to create a curved track which is a two step process.\n"
+msgstr ""
+"Dans un processus en deux étapes, nous allons commencer à créer une voie "
+"courbe.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:47
+#: ../../../../build/work/app/i18n/custmsg.h:240
+msgid ""
+"When we clicked on the <Describe> button, the current command was "
+"cancelled.\n"
+msgstr ""
+"La commande démarrée a été annulée en appuyant sur le bouton <Decrire>.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:241
+msgid ""
+"When in <Describe> mode, selecting any object will print a description in "
+"the Status Bar and display a dialog showing properties of the clicked-on "
+"object.\n"
+msgstr ""
+"En mode <Proprietes>, la sélection d'un objet mettra une description dans la "
+"barre d'état et affichera une boîte de dialogue affichant les propriétés de "
+"l'objet cliqué.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:57
+#: ../../../../build/work/app/i18n/custmsg.h:243
+msgid ""
+"Certain parameters of the object can be changed. In this case we'll change "
+"the length\n"
+msgstr ""
+"Certains paramètres de l'objet peuvent être modifiés. Dans ce cas, nous "
+"allons changer la longueur\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:65
+#: ../../../../build/work/app/i18n/custmsg.h:245
+msgid "Let's look at the Turnout...\n"
+msgstr "Regardons l'aiguillage ...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:73
+#: ../../../../build/work/app/i18n/custmsg.h:247
+msgid "and change the turnout name and part no.\n"
+msgstr ""
+"et changez le nom d'aiguillage et son numéro.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:84
+#: ../../../../build/work/app/i18n/custmsg.h:249
+msgid "You can change the contents of text...\n"
+msgstr ""
+"Vous pouvez modifier le contenu du texte …\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:93
+#: ../../../../build/work/app/i18n/custmsg.h:251
+msgid "and its size.\n"
+msgstr "et sa taille.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:100
+#: ../../../../build/work/app/i18n/custmsg.h:253
+msgid ""
+"If you select a note, the Description dialog appears which displays the "
+"contents of the note.\n"
+msgstr ""
+"Lorsque vous sélectionnez une note, une boîte de dialogue apparaît et "
+"affiche le contenu de la note.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:112
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcircle.xtr:7
+#: ../../../../build/work/app/i18n/custmsg.h:256
+msgid ""
+"Like the <Curve> track command, there are several ways to create a Circle "
+"track.\n"
+msgstr ""
+"Comme pour la commande de voie <Courbe>, il existe plusieurs façons de créer "
+"une voie circulaire.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:257
+msgid ""
+"The first is to specify a fixed radius and simply drag the Circle into "
+"position.\n"
+msgstr ""
+"La première possibilité consiste à définir un rayon fixe et à faire glisser "
+"vers la position souhaitée.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:258
+msgid "We will change the Radius before proceeding.\n"
+msgstr "Nous allons changer le rayon avant de continuer.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcircle.xtr:24
+#: ../../../../build/work/app/i18n/custmsg.h:260
+msgid "The next method is to drag from the edge of the Circle to the center.\n"
+msgstr ""
+"La méthode suivante consiste à faire glisser le bord du cercle vers le "
+"centre.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcircle.xtr:37
+#: ../../../../build/work/app/i18n/custmsg.h:262
+msgid ""
+"The last is similar, but you drag from the center of the Circle to the "
+"edge.\n"
+msgstr ""
+"La dernière méthode, comparable, consiste à dessiner du centre vers le "
+"cercle.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcircle.xtr:50
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:157
+#: ../../../../build/work/app/i18n/custmsg.h:265
+msgid ""
+"We have built a siding using Sectional track and have 2 End-Points that "
+"don't line up and are not connected automatically when placing the sectional "
+"track.\n"
+msgstr ""
+"Nous avons construit une voie de service en utilisant une section de voie et "
+"avons 2 points d'extrémité qui ne s'alignent pas et ne sont pas connectés "
+"automatiquement lors du placement de la section de voie.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:162
+#: ../../../../build/work/app/i18n/custmsg.h:267
+msgid ""
+"We use the <Connect> command to adjust neighboring tracks so the gap is "
+"closed.\n"
+msgstr ""
+"Nous utilisons la commande <Connecter deux voies> pour aligner les voies "
+"voisines afin que l'écart soit fermé.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:268
+msgid ""
+"Note: the adjustments are only done on tracks which have only 1 or 2 "
+"connections. In this example the Turnouts would not be affected.\n"
+msgstr ""
+"Remarque : les réglages ne sont effectués que sur les voies ne comportant "
+"que 1 ou 2 connexions. Dans cet exemple, l'aiguillage ne serait pas "
+"affecté.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:175
+#: ../../../../build/work/app/i18n/custmsg.h:270
+msgid "And now the gap is closed.\n"
+msgstr "Et maintenant, l'écart est comblé.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:181
+#: ../../../../build/work/app/i18n/custmsg.h:272
+msgid "Other tracks have been shifted slightly to close the gap.\n"
+msgstr "D'autres voies ont été légèrement décalées pour combler l'écart.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:188
+#: ../../../../build/work/app/i18n/custmsg.h:274
+msgid "You can see these slight mis-alignments.\n"
+msgstr "Vous pouvez voir les petits décalages.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:275
+msgid "But they will have no effect when the layout is actually built.\n"
+msgstr ""
+"Mais ils n'auront aucun effet lorsque le plan sera effectivement construit.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:196
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:353
+#: ../../../../build/work/app/i18n/custmsg.h:278
+msgid ""
+"After working with Sectional track you might get to point where these mis-"
+"alignments have accumulated and you wish to remove them.\n"
+msgstr ""
+"Après avoir travaillé avec Sectional Track, les défauts se sont accumulés au "
+"point d’alignement et vous pourriez souhaiter les supprimer.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:279
+msgid ""
+"You can remove these slight mis-alignments by tightening the tracks starting "
+"from a unconnected End-Point. Use Shift-Left-Click with the <Connect> "
+"command.\n"
+msgstr ""
+"Vous pouvez supprimer ces petits décalages en rapprochant les rails. "
+"Commencez à un point de fin non connecté en appuyant sur la touche Maj tout "
+"en appuyant sur le bouton <Connecter>.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:280
+msgid "First use the <Split> command to disconnect the tracks.\n"
+msgstr ""
+"Commencez par utiliser la commande <Segmenter> pour déconnecter les voies.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:363
+#: ../../../../build/work/app/i18n/custmsg.h:282
+msgid ""
+"Then with the <Connect> command, Shift-Left-Click on the 2 End-Points.\n"
+msgstr ""
+"Ensuite, vous pouvez activer la commande <Connecter> et cliquer sur les deux "
+"points d'extrémité tout en maintenant la touche Maj enfoncée.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:378
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:199
+#: ../../../../build/work/app/i18n/custmsg.h:285
+msgid "In example shows a simple figure-8 layout using Sectional track.\n"
+msgstr ""
+"L'exemple montre le plan d'une simple figure-8 utilisant une section de "
+"voie.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:286
+msgid ""
+"You will notice that the tracks do not line up exactly in one location.\n"
+msgstr ""
+"Comme vous pouvez le voir, les voies ne sont pas exactement alignées au même "
+"point.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:211
+#: ../../../../build/work/app/i18n/custmsg.h:288
+msgid ""
+"We can use the <Connect> command to move the connecting tracks slightly and "
+"connect the 2 End-Points.\n"
+msgstr ""
+"Avec la commande <Connecter deux voies>, nous pouvons facilement déplacer "
+"les voies à connecter et connecter les 2 points de fin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:224
+#: ../../../../build/work/app/i18n/custmsg.h:290
+msgid "The two End-Points are now aligned and connected.\n"
+msgstr "Les deux points d'extrémité sont maintenant alignés et connectés.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:231
+#: ../../../../build/work/app/i18n/custmsg.h:292
+msgid "The connection was made by adding small gaps in other tracks.\n"
+msgstr ""
+"La connexion a été établie en ajoutant de petits espaces dans d'autres "
+"voies.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:238
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:7
+#: ../../../../build/work/app/i18n/custmsg.h:295
+msgid "There are several ways to create a Curved track.\n"
+msgstr "Il existe plusieurs façons de créer une voie courbe.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:296
+msgid ""
+"You can choose which to use by clicking on the small button to the left of "
+"<Curve> command button if the current Curve command is not the one you "
+"want.\n"
+msgstr ""
+"Vous pouvez faire votre choix en cliquant sur le petit bouton à gauche du "
+"bouton de commande <Courbe>, si la Courbe actuelle n'est pas celle que vous "
+"souhaitez.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:297
+msgid ""
+"The first is by clicking on the first End-Point and dragging in the "
+"direction of the Curve.\n"
+msgstr ""
+"La première possibilité consiste à sélectionner le premier point de fin et à "
+"le faire glisser en direction de la courbe.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:20
+#: ../../../../build/work/app/i18n/custmsg.h:299
+msgid ""
+"You will see a straight track with a double ended Red arrow at the end.\n"
+msgstr ""
+"Vous verrez une voie droite avec une flèche rouge avec deux pointes à la "
+"fin.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:300
+msgid "Click and drag on one of the Red arrows to complete the Curve.\n"
+msgstr ""
+"Cliquez et faites glisser une des flèches rouges pour compléter la courbe.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:302
+msgid ""
+"The next method is to click at one End-Point and drag to the center of the "
+"Curve.\n"
+msgstr ""
+"La méthode suivante consiste à cliquer sur un point de fin et à faire "
+"glisser vers le centre de la courbe.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:50
+#: ../../../../build/work/app/i18n/custmsg.h:304
+msgid ""
+"Now you will see the double ended Red arrow connected to the center of the "
+"Curve marked by a small circle.\n"
+msgstr ""
+"Comme précédemment, vous verrez la double flèche rouge avec deux points "
+"reliés au centre de la courbe. Elle est marquée avec un petit cercle.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:305
+msgid "As before, drag on one of the Red arrows to complete the Curve.\n"
+msgstr ""
+"Comme auparavant, faites glisser l'une des flèches rouges pour terminer la "
+"courbe.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:307
+msgid ""
+"The next method is similar to the last except that you drag first from the "
+"center of the Curve to one End-Point.\n"
+msgstr ""
+"La méthode suivante est similaire à la précédente, mais commencez par "
+"glisser du point milieu vers un point de fin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:80
+#: ../../../../build/work/app/i18n/custmsg.h:309
+msgid "Once again, drag on a Red arrow to complete the Curve.\n"
+msgstr "Encore une fois, tirez sur une flèche rouge pour terminer la courbe.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:90
+#: ../../../../build/work/app/i18n/custmsg.h:311
+msgid ""
+"The last method begins by drawing a line between the two End-Points of the "
+"Curve. This forms the Chord of the Curve.\n"
+msgstr ""
+"Pour la dernière méthode, commencez par tracer une ligne entre les deux "
+"extrémités. Cela forme la corde de la courbe.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:108
+#: ../../../../build/work/app/i18n/custmsg.h:313
+msgid "Now drag on a Red arrow to complete the Curve.\n"
+msgstr "Maintenant, faites glisser la flèche rouge pour compléter la courbe.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:118
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:112
+#: ../../../../build/work/app/i18n/custmsg.h:316
+msgid "This demo will construct a control panel for part of a bigger layout.\n"
+msgstr ""
+"Cette démo crée un panneau de contrôle pour une partie d'une installation "
+"plus grande.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:117
+#: ../../../../build/work/app/i18n/custmsg.h:318
+msgid "For our control panel we will use Œ\" lines. \n"
+msgstr ""
+"Pour notre panneau de contrôle, nous utiliserons des lignes de 1/2\"de "
+"large.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:319
+msgid "Also, we will use a 1/8\" grid to lay out our controls.\n"
+msgstr ""
+"De plus, nous utiliserons une grille de 1/8\" pour disposer nos contrôles.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:320
+msgid ""
+"First, we will set up the Snap Grid for 1\" grid lines and 8 divisions.\n"
+msgstr ""
+"Tout d’abord, nous allons configurer la grille magnétique pour des lignes de "
+"grille de 1\" et 8 divisions.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:322
+msgid "Now, clear the layout and turn on the Snap Grid.\n"
+msgstr ""
+"Maintenant, nous supprimons le brouillon et activons la grille "
+"d'accrochage.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:147
+#: ../../../../build/work/app/i18n/custmsg.h:324
+msgid "First step: draw the lines representing the tracks.\n"
+msgstr "Première étape : tracez les voies représentant les voies.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:325
+msgid "We specify the line width in pixels when at 1:1 zoom.\n"
+msgstr ""
+"Nous spécifions la largeur de la ligne en pixels lorsqu'il s'agit d'un zoom "
+"1:1.\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:326
+msgid ""
+"To create a 1/4\" line, divide the dots-per-inch (DPI) of your display by "
+"4.\n"
+msgstr ""
+"Pour créer une ligne large de 1/4 pouce, la résolution de l'écran (DPI) est "
+"divisée par 4.\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:327
+msgid ""
+"For MS-Windows the DPI is usually 98, so choose: 98/4 = 24 (approximately).\n"
+msgstr ""
+"Pour MS-Windows, le ppp (DPI) est généralement de 98; choisissez donc: "
+"(98/4) = 24 (environ).\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:328
+msgid "For Linux, the DPI is usually 72, so choose: 72/4 = 18.\n"
+msgstr ""
+"Pour Linux, le ppp (DPI) est généralement de 72, choisissez donc : (72/4) = "
+"18.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:495
+#: ../../../../build/work/app/i18n/custmsg.h:330
+msgid ""
+"Notice how the Snap Grid keeps the main line and siding track parallel and "
+"the connecting tracks and spur at a 45° angle.\n"
+msgstr ""
+"Remarquez comment la Grille magnétique maintient la ligne principale et la "
+"voie d'évitement parallèles, ainsi que les voies de connexion et la voie "
+"déviée à un angle de 45 °.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:503
+#: ../../../../build/work/app/i18n/custmsg.h:332
+msgid "Second step: add LEDs for the turnout position indicators.\n"
+msgstr ""
+"Deuxième étape : ajouter des LED pour les indicateurs de position "
+"d'aiguillage.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:333
+msgid "We will use T1 red and green LEDs.\n"
+msgstr "Nous allons utiliser des LED rouges et vertes T1.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:334
+msgid "We will zoom in to show positioning.\n"
+msgstr "Nous allons zoomer pour afficher le positionnement.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:513
+#: ../../../../build/work/app/i18n/custmsg.h:336
+msgid ""
+"Notice that when we are in the correct position (on the 1/8\" grid), the "
+"Marker lines on the bottom and left rulers will high-light the tick marks. "
+"When both ticks are high-lighted, press the space bar to finalize the LED.\n"
+msgstr ""
+"Notez que lorsqu'elles sont correctement positionnées (sur la grille 1/8\"), "
+"les lignes de repère situées en dessous et à gauche mettent en surbrillance "
+"les repères de sélection. Une fois les deux marquages mis en surbrillance, "
+"verrouillez le voyant LED en appuyant sur la barre d'espacement.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:558
+#: ../../../../build/work/app/i18n/custmsg.h:338
+msgid "Now we'll add push buttons to control the turnouts.\n"
+msgstr ""
+"Maintenant, nous allons ajouter des boutons pour contrôler les aiguillages.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:595
+#: ../../../../build/work/app/i18n/custmsg.h:340
+msgid "Let's add signals to our siding.\n"
+msgstr "Ajoutons des signaux à notre voie d’évitement.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:341
+msgid ""
+"The entrance to the siding will be protected by double headed signals.\n"
+msgstr "L'entrée de la voie de garage est protégée par un double signal\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:342
+msgid "We'll select a signal from the HotBar and place it into position.\n"
+msgstr "Nous sélectionnons un signal de la HotBar et le mettons en position.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:608
+#: ../../../../build/work/app/i18n/custmsg.h:344
+msgid ""
+"We rotate the signals by Shift-Right-Click and select 90° CW on the popup "
+"menu. We can not show the popup menu in demo mode, but will simulate the "
+"effect.\n"
+msgstr ""
+"Nous faisons pivoter les signaux par un Maj-clic droit et sélectionnons 90° "
+"CW dans le menu contextuel. Nous ne pouvons pas afficher le menu contextuel "
+"en mode démo, mais simulerons l'effet.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:657
+#: ../../../../build/work/app/i18n/custmsg.h:346
+msgid "The exits from the siding will be protected by single headed signals.\n"
+msgstr ""
+"Les sorties du parement seront protégées par des signaux à une seule tête.\n"
+"\n"
+"\n"
+"La sortie de la voie de garage est sécurisée par un simple signal.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:711
+#: ../../../../build/work/app/i18n/custmsg.h:348
+msgid "Now for some touch-ups.\n"
+msgstr "Maintenant quelques améliorations mineures.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:349
+msgid "Notice when the line meet at an angle there is a gap.\n"
+msgstr "Remarquez que quand la ligne se croise à un angle, il y a un espace.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:350
+msgid "We will fill this gap with the Œ\" dot.\n"
+msgstr "Nous allons combler cette lacune avec un point de 1/2 pouce.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:351
+msgid ""
+"Note: Win95/Win98/WinME does not support drawing lines with flat end-caps, "
+"but only with round end-caps.\n"
+msgstr ""
+"Remarque : Win95 / Win98 / WinME ne prennent pas en charge les lignes de "
+"dessin avec des embouts plats, mais seulement avec des embouts arrondis.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:352
+msgid "Users on those platforms will not see the gap.\n"
+msgstr "Les utilisateurs de ces plateformes ne verront pas l'écart.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:734
+#: ../../../../build/work/app/i18n/custmsg.h:354
+msgid ""
+"Add an arrow head to indicate the tracks that connect to the rest of the "
+"layout.\n"
+msgstr ""
+"Ajoutez une flèche pour indiquer les voies qui se connectent sur le reste du "
+"plan.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:355
+msgid "The second arrow will be flipped 180°\"\n"
+msgstr ""
+"La deuxième flèche sera tournée de 180°\"\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:772
+#: ../../../../build/work/app/i18n/custmsg.h:357
+msgid "And add some labels.\n"
+msgstr "Et ajoutez des étiquettes.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:831
+#: ../../../../build/work/app/i18n/custmsg.h:359
+msgid ""
+"We want to print our control panel onto a 8œx11 page, but the control panel "
+"is a bit too wide.\n"
+msgstr ""
+"Nous aimerions imprimer le panneau de commande sur une page de 8\"x11\", "
+"mais il est trop large.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:360
+msgid "Lets tighten it up a bit.\n"
+msgstr "Permet de resserrer un peu.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:361
+msgid ""
+"First turn the Snap Grid on again so any moves we make will keep objects on "
+"the grid.\n"
+msgstr ""
+"Commencez par réactiver la grille magnétique afin que les objets restent "
+"alignés lors de leurs déplacements.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:840
+#: ../../../../build/work/app/i18n/custmsg.h:363
+msgid "Lets move the spur track to the left 3/4\"\n"
+msgstr "Poussons la voie de service à gauche de 3/4 pouce\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:862
+#: ../../../../build/work/app/i18n/custmsg.h:365
+msgid "Now move the right side of the siding over.\n"
+msgstr "Maintenant déplacez le côté droit de la voie d’évitement.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:882
+#: ../../../../build/work/app/i18n/custmsg.h:367
+msgid "Now, adjust the ends of the mainline and siding tracks.\n"
+msgstr ""
+"Maintenant, ajustez les extrémités des voies principale et d’évitement.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:902
+#: ../../../../build/work/app/i18n/custmsg.h:369
+msgid "And move the title over as well.\n"
+msgstr "Et déplacez aussi le titre.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:919
+#: ../../../../build/work/app/i18n/custmsg.h:371
+msgid "Now you can print it.\n"
+msgstr "Maintenant, vous pouvez l'imprimer.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:372
+msgid "The cross-hairs on the LEDs and switch show the centers for drilling.\n"
+msgstr ""
+"Le réticule marque le centre des LED et des interrupteurs, ce qui facilite "
+"le perçage.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:33
+#: ../../../../build/work/app/i18n/custmsg.h:374
+msgid ""
+"Pressing the <Delete> button lets you delete selected tracks from the "
+"layout.\n"
+msgstr ""
+"Appuyez sur le bouton <Suppr> pour supprimer les voies sélectionnées sur le "
+"plan.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:375
+msgid ""
+"First you select the tracks you want to delete, and then press the <Delete> "
+"button.\n"
+msgstr ""
+"Commencez par sélectionner les voies à supprimer, puis appuyez sur la touche "
+"<Suppr>.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:47
+#: ../../../../build/work/app/i18n/custmsg.h:377
+msgid ""
+"If you delete a track connected to an easement curve, then the easement "
+"curve is deleted as well.\n"
+msgstr ""
+"Si vous supprimez une voie comportant un arc de transition, cet arc de "
+"transition sera également supprimé.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:57
+#: ../../../../build/work/app/i18n/custmsg.h:379
+msgid "You can use the <Undo> command to undelete tracks.\n"
+msgstr "Vous pouvez utiliser la commande <Annuler> pour restaurer les voies.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:67
+#: ../../../../build/work/app/i18n/custmsg.h:381
+msgid ""
+"If you Left-Drag on the layout you can select all tracks within an area.\n"
+msgstr ""
+"En faisant glisser avec la souris tout en maintenant le bouton gauche "
+"enfoncé, vous pouvez marquer toutes les voies d'une zone.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:382
+msgid ""
+"Note, only tracks within the selected area are deleted. Since the easement "
+"curve is connected to a deleted track, it is deleted as well.\n"
+msgstr ""
+"Remarque : seules les voies de la zone sélectionnée sont supprimées. Mais "
+"comme la courbe de transition est connectée à une voie supprimée, elle sera "
+"également supprimée.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:80
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:385
+msgid ""
+"The demo also simulates entering values and selecting options on various "
+"dialogs.\n"
+msgstr ""
+"La démo simule également la saisie de valeurs et la sélection d'options dans "
+"diverses boîtes de dialogue.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:386
+msgid ""
+"This is simulated by drawing a rectangle around the control when values are "
+"entered or changed.\n"
+msgstr ""
+"124/5000\n"
+"Ceci est simulé en dessinant un rectangle autour du champ de saisie lors de "
+"la saisie ou de la modification de valeurs.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:13
+#: ../../../../build/work/app/i18n/custmsg.h:388
+msgid ""
+"Here we are going to make some changes to the Display dialog. Notice how "
+"this is simulated.\n"
+msgstr ""
+"Ici, nous apportons des modifications dans la boîte de dialogue d'affichage. "
+"Remarquez comment cela est simulé.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:389
+msgid "First we are setting 'Draw Tunnel' to 'Normal'\n"
+msgstr ""
+"D'abord, nous paramétrons «Dessiner un tunnel» sur «Normal»\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:21
+#: ../../../../build/work/app/i18n/custmsg.h:391
+msgid "Now we're changing 'Label Font Size' to '56'\n"
+msgstr ""
+"Maintenant, nous changeons 'Taille de la police de l'étiquette' en «56»\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:26
+#: ../../../../build/work/app/i18n/custmsg.h:393
+msgid "We'll change some other options\n"
+msgstr "Nous allons changer quelques autres options\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:38
+#: ../../../../build/work/app/i18n/custmsg.h:395
+msgid ""
+"This effect is only used in demonstration mode. During normal operation you "
+"will not see this.\n"
+msgstr ""
+"Cet effet n'est utilisé qu'en mode démonstration. Pendant le fonctionnement "
+"normal, vous ne le verrez pas.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:45
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdimlin.xtr:117
+#: ../../../../build/work/app/i18n/custmsg.h:398
+msgid "Dimension Lines are used to mark the distances between two points.\n"
+msgstr "Les voies de cote servent à marquer les distances entre deux points.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:399
+msgid ""
+"Here we will create a Dimension Line to show the separation between two "
+"tracks.\n"
+msgstr ""
+"Ici, nous créons une ligne de cote pour montrer la distance entre deux voies "
+"parallèles.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdimlin.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:401
+msgid ""
+"We might also want to measure the distance between two structures. In this "
+"case we will use a larger dimension line.\n"
+msgstr ""
+"Nous pourrions également vouloir déterminer la distance entre deux "
+"bâtiments. Dans ce cas, nous utilisons une ligne de plus grande dimension.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdimlin.xtr:143
+#: ../../../../build/work/app/i18n/custmsg.h:403
+msgid ""
+"We can use the <Describe> command to change the position of the Dimension "
+"Line and the size of the numbers.\n"
+msgstr ""
+"La commande <Propriétés> peut être utilisée pour modifier la position de la "
+"ligne de cote et la taille des nombres.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdimlin.xtr:161
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:406
+msgid ""
+"This example will show the effect of using easements while joining tracks.\n"
+msgstr ""
+"Cet exemple montrera l'effet de l'utilisation de courbes de transition lors "
+"de la jonction de voies.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:407
+msgid "First, we will enable Cornu Easements and select Join\n"
+msgstr ""
+"Tout d'abord, nous validerons \"Courbe de transition Cornu\", puis "
+"sélectionnerons Raccorder\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:28
+#: ../../../../build/work/app/i18n/custmsg.h:409
+msgid "First select one end of the track\n"
+msgstr ""
+"Sélectionnez d'abord une fin de voie\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:411
+msgid "Now the end of different track\n"
+msgstr "Et maintenant, la fin d'une autre voie\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:49
+#: ../../../../build/work/app/i18n/custmsg.h:413
+msgid "You can reposition the ends by dragging them \n"
+msgstr ""
+"Vous pouvez repositionner les extrémités en les faisant glisser\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:65
+#: ../../../../build/work/app/i18n/custmsg.h:415
+msgid "When you are happy, Hit Enter or Space, if not use Esc\n"
+msgstr ""
+"Lorsque vous êtes satisfait, appuyez sur Entrée ou Espace, sinon utilisez "
+"Esc\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:73
+#: ../../../../build/work/app/i18n/custmsg.h:417
+msgid ""
+"The Curve is made up of Beziers parts that smooth the shape the best way it "
+"can be in the space available\n"
+msgstr ""
+"La courbe est composée d'éléments de Bézier qui lissent la forme de la "
+"meilleure façon possible dans l'espace disponible\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:87
+#: ../../../../build/work/app/i18n/custmsg.h:419
+msgid "Now, we'll show traditional easements instead.\n"
+msgstr ""
+"Maintenant, nous allons plutôt montrer les easements traditionnelles.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:142
+#: ../../../../build/work/app/i18n/custmsg.h:421
+msgid ""
+"We've selected sharp easements. The minimum radius curve we can use will be "
+"9.75\"\n"
+msgstr ""
+"Nous avons choisi des courbes de transition serrées. Le rayon minimum que "
+"nous pouvons utiliser est de 9,75 \".\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:422
+msgid "Notice the label on the Easement button has changed to 'Sharp'.\n"
+msgstr ""
+"Remarquez que l’étiquette du bouton 'courbes de transitions' a été remplacée "
+"par 'Etroit'.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:157
+#: ../../../../build/work/app/i18n/custmsg.h:424
+msgid ""
+"Note the connecting curve does not quite meet the straight tracks. This the "
+"'Offset'.\n"
+msgstr ""
+"Notez que la courbe de connexion ne rencontre pas tout à fait les voies "
+"droites. C'est le \"décalage\".\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:165
+#: ../../../../build/work/app/i18n/custmsg.h:426
+msgid "Here the connecting curve is too small.\n"
+msgstr "Ici, le rayon de connexion est trop petit.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:175
+#: ../../../../build/work/app/i18n/custmsg.h:428
+msgid ""
+"The connecting curve is made of three tracks, the curve and two easement "
+"segments on each end.\n"
+msgstr ""
+"La courbe de connexion est composée de trois voies, la courbe et deux "
+"segments de courbes de transition à chaque extrémité.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:112
+#: ../../../../build/work/app/i18n/custmsg.h:430
+msgid ""
+"We have designed part of the layout with a siding, 2 branches and a spiral "
+"loop. We want to set elevations.\n"
+msgstr ""
+"Nous avons conçu une partie d'un plan de voie avec un parement, 2 branches "
+"et une hélicoïde de voie. Maintenant, nous voulons définir les élévations.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:431
+msgid "Note: make sure you set endpoint elevations on the Display dialog.\n"
+msgstr ""
+"Remarque : assurez-vous de définir les élévations des points de fin dans la "
+"boîte de dialogue Affichage.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:122
+#: ../../../../build/work/app/i18n/custmsg.h:433
+msgid "First we will set elevations at the end of the branches.\n"
+msgstr "Nous allons d’abord définir les élévations au bout des branches.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:435
+msgid "We'll select the end of the top branch and set the Elevation to 4\"\n"
+msgstr ""
+"Nous allons sélectionner la fin de la branche supérieure et définir "
+"l'élévation à 4\"\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:436
+msgid "First, click on the End-Point.\n"
+msgstr "Tout d'abord, cliquez sur le point de fin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:142
+#: ../../../../build/work/app/i18n/custmsg.h:438
+msgid "Next, pick Defined on the Elevation dialog Radio box.\n"
+msgstr "Ensuite, sélectionnez 'Valider' dans la boîte de dialogue Élévation.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:148
+#: ../../../../build/work/app/i18n/custmsg.h:440
+msgid "And set the Elevation to 4.\n"
+msgstr "Et définissez l'élévation à 4.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:156
+#: ../../../../build/work/app/i18n/custmsg.h:442
+msgid "Now, select the other branch and set it's elevation to 2\"\n"
+msgstr ""
+"Maintenant, sélectionnez l’autre branche et réglez son élévation sur 2\"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:170
+#: ../../../../build/work/app/i18n/custmsg.h:444
+msgid "We can move the Elevation label by using Ctrl-Left-Drag\n"
+msgstr ""
+"Nous pouvons déplacer l'étiquette Élévation en utilisant Ctrl-gauche-"
+"glisser.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:182
+#: ../../../../build/work/app/i18n/custmsg.h:446
+msgid "Now, we set the Elevation at one end of the Siding.\n"
+msgstr ""
+"Maintenant, nous fixons l’élévation à une extrémité de la voie d’évitement.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:209
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:215
+#: ../../../../build/work/app/i18n/custmsg.h:449
+msgid "We want to find the elevations where the 2 tracks cross.\n"
+msgstr "Nous voulons déterminer les élévations où les 2 voies se croisent.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:224
+#: ../../../../build/work/app/i18n/custmsg.h:451
+msgid "We picked an End-Point on the upper track.\n"
+msgstr "Nous avons sélectionné un point de fin sur la voie supérieure.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:452
+msgid ""
+"XTrackCAD has computed the Elevation (2.33\") at this point based on the "
+"Elevation at the siding and a combination of the of the first Elevations.\n"
+msgstr ""
+"XTrackCAD a calculé l'élévation (2,33\") en ce point en fonction de "
+"l'élévation à la voie d'évitement et d'une combinaison des premières "
+"élévations.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:453
+msgid ""
+"We create a Computed Elevation here that will be automatically adjusted "
+"whenever the other Elevations are changed.\n"
+msgstr ""
+"Nous créons ici une élévation calculée qui dépend automatiquement des autres "
+"élévations modifiables.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:243
+#: ../../../../build/work/app/i18n/custmsg.h:455
+msgid ""
+"The Compute Elevation is based on Elevations at end of both of the "
+"branches. We may want to base the Elevation on only one branch. For "
+"example if one branch was the mainline we don't want the other branch "
+"affecting this Computed Elevation.\n"
+msgstr ""
+"Le calcul de l'élévation est basé sur les élévations à la fin des deux "
+"branches. Nous pouvons vouloir baser l'élévation sur une seule branche. Par "
+"exemple, si une branche était la ligne principale, nous ne voulons pas que "
+"l'autre branche affecte cette altitude calculée.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:456
+msgid "We do this by Ignoring the branch we don't want.\n"
+msgstr "Nous le faisons en ignorant la branche dont nous ne voulons pas.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:457
+msgid "We'll ignore the lower branch.\n"
+msgstr "Nous ignorerons la branche inférieure.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:258
+#: ../../../../build/work/app/i18n/custmsg.h:459
+msgid ""
+"Notice at the endpoint where the tracks cross, we see the elevation has "
+"changed from 2.33 to 2.64.\n"
+msgstr ""
+"Remarquez qu'au point de fin où les voies se croisent, nous voyons que "
+"l’élévation est passée de 2,33 à 2,64.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:264
+#: ../../../../build/work/app/i18n/custmsg.h:461
+msgid "Now we want to know the elevation of the lower track.\n"
+msgstr ""
+"Nous voulons maintenant connaître l’élévation de la voie la plus basse.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:274
+#: ../../../../build/work/app/i18n/custmsg.h:463
+msgid "There is no endpoint on the lower track here.\n"
+msgstr ""
+"Il n'y a pas de point de fin sur la voie inférieure ici.\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:464
+msgid ""
+"Use Shift-Left-Click to Split the track and create an endpoint we can use "
+"for an elevation,\n"
+msgstr ""
+"Utilisez Maj-Clic gauche pour segmenter la voie et créer un point de fin que "
+"nous pouvons utiliser pour une élévation,\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:287
+#: ../../../../build/work/app/i18n/custmsg.h:466
+msgid "and create another Computed Elevation point.\n"
+msgstr "et créez un autre point de calcul d'élévation.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:302
+#: ../../../../build/work/app/i18n/custmsg.h:468
+msgid "Now we want to label the grade on this section of track.\n"
+msgstr ""
+"Maintenant, nous voulons étiqueter la pente sur cette section de voie.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:311
+#: ../../../../build/work/app/i18n/custmsg.h:470
+msgid ""
+"Again, since there is no endpoint nearby, we split the track to create an "
+"endpoint we can use,\n"
+msgstr ""
+"De nouveau, comme il n’y a pas de bout de voie proche, nous avons segmenté "
+"la voie pour créer un bout que nous pouvons utiliser,\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:321
+#: ../../../../build/work/app/i18n/custmsg.h:472
+msgid "and create a grade marker.\n"
+msgstr ""
+"et créez une balise de pente.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:335
+#: ../../../../build/work/app/i18n/custmsg.h:474
+msgid "Note the marker has an arrow pointing in the upwards direction.\n"
+msgstr "Notez que le marqueur a une flèche pointant vers le haut.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:344
+#: ../../../../build/work/app/i18n/custmsg.h:476
+msgid ""
+"The last thing we want to do is to create a Station label that we'll use in "
+"the <Profile> command.\n"
+msgstr ""
+"Comme étape finale, nous allons créer une étiquette pour une station que "
+"nous utiliserons dans la commande <Profil> d'élévation.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:358
+#: ../../../../build/work/app/i18n/custmsg.h:478
+msgid "Now, set the Elevation to Station and enter the its name.\n"
+msgstr ""
+"Maintenant, placez maintenant le marqueur d'élévation sur 'Station' et "
+"entrez le nom.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:376
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:31
+#: ../../../../build/work/app/i18n/custmsg.h:481
+msgid ""
+"XTrackCAD can help find tracks that are curved too sharply or are too "
+"steep. These tracks are Exception tracks and are drawn in the Exception "
+"track color.\n"
+msgstr ""
+"XTrackCAD peut vous aider à trouver les voies dont le rayon est trop étroit "
+"ou qui montent trop fortement. Ces voies sont non conformes et sont "
+"affichées dans la couleur de Voie non conforme.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:482
+msgid ""
+"In this example we have a curved track with radius of 9\" and a straight "
+"track with a grade of 3.8%.\n"
+msgstr ""
+"Dans cet exemple, nous avons une voie courbe avec un rayon de 9\" et une "
+"voie droite avec une pente de 3,8%.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:483
+msgid " \n"
+msgstr " \n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:485
+msgid ""
+"The Layout dialog shows the Minimum Track Radius is 9\" and the Maximum "
+"Track Grade is 5%.\n"
+msgstr ""
+"Dans les options pour le plan de voie, nous voyons que le rayon minimum est "
+"fixé à 9\"et la pente maximale à 5%.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:48
+#: ../../../../build/work/app/i18n/custmsg.h:487
+msgid ""
+"If we make the curved track sharper it will be drawn in the Exception "
+"color.\n"
+msgstr ""
+"Si nous réduisons le rayon de la courbe, la voie est affichée avec la "
+"couleur de l'exception.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:61
+#: ../../../../build/work/app/i18n/custmsg.h:489
+msgid ""
+"If we make the straight track steeper it will also be drawn in the Exception "
+"color.\n"
+msgstr ""
+"Si nous élargissons la pente de la voie droite, la voie est également "
+"affichée dans la couleur exceptionnelle.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:78
+#: ../../../../build/work/app/i18n/custmsg.h:491
+msgid ""
+"You can change the Exception color on the Colors dialog from the Options "
+"menu.\n"
+msgstr ""
+"Vous pouvez modifier la couleur des Voies non conformes dans la boîte de "
+"dialogue Couleurs du menu Options.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:85
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:21
+#: ../../../../build/work/app/i18n/custmsg.h:494
+msgid ""
+"The unconnected endpoint of any track can also be extended with the <Modify> "
+"command using Right-Drag.\n"
+msgstr ""
+"Le point de fin non connecté de n'importe quelle voie peut également être "
+"étendu avec la commande <Modifier> en faisant glisser avec le bouton droit "
+"de la souris enfoncé.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:26
+#: ../../../../build/work/app/i18n/custmsg.h:496
+msgid "Select the endoint and Right-Drag.\n"
+msgstr ""
+"Sélectionnez le point de fin et faites le glisser avec le bouton droit de la "
+"souris.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:34
+#: ../../../../build/work/app/i18n/custmsg.h:498
+msgid "The extending track can be straight...\n"
+msgstr "L'extension de voie peut être droite …\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:44
+#: ../../../../build/work/app/i18n/custmsg.h:500
+msgid "... or curved.\n"
+msgstr "... ou courbé.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:51
+#: ../../../../build/work/app/i18n/custmsg.h:502
+msgid ""
+"If you extend a straight or curved flex track and enable Easements then an "
+"Easement curve will be automatically generated when you extend the track.\n"
+msgstr ""
+"Si la fonction de courbe de transition est active pendant que vous modifiez "
+"une voie flexible droite ou courbe, un arc de transition sera créé.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:65
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:124
+#: ../../../../build/work/app/i18n/custmsg.h:505
+msgid ""
+"The <Flip> command will create a mirror image of the selected objects.\n"
+msgstr ""
+"La commande <Miroir> génère une image miroir des objets sélectionnés.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:131
+#: ../../../../build/work/app/i18n/custmsg.h:507
+msgid "After selecting the object, drag a line which will form the mirror.\n"
+msgstr ""
+"Après avoir sélectionné l'objet, tracez la voie d'axe de l'effet miroir.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:140
+#: ../../../../build/work/app/i18n/custmsg.h:509
+msgid "The mirror line does not have to be vertical or horizontal.\n"
+msgstr "La ligne de miroir n'a pas besoin d'être verticale ou horizontale.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:149
+#: ../../../../build/work/app/i18n/custmsg.h:511
+msgid "You can also flip any number of objects.\n"
+msgstr "Vous pouvez mettre en miroir n'importe quel nombre d'objets.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:512
+msgid "Watch what happens to the structure and turnout titles.\n"
+msgstr ""
+"Faites attention à ce qui se passe sur les étiquettes des bâtiments et des "
+"aiguillages.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:163
+#: ../../../../build/work/app/i18n/custmsg.h:514
+msgid ""
+"Note that the turnout title has been changed from the Medium Right to Medium "
+"Left. When turnouts are flipped, XTrackCAD will try to find a matching "
+"turnout and if found will change the name.\n"
+msgstr ""
+"Notez que le titre d'aiguillage a été changé, moyen à droite est devenu "
+"moyen à gauche . Lorsque les aiguillages sont inversés, XTrackCAD essaiera "
+"de trouver un aiguillage correspondant et, le cas échéant, changera le nom.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:170
+#: ../../../../build/work/app/i18n/custmsg.h:516
+msgid ""
+"Structures do not have Right and Left hand versions. Their title is changed "
+"to indicate that they were flipped.\n"
+msgstr ""
+"Les bâtiments n'ont pas de versions droite et gauche. Leur titre est modifié "
+"pour indiquer qu'ils ont été retournés.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:517
+msgid "You can use the <Describe> command to change their title.\n"
+msgstr ""
+"Vous pouvez utiliser la commande <Propriete> pour modifier leur titre.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:187
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:21
+#: ../../../../build/work/app/i18n/custmsg.h:520
+msgid ""
+"The <Group> and <Ungroup> commands (on the Tools menu) are a powerful way to "
+"manipulate Turnout and Structure definitions.\n"
+msgstr ""
+"Les commandes <Grouper> et <Dissocier> (dans le menu Gérer) sont un moyen "
+"puissant de manipuler les définitions d'aiguillage et structure.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:521
+msgid "We'll start with a simple turnout and add a switch machine.\n"
+msgstr ""
+"Nous commencerons par un simple aiguillage et ajouterons une déviation.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:50
+#: ../../../../build/work/app/i18n/custmsg.h:523
+msgid ""
+"Now that we have drawn a rough outline of a switch machine we will group it "
+"with the turnout definition.\n"
+msgstr ""
+"Maintenant que nous avons tracé les grandes lignes d’un aiguillage, nous "
+"allons les regrouper avec une définition d'aiguillage.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:524
+msgid "First we Select the objects in the new definition.\n"
+msgstr "Nous sélectionnons d'abord les objets dans la nouvelle définition.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:526
+msgid "Now do the <Group> command.\n"
+msgstr "Et maintenant, appliquez la commande <Groupe>.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:70
+#: ../../../../build/work/app/i18n/custmsg.h:528
+msgid ""
+"The <Group> command dialog shows the Title (Manufacturer, Description and "
+"Part Number) of the new definition. This information is taken from the "
+"Selected objects you are grouping.\n"
+msgstr ""
+"La boîte de dialogue de commande <Grouper> affiche le titre (fabricant, "
+"description et numéro de pièce) de la nouvelle définition. Ces informations "
+"sont extraites des objets sélectionnés que vous regroupez.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:76
+#: ../../../../build/work/app/i18n/custmsg.h:530
+msgid ""
+"The 'Replace with new group?' toggle will replace the Selected objects with "
+"the new definition.\n"
+msgstr ""
+"Le commutateur \"Remplacer par un nouveau groupe?\" remplacera les objets "
+"sélectionnés par la nouvelle définition.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:83
+#: ../../../../build/work/app/i18n/custmsg.h:532
+msgid ""
+"If we don't change the Title then the new definition will replace the "
+"existing definition.\n"
+msgstr ""
+"Si nous ne changeons pas le titre, la nouvelle définition remplacera la "
+"définition existante.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:533
+msgid "We'll give this definition a new Description.\n"
+msgstr "Nous donnons au groupe une nouvelle description.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:94
+#: ../../../../build/work/app/i18n/custmsg.h:535
+msgid "We're done with this definition. Press Ok.\n"
+msgstr "Nous en avons fini avec cette définition. Appuyer sur OK.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:101
+#: ../../../../build/work/app/i18n/custmsg.h:537
+msgid "You will see the updated image on the HotBar.\n"
+msgstr "Vous verrez l'image mise à jour sur la barre de contrôle.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:108
+#: ../../../../build/work/app/i18n/custmsg.h:539
+msgid ""
+"The <Ungroup> command replaces any Selected turnouts or structures with "
+"their parts.\n"
+msgstr ""
+"La commande <Dissocier> remplace tous les aiguillages ou structures "
+"sélectionnés par leurs pièces.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:540
+msgid ""
+"Structures and non-track segements of turnouts are composed of Lines, "
+"Circles and other shapes. In this turnout these are the two lines and the "
+"two squares.\n"
+msgstr ""
+"Les bâtiments et les aiguillages sont composés de lignes, de cercles et "
+"d'autres formes. Cet aiguillage comprend deux lignes et deux carrés.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:541
+msgid ""
+"We will Ungroup this turnout and see how the individual parts can be "
+"changed.\n"
+msgstr ""
+"Nous dissocierons cet aiguillage et verrons comment les différentes parties "
+"peuvent être modifiées.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:542
+msgid "First Select the turnout and then Ungroup it.\n"
+msgstr "Sélectionnez d'abord l'aiguillage, puis dissociez-le.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:123
+#: ../../../../build/work/app/i18n/custmsg.h:544
+msgid "Notice that the Title now indicates the turnout is Ungrouped.\n"
+msgstr "Notez que le titre indique maintenant que l'aiguillage est dissocié.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:545
+msgid "Hit Escape to deselect everything.\n"
+msgstr "Appuyez sur Echap pour tout désélectionner.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:133
+#: ../../../../build/work/app/i18n/custmsg.h:547
+msgid "Now Select the lines and squares.\n"
+msgstr "Maintenant, sélectionnez les lignes et les carrés.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:158
+#: ../../../../build/work/app/i18n/custmsg.h:549
+msgid ""
+"We could modify these object or add new ones. For now we'll just delete "
+"them.\n"
+msgstr ""
+"Nous pouvons changer cet objet ou en ajouter de nouveaux, cette fois nous "
+"allons juste les supprimer.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:165
+#: ../../../../build/work/app/i18n/custmsg.h:551
+msgid "And move the Label out of the way.\n"
+msgstr "Et déplacez l'étiquette hors de la voie.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:176
+#: ../../../../build/work/app/i18n/custmsg.h:553
+msgid "Notice that the turnout has been broken into three parts.\n"
+msgstr "Notez que l'aiguillage a été divisé en trois parties.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:198
+#: ../../../../build/work/app/i18n/custmsg.h:555
+msgid ""
+"Two ends of the turnout, from the frog to the end of the diverging leg and "
+"from the points to the left, are now straight track sections.\n"
+msgstr ""
+"Deux extrémités de l'aiguillage, du cœur à l'extrémité de la voie divergée "
+"et des points à gauche, sont maintenant des sections de voie droites.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:556
+msgid ""
+"The a turnout is made of a number of individual straight and curved track "
+"segements. This turnout had four segments:\n"
+msgstr ""
+"Un aiguillage se compose d'un certain nombre de pièces de voies droites et "
+"courbes. Cet aiguillage comprend quatre pièces :\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:557
+msgid " 1 a short straight segment to the left of the points\n"
+msgstr " 1. une courte pièce droite, à gauche des lames d'aiguillage\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:558
+msgid " 2 a long straight segment to the right of the points\n"
+msgstr " 2. une longue pièce droite, à droite des lames d'aiguillage\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:559
+msgid " 3 a curved segment from the points to the frog\n"
+msgstr " 3. une pièce pliée des lames d'aiguillage vers le cœur, et\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:560
+msgid ""
+" 4 a straight segment from the frog to the end of the diverging leg.\n"
+msgstr " 4. une pièce droite du cœur à la fin de la voie d'embranchement.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:561
+msgid "The first and last segments have be converted to straight tracks.\n"
+msgstr "Les premier et dernier segments ont été convertis en voies droites.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:562
+msgid ""
+"The second and third segments form the the body of the turnout and can not "
+"be ungrouped further.\n"
+msgstr ""
+"Les deuxième et troisième segments forment le corps de l'aiguillage et ne "
+"peuvent plus être dissociés.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:563
+msgid ""
+"You can later Group this turnout with the straight segments to recreate the "
+"turnout definition. You can also add other track segments to turnout "
+"definitions.\n"
+msgstr ""
+"Ensuite, vous pouvez regrouper l'aiguillage avec les sections droites pour "
+"restaurer la définition d'aiguillage. Vous pouvez également ajouter d'autres "
+"sections de voie aux définitions d'aiguillages.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:242
+#: ../../../../build/work/app/i18n/custmsg.h:565
+msgid "Now, create a track and place the new turnout on it.\n"
+msgstr "Maintenant, créez une voie et placez le nouvel aiguillage dessus.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:260
+#: ../../../../build/work/app/i18n/custmsg.h:567
+msgid "Now suppose we want to replace the black squares with green circles.\n"
+msgstr ""
+"Supposons que nous voulions remplacer les carrés noirs par des cercles "
+"verts.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:568
+msgid "First we Select the turnout.\n"
+msgstr "Nous sélectionnons d'abord l'aiguillage.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:272
+#: ../../../../build/work/app/i18n/custmsg.h:570
+msgid "And now Ungroup it (from the Tools Menu)\n"
+msgstr "Et maintenant, dissociez-le (à partir du menu Gérer)\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:277
+#: ../../../../build/work/app/i18n/custmsg.h:572
+msgid ""
+"Notice that the name has changed to indicate the turnout was Ungrouped.\n"
+msgstr ""
+"Notez que le nom a changé pour indiquer que l'aiguillage a été dissocié.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:283
+#: ../../../../build/work/app/i18n/custmsg.h:574
+msgid ""
+"Now, hit escape to deselect everything and then Select the 2 squares and "
+"delete them.\n"
+msgstr ""
+"Maintenant, appuyez sur 'Ech' pour tout désélectionner, puis sélectionnez et "
+"supprimez les 2 carrés.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:300
+#: ../../../../build/work/app/i18n/custmsg.h:576
+msgid "Now draw the green circles...\n"
+msgstr "Maintenant, dessinez les cercles verts…\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:321
+#: ../../../../build/work/app/i18n/custmsg.h:578
+msgid "and Group the new definition.\n"
+msgstr "et Groupez la nouvelle définition.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:340
+#: ../../../../build/work/app/i18n/custmsg.h:580
+msgid ""
+"Notice that the turnout in the HotBar is angled the same as the turnout on "
+"the layout. Make sure your new definition is rotated the way you want it.\n"
+msgstr ""
+"Notez que l'aiguillage dans la barre d'objets est le même que celui du plan. "
+"Assurez-vous que votre nouvelle définition est alignée comme vous le "
+"souhaitez.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:379
+#: ../../../../build/work/app/i18n/custmsg.h:582
+msgid "We can also create turnouts from simple straight and curved tracks.\n"
+msgstr ""
+"Nous pouvons également créer des aiguillages à partir de simples voies "
+"droites et courbes.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:583
+msgid "We'll create two tracks that have a common endpoint.\n"
+msgstr "Nous créons deux voies avec un point de fin commun.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:390
+#: ../../../../build/work/app/i18n/custmsg.h:585
+msgid ""
+"When we create the curve from the straight track endpoint we need to hold "
+"down the Shift key to prevent XTrackCAD from trying to join the two tracks.\n"
+msgstr ""
+"Lorsque nous créons la courbe à partir du point de fin de la voie droite, "
+"nous devons maintenir la touche Maj enfoncée pour empêcher XTrckCAD "
+"d'essayer de joindre les deux voies.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:408
+#: ../../../../build/work/app/i18n/custmsg.h:587
+msgid "At this point we can modify the tracks if necessary.\n"
+msgstr "À ce stade, nous pouvons modifier les voies si nécessaire.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:588
+msgid "We will use the <Describe> command to change the tracks.\n"
+msgstr ""
+"Nous utiliserons la commande <Propriétés> pour changer les propriétés des "
+"voies.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:420
+#: ../../../../build/work/app/i18n/custmsg.h:590
+msgid "We'll make the Length 7.5\".\n"
+msgstr "Nous avons réglé la longueur à 7,5\".\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:591
+msgid ""
+"If we change the Length, each End-Point will be moved to shorten the track. "
+"We want to just move the Right End-Point. To control this, change the Pivot "
+"to First which means the Left End-Point will be unchanged when we change the "
+"length (or angle) of the track.\n"
+msgstr ""
+"Lorsque nous modifions la longueur, chaque extrémité est poussée pour "
+"raccourcir la voie, nous souhaitons que seule l'extrémité correcte soit "
+"déplacée. Pour contrôler cela, réglez le pivot sur la Premiere. Cela "
+"signifie que l'extrémité gauche reste inchangée si nous changeons la "
+"longueur (ou l'angle) de la voie.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:430
+#: ../../../../build/work/app/i18n/custmsg.h:593
+msgid "Now when change the Length only the Right End-Point will move.\n"
+msgstr ""
+"Maintenant, lorsque vous modifiez la longueur, seul le point final droit se "
+"déplace.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:441
+#: ../../../../build/work/app/i18n/custmsg.h:595
+msgid "Now let's look at the curved track.\n"
+msgstr "Regardons maintenant la voie incurvée.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:451
+#: ../../../../build/work/app/i18n/custmsg.h:597
+msgid ""
+"Here the Left End-Point (which we don't want to move) is the Second End-"
+"Point, so we'll make that the Pivot.\n"
+msgstr ""
+"Voici le point d'extrémité gauche que nous ne voulons pas déplacer, il est "
+"le deuxième point d'extrémité. Nous allons donc en faire un point fixe comme "
+"pivot.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:459
+#: ../../../../build/work/app/i18n/custmsg.h:599
+msgid "We want the curve to have a radius of 20\" and an angle of 17.5ᅵ.\n"
+msgstr ""
+"Nous voulons que la courbe ait un rayon de 20\" et un angle de 17,5°.\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:600
+msgid "First change the Radius...\n"
+msgstr "Tout d'abord changer le rayon …\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:468
+#: ../../../../build/work/app/i18n/custmsg.h:602
+msgid "and the the Angular Length.\n"
+msgstr "et la longueur angulaire.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:476
+#: ../../../../build/work/app/i18n/custmsg.h:604
+msgid "Now Select both tracks...\n"
+msgstr "Maintenant, sélectionnez les deux voies…\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:492
+#: ../../../../build/work/app/i18n/custmsg.h:606
+msgid "and Group them.\n"
+msgstr "et groupez les.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:503
+#: ../../../../build/work/app/i18n/custmsg.h:608
+msgid ""
+"If the two tracks have a common End-Point then they will form a Turnout and "
+"can be switched with the <Train> command. Otherwise they will just be two "
+"track segments grouped together.\n"
+msgstr ""
+"Si les deux voies ont une extrémité commune, vous obtiendrez un aiguillage "
+"qui peut être contrôlé en mode de fonctionnement. Sinon, il s'agira "
+"simplement de deux voies groupées.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:510
+#: ../../../../build/work/app/i18n/custmsg.h:610
+msgid ""
+"We have created a left hand turnout and we also want a right hand version.\n"
+msgstr ""
+"Nous avons créé un aiguillage gauche et nous voulons également une version à "
+"droite.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:611
+msgid "We'll use the <Flip> command.\n"
+msgstr "Nous utilisons la commande <miroir>\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:523
+#: ../../../../build/work/app/i18n/custmsg.h:613
+msgid ""
+"Drag a horizontal line that will be the mirror for the <Flip> command.\n"
+msgstr ""
+"Faites glisser une voie horizontale qui sera l'axe de miroir de la commande "
+"<Flip>.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:533
+#: ../../../../build/work/app/i18n/custmsg.h:615
+msgid "Notice the title has changed to Flipped Left.\n"
+msgstr "Notez que le titre a été changé en \"Gauche en miroir\".\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:616
+msgid "Now Group the turnout.\n"
+msgstr ""
+"Maintenant, regroupez l'aiguillage\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:542
+#: ../../../../build/work/app/i18n/custmsg.h:618
+msgid "We'll change the Title and Part No for the new defintion.\n"
+msgstr ""
+"Nous allons changer le titre et le numéro de pièce pour la nouvelle "
+"définition.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:555
+#: ../../../../build/work/app/i18n/custmsg.h:620
+msgid ""
+"To Remove the definitions, use the Custom Management dialog on the Tools "
+"menu.\n"
+msgstr ""
+"Pour supprimer des définitions, utilisez le \"Eléments définis sur mesure\" "
+"dans le menu \"Gérer\".\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:560
+#: ../../../../build/work/app/i18n/custmsg.h:622
+msgid "Select the definitions you added and Delete them.\n"
+msgstr ""
+"Sélectionnez les définitions que vous avez ajoutées et supprimez-les.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:573
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:625
+msgid ""
+"Now we will create a helix in the corner of the layout connected to 2 "
+"tracks.\n"
+msgstr ""
+"Dans le coin du plan, nous allons maintenant créer une hélicoïde connectée à "
+"2 voies.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:28
+#: ../../../../build/work/app/i18n/custmsg.h:627
+#, c-format
+msgid ""
+"We will be creating a helix with a Elevation Difference of 12\", Grade of "
+"1.5% and limit the Vertical Separation to at least 2\".\n"
+msgstr ""
+"Nous allons créer une hélicoïde de voie avec une différence d'élévation de 12"
+"\", une pente de 1,5% et limiter la distance verticale à au moins 2\".\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:34
+#: ../../../../build/work/app/i18n/custmsg.h:629
+msgid "First set the Elevation Difference to 12\"\n"
+msgstr "Réglez d'abord la différence d'élévation à 12 \"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:43
+#: ../../../../build/work/app/i18n/custmsg.h:631
+msgid "Next set the Vertical Separation to 2\"\n"
+msgstr "Ensuite, réglez la séparation verticale sur 2\"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:632
+msgid "Notice how this causes the number of Turns to be set to 6\n"
+msgstr "Remarquez comment cela nécessite un nombre de 6 tours\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:52
+#: ../../../../build/work/app/i18n/custmsg.h:634
+msgid "Next set the Grade to 1.5%\n"
+msgstr "Ensuite définir la pente à 1,5%\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:635
+msgid "Notice how this causes the Radius to change.\n"
+msgstr "Remarquez comment cela provoque le changement de rayon.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:60
+#: ../../../../build/work/app/i18n/custmsg.h:637
+msgid ""
+"Setting these values changes the Radius to 21.2\" and the number of Turns to "
+"6.\n"
+msgstr ""
+"La définition de ces valeurs modifie le rayon à 21,2\" et le nombre de tours "
+"à 6.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:66
+#: ../../../../build/work/app/i18n/custmsg.h:639
+msgid ""
+"Now we specify the Angular Separation between the enterance and exit to the "
+"helix.\n"
+msgstr ""
+"Nous modifions maintenant l'angle entre les voies entrante et sortante de "
+"l'hélicoïde.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:640
+msgid "Note: this will decrease the Radius slightly.\n"
+msgstr "Remarque : cela diminuera légèrement le rayon.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:76
+#: ../../../../build/work/app/i18n/custmsg.h:642
+msgid "Next we can fine tune the helix by decreasing the Radius to 15\".\n"
+msgstr ""
+"Ensuite, nous pouvons affiner l’hélicoïde en diminuant le rayon à 15\".\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:643
+msgid "Note the change to the Grade.\n"
+msgstr "Notez le changement de pente.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:85
+#: ../../../../build/work/app/i18n/custmsg.h:645
+msgid ""
+"Lastly change the Vertical Separation to 2.5\". The number of Turns will "
+"change to 4 and the grade increase to almost 3%.\n"
+msgstr ""
+"Pour finir, changez la séparation verticale à 2.5\", le nombre de virages "
+"passera à 4 et la pente augmentera à près de 3%.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:646
+msgid ""
+"Note: the Vertical Separation will be increased. This value is the "
+"Elevation Difference (12.0) divided by the total number of turns. The total "
+"number of turns is 4.25: 4 whole Turns plus a quarter turn for the Angular "
+"Separation.\n"
+msgstr ""
+"Remarque : la séparation verticale sera augmentée. Cette valeur est la "
+"différence d'élévation (12.0) divisée par le nombre total de tours. Le "
+"nombre total de tours est 4.25 : 4 tours complets plus un quart de tour pour "
+"la séparation angulaire.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:94
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:99
+#: ../../../../build/work/app/i18n/custmsg.h:649
+msgid ""
+"Now that the helix parameters are set we can place the helix on the layout.\n"
+msgstr ""
+"Maintenant que les paramètres d'hélicoïde sont définis, nous pouvons placer "
+"l'hélicoïde sur le plan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:112
+#: ../../../../build/work/app/i18n/custmsg.h:651
+msgid ""
+"Next, join the 2 straight tracks to the helix in the same way we join to a "
+"circle.\n"
+msgstr ""
+"Ensuite, reliez les deux voies droites à l'hélicoïde juste comme nous "
+"connectons les voies à un cercle.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:145
+#: ../../../../build/work/app/i18n/custmsg.h:653
+msgid ""
+"Notice that the length has increased because we have more than 4 turns in "
+"the helix. It is closer to 4.25 turns.\n"
+msgstr ""
+"Notez que la longueur a augmenté car nous avons plus de 4 tours dans "
+"l'hélicoïde. Elle est plus proche de 4,25 tours.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:155
+#: ../../../../build/work/app/i18n/custmsg.h:655
+msgid ""
+"Next, we assign elevations to the 2 End-Points of the helix. This will "
+"determine the grade and separation between the helix coils.\n"
+msgstr ""
+"Ensuite, nous fixons des élévations aux 2 extrémités de l'hélicoïde. Ce qui "
+"détermine la hauteur et la distance entre les virages.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:656
+msgid ""
+"Note: we could set the elevations anywhere along the connecting tracks "
+"instead. XTrackCAD treats a helix as a single length of track for "
+"elevations.\n"
+msgstr ""
+"Remarque : nous pourrions définir les élévations n’importe où le long des "
+"voies de connexion. Pour les élévations, XTrackCAD traite une hélicoïde "
+"comme une seule longueur de voie.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:176
+#: ../../../../build/work/app/i18n/custmsg.h:658
+msgid ""
+"We have set the elevations to 1\" and 13\" to produce a grade of 3.0% with "
+"2.8\" between coils.\n"
+msgstr ""
+"Nous avons réglé les élévations sur 1\"et 13\" pour créer une pente de 3% "
+"avec 2,8\"entre les virages.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:659
+msgid ""
+"You can use the <Describe> command to change the number of Turns or the "
+"Elevations at either end of the Helix. This will affect the Grade and "
+"Vertical Separation.\n"
+msgstr ""
+"Vous pouvez utiliser la commande <Propriete> pour modifier le nombre de "
+"virages ou les élévations à chaque extrémité de l'hélicoïde. Ça affectera la "
+"pente et la séparation verticale.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:184
+#: ../../../../build/work/app/i18n/custmsg.h:661
+msgid "The helix description can be moved by the <Move Label> command.\n"
+msgstr ""
+"Avec la commande <Deplacer la description> l'étiquette de l'hélicoïde peut "
+"être déplacée.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:194
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:664
+msgid ""
+"In addition to using the turnout definitions you can create 'Hand Laid "
+"Turnout'.\n"
+msgstr ""
+"En plus d'utiliser les définitions d'aiguillage, vous pouvez créer "
+"'aiguillage paramétré à la main'.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:665
+msgid "This is two step process:\n"
+msgstr ""
+"Il s'agit d'un processus en deux étapes :\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:23
+#: ../../../../build/work/app/i18n/custmsg.h:667
+msgid "1 - click on the frog and drag away to set the frog angle\n"
+msgstr "1 - cliquez sur le cœur et faites glisser pour définir son angle\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:29
+#: ../../../../build/work/app/i18n/custmsg.h:669
+msgid ""
+" Hint: the further you drag from the frog, the more accurate the angle.\n"
+msgstr ""
+" Astuce : plus vous vous éloignez du cœur, plus l'angle est précis.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:34
+#: ../../../../build/work/app/i18n/custmsg.h:671
+msgid "2 - click and drag to set the position of the points\n"
+msgstr "2 - cliquez et faites glisser pour définir la position des points\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:42
+#: ../../../../build/work/app/i18n/custmsg.h:673
+msgid "We can create Hand Laid Turnouts on curved tracks.\n"
+msgstr ""
+"Nous pouvons créer des aiguillages paramétrés à la main sur des voies "
+"courbes.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:58
+#: ../../../../build/work/app/i18n/custmsg.h:675
+msgid "A Hand Laid Turnout is composed of several parts.\n"
+msgstr "Un aiguillage de conception libre se compose de plusieurs parties.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:67
+#: ../../../../build/work/app/i18n/custmsg.h:677
+msgid "The actual Turnout is a short portion at the points.\n"
+msgstr "L'aiguillage actuel à ses aiguilles incomplètes.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:77
+#: ../../../../build/work/app/i18n/custmsg.h:679
+msgid "The other parts are various straight and curved segments.\n"
+msgstr "Les autres parties sont divers segments droits et courbes.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:81
+#: ../../../../build/work/app/i18n/custmsg.h:681
+msgid "The new curved turnout is also composed of several segments.\n"
+msgstr ""
+"La nouvel aiguillage incurvée est également composée de plusieurs segments.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:107
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:7
+#: ../../../../build/work/app/i18n/custmsg.h:684
+msgid "Welcome to the XTrackCAD demonstration.\n"
+msgstr "Bienvenue dans la démonstration d'XTrackCAD.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:685
+msgid ""
+"This will show some the features of XTrackCAD in an automated presentation. "
+"This window contains a number of controls and a message area (which I hope "
+"you are reading now). \n"
+msgstr ""
+"Cela vous montrera certaines des fonctionnalités d'XTrackCAD dans une "
+"présentation automatisée. Cette fenêtre contient un certain nombre de "
+"contrôles et une zone de message (j'espère que maintenant vous les lisez ).\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:686
+msgid "The controls are:\n"
+msgstr "Les contrôles sont :\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:687
+msgid "Step - advances to the next step of the demo.\n"
+msgstr "Pas à pas - passe à l'étape suivante de la démo.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:688
+msgid "Next - skips ahead to the next demo.\n"
+msgstr "Suivant - passe à la démo suivante.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:689
+msgid "Quit - exits the demo and returns to XTrackCAD.\n"
+msgstr "Quitter - quitter la démo et revenir à XTrackCAD.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:690
+msgid "Speed - controls the speed of the demo.\n"
+msgstr "Vitesse- contrôle la vitesse de la démo.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:691
+msgid "Click Step now for the next message.\n"
+msgstr "Cliquez sur Pas à pas pour passer au message suivant.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:23
+#: ../../../../build/work/app/i18n/custmsg.h:693
+msgid ""
+"If this is the first time you have used the demo you may want to rearrange "
+"the windows so the demo window does not obscure the main window.\n"
+msgstr ""
+"Si vous utilisez la démo pour la première fois, vous devez définir les "
+"positions de la fenêtre. Assurez-vous que la fenêtre principale n'est pas "
+"masquée par la fenêtre de démonstration.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:694
+msgid ""
+"You can move the demo window now by dragging on the title bar at the top of "
+"the window. I suggest you move it to the top of your screen.\n"
+msgstr ""
+"Vous pouvez maintenant déplacer la fenêtre de démonstration en y faisant "
+"glisser la barre de titre. Il est préférable de le déplacer vers le haut de "
+"l'écran.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:31
+#: ../../../../build/work/app/i18n/custmsg.h:696
+msgid ""
+"The various controls are disabled when it would be inappropiate to click on "
+"them. When the demo is running the Step button is disabled. When the demo "
+"is paused the Step button is enabled and you can click it when you are ready "
+"to view the next part of the demo.\n"
+msgstr ""
+"Les différents contrôles sont désactivés lorsqu'il serait inopportun de "
+"cliquer dessus. Lorsque la démo est en cours d'exécution, le bouton Étape "
+"est désactivé. Lorsque la démonstration est en pause, le bouton Étape est "
+"activé et vous pouvez cliquer dessus lorsque vous êtes prêt à afficher la "
+"partie suivante de la démonstration.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:697
+msgid "You can click on Quit to return to XTrackCAD at any time.\n"
+msgstr ""
+"Vous pouvez revenir à XTrackCAD à tout moment en cliquant sur Quitter.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:698
+msgid "You can adjust the speed of the demonstration with the Speed control.\n"
+msgstr "Vous pouvez régler la vitesse de la démo avec la commande vitesse.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:60
+#: ../../../../build/work/app/i18n/custmsg.h:700
+msgid "The demos are designed to fit within a certain sized window.\n"
+msgstr ""
+"Les démos sont conçues pour tenir dans une fenêtre d'une certaine taille.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:701
+msgid ""
+"For best results, change the size of the main XTrackCAD window so the box "
+"shape is completely visible.\n"
+msgstr ""
+"Pour de meilleurs résultats, modifiez la taille de la fenêtre principale "
+"XTrackCAD pour que le rectangle soit complètement visible.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:702
+msgid "You can do this by clicking and dragging on a corner of the window.\n"
+msgstr ""
+"Vous pouvez le faire en faisant glisser le coin inférieur droit de la "
+"fenêtre.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:67
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:72
+#: ../../../../build/work/app/i18n/custmsg.h:705
+msgid "This is the end of the introductory demo.\n"
+msgstr "C'est la fin de la démonstration d'introduction.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:706
+msgid ""
+"Please click Step for the next demo or click Quit to return to XTrackCAD.\n"
+msgstr ""
+"Veuillez cliquer sur étape suivante pour la prochaine démonstration ou "
+"quitter pour revenir à XTrackCAD.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:708
+msgid ""
+"You can also join to and from circles. This will change the circles to "
+"curves.\n"
+msgstr ""
+"Vous pouvez également connecter des voies avec des cercles de voie. Cela "
+"transforme les cercles en arcs.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:709
+msgid "In this example we will join two circles.\n"
+msgstr "Dans cet exemple, nous allons connecter deux cercles.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:24
+#: ../../../../build/work/app/i18n/custmsg.h:711
+msgid ""
+"Here we've selected points on the two circles. The direction of the "
+"connections (whether clockwise or counter clockwise) is controlled by where "
+"on the circle you select the connection points.\n"
+msgstr ""
+"Ici, nous avons sélectionné des points sur deux cercles. La direction des "
+"connexions, dans le sens horaire ou antihoraire, est déterminée par les "
+"emplacements sur les cercles que vous avez sélectionnés.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:133
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:152
+#: ../../../../build/work/app/i18n/custmsg.h:714
+msgid "Now let's try a cross connection.\n"
+msgstr "Essayons maintenant une connexion croisée.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:246
+#: ../../../../build/work/app/i18n/custmsg.h:716
+msgid ""
+"Note that the connection is from different 'ends' of the circle than in the "
+"last example.\n"
+msgstr ""
+"Notez que la connexion provient d'«extrémités» différentes du cercle qu'avec "
+"le dernier exemple.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:22
+#: ../../../../build/work/app/i18n/custmsg.h:718
+msgid "This examples shows joining tracks whose End-Points are aligned.\n"
+msgstr ""
+"Cet exemple montre comment joindre des voies dont les extrémités sont "
+"alignées.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:719
+msgid ""
+"Note the 2 pairs of tracks have End-Points that are close and aligned but "
+"not connected.\n"
+msgstr ""
+"Notez que les 2 paires de voies ont des extrémités qui sont proches et "
+"alignées mais non connectées.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:30
+#: ../../../../build/work/app/i18n/custmsg.h:721
+msgid "The first case joins the curve and straight track.\n"
+msgstr ""
+"Dans le premier cas, une voie courbe et une voie droite sont connectées.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:40
+#: ../../../../build/work/app/i18n/custmsg.h:723
+msgid "The second case will join the two straight tracks.\n"
+msgstr "Dans le second cas, deux voies droites sont connectées.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:50
+#: ../../../../build/work/app/i18n/custmsg.h:725
+msgid "Note that the two straight tracks were combined to form one track.\n"
+msgstr "Notez que les deux voies droites ont été fusionnées en une voie.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:55
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:728
+msgid ""
+"The <Join> command can also join straight and curved tracks (in either "
+"order).\n"
+msgstr ""
+"La commande <Raccorder> peut être utilisée pour connecter des voies droites "
+"et courbes (dans n'importe quel ordre).\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:729
+msgid "We will enable Cornu easements\n"
+msgstr "Nous activerons les courbes de transition Cornu.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:32
+#: ../../../../build/work/app/i18n/custmsg.h:731
+msgid "A connecting cornu track is drawn between the two tracks.\n"
+msgstr ""
+"Une cornu de raccord de voie est dessiné entre les deux voies.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:41
+#: ../../../../build/work/app/i18n/custmsg.h:733
+msgid ""
+"Notice that the curved track is extended as the connection point moves past "
+"the End-Point.\n"
+msgstr ""
+"Notez que la voie incurvée est étendue lorsque le point de connexion passe "
+"au-delà du point de fin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:735
+msgid ""
+"Here the connection makes the curved track wrap around. This is not a "
+"useful shape, there is a discontinuity at the end. \n"
+msgstr ""
+"Ici, une boucle est créée en se connectant. Ce n'est pas une forme "
+"raisonnable, car il y a un nœud à la fin.\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:736
+msgid "Adjusting the end point will fix it. \n"
+msgstr ""
+"Le réglage du point de fin le corrigera.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:64
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnmove.xtr:18
+#: ../../../../build/work/app/i18n/custmsg.h:739
+msgid "The <Join> command can move one group of tracks to join with another.\n"
+msgstr ""
+"La commande <Raccorder> peut être utilisée pour déplacer des groupes de "
+"voies pour les connecter à d'autres.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:740
+msgid ""
+"First <Select> the tracks you want to move with Ctrl so that they are both "
+"selected.\n"
+msgstr ""
+"Avec Ctrl, commencez par <Selectionner> les deux voies que vous souhaitez "
+"déplacer. \n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnmove.xtr:36
+#: ../../../../build/work/app/i18n/custmsg.h:742
+msgid "Click <Join> and Shift-Left-Click on the two End-Points.\n"
+msgstr ""
+"Cliquez sur <Raccorder> puis maintenez la touche Maj enfoncée + clic gauche "
+"sur les deux points d'extrémité.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnmove.xtr:51
+#: ../../../../build/work/app/i18n/custmsg.h:744
+msgid "The selected tracks are moved into position.\n"
+msgstr "Les voies sélectionnées sont déplacées vers la position.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:746
+msgid ""
+"Two straight tracks can be joined by selecting the two endoints. The "
+"selected endpoints will be those closest to the cursor when the track is "
+"selected.\n"
+msgstr ""
+"Deux voies droites peuvent être jointes en sélectionnant les deux "
+"extrémités. Les points de fin sélectionnés seront ceux les plus proches du "
+"curseur lorsque la voie est sélectionnée.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:747
+msgid "First, we will select Easements None and then select Join\n"
+msgstr ""
+"Tout d'abord, nous désélectionnerons \"Courbe de transition\", puis "
+"sélectionnerons Raccorder\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:26
+#: ../../../../build/work/app/i18n/custmsg.h:749
+msgid "Now we select two points on the tracks\n"
+msgstr "Maintenant, nous sélectionnons deux points sur les voies\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:36
+#: ../../../../build/work/app/i18n/custmsg.h:751
+msgid ""
+"A connecting track is drawn between the two tracks. Notice how it moves as "
+"the cursor is dragged along the second track.\n"
+msgstr ""
+"Une raccord de voie est dessiné entre les deux voies. Observez comment il "
+"bouge lorsque le curseur se déplace le long de la deuxième voie.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:47
+#: ../../../../build/work/app/i18n/custmsg.h:753
+msgid ""
+"Note that two tracks are extended if you move past the end of the track.\n"
+msgstr ""
+"Notez que deux voies sont étendues si vous vous déplacez le pointeur de la "
+"souris au-delà de la fin de voie.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:55
+#: ../../../../build/work/app/i18n/custmsg.h:755
+msgid ""
+"Notice what happens if you drag past the intersection points of the two "
+"tracks.\n"
+msgstr ""
+"Remarquez ce qui se passe si vous glissez au-delà des points d'intersection "
+"des deux voies.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:757
+msgid "This is probably not a very useful thing to do.\n"
+msgstr "Ce n'est probablement pas une solution sensée.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:70
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:90
+#: ../../../../build/work/app/i18n/custmsg.h:760
+msgid "Now we will do this with Cornu Easements \n"
+msgstr ""
+"Maintenant, nous allons le faire avec une Courbe de transition Cornu\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:761
+msgid "First, we will select Easements Cornu and then select Join\n"
+msgstr ""
+"Tout d'abord, nous sélectionnerons \"Courbe de transition Cornu\", puis "
+"sélectionnerons Raccorder\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:102
+#: ../../../../build/work/app/i18n/custmsg.h:763
+msgid "Now we again select two points on the tracks\n"
+msgstr ""
+"Maintenant, nous sélectionnons à nouveau deux points sur les voies\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:112
+#: ../../../../build/work/app/i18n/custmsg.h:765
+msgid ""
+"A connecting cornu is drawn between the two tracks. Notice how it behaves "
+"as the cursor is dragged along the second track.\n"
+msgstr ""
+"Une cornu de raccord est dessinée entre les deux voies. Observez comment "
+"elle bouge lorsque le curseur se déplace le long de la deuxième voie.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:123
+#: ../../../../build/work/app/i18n/custmsg.h:767
+msgid ""
+"Note that either tracks can be extended if you move past the end of it.\n"
+msgstr ""
+"Notez que deux voies sont étendues si vous vous déplacez le pointeur de la "
+"souris au-delà de la fin de voie.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:131
+#: ../../../../build/work/app/i18n/custmsg.h:769
+msgid ""
+"Notice this time what happens if you drag past the intersection points of "
+"the two tracks.\n"
+msgstr ""
+"Remarquez ce qui se passe si vous glissez au-delà des points d'intersection "
+"des deux voies.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:139
+#: ../../../../build/work/app/i18n/custmsg.h:771
+msgid "This is more useful because you can move the other end as well.\n"
+msgstr ""
+"C'est plus utile car vous pouvez également déplacer l'autre extrémité.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:150
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:774
+msgid "You can connect from any track to a turntable\n"
+msgstr ""
+"Vous pouvez vous connecter depuis n'importe quelle voie vers un pont "
+"tournant\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:775
+msgid "With a Cornu Easement you can have a turntable as the first point.\n"
+msgstr ""
+"Avec une courbe de transition Cornu, vous pouvez avoir un pont tournant "
+"comme premier point de connexion.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:38
+#: ../../../../build/work/app/i18n/custmsg.h:777
+msgid ""
+"You cannot place the connecting track too close to an existing stall track. "
+"How close you can get is controlled by the Turntable Angle on the Setup "
+"dialog.\n"
+msgstr ""
+"Vous ne pouvez pas placer une connection de voie trop près d'une voie de "
+"service existante. La distance que vous pouvez obtenir est contrôlée par "
+"l'angle du pont tournant dans la boîte de dialogue \"Options|Préférences\".\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:778
+msgid "In this example it is set to 15 degrees.\n"
+msgstr "Dans cet exemple, il est réglé sur 15 degrés.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:780
+msgid "You can drag the connecting point all round the turntable.\n"
+msgstr ""
+"Vous pouvez faire glisser le point de connexion tout autour du pont "
+"tournant.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:103
+#: ../../../../build/work/app/i18n/custmsg.h:782
+msgid ""
+"As you drag away from the turntable a straight track will be drawn to the "
+"cursor postion and a curve will be drawn from the cursor to the connecting "
+"track.\n"
+msgstr ""
+"Lorsque vous vous éloignez du pont tournant, une voie droite est dessinée "
+"vers la position du curseur et une courbe est dessinée entre le curseur et "
+"la voie de connexion.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:111
+#: ../../../../build/work/app/i18n/custmsg.h:784
+msgid ""
+"Now the cursor will be moved within the turntable, but the end stays on the "
+"edge of the well.\n"
+msgstr ""
+"Maintenant, le pointeur de la souris est déplacé à l'intérieur du pont "
+"tournant, mais la bout reste sur le bord de la fosse.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:161
+#: ../../../../build/work/app/i18n/custmsg.h:786
+msgid "All done.\n"
+msgstr "Terminé.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:169
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:38
+#: ../../../../build/work/app/i18n/custmsg.h:789
+msgid ""
+"The Draw Commands are used to draw straight and curved lines on the layout.\n"
+msgstr ""
+"Les commandes de dessin sont utilisées pour dessiner des lignes droites et "
+"courbes sur le plan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:46
+#: ../../../../build/work/app/i18n/custmsg.h:791
+msgid ""
+"Lines are drawn by clicking at the starting postion and dragging to the "
+"final position.\n"
+msgstr ""
+"Les lignes sont tracées en cliquant sur le point de départ, puis en créant "
+"le point de fin supplémentaire en faisant glisser.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:792
+#, fuzzy
+msgid ""
+"By default, the new line will snap to existing objects. Hold down the "
+"<Ctrl> and <Alt> keys to prevent this from happening.\n"
+msgstr ""
+"Par défaut, la nouvelle ligne s'accrochera aux objets existants. Maintenez "
+"la touche <Maj> enfoncée pour éviter que cela ne se produise.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:91
+#: ../../../../build/work/app/i18n/custmsg.h:794
+msgid "You also draw in various colors and line widths.\n"
+msgstr ""
+"Vous pouvez également dessiner avec différentes couleurs et épaisseurs de "
+"ligne.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:109
+#: ../../../../build/work/app/i18n/custmsg.h:796
+msgid ""
+"Like Curved Tracks, Curved Lines can be drawn by a variety of methods.\n"
+msgstr ""
+"Comme les voies courbes, les lignes courbes peuvent être tracées de "
+"différentes façons.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:797
+msgid ""
+"Here we will draw a Curve by dragging from one End-Point to the other to "
+"define the chord of the Curve. Then we will drag from the center to shape "
+"the curve.\n"
+msgstr ""
+"Ici, nous dessinons une courbe en faisant glisser d’un point d’extrémité à "
+"l’autre pour régler l’accord de la courbe. Ensuite, nous allons faire "
+"glisser du centre pour définir la forme de la courbe.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:184
+#: ../../../../build/work/app/i18n/custmsg.h:799
+msgid "Boxes are useful for drawing rectangular shapes.\n"
+msgstr "Les boîtes sont utiles pour dessiner des formes rectangulaires.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:194
+#: ../../../../build/work/app/i18n/custmsg.h:801
+msgid ""
+"Circles can be drawn by clicking on the center or edge and dragging to set "
+"the radius.\n"
+msgstr ""
+"Les cercles sont dessinés en cliquant sur le bord ou le point central, puis "
+"on définit le rayon en faisant glisser.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:802
+msgid "Here we will drag from the Center.\n"
+msgstr "Ici nous partons du centre.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:204
+#: ../../../../build/work/app/i18n/custmsg.h:804
+msgid "Lines and Shapes can be deleted by Selecting and Deleting.\n"
+msgstr ""
+"Les lignes et les formes peuvent être supprimées par une sélection et une "
+"suppression.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:227
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:91
+#: ../../../../build/work/app/i18n/custmsg.h:807
+msgid "We also draw Polylines and filled shapes.\n"
+msgstr "Nous pouvons également créer des polylignes et des formes remplies.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:98
+#: ../../../../build/work/app/i18n/custmsg.h:809
+msgid ""
+"A Polyline is drawn by dragging to place each of the point in the Polyline.\n"
+msgstr ""
+"Une polyligne est dessinée en faisant glisser le curseur pour placer chacun "
+"de ses points.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:125
+#: ../../../../build/work/app/i18n/custmsg.h:811
+msgid ""
+"To finish off the Polyline press the <Space> key or choose another drawing "
+"type.\n"
+msgstr ""
+"Pour terminer la polyligne, appuyez sur la touche <Espace> ou choisissez un "
+"autre type de dessin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:813
+msgid "A filled Polygon is drawn in the same way.\n"
+msgstr ""
+"Un polygone plein est dessiné de la même manière\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:158
+#: ../../../../build/work/app/i18n/custmsg.h:815
+msgid "When you are finished, press the <Space> key to complete the polygon.\n"
+msgstr ""
+"Lorsque vous avez terminé, appuyez sur la touche <Espace> pour terminer le "
+"polygone.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:165
+#: ../../../../build/work/app/i18n/custmsg.h:817
+msgid ""
+"You can use the Above and Below Commands to move lines and shapes to the "
+"front or back of the drawing.\n"
+msgstr ""
+"Vous pouvez utiliser les commandes \"Editer|Au-dessus\" et \"Editer|Au-"
+"dessous\" pour déplacer des lignes et des formes vers l'avant ou l'arrière "
+"du dessin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:182
+#: ../../../../build/work/app/i18n/custmsg.h:819
+msgid "Filled Boxes and Circles work the same as line Boxes and Circles.\n"
+msgstr ""
+"Les boîtes et cercles pleins fonctionnent comme les boîtes et cercles "
+"vides.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:199
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:8
+#: ../../../../build/work/app/i18n/custmsg.h:822
+msgid ""
+"In the drawing area of the main window you can see an hollow upwards arrow "
+"which represents the mouse cursor. In this demo the mouse will move about "
+"to show you the actions of different commands.\n"
+msgstr ""
+"Dans la zone de dessin de la fenêtre principale, vous verrez une flèche vide "
+"à la place du pointeur de souris. Cette démo la déplacera pour vous montrer "
+"comment fonctionnent les différentes commandes.\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:823
+msgid ""
+"The hollow arrow represents the mouse cursor without a mouse button being "
+"pressed.\n"
+msgstr ""
+"La flèche vide correspond au pointeur de la souris sans appuyer sur le "
+"bouton.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:825
+msgid ""
+"When the left mouse button would be pressed, the mouse cursor appears to "
+"flash and the hollow arrow is replaced by a solid left-pointing red arrow "
+"while the button is pressed.\n"
+msgstr ""
+"Lorsque le bouton gauche de la souris est enfoncé, le curseur de la souris "
+"semble clignoter et la flèche creuse est remplacée par une flèche rouge "
+"pointant vers la gauche tant que le bouton est enfoncé.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:826
+msgid ""
+"Note: these color changes occur only during the demo to simulate mouse "
+"button presses.\n"
+msgstr ""
+"Remarque : ces changements de couleur ne se produisent que pendant la "
+"démonstration pour simuler des frappes sur les boutons de la souris.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:24
+#: ../../../../build/work/app/i18n/custmsg.h:828
+msgid ""
+"Moving the mouse while a mouse button is pressed is called 'dragging'.\n"
+msgstr ""
+"Déplacer la souris en maintenant le bouton de la souris enfoncé s'appelle "
+"«glisser».\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:32
+#: ../../../../build/work/app/i18n/custmsg.h:830
+msgid ""
+"When the left mouse button is released, the mouse cursor flashes and the "
+"hollow up black arrow is restored.\n"
+msgstr ""
+"Lorsque le bouton gauche de la souris est relâché, le pointeur de la souris "
+"clignote et la flèche noire vide est restaurée.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:40
+#: ../../../../build/work/app/i18n/custmsg.h:832
+msgid ""
+"Dragging with the right button is simulated by a blue right-facing solid "
+"cursor.\n"
+msgstr ""
+"Le glissement avec le bouton droit est représenté par un curseur bleu plein "
+"pointé vers la droite.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:49
+#: ../../../../build/work/app/i18n/custmsg.h:834
+msgid "Release Right Click\n"
+msgstr "Relâcher le clic droit\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:57
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:62
+#: ../../../../build/work/app/i18n/custmsg.h:837
+msgid "Sometimes the Shift key is held down while using the mouse \n"
+msgstr ""
+"Parfois, la touche Maj est maintenue enfoncée pendant l'utilisation de la "
+"souris \n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:838
+msgid ""
+"This is indicated by an outlined arrow with the letter S near the arrow.\n"
+msgstr ""
+"Cette situation est indiquée par une flèche encadrée avec la lettre S près "
+"de la flèche.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:71
+#: ../../../../build/work/app/i18n/custmsg.h:840
+msgid ""
+"The left mouse button is held down with the Shift and dragged for a Left-"
+"Shift-Drag. \n"
+msgstr ""
+"Le bouton gauche de la souris est maintenu enfoncé avec la touche Maj et "
+"déplacé pour un glissement vers la gauche.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:86
+#: ../../../../build/work/app/i18n/custmsg.h:842
+msgid "Sometimes the Control key is held down while using the mouse. \n"
+msgstr ""
+"Parfois, la touche Ctrl est maintenue enfoncée lorsque vous utilisez la "
+"souris.\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:843
+msgid ""
+"This is indicated with an upward filled arrow head with the letter C near "
+"the arrow \n"
+msgstr ""
+"C'est indiqué par une tête de flèche pleine vers le haut avec la lettre C "
+"près de la flèche\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:98
+#: ../../../../build/work/app/i18n/custmsg.h:845
+msgid ""
+"If while the Control is held the Left mouse button is held down it is a Ctrl-"
+"Move and a Ctrl-Left-Drag. \n"
+msgstr ""
+"Si le bouton gauche de la souris est maintenu enfoncé pendant que le "
+"contrôle est effectué, il s'agit d'un Ctrl-Déplacer et d'un Ctrl-Gauche-"
+"Glisser. \n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:846
+msgid ""
+"This is indicated by an an left-facing open-headed arrow with the letter C "
+"near it.\n"
+msgstr ""
+"Ceci est indiqué par une flèche à tête ouverte tournée vers la gauche, avec "
+"la lettre C à côté.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:114
+#: ../../../../build/work/app/i18n/custmsg.h:848
+msgid "You can also use the Control key with the Right mouse button. \n"
+msgstr ""
+"Vous pouvez également utiliser la touche Contrôle avec le bouton droit de la "
+"souris.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:849
+msgid ""
+"This is indicated with a right-facing filled arrow with an open arrow head "
+"and the letter C near the arrow \n"
+msgstr ""
+"C'est indiqué par une flèche pleine orienté vers la droite avec une tête de "
+"flèche ouverte et la lettre C près de la flèche\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:130
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:23
+#: ../../../../build/work/app/i18n/custmsg.h:852
+msgid ""
+"The main drawing area shows a portion of total layout. You can zoom in or "
+"zoom out by choosing 'Zoom In' or 'Zoom Out' in the 'Edit' menu, by using "
+"the Zoom buttons on the toolbar or by using the 'Page Down' and 'Page Up' "
+"keys.\n"
+msgstr ""
+"La zone de dessin principale montre une partie du plan total. Vous pouvez "
+"zoomer ou dézoomer en choisissant «Zoom avant» ou «Zoom arrière» dans le "
+"menu «Affichage», en utilisant les boutons Zoom de la barre d'outils ou en "
+"utilisant les touches «Page suivante» et «Page précédente», ou la molette de "
+"la souris.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:853
+msgid "You can see the entire layout in the Map window.\n"
+msgstr ""
+"Vous pouvez voir l'intégralité du plan de voie dans la fenêtre de la carte.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:33
+#: ../../../../build/work/app/i18n/custmsg.h:855
+msgid "As you Zoom Out tracks are drawn with one line instead of two.\n"
+msgstr ""
+"Lorsque vous effectuez un zoom arrière, les voies sont dessinées avec une "
+"voie au lieu de deux.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:49
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:858
+msgid ""
+"You can change what portion of the layout is shown by using the 'Map' window "
+"which shows a compressed version of the entire layout. A hilighted area of "
+"the 'Map' (in blue highlight) shows what portion of the layout is displayed "
+"in the main drawing area.\n"
+msgstr ""
+"Vous pouvez modifier une partie du plan affichée en utilisant la fenêtre "
+"\"Carte\" qui montre une version compressée du plan entier. Une zone "
+"éclairée de la «Carte» (en surbrillance bleue) montre quelle partie du plan "
+"est affichée dans la zone de dessin principale.\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:859
+msgid ""
+"You can Left-Drag the hilighted area in the Map window to change the "
+"displayed portion of the layout.\n"
+msgstr ""
+"Vous pouvez modifier la zone affichée sur la fenêtre de navigation en "
+"faisant glisser la zone en surbrillance dans la fenêtre du plan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:861
+msgid ""
+"You can also Right-Drag on the Map window to set the scale and position of "
+"the Main window.\n"
+msgstr ""
+"Vous pouvez également faire glisser vers la droite dans la fenêtre de "
+"navigation pour déterminer l'échelle et la position du dessin dans la "
+"fenêtre principale.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:72
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmnotes.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:864
+msgid ""
+"The <Note> command lets you attach notes to various spots on the layout.\n"
+msgstr ""
+"La commande <Remarque> permet de placer des notes à différents points du "
+"plan de tracé.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmnotes.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:866
+msgid ""
+"When you place a note, the Note editor window is displayed which lets you "
+"enter the note.\n"
+msgstr ""
+"Lorsque vous créez une note, l'éditeur de notes s'ouvre, ce qui vous permet "
+"de saisir un texte.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmnotes.xtr:22
+#: ../../../../build/work/app/i18n/custmsg.h:868
+msgid ""
+"If you click on a note in <Describe> mode the Note editor displays the "
+"note.\n"
+msgstr "Si vous cliquez sur une note en mode <Describe>, l'éditeur apparaît.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmnotes.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:870
+msgid "This is the end of the XTrackCAD Demos.\n"
+msgstr "C'est la fin des démos XTrackCAD.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:871
+msgid "Click Step to return to XTrackCAD.\n"
+msgstr "Cliquez sur Pas à Pas pour revenir à XTrackCAD.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:872
+msgid "Thanks for watching.\n"
+msgstr "Merci d'avoir regardé.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:32
+#: ../../../../build/work/app/i18n/custmsg.h:874
+msgid "This example shows how to create parallel tracks.\n"
+msgstr "Cet exemple montre comment créer des voies parallèles.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:37
+#: ../../../../build/work/app/i18n/custmsg.h:876
+msgid ""
+"The separation is set in the <Parallel Separation> window. You should set "
+"this value before you begin to select tracks.\n"
+msgstr ""
+"La séparation est définie dans la fenêtre <Separation parallèle>. Vous devez "
+"définir cette valeur avant de commencer à sélectionner des voies.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:49
+#: ../../../../build/work/app/i18n/custmsg.h:878
+msgid ""
+"You control which side the parallel track will be on by moving the cursor "
+"from one side of the track centerline to the other.\n"
+msgstr ""
+"Vous pouvez contrôler de quel côté la voie parallèle sera créée en déplaçant "
+"le curseur d'un côté de l'axe de la voie à l'autre.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:81
+#: ../../../../build/work/app/i18n/custmsg.h:880
+msgid "When you release the mouse button the new parallel track is created.\n"
+msgstr ""
+"Dès que vous relâchez le bouton de la souris, la voie parallèle est créée.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:881
+msgid ""
+"Note that the <Parallel> command remains active after you created the "
+"track. This is controlled by the Sticky dialog in the Options menu.\n"
+msgstr ""
+"Notez que la commande <Parallele> reste active après la création de la voie. "
+"Ceci est contrôlé par la boîte de dialogue Sticky dans le menu "
+"'Options>Sticky'.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:92
+#: ../../../../build/work/app/i18n/custmsg.h:883
+msgid "You cannot create a track parallel to a turnout.\n"
+msgstr "Vous ne pouvez pas créer une voie parallèle à un aiguillage.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:172
+#: ../../../../build/work/app/i18n/custmsg.h:885
+msgid ""
+"Note that the new curved track is automatically connected to the short "
+"parallel track.\n"
+msgstr ""
+"Notez que la nouvelle voie incurvée est automatiquement connectée à la voie "
+"parallèle courte.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:180
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:19
+#: ../../../../build/work/app/i18n/custmsg.h:888
+msgid ""
+"Polylines and polygons (created with the <Draw> command) can be modified by "
+"dragging on their corners or edges.\n"
+msgstr ""
+"Les polylignes et les polygones (créés avec la commande <Dessiner>) peuvent "
+"être modifiés en faisant glisser leurs angles ou leurs bords.\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:889
+msgid "First Left Click on the shape you want to modify.\n"
+msgstr ""
+"En premier lieu, faites un Clic gauche sur la forme que vous souhaitez "
+"modifier.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:29
+#: ../../../../build/work/app/i18n/custmsg.h:891
+msgid "Then drag on the point you want to move\n"
+msgstr "Faites ensuite glisser le point que vous souhaitez déplacer\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:893
+msgid "And finally press the Space bar to finish the change\n"
+msgstr ""
+"Et enfin, appuyez sur la barre espace pour terminer la modification\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:895
+msgid "If you select the middle of an Edge a new Corner is created.\n"
+msgstr ""
+"Si vous sélectionnez le centre d'une arête, un nouveau coin est créé.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:72
+#: ../../../../build/work/app/i18n/custmsg.h:897
+msgid "To delete a corner, select and then press Delete or Backspace\n"
+msgstr ""
+"Pour supprimer un coin, sélectionnez et appuyez ensuite sur Supprimer ou "
+"Retour arrière\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:98
+#: ../../../../build/work/app/i18n/custmsg.h:899
+msgid "But you cannot have a Poly-shape with less than 3 sides.\n"
+msgstr "Mais vous ne pouvez pas avoir une polyforme avec moins de 3 côtés.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:126
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:126
+#: ../../../../build/work/app/i18n/custmsg.h:902
+msgid ""
+"To use the <Profile> command you first need to define Elevations on your "
+"layout.\n"
+msgstr ""
+"Pour utiliser la commande <Profil>, vous devez d'abord définir des "
+"élévations sur votre plan.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:903
+msgid "In this example we'll use the Elevations defined in the last example.\n"
+msgstr ""
+"Dans cet exemple, nous utiliserons les élévations définies dans le dernier "
+"exemple.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:904
+msgid "You can move or resize the Profile dialog now if you want.\n"
+msgstr "La fenêtre du profil d'élévation peut maintenant être agrandie.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:135
+#: ../../../../build/work/app/i18n/custmsg.h:906
+msgid ""
+"To show the Profile you need to select a Path on the tracks of your layout.\n"
+msgstr ""
+"Pour afficher le profil d'élévation, vous devez sélectionner un itinéraire "
+"sur votre plan.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:907
+msgid "Select a Defined Elevation point (marked by Gold dots).\n"
+msgstr ""
+"Sélectionnez un point d'élévation défini (marqué par des points dorés).\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:908
+msgid "We will start with the right end of the siding.\n"
+msgstr "Nous commençons à l'extrémité droite de la voie d'évitement.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:148
+#: ../../../../build/work/app/i18n/custmsg.h:910
+msgid ""
+"The second Point is at the left end of the siding. The Path will be drawn "
+"in Purple on the layout.\n"
+msgstr ""
+"Le deuxième point est à l'extrémité gauche du revêtement. Le chemin sera "
+"indiqué en violet sur le plan.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:160
+#: ../../../../build/work/app/i18n/custmsg.h:912
+msgid "Now select the end of one of the Branches\n"
+msgstr "Maintenant, sélectionnez le bout d'une des branches.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:169
+#: ../../../../build/work/app/i18n/custmsg.h:914
+msgid ""
+"The Profile line is drawn in Red. This indicates that there some turnouts "
+"on that section of the Path which have more than 2 connections.\n"
+msgstr ""
+"Le profil d'élévation est dessiné en rouge. Cela signifie qu'il existe des "
+"aiguillages sur cette section du chemin d'accès qui ont plus de 2 "
+"connexions.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:915
+msgid ""
+"The grade on this part of the Path is the average and may be affected by "
+"other Elevations, such the end of the lower branch.\n"
+msgstr ""
+"La pente de cette partie du chemin est une valeur moyenne et peut être "
+"influencée par d'autres élévations telles que l'extrémité de la branche "
+"inférieure.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:178
+#: ../../../../build/work/app/i18n/custmsg.h:917
+msgid "Now try to select the End-Point of the other branch.\n"
+msgstr ""
+"Essayez maintenant de sélectionner le point de fin de l'autre branche.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:918
+msgid ""
+"You will get an error message because there is no route to one of the ends "
+"of the existing Path.\n"
+msgstr ""
+"Vous recevrez un message d'erreur car il n'y a pas de route vers l'un des "
+"points de fin du chemin existant.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:187
+#: ../../../../build/work/app/i18n/custmsg.h:920
+msgid ""
+"In this case remove the last part of the Path by clicking on current end of "
+"the Path and reselect the End-Point.\n"
+msgstr ""
+"Dans ce cas, supprimez la dernière partie du chemin en cliquant sur "
+"l'extrémité actuelle du chemin et sélectionnez à nouveau le point de fin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:198
+#: ../../../../build/work/app/i18n/custmsg.h:922
+msgid "Notice that the Grade has changed on the Profile.\n"
+msgstr "Notez que la pente a changé dans le profil d'élévation.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:205
+#: ../../../../build/work/app/i18n/custmsg.h:924
+msgid ""
+"You can Ignore End-Points on the Path by using Shift-Right-Click to display "
+"the Profile Options popup menu and chosing Ignore.\n"
+msgstr ""
+"Vous pouvez ignorer les points de fin sur le tracé en utilisant Maj+clic "
+"droit. Dans les options du profil d'élévation, choisissez \"Ignorer\".\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:925
+msgid ""
+"Note: We can't show the menu in demo mode but we will show the effect of a "
+"Shift Right Click and selecting ignore. We will be Ignoring the End-Point "
+"of the Turnout that is not on the Path.\n"
+msgstr ""
+"Remarque : nous ne pouvons pas afficher le menu en mode démo, mais nous "
+"montrerons l'effet d'un Maj+clic droit avec la sélection 'ignorer'. Nous "
+"ignorerons le point de fin de l'aiguillage qui ne se trouve pas sur le "
+"chemin.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:217
+#: ../../../../build/work/app/i18n/custmsg.h:927
+msgid "Notice that part of the Profile line is redrawn in Blue.\n"
+msgstr ""
+"Notez qu'une partie de la ligne de profil d'élévation est redessinée en "
+"bleu.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:928
+msgid ""
+"Also, the Computed Elevations and Grade marker on the right side of the "
+"layout have been updated.\n"
+msgstr ""
+"En outre, les calculs de marqueurs d'élévations et de niveaux situés à "
+"droite du plan ont été mis à jour.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:225
+#: ../../../../build/work/app/i18n/custmsg.h:930
+msgid ""
+"You can set additional Defined Elevation points using the Profile Options "
+"popup menu. These points are added to the Profile if they are on the Path.\n"
+msgstr ""
+"Vous pouvez définir des points d'élévation supplémentaires à l'aide du menu "
+"contextuel Elévation. S'ils se trouvent sur le chemin, ces points sont "
+"ajoutés au profil.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:931
+msgid ""
+"We do this by Shift Right Click to display the Profile Options popup menu "
+"and selecting Define.\n"
+msgstr ""
+"Pour ce faire, cliquez sur le bouton droit de la souris pour afficher le "
+"menu contextuel \"Elévation\" et sélectionnez l'élément de voie puis \"Défini"
+"(e)\".\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:237
+#: ../../../../build/work/app/i18n/custmsg.h:933
+msgid ""
+"We've just added a Defined Elevation point to the middle of the lower "
+"branch. Notice the addition on the Profile dialog.\n"
+msgstr ""
+"Nous venons d'ajouter un point d'élévation définie au milieu de la branche "
+"inférieure. Notez l'ajout dans la boîte de dialogue Profil.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:246
+#: ../../../../build/work/app/i18n/custmsg.h:935
+msgid ""
+"For the siding we defined a Station name but it's not on the Path, since the "
+"Path takes the shortest distance between points.\n"
+msgstr ""
+"Pour le revêtement, on a attribué un nom de station. Ce n'est pas sur le "
+"chemin car un chemin utilise toujours le chemin le plus court entre les "
+"points.\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:936
+msgid ""
+"We can Ignore one of the End-Points on a Turnout to force the Path to take "
+"the other route.\n"
+msgstr ""
+"En ignorant l'un des points d'extrémité d'un aiguillage, nous pouvons forcer "
+"le chemin à emprunter l'autre route.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:937
+msgid ""
+"Again we use Shift-Right-Click to display the Profile Options menu and "
+"select ignore.\n"
+msgstr ""
+"Encore une fois, nous utilisons Maj-Clic-Droit pour afficher les options du "
+"menu profil puis sélectionner Ignorer.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:258
+#: ../../../../build/work/app/i18n/custmsg.h:939
+msgid "Now remove the First section of the Path,\n"
+msgstr "Maintenant, supprimez la première section du chemin,\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:268
+#: ../../../../build/work/app/i18n/custmsg.h:941
+msgid "and reselect it.\n"
+msgstr "et resélectionnez-le.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:277
+#: ../../../../build/work/app/i18n/custmsg.h:943
+msgid ""
+"Now the Path goes through the Station End-Point and the name appears on the "
+"Profile dialog.\n"
+msgstr ""
+"Maintenant, le chemin passe par le point de fin de la station et le nom "
+"apparaît dans la boîte de dialogue du profil d'élévation.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:286
+#: ../../../../build/work/app/i18n/custmsg.h:945
+msgid "Now we need to increase the separation where the tracks cross.\n"
+msgstr "Nous devons maintenant augmenter la distance qui sépare les voies.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:946
+msgid ""
+"The two Elevations you see here are Computed Elevations which means "
+"XTrackCAD dynamically computes the Elevation based on the Elevations of "
+"connecting tracks.\n"
+msgstr ""
+"Les deux élévations que vous voyez ici sont des élévations calculées, ce qui "
+"signifie que XTrackCAD exécute dynamiquement le calcul d'élévation en "
+"fonction des voies connectées.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:947
+msgid ""
+"First make the lower End-Point a Defined Elevation point using Shift-Right-"
+"Click and the Profile Options menu. You will see the End-Point marked by a "
+"Gold dot and a new line is added to the Profile dialog.\n"
+msgstr ""
+"Tout d'abord marquer l'extrémité inférieure. Pour ce faire, cliquez avec le "
+"bouton droit de la souris sur le menu d’options du profil de hauteur "
+"(Modifier>Profil). Vous verrez que l'extrémité choisie est maintenant marqué "
+"d'un point doré. Le profil de hauteur a été ajouté une nouvelle voie.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:297
+#: ../../../../build/work/app/i18n/custmsg.h:949
+msgid "Now, drag the point on the Profile Dialog to change the Elevation.\n"
+msgstr ""
+"Maintenant, faites glisser le point dans la boîte de dialogue 'Profil' pour "
+"modifier l’élévation.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:950
+msgid ""
+"Note the grade on each side of the point will be displayed at the bottom of "
+"the Profile dialog.\n"
+msgstr ""
+"Notez que la pente de chaque côté du point apparaîtra en bas de la boîte de "
+"dialogue Profil.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:319
+#: ../../../../build/work/app/i18n/custmsg.h:952
+msgid ""
+"After we release the Profile is updated to show the new Elevation and "
+"Grade.\n"
+msgstr ""
+"Après validation le profil affiche les nouvelles élévations et angles.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:326
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:119
+#: ../../../../build/work/app/i18n/custmsg.h:955
+msgid "The <Rescale> command will change the size of the selected objects.\n"
+msgstr "La commande <Echelle> modifie la taille des objets sélectionnés.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:956
+msgid "First we will try rescaling by ratio.\n"
+msgstr "Nous allons d’abord essayer de redimensionner le ratio.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:126
+#: ../../../../build/work/app/i18n/custmsg.h:958
+msgid "We are going to make everything 150% bigger.\n"
+msgstr "Nous augmentons tout à 150%.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:136
+#: ../../../../build/work/app/i18n/custmsg.h:960
+msgid "Note the track gauge did not change.\n"
+msgstr "Notez que l'écartement de voie n'a pas changé.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:143
+#: ../../../../build/work/app/i18n/custmsg.h:962
+msgid "Let's try that again.\n"
+msgstr "Essayons à nouveau.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:963
+msgid "Now we are going to convert from one scale to another.\n"
+msgstr "Nous passons maintenant d'une échelle à une autre.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:154
+#: ../../../../build/work/app/i18n/custmsg.h:965
+msgid "We will convert everything from N scale to HO scale...\n"
+msgstr "Nous allons tout convertir de N en H0 …\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:161
+#: ../../../../build/work/app/i18n/custmsg.h:967
+msgid "and change the track gauge as well.\n"
+msgstr "et changez également l'écartement de voie.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:169
+#: ../../../../build/work/app/i18n/custmsg.h:969
+msgid "Note that the Title of the turnout did not change.\n"
+msgstr "Notez que le titre de l'aiguillage n'a pas changé.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:177
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrotate.xtr:72
+#: ../../../../build/work/app/i18n/custmsg.h:972
+msgid ""
+"The <Rotate> command will pivot the Selected objects. First Click on the "
+"pivot point and then drag to Rotate the objects.\n"
+msgstr ""
+"La commande <Rotation> permet de faire pivoter des objets sélectionnés. "
+"Cliquez d'abord sur le centre de la rotation, puis faites-le glisser pour "
+"faire pivoter les objets.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:973
+msgid ""
+"In this example we will rotate the selected structure about it's center.\n"
+msgstr ""
+"Dans cet exemple, nous allons faire pivoter la bâtiment sélectionnée autour "
+"de son centre.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrotate.xtr:135
+#: ../../../../build/work/app/i18n/custmsg.h:975
+msgid ""
+"The <Rotate> command will restrict the rotation to increments of 15° if you "
+"hold down the <Shift> and <Ctrl> keys.\n"
+msgstr ""
+"La commande <Rotation> limitera la rotation à des incréments de 15 ° si vous "
+"maintenez les touches <Maj> et <Ctrl> enfoncées.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrotate.xtr:316
+#: ../../../../build/work/app/i18n/custmsg.h:977
+msgid ""
+"There are Rotate options that you can access by Shift-Right-Click command "
+"menu and choosing 'Rotate...'.\n"
+msgstr ""
+"Il existe des options de rotation auxquelles vous pouvez accéder par le menu "
+"de commande Maj-Clic droit et en choisissant 'Rotation...'.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:978
+msgid ""
+"You can rotate the selected object by a fixed rotatation (15, 30, 45, 90, "
+"180) either clockwise or counter-clockwise, or by manually entering any "
+"angle.\n"
+msgstr ""
+"Vous pouvez faire pivoter l'objet sélectionné selon une rotation fixe (15, "
+"30, 45, 90, 180) dans le sens horaire ou antihoraire, ou en entrant "
+"manuellement n'importe quel angle.\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:979
+msgid ""
+"The other option is 'Align' which allows you align selected objects with an "
+"unselected object. This is useful to align railside buildings with track.\n"
+msgstr ""
+"L'autre option est 'Aligner' qui vous permet d'aligner les objets "
+"sélectionnés avec un objet non sélectionné. C'est utile pour aligner les "
+"bâtiments ferroviaires avec la voie.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:980
+msgid "Unfortunately, we can not currently demonstrate these features.\n"
+msgstr ""
+"Malheureusement, nous ne pouvons actuellement pas démontrer ces "
+"fonctionnalités.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrotate.xtr:529
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmruler.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:983
+msgid ""
+"The <Ruler> command draws a Ruler on the layout you can use to measure "
+"distances.\n"
+msgstr ""
+"La commande <Regle> dessine une règle sur le plan de voie. Cela peut être "
+"utilisé pour mesurer des distances.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmruler.xtr:24
+#: ../../../../build/work/app/i18n/custmsg.h:985
+msgid "If you press the <Ruler> command again the Ruler is removed.\n"
+msgstr ""
+"Si vous cliquez à nouveau sur la commande <Règle>, la règle sera supprimée.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmruler.xtr:32
+#: ../../../../build/work/app/i18n/custmsg.h:987
+msgid "But you can place it somewhere else.\n"
+msgstr "Mais vous pouvez le placer ailleurs.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmruler.xtr:42
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:173
+#: ../../../../build/work/app/i18n/custmsg.h:990
+msgid "The <Select> command is used to select tracks.\n"
+msgstr "La commande <Selectionner> est utilisée pour sélectionner les voies.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:991
+msgid "Selected tracks can be moved or rotated during the <Select> command.\n"
+msgstr ""
+"Les voies sélectionnées peuvent être déplacées ou pivotées pendant la "
+"commande <Selectionner>.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:992
+msgid "Selected tracks can also be deleted, hidden, listed and exported.\n"
+msgstr ""
+"Les voies sélectionnées peuvent également être supprimées, masquées, "
+"répertoriées et exportées.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:993
+msgid ""
+"When you move the cursor near a track that could be selected, the track is "
+"drawn with think blue lines.\n"
+msgstr ""
+"Lorsque vous déplacez le curseur près d'une voie qui pourrait être "
+"sélectionnée, la voie est dessinée avec des lignes bleues.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:184
+#: ../../../../build/work/app/i18n/custmsg.h:995
+msgid "A Left-Click selects a track\n"
+msgstr ""
+"Un simple clic gauche sélectionne une voie.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:192
+#: ../../../../build/work/app/i18n/custmsg.h:997
+msgid ""
+"The selected track will have red X's drawn where it is connected to "
+"unselected tracks. This indicates where the track will be disconnected if "
+"the selected tracks are moved, rotated or deleted.\n"
+msgstr ""
+"La voie sélectionnée aura des X rouges dessinés là où elle est connectée à "
+"des voies non sélectionnées. Cela désigne l'endroit où la voie sera "
+"déconnectée si les voies sélectionnées sont déplacées, tournées ou "
+"supprimées.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:998
+msgid "A Ctrl-Left-Click adds tracks to the selection\n"
+msgstr ""
+"Un Ctrl-clic gauche ajoute des voies à la sélection\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:211
+#: ../../../../build/work/app/i18n/custmsg.h:1000
+msgid "Selecting a selected track re-selects only it.\n"
+msgstr ""
+"La sélection d'une voie déjà sélectionnée la désélectionne.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:219
+#: ../../../../build/work/app/i18n/custmsg.h:1002
+msgid "Selecting off all tracks de-selects them.\n"
+msgstr ""
+"La sélection de toutes les voies déjà sélectionnées les désélectionne.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:227
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:232
+#: ../../../../build/work/app/i18n/custmsg.h:1005
+msgid ""
+"To demonstrate Select Connected, first select two tracks at the end of a "
+"part to be selected \n"
+msgstr ""
+"Pour démontrer Sélectionner Connecté, sélectionner d'abord deux voies à la "
+"fin d'une partie à sélectionner\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:248
+#: ../../../../build/work/app/i18n/custmsg.h:1007
+msgid ""
+"Shift-Left-Click on a track will select all unselected tracks connected to "
+"the track. Selection stops at a previously selected track.\n"
+msgstr ""
+"Maj-clic gauche sur une voie sélectionne toutes les voies qui y sont "
+"connectées. Le processus s'arrête dès qu'une voie est déjà sélectionnée.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:260
+#: ../../../../build/work/app/i18n/custmsg.h:1009
+msgid ""
+"Be careful with this because its very easy to select all tracks this way\n"
+msgstr ""
+"Soyez prudent parce que ça permet facilement de sélectionner toutes les "
+"voies.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:274
+#: ../../../../build/work/app/i18n/custmsg.h:1011
+msgid "The <esc> key will deselect all objects.\n"
+msgstr "La touche <Ech> désélectionnera tous les objets.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:282
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:287
+#: ../../../../build/work/app/i18n/custmsg.h:1014
+msgid "Left-Drag is used to select all objects within an area.\n"
+msgstr "Glisser-gauche sert à sélectionner tous les objets d'une zone.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:295
+#: ../../../../build/work/app/i18n/custmsg.h:1016
+msgid "Shift-Left-Drag is used to move selected tracks.\n"
+msgstr ""
+"Maj+glisser à gauche est utilisé pour déplacer les voies sélectionnées.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1017
+msgid ""
+"When you move selected tracks that are connected to unselected tracks, the "
+"tracks will be disconnected. These points are marked by a Red cross on the "
+"layout.\n"
+msgstr ""
+"Si vous déplacez des voies connectées vers des voies non sélectionnées, la "
+"connexion sera annulée. Ces points sont marqués d'une croix rouge sur le "
+"plan de voie.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1018
+msgid ""
+"If the unconnected end point of a track and one being moved are close "
+"enough, two circles are displayed, showing where the tracks will be snapped "
+"together. \n"
+msgstr ""
+"Si le point de fin non connecté d'une voie et d'une autre en cours de "
+"déplacement sont suffisamment proches, deux cercles s'affichent, indiquant "
+"où les voies seront accrochées ensemble.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:313
+#: ../../../../build/work/app/i18n/custmsg.h:1020
+msgid "Let's move the Main window to see what's going on next\n"
+msgstr "Déplaçons la fenêtre principale pour voir ce qui se passe ensuite.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:320
+#: ../../../../build/work/app/i18n/custmsg.h:1022
+msgid ""
+"Ctrl-Left-Drag rotates the selected tracks about the pivot point (which is "
+"where you started the drag)\n"
+msgstr ""
+"Ctrl+gauche+glisser fait pivoter les voies sélectionnées autour du point de "
+"pivot (qui est l'endroit où vous avez commencé le glissement)\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:382
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:387
+#: ../../../../build/work/app/i18n/custmsg.h:1025
+msgid ""
+"Next we select the <Join Tracks> command to demonstrate \"Move To Join\" \n"
+msgstr ""
+"Ensuite, nous sélectionnons la commande <Raccorder les voies> pour montrer "
+"\"Move To Join\"\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:392
+#: ../../../../build/work/app/i18n/custmsg.h:1027
+msgid ""
+"You can use Shift-Left-Click to select an open endpoint of a selected track "
+"to join with an unselected track. \n"
+msgstr ""
+"Ensuite, nous sélectionnons la commande <Connecter deux voies>. Vous pouvez "
+"utiliser Maj-Clic gauche pour déplacer un point de fin d'une voie "
+"sélectionnée pour rejoindre une voie non sélectionnée.\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1028
+msgid "We'll move the Main window again.\n"
+msgstr "Nous allons à nouveau déplacer la fenêtre principale.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:415
+#: ../../../../build/work/app/i18n/custmsg.h:1030
+msgid ""
+"You then Left-Click on an endpoint of a unselected track to move the "
+"selected tracks to join. \n"
+msgstr ""
+"Ensuite, nous sélectionnons la commande <Connecter deux voies>. Vous pouvez "
+"utiliser Maj-Clic gauche pour déplacer un point de fin d'une voie "
+"sélectionnée pour rejoindre une voie non sélectionnée.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:430
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:30
+#: ../../../../build/work/app/i18n/custmsg.h:1033
+msgid "The <Split> command is used to split and disconnect tracks.\n"
+msgstr ""
+"La commande <Segmentation de voie> est utilisée pour diviser et déconnecter "
+"les voies.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:35
+#: ../../../../build/work/app/i18n/custmsg.h:1035
+msgid "Simply select the spot on the track you want to split.\n"
+msgstr ""
+"Sélectionnez simplement l'endroit de la voie que vous souhaitez "
+"fractionner.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1036
+msgid "You cannot split turnouts (unless you hold down the Shift key).\n"
+msgstr ""
+"Les aiguillages ne peuvent être séparés que si vous appuyez sur la touche "
+"Maj.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:48
+#: ../../../../build/work/app/i18n/custmsg.h:1038
+msgid ""
+"If you split at spot that is already an End-Point between two tracks, or "
+"split twice at the same spot, the track is disconnected.\n"
+msgstr ""
+"Lors du fractionnement sur une extrémité existante ou lors du fractionnement "
+"deux fois au même endroit, les voies sont fractionnées.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:60
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:65
+#: ../../../../build/work/app/i18n/custmsg.h:1041
+msgid "The <Tunnel> command marks selected tracks as hidden.\n"
+msgstr "La commande <Tunnel> marque les voies sélectionnées comme masquées.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1042
+msgid ""
+"A tunnel portal is drawn at the boundary between hidden and normal track.\n"
+msgstr ""
+"Une entrée de tunnel est dessinée à la limite entre voie cachée et voie "
+"normale.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1043
+msgid ""
+"How the hidden tracks are drawn (solid, dashed or invisible) is controlled "
+"by the Draw EndPts radio button group on the Setup dialog.\n"
+msgstr ""
+"La manière dont les voies cachées sont dessinées (pleines, en pointillés ou "
+"invisibles) est contrôlée par le groupe de boutons radio de la boîte de "
+"dialogue Options d'affichage.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:86
+#: ../../../../build/work/app/i18n/custmsg.h:1045
+msgid ""
+"To 'un-hide' a track just Select it again and click the Tunnel button.\n"
+msgstr ""
+"Pour «masquer» une voie, sélectionnez-la à nouveau et cliquez sur le bouton "
+"Tunnel.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:100
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmstrtrk.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:1048
+msgid ""
+"Straight tracks are created by selecting the first End-Point of the track.\n"
+msgstr ""
+"Les voies droites sont créées en sélectionnant le premier point de fin de la "
+"voie.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmstrtrk.xtr:12
+#: ../../../../build/work/app/i18n/custmsg.h:1050
+msgid "Then the other End-Point is dragged to its final postion.\n"
+msgstr ""
+"Ensuite, l'autre point d'extrémité est déplacé vers sa position correcte.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmstrtrk.xtr:20
+#: ../../../../build/work/app/i18n/custmsg.h:1052
+msgid "The left mouse button is released at the final end postion.\n"
+msgstr "À ce stade, le bouton gauche de la souris est relâché.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmstrtrk.xtr:27
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:23
+#: ../../../../build/work/app/i18n/custmsg.h:1055
+msgid ""
+"Table Edges are used to mark the edges of the layout, either for aisles or "
+"room walls.\n"
+msgstr ""
+"Les bords de table sont utilisés pour marquer les bords du plan, que ce soit "
+"pour les allées ou les murs de la pièce.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:47
+#: ../../../../build/work/app/i18n/custmsg.h:1057
+msgid "A Table Edge is attracted to the ends of other Table Edges.\n"
+msgstr ""
+"Un bord de plateau est attiré vers les extrémités des autres bords de "
+"plateau.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:1059
+msgid "Table Edges can be modified by dragging on their ends.\n"
+msgstr ""
+"Les bords de table peuvent être modifiés en faisant glisser leurs "
+"extrémités.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:180
+#: ../../../../build/work/app/i18n/custmsg.h:1061
+msgid ""
+"If you hold down the Control key while dragging then the Table Edge will be "
+"attracted to other objects.\n"
+msgstr ""
+"Si vous maintenez la touche Ctrl enfoncée tout en faisant glisser le bord de "
+"table, celui-ci sera attiré par d'autres objets.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:218
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:1064
+msgid ""
+"These examples shows some of the various Turnout Designer windows. Each "
+"window defines a different type of turnout.\n"
+msgstr ""
+"Ces exemples présentent certaines des différentes fenêtres de conception "
+"d'aiguillage. Chaque fenêtre est utilisée pour un type d'aiguillage "
+"différent.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1065
+msgid ""
+"In each window there are a number of parameters to fill in and one or two "
+"description lines.\n"
+msgstr ""
+"Chaque fenêtre de dialogue contient un certain nombre de paramètres à "
+"renseigner et une ou deux lignes de description.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1066
+msgid "You can print the design to check the dimensions before saving them.\n"
+msgstr ""
+"Vous pouvez imprimer le dessin pour vérifier les dimensions avant de les "
+"enregistrer.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:1068
+msgid "This is the regular turnout.\n"
+msgstr "Il s'agit d'un aiguillage normal.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1069
+msgid ""
+"In addition to the dimensions, you also enter the Title (Manufacturer, "
+"Description and Part Number). For Turnouts with Left and Right hand "
+"versions there are separate Descriptions and Part Numbers.\n"
+msgstr ""
+"Outre les dimensions, vous entrez également le titre (fabricant, description "
+"et numéro de pièce). Pour les aiguillages avec versions à gauche et à "
+"droite, la description et les références sont enregistrées séparément.\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1070
+msgid ""
+"Some Turnouts and Sectional track are pre-mounted on roadbed. For these "
+"parts you can specify the width of the roadbed, the thickness of the lines "
+"drawn for the edge of the roadbed and the color.\n"
+msgstr ""
+"Certains aiguillages et sections de rails sont pré-montés sur un ballast. "
+"Pour ces pièces, vous pouvez spécifier la largeur du ballast, l'épaisseur "
+"des lignes tracées pour le bord du ballast et la couleur.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:30
+#: ../../../../build/work/app/i18n/custmsg.h:1072
+msgid "The double slip switch is described by only a few parameters.\n"
+msgstr ""
+"La traversée de jonction double n'est décrit que par quelques paramètres.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:40
+#: ../../../../build/work/app/i18n/custmsg.h:1074
+msgid "The double crossover only needs length and track separation.\n"
+msgstr ""
+"La traversée-jonction double n'a besoin que d'une longueur et d'une "
+"séparation des rails.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:48
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:30
+#: ../../../../build/work/app/i18n/custmsg.h:1077
+msgid ""
+"Pressing the turnout button displays the Turnout Selection window to let you "
+"choose a turnout to place.\n"
+msgstr ""
+"Appuyez sur le bouton 'aiguillage' pour afficher la fenêtre Sélection afin "
+"de vous permettre d'en choisir un pour le placer.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1078
+msgid ""
+"Note that once you start to place the turnout on the Main window the Turnout "
+"Selection window disappears. This feature is enabled by the Hide toggle "
+"button on the dialog.\n"
+msgstr ""
+"Notez que lorsque vous commencez à placer l'aiguillage dans la fenêtre "
+"principale, la fenêtre Sélection d'aiguillage disparaît. Cette commodité est "
+"activée par le bouton 'Cacher' de la boîte de dialogue.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:38
+#: ../../../../build/work/app/i18n/custmsg.h:1080
+msgid ""
+"You can place the turnout on a arbitrary position on the layout. Left-drag "
+"the turnout into place...\n"
+msgstr ""
+"Vous pouvez placer l'aiguillage à une position arbitraire du plan. Faites le "
+"glisser au bon endroit …\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:85
+#: ../../../../build/work/app/i18n/custmsg.h:1082
+msgid "Then you can rotate the turnout by Right dragging.\n"
+msgstr ""
+"Vous pouvez ensuite faire pivoter l'aiguillage en faisant glisser avec le "
+"bouton droit de la souris.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1083
+msgid ""
+"You can also use Shift-Right-Click to display a popup menu that lets you "
+"rotate the Turnout by specific angles.\n"
+msgstr ""
+"Vous pouvez ouvrir un menu contextuel avec Maj+clic droit, ce qui vous "
+"permet de faire pivoter l'aiguillage selon des angles fixes.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:136
+#: ../../../../build/work/app/i18n/custmsg.h:1085
+msgid ""
+"When you are satisfied with the position and orientation of the turnout "
+"press Space bar or the Return key on the keyboard to finish placing the "
+"turnout.\n"
+msgstr ""
+"Lorsque vous êtes satisfait de la position et de l'orientation de "
+"l'aiguillage, appuyez sur la barre d'espace ou sur la touche \"Entr\" du "
+"clavier pour terminer la commande.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1086
+msgid ""
+"Pressing the Close button on the Turnout dialog will end the <Turnout> "
+"command as well as placing the turnout.\n"
+msgstr ""
+"Vous pouvez également quitter la commande <Aiguillage> et valider son "
+"positionnement en appuyant sur le bouton OK dans la boîte de dialogue.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:146
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:189
+#: ../../../../build/work/app/i18n/custmsg.h:1089
+msgid ""
+"If you drag along an existing track the new turnout will be attached to the "
+"track.\n"
+msgstr ""
+"Si vous faites glisser l'aiguillage sur une voie existante, il sera connecté "
+"à la voie.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1090
+msgid ""
+"Note that the status line tells you the number of End-Points that would be "
+"connected and, the maximum displacement of the End-Points. This will be "
+"useful when building complex track, as we will see later.\n"
+msgstr ""
+"Notez que la ligne d'état vous indique le nombre de points d'extrémité qui "
+"seraient connectés ainsi que la distance maximale entre eux. Ce sera utile "
+"lors de la construction de voies complexes, comme nous le verrons plus "
+"tard.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:220
+#: ../../../../build/work/app/i18n/custmsg.h:1092
+msgid ""
+"By moving the cursor from one side to the other of the track centerline you "
+"can flip the turnout 180ᅵ.\n"
+msgstr ""
+"En déplaçant le curseur d'un côté à l'autre de l'axe de la voie, vous pouvez "
+"inverser l'aiguille de 180 °.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:236
+#: ../../../../build/work/app/i18n/custmsg.h:1094
+msgid ""
+"If you try to drag across another turnout the new turnout will placed at the "
+"nearest End-Point of the existing turnout.\n"
+msgstr ""
+"Si vous glissez le nouvel aiguillage par-dessus un aiguillage existant, le "
+"nouvel aiguillage sera connecté au point le plus proche de l'aiguillage "
+"existant.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:299
+#: ../../../../build/work/app/i18n/custmsg.h:1096
+msgid ""
+"When you press Space or Return while the turnout is on a track, the track "
+"will be split and the new turnout attached automatically.\n"
+msgstr ""
+"Si vous appuyez sur la barre d'espace ou sur la touche Entrée alors que "
+"l'aiguillage est sur une voie, cette voie est déconnectée et l'aiguillage "
+"est automatiquement connecté.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:307
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:366
+#: ../../../../build/work/app/i18n/custmsg.h:1099
+msgid "Pressing Close ends the <Turnout> command.\n"
+msgstr "Appuyez sur Fermer pour mettre fin à la commande <Aiguillage>.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:372
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:21
+#: ../../../../build/work/app/i18n/custmsg.h:1102
+msgid "Sometimes it's useful to modify turnouts triming one of the ends.\n"
+msgstr ""
+"Il est parfois utile de modifier les aiguillages en coupant l'une des "
+"extrémités.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1103
+msgid "We use the <Split> command for this.\n"
+msgstr "Pour cela, nous utilisons la commande <Segmentation de voie>.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:28
+#: ../../../../build/work/app/i18n/custmsg.h:1105
+msgid "Normally, if we try to Split a turnout we get an error message.\n"
+msgstr ""
+"Normalement, si nous essayons de scinder un aiguillage, nous obtenons un "
+"message d'erreur.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:37
+#: ../../../../build/work/app/i18n/custmsg.h:1107
+msgid "Hold down the Shift key and try again.\n"
+msgstr ""
+"Appuyez sur Echap pour tout désélectionner. Maintenez la touche Maj enfoncée "
+"et réessayez.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:52
+#: ../../../../build/work/app/i18n/custmsg.h:1109
+msgid ""
+"The end of the turnout has been replaced by a piece of straight flex track "
+"which we can modify.\n"
+msgstr ""
+"La fin de l'aiguillage a été remplacée par un morceau de voie flexible "
+"droite que nous pouvons modifier.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:1111
+msgid "We can try splitting the diverging leg.\n"
+msgstr "Nous pouvons essayer de scinder la voie déviée.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:74
+#: ../../../../build/work/app/i18n/custmsg.h:1113
+msgid ""
+"Notice that the tail of the diverging leg has been changed to a curved "
+"track...\n"
+msgstr "Notez que la voie déviée a été changée en voie incurvée ...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:84
+#: ../../../../build/work/app/i18n/custmsg.h:1115
+msgid "and a straight track.\n"
+msgstr "et une voie droite.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:92
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:12
+#: ../../../../build/work/app/i18n/custmsg.h:1118
+msgid ""
+"This example show how to layout a yard using the <Turnout> and <Parallel> "
+"commands.\n"
+msgstr ""
+"Cet exemple montre comment aménager un grill à l'aide des commandes "
+"<Aiguillage> et <Parallele>.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:17
+#: ../../../../build/work/app/i18n/custmsg.h:1120
+msgid ""
+"You can resize and move the Turnout Selection dialog if it obscures the "
+"other windows.\n"
+msgstr ""
+"Vous pouvez redimensionner et déplacer la boîte de dialogue Sélection "
+"d'aiguillage si elle masque d'autres fenêtres.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1121
+msgid "First we place a turnout on the main line.\n"
+msgstr "Plaçons d’abord l'aiguillage sur la voie principale.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:35
+#: ../../../../build/work/app/i18n/custmsg.h:1123
+msgid "Next extend the turnout with the <Modify> command.\n"
+msgstr "Ensuite, étendez l'aiguillage avec la commande <Modifier>.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:46
+#: ../../../../build/work/app/i18n/custmsg.h:1125
+msgid ""
+"Now create a track parallel to the main line. Make sure the separation is "
+"reasonable for your scale.\n"
+msgstr ""
+"Créez maintenant une voie parallèle à la ligne principale. Assurez-vous que "
+"la séparation est raisonnable pour votre échelle.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:62
+#: ../../../../build/work/app/i18n/custmsg.h:1127
+msgid "And place a turnout to connect the new track.\n"
+msgstr "Et placez un aiguillage à connecter à la nouvelle voie.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1128
+msgid "We'll zoom in here to see what's going on.\n"
+msgstr "En zoomant, nous pouvons voir ce qui se passe.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:78
+#: ../../../../build/work/app/i18n/custmsg.h:1130
+msgid ""
+"Notice how we control which way the turnout is facing by moving the mouse "
+"across the center line of the track.\n"
+msgstr ""
+"Remarquez comment nous contrôlons l'orientation de l'aiguillage en déplaçant "
+"la souris sur la ligne médiane de la voie.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:94
+#: ../../../../build/work/app/i18n/custmsg.h:1132
+msgid ""
+"The Status bar displays the number of auto-connections that will be made and "
+"the maximum offset.\n"
+msgstr ""
+"La barre d'état affiche le nombre de points de terminaison connectés et le "
+"décalage maximum.\n"
+"\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1133
+msgid ""
+"XTrackCAD adjusts the turnout position for the best fit to minimize any "
+"connection offset\n"
+msgstr ""
+"XTrackCAD ajuste la position de l'aiguillage pour obtenir un meilleur "
+"ajustement afin de minimiser tout décalage de connexion\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:106
+#: ../../../../build/work/app/i18n/custmsg.h:1135
+msgid "Note that placing the turnout splits the parallel track.\n"
+msgstr "Notez que placer l'aiguillage déconnecte la voie parallèle.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1136
+msgid "We have to delete the leftover piece by Selecting and Deleting it.\n"
+msgstr "Nous devons sélectionner et supprimer la pièce restante.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:120
+#: ../../../../build/work/app/i18n/custmsg.h:1138
+msgid "Repeat the process for the other tracks in the yard.\n"
+msgstr "Répétez le processus pour les autres voies du dépôt.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:149
+#: ../../../../build/work/app/i18n/custmsg.h:1140
+msgid "For the last track we will join with a curve instead of a turnout.\n"
+msgstr ""
+"Pour la dernière voie, nous allons raccorder une courbe au lieu d’un "
+"aiguillage.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:185
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrkwid.xtr:91
+#: ../../../../build/work/app/i18n/custmsg.h:1143
+msgid "We can indicate the mainline by making the rails wider.\n"
+msgstr ""
+"Nous pouvons mettre en évidence l'itinéraire principal en dessinant les "
+"voies plus épaisses.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1144
+msgid "First we select the mainline tracks...\n"
+msgstr "Nous choisissons d’abord les voies principales ...\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrkwid.xtr:128
+#: ../../../../build/work/app/i18n/custmsg.h:1146
+msgid "And then select Medium Tracks from the Edit menu.\n"
+msgstr "Et puis sélectionnez \"Voies moyennes\" dans le menu \"Editer\".\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:1147
+msgid "We can't show the Edit menu, but we can show the effect.\n"
+msgstr ""
+"Nous ne pouvons pas afficher le menu Edition, mais nous pouvons montrer "
+"l'effet.\n"
+"\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrkwid.xtr:137
+#: ../../../../build/work/app/i18n/custmsg.h:1149
+msgid "We can make the rail thicker by selecting Thick Tracks.\n"
+msgstr ""
+"Nous pouvons rendre la voie plus épaisse en sélectionnant \"Épais\" (Wide "
+"Line.).\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrkwid.xtr:148
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrntab.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:1152
+msgid ""
+"Turntables are created by specifying the radius in a dialog box on the "
+"Status Bar. The radius in the dialog can be changed before proceeding.\n"
+msgstr ""
+"Lors de la création de ponts tournants, le rayon doit être saisi dans une "
+"boîte de dialogue sur la barre d'état. Le rayon doit être modifié avant les "
+"étapes suivantes.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrntab.xtr:15
+#: ../../../../build/work/app/i18n/custmsg.h:1154
+msgid "Then the turntable is dragged to its final location.\n"
+msgstr "Ensuite, le pont tournant est déplacé vers son emplacement final.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrntab.xtr:22
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:317
+#: ../../../../build/work/app/i18n/custmsg.h:1157
+msgid "Introduction"
+msgstr "Introduction"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:318
+#: ../../../../build/work/app/i18n/custmsg.h:1159
+msgid "Mouse Actions"
+msgstr "Actions de la souris"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:319
+#: ../../../../build/work/app/i18n/custmsg.h:1161
+msgid "Dialogs"
+msgstr "Dialogues"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:320
+#: ../../../../build/work/app/i18n/custmsg.h:1163
+msgid "Moving about"
+msgstr "Se déplacer"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:321
+#: ../../../../build/work/app/i18n/custmsg.h:1165
+msgid "Describe and Select"
+msgstr "Décrire et sélectionner"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:322
+#: ../../../../build/work/app/i18n/custmsg.h:1167
+msgid "Describe"
+msgstr "Décrire"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:324
+#: ../../../../build/work/app/i18n/custmsg.h:1171
+msgid "Simple tracks"
+msgstr "Simples voies"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:325
+#: ../../../../build/work/app/i18n/custmsg.h:1173
+msgid "Straight tracks"
+msgstr "Voies droites"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:326
+#: ../../../../build/work/app/i18n/custmsg.h:1175
+msgid "Curved tracks"
+msgstr "Voies courbes"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:327
+#: ../../../../build/work/app/i18n/custmsg.h:1177
+msgid "Circles"
+msgstr "Cercles"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:328
+#: ../../../../build/work/app/i18n/custmsg.h:1179
+msgid "Turntables"
+msgstr "Ponts tournants"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:329
+#: ../../../../build/work/app/i18n/custmsg.h:1181
+msgid "Modifying tracks"
+msgstr "Modification des voies"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:330
+#: ../../../../build/work/app/i18n/custmsg.h:1183
+msgid "Modifying end points "
+msgstr "Modification des points de fin "
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:331
+#: ../../../../build/work/app/i18n/custmsg.h:1185
+msgid "Extending"
+msgstr "Extension"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:332
+#: ../../../../build/work/app/i18n/custmsg.h:1187
+msgid "Medium and Thick Tracks"
+msgstr "Voies moyennes et épaisses"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:333
+#: ../../../../build/work/app/i18n/custmsg.h:1189
+msgid "Joining Tracks"
+msgstr "Raccorder des voies"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:334
+#: ../../../../build/work/app/i18n/custmsg.h:1191
+msgid "Straight to straight"
+msgstr "Tout droit"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:335
+#: ../../../../build/work/app/i18n/custmsg.h:1193
+msgid "Curve to straight"
+msgstr "Courbe à droite"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:336
+#: ../../../../build/work/app/i18n/custmsg.h:1195
+msgid "Circle to circle"
+msgstr "Cercle à cercle"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:337
+#: ../../../../build/work/app/i18n/custmsg.h:1197
+msgid "Joining to turntables"
+msgstr "Raccorder à un pont tournant"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:338
+#: ../../../../build/work/app/i18n/custmsg.h:1199
+msgid "Easements"
+msgstr "Courbes de transition (Easements)"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:339
+#: ../../../../build/work/app/i18n/custmsg.h:1201
+msgid "Abutting tracks"
+msgstr "Voies contiguës"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:340
+#: ../../../../build/work/app/i18n/custmsg.h:1203
+msgid "Move to Join"
+msgstr "Déplacer pour raccorder"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:342
+#: ../../../../build/work/app/i18n/custmsg.h:1207
+msgid "Select and Placement"
+msgstr "Sélectionner et positionner"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:343
+#: ../../../../build/work/app/i18n/custmsg.h:1209
+msgid "Building a yard throat."
+msgstr "Construire une entrée de dépôt."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:344
+#: ../../../../build/work/app/i18n/custmsg.h:1211
+msgid "Designing turnouts"
+msgstr "Concevoir des aiguillages"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:345
+#: ../../../../build/work/app/i18n/custmsg.h:1213
+msgid "Group and Ungroup"
+msgstr "Grouper et dissocier"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:346
+#: ../../../../build/work/app/i18n/custmsg.h:1215
+msgid "Triming Turnout Ends"
+msgstr "Modifier les points de fin d'un aiguillage"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:347
+#: ../../../../build/work/app/i18n/custmsg.h:1217
+msgid "Handlaid Turnouts"
+msgstr "Aiguillages de conception libre"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:348
+#: ../../../../build/work/app/i18n/custmsg.h:1219
+msgid "Elevations and Profile"
+msgstr "Élévations et profil"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:349
+#: ../../../../build/work/app/i18n/custmsg.h:1221
+msgid "Elevations"
+msgstr "Élévations"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:351
+#: ../../../../build/work/app/i18n/custmsg.h:1225
+msgid "Misc track commands"
+msgstr "Diverses commandes de voie"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:352
+#: ../../../../build/work/app/i18n/custmsg.h:1227
+msgid "Delete and Undo"
+msgstr "Supprimer et annuler"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:353
+#: ../../../../build/work/app/i18n/custmsg.h:1229
+msgid "Splitting and Tunnels"
+msgstr "Fractionnement et tunnels"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:355
+#: ../../../../build/work/app/i18n/custmsg.h:1233
+msgid "Helix tracks"
+msgstr "Voies hélicoïdales"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:356
+#: ../../../../build/work/app/i18n/custmsg.h:1235
+msgid "Exception Tracks"
+msgstr "Voies non conformes"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:358
+#: ../../../../build/work/app/i18n/custmsg.h:1239
+msgid "Connect and Tighten - a siding"
+msgstr "Connecter et ajuster - un revêtement"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:359
+#: ../../../../build/work/app/i18n/custmsg.h:1241
+msgid "Connect and Tighten - figure-8"
+msgstr "Connecter et ajuster - figure 8"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:360
+#: ../../../../build/work/app/i18n/custmsg.h:1243
+msgid "Other commands"
+msgstr "Autres commandes"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:362
+#: ../../../../build/work/app/i18n/custmsg.h:1247
+msgid "Table Edges"
+msgstr "Bords de table"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:364
+#: ../../../../build/work/app/i18n/custmsg.h:1251
+msgid "Dimension Lines"
+msgstr "Lignes de cotes"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:365
+#: ../../../../build/work/app/i18n/custmsg.h:1253
+msgid "Lines"
+msgstr "Lignes"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:366
+#: ../../../../build/work/app/i18n/custmsg.h:1255
+msgid "Poly-Shapes"
+msgstr "Poly-formes"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:367
+#: ../../../../build/work/app/i18n/custmsg.h:1257
+msgid "Modifying Poly-Shapes"
+msgstr "Modification des poly formes"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:370
+#: ../../../../build/work/app/i18n/custmsg.h:1263
+msgid "Control Panels"
+msgstr "Panneaux de contrôle"
+
+#, fuzzy
+#~ msgid "Pan to origin - 'o'/'0'"
+#~ msgstr "Pan à l'origine - 'o'"
+
+#~ msgid "Zoom keeps lower corner in view"
+#~ msgstr "Le zoom garde le coin inférieur en vue"
+
+#~ msgid "Whether zoom is locked to the bottom left corner or the center point"
+#~ msgstr ""
+#~ "Si le zoom est verrouillé dans le coin inférieur gauche ou au point "
+#~ "central"
+
+#~ msgid "Find ..."
+#~ msgstr "Chercher ..."
+
+#~ msgid "Move Origin Mode"
+#~ msgstr "Déplacer le mode d'origine"
+
+#~ msgid "Expected END statement not found!"
+#~ msgstr "Instruction END attendue introuvable!"
+
+#~ msgid "Modify Bezier Complete - select another"
+#~ msgstr "Modifier une Bézier terminé - en sélectionner une autre"
+
+#~ msgid "Shift used, but no Unconnected Track End there"
+#~ msgstr "Maj utilisée, mais il n'y a pas de fin de voie non connectée"
+
+#~ msgid "Shift used, but no Line End there"
+#~ msgstr "Maj utilisé, mais il n'y a pas de point de fin de ligne"
+
+#~ msgid "Track picked - now select a Point"
+#~ msgstr "Piste sélectionnée - sélectionnez maintenant un point"
+
+#~ msgid ""
+#~ "Place 2nd end point of Cornu track on track with an unconnected end-point"
+#~ msgstr ""
+#~ "Placer le 2e point de fin de la voie de Cornu sur la bonne voie avec un "
+#~ "point de fin non connecté"
+
+#~ msgid ""
+#~ "No unconnected end-point on track - Try again or release Shift and click"
+#~ msgstr ""
+#~ "Aucun point de fin non connecté sur la voie - Réessayez ou relâchez Shift "
+#~ "et cliquez"
+
+#~ msgid "Not on a track - Try again or release Shift and click"
+#~ msgstr "Pas sur une voie - Réessayez ou relâchez Shift et cliquez"
+
+#~ msgid "End Locked: Drag out to center"
+#~ msgstr "Extrémité fixe : tirez vers le centre"
+
+#~ msgid "Radius=%s Angle=%0.3f"
+#~ msgstr "Rayon=%s Angle=%0.3f"
+
+#~ msgid "Length=%s Angle=%0.3f"
+#~ msgstr "Longueur = %s Angle = %0.3f"
+
+#~ msgid "Freeform"
+#~ msgstr "Forme libre"
+
+#~ msgid "Polygonal Line"
+#~ msgstr "Ligne polygonale"
+
+#~ msgid "%s: Layer=%d"
+#~ msgstr "%s: Calque=%d"
+
+#~ msgid "There are no reachable Defined Elevations"
+#~ msgstr ""
+#~ "Il n'y a pas d'élévations définies accessibles, faites glisser pour "
+#~ "changer la hauteur"
+
+#~ msgid "Dist = %s"
+#~ msgstr "Dist = %s"
+
+#~ msgid "Select track to modify"
+#~ msgstr "Sélectionnez la voie à modifier"
+
+#~ msgid "Drag to create new track segment"
+#~ msgstr "Faites glisser pour créer une nouvelle section de voie"
+
+#~ msgid "Note: "
+#~ msgstr "Remarque : "
+
+#~ msgid "# End Pts"
+#~ msgstr "# Bouts"
+
+#~ msgid "Print Registration Marks"
+#~ msgstr "Imprimer les marques de repérage"
+
+#~ msgid "Print Snap Grid"
+#~ msgstr "Imprimer la grille magnétique"
+
+#~ msgid "Print Rulers"
+#~ msgstr "Imprimer les règles"
+
+#~ msgid "1 page"
+#~ msgstr "1 page"
+
+#~ msgid "Draw moving track normally"
+#~ msgstr "Tracez la voie en mouvement normalement"
+
+#~ msgid "Draw moving track simply"
+#~ msgstr "Tracez la voie en mouvement simplement"
+
+#~ msgid "Draw moving track as end-points"
+#~ msgstr "Tracez la voie en mouvement comme points de terminaison"
+
+#~ msgid "Cornu selected too tight after move - it was left alone"
+#~ msgstr ""
+#~ "Cornu choisi trop serrée après le déplacement - elle a été laissé seule"
+
+#~ msgid " Angle %0.3f"
+#~ msgstr " Angle %0.3f"
+
+#~ msgid "Simple"
+#~ msgstr "Simple"
+
+#~ msgid "End Points"
+#~ msgstr "Bouts de voie"
+
+#~ msgid "Tunnel"
+#~ msgstr "Tunnel"
+
+#~ msgid "TURNOUT "
+#~ msgstr "AIGUILLAGE "
+
+#~ msgid "%s Files|*.xtc"
+#~ msgstr "%s Fichiers|*.xtc"
+
+#~ msgid "Bitmap files|*.xpm"
+#~ msgstr "Fichiers Bitmap|*.xpm"
+
+#~ msgid "Color Layers"
+#~ msgstr "Couleur des calques"
+
+#~ msgid "End-Points"
+#~ msgstr "Bouts de voie"
+
+#~ msgid "Draw Moving Tracks"
+#~ msgstr "Tracez les voies en mouvement"
+
+#~ msgid "Unload"
+#~ msgstr "Désélectionner"
+
+#~ msgid "Use Shift+PageDwn to jump to preset Zoom In"
+#~ msgstr ""
+#~ "Utilisez Maj+Pg.Suiv pour passer à un facteur de zoom avant prédéfini"
+
+#~ msgid "Use Shift+PageUp to jump to preset Zoom Out"
+#~ msgstr ""
+#~ "Utilisez Maj+Pg.Préc pour passer à un facteur de zoom arrière prédéfini"
+
+#~ msgid "Commands"
+#~ msgstr "Commandes"
+
+#~ msgid "SnapGrid Enable"
+#~ msgstr "Valider la grille magnétique"
+
+#~ msgid "A&bove"
+#~ msgstr "A&u-dessus"
+
+#~ msgid "Belo&w"
+#~ msgstr "A&u-dessous"
+
+#~ msgid "General note about the layout"
+#~ msgstr "Note générale sur le plan"
+
+#~ msgid "How to draw track being moved/rotated"
+#~ msgstr "Comment dessiner une voie en cours de déplacement/rotation"
+
+#~ msgid ""
+#~ "A number of example layouts are provided. These files are located in the "
+#~ "'examples' directory where you installed XTrackCAD. The \"File|Open\" "
+#~ "command will open that directory when first used."
+#~ msgstr ""
+#~ "Un certain nombre d'exemples de réseaux sont fournis. Ils sont dans le "
+#~ "répertoire \"exemples\" où vous avez installé XTrackCAD. Ceux-ci peuvent "
+#~ "être chargés via la boîte de dialogue \"Fichier | Ouvrir\"."
+
+#~ msgid ""
+#~ "The length of the straight track is determined by the distance from the "
+#~ "far End-Point and the cursor.\n"
+#~ msgstr ""
+#~ "La longueur de la voie droite est déterminée par la distance entre le "
+#~ "point d'extrémité distant et le pointeur de la souris.\n"
+
+#~ msgid "First turn off the Snap Grid.\n"
+#~ msgstr "Commencez par désactiver la grille magnétique.\n"
+
+#~ msgid "Rotate the signals and move them to the proper locations.\n"
+#~ msgstr "Faites pivoter les signaux, puis placez-les au bon endroit.\n"
+
+#~ msgid "Rotate the arrow head by 180° and move into position.\n"
+#~ msgstr ""
+#~ "Faites pivoter la pointe de la flèche de 180° et placez-la dans la bonne "
+#~ "position.\n"
+
+#~ msgid ""
+#~ "Now the cursor is about to be moved past the other (far) End-Point of the "
+#~ "straight track. You will receive a warning and the connecting track "
+#~ "turns Red.\n"
+#~ msgstr ""
+#~ "Maintenant, le curseur est sur le point d'être déplacé au-delà de l'autre "
+#~ "point de fin (le plus éloigné) de la voie droite. Vous recevrez un "
+#~ "avertissement et la voie de connexion deviendra rouge.\n"
+
+#~ msgid ""
+#~ "Drawing lines with the Shift key held down will use the previous line End-"
+#~ "Point as the starting position. This makes it easy to draw connected "
+#~ "lines.\n"
+#~ msgstr ""
+#~ "Si vous maintenez la touche Maj enfoncée pendant le tracé, le dernier "
+#~ "point de fin est utilisé comme point de départ pour la nouvelle voie. "
+#~ "Cela simplifie le tracé des voies connectées.\n"
+
+#~ msgid ""
+#~ "If you drag a Corner to another Corner the two are merged and the Edge "
+#~ "between them is removed.\n"
+#~ msgstr ""
+#~ "Si vous faites glisser un coin vers un autre coin, celui-ci sera regroupé "
+#~ "et le bord situé entre ceux-ci sera supprimé.\n"
+
+#~ msgid ""
+#~ "Shift-Right-Click will display a popup-menu that you can use to rotate by "
+#~ "fixed amount (15°, 30°, 45°, 90° or 180°). The demonstration cannot show "
+#~ "the popup-menu but it can show the effects.\n"
+#~ msgstr ""
+#~ "Maj+Clic droit affichera un menu contextuel que vous pouvez utiliser pour "
+#~ "faire pivoter d'une quantité fixe (15°, 30°, 45°, 90° ou 180°). La "
+#~ "démonstration ne peut pas afficher le menu contextuel mais elle en peut "
+#~ "montrer les effets.\n"
+
+#~ msgid "Here we will rotate by 90° clockwise (CW).\n"
+#~ msgstr ""
+#~ "Ici, nous allons tourner à 90 ° dans le sens des aiguilles d'une montre "
+#~ "(CW).\n"
+
+#~ msgid ""
+#~ "Another option of the <Rotate> command popup-menu is to Align the "
+#~ "Selected object with some other object.\n"
+#~ msgstr ""
+#~ "Une autre option du menu contextuel de la commande <Rotation> consiste à "
+#~ "avoir l'objet sélectionné sur un autre objet.\n"
+
+#~ msgid ""
+#~ "First we will click on one line of the Selected object. The angle of "
+#~ "this part of the object will be Aligned.\n"
+#~ msgstr ""
+#~ "Nous allons d'abord cliquer sur une ligne de l'objet sélectionné. Cette "
+#~ "ligne sert de base à l'alignement.\n"
+
+#~ msgid ""
+#~ "Next, we click on an Unselected object. The Selected structure will be "
+#~ "rotated so that the line we clicked on will be parallel to the straight "
+#~ "track.\n"
+#~ msgstr ""
+#~ "Ensuite, nous cliquons sur un objet non sélectionné. La bâtiment "
+#~ "sélectionnée sera pivotée de sorte que la ligne sur laquelle vous avez "
+#~ "cliqué soit parallèle à la voie droite.\n"
+
+#~ msgid ""
+#~ "If we drag the mouse across the track, we can flip the structure by "
+#~ "180°. This is similar to how we place turnouts.\n"
+#~ msgstr ""
+#~ "Si nous faisons glisser la souris sur la voie, nous pouvons retourner la "
+#~ "bâtiment de 180 °. Ceci est similaire à la façon dont nous plaçons les "
+#~ "aiguillages.\n"
+
+#~ msgid ""
+#~ "We can also align to curved shapes. The Selected object will be rotated "
+#~ "to be parallel to the curve under the cursor.\n"
+#~ msgstr ""
+#~ "Nous pouvons également nous aligner sur des formes courbes. L'objet "
+#~ "sélectionné sera pivoté de façon à être parallèle au point de la courbe "
+#~ "qui se trouve sous le pointeur de la souris.\n"
+
+#~ msgid ""
+#~ "As we drag along the curved track the Selected object rotates to follow "
+#~ "the curve.\n"
+#~ msgstr ""
+#~ "Lorsque vous faites glisser le long de la voie incurvée, l'objet "
+#~ "sélectionné pivote pour suivre la courbe.\n"
+
+#~ msgid "Again, if we drag across the track we can flip the stucture.\n"
+#~ msgstr ""
+#~ "Encore une fois, si nous glissons sur la voie, nous pouvons retourner la "
+#~ "bâtiment.\n"
+
+#~ msgid "We can also Align to another Structure or any object.\n"
+#~ msgstr ""
+#~ "Nous pouvons également nous aligner sur d'autres bâtiments ou tout autre "
+#~ "objet.\n"
+
+#~ msgid "And Right-Drag de-selects all tracks within an area.\n"
+#~ msgstr ""
+#~ "Et faites un clic droit pour désélectionner toutes les voies d'une zone.\n"
+
+#~ msgid ""
+#~ "Drawing the tracks while moving can be very time-consuming. We had just "
+#~ "used the \"Normal\" method of drawing tracks.\n"
+#~ msgstr ""
+#~ "Dessiner des voies en mouvement peut prendre beaucoup de temps. Nous "
+#~ "venions d'utiliser la méthode \"normale\" de dessin de voies.\n"
+
+#~ msgid ""
+#~ "The Command Options dialog (from the Options menu) contains a Radio "
+#~ "button group which you can use to pick the drawing method.\n"
+#~ msgstr ""
+#~ "La boîte de dialogue Options de commande (dans le menu Options) contient "
+#~ "un groupe de boutons que vous pouvez utiliser pour modifier la méthode de "
+#~ "dessin.\n"
+
+#~ msgid ""
+#~ "You can also popup the Command Options Menu by pressing Shift-Right-Click "
+#~ "which includes options for setting the drawing method. These options are "
+#~ "also available for the Move and Rotate Command Options Menu.\n"
+#~ msgstr ""
+#~ "Vous pouvez également faire apparaître le menu Options de commande en "
+#~ "appuyant sur Maj + clic droit, ce qui inclut des options pour définir la "
+#~ "méthode de dessin. Ces options sont également disponibles pour les "
+#~ "commandes Déplacer et Rotation.\n"
+
+#~ msgid ""
+#~ "The next method is \"Simple\" draws. Here tracks are drawn using one "
+#~ "line, no End-Points are drawn, lines are not drawn and structures are "
+#~ "drawn using a box outline.\n"
+#~ msgstr ""
+#~ "La méthode suivante est le dessin \"simple\". Ici, les voies sont "
+#~ "représentées par une ligne, les extrémités et les lignes ne sont pas "
+#~ "dessinées. Les bâtiments sont remplacés par un rectangle pendant "
+#~ "l'opération.\n"
+
+#~ msgid ""
+#~ "Note: you can move the Command Options dialog if it obscures the main "
+#~ "window.\n"
+#~ msgstr ""
+#~ "Remarque : vous pouvez déplacer la boîte de dialogue Options de commande "
+#~ "si elle masque la fenêtre principale.\n"
+
+#~ msgid ""
+#~ "The next method is to just draw the End-Points of the selected tracks.\n"
+#~ msgstr ""
+#~ "La méthode suivante consiste à simplement dessiner les extrémités des "
+#~ "voies sélectionnées.\n"
+
+#~ msgid ""
+#~ "Unconnected End-Points are indicated by Red crosses, and connected End-"
+#~ "Points are indicated by Red lines.\n"
+#~ msgstr ""
+#~ "Les points d'extrémité non connectés sont marqués par une croix rouge, "
+#~ "les points d'extrémité connectés par une ligne rouge.\n"
+
+#~ msgid "Now we will go back to using the Normal method again.\n"
+#~ msgstr ""
+#~ "Maintenant , nous allons revenir à l’utilisation de la méthode Normale.\n"
+
+#~ msgid ""
+#~ "Note: because of differing display resolutions the next mouse click may "
+#~ "not be positioned correctly in this demo and the Move-To-Join operation "
+#~ "may not be demonstrated.\n"
+#~ msgstr ""
+#~ "Remarque : en raison de différences de résolution d'affichage, il est "
+#~ "possible que le clic de souris suivant ne soit pas correctement "
+#~ "positionné dans cette démo et que l'opération \"Move-To-Join\" ne puisse "
+#~ "pas être démontrée.\n"
+
+#~ msgid "Is Cornu End -> Not Selectable"
+#~ msgstr "Fin de Cornu -> Non sélectionnable"
+
+#~ msgid "Must be on the %s Track"
+#~ msgstr "Doit être sur la voie %s"
+
+#~ msgid "Select other end of Bezier, +Shift -> snaps to %s end"
+#~ msgstr ""
+#~ "Sélectionnez l’autre extrémité de la Bézier, +Maj pour vous connecter à "
+#~ "la fin de %s"
+
+#~ msgid ""
+#~ "No Unconnected end-point on track - Try again or release shift and click"
+#~ msgstr ""
+#~ "Aucune extrémité de voie non connectée - Réessayez ou relâchez shift puis "
+#~ "cliquez"
+
+#~ msgid "Not on a Track - Try again or release shift and click"
+#~ msgstr "Pas sur une voie - Réessayez ou relâchez shift et cliquez"
+
+#~ msgid ""
+#~ "Place 1st end point of Cornu track on track with an unconnected end-point"
+#~ msgstr "Placez le premier extrémité de la voie, en voie droite"
+
+#~ msgid "Connect Sectional Tracks"
+#~ msgstr "Connectez des sections de voies"
+
+#~ msgid "Drag to move selected tracks"
+#~ msgstr "Faites glisser pour déplacer la voie sélectionnée"
+
+#~ msgid "End Angle 2"
+#~ msgstr "Fin Angle 2"
+
+#~ msgid "Elev 1"
+#~ msgstr "Elév 1"
+
+#~ msgid "End Radius Center 1: X"
+#~ msgstr "Centre du rayon de fin 1 : X"
+
+#~ msgid "Elev 2"
+#~ msgstr "Elév 2"
+
+#~ msgid "Radius 2"
+#~ msgstr "Rayon 2"
+
+#~ msgid "End Radius Center 2: X"
+#~ msgstr "Centre du rayon de fin 2 : X"
+
+#~ msgid "Angle=%0.3f"
+#~ msgstr "Angle =%0.3f"
+
+#~ msgid "Place circle center"
+#~ msgstr "Définir le centre du cercle"
+
+#~ msgid "Place circle"
+#~ msgstr "Placez le cercle"
+
+#~ msgid "Draw"
+#~ msgstr "Dessiner"
+
+#~ msgid "Show Map"
+#~ msgstr "Montrer le plan"
+
+#~ msgid "Blocks"
+#~ msgstr "Sections de voies"
+
+#~ msgid "SwitchMotor"
+#~ msgstr "Moteur d'aiguillage"
+
+#~ msgid "Switch Motors"
+#~ msgstr "Moteurs d'aiguillages"
+
+#~ msgid "Black"
+#~ msgstr "Noir"
+
+#~ msgid "Dark Blue"
+#~ msgstr "Bleu foncé"
+
+#~ msgid "Steel Blue"
+#~ msgstr "Bleu acier"
+
+#~ msgid "Royal Blue"
+#~ msgstr "Bleu royal"
+
+#~ msgid "Blue"
+#~ msgstr "Bleu"
+
+#~ msgid "Deep Sky Blue"
+#~ msgstr "Bleu ciel foncé"
+
+#~ msgid "Light Sky Blue"
+#~ msgstr "Bleu ciel"
+
+#~ msgid "Powder Blue"
+#~ msgstr "Poudre Bleue"
+
+#~ msgid "Dark Aqua"
+#~ msgstr "Bleu vert foncé"
+
+#~ msgid "Aquamarine"
+#~ msgstr "Bleu vert"
+
+#~ msgid "Aqua"
+#~ msgstr "Eau bleue"
+
+#~ msgid "Dark Green"
+#~ msgstr "Vert foncé"
+
+#~ msgid "Forest Green"
+#~ msgstr "Vert forêt"
+
+#~ msgid "Lime Green"
+#~ msgstr "Citron vert"
+
+#~ msgid "Green"
+#~ msgstr "Vert"
+
+#~ msgid "Lawn Green"
+#~ msgstr "Vert pelouse"
+
+#~ msgid "Pale Green"
+#~ msgstr "Vert pâle"
+
+#~ msgid "Dark Yellow"
+#~ msgstr "Jaune foncé"
+
+#~ msgid "Coral"
+#~ msgstr "Corail"
+
+#~ msgid "Orange"
+#~ msgstr "Orange"
+
+#~ msgid "Yellow"
+#~ msgstr "Jaune"
+
+#~ msgid "Saddle Brown"
+#~ msgstr "Cuir marron"
+
+#~ msgid "Brown"
+#~ msgstr "Marron"
+
+#~ msgid "Chocolate"
+#~ msgstr "Chocolat"
+
+#~ msgid "Rosy Brown"
+#~ msgstr "Marron rose"
+
+#~ msgid "Tan"
+#~ msgstr "Ocre"
+
+#~ msgid "Beige"
+#~ msgstr "Beige"
+
+#~ msgid "Dark Red"
+#~ msgstr "Rouge foncé"
+
+#~ msgid "Tomato"
+#~ msgstr "Tomate"
+
+#~ msgid "Red"
+#~ msgstr "Rouge"
+
+#~ msgid "Hot Pink"
+#~ msgstr "Rose vif"
+
+#~ msgid "Pink"
+#~ msgstr "Rose"
+
+#~ msgid "Dark Purple"
+#~ msgstr "Violet foncé"
+
+#~ msgid "Maroon"
+#~ msgstr "Bordeaux"
+
+#~ msgid "Purple2"
+#~ msgstr "Violet 2"
+
+#~ msgid "Purple"
+#~ msgstr "Violet"
+
+#~ msgid "Violet"
+#~ msgstr "Violette"
+
+#~ msgid "Dark Gray"
+#~ msgstr "Gris foncé"
+
+#~ msgid "Gray"
+#~ msgstr "Gris"
+
+#~ msgid "Light Gray"
+#~ msgstr "Gris clair"
+
+#~ msgid "Describe objects"
+#~ msgstr "Décrire des objets"
+
+#~ msgid "Page %d"
+#~ msgstr "Page %d"
+
+#~ msgid "Print to file ..."
+#~ msgstr "Imprimer dans un fichier ..."
+
+#~ msgid "No file name specified"
+#~ msgstr "Aucun nom de fichier spécifié"
+
+#~ msgid "%s exists"
+#~ msgstr "%s existe déjà"
+
+#~ msgid "Overwrite"
+#~ msgstr "Remplacer"
+
+#~ msgid ": cannot open"
+#~ msgstr ": ne peut pas être ouvert"
+
+#~ msgid "Page 1"
+#~ msgstr "Page 1"
+
+#~ msgid "Enter both printer name and command"
+#~ msgstr "Entrez le nom de l'imprimante et la commande"
+
+#~ msgid "Can not save New Printer definition"
+#~ msgstr "La nouvelle définition d'imprimante ne peut pas être enregistrée"
+
+#~ msgid "Enter printer name"
+#~ msgstr "Entrez le nom de l'imprimante"
+
+#~ msgid "Can not save New Margin definition"
+#~ msgstr "Impossible de sauvegarder la définition de la nouvelle marge"
+
+#~ msgid "Paper Size"
+#~ msgstr "Taille du papier"
+
+#~ msgid "Printer"
+#~ msgstr "Imprimante"
+
+#~ msgid "Format"
+#~ msgstr "Format"
+
+#~ msgid "X Font"
+#~ msgstr "Police X"
+
+#~ msgid "PS Font"
+#~ msgstr "Police PS"
+
+#~ msgid "Factor"
+#~ msgstr "Facteur"
+
+#~ msgid "Print Test Page"
+#~ msgstr "Impression de la page de Test"
+
+#~ msgid "Name: "
+#~ msgstr "Nom : "
+
+#~ msgid "Command: "
+#~ msgstr "Commande : "
+
+#~ msgid "Add Margin"
+#~ msgstr "Ajouter une marge"
+
+#~ msgid "Print To File"
+#~ msgstr "Imprimer dans un fichier"
+
+#~ msgid "File Name? "
+#~ msgstr "Nom du fichier ? "
+
+#~ msgid "Font Alias"
+#~ msgstr "Alias pour la police"
+
+#~ msgid "Enter a post-script font name for:"
+#~ msgstr "Entrez la police PostScript pour :"
+
+#~ msgid "Printing"
+#~ msgstr "Impression"
+
+#~ msgid "Now printing"
+#~ msgstr "L'impression est en cours"
+
+#~ msgid "Abort Print"
+#~ msgstr "Annuler l'impression"
+
+#~ msgid ""
+#~ " exists\n"
+#~ "Do you want to overwrite it?"
+#~ msgstr ""
+#~ " existe\n"
+#~ "Voulez-vous l'écraser ?"
+
+#~ msgid "Delete Switch motor"
+#~ msgstr "Supprimer le moteur d'aiguillage"
+
+#~ msgid "Not a SwitchMotor!"
+#~ msgstr "Pas de Moteur d'aiguillage !"
+
+#~ msgid "Custom Update"
+#~ msgstr "Ajouter des personnalisations"
+
+#~ msgid "No fonts"
+#~ msgstr "Pas de polices"
+
+#~ msgid ""
+#~ "Can't find standard Serif font.\n"
+#~ "Please choose a font"
+#~ msgstr ""
+#~ "La police par défaut Serif est introuvable.\n"
+#~ "Veuillez sélectionner une police"
+
+#~ msgid ""
+#~ "Can't find standard San-Serif font.\n"
+#~ "Please choose a font"
+#~ msgstr ""
+#~ "La police par défaut sans-serif est introuvable.\n"
+#~ "Veuillez sélectionner une police"
+
+#~ msgid "XTrackCAD Help"
+#~ msgstr "Aide XTrackCAD"
+
+#~ msgid "Now printing %s"
+#~ msgstr "Imprime %s"
+
+#~ msgid "Creating %s"
+#~ msgstr "Création %s"
+
+#~ msgid "Scale / Gauge"
+#~ msgstr "Échelle / écartement"
+
+#~ msgid "load last layout"
+#~ msgstr "charger le dernier plan"
+
+#~ msgid "start with blank layout"
+#~ msgstr "commencez avec un plan vide"
diff --git a/app/i18n/pt_BR.po b/app/i18n/pt_BR.po
index 13f4bac..409d270 100644
--- a/app/i18n/pt_BR.po
+++ b/app/i18n/pt_BR.po
@@ -1,11819 +1,14572 @@
-# Portuguese translations for xtrkcad package.
-# Copyright (C) 2009 Daniel Spagnol
-# This file is distributed under the same license as the xtrkcad package.
-# Daniel Spagnol <dspagnol@yahoo.com>, 2009.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: xtrkcad 4.1.3a\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-11-05 13:40+0100\n"
-"PO-Revision-Date: 2009-10-06 22:22-0500\n"
-"Last-Translator: Daniel Spagnol <dspagnol@yahoo.com>\n"
-"Language-Team: Brazilian Portuguese\n"
-"Language: pt-BR\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#: ../bin/cbezier.c:586
-#, fuzzy
-msgid "Select End-Point - Ctrl unlocks end-point"
-msgstr "Selecionar primeira extremidade a conectar"
-
-#: ../bin/cbezier.c:588 ../bin/ccornu.c:462 ../bin/celev.c:418
-msgid "Select End-Point"
-msgstr "Selecionar extremidade"
-
-#: ../bin/cbezier.c:609
-msgid "Not close enough to any valid, selectable point, reselect"
-msgstr ""
-
-#: ../bin/cbezier.c:615 ../bin/ccornu.c:485
-#, c-format
-msgid "Drag point %d to new location and release it"
-msgstr ""
-
-#: ../bin/cbezier.c:625 ../bin/cbezier.c:716 ../bin/cbezier.c:718
-msgid "Pick any circle to adjust it - Enter to confirm, ESC to abort"
-msgstr ""
-
-#: ../bin/cbezier.c:648 ../bin/cbezier.c:706
-msgid "Bezier Curve Invalid has identical end points Change End Point"
-msgstr ""
-
-#: ../bin/cbezier.c:651 ../bin/cbezier.c:709
-#, c-format
-msgid "Bezier Curve Invalid has %s Change End Point"
-msgstr ""
-
-#: ../bin/cbezier.c:654 ../bin/cbezier.c:712
-msgid "Bezier Curve Invalid has three co-incident points"
-msgstr ""
-
-#: ../bin/cbezier.c:656
-#, fuzzy
-msgid "Bezier is Straight Line"
-msgstr "Linha reta"
-
-#: ../bin/cbezier.c:658
-#, c-format
-msgid "Bezier %s : Min Radius=%s Length=%s fx=%0.3f fy=%0.3f cusp=%0.3f"
-msgstr ""
-
-#: ../bin/cbezier.c:662
-#, fuzzy, c-format
-msgid "Bezier %s : Min Radius=%s Length=%s"
-msgstr "Trecho curvo: Raio=%s Comprimento=%s"
-
-#: ../bin/cbezier.c:688
-#, fuzzy
-msgid "No unconnected End Point to lock to"
-msgstr "Selecionar segunda extremidade a conectar"
-
-#: ../bin/cbezier.c:714
-#, fuzzy
-msgid "Bezier Curve is Straight Line"
-msgstr "Cria uma linha reta"
-
-#: ../bin/cbezier.c:729 ../bin/cbezier.c:743
-msgid "Invalid Bezier Track - end points are identical"
-msgstr ""
-
-#: ../bin/cbezier.c:736
-#, c-format
-msgid "Invalid Bezier Curve has a %s - Adjust"
-msgstr ""
-
-#: ../bin/cbezier.c:740
-msgid "Invalid Bezier Curve has three coincident points - Adjust"
-msgstr ""
-
-#: ../bin/cbezier.c:749
-#, fuzzy
-msgid "Create Bezier"
-msgstr "Criar linhas"
-
-#: ../bin/cbezier.c:826
-#, fuzzy, c-format
-msgid "%s picked - now select a Point"
-msgstr "Clicar em uma extremidade não selecionada"
-
-#: ../bin/cbezier.c:852 ../bin/ccornu.c:802
-msgid "No changes made"
-msgstr ""
-
-#: ../bin/cbezier.c:856
-#, fuzzy
-msgid "Modify Bezier"
-msgstr "Modificar trecho"
-
-#: ../bin/cbezier.c:870
-msgid "Modify Bezier Complete - select another"
-msgstr ""
-
-#: ../bin/cbezier.c:875
-msgid "Modify Bezier Cancelled"
-msgstr ""
-
-#: ../bin/cbezier.c:964 ../bin/cbezier.c:1034
-#, fuzzy, c-format
-msgid "Place 1st end point of Bezier + Shift -> snap to %s end"
-msgstr "Posicionar 1ª extremidade do trecho reto"
-
-#: ../bin/cbezier.c:987
-msgid "Shift used, but no Unconnected Track End there"
-msgstr ""
-
-#: ../bin/cbezier.c:1000
-msgid "Shift used, but no Line End there"
-msgstr ""
-
-#: ../bin/cbezier.c:1011
-msgid "Drag end of first Control Arm"
-msgstr ""
-
-#: ../bin/cbezier.c:1019
-msgid "Drag end of second Control Arm"
-msgstr ""
-
-#: ../bin/cbezier.c:1038
-#, c-format
-msgid "Select other end of Bezier, +Shift -> snap to %s end"
-msgstr ""
-
-#: ../bin/cbezier.c:1073
-msgid "Control Arm 1 is too short, try again"
-msgstr ""
-
-#: ../bin/cbezier.c:1078
-#, c-format
-msgid "Select other end of Bezier, +Shift -> snaps to %s end"
-msgstr ""
-
-#: ../bin/cblock.c:105 ../bin/cblock.c:117 ../bin/cblock.c:160
-#: ../bin/ccontrol.c:167 ../bin/ccontrol.c:384 ../bin/compound.c:525
-#: ../bin/csensor.c:159 ../bin/csensor.c:356 ../bin/csignal.c:234
-#: ../bin/csignal.c:473 ../bin/csignal.c:484 ../bin/csignal.c:510
-#: ../bin/cswitchmotor.c:86 ../bin/cswitchmotor.c:105
-#: ../bin/cswitchmotor.c:216 ../bin/dcontmgm.c:91 ../bin/dlayer.c:445
-msgid "Name"
-msgstr "Nome"
-
-#: ../bin/cblock.c:106 ../bin/cblock.c:118 ../bin/cblock.c:161
-#: ../bin/csensor.c:161 ../bin/csensor.c:362 ../bin/csignal.c:473
-#: ../bin/csignal.c:512
-msgid "Script"
-msgstr "Script"
-
-#: ../bin/cblock.c:119
-#, fuzzy
-msgid "Segments"
-msgstr "No. de segmentos"
-
-#: ../bin/cblock.c:162 ../bin/cdraw.c:219 ../bin/ctodesgn.c:137
-#: ../bin/ctodesgn.c:138 ../bin/ctodesgn.c:139 ../bin/ctodesgn.c:188
-#: ../bin/ctodesgn.c:191 ../bin/ctodesgn.c:211 ../bin/ctodesgn.c:216
-#: ../bin/ctodesgn.c:249 ../bin/ctodesgn.c:254 ../bin/ctodesgn.c:286
-#: ../bin/ctodesgn.c:289 ../bin/ctodesgn.c:292 ../bin/ctodesgn.c:327
-#: ../bin/ctodesgn.c:329 ../bin/ctodesgn.c:347 ../bin/ctodesgn.c:349
-#: ../bin/ctodesgn.c:368 ../bin/ctodesgn.c:370 ../bin/ctodesgn.c:389
-#: ../bin/ctodesgn.c:409 ../bin/ctodesgn.c:429 ../bin/ctodesgn.c:449
-#: ../bin/ctodesgn.c:487 ../bin/ctodesgn.c:506 ../bin/ctodesgn.c:507
-#: ../bin/ctrain.c:184 ../bin/tbezier.c:240 ../bin/tcornu.c:290
-#: ../bin/tcurve.c:356 ../bin/tstraigh.c:89
-msgid "Length"
-msgstr "Comprimento"
-
-#: ../bin/cblock.c:163 ../bin/cdraw.c:215 ../bin/compound.c:517
-#: ../bin/tbezier.c:231 ../bin/tcornu.c:277 ../bin/tcurve.c:348
-#: ../bin/tease.c:503 ../bin/tstraigh.c:85
-msgid "End Pt 1: X"
-msgstr "Extremidade 1: X"
-
-#: ../bin/cblock.c:164 ../bin/cdraw.c:216 ../bin/compound.c:519
-#: ../bin/tbezier.c:236 ../bin/tcornu.c:282 ../bin/tcurve.c:350
-#: ../bin/tease.c:505 ../bin/tstraigh.c:87
-msgid "End Pt 2: X"
-msgstr "Extremidade 2: X"
-
-#: ../bin/cblock.c:189
-#, fuzzy
-msgid "Change block"
-msgstr "Mudar Bloco"
-
-#: ../bin/cblock.c:240 ../bin/compound.c:694 ../bin/cswitchmotor.c:299
-#, c-format
-msgid "(%d): Layer=%d %s"
-msgstr "(%d): Camada=%d %s"
-
-#: ../bin/cblock.c:261 ../bin/cblock.c:910
-msgid "Block"
-msgstr "Bloco"
-
-#: ../bin/cblock.c:425
-#, c-format
-msgid "resolveBlockTrack: T%d[%d]: T%d doesn't exist"
-msgstr ""
-
-#: ../bin/cblock.c:425 ../bin/cswitchmotor.c:395 ../bin/dbench.c:147
-#: ../bin/dcar.c:4234 ../bin/dcar.c:4418 ../bin/dcar.c:4428 ../bin/dcar.c:4476
-#: ../bin/dcar.c:4483 ../bin/dcar.c:4501 ../bin/dcar.c:4514 ../bin/dcar.c:4519
-#: ../bin/dcar.c:4548 ../bin/dcar.c:4710 ../bin/dxfoutput.c:189
-#: ../bin/fileio.c:236 ../bin/fileio.c:541 ../bin/fileio.c:656
-#: ../bin/fileio.c:753 ../bin/fileio.c:944 ../bin/fileio.c:1212
-#: ../bin/fileio.c:1262 ../bin/fileio.c:1308 ../bin/macro.c:174
-#: ../bin/macro.c:838 ../bin/macro.c:854 ../bin/macro.c:1157
-#: ../bin/param.c:1947 ../bin/track.c:986 ../bin/track.c:1360
-#: ../bin/track.c:1651 ../bin/track.c:1655 ../bin/track.c:1675
-#: ../bin/track.c:1737 ../wlib/gtklib/wpref.c:248 ../wlib/gtklib/wpref.c:255
-msgid "Continue"
-msgstr "Continuar"
-
-#: ../bin/cblock.c:502 ../bin/cblock.c:718
-msgid "Block must have a name!"
-msgstr ""
-
-#: ../bin/cblock.c:502 ../bin/cblock.c:522 ../bin/cblock.c:530
-#: ../bin/cblock.c:589 ../bin/cblock.c:706 ../bin/cblock.c:718
-#: ../bin/cblock.c:755 ../bin/ccontrol.c:445 ../bin/cdraw.c:103
-#: ../bin/cdraw.c:909 ../bin/cgroup.c:982 ../bin/cgroup.c:1035
-#: ../bin/cgroup.c:1050 ../bin/cgroup.c:1089 ../bin/cgroup.c:1115
-#: ../bin/cgroup.c:1174 ../bin/cgroup.c:1618 ../bin/cnote.c:100
-#: ../bin/cprint.c:490 ../bin/cprint.c:916 ../bin/cpull.c:497
-#: ../bin/cpull.c:512 ../bin/cpull.c:514 ../bin/cpull.c:516
-#: ../bin/cselect.c:677 ../bin/cselect.c:774 ../bin/cselect.c:1299
-#: ../bin/csensor.c:411 ../bin/csignal.c:641 ../bin/csignal.c:709
-#: ../bin/csnap.c:584 ../bin/csnap.c:717 ../bin/cstruct.c:769
-#: ../bin/cstruct.c:778 ../bin/cstruct.c:880 ../bin/cswitchmotor.c:462
-#: ../bin/cswitchmotor.c:491 ../bin/cswitchmotor.c:625
-#: ../bin/cswitchmotor.c:656 ../bin/ctext.c:179 ../bin/ctodesgn.c:158
-#: ../bin/ctodesgn.c:1048 ../bin/ctodesgn.c:1098 ../bin/ctodesgn.c:1211
-#: ../bin/ctodesgn.c:1513 ../bin/cturnout.c:2410 ../bin/cturnout.c:2537
-#: ../bin/cundo.c:161 ../bin/cundo.c:166 ../bin/dbitmap.c:68
-#: ../bin/dbitmap.c:125 ../bin/dbitmap.c:203 ../bin/dbitmap.c:238
-#: ../bin/dcar.c:3536 ../bin/dcar.c:3720 ../bin/dcar.c:3724 ../bin/dcar.c:3728
-#: ../bin/dcar.c:3733 ../bin/dcar.c:4047 ../bin/dcar.c:4158 ../bin/dcar.c:4538
-#: ../bin/dcmpnd.c:393 ../bin/dcmpnd.c:404 ../bin/dcmpnd.c:536
-#: ../bin/dcustmgm.c:194 ../bin/dcustmgm.c:200 ../bin/dcustmgm.c:209
-#: ../bin/dcustmgm.c:225 ../bin/dease.c:230 ../bin/dlayer.c:206
-#: ../bin/dlayer.c:228 ../bin/dlayer.c:798 ../bin/dlayer.c:804
-#: ../bin/doption.c:164 ../bin/doption.c:244 ../bin/doption.c:398
-#: ../bin/doption.c:410 ../bin/doption.c:476 ../bin/dprmfile.c:91
-#: ../bin/dprmfile.c:105 ../bin/dprmfile.c:119 ../bin/dprmfile.c:165
-#: ../bin/dprmfile.c:533 ../bin/draw.c:2278 ../bin/fileio.c:610
-#: ../bin/fileio.c:678 ../bin/fileio.c:793 ../bin/fileio.c:795
-#: ../bin/fileio.c:800 ../bin/fileio.c:964 ../bin/layout.c:312
-#: ../bin/macro.c:939 ../bin/macro.c:943 ../bin/macro.c:1020
-#: ../bin/macro.c:1126 ../bin/macro.c:1354 ../bin/macro.c:1370
-#: ../bin/misc.c:312 ../bin/misc.c:362 ../bin/misc.c:1634 ../bin/misc.c:1764
-#: ../bin/misc.c:1828 ../bin/misc.c:2404 ../bin/misc.c:2414 ../bin/misc.c:2434
-#: ../bin/misc.c:2437 ../bin/misc2.c:457 ../bin/param.c:1710
-#: ../bin/param.c:1828 ../bin/param.c:1831 ../bin/param.c:1954
-#: ../bin/param.c:1960 ../bin/smalldlg.c:89 ../bin/smalldlg.c:220
-#: ../bin/tease.c:1044 ../bin/track.c:1374 ../wlib/gtklib/wpref.c:122
-#: ../../../../build/work/app/bin/bllnhlp.c:541
-msgid "Ok"
-msgstr "Ok"
-
-#: ../bin/cblock.c:530
-msgid "Block is discontigious!"
-msgstr "Bloco não contínuo!"
-
-#: ../bin/cblock.c:535
-#, fuzzy
-msgid "Create block"
-msgstr "Criar Bloco"
-
-#: ../bin/cblock.c:571
-msgid "Non track object skipped!"
-msgstr "Objeto não trilho Ignorado!"
-
-#: ../bin/cblock.c:575
-#, fuzzy
-msgid "Selected track is already in a block, skipped!"
-msgstr "Trilho selecionado já está pertence a um bloco, descartado!"
-
-#: ../bin/cblock.c:589
-msgid "Create Block"
-msgstr "Criar Bloco"
-
-#: ../bin/cblock.c:619 ../bin/cblock.c:651
-msgid "Select a track"
-msgstr "Selecionar um trilho"
-
-#: ../bin/cblock.c:628 ../bin/cblock.c:659
-msgid "Not a block!"
-msgstr "Isto não é um bloco!"
-
-#: ../bin/cblock.c:664
-#, c-format
-msgid "Really delete block %s?"
-msgstr "Deseja realmente eliminar bloco %s?"
-
-#: ../bin/cblock.c:664 ../bin/cdraw.c:107 ../bin/cgroup.c:988
-#: ../bin/csignal.c:687 ../bin/cswitchmotor.c:581 ../bin/ctodesgn.c:1521
-#: ../bin/ctodesgn.c:2000 ../bin/ctrain.c:2425 ../bin/dbitmap.c:208
-#: ../bin/dcar.c:3672 ../bin/dcar.c:3750 ../bin/dcar.c:3834 ../bin/dcar.c:3853
-#: ../bin/dcar.c:4183 ../bin/dcar.c:4600 ../bin/dcontmgm.c:173
-#: ../bin/dcustmgm.c:141 ../bin/misc.c:1043 ../bin/misc.c:1048
-#: ../bin/misc.c:1113 ../bin/track.c:1376 ../bin/track.c:1473
-#: ../bin/track.c:1487
-msgid "Yes"
-msgstr "Sim"
-
-#: ../bin/cblock.c:664 ../bin/cdraw.c:107 ../bin/cgroup.c:988
-#: ../bin/csignal.c:687 ../bin/cswitchmotor.c:581 ../bin/ctodesgn.c:1521
-#: ../bin/ctodesgn.c:2000 ../bin/ctrain.c:2425 ../bin/dcar.c:3672
-#: ../bin/dcar.c:3750 ../bin/dcar.c:3834 ../bin/dcar.c:3853 ../bin/dcar.c:4183
-#: ../bin/dcar.c:4600 ../bin/dcontmgm.c:173 ../bin/dcustmgm.c:141
-#: ../bin/misc.c:1043 ../bin/misc.c:1048 ../bin/misc.c:1113
-#: ../bin/track.c:1376 ../bin/track.c:1473 ../bin/track.c:1487
-msgid "No"
-msgstr "Não"
-
-#: ../bin/cblock.c:665
-msgid "Delete Block"
-msgstr "Eliminar bloco"
-
-#: ../bin/cblock.c:706
-#, fuzzy, c-format
-msgid "Deleting block %s"
-msgstr "Eliminar bloco"
-
-#: ../bin/cblock.c:722
-#, fuzzy
-msgid "Modify Block"
-msgstr "Modificar trecho"
-
-#: ../bin/cblock.c:754
-#, fuzzy
-msgid "Edit block"
-msgstr "Editar bloco"
-
-#: ../bin/cblock.c:760
-#, fuzzy, c-format
-msgid "Edit block %d"
-msgstr "Editar bloco"
-
-#: ../bin/ccontrol.c:168 ../bin/cnote.c:162 ../bin/csensor.c:160
-#: ../bin/csignal.c:235 ../bin/ctrain.c:182
-msgid "Position"
-msgstr "Posição"
-
-#: ../bin/ccontrol.c:169 ../bin/ccontrol.c:390
-#, fuzzy
-msgid "On Script"
-msgstr "Script"
-
-#: ../bin/ccontrol.c:170 ../bin/ccontrol.c:392
-#, fuzzy
-msgid "Off Script"
-msgstr "Script"
-
-#: ../bin/ccontrol.c:213
-#, fuzzy
-msgid "Change Control"
-msgstr "Controle de trem"
-
-#: ../bin/ccontrol.c:255 ../bin/csensor.c:233
-#, fuzzy, c-format
-msgid "(%d [%s]): Layer=%d, at %0.3f,%0.3f"
-msgstr "(%d): Camada=%d %s"
-
-#: ../bin/ccontrol.c:268 ../bin/ccontrol.c:594
-#, fuzzy
-msgid "Control"
-msgstr "Controle de trem"
-
-#: ../bin/ccontrol.c:386 ../bin/csensor.c:358 ../bin/csignal.c:486
-#, fuzzy
-msgid "Orgin X"
-msgstr "Margem"
-
-#: ../bin/ccontrol.c:388 ../bin/csensor.c:360 ../bin/csignal.c:488
-#, fuzzy
-msgid "Origin Y"
-msgstr "Origem: X"
-
-#: ../bin/ccontrol.c:404
-#, fuzzy
-msgid "Create Control"
-msgstr "Controle de trem"
-
-#: ../bin/ccontrol.c:407
-#, fuzzy
-msgid "Modify Control"
-msgstr "Controle de trem"
-
-#: ../bin/ccontrol.c:444
-#, fuzzy
-msgid "Edit control"
-msgstr "Controle de trem"
-
-#: ../bin/ccontrol.c:484
-#, fuzzy
-msgid "Place control"
-msgstr "Posicionar a circunferência"
-
-#: ../bin/ccornu.c:480
-msgid "Not close enough to end point, reselect"
-msgstr ""
-
-#: ../bin/ccornu.c:498
-msgid ""
-"Pick any circle to adjust it by dragging - Enter to accept, Esc to cancel"
-msgstr ""
-
-#: ../bin/ccornu.c:509
-msgid "Track can't be split"
-msgstr ""
-
-#: ../bin/ccornu.c:522
-#, fuzzy
-msgid "Too close to other end of selected Track"
-msgstr "Eleva ou abaixa todos os trechos selecionados"
-
-#: ../bin/ccornu.c:629
-#, c-format
-msgid "Must be on the %s Track"
-msgstr ""
-
-#: ../bin/ccornu.c:643
-#, c-format
-msgid ""
-"Cornu : Min Radius=%s Max Rate of Radius Change=%s Length=%s Winding Arc=%s"
-msgstr ""
-
-#: ../bin/ccornu.c:661
-msgid "Pick on point to adjust it along track - Enter to confirm, ESC to abort"
-msgstr ""
-
-#: ../bin/ccornu.c:671
-msgid "Cornu has too complex shape - adjust end pts"
-msgstr ""
-
-#: ../bin/ccornu.c:675
-#, fuzzy
-msgid "Create Cornu"
-msgstr "Criar Bloco"
-
-#: ../bin/ccornu.c:679 ../bin/ccornu.c:831 ../bin/tcornu.c:722
-#: ../bin/tcornu.c:919 ../bin/tcornu.c:1174
-#, c-format
-msgid ""
-"Cornu Create Failed for p1[%0.3f,%0.3f] p2[%0.3f,%0.3f], c1[%0.3f,%0.3f] c2"
-"[%0.3f,%0.3f], a1=%0.3f a2=%0.3f, r1=%s r2=%s"
-msgstr ""
-
-#: ../bin/ccornu.c:776
-msgid "Track picked - now select a Point"
-msgstr ""
-
-#: ../bin/ccornu.c:806
-#, fuzzy
-msgid "Modify Cornu"
-msgstr "Modificar trecho"
-
-#: ../bin/ccornu.c:822
-#, c-format
-msgid "Cornu Extension Create Failed for end %d"
-msgstr ""
-
-#: ../bin/ccornu.c:866
-msgid "Modify Cornu Cancelled"
-msgstr ""
-
-#: ../bin/ccornu.c:984
-#, fuzzy
-msgid "Place 1st end point of Cornu track on unconnected end-point"
-msgstr "Posicionar 1ª extremidade do trecho reto"
-
-#: ../bin/ccornu.c:997
-msgid "No Unconnected end point there"
-msgstr ""
-
-#: ../bin/ccornu.c:1005
-msgid "Place 2nd end point of Cornu track on unconnected end-point"
-msgstr ""
-
-#: ../bin/ccornu.c:1008
-msgid "No Unconnected Track End there"
-msgstr ""
-
-#: ../bin/ccornu.c:1020
-#, fuzzy
-msgid "Move 1st end point of Cornu track along track 1"
-msgstr "Posicionar 1ª extremidade do trecho reto"
-
-#: ../bin/ccornu.c:1038
-#, fuzzy
-msgid "Move 2nd end point of Cornu track along track 2"
-msgstr "Posicionar 1ª extremidade do trecho reto"
-
-#: ../bin/ccornu.c:1056
-msgid "Can't Split - Locked to End Point"
-msgstr ""
-
-#: ../bin/ccornu.c:1061
-#, fuzzy
-msgid "Point not on track 1"
-msgstr "Junta dois trilhos"
-
-#: ../bin/ccornu.c:1085
-msgid "Put other end of Cornu on an unconnected end point"
-msgstr ""
-
-#: ../bin/ccurve.c:118
-#, fuzzy
-msgid ""
-"Drag from End-Point in direction of curve - Shift locks to track open end-"
-"point"
-msgstr "Arrastar a extremidade em direção de curva"
-
-#: ../bin/ccurve.c:120
-msgid "Drag from End-Point in direction of curve"
-msgstr "Arrastar a extremidade em direção de curva"
-
-#: ../bin/ccurve.c:124
-#, fuzzy
-msgid "Drag from End-Point to Center - Shift locks to track open end-point"
-msgstr "Arrastar a extremidade ao centro"
-
-#: ../bin/ccurve.c:126 ../bin/ccurve.c:187
-msgid "Drag from End-Point to Center"
-msgstr "Arrastar a extremidade ao centro"
-
-#: ../bin/ccurve.c:129 ../bin/ccurve.c:187
-msgid "Drag from Center to End-Point"
-msgstr "Arrastar do centro à extremidade"
-
-#: ../bin/ccurve.c:132
-#, fuzzy
-msgid "Drag from one to other end of chord"
-msgstr "Arrastar à outra extremidade da corda"
-
-#: ../bin/ccurve.c:155
-msgid ""
-"No unconnected end-point on Track - Try again or release Shift and click"
-msgstr ""
-
-#: ../bin/ccurve.c:160
-msgid "Not on a Track - Try again or release Shift and click"
-msgstr ""
-
-#: ../bin/ccurve.c:174
-msgid "End Locked: Drag out curve start"
-msgstr ""
-
-#: ../bin/ccurve.c:175
-#, fuzzy
-msgid "Drag along curve start"
-msgstr "Arrastar para criar ramo"
-
-#: ../bin/ccurve.c:185
-msgid "End Locked: Drag out to center"
-msgstr ""
-
-#: ../bin/ccurve.c:193
-msgid "Drag to other end of chord"
-msgstr "Arrastar à outra extremidade da corda"
-
-#: ../bin/ccurve.c:221
-#, c-format
-msgid "Start Locked: Drag out curve start - Angle=%0.3f"
-msgstr ""
-
-#: ../bin/ccurve.c:222
-#, c-format
-msgid "Drag out curve start - Angle=%0.3f"
-msgstr ""
-
-#: ../bin/ccurve.c:226
-#, fuzzy, c-format
-msgid "Tangent Locked: Drag out center - Radius=%s Angle=%0.3f"
-msgstr "Trecho tangente: Comprimento %s Ângulo %0.3f"
-
-#: ../bin/ccurve.c:227
-#, fuzzy, c-format
-msgid "Drag out center - Radius=%s Angle=%0.3f"
-msgstr "Raio=%s Ângulo=%0.3f"
-
-#: ../bin/ccurve.c:233
-#, c-format
-msgid "Radius=%s Angle=%0.3f"
-msgstr "Raio=%s Ângulo=%0.3f"
-
-#: ../bin/ccurve.c:239
-#, c-format
-msgid "Length=%s Angle=%0.3f"
-msgstr "Comprimento=%s Ângulo=%0.3f"
-
-#: ../bin/ccurve.c:289 ../bin/ccurve.c:397 ../bin/drawgeom.c:440
-msgid "Drag on Red arrows to adjust curve"
-msgstr "Arrastar as setas vermelhas para ajustar a curva"
-
-#: ../bin/ccurve.c:352 ../bin/cjoin.c:216 ../bin/cmodify.c:365
-#: ../bin/cturntbl.c:569
-#, c-format
-msgid "Straight Track: Length=%s Angle=%0.3f"
-msgstr "Trecho reto: Comprimento=%s Ângulo=%0.3f"
-
-#: ../bin/ccurve.c:357 ../bin/cmodify.c:370 ../bin/drawgeom.c:324
-#: ../wlib/gtklib/ixhelp.c:235
-msgid "Back"
-msgstr "Voltar"
-
-#: ../bin/ccurve.c:375
-#, c-format
-msgid "Curved Track: Radius=%s Angle=%0.3f Length=%s"
-msgstr "Trecho curvo: Raio=%s Ângulo=%0.3f Comprimento=%s"
-
-#: ../bin/ccurve.c:408 ../bin/cstraigh.c:133
-msgid "Create Straight Track"
-msgstr "Criar trecho reto"
-
-#: ../bin/ccurve.c:420
-msgid "Create Curved Track"
-msgstr "Criar trecho curvo"
-
-#: ../bin/ccurve.c:491
-msgid "Elevation Difference"
-msgstr "Diferença de elevação"
-
-#: ../bin/ccurve.c:492 ../bin/cdraw.c:218 ../bin/ctodesgn.c:467
-#: ../bin/tcurve.c:353
-msgid "Radius"
-msgstr "Raio"
-
-#: ../bin/ccurve.c:493 ../bin/tcurve.c:354
-msgid "Turns"
-msgstr "Desvios"
-
-#: ../bin/ccurve.c:494
-msgid "Angular Separation"
-msgstr "Separação angular"
-
-#: ../bin/ccurve.c:495 ../bin/celev.c:45 ../bin/compound.c:521
-#: ../bin/tbezier.c:241 ../bin/tcornu.c:291 ../bin/tcurve.c:360
-#: ../bin/tease.c:513 ../bin/tstraigh.c:91
-msgid "Grade"
-msgstr "Gradiente"
-
-#: ../bin/ccurve.c:496
-msgid "Vertical Separation"
-msgstr "Separação vertical"
-
-#: ../bin/ccurve.c:498
-msgid "Total Length"
-msgstr "Comprimento total"
-
-#: ../bin/ccurve.c:574
-#, c-format
-msgid "Total Length %s"
-msgstr "Comprimento total %s"
-
-#: ../bin/ccurve.c:613 ../bin/ccurve.c:802 ../bin/tcurve.c:783
-msgid "Helix"
-msgstr "Hélice"
-
-#: ../bin/ccurve.c:627
-msgid "Circle Radius"
-msgstr "Raio da circunferência"
-
-#: ../bin/ccurve.c:632
-msgid "Click on Circle Edge"
-msgstr "Clicar no limite da circunferência"
-
-#: ../bin/ccurve.c:636
-msgid "Click on Circle Center"
-msgstr "Clicar no centro da circunferência"
-
-#: ../bin/ccurve.c:667
-msgid "Drag to Center"
-msgstr "Arrastar ao centro"
-
-#: ../bin/ccurve.c:671
-msgid "Drag to Edge"
-msgstr "Arrastar à borda"
-
-#: ../bin/ccurve.c:692 ../bin/ccurve.c:696
-#, c-format
-msgid "Radius=%s"
-msgstr "Raio=%s"
-
-#: ../bin/ccurve.c:711
-msgid "Create Helix Track"
-msgstr "Criar trecho em hélice"
-
-#: ../bin/ccurve.c:718
-msgid "Create Circle Track"
-msgstr "Criar trecho de circunferência"
-
-#: ../bin/ccurve.c:773
-msgid "Curve Track"
-msgstr "Trecho curvo"
-
-#: ../bin/ccurve.c:773
-msgid "Curve Tracks"
-msgstr "Trechos curvos"
-
-#: ../bin/ccurve.c:774
-msgid "Curve from End-Pt"
-msgstr "Curva a partir de extremidade"
-
-#: ../bin/ccurve.c:775
-msgid "Curve from Tangent"
-msgstr "Curva a partir de uma tangente"
-
-#: ../bin/ccurve.c:776
-msgid "Curve from Center"
-msgstr "Curva a partir de um centro"
-
-#: ../bin/ccurve.c:777
-msgid "Curve from Chord"
-msgstr "Curva a partir de uma corda"
-
-#: ../bin/ccurve.c:778 ../bin/cdraw.c:1091
-#, fuzzy
-msgid "Bezier Curve"
-msgstr "Fundir curvas"
-
-#: ../bin/ccurve.c:781 ../bin/tcurve.c:623
-msgid "Circle Track"
-msgstr "Trecho de circunferência"
-
-#: ../bin/ccurve.c:781
-msgid "Circle Tracks"
-msgstr "Trechos de circunferências"
-
-#: ../bin/ccurve.c:782
-msgid "Fixed Radius Circle"
-msgstr "Circunferência com raio fixo"
-
-#: ../bin/ccurve.c:783
-msgid "Circle from Tangent"
-msgstr "Circunferência a partir de uma tangente"
-
-#: ../bin/ccurve.c:784
-msgid "Circle from Center"
-msgstr "Circunferência a partir de um centro"
-
-#: ../bin/cdraw.c:103
-msgid "Font Size must be > 0"
-msgstr "Tamanho da fonte deve ser maior que 0"
-
-#: ../bin/cdraw.c:217 ../bin/tcurve.c:352
-msgid "Center: X"
-msgstr "Centro: X"
-
-#: ../bin/cdraw.c:220 ../bin/cdraw.c:230 ../bin/compound.c:523
-#: ../bin/cprint.c:143 ../bin/csignal.c:236 ../bin/csignal.c:490
-#: ../bin/ctodesgn.c:144 ../bin/ctodesgn.c:146 ../bin/ctodesgn.c:189
-#: ../bin/ctodesgn.c:212 ../bin/ctodesgn.c:214 ../bin/ctodesgn.c:250
-#: ../bin/ctodesgn.c:253 ../bin/ctodesgn.c:287 ../bin/ctodesgn.c:291
-#: ../bin/ctodesgn.c:328 ../bin/ctodesgn.c:348 ../bin/ctodesgn.c:369
-#: ../bin/ctodesgn.c:468 ../bin/ctrain.c:183 ../bin/tease.c:508
-#: ../bin/tstraigh.c:90
-msgid "Angle"
-msgstr "Ângulo"
-
-#: ../bin/cdraw.c:221 ../bin/tcurve.c:358
-msgid "CCW Angle"
-msgstr "Ângulo anti-horário"
-
-#: ../bin/cdraw.c:222 ../bin/tcurve.c:359
-msgid "CW Angle"
-msgstr "Ângulo horário"
-
-#: ../bin/cdraw.c:223
-msgid "Point Count"
-msgstr "Ponto de contagem"
-
-#: ../bin/cdraw.c:224 ../bin/cdraw.c:847 ../bin/ctodesgn.c:156
-#: ../bin/tbezier.c:243
-msgid "Line Width"
-msgstr "Largura da linha"
-
-#: ../bin/cdraw.c:225 ../bin/cdraw.c:849 ../bin/cdraw.c:851 ../bin/cdraw.c:930
-#: ../bin/cdraw.c:955 ../bin/cmisc.c:97 ../bin/ctext.c:62 ../bin/ctext.c:146
-#: ../bin/ctodesgn.c:157 ../bin/dcar.c:1976 ../bin/dlayer.c:447
-#: ../bin/doption.c:476
-msgid "Color"
-msgstr "Cor"
-
-#: ../bin/cdraw.c:226 ../bin/cdraw.c:456 ../bin/cdraw.c:867
-msgid "Lumber"
-msgstr "Madeira"
-
-#: ../bin/cdraw.c:227
-msgid "Orientation"
-msgstr "Orientação"
-
-#: ../bin/cdraw.c:228 ../bin/cdraw.c:861
-#: ../../../../build/work/app/bin/bllnhlp.c:543
-msgid "Size"
-msgstr "Tamanho"
-
-#: ../bin/cdraw.c:229 ../bin/compound.c:522 ../bin/cprint.c:140
-#: ../bin/cturntbl.c:245 ../bin/tease.c:507
-msgid "Origin: X"
-msgstr "Origem: X"
-
-#: ../bin/cdraw.c:231 ../bin/ctext.c:60 ../bin/ctext.c:145
-msgid "Font Size"
-msgstr "Tamanha da fonte"
-
-#: ../bin/cdraw.c:232 ../bin/cdraw.c:519 ../bin/ctext.c:264
-msgid "Text"
-msgstr "Texto"
-
-#: ../bin/cdraw.c:233 ../bin/cmisc.c:114 ../bin/tcurve.c:361
-#: ../bin/tease.c:514 ../bin/tstraigh.c:92
-msgid "Pivot"
-msgstr "Pivô"
-
-#: ../bin/cdraw.c:234 ../bin/cnote.c:163 ../bin/compound.c:529
-#: ../bin/cturntbl.c:248 ../bin/tbezier.c:242 ../bin/tcornu.c:292
-#: ../bin/tcurve.c:362 ../bin/tease.c:515 ../bin/tstraigh.c:93
-#: ../../../../build/work/app/bin/bllnhlp.c:621
-#: ../../../../build/work/app/bin/bllnhlp.c:622
-#: ../../../../build/work/app/bin/bllnhlp.c:623
-#: ../../../../build/work/app/bin/bllnhlp.c:624
-#: ../../../../build/work/app/bin/bllnhlp.c:625
-#: ../../../../build/work/app/bin/bllnhlp.c:626
-#: ../../../../build/work/app/bin/bllnhlp.c:627
-#: ../../../../build/work/app/bin/bllnhlp.c:628
-#: ../../../../build/work/app/bin/bllnhlp.c:629
-#: ../../../../build/work/app/bin/bllnhlp.c:630
-#: ../../../../build/work/app/bin/bllnhlp.c:631
-#: ../../../../build/work/app/bin/bllnhlp.c:632
-#: ../../../../build/work/app/bin/bllnhlp.c:633
-#: ../../../../build/work/app/bin/bllnhlp.c:634
-#: ../../../../build/work/app/bin/bllnhlp.c:635
-#: ../../../../build/work/app/bin/bllnhlp.c:636
-#: ../../../../build/work/app/bin/bllnhlp.c:637
-#: ../../../../build/work/app/bin/bllnhlp.c:638
-#: ../../../../build/work/app/bin/bllnhlp.c:639
-#: ../../../../build/work/app/bin/bllnhlp.c:640
-msgid "Layer"
-msgstr "Camada"
-
-#: ../bin/cdraw.c:446
-msgid "Straight Line"
-msgstr "Linha reta"
-
-#: ../bin/cdraw.c:449 ../bin/cdraw.c:1083
-msgid "Dimension Line"
-msgstr "Linha dimensional"
-
-#: ../bin/cdraw.c:464 ../bin/cdraw.c:868 ../bin/cdraw.c:1085
-msgid "Table Edge"
-msgstr "Limite do tablado"
-
-#: ../bin/cdraw.c:476 ../bin/cdraw.c:873 ../bin/cdraw.c:874 ../bin/cdraw.c:875
-msgid "Circle"
-msgstr "Circunferência"
-
-#: ../bin/cdraw.c:484
-msgid "Curved Line"
-msgstr "Linha curva"
-
-#: ../bin/cdraw.c:493 ../bin/cdraw.c:878 ../bin/cdraw.c:879 ../bin/cdraw.c:880
-msgid "Filled Circle"
-msgstr "Círculo"
-
-#: ../bin/cdraw.c:498 ../bin/cdraw.c:1102
-msgid "Poly Line"
-msgstr "Linha poligonal"
-
-#: ../bin/cdraw.c:504 ../bin/cdraw.c:882 ../bin/cdraw.c:1103
-msgid "Polygon"
-msgstr "Polígono"
-
-#: ../bin/cdraw.c:525
-#, c-format
-msgid "%s: Layer=%d"
-msgstr "%s: Camada=%d"
-
-#: ../bin/cdraw.c:536 ../bin/cdraw.c:972
-msgid "Tiny"
-msgstr "Minúsculo"
-
-#: ../bin/cdraw.c:537 ../bin/cdraw.c:973
-msgid "Small"
-msgstr "Pequeno"
-
-#: ../bin/cdraw.c:538 ../bin/cdraw.c:974
-msgid "Medium"
-msgstr "Médio"
-
-#: ../bin/cdraw.c:539 ../bin/cdraw.c:975
-msgid "Large"
-msgstr "Grande"
-
-#: ../bin/cdraw.c:853 ../bin/cdraw.c:953
-msgid "Lumber Type"
-msgstr "Tipo de madeira"
-
-#: ../bin/cdraw.c:865
-msgid "Straight"
-msgstr "Reto"
-
-#: ../bin/cdraw.c:866
-msgid "Dimension"
-msgstr "Dimensão"
-
-#: ../bin/cdraw.c:869 ../bin/cdraw.c:870 ../bin/cdraw.c:871 ../bin/cdraw.c:872
-msgid "Curved"
-msgstr "Curvado"
-
-#: ../bin/cdraw.c:876 ../bin/cdraw.c:1100
-msgid "Box"
-msgstr "Retângulo"
-
-#: ../bin/cdraw.c:877
-msgid "Polyline"
-msgstr "Linha poligonal"
-
-#: ../bin/cdraw.c:881 ../bin/cdraw.c:1101
-msgid "Filled Box"
-msgstr "Retângulo preenchido"
-
-#: ../bin/cdraw.c:883 ../bin/tbezier.c:401
-#, fuzzy
-msgid "Bezier Line"
-msgstr "Criar linhas"
-
-#: ../bin/cdraw.c:928
-#, c-format
-msgid "%s Line Width"
-msgstr "Largura da linha do %s"
-
-#: ../bin/cdraw.c:942
-#, c-format
-msgid "%s Color"
-msgstr "Cor %s"
-
-#: ../bin/cdraw.c:970
-msgid "Dimension Line Size"
-msgstr "Dimensão da largura da linha"
-
-#: ../bin/cdraw.c:983
-msgid "Drag to create Table Edge"
-msgstr "Arrastar para criar limite do tablado"
-
-#: ../bin/cdraw.c:1082
-msgid "Line"
-msgstr "Linha"
-
-#: ../bin/cdraw.c:1082
-msgid "Draw Line"
-msgstr "Desenhar linha"
-
-#: ../bin/cdraw.c:1083
-msgid "Draw Dimension Line"
-msgstr "Desenhar dimensão da linha"
-
-#: ../bin/cdraw.c:1084 ../../../../build/work/app/i18n/custmsg.h:53
-msgid "Benchwork"
-msgstr "Bancada"
-
-#: ../bin/cdraw.c:1084
-msgid "Draw Benchwork"
-msgstr "Desenhar bancada"
-
-#: ../bin/cdraw.c:1085
-msgid "Draw Table Edge"
-msgstr "Desenhar borda do tablado"
-
-#: ../bin/cdraw.c:1087
-msgid "Curve End"
-msgstr "Curva extremidade"
-
-#: ../bin/cdraw.c:1087
-msgid "Draw Curve from End"
-msgstr "Desenhar curva a partir de uma extremidade"
-
-#: ../bin/cdraw.c:1088
-msgid "Curve Tangent"
-msgstr "Curva tangente"
-
-#: ../bin/cdraw.c:1088
-msgid "Draw Curve from Tangent"
-msgstr "Desenhar curva a partir de uma tangente"
-
-#: ../bin/cdraw.c:1089
-msgid "Curve Center"
-msgstr "Curva centro"
-
-#: ../bin/cdraw.c:1089
-msgid "Draw Curve from Center"
-msgstr "Desenhar curva a partir de um centro"
-
-#: ../bin/cdraw.c:1090
-msgid "Curve Chord"
-msgstr "Curva corda"
-
-#: ../bin/cdraw.c:1090
-msgid "Draw Curve from Chord"
-msgstr "Desenhar curva a partir de uma corda"
-
-#: ../bin/cdraw.c:1091
-#, fuzzy
-msgid "Draw Bezier"
-msgstr "Desenhar linha"
-
-#: ../bin/cdraw.c:1094
-msgid "Circle Tangent"
-msgstr "Circunferência tangente"
-
-#: ../bin/cdraw.c:1094
-msgid "Draw Circle from Tangent"
-msgstr "Desenhar circunferência a partir de uma tangente"
-
-#: ../bin/cdraw.c:1095
-msgid "Circle Center"
-msgstr "Circunferência centro"
-
-#: ../bin/cdraw.c:1095
-msgid "Draw Circle from Center"
-msgstr "Desenhar circunferência a partir de um centro"
-
-#: ../bin/cdraw.c:1097
-msgid "Circle Filled Tangent"
-msgstr "Círculo tangente"
-
-#: ../bin/cdraw.c:1097
-msgid "Draw Filled Circle from Tangent"
-msgstr "Desenhar círculo a partir de uma tangente"
-
-#: ../bin/cdraw.c:1098
-msgid "Circle Filled Center"
-msgstr "Círculo centro"
-
-#: ../bin/cdraw.c:1098
-msgid "Draw Filled Circle from Center"
-msgstr "Desenhar círculo a partir de um centro"
-
-#: ../bin/cdraw.c:1100
-msgid "Draw Box"
-msgstr "Desenhar retângulo"
-
-#: ../bin/cdraw.c:1101
-msgid "Draw Filled Box"
-msgstr "Desenhar retângulo cheio"
-
-#: ../bin/cdraw.c:1102
-msgid "Draw Polyline"
-msgstr "Desenhar linha poligonal"
-
-#: ../bin/cdraw.c:1103
-msgid "Draw Polygon"
-msgstr "Desenhar polígono"
-
-#: ../bin/cdraw.c:1119
-msgid "Straight Objects"
-msgstr "Objetos retos"
-
-#: ../bin/cdraw.c:1119
-msgid "Draw Straight Objects"
-msgstr "Desenhar objetos retos"
-
-#: ../bin/cdraw.c:1120
-msgid "Curved Lines"
-msgstr "Linhas curvas"
-
-#: ../bin/cdraw.c:1120
-msgid "Draw Curved Lines"
-msgstr "Desenhar linhas curvas"
-
-#: ../bin/cdraw.c:1121
-msgid "Circle Lines"
-msgstr "Circunferência"
-
-#: ../bin/cdraw.c:1121
-msgid "Draw Circles"
-msgstr "Desenhar circunferência"
-
-#: ../bin/cdraw.c:1122
-msgid "Shapes"
-msgstr "Formas"
-
-#: ../bin/cdraw.c:1122
-msgid "Draw Shapes"
-msgstr "Desenhas formas"
-
-#: ../bin/celev.c:44 ../bin/cprofile.c:1383 ../bin/csplit.c:107
-#: ../bin/csplit.c:112 ../bin/dease.c:64 ../bin/doption.c:101
-#: ../bin/doption.c:103
-msgid "None"
-msgstr "Nenhum"
-
-#: ../bin/celev.c:44
-msgid "Defined"
-msgstr "Definido"
-
-#: ../bin/celev.c:44
-msgid "Hidden"
-msgstr "Oculto"
-
-#: ../bin/celev.c:45
-msgid "Computed"
-msgstr "Calculado"
-
-#: ../bin/celev.c:45
-msgid "Station"
-msgstr "Estação"
-
-#: ../bin/celev.c:45 ../bin/cprofile.c:1382 ../bin/dcmpnd.c:74
-#: ../bin/misc.c:2352
-msgid "Ignore"
-msgstr "Ignorar"
-
-#: ../bin/celev.c:123 ../bin/celev.c:168
-msgid "There are no reachable Defined Elevations"
-msgstr "Não existem inclinações definidas possíveis"
-
-#: ../bin/celev.c:204
-msgid "Set Elevation"
-msgstr "Ajustar inclinação"
-
-#: ../bin/celev.c:308 ../bin/celev.c:325
-#, c-format
-msgid "Elev = %s"
-msgstr "Elev = %s"
-
-#: ../bin/celev.c:310 ../bin/celev.c:327
-#, c-format
-msgid "Dist = %s"
-msgstr "Dist = %s"
-
-#: ../bin/celev.c:316 ../bin/celev.c:333 ../bin/celev.c:374 ../bin/celev.c:381
-#: ../bin/celev.c:384
-#, c-format
-msgid "Undefined"
-msgstr "Indefinido"
-
-#: ../bin/celev.c:406 ../bin/celev.c:472
-msgid "Elevation"
-msgstr "Elevação"
-
-#: ../bin/celev.c:406 ../bin/cmisc.c:401 ../bin/cprofile.c:1279
-#: ../bin/dcontmgm.c:300 ../bin/dcustmgm.c:358 ../bin/dlayer.c:1023
-#: ../bin/dpricels.c:154
-msgid "Done"
-msgstr "Ok"
-
-#: ../bin/celev.c:434 ../bin/csplit.c:92 ../bin/csplit.c:155
-msgid "Split Track"
-msgstr "Seccionar trecho"
-
-#: ../bin/cgroup.c:591
-msgid "Ungroup Object"
-msgstr "Desagrupar objeto"
-
-#: ../bin/cgroup.c:603
-#, c-format
-msgid "%d objects ungrouped"
-msgstr "%d objetos desagrupados"
-
-#: ../bin/cgroup.c:605
-msgid "No objects ungrouped"
-msgstr "Nenhum objeto desagrupado"
-
-#: ../bin/cgroup.c:614
-msgid "Replace with new group?"
-msgstr "Substituir por novo grupo?"
-
-#: ../bin/cgroup.c:619 ../bin/compound.c:524 ../bin/cstruct.c:70
-#: ../bin/ctodesgn.c:148 ../bin/ctodesgn.c:1772 ../bin/cturnout.c:76
-#: ../bin/dcar.c:1941 ../bin/dcar.c:4078 ../bin/dcar.c:4083
-#: ../bin/dcmpnd.c:450 ../bin/dcustmgm.c:50
-#: ../../../../build/work/app/bin/bllnhlp.c:345
-#: ../../../../build/work/app/bin/bllnhlp.c:520
-msgid "Manufacturer"
-msgstr "Fabricante"
-
-#: ../bin/cgroup.c:620 ../bin/cmisc.c:401 ../bin/cstruct.c:70
-#: ../bin/ctodesgn.c:1773 ../bin/ctodesgn.c:1774 ../bin/ctrain.c:186
-#: ../bin/cturnout.c:76 ../bin/dcar.c:1957 ../bin/dcar.c:4079
-#: ../bin/dcar.c:4084 ../bin/dcmpnd.c:451 ../bin/dcustmgm.c:51
-#: ../bin/denum.c:182 ../bin/denum.c:183 ../bin/denum.c:186
-#: ../../../../build/work/app/bin/bllnhlp.c:346
-msgid "Description"
-msgstr "Descrição"
-
-#: ../bin/cgroup.c:621 ../bin/dcmpnd.c:452
-msgid "#"
-msgstr "No."
-
-#: ../bin/cgroup.c:622 ../bin/compound.c:528
-msgid "# Segments"
-msgstr "No. de segmentos"
-
-#: ../bin/cgroup.c:1089
-msgid "No endpts"
-msgstr "Nenhuma extremidade"
-
-#: ../bin/cgroup.c:1174
-msgid "No paths"
-msgstr "Nenhuma via"
-
-#: ../bin/cgroup.c:1508 ../bin/cgroup.c:1562
-msgid "Group Tracks"
-msgstr "Agrupar trechos"
-
-#: ../bin/cgroup.c:1618
-msgid "Group Objects"
-msgstr "Agrupar objetos"
-
-#: ../bin/chndldto.c:70
-msgid "Place frog and drag angle"
-msgstr "Posicionar jacaré e ajustar ângulo"
-
-#: ../bin/chndldto.c:87
-msgid "frog"
-msgstr "Jacaré"
-
-#: ../bin/chndldto.c:93
-msgid "Drag to set angle"
-msgstr "Arrastar para selecionar o ângulo"
-
-#: ../bin/chndldto.c:134
-#, c-format
-msgid "Angle = %0.2f Frog# = %0.2f"
-msgstr "Ângulo = %0.2f Jacaré No. = %0.2f"
-
-#: ../bin/chndldto.c:136
-msgid "Frog angle is too close to 0"
-msgstr "Ângulo do jacaré muito próximo de 0"
-
-#: ../bin/chndldto.c:139
-msgid "Select point position"
-msgstr "Selecionar posição do ponto"
-
-#: ../bin/chndldto.c:153 ../bin/chndldto.c:178
-msgid "points"
-msgstr "Pontos"
-
-#: ../bin/chndldto.c:275
-#, c-format
-msgid "Length = %0.2f Angle = %0.2f Frog# = %0.2f"
-msgstr "Comprimento = %0.2f Ângulo = %0.2f Jacaré No. = %0.2f"
-
-#: ../bin/chndldto.c:279
-msgid "Create Hand Laid Turnout"
-msgstr "Criar AMV personalizado"
-
-#: ../bin/chndldto.c:370
-msgid "HandLaidTurnout"
-msgstr "AMV personalizado"
-
-#: ../bin/cjoin.c:172
-#, c-format
-msgid "Curved Track: Radius=%s Length=%s"
-msgstr "Trecho curvo: Raio=%s Comprimento=%s"
-
-#: ../bin/cjoin.c:258
-#, c-format
-msgid "Curved Track: Radius=%s Length=%s Angle=%0.3f"
-msgstr "Trecho curvo: Raio=%s Comprimento=%s Ângulo=%0.3f"
-
-#: ../bin/cjoin.c:354
-#, c-format
-msgid "Track (%d) is too short for transition-curve by %0.3f"
-msgstr "Trecho (%d) muito curto para transição curva por %0.3f"
-
-#: ../bin/cjoin.c:371
-#, c-format
-msgid "Connecting track is too short by %0.3f"
-msgstr "Trecho de conexão muito curto por %0.3f"
-
-#: ../bin/cjoin.c:415
-msgid "Click on an unselected End-Point"
-msgstr "Clicar em uma extremidade não selecionada"
-
-#: ../bin/cjoin.c:416
-msgid "Click on a selected End-Point"
-msgstr "Clicar em uma extremidade selecionada"
-
-#: ../bin/cjoin.c:423
-msgid "unselected"
-msgstr "deselecionado"
-
-#: ../bin/cjoin.c:423 ../bin/cprint.c:148
-msgid "selected"
-msgstr "selecionado"
-
-#: ../bin/cjoin.c:458
-msgid "Left click - join with track, Shift Left click - move to join"
-msgstr ""
-"Clicar com o botão esquerdo - junta um trecho, Clicar com o botão esquerdo + "
-"Shift - movimenta para juntar"
-
-#: ../bin/cjoin.c:493 ../bin/cjoin.c:802 ../bin/cjoin.c:811
-msgid "Select 2nd track"
-msgstr "Selecionar o segundo trecho"
-
-#: ../bin/cjoin.c:520 ../bin/cmisc.c:52
-msgid "First"
-msgstr "Primeiro"
-
-#: ../bin/cjoin.c:525 ../bin/cmisc.c:52
-msgid "Second"
-msgstr "Segundo"
-
-#: ../bin/cjoin.c:620
-msgid "Beyond end of 2nd track"
-msgstr "Além da extremidade do 2º trecho"
-
-#: ../bin/cjoin.c:655
-msgid "Beyond end of 1st track"
-msgstr "Além da extremidade do 1º trecho"
-
-#: ../bin/cjoin.c:679
-msgid "First "
-msgstr "Primeiro "
-
-#: ../bin/cjoin.c:706
-msgid "Second "
-msgstr "Segundo "
-
-#: ../bin/cjoin.c:720 ../bin/track.c:1959
-msgid "Connecting "
-msgstr "Conectando "
-
-#: ../bin/cjoin.c:814
-msgid "Join Tracks"
-msgstr "Juntar trechos"
-
-#: ../bin/cjoin.c:882
-msgid "Join"
-msgstr "Juntar"
-
-#: ../bin/cmisc.c:52
-msgid "Middle"
-msgstr "Meio"
-
-#: ../bin/cmisc.c:209 ../bin/cmodify.c:203 ../bin/cnote.c:190
-#: ../bin/compound.c:597 ../bin/ctrain.c:213
-msgid "Change Track"
-msgstr "Substituir trecho"
-
-#: ../bin/cmisc.c:513
-msgid "Select track to describe"
-msgstr "Selecionar trecho a descrever"
-
-#: ../bin/cmisc.c:570 ../bin/doption.c:205
-msgid "Properties"
-msgstr "Propriedades"
-
-#: ../bin/cmisc2.c:52
-msgid "Bridge"
-msgstr "Ponte"
-
-#: ../bin/cmodify.c:144
-msgid "Select track to modify"
-msgstr "Selecionar trecho a modificar"
-
-#: ../bin/cmodify.c:261
-msgid "Modify Track"
-msgstr "Modificar trecho"
-
-#: ../bin/cmodify.c:299
-msgid "Drag to create new track segment"
-msgstr "Arrastar para criar novo trecho"
-
-#: ../bin/cmodify.c:429
-#, c-format
-msgid "Curve Track: Radius=%s Length=%s Angle=%0.3f"
-msgstr "Trecho curvo: Raio=%s Comprimento=%s Ângulo=%0.3f"
-
-#: ../bin/cmodify.c:446
-msgid "Extend Track"
-msgstr "Estender um trecho"
-
-#: ../bin/cmodify.c:522
-msgid "Modify"
-msgstr "Modificar"
-
-#: ../bin/cnote.c:100 ../bin/cnote.c:233 ../bin/cnote.c:462
-msgid "Note"
-msgstr "Nota"
-
-#: ../bin/cnote.c:106
-msgid "Replace this text with your layout notes"
-msgstr "Substitua este texto por uma nota do traçado"
-
-#: ../bin/cnote.c:217 ../bin/cnote.c:218 ../bin/cnote.c:219
-msgid "Note: "
-msgstr "Nota: "
-
-#: ../bin/cnote.c:415 ../../../../build/work/app/bin/bllnhlp.c:94
-msgid "Place a note on the layout"
-msgstr "Posicionar uma nota no traçado"
-
-#: ../bin/cnote.c:431
-msgid "New Note"
-msgstr "Nova nota"
-
-#: ../bin/cnote.c:435
-msgid "Replace this text with your note"
-msgstr "Substitua este texto por uma nota"
-
-#: ../bin/compound.c:518 ../bin/compound.c:520 ../bin/tcurve.c:349
-#: ../bin/tcurve.c:351 ../bin/tease.c:504 ../bin/tease.c:506
-#: ../bin/tstraigh.c:86 ../bin/tstraigh.c:88
-msgid "Z"
-msgstr "Z"
-
-#: ../bin/compound.c:526 ../bin/cstruct.c:70 ../bin/cturnout.c:76
-#: ../bin/dcar.c:4078 ../bin/dcar.c:4083 ../bin/dcustmgm.c:51
-#: ../bin/doption.c:106 ../bin/doption.c:107
-msgid "Part No"
-msgstr "No. do item"
-
-#: ../bin/compound.c:527
-msgid "# End Pt"
-msgstr "No. da extremidade"
-
-#: ../bin/compound.c:782 ../bin/cswitchmotor.c:220 ../bin/cturnout.c:894
-#: ../bin/cturnout.c:2401 ../bin/cturnout.c:2571
-msgid "Turnout"
-msgstr "AMV"
-
-#: ../bin/compound.c:782
-msgid "Sectional Track"
-msgstr "Trecho seccionado"
-
-#: ../bin/compound.c:785 ../bin/cstruct.c:769 ../bin/cstruct.c:914
-msgid "Structure"
-msgstr "Estrutura"
-
-#: ../bin/cparalle.c:44 ../bin/cparalle.c:74 ../bin/cparalle.c:86
-#: ../bin/ctodesgn.c:390 ../bin/ctodesgn.c:410 ../bin/ctodesgn.c:430
-#: ../bin/tcurve.c:355
-msgid "Separation"
-msgstr "Separação"
-
-#: ../bin/cparalle.c:96
-msgid " Track doesn't support parallel"
-msgstr ""
-
-#: ../bin/cparalle.c:145
-msgid "Create Parallel Track"
-msgstr "Criar trecho paralelo"
-
-#: ../bin/cparalle.c:189 ../../../../build/work/app/i18n/custmsg.h:44
-msgid "Parallel"
-msgstr "Paralelo"
-
-#: ../bin/cprint.c:102
-msgid "Portrait"
-msgstr "Retrato"
-
-#: ../bin/cprint.c:102
-msgid "Landscape"
-msgstr "Paisagem"
-
-#: ../bin/cprint.c:103 ../bin/cselect.c:1922 ../bin/cselect.c:1926
-#: ../bin/cswitchmotor.c:87 ../bin/cswitchmotor.c:106
-#: ../bin/cswitchmotor.c:217 ../bin/dbench.c:78 ../bin/dease.c:64
-#: ../bin/doption.c:100 ../bin/doption.c:102 ../bin/doption.c:200
-#: ../bin/macro.c:1233
-msgid "Normal"
-msgstr "Normal"
-
-#: ../bin/cprint.c:103 ../bin/cswitchmotor.c:88 ../bin/cswitchmotor.c:107
-#: ../bin/cswitchmotor.c:218 ../bin/ctrain.c:877 ../bin/ctrain.c:1187
-msgid "Reverse"
-msgstr "Inverso"
-
-#: ../bin/cprint.c:104
-msgid "Engineering Data"
-msgstr "Dados do projeto"
-
-#: ../bin/cprint.c:105
-msgid "Print Registration Marks"
-msgstr "Imprimir marcas de registro"
-
-#: ../bin/cprint.c:106
-msgid "Ignore Page Margins"
-msgstr "Ignorar margens de página"
-
-#: ../bin/cprint.c:107
-msgid "Print Snap Grid"
-msgstr "Imprimir grade"
-
-#: ../bin/cprint.c:108
-msgid "Print Rulers"
-msgstr "Imprimir régua"
-
-#: ../bin/cprint.c:109 ../../../../build/work/app/bin/bllnhlp.c:424
-msgid "Print Roadbed Outline"
-msgstr "Imprimir leito dos trilhos"
-
-#: ../bin/cprint.c:110
-#, fuzzy
-msgid "Print Centerline below Scale 1:1"
-msgstr "Imprimir linha central"
-
-#: ../bin/cprint.c:118
-msgid "Print Scale"
-msgstr "Imprimir escala"
-
-#: ../bin/cprint.c:119
-msgid "Page Width"
-msgstr "Largura de página"
-
-#: ../bin/cprint.c:120
-msgid "Max"
-msgstr "Máximo"
-
-#: ../bin/cprint.c:121
-msgid "Height"
-msgstr "Altura"
-
-#: ../bin/cprint.c:122
-msgid "Snap Shot"
-msgstr "Capturar"
-
-#: ../bin/cprint.c:123
-msgid "Page Format"
-msgstr "Formato da página"
-
-#: ../bin/cprint.c:124
-msgid "Print Order"
-msgstr "Ordem de impressão"
-
-#: ../bin/cprint.c:139 ../bin/ctrain.c:185 ../bin/dcar.c:1980
-msgid "Width"
-msgstr "Largura"
-
-#: ../bin/cprint.c:141 ../bin/csnap.c:542
-msgid "Y"
-msgstr "Y"
-
-#: ../bin/cprint.c:142 ../bin/dcar.c:1961
-msgid "Reset"
-msgstr "Resetar"
-
-#: ../bin/cprint.c:144
-msgid "Setup"
-msgstr "Setup"
-
-#: ../bin/cprint.c:145 ../bin/cprofile.c:569 ../bin/misc.c:591
-msgid "Clear"
-msgstr "Limpar"
-
-#: ../bin/cprint.c:147 ../bin/cprint.c:588
-msgid "0 pages"
-msgstr "0 página"
-
-#: ../bin/cprint.c:211 ../bin/cprint.c:260
-#, c-format
-msgid "%d pages"
-msgstr "%d páginas"
-
-#: ../bin/cprint.c:380
-#, fuzzy, c-format
-msgid "PrintScale 1:%ld Room %s x %s Model Scale %s File %s"
-msgstr ""
-"Escala de impressão %ld:1 Comôdo %s x %s Escala do modelo %s Arquivo %s"
-
-#: ../bin/cprint.c:669
-msgid "1 page"
-msgstr "1 página"
-
-#: ../bin/cprint.c:1039 ../bin/cprofile.c:570 ../bin/ctodesgn.c:1720
-#: ../bin/denum.c:55
-msgid "Print"
-msgstr "Imprimir"
-
-#: ../bin/cprint.c:1061
-msgid "Select pages to print, or drag to move print grid"
-msgstr "Selecionar páginas a imprimir, ou arrastar para imprimir grade"
-
-#: ../bin/cprint.c:1160
-msgid "Print..."
-msgstr "Imprimir..."
-
-#: ../bin/cprofile.c:477 ../bin/cprofile.c:1279 ../bin/cprofile.c:1379
-#: ../../../../build/work/app/bin/bllnhlp.c:104
-#: ../../../../build/work/app/i18n/custmsg.h:40
-msgid "Profile"
-msgstr "Perfil"
-
-#: ../bin/cprofile.c:493
-#, c-format
-msgid "%s Profile: %s"
-msgstr "%s perfil: %s"
-
-#: ../bin/cprofile.c:641 ../bin/cprofile.c:651
-#, c-format
-msgid "Elev = %0.1f"
-msgstr "Elev = %0.1f"
-
-#: ../bin/cprofile.c:653
-#, c-format
-msgid "Elev=%0.2f %0.1f%%"
-msgstr "Elev=%0.2f %0.1f%%"
-
-#: ../bin/cprofile.c:657
-#, c-format
-msgid "%0.1f%% Elev = %0.2f"
-msgstr "%0.1f%% Elev = %0.2f"
-
-#: ../bin/cprofile.c:661
-#, c-format
-msgid "%0.1f%% Elev = %0.2f %0.1f%%"
-msgstr "%0.1f%% Elev = %0.2f %0.1f%%"
-
-#: ../bin/cprofile.c:672 ../bin/cprofile.c:1226
-msgid "Profile Command"
-msgstr "Comando perfil"
-
-#: ../bin/cprofile.c:680 ../bin/cprofile.c:1284
-msgid "Drag to change Elevation"
-msgstr "Arrastar para alterar elevação"
-
-#: ../bin/cprofile.c:747
-msgid "Select a Defined Elevation to start Profile"
-msgstr "Selecionar uma elevação definida para iniciar perfil"
-
-#: ../bin/cprofile.c:749
-msgid "Select a Defined Elevation to extend Profile"
-msgstr "Selecionar uma elevação definida para estender perfil"
-
-#: ../bin/cprofile.c:1296
-msgid "Select a Defined Elevation to start profile"
-msgstr "Selecionar uma elevação definida para iniciar perfil"
-
-#: ../bin/cprofile.c:1381
-msgid "Define"
-msgstr "Definir"
-
-#: ../bin/cpull.c:436 ../bin/cpull.c:581
-#, c-format
-msgid "%d tracks moved"
-msgstr "%d segmentos movidos"
-
-#: ../bin/cpull.c:471
-msgid "Pull Tracks"
-msgstr "Empurar trilhos"
-
-#: ../bin/cpull.c:545
-msgid "Tighten Tracks"
-msgstr "Trilhos forçados"
-
-#: ../bin/cpull.c:598
-msgid "Select first End-Point to connect"
-msgstr "Selecionar primeira extremidade a conectar"
-
-#: ../bin/cpull.c:609
-msgid "Select second End-Point to connect"
-msgstr "Selecionar segunda extremidade a conectar"
-
-#: ../bin/cpull.c:659
-msgid "Connect Sectional Tracks"
-msgstr "Conectar trechos seccionados"
-
-#: ../bin/cruler.c:151 ../../../../build/work/app/i18n/custmsg.h:51
-msgid "Ruler"
-msgstr "Medir"
-
-#: ../bin/cselect.c:313
-msgid "Change Track Width"
-msgstr "Alterar largura do trilho"
-
-#: ../bin/cselect.c:334
-msgid "Delete Tracks"
-msgstr "Apagar trilhos"
-
-#: ../bin/cselect.c:386
-msgid "Hide Tracks (Tunnel)"
-msgstr "Ocultar trilhos (túnel)"
-
-#: ../bin/cselect.c:425 ../bin/misc.c:2060
-msgid "Move To Current Layer"
-msgstr "Mover para camada em uso"
-
-#: ../bin/cselect.c:464 ../bin/misc.c:2175
-msgid "Clear Elevations"
-msgstr "Eliminar elevações"
-
-#: ../bin/cselect.c:508
-msgid "Add Elevations"
-msgstr "Adicionar elevações"
-
-#: ../bin/cselect.c:523
-msgid "Refresh Compound"
-msgstr "Atualizar composição"
-
-#: ../bin/cselect.c:559 ../bin/dcar.c:4078 ../bin/dcar.c:4083
-#: ../bin/dcustmgm.c:51 ../bin/layout.c:239
-msgid "Scale"
-msgstr "Escala"
-
-#: ../bin/cselect.c:559 ../bin/cselect.c:584
-msgid "Ratio"
-msgstr "Razão"
-
-#: ../bin/cselect.c:568
-msgid "Do not resize track"
-msgstr "Não redimensione o traçado"
-
-#: ../bin/cselect.c:572
-msgid "Rescale by:"
-msgstr "Reescalar para:"
-
-#: ../bin/cselect.c:574
-msgid "From:"
-msgstr "De:"
-
-#: ../bin/cselect.c:578
-msgid "To: "
-msgstr "A: "
-
-#: ../bin/cselect.c:643
-msgid "Rescale Tracks"
-msgstr "Reescalar traçado"
-
-#: ../bin/cselect.c:774 ../../../../build/work/app/i18n/custmsg.h:47
-msgid "Rescale"
-msgstr "Reescalar"
-
-#: ../bin/cselect.c:801
-msgid "Draw moving track normally"
-msgstr "Desenhar normalmente trechos sendo arrastados"
-
-#: ../bin/cselect.c:802
-msgid "Draw moving track simply"
-msgstr "Desenhar de modo simples trechos sendo arrastados"
-
-#: ../bin/cselect.c:803
-msgid "Draw moving track as end-points"
-msgstr "Desenhar apenas extremidades de trechos sendo movidos"
-
-#: ../bin/cselect.c:1085
-msgid "Cornu too tight - it was deleted"
-msgstr ""
-
-#: ../bin/cselect.c:1105
-msgid "Cornu selected too tight after move - it was left alone"
-msgstr ""
-
-#: ../bin/cselect.c:1145
-msgid "Move To Join"
-msgstr "Arrastar para juntar"
-
-#: ../bin/cselect.c:1181
-msgid "Drag to move selected tracks"
-msgstr "Arrastar para mover trecho selecionados"
-
-#: ../bin/cselect.c:1188
-msgid "Move Tracks"
-msgstr "Mover trecho"
-
-#: ../bin/cselect.c:1245
-msgid "Click on selected object to align"
-msgstr "Clicar no objeto selecionado para alinhar"
-
-#: ../bin/cselect.c:1273
-msgid "Drag to rotate selected tracks"
-msgstr "Arrastar para rotacionar trechos selecionados"
-
-#: ../bin/cselect.c:1282 ../bin/cselect.c:1438
-msgid "Rotate Tracks"
-msgstr "Rotacionar trecho"
-
-#: ../bin/cselect.c:1321 ../bin/cselect.c:1352
-#, c-format
-msgid "Angle %0.3f"
-msgstr "Ângulo %0.3f"
-
-#: ../bin/cselect.c:1382
-#, c-format
-msgid " Angle %0.3f #%ld"
-msgstr " Ângulo %0.3f No.%ld"
-
-#: ../bin/cselect.c:1384
-#, c-format
-msgid " Angle %0.3f"
-msgstr " Ângulo %0.3f"
-
-#: ../bin/cselect.c:1395
-msgid "Click on the 2nd Unselected object"
-msgstr "Clicar no 2º objeto não selecionado"
-
-#: ../bin/cselect.c:1450
-msgid "Toggle Label"
-msgstr "Ocultar ou apresentar etiqueta"
-
-#: ../bin/cselect.c:1479
-msgid "Select and drag a description"
-msgstr "Selecionar e arrastar uma descrição"
-
-#: ../bin/cselect.c:1521
-msgid "Move Label"
-msgstr "Mover etiqueta"
-
-#: ../bin/cselect.c:1546
-msgid "Show Description"
-msgstr "Apresentar descrição"
-
-#: ../bin/cselect.c:1628
-msgid "Drag to mark mirror line"
-msgstr "Arrastar para marcar linha espelho"
-
-#: ../bin/cselect.c:1643
-#, c-format
-msgid "Angle %0.2f"
-msgstr "Ângulo %0.2f"
-
-#: ../bin/cselect.c:1648
-msgid "Flip Tracks"
-msgstr "Virar trecho"
-
-#: ../bin/cselect.c:1811
-msgid "Select tracks"
-msgstr "Selecionar trecho"
-
-#: ../bin/cselect.c:1909 ../bin/dcar.c:1544 ../bin/doption.c:205
-#: ../../../../build/work/app/i18n/custmsg.h:13
-msgid "Select"
-msgstr "Selecionar"
-
-#: ../bin/cselect.c:1923 ../bin/cselect.c:1927 ../bin/doption.c:201
-msgid "Simple"
-msgstr "Simples"
-
-#: ../bin/cselect.c:1924 ../bin/cselect.c:1928
-msgid "End Points"
-msgstr "Extremidades"
-
-#: ../bin/cselect.c:1931
-msgid "Align"
-msgstr "Alinhar"
-
-#: ../bin/cselect.c:1952 ../bin/misc.c:1990
-msgid "Tunnel"
-msgstr "Túnel"
-
-#: ../bin/cselect.c:1961
-msgid "Move Description"
-msgstr "Mover descrição"
-
-#: ../bin/cselect.c:1968 ../bin/misc.c:1988
-msgid "Move"
-msgstr "Mover"
-
-#: ../bin/cselect.c:1970 ../bin/misc.c:1764 ../bin/misc.c:1989
-#: ../../../../build/work/app/i18n/custmsg.h:58
-msgid "Rotate"
-msgstr "Rotacionar"
-
-#: ../bin/cselect.c:1972 ../bin/dcar.c:1963
-#: ../../../../build/work/app/i18n/custmsg.h:59
-msgid "Flip"
-msgstr "Virar"
-
-#: ../bin/csensor.c:197
-#, fuzzy
-msgid "Change Sensor"
-msgstr "Alterar escala"
-
-#: ../bin/csensor.c:243 ../bin/csensor.c:556
-msgid "Sensor"
-msgstr ""
-
-#: ../bin/csensor.c:374
-#, fuzzy
-msgid "Create Sensor"
-msgstr "Cria bancada"
-
-#: ../bin/csensor.c:377
-#, fuzzy
-msgid "Modify Sensor"
-msgstr "Modificar trecho"
-
-#: ../bin/csensor.c:410
-#, fuzzy
-msgid "Edit sensor"
-msgstr "Menu editar"
-
-#: ../bin/csensor.c:446
-#, fuzzy
-msgid "Place sensor"
-msgstr "Posicionar novo AMV"
-
-#: ../bin/csignal.c:237
-#, fuzzy
-msgid "Number Of Heads"
-msgstr "Números"
-
-#: ../bin/csignal.c:269
-#, fuzzy
-msgid "Change Signal"
-msgstr "Alterar escala"
-
-#: ../bin/csignal.c:303
-#, c-format
-msgid "(%d [%s]): Layer=%d, %d heads at %0.3f,%0.3f A%0.3f"
-msgstr ""
-
-#: ../bin/csignal.c:314 ../bin/csignal.c:885
-msgid "Signal"
-msgstr ""
-
-#: ../bin/csignal.c:492
-#, fuzzy
-msgid "Number of Heads"
-msgstr "Números"
-
-#: ../bin/csignal.c:497
-#, fuzzy
-msgid "Edit Aspect"
-msgstr "Menu editar"
-
-#: ../bin/csignal.c:499
-msgid "Add Aspect"
-msgstr ""
-
-#: ../bin/csignal.c:501
-#, fuzzy
-msgid "Delete Aspect"
-msgstr "Elimina objetos"
-
-#: ../bin/csignal.c:514
-msgid "Aspect Index"
-msgstr ""
-
-#: ../bin/csignal.c:529
-#, fuzzy
-msgid "Create Signal"
-msgstr "Criar linhas"
-
-#: ../bin/csignal.c:533
-#, fuzzy
-msgid "Modify Signal"
-msgstr "Modificar trecho"
-
-#: ../bin/csignal.c:640
-#, fuzzy
-msgid "Edit aspect"
-msgstr "Menu editar"
-
-#: ../bin/csignal.c:687
-#, c-format
-msgid "Are you sure you want to delete the %d aspect(s)"
-msgstr ""
-
-#: ../bin/csignal.c:708
-#, fuzzy
-msgid "Edit signal"
-msgstr "Menu editar"
-
-#: ../bin/csignal.c:770
-msgid "Place base of signal"
-msgstr ""
-
-#: ../bin/csignal.c:775
-#, fuzzy
-msgid "Drag to orient signal"
-msgstr "Arrastar para selecionar o ângulo"
-
-#: ../bin/csnap.c:523
-msgid "Horz"
-msgstr "Horizontal"
-
-#: ../bin/csnap.c:525
-msgid "Spacing"
-msgstr "Espaçamento"
-
-#: ../bin/csnap.c:527
-msgid "Divisions"
-msgstr "Divisões"
-
-#: ../bin/csnap.c:530
-msgid "Enable"
-msgstr "Habilitar"
-
-#: ../bin/csnap.c:531
-msgid "Vert"
-msgstr "Vertical"
-
-#: ../bin/csnap.c:540 ../bin/dease.c:73
-msgid "X"
-msgstr "X"
-
-#: ../bin/csnap.c:544
-msgid "A"
-msgstr "θ"
-
-#: ../bin/csnap.c:547
-msgid "Show"
-msgstr "Apresentar"
-
-#: ../bin/csnap.c:717 ../bin/doption.c:448
-msgid "Snap Grid"
-msgstr "Grade"
-
-#: ../bin/csnap.c:802
-msgid "Change Grid..."
-msgstr "Alterar grade..."
-
-#: ../bin/csplit.c:41
-msgid "Set Block Gaps"
-msgstr "Configurar espaçamento de bloco"
-
-#: ../bin/csplit.c:68
-msgid "Select track to split"
-msgstr "Selecionar trecho a seccionar"
-
-#: ../bin/csplit.c:84
-#, fuzzy
-msgid "Can't Split that Track"
-msgstr "Secciona um trilho"
-
-#: ../bin/csplit.c:108 ../bin/dbench.c:69 ../bin/dbench.c:80
-msgid "Left"
-msgstr "Esquerda"
-
-#: ../bin/csplit.c:109 ../bin/dbench.c:70 ../bin/dbench.c:79
-msgid "Right"
-msgstr "Direita"
-
-#: ../bin/csplit.c:110 ../bin/csplit.c:115
-msgid "Both"
-msgstr "Ambos"
-
-#: ../bin/csplit.c:113
-msgid "Top"
-msgstr "Em cima"
-
-#: ../bin/csplit.c:114
-msgid "Bottom"
-msgstr "Em baixo"
-
-#: ../bin/cstraigh.c:58
-#, fuzzy
-msgid ""
-"Place 1st end point of Straight track + Shift -> snap to unconnected endpoint"
-msgstr "Posicionar 1ª extremidade do trecho reto"
-
-#: ../bin/cstraigh.c:74
-msgid ""
-"No Unconnected end-point on track - Try again or release shift and click"
-msgstr ""
-
-#: ../bin/cstraigh.c:80
-msgid "Not on a Track - Try again or release shift and click"
-msgstr ""
-
-#: ../bin/cstraigh.c:89
-msgid "Drag to place 2nd end point"
-msgstr "Arrastar à posição da 2ª extremidade"
-
-#: ../bin/cstraigh.c:110
-#, c-format
-msgid "Straight Track Length=%s Angle=%0.3f"
-msgstr "Trecho reto Comprimento=%s Ângulo=%0.3f"
-
-#: ../bin/cstraigh.c:158 ../bin/tstraigh.c:267
-msgid "Straight Track"
-msgstr "Trecho reto"
-
-#: ../bin/cstruct.c:72 ../bin/cturnout.c:78 ../bin/doption.c:100
-#: ../bin/doption.c:208
-msgid "Hide"
-msgstr "Esconder"
-
-#: ../bin/cstruct.c:327 ../bin/cstruct.c:354
-msgid "Pier Number"
-msgstr "Número do pilar"
-
-#: ../bin/cstruct.c:439
-#, c-format
-msgid "Scale %d:1"
-msgstr "Escala %d:1"
-
-#: ../bin/cstruct.c:441
-#, c-format
-msgid "Width %s"
-msgstr "Largura %s"
-
-#: ../bin/cstruct.c:443
-#, c-format
-msgid "Height %s"
-msgstr "Altura %s"
-
-#: ../bin/cstruct.c:541
-msgid "Place Structure"
-msgstr "Posicionar estrutura"
-
-#: ../bin/cstruct.c:651
-msgid "Drag to place"
-msgstr "Arrastar ao destino"
-
-#: ../bin/cstruct.c:679
-msgid "Drag to rotate"
-msgstr "Arrastar para rotacionar"
-
-#: ../bin/cstruct.c:700
-#, c-format
-msgid "Angle = %0.3f"
-msgstr "Ângulo = %0.3f"
-
-#: ../bin/cstruct.c:786
-msgid "Select Structure and then drag to place"
-msgstr "Selecionar estrutura e arrastar ao destino"
-
-#: ../bin/cstruct.c:804 ../bin/cstruct.c:891
-msgid ""
-"Left drag to move, right drag to rotate, or press Return or click Ok to "
-"finalize"
-msgstr ""
-"Arrastar clicanco o botão esquerdo do mouse para mover, botão direito para "
-"rotacionar, pressionar \"Return\" ou clicar em \"Ok\" para finalizar"
-
-#: ../bin/cstruct.c:884 ../bin/cturnout.c:2541
-#, c-format
-msgid "Place %s and draw into position"
-msgstr "Posicionar %s e desenhar na posição"
-
-#: ../bin/cswitchmotor.c:89 ../bin/cswitchmotor.c:108
-#: ../bin/cswitchmotor.c:219
-msgid "Point Sense"
-msgstr "Aportar direção"
-
-#: ../bin/cswitchmotor.c:109
-#, fuzzy
-msgid "Turnout Number"
-msgstr "Número da parte"
-
-#: ../bin/cswitchmotor.c:255
-msgid "Change Switch Motor"
-msgstr "Alterar motor de AMV"
-
-#: ../bin/cswitchmotor.c:316
-#, fuzzy
-msgid "Switch motor"
-msgstr "Motor de AMV"
-
-#: ../bin/cswitchmotor.c:395
-#, c-format
-msgid "ResolveSwitchmotor: Turnout T%d: T%d doesn't exist"
-msgstr ""
-
-#: ../bin/cswitchmotor.c:462 ../bin/cswitchmotor.c:625
-msgid "Switch motor must have a name!"
-msgstr ""
-
-#: ../bin/cswitchmotor.c:466
-msgid "Create Switch Motor"
-msgstr "Criar motor de AMV"
-
-#: ../bin/cswitchmotor.c:491
-#, fuzzy
-msgid "Create switch motor"
-msgstr "Criar motor de AMV"
-
-#: ../bin/cswitchmotor.c:505 ../bin/cswitchmotor.c:536
-#: ../bin/cswitchmotor.c:568
-msgid "Select a turnout"
-msgstr "Selecionar um AMV"
-
-#: ../bin/cswitchmotor.c:512
-msgid "Not a turnout!"
-msgstr "Isto não é um AMV!"
-
-#: ../bin/cswitchmotor.c:545 ../bin/cswitchmotor.c:576
-#, fuzzy
-msgid "Not a switch motor!"
-msgstr "Isto não é um motor de AMV!"
-
-#: ../bin/cswitchmotor.c:581
-#, fuzzy, c-format
-msgid "Really delete switch motor %s?"
-msgstr "Eliminar motor de AMV %s?"
-
-#: ../bin/cswitchmotor.c:582
-msgid "Delete Switch Motor"
-msgstr "Eliminar motor de AMV"
-
-#: ../bin/cswitchmotor.c:629
-#, fuzzy
-msgid "Modify Switch Motor"
-msgstr "Editar motor de AMV"
-
-#: ../bin/cswitchmotor.c:655
-#, fuzzy
-msgid "Edit switch motor"
-msgstr "Editar motor de AMV"
-
-#: ../bin/cswitchmotor.c:661
-#, fuzzy, c-format
-msgid "Edit switch motor %d"
-msgstr "Editar motor de AMV"
-
-#: ../bin/cswitchmotor.c:769
-msgid "Switch Motor"
-msgstr "Motor de AMV"
-
-#: ../bin/cswitchmotor.c:781
-#, fuzzy, c-format
-msgid "Deleting Switch Motor %s"
-msgstr "Eliminar motor de AMV"
-
-#: ../bin/ctext.c:196 ../bin/ctext.c:235
-msgid "Create Text"
-msgstr "Criar texto"
-
-#: ../bin/ctext.c:266
-msgid "Fonts..."
-msgstr "Fontes..."
-
-#: ../bin/ctodesgn.c:114
-msgid "Frog #"
-msgstr "Jacaré No."
-
-#: ../bin/ctodesgn.c:114
-msgid "Degrees"
-msgstr "Graus"
-
-#: ../bin/ctodesgn.c:141 ../bin/ctodesgn.c:142 ../bin/ctodesgn.c:190
-#: ../bin/ctodesgn.c:213 ../bin/ctodesgn.c:215 ../bin/ctodesgn.c:251
-#: ../bin/ctodesgn.c:252 ../bin/ctodesgn.c:288 ../bin/ctodesgn.c:290
-#: ../bin/ctodesgn.c:505
-msgid "Offset"
-msgstr "Distância"
-
-#: ../bin/ctodesgn.c:150 ../bin/ctodesgn.c:1767 ../bin/ctodesgn.c:1768
-msgid "Left Description"
-msgstr "Descrição a esquerda"
-
-#: ../bin/ctodesgn.c:151 ../bin/ctodesgn.c:154
-msgid " #"
-msgstr " No."
-
-#: ../bin/ctodesgn.c:153 ../bin/ctodesgn.c:1766
-msgid "Right Description"
-msgstr "Descrição a direita"
-
-#: ../bin/ctodesgn.c:155
-msgid "Roadbed Width"
-msgstr "Largura do leito"
-
-#: ../bin/ctodesgn.c:159 ../bin/denum.c:56
-msgid "Print Setup"
-msgstr "Setup de impressão"
-
-#: ../bin/ctodesgn.c:188
-msgid "Diverging Length"
-msgstr "Comprimento divergente"
-
-#: ../bin/ctodesgn.c:189
-msgid "Diverging Angle"
-msgstr "Ângulo divergente"
-
-#: ../bin/ctodesgn.c:190
-msgid "Diverging Offset"
-msgstr "Distância de divergência"
-
-#: ../bin/ctodesgn.c:191
-msgid "Overall Length"
-msgstr "Comprimento total"
-
-#: ../bin/ctodesgn.c:201
-msgid "Regular Turnout"
-msgstr "AMV regular"
-
-#: ../bin/ctodesgn.c:211
-msgid "Inner Length"
-msgstr "Comprimento interno"
-
-#: ../bin/ctodesgn.c:212
-msgid "Inner Angle"
-msgstr "Ângulo interno"
-
-#: ../bin/ctodesgn.c:213
-msgid "Inner Offset"
-msgstr "Distância interna"
-
-#: ../bin/ctodesgn.c:214
-msgid "Outer Angle"
-msgstr "Ângulo externo"
-
-#: ../bin/ctodesgn.c:215
-msgid "Outer Offset"
-msgstr "Distância externa"
-
-#: ../bin/ctodesgn.c:216
-msgid "Outer Length"
-msgstr "Comprimento externo"
-
-#: ../bin/ctodesgn.c:238
-msgid "Curved Turnout"
-msgstr "AMV curvo"
-
-#: ../bin/ctodesgn.c:249 ../bin/ctodesgn.c:286
-msgid "Left Length"
-msgstr "Comprimento a esquerda"
-
-#: ../bin/ctodesgn.c:250 ../bin/ctodesgn.c:287
-msgid "Left Angle"
-msgstr "Ângulo a esquerda"
-
-#: ../bin/ctodesgn.c:251 ../bin/ctodesgn.c:288
-msgid "Left Offset"
-msgstr "Distância esquerda"
-
-#: ../bin/ctodesgn.c:252 ../bin/ctodesgn.c:290
-msgid "Right Offset"
-msgstr "Distância direita"
-
-#: ../bin/ctodesgn.c:253 ../bin/ctodesgn.c:291
-msgid "Right Angle"
-msgstr "Ângulo a direita"
-
-#: ../bin/ctodesgn.c:254 ../bin/ctodesgn.c:292
-msgid "Right Length"
-msgstr "Comprimento a direita"
-
-#: ../bin/ctodesgn.c:276
-msgid "Wye Turnout"
-msgstr "AMV em Y"
-
-#: ../bin/ctodesgn.c:317
-msgid "3-way Turnout"
-msgstr "AMV de 3 posições"
-
-#: ../bin/ctodesgn.c:337
-msgid "Crossing"
-msgstr "Cruzamento"
-
-#: ../bin/ctodesgn.c:358
-msgid "Single Slipswitch"
-msgstr "Slipswitch simples"
-
-#: ../bin/ctodesgn.c:379
-msgid "Double Slipswitch"
-msgstr "Slipswitch duplo"
-
-#: ../bin/ctodesgn.c:399
-msgid "Right Crossover"
-msgstr "Sobrecruzamento direito"
-
-#: ../bin/ctodesgn.c:419
-msgid "Left Crossover"
-msgstr "Sobrecruzamento esquerdo"
-
-#: ../bin/ctodesgn.c:439
-msgid "Double Crossover"
-msgstr "Sobrecruzamento duplo"
-
-#: ../bin/ctodesgn.c:457
-msgid "Straight Section"
-msgstr "Seção reta"
-
-#: ../bin/ctodesgn.c:468
-msgid "Angle (Degrees)"
-msgstr "Ângulo (em graus)"
-
-#: ../bin/ctodesgn.c:476
-msgid "Curved Section"
-msgstr "Seção curva"
-
-#: ../bin/ctodesgn.c:495
-msgid "Bumper Section"
-msgstr "Seção de parachoque"
-
-# Esse texto possui dois contextos diferentes. Favor alterar software para distingui-los.
-#: ../bin/ctodesgn.c:505 ../bin/denum.c:123 ../bin/denum.c:186
-#: ../bin/denum.c:218 ../bin/denum.c:219 ../bin/dlayer.c:455
-msgid "Count"
-msgstr "Posição"
-
-#: ../bin/ctodesgn.c:506
-msgid "Radius1"
-msgstr "Raio 1"
-
-#: ../bin/ctodesgn.c:507
-msgid "Radius2"
-msgstr "Raio 2"
-
-#: ../bin/ctodesgn.c:587
-msgid "Turntable Section"
-msgstr "Virador de locomotivas"
-
-#: ../bin/ctodesgn.c:1421
-#, c-format
-msgid "%s Designer"
-msgstr "Editor %s"
-
-#: ../bin/ctodesgn.c:1425
-#, c-format
-msgid "%s %d x %d (of %d x %d)"
-msgstr ""
-
-#: ../bin/ctodesgn.c:1425
-msgid "Page"
-msgstr "Página"
-
-#: ../bin/ctodesgn.c:1433
-msgid "Frog Number"
-msgstr "Número do jacaré"
-
-#: ../bin/ctodesgn.c:1720
-msgid "Turnout Designer"
-msgstr "Editor de AMV"
-
-#: ../bin/ctodesgn.c:1730
-#, c-format
-msgid "%s %s Designer"
-msgstr "Editor %s %s"
-
-#: ../bin/ctrain.c:181 ../bin/dcar.c:1994 ../bin/dcar.c:4078
-#: ../bin/dcar.c:4083
-msgid "Index"
-msgstr "Índice"
-
-#: ../bin/ctrain.c:187 ../bin/dcar.c:4079
-msgid "Rep Marks"
-msgstr "Abreviaturas"
-
-#: ../bin/ctrain.c:261
-msgid "Car"
-msgstr "Material rodante"
-
-#: ../bin/ctrain.c:592
-msgid "Follow"
-msgstr "Seguido"
-
-#: ../bin/ctrain.c:593
-msgid "Auto Reverse"
-msgstr "Auto reverso"
-
-#: ../bin/ctrain.c:612 ../bin/dcar.c:4966
-msgid "Find"
-msgstr "Encontrar"
-
-# não seria melhor "Procurar"
-#: ../bin/ctrain.c:618 ../bin/ctrain.c:877 ../bin/ctrain.c:1187
-#: ../wlib/gtklib/ixhelp.c:239
-msgid "Forward"
-msgstr "Rodar"
-
-#: ../bin/ctrain.c:620 ../bin/ctrain.c:3027 ../bin/dcar.c:4418
-#: ../bin/dcar.c:4428 ../bin/dcar.c:4548 ../bin/fileio.c:236 ../bin/macro.c:87
-msgid "Stop"
-msgstr "Parar"
-
-#: ../bin/ctrain.c:818 ../bin/ctrain.c:847
-msgid "Crashed"
-msgstr "Colisão"
-
-#: ../bin/ctrain.c:820
-msgid "Not on Track"
-msgstr "Isso não é um trilho"
-
-#: ../bin/ctrain.c:824
-msgid "Trains Paused"
-msgstr "Trens parados"
-
-#: ../bin/ctrain.c:826
-msgid "Running"
-msgstr "Rodando"
-
-#: ../bin/ctrain.c:831
-msgid "End of Track"
-msgstr "Fim da linha"
-
-#: ../bin/ctrain.c:835
-msgid "Open Turnout"
-msgstr "AMV aberto"
-
-#: ../bin/ctrain.c:839
-msgid "Manual Stop"
-msgstr "Parada manual"
-
-#: ../bin/ctrain.c:843
-msgid "No Room"
-msgstr "Espaço insuficiente"
-
-#: ../bin/ctrain.c:851
-msgid "Unknown Status"
-msgstr "Estado desconhecido"
-
-#: ../bin/ctrain.c:861
-msgid "No trains"
-msgstr "Nenhum trem"
-
-#: ../bin/ctrain.c:1238
-msgid "Train Control XXX"
-msgstr "Controle do trem XXX"
-
-#: ../bin/ctrain.c:1239
-#, c-format
-msgid "Train Control %d"
-msgstr "Controle do trem %d"
-
-#: ../bin/ctrain.c:1241
-msgid "Train Control"
-msgstr "Controle de trem"
-
-#: ../bin/ctrain.c:3004
-msgid "Train"
-msgstr "Trem"
-
-#: ../bin/ctrain.c:3017
-msgid "Uncouple"
-msgstr "Desengatar"
-
-#: ../bin/ctrain.c:3019
-msgid "Flip Car"
-msgstr "Virar material rodante"
-
-#: ../bin/ctrain.c:3021
-msgid "Flip Train"
-msgstr "Virar trem"
-
-#: ../bin/ctrain.c:3023
-msgid "MU Master"
-msgstr "MU Master"
-
-#: ../bin/ctrain.c:3026
-msgid "Change Direction"
-msgstr "Alternar direção"
-
-#: ../bin/ctrain.c:3030
-msgid "Remove Car"
-msgstr "Remover material rodante"
-
-#: ../bin/ctrain.c:3033
-msgid "Remove Train"
-msgstr "Remover trem"
-
-#: ../bin/cturnout.c:89 ../bin/dcar.c:2016 ../bin/dcar.c:2020
-#: ../bin/dcustmgm.c:64
-msgid "New"
-msgstr "Novo"
-
-#: ../bin/cturnout.c:201
-#, c-format
-msgid "Turnout path[%d:%d] out of bounds: %d"
-msgstr "AMV[%d:%d] fora do limite: %d"
-
-#: ../bin/cturnout.c:213 ../bin/cturnout.c:218
-#, c-format
-msgid "Turnout path[%d] %d is not a track segment"
-msgstr "AMV[%d] %d não se encontra em um segmento"
-
-#: ../bin/cturnout.c:226
-#, c-format
-msgid "Turnout path[%d] %d-%d not connected: %0.3f"
-msgstr "AMV [%d] %d-%d não conectado: %0.3f"
-
-#: ../bin/cturnout.c:262
-msgid "Unknown special case"
-msgstr "Caso especial desconhecido"
-
-#: ../bin/cturnout.c:368
-msgid "Connect Adjustable Tracks"
-msgstr "Conectar trechos ajustáveis"
-
-#: ../bin/cturnout.c:927
-msgid "splitTurnout: can't find segment"
-msgstr "Dividir AMV: não foi possivel encontrar segmento"
-
-#: ../bin/cturnout.c:1337 ../bin/track.c:1952 ../bin/tstraigh.c:542
-msgid "Drag to change track length"
-msgstr "Arrastar para alterar comprimento do trecho"
-
-#: ../bin/cturnout.c:1348
-#, c-format
-msgid "Length=%s"
-msgstr "Comprimento=%s"
-
-#: ../bin/cturnout.c:1609 ../bin/cturnout.c:2585
-msgid "TURNOUT "
-msgstr "AMV "
-
-#: ../bin/cturnout.c:1960
-#, c-format
-msgid "%d connections, max distance %0.3f (%s)"
-msgstr "%d conexões, distancia máxima %0.3f (%s)"
-
-#: ../bin/cturnout.c:1965
-#, c-format
-msgid "0 connections (%s)"
-msgstr "0 conexões (%s)"
-
-#: ../bin/cturnout.c:2005
-msgid "Place New Turnout"
-msgstr "Posicionar novo AMV"
-
-#: ../bin/cturnout.c:2264 ../bin/cturnout.c:2320 ../bin/cturnout.c:2436
-#: ../bin/cturnout.c:2548
-msgid ""
-"Left drag to move, right drag to rotate, press Space or Return to fix track "
-"in place or Esc to cancel"
-msgstr ""
-"Arrastar com o botão esquerdo do mouse para mover, direito para rotacionar, "
-"pressionar barra de espaço ou \"Enter\" para fixar trecho ou \"Esc\" para "
-"anular"
-
-#: ../bin/cturnout.c:2311
-#, c-format
-msgid "Angle = %0.3f (%s)"
-msgstr "Ângulo = %0.3f (%s)"
-
-#: ../bin/cturnout.c:2401 ../bin/param.c:2468
-msgid "Close"
-msgstr "Fechar"
-
-#: ../bin/cturnout.c:2418
-msgid "Pick turnout and active End Point, then place on the layout"
-msgstr "Selecionar AMV e ativar extremidade, e então posicionar no layout"
-
-#: ../bin/cturntbl.c:52 ../bin/cturntbl.c:246 ../bin/cturntbl.c:795
-#: ../bin/cturntbl.c:808
-msgid "Diameter"
-msgstr "Diâmetro"
-
-#: ../bin/cturntbl.c:247
-msgid "# EndPt"
-msgstr "No. da extremidade"
-
-#: ../bin/cturntbl.c:281
-#, c-format
-msgid "Turntable(%d): Layer=%d Center=[%s %s] Diameter=%s #EP=%d"
-msgstr ""
-"Virador(%d): Camada=%d Centro=[%s %s] Diâmetro=%s No. da extremidade=%d"
-
-#: ../bin/cturntbl.c:296 ../bin/cturntbl.c:853
-msgid "Turntable"
-msgstr "Virador de locomotivas"
-
-#: ../bin/cturntbl.c:554
-msgid "Drag to create stall track"
-msgstr "Arrastar para criar ramo"
-
-#: ../bin/cturntbl.c:825
-msgid "Create Turntable"
-msgstr "Criar virador de locomotivas"
-
-#: ../bin/cundo.c:166
-msgid "Undo Trace"
-msgstr "Desfazer traço"
-
-#: ../bin/cundo.c:501
-#, c-format
-msgid "Undo: %s"
-msgstr "Desfazer: %s"
-
-#: ../bin/cundo.c:504 ../../../../build/work/app/bin/bllnhlp.c:136
-msgid "Undo last command"
-msgstr "Desfazer último comando"
-
-#: ../bin/cundo.c:509
-#, c-format
-msgid "Redo: %s"
-msgstr "Refazer: %s"
-
-#: ../bin/cundo.c:512 ../../../../build/work/app/bin/bllnhlp.c:106
-msgid "Redo last undo"
-msgstr "Refazer último comando"
-
-#: ../bin/custom.c:164
-#, c-format
-msgid "%s Turnout Designer"
-msgstr "Editor de AMV %s"
-
-#: ../bin/custom.c:169
-#, c-format
-msgid "%s Version %s"
-msgstr "%s versão %s"
-
-#: ../bin/custom.c:174
-#, c-format
-msgid "%s Files|*.xtc"
-msgstr "%s Arquivos|*.xtc"
-
-#: ../bin/custom.c:179
-#, c-format
-msgid "%s Import Files|*.%sti"
-msgstr "%s importar arquivos|*.%sti"
-
-#: ../bin/custom.c:184
-msgid "Data Exchange Format Files|*.dxf"
-msgstr "Arquivos Data Exchange Format|*.dxf"
-
-#: ../bin/custom.c:188
-#, c-format
-msgid "%s Record Files|*.%str"
-msgstr "%s Arquivos de registro|*.%str"
-
-#: ../bin/custom.c:193
-#, c-format
-msgid "%s Note Files|*.not"
-msgstr "%s Arquivos de notas|*.not"
-
-#: ../bin/custom.c:198
-#, c-format
-msgid "%s Log Files|*.log"
-msgstr "%s Arquivos de Log|*.log"
-
-#: ../bin/custom.c:203
-#, c-format
-msgid "%s PartsList Files|*.txt"
-msgstr "%s Arquivos de Material|*.txt"
-
-#: ../bin/dbench.c:43
-msgid " L-Girder"
-msgstr " Viga mestra em L"
-
-#: ../bin/dbench.c:43
-msgid " T-Girder"
-msgstr "Viga mestra em T"
-
-#: ../bin/dbench.c:66
-msgid "On Edge"
-msgstr "À borda"
-
-#: ../bin/dbench.c:67
-msgid "Flat"
-msgstr "Plano"
-
-#: ../bin/dbench.c:71
-msgid "Left-Down"
-msgstr "Abaixo à esquerda"
-
-#: ../bin/dbench.c:72
-msgid "Right-Down"
-msgstr "Abaixo à direita"
-
-#: ../bin/dbench.c:73
-msgid "Left-Up"
-msgstr "Acima à esquerda"
-
-#: ../bin/dbench.c:74
-msgid "Right-Up"
-msgstr "Acima à direita"
-
-#: ../bin/dbench.c:75
-msgid "Left-Inverted"
-msgstr "Esquerdo invertido"
-
-#: ../bin/dbench.c:76
-msgid "Right-Inverted"
-msgstr "Direito invertido"
-
-#: ../bin/dbench.c:81
-msgid "Inverted"
-msgstr "Invertido"
-
-#: ../bin/dbench.c:147
-#, c-format
-msgid ""
-"Bad BenchType for %s:\n"
-"%s"
-msgstr ""
-"Tipo de bancada não apropriada para %s:\n"
-"%s"
-
-#: ../bin/dbitmap.c:102 ../bin/dbitmap.c:106
-msgid "Drawn with "
-msgstr "Desenhado com "
-
-#: ../bin/dbitmap.c:116
-msgid "Drawing tracks to BitMap"
-msgstr "Desenhando layout em bitmap"
-
-#: ../bin/dbitmap.c:123
-msgid "Writing BitMap to file"
-msgstr "Gravando bitmap em arquivo"
-
-#: ../bin/dbitmap.c:144
-msgid "Print Titles"
-msgstr "Imprimir títulos"
-
-#: ../bin/dbitmap.c:144
-msgid "Print Borders"
-msgstr "Imprimir bordas"
-
-#: ../bin/dbitmap.c:145
-msgid "Print Centerline"
-msgstr "Imprimir linha central"
-
-# São realmente necessários os espaços no texto?
-#: ../bin/dbitmap.c:152
-msgid " dpi"
-msgstr " PPP (pontos por polegada)"
-
-#: ../bin/dbitmap.c:154
-msgid "Bitmap : 99999 by 99999 pixels"
-msgstr "Bitmap : 99999 por 99999 pixels"
-
-#: ../bin/dbitmap.c:156
-msgid "Approximate file size: 999.9Mb"
-msgstr "Tamanho aproximado do arquivo: 999.9 Mb"
-
-#: ../bin/dbitmap.c:186
-#, c-format
-msgid "Bitmap : %ld by %ld pixels"
-msgstr "Bitmap : %ld por %ld pixels"
-
-#: ../bin/dbitmap.c:190
-#, c-format
-msgid "Approximate file size : %0.0f"
-msgstr "Tamanho aproximado do arquivo : %0.0f"
-
-#: ../bin/dbitmap.c:192
-#, c-format
-msgid "Approximate file size : %0.1fKb"
-msgstr "Tamanho aproximado do arquivo : %0.1f Kb"
-
-#: ../bin/dbitmap.c:194
-#, c-format
-msgid "Approximate file size : %0.1fMb"
-msgstr "Tamanho aproximado do arquivo : %0.1f Mb"
-
-#: ../bin/dbitmap.c:208 ../bin/misc.c:1043 ../bin/misc.c:1113
-#: ../bin/param.c:2468 ../wlib/gtklib/browserhelp.c:127
-#: ../../../../build/work/app/bin/bllnhlp.c:539
-msgid "Cancel"
-msgstr "Anular"
-
-#: ../bin/dbitmap.c:213
-msgid "Save Bitmap"
-msgstr "Gravar bitmap"
-
-#: ../bin/dbitmap.c:215
-msgid "Bitmap files|*.bmp"
-msgstr "Arquivos bitmap:*.bmp"
-
-#: ../bin/dbitmap.c:217
-msgid "Bitmap files|*.xpm"
-msgstr "Arquivos bitmap|*.xpm"
-
-#: ../bin/dbitmap.c:238
-msgid "BitMap"
-msgstr "Bitmap"
-
-#: ../bin/dcar.c:53
-msgid "Truck"
-msgstr "Truque"
-
-#: ../bin/dcar.c:53
-msgid "Body"
-msgstr "Carcaça"
-
-#: ../bin/dcar.c:154 ../bin/dcar.c:2445 ../bin/dcar.c:2449
-msgid "Unknown"
-msgstr "Desconhecido"
-
-#: ../bin/dcar.c:487
-msgid "Diesel Loco"
-msgstr "Locomotiva à diesel"
-
-#: ../bin/dcar.c:488
-msgid "Steam Loco"
-msgstr "Locomotiva à vapor"
-
-#: ../bin/dcar.c:489
-msgid "Elect Loco"
-msgstr "Locomotiva elétrica"
-
-#: ../bin/dcar.c:490
-msgid "Freight Car"
-msgstr "Vagão de carga"
-
-#: ../bin/dcar.c:491
-msgid "Psngr Car"
-msgstr "Vagão de passageiro"
-
-#: ../bin/dcar.c:492
-msgid "M-O-W"
-msgstr "Carros de manutenção de linha"
-
-#: ../bin/dcar.c:493 ../bin/doption.c:108
-msgid "Other"
-msgstr "Outros"
-
-#: ../bin/dcar.c:1092 ../bin/dcar.c:4787
-msgid "N/A"
-msgstr "N/A"
-
-#: ../bin/dcar.c:1093 ../bin/dcar.c:4792
-msgid "Mint"
-msgstr "Perfeito"
-
-#: ../bin/dcar.c:1094 ../bin/dcar.c:4791
-msgid "Excellent"
-msgstr "Excelente"
-
-#: ../bin/dcar.c:1095 ../bin/dcar.c:4790
-msgid "Good"
-msgstr "Bom"
-
-#: ../bin/dcar.c:1096 ../bin/dcar.c:4789
-msgid "Fair"
-msgstr "Médio"
-
-#: ../bin/dcar.c:1097 ../bin/dcar.c:4788
-msgid "Poor"
-msgstr "Regular"
-
-#: ../bin/dcar.c:1373 ../bin/dpricels.c:45
-#: ../../../../build/work/app/bin/bllnhlp.c:404
-msgid "Item"
-msgstr "Item"
-
-#: ../bin/dcar.c:1920 ../wlib/gtklib/notice.c:91 ../wlib/mswlib/mswmisc.c:1967
-msgid "Information"
-msgstr "Informação"
-
-#: ../bin/dcar.c:1920
-msgid "Customize"
-msgstr "Personalização"
-
-#: ../bin/dcar.c:1932
-msgid "Sequential"
-msgstr "Sequencial"
-
-#: ../bin/dcar.c:1932
-msgid "Repeated"
-msgstr "Repetido"
-
-#: ../bin/dcar.c:1943 ../bin/dcar.c:1945 ../bin/dcar.c:5117
-msgid "Prototype"
-msgstr "Protótipo"
-
-#: ../bin/dcar.c:1949 ../bin/dcar.c:4078 ../bin/dcar.c:4083
-msgid "Type"
-msgstr "Tipo"
-
-#: ../bin/dcar.c:1951
-msgid "Part"
-msgstr "Parte"
-
-#: ../bin/dcar.c:1953 ../../../../build/work/app/bin/bllnhlp.c:347
-#: ../../../../build/work/app/bin/bllnhlp.c:523
-#: ../../../../build/work/app/bin/bllnhlp.c:524
-msgid "Part Number"
-msgstr "Número da parte"
-
-#: ../bin/dcar.c:1955
-msgid "Loco?"
-msgstr "Locomotiva?"
-
-#: ../bin/dcar.c:1959 ../bin/dcar.c:4116
-msgid "Import"
-msgstr "Importar"
-
-#: ../bin/dcar.c:1966
-msgid "Mode"
-msgstr "Modo"
-
-#: ../bin/dcar.c:1970
-msgid "Road"
-msgstr "Companhia"
-
-#: ../bin/dcar.c:1972
-msgid "Reporting Mark"
-msgstr "Abreviatura"
-
-#: ../bin/dcar.c:1974
-msgid "Number"
-msgstr "Número"
-
-#: ../bin/dcar.c:1978
-msgid "Car Length"
-msgstr "Comprimento do material rodante"
-
-#: ../bin/dcar.c:1982
-msgid "Truck Centers"
-msgstr "Centro dos truques"
-
-#: ../bin/dcar.c:1984
-msgid "Coupler Mount"
-msgstr "Engate"
-
-#: ../bin/dcar.c:1986
-msgid "Coupled Length"
-msgstr "Comprimento engatado"
-
-#: ../bin/dcar.c:1988 ../bin/dcar.c:3954
-msgid "Coupler Length"
-msgstr "Comprimento do engate"
-
-#: ../bin/dcar.c:1996
-msgid "Purchase Price"
-msgstr "Preço de compra"
-
-#: ../bin/dcar.c:1998 ../../../../build/work/app/bin/bllnhlp.c:213
-msgid "Current Price"
-msgstr "Preço atual"
-
-#: ../bin/dcar.c:2000 ../bin/dcar.c:4080 ../bin/dcar.c:4085
-msgid "Condition"
-msgstr "Condição"
-
-#: ../bin/dcar.c:2002
-msgid "Purchase Date"
-msgstr "Data de compra"
-
-#: ../bin/dcar.c:2004 ../bin/dcar.c:4085
-msgid "Service Date"
-msgstr "Data do serviço"
-
-#: ../bin/dcar.c:2006
-msgid "Quantity"
-msgstr "Quantidade"
-
-#: ../bin/dcar.c:2008
-msgid "Numbers"
-msgstr "Números"
-
-#: ../bin/dcar.c:2010 ../bin/dcar.c:4081
-#: ../../../../build/work/app/i18n/custmsg.h:61
-msgid "Notes"
-msgstr "Notas"
-
-#: ../bin/dcar.c:2017 ../bin/dcustmgm.c:65
-msgid "Car Part"
-msgstr "Parte do material rodante"
-
-#: ../bin/dcar.c:2018 ../bin/dcustmgm.c:66
-#: ../../../../build/work/app/bin/bllnhlp.c:188
-#: ../../../../build/work/app/bin/bllnhlp.c:189
-msgid "Car Prototype"
-msgstr "Protótipo do material rodante"
-
-#: ../bin/dcar.c:2379 ../bin/dcar.c:2696
-msgid "Undecorated"
-msgstr "Sem pintura"
-
-#: ../bin/dcar.c:2437 ../bin/dcar.c:2441 ../bin/fileio.c:656
-msgid "Custom"
-msgstr "Personalizado"
-
-#: ../bin/dcar.c:2606
-msgid "Undecorated "
-msgstr "Sem pintura "
-
-#: ../bin/dcar.c:2826
-#, c-format
-msgid "New %s Scale Car"
-msgstr "Novo material rodante na escala %s"
-
-#: ../bin/dcar.c:2827 ../bin/dcar.c:2836 ../bin/dcar.c:2845 ../bin/dcar.c:3984
-#: ../bin/dcar.c:4112
-msgid "Add"
-msgstr "Adicionar"
-
-#: ../bin/dcar.c:2829
-#, c-format
-msgid "Update %s Scale Car"
-msgstr "Atualizar material rodante na escala %s"
-
-#: ../bin/dcar.c:2830 ../bin/dcar.c:2839 ../bin/dcar.c:2848
-#: ../bin/dcmpnd.c:172
-msgid "Update"
-msgstr "Atualizar"
-
-#: ../bin/dcar.c:2835
-#, c-format
-msgid "New %s Scale Car Part"
-msgstr "Novo material rodante na escala %s"
-
-#: ../bin/dcar.c:2838
-#, c-format
-msgid "Update %s Scale Car Part"
-msgstr "Atualizar material rodante na escala %s"
-
-#: ../bin/dcar.c:2844
-msgid "New Prototype"
-msgstr "Novo protótipo"
-
-#: ../bin/dcar.c:2847
-msgid "Update Prototype"
-msgstr "Atualizar protótipo"
-
-#: ../bin/dcar.c:3490
-msgid "Enter a 8 digit numeric date"
-msgstr "Digitar uma data de 8 dígitos numéricos"
-
-#: ../bin/dcar.c:3493
-msgid "Enter a 8 digit date"
-msgstr "Digitar uma data de 8 dígitos"
-
-#: ../bin/dcar.c:3495
-msgid "Enter a date between 19000101 and 21991231"
-msgstr "Digitar uma data entre 19000101 e 21991231"
-
-#: ../bin/dcar.c:3500
-msgid "Invalid month"
-msgstr "Mês inválido"
-
-#: ../bin/dcar.c:3502
-msgid "Invalid day"
-msgstr "Dia inválido"
-
-#: ../bin/dcar.c:3588
-msgid "Enter a Prototype name"
-msgstr "Digitar um nome para o protótipo"
-
-#: ../bin/dcar.c:3590
-msgid "Select or Enter a Manufacturer"
-msgstr "Selecionar ou digitar o fabricante"
-
-#: ../bin/dcar.c:3592
-msgid "Enter a Part Number"
-msgstr "Digitar o número do item"
-
-#: ../bin/dcar.c:3594
-msgid "Enter the Car Length"
-msgstr "Digitar o comprimento do material rodante"
-
-#: ../bin/dcar.c:3596
-msgid "Enter the Car Width"
-msgstr "Digitar a largura do material rodante"
-
-#: ../bin/dcar.c:3598
-msgid "Enter the Truck Centers"
-msgstr "Digitar o centro dos truques"
-
-#: ../bin/dcar.c:3600
-msgid "Truck Centers must be less than Car Length"
-msgstr ""
-"O centro dos truques devem ser menores que o comprimento do material rodante"
-
-#: ../bin/dcar.c:3602
-msgid "Enter the Coupled Length or Coupler Length"
-msgstr "Digitar o comprimento engatado ou o comprimento do engate"
-
-#: ../bin/dcar.c:3604
-msgid "Enter the Coupled Length"
-msgstr "Digitar o comprimento engatado"
-
-#: ../bin/dcar.c:3606
-msgid "Enter a item Index"
-msgstr "Digitar um índice para o item"
-
-#: ../bin/dcar.c:3608
-msgid "Purchase Price is not valid"
-msgstr "Preço de compra inválido"
-
-#: ../bin/dcar.c:3610
-msgid "Current Price is not valid"
-msgstr "Preço atual inválido"
-
-#: ../bin/dcar.c:3612
-msgid "Purchase Date is not valid"
-msgstr "Data de compra inválida"
-
-#: ../bin/dcar.c:3614
-msgid "Service Date is not valid"
-msgstr "Data de serviço inválida"
-
-#: ../bin/dcar.c:3617
-#, c-format
-msgid "Item Index %ld duplicated an existing item: updated to new value"
-msgstr "Índice do item %ld já existente. Atualizado para um novo valor"
-
-#: ../bin/dcar.c:3812
-#, c-format
-msgid "Added %ld new Cars"
-msgstr "%ld novos materiais rodantes adicionados"
-
-#: ../bin/dcar.c:3814
-msgid "Added new Car"
-msgstr "Adicionar novo material rodante"
-
-#: ../bin/dcar.c:3817
-msgid "Updated Car"
-msgstr "Atualizar material rodante"
-
-#: ../bin/dcar.c:3820
-msgid " and Part"
-msgstr " e item"
-
-#: ../bin/dcar.c:3847
-#, c-format
-msgid "%s Part: %s %s %s %s %s %s"
-msgstr "Item %s: %s %s %s %s %s %s"
-
-#: ../bin/dcar.c:3847 ../bin/dcar.c:3864
-msgid "Added new"
-msgstr "Adicionado um novo"
-
-#: ../bin/dcar.c:3847 ../bin/dcar.c:3864
-msgid "Updated"
-msgstr "Atualizado"
-
-#: ../bin/dcar.c:3863
-#, c-format
-msgid "%s Prototype: %s%s."
-msgstr "Protótipo %s: %s%s."
-
-#: ../bin/dcar.c:3865
-msgid ". Enter new values or press Close"
-msgstr ". Digitar novos valores ou clicar em \"Fechar\""
-
-#: ../bin/dcar.c:3984
-msgid "New Car Part"
-msgstr "Novo item de material rodante"
-
-#: ../bin/dcar.c:4079 ../bin/dcar.c:4084
-#: ../../../../build/work/app/bin/bllnhlp.c:377
-msgid "Roadname"
-msgstr "Ferrovia"
-
-#: ../bin/dcar.c:4079
-msgid "Purc Price"
-msgstr "Preço de compra"
-
-#: ../bin/dcar.c:4080 ../bin/dcar.c:4085
-msgid "Curr Price"
-msgstr "Preço atual"
-
-#: ../bin/dcar.c:4080
-msgid "Purc Date"
-msgstr "Data de compra"
-
-#: ../bin/dcar.c:4080
-msgid "Srvc Date"
-msgstr "Data de serviço"
-
-#: ../bin/dcar.c:4081
-msgid "Locat'n"
-msgstr "Localização"
-
-#: ../bin/dcar.c:4084
-msgid "RepMarks"
-msgstr "Abreviaturas"
-
-#: ../bin/dcar.c:4084
-msgid "Purch Price"
-msgstr "Preço de compra"
-
-#: ../bin/dcar.c:4085
-msgid "Purch Date"
-msgstr "Data de compra"
-
-#: ../bin/dcar.c:4102
-msgid "Sort By"
-msgstr "Ordenado por"
-
-#: ../bin/dcar.c:4110 ../bin/dcontmgm.c:99 ../bin/dcustmgm.c:58
-#: ../bin/dcustmgm.c:95
-msgid "Edit"
-msgstr "Editar"
-
-#: ../bin/dcar.c:4114 ../bin/dcontmgm.c:101 ../bin/dcustmgm.c:60
-#: ../bin/misc.c:1993
-msgid "Delete"
-msgstr "Apagar"
-
-#: ../bin/dcar.c:4118 ../bin/fileio.c:1212
-msgid "Export"
-msgstr "Exportar"
-
-#: ../bin/dcar.c:4120 ../../../../build/work/app/bin/bllnhlp.c:540
-msgid "List"
-msgstr "Listar"
-
-#: ../bin/dcar.c:4234 ../bin/dcar.c:4966 ../bin/misc.c:2262
-msgid "Car Inventory"
-msgstr "Invetário de material rodante"
-
-#: ../bin/dcar.c:4354
-msgid "List Cars"
-msgstr "Listar material rodante"
-
-#: ../bin/dcar.c:4476 ../bin/dcar.c:4639
-msgid "Import Cars"
-msgstr "Importar material rodante"
-
-#: ../bin/dcar.c:4640 ../bin/dcar.c:4762
-msgid "Comma-Separated-Values|*.csv"
-msgstr "Valores separados por vírgulas|*.csv"
-
-#: ../bin/dcar.c:4710 ../bin/dcar.c:4761
-msgid "Export Cars"
-msgstr "Exportar material rodante"
-
-#: ../bin/dcar.c:4795
-msgid "Layout"
-msgstr "Layout"
-
-#: ../bin/dcar.c:4797
-msgid "Shelf"
-msgstr "Prateleira"
-
-#: ../bin/dcmpnd.c:76 ../bin/dlayer.c:457 ../bin/misc.c:480 ../bin/misc.c:509
-msgid "Load"
-msgstr "Carregar"
-
-#: ../bin/dcmpnd.c:109
-msgid "Updating definitions, please wait"
-msgstr "Atualizando definições. Aguardar, por favor"
-
-#: ../bin/dcmpnd.c:172
-msgid "Update Title"
-msgstr "Atualizar título"
-
-#: ../bin/dcmpnd.c:232
-#, c-format
-msgid "End-Point #%d of the selected and actual turnouts are not close"
-msgstr "Extremidade No.%d dos AMVs selecionado e corrente não estão próximos"
-
-#: ../bin/dcmpnd.c:241
-#, c-format
-msgid "End-Point #%d of the selected and actual turnouts are not aligned"
-msgstr "Extremidade No.%d dos AMVs selecionado e corrente não estão próximos"
-
-#: ../bin/dcmpnd.c:260
-msgid "The selected Turnout had a differing number of End-Points"
-msgstr "O AMV selecionado tem um número diferente de extremidades"
-
-#: ../bin/dcmpnd.c:321
-msgid "Skip"
-msgstr "Próximo"
-
-#: ../bin/dcmpnd.c:353
-#, c-format
-msgid "%d Track(s) refreshed"
-msgstr "%d trilho(s) redesenhado(s)"
-
-#: ../bin/dcmpnd.c:393
-msgid "Refresh Turnout/Structure"
-msgstr "Atualizar AMV/estrutura"
-
-#: ../bin/dcmpnd.c:395
-msgid "Choose a Turnout/Structure to replace:"
-msgstr "Escolher um AMV/estrutura para substituir:"
-
-#: ../bin/dcmpnd.c:405 ../bin/doption.c:101
-#: ../../../../build/work/app/i18n/custmsg.h:31
-msgid "Turnouts"
-msgstr "AMVs"
-
-#: ../bin/dcmpnd.c:405
-msgid "Structures"
-msgstr "Estruturas"
-
-#: ../bin/dcmpnd.c:434
-msgid "Choose another Turnout/Structure to replace:"
-msgstr "Escolher um(a) outro(a) AMV/estrutura para substituir:"
-
-#: ../bin/dcmpnd.c:536
-msgid "Rename Object"
-msgstr "Renomear objeto"
-
-#: ../bin/dcontmgm.c:92 ../bin/doption.c:108
-msgid "Tracks"
-msgstr "Trilhos"
-
-#: ../bin/dcontmgm.c:173
-#, c-format
-msgid "Are you sure you want to delete the %d control element(s)"
-msgstr ""
-
-#: ../bin/dcontmgm.c:176
-#, fuzzy
-msgid "Control Elements"
-msgstr "Elementos de controle de layout"
-
-#: ../bin/dcontmgm.c:300
-#, fuzzy
-msgid "Manage Layout Control Elements"
-msgstr "Elementos de controle de layout"
-
-#: ../bin/dcustmgm.c:62
-msgid "Move To"
-msgstr "Mover para"
-
-#: ../bin/dcustmgm.c:95
-msgid "Rename"
-msgstr "Renomear"
-
-#: ../bin/dcustmgm.c:162
-msgid "Label"
-msgstr "Etiqueta"
-
-#: ../bin/dcustmgm.c:200
-msgid "Contents Label"
-msgstr "Texto da etiqueta"
-
-#: ../bin/dcustmgm.c:247
-msgid "Move To XTP"
-msgstr "Mover para arquivo de parâmetros"
-
-#: ../bin/dcustmgm.c:248
-msgid "Parameter File|*.xtp"
-msgstr "Arquivo de parâmetros|*.xtp"
-
-#: ../bin/dcustmgm.c:358
-#, fuzzy
-msgid "Manage custom designed parts"
-msgstr "Manipula entradas do editor personalizado"
-
-#: ../bin/dease.c:64
-msgid "Sharp"
-msgstr "Agudo"
-
-#: ../bin/dease.c:64
-msgid "Broad"
-msgstr "Largo"
-
-#: ../bin/dease.c:64
-msgid "Cornu"
-msgstr ""
-
-#: ../bin/dease.c:71
-msgid "Value"
-msgstr "Valor"
-
-#: ../bin/dease.c:72 ../bin/tease.c:509
-msgid "R"
-msgstr "D"
-
-#: ../bin/dease.c:74 ../bin/tease.c:510
-msgid "L"
-msgstr "E"
-
-#: ../bin/dease.c:230
-msgid "Easement"
-msgstr "Curva de transição"
-
-#: ../bin/denum.c:49
-msgid "Prices"
-msgstr "Preços"
-
-#: ../bin/denum.c:54
-msgid "Save As ..."
-msgstr "Salvar como..."
-
-#: ../bin/denum.c:134 ../bin/denum.c:189 ../bin/denum.c:224
-msgid "Each"
-msgstr "Cada"
-
-#: ../bin/denum.c:148 ../bin/denum.c:149
-msgid "Parts List"
-msgstr "Lista de itens"
-
-#: ../bin/denum.c:154
-#, c-format
-msgid ""
-"%s Parts List\n"
-"\n"
-msgstr ""
-"Lista de itens %s\n"
-"\n"
-
-#: ../bin/denum.c:189 ../bin/denum.c:226 ../bin/denum.c:235
-msgid "Extended"
-msgstr "Subtotal"
-
-#: ../bin/denum.c:235 ../bin/denum.c:238
-msgid "Total"
-msgstr "Total"
-
-#: ../bin/dlayer.c:449
-msgid "Visible"
-msgstr "Visível"
-
-#: ../bin/dlayer.c:451
-msgid "Frozen"
-msgstr "Congelado"
-
-#: ../bin/dlayer.c:453
-msgid "On Map"
-msgstr "No mapa"
-
-#: ../bin/dlayer.c:456
-msgid "Personal Preferences"
-msgstr "Preferências pessoais"
-
-#: ../bin/dlayer.c:458 ../bin/macro.c:1246
-msgid "Save"
-msgstr "Salvar"
-
-#: ../bin/dlayer.c:459
-msgid "Defaults"
-msgstr "Valores iniciais"
-
-#: ../bin/dlayer.c:460
-msgid "Number of Layer Buttons"
-msgstr "Número de botões de camadas"
-
-#: ../bin/dlayer.c:477 ../bin/dlayer.c:893 ../bin/dlayer.c:905
-#: ../bin/dlayer.c:950
-msgid "Main"
-msgstr "Principal"
-
-#: ../bin/dlayer.c:587 ../bin/dlayer.c:836 ../bin/dlayer.c:908
-#: ../bin/dlayer.c:952 ../bin/dlayer.c:1190
-msgid "Show/Hide Layer"
-msgstr "Mostrar/Ocultar camada"
-
-#: ../bin/dlayer.c:1023
-msgid "Layers"
-msgstr "Camadas"
-
-#: ../bin/doption.c:99
-msgid "Auto Pan"
-msgstr "Auto panorâmico"
-
-#: ../bin/doption.c:100
-msgid "Dash"
-msgstr "Tracejado"
-
-#: ../bin/doption.c:101
-msgid "All"
-msgstr "Tudo"
-
-#: ../bin/doption.c:102
-msgid "Thick"
-msgstr ""
-
-#: ../bin/doption.c:102
-#, fuzzy
-msgid "Exception"
-msgstr "Trecho excepcional"
-
-#: ../bin/doption.c:103
-msgid "Outline"
-msgstr "Traçado"
-
-#: ../bin/doption.c:103
-msgid "Solid"
-msgstr "Sólido"
-
-#: ../bin/doption.c:104
-msgid "Off"
-msgstr "Desligado"
-
-#: ../bin/doption.c:104
-msgid "On"
-msgstr "Ligado"
-
-#: ../bin/doption.c:105
-msgid "Track Descriptions"
-msgstr "Descrição dos trilhos"
-
-#: ../bin/doption.c:105
-msgid "Lengths"
-msgstr "Comprimentos"
-
-#: ../bin/doption.c:105
-msgid "EndPt Elevations"
-msgstr "Extremidades das elevações"
-
-#: ../bin/doption.c:105
-msgid "Track Elevations"
-msgstr "Elevações dos trilhos"
-
-#: ../bin/doption.c:105
-msgid "Cars"
-msgstr "Material rodante"
-
-#: ../bin/doption.c:106 ../bin/doption.c:107
-msgid "Descr"
-msgstr "Descrição"
-
-#: ../bin/doption.c:107
-msgid "Manuf"
-msgstr "Fabricante"
-
-#: ../bin/doption.c:109
-msgid "Live Map"
-msgstr "Mapa em \"tempo real\""
-
-#: ../bin/doption.c:110
-msgid "Hide Trains On Hidden Track"
-msgstr "Ocultar trens em trecho escondido"
-
-#: ../bin/doption.c:111
-msgid "Zoom keeps lower corner in view"
-msgstr ""
-
-#: ../bin/doption.c:116
-msgid "Color Layers"
-msgstr "Cores das camadas"
-
-#: ../bin/doption.c:117
-msgid "Draw Tunnel"
-msgstr "Desenhar túnel"
-
-#: ../bin/doption.c:118
-msgid "Draw EndPts"
-msgstr "Desenhar extremidades"
-
-#: ../bin/doption.c:119
-#, fuzzy
-msgid "Draw Unconnected EndPts"
-msgstr "Desenhar extremidades"
-
-#: ../bin/doption.c:120
-msgid "Draw Ties"
-msgstr "Desenhar dormentes"
-
-#: ../bin/doption.c:121
-#, fuzzy
-msgid "Draw Centers"
-msgstr "Arrastar ao centro"
-
-#: ../bin/doption.c:122
-msgid "Two Rail Scale"
-msgstr "Escala de duas linhas"
-
-#: ../bin/doption.c:123
-msgid "Map Scale"
-msgstr "Mapa da escala"
-
-#: ../bin/doption.c:127
-msgid "Label Enable"
-msgstr "Etiqueta disponível"
-
-#: ../bin/doption.c:128
-msgid "Label Scale"
-msgstr "Etiqueta de escala"
-
-#: ../bin/doption.c:129
-msgid "Label Font Size"
-msgstr "Etiqueta do tamanho da fonte"
-
-#: ../bin/doption.c:130
-msgid "Hot Bar Labels"
-msgstr "Etiquetas do barra de itens"
-
-#: ../bin/doption.c:131
-msgid "Layout Labels"
-msgstr "Etiquetas do layout"
-
-#: ../bin/doption.c:132
-msgid "List Labels"
-msgstr "Etiquetas das listas"
-
-#: ../bin/doption.c:135
-msgid "Car Labels"
-msgstr "Etiquetas do material rodante"
-
-#: ../bin/doption.c:136
-msgid "Train Update Delay"
-msgstr "Tempo de atualização do trem"
-
-#: ../bin/doption.c:164
-msgid "Display Options"
-msgstr "Opções de tela"
-
-#: ../bin/doption.c:165
-msgid "Proto"
-msgstr "Protótipo"
-
-#: ../bin/doption.c:166
-msgid "Proto/Manuf"
-msgstr "Protótipo / fabricante"
-
-#: ../bin/doption.c:167
-msgid "Proto/Manuf/Part Number"
-msgstr "Protótipo / fabricante / número do item"
-
-#: ../bin/doption.c:168
-msgid "Proto/Manuf/Partno/Item"
-msgstr "Protótipo / fabricante / número do item / item"
-
-#: ../bin/doption.c:169
-msgid "Manuf/Proto"
-msgstr "Fabricante / protótipo"
-
-#: ../bin/doption.c:170
-msgid "Manuf/Proto/Part Number"
-msgstr "Fabricante / protótipo / número do item"
-
-#: ../bin/doption.c:171
-msgid "Manuf/Proto/Partno/Item"
-msgstr "Fabricante / protótipo / número do item / item"
-
-#: ../bin/doption.c:202
-msgid "End-Points"
-msgstr "Extremidades"
-
-#: ../bin/doption.c:210
-msgid "Normal: Command List, Shift: Command Options"
-msgstr "Normal: lista de comandos, Shift: opções dos comandos"
-
-#: ../bin/doption.c:210
-msgid "Normal: Command Options, Shift: Command List"
-msgstr "Normal: opções dos comandos, Shift: lista de comandos"
-
-#: ../bin/doption.c:213
-msgid "Draw Moving Tracks"
-msgstr "Desenhar trechos sendo arrastados"
-
-#: ../bin/doption.c:214
-msgid "Default Command"
-msgstr "Comando padrão"
-
-#: ../bin/doption.c:216
-msgid "Hide Selection Window"
-msgstr "Ocultar janela de seleção"
-
-#: ../bin/doption.c:218
-msgid "Right Click"
-msgstr "Clicar com o botão direito"
-
-#: ../bin/doption.c:244
-msgid "Command Options"
-msgstr "Opções de comandos"
-
-#: ../bin/doption.c:268
-msgid "English"
-msgstr "Inglês"
-
-#: ../bin/doption.c:268
-msgid "Metric"
-msgstr "Métrico"
-
-#: ../bin/doption.c:269
-msgid "Polar"
-msgstr "Polar"
-
-#: ../bin/doption.c:269
-msgid "Cartesian"
-msgstr "Cartesiano"
-
-#: ../bin/doption.c:270
-msgid "Balloon Help"
-msgstr "Balão de ajuda"
-
-#: ../bin/doption.c:271
-msgid "Load Last Layout"
-msgstr "Carregar último layout"
-
-#: ../bin/doption.c:271
-msgid "Start New Layout"
-msgstr "Começar um novo layout"
-
-#: ../bin/doption.c:274
-msgid "Angles"
-msgstr "Ângulos"
-
-#: ../bin/doption.c:275
-msgid "Units"
-msgstr "Unidades"
-
-#: ../bin/doption.c:277
-msgid "Length Format"
-msgstr "Formato do comprimento"
-
-#: ../bin/doption.c:278
-msgid "Min Track Length"
-msgstr "Comprimento do trecho mínimo"
-
-#: ../bin/doption.c:279
-msgid "Connection Distance"
-msgstr "Distância de conexão"
-
-#: ../bin/doption.c:280
-msgid "Connection Angle"
-msgstr "Ângulo de conexão"
-
-#: ../bin/doption.c:281
-msgid "Turntable Angle"
-msgstr "Ângulo do girador de locomotivas"
-
-#: ../bin/doption.c:282
-msgid "Max Coupling Speed"
-msgstr "Velocidade máxima de engate"
-
-#: ../bin/doption.c:284
-msgid "Drag Distance"
-msgstr "Distância para arrastar"
-
-#: ../bin/doption.c:285
-msgid "Drag Timeout"
-msgstr "Tempo máximo para arrastar"
-
-#: ../bin/doption.c:286
-msgid "Min Grid Spacing"
-msgstr "Espaço mínimo do gride"
-
-#: ../bin/doption.c:287
-msgid "Check Point"
-msgstr "Freqüência de salvamento automático."
-
-#: ../bin/doption.c:288
-msgid "On Program Startup"
-msgstr "Ao iniciar programa"
-
-#: ../bin/doption.c:298
-#, fuzzy
-msgid "999.999999"
-msgstr "999,999"
-
-#: ../bin/doption.c:299
-#, fuzzy
-msgid "999.99999"
-msgstr "999,999"
-
-#: ../bin/doption.c:300
-#, fuzzy
-msgid "999.9999"
-msgstr "999,999"
-
-#: ../bin/doption.c:301 ../bin/doption.c:318
-msgid "999.999"
-msgstr "999,999"
-
-#: ../bin/doption.c:302 ../bin/doption.c:319
-msgid "999.99"
-msgstr "999,99"
-
-#: ../bin/doption.c:303 ../bin/doption.c:320
-msgid "999.9"
-msgstr "999,9"
-
-#: ../bin/doption.c:304
-msgid "999 7/8"
-msgstr "999 7/8"
-
-#: ../bin/doption.c:305
-msgid "999 63/64"
-msgstr "999 63/64"
-
-#: ../bin/doption.c:306
-msgid "999' 11.999\""
-msgstr "999′ 11,999″"
-
-#: ../bin/doption.c:307
-msgid "999' 11.99\""
-msgstr "999′ 11,99″"
-
-#: ../bin/doption.c:308
-msgid "999' 11.9\""
-msgstr "999′ 11,9″"
-
-#: ../bin/doption.c:309
-msgid "999' 11 7/8\""
-msgstr "999′ 11 7/8″"
-
-#: ../bin/doption.c:310
-msgid "999' 11 63/64\""
-msgstr "999′ 11 63/64″"
-
-#: ../bin/doption.c:311
-msgid "999ft 11.999in"
-msgstr "999 ft 11,999 in"
-
-#: ../bin/doption.c:312
-msgid "999ft 11.99in"
-msgstr "999 ft 11,99 in"
-
-#: ../bin/doption.c:313
-msgid "999ft 11.9in"
-msgstr "999 ft 11,9 in"
-
-#: ../bin/doption.c:314
-msgid "999ft 11 7/8in"
-msgstr "999 ft 11 7/8 in"
-
-#: ../bin/doption.c:315
-msgid "999ft 11 63/64in"
-msgstr "999 ft 11 63/64 in"
-
-#: ../bin/doption.c:321
-msgid "999.999mm"
-msgstr "999,999 mm"
-
-#: ../bin/doption.c:322
-msgid "999.99mm"
-msgstr "999,99 mm"
-
-#: ../bin/doption.c:323
-msgid "999.9mm"
-msgstr "999,9 mm"
-
-#: ../bin/doption.c:324
-msgid "999.999cm"
-msgstr "999,999 cm"
-
-#: ../bin/doption.c:325
-msgid "999.99cm"
-msgstr "999,99 cm"
-
-#: ../bin/doption.c:326
-msgid "999.9cm"
-msgstr "999,9 cm"
-
-#: ../bin/doption.c:327
-msgid "999.999m"
-msgstr "999,999 m"
-
-#: ../bin/doption.c:328
-msgid "999.99m"
-msgstr "999,99 m"
-
-#: ../bin/doption.c:329
-msgid "999.9m"
-msgstr "999,9 m"
-
-#: ../bin/doption.c:410
-msgid "Preferences"
-msgstr "Preferências"
-
-#: ../bin/doption.c:449
-msgid "Marker"
-msgstr "Marcador"
-
-#: ../bin/doption.c:450
-msgid "Border"
-msgstr "Borda"
-
-#: ../bin/doption.c:451
-msgid "Primary Axis"
-msgstr "Eixo primário"
-
-#: ../bin/doption.c:452
-msgid "Secondary Axis"
-msgstr "Eixo secundário"
-
-#: ../bin/doption.c:453
-msgid "Normal Track"
-msgstr "Trilho normal"
-
-#: ../bin/doption.c:454
-msgid "Selected Track"
-msgstr "Trilho selecionado"
-
-#: ../bin/doption.c:455
-msgid "Profile Path"
-msgstr "Perfil"
-
-#: ../bin/doption.c:456
-msgid "Exception Track"
-msgstr "Trecho excepcional"
-
-#: ../bin/doption.c:457
-msgid "Track Ties"
-msgstr "Dormentes"
-
-#: ../bin/dpricels.c:45
-msgid "Price"
-msgstr "Preço"
-
-#: ../bin/dpricels.c:59
-msgid "Flex Track"
-msgstr "Trilho flexível"
-
-#: ../bin/dpricels.c:60
-msgid "costs"
-msgstr "Custos"
-
-#: ../bin/dpricels.c:154
-msgid "Price List"
-msgstr "Lista de preços"
-
-#: ../bin/dprmfile.c:101
-#, c-format
-msgid "Updating %s"
-msgstr "Atualizando %s"
-
-#: ../bin/dprmfile.c:228
-msgid "Show File Names"
-msgstr "Mostrar nomes dos arquivos"
-
-#: ../bin/dprmfile.c:235
-#, fuzzy
-msgid "Select all"
-msgstr "Selecionar &tudo"
-
-#: ../bin/dprmfile.c:238 ../bin/dprmfile.c:362
-msgid "Unload"
-msgstr "Descarregar"
-
-#: ../bin/dprmfile.c:239
-msgid "Browse ..."
-msgstr "Pesquisar..."
-
-#: ../bin/dprmfile.c:384
-msgid "Reload"
-msgstr "Recarregar"
-
-#: ../bin/dprmfile.c:533
-msgid "Parameter Files"
-msgstr "Lista de parâmetros"
-
-#: ../bin/dprmfile.c:534
-msgid "Load Parameters"
-msgstr "Carregar parâmetros"
-
-#: ../bin/dprmfile.c:534
-msgid "Parameter files|*.xtp"
-msgstr "Arquivos de parâmetros|*.xtp"
-
-#: ../bin/draw.c:1802
-msgid "Macro Zoom Mode"
-msgstr ""
-
-#: ../bin/draw.c:1804
-msgid "Use Shift+PageDwn to jump to preset Zoom In"
-msgstr ""
-
-#: ../bin/draw.c:1809
-msgid "Scale 1:1 - Use Ctrl+PageDwn to go to Macro Zoom Mode"
-msgstr ""
-
-#: ../bin/draw.c:1813
-msgid "Preset Zoom In Value selected. Shift+Ctrl+PageDwn to reset value"
-msgstr ""
-
-#: ../bin/draw.c:1817
-#, fuzzy, c-format
-msgid "Zoom In Program Value %ld:1, Shift+PageDwn to use"
-msgstr "Aproximar valor do programa %ld:1"
-
-#: ../bin/draw.c:1836
-msgid "Use Shift+PageUp to jump to preset Zoom Out"
-msgstr ""
-
-#: ../bin/draw.c:1839
-msgid "At Maximum Zoom Out"
-msgstr ""
-
-#: ../bin/draw.c:1844
-msgid "Preset Zoom Out Value selected. Shift+Ctrl+PageUp to reset value"
-msgstr ""
-
-#: ../bin/draw.c:1848
-#, fuzzy, c-format
-msgid "Zoom Out Program Value %ld:1 set, Shift+PageUp to use"
-msgstr "Afastar valor do programa %ld:1"
-
-#: ../bin/draw.c:2470
-msgid "Map"
-msgstr "Mapa"
-
-#: ../bin/drawgeom.c:79 ../bin/drawgeom.c:94
-msgid "Create Lines"
-msgstr "Criar linhas"
-
-#: ../bin/drawgeom.c:193 ../bin/drawgeom.c:206
-msgid "Drag to place next end point"
-msgstr "Arrastar para posicionar próxima extremidade"
-
-#: ../bin/drawgeom.c:238
-msgid "Drag to set radius"
-msgstr "Arrastar para definir o raio"
-
-#: ../bin/drawgeom.c:251
-msgid "Drag set box size"
-msgstr "Arrastar para ajustar tamanho do retângulo"
-
-#: ../bin/drawgeom.c:293 ../bin/drawgeom.c:302
-#, c-format
-msgid "Length = %s, Angle = %0.2f"
-msgstr "Comprimento = %s, Ângulo = %0.2f"
-
-# Ajustar software para imprimir virgulas ao invés de pontos decimais.
-#: ../bin/drawgeom.c:319
-#, c-format
-msgid "Straight Line: Length=%s Angle=%0.3f"
-msgstr "Trecho reto: Comprimento=%s Ângulo=%0.3f"
-
-#: ../bin/drawgeom.c:342
-#, c-format
-msgid "Curved Line: Radius=%s Angle=%0.3f Length=%s"
-msgstr "Linha curva: Raio=%s Ângulo=%0.3f Comprimento=%s"
-
-#: ../bin/drawgeom.c:357
-#, c-format
-msgid "Radius = %s"
-msgstr "Raio = %s"
-
-#: ../bin/drawgeom.c:367
-#, c-format
-msgid "Width = %s, Height = %s"
-msgstr "Largura = %s, Altura = %s"
-
-#: ../bin/drawgeom.c:686
-#, c-format
-msgid "Length = %0.3f Angle = %0.3f"
-msgstr "Comprimento = %0.3f Ângulo = %0.3f"
-
-#: ../bin/dxfoutput.c:228
-msgid "Export to DXF"
-msgstr "Exportar para DXF"
-
-#: ../bin/fileio.c:235
-msgid ""
-"\n"
-"Do you want to continue?"
-msgstr ""
-"\n"
-"Continuar?"
-
-#: ../bin/fileio.c:541
-msgid "Parameter"
-msgstr "Parâmetro"
-
-# Confirmar se "putTitle: " deve ser retirado do texto.
-#: ../bin/fileio.c:678
-#, c-format
-msgid "putTitle: title too long: %s"
-msgstr "Título muito longo: %s"
-
-#: ../bin/fileio.c:698
-msgid "Unnamed Trackplan"
-msgstr "Trackplan sem nome"
-
-#: ../bin/fileio.c:714 ../bin/fileio.c:1042
-msgid "Check Pointing"
-msgstr "Salvando arquivo temporário."
-
-#: ../bin/fileio.c:944
-msgid "Track"
-msgstr "Trilho"
-
-#: ../bin/fileio.c:1008
-msgid "Save Tracks"
-msgstr "Salvar layout"
-
-#: ../bin/fileio.c:1022
-#, fuzzy
-msgid "Save Tracks As"
-msgstr "Salvar layout"
-
-#: ../bin/fileio.c:1030
-msgid "Open Tracks"
-msgstr "Abrir layout"
-
-#: ../bin/fileio.c:1163 ../bin/fileio.c:1181
-msgid "Import Tracks"
-msgstr "Importar layout"
-
-#: ../bin/fileio.c:1242
-msgid "Export Tracks"
-msgstr "Exportar layout"
-
-#: ../bin/fileio.c:1262
-msgid "Clipboard"
-msgstr "Área de transferência"
-
-#: ../bin/fileio.c:1305 ../bin/misc.c:1986
-msgid "Paste"
-msgstr "Colar"
-
-# Provavelmente uma mensagem de log que não necessita de tradução.
-#: ../bin/i18n.c:66
-#, c-format
-msgid "Gettext initialized (PACKAGE=%s, LOCALEDIR=%s, LC_ALL=%s).\n"
-msgstr "Gettext iniciado (PACKAGE=%s, LOCALEDIR=%s, LC_ALL=%s).\n"
-
-#: ../bin/layout.c:234
-msgid "Room Width"
-msgstr "Largura do cômodo"
-
-#: ../bin/layout.c:235
-msgid " Height"
-msgstr " Comprimento"
-
-#: ../bin/layout.c:236
-msgid "Layout Title"
-msgstr "Título do layout"
-
-#: ../bin/layout.c:237
-msgid "Subtitle"
-msgstr "Subtítulo"
-
-# Seria possível remover os espaços do texto original?
-#: ../bin/layout.c:241
-msgid " Gauge"
-msgstr " Bitola"
-
-#: ../bin/layout.c:243
-msgid "Min Track Radius"
-msgstr "Raio mínimo"
-
-#: ../bin/layout.c:244
-msgid " Max Track Grade (%)"
-msgstr "Inclinação máxima (%)"
-
-#: ../bin/layout.c:311
-msgid "Layout Options"
-msgstr "Opções de layout"
-
-#: ../bin/macro.c:90
-msgid "Message"
-msgstr "Mensagem"
-
-#: ../bin/macro.c:93
-msgid "End"
-msgstr "Fim"
-
-#: ../bin/macro.c:174
-msgid "Recording"
-msgstr "Gravando"
-
-# "Próximo passo"? Provavelmente temos o mesmo texto sendo utilizado para dois contextos diferentes: playback e demo.
-#: ../bin/macro.c:209
-msgid "End of Playback. Hit Step to exit\n"
-msgstr "Fim da gravação. Teclar \"Próximo passo\" para sair\n"
-
-#: ../bin/macro.c:273
-msgid "Record"
-msgstr "Gravar"
-
-#: ../bin/macro.c:603
-msgid "Step"
-msgstr "Próximo passo"
-
-#: ../bin/macro.c:606 ../bin/macro.c:1367
-msgid "Next"
-msgstr "Próxima demonstração"
-
-#: ../bin/macro.c:609 ../bin/misc.c:565
-msgid "Quit"
-msgstr "Sair"
-
-#: ../bin/macro.c:612 ../../../../build/work/app/bin/bllnhlp.c:495
-msgid "Speed"
-msgstr "Velocidade"
-
-#: ../bin/macro.c:838 ../bin/macro.c:1228
-msgid "Demo"
-msgstr "Demonstração"
-
-#: ../bin/macro.c:1023
-#, c-format
-msgid "Elapsed time %lu\n"
-msgstr "Tempo percorrido %lu\n"
-
-#: ../bin/macro.c:1157
-msgid "Playback"
-msgstr "Playback"
-
-#: ../bin/macro.c:1231
-msgid "Slowest"
-msgstr "Mínimo"
-
-#: ../bin/macro.c:1232
-msgid "Slow"
-msgstr "Devagar"
-
-#: ../bin/macro.c:1234
-msgid "Fast"
-msgstr "Rápido"
-
-#: ../bin/macro.c:1235
-msgid "Faster"
-msgstr "Mais rápido"
-
-#: ../bin/macro.c:1236
-msgid "Fastest"
-msgstr "Máximo"
-
-#: ../bin/macro.c:1354
-msgid "Can not find PARAMETER playback proc"
-msgstr "Não pôde encontrar PARÂMETRO do procedimento de playback"
-
-#: ../bin/misc.c:164
-msgid "No Messages"
-msgstr "Nenhuma mensagem"
-
-#: ../bin/misc.c:309 ../bin/misc.c:312
-msgid "ABORT"
-msgstr "ABORTAR"
-
-#: ../bin/misc.c:311
-msgid ""
-"\n"
-"Do you want to save your layout?"
-msgstr ""
-"\n"
-"Salvar layout?"
-
-#: ../bin/misc.c:361
-#, c-format
-msgid "No help for %s"
-msgstr "Ajuda inexistente para %s"
-
-#: ../bin/misc.c:464
-msgid ""
-"Save changes to the layout design before closing?\n"
-"\n"
-"If you don't save now, your unsaved changes will be discarded."
-msgstr ""
-"Salvar alterações no projeto do layout antes de fechar?\n"
-"\n"
-"Se não salvar neste momento, suas alterações serão perdidas."
-
-#: ../bin/misc.c:466 ../bin/misc.c:2028
-msgid "&Save"
-msgstr "&Salvar"
-
-#: ../bin/misc.c:466 ../bin/misc.c:490
-msgid "&Cancel"
-msgstr "&Anular"
-
-#: ../bin/misc.c:466
-msgid "&Don't Save"
-msgstr "&Não salvar"
-
-#: ../bin/misc.c:488
-msgid ""
-"Do you want to return to the last saved state?\n"
-"\n"
-"Revert will cause all changes done since last save to be lost."
-msgstr ""
-"Retornar ao último estado salvo?\n"
-"\n"
-"Revert will cause all changes done since last save to be lost."
-
-#: ../bin/misc.c:490
-msgid "&Revert"
-msgstr "&Reverter"
-
-#: ../bin/misc.c:716
-msgid "XTrackCAD Font"
-msgstr "Fonte XTrackCAD"
-
-#: ../bin/misc.c:779
-#, c-format
-msgid "No balloon help for %s\n"
-msgstr "Nenhum balão de ajuda para %s\n"
-
-#: ../bin/misc.c:781 ../../../../build/work/app/bin/bllnhlp.c:558
-#: ../../../../build/work/app/bin/bllnhlp.c:559
-#: ../../../../build/work/app/bin/bllnhlp.c:561
-#: ../../../../build/work/app/bin/bllnhlp.c:562
-#: ../../../../build/work/app/bin/bllnhlp.c:564
-#: ../../../../build/work/app/bin/bllnhlp.c:565
-#: ../../../../build/work/app/bin/bllnhlp.c:566
-#: ../../../../build/work/app/bin/bllnhlp.c:567
-#: ../../../../build/work/app/bin/bllnhlp.c:568
-#: ../../../../build/work/app/bin/bllnhlp.c:569
-#: ../../../../build/work/app/bin/bllnhlp.c:570
-#: ../../../../build/work/app/bin/bllnhlp.c:571
-#: ../../../../build/work/app/bin/bllnhlp.c:572
-#: ../../../../build/work/app/bin/bllnhlp.c:573
-#: ../../../../build/work/app/bin/bllnhlp.c:574
-#: ../../../../build/work/app/bin/bllnhlp.c:575
-#: ../../../../build/work/app/bin/bllnhlp.c:576
-#: ../../../../build/work/app/bin/bllnhlp.c:577
-#: ../../../../build/work/app/bin/bllnhlp.c:578
-#: ../../../../build/work/app/bin/bllnhlp.c:579
-#: ../../../../build/work/app/bin/bllnhlp.c:580
-#: ../../../../build/work/app/bin/bllnhlp.c:581
-#: ../../../../build/work/app/bin/bllnhlp.c:582
-#: ../../../../build/work/app/bin/bllnhlp.c:583
-#: ../../../../build/work/app/bin/bllnhlp.c:584
-#: ../../../../build/work/app/bin/bllnhlp.c:585
-#: ../../../../build/work/app/bin/bllnhlp.c:586
-#: ../../../../build/work/app/bin/bllnhlp.c:587
-#: ../../../../build/work/app/bin/bllnhlp.c:588
-#: ../../../../build/work/app/bin/bllnhlp.c:589
-#: ../../../../build/work/app/bin/bllnhlp.c:590
-#: ../../../../build/work/app/bin/bllnhlp.c:591
-#: ../../../../build/work/app/bin/bllnhlp.c:592
-#: ../../../../build/work/app/bin/bllnhlp.c:593
-#: ../../../../build/work/app/bin/bllnhlp.c:594
-#: ../../../../build/work/app/bin/bllnhlp.c:595
-#: ../../../../build/work/app/bin/bllnhlp.c:596
-#: ../../../../build/work/app/bin/bllnhlp.c:597
-#: ../../../../build/work/app/bin/bllnhlp.c:598
-#: ../../../../build/work/app/bin/bllnhlp.c:599
-#: ../../../../build/work/app/bin/bllnhlp.c:600
-#: ../../../../build/work/app/bin/bllnhlp.c:601
-#: ../../../../build/work/app/bin/bllnhlp.c:602
-#: ../../../../build/work/app/bin/bllnhlp.c:603
-#: ../../../../build/work/app/bin/bllnhlp.c:604
-#: ../../../../build/work/app/bin/bllnhlp.c:605
-#: ../../../../build/work/app/bin/bllnhlp.c:606
-#: ../../../../build/work/app/bin/bllnhlp.c:607
-#: ../../../../build/work/app/bin/bllnhlp.c:608
-#: ../../../../build/work/app/bin/bllnhlp.c:609
-#: ../../../../build/work/app/bin/bllnhlp.c:610
-#: ../../../../build/work/app/bin/bllnhlp.c:611
-#: ../../../../build/work/app/bin/bllnhlp.c:612
-#: ../../../../build/work/app/bin/bllnhlp.c:613
-#: ../../../../build/work/app/bin/bllnhlp.c:614
-#: ../../../../build/work/app/bin/bllnhlp.c:615
-#: ../../../../build/work/app/bin/bllnhlp.c:616
-#: ../../../../build/work/app/bin/bllnhlp.c:617
-#: ../../../../build/work/app/bin/bllnhlp.c:618
-#: ../../../../build/work/app/bin/bllnhlp.c:620
-msgid "No Help"
-msgstr "Nenhuma ajuda"
-
-#: ../bin/misc.c:1041 ../bin/misc.c:1046 ../bin/misc.c:1111
-msgid ""
-"Cancelling the current command will undo the changes\n"
-"you are currently making. Do you want to update?"
-msgstr ""
-"Anulação do último comando desfazerá as alterações\n"
-"que você está fazendo. Continuar?"
-
-#: ../bin/misc.c:1634
-msgid "Sticky Commands"
-msgstr "Comandos \"grudendos\""
-
-#: ../bin/misc.c:1647
-msgid "File Buttons"
-msgstr "Botões de arquivos"
-
-#: ../bin/misc.c:1648
-msgid "Zoom Buttons"
-msgstr "Botões de zoom"
-
-#: ../bin/misc.c:1649
-msgid "Undo Buttons"
-msgstr "Botões de desfazer"
-
-#: ../bin/misc.c:1650
-msgid "Easement Button"
-msgstr "Botão de curva de transição"
-
-#: ../bin/misc.c:1651
-msgid "SnapGrid Buttons"
-msgstr "Botões da grade"
-
-#: ../bin/misc.c:1652
-msgid "Create Track Buttons"
-msgstr "Criar botões de trilhos"
-
-#: ../bin/misc.c:1653
-msgid "Layout Control Elements"
-msgstr "Elementos de controle de layout"
-
-#: ../bin/misc.c:1654
-msgid "Modify Track Buttons"
-msgstr "Modificar botões de trilhos"
-
-#: ../bin/misc.c:1655
-msgid "Properties/Select"
-msgstr "Descrever / Selecionar"
-
-#: ../bin/misc.c:1656
-msgid "Track Group Buttons"
-msgstr "Botões de grupos de trilhos"
-
-#: ../bin/misc.c:1657
-msgid "Train Group Buttons"
-msgstr "Botões de grupos de trens"
-
-#: ../bin/misc.c:1658
-msgid "Create Misc Buttons"
-msgstr "Criar botões de miscelâneas"
-
-#: ../bin/misc.c:1659
-msgid "Ruler Button"
-msgstr "Botão da régua"
-
-#: ../bin/misc.c:1660
-msgid "Layer Buttons"
-msgstr "Botões das camadas"
-
-#: ../bin/misc.c:1661
-msgid "Hot Bar"
-msgstr "Barra de itens"
-
-#: ../bin/misc.c:1744 ../../../../build/work/app/bin/bllnhlp.c:72
-msgid "Change Elevations"
-msgstr "Alterar elevações"
-
-#: ../bin/misc.c:1744
-msgid "Change"
-msgstr "Alterar"
-
-#: ../bin/misc.c:1757
-msgid "Angle:"
-msgstr "Ângulo:"
-
-#: ../bin/misc.c:1792
-msgid "180 "
-msgstr "180 "
-
-#: ../bin/misc.c:1793
-msgid "90 CW"
-msgstr "90° sentido horário"
-
-#: ../bin/misc.c:1794
-msgid "45 CW"
-msgstr "45° sentido horário"
-
-#: ../bin/misc.c:1795
-msgid "30 CW"
-msgstr "30° sentido horário"
-
-#: ../bin/misc.c:1796
-msgid "15 CW"
-msgstr "15° sentido horário"
-
-#: ../bin/misc.c:1797
-msgid "15 CCW"
-msgstr "15° sentido anti-horário"
-
-#: ../bin/misc.c:1798
-msgid "30 CCW"
-msgstr "30° sentido anti-horário"
-
-#: ../bin/misc.c:1799
-msgid "45 CCW"
-msgstr "45° sentido anti-horário"
-
-#: ../bin/misc.c:1800
-msgid "90 CCW"
-msgstr "90° sentido anti-horário"
-
-#: ../bin/misc.c:1801
-msgid "Enter Angle ..."
-msgstr "Entrar ângulo..."
-
-#: ../bin/misc.c:1828
-msgid "Debug"
-msgstr "Debugar"
-
-#: ../bin/misc.c:1956
-msgid "&File"
-msgstr "&Arquivo"
-
-#: ../bin/misc.c:1957
-msgid "&Edit"
-msgstr "&Editar"
-
-#: ../bin/misc.c:1958
-msgid "&View"
-msgstr "&Visualizar"
-
-#: ../bin/misc.c:1959
-msgid "&Add"
-msgstr "&Adicionar"
-
-#: ../bin/misc.c:1960
-msgid "&Change"
-msgstr "&Alterar"
-
-#: ../bin/misc.c:1961
-msgid "&Draw"
-msgstr "&Desenhar"
-
-#: ../bin/misc.c:1962
-msgid "&Manage"
-msgstr "&Gerenciar"
-
-#: ../bin/misc.c:1963
-msgid "&Options"
-msgstr "&Opções"
-
-#: ../bin/misc.c:1964
-msgid "&Macro"
-msgstr "&Macro"
-
-#: ../bin/misc.c:1965
-msgid "&Window"
-msgstr "&Janela"
-
-#: ../bin/misc.c:1966
-msgid "&Help"
-msgstr "&Ajuda"
-
-#: ../bin/misc.c:1972 ../bin/misc.c:1973
-msgid "Commands"
-msgstr "Comandos"
-
-#: ../bin/misc.c:1974
-msgid "Undo"
-msgstr "Desfazer"
-
-#: ../bin/misc.c:1975
-msgid "Redo"
-msgstr "Refazer"
-
-#: ../bin/misc.c:1976 ../bin/misc.c:1977
-msgid "Zoom In"
-msgstr "Aproximar"
-
-#: ../bin/misc.c:1978 ../bin/misc.c:1979
-msgid "Zoom Out"
-msgstr "Afastar"
-
-#: ../bin/misc.c:1980
-msgid "SnapGrid Enable"
-msgstr "Grade habilitada"
-
-#: ../bin/misc.c:1981
-msgid "SnapGrid Show"
-msgstr "Mostrar grade"
-
-#: ../bin/misc.c:1982 ../bin/misc.c:2107
-#, fuzzy
-msgid "Show/Hide Map"
-msgstr "Mostrar/Ocultar camada"
-
-#: ../bin/misc.c:1985
-msgid "Copy"
-msgstr "&Copiar"
-
-#: ../bin/misc.c:1987
-msgid "Deselect All"
-msgstr "Deselecionar tudo"
-
-#: ../bin/misc.c:1995 ../bin/misc.c:1996
-msgid "More"
-msgstr "Mais"
-
-#: ../bin/misc.c:2024
-msgid "&New ..."
-msgstr "&Novo ..."
-
-#: ../bin/misc.c:2025
-msgid "&Open ..."
-msgstr "&Abrir..."
-
-#: ../bin/misc.c:2029
-msgid "Save &As ..."
-msgstr "Salvar &como..."
-
-#: ../bin/misc.c:2030
-msgid "Revert"
-msgstr "&Reverter"
-
-#: ../bin/misc.c:2032
-msgid "P&rint Setup ..."
-msgstr "Configuração de &impressão"
-
-#: ../bin/misc.c:2035
-msgid "&Import"
-msgstr "&Importar"
-
-#: ../bin/misc.c:2036
-msgid "Export to &Bitmap"
-msgstr "Exportar para &bitmap"
-
-#: ../bin/misc.c:2037
-msgid "E&xport"
-msgstr "E&xportar"
-
-#: ../bin/misc.c:2038
-msgid "Export D&XF"
-msgstr "Exportar D&XF"
-
-#: ../bin/misc.c:2041
-msgid "Parameter &Files ..."
-msgstr "Arquivos de &parâmetro..."
-
-#: ../bin/misc.c:2042
-msgid "No&tes ..."
-msgstr "N&otas..."
-
-#: ../bin/misc.c:2047
-msgid "E&xit"
-msgstr "&Sair"
-
-#: ../bin/misc.c:2053
-msgid "&Undo"
-msgstr "&Desfazer"
-
-#: ../bin/misc.c:2054
-msgid "R&edo"
-msgstr "&Refazer"
-
-#: ../bin/misc.c:2056
-msgid "Cu&t"
-msgstr "&Cortar"
-
-#: ../bin/misc.c:2057
-msgid "&Copy"
-msgstr "&Copiar"
-
-#: ../bin/misc.c:2058
-msgid "&Paste"
-msgstr "&Colar"
-
-#: ../bin/misc.c:2059
-msgid "De&lete"
-msgstr "&Apagar"
-
-#: ../bin/misc.c:2065
-msgid "Select &All"
-msgstr "Selecionar &tudo"
-
-#: ../bin/misc.c:2066
-msgid "Select Current Layer"
-msgstr "&Selecionar camada atual"
-
-#: ../bin/misc.c:2067
-msgid "&Deselect All"
-msgstr "&Deselecionar tudo"
-
-#: ../bin/misc.c:2068
-msgid "&Invert Selection"
-msgstr "&Inverter seleção"
-
-#: ../bin/misc.c:2069
-msgid "Select Stranded Track"
-msgstr "Selecionar trecho pego"
-
-#: ../bin/misc.c:2071
-msgid "Tu&nnel"
-msgstr "&Túnel"
-
-#: ../bin/misc.c:2072
-msgid "A&bove"
-msgstr "A&cima"
-
-#: ../bin/misc.c:2073
-msgid "Belo&w"
-msgstr "Abai&xo"
-
-#: ../bin/misc.c:2076
-msgid "Thin Tracks"
-msgstr "Trilhos finos"
-
-#: ../bin/misc.c:2077
-msgid "Medium Tracks"
-msgstr "Trilhos médios"
-
-#: ../bin/misc.c:2078
-msgid "Thick Tracks"
-msgstr "Trilhos largos"
-
-#: ../bin/misc.c:2083
-msgid "Zoom &In"
-msgstr "Aproximar"
-
-#: ../bin/misc.c:2084
-msgid "&Zoom"
-msgstr "&Zoom"
-
-#: ../bin/misc.c:2085
-msgid "Zoom &Out"
-msgstr "Afastar"
-
-#: ../bin/misc.c:2094
-msgid "&Redraw"
-msgstr "&Redesenhar"
-
-#: ../bin/misc.c:2095
-msgid "Redraw All"
-msgstr "Redesenhar tudo"
-
-#: ../bin/misc.c:2098
-msgid "Enable SnapGrid"
-msgstr "Habilitar grade"
-
-#: ../bin/misc.c:2100
-msgid "Show SnapGrid"
-msgstr "Mostrar grade"
-
-#: ../bin/misc.c:2112
-msgid "&Tool Bar"
-msgstr "Barra de &ferramentas"
-
-#: ../bin/misc.c:2162
-msgid "&Loosen Tracks"
-msgstr "Trechos &perdidos"
-
-#: ../bin/misc.c:2171
-msgid "Raise/Lower Elevations"
-msgstr "Aumentar / diminuir elevações"
-
-#: ../bin/misc.c:2176
-msgid "Recompute Elevations"
-msgstr "Recalcular inclinações"
-
-#: ../bin/misc.c:2180
-msgid "Change Scale"
-msgstr "Alterar escala"
-
-#: ../bin/misc.c:2197
-msgid "L&ayout ..."
-msgstr "&Layout..."
-
-#: ../bin/misc.c:2198
-msgid "&Display ..."
-msgstr "&Tela..."
-
-#: ../bin/misc.c:2199
-msgid "Co&mmand ..."
-msgstr "&Comando..."
-
-#: ../bin/misc.c:2200
-msgid "&Easements ..."
-msgstr "Curvas de &transição..."
-
-#: ../bin/misc.c:2201
-msgid "&Fonts ..."
-msgstr "&Fontes..."
-
-#: ../bin/misc.c:2202
-msgid "Stic&ky ..."
-msgstr "Comandos \"&grudendos\"..."
-
-#: ../bin/misc.c:2205
-msgid "&Debug ..."
-msgstr "&Debugar..."
-
-#: ../bin/misc.c:2207
-msgid "&Preferences ..."
-msgstr "&Preferências..."
-
-#: ../bin/misc.c:2208
-msgid "&Colors ..."
-msgstr "&Cores..."
-
-#: ../bin/misc.c:2213
-msgid "&Record ..."
-msgstr "&Gravar..."
-
-#: ../bin/misc.c:2214
-msgid "&Play Back ..."
-msgstr "&Playback..."
-
-#: ../bin/misc.c:2220
-msgid "Main window"
-msgstr "Janela principal"
-
-#: ../bin/misc.c:2232
-msgid "Recent Messages"
-msgstr "Mensagens recentes"
-
-#: ../bin/misc.c:2238
-msgid "Tip of the Day..."
-msgstr "Dica do dia..."
-
-#: ../bin/misc.c:2239
-msgid "&Demos"
-msgstr "&Demonstrações"
-
-#: ../bin/misc.c:2243 ../bin/smalldlg.c:220
-msgid "About"
-msgstr "Sobre"
-
-#: ../bin/misc.c:2253
-msgid "Tur&nout Designer..."
-msgstr "Editor de &AMV"
-
-#: ../bin/misc.c:2255
-#, fuzzy
-msgid "Layout &Control Elements"
-msgstr "Elementos de controle de layout"
-
-#: ../bin/misc.c:2256
-msgid "&Group"
-msgstr "A&grupar"
-
-#: ../bin/misc.c:2257
-msgid "&Ungroup"
-msgstr "&Desagrupar"
-
-#: ../bin/misc.c:2259
-#, fuzzy
-msgid "Custom defined parts..."
-msgstr "Gerenciamento personalizado"
-
-#: ../bin/misc.c:2260
-msgid "Update Turnouts and Structures"
-msgstr "Atualizar AMVs e estruturas"
-
-#: ../bin/misc.c:2266
-msgid "Layers ..."
-msgstr "Camadas"
-
-#: ../bin/misc.c:2269
-msgid "Parts &List ..."
-msgstr "Lista de itens"
-
-#: ../bin/misc.c:2270
-msgid "Price List..."
-msgstr "Lista de preços"
-
-#: ../bin/misc.c:2351
-msgid ""
-"Program was not terminated properly. Do you want to resume working on the "
-"previous trackplan?"
-msgstr ""
-"O programa não foi terminado apropriadamente. Continuar trabalhando no "
-"projeto de layout anterior?"
-
-#: ../bin/misc.c:2352
-msgid "Resume"
-msgstr "Continuar"
-
-#: ../bin/misc.c:2461
-#, c-format
-msgid "Unnamed Trackplan - %s(%s)"
-msgstr "Layout sem nome - %s(%s)"
-
-#: ../bin/misc.c:2529
-msgid "Initializing commands"
-msgstr "Iniciando comandos"
-
-#: ../bin/misc.c:2538
-msgid "Initializing menus"
-msgstr "Iniciando menus"
-
-#: ../bin/misc.c:2575
-msgid "Reading parameter files"
-msgstr "Lendo arquivos de parâmetros"
-
-#: ../bin/misc.c:2609
-msgid "Initialization complete"
-msgstr "Iniciação completa"
-
-#: ../bin/param.c:95
-msgid "Unexpected End Of String"
-msgstr "Fim de string não esperado"
-
-#: ../bin/param.c:102
-msgid "Expected digit"
-msgstr "Dígito esperado"
-
-#: ../bin/param.c:109
-msgid "Overflow"
-msgstr "Overflow"
-
-#: ../bin/param.c:157
-msgid "Divide by 0"
-msgstr "Divisão por zero"
-
-#: ../bin/param.c:165
-msgid "Expected /"
-msgstr "Caractere \"/\" esperado"
-
-#: ../bin/param.c:237
-msgid "Invalid Units Indicator"
-msgstr "Indicador de unidades inválido"
-
-#: ../bin/param.c:251
-msgid "Expected End Of String"
-msgstr "Fim de string esperado"
-
-#: ../bin/param.c:274 ../bin/param.c:1294
-#, c-format
-msgid "Invalid Number"
-msgstr "Número inválido"
-
-#: ../bin/param.c:322
-msgid "End Of String"
-msgstr "Fim de string"
-
-#: ../bin/param.c:1301
-#, c-format
-msgid "Enter a value > %ld"
-msgstr "Digitar um valor maior que %ld"
-
-#: ../bin/param.c:1303
-#, c-format
-msgid "Enter a value < %ld"
-msgstr "Digitar um valor menor que %ld"
-
-#: ../bin/param.c:1305
-#, c-format
-msgid "Enter a value between %ld and %ld"
-msgstr "Digitar um valor entre %ld e %ld"
-
-#: ../bin/param.c:1353
-#, c-format
-msgid "Enter a value > %s"
-msgstr "Digitar um valor maior que %s"
-
-#: ../bin/param.c:1356
-#, c-format
-msgid "Enter a value < %s"
-msgstr "Digitar um valor menor que %s"
-
-#: ../bin/param.c:1359
-#, c-format
-msgid "Enter a value between %s and %s"
-msgstr "Digitar um valor entre %s e %s"
-
-#: ../bin/param.c:2495
-msgid "Help"
-msgstr "Ajuda"
-
-#: ../bin/smalldlg.c:63
-msgid "Show tips at start"
-msgstr "Exibir dicas ao iniciar"
-
-#: ../bin/smalldlg.c:69
-msgid "Did you know..."
-msgstr "Você sabia..."
-
-#: ../bin/smalldlg.c:71
-msgid "Previous Tip"
-msgstr "Dica anterior"
-
-#: ../bin/smalldlg.c:72
-msgid "Next Tip"
-msgstr "Próxima dica"
-
-#: ../bin/smalldlg.c:89
-msgid "Tip of the Day"
-msgstr "Dica do dia"
-
-#: ../bin/smalldlg.c:98
-msgid "No tips are available"
-msgstr "Nenhuma dica disponível"
-
-#: ../bin/smalldlg.c:197
-msgid ""
-"XTrackCAD is a CAD (computer-aided design) program for designing model "
-"railroad layouts."
-msgstr ""
-"XTrackCAD é um programa CAD (em inglês, computer aided design) para projetos "
-"de layout de ferromodelismo."
-
-#: ../bin/tbezier.c:170
-#, c-format
-msgid "Bezier Curve: length=%s min radius=%s"
-msgstr ""
-
-#: ../bin/tbezier.c:232
-#, fuzzy
-msgid "Z1"
-msgstr "Z"
-
-#: ../bin/tbezier.c:233 ../bin/tcornu.c:279
-#, fuzzy
-msgid "End Angle 1"
-msgstr "Entrar ângulo..."
-
-#: ../bin/tbezier.c:234
-#, fuzzy
-msgid "Ctl Pt 1: X"
-msgstr "Extremidade 1: X"
-
-#: ../bin/tbezier.c:235
-#, fuzzy
-msgid "Ctl Pt 2: X"
-msgstr "Extremidade 2: X"
-
-#: ../bin/tbezier.c:237
-#, fuzzy
-msgid "Z2"
-msgstr "Z"
-
-#: ../bin/tbezier.c:238 ../bin/tcornu.c:284
-#, fuzzy
-msgid "End Angle 2"
-msgstr "Entrar ângulo..."
-
-#: ../bin/tbezier.c:239
-#, fuzzy
-msgid "MinRadius"
-msgstr "Raio"
-
-#: ../bin/tbezier.c:244
-#, fuzzy
-msgid "Line Color"
-msgstr "Cor %s"
-
-#: ../bin/tbezier.c:341
-#, fuzzy, c-format
-msgid ""
-"Bezier %s(%d): Layer=%u MinRadius=%s Length=%s EP=[%0.3f,%0.3f] [%0.3f,"
-"%0.3f] CP1=[%0.3f,%0.3f] CP2=[%0.3f, %0.3f]"
-msgstr ""
-"Trecho curvo(%d): Camada=%d Raio=%s Comprimento=%s Centro=[%s,%s] "
-"Extremidades=[%0.3f,%0.3f θ%0.3f] [%0.3f,%0.3f θ%0.3f]"
-
-#: ../bin/tbezier.c:399
-#, fuzzy
-msgid "Bezier Track"
-msgstr "Trecho em hélice"
-
-#: ../bin/tbezier.c:768
-msgid "Merge Bezier"
-msgstr ""
-
-#: ../bin/tcornu.c:210
-#, c-format
-msgid "Cornu Curve: length=%0.3f min radius=%0.3f"
-msgstr ""
-
-#: ../bin/tcornu.c:278
-#, fuzzy
-msgid "Elev 1"
-msgstr "Elev = %s"
-
-#: ../bin/tcornu.c:280
-#, fuzzy
-msgid "Radius 1"
-msgstr "Raio 1"
-
-#: ../bin/tcornu.c:281
-#, fuzzy
-msgid "End Radius Center 1: X"
-msgstr "Extremidade 1: X"
-
-#: ../bin/tcornu.c:283
-#, fuzzy
-msgid "Elev 2"
-msgstr "Elev = %s"
-
-#: ../bin/tcornu.c:285
-#, fuzzy
-msgid "Radius 2"
-msgstr "Raio 2"
-
-#: ../bin/tcornu.c:286
-#, fuzzy
-msgid "End Radius Center 2: X"
-msgstr "Extremidade 2: X"
-
-#: ../bin/tcornu.c:287
-#, fuzzy
-msgid "Minimum Radius"
-msgstr "Raio mínimo"
-
-#: ../bin/tcornu.c:288
-msgid "Maximum Rate Of Change Of Curvature"
-msgstr ""
-
-#: ../bin/tcornu.c:289
-msgid "Total Winding Angle"
-msgstr ""
-
-#: ../bin/tcornu.c:410
-#, fuzzy, c-format
-msgid ""
-"Cornu Track(%d): Layer=%u MinRadius=%s Length=%s EP=[%0.3f,%0.3f] [%0.3f,"
-"%0.3f]"
-msgstr ""
-"Trecho curvo(%d): Camada=%d Raio=%s Comprimento=%s Centro=[%s,%s] "
-"Extremidades=[%0.3f,%0.3f θ%0.3f] [%0.3f,%0.3f θ%0.3f]"
-
-#: ../bin/tcornu.c:463
-#, fuzzy
-msgid "Cornu Track"
-msgstr "Trecho curvo"
-
-#: ../bin/tcornu.c:907
-#, fuzzy
-msgid "Merge Cornu"
-msgstr "Fundir curvas"
-
-#: ../bin/tcurve.c:234
-#, c-format
-msgid "Helix: turns=%ld length=%s grade=%0.1f%% sep=%s"
-msgstr "Hélice: voltas=%ld comprimento=%s inclinação=%0.1f%% separação=%s"
-
-#: ../bin/tcurve.c:240
-#, c-format
-msgid "Helix: turns=%ld length=%s"
-msgstr "Hélice: voltas=%ld comprimento=%s"
-
-#: ../bin/tcurve.c:357
-msgid "Angular Length"
-msgstr "Comprimento angular"
-
-#: ../bin/tcurve.c:533
-#, c-format
-msgid ""
-"Helix Track(%d): Layer=%d Radius=%s Turns=%ld Length=%s Center=[%s,%s] EP="
-"[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A%0.3f]"
-msgstr ""
-"Trecho em hélice(%d): Camada=%d Raio=%s Voltas=%ld Comprimento=%s Centro=[%s,"
-"%s] EP=[%0.3f,%0.3f θ%0.3f] [%0.3f,%0.3f θ%0.3f]"
-
-#: ../bin/tcurve.c:543
-#, c-format
-msgid ""
-"Curved Track(%d): Layer=%d Radius=%s Length=%s Center=[%s,%s] EP=[%0.3f,"
-"%0.3f A%0.3f] [%0.3f,%0.3f A%0.3f]"
-msgstr ""
-"Trecho curvo(%d): Camada=%d Raio=%s Comprimento=%s Centro=[%s,%s] "
-"Extremidades=[%0.3f,%0.3f θ%0.3f] [%0.3f,%0.3f θ%0.3f]"
-
-#: ../bin/tcurve.c:620
-msgid "Helix Track"
-msgstr "Trecho em hélice"
-
-#: ../bin/tcurve.c:626
-msgid "Curved Track"
-msgstr "Trecho curvo"
-
-#: ../bin/tcurve.c:980
-msgid "Merge Curves"
-msgstr "Fundir curvas"
-
-#: ../bin/tcurve.c:1047
-msgid "Drag to change angle or create tangent"
-msgstr "Arrastar para alterar ângulo ou criar tangente"
-
-#: ../bin/tcurve.c:1080 ../bin/tcurve.c:1112
-msgid "Curved "
-msgstr "Curva"
-
-#: ../bin/tcurve.c:1086
-msgid "Tangent "
-msgstr "Tangente"
-
-#: ../bin/tcurve.c:1095
-#, c-format
-msgid "Tangent track: Length %s Angle %0.3f"
-msgstr "Trecho tangente: Comprimento %s Ângulo %0.3f"
-
-#: ../bin/tcurve.c:1117
-#, c-format
-msgid "Curved: Radius=%s Length=%s Angle=%0.3f"
-msgstr "Curva: Raio=%s Comprimento=%s Ângulo=%0.3f"
-
-#: ../bin/tease.c:511
-msgid "l0"
-msgstr "l0"
-
-#: ../bin/tease.c:512
-msgid "l1"
-msgstr "l1"
-
-#: ../bin/tease.c:554
-#, c-format
-msgid ""
-"Joint Track(%d): Layer=%d Length=%0.3f EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A"
-"%0.3f]"
-msgstr ""
-"Trecho juntado(%d): Camada=%d Comprimento=%0.3f Extremidades=[%0.3f,%0.3f θ"
-"%0.3f] [%0.3f,%0.3f θ%0.3f]"
-
-#: ../bin/tease.c:599
-msgid "Easement Track"
-msgstr "Trecho de curva de transição"
-
-#: ../bin/tease.c:1265
-msgid "Merge Easements"
-msgstr "Fundir curvas de transição"
-
-#: ../bin/tease.c:1330
-msgid "Split Easement Curve"
-msgstr "Seccionar curva de transição"
-
-#: ../bin/track.c:1112
-msgid "Move Objects Above"
-msgstr "Mover objetos para cima"
-
-#: ../bin/track.c:1132
-msgid "Mode Objects Below"
-msgstr "Mover objetos para baixo"
-
-#: ../bin/track.c:1360
-msgid "Audit"
-msgstr "Auditar"
-
-#: ../bin/track.c:1634
-#, c-format
-msgid "%d Track(s) loosened"
-msgstr "%d trecho(s) liberado(s)"
-
-#: ../bin/track.c:1641
-msgid "No tracks loosened"
-msgstr "Nenhum trecho liberado"
-
-#: ../bin/track.c:1651 ../bin/track.c:1655
-#, c-format
-msgid "Connecting a non-track(%d) to (%d)"
-msgstr "Conectando um objeto(%d) a (%d)"
-
-#: ../bin/track.c:1716
-msgid "Join Abutting Tracks"
-msgstr "Juntar trechos lado a lado"
-
-#: ../bin/track.c:1966 ../bin/tstraigh.c:556
-#, c-format
-msgid "Straight: Length=%s Angle=%0.3f"
-msgstr "Reto: Comprimento=%s Ângulo=%0.3f"
-
-#: ../bin/tstraigh.c:236
-#, c-format
-msgid ""
-"Straight Track(%d): Layer=%d Length=%s EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A"
-"%0.3f]"
-msgstr ""
-"Trecho reto(%d): Camada=%d Comprimento=%s Extremidades=[%0.3f,%0.3f θ%0.3f] "
-"[%0.3f,%0.3f θ%0.3f]"
-
-#: ../bin/tstraigh.c:470
-msgid "Extending Straight Track"
-msgstr "Estendendo trecho reto"
-
-#: ../bin/tstraigh.c:549
-msgid "Straight "
-msgstr "Reto"
-
-#: ../wlib/gtklib/filesel.c:114
-msgid "All files"
-msgstr ""
-
-#: ../wlib/gtklib/font.c:275
-msgid "Font Select"
-msgstr "Seleção de fonte"
-
-#: ../wlib/gtklib/help.c:68
-msgid "&Contents"
-msgstr "&Conteúdo"
-
-#: ../wlib/gtklib/ixhelp.c:243
-msgid "Home"
-msgstr "Início"
-
-#: ../wlib/gtklib/ixhelp.c:247
-#, fuzzy
-msgid "Contents"
-msgstr "&Conteúdo"
-
-#: ../wlib/gtklib/menu.c:541
-msgid "<Empty List>"
-msgstr ""
-
-#: ../wlib/gtklib/notice.c:96 ../wlib/mswlib/mswmisc.c:1972
-#: ../wlib/mswlib/mswmisc.c:2015
-msgid "Warning"
-msgstr "Aviso"
-
-#: ../wlib/gtklib/notice.c:101 ../wlib/mswlib/mswmisc.c:1977
-msgid "Error"
-msgstr "Erro"
-
-#: ../wlib/gtklib/text.c:286
-#, c-format
-msgid "%d of %d"
-msgstr ""
-
-# Texto não está claro. Quais arquivos tenho que copiar em um dos diretórios em questão?
-#: ../wlib/gtklib/wpref.c:114
-#, c-format
-msgid ""
-"The required configuration files could not be located in the expected "
-"location.\n"
-"\n"
-"Usually this is an installation problem. Make sure that these files are "
-"installed in either \n"
-" %s/share/xtrkcad or\n"
-" /usr/lib/%s or\n"
-" /usr/local/lib/%s\n"
-"If this is not possible, the environment variable %s must contain the name "
-"of the correct directory."
-msgstr ""
-"Os arquivos de configuração mínima não foram encontrados.\n"
-"\n"
-"Tipicamente, isso é um problema de instalação. Por favor, tenha certeza que "
-"esses arquivos estejam instalados em \n"
-" %s/share/xtrkcad ou\n"
-" /usr/lib/%s ou\n"
-" /usr/local/lib/%s\n"
-"Se não for possível, a variável de ambiente \"%s\" deverá conter o nome do "
-"diretório correto."
-
-#: ../wlib/gtklib/wpref.c:148 ../wlib/gtklib/wpref.c:193
-msgid "HOME is not set"
-msgstr "Variável HOME não está configurada"
-
-#: ../wlib/gtklib/wpref.c:148 ../wlib/gtklib/wpref.c:157
-#: ../wlib/gtklib/wpref.c:193
-msgid "Exit"
-msgstr "Sair"
-
-#: ../wlib/gtklib/wpref.c:156
-#, c-format
-msgid "Cannot create %s"
-msgstr "Não foi possível criar %s"
-
-#: ../wlib/mswlib/mswmenu.c:884
-msgid "Ctrl+"
-msgstr ""
-
-#: ../wlib/mswlib/mswmenu.c:889
-msgid "Alt+"
-msgstr ""
-
-#: ../wlib/mswlib/mswmenu.c:894
-msgid "Shift+"
-msgstr ""
-
-#: ../wlib/mswlib/mswmenu.c:900
-#, fuzzy
-msgid "Space"
-msgstr "Espaçamento"
-
-#: ../../../../build/work/app/help/messages.h:9
-#, c-format
-msgid ""
-"MSG_CANT_PLACE_FROGPOINTS\tFrog|Points cannot be placed on a turnout, circle "
-"or helix.\tA %s cannot be placed on a turnout, circle or helix."
-msgstr ""
-"MSG_CANT_PLACE_FROGPOINTS\tJacaré|Pontos não podem ser posicionados em um "
-"AMV, circunferência ou hélice.\tUm %s não pode ser posicionado em um AMV, "
-"circunferência ou hélice."
-
-#: ../../../../build/work/app/help/messages.h:10
-#, fuzzy
-msgid ""
-"MSG_SEL_TRK_FROZEN\tA frozen layer contains selected track. Command cannot "
-"be executed."
-msgstr ""
-"MSG_SEL_TRK_FROZEN\tUma camada congelada possui selecionados,..\tUma camada "
-"congelada possui trilhos selecionados\n"
-"selecionados. Comando não pode ser executado."
-
-#: ../../../../build/work/app/help/messages.h:11
-msgid "MSG_HELIX_TURNS_GTR_0\tA Helix must have one or more loops of track."
-msgstr "MSG_HELIX_TURNS_GTR_0\tUma hélice deve possuir um ou mais loops."
-
-#: ../../../../build/work/app/help/messages.h:12
-msgid ""
-"MSG_LARGE_FONT\tA large font has been selected....\tA large font has been "
-"selected.\n"
-"Large fonts may a take a while to load.\n"
-"\n"
-"Do you wish to continue?"
-msgstr ""
-"MSG_LARGE_FONT\tUma fonte grande foi selecionada....\tUma fonte grande foi "
-"selecionada.\n"
-"Fontes grandes podem levar algum tempo para serem carregadas.\n"
-"\n"
-"Continuar?"
-
-#: ../../../../build/work/app/help/messages.h:13
-msgid ""
-"MSG_TODSGN_DESC_NONBLANK\tAll description fields present in the Turnout..."
-"\tAll description fields present in the Turnout\n"
-"Designer must contain appropriate information.\n"
-"Correct inappropriate values and try again."
-msgstr ""
-"MSG_TODSGN_DESC_NONBLANK\tTodos os campos do AMV presentes...\tTodos os "
-"campos do AMV presentes\n"
-"Editor deve conter a informação apropriada.\n"
-"Corrigir valores inapropriados e tentar novamente"
-
-#: ../../../../build/work/app/help/messages.h:14
-msgid ""
-"MSG_GROUP_NONBLANK\tAll fields listed in the Group dialog must contain "
-"data....\tAll fields listed in the Group dialog must contain data.\n"
-"Please enter missing values and try again."
-msgstr ""
-"MSG_GROUP_NONBLANK\tTodos os campos listados na caixa de diálogo de grupo "
-"devem conter dados....\tTodos os campos listados na caixa de diálogo de "
-"grupo devem conter dados.\n"
-"Por favor, digitar os valores restantes e tentar novamente."
-
-#: ../../../../build/work/app/help/messages.h:15
-msgid ""
-"MSG_TODSGN_VALUES_GTR_0\tAll values specified in the Turnout Designer must "
-"be...\tAll values specified in the Turnout Designer must be\n"
-"greater than 0. Correct inappropriate values and try again."
-msgstr ""
-"MSG_TODSGN_VALUES_GTR_0\tTodos os valores especificados no editor de AMV "
-"devem ser...\tTodos os valores especificados no editor de AMV devem ser\n"
-"maiores que zero. Corrigir os valores inapropriados e tentar novamente."
-
-#: ../../../../build/work/app/help/messages.h:16
-#, fuzzy
-msgid "MSG_CURVE_OUT_OF_RANGE\tAngle must be between 0\\u00B0 and 360\\u00B0."
-msgstr "MSG_CURVE_OUT_OF_RANGE\tÂngulo deve estar entre 0° e 360°."
-
-#: ../../../../build/work/app/help/messages.h:17
-#, c-format
-msgid ""
-"MSG_CUSTMGM_DELETE_CONFIRM\tAre you sure you want to delete the NNN "
-"definition(s)?\tAre you sure you want to delete the\n"
-"%d definition(s)?"
-msgstr ""
-"MSG_CUSTMGM_DELETE_CONFIRM\tVocê tem certeza que deseja eliminar as NNN "
-"definição(ões)?\tVocê tem certeza que deseja eliminar as\n"
-"%d definition(ões)?"
-
-#: ../../../../build/work/app/help/messages.h:18
-msgid "MSG_WBITMAP_FAILED\tBitmap create or write function failed."
-msgstr "MSG_WBITMAP_FAILED\tCriação do bitmap ou falha na função de escrita."
-
-#: ../../../../build/work/app/help/messages.h:19
-msgid "MSG_BITMAP_TOO_LARGE\tBitmap is too large."
-msgstr "MSG_BITMAP_TOO_LARGE\tBitmap muito grande."
-
-#: ../../../../build/work/app/help/messages.h:20
-msgid "MSG_CHANGE_ELEV_MODE\tCannot change elevation mode."
-msgstr "MSG_CHANGE_ELEV_MODE\tNão é possível alterar modo de inclinação."
-
-#: ../../../../build/work/app/help/messages.h:21
-msgid ""
-"MSG_GRID_ENABLE_SPACE_GTR_0\tCannot Enable Grid; spacing must be greater "
-"than 0"
-msgstr ""
-"MSG_GRID_ENABLE_SPACE_GTR_0\tNão é possível habilitar grade; espaçamento "
-"deve ser maior que zero"
-
-#: ../../../../build/work/app/help/messages.h:22
-msgid "MSG_LAYER_FREEZE\tCannot freeze current layer"
-msgstr "MSG_LAYER_FREEZE\tNão é possível congelar camada corrente"
-
-#: ../../../../build/work/app/help/messages.h:23
-msgid ""
-"MSG_CANT_GROUP_BUMPER1\tCannot Group Bumper Track. The track has been "
-"unselected."
-msgstr ""
-"MSG_CANT_GROUP_BUMPER1\tNão é possível agrupar trilho com pára-choque. O "
-"trilho foi deselecionado."
-
-#: ../../../../build/work/app/help/messages.h:24
-msgid "MSG_CANNOT_GROUP_TRACK\tCannot Group selected track."
-msgstr "MSG_CANNOT_GROUP_TRACK\tNão é possível agrupar trilhos selecionados."
-
-#: ../../../../build/work/app/help/messages.h:25
-msgid "MSG_LAYER_HIDE\tCannot hide current layer"
-msgstr "MSG_LAYER_HIDE\tImpossível esconder camada corrente"
-
-#: ../../../../build/work/app/help/messages.h:26
-msgid "MSG_JOIN_EASEMENTS\tCannot Join; Easements do not align or abut."
-msgstr ""
-"MSG_JOIN_EASEMENTS\tImpossível juntar; Curvas de transição não estão "
-"alinhadas e nem estão próximas."
-
-#: ../../../../build/work/app/help/messages.h:27
-#, c-format
-msgid ""
-"MSG_TRK_ALREADY_CONN\tFirst|Second track is already connected.\tCannot Join; "
-"%s track is already connected."
-msgstr ""
-"MSG_TRK_ALREADY_CONN\tPrimeiro|Segundo trilho já estão conectados.\tNão é "
-"possível juntar; Trilho %s já está conectado."
-
-#: ../../../../build/work/app/help/messages.h:28
-msgid "MSG_JOIN_TURNTABLE\tCannot join from a turntable, try to a turntable"
-msgstr ""
-"MSG_JOIN_TURNTABLE\tNão é possível juntar a partir de um virador de "
-"locomotivas, tentar no outro sentido"
-
-#: ../../../../build/work/app/help/messages.h:29
-#, fuzzy
-msgid "MSG_JOIN_CORNU_SAME\tCannot Join; Selected endpoints are on same track."
-msgstr ""
-"MSG_JOIN_SAME\tNão é possível juntar; Extremidades selecionadas estão na "
-"mesma linha."
-
-#: ../../../../build/work/app/help/messages.h:30
-msgid "MSG_JOIN_SAME\tCannot Join; Selected endpoints are on same track."
-msgstr ""
-"MSG_JOIN_SAME\tNão é possível juntar; Extremidades selecionadas estão na "
-"mesma linha."
-
-#: ../../../../build/work/app/help/messages.h:31
-msgid ""
-"MSG_SELECTED_TRACKS_PARALLEL\tCannot Join; Selected tracks are parallel."
-msgstr ""
-"MSG_SELECTED_TRACKS_PARALLEL\tNão é possível juntar; Trilhos selecionados "
-"estão paralelos."
-
-#: ../../../../build/work/app/help/messages.h:32
-#, c-format
-msgid ""
-"MSG_PRMFIL_OPEN_NEW\tCannot open New Parameter File: FILENAME\tCannot open "
-"New Parameter File: %s"
-msgstr ""
-"MSG_PRMFIL_OPEN_NEW\tNão é possível abrir novo arquivo de parâmetros: "
-"FILENAME\tNão é possível abrir novo arquivo de parâmetros: %s"
-
-#: ../../../../build/work/app/help/messages.h:33
-msgid "MSG_LAYER_SEL_FROZEN\tCannot select a frozen layer"
-msgstr "MSG_LAYER_SEL_FROZEN\tNão é possível selecionar uma camada congelada"
-
-#: ../../../../build/work/app/help/messages.h:34
-msgid ""
-"MSG_GRID_SHOW_SPACE_GTR_0\tCannot Show Grid; spacing must be greater than 0"
-msgstr ""
-"MSG_GRID_SHOW_SPACE_GTR_0\tNão é possível exibir grade; Espaçamento deve ser "
-"maior que zero"
-
-#: ../../../../build/work/app/help/messages.h:35
-#, c-format
-msgid "MSG_CANT_SPLIT_TRK\tCannot split TYPE track\tCannot split %s track"
-msgstr ""
-"MSG_CANT_SPLIT_TRK\tNão é possível seccionar trilho do tipo TYPE\tNão é "
-"possível seccionar trilho do tipo %s"
-
-#: ../../../../build/work/app/help/messages.h:36
-#, c-format
-msgid ""
-"MSG_CUSTMGM_CANT_WRITE\tCannot write to parameter file: FILENAME\tCannot "
-"write to parameter file: %s"
-msgstr ""
-"MSG_CUSTMGM_CANT_WRITE\tNão é possível escrever no arquivo: FILENAME\tNão é "
-"possível escrever no arquivo: %s"
-
-#: ../../../../build/work/app/help/messages.h:37
-msgid "MSG_CARIMP_DUP_INDEX\tCar Index number duplicated."
-msgstr "MSG_CARIMP_DUP_INDEX\tÍndice do material rodante duplicado."
-
-#: ../../../../build/work/app/help/messages.h:38
-msgid ""
-"MSG_CONN_PARAMS_TOO_SMALL\tConnection parameters reset to minimum values."
-msgstr ""
-"MSG_CONN_PARAMS_TOO_SMALL\tParâmetros de conexão restaurados aos valores "
-"mínimos."
-
-#: ../../../../build/work/app/help/messages.h:39
-msgid "MSG_CANT_PASTE\tCopy/Paste buffer is empty. There is nothing to Paste."
-msgstr ""
-"MSG_CANT_PASTE\tEspaço para copiar/colar está vazio. Não há nada a colar."
-
-#: ../../../../build/work/app/help/messages.h:40
-msgid ""
-"MSG_TODSGN_CROSSOVER_TOO_SHORT\tCrossover length is too short. Correct..."
-"\tCrossover length is too short. Correct\n"
-"inappropriate value(s) and try again."
-msgstr ""
-"MSG_TODSGN_CROSSOVER_TOO_SHORT\tComprimento do sobrecruzamento é muito "
-"pequeno. Corrigir...\tComprimento do sobrecruzamento é muito pequeno. "
-"Corrigir\n"
-"valores inapropriados e tentar novamente."
-
-#: ../../../../build/work/app/help/messages.h:41
-msgid "MSG_CURVE_TOO_LARGE\tCurved track is too large."
-msgstr "MSG_CURVE_TOO_LARGE\tTrecho curvo muito aberto."
-
-#: ../../../../build/work/app/help/messages.h:42
-msgid ""
-"MSG_TODSGN_REPLACE\tDefinition name is already in use. Saving this..."
-"\tDefinition name is already in use. Saving this\n"
-"definition replaces the existing definition.\n"
-"\n"
-"Do you want to continue?"
-msgstr ""
-"MSG_TODSGN_REPLACE\tNome da definição já utilizado. Salvar esta...\tNome da "
-"definição já utilizado. Salvar esta\n"
-"definição substitui a existente.\n"
-"\n"
-"Você deseja continuar?"
-
-#: ../../../../build/work/app/help/messages.h:43
-msgid "MSG_SAVE_CHANGES\tDo you want to save the changes made to your Layout?"
-msgstr ""
-"MSG_SAVE_CHANGES\tVocê deseja salvar as alterações feitas no seu layout?"
-
-#: ../../../../build/work/app/help/messages.h:44
-msgid ""
-"MSG_CARIMP_DUP_COLUMNS\tDuplicate column headers found in Car Import file."
-msgstr ""
-"MSG_CARIMP_DUP_COLUMNS\tNomes de colunas duplicados encontrados no material "
-"rodante importado."
-
-#: ../../../../build/work/app/help/messages.h:45
-msgid "MSG_EP_ON_PATH\tEndpoint already on Path."
-msgstr "MSG_EP_ON_PATH\tExtremidade ainda no caminho."
-
-#: ../../../../build/work/app/help/messages.h:46
-#, c-format
-msgid ""
-"MSG_UPGRADE_VERSION1\tFile version %ld is greater than supported...\tFile "
-"version %ld is greater than supported\n"
-"version %d. You need to upgrade %s\n"
-"to at least version %s."
-msgstr ""
-"MSG_UPGRADE_VERSION1\tVersão do arquivo %ld é maior que a versão...\tVersão "
-"do arquivo %ld é maior que a versão\n"
-"suportada %d. Você precisa atualizar a %s\n"
-"para a versão %s pelo menos."
-
-#: ../../../../build/work/app/help/messages.h:47
-#, c-format
-msgid ""
-"MSG_UPGRADE_VERSION2\tFile version %ld is greater than supported...\tFile "
-"version %ld is greater than supported\n"
-"version %d. You need to upgrade your\n"
-"version of %s"
-msgstr ""
-"MSG_UPGRADE_VERSION2\tVersão %ld do arquivo é maior que a versão...\tVersão "
-"%ld do arquivo é maior que a versão\n"
-"suportada %d. Você precisa atualizar sua versão\n"
-"de %s"
-
-#: ../../../../build/work/app/help/messages.h:48
-#, fuzzy
-msgid ""
-"MSG_MOVE_POINTS_OTHER_SIDE\tFrog angle prevents placement of points. Move "
-"points to opposite side of frog."
-msgstr ""
-"MSG_MOVE_POINTS_OTHER_SIDE\tÂngulo do jacaré impede posicionamento dos "
-"pontos....\tÂngulo do jacaré impede posicionamento dos pontos.\n"
-"Mova os pontos para o lado oposto do jacaré."
-
-#: ../../../../build/work/app/help/messages.h:49
-msgid "MSG_NO_ROOM_BTW_TRKS\tInsufficient space between existing stall tracks."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:50
-#, c-format
-msgid ""
-"MSG_JOIN_DIFFER_ELEV\tJoining tracks with differing elevations (N."
-"NNN)\tJoining tracks with differing elevations (%0.2f)"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:51
-msgid "MSG_DESC_NOT_VISIBLE\tLabel descriptions not visible"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:52
-msgid "MSG_OBJECT_TOO_SHORT\tLength of object is too short."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:53
-#, c-format
-msgid ""
-"MSG_PRINT_MAX_SIZE\tMaximum allowed page size is W x H\tMaximum allowed page "
-"size is %s x %s"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:54
-#, c-format
-msgid ""
-"MSG_PRMFIL_NO_CONTENTS\tNew Parameter File has no CONTENTS line: FILENAME."
-"\tNew Parameter File has no CONTENTS line: %s"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:55
-msgid ""
-"MSG_NO_CARS\tNo Cars are defined for the current scale....\tNo Cars are "
-"defined for the current scale.\n"
-"\n"
-"Do you want to use the Car Inventory dialog?"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:56
-msgid ""
-"MSG_NO_CARPROTO\tNo Car Prototypes are defined....\tNo Car Prototypes are "
-"defined.\n"
-"Load a Prototype definition file using the\n"
-"Parameter Files dialog or create a Prototype\n"
-"definition using the Car Prototype dialog."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:57
-msgid "MSG_CARIMP_NO_DATA\tNo data present in Car Import file."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:58
-msgid "MSG_PRINT_NO_PAGES\tNo pages selected for printing."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:59
-msgid "MSG_NO_PATH_TO_EP\tNo path between Profile and selected endpoint."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:60
-#, c-format
-msgid ""
-"MSG_PRMFIL_NO_MAP\tNo Parameter File Map for CONTENTS\tNo Parameter File Map "
-"for %s"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:61
-msgid "MSG_NO_SELECTED_TRK\tNo track(s) selected!"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:62
-#, c-format
-msgid ""
-"MSG_NO_TURNOUTS_AVAILABLE\tNo Turnouts|Structures are available.\tNo %s are "
-"available."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:63
-msgid ""
-"MSG_CARDESC_VALUE_ZERO\tNumeric values on the Car Description...\tNumeric "
-"values on the Car Description\n"
-"dialog must be greater than 0."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:64
-msgid "MSG_MOVE_OUT_OF_BOUNDS\tObject has moved beyond room boundaries."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:65
-msgid "MSG_PARALLEL_SEP_GTR_0\tParallel separation must be greater than 0."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:66
-msgid ""
-"MSG_CARPART_DUPNAME\tPart Number for this Manufacturer already exists...."
-"\tPart Number for this Manufacturer already exists.\n"
-"\n"
-"Do you want to update it?"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:67
-#, c-format
-msgid ""
-"MSG_PLAYBACK_LISTENTRY\tPlayback: Cannot find list entry: NAME\tPlayback: "
-"Cannot find list entry: %s"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:68
-#, c-format
-msgid ""
-"MSG_PLAYBACK_VERSION_UPGRADE\tPlayback file version %ld is...\tPlayback file "
-"version %ld is\n"
-"greater than supported version %d\n"
-"You need to upgrade your version of %s"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:69
-#, c-format
-msgid ""
-"MSG_DOMOUSE_BAD_OP\tPlayback: unknown action NNN\tPlayback: unknown action %d"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:70
-msgid "MSG_MOVE_POINTS_AWAY_CLOSE\tPoints are to close to frog; move away."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:71
-msgid "MSG_POLY_SHAPES_3_SIDES\tPoly shapes must have at least 3 sides."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:72
-msgid ""
-"MSG_CARPROTO_DUPNAME\tPrototype name already exists....\tPrototype name "
-"already exists.\n"
-"\n"
-"Do you want to update it?"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:73
-msgid "MSG_RADIUS_GTR_0\tRadius must be greater than 0."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:74
-#, c-format
-msgid ""
-"MSG_RESCALE_TOO_BIG\tRescaled tracks do not fit within layouts room "
-"parameters...\tRescaled tracks do not fit within layouts room parameters\n"
-"(Height and width). The layouts room parameters should be\n"
-"set to at least %s by %s."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:75
-msgid ""
-"MSG_CARIMP_MISSING_COLUMNS\tRequired column headers missing from Car Import "
-"file."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:76
-#, c-format
-msgid ""
-"MSG_2ND_TRK_NOT_SEL_UNSEL\tSecond track must be selected|unselected\tSecond "
-"track must be %s."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:77
-msgid "MSG_OUT_OF_BOUNDS\tSelected page is out of bounds."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:78
-msgid "MSG_SEL_POS_FIRST\tSelect position prior to entering Text."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:79
-msgid ""
-"MSG_CARPROTO_BADSEGS\tSelected shapes must define a rectangular area ..."
-"\tSelected shapes must define a rectangular\n"
-"area with length greater than height."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:80
-msgid ""
-"MSG_TOO_FAR_APART_DIVERGE\tSelected tracks deviate too much or are too far "
-"apart from each other."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:81
-msgid "MSG_COMMAND_DISABLED\tSpecified command disabled."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:82
-msgid "MSG_SPLIT_POS_BTW_MERGEPTS\tSplit position between Turnout Points"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:83
-msgid "MSG_SPLIT_PATH_NOT_UNIQUE\tSplit position not on unique path"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:84
-#, c-format
-msgid ""
-"MSG_CARIMP_MISSING_DIMS\tThe following car has no dimensions and a...\tThe "
-"following car has no dimensions and a\n"
-"Car Part description can not be found.\n"
-"\n"
-"%s\n"
-"\n"
-"Do you wish to continue importing other Cars?"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:85
-#, c-format
-msgid ""
-"MSG_CARIMP_MISSING_PARTNO\tThe following car has no Part Number...\tThe "
-"following car has no Part Number\n"
-"\n"
-"%s\n"
-"\n"
-"Do you wish to continue importing other Cars?"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:86
-#, c-format
-msgid ""
-"MSG_CARIMP_IGNORED_COLUMN\tThe following column in the Car Import file will "
-"be ignored:...\tThe following column in the Car Import file will be "
-"ignored:\n"
-"\n"
-"%s"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:87
-msgid ""
-"MSG_CANT_MOVE_UNDER_TRAIN\tThe position of a turnout or turntable cannot be "
-"changed while occupied by a train."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:88
-msgid ""
-"MSG_STRUCT_NO_STRUCTS\tThere are no structures to choose from in the "
-"structure...\tThere are no structures to choose from in the structure\n"
-"selection list. Please check your SCALE, select the\n"
-"<File|Parameter Files> menu to load a Parameter File or\n"
-"create a new Structure with the Group command."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:89
-msgid ""
-"MSG_TURNOUT_NO_TURNOUT\tThere are no turnouts to choose from in the "
-"turnout...\tThere are no turnouts to choose from in the turnout\n"
-"selection list. Please check your SCALE, select the\n"
-"<Manage|Turnout Designer> menu to enter a new turnout\n"
-"or select the <File|Parameter Files> menu to load a\n"
-"Parameter File"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:90
-msgid "MSG_NO_UNCONN_EP\tThere are no unconnected end points for this track"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:91
-msgid "MSG_PULL_FEW_SECTIONS\tThere are too few sections in this loop."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:92
-msgid "MSG_NO_REDO\tThere is nothing to redo!"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:93
-msgid "MSG_NO_UNDO\tThere is nothing to undo!"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:94
-msgid "MSG_TOOMANYSEGSINGROUP\tToo many segments in Group."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:95
-msgid "MSG_CANNOT_CHANGE\tTrack cannot be changed."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:96
-msgid "MSG_POINT_INSIDE_TURNTABLE\tTrack endpoint is within turntable radius."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:97
-msgid ""
-"MSG_MOVE_POINTS_AWAY_NO_INTERSECTION\tTrack intersection not possible; move "
-"points away from frog."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:98
-#, c-format
-msgid ""
-"MSG_TRK_TOO_SHORT\tTrack is too short by N.NNN\t%strack is too short by %0.3f"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:99
-#, c-format
-msgid ""
-"MSG_RADIUS_LSS_EASE_MIN\tTrack radius (N.NNN) is smaller than easement "
-"minimum (N.NNN).\tTrack radius (%s) is smaller than easement minimum (%s)."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:100
-msgid ""
-"MSG_CANT_MODIFY_FROZEN_TRK\tTracks in a frozen layer cannot be modified."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:101
-msgid ""
-"MSG_SEGMENTS_DIFFER\tTurnout definition contains non-track segments...."
-"\tTurnout definition contains non-track segments.\n"
-"\n"
-"Do you want to include them in this update?"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:102
-msgid "MSG_TURNTABLE_DIAM_GTR_0\tTurntable diameter must greater than 0."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:103
-#, c-format
-msgid ""
-"MSG_UNDO_ASSERT\tUndo assertion failure %s:%d...\tUndo assertion failure %s:"
-"%d\n"
-"Val = %ld(%lx)\n"
-"%s\n"
-"Please report this error to the XTrackCAD project development team at "
-"SourceForge."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:104
-#, c-format
-msgid ""
-"MSG_PROG_CORRUPTED\tCritical file damaged!...\tCritical file damaged!\n"
-"\n"
-"%s is corrupt.\n"
-"\n"
-"Please reinstall software."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:105
-#, c-format
-msgid "MSG_PT_IS_NOT_TRK\t[X Y] is not a track\t[%s %s] is not a track."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:106
-msgid ""
-"MSG_BITMAP_SIZE_WARNING\tYou have specified a large Bitmap....\tYou have "
-"specified a large Bitmap.\n"
-"\n"
-"Are you sure you want to continue?"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:107
-#, c-format
-msgid "Are you sure you want to delete these %d car(s)?"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:108
-#, c-format
-msgid ""
-"Cannot open %s file:\n"
-"%s:%s"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:109
-#, c-format
-msgid "Unrecognized Option: %s"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:110
-#, c-format
-msgid ""
-"End-Of-Line is unexpected in a quoted field.\n"
-"%s\n"
-"\n"
-"Do you want to continue reading the file?"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:111
-#, c-format
-msgid ""
-"A comma was expected after this quoted field.\n"
-"%s\n"
-"\n"
-"Do you want to continue reading the file?"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:112
-#, c-format
-msgid ""
-"Error \\\\\"%s\\\\\" occurred while writing %s.\n"
-"Please check disk space and system status."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:113
-#, c-format
-msgid ""
-"At least one path for the Turnout T%d does not\n"
-"terminate on an endpoint. Such a track cannot be grouped.\n"
-"The track has been unselected."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:114
-msgid "inv-pathEndTrk on Path."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:115
-msgid "inv-pathStartTrk on Path"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:116
-#, c-format
-msgid "%s:%d- %s"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:117
-msgid "pathEndTrk not on Path."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:118
-msgid "pathStartTrk not on Path."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:119
-msgid ""
-"The tracks cannot be connected together.\n"
-"\n"
-"Try changing some tracks for a closer fit\n"
-"or increase the Connection Angle value on\n"
-"the Preferences dialog."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:120
-msgid ""
-"The tracks cannot be connected together.\n"
-"\n"
-"Try changing some tracks for a closer fit\n"
-"or increase the Connection Distance and\n"
-"Angle values on the Preferences dialog"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:121
-msgid ""
-"The tracks cannot be connected together.\n"
-"\n"
-"Try changing some tracks for a closer fit\n"
-"or increase the Connection Distance"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:122
-msgid ""
-"The first track for the Align\n"
-"Rotate command must be Selected."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:123
-msgid ""
-"The second track for the Align\n"
-"Rotate command must be Unselected."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:124
-msgid "Too many selected tracks, drawing tracks as End Point."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:125
-msgid "Select an endpoint between two tracks."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:126
-msgid ""
-"According to values that have been entered the diverging\n"
-"track does not connect with the tangent track. Please\n"
-"check the values entered and try again. Check the angle\n"
-"is entered as a frog number or in degrees as specified\n"
-"by Angle Mode radio buttons."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:127
-msgid "Moved before the end of the turnout"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:128
-msgid ""
-"The Coupled Length must be greater than the Car Length,\n"
-"and the Coupler Length must be greater than 0."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:129
-msgid ""
-"The Car Length value must be greater\n"
-"than the Car Width value."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:130
-msgid ""
-"The specified Index is already in use.\n"
-"The Index will be updated to the next available value."
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:131
-msgid ""
-"You have changed values for this object.\n"
-"\n"
-"Are you sure you want to Close?"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:132
-#, c-format
-msgid ""
-"File version %ld is lower than the minimum\n"
-"supported version %d. You need to update your\n"
-"layout file using an older version of %s"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:133
-#, c-format
-msgid ""
-"%s cannot read the demo file:\n"
-"%s"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:134
-#, c-format
-msgid "doDemo: bad number (%d)"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:135
-msgid "Playback TIMEEND without TIMESTART"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:136
-#, c-format
-msgid ""
-"Unknown playback command (%d)\n"
-"%s"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:137
-#, c-format
-msgid ""
-"Playback file version %ld is lower than the\n"
-"minimum supported version %d.\n"
-"You need to update your layout file using an\n"
-"older version of %s"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:138
-#, c-format
-msgid "Scale index (%d) is not valid"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:139
-#, c-format
-msgid ""
-"Scale %s is not valid\n"
-"Please check your %s.xtq file"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:140
-msgid "Cannot extend a helix"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:141
-msgid "Cannot trim a helix"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:142
-msgid "Ignore further audit notices?"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:143
-#, c-format
-msgid "%s"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:144
-msgid "Audit Abort?"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:145
-msgid "Write Audit File?"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:146
-#, c-format
-msgid "checkTrackLength: Short track length = %0.3f"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:147
-#, c-format
-msgid "checkTrackLength: unknown type: %d"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:148
-#, c-format
-msgid "connectTracks: T%d[%d] T%d[%d] d=%0.3f a=%0.3f"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:149
-#, c-format
-msgid "GetAngleAtPoint: bad type(%d) for T(%d)"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:150
-#, c-format
-msgid "joinTracks: invalid track type=%d"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:151
-#, c-format
-msgid "resolveIndex: T%d[%d]: T%d doesn\\\\'t exist"
-msgstr ""
-
-#: ../../../../build/work/app/help/messages.h:152
-msgid "Moved beyond the end of the track"
-msgstr "Movido além do fim do trilho"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:10
-msgid "Invokes on-line help for this dialog"
-msgstr "Invoca ajuda on-line para esta caixa de diálogo"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:11
-msgid "Cancels this command"
-msgstr "Anula este comando"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:12
-msgid "Closes the dialog"
-msgstr "Fecha a caixa de diálogo"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:13
-msgid "About box dialog"
-msgstr "Caixa de diálogo \"Sobre\""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:14
-msgid "Move Selected object to top"
-msgstr "Move objeto selecionado para o topo"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:15
-msgid "Raise or Lower all Selected tracks"
-msgstr "Eleva ou abaixa todo trecho selecionado"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:16
-msgid "Move Selected object to bottom"
-msgstr "Move objeto selecionado para o fundo"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:17
-msgid "Create a section of track for automation"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:18
-msgid "Edit a Block Definition "
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:19
-msgid "Create a new Car/Loco description"
-msgstr "Cria uma nova descrição do material rodante"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:20
-msgid "Manage your Car and Loco Inventory"
-msgstr "Gerencia seu inventário de material rodante"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:21
-msgid "Create track circle from center"
-msgstr "Cria trilho circular a partir do centro"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:22
-msgid "Create fixed radius track circle"
-msgstr "Cria trilho circular com um raio fixo"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:23
-msgid "Set Circle Track creation mode"
-msgstr "Configura modo de criação de trilho circular"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:24
-msgid "Create track circle from tangent"
-msgstr "Cria trilho circular a parti da tangente"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:25
-msgid "Removes elevation from Selected tracks"
-msgstr "Remove inclinação dos trechos selecionados"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:26
-msgid "Command Options dialog"
-msgstr "Caixa de dialogo das opções de comando"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:27
-msgid "Controls colors"
-msgstr "Cores dos controles"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:28
-msgid "Connect two tracks"
-msgstr "Conecta dois trilhos"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:29
-msgid "Create a control for layout automation"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:30
-#, fuzzy
-msgid "Manage control elements"
-msgstr "Elementos de controle de layout"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:31
-msgid "Copy selected objects to clipboard"
-msgstr "Copia objetos selecionados para a área de transferencia"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:32
-msgid "Create curved track from center"
-msgstr "Cria trilho curvado a partir de um centro"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:33
-msgid "Create curved track from chord"
-msgstr "Cria trilho curvado a partir de uma corda"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:34
-msgid "Create curved track from end-point"
-msgstr "Cria trilho curvado a partir de uma extremidade"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:35
-#, fuzzy
-msgid "Create Bezier track"
-msgstr "Criar trecho em hélice"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:36
-msgid "Set Curve Track creation mode"
-msgstr "Configura modo de criação de curva"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:37
-msgid "Create curved track from tangent"
-msgstr "Cria trecho curvado a partir de um tangente"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:38
-msgid "Manipulate Custom designer entries"
-msgstr "Manipula entradas do editor personalizado"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:39
-msgid "Moves selected objects to clipboard"
-msgstr "Move objetos selecionados para a área de transferencia"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:40
-msgid "Delete objects"
-msgstr "Elimina objetos"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:41
-msgid "Playback demos"
-msgstr "Playback de demonstrações"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:42
-msgid "Change Object Properties"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:43
-msgid "Deselect all selected objects"
-msgstr "Deseleciona todos os objetos"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:44
-msgid "Change Display parameters"
-msgstr "Altera parâmetros das janelas"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:45
-msgid "Create benchwork"
-msgstr "Cria bancada"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:46
-msgid "Create a box"
-msgstr "Cria um retângulo"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:47
-msgid "Set Circle drawing command"
-msgstr "Configura comando de desenho de circunferência"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:48
-msgid "Create a circle"
-msgstr "Cria circunferência"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:49
-msgid "Draw a circle line from center"
-msgstr "Desenha uma circunferência a partir do centro"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:50
-msgid "Draw a fixed radius circle line"
-msgstr "Desenha uma circunferência com um raio fixo"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:51
-msgid "Draw a circle line from tangent"
-msgstr "Desenha uma circunferência a partir de uma tangente"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:52
-msgid "Set Curve drawing command"
-msgstr "Configura comando de desenho de circunferência"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:53
-msgid "Create a curved line"
-msgstr "Cria uma linha curva"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:54
-msgid "Create a curved line from End"
-msgstr "Cria uma linha curva a partir de uma extremidade"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:55
-msgid "Create a curved line from center"
-msgstr "Cria uma linha curva a partir de um centro"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:56
-msgid "Create a curved line from chord"
-msgstr "Cria uma linha curva a partir de uma corda"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:57
-msgid "Create a curved line from tangent"
-msgstr "Cria uma linha curva a partir de uma tangente"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:58
-#, fuzzy
-msgid "Create a Bezier line"
-msgstr "Cria uma linha curva"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:59
-msgid "Create a dimension line"
-msgstr "Cria uma linha de uma dimensão"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:60
-msgid "Create a filled box"
-msgstr "Cria um retângulo preenchido"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:61
-msgid "Create a filled circle"
-msgstr "Cria um círculo"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:62
-msgid "Draw a filled circle from center"
-msgstr "Desenha um círculo a partir de um centro"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:63
-msgid "Draw a fixed radius filled circle"
-msgstr "Desenha um círculo com um raio fixo"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:64
-msgid "Draw a filled circle from tangent"
-msgstr "Desenha um círculo a partir de uma tangente"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:65
-msgid "Create a filled polygon"
-msgstr "Cria um polígono preenchido"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:66
-msgid "Create a polyline"
-msgstr "Cria uma linha poligonal"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:67
-msgid "Create a straight line"
-msgstr "Cria uma linha reta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:68
-msgid "Set Line drawing command"
-msgstr "Configura comando de desenho de linha"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:69
-msgid "Set Shape drawing command"
-msgstr "Configura comando de desenho de polígonos"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:70
-msgid "Draw table edge"
-msgstr "Desenha limite do tablado"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:71
-msgid "Easement menu"
-msgstr "Menu de curva de transição"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:73
-msgid "Generate a Parts List of selected objects"
-msgstr "Gera uma lista de itens dos objetos selecionados"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:74
-msgid "Export a .xti file"
-msgstr "Expota um arquivo XTI"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:75
-msgid "Export a DXF file"
-msgstr "Exporta um arquivo DXF"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:76
-msgid "General note about the layout"
-msgstr "Notas gerais sobre o layout"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:77
-msgid "Flip selected objects"
-msgstr "Vira objetos selecionados"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:78
-msgid "Adjust snap grid"
-msgstr "Ajusta grade"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:79
-msgid "Enable snap grid"
-msgstr "Habilita grade"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:80
-msgid "Show snap grid"
-msgstr "Mostra grade"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:81
-msgid "Create a structure from a Group of objects"
-msgstr "Cria uma estrutura a partir de um grupo de objetos"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:82
-msgid "Create a hand-laid turnout"
-msgstr "Cria um AMV personalizado"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:83
-msgid "Create a track helix"
-msgstr "Cria trilho em hélice"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:84
-msgid "Import a .xti file"
-msgstr "Importa um arquivo XTI"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:85
-msgid "Join two tracks"
-msgstr "Junta dois trilhos"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:86
-msgid "Change Layers"
-msgstr "Muda camadas"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:87
-msgid "Selects the current drawing layer"
-msgstr "Seleciona a camada de desenho corrente"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:88
-msgid "Layout parameters"
-msgstr "Parâmetros de layout"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:89
-#, fuzzy
-msgid "Show/Hide Map Window"
-msgstr "Mostrar/Ocultar camada"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:90
-msgid "Modify or extend a track"
-msgstr "Modifica ou estende trilho"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:91
-msgid "Move selected objects"
-msgstr "Move objetos selecionados"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:92
-msgid "Move a label"
-msgstr "Move uma etiqueta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:93
-msgid "Move selected objects to current layer"
-msgstr "Move objetos selecionados para a camada corrente"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:95
-msgid "Print a BitMap"
-msgstr "Imprime um bitmap"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:96
-msgid "Create a parallel track"
-msgstr "Cria um trilho paralelo"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:97
-msgid "Register"
-msgstr "Registra"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:98
-msgid "Copy objects from clipboard"
-msgstr "Copia objetos da área de transferencia"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:99
-msgid "Perferences dialog"
-msgstr "Caixa de diálogo de preferências"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:100
-msgid "Display prices of turnouts, sectional tracks and structures"
-msgstr "Exibe preços de AMVs, trilhos e estruturas"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:101
-msgid "Print the layout"
-msgstr "Imprime o layout"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:102
-msgid "Loads and unloads parameter files"
-msgstr "Carrega e descarrega arquivo de parâmetros"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:103
-msgid "Elevation Profile Command"
-msgstr "Comando de perfil de inclinação"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:105
-msgid "Command recorder"
-msgstr "Comando de gravação"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:107
-msgid "Update selected Turnout and Structure definitions"
-msgstr "Atualiza AMV selecionado e definições de estruturas"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:108
-msgid "Rescale selected objects"
-msgstr "Reescala objetos selecionados"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:109
-msgid "Rotate selected object(s)"
-msgstr "Rotaciona objetos selecionados"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:110
-msgid "Show a ruler"
-msgstr "Exibe régua"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:111
-msgid "Select objects"
-msgstr "Seleciona objetos"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:112
-msgid "Selects all objects on the layout"
-msgstr "Seleciona todos os objetos do layout"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:113
-msgid "Selects all objects in the current Layer"
-msgstr "Seleciona todos os objetos da camada corrente"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:114
-msgid "Invert current selection"
-msgstr "Inverte seleção"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:115
-msgid "Split a track"
-msgstr "Secciona um trilho"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:116
-msgid "Select stranded (unconnected) track pieces"
-msgstr "Seleciona trecho não conectados"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:117
-msgid "Create a sensor (ie. a occupancy detector or a toggle switch)"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:118
-#, fuzzy
-msgid "Create a signal for train control"
-msgstr "Cria trilho circular a parti da tangente"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:119
-msgid "Choose which commands are sticky"
-msgstr ""
-"Escolhe quais comandos são \"grudendos\". Aqueles cujos botões de atalho "
-"continuarão habilitados após seu uso."
-
-#: ../../../../build/work/app/bin/bllnhlp.c:120
-msgid "Create straight track"
-msgstr "Cria um trilho reto"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:121
-msgid "Place a structure on the layout"
-msgstr "Posiciona uma estrutura no layout"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:122
-#, fuzzy
-msgid "Create a switchmotor for turnout control"
-msgstr "Cria uma nova definição de AMV"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:123
-#, fuzzy
-msgid "Edit a switchmotor definition"
-msgstr "Cria uma nova definição de AMV"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:124
-msgid "Enter text on the layout"
-msgstr "Entra um texto no layout"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:125
-#: ../../../../build/work/app/bin/bllnhlp.c:486
-msgid "Controls the size of the entered text"
-msgstr "Controla o tamanho do texto inserido"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:126
-msgid "Tip of the Day window"
-msgstr "Janela de dica do dia"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:127
-msgid "Run Trains"
-msgstr "Roda trens"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:128
-msgid "Pause/Resume Trains"
-msgstr "Pausa / roda trens"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:129
-msgid "Place a car on the layout"
-msgstr "Posiciona material rodante no layout"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:130
-msgid "Exit Trains"
-msgstr "Sai do modo de trem"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:131
-msgid "Hide/Unhide a track"
-msgstr "Oculta / exibe um trilho"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:132
-msgid "Place a turnout or sectional track"
-msgstr "Posiciona um AMV ou trilho"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:133
-msgid "Create a new turnout definition"
-msgstr "Cria uma nova definição de AMV"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:134
-msgid "Place a turntable"
-msgstr "Posiciona um virador de locomotivas"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:135
-msgid "Updates old source files with 3 part titles"
-msgstr "Atualiza arquivos antigos com três partes"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:137
-msgid "Ungroup objects"
-msgstr "Desagrupa objetos"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:138
-msgid "Draw tracks with thin lines"
-msgstr "Desenha trilhos com linhas finas"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:139
-msgid "Draw tracks with medium lines"
-msgstr "Desenha trilhos com linhas médias"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:140
-msgid "Draw tracks with thick lines"
-msgstr "Desenha trilhos com linhas grossas"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:141
-msgid "Change drawing scale"
-msgstr "Altera escala de desenho"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:142
-#: ../../../../build/work/app/bin/bllnhlp.c:154
-msgid "Zoom in"
-msgstr "Aproxima"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:143
-#: ../../../../build/work/app/bin/bllnhlp.c:155
-msgid "Zoom out"
-msgstr "Afasta"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:144
-msgid "File Menu"
-msgstr "Menu de arquivo"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:145
-msgid "Save layout"
-msgstr "Salva layout"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:146
-msgid "Save layout under a new name "
-msgstr "Salva layout com um novo nome"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:147
-msgid "New layout"
-msgstr "Novo layout"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:148
-msgid "Generate parts list"
-msgstr "Gera lista de itens"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:149
-msgid "Load a layout"
-msgstr "Carrega um layout"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:150
-msgid "Exit the program"
-msgstr "Sai do programa"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:151
-msgid "Revert to last saved state of layout plan"
-msgstr "Reverte para o estado do último layout salvo"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:152
-msgid "Edit menu"
-msgstr "Menu editar"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:153
-msgid "Redraw layout"
-msgstr "Redesenha layout"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:156
-#: ../../../../build/work/app/bin/bllnhlp.c:159
-msgid "Tools menu"
-msgstr "Menu de ferramentas"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:157
-msgid "View menu"
-msgstr "Menu visualizar"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:158
-msgid "Toolbar configuration"
-msgstr "Configuração da barra de ferramentas"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:160
-msgid "Options menu"
-msgstr "Menu de opções"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:161
-msgid "Playback/Record commands"
-msgstr "Comandos de playback e gravação"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:162
-msgid "Window menu"
-msgstr "Menu de janelas"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:163
-msgid "Help menu"
-msgstr "Menu de ajuda"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:164
-msgid "Recent error messages and explanations"
-msgstr "Últimas mensagens de erros e explicações"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:165
-msgid "Move Hot Bar left"
-msgstr "Move barra de itens à esquerda"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:166
-msgid "Move Hot Bar right"
-msgstr "Move barra de itens à direita"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:167
-msgid "Total track count"
-msgstr "Total de trilhos"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:168
-msgid "X Position of cursor"
-msgstr "Posição X do cursor"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:169
-msgid "Y Position of cursor"
-msgstr "Posição Y do cursor"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:170
-msgid "Drawing scale"
-msgstr "Escala de desenho"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:171
-msgid "Message and status line"
-msgstr "Mensagem e linha de status"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:172
-#: ../../../../build/work/app/bin/bllnhlp.c:173
-msgid "Main layout canvas"
-msgstr "Tela de layout principal "
-
-#: ../../../../build/work/app/bin/bllnhlp.c:174
-msgid "Main drawing canvas"
-msgstr "Tela de desenho principal"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:175
-msgid "Command buttons"
-msgstr "Botões dos comandos"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:176
-msgid "Menus"
-msgstr "Menus"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:177
-msgid "Tile, Filename and Window Manager buttons"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:178
-msgid "Turnout and Structure Hot Bar"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:179
-msgid "Active layer list and layer buttons"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:180
-msgid "Map window"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:181
-msgid "This is the portion of the layout shown in the Main Window canvas"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:182
-msgid "Raise or Lower all Selected Track"
-msgstr "Eleva ou abaixa todos os trechos selecionados"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:183
-#, fuzzy
-msgid "Name of block"
-msgstr "Isto não é um bloco!"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:184
-msgid "Script that the block will run"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:185
-msgid "List of tracks in the Block"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:186
-msgid "Add or Update car object"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:187
-msgid "Manufacturer name"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:190
-msgid "Is the Car a Locomotive?"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:191
-msgid "Part Number and Description"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:192
-msgid "Manufacturer Part Number"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:193
-msgid "Use the Selected figure as the car image"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:194
-msgid "Use the default figure as the car image"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:195
-msgid "Optional description of the Car Part"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:196
-msgid "Flip car image"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:197
-msgid "Display Car Item information or reporting marks and dimensions"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:198
-msgid "Full Roadname"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:199
-#: ../../../../build/work/app/bin/bllnhlp.c:200
-msgid "Car Type"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:201
-msgid "Reporting Marks (Roadname abbreviation)"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:202
-#: ../../../../build/work/app/bin/bllnhlp.c:378
-msgid "Car Number"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:203
-msgid "Car body Color"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:204
-msgid "Length of car body"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:205
-msgid "Width of car body"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:206
-msgid "Distance between Trucks "
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:207
-msgid "Coupler are mounted on body or truck"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:208
-msgid "Overall Coupled Length"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:209
-msgid "Coupler Length from end of car"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:210
-msgid "Diagram of Car"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:211
-msgid "Item Index Number"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:212
-msgid "Original Purchase Price"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:214
-msgid "Condition of car"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:215
-msgid "Original Purchase Date"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:216
-msgid "Last Service Date"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:217
-msgid "Number of identical cars to be entered"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:218
-msgid "Do all the cars have the same Number?"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:219
-msgid "Notes about the car"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:220
-#: ../../../../build/work/app/bin/bllnhlp.c:221
-msgid "Create a new car Part or Prototype definitions"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:222
-msgid "Finds the selected Car Item on the layout"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:223
-#: ../../../../build/work/app/bin/bllnhlp.c:224
-#: ../../../../build/work/app/bin/bllnhlp.c:225
-#: ../../../../build/work/app/bin/bllnhlp.c:226
-msgid "Sort the Item list"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:228
-msgid "Edit the selected Car Item"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:229
-msgid "Add a new Car Item"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:230
-msgid "Delete the selected Car Items"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:231
-msgid "Import a Car Item .csv file"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:232
-msgid "Export a Car Item .csv file"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:233
-msgid "Create a text list of the Car Items"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:234
-msgid "Specifies the radius of the circle track"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:235
-msgid "How to draw track being moved/rotated"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:236
-msgid "Default command is Describe or Select"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:237
-msgid "Action to invoke on Right-Click"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:239
-#, fuzzy
-msgid "The list of control elements"
-msgstr "Elementos de controle de layout"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:240
-#, fuzzy
-msgid "Edit the element"
-msgstr "Menu editar"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:241
-msgid "Delete the element"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:242
-msgid "Contents Label for new Parameter file"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:243
-msgid "List of custom designed turnouts and structures"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:244
-msgid "Invoke designer editor"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:245
-msgid "Remove selected entries"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:246
-msgid "Copy selected entries to Parameter File"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:247
-msgid "Create a New part or prototype"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:248
-msgid "Update custom file and close"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:249
-msgid "Executes the next step of the demo"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:250
-msgid "Skip to next demo"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:251
-msgid "Stops the demonstration and returns you to XTrackCAD"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:252
-msgid "Select speed of Playback"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:253
-msgid "This is where comments about the demo are displayed"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:290
-msgid "Move the Main canvas if you drag near the edge"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:291
-msgid "Color tracks or other objects by layer"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:292
-msgid "Controls the drawing of hidden tracks"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:293
-msgid "Controls the drawing of End-Points"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:294
-msgid "How to draw track ties"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:295
-msgid "Show crosshair at center of curves"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:296
-msgid "Drawing scale when to draw tracks with 2 rails"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:297
-msgid "Drawing scale of the map window"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:298
-msgid "Whether the main layout is updated while dragging on the Map"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:299
-msgid "Enable labels for Turnouts, Flextrack Lengths and Elevations"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:300
-msgid "When to label Turnout, Flextrack Lengths and Elevations"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:301
-msgid "Font size for labels on layout"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:302
-msgid "Label elements on the Hot Bar"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:303
-msgid "Label elements on layout"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:304
-msgid "Label elements for lists"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:305
-msgid "How to group cars on the Train Hot Bar"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:306
-msgid "Delay (in mS) between updating train movements"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:307
-msgid "Don't show trains in tunnels when tunnels are hidden"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:308
-msgid "Display unconnected endpoints of track with sepecial marks"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:309
-msgid "Whether zoom is locked to the bottom left corner or the center point"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:311
-msgid "Width of the lines"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:312
-msgid "Color of the lines"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:313
-msgid "List of types of Lumber"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:314
-msgid "Color of Benchwork"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:315
-msgid "Orientation of Benchwork"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:316
-msgid "Size of Dimension Arrows"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:317
-msgid "This controls the sharpness of the easement curve"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:318
-msgid "Minimum radius"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:319
-msgid "Maximum offset"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:320
-msgid "Easement length"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:321
-msgid ""
-"These radio buttons are a short-cut for Values of 0.0, 0.5, 1.0 and 2.0. "
-"None turns Easements off"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:322
-msgid "Complete easement selection"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:323
-msgid "Type of elevation"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:324
-msgid "Height of End Point"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:325
-msgid "Compute elevation based on neighbors"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:326
-msgid "Compute grade based on neighbors"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:327
-msgid "Specify a name for an End-Point"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:329
-msgid "Print parts list"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:330
-#: ../../../../build/work/app/bin/bllnhlp.c:430
-#: ../../../../build/work/app/bin/bllnhlp.c:530
-msgid "Invoke the Print Setup dialog"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:331
-msgid "Save parts list to file"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:332
-msgid "This is the list of parts for the layout"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:333
-msgid "Enable prices on the Parts List"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:334
-#: ../../../../build/work/app/bin/bllnhlp.c:337
-msgid "Spacing between major grid lines"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:335
-#: ../../../../build/work/app/bin/bllnhlp.c:338
-msgid "Allows the spacing to be subdivided"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:336
-#: ../../../../build/work/app/bin/bllnhlp.c:339
-msgid "Specifies if positions are snaped in this direction"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:340
-#: ../../../../build/work/app/bin/bllnhlp.c:341
-#: ../../../../build/work/app/bin/bllnhlp.c:342
-msgid "Shows the origin and angle of the grid"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:343
-msgid "Specifies if the grid is shown"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:344
-msgid "Completes the grid specification"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:348
-msgid "Number of segments in Group"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:349
-msgid "Replace the Selected object with the new definition?"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:350
-msgid "Creates a new Structure (or Turnout)"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:351
-msgid "Elevation difference of Helix End-Points"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:352
-msgid "Helix Radius"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:353
-msgid "Number of turns in the helix"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:354
-msgid "Angle betweek helix entrance and exit"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:355
-msgid "Grade in helix"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:356
-msgid "Separation between helix layers"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:357
-msgid "Layer list"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:358
-msgid "Layer Name"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:359
-msgid "Color of layer"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:360
-msgid "Layer is drawn on Main window"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:361
-msgid "Layer cannot be changed"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:362
-msgid "Layer is drawn on Map window"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:363
-msgid "Number of layer buttons to show"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:364
-msgid "Number of objects in this layer"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:366
-msgid "Load layer configuration from default"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:367
-msgid "Save current layer configuration as default"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:368
-msgid "Overwrite layer configuration with system default values"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:369
-#: ../../../../build/work/app/bin/bllnhlp.c:370
-msgid "Specifies the size of the room (in inches or centimeters)"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:371
-msgid "Specifies the layout Title that will appear on printouts"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:372
-msgid "Specifies the layout Subtitle that will appear on printouts"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:373
-msgid "Specifies the Modelling Scale"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:374
-msgid "Specifies the rail gauge, ie. the distance between the rails"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:375
-msgid ""
-"Specifies minimum track radius (in inches or centimeters). Tracks with a "
-"smaller radius are considered exceptional."
-msgstr ""
-"Especifica raio mínimo (em centímetros ou em polegadas). Trechos com raios "
-"menores serão considerados excepcionais."
-
-#: ../../../../build/work/app/bin/bllnhlp.c:376
-msgid ""
-"Specifies maximum track elevation expressed as a percent (%). Tracks with a "
-"larger elevation are considered exceptional."
-msgstr ""
-"Especifica inclinação máxima (em porcentagem). Trechos com inclinações "
-"maiores serão considerados excepcionais."
-
-#: ../../../../build/work/app/bin/bllnhlp.c:379
-msgid ""
-"This is the body of the Note. To change this select Modify from the File "
-"Menu"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:381
-msgid "Specifies number of pixels per inch (or centimeter)"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:383
-msgid ""
-"Specifies whether Layout Titles, Borders or Track Centerlines are printed on "
-"the BitMap"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:384
-msgid "Specifies the separation between parallel tracks"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:385
-msgid "Enter your name as specified in the XTrackCAD Registration Notice"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:386
-msgid "Enter the key value as specified in the XTrackCAD Registration Notice"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:387
-msgid "Validates the name and key. Terminates the registration command"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:388
-msgid "0ᅵ is up or to the right"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:389
-msgid "Choose english (inches) or metric (centimeters)"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:390
-msgid "How to display length measurements"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:391
-msgid "Do not create tracks to be shorter than this value"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:392
-msgid "Maximum distance between connected end points"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:393
-msgid "Minimum angle between connected End-Points"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:394
-msgid "Specifies the minimum angle between tracks connected to a turntable"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:395
-msgid "Trains will crash above this speed"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:396
-msgid "Enable/Disable balloon popup help windows"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:397
-msgid "How far you can move the mouse before its considered a drag"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:398
-msgid "How long you can hold a mouse button down before its considered a drag"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:399
-msgid "Minimum distance (in pixels) between grid lines/ticks"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:400
-msgid ""
-"Specifies the Check Point frequency; number of modifications made since the "
-"last save."
-msgstr ""
-"Especifica a freqüência de salvamento automático. Isto é, o número de "
-"modificações desde a última gravação."
-
-#: ../../../../build/work/app/bin/bllnhlp.c:401
-msgid "Resume work on last layout or start with new layout"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:403
-msgid "Updated cost of current selected item"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:405
-msgid "Selection list for prices"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:406
-#: ../../../../build/work/app/bin/bllnhlp.c:407
-#: ../../../../build/work/app/bin/bllnhlp.c:408
-msgid "Price of specified length of flex-track"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:410
-#, fuzzy
-msgid "Controls the printing of a centerline of track cmdPrint"
-msgstr "Controla o tamanho do texto inserido"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:411
-msgid "Controls the reduction (scale) of the printout"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:412
-msgid "Scaled page width (Scale times physical page width)"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:413
-msgid "Sets page size to the maximum (based on scale and physical page size)"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:414
-msgid "Scaled page height (Scale times physical page height)"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:415
-msgid "Sets scale, origin and angle for a one page printout of the layout"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:416
-msgid "Print page in Portrait or Landscape format"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:417
-msgid "Order of printing pages"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:418
-msgid "Print Title, Date, Author and other information at bottom of page?"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:419
-msgid "Ignore unprintable page margins?"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:420
-msgid "Print Registration Marks at 1:1?"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:421
-msgid "Print Snap Grid?"
-msgstr "Linha e divisão da grade"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:422
-msgid "Print Rulers on all page edges?"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:423
-msgid "Print Roadbed Outline?"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:425
-#: ../../../../build/work/app/bin/bllnhlp.c:426
-#: ../../../../build/work/app/bin/bllnhlp.c:428
-msgid ""
-"Origin of the print grid. This is useful if you want to reprint a set of "
-"pages"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:427
-msgid "Resets the origin and angle to 0"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:429
-msgid "Deselects all pages"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:431
-msgid "Print selected pages and terminates the print command"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:432
-msgid "List of loaded and unloaded parameter files"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:433
-msgid "Show parameter files by names or descriptions"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:434
-msgid "Toggle the loaded status of the selected parameter file"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:435
-msgid "Find a parameter file for loading"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:436
-msgid "Update parameter file list"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:437
-#, fuzzy
-msgid "Select all parameter files shown"
-msgstr "Lendo arquivos de parâmetros"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:438
-msgid "Profile of specified path"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:439
-msgid "Clear the profile"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:440
-msgid "Print the profile"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:442
-msgid "Stop recording"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:443
-msgid "Insert a message"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:444
-msgid "End a message"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:445
-msgid "Message body"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:446
-msgid "Possible turnouts"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:447
-msgid "Skip this turnout"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:449
-msgid "Manufacturer of Object"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:450
-msgid "Description of Object"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:451
-msgid "Part Nuber of Object"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:453
-msgid "Rescale by Scale Conversion or by Ratio"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:454
-msgid "Original Scale of the selected objects"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:455
-msgid "Original Gauge of the selected objects"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:456
-msgid "New Scale of the selected objects"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:457
-msgid "New Gauge of the selected objects"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:458
-msgid "Change track dimensions to new scale"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:459
-msgid "Change size by this amount"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:461
-msgid "Snap Grid Line and Division"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:462
-msgid "X and Y position markers"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:463
-msgid "Border rulers, room boundaries and table edges"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:464
-msgid "Primary Axis of grid rotation"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:465
-msgid "Secondary Axis of grid rotation"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:466
-msgid "Unselected tracks"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:467
-msgid "Selected tracks"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:468
-msgid "Color of tracks on the Profile path"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:469
-msgid "Color of Exceptional tracks"
-msgstr "Cor dos trechos excepcionais"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:470
-msgid "Color of track ties"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:471
-msgid "Updates the colors"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:472
-msgid "Angle in degrees"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:473
-msgid "Rotate object(s) by specified amount"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:474
-msgid "Choose commands to be sticky"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:475
-msgid "Make the commands sticky"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:476
-msgid "List of available structure"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:477
-msgid "Diagram of the selected structure"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:478
-msgid "Hide Selection window when placing Structure"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:479
-msgid "Drawing scale and size"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:480
-msgid "Complete structure placement"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:481
-msgid "Choose a Pier number"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:482
-#, fuzzy
-msgid "Name of the Motor"
-msgstr "Alterar motor de AMV"
-
-#: ../../../../build/work/app/bin/bllnhlp.c:483
-msgid "Value when switch is normal"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:484
-msgid "Value when the switch is reversed"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:485
-msgid "Value for a positive comfirmation of switch position"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:487
-msgid "Useful information about the program"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:488
-msgid "Show Tip of the Day every time the program starts"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:489
-msgid "Show the next Tip of the Day"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:490
-msgid "Show the previous Tip of the Day"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:492
-msgid "Controls which Command Buttons are displayed"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:493
-msgid "List of Cars"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:494
-msgid "List of active trains"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:496
-msgid "Train odometer"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:497
-msgid "Reset odometer to 0"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:498
-msgid "Find train on layout"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:499
-msgid "Follow train around layout"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:500
-msgid "Flip direction at End Of Track"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:501
-msgid "Change direction of train"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:502
-msgid "Stop the train"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:503
-msgid "List of available turnouts for the current scale"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:504
-msgid ""
-"Diagram of the currently selected turnout. Click on a End-Point to select "
-"the Active End-Point"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:505
-msgid ""
-"A menu list of various type of turnouts and sectional tracks you can define"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:506
-msgid "Hide Selection window when placing Turnout"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:507
-msgid "The selected Active End-Point"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:508
-msgid "Current selected turnout, (displayed in the diagram window)"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:509
-msgid "One the End-Points that can be selected"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:511
-#: ../../../../build/work/app/bin/bllnhlp.c:512
-msgid "Angle of the specified track to the center line of the turnout"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:513
-msgid "Specifies if angles are entered as Frog Numbers or in degrees"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:514
-#: ../../../../build/work/app/bin/bllnhlp.c:515
-msgid "Desciption"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:516
-msgid "Turnout description (Manuf., Size, Part Number, etc)"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:517
-#: ../../../../build/work/app/bin/bllnhlp.c:518
-#: ../../../../build/work/app/bin/bllnhlp.c:519
-msgid "Length from the base to the end of the specified track"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:521
-#: ../../../../build/work/app/bin/bllnhlp.c:522
-msgid "Offset of the track End-Point from the center line of the turnout"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:525
-#: ../../../../build/work/app/bin/bllnhlp.c:526
-msgid "Prints a full size diagram of the turnout for checking"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:527
-msgid "Color of Roadbed lines"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:528
-msgid "Width of Roadbed lines"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:529
-msgid "Width of Roadbed"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:531
-msgid "Closes the window and returns to the Turnout Selection window"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:532
-msgid "Specifies the diameter of the turntable"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:533
-msgid "Old Turnout title"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:534
-msgid "List of available titles"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:535
-msgid "Leave the Turnouts' title unchanged"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:536
-msgid "Invoke the Parameter Files dialog"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:537
-msgid "List of available turnouts"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:538
-msgid "Update the Turnouts' title"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:542
-msgid "Sample"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:544
-msgid "Slant"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:545
-msgid "Font selection dialog"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:546
-msgid "Weight"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:547
-msgid "Printer Abort Window"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:548
-msgid "Print to filename"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:549
-msgid "Specify Postscript font alias mapping"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:550
-msgid ""
-"Displays the Print Setup window to change printers, orientation, paper size, "
-"etc."
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:551
-msgid "Closes this dialog"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:552
-msgid "Page orientation"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:553
-msgid "Unprintable margins"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:554
-msgid "Updates and closes this dialog"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:555
-msgid "Choose paper size"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:556
-msgid "Choose printer"
-msgstr ""
-
-#: ../../../../build/work/app/bin/bllnhlp.c:557
-msgid "Print test page"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:7
-msgid "Introduction"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:8
-msgid "Mouse Actions"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:9
-msgid "Dialogs"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:10
-msgid "Moving about"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:11
-msgid "Describe and Select"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:12
-#, fuzzy
-msgid "Describe"
-msgstr "Descrição"
-
-#: ../../../../build/work/app/i18n/custmsg.h:14
-msgid "Simple tracks"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:15
-msgid "Straight tracks"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:16
-msgid "Curved tracks"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:17
-msgid "Circles"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:18
-msgid "Turntables"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:19
-msgid "Modifying tracks"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:20
-msgid "Modifying end points "
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:21
-msgid "Extending"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:22
-msgid "Medium and Thick Tracks"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:23
-msgid "Joining Tracks"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:24
-msgid "Straight to straight"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:25
-msgid "Curve to straight"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:26
-msgid "Circle to circle"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:27
-msgid "Joining to turntables"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:28
-msgid "Easements"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:29
-msgid "Abutting tracks"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:30
-msgid "Move to Join"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:32
-msgid "Select and Placement"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:33
-msgid "Building a yard throat."
-msgstr "Construindo ramos de um pátio"
-
-#: ../../../../build/work/app/i18n/custmsg.h:34
-msgid "Designing turnouts"
-msgstr "Projetando AMVs"
-
-#: ../../../../build/work/app/i18n/custmsg.h:35
-msgid "Group and Ungroup"
-msgstr "Agrupando e desagrupando"
-
-#: ../../../../build/work/app/i18n/custmsg.h:36
-msgid "Triming Turnout Ends"
-msgstr "Cortando trechos de AMV"
-
-#: ../../../../build/work/app/i18n/custmsg.h:37
-msgid "Handlaid Turnouts"
-msgstr "AMVs personalizados"
-
-#: ../../../../build/work/app/i18n/custmsg.h:38
-msgid "Elevations and Profile"
-msgstr "Elevações e perfils"
-
-#: ../../../../build/work/app/i18n/custmsg.h:39
-msgid "Elevations"
-msgstr "Elevações"
-
-#: ../../../../build/work/app/i18n/custmsg.h:41
-msgid "Misc track commands"
-msgstr "Miscelânea de comandos de trilhos"
-
-#: ../../../../build/work/app/i18n/custmsg.h:42
-msgid "Delete and Undo"
-msgstr "Apagando e desfazendo"
-
-#: ../../../../build/work/app/i18n/custmsg.h:43
-msgid "Splitting and Tunnels"
-msgstr "Seccionando trechos e criando túneis"
-
-#: ../../../../build/work/app/i18n/custmsg.h:45
-msgid "Helix tracks"
-msgstr "Trechos em hélice"
-
-#: ../../../../build/work/app/i18n/custmsg.h:46
-msgid "Exception Tracks"
-msgstr "Trechos excepcionais"
-
-#: ../../../../build/work/app/i18n/custmsg.h:48
-msgid "Connect and Tighten - a siding"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:49
-msgid "Connect and Tighten - figure-8"
-msgstr "Conectando e firmando - figura-8"
-
-#: ../../../../build/work/app/i18n/custmsg.h:50
-msgid "Other commands"
-msgstr "Outros comandos"
-
-#: ../../../../build/work/app/i18n/custmsg.h:52
-msgid "Table Edges"
-msgstr "Limites do tablado"
-
-#: ../../../../build/work/app/i18n/custmsg.h:54
-msgid "Dimension Lines"
-msgstr "Linhas dimensionais"
-
-#: ../../../../build/work/app/i18n/custmsg.h:55
-msgid "Lines"
-msgstr "Linhas"
-
-#: ../../../../build/work/app/i18n/custmsg.h:56
-msgid "Poly-Shapes"
-msgstr "Formas poligonais"
-
-#: ../../../../build/work/app/i18n/custmsg.h:57
-msgid "Modifying Poly-Shapes"
-msgstr "Modificando forma poligonais"
-
-#: ../../../../build/work/app/i18n/custmsg.h:60
-msgid "Control Panels (New)"
-msgstr "Painéis de controle (Novo)"
-
-#: ../../../../build/work/app/i18n/custmsg.h:62
-msgid ""
-"The unconnected End-Points of a straight or curved track can be changed with "
-"the 'Modify Track' command.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:63
-msgid ""
-"The End-Point of a straight track is selected and then Left-Dragged to "
-"change its length.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:64
-msgid ""
-"Watch what happens if you try to drag the selected End-Point beyond the far "
-"End-Point.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:65
-msgid ""
-"The length of the straight track is determined by the distance from the far "
-"End-Point and the cursor.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:66
-msgid ""
-"A curved track is selected and it's new End-Point is determined by the angle "
-"to the cursor.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:67
-msgid "It's possible to almost create a complete circle.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:68
-msgid ""
-"If you drag the mouse beyond the start of the curve the track becomes very "
-"short.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:69
-msgid "Here you are warned that the track will be too short.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:70
-msgid ""
-"If you move the cursor away from the curve, you will create a straight track "
-"tangent to the curve.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:71
-msgid ""
-"If you adjust the End-Point of a turnout or sectional track the track is "
-"extended by a straight track segment.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:72
-msgid ""
-"You can change the radius of a Straight or Curved track that is connected at "
-"one End-Point by holding down the Shift key while dragging on it.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:73
-msgid ""
-"This lets you change a Straight track into a Curved track (and vice versa) "
-"as well as changing the radius of a Curved track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:74
-msgid "You can draw a variety of different types of benchwork:\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:75
-msgid "- rectangular (1x2, 2x4 etc)\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:76
-msgid "- L girders\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:77
-msgid "- T girders\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:78
-msgid "You can also draw them in different orientations.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:79
-msgid "We will draw two 3x6 inch L-girders.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:80
-msgid ""
-"The flange of the top L-Girders is on the outside edge of the girders. We "
-"want to change the girder so both flanges are on the inside.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:81
-msgid "We will use the <Describe> command for this.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:82
-msgid "Change the Orientation to Right.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:83
-msgid "Now both flanges are on the inside of the two girders.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:84
-msgid ""
-"Pushing the <Describe> button will cancel any other command in progress.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:85
-msgid ""
-"Here we will begin to create a Curved track which is a two step process.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:86
-msgid ""
-"When we clicked on the <Describe> button, the current command was "
-"cancelled.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:87
-msgid ""
-"When in <Describe> mode, selecting any object will print a description in "
-"the Status Bar and display a Dialog showing properties of the clicked-on "
-"object.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:88
-msgid ""
-"Certain parameters of the object can be changed. In this case we'll change "
-"the Length\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:89
-msgid "Let's look at the Turnout...\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:90
-msgid "and change the turnout Title.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:91
-msgid "You can change the contents of Text...\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:92
-msgid "and its size.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:93
-msgid ""
-"If you select a Note, the Description dialog appears which displays the "
-"contents of the note.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:94
-msgid ""
-"Like the <Curve> track command, there are several ways to create a Circle "
-"track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:95
-msgid ""
-"The first is to specify a fixed radius and simply drag the Circle into "
-"position.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:96
-msgid "We will change the Radius before proceeding.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:97
-msgid "The next method is to drag from the edge of the Circle to the center.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:98
-msgid ""
-"The last is similar, but you drag from the center of the Circle to the "
-"edge.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:99
-msgid ""
-"We have built a siding using Sectional track and have 2 End-Points that "
-"don't line up and are not connected automatically when placing the sectional "
-"track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:100
-msgid ""
-"We use the <Connect> command to adjust neighboring tracks so the gap is "
-"closed.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:101
-msgid ""
-"Note: the adjustments are only done on tracks which have only 1 or 2 "
-"connections. In this example the Turnouts would not be affected.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:102
-msgid "And now the gap is closed.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:103
-msgid "Other tracks have been shifted slightly to close the gap.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:104
-msgid "You can see these slight mis-alignments.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:105
-msgid "But they will have no effect when the layout is actually built.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:106
-msgid ""
-"After working with Sectional track you might get to point where these mis-"
-"alignments have accumulated and you wish to remove them.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:107
-msgid ""
-"You can remove these slight mis-alignments by tightening the tracks starting "
-"from a unconnected End-Point. Use Shift-Left-Click with the <Connect> "
-"command.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:108
-msgid "First use the <Split> command to disconnect the tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:109
-msgid ""
-"Then with the <Connect> command, Shift-Left-Click on the 2 End-Points.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:110
-msgid "In example shows a simple figure-8 layout using Sectional track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:111
-msgid ""
-"You will notice that the tracks do not line up exactly in one location.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:112
-msgid ""
-"We can use the <Connect> command to move the connecting tracks slightly and "
-"connect the 2 End-Points.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:113
-msgid "The two End-Points are now aligned and connected.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:114
-msgid "The connection was made by adding small gaps in other tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:115
-msgid "There are several ways to create a Curved track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:116
-msgid ""
-"You can choose which to use by clicking on the small button to the left of "
-"<Curve> command button if the current Curve command is not the one you "
-"want.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:117
-msgid ""
-"The first is by clicking on the first End-Point and dragging in the "
-"direction of the Curve.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:118
-msgid ""
-"You will see a straight track with a double ended Red arrow at the end.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:119
-msgid "Click and drag on one of the Red arrows to complete the Curve.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:120
-msgid ""
-"The next method is to click at one End-Point and drag to the center of the "
-"Curve.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:121
-msgid ""
-"Now you will see the double ended Red arrow connected to the center of the "
-"Curve marked by a small circle.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:122
-msgid "As before, drag on one of the Red arrows to complete the Curve.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:123
-msgid ""
-"The next method is similar to the last except that you drag first from the "
-"center of the Curve to one End-Point.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:124
-msgid "Once again, drag on a Red arrow to complete the Curve.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:125
-msgid ""
-"The last method begins by drawing a line between the two End-Points of the "
-"Curve. This forms the Chord of the Curve.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:126
-msgid "Now drag on a Red arrow to complete the Curve.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:127
-msgid "This demo will construct a control panel for part of a bigger layout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:128
-msgid "For our control panel we will use Œ\" lines. \n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:129
-msgid "Also, we will use a 1/8\" grid to lay out our controls.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:130
-msgid ""
-"First, we will set up the Snap Grid for 1\" grid lines and 8 divisions.\n"
-msgstr "Primeiramente, ajustaremos a grade para linhas de 1″ e 8 divisões.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:131
-msgid "Now, clear the layout and turn on the Snap Grid.\n"
-msgstr "Agora, limparemos o layout e ligaremos a grade.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:132
-msgid "First step: draw the lines representing the tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:133
-msgid "We specify the line width in pixels.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:134
-msgid ""
-"To create a Œ\" line, divide the dots-per-inch (DPI) of your display by 4 "
-"and then by the drawing scale (which is 2 right now).\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:135
-msgid ""
-"For MS-Windows the DPI is usually 98, so choose: 98/4/2 = 12 "
-"(approximately).\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:136
-msgid "For Linux, the DPI is usually 72, so choose: 72/4/2 = 9.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:137
-msgid ""
-"Notice how the Snap Grid keeps the main line and siding track parallel and "
-"the connecting tracks and spur at a 45° angle.\n"
-msgstr ""
-"Note como a grade mantém a linha principal e lateral paralelas e as linhas "
-"de conexão e incita a um ângulo de 45°.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:138
-msgid "Second step: add LEDs for the turnout position indicators.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:139
-msgid "We will use T1 red and green LEDs.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:140
-msgid "We will zoom in to show positioning.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:141
-msgid ""
-"Notice that when we are in the correct position (on the 1/8\" grid), the "
-"Marker lines on the bottom and left rulers will high-light the tick marks. "
-"When both ticks are high-lighted, press the space bar to finalize the LED.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:142
-msgid "Now we'll add push buttons to control the turnouts.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:143
-msgid "Let's add signals to our siding.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:144
-msgid ""
-"The entrance to the siding will be protected by double headed signals.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:145
-msgid "First turn off the Snap Grid.\n"
-msgstr "Primeiramente, desligamos a grade.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:146
-msgid "Rotate the signals and move them to the proper locations.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:147
-msgid ""
-"We rotate the signals by Shift-Right-Click and select 90° CW on the popup "
-"menu. We can not show the popup menu in demo mode, but will simulate the "
-"effect.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:148
-msgid "The exits from the siding will be protected by single headed signals.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:149
-msgid "Now for some touch-ups.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:150
-msgid "Notice when the line meet at an angle there is a gap.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:151
-msgid "We will fill this gap with the Œ\" dot.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:152
-msgid ""
-"Note: Win95/Win98/WinME does not support drawing lines with flat end-caps, "
-"but only with round end-caps.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:153
-msgid "Users on those platforms will not see the gap.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:154
-msgid ""
-"Add an arrow head to indicate the tracks that connect to the rest of the "
-"layout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:155
-msgid "Rotate the arrow head by 180° and move into position.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:156
-msgid "And add some labels.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:157
-msgid ""
-"We want to print our control panel onto a 8œx11 page, but the control panel "
-"is a bit too wide.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:158
-msgid "Lets tighten it up a bit.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:159
-msgid ""
-"First turn the Snap Grid on again so any moves we make will keep objects on "
-"the grid.\n"
-msgstr ""
-"Primeiramente, habilitamos a grade novamente para fazer com que os objetos "
-"fiquem mantidos nela.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:160
-msgid "Lets move the spur track the left 3/4\"\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:161
-msgid "Now move the right side of the siding over.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:162
-msgid "Now, adjust the ends of the mainline and siding tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:163
-msgid "And move the title over as well.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:164
-msgid "Now you can print it.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:165
-msgid "The cross-hairs on the LEDs and switch show the centers for drilling.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:166
-msgid ""
-"Pressing the <Delete> button lets you delete selected tracks from the "
-"layout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:167
-msgid ""
-"First you select the tracks you want to delete, and then press the <Delete> "
-"button.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:168
-msgid ""
-"If you delete a track connected to an easement curve, then the easement "
-"curve is deleted as well.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:169
-msgid "You can use the <Undo> command to undelete tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:170
-msgid ""
-"If you Left-Drag on the layout you can select all tracks within an area.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:171
-msgid ""
-"Note, only tracks within the selected area are deleted. Since the easement "
-"curve is connected to a deleted track, it is deleted as well.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:172
-msgid ""
-"The demo also simulates entering values and selecting options on various "
-"dialogs.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:173
-msgid ""
-"This is simulated by drawing a rectangle around the control when values are "
-"entered or changed.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:174
-msgid ""
-"Here we are going to make some changes to the Display dialog. Notice how "
-"this is simulated.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:175
-msgid ""
-"This effect is only used in demonstration mode. During normal operation you "
-"will not see this.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:176
-msgid "Dimension Lines are used to mark the distances between two points.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:177
-msgid ""
-"Here we will create a Dimension Line to show the separation between two "
-"tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:178
-msgid ""
-"We might also want to measure the distance between two structures. In this "
-"case we will use a larger dimension line.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:179
-msgid ""
-"We can use the <Describe> command to change the position of the Dimension "
-"Line and the size of the numbers.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:180
-msgid ""
-"This example will show the effect of using easements while joining tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:181
-msgid "First, we'll enable easements.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:182
-msgid ""
-"We've selected sharp easements. The minimum radius curve we can use will be "
-"9.75\"\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:183
-msgid "Notice the label on the Easement button has changed to 'Sharp'.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:184
-msgid ""
-"Note the connecting curve does not quite meet the straight tracks. This the "
-"'Offset'.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:185
-msgid "Here the connecting curve is too small.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:186
-msgid ""
-"The connecting curve is made of three tracks, the curve and two easement "
-"segments on each end.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:187
-msgid ""
-"We have designed part of the layout with a siding, 2 branches and a spiral "
-"loop. We want to set Elevations.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:188
-msgid "First we will set elevations at the end of the branches.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:189
-msgid "We'll select the end of the top branch and set the Elevation to 4\"\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:190
-msgid "First, click on the End-Point.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:191
-msgid "Next, pick Defined on the Elevation dialog Radio box.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:192
-msgid "And set the Elevation to 4.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:193
-msgid "Now, select the other branch and set it's elevation to 2\"\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:194
-msgid "We can move the Elevations by using Right-Drag\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:195
-msgid "Now, we set the Elevation at one end of the Siding.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:196
-msgid "We want to find the elevations where the 2 tracks cross.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:197
-msgid "We picked an End-Point on the upper track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:198
-msgid ""
-"XTrackCAD has computed the Elevation (2.34\") at this point based on the "
-"Elevation at the siding and a combination of the of the first Elevations.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:199
-msgid ""
-"We create a Computed Elevation here that will be automatically adjusted "
-"whenever the other Elevations are changed.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:200
-msgid ""
-"The Compute Elevation is based on Elevations at end of both of the "
-"branches. We may want to base the Elevation on only one branch. For "
-"example if one branch was the mainline we don't want the other branch "
-"affecting this Computed Elevation.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:201
-msgid "We do this by Ignoring the branch we don't want.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:202
-msgid "We'll ignore the lower branch.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:203
-msgid ""
-"Notice at the End-Point where the tracks cross, we see the Elevation has "
-"changed from 2.34 to 2.64.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:204
-msgid "Now we want to know the elevation of the lower track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:205
-msgid "There is no End-Point on the lower track here.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:206
-msgid ""
-"Use Shift-Left-Click to Split the track and create an End-Point we can use "
-"for an Elevation,\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:207
-msgid "and create another Computed Elevation point.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:208
-msgid "Now we want to label the Grade on this section of track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:209
-msgid ""
-"Again, since there is no End-Point nearby, we split the track to create an "
-"End-Point we can use,\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:210
-msgid "and create a Grade marker.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:211
-msgid "Note the marker has an arrow pointing in the upwards direction.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:212
-msgid ""
-"The last thing we want to do is to create a Station label that we'll use in "
-"the <Profile> command.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:213
-msgid "Now, set the Elevation to Station and enter the its name.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:214
-msgid ""
-"XTrackCAD can help find tracks that are curved too sharply or are too "
-"steep. These tracks are Exception tracks and are drawn in the Exception "
-"track color.\n"
-msgstr ""
-"XTrackCAD pode ajudar encontrar curvas muito fechadas ou trechos "
-"demasiadamente inclinados. Esses são os chamados trechos excepcionais e "
-"serão desenhados na cor de trechos excepcionais.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:215
-msgid ""
-"In this example we have a curved track with radius of 9\" and a straight "
-"track with a grade of 3.8%.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:216
-msgid " \n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:217
-msgid ""
-"The Layout dialog shows the Minimum Track Radius is 9\" and the Maximum "
-"Track Grade is 5%.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:218
-msgid ""
-"If we make the curved track sharper it will be drawn in the Exception "
-"color.\n"
-msgstr ""
-"Se instalarmos uma curva muito fechada, ela será desenhada na cor de trecho "
-"excepcional.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:219
-msgid ""
-"If we make the straight track steeper it will also be drawn in the Exception "
-"color.\n"
-msgstr ""
-"Se instalarmos um trecho muito inclinado ele será também desenhado na cor de "
-"trecho excepcional.\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:220
-msgid ""
-"You can change the Exception color on the Colors dialog from the Options "
-"menu.\n"
-msgstr ""
-"Você pode alterar a cor dos trechos excepcionais na caixa de diálogo de "
-"cores acessível através do menu \"Opções\".\n"
-
-#: ../../../../build/work/app/i18n/custmsg.h:221
-msgid ""
-"The unconnected End-Point of any track can be extended with the <Modify> "
-"command using Right-Drag.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:222
-msgid "Select the End-Point and Right-Drag.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:223
-msgid "The extending track can be straight...\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:224
-msgid "... or curved.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:225
-msgid ""
-"If you extend a Straight or Curved flex track and enable Easements then an "
-"Easement curve will be automatically generated when you extend the track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:226
-msgid ""
-"The <Flip> command will create a mirror image of the selected objects.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:227
-msgid "After selecting the object, drag a line which will form the mirror.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:228
-msgid "The mirror line does not have to be vertical or horizontal.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:229
-msgid "You can also flip any number of objects.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:230
-msgid "Watch what happens to the structure and turnout titles.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:231
-msgid ""
-"Note that the turnout title has been changed from the Medium Right to Medium "
-"Left. When turnouts are flipped, XTrackCAD will try to find a matching "
-"turnout and if found will change the name.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:232
-msgid ""
-"Structures do not have Right and Left hand versions. Their title is changed "
-"to indicate that they were flipped.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:233
-msgid "You can use the <Describe> command to change their title.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:234
-msgid ""
-"The <Group> and <Ungroup> commands (on the Tools menu) are a powerful way to "
-"manipulate Turnout and Structure definitions.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:235
-msgid "We'll start with a simple turnout and add a switch machine.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:236
-msgid ""
-"Now that we have drawn a rough outline of a switch machine we will group it "
-"with the turnout definition.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:237
-msgid "First we Select the objects in the new definition.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:238
-msgid "Now do the <Group> command.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:239
-msgid ""
-"The <Group> command dialog shows the Title (Manufacturer, Description and "
-"Part Number) of the new definition. This information is taken from the "
-"Selected objects you are grouping.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:240
-msgid ""
-"The 'Replace with new group?' toggle will replace the Selected objects with "
-"the new definition.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:241
-msgid ""
-"If we don't change the Title then the new definition will replace the "
-"existing definition.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:242
-msgid "We'll give this definition a new Description.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:243
-msgid "We're done with this definition. Press Ok.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:244
-msgid "You will see the updated image on the HotBar.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:245
-msgid ""
-"The <Ungroup> command replaces any Selected turnouts or structures with "
-"their parts.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:246
-msgid ""
-"Structures and non-track segements of turnouts are composed of Lines, "
-"Circles and other shapes. In this turnout these are the two lines and the "
-"two squares.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:247
-msgid ""
-"We will Ungroup this turnout and see how the individual parts can be "
-"changed.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:248
-msgid "First Select the turnout and then Ungroup it.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:249
-msgid "Notice that the Title now indicates the turnout is Ungrouped.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:250
-msgid "Hit Escape to deselect everything.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:251
-msgid "Now Select the lines and squares.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:252
-msgid ""
-"We could modify these object or add new ones. For now we'll just delete "
-"them.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:253
-msgid "And move the Label out of the way.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:254
-msgid "Notice that the turnout has been broken into three parts.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:255
-msgid ""
-"Two ends of the turnout, from the frog to the end of the diverging leg and "
-"from the points to the left, are now straight track sections.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:256
-msgid ""
-"The a turnout is made of a number of individual straight and curved track "
-"segements. This turnout had four segments:\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:257
-msgid " 1 a short straight segment to the left of the points\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:258
-msgid " 2 a long straight segment to the right of the points\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:259
-msgid " 3 a curved segment from the points to the frog\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:260
-msgid ""
-" 4 a straight segment from the frog to the end of the diverging leg.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:261
-msgid "The first and last segments have be converted to straight tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:262
-msgid ""
-"The second and third segments form the the body of the turnout and can not "
-"be ungrouped further.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:263
-msgid ""
-"You can later Group this turnout with the straight segments to recreate the "
-"turnout definition. You can also add other track segments to turnout "
-"definitions.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:264
-msgid "Now, create a track and place the new turnout on it.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:265
-msgid "Now suppose we want to replace the black squares with green circles.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:266
-msgid "First we Select the turnout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:267
-msgid "And now Ungroup it (from the Tools Menu)\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:268
-msgid ""
-"Notice that the name has changed to indicate the turnout was Ungrouped.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:269
-msgid ""
-"Now, hit escape to deselect everything and then Select the 2 squares and "
-"delete them.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:270
-msgid "Now draw the green circles...\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:271
-msgid "and Group the new definition.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:272
-msgid ""
-"Notice that the turnout in the HotBar is angled the same as the turnout on "
-"the layout. Make sure your new definition is rotated the way you want it.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:273
-msgid "We can also create turnouts from simple straight and curved tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:274
-msgid "We'll create two tracks that have a common End-Point.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:275
-msgid "At this point we can modify the tracks if necessary.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:276
-msgid "We will use the <Describe> command to change the tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:277
-msgid "We'll make the Length 7.5\".\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:278
-msgid ""
-"If we change the Length, each End-Point will be moved to shorten the track. "
-"We want to just move the Right End-Point. To control this, change the Pivot "
-"to First which means the Left End-Point will be unchanged when we change the "
-"length (or angle) of the track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:279
-msgid "Now when change the Length only the Right End-Point will move.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:280
-msgid "Now let's look at the curved track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:281
-msgid ""
-"Here the Left End-Point (which we don't want to move) is the Second End-"
-"Point, so we'll make that the Pivot.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:282
-msgid "We want the curve to have a radius of 20\" and an angle of 17.5°.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:283
-msgid "First change the Radius...\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:284
-msgid "and the the Angular Length.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:285
-msgid "Now Select both tracks...\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:286
-msgid "and Group them.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:287
-msgid ""
-"If the two tracks have a common End-Point then they will form a Turnout and "
-"can be switched with the <Train> command. Otherwise they will just be two "
-"track segments grouped together.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:288
-msgid ""
-"We have created a left hand turnout and we also want a right hand version.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:289
-msgid "We'll use the <Flip> command.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:290
-msgid ""
-"Drag a horizontal line that will be the mirror for the <Flip> command.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:291
-msgid "Notice the title has changed to Flipped Left.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:292
-msgid "Now Group the turnout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:293
-msgid "We'll change the Title and Part No for the new defintion.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:294
-msgid ""
-"To Remove the definitions, use the Custom Management dialog on the Tools "
-"menu.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:295
-msgid "Select the definitions you added and Delete them.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:296
-msgid ""
-"Now we will create a helix in the corner of the layout connected to 2 "
-"tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:297
-#, c-format
-msgid ""
-"We will be creating a helix with a Elevation Difference of 12\", Grade of "
-"1.5% and limit the Vertical Separation to at least 2\".\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:298
-msgid "First set the Elevation Difference to 12\"\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:299
-msgid "Next set the Vertical Separation to 2\"\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:300
-msgid "Notice how this causes the number of Turns to be set to 6\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:301
-msgid "Next set the Grade to 1.5%\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:302
-msgid "Notice how this causes the Radius to change.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:303
-msgid ""
-"Setting these values changes the Radius to 21.2\" and the number of Turns to "
-"6.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:304
-msgid ""
-"Now we specify the Angular Separation between the enterance and exit to the "
-"helix.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:305
-msgid "Note: this will decrease the Radius slightly.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:306
-msgid "Next we can fine tune the helix by decreasing the Radius to 15\".\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:307
-msgid "Note the change to the Grade.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:308
-msgid ""
-"Lastly change the Vertical Separation to 2.5\". The number of Turns will "
-"change to 4 and the grade increase to almost 3%.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:309
-msgid ""
-"Note: the Vertical Separation will be increased. This value is the "
-"Elevation Difference (12.0) divided by the total number of turns. The total "
-"number of turns is 4.25: 4 whole Turns plus a quarter turn for the Angular "
-"Separation.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:310
-msgid ""
-"Now that the helix parameters are set we can place the helix on the layout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:311
-msgid ""
-"Next, join the 2 straight tracks to the helix in the same way we join to a "
-"circle.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:312
-msgid ""
-"Notice that the length has increased because we have more than 4 turns in "
-"the helix. It is closer to 4.25 turns.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:313
-msgid ""
-"Next, we assign elevations to the 2 End-Points of the helix. This will "
-"determine the grade and separation between the helix coils.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:314
-msgid ""
-"Note: we could set the elevations anywhere along the connecting tracks "
-"instead. XTrackCAD treats a helix as a single length of track for "
-"elevations.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:315
-msgid ""
-"We have set the elevations to 1\" and 13\" to produce a grade of 3.0% with "
-"2.8\" between coils.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:316
-msgid ""
-"You can use the <Describe> command to change the number of Turns or the "
-"Elevations at either end of the Helix. This will affect the Grade and "
-"Vertical Separation.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:317
-msgid "The helix description can be moved by the <Move Label> command.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:318
-msgid ""
-"In addition to using the turnout definitions you can create 'Hand Laid "
-"Turnout'.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:319
-msgid "This is two step process:\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:320
-msgid "1 - click on the frog and drag away to set the frog angle\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:321
-msgid ""
-" Hint: the further you drag from the frog, the more accurate the angle.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:322
-msgid "2 - click and drag to set the position of the points\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:323
-msgid "We can create Hand Laid Turnouts on curved tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:324
-msgid "A Hand Laid Turnout is composed of several parts.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:325
-msgid "The actual Turnout is a short portion at the points.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:326
-msgid "The other parts are various straight and curved segments.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:327
-msgid "The new curved turnout is also composed of several segments.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:328
-msgid "Welcome to the XTrackCAD demonstration.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:329
-msgid ""
-"This will show some the features of XTrackCAD in an automated presentation. "
-"This window contains a number of controls and a message area (which I hope "
-"you are reading now). \n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:330
-msgid "The controls are:\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:331
-msgid "Step - advances to the next step of the demo.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:332
-msgid "Next - skips ahead to the next demo.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:333
-msgid "Quit - exits the demo and returns to XTrackCAD.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:334
-msgid "Speed - controls the speed of the demo.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:335
-msgid "Click Step now for the next message.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:336
-msgid ""
-"If this is the first time you have used the demo you may want to rearrange "
-"the windows so the demo window does not obscure the main window.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:337
-msgid ""
-"You can move the demo window now by dragging on the title bar at the top of "
-"the window. I suggest you move it to the top of your screen.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:338
-msgid ""
-"The various controls are disabled when it would be inappropiate to click on "
-"them. When the demo is running the Step button is disabled. When the demo "
-"is paused the Step button is enabled and you can click it when you are ready "
-"to view the next part of the demo.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:339
-msgid "You can click on Quit to return to XTrackCAD at any time.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:340
-msgid "You can adjust the speed of the demonstration with the Speed control.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:341
-msgid "The demos are designed to fit within a certain sized window.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:342
-msgid ""
-"For best results, change the size of the main XTrackCAD window so the box "
-"shape is completely visible.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:343
-msgid "You can do this by clicking and dragging on a corner of the window.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:344
-msgid "This is the end of the introductory demo.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:345
-msgid ""
-"Please click Step for the next demo or click Quit to return to XTrackCAD.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:346
-msgid ""
-"You can also join to and from circles. This will change the circles to "
-"curves.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:347
-msgid "In this example we will join two circles.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:348
-msgid ""
-"Here we've selected points on the two circles. The direction of the "
-"connections (whether clockwise or counter clockwise) is controlled by where "
-"on the circle you select the connection points.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:349
-msgid "Now let's try a cross connection.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:350
-msgid ""
-"Note that the connection is from different 'ends' of the circle than in the "
-"last example.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:351
-msgid "This examples shows joining tracks whose End-Points are aligned.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:352
-msgid ""
-"Note the 2 pairs of tracks have End-Points that are close and aligned but "
-"not connected.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:353
-msgid "The first case joins the curve and straight track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:354
-msgid "The second case will join the two straight tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:355
-msgid "Note that the two straight tracks were combined to form one track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:356
-msgid ""
-"The <Join> command can join straight and curved tracks (in either order).\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:357
-msgid "A connecting track is drawn between the two tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:358
-msgid ""
-"Notice that the curved track is extended as the connection point moves past "
-"the End-Point.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:359
-msgid "Here the connection makes the curved track wrap around.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:360
-msgid ""
-"Now the cursor is about to be moved past the other (far) End-Point of the "
-"straight track. You will receive a warning and the connecting track turns "
-"Red.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:361
-msgid "The <Join> command can move one group of tracks to join with another.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:362
-msgid "First <Select> the tracks you want to move.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:363
-msgid "Click <Join> and Shift-Left-Click on the two End-Points.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:364
-msgid "The selected tracks are moved into position.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:365
-msgid ""
-"Two straight tracks are joined by selecting the two End-Points. The "
-"selected End-Points will be those closest to the cursor when the track is "
-"selected.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:366
-msgid ""
-"A connecting track is drawn between the two tracks. Notice how it moves as "
-"the cursor is dragged along the second track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:367
-msgid ""
-"Note that two tracks are extended if you move past the end of the track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:368
-msgid ""
-"Notice what happens if you drag past the intersection points of the two "
-"tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:369
-msgid "This is probably not a very useful thing to do.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:370
-msgid "You can connect from any track to a turntable\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:371
-msgid "Note: you cannot have a turntable as your first connection point.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:372
-msgid ""
-"You cannot place the connecting track too close to an existing stall track. "
-"How close you can get is controlled by the Turntable Angle on the Setup "
-"dialog.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:373
-msgid "In this example it is set to 7.5 degrees.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:374
-msgid "You can drag the connecting point all round the turntable.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:375
-msgid ""
-"As you drag away from the turntable a straight track will be drawn to the "
-"cursor postion and a curve will be drawn from the cursor to the connecting "
-"track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:376
-msgid ""
-"Now the cursor will be moved within the turntable. Notice the error "
-"message.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:377
-msgid "All done.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:378
-msgid ""
-"The Draw Commands are used to draw straight and curved lines on the layout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:379
-msgid ""
-"Lines are drawn by clicking at the starting postion and dragging to the "
-"final position.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:380
-msgid ""
-"Drawing lines with the Shift key held down will use the previous line End-"
-"Point as the starting position. This makes it easy to draw connected "
-"lines.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:381
-msgid "You also draw in various colors and line widths.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:382
-msgid ""
-"Like Curved Tracks, Curved Lines can be drawn by a variety of methods.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:383
-msgid ""
-"Here we will draw a Curve by dragging from one End-Point to the other to "
-"define the chord of the Curve. Then we will drag from the center to shape "
-"the curve.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:384
-msgid "Boxes are useful for drawing rectangular shapes.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:385
-msgid ""
-"Circles can be drawn by clicking on the center or edge and dragging to set "
-"the radius.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:386
-msgid "Here we will drag from the Center.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:387
-msgid "Lines and Shapes can be deleted by Selecting and Deleting.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:388
-msgid "We also draw Polylines and filled shapes.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:389
-msgid ""
-"A Polyline is drawn by dragging to place each of the point in the Polyline.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:390
-msgid ""
-"To finish off the Polyline press the <Space> key or choose another drawing "
-"type.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:391
-msgid "A Polygon is drawn in the same way\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:392
-msgid ""
-"You can use the Above and Below Commands to move lines and shapes to the "
-"front or back of the drawing.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:393
-msgid "Filled Boxes and Circles work the same as line Boxes and Circles.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:394
-msgid ""
-"In the drawing area of the main window you can see an hollow arrow which "
-"represents the mouse cursor. In this demo the mouse will move about to show "
-"you the actions of different commands.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:395
-msgid ""
-"The hollow arrow represents the mouse cursor without a mouse button being "
-"pressed.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:396
-msgid ""
-"When the left mouse button would be pressed, the mouse cursor appears to "
-"flash and the hollow arrow is replaced by a solid red arrow. While the left "
-"button is pressed the mouse cursor will be a solid arrow.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:397
-msgid ""
-"Note: these color changes occur only during the demo to simulate mouse "
-"button presses.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:398
-msgid ""
-"Moving the mouse while a mouse button is pressed is called 'dragging'.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:399
-msgid ""
-"When the left mouse button is released, the mouse cursor flashes and the "
-"hollow arrow is restored.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:400
-msgid "Dragging with the right button is simulated by a blue solid cursor.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:401
-msgid ""
-"Sometimes the Shift key is held down while using the mouse for a Shift-Click "
-"or a Shift-Drag. \n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:402
-msgid "This is indicated by an outline drawn around the solid arrow.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:403
-msgid ""
-"The main drawing area shows a portion of total layout. You can zoom in or "
-"zoom out by choosing 'Zoom In' or 'Zoom Out' in the 'Edit' menu, by using "
-"the Zoom buttons on the toolbar or by using the 'Page Down' and 'Page Up' "
-"keys.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:404
-msgid "You can see the entire layout in the Map window.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:405
-msgid "As you Zoom Out tracks are drawn with one line instead of two.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:406
-msgid ""
-"You can change what portion of the layout is shown by using the 'Map' window "
-"which shows a compressed version of the entire layout. A hilighted area of "
-"the 'Map' (in reverse video) shows what portion of the layout is displayed "
-"in the main drawing area.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:407
-msgid ""
-"You can Left-Drag the hilighted area in the Map window to change the "
-"displayed portion of the layout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:408
-msgid ""
-"You can also Right-Drag on the Map window to set the scale and position of "
-"the Main window.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:409
-msgid ""
-"The <Note> command lets you attach notes to various spots on the layout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:410
-msgid ""
-"When you place a note, the Note editor window is displayed which lets you "
-"enter the note.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:411
-msgid ""
-"If you click on a note in <Describe> mode the Note editor displays the "
-"note.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:412
-msgid "This is the end of the XTrackCAD Demos.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:413
-msgid "Click Step to return to XTrackCAD.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:414
-msgid "Thanks for watching.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:415
-msgid "This example shows how to create parallel tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:416
-msgid ""
-"The separation is set in the <Parallel Separation> window. You should set "
-"this value before you begin to select tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:417
-msgid ""
-"You control which side the parallel track will be on by moving the cursor "
-"from one side of the track centerline to the other.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:418
-msgid "When you release the mouse button the new parallel track is created.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:419
-msgid ""
-"Note that the <Parallel> command remains active after you created the "
-"track. This is controlled by the Sticky dialog in the Options menu.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:420
-msgid "You cannot create a track parallel to a turnout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:421
-msgid ""
-"Note that the new curved track is automatically connected to the short "
-"parallel track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:422
-msgid ""
-"Polylines and Polygons (created with the <Draw> command) can be modified by "
-"dragging on their Corners or Edges.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:423
-msgid "If you select the middle of an Edge a new Corner is created.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:424
-msgid ""
-"If you drag a Corner to another Corner the two are merged and the Edge "
-"between them is removed.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:425
-msgid "But you cannot have a Poly-shape with less than 3 sides.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:426
-msgid ""
-"To use the <Profile> command you first need to define Elevations on your "
-"layout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:427
-msgid "In this example we'll use the Elevations defined in the last example.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:428
-msgid "You can move or resize the Profile dialog now if you want.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:429
-msgid ""
-"To show the Profile you need to select a Path on the tracks of your layout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:430
-msgid "Select a Defined Elevation point (marked by Gold dots).\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:431
-msgid "We will start with the right end of the siding.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:432
-msgid ""
-"The second Point is at the left end of the siding. The Path will be drawn "
-"in Purple on the layout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:433
-msgid "Now select the end of one of the Branches\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:434
-msgid ""
-"The Profile line is drawn in Red. This indicates that there some turnouts "
-"on that section of the Path which have more than 2 connections.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:435
-msgid ""
-"The grade on this part of the Path is the average and may be affected by "
-"other Elevations, such the end of the lower branch.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:436
-msgid "Now try to select the End-Point of the other branch.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:437
-msgid ""
-"You will get an error message because there is no route to one of the ends "
-"of the existing Path.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:438
-msgid ""
-"In this case remove the last part of the Path by clicking on current end of "
-"the Path and reselect the End-Point.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:439
-msgid "Notice that the Grade has changed on the Profile.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:440
-msgid ""
-"You can Ignore End-Points on the Path by using Shift-Right-Click to display "
-"the Profile Options popup menu and chosing Ignore.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:441
-msgid ""
-"Note: We can't show the menu in demo mode but we will show the effect of a "
-"Shift Right Click and selecting ignore. We will be Ignoring the End-Point "
-"of the Turnout that is not on the Path.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:442
-msgid "Notice that part of the Profile line is redrawn in Blue.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:443
-msgid ""
-"Also, the Computed Elevations and Grade marker on the right side of the "
-"layout have been updated.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:444
-msgid ""
-"You can set additional Defined Elevation points using the Profile Options "
-"popup menu. These points are added to the Profile if they are on the Path.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:445
-msgid ""
-"We do this by Shift Right Click to display the Profile Options popup menu "
-"and selecting Define.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:446
-msgid ""
-"We've just added a Defined Elevation point to the middle of the lower "
-"branch. Notice the addition on the Profile dialog.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:447
-msgid ""
-"For the siding we defined a Station name but it's not on the Path, since the "
-"Path takes the shortest distance between points.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:448
-msgid ""
-"We can Ignore one of the End-Points on a Turnout to force the Path to take "
-"the other route.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:449
-msgid ""
-"Again we use Shift-Right-Click to display the Profile Options menu and "
-"select ignore.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:450
-msgid "Now remove the First section of the Path,\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:451
-msgid "and reselect it.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:452
-msgid ""
-"Now the Path goes through the Station End-Point and the name appears on the "
-"Profile dialog.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:453
-msgid "Now we need to increase the separation where the tracks cross.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:454
-msgid ""
-"The two Elevations you see here are Computed Elevations which means "
-"XTrackCAD dynamically computes the Elevation based on the Elevations of "
-"connecting tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:455
-msgid ""
-"First make the lower End-Point a Defined Elevation point using Shift-Right-"
-"Click and the Profile Options menu. You will see the End-Point marked by a "
-"Gold dot and a new line is added to the Profile dialog.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:456
-msgid "Now, drag the point on the Profile Dialog to change the Elevation.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:457
-msgid ""
-"Note the grade on each side of the point will be displayed at the bottom of "
-"the Profile dialog.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:458
-msgid ""
-"After we release the Profile is updated to show the new Elevation and "
-"Grade.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:459
-msgid "The <Rescale> command will change the size of the selected objects.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:460
-msgid "First we will try rescaling by ratio.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:461
-msgid "We are going to make everything 150% bigger.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:462
-msgid "Note the track gauge did not change.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:463
-msgid "Let's try that again.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:464
-msgid "Now we are going to convert from one scale to another.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:465
-msgid "We will convert everything from N scale to HO scale...\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:466
-msgid "and change the track gauge as well.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:467
-msgid "Note that the Title of the turnout did not change.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:468
-msgid ""
-"The <Rotate> command will pivot the Selected objects. First Click on the "
-"pivot point and then drag to Rotate the objects.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:469
-msgid ""
-"In this example we will rotate the selected structure about it's center.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:470
-msgid ""
-"The <Rotate> command will restrict the rotation to increments of 15° if you "
-"hold down the Control key.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:471
-msgid ""
-"Shift-Right-Click will display a popup-menu that you can use to rotate by "
-"fixed amount (15°, 30°, 45°, 90° or 180°). The demonstration cannot show "
-"the popup-menu but it can show the effects.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:472
-msgid "Here we will rotate by 90° clockwise (CW).\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:473
-msgid ""
-"Another option of the <Rotate> command popup-menu is to Align the Selected "
-"object with some other object.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:474
-msgid ""
-"First we will click on one line of the Selected object. The angle of this "
-"part of the object will be Aligned.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:475
-msgid ""
-"Next, we click on an Unselected object. The Selected structure will be "
-"rotated so that the line we clicked on will be parallel to the straight "
-"track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:476
-msgid ""
-"If we drag the mouse across the track, we can flip the structure by 180°. "
-"This is similar to how we place turnouts.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:477
-msgid ""
-"We can also align to curved shapes. The Selected object will be rotated to "
-"be parallel to the curve under the cursor.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:478
-msgid ""
-"As we drag along the curved track the Selected object rotates to follow the "
-"curve.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:479
-msgid "Again, if we drag across the track we can flip the stucture.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:480
-msgid "We can also Align to another Structure or any object.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:481
-msgid ""
-"The <Ruler> command draws a Ruler on the layout you can use to measure "
-"distances.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:482
-msgid "If you press the <Ruler> command again the Ruler is removed.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:483
-msgid "But you can place it somewhere else.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:484
-msgid "The <Select> command is used to select tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:485
-msgid "Selected tracks can be moved or rotated during the <Select> command.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:486
-msgid "Selected tracks can also be deleted, hidden, listed and exported.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:487
-msgid "A single Left-Click selects tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:488
-msgid "Selecting a selected track de-selects it.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:489
-msgid ""
-"Shift-Left-Click on a track will select all unselected tracks connected to "
-"the track. Selection stops at a previously selected track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:490
-msgid "Be careful with this because its easy to select all tracks this way.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:491
-msgid "The <esc> key will deselect all objects.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:492
-msgid "Left-Drag is used to select all objects within an area.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:493
-msgid "And Right-Drag de-selects all tracks within an area.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:494
-msgid "Shift-Left-Drag is used to move selected tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:495
-msgid ""
-"When you move selected tracks that are connected to unselected tracks, the "
-"tracks will be disconnected. These points are marked by a Red cross on the "
-"layout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:496
-msgid ""
-"Drawing the tracks while moving can be very time-consuming. We had just "
-"used the \"Normal\" method of drawing tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:497
-msgid ""
-"The Command Options dialog (from the Options menu) contains a Radio button "
-"group which you can use to pick the drawing method.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:498
-msgid ""
-"You can also popup the Command Options Menu by pressing Shift-Right-Click "
-"which includes options for setting the drawing method. These options are "
-"also available for the Move and Rotate Command Options Menu.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:499
-msgid ""
-"The next method is \"Simple\" draws. Here tracks are drawn using one line, "
-"no End-Points are drawn, lines are not drawn and structures are drawn using "
-"a box outline.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:500
-msgid ""
-"Note: you can move the Command Options dialog if it obscures the main "
-"window.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:501
-msgid ""
-"The next method is to just draw the End-Points of the selected tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:502
-msgid ""
-"Unconnected End-Points are indicated by Red crosses, and connected End-"
-"Points are indicated by Red lines.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:503
-msgid "Now we will go back to using the Normal method again.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:504
-msgid ""
-"Shift-Right-Drag rotates the selected tracks about the pivot point (which is "
-"where you started the drag)\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:505
-msgid ""
-"Next we select the <Join Tracks> command. You can use Shift-Left-Click to "
-"move an End-Point of a selected track to join with an unselected track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:506
-msgid ""
-"Note: because of differing display resolutions the next mouse click may not "
-"be positioned correctly in this demo and the Move-To-Join operation may not "
-"be demonstrated.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:507
-msgid "The <Split> command is used to split and disconnect tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:508
-msgid "Simply select the spot on the track you want to split.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:509
-msgid "You cannot split turnouts (unless you hold down the Shift key).\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:510
-msgid ""
-"If you split at spot that is already an End-Point between two tracks, or "
-"split twice at the same spot, the track is disconnected.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:511
-msgid "The <Tunnel> command marks selected tracks as hidden.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:512
-msgid ""
-"A tunnel portal is drawn at the boundary between hidden and normal track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:513
-msgid ""
-"How the hidden tracks are drawn (solid, dashed or invisible) is controlled "
-"by the Draw EndPts radio button group on the Setup dialog.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:514
-msgid ""
-"To 'un-hide' a track just Select it again and click the Tunnel button.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:515
-msgid ""
-"Straight tracks are created by selecting the first End-Point of the track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:516
-msgid "Then the other End-Point is dragged to its final postion.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:517
-msgid "The left mouse button is released at the final end postion.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:518
-msgid ""
-"Table Edges are used to mark the edges of the layout, either for aisles or "
-"room walls.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:519
-msgid "A Table Edge is attracted to the ends of other Table Edges.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:520
-msgid "Table Edges can be modified by dragging on their ends.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:521
-msgid ""
-"If you hold down the Control key while dragging then the Table Edge will be "
-"attracted to other objects.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:522
-msgid ""
-"These examples shows some of the various Turnout Designer windows. Each "
-"window defines a different type of turnout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:523
-msgid ""
-"In each window there are a number of parameters to fill in and one or two "
-"description lines.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:524
-msgid "You can print the design to check the dimensions before saving them.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:525
-msgid "This is the regular turnout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:526
-msgid ""
-"In addition to the dimensions, you also enter the Title (Manufacturer, "
-"Description and Part Number). For Turnouts with Left and Right hand "
-"versions there are separate Descriptions and Part Numbers.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:527
-msgid ""
-"Some Turnouts and Sectional track are pre-mounted on roadbed. For these "
-"parts you can specify the width of the roadbed, the thickness of the lines "
-"drawn for the edge of the roadbed and the color.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:528
-msgid "The double slip switch is described by only a few parameters.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:529
-msgid "The double crossover only needs length and track separation.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:530
-msgid ""
-"Pressing the turnout button displays the Turnout Selection window to let you "
-"choose a turnout to place.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:531
-msgid ""
-"Note that once you start to place the turnout on the Main window the Turnout "
-"Selection window disappears. This feature is enabled by the Hide toggle "
-"button on the dialog.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:532
-msgid ""
-"You can place the turnout on a arbitrary position on the layout. Left-drag "
-"the turnout into place...\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:533
-msgid "Then you can rotate the turnout by Right dragging.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:534
-msgid ""
-"You can also use Shift-Right-Click to display a popup menu that lets you "
-"rotate the Turnout by specific angles.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:535
-msgid ""
-"When you are satisfied with the position and orientation of the turnout "
-"press Space bar or the Return key on the keyboard to finish placing the "
-"turnout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:536
-msgid ""
-"Pressing the Ok button on the Turnout dialog will end the <Turnout> command "
-"as well as placing the turnout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:537
-msgid ""
-"If you drag along an existing track the new turnout will be attached to the "
-"track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:538
-msgid ""
-"Note that the status line tells you the number of End-Points that would be "
-"connected and, the maximum displacement of the End-Points. This will be "
-"useful when building complex track, as we will see later.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:539
-msgid ""
-"By moving the cursor from one side to the other of the track centerline you "
-"can flip the turnout 180°.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:540
-msgid ""
-"If you try to drag across another turnout the new turnout will placed at the "
-"nearest End-Point of the existing turnout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:541
-msgid ""
-"When you press Space or Return while the turnout is on a track, the track "
-"will be split and the new turnout attached automatically.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:542
-msgid "Pressing Close ends the <Turnout> command.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:543
-msgid "Sometimes it's useful to modify turnouts triming one of the ends.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:544
-msgid "We use the <Split> command for this.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:545
-msgid "Normally, if we try to Split a turnout we get an error message.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:546
-msgid "Hold down the Shift key and try again.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:547
-msgid ""
-"The end of the turnout has been replaced by a piece of straight flex track "
-"which we can modify.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:548
-msgid "We can try splitting the diverging leg.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:549
-msgid ""
-"Notice that the tail of the diverging leg has been changed to a curved "
-"track...\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:550
-msgid "and a straight track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:551
-msgid ""
-"This example show how to layout a yard using the <Turnout> and <Parallel> "
-"commands.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:552
-msgid ""
-"You can resize and move the Turnout Selection dialog if it obscures the "
-"other windows.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:553
-msgid "First we place a turnout on the main line.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:554
-msgid "Next extend the turnout with the <Modify> command.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:555
-msgid ""
-"Now create a track parallel to the main line. Make sure the separation is "
-"reasonable for your scale.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:556
-msgid "And place a turnout to connect the new track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:557
-msgid "We'll zoom in here to see what's going on.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:558
-msgid ""
-"Notice how we control which way the turnout is facing by moving the mouse "
-"across the center line of the track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:559
-msgid ""
-"The Status bar displays the number of auto-connections that will be made and "
-"the maximum offset.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:560
-msgid ""
-"XTrackCAD adjusts the turnout position for the best fit to minimize any "
-"connection offset\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:561
-msgid "Note that placing the turnout splits the parallel track.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:562
-msgid "We have to delete the leftover piece by Selecting and Deleting it.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:563
-msgid "Repeat the process for the other tracks in the yard.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:564
-msgid "For the last track we will join with a curve instead of a turnout.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:565
-msgid "We can indicate the mainline by making the rails wider.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:566
-msgid "First we select the mainline tracks...\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:567
-msgid "And then select Medium Tracks from the Edit menu.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:568
-msgid "We can make the rail thicker by selecting Thick Tracks.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:569
-msgid ""
-"Turntables are created by specifying the radius in a dialog box on the "
-"Status Bar. The radius in the dialog can be changed before proceeding.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:570
-msgid "Then the turntable is dragged to its final location.\n"
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:571
-msgid ""
-"XTrackCAD provides demonstrations on most of the program's features. The "
-"demos can be run by clicking on the Help menu on the Main window and then "
-"selecting Demos."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:572
-msgid ""
-"The notation \"Menu|Item\" is used in the documentation (and the on-line "
-"demos and tips) to indicate the selection of a menu item.\n"
-"For example File|Open means to open the menu by clicking on File on the menu "
-"bar of the Main window and then selecting the Open item from that menu."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:573
-msgid ""
-"A number of example layouts are provided. These files are located in the "
-"'examples' directory where you installed XTrackCAD. The \"File|Open\" "
-"command will open that directory when first used."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:574
-msgid ""
-"When installed, the program measures all units in inches. You can change "
-"this on the \"Options|Preferences\" dialog by changing the Units item to "
-"Metric instead of English."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:575
-msgid ""
-"You can change the overall size of your layout on the \"Options|Layout\" "
-"dialog."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:576
-msgid ""
-"When installed, the default command is the Describe command. More "
-"experienced users will probably want to change this to the Select command. "
-"You can do this on the \"Options|Command Options\" dialog."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:577
-msgid ""
-"Set your modeling scale on the \"Options|Layout\" dialog. This controls the "
-"Turnouts and Structures that are available, Easement values and track gauge."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:578
-msgid ""
-"When Selecting tracks, the connection between Selected and Unselected tracks "
-"is marked by a Red X. This indicates points where the connection between "
-"tracks will be broken if you Move or Rotate the Selected tracks."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:579
-msgid ""
-"You can change orientation of the pages on the Print command by moving or "
-"rotating the Print Grid.\n"
-"Shift-Left-Drag moves the grid and Shift-Right-Drag rotates the grid."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:580
-msgid ""
-"You can add track to any unconnected End-Point with the Modify command.\n"
-"Hold down the Shift key and click on the End-Point and drag away to create a "
-"new track segment attached to the End-Point.\n"
-"Repeat with the new End-Point to create flowing tracks."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:581
-msgid ""
-"You can create Curved tracks in four ways by dragging from:\n"
-" the 1st End-Point in the direction of the curve\n"
-" Center of the Curve to the 1st End-Point\n"
-" End-Point to the Center\n"
-" the 1st to 2nd End-Point\n"
-"Then drag on one of the Red arrows to create the final shape of the curve.\n"
-"\n"
-"You can click on the small button to the left of the Curve command button to "
-"change the method."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:582
-msgid ""
-"When creating a straight or a curved track by dragging from the 1st End "
-"Point, you can snap the new track to an existing open end point by holding "
-"down Shift while you click.\n"
-"The new track will be joined to the old when you create it."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:583
-msgid ""
-"Track Circles provide a quick way to see what arrangement of tracks will fit "
-"in your layout spaces. Create Circles with your typical radius and place "
-"them in corners and other locations where your main-line will make changes "
-"of direction. This will give you an overall idea of how your layout will "
-"look.\n"
-"\n"
-"You can create Circles by:\n"
-" using a fixed radius\n"
-" dragging from the Center to edge\n"
-" dragging from an edge to the Center\n"
-"You can click on the small button to the left of the Circle command button "
-"to change the method."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:584
-msgid ""
-"Easements (spiral transition curves) are used when track changes from "
-"straight to curved by gradually changing the radius. This improves "
-"operation and appearance.\n"
-"Easements are created with Joining or Extending Tracks.\n"
-"The Easement dialog is used to control easements."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:585
-msgid ""
-"\"Help|Recent Messages\" shows the last error and warning messages that were "
-"generated by the program. Also an explanation of each message is displayed."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:586
-msgid ""
-"When creating stall tracks for a turntable, you usually want the the stall "
-"tracks to be spaced evenly.\n"
-"The \"Turntable Angle\" item on \"Options|Command Options\" dialog can be "
-"used specify the minimum angle between stall tracks."
-msgstr ""
-
-# Este texto não descreve com clareza onde se localiza o diretório de trabalho e nem onde copiar o arquivo file.xtc. Verificar também se o nome do arquivo destino está correto.
-#: ../../../../build/work/app/i18n/custmsg.h:587
-msgid ""
-"XTrackCAD periodically saves the current layout in a check point file. The "
-"'Check Point' item on the 'Options|Preferences' dialog controls how often "
-"the file is saved.\n"
-"You can recover your working file after a system crash by copying the "
-"checkpoint file (xtrkcad.ckp in the XTrackCAD Working directory) to file.xtc"
-msgstr ""
-"XTrackCAD salva periodicamente o layout em um arquivo temporário. O item "
-"\"Freqüência de salvamento automatico\" na caixa de diálogo \"Opções | "
-"Preferências\" controla a periodicidade na qual o arquivo é salvo.\n"
-"Você pode restaurar seu arquivo de trabalho após uma falha do sistema "
-"copiando o arquivo temporário (\"xtrkcad.ckp\" no diretório de trabalho do "
-"XTrackCAD) para \"file.xtc\"."
-
-#: ../../../../build/work/app/i18n/custmsg.h:588
-msgid ""
-"The Parallel command is helpful to layout yards and sidings. If the "
-"Parallel track abuts with an existing track, it is automatically connected."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:589
-msgid ""
-"You can use Shift-Drag in Select command to move and rotate selected "
-"tracks.\n"
-"Shift-Left-Drag moves tracks and Shift-Right-Drag rotates them.\n"
-"Control-Left-Drag can move labels."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:590
-msgid ""
-"You can move and rotate the Snap Grid to align with existing track or "
-"benchwork."
-msgstr ""
-"Você pode mover e rotacionar a grade para alinhar com uma linha existente ou "
-"a bancada."
-
-#: ../../../../build/work/app/i18n/custmsg.h:591
-msgid ""
-"Use the Parts List command to measure track length.\n"
-"Select the tracks you want to measure and then click on the Parts List "
-"button. The report will list the total of length of the selected flex-"
-"track. You will have to add in the length of any Turnouts."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:592
-msgid ""
-"The length of flex-track attached to each Turnout is displayed on layout "
-"near the end-points of the Turnouts.\n"
-"Make sure 'Lengths' option of the 'Label Enable' toggle button on the "
-"Display dialog is selected."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:593
-msgid ""
-"The Profile command can be used to find the length of a continous section of "
-"track.\n"
-"Select the track at the beginning and end of the section. The total length "
-"of track will be displayed on the Profile window in the lower right corner.\n"
-"Note: the Profile selects the shortest path between the two selected tracks, "
-"which might not be the path you are interested in. In this case, select the "
-"first track and then select other tracks along the path."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:594
-msgid ""
-"Layers can be used to contain different groups of tracks or other features. "
-"You might use one layer for the main-line, another of staging tracks and "
-"another of benchwork.\n"
-"You can give each layer a name (by using the Layer dialog). This name will "
-"be displayed as the Balloon Help for the corresponding Layer button, if you "
-"have Balloon Help enabled on the Display dialog."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:595
-msgid ""
-"You can remove groups of buttons or the Hot Bar from the Main window to give "
-"you more room if you are not using some features. Also, the number of Layer "
-"buttons displayed is controlled by the Layers dialog."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:596
-msgid ""
-"The size of the Map window is controlled by the overall size of the room "
-"(specified on the Layout dialog) and the Map Scale (on the Display dialog). "
-"You can make the Map window larger (or smaller) by decreasing (or "
-"increasing) the Map Scale.\n"
-"XTrackCAD will prevent you from making the Map window too small or too large."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:597
-msgid ""
-"You can unload parameter files you are not using by the Parameter Files "
-"dialog. This removes unused Turnout and Structure definitions from the Hot "
-"Bar and makes the program start faster."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:598
-msgid ""
-"Right-Click on the Main window displays a menu list of commands as an "
-"alternative to pressing the buttons on the tool bar or using the menu "
-"accelerator keys."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:599
-msgid ""
-"Holding down the Shift key while you Right-Click will display options for "
-"the current command (if any)."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:600
-msgid ""
-"Right-Click on the Hot Bar displays a menu of the different groups of "
-"objects which you can use to jump to the group you are interested in.\n"
-"Pressing a numeric key (1-9 and 0) moves the Hot Bar to corresponding "
-"position (1 is the start, 5 is half way, 0 is the end)."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:601
-msgid ""
-"Right-Drag on the Map window sets the origin and scale of the Main window.\n"
-"The Main window will be centered on the spot where you started the Draw and "
-"how far you Drag will control how large an area you can see on the Main "
-"window."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:602
-msgid ""
-"To refresh the Main window, press Control-L (hold down the 'Ctrl' key and "
-"then press the 'l' key)."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:603
-msgid ""
-"The File menu contains a list of the last 5 layouts you were working on."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:604
-msgid ""
-"The Print command can optionally print lines representing the roadbed for "
-"all tracks. This is useful when printing full size (1:1) for cutting "
-"roadbed."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:605
-msgid ""
-"Pressing the 'Esc' key cancels the current command and invokes the default "
-"command, (which is either Describe or Select)."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:606
-msgid ""
-"When moving or rotating tracks on slow machines or with a large number of "
-"tracks, you can improve performance by changing the way tracks are drawn "
-"while being moved.\n"
-"Shift-Right click will display a menu containing options to draw tracks "
-"normally, as simple lines or just draw end-points."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:607
-msgid ""
-"The colors of different parts of the Main window can be changed with the "
-"Colors dialog. In particular, the Snap Grid color can be changed to make it "
-"more visible when printed."
-msgstr ""
-"As cores dos diferentes objetos da janela principal podem ser alteradas "
-"através da caixa de diálogo de cores. Particularmente, a cor da grade pode "
-"ser mudada para ficar melhor visível quando impressa."
-
-#: ../../../../build/work/app/i18n/custmsg.h:608
-msgid ""
-"By default objects are drawn in their normal colors. Tracks will be drawn "
-"in Black. Objects can also be drawn in the color according to their Layer. "
-"The color of a Layer is displayed on the corresponding Layer button.\n"
-"The Display dialog 'Color Layers' item has separate toggles for Tracks and "
-"non-Tracks."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:609
-msgid ""
-"Each Layer can be drawn or hidden by the 'Visible' toggle on the Layers "
-"dialog. "
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:610
-msgid ""
-"Short cut Layer buttons can also be displayed on the tool bar for up to the "
-"first 20 layers.\n"
-"This buttons allow to Show or Hide the layers."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:611
-msgid "The name of the Layer is the Balloon Help for the Layer button."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:612
-msgid ""
-"The playback speed of the Demos can be changed by using Speed drop down list "
-"on the Demo window."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:613
-msgid ""
-"Many of the commands and dialogs can be invoked by special key combinations "
-"called Menu-Accelerators. These are listed on the Menus next to the command "
-"name. For example, Control-P will invoke the Print command."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:614
-msgid ""
-"The Connect command is used to join Sectional track pieces that don't quite "
-"fit together.\n"
-"This command works by adding small gaps between other tracks to move the "
-"selected End-Points closer together."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:615
-msgid ""
-"To copy a group of objects: Select the objects, press Control-C (or select "
-"Copy from the Edit menu), press Control-V (or select Paste from the Edit "
-"menu).\n"
-"The selected tracks will be copied to the layout and you can Move or Rotate "
-"them into position."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:616
-msgid ""
-"In the Rotate (or Select) commands you can press Shift-Right-Click to "
-"display the Rotate menu which allows you to rotate the selected objects by a "
-"specific angle."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:617
-msgid ""
-"You can use the Move-To-Join option of the Join command (hold down the Shift "
-"key) to move a group of Selected tracks to attach with some unselected End-"
-"Point."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:618
-msgid ""
-"The Price List dialog (on the File Menu) is used to specify the prices of "
-"each type of Turnout, Sectional Track and Structure. Also, the length and "
-"price of flex-track pieces can be specified for each scale.\n"
-"This values will be used on the Parts List report to generate total cost of "
-"the selected objects."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:619
-msgid ""
-"Areas of water can represented by a Polygon (use the Draw command) of the "
-"appropiate color.\n"
-"By using the Modify command, you can move, add or remove corners of the "
-"Polygon to fit the shape of the water.\n"
-"You use the Below command to place the Polygon below (or behind) other "
-"objects.\n"
-"\n"
-"You can also use a Polygon to represent aisles. "
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:620
-msgid ""
-"When you create Benchwork you can move it below other objects by Selecting "
-"the Benchwork and use the Below command.\n"
-"Also, put Benchwork in a separate Layer so you can hide it if desired."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:621
-msgid ""
-"You can enter Distances and Lengths using any format regardless of the "
-"Length Format on the Preferences dialog."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:622
-msgid ""
-"You can enter Metric values when English is the default Units and vice versa."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:623
-msgid ""
-"When entering Distances and Lengths you can press the '=' key to redisplay "
-"the value in the default format."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:624
-msgid ""
-"You can also press the 's' key to convert a Prototype measurement to a Scale "
-"measurement y dividing by the ratio for the current scale."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:625
-msgid ""
-"The 'p' key will convert a Scale measurement to a Prototype measurement."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:626
-msgid ""
-"You can place cars on the layout using the Train Simulation command to check "
-"clearance points, track to track separation and coupling."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:627
-msgid ""
-"Use the MoveTo button on the Custom Management dialog to move your custom "
-"Turnout, Structure and Car definitions to a .XTP parameter file."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:628
-msgid ""
-"If you are printing multiple pages on a continuous feed printer (such a Dot "
-"Matrix) you can change the Page Order if necessary to print pages out in "
-"proper order."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:629
-msgid ""
-"On the Car Item and Car Part dialogs, you can enter custom values for "
-"Manufacturer, Part and Road by typing the new value directly into the Drop "
-"Down List."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:630
-msgid ""
-"On the Car Item dialog, you can change the Road, Number, Color and other "
-"values for a Car. This is useful if you repaint or renumber a car. \n"
-"You can also change the Coupler Mounting and Coupler Length if you change "
-"the couplers."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:631
-msgid ""
-"You can Export your Car Inventory to a file in Comma-Separated-Value format "
-"which can be read by most spread-sheet programs."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:632
-msgid "Use the Train Odometer to measure distances along the track."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:633
-msgid ""
-"Holding down the Shift key when clicking the Zoom In or Zoom Out button will "
-"zoom to a programmed Drawing Scale. \n"
-"Holding down the Shift and Control keys when clicking a Zoom button will set "
-"it's program Zoom to the current Drawing Scale."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:634
-msgid ""
-"You can trim the ends of turnouts by holding down the Shift key when using "
-"the Split command."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:635
-msgid ""
-"The Split command can be used to create Block Gaps at end points between two "
-"tracks. \n"
-"Either rail or both rails can be gapped, which are drawn as thick lines."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:636
-msgid ""
-"Trains will 'crash' if they hit another car when travelling faster than the "
-"'Max Coupling Speed' (on the Command Options dialog). \n"
-"They will also 'crash' if they hit the end of the track or an open "
-"turnout. \n"
-"Crashed trains must be manually moved back onto the track."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:637
-msgid ""
-"You can add new track segments to a turnout definition or create a "
-"definition from individual tracks using the Group command."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:638
-msgid ""
-"The center point and radius of Curved and Circle tracks can optionally be "
-"drawn. \n"
-"This feature is toggled by using the Move Label command and doing a Shift-"
-"Left-Click on the track."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:639
-msgid ""
-"Turnout, Curved and Helix track labels can be individually turned on and off "
-"by doing a Shift-Right-Click on the track when using the Move Label command."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:640
-msgid ""
-"You can use the Describe command to change the font size of Text objects."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:641
-msgid ""
-"You can use the Describe command to change the size of Dimension Line labels."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:642
-msgid ""
-"Normally Right-Click displays a popup menu of commands and Shift-Right-Click "
-"displays options for the current command. \n"
-"This can reversed by using the Right Click toggle button on the Command "
-"Options dialog."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:643
-msgid ""
-"The Align item on the Rotate command options menu will let you Align "
-"selected objects with any unselected object. \n"
-"The selected objects are rotated so the first point is parallel to the "
-"second point you selected."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:644
-msgid ""
-"Print To Bitmap allows you to print the track center line. \n"
-"This is useful if you later print the bitmap full size as a template when "
-"laying track."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:645
-msgid ""
-"You can export the selected tracks to a DXF file which can be read by most "
-"CAD programs."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:646
-msgid ""
-"Lengths and distances can be displayed in a variety of units and formats "
-"such as 1' 10 3/4\", 1ft 10.75in or 22.750. In Metric mode, distances can "
-"be displayed as millimeters, centimeters or meters. See the Length Format "
-"item on the Preferences dialog."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:647
-msgid ""
-"Tracks that are too steep or curve too tightly are drawn in the Expection "
-"color (Purple by default). \n"
-"This helps to identify potential problem areas. \n"
-"The maximum grade and minimum radius are set on the Preferences dialog."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:648
-msgid ""
-"The Flip command produces a mirror-image of the selected tracks. \n"
-"If possible, right-hand turnouts are relabeled as left-hand turnouts (and "
-"vice versa)."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:649
-msgid ""
-"Then Ungroup command will break turnouts and structures into individual "
-"track, line and shape segments. \n"
-"You can modify each segment and add new ones. \n"
-"Then use the Group command to update the definition."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:650
-msgid "Dimension lines show the distance between two points."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:651
-msgid ""
-"A variety of Benchwork (rectangular, L-girder and T-girder) can be drawn. \n"
-"Use the Below command to move the Benchwork below the track for proper "
-"display."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:652
-msgid ""
-"The Turnout Designer dialogs allow you to specify the width of any attached "
-"roadbed. \n"
-"As well, the color and thickness of the lines used to represent the roadbed "
-"can be specified."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:653
-msgid ""
-"The Color dialog (on the Options menu) is used to change the color of "
-"different objects on the display. \n"
-"You can change the color of the Snap Grid and Borders, as well as Normal, "
-"Selected and Exception tracks."
-msgstr ""
-"A caixa de diálogo de cores (no menu \"Opções\") é usada para alterar a cor "
-"dos diferentes objetos na janela principal. \n"
-"Você pode alterar a cor da grade e das bordas, como também dos trechos "
-"normais, selecionados e excepcionais."
-
-#: ../../../../build/work/app/i18n/custmsg.h:654
-msgid ""
-"You can draw tracks with wider lines for rails. \n"
-"Select the tracks and use Medium or Thick Tracks on the Edit menu."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:655
-msgid ""
-"Many objects on the layout have labels: Turnouts/Helix/Curved Titles, Track "
-"Lenghts, End-Point Elevations, Track Elevations and Cars. \n"
-"You can turn these labels on or off with the Label Enable toggle buttons on "
-"the Display options dialog."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:656
-msgid ""
-"If you hold down the Control key when using the Rotate command, the rotation "
-"will be down in increments of 15°."
-msgstr ""
-
-#: ../../../../build/work/app/i18n/custmsg.h:657
-msgid ""
-"When using the Rotate command, Shift-Right-Click displays a menu allowing "
-"you to rotate by specific amounts or to align the selected objects with "
-"another object."
-msgstr ""
-
-#~ msgid "Blocks"
-#~ msgstr "Blocos"
-
-#~ msgid "Angle=%0.3f"
-#~ msgstr "Ângulo=%0.3f"
-
-#~ msgid "Place circle center"
-#~ msgstr "Posicionar o centro da circunferência"
-
-#~ msgid "Draw"
-#~ msgstr "Desenhar"
-
-#~ msgid "Not a SwitchMotor!"
-#~ msgstr "Isto não é um motor de AMV!"
-
-#~ msgid "SwitchMotor"
-#~ msgstr "Motor de AMV"
-
-#~ msgid "Switch Motors"
-#~ msgstr "Motores de AMV"
-
-#~ msgid "Custom Update"
-#~ msgstr "Atualizar personalizadamente"
-
-#~ msgid "Black"
-#~ msgstr "Preto"
-
-#~ msgid "Dark Blue"
-#~ msgstr "Azul-escuro"
-
-#~ msgid "Steel Blue"
-#~ msgstr "Azul-aço"
-
-#~ msgid "Royal Blue"
-#~ msgstr "Azul-royal"
-
-#~ msgid "Blue"
-#~ msgstr "Azul"
-
-#~ msgid "Deep Sky Blue"
-#~ msgstr "Azul celeste profundo"
-
-#~ msgid "Light Sky Blue"
-#~ msgstr "Azul celeste claro"
-
-#~ msgid "Powder Blue"
-#~ msgstr "Azul-pólvora"
-
-#~ msgid "Dark Aqua"
-#~ msgstr "Azul-água-escuro"
-
-#~ msgid "Aquamarine"
-#~ msgstr "Verde-azulado"
-
-#~ msgid "Aqua"
-#~ msgstr "Azul-água"
-
-#~ msgid "Dark Green"
-#~ msgstr "Verde-escuro"
-
-#~ msgid "Forest Green"
-#~ msgstr "Verde-floresta"
-
-#~ msgid "Lime Green"
-#~ msgstr "Verde-lima"
-
-#~ msgid "Green"
-#~ msgstr "Verde"
-
-#~ msgid "Lawn Green"
-#~ msgstr "Verde-grama"
-
-#~ msgid "Pale Green"
-#~ msgstr "Verde-pálido"
-
-#~ msgid "Dark Yellow"
-#~ msgstr "Amarelo-escuro"
-
-#~ msgid "Coral"
-#~ msgstr "Coral"
-
-#~ msgid "Orange"
-#~ msgstr "Laranja"
-
-#~ msgid "Gold"
-#~ msgstr "Dourado"
-
-#~ msgid "Yellow"
-#~ msgstr "Amarelo"
-
-#~ msgid "Saddle Brown"
-#~ msgstr "Marrom-couro"
-
-#~ msgid "Brown"
-#~ msgstr "Marrom"
-
-#~ msgid "Chocolate"
-#~ msgstr "Chocolate"
-
-#~ msgid "Rosy Brown"
-#~ msgstr "Marrom-rosado"
-
-#~ msgid "Tan"
-#~ msgstr "Canela"
-
-#~ msgid "Beige"
-#~ msgstr "Bege"
-
-#~ msgid "Dark Red"
-#~ msgstr "Vermelho-escuro"
-
-#~ msgid "Tomato"
-#~ msgstr "Vermelho-tomate"
-
-#~ msgid "Red"
-#~ msgstr "Vermelho"
-
-#~ msgid "Hot Pink"
-#~ msgstr "Rosa-quente"
-
-#~ msgid "Pink"
-#~ msgstr "Rosado"
-
-#~ msgid "Dark Purple"
-#~ msgstr "Púrpura-escuro"
-
-#~ msgid "Maroon"
-#~ msgstr "Castanho"
-
-#~ msgid "Purple2"
-#~ msgstr "Púrpura 2"
-
-#~ msgid "Purple"
-#~ msgstr "Púrpura"
-
-#~ msgid "Violet"
-#~ msgstr "Violeta"
-
-#~ msgid "Dark Gray"
-#~ msgstr "Cinza-escuro"
-
-#~ msgid "Gray"
-#~ msgstr "Cinza"
-
-#~ msgid "Light Gray"
-#~ msgstr "Cinza-claro"
-
-#~ msgid ""
-#~ " exists\n"
-#~ "Do you want to overwrite it?"
-#~ msgstr ""
-#~ " existente\n"
-#~ "Sobrescrever?"
-
-#~ msgid "Page %d"
-#~ msgstr "Página %d"
-
-#~ msgid "Print to file ..."
-#~ msgstr "Imprimir em um arquivo..."
-
-#~ msgid "No file name specified"
-#~ msgstr "Nome do arquivo não especificado"
-
-#~ msgid "%s exists"
-#~ msgstr "%s existente"
-
-#~ msgid "Overwrite"
-#~ msgstr "Sobrescrever"
-
-#~ msgid ": cannot open"
-#~ msgstr ": não foi possível abrir"
-
-#~ msgid "Now printing %s"
-#~ msgstr "Imprimindo agora %s"
-
-#~ msgid "Page 1"
-#~ msgstr "Página 1"
-
-#~ msgid "Printer Margin Test Page"
-#~ msgstr "Página de teste de margem"
-
-#~ msgid "Enter both printer name and command"
-#~ msgstr "Digitar nome da impressora e comando"
-
-#~ msgid "Can not save New Printer definition"
-#~ msgstr "Não foi possível nova impressora definida"
-
-#~ msgid "Enter printer name"
-#~ msgstr "Digitar nome da impressora"
-
-#~ msgid "Can not save New Margin definition"
-#~ msgstr "Não foi possível salvar nova margem definida"
-
-#~ msgid "Paper Size"
-#~ msgstr "Tamanho do papel"
-
-#~ msgid "Printer"
-#~ msgstr "Impressora"
-
-#~ msgid "Format"
-#~ msgstr "Formato"
-
-#~ msgid "X Font"
-#~ msgstr "Fonte X Window"
-
-#~ msgid "PS Font"
-#~ msgstr "Fonte PostScript"
-
-#~ msgid "Factor"
-#~ msgstr "Fator"
-
-#~ msgid "Print Test Page"
-#~ msgstr "Imprimir página de teste"
-
-#~ msgid "Add Printer"
-#~ msgstr "Adicionar impressora"
-
-#~ msgid "Name: "
-#~ msgstr "Nome:"
-
-#~ msgid "Command: "
-#~ msgstr "Comando:"
-
-#~ msgid "Add Margin"
-#~ msgstr "Adicionar margem"
-
-#~ msgid "Print To File"
-#~ msgstr "Imprimir em um arquivo"
-
-#~ msgid "File Name? "
-#~ msgstr "Nome do arquivo?"
-
-#~ msgid "Font Alias"
-#~ msgstr "Nome da fonte"
-
-#~ msgid "Enter a post-script font name for:"
-#~ msgstr "Digitar um nome de fonte PostScript para:"
-
-#~ msgid "Printing"
-#~ msgstr "Imprimindo"
-
-#~ msgid "Now printing"
-#~ msgstr "Imprimindo agora"
-
-#~ msgid "Abort Print"
-#~ msgstr "Abandonar impressão"
-
-#~ msgid "XTrackCAD Help"
-#~ msgstr "Ajuda XTrackCAD"
-
-#~ msgid "Describe objects"
-#~ msgstr "Descreve objetos"
+# Portuguese translations for xtrkcad package.
+# Copyright (C) 2009 Daniel Spagnol
+# This file is distributed under the same license as the xtrkcad package.
+# Daniel Spagnol <dspagnol@yahoo.com>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xtrkcad 4.1.3a\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-07-11 09:01+0200\n"
+"PO-Revision-Date: 2009-10-06 22:22-0500\n"
+"Last-Translator: Daniel Spagnol <dspagnol@yahoo.com>\n"
+"Language-Team: Brazilian Portuguese\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt-BR\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: ../bin/archive.c:178 ../bin/archive.c:185 ../bin/archive.c:214
+#: ../bin/archive.c:239 ../bin/archive.c:294 ../bin/archive.c:307
+#: ../bin/archive.c:315 ../bin/archive.c:365 ../bin/archive.c:400
+#: ../bin/archive.c:416 ../bin/archive.c:426 ../bin/archive.c:449
+#: ../bin/cblock.c:491 ../bin/cswitchmotor.c:475 ../bin/dbench.c:147
+#: ../bin/dcar.c:4520 ../bin/dcar.c:4706 ../bin/dcar.c:4716 ../bin/dcar.c:4764
+#: ../bin/dcar.c:4771 ../bin/dcar.c:4789 ../bin/dcar.c:4802 ../bin/dcar.c:4807
+#: ../bin/dcar.c:4836 ../bin/dcar.c:5000 ../bin/directory.c:65
+#: ../bin/directory.c:100 ../bin/directory.c:107 ../bin/directory.c:138
+#: ../bin/directory.c:154 ../bin/dxfoutput.c:193 ../bin/fileio.c:241
+#: ../bin/fileio.c:698 ../bin/fileio.c:898 ../bin/fileio.c:1025
+#: ../bin/fileio.c:1092 ../bin/fileio.c:1098 ../bin/fileio.c:1174
+#: ../bin/fileio.c:1184 ../bin/fileio.c:1517 ../bin/fileio.c:1567
+#: ../bin/fileio.c:1623 ../bin/macro.c:179 ../bin/macro.c:832
+#: ../bin/macro.c:877 ../bin/macro.c:898 ../bin/macro.c:1043
+#: ../bin/macro.c:1060 ../bin/macro.c:1322 ../bin/param.c:2090
+#: ../bin/paramfile.c:250 ../bin/paramfilelist.c:376 ../bin/track.c:1116
+#: ../bin/track.c:1640 ../bin/track.c:1946 ../bin/track.c:1950
+#: ../bin/track.c:1962 ../bin/track.c:2026 ../wlib/gtklib/wpref.c:248
+#: ../wlib/gtklib/wpref.c:255
+msgid "Continue"
+msgstr "Continuar"
+
+#: ../bin/cbezier.c:599
+#, fuzzy
+msgid "Select End-Point - Ctrl unlocks end-point"
+msgstr "Selecionar primeira extremidade a conectar"
+
+#: ../bin/cbezier.c:601
+msgid "Select End-Point"
+msgstr "Selecionar extremidade"
+
+#: ../bin/cbezier.c:633
+msgid "Not close enough to any valid, selectable point, reselect"
+msgstr ""
+
+#: ../bin/cbezier.c:639
+#, c-format
+msgid "Drag point %d to new location and release it"
+msgstr ""
+
+#: ../bin/cbezier.c:648 ../bin/cbezier.c:739 ../bin/cbezier.c:741
+msgid "Pick any circle to adjust it - Enter to confirm, ESC to abort"
+msgstr ""
+
+#: ../bin/cbezier.c:672
+msgid "Bezier Curve Invalid has identical end points Change End Point"
+msgstr ""
+
+#: ../bin/cbezier.c:675
+#, c-format
+msgid "Bezier Curve Invalid has %s Change End Point"
+msgstr ""
+
+#: ../bin/cbezier.c:678
+msgid "Bezier Curve Invalid has three co-incident points"
+msgstr ""
+
+#: ../bin/cbezier.c:680
+#, fuzzy
+msgid "Bezier is Straight Line"
+msgstr "Linha reta"
+
+#: ../bin/cbezier.c:682
+#, c-format
+msgid "Bezier %s : Min Radius=%s Length=%s fx=%0.3f fy=%0.3f cusp=%0.3f"
+msgstr ""
+
+#: ../bin/cbezier.c:686
+#, fuzzy, c-format
+msgid "Bezier %s : Min Radius=%s Length=%s"
+msgstr "Trecho curvo: Raio=%s Comprimento=%s"
+
+#: ../bin/cbezier.c:711
+#, fuzzy
+msgid "No unconnected End Point to lock to"
+msgstr "Selecionar segunda extremidade a conectar"
+
+#: ../bin/cbezier.c:729
+msgid "Bezier curve invalid has identical end points Change End Point"
+msgstr ""
+
+#: ../bin/cbezier.c:732
+#, c-format
+msgid "Bezier curve invalid has %s Change End Point"
+msgstr ""
+
+#: ../bin/cbezier.c:735
+msgid "Bezier curve invalid has three co-incident points"
+msgstr ""
+
+#: ../bin/cbezier.c:737
+#, fuzzy
+msgid "Bezier curve is straight line"
+msgstr "Cria uma linha reta"
+
+#: ../bin/cbezier.c:751 ../bin/cbezier.c:765
+msgid "Invalid Bezier Track - end points are identical"
+msgstr ""
+
+#: ../bin/cbezier.c:758
+#, c-format
+msgid "Invalid Bezier Curve has a %s - Adjust"
+msgstr ""
+
+#: ../bin/cbezier.c:762
+msgid "Invalid Bezier Curve has three coincident points - Adjust"
+msgstr ""
+
+#: ../bin/cbezier.c:770
+#, fuzzy
+msgid "Create Bezier"
+msgstr "Criar linhas"
+
+#: ../bin/cbezier.c:858
+#, fuzzy, c-format
+msgid "%s picked - now select a Point"
+msgstr "Clicar em uma extremidade não selecionada"
+
+#: ../bin/cbezier.c:888 ../bin/ccornu.c:1953
+msgid "No changes made"
+msgstr ""
+
+#: ../bin/cbezier.c:892
+#, fuzzy
+msgid "Modify Bezier"
+msgstr "Modificar trecho"
+
+#: ../bin/cbezier.c:910
+#, fuzzy
+msgid "Modify Bezier Complete"
+msgstr "Modificar trecho"
+
+#: ../bin/cbezier.c:914
+msgid "Modify Bezier Cancelled"
+msgstr ""
+
+#: ../bin/cbezier.c:1038 ../bin/cbezier.c:1129
+#, fuzzy, c-format
+msgid "Place 1st endpoint of Bezier - snap to %s"
+msgstr "Posicionar 1ª extremidade do trecho reto"
+
+#: ../bin/cbezier.c:1056 ../bin/ccornu.c:2290 ../bin/ccurve.c:205
+#: ../bin/ccurve.c:439 ../bin/cstraigh.c:91
+msgid "Track is different gauge"
+msgstr ""
+
+#: ../bin/cbezier.c:1084
+msgid "Drag end of first control arm"
+msgstr ""
+
+#: ../bin/cbezier.c:1091
+msgid "Drag end of second control arm"
+msgstr ""
+
+#: ../bin/cbezier.c:1133 ../bin/cbezier.c:1170
+#, fuzzy, c-format
+msgid "Select other end of Bezier - snap to %s end"
+msgstr "Posicionar 1ª extremidade do trecho reto"
+
+#: ../bin/cbezier.c:1165
+msgid "Control Arm 1 is too short, try again"
+msgstr ""
+
+#: ../bin/cblock.c:111 ../bin/cblock.c:123 ../bin/cblock.c:168
+#: ../bin/ccontrol.c:171 ../bin/ccontrol.c:425 ../bin/compound.c:567
+#: ../bin/csensor.c:163 ../bin/csensor.c:389 ../bin/csignal.c:238
+#: ../bin/csignal.c:498 ../bin/csignal.c:509 ../bin/csignal.c:535
+#: ../bin/cswitchmotor.c:93 ../bin/cswitchmotor.c:112
+#: ../bin/cswitchmotor.c:224 ../bin/dcontmgm.c:91 ../bin/dlayer.c:483
+msgid "Name"
+msgstr "Nome"
+
+#: ../bin/cblock.c:112 ../bin/cblock.c:124 ../bin/cblock.c:169
+#: ../bin/csensor.c:165 ../bin/csensor.c:395 ../bin/csignal.c:498
+#: ../bin/csignal.c:537
+msgid "Script"
+msgstr "Script"
+
+#: ../bin/cblock.c:125
+#, fuzzy
+msgid "Segments"
+msgstr "No. de segmentos"
+
+#: ../bin/cblock.c:170 ../bin/cdraw.c:515 ../bin/cdraw.c:1425
+#: ../bin/cdraw.c:1571 ../bin/cdraw.c:2224 ../bin/cdraw.c:2450
+#: ../bin/cdraw.c:2487 ../bin/ctodesgn.c:170 ../bin/ctodesgn.c:171
+#: ../bin/ctodesgn.c:172 ../bin/ctodesgn.c:173 ../bin/ctodesgn.c:185
+#: ../bin/ctodesgn.c:186 ../bin/ctodesgn.c:236 ../bin/ctodesgn.c:239
+#: ../bin/ctodesgn.c:259 ../bin/ctodesgn.c:264 ../bin/ctodesgn.c:296
+#: ../bin/ctodesgn.c:303 ../bin/ctodesgn.c:305 ../bin/ctodesgn.c:325
+#: ../bin/ctodesgn.c:330 ../bin/ctodesgn.c:362 ../bin/ctodesgn.c:369
+#: ../bin/ctodesgn.c:370 ../bin/ctodesgn.c:391 ../bin/ctodesgn.c:394
+#: ../bin/ctodesgn.c:397 ../bin/ctodesgn.c:432 ../bin/ctodesgn.c:436
+#: ../bin/ctodesgn.c:443 ../bin/ctodesgn.c:444 ../bin/ctodesgn.c:445
+#: ../bin/ctodesgn.c:467 ../bin/ctodesgn.c:469 ../bin/ctodesgn.c:487
+#: ../bin/ctodesgn.c:489 ../bin/ctodesgn.c:508 ../bin/ctodesgn.c:510
+#: ../bin/ctodesgn.c:537 ../bin/ctodesgn.c:557 ../bin/ctodesgn.c:577
+#: ../bin/ctodesgn.c:597 ../bin/ctodesgn.c:635 ../bin/ctodesgn.c:654
+#: ../bin/ctodesgn.c:655 ../bin/ctrain.c:185 ../bin/tbezier.c:258
+#: ../bin/tcornu.c:307 ../bin/tcurve.c:372 ../bin/tstraigh.c:89
+msgid "Length"
+msgstr "Comprimento"
+
+#: ../bin/cblock.c:171 ../bin/cdraw.c:507 ../bin/compound.c:542
+#: ../bin/tbezier.c:245 ../bin/tcornu.c:294 ../bin/tcurve.c:364
+#: ../bin/tease.c:519 ../bin/tstraigh.c:85
+#, fuzzy
+msgid "End Pt 1: X,Y"
+msgstr "Extremidade 1: X"
+
+#: ../bin/cblock.c:172 ../bin/cdraw.c:508 ../bin/compound.c:547
+#: ../bin/tbezier.c:252 ../bin/tcornu.c:299 ../bin/tcurve.c:366
+#: ../bin/tease.c:521 ../bin/tstraigh.c:87
+#, fuzzy
+msgid "End Pt 2: X,Y"
+msgstr "Extremidade 2: X"
+
+#: ../bin/cblock.c:195 ../bin/cblock.c:207 ../bin/cblock.c:575
+#: ../bin/cblock.c:596 ../bin/cblock.c:604 ../bin/cblock.c:674
+#: ../bin/cblock.c:795 ../bin/cblock.c:807 ../bin/cblock.c:845
+#: ../bin/ccontrol.c:205 ../bin/ccontrol.c:218 ../bin/ccontrol.c:230
+#: ../bin/ccontrol.c:486 ../bin/cdraw.c:130 ../bin/cdraw.c:2283
+#: ../bin/cgroup.c:1075 ../bin/cgroup.c:1146 ../bin/cgroup.c:1185
+#: ../bin/cgroup.c:1235 ../bin/cgroup.c:1262 ../bin/cgroup.c:1350
+#: ../bin/cgroup.c:1729 ../bin/cnote.c:69 ../bin/compound.c:603
+#: ../bin/compound.c:618 ../bin/compound.c:651 ../bin/cprint.c:512
+#: ../bin/cprint.c:716 ../bin/cprint.c:723 ../bin/cprint.c:1247
+#: ../bin/cpull.c:511 ../bin/cpull.c:526 ../bin/cpull.c:528 ../bin/cpull.c:530
+#: ../bin/cpull.c:690 ../bin/cselect.c:1068 ../bin/cselect.c:1164
+#: ../bin/cselect.c:1980 ../bin/csensor.c:194 ../bin/csensor.c:206
+#: ../bin/csensor.c:444 ../bin/csignal.c:267 ../bin/csignal.c:666
+#: ../bin/csignal.c:734 ../bin/csnap.c:576 ../bin/csnap.c:705
+#: ../bin/cstruct.c:935 ../bin/cstruct.c:944 ../bin/cstruct.c:1069
+#: ../bin/cswitchmotor.c:250 ../bin/cswitchmotor.c:262
+#: ../bin/cswitchmotor.c:274 ../bin/cswitchmotor.c:286
+#: ../bin/cswitchmotor.c:544 ../bin/cswitchmotor.c:580
+#: ../bin/cswitchmotor.c:714 ../bin/cswitchmotor.c:745 ../bin/ctext.c:173
+#: ../bin/ctodesgn.c:204 ../bin/ctodesgn.c:1199 ../bin/ctodesgn.c:1336
+#: ../bin/ctodesgn.c:1934 ../bin/ctodesgn.c:2049 ../bin/ctodesgn.c:2348
+#: ../bin/ctodesgn.c:2630 ../bin/ctrain.c:205 ../bin/cturnout.c:2897
+#: ../bin/cturnout.c:3035 ../bin/cundo.c:161 ../bin/cundo.c:166
+#: ../bin/dbitmap.c:68 ../bin/dbitmap.c:125 ../bin/dbitmap.c:203
+#: ../bin/dbitmap.c:238 ../bin/dcar.c:3824 ../bin/dcar.c:4019
+#: ../bin/dcar.c:4023 ../bin/dcar.c:4027 ../bin/dcar.c:4032 ../bin/dcar.c:4336
+#: ../bin/dcar.c:4444 ../bin/dcar.c:4826 ../bin/dcmpnd.c:399
+#: ../bin/dcmpnd.c:410 ../bin/dcmpnd.c:542 ../bin/dcustmgm.c:221
+#: ../bin/dcustmgm.c:227 ../bin/dcustmgm.c:236 ../bin/dcustmgm.c:261
+#: ../bin/dease.c:242 ../bin/dlayer.c:240 ../bin/dlayer.c:262
+#: ../bin/dlayer.c:879 ../bin/dlayer.c:885 ../bin/dlayer.c:891
+#: ../bin/doption.c:199 ../bin/doption.c:275 ../bin/doption.c:476
+#: ../bin/doption.c:479 ../bin/doption.c:492 ../bin/doption.c:558
+#: ../bin/dprmfile.c:434 ../bin/draw.c:2629 ../bin/fileio.c:197
+#: ../bin/fileio.c:607 ../bin/fileio.c:742 ../bin/fileio.c:744
+#: ../bin/fileio.c:749 ../bin/fileio.c:812 ../bin/fileio.c:1045
+#: ../bin/layout.c:373 ../bin/layout.c:561 ../bin/macro.c:1156
+#: ../bin/macro.c:1160 ../bin/macro.c:1218 ../bin/macro.c:1287
+#: ../bin/macro.c:1527 ../bin/macro.c:1545 ../bin/misc.c:434 ../bin/misc.c:481
+#: ../bin/misc.c:1806 ../bin/misc.c:1927 ../bin/misc.c:1935 ../bin/misc.c:2013
+#: ../bin/misc.c:2799 ../bin/misc.c:2808 ../bin/misc.c:2828 ../bin/misc.c:2834
+#: ../bin/misc2.c:456 ../bin/param.c:738 ../bin/param.c:1848
+#: ../bin/param.c:1971 ../bin/param.c:1974 ../bin/param.c:2097
+#: ../bin/param.c:2103 ../bin/paramfile.c:324 ../bin/paramfile.c:326
+#: ../bin/paramfile.c:331 ../bin/paramfile.c:355 ../bin/paramfile.c:381
+#: ../bin/paramfile.c:387 ../bin/paramfilelist.c:94 ../bin/paramfilelist.c:114
+#: ../bin/paramfilelist.c:128 ../bin/paramfilelist.c:192 ../bin/smalldlg.c:90
+#: ../bin/smalldlg.c:222 ../bin/tease.c:1014 ../bin/track.c:1654
+#: ../wlib/gtklib/wpref.c:122 ../../../../build/work/app/bin/bllnhlp.c:586
+msgid "Ok"
+msgstr "Ok"
+
+#: ../bin/cblock.c:212
+#, fuzzy
+msgid "Change block"
+msgstr "Mudar Bloco"
+
+#: ../bin/cblock.c:264 ../bin/cswitchmotor.c:342
+#, fuzzy, c-format
+msgid "(%d): Layer=%u %s"
+msgstr "(%d): Camada=%d %s"
+
+#: ../bin/cblock.c:288 ../bin/cblock.c:1000
+msgid "Block"
+msgstr "Bloco"
+
+#: ../bin/cblock.c:491
+#, c-format
+msgid "resolveBlockTrack: T%d[%d]: T%d doesn't exist"
+msgstr ""
+
+#: ../bin/cblock.c:575 ../bin/cblock.c:807
+msgid "Block must have a name!"
+msgstr ""
+
+#: ../bin/cblock.c:604
+msgid "Block is discontigious!"
+msgstr "Bloco não contínuo!"
+
+#: ../bin/cblock.c:609
+#, fuzzy
+msgid "Create block"
+msgstr "Criar Bloco"
+
+#: ../bin/cblock.c:656
+msgid "Non track object skipped!"
+msgstr "Objeto não trilho Ignorado!"
+
+#: ../bin/cblock.c:660
+#, fuzzy
+msgid "Selected track is already in a block, skipped!"
+msgstr "Trilho selecionado já está pertence a um bloco, descartado!"
+
+#: ../bin/cblock.c:674
+msgid "Create Block"
+msgstr "Criar Bloco"
+
+#: ../bin/cblock.c:704 ../bin/cblock.c:736
+msgid "Select a track"
+msgstr "Selecionar um trilho"
+
+#: ../bin/cblock.c:713 ../bin/cblock.c:744
+msgid "Not a block!"
+msgstr "Isto não é um bloco!"
+
+#: ../bin/cblock.c:749
+#, c-format
+msgid "Really delete block %s?"
+msgstr "Deseja realmente eliminar bloco %s?"
+
+#: ../bin/cblock.c:749 ../bin/ccornu.c:2729 ../bin/ccornu.c:2940
+#: ../bin/cdraw.c:134 ../bin/cgroup.c:1081 ../bin/cpull.c:648
+#: ../bin/csignal.c:712 ../bin/cswitchmotor.c:670 ../bin/ctodesgn.c:2638
+#: ../bin/ctodesgn.c:3170 ../bin/ctrain.c:2507 ../bin/dbitmap.c:208
+#: ../bin/dcar.c:3970 ../bin/dcar.c:4049 ../bin/dcar.c:4133 ../bin/dcar.c:4152
+#: ../bin/dcar.c:4469 ../bin/dcar.c:4890 ../bin/dcontmgm.c:173
+#: ../bin/dcustmgm.c:168 ../bin/misc.c:1235 ../bin/misc.c:1242
+#: ../bin/misc.c:1313 ../bin/track.c:1656 ../bin/track.c:1753
+#: ../bin/track.c:1767
+msgid "Yes"
+msgstr "Sim"
+
+#: ../bin/cblock.c:749 ../bin/ccornu.c:2729 ../bin/ccornu.c:2940
+#: ../bin/cdraw.c:134 ../bin/cgroup.c:1081 ../bin/cpull.c:648
+#: ../bin/csignal.c:712 ../bin/cswitchmotor.c:670 ../bin/ctodesgn.c:2638
+#: ../bin/ctodesgn.c:3170 ../bin/ctrain.c:2507 ../bin/dcar.c:3970
+#: ../bin/dcar.c:4049 ../bin/dcar.c:4133 ../bin/dcar.c:4152 ../bin/dcar.c:4469
+#: ../bin/dcar.c:4890 ../bin/dcontmgm.c:173 ../bin/dcustmgm.c:168
+#: ../bin/misc.c:1235 ../bin/misc.c:1242 ../bin/misc.c:1313
+#: ../bin/track.c:1656 ../bin/track.c:1753 ../bin/track.c:1767
+msgid "No"
+msgstr "Não"
+
+#: ../bin/cblock.c:750
+msgid "Delete Block"
+msgstr "Eliminar bloco"
+
+#: ../bin/cblock.c:795
+#, fuzzy, c-format
+msgid "Deleting block %s"
+msgstr "Eliminar bloco"
+
+#: ../bin/cblock.c:811
+#, fuzzy
+msgid "Modify Block"
+msgstr "Modificar trecho"
+
+#: ../bin/cblock.c:844
+#, fuzzy
+msgid "Edit block"
+msgstr "Editar bloco"
+
+#: ../bin/cblock.c:850
+#, fuzzy, c-format
+msgid "Edit block %d"
+msgstr "Editar bloco"
+
+#: ../bin/ccontrol.c:172 ../bin/csensor.c:164 ../bin/csignal.c:239
+#: ../bin/ctrain.c:183
+msgid "Position"
+msgstr "Posição"
+
+#: ../bin/ccontrol.c:173 ../bin/ccontrol.c:431
+#, fuzzy
+msgid "On Script"
+msgstr "Script"
+
+#: ../bin/ccontrol.c:174 ../bin/ccontrol.c:433
+#, fuzzy
+msgid "Off Script"
+msgstr "Script"
+
+#: ../bin/ccontrol.c:240
+#, fuzzy
+msgid "Change Control"
+msgstr "Controle de trem"
+
+#: ../bin/ccontrol.c:282 ../bin/csensor.c:252
+#, fuzzy, c-format
+msgid "(%d [%s]): Layer=%u, at %0.3f,%0.3f"
+msgstr "(%d): Camada=%d %s"
+
+#: ../bin/ccontrol.c:295 ../bin/ccontrol.c:640
+#, fuzzy
+msgid "Control"
+msgstr "Controle de trem"
+
+#: ../bin/ccontrol.c:427
+#, fuzzy
+msgid "Origin X"
+msgstr "Origem: X"
+
+#: ../bin/ccontrol.c:429 ../bin/csensor.c:393 ../bin/csignal.c:513
+#, fuzzy
+msgid "Origin Y"
+msgstr "Origem: X"
+
+#: ../bin/ccontrol.c:445
+#, fuzzy
+msgid "Create Control"
+msgstr "Controle de trem"
+
+#: ../bin/ccontrol.c:448
+#, fuzzy
+msgid "Modify Control"
+msgstr "Controle de trem"
+
+#: ../bin/ccontrol.c:485
+#, fuzzy
+msgid "Edit control"
+msgstr "Controle de trem"
+
+#: ../bin/ccontrol.c:526
+#, fuzzy
+msgid "Place control"
+msgstr "Posicionar a circunferência"
+
+#: ../bin/ccornu.c:200 ../bin/ccornu.c:203 ../bin/ccornu.c:206
+#: ../bin/ccornu.c:260
+#, fuzzy, c-format
+msgid "%s FlexTrack"
+msgstr "Trilho flexível"
+
+#: ../bin/ccornu.c:254
+msgid " FLEX "
+msgstr ""
+
+#: ../bin/ccornu.c:903 ../bin/cjoin.c:894 ../bin/cmisc.c:59
+msgid "First"
+msgstr "Primeiro"
+
+#: ../bin/ccornu.c:910 ../bin/cjoin.c:899
+msgid "Second"
+msgstr "Segundo"
+
+#: ../bin/ccornu.c:981 ../bin/ccornu.c:2005 ../bin/ccornu.c:2035
+#: ../bin/tcornu.c:830 ../bin/tcornu.c:1037 ../bin/tcornu.c:1363
+#, c-format
+msgid ""
+"Cornu Create Failed for p1[%0.3f,%0.3f] p2[%0.3f,%0.3f], c1[%0.3f,%0.3f] c2[%"
+"0.3f,%0.3f], a1=%0.3f a2=%0.3f, r1=%s r2=%s"
+msgstr ""
+
+#: ../bin/ccornu.c:1020 ../bin/ccornu.c:1640 ../bin/ccornu.c:1659
+#: ../bin/tbezier.c:246 ../bin/tbezier.c:253 ../bin/tcornu.c:295
+#: ../bin/tcornu.c:300
+#, fuzzy
+msgid "End Angle"
+msgstr "Entrar ângulo..."
+
+#: ../bin/ccornu.c:1023 ../bin/ccornu.c:1639 ../bin/ccornu.c:1658
+#, fuzzy
+msgid "End Radius"
+msgstr "Raio"
+
+#: ../bin/ccornu.c:1076
+#, fuzzy
+msgid "Select Point, or Add Point"
+msgstr "Selecionar extremidade"
+
+#: ../bin/ccornu.c:1248
+msgid "Not close enough to track or point, reselect"
+msgstr ""
+
+#: ../bin/ccornu.c:1254
+#, fuzzy
+msgid "Drag out end of Cornu"
+msgstr "Arrastar à outra extremidade da corda"
+
+#: ../bin/ccornu.c:1256
+#, fuzzy
+msgid "Drag along end of track"
+msgstr "Arrastar para criar ramo"
+
+#: ../bin/ccornu.c:1258
+#, fuzzy
+msgid "Drag to move"
+msgstr "Arrastar para rotacionar"
+
+#: ../bin/ccornu.c:1261
+msgid "Drag point to new location, Delete to remove"
+msgstr ""
+
+#: ../bin/ccornu.c:1265
+#, fuzzy
+msgid "Drag to change end radius"
+msgstr "Arrastar para definir o raio"
+
+#: ../bin/ccornu.c:1268
+#, fuzzy
+msgid "Drag to change end angle"
+msgstr "Arrastar para alterar elevação"
+
+#: ../bin/ccornu.c:1283
+msgid "Pick any circle to adjust or add - Enter to accept, Esc to cancel"
+msgstr ""
+
+#: ../bin/ccornu.c:1295
+msgid "Track can't be split"
+msgstr ""
+
+#: ../bin/ccornu.c:1357
+#, fuzzy
+msgid "Too close to other end of selected Track"
+msgstr "Eleva ou abaixa todos os trechos selecionados"
+
+#: ../bin/ccornu.c:1365
+#, fuzzy
+msgid "Can't move end inside a turnout"
+msgstr "Criar AMV personalizado"
+
+#: ../bin/ccornu.c:1507
+msgid "Can't extend connected Bezier or Cornu"
+msgstr ""
+
+#: ../bin/ccornu.c:1579
+#, c-format
+msgid ""
+"Cornu : Min Radius=%s MaxRateofCurveChange/Scale=%s Length=%s Winding Arc=%s"
+msgstr ""
+
+#: ../bin/ccornu.c:1601 ../bin/ccornu.c:2271
+msgid "Helix Already Connected"
+msgstr ""
+
+#: ../bin/ccornu.c:1615
+#, fuzzy
+msgid "No Valid end point on that track"
+msgstr "Posicionar 1ª extremidade do trecho reto"
+
+#: ../bin/ccornu.c:1620
+msgid "Track is different scale"
+msgstr ""
+
+#: ../bin/ccornu.c:1673
+msgid ""
+"Pick on point to adjust it along track - Delete to remove, Enter to confirm, "
+"ESC to abort"
+msgstr ""
+
+#: ../bin/ccornu.c:1703
+msgid "Cornu has too complex shape - adjust end pts"
+msgstr ""
+
+#: ../bin/ccornu.c:1714
+#, fuzzy, c-format
+msgid "Cornu point %d too close to other end of connect track - reposition it"
+msgstr "Eleva ou abaixa todos os trechos selecionados"
+
+#: ../bin/ccornu.c:1719
+#, fuzzy
+msgid "Create Cornu"
+msgstr "Criar Bloco"
+
+#: ../bin/ccornu.c:1908
+msgid "Now Select or Add (+Shift) a Point"
+msgstr ""
+
+#: ../bin/ccornu.c:1967
+#, fuzzy, c-format
+msgid "Cornu end %d too close to other end of connect track - reposition it"
+msgstr "Eleva ou abaixa todos os trechos selecionados"
+
+#: ../bin/ccornu.c:1972
+#, fuzzy
+msgid "Modify Cornu"
+msgstr "Modificar trecho"
+
+#: ../bin/ccornu.c:1987
+#, c-format
+msgid "Cornu Extension Create Failed for end %d"
+msgstr ""
+
+#: ../bin/ccornu.c:2079
+#, c-format
+msgid "Connected Track End Adjust for end %d failed"
+msgstr ""
+
+#: ../bin/ccornu.c:2090
+msgid "Modify Cornu Cancelled"
+msgstr ""
+
+#: ../bin/ccornu.c:2247
+msgid "Left click - Start Cornu track"
+msgstr ""
+
+#: ../bin/ccornu.c:2249
+msgid "Left click - Place Flextrack"
+msgstr ""
+
+#: ../bin/ccornu.c:2252
+msgid "Left click - join with Cornu track"
+msgstr ""
+
+#: ../bin/ccornu.c:2254
+#, fuzzy
+msgid "Left click - join with Cornu track, Shift Left click - move to join"
+msgstr ""
+"Clicar com o botão esquerdo - junta um trecho, Clicar com o botão esquerdo + "
+"Shift - movimenta para juntar"
+
+#: ../bin/ccornu.c:2285
+#, fuzzy
+msgid "No valid open endpoint on that track"
+msgstr "Movido além do fim do trilho"
+
+#: ../bin/ccornu.c:2313 ../bin/ccornu.c:2325
+#, fuzzy
+msgid "Drag arm in the direction of track"
+msgstr "Arrastar a extremidade em direção de curva"
+
+#: ../bin/ccornu.c:2329
+msgid "No Unconnected Track End there"
+msgstr ""
+
+#: ../bin/ccornu.c:2340 ../bin/ccornu.c:2364
+msgid "No Valid Track End there"
+msgstr ""
+
+#: ../bin/ccornu.c:2352
+#, fuzzy
+msgid "Locked - Move 1st end point of Cornu track along track 1"
+msgstr "Posicionar 1ª extremidade do trecho reto"
+
+#: ../bin/ccornu.c:2376
+#, fuzzy
+msgid "Locked - Move 2nd end point of Cornu track along track 2"
+msgstr "Posicionar 1ª extremidade do trecho reto"
+
+#: ../bin/ccornu.c:2450
+msgid "Track can't be split - so locked to endpoint"
+msgstr ""
+
+#: ../bin/ccornu.c:2455
+#, fuzzy
+msgid "Point not on track 1"
+msgstr "Junta dois trilhos"
+
+#: ../bin/ccornu.c:2493
+#, fuzzy
+msgid "Pick other end of Cornu"
+msgstr "Arrastar à outra extremidade da corda"
+
+#: ../bin/ccornu.c:2495
+msgid ""
+"Select flextrack ends or anchors and drag, Enter to approve, Esc to Cancel"
+msgstr ""
+
+#: ../bin/ccornu.c:2499
+#, fuzzy
+msgid "Put other end of Cornu on a track with an unconnected end point"
+msgstr "Posicionar 1ª extremidade do trecho reto"
+
+#: ../bin/ccornu.c:2717 ../bin/ccornu.c:2930
+#, fuzzy
+msgid "Not on a Track"
+msgstr "Isso não é um trilho"
+
+#: ../bin/ccornu.c:2725
+#, fuzzy
+msgid "Select a Track To Convert"
+msgstr "Selecionar um trilho"
+
+#: ../bin/ccornu.c:2729
+msgid "Convert all Selected Tracks to Cornu Tracks?"
+msgstr ""
+
+#: ../bin/ccornu.c:2734
+#, fuzzy
+msgid "Convert Cornu"
+msgstr "Criar Bloco"
+
+#: ../bin/ccornu.c:2886
+#, c-format
+msgid "Tracks Counts: %d converted %d unconvertible %d created %d deleted"
+msgstr ""
+
+#: ../bin/ccornu.c:2886 ../bin/ccornu.c:3000
+msgid "OK"
+msgstr ""
+
+#: ../bin/ccornu.c:2936
+msgid "Select a Cornu or Bezier Track To Convert to Fixed"
+msgstr ""
+
+#: ../bin/ccornu.c:2940
+msgid "Convert all Selected Tracks to Fixed Tracks?"
+msgstr ""
+
+#: ../bin/ccornu.c:2949
+msgid "Convert Bezier and Cornu"
+msgstr ""
+
+#: ../bin/ccornu.c:3000
+#, c-format
+msgid "Tracks Counts: %d converted %d unconvertible %d deleted"
+msgstr ""
+
+#: ../bin/ccornu.c:3028
+#, fuzzy
+msgid "Convert"
+msgstr "&Conteúdo"
+
+#: ../bin/ccornu.c:3029
+#, fuzzy
+msgid "Convert To Cornu"
+msgstr "Criar Bloco"
+
+#: ../bin/ccornu.c:3030
+#, fuzzy
+msgid "Convert From Cornu"
+msgstr "Curva a partir de uma corda"
+
+#: ../bin/ccurve.c:169
+#, fuzzy
+msgid "Drag from endpoint in direction of curve - lock to track open endpoint"
+msgstr "Arrastar a extremidade em direção de curva"
+
+#: ../bin/ccurve.c:171
+#, fuzzy
+msgid "Drag from endpoint in direction of curve"
+msgstr "Arrastar a extremidade em direção de curva"
+
+#: ../bin/ccurve.c:175
+#, fuzzy
+msgid "Drag from endpoint to center - lock to track open endpoint"
+msgstr "Arrastar a extremidade ao centro"
+
+#: ../bin/ccurve.c:177
+#, fuzzy
+msgid "Drag from endpoint to center"
+msgstr "Arrastar a extremidade ao centro"
+
+#: ../bin/ccurve.c:180
+#, fuzzy
+msgid "Drag from center to endpoint"
+msgstr "Arrastar do centro à extremidade"
+
+#: ../bin/ccurve.c:183
+#, fuzzy
+msgid "Drag from one to other end of chord"
+msgstr "Arrastar à outra extremidade da corda"
+
+#: ../bin/ccurve.c:241
+#, fuzzy
+msgid "End locked: Drag out curve start"
+msgstr "Arrastar para criar ramo"
+
+#: ../bin/ccurve.c:242
+#, fuzzy
+msgid "Drag along curve start"
+msgstr "Arrastar para criar ramo"
+
+#: ../bin/ccurve.c:250
+msgid "End locked: Drag out curve center"
+msgstr ""
+
+#: ../bin/ccurve.c:251
+#, fuzzy
+msgid "Drag out curve center"
+msgstr "Arrastar para criar ramo"
+
+#: ../bin/ccurve.c:258
+#, fuzzy
+msgid "Drag out from center to endpoint"
+msgstr "Arrastar do centro à extremidade"
+
+#: ../bin/ccurve.c:267
+#, fuzzy
+msgid "End locked: Drag to other end of chord"
+msgstr "Arrastar à outra extremidade da corda"
+
+#: ../bin/ccurve.c:269
+msgid "Drag to other end of chord"
+msgstr "Arrastar à outra extremidade da corda"
+
+#: ../bin/ccurve.c:324
+#, c-format
+msgid "Start Locked: Drag out curve start - Angle=%0.3f"
+msgstr ""
+
+#: ../bin/ccurve.c:325
+#, c-format
+msgid "Drag out curve start - Angle=%0.3f"
+msgstr ""
+
+#: ../bin/ccurve.c:331
+#, fuzzy, c-format
+msgid "Tangent locked: Drag out center - Radius=%s Angle=%0.3f"
+msgstr "Trecho tangente: Comprimento %s Ângulo %0.3f"
+
+#: ../bin/ccurve.c:332
+#, fuzzy, c-format
+msgid "Drag out center - Radius=%s Angle=%0.3f"
+msgstr "Raio=%s Ângulo=%0.3f"
+
+#: ../bin/ccurve.c:338
+#, fuzzy, c-format
+msgid "Drag to Edge: Radius=%s Angle=%0.3f"
+msgstr "Raio=%s Ângulo=%0.3f"
+
+#: ../bin/ccurve.c:344
+#, fuzzy, c-format
+msgid "Start locked: Drag out chord length=%s angle=%0.3f"
+msgstr "Trecho tangente: Comprimento %s Ângulo %0.3f"
+
+#: ../bin/ccurve.c:345
+#, fuzzy, c-format
+msgid "Drag out chord length=%s angle=%0.3f"
+msgstr "Trecho reto Comprimento=%s Ângulo=%0.3f"
+
+#: ../bin/ccurve.c:399 ../bin/ccurve.c:557 ../bin/drawgeom.c:735
+msgid "Drag on Red arrows to adjust curve"
+msgstr "Arrastar as setas vermelhas para ajustar a curva"
+
+#: ../bin/ccurve.c:497 ../bin/cjoin.c:210 ../bin/cmodify.c:580
+#: ../bin/cturntbl.c:580
+#, c-format
+msgid "Straight Track: Length=%s Angle=%0.3f"
+msgstr "Trecho reto: Comprimento=%s Ângulo=%0.3f"
+
+#: ../bin/ccurve.c:504 ../bin/cmodify.c:585 ../bin/drawgeom.c:618
+#: ../wlib/gtklib/ixhelp.c:235
+msgid "Back"
+msgstr "Voltar"
+
+#: ../bin/ccurve.c:523
+#, c-format
+msgid "Curved Track: Radius=%s Angle=%0.3f Length=%s"
+msgstr "Trecho curvo: Raio=%s Ângulo=%0.3f Comprimento=%s"
+
+#: ../bin/ccurve.c:577 ../bin/cstraigh.c:162
+msgid "Create Straight Track"
+msgstr "Criar trecho reto"
+
+#: ../bin/ccurve.c:589
+msgid "Create Curved Track"
+msgstr "Criar trecho curvo"
+
+#: ../bin/ccurve.c:660
+msgid "Elevation Difference"
+msgstr "Diferença de elevação"
+
+#: ../bin/ccurve.c:661 ../bin/cdraw.c:514 ../bin/cdraw.c:1437
+#: ../bin/cdraw.c:1583 ../bin/cdraw.c:2231 ../bin/cdraw.c:2430
+#: ../bin/cdraw.c:2444 ../bin/compound.c:545 ../bin/compound.c:550
+#: ../bin/compound.c:555 ../bin/compound.c:560 ../bin/ctodesgn.c:180
+#: ../bin/ctodesgn.c:181 ../bin/ctodesgn.c:182 ../bin/ctodesgn.c:183
+#: ../bin/ctodesgn.c:299 ../bin/ctodesgn.c:302 ../bin/ctodesgn.c:304
+#: ../bin/ctodesgn.c:365 ../bin/ctodesgn.c:366 ../bin/ctodesgn.c:371
+#: ../bin/ctodesgn.c:435 ../bin/ctodesgn.c:439 ../bin/ctodesgn.c:440
+#: ../bin/ctodesgn.c:446 ../bin/ctodesgn.c:615 ../bin/tbezier.c:247
+#: ../bin/tbezier.c:254 ../bin/tcornu.c:301 ../bin/tcurve.c:369
+msgid "Radius"
+msgstr "Raio"
+
+#: ../bin/ccurve.c:662 ../bin/tcurve.c:370
+msgid "Turns"
+msgstr "Desvios"
+
+#: ../bin/ccurve.c:663
+msgid "Angular Separation"
+msgstr "Separação angular"
+
+#: ../bin/ccurve.c:664 ../bin/celev.c:47 ../bin/compound.c:562
+#: ../bin/tbezier.c:259 ../bin/tcornu.c:308 ../bin/tcurve.c:376
+#: ../bin/tease.c:529 ../bin/tstraigh.c:91
+msgid "Grade"
+msgstr "Gradiente"
+
+#: ../bin/ccurve.c:665
+msgid "Vertical Separation"
+msgstr "Separação vertical"
+
+#: ../bin/ccurve.c:667
+msgid "Total Length"
+msgstr "Comprimento total"
+
+#: ../bin/ccurve.c:743
+#, c-format
+msgid "Total Length %s"
+msgstr "Comprimento total %s"
+
+#: ../bin/ccurve.c:781 ../bin/ccurve.c:985 ../bin/tcurve.c:809
+msgid "Helix"
+msgstr "Hélice"
+
+#: ../bin/ccurve.c:795
+msgid "Circle Radius"
+msgstr "Raio da circunferência"
+
+#: ../bin/ccurve.c:800
+msgid "Click on Circle Edge"
+msgstr "Clicar no limite da circunferência"
+
+#: ../bin/ccurve.c:804
+msgid "Click on Circle Center"
+msgstr "Clicar no centro da circunferência"
+
+#: ../bin/ccurve.c:835
+msgid "Drag to Center"
+msgstr "Arrastar ao centro"
+
+#: ../bin/ccurve.c:839
+msgid "Drag to Edge"
+msgstr "Arrastar à borda"
+
+#: ../bin/ccurve.c:859 ../bin/ccurve.c:863
+#, c-format
+msgid "Radius=%s"
+msgstr "Raio=%s"
+
+#: ../bin/ccurve.c:884
+msgid "Create Helix Track"
+msgstr "Criar trecho em hélice"
+
+#: ../bin/ccurve.c:899
+msgid "Create Circle Track"
+msgstr "Criar trecho de circunferência"
+
+#: ../bin/ccurve.c:954
+#, fuzzy
+msgid "Cornu Curve"
+msgstr "Trecho curvo"
+
+#: ../bin/ccurve.c:956
+msgid "Curve Track"
+msgstr "Trecho curvo"
+
+#: ../bin/ccurve.c:956
+msgid "Curve Tracks"
+msgstr "Trechos curvos"
+
+#: ../bin/ccurve.c:957
+msgid "Curve from End-Pt"
+msgstr "Curva a partir de extremidade"
+
+#: ../bin/ccurve.c:958
+msgid "Curve from Tangent"
+msgstr "Curva a partir de uma tangente"
+
+#: ../bin/ccurve.c:959
+msgid "Curve from Center"
+msgstr "Curva a partir de um centro"
+
+#: ../bin/ccurve.c:960
+msgid "Curve from Chord"
+msgstr "Curva a partir de uma corda"
+
+#: ../bin/ccurve.c:961 ../bin/cdraw.c:2572
+#, fuzzy
+msgid "Bezier Curve"
+msgstr "Fundir curvas"
+
+#: ../bin/ccurve.c:964 ../bin/tcurve.c:643
+msgid "Circle Track"
+msgstr "Trecho de circunferência"
+
+#: ../bin/ccurve.c:964
+msgid "Circle Tracks"
+msgstr "Trechos de circunferências"
+
+#: ../bin/ccurve.c:965
+msgid "Fixed Radius Circle"
+msgstr "Circunferência com raio fixo"
+
+#: ../bin/ccurve.c:966
+msgid "Circle from Tangent"
+msgstr "Circunferência a partir de uma tangente"
+
+#: ../bin/ccurve.c:967
+msgid "Circle from Center"
+msgstr "Circunferência a partir de um centro"
+
+#: ../bin/cdraw.c:130
+msgid "Font Size must be > 0"
+msgstr "Tamanho da fonte deve ser maior que 0"
+
+#: ../bin/cdraw.c:509
+msgid "First Point: X,Y"
+msgstr ""
+
+#: ../bin/cdraw.c:510 ../bin/tcurve.c:368
+#, fuzzy
+msgid "Center: X,Y"
+msgstr "Centro: X"
+
+#: ../bin/cdraw.c:511 ../bin/cdraw.c:532 ../bin/cdraw.c:1427
+#: ../bin/cdraw.c:1572 ../bin/cdraw.c:2229 ../bin/cdraw.c:2451
+#: ../bin/cdraw.c:2471 ../bin/cdraw.c:2475 ../bin/compound.c:543
+#: ../bin/compound.c:548 ../bin/compound.c:553 ../bin/compound.c:558
+#: ../bin/compound.c:564 ../bin/cprint.c:155 ../bin/csignal.c:240
+#: ../bin/csignal.c:515 ../bin/ctodesgn.c:188 ../bin/ctodesgn.c:189
+#: ../bin/ctodesgn.c:190 ../bin/ctodesgn.c:192 ../bin/ctodesgn.c:237
+#: ../bin/ctodesgn.c:260 ../bin/ctodesgn.c:262 ../bin/ctodesgn.c:297
+#: ../bin/ctodesgn.c:300 ../bin/ctodesgn.c:326 ../bin/ctodesgn.c:329
+#: ../bin/ctodesgn.c:363 ../bin/ctodesgn.c:368 ../bin/ctodesgn.c:392
+#: ../bin/ctodesgn.c:396 ../bin/ctodesgn.c:433 ../bin/ctodesgn.c:437
+#: ../bin/ctodesgn.c:442 ../bin/ctodesgn.c:468 ../bin/ctodesgn.c:488
+#: ../bin/ctodesgn.c:509 ../bin/ctodesgn.c:616 ../bin/ctrain.c:184
+#: ../bin/tease.c:524 ../bin/tstraigh.c:90
+msgid "Angle"
+msgstr "Ângulo"
+
+#: ../bin/cdraw.c:512 ../bin/tcurve.c:374
+msgid "CCW Angle"
+msgstr "Ângulo anti-horário"
+
+#: ../bin/cdraw.c:513 ../bin/tcurve.c:375
+msgid "CW Angle"
+msgstr "Ângulo horário"
+
+#: ../bin/cdraw.c:516 ../bin/cdraw.c:1434 ../bin/cdraw.c:1556
+#: ../bin/cprint.c:130
+msgid "Height"
+msgstr "Altura"
+
+#: ../bin/cdraw.c:517 ../bin/cdraw.c:1432 ../bin/cdraw.c:1555
+#: ../bin/cdraw.c:2226 ../bin/cdraw.c:2488 ../bin/ctrain.c:186
+#: ../bin/dcar.c:2234
+msgid "Width"
+msgstr "Largura"
+
+#: ../bin/cdraw.c:518
+msgid "Keep Origin Relative"
+msgstr ""
+
+#: ../bin/cdraw.c:519
+#, fuzzy
+msgid "Rot Origin: X,Y"
+msgstr "Origem: X"
+
+#: ../bin/cdraw.c:520 ../bin/cdraw.c:1441
+#, fuzzy
+msgid "Rotate Angle"
+msgstr "Ângulo a direita"
+
+#: ../bin/cdraw.c:521
+msgid "Point Count"
+msgstr "Ponto de contagem"
+
+#: ../bin/cdraw.c:522 ../bin/cdraw.c:2204 ../bin/ctodesgn.c:202
+#: ../bin/tbezier.c:261
+msgid "Line Width"
+msgstr "Largura da linha"
+
+#: ../bin/cdraw.c:523 ../bin/cdraw.c:2233 ../bin/tbezier.c:260
+#, fuzzy
+msgid "Line Type"
+msgstr "Tipo de madeira"
+
+#: ../bin/cdraw.c:524 ../bin/cdraw.c:2206 ../bin/cdraw.c:2208
+#: ../bin/cdraw.c:2306 ../bin/cdraw.c:2339 ../bin/cmisc.c:125
+#: ../bin/ctext.c:68 ../bin/ctext.c:147 ../bin/ctodesgn.c:203
+#: ../bin/dcar.c:2230 ../bin/dlayer.c:485 ../bin/doption.c:558
+msgid "Color"
+msgstr "Cor"
+
+#: ../bin/cdraw.c:525
+#, fuzzy
+msgid "Filled"
+msgstr "Retângulo preenchido"
+
+#: ../bin/cdraw.c:526
+#, fuzzy
+msgid "Open End"
+msgstr "À borda"
+
+#: ../bin/cdraw.c:527 ../bin/cmisc.c:148 ../bin/cmisc.c:149 ../bin/cmisc.c:150
+#: ../bin/cmisc.c:151 ../bin/ctext.c:70 ../bin/ctext.c:148
+#, fuzzy
+msgid "Boxed"
+msgstr "Retângulo"
+
+#: ../bin/cdraw.c:528 ../bin/cdraw.c:1108 ../bin/cdraw.c:2240
+msgid "Lumber"
+msgstr "Madeira"
+
+#: ../bin/cdraw.c:529
+msgid "Orientation"
+msgstr "Orientação"
+
+#: ../bin/cdraw.c:530 ../bin/cdraw.c:2222
+#: ../../../../build/work/app/bin/bllnhlp.c:588
+msgid "Size"
+msgstr "Tamanho"
+
+#: ../bin/cdraw.c:531 ../bin/compound.c:563 ../bin/tease.c:523
+#, fuzzy
+msgid "Origin: X,Y"
+msgstr "Origem: X"
+
+#: ../bin/cdraw.c:533 ../bin/ctext.c:66 ../bin/ctext.c:146
+msgid "Font Size"
+msgstr "Tamanha da fonte"
+
+#: ../bin/cdraw.c:534 ../bin/cdraw.c:1254 ../bin/ctext.c:262
+msgid "Text"
+msgstr "Texto"
+
+#: ../bin/cdraw.c:535 ../bin/cmisc.c:144 ../bin/compound.c:565
+#: ../bin/tcurve.c:377 ../bin/tease.c:530 ../bin/tstraigh.c:92
+msgid "Pivot"
+msgstr "Pivô"
+
+#: ../bin/cdraw.c:536 ../bin/compound.c:571 ../bin/cturntbl.c:253
+#: ../bin/doption.c:139 ../bin/doption.c:140 ../bin/tbezier.c:263
+#: ../bin/tcornu.c:309 ../bin/tcurve.c:378 ../bin/tease.c:531
+#: ../bin/tstraigh.c:93 ../../../../build/work/app/bin/bllnhlp.c:666
+#: ../../../../build/work/app/bin/bllnhlp.c:667
+#: ../../../../build/work/app/bin/bllnhlp.c:668
+#: ../../../../build/work/app/bin/bllnhlp.c:669
+#: ../../../../build/work/app/bin/bllnhlp.c:670
+#: ../../../../build/work/app/bin/bllnhlp.c:671
+#: ../../../../build/work/app/bin/bllnhlp.c:672
+#: ../../../../build/work/app/bin/bllnhlp.c:673
+#: ../../../../build/work/app/bin/bllnhlp.c:674
+#: ../../../../build/work/app/bin/bllnhlp.c:675
+#: ../../../../build/work/app/bin/bllnhlp.c:676
+#: ../../../../build/work/app/bin/bllnhlp.c:677
+#: ../../../../build/work/app/bin/bllnhlp.c:678
+#: ../../../../build/work/app/bin/bllnhlp.c:679
+#: ../../../../build/work/app/bin/bllnhlp.c:680
+#: ../../../../build/work/app/bin/bllnhlp.c:681
+#: ../../../../build/work/app/bin/bllnhlp.c:682
+#: ../../../../build/work/app/bin/bllnhlp.c:683
+#: ../../../../build/work/app/bin/bllnhlp.c:684
+#: ../../../../build/work/app/bin/bllnhlp.c:685
+msgid "Layer"
+msgstr "Camada"
+
+#: ../bin/cdraw.c:1093
+msgid "Straight Line"
+msgstr "Linha reta"
+
+#: ../bin/cdraw.c:1098 ../bin/cdraw.c:2564
+msgid "Dimension Line"
+msgstr "Linha dimensional"
+
+#: ../bin/cdraw.c:1119 ../bin/cdraw.c:2241 ../bin/cdraw.c:2566
+msgid "Table Edge"
+msgstr "Limite do tablado"
+
+#: ../bin/cdraw.c:1139 ../bin/cdraw.c:2246 ../bin/cdraw.c:2247
+#: ../bin/cdraw.c:2248
+msgid "Circle"
+msgstr "Circunferência"
+
+#: ../bin/cdraw.c:1150
+msgid "Curved Line"
+msgstr "Linha curva"
+
+#: ../bin/cdraw.c:1166 ../bin/cdraw.c:2251 ../bin/cdraw.c:2252
+#: ../bin/cdraw.c:2253
+msgid "Filled Circle"
+msgstr "Círculo"
+
+#: ../bin/cdraw.c:1185
+#, fuzzy
+msgid "Rectangle"
+msgstr "Reescalar"
+
+#: ../bin/cdraw.c:1199 ../bin/cdraw.c:2257
+msgid "Polyline"
+msgstr "Linha poligonal"
+
+#: ../bin/cdraw.c:1203 ../bin/cdraw.c:2250 ../bin/cdraw.c:2583
+msgid "Polygon"
+msgstr "Polígono"
+
+#: ../bin/cdraw.c:1221
+#, fuzzy
+msgid "Filled Rectangle"
+msgstr "Círculo"
+
+#: ../bin/cdraw.c:1234 ../bin/cdraw.c:2255 ../bin/cdraw.c:2584
+#, fuzzy
+msgid "Filled Polygon"
+msgstr "Retângulo preenchido"
+
+#: ../bin/cdraw.c:1260
+#, fuzzy, c-format
+msgid "%s(%d) Layer=%d"
+msgstr "%s: Camada=%d"
+
+#: ../bin/cdraw.c:1280 ../bin/cdraw.c:2309 ../bin/compound.c:956
+#: ../bin/doption.c:134 ../bin/tbezier.c:458
+msgid "Solid"
+msgstr "Sólido"
+
+#: ../bin/cdraw.c:1281 ../bin/cdraw.c:2311 ../bin/compound.c:957
+#: ../bin/doption.c:131 ../bin/tbezier.c:459
+msgid "Dash"
+msgstr "Tracejado"
+
+#: ../bin/cdraw.c:1282 ../bin/cdraw.c:2310 ../bin/compound.c:958
+#: ../bin/tbezier.c:460
+msgid "Dot"
+msgstr ""
+
+#: ../bin/cdraw.c:1283 ../bin/compound.c:959 ../bin/tbezier.c:461
+#, fuzzy
+msgid "DashDot"
+msgstr "Tracejado"
+
+#: ../bin/cdraw.c:1284 ../bin/compound.c:960 ../bin/tbezier.c:462
+msgid "DashDotDot"
+msgstr ""
+
+#: ../bin/cdraw.c:1285 ../bin/compound.c:961 ../bin/tbezier.c:463
+#, fuzzy
+msgid "CenterDot"
+msgstr "Centro: X"
+
+#: ../bin/cdraw.c:1286 ../bin/compound.c:962 ../bin/tbezier.c:464
+msgid "PhantomDot"
+msgstr ""
+
+#: ../bin/cdraw.c:1291 ../bin/cdraw.c:2357
+msgid "Tiny"
+msgstr "Minúsculo"
+
+#: ../bin/cdraw.c:1292 ../bin/cdraw.c:2358
+msgid "Small"
+msgstr "Pequeno"
+
+#: ../bin/cdraw.c:1293 ../bin/cdraw.c:2359
+msgid "Medium"
+msgstr "Médio"
+
+#: ../bin/cdraw.c:1294 ../bin/cdraw.c:2360
+msgid "Large"
+msgstr "Grande"
+
+#: ../bin/cdraw.c:1430
+#, fuzzy
+msgid "Relative Angle"
+msgstr "Ângulo a esquerda"
+
+#: ../bin/cdraw.c:1439 ../bin/cdraw.c:1587 ../bin/cdraw.c:2445
+#, fuzzy
+msgid "Arc Angle"
+msgstr "Ângulo"
+
+#: ../bin/cdraw.c:1444
+#, fuzzy
+msgid "Rot Center X"
+msgstr "Centro: X"
+
+#: ../bin/cdraw.c:1446
+#, fuzzy
+msgid "Rot Center Y"
+msgstr "Centro: X"
+
+#: ../bin/cdraw.c:1543
+#, fuzzy
+msgid "Seg Lth"
+msgstr "Comprimento"
+
+#: ../bin/cdraw.c:1544
+msgid "Rel Ang"
+msgstr ""
+
+#: ../bin/cdraw.c:2211 ../bin/cdraw.c:2213 ../bin/cdraw.c:2337
+msgid "Lumber Type"
+msgstr "Tipo de madeira"
+
+#: ../bin/cdraw.c:2238
+msgid "Straight"
+msgstr "Reto"
+
+#: ../bin/cdraw.c:2239
+msgid "Dimension"
+msgstr "Dimensão"
+
+#: ../bin/cdraw.c:2242 ../bin/cdraw.c:2243 ../bin/cdraw.c:2244
+#: ../bin/cdraw.c:2245
+msgid "Curved"
+msgstr "Curvado"
+
+#: ../bin/cdraw.c:2249 ../bin/cdraw.c:2581
+msgid "Box"
+msgstr "Retângulo"
+
+#: ../bin/cdraw.c:2254 ../bin/cdraw.c:2582
+msgid "Filled Box"
+msgstr "Retângulo preenchido"
+
+#: ../bin/cdraw.c:2256 ../bin/tbezier.c:455
+#, fuzzy
+msgid "Bezier Line"
+msgstr "Criar linhas"
+
+#: ../bin/cdraw.c:2304
+#, c-format
+msgid "%s Line Width"
+msgstr "Largura da linha do %s"
+
+#: ../bin/cdraw.c:2307 ../bin/dcar.c:2203 ../bin/dcar.c:4367
+#: ../bin/dcar.c:4372
+msgid "Type"
+msgstr "Tipo"
+
+#: ../bin/cdraw.c:2312
+#, fuzzy
+msgid "Dash-Dot"
+msgstr "Tracejado"
+
+#: ../bin/cdraw.c:2313
+msgid "Dash-Dot-Dot"
+msgstr ""
+
+#: ../bin/cdraw.c:2326
+#, c-format
+msgid "%s Color"
+msgstr "Cor %s"
+
+#: ../bin/cdraw.c:2355
+msgid "Dimension Line Size"
+msgstr "Dimensão da largura da linha"
+
+#: ../bin/cdraw.c:2367
+msgid "Drag to create Table Edge"
+msgstr "Arrastar para criar limite do tablado"
+
+#: ../bin/cdraw.c:2469
+#, fuzzy
+msgid "Seg Length"
+msgstr "Comprimento a esquerda"
+
+#: ../bin/cdraw.c:2473
+#, fuzzy
+msgid "Rel Angle"
+msgstr "Ângulo a esquerda"
+
+#: ../bin/cdraw.c:2563
+msgid "Line"
+msgstr "Linha"
+
+#: ../bin/cdraw.c:2563
+msgid "Draw Line"
+msgstr "Desenhar linha"
+
+#: ../bin/cdraw.c:2564
+msgid "Draw Dimension Line"
+msgstr "Desenhar dimensão da linha"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:363
+#: ../bin/cdraw.c:2565 ../../../../build/work/app/i18n/custmsg.h:1249
+msgid "Benchwork"
+msgstr "Bancada"
+
+#: ../bin/cdraw.c:2565
+msgid "Draw Benchwork"
+msgstr "Desenhar bancada"
+
+#: ../bin/cdraw.c:2566
+msgid "Draw Table Edge"
+msgstr "Desenhar borda do tablado"
+
+#: ../bin/cdraw.c:2568
+msgid "Curve End"
+msgstr "Curva extremidade"
+
+#: ../bin/cdraw.c:2568
+msgid "Draw Curve from End"
+msgstr "Desenhar curva a partir de uma extremidade"
+
+#: ../bin/cdraw.c:2569
+msgid "Curve Tangent"
+msgstr "Curva tangente"
+
+#: ../bin/cdraw.c:2569
+msgid "Draw Curve from Tangent"
+msgstr "Desenhar curva a partir de uma tangente"
+
+#: ../bin/cdraw.c:2570
+msgid "Curve Center"
+msgstr "Curva centro"
+
+#: ../bin/cdraw.c:2570
+msgid "Draw Curve from Center"
+msgstr "Desenhar curva a partir de um centro"
+
+#: ../bin/cdraw.c:2571
+msgid "Curve Chord"
+msgstr "Curva corda"
+
+#: ../bin/cdraw.c:2571
+msgid "Draw Curve from Chord"
+msgstr "Desenhar curva a partir de uma corda"
+
+#: ../bin/cdraw.c:2572
+#, fuzzy
+msgid "Draw Bezier"
+msgstr "Desenhar linha"
+
+#: ../bin/cdraw.c:2575
+msgid "Circle Tangent"
+msgstr "Circunferência tangente"
+
+#: ../bin/cdraw.c:2575
+msgid "Draw Circle from Tangent"
+msgstr "Desenhar circunferência a partir de uma tangente"
+
+#: ../bin/cdraw.c:2576
+msgid "Circle Center"
+msgstr "Circunferência centro"
+
+#: ../bin/cdraw.c:2576
+msgid "Draw Circle from Center"
+msgstr "Desenhar circunferência a partir de um centro"
+
+#: ../bin/cdraw.c:2578
+msgid "Circle Filled Tangent"
+msgstr "Círculo tangente"
+
+#: ../bin/cdraw.c:2578
+msgid "Draw Filled Circle from Tangent"
+msgstr "Desenhar círculo a partir de uma tangente"
+
+#: ../bin/cdraw.c:2579
+msgid "Circle Filled Center"
+msgstr "Círculo centro"
+
+#: ../bin/cdraw.c:2579
+msgid "Draw Filled Circle from Center"
+msgstr "Desenhar círculo a partir de um centro"
+
+#: ../bin/cdraw.c:2581
+msgid "Draw Box"
+msgstr "Desenhar retângulo"
+
+#: ../bin/cdraw.c:2582
+msgid "Draw Filled Box"
+msgstr "Desenhar retângulo cheio"
+
+#: ../bin/cdraw.c:2583
+msgid "Draw Polygon"
+msgstr "Desenhar polígono"
+
+#: ../bin/cdraw.c:2584
+#, fuzzy
+msgid "Draw Filled Polygon"
+msgstr "Desenhar polígono"
+
+#: ../bin/cdraw.c:2585
+#, fuzzy
+msgid "PolyLine"
+msgstr "Linha poligonal"
+
+#: ../bin/cdraw.c:2585
+#, fuzzy
+msgid "Draw PolyLine"
+msgstr "Desenhar linha poligonal"
+
+#: ../bin/cdraw.c:2602
+msgid "Straight Objects"
+msgstr "Objetos retos"
+
+#: ../bin/cdraw.c:2602
+msgid "Draw Straight Objects"
+msgstr "Desenhar objetos retos"
+
+#: ../bin/cdraw.c:2603
+msgid "Curved Lines"
+msgstr "Linhas curvas"
+
+#: ../bin/cdraw.c:2603
+msgid "Draw Curved Lines"
+msgstr "Desenhar linhas curvas"
+
+#: ../bin/cdraw.c:2604
+msgid "Circle Lines"
+msgstr "Circunferência"
+
+#: ../bin/cdraw.c:2604
+msgid "Draw Circles"
+msgstr "Desenhar circunferência"
+
+#: ../bin/cdraw.c:2605
+msgid "Shapes"
+msgstr "Formas"
+
+#: ../bin/cdraw.c:2605
+msgid "Draw Shapes"
+msgstr "Desenhas formas"
+
+#: ../bin/cdraw.c:2893
+msgid "Close Polygon - 'c'"
+msgstr ""
+
+#: ../bin/cdraw.c:2894
+msgid "Make PolyLine - 'l'"
+msgstr ""
+
+#: ../bin/cdraw.c:2895
+msgid "Fill Polygon - 'f'"
+msgstr ""
+
+#: ../bin/cdraw.c:2896
+msgid "Empty Polygon - 'e'"
+msgstr ""
+
+#: ../bin/cdraw.c:2898
+msgid "Points Mode - 'p'"
+msgstr ""
+
+#: ../bin/cdraw.c:2899
+msgid "Delete Selected Point - 'Del'"
+msgstr ""
+
+#: ../bin/cdraw.c:2900
+msgid "Vertex Point - 'v'"
+msgstr ""
+
+#: ../bin/cdraw.c:2901
+msgid "Round Corner - 'r'"
+msgstr ""
+
+#: ../bin/cdraw.c:2902
+msgid "Smooth Corner - 's'"
+msgstr ""
+
+#: ../bin/cdraw.c:2904 ../bin/cselect.c:3348
+msgid "LineType..."
+msgstr ""
+
+#: ../bin/cdraw.c:2905 ../bin/cselect.c:3349
+#, fuzzy
+msgid "Solid Line"
+msgstr "Linha poligonal"
+
+#: ../bin/cdraw.c:2906 ../bin/cselect.c:3350
+#, fuzzy
+msgid "Dashed Line"
+msgstr "Desenhar linha"
+
+#: ../bin/cdraw.c:2907 ../bin/cselect.c:3351
+#, fuzzy
+msgid "Dotted Line"
+msgstr "Linha curva"
+
+#: ../bin/cdraw.c:2908
+#, fuzzy
+msgid "Dash-Dot Line"
+msgstr "Desenhar linha"
+
+#: ../bin/cdraw.c:2909
+msgid "Dash-Dot-Dot Line"
+msgstr ""
+
+#: ../bin/cdraw.c:2910
+#, fuzzy
+msgid "Center-Dot Line"
+msgstr "Criar linhas"
+
+#: ../bin/cdraw.c:2911
+msgid "Phantom-Dot Line"
+msgstr ""
+
+#: ../bin/cdraw.c:2913
+msgid "Origin Mode - 'o'"
+msgstr ""
+
+#: ../bin/cdraw.c:2914
+msgid "Reset Origin - '0'"
+msgstr ""
+
+#: ../bin/cdraw.c:2915
+msgid "Origin to Selected - 'l'"
+msgstr ""
+
+#: ../bin/cdraw.c:2916
+msgid "Origin to Centroid - 'c'"
+msgstr ""
+
+#: ../bin/celev.c:46 ../bin/cprofile.c:1535 ../bin/csplit.c:148
+#: ../bin/csplit.c:153 ../bin/dease.c:67 ../bin/doption.c:132
+#: ../bin/doption.c:134
+msgid "None"
+msgstr "Nenhum"
+
+#: ../bin/celev.c:46
+msgid "Defined"
+msgstr "Definido"
+
+#: ../bin/celev.c:46
+msgid "Hidden"
+msgstr "Oculto"
+
+#: ../bin/celev.c:47
+msgid "Computed"
+msgstr "Calculado"
+
+#: ../bin/celev.c:47
+msgid "Station"
+msgstr "Estação"
+
+#: ../bin/celev.c:47 ../bin/cprofile.c:1533 ../bin/dcmpnd.c:75
+msgid "Ignore"
+msgstr "Ignorar"
+
+#: ../bin/celev.c:203
+msgid "Set Elevation"
+msgstr "Ajustar inclinação"
+
+#: ../bin/celev.c:296 ../bin/celev.c:303 ../bin/celev.c:306
+#, c-format
+msgid "Undefined"
+msgstr "Indefinido"
+
+#: ../bin/celev.c:362 ../bin/celev.c:495
+msgid "Elevation"
+msgstr "Elevação"
+
+#: ../bin/celev.c:362 ../bin/cmisc.c:459 ../bin/dcontmgm.c:299
+#: ../bin/dcustmgm.c:395 ../bin/dlayer.c:1124 ../bin/dpricels.c:154
+#: ../bin/filenoteui.c:249 ../bin/linknoteui.c:182
+#: ../bin/paramfilesearch_ui.c:396 ../bin/textnoteui.c:171
+msgid "Done"
+msgstr "Ok"
+
+#: ../bin/celev.c:374 ../bin/celev.c:426 ../bin/celev.c:428 ../bin/celev.c:447
+msgid "Click on end, +Shift to split, +Ctrl to move description"
+msgstr ""
+
+#: ../bin/celev.c:394
+msgid "Move to end or track crossing +Shift to split"
+msgstr ""
+
+#: ../bin/celev.c:398
+#, fuzzy
+msgid "Move to end or track crossing"
+msgstr "Posicionar 1ª extremidade do trecho reto"
+
+#: ../bin/celev.c:407
+#, c-format
+msgid "Crossing - First %0.3f, Second %0.3f, Clearance %0.3f - Click to Split"
+msgstr ""
+
+#: ../bin/celev.c:409
+#, c-format
+msgid "Crossing - First %0.3f, Second %0.3f, Clearance %0.3f"
+msgstr ""
+
+#: ../bin/celev.c:420
+#, fuzzy, c-format
+msgid "Track elevation %0.3f"
+msgstr "Elevações dos trilhos"
+
+#: ../bin/celev.c:423
+#, c-format
+msgid "Click to split here - elevation %0.3f"
+msgstr ""
+
+#: ../bin/celev.c:451
+#, fuzzy
+msgid "Point selected!"
+msgstr "deselecionado"
+
+#: ../bin/celev.c:454
+#, fuzzy
+msgid "Split track"
+msgstr "Secciona um trilho"
+
+#: ../bin/celev.c:459
+#, fuzzy
+msgid "Track split!"
+msgstr "Trilhos"
+
+#: ../bin/cgroup.c:592
+msgid "Ungroup Object"
+msgstr "Desagrupar objeto"
+
+#: ../bin/cgroup.c:604
+#, c-format
+msgid "%d objects ungrouped"
+msgstr "%d objetos desagrupados"
+
+#: ../bin/cgroup.c:606
+msgid "No objects ungrouped"
+msgstr "Nenhum objeto desagrupado"
+
+#: ../bin/cgroup.c:617
+msgid "Replace with new group?"
+msgstr "Substituir por novo grupo?"
+
+#: ../bin/cgroup.c:623 ../bin/compound.c:566 ../bin/cstruct.c:69
+#: ../bin/ctodesgn.c:194 ../bin/ctodesgn.c:2916 ../bin/cturnout.c:82
+#: ../bin/dcar.c:2195 ../bin/dcar.c:4367 ../bin/dcar.c:4372
+#: ../bin/dcmpnd.c:456 ../bin/dcustmgm.c:59
+#: ../../../../build/work/app/bin/bllnhlp.c:370
+#: ../../../../build/work/app/bin/bllnhlp.c:565
+msgid "Manufacturer"
+msgstr "Fabricante"
+
+#: ../bin/cgroup.c:624 ../bin/cmisc.c:459 ../bin/cstruct.c:69
+#: ../bin/ctodesgn.c:2917 ../bin/ctodesgn.c:2918 ../bin/ctrain.c:187
+#: ../bin/cturnout.c:82 ../bin/dcar.c:2211 ../bin/dcar.c:4368
+#: ../bin/dcar.c:4373 ../bin/dcmpnd.c:457 ../bin/dcustmgm.c:60
+#: ../bin/denum.c:182 ../bin/denum.c:183 ../bin/denum.c:186
+#: ../../../../build/work/app/bin/bllnhlp.c:371
+msgid "Description"
+msgstr "Descrição"
+
+#: ../bin/cgroup.c:625 ../bin/dcmpnd.c:458
+msgid "#"
+msgstr "No."
+
+#: ../bin/cgroup.c:626 ../bin/compound.c:570
+msgid "# Segments"
+msgstr "No. de segmentos"
+
+#: ../bin/cgroup.c:628
+#, fuzzy
+msgid "Offset X,Y:"
+msgstr "Distância"
+
+#: ../bin/cgroup.c:1235
+msgid "No endpts"
+msgstr "Nenhuma extremidade"
+
+#: ../bin/cgroup.c:1350
+msgid "No paths"
+msgstr "Nenhuma via"
+
+#: ../bin/cgroup.c:1619 ../bin/cgroup.c:1669
+msgid "Group Tracks"
+msgstr "Agrupar trechos"
+
+#: ../bin/cgroup.c:1729
+msgid "Group Objects"
+msgstr "Agrupar objetos"
+
+#: ../bin/chndldto.c:70
+msgid "Place frog and drag angle"
+msgstr "Posicionar jacaré e ajustar ângulo"
+
+#: ../bin/chndldto.c:87
+msgid "frog"
+msgstr "Jacaré"
+
+#: ../bin/chndldto.c:93
+msgid "Drag to set angle"
+msgstr "Arrastar para selecionar o ângulo"
+
+#: ../bin/chndldto.c:132
+#, c-format
+msgid "Angle = %0.2f Frog# = %0.2f"
+msgstr "Ângulo = %0.2f Jacaré No. = %0.2f"
+
+#: ../bin/chndldto.c:134
+msgid "Frog angle is too close to 0"
+msgstr "Ângulo do jacaré muito próximo de 0"
+
+#: ../bin/chndldto.c:137
+msgid "Select point position"
+msgstr "Selecionar posição do ponto"
+
+#: ../bin/chndldto.c:149 ../bin/chndldto.c:174
+msgid "points"
+msgstr "Pontos"
+
+#: ../bin/chndldto.c:271
+#, c-format
+msgid "Length = %0.2f Angle = %0.2f Frog# = %0.2f"
+msgstr "Comprimento = %0.2f Ângulo = %0.2f Jacaré No. = %0.2f"
+
+#: ../bin/chndldto.c:274
+msgid "Create Hand Laid Turnout"
+msgstr "Criar AMV personalizado"
+
+#: ../bin/chndldto.c:358
+msgid "HandLaidTurnout"
+msgstr "AMV personalizado"
+
+#: ../bin/cjoin.c:166
+#, c-format
+msgid "Curved Track: Radius=%s Length=%s"
+msgstr "Trecho curvo: Raio=%s Comprimento=%s"
+
+#: ../bin/cjoin.c:252
+#, c-format
+msgid "Curved Track: Radius=%s Length=%s Angle=%0.3f"
+msgstr "Trecho curvo: Raio=%s Comprimento=%s Ângulo=%0.3f"
+
+#: ../bin/cjoin.c:348
+#, c-format
+msgid "Track (%d) is too short for transition-curve by %0.3f"
+msgstr "Trecho (%d) muito curto para transição curva por %0.3f"
+
+#: ../bin/cjoin.c:366
+#, c-format
+msgid "Connecting track is too short by %0.3f"
+msgstr "Trecho de conexão muito curto por %0.3f"
+
+#: ../bin/cjoin.c:410
+msgid "Click on an unselected End-Point"
+msgstr "Clicar em uma extremidade não selecionada"
+
+#: ../bin/cjoin.c:411
+msgid "Click on a selected End-Point"
+msgstr "Clicar em uma extremidade selecionada"
+
+#: ../bin/cjoin.c:417
+msgid "unselected"
+msgstr "deselecionado"
+
+#: ../bin/cjoin.c:417 ../bin/cprint.c:161
+msgid "selected"
+msgstr "selecionado"
+
+#: ../bin/cjoin.c:474
+msgid "Left click - Select first draw object end"
+msgstr ""
+
+#: ../bin/cjoin.c:513 ../bin/cjoin.c:539
+msgid "Not a line - Try again"
+msgstr ""
+
+#: ../bin/cjoin.c:535
+#, fuzzy
+msgid "Left click - Select second object end"
+msgstr "Clicar no objeto selecionado para alinhar"
+
+#: ../bin/cjoin.c:547
+msgid "Same draw object and same endpoint - Try again"
+msgstr ""
+
+#: ../bin/cjoin.c:581
+#, fuzzy
+msgid "Create PolyLine"
+msgstr "Criar linhas"
+
+#: ../bin/cjoin.c:654 ../bin/cjoin.c:863
+#, fuzzy
+msgid "Desired Radius"
+msgstr "Raio da circunferência"
+
+#: ../bin/cjoin.c:804
+#, fuzzy
+msgid "Left click - join with track"
+msgstr ""
+"Clicar com o botão esquerdo - junta um trecho, Clicar com o botão esquerdo + "
+"Shift - movimenta para juntar"
+
+#: ../bin/cjoin.c:806
+msgid "Left click - join with track, Shift Left click - move to join"
+msgstr ""
+"Clicar com o botão esquerdo - junta um trecho, Clicar com o botão esquerdo + "
+"Shift - movimenta para juntar"
+
+#: ../bin/cjoin.c:856
+#, fuzzy, c-format
+msgid "Select 2nd track - desired radius %0.3f"
+msgstr "Selecionar trecho a descrever"
+
+#: ../bin/cjoin.c:858 ../bin/cjoin.c:1256 ../bin/cjoin.c:1263
+msgid "Select 2nd track"
+msgstr "Selecionar o segundo trecho"
+
+#: ../bin/cjoin.c:1065
+msgid "Beyond end of 2nd track"
+msgstr "Além da extremidade do 2º trecho"
+
+#: ../bin/cjoin.c:1100
+msgid "Beyond end of 1st track"
+msgstr "Além da extremidade do 1º trecho"
+
+#: ../bin/cjoin.c:1122
+msgid "First Track Type not supported for non-Cornu Join"
+msgstr ""
+
+#: ../bin/cjoin.c:1129
+msgid "First "
+msgstr "Primeiro "
+
+#: ../bin/cjoin.c:1154
+msgid "Second Track Type not supported for non-Cornu Join"
+msgstr ""
+
+#: ../bin/cjoin.c:1161
+msgid "Second "
+msgstr "Segundo "
+
+#: ../bin/cjoin.c:1175 ../bin/track.c:2270 ../bin/track.c:2306
+#: ../bin/track.c:2372
+msgid "Connecting "
+msgstr "Conectando "
+
+#: ../bin/cjoin.c:1266
+msgid "Join Tracks"
+msgstr "Juntar trechos"
+
+#: ../bin/cjoin.c:1348
+msgid "Join"
+msgstr "Juntar"
+
+#: ../bin/cjoin.c:1349
+#, fuzzy
+msgid "Join Track"
+msgstr "Juntar trechos"
+
+#: ../bin/cjoin.c:1350
+#, fuzzy
+msgid "Join Lines"
+msgstr "Linhas"
+
+#: ../bin/cmisc.c:59
+msgid "Middle"
+msgstr "Meio"
+
+#: ../bin/cmisc.c:59 ../bin/macro.c:98
+msgid "End"
+msgstr "Fim"
+
+#: ../bin/cmisc.c:242 ../bin/cmodify.c:353 ../bin/compound.c:664
+#: ../bin/ctrain.c:218
+msgid "Change Track"
+msgstr "Substituir trecho"
+
+#: ../bin/cmisc.c:572
+msgid "Select track to describe"
+msgstr "Selecionar trecho a descrever"
+
+#: ../bin/cmisc.c:650 ../bin/doption.c:235
+msgid "Properties"
+msgstr "Propriedades"
+
+#: ../bin/cmisc2.c:52
+msgid "Bridge"
+msgstr "Ponte"
+
+#: ../bin/cmodify.c:203 ../bin/cmodify.c:471
+msgid "Modify Track"
+msgstr "Modificar trecho"
+
+#: ../bin/cmodify.c:266
+msgid ""
+"Select a track to modify, Left-Click change length, Right-Click to add "
+"flextrack"
+msgstr ""
+
+#: ../bin/cmodify.c:512
+#, fuzzy
+msgid "Drag to add flex track"
+msgstr "Arrastar para criar ramo"
+
+#: ../bin/cmodify.c:517
+#, fuzzy
+msgid "No track to extend"
+msgstr "Nenhum trecho liberado"
+
+#: ../bin/cmodify.c:522
+#, fuzzy
+msgid "No track selected"
+msgstr "Nenhum trecho liberado"
+
+#: ../bin/cmodify.c:655
+#, c-format
+msgid "Curve Track: Radius=%s Length=%s Angle=%0.3f"
+msgstr "Trecho curvo: Raio=%s Comprimento=%s Ângulo=%0.3f"
+
+#: ../bin/cmodify.c:670
+msgid "Extend Track"
+msgstr "Estender um trecho"
+
+#: ../bin/cmodify.c:794
+msgid "Modify"
+msgstr "Modificar"
+
+#: ../bin/cmodify.c:801 ../bin/cselect.c:3305 ../bin/cselect.c:3321
+#: ../bin/misc.c:2197 ../bin/misc.c:2199
+msgid "Zoom In"
+msgstr "Aproximar"
+
+#: ../bin/cmodify.c:802 ../bin/cselect.c:3309 ../bin/cselect.c:3322
+#: ../bin/misc.c:2201 ../bin/misc.c:2203
+msgid "Zoom Out"
+msgstr "Afastar"
+
+#: ../bin/cmodify.c:803
+msgid "Pan center - 'c'"
+msgstr ""
+
+#: ../bin/cnote.c:69 ../bin/textnoteui.c:48 ../bin/trknote.c:60
+msgid "Note"
+msgstr "Nota"
+
+#: ../bin/cnote.c:75
+msgid "Replace this text with your layout notes"
+msgstr "Substitua este texto por uma nota do traçado"
+
+#: ../bin/compound.c:544 ../bin/compound.c:549 ../bin/compound.c:554
+#: ../bin/compound.c:559 ../bin/tbezier.c:248 ../bin/tbezier.c:255
+#: ../bin/tcornu.c:297 ../bin/tcornu.c:302
+#, fuzzy
+msgid "Center X,Y"
+msgstr "Centro: X"
+
+#: ../bin/compound.c:546 ../bin/tbezier.c:249 ../bin/tcornu.c:298
+#, fuzzy
+msgid "Z1"
+msgstr "Z"
+
+#: ../bin/compound.c:551 ../bin/tbezier.c:256 ../bin/tcornu.c:303
+#, fuzzy
+msgid "Z2"
+msgstr "Z"
+
+#: ../bin/compound.c:552
+#, fuzzy
+msgid "End Pt 3: X,Y"
+msgstr "Extremidade 1: X"
+
+#: ../bin/compound.c:556
+#, fuzzy
+msgid "Z3"
+msgstr "Z"
+
+#: ../bin/compound.c:557
+#, fuzzy
+msgid "End Pt 4: X,Y"
+msgstr "Extremidade 1: X"
+
+#: ../bin/compound.c:561
+#, fuzzy
+msgid "Z4"
+msgstr "Z"
+
+#: ../bin/compound.c:568 ../bin/cstruct.c:69 ../bin/cturnout.c:82
+#: ../bin/dcar.c:4367 ../bin/dcar.c:4372 ../bin/dcustmgm.c:60
+#: ../bin/doption.c:137 ../bin/doption.c:138
+msgid "Part No"
+msgstr "No. do item"
+
+#: ../bin/compound.c:569
+#, fuzzy
+msgid "LineType"
+msgstr "Tipo"
+
+#: ../bin/compound.c:830 ../bin/cstruct.c:935 ../bin/cstruct.c:1126
+msgid "Structure"
+msgstr "Estrutura"
+
+#: ../bin/compound.c:832 ../bin/cswitchmotor.c:228 ../bin/cturnout.c:1063
+#: ../bin/cturnout.c:2888
+msgid "Turnout"
+msgstr "AMV"
+
+#: ../bin/compound.c:832
+msgid "Sectional Track"
+msgstr "Trecho seccionado"
+
+#: ../bin/compound.c:836
+#, fuzzy, c-format
+msgid "%s (%d) Layer= %d %s"
+msgstr "(%d): Camada=%d %s"
+
+#: ../bin/cparalle.c:52 ../bin/cparalle.c:100 ../bin/cparalle.c:140
+#: ../bin/ctodesgn.c:538 ../bin/ctodesgn.c:558 ../bin/ctodesgn.c:578
+#: ../bin/tcurve.c:371
+msgid "Separation"
+msgstr "Separação"
+
+#: ../bin/cparalle.c:55 ../bin/cparalle.c:101
+#, fuzzy
+msgid "Radius Factor"
+msgstr "Raio 2"
+
+#: ../bin/cparalle.c:141
+#, fuzzy
+msgid "Radius factor"
+msgstr "Raio 2"
+
+#: ../bin/cparalle.c:154
+msgid " Track/Line doesn't support parallel"
+msgstr ""
+
+#: ../bin/cparalle.c:226
+msgid "Create Parallel Track"
+msgstr "Criar trecho paralelo"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:354
+#: ../bin/cparalle.c:296 ../../../../build/work/app/i18n/custmsg.h:1231
+msgid "Parallel"
+msgstr "Paralelo"
+
+#: ../bin/cparalle.c:297
+#, fuzzy
+msgid "Parallel Track"
+msgstr "Criar trecho paralelo"
+
+#: ../bin/cparalle.c:298
+#, fuzzy
+msgid "Parallel Line"
+msgstr "Paralelo"
+
+#: ../bin/cprint.c:110
+msgid "Portrait"
+msgstr "Retrato"
+
+#: ../bin/cprint.c:110
+msgid "Landscape"
+msgstr "Paisagem"
+
+#: ../bin/cprint.c:111 ../bin/cswitchmotor.c:94 ../bin/cswitchmotor.c:113
+#: ../bin/cswitchmotor.c:225 ../bin/dbench.c:78 ../bin/dease.c:67
+#: ../bin/doption.c:131 ../bin/doption.c:133 ../bin/macro.c:1406
+msgid "Normal"
+msgstr "Normal"
+
+#: ../bin/cprint.c:111 ../bin/cswitchmotor.c:95 ../bin/cswitchmotor.c:114
+#: ../bin/cswitchmotor.c:226 ../bin/ctrain.c:941 ../bin/ctrain.c:1248
+msgid "Reverse"
+msgstr "Inverso"
+
+#: ../bin/cprint.c:112
+msgid "Engineering Data"
+msgstr "Dados do projeto"
+
+#: ../bin/cprint.c:113
+msgid "Registration Marks (in 1:1 scale only)"
+msgstr ""
+
+#: ../bin/cprint.c:114
+#, fuzzy
+msgid "Page Numbers"
+msgstr "Número do pilar"
+
+#: ../bin/cprint.c:115
+msgid "Ignore Page Margins"
+msgstr "Ignorar margens de página"
+
+#: ../bin/cprint.c:116 ../bin/csnap.c:705 ../bin/doption.c:530
+msgid "Snap Grid"
+msgstr "Grade"
+
+#: ../bin/cprint.c:117
+#, fuzzy
+msgid "Rulers"
+msgstr "Medir"
+
+#: ../bin/cprint.c:118
+#, fuzzy
+msgid "Roadbed Outline"
+msgstr "Imprimir leito dos trilhos"
+
+#: ../bin/cprint.c:119
+#, fuzzy
+msgid "Centerline below Scale 1:1"
+msgstr "Imprimir linha central"
+
+#: ../bin/cprint.c:127
+msgid "Print Scale"
+msgstr "Imprimir escala"
+
+#: ../bin/cprint.c:128
+msgid "Page Width"
+msgstr "Largura de página"
+
+#: ../bin/cprint.c:129
+msgid "Max"
+msgstr "Máximo"
+
+#: ../bin/cprint.c:131
+msgid "Snap Shot"
+msgstr "Capturar"
+
+#: ../bin/cprint.c:132
+msgid "Page Format"
+msgstr "Formato da página"
+
+#: ../bin/cprint.c:133
+msgid "Print Order"
+msgstr "Ordem de impressão"
+
+#: ../bin/cprint.c:134
+#, fuzzy
+msgid "Print "
+msgstr "Imprimir"
+
+#: ../bin/cprint.c:149
+#, fuzzy
+msgid " Width"
+msgstr "Largura"
+
+#: ../bin/cprint.c:151
+#, fuzzy
+msgid "Margins"
+msgstr "Principal"
+
+#: ../bin/cprint.c:152 ../bin/cturntbl.c:250
+msgid "Origin: X"
+msgstr "Origem: X"
+
+#: ../bin/cprint.c:153 ../bin/csnap.c:535
+msgid "Y"
+msgstr "Y"
+
+#: ../bin/cprint.c:154 ../bin/cprint.c:620 ../bin/cprofile.c:715
+#: ../bin/dcar.c:2215
+msgid "Reset"
+msgstr "Resetar"
+
+#: ../bin/cprint.c:156
+msgid "Setup"
+msgstr "Setup"
+
+#: ../bin/cprint.c:157 ../bin/cselect.c:3313 ../bin/misc.c:2228
+#, fuzzy
+msgid "Select All"
+msgstr "Selecionar &tudo"
+
+#: ../bin/cprint.c:158 ../bin/cprofile.c:717 ../bin/layout.c:472
+#: ../bin/misc.c:726
+msgid "Clear"
+msgstr "Limpar"
+
+#: ../bin/cprint.c:160
+msgid "0 pages"
+msgstr "0 página"
+
+#: ../bin/cprint.c:187
+#, fuzzy, c-format
+msgid "%d page"
+msgstr "%d páginas"
+
+#: ../bin/cprint.c:187
+#, c-format
+msgid "%d pages"
+msgstr "%d páginas"
+
+#: ../bin/cprint.c:408
+#, fuzzy, c-format
+msgid "PrintScale 1:%ld Room %s x %s Model Scale %s File %s"
+msgstr ""
+"Escala de impressão %ld:1 Comôdo %s x %s Escala do modelo %s Arquivo %s"
+
+#: ../bin/cprint.c:716 ../bin/dbitmap.c:208 ../bin/filenoteui.c:158
+#: ../bin/misc.c:1235 ../bin/misc.c:1313 ../bin/param.c:2618
+#: ../wlib/gtklib/browserhelp.c:88
+#: ../../../../build/work/app/bin/bllnhlp.c:584
+msgid "Cancel"
+msgstr "Anular"
+
+#: ../bin/cprint.c:723
+#, fuzzy
+msgid "Print Margins"
+msgstr "Página de teste de margem"
+
+#: ../bin/cprint.c:1367 ../bin/cprofile.c:719 ../bin/ctodesgn.c:2864
+#: ../bin/denum.c:55
+msgid "Print"
+msgstr "Imprimir"
+
+#: ../bin/cprint.c:1388
+msgid "Select pages to print, or drag to move print grid"
+msgstr "Selecionar páginas a imprimir, ou arrastar para imprimir grade"
+
+#: ../bin/cprint.c:1485
+msgid "Print..."
+msgstr "Imprimir..."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:350
+#: ../bin/cprofile.c:614 ../bin/cprofile.c:1448 ../bin/cprofile.c:1527
+#: ../../../../build/work/app/bin/bllnhlp.c:122
+#: ../../../../build/work/app/i18n/custmsg.h:1223
+msgid "Profile"
+msgstr "Perfil"
+
+#: ../bin/cprofile.c:632
+#, c-format
+msgid "%s Profile: %s"
+msgstr "%s perfil: %s"
+
+#: ../bin/cprofile.c:713 ../bin/misc.c:1894
+msgid "Change"
+msgstr "Alterar"
+
+#: ../bin/cprofile.c:757 ../bin/cprofile.c:767
+#, c-format
+msgid "Elev = %0.1f"
+msgstr "Elev = %0.1f"
+
+#: ../bin/cprofile.c:769
+#, c-format
+msgid "Elev=%0.2f %0.1f%%"
+msgstr "Elev=%0.2f %0.1f%%"
+
+#: ../bin/cprofile.c:774
+#, c-format
+msgid "%0.1f%% Elev = %0.2f"
+msgstr "%0.1f%% Elev = %0.2f"
+
+#: ../bin/cprofile.c:779
+#, c-format
+msgid "%0.1f%% Elev = %0.2f %0.1f%%"
+msgstr "%0.1f%% Elev = %0.2f %0.1f%%"
+
+#: ../bin/cprofile.c:794 ../bin/cprofile.c:864 ../bin/cprofile.c:1400
+msgid "Profile Command"
+msgstr "Comando perfil"
+
+#: ../bin/cprofile.c:803 ../bin/cprofile.c:1454
+msgid "Drag to change Elevation"
+msgstr "Arrastar para alterar elevação"
+
+#: ../bin/cprofile.c:905
+msgid "Select a Defined Elevation to start Profile"
+msgstr "Selecionar uma elevação definida para iniciar perfil"
+
+#: ../bin/cprofile.c:907
+msgid "Select a Defined Elevation to extend Profile"
+msgstr "Selecionar uma elevação definida para estender perfil"
+
+#: ../bin/cprofile.c:1462
+msgid "Select a Defined Elevation to start profile"
+msgstr "Selecionar uma elevação definida para iniciar perfil"
+
+#: ../bin/cprofile.c:1531
+msgid "Define"
+msgstr "Definir"
+
+#: ../bin/cpull.c:439 ../bin/cpull.c:595
+#, c-format
+msgid "%d tracks moved"
+msgstr "%d segmentos movidos"
+
+#: ../bin/cpull.c:485
+msgid "Pull Tracks"
+msgstr "Empurar trilhos"
+
+#: ../bin/cpull.c:559
+msgid "Tighten Tracks"
+msgstr "Trilhos forçados"
+
+#: ../bin/cpull.c:645
+msgid "Connect Multiple Tracks - Select multiple tracks to join first"
+msgstr ""
+
+#: ../bin/cpull.c:648
+#, fuzzy
+msgid "Try to Connect all Selected Tracks?"
+msgstr "Eleva ou abaixa todos os trechos selecionados"
+
+#: ../bin/cpull.c:654
+#, fuzzy
+msgid "ReConnect"
+msgstr "Conectando "
+
+#: ../bin/cpull.c:690
+#, c-format
+msgid ""
+"Round 1 %d and Round 2 %d tracks connected, %d close pairs of end Points "
+"were not connected"
+msgstr ""
+
+#: ../bin/cpull.c:715
+#, fuzzy
+msgid "Select first endpoint or turntable to connect, +Shift to tighten"
+msgstr "Selecionar primeira extremidade a conectar"
+
+#: ../bin/cpull.c:717
+msgid ""
+"Select first endpoint to connect, or Right-Click for connecting selected "
+"tracks (not turntable)"
+msgstr ""
+
+#: ../bin/cpull.c:776
+#, fuzzy
+msgid "Select second endpoint or turntable to connect"
+msgstr "Selecionar segunda extremidade a conectar"
+
+#: ../bin/cpull.c:783
+msgid "Same Track! - please select another"
+msgstr ""
+
+#: ../bin/cpull.c:870
+#, fuzzy
+msgid "Connect Two Tracks"
+msgstr "Conecta dois trilhos"
+
+#: ../bin/cpull.c:872
+msgid "Connect All Selected - 'S'"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:361
+#: ../bin/cruler.c:143 ../../../../build/work/app/i18n/custmsg.h:1245
+msgid "Ruler"
+msgstr "Medir"
+
+#: ../bin/cselect.c:616
+msgid "Change Track Width"
+msgstr "Alterar largura do trilho"
+
+#: ../bin/cselect.c:640
+#, fuzzy
+msgid "Change Line Type"
+msgstr "Muda camadas"
+
+#: ../bin/cselect.c:669
+msgid "Delete Tracks"
+msgstr "Apagar trilhos"
+
+#: ../bin/cselect.c:745
+msgid "Hide Tracks (Tunnel)"
+msgstr "Ocultar trilhos (túnel)"
+
+#: ../bin/cselect.c:763
+#, fuzzy
+msgid "Bridge Tracks "
+msgstr "Trilhos forçados"
+
+#: ../bin/cselect.c:780
+#, fuzzy
+msgid "Ties Tracks "
+msgstr "Trilhos finos"
+
+#: ../bin/cselect.c:817 ../bin/misc.c:2348
+msgid "Move To Current Layer"
+msgstr "Mover para camada em uso"
+
+#: ../bin/cselect.c:857 ../bin/misc.c:2498
+msgid "Clear Elevations"
+msgstr "Eliminar elevações"
+
+#: ../bin/cselect.c:901
+msgid "Add Elevations"
+msgstr "Adicionar elevações"
+
+#: ../bin/cselect.c:916
+msgid "Refresh Compound"
+msgstr "Atualizar composição"
+
+#: ../bin/cselect.c:948 ../bin/dcar.c:4367 ../bin/dcar.c:4372
+#: ../bin/dcustmgm.c:60 ../bin/layout.c:463
+msgid "Scale"
+msgstr "Escala"
+
+#: ../bin/cselect.c:948 ../bin/cselect.c:973
+msgid "Ratio"
+msgstr "Razão"
+
+#: ../bin/cselect.c:957
+msgid "Do not resize track"
+msgstr "Não redimensione o traçado"
+
+#: ../bin/cselect.c:961
+msgid "Rescale by:"
+msgstr "Reescalar para:"
+
+#: ../bin/cselect.c:963
+msgid "From:"
+msgstr "De:"
+
+#: ../bin/cselect.c:967
+msgid "To: "
+msgstr "A: "
+
+#: ../bin/cselect.c:1034
+msgid "Rescale Tracks"
+msgstr "Reescalar traçado"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:357
+#: ../bin/cselect.c:1164 ../../../../build/work/app/i18n/custmsg.h:1237
+msgid "Rescale"
+msgstr "Reescalar"
+
+#: ../bin/cselect.c:1465
+msgid "Cornu too tight - it was deleted"
+msgstr ""
+
+#: ../bin/cselect.c:1520
+msgid "Move To Join"
+msgstr "Arrastar para juntar"
+
+#: ../bin/cselect.c:1714
+msgid "Drag to move selected tracks - Shift+Ctrl+Arrow micro-steps the move"
+msgstr ""
+
+#: ../bin/cselect.c:1735 ../bin/cselect.c:1848 ../bin/cselect.c:2205
+msgid "Move Tracks"
+msgstr "Mover trecho"
+
+#: ../bin/cselect.c:1893
+#, fuzzy
+msgid "Align: Click on a selected object to be aligned"
+msgstr "Clicar no objeto selecionado para alinhar"
+
+#: ../bin/cselect.c:1931
+#, fuzzy
+msgid "Drag to rotate selected tracks, Shift+RightClick for QuickRotate Menu"
+msgstr "Arrastar para rotacionar trechos selecionados"
+
+#: ../bin/cselect.c:1947 ../bin/cselect.c:2218
+msgid "Rotate Tracks"
+msgstr "Rotacionar trecho"
+
+#: ../bin/cselect.c:1960
+msgid "Center of Rotation snapped to Turntable center"
+msgstr ""
+
+#: ../bin/cselect.c:2002 ../bin/cselect.c:2033
+#, c-format
+msgid "Angle %0.3f"
+msgstr "Ângulo %0.3f"
+
+#: ../bin/cselect.c:2089
+#, fuzzy, c-format
+msgid "Angle %0.3f #%ld"
+msgstr " Ângulo %0.3f No.%ld"
+
+#: ../bin/cselect.c:2091
+#, fuzzy, c-format
+msgid "Angle %0.3f %s"
+msgstr "Ângulo %0.3f"
+
+#: ../bin/cselect.c:2096
+msgid "Origin Set. Drag away to set start angle"
+msgstr ""
+
+#: ../bin/cselect.c:2110
+#, fuzzy
+msgid "Align: Click on the 2nd unselected object"
+msgstr "Clicar no 2º objeto não selecionado"
+
+#: ../bin/cselect.c:2230
+msgid "Toggle Label"
+msgstr "Ocultar ou apresentar etiqueta"
+
+#: ../bin/cselect.c:2349 ../bin/cselect.c:2388
+msgid "Select and drag a description"
+msgstr "Selecionar e arrastar uma descrição"
+
+#: ../bin/cselect.c:2374
+#, fuzzy
+msgid "Elevation description"
+msgstr "Descrição a esquerda"
+
+#: ../bin/cselect.c:2377
+msgid "Hidden description - 's' to Show"
+msgstr ""
+
+#: ../bin/cselect.c:2381
+#, fuzzy
+msgid "Shown description - 'h' to Hide"
+msgstr "Apresentar descrição"
+
+#: ../bin/cselect.c:2402
+msgid "Hidden Label - Drag to reveal"
+msgstr ""
+
+#: ../bin/cselect.c:2404
+#, fuzzy
+msgid "Drag label"
+msgstr "Arrastar ao destino"
+
+#: ../bin/cselect.c:2406
+msgid "Move Label"
+msgstr "Mover etiqueta"
+
+#: ../bin/cselect.c:2443
+msgid "To Hide, use Context Menu"
+msgstr ""
+
+#: ../bin/cselect.c:2459 ../bin/cselect.c:3339
+#, fuzzy
+msgid "Show/Hide Description"
+msgstr "Apresentar descrição"
+
+#: ../bin/cselect.c:2538
+msgid "Drag to mark mirror line"
+msgstr "Arrastar para marcar linha espelho"
+
+#: ../bin/cselect.c:2549
+#, c-format
+msgid "Angle %0.2f"
+msgstr "Ângulo %0.2f"
+
+#: ../bin/cselect.c:2552
+msgid "Flip Tracks"
+msgstr "Virar trecho"
+
+#: ../bin/cselect.c:2899
+#, fuzzy
+msgid "Select track"
+msgstr "Selecionar trecho"
+
+#: ../bin/cselect.c:2927
+msgid "Track is in Frozen Layer"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:323
+#: ../bin/cselect.c:3279 ../bin/dcar.c:1673 ../bin/doption.c:235
+#: ../../../../build/work/app/i18n/custmsg.h:1169
+msgid "Select"
+msgstr "Selecionar"
+
+#: ../bin/cselect.c:3298 ../bin/cselect.c:3318 ../bin/misc.c:2192
+msgid "Undo"
+msgstr "Desfazer"
+
+#: ../bin/cselect.c:3299 ../bin/cselect.c:3319 ../bin/misc.c:2194
+msgid "Redo"
+msgstr "Refazer"
+
+#: ../bin/cselect.c:3306 ../bin/draw.c:3112
+msgid "Zoom to extents - 'e'"
+msgstr ""
+
+#: ../bin/cselect.c:3307 ../bin/draw.c:3123 ../bin/misc.c:2375
+msgid "&Zoom"
+msgstr "&Zoom"
+
+#: ../bin/cselect.c:3310 ../bin/draw.c:3122
+msgid "Pan to Origin - 'o'/'0'"
+msgstr ""
+
+#: ../bin/cselect.c:3311 ../bin/cselect.c:3323
+msgid "Pan Center Here - 'c'"
+msgstr ""
+
+#: ../bin/cselect.c:3314 ../bin/misc.c:2231 ../bin/misc.c:2354
+msgid "Select Current Layer"
+msgstr "&Selecionar camada atual"
+
+#: ../bin/cselect.c:3325 ../bin/misc.c:2233
+msgid "Deselect All"
+msgstr "Deselecionar tudo"
+
+#: ../bin/cselect.c:3327
+#, fuzzy
+msgid "Properties -'?'"
+msgstr "Propriedades"
+
+#: ../bin/cselect.c:3328
+#, fuzzy
+msgid "Modify/Activate Track"
+msgstr "Modificar trecho"
+
+#: ../bin/cselect.c:3330 ../bin/misc.c:2219
+#, fuzzy
+msgid "Cut"
+msgstr "&Cortar"
+
+#: ../bin/cselect.c:3331 ../bin/misc.c:2221
+msgid "Copy"
+msgstr "&Copiar"
+
+#: ../bin/cselect.c:3332 ../bin/fileio.c:1620 ../bin/misc.c:2223
+msgid "Paste"
+msgstr "Colar"
+
+#: ../bin/cselect.c:3333 ../bin/misc.c:2225
+#, fuzzy
+msgid "Clone"
+msgstr "Fechar"
+
+#: ../bin/cselect.c:3335
+#, fuzzy
+msgid "Rotate..."
+msgstr "Rotacionar"
+
+#: ../bin/cselect.c:3337
+msgid "Align"
+msgstr "Alinhar"
+
+#: ../bin/cselect.c:3341
+msgid "Hide/NoHide"
+msgstr ""
+
+#: ../bin/cselect.c:3342
+msgid "Bridge/NoBridge"
+msgstr ""
+
+#: ../bin/cselect.c:3343
+msgid "NoTies/Ties"
+msgstr ""
+
+#: ../bin/cselect.c:3344
+msgid "Thickness..."
+msgstr ""
+
+#: ../bin/cselect.c:3345 ../bin/misc.c:2366
+msgid "Thin Tracks"
+msgstr "Trilhos finos"
+
+#: ../bin/cselect.c:3346 ../bin/misc.c:2367
+msgid "Medium Tracks"
+msgstr "Trilhos médios"
+
+#: ../bin/cselect.c:3347 ../bin/misc.c:2368
+msgid "Thick Tracks"
+msgstr "Trilhos largos"
+
+#: ../bin/cselect.c:3352
+msgid "Dash-Dotted Line"
+msgstr ""
+
+#: ../bin/cselect.c:3353
+msgid "Dash-Dot-Dotted Line"
+msgstr ""
+
+#: ../bin/cselect.c:3355
+#, fuzzy
+msgid "Move To Front"
+msgstr "Arrastar para juntar"
+
+#: ../bin/cselect.c:3356
+#, fuzzy
+msgid "Move To Back"
+msgstr "Mover trecho"
+
+#: ../bin/cselect.c:3358
+#, fuzzy
+msgid "Group"
+msgstr "A&grupar"
+
+#: ../bin/cselect.c:3359
+#, fuzzy
+msgid "UnGroup"
+msgstr "&Desagrupar"
+
+#: ../bin/cselect.c:3394
+msgid "Move Description"
+msgstr "Mover descrição"
+
+#: ../bin/cselect.c:3401 ../bin/misc.c:1935 ../bin/misc.c:2236
+msgid "Move"
+msgstr "Mover"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:368
+#: ../bin/cselect.c:3403 ../bin/misc.c:1926 ../bin/misc.c:2238
+#: ../../../../build/work/app/i18n/custmsg.h:1259
+msgid "Rotate"
+msgstr "Rotacionar"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:369
+#: ../bin/cselect.c:3405 ../bin/dcar.c:2217
+#: ../../../../build/work/app/i18n/custmsg.h:1261
+msgid "Flip"
+msgstr "Virar"
+
+#: ../bin/csensor.c:216
+#, fuzzy
+msgid "Change Sensor"
+msgstr "Alterar escala"
+
+#: ../bin/csensor.c:262 ../bin/csensor.c:596
+msgid "Sensor"
+msgstr ""
+
+#: ../bin/csensor.c:391 ../bin/csignal.c:511
+#, fuzzy
+msgid "Orgin X"
+msgstr "Margem"
+
+#: ../bin/csensor.c:407
+#, fuzzy
+msgid "Create Sensor"
+msgstr "Cria bancada"
+
+#: ../bin/csensor.c:410
+#, fuzzy
+msgid "Modify Sensor"
+msgstr "Modificar trecho"
+
+#: ../bin/csensor.c:443
+#, fuzzy
+msgid "Edit sensor"
+msgstr "Menu editar"
+
+#: ../bin/csensor.c:481
+#, fuzzy
+msgid "Place sensor"
+msgstr "Posicionar novo AMV"
+
+#: ../bin/csignal.c:241
+#, fuzzy
+msgid "Number Of Heads"
+msgstr "Números"
+
+#: ../bin/csignal.c:280
+#, fuzzy
+msgid "Change Signal"
+msgstr "Alterar escala"
+
+#: ../bin/csignal.c:314
+#, fuzzy, c-format
+msgid "(%d [%s]): Layer=%u, %d heads at %0.3f,%0.3f A%0.3f"
+msgstr "(%d): Camada=%d %s"
+
+#: ../bin/csignal.c:325 ../bin/csignal.c:914
+msgid "Signal"
+msgstr ""
+
+#: ../bin/csignal.c:517
+#, fuzzy
+msgid "Number of Heads"
+msgstr "Números"
+
+#: ../bin/csignal.c:522
+#, fuzzy
+msgid "Edit Aspect"
+msgstr "Menu editar"
+
+#: ../bin/csignal.c:524
+msgid "Add Aspect"
+msgstr ""
+
+#: ../bin/csignal.c:526
+#, fuzzy
+msgid "Delete Aspect"
+msgstr "Elimina objetos"
+
+#: ../bin/csignal.c:539
+msgid "Aspect Index"
+msgstr ""
+
+#: ../bin/csignal.c:554
+#, fuzzy
+msgid "Create Signal"
+msgstr "Criar linhas"
+
+#: ../bin/csignal.c:558
+#, fuzzy
+msgid "Modify Signal"
+msgstr "Modificar trecho"
+
+#: ../bin/csignal.c:665
+#, fuzzy
+msgid "Edit aspect"
+msgstr "Menu editar"
+
+#: ../bin/csignal.c:712
+#, c-format
+msgid "Are you sure you want to delete the %d aspect(s)"
+msgstr ""
+
+#: ../bin/csignal.c:733
+#, fuzzy
+msgid "Edit signal"
+msgstr "Menu editar"
+
+#: ../bin/csignal.c:795
+msgid "Place base of signal"
+msgstr ""
+
+#: ../bin/csignal.c:802
+#, fuzzy
+msgid "Drag to orient signal"
+msgstr "Arrastar para selecionar o ângulo"
+
+#: ../bin/csnap.c:516
+msgid "Horz"
+msgstr "Horizontal"
+
+#: ../bin/csnap.c:518
+msgid "Spacing"
+msgstr "Espaçamento"
+
+#: ../bin/csnap.c:520
+msgid "Divisions"
+msgstr "Divisões"
+
+#: ../bin/csnap.c:523
+msgid "Enable"
+msgstr "Habilitar"
+
+#: ../bin/csnap.c:524
+msgid "Vert"
+msgstr "Vertical"
+
+#: ../bin/csnap.c:533 ../bin/dease.c:76
+msgid "X"
+msgstr "X"
+
+#: ../bin/csnap.c:537
+msgid "A"
+msgstr "θ"
+
+#: ../bin/csnap.c:540
+msgid "Show"
+msgstr "Apresentar"
+
+#: ../bin/csnap.c:790
+msgid "Change Grid..."
+msgstr "Alterar grade..."
+
+#: ../bin/csplit.c:44
+msgid "Set Block Gaps"
+msgstr "Configurar espaçamento de bloco"
+
+#: ../bin/csplit.c:105
+msgid "Select track to split"
+msgstr "Selecionar trecho a seccionar"
+
+#: ../bin/csplit.c:125
+#, fuzzy
+msgid "Can't Split that Track"
+msgstr "Secciona um trilho"
+
+#: ../bin/csplit.c:133 ../bin/csplit.c:221
+msgid "Split Track"
+msgstr "Seccionar trecho"
+
+#: ../bin/csplit.c:149 ../bin/dbench.c:69 ../bin/dbench.c:80
+msgid "Left"
+msgstr "Esquerda"
+
+#: ../bin/csplit.c:150 ../bin/dbench.c:70 ../bin/dbench.c:79
+msgid "Right"
+msgstr "Direita"
+
+#: ../bin/csplit.c:151 ../bin/csplit.c:156
+msgid "Both"
+msgstr "Ambos"
+
+#: ../bin/csplit.c:154
+msgid "Top"
+msgstr "Em cima"
+
+#: ../bin/csplit.c:155
+msgid "Bottom"
+msgstr "Em baixo"
+
+#: ../bin/cstraigh.c:77
+#, fuzzy
+msgid "Place 1st endpoint of straight track, snap to unconnected endpoint"
+msgstr "Posicionar 1ª extremidade do trecho reto"
+
+#: ../bin/cstraigh.c:104
+msgid "Drag to place 2nd end point"
+msgstr "Arrastar à posição da 2ª extremidade"
+
+#: ../bin/cstraigh.c:140
+#, c-format
+msgid "Straight Track Length=%s Angle=%0.3f"
+msgstr "Trecho reto Comprimento=%s Ângulo=%0.3f"
+
+#: ../bin/cstraigh.c:191 ../bin/tstraigh.c:267
+msgid "Straight Track"
+msgstr "Trecho reto"
+
+#: ../bin/cstruct.c:71 ../bin/cturnout.c:84 ../bin/doption.c:131
+#: ../bin/doption.c:240
+msgid "Hide"
+msgstr "Esconder"
+
+#: ../bin/cstruct.c:449 ../bin/cstruct.c:476
+msgid "Pier Number"
+msgstr "Número do pilar"
+
+#: ../bin/cstruct.c:561
+#, c-format
+msgid "Scale %d:1"
+msgstr "Escala %d:1"
+
+#: ../bin/cstruct.c:563
+#, c-format
+msgid "Width %s"
+msgstr "Largura %s"
+
+#: ../bin/cstruct.c:565
+#, c-format
+msgid "Height %s"
+msgstr "Altura %s"
+
+#: ../bin/cstruct.c:706
+msgid "Place Structure"
+msgstr "Posicionar estrutura"
+
+#: ../bin/cstruct.c:798 ../bin/cstruct.c:872 ../bin/cstruct.c:1103
+#: ../bin/cturnout.c:2753 ../bin/cturnout.c:2808 ../bin/cturnout.c:2933
+#: ../bin/cturnout.c:3072
+#, fuzzy
+msgid ""
+"Left-Drag to place, Ctrl+Left-Drag or Right-Drag to Rotate, Space or Enter "
+"to accept, Esc to Cancel"
+msgstr ""
+"Arrastar com o botão esquerdo do mouse para mover, direito para rotacionar, "
+"pressionar barra de espaço ou \"Enter\" para fixar trecho ou \"Esc\" para "
+"anular"
+
+#: ../bin/cstruct.c:820
+msgid "Drag to place"
+msgstr "Arrastar ao destino"
+
+#: ../bin/cstruct.c:842
+msgid "Drag to rotate"
+msgstr "Arrastar para rotacionar"
+
+#: ../bin/cstruct.c:862
+#, c-format
+msgid "Angle = %0.3f"
+msgstr "Ângulo = %0.3f"
+
+#: ../bin/cstruct.c:952
+msgid "Select Structure and then drag to place"
+msgstr "Selecionar estrutura e arrastar ao destino"
+
+#: ../bin/cstruct.c:990
+msgid ""
+"Left drag to move, right drag to rotate, or press Return or click Ok to "
+"finalize"
+msgstr ""
+"Arrastar clicanco o botão esquerdo do mouse para mover, botão direito para "
+"rotacionar, pressionar \"Return\" ou clicar em \"Ok\" para finalizar"
+
+#: ../bin/cstruct.c:1073 ../bin/cturnout.c:3039
+#, c-format
+msgid "Place %s and draw into position"
+msgstr "Posicionar %s e desenhar na posição"
+
+#: ../bin/cswitchmotor.c:96 ../bin/cswitchmotor.c:115
+#: ../bin/cswitchmotor.c:227
+msgid "Point Sense"
+msgstr "Aportar direção"
+
+#: ../bin/cswitchmotor.c:116
+#, fuzzy
+msgid "Turnout Number"
+msgstr "Número da parte"
+
+#: ../bin/cswitchmotor.c:292
+msgid "Change Switch Motor"
+msgstr "Alterar motor de AMV"
+
+#: ../bin/cswitchmotor.c:359
+#, fuzzy
+msgid "Switch motor"
+msgstr "Motor de AMV"
+
+#: ../bin/cswitchmotor.c:475
+#, c-format
+msgid "ResolveSwitchmotor: Turnout T%d: T%d doesn't exist"
+msgstr ""
+
+#: ../bin/cswitchmotor.c:544 ../bin/cswitchmotor.c:714
+msgid "Switch motor must have a name!"
+msgstr ""
+
+#: ../bin/cswitchmotor.c:548
+msgid "Create Switch Motor"
+msgstr "Criar motor de AMV"
+
+#: ../bin/cswitchmotor.c:580
+#, fuzzy
+msgid "Create switch motor"
+msgstr "Criar motor de AMV"
+
+#: ../bin/cswitchmotor.c:594 ../bin/cswitchmotor.c:625
+#: ../bin/cswitchmotor.c:657
+msgid "Select a turnout"
+msgstr "Selecionar um AMV"
+
+#: ../bin/cswitchmotor.c:601
+msgid "Not a turnout!"
+msgstr "Isto não é um AMV!"
+
+#: ../bin/cswitchmotor.c:634 ../bin/cswitchmotor.c:665
+#, fuzzy
+msgid "Not a switch motor!"
+msgstr "Isto não é um motor de AMV!"
+
+#: ../bin/cswitchmotor.c:670
+#, fuzzy, c-format
+msgid "Really delete switch motor %s?"
+msgstr "Eliminar motor de AMV %s?"
+
+#: ../bin/cswitchmotor.c:671
+msgid "Delete Switch Motor"
+msgstr "Eliminar motor de AMV"
+
+#: ../bin/cswitchmotor.c:718
+#, fuzzy
+msgid "Modify Switch Motor"
+msgstr "Editar motor de AMV"
+
+#: ../bin/cswitchmotor.c:744
+#, fuzzy
+msgid "Edit switch motor"
+msgstr "Editar motor de AMV"
+
+#: ../bin/cswitchmotor.c:750
+#, fuzzy, c-format
+msgid "Edit switch motor %d"
+msgstr "Editar motor de AMV"
+
+#: ../bin/cswitchmotor.c:858
+msgid "Switch Motor"
+msgstr "Motor de AMV"
+
+#: ../bin/cswitchmotor.c:871
+#, fuzzy, c-format
+msgid "Deleting Switch Motor %s"
+msgstr "Eliminar motor de AMV"
+
+#: ../bin/ctext.c:195 ../bin/ctext.c:234
+msgid "Create Text"
+msgstr "Criar texto"
+
+#: ../bin/ctext.c:264
+msgid "Fonts..."
+msgstr "Fontes..."
+
+#: ../bin/ctodesgn.c:139
+msgid "Frog #"
+msgstr "Jacaré No."
+
+#: ../bin/ctodesgn.c:139
+msgid "Degrees"
+msgstr "Graus"
+
+#: ../bin/ctodesgn.c:140
+msgid "Dual Path"
+msgstr ""
+
+#: ../bin/ctodesgn.c:140
+#, fuzzy
+msgid "Quad Path"
+msgstr " e item"
+
+#: ../bin/ctodesgn.c:175 ../bin/ctodesgn.c:176 ../bin/ctodesgn.c:177
+#: ../bin/ctodesgn.c:178 ../bin/ctodesgn.c:238 ../bin/ctodesgn.c:261
+#: ../bin/ctodesgn.c:263 ../bin/ctodesgn.c:298 ../bin/ctodesgn.c:301
+#: ../bin/ctodesgn.c:327 ../bin/ctodesgn.c:328 ../bin/ctodesgn.c:364
+#: ../bin/ctodesgn.c:367 ../bin/ctodesgn.c:393 ../bin/ctodesgn.c:395
+#: ../bin/ctodesgn.c:434 ../bin/ctodesgn.c:438 ../bin/ctodesgn.c:441
+#: ../bin/ctodesgn.c:653
+msgid "Offset"
+msgstr "Distância"
+
+#: ../bin/ctodesgn.c:196 ../bin/ctodesgn.c:2911 ../bin/ctodesgn.c:2912
+msgid "Left Description"
+msgstr "Descrição a esquerda"
+
+#: ../bin/ctodesgn.c:197 ../bin/ctodesgn.c:200
+msgid " #"
+msgstr " No."
+
+#: ../bin/ctodesgn.c:199 ../bin/ctodesgn.c:2910
+msgid "Right Description"
+msgstr "Descrição a direita"
+
+#: ../bin/ctodesgn.c:201
+msgid "Roadbed Width"
+msgstr "Largura do leito"
+
+#: ../bin/ctodesgn.c:205 ../bin/denum.c:56
+msgid "Print Setup"
+msgstr "Setup de impressão"
+
+#: ../bin/ctodesgn.c:236
+msgid "Diverging Length"
+msgstr "Comprimento divergente"
+
+#: ../bin/ctodesgn.c:237
+msgid "Diverging Angle"
+msgstr "Ângulo divergente"
+
+#: ../bin/ctodesgn.c:238
+msgid "Diverging Offset"
+msgstr "Distância de divergência"
+
+#: ../bin/ctodesgn.c:239
+msgid "Overall Length"
+msgstr "Comprimento total"
+
+#: ../bin/ctodesgn.c:249
+msgid "Regular Turnout"
+msgstr "AMV regular"
+
+#: ../bin/ctodesgn.c:259 ../bin/ctodesgn.c:296
+msgid "Inner Length"
+msgstr "Comprimento interno"
+
+#: ../bin/ctodesgn.c:260 ../bin/ctodesgn.c:297
+msgid "Inner Angle"
+msgstr "Ângulo interno"
+
+#: ../bin/ctodesgn.c:261 ../bin/ctodesgn.c:298
+msgid "Inner Offset"
+msgstr "Distância interna"
+
+#: ../bin/ctodesgn.c:262 ../bin/ctodesgn.c:300
+msgid "Outer Angle"
+msgstr "Ângulo externo"
+
+#: ../bin/ctodesgn.c:263 ../bin/ctodesgn.c:301
+msgid "Outer Offset"
+msgstr "Distância externa"
+
+#: ../bin/ctodesgn.c:264 ../bin/ctodesgn.c:303
+msgid "Outer Length"
+msgstr "Comprimento externo"
+
+#: ../bin/ctodesgn.c:286
+msgid "Curved Turnout"
+msgstr "AMV curvo"
+
+#: ../bin/ctodesgn.c:299
+#, fuzzy
+msgid "Inner Radius"
+msgstr "Raio"
+
+#: ../bin/ctodesgn.c:302
+#, fuzzy
+msgid "Outer Radius"
+msgstr "Raio"
+
+#: ../bin/ctodesgn.c:304 ../bin/ctodesgn.c:371 ../bin/ctodesgn.c:446
+#, fuzzy
+msgid "Toe Radius"
+msgstr "Raio"
+
+#: ../bin/ctodesgn.c:305 ../bin/ctodesgn.c:370
+#, fuzzy
+msgid "Toe Length"
+msgstr "Comprimento total"
+
+#: ../bin/ctodesgn.c:315
+#, fuzzy
+msgid "Cornu Curved Turnout"
+msgstr "AMV curvo"
+
+#: ../bin/ctodesgn.c:325 ../bin/ctodesgn.c:362 ../bin/ctodesgn.c:391
+#: ../bin/ctodesgn.c:432
+msgid "Left Length"
+msgstr "Comprimento a esquerda"
+
+#: ../bin/ctodesgn.c:326 ../bin/ctodesgn.c:363 ../bin/ctodesgn.c:392
+#: ../bin/ctodesgn.c:433
+msgid "Left Angle"
+msgstr "Ângulo a esquerda"
+
+#: ../bin/ctodesgn.c:327 ../bin/ctodesgn.c:364 ../bin/ctodesgn.c:393
+#: ../bin/ctodesgn.c:434
+msgid "Left Offset"
+msgstr "Distância esquerda"
+
+#: ../bin/ctodesgn.c:328 ../bin/ctodesgn.c:367 ../bin/ctodesgn.c:395
+#: ../bin/ctodesgn.c:441
+msgid "Right Offset"
+msgstr "Distância direita"
+
+#: ../bin/ctodesgn.c:329 ../bin/ctodesgn.c:368 ../bin/ctodesgn.c:396
+#: ../bin/ctodesgn.c:442
+msgid "Right Angle"
+msgstr "Ângulo a direita"
+
+#: ../bin/ctodesgn.c:330 ../bin/ctodesgn.c:369 ../bin/ctodesgn.c:397
+#: ../bin/ctodesgn.c:443
+msgid "Right Length"
+msgstr "Comprimento a direita"
+
+#: ../bin/ctodesgn.c:352
+msgid "Wye Turnout"
+msgstr "AMV em Y"
+
+#: ../bin/ctodesgn.c:365 ../bin/ctodesgn.c:435
+#, fuzzy
+msgid "Left Radius"
+msgstr "Raio"
+
+#: ../bin/ctodesgn.c:366 ../bin/ctodesgn.c:440
+#, fuzzy
+msgid "Right Radius"
+msgstr "Raio"
+
+#: ../bin/ctodesgn.c:381
+#, fuzzy
+msgid "Cornu Wye Turnout"
+msgstr "AMV em Y"
+
+#: ../bin/ctodesgn.c:422
+msgid "3-way Turnout"
+msgstr "AMV de 3 posições"
+
+#: ../bin/ctodesgn.c:436
+#, fuzzy
+msgid "Center Length"
+msgstr "Comprimento interno"
+
+#: ../bin/ctodesgn.c:437
+#, fuzzy
+msgid "Center Angle"
+msgstr "Ângulo interno"
+
+#: ../bin/ctodesgn.c:438 ../bin/dcar.c:2238
+#, fuzzy
+msgid "Center Offset"
+msgstr "Distância interna"
+
+#: ../bin/ctodesgn.c:439
+#, fuzzy
+msgid "Center Radius"
+msgstr "Raio da circunferência"
+
+#: ../bin/ctodesgn.c:444
+#, fuzzy
+msgid "Toe Length Left"
+msgstr "Comprimento total"
+
+#: ../bin/ctodesgn.c:445
+#, fuzzy
+msgid "Toe Length Right"
+msgstr "Comprimento total"
+
+#: ../bin/ctodesgn.c:457
+#, fuzzy
+msgid "Cornu 3-way Turnout"
+msgstr "AMV de 3 posições"
+
+#: ../bin/ctodesgn.c:477
+msgid "Crossing"
+msgstr "Cruzamento"
+
+#: ../bin/ctodesgn.c:498
+msgid "Single Slipswitch"
+msgstr "Slipswitch simples"
+
+#: ../bin/ctodesgn.c:527
+msgid "Double Slipswitch"
+msgstr "Slipswitch duplo"
+
+#: ../bin/ctodesgn.c:547
+msgid "Right Crossover"
+msgstr "Sobrecruzamento direito"
+
+#: ../bin/ctodesgn.c:567
+msgid "Left Crossover"
+msgstr "Sobrecruzamento esquerdo"
+
+#: ../bin/ctodesgn.c:587
+msgid "Double Crossover"
+msgstr "Sobrecruzamento duplo"
+
+#: ../bin/ctodesgn.c:605
+msgid "Straight Section"
+msgstr "Seção reta"
+
+#: ../bin/ctodesgn.c:616
+msgid "Angle (Degrees)"
+msgstr "Ângulo (em graus)"
+
+#: ../bin/ctodesgn.c:624
+msgid "Curved Section"
+msgstr "Seção curva"
+
+#: ../bin/ctodesgn.c:643
+msgid "Bumper Section"
+msgstr "Seção de parachoque"
+
+# Esse texto possui dois contextos diferentes. Favor alterar software para distingui-los.
+#: ../bin/ctodesgn.c:653 ../bin/denum.c:123 ../bin/denum.c:186
+#: ../bin/denum.c:218 ../bin/denum.c:219 ../bin/dlayer.c:497
+msgid "Count"
+msgstr "Posição"
+
+#: ../bin/ctodesgn.c:654
+msgid "Radius1"
+msgstr "Raio 1"
+
+#: ../bin/ctodesgn.c:655
+msgid "Radius2"
+msgstr "Raio 2"
+
+#: ../bin/ctodesgn.c:735
+msgid "Turntable Section"
+msgstr "Virador de locomotivas"
+
+#: ../bin/ctodesgn.c:2538
+#, c-format
+msgid "%s Designer"
+msgstr "Editor %s"
+
+#: ../bin/ctodesgn.c:2542
+#, c-format
+msgid "%s %d x %d (of %d x %d)"
+msgstr ""
+
+#: ../bin/ctodesgn.c:2542
+msgid "Page"
+msgstr "Página"
+
+#: ../bin/ctodesgn.c:2550
+msgid "Frog Number"
+msgstr "Número do jacaré"
+
+#: ../bin/ctodesgn.c:2864
+msgid "Turnout Designer"
+msgstr "Editor de AMV"
+
+#: ../bin/ctodesgn.c:2874
+#, c-format
+msgid "%s %s Designer"
+msgstr "Editor %s %s"
+
+#: ../bin/ctrain.c:182 ../bin/dcar.c:2250 ../bin/dcar.c:4367
+#: ../bin/dcar.c:4372
+msgid "Index"
+msgstr "Índice"
+
+#: ../bin/ctrain.c:188 ../bin/dcar.c:4368
+msgid "Rep Marks"
+msgstr "Abreviaturas"
+
+#: ../bin/ctrain.c:272
+msgid "Car"
+msgstr "Material rodante"
+
+#: ../bin/ctrain.c:656
+msgid "Follow"
+msgstr "Seguido"
+
+#: ../bin/ctrain.c:657
+msgid "Auto Reverse"
+msgstr "Auto reverso"
+
+#: ../bin/ctrain.c:676 ../bin/dcar.c:5257
+msgid "Find"
+msgstr "Encontrar"
+
+# não seria melhor "Procurar"
+#: ../bin/ctrain.c:682 ../bin/ctrain.c:941 ../bin/ctrain.c:1248
+#: ../wlib/gtklib/ixhelp.c:239
+msgid "Forward"
+msgstr "Rodar"
+
+#: ../bin/ctrain.c:684 ../bin/ctrain.c:3123 ../bin/dcar.c:4706
+#: ../bin/dcar.c:4716 ../bin/dcar.c:4836 ../bin/fileio.c:241 ../bin/macro.c:92
+#: ../bin/macro.c:898
+msgid "Stop"
+msgstr "Parar"
+
+#: ../bin/ctrain.c:882 ../bin/ctrain.c:911
+msgid "Crashed"
+msgstr "Colisão"
+
+#: ../bin/ctrain.c:884
+msgid "Not on Track"
+msgstr "Isso não é um trilho"
+
+#: ../bin/ctrain.c:888
+msgid "Trains Paused"
+msgstr "Trens parados"
+
+#: ../bin/ctrain.c:890
+msgid "Running"
+msgstr "Rodando"
+
+#: ../bin/ctrain.c:895
+msgid "End of Track"
+msgstr "Fim da linha"
+
+#: ../bin/ctrain.c:899
+msgid "Open Turnout"
+msgstr "AMV aberto"
+
+#: ../bin/ctrain.c:903
+msgid "Manual Stop"
+msgstr "Parada manual"
+
+#: ../bin/ctrain.c:907
+msgid "No Room"
+msgstr "Espaço insuficiente"
+
+#: ../bin/ctrain.c:915
+msgid "Unknown Status"
+msgstr "Estado desconhecido"
+
+#: ../bin/ctrain.c:925
+msgid "No trains"
+msgstr "Nenhum trem"
+
+#: ../bin/ctrain.c:1299
+msgid "Train Control XXX"
+msgstr "Controle do trem XXX"
+
+#: ../bin/ctrain.c:1300
+#, c-format
+msgid "Train Control %d"
+msgstr "Controle do trem %d"
+
+#: ../bin/ctrain.c:1302
+msgid "Train Control"
+msgstr "Controle de trem"
+
+#: ../bin/ctrain.c:3096
+msgid "Train"
+msgstr "Trem"
+
+#: ../bin/ctrain.c:3109
+msgid "Uncouple"
+msgstr "Desengatar"
+
+#: ../bin/ctrain.c:3111
+msgid "Flip Car"
+msgstr "Virar material rodante"
+
+#: ../bin/ctrain.c:3113
+#, fuzzy
+msgid "Clearance Lines On"
+msgstr "Criar linhas"
+
+#: ../bin/ctrain.c:3115
+#, fuzzy
+msgid "Clearance Lines Off"
+msgstr "Criar linhas"
+
+#: ../bin/ctrain.c:3117
+msgid "Flip Train"
+msgstr "Virar trem"
+
+#: ../bin/ctrain.c:3119
+msgid "MU Master"
+msgstr "MU Master"
+
+#: ../bin/ctrain.c:3122
+msgid "Change Direction"
+msgstr "Alternar direção"
+
+#: ../bin/ctrain.c:3126
+msgid "Remove Car"
+msgstr "Remover material rodante"
+
+#: ../bin/ctrain.c:3129
+msgid "Remove Train"
+msgstr "Remover trem"
+
+#: ../bin/cturnout.c:95 ../bin/dcar.c:2272 ../bin/dcar.c:2276
+msgid "New"
+msgstr "Novo"
+
+#: ../bin/cturnout.c:368
+#, c-format
+msgid "Turnout path[%d:%d] out of bounds: %d"
+msgstr "AMV[%d:%d] fora do limite: %d"
+
+#: ../bin/cturnout.c:379 ../bin/cturnout.c:389
+#, fuzzy, c-format
+msgid "Turnout path[%d] %d is not a valid track segment"
+msgstr "AMV[%d] %d não se encontra em um segmento"
+
+#: ../bin/cturnout.c:399 ../bin/cturnout.c:404
+#, c-format
+msgid "Turnout path[%d] %d is not a track segment"
+msgstr "AMV[%d] %d não se encontra em um segmento"
+
+#: ../bin/cturnout.c:412
+#, fuzzy, c-format
+msgid "Turnout path[%d] %d-%d not connected: %0.3f P0(%f,%f) P1(%f,%f)"
+msgstr "AMV [%d] %d-%d não conectado: %0.3f"
+
+#: ../bin/cturnout.c:450
+msgid "Unknown special case"
+msgstr "Caso especial desconhecido"
+
+#: ../bin/cturnout.c:560
+msgid "Connect Adjustable Tracks"
+msgstr "Conectar trechos ajustáveis"
+
+#: ../bin/cturnout.c:1096
+msgid "splitTurnout: can't find segment"
+msgstr "Dividir AMV: não foi possivel encontrar segmento"
+
+#: ../bin/cturnout.c:1522 ../bin/track.c:2259 ../bin/track.c:2365
+#: ../bin/tstraigh.c:554
+msgid "Drag to change track length"
+msgstr "Arrastar para alterar comprimento do trecho"
+
+#: ../bin/cturnout.c:1533
+#, c-format
+msgid "Length=%s"
+msgstr "Comprimento=%s"
+
+#: ../bin/cturnout.c:2344
+#, c-format
+msgid "%d connections, max distance %0.3f (%s)"
+msgstr "%d conexões, distancia máxima %0.3f (%s)"
+
+#: ../bin/cturnout.c:2349
+#, c-format
+msgid "0 connections (%s)"
+msgstr "0 conexões (%s)"
+
+#: ../bin/cturnout.c:2389
+msgid "Place New Turnout"
+msgstr "Posicionar novo AMV"
+
+#: ../bin/cturnout.c:2798
+#, c-format
+msgid "Angle = %0.3f (%s)"
+msgstr "Ângulo = %0.3f (%s)"
+
+#: ../bin/cturnout.c:2888 ../bin/param.c:2618
+msgid "Close"
+msgstr "Fechar"
+
+#: ../bin/cturnout.c:2905
+msgid "Pick turnout and active End Point, then place on the layout"
+msgstr "Selecionar AMV e ativar extremidade, e então posicionar no layout"
+
+#: ../bin/cturnout.c:3099
+#, fuzzy
+msgid "Predefined Track"
+msgstr "Trilho selecionado"
+
+#: ../bin/cturntbl.c:52 ../bin/cturntbl.c:251 ../bin/cturntbl.c:857
+#: ../bin/cturntbl.c:871
+msgid "Diameter"
+msgstr "Diâmetro"
+
+#: ../bin/cturntbl.c:252
+msgid "# EndPt"
+msgstr "No. da extremidade"
+
+#: ../bin/cturntbl.c:286
+#, c-format
+msgid "Turntable(%d): Layer=%d Center=[%s %s] Diameter=%s #EP=%d"
+msgstr ""
+"Virador(%d): Camada=%d Centro=[%s %s] Diâmetro=%s No. da extremidade=%d"
+
+#: ../bin/cturntbl.c:301
+msgid "Turntable"
+msgstr "Virador de locomotivas"
+
+#: ../bin/cturntbl.c:565
+msgid "Drag to create stall track"
+msgstr "Arrastar para criar ramo"
+
+#: ../bin/cturntbl.c:618
+#, fuzzy
+msgid "Connect Turntable Tracks"
+msgstr "Conectar trechos ajustáveis"
+
+#: ../bin/cturntbl.c:885
+msgid "Create Turntable"
+msgstr "Criar virador de locomotivas"
+
+#: ../bin/cturntbl.c:916
+#, fuzzy
+msgid "Custom Turntable"
+msgstr "Criar virador de locomotivas"
+
+#: ../bin/cundo.c:166
+msgid "Undo Trace"
+msgstr "Desfazer traço"
+
+#: ../bin/cundo.c:536
+#, c-format
+msgid "Undo: %s"
+msgstr "Desfazer: %s"
+
+#: ../bin/cundo.c:539 ../../../../build/work/app/bin/bllnhlp.c:158
+msgid "Undo last command"
+msgstr "Desfazer último comando"
+
+#: ../bin/cundo.c:544
+#, c-format
+msgid "Redo: %s"
+msgstr "Refazer: %s"
+
+#: ../bin/cundo.c:547 ../../../../build/work/app/bin/bllnhlp.c:124
+msgid "Redo last undo"
+msgstr "Refazer último comando"
+
+#: ../bin/custom.c:167
+#, c-format
+msgid "%s Turnout Designer"
+msgstr "Editor de AMV %s"
+
+#: ../bin/custom.c:172
+#, c-format
+msgid "%s Version %s"
+msgstr "%s versão %s"
+
+#: ../bin/custom.c:177
+#, c-format
+msgid ""
+"All %s Files (*.xtc,*.xtce)|*.xtc;*.xtce|%s Trackplan (*.xtc)|*.xtc|%s "
+"Extended Trackplan (*.xtce)|*.xtce|All Files (*)|*"
+msgstr ""
+
+#: ../bin/custom.c:188
+#, c-format
+msgid ""
+"%s Trackplan (*.xtc)|*.xtc|%s Extended Trackplan (*.xtce)|*.xtce|All Files "
+"(*)|*"
+msgstr ""
+
+#: ../bin/custom.c:197
+#, c-format
+msgid "All Files (*)|*"
+msgstr ""
+
+#: ../bin/custom.c:202
+#, fuzzy, c-format
+msgid "%s Import Files (*.xti)|*.xti"
+msgstr "%s importar arquivos|*.%sti"
+
+#: ../bin/custom.c:207
+#, fuzzy
+msgid "Data Exchange Format Files (*.dxf)|*.dxf"
+msgstr "Arquivos Data Exchange Format|*.dxf"
+
+#: ../bin/custom.c:211
+#, fuzzy, c-format
+msgid "%s Record Files (*.xtr)|*.xtr"
+msgstr "%s Arquivos de registro|*.%str"
+
+#: ../bin/custom.c:216
+#, fuzzy, c-format
+msgid "%s Note Files (*.not)|*.not"
+msgstr "%s Arquivos de notas|*.not"
+
+#: ../bin/custom.c:221
+#, fuzzy, c-format
+msgid "%s Log Files (*.log)|*.log"
+msgstr "%s Arquivos de Log|*.log"
+
+#: ../bin/custom.c:226
+#, fuzzy, c-format
+msgid "%s PartsList Files (*.txt)|*.txt"
+msgstr "%s Arquivos de Material|*.txt"
+
+#: ../bin/dbench.c:43
+msgid " L-Girder"
+msgstr " Viga mestra em L"
+
+#: ../bin/dbench.c:43
+msgid " T-Girder"
+msgstr "Viga mestra em T"
+
+#: ../bin/dbench.c:66
+msgid "On Edge"
+msgstr "À borda"
+
+#: ../bin/dbench.c:67
+msgid "Flat"
+msgstr "Plano"
+
+#: ../bin/dbench.c:71
+msgid "Left-Down"
+msgstr "Abaixo à esquerda"
+
+#: ../bin/dbench.c:72
+msgid "Right-Down"
+msgstr "Abaixo à direita"
+
+#: ../bin/dbench.c:73
+msgid "Left-Up"
+msgstr "Acima à esquerda"
+
+#: ../bin/dbench.c:74
+msgid "Right-Up"
+msgstr "Acima à direita"
+
+#: ../bin/dbench.c:75
+msgid "Left-Inverted"
+msgstr "Esquerdo invertido"
+
+#: ../bin/dbench.c:76
+msgid "Right-Inverted"
+msgstr "Direito invertido"
+
+#: ../bin/dbench.c:81
+msgid "Inverted"
+msgstr "Invertido"
+
+#: ../bin/dbench.c:147
+#, c-format
+msgid ""
+"Bad BenchType for %s:\n"
+"%s"
+msgstr ""
+"Tipo de bancada não apropriada para %s:\n"
+"%s"
+
+#: ../bin/dbitmap.c:102 ../bin/dbitmap.c:106
+msgid "Drawn with "
+msgstr "Desenhado com "
+
+#: ../bin/dbitmap.c:116
+msgid "Drawing tracks to BitMap"
+msgstr "Desenhando layout em bitmap"
+
+#: ../bin/dbitmap.c:123
+msgid "Writing BitMap to file"
+msgstr "Gravando bitmap em arquivo"
+
+#: ../bin/dbitmap.c:144
+msgid "Print Titles"
+msgstr "Imprimir títulos"
+
+#: ../bin/dbitmap.c:144
+msgid "Print Borders"
+msgstr "Imprimir bordas"
+
+#: ../bin/dbitmap.c:145
+msgid "Print Centerline"
+msgstr "Imprimir linha central"
+
+# São realmente necessários os espaços no texto?
+#: ../bin/dbitmap.c:152
+msgid " dpi"
+msgstr " PPP (pontos por polegada)"
+
+#: ../bin/dbitmap.c:154
+msgid "Bitmap : 99999 by 99999 pixels"
+msgstr "Bitmap : 99999 por 99999 pixels"
+
+#: ../bin/dbitmap.c:156
+msgid "Approximate file size: 999.9Mb"
+msgstr "Tamanho aproximado do arquivo: 999.9 Mb"
+
+#: ../bin/dbitmap.c:186
+#, c-format
+msgid "Bitmap : %ld by %ld pixels"
+msgstr "Bitmap : %ld por %ld pixels"
+
+#: ../bin/dbitmap.c:190
+#, c-format
+msgid "Approximate file size : %0.0f"
+msgstr "Tamanho aproximado do arquivo : %0.0f"
+
+#: ../bin/dbitmap.c:192
+#, c-format
+msgid "Approximate file size : %0.1fKb"
+msgstr "Tamanho aproximado do arquivo : %0.1f Kb"
+
+#: ../bin/dbitmap.c:194
+#, c-format
+msgid "Approximate file size : %0.1fMb"
+msgstr "Tamanho aproximado do arquivo : %0.1f Mb"
+
+#: ../bin/dbitmap.c:213
+msgid "Save Bitmap"
+msgstr "Gravar bitmap"
+
+#: ../bin/dbitmap.c:217
+#, fuzzy
+msgid "Bitmap files (*.png)|*.png"
+msgstr "Arquivos bitmap:*.bmp"
+
+#: ../bin/dbitmap.c:238
+msgid "BitMap"
+msgstr "Bitmap"
+
+#: ../bin/dcar.c:54
+msgid "Truck"
+msgstr "Truque"
+
+#: ../bin/dcar.c:54
+msgid "Body"
+msgstr "Carcaça"
+
+#: ../bin/dcar.c:156 ../bin/dcar.c:2702 ../bin/dcar.c:2706
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: ../bin/dcar.c:478
+msgid "Diesel Loco"
+msgstr "Locomotiva à diesel"
+
+#: ../bin/dcar.c:479
+msgid "Steam Loco"
+msgstr "Locomotiva à vapor"
+
+#: ../bin/dcar.c:480
+msgid "Elect Loco"
+msgstr "Locomotiva elétrica"
+
+#: ../bin/dcar.c:481
+msgid "Freight Car"
+msgstr "Vagão de carga"
+
+#: ../bin/dcar.c:482
+msgid "Psngr Car"
+msgstr "Vagão de passageiro"
+
+#: ../bin/dcar.c:483
+msgid "M-O-W"
+msgstr "Carros de manutenção de linha"
+
+#: ../bin/dcar.c:484
+msgid "Other"
+msgstr "Outros"
+
+#: ../bin/dcar.c:1183 ../bin/dcar.c:5078
+msgid "N/A"
+msgstr "N/A"
+
+#: ../bin/dcar.c:1184 ../bin/dcar.c:5083
+msgid "Mint"
+msgstr "Perfeito"
+
+#: ../bin/dcar.c:1185 ../bin/dcar.c:5082
+msgid "Excellent"
+msgstr "Excelente"
+
+#: ../bin/dcar.c:1186 ../bin/dcar.c:5081
+msgid "Good"
+msgstr "Bom"
+
+#: ../bin/dcar.c:1187 ../bin/dcar.c:5080
+msgid "Fair"
+msgstr "Médio"
+
+#: ../bin/dcar.c:1188 ../bin/dcar.c:5079
+msgid "Poor"
+msgstr "Regular"
+
+#: ../bin/dcar.c:1502 ../bin/dpricels.c:45
+#: ../../../../build/work/app/bin/bllnhlp.c:440
+msgid "Item"
+msgstr "Item"
+
+#: ../bin/dcar.c:2174 ../wlib/gtklib/notice.c:96 ../wlib/mswlib/mswmisc.c:2097
+msgid "Information"
+msgstr "Informação"
+
+#: ../bin/dcar.c:2174
+msgid "Customize"
+msgstr "Personalização"
+
+#: ../bin/dcar.c:2186
+msgid "Sequential"
+msgstr "Sequencial"
+
+#: ../bin/dcar.c:2186
+msgid "Repeated"
+msgstr "Repetido"
+
+#: ../bin/dcar.c:2197 ../bin/dcar.c:2199 ../bin/dcar.c:5408
+msgid "Prototype"
+msgstr "Protótipo"
+
+#: ../bin/dcar.c:2205
+msgid "Part"
+msgstr "Parte"
+
+#: ../bin/dcar.c:2207 ../../../../build/work/app/bin/bllnhlp.c:372
+#: ../../../../build/work/app/bin/bllnhlp.c:568
+#: ../../../../build/work/app/bin/bllnhlp.c:569
+msgid "Part Number"
+msgstr "Número da parte"
+
+#: ../bin/dcar.c:2209
+msgid "Loco?"
+msgstr "Locomotiva?"
+
+#: ../bin/dcar.c:2213 ../bin/dcar.c:4405
+msgid "Import"
+msgstr "Importar"
+
+#: ../bin/dcar.c:2220
+msgid "Mode"
+msgstr "Modo"
+
+#: ../bin/dcar.c:2224
+msgid "Road"
+msgstr "Companhia"
+
+#: ../bin/dcar.c:2226
+msgid "Reporting Mark"
+msgstr "Abreviatura"
+
+#: ../bin/dcar.c:2228
+msgid "Number"
+msgstr "Número"
+
+#: ../bin/dcar.c:2232
+msgid "Car Length"
+msgstr "Comprimento do material rodante"
+
+#: ../bin/dcar.c:2236
+msgid "Truck Centers"
+msgstr "Centro dos truques"
+
+#: ../bin/dcar.c:2240
+msgid "Coupler Mount"
+msgstr "Engate"
+
+#: ../bin/dcar.c:2242
+msgid "Coupled Length"
+msgstr "Comprimento engatado"
+
+#: ../bin/dcar.c:2244 ../bin/dcar.c:4252
+msgid "Coupler Length"
+msgstr "Comprimento do engate"
+
+#: ../bin/dcar.c:2252
+msgid "Purchase Price"
+msgstr "Preço de compra"
+
+#: ../bin/dcar.c:2254 ../../../../build/work/app/bin/bllnhlp.c:236
+msgid "Current Price"
+msgstr "Preço atual"
+
+#: ../bin/dcar.c:2256 ../bin/dcar.c:4369 ../bin/dcar.c:4374
+msgid "Condition"
+msgstr "Condição"
+
+#: ../bin/dcar.c:2258
+msgid "Purchase Date"
+msgstr "Data de compra"
+
+#: ../bin/dcar.c:2260 ../bin/dcar.c:4374
+msgid "Service Date"
+msgstr "Data do serviço"
+
+#: ../bin/dcar.c:2262
+msgid "Quantity"
+msgstr "Quantidade"
+
+#: ../bin/dcar.c:2264
+msgid "Numbers"
+msgstr "Números"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:371
+#: ../bin/dcar.c:2266 ../bin/dcar.c:4370 ../bin/trknote.c:708
+#: ../../../../build/work/app/i18n/custmsg.h:1265
+msgid "Notes"
+msgstr "Notas"
+
+#: ../bin/dcar.c:2273
+msgid "Car Part"
+msgstr "Parte do material rodante"
+
+#: ../bin/dcar.c:2274 ../../../../build/work/app/bin/bllnhlp.c:210
+#: ../../../../build/work/app/bin/bllnhlp.c:211
+msgid "Car Prototype"
+msgstr "Protótipo do material rodante"
+
+#: ../bin/dcar.c:2636 ../bin/dcar.c:2953
+msgid "Undecorated"
+msgstr "Sem pintura"
+
+#: ../bin/dcar.c:2694 ../bin/dcar.c:2698 ../bin/paramfilelist.c:376
+msgid "Custom"
+msgstr "Personalizado"
+
+#: ../bin/dcar.c:2863
+msgid "Undecorated "
+msgstr "Sem pintura "
+
+#: ../bin/dcar.c:3085
+#, c-format
+msgid "New %s Scale Car"
+msgstr "Novo material rodante na escala %s"
+
+#: ../bin/dcar.c:3086 ../bin/dcar.c:3095 ../bin/dcar.c:3104 ../bin/dcar.c:4285
+#: ../bin/dcar.c:4401 ../bin/paramfilesearch_ui.c:74
+msgid "Add"
+msgstr "Adicionar"
+
+#: ../bin/dcar.c:3088
+#, c-format
+msgid "Update %s Scale Car"
+msgstr "Atualizar material rodante na escala %s"
+
+#: ../bin/dcar.c:3089 ../bin/dcar.c:3098 ../bin/dcar.c:3107
+#: ../bin/dcmpnd.c:173
+msgid "Update"
+msgstr "Atualizar"
+
+#: ../bin/dcar.c:3094
+#, c-format
+msgid "New %s Scale Car Part"
+msgstr "Novo material rodante na escala %s"
+
+#: ../bin/dcar.c:3097
+#, c-format
+msgid "Update %s Scale Car Part"
+msgstr "Atualizar material rodante na escala %s"
+
+#: ../bin/dcar.c:3103
+msgid "New Prototype"
+msgstr "Novo protótipo"
+
+#: ../bin/dcar.c:3106
+msgid "Update Prototype"
+msgstr "Atualizar protótipo"
+
+#: ../bin/dcar.c:3778
+msgid "Enter a 8 digit numeric date"
+msgstr "Digitar uma data de 8 dígitos numéricos"
+
+#: ../bin/dcar.c:3781
+msgid "Enter a 8 digit date"
+msgstr "Digitar uma data de 8 dígitos"
+
+#: ../bin/dcar.c:3783
+msgid "Enter a date between 19000101 and 21991231"
+msgstr "Digitar uma data entre 19000101 e 21991231"
+
+#: ../bin/dcar.c:3788
+msgid "Invalid month"
+msgstr "Mês inválido"
+
+#: ../bin/dcar.c:3790
+msgid "Invalid day"
+msgstr "Dia inválido"
+
+#: ../bin/dcar.c:3882
+msgid "Enter a Prototype name"
+msgstr "Digitar um nome para o protótipo"
+
+#: ../bin/dcar.c:3884
+msgid "Select or Enter a Manufacturer"
+msgstr "Selecionar ou digitar o fabricante"
+
+#: ../bin/dcar.c:3886
+msgid "Enter a Part Number"
+msgstr "Digitar o número do item"
+
+#: ../bin/dcar.c:3888
+msgid "Enter the Car Length"
+msgstr "Digitar o comprimento do material rodante"
+
+#: ../bin/dcar.c:3890
+msgid "Enter the Car Width"
+msgstr "Digitar a largura do material rodante"
+
+#: ../bin/dcar.c:3892
+msgid "Enter the Truck Centers"
+msgstr "Digitar o centro dos truques"
+
+#: ../bin/dcar.c:3894
+#, fuzzy
+msgid "Truck Center Offset must be greater than 0 or 0"
+msgstr ""
+"O centro dos truques devem ser menores que o comprimento do material rodante"
+
+#: ../bin/dcar.c:3896
+msgid "Truck Centers must be less than Car Length"
+msgstr ""
+"O centro dos truques devem ser menores que o comprimento do material rodante"
+
+#: ../bin/dcar.c:3898
+#, fuzzy
+msgid "Truck Center Offset plus Truck Centers must be less than Car Length"
+msgstr ""
+"O centro dos truques devem ser menores que o comprimento do material rodante"
+
+#: ../bin/dcar.c:3900
+msgid "Enter the Coupled Length or Coupler Length"
+msgstr "Digitar o comprimento engatado ou o comprimento do engate"
+
+#: ../bin/dcar.c:3902
+msgid "Enter the Coupled Length"
+msgstr "Digitar o comprimento engatado"
+
+#: ../bin/dcar.c:3904
+msgid "Enter a item Index"
+msgstr "Digitar um índice para o item"
+
+#: ../bin/dcar.c:3906
+msgid "Purchase Price is not valid"
+msgstr "Preço de compra inválido"
+
+#: ../bin/dcar.c:3908
+msgid "Current Price is not valid"
+msgstr "Preço atual inválido"
+
+#: ../bin/dcar.c:3910
+msgid "Purchase Date is not valid"
+msgstr "Data de compra inválida"
+
+#: ../bin/dcar.c:3912
+msgid "Service Date is not valid"
+msgstr "Data de serviço inválida"
+
+#: ../bin/dcar.c:3915
+#, c-format
+msgid "Item Index %ld duplicated an existing item: updated to new value"
+msgstr "Índice do item %ld já existente. Atualizado para um novo valor"
+
+#: ../bin/dcar.c:4111
+#, c-format
+msgid "Added %ld new Cars"
+msgstr "%ld novos materiais rodantes adicionados"
+
+#: ../bin/dcar.c:4113
+msgid "Added new Car"
+msgstr "Adicionar novo material rodante"
+
+#: ../bin/dcar.c:4116
+msgid "Updated Car"
+msgstr "Atualizar material rodante"
+
+#: ../bin/dcar.c:4119
+msgid " and Part"
+msgstr " e item"
+
+#: ../bin/dcar.c:4146
+#, c-format
+msgid "%s Part: %s %s %s %s %s %s"
+msgstr "Item %s: %s %s %s %s %s %s"
+
+#: ../bin/dcar.c:4146 ../bin/dcar.c:4163
+msgid "Added new"
+msgstr "Adicionado um novo"
+
+#: ../bin/dcar.c:4146 ../bin/dcar.c:4163
+msgid "Updated"
+msgstr "Atualizado"
+
+#: ../bin/dcar.c:4162
+#, c-format
+msgid "%s Prototype: %s%s."
+msgstr "Protótipo %s: %s%s."
+
+#: ../bin/dcar.c:4164
+msgid ". Enter new values or press Close"
+msgstr ". Digitar novos valores ou clicar em \"Fechar\""
+
+#: ../bin/dcar.c:4285
+msgid "New Car Part"
+msgstr "Novo item de material rodante"
+
+#: ../bin/dcar.c:4368 ../bin/dcar.c:4373
+#: ../../../../build/work/app/bin/bllnhlp.c:410
+msgid "Roadname"
+msgstr "Ferrovia"
+
+#: ../bin/dcar.c:4368
+msgid "Purc Price"
+msgstr "Preço de compra"
+
+#: ../bin/dcar.c:4369 ../bin/dcar.c:4374
+msgid "Curr Price"
+msgstr "Preço atual"
+
+#: ../bin/dcar.c:4369
+msgid "Purc Date"
+msgstr "Data de compra"
+
+#: ../bin/dcar.c:4369
+msgid "Srvc Date"
+msgstr "Data de serviço"
+
+#: ../bin/dcar.c:4370
+msgid "Locat'n"
+msgstr "Localização"
+
+#: ../bin/dcar.c:4373
+msgid "RepMarks"
+msgstr "Abreviaturas"
+
+#: ../bin/dcar.c:4373
+msgid "Purch Price"
+msgstr "Preço de compra"
+
+#: ../bin/dcar.c:4374
+msgid "Purch Date"
+msgstr "Data de compra"
+
+#: ../bin/dcar.c:4391
+msgid "Sort By"
+msgstr "Ordenado por"
+
+#: ../bin/dcar.c:4399 ../bin/dcontmgm.c:99 ../bin/dcustmgm.c:71
+#: ../bin/dcustmgm.c:108
+msgid "Edit"
+msgstr "Editar"
+
+#: ../bin/dcar.c:4403 ../bin/dcontmgm.c:101 ../bin/dcustmgm.c:73
+#: ../bin/misc.c:2242
+msgid "Delete"
+msgstr "Apagar"
+
+#: ../bin/dcar.c:4407 ../bin/fileio.c:1517
+msgid "Export"
+msgstr "Exportar"
+
+#: ../bin/dcar.c:4409 ../../../../build/work/app/bin/bllnhlp.c:585
+msgid "List"
+msgstr "Listar"
+
+#: ../bin/dcar.c:4520 ../bin/dcar.c:5257 ../bin/misc.c:2618
+msgid "Car Inventory"
+msgstr "Invetário de material rodante"
+
+#: ../bin/dcar.c:4640
+msgid "List Cars"
+msgstr "Listar material rodante"
+
+#: ../bin/dcar.c:4764 ../bin/dcar.c:4929
+msgid "Import Cars"
+msgstr "Importar material rodante"
+
+#: ../bin/dcar.c:4930 ../bin/dcar.c:5053
+#, fuzzy
+msgid "Comma-Separated-Values (*.csv)|*.csv"
+msgstr "Valores separados por vírgulas|*.csv"
+
+#: ../bin/dcar.c:5000 ../bin/dcar.c:5052
+msgid "Export Cars"
+msgstr "Exportar material rodante"
+
+#: ../bin/dcar.c:5086
+msgid "Layout"
+msgstr "Layout"
+
+#: ../bin/dcar.c:5088
+msgid "Shelf"
+msgstr "Prateleira"
+
+#: ../bin/dcmpnd.c:77 ../bin/dlayer.c:499 ../bin/misc.c:613 ../bin/misc.c:645
+msgid "Load"
+msgstr "Carregar"
+
+#: ../bin/dcmpnd.c:110
+msgid "Updating definitions, please wait"
+msgstr "Atualizando definições. Aguardar, por favor"
+
+#: ../bin/dcmpnd.c:173
+msgid "Update Title"
+msgstr "Atualizar título"
+
+#: ../bin/dcmpnd.c:233
+#, c-format
+msgid "End-Point #%d of the selected and actual turnouts are not close"
+msgstr "Extremidade No.%d dos AMVs selecionado e corrente não estão próximos"
+
+#: ../bin/dcmpnd.c:242
+#, c-format
+msgid "End-Point #%d of the selected and actual turnouts are not aligned"
+msgstr "Extremidade No.%d dos AMVs selecionado e corrente não estão próximos"
+
+#: ../bin/dcmpnd.c:261
+msgid "The selected Turnout had a differing number of End-Points"
+msgstr "O AMV selecionado tem um número diferente de extremidades"
+
+#: ../bin/dcmpnd.c:327
+msgid "Skip"
+msgstr "Próximo"
+
+#: ../bin/dcmpnd.c:359
+#, c-format
+msgid "%d Track(s) refreshed"
+msgstr "%d trilho(s) redesenhado(s)"
+
+#: ../bin/dcmpnd.c:399
+msgid "Refresh Turnout/Structure"
+msgstr "Atualizar AMV/estrutura"
+
+#: ../bin/dcmpnd.c:401
+msgid "Choose a Turnout/Structure to replace:"
+msgstr "Escolher um AMV/estrutura para substituir:"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:341
+#: ../bin/dcmpnd.c:411 ../bin/doption.c:132
+#: ../../../../build/work/app/i18n/custmsg.h:1205
+msgid "Turnouts"
+msgstr "AMVs"
+
+#: ../bin/dcmpnd.c:411
+msgid "Structures"
+msgstr "Estruturas"
+
+#: ../bin/dcmpnd.c:440
+msgid "Choose another Turnout/Structure to replace:"
+msgstr "Escolher um(a) outro(a) AMV/estrutura para substituir:"
+
+#: ../bin/dcmpnd.c:542
+msgid "Rename Object"
+msgstr "Renomear objeto"
+
+#: ../bin/dcontmgm.c:92
+msgid "Tracks"
+msgstr "Trilhos"
+
+#: ../bin/dcontmgm.c:173
+#, c-format
+msgid "Are you sure you want to delete the %d control element(s)"
+msgstr ""
+
+#: ../bin/dcontmgm.c:176
+#, fuzzy
+msgid "Control Elements"
+msgstr "Elementos de controle de layout"
+
+#: ../bin/dcontmgm.c:299
+#, fuzzy
+msgid "Manage Layout Control Elements"
+msgstr "Elementos de controle de layout"
+
+#: ../bin/dcustmgm.c:67
+#, fuzzy
+msgid "Create a new "
+msgstr "Cria uma linha poligonal"
+
+#: ../bin/dcustmgm.c:69
+#, fuzzy
+msgid "Go"
+msgstr "Dourado"
+
+#: ../bin/dcustmgm.c:75
+msgid "Move To"
+msgstr "Mover para"
+
+#: ../bin/dcustmgm.c:108
+msgid "Rename"
+msgstr "Renomear"
+
+#: ../bin/dcustmgm.c:189
+msgid "Label"
+msgstr "Etiqueta"
+
+#: ../bin/dcustmgm.c:227
+msgid "Contents Label"
+msgstr "Texto da etiqueta"
+
+#: ../bin/dcustmgm.c:283
+msgid "Move To XTP"
+msgstr "Mover para arquivo de parâmetros"
+
+#: ../bin/dcustmgm.c:284
+#, fuzzy
+msgid "Parameter File (*.xtp)|*.xtp"
+msgstr "Arquivo de parâmetros|*.xtp"
+
+#: ../bin/dcustmgm.c:395
+#, fuzzy
+msgid "Manage custom designed parts"
+msgstr "Manipula entradas do editor personalizado"
+
+#: ../bin/dease.c:67
+msgid "Sharp"
+msgstr "Agudo"
+
+#: ../bin/dease.c:67
+msgid "Broad"
+msgstr "Largo"
+
+#: ../bin/dease.c:67
+msgid "Cornu"
+msgstr ""
+
+#: ../bin/dease.c:74
+msgid "Value"
+msgstr "Valor"
+
+#: ../bin/dease.c:75 ../bin/tease.c:525
+msgid "R"
+msgstr "D"
+
+#: ../bin/dease.c:77 ../bin/tease.c:526
+msgid "L"
+msgstr "E"
+
+#: ../bin/dease.c:242
+msgid "Easement"
+msgstr "Curva de transição"
+
+#: ../bin/denum.c:49
+msgid "Prices"
+msgstr "Preços"
+
+#: ../bin/denum.c:54
+msgid "Save As ..."
+msgstr "Salvar como..."
+
+#: ../bin/denum.c:134 ../bin/denum.c:189 ../bin/denum.c:224
+msgid "Each"
+msgstr "Cada"
+
+#: ../bin/denum.c:148 ../bin/denum.c:149
+msgid "Parts List"
+msgstr "Lista de itens"
+
+#: ../bin/denum.c:154
+#, c-format
+msgid ""
+"%s Parts List\n"
+"\n"
+msgstr ""
+"Lista de itens %s\n"
+"\n"
+
+#: ../bin/denum.c:189 ../bin/denum.c:226 ../bin/denum.c:235
+msgid "Extended"
+msgstr "Subtotal"
+
+#: ../bin/denum.c:235 ../bin/denum.c:238
+msgid "Total"
+msgstr "Total"
+
+#: ../bin/dlayer.c:487
+#, fuzzy
+msgid "Use Color"
+msgstr "Cor %s"
+
+#: ../bin/dlayer.c:489
+msgid "Visible"
+msgstr "Visível"
+
+#: ../bin/dlayer.c:491
+msgid "Frozen"
+msgstr "Congelado"
+
+#: ../bin/dlayer.c:493
+msgid "On Map"
+msgstr "No mapa"
+
+#: ../bin/dlayer.c:495
+#, fuzzy
+msgid "Module"
+msgstr "Modo"
+
+#: ../bin/dlayer.c:498
+msgid "Personal Preferences"
+msgstr "Preferências pessoais"
+
+#: ../bin/dlayer.c:500 ../bin/macro.c:1419
+msgid "Save"
+msgstr "Salvar"
+
+#: ../bin/dlayer.c:501
+msgid "Defaults"
+msgstr "Valores iniciais"
+
+#: ../bin/dlayer.c:502
+msgid "Number of Layer Buttons"
+msgstr "Número de botões de camadas"
+
+#: ../bin/dlayer.c:519 ../bin/dlayer.c:987 ../bin/dlayer.c:1000
+#: ../bin/dlayer.c:1051
+msgid "Main"
+msgstr "Principal"
+
+#: ../bin/dlayer.c:632 ../bin/dlayer.c:925 ../bin/dlayer.c:1003
+#: ../bin/dlayer.c:1053 ../bin/dlayer.c:1303
+msgid "Show/Hide Layer"
+msgstr "Mostrar/Ocultar camada"
+
+#: ../bin/dlayer.c:1124
+msgid "Layers"
+msgstr "Camadas"
+
+#: ../bin/doption.c:95
+msgid "Turning off AutoSave"
+msgstr ""
+
+#: ../bin/doption.c:104
+#, fuzzy
+msgid "Turning on CheckPointing"
+msgstr "Salvando arquivo temporário."
+
+#: ../bin/doption.c:130
+msgid "Auto Pan"
+msgstr "Auto panorâmico"
+
+#: ../bin/doption.c:132
+msgid "All"
+msgstr "Tudo"
+
+#: ../bin/doption.c:133
+msgid "Thick"
+msgstr ""
+
+#: ../bin/doption.c:133
+#, fuzzy
+msgid "Exception"
+msgstr "Trecho excepcional"
+
+#: ../bin/doption.c:134
+msgid "Outline"
+msgstr "Traçado"
+
+#: ../bin/doption.c:135
+msgid "Off"
+msgstr "Desligado"
+
+#: ../bin/doption.c:135
+msgid "On"
+msgstr "Ligado"
+
+#: ../bin/doption.c:136
+msgid "Track Descriptions"
+msgstr "Descrição dos trilhos"
+
+#: ../bin/doption.c:136
+msgid "Lengths"
+msgstr "Comprimentos"
+
+#: ../bin/doption.c:136
+msgid "EndPt Elevations"
+msgstr "Extremidades das elevações"
+
+#: ../bin/doption.c:136
+msgid "Track Elevations"
+msgstr "Elevações dos trilhos"
+
+#: ../bin/doption.c:136
+msgid "Cars"
+msgstr "Material rodante"
+
+#: ../bin/doption.c:137 ../bin/doption.c:138
+msgid "Descr"
+msgstr "Descrição"
+
+#: ../bin/doption.c:138
+msgid "Manuf"
+msgstr "Fabricante"
+
+#: ../bin/doption.c:139 ../bin/doption.c:140
+#, fuzzy
+msgid "Object"
+msgstr "Renomear objeto"
+
+#: ../bin/doption.c:141
+msgid "Live Map"
+msgstr "Mapa em \"tempo real\""
+
+#: ../bin/doption.c:142
+msgid "Hide Trains On Hidden Track"
+msgstr "Ocultar trens em trecho escondido"
+
+#: ../bin/doption.c:143
+msgid "Constrain Drawing Area to Room boundaries"
+msgstr ""
+
+#: ../bin/doption.c:150
+#, fuzzy
+msgid "Color Track"
+msgstr "Trecho curvo"
+
+#: ../bin/doption.c:151
+#, fuzzy
+msgid "Color Draw"
+msgstr "Cor"
+
+#: ../bin/doption.c:152
+msgid "Draw Tunnel"
+msgstr "Desenhar túnel"
+
+#: ../bin/doption.c:153
+msgid "Draw EndPts"
+msgstr "Desenhar extremidades"
+
+#: ../bin/doption.c:154
+#, fuzzy
+msgid "Draw Unconnected EndPts"
+msgstr "Desenhar extremidades"
+
+#: ../bin/doption.c:155
+msgid "Draw Ties"
+msgstr "Desenhar dormentes"
+
+#: ../bin/doption.c:156
+#, fuzzy
+msgid "Draw Centers"
+msgstr "Arrastar ao centro"
+
+#: ../bin/doption.c:157
+msgid "Two Rail Scale"
+msgstr "Escala de duas linhas"
+
+#: ../bin/doption.c:158
+msgid "Map Scale"
+msgstr "Mapa da escala"
+
+#: ../bin/doption.c:162
+msgid "Label Enable"
+msgstr "Etiqueta disponível"
+
+#: ../bin/doption.c:163
+msgid "Label Scale"
+msgstr "Etiqueta de escala"
+
+#: ../bin/doption.c:164
+msgid "Label Font Size"
+msgstr "Etiqueta do tamanho da fonte"
+
+#: ../bin/doption.c:165
+msgid "Hot Bar Labels"
+msgstr "Etiquetas do barra de itens"
+
+#: ../bin/doption.c:166
+msgid "Layout Labels"
+msgstr "Etiquetas do layout"
+
+#: ../bin/doption.c:167
+msgid "List Labels"
+msgstr "Etiquetas das listas"
+
+#: ../bin/doption.c:170
+msgid "Car Labels"
+msgstr "Etiquetas do material rodante"
+
+#: ../bin/doption.c:171
+msgid "Train Update Delay"
+msgstr "Tempo de atualização do trem"
+
+#: ../bin/doption.c:199
+msgid "Display Options"
+msgstr "Opções de tela"
+
+#: ../bin/doption.c:200
+msgid "Proto"
+msgstr "Protótipo"
+
+#: ../bin/doption.c:201
+msgid "Proto/Manuf"
+msgstr "Protótipo / fabricante"
+
+#: ../bin/doption.c:202
+msgid "Proto/Manuf/Part Number"
+msgstr "Protótipo / fabricante / número do item"
+
+#: ../bin/doption.c:203
+msgid "Proto/Manuf/Partno/Item"
+msgstr "Protótipo / fabricante / número do item / item"
+
+#: ../bin/doption.c:204
+msgid "Manuf/Proto"
+msgstr "Fabricante / protótipo"
+
+#: ../bin/doption.c:205
+msgid "Manuf/Proto/Part Number"
+msgstr "Fabricante / protótipo / número do item"
+
+#: ../bin/doption.c:206
+msgid "Manuf/Proto/Partno/Item"
+msgstr "Fabricante / protótipo / número do item / item"
+
+#: ../bin/doption.c:236
+msgid "Single item selected, +Ctrl Add to selection"
+msgstr ""
+
+#: ../bin/doption.c:236
+msgid "Add to selection, +Ctrl Single item selected"
+msgstr ""
+
+#: ../bin/doption.c:237
+#, fuzzy
+msgid "Deselect all on select nothing"
+msgstr "Deseleciona todos os objetos"
+
+#: ../bin/doption.c:242
+msgid "Normal: Command List, Shift: Command Options"
+msgstr "Normal: lista de comandos, Shift: opções dos comandos"
+
+#: ../bin/doption.c:242
+msgid "Normal: Command Options, Shift: Command List"
+msgstr "Normal: opções dos comandos, Shift: lista de comandos"
+
+#: ../bin/doption.c:245
+msgid "Default Command"
+msgstr "Comando padrão"
+
+#: ../bin/doption.c:247
+msgid "Hide Selection Window"
+msgstr "Ocultar janela de seleção"
+
+#: ../bin/doption.c:249
+msgid "Right Click"
+msgstr "Clicar com o botão direito"
+
+#: ../bin/doption.c:250
+#, fuzzy
+msgid "Select Mode"
+msgstr "Seleciona objetos"
+
+#: ../bin/doption.c:275
+msgid "Command Options"
+msgstr "Opções de comandos"
+
+#: ../bin/doption.c:298
+msgid "English"
+msgstr "Inglês"
+
+#: ../bin/doption.c:298
+msgid "Metric"
+msgstr "Métrico"
+
+#: ../bin/doption.c:299
+msgid "Polar"
+msgstr "Polar"
+
+#: ../bin/doption.c:299
+msgid "Cartesian"
+msgstr "Cartesiano"
+
+#: ../bin/doption.c:300
+msgid "Balloon Help"
+msgstr "Balão de ajuda"
+
+#: ../bin/doption.c:301
+msgid "Show FlexTrack in HotBar"
+msgstr ""
+
+#: ../bin/doption.c:302
+msgid "Load Last Layout"
+msgstr "Carregar último layout"
+
+#: ../bin/doption.c:302
+msgid "Start New Layout"
+msgstr "Começar um novo layout"
+
+#: ../bin/doption.c:305
+msgid "Angles"
+msgstr "Ângulos"
+
+#: ../bin/doption.c:306
+msgid "Units"
+msgstr "Unidades"
+
+#: ../bin/doption.c:308
+msgid "Length Format"
+msgstr "Formato do comprimento"
+
+#: ../bin/doption.c:309
+msgid "Min Track Length"
+msgstr "Comprimento do trecho mínimo"
+
+#: ../bin/doption.c:310
+msgid "Connection Distance"
+msgstr "Distância de conexão"
+
+#: ../bin/doption.c:311
+msgid "Connection Angle"
+msgstr "Ângulo de conexão"
+
+#: ../bin/doption.c:312
+msgid "Turntable Angle"
+msgstr "Ângulo do girador de locomotivas"
+
+#: ../bin/doption.c:313
+msgid "Max Coupling Speed"
+msgstr "Velocidade máxima de engate"
+
+#: ../bin/doption.c:316
+msgid "Drag Distance"
+msgstr "Distância para arrastar"
+
+#: ../bin/doption.c:317
+msgid "Drag Timeout"
+msgstr "Tempo máximo para arrastar"
+
+#: ../bin/doption.c:318
+msgid "Min Grid Spacing"
+msgstr "Espaço mínimo do gride"
+
+#: ../bin/doption.c:320
+#, fuzzy
+msgid "Check Point Frequency"
+msgstr "Freqüência de salvamento automático."
+
+#: ../bin/doption.c:322
+msgid "Autosave Checkpoint Frequency"
+msgstr ""
+
+#: ../bin/doption.c:323
+msgid "On Program Startup"
+msgstr "Ao iniciar programa"
+
+#: ../bin/doption.c:333 ../bin/doption.c:337 ../bin/doption.c:354
+msgid "999.999"
+msgstr "999,999"
+
+#: ../bin/doption.c:334
+#, fuzzy
+msgid "999.999999"
+msgstr "999,999"
+
+#: ../bin/doption.c:335
+#, fuzzy
+msgid "999.99999"
+msgstr "999,999"
+
+#: ../bin/doption.c:336
+#, fuzzy
+msgid "999.9999"
+msgstr "999,999"
+
+#: ../bin/doption.c:338 ../bin/doption.c:355
+msgid "999.99"
+msgstr "999,99"
+
+#: ../bin/doption.c:339 ../bin/doption.c:356
+msgid "999.9"
+msgstr "999,9"
+
+#: ../bin/doption.c:340
+msgid "999 7/8"
+msgstr "999 7/8"
+
+#: ../bin/doption.c:341
+msgid "999 63/64"
+msgstr "999 63/64"
+
+#: ../bin/doption.c:342
+msgid "999' 11.999\""
+msgstr "999′ 11,999″"
+
+#: ../bin/doption.c:343
+msgid "999' 11.99\""
+msgstr "999′ 11,99″"
+
+#: ../bin/doption.c:344
+msgid "999' 11.9\""
+msgstr "999′ 11,9″"
+
+#: ../bin/doption.c:345
+msgid "999' 11 7/8\""
+msgstr "999′ 11 7/8″"
+
+#: ../bin/doption.c:346
+msgid "999' 11 63/64\""
+msgstr "999′ 11 63/64″"
+
+#: ../bin/doption.c:347
+msgid "999ft 11.999in"
+msgstr "999 ft 11,999 in"
+
+#: ../bin/doption.c:348
+msgid "999ft 11.99in"
+msgstr "999 ft 11,99 in"
+
+#: ../bin/doption.c:349
+msgid "999ft 11.9in"
+msgstr "999 ft 11,9 in"
+
+#: ../bin/doption.c:350
+msgid "999ft 11 7/8in"
+msgstr "999 ft 11 7/8 in"
+
+#: ../bin/doption.c:351
+msgid "999ft 11 63/64in"
+msgstr "999 ft 11 63/64 in"
+
+#: ../bin/doption.c:357
+msgid "999.999mm"
+msgstr "999,999 mm"
+
+#: ../bin/doption.c:358
+msgid "999.99mm"
+msgstr "999,99 mm"
+
+#: ../bin/doption.c:359
+msgid "999.9mm"
+msgstr "999,9 mm"
+
+#: ../bin/doption.c:360
+msgid "999.999cm"
+msgstr "999,999 cm"
+
+#: ../bin/doption.c:361
+msgid "999.99cm"
+msgstr "999,99 cm"
+
+#: ../bin/doption.c:362
+msgid "999.9cm"
+msgstr "999,9 cm"
+
+#: ../bin/doption.c:363
+msgid "999.999m"
+msgstr "999,999 m"
+
+#: ../bin/doption.c:364
+msgid "999.99m"
+msgstr "999,99 m"
+
+#: ../bin/doption.c:365
+msgid "999.9m"
+msgstr "999,9 m"
+
+#: ../bin/doption.c:492
+msgid "Preferences"
+msgstr "Preferências"
+
+#: ../bin/doption.c:531
+msgid "Marker"
+msgstr "Marcador"
+
+#: ../bin/doption.c:532
+msgid "Border"
+msgstr "Borda"
+
+#: ../bin/doption.c:533
+msgid "Primary Axis"
+msgstr "Eixo primário"
+
+#: ../bin/doption.c:534
+msgid "Secondary Axis"
+msgstr "Eixo secundário"
+
+#: ../bin/doption.c:535
+msgid "Normal Track"
+msgstr "Trilho normal"
+
+#: ../bin/doption.c:536
+msgid "Selected Track"
+msgstr "Trilho selecionado"
+
+#: ../bin/doption.c:537
+msgid "Profile Path"
+msgstr "Perfil"
+
+#: ../bin/doption.c:538
+msgid "Exception Track"
+msgstr "Trecho excepcional"
+
+#: ../bin/doption.c:539
+msgid "Track Ties"
+msgstr "Dormentes"
+
+#: ../bin/dpricels.c:45
+msgid "Price"
+msgstr "Preço"
+
+#: ../bin/dpricels.c:59
+msgid "Flex Track"
+msgstr "Trilho flexível"
+
+#: ../bin/dpricels.c:60
+msgid "costs"
+msgstr "Custos"
+
+#: ../bin/dpricels.c:154
+msgid "Price List"
+msgstr "Lista de preços"
+
+#: ../bin/dprmfile.c:73 ../bin/paramfilesearch_ui.c:60
+msgid "Show File Names"
+msgstr "Mostrar nomes dos arquivos"
+
+#: ../bin/dprmfile.c:82 ../bin/paramfilesearch_ui.c:76
+#, fuzzy
+msgid "Select all"
+msgstr "Selecionar &tudo"
+
+#: ../bin/dprmfile.c:84
+msgid "Favorite"
+msgstr ""
+
+#: ../bin/dprmfile.c:87
+msgid "Search Library"
+msgstr ""
+
+#: ../bin/dprmfile.c:88 ../bin/layout.c:471
+msgid "Browse ..."
+msgstr "Pesquisar..."
+
+#: ../bin/dprmfile.c:331
+#, fuzzy, c-format
+msgid "%d parameter files reloaded."
+msgstr "Lendo arquivos de parâmetros"
+
+#: ../bin/dprmfile.c:333
+#, fuzzy
+msgid "One parameter file reloaded."
+msgstr "Lendo arquivos de parâmetros"
+
+#: ../bin/dprmfile.c:434
+msgid "Parameter Files"
+msgstr "Lista de parâmetros"
+
+#: ../bin/dprmfile.c:437 ../bin/paramfilesearch_ui.c:405
+msgid "Load Parameters"
+msgstr "Carregar parâmetros"
+
+#: ../bin/dprmfile.c:437 ../bin/paramfilesearch_ui.c:405
+#, fuzzy
+msgid "Parameter files (*.xtp)|*.xtp"
+msgstr "Arquivos de parâmetros|*.xtp"
+
+#: ../bin/draw.c:2134
+msgid "Macro Zoom Mode"
+msgstr ""
+
+#: ../bin/draw.c:2141
+msgid "Scale 1:1 - Use Ctrl+ to go to Macro Zoom Mode"
+msgstr ""
+
+#: ../bin/draw.c:2145
+msgid "Preset Zoom In Value selected. Shift+Ctrl+PageDwn to reset value"
+msgstr ""
+
+#: ../bin/draw.c:2149
+#, fuzzy, c-format
+msgid "Zoom In Program Value %ld:1, Shift+PageDwn to use"
+msgstr "Aproximar valor do programa %ld:1"
+
+#: ../bin/draw.c:2187
+msgid "At Maximum Zoom Out"
+msgstr ""
+
+#: ../bin/draw.c:2192
+msgid "Preset Zoom Out Value selected. Shift+Ctrl+PageUp to reset value"
+msgstr ""
+
+#: ../bin/draw.c:2196
+#, fuzzy, c-format
+msgid "Zoom Out Program Value %ld:1 set, Shift+PageUp to use"
+msgstr "Afastar valor do programa %ld:1"
+
+#: ../bin/draw.c:2893
+msgid "Map"
+msgstr "Mapa"
+
+#: ../bin/draw.c:2941
+msgid ""
+"Left-Drag to pan, Ctrl+Left-Drag to zoom, 0 to set origin to zero, 1-9 to "
+"zoom#, e to set to extents"
+msgstr ""
+
+#: ../bin/draw.c:2948
+#, fuzzy
+msgid "Pan Mode - drag point to new position"
+msgstr "Posicionar %s e desenhar na posição"
+
+#: ../bin/draw.c:2955
+msgid "Zoom Mode - drag area to zoom"
+msgstr ""
+
+#: ../bin/draw.c:2981
+msgid "Can't move any further in that direction"
+msgstr ""
+
+#: ../bin/draw.c:2983
+msgid "Left click to pan, right click to zoom, 'o' for origin, 'e' for extents"
+msgstr ""
+
+#: ../bin/draw.c:3022
+msgid ""
+"Left Drag to Pan, +CTRL to Zoom, 0 to set Origin to 0,0, 1-9 to Zoom#, e to "
+"set to Extent"
+msgstr ""
+
+#: ../bin/draw.c:3102
+#, fuzzy
+msgid "Pan/Zoom"
+msgstr "&Zoom"
+
+#: ../bin/draw.c:3113
+msgid "Zoom to 1:1 - '1'"
+msgstr ""
+
+#: ../bin/draw.c:3114
+msgid "Zoom to 1:2 - '2'"
+msgstr ""
+
+#: ../bin/draw.c:3115
+msgid "Zoom to 1:3 - '3'"
+msgstr ""
+
+#: ../bin/draw.c:3116
+msgid "Zoom to 1:4 - '4'"
+msgstr ""
+
+#: ../bin/draw.c:3117
+msgid "Zoom to 1:5 - '5'"
+msgstr ""
+
+#: ../bin/draw.c:3118
+msgid "Zoom to 1:6 - '6'"
+msgstr ""
+
+#: ../bin/draw.c:3119
+msgid "Zoom to 1:7 - '7'"
+msgstr ""
+
+#: ../bin/draw.c:3120
+msgid "Zoom to 1:8 - '8'"
+msgstr ""
+
+#: ../bin/draw.c:3121
+msgid "Zoom to 1:9 - '9'"
+msgstr ""
+
+#: ../bin/draw.c:3125
+msgid "Pan center here - 'c'"
+msgstr ""
+
+#: ../bin/drawgeom.c:76 ../bin/drawgeom.c:91
+msgid "Create Lines"
+msgstr "Criar linhas"
+
+#: ../bin/drawgeom.c:291
+msgid "+Shift to lock to nearby objects"
+msgstr ""
+
+#: ../bin/drawgeom.c:293
+msgid "+Shift to not lock to nearby objects"
+msgstr ""
+
+#: ../bin/drawgeom.c:393
+msgid "Drag to next point, +Shift to lock to object, +Ctrl to lock to 90deg"
+msgstr ""
+
+#: ../bin/drawgeom.c:403
+msgid "Drag to place next end point"
+msgstr "Arrastar para posicionar próxima extremidade"
+
+#: ../bin/drawgeom.c:434
+msgid "Drag to set radius"
+msgstr "Arrastar para definir o raio"
+
+#: ../bin/drawgeom.c:447
+msgid "Drag set box size"
+msgstr "Arrastar para ajustar tamanho do retângulo"
+
+#: ../bin/drawgeom.c:488
+msgid "+Shift - lock to close object, +Ctrl - lock to 90 deg"
+msgstr ""
+
+#: ../bin/drawgeom.c:536 ../bin/drawgeom.c:592
+#, c-format
+msgid "Length = %s, Angle = %0.2f"
+msgstr "Comprimento = %s, Ângulo = %0.2f"
+
+# Ajustar software para imprimir virgulas ao invés de pontos decimais.
+#: ../bin/drawgeom.c:613
+#, c-format
+msgid "Straight Line: Length=%s Angle=%0.3f"
+msgstr "Trecho reto: Comprimento=%s Ângulo=%0.3f"
+
+#: ../bin/drawgeom.c:635
+#, c-format
+msgid "Curved Line: Radius=%s Angle=%0.3f Length=%s"
+msgstr "Linha curva: Raio=%s Ângulo=%0.3f Comprimento=%s"
+
+#: ../bin/drawgeom.c:659
+#, c-format
+msgid "Radius = %s"
+msgstr "Raio = %s"
+
+#: ../bin/drawgeom.c:669
+#, c-format
+msgid "Width = %s, Height = %s"
+msgstr "Largura = %s, Altura = %s"
+
+#: ../bin/drawgeom.c:1132
+#, fuzzy
+msgid "Select points or use context menu"
+msgstr "Selecionar posição do ponto"
+
+#: ../bin/drawgeom.c:1387
+#, fuzzy, c-format
+msgid "Length = %s, Last angle = %0.2f"
+msgstr "Comprimento = %s, Ângulo = %0.2f"
+
+#: ../bin/drawgeom.c:1538
+#, fuzzy
+msgid "Point Deleted"
+msgstr "Seleção de fonte"
+
+#: ../bin/drawgeom.c:1934
+#, fuzzy
+msgid "Not close to end of line"
+msgstr "Eleva ou abaixa todos os trechos selecionados"
+
+#: ../bin/drawgeom.c:1987
+msgid "Not close to ends or middle of mine, reselect"
+msgstr ""
+
+#: ../bin/drawgeom.c:2035 ../bin/drawgeom.c:2257
+#, fuzzy
+msgid "Drag to Move Corner Point"
+msgstr "Arrastar à posição da 2ª extremidade"
+
+#: ../bin/drawgeom.c:2042
+#, fuzzy
+msgid "Drag to Move Edge "
+msgstr "Arrastar à borda"
+
+#: ../bin/drawgeom.c:2104
+#, c-format
+msgid "Length = %0.3f Angle = %0.3f"
+msgstr "Comprimento = %0.3f Ângulo = %0.3f"
+
+#: ../bin/drawgeom.c:2252
+#, fuzzy
+msgid "Drag to Move Edge"
+msgstr "Arrastar à borda"
+
+#: ../bin/dxfoutput.c:232
+msgid "Export to DXF"
+msgstr "Exportar para DXF"
+
+#: ../bin/fileio.c:240
+msgid ""
+"\n"
+"Do you want to continue?"
+msgstr ""
+"\n"
+"Continuar?"
+
+# Confirmar se "putTitle: " deve ser retirado do texto.
+#: ../bin/fileio.c:607
+#, c-format
+msgid "putTitle: title too long: %s"
+msgstr "Título muito longo: %s"
+
+#: ../bin/fileio.c:637
+msgid "Unnamed Trackplan"
+msgstr "Trackplan sem nome"
+
+#: ../bin/fileio.c:638
+msgid " (R/O)"
+msgstr ""
+
+#: ../bin/fileio.c:658 ../bin/fileio.c:1277
+msgid "Check Pointing"
+msgstr "Salvando arquivo temporário."
+
+#: ../bin/fileio.c:788
+msgid "Unknown layout file object - skip until next good object?"
+msgstr ""
+
+#: ../bin/fileio.c:1025
+msgid "Track"
+msgstr "Trilho"
+
+#: ../bin/fileio.c:1211
+msgid "Save Tracks"
+msgstr "Salvar layout"
+
+#: ../bin/fileio.c:1227
+#, fuzzy
+msgid "Save Tracks As"
+msgstr "Salvar layout"
+
+#: ../bin/fileio.c:1238
+msgid "Open Tracks"
+msgstr "Abrir layout"
+
+#: ../bin/fileio.c:1252
+#, fuzzy
+msgid "Example Tracks"
+msgstr "Exportar layout"
+
+#: ../bin/fileio.c:1460
+#, fuzzy, c-format
+msgid "Module - %s"
+msgstr "Elev = %s"
+
+#: ../bin/fileio.c:1465 ../bin/fileio.c:1486
+msgid "Import Tracks"
+msgstr "Importar layout"
+
+#: ../bin/fileio.c:1548
+msgid "Export Tracks"
+msgstr "Exportar layout"
+
+#: ../bin/fileio.c:1567
+msgid "Clipboard"
+msgstr "Área de transferência"
+
+#: ../bin/filenoteui.c:62 ../bin/linknoteui.c:50 ../bin/textnoteui.c:42
+#, fuzzy
+msgid "Position X"
+msgstr "Posição"
+
+#: ../bin/filenoteui.c:64 ../bin/linknoteui.c:52 ../bin/textnoteui.c:44
+#, fuzzy
+msgid "Position Y"
+msgstr "Posição"
+
+#: ../bin/filenoteui.c:68 ../bin/linknoteui.c:56
+#, fuzzy
+msgid "Title"
+msgstr "Subtítulo"
+
+# Esse texto possui dois contextos diferentes. Favor alterar software para distingui-los.
+#: ../bin/filenoteui.c:70 ../bin/trknote.c:62
+#: ../../../../build/work/app/bin/bllnhlp.c:85
+#, fuzzy
+msgid "Document"
+msgstr "Posição"
+
+#: ../bin/filenoteui.c:72
+#, fuzzy
+msgid "Select..."
+msgstr "Selecionar"
+
+#: ../bin/filenoteui.c:74 ../bin/linknoteui.c:60
+#, fuzzy
+msgid "Open..."
+msgstr "&Abrir..."
+
+#: ../bin/filenoteui.c:136
+msgid "Add Document"
+msgstr ""
+
+#: ../bin/filenoteui.c:158
+msgid "The file doesn't exist or cannot be read!"
+msgstr ""
+
+#: ../bin/filenoteui.c:297
+#, fuzzy, c-format
+msgid "Document(%d) Layer=%d %-.80s [%s]"
+msgstr "(%d): Camada=%d %s"
+
+#: ../bin/filenoteui.c:309
+#, fuzzy
+msgid "Update document"
+msgstr "Atualizado"
+
+#: ../bin/filenoteui.c:323
+#, fuzzy
+msgid "Describe the file"
+msgstr "Descrição"
+
+#: ../bin/filenoteui.c:329
+msgid "Attach document"
+msgstr ""
+
+# Provavelmente uma mensagem de log que não necessita de tradução.
+#: ../bin/i18n.c:66
+#, c-format
+msgid "Gettext initialized (PACKAGE=%s, LOCALEDIR=%s, LC_ALL=%s).\n"
+msgstr "Gettext iniciado (PACKAGE=%s, LOCALEDIR=%s, LC_ALL=%s).\n"
+
+#: ../bin/layout.c:373
+#, c-format
+msgid "Unable to load Image File - %s"
+msgstr ""
+
+#: ../bin/layout.c:436
+msgid "Load Background"
+msgstr ""
+
+#: ../bin/layout.c:458
+msgid "Room Width"
+msgstr "Largura do cômodo"
+
+#: ../bin/layout.c:459
+msgid " Height"
+msgstr " Comprimento"
+
+#: ../bin/layout.c:460
+msgid "Layout Title"
+msgstr "Título do layout"
+
+#: ../bin/layout.c:461
+msgid "Subtitle"
+msgstr "Subtítulo"
+
+# Seria possível remover os espaços do texto original?
+#: ../bin/layout.c:465
+msgid " Gauge"
+msgstr " Bitola"
+
+#: ../bin/layout.c:467
+msgid "Min Track Radius"
+msgstr "Raio mínimo"
+
+#: ../bin/layout.c:468
+msgid " Max Track Grade (%)"
+msgstr "Inclinação máxima (%)"
+
+#: ../bin/layout.c:470
+#, fuzzy
+msgid "Background File Path"
+msgstr "Perfil"
+
+#: ../bin/layout.c:474
+msgid "Background PosX,Y"
+msgstr ""
+
+#: ../bin/layout.c:478
+msgid "Background Size"
+msgstr ""
+
+#: ../bin/layout.c:480
+msgid "Background Screen %"
+msgstr ""
+
+#: ../bin/layout.c:482
+msgid "Background Angle"
+msgstr ""
+
+#: ../bin/layout.c:560
+msgid "Layout Options"
+msgstr "Opções de layout"
+
+#: ../bin/linknoteui.c:58
+msgid "URL"
+msgstr ""
+
+#: ../bin/linknoteui.c:107
+#, c-format
+msgid ""
+"The entered URL is too long. The maximum allowed length is %d. Please edit "
+"the entered value."
+msgstr ""
+
+#: ../bin/linknoteui.c:110
+#, fuzzy
+msgid "Re-edit"
+msgstr "Resetar"
+
+#: ../bin/linknoteui.c:241
+#, fuzzy
+msgid "Update link"
+msgstr "Atualizar"
+
+#: ../bin/linknoteui.c:259
+#, fuzzy
+msgid "Create link"
+msgstr "Criar Bloco"
+
+#: ../bin/macro.c:95
+msgid "Message"
+msgstr "Mensagem"
+
+#: ../bin/macro.c:179
+msgid "Recording"
+msgstr "Gravando"
+
+# "Próximo passo"? Provavelmente temos o mesmo texto sendo utilizado para dois contextos diferentes: playback e demo.
+#: ../bin/macro.c:214
+msgid "End of Playback. Hit Step to exit\n"
+msgstr "Fim da gravação. Teclar \"Próximo passo\" para sair\n"
+
+#: ../bin/macro.c:278
+msgid "Record"
+msgstr "Gravar"
+
+#: ../bin/macro.c:676
+msgid "Step"
+msgstr "Próximo passo"
+
+#: ../bin/macro.c:679 ../bin/macro.c:1542
+msgid "Next"
+msgstr "Próxima demonstração"
+
+#: ../bin/macro.c:682 ../bin/misc.c:699 ../bin/track.c:1116
+msgid "Quit"
+msgstr "Sair"
+
+#: ../bin/macro.c:685 ../../../../build/work/app/bin/bllnhlp.c:540
+msgid "Speed"
+msgstr "Velocidade"
+
+#: ../bin/macro.c:832 ../bin/macro.c:877
+msgid "Regression"
+msgstr ""
+
+#: ../bin/macro.c:1043 ../bin/macro.c:1401
+msgid "Demo"
+msgstr "Demonstração"
+
+#: ../bin/macro.c:1221
+#, c-format
+msgid "Elapsed time %lu\n"
+msgstr "Tempo percorrido %lu\n"
+
+#: ../bin/macro.c:1322
+msgid "Playback"
+msgstr "Playback"
+
+#: ../bin/macro.c:1404
+msgid "Slowest"
+msgstr "Mínimo"
+
+#: ../bin/macro.c:1405
+msgid "Slow"
+msgstr "Devagar"
+
+#: ../bin/macro.c:1407
+msgid "Fast"
+msgstr "Rápido"
+
+#: ../bin/macro.c:1408
+msgid "Faster"
+msgstr "Mais rápido"
+
+#: ../bin/macro.c:1409
+msgid "Fastest"
+msgstr "Máximo"
+
+#: ../bin/macro.c:1527
+msgid "Can not find PARAMETER playback proc"
+msgstr "Não pôde encontrar PARÂMETRO do procedimento de playback"
+
+#: ../bin/misc.c:169
+msgid "No Messages"
+msgstr "Nenhuma mensagem"
+
+#: ../bin/misc.c:431 ../bin/misc.c:434
+msgid "ABORT"
+msgstr "ABORTAR"
+
+#: ../bin/misc.c:433
+msgid ""
+"\n"
+"Do you want to save your layout?"
+msgstr ""
+"\n"
+"Salvar layout?"
+
+#: ../bin/misc.c:480
+#, c-format
+msgid "No help for %s"
+msgstr "Ajuda inexistente para %s"
+
+#: ../bin/misc.c:592
+msgid ""
+"Save changes to the layout design before closing?\n"
+"\n"
+"If you don't save now, your unsaved changes will be discarded."
+msgstr ""
+"Salvar alterações no projeto do layout antes de fechar?\n"
+"\n"
+"Se não salvar neste momento, suas alterações serão perdidas."
+
+#: ../bin/misc.c:594 ../bin/misc.c:2291
+msgid "&Save"
+msgstr "&Salvar"
+
+#: ../bin/misc.c:594 ../bin/misc.c:629
+msgid "&Cancel"
+msgstr "&Anular"
+
+#: ../bin/misc.c:594
+msgid "&Don't Save"
+msgstr "&Não salvar"
+
+#: ../bin/misc.c:618
+msgid "examples"
+msgstr ""
+
+#: ../bin/misc.c:627
+msgid ""
+"Do you want to return to the last saved state?\n"
+"\n"
+"Revert will cause all changes done since last save to be lost."
+msgstr ""
+"Retornar ao último estado salvo?\n"
+"\n"
+"Revert will cause all changes done since last save to be lost."
+
+#: ../bin/misc.c:629
+msgid "&Revert"
+msgstr "&Reverter"
+
+#: ../bin/misc.c:851
+msgid "XTrackCAD Font"
+msgstr "Fonte XTrackCAD"
+
+#: ../bin/misc.c:912
+#, c-format
+msgid "No balloon help for %s\n"
+msgstr "Nenhum balão de ajuda para %s\n"
+
+#: ../bin/misc.c:914 ../../../../build/work/app/bin/bllnhlp.c:603
+#: ../../../../build/work/app/bin/bllnhlp.c:604
+#: ../../../../build/work/app/bin/bllnhlp.c:606
+#: ../../../../build/work/app/bin/bllnhlp.c:607
+#: ../../../../build/work/app/bin/bllnhlp.c:609
+#: ../../../../build/work/app/bin/bllnhlp.c:610
+#: ../../../../build/work/app/bin/bllnhlp.c:611
+#: ../../../../build/work/app/bin/bllnhlp.c:612
+#: ../../../../build/work/app/bin/bllnhlp.c:613
+#: ../../../../build/work/app/bin/bllnhlp.c:614
+#: ../../../../build/work/app/bin/bllnhlp.c:615
+#: ../../../../build/work/app/bin/bllnhlp.c:616
+#: ../../../../build/work/app/bin/bllnhlp.c:617
+#: ../../../../build/work/app/bin/bllnhlp.c:618
+#: ../../../../build/work/app/bin/bllnhlp.c:619
+#: ../../../../build/work/app/bin/bllnhlp.c:620
+#: ../../../../build/work/app/bin/bllnhlp.c:621
+#: ../../../../build/work/app/bin/bllnhlp.c:622
+#: ../../../../build/work/app/bin/bllnhlp.c:623
+#: ../../../../build/work/app/bin/bllnhlp.c:624
+#: ../../../../build/work/app/bin/bllnhlp.c:625
+#: ../../../../build/work/app/bin/bllnhlp.c:626
+#: ../../../../build/work/app/bin/bllnhlp.c:627
+#: ../../../../build/work/app/bin/bllnhlp.c:628
+#: ../../../../build/work/app/bin/bllnhlp.c:629
+#: ../../../../build/work/app/bin/bllnhlp.c:630
+#: ../../../../build/work/app/bin/bllnhlp.c:631
+#: ../../../../build/work/app/bin/bllnhlp.c:632
+#: ../../../../build/work/app/bin/bllnhlp.c:633
+#: ../../../../build/work/app/bin/bllnhlp.c:634
+#: ../../../../build/work/app/bin/bllnhlp.c:635
+#: ../../../../build/work/app/bin/bllnhlp.c:636
+#: ../../../../build/work/app/bin/bllnhlp.c:637
+#: ../../../../build/work/app/bin/bllnhlp.c:638
+#: ../../../../build/work/app/bin/bllnhlp.c:639
+#: ../../../../build/work/app/bin/bllnhlp.c:640
+#: ../../../../build/work/app/bin/bllnhlp.c:641
+#: ../../../../build/work/app/bin/bllnhlp.c:642
+#: ../../../../build/work/app/bin/bllnhlp.c:643
+#: ../../../../build/work/app/bin/bllnhlp.c:644
+#: ../../../../build/work/app/bin/bllnhlp.c:645
+#: ../../../../build/work/app/bin/bllnhlp.c:646
+#: ../../../../build/work/app/bin/bllnhlp.c:647
+#: ../../../../build/work/app/bin/bllnhlp.c:648
+#: ../../../../build/work/app/bin/bllnhlp.c:649
+#: ../../../../build/work/app/bin/bllnhlp.c:650
+#: ../../../../build/work/app/bin/bllnhlp.c:651
+#: ../../../../build/work/app/bin/bllnhlp.c:652
+#: ../../../../build/work/app/bin/bllnhlp.c:653
+#: ../../../../build/work/app/bin/bllnhlp.c:654
+#: ../../../../build/work/app/bin/bllnhlp.c:655
+#: ../../../../build/work/app/bin/bllnhlp.c:656
+#: ../../../../build/work/app/bin/bllnhlp.c:657
+#: ../../../../build/work/app/bin/bllnhlp.c:658
+#: ../../../../build/work/app/bin/bllnhlp.c:659
+#: ../../../../build/work/app/bin/bllnhlp.c:660
+#: ../../../../build/work/app/bin/bllnhlp.c:661
+#: ../../../../build/work/app/bin/bllnhlp.c:662
+#: ../../../../build/work/app/bin/bllnhlp.c:663
+#: ../../../../build/work/app/bin/bllnhlp.c:665
+msgid "No Help"
+msgstr "Nenhuma ajuda"
+
+#: ../bin/misc.c:1022
+#, fuzzy
+msgid "File AutoSaved"
+msgstr "Botões de arquivos"
+
+#: ../bin/misc.c:1233 ../bin/misc.c:1240 ../bin/misc.c:1311
+msgid ""
+"Cancelling the current command will undo the changes\n"
+"you are currently making. Do you want to update?"
+msgstr ""
+"Anulação do último comando desfazerá as alterações\n"
+"que você está fazendo. Continuar?"
+
+#: ../bin/misc.c:1806
+msgid "Sticky Commands"
+msgstr "Comandos \"grudendos\""
+
+#: ../bin/misc.c:1819
+msgid "File Buttons"
+msgstr "Botões de arquivos"
+
+#: ../bin/misc.c:1819
+#, fuzzy
+msgid "Import/Export Buttons"
+msgstr "Botões de zoom"
+
+#: ../bin/misc.c:1819
+msgid "Zoom Buttons"
+msgstr "Botões de zoom"
+
+#: ../bin/misc.c:1820
+msgid "Undo Buttons"
+msgstr "Botões de desfazer"
+
+#: ../bin/misc.c:1820
+msgid "Easement Button"
+msgstr "Botão de curva de transição"
+
+#: ../bin/misc.c:1820
+msgid "SnapGrid Buttons"
+msgstr "Botões da grade"
+
+#: ../bin/misc.c:1821
+msgid "Create Track Buttons"
+msgstr "Criar botões de trilhos"
+
+#: ../bin/misc.c:1821
+msgid "Layout Control Elements"
+msgstr "Elementos de controle de layout"
+
+#: ../bin/misc.c:1822
+msgid "Modify Track Buttons"
+msgstr "Modificar botões de trilhos"
+
+#: ../bin/misc.c:1822
+msgid "Properties/Select"
+msgstr "Descrever / Selecionar"
+
+#: ../bin/misc.c:1823
+msgid "Track Group Buttons"
+msgstr "Botões de grupos de trilhos"
+
+#: ../bin/misc.c:1823
+msgid "Train Group Buttons"
+msgstr "Botões de grupos de trens"
+
+#: ../bin/misc.c:1824
+msgid "Create Misc Buttons"
+msgstr "Criar botões de miscelâneas"
+
+#: ../bin/misc.c:1824
+msgid "Ruler Button"
+msgstr "Botão da régua"
+
+#: ../bin/misc.c:1824
+msgid "Layer Buttons"
+msgstr "Botões das camadas"
+
+#: ../bin/misc.c:1825
+msgid "Hot Bar"
+msgstr "Barra de itens"
+
+#: ../bin/misc.c:1894 ../../../../build/work/app/bin/bllnhlp.c:80
+msgid "Change Elevations"
+msgstr "Alterar elevações"
+
+#: ../bin/misc.c:1912
+msgid "Angle:"
+msgstr "Ângulo:"
+
+#: ../bin/misc.c:1919
+#, fuzzy
+msgid "Move X:"
+msgstr "Mover"
+
+#: ../bin/misc.c:1920
+#, fuzzy
+msgid "Move Y:"
+msgstr "Mover"
+
+#: ../bin/misc.c:1967
+#, fuzzy
+msgid "Enter Move ..."
+msgstr "Entrar ângulo..."
+
+#: ../bin/misc.c:1973
+msgid "180 "
+msgstr "180 "
+
+#: ../bin/misc.c:1974
+msgid "90 CW"
+msgstr "90° sentido horário"
+
+#: ../bin/misc.c:1975
+msgid "45 CW"
+msgstr "45° sentido horário"
+
+#: ../bin/misc.c:1976
+msgid "30 CW"
+msgstr "30° sentido horário"
+
+#: ../bin/misc.c:1977
+msgid "15 CW"
+msgstr "15° sentido horário"
+
+#: ../bin/misc.c:1978
+msgid "15 CCW"
+msgstr "15° sentido anti-horário"
+
+#: ../bin/misc.c:1979
+msgid "30 CCW"
+msgstr "30° sentido anti-horário"
+
+#: ../bin/misc.c:1980
+msgid "45 CCW"
+msgstr "45° sentido anti-horário"
+
+#: ../bin/misc.c:1981
+msgid "90 CCW"
+msgstr "90° sentido anti-horário"
+
+#: ../bin/misc.c:1982
+msgid "Enter Angle ..."
+msgstr "Entrar ângulo..."
+
+#: ../bin/misc.c:2013
+msgid "Debug"
+msgstr "Debugar"
+
+#: ../bin/misc.c:2144
+msgid "&File"
+msgstr "&Arquivo"
+
+#: ../bin/misc.c:2145
+msgid "&Edit"
+msgstr "&Editar"
+
+#: ../bin/misc.c:2146
+msgid "&View"
+msgstr "&Visualizar"
+
+#: ../bin/misc.c:2147
+msgid "&Add"
+msgstr "&Adicionar"
+
+#: ../bin/misc.c:2148
+msgid "&Change"
+msgstr "&Alterar"
+
+#: ../bin/misc.c:2149
+msgid "&Draw"
+msgstr "&Desenhar"
+
+#: ../bin/misc.c:2150
+msgid "&Manage"
+msgstr "&Gerenciar"
+
+#: ../bin/misc.c:2151
+msgid "&Options"
+msgstr "&Opções"
+
+#: ../bin/misc.c:2152
+msgid "&Macro"
+msgstr "&Macro"
+
+#: ../bin/misc.c:2153
+msgid "&Window"
+msgstr "&Janela"
+
+#: ../bin/misc.c:2154
+msgid "&Help"
+msgstr "&Ajuda"
+
+#: ../bin/misc.c:2190
+#, fuzzy
+msgid "Context Commands"
+msgstr "Outros comandos"
+
+#: ../bin/misc.c:2191
+msgid "Shift Context Commands"
+msgstr ""
+
+#: ../bin/misc.c:2206 ../bin/misc.c:2393
+msgid "Enable SnapGrid"
+msgstr "Habilitar grade"
+
+#: ../bin/misc.c:2208
+msgid "SnapGrid Show"
+msgstr "Mostrar grade"
+
+#: ../bin/misc.c:2210
+#, fuzzy
+msgid " Enable Magnetic Snap"
+msgstr "Habilitar grade"
+
+#: ../bin/misc.c:2212 ../bin/misc.c:2414
+#, fuzzy
+msgid "Show/Hide Map"
+msgstr "Mostrar/Ocultar camada"
+
+#: ../bin/misc.c:2214
+#, fuzzy
+msgid "Show/Hide Background"
+msgstr "Mostrar/Ocultar camada"
+
+#: ../bin/misc.c:2245 ../bin/misc.c:2246
+#, fuzzy
+msgid "Add..."
+msgstr "Adicionar"
+
+#: ../bin/misc.c:2249 ../bin/misc.c:2250
+#, fuzzy
+msgid "More..."
+msgstr "Mais"
+
+#: ../bin/misc.c:2285
+msgid "&New ..."
+msgstr "&Novo ..."
+
+#: ../bin/misc.c:2287
+msgid "&Open ..."
+msgstr "&Abrir..."
+
+#: ../bin/misc.c:2293
+msgid "Save &As ..."
+msgstr "Salvar &como..."
+
+#: ../bin/misc.c:2295
+msgid "Revert"
+msgstr "&Reverter"
+
+#: ../bin/misc.c:2298
+msgid "P&rint Setup ..."
+msgstr "Configuração de &impressão"
+
+#: ../bin/misc.c:2303
+msgid "&Import"
+msgstr "&Importar"
+
+#: ../bin/misc.c:2305
+#, fuzzy
+msgid "Import &Module"
+msgstr "Importar"
+
+#: ../bin/misc.c:2307
+msgid "Export to &Bitmap"
+msgstr "Exportar para &bitmap"
+
+#: ../bin/misc.c:2310
+msgid "E&xport"
+msgstr "E&xportar"
+
+#: ../bin/misc.c:2312
+msgid "Export D&XF"
+msgstr "Exportar D&XF"
+
+#: ../bin/misc.c:2317
+msgid "Parameter &Files ..."
+msgstr "Arquivos de &parâmetro..."
+
+#: ../bin/misc.c:2319
+msgid "No&tes ..."
+msgstr "N&otas..."
+
+#: ../bin/misc.c:2326
+msgid "E&xit"
+msgstr "&Sair"
+
+#: ../bin/misc.c:2332
+msgid "&Undo"
+msgstr "&Desfazer"
+
+#: ../bin/misc.c:2334
+msgid "R&edo"
+msgstr "&Refazer"
+
+#: ../bin/misc.c:2337
+msgid "Cu&t"
+msgstr "&Cortar"
+
+#: ../bin/misc.c:2339
+msgid "&Copy"
+msgstr "&Copiar"
+
+#: ../bin/misc.c:2341
+msgid "&Paste"
+msgstr "&Colar"
+
+#: ../bin/misc.c:2343
+#, fuzzy
+msgid "C&lone"
+msgstr "Fechar"
+
+#: ../bin/misc.c:2345
+msgid "De&lete"
+msgstr "&Apagar"
+
+#: ../bin/misc.c:2353
+msgid "Select &All"
+msgstr "Selecionar &tudo"
+
+#: ../bin/misc.c:2355
+msgid "&Deselect All"
+msgstr "&Deselecionar tudo"
+
+#: ../bin/misc.c:2356
+msgid "&Invert Selection"
+msgstr "&Inverter seleção"
+
+#: ../bin/misc.c:2357
+msgid "Select Stranded Track"
+msgstr "Selecionar trecho pego"
+
+#: ../bin/misc.c:2359
+msgid "Tu&nnel"
+msgstr "&Túnel"
+
+#: ../bin/misc.c:2360
+#, fuzzy
+msgid "B&ridge"
+msgstr "Ponte"
+
+#: ../bin/misc.c:2361
+msgid "Ties/NoTies"
+msgstr ""
+
+#: ../bin/misc.c:2362
+#, fuzzy
+msgid "Move to &Front"
+msgstr "Arrastar para juntar"
+
+#: ../bin/misc.c:2363
+#, fuzzy
+msgid "Move to &Back"
+msgstr "Mover trecho"
+
+#: ../bin/misc.c:2373
+msgid "Zoom &In"
+msgstr "Aproximar"
+
+#: ../bin/misc.c:2376
+msgid "Zoom &Out"
+msgstr "Afastar"
+
+#: ../bin/misc.c:2386
+msgid "&Redraw"
+msgstr "&Redesenhar"
+
+#: ../bin/misc.c:2388
+msgid "Redraw All"
+msgstr "Redesenhar tudo"
+
+#: ../bin/misc.c:2395
+msgid "Show SnapGrid"
+msgstr "Mostrar grade"
+
+#: ../bin/misc.c:2405
+#, fuzzy
+msgid "Enable Magnetic Snap"
+msgstr "Habilitar grade"
+
+#: ../bin/misc.c:2420
+msgid "&Tool Bar"
+msgstr "Barra de &ferramentas"
+
+#: ../bin/misc.c:2453
+#, fuzzy
+msgid "Control Element"
+msgstr "Elementos de controle de layout"
+
+#: ../bin/misc.c:2479
+msgid "&Loosen Tracks"
+msgstr "Trechos &perdidos"
+
+#: ../bin/misc.c:2491
+msgid "Raise/Lower Elevations"
+msgstr "Aumentar / diminuir elevações"
+
+#: ../bin/misc.c:2500
+msgid "Recompute Elevations"
+msgstr "Recalcular inclinações"
+
+#: ../bin/misc.c:2505
+msgid "Change Scale"
+msgstr "Alterar escala"
+
+#: ../bin/misc.c:2526
+msgid "L&ayout ..."
+msgstr "&Layout..."
+
+#: ../bin/misc.c:2528
+msgid "&Display ..."
+msgstr "&Tela..."
+
+#: ../bin/misc.c:2530
+msgid "Co&mmand ..."
+msgstr "&Comando..."
+
+#: ../bin/misc.c:2532
+msgid "&Easements ..."
+msgstr "Curvas de &transição..."
+
+#: ../bin/misc.c:2535
+msgid "&Fonts ..."
+msgstr "&Fontes..."
+
+#: ../bin/misc.c:2537
+msgid "Stic&ky ..."
+msgstr "Comandos \"&grudendos\"..."
+
+#: ../bin/misc.c:2542
+msgid "&Debug ..."
+msgstr "&Debugar..."
+
+#: ../bin/misc.c:2545
+msgid "&Preferences ..."
+msgstr "&Preferências..."
+
+#: ../bin/misc.c:2547
+msgid "&Colors ..."
+msgstr "&Cores..."
+
+#: ../bin/misc.c:2553
+msgid "&Record ..."
+msgstr "&Gravar..."
+
+#: ../bin/misc.c:2555
+msgid "&Play Back ..."
+msgstr "&Playback..."
+
+#: ../bin/misc.c:2561
+msgid "Main window"
+msgstr "Janela principal"
+
+#: ../bin/misc.c:2575
+msgid "Recent Messages"
+msgstr "Mensagens recentes"
+
+#: ../bin/misc.c:2582
+msgid "Tip of the Day..."
+msgstr "Dica do dia..."
+
+#: ../bin/misc.c:2583
+msgid "&Demos"
+msgstr "&Demonstrações"
+
+#: ../bin/misc.c:2584
+#, fuzzy
+msgid "Examples..."
+msgstr "Curvas de &transição..."
+
+#: ../bin/misc.c:2588 ../bin/smalldlg.c:222
+msgid "About"
+msgstr "Sobre"
+
+#: ../bin/misc.c:2601
+msgid "Tur&nout Designer..."
+msgstr "Editor de &AMV"
+
+#: ../bin/misc.c:2604
+#, fuzzy
+msgid "Layout &Control Elements"
+msgstr "Elementos de controle de layout"
+
+#: ../bin/misc.c:2606
+msgid "&Group"
+msgstr "A&grupar"
+
+#: ../bin/misc.c:2608
+msgid "&Ungroup"
+msgstr "&Desagrupar"
+
+#: ../bin/misc.c:2612
+#, fuzzy
+msgid "Custom defined parts..."
+msgstr "Gerenciamento personalizado"
+
+#: ../bin/misc.c:2615
+msgid "Update Turnouts and Structures"
+msgstr "Atualizar AMVs e estruturas"
+
+#: ../bin/misc.c:2624
+msgid "Layers ..."
+msgstr "Camadas"
+
+#: ../bin/misc.c:2628
+msgid "Parts &List ..."
+msgstr "Lista de itens"
+
+#: ../bin/misc.c:2631
+msgid "Price List..."
+msgstr "Lista de preços"
+
+#: ../bin/misc.c:2713
+#, fuzzy
+msgid "Import/Export"
+msgstr "Exportar"
+
+#: ../bin/misc.c:2743
+msgid ""
+"Program was not terminated properly. Do you want to resume working on the "
+"previous trackplan?"
+msgstr ""
+"O programa não foi terminado apropriadamente. Continuar trabalhando no "
+"projeto de layout anterior?"
+
+#: ../bin/misc.c:2744
+msgid "Resume"
+msgstr "Continuar"
+
+#: ../bin/misc.c:2744
+msgid "Resume with New Name"
+msgstr ""
+
+#: ../bin/misc.c:2744
+msgid "Ignore Checkpoint"
+msgstr ""
+
+#: ../bin/misc.c:2859
+#, c-format
+msgid "Unnamed Trackplan - %s(%s)"
+msgstr "Layout sem nome - %s(%s)"
+
+#: ../bin/misc.c:2945
+msgid "Initializing commands"
+msgstr "Iniciando comandos"
+
+#: ../bin/misc.c:2954
+msgid "Initializing menus"
+msgstr "Iniciando menus"
+
+#: ../bin/misc.c:2989
+msgid "Reading parameter files"
+msgstr "Lendo arquivos de parâmetros"
+
+#: ../bin/misc.c:3026
+msgid "Initialization complete"
+msgstr "Iniciação completa"
+
+#: ../bin/param.c:92
+msgid "Unexpected End Of String"
+msgstr "Fim de string não esperado"
+
+#: ../bin/param.c:99
+msgid "Expected digit"
+msgstr "Dígito esperado"
+
+#: ../bin/param.c:106
+msgid "Overflow"
+msgstr "Overflow"
+
+#: ../bin/param.c:154
+msgid "Divide by 0"
+msgstr "Divisão por zero"
+
+#: ../bin/param.c:162
+msgid "Expected /"
+msgstr "Caractere \"/\" esperado"
+
+#: ../bin/param.c:248
+msgid "Invalid Units Indicator"
+msgstr "Indicador de unidades inválido"
+
+#: ../bin/param.c:276
+msgid "Expected End Of String"
+msgstr "Fim de string esperado"
+
+#: ../bin/param.c:302 ../bin/param.c:1406
+#, c-format
+msgid "Invalid Number"
+msgstr "Número inválido"
+
+#: ../bin/param.c:361
+msgid "End Of String"
+msgstr "Fim de string"
+
+#: ../bin/param.c:1413
+#, c-format
+msgid "Enter a value > %ld"
+msgstr "Digitar um valor maior que %ld"
+
+#: ../bin/param.c:1415
+#, c-format
+msgid "Enter a value < %ld"
+msgstr "Digitar um valor menor que %ld"
+
+#: ../bin/param.c:1417
+#, c-format
+msgid "Enter a value between %ld and %ld"
+msgstr "Digitar um valor entre %ld e %ld"
+
+#: ../bin/param.c:1473
+#, c-format
+msgid "Enter a value > %s"
+msgstr "Digitar um valor maior que %s"
+
+#: ../bin/param.c:1476
+#, c-format
+msgid "Enter a value < %s"
+msgstr "Digitar um valor menor que %s"
+
+#: ../bin/param.c:1479
+#, c-format
+msgid "Enter a value between %s and %s"
+msgstr "Digitar um valor entre %s e %s"
+
+#: ../bin/param.c:2643
+msgid "Help"
+msgstr "Ajuda"
+
+#: ../bin/paramfile.c:250
+msgid "Parameter"
+msgstr "Parâmetro"
+
+#: ../bin/paramfile.c:348
+msgid "Unknown param file line - skip until next good object?"
+msgstr ""
+
+#: ../bin/paramfilelist.c:110
+#, c-format
+msgid "Updating %s"
+msgstr "Atualizando %s"
+
+#: ../bin/paramfilesearch_ui.c:68
+msgid "Enter at least one search word"
+msgstr ""
+
+#: ../bin/paramfilesearch_ui.c:77
+#, fuzzy
+msgid "Reload Library"
+msgstr "Recarregar"
+
+#: ../bin/paramfilesearch_ui.c:274
+#, fuzzy, c-format
+msgid "%d parameter files found."
+msgstr "Lendo arquivos de parâmetros"
+
+#: ../bin/paramfilesearch_ui.c:284
+msgid "No matches found."
+msgstr ""
+
+#: ../bin/paramfilesearch_ui.c:396
+#, fuzzy
+msgid "Choose parameter files"
+msgstr "Lendo arquivos de parâmetros"
+
+#: ../bin/paramfilesearch_ui.c:416
+msgid "No system parameter files found, search is disabled."
+msgstr ""
+
+#: ../bin/smalldlg.c:64
+msgid "Show tips at start"
+msgstr "Exibir dicas ao iniciar"
+
+#: ../bin/smalldlg.c:70
+msgid "Did you know..."
+msgstr "Você sabia..."
+
+#: ../bin/smalldlg.c:72
+msgid "Previous Tip"
+msgstr "Dica anterior"
+
+#: ../bin/smalldlg.c:73
+msgid "Next Tip"
+msgstr "Próxima dica"
+
+#: ../bin/smalldlg.c:90
+msgid "Tip of the Day"
+msgstr "Dica do dia"
+
+#: ../bin/smalldlg.c:99
+msgid "No tips are available"
+msgstr "Nenhuma dica disponível"
+
+#: ../bin/smalldlg.c:199
+msgid ""
+"XTrackCAD is a CAD (computer-aided design) program for designing model "
+"railroad layouts."
+msgstr ""
+"XTrackCAD é um programa CAD (em inglês, computer aided design) para projetos "
+"de layout de ferromodelismo."
+
+#: ../bin/tbezier.c:177
+#, c-format
+msgid "Bezier: len=%0.2f min_rad=%0.2f"
+msgstr ""
+
+#: ../bin/tbezier.c:250
+#, fuzzy
+msgid "Ctl Pt 1: X,Y"
+msgstr "Extremidade 1: X"
+
+#: ../bin/tbezier.c:251
+#, fuzzy
+msgid "Ctl Pt 2: X,Y"
+msgstr "Extremidade 2: X"
+
+#: ../bin/tbezier.c:257
+#, fuzzy
+msgid "MinRadius"
+msgstr "Raio"
+
+#: ../bin/tbezier.c:262
+#, fuzzy
+msgid "Line Color"
+msgstr "Cor %s"
+
+#: ../bin/tbezier.c:379
+#, fuzzy, c-format
+msgid ""
+"Bezier %s(%d): Layer=%u MinRadius=%s Length=%s EP=[%0.3f,%0.3f] [%0.3f,%"
+"0.3f] CP1=[%0.3f,%0.3f] CP2=[%0.3f, %0.3f]"
+msgstr ""
+"Trecho curvo(%d): Camada=%d Raio=%s Comprimento=%s Centro=[%s,%s] "
+"Extremidades=[%0.3f,%0.3f θ%0.3f] [%0.3f,%0.3f θ%0.3f]"
+
+#: ../bin/tbezier.c:453
+#, fuzzy
+msgid "Bezier Track"
+msgstr "Trecho em hélice"
+
+#: ../bin/tbezier.c:870
+msgid "Merge Bezier"
+msgstr ""
+
+#: ../bin/tcornu.c:222
+#, c-format
+msgid "Cornu: len=%0.2f min_rad=%0.2f"
+msgstr ""
+
+#: ../bin/tcornu.c:296
+#, fuzzy
+msgid "Radius "
+msgstr "Raio 1"
+
+#: ../bin/tcornu.c:304
+#, fuzzy
+msgid "Minimum Radius"
+msgstr "Raio mínimo"
+
+#: ../bin/tcornu.c:305
+msgid "Max Rate Of Curve Change/Scale"
+msgstr ""
+
+#: ../bin/tcornu.c:306
+msgid "Total Winding Angle"
+msgstr ""
+
+#: ../bin/tcornu.c:444
+#, fuzzy, c-format
+msgid ""
+"Cornu Track(%d): Layer=%u MinRadius=%s Length=%s EP=[%0.3f,%0.3f] [%0.3f,%"
+"0.3f]"
+msgstr ""
+"Trecho curvo(%d): Camada=%d Raio=%s Comprimento=%s Centro=[%s,%s] "
+"Extremidades=[%0.3f,%0.3f θ%0.3f] [%0.3f,%0.3f θ%0.3f]"
+
+#: ../bin/tcornu.c:497
+#, fuzzy
+msgid "Cornu Track"
+msgstr "Trecho curvo"
+
+#: ../bin/tcornu.c:1025
+#, fuzzy
+msgid "Merge Cornu"
+msgstr "Fundir curvas"
+
+#: ../bin/tcurve.c:243
+#, fuzzy, c-format
+msgid "Helix: turns=%ld len=%0.2f grade=%0.1f%% sep=%0.2f"
+msgstr "Hélice: voltas=%ld comprimento=%s inclinação=%0.1f%% separação=%s"
+
+#: ../bin/tcurve.c:249
+#, fuzzy, c-format
+msgid "Helix: turns=%ld len=%0.2f"
+msgstr "Hélice: voltas=%ld comprimento=%s"
+
+#: ../bin/tcurve.c:365 ../bin/tcurve.c:367 ../bin/tease.c:520
+#: ../bin/tease.c:522 ../bin/tstraigh.c:86 ../bin/tstraigh.c:88
+msgid "Z"
+msgstr "Z"
+
+#: ../bin/tcurve.c:373
+msgid "Angular Length"
+msgstr "Comprimento angular"
+
+#: ../bin/tcurve.c:553
+#, c-format
+msgid ""
+"Helix Track(%d): Layer=%d Radius=%s Turns=%ld Length=%s Center=[%s,%s] EP=[%"
+"0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A%0.3f]"
+msgstr ""
+"Trecho em hélice(%d): Camada=%d Raio=%s Voltas=%ld Comprimento=%s Centro=[%s,"
+"%s] EP=[%0.3f,%0.3f θ%0.3f] [%0.3f,%0.3f θ%0.3f]"
+
+#: ../bin/tcurve.c:563
+#, c-format
+msgid ""
+"Curved Track(%d): Layer=%d Radius=%s Length=%s Center=[%s,%s] EP=[%0.3f,%"
+"0.3f A%0.3f] [%0.3f,%0.3f A%0.3f]"
+msgstr ""
+"Trecho curvo(%d): Camada=%d Raio=%s Comprimento=%s Centro=[%s,%s] "
+"Extremidades=[%0.3f,%0.3f θ%0.3f] [%0.3f,%0.3f θ%0.3f]"
+
+#: ../bin/tcurve.c:640
+msgid "Helix Track"
+msgstr "Trecho em hélice"
+
+#: ../bin/tcurve.c:646
+msgid "Curved Track"
+msgstr "Trecho curvo"
+
+#: ../bin/tcurve.c:1011
+msgid "Merge Curves"
+msgstr "Fundir curvas"
+
+#: ../bin/tcurve.c:1078
+msgid "Drag to change angle or create tangent"
+msgstr "Arrastar para alterar ângulo ou criar tangente"
+
+#: ../bin/tcurve.c:1111 ../bin/tcurve.c:1143
+msgid "Curved "
+msgstr "Curva"
+
+#: ../bin/tcurve.c:1117
+msgid "Tangent "
+msgstr "Tangente"
+
+#: ../bin/tcurve.c:1126
+#, c-format
+msgid "Tangent track: Length %s Angle %0.3f"
+msgstr "Trecho tangente: Comprimento %s Ângulo %0.3f"
+
+#: ../bin/tcurve.c:1148
+#, c-format
+msgid "Curved: Radius=%s Length=%s Angle=%0.3f"
+msgstr "Curva: Raio=%s Comprimento=%s Ângulo=%0.3f"
+
+#: ../bin/tease.c:527
+msgid "l0"
+msgstr "l0"
+
+#: ../bin/tease.c:528
+msgid "l1"
+msgstr "l1"
+
+#: ../bin/tease.c:570
+#, c-format
+msgid ""
+"Joint Track(%d): Layer=%d Length=%0.3f EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A"
+"%0.3f]"
+msgstr ""
+"Trecho juntado(%d): Camada=%d Comprimento=%0.3f Extremidades=[%0.3f,%0.3f θ%"
+"0.3f] [%0.3f,%0.3f θ%0.3f]"
+
+#: ../bin/tease.c:615
+msgid "Easement Track"
+msgstr "Trecho de curva de transição"
+
+#: ../bin/tease.c:1235
+msgid "Merge Easements"
+msgstr "Fundir curvas de transição"
+
+#: ../bin/tease.c:1300
+msgid "Split Easement Curve"
+msgstr "Seccionar curva de transição"
+
+#: ../bin/textnoteui.c:214
+#, fuzzy, c-format
+msgid "Note: Layer=%d %-.80s"
+msgstr "(%d): Camada=%d %s"
+
+#: ../bin/textnoteui.c:225
+#, fuzzy
+msgid "Update comment"
+msgstr "Desfazer último comando"
+
+#: ../bin/textnoteui.c:237
+msgid "Replace this text with your note"
+msgstr "Substitua este texto por uma nota"
+
+#: ../bin/textnoteui.c:241
+#, fuzzy
+msgid "Create Text Note"
+msgstr "Criar texto"
+
+#: ../bin/track.c:1329
+msgid "Move Objects Above"
+msgstr "Mover objetos para cima"
+
+#: ../bin/track.c:1349
+msgid "Mode Objects Below"
+msgstr "Mover objetos para baixo"
+
+#: ../bin/track.c:1640
+msgid "Audit"
+msgstr "Auditar"
+
+#: ../bin/track.c:1929
+#, c-format
+msgid "%d Track(s) loosened"
+msgstr "%d trecho(s) liberado(s)"
+
+#: ../bin/track.c:1936
+msgid "No tracks loosened"
+msgstr "Nenhum trecho liberado"
+
+#: ../bin/track.c:1946 ../bin/track.c:1950
+#, c-format
+msgid "Connecting a non-track(%d) to (%d)"
+msgstr "Conectando um objeto(%d) a (%d)"
+
+#: ../bin/track.c:2005
+msgid "Join Abutting Tracks"
+msgstr "Juntar trechos lado a lado"
+
+#: ../bin/track.c:2280 ../bin/track.c:2315
+msgid "Inside turnout track"
+msgstr ""
+
+#: ../bin/track.c:2298
+#, fuzzy, c-format
+msgid "Curve: Length=%s Radius=%0.3f Arc=%0.3f"
+msgstr "Comprimento = %0.3f Ângulo = %0.3f"
+
+#: ../bin/track.c:2321 ../bin/track.c:2379 ../bin/tstraigh.c:568
+#, c-format
+msgid "Straight: Length=%s Angle=%0.3f"
+msgstr "Reto: Comprimento=%s Ângulo=%0.3f"
+
+#: ../bin/trknote.c:60
+#, fuzzy
+msgid "Comment"
+msgstr "&Conteúdo"
+
+#: ../bin/trknote.c:61
+#, fuzzy
+msgid "Link"
+msgstr "Linha"
+
+#: ../bin/trknote.c:61 ../../../../build/work/app/bin/bllnhlp.c:101
+msgid "Weblink"
+msgstr ""
+
+#: ../bin/trknote.c:638 ../../../../build/work/app/bin/bllnhlp.c:108
+msgid "Place a note on the layout"
+msgstr "Posicionar uma nota no traçado"
+
+#: ../bin/trknote.c:652
+msgid "New Note"
+msgstr "Nova nota"
+
+#: ../bin/trknote.c:708
+#, fuzzy
+msgid "Add notes"
+msgstr "Adicionar impressora"
+
+#: ../bin/tstraigh.c:236
+#, c-format
+msgid ""
+"Straight Track(%d): Layer=%d Length=%s EP=[%0.3f,%0.3f A%0.3f] [%0.3f,%0.3f A"
+"%0.3f]"
+msgstr ""
+"Trecho reto(%d): Camada=%d Comprimento=%s Extremidades=[%0.3f,%0.3f θ%0.3f] "
+"[%0.3f,%0.3f θ%0.3f]"
+
+#: ../bin/tstraigh.c:481
+msgid "Extending Straight Track"
+msgstr "Estendendo trecho reto"
+
+#: ../bin/tstraigh.c:561
+msgid "Straight "
+msgstr "Reto"
+
+#: ../wlib/gtklib/filesel.c:94
+#, fuzzy
+msgid "Save format:"
+msgstr "Formato da página"
+
+#: ../wlib/gtklib/filesel.c:187
+msgid "Image files"
+msgstr ""
+
+#: ../wlib/gtklib/font.c:281
+msgid "Font Select"
+msgstr "Seleção de fonte"
+
+#: ../wlib/gtklib/help.c:83
+msgid "&Contents"
+msgstr "&Conteúdo"
+
+#: ../wlib/gtklib/help.c:84
+msgid "Co&mmand Context help"
+msgstr ""
+
+#: ../wlib/gtklib/ixhelp.c:243
+msgid "Home"
+msgstr "Início"
+
+#: ../wlib/gtklib/ixhelp.c:247
+#, fuzzy
+msgid "Contents"
+msgstr "&Conteúdo"
+
+#: ../wlib/gtklib/menu.c:541
+msgid "<Empty List>"
+msgstr ""
+
+#: ../wlib/gtklib/notice.c:101 ../wlib/mswlib/mswmisc.c:2102
+#: ../wlib/mswlib/mswmisc.c:2145
+msgid "Warning"
+msgstr "Aviso"
+
+#: ../wlib/gtklib/notice.c:106 ../wlib/mswlib/mswmisc.c:2107
+msgid "Error"
+msgstr "Erro"
+
+#: ../wlib/gtklib/text.c:300
+#, c-format
+msgid "%d of %d"
+msgstr ""
+
+# Texto não está claro. Quais arquivos tenho que copiar em um dos diretórios em questão?
+#: ../wlib/gtklib/wpref.c:114
+#, c-format
+msgid ""
+"The required configuration files could not be located in the expected "
+"location.\n"
+"\n"
+"Usually this is an installation problem. Make sure that these files are "
+"installed in either \n"
+" %s/share/xtrkcad or\n"
+" /usr/lib/%s or\n"
+" /usr/local/lib/%s\n"
+"If this is not possible, the environment variable %s must contain the name "
+"of the correct directory."
+msgstr ""
+"Os arquivos de configuração mínima não foram encontrados.\n"
+"\n"
+"Tipicamente, isso é um problema de instalação. Por favor, tenha certeza que "
+"esses arquivos estejam instalados em \n"
+" %s/share/xtrkcad ou\n"
+" /usr/lib/%s ou\n"
+" /usr/local/lib/%s\n"
+"Se não for possível, a variável de ambiente \"%s\" deverá conter o nome do "
+"diretório correto."
+
+#: ../wlib/gtklib/wpref.c:148 ../wlib/gtklib/wpref.c:193
+msgid "HOME is not set"
+msgstr "Variável HOME não está configurada"
+
+#: ../wlib/gtklib/wpref.c:148 ../wlib/gtklib/wpref.c:157
+#: ../wlib/gtklib/wpref.c:193
+msgid "Exit"
+msgstr "Sair"
+
+#: ../wlib/gtklib/wpref.c:156
+#, c-format
+msgid "Cannot create %s"
+msgstr "Não foi possível criar %s"
+
+#: ../wlib/mswlib/backgnd.c:103
+msgid "Image file is invalid or cannot be read."
+msgstr ""
+
+#: ../wlib/mswlib/mswmenu.c:886
+msgid "Ctrl+"
+msgstr ""
+
+#: ../wlib/mswlib/mswmenu.c:891
+msgid "Alt+"
+msgstr ""
+
+#: ../wlib/mswlib/mswmenu.c:896
+msgid "Shift+"
+msgstr ""
+
+#: ../wlib/mswlib/mswmenu.c:902
+#, fuzzy
+msgid "Space"
+msgstr "Espaçamento"
+
+#: ../wlib/mswlib/mswmisc.c:190
+msgid "All image files"
+msgstr ""
+
+#: ../wlib/mswlib/mswmisc.c:192
+msgid "GIF files (*.gif)"
+msgstr ""
+
+#: ../wlib/mswlib/mswmisc.c:194
+msgid "JPEG files (*.jpeg,*.jpg)"
+msgstr ""
+
+#: ../wlib/mswlib/mswmisc.c:196
+msgid "PNG files (*.png)"
+msgstr ""
+
+#: ../wlib/mswlib/mswmisc.c:198
+msgid "TIFF files (*.tiff, *.tif)"
+msgstr ""
+
+#: ../wlib/mswlib/mswmisc.c:200
+msgid "All files (*)"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:9
+#, c-format
+msgid ""
+"MSG_CANT_PLACE_FROGPOINTS\tFrog|Points cannot be placed on a turnout, circle "
+"or helix.\tA %s cannot be placed on a turnout, circle or helix."
+msgstr ""
+"MSG_CANT_PLACE_FROGPOINTS\tJacaré|Pontos não podem ser posicionados em um "
+"AMV, circunferência ou hélice.\tUm %s não pode ser posicionado em um AMV, "
+"circunferência ou hélice."
+
+#: ../../../../build/work/app/help/messages.h:10
+#, fuzzy
+msgid ""
+"MSG_SEL_TRK_FROZEN\tA frozen layer contains selected track. Command cannot "
+"be executed."
+msgstr ""
+"MSG_SEL_TRK_FROZEN\tUma camada congelada possui selecionados,..\tUma camada "
+"congelada possui trilhos selecionados\n"
+"selecionados. Comando não pode ser executado."
+
+#: ../../../../build/work/app/help/messages.h:11
+msgid "MSG_HELIX_TURNS_GTR_0\tA Helix must have one or more loops of track."
+msgstr "MSG_HELIX_TURNS_GTR_0\tUma hélice deve possuir um ou mais loops."
+
+#: ../../../../build/work/app/help/messages.h:12
+msgid ""
+"MSG_LARGE_FONT\tA large font has been selected....\tA large font has been "
+"selected.\n"
+"Large fonts may a take a while to load.\n"
+"\n"
+"Do you wish to continue?"
+msgstr ""
+"MSG_LARGE_FONT\tUma fonte grande foi selecionada....\tUma fonte grande foi "
+"selecionada.\n"
+"Fontes grandes podem levar algum tempo para serem carregadas.\n"
+"\n"
+"Continuar?"
+
+#: ../../../../build/work/app/help/messages.h:13
+msgid ""
+"MSG_TODSGN_DESC_NONBLANK\tAll description fields present in the Turnout..."
+"\tAll description fields present in the Turnout\n"
+"Designer must contain appropriate information.\n"
+"Correct inappropriate values and try again."
+msgstr ""
+"MSG_TODSGN_DESC_NONBLANK\tTodos os campos do AMV presentes...\tTodos os "
+"campos do AMV presentes\n"
+"Editor deve conter a informação apropriada.\n"
+"Corrigir valores inapropriados e tentar novamente"
+
+#: ../../../../build/work/app/help/messages.h:14
+msgid ""
+"MSG_GROUP_NONBLANK\tAll fields listed in the Group dialog must contain "
+"data....\tAll fields listed in the Group dialog must contain data.\n"
+"Please enter missing values and try again."
+msgstr ""
+"MSG_GROUP_NONBLANK\tTodos os campos listados na caixa de diálogo de grupo "
+"devem conter dados....\tTodos os campos listados na caixa de diálogo de "
+"grupo devem conter dados.\n"
+"Por favor, digitar os valores restantes e tentar novamente."
+
+#: ../../../../build/work/app/help/messages.h:15
+msgid ""
+"MSG_TODSGN_VALUES_GTR_0\tAll values specified in the Turnout Designer must "
+"be...\tAll values specified in the Turnout Designer must be\n"
+"greater than 0. Correct inappropriate values and try again."
+msgstr ""
+"MSG_TODSGN_VALUES_GTR_0\tTodos os valores especificados no editor de AMV "
+"devem ser...\tTodos os valores especificados no editor de AMV devem ser\n"
+"maiores que zero. Corrigir os valores inapropriados e tentar novamente."
+
+#: ../../../../build/work/app/help/messages.h:16
+#, fuzzy
+msgid "MSG_CURVE_OUT_OF_RANGE\tAngle must be between 0\\u00B0 and 360\\u00B0."
+msgstr "MSG_CURVE_OUT_OF_RANGE\tÂngulo deve estar entre 0° e 360°."
+
+#: ../../../../build/work/app/help/messages.h:17
+msgid ""
+"MSG_TODSGN_CORNU_TOO_COMPLEX\tThe curves created by the Turnout Designer for "
+"a cornu curve have more than 128 segments....\tThe curves created by the "
+"Turnout Designer for a cornu curve have more than 128 segments.\n"
+"Try adjusting the end angles and radii to be closer in values."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:18
+#, c-format
+msgid ""
+"MSG_CUSTMGM_DELETE_CONFIRM\tAre you sure you want to delete the NNN "
+"definition(s)?\tAre you sure you want to delete the\n"
+"%d definition(s)?"
+msgstr ""
+"MSG_CUSTMGM_DELETE_CONFIRM\tVocê tem certeza que deseja eliminar as NNN "
+"definição(ões)?\tVocê tem certeza que deseja eliminar as\n"
+"%d definition(ões)?"
+
+#: ../../../../build/work/app/help/messages.h:19
+msgid "MSG_WBITMAP_FAILED\tBitmap create or write function failed."
+msgstr "MSG_WBITMAP_FAILED\tCriação do bitmap ou falha na função de escrita."
+
+#: ../../../../build/work/app/help/messages.h:20
+msgid "MSG_BITMAP_TOO_LARGE\tBitmap is too large."
+msgstr "MSG_BITMAP_TOO_LARGE\tBitmap muito grande."
+
+#: ../../../../build/work/app/help/messages.h:21
+msgid "MSG_CHANGE_ELEV_MODE\tCannot change elevation mode."
+msgstr "MSG_CHANGE_ELEV_MODE\tNão é possível alterar modo de inclinação."
+
+#: ../../../../build/work/app/help/messages.h:22
+msgid ""
+"MSG_GRID_ENABLE_SPACE_GTR_0\tCannot Enable Grid; spacing must be greater "
+"than 0"
+msgstr ""
+"MSG_GRID_ENABLE_SPACE_GTR_0\tNão é possível habilitar grade; espaçamento "
+"deve ser maior que zero"
+
+#: ../../../../build/work/app/help/messages.h:23
+msgid "MSG_LAYER_FREEZE\tCannot freeze current layer"
+msgstr "MSG_LAYER_FREEZE\tNão é possível congelar camada corrente"
+
+#: ../../../../build/work/app/help/messages.h:24
+msgid ""
+"MSG_CANT_GROUP_BUMPER1\tCannot Group Bumper Track. The track has been "
+"unselected."
+msgstr ""
+"MSG_CANT_GROUP_BUMPER1\tNão é possível agrupar trilho com pára-choque. O "
+"trilho foi deselecionado."
+
+#: ../../../../build/work/app/help/messages.h:25
+msgid "MSG_CANNOT_GROUP_TRACK\tCannot Group selected track."
+msgstr "MSG_CANNOT_GROUP_TRACK\tNão é possível agrupar trilhos selecionados."
+
+#: ../../../../build/work/app/help/messages.h:26
+msgid "MSG_LAYER_HIDE\tCannot hide current layer"
+msgstr "MSG_LAYER_HIDE\tImpossível esconder camada corrente"
+
+#: ../../../../build/work/app/help/messages.h:27
+#, fuzzy
+msgid "MSG_LAYER_MODULE\tCannot turn current layer into a Module"
+msgstr "MSG_LAYER_HIDE\tImpossível esconder camada corrente"
+
+#: ../../../../build/work/app/help/messages.h:28
+msgid "MSG_JOIN_EASEMENTS\tCannot Join; Easements do not align or abut."
+msgstr ""
+"MSG_JOIN_EASEMENTS\tImpossível juntar; Curvas de transição não estão "
+"alinhadas e nem estão próximas."
+
+#: ../../../../build/work/app/help/messages.h:29
+#, c-format
+msgid ""
+"MSG_TRK_ALREADY_CONN\tFirst|Second track is already connected.\tCannot Join; "
+"%s track is already connected."
+msgstr ""
+"MSG_TRK_ALREADY_CONN\tPrimeiro|Segundo trilho já estão conectados.\tNão é "
+"possível juntar; Trilho %s já está conectado."
+
+#: ../../../../build/work/app/help/messages.h:30
+msgid "MSG_JOIN_TURNTABLE\tCannot join from a turntable, try to a turntable"
+msgstr ""
+"MSG_JOIN_TURNTABLE\tNão é possível juntar a partir de um virador de "
+"locomotivas, tentar no outro sentido"
+
+#: ../../../../build/work/app/help/messages.h:31
+#, fuzzy
+msgid "MSG_JOIN_CORNU_SAME\tCannot Join; Selected endpoints are on same track."
+msgstr ""
+"MSG_JOIN_SAME\tNão é possível juntar; Extremidades selecionadas estão na "
+"mesma linha."
+
+#: ../../../../build/work/app/help/messages.h:32
+msgid "MSG_JOIN_SAME\tCannot Join; Selected endpoints are on same track."
+msgstr ""
+"MSG_JOIN_SAME\tNão é possível juntar; Extremidades selecionadas estão na "
+"mesma linha."
+
+#: ../../../../build/work/app/help/messages.h:33
+msgid ""
+"MSG_SELECTED_TRACKS_PARALLEL\tCannot Join; Selected tracks are parallel."
+msgstr ""
+"MSG_SELECTED_TRACKS_PARALLEL\tNão é possível juntar; Trilhos selecionados "
+"estão paralelos."
+
+#: ../../../../build/work/app/help/messages.h:34
+#, c-format
+msgid ""
+"MSG_PRMFIL_OPEN_NEW\tCannot open New Parameter File: FILENAME\tCannot open "
+"New Parameter File: %s"
+msgstr ""
+"MSG_PRMFIL_OPEN_NEW\tNão é possível abrir novo arquivo de parâmetros: "
+"FILENAME\tNão é possível abrir novo arquivo de parâmetros: %s"
+
+#: ../../../../build/work/app/help/messages.h:35
+msgid "MSG_LAYER_SEL_FROZEN\tCannot select a frozen layer"
+msgstr "MSG_LAYER_SEL_FROZEN\tNão é possível selecionar uma camada congelada"
+
+#: ../../../../build/work/app/help/messages.h:36
+msgid ""
+"MSG_GRID_SHOW_SPACE_GTR_0\tCannot Show Grid; spacing must be greater than 0"
+msgstr ""
+"MSG_GRID_SHOW_SPACE_GTR_0\tNão é possível exibir grade; Espaçamento deve ser "
+"maior que zero"
+
+#: ../../../../build/work/app/help/messages.h:37
+#, c-format
+msgid "MSG_CANT_SPLIT_TRK\tCannot split TYPE track\tCannot split %s track"
+msgstr ""
+"MSG_CANT_SPLIT_TRK\tNão é possível seccionar trilho do tipo TYPE\tNão é "
+"possível seccionar trilho do tipo %s"
+
+#: ../../../../build/work/app/help/messages.h:38
+#, c-format
+msgid ""
+"MSG_CUSTMGM_CANT_WRITE\tCannot write to parameter file: FILENAME\tCannot "
+"write to parameter file: %s"
+msgstr ""
+"MSG_CUSTMGM_CANT_WRITE\tNão é possível escrever no arquivo: FILENAME\tNão é "
+"possível escrever no arquivo: %s"
+
+#: ../../../../build/work/app/help/messages.h:39
+msgid "MSG_CARIMP_DUP_INDEX\tCar Index number duplicated."
+msgstr "MSG_CARIMP_DUP_INDEX\tÍndice do material rodante duplicado."
+
+#: ../../../../build/work/app/help/messages.h:40
+msgid ""
+"MSG_CONN_PARAMS_TOO_SMALL\tConnection parameters reset to minimum values."
+msgstr ""
+"MSG_CONN_PARAMS_TOO_SMALL\tParâmetros de conexão restaurados aos valores "
+"mínimos."
+
+#: ../../../../build/work/app/help/messages.h:41
+#, fuzzy
+msgid "MSG_CONN_PARAMS_TOO_BIG\tConnection parameters reset to maximum values."
+msgstr ""
+"MSG_CONN_PARAMS_TOO_SMALL\tParâmetros de conexão restaurados aos valores "
+"mínimos."
+
+#: ../../../../build/work/app/help/messages.h:42
+msgid "MSG_CANT_PASTE\tCopy/Paste buffer is empty. There is nothing to Paste."
+msgstr ""
+"MSG_CANT_PASTE\tEspaço para copiar/colar está vazio. Não há nada a colar."
+
+#: ../../../../build/work/app/help/messages.h:43
+msgid ""
+"MSG_TODSGN_CROSSOVER_TOO_SHORT\tCrossover length is too short. Correct..."
+"\tCrossover length is too short. Correct\n"
+"inappropriate value(s) and try again."
+msgstr ""
+"MSG_TODSGN_CROSSOVER_TOO_SHORT\tComprimento do sobrecruzamento é muito "
+"pequeno. Corrigir...\tComprimento do sobrecruzamento é muito pequeno. "
+"Corrigir\n"
+"valores inapropriados e tentar novamente."
+
+#: ../../../../build/work/app/help/messages.h:44
+msgid "MSG_CURVE_TOO_LARGE\tCurved track is too large."
+msgstr "MSG_CURVE_TOO_LARGE\tTrecho curvo muito aberto."
+
+#: ../../../../build/work/app/help/messages.h:45
+msgid ""
+"MSG_TODSGN_REPLACE\tDefinition name is already in use. Saving this..."
+"\tDefinition name is already in use. Saving this\n"
+"definition replaces the existing definition.\n"
+"\n"
+"Do you want to continue?"
+msgstr ""
+"MSG_TODSGN_REPLACE\tNome da definição já utilizado. Salvar esta...\tNome da "
+"definição já utilizado. Salvar esta\n"
+"definição substitui a existente.\n"
+"\n"
+"Você deseja continuar?"
+
+#: ../../../../build/work/app/help/messages.h:46
+msgid "MSG_SAVE_CHANGES\tDo you want to save the changes made to your Layout?"
+msgstr ""
+"MSG_SAVE_CHANGES\tVocê deseja salvar as alterações feitas no seu layout?"
+
+#: ../../../../build/work/app/help/messages.h:47
+msgid ""
+"MSG_CARIMP_DUP_COLUMNS\tDuplicate column headers found in Car Import file."
+msgstr ""
+"MSG_CARIMP_DUP_COLUMNS\tNomes de colunas duplicados encontrados no material "
+"rodante importado."
+
+#: ../../../../build/work/app/help/messages.h:48
+msgid "MSG_EP_ON_PATH\tEndpoint already on Path."
+msgstr "MSG_EP_ON_PATH\tExtremidade ainda no caminho."
+
+#: ../../../../build/work/app/help/messages.h:49
+#, c-format
+msgid ""
+"MSG_UPGRADE_VERSION1\tFile version %ld is greater than supported...\tFile "
+"version %ld is greater than supported\n"
+"version %d. You need to upgrade %s\n"
+"to at least version %s."
+msgstr ""
+"MSG_UPGRADE_VERSION1\tVersão do arquivo %ld é maior que a versão...\tVersão "
+"do arquivo %ld é maior que a versão\n"
+"suportada %d. Você precisa atualizar a %s\n"
+"para a versão %s pelo menos."
+
+#: ../../../../build/work/app/help/messages.h:50
+#, c-format
+msgid ""
+"MSG_UPGRADE_VERSION2\tFile version %ld is greater than supported...\tFile "
+"version %ld is greater than supported\n"
+"version %d. You need to upgrade your\n"
+"version of %s"
+msgstr ""
+"MSG_UPGRADE_VERSION2\tVersão %ld do arquivo é maior que a versão...\tVersão %"
+"ld do arquivo é maior que a versão\n"
+"suportada %d. Você precisa atualizar sua versão\n"
+"de %s"
+
+#: ../../../../build/work/app/help/messages.h:51
+#, c-format
+msgid ""
+"MSG_LAYOUT_LINES_SKIPPED\tWhile processing Layout file %s, %d lines were "
+"skipped because they were not recognized."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:52
+#, fuzzy, c-format
+msgid ""
+"MSG_PARAM_UPGRADE_VERSION1\tFile version %ld is greater than supported..."
+"\tFile version %ld is greater than supported\n"
+"version %d. You need to upgrade %s\n"
+"to at least version %s."
+msgstr ""
+"MSG_UPGRADE_VERSION1\tVersão do arquivo %ld é maior que a versão...\tVersão "
+"do arquivo %ld é maior que a versão\n"
+"suportada %d. Você precisa atualizar a %s\n"
+"para a versão %s pelo menos."
+
+#: ../../../../build/work/app/help/messages.h:53
+#, fuzzy, c-format
+msgid ""
+"MSG_PARAM_UPGRADE_VERSION2\tFile version %ld is greater than supported..."
+"\tFile version %ld is greater than supported\n"
+"version %d. You need to upgrade your\n"
+"version of %s"
+msgstr ""
+"MSG_UPGRADE_VERSION2\tVersão %ld do arquivo é maior que a versão...\tVersão %"
+"ld do arquivo é maior que a versão\n"
+"suportada %d. Você precisa atualizar sua versão\n"
+"de %s"
+
+#: ../../../../build/work/app/help/messages.h:54
+#, c-format
+msgid ""
+"MSG_PARAM_LINES_SKIPPED\tWhile processing Parameter file %s, %d lines were "
+"skipped because they were not recognized."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:55
+#, fuzzy
+msgid ""
+"MSG_MOVE_POINTS_OTHER_SIDE\tFrog angle prevents placement of points. Move "
+"points to opposite side of frog."
+msgstr ""
+"MSG_MOVE_POINTS_OTHER_SIDE\tÂngulo do jacaré impede posicionamento dos "
+"pontos....\tÂngulo do jacaré impede posicionamento dos pontos.\n"
+"Mova os pontos para o lado oposto do jacaré."
+
+#: ../../../../build/work/app/help/messages.h:56
+msgid "MSG_NO_ROOM_BTW_TRKS\tInsufficient space between existing stall tracks."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:57
+#, c-format
+msgid ""
+"MSG_JOIN_DIFFER_ELEV\tJoining tracks with differing elevations (N.NNN)"
+"\tJoining tracks with differing elevations (%0.2f)"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:58
+msgid "MSG_TRK_DESC_NOT_VISIBLE\tLabel description is hidden"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:59
+msgid "MSG_DESC_NOT_VISIBLE\tLabel descriptions not visible"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:60
+msgid "MSG_OBJECT_TOO_SHORT\tLength of object is too short."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:61
+#, c-format
+msgid ""
+"MSG_PRINT_MAX_SIZE\tMaximum allowed page size is W x H\tMaximum allowed page "
+"size is %s x %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:62
+msgid ""
+"MSG_NO_PRINTER_SELECTED\tPlease select a printer from the Print Setup dialog."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:63
+#, c-format
+msgid ""
+"MSG_PRMFIL_NO_CONTENTS\tNew Parameter File has no CONTENTS line: FILENAME."
+"\tNew Parameter File has no CONTENTS line: %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:64
+msgid ""
+"MSG_NO_CARS\tNo Cars are defined for the current scale....\tNo Cars are "
+"defined for the current scale.\n"
+"\n"
+"Do you want to use the Car Inventory dialog?"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:65
+msgid ""
+"MSG_NO_CARPROTO\tNo Car Prototypes are defined....\tNo Car Prototypes are "
+"defined.\n"
+"Load a Prototype definition file using the\n"
+"Parameter Files dialog or create a Prototype\n"
+"definition using the Car Prototype dialog."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:66
+msgid "MSG_CARIMP_NO_DATA\tNo data present in Car Import file."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:67
+msgid "MSG_PRINT_NO_PAGES\tNo pages selected for printing."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:68
+msgid "MSG_NO_PATH_TO_EP\tNo path between Profile and selected endpoint."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:69
+#, c-format
+msgid ""
+"MSG_PRMFIL_NO_MAP\tNo Parameter File Map for CONTENTS\tNo Parameter File Map "
+"for %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:70
+msgid "MSG_NO_SELECTED_TRK\tNo track(s) selected!"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:71
+msgid ""
+"MSG_NO_EMPTY_LAYER\tNo layer was found that has no contents, so the module "
+"can not be imported"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:72
+#, c-format
+msgid ""
+"MSG_NO_TURNOUTS_AVAILABLE\tNo Turnouts|Structures are available.\tNo %s are "
+"available."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:73
+msgid ""
+"MSG_CARDESC_VALUE_ZERO\tNumeric values on the Car Description...\tNumeric "
+"values on the Car Description\n"
+"dialog must be greater than 0."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:74
+msgid "MSG_MOVE_OUT_OF_BOUNDS\tObject has moved beyond room boundaries."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:75
+msgid ""
+"MSG_PARALLEL_SEP_GTR_0\tParallel separation must be greater than 0, or the "
+"new guage must be different than the old."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:76
+msgid ""
+"MSG_CARPART_DUPNAME\tPart Number for this Manufacturer already exists...."
+"\tPart Number for this Manufacturer already exists.\n"
+"\n"
+"Do you want to update it?"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:77
+#, c-format
+msgid ""
+"MSG_PLAYBACK_LISTENTRY\tPlayback: Cannot find list entry: NAME\tPlayback: "
+"Cannot find list entry: %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:78
+#, c-format
+msgid ""
+"MSG_PLAYBACK_VERSION_UPGRADE\tPlayback file version %ld is...\tPlayback file "
+"version %ld is\n"
+"greater than supported version %d\n"
+"You need to upgrade your version of %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:79
+#, c-format
+msgid ""
+"MSG_DOMOUSE_BAD_OP\tPlayback: unknown action NNN\tPlayback: unknown action %d"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:80
+msgid "MSG_MOVE_POINTS_AWAY_CLOSE\tPoints are to close to frog; move away."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:81
+msgid "MSG_POLY_SHAPES_3_SIDES\tPoly shapes must have at least 3 sides."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:82
+msgid "MSG_POLY_MULTIPLE_SELECTED\tCan't delete multiple points at once"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:83
+msgid ""
+"MSG_CARPROTO_DUPNAME\tPrototype name already exists....\tPrototype name "
+"already exists.\n"
+"\n"
+"Do you want to update it?"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:84
+msgid "MSG_RADIUS_GTR_0\tRadius must be greater than 0."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:85
+msgid "MSG_RADIUS_GTR_10000\tRadius must be less than 10000."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:86
+msgid ""
+"MSG_RADIUS_TOO_BIG\tThe Circle or Helix will not fit within the layouts room "
+"parameters (Height and Width)."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:87
+#, c-format
+msgid ""
+"MSG_RESCALE_TOO_BIG\tRescaled tracks do not fit within layouts room "
+"parameters...\tRescaled tracks do not fit within layouts room parameters\n"
+"(Height and width). The layouts room parameters should be\n"
+"set to at least %s by %s."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:88
+msgid ""
+"MSG_CARIMP_MISSING_COLUMNS\tRequired column headers missing from Car Import "
+"file."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:89
+#, c-format
+msgid ""
+"MSG_2ND_TRK_NOT_SEL_UNSEL\tSecond track must be selected|unselected\tSecond "
+"track must be %s."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:90
+msgid "MSG_OUT_OF_BOUNDS\tSelected page is out of bounds."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:91
+msgid "MSG_SEL_POS_FIRST\tSelect position prior to entering Text."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:92
+msgid ""
+"MSG_CARPROTO_BADSEGS\tSelected shapes must define a rectangular area ..."
+"\tSelected shapes must define a rectangular\n"
+"area with length greater than height."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:93
+msgid ""
+"MSG_TOO_FAR_APART_DIVERGE\tSelected tracks deviate too much or are too far "
+"apart from each other."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:94
+msgid "MSG_COMMAND_DISABLED\tSpecified command disabled."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:95
+msgid "MSG_SPLIT_POS_BTW_MERGEPTS\tSplit position between Turnout Points"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:96
+msgid "MSG_SPLIT_PATH_NOT_UNIQUE\tSplit position not on unique path"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:97
+#, c-format
+msgid ""
+"MSG_CARIMP_MISSING_DIMS\tThe following car has no dimensions and a...\tThe "
+"following car has no dimensions and a\n"
+"Car Part description can not be found.\n"
+"\n"
+"%s\n"
+"\n"
+"Do you wish to continue importing other Cars?"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:98
+#, c-format
+msgid ""
+"MSG_CARIMP_MISSING_PARTNO\tThe following car has no Part Number...\tThe "
+"following car has no Part Number\n"
+"\n"
+"%s\n"
+"\n"
+"Do you wish to continue importing other Cars?"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:99
+#, c-format
+msgid ""
+"MSG_CARIMP_IGNORED_COLUMN\tThe following column in the Car Import file will "
+"be ignored:...\tThe following column in the Car Import file will be "
+"ignored:\n"
+"\n"
+"%s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:100
+msgid ""
+"MSG_CANT_MOVE_UNDER_TRAIN\tThe position of a turnout or turntable cannot be "
+"changed while occupied by a train."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:101
+msgid ""
+"MSG_STRUCT_NO_STRUCTS\tThere are no structures to choose from in the "
+"structure...\tThere are no structures to choose from in the structure\n"
+"selection list. Please check your SCALE, select the\n"
+"<File|Parameter Files> menu to load a Parameter File or\n"
+"create a new Structure with the Group command."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:102
+msgid ""
+"MSG_TURNOUT_NO_TURNOUT\tThere are no turnouts to choose from in the "
+"turnout...\tThere are no turnouts to choose from in the turnout\n"
+"selection list. Please check your SCALE, select the\n"
+"<Manage|Turnout Designer> menu to enter a new turnout\n"
+"or select the <File|Parameter Files> menu to load a\n"
+"Parameter File"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:103
+msgid "MSG_NO_UNCONN_EP\tThere are no unconnected end points for this track"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:104
+msgid "MSG_PULL_FEW_SECTIONS\tThere are too few sections in this loop."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:105
+msgid "MSG_NO_REDO\tThere is nothing to redo!"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:106
+msgid "MSG_NO_UNDO\tThere is nothing to undo!"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:107
+msgid "MSG_TOOMANYSEGSINGROUP\tToo many segments in Group."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:108
+msgid "MSG_CANNOT_CHANGE\tTrack cannot be changed."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:109
+msgid "MSG_POINT_INSIDE_TURNTABLE\tTrack endpoint is within turntable radius."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:110
+msgid ""
+"MSG_MOVE_POINTS_AWAY_NO_INTERSECTION\tTrack intersection not possible; move "
+"points away from frog."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:111
+#, c-format
+msgid ""
+"MSG_TRK_TOO_SHORT\tTrack is too short by N.NNN\t%strack is too short by %0.3f"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:112
+#, c-format
+msgid ""
+"MSG_RADIUS_LSS_EASE_MIN\tTrack radius (N.NNN) is smaller than easement "
+"minimum (N.NNN).\tTrack radius (%s) is smaller than easement minimum (%s)."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:113
+msgid ""
+"MSG_CANT_MODIFY_FROZEN_TRK\tTracks in a frozen layer cannot be modified."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:114
+msgid "MSG_CANT_MODIFY_MODULE_TRK\tTracks in a module cannot be modified."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:115
+msgid ""
+"MSG_SEGMENTS_DIFFER\tTurnout definition contains non-track segments...."
+"\tTurnout definition contains non-track segments.\n"
+"\n"
+"Do you want to include them in this update?"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:116
+msgid "MSG_TURNTABLE_DIAM_GTR_0\tTurntable diameter must greater than 0."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:117
+#, c-format
+msgid ""
+"MSG_UNDO_ASSERT\tUndo assertion failure %s:%d...\tUndo assertion failure %s:%"
+"d\n"
+"Val = %ld(%lx)\n"
+"%s\n"
+"Please report this error to the XTrackCAD project development team at "
+"SourceForge."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:118
+#, c-format
+msgid ""
+"MSG_PROG_CORRUPTED\tCritical file damaged!...\tCritical file damaged!\n"
+"\n"
+"%s is corrupt.\n"
+"\n"
+"Please reinstall software."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:119
+#, c-format
+msgid ""
+"MSG_ENTERED_STRING_TRUNCATED\tThe entered text is too long. Maximum length "
+"is %d."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:120
+#, c-format
+msgid "MSG_PT_IS_NOT_TRK\t[X Y] is not a track\t[%s %s] is not a track."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:121
+msgid ""
+"MSG_BITMAP_SIZE_WARNING\tYou have specified a large Bitmap....\tYou have "
+"specified a large Bitmap.\n"
+"\n"
+"Are you sure you want to continue?"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:122
+#, c-format
+msgid "Are you sure you want to delete these %d car(s)?"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:123
+#, c-format
+msgid ""
+"Cannot open %s file:\n"
+"%s:%s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:124
+#, fuzzy, c-format
+msgid "Cannot create directory: %s - %s"
+msgstr "Não foi possível criar %s"
+
+#: ../../../../build/work/app/help/messages.h:125
+#, fuzzy, c-format
+msgid "Cannot open directory: %s"
+msgstr "Não foi possível criar %s"
+
+#: ../../../../build/work/app/help/messages.h:126
+#, c-format
+msgid "Path for deletion is not a directory: %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:127
+#, c-format
+msgid "Open failed for directory: %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:128
+#, c-format
+msgid "Can't add directory record %s to zip - %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:129
+#, c-format
+msgid "Can't add file record %s to zip at %s - %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:130
+#, fuzzy, c-format
+msgid "Can't create zip %s - %s"
+msgstr "Não foi possível criar %s"
+
+#: ../../../../build/work/app/help/messages.h:131
+#, c-format
+msgid "Close failure for zip %s - %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:132
+#, c-format
+msgid "Rename failure for zip from %s to %s - %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:133
+#, c-format
+msgid "Open failure for zip %s - %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:134
+#, c-format
+msgid "Index failure for zip %s - %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:135
+#, c-format
+msgid "Open read file failure %s %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:136
+#, c-format
+msgid "Open file in zip failure %s %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:137
+#, c-format
+msgid "Unlink failed for: %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:138
+#, c-format
+msgid "Remove Directory failed for: %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:139
+#, c-format
+msgid "Cannot save archive to %s from directory: %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:140
+#, c-format
+msgid "Cannot save manifest file to %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:141
+#, fuzzy, c-format
+msgid "Cannot open manifest file %s"
+msgstr "Não foi possível criar %s"
+
+#: ../../../../build/work/app/help/messages.h:142
+#, c-format
+msgid "Cannot unpack file: %s for file: %s in directory: %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:143
+#, fuzzy, c-format
+msgid "Cannot open file %s"
+msgstr "Não foi possível criar %s"
+
+#: ../../../../build/work/app/help/messages.h:144
+#, c-format
+msgid "Cannot copy file %s into directory %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:145
+#, c-format
+msgid "Unrecognized Option: %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:146
+#, c-format
+msgid ""
+"End-Of-Line is unexpected in a quoted field.\n"
+"%s\n"
+"\n"
+"Do you want to continue reading the file?"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:147
+#, c-format
+msgid ""
+"A comma was expected after this quoted field.\n"
+"%s\n"
+"\n"
+"Do you want to continue reading the file?"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:148
+#, c-format
+msgid ""
+"Error \\\\\"%s\\\\\" occurred while writing %s.\n"
+"Please check disk space and system status."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:149
+#, c-format
+msgid ""
+"At least one path for the Turnout T%d does not\n"
+"terminate on an endpoint. Such a track cannot be grouped.\n"
+"The track has been unselected."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:150
+msgid "inv-pathEndTrk on Path."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:151
+msgid "inv-pathStartTrk on Path"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:152
+#, c-format
+msgid "%s:%d- %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:153
+msgid "pathEndTrk not on Path."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:154
+msgid "pathStartTrk not on Path."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:155
+msgid ""
+"The tracks cannot be connected together.\n"
+"\n"
+"Try changing some tracks for a closer fit\n"
+"or increase the Connection Angle value on\n"
+"the Preferences dialog."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:156
+msgid ""
+"The tracks cannot be connected together.\n"
+"\n"
+"Try changing some tracks for a closer fit\n"
+"or increase the Connection Distance and\n"
+"Angle values on the Preferences dialog"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:157
+msgid ""
+"The tracks cannot be connected together.\n"
+"\n"
+"Try changing some tracks for a closer fit\n"
+"or increase the Connection Distance"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:158
+msgid ""
+"The first track for the Align\n"
+"Rotate command must be Selected."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:159
+msgid ""
+"The second track for the Align\n"
+"Rotate command must be Unselected."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:160
+msgid "Too many selected tracks, drawing tracks as End Point."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:161
+msgid "Select an endpoint between two tracks."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:162
+msgid ""
+"According to values that have been entered the diverging\n"
+"track does not connect with the tangent track. Please\n"
+"check the values entered and try again. Check the angle\n"
+"is entered as a frog number or in degrees as specified\n"
+"by Angle Mode radio buttons."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:163
+msgid "Moved before the end of the turnout"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:164
+msgid ""
+"The Coupled Length must be greater than the Car Length,\n"
+"and the Coupler Length must be greater than 0."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:165
+msgid ""
+"The Car Length value must be greater\n"
+"than the Car Width value."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:166
+msgid ""
+"The specified Index is already in use.\n"
+"The Index will be updated to the next available value."
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:167
+msgid ""
+"You have changed values for this object.\n"
+"\n"
+"Are you sure you want to Close?"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:168
+#, c-format
+msgid ""
+"File version %ld is lower than the minimum\n"
+"supported version %d. You need to update your\n"
+"layout file using an older version of %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:169
+#, c-format
+msgid ""
+"File version %ld is lower than the minimum\n"
+"supported version %d.This parameter file will only work using an older "
+"version of %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:170
+#, c-format
+msgid ""
+"%s cannot read the demo file:\n"
+"%s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:171
+#, c-format
+msgid "doDemo: bad number (%d)"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:172
+msgid "Playback TIMEEND without TIMESTART"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:173
+#, c-format
+msgid ""
+"Unknown playback command (%d)\n"
+"%s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:174
+#, c-format
+msgid ""
+"Playback file version %ld is lower than the\n"
+"minimum supported version %d.\n"
+"You need to update your layout file using an\n"
+"older version of %s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:175
+#, c-format
+msgid "Scale index (%d) is not valid"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:176
+#, c-format
+msgid ""
+"Scale %s is not valid\n"
+"Please check your %s.xtq file"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:177
+msgid "Cannot extend a helix"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:178
+msgid "Cannot trim a helix"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:179
+msgid "Ignore further audit notices?"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:180
+#, c-format
+msgid "%s"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:181
+msgid "Audit Abort?"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:182
+msgid "Write Audit File?"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:183
+#, c-format
+msgid "checkTrackLength: Short track length = %0.3f"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:184
+#, c-format
+msgid "checkTrackLength: unknown type: %d"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:185
+#, c-format
+msgid "connectTracks: T%d[%d] T%d[%d] d=%0.3f a=%0.3f"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:186
+#, c-format
+msgid "GetAngleAtPoint: bad type(%d) for T(%d)"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:187
+#, c-format
+msgid "joinTracks: invalid track type=%d"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:188
+#, c-format
+msgid "resolveIndex: T%d[%d]: T%d doesn\\\\'t exist"
+msgstr ""
+
+#: ../../../../build/work/app/help/messages.h:189
+msgid "Moved beyond the end of the track"
+msgstr "Movido além do fim do trilho"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:9
+#, fuzzy
+msgid "Invokes online help for this dialog"
+msgstr "Invoca ajuda on-line para esta caixa de diálogo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:10
+msgid "Cancels this command"
+msgstr "Anula este comando"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:11
+msgid "Closes the dialog"
+msgstr "Fecha a caixa de diálogo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:12
+#, fuzzy
+msgid "About program dialog"
+msgstr "Caixa de diálogo \"Sobre\""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:13
+#, fuzzy
+msgid "Move selected object to top"
+msgstr "Move objeto selecionado para o topo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:14
+#, fuzzy
+msgid "Raise or lower all selected tracks"
+msgstr "Eleva ou abaixa todo trecho selecionado"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:15
+msgid "Turn magnetic snap on or off"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:16
+#, fuzzy
+msgid "Move selected object to bottom"
+msgstr "Move objeto selecionado para o fundo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:17
+msgid "Create a section of track for automation"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:18
+#, fuzzy
+msgid "Edit a block definition "
+msgstr "Cria uma nova definição de AMV"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:19
+msgid "Create a new Car/Loco description"
+msgstr "Cria uma nova descrição do material rodante"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:20
+msgid "Manage your Car and Loco Inventory"
+msgstr "Gerencia seu inventário de material rodante"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:21
+msgid "Create track circle from center"
+msgstr "Cria trilho circular a partir do centro"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:22
+msgid "Create fixed radius track circle"
+msgstr "Cria trilho circular com um raio fixo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:23
+msgid "Set Circle Track creation mode"
+msgstr "Configura modo de criação de trilho circular"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:24
+msgid "Create track circle from tangent"
+msgstr "Cria trilho circular a parti da tangente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:25
+msgid "Removes elevation from Selected tracks"
+msgstr "Remove inclinação dos trechos selecionados"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:26
+msgid "Copy objects to clipboard and duplicate them in exactly the same place"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:27
+msgid "Command Options dialog"
+msgstr "Caixa de dialogo das opções de comando"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:28
+msgid "Controls colors"
+msgstr "Cores dos controles"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:29
+msgid "Connect two tracks"
+msgstr "Conecta dois trilhos"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:30
+msgid "Create a control for layout automation"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:31
+#, fuzzy
+msgid "Select control element to create"
+msgstr "Elementos de controle de layout"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:32
+#, fuzzy
+msgid "Manage control elements"
+msgstr "Elementos de controle de layout"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:33
+#, fuzzy
+msgid "Set Convert mode"
+msgstr "Configura modo de criação de curva"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:34
+msgid "Convert from Fixed Track to Cornu"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:35
+msgid "Convert from Cornu and Bezier to Fixed Track"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:36
+msgid "Copy selected objects to clipboard"
+msgstr "Copia objetos selecionados para a área de transferencia"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:37
+#, fuzzy
+msgid "Create Cornu track"
+msgstr "Criar Bloco"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:38
+msgid "Create curved track from center"
+msgstr "Cria trilho curvado a partir de um centro"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:39
+msgid "Create curved track from chord"
+msgstr "Cria trilho curvado a partir de uma corda"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:40
+msgid "Create curved track from end-point"
+msgstr "Cria trilho curvado a partir de uma extremidade"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:41
+#, fuzzy
+msgid "Create Bezier track"
+msgstr "Criar trecho em hélice"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:42
+msgid "Set Curve Track creation mode"
+msgstr "Configura modo de criação de curva"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:43
+msgid "Create curved track from tangent"
+msgstr "Cria trecho curvado a partir de um tangente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:44
+msgid "Manipulate Custom designer entries"
+msgstr "Manipula entradas do editor personalizado"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:45
+msgid "Moves selected objects to clipboard"
+msgstr "Move objetos selecionados para a área de transferencia"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:46
+msgid "Delete objects"
+msgstr "Elimina objetos"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:47
+msgid "Playback demos"
+msgstr "Playback de demonstrações"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:48
+msgid "Change Object Properties"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:49
+msgid "Change to properties mode"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:50
+msgid "Deselect all selected objects"
+msgstr "Deseleciona todos os objetos"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:51
+msgid "Change Display parameters"
+msgstr "Altera parâmetros das janelas"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:52
+msgid "Create benchwork"
+msgstr "Cria bancada"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:53
+msgid "Create a box"
+msgstr "Cria um retângulo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:54
+msgid "Set Circle drawing command"
+msgstr "Configura comando de desenho de circunferência"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:55
+msgid "Create a circle"
+msgstr "Cria circunferência"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:56
+msgid "Draw a circle line from center"
+msgstr "Desenha uma circunferência a partir do centro"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:57
+msgid "Draw a fixed radius circle line"
+msgstr "Desenha uma circunferência com um raio fixo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:58
+msgid "Draw a circle line from tangent"
+msgstr "Desenha uma circunferência a partir de uma tangente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:59
+msgid "Set Curve drawing command"
+msgstr "Configura comando de desenho de circunferência"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:60
+msgid "Create a curved line"
+msgstr "Cria uma linha curva"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:61
+msgid "Create a curved line from End"
+msgstr "Cria uma linha curva a partir de uma extremidade"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:62
+msgid "Create a curved line from center"
+msgstr "Cria uma linha curva a partir de um centro"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:63
+msgid "Create a curved line from chord"
+msgstr "Cria uma linha curva a partir de uma corda"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:64
+msgid "Create a curved line from tangent"
+msgstr "Cria uma linha curva a partir de uma tangente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:65
+#, fuzzy
+msgid "Create a Bezier line"
+msgstr "Cria uma linha curva"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:66
+msgid "Create a dimension line"
+msgstr "Cria uma linha de uma dimensão"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:67
+msgid "Create a filled box"
+msgstr "Cria um retângulo preenchido"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:68
+msgid "Create a filled circle"
+msgstr "Cria um círculo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:69
+msgid "Draw a filled circle from center"
+msgstr "Desenha um círculo a partir de um centro"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:70
+msgid "Draw a fixed radius filled circle"
+msgstr "Desenha um círculo com um raio fixo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:71
+msgid "Draw a filled circle from tangent"
+msgstr "Desenha um círculo a partir de uma tangente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:72
+#, fuzzy
+msgid "Create a polygon"
+msgstr "Cria uma linha poligonal"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:73
+msgid "Create a filled polygon"
+msgstr "Cria um polígono preenchido"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:74
+msgid "Create a polyline"
+msgstr "Cria uma linha poligonal"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:75
+msgid "Create a straight line"
+msgstr "Cria uma linha reta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:76
+msgid "Set Line drawing command"
+msgstr "Configura comando de desenho de linha"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:77
+msgid "Set Shape drawing command"
+msgstr "Configura comando de desenho de polígonos"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:78
+msgid "Draw table edge"
+msgstr "Desenha limite do tablado"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:79
+msgid "Easement menu"
+msgstr "Menu de curva de transição"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:81
+msgid "Generate a Parts List of selected objects"
+msgstr "Gera uma lista de itens dos objetos selecionados"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:82
+msgid "Set Import/Export mode"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:83
+msgid "Export a .xti file"
+msgstr "Expota um arquivo XTI"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:84
+msgid "Export a DXF file"
+msgstr "Exporta um arquivo DXF"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:86
+msgid "Flip selected objects"
+msgstr "Vira objetos selecionados"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:87
+msgid "Adjust snap grid"
+msgstr "Ajusta grade"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:88
+msgid "Enable snap grid"
+msgstr "Habilita grade"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:89
+msgid "Show snap grid"
+msgstr "Mostra grade"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:90
+msgid "Create a structure from a Group of objects"
+msgstr "Cria uma estrutura a partir de um grupo de objetos"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:91
+msgid "Create a hand-laid turnout"
+msgstr "Cria um AMV personalizado"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:92
+msgid "Create a track helix"
+msgstr "Cria trilho em hélice"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:93
+msgid "Import a .xti file"
+msgstr "Importa um arquivo XTI"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:94
+#, fuzzy
+msgid "Import an .xti file as a Module"
+msgstr "Importa um arquivo XTI"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:95
+msgid "Join two tracks"
+msgstr "Junta dois trilhos"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:96
+msgid "Join two lines or polylines"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:97
+msgid "Set Join mode"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:98
+msgid "Change Layers"
+msgstr "Muda camadas"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:99
+msgid "Selects the current drawing layer"
+msgstr "Seleciona a camada de desenho corrente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:100
+msgid "Layout parameters"
+msgstr "Parâmetros de layout"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:102
+#, fuzzy
+msgid "Show/Hide Map Window"
+msgstr "Mostrar/Ocultar camada"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:103
+msgid "Modify or extend a track"
+msgstr "Modifica ou estende trilho"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:104
+msgid "Change To modify mode"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:105
+msgid "Move selected objects"
+msgstr "Move objetos selecionados"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:106
+msgid "Move a label"
+msgstr "Move uma etiqueta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:107
+msgid "Move selected objects to current layer"
+msgstr "Move objetos selecionados para a camada corrente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:109
+#, fuzzy
+msgid "Print a bitmap"
+msgstr "Imprime um bitmap"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:110
+#, fuzzy
+msgid "Pan or zoom the layout"
+msgstr "Posiciona material rodante no layout"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:111
+msgid "Change to zoom/pan mode"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:112
+msgid "Create a parallel track"
+msgstr "Cria um trilho paralelo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:113
+#, fuzzy
+msgid "Create a parallel line"
+msgstr "Cria um trilho paralelo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:114
+#, fuzzy
+msgid "Set Parallel mode"
+msgstr "Paralelo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:115
+msgid "Register"
+msgstr "Registra"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:116
+msgid "Copy objects from clipboard"
+msgstr "Copia objetos da área de transferencia"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:117
+msgid "Perferences dialog"
+msgstr "Caixa de diálogo de preferências"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:118
+msgid "Display prices of turnouts, sectional tracks and structures"
+msgstr "Exibe preços de AMVs, trilhos e estruturas"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:119
+msgid "Print the layout"
+msgstr "Imprime o layout"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:120
+#, fuzzy
+msgid "Loads and unloads parameter files into/from toolbar"
+msgstr "Carrega e descarrega arquivo de parâmetros"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:121
+msgid "Elevation Profile Command"
+msgstr "Comando de perfil de inclinação"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:123
+msgid "Command recorder"
+msgstr "Comando de gravação"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:125
+msgid "Update selected Turnout and Structure definitions"
+msgstr "Atualiza AMV selecionado e definições de estruturas"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:126
+msgid "Rescale selected objects"
+msgstr "Reescala objetos selecionados"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:127
+msgid "Rotate selected object(s)"
+msgstr "Rotaciona objetos selecionados"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:128
+msgid "Show a ruler"
+msgstr "Exibe régua"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:129
+msgid "Select objects"
+msgstr "Seleciona objetos"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:130
+#, fuzzy
+msgid "Change To Select Mode"
+msgstr "Alterar escala"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:131
+msgid "Selects all objects on the layout"
+msgstr "Seleciona todos os objetos do layout"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:132
+msgid "Selects all objects in the current Layer"
+msgstr "Seleciona todos os objetos da camada corrente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:133
+msgid "Invert current selection"
+msgstr "Inverte seleção"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:134
+msgid "Split a track"
+msgstr "Secciona um trilho"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:135
+msgid "Select stranded (unconnected) track pieces"
+msgstr "Seleciona trecho não conectados"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:136
+msgid "Create a sensor (ie. a occupancy detector or a toggle switch)"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:137
+#, fuzzy
+msgid "Create a signal for train control"
+msgstr "Cria trilho circular a parti da tangente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:138
+msgid "Choose which commands are sticky"
+msgstr ""
+"Escolhe quais comandos são \"grudendos\". Aqueles cujos botões de atalho "
+"continuarão habilitados após seu uso."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:139
+msgid "Create straight track"
+msgstr "Cria um trilho reto"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:140
+msgid "Place a structure on the layout"
+msgstr "Posiciona uma estrutura no layout"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:141
+#, fuzzy
+msgid "Create a switchmotor for turnout control"
+msgstr "Cria uma nova definição de AMV"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:142
+#, fuzzy
+msgid "Edit a switchmotor definition"
+msgstr "Cria uma nova definição de AMV"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:143
+msgid "Enter text on the layout"
+msgstr "Entra um texto no layout"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:144
+#: ../../../../build/work/app/bin/bllnhlp.c:531
+msgid "Controls the size of the entered text"
+msgstr "Controla o tamanho do texto inserido"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:145
+msgid "Plain Text"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:146
+msgid "Tip of the Day window"
+msgstr "Janela de dica do dia"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:147
+msgid "Run Trains"
+msgstr "Roda trens"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:148
+msgid "Change To Run Trains Mode"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:149
+msgid "Pause/Resume Trains"
+msgstr "Pausa / roda trens"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:150
+msgid "Place a car on the layout"
+msgstr "Posiciona material rodante no layout"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:151
+msgid "Exit Trains"
+msgstr "Sai do modo de trem"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:152
+msgid "Hide/Unhide a track"
+msgstr "Oculta / exibe um trilho"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:153
+msgid "Make/Unmake a track a bridge"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:154
+msgid "Place a turnout or sectional track"
+msgstr "Posiciona um AMV ou trilho"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:155
+msgid "Create a new turnout definition"
+msgstr "Cria uma nova definição de AMV"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:156
+msgid "Place a turntable"
+msgstr "Posiciona um virador de locomotivas"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:157
+msgid "Updates old source files with 3 part titles"
+msgstr "Atualiza arquivos antigos com três partes"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:159
+msgid "Ungroup objects"
+msgstr "Desagrupa objetos"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:160
+msgid "Draw tracks with thin lines"
+msgstr "Desenha trilhos com linhas finas"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:161
+msgid "Draw tracks with medium lines"
+msgstr "Desenha trilhos com linhas médias"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:162
+msgid "Draw tracks with thick lines"
+msgstr "Desenha trilhos com linhas grossas"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:163
+msgid "Change drawing scale"
+msgstr "Altera escala de desenho"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:164
+#: ../../../../build/work/app/bin/bllnhlp.c:176
+msgid "Zoom in"
+msgstr "Aproxima"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:165
+#: ../../../../build/work/app/bin/bllnhlp.c:177
+msgid "Zoom out"
+msgstr "Afasta"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:166
+msgid "File Menu"
+msgstr "Menu de arquivo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:167
+msgid "Save layout"
+msgstr "Salva layout"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:168
+msgid "Save layout under a new name "
+msgstr "Salva layout com um novo nome"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:169
+msgid "New layout"
+msgstr "Novo layout"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:170
+msgid "Generate parts list"
+msgstr "Gera lista de itens"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:171
+msgid "Load a layout"
+msgstr "Carrega um layout"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:172
+msgid "Exit the program"
+msgstr "Sai do programa"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:173
+msgid "Revert to last saved state of layout plan"
+msgstr "Reverte para o estado do último layout salvo"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:174
+msgid "Edit menu"
+msgstr "Menu editar"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:175
+msgid "Redraw layout"
+msgstr "Redesenha layout"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:178
+#: ../../../../build/work/app/bin/bllnhlp.c:181
+msgid "Tools menu"
+msgstr "Menu de ferramentas"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:179
+msgid "View menu"
+msgstr "Menu visualizar"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:180
+msgid "Toolbar configuration"
+msgstr "Configuração da barra de ferramentas"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:182
+msgid "Options menu"
+msgstr "Menu de opções"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:183
+msgid "Playback/Record commands"
+msgstr "Comandos de playback e gravação"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:184
+msgid "Window menu"
+msgstr "Menu de janelas"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:185
+msgid "Help menu"
+msgstr "Menu de ajuda"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:186
+msgid "Recent error messages and explanations"
+msgstr "Últimas mensagens de erros e explicações"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:187
+msgid "Move Hot Bar left"
+msgstr "Move barra de itens à esquerda"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:188
+msgid "Move Hot Bar right"
+msgstr "Move barra de itens à direita"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:189
+msgid "Total track count"
+msgstr "Total de trilhos"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:190
+msgid "X Position of cursor"
+msgstr "Posição X do cursor"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:191
+msgid "Y Position of cursor"
+msgstr "Posição Y do cursor"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:192
+msgid "Drawing scale"
+msgstr "Escala de desenho"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:193
+msgid "Message and status line"
+msgstr "Mensagem e linha de status"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:194
+#: ../../../../build/work/app/bin/bllnhlp.c:195
+msgid "Main layout canvas"
+msgstr "Tela de layout principal "
+
+#: ../../../../build/work/app/bin/bllnhlp.c:196
+msgid "Main drawing canvas"
+msgstr "Tela de desenho principal"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:197
+msgid "Command buttons"
+msgstr "Botões dos comandos"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:198
+msgid "Menus"
+msgstr "Menus"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:199
+msgid "Tile, Filename and Window Manager buttons"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:200
+msgid "Turnout and Structure Hot Bar"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:201
+msgid "Active layer list and layer buttons"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:202
+msgid "Map window"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:203
+msgid "This is the portion of the layout shown in the Main Window canvas"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:204
+msgid "Raise or Lower all Selected Track"
+msgstr "Eleva ou abaixa todos os trechos selecionados"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:205
+#, fuzzy
+msgid "Name of block"
+msgstr "Isto não é um bloco!"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:206
+msgid "Script that the block will run"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:207
+msgid "List of tracks in the Block"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:208
+msgid "Add or Update car object"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:209
+msgid "Manufacturer name"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:212
+msgid "Is the Car a Locomotive?"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:213
+msgid "Part Number and Description"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:214
+msgid "Manufacturer Part Number"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:215
+msgid "Use the Selected figure as the car image"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:216
+msgid "Use the default figure as the car image"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:217
+msgid "Optional description of the Car Part"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:218
+msgid "Flip car image"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:219
+msgid "Display Car Item information or reporting marks and dimensions"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:220
+msgid "Full Roadname"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:221
+#: ../../../../build/work/app/bin/bllnhlp.c:222
+msgid "Car Type"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:223
+msgid "Reporting Marks (Roadname abbreviation)"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:224
+#: ../../../../build/work/app/bin/bllnhlp.c:411
+msgid "Car Number"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:225
+msgid "Car body Color"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:226
+msgid "Length of car body"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:227
+msgid "Width of car body"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:228
+msgid "Distance between Trucks "
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:229
+msgid "Distance Trucks are displaced along Car"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:230
+msgid "Coupler are mounted on body or truck"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:231
+msgid "Overall Coupled Length"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:232
+msgid "Coupler Length from end of car"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:233
+msgid "Diagram of Car"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:234
+msgid "Item Index Number"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:235
+msgid "Original Purchase Price"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:237
+msgid "Condition of car"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:238
+msgid "Original Purchase Date"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:239
+msgid "Last Service Date"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:240
+msgid "Number of identical cars to be entered"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:241
+msgid "Do all the cars have the same Number?"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:242
+msgid "Notes about the car"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:243
+#: ../../../../build/work/app/bin/bllnhlp.c:244
+msgid "Create a new car Part or Prototype definitions"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:245
+msgid "Finds the selected Car Item on the layout"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:246
+#: ../../../../build/work/app/bin/bllnhlp.c:247
+#: ../../../../build/work/app/bin/bllnhlp.c:248
+#: ../../../../build/work/app/bin/bllnhlp.c:249
+msgid "Sort the Item list"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:251
+msgid "Edit the selected Car Item"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:252
+msgid "Add a new Car Item"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:253
+msgid "Delete the selected Car Items"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:254
+msgid "Import a Car Item .csv file"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:255
+msgid "Export a Car Item .csv file"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:256
+msgid "Create a text list of the Car Items"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:257
+msgid "Specifies the radius of the circle track"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:258
+msgid "Default command is Describe or Select"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:259
+msgid "Action to invoke on Right-Click"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:260
+msgid ""
+"Replace current selection with clicked object or add clicked object to "
+"selection"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:261
+msgid "Clicking into an empty area clears selection if select mode is <add>"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:263
+#, fuzzy
+msgid "The list of control elements"
+msgstr "Elementos de controle de layout"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:264
+#, fuzzy
+msgid "Edit the element"
+msgstr "Menu editar"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:265
+msgid "Delete the element"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:266
+msgid "Contents Label for new Parameter file"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:267
+msgid "List of custom designed turnouts and structures"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:268
+msgid "Invoke designer editor"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:269
+msgid "Remove selected entries"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:270
+msgid "Copy selected entries to Parameter File"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:271
+msgid "Create a New part or prototype"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:272
+msgid "Update custom file and close"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:273
+msgid "Executes the next step of the demo"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:274
+msgid "Skip to next demo"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:275
+msgid "Stops the demonstration and returns you to XTrackCAD"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:276
+msgid "Select speed of Playback"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:277
+msgid "This is where comments about the demo are displayed"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:314
+msgid "Move the Main canvas if you drag near the edge"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:315
+msgid "Color tracks by layer or individually"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:316
+msgid "Color draw objects by layer or individually"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:317
+msgid "Controls the drawing of hidden tracks"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:318
+msgid "Controls the drawing of End-Points"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:319
+msgid "How to draw track ties"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:320
+msgid "Show crosshair at center of curves"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:321
+msgid "Drawing scale when to draw tracks with 2 rails"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:322
+msgid "Drawing scale of the map window"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:323
+msgid "Whether the main layout is updated while dragging on the Map"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:324
+msgid "Enable labels for Turnouts, Flextrack Lengths and Elevations"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:325
+msgid "When to label Turnout, Flextrack Lengths and Elevations"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:326
+msgid "Font size for labels on layout"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:327
+msgid "Label elements on the Hot Bar"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:328
+msgid "Label elements on layout"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:329
+msgid "Label elements for lists"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:330
+msgid "How to group cars on the Train Hot Bar"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:331
+msgid "Delay (in mS) between updating train movements"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:332
+msgid "Don't show trains in tunnels when tunnels are hidden"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:333
+msgid "Display unconnected endpoints of track with special marks"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:334
+msgid "Whether the Main Drawing Area shows as much of the room as possible"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:336
+msgid "Width of the lines"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:337
+msgid "Color of the lines"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:338
+msgid "List of types of Lumber"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:339
+msgid "Color of Benchwork"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:340
+msgid "Orientation of Benchwork"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:341
+msgid "Size of Dimension Arrows"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:342
+msgid "This controls the sharpness of the easement curve"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:343
+msgid "Minimum radius"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:344
+msgid "Maximum offset"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:345
+msgid "Easement length"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:346
+msgid ""
+"These radio buttons are a short-cut for Values of 0.0, 0.5, 1.0 and 2.0. "
+"None turns Easements off"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:347
+msgid "Complete easement selection"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:348
+msgid "Type of elevation"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:349
+msgid "Height of End Point"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:350
+msgid "Compute elevation based on neighbors"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:351
+msgid "Compute grade based on neighbors"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:352
+msgid "Specify a name for an End-Point"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:354
+msgid "Print parts list"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:355
+#: ../../../../build/work/app/bin/bllnhlp.c:466
+#: ../../../../build/work/app/bin/bllnhlp.c:575
+msgid "Invoke the Print Setup dialog"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:356
+msgid "Save parts list to file"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:357
+msgid "This is the list of parts for the layout"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:358
+msgid "Enable prices on the Parts List"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:359
+#: ../../../../build/work/app/bin/bllnhlp.c:362
+msgid "Spacing between major grid lines"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:360
+#: ../../../../build/work/app/bin/bllnhlp.c:363
+msgid "Allows the spacing to be subdivided"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:361
+#: ../../../../build/work/app/bin/bllnhlp.c:364
+msgid "Specifies if positions are snaped in this direction"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:365
+#: ../../../../build/work/app/bin/bllnhlp.c:366
+#: ../../../../build/work/app/bin/bllnhlp.c:367
+msgid "Shows the origin and angle of the grid"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:368
+msgid "Specifies if the grid is shown"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:369
+msgid "Completes the grid specification"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:373
+msgid "Number of segments in Group"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:374
+msgid "Replace the Selected object with the new definition?"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:375
+msgid "Creates a new Structure (or Turnout)"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:376
+msgid "Elevation difference of Helix End-Points"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:377
+msgid "Helix Radius"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:378
+msgid "Number of turns in the helix"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:379
+msgid "Angle betweek helix entrance and exit"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:380
+msgid "Grade in helix"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:381
+msgid "Separation between helix layers"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:382
+#, fuzzy
+msgid "Desired curve radius between straight tracks"
+msgstr "Cria um trilho reto"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:383
+msgid "Layer list"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:384
+msgid "Layer Name"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:385
+msgid "Color of layer"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:386
+msgid "Layer is drawn on Main window"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:387
+msgid "Layer cannot be changed"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:388
+msgid "Layer is drawn on Map window"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:389
+msgid "Number of layer buttons to show"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:390
+msgid "Number of objects in this layer"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:392
+msgid "Load layer configuration from default"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:393
+msgid "Save current layer configuration as default"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:394
+msgid "Overwrite layer configuration with system default values"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:395
+#: ../../../../build/work/app/bin/bllnhlp.c:396
+msgid "Specifies the size of the room (in inches or centimeters)"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:397
+msgid "Specifies the layout Title that will appear on printouts"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:398
+msgid "Specifies the layout Subtitle that will appear on printouts"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:399
+msgid "Specifies the Modelling Scale"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:400
+msgid "Specifies the rail gauge, ie. the distance between the rails"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:401
+msgid ""
+"Specifies minimum track radius (in inches or centimeters). Tracks with a "
+"smaller radius are considered exceptional."
+msgstr ""
+"Especifica raio mínimo (em centímetros ou em polegadas). Trechos com raios "
+"menores serão considerados excepcionais."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:402
+msgid ""
+"Specifies maximum track elevation expressed as a percent (%). Tracks with a "
+"larger elevation are considered exceptional."
+msgstr ""
+"Especifica inclinação máxima (em porcentagem). Trechos com inclinações "
+"maiores serão considerados excepcionais."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:403
+#, fuzzy
+msgid "Select the background image"
+msgstr "Seleciona a camada de desenho corrente"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:404
+msgid "Remove the background image"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:405
+msgid "Specifies the x offset of the bottom left of the background image"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:406
+msgid "Specifies the y offset of the bottom left of the background image"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:407
+msgid ""
+"Specifies how large the bottom edge of the background image should be in "
+"model units"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:408
+msgid ""
+"Specifies the screening of the background image from 0 (none) to 100% "
+"(vanishes)"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:409
+msgid "Specifies the rotation angle of the background image in degrees"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:412
+msgid ""
+"This is the body of the Note. To change this select Modify from the File "
+"Menu"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:414
+msgid "Specifies number of pixels per inch (or centimeter)"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:416
+msgid ""
+"Specifies whether Layout Titles, Borders or Track Centerlines are printed on "
+"the BitMap"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:417
+msgid ""
+"Specifies the separation between the original track and the parallel track/"
+"line"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:418
+msgid ""
+"Specifies the a factor that increases the seperation as the radius of the "
+"original track reduces. 0.0 means no increase."
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:419
+msgid "Enter your name as specified in the XTrackCAD Registration Notice"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:420
+msgid "Enter the key value as specified in the XTrackCAD Registration Notice"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:421
+msgid "Validates the name and key. Terminates the registration command"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:422
+msgid "0ᅵ is up or to the right"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:423
+msgid "Choose english (inches) or metric (centimeters)"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:424
+msgid "How to display length measurements"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:425
+msgid "Do not create tracks to be shorter than this value"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:426
+msgid "Maximum distance between connected end points"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:427
+msgid "Minimum angle between connected End-Points"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:428
+msgid "Specifies the minimum angle between tracks connected to a turntable"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:429
+msgid "Trains will crash above this speed"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:430
+msgid "Enable/Disable balloon popup help windows"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:431
+msgid "Enable/Disable show of flextrack on hotbar"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:432
+msgid "How far you can move the mouse before its considered a drag"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:433
+msgid "How long you can hold a mouse button down before its considered a drag"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:434
+msgid "Minimum distance (in pixels) between grid lines/ticks"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:435
+#, fuzzy
+msgid ""
+"Specifies the Check Point frequency; number of modifications made since the "
+"last checkpoint."
+msgstr ""
+"Especifica a freqüência de salvamento automático. Isto é, o número de "
+"modificações desde a última gravação."
+
+#: ../../../../build/work/app/bin/bllnhlp.c:436
+msgid "Specifies the number of checkpoints after save before auto-saving."
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:437
+msgid "Resume work on last layout or start with new layout"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:439
+msgid "Updated cost of current selected item"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:441
+msgid "Selection list for prices"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:442
+#: ../../../../build/work/app/bin/bllnhlp.c:443
+#: ../../../../build/work/app/bin/bllnhlp.c:444
+msgid "Price of specified length of flex-track"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:446
+#, fuzzy
+msgid "Controls the printing of a centerline of track cmdPrint"
+msgstr "Controla o tamanho do texto inserido"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:447
+msgid "Controls the reduction (scale) of the printout"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:448
+msgid "Scaled page width (Scale times physical page width)"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:449
+msgid "Sets page size to the maximum (based on scale and physical page size)"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:450
+msgid "Scaled page height (Scale times physical page height)"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:451
+msgid "Sets scale, origin and angle for a one page printout of the layout"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:452
+msgid "Print page in Portrait or Landscape format"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:453
+msgid "Order of printing pages"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:454
+msgid "Print Title, Date, Author and other information at bottom of page?"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:455
+msgid "Ignore unprintable page margins?"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:456
+msgid "Print Registration Marks at 1:1?"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:457
+msgid "Print Snap Grid?"
+msgstr "Linha e divisão da grade"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:458
+msgid "Print Rulers on all page edges?"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:459
+msgid "Print Roadbed Outline?"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:460
+msgid "Print Roadbed Outline"
+msgstr "Imprimir leito dos trilhos"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:461
+#: ../../../../build/work/app/bin/bllnhlp.c:462
+#: ../../../../build/work/app/bin/bllnhlp.c:464
+msgid ""
+"Origin of the print grid. This is useful if you want to reprint a set of "
+"pages"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:463
+msgid "Resets the origin and angle to 0"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:465
+msgid "Deselects all pages"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:467
+msgid "Print selected pages and terminates the print command"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:468
+#, fuzzy
+msgid "List of loaded, shown or hidden parameter files"
+msgstr "Carrega e descarrega arquivo de parâmetros"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:469
+msgid "Show parameter files by names or descriptions"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:470
+msgid "Toggle the shown status of the selected parameter file"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:471
+msgid "Find extra parameter files from the filesystem"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:472
+msgid "Find parameter files from the system library"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:473
+msgid "Update parameter file list"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:474
+#, fuzzy
+msgid "Reload parameter file from list"
+msgstr "Lendo arquivos de parâmetros"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:475
+#, fuzzy
+msgid "Select all parameter files shown"
+msgstr "Lendo arquivos de parâmetros"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:476
+msgid "Profile of specified path"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:477
+msgid "Clear the profile"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:478
+msgid "Print the profile"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:480
+msgid "Stop recording"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:481
+msgid "Insert a message"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:482
+msgid "End a message"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:483
+msgid "Message body"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:484
+msgid "Possible turnouts"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:485
+msgid "Skip this turnout"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:487
+msgid "Manufacturer of Object"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:488
+msgid "Description of Object"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:489
+msgid "Part Nuber of Object"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:491
+msgid "Rescale by Scale Conversion or by Ratio"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:492
+msgid "Original Scale of the selected objects"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:493
+msgid "Original Gauge of the selected objects"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:494
+msgid "New Scale of the selected objects"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:495
+msgid "New Gauge of the selected objects"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:496
+msgid "Change track dimensions to new scale"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:497
+msgid "Change size by this amount"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:499
+msgid "Snap Grid Line and Division"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:500
+msgid "X and Y position markers"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:501
+msgid "Border rulers, room boundaries and table edges"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:502
+msgid "Primary Axis of grid rotation"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:503
+msgid "Secondary Axis of grid rotation"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:504
+msgid "Unselected tracks"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:505
+msgid "Selected tracks"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:506
+msgid "Color of tracks on the Profile path"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:507
+msgid "Color of Exceptional tracks"
+msgstr "Cor dos trechos excepcionais"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:508
+msgid "Color of track ties"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:509
+msgid "Updates the colors"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:510
+msgid "Angle in degrees"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:511
+msgid "Rotate object(s) by specified amount"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:512
+msgid "Enter one or more words as search terms '*' means all"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:513
+#, fuzzy
+msgid "Find matching file descriptions"
+msgstr "Selecionar e arrastar uma descrição"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:514
+msgid "Search Results"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:515
+msgid "Show Descriptions or FileNames in results"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:516
+msgid "Add selected entries into parameter file list"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:517
+#, fuzzy
+msgid "Select All found entries"
+msgstr "Selecionar o segundo trecho"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:518
+msgid "Reload the system library contents for finding"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:519
+msgid "Choose commands to be sticky"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:520
+msgid "Make the commands sticky"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:521
+msgid "List of available structure"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:522
+msgid "Diagram of the selected structure"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:523
+msgid "Hide Selection window when placing Structure"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:524
+msgid "Drawing scale and size"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:525
+msgid "Complete structure placement"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:526
+msgid "Choose a Pier number"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:527
+#, fuzzy
+msgid "Name of the Motor"
+msgstr "Alterar motor de AMV"
+
+#: ../../../../build/work/app/bin/bllnhlp.c:528
+msgid "Value when switch is normal"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:529
+msgid "Value when the switch is reversed"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:530
+msgid "Value for a positive comfirmation of switch position"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:532
+msgid "Useful information about the program"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:533
+msgid "Show Tip of the Day every time the program starts"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:534
+msgid "Show the next Tip of the Day"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:535
+msgid "Show the previous Tip of the Day"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:537
+msgid "Controls which Command Buttons are displayed"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:538
+msgid "List of Cars"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:539
+msgid "List of active trains"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:541
+msgid "Train odometer"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:542
+msgid "Reset odometer to 0"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:543
+msgid "Find train on layout"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:544
+msgid "Follow train around layout"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:545
+msgid "Flip direction at End Of Track"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:546
+msgid "Change direction of train"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:547
+msgid "Stop the train"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:548
+msgid "List of available turnouts for the current scale"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:549
+msgid ""
+"Diagram of the currently selected turnout. Click on a End-Point to select "
+"the Active End-Point"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:550
+msgid ""
+"A menu list of various type of turnouts and sectional tracks you can define"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:551
+msgid "Hide Selection window when placing Turnout"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:552
+msgid "The selected Active End-Point"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:553
+msgid "Current selected turnout, (displayed in the diagram window)"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:554
+msgid "One the End-Points that can be selected"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:556
+#: ../../../../build/work/app/bin/bllnhlp.c:557
+msgid "Angle of the specified track to the center line of the turnout"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:558
+msgid "Specifies if angles are entered as Frog Numbers or in degrees"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:559
+#: ../../../../build/work/app/bin/bllnhlp.c:560
+msgid "Desciption"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:561
+msgid "Turnout description (Manuf., Size, Part Number, etc)"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:562
+#: ../../../../build/work/app/bin/bllnhlp.c:563
+#: ../../../../build/work/app/bin/bllnhlp.c:564
+msgid "Length from the base to the end of the specified track"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:566
+#: ../../../../build/work/app/bin/bllnhlp.c:567
+msgid "Offset of the track End-Point from the center line of the turnout"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:570
+#: ../../../../build/work/app/bin/bllnhlp.c:571
+msgid "Prints a full size diagram of the turnout for checking"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:572
+msgid "Color of Roadbed lines"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:573
+msgid "Width of Roadbed lines"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:574
+msgid "Width of Roadbed"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:576
+msgid "Closes the window and returns to the Turnout Selection window"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:577
+msgid "Specifies the diameter of the turntable"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:578
+msgid "Old Turnout title"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:579
+msgid "List of available titles"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:580
+msgid "Leave the Turnouts' title unchanged"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:581
+msgid "Invoke the Parameter Files dialog"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:582
+msgid "List of available turnouts"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:583
+msgid "Update the Turnouts' title"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:587
+msgid "Sample"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:589
+msgid "Slant"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:590
+msgid "Font selection dialog"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:591
+msgid "Weight"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:592
+msgid "Printer Abort Window"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:593
+msgid "Print to filename"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:594
+msgid "Specify Postscript font alias mapping"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:595
+msgid ""
+"Displays the Print Setup window to change printers, orientation, paper size, "
+"etc."
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:596
+msgid "Closes this dialog"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:597
+msgid "Page orientation"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:598
+msgid "Unprintable margins"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:599
+msgid "Updates and closes this dialog"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:600
+msgid "Choose paper size"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:601
+msgid "Choose printer"
+msgstr ""
+
+#: ../../../../build/work/app/bin/bllnhlp.c:602
+msgid "Print test page"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:1
+#: ../../../../build/work/app/i18n/custmsg.h:8
+msgid ""
+"XTrackCAD provides demonstrations on most of the program's features. The "
+"demos can be run by clicking on the Help menu on the Main window and then "
+"selecting Demos."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:3
+#: ../../../../build/work/app/i18n/custmsg.h:10
+msgid ""
+"The notation \"Menu|Item\" is used in the documentation (and the on-line "
+"demos and tips) to indicate the selection of a menu item.\n"
+"For example, \"File|Open\" means to open the menu by clicking on File on the "
+"menu bar of the Main window and then selecting the Open item from that menu."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:6
+#: ../../../../build/work/app/i18n/custmsg.h:12
+msgid ""
+"Set your modeling scale on the \"Options|Layout\" dialog. This controls the "
+"Turnouts and Structures that are available, Easement values and track gauge."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:8
+#: ../../../../build/work/app/i18n/custmsg.h:14
+msgid ""
+"A number of example layouts are provided. These files can be accessed by "
+"\"Help|Examples\"."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:10
+#: ../../../../build/work/app/i18n/custmsg.h:16
+msgid ""
+"When installed, the length units are set based on your contry: inches for "
+"United States or Canada and centimeters elsewhere. You can change this on "
+"the \"Options|Preferences\" dialog by choosing between Metric and English."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:12
+#: ../../../../build/work/app/i18n/custmsg.h:18
+msgid ""
+"You can change the overall size of your layout on the \"Options|Layout\" "
+"dialog."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:14
+#: ../../../../build/work/app/i18n/custmsg.h:20
+msgid ""
+"When installed, the default command is the Select command. You might want to "
+"change this to the Decribe command. You can do this on the \"Options|"
+"Command Options\" dialog."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:16
+#: ../../../../build/work/app/i18n/custmsg.h:22
+msgid ""
+"When Selecting tracks, the connection between Selected and Unselected tracks "
+"is marked by a Red X. This indicates points where the connection between "
+"tracks will be broken if you Move or Rotate the Selected tracks."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:18
+#: ../../../../build/work/app/i18n/custmsg.h:24
+msgid ""
+"You can change orientation of the pages on the Print command by moving or "
+"rotating the Print Grid.\n"
+"Shift-Left-Drag moves the grid and Shift-Right-Drag rotates the grid."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:21
+#: ../../../../build/work/app/i18n/custmsg.h:26
+msgid ""
+"You can add track to any unconnected End-Point with the Modify command.\n"
+"Hold down the Shift key and click on the End-Point and drag away to create a "
+"new track segment attached to the End-Point.\n"
+"Repeat with the new End-Point to create flowing tracks."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:25
+#: ../../../../build/work/app/i18n/custmsg.h:28
+msgid ""
+"You can create curved tracks in four ways by dragging from:\n"
+" the 1st endpoint in the direction of the curve\n"
+" center of the curve to the 1st endpoint\n"
+" endpoint to the center\n"
+" the 1st to 2nd endpoint\n"
+"Then drag on one of the Red arrows to create the final shape of the curve.\n"
+"\n"
+"You can click on the small button to the right of the Curve command button "
+"to change the method."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:34
+#: ../../../../build/work/app/i18n/custmsg.h:30
+msgid ""
+"When creating a straight or a curved track by dragging from the 1st End "
+"Point, you can snap the new track to an existing open end point by holding "
+"down Shift while you click.\n"
+"The new track will be joined to the old when you create it."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:37
+#: ../../../../build/work/app/i18n/custmsg.h:32
+msgid ""
+"Track Circles provide a quick way to see what arrangement of tracks will fit "
+"in your layout spaces. Create Circles with your typical radius and place "
+"them in corners and other locations where your main-line will make changes "
+"of direction. This will give you an overall idea of how your layout will "
+"look.\n"
+"\n"
+"You can create Circles by:\n"
+" using a fixed radius\n"
+" dragging from the Center to edge\n"
+" dragging from an edge to the Center\n"
+"You can click on the small button to the left of the Circle command button "
+"to change the method."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:45
+#: ../../../../build/work/app/i18n/custmsg.h:34
+msgid ""
+"Easements (spiral transition curves) are used when track changes from "
+"straight to curved by gradually changing the radius. This improves "
+"operation and appearance.\n"
+"Easements are created with Joining or Extending Tracks.\n"
+"The Easement dialog is used to control easements."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:49
+#: ../../../../build/work/app/i18n/custmsg.h:36
+msgid ""
+"\"Help|Recent Messages\" shows the last error and warning messages that were "
+"generated by the program. Also an explanation of each message is displayed."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:51
+#: ../../../../build/work/app/i18n/custmsg.h:38
+msgid ""
+"When creating stall tracks for a turntable, you usually want the the stall "
+"tracks to be spaced evenly.\n"
+"The \"Turntable Angle\" item on \"Options|Preferences\" dialog can be used "
+"specify the minimum angle between stall tracks."
+msgstr ""
+
+# Este texto não descreve com clareza onde se localiza o diretório de trabalho e nem onde copiar o arquivo file.xtc. Verificar também se o nome do arquivo destino está correto.
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:54
+#: ../../../../build/work/app/i18n/custmsg.h:40
+msgid ""
+"XTrackCAD periodically saves the current layout in a check point file. The "
+"'Check Point' item on the 'Options|Preferences' dialog controls how often "
+"the file is saved.\n"
+"You can recover your working file after a system crash by copying the "
+"checkpoint file (xtrkcad.ckp in the XTrackCAD Working directory) to file.xtc"
+msgstr ""
+"XTrackCAD salva periodicamente o layout em um arquivo temporário. O item "
+"\"Freqüência de salvamento automatico\" na caixa de diálogo \"Opções | "
+"Preferências\" controla a periodicidade na qual o arquivo é salvo.\n"
+"Você pode restaurar seu arquivo de trabalho após uma falha do sistema "
+"copiando o arquivo temporário (\"xtrkcad.ckp\" no diretório de trabalho do "
+"XTrackCAD) para \"file.xtc\"."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:57
+#: ../../../../build/work/app/i18n/custmsg.h:42
+msgid ""
+"The Parallel command is helpful to layout yards and sidings. If the "
+"Parallel track abuts with an existing track, it is automatically connected."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:59
+#: ../../../../build/work/app/i18n/custmsg.h:44
+msgid ""
+"You can use Shift-Drag in Select command to move and rotate selected "
+"tracks.\n"
+"Shift-Left-Drag moves tracks and Shift-Right-Drag rotates them.\n"
+"Control-Left-Drag can move labels."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:63
+#: ../../../../build/work/app/i18n/custmsg.h:46
+msgid ""
+"You can move and rotate the Snap Grid to align with existing track or "
+"benchwork."
+msgstr ""
+"Você pode mover e rotacionar a grade para alinhar com uma linha existente ou "
+"a bancada."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:65
+#: ../../../../build/work/app/i18n/custmsg.h:48
+msgid ""
+"Use the Parts List command to measure track length.\n"
+"Select the tracks you want to measure and then click on the Parts List "
+"button. The report will list the total of length of the selected flex-"
+"track. You will have to add in the length of any Turnouts."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:68
+#: ../../../../build/work/app/i18n/custmsg.h:50
+msgid ""
+"The length of flex-track attached to each Turnout is displayed on layout "
+"near the end-points of the Turnouts.\n"
+"Make sure 'Lengths' option of the 'Label Enable' toggle button on the "
+"Display dialog is selected."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:71
+#: ../../../../build/work/app/i18n/custmsg.h:52
+msgid ""
+"The Profile command can be used to find the length of a continous section of "
+"track.\n"
+"Select the track at the beginning and end of the section. The total length "
+"of track will be displayed on the Profile window in the lower right corner.\n"
+"Note: the Profile selects the shortest path between the two selected tracks, "
+"which might not be the path you are interested in. In this case, select the "
+"first track and then select other tracks along the path."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:75
+#: ../../../../build/work/app/i18n/custmsg.h:54
+msgid ""
+"Layers can be used to contain different groups of tracks or other features. "
+"You might use one layer for the main-line, another of staging tracks and "
+"another of benchwork.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:77
+#: ../../../../build/work/app/i18n/custmsg.h:56
+msgid ""
+"You can give each layer a name (by using the \"Manage|Layer\" dialog). This "
+"name will be displayed as the Balloon Help for the corresponding Layer "
+"button, if you have Balloon Help enabled on the \"Options|Display\" dialog."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:79
+#: ../../../../build/work/app/i18n/custmsg.h:58
+msgid ""
+"You can remove groups of buttons or the Hot Bar from the Main window to give "
+"you more room if you are not using some features. Also, the number of Layer "
+"buttons displayed is controlled by the \"Manage|Layers\" dialog."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:81
+#: ../../../../build/work/app/i18n/custmsg.h:60
+msgid ""
+"The size of the map window is controlled by the overall size of the room "
+"(specified on the layout dialog) and the map scale (on the display dialog). "
+"You can make the Map window larger (or smaller) by decreasing (or "
+"increasing) the map scale.\n"
+"XTrackCad will prevent you from making the map window too small or too large."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:84
+#: ../../../../build/work/app/i18n/custmsg.h:62
+msgid ""
+"You can unload parameter files you are not using by the Parameter Files "
+"dialog. This removes unused Turnout and Structure definitions from the Hot "
+"Bar and makes the program start faster."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:86
+#: ../../../../build/work/app/i18n/custmsg.h:64
+msgid ""
+"Right-Click on the Main window displays a menu list of commands as an "
+"alternative to pressing the buttons on the tool bar or using the menu "
+"accelerator keys."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:87
+#: ../../../../build/work/app/i18n/custmsg.h:66
+msgid ""
+"Holding down the Shift key while you Right-Click will display options for "
+"the current command (if any)."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:89
+#: ../../../../build/work/app/i18n/custmsg.h:68
+msgid ""
+"Right-Click on the Hot Bar displays a menu of the different groups of "
+"objects which you can use to jump to the group you are interested in.\n"
+"Pressing a numeric key (1-9 and 0) moves the Hot Bar to corresponding "
+"position (1 is the start, 5 is half way, 0 is the end)."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:92
+#: ../../../../build/work/app/i18n/custmsg.h:70
+msgid ""
+"Right-Drag on the Map window sets the origin and scale of the Main window.\n"
+"The Main window will be centered on the spot where you started the Draw and "
+"how far you Drag will control how large an area you can see on the Main "
+"window."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:95
+#: ../../../../build/work/app/i18n/custmsg.h:72
+msgid ""
+"To refresh the Main window, press Control-L (hold down the 'Ctrl' key and "
+"then press the 'l' key)."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:97
+#: ../../../../build/work/app/i18n/custmsg.h:74
+msgid ""
+"The File menu contains a list of the last 5 layouts you were working on."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:99
+#: ../../../../build/work/app/i18n/custmsg.h:76
+msgid ""
+"The Print command can optionally print lines representing the roadbed for "
+"all tracks. This is useful when printing full size (1:1) for cutting "
+"roadbed."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:101
+#: ../../../../build/work/app/i18n/custmsg.h:78
+msgid ""
+"Pressing the 'Esc' key cancels the current command and invokes the default "
+"command, (which is either Describe or Select)."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:103
+#: ../../../../build/work/app/i18n/custmsg.h:80
+msgid ""
+"When moving or rotating tracks on slow machines or with a large number of "
+"tracks, you can improve performance by changing the way tracks are drawn "
+"while being moved.\n"
+"Shift-Right click will display a menu containing options to draw tracks "
+"normally, as simple lines or just draw end-points."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:106
+#: ../../../../build/work/app/i18n/custmsg.h:82
+msgid ""
+"The colors of different parts of the Main window can be changed with the "
+"Colors dialog. In particular, the Snap Grid color can be changed to make it "
+"more visible when printed."
+msgstr ""
+"As cores dos diferentes objetos da janela principal podem ser alteradas "
+"através da caixa de diálogo de cores. Particularmente, a cor da grade pode "
+"ser mudada para ficar melhor visível quando impressa."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:108
+#: ../../../../build/work/app/i18n/custmsg.h:84
+msgid ""
+"By default objects are drawn in their normal colors. Tracks will be drawn "
+"in Black. Objects can also be drawn in the color according to their Layer. "
+"The color of a Layer is displayed on the corresponding Layer button.\n"
+"The Display dialog 'Color Layers' item has separate toggles for Tracks and "
+"non-Tracks."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:111
+#: ../../../../build/work/app/i18n/custmsg.h:86
+msgid ""
+"Each Layer can be drawn or hidden by the 'Visible' toggle on the Layers "
+"dialog."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:112
+#: ../../../../build/work/app/i18n/custmsg.h:88
+msgid ""
+"Short cut Layer buttons can also be displayed on the tool bar for up to the "
+"first 20 layers.\n"
+"This buttons allow to Show or Hide the layers."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:115
+#: ../../../../build/work/app/i18n/custmsg.h:90
+msgid "The name of the Layer is the Balloon Help for the Layer button."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:117
+#: ../../../../build/work/app/i18n/custmsg.h:92
+msgid ""
+"The playback speed of the Demos can be changed by using Speed drop down list "
+"on the Demo window."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:119
+#: ../../../../build/work/app/i18n/custmsg.h:94
+msgid ""
+"Many of the commands and dialogs can be invoked by special key combinations "
+"called Menu-Accelerators. These are listed on the Menus next to the command "
+"name. For example, Control-P will invoke the Print command."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:121
+#: ../../../../build/work/app/i18n/custmsg.h:96
+msgid ""
+"The Connect command is used to join Sectional track pieces that don't quite "
+"fit together.\n"
+"This command works by adding small gaps between other tracks to move the "
+"selected End-Points closer together."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:124
+#: ../../../../build/work/app/i18n/custmsg.h:98
+msgid ""
+"To copy a group of objects: Select the objects, press Control-c (or select "
+"Copy from the Edit menu), press Control-v (or select Paste from the Edit "
+"menu).\n"
+"The selected tracks will be copied to the layout and you can Move or Rotate "
+"them into position."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:127
+#: ../../../../build/work/app/i18n/custmsg.h:100
+msgid ""
+"In the Rotate (or Select) commands you can press Shift-Right-Click to "
+"display the Rotate menu which allows you to rotate the selected objects by a "
+"specific angle."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:129
+#: ../../../../build/work/app/i18n/custmsg.h:102
+msgid ""
+"You can use the Move-To-Join option of the Join command (hold down the Shift "
+"key) to move a group of Selected tracks to attach with some unselected End-"
+"Point."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:131
+#: ../../../../build/work/app/i18n/custmsg.h:104
+msgid ""
+"The Price List dialog (on the File Menu) is used to specify the prices of "
+"each type of Turnout, Sectional Track and Structure. Also, the length and "
+"price of flex-track pieces can be specified for each scale.\n"
+"This values will be used on the Parts List report to generate total cost of "
+"the selected objects."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:134
+#: ../../../../build/work/app/i18n/custmsg.h:106
+msgid ""
+"Areas of water can represented by a Polygon (use the Draw command) of the "
+"appropiate color.\n"
+"By using the Modify command, you can move, add or remove corners of the "
+"Polygon to fit the shape of the water.\n"
+"You use the Below command to place the Polygon below (or behind) other "
+"objects.\n"
+"\n"
+"You can also use a Polygon to represent aisles."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:140
+#: ../../../../build/work/app/i18n/custmsg.h:108
+msgid ""
+"When you create Benchwork you can move it below other objects by Selecting "
+"the Benchwork and use the Below command.\n"
+"Also, put Benchwork in a separate Layer so you can hide it if desired."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:143
+#: ../../../../build/work/app/i18n/custmsg.h:110
+msgid ""
+"You can enter Distances and Lengths using any format regardless of the "
+"Length Format on the Preferences dialog."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:144
+#: ../../../../build/work/app/i18n/custmsg.h:112
+msgid ""
+"You can enter Metric values when English is the default Units and vice versa."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:146
+#: ../../../../build/work/app/i18n/custmsg.h:114
+msgid ""
+"When entering Distances and Lengths you can press the '=' key to redisplay "
+"the value in the default format."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:147
+#: ../../../../build/work/app/i18n/custmsg.h:116
+msgid ""
+"You can also press the 's' key to convert a Prototype measurement to a Scale "
+"measurement by dividing by the ratio for the current scale."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:148
+#: ../../../../build/work/app/i18n/custmsg.h:118
+msgid ""
+"The 'p' key will convert a Scale measurement to a Prototype measurement."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:150
+#: ../../../../build/work/app/i18n/custmsg.h:120
+msgid ""
+"You can place cars on the layout using the Train Simulation command to check "
+"clearance points, track to track separation and coupling."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:152
+#: ../../../../build/work/app/i18n/custmsg.h:122
+msgid ""
+"Use the MoveTo button on the Custom Management dialog to move your custom "
+"Turnout, Structure and Car definitions to a .XTP parameter file."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:154
+#: ../../../../build/work/app/i18n/custmsg.h:124
+msgid ""
+"If you are printing multiple pages on a continuous feed printer (such a Dot "
+"Matrix) you can change the Page Order if necessary to print pages out in "
+"proper order."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:156
+#: ../../../../build/work/app/i18n/custmsg.h:126
+msgid ""
+"On the Car Item and Car Part dialogs, you can enter custom values for "
+"Manufacturer, Part and Road by typing the new value directly into the Drop "
+"Down List."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:158
+#: ../../../../build/work/app/i18n/custmsg.h:128
+msgid ""
+"On the Car Item dialog, you can change the Road, Number, Color and other "
+"values for a Car. This is useful if you repaint or renumber a car. \n"
+"You can also change the Coupler Mounting and Coupler Length if you change "
+"the couplers."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:161
+#: ../../../../build/work/app/i18n/custmsg.h:130
+msgid ""
+"You can Export your Car Inventory to a file in Comma-Separated-Value format "
+"which can be read by most spread-sheet programs."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:163
+#: ../../../../build/work/app/i18n/custmsg.h:132
+msgid "Use the Train Odometer to measure distances along the track."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:165
+#: ../../../../build/work/app/i18n/custmsg.h:134
+msgid ""
+"Holding down the Shift key when clicking the Zoom In or Zoom Out button will "
+"zoom to a programmed Drawing Scale. \n"
+"Holding down the Shift and Control keys when clicking a Zoom button will set "
+"it's program Zoom to the current Drawing Scale."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:168
+#: ../../../../build/work/app/i18n/custmsg.h:136
+msgid ""
+"You can trim the ends of turnouts by holding down the Shift key when using "
+"the Split command."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:170
+#: ../../../../build/work/app/i18n/custmsg.h:138
+msgid ""
+"The Split command can be used to create Block Gaps at end points between two "
+"tracks. \n"
+"Either rail or both rails can be gapped, which are drawn as thick lines."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:173
+#: ../../../../build/work/app/i18n/custmsg.h:140
+msgid ""
+"Trains will 'crash' if they hit another car when travelling faster than the "
+"'Max Coupling Speed' (on the Command Options dialog). \n"
+"They will also 'crash' if they hit the end of the track or an open "
+"turnout. \n"
+"Crashed trains must be manually moved back onto the track."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:177
+#: ../../../../build/work/app/i18n/custmsg.h:142
+msgid ""
+"You can add new track segments to a turnout definition or create a "
+"definition from individual tracks using the Group command."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:179
+#: ../../../../build/work/app/i18n/custmsg.h:144
+msgid ""
+"The center point and radius of Curved and Circle tracks can optionally be "
+"drawn. \n"
+"This feature is toggled by using the Move Label command and doing a Shift-"
+"Left-Click on the track."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:182
+#: ../../../../build/work/app/i18n/custmsg.h:146
+msgid ""
+"Turnout, Curved and Helix track labels can be individually turned on and off "
+"by doing a Shift-Right-Click on the track when using the Move Label command."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:184
+#: ../../../../build/work/app/i18n/custmsg.h:148
+msgid ""
+"You can use the Describe command to change the font size of Text objects."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:186
+#: ../../../../build/work/app/i18n/custmsg.h:150
+msgid ""
+"You can use the Describe command to change the size of Dimension Line labels."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:188
+#: ../../../../build/work/app/i18n/custmsg.h:152
+msgid ""
+"Normally Right-Click displays a popup menu of commands and Shift-Right-Click "
+"displays options for the current command. \n"
+"This can reversed by using the Right Click toggle button on the Command "
+"Options dialog."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:191
+#: ../../../../build/work/app/i18n/custmsg.h:154
+msgid ""
+"The Align item on the Rotate command options menu will let you Align "
+"selected objects with any unselected object. \n"
+"The selected objects are rotated so the first point is parallel to the "
+"second point you selected."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:194
+#: ../../../../build/work/app/i18n/custmsg.h:156
+msgid ""
+"Print To Bitmap allows you to print the track center line. \n"
+"This is useful if you later print the bitmap full size as a template when "
+"laying track."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:197
+#: ../../../../build/work/app/i18n/custmsg.h:158
+msgid ""
+"You can export the selected tracks to a DXF file which can be read by most "
+"CAD programs."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:199
+#: ../../../../build/work/app/i18n/custmsg.h:160
+msgid ""
+"Lengths and distances can be displayed in a variety of units and formats "
+"such as 1' 10 3/4\", 1ft 10.75in or 22.750. In Metric mode, distances can "
+"be displayed as millimeters, centimeters or meters. See the Length Format "
+"item on the Preferences dialog."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:201
+#: ../../../../build/work/app/i18n/custmsg.h:162
+msgid ""
+"Tracks that are too steep or curve too tightly are drawn in the Exception "
+"color (Yellow by default). \n"
+"This helps to identify potential problem areas. \n"
+"The maximum grade and minimum radius are set on the Preferences dialog."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:205
+#: ../../../../build/work/app/i18n/custmsg.h:164
+msgid ""
+"The Flip command produces a mirror-image of the selected tracks. \n"
+"If possible, right-hand turnouts are relabeled as left-hand turnouts (and "
+"vice versa)."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:208
+#: ../../../../build/work/app/i18n/custmsg.h:166
+msgid ""
+"Then Ungroup command will break turnouts and structures into individual "
+"track, line and shape segments. \n"
+"You can modify each segment and add new ones. \n"
+"Then use the Group command to update the definition."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:212
+#: ../../../../build/work/app/i18n/custmsg.h:168
+msgid "Dimension lines show the distance between two points."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:214
+#: ../../../../build/work/app/i18n/custmsg.h:170
+msgid ""
+"A variety of Benchwork (rectangular, L-girder and T-girder) can be drawn. \n"
+"Use the Below command to move the Benchwork below the track for proper "
+"display."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:217
+#: ../../../../build/work/app/i18n/custmsg.h:172
+msgid ""
+"The Turnout Designer dialogs allow you to specify the width of any attached "
+"roadbed. \n"
+"As well, the color and thickness of the lines used to represent the roadbed "
+"can be specified."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:220
+#: ../../../../build/work/app/i18n/custmsg.h:174
+msgid ""
+"The Color dialog (on the Options menu) is used to change the color of "
+"different objects on the display. \n"
+"You can change the color of the Snap Grid and Borders, as well as Normal, "
+"Selected and Exception tracks."
+msgstr ""
+"A caixa de diálogo de cores (no menu \"Opções\") é usada para alterar a cor "
+"dos diferentes objetos na janela principal. \n"
+"Você pode alterar a cor da grade e das bordas, como também dos trechos "
+"normais, selecionados e excepcionais."
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:223
+#: ../../../../build/work/app/i18n/custmsg.h:176
+msgid ""
+"You can set the elevation (height) of track end-points. \n"
+"Elevations of intermediate end points can be computed automatically based on "
+"the distance to the nearest end points with defined elevations. \n"
+"Grades can also be displayed at selected end points. \n"
+"Please see the Elevations help and demo."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:228
+#: ../../../../build/work/app/i18n/custmsg.h:178
+msgid ""
+"Once you have elevations on some endpoints, you can use the Profile command "
+"to produce an elevation graph. \n"
+"The graph shows the selected elevations, grades and distances. \n"
+"Please see the Profile help and demo for details."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:232
+#: ../../../../build/work/app/i18n/custmsg.h:180
+msgid ""
+"You can draw tracks with wider lines for rails. \n"
+"Select the tracks and use Medium or Thick Tracks on the Edit menu."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:235
+#: ../../../../build/work/app/i18n/custmsg.h:182
+msgid ""
+"The Helix command is used to create a Helix track. \n"
+"You specify some parameters: height, radius, number of turns, grade and "
+"vertical separation between layers. \n"
+"These values are interrelated so changing one value will affect ohers. \n"
+"Then you can place the Helix and join to other tracks as you would a Circle "
+"track."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:240
+#: ../../../../build/work/app/i18n/custmsg.h:184
+msgid ""
+"Many objects on the layout have labels: Turnouts/Helix/Curved Titles, Track "
+"Lenghts, End-Point Elevations, Track Elevations and Cars. \n"
+"You can turn these labels on or off with the Label Enable toggle buttons on "
+"the Display options dialog."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:243
+#: ../../../../build/work/app/i18n/custmsg.h:186
+msgid ""
+"If you hold down the Control key when using the Rotate command, the rotation "
+"will be done in increments of 15ᅵ."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:245
+#: ../../../../build/work/app/i18n/custmsg.h:188
+msgid ""
+"When using the Rotate command, Shift-Right-Click displays a menu allowing "
+"you to rotate by specific amounts or to align the selected objects with "
+"another object."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/help/xtrkcad.tip:247
+#: ../../../../build/work/app/i18n/custmsg.h:190
+msgid ""
+"This is last tip. If you have any additions or comments, please let us know."
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:25
+#: ../../../../build/work/app/i18n/custmsg.h:192
+msgid ""
+"The unconnected endpoints of a straight or curved track can be changed with "
+"the 'Modify Track' command.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:31
+#: ../../../../build/work/app/i18n/custmsg.h:194
+msgid ""
+"The endpoint of a straight track is selected and then Left-Dragged to change "
+"its length. A blue anchor shows that the length can be extended.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:48
+#: ../../../../build/work/app/i18n/custmsg.h:196
+msgid ""
+"If you try to drag the selected endpoint beyond the far endpoint, the track "
+"extends in the opposite direction.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:68
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:73
+#: ../../../../build/work/app/i18n/custmsg.h:199
+msgid ""
+"A curved track is selected and it's new endpoint is determined by the angle "
+"to the cursor. \n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:105
+#: ../../../../build/work/app/i18n/custmsg.h:201
+msgid "It's possible to almost create a complete circle.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:202
+msgid ""
+"If you drag the mouse beyond the start of the curve the track becomes very "
+"short.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:113
+#: ../../../../build/work/app/i18n/custmsg.h:204
+msgid "Here you are warned that the track will be too short.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:147
+#: ../../../../build/work/app/i18n/custmsg.h:206
+msgid ""
+"If you move the cursor away from the curve, you will create a straight track "
+"tangent to the curve.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:169
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:174
+#: ../../../../build/work/app/i18n/custmsg.h:209
+msgid ""
+"If you adjust the endpoint of a turnout or sectional track the track is "
+"extended by a similar track segment. The extension can be \n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:210
+#, fuzzy
+msgid "a straight or a curve.\n"
+msgstr "Cria um trilho reto"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:190
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:195
+#: ../../../../build/work/app/i18n/custmsg.h:213
+msgid ""
+"You can change the radius of a straight or curved track that is connected at "
+"one endpoint by holding down the Shift key while Left-dragging on it.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:214
+msgid ""
+"The blue cross anchor shows that this is possible when shift is held down "
+"with no buttons.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:209
+#: ../../../../build/work/app/i18n/custmsg.h:216
+msgid ""
+"This lets you change a straight track into a curved track (and vice versa) "
+"as well as changing the radius of a curved track.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:252
+#: ../../../../build/work/app/i18n/custmsg.h:218
+msgid ""
+"You can form an extension of a straight or curved Track that is connected at "
+"one endpoint using an easement by holding down the Ctrl key while Left-"
+"dragging on it.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:219
+msgid ""
+"The blue half cross anchor shows that this is possible when the Ctrl key is "
+"held down with no mouse button.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmadjend.xtr:267
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:9
+#: ../../../../build/work/app/i18n/custmsg.h:222
+msgid "You can draw a variety of different types of benchwork:\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:223
+msgid "- rectangular (1x2, 2x4 etc)\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:224
+msgid "- L girders\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:225
+msgid "- T girders\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:226
+msgid "You can also draw them in different orientations.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:25
+#: ../../../../build/work/app/i18n/custmsg.h:228
+msgid "We will draw two 3x6 inch L-girders.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:43
+#: ../../../../build/work/app/i18n/custmsg.h:230
+msgid ""
+"The flange of the top L-Girders is on the outside edge of the girders. We "
+"want to change the girder so both flanges are on the inside.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:231
+msgid "We will use the <Describe> command for this.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:233
+msgid "Change the Orientation to Right.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmbench.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:235
+msgid "Now both flanges are on the inside of the two girders.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:34
+#: ../../../../build/work/app/i18n/custmsg.h:237
+msgid ""
+"Pushing the <Describe> button will cancel any other command in progress.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:238
+msgid ""
+"Here we will begin to create a curved track which is a two step process.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:47
+#: ../../../../build/work/app/i18n/custmsg.h:240
+msgid ""
+"When we clicked on the <Describe> button, the current command was "
+"cancelled.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:241
+msgid ""
+"When in <Describe> mode, selecting any object will print a description in "
+"the Status Bar and display a dialog showing properties of the clicked-on "
+"object.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:57
+#: ../../../../build/work/app/i18n/custmsg.h:243
+msgid ""
+"Certain parameters of the object can be changed. In this case we'll change "
+"the length\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:65
+#: ../../../../build/work/app/i18n/custmsg.h:245
+msgid "Let's look at the Turnout...\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:73
+#: ../../../../build/work/app/i18n/custmsg.h:247
+msgid "and change the turnout name and part no.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:84
+#: ../../../../build/work/app/i18n/custmsg.h:249
+msgid "You can change the contents of text...\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:93
+#: ../../../../build/work/app/i18n/custmsg.h:251
+msgid "and its size.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:100
+#: ../../../../build/work/app/i18n/custmsg.h:253
+msgid ""
+"If you select a note, the Description dialog appears which displays the "
+"contents of the note.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcancel.xtr:112
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcircle.xtr:7
+#: ../../../../build/work/app/i18n/custmsg.h:256
+msgid ""
+"Like the <Curve> track command, there are several ways to create a Circle "
+"track.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:257
+msgid ""
+"The first is to specify a fixed radius and simply drag the Circle into "
+"position.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:258
+msgid "We will change the Radius before proceeding.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcircle.xtr:24
+#: ../../../../build/work/app/i18n/custmsg.h:260
+msgid "The next method is to drag from the edge of the Circle to the center.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcircle.xtr:37
+#: ../../../../build/work/app/i18n/custmsg.h:262
+msgid ""
+"The last is similar, but you drag from the center of the Circle to the "
+"edge.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcircle.xtr:50
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:157
+#: ../../../../build/work/app/i18n/custmsg.h:265
+msgid ""
+"We have built a siding using Sectional track and have 2 End-Points that "
+"don't line up and are not connected automatically when placing the sectional "
+"track.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:162
+#: ../../../../build/work/app/i18n/custmsg.h:267
+msgid ""
+"We use the <Connect> command to adjust neighboring tracks so the gap is "
+"closed.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:268
+msgid ""
+"Note: the adjustments are only done on tracks which have only 1 or 2 "
+"connections. In this example the Turnouts would not be affected.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:175
+#: ../../../../build/work/app/i18n/custmsg.h:270
+msgid "And now the gap is closed.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:181
+#: ../../../../build/work/app/i18n/custmsg.h:272
+msgid "Other tracks have been shifted slightly to close the gap.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:188
+#: ../../../../build/work/app/i18n/custmsg.h:274
+msgid "You can see these slight mis-alignments.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:275
+msgid "But they will have no effect when the layout is actually built.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:196
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:353
+#: ../../../../build/work/app/i18n/custmsg.h:278
+msgid ""
+"After working with Sectional track you might get to point where these mis-"
+"alignments have accumulated and you wish to remove them.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:279
+msgid ""
+"You can remove these slight mis-alignments by tightening the tracks starting "
+"from a unconnected End-Point. Use Shift-Left-Click with the <Connect> "
+"command.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:280
+msgid "First use the <Split> command to disconnect the tracks.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:363
+#: ../../../../build/work/app/i18n/custmsg.h:282
+msgid ""
+"Then with the <Connect> command, Shift-Left-Click on the 2 End-Points.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn1.xtr:378
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:199
+#: ../../../../build/work/app/i18n/custmsg.h:285
+msgid "In example shows a simple figure-8 layout using Sectional track.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:286
+msgid ""
+"You will notice that the tracks do not line up exactly in one location.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:211
+#: ../../../../build/work/app/i18n/custmsg.h:288
+msgid ""
+"We can use the <Connect> command to move the connecting tracks slightly and "
+"connect the 2 End-Points.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:224
+#: ../../../../build/work/app/i18n/custmsg.h:290
+msgid "The two End-Points are now aligned and connected.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:231
+#: ../../../../build/work/app/i18n/custmsg.h:292
+msgid "The connection was made by adding small gaps in other tracks.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmconn2.xtr:238
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:7
+#: ../../../../build/work/app/i18n/custmsg.h:295
+msgid "There are several ways to create a Curved track.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:296
+msgid ""
+"You can choose which to use by clicking on the small button to the left of "
+"<Curve> command button if the current Curve command is not the one you "
+"want.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:297
+msgid ""
+"The first is by clicking on the first End-Point and dragging in the "
+"direction of the Curve.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:20
+#: ../../../../build/work/app/i18n/custmsg.h:299
+msgid ""
+"You will see a straight track with a double ended Red arrow at the end.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:300
+msgid "Click and drag on one of the Red arrows to complete the Curve.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:302
+msgid ""
+"The next method is to click at one End-Point and drag to the center of the "
+"Curve.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:50
+#: ../../../../build/work/app/i18n/custmsg.h:304
+msgid ""
+"Now you will see the double ended Red arrow connected to the center of the "
+"Curve marked by a small circle.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:305
+msgid "As before, drag on one of the Red arrows to complete the Curve.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:307
+msgid ""
+"The next method is similar to the last except that you drag first from the "
+"center of the Curve to one End-Point.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:80
+#: ../../../../build/work/app/i18n/custmsg.h:309
+msgid "Once again, drag on a Red arrow to complete the Curve.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:90
+#: ../../../../build/work/app/i18n/custmsg.h:311
+msgid ""
+"The last method begins by drawing a line between the two End-Points of the "
+"Curve. This forms the Chord of the Curve.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:108
+#: ../../../../build/work/app/i18n/custmsg.h:313
+msgid "Now drag on a Red arrow to complete the Curve.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmcrvtrk.xtr:118
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:112
+#: ../../../../build/work/app/i18n/custmsg.h:316
+msgid "This demo will construct a control panel for part of a bigger layout.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:117
+#: ../../../../build/work/app/i18n/custmsg.h:318
+msgid "For our control panel we will use Œ\" lines. \n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:319
+msgid "Also, we will use a 1/8\" grid to lay out our controls.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:320
+msgid ""
+"First, we will set up the Snap Grid for 1\" grid lines and 8 divisions.\n"
+msgstr "Primeiramente, ajustaremos a grade para linhas de 1″ e 8 divisões.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:322
+msgid "Now, clear the layout and turn on the Snap Grid.\n"
+msgstr "Agora, limparemos o layout e ligaremos a grade.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:147
+#: ../../../../build/work/app/i18n/custmsg.h:324
+msgid "First step: draw the lines representing the tracks.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:325
+msgid "We specify the line width in pixels when at 1:1 zoom.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:326
+msgid ""
+"To create a 1/4\" line, divide the dots-per-inch (DPI) of your display by "
+"4.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:327
+msgid ""
+"For MS-Windows the DPI is usually 98, so choose: 98/4 = 24 (approximately).\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:328
+msgid "For Linux, the DPI is usually 72, so choose: 72/4 = 18.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:495
+#: ../../../../build/work/app/i18n/custmsg.h:330
+msgid ""
+"Notice how the Snap Grid keeps the main line and siding track parallel and "
+"the connecting tracks and spur at a 45° angle.\n"
+msgstr ""
+"Note como a grade mantém a linha principal e lateral paralelas e as linhas "
+"de conexão e incita a um ângulo de 45°.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:503
+#: ../../../../build/work/app/i18n/custmsg.h:332
+msgid "Second step: add LEDs for the turnout position indicators.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:333
+msgid "We will use T1 red and green LEDs.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:334
+msgid "We will zoom in to show positioning.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:513
+#: ../../../../build/work/app/i18n/custmsg.h:336
+msgid ""
+"Notice that when we are in the correct position (on the 1/8\" grid), the "
+"Marker lines on the bottom and left rulers will high-light the tick marks. "
+"When both ticks are high-lighted, press the space bar to finalize the LED.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:558
+#: ../../../../build/work/app/i18n/custmsg.h:338
+msgid "Now we'll add push buttons to control the turnouts.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:595
+#: ../../../../build/work/app/i18n/custmsg.h:340
+msgid "Let's add signals to our siding.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:341
+msgid ""
+"The entrance to the siding will be protected by double headed signals.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:342
+msgid "We'll select a signal from the HotBar and place it into position.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:608
+#: ../../../../build/work/app/i18n/custmsg.h:344
+msgid ""
+"We rotate the signals by Shift-Right-Click and select 90° CW on the popup "
+"menu. We can not show the popup menu in demo mode, but will simulate the "
+"effect.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:657
+#: ../../../../build/work/app/i18n/custmsg.h:346
+msgid "The exits from the siding will be protected by single headed signals.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:711
+#: ../../../../build/work/app/i18n/custmsg.h:348
+msgid "Now for some touch-ups.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:349
+msgid "Notice when the line meet at an angle there is a gap.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:350
+msgid "We will fill this gap with the Œ\" dot.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:351
+msgid ""
+"Note: Win95/Win98/WinME does not support drawing lines with flat end-caps, "
+"but only with round end-caps.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:352
+msgid "Users on those platforms will not see the gap.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:734
+#: ../../../../build/work/app/i18n/custmsg.h:354
+msgid ""
+"Add an arrow head to indicate the tracks that connect to the rest of the "
+"layout.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:355
+msgid "The second arrow will be flipped 180°\"\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:772
+#: ../../../../build/work/app/i18n/custmsg.h:357
+msgid "And add some labels.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:831
+#: ../../../../build/work/app/i18n/custmsg.h:359
+msgid ""
+"We want to print our control panel onto a 8œx11 page, but the control panel "
+"is a bit too wide.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:360
+msgid "Lets tighten it up a bit.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:361
+msgid ""
+"First turn the Snap Grid on again so any moves we make will keep objects on "
+"the grid.\n"
+msgstr ""
+"Primeiramente, habilitamos a grade novamente para fazer com que os objetos "
+"fiquem mantidos nela.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:840
+#: ../../../../build/work/app/i18n/custmsg.h:363
+msgid "Lets move the spur track to the left 3/4\"\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:862
+#: ../../../../build/work/app/i18n/custmsg.h:365
+msgid "Now move the right side of the siding over.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:882
+#: ../../../../build/work/app/i18n/custmsg.h:367
+msgid "Now, adjust the ends of the mainline and siding tracks.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:902
+#: ../../../../build/work/app/i18n/custmsg.h:369
+msgid "And move the title over as well.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmctlpnl.xtr:919
+#: ../../../../build/work/app/i18n/custmsg.h:371
+msgid "Now you can print it.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:372
+msgid "The cross-hairs on the LEDs and switch show the centers for drilling.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:33
+#: ../../../../build/work/app/i18n/custmsg.h:374
+msgid ""
+"Pressing the <Delete> button lets you delete selected tracks from the "
+"layout.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:375
+msgid ""
+"First you select the tracks you want to delete, and then press the <Delete> "
+"button.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:47
+#: ../../../../build/work/app/i18n/custmsg.h:377
+msgid ""
+"If you delete a track connected to an easement curve, then the easement "
+"curve is deleted as well.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:57
+#: ../../../../build/work/app/i18n/custmsg.h:379
+msgid "You can use the <Undo> command to undelete tracks.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:67
+#: ../../../../build/work/app/i18n/custmsg.h:381
+msgid ""
+"If you Left-Drag on the layout you can select all tracks within an area.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:382
+msgid ""
+"Note, only tracks within the selected area are deleted. Since the easement "
+"curve is connected to a deleted track, it is deleted as well.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdelund.xtr:80
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:385
+msgid ""
+"The demo also simulates entering values and selecting options on various "
+"dialogs.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:386
+msgid ""
+"This is simulated by drawing a rectangle around the control when values are "
+"entered or changed.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:13
+#: ../../../../build/work/app/i18n/custmsg.h:388
+msgid ""
+"Here we are going to make some changes to the Display dialog. Notice how "
+"this is simulated.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:389
+msgid "First we are setting 'Draw Tunnel' to 'Normal'\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:21
+#: ../../../../build/work/app/i18n/custmsg.h:391
+msgid "Now we're changing 'Label Font Size' to '56'\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:26
+#: ../../../../build/work/app/i18n/custmsg.h:393
+msgid "We'll change some other options\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:38
+#: ../../../../build/work/app/i18n/custmsg.h:395
+msgid ""
+"This effect is only used in demonstration mode. During normal operation you "
+"will not see this.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdialog.xtr:45
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdimlin.xtr:117
+#: ../../../../build/work/app/i18n/custmsg.h:398
+msgid "Dimension Lines are used to mark the distances between two points.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:399
+msgid ""
+"Here we will create a Dimension Line to show the separation between two "
+"tracks.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdimlin.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:401
+msgid ""
+"We might also want to measure the distance between two structures. In this "
+"case we will use a larger dimension line.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdimlin.xtr:143
+#: ../../../../build/work/app/i18n/custmsg.h:403
+msgid ""
+"We can use the <Describe> command to change the position of the Dimension "
+"Line and the size of the numbers.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmdimlin.xtr:161
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:406
+msgid ""
+"This example will show the effect of using easements while joining tracks.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:407
+msgid "First, we will enable Cornu Easements and select Join\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:28
+#: ../../../../build/work/app/i18n/custmsg.h:409
+#, fuzzy
+msgid "First select one end of the track\n"
+msgstr "Movido além do fim do trilho"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:411
+#, fuzzy
+msgid "Now the end of different track\n"
+msgstr "Movido além do fim do trilho"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:49
+#: ../../../../build/work/app/i18n/custmsg.h:413
+msgid "You can reposition the ends by dragging them \n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:65
+#: ../../../../build/work/app/i18n/custmsg.h:415
+msgid "When you are happy, Hit Enter or Space, if not use Esc\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:73
+#: ../../../../build/work/app/i18n/custmsg.h:417
+msgid ""
+"The Curve is made up of Beziers parts that smooth the shape the best way it "
+"can be in the space available\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:87
+#: ../../../../build/work/app/i18n/custmsg.h:419
+msgid "Now, we'll show traditional easements instead.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:142
+#: ../../../../build/work/app/i18n/custmsg.h:421
+msgid ""
+"We've selected sharp easements. The minimum radius curve we can use will be "
+"9.75\"\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:422
+msgid "Notice the label on the Easement button has changed to 'Sharp'.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:157
+#: ../../../../build/work/app/i18n/custmsg.h:424
+msgid ""
+"Note the connecting curve does not quite meet the straight tracks. This the "
+"'Offset'.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:165
+#: ../../../../build/work/app/i18n/custmsg.h:426
+msgid "Here the connecting curve is too small.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmease.xtr:175
+#: ../../../../build/work/app/i18n/custmsg.h:428
+msgid ""
+"The connecting curve is made of three tracks, the curve and two easement "
+"segments on each end.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:112
+#: ../../../../build/work/app/i18n/custmsg.h:430
+msgid ""
+"We have designed part of the layout with a siding, 2 branches and a spiral "
+"loop. We want to set elevations.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:431
+msgid "Note: make sure you set endpoint elevations on the Display dialog.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:122
+#: ../../../../build/work/app/i18n/custmsg.h:433
+msgid "First we will set elevations at the end of the branches.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:435
+msgid "We'll select the end of the top branch and set the Elevation to 4\"\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:436
+msgid "First, click on the End-Point.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:142
+#: ../../../../build/work/app/i18n/custmsg.h:438
+msgid "Next, pick Defined on the Elevation dialog Radio box.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:148
+#: ../../../../build/work/app/i18n/custmsg.h:440
+msgid "And set the Elevation to 4.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:156
+#: ../../../../build/work/app/i18n/custmsg.h:442
+msgid "Now, select the other branch and set it's elevation to 2\"\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:170
+#: ../../../../build/work/app/i18n/custmsg.h:444
+msgid "We can move the Elevation label by using Ctrl-Left-Drag\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:182
+#: ../../../../build/work/app/i18n/custmsg.h:446
+msgid "Now, we set the Elevation at one end of the Siding.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:209
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:215
+#: ../../../../build/work/app/i18n/custmsg.h:449
+msgid "We want to find the elevations where the 2 tracks cross.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:224
+#: ../../../../build/work/app/i18n/custmsg.h:451
+msgid "We picked an End-Point on the upper track.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:452
+msgid ""
+"XTrackCAD has computed the Elevation (2.33\") at this point based on the "
+"Elevation at the siding and a combination of the of the first Elevations.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:453
+msgid ""
+"We create a Computed Elevation here that will be automatically adjusted "
+"whenever the other Elevations are changed.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:243
+#: ../../../../build/work/app/i18n/custmsg.h:455
+msgid ""
+"The Compute Elevation is based on Elevations at end of both of the "
+"branches. We may want to base the Elevation on only one branch. For "
+"example if one branch was the mainline we don't want the other branch "
+"affecting this Computed Elevation.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:456
+msgid "We do this by Ignoring the branch we don't want.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:457
+msgid "We'll ignore the lower branch.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:258
+#: ../../../../build/work/app/i18n/custmsg.h:459
+msgid ""
+"Notice at the endpoint where the tracks cross, we see the elevation has "
+"changed from 2.33 to 2.64.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:264
+#: ../../../../build/work/app/i18n/custmsg.h:461
+msgid "Now we want to know the elevation of the lower track.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:274
+#: ../../../../build/work/app/i18n/custmsg.h:463
+msgid "There is no endpoint on the lower track here.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:464
+msgid ""
+"Use Shift-Left-Click to Split the track and create an endpoint we can use "
+"for an elevation,\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:287
+#: ../../../../build/work/app/i18n/custmsg.h:466
+msgid "and create another Computed Elevation point.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:302
+#: ../../../../build/work/app/i18n/custmsg.h:468
+msgid "Now we want to label the grade on this section of track.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:311
+#: ../../../../build/work/app/i18n/custmsg.h:470
+msgid ""
+"Again, since there is no endpoint nearby, we split the track to create an "
+"endpoint we can use,\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:321
+#: ../../../../build/work/app/i18n/custmsg.h:472
+msgid "and create a grade marker.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:335
+#: ../../../../build/work/app/i18n/custmsg.h:474
+msgid "Note the marker has an arrow pointing in the upwards direction.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:344
+#: ../../../../build/work/app/i18n/custmsg.h:476
+msgid ""
+"The last thing we want to do is to create a Station label that we'll use in "
+"the <Profile> command.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:358
+#: ../../../../build/work/app/i18n/custmsg.h:478
+msgid "Now, set the Elevation to Station and enter the its name.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmelev.xtr:376
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:31
+#: ../../../../build/work/app/i18n/custmsg.h:481
+msgid ""
+"XTrackCAD can help find tracks that are curved too sharply or are too "
+"steep. These tracks are Exception tracks and are drawn in the Exception "
+"track color.\n"
+msgstr ""
+"XTrackCAD pode ajudar encontrar curvas muito fechadas ou trechos "
+"demasiadamente inclinados. Esses são os chamados trechos excepcionais e "
+"serão desenhados na cor de trechos excepcionais.\n"
+
+#: ../../../../build/work/app/i18n/custmsg.h:482
+msgid ""
+"In this example we have a curved track with radius of 9\" and a straight "
+"track with a grade of 3.8%.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:483
+msgid " \n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:485
+msgid ""
+"The Layout dialog shows the Minimum Track Radius is 9\" and the Maximum "
+"Track Grade is 5%.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:48
+#: ../../../../build/work/app/i18n/custmsg.h:487
+msgid ""
+"If we make the curved track sharper it will be drawn in the Exception "
+"color.\n"
+msgstr ""
+"Se instalarmos uma curva muito fechada, ela será desenhada na cor de trecho "
+"excepcional.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:61
+#: ../../../../build/work/app/i18n/custmsg.h:489
+msgid ""
+"If we make the straight track steeper it will also be drawn in the Exception "
+"color.\n"
+msgstr ""
+"Se instalarmos um trecho muito inclinado ele será também desenhado na cor de "
+"trecho excepcional.\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:78
+#: ../../../../build/work/app/i18n/custmsg.h:491
+msgid ""
+"You can change the Exception color on the Colors dialog from the Options "
+"menu.\n"
+msgstr ""
+"Você pode alterar a cor dos trechos excepcionais na caixa de diálogo de "
+"cores acessível através do menu \"Opções\".\n"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmexcept.xtr:85
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:21
+#: ../../../../build/work/app/i18n/custmsg.h:494
+msgid ""
+"The unconnected endpoint of any track can also be extended with the <Modify> "
+"command using Right-Drag.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:26
+#: ../../../../build/work/app/i18n/custmsg.h:496
+msgid "Select the endoint and Right-Drag.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:34
+#: ../../../../build/work/app/i18n/custmsg.h:498
+msgid "The extending track can be straight...\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:44
+#: ../../../../build/work/app/i18n/custmsg.h:500
+msgid "... or curved.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:51
+#: ../../../../build/work/app/i18n/custmsg.h:502
+msgid ""
+"If you extend a straight or curved flex track and enable Easements then an "
+"Easement curve will be automatically generated when you extend the track.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmextend.xtr:65
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:124
+#: ../../../../build/work/app/i18n/custmsg.h:505
+msgid ""
+"The <Flip> command will create a mirror image of the selected objects.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:131
+#: ../../../../build/work/app/i18n/custmsg.h:507
+msgid "After selecting the object, drag a line which will form the mirror.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:140
+#: ../../../../build/work/app/i18n/custmsg.h:509
+msgid "The mirror line does not have to be vertical or horizontal.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:149
+#: ../../../../build/work/app/i18n/custmsg.h:511
+msgid "You can also flip any number of objects.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:512
+msgid "Watch what happens to the structure and turnout titles.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:163
+#: ../../../../build/work/app/i18n/custmsg.h:514
+msgid ""
+"Note that the turnout title has been changed from the Medium Right to Medium "
+"Left. When turnouts are flipped, XTrackCAD will try to find a matching "
+"turnout and if found will change the name.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:170
+#: ../../../../build/work/app/i18n/custmsg.h:516
+msgid ""
+"Structures do not have Right and Left hand versions. Their title is changed "
+"to indicate that they were flipped.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:517
+msgid "You can use the <Describe> command to change their title.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmflip.xtr:187
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:21
+#: ../../../../build/work/app/i18n/custmsg.h:520
+msgid ""
+"The <Group> and <Ungroup> commands (on the Tools menu) are a powerful way to "
+"manipulate Turnout and Structure definitions.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:521
+msgid "We'll start with a simple turnout and add a switch machine.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:50
+#: ../../../../build/work/app/i18n/custmsg.h:523
+msgid ""
+"Now that we have drawn a rough outline of a switch machine we will group it "
+"with the turnout definition.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:524
+msgid "First we Select the objects in the new definition.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:526
+msgid "Now do the <Group> command.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:70
+#: ../../../../build/work/app/i18n/custmsg.h:528
+msgid ""
+"The <Group> command dialog shows the Title (Manufacturer, Description and "
+"Part Number) of the new definition. This information is taken from the "
+"Selected objects you are grouping.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:76
+#: ../../../../build/work/app/i18n/custmsg.h:530
+msgid ""
+"The 'Replace with new group?' toggle will replace the Selected objects with "
+"the new definition.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:83
+#: ../../../../build/work/app/i18n/custmsg.h:532
+msgid ""
+"If we don't change the Title then the new definition will replace the "
+"existing definition.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:533
+msgid "We'll give this definition a new Description.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:94
+#: ../../../../build/work/app/i18n/custmsg.h:535
+msgid "We're done with this definition. Press Ok.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:101
+#: ../../../../build/work/app/i18n/custmsg.h:537
+msgid "You will see the updated image on the HotBar.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:108
+#: ../../../../build/work/app/i18n/custmsg.h:539
+msgid ""
+"The <Ungroup> command replaces any Selected turnouts or structures with "
+"their parts.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:540
+msgid ""
+"Structures and non-track segements of turnouts are composed of Lines, "
+"Circles and other shapes. In this turnout these are the two lines and the "
+"two squares.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:541
+msgid ""
+"We will Ungroup this turnout and see how the individual parts can be "
+"changed.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:542
+msgid "First Select the turnout and then Ungroup it.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:123
+#: ../../../../build/work/app/i18n/custmsg.h:544
+msgid "Notice that the Title now indicates the turnout is Ungrouped.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:545
+msgid "Hit Escape to deselect everything.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:133
+#: ../../../../build/work/app/i18n/custmsg.h:547
+msgid "Now Select the lines and squares.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:158
+#: ../../../../build/work/app/i18n/custmsg.h:549
+msgid ""
+"We could modify these object or add new ones. For now we'll just delete "
+"them.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:165
+#: ../../../../build/work/app/i18n/custmsg.h:551
+msgid "And move the Label out of the way.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:176
+#: ../../../../build/work/app/i18n/custmsg.h:553
+msgid "Notice that the turnout has been broken into three parts.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:198
+#: ../../../../build/work/app/i18n/custmsg.h:555
+msgid ""
+"Two ends of the turnout, from the frog to the end of the diverging leg and "
+"from the points to the left, are now straight track sections.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:556
+msgid ""
+"The a turnout is made of a number of individual straight and curved track "
+"segements. This turnout had four segments:\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:557
+msgid " 1 a short straight segment to the left of the points\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:558
+msgid " 2 a long straight segment to the right of the points\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:559
+msgid " 3 a curved segment from the points to the frog\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:560
+msgid ""
+" 4 a straight segment from the frog to the end of the diverging leg.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:561
+msgid "The first and last segments have be converted to straight tracks.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:562
+msgid ""
+"The second and third segments form the the body of the turnout and can not "
+"be ungrouped further.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:563
+msgid ""
+"You can later Group this turnout with the straight segments to recreate the "
+"turnout definition. You can also add other track segments to turnout "
+"definitions.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:242
+#: ../../../../build/work/app/i18n/custmsg.h:565
+msgid "Now, create a track and place the new turnout on it.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:260
+#: ../../../../build/work/app/i18n/custmsg.h:567
+msgid "Now suppose we want to replace the black squares with green circles.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:568
+msgid "First we Select the turnout.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:272
+#: ../../../../build/work/app/i18n/custmsg.h:570
+msgid "And now Ungroup it (from the Tools Menu)\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:277
+#: ../../../../build/work/app/i18n/custmsg.h:572
+msgid ""
+"Notice that the name has changed to indicate the turnout was Ungrouped.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:283
+#: ../../../../build/work/app/i18n/custmsg.h:574
+msgid ""
+"Now, hit escape to deselect everything and then Select the 2 squares and "
+"delete them.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:300
+#: ../../../../build/work/app/i18n/custmsg.h:576
+msgid "Now draw the green circles...\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:321
+#: ../../../../build/work/app/i18n/custmsg.h:578
+msgid "and Group the new definition.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:340
+#: ../../../../build/work/app/i18n/custmsg.h:580
+msgid ""
+"Notice that the turnout in the HotBar is angled the same as the turnout on "
+"the layout. Make sure your new definition is rotated the way you want it.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:379
+#: ../../../../build/work/app/i18n/custmsg.h:582
+msgid "We can also create turnouts from simple straight and curved tracks.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:583
+msgid "We'll create two tracks that have a common endpoint.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:390
+#: ../../../../build/work/app/i18n/custmsg.h:585
+msgid ""
+"When we create the curve from the straight track endpoint we need to hold "
+"down the Shift key to prevent XTrackCAD from trying to join the two tracks.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:408
+#: ../../../../build/work/app/i18n/custmsg.h:587
+msgid "At this point we can modify the tracks if necessary.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:588
+msgid "We will use the <Describe> command to change the tracks.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:420
+#: ../../../../build/work/app/i18n/custmsg.h:590
+msgid "We'll make the Length 7.5\".\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:591
+msgid ""
+"If we change the Length, each End-Point will be moved to shorten the track. "
+"We want to just move the Right End-Point. To control this, change the Pivot "
+"to First which means the Left End-Point will be unchanged when we change the "
+"length (or angle) of the track.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:430
+#: ../../../../build/work/app/i18n/custmsg.h:593
+msgid "Now when change the Length only the Right End-Point will move.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:441
+#: ../../../../build/work/app/i18n/custmsg.h:595
+msgid "Now let's look at the curved track.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:451
+#: ../../../../build/work/app/i18n/custmsg.h:597
+msgid ""
+"Here the Left End-Point (which we don't want to move) is the Second End-"
+"Point, so we'll make that the Pivot.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:459
+#: ../../../../build/work/app/i18n/custmsg.h:599
+msgid "We want the curve to have a radius of 20\" and an angle of 17.5ᅵ.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:600
+msgid "First change the Radius...\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:468
+#: ../../../../build/work/app/i18n/custmsg.h:602
+msgid "and the the Angular Length.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:476
+#: ../../../../build/work/app/i18n/custmsg.h:604
+msgid "Now Select both tracks...\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:492
+#: ../../../../build/work/app/i18n/custmsg.h:606
+msgid "and Group them.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:503
+#: ../../../../build/work/app/i18n/custmsg.h:608
+msgid ""
+"If the two tracks have a common End-Point then they will form a Turnout and "
+"can be switched with the <Train> command. Otherwise they will just be two "
+"track segments grouped together.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:510
+#: ../../../../build/work/app/i18n/custmsg.h:610
+msgid ""
+"We have created a left hand turnout and we also want a right hand version.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:611
+msgid "We'll use the <Flip> command.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:523
+#: ../../../../build/work/app/i18n/custmsg.h:613
+msgid ""
+"Drag a horizontal line that will be the mirror for the <Flip> command.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:533
+#: ../../../../build/work/app/i18n/custmsg.h:615
+msgid "Notice the title has changed to Flipped Left.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:616
+msgid "Now Group the turnout.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:542
+#: ../../../../build/work/app/i18n/custmsg.h:618
+msgid "We'll change the Title and Part No for the new defintion.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:555
+#: ../../../../build/work/app/i18n/custmsg.h:620
+msgid ""
+"To Remove the definitions, use the Custom Management dialog on the Tools "
+"menu.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:560
+#: ../../../../build/work/app/i18n/custmsg.h:622
+msgid "Select the definitions you added and Delete them.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmgroup.xtr:573
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:625
+msgid ""
+"Now we will create a helix in the corner of the layout connected to 2 "
+"tracks.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:28
+#: ../../../../build/work/app/i18n/custmsg.h:627
+#, c-format
+msgid ""
+"We will be creating a helix with a Elevation Difference of 12\", Grade of "
+"1.5% and limit the Vertical Separation to at least 2\".\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:34
+#: ../../../../build/work/app/i18n/custmsg.h:629
+msgid "First set the Elevation Difference to 12\"\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:43
+#: ../../../../build/work/app/i18n/custmsg.h:631
+msgid "Next set the Vertical Separation to 2\"\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:632
+msgid "Notice how this causes the number of Turns to be set to 6\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:52
+#: ../../../../build/work/app/i18n/custmsg.h:634
+msgid "Next set the Grade to 1.5%\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:635
+msgid "Notice how this causes the Radius to change.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:60
+#: ../../../../build/work/app/i18n/custmsg.h:637
+msgid ""
+"Setting these values changes the Radius to 21.2\" and the number of Turns to "
+"6.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:66
+#: ../../../../build/work/app/i18n/custmsg.h:639
+msgid ""
+"Now we specify the Angular Separation between the enterance and exit to the "
+"helix.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:640
+msgid "Note: this will decrease the Radius slightly.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:76
+#: ../../../../build/work/app/i18n/custmsg.h:642
+msgid "Next we can fine tune the helix by decreasing the Radius to 15\".\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:643
+msgid "Note the change to the Grade.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:85
+#: ../../../../build/work/app/i18n/custmsg.h:645
+msgid ""
+"Lastly change the Vertical Separation to 2.5\". The number of Turns will "
+"change to 4 and the grade increase to almost 3%.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:646
+msgid ""
+"Note: the Vertical Separation will be increased. This value is the "
+"Elevation Difference (12.0) divided by the total number of turns. The total "
+"number of turns is 4.25: 4 whole Turns plus a quarter turn for the Angular "
+"Separation.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:94
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:99
+#: ../../../../build/work/app/i18n/custmsg.h:649
+msgid ""
+"Now that the helix parameters are set we can place the helix on the layout.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:112
+#: ../../../../build/work/app/i18n/custmsg.h:651
+msgid ""
+"Next, join the 2 straight tracks to the helix in the same way we join to a "
+"circle.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:145
+#: ../../../../build/work/app/i18n/custmsg.h:653
+msgid ""
+"Notice that the length has increased because we have more than 4 turns in "
+"the helix. It is closer to 4.25 turns.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:155
+#: ../../../../build/work/app/i18n/custmsg.h:655
+msgid ""
+"Next, we assign elevations to the 2 End-Points of the helix. This will "
+"determine the grade and separation between the helix coils.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:656
+msgid ""
+"Note: we could set the elevations anywhere along the connecting tracks "
+"instead. XTrackCAD treats a helix as a single length of track for "
+"elevations.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:176
+#: ../../../../build/work/app/i18n/custmsg.h:658
+msgid ""
+"We have set the elevations to 1\" and 13\" to produce a grade of 3.0% with "
+"2.8\" between coils.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:659
+msgid ""
+"You can use the <Describe> command to change the number of Turns or the "
+"Elevations at either end of the Helix. This will affect the Grade and "
+"Vertical Separation.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:184
+#: ../../../../build/work/app/i18n/custmsg.h:661
+msgid "The helix description can be moved by the <Move Label> command.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhelix.xtr:194
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:664
+msgid ""
+"In addition to using the turnout definitions you can create 'Hand Laid "
+"Turnout'.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:665
+msgid "This is two step process:\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:23
+#: ../../../../build/work/app/i18n/custmsg.h:667
+msgid "1 - click on the frog and drag away to set the frog angle\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:29
+#: ../../../../build/work/app/i18n/custmsg.h:669
+msgid ""
+" Hint: the further you drag from the frog, the more accurate the angle.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:34
+#: ../../../../build/work/app/i18n/custmsg.h:671
+msgid "2 - click and drag to set the position of the points\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:42
+#: ../../../../build/work/app/i18n/custmsg.h:673
+msgid "We can create Hand Laid Turnouts on curved tracks.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:58
+#: ../../../../build/work/app/i18n/custmsg.h:675
+msgid "A Hand Laid Turnout is composed of several parts.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:67
+#: ../../../../build/work/app/i18n/custmsg.h:677
+msgid "The actual Turnout is a short portion at the points.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:77
+#: ../../../../build/work/app/i18n/custmsg.h:679
+msgid "The other parts are various straight and curved segments.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:81
+#: ../../../../build/work/app/i18n/custmsg.h:681
+msgid "The new curved turnout is also composed of several segments.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmhndld.xtr:107
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:7
+#: ../../../../build/work/app/i18n/custmsg.h:684
+msgid "Welcome to the XTrackCAD demonstration.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:685
+msgid ""
+"This will show some the features of XTrackCAD in an automated presentation. "
+"This window contains a number of controls and a message area (which I hope "
+"you are reading now). \n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:686
+msgid "The controls are:\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:687
+msgid "Step - advances to the next step of the demo.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:688
+msgid "Next - skips ahead to the next demo.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:689
+msgid "Quit - exits the demo and returns to XTrackCAD.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:690
+msgid "Speed - controls the speed of the demo.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:691
+msgid "Click Step now for the next message.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:23
+#: ../../../../build/work/app/i18n/custmsg.h:693
+msgid ""
+"If this is the first time you have used the demo you may want to rearrange "
+"the windows so the demo window does not obscure the main window.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:694
+msgid ""
+"You can move the demo window now by dragging on the title bar at the top of "
+"the window. I suggest you move it to the top of your screen.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:31
+#: ../../../../build/work/app/i18n/custmsg.h:696
+msgid ""
+"The various controls are disabled when it would be inappropiate to click on "
+"them. When the demo is running the Step button is disabled. When the demo "
+"is paused the Step button is enabled and you can click it when you are ready "
+"to view the next part of the demo.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:697
+msgid "You can click on Quit to return to XTrackCAD at any time.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:698
+msgid "You can adjust the speed of the demonstration with the Speed control.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:60
+#: ../../../../build/work/app/i18n/custmsg.h:700
+msgid "The demos are designed to fit within a certain sized window.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:701
+msgid ""
+"For best results, change the size of the main XTrackCAD window so the box "
+"shape is completely visible.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:702
+msgid "You can do this by clicking and dragging on a corner of the window.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:67
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmintro.xtr:72
+#: ../../../../build/work/app/i18n/custmsg.h:705
+msgid "This is the end of the introductory demo.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:706
+msgid ""
+"Please click Step for the next demo or click Quit to return to XTrackCAD.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:708
+msgid ""
+"You can also join to and from circles. This will change the circles to "
+"curves.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:709
+msgid "In this example we will join two circles.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:24
+#: ../../../../build/work/app/i18n/custmsg.h:711
+msgid ""
+"Here we've selected points on the two circles. The direction of the "
+"connections (whether clockwise or counter clockwise) is controlled by where "
+"on the circle you select the connection points.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:133
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:152
+#: ../../../../build/work/app/i18n/custmsg.h:714
+msgid "Now let's try a cross connection.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjcir.xtr:246
+#: ../../../../build/work/app/i18n/custmsg.h:716
+msgid ""
+"Note that the connection is from different 'ends' of the circle than in the "
+"last example.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:22
+#: ../../../../build/work/app/i18n/custmsg.h:718
+msgid "This examples shows joining tracks whose End-Points are aligned.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:719
+msgid ""
+"Note the 2 pairs of tracks have End-Points that are close and aligned but "
+"not connected.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:30
+#: ../../../../build/work/app/i18n/custmsg.h:721
+msgid "The first case joins the curve and straight track.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:40
+#: ../../../../build/work/app/i18n/custmsg.h:723
+msgid "The second case will join the two straight tracks.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:50
+#: ../../../../build/work/app/i18n/custmsg.h:725
+msgid "Note that the two straight tracks were combined to form one track.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnabut.xtr:55
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:728
+msgid ""
+"The <Join> command can also join straight and curved tracks (in either "
+"order).\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:729
+msgid "We will enable Cornu easements\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:32
+#: ../../../../build/work/app/i18n/custmsg.h:731
+msgid "A connecting cornu track is drawn between the two tracks.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:41
+#: ../../../../build/work/app/i18n/custmsg.h:733
+msgid ""
+"Notice that the curved track is extended as the connection point moves past "
+"the End-Point.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:735
+msgid ""
+"Here the connection makes the curved track wrap around. This is not a "
+"useful shape, there is a discontinuity at the end. \n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:736
+msgid "Adjusting the end point will fix it. \n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjncs.xtr:64
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnmove.xtr:18
+#: ../../../../build/work/app/i18n/custmsg.h:739
+msgid "The <Join> command can move one group of tracks to join with another.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:740
+msgid ""
+"First <Select> the tracks you want to move with Ctrl so that they are both "
+"selected.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnmove.xtr:36
+#: ../../../../build/work/app/i18n/custmsg.h:742
+msgid "Click <Join> and Shift-Left-Click on the two End-Points.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnmove.xtr:51
+#: ../../../../build/work/app/i18n/custmsg.h:744
+msgid "The selected tracks are moved into position.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:746
+msgid ""
+"Two straight tracks can be joined by selecting the two endoints. The "
+"selected endpoints will be those closest to the cursor when the track is "
+"selected.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:747
+msgid "First, we will select Easements None and then select Join\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:26
+#: ../../../../build/work/app/i18n/custmsg.h:749
+msgid "Now we select two points on the tracks\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:36
+#: ../../../../build/work/app/i18n/custmsg.h:751
+msgid ""
+"A connecting track is drawn between the two tracks. Notice how it moves as "
+"the cursor is dragged along the second track.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:47
+#: ../../../../build/work/app/i18n/custmsg.h:753
+msgid ""
+"Note that two tracks are extended if you move past the end of the track.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:55
+#: ../../../../build/work/app/i18n/custmsg.h:755
+msgid ""
+"Notice what happens if you drag past the intersection points of the two "
+"tracks.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:757
+msgid "This is probably not a very useful thing to do.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:70
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:90
+#: ../../../../build/work/app/i18n/custmsg.h:760
+msgid "Now we will do this with Cornu Easements \n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:761
+msgid "First, we will select Easements Cornu and then select Join\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:102
+#: ../../../../build/work/app/i18n/custmsg.h:763
+msgid "Now we again select two points on the tracks\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:112
+#: ../../../../build/work/app/i18n/custmsg.h:765
+msgid ""
+"A connecting cornu is drawn between the two tracks. Notice how it behaves "
+"as the cursor is dragged along the second track.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:123
+#: ../../../../build/work/app/i18n/custmsg.h:767
+msgid ""
+"Note that either tracks can be extended if you move past the end of it.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:131
+#: ../../../../build/work/app/i18n/custmsg.h:769
+msgid ""
+"Notice this time what happens if you drag past the intersection points of "
+"the two tracks.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:139
+#: ../../../../build/work/app/i18n/custmsg.h:771
+msgid "This is more useful because you can move the other end as well.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjnss.xtr:150
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:774
+msgid "You can connect from any track to a turntable\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:775
+msgid "With a Cornu Easement you can have a turntable as the first point.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:38
+#: ../../../../build/work/app/i18n/custmsg.h:777
+msgid ""
+"You cannot place the connecting track too close to an existing stall track. "
+"How close you can get is controlled by the Turntable Angle on the Setup "
+"dialog.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:778
+msgid "In this example it is set to 15 degrees.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:780
+msgid "You can drag the connecting point all round the turntable.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:103
+#: ../../../../build/work/app/i18n/custmsg.h:782
+msgid ""
+"As you drag away from the turntable a straight track will be drawn to the "
+"cursor postion and a curve will be drawn from the cursor to the connecting "
+"track.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:111
+#: ../../../../build/work/app/i18n/custmsg.h:784
+msgid ""
+"Now the cursor will be moved within the turntable, but the end stays on the "
+"edge of the well.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:161
+#: ../../../../build/work/app/i18n/custmsg.h:786
+msgid "All done.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmjntt.xtr:169
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:38
+#: ../../../../build/work/app/i18n/custmsg.h:789
+msgid ""
+"The Draw Commands are used to draw straight and curved lines on the layout.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:46
+#: ../../../../build/work/app/i18n/custmsg.h:791
+msgid ""
+"Lines are drawn by clicking at the starting postion and dragging to the "
+"final position.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:792
+msgid ""
+"By default, the new line will snap to existing objects. Hold down the "
+"<Ctrl> and <Alt> keys to prevent this from happening.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:91
+#: ../../../../build/work/app/i18n/custmsg.h:794
+msgid "You also draw in various colors and line widths.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:109
+#: ../../../../build/work/app/i18n/custmsg.h:796
+msgid ""
+"Like Curved Tracks, Curved Lines can be drawn by a variety of methods.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:797
+msgid ""
+"Here we will draw a Curve by dragging from one End-Point to the other to "
+"define the chord of the Curve. Then we will drag from the center to shape "
+"the curve.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:184
+#: ../../../../build/work/app/i18n/custmsg.h:799
+msgid "Boxes are useful for drawing rectangular shapes.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:194
+#: ../../../../build/work/app/i18n/custmsg.h:801
+msgid ""
+"Circles can be drawn by clicking on the center or edge and dragging to set "
+"the radius.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:802
+msgid "Here we will drag from the Center.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:204
+#: ../../../../build/work/app/i18n/custmsg.h:804
+msgid "Lines and Shapes can be deleted by Selecting and Deleting.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines.xtr:227
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:91
+#: ../../../../build/work/app/i18n/custmsg.h:807
+msgid "We also draw Polylines and filled shapes.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:98
+#: ../../../../build/work/app/i18n/custmsg.h:809
+msgid ""
+"A Polyline is drawn by dragging to place each of the point in the Polyline.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:125
+#: ../../../../build/work/app/i18n/custmsg.h:811
+msgid ""
+"To finish off the Polyline press the <Space> key or choose another drawing "
+"type.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:813
+msgid "A filled Polygon is drawn in the same way.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:158
+#: ../../../../build/work/app/i18n/custmsg.h:815
+msgid "When you are finished, press the <Space> key to complete the polygon.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:165
+#: ../../../../build/work/app/i18n/custmsg.h:817
+msgid ""
+"You can use the Above and Below Commands to move lines and shapes to the "
+"front or back of the drawing.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:182
+#: ../../../../build/work/app/i18n/custmsg.h:819
+msgid "Filled Boxes and Circles work the same as line Boxes and Circles.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmlines2.xtr:199
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:8
+#: ../../../../build/work/app/i18n/custmsg.h:822
+msgid ""
+"In the drawing area of the main window you can see an hollow upwards arrow "
+"which represents the mouse cursor. In this demo the mouse will move about "
+"to show you the actions of different commands.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:823
+msgid ""
+"The hollow arrow represents the mouse cursor without a mouse button being "
+"pressed.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:825
+msgid ""
+"When the left mouse button would be pressed, the mouse cursor appears to "
+"flash and the hollow arrow is replaced by a solid left-pointing red arrow "
+"while the button is pressed.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:826
+msgid ""
+"Note: these color changes occur only during the demo to simulate mouse "
+"button presses.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:24
+#: ../../../../build/work/app/i18n/custmsg.h:828
+msgid ""
+"Moving the mouse while a mouse button is pressed is called 'dragging'.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:32
+#: ../../../../build/work/app/i18n/custmsg.h:830
+msgid ""
+"When the left mouse button is released, the mouse cursor flashes and the "
+"hollow up black arrow is restored.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:40
+#: ../../../../build/work/app/i18n/custmsg.h:832
+msgid ""
+"Dragging with the right button is simulated by a blue right-facing solid "
+"cursor.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:49
+#: ../../../../build/work/app/i18n/custmsg.h:834
+#, fuzzy
+msgid "Release Right Click\n"
+msgstr "Clicar com o botão direito"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:57
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:62
+#: ../../../../build/work/app/i18n/custmsg.h:837
+msgid "Sometimes the Shift key is held down while using the mouse \n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:838
+msgid ""
+"This is indicated by an outlined arrow with the letter S near the arrow.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:71
+#: ../../../../build/work/app/i18n/custmsg.h:840
+msgid ""
+"The left mouse button is held down with the Shift and dragged for a Left-"
+"Shift-Drag. \n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:86
+#: ../../../../build/work/app/i18n/custmsg.h:842
+msgid "Sometimes the Control key is held down while using the mouse. \n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:843
+msgid ""
+"This is indicated with an upward filled arrow head with the letter C near "
+"the arrow \n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:98
+#: ../../../../build/work/app/i18n/custmsg.h:845
+msgid ""
+"If while the Control is held the Left mouse button is held down it is a Ctrl-"
+"Move and a Ctrl-Left-Drag. \n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:846
+msgid ""
+"This is indicated by an an left-facing open-headed arrow with the letter C "
+"near it.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:114
+#: ../../../../build/work/app/i18n/custmsg.h:848
+msgid "You can also use the Control key with the Right mouse button. \n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:849
+msgid ""
+"This is indicated with a right-facing filled arrow with an open arrow head "
+"and the letter C near the arrow \n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmouse.xtr:130
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:23
+#: ../../../../build/work/app/i18n/custmsg.h:852
+msgid ""
+"The main drawing area shows a portion of total layout. You can zoom in or "
+"zoom out by choosing 'Zoom In' or 'Zoom Out' in the 'Edit' menu, by using "
+"the Zoom buttons on the toolbar or by using the 'Page Down' and 'Page Up' "
+"keys.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:853
+msgid "You can see the entire layout in the Map window.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:33
+#: ../../../../build/work/app/i18n/custmsg.h:855
+msgid "As you Zoom Out tracks are drawn with one line instead of two.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:49
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:858
+msgid ""
+"You can change what portion of the layout is shown by using the 'Map' window "
+"which shows a compressed version of the entire layout. A hilighted area of "
+"the 'Map' (in blue highlight) shows what portion of the layout is displayed "
+"in the main drawing area.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:859
+msgid ""
+"You can Left-Drag the hilighted area in the Map window to change the "
+"displayed portion of the layout.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:861
+msgid ""
+"You can also Right-Drag on the Map window to set the scale and position of "
+"the Main window.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmmovabt.xtr:72
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmnotes.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:864
+msgid ""
+"The <Note> command lets you attach notes to various spots on the layout.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmnotes.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:866
+msgid ""
+"When you place a note, the Note editor window is displayed which lets you "
+"enter the note.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmnotes.xtr:22
+#: ../../../../build/work/app/i18n/custmsg.h:868
+msgid ""
+"If you click on a note in <Describe> mode the Note editor displays the "
+"note.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmnotes.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:870
+msgid "This is the end of the XTrackCAD Demos.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:871
+msgid "Click Step to return to XTrackCAD.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:872
+msgid "Thanks for watching.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:32
+#: ../../../../build/work/app/i18n/custmsg.h:874
+msgid "This example shows how to create parallel tracks.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:37
+#: ../../../../build/work/app/i18n/custmsg.h:876
+msgid ""
+"The separation is set in the <Parallel Separation> window. You should set "
+"this value before you begin to select tracks.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:49
+#: ../../../../build/work/app/i18n/custmsg.h:878
+msgid ""
+"You control which side the parallel track will be on by moving the cursor "
+"from one side of the track centerline to the other.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:81
+#: ../../../../build/work/app/i18n/custmsg.h:880
+msgid "When you release the mouse button the new parallel track is created.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:881
+msgid ""
+"Note that the <Parallel> command remains active after you created the "
+"track. This is controlled by the Sticky dialog in the Options menu.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:92
+#: ../../../../build/work/app/i18n/custmsg.h:883
+msgid "You cannot create a track parallel to a turnout.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:172
+#: ../../../../build/work/app/i18n/custmsg.h:885
+msgid ""
+"Note that the new curved track is automatically connected to the short "
+"parallel track.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmparall.xtr:180
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:19
+#: ../../../../build/work/app/i18n/custmsg.h:888
+msgid ""
+"Polylines and polygons (created with the <Draw> command) can be modified by "
+"dragging on their corners or edges.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:889
+msgid "First Left Click on the shape you want to modify.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:29
+#: ../../../../build/work/app/i18n/custmsg.h:891
+msgid "Then drag on the point you want to move\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:39
+#: ../../../../build/work/app/i18n/custmsg.h:893
+msgid "And finally press the Space bar to finish the change\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:54
+#: ../../../../build/work/app/i18n/custmsg.h:895
+msgid "If you select the middle of an Edge a new Corner is created.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:72
+#: ../../../../build/work/app/i18n/custmsg.h:897
+msgid "To delete a corner, select and then press Delete or Backspace\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:98
+#: ../../../../build/work/app/i18n/custmsg.h:899
+msgid "But you cannot have a Poly-shape with less than 3 sides.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmplymod.xtr:126
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:126
+#: ../../../../build/work/app/i18n/custmsg.h:902
+msgid ""
+"To use the <Profile> command you first need to define Elevations on your "
+"layout.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:903
+msgid "In this example we'll use the Elevations defined in the last example.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:904
+msgid "You can move or resize the Profile dialog now if you want.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:135
+#: ../../../../build/work/app/i18n/custmsg.h:906
+msgid ""
+"To show the Profile you need to select a Path on the tracks of your layout.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:907
+msgid "Select a Defined Elevation point (marked by Gold dots).\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:908
+msgid "We will start with the right end of the siding.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:148
+#: ../../../../build/work/app/i18n/custmsg.h:910
+msgid ""
+"The second Point is at the left end of the siding. The Path will be drawn "
+"in Purple on the layout.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:160
+#: ../../../../build/work/app/i18n/custmsg.h:912
+msgid "Now select the end of one of the Branches\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:169
+#: ../../../../build/work/app/i18n/custmsg.h:914
+msgid ""
+"The Profile line is drawn in Red. This indicates that there some turnouts "
+"on that section of the Path which have more than 2 connections.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:915
+msgid ""
+"The grade on this part of the Path is the average and may be affected by "
+"other Elevations, such the end of the lower branch.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:178
+#: ../../../../build/work/app/i18n/custmsg.h:917
+msgid "Now try to select the End-Point of the other branch.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:918
+msgid ""
+"You will get an error message because there is no route to one of the ends "
+"of the existing Path.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:187
+#: ../../../../build/work/app/i18n/custmsg.h:920
+msgid ""
+"In this case remove the last part of the Path by clicking on current end of "
+"the Path and reselect the End-Point.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:198
+#: ../../../../build/work/app/i18n/custmsg.h:922
+msgid "Notice that the Grade has changed on the Profile.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:205
+#: ../../../../build/work/app/i18n/custmsg.h:924
+msgid ""
+"You can Ignore End-Points on the Path by using Shift-Right-Click to display "
+"the Profile Options popup menu and chosing Ignore.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:925
+msgid ""
+"Note: We can't show the menu in demo mode but we will show the effect of a "
+"Shift Right Click and selecting ignore. We will be Ignoring the End-Point "
+"of the Turnout that is not on the Path.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:217
+#: ../../../../build/work/app/i18n/custmsg.h:927
+msgid "Notice that part of the Profile line is redrawn in Blue.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:928
+msgid ""
+"Also, the Computed Elevations and Grade marker on the right side of the "
+"layout have been updated.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:225
+#: ../../../../build/work/app/i18n/custmsg.h:930
+msgid ""
+"You can set additional Defined Elevation points using the Profile Options "
+"popup menu. These points are added to the Profile if they are on the Path.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:931
+msgid ""
+"We do this by Shift Right Click to display the Profile Options popup menu "
+"and selecting Define.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:237
+#: ../../../../build/work/app/i18n/custmsg.h:933
+msgid ""
+"We've just added a Defined Elevation point to the middle of the lower "
+"branch. Notice the addition on the Profile dialog.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:246
+#: ../../../../build/work/app/i18n/custmsg.h:935
+msgid ""
+"For the siding we defined a Station name but it's not on the Path, since the "
+"Path takes the shortest distance between points.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:936
+msgid ""
+"We can Ignore one of the End-Points on a Turnout to force the Path to take "
+"the other route.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:937
+msgid ""
+"Again we use Shift-Right-Click to display the Profile Options menu and "
+"select ignore.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:258
+#: ../../../../build/work/app/i18n/custmsg.h:939
+msgid "Now remove the First section of the Path,\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:268
+#: ../../../../build/work/app/i18n/custmsg.h:941
+msgid "and reselect it.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:277
+#: ../../../../build/work/app/i18n/custmsg.h:943
+msgid ""
+"Now the Path goes through the Station End-Point and the name appears on the "
+"Profile dialog.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:286
+#: ../../../../build/work/app/i18n/custmsg.h:945
+msgid "Now we need to increase the separation where the tracks cross.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:946
+msgid ""
+"The two Elevations you see here are Computed Elevations which means "
+"XTrackCAD dynamically computes the Elevation based on the Elevations of "
+"connecting tracks.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:947
+msgid ""
+"First make the lower End-Point a Defined Elevation point using Shift-Right-"
+"Click and the Profile Options menu. You will see the End-Point marked by a "
+"Gold dot and a new line is added to the Profile dialog.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:297
+#: ../../../../build/work/app/i18n/custmsg.h:949
+msgid "Now, drag the point on the Profile Dialog to change the Elevation.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:950
+msgid ""
+"Note the grade on each side of the point will be displayed at the bottom of "
+"the Profile dialog.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:319
+#: ../../../../build/work/app/i18n/custmsg.h:952
+msgid ""
+"After we release the Profile is updated to show the new Elevation and "
+"Grade.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmprof.xtr:326
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:119
+#: ../../../../build/work/app/i18n/custmsg.h:955
+msgid "The <Rescale> command will change the size of the selected objects.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:956
+msgid "First we will try rescaling by ratio.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:126
+#: ../../../../build/work/app/i18n/custmsg.h:958
+msgid "We are going to make everything 150% bigger.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:136
+#: ../../../../build/work/app/i18n/custmsg.h:960
+msgid "Note the track gauge did not change.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:143
+#: ../../../../build/work/app/i18n/custmsg.h:962
+msgid "Let's try that again.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:963
+msgid "Now we are going to convert from one scale to another.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:154
+#: ../../../../build/work/app/i18n/custmsg.h:965
+msgid "We will convert everything from N scale to HO scale...\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:161
+#: ../../../../build/work/app/i18n/custmsg.h:967
+msgid "and change the track gauge as well.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:169
+#: ../../../../build/work/app/i18n/custmsg.h:969
+msgid "Note that the Title of the turnout did not change.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrescal.xtr:177
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrotate.xtr:72
+#: ../../../../build/work/app/i18n/custmsg.h:972
+msgid ""
+"The <Rotate> command will pivot the Selected objects. First Click on the "
+"pivot point and then drag to Rotate the objects.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:973
+msgid ""
+"In this example we will rotate the selected structure about it's center.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrotate.xtr:135
+#: ../../../../build/work/app/i18n/custmsg.h:975
+msgid ""
+"The <Rotate> command will restrict the rotation to increments of 15° if you "
+"hold down the <Shift> and <Ctrl> keys.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrotate.xtr:316
+#: ../../../../build/work/app/i18n/custmsg.h:977
+msgid ""
+"There are Rotate options that you can access by Shift-Right-Click command "
+"menu and choosing 'Rotate...'.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:978
+msgid ""
+"You can rotate the selected object by a fixed rotatation (15, 30, 45, 90, "
+"180) either clockwise or counter-clockwise, or by manually entering any "
+"angle.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:979
+msgid ""
+"The other option is 'Align' which allows you align selected objects with an "
+"unselected object. This is useful to align railside buildings with track.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:980
+msgid "Unfortunately, we can not currently demonstrate these features.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmrotate.xtr:529
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmruler.xtr:14
+#: ../../../../build/work/app/i18n/custmsg.h:983
+msgid ""
+"The <Ruler> command draws a Ruler on the layout you can use to measure "
+"distances.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmruler.xtr:24
+#: ../../../../build/work/app/i18n/custmsg.h:985
+msgid "If you press the <Ruler> command again the Ruler is removed.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmruler.xtr:32
+#: ../../../../build/work/app/i18n/custmsg.h:987
+msgid "But you can place it somewhere else.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmruler.xtr:42
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:173
+#: ../../../../build/work/app/i18n/custmsg.h:990
+msgid "The <Select> command is used to select tracks.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:991
+msgid "Selected tracks can be moved or rotated during the <Select> command.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:992
+msgid "Selected tracks can also be deleted, hidden, listed and exported.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:993
+msgid ""
+"When you move the cursor near a track that could be selected, the track is "
+"drawn with think blue lines.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:184
+#: ../../../../build/work/app/i18n/custmsg.h:995
+#, fuzzy
+msgid "A Left-Click selects a track\n"
+msgstr "Selecionar um trilho"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:192
+#: ../../../../build/work/app/i18n/custmsg.h:997
+msgid ""
+"The selected track will have red X's drawn where it is connected to "
+"unselected tracks. This indicates where the track will be disconnected if "
+"the selected tracks are moved, rotated or deleted.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:998
+msgid "A Ctrl-Left-Click adds tracks to the selection\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:211
+#: ../../../../build/work/app/i18n/custmsg.h:1000
+msgid "Selecting a selected track re-selects only it.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:219
+#: ../../../../build/work/app/i18n/custmsg.h:1002
+msgid "Selecting off all tracks de-selects them.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:227
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:232
+#: ../../../../build/work/app/i18n/custmsg.h:1005
+msgid ""
+"To demonstrate Select Connected, first select two tracks at the end of a "
+"part to be selected \n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:248
+#: ../../../../build/work/app/i18n/custmsg.h:1007
+msgid ""
+"Shift-Left-Click on a track will select all unselected tracks connected to "
+"the track. Selection stops at a previously selected track.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:260
+#: ../../../../build/work/app/i18n/custmsg.h:1009
+msgid ""
+"Be careful with this because its very easy to select all tracks this way\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:274
+#: ../../../../build/work/app/i18n/custmsg.h:1011
+msgid "The <esc> key will deselect all objects.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:282
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:287
+#: ../../../../build/work/app/i18n/custmsg.h:1014
+msgid "Left-Drag is used to select all objects within an area.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:295
+#: ../../../../build/work/app/i18n/custmsg.h:1016
+msgid "Shift-Left-Drag is used to move selected tracks.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1017
+msgid ""
+"When you move selected tracks that are connected to unselected tracks, the "
+"tracks will be disconnected. These points are marked by a Red cross on the "
+"layout.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1018
+msgid ""
+"If the unconnected end point of a track and one being moved are close "
+"enough, two circles are displayed, showing where the tracks will be snapped "
+"together. \n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:313
+#: ../../../../build/work/app/i18n/custmsg.h:1020
+msgid "Let's move the Main window to see what's going on next\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:320
+#: ../../../../build/work/app/i18n/custmsg.h:1022
+msgid ""
+"Ctrl-Left-Drag rotates the selected tracks about the pivot point (which is "
+"where you started the drag)\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:382
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:387
+#: ../../../../build/work/app/i18n/custmsg.h:1025
+msgid ""
+"Next we select the <Join Tracks> command to demonstrate \"Move To Join\" \n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:392
+#: ../../../../build/work/app/i18n/custmsg.h:1027
+msgid ""
+"You can use Shift-Left-Click to select an open endpoint of a selected track "
+"to join with an unselected track. \n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1028
+msgid "We'll move the Main window again.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:415
+#: ../../../../build/work/app/i18n/custmsg.h:1030
+msgid ""
+"You then Left-Click on an endpoint of a unselected track to move the "
+"selected tracks to join. \n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmselect.xtr:430
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:30
+#: ../../../../build/work/app/i18n/custmsg.h:1033
+msgid "The <Split> command is used to split and disconnect tracks.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:35
+#: ../../../../build/work/app/i18n/custmsg.h:1035
+msgid "Simply select the spot on the track you want to split.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1036
+msgid "You cannot split turnouts (unless you hold down the Shift key).\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:48
+#: ../../../../build/work/app/i18n/custmsg.h:1038
+msgid ""
+"If you split at spot that is already an End-Point between two tracks, or "
+"split twice at the same spot, the track is disconnected.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:60
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:65
+#: ../../../../build/work/app/i18n/custmsg.h:1041
+msgid "The <Tunnel> command marks selected tracks as hidden.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1042
+msgid ""
+"A tunnel portal is drawn at the boundary between hidden and normal track.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1043
+msgid ""
+"How the hidden tracks are drawn (solid, dashed or invisible) is controlled "
+"by the Draw EndPts radio button group on the Setup dialog.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:86
+#: ../../../../build/work/app/i18n/custmsg.h:1045
+msgid ""
+"To 'un-hide' a track just Select it again and click the Tunnel button.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmsplit.xtr:100
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmstrtrk.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:1048
+msgid ""
+"Straight tracks are created by selecting the first End-Point of the track.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmstrtrk.xtr:12
+#: ../../../../build/work/app/i18n/custmsg.h:1050
+msgid "Then the other End-Point is dragged to its final postion.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmstrtrk.xtr:20
+#: ../../../../build/work/app/i18n/custmsg.h:1052
+msgid "The left mouse button is released at the final end postion.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmstrtrk.xtr:27
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:23
+#: ../../../../build/work/app/i18n/custmsg.h:1055
+msgid ""
+"Table Edges are used to mark the edges of the layout, either for aisles or "
+"room walls.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:47
+#: ../../../../build/work/app/i18n/custmsg.h:1057
+msgid "A Table Edge is attracted to the ends of other Table Edges.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:132
+#: ../../../../build/work/app/i18n/custmsg.h:1059
+msgid "Table Edges can be modified by dragging on their ends.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:180
+#: ../../../../build/work/app/i18n/custmsg.h:1061
+msgid ""
+"If you hold down the Control key while dragging then the Table Edge will be "
+"attracted to other objects.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtbledg.xtr:218
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:1064
+msgid ""
+"These examples shows some of the various Turnout Designer windows. Each "
+"window defines a different type of turnout.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1065
+msgid ""
+"In each window there are a number of parameters to fill in and one or two "
+"description lines.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1066
+msgid "You can print the design to check the dimensions before saving them.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:16
+#: ../../../../build/work/app/i18n/custmsg.h:1068
+msgid "This is the regular turnout.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1069
+msgid ""
+"In addition to the dimensions, you also enter the Title (Manufacturer, "
+"Description and Part Number). For Turnouts with Left and Right hand "
+"versions there are separate Descriptions and Part Numbers.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1070
+msgid ""
+"Some Turnouts and Sectional track are pre-mounted on roadbed. For these "
+"parts you can specify the width of the roadbed, the thickness of the lines "
+"drawn for the edge of the roadbed and the color.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:30
+#: ../../../../build/work/app/i18n/custmsg.h:1072
+msgid "The double slip switch is described by only a few parameters.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:40
+#: ../../../../build/work/app/i18n/custmsg.h:1074
+msgid "The double crossover only needs length and track separation.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtodes.xtr:48
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:30
+#: ../../../../build/work/app/i18n/custmsg.h:1077
+msgid ""
+"Pressing the turnout button displays the Turnout Selection window to let you "
+"choose a turnout to place.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1078
+msgid ""
+"Note that once you start to place the turnout on the Main window the Turnout "
+"Selection window disappears. This feature is enabled by the Hide toggle "
+"button on the dialog.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:38
+#: ../../../../build/work/app/i18n/custmsg.h:1080
+msgid ""
+"You can place the turnout on a arbitrary position on the layout. Left-drag "
+"the turnout into place...\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:85
+#: ../../../../build/work/app/i18n/custmsg.h:1082
+msgid "Then you can rotate the turnout by Right dragging.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1083
+msgid ""
+"You can also use Shift-Right-Click to display a popup menu that lets you "
+"rotate the Turnout by specific angles.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:136
+#: ../../../../build/work/app/i18n/custmsg.h:1085
+msgid ""
+"When you are satisfied with the position and orientation of the turnout "
+"press Space bar or the Return key on the keyboard to finish placing the "
+"turnout.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1086
+msgid ""
+"Pressing the Close button on the Turnout dialog will end the <Turnout> "
+"command as well as placing the turnout.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:146
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:189
+#: ../../../../build/work/app/i18n/custmsg.h:1089
+msgid ""
+"If you drag along an existing track the new turnout will be attached to the "
+"track.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1090
+msgid ""
+"Note that the status line tells you the number of End-Points that would be "
+"connected and, the maximum displacement of the End-Points. This will be "
+"useful when building complex track, as we will see later.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:220
+#: ../../../../build/work/app/i18n/custmsg.h:1092
+msgid ""
+"By moving the cursor from one side to the other of the track centerline you "
+"can flip the turnout 180ᅵ.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:236
+#: ../../../../build/work/app/i18n/custmsg.h:1094
+msgid ""
+"If you try to drag across another turnout the new turnout will placed at the "
+"nearest End-Point of the existing turnout.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:299
+#: ../../../../build/work/app/i18n/custmsg.h:1096
+msgid ""
+"When you press Space or Return while the turnout is on a track, the track "
+"will be split and the new turnout attached automatically.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:307
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:366
+#: ../../../../build/work/app/i18n/custmsg.h:1099
+msgid "Pressing Close ends the <Turnout> command.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtosel.xtr:372
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:21
+#: ../../../../build/work/app/i18n/custmsg.h:1102
+msgid "Sometimes it's useful to modify turnouts triming one of the ends.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1103
+msgid "We use the <Split> command for this.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:28
+#: ../../../../build/work/app/i18n/custmsg.h:1105
+msgid "Normally, if we try to Split a turnout we get an error message.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:37
+#: ../../../../build/work/app/i18n/custmsg.h:1107
+msgid "Hold down the Shift key and try again.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:52
+#: ../../../../build/work/app/i18n/custmsg.h:1109
+msgid ""
+"The end of the turnout has been replaced by a piece of straight flex track "
+"which we can modify.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:63
+#: ../../../../build/work/app/i18n/custmsg.h:1111
+msgid "We can try splitting the diverging leg.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:74
+#: ../../../../build/work/app/i18n/custmsg.h:1113
+msgid ""
+"Notice that the tail of the diverging leg has been changed to a curved "
+"track...\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:84
+#: ../../../../build/work/app/i18n/custmsg.h:1115
+msgid "and a straight track.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtotrim.xtr:92
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:12
+#: ../../../../build/work/app/i18n/custmsg.h:1118
+msgid ""
+"This example show how to layout a yard using the <Turnout> and <Parallel> "
+"commands.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:17
+#: ../../../../build/work/app/i18n/custmsg.h:1120
+msgid ""
+"You can resize and move the Turnout Selection dialog if it obscures the "
+"other windows.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1121
+msgid "First we place a turnout on the main line.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:35
+#: ../../../../build/work/app/i18n/custmsg.h:1123
+msgid "Next extend the turnout with the <Modify> command.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:46
+#: ../../../../build/work/app/i18n/custmsg.h:1125
+msgid ""
+"Now create a track parallel to the main line. Make sure the separation is "
+"reasonable for your scale.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:62
+#: ../../../../build/work/app/i18n/custmsg.h:1127
+msgid "And place a turnout to connect the new track.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1128
+msgid "We'll zoom in here to see what's going on.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:78
+#: ../../../../build/work/app/i18n/custmsg.h:1130
+msgid ""
+"Notice how we control which way the turnout is facing by moving the mouse "
+"across the center line of the track.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:94
+#: ../../../../build/work/app/i18n/custmsg.h:1132
+msgid ""
+"The Status bar displays the number of auto-connections that will be made and "
+"the maximum offset.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1133
+msgid ""
+"XTrackCAD adjusts the turnout position for the best fit to minimize any "
+"connection offset\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:106
+#: ../../../../build/work/app/i18n/custmsg.h:1135
+msgid "Note that placing the turnout splits the parallel track.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1136
+msgid "We have to delete the leftover piece by Selecting and Deleting it.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:120
+#: ../../../../build/work/app/i18n/custmsg.h:1138
+msgid "Repeat the process for the other tracks in the yard.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:149
+#: ../../../../build/work/app/i18n/custmsg.h:1140
+msgid "For the last track we will join with a curve instead of a turnout.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtoyard.xtr:185
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrkwid.xtr:91
+#: ../../../../build/work/app/i18n/custmsg.h:1143
+msgid "We can indicate the mainline by making the rails wider.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1144
+msgid "First we select the mainline tracks...\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrkwid.xtr:128
+#: ../../../../build/work/app/i18n/custmsg.h:1146
+msgid "And then select Medium Tracks from the Edit menu.\n"
+msgstr ""
+
+#: ../../../../build/work/app/i18n/custmsg.h:1147
+msgid "We can't show the Edit menu, but we can show the effect.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrkwid.xtr:137
+#: ../../../../build/work/app/i18n/custmsg.h:1149
+msgid "We can make the rail thicker by selecting Thick Tracks.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrkwid.xtr:148
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrntab.xtr:6
+#: ../../../../build/work/app/i18n/custmsg.h:1152
+msgid ""
+"Turntables are created by specifying the radius in a dialog box on the "
+"Status Bar. The radius in the dialog can be changed before proceeding.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrntab.xtr:15
+#: ../../../../build/work/app/i18n/custmsg.h:1154
+msgid "Then the turntable is dragged to its final location.\n"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/demos/dmtrntab.xtr:22
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:317
+#: ../../../../build/work/app/i18n/custmsg.h:1157
+msgid "Introduction"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:318
+#: ../../../../build/work/app/i18n/custmsg.h:1159
+msgid "Mouse Actions"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:319
+#: ../../../../build/work/app/i18n/custmsg.h:1161
+msgid "Dialogs"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:320
+#: ../../../../build/work/app/i18n/custmsg.h:1163
+msgid "Moving about"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:321
+#: ../../../../build/work/app/i18n/custmsg.h:1165
+msgid "Describe and Select"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:322
+#: ../../../../build/work/app/i18n/custmsg.h:1167
+#, fuzzy
+msgid "Describe"
+msgstr "Descrição"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:324
+#: ../../../../build/work/app/i18n/custmsg.h:1171
+msgid "Simple tracks"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:325
+#: ../../../../build/work/app/i18n/custmsg.h:1173
+msgid "Straight tracks"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:326
+#: ../../../../build/work/app/i18n/custmsg.h:1175
+msgid "Curved tracks"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:327
+#: ../../../../build/work/app/i18n/custmsg.h:1177
+msgid "Circles"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:328
+#: ../../../../build/work/app/i18n/custmsg.h:1179
+msgid "Turntables"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:329
+#: ../../../../build/work/app/i18n/custmsg.h:1181
+msgid "Modifying tracks"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:330
+#: ../../../../build/work/app/i18n/custmsg.h:1183
+msgid "Modifying end points "
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:331
+#: ../../../../build/work/app/i18n/custmsg.h:1185
+msgid "Extending"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:332
+#: ../../../../build/work/app/i18n/custmsg.h:1187
+msgid "Medium and Thick Tracks"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:333
+#: ../../../../build/work/app/i18n/custmsg.h:1189
+msgid "Joining Tracks"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:334
+#: ../../../../build/work/app/i18n/custmsg.h:1191
+msgid "Straight to straight"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:335
+#: ../../../../build/work/app/i18n/custmsg.h:1193
+msgid "Curve to straight"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:336
+#: ../../../../build/work/app/i18n/custmsg.h:1195
+msgid "Circle to circle"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:337
+#: ../../../../build/work/app/i18n/custmsg.h:1197
+msgid "Joining to turntables"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:338
+#: ../../../../build/work/app/i18n/custmsg.h:1199
+msgid "Easements"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:339
+#: ../../../../build/work/app/i18n/custmsg.h:1201
+msgid "Abutting tracks"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:340
+#: ../../../../build/work/app/i18n/custmsg.h:1203
+msgid "Move to Join"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:342
+#: ../../../../build/work/app/i18n/custmsg.h:1207
+msgid "Select and Placement"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:343
+#: ../../../../build/work/app/i18n/custmsg.h:1209
+msgid "Building a yard throat."
+msgstr "Construindo ramos de um pátio"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:344
+#: ../../../../build/work/app/i18n/custmsg.h:1211
+msgid "Designing turnouts"
+msgstr "Projetando AMVs"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:345
+#: ../../../../build/work/app/i18n/custmsg.h:1213
+msgid "Group and Ungroup"
+msgstr "Agrupando e desagrupando"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:346
+#: ../../../../build/work/app/i18n/custmsg.h:1215
+msgid "Triming Turnout Ends"
+msgstr "Cortando trechos de AMV"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:347
+#: ../../../../build/work/app/i18n/custmsg.h:1217
+msgid "Handlaid Turnouts"
+msgstr "AMVs personalizados"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:348
+#: ../../../../build/work/app/i18n/custmsg.h:1219
+msgid "Elevations and Profile"
+msgstr "Elevações e perfils"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:349
+#: ../../../../build/work/app/i18n/custmsg.h:1221
+msgid "Elevations"
+msgstr "Elevações"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:351
+#: ../../../../build/work/app/i18n/custmsg.h:1225
+msgid "Misc track commands"
+msgstr "Miscelânea de comandos de trilhos"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:352
+#: ../../../../build/work/app/i18n/custmsg.h:1227
+msgid "Delete and Undo"
+msgstr "Apagando e desfazendo"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:353
+#: ../../../../build/work/app/i18n/custmsg.h:1229
+msgid "Splitting and Tunnels"
+msgstr "Seccionando trechos e criando túneis"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:355
+#: ../../../../build/work/app/i18n/custmsg.h:1233
+msgid "Helix tracks"
+msgstr "Trechos em hélice"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:356
+#: ../../../../build/work/app/i18n/custmsg.h:1235
+msgid "Exception Tracks"
+msgstr "Trechos excepcionais"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:358
+#: ../../../../build/work/app/i18n/custmsg.h:1239
+msgid "Connect and Tighten - a siding"
+msgstr ""
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:359
+#: ../../../../build/work/app/i18n/custmsg.h:1241
+msgid "Connect and Tighten - figure-8"
+msgstr "Conectando e firmando - figura-8"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:360
+#: ../../../../build/work/app/i18n/custmsg.h:1243
+msgid "Other commands"
+msgstr "Outros comandos"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:362
+#: ../../../../build/work/app/i18n/custmsg.h:1247
+msgid "Table Edges"
+msgstr "Limites do tablado"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:364
+#: ../../../../build/work/app/i18n/custmsg.h:1251
+msgid "Dimension Lines"
+msgstr "Linhas dimensionais"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:365
+#: ../../../../build/work/app/i18n/custmsg.h:1253
+msgid "Lines"
+msgstr "Linhas"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:366
+#: ../../../../build/work/app/i18n/custmsg.h:1255
+msgid "Poly-Shapes"
+msgstr "Formas poligonais"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:367
+#: ../../../../build/work/app/i18n/custmsg.h:1257
+msgid "Modifying Poly-Shapes"
+msgstr "Modificando forma poligonais"
+
+#. i18n: C:/Users/mf/Documents/XTrackCAD/src/work/app/lib/xtrkcad.xtq:370
+#: ../../../../build/work/app/i18n/custmsg.h:1263
+#, fuzzy
+msgid "Control Panels"
+msgstr "Painéis de controle (Novo)"
+
+#~ msgid "Radius=%s Angle=%0.3f"
+#~ msgstr "Raio=%s Ângulo=%0.3f"
+
+#~ msgid "Length=%s Angle=%0.3f"
+#~ msgstr "Comprimento=%s Ângulo=%0.3f"
+
+#~ msgid "There are no reachable Defined Elevations"
+#~ msgstr "Não existem inclinações definidas possíveis"
+
+#~ msgid "Dist = %s"
+#~ msgstr "Dist = %s"
+
+#~ msgid "Select track to modify"
+#~ msgstr "Selecionar trecho a modificar"
+
+#~ msgid "Drag to create new track segment"
+#~ msgstr "Arrastar para criar novo trecho"
+
+#~ msgid "Note: "
+#~ msgstr "Nota: "
+
+#~ msgid "# End Pt"
+#~ msgstr "No. da extremidade"
+
+#~ msgid "Print Registration Marks"
+#~ msgstr "Imprimir marcas de registro"
+
+#~ msgid "Print Snap Grid"
+#~ msgstr "Imprimir grade"
+
+#~ msgid "Print Rulers"
+#~ msgstr "Imprimir régua"
+
+#~ msgid "1 page"
+#~ msgstr "1 página"
+
+#~ msgid "Connect Sectional Tracks"
+#~ msgstr "Conectar trechos seccionados"
+
+#~ msgid "Draw moving track normally"
+#~ msgstr "Desenhar normalmente trechos sendo arrastados"
+
+#~ msgid "Draw moving track simply"
+#~ msgstr "Desenhar de modo simples trechos sendo arrastados"
+
+#~ msgid "Draw moving track as end-points"
+#~ msgstr "Desenhar apenas extremidades de trechos sendo movidos"
+
+#~ msgid "Drag to move selected tracks"
+#~ msgstr "Arrastar para mover trecho selecionados"
+
+#~ msgid " Angle %0.3f"
+#~ msgstr " Ângulo %0.3f"
+
+#~ msgid "Simple"
+#~ msgstr "Simples"
+
+#~ msgid "End Points"
+#~ msgstr "Extremidades"
+
+#~ msgid "Tunnel"
+#~ msgstr "Túnel"
+
+#~ msgid "TURNOUT "
+#~ msgstr "AMV "
+
+#~ msgid "%s Files|*.xtc"
+#~ msgstr "%s Arquivos|*.xtc"
+
+#~ msgid "Bitmap files|*.xpm"
+#~ msgstr "Arquivos bitmap|*.xpm"
+
+#~ msgid "Color Layers"
+#~ msgstr "Cores das camadas"
+
+#~ msgid "End-Points"
+#~ msgstr "Extremidades"
+
+#~ msgid "Draw Moving Tracks"
+#~ msgstr "Desenhar trechos sendo arrastados"
+
+#~ msgid "Unload"
+#~ msgstr "Descarregar"
+
+#~ msgid "Commands"
+#~ msgstr "Comandos"
+
+#~ msgid "SnapGrid Enable"
+#~ msgstr "Grade habilitada"
+
+#~ msgid "A&bove"
+#~ msgstr "A&cima"
+
+#~ msgid "Belo&w"
+#~ msgstr "Abai&xo"
+
+#, fuzzy
+#~ msgid "End Angle 2"
+#~ msgstr "Entrar ângulo..."
+
+#, fuzzy
+#~ msgid "Elev 1"
+#~ msgstr "Elev = %s"
+
+#, fuzzy
+#~ msgid "End Radius Center 1: X"
+#~ msgstr "Extremidade 1: X"
+
+#, fuzzy
+#~ msgid "Elev 2"
+#~ msgstr "Elev = %s"
+
+#, fuzzy
+#~ msgid "End Radius Center 2: X"
+#~ msgstr "Extremidade 2: X"
+
+#~ msgid "General note about the layout"
+#~ msgstr "Notas gerais sobre o layout"
+
+#~ msgid "First turn off the Snap Grid.\n"
+#~ msgstr "Primeiramente, desligamos a grade.\n"
+
+#~ msgid "Blocks"
+#~ msgstr "Blocos"
+
+#~ msgid "Angle=%0.3f"
+#~ msgstr "Ângulo=%0.3f"
+
+#~ msgid "Place circle center"
+#~ msgstr "Posicionar o centro da circunferência"
+
+#~ msgid "Draw"
+#~ msgstr "Desenhar"
+
+#~ msgid "Not a SwitchMotor!"
+#~ msgstr "Isto não é um motor de AMV!"
+
+#~ msgid "SwitchMotor"
+#~ msgstr "Motor de AMV"
+
+#~ msgid "Switch Motors"
+#~ msgstr "Motores de AMV"
+
+#~ msgid "Custom Update"
+#~ msgstr "Atualizar personalizadamente"
+
+#~ msgid "Black"
+#~ msgstr "Preto"
+
+#~ msgid "Dark Blue"
+#~ msgstr "Azul-escuro"
+
+#~ msgid "Steel Blue"
+#~ msgstr "Azul-aço"
+
+#~ msgid "Royal Blue"
+#~ msgstr "Azul-royal"
+
+#~ msgid "Blue"
+#~ msgstr "Azul"
+
+#~ msgid "Deep Sky Blue"
+#~ msgstr "Azul celeste profundo"
+
+#~ msgid "Light Sky Blue"
+#~ msgstr "Azul celeste claro"
+
+#~ msgid "Powder Blue"
+#~ msgstr "Azul-pólvora"
+
+#~ msgid "Dark Aqua"
+#~ msgstr "Azul-água-escuro"
+
+#~ msgid "Aquamarine"
+#~ msgstr "Verde-azulado"
+
+#~ msgid "Aqua"
+#~ msgstr "Azul-água"
+
+#~ msgid "Dark Green"
+#~ msgstr "Verde-escuro"
+
+#~ msgid "Forest Green"
+#~ msgstr "Verde-floresta"
+
+#~ msgid "Lime Green"
+#~ msgstr "Verde-lima"
+
+#~ msgid "Green"
+#~ msgstr "Verde"
+
+#~ msgid "Lawn Green"
+#~ msgstr "Verde-grama"
+
+#~ msgid "Pale Green"
+#~ msgstr "Verde-pálido"
+
+#~ msgid "Dark Yellow"
+#~ msgstr "Amarelo-escuro"
+
+#~ msgid "Coral"
+#~ msgstr "Coral"
+
+#~ msgid "Orange"
+#~ msgstr "Laranja"
+
+#~ msgid "Yellow"
+#~ msgstr "Amarelo"
+
+#~ msgid "Saddle Brown"
+#~ msgstr "Marrom-couro"
+
+#~ msgid "Brown"
+#~ msgstr "Marrom"
+
+#~ msgid "Chocolate"
+#~ msgstr "Chocolate"
+
+#~ msgid "Rosy Brown"
+#~ msgstr "Marrom-rosado"
+
+#~ msgid "Tan"
+#~ msgstr "Canela"
+
+#~ msgid "Beige"
+#~ msgstr "Bege"
+
+#~ msgid "Dark Red"
+#~ msgstr "Vermelho-escuro"
+
+#~ msgid "Tomato"
+#~ msgstr "Vermelho-tomate"
+
+#~ msgid "Red"
+#~ msgstr "Vermelho"
+
+#~ msgid "Hot Pink"
+#~ msgstr "Rosa-quente"
+
+#~ msgid "Pink"
+#~ msgstr "Rosado"
+
+#~ msgid "Dark Purple"
+#~ msgstr "Púrpura-escuro"
+
+#~ msgid "Maroon"
+#~ msgstr "Castanho"
+
+#~ msgid "Purple2"
+#~ msgstr "Púrpura 2"
+
+#~ msgid "Purple"
+#~ msgstr "Púrpura"
+
+#~ msgid "Violet"
+#~ msgstr "Violeta"
+
+#~ msgid "Dark Gray"
+#~ msgstr "Cinza-escuro"
+
+#~ msgid "Gray"
+#~ msgstr "Cinza"
+
+#~ msgid "Light Gray"
+#~ msgstr "Cinza-claro"
+
+#~ msgid ""
+#~ " exists\n"
+#~ "Do you want to overwrite it?"
+#~ msgstr ""
+#~ " existente\n"
+#~ "Sobrescrever?"
+
+#~ msgid "Page %d"
+#~ msgstr "Página %d"
+
+#~ msgid "Print to file ..."
+#~ msgstr "Imprimir em um arquivo..."
+
+#~ msgid "No file name specified"
+#~ msgstr "Nome do arquivo não especificado"
+
+#~ msgid "%s exists"
+#~ msgstr "%s existente"
+
+#~ msgid "Overwrite"
+#~ msgstr "Sobrescrever"
+
+#~ msgid ": cannot open"
+#~ msgstr ": não foi possível abrir"
+
+#~ msgid "Now printing %s"
+#~ msgstr "Imprimindo agora %s"
+
+#~ msgid "Page 1"
+#~ msgstr "Página 1"
+
+#~ msgid "Enter both printer name and command"
+#~ msgstr "Digitar nome da impressora e comando"
+
+#~ msgid "Can not save New Printer definition"
+#~ msgstr "Não foi possível nova impressora definida"
+
+#~ msgid "Enter printer name"
+#~ msgstr "Digitar nome da impressora"
+
+#~ msgid "Can not save New Margin definition"
+#~ msgstr "Não foi possível salvar nova margem definida"
+
+#~ msgid "Paper Size"
+#~ msgstr "Tamanho do papel"
+
+#~ msgid "Printer"
+#~ msgstr "Impressora"
+
+#~ msgid "Format"
+#~ msgstr "Formato"
+
+#~ msgid "X Font"
+#~ msgstr "Fonte X Window"
+
+#~ msgid "PS Font"
+#~ msgstr "Fonte PostScript"
+
+#~ msgid "Factor"
+#~ msgstr "Fator"
+
+#~ msgid "Print Test Page"
+#~ msgstr "Imprimir página de teste"
+
+#~ msgid "Name: "
+#~ msgstr "Nome:"
+
+#~ msgid "Command: "
+#~ msgstr "Comando:"
+
+#~ msgid "Add Margin"
+#~ msgstr "Adicionar margem"
+
+#~ msgid "Print To File"
+#~ msgstr "Imprimir em um arquivo"
+
+#~ msgid "File Name? "
+#~ msgstr "Nome do arquivo?"
+
+#~ msgid "Font Alias"
+#~ msgstr "Nome da fonte"
+
+#~ msgid "Enter a post-script font name for:"
+#~ msgstr "Digitar um nome de fonte PostScript para:"
+
+#~ msgid "Printing"
+#~ msgstr "Imprimindo"
+
+#~ msgid "Now printing"
+#~ msgstr "Imprimindo agora"
+
+#~ msgid "Abort Print"
+#~ msgstr "Abandonar impressão"
+
+#~ msgid "XTrackCAD Help"
+#~ msgstr "Ajuda XTrackCAD"
+
+#~ msgid "Describe objects"
+#~ msgstr "Descreve objetos"
diff --git a/app/i18n/stripmsg.c b/app/i18n/stripmsg.c
index 1e3dc36..6010530 100644
--- a/app/i18n/stripmsg.c
+++ b/app/i18n/stripmsg.c
@@ -28,18 +28,31 @@
*/
typedef enum { MODE_XTR, MODE_XTQ, MODE_TIP } mode_e;
+/**
+ * Write translator comments to messagefile
+ *
+ * \param [in,out] file the source file.
+ * \param line the source line.
+ */
+
+void translatorcomment(char *file, unsigned line)
+{
+ printf("// i18n: %s:%d\n", file, line);
+}
/* Process the given input file. */
-void process( mode_e mode, FILE * inFile )
+void process( mode_e mode, FILE * inFile, char *fileName )
{
char line[4096];
char * cp;
int len;
int offset;
int i;
+ unsigned lineNo = 0;
while ( fgets( line, sizeof(line), inFile ) != NULL )
{
+ lineNo++;
offset = 0;
switch (mode)
@@ -47,7 +60,9 @@ void process( mode_e mode, FILE * inFile )
case MODE_XTR:
if (strncmp( line, "MESSAGE", 7 ) == 0)
{
+ translatorcomment(fileName, lineNo);
while ( ( fgets( line, sizeof(line), inFile ) ) != NULL ) {
+ lineNo++;
if ( strncmp(line, "END", 3) == 0)
/* End of message block */
break;
@@ -110,6 +125,7 @@ void process( mode_e mode, FILE * inFile )
line[len] = '\0';
if (len == 0)
break;
+ translatorcomment(fileName, lineNo);
printf("N_(\"%s\");\n", line+offset);
}
break; // case MODE_XTQ:
@@ -130,6 +146,7 @@ void process( mode_e mode, FILE * inFile )
cp[1] = '\0';
+ translatorcomment(fileName, lineNo);
/* if line ended with a continuation sign, get the rest */
while (*cp=='\\') {
*cp++ = '\\';
@@ -139,7 +156,7 @@ void process( mode_e mode, FILE * inFile )
if (!fgets( cp, (sizeof(line)) - (cp-line), inFile )) {
return;
}
-
+ lineNo++;
/* lines starting with hash sign are ignored (comments) */
if (*cp=='#')
continue;
@@ -239,7 +256,7 @@ int main ( int argc, char * argv[] )
}
/* Process file */
- process( mode, inFile );
+ process( mode, inFile, argv[i] );
/* Close file */
files++;
diff --git a/app/lib/CHANGELOG.md b/app/lib/CHANGELOG.md
index 95e1d7b..56ce9ad 100644
--- a/app/lib/CHANGELOG.md
+++ b/app/lib/CHANGELOG.md
@@ -4,10 +4,361 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
+## [5.2.0 Beta 2.1]
+
+### Bugs
+
++ Failure in Parallel Line command fixed
++ Failure in ConvertFrom Bezier fixed
++ Bad track created in ConvertFrom Cornu that does not align (too liberal use of straight)
++ Context Help via F1 works in Wndows
++ Make all commands have target HTML pages for context help
++ Make Font Size be remembered when set from Text command
++ Fixed Radius field to be mainatained in Join after first point selected
++ Param Search UI result box resizeable
++ Save Bridge Status for Segment Track
++ Updated German translations and translated Help Menu items
++ Clear NoTies if track is hidden
++ ConvertForm and ConvertTo to inherit characterstics of donor Tracks
++ ColorDraw and ColorTrack stored with layout file
++ Help content for Parameter File Dialog
++ Make Rulers overlay content
++ Change Modify/Create Polygon/PolyLine shortcuts to not clash with Pan center as 'c'
++ Track Segments in Structures and Turnouts retain color (including white)
+
+### Added
+
++ Elevation to show height and offset when mousing over tracks without Shift
++ New anchor for Elevation+Shift to show Split will result
++ Debian Install
+
+### Parameter Files
+
++ Peco G-45 file
+
+## [5.2.0 Beta 2.0]
+
+### Added
+
++ Two new line styles: Center Dot and Phantom Dot
++ Preference option to suppress Flex Track in HotBar
++ Pan using Shift+Mousewheel Up/Downand Shift+Ctrl MouseWheel for left/right
++ Pan using Shift+horizontal scroll on GTK
++ Param Reload Button to force reload of a param file
++ Multi Keyword search on param library files
++ "@" Pan to Center and "e" Pan to extents and "0" or "o" Pan to Origin
++ Middle button also able to select Pan
++ Selectable Icon Button size between 1.0 and 2.0
++ Parallel Lines now can parallel other lines or tracks
++ Add angles for curved line properties
++ Desired Radius feature for non-Cornu Join
++ AutoSave feature and add keep checkpoints between saves
++ Suppress edge rules on layout if close to window edge rulers
++ Option to constrain drawing area to room boundaries on zoom
++ New Anchors on Describe and Traditional Join
++ AutoSave feature and Backup of checkpoints
++ Anchors on Split within turnouts with Shift
++ Improved Turnout and Section placement when tracks overlap - less jumping
++ Change "@" to "c" for center Pan command in Select and Pan
+
+### Fixed
+
++ Bug #256 Mislabelled Turnout
++ Bug #330 Use 3 decimal points in rotate angle
++ Bug #331 Correct Custom File Append Message
++ Bug #338 Correct Ruler Text size
++ Linetype changing doesn't change line width
++ Bug #332 Lowercase names in .xtp
++ Bug #339 Grades for 2 ended sectional track
++ Bug #340 Bezier Tracks open properly
++ Dragging in Profile Window fixed
++ Draw Objects remember linetype when saved/restored
++ Axis boundaries removed on Zoom Up and Down
++ Correct icons for xte and xtc in Windows
++ Windows size opening fixes
++ FilledDraw copies now work
++ Hangs on Linux startup
++ Linewidth correct in xpms
++ Elevation Points for clearances cleaned up
++ Convert Fixed->Cornu fixes
++ Bug #345 Fix paths in some Turnouts
++ Respect parmdir setting in configuration file
++ Bug #348 Fix Demo
++ Bug #349 Fix inaccessible track segments
++ Bug #346 Fix layout file ends for Signal and Block
++ Bug #351 Fix loading layout with Cars off tracks
++ Bug #354 MultiLine Notes
++ Correct Undo when Cars are moved/rotated
++ Fix redraw of >20 elements in move/rotate
++ Ensure webkitgtk only required if not using browser for help
++ Fix mapD scale at startup, allow Map to be larger than 1/2 screen
++ Fix Turnout Trim with Split and Shift
++ Hotbar copes with large track objects (e.g., Turntables)
++ Make sure upper tracks are selected ahead of lower ones
++ Shift to suppress track end joins when drawing overlay tracks
++ Fix Curve from Chord anchors
++ Better sized Split and Connect Anchors
++ Windows PanHere now works
++ Fix Map Resize function on GTK
++ Fix Turnout placement on Cornu for Pins and other issues
++ Fox Cornu Pin editing
+
+
+### Added and changed parameter files
+
++ N-Tomix Track improvements
++ Cleanup double track pieces
++ Micro-Engineering track improvements
++ HO-Endo and Atlas controllers
+
+
+## [5.2.0 Beta 1.0]
+
+### Added
+
++ Notes
++ + Rewritten Notes function, add WebLink and File reference options to Note
++ Background
++ + Add Background image file to layout with scaling, zooming, offset and angle
++ Archive Format
++ + Add Archive File Format .xtce using Zip libraries to include Background file
++ Parameters
++ + Parameter files have icons to show if they are compatible with current gauge/scale
++ + Sort Parameter files have by compatibility and contents description
++ + Finder for selecting System Parameter Library by Contents lines in files
++ + Set and un-set favorite property for parameter files
++ Track Properties
++ + Bridge track
++ + Ties/NoTies
++ Links in Layout
++ + Document links to local files as an Object
++ + WebLinks as an Object
++ Draw
++ + Draw objects can have dotted, dashed, dashed and dotted lines
++ + Rotation Origin for Draw elements so they can be rotated about a non-zero origin
++ + Origin Angle for Draw Objects to allow rotation around a different point
++ + Add Box option to Text so that Text can be outlined
++ + PolyLines (open Polygons)
++ + Polygons and Polylines can have smoothed or rounded vertexes
++ Cornu
++ + Pins for Cornu - morphs Cornu to pass through Pin, splits Cornu on Accept
++ + Edit multiple joined Cornu as single with Pins
++ + Add automatic 15 inch flex track element to Hotbar -> acts as Cornu and will also join tracks as needed
++ + Allow Cornu Tracks in Group
++ + Add placing Turnouts on Cornu Track
++ + End Point Anchor for FlexTrack (Cornu) pieces
++ + Radius and angle handles for no-track end Cornu
++ + Show Cornu Shape as connected tracks are being moved or rotated
++ + Change Modify to use Cornu easements if selected
++ Commands
++ + New Add Cornu, Add PolyLine, Parallel Line, Convert to Cornu, Convert From Cornu commands
++ + New Join Line command to convert Lines into PolyLines
++ Help
++ + Add Context Help to jump to the current Command section in the manual
++ + Add F1 shortcut to Context help and Shift+F1 to go to the Contents
++ Add Layer by Layer control of color - each layer can exclude itself from Color
++ Parallel
++ + Allow Parallel separation of 0 when using different track gauges to produce overlaid tracks to simulate dual gauge track
++ + Add Radius Factor to Parallel command to space out parallel track more as radius tightens
++ Print
++ + Add PrintPage Positions to show which page goes where in multiple page prints
++ + Add button to select all pages for printing
++ + Added extra page indexes to page registration
++ + Made registration marks print on top of layout elements
++ First Start
++ + Canada now uses English measurements by default
++ + Update to the initial file open location to not set it to the examples directory
++ + First run: turnoff track description and length labels to avoid clutter
++ + Initialize the Sticky dialog to reasonable values on first run
++ + Updated and corrected the TIP file
++ + System Library location autoset so updated parameter files from new version appear in HorBar
++ Other
++ + Allow Turnouts to have with curved ends which are downward compatible using short fixed radius at the ends
++ + Layers have Module option that are selected and Deselected as a unit
++ + Improve ruler with “English” measurements in High Zoom
++ + Add Examples... menu item on the Help menu to easily find them
++ + Added french translation for the UI, contributed by Jacques Glize
++ + Windows: support for utf-8 character encoding in text fields, labels etc.
++ + Add new options for SelectMode (Only, Add) and SelectZero (On, Off) to Options->Command.
++ + Demos updated
++ + Add regression testing when running demos
++ + Initialize Sticky on first run. All commands are sticky except for Helix, Handlaid Turnouts, Turntables and Connect Two Tracks.
++ + Change Modify to use Cornu easements if selected
++ + New Cornu Turnout Designer options to build all types of Turnouts
++ + Create proper flex-track lengths for pricing
++ + Desktop icon can be created with Windows installation
++ + Installing on Windows overwrittes earlier version
+
+### New UI
+
++ Layout
++ + Allow viewing of "negative" layout up to half a screen to the left or bottom beyond the origin. Draw Room Walls and a grey zone outside the defined layout
++ + Add rulers on room walls if the display origin is in negative territory
++ Anchors
++ + Anchors on all main commands - predict what will/can happen when clicked with modify keys (Ctrl,Shift,Alt)
++ + Add hover "anchors" for Select, Move, Rotate, Split, Join, Elevation, Move Description, Parallel
++ + Modify hover Anchors or all Straight, Curved Track, Straight and Curved Draw Objects
++ + Draw Anchors immediately adjust to Shift and Ctrl modifier key state
++ + Anchor for Join, fix anchor for Draw once selected
++ + Change System Cursor in main Window for Describe, Select and Pan/Zoom
++ + Add acnchors to Select for Move and Rotate
++ + Add Anchors for Connect/Pull - also make selecting second track easier
++ Select Modes
++ + Select hover Anchors thick and in Blue to show what will be selected and Gold what will not be
++ + Select modes to either Select Only or Select Add
++ + Select Zero to provide Deselect All for click on nothing
++ Magnetic Snap
++ + Add Magnetic Snap mode (overriden when Alt held) to snap ends to nearby end points and to place new elements as extensions of existing ones
++ + Tracks Moved and Rotated so that ends touch will Auto-Align to the unmoved elements unless Alt is held
++ + Snap Dimension lines to other objects (tracks of draw objects) without Shift
++ + Right Drag exclusion in Select - different highlight colors for Left and Right Drag
++ Modify/Add
++ + Modify/Add of curved Draw objects is via end points and radius
++ + Modification of Poly objects shows vertexes to aid selection and show if a new one will be added
++ + Precision entry of Modify for Draw objects when Sticky selected
++ + Snapping Poly objects to be 0/90/180/270 from previous line with Shift
++ + Anchor shown for point that is 90 degrees from both last line and first point in Poly
++ + PolyLines and Polygons complete with Enter or Space in Modify or if user clicks away
++ ShortCuts
++ + Text key shortcuts in Pan/Zoom - Zoom Levels "1-9", Extents "e", Origin "0"
++ + “Pan Center Here” with a text short-cut “@“ key that works in Select, Pan/Zoom, Modify
++ Context Menus
++ + Default to Context Menu on Right-Click, Command Menu Shift+Right-Click
++ + New Select Context Menus for Selected and UnSelected cases
++ + Numerous updates to context menus including special for Poly Modify
++ DoubleClick in Select
++ + Open a Weblink, a Document
++ + Modify for Cornu and Bezier, Modify Draw objects except Text
++ Elevation
++ + Elevation cursor shows elevation at point. Adding Shift displays clearance between two tracks\
++ + Make Elev use Ctrl+Left-Click for moving Descriptions
++ Export
++ + Change to export .png bitmap files in GTK
++ + Include Text objects in Bitmap Export
++ Context Menu
++ + Default to Context Menu on Right-Click, Command Menu Shift+Right-Click
++ Other
++ + Show Selected Tracks in Move to Join (Shift held in Join)
++ + New Rotate Symbol during Rotate.
++ + Profile window: fill color, label formating and positioning
++ + Add PNG export for Windows using FreeImage
++ + Apply rescale operation to background as well. When the scale,not the gauge, is changed, the background image is resized and repositioned to the same ratio.
++ + Add "?" as a means to jump to the properties screen in Select Mode
++ + Update Layout File Version to V11 and minimum required version to V5.2.0
++ + Show Cornu Shape as connected tracks are being moved or rotated
+
+
+## Fixed
+
++ Make sure that Delete key works only if in Select Mode
++ Clean up HotBar right click display order documentation
++ Remove timed validation of text entries, use Enter-key, Click Away or Tab to trigger instead
++ Drawing of Ties to use Polygons, reducing the load of unfilled Ties on Redraw
++ Draw temp Polygons and Circles when moving them (all unfilled and simplified)
++ Add up/down arrow keys scrolling in Select
++ Ctrl+Left-Click to rotate Turnouts - in common with other rotates
++ Make sure Draw commits simple elements even if Esc is subsequently pressed
++ Make Note icon size better
++ Make Bezier and Cornu use standard colors during construction
++ Improve Grid drawing performance
++ Make Status fields insensitive when visible
++ Respect Turntable Angle for Modify and Join to Turntable
++ Save State including filenames and options when Save, Save As or Open commands are run
++ Change size of Select “spot” for Note/Link based on display scale.
++ Reduce impact of high radius curves by selecting out those parts that can’t be displayed before drawing them
++ Support Esc in closing all dialog windows
++ Make Display Layer color options clearer
++ Stop writing out tracks with colors in layout
++ Ensure that Parallel Track still duplicates the Tunnel/Width characteristics
++ Fix Turnout Group Path in cases where there are draw elements present
++ Show parameter files that are R/O
++ Print Polygons work in GTK
++ Make repeated arrow key moves in Move into one Undo
++ Adjust Ties algo to give a more even look in short tracks
++ Fix bounding box for multi-line text
++ Fix Describe Window sizing
++ Fix for split to preserve elevation properly (keep end point elev type and station name (if any) - new split end point gets elev_none
++ Fix handling of \n in multiline comments
++ Fix flex-track lengths for pricing
++ Fix splash screen overlay by removing it when a dialog pops up under it
++ Fix Turntable Join with Cornu
++ Order of params in HotBar popup menu is corrected
++ Allow Trains to run properly on Double Track components
++ Respect order of non-draw elements in Group
++ Make Up and Down Scroll only move 1/2 a screen height (rather than 1/2 a width)
++ Stop Curve, Straight, Bezier and Cornu joining/snapping to a different scale track
++ Restrict max radius in curves to 10000 inches or less
++ Windows: Fix entry lengths > 78, run trigger action when pasting from clipboard
++ Fix Splitting between Turnouts
++ Cursor made visible when running demos in GTK
++ Fix window size startup on GTK
++ Fix included double quote in Text field
++ Fix Paste position
++ Fix display of offset structures in HotBar
++ Fix embedded quote in Text object issue. Don't re-de-escape quotes
++ Restore the GTK main window to be the size saved at last Exit
++ Fix several highlighting issues and a Read bug for switchMotor
++ Fix crash on reading turnout motors from file
++ Fix #327, array bounds where not considered when creating layer list
++ To ease translation a text's source file and line are added in a comment to the pot and po files
++ Remove Ruler at and of demo
++ Fix TableEdges and DimLines are always Black
++ Only check circle radius for available room size when creating a circle
++ Fix some display bugs in the Profile window.
++ Clean up option flags
++ "Quit" can be cancelled
++ Fix crash when creating blocks from a larger number (>10?) of tracks elements
++ Fix crashes when loading and deleting block definitions
++ Set button label in Parameter dialog to Hide / Unhide as suggested in bug #319
++ Reduce Zoom messages to useful set
++ Fix icons to reflect circle drawing properly
++ Fix bug in Describe of BenchWork when setting angle
++ Fix file save when file filter is missing
++ Increase details on Turnout Path failure message
++ Fix for Export Parameter File Menu
++ Fix for #301 On first run, File|Open and File|Parameter Files open wrong directory
++ Fix for #300 Problems with Car Inventory dialogs
++ Fix for #299 Order of params in HotBar popup menu is backwards
++ Fix for #297 After Turnout window is created, unable to select from HotBar
++ Fix: Turntable Join with Cornu
++ Fix for #296 Escape key doesn't cancel the first dialog
++ Fix for #295 Crash when playing recorded sessions
++ Fix for #294 Linux: Cursor not visible when running demos
++ Fix - circle<->circle Cornu regression
++ Fix for #292 Join 2 curves with a straight and easements leaves a kink
++ Fix for bug #291 Incorrect tip shown at initial startup
++ Fix bounding box for multi-line text
++ Fix cursor position on Text add for GTK - side-effect of back-level Pango patch for some versions of Linux
++ Fix varieties of reversed multi-segment Cornu
++ Fix for split to preserve elevation properly (keep end point elev type and station name (if any) - new split end point gets elev_none.
++ Fix Block Load error with random endCnt
++ Fix failure on Modify of Cornu with one end disconnected
++ Approximating large radius curves is fixed
++ Fix for #277: Describe demo doesn't work
++ Improve re-calculation of all end elevations on redraw. Cache end elevations and distances on end points.
++ Fix problem of closing Notice Windows with the red button in GTK leading to a frozen application (Modal)
++ Fixes for GTK Text Positioning in Draw and Print
++ Fix profile to ensure more space on LHS and RHS based on text sizes used.
++ Fix dialog resize issue with small screens
++ Windows: fix uninstaller script so uninstall removes all entries from Start Menu
++ Fix rounding problem when connecting track
+
+### Added and changed parameter files
++ Updated and new parameter files for Maerklin and Walthers Cornerstone
++ Updated and renamed parameter files for Maerklin C, K and M and Atlas O-scale 2 rail and 3 rail
++ Upgrade Tomix 1421 Buffer to stop Train before buffer
++ Reduce number of parameter files for Kato N scale
++ Add American and HOn3 car prototypes
++ Added parameter file for Remco Mighty Casey
++ HO-Peco-Code75Finescale and HO-Peco-Code100Streamline new definitions for Ys, curved, catchpoints, 3-ways
++ N-Peco-Code55Finescale and N-Peco-Code80Streamline new definitions for curved\
++ Fix Atlas 832 Curve to have ends on track
+
+
## [5.1.2]
### Added
-+ Make Debug menu both work and do something useful
++ Make Debug menu both work and do something useful
This menu in Options->Debug only appears if the env variable XTRKCADEXTRA is set A "Loosen" command also appears in Modify when set.The Debug window lists any Logging entries (set with "-d loggingname=level" parms).For example, "-d trainMove=5 -d traverseCornu=2" sets two Loglines - one at level 5 and the other 2. The value of the level can be adjusted in the Debug window and then the button "OK" sets it.Given that a level value of 0 means no logging for that logging variable, this menu allows log/tracing to be adjusted on the fly after startup.
Debug Window has a default trace level option. This is the level of Log/Trace that all types of tracing will follow unless they have been specified explicitly in the startup parms or otherwise.
Any log entries created before the first invocation of the window will be included, so a tester could add a LogSet("traverseBezier",0) line into the InitTrkBezier() code while testing or use a -d traverseBezier=0 and then use Debug to set level to 1 and start logging.
@@ -15,10 +366,10 @@ Any log entries created before the first invocation of the window will be includ
## Fixed
+ Make Up and Down Scroll only move 1/2 a screen height (rather than 1/2 a width)
+ Fix Modify redraw for Bezier or Cornu
-+ Allow modify of naked Cornu along the Cornu itself if it isn't connected to another Cornu or Bezier
++ Allow modify of naked Cornu along the Cornu itself if it isn't connected to another Cornu or Bezier
+ Fix Abend on extend of naked Cornu
+ Make sure Flip Cornu produces a correct relationship between ends and Bezier segments
-+ Fix Traverse Cornu for case where there are multiple sub-segments within a Bezier segment
++ Fix Traverse Cornu for case where there are multiple sub-segments within a Bezier segment
+ Remove UndoModify from low-level functions - to ensure that they can't be called without a preceding UndoStart and cause error messages
+ Description: correct include tag for Linux
+ Fix possible error when Cloning Structures or Turnouts
@@ -37,7 +388,6 @@ Any log entries created before the first invocation of the window will be includ
+ Parameter files TT Kuehn Peco HO US, Newqida G, Atlas N and Fasttrack Nn3 new or update
+ New parameter file for Weinert Mein Gleis
+ Update parameter file for Z-Rokuhan
-+ HO Peco parameters with corrected turnout definitions and new Mehano parameters
## [5.1.1]
@@ -68,7 +418,7 @@ If there is enough use, we can add to the print dialog itself.
+ All: Check string length for all relevant PD_STRING entry fields
+ Windows: Always set color before drawing text
+ Make sure that Text Segs and Poly Segs copy string and Pts when UnGrouping. Stop weird results and Abends.
-+ Make Cairo use pure RGB to retrieve the same color it stored for wDrawColor rather than ask for GDK�s version (which might not be exact).
++ Make Cairo use pure RGB to retrieve the same color it stored for wDrawColor rather than ask for GDKs version (which might not be exact).
+ Fix Cornu Rate of Change of Curvature.
+ Fix situation where a Bezier or Cornu is modified when the scale or gauge has since been set to a different value than the track to be modified. Remember the old track values.
+ Fix Abend on cornu Join to turntable, also make sure cornu Modify leaves more than minlength on connected tracks
diff --git a/app/lib/CMakeLists.txt b/app/lib/CMakeLists.txt
index a2e823d..5f271f6 100644
--- a/app/lib/CMakeLists.txt
+++ b/app/lib/CMakeLists.txt
@@ -47,10 +47,10 @@ if(UNIX AND NOT APPLE)
)
install(FILES
xtrkcad.desktop
- DESTINATION "/usr/share/applications"
+ DESTINATION "${XTRKCAD_SHARE_INSTALL_DIR}/applications"
)
install(FILES
xtrkcad.png
- DESTINATION "/usr/share/pixmaps"
+ DESTINATION "${XTRKCAD_SHARE_INSTALL_DIR}/pixmaps"
)
-endif() \ No newline at end of file
+endif()
diff --git a/app/lib/Readme.md b/app/lib/Readme.md
index aa64ce7..48bfd34 100644
--- a/app/lib/Readme.md
+++ b/app/lib/Readme.md
@@ -1,4 +1,4 @@
-# XTrackCAD 5.1.2 #
+# XTrackCAD 5.2.0 #
This file contains installation instructions and up-to-date information regarding XTrackCad.
@@ -38,6 +38,23 @@ you can find in the file COPYING.
# Installation #
+
+## Dependencies ##
+
+XTrackCAD starting with V5.2 depends on some external libraries:
+
++ zlib Compression Library https://www.zlib.net/
++ libzip for handling zip files https://libzip.org/
+
+Additionally on Windows only
+
++ FreeImage image handling http://freeimage.sourceforge.net/
+
+The Windows installer comes with these libraries so no additional downloads
+are necessary. On Linux and OSX the necessary libraries will need to
+be installed using the software installation tools of the
+operating system.
+
## Windows ##
XTrackCad has only been tested on Windows 10.
@@ -48,25 +65,25 @@ self-installing program using the NSIS Installer from Nullsoft Inc.
Using Windows Explorer, locate the directory in which you downloaded or copied your new version of XTrackCAD.
Start the installation program by double clicking on the
-**[xtrkcad-setup-5.1.2a.exe][]** file icon.
+**[xtrkcad-setup-5.2.0.exe][]** file icon.
Follow the steps in the installation program.
The installation lets you define the directory into which XTrackCAD is
installed. The directory is created automatically if it doesn't already exist.
-A program folder named XTrackCAD 5.1.2a will be created during the installation
+A program folder named XTrackCAD 5 will be created during the installation
process. This folder contains the program, documentation, parameter and
example files. An existing installation of earlier versions of XTrackCad is
not overwritten.
-A new program group named XTrackCad 5.1.2 will be created in the Start menu.
+A new program group named XTrackCAD 5 will be created in the Start menu.
## OSX ##
XTrackCAD for Mac is shipped as a self-installing OSX package
Start the install by double clicking on the
-**[xtrkcad-osx-5.1.2a.dmg][]** file icon.
+**[xtrkcad-osx-5.2.0.dmg][]** file icon.
Drag the package and drop into the Applications folder.
@@ -82,16 +99,22 @@ Once the XQuartz package has installed go to the XtrkCAD icon in Applications an
XTrackCAD for LINUX is shipped as a RPM file and a self extracting archive.
You will need libc6, X11R6, GTK+2.0.
+If you change the install package you should set the XTRKCADLIB enviroment variable
+
+For example if the install is within the /usr/local/share/xtrkcad directory. you could use -
+
+env XTRKCADLIB="/usr/local/share/xtrkcad/" xtrkcad
### Installing from the RPM package. ###
Use your operating system's package manager to install XTrackCAD.
+
### Installing from the self-extracting archive. ###
After downloading open a command line then as root run
- ./xtrkcad-setup-5.1.2a.x86_64.sh --prefix=/usr/local --exclude-subdir
+ ./xtrkcad-setup-5.2.0.x86_64.sh --prefix=/usr/local --exclude-subdir
This will install the executable in /usr/local/bin. A directory named
xtrkcad will be created in /usr/local/share and all files will be unpacked
@@ -104,10 +127,12 @@ environment variable to point to that directory.
## Upgrade Information ##
-**Note:** This version of XTrackCAD comes with the new cornu feature. In order to support
-this feature, the file format for layout files (.xtc) had to be extended.
-Files from earlier versions of XTrackCAD can be read without problems.
-Layouts that were saved from this version of the program cannot be read by older
+**Note:** This version of XTrackCAD comes with the several new features
+like backgroudn images or extensions to notes. In order to support
+this feature, an additional file format for layout files (.xtce) was added.
+The old .xtc format is still supported for reading and writing. So
+files from earlier versions of XTrackCAD can be read without problems.
+Layouts that were saved in the new format cannot be read by older
versions of XTrackCAD.
# Building #
diff --git a/app/lib/demos/dmadjend.xtr b/app/lib/demos/dmadjend.xtr
index 5e918fa..c74122a 100644
--- a/app/lib/demos/dmadjend.xtr
+++ b/app/lib/demos/dmadjend.xtr
@@ -1,6 +1,6 @@
VERSION 2
DEMOINIT
-ORIG 8.000 0.000 0.000
+ORIG 5.000 0.000 0.000
STRAIGHT 1 DEMO 1
E 16.166667 2.333333 260.498723
E 36.083333 5.666667 80.498723
@@ -23,346 +23,83 @@ CURVE 3 DEMO 1 7.500000 8.333333 6.000000
REDRAW
RESET
MESSAGE
-The unconnected End-Points of a straight or curved track can be changed with the 'Modify Track' command.
+The unconnected endpoints of a straight or curved track can be changed with the 'Modify Track' command.
END
STEP
COMMAND Modify
-MOUSE 2 35.917 5.917
+MOUSE 1 35.833 5.917
MESSAGE
_________________________________________
-The End-Point of a straight track is selected and then Left-Dragged to change its length.
+The endpoint of a straight track is selected and then Left-Dragged to change its length. A blue anchor shows that the length can be extended.
END
+STEP
BIGPAUSE
+MOUSE 1 35.833 5.917
+PAUSE 200
+MOUSE 2 35.833 5.917
MOUSE 3 35.833 5.917
-MOUSE 3 36.750 6.167
-PAUSE 1000
-MOUSE 3 36.750 6.167
-MOUSE 3 16.750 2.750
+#MOUSE 3 56.750 15.167
+MOUSE 3 58 9.5
+PAUSE 200
+#MOUSE 4 56.750 15.167
+MOUSE 4 58 9.5
BIGPAUSE
MESSAGE
_________________________________________
-Watch what happens if you try to drag the selected End-Point beyond the far End-Point.
+If you try to drag the selected endpoint beyond the far endpoint, the track extends in the opposite direction.
-The length of the straight track is determined by the distance from the far End-Point and the cursor.
END
-BIGPAUSE
-MOUSE 3 16.167 2.667
-MOUSE 3 10.583 1.500
-PAUSE 820
+STEP
+#MOUSE 1 16.167 2.667
+MOUSE 1 58 9.5
+PAUSE 200
+#MOUSE 2 16.167 2.667
+MOUSE 2 58 9.5
+#MOUSE 3 10.583 1.500
MOUSE 3 10.583 1.500
+BIGPAUSE
+#MOUSE 3 34.333 5.917
+MOUSE 3 34.333 5.917
+#MOUSE 4 34.333 5.917
MOUSE 4 34.333 5.917
+BIGPAUSE
MESSAGE
=========================================
END
STEP
CLEAR
MESSAGE
-A curved track is selected and it's new End-Point is determined by the angle to the cursor.
+A curved track is selected and it's new endpoint is determined by the angle to the cursor.
END
STEP
+MOUSE 1 13.67 8.100
+PAUSE 200
MOUSE 2 13.67 8.100
-PAUSE 500
-MOUSE 3 13.67 8.100
-PAUSE 50
-MOUSE 3 13.333 8.083
-PAUSE 60
-MOUSE 3 13.333 8.000
-PAUSE 50
-MOUSE 3 13.250 7.833
-PAUSE 60
-MOUSE 3 13.167 7.667
-PAUSE 50
-MOUSE 3 13.167 7.500
-PAUSE 60
-MOUSE 3 13.000 7.333
-PAUSE 50
-MOUSE 3 13.000 7.167
-PAUSE 60
-MOUSE 3 12.833 6.917
-PAUSE 50
-MOUSE 3 12.667 6.667
-PAUSE 60
-MOUSE 3 12.667 6.417
-PAUSE 50
-MOUSE 3 12.500 6.167
-PAUSE 60
-MOUSE 3 12.333 5.833
PAUSE 50
MOUSE 3 12.167 5.417
-PAUSE 60
-MOUSE 3 12.000 5.333
-PAUSE 50
-MOUSE 3 12.000 5.083
-PAUSE 60
-MOUSE 3 11.833 5.000
-PAUSE 50
-MOUSE 3 11.667 4.667
-PAUSE 60
-MOUSE 3 11.500 4.500
-MOUSE 3 11.333 4.333
-PAUSE 110
-MOUSE 3 11.333 4.167
-PAUSE 380
-MOUSE 3 11.333 4.250
-PAUSE 60
-MOUSE 3 11.333 4.333
-PAUSE 50
-MOUSE 3 11.333 4.417
-PAUSE 60
-MOUSE 3 11.500 4.500
-PAUSE 50
-MOUSE 3 11.583 4.667
PAUSE 50
MOUSE 3 11.750 5.000
PAUSE 60
-MOUSE 3 11.917 5.083
-PAUSE 50
-MOUSE 3 12.000 5.333
-PAUSE 60
-MOUSE 3 12.167 5.417
-PAUSE 50
-MOUSE 3 12.250 5.667
-PAUSE 60
-MOUSE 3 12.333 5.750
-MOUSE 3 12.500 6.000
-PAUSE 50
-MOUSE 3 12.583 6.167
-PAUSE 110
-MOUSE 3 12.750 6.500
-MOUSE 3 12.917 6.833
-PAUSE 60
-MOUSE 3 13.083 7.083
-PAUSE 50
-MOUSE 3 13.167 7.333
-PAUSE 60
-MOUSE 3 13.250 7.417
-PAUSE 50
-MOUSE 3 13.333 7.667
-PAUSE 60
-MOUSE 3 13.333 7.833
-PAUSE 50
MOUSE 3 13.417 8.083
PAUSE 60
-MOUSE 3 13.500 8.333
-PAUSE 50
-MOUSE 3 13.500 8.667
-PAUSE 60
-MOUSE 3 13.500 9.000
-PAUSE 50
-MOUSE 3 13.500 9.167
-PAUSE 60
-MOUSE 3 13.500 9.417
-PAUSE 50
-MOUSE 3 13.500 9.750
-PAUSE 60
-MOUSE 3 13.417 10.000
-PAUSE 50
-MOUSE 3 13.333 10.167
-PAUSE 60
-MOUSE 3 13.333 10.417
-PAUSE 50
-MOUSE 3 13.167 10.500
-PAUSE 60
-MOUSE 3 13.000 10.667
-PAUSE 50
-MOUSE 3 13.000 10.833
-PAUSE 60
MOUSE 3 12.917 10.833
PAUSE 50
MOUSE 3 12.833 10.917
PAUSE 60
-MOUSE 3 12.667 11.000
-PAUSE 50
-MOUSE 3 12.500 11.000
-PAUSE 60
-MOUSE 3 12.167 11.167
-PAUSE 50
-MOUSE 3 12.000 11.333
-PAUSE 110
-MOUSE 3 11.917 11.333
-PAUSE 60
-MOUSE 3 11.833 11.500
-PAUSE 50
-MOUSE 3 11.667 11.500
-PAUSE 60
-MOUSE 3 11.667 11.667
-PAUSE 50
-MOUSE 3 11.500 11.667
-PAUSE 60
-MOUSE 3 11.333 11.667
-PAUSE 50
-MOUSE 3 11.167 11.917
-PAUSE 60
-MOUSE 3 11.000 12.000
-PAUSE 110
MOUSE 3 10.833 12.083
-PAUSE 50
-MOUSE 3 10.667 12.167
-PAUSE 60
-MOUSE 3 10.333 12.333
-MOUSE 3 10.250 12.333
-PAUSE 110
-MOUSE 3 10.000 12.500
-PAUSE 50
-MOUSE 3 9.833 12.583
-PAUSE 60
-MOUSE 3 9.667 12.667
-PAUSE 50
-MOUSE 3 9.417 12.750
-PAUSE 60
-MOUSE 3 9.333 12.833
-PAUSE 50
-MOUSE 3 9.083 13.000
-PAUSE 60
-MOUSE 3 8.917 13.000
-PAUSE 50
-MOUSE 3 8.667 13.167
-PAUSE 60
-MOUSE 3 8.500 13.333
-PAUSE 160
-MOUSE 3 8.417 13.333
PAUSE 60
MOUSE 3 8.167 13.333
-PAUSE 50
-MOUSE 3 7.333 13.333
-PAUSE 60
-MOUSE 3 7.000 13.250
-PAUSE 110
-MOUSE 3 7.000 13.167
-PAUSE 50
-MOUSE 3 6.750 13.000
-PAUSE 60
-MOUSE 3 6.333 12.917
-PAUSE 100
-MOUSE 3 6.333 12.833
-PAUSE 60
-MOUSE 3 6.333 12.750
-PAUSE 50
-MOUSE 3 6.000 12.667
-PAUSE 110
-MOUSE 3 5.750 12.417
-PAUSE 60
-MOUSE 3 5.667 12.333
-PAUSE 50
-MOUSE 3 5.500 12.167
-PAUSE 60
-MOUSE 3 5.333 12.000
-PAUSE 50
-MOUSE 3 5.167 11.833
-PAUSE 60
-MOUSE 3 5.000 11.500
-PAUSE 50
-MOUSE 3 4.833 11.333
-PAUSE 110
-MOUSE 3 4.667 11.000
-PAUSE 60
-MOUSE 3 4.417 10.667
-PAUSE 50
-MOUSE 3 4.333 10.500
-PAUSE 110
-MOUSE 3 4.167 10.083
PAUSE 60
-MOUSE 3 4.000 9.750
-PAUSE 50
MOUSE 3 3.833 9.417
PAUSE 60
-MOUSE 3 3.750 9.167
-PAUSE 50
-MOUSE 3 3.667 8.833
-PAUSE 110
-MOUSE 3 3.500 8.500
-PAUSE 60
-MOUSE 3 3.500 8.250
-PAUSE 50
-MOUSE 3 3.333 8.000
-PAUSE 60
-MOUSE 3 3.333 7.667
-PAUSE 110
-MOUSE 3 3.333 7.417
-PAUSE 50
-MOUSE 3 3.250 7.167
-PAUSE 60
MOUSE 3 3.167 6.917
-PAUSE 110
-MOUSE 3 3.167 6.500
-PAUSE 50
-MOUSE 3 3.167 6.250
-PAUSE 60
-MOUSE 3 3.167 6.000
-PAUSE 110
-MOUSE 3 3.167 5.833
-PAUSE 50
-MOUSE 3 3.167 5.500
-PAUSE 60
-MOUSE 3 3.167 5.333
-PAUSE 50
-MOUSE 3 3.250 5.167
-PAUSE 110
-MOUSE 3 3.333 4.917
-PAUSE 60
-MOUSE 3 3.500 4.667
-PAUSE 50
-MOUSE 3 3.500 4.583
-PAUSE 110
-MOUSE 3 3.750 4.417
-PAUSE 60
-MOUSE 3 4.167 4.083
-PAUSE 50
-MOUSE 3 4.333 4.000
-PAUSE 110
-MOUSE 3 4.500 3.833
-PAUSE 60
-MOUSE 3 4.667 3.667
-PAUSE 50
-MOUSE 3 5.000 3.583
-PAUSE 60
-MOUSE 3 5.167 3.500
-PAUSE 110
-MOUSE 3 5.333 3.500
-PAUSE 50
-MOUSE 3 5.500 3.417
-PAUSE 60
-MOUSE 3 5.667 3.333
-PAUSE 110
-MOUSE 3 5.833 3.333
PAUSE 50
-MOUSE 3 6.000 3.250
-PAUSE 60
-MOUSE 3 6.000 3.167
-PAUSE 110
-MOUSE 3 6.167 3.167
-PAUSE 110
-MOUSE 3 6.250 3.167
-PAUSE 50
-MOUSE 3 6.333 3.167
-PAUSE 60
-MOUSE 3 6.417 3.167
-PAUSE 100
-MOUSE 3 6.500 3.167
-PAUSE 60
-MOUSE 3 6.583 3.167
-PAUSE 50
-MOUSE 3 6.667 3.083
-PAUSE 110
-MOUSE 3 6.667 3.000
-PAUSE 60
-MOUSE 3 6.750 3.083
-PAUSE 50
-MOUSE 3 6.833 3.083
-PAUSE 660
-MOUSE 3 6.917 3.083
-PAUSE 110
-MOUSE 3 7.000 3.167
-PAUSE 440
-MOUSE 3 7.083 3.167
-PAUSE 110
-MOUSE 3 7.167 3.167
MOUSE 3 7.250 3.167
PAUSE 50
MOUSE 3 7.333 3.167
-PAUSE 170
+PAUSE 250
MOUSE 3 7.417 3.167
PAUSE 50
MESSAGE
@@ -372,38 +109,18 @@ It's possible to almost create a complete circle.
If you drag the mouse beyond the start of the curve the track becomes very short.
END
STEP
-MOUSE 3 7.500 3.167
+MOUSE 4 7.500 3.167
MESSAGE
_________________________________________
Here you are warned that the track will be too short.
END
-MOUSE 3 7.60 3.167
+MOUSE 1 7.60 3.167
BIGPAUSE
+MOUSE 2 7.60 3.167
+STEP
MOUSE 3 8.417 3.167
PAUSE 60
-MOUSE 3 8.417 3.250
-PAUSE 440
-MOUSE 3 8.500 3.250
-PAUSE 50
-MOUSE 3 8.500 3.333
-PAUSE 110
-MOUSE 3 8.583 3.333
-PAUSE 60
-MOUSE 3 8.667 3.333
-PAUSE 270
-MOUSE 3 8.750 3.333
-PAUSE 60
-MOUSE 3 8.833 3.333
-PAUSE 50
-MOUSE 3 8.833 3.417
-PAUSE 110
-MOUSE 3 8.833 3.500
-PAUSE 1610
-MOUSE 3 8.833 3.417
-PAUSE 60
-MOUSE 3 8.833 3.500
-PAUSE 110
MOUSE 3 8.917 3.500
PAUSE 60
MOUSE 3 9.000 3.667
@@ -422,52 +139,10 @@ PAUSE 60
MOUSE 3 10.167 4.500
PAUSE 50
MOUSE 3 10.333 4.667
-PAUSE 60
-MOUSE 3 10.583 4.667
-PAUSE 50
-MOUSE 3 10.833 4.833
-PAUSE 60
-MOUSE 3 11.083 5.000
-PAUSE 50
-MOUSE 3 11.750 5.083
-PAUSE 60
-MOUSE 3 11.917 5.167
-PAUSE 50
-MOUSE 3 12.250 5.333
-PAUSE 60
-MOUSE 3 12.417 5.333
-PAUSE 50
-MOUSE 3 12.667 5.333
-PAUSE 60
-MOUSE 3 12.917 5.333
-PAUSE 160
-MOUSE 3 12.917 5.417
-PAUSE 60
-MOUSE 3 13.083 5.500
PAUSE 50
-MOUSE 3 13.333 5.667
-MOUSE 3 13.417 5.750
-PAUSE 220
-MOUSE 3 13.417 5.833
-PAUSE 60
-MOUSE 3 13.417 5.917
-PAUSE 50
-MOUSE 3 13.417 6.083
-MOUSE 3 13.500 6.167
-PAUSE 60
-MOUSE 3 13.583 6.167
-PAUSE 110
-MOUSE 3 13.500 6.333
-PAUSE 110
-MOUSE 3 13.500 6.417
-PAUSE 50
-MOUSE 3 13.500 6.500
-PAUSE 50
-MOUSE 3 13.500 6.667
-PAUSE 110
-MOUSE 3 13.500 6.750
-PAUSE 60
MOUSE 3 13.583 6.833
+STEP
+PAUSE 200
MOUSE 4 13.583 6.833
MESSAGE
_________________________________________
@@ -475,130 +150,17 @@ _________________________________________
If you move the cursor away from the curve, you will create a straight track tangent to the curve.
END
STEP
+MOUSE 1 13.50 6.8
+PAUSE 250
MOUSE 2 13.50 6.8
PAUSE 110
-MOUSE 3 13.50 7.0
-PAUSE 440
-MOUSE 3 13.500 7.2
-PAUSE 60
-MOUSE 3 13.750 7.4
-PAUSE 50
-MOUSE 3 14.083 7.6
-PAUSE 60
-MOUSE 3 14.333 7.8
-PAUSE 110
-MOUSE 3 15.000 7.833
-PAUSE 50
-MOUSE 3 15.500 7.667
-PAUSE 60
-MOUSE 3 16.000 7.583
-PAUSE 110
MOUSE 3 16.250 7.583
-PAUSE 50
-MOUSE 3 16.500 7.417
-PAUSE 60
-MOUSE 3 16.583 7.417
-PAUSE 110
-MOUSE 3 16.750 7.417
-PAUSE 50
-MOUSE 3 16.750 7.417
-PAUSE 110
-MOUSE 3 16.833 7.417
-PAUSE 60
-MOUSE 3 17.000 7.417
-PAUSE 50
-MOUSE 3 17.333 7.583
-PAUSE 110
-MOUSE 3 17.500 7.833
PAUSE 60
MOUSE 3 17.667 8.083
PAUSE 110
-MOUSE 3 17.750 8.333
-PAUSE 50
-MOUSE 3 17.917 8.833
-PAUSE 60
-MOUSE 3 18.000 9.667
-PAUSE 110
-MOUSE 3 18.083 10.500
-PAUSE 50
-MOUSE 3 18.083 11.000
-PAUSE 110
-MOUSE 3 17.917 11.417
-PAUSE 60
-MOUSE 3 17.667 11.667
-PAUSE 50
-MOUSE 3 17.167 12.083
-PAUSE 110
MOUSE 3 16.000 12.583
-PAUSE 60
-MOUSE 3 14.917 13.167
-PAUSE 110
-MOUSE 3 13.917 13.583
-PAUSE 50
-MOUSE 3 13.417 13.833
-PAUSE 110
-MOUSE 3 13.000 14.000
-MOUSE 3 12.583 14.083
-PAUSE 110
-MOUSE 3 12.167 14.250
-PAUSE 60
-MOUSE 3 11.333 14.417
PAUSE 50
-MOUSE 3 10.000 14.500
-PAUSE 110
-MOUSE 3 8.333 14.583
-PAUSE 60
-MOUSE 3 6.667 14.583
-PAUSE 110
-MOUSE 3 5.500 14.583
-PAUSE 50
-MOUSE 3 4.333 14.583
-PAUSE 110
-MOUSE 3 4.000 14.500
-PAUSE 50
-MOUSE 3 4.000 14.417
-PAUSE 110
-MOUSE 3 3.833 14.250
-PAUSE 60
-MOUSE 3 3.667 14.167
-PAUSE 110
-MOUSE 3 3.667 14.083
-PAUSE 50
-MOUSE 3 3.583 14.083
-PAUSE 110
-MOUSE 3 3.500 14.083
-PAUSE 220
-MOUSE 3 3.417 14.083
-PAUSE 60
-MOUSE 3 3.167 14.167
-PAUSE 110
-MOUSE 3 3.167 14.250
-PAUSE 50
-MOUSE 3 3.000 14.250
-PAUSE 110
-MOUSE 3 2.833 14.417
-PAUSE 60
-MOUSE 3 2.667 14.417
-PAUSE 110
-MOUSE 3 2.500 14.583
-PAUSE 50
-MOUSE 3 2.333 14.583
-PAUSE 110
-MOUSE 3 2.167 14.583
-PAUSE 60
-MOUSE 3 2.000 14.667
-PAUSE 110
-MOUSE 3 1.833 14.667
-PAUSE 50
-MOUSE 3 1.667 14.667
-PAUSE 110
-MOUSE 3 1.500 14.667
-PAUSE 60
-MOUSE 3 1.417 14.583
-PAUSE 110
MOUSE 3 1.250 14.583
-PAUSE 50
-MOUSE 3 1.167 14.500
PAUSE 110
MOUSE 3 1.000 14.417
PAUSE 940
@@ -610,13 +172,20 @@ END
STEP
CLEAR
MESSAGE
-If you adjust the End-Point of a turnout or sectional track the track is extended by a straight track segment.
+If you adjust the endpoint of a turnout or sectional track the track is extended by a similar track segment. The extension can be
+a straight or a curve.
END
STEP
+MOUSE 1 19.750 10.583
+PAUSE 50
MOUSE 2 19.750 10.583
+MOUSE 3 28.583 13.500
MOUSE 4 28.583 13.500
BIGPAUSE
+MOUSE 1 19.833 10.583
+PAUSE 50
MOUSE 2 19.833 10.583
+MOUSE 3 28.583 12.083
MOUSE 4 28.583 12.083
MESSAGE
=========================================
@@ -624,20 +193,113 @@ END
STEP
CLEAR
MESSAGE
-You can change the radius of a Straight or Curved track that is connected at one End-Point by holding down the Shift key while dragging on it.
+You can change the radius of a straight or curved track that is connected at one endpoint by holding down the Shift key while Left-dragging on it.
+The blue cross anchor shows that this is possible when shift is held down with no buttons.
END
STEP
KEYSTATE 2
+MOUSE 1 28 13
+BIGPAUSE
+KEYSTATE 2
MOUSE 2 28 13
KEYSTATE 2
-MOUSE 4 31 21
+MOUSE 3 31 20
+KEYSTATE 2
+MOUSE 4 31 20
MESSAGE
_________________________________________
-This lets you change a Straight track into a Curved track (and vice versa) as well as changing the radius of a Curved track.
+This lets you change a straight track into a curved track (and vice versa) as well as changing the radius of a curved track.
+
END
+REGRESSION START 10 - adjust ep 1
+STRAIGHT 1 0 0 0 0 DEMO 2
+ E4 16.166667 2.333333 260.498723 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 34.429091 5.389833 80.498723 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 2 0 0 0 0 DEMO 2 14.750000 9.333333 0 -16.389478 "Peco-55 Medium Right SL-E395F"
+ E4 14.750000 9.333333 253.610522 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 7 19.935373 10.858435 73.610522 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 6 20.049085 10.347771 83.296522 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
+ S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
+ END
+CURVE 3 0 0 0 0 DEMO 2 7.500000 8.333333 0 6.000000 0 0.000000 0.000000
+ E4 13.500000 8.333333 0.000076 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 1.519171 7.854075 355.418545 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 4 0 0 0 0 DEMO 2
+ T4 3 1.519171 7.854075 175.418545 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 1.000000 14.333000 355.418545 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 6 0 0 0 0 DEMO 2
+ T4 2 20.049085 10.347771 263.296522 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 28.698093 11.364328 83.296522 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 7 0 0 0 0 DEMO 2 14.785857 28.366861 0 18.250000 0 0.000000 0.000000
+ E4 31.008578 20.007087 27.262627 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 19.935373 10.858435 253.610522 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
+STEP
+PARAMETER misc cmdUndo
+CLEAR
+MESSAGE
+You can form an extension of a straight or curved Track that is connected at one endpoint using an easement by holding down the Ctrl key while Left-dragging on it.
+The blue half cross anchor shows that this is possible when the Ctrl key is held down with no mouse button.
+END
+STEP
+COMMAND Modify
+KEYSTATE 4
+MOUSE 1 28.583 11.083
+PAUSE 50
+KEYSTATE 4
+MOUSE 2 28.583 11.083
+KEYSTATE 4
+MOUSE 3 31 50
+KEYSTATE 4
+MOUSE 4 31 50
MESSAGE
=========================================
END
STEP
+REGRESSION START 10 - adjust ep 2
+STRAIGHT 1 0 0 0 0 DEMO 2
+ E4 16.166667 2.333333 260.498723 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 34.429091 5.389833 80.498723 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 2 0 0 0 0 DEMO 2 14.750000 9.333333 0 -16.389478 "Peco-55 Medium Right SL-E395F"
+ E4 14.750000 9.333333 253.610522 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 19.935373 10.858435 73.610522 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 6 20.049085 10.347771 83.296522 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
+ S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
+ END
+CURVE 3 0 0 0 0 DEMO 2 7.500000 8.333333 0 6.000000 0 0.000000 0.000000
+ E4 13.500000 8.333333 0.000076 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 1.519171 7.854075 355.418545 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 4 0 0 0 0 DEMO 2
+ T4 3 1.519171 7.854075 175.418545 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 1.000000 14.333000 355.418545 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 6 0 0 0 0 DEMO 2
+ T4 2 20.049085 10.347771 263.296522 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 8 28.698093 11.364328 83.296522 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 8 0 0 0 0 DEMO 2 26.407246 30.855163 0 19.625000 0 0.000000 0.000000
+ E4 30.996193 49.936101 283.522764 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 6 28.698093 11.364328 263.296522 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
CLEAR
diff --git a/app/lib/demos/dmbench.xtr b/app/lib/demos/dmbench.xtr
index 8fbf7f2..252703b 100644
--- a/app/lib/demos/dmbench.xtr
+++ b/app/lib/demos/dmbench.xtr
@@ -66,5 +66,13 @@ _________________________________________
Now both flanges are on the inside of the two girders.
=========================================
END
+REGRESSION START 10 - benchwork
+DRAW 1 0 0 0 0 0.000000 0.000000 0 0.000000
+ B3 16760832 0.055556 0.000000 2.000000 0 23.812000 2.000000 0 17173504
+ END
+DRAW 2 0 0 0 0 0.000000 0.000000 0 0.000000
+ B3 16760832 0.055556 0.000000 10.250000 0 23.750000 10.250000 0 17173505
+ END
+REGRESSION END
STEP
CLEAR
diff --git a/app/lib/demos/dmcancel.xtr b/app/lib/demos/dmcancel.xtr
index edaef5c..e4afbf7 100644
--- a/app/lib/demos/dmcancel.xtr
+++ b/app/lib/demos/dmcancel.xtr
@@ -1,6 +1,7 @@
VERSION 10
DEMOINIT
-ORIG 6.000 0.000 0.000
+ORIG 4.000 0.000 0.000
+PARAMETER display labelenable 1
STRAIGHT 1 0 0 0 0 DEMO 2
E 5.333333 2.250000 270.000000
T 2 14.000000 2.250011 90.000000
@@ -22,7 +23,7 @@ STRAIGHT 3 0 0 0 0 DEMO 2
T 2 19.405000 2.250007 270.000123
END
NOTE 4 0 0 0 16.666667 4.250000 0 69
-This is a note about something important
+This is a note about something important
but I can't remember what.
END
DRAW 5 0 0 0 0 4.125000 5.750000 0 0.000000
@@ -33,19 +34,22 @@ RESET
MESSAGE
Pushing the <Describe> button will cancel any other command in progress.
-Here we will begin to create a Curved track which is a two step process.
+Here we will begin to create a curved track which is a two step process.
END
STEP
COMMAND CurveEndPt
MOUSE 2 21.250 5.583
+MOUSE 3 21.250 5.583
+MOUSE 3 32.333 5.750
MOUSE 4 32.333 5.750
+STEP
COMMAND Describe
MESSAGE
_________________________________________
When we clicked on the <Describe> button, the current command was cancelled.
-When in <Describe> mode, selecting any object will print a description in the Status Bar and display a Dialog showing properties of the clicked-on object.
+When in <Describe> mode, selecting any object will print a description in the Status Bar and display a dialog showing properties of the clicked-on object.
END
STEP
MOUSE 2 11.333 2.167
@@ -53,7 +57,7 @@ MOUSE 4 11.333 2.167
MESSAGE
_________________________________________
-Certain parameters of the object can be changed. In this case we'll change the Length
+Certain parameters of the object can be changed. In this case we'll change the length
END
STEP
#DESCRIBE Length 7.500
@@ -67,7 +71,7 @@ BIGPAUSE
MOUSE 2 18.083 2.250
MOUSE 4 18.083 2.250
MESSAGE
-and change the turnout Title.
+and change the turnout name and part no.
END
STEP
#DESCRIBE Name Medium Left
@@ -80,11 +84,11 @@ MOUSE 4 11.500 6.625
MESSAGE
_________________________________________
-You can change the contents of Text...
+You can change the contents of text...
END
STEP
#DESCRIBE Text Goodbye
-PARAMETER describe S1 Goodbye
+PARAMETER describe T1 Goodbye
BIGPAUSE
MESSAGE
and its size.
@@ -96,7 +100,7 @@ STEP
MESSAGE
_________________________________________
-If you select a Note, the Description dialog appears which displays the contents of the note.
+If you select a note, the Description dialog appears which displays the contents of the note.
END
BIGPAUSE
MOUSE 2 16.750 4.583
@@ -109,4 +113,34 @@ MESSAGE
=========================================
END
STEP
+REGRESSION START 10 - describe
+STRAIGHT 1 0 0 0 0 DEMO 2
+ E4 6.500000 2.250001 269.999927 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 14.000000 2.250011 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 2 0 0 0 0 DEMO 2 14.000000 2.250011 0 0.000000 "Peco-55 Medium Left SL-E396F2"
+ T4 1 14.000000 2.250011 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 19.405000 2.250011 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 19.370000 2.772011 80.314000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.172500 -1.261011
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 -23.136000 0.351000 23.136000 170.297000 9.700000
+ S 0 0.000000 4.251000 0.331000 5.370000 0.522000
+ END
+STRAIGHT 3 0 0 0 0 DEMO 2
+ E4 28.166667 2.250000 90.000123 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 19.405000 2.250007 270.000123 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+NOTE 4 0 0 0 16.666667 4.250000 0 69
+This is a note about something important
+but I can't remember what.
+
+ END
+DRAW 5 0 0 0 0 4.125000 5.750000 0 0.000000
+ Z 0 0.000000 0.000000 0.000000 0 19.000000 "This is some text"
+ END
+REGRESSION END
CLEAR
diff --git a/app/lib/demos/dmcircle.xtr b/app/lib/demos/dmcircle.xtr
index 5d93443..d97370a 100644
--- a/app/lib/demos/dmcircle.xtr
+++ b/app/lib/demos/dmcircle.xtr
@@ -17,6 +17,7 @@ PARAMETER circle radius 10.000
BIGPAUSE
PARAMETER circle radius 12.000000
MOUSE 2 20.500 11.500
+MOUSE 3 13.750 13.250
MOUSE 4 13.750 13.250
PARAMETER circle radius 12.000
RESET
@@ -30,6 +31,7 @@ PARAMETER misc cmdUndo
COMMAND CircleTangent
PARAMETER circle radius 12.000
MOUSE 2 12.000 1.750
+MOUSE 3 12.250 12.000
MOUSE 4 12.250 12.000
PARAMETER circle radius 10.253
MESSAGE
@@ -43,9 +45,16 @@ RESET
COMMAND CircleCenter
PARAMETER circle radius 10.253
MOUSE 2 14.000 14.000
+MOUSE 3 5.750 5.250
MOUSE 4 5.750 5.250
MESSAGE
=========================================
END
STEP
+REGRESSION START 10 - circle
+CURVE 3 0 0 0 0 DEMO 2 14.000000 14.000000 0 12.026013 0 0.000000 0.000000
+ E4 14.000000 26.026013 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 14.000000 26.026013 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
CLEAR
diff --git a/app/lib/demos/dmconn1.xtr b/app/lib/demos/dmconn1.xtr
index 25c562e..5d5ea12 100644
--- a/app/lib/demos/dmconn1.xtr
+++ b/app/lib/demos/dmconn1.xtr
@@ -2,7 +2,7 @@ VERSION 7
DEMOINIT
ORIG 8.000 0.000 0.000
PARAMETER display description-fontsize 24
-TURNOUT 1 0 0 0 0 HO -1 6.842105 1.684210 0.000000 "Kato Unitrack #4-L Turnout 2-850"
+TURNOUT 1 0 0 0 0 HO 2 6.842105 1.684210 0.000000 "Kato Unitrack #4-L Turnout 2-850"
T 11 6.842105 1.684210 270.000000
T 2 14.125570 1.684210 90.000000
T 10 13.891809 2.863926 71.000000
@@ -14,7 +14,7 @@ TURNOUT 1 0 0 0 0 HO -1 6.842105 1.684210 0.000000 "Kato Unitrack #4-L Turnout
L 11579568 0.053333 0.000000 -0.723334 7.283465 -0.723334
A 11579568 0.053333 -20.930666 0.000000 21.654000 161.000000 19.000000
END
-TURNOUT 2 0 0 0 0 HO -1 14.125570 1.684210 0.000000 "Kato Unitrack S61L (incl w/#4 TO) "
+TURNOUT 2 0 0 0 0 HO 2 14.125570 1.684210 0.000000 "Kato Unitrack S61L (incl w/#4 TO) "
T 1 14.125570 1.684210 270.000000
T 3 16.527145 1.684210 90.000000
D 0.000000 0.000000
@@ -23,7 +23,7 @@ TURNOUT 2 0 0 0 0 HO -1 14.125570 1.684210 0.000000 "Kato Unitrack S61L (incl w
L 11579568 0.053333 0.000000 0.723334 2.401575 0.723334
L 11579568 0.053333 0.000000 -0.723334 2.401575 -0.723334
END
-TURNOUT 3 0 0 0 0 HO -1 16.527145 1.684210 0.000000 "Kato Unitrack S114 (incl w/#4 TO) "
+TURNOUT 3 0 0 0 0 HO 2 16.527145 1.684210 0.000000 "Kato Unitrack S114 (incl w/#4 TO) "
T 2 16.527145 1.684210 270.000000
T 12 21.015334 1.684210 90.000000
D 0.000000 0.000000
@@ -32,7 +32,7 @@ TURNOUT 3 0 0 0 0 HO -1 16.527145 1.684210 0.000000 "Kato Unitrack S114 (incl w
L 11579568 0.053333 0.000000 0.723334 4.488189 0.723334
L 11579568 0.053333 0.000000 -0.723334 4.488189 -0.723334
END
-TURNOUT 4 0 0 0 0 HO -1 34.716122 1.684210 0.000000 "Kato Unitrack S114 (incl w/#4 TO) "
+TURNOUT 4 0 0 0 0 HO 2 34.716122 1.684210 0.000000 "Kato Unitrack S114 (incl w/#4 TO) "
T 13 34.716122 1.684210 270.000000
T 5 39.204311 1.684210 90.000000
D 0.000000 0.000000
@@ -41,7 +41,7 @@ TURNOUT 4 0 0 0 0 HO -1 34.716122 1.684210 0.000000 "Kato Unitrack S114 (incl w
L 11579568 0.053333 0.000000 0.723334 4.488189 0.723334
L 11579568 0.053333 0.000000 -0.723334 4.488189 -0.723334
END
-TURNOUT 5 0 0 0 0 HO -1 39.204311 1.684210 0.000000 "Kato Unitrack S61R (incl w/#4 TO) "
+TURNOUT 5 0 0 0 0 HO 2 39.204311 1.684210 0.000000 "Kato Unitrack S61R (incl w/#4 TO) "
T 4 39.204311 1.684210 270.000000
T 6 41.605886 1.684210 90.000000
D 0.000000 0.000000
@@ -50,7 +50,7 @@ TURNOUT 5 0 0 0 0 HO -1 39.204311 1.684210 0.000000 "Kato Unitrack S61R (incl w
L 11579568 0.053333 0.000000 0.723334 2.401575 0.723334
L 11579568 0.053333 0.000000 -0.723334 2.401575 -0.723334
END
-TURNOUT 6 0 0 0 0 HO -1 48.889351 1.684210 180.000000 "Kato Unitrack #4-R Turnout 2-851"
+TURNOUT 6 0 0 0 0 HO 2 48.889351 1.684210 180.000000 "Kato Unitrack #4-R Turnout 2-851"
T 16 48.889351 1.684210 90.000000
T 5 41.605886 1.684210 270.000000
T 7 41.839647 2.863926 289.000000
@@ -62,7 +62,7 @@ TURNOUT 6 0 0 0 0 HO -1 48.889351 1.684210 180.000000 "Kato Unitrack #4-R Turno
L 11579568 0.053333 0.000000 0.723334 7.283465 0.723334
A 11579568 0.053333 20.930666 0.000000 -21.654000 0.000000 19.000000
END
-TURNOUT 7 0 0 0 0 HO -1 40.576601 3.256112 15.500000 "Kato Unitrack R550-3.5 (incl w/#4 TO) "
+TURNOUT 7 0 0 0 0 HO 2 40.576601 3.256112 15.500000 "Kato Unitrack R550-3.5 (incl w/#4 TO) "
T 8 40.576601 3.256112 285.500000
T 6 41.839647 2.863926 109.000000
D 0.000000 0.000000
@@ -71,7 +71,7 @@ TURNOUT 7 0 0 0 0 HO -1 40.576601 3.256112 15.500000 "Kato Unitrack R550-3.5 (
A 11579568 0.053333 20.930666 0.000000 -21.654000 0.000000 3.500000
A 11579568 0.053333 22.377334 0.000000 -21.654000 0.000000 3.500000
END
-TURNOUT 8 0 0 0 0 HO -1 34.789943 4.043642 0.000000 "Kato Unitrack R550-15.5 (incl w/#4 TO) "
+TURNOUT 8 0 0 0 0 HO 2 34.789943 4.043642 0.000000 "Kato Unitrack R550-15.5 (incl w/#4 TO) "
T 14 34.789943 4.043642 270.000000
T 7 40.576601 3.256112 105.500000
D 0.000000 0.000000
@@ -80,7 +80,7 @@ TURNOUT 8 0 0 0 0 HO -1 34.789943 4.043642 0.000000 "Kato Unitrack R550-15.5 (
A 11579568 0.053333 20.930666 0.000000 -21.654000 0.000000 15.500000
A 11579568 0.053333 22.377334 0.000000 -21.654000 0.000000 15.500000
END
-TURNOUT 9 0 0 0 0 HO -1 15.302497 3.256113 344.500000 "Kato Unitrack R550-15.5 (incl w/#4 TO) "
+TURNOUT 9 0 0 0 0 HO 2 15.302497 3.256113 344.500000 "Kato Unitrack R550-15.5 (incl w/#4 TO) "
E 15.302497 3.256113 254.500000
T 15 21.089155 4.043642 90.000000
D 0.000000 0.000000
@@ -89,7 +89,7 @@ TURNOUT 9 0 0 0 0 HO -1 15.302497 3.256113 344.500000 "Kato Unitrack R550-15.5
A 11579568 0.053333 20.930666 0.000000 -21.654000 0.000000 15.500000
A 11579568 0.053333 22.377334 0.000000 -21.654000 0.000000 15.500000
END
-TURNOUT 10 0 0 0 0 HO -1 13.891809 2.863926 341.000000 "Kato Unitrack R550-3.5 (incl w/#4 TO) "
+TURNOUT 10 0 0 0 0 HO 2 13.891809 2.863926 341.000000 "Kato Unitrack R550-3.5 (incl w/#4 TO) "
T 1 13.891809 2.863926 251.000000
E 15.154856 3.256113 74.500000
D 0.000000 0.000000
@@ -98,7 +98,7 @@ TURNOUT 10 0 0 0 0 HO -1 13.891809 2.863926 341.000000 "Kato Unitrack R550-3.5
A 11579568 0.053333 20.930666 0.000000 -21.654000 0.000000 3.500000
A 11579568 0.053333 22.377334 0.000000 -21.654000 0.000000 3.500000
END
-TURNOUT 11 0 0 0 0 HO -1 6.842105 1.684210 180.000000 "Kato Unitrack Straight 6 7/8 2-130"
+TURNOUT 11 0 0 0 0 HO 2 6.842105 1.684210 180.000000 "Kato Unitrack Straight 6 7/8 2-130"
T 1 6.842105 1.684210 90.000000
E -0.008289 1.684210 270.000000
D 0.000000 0.000000
@@ -107,7 +107,7 @@ TURNOUT 11 0 0 0 0 HO -1 6.842105 1.684210 180.000000 "Kato Unitrack Straight 6
L 11579568 0.053333 0.000000 0.723334 6.850394 0.723334
L 11579568 0.053333 0.000000 -0.723334 6.850394 -0.723334
END
-TURNOUT 12 0 0 0 0 HO -1 21.015334 1.684210 0.000000 "Kato Unitrack Straight 6 7/8 2-130"
+TURNOUT 12 0 0 0 0 HO 2 21.015334 1.684210 0.000000 "Kato Unitrack Straight 6 7/8 2-130"
T 3 21.015334 1.684210 270.000000
T 13 27.865728 1.684210 90.000000
D 0.000000 0.000000
@@ -116,7 +116,7 @@ TURNOUT 12 0 0 0 0 HO -1 21.015334 1.684210 0.000000 "Kato Unitrack Straight 6
L 11579568 0.053333 0.000000 0.723334 6.850394 0.723334
L 11579568 0.053333 0.000000 -0.723334 6.850394 -0.723334
END
-TURNOUT 13 0 0 0 0 HO -1 27.865728 1.684210 0.000000 "Kato Unitrack Straight 6 7/8 2-130"
+TURNOUT 13 0 0 0 0 HO 2 27.865728 1.684210 0.000000 "Kato Unitrack Straight 6 7/8 2-130"
T 12 27.865728 1.684210 270.000000
T 4 34.716122 1.684210 90.000000
D 0.000000 0.000000
@@ -125,7 +125,7 @@ TURNOUT 13 0 0 0 0 HO -1 27.865728 1.684210 0.000000 "Kato Unitrack Straight 6
L 11579568 0.053333 0.000000 0.723334 6.850394 0.723334
L 11579568 0.053333 0.000000 -0.723334 6.850394 -0.723334
END
-TURNOUT 14 0 0 0 0 HO -1 34.789943 4.043642 180.000000 "Kato Unitrack Straight 6 7/8 2-130"
+TURNOUT 14 0 0 0 0 HO 2 34.789943 4.043642 180.000000 "Kato Unitrack Straight 6 7/8 2-130"
T 8 34.789943 4.043642 90.000000
T 15 27.939549 4.043642 270.000000
D 0.000000 0.000000
@@ -134,7 +134,7 @@ TURNOUT 14 0 0 0 0 HO -1 34.789943 4.043642 180.000000 "Kato Unitrack Straight
L 11579568 0.053333 0.000000 0.723334 6.850394 0.723334
L 11579568 0.053333 0.000000 -0.723334 6.850394 -0.723334
END
-TURNOUT 15 0 0 0 0 HO -1 27.939549 4.043642 180.000000 "Kato Unitrack Straight 6 7/8 2-130"
+TURNOUT 15 0 0 0 0 HO 2 27.939549 4.043642 180.000000 "Kato Unitrack Straight 6 7/8 2-130"
T 14 27.939549 4.043642 90.000000
T 9 21.089155 4.043642 270.000000
D 0.000000 0.000000
@@ -143,7 +143,7 @@ TURNOUT 15 0 0 0 0 HO -1 27.939549 4.043642 180.000000 "Kato Unitrack Straight
L 11579568 0.053333 0.000000 0.723334 6.850394 0.723334
L 11579568 0.053333 0.000000 -0.723334 6.850394 -0.723334
END
-TURNOUT 16 0 0 0 0 HO -1 48.889351 1.684210 0.000000 "Kato Unitrack Straight 6 7/8 2-130"
+TURNOUT 16 0 0 0 0 HO 2 48.889351 1.684210 0.000000 "Kato Unitrack Straight 6 7/8 2-130"
T 6 48.889351 1.684210 270.000000
E 55.739745 1.684210 90.000000
D 0.000000 0.000000
@@ -196,6 +196,158 @@ ORIG 1 26 3
MESSAGE
=========================================
END
+REGRESSION START 10 - connect
+TURNOUT 1 0 0 0 0 HO 2 6.842105 1.684210 0 0.000000 "Kato Unitrack #4-L Turnout 2-850"
+ T4 11 6.842105 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 14.125570 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 10 13.891809 2.863926 71.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ P "Reverse" 2
+ S 0 0.000000 0.000000 0.000000 7.283465 0.000000
+ C 0 0.000000 -21.654000 0.000000 21.654000 161.000000 19.000000
+ L3 11579568 0.053333 0.000000 -0.723334 0 7.283465 -0.723334 0
+ A3 11579568 0.053333 -20.930666 0.000000 21.654000 0 161.000000 19.000000
+ END
+TURNOUT 2 0 0 0 0 HO 2 14.125570 1.684210 0 0.000000 "Kato Unitrack S61L (incl w/#4 TO) "
+ T4 1 14.125570 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 16.527145 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 2.401575 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 2.401575 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 2.401575 -0.723334 0
+ END
+TURNOUT 3 0 0 0 0 HO 2 16.527145 1.684210 0 0.000000 "Kato Unitrack S114 (incl w/#4 TO) "
+ T4 2 16.527145 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 12 21.015334 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 4.488189 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 4.488189 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 4.488189 -0.723334 0
+ END
+TURNOUT 4 0 0 0 0 HO 2 34.716122 1.684210 0 0.000000 "Kato Unitrack S114 (incl w/#4 TO) "
+ T4 13 34.716122 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 39.204311 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 4.488189 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 4.488189 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 4.488189 -0.723334 0
+ END
+TURNOUT 5 0 0 0 0 HO 2 39.204311 1.684210 0 0.000000 "Kato Unitrack S61R (incl w/#4 TO) "
+ T4 4 39.204311 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 6 41.605886 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 2.401575 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 2.401575 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 2.401575 -0.723334 0
+ END
+TURNOUT 6 0 0 0 0 HO 2 48.889351 1.684210 0 180.000000 "Kato Unitrack #4-R Turnout 2-851"
+ T4 16 48.889351 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 41.605886 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 7 41.839647 2.863926 289.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ P "Reverse" 2
+ S 0 0.000000 0.000000 0.000000 7.283465 0.000000
+ C 0 0.000000 21.654000 0.000000 -21.654000 0.000000 19.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 7.283465 0.723334 0
+ A3 11579568 0.053333 20.930666 0.000000 -21.654000 0 0.000000 19.000000
+ END
+TURNOUT 7 0 0 0 0 HO 2 40.569155 3.257929 0 15.500000 "Kato Unitrack R550-3.5? (incl w/#4 TO) "
+ T4 8 40.569155 3.257929 285.500000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 6 41.832201 2.865743 109.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 21.654000 0.000000 -21.654000 0.000000 3.500000
+ A3 11579568 0.053333 20.930666 0.000000 -21.654000 0 0.000000 3.500000
+ A3 11579568 0.053333 22.377334 0.000000 -21.654000 0 0.000000 3.500000
+ END
+TURNOUT 8 0 0 0 0 HO 2 34.765158 4.047454 0 0.000000 "Kato Unitrack R550-15.5? (incl w/#4 TO) "
+ T4 14 34.765158 4.047454 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 7 40.551816 3.259924 105.500000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 21.654000 0.000000 -21.654000 0.000000 15.500000
+ A3 11579568 0.053333 20.930666 0.000000 -21.654000 0 0.000000 15.500000
+ A3 11579568 0.053333 22.377334 0.000000 -21.654000 0 0.000000 15.500000
+ END
+TURNOUT 9 0 0 0 0 HO 2 15.195546 3.263767 0 344.500000 "Kato Unitrack R550-15.5? (incl w/#4 TO) "
+ T4 10 15.195546 3.263767 254.500000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 15 20.982204 4.051296 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 21.654000 0.000000 -21.654000 0.000000 15.500000
+ A3 11579568 0.053333 20.930666 0.000000 -21.654000 0 0.000000 15.500000
+ A3 11579568 0.053333 22.377334 0.000000 -21.654000 0 0.000000 15.500000
+ END
+TURNOUT 10 0 0 0 0 HO 2 13.912031 2.868564 0 341.000000 "Kato Unitrack R550-3.5? (incl w/#4 TO) "
+ T4 1 13.912031 2.868564 251.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 9 15.175078 3.260751 74.500000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 21.654000 0.000000 -21.654000 0.000000 3.500000
+ A3 11579568 0.053333 20.930666 0.000000 -21.654000 0 0.000000 3.500000
+ A3 11579568 0.053333 22.377334 0.000000 -21.654000 0 0.000000 3.500000
+ END
+TURNOUT 11 0 0 0 0 HO 2 6.842105 1.684210 0 180.000000 "Kato Unitrack Straight 6 7/8 2-130"
+ T4 1 6.842105 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 -0.008289 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 6.850394 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 6.850394 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 6.850394 -0.723334 0
+ END
+TURNOUT 12 0 0 0 0 HO 2 21.015334 1.684210 0 0.000000 "Kato Unitrack Straight 6 7/8 2-130"
+ T4 3 21.015334 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 13 27.865728 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 6.850394 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 6.850394 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 6.850394 -0.723334 0
+ END
+TURNOUT 13 0 0 0 0 HO 2 27.865728 1.684210 0 0.000000 "Kato Unitrack Straight 6 7/8 2-130"
+ T4 12 27.865728 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 34.716122 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 6.850394 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 6.850394 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 6.850394 -0.723334 0
+ END
+TURNOUT 14 0 0 0 0 HO 2 34.746599 4.048730 0 180.000000 "Kato Unitrack Straight 6 7/8 2-130"
+ T4 8 34.746599 4.048730 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 15 27.896205 4.048730 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 6.850394 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 6.850394 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 6.850394 -0.723334 0
+ END
+TURNOUT 15 0 0 0 0 HO 2 27.864401 4.050013 0 180.000000 "Kato Unitrack Straight 6 7/8 2-130"
+ T4 14 27.864401 4.050013 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 9 21.014007 4.050013 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 6.850394 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 6.850394 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 6.850394 -0.723334 0
+ END
+TURNOUT 16 0 0 0 0 HO 2 48.889351 1.684210 0 0.000000 "Kato Unitrack Straight 6 7/8 2-130"
+ T4 6 48.889351 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 55.739745 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 6.850394 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 6.850394 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 6.850394 -0.723334 0
+ END
+REGRESSION END
STEP
CLEAR
MESSAGE
@@ -226,5 +378,157 @@ MOUSE 4 27.933 4.080
MESSAGE
=========================================
END
+REGRESSION START 10 - disconnect
+TURNOUT 1 0 0 0 0 HO 2 6.842105 1.684210 0 0.000000 "Kato Unitrack #4-L Turnout 2-850"
+ T4 11 6.842105 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 14.125570 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 10 13.891809 2.863926 71.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ P "Reverse" 2
+ S 0 0.000000 0.000000 0.000000 7.283465 0.000000
+ C 0 0.000000 -21.654000 0.000000 21.654000 161.000000 19.000000
+ L3 11579568 0.053333 0.000000 -0.723334 0 7.283465 -0.723334 0
+ A3 11579568 0.053333 -20.930666 0.000000 21.654000 0 161.000000 19.000000
+ END
+TURNOUT 2 0 0 0 0 HO 2 14.125570 1.684210 0 0.000000 "Kato Unitrack S61L (incl w/#4 TO) "
+ T4 1 14.125570 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 16.527145 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 2.401575 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 2.401575 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 2.401575 -0.723334 0
+ END
+TURNOUT 3 0 0 0 0 HO 2 16.527145 1.684210 0 0.000000 "Kato Unitrack S114 (incl w/#4 TO) "
+ T4 2 16.527145 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 12 21.015334 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 4.488189 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 4.488189 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 4.488189 -0.723334 0
+ END
+TURNOUT 4 0 0 0 0 HO 2 34.716122 1.684210 0 0.000000 "Kato Unitrack S114 (incl w/#4 TO) "
+ T4 13 34.716122 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 39.204311 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 4.488189 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 4.488189 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 4.488189 -0.723334 0
+ END
+TURNOUT 5 0 0 0 0 HO 2 39.204311 1.684210 0 0.000000 "Kato Unitrack S61R (incl w/#4 TO) "
+ T4 4 39.204311 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 6 41.605886 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 2.401575 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 2.401575 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 2.401575 -0.723334 0
+ END
+TURNOUT 6 0 0 0 0 HO 2 48.889351 1.684210 0 180.000000 "Kato Unitrack #4-R Turnout 2-851"
+ T4 16 48.889351 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 41.605886 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 7 41.839647 2.863926 289.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ P "Reverse" 2
+ S 0 0.000000 0.000000 0.000000 7.283465 0.000000
+ C 0 0.000000 21.654000 0.000000 -21.654000 0.000000 19.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 7.283465 0.723334 0
+ A3 11579568 0.053333 20.930666 0.000000 -21.654000 0 0.000000 19.000000
+ END
+TURNOUT 7 0 0 0 0 HO 2 40.576601 3.256112 0 15.500000 "Kato Unitrack R550-3.5? (incl w/#4 TO) "
+ T4 8 40.576601 3.256112 285.500000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 6 41.839647 2.863926 109.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 21.654000 0.000000 -21.654000 0.000000 3.500000
+ A3 11579568 0.053333 20.930666 0.000000 -21.654000 0 0.000000 3.500000
+ A3 11579568 0.053333 22.377334 0.000000 -21.654000 0 0.000000 3.500000
+ END
+TURNOUT 8 0 0 0 0 HO 2 34.789943 4.043642 0 0.000000 "Kato Unitrack R550-15.5? (incl w/#4 TO) "
+ T4 14 34.789943 4.043642 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 7 40.576601 3.256112 105.500000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 21.654000 0.000000 -21.654000 0.000000 15.500000
+ A3 11579568 0.053333 20.930666 0.000000 -21.654000 0 0.000000 15.500000
+ A3 11579568 0.053333 22.377334 0.000000 -21.654000 0 0.000000 15.500000
+ END
+TURNOUT 9 0 0 0 0 HO 2 15.154856 3.256113 0 344.500000 "Kato Unitrack R550-15.5? (incl w/#4 TO) "
+ T4 10 15.154856 3.256113 254.500000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 15 20.941514 4.043642 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 21.654000 0.000000 -21.654000 0.000000 15.500000
+ A3 11579568 0.053333 20.930666 0.000000 -21.654000 0 0.000000 15.500000
+ A3 11579568 0.053333 22.377334 0.000000 -21.654000 0 0.000000 15.500000
+ END
+TURNOUT 10 0 0 0 0 HO 2 13.891809 2.863926 0 341.000000 "Kato Unitrack R550-3.5? (incl w/#4 TO) "
+ T4 1 13.891809 2.863926 251.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 9 15.154856 3.256113 74.500000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 21.654000 0.000000 -21.654000 0.000000 3.500000
+ A3 11579568 0.053333 20.930666 0.000000 -21.654000 0 0.000000 3.500000
+ A3 11579568 0.053333 22.377334 0.000000 -21.654000 0 0.000000 3.500000
+ END
+TURNOUT 11 0 0 0 0 HO 2 6.842105 1.684210 0 180.000000 "Kato Unitrack Straight 6 7/8 2-130"
+ T4 1 6.842105 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 -0.008289 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 6.850394 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 6.850394 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 6.850394 -0.723334 0
+ END
+TURNOUT 12 0 0 0 0 HO 2 21.015334 1.684210 0 0.000000 "Kato Unitrack Straight 6 7/8 2-130"
+ T4 3 21.015334 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 13 27.865728 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 6.850394 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 6.850394 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 6.850394 -0.723334 0
+ END
+TURNOUT 13 0 0 0 0 HO 2 27.865728 1.684210 0 0.000000 "Kato Unitrack Straight 6 7/8 2-130"
+ T4 12 27.865728 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 34.716122 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 6.850394 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 6.850394 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 6.850394 -0.723334 0
+ END
+TURNOUT 14 0 0 0 0 HO 2 34.789943 4.043642 0 180.000000 "Kato Unitrack Straight 6 7/8 2-130"
+ T4 8 34.789943 4.043642 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 15 27.939549 4.043642 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 6.850394 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 6.850394 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 6.850394 -0.723334 0
+ END
+TURNOUT 15 0 0 0 0 HO 2 27.791908 4.043642 0 180.000000 "Kato Unitrack Straight 6 7/8 2-130"
+ T4 14 27.791908 4.043642 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 9 20.941514 4.043642 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 6.850394 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 6.850394 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 6.850394 -0.723334 0
+ END
+TURNOUT 16 0 0 0 0 HO 2 48.889351 1.684210 0 0.000000 "Kato Unitrack Straight 6 7/8 2-130"
+ T4 6 48.889351 1.684210 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 55.739745 1.684210 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 6.850394 0.000000
+ L3 11579568 0.053333 0.000000 0.723334 0 6.850394 0.723334 0
+ L3 11579568 0.053333 0.000000 -0.723334 0 6.850394 -0.723334 0
+ END
+REGRESSION END
STEP
CLEAR
diff --git a/app/lib/demos/dmconn2.xtr b/app/lib/demos/dmconn2.xtr
index d233edc..720c677 100644
--- a/app/lib/demos/dmconn2.xtr
+++ b/app/lib/demos/dmconn2.xtr
@@ -2,7 +2,7 @@ VERSION 7
DEMOINIT
ORIG 8.000 5.000 0.000
PARAMETER display description-fontsize 24
-TURNOUT 1 0 0 0 0 N -1 17.157895 20.894737 0.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
+TURNOUT 1 0 0 0 0 N 2 17.157895 20.894737 0.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
T 2 17.157895 20.894737 270.000000
T 8 24.061930 18.034992 135.000000
D 0.000000 0.000000
@@ -11,7 +11,7 @@ TURNOUT 1 0 0 0 0 N -1 17.157895 20.894737 0.000000 "Kato Unitrack Curve 9.75R
A 11579568 0.053333 9.290666 0.000000 -9.764000 0.000000 45.000000
A 11579568 0.053333 10.237334 0.000000 -9.764000 0.000000 45.000000
END
-TURNOUT 2 0 0 0 0 N -1 10.253860 18.034992 315.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
+TURNOUT 2 0 0 0 0 N 2 10.253860 18.034992 315.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
T 3 10.253860 18.034992 225.000000
T 1 17.157895 20.894737 90.000000
D 0.000000 0.000000
@@ -20,7 +20,7 @@ TURNOUT 2 0 0 0 0 N -1 10.253860 18.034992 315.000000 "Kato Unitrack Curve 9.75
A 11579568 0.053333 9.290666 0.000000 -9.764000 0.000000 45.000000
A 11579568 0.053333 10.237334 0.000000 -9.764000 0.000000 45.000000
END
-TURNOUT 3 0 0 0 0 N -1 7.394115 11.130957 270.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
+TURNOUT 3 0 0 0 0 N 2 7.394115 11.130957 270.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
T 4 7.394115 11.130957 180.000000
T 2 10.253860 18.034992 45.000000
D 0.000000 0.000000
@@ -29,7 +29,7 @@ TURNOUT 3 0 0 0 0 N -1 7.394115 11.130957 270.000000 "Kato Unitrack Curve 9.75R
A 11579568 0.053333 9.290666 0.000000 -9.764000 0.000000 45.000000
A 11579568 0.053333 10.237334 0.000000 -9.764000 0.000000 45.000000
END
-TURNOUT 4 0 0 0 0 N -1 10.253860 4.226922 225.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
+TURNOUT 4 0 0 0 0 N 2 10.253860 4.226922 225.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
T 5 10.253860 4.226922 135.000000
T 3 7.394115 11.130957 0.000000
D 0.000000 0.000000
@@ -38,7 +38,7 @@ TURNOUT 4 0 0 0 0 N -1 10.253860 4.226922 225.000000 "Kato Unitrack Curve 9.75R
A 11579568 0.053333 9.290666 0.000000 -9.764000 0.000000 45.000000
A 11579568 0.053333 10.237334 0.000000 -9.764000 0.000000 45.000000
END
-TURNOUT 5 0 0 0 0 N -1 17.157895 1.367177 180.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
+TURNOUT 5 0 0 0 0 N 2 17.157895 1.367177 180.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
T 6 17.157895 1.367177 90.000000
T 4 10.253860 4.226922 315.000000
D 0.000000 0.000000
@@ -47,7 +47,7 @@ TURNOUT 5 0 0 0 0 N -1 17.157895 1.367177 180.000000 "Kato Unitrack Curve 9.75R
A 11579568 0.053333 9.290666 0.000000 -9.764000 0.000000 45.000000
A 11579568 0.053333 10.237334 0.000000 -9.764000 0.000000 45.000000
END
-TURNOUT 6 0 0 0 0 N -1 24.061930 4.226922 135.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
+TURNOUT 6 0 0 0 0 N 2 24.061930 4.226922 135.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
T 7 24.061930 4.226922 45.000000
T 5 17.157895 1.367177 270.000000
D 0.000000 0.000000
@@ -56,7 +56,7 @@ TURNOUT 6 0 0 0 0 N -1 24.061930 4.226922 135.000000 "Kato Unitrack Curve 9.75R
A 11579568 0.053333 9.290666 0.000000 -9.764000 0.000000 45.000000
A 11579568 0.053333 10.237334 0.000000 -9.764000 0.000000 45.000000
END
-TURNOUT 7 0 0 0 0 N -1 29.239955 9.404947 135.000000 "Kato Unitrack Straight 7 5/16 186mm 20-010"
+TURNOUT 7 0 0 0 0 N 2 29.239955 9.404947 135.000000 "Kato Unitrack Straight 7 5/16 186mm 20-010"
T 10 29.239955 9.404947 45.000000
T 6 24.061930 4.226922 225.000000
D 0.000000 0.000000
@@ -65,7 +65,7 @@ TURNOUT 7 0 0 0 0 N -1 29.239955 9.404947 135.000000 "Kato Unitrack Straight 7
L 11579568 0.053333 0.000000 0.473340 7.322834 0.473340
L 11579568 0.053333 0.000000 -0.473340 7.322834 -0.473340
END
-TURNOUT 8 0 0 0 0 N -1 29.239955 12.856966 225.000000 "Kato Unitrack Straight 7 5/16 186mm 20-010"
+TURNOUT 8 0 0 0 0 N 2 29.239955 12.856966 225.000000 "Kato Unitrack Straight 7 5/16 186mm 20-010"
T 9 29.239955 12.856966 135.000000
T 1 24.061930 18.034992 315.000000
D 0.000000 0.000000
@@ -74,7 +74,7 @@ TURNOUT 8 0 0 0 0 N -1 29.239955 12.856966 225.000000 "Kato Unitrack Straight 7
L 11579568 0.053333 0.000000 0.473340 7.322834 0.473340
L 11579568 0.053333 0.000000 -0.473340 7.322834 -0.473340
END
-TURNOUT 9 0 0 0 0 N -1 31.026851 11.070071 225.000000 "Kato Unitrack Straight 2 1/2 64mm 20-030"
+TURNOUT 9 0 0 0 0 N 2 31.026851 11.070071 225.000000 "Kato Unitrack Straight 2 1/2 64mm 20-030"
T 12 31.026851 11.070071 135.000000
T 8 29.239955 12.856966 315.000000
D 0.000000 0.000000
@@ -83,7 +83,7 @@ TURNOUT 9 0 0 0 0 N -1 31.026851 11.070071 225.000000 "Kato Unitrack Straight 2
L 11579568 0.053333 0.000000 0.473340 2.527052 0.473340
L 11579568 0.053333 0.000000 -0.473340 2.527052 -0.473340
END
-TURNOUT 10 0 0 0 0 N -1 31.026851 11.191843 135.000000 "Kato Unitrack Straight 2 1/2 64mm 20-030"
+TURNOUT 10 0 0 0 0 N 2 31.026851 11.191843 135.000000 "Kato Unitrack Straight 2 1/2 64mm 20-030"
T 11 31.026851 11.191843 45.000000
T 7 29.239955 9.404947 225.000000
D 0.000000 0.000000
@@ -92,7 +92,7 @@ TURNOUT 10 0 0 0 0 N -1 31.026851 11.191843 135.000000 "Kato Unitrack Straight
L 11579568 0.053333 0.000000 0.473340 2.527052 0.473340
L 11579568 0.053333 0.000000 -0.473340 2.527052 -0.473340
END
-TURNOUT 11 0 0 0 0 N -1 32.813746 12.978739 135.000000 "Kato Unitrack Straight 2 1/2 64mm 20-030"
+TURNOUT 11 0 0 0 0 N 2 32.813746 12.978739 135.000000 "Kato Unitrack Straight 2 1/2 64mm 20-030"
E 32.813746 12.978739 45.000000
T 10 31.026851 11.191843 225.000000
D 0.000000 0.000000
@@ -101,7 +101,7 @@ TURNOUT 11 0 0 0 0 N -1 32.813746 12.978739 135.000000 "Kato Unitrack Straight
L 11579568 0.053333 0.000000 0.473340 2.527052 0.473340
L 11579568 0.053333 0.000000 -0.473340 2.527052 -0.473340
END
-TURNOUT 12 0 0 0 0 N -1 32.813747 9.283175 225.000000 "Kato Unitrack Straight 2 1/2 64mm 20-030"
+TURNOUT 12 0 0 0 0 N 2 32.813747 9.283175 225.000000 "Kato Unitrack Straight 2 1/2 64mm 20-030"
T 13 32.813747 9.283175 135.000000
T 9 31.026851 11.070071 315.000000
D 0.000000 0.000000
@@ -110,7 +110,7 @@ TURNOUT 12 0 0 0 0 N -1 32.813747 9.283175 225.000000 "Kato Unitrack Straight 2
L 11579568 0.053333 0.000000 0.473340 2.527052 0.473340
L 11579568 0.053333 0.000000 -0.473340 2.527052 -0.473340
END
-TURNOUT 13 0 0 0 0 N -1 32.813747 9.283175 45.000000 "Kato Unitrack Turnout 6-R 20-203"
+TURNOUT 13 0 0 0 0 N 2 32.813747 9.283175 45.000000 "Kato Unitrack Turnout 6-R 20-203"
T 12 32.813747 9.283175 315.000000
T 15 37.991772 4.105149 135.000000
T 14 37.310072 3.423450 150.000000
@@ -122,7 +122,7 @@ TURNOUT 13 0 0 0 0 N -1 32.813747 9.283175 45.000000 "Kato Unitrack Turnout 6-R
L 11579568 0.053333 0.000000 0.473340 7.322834 0.473340
A 11579568 0.053333 27.794666 0.003000 -28.268000 359.993000 15.014000
END
-TURNOUT 14 0 0 0 0 N -1 37.310072 3.423450 60.000000 "Kato Unitrack S60L {incl w/4} "
+TURNOUT 14 0 0 0 0 N 2 37.310072 3.423450 60.000000 "Kato Unitrack S60L {incl w/4} "
T 13 37.310072 3.423450 330.000000
E 38.491174 1.377721 150.000000
D 0.000000 0.000000
@@ -131,7 +131,7 @@ TURNOUT 14 0 0 0 0 N -1 37.310072 3.423450 60.000000 "Kato Unitrack S60L {incl
L 11579568 0.053333 0.000000 0.473340 2.362204 0.473340
L 11579568 0.053333 0.000000 -0.473340 2.362204 -0.473340
END
-TURNOUT 15 0 0 0 0 N -1 44.895807 1.245404 180.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
+TURNOUT 15 0 0 0 0 N 2 44.895807 1.245404 180.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
T 16 44.895807 1.245404 90.000000
T 13 37.991772 4.105149 315.000000
D 0.000000 0.000000
@@ -140,7 +140,7 @@ TURNOUT 15 0 0 0 0 N -1 44.895807 1.245404 180.000000 "Kato Unitrack Curve 9.75
A 11579568 0.053333 9.290666 0.000000 -9.764000 0.000000 45.000000
A 11579568 0.053333 10.237334 0.000000 -9.764000 0.000000 45.000000
END
-TURNOUT 16 0 0 0 0 N -1 51.799842 4.105149 135.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
+TURNOUT 16 0 0 0 0 N 2 51.799842 4.105149 135.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
T 17 51.799842 4.105149 45.000000
T 15 44.895807 1.245404 270.000000
D 0.000000 0.000000
@@ -149,7 +149,7 @@ TURNOUT 16 0 0 0 0 N -1 51.799842 4.105149 135.000000 "Kato Unitrack Curve 9.75
A 11579568 0.053333 9.290666 0.000000 -9.764000 0.000000 45.000000
A 11579568 0.053333 10.237334 0.000000 -9.764000 0.000000 45.000000
END
-TURNOUT 17 0 0 0 0 N -1 54.659587 11.009184 90.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
+TURNOUT 17 0 0 0 0 N 2 54.659587 11.009184 90.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
T 18 54.659587 11.009184 0.000000
T 16 51.799842 4.105149 225.000000
D 0.000000 0.000000
@@ -158,7 +158,7 @@ TURNOUT 17 0 0 0 0 N -1 54.659587 11.009184 90.000000 "Kato Unitrack Curve 9.75
A 11579568 0.053333 9.290666 0.000000 -9.764000 0.000000 45.000000
A 11579568 0.053333 10.237334 0.000000 -9.764000 0.000000 45.000000
END
-TURNOUT 18 0 0 0 0 N -1 51.799842 17.913219 45.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
+TURNOUT 18 0 0 0 0 N 2 51.799842 17.913219 45.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
T 19 51.799842 17.913219 315.000000
T 17 54.659587 11.009184 180.000000
D 0.000000 0.000000
@@ -167,7 +167,7 @@ TURNOUT 18 0 0 0 0 N -1 51.799842 17.913219 45.000000 "Kato Unitrack Curve 9.75
A 11579568 0.053333 9.290666 0.000000 -9.764000 0.000000 45.000000
A 11579568 0.053333 10.237334 0.000000 -9.764000 0.000000 45.000000
END
-TURNOUT 19 0 0 0 0 N -1 44.895807 20.772964 0.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
+TURNOUT 19 0 0 0 0 N 2 44.895807 20.772964 0.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
T 20 44.895807 20.772964 270.000000
T 18 51.799842 17.913219 135.000000
D 0.000000 0.000000
@@ -176,7 +176,7 @@ TURNOUT 19 0 0 0 0 N -1 44.895807 20.772964 0.000000 "Kato Unitrack Curve 9.75R
A 11579568 0.053333 9.290666 0.000000 -9.764000 0.000000 45.000000
A 11579568 0.053333 10.237334 0.000000 -9.764000 0.000000 45.000000
END
-TURNOUT 20 0 0 0 0 N -1 37.991772 17.913220 315.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
+TURNOUT 20 0 0 0 0 N 2 37.991772 17.913220 315.000000 "Kato Unitrack Curve 9.75R 249mm 45 20-100"
T 21 37.991772 17.913220 225.000000
T 19 44.895807 20.772964 90.000000
D 0.000000 0.000000
@@ -185,7 +185,7 @@ TURNOUT 20 0 0 0 0 N -1 37.991772 17.913220 315.000000 "Kato Unitrack Curve 9.7
A 11579568 0.053333 9.290666 0.000000 -9.764000 0.000000 45.000000
A 11579568 0.053333 10.237334 0.000000 -9.764000 0.000000 45.000000
END
-TURNOUT 21 0 0 0 0 N -1 32.813747 12.735194 315.000000 "Kato Unitrack Straight 7 5/16 186mm 20-010"
+TURNOUT 21 0 0 0 0 N 2 32.813747 12.735194 315.000000 "Kato Unitrack Straight 7 5/16 186mm 20-010"
E 32.813747 12.735194 225.000000
T 20 37.991772 17.913220 45.000000
D 0.000000 0.000000
@@ -238,5 +238,199 @@ ORIG 2 4.0 9.0
MESSAGE
=========================================
END
+REGRESSION START 10 - figure 8 connect
+TURNOUT 1 0 0 0 0 N 2 17.157895 20.894737 0 0.000000 "Kato Unitrack Curve 9.75R 249mm 45? 20-100"
+ T4 2 17.157895 20.894737 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 8 24.061930 18.034992 135.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 9.764000 0.000000 -9.764000 0.000000 45.000000
+ A3 11579568 0.053333 9.290666 0.000000 -9.764000 0 0.000000 45.000000
+ A3 11579568 0.053333 10.237334 0.000000 -9.764000 0 0.000000 45.000000
+ END
+TURNOUT 2 0 0 0 0 N 2 10.253484 18.030856 0 315.000000 "Kato Unitrack Curve 9.75R 249mm 45? 20-100"
+ T4 3 10.253484 18.030856 225.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 1 17.157519 20.890601 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 9.764000 0.000000 -9.764000 0.000000 45.000000
+ A3 11579568 0.053333 9.290666 0.000000 -9.764000 0 0.000000 45.000000
+ A3 11579568 0.053333 10.237334 0.000000 -9.764000 0 0.000000 45.000000
+ END
+TURNOUT 3 0 0 0 0 N 2 7.395159 11.119313 0 270.000000 "Kato Unitrack Curve 9.75R 249mm 45? 20-100"
+ T4 4 7.395159 11.119313 180.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 10.254904 18.023348 45.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 9.764000 0.000000 -9.764000 0.000000 45.000000
+ A3 11579568 0.053333 9.290666 0.000000 -9.764000 0 0.000000 45.000000
+ A3 11579568 0.053333 10.237334 0.000000 -9.764000 0 0.000000 45.000000
+ END
+TURNOUT 4 0 0 0 0 N 2 10.252098 4.145742 0 225.000000 "Kato Unitrack Curve 9.75R 249mm 45? 20-100"
+ T4 5 10.252098 4.145742 135.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 7.392353 11.049777 0.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 9.764000 0.000000 -9.764000 0.000000 45.000000
+ A3 11579568 0.053333 9.290666 0.000000 -9.764000 0 0.000000 45.000000
+ A3 11579568 0.053333 10.237334 0.000000 -9.764000 0 0.000000 45.000000
+ END
+TURNOUT 5 0 0 0 0 N 2 17.154956 1.248960 0 180.000000 "Kato Unitrack Curve 9.75R 249mm 45? 20-100"
+ T4 6 17.154956 1.248960 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 10.250921 4.108705 315.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 9.764000 0.000000 -9.764000 0.000000 45.000000
+ A3 11579568 0.053333 9.290666 0.000000 -9.764000 0 0.000000 45.000000
+ A3 11579568 0.053333 10.237334 0.000000 -9.764000 0 0.000000 45.000000
+ END
+TURNOUT 6 0 0 0 0 N 2 24.058991 4.108705 0 135.000000 "Kato Unitrack Curve 9.75R 249mm 45? 20-100"
+ T4 7 24.058991 4.108705 45.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 17.154956 1.248960 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 9.764000 0.000000 -9.764000 0.000000 45.000000
+ A3 11579568 0.053333 9.290666 0.000000 -9.764000 0 0.000000 45.000000
+ A3 11579568 0.053333 10.237334 0.000000 -9.764000 0 0.000000 45.000000
+ END
+TURNOUT 7 0 0 0 0 N 2 29.237016 9.286730 0 135.000000 "Kato Unitrack Straight 7 5/16 186mm 20-010"
+ T4 10 29.237016 9.286730 45.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 6 24.058991 4.108705 225.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 7.322834 0.000000
+ L3 11579568 0.053333 0.000000 0.473340 0 7.322834 0.473340 0
+ L3 11579568 0.053333 0.000000 -0.473340 0 7.322834 -0.473340 0
+ END
+TURNOUT 8 0 0 0 0 N 2 29.239955 12.856966 0 225.000000 "Kato Unitrack Straight 7 5/16 186mm 20-010"
+ T4 9 29.239955 12.856966 135.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 1 24.061930 18.034992 315.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 7.322834 0.000000
+ L3 11579568 0.053333 0.000000 0.473340 0 7.322834 0.473340 0
+ L3 11579568 0.053333 0.000000 -0.473340 0 7.322834 -0.473340 0
+ END
+TURNOUT 9 0 0 0 0 N 2 31.026851 11.070071 0 225.000000 "Kato Unitrack Straight 2 1/2 64mm 20-030"
+ T4 12 31.026851 11.070071 135.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 8 29.239955 12.856966 315.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 2.527052 0.000000
+ L3 11579568 0.053333 0.000000 0.473340 0 2.527052 0.473340 0
+ L3 11579568 0.053333 0.000000 -0.473340 0 2.527052 -0.473340 0
+ END
+TURNOUT 10 0 0 0 0 N 2 31.023912 11.073626 0 135.000000 "Kato Unitrack Straight 2 1/2 64mm 20-030"
+ T4 11 31.023912 11.073626 45.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 7 29.237016 9.286730 225.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 2.527052 0.000000
+ L3 11579568 0.053333 0.000000 0.473340 0 2.527052 0.473340 0
+ L3 11579568 0.053333 0.000000 -0.473340 0 2.527052 -0.473340 0
+ END
+TURNOUT 11 0 0 0 0 N 2 32.810807 12.860522 0 135.000000 "Kato Unitrack Straight 2 1/2 64mm 20-030"
+ T4 21 32.810807 12.860522 45.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 10 31.023912 11.073626 225.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 2.527052 0.000000
+ L3 11579568 0.053333 0.000000 0.473340 0 2.527052 0.473340 0
+ L3 11579568 0.053333 0.000000 -0.473340 0 2.527052 -0.473340 0
+ END
+TURNOUT 12 0 0 0 0 N 2 32.813747 9.283175 0 225.000000 "Kato Unitrack Straight 2 1/2 64mm 20-030"
+ T4 13 32.813747 9.283175 135.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 9 31.026851 11.070071 315.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 2.527052 0.000000
+ L3 11579568 0.053333 0.000000 0.473340 0 2.527052 0.473340 0
+ L3 11579568 0.053333 0.000000 -0.473340 0 2.527052 -0.473340 0
+ END
+TURNOUT 13 0 0 0 0 N 2 32.813747 9.283175 0 45.000000 "Kato Unitrack Turnout 6-R 20-203"
+ T4 12 32.813747 9.283175 315.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 15 37.991772 4.105149 135.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 14 37.310072 3.423450 150.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ P "Reverse" 2
+ S 0 0.000000 0.000000 0.000000 7.322834 0.000000
+ C 0 0.000000 28.268000 0.003000 -28.268000 359.993000 15.014000
+ L3 11579568 0.053333 0.000000 0.473340 0 7.322834 0.473340 0
+ A3 11579568 0.053333 27.794666 0.003000 -28.268000 0 359.993000 15.014000
+ END
+TURNOUT 14 0 0 0 0 N 2 37.310072 3.423450 0 60.000000 "Kato Unitrack S60L {incl w/4} "
+ T4 13 37.310072 3.423450 330.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 38.491174 1.377721 150.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 2.362204 0.000000
+ L3 11579568 0.053333 0.000000 0.473340 0 2.362204 0.473340 0
+ L3 11579568 0.053333 0.000000 -0.473340 0 2.362204 -0.473340 0
+ END
+TURNOUT 15 0 0 0 0 N 2 44.895807 1.245404 0 180.000000 "Kato Unitrack Curve 9.75R 249mm 45? 20-100"
+ T4 16 44.895807 1.245404 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 13 37.991772 4.105149 315.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 9.764000 0.000000 -9.764000 0.000000 45.000000
+ A3 11579568 0.053333 9.290666 0.000000 -9.764000 0 0.000000 45.000000
+ A3 11579568 0.053333 10.237334 0.000000 -9.764000 0 0.000000 45.000000
+ END
+TURNOUT 16 0 0 0 0 N 2 51.802848 4.122625 0 135.000000 "Kato Unitrack Curve 9.75R 249mm 45? 20-100"
+ T4 17 51.802848 4.122625 45.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 15 44.898813 1.262880 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 9.764000 0.000000 -9.764000 0.000000 45.000000
+ A3 11579568 0.053333 9.290666 0.000000 -9.764000 0 0.000000 45.000000
+ A3 11579568 0.053333 10.237334 0.000000 -9.764000 0 0.000000 45.000000
+ END
+TURNOUT 17 0 0 0 0 N 2 54.661844 11.035350 0 90.000000 "Kato Unitrack Curve 9.75R 249mm 45? 20-100"
+ T4 18 54.661844 11.035350 0.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 16 51.802099 4.131315 225.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 9.764000 0.000000 -9.764000 0.000000 45.000000
+ A3 11579568 0.053333 9.290666 0.000000 -9.764000 0 0.000000 45.000000
+ A3 11579568 0.053333 10.237334 0.000000 -9.764000 0 0.000000 45.000000
+ END
+TURNOUT 18 0 0 0 0 N 2 51.804905 18.008920 0 45.000000 "Kato Unitrack Curve 9.75R 249mm 45? 20-100"
+ T4 19 51.804905 18.008920 315.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 17 54.664650 11.104885 180.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 9.764000 0.000000 -9.764000 0.000000 45.000000
+ A3 11579568 0.053333 9.290666 0.000000 -9.764000 0 0.000000 45.000000
+ A3 11579568 0.053333 10.237334 0.000000 -9.764000 0 0.000000 45.000000
+ END
+TURNOUT 19 0 0 0 0 N 2 44.892867 20.886695 0 0.000000 "Kato Unitrack Curve 9.75R 249mm 45? 20-100"
+ T4 20 44.892867 20.886695 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 18 51.796902 18.026950 135.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 9.764000 0.000000 -9.764000 0.000000 45.000000
+ A3 11579568 0.053333 9.290666 0.000000 -9.764000 0 0.000000 45.000000
+ A3 11579568 0.053333 10.237334 0.000000 -9.764000 0 0.000000 45.000000
+ END
+TURNOUT 20 0 0 0 0 N 2 37.988832 18.026951 0 315.000000 "Kato Unitrack Curve 9.75R 249mm 45? 20-100"
+ T4 21 37.988832 18.026951 225.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 19 44.892867 20.886695 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ C 0 0.000000 9.764000 0.000000 -9.764000 0.000000 45.000000
+ A3 11579568 0.053333 9.290666 0.000000 -9.764000 0 0.000000 45.000000
+ A3 11579568 0.053333 10.237334 0.000000 -9.764000 0 0.000000 45.000000
+ END
+TURNOUT 21 0 0 0 0 N 2 32.810807 12.848925 0 315.000000 "Kato Unitrack Straight 7 5/16 186mm 20-010"
+ T4 11 32.810807 12.848925 225.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 20 37.988832 18.026951 45.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ S 0 0.000000 0.000000 0.000000 7.322834 0.000000
+ L3 11579568 0.053333 0.000000 0.473340 0 7.322834 0.473340 0
+ L3 11579568 0.053333 0.000000 -0.473340 0 7.322834 -0.473340 0
+ END
+REGRESSION END
STEP
CLEAR
diff --git a/app/lib/demos/dmcrvtrk.xtr b/app/lib/demos/dmcrvtrk.xtr
index 884a9ab..b89e877 100644
--- a/app/lib/demos/dmcrvtrk.xtr
+++ b/app/lib/demos/dmcrvtrk.xtr
@@ -15,6 +15,7 @@ END
STEP
COMMAND CurveEndPt
MOUSE 2 6.500 1.625
+MOUSE 3 31.250 2.750
MOUSE 4 31.250 2.750
MESSAGE
_________________________________________
@@ -25,9 +26,16 @@ Click and drag on one of the Red arrows to complete the Curve.
END
STEP
MOUSE 2 31.125 2.500
+MOUSE 3 20.375 17.875
MOUSE 4 20.375 17.875
RESET
RESET
+REGRESSION START 10 - curve track end point
+CURVE 1 0 0 0 0 DEMO 2 5.835913 16.234915 0 14.625000 0 0.000000 0.000000
+ E4 20.369399 17.868440 353.587021 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 6.500000 1.625000 267.397438 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
MESSAGE
_________________________________________
@@ -37,6 +45,7 @@ STEP
PARAMETER misc cmdUndo
COMMAND CurveTangent
MOUSE 2 8.250 2.250
+MOUSE 3 31.875 2.500
MOUSE 4 31.875 2.500
MESSAGE
_________________________________________
@@ -47,6 +56,7 @@ As before, drag on one of the Red arrows to complete the Curve.
END
STEP
MOUSE 2 8.875 2.500
+MOUSE 3 17.375 19.125
MOUSE 4 17.375 19.125
RESET
RESET
@@ -55,10 +65,17 @@ _________________________________________
The next method is similar to the last except that you drag first from the center of the Curve to one End-Point.
END
+REGRESSION START 10 - curve track tangent
+CURVE 2 0 0 0 0 DEMO 2 31.875000 2.500000 0 23.626323 0 0.000000 0.000000
+ E4 8.250000 2.250000 179.393718 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 16.345411 20.305477 48.905699 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
STEP
PARAMETER misc cmdUndo
COMMAND CurveCenter
MOUSE 2 27.375 4.250
+MOUSE 3 5.000 4.250
MOUSE 4 5.000 4.250
MESSAGE
_________________________________________
@@ -67,6 +84,7 @@ Once again, drag on a Red arrow to complete the Curve.
END
STEP
MOUSE 2 5.000 4.375
+MOUSE 3 15.625 18.875
MOUSE 4 15.625 18.875
RESET
MESSAGE
@@ -75,10 +93,17 @@ _________________________________________
The last method begins by drawing a line between the two End-Points of the Curve. This forms the Chord of the Curve.
END
STEP
+REGRESSION START 10 - curve track center
+CURVE 3 0 0 0 0 DEMO 2 27.375000 4.250000 0 22.375000 0 0.000000 0.000000
+ E4 5.000000 4.250000 180.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 13.361117 21.692812 51.220950 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
RESET
PARAMETER misc cmdUndo
COMMAND CurveChord
MOUSE 2 5.625 1.500
+MOUSE 3 37.125 1.500
MOUSE 4 37.125 1.500
MESSAGE
_________________________________________
@@ -87,10 +112,17 @@ Now drag on a Red arrow to complete the Curve.
END
STEP
MOUSE 2 21.250 2.125
+MOUSE 3 20.750 16.750
MOUSE 4 20.750 16.750
RESET
MESSAGE
=========================================
END
STEP
+REGRESSION START 10 - curve track - chord
+CURVE 4 0 0 0 0 DEMO 2 21.375000 0.991803 0 15.758197 0 0.000000 0.000000
+ E4 5.625000 1.500000 181.848091 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 37.125000 1.500000 178.151909 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
CLEAR
diff --git a/app/lib/demos/dmctlpnl.xtr b/app/lib/demos/dmctlpnl.xtr
index e98604d..99646d5 100644
--- a/app/lib/demos/dmctlpnl.xtr
+++ b/app/lib/demos/dmctlpnl.xtr
@@ -136,349 +136,362 @@ Now, clear the layout and turn on the Snap Grid.
END
STEP
PARAMETER grid ok
-PARAMETER misc menuFile-clear
+#PARAMETER misc menuFile-clear
PARAMETER misc cmdGridShow
PARAMETER misc cmdGridEnable
ORIG 2.000 0.000 2.000
-CLEAR
+#CLEAR
+#PARAMETER layout ok
+PARAMETER misc cmdSelectAll
+PARAMETER misc cmdDelete
MESSAGE
First step: draw the lines representing the tracks.
-We specify the line width in pixels.
+We specify the line width in pixels when at 1:1 zoom.
-To create a " line, divide the dots-per-inch (DPI) of your display by 4 and then by the drawing scale (which is 2 right now).
+To create a 1/4" line, divide the dots-per-inch (DPI) of your display by 4.
-For MS-Windows the DPI is usually 98, so choose: 98/4/2 = 12 (approximately).
-For Linux, the DPI is usually 72, so choose: 72/4/2 = 9.
+For MS-Windows the DPI is usually 98, so choose: 98/4 = 24 (approximately).
+For Linux, the DPI is usually 72, so choose: 72/4 = 18.
END
STEP
COMMAND DrawLine
PARAMETER draw linewidth 0
PARAMETER draw linecolor 0
PARAMETER GROUP draw
-PARAMETER draw linewidth 12
+PARAMETER draw linewidth 24
STEP
+KEYSTATE 2
MOUSE 2 1.000 6.000
-MOUSE 3 1.016 6.000
-MOUSE 3 1.016 6.016
-MOUSE 3 1.047 6.016
-MOUSE 3 1.078 6.016
-MOUSE 3 1.125 6.016
-MOUSE 3 1.234 6.000
-MOUSE 3 1.375 5.969
-MOUSE 3 1.531 5.969
-MOUSE 3 1.734 5.938
-MOUSE 3 1.922 5.938
-MOUSE 3 2.141 5.938
-MOUSE 3 2.391 5.938
-MOUSE 3 2.641 5.906
-MOUSE 3 2.844 5.906
-MOUSE 3 3.031 5.906
-MOUSE 3 3.203 5.906
-MOUSE 3 3.344 5.906
-MOUSE 3 3.484 5.906
-MOUSE 3 3.609 5.938
-MOUSE 3 3.625 5.938
-MOUSE 3 3.641 5.938
-MOUSE 3 3.656 5.953
-MOUSE 3 3.750 5.984
-MOUSE 3 3.781 5.984
-MOUSE 3 3.922 5.984
-MOUSE 3 4.125 5.984
-MOUSE 3 4.344 5.953
-MOUSE 3 4.594 5.891
-MOUSE 3 4.875 5.875
-MOUSE 3 5.172 5.844
-MOUSE 3 5.422 5.812
-MOUSE 3 5.625 5.781
-MOUSE 3 5.875 5.750
-MOUSE 3 6.000 5.734
-MOUSE 3 6.094 5.703
-MOUSE 3 6.125 5.703
-MOUSE 3 6.156 5.688
-MOUSE 3 6.203 5.688
-MOUSE 3 6.219 5.688
-MOUSE 3 6.234 5.688
-MOUSE 3 6.250 5.688
-MOUSE 3 6.250 5.688
-MOUSE 3 6.250 5.703
-MOUSE 3 6.250 5.719
-MOUSE 3 6.281 5.734
-MOUSE 3 6.328 5.734
-MOUSE 3 6.469 5.734
-MOUSE 3 6.625 5.734
-MOUSE 3 6.828 5.734
-MOUSE 3 7.047 5.750
-MOUSE 3 7.375 5.750
-MOUSE 3 7.656 5.781
-MOUSE 3 7.906 5.781
-MOUSE 3 8.109 5.781
-MOUSE 3 8.266 5.781
-MOUSE 3 8.406 5.781
-MOUSE 3 8.578 5.781
-MOUSE 3 8.719 5.781
-MOUSE 3 8.828 5.781
-MOUSE 3 8.875 5.781
-MOUSE 3 8.891 5.766
-MOUSE 3 8.906 5.766
-MOUSE 3 8.922 5.766
-MOUSE 3 8.922 5.781
-MOUSE 3 8.922 5.812
-MOUSE 3 8.938 5.844
-MOUSE 3 9.000 5.891
-MOUSE 3 9.078 5.953
-MOUSE 3 9.188 5.984
-MOUSE 3 9.359 6.000
-MOUSE 3 9.516 6.000
-MOUSE 3 9.656 6.000
-MOUSE 3 9.859 6.000
-MOUSE 3 10.000 6.000
-MOUSE 3 10.109 6.000
-MOUSE 3 10.250 6.000
-MOUSE 3 10.375 6.000
-MOUSE 3 10.516 6.000
-MOUSE 3 10.656 6.031
-MOUSE 3 10.797 6.031
-MOUSE 3 10.938 6.062
-MOUSE 3 10.984 6.062
-MOUSE 3 11.062 6.094
-MOUSE 3 11.078 6.094
-MOUSE 3 11.094 6.109
-MOUSE 3 11.109 6.109
-MOUSE 3 11.125 6.109
-MOUSE 3 11.125 6.109
-MOUSE 3 11.141 6.109
-MOUSE 3 11.156 6.125
-MOUSE 3 11.172 6.125
-MOUSE 3 11.188 6.125
-MOUSE 3 11.203 6.125
-MOUSE 3 11.203 6.125
-MOUSE 3 11.219 6.125
-MOUSE 3 11.234 6.109
-MOUSE 3 11.250 6.094
-MOUSE 3 11.250 6.078
-MOUSE 3 11.266 6.062
-MOUSE 3 11.281 6.062
-MOUSE 3 11.297 6.062
-MOUSE 3 11.297 6.047
-MOUSE 3 11.312 6.047
-MOUSE 3 11.328 6.047
-MOUSE 3 11.312 6.047
-MOUSE 3 11.281 6.062
-MOUSE 3 11.172 6.094
-MOUSE 3 11.062 6.094
-MOUSE 3 10.953 6.094
-MOUSE 3 10.812 6.125
-MOUSE 3 10.703 6.125
-MOUSE 3 10.562 6.125
-MOUSE 3 10.516 6.125
-MOUSE 3 10.484 6.125
-MOUSE 3 10.453 6.125
-MOUSE 3 10.422 6.125
-MOUSE 3 10.406 6.125
-MOUSE 3 10.391 6.125
-MOUSE 3 10.375 6.125
-MOUSE 3 10.375 6.109
-MOUSE 3 10.375 6.109
-MOUSE 3 10.375 6.109
-MOUSE 3 10.391 6.109
-MOUSE 3 10.422 6.109
-MOUSE 3 10.500 6.078
-MOUSE 3 10.547 6.078
-MOUSE 3 10.578 6.078
-MOUSE 3 10.625 6.078
-MOUSE 3 10.641 6.062
-MOUSE 3 10.672 6.062
-MOUSE 3 10.688 6.062
-MOUSE 3 10.719 6.062
-MOUSE 3 10.734 6.062
-MOUSE 3 10.750 6.062
-MOUSE 3 10.750 6.062
-MOUSE 3 10.766 6.062
-MOUSE 3 10.781 6.062
-MOUSE 3 10.797 6.078
-MOUSE 3 10.812 6.078
-MOUSE 3 10.844 6.078
-MOUSE 3 10.875 6.078
-MOUSE 3 10.875 6.078
-MOUSE 3 10.891 6.078
-MOUSE 3 10.906 6.078
-MOUSE 3 10.922 6.078
-MOUSE 3 10.938 6.078
-MOUSE 3 10.953 6.078
-MOUSE 3 10.969 6.078
-MOUSE 3 10.984 6.078
-MOUSE 3 10.984 6.062
-MOUSE 3 10.984 6.047
-MOUSE 3 11.000 6.031
-MOUSE 3 11.000 6.016
-MOUSE 3 11.000 6.000
-MOUSE 3 11.000 6.000
-MOUSE 3 11.000 6.000
-MOUSE 3 11.000 5.984
-MOUSE 4 11.000 5.984
-BIGPAUSE
-MOUSE 2 3.000 4.984
-MOUSE 4 8.969 5.047
-BIGPAUSE
-MOUSE 2 2.000 6.016
-MOUSE 4 2.969 5.031
-BIGPAUSE
-MOUSE 2 10.000 6.016
+#MOUSE 3 1.016 6.000
+#MOUSE 3 1.016 6.016
+#MOUSE 3 1.047 6.016
+#MOUSE 3 1.078 6.016
+#MOUSE 3 1.125 6.016
+#MOUSE 3 1.234 6.000
+#MOUSE 3 1.375 5.969
+#MOUSE 3 1.531 5.969
+#MOUSE 3 1.734 5.938
+#MOUSE 3 1.922 5.938
+#MOUSE 3 2.141 5.938
+#MOUSE 3 2.391 5.938
+#MOUSE 3 2.641 5.906
+#MOUSE 3 2.844 5.906
+#MOUSE 3 3.031 5.906
+#MOUSE 3 3.203 5.906
+#MOUSE 3 3.344 5.906
+#MOUSE 3 3.484 5.906
+#MOUSE 3 3.609 5.938
+#MOUSE 3 3.625 5.938
+#MOUSE 3 3.641 5.938
+#MOUSE 3 3.656 5.953
+#MOUSE 3 3.750 5.984
+#MOUSE 3 3.781 5.984
+#MOUSE 3 3.922 5.984
+#MOUSE 3 4.125 5.984
+#MOUSE 3 4.344 5.953
+#MOUSE 3 4.594 5.891
+#MOUSE 3 4.875 5.875
+#MOUSE 3 5.172 5.844
+#MOUSE 3 5.422 5.812
+#MOUSE 3 5.625 5.781
+#MOUSE 3 5.875 5.750
+#MOUSE 3 6.000 5.734
+#MOUSE 3 6.094 5.703
+#MOUSE 3 6.125 5.703
+#MOUSE 3 6.156 5.688
+#MOUSE 3 6.203 5.688
+#MOUSE 3 6.219 5.688
+#MOUSE 3 6.234 5.688
+#MOUSE 3 6.250 5.688
+#MOUSE 3 6.250 5.688
+#MOUSE 3 6.250 5.703
+#MOUSE 3 6.250 5.719
+#MOUSE 3 6.281 5.734
+#MOUSE 3 6.328 5.734
+#MOUSE 3 6.469 5.734
+#MOUSE 3 6.625 5.734
+#MOUSE 3 6.828 5.734
+#MOUSE 3 7.047 5.750
+#MOUSE 3 7.375 5.750
+#MOUSE 3 7.656 5.781
+#MOUSE 3 7.906 5.781
+#MOUSE 3 8.109 5.781
+#MOUSE 3 8.266 5.781
+#MOUSE 3 8.406 5.781
+#MOUSE 3 8.578 5.781
+#MOUSE 3 8.719 5.781
+#MOUSE 3 8.828 5.781
+#MOUSE 3 8.875 5.781
+#MOUSE 3 8.891 5.766
+#MOUSE 3 8.906 5.766
+#MOUSE 3 8.922 5.766
+#MOUSE 3 8.922 5.781
+#MOUSE 3 8.922 5.812
+#MOUSE 3 8.938 5.844
+#MOUSE 3 9.000 5.891
+#MOUSE 3 9.078 5.953
+#MOUSE 3 9.188 5.984
+#MOUSE 3 9.359 6.000
+#MOUSE 3 9.516 6.000
+#MOUSE 3 9.656 6.000
+#MOUSE 3 9.859 6.000
+#MOUSE 3 10.000 6.000
+#MOUSE 3 10.109 6.000
+#MOUSE 3 10.250 6.000
+#MOUSE 3 10.375 6.000
+#MOUSE 3 10.516 6.000
+#MOUSE 3 10.656 6.031
+#MOUSE 3 10.797 6.031
+#MOUSE 3 10.938 6.062
+#MOUSE 3 10.984 6.062
+#MOUSE 3 11.062 6.094
+#MOUSE 3 11.078 6.094
+#MOUSE 3 11.094 6.109
+#MOUSE 3 11.109 6.109
+#MOUSE 3 11.125 6.109
+#MOUSE 3 11.125 6.109
+#MOUSE 3 11.141 6.109
+#MOUSE 3 11.156 6.125
+#MOUSE 3 11.172 6.125
+#MOUSE 3 11.188 6.125
+#MOUSE 3 11.203 6.125
+#MOUSE 3 11.203 6.125
+#MOUSE 3 11.219 6.125
+#MOUSE 3 11.234 6.109
+#MOUSE 3 11.250 6.094
+#MOUSE 3 11.250 6.078
+#MOUSE 3 11.266 6.062
+#MOUSE 3 11.281 6.062
+#MOUSE 3 11.297 6.062
+#MOUSE 3 11.297 6.047
+#MOUSE 3 11.312 6.047
+#MOUSE 3 11.328 6.047
+#MOUSE 3 11.312 6.047
+#MOUSE 3 11.281 6.062
+#MOUSE 3 11.172 6.094
+#MOUSE 3 11.062 6.094
+#MOUSE 3 10.953 6.094
+#MOUSE 3 10.812 6.125
+#MOUSE 3 10.703 6.125
+#MOUSE 3 10.562 6.125
+#MOUSE 3 10.516 6.125
+#MOUSE 3 10.484 6.125
+#MOUSE 3 10.453 6.125
+#MOUSE 3 10.422 6.125
+#MOUSE 3 10.406 6.125
+#MOUSE 3 10.391 6.125
+#MOUSE 3 10.375 6.125
+#MOUSE 3 10.375 6.109
+#MOUSE 3 10.375 6.109
+#MOUSE 3 10.375 6.109
+#MOUSE 3 10.391 6.109
+#MOUSE 3 10.422 6.109
+#MOUSE 3 10.500 6.078
+#MOUSE 3 10.547 6.078
+#MOUSE 3 10.578 6.078
+#MOUSE 3 10.625 6.078
+#MOUSE 3 10.641 6.062
+#MOUSE 3 10.672 6.062
+#MOUSE 3 10.688 6.062
+#MOUSE 3 10.719 6.062
+#MOUSE 3 10.734 6.062
+#MOUSE 3 10.750 6.062
+#MOUSE 3 10.750 6.062
+#MOUSE 3 10.766 6.062
+#MOUSE 3 10.781 6.062
+#MOUSE 3 10.797 6.078
+#MOUSE 3 10.812 6.078
+#MOUSE 3 10.844 6.078
+#MOUSE 3 10.875 6.078
+#MOUSE 3 10.875 6.078
+#MOUSE 3 10.891 6.078
+#MOUSE 3 10.906 6.078
+#MOUSE 3 10.922 6.078
+#MOUSE 3 10.938 6.078
+#MOUSE 3 10.953 6.078
+#MOUSE 3 10.969 6.078
+#MOUSE 3 10.984 6.078
+#MOUSE 3 10.984 6.062
+#MOUSE 3 10.984 6.047
+#MOUSE 3 11.000 6.031
+#MOUSE 3 11.000 6.016
+#MOUSE 3 11.000 6.000
+#MOUSE 3 11.000 6.000
+#MOUSE 3 11.000 6.000
+#MOUSE 3 11.000 5.984
+KEYSTATE 2
+MOUSE 4 11.000 6.000
+KEYSTATE 2
+MOUSE 2 10.000 6.000
+KEYSTATE 2
MOUSE 4 9.000 5.000
+BIGPAUSE
+KEYSTATE 2
+MOUSE 2 9.000 5.000
+KEYSTATE 2
+MOUSE 4 3.000 5.000
+BIGPAUSE
+KEYSTATE 2
+MOUSE 2 3.000 5.000
+KEYSTATE 2
+MOUSE 4 2.000 6.000
+BIGPAUSE
+KEYSTATE 2
MOUSE 2 6.000 5.000
-MOUSE 3 6.000 4.984
-MOUSE 3 6.000 4.984
-MOUSE 3 6.031 4.969
-MOUSE 3 6.047 4.953
-MOUSE 3 6.078 4.938
-MOUSE 3 6.109 4.938
-MOUSE 3 6.125 4.922
-MOUSE 3 6.156 4.906
-MOUSE 3 6.188 4.891
-MOUSE 3 6.203 4.891
-MOUSE 3 6.234 4.875
-MOUSE 3 6.250 4.875
-MOUSE 3 6.250 4.875
-MOUSE 3 6.281 4.875
-MOUSE 3 6.281 4.859
-MOUSE 3 6.297 4.844
-MOUSE 3 6.312 4.844
-MOUSE 3 6.328 4.828
-MOUSE 3 6.344 4.828
-MOUSE 3 6.375 4.812
-MOUSE 3 6.375 4.797
-MOUSE 3 6.438 4.750
-MOUSE 3 6.469 4.734
-MOUSE 3 6.516 4.672
-MOUSE 3 6.547 4.656
-MOUSE 3 6.578 4.641
-MOUSE 3 6.594 4.625
-MOUSE 3 6.609 4.625
-MOUSE 3 6.625 4.609
-MOUSE 3 6.625 4.594
-MOUSE 3 6.625 4.578
-MOUSE 3 6.625 4.562
-MOUSE 3 6.625 4.547
-MOUSE 3 6.625 4.531
-MOUSE 3 6.641 4.516
-MOUSE 3 6.656 4.500
-MOUSE 3 6.672 4.484
-MOUSE 3 6.688 4.469
-MOUSE 3 6.734 4.438
-MOUSE 3 6.734 4.422
-MOUSE 3 6.750 4.422
-MOUSE 3 6.750 4.406
-MOUSE 3 6.766 4.391
-MOUSE 3 6.781 4.375
-MOUSE 3 6.797 4.359
-MOUSE 3 6.828 4.344
-MOUSE 3 6.844 4.328
-MOUSE 3 6.859 4.312
-MOUSE 3 6.859 4.297
-MOUSE 3 6.875 4.297
-MOUSE 3 6.875 4.281
-MOUSE 3 6.891 4.281
-MOUSE 3 6.906 4.281
-MOUSE 3 6.922 4.281
-MOUSE 3 6.938 4.266
-MOUSE 3 6.969 4.266
-MOUSE 3 7.047 4.250
-MOUSE 3 7.078 4.234
-MOUSE 3 7.156 4.203
-MOUSE 3 7.250 4.172
-MOUSE 3 7.297 4.125
-MOUSE 3 7.328 4.109
-MOUSE 3 7.344 4.109
-MOUSE 3 7.359 4.109
-MOUSE 3 7.359 4.094
-MOUSE 3 7.375 4.094
-MOUSE 3 7.375 4.078
-MOUSE 3 7.375 4.078
-MOUSE 3 7.391 4.062
-MOUSE 3 7.422 4.047
-MOUSE 3 7.438 4.031
-MOUSE 3 7.453 4.016
-MOUSE 3 7.469 4.000
-MOUSE 3 7.484 4.000
-MOUSE 3 7.500 4.000
-MOUSE 3 7.500 4.000
-MOUSE 3 7.500 3.984
-MOUSE 3 7.516 3.969
-MOUSE 3 7.531 3.953
-MOUSE 3 7.547 3.938
-MOUSE 3 7.562 3.922
-MOUSE 3 7.578 3.906
-MOUSE 3 7.594 3.891
-MOUSE 3 7.609 3.875
-MOUSE 3 7.625 3.875
-MOUSE 3 7.625 3.859
-MOUSE 3 7.641 3.844
-MOUSE 3 7.703 3.781
-MOUSE 3 7.719 3.766
-MOUSE 3 7.734 3.750
-MOUSE 3 7.750 3.750
-MOUSE 3 7.750 3.734
-MOUSE 3 7.750 3.734
-MOUSE 3 7.750 3.719
-MOUSE 3 7.766 3.703
-MOUSE 3 7.781 3.688
-MOUSE 3 7.797 3.672
-MOUSE 3 7.812 3.656
-MOUSE 3 7.828 3.641
-MOUSE 3 7.844 3.625
-MOUSE 3 7.859 3.625
-MOUSE 3 7.859 3.625
-MOUSE 3 7.859 3.609
-MOUSE 3 7.859 3.594
-MOUSE 3 7.859 3.578
-MOUSE 3 7.859 3.562
-MOUSE 3 7.859 3.547
-MOUSE 3 7.859 3.531
-MOUSE 3 7.859 3.516
-MOUSE 3 7.859 3.500
-MOUSE 3 7.859 3.500
-MOUSE 3 7.875 3.484
-MOUSE 3 7.875 3.469
-MOUSE 3 7.875 3.453
-MOUSE 3 7.875 3.438
-MOUSE 3 7.875 3.422
-MOUSE 3 7.875 3.406
-MOUSE 3 7.891 3.406
-MOUSE 3 7.891 3.391
-MOUSE 3 7.891 3.375
-MOUSE 3 7.906 3.375
-MOUSE 3 7.906 3.375
-MOUSE 3 7.922 3.359
-MOUSE 3 7.922 3.344
-MOUSE 3 7.938 3.328
-MOUSE 3 7.938 3.312
-MOUSE 3 7.953 3.312
-MOUSE 3 7.953 3.297
-MOUSE 3 7.953 3.281
-MOUSE 3 7.969 3.281
-MOUSE 3 7.969 3.266
-MOUSE 3 7.969 3.250
-MOUSE 3 7.969 3.250
-MOUSE 3 7.984 3.234
-MOUSE 3 7.984 3.219
-MOUSE 3 7.984 3.203
-MOUSE 3 8.000 3.203
-MOUSE 3 8.000 3.188
-MOUSE 3 8.000 3.172
-MOUSE 3 8.000 3.156
-MOUSE 3 8.000 3.141
-MOUSE 3 8.016 3.141
-MOUSE 3 8.016 3.125
-MOUSE 3 8.016 3.125
-MOUSE 3 8.016 3.109
-MOUSE 3 8.031 3.109
-MOUSE 3 8.031 3.094
-MOUSE 3 8.031 3.078
-MOUSE 3 8.031 3.062
-MOUSE 3 8.031 3.047
-MOUSE 3 8.031 3.031
-MOUSE 4 8.031 3.031
+#MOUSE 3 6.000 4.984
+#MOUSE 3 6.000 4.984
+#MOUSE 3 6.031 4.969
+#MOUSE 3 6.047 4.953
+#MOUSE 3 6.078 4.938
+#MOUSE 3 6.109 4.938
+#MOUSE 3 6.125 4.922
+#MOUSE 3 6.156 4.906
+#MOUSE 3 6.188 4.891
+#MOUSE 3 6.203 4.891
+#MOUSE 3 6.234 4.875
+#MOUSE 3 6.250 4.875
+#MOUSE 3 6.250 4.875
+#MOUSE 3 6.281 4.875
+#MOUSE 3 6.281 4.859
+#MOUSE 3 6.297 4.844
+#MOUSE 3 6.312 4.844
+#MOUSE 3 6.328 4.828
+#MOUSE 3 6.344 4.828
+#MOUSE 3 6.375 4.812
+#MOUSE 3 6.375 4.797
+#MOUSE 3 6.438 4.750
+#MOUSE 3 6.469 4.734
+#MOUSE 3 6.516 4.672
+#MOUSE 3 6.547 4.656
+#MOUSE 3 6.578 4.641
+#MOUSE 3 6.594 4.625
+#MOUSE 3 6.609 4.625
+#MOUSE 3 6.625 4.609
+#MOUSE 3 6.625 4.594
+#MOUSE 3 6.625 4.578
+#MOUSE 3 6.625 4.562
+#MOUSE 3 6.625 4.547
+#MOUSE 3 6.625 4.531
+#MOUSE 3 6.641 4.516
+#MOUSE 3 6.656 4.500
+#MOUSE 3 6.672 4.484
+#MOUSE 3 6.688 4.469
+#MOUSE 3 6.734 4.438
+#MOUSE 3 6.734 4.422
+#MOUSE 3 6.750 4.422
+#MOUSE 3 6.750 4.406
+#MOUSE 3 6.766 4.391
+#MOUSE 3 6.781 4.375
+#MOUSE 3 6.797 4.359
+#MOUSE 3 6.828 4.344
+#MOUSE 3 6.844 4.328
+#MOUSE 3 6.859 4.312
+#MOUSE 3 6.859 4.297
+#MOUSE 3 6.875 4.297
+#MOUSE 3 6.875 4.281
+#MOUSE 3 6.891 4.281
+#MOUSE 3 6.906 4.281
+#MOUSE 3 6.922 4.281
+#MOUSE 3 6.938 4.266
+#MOUSE 3 6.969 4.266
+#MOUSE 3 7.047 4.250
+#MOUSE 3 7.078 4.234
+#MOUSE 3 7.156 4.203
+#MOUSE 3 7.250 4.172
+#MOUSE 3 7.297 4.125
+#MOUSE 3 7.328 4.109
+#MOUSE 3 7.344 4.109
+#MOUSE 3 7.359 4.109
+#MOUSE 3 7.359 4.094
+#MOUSE 3 7.375 4.094
+#MOUSE 3 7.375 4.078
+#MOUSE 3 7.375 4.078
+#MOUSE 3 7.391 4.062
+#MOUSE 3 7.422 4.047
+#MOUSE 3 7.438 4.031
+#MOUSE 3 7.453 4.016
+#MOUSE 3 7.469 4.000
+#MOUSE 3 7.484 4.000
+#MOUSE 3 7.500 4.000
+#MOUSE 3 7.500 4.000
+#MOUSE 3 7.500 3.984
+#MOUSE 3 7.516 3.969
+#MOUSE 3 7.531 3.953
+#MOUSE 3 7.547 3.938
+#MOUSE 3 7.562 3.922
+#MOUSE 3 7.578 3.906
+#MOUSE 3 7.594 3.891
+#MOUSE 3 7.609 3.875
+#MOUSE 3 7.625 3.875
+#MOUSE 3 7.625 3.859
+#MOUSE 3 7.641 3.844
+#MOUSE 3 7.703 3.781
+#MOUSE 3 7.719 3.766
+#MOUSE 3 7.734 3.750
+#MOUSE 3 7.750 3.750
+#MOUSE 3 7.750 3.734
+#MOUSE 3 7.750 3.734
+#MOUSE 3 7.750 3.719
+#MOUSE 3 7.766 3.703
+#MOUSE 3 7.781 3.688
+#MOUSE 3 7.797 3.672
+#MOUSE 3 7.812 3.656
+#MOUSE 3 7.828 3.641
+#MOUSE 3 7.844 3.625
+#MOUSE 3 7.859 3.625
+#MOUSE 3 7.859 3.625
+#MOUSE 3 7.859 3.609
+#MOUSE 3 7.859 3.594
+#MOUSE 3 7.859 3.578
+#MOUSE 3 7.859 3.562
+#MOUSE 3 7.859 3.547
+#MOUSE 3 7.859 3.531
+#MOUSE 3 7.859 3.516
+#MOUSE 3 7.859 3.500
+#MOUSE 3 7.859 3.500
+#MOUSE 3 7.875 3.484
+#MOUSE 3 7.875 3.469
+#MOUSE 3 7.875 3.453
+#MOUSE 3 7.875 3.438
+#MOUSE 3 7.875 3.422
+#MOUSE 3 7.875 3.406
+#MOUSE 3 7.891 3.406
+#MOUSE 3 7.891 3.391
+#MOUSE 3 7.891 3.375
+#MOUSE 3 7.906 3.375
+#MOUSE 3 7.906 3.375
+#MOUSE 3 7.922 3.359
+#MOUSE 3 7.922 3.344
+#MOUSE 3 7.938 3.328
+#MOUSE 3 7.938 3.312
+#MOUSE 3 7.953 3.312
+#MOUSE 3 7.953 3.297
+#MOUSE 3 7.953 3.281
+#MOUSE 3 7.969 3.281
+#MOUSE 3 7.969 3.266
+#MOUSE 3 7.969 3.250
+#MOUSE 3 7.969 3.250
+#MOUSE 3 7.984 3.234
+#MOUSE 3 7.984 3.219
+#MOUSE 3 7.984 3.203
+#MOUSE 3 8.000 3.203
+#MOUSE 3 8.000 3.188
+#MOUSE 3 8.000 3.172
+#MOUSE 3 8.000 3.156
+#MOUSE 3 8.000 3.141
+#MOUSE 3 8.016 3.141
+#MOUSE 3 8.016 3.125
+#MOUSE 3 8.016 3.125
+#MOUSE 3 8.016 3.109
+#MOUSE 3 8.031 3.109
+#MOUSE 3 8.031 3.094
+#MOUSE 3 8.031 3.078
+#MOUSE 3 8.031 3.062
+#MOUSE 3 8.031 3.047
+#MOUSE 3 8.031 3.031
+KEYSTATE 2
+MOUSE 4 8.000 3.000
MESSAGE
_________________________________________
@@ -504,15 +517,15 @@ Notice that when we are in the correct position (on the 1/8" grid), the Marker l
END
STEP
MOUSE 3 2.325 6.050
-STEP
+BIGPAUSE
MOUSE 3 2.350 6.050
-STEP
+BIGPAUSE
MOUSE 3 2.375 6.050
-STEP
+BIGPAUSE
MOUSE 3 2.375 6.025
-STEP
+BIGPAUSE
MOUSE 4 2.375 6.000
-STEP
+BIGPAUSE
MOUSE 8200 2.375 6.000
HOTBARSELECT LED T1 Red LED
MOUSE 2 2.250 5.750
@@ -580,58 +593,66 @@ ORIG 2 0.000000 2.0000000
STEP
CLEAR
MESSAGE
+_________________________________________
+
Let's add signals to our siding.
The entrance to the siding will be protected by double headed signals.
+
+We'll select a signal from the HotBar and place it into position.
END
STEP
HOTBARSELECT Signals Dbl Signal 2
-MOUSE 3 2.953 7.344
+MOUSE 2 2.953 7.344
MOUSE 4 1.625 5.578
+MESSAGE
+
+We rotate the signals by Shift-Right-Click and select 90 CW on the popup menu. We can not show the popup menu in demo mode, but will simulate the effect.
+END
BIGPAUSE
+MENU 1.625 5.578 "Structure Rotate" "90 CW"
MOUSE 8200 1.625 5.578
MOUSE 2 9.859 6.641
-MOUSE 4 10.594 6.891
+MOUSE 4 10.250 6.375
+BIGPAUSE
+MENU 10.250 6.375 "Structure Rotate" "90 CCW"
BIGPAUSE
MOUSE 8200 10.594 6.891
-MESSAGE
-_________________________________________
-
-First turn off the Snap Grid.
-
-Rotate the signals and move them to the proper locations.
-
-We rotate the signals by Shift-Right-Click and select 90 CW on the popup menu. We can not show the popup menu in demo mode, but will simulate the effect.
-END
+#MESSAGE
+#_________________________________________
+#
+#First turn off the Snap Grid.
+#
+#END
STEP
-PARAMETER misc cmdGridEnable
+#PARAMETER misc cmdGridEnable
ORIG 1 0.000000 4.000000
-RESET
-MOUSE 2 1.641 5.453
-MOUSE 4 1.641 5.453
-MENU 1.641 5.453 "Move Draw Mode " "90 CW"
-KEYSTATE 2
-MOUSE 2 1.641 5.453
-KEYSTATE 2
-MOUSE 3 1.311 5.453
-KEYSTATE 2
-MOUSE 4 1.510 5.580
-BIGPAUSE
-MOUSE 6920 1.510 5.580
-STEP
-ORIG 1 8.000000 4.000000
-RESET
-MOUSE 2 10.641 6.781
-MOUSE 4 10.641 6.781
-MENU 10.641 6.781 "Move Draw Mode " "90 CCW"
-KEYSTATE 2
-MOUSE 2 10.641 6.781
-KEYSTATE 2
-MOUSE 3 10.341 6.781
-KEYSTATE 2
-MOUSE 4 10.510 6.405
-BIGPAUSE
-MOUSE 6920 10.510 6.405
+#RESET
+#MOUSE 2 1.641 5.453
+#MOUSE 4 1.641 5.453
+#MENU 1.641 5.453 "Structure Rotate" "90 CW"
+#KEYSTATE 2
+#MOUSE 2 1.641 5.453
+#KEYSTATE 2
+#MOUSE 3 1.311 5.453
+#KEYSTATE 2
+#MOUSE 4 1.510 5.580
+#BIGPAUSE
+#MOUSE 6920 1.510 5.580
+#STEP
+#ORIG 1 8.000000 4.000000
+##RESET
+#MOUSE 2 10.641 6.781
+#MOUSE 4 10.641 6.781
+#MENU 10.641 6.781 "Structure Rotate" "90 CCW"
+#KEYSTATE 2
+#MOUSE 2 10.641 6.781
+#KEYSTATE 2
+#MOUSE 3 10.341 6.781
+#KEYSTATE 2
+#MOUSE 4 10.510 6.405
+#BIGPAUSE
+#MOUSE 6920 10.510 6.405
STEP
MESSAGE
_________________________________________
@@ -644,40 +665,44 @@ HOTBARSELECT Signals Sgl Signal 1
MOUSE 3 3.250 6.375
MOUSE 4 3.250 6.375
BIGPAUSE
+MENU 3.250 6.375 "Structure Rotate" "90 CCW"
MOUSE 8200 3.250 6.375
MOUSE 2 3.250 5.375
MOUSE 4 3.250 5.375
BIGPAUSE
+MENU 3.250 5.375 "Structure Rotate" "90 CCW"
MOUSE 8200 3.250 5.375
-RESET
-MOUSE 2 3.250 6.375
-MOUSE 4 3.250 6.375
-MENU 3.250 6.375 "Move Draw Mode " "90 CCW"
-MOUSE 6920 3.250 6.375
-MOUSE 2 3.250 5.375
-MOUSE 4 3.250 5.375
-MENU 3.250 5.375 "Move Draw Mode " "90 CCW"
+#RESET
+#MOUSE 2 3.250 6.375
+#MOUSE 4 3.250 6.375
+#MENU 3.250 6.375 "Structure Rotate" "90 CCW"
+#MOUSE 6920 3.250 6.375
+#MOUSE 2 3.250 5.375
+#MOUSE 4 3.250 5.375
+#MENU 3.250 5.375 "Structure Rotate" "90 CCW"
MOUSE 6920 3.250 5.375
HOTBARSELECT Signals Sgl Signal 1
ORIG 1 8.000000 4.000000
MOUSE 2 8.750 5.625
MOUSE 4 8.750 5.625
BIGPAUSE
+MENU 8.750 5.625 "Structure Rotate" "90 CW"
MOUSE 8200 8.750 5.625
MOUSE 2 8.750 4.625
MOUSE 4 8.750 4.625
BIGPAUSE
+MENU 8.750 4.625 "Structure Rotate" "90 CW"
MOUSE 8200 8.750 4.625
#MOUSE 4 3.250 4.625
#MOUSE 8200 3.250 4.625
-RESET
-MOUSE 2 8.750 5.625
-MOUSE 4 8.750 5.625
-MENU 8.750 5.625 "Move Draw Mode " "90 CW"
-MOUSE 6920 8.750 5.625
-MOUSE 2 8.750 4.625
-MOUSE 4 8.750 4.625
-MENU 8.750 4.625 "Move Draw Mode " "90 CW"
+#RESET
+#MOUSE 2 8.750 5.625
+#MOUSE 4 8.750 5.625
+#MENU 8.750 5.625 "Structure Rotate" "90 CW"
+#MOUSE 6920 8.750 5.625
+#MOUSE 2 8.750 4.625
+#MOUSE 4 8.750 4.625
+#MENU 8.750 4.625 "Structure Rotate" "90 CW"
MOUSE 6920 8.750 4.625
RESET
ORIG 2 0.000000 2.000000
@@ -693,13 +718,13 @@ Note: Win95/Win98/WinME does not support drawing lines with flat end-caps, but o
Users on those platforms will not see the gap.
END
STEP
-ORIG 0.500 2.000 4.000
+ORIG 1 2.000 4.000
HOTBARSELECT Symbols " DOT
MOUSE 2 3.000 5.000
MOUSE 4 3.000 5.000
BIGPAUSE
MOUSE 8200 3.000 5.000
-ORIG 0.5 8.000 4.000
+ORIG 1 8.000 4.000
HOTBARSELECT Symbols " DOT
MOUSE 2 9.000 5.000
MOUSE 4 9.000 5.000
@@ -710,6 +735,8 @@ MESSAGE
_________________________________________
Add an arrow head to indicate the tracks that connect to the rest of the layout.
+
+The second arrow will be flipped 180"
END
STEP
HOTBARSELECT Symbols Arrow
@@ -718,28 +745,30 @@ MOUSE 4 11.000 5.750
BIGPAUSE
MOUSE 8200 11.000 5.750
MOUSE 2 0.500 5.750
-MOUSE 4 0.500 5.750
+MOUSE 4 1.000 6.000
+BIGPAUSE
+MENU 1.000 6.250 "Structure Rotate" "180 "
BIGPAUSE
MOUSE 8200 0.500 5.750
-RESET
+#RESET
MOUSE 6920 0.500 6.000
-MESSAGE
-_________________________________________
-
-Rotate the arrow head by 180 and move into position.
-END
-MOUSE 2 0.500 6.000
-MOUSE 4 0.500 6.000
-BIGPAUSE
-MENU 0.500 6.000 "Move Draw Mode " "180"
-KEYSTATE 2
-MOUSE 2 0.500 6.000
-KEYSTATE 2
-MOUSE 3 1.500 6.000
-KEYSTATE 2
-MOUSE 4 1.000 6.000
-BIGPAUSE
-MOUSE 6920 1.000 6.000
+#MESSAGE
+#_________________________________________
+#
+#Rotate the arrow head by 180 and move into position.
+#END
+#MOUSE 2 0.500 6.000
+#MOUSE 4 0.500 6.000
+#BIGPAUSE
+#MENU 0.500 6.000 "Structure Rotate" "180"
+#KEYSTATE 2
+#MOUSE 2 0.500 6.000
+#KEYSTATE 2
+#MOUSE 3 1.500 6.000
+#KEYSTATE 2
+#MOUSE 4 1.000 6.000
+#BIGPAUSE
+#MOUSE 6920 1.000 6.000
MESSAGE
_________________________________________
@@ -747,9 +776,10 @@ And add some labels.
END
STEP
COMMAND Text
-PARAMETER text fontsize 0 18
+PARAMETER text Fontsize 0 18
PARAMETER GROUP text
-PARAMETER text fontsize -1 48
+PARAMETER text Fontsize -1 48
+PARAMETER text Color 0
MOUSE 2 4.500 6.969
MOUSE 4 4.391 6.672
KEYSTATE 2
@@ -762,9 +792,9 @@ MOUSE 29704 4.391 6.672
MOUSE 2 4.500 6.656
MOUSE 4 4.812 6.625
MOUSE 3336 5.156 6.766
-PARAMETER text fontsize -1 48
-PARAMETER text fontsize 11 24
-PARAMETER text fontsize -1 24
+PARAMETER text Fontsize -1 48
+PARAMETER text Fontsize 11 24
+PARAMETER text Fontsize -1 24
MOUSE 2 0.500 5.016
MOUSE 4 0.641 5.016
KEYSTATE 2
@@ -776,7 +806,7 @@ MOUSE 29704 1.312 5.016
MOUSE 27656 1.312 5.016
MOUSE 25864 1.312 5.016
MOUSE 3336 3.031 3.859
-PARAMETER text fontsize -1 24
+PARAMETER text Fontsize -1 24
PARAMETER GROUP text
MOUSE 2 10.375 5.047
MOUSE 4 10.125 5.047
@@ -795,7 +825,7 @@ MOUSE 28424 10.125 5.047
MOUSE 2 10.094 5.125
MOUSE 4 9.891 5.000
MOUSE 3336 9.906 5.031
-PARAMETER text fontsize -1 24
+PARAMETER text Fontsize -1 24
PARAMETER GROUP text
CLEAR
MESSAGE
@@ -810,7 +840,7 @@ PARAMETER misc cmdGridEnable
MESSAGE
_________________________________________
-Lets move the spur track the left 3/4"
+Lets move the spur track to the left 3/4"
END
STEP
ORIG 1 5.000 4.000
@@ -839,11 +869,11 @@ MOUSE 2 7.500 6.641
MOUSE 4 11.625 4.047
BIGPAUSE
KEYSTATE 2
-MOUSE 2 8.875 4.422
+MOUSE 2 9.5 5.5
KEYSTATE 2
-MOUSE 3 8.875 4.422
+MOUSE 3 9.5 5.5
KEYSTATE 2
-MOUSE 4 7.531 4.391
+MOUSE 4 8.25 5.5
RESET
BIGPAUSE
MOUSE 6920 7.562 4.531
@@ -857,11 +887,17 @@ END
STEP
COMMAND Modify
MOUSE 2 10.984 6.047
+MOUSE 4 10.984 6.047
+MOUSE 2 10.984 6.047
BIGPAUSE
-MOUSE 4 9.672 6.000
-MOUSE 2 9.000 4.906
+MOUSE 4 9.772 6.000
+MOUSE 8200 9.672 6.000
+MOUSE 2 8.900 5.000
+MOUSE 4 8.900 5.000
+MOUSE 2 8.900 5.000
BIGPAUSE
-MOUSE 4 7.766 5.031
+MOUSE 4 7.666 5.000
+MOUSE 8200 7.666 5.000
ORIG 2 0.000 2.000
MESSAGE
_________________________________________
@@ -887,5 +923,213 @@ The cross-hairs on the LEDs and switch show the centers for drilling.
=========================================
END
+REGRESSION START 10 - control panel
+DRAW 18 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 0 0.333333 1.000000 6.000000 0 9.772000 6.000000 0
+ END
+DRAW 19 0 0 0 0 -1.250000 0.000000 0 0.000000
+ L3 0 0.333333 10.000000 6.000000 0 9.000000 5.000000 0
+ END
+DRAW 20 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 0 0.333333 7.666000 5.000000 0 3.000000 5.000000 0
+ END
+DRAW 21 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 0 0.333333 3.000000 5.000000 0 2.000000 6.000000 0
+ END
+DRAW 22 0 0 0 0 -0.813000 0.000000 0 0.000000
+ L3 0 0.333333 6.000000 5.000000 0 8.000000 3.000000 0
+ END
+STRUCTURE 23 0 0 0 0 DEMO 2 2.375000 6.000000 0 0.000000 "LED T1 Green LED "
+ D 0.000000 0.000000
+ G3 16448250 0.000000 0.059000 0.000000 0.000000 0
+ A3 65280 0.013889 0.059000 0.000000 0.000000 0 0.000000 360.000000
+ L3 0 0.000000 0.059000 0.000000 0 -0.059000 0.000000 0
+ L3 0 0.000000 0.000000 0.059000 0 0.000000 -0.059000 0
+ END
+STRUCTURE 24 0 0 0 0 DEMO 2 2.250000 5.750000 0 0.000000 "LED T1 Red LED "
+ D 0.000000 0.000000
+ G3 16448250 0.000000 0.059000 0.000000 0.000000 0
+ A3 16711680 0.013889 0.059000 0.000000 0.000000 0 0.000000 360.000000
+ L3 0 0.000000 0.059000 0.000000 0 -0.059000 0.000000 0
+ L3 0 0.000000 0.000000 0.059000 0 0.000000 -0.059000 0
+ END
+STRUCTURE 25 0 0 0 0 DEMO 2 8.375000 6.000000 0 0.000000 "LED T1 Green LED "
+ D 0.000000 0.000000
+ G3 16448250 0.000000 0.059000 0.000000 0.000000 0
+ A3 65280 0.013889 0.059000 0.000000 0.000000 0 0.000000 360.000000
+ L3 0 0.000000 0.059000 0.000000 0 -0.059000 0.000000 0
+ L3 0 0.000000 0.000000 0.059000 0 0.000000 -0.059000 0
+ END
+STRUCTURE 26 0 0 0 0 DEMO 2 8.500000 5.750000 0 0.000000 "LED T1 Red LED "
+ D 0.000000 0.000000
+ G3 16448250 0.000000 0.059000 0.000000 0.000000 0
+ A3 16711680 0.013889 0.059000 0.000000 0.000000 0 0.000000 360.000000
+ L3 0 0.000000 0.059000 0.000000 0 -0.059000 0.000000 0
+ L3 0 0.000000 0.000000 0.059000 0 0.000000 -0.059000 0
+ END
+STRUCTURE 27 0 0 0 0 DEMO 2 5.562000 5.000000 0 0.000000 "LED T1 Green LED "
+ D 0.000000 0.000000
+ G3 16448250 0.000000 0.059000 0.000000 0.000000 0
+ A3 65280 0.013889 0.059000 0.000000 0.000000 0 0.000000 360.000000
+ L3 0 0.000000 0.059000 0.000000 0 -0.059000 0.000000 0
+ L3 0 0.000000 0.000000 0.059000 0 0.000000 -0.059000 0
+ END
+STRUCTURE 28 0 0 0 0 DEMO 2 5.437000 4.750000 0 0.000000 "LED T1 Red LED "
+ D 0.000000 0.000000
+ G3 16448250 0.000000 0.059000 0.000000 0.000000 0
+ A3 16711680 0.013889 0.059000 0.000000 0.000000 0 0.000000 360.000000
+ L3 0 0.000000 0.059000 0.000000 0 -0.059000 0.000000 0
+ L3 0 0.000000 0.000000 0.059000 0 0.000000 -0.059000 0
+ END
+STRUCTURE 29 0 0 0 0 DEMO 2 2.750000 6.000000 0 0.000000 "Switch "" Push Button "
+ D 0.000000 0.000000
+ G3 16448250 0.000000 0.125000 0.000000 0.000000 0
+ A3 0 0.013889 0.125000 0.000000 0.000000 0 0.000000 360.000000
+ A3 0 0.013889 0.050000 0.000000 0.000000 0 0.000000 360.000000
+ L3 0 0.000000 0.125000 0.000000 0 -0.125000 0.000000 0
+ L3 0 0.000000 0.000000 0.125000 0 0.000000 -0.125000 0
+ END
+STRUCTURE 30 0 0 0 0 DEMO 2 2.500000 5.500000 0 0.000000 "Switch "" Push Button "
+ D 0.000000 0.000000
+ G3 16448250 0.000000 0.125000 0.000000 0.000000 0
+ A3 0 0.013889 0.125000 0.000000 0.000000 0 0.000000 360.000000
+ A3 0 0.013889 0.050000 0.000000 0.000000 0 0.000000 360.000000
+ L3 0 0.000000 0.125000 0.000000 0 -0.125000 0.000000 0
+ L3 0 0.000000 0.000000 0.125000 0 0.000000 -0.125000 0
+ END
+STRUCTURE 31 0 0 0 0 DEMO 2 8.000000 6.000000 0 0.000000 "Switch "" Push Button "
+ D 0.000000 0.000000
+ G3 16448250 0.000000 0.125000 0.000000 0.000000 0
+ A3 0 0.013889 0.125000 0.000000 0.000000 0 0.000000 360.000000
+ A3 0 0.013889 0.050000 0.000000 0.000000 0 0.000000 360.000000
+ L3 0 0.000000 0.125000 0.000000 0 -0.125000 0.000000 0
+ L3 0 0.000000 0.000000 0.125000 0 0.000000 -0.125000 0
+ END
+STRUCTURE 32 0 0 0 0 DEMO 2 8.250000 5.500000 0 0.000000 "Switch "" Push Button "
+ D 0.000000 0.000000
+ G3 16448250 0.000000 0.125000 0.000000 0.000000 0
+ A3 0 0.013889 0.125000 0.000000 0.000000 0 0.000000 360.000000
+ A3 0 0.013889 0.050000 0.000000 0.000000 0 0.000000 360.000000
+ L3 0 0.000000 0.125000 0.000000 0 -0.125000 0.000000 0
+ L3 0 0.000000 0.000000 0.125000 0 0.000000 -0.125000 0
+ END
+STRUCTURE 33 0 0 0 0 DEMO 2 5.937000 5.000000 0 0.000000 "Switch "" Push Button "
+ D 0.000000 0.000000
+ G3 16448250 0.000000 0.125000 0.000000 0.000000 0
+ A3 0 0.013889 0.125000 0.000000 0.000000 0 0.000000 360.000000
+ A3 0 0.013889 0.050000 0.000000 0.000000 0 0.000000 360.000000
+ L3 0 0.000000 0.125000 0.000000 0 -0.125000 0.000000 0
+ L3 0 0.000000 0.000000 0.125000 0 0.000000 -0.125000 0
+ END
+STRUCTURE 34 0 0 0 0 DEMO 2 5.687000 4.500000 0 0.000000 "Switch "" Push Button "
+ D 0.000000 0.000000
+ G3 16448250 0.000000 0.125000 0.000000 0.000000 0
+ A3 0 0.013889 0.125000 0.000000 0.000000 0 0.000000 360.000000
+ A3 0 0.013889 0.050000 0.000000 0.000000 0 0.000000 360.000000
+ L3 0 0.000000 0.125000 0.000000 0 -0.125000 0.000000 0
+ L3 0 0.000000 0.000000 0.125000 0 0.000000 -0.125000 0
+ END
+STRUCTURE 35 0 0 0 0 DEMO 2 1.625000 5.578000 0 90.000000 "Signals Dbl Signal 2"
+ D 0.000000 0.000000
+ G3 16448250 0.000000 0.062500 0.000000 0.000000 0
+ A3 0 0.013889 0.062500 0.000000 0.000000 0 0.000000 360.000000
+ L3 0 0.000000 0.062500 0.000000 0 -0.062500 0.000000 0
+ L3 0 0.000000 0.000000 0.062500 0 0.000000 -0.062500 0
+ G3 16448250 0.000000 0.062500 0.000000 -0.220000 0
+ A3 0 0.013889 0.062500 0.000000 -0.220000 0 0.000000 360.000000
+ L3 0 0.000000 0.062500 -0.220000 0 -0.062500 -0.220000 0
+ L3 0 0.000000 0.000000 -0.282500 0 0.000000 -0.157500 0
+ A3 0 0.027778 0.109375 0.000000 0.000000 0 0.000000 360.000000
+ A3 0 0.027778 0.109375 0.000000 -0.220000 0 0.000000 360.000000
+ L3 0 0.027778 0.000000 -0.320000 0 0.000000 -0.600000 0
+ L3 0 0.027778 -0.100000 -0.600000 0 0.100000 -0.600000 0
+ END
+STRUCTURE 36 0 0 0 0 DEMO 2 9.000000 6.375000 0 270.000000 "Signals Dbl Signal 2"
+ D 0.000000 0.000000
+ G3 16448250 0.000000 0.062500 0.000000 0.000000 0
+ A3 0 0.013889 0.062500 0.000000 0.000000 0 0.000000 360.000000
+ L3 0 0.000000 0.062500 0.000000 0 -0.062500 0.000000 0
+ L3 0 0.000000 0.000000 0.062500 0 0.000000 -0.062500 0
+ G3 16448250 0.000000 0.062500 0.000000 -0.220000 0
+ A3 0 0.013889 0.062500 0.000000 -0.220000 0 0.000000 360.000000
+ L3 0 0.000000 0.062500 -0.220000 0 -0.062500 -0.220000 0
+ L3 0 0.000000 0.000000 -0.282500 0 0.000000 -0.157500 0
+ A3 0 0.027778 0.109375 0.000000 0.000000 0 0.000000 360.000000
+ A3 0 0.027778 0.109375 0.000000 -0.220000 0 0.000000 360.000000
+ L3 0 0.027778 0.000000 -0.320000 0 0.000000 -0.600000 0
+ L3 0 0.027778 -0.100000 -0.600000 0 0.100000 -0.600000 0
+ END
+STRUCTURE 37 0 0 0 0 DEMO 2 3.250000 6.375000 0 270.000000 "Signals Sgl Signal 1"
+ D 0.000000 0.000000
+ G3 16448250 0.000000 0.062500 0.000000 0.000000 0
+ L3 0 0.000000 0.062500 0.000000 0 -0.062500 0.000000 0
+ L3 0 0.000000 0.000000 0.062500 0 0.000000 -0.062500 0
+ A3 0 0.013889 0.062500 0.000000 0.000000 0 0.000000 360.000000
+ A3 0 0.027778 0.109375 0.000000 0.000000 0 0.000000 360.000000
+ L3 0 0.027778 0.000000 -0.109375 0 0.000000 -0.600000 0
+ L3 0 0.027778 -0.100000 -0.600000 0 0.100000 -0.600000 0
+ END
+STRUCTURE 38 0 0 0 0 DEMO 2 3.250000 5.375000 0 270.000000 "Signals Sgl Signal 1"
+ D 0.000000 0.000000
+ G3 16448250 0.000000 0.062500 0.000000 0.000000 0
+ L3 0 0.000000 0.062500 0.000000 0 -0.062500 0.000000 0
+ L3 0 0.000000 0.000000 0.062500 0 0.000000 -0.062500 0
+ A3 0 0.013889 0.062500 0.000000 0.000000 0 0.000000 360.000000
+ A3 0 0.027778 0.109375 0.000000 0.000000 0 0.000000 360.000000
+ L3 0 0.027778 0.000000 -0.109375 0 0.000000 -0.600000 0
+ L3 0 0.027778 -0.100000 -0.600000 0 0.100000 -0.600000 0
+ END
+STRUCTURE 39 0 0 0 0 DEMO 2 7.500000 5.625000 0 90.000000 "Signals Sgl Signal 1"
+ D 0.000000 0.000000
+ G3 16448250 0.000000 0.062500 0.000000 0.000000 0
+ L3 0 0.000000 0.062500 0.000000 0 -0.062500 0.000000 0
+ L3 0 0.000000 0.000000 0.062500 0 0.000000 -0.062500 0
+ A3 0 0.013889 0.062500 0.000000 0.000000 0 0.000000 360.000000
+ A3 0 0.027778 0.109375 0.000000 0.000000 0 0.000000 360.000000
+ L3 0 0.027778 0.000000 -0.109375 0 0.000000 -0.600000 0
+ L3 0 0.027778 -0.100000 -0.600000 0 0.100000 -0.600000 0
+ END
+STRUCTURE 40 0 0 0 0 DEMO 2 7.500000 4.625000 0 90.000000 "Signals Sgl Signal 1"
+ D 0.000000 0.000000
+ G3 16448250 0.000000 0.062500 0.000000 0.000000 0
+ L3 0 0.000000 0.062500 0.000000 0 -0.062500 0.000000 0
+ L3 0 0.000000 0.000000 0.062500 0 0.000000 -0.062500 0
+ A3 0 0.013889 0.062500 0.000000 0.000000 0 0.000000 360.000000
+ A3 0 0.027778 0.109375 0.000000 0.000000 0 0.000000 360.000000
+ L3 0 0.027778 0.000000 -0.109375 0 0.000000 -0.600000 0
+ L3 0 0.027778 -0.100000 -0.600000 0 0.100000 -0.600000 0
+ END
+STRUCTURE 41 0 0 0 0 DEMO 2 3.000000 5.000000 0 0.000000 "Symbols "" DOT "
+ D 0.000000 0.000000
+ G3 0 0.000000 0.125000 0.000000 0.000000 0
+ END
+STRUCTURE 42 0 0 0 0 DEMO 2 7.750000 5.000000 0 0.000000 "Symbols "" DOT "
+ D 0.000000 0.000000
+ G3 0 0.000000 0.125000 0.000000 0.000000 0
+ END
+STRUCTURE 43 0 0 0 0 DEMO 2 9.750000 5.750000 0 0.000000 "Symbols Arrow "
+ D 0.000000 0.000000
+ F4 0 0.000000 3 0
+ 0.000000 0.503906 0
+ 0.000000 0.000000 0
+ 0.378906 0.250000 0
+ END
+STRUCTURE 44 0 0 0 0 DEMO 2 1.000000 6.250000 0 180.000000 "Symbols Arrow "
+ D 0.000000 0.000000
+ F4 0 0.000000 3 0
+ 0.000000 0.503906 0
+ 0.000000 0.000000 0
+ 0.378906 0.250000 0
+ END
+DRAW 45 0 0 0 0 3.937000 6.625000 0 0.000000
+ Z 0 0.000000 0.000000 0.000000 0 48.000000 "Summit"
+ END
+DRAW 46 0 0 0 0 0.641000 5.016000 0 0.000000
+ Z 0 0.000000 0.000000 0.000000 0 24.000000 "Seattle"
+ END
+DRAW 47 0 0 0 0 8.641000 5.000000 0 0.000000
+ Z 0 0.000000 0.000000 0.000000 0 24.000000 "Chicago"
+ END
+REGRESSION END
STEP
CLEAR
diff --git a/app/lib/demos/dmdelund.xtr b/app/lib/demos/dmdelund.xtr
index f3c153c..5215c06 100644
--- a/app/lib/demos/dmdelund.xtr
+++ b/app/lib/demos/dmdelund.xtr
@@ -39,7 +39,9 @@ STEP
COMMAND Select
MOUSE 2 6.417 1.833
MOUSE 4 6.417 1.833
+KEYSTATE 4
MOUSE 2 11.833 2.083
+KEYSTATE 4
MOUSE 4 11.833 2.083
PARAMETER misc cmdDelete
MESSAGE
@@ -71,10 +73,18 @@ Note, only tracks within the selected area are deleted. Since the easement curv
END
STEP
MOUSE 2 3.167 3.333
+#MOUSE 3 3.167 3.333
+#MOUSE 3 22.083 0.667
MOUSE 4 22.083 0.667
PARAMETER misc cmdDelete
MESSAGE
=========================================
END
STEP
+REGRESSION START 10 - delete
+CURVE 2 0 0 0 0 DEMO 2 21.833333 25.924310 0 24.125000 0 0.000000 0.000000
+ E4 40.128499 10.198454 40.681260 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 23.852360 1.883945 265.199288 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
CLEAR
diff --git a/app/lib/demos/dmdialog.xtr b/app/lib/demos/dmdialog.xtr
index 308428b..02b2bd2 100644
--- a/app/lib/demos/dmdialog.xtr
+++ b/app/lib/demos/dmdialog.xtr
@@ -14,13 +14,26 @@ MESSAGE
_________________________________________
Here we are going to make some changes to the Display dialog. Notice how this is simulated.
+First we are setting 'Draw Tunnel' to 'Normal'
END
STEP
PARAMETER display tunnels 2
+MESSAGE
+Now we're changing 'Label Font Size' to '56'
+END
+STEP
PARAMETER display description-fontsize 56
+MESSAGE
+We'll change some other options
+END
+STEP
+PAUSE 500
PARAMETER display layoutlabels 4
+PAUSE 500
PARAMETER display layoutlabels 0
+PAUSE 500
PARAMETER display mapscale 50
+PAUSE 500
PARAMETER display carhotbarlabels 4 Manuf/Proto
MESSAGE
_________________________________________
diff --git a/app/lib/demos/dmdimlin.xtr b/app/lib/demos/dmdimlin.xtr
index 9668b95..904fffb 100644
--- a/app/lib/demos/dmdimlin.xtr
+++ b/app/lib/demos/dmdimlin.xtr
@@ -3,8 +3,8 @@
VERSION 10
DEMOINIT
ORIG 1.000 12.000 5.000
-PARAMETER display description-fontsize 64
-STRUCTURE 1 0 0 0 0 N 2 6.210395 3.915802 0 236.697715 "Walthers Interstate Fuel - Loading Rack 933-32000a"
+PARAMETER display description-fontsize 16
+STRUCTURE 1 0 0 0 0 DEMO 2 6.210395 3.915802 0 236.697715 "Walthers Interstate Fuel - Loading Rack 933-32000a"
D 0.000000 0.000000
L3 0 0.000000 0.750000 0.000000 0 3.750000 0.000000 0
L3 0 0.000000 3.750000 0.000000 0 3.750000 3.125000 0
@@ -34,11 +34,11 @@ STRUCTURE 1 0 0 0 0 N 2 6.210395 3.915802 0 236.697715 "Walthers Interstate Fuel
L3 0 0.000000 0.750000 3.125000 0 0.750000 2.187500 0
L3 0 0.000000 0.750000 0.000000 0 0.750000 0.937500 0
END
-STRAIGHT 2 0 0 0 0 N 2
+STRAIGHT 2 0 0 0 0 DEMO 2
E 0.105826 -1.346082 236.697715
T 5 3.511000 0.890894 56.697715
END
-STRUCTURE 3 0 0 0 0 N 2 15.697638 4.710368 0 326.697715 "Walthers Shady Jct Water Tower 933-3205a"
+STRUCTURE 3 0 0 0 0 DEMO 2 15.697638 4.710368 0 326.697715 "Walthers Shady Jct Water Tower 933-3205a"
D 0.000000 0.000000
L3 0 0.000000 0.000000 0.000000 0 1.562500 0.000000 0
L3 0 0.000000 1.562500 0.000000 0 1.562500 1.562500 0
@@ -66,11 +66,11 @@ STRUCTURE 3 0 0 0 0 N 2 15.697638 4.710368 0 326.697715 "Walthers Shady Jct Wate
L3 0 0.000000 1.750000 1.500000 0 1.750000 1.062500 0
L3 0 0.000000 1.750000 1.062500 0 1.250000 1.062500 0
END
-STRAIGHT 4 0 0 0 0 N 2
+STRAIGHT 4 0 0 0 0 DEMO 2
E 22.026067 13.054077 56.697715
T 5 8.028421 3.858543 236.697715
END
-TURNOUT 5 0 0 0 0 N 2 3.511000 0.890894 0 326.697715 "Peco-55 Medium Right SL-E395F"
+TURNOUT 5 0 0 0 0 DEMO 2 3.511000 0.890894 0 326.697715 "Peco-55 Medium Right SL-E395F"
T 2 3.511000 0.890894 236.697715
T 4 8.028421 3.858543 56.697715
T 8 8.285775 3.403046 66.383715
@@ -82,19 +82,19 @@ TURNOUT 5 0 0 0 0 N 2 3.511000 0.890894 0 326.697715 "Peco-55 Medium Right SL-E
C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
END
-STRAIGHT 6 0 0 0 0 N 2
+STRAIGHT 6 0 0 0 0 DEMO 2
E 22.690715 11.995108 56.697715
T 7 13.433501 5.913726 236.697715
END
-CURVE 7 0 0 0 0 N 2 4.259807 19.878127 0 16.708116 0 0.000000 0.000000
+CURVE 7 0 0 0 0 DEMO 2 4.259807 19.878127 0 16.708116 0 0.000000 0.000000
T 6 13.433501 5.913726 56.697715
T 8 10.953237 4.569334 246.383715
END
-STRAIGHT 8 0 0 0 0 N 2
+STRAIGHT 8 0 0 0 0 DEMO 2
T 5 8.285775 3.403046 246.383715
T 7 10.953237 4.569334 66.383715
END
-STRUCTURE 9 0 0 0 0 N 2 16.897495 6.987885 0 326.697715 "Walthers 2-Stall Engine House 933-3204"
+STRUCTURE 9 0 0 0 0 DEMO 2 16.897495 6.987885 0 326.697715 "Walthers 2-Stall Engine House 933-3204"
D 0.000000 0.000000
L3 0 0.000000 0.000000 0.000000 0 7.625000 0.000000 0
L3 0 0.000000 7.625000 0.000000 0 7.625000 3.250000 0
@@ -135,7 +135,7 @@ _________________________________________
We might also want to measure the distance between two structures. In this case we will use a larger dimension line.
END
STEP
-PARAMETER draw arrowsize 2 Medium
+PARAMETER draw arrowsize 2 Small
MOUSE 2 15.000 9.688
MOUSE 4 6.375 4.000
#PARAMETER draw arrowsize 2 Medium
@@ -161,5 +161,121 @@ RESET
MESSAGE
=========================================
END
+REGRESSION START 10 - dimension lines
+STRUCTURE 1 0 0 0 0 DEMO 2 6.210395 3.915802 0 236.697715 "Walthers Interstate Fuel - Loading Rack 933-32000a"
+ D 0.000000 0.000000
+ L3 0 0.000000 0.750000 0.000000 0 3.750000 0.000000 0
+ L3 0 0.000000 3.750000 0.000000 0 3.750000 3.125000 0
+ L3 0 0.000000 3.750000 3.125000 0 0.750000 3.125000 0
+ L3 0 0.000000 3.687500 0.062500 0 1.687500 0.062500 0
+ L3 0 0.000000 1.687500 0.062500 0 1.687500 0.812500 0
+ L3 0 0.000000 1.687500 0.812500 0 3.687500 0.812500 0
+ L3 0 0.000000 3.687500 0.812500 0 3.687500 0.062500 0
+ L3 0 0.000000 3.687500 3.062500 0 1.687500 3.062500 0
+ L3 0 0.000000 1.687500 3.062500 0 1.687500 2.312500 0
+ L3 0 0.000000 1.687500 2.312500 0 3.687500 2.312500 0
+ L3 0 0.000000 3.687500 2.312500 0 3.687500 3.062500 0
+ L3 0 0.000000 3.687500 1.187500 0 1.687500 1.187500 0
+ L3 0 0.000000 1.687500 1.187500 0 1.687500 1.937500 0
+ L3 0 0.000000 1.687500 1.937500 0 3.687500 1.937500 0
+ L3 0 0.000000 3.687500 1.937500 0 3.687500 1.187500 0
+ A3 0 0.000000 0.088388 3.000000 2.687500 0 0.000000 360.000000
+ A3 0 0.000000 0.088388 3.000000 1.562500 0 0.000000 360.000000
+ A3 0 0.000000 0.088388 3.000000 0.437500 0 0.000000 360.000000
+ L3 0 0.000000 0.750000 2.875000 0 0.000000 2.875000 0
+ L3 0 0.000000 0.000000 2.875000 0 0.000000 0.250000 0
+ L3 0 0.000000 0.000000 0.250000 0 0.750000 0.250000 0
+ L3 0 0.000000 1.500000 2.187500 0 0.437500 2.187500 0
+ L3 0 0.000000 0.437500 2.187500 0 0.437500 0.937500 0
+ L3 0 0.000000 0.437500 0.937500 0 1.500000 0.937500 0
+ L3 0 0.000000 1.500000 0.937500 0 1.500000 2.187500 0
+ L3 0 0.000000 0.750000 3.125000 0 0.750000 2.187500 0
+ L3 0 0.000000 0.750000 0.000000 0 0.750000 0.937500 0
+ END
+STRAIGHT 2 0 0 0 0 DEMO 2
+ E4 0.105826 -1.346082 236.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 3.511000 0.890894 56.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRUCTURE 3 0 0 0 0 DEMO 2 15.697638 4.710368 0 326.697715 "Walthers Shady Jct Water Tower 933-3205a"
+ D 0.000000 0.000000
+ L3 0 0.000000 0.000000 0.000000 0 1.562500 0.000000 0
+ L3 0 0.000000 1.562500 0.000000 0 1.562500 1.562500 0
+ L3 0 0.000000 1.562500 1.562500 0 0.000000 1.562500 0
+ L3 0 0.000000 0.000000 1.562500 0 0.000000 0.000000 0
+ L3 0 0.000000 0.000000 0.375000 0 1.250000 0.375000 0
+ L3 0 0.000000 1.250000 0.375000 0 1.250000 1.562500 0
+ L3 0 0.000000 0.625000 1.000000 0 0.625000 0.375000 0
+ L3 0 0.000000 0.625000 1.000000 0 1.250000 1.000000 0
+ L3 0 0.000000 0.625000 1.000000 0 0.000000 1.000000 0
+ L3 0 0.000000 0.625000 1.000000 0 0.625000 1.562500 0
+ L3 0 0.000000 0.625000 1.000000 0 1.062500 1.437500 0
+ L3 0 0.000000 0.625000 1.000000 0 1.062500 0.562500 0
+ L3 0 0.000000 0.625000 1.000000 0 0.187500 0.562500 0
+ L3 0 0.000000 0.625000 1.000000 0 0.187500 1.437500 0
+ L3 0 0.000000 0.625000 1.562500 0 1.062500 1.437500 0
+ L3 0 0.000000 1.062500 1.437500 0 1.250000 1.000000 0
+ L3 0 0.000000 1.250000 1.000000 0 1.062500 0.562500 0
+ L3 0 0.000000 1.062500 0.562500 0 0.625000 0.375000 0
+ L3 0 0.000000 0.625000 0.375000 0 0.187500 0.562500 0
+ L3 0 0.000000 0.187500 0.562500 0 0.000000 1.000000 0
+ L3 0 0.000000 0.000000 1.000000 0 0.187500 1.437500 0
+ L3 0 0.000000 0.187500 1.437500 0 0.625000 1.562500 0
+ L3 0 0.000000 1.250000 1.500000 0 1.750000 1.500000 0
+ L3 0 0.000000 1.750000 1.500000 0 1.750000 1.062500 0
+ L3 0 0.000000 1.750000 1.062500 0 1.250000 1.062500 0
+ END
+STRAIGHT 4 0 0 0 0 DEMO 2
+ E4 22.026067 13.054077 56.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 8.028421 3.858543 236.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 5 0 0 0 0 DEMO 2 3.511000 0.890894 0 326.697715 "Peco-55 Medium Right SL-E395F"
+ T4 2 3.511000 0.890894 236.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 8.028421 3.858543 56.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 8 8.285775 3.403046 66.383715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
+ S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
+ END
+STRAIGHT 6 0 0 0 0 DEMO 2
+ E4 22.690715 11.995108 56.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 7 13.433501 5.913726 236.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 7 0 0 0 0 DEMO 2 4.259807 19.878127 0 16.708116 0 0.000000 0.000000
+ T4 6 13.433501 5.913726 56.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 8 10.953237 4.569334 246.383715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 8 0 0 0 0 DEMO 2
+ T4 5 8.285775 3.403046 246.383715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 7 10.953237 4.569334 66.383715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRUCTURE 9 0 0 0 0 DEMO 2 16.897495 6.987885 0 326.697715 "Walthers 2-Stall Engine House 933-3204"
+ D 0.000000 0.000000
+ L3 0 0.000000 0.000000 0.000000 0 7.625000 0.000000 0
+ L3 0 0.000000 7.625000 0.000000 0 7.625000 3.250000 0
+ L3 0 0.000000 7.625000 3.250000 0 0.000000 3.250000 0
+ L3 0 0.000000 0.000000 3.250000 0 0.000000 0.000000 0
+ L3 0 0.000000 0.000000 1.625000 0 7.625000 1.625000 0
+ L3 0 0.000000 0.000000 2.000000 0 7.625000 2.000000 0
+ L3 0 0.000000 0.000000 1.250000 0 7.625000 1.250000 0
+ A3 0 0.000000 0.225347 6.625000 0.875000 0 0.000000 360.000000
+ A3 0 0.000000 0.139754 6.625000 0.875000 0 0.000000 360.000000
+ A3 0 0.000000 0.225347 1.000000 0.875000 0 0.000000 360.000000
+ A3 0 0.000000 0.139754 1.000000 0.875000 0 0.000000 360.000000
+ A3 0 0.000000 0.225347 1.000000 2.375000 0 0.000000 360.000000
+ A3 0 0.000000 0.139754 1.000000 2.375000 0 0.000000 360.000000
+ A3 0 0.000000 0.225347 6.625000 2.375000 0 0.000000 360.000000
+ A3 0 0.000000 0.139754 6.625000 2.375000 0 0.000000 360.000000
+ END
+DRAW 10 0 0 0 0 0.000000 0.000000 0 0.000000
+ M3 0 0.055556 13.953000 7.766000 0 14.686233 6.736689 0 0
+ END
+DRAW 11 0 0 0 0 0.000000 0.000000 0 0.000000
+ M3 0 0.055556 15.113063 9.704188 0 6.001449 3.778538 0 1
+ END
+REGRESSION END
STEP
CLEAR
diff --git a/app/lib/demos/dmease.xtr b/app/lib/demos/dmease.xtr
index 0e8e406..aa55ee1 100644
--- a/app/lib/demos/dmease.xtr
+++ b/app/lib/demos/dmease.xtr
@@ -12,10 +12,128 @@ STRAIGHT 2 DEMO 1
REDRAW
RESET
MESSAGE
+_____________________________________
+
This example will show the effect of using easements while joining tracks.
-First, we'll enable easements.
+First, we will enable Cornu Easements and select Join
+END
+STEP
+PARAMETER misc cmdEasement
+PARAMETER easement val -1.0
+BIGPAUSE
+PARAMETER easement ok
+COMMAND JoinTrack
+STEP
+MESSAGE
+_____________________________________
+
+First select one end of the track
+
+END
+STEP
+MOUSE 1 1.917 12.167
+MOUSE 2 1.917 12.167
+MOUSE 3 1.917 13.167
+MOUSE 4 1.917 13.167
+MESSAGE
+_____________________________________
+
+Now the end of different track
+
+END
+STEP
+MOUSE 1 12.000 0.833
+MOUSE 2 12.000 0.833
+MOUSE 4 12.000 0.833
+MESSAGE
+_____________________________________
+
+You can reposition the ends by dragging them
+
+END
+STEP
+MOUSE 1 1.917 13.167
+MOUSE 2 1.917 13.167
+MOUSE 3 1.917 13.167
+MOUSE 3 1.917 15.000
+MOUSE 4 1.917 15.000
+MOUSE 1 12.000 0.833
+MOUSE 2 12.000 0.833
+MOUSE 3 15.000 0.833
+MOUSE 4 15.000 0.833
+MESSAGE
+_____________________________________
+
+When you are happy, Hit Enter or Space, if not use Esc
+
+END
+STEP
+MOUSE 8200 15.000 0.833
+MESSAGE
+_____________________________________
+
+The Curve is made up of Beziers parts that smooth the shape the best way it can be in the space available
+
END
+STEP
+COMMAND Describe
+PAUSE 100
+MOUSE 1 14.000 0.833
+MOUSE 2 14.000 0.833
+MOUSE 4 14.000 0.833
+BIGPAUSE
+STEP
+MESSAGE
+______________________________________
+
+Now, we'll show traditional easements instead.
+END
+REGRESSION START 10 - cornu easements
+STRAIGHT 1 0 0 0 0 DEMO 2
+ E4 1.916667 32.771041 0.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 1.916667 15.000000 180.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 2 0 0 0 0 DEMO 2
+ T4 3 15.000000 0.833333 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 37.083333 0.833333 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CORNU 3 0 0 0 0 DEMO 2 1.916667 15.000000 0.000000 0.000000 0.000000 0.000000 15.000000 0.833333 90.000000 0.000000 0.000000 0.000000
+ T4 1 1.916667 15.000000 0.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 15.000000 0.833333 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ W3 0 0.000000 1.916667 15.000000 1.916667 13.121710 1.928270 11.228345 2.313555 9.389995
+ SUBSEGS
+ C 0 0.000000 -51.927543 53.842537 14.583129 267.347511 3.112460
+ C 0 0.000000 -18.470423 20.421404 13.031742 258.628693 8.728303
+ SUBSEND
+ W3 0 0.000000 2.313555 9.389995 2.506197 8.470821 2.790377 7.569164 3.187261 6.718003
+ SUBSEGS
+ C 0 0.000000 -12.277827 14.343478 11.844781 245.319116 13.147641
+ SUBSEND
+ W3 0 0.000000 3.187261 6.718003 3.584145 5.866841 4.094090 5.067307 4.710759 4.358991
+ SUBSEGS
+ C 0 0.000000 -10.077407 12.331905 10.952342 229.135637 16.018322
+ SUBSEND
+ W3 0 0.000000 4.710759 4.358991 5.327429 3.650675 6.050166 3.035021 6.847004 2.537987
+ SUBSEGS
+ C 0 0.000000 -9.511226 11.881478 10.607528 211.959465 16.971764
+ SUBSEND
+ W3 0 0.000000 6.847004 2.537987 7.643842 2.040953 8.513257 1.663318 9.414707 1.399917
+ SUBSEGS
+ C 0 0.000000 -10.319905 12.273658 11.315906 196.083182 15.641856
+ SUBSEND
+ W3 0 0.000000 9.414707 1.399917 10.316158 1.136517 11.248390 0.987169 12.184477 0.911450
+ SUBSEGS
+ C 0 0.000000 -13.851949 13.192920 14.726643 184.174910 11.653463
+ SUBSEND
+ W3 0 0.000000 12.184477 0.911450 13.120565 0.835731 14.060855 0.833333 15.000000 0.833333
+ SUBSEGS
+ C 0 0.000000 -34.912615 14.559735 35.743172 179.277454 4.623642
+ SUBSEND
+ END
+REGRESSION END
+RESET
+PARAMETER misc cmdUndo
PARAMETER misc cmdEasement
STEP
PARAMETER easement val 0.500
@@ -29,10 +147,12 @@ We've selected sharp easements. The minimum radius curve we can use will be 9.7
Notice the label on the Easement button has changed to 'Sharp'.
END
STEP
-COMMAND Join
+COMMAND JoinTrack
+MOUSE 1 1.917 12.167
MOUSE 2 1.917 12.167
MOUSE 3 1.917 12.167
MOUSE 4 1.917 12.167
+MOUSE 1 12.000 0.833
MOUSE 2 12.000 0.833
MESSAGE
_________________________________________
@@ -59,14 +179,44 @@ The connecting curve is made of three tracks, the curve and two easement segment
END
STEP
COMMAND Describe
+MOUSE 1 5.750 4.083
MOUSE 2 5.750 4.083
MOUSE 4 5.750 4.083
+PAUSE 200
+MOUSE 1 14.333 0.500
MOUSE 2 14.333 0.500
MOUSE 4 14.333 0.500
+PAUSE 200
+MOUSE 1 1.917 13.333
MOUSE 2 1.917 13.333
MOUSE 4 1.917 13.333
-MESSAGE
-=========================================
-END
-STEP
+PAUSE 200
CLEAR
+
+REGRESSION START 10 - classic easements
+STRAIGHT 1 0 0 0 0 DEMO 2
+ E4 1.916667 32.771041 0.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 1.916623 16.149427 180.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 2 0 0 0 0 DEMO 2
+ T4 6 17.232761 0.833333 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 37.083333 0.833333 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 4 0 0 0 0 DEMO 2 14.500000 13.416666 0 12.487372 0 0.000000 0.000000
+ T4 6 11.767239 1.231984 102.641024 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 2.315318 10.683905 347.358976 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+JOINT 5 0 0 0 0 DEMO 2 0.000000 5.465521 9.750000 7.000000 0 1 0 1.916623 16.149427 0 180.000000
+ T4 1 1.916623 16.149427 0.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 2.315318 10.683905 167.358976 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+JOINT 6 0 0 0 0 DEMO 2 0.000000 5.465521 9.750000 7.000000 0 0 0 17.232761 0.833333 0 269.999539
+ T4 2 17.232761 0.833333 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 11.767239 1.231984 282.641024 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
+STEP
+
+
+
+
diff --git a/app/lib/demos/dmelev.xtr b/app/lib/demos/dmelev.xtr
index b0c524b..623c858 100644
--- a/app/lib/demos/dmelev.xtr
+++ b/app/lib/demos/dmelev.xtr
@@ -1,29 +1,29 @@
VERSION 7
DEMOINIT
-ORIG 12.000 0.000 0.000
+ORIG 6.000 0.000 0.000
PARAMETER display description-fontsize 72
-PARAMETER display labelenable 4
-CURVE 1 0 0 0 0 N -1 12.666667 13.666667 10.000000
+PARAMETER display labelenable 0
+CURVE 1 0 0 0 0 DEMO 2 12.666667 13.666667 10.000000
T 3 11.809617 3.703461 94.916566
T 5 22.410419 15.915955 167.001307
END
-STRAIGHT 2 0 0 0 0 N -1
+STRAIGHT 2 0 0 0 0 DEMO 2
T 3 27.376540 8.227390 232.674480
T 6 29.448408 9.807189 52.674480
END
-CURVE 3 0 0 0 0 N -1 13.737465 26.114701 22.494005
+CURVE 3 0 0 0 0 DEMO 2 13.737465 26.114701 22.494005
T 2 27.376540 8.227390 52.674480
T 1 11.809617 3.703461 274.916566
END
-STRAIGHT 4 0 0 0 0 N -1
+STRAIGHT 4 0 0 0 0 DEMO 2
T 5 37.111111 4.222222 270.000000
T 9 38.222222 4.222222 90.000000
END
-CURVE 5 0 0 0 0 N -1 37.111111 19.309524 15.087302
+CURVE 5 0 0 0 0 DEMO 2 37.111111 19.309524 15.087302
T 4 37.111111 4.222222 90.000000
T 1 22.410419 15.915955 347.001307
END
-TURNOUT 6 0 0 0 0 N -1 29.448408 9.807189 322.674480 "Peco-55 Medium Right SL-E395F"
+TURNOUT 6 0 0 0 0 DEMO 2 29.448408 9.807189 322.674480 "Peco-55 Medium Right SL-E395F"
T 2 29.448408 9.807189 232.674480
T 7 33.746482 13.084471 52.674480
T 8 34.035161 12.648152 62.360480
@@ -35,15 +35,15 @@ TURNOUT 6 0 0 0 0 N -1 29.448408 9.807189 322.674480 "Peco-55 Medium Right SL-E
C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
END
-STRAIGHT 7 0 0 0 0 N -1
+STRAIGHT 7 0 0 0 0 DEMO 2
T 19 42.270123 19.583746 52.674480
T 6 33.746482 13.084471 232.674480
END
-CURVE 8 0 0 0 0 N -1 45.574853 -9.388207 24.875000
+CURVE 8 0 0 0 0 DEMO 2 45.574853 -9.388207 24.875000
T 6 34.035161 12.648152 242.360480
T 18 51.462480 14.779984 103.691177
END
-TURNOUT 9 0 0 0 0 N -1 38.222222 4.222222 0.000000 "Peco-55 Medium Left SL-E396F"
+TURNOUT 9 0 0 0 0 DEMO 2 38.222222 4.222222 0.000000 "Peco-55 Medium Left SL-E396F"
T 4 38.222222 4.222222 270.000000
T 15 43.627222 4.222222 90.000000
T 13 43.592222 4.744222 80.314000
@@ -55,23 +55,23 @@ TURNOUT 9 0 0 0 0 N -1 38.222222 4.222222 0.000000 "Peco-55 Medium Left SL-E396
C 0 0.000000 -23.136000 0.351000 23.136000 170.297000 9.700000
S 0 0.000000 4.251000 0.331000 5.370000 0.522000
END
-STRAIGHT 10 0 0 0 0 N -1
+STRAIGHT 10 0 0 0 0 DEMO 2
E 76.446137 4.222222 90.000000
T 14 72.333333 4.222222 270.000000
END
-STRAIGHT 11 0 0 0 0 N -1
+STRAIGHT 11 0 0 0 0 DEMO 2
T 12 49.777778 5.472222 270.000000
T 16 60.777778 5.472222 90.000000
END
-CURVE 12 0 0 0 0 N -1 49.777778 -17.192082 22.664304
+CURVE 12 0 0 0 0 DEMO 2 49.777778 -17.192082 22.664304
T 13 45.964542 5.149134 260.314000
T 11 49.777778 5.472222 90.000000
END
-STRAIGHT 13 0 0 0 0 N -1
+STRAIGHT 13 0 0 0 0 DEMO 2
T 9 43.592222 4.744222 260.314000
T 12 45.964542 5.149134 80.314000
END
-TURNOUT 14 0 0 0 0 N -1 72.333333 4.222222 180.000000 "Peco-55 Medium Right SL-E395F"
+TURNOUT 14 0 0 0 0 DEMO 2 72.333333 4.222222 180.000000 "Peco-55 Medium Right SL-E395F"
T 10 72.333333 4.222222 90.000000
T 15 66.928333 4.222222 270.000000
T 17 66.963333 4.744222 279.686000
@@ -83,36 +83,42 @@ TURNOUT 14 0 0 0 0 N -1 72.333333 4.222222 180.000000 "Peco-55 Medium Right SL-
C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
END
-STRAIGHT 15 0 0 0 0 N -1
+STRAIGHT 15 0 0 0 0 DEMO 2
T 9 43.627222 4.222222 270.000000
T 14 66.928333 4.222222 90.000000
END
-CURVE 16 0 0 0 0 N -1 60.777778 -17.192082 22.664304
+CURVE 16 0 0 0 0 DEMO 2 60.777778 -17.192082 22.664304
T 11 60.777778 5.472222 270.000000
T 17 64.591013 5.149134 99.686000
END
-STRAIGHT 17 0 0 0 0 N -1
+STRAIGHT 17 0 0 0 0 DEMO 2
T 14 66.963333 4.744222 99.686000
T 16 64.591013 5.149134 279.686000
END
-CURVE 18 0 0 0 0 N -1 64.332420 67.609950 54.375000
+CURVE 18 0 0 0 0 DEMO 2 64.332420 67.609950 54.375000
E 74.352464 14.166154 79.381036
T 8 51.462480 14.779984 283.691177
END
-CURVE 19 0 0 0 0 N -1 49.773613 9.743103 12.375000
+CURVE 19 0 0 0 0 DEMO 2 49.773613 9.743103 12.375000
T 7 42.270123 19.583746 232.674480
T 20 56.175027 20.333784 121.150374
END
-CURVE 20 0 0 0 0 N -1 64.968888 34.882599 17.000000
+CURVE 20 0 0 0 0 DEMO 2 64.968888 34.882599 17.000000
E 74.032528 20.500303 57.781104
T 19 56.175027 20.333784 301.150374
END
REDRAW
RESET
MESSAGE
-We have designed part of the layout with a siding, 2 branches and a spiral loop. We want to set Elevations.
+We have designed part of the layout with a siding, 2 branches and a spiral loop. We want to set elevations.
+
+Note: make sure you set endpoint elevations on the Display dialog.
END
STEP
+PARAMETER misc cmdDisplay
+PARAMETER display labelenable 4
+BIGPAUSE
+PARAMETER display ok
MESSAGE
_________________________________________
@@ -164,12 +170,14 @@ BIGPAUSE
MESSAGE
_________________________________________
-We can move the Elevations by using Right-Drag
+We can move the Elevation label by using Ctrl-Left-Drag
END
STEP
-MOUSE 5 74.307 14.173
-#MOUSE 6 74.227 13.453
-MOUSE 7 74.227 12.453
+KEYSTATE 4
+MOUSE 2 74.307 14.173
+#MOUSE 3 74.227 13.453
+KEYSTATE 4
+MOUSE 4 74.227 12.453
#PARAMETER elev ok
MESSAGE
_________________________________________
@@ -190,9 +198,12 @@ PARAMETER elev value 0.500000
BIGPAUSE
REDRAW
BIGPAUSE
-MOUSE 5 38.320 4.280
-MOUSE 6 38.240 3.480
-MOUSE 7 38.240 3.480
+KEYSTATE 4
+MOUSE 2 38.320 4.280
+KEYSTATE 4
+MOUSE 3 38.240 3.480
+KEYSTATE 4
+MOUSE 4 38.240 3.480
#PARAMETER elev ok
BIGPAUSE
MESSAGE
@@ -215,16 +226,19 @@ _________________________________________
We picked an End-Point on the upper track.
-XTrackCAD has computed the Elevation (2.34") at this point based on the Elevation at the siding and a combination of the of the first Elevations.
+XTrackCAD has computed the Elevation (2.33") at this point based on the Elevation at the siding and a combination of the of the first Elevations.
We create a Computed Elevation here that will be automatically adjusted whenever the other Elevations are changed.
END
STEP
PARAMETER elev mode 3
BIGPAUSE
-MOUSE 5 27.400 8.240
-MOUSE 6 28.480 7.840
-MOUSE 7 28.480 7.840
+KEYSTATE 4
+MOUSE 2 27.400 8.240
+KEYSTATE 4
+MOUSE 3 28.480 7.840
+KEYSTATE 4
+MOUSE 4 28.480 7.840
BIGPAUSE
MESSAGE
_________________________________________
@@ -244,7 +258,7 @@ REDRAW
MESSAGE
_________________________________________
-Notice at the End-Point where the tracks cross, we see the Elevation has changed from 2.34 to 2.64.
+Notice at the endpoint where the tracks cross, we see the elevation has changed from 2.33 to 2.64.
END
STEP
MESSAGE
@@ -260,9 +274,9 @@ STEP
MESSAGE
_________________________________________
-There is no End-Point on the lower track here.
+There is no endpoint on the lower track here.
-Use Shift-Left-Click to Split the track and create an End-Point we can use for an Elevation,
+Use Shift-Left-Click to Split the track and create an endpoint we can use for an elevation,
END
STEP
KEYSTATE 2
@@ -277,15 +291,18 @@ STEP
PARAMETER elev mode 3
BIGPAUSE
#REDRAW
-MOUSE 5 26.480 8.640
-MOUSE 6 25.320 8.400
-MOUSE 7 25.320 8.400
+KEYSTATE 4
+MOUSE 2 26.480 8.640
+KEYSTATE 4
+MOUSE 3 25.320 10.000
+KEYSTATE 4
+MOUSE 4 25.320 10.000
BIGPAUSE
#PARAMETER elev ok
MESSAGE
_________________________________________
-Now we want to label the Grade on this section of track.
+Now we want to label the grade on this section of track.
END
STEP
#COMMAND Elevation
@@ -294,7 +311,7 @@ STEP
MESSAGE
_________________________________________
-Again, since there is no End-Point nearby, we split the track to create an End-Point we can use,
+Again, since there is no endpoint nearby, we split the track to create an endpoint we can use,
END
STEP
KEYSTATE 2
@@ -302,14 +319,17 @@ MOUSE 2 24.280 6.240
KEYSTATE 2
MOUSE 4 24.280 6.240
MESSAGE
-and create a Grade marker.
+and create a grade marker.
END
STEP
PARAMETER elev mode 4
BIGPAUSE
-MOUSE 5 24.240 6.360
-MOUSE 6 25.680 5.1
-MOUSE 7 25.680 5.1
+KEYSTATE 4
+MOUSE 2 24.240 6.360
+KEYSTATE 4
+MOUSE 3 25.680 5.1
+KEYSTATE 4
+MOUSE 4 25.680 5.1
BIGPAUSE
#PARAMETER elev ok
MESSAGE
@@ -345,13 +365,134 @@ PARAMETER elev mode 5
BIGPAUSE
PARAMETER elev station New York City
BIGPAUSE
-MOUSE 5 55.120 5.480
-#MOUSE 6 54.960 6.120
-MOUSE 7 54.960 6.520
+KEYSTATE 4
+MOUSE 2 55.120 5.480
+#KEYSTATE 4
+#MOUSE 3 54.960 6.120
+KEYSTATE 4
+MOUSE 4 54.960 6.520
BIGPAUSE
PARAMETER elev ok
MESSAGE
=========================================
END
+REGRESSION START 10 - elevation
+CURVE 1 0 0 0 0 DEMO 2 12.666667 13.666667 0 10.000000 0 0.000000 0.000000
+ T4 3 11.809617 3.703461 94.916566 0 0.0 0.0 0.0 0.0 0 0 0 1.630665
+ T4 21 22.410419 15.915955 167.001307 0 0.0 0.0 0.0 0.0 0 0 0 1.630665
+ END
+STRAIGHT 2 0 0 0 0 DEMO 2
+ T4 22 27.376540 8.227390 232.674480 10 1.103460 -0.387390 0.0 0.0 1 2 0 2.670102
+ T4 6 29.448408 9.807189 52.674480 0 0.0 0.0 0.0 0.0 0 0 0 2.670102
+ END
+CURVE 3 0 0 0 0 DEMO 2 13.737465 26.114701 0 22.494005 0 0.000000 0.000000
+ T4 22 24.278245 6.243309 62.056285 11 1.103460 -0.387390 0.0 0.0 1 3 0 2.372063
+ T4 1 11.809617 3.703461 274.916566 0 0.0 0.0 0.0 0.0 0 0 0 2.372063
+ END
+STRAIGHT 4 0 0 0 0 DEMO 2
+ T4 5 37.111111 4.222222 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.514478
+ T4 9 38.222222 4.222222 90.000000 9 0.000000 0.000000 0.500000 0.500000 1 1 0 0.514478
+ END
+CURVE 5 0 0 0 0 DEMO 2 37.111111 19.309524 0 15.087302 0 0.000000 0.000000
+ T4 4 37.111111 4.222222 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.681906
+ T4 21 26.521963 8.562588 314.576286 10 -1.201963 1.437412 0.0 0.0 1 2 0 0.681906
+ END
+TURNOUT 6 0 0 0 0 DEMO 2 29.448408 9.807189 0 322.674480 "Peco-55 Medium Right SL-E395F"
+ T4 2 29.448408 9.807189 232.674480 0 0.0 0.0 0.0 0.0 0 0 0 2.774644
+ T4 7 33.746482 13.084471 52.674480 0 0.0 0.0 0.0 0.0 0 0 0 2.774644
+ T4 8 34.035161 12.648152 62.360480 4 0.000000 0.000000 0.0 0.0 0 4 0 2.774644
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
+ S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
+ END
+STRAIGHT 7 0 0 0 0 DEMO 2
+ T4 19 42.270123 19.583746 52.674480 0 0.0 0.0 0.0 0.0 0 0 0 2.984906
+ T4 6 33.746482 13.084471 232.674480 0 0.0 0.0 0.0 0.0 0 0 0 2.984906
+ END
+CURVE 8 0 0 0 0 DEMO 2 45.574853 -9.388207 0 24.875000 0 0.000000 0.000000
+ T4 6 34.035161 12.648152 242.360480 4 0.000000 0.000000 0.0 0.0 0 4 0 2.569257
+ T4 18 51.462480 14.779984 103.691177 0 0.0 0.0 0.0 0.0 0 0 0 2.569257
+ END
+TURNOUT 9 0 0 0 0 DEMO 2 38.222222 4.222222 0 0.000000 "Peco-55 Medium Left SL-E396F"
+ T4 4 38.222222 4.222222 270.000000 9 0.000000 0.000000 0.500000 0.500000 1 1 0 0.500000
+ T4 15 43.627222 4.222222 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ T4 13 43.592222 4.744222 80.314000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 -23.136000 0.351000 23.136000 170.297000 9.700000
+ S 0 0.000000 4.251000 0.331000 5.370000 0.522000
+ END
+STRAIGHT 10 0 0 0 0 DEMO 2
+ E4 76.446137 4.222222 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ T4 14 72.333333 4.222222 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ END
+STRAIGHT 11 0 0 0 0 DEMO 2
+ T4 23 55.080000 5.472222 270.000000 13 -0.120000 1.047778 "New York City" 0.0 1 5 0 0.500000
+ T4 16 60.777778 5.472222 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ END
+CURVE 12 0 0 0 0 DEMO 2 49.777778 -17.192082 0 22.664304 0 0.000000 0.000000
+ T4 13 45.964542 5.149134 260.314000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ T4 23 49.777778 5.472222 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ END
+STRAIGHT 13 0 0 0 0 DEMO 2
+ T4 9 43.592222 4.744222 260.314000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ T4 12 45.964542 5.149134 80.314000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ END
+TURNOUT 14 0 0 0 0 DEMO 2 72.333333 4.222222 0 180.000000 "Peco-55 Medium Right SL-E395F"
+ T4 10 72.333333 4.222222 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ T4 15 66.928333 4.222222 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ T4 17 66.963333 4.744222 279.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
+ S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
+ END
+STRAIGHT 15 0 0 0 0 DEMO 2
+ T4 9 43.627222 4.222222 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ T4 14 66.928333 4.222222 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ END
+CURVE 16 0 0 0 0 DEMO 2 60.777778 -17.192082 0 22.664304 0 0.000000 0.000000
+ T4 11 60.777778 5.472222 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ T4 17 64.591013 5.149134 99.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ END
+STRAIGHT 17 0 0 0 0 DEMO 2
+ T4 14 66.963333 4.744222 99.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ T4 16 64.591013 5.149134 279.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ END
+CURVE 18 0 0 0 0 DEMO 2 64.332420 67.609950 0 54.375000 0 0.000000 0.000000
+ E4 74.352464 14.166154 79.381036 9 -0.125464 -1.713154 2.000000 2.000000 1 1 0 2.208882
+ T4 8 51.462480 14.779984 283.691177 0 0.0 0.0 0.0 0.0 0 0 0 2.208882
+ END
+CURVE 19 0 0 0 0 DEMO 2 49.773613 9.743103 0 12.375000 0 0.000000 0.000000
+ T4 7 42.270123 19.583746 232.674480 0 0.0 0.0 0.0 0.0 0 0 0 3.317291
+ T4 20 56.175027 20.333784 121.150374 0 0.0 0.0 0.0 0.0 0 0 0 3.317291
+ END
+CURVE 20 0 0 0 0 DEMO 2 64.968888 34.882599 0 17.000000 0 0.000000 0.000000
+ E4 74.032528 20.500303 57.781104 9 0.000000 0.000000 4.000000 4.000000 1 1 0 3.755003
+ T4 19 56.175027 20.333784 301.150374 0 0.0 0.0 0.0 0.0 0 0 0 3.755003
+ END
+CURVE 21 0 0 0 0 DEMO 2 37.111111 19.309524 0 15.087302 0 0.000000 0.000000
+ T4 5 26.521963 8.562588 134.576286 10 -1.201963 1.437412 0.0 0.0 1 2 0 0.946112
+ T4 1 22.410418 15.915955 347.001307 0 0.0 0.0 0.0 0.0 0 0 0 0.946112
+ END
+CURVE 22 0 0 0 0 DEMO 2 13.737465 26.114701 0 22.494005 0 0.000000 0.000000
+ T4 2 27.376540 8.227390 52.674480 0 0.0 0.0 0.0 0.0 0 0 0 2.588158
+ T4 3 24.278245 6.243309 242.056285 11 0.000000 0.000000 0.0 0.0 1 3 0 2.588158
+ END
+STRAIGHT 23 0 0 0 0 DEMO 2
+ T4 12 49.777778 5.472222 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ T4 11 55.080000 5.472222 90.000000 13 -0.120000 1.047778 "New York City" 0.0 1 5 0 0.500000
+ END
+REGRESSION END
STEP
CLEAR
diff --git a/app/lib/demos/dmexcept.xtr b/app/lib/demos/dmexcept.xtr
index a507771..ae1c8aa 100644
--- a/app/lib/demos/dmexcept.xtr
+++ b/app/lib/demos/dmexcept.xtr
@@ -6,23 +6,23 @@ ORIG 4.000 0.000 0.000
PARAMETER display description-fontsize 64
PARAMETER layout mintrackradius 9.000000
PARAMETER layout maxtrackgrade 5.000000
-CURVE 1 0 128 0 0 N 2 9.328210 12.681510 0 9.000000 0 -0.662481 0.508964
+CURVE 1 0 128 0 0 DEMO 2 9.328210 12.681510 0 9.000000 0 -0.662481 0.508964
T 3 10.311823 3.735421 83.725592
E 0.736918 15.362872 17.333261
END
-STRAIGHT 2 0 0 0 0 N 2
+STRAIGHT 2 0 0 0 0 DEMO 2
T 3 18.591303 5.367316 253.974133
E 23.914162 6.896222 73.974133
END
-CURVE 3 0 0 0 0 N 2 4.886341 53.080886 0 49.642831 0 0.000000 0.000000
+CURVE 3 0 0 0 0 DEMO 2 4.886341 53.080886 0 49.642831 0 0.000000 0.000000
T 2 18.591303 5.367316 73.974133
T 1 10.311823 3.735421 263.725592
END
-STRAIGHT 4 0 0 0 0 N 2
+STRAIGHT 4 0 0 0 0 DEMO 2
E 4.698097 0.130693 253.974133 9 -0.010597 0.869307 1.000000
T 5 14.456557 2.933654 73.974133 11 0.855943 -1.308654
END
-STRAIGHT 5 0 0 0 0 N 2
+STRAIGHT 5 0 0 0 0 DEMO 2
E 23.748581 5.602640 73.974133 9 -1.123581 -1.415140 1.750000
T 4 14.456557 2.933654 253.974133 11 0.855943 -1.308654
END
@@ -86,4 +86,46 @@ MESSAGE
=========================================
END
STEP
+REGRESSION START 10 - exception tracks
+CURVE 1 0 128 0 0 DEMO 2 9.437500 11.687500 0 8.000000 0 -0.662481 0.508964
+ T4 3 10.311823 3.735421 83.725592 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 1.800796 14.070933 17.333261 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 2 0 0 0 0 DEMO 2
+ T4 3 18.591303 5.367316 253.974133 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 23.914162 6.896222 73.974133 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 3 0 0 0 0 DEMO 2 4.886341 53.080886 0 49.642831 0 0.000000 0.000000
+ T4 2 18.591303 5.367316 73.974133 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 1 10.311823 3.735421 263.725592 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 4 0 0 0 0 DEMO 2
+ E4 4.698097 0.130693 253.974133 9 -0.010597 0.869307 1.000000 1.000000 1 1 0 1.320151
+ T4 5 14.456557 2.933654 73.974133 11 0.855943 -1.308654 0.0 0.0 1 3 0 1.320151
+ END
+STRAIGHT 5 0 0 0 0 DEMO 2
+ E4 23.748581 5.602640 73.974130 9 -1.123581 -1.415140 2.250000 2.250000 1 1 0 1.945151
+ T4 4 14.456557 2.933654 253.974133 11 0.855943 -1.308654 0.0 0.0 1 3 0 1.945151
+ END
+CURVE 1 0 128 0 0 DEMO 2 9.437500 11.687500 0 8.000000 0 -0.662481 0.508964
+ T4 3 10.311823 3.735421 83.725592 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 1.800796 14.070933 17.333261 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 2 0 0 0 0 DEMO 2
+ T4 3 18.591303 5.367316 253.974133 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 23.914162 6.896222 73.974133 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 3 0 0 0 0 DEMO 2 4.886341 53.080886 0 49.642831 0 0.000000 0.000000
+ T4 2 18.591303 5.367316 73.974133 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 1 10.311823 3.735421 263.725592 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 4 0 0 0 0 DEMO 2
+ E4 4.698097 0.130693 253.974133 9 -0.010597 0.869307 1.000000 1.000000 1 1 0 1.320151
+ T4 5 14.456557 2.933654 73.974133 11 0.855943 -1.308654 0.0 0.0 1 3 0 1.320151
+ END
+STRAIGHT 5 0 0 0 0 DEMO 2
+ E4 23.748581 5.602640 73.974130 9 -1.123581 -1.415140 2.250000 2.250000 1 1 0 1.945151
+ T4 4 14.456557 2.933654 253.974133 11 0.855943 -1.308654 0.0 0.0 1 3 0 1.945151
+ END
+REGRESSION END
CLEAR
diff --git a/app/lib/demos/dmextend.xtr b/app/lib/demos/dmextend.xtr
index 1996c42..1b8deff 100644
--- a/app/lib/demos/dmextend.xtr
+++ b/app/lib/demos/dmextend.xtr
@@ -1,6 +1,6 @@
VERSION 2
DEMOINIT
-ORIG 8.000 0.000 0.000
+ORIG 4.000 0.000 0.000
TURNOUT 1 DEMO 1 6.916667 2.666667 0.000000 "Peco-55 Med Left SL-E396F"
E 6.916667 2.666667 270.000000
E 12.321667 2.666667 90.000000
@@ -19,14 +19,14 @@ STRAIGHT 2 DEMO 1
REDRAW
RESET
MESSAGE
-The unconnected End-Point of any track can be extended with the <Modify> command using Right-Drag.
+The unconnected endpoint of any track can also be extended with the <Modify> command using Right-Drag.
END
STEP
COMMAND Modify
MESSAGE
_________________________________________
-Select the End-Point and Right-Drag.
+Select the endoint and Right-Drag.
END
BIGPAUSE
MOUSE 5 12.250 2.750
@@ -51,12 +51,12 @@ MOUSE 7 26.333 12.417
MESSAGE
_________________________________________
-If you extend a Straight or Curved flex track and enable Easements then an Easement curve will be automatically generated when you extend the track.
+If you extend a straight or curved flex track and enable Easements then an Easement curve will be automatically generated when you extend the track.
END
STEP
PARAMETER misc cmdEasement
BIGPAUSE
-PARAMETER easement val 0.500
+PARAMETER easement val -1.0
BIGPAUSE
PARAMETER easement ok
MOUSE 5 12 1
@@ -66,4 +66,43 @@ MESSAGE
=========================================
END
STEP
+REGRESSION START 10 - extend
+TURNOUT 1 0 0 0 0 DEMO 2 6.916667 2.666667 0 0.000000 "Peco-55 Med Left SL-E396F"
+ E4 6.916667 2.666667 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 12.321667 2.666667 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 12.286667 3.188667 80.314000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 -23.136000 0.351000 23.136000 170.297000 9.700000
+ S 0 0.000000 4.251000 0.331000 5.370000 0.522000
+ END
+STRAIGHT 2 0 0 0 0 DEMO 2
+ E4 2.000000 1.000000 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 7.000000 1.000000 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 3 0 0 0 0 DEMO 2 12.321667 17.666667 0 15.000000 0 0.000000 0.000000
+ E4 26.387026 12.454596 20.332733 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 1 12.321667 2.666667 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 4 0 0 0 0 DEMO 2 12.000000 19.456200 0 17.750000 0 0.000000 0.000000
+ E4 27.955056 11.678110 25.989234 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 21.407481 4.404230 237.994617 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CORNU 5 0 0 0 0 DEMO 2 7.000000 1.000000 270.000000 0.000000 0.000000 0.000000 21.407481 4.404230 57.994617 17.750000 12.000000 19.456200
+ T4 2 7.000000 1.000000 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 21.407481 4.404230 57.994617 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ W3 0 0.000000 7.000000 1.000000 9.503384 1.000000 12.022315 1.089191 14.466729 1.629346
+ SUBSEGS
+ C 0 0.000000 -52.368193 7.316059 53.367239 176.234238 4.111563
+ C 0 0.000000 -25.732586 9.068549 26.789347 167.890545 8.350670
+ SUBSEND
+ W3 0 0.000000 14.466729 1.629346 16.911144 2.169502 19.284616 3.077439 21.407481 4.404230
+ SUBSEGS
+ C 0 0.000000 -22.076089 9.860159 23.219465 148.461646 19.494056
+ SUBSEND
+ END
+REGRESSION END
CLEAR
diff --git a/app/lib/demos/dmflip.xtr b/app/lib/demos/dmflip.xtr
index b6ad7ab..80921d7 100644
--- a/app/lib/demos/dmflip.xtr
+++ b/app/lib/demos/dmflip.xtr
@@ -4,6 +4,7 @@ VERSION 10
DEMOINIT
ORIG 4.000 0.000 0.000
PARAMETER display description-fontsize 64
+PARAMETER display labelenable 15
STRUCTURE 1 0 0 0 0 DEMO 2 6.210395 3.915802 0 236.697715 "Walthers Interstate Fuel - Loading Rack 933-32000a"
D 0.000000 0.000000
L3 0 0.000000 0.750000 0.000000 0 3.750000 0.000000 0
@@ -186,5 +187,7 @@ REDRAW
MESSAGE
=========================================
END
+REGRESSION START 10 - flip
+REGRESSION END
STEP
CLEAR
diff --git a/app/lib/demos/dmgroup.xtr b/app/lib/demos/dmgroup.xtr
index efc883d..f5ed0dd 100644
--- a/app/lib/demos/dmgroup.xtr
+++ b/app/lib/demos/dmgroup.xtr
@@ -3,7 +3,7 @@
VERSION 10
DEMOINIT
PARAMETER display labelenable 1
-ORIG 2.000 0.000 0.000
+ORIG 1.0 0.0 0.0
TURNOUT 6 0 0 0 0 DEMO 2 2.125000 2.281250 0 0.000000 "Peco-55 Medium Right SL-E395F"
E 2.125000 2.281250 270.000000
E 7.530000 2.281250 90.000000
@@ -29,19 +29,24 @@ PARAMETER draw linewidth 0
PARAMETER draw linecolor 0
PARAMETER GROUP draw
PARAMETER draw linewidth 4
+MOUSE 1 2.500 3.000
+COMMAND DrawLine
MOUSE 2 2.500 3.000
MOUSE 4 2.500 1.500
+COMMAND DrawLine
+KEYSTATE 12
MOUSE 2 3.200 3.000
+KEYSTATE 12
MOUSE 4 3.200 1.500
-RESET
+STEP
COMMAND DrawFilledBox
PARAMETER draw linecolor 0
PARAMETER GROUP draw
+MOUSE 1 2.600 3.000
MOUSE 2 2.600 3.000
MOUSE 4 3.100 2.500
MOUSE 2 2.600 2.000
MOUSE 4 3.100 1.500
-RESET
MESSAGE
_________________________________________
@@ -51,7 +56,9 @@ First we Select the objects in the new definition.
END
STEP
COMMAND Select
+MOUSE 1 0.781 3.375
MOUSE 2 0.781 3.375
+MOUSE 3 8.312 1.312
MOUSE 4 8.312 1.312
MESSAGE
_________________________________________
@@ -109,6 +116,7 @@ First Select the turnout and then Ungroup it.
END
STEP
+MOUSE 1 7.156 2.094
MOUSE 2 7.156 2.094
MOUSE 4 7.156 2.094
PARAMETER misc cmdUngroup
@@ -120,7 +128,7 @@ Notice that the Title now indicates the turnout is Ungrouped.
Hit Escape to deselect everything.
END
STEP
-MOUSE 6920 4.094 5.188
+MOUSE 2800 4.094 5.188
RESET
MESSAGE
_________________________________________
@@ -128,14 +136,25 @@ _________________________________________
Now Select the lines and squares.
END
STEP
+#KEYSTATE 12
+MOUSE 1 2.469 2.812
+#KEYSTATE 12
MOUSE 2 2.469 2.812
+KEYSTATE 12
MOUSE 4 2.469 2.812
+KEYSTATE 12
MOUSE 2 2.688 2.875
+KEYSTATE 12
MOUSE 4 2.688 2.875
+KEYSTATE 12
MOUSE 2 3.188 2.844
+KEYSTATE 12
MOUSE 4 3.188 2.844
+KEYSTATE 12
MOUSE 2 2.812 1.656
+KEYSTATE 12
MOUSE 4 2.812 1.656
+MOUSE 1 5.000 1.000
MESSAGE
_________________________________________
@@ -150,10 +169,10 @@ And move the Label out of the way.
END
STEP
COMMAND MoveLabel
+MOUSE 1 4.281 2.031
MOUSE 2 4.281 2.031
MOUSE 4 4.594 0.844
-ORIG 3.000 0.000 0.000
-ORIG 1.000 2.000 1.000
+ORIG 1.0 0.0 0.0
MESSAGE
_________________________________________
@@ -161,12 +180,15 @@ Notice that the turnout has been broken into three parts.
END
STEP
COMMAND Describe
+MOUSE 1 4.531 2.219
MOUSE 2 4.531 2.219
MOUSE 4 4.531 2.219
BIGPAUSE
+MOUSE 1 6.984 1.812
MOUSE 2 6.984 1.812
MOUSE 4 6.984 1.812
BIGPAUSE
+MOUSE 1 2.359 2.266
MOUSE 2 2.359 2.266
MOUSE 4 2.359 2.266
BIGPAUSE
@@ -194,21 +216,45 @@ KEYSTATE 2
MOUSE 2 4.625 1.969
KEYSTATE 2
MOUSE 4 4.625 1.969
+REGRESSION START 10 - group 1
+TURNOUT 16 0 32 0 0 DEMO 2 2.477615 1.950213 0 0.000000 "Peco-55 Modified Medium Right SL-E395F"
+ T4 17 2.478000 2.281250 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 7.530000 2.281250 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 18 6.375762 1.950213 99.704000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D -0.409808 -1.271732
+ P "P1" 1
+ P "P2" 2
+ S 0 0.000000 0.000385 0.331037 5.052385 0.331037
+ C 0 0.000000 23.136000 -0.001615 -22.804963 0.004000 9.700000
+ END
+STRAIGHT 17 0 0 0 0 DEMO 2
+ E4 2.125000 2.281250 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 16 2.478000 2.281250 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 18 0 0 0 0 DEMO 2
+ T4 16 6.376000 1.950250 279.686360 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 7.495000 1.759250 99.686360 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
PARAMETER misc cmdDelete
-ORIG 3.000 0.000 0.000
+ORIG 1.0 0.0 0.0
CLEAR
MESSAGE
Now, create a track and place the new turnout on it.
END
STEP
COMMAND Straight
+MOUSE 1 0.281 0.688
MOUSE 2 0.281 0.688
+MOUSE 3 11.156 4.281
MOUSE 4 11.156 4.281
BIGPAUSE
COMMAND TurnoutHotBar
#PARAMETER turnout list 0
PARAMETER GROUP turnout
HOTBARSELECT Peco-55 Modified Medium Right SL-E395F
+MOUSE 1 4.750 1.906
+MOUSE 2 4.750 1.906
MOUSE 4 4.750 1.906
MOUSE 8200 4.750 1.906
MESSAGE
@@ -220,6 +266,7 @@ First we Select the turnout.
END
STEP
COMMAND Select
+MOUSE 1 6.062 2.906
MOUSE 2 6.062 2.906
MOUSE 4 6.062 2.906
MESSAGE
@@ -239,13 +286,16 @@ _________________________________________
Now, hit escape to deselect everything and then Select the 2 squares and delete them.
END
STEP
-MOUSE 6920 6.062 2.906
+MOUSE 2800 6.062 2.906
RESET
BIGPAUSE
-MOUSE 2 5.219 2.938
-MOUSE 4 5.219 2.938
-MOUSE 2 5.531 1.844
-MOUSE 4 5.531 1.844
+MOUSE 1 5.219 3.000
+MOUSE 2 5.219 3.000
+MOUSE 4 5.219 3.000
+KEYSTATE 12
+MOUSE 2 5.219 2.000
+KEYSTATE 12
+MOUSE 4 5.219 2.000
PARAMETER misc cmdDelete
MESSAGE
_________________________________________
@@ -253,25 +303,34 @@ _________________________________________
Now draw the green circles...
END
STEP
-ORIG 1.000 2.000 1.000
-COMMAND DrawFilledCircleCenter
+ORIG 1.0 0.0 0.0
+COMMAND DrawFilledCircleTangent
PARAMETER draw linecolor 0
PARAMETER GROUP draw
PARAMETER draw linecolor 65280
+MOUSE 1 5.203 2.812
MOUSE 2 5.203 2.812
+MOUSE 3 5.359 2.609
MOUSE 4 5.359 2.609
PARAMETER GROUP draw
+MOUSE 1 5.516 1.891
MOUSE 2 5.516 1.891
+MOUSE 3 5.672 1.719
MOUSE 4 5.672 1.719
PARAMETER GROUP draw
MESSAGE
and Group the new definition.
END
STEP
-ORIG 2.000 0.000 0.000
-RESET
+ORIG 1.0 0.0 0.0
COMMAND Select
+KEYSTATE 12
+MOUSE 1 3.719 4.156
+KEYSTATE 12
MOUSE 2 3.719 4.156
+KEYSTATE 12
+MOUSE 3 10.531 0.969
+KEYSTATE 12
MOUSE 4 10.531 0.969
BIGPAUSE
PARAMETER misc cmdGroup
@@ -288,22 +347,63 @@ KEYSTATE 2
MOUSE 2 5.000 2.188
KEYSTATE 2
MOUSE 4 5.000 2.188
+REGRESSION START 10 - group 2
+STRAIGHT 19 0 0 0 0 DEMO 2
+ E4 0.281000 0.688000 251.716920 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 32 4.672994 2.139075 71.716920 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 20 0 0 0 0 DEMO 2
+ T4 32 9.805140 3.834688 251.716920 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 11.156000 4.281000 71.716920 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 32 0 0 0 0 DEMO 2 4.672994 2.139075 0 0.000000 "Peco-55 Modified Medium Right SL-E395F"
+ T4 19 4.672994 2.139075 251.716920 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 20 9.805140 3.834688 71.716920 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 9.935665 3.328060 81.403280 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "P0" 1 3
+ P "P1" 4 2 3
+ L3 0 0.055556 0.130589 0.800108 0 0.601157 -0.624169 0
+ L3 0 0.055556 0.795251 1.019707 0 1.265820 -0.404571 0
+ S 0 0.000000 5.132146 1.695614 0.335180 0.110740
+ C 0 0.000000 -23.136000 7.591323 -21.857939 341.720920 9.700000
+ S 0 0.000000 0.335180 0.110740 0.000000 0.000000
+ S 0 0.000000 5.262670 1.188985 4.140240 1.019299
+ G3 65280 0.000000 0.256018 0.530006 0.672925 0
+ G3 65280 0.000000 0.232207 0.843006 -0.248075 0
+ END
+REGRESSION END
PARAMETER misc cmdDelete
CLEAR
RESET
MESSAGE
We can also create turnouts from simple straight and curved tracks.
-We'll create two tracks that have a common End-Point.
+We'll create two tracks that have a common endpoint.
END
STEP
COMMAND Straight
+MOUSE 1 2.000 2.000
MOUSE 2 2.000 2.000
+MOUSE 3 10.000 2.000
MOUSE 4 10.000 2.000
+MESSAGE
+
+When we create the curve from the straight track endpoint we need to hold down the Shift key to prevent XTrackCAD from trying to join the two tracks.
+END
COMMAND CurveEndPt
+MOUSE 1 2.000 2.000
+KEYSTATE 12
MOUSE 2 2.000 2.000
+KEYSTATE 12
+MOUSE 3 9.000 2.000
+KEYSTATE 12
MOUSE 4 9.000 2.000
+KEYSTATE 12
MOUSE 2 9.000 2.000
+KEYSTATE 12
+MOUSE 3 8.875 3.062
+KEYSTATE 12
MOUSE 4 8.875 3.062
MESSAGE
_________________________________________
@@ -314,6 +414,7 @@ We will use the <Describe> command to change the tracks.
END
STEP
COMMAND Describe
+MOUSE 1 9.438 2.000
MOUSE 2 9.438 2.000
MOUSE 4 9.438 2.000
MESSAGE
@@ -344,6 +445,7 @@ Now let's look at the curved track.
END
STEP
COMMAND Describe
+MOUSE 1 7.688 2.625
MOUSE 2 7.688 2.625
MOUSE 4 7.688 2.625
MESSAGE
@@ -357,7 +459,7 @@ PARAMETER describe P1 2
MESSAGE
_________________________________________
-We want the curve to have a radius of 20" and an angle of 17.5.
+We want the curve to have a radius of 20" and an angle of 17.5�.
First change the Radius...
END
STEP
@@ -378,9 +480,14 @@ Now Select both tracks...
END
STEP
COMMAND Select
+MOUSE 1 7.500 2.750
MOUSE 2 7.500 2.750
MOUSE 4 7.500 2.750
+KEYSTATE 12
+MOUSE 1 8.000 2.000
+KEYSTATE 12
MOUSE 2 8.000 2.000
+KEYSTATE 12
MOUSE 4 8.000 2.000
MESSAGE
and Group them.
@@ -409,6 +516,7 @@ We'll use the <Flip> command.
END
STEP
COMMAND Select
+MOUSE 1 7.812 2.250
MOUSE 2 7.812 2.250
MOUSE 4 7.812 2.250
COMMAND Flip
@@ -418,7 +526,9 @@ _________________________________________
Drag a horizontal line that will be the mirror for the <Flip> command.
END
STEP
+MOUSE 1 1.438 1.938
MOUSE 2 1.438 1.938
+MOUSE 3 11.625 1.938
MOUSE 4 11.625 1.938
MESSAGE
_________________________________________
@@ -464,4 +574,16 @@ MESSAGE
=========================================
END
STEP
+REGRESSION START 10 - group 3
+TURNOUT 36 0 0 0 0 DEMO 2 2.000000 1.876000 0 0.000000 "Custom Right 99-R"
+ E4 2.000000 1.876000 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 9.500000 1.876000 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 8.014116 0.950339 107.500000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "P0" 1
+ P "P1" 2
+ S 0 0.000000 0.000000 0.000000 7.500000 -0.000000
+ C 0 0.000000 20.000000 -0.000000 -20.000000 0.000000 17.500000
+ END
+REGRESSION END
CLEAR
diff --git a/app/lib/demos/dmhelix.xtr b/app/lib/demos/dmhelix.xtr
index 1a54c48..f02c1d6 100644
--- a/app/lib/demos/dmhelix.xtr
+++ b/app/lib/demos/dmhelix.xtr
@@ -3,11 +3,11 @@ DEMOINIT
ORIG 10.000 0.000 0.000
PARAMETER display labelscale 10
PARAMETER display description-fontsize 144
-STRAIGHT 1 0 0 0 0 N -1
+STRAIGHT 1 0 0 0 0 DEMO 2
E 23.086096 1.459535 254.675892
E 72.500000 15.000000 74.675892
END
-STRAIGHT 2 0 0 0 0 N -1
+STRAIGHT 2 0 0 0 0 DEMO 2
E 1.770859 28.642902 189.520022
E 5.625000 51.625000 9.520022
END
@@ -104,6 +104,10 @@ MOUSE 3 15.375 20.500
MOUSE 3 16.000 16.000
STEP
MOUSE 4 16.000 16.000
+PARAMETER display labelenable 1
+COMMAND MoveLabel
+MOUSE 2 16.000 16.000
+MOUSE 4 16.000 16.000
RESET
MESSAGE
_________________________________________
@@ -111,7 +115,7 @@ _________________________________________
Next, join the 2 straight tracks to the helix in the same way we join to a circle.
END
STEP
-COMMAND Join
+COMMAND JoinTrack
MOUSE 2 1.875 30.000
MOUSE 4 1.875 30.000
MOUSE 2 1.000 17.375
@@ -182,6 +186,7 @@ _________________________________________
The helix description can be moved by the <Move Label> command.
END
+PARAMETER display labelenable 1
COMMAND MoveLabel
MOUSE 2 15.875 16.125
MOUSE 3 16.125 6.250
@@ -189,5 +194,27 @@ MOUSE 4 16.125 6.250
MESSAGE
=========================================
END
+REGRESSION START 10 - helix
+STRAIGHT 1 0 0 0 0 DEMO 2
+ T4 5 25.749076 2.189249 254.675892 0 0.0 0.0 0.0 0.0 0 0 0 1.000000
+ E4 72.500000 15.000000 74.675892 0 0.0 0.0 0.0 0.0 0 0 0 1.000000
+ END
+STRAIGHT 2 0 0 0 0 DEMO 2
+ T4 4 2.583150 33.486562 189.520022 0 0.0 0.0 0.0 0.0 0 0 0 13.000000
+ E4 5.625000 51.625000 9.520022 0 0.0 0.0 0.0 0.0 0 0 0 13.000000
+ END
+CURVE 3 0 0 0 0 DEMO 2 16.000000 16.000000 0 15.000000 4 0.125000 -9.750000
+ T4 5 15.375542 1.013004 92.385944 9 0.000000 0.000000 1.000000 1.000000 1 1 0 7.000000
+ T4 4 1.002118 16.252065 0.962864 9 0.000000 0.000000 13.000000 13.000000 1 1 0 7.000000
+ END
+CURVE 4 0 0 0 0 DEMO 2 116.974302 14.302953 0 115.988562 0 0.000000 0.000000
+ T4 3 1.002118 16.252065 180.962864 9 0.000000 0.000000 13.000000 13.000000 1 1 0 13.000000
+ T4 2 2.583150 33.486562 9.520022 0 0.0 0.0 0.0 0.0 0 0 0 13.000000
+ END
+CURVE 5 0 0 0 0 DEMO 2 16.787253 34.894082 0 33.910476 0 0.000000 0.000000
+ T4 1 25.749076 2.189249 74.675892 0 0.0 0.0 0.0 0.0 0 0 0 1.000000
+ T4 3 15.375542 1.013004 272.385944 9 0.000000 0.000000 1.000000 1.000000 1 1 0 1.000000
+ END
+REGRESSION END
STEP
CLEAR
diff --git a/app/lib/demos/dmhndld.xtr b/app/lib/demos/dmhndld.xtr
index 2647818..cf3c477 100644
--- a/app/lib/demos/dmhndld.xtr
+++ b/app/lib/demos/dmhndld.xtr
@@ -3,11 +3,11 @@
VERSION 10
DEMOINIT
ORIG 4.000 13.000 6.000
-STRAIGHT 1 0 0 0 0 N 2
+STRAIGHT 1 0 0 0 0 DEMO 2
E 13.625000 6.625000 243.300294
E 34.875000 17.312500 63.300294
END
-CURVE 2 0 0 0 0 N 2 34.992582 -3.178627 0 16.250000 0 0.000000 0.000000
+CURVE 2 0 0 0 0 DEMO 2 34.992582 -3.178627 0 16.250000 0 0.000000 0.000000
E 19.937500 2.937500 202.109448
E 40.001921 12.279996 107.954824
END
@@ -107,5 +107,67 @@ RESET
MESSAGE
=========================================
END
+REGRESSION START 10 - handlaid turnout
+STRAIGHT 1 0 0 0 0 DEMO 2
+ E4 13.625000 6.625000 243.300294 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 7 20.692306 10.179439 63.300294 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 2 0 0 0 0 DEMO 2 34.992582 -3.178627 0 16.250000 0 0.000000 0.000000
+ E4 19.937500 2.937500 202.109448 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 12 22.817510 7.583813 41.475827 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 3 0 0 0 0 DEMO 2
+ T4 7 21.323206 10.496745 243.300294 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 34.875000 17.312500 63.300294 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 4 0 0 0 0 DEMO 2
+ T4 7 21.310280 10.521238 241.053198 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 22.150312 10.985857 61.053198 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 5 0 0 0 0 DEMO 2 16.103354 21.918786 0 12.493784 0 0.000000 0.000000
+ T4 6 24.004126 12.240333 50.774343 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 22.150312 10.985857 241.053198 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 6 0 0 0 0 DEMO 2
+ T4 5 24.004126 12.240333 230.774343 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 24.277659 12.463625 50.774343 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 7 0 8 0 0 DEMO 2 20.692306 10.179439 0 243.300294 " Hand Laid Turnout, Angle=12.5 "
+ T4 1 20.692306 10.179439 243.300294 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 21.323206 10.496745 63.300294 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 21.310280 10.521238 61.053198 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ P "Reverse" 2
+ S 0 0.000000 0.000000 0.000000 0.000000 -0.706200
+ S 0 0.000000 0.000000 0.000000 0.027690 -0.705657
+ END
+CURVE 8 0 0 0 0 DEMO 2 34.992582 -3.178627 0 16.250000 0 0.000000 0.000000
+ T4 12 23.296269 8.102275 223.964248 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 40.001921 12.279996 107.954824 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 9 0 0 0 0 DEMO 2 29.929997 1.296563 0 9.492997 0 0.000000 0.000000
+ T4 12 23.303539 8.094140 225.730320 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 10 23.481733 8.263404 47.213730 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 10 0 0 0 0 DEMO 2
+ T4 9 23.481733 8.263404 227.213730 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 11 26.592848 11.142944 47.213730 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 11 0 0 0 0 DEMO 2
+ T4 10 26.592848 11.142944 227.213730 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 26.851986 11.382793 47.213730 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 12 0 8 0 0 DEMO 2 22.817510 7.583813 0 221.475827 " Hand Laid Turnout, Angle=12.4 "
+ T4 2 22.817510 7.583813 221.475827 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 8 23.296269 8.102275 43.964248 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 9 23.303539 8.094140 45.730320 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1
+ P "Reverse" 2
+ S 0 0.000000 0.000000 0.000000 -0.015323 -0.705534
+ S 0 0.000000 0.000000 0.000000 -0.026159 -0.704254
+ END
+REGRESSION END
STEP
CLEAR
diff --git a/app/lib/demos/dmintro.xtr b/app/lib/demos/dmintro.xtr
index 602b436..200b441 100644
--- a/app/lib/demos/dmintro.xtr
+++ b/app/lib/demos/dmintro.xtr
@@ -1,6 +1,6 @@
VERSION 1
DEMOINIT
-ORIG 12.000 0.000 0.000
+ORIG 6.000 0.000 0.000
PARAMETER display description-fontsize 18
REDRAW
RESET
@@ -38,23 +38,23 @@ You can adjust the speed of the demonstration with the Speed control.
END
STEP
CLEAR
-DRAW 1 0 0 0 0 0.000000 0.000000 0 0.000000
+DRAW 1 0.000000 0.000000 0.000000
L3 0 0.444444 0.000000 0.000000 0 72.000000 0.000000 0
END
-DRAW 2 0 0 0 0 0.000000 0.000000 0 0.000000
- L3 0 0.444444 72.000000 0.000000 0 72.000000 36.000000 0
+DRAW 2 0.000000 0.000000 0.000000
+ L3 0 0.444444 72.000000 0.000000 0 72.000000 24.000000 0
END
-DRAW 3 0 0 0 0 0.000000 0.000000 0 0.000000
- L3 0 0.444444 72.000000 36.000000 0 0.000000 36.000000 0
+DRAW 3 0.000000 0.000000 0.000000
+ L3 0 0.444444 72.000000 24.000000 0 0.000000 24.000000 0
END
-DRAW 4 0 0 0 0 0.000000 0.000000 0 0.000000
- L3 0 0.444444 0.000000 36.000000 0 0.000000 0.000000 0
+DRAW 4 0.000000 0.000000 0.000000
+ L3 0 0.444444 0.000000 24.000000 0 0.000000 0.000000 0
END
-DRAW 5 0 0 0 0 0.000000 0.000000 0 0.000000
- L3 0 0.444444 0.000000 0.000000 0 72.000000 36.000000 0
+DRAW 5 0.000000 0.000000 0.000000
+ L3 0 0.444444 0.000000 0.000000 0 72.000000 24.000000 0
END
-DRAW 6 0 0 0 0 0.000000 0.000000 0 0.000000
- L3 0 0.444444 0.000000 36.000000 0 72.000000 0.000000 0
+DRAW 6 0.000000 0.000000 0 0.000000
+ L3 0 0.444444 0.000000 24.000000 0 72.000000 0.000000 0
END
REDRAW
MESSAGE
diff --git a/app/lib/demos/dmjcir.xtr b/app/lib/demos/dmjcir.xtr
index 9647e39..a8735f0 100644
--- a/app/lib/demos/dmjcir.xtr
+++ b/app/lib/demos/dmjcir.xtr
@@ -1,6 +1,6 @@
VERSION 2
DEMOINIT
-ORIG 8.000 0.000 0.000
+ORIG 6.000 0.000 0.000
CURVE 1 DEMO 1 12.633333 7.966667 6.000000
E 12.633333 13.966667 270.000000
E 12.633333 13.966667 90.000000
@@ -17,7 +17,7 @@ You can also join to and from circles. This will change the circles to curves.
In this example we will join two circles.
END
STEP
-COMMAND Join
+COMMAND JoinTrack
MOUSE 2 14.083 14.083
MOUSE 4 14.083 14.083
MOUSE 2 28.250 12.833
@@ -133,6 +133,20 @@ MOUSE 4 34.250 13.500
MESSAGE
=========================================
END
+REGRESSION START 10 - circle 1
+CURVE 1 0 0 0 0 DEMO 2 12.633333 7.966667 0 6.000000 0 0.000000 0.000000
+ E4 18.237313 10.110358 -20.933362 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 10.489642 13.570647 69.066638 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 2 0 0 0 0 DEMO 2 32.133333 7.966667 0 6.000000 0 0.000000 0.000000
+ T4 3 34.277024 13.570647 290.933362 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 26.529353 10.110358 380.933362 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 3 0 0 0 0 DEMO 2 22.383333 -17.521516 0 33.289375 0 0.000000 0.000000
+ T4 1 10.489642 13.570647 249.066638 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 34.277024 13.570647 110.933362 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
STEP
CLEAR
MESSAGE
@@ -140,7 +154,7 @@ Now let's try a cross connection.
END
STEP
PARAMETER misc cmdUndo
-COMMAND Join
+COMMAND JoinTrack
MOUSE 2 15.500 13.333
MOUSE 4 15.500 13.333
MOUSE 2 27.667 4.167
@@ -236,5 +250,19 @@ Note that the connection is from different 'ends' of the circle than in the last
=========================================
END
STEP
+REGRESSION START 10 - circle 2
+CURVE 1 0 0 0 0 DEMO 2 12.633333 7.966667 0 6.000000 0 0.000000 0.000000
+ E4 18.312924 6.032179 18.809012 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 14.567821 13.646258 108.809012 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 2 0 0 0 0 DEMO 2 32.133333 7.966667 0 6.000000 0 0.000000 0.000000
+ E4 28.539473 12.771266 233.203358 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 27.328734 4.372807 323.203358 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 4 0 0 0 0 DEMO 2 5.966820 -11.605994 0 26.676833 0 0.000000 0.000000
+ T4 1 14.567821 13.646258 288.809012 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 27.328734 4.372807 143.203358 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
RESET
CLEAR
diff --git a/app/lib/demos/dmjnabut.xtr b/app/lib/demos/dmjnabut.xtr
index e72c898..8874fa0 100644
--- a/app/lib/demos/dmjnabut.xtr
+++ b/app/lib/demos/dmjnabut.xtr
@@ -25,7 +25,7 @@ This examples shows joining tracks whose End-Points are aligned.
Note the 2 pairs of tracks have End-Points that are close and aligned but not connected.
END
STEP
-COMMAND Join
+COMMAND JoinTrack
MOUSE 2 20.167 4.500
MESSAGE
_________________________________________
@@ -55,5 +55,19 @@ END
MESSAGE
=========================================
END
+REGRESSION START 10 - join abut
+STRAIGHT 2 0 0 0 0 DEMO 2
+ E4 4.133333 4.466667 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 19.216667 4.466687 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 3 0 0 0 0 DEMO 2 19.300229 18.466687 0 14.000000 0 0.000000 0.000000
+ E4 32.510491 13.831066 19.336606 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 19.300192 4.466687 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 4 0 0 0 0 DEMO 2
+ E4 35.216667 3.216667 90.000200 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 4.133333 3.216667 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
STEP
CLEAR
diff --git a/app/lib/demos/dmjncs.xtr b/app/lib/demos/dmjncs.xtr
index f1bd27f..9707269 100644
--- a/app/lib/demos/dmjncs.xtr
+++ b/app/lib/demos/dmjncs.xtr
@@ -12,27 +12,40 @@ CURVE 2 DEMO 1 29.473372 12.727335 7.625000
REDRAW
RESET
MESSAGE
-The <Join> command can join straight and curved tracks (in either order).
+The <Join> command can also join straight and curved tracks (in either order).
+
+We will enable Cornu easements
+
END
+
STEP
-COMMAND Join
+PARAMETER misc cmdEasement
+PARAMETER easement val -1.0
+BIGPAUSE
+PARAMETER easement ok
+COMMAND JoinTrack
+MOUSE 1 34.167 6.917
MOUSE 2 34.167 6.917
MOUSE 4 34.167 6.917
+MOUSE 1 23.750 2.167
MOUSE 2 23.750 2.167
MESSAGE
_________________________________________
-A connecting track is drawn between the two tracks.
+A connecting cornu track is drawn between the two tracks.
END
STEP
MOUSE 3 23.750 2.083
MOUSE 3 19.417 2.000
+MOUSE 4 19.417 2.000
MESSAGE
_________________________________________
Notice that the curved track is extended as the connection point moves past the End-Point.
END
STEP
+MOUSE 1 34.167 6.917
+MOUSE 2 34.167 6.917
MOUSE 3 19.167 2.000
MOUSE 3 10.917 2.333
BIGPAUSE
@@ -41,24 +54,25 @@ MOUSE 3 28.250 2.250
MESSAGE
_________________________________________
-Here the connection makes the curved track wrap around.
+Here the connection makes the curved track wrap around. This is not a useful shape, there is a discontinuity at the end.
+Adjusting the end point will fix it.
END
STEP
MOUSE 3 28.250 2.250
-MOUSE 3 3.250 2.333
-MESSAGE
-_________________________________________
+MOUSE 4 28.250 2.250
-Now the cursor is about to be moved past the other (far) End-Point of the straight track. You will receive a warning and the connecting track turns Red.
-END
-STEP
-MOUSE 3 2.500 2.250
-MOUSE 3 0.667 2.167
-STEP
-MOUSE 3 0.667 2.167
-MOUSE 4 7.333 1.833
MESSAGE
=========================================
END
+REGRESSION START 10 - join curve and straight
+STRAIGHT 1 0 0 0 0 DEMO 2
+ E4 1.883214 2.133372 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 31.050000 2.133333 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 2 0 0 0 0 DEMO 2 29.473372 12.727335 0 7.625000 0 0.000000 0.000000
+ E4 37.081031 13.241282 356.135245 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 33.769610 6.427894 235.706018 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
STEP
CLEAR
diff --git a/app/lib/demos/dmjnmove.xtr b/app/lib/demos/dmjnmove.xtr
index 43626e6..a00f3fa 100644
--- a/app/lib/demos/dmjnmove.xtr
+++ b/app/lib/demos/dmjnmove.xtr
@@ -1,7 +1,6 @@
VERSION 2
DEMOINIT
ORIG 8.000 0.000 0.000
-PARAMETER cmdopt move-quick 2
STRAIGHT 1 DEMO 1
E 13.440000 4.160000 270.000000
E 30.186667 4.160000 90.000000
@@ -19,12 +18,20 @@ RESET
MESSAGE
The <Join> command can move one group of tracks to join with another.
-First <Select> the tracks you want to move.
+First <Select> the tracks you want to move with Ctrl so that they are both selected.
END
STEP
+KEYSTATE 4
+MOUSE 1 24.000 13.013
+KEYSTATE 4
MOUSE 2 24.000 13.013
+KEYSTATE 4
MOUSE 4 24.000 13.013
+KEYSTATE 4
+MOUSE 1 15.893 12.160
+KEYSTATE 4
MOUSE 2 15.893 12.160
+KEYSTATE 4
MOUSE 4 15.893 12.160
MESSAGE
_________________________________________
@@ -32,7 +39,7 @@ _________________________________________
Click <Join> and Shift-Left-Click on the two End-Points.
END
STEP
-COMMAND Join
+COMMAND JoinTrack
KEYSTATE 2
MOUSE 2 14.613 7.573
KEYSTATE 2
@@ -47,5 +54,19 @@ _________________________________________
The selected tracks are moved into position.
=========================================
END
+REGRESSION START 10 - move to join
+STRAIGHT 1 0 0 0 0 DEMO 2
+ T4 2 13.440000 4.160000 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 30.186667 4.160000 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 2 0 0 0 0 DEMO 2 13.440000 9.409999 0 5.250000 0 0.000000 0.000000
+ T4 1 13.440000 4.160000 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 8.243218 10.155620 8.164927 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 3 0 0 0 0 DEMO 2
+ T4 2 8.243218 10.155620 188.164927 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 9.659037 20.023512 8.164927 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
STEP
CLEAR
diff --git a/app/lib/demos/dmjnss.xtr b/app/lib/demos/dmjnss.xtr
index 451fde4..6343fb8 100644
--- a/app/lib/demos/dmjnss.xtr
+++ b/app/lib/demos/dmjnss.xtr
@@ -12,13 +12,26 @@ STRAIGHT 2 DEMO 1
REDRAW
RESET
MESSAGE
-Two straight tracks are joined by selecting the two End-Points. The selected End-Points will be those closest to the cursor when the track is selected.
+Two straight tracks can be joined by selecting the two endoints. The selected endpoints will be those closest to the cursor when the track is selected.
+First, we will select Easements None and then select Join
END
STEP
-COMMAND Join
+PARAMETER misc cmdEasement
+PARAMETER easement val 0.0
+BIGPAUSE
+PARAMETER easement ok
+COMMAND JoinTrack
+STEP
+MESSAGE
+_____________________________________________________
+
+Now we select two points on the tracks
+END
+MOUSE 1 16.583 10.417
MOUSE 2 16.583 10.417
MOUSE 4 16.583 10.417
+MOUSE 1 17.083 4.583
MOUSE 2 17.083 4.583
MESSAGE
_________________________________________
@@ -57,5 +70,213 @@ MOUSE 4 -0.667 2.750
MESSAGE
=========================================
END
+REGRESSION START 11 - join straights - simple
+STRAIGHT 1 0 0 0 0 DEMO 2
+ T4 3 -0.667000 4.466667 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 37.133333 4.466667 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 2 0 0 0 0 DEMO 2
+ T4 3 0.206517 1.112893 240.802413 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 27.383333 16.300000 60.802413 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 3 0 0 0 0 DEMO 2 -0.667000 2.676023 0 1.790644 0 0.000000 0.000000
+ T4 2 0.206517 1.112893 60.802413 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 1 -0.667000 4.466667 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
STEP
CLEAR
+PARAMETER misc cmdUndo
+MESSAGE
+Now we will do this with Cornu Easements
+
+First, we will select Easements Cornu and then select Join
+END
+STEP
+PARAMETER misc cmdEasement
+PARAMETER easement val -1.0
+BIGPAUSE
+PARAMETER easement ok
+COMMAND JoinTrack
+STEP
+MESSAGE
+_____________________________________________________
+
+Now we again select two points on the tracks
+END
+MOUSE 1 16.583 10.417
+MOUSE 2 16.583 10.417
+MOUSE 4 16.583 10.417
+MOUSE 1 17.083 4.583
+MOUSE 2 17.083 4.583
+MESSAGE
+_________________________________________
+
+A connecting cornu is drawn between the two tracks. Notice how it behaves as the cursor is dragged along the second track.
+END
+STEP
+MOUSE 3 17.167 4.583
+MOUSE 3 21.917 4.583
+BIGPAUSE
+MOUSE 3 21.917 4.583
+MOUSE 3 14.833 4.250
+MESSAGE
+_________________________________________
+
+Note that either tracks can be extended if you move past the end of it.
+END
+STEP
+MOUSE 3 14.750 4.250
+MOUSE 3 9.000 4.000
+MESSAGE
+_________________________________________
+
+Notice this time what happens if you drag past the intersection points of the two tracks.
+END
+STEP
+MOUSE 3 8.833 4.000
+MOUSE 3 -0.667 2.750
+MESSAGE
+_________________________________________
+
+This is more useful because you can move the other end as well.
+END
+STEP
+MOUSE 4 -0.667 2.750
+MOUSE 1 16.583 10.417
+MOUSE 2 16.583 10.417
+MOUSE 3 26.900 15.800
+MOUSE 4 26.900 15.800
+MESSAGE
+_________________________________________
+
+You can add a pin to constrain the Cornu Curve to pass through it.
+END
+STEP
+MOUSE 1 16.400 12.680
+MOUSE 2 16.400 12.680
+MOUSE 3 20.000 10.500
+MOUSE 4 20.000 10.500
+MOUSE 8200 20.000 10.500
+MESSAGE
+=========================================
+END
+REGRESSION START 12 - join straights cornu
+# ../share/xtrkcad/demos/dmjnss.xtr - 151
+STRAIGHT 1 0 0 0 0 DEMO 2
+ T4 5 -0.667000 4.466667 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 37.133333 4.466667 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END$SEGS
+STRAIGHT 2 0 0 0 0 DEMO 2
+ T4 4 26.802098 15.975192 240.802413 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 27.383333 16.300000 60.802413 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END$SEGS
+CORNU 4 0 0 0 0 DEMO 2 26.802098 15.975192 60.802413 0.000000 0.000000 0.000000 20.000000 10.500000 227.332778 50.468495 -14.204474 47.609607
+ T4 2 26.802098 15.975192 60.802413 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 20.000000 10.500000 227.332778 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ W3 0 0.000000 26.802098 15.975192 26.164180 15.618707 25.528914 15.255902 24.922701 14.847824
+ SUBSEGS
+ C 0 0.000000 -26.451833 39.457674 -7.252719 326.668083 4.748448
+ SUBSEND
+ W3 0 0.000000 24.922701 14.847824 24.316487 14.439746 23.739315 13.989295 23.188205 13.509400
+ SUBSEGS
+ C 0 0.000000 -17.691771 34.842861 0.198961 318.794523 7.099752
+ SUBSEND
+ W3 0 0.000000 23.188205 13.509400 22.085986 12.549608 21.074671 11.490540 20.000000 10.500000
+ SUBSEGS
+ C 0 0.000000 -65.215805 66.730294 -35.041479 315.224174 2.888986
+ S 0 0.000000 20.796534 11.253132 20.000000 10.500000
+ SUBSEND
+ END$SEGS
+CORNU 5 0 0 0 0 DEMO 2 20.000000 10.500000 47.332778 50.468495 -14.204474 47.609607 -0.667000 4.466667 90.000000 0.000000 0.000000 0.000000
+ T4 4 20.000000 10.500000 47.332778 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 1 -0.667000 4.466667 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ W3 0 0.000000 20.000000 10.500000 19.318543 9.871891 18.615306 9.263690 17.848611 8.743033
+ SUBSEGS
+ C 0 0.000000 18.778714 7.078653 24.126404 136.521306 8.482677
+ SUBSEND
+ W3 0 0.000000 17.848611 8.743033 17.081916 8.222376 16.252171 7.790276 15.373060 7.496902
+ SUBSEGS
+ C 0 0.000000 10.145390 12.091979 17.097082 145.429938 15.701023
+ SUBSEND
+ W3 0 0.000000 15.373060 7.496902 14.493949 7.203529 13.567965 7.050061 12.641194 7.049336
+ SUBSEGS
+ C 0 0.000000 8.670868 12.623232 15.720186 161.510300 18.371006
+ SUBSEND
+ W3 0 0.000000 12.641194 7.049336 11.714424 7.048612 10.789413 7.199895 9.904422 7.475023
+ SUBSEGS
+ C 0 0.000000 9.217472 12.673408 16.266752 180.200242 17.281760
+ SUBSEND
+ W3 0 0.000000 9.904422 7.475023 9.019431 7.750151 8.175230 8.147494 7.376550 8.617616
+ SUBSEGS
+ C 0 0.000000 12.069936 13.578894 18.972049 197.723979 13.197787
+ SUBSEND
+ W3 0 0.000000 7.376550 8.617616 6.577870 9.087738 5.823862 9.629917 5.087234 10.192309
+ SUBSEGS
+ C 0 0.000000 23.166639 19.337296 28.457820 211.083842 6.876168
+ SUBSEND
+ W3 0 0.000000 5.087234 10.192309 3.613980 11.317093 2.191863 12.536086 0.541165 13.379184
+ SUBSEGS
+ S 0 0.000000 5.087234 10.192309 2.880741 11.891379
+ C 0 0.000000 -16.933355 -7.345233 -1.605583 27.757576 9.391814
+ SUBSEND
+ W3 0 0.000000 0.541165 13.379184 -0.284188 13.800738 -1.164915 14.124119 -2.079569 14.273530
+ SUBSEGS
+ C 0 0.000000 -8.978407 -3.634267 5.430753 9.971577 17.742051
+ SUBSEND
+ W3 0 0.000000 -2.079569 14.273530 -2.536896 14.348235 -3.001703 14.379353 -3.464645 14.358998
+ SUBSEGS
+ C 0 0.000000 -6.758837 -3.186180 7.605900 357.638745 11.784606
+ SUBSEND
+ W3 0 0.000000 -3.464645 14.358998 -3.927586 14.338644 -4.388609 14.266672 -4.833991 14.138748
+ SUBSEGS
+ C 0 0.000000 -5.903451 -3.218328 8.460688 344.116575 13.492114
+ SUBSEND
+ W3 0 0.000000 -4.833991 14.138748 -5.279372 14.010825 -5.708973 13.826821 -6.106104 13.588042
+ SUBSEGS
+ C 0 0.000000 -5.320524 -3.374332 9.022365 329.106732 14.970290
+ SUBSEND
+ W3 0 0.000000 -6.106104 13.588042 -6.503235 13.349262 -6.867684 13.055650 -7.182439 12.715565
+ SUBSEGS
+ C 0 0.000000 -4.925324 -3.573613 9.363671 312.886078 16.171430
+ SUBSEND
+ W3 0 0.000000 -7.182439 12.715565 -7.497194 12.375479 -7.762017 11.988983 -7.963009 11.571453
+ SUBSEGS
+ C 0 0.000000 -4.672075 -3.755935 9.539505 295.779781 17.047949
+ SUBSEND
+ W3 0 0.000000 -7.963009 11.571453 -8.164001 11.153923 -8.300973 10.705552 -8.366415 10.246808
+ SUBSEGS
+ C 0 0.000000 -4.537825 -3.874548 9.602610 278.161379 17.552270
+ SUBSEND
+ W3 0 0.000000 -8.366415 10.246808 -8.431857 9.788063 -8.425704 9.319225 -8.348802 8.862263
+ SUBSEGS
+ C 0 0.000000 -4.516107 -3.895246 9.611300 260.452854 17.636670
+ SUBSEND
+ W3 0 0.000000 -8.348802 8.862263 -8.271900 8.405300 -8.124342 7.960494 -7.915133 7.547020
+ SUBSEGS
+ C 0 0.000000 -4.616507 -3.797243 9.633913 243.124710 17.253123
+ SUBSEND
+ W3 0 0.000000 -7.915133 7.547020 -7.705924 7.133547 -7.435288 6.751601 -7.117962 6.413912
+ SUBSEGS
+ C 0 0.000000 -4.870580 -3.573517 9.754490 226.696048 16.353154
+ SUBSEND
+ W3 0 0.000000 -7.117962 6.413912 -6.800636 6.076224 -6.436897 5.782850 -6.043374 5.538171
+ SUBSEGS
+ C 0 0.000000 -5.350011 -3.229346 10.088321 211.734607 14.887748
+ SUBSEND
+ W3 0 0.000000 -6.043374 5.538171 -5.649850 5.293492 -5.226774 5.097437 -4.788767 4.946181
+ SUBSEGS
+ C 0 0.000000 -6.219072 -2.778742 10.831473 198.856757 12.807357
+ SUBSEND
+ W3 0 0.000000 -4.788767 4.946181 -4.350759 4.794925 -3.897938 4.688337 -3.440233 4.615986
+ SUBSEGS
+ C 0 0.000000 -7.915867 -2.239129 12.440198 188.727410 10.062079
+ SUBSEND
+ W3 0 0.000000 -3.440233 4.615986 -2.524822 4.471284 -1.593777 4.466669 -0.667000 4.466667
+ SUBSEGS
+ C 0 0.000000 -14.358484 -1.395250 18.828097 179.869603 8.318495
+ S 0 0.000000 -1.362572 4.469650 -0.667000 4.466667
+ SUBSEND
+ END$SEGS
+REGRESSION END
+STEP
diff --git a/app/lib/demos/dmjntt.xtr b/app/lib/demos/dmjntt.xtr
index 7835299..fa1d4f9 100644
--- a/app/lib/demos/dmjntt.xtr
+++ b/app/lib/demos/dmjntt.xtr
@@ -16,14 +16,22 @@ REDRAW
MESSAGE
You can connect from any track to a turntable
-Note: you cannot have a turntable as your first connection point.
+With a Cornu Easement you can have a turntable as the first point.
+
END
STEP
RESET
-COMMAND Join
+PARAMETER misc cmdEasement
+PARAMETER easement val -1.0
+BIGPAUSE
+PARAMETER easement ok
+COMMAND JoinTrack
+MOUSE 1 17.833 10.167
MOUSE 2 17.833 10.167
-MOUSE 4 17.833 10.167
+MOUSE 3 15.833 10.000
+MOUSE 4 15.833 10.000
BIGPAUSE
+MOUSE 1 22.000 8.167
MOUSE 2 22.000 8.167
BIGPAUSE
MOUSE 3 21.750 6.417
@@ -32,7 +40,7 @@ _________________________________________
You cannot place the connecting track too close to an existing stall track. How close you can get is controlled by the Turntable Angle on the Setup dialog.
-In this example it is set to 7.5 degrees.
+In this example it is set to 15 degrees.
END
STEP
MOUSE 3 21.750 6.167
@@ -41,7 +49,7 @@ BIGPAUSE
MOUSE 3 22.083 5.417
MOUSE 3 21.750 6.000
BIGPAUSE
-MOUSE 3 21.750 5.917
+MOUSE 3 21.750 5.00
MOUSE 3 22.083 4.833
MESSAGE
_________________________________________
@@ -103,7 +111,7 @@ MOUSE 3 30.250 8.083
MESSAGE
_________________________________________
-Now the cursor will be moved within the turntable. Notice the error message.
+Now the cursor will be moved within the turntable, but the end stays on the edge of the well.
END
BIGPAUSE
MOUSE 3 29.917 8.000
@@ -150,24 +158,14 @@ MOUSE 3 22.083 10.333
MOUSE 3 22.000 10.000
MOUSE 3 21.833 9.667
MOUSE 3 21.833 9.417
-MOUSE 3 21.750 9.167
-MOUSE 3 21.667 8.917
-MOUSE 3 21.667 8.667
-MOUSE 3 21.583 8.500
-MOUSE 3 21.500 8.333
-MOUSE 3 21.333 8.167
-MOUSE 3 21.333 8.000
-MOUSE 3 21.333 7.917
-MOUSE 3 21.250 7.917
-MOUSE 3 21.250 7.833
-MOUSE 3 21.333 7.833
MESSAGE
_________________________________________
All done.
END
BIGPAUSE
-MOUSE 4 21.333 7.833
+MOUSE 4 21.333 9.417
+MOUSE 8200 21.333 9.417
MESSAGE
=========================================
END
diff --git a/app/lib/demos/dmlines.xtr b/app/lib/demos/dmlines.xtr
index c37246c..9f2b66f 100644
--- a/app/lib/demos/dmlines.xtr
+++ b/app/lib/demos/dmlines.xtr
@@ -1,6 +1,6 @@
VERSION 2
DEMOINIT
-ORIG 4.000 0.000 0.000
+ORIG 2.000 0.000 0.000
PARAMETER display labelenable 4
STRAIGHT 1 DEMO 1
E 0.051703 4.160000 270.000000
@@ -47,37 +47,46 @@ MESSAGE
_________________________________________
Lines are drawn by clicking at the starting postion and dragging to the final position.
+
+By default, the new line will snap to existing objects. Hold down the <Ctrl> and <Alt> keys to prevent this from happening.
END
STEP
+KEYSTATE 12
MOUSE 2 0.533 4.693
+KEYSTATE 12
MOUSE 3 4.320 4.693
+KEYSTATE 12
MOUSE 4 4.320 4.693
+KEYSTATE 12
MOUSE 2 4.373 4.693
+KEYSTATE 12
MOUSE 3 4.533 5.120
+KEYSTATE 12
MOUSE 4 4.533 5.120
-MOUSE 2 0.267 5.120
-MOUSE 3 0.587 4.747
-MOUSE 4 0.587 4.747
+KEYSTATE 12
+MOUSE 2 0.533 4.693
+KEYSTATE 12
+MOUSE 3 0.533 4.693
+KEYSTATE 12
+MOUSE 4 0.267 5.120
+KEYSTATE 12
MOUSE 2 0.267 3.253
+KEYSTATE 12
MOUSE 3 0.533 3.787
+KEYSTATE 12
MOUSE 4 0.533 3.787
-MESSAGE
-_________________________________________
-
-Drawing lines with the Shift key held down will use the previous line End-Point as the starting position. This makes it easy to draw connected lines.
-END
STEP
-KEYSTATE 2
-MOUSE 2 3.520 3.680
-KEYSTATE 2
+KEYSTATE 12
+MOUSE 2 0.533 3.787
+KEYSTATE 12
MOUSE 3 4.320 3.787
-KEYSTATE 2
+KEYSTATE 12
MOUSE 4 4.320 3.787
-KEYSTATE 2
-MOUSE 2 4.533 3.307
-KEYSTATE 2
+KEYSTATE 12
+MOUSE 2 4.320 3.787
+KEYSTATE 12
MOUSE 3 4.533 3.307
-KEYSTATE 2
+KEYSTATE 12
MOUSE 4 4.533 3.307
MESSAGE
_________________________________________
@@ -85,25 +94,17 @@ _________________________________________
You also draw in various colors and line widths.
END
PARAMETER draw linecolor 255
-PARAMETER draw linewidth 2
+PARAMETER draw linewidth 6
STEP
MOUSE 2 0.747 4.800
MOUSE 4 0.693 6.560
-KEYSTATE 2
MOUSE 2 0.693 6.560
-KEYSTATE 2
MOUSE 4 1.493 7.573
-KEYSTATE 2
MOUSE 2 1.547 7.573
-KEYSTATE 2
MOUSE 4 3.147 7.467
-KEYSTATE 2
-MOUSE 2 3.787 6.773
-KEYSTATE 2
+MOUSE 2 3.147 7.467
MOUSE 4 4.213 5.813
-KEYSTATE 2
-MOUSE 2 4.107 5.173
-KEYSTATE 2
+MOUSE 2 4.207 5.800
MOUSE 4 4.107 4.693
MESSAGE
_________________________________________
@@ -114,6 +115,7 @@ Here we will draw a Curve by dragging from one End-Point to the other to define
END
STEP
COMMAND DrawCurveChord
+KEYSTATE 12
MOUSE 2 0.800 3.680
#MOUSE 3 0.800 3.573
#MOUSE 3 0.853 3.467
@@ -172,9 +174,12 @@ MOUSE 2 0.800 3.680
#MOUSE 3 3.947 3.680
#MOUSE 3 3.947 3.733
#MOUSE 3 3.947 3.787
+KEYSTATE 12
MOUSE 4 4.107 3.787
BIGPAUSE
+KEYSTATE 12
MOUSE 2 2.9 3.78
+KEYSTATE 12
MOUSE 4 2.9 1.5
MESSAGE
_________________________________________
@@ -207,17 +212,88 @@ MOUSE 2 11.307 6.400
MOUSE 4 11.307 6.400
#BIGPAUSE
#PARAMETER misc cmdDelete
+KEYSTATE 4
MOUSE 2 4.160 5.493
+KEYSTATE 4
MOUSE 4 4.160 5.493
#BIGPAUSE
#PARAMETER misc cmdDelete
+KEYSTATE 4
MOUSE 2 3.467 6.933
+KEYSTATE 4
MOUSE 4 3.467 6.933
BIGPAUSE
PARAMETER misc cmdDelete
MESSAGE
=========================================
END
+REGRESSION START 10 - lines
+STRAIGHT 1 0 0 0 0 DEMO 2
+ E4 0.051703 4.160000 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 4.533333 4.160000 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 2 0 0 0 0 DEMO 2 4.533333 4.160000 0 0.000000 "Peco-55 Medium Left SL-E395F"
+ T4 1 4.533333 4.160000 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 9.938333 4.160000 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 6 9.903333 3.638000 99.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
+ S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
+ END
+STRAIGHT 3 0 0 0 0 DEMO 2
+ E4 31.466667 4.160000 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 9.938333 4.160000 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 4 0 0 0 0 DEMO 2
+ E4 31.466667 2.660000 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 16.693333 2.660000 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 5 0 0 0 0 DEMO 2 16.693333 15.171003 0 12.511003 0 0.000000 0.000000
+ T4 4 16.693333 2.660000 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 6 14.588376 2.838349 279.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 6 0 0 0 0 DEMO 2
+ T4 2 9.903333 3.638000 279.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 14.588376 2.838349 99.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+DRAW 7 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 0 0.000000 0.533000 4.693000 0 4.320000 4.693000 0
+ END
+DRAW 8 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 0 0.000000 4.373000 4.693000 0 4.533000 5.120000 0
+ END
+DRAW 9 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 0 0.000000 0.533000 4.693000 0 0.267000 5.120000 0
+ END
+DRAW 10 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 0 0.000000 0.267000 3.253000 0 0.533000 3.787000 0
+ END
+DRAW 11 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 0 0.000000 0.533000 3.787000 0 4.320000 3.787000 0
+ END
+DRAW 12 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 0 0.000000 4.320000 3.787000 0 4.533000 3.307000 0
+ END
+DRAW 13 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 255 0.083333 0.747000 4.693000 0 0.693000 6.560000 0
+ END
+DRAW 14 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 255 0.083333 0.693000 6.560000 0 1.493000 7.573000 0
+ END
+DRAW 15 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 255 0.083333 1.493000 7.573000 0 3.147000 7.467000 0
+ END
+DRAW 18 0 0 0 0 0.000000 0.000000 0 0.000000
+ A3 255 0.083333 1.732465 2.470132 3.219463 0 70.877480 214.538653
+ END
+DRAW 20 0 0 0 0 0.000000 0.000000 0 0.000000
+ A3 8421376 0.083333 1.288417 8.533000 5.920000 0 0.000000 360.000000
+ END
+REGRESSION END
STEP
CLEAR
RESET
diff --git a/app/lib/demos/dmlines2.xtr b/app/lib/demos/dmlines2.xtr
index 11837ae..13f43b3 100644
--- a/app/lib/demos/dmlines2.xtr
+++ b/app/lib/demos/dmlines2.xtr
@@ -1,13 +1,13 @@
VERSION 7
DEMOINIT
-ORIG 4.000 0.000 0.000
+ORIG 2.000 0.000 2.000
PARAMETER display labelenable 4
PARAMETER display description-fontsize 24
-STRAIGHT 1 0 0 0 0 DEMO -1
+STRAIGHT 1 0 0 0 0 DEMO 2
E 0.051703 4.160000 270.000000
T 2 4.533333 4.160000 90.000000
END
-TURNOUT 2 0 0 0 0 DEMO -1 4.533333 4.160000 0.000000 "Peco-55 Medium Right SL-E395F"
+TURNOUT 2 0 0 0 0 DEMO 2 4.533333 4.160000 0.000000 "Peco-55 Medium Right SL-E395F"
T 1 4.533333 4.160000 270.000000
T 3 9.938333 4.160000 90.000000
T 6 9.903333 3.638000 99.686000
@@ -19,19 +19,19 @@ TURNOUT 2 0 0 0 0 DEMO -1 4.533333 4.160000 0.000000 "Peco-55 Medium Right SL-E
C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
END
-STRAIGHT 3 0 0 0 0 DEMO -1
+STRAIGHT 3 0 0 0 0 DEMO 2
E 31.466667 4.160000 90.000000
T 2 9.938333 4.160000 270.000000
END
-STRAIGHT 4 0 0 0 0 DEMO -1
+STRAIGHT 4 0 0 0 0 DEMO 2
E 31.466667 2.660000 90.000000
T 5 16.693333 2.660000 270.000000
END
-CURVE 5 0 0 0 0 DEMO -1 16.693333 15.171003 12.511003
+CURVE 5 0 0 0 0 DEMO 2 16.693333 15.171003 12.511003
T 4 16.693333 2.660000 90.000000
T 6 14.588376 2.838349 279.686000
END
-STRAIGHT 6 0 0 0 0 DEMO -1
+STRAIGHT 6 0 0 0 0 DEMO 2
T 2 9.903333 3.638000 279.686000
T 5 14.588376 2.838349 99.686000
END
@@ -132,9 +132,9 @@ MOUSE 8200 0.316 8.842
MESSAGE
_________________________________________
-A Polygon is drawn in the same way
+A filled Polygon is drawn in the same way.
END
-COMMAND DrawPolygon
+COMMAND DrawFilledPolygon
PARAMETER draw linecolor 65280
STEP
MOUSE 2 0.579 6.211
@@ -147,14 +147,20 @@ MOUSE 2 4.053 6.684
MOUSE 4 4.053 6.684
MOUSE 2 4.263 5.000
MOUSE 4 4.263 5.000
-MOUSE 2 4.474 5.211
-MOUSE 4 4.474 5.211
+MOUSE 2 4.494 5.211
+MOUSE 4 4.494 5.211
MOUSE 2 6.053 5.211
MOUSE 4 6.053 5.211
MOUSE 2 5.789 8.737
MOUSE 4 5.789 8.737
MOUSE 2 0.421 8.684
MOUSE 4 0.421 8.684
+MESSAGE
+_________________________________________
+
+When you are finished, press the <Space> key to complete the polygon.
+END
+STEP
MOUSE 8200 0.421 8.684
MESSAGE
_________________________________________
@@ -178,7 +184,7 @@ _________________________________________
Filled Boxes and Circles work the same as line Boxes and Circles.
END
-COMMAND DrawFilledCircleCenter
+COMMAND DrawFilledCircleTangent
PARAMETER draw linecolor 16776960
BIGPAUSE
MOUSE 2 7.360 6.45333
@@ -193,5 +199,124 @@ RESET
MESSAGE
=========================================
END
+REGRESSION START 10 - lines2
+DRAW 24 0 0 0 0 0.000000 0.000000 0 0.000000
+ Y4 32768 0.000000 9 2
+ 0.640000 6.070000 0
+ 1.170000 7.250000 0
+ 2.710000 7.610000 0
+ 4.040000 6.570000 0
+ 4.250000 4.770000 0
+ 4.560000 5.210000 0
+ 5.920000 5.210000 0
+ 5.920000 8.840000 0
+ 0.316000 8.842000 0
+ END
+STRAIGHT 1 0 0 0 0 DEMO 2
+ E4 0.051703 4.160000 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 4.533333 4.160000 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 2 0 0 0 0 DEMO 2 4.533333 4.160000 0 0.000000 "Peco-55 Medium Right SL-E395F"
+ T4 1 4.533333 4.160000 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 9.938333 4.160000 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 6 9.903333 3.638000 99.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
+ S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
+ END
+STRAIGHT 3 0 0 0 0 DEMO 2
+ E4 31.466667 4.160000 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 9.938333 4.160000 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 4 0 0 0 0 DEMO 2
+ E4 31.466667 2.660000 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 16.693333 2.660000 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 5 0 0 0 0 DEMO 2 16.693333 15.171003 0 12.511003 0 0.000000 0.000000
+ T4 4 16.693333 2.660000 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 6 14.588376 2.838349 279.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 6 0 0 0 0 DEMO 2
+ T4 2 9.903333 3.638000 279.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 14.588376 2.838349 99.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+DRAW 7 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 0 0.000000 0.533333 4.693333 0 4.320000 4.693333 0
+ END
+DRAW 8 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 0 0.000000 4.373333 4.693333 0 4.533333 5.120000 0
+ END
+DRAW 9 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 0 0.000000 0.266667 5.120000 0 0.586667 4.746667 0
+ END
+DRAW 10 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 0 0.000000 0.266667 3.253333 0 0.533333 3.786667 0
+ END
+DRAW 11 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 0 0.000000 0.533333 3.786667 0 4.320000 3.786667 0
+ END
+DRAW 12 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 0 0.000000 4.320000 3.786667 0 4.533333 3.306667 0
+ END
+DRAW 13 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 255 0.106667 0.746667 4.800000 0 0.746667 6.080000 0
+ END
+DRAW 14 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 255 0.106667 0.746667 6.080000 0 1.226667 7.200000 0
+ END
+DRAW 15 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 255 0.106667 1.226667 7.200000 0 2.720000 7.520000 0
+ END
+DRAW 16 0 0 0 0 0.000000 0.000000 0 0.000000
+ A3 255 0.106667 1.581026 2.368375 3.879611 0 93.370222 169.376584
+ END
+DRAW 17 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 8421376 0.106667 11.413333 4.960000 0 20.106667 4.960000 0
+ END
+DRAW 18 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 8421376 0.106667 20.106667 4.960000 0 20.106667 7.680000 0
+ END
+DRAW 19 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 8421376 0.106667 20.106667 7.680000 0 11.413333 7.680000 0
+ END
+DRAW 20 0 0 0 0 0.000000 0.000000 0 0.000000
+ A3 8421376 0.106667 0.812349 7.360000 6.453333 0 0.000000 360.000000
+ END
+DRAW 21 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 255 0.105263 2.736842 7.473684 0 3.947368 6.526316 0
+ END
+DRAW 22 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 255 0.105263 3.947368 6.526316 0 4.157895 4.684211 0
+ END
+DRAW 23 0 0 0 0 0.000000 0.000000 0 0.000000
+ L3 8421376 0.105263 11.473684 7.736842 0 11.473684 5.000000 0
+ END
+DRAW 25 0 0 0 0 0.000000 0.000000 0 0.000000
+ F4 65280 0.000000 9 0
+ 0.579000 6.211000 0
+ 1.211000 7.421000 0
+ 2.684000 7.789000 0
+ 4.053000 6.684000 0
+ 4.263000 5.000000 0
+ 4.494000 5.211000 0
+ 6.053000 5.211000 0
+ 5.789000 8.737000 0
+ 0.554570 8.685319 0
+ END
+DRAW 26 0 0 0 0 0.000000 0.000000 0 0.000000
+ G3 16776960 0.000000 0.737930 7.360000 6.453330 0
+ END
+DRAW 27 0 0 0 0 0.000000 0.000000 0 0.000000
+ F4 16776960 0.000000 4 1
+ 11.530000 7.630000 0
+ 20.000000 7.630000 0
+ 20.000000 5.030000 0
+ 11.530000 5.030000 0
+ END
+REGRESSION END
STEP
CLEAR
diff --git a/app/lib/demos/dmmouse.xtr b/app/lib/demos/dmmouse.xtr
index 9bf8e97..295db36 100644
--- a/app/lib/demos/dmmouse.xtr
+++ b/app/lib/demos/dmmouse.xtr
@@ -4,187 +4,54 @@ ORIG 12.000 0.000 0.000
PARAMETER display description-fontsize 18
REDRAW
RESET
-MOUSE 1 0.160 1.120
+MOUSE 1 1.5 1.5
MESSAGE
-In the drawing area of the main window you can see an hollow arrow which represents the mouse cursor. In this demo the mouse will move about to show you the actions of different commands.
+In the drawing area of the main window you can see an hollow upwards arrow which represents the mouse cursor. In this demo the mouse will move about to show you the actions of different commands.
The hollow arrow represents the mouse cursor without a mouse button being pressed.
END
STEP
-MOUSE 1 0.480 1.280
-MOUSE 1 1.440 1.920
-MOUSE 1 2.080 2.560
-MOUSE 1 2.240 2.720
-MOUSE 1 2.400 2.880
-MOUSE 1 2.560 3.040
-MOUSE 1 2.720 3.040
-MOUSE 1 3.040 3.200
-MOUSE 1 3.040 3.360
-MOUSE 1 3.360 3.520
-MOUSE 1 3.520 3.680
-MOUSE 1 3.680 3.680
-MOUSE 1 4.000 3.840
-MOUSE 1 4.160 4.000
-MOUSE 1 4.320 4.160
-MOUSE 1 4.480 4.160
-MOUSE 1 4.480 4.320
-MOUSE 1 4.640 4.320
-MOUSE 1 4.800 4.480
-MOUSE 1 5.120 4.640
-MOUSE 1 5.280 4.800
-MOUSE 1 5.440 4.960
-MOUSE 1 5.600 5.120
-MOUSE 1 5.920 5.280
-MOUSE 1 6.080 5.600
-MOUSE 1 6.400 5.600
-MOUSE 1 6.560 5.920
-MOUSE 1 6.880 6.080
-MOUSE 1 7.040 6.240
-MOUSE 1 7.200 6.400
-MOUSE 1 7.520 6.560
-MOUSE 1 8.160 7.200
-MOUSE 1 8.480 7.360
-MOUSE 1 9.120 8.000
-MOUSE 1 9.280 8.160
-MOUSE 1 9.440 8.320
-MOUSE 1 9.760 8.480
-MOUSE 1 9.920 8.800
-MOUSE 1 10.240 8.960
-MOUSE 1 10.560 9.120
-MOUSE 1 11.200 10.080
-MOUSE 1 12.160 10.400
-MOUSE 1 12.800 11.040
-MOUSE 1 13.440 11.680
-MOUSE 1 13.760 11.840
-MOUSE 1 13.920 12.000
-MOUSE 1 14.080 12.160
-MOUSE 1 14.240 12.320
-MOUSE 1 14.880 12.960
-MOUSE 1 15.200 13.120
-MOUSE 1 15.360 13.280
-MOUSE 1 16.000 13.920
-MOUSE 1 16.320 14.080
-MOUSE 1 16.960 14.720
-MOUSE 1 17.280 14.880
-MOUSE 1 17.600 15.040
-MOUSE 1 17.760 15.200
-MOUSE 1 18.400 15.840
-MOUSE 1 18.720 16.000
-MOUSE 1 19.360 16.640
-MOUSE 1 19.520 16.800
-MOUSE 1 19.680 16.960
-MOUSE 1 20.000 17.120
-MOUSE 1 20.160 17.280
-MOUSE 1 20.320 17.440
-MOUSE 1 20.640 17.600
-MOUSE 1 20.800 17.920
-MOUSE 1 21.120 18.080
-MOUSE 1 21.440 18.240
-MOUSE 1 21.600 18.400
-MOUSE 1 21.760 18.560
-MOUSE 1 21.920 18.720
-MOUSE 1 22.080 18.880
-MOUSE 1 22.240 19.040
-MOUSE 1 22.560 19.200
-MOUSE 1 22.880 19.360
-MOUSE 1 23.040 19.520
-MOUSE 1 23.200 19.680
-MOUSE 1 23.360 19.840
-MOUSE 1 23.520 20.000
-MOUSE 1 23.680 20.160
-MOUSE 1 24.000 20.160
-MOUSE 1 24.160 20.320
-MOUSE 1 24.160 20.480
-MOUSE 1 24.320 20.640
-MOUSE 1 24.480 20.800
-MOUSE 1 24.640 20.800
-MOUSE 1 25.280 21.440
-MOUSE 1 25.440 21.600
-MOUSE 1 25.600 21.760
-MOUSE 1 25.760 21.760
-MOUSE 1 25.920 21.920
-MOUSE 1 26.080 22.080
-MOUSE 1 26.240 22.240
-MOUSE 1 26.560 22.400
-MOUSE 1 26.720 22.720
-MOUSE 1 26.880 22.720
-MOUSE 1 27.040 22.880
-MOUSE 1 27.200 23.040
-MOUSE 1 27.360 23.200
-MOUSE 1 27.520 23.360
-MOUSE 1 27.680 23.520
-MOUSE 1 27.840 23.520
-MOUSE 1 28.000 23.680
-MOUSE 1 28.160 23.840
-MOUSE 1 28.320 24.000
-MOUSE 1 28.480 24.160
-MOUSE 1 28.800 24.320
-MOUSE 1 29.120 24.480
-MOUSE 1 29.280 24.800
-MOUSE 1 29.440 24.800
-MOUSE 1 29.600 24.960
-MOUSE 1 29.760 25.120
-MOUSE 1 29.920 25.440
-MOUSE 1 30.080 25.440
-MOUSE 1 30.400 25.600
-MOUSE 1 30.560 25.760
-MOUSE 1 30.720 25.920
-MOUSE 1 31.040 26.080
-MOUSE 1 31.200 26.240
-MOUSE 1 31.520 26.400
-MOUSE 1 31.680 26.560
-MOUSE 1 31.840 26.560
-MOUSE 1 32.160 26.720
-MOUSE 1 32.320 26.880
-MOUSE 1 32.480 26.880
-MOUSE 1 32.640 26.880
-MOUSE 1 32.640 27.040
-MOUSE 1 32.800 27.040
-MOUSE 1 32.960 27.200
-MOUSE 1 33.280 27.360
-MOUSE 1 33.600 27.520
-MOUSE 1 33.760 27.680
-MOUSE 1 33.920 27.680
-MOUSE 1 34.080 27.840
-MOUSE 1 34.240 28.000
-MOUSE 1 34.400 28.000
MOUSE 1 34.560 28.000
CLEAR
MESSAGE
-When the left mouse button would be pressed, the mouse cursor appears to flash and the hollow arrow is replaced by a solid red arrow. While the left button is pressed the mouse cursor will be a solid arrow.
+When the left mouse button would be pressed, the mouse cursor appears to flash and the hollow arrow is replaced by a solid left-pointing red arrow while the button is pressed.
Note: these color changes occur only during the demo to simulate mouse button presses.
END
STEP
MOUSE 2 34.560 28.000
-RESET
-BIGPAUSE
+#RESET
MESSAGE
_________________________________________
Moving the mouse while a mouse button is pressed is called 'dragging'.
END
-BIGPAUSE
-MOUSE 3 34.400 28.000
+STEP
MOUSE 3 36.160 4.000
-RESET
+#RESET
MESSAGE
_________________________________________
-When the left mouse button is released, the mouse cursor flashes and the hollow arrow is restored.
+When the left mouse button is released, the mouse cursor flashes and the hollow up black arrow is restored.
END
STEP
MOUSE 4 36.160 4.000
+RESET
MESSAGE
_________________________________________
-Dragging with the right button is simulated by a blue solid cursor.
+Dragging with the right button is simulated by a blue right-facing solid cursor.
END
-BIGPAUSE
+STEP
MOUSE 5 36.160 4.000
-BIGPAUSE
MOUSE 6 3.680 4.800
-BIGPAUSE
+#RESET
+MESSAGE
+__________________________________________
+
+Release Right Click
+END
+STEP
MOUSE 7 3.680 4.800
RESET
MESSAGE
@@ -193,15 +60,72 @@ END
STEP
CLEAR
MESSAGE
-Sometimes the Shift key is held down while using the mouse for a Shift-Click or a Shift-Drag.
+Sometimes the Shift key is held down while using the mouse
+
+This is indicated by an outlined arrow with the letter S near the arrow.
+END
+STEP
+KEYSTATE 2
+MOUSE 1 7.520 26.080
+RESET
+MESSAGE
+__________________________________________
+
+The left mouse button is held down with the Shift and dragged for a Left-Shift-Drag.
-This is indicated by an outline drawn around the solid arrow.
END
STEP
KEYSTATE 2
-MOUSE 2 3.680 4.800
+MOUSE 2 7.520 26.080
+KEYSTATE 2
+MOUSE 3 7.520 4.800
KEYSTATE 2
-MOUSE 4 7.520 26.080
+MOUSE 4 7.520 4.800
+STEP
+CLEAR
+MESSAGE
+___________________________________________
+
+Sometimes the Control key is held down while using the mouse.
+
+This is indicated with an upward filled arrow head with the letter C near the arrow
+
+END
+STEP
+KEYSTATE 4
+MOUSE 1 7.520 26.080
+RESET
+MESSAGE
+__________________________________________
+
+If while the Control is held the Left mouse button is held down it is a Ctrl-Move and a Ctrl-Left-Drag.
+
+This is indicated by an an left-facing open-headed arrow with the letter C near it.
+
+END
+STEP
+KEYSTATE 4
+MOUSE 2 7.520 26.080
+KEYSTATE 4
+MOUSE 3 3.680 4.800
+KEYSTATE 4
+MOUSE 4 3.680 4.800
+RESET
+MESSAGE
+___________________________________________
+
+You can also use the Control key with the Right mouse button.
+
+This is indicated with a right-facing filled arrow with an open arrow head and the letter C near the arrow
+
+END
+STEP
+KEYSTATE 4
+MOUSE 5 3.680 4.080
+KEYSTATE 4
+MOUSE 6 26.520 26.080
+KEYSTATE 4
+MOUSE 7 26.520 26.080
RESET
MESSAGE
=========================================
diff --git a/app/lib/demos/dmmovabt.xtr b/app/lib/demos/dmmovabt.xtr
index a1125f2..97162a0 100644
--- a/app/lib/demos/dmmovabt.xtr
+++ b/app/lib/demos/dmmovabt.xtr
@@ -1,6 +1,7 @@
VERSION 2
DEMOINIT
ORIG 8.000 0.000 0.000
+PARAMETER display mapscale 32
CURVE 1 DEMO 1 24.000000 24.000000 18.000000
T 4 37.512875 12.108734 41.347736
T 3 37.546349 35.853119 138.813964
@@ -51,7 +52,7 @@ END
STEP
CLEAR
MESSAGE
-You can change what portion of the layout is shown by using the 'Map' window which shows a compressed version of the entire layout. A hilighted area of the 'Map' (in reverse video) shows what portion of the layout is displayed in the main drawing area.
+You can change what portion of the layout is shown by using the 'Map' window which shows a compressed version of the entire layout. A hilighted area of the 'Map' (in blue highlight) shows what portion of the layout is displayed in the main drawing area.
You can Left-Drag the hilighted area in the Map window to change the displayed portion of the layout.
END
diff --git a/app/lib/demos/dmnotes.xtr b/app/lib/demos/dmnotes.xtr
index 35c3d6a..6125354 100644
--- a/app/lib/demos/dmnotes.xtr
+++ b/app/lib/demos/dmnotes.xtr
@@ -7,7 +7,7 @@ MESSAGE
The <Note> command lets you attach notes to various spots on the layout.
END
STEP
-COMMAND Note
+COMMAND TextNote
MOUSE 2 15.167 7.833
MOUSE 3 9.917 7.167
MOUSE 4 9.917 7.167
@@ -30,6 +30,11 @@ MOUSE 2 9.917 7.167
MOUSE 4 9.917 7.167
STEP
MOUSE 6920 9.917 7.167
+REGRESSION START 10 - notes
+NOTE 1 0 0 0 9.917000 7.167000 0 32
+Replace this text with your note
+ END
+REGRESSION END
CLEAR
MESSAGE
This is the end of the XTrackCAD Demos.
diff --git a/app/lib/demos/dmparall.xtr b/app/lib/demos/dmparall.xtr
index 7b99b58..394a304 100644
--- a/app/lib/demos/dmparall.xtr
+++ b/app/lib/demos/dmparall.xtr
@@ -27,12 +27,13 @@ CURVE 4 DEMO 1 26.550055 14.883322 12.000000
END
REDRAW
PARAMETER parallel separation 0.0
+PARAMETER parallel factor 0.0
RESET
MESSAGE
This example shows how to create parallel tracks.
END
STEP
-COMMAND Parallel
+COMMAND ParallelTrack
MESSAGE
_________________________________________
@@ -180,4 +181,42 @@ MESSAGE
=========================================
END
STEP
+REGRESSION START 10 - parallel tracks
+STRAIGHT 1 0 0 0 0 DEMO 2
+ E4 1.883333 2.883333 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 16.966667 2.883353 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 2 0 0 0 0 DEMO 2 16.966667 2.883353 0 0.000000 "Peco-55 Medium Left SL-E396F"
+ T4 1 16.966667 2.883353 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 22.371667 2.883353 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 22.336667 3.405353 80.314000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 -23.136000 0.351000 23.136000 170.297000 9.700000
+ S 0 0.000000 4.251000 0.331000 5.370000 0.522000
+ END
+STRAIGHT 3 0 0 0 0 DEMO 2
+ T4 4 26.550000 2.883322 90.000262 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 22.371667 2.883336 270.000262 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 4 0 0 0 0 DEMO 2 26.550055 14.883322 0 12.000000 0 0.000000 0.000000
+ E4 38.427321 13.171435 8.201723 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 26.550000 2.883322 270.000110 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 5 0 0 0 0 DEMO 2
+ E4 1.883333 4.133333 269.999924 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 16.966667 4.133353 89.999924 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 6 0 0 0 0 DEMO 2
+ T4 7 26.550006 4.133322 90.000192 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 22.371673 4.133336 270.000192 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 7 0 0 0 0 DEMO 2 26.550055 14.883322 0 10.750000 0 0.000000 0.000000
+ E4 37.190103 13.349741 8.201723 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 6 26.550034 4.133322 270.000110 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
CLEAR
diff --git a/app/lib/demos/dmplymod.xtr b/app/lib/demos/dmplymod.xtr
index 2c66bc0..a0bf12d 100644
--- a/app/lib/demos/dmplymod.xtr
+++ b/app/lib/demos/dmplymod.xtr
@@ -17,22 +17,40 @@ DRAW 2 0 0 0 0 0.000000 0.000000 0.000000
REDRAW
RESET
MESSAGE
-Polylines and Polygons (created with the <Draw> command) can be modified by dragging on their Corners or Edges.
+Polylines and polygons (created with the <Draw> command) can be modified by dragging on their corners or edges.
+
+First Left Click on the shape you want to modify.
END
STEP
COMMAND Modify
MOUSE 2 11.333 18.889
+MOUSE 4 11.333 18.889
+BIGPAUSE
+MESSAGE
+
+Then drag on the point you want to move
+END
+MOUSE 2 11.333 18.889
MOUSE 3 18.889 19.333
MOUSE 4 18.889 19.333
MOUSE 2 4.000 4.444
MOUSE 3 4.111 19.333
MOUSE 4 4.111 19.333
+MESSAGE
+
+And finally press the Space bar to finish the change
+END
+MOUSE 8200 4.111 19.333
+STEP
+MOUSE 2 31.222 18.889
+MOUSE 4 31.222 18.889
MOUSE 2 31.222 18.889
MOUSE 3 38.889 19.667
MOUSE 4 38.889 19.667
MOUSE 2 24.222 4.667
MOUSE 3 24.778 19.667
MOUSE 4 24.778 19.667
+MOUSE 8200 24.778 19.667
MESSAGE
_________________________________________
@@ -40,37 +58,87 @@ If you select the middle of an Edge a new Corner is created.
END
STEP
MOUSE 2 10.556 12.667
+MOUSE 4 10.556 12.667
+MOUSE 2 10.556 12.667
MOUSE 3 4.111 4.333
MOUSE 4 4.111 4.333
+MOUSE 8200 4.111 4.333
+MOUSE 2 31.556 12.333
+MOUSE 4 31.556 12.333
MOUSE 2 31.556 12.333
MOUSE 3 24.889 4.333
MOUSE 4 24.889 4.333
+MOUSE 8200 24.889 4.333
MESSAGE
_________________________________________
-If you drag a Corner to another Corner the two are merged and the Edge between them is removed.
+To delete a corner, select and then press Delete or Backspace
END
STEP
-MOUSE 2 4.333 19.222
-MOUSE 3 4.000 4.444
+#MOUSE 2 4.333 19.222
+#MOUSE 4 4.333 19.222
+#MOUSE 2 4.333 19.222
+#MOUSE 3 4.000 4.444
+MOUSE 2 4.000 4.444
MOUSE 4 4.000 4.444
-MOUSE 2 25.111 19.667
-MOUSE 3 25.111 4.444
+MOUSE 2 4.000 4.444
+MOUSE 4 4.000 4.444
+MOUSE 2056 4.000 4.444
+MOUSE 8200 4.000 4.444
+#MOUSE 2 25.111 19.667
+#MOUSE 4 25.111 19.667
+#MOUSE 2 25.111 19.667
+#MOUSE 3 25.111 4.444
+MOUSE 2 25.111 4.444
MOUSE 4 25.111 4.444
+MOUSE 2 25.111 4.444
+MOUSE 4 25.111 4.444
+MOUSE 2056 25.111 4.444
+MOUSE 8200 25.111 4.444
MESSAGE
_________________________________________
But you cannot have a Poly-shape with less than 3 sides.
END
STEP
-MOUSE 2 4.000 4.444
-MOUSE 3 18.900 4.333
+#MOUSE 2 4.000 4.444
+#MOUSE 4 4.000 4.444
+#MOUSE 2 4.000 4.444
+#MOUSE 3 18.900 4.333
+MOUSE 2 18.900 4.333
MOUSE 4 18.900 4.333
-MOUSE 2 25.111 4.444
-MOUSE 3 39.111 4.778
+MOUSE 2 18.900 4.333
+MOUSE 4 18.900 4.333
+MOUSE 2056 18.900 4.333
+STEP
+MOUSE 8200 18.900 4.333
+#MOUSE 2 25.111 4.444
+#MOUSE 4 25.111 4.444
+#MOUSE 2 25.111 4.444
+#MOUSE 3 39.111 4.778
+MOUSE 2 39.111 4.778
+MOUSE 4 39.111 4.778
+MOUSE 2 39.111 4.778
MOUSE 4 39.111 4.778
+MOUSE 2056 39.111 4.778
+STEP
+MOUSE 8200 39.111 4.778
MESSAGE
=========================================
END
+REGRESSION START 10 - modify polygons
+DRAW 1 0 0 0 0 0.000000 0.000000 0 0.000000
+ Y4 255 0.333333 3 0
+ 4.111000 19.333000 0
+ 18.889000 19.333000 0
+ 18.900000 4.333000 0
+ END
+DRAW 2 0 0 0 0 0.000000 0.000000 0 0.000000
+ F4 255 0.333333 3 0
+ 24.778000 19.667000 0
+ 38.889000 19.667000 0
+ 39.111000 4.778000 0
+ END
+REGRESSION END
STEP
CLEAR
diff --git a/app/lib/demos/dmprof.xtr b/app/lib/demos/dmprof.xtr
index 3cbe1b0..595fca5 100644
--- a/app/lib/demos/dmprof.xtr
+++ b/app/lib/demos/dmprof.xtr
@@ -4,27 +4,27 @@ ORIG 9.000 23.000 2.000
PARAMETER display description-fontsize 96
PARAMETER display labelenable 4
PARAMETER display labelscale 12
-CURVE 1 0 0 0 0 N -1 12.666667 13.666667 10.000000
+CURVE 1 0 0 0 0 DEMO 2 12.666667 13.666667 10.000000
T 3 11.809617 3.703461 94.916566
T 21 22.410419 15.915955 167.001307
END
-STRAIGHT 2 0 0 0 0 N -1
+STRAIGHT 2 0 0 0 0 DEMO 2
T 22 27.376540 8.227390 232.674480 10 1.103460 -0.387390
T 6 29.448408 9.807189 52.674480
END
-CURVE 3 0 0 0 0 N -1 13.737465 26.114701 22.494005
+CURVE 3 0 0 0 0 DEMO 2 13.737465 26.114701 22.494005
T 22 24.278245 6.243309 62.056285 11 0.401755 -0.563309
T 1 11.809617 3.703461 274.916566
END
-STRAIGHT 4 0 0 0 0 N -1
+STRAIGHT 4 0 0 0 0 DEMO 2
T 5 37.111111 4.222222 270.000000
T 9 38.222222 4.222222 90.000000 9 0.001462 -0.748538 0.500000
END
-CURVE 5 0 0 0 0 N -1 37.111111 19.309524 15.087302
+CURVE 5 0 0 0 0 DEMO 2 37.111111 19.309524 15.087302
T 4 37.111111 4.222222 90.000000
T 21 26.521963 8.562588 314.576286 10 -1.201963 -0.162588
END
-TURNOUT 6 0 0 0 0 N -1 29.448408 9.807189 322.674480 "Peco-55 Medium Right SL-E395F"
+TURNOUT 6 0 0 0 0 DEMO 2 29.448408 9.807189 322.674480 "Peco-55 Medium Right SL-E395F"
T 2 29.448408 9.807189 232.674480
T 7 33.746482 13.084471 52.674480
T 8 34.035161 12.648152 62.360480
@@ -36,15 +36,15 @@ TURNOUT 6 0 0 0 0 N -1 29.448408 9.807189 322.674480 "Peco-55 Medium Right SL-E
C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
END
-STRAIGHT 7 0 0 0 0 N -1
+STRAIGHT 7 0 0 0 0 DEMO 2
T 19 42.270123 19.583746 52.674480
T 6 33.746482 13.084471 232.674480
END
-CURVE 8 0 0 0 0 N -1 45.574853 -9.388207 24.875000
+CURVE 8 0 0 0 0 DEMO 2 45.574853 -9.388207 24.875000
T 6 34.035161 12.648152 242.360480
T 18 51.462480 14.779984 103.691177
END
-TURNOUT 9 0 0 0 0 N -1 38.222222 4.222222 0.000000 "Peco-55 Medium Left SL-E396F"
+TURNOUT 9 0 0 0 0 DEMO 2 38.222222 4.222222 0.000000 "Peco-55 Medium Left SL-E396F"
T 4 38.222222 4.222222 270.000000 9 0.000000 0.000000 0.500000
T 15 43.627222 4.222222 90.000000
T 13 43.592222 4.744222 80.314000
@@ -56,23 +56,23 @@ TURNOUT 9 0 0 0 0 N -1 38.222222 4.222222 0.000000 "Peco-55 Medium Left SL-E396
C 0 0.000000 -23.136000 0.351000 23.136000 170.297000 9.700000
S 0 0.000000 4.251000 0.331000 5.370000 0.522000
END
-STRAIGHT 10 0 0 0 0 N -1
+STRAIGHT 10 0 0 0 0 DEMO 2
E 76.446137 4.222222 90.000000
T 14 72.333333 4.222222 270.000000 9 -0.017544 -0.722222 1.000000
END
-STRAIGHT 11 0 0 0 0 N -1
+STRAIGHT 11 0 0 0 0 DEMO 2
T 23 55.000000 5.472222 270.000000 13 -0.040000 0.647778 "New York City"
T 16 60.777778 5.472222 90.000000
END
-CURVE 12 0 0 0 0 N -1 49.777778 -17.192082 22.664304
+CURVE 12 0 0 0 0 DEMO 2 49.777778 -17.192082 22.664304
T 13 45.964542 5.149134 260.314000
T 23 49.777778 5.472222 90.000000
END
-STRAIGHT 13 0 0 0 0 N -1
+STRAIGHT 13 0 0 0 0 DEMO 2
T 9 43.592222 4.744222 260.314000
T 12 45.964542 5.149134 80.314000
END
-TURNOUT 14 0 0 0 0 N -1 72.333333 4.222222 180.000000 "Peco-55 Medium Right SL-E395F"
+TURNOUT 14 0 0 0 0 DEMO 2 72.333333 4.222222 180.000000 "Peco-55 Medium Right SL-E395F"
T 10 72.333333 4.222222 90.000000 9 0.000000 0.000000 1.000000
T 15 66.928333 4.222222 270.000000
T 17 66.963333 4.744222 279.686000
@@ -84,39 +84,39 @@ TURNOUT 14 0 0 0 0 N -1 72.333333 4.222222 180.000000 "Peco-55 Medium Right SL-
C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
END
-STRAIGHT 15 0 0 0 0 N -1
+STRAIGHT 15 0 0 0 0 DEMO 2
T 9 43.627222 4.222222 270.000000
T 14 66.928333 4.222222 90.000000
END
-CURVE 16 0 0 0 0 N -1 60.777778 -17.192082 22.664304
+CURVE 16 0 0 0 0 DEMO 2 60.777778 -17.192082 22.664304
T 11 60.777778 5.472222 270.000000
T 17 64.591013 5.149134 99.686000
END
-STRAIGHT 17 0 0 0 0 N -1
+STRAIGHT 17 0 0 0 0 DEMO 2
T 14 66.963333 4.744222 99.686000
T 16 64.591013 5.149134 279.686000
END
-CURVE 18 0 0 0 0 N -1 64.332420 67.609950 54.375000
+CURVE 18 0 0 0 0 DEMO 2 64.332420 67.609950 54.375000
E 74.352464 14.166154 79.381036 9 -0.128780 -0.718786 2.000000
T 8 51.462480 14.779984 283.691177
END
-CURVE 19 0 0 0 0 N -1 49.773613 9.743103 12.375000
+CURVE 19 0 0 0 0 DEMO 2 49.773613 9.743103 12.375000
T 7 42.270123 19.583746 232.674480
T 20 56.175027 20.333784 121.150374
END
-CURVE 20 0 0 0 0 N -1 64.968888 34.882599 17.000000
+CURVE 20 0 0 0 0 DEMO 2 64.968888 34.882599 17.000000
E 74.032528 20.500303 57.781104 9 0.099051 -0.789777 4.000000
T 19 56.175027 20.333784 301.150374
END
-CURVE 21 0 0 0 0 N -1 37.111111 19.309524 15.087302
+CURVE 21 0 0 0 0 DEMO 2 37.111111 19.309524 15.087302
T 5 26.521963 8.562588 134.576286 10 0.000000 0.000000
T 1 22.410418 15.915955 347.001307
END
-CURVE 22 0 0 0 0 N -1 13.737465 26.114701 22.494005
+CURVE 22 0 0 0 0 DEMO 2 13.737465 26.114701 22.494005
T 2 27.376540 8.227390 52.674480 10 0.000000 0.000000
T 3 24.278245 6.243309 242.056285 11 0.000000 0.000000
END
-STRAIGHT 23 0 0 0 0 N -1
+STRAIGHT 23 0 0 0 0 DEMO 2
T 12 49.777778 5.472222 270.000000
T 11 55.000000 5.472222 90.000000 13 0.000000 0.000000 "New York City"
END
@@ -327,4 +327,122 @@ MESSAGE
=========================================
END
STEP
+REGRESSION START 10 - profile
+CURVE 1 0 0 0 0 DEMO 2 12.666667 13.666667 0 10.000000 0 0.000000 0.000000
+ T4 3 11.809617 3.703461 94.916566 0 0.0 0.0 0.0 0.0 0 0 0 0.896923
+ T4 21 22.410419 15.915955 167.001307 0 0.0 0.0 0.0 0.0 0 0 0 0.896923
+ END
+STRAIGHT 2 0 0 0 0 DEMO 2
+ T4 22 27.376540 8.227390 232.674480 10 1.103460 -0.387390 0.0 0.0 1 2 0 1.415360
+ T4 6 29.448408 9.807189 52.674480 0 0.0 0.0 0.0 0.0 0 0 0 1.415360
+ END
+CURVE 3 0 0 0 0 DEMO 2 13.737465 26.114701 0 22.494005 0 0.000000 0.000000
+ T4 22 24.278245 6.243309 62.056285 11 0.401755 -0.563309 0.0 0.0 1 3 0 1.266708
+ T4 1 11.809617 3.703461 274.916566 0 0.0 0.0 0.0 0.0 0 0 0 1.266708
+ END
+STRAIGHT 4 0 0 0 0 DEMO 2
+ T4 5 37.111111 4.222222 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ T4 9 38.222222 4.222222 90.000000 9 0.001462 -0.748538 0.500000 0.500000 1 1 0 0.500000
+ END
+CURVE 5 0 0 0 0 DEMO 2 37.111111 19.309524 0 15.087302 0 0.000000 0.000000
+ T4 4 37.111111 4.222222 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.500000
+ T4 21 26.521963 8.562588 314.576286 9 -1.201963 -0.162588 0.500000 0.500000 1 1 0 0.500000
+ END
+TURNOUT 6 0 0 0 0 DEMO 2 29.448408 9.807189 0 322.674480 "Peco-55 Medium Right SL-E395F"
+ T4 2 29.448408 9.807189 232.674480 0 0.0 0.0 0.0 0.0 0 0 0 1.467439
+ T4 7 33.746482 13.084471 52.674480 12 0.000000 0.000000 0.0 0.0 1 4 0 1.467439
+ T4 8 34.035161 12.648152 62.360480 0 0.0 0.0 0.0 0.0 0 0 0 1.467439
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
+ S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
+ END
+STRAIGHT 7 0 0 0 0 DEMO 2
+ T4 19 42.270123 19.583746 52.674480 0 0.0 0.0 0.0 0.0 0 0 0 1.922697
+ T4 6 33.746482 13.084471 232.674480 12 0.000000 0.000000 0.0 0.0 1 4 0 1.922697
+ END
+CURVE 8 0 0 0 0 DEMO 2 45.574853 -9.388207 0 24.875000 0 0.000000 0.000000
+ T4 6 34.035161 12.648152 242.360480 0 0.0 0.0 0.0 0.0 0 0 0 1.619204
+ T4 18 51.462480 14.779984 103.691177 9 0.000000 0.000000 1.735822 1.735822 1 1 0 1.619204
+ END
+TURNOUT 9 0 0 0 0 DEMO 2 38.222222 4.222222 0 0.000000 "Peco-55 Medium Left SL-E396F"
+ T4 4 38.222222 4.222222 270.000000 9 0.000000 0.000000 0.500000 0.500000 1 1 0 0.552670
+ T4 15 43.627222 4.222222 90.000000 12 0.000000 0.000000 0.0 0.0 1 4 0 0.552670
+ T4 13 43.592222 4.744222 80.314000 0 0.0 0.0 0.0 0.0 0 0 0 0.552670
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 -23.136000 0.351000 23.136000 170.297000 9.700000
+ S 0 0.000000 4.251000 0.331000 5.370000 0.522000
+ END
+STRAIGHT 10 0 0 0 0 DEMO 2
+ E4 76.446137 4.222222 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 1.000000
+ T4 14 72.333333 4.222222 270.000000 9 -0.017544 -0.722222 1.000000 1.000000 1 1 0 1.000000
+ END
+STRAIGHT 11 0 0 0 0 DEMO 2
+ T4 23 55.000000 5.472222 270.000000 13 -0.040000 0.647778 "New York City" 0.0 1 5 0 0.788168
+ T4 16 60.777778 5.472222 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.788168
+ END
+CURVE 12 0 0 0 0 DEMO 2 49.777778 -17.192082 0 22.664304 0 0.000000 0.000000
+ T4 13 45.964542 5.149134 260.314000 0 0.0 0.0 0.0 0.0 0 0 0 0.642059
+ T4 23 49.777778 5.472222 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.642059
+ END
+STRAIGHT 13 0 0 0 0 DEMO 2
+ T4 9 43.592222 4.744222 260.314000 0 0.0 0.0 0.0 0.0 0 0 0 0.596609
+ T4 12 45.964542 5.149134 80.314000 0 0.0 0.0 0.0 0.0 0 0 0 0.596609
+ END
+TURNOUT 14 0 0 0 0 DEMO 2 72.333333 4.222222 0 180.000000 "Peco-55 Medium Right SL-E395F"
+ T4 10 72.333333 4.222222 90.000000 9 0.000000 0.000000 1.000000 1.000000 1 1 0 0.947570
+ T4 15 66.928333 4.222222 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.947570
+ T4 17 66.963333 4.744222 279.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.947570
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
+ S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
+ END
+STRAIGHT 15 0 0 0 0 DEMO 2
+ T4 9 43.627222 4.222222 270.000000 12 0.000000 0.000000 0.0 0.0 1 4 0 0.750120
+ T4 14 66.928333 4.222222 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.750120
+ END
+CURVE 16 0 0 0 0 DEMO 2 60.777778 -17.192082 0 22.664304 0 0.000000 0.000000
+ T4 11 60.777778 5.472222 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.858180
+ T4 17 64.591013 5.149134 99.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.858180
+ END
+STRAIGHT 17 0 0 0 0 DEMO 2
+ T4 14 66.963333 4.744222 99.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.903630
+ T4 16 64.591013 5.149134 279.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.903630
+ END
+CURVE 18 0 0 0 0 DEMO 2 64.332420 67.609950 0 54.375000 0 0.000000 0.000000
+ E4 74.352464 14.166154 79.381036 9 -0.128780 -0.718786 2.000000 2.000000 1 1 0 1.867911
+ T4 8 51.462480 14.779984 283.691177 9 0.000000 0.000000 1.735822 1.735822 1 1 0 1.867911
+ END
+CURVE 19 0 0 0 0 DEMO 2 49.773613 9.743103 0 12.375000 0 0.000000 0.000000
+ T4 7 42.270123 19.583746 232.674480 0 0.0 0.0 0.0 0.0 0 0 0 2.605178
+ T4 20 56.175027 20.333784 121.150374 0 0.0 0.0 0.0 0.0 0 0 0 2.605178
+ END
+CURVE 20 0 0 0 0 DEMO 2 64.968888 34.882599 0 17.000000 0 0.000000 0.000000
+ E4 74.032528 20.500303 57.781104 9 0.099051 -0.789777 4.000000 4.000000 1 1 0 3.456904
+ T4 19 56.175027 20.333784 301.150374 0 0.0 0.0 0.0 0.0 0 0 0 3.456904
+ END
+CURVE 21 0 0 0 0 DEMO 2 37.111111 19.309524 0 15.087302 0 0.000000 0.000000
+ T4 5 26.521963 8.562588 134.576286 9 0.000000 0.000000 0.500000 0.500000 1 1 0 0.555491
+ T4 1 22.410418 15.915955 347.001307 0 0.0 0.0 0.0 0.0 0 0 0 0.555491
+ END
+CURVE 22 0 0 0 0 DEMO 2 13.737465 26.114701 0 22.494005 0 0.000000 0.000000
+ T4 2 27.376540 8.227390 52.674480 10 0.000000 0.000000 0.0 0.0 1 2 0 1.374489
+ T4 3 24.278245 6.243309 242.056285 11 0.000000 0.000000 0.0 0.0 1 3 0 1.374489
+ END
+STRAIGHT 23 0 0 0 0 DEMO 2
+ T4 12 49.777778 5.472222 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.708023
+ T4 11 55.000000 5.472222 90.000000 13 0.000000 0.000000 "New York City" 0.0 1 5 0 0.708023
+ END
+REGRESSION END
CLEAR
diff --git a/app/lib/demos/dmrescal.xtr b/app/lib/demos/dmrescal.xtr
index 6758f5d..32662b1 100644
--- a/app/lib/demos/dmrescal.xtr
+++ b/app/lib/demos/dmrescal.xtr
@@ -4,7 +4,7 @@ VERSION 10
DEMOINIT
ORIG 4.000 0.000 0.000
PARAMETER display description-fontsize 64
-STRUCTURE 1 0 0 0 0 N 2 6.210395 3.915802 0 236.697715 "Walthers Interstate Fuel - Loading Rack 933-32000a"
+STRUCTURE 1 0 0 0 0 DEMO 2 6.210395 3.915802 0 236.697715 "Walthers Interstate Fuel - Loading Rack 933-32000a"
D 0.000000 0.000000
L3 0 0.000000 0.750000 0.000000 0 3.750000 0.000000 0
L3 0 0.000000 3.750000 0.000000 0 3.750000 3.125000 0
@@ -34,11 +34,11 @@ STRUCTURE 1 0 0 0 0 N 2 6.210395 3.915802 0 236.697715 "Walthers Interstate Fuel
L3 0 0.000000 0.750000 3.125000 0 0.750000 2.187500 0
L3 0 0.000000 0.750000 0.000000 0 0.750000 0.937500 0
END
-STRAIGHT 2 0 0 0 0 N 2
+STRAIGHT 2 0 0 0 0 DEMO 2
E 0.105826 -1.346082 236.697715
T 5 3.511000 0.890894 56.697715
END
-STRUCTURE 3 0 0 0 0 N 2 15.697638 4.710368 0 326.697715 "Walthers Shady Jct Water Tower 933-3205a"
+STRUCTURE 3 0 0 0 0 DEMO 2 15.697638 4.710368 0 326.697715 "Walthers Shady Jct Water Tower 933-3205a"
D 0.000000 0.000000
L3 0 0.000000 0.000000 0.000000 0 1.562500 0.000000 0
L3 0 0.000000 1.562500 0.000000 0 1.562500 1.562500 0
@@ -66,11 +66,11 @@ STRUCTURE 3 0 0 0 0 N 2 15.697638 4.710368 0 326.697715 "Walthers Shady Jct Wate
L3 0 0.000000 1.750000 1.500000 0 1.750000 1.062500 0
L3 0 0.000000 1.750000 1.062500 0 1.250000 1.062500 0
END
-STRAIGHT 4 0 0 0 0 N 2
+STRAIGHT 4 0 0 0 0 DEMO 2
E 22.026067 13.054077 56.697715
T 5 8.028421 3.858543 236.697715
END
-TURNOUT 5 0 0 0 0 N 2 3.511000 0.890894 0 326.697715 "Peco-55 Medium Right SL-E395F"
+TURNOUT 5 0 0 0 0 DEMO 2 3.511000 0.890894 0 326.697715 "Peco-55 Medium Right SL-E395F"
T 2 3.511000 0.890894 236.697715
T 4 8.028421 3.858543 56.697715
T 8 8.285775 3.403046 66.383715
@@ -82,19 +82,19 @@ TURNOUT 5 0 0 0 0 N 2 3.511000 0.890894 0 326.697715 "Peco-55 Medium Right SL-E
C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
END
-STRAIGHT 6 0 0 0 0 N 2
+STRAIGHT 6 0 0 0 0 DEMO 2
E 22.690715 11.995108 56.697715
T 7 13.433501 5.913726 236.697715
END
-CURVE 7 0 0 0 0 N 2 4.259807 19.878127 0 16.708116 0 0.000000 0.000000
+CURVE 7 0 0 0 0 DEMO 2 4.259807 19.878127 0 16.708116 0 0.000000 0.000000
T 6 13.433501 5.913726 56.697715
T 8 10.953237 4.569334 246.383715
END
-STRAIGHT 8 0 0 0 0 N 2
+STRAIGHT 8 0 0 0 0 DEMO 2
T 5 8.285775 3.403046 246.383715
T 7 10.953237 4.569334 66.383715
END
-STRUCTURE 9 0 0 0 0 N 2 16.897495 6.987885 0 326.697715 "Walthers 2-Stall Engine House 933-3204"
+STRUCTURE 9 0 0 0 0 DEMO 2 16.897495 6.987885 0 326.697715 "Walthers 2-Stall Engine House 933-3204"
D 0.000000 0.000000
L3 0 0.000000 0.000000 0.000000 0 7.625000 0.000000 0
L3 0 0.000000 7.625000 0.000000 0 7.625000 3.250000 0
@@ -150,6 +150,7 @@ END
STEP
PARAMETER rescale toggle 0
PARAMETER rescale toS 4 HO
+PARAMETER misc cmdSelectAll
MESSAGE
_________________________________________
@@ -177,4 +178,114 @@ MESSAGE
=========================================
END
STEP
+REGRESSION START 10 - rescale
+STRUCTURE 1 0 0 0 0 HO 2 11.213904 9.665918 0 236.697715 "Walthers Interstate Fuel - Loading Rack 933-32000a"
+ D 0.000000 0.000000
+ L3 0 0.000000 1.377727 0.000000 0 6.888634 0.000000 0
+ L3 0 0.000000 6.888634 0.000000 0 6.888634 5.740528 0
+ L3 0 0.000000 6.888634 5.740528 0 1.377727 5.740528 0
+ L3 0 0.000000 6.773823 0.114811 0 3.099885 0.114811 0
+ L3 0 0.000000 3.099885 0.114811 0 3.099885 1.492537 0
+ L3 0 0.000000 3.099885 1.492537 0 6.773823 1.492537 0
+ L3 0 0.000000 6.773823 1.492537 0 6.773823 0.114811 0
+ L3 0 0.000000 6.773823 5.625718 0 3.099885 5.625718 0
+ L3 0 0.000000 3.099885 5.625718 0 3.099885 4.247991 0
+ L3 0 0.000000 3.099885 4.247991 0 6.773823 4.247991 0
+ L3 0 0.000000 6.773823 4.247991 0 6.773823 5.625718 0
+ L3 0 0.000000 6.773823 2.181401 0 3.099885 2.181401 0
+ L3 0 0.000000 3.099885 2.181401 0 3.099885 3.559127 0
+ L3 0 0.000000 3.099885 3.559127 0 6.773823 3.559127 0
+ L3 0 0.000000 6.773823 3.559127 0 6.773823 2.181401 0
+ A3 0 0.000000 0.162366 5.510907 4.936854 0 0.000000 360.000000
+ A3 0 0.000000 0.162366 5.510907 2.870264 0 0.000000 360.000000
+ A3 0 0.000000 0.162366 5.510907 0.803674 0 0.000000 360.000000
+ L3 0 0.000000 1.377727 5.281286 0 0.000000 5.281286 0
+ L3 0 0.000000 0.000000 5.281286 0 0.000000 0.459242 0
+ L3 0 0.000000 0.000000 0.459242 0 1.377727 0.459242 0
+ L3 0 0.000000 2.755454 4.018370 0 0.803674 4.018370 0
+ L3 0 0.000000 0.803674 4.018370 0 0.803674 1.722158 0
+ L3 0 0.000000 0.803674 1.722158 0 2.755454 1.722158 0
+ L3 0 0.000000 2.755454 1.722158 0 2.755454 4.018370 0
+ L3 0 0.000000 1.377727 5.740528 0 1.377727 4.018370 0
+ L3 0 0.000000 1.377727 0.000000 0 1.377727 1.722158 0
+ END
+STRAIGHT 2 0 0 0 0 HO 2
+ E4 0.000000 -0.000000 236.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 6.255199 4.109256 56.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRUCTURE 3 0 0 0 0 HO 2 28.641675 11.125511 0 326.697715 "Walthers Shady Jct Water Tower 933-3205a"
+ D 0.000000 0.000000
+ L3 0 0.000000 0.000000 0.000000 0 2.870264 0.000000 0
+ L3 0 0.000000 2.870264 0.000000 0 2.870264 2.870264 0
+ L3 0 0.000000 2.870264 2.870264 0 0.000000 2.870264 0
+ L3 0 0.000000 0.000000 2.870264 0 0.000000 0.000000 0
+ L3 0 0.000000 0.000000 0.688863 0 2.296211 0.688863 0
+ L3 0 0.000000 2.296211 0.688863 0 2.296211 2.870264 0
+ L3 0 0.000000 1.148106 1.836969 0 1.148106 0.688863 0
+ L3 0 0.000000 1.148106 1.836969 0 2.296211 1.836969 0
+ L3 0 0.000000 1.148106 1.836969 0 0.000000 1.836969 0
+ L3 0 0.000000 1.148106 1.836969 0 1.148106 2.870264 0
+ L3 0 0.000000 1.148106 1.836969 0 1.951780 2.640643 0
+ L3 0 0.000000 1.148106 1.836969 0 1.951780 1.033295 0
+ L3 0 0.000000 1.148106 1.836969 0 0.344432 1.033295 0
+ L3 0 0.000000 1.148106 1.836969 0 0.344432 2.640643 0
+ L3 0 0.000000 1.148106 2.870264 0 1.951780 2.640643 0
+ L3 0 0.000000 1.951780 2.640643 0 2.296211 1.836969 0
+ L3 0 0.000000 2.296211 1.836969 0 1.951780 1.033295 0
+ L3 0 0.000000 1.951780 1.033295 0 1.148106 0.688863 0
+ L3 0 0.000000 1.148106 0.688863 0 0.344432 1.033295 0
+ L3 0 0.000000 0.344432 1.033295 0 0.000000 1.836969 0
+ L3 0 0.000000 0.000000 1.836969 0 0.344432 2.640643 0
+ L3 0 0.000000 0.344432 2.640643 0 1.148106 2.870264 0
+ L3 0 0.000000 2.296211 2.755454 0 3.214696 2.755454 0
+ L3 0 0.000000 3.214696 2.755454 0 3.214696 1.951780 0
+ L3 0 0.000000 3.214696 1.951780 0 2.296211 1.951780 0
+ END
+STRAIGHT 4 0 0 0 0 HO 2
+ E4 40.266803 26.452646 56.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 14.553561 9.560735 236.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 5 0 0 0 0 HO 2 6.255199 4.109256 0 326.697715 "Peco-55 Medium Right SL-E395F"
+ T4 2 6.255199 4.109256 236.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 14.553561 9.560735 56.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 8 15.026313 8.724001 66.383715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.648450 0.000000
+ S 0 0.000000 0.648450 0.000000 9.928817 0.000000
+ C 0 0.000000 42.500115 0.644776 -42.500115 0.004000 9.700000
+ S 0 0.000000 7.808955 -0.608037 9.864524 -0.958898
+ END
+STRAIGHT 6 0 0 0 0 HO 2
+ E4 41.487741 24.507352 56.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 7 24.482526 13.336042 236.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 7 0 0 0 0 HO 2 7.630734 38.988214 0 30.692291 0 0.000000 0.000000
+ T4 6 24.482526 13.336042 56.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 8 19.926358 10.866436 246.383715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 8 0 0 0 0 HO 2
+ T4 5 15.026313 8.724001 246.383715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 7 19.926358 10.866436 66.383715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRUCTURE 9 0 0 0 0 HO 2 30.845775 15.309239 0 326.697715 "Walthers 2-Stall Engine House 933-3204"
+ D 0.000000 0.000000
+ L3 0 0.000000 0.000000 0.000000 0 14.006889 0.000000 0
+ L3 0 0.000000 14.006889 0.000000 0 14.006889 5.970149 0
+ L3 0 0.000000 14.006889 5.970149 0 0.000000 5.970149 0
+ L3 0 0.000000 0.000000 5.970149 0 0.000000 0.000000 0
+ L3 0 0.000000 0.000000 2.985075 0 14.006889 2.985075 0
+ L3 0 0.000000 0.000000 3.673938 0 14.006889 3.673938 0
+ L3 0 0.000000 0.000000 2.296211 0 14.006889 2.296211 0
+ A3 0 0.000000 0.413955 12.169920 1.607348 0 0.000000 360.000000
+ A3 0 0.000000 0.256724 12.169920 1.607348 0 0.000000 360.000000
+ A3 0 0.000000 0.413955 1.836969 1.607348 0 0.000000 360.000000
+ A3 0 0.000000 0.256724 1.836969 1.607348 0 0.000000 360.000000
+ A3 0 0.000000 0.413955 1.836969 4.362801 0 0.000000 360.000000
+ A3 0 0.000000 0.256724 1.836969 4.362801 0 0.000000 360.000000
+ A3 0 0.000000 0.413955 12.169920 4.362801 0 0.000000 360.000000
+ A3 0 0.000000 0.256724 12.169920 4.362801 0 0.000000 360.000000
+ END
+REGRESSION END
CLEAR
diff --git a/app/lib/demos/dmrotate.xtr b/app/lib/demos/dmrotate.xtr
index 074aea5..ed04a77 100644
--- a/app/lib/demos/dmrotate.xtr
+++ b/app/lib/demos/dmrotate.xtr
@@ -1,7 +1,7 @@
VERSION 10
DEMOINIT
-ORIG 4.000 0.000 0.000
-STRUCTURE 1 0 0 0 0 N 2 2.000000 3.062500 0 0.000000 "Walthers Interstate Fuel - Loading Rack 933-32000a"
+ORIG 3.000 0.000 0.000
+STRUCTURE 1 0 0 0 0 DEMO 2 2.000000 3.062500 0 0.000000 "Walthers Interstate Fuel - Loading Rack 933-32000a"
D 0.000000 0.000000
L3 0 0.000000 0.750000 0.000000 0 3.750000 0.000000 0
L3 0 0.000000 3.750000 0.000000 0 3.750000 3.125000 0
@@ -31,15 +31,15 @@ STRUCTURE 1 0 0 0 0 N 2 2.000000 3.062500 0 0.000000 "Walthers Interstate Fuel -
L3 0 0.000000 0.750000 3.125000 0 0.750000 2.187500 0
L3 0 0.000000 0.750000 0.000000 0 0.750000 0.937500 0
END
-STRAIGHT 2 0 0 0 0 N 2
+STRAIGHT 2 0 0 0 0 DEMO 2
E 2.250000 0.062500 236.697715
E 19.375000 11.312500 56.697715
END
-CURVE 3 0 0 0 0 N 2 22.859949 -1.206745 0 11.250000 0 0.000000 0.000000
+CURVE 3 0 0 0 0 DEMO 2 22.859949 -1.206745 0 11.250000 0 0.000000 0.000000
E 11.625000 -0.625000 182.964125
E 20.250359 9.736405 76.587298
END
-STRUCTURE 4 0 0 0 0 N 2 8.625000 7.750000 0 0.000000 "Walthers Shady Jct Water Tower 933-3205a"
+STRUCTURE 4 0 0 0 0 DEMO 2 8.625000 7.750000 0 0.000000 "Walthers Shady Jct Water Tower 933-3205a"
D 0.000000 0.000000
L3 0 0.000000 0.000000 0.000000 0 1.562500 0.000000 0
L3 0 0.000000 1.562500 0.000000 0 1.562500 1.562500 0
@@ -78,427 +78,524 @@ RESET
COMMAND Select
MOUSE 2 5.562 5.000
MOUSE 4 5.562 5.000
+#COMMAND Rotate
+#MOUSE 5 4.062 4.500
+#MOUSE 6 4.062 4.438
+#MOUSE 7 4.062 4.438
+#MOUSE 2 4.062 4.625
+#MOUSE 3 4.062 4.625
+#MOUSE 3 4.062 4.688
+#MOUSE 3 4.062 4.812
+#MOUSE 3 4.125 4.938
+#MOUSE 3 4.125 5.000
+#MOUSE 3 4.125 5.000
+#MOUSE 3 4.125 5.062
+#MOUSE 3 4.125 5.125
+#MOUSE 3 4.125 5.188
+#MOUSE 3 4.125 5.250
+#MOUSE 3 4.188 5.312
+#MOUSE 3 4.188 5.312
+#MOUSE 3 4.188 5.375
+#MOUSE 3 4.188 5.438
+#MOUSE 3 4.188 5.500
+#MOUSE 3 4.250 5.500
+#MOUSE 3 4.250 5.562
+#MOUSE 3 4.250 5.625
+#MOUSE 3 4.312 5.625
+#MOUSE 3 4.312 5.688
+#MOUSE 3 4.312 5.750
+#MOUSE 3 4.312 5.812
+#MOUSE 3 4.312 5.812
+#MOUSE 3 4.312 5.875
+#MOUSE 3 4.312 5.938
+#MOUSE 3 4.375 5.938
+#MOUSE 3 4.375 6.000
+#MOUSE 3 4.375 6.000
+#MOUSE 3 4.438 6.000
+#MOUSE 3 4.500 6.000
+#MOUSE 3 4.562 6.000
+#MOUSE 3 4.562 6.062
+#MOUSE 3 4.625 6.062
+#MOUSE 3 4.625 6.062
+#MOUSE 3 4.688 6.062
+#MOUSE 3 4.688 6.125
+#MOUSE 3 4.750 6.125
+#MOUSE 3 4.812 6.125
+#MOUSE 3 4.938 6.125
+#MOUSE 3 5.000 6.125
+#MOUSE 4 5.000 6.125
+COMMAND Select
+MOUSE 2 4.25 4.5
+MOUSE 4 4.25 4.5
COMMAND Rotate
-MOUSE 5 4.062 4.500
-MOUSE 6 4.062 4.438
-MOUSE 7 4.062 4.438
-MOUSE 2 4.062 4.625
-MOUSE 3 4.062 4.625
-MOUSE 3 4.062 4.688
-MOUSE 3 4.062 4.812
-MOUSE 3 4.125 4.938
-MOUSE 3 4.125 5.000
-MOUSE 3 4.125 5.000
-MOUSE 3 4.125 5.062
-MOUSE 3 4.125 5.125
-MOUSE 3 4.125 5.188
-MOUSE 3 4.125 5.250
-MOUSE 3 4.188 5.312
-MOUSE 3 4.188 5.312
-MOUSE 3 4.188 5.375
-MOUSE 3 4.188 5.438
-MOUSE 3 4.188 5.500
-MOUSE 3 4.250 5.500
-MOUSE 3 4.250 5.562
-MOUSE 3 4.250 5.625
-MOUSE 3 4.312 5.625
-MOUSE 3 4.312 5.688
-MOUSE 3 4.312 5.750
-MOUSE 3 4.312 5.812
-MOUSE 3 4.312 5.812
-MOUSE 3 4.312 5.875
-MOUSE 3 4.312 5.938
-MOUSE 3 4.375 5.938
-MOUSE 3 4.375 6.000
-MOUSE 3 4.375 6.000
-MOUSE 3 4.438 6.000
-MOUSE 3 4.500 6.000
-MOUSE 3 4.562 6.000
-MOUSE 3 4.562 6.062
-MOUSE 3 4.625 6.062
-MOUSE 3 4.625 6.062
-MOUSE 3 4.688 6.062
-MOUSE 3 4.688 6.125
-MOUSE 3 4.750 6.125
-MOUSE 3 4.812 6.125
-MOUSE 3 4.938 6.125
-MOUSE 3 5.000 6.125
-MOUSE 4 5.000 6.125
+KEYSTATE 2
+MOUSE 2 4.25 4.5
+MOUSE 3 12.000 18.000
+MOUSE 4 1.000 10.000
MESSAGE
_________________________________________
-The <Rotate> command will restrict the rotation to increments of 15 if you hold down the Control key.
+The <Rotate> command will restrict the rotation to increments of 15 if you hold down the <Shift> and <Ctrl> keys.
END
STEP
PARAMETER misc cmdUndo
RESET
COMMAND Rotate
-KEYSTATE 4
-MOUSE 2 4.125 4.625
-KEYSTATE 4
-MOUSE 3 4.125 4.688
-KEYSTATE 4
-MOUSE 3 4.188 4.688
-KEYSTATE 4
-MOUSE 3 4.188 4.750
-KEYSTATE 4
-MOUSE 3 4.188 4.812
-KEYSTATE 4
-MOUSE 3 4.188 4.875
-KEYSTATE 4
-MOUSE 3 4.125 4.875
-KEYSTATE 4
-MOUSE 3 4.125 4.938
-KEYSTATE 4
-MOUSE 3 4.125 5.000
-KEYSTATE 4
-MOUSE 3 4.125 5.000
-KEYSTATE 4
-MOUSE 3 4.125 5.062
-KEYSTATE 4
-MOUSE 3 4.125 5.125
-KEYSTATE 4
-MOUSE 3 4.125 5.188
-KEYSTATE 4
-MOUSE 3 4.125 5.312
-KEYSTATE 4
-MOUSE 3 4.125 5.312
-KEYSTATE 4
-MOUSE 3 4.188 5.438
-KEYSTATE 4
-MOUSE 3 4.188 5.500
-KEYSTATE 4
-MOUSE 3 4.188 5.562
-KEYSTATE 4
-MOUSE 3 4.188 5.625
-KEYSTATE 4
-MOUSE 3 4.188 5.625
-KEYSTATE 4
-MOUSE 3 4.188 5.688
-KEYSTATE 4
-MOUSE 3 4.188 5.750
-KEYSTATE 4
-MOUSE 3 4.250 5.812
-KEYSTATE 4
-MOUSE 3 4.250 5.875
-KEYSTATE 4
-MOUSE 3 4.250 6.000
-KEYSTATE 4
-MOUSE 3 4.312 6.000
-KEYSTATE 4
-MOUSE 3 4.312 6.062
-KEYSTATE 4
-MOUSE 3 4.312 6.125
-KEYSTATE 4
-MOUSE 3 4.312 6.188
-KEYSTATE 4
-MOUSE 3 4.312 6.250
-KEYSTATE 4
-MOUSE 3 4.375 6.250
-KEYSTATE 4
-MOUSE 3 4.438 6.250
-KEYSTATE 4
-MOUSE 3 4.500 6.250
-KEYSTATE 4
-MOUSE 3 4.562 6.312
-KEYSTATE 4
-MOUSE 3 4.625 6.312
-KEYSTATE 4
-MOUSE 3 4.625 6.375
-KEYSTATE 4
-MOUSE 3 4.688 6.375
-KEYSTATE 4
-MOUSE 3 4.750 6.375
-KEYSTATE 4
-MOUSE 3 4.750 6.438
-KEYSTATE 4
-MOUSE 3 4.750 6.500
-KEYSTATE 4
-MOUSE 3 4.812 6.500
-KEYSTATE 4
-MOUSE 3 4.812 6.562
-KEYSTATE 4
-MOUSE 3 4.875 6.562
-KEYSTATE 4
-MOUSE 3 4.938 6.562
-KEYSTATE 4
-MOUSE 3 5.000 6.562
-KEYSTATE 4
-MOUSE 3 5.000 6.562
-KEYSTATE 4
-MOUSE 3 5.062 6.562
-KEYSTATE 4
-MOUSE 3 5.125 6.562
-KEYSTATE 4
-MOUSE 3 5.188 6.562
-KEYSTATE 4
-MOUSE 3 5.250 6.562
-KEYSTATE 4
-MOUSE 3 5.312 6.562
-KEYSTATE 4
-MOUSE 3 5.312 6.500
-KEYSTATE 4
-MOUSE 3 5.312 6.438
-KEYSTATE 4
-MOUSE 3 5.312 6.375
-KEYSTATE 4
-MOUSE 3 5.375 6.375
-KEYSTATE 4
-MOUSE 3 5.438 6.375
-KEYSTATE 4
-MOUSE 3 5.438 6.312
-KEYSTATE 4
-MOUSE 3 5.438 6.312
-KEYSTATE 4
-MOUSE 3 5.500 6.312
-KEYSTATE 4
-MOUSE 3 5.500 6.250
-KEYSTATE 4
-MOUSE 3 5.562 6.250
-KEYSTATE 4
-MOUSE 3 5.562 6.188
-KEYSTATE 4
-MOUSE 3 5.562 6.125
-KEYSTATE 4
-MOUSE 3 5.625 6.125
-KEYSTATE 4
-MOUSE 3 5.625 6.062
-KEYSTATE 4
-MOUSE 3 5.625 6.062
-KEYSTATE 4
-MOUSE 3 5.625 6.000
-KEYSTATE 4
-MOUSE 3 5.625 6.000
-KEYSTATE 4
-MOUSE 3 5.688 6.000
-KEYSTATE 4
-MOUSE 3 5.688 5.938
-KEYSTATE 4
-MOUSE 3 5.750 5.938
-KEYSTATE 4
-MOUSE 3 5.750 5.875
-KEYSTATE 4
-MOUSE 3 5.812 5.875
-KEYSTATE 4
-MOUSE 3 5.812 5.812
-KEYSTATE 4
-MOUSE 3 5.875 5.750
-KEYSTATE 4
-MOUSE 3 5.875 5.688
-KEYSTATE 4
-MOUSE 3 5.938 5.688
-KEYSTATE 4
-MOUSE 3 5.938 5.625
-KEYSTATE 4
-MOUSE 3 5.938 5.625
-KEYSTATE 4
-MOUSE 3 6.000 5.625
-KEYSTATE 4
-MOUSE 4 6.000 5.625
-MESSAGE
-_________________________________________
-
-Shift-Right-Click will display a popup-menu that you can use to rotate by fixed amount (15, 30, 45, 90 or 180). The demonstration cannot show the popup-menu but it can show the effects.
-
-Here we will rotate by 90 clockwise (CW).
-END
-STEP
-KEYSTATE 2
-MOUSE 5 3.812 4.688
-KEYSTATE 2
-MOUSE 7 3.812 4.688
-MENU 3.812 4.688 "Move Draw Mode " "90 CW"
-MESSAGE
-_________________________________________
-
-Another option of the <Rotate> command popup-menu is to Align the Selected object with some other object.
-
-First we will click on one line of the Selected object. The angle of this part of the object will be Aligned.
-END
-STEP
-KEYSTATE 2
-MOUSE 5 5.875 5.000
-KEYSTATE 2
-MOUSE 7 5.875 5.000
-MENU 5.875 5.000 "Move Draw Mode " "Align"
-MOUSE 2 5.812 5.125
-MOUSE 4 5.812 5.125
-MESSAGE
-_________________________________________
-
-Next, we click on an Unselected object. The Selected structure will be rotated so that the line we clicked on will be parallel to the straight track.
-END
-STEP
-MOUSE 2 6.625 3.062
-MESSAGE
-_________________________________________
-
-If we drag the mouse across the track, we can flip the structure by 180. This is similar to how we place turnouts.
-END
-STEP
-MOUSE 3 6.750 2.750
-BIGPAUSE
-MOUSE 3 6.625 3.062
-BIGPAUSE
-MOUSE 3 6.750 2.750
+#KEYSTATE 2
+#MOUSE 2 4.125 4.625
+#KEYSTATE 2
+#MOUSE 3 4.125 4.688
+#KEYSTATE 2
+#MOUSE 3 4.188 4.688
+#KEYSTATE 2
+#MOUSE 3 4.188 4.750
+#KEYSTATE 2
+#MOUSE 3 4.188 4.812
+#KEYSTATE 2
+#MOUSE 3 4.188 4.875
+#KEYSTATE 2
+#MOUSE 3 4.125 4.875
+#KEYSTATE 2
+#MOUSE 3 4.125 4.938
+#KEYSTATE 2
+#MOUSE 3 4.125 5.000
+#KEYSTATE 2
+#MOUSE 3 4.125 5.000
+#KEYSTATE 2
+#MOUSE 3 4.125 5.062
+#KEYSTATE 2
+#MOUSE 3 4.125 5.125
+#KEYSTATE 2
+#MOUSE 3 4.125 5.188
+#KEYSTATE 2
+#MOUSE 3 4.125 5.312
+#KEYSTATE 2
+#MOUSE 3 4.125 5.312
+#KEYSTATE 2
+#MOUSE 3 4.188 5.438
+#KEYSTATE 2
+#MOUSE 3 4.188 5.500
+#KEYSTATE 2
+#MOUSE 3 4.188 5.562
+#KEYSTATE 2
+#MOUSE 3 4.188 5.625
+#KEYSTATE 2
+#MOUSE 3 4.188 5.625
+#KEYSTATE 2
+#MOUSE 3 4.188 5.688
+#KEYSTATE 2
+#MOUSE 3 4.188 5.750
+#KEYSTATE 2
+#MOUSE 3 4.250 5.812
+#KEYSTATE 2
+#MOUSE 3 4.250 5.875
+#KEYSTATE 2
+#MOUSE 3 4.250 6.000
+#KEYSTATE 2
+#MOUSE 3 4.312 6.000
+#KEYSTATE 2
+#MOUSE 3 4.312 6.062
+#KEYSTATE 2
+#MOUSE 3 4.312 6.125
+#KEYSTATE 2
+#MOUSE 3 4.312 6.188
+#KEYSTATE 2
+#MOUSE 3 4.312 6.250
+#KEYSTATE 2
+#MOUSE 3 4.375 6.250
+#KEYSTATE 2
+#MOUSE 3 4.438 6.250
+#KEYSTATE 2
+#MOUSE 3 4.500 6.250
+#KEYSTATE 2
+#MOUSE 3 4.562 6.312
+#KEYSTATE 2
+#MOUSE 3 4.625 6.312
+#KEYSTATE 2
+#MOUSE 3 4.625 6.375
+#KEYSTATE 2
+#MOUSE 3 4.688 6.375
+#KEYSTATE 2
+#MOUSE 3 4.750 6.375
+#KEYSTATE 2
+#MOUSE 3 4.750 6.438
+#KEYSTATE 2
+#MOUSE 3 4.750 6.500
+#KEYSTATE 2
+#MOUSE 3 4.812 6.500
+#KEYSTATE 2
+#MOUSE 3 4.812 6.562
+#KEYSTATE 2
+#MOUSE 3 4.875 6.562
+#KEYSTATE 2
+#MOUSE 3 4.938 6.562
+#KEYSTATE 2
+#MOUSE 3 5.000 6.562
+#KEYSTATE 2
+#MOUSE 3 5.000 6.562
+#KEYSTATE 2
+#MOUSE 3 5.062 6.562
+#KEYSTATE 2
+#MOUSE 3 5.125 6.562
+#KEYSTATE 2
+#MOUSE 3 5.188 6.562
+#KEYSTATE 2
+#MOUSE 3 5.250 6.562
+#KEYSTATE 2
+#MOUSE 3 5.312 6.562
+#KEYSTATE 2
+#MOUSE 3 5.312 6.500
+#KEYSTATE 2
+#MOUSE 3 5.312 6.438
+#KEYSTATE 2
+#MOUSE 3 5.312 6.375
+#KEYSTATE 2
+#MOUSE 3 5.375 6.375
+#KEYSTATE 2
+#MOUSE 3 5.438 6.375
+#KEYSTATE 2
+#MOUSE 3 5.438 6.312
+#KEYSTATE 2
+#MOUSE 3 5.438 6.312
+#KEYSTATE 2
+#MOUSE 3 5.500 6.312
+#KEYSTATE 2
+#MOUSE 3 5.500 6.250
+#KEYSTATE 2
+#MOUSE 3 5.562 6.250
+#KEYSTATE 2
+#MOUSE 3 5.562 6.188
+#KEYSTATE 2
+#MOUSE 3 5.562 6.125
+#KEYSTATE 2
+#MOUSE 3 5.625 6.125
+#KEYSTATE 2
+#MOUSE 3 5.625 6.062
+#KEYSTATE 2
+#MOUSE 3 5.625 6.062
+#KEYSTATE 2
+#MOUSE 3 5.625 6.000
+#KEYSTATE 2
+#MOUSE 3 5.625 6.000
+#KEYSTATE 2
+#MOUSE 3 5.688 6.000
+#KEYSTATE 2
+#MOUSE 3 5.688 5.938
+#KEYSTATE 2
+#MOUSE 3 5.750 5.938
+#KEYSTATE 2
+#MOUSE 3 5.750 5.875
+#KEYSTATE 2
+#MOUSE 3 5.812 5.875
+#KEYSTATE 2
+#MOUSE 3 5.812 5.812
+#KEYSTATE 2
+#MOUSE 3 5.875 5.750
+#KEYSTATE 2
+#MOUSE 3 5.875 5.688
+#KEYSTATE 2
+#MOUSE 3 5.938 5.688
+#KEYSTATE 2
+#MOUSE 3 5.938 5.625
+#KEYSTATE 2
+#MOUSE 3 5.938 5.625
+#KEYSTATE 2
+#MOUSE 3 6.000 5.625
+#KEYSTATE 2
+#MOUSE 4 6.000 5.625
+COMMAND Select
+MOUSE 2 4.25 4.5
+MOUSE 4 4.25 4.5
+COMMAND Rotate
+KEYSTATE 6
+MOUSE 2 4.25 4.5
+KEYSTATE 6
+MOUSE 3 12.000 18.000
+KEYSTATE 6
+MOUSE 4 1.000 10.000
MESSAGE
_________________________________________
-We can also align to curved shapes. The Selected object will be rotated to be parallel to the curve under the cursor.
-END
-STEP
-MOUSE 3 12.250 3.250
-MESSAGE
-_________________________________________
+There are Rotate options that you can access by Shift-Right-Click command menu and choosing 'Rotate...'.
-As we drag along the curved track the Selected object rotates to follow the curve.
-END
-STEP
-MOUSE 3 12.250 3.312
-MOUSE 3 12.312 3.312
-MOUSE 3 12.312 3.438
-MOUSE 3 12.312 3.562
-MOUSE 3 12.312 3.625
-MOUSE 3 12.312 3.750
-MOUSE 3 12.375 3.812
-MOUSE 3 12.375 3.938
-MOUSE 3 12.500 4.000
-MOUSE 3 12.562 4.062
-MOUSE 3 12.625 4.125
-MOUSE 3 12.688 4.250
-MOUSE 3 12.750 4.312
-MOUSE 3 12.812 4.312
-MOUSE 3 12.875 4.375
-MOUSE 3 12.938 4.438
-MOUSE 3 13.000 4.500
-MOUSE 3 13.062 4.625
-MOUSE 3 13.125 4.625
-MOUSE 3 13.188 4.688
-MOUSE 3 13.250 4.812
-MOUSE 3 13.312 4.875
-MOUSE 3 13.312 4.938
-MOUSE 3 13.312 5.000
-MOUSE 3 13.375 5.125
-MOUSE 3 13.438 5.250
-MOUSE 3 13.500 5.312
-MOUSE 3 13.500 5.438
-MOUSE 3 13.562 5.500
-MOUSE 3 13.625 5.562
-MOUSE 3 13.625 5.625
-MOUSE 3 13.625 5.688
-MOUSE 3 13.625 5.812
-MOUSE 3 13.688 5.938
-MOUSE 3 13.750 6.000
-MOUSE 3 13.812 6.125
-MOUSE 3 13.812 6.250
-MOUSE 3 13.875 6.312
-MOUSE 3 13.938 6.312
-MOUSE 3 14.000 6.375
-MOUSE 3 14.062 6.375
-MOUSE 3 14.188 6.438
-MOUSE 3 14.250 6.500
-MOUSE 3 14.312 6.562
-MOUSE 3 14.438 6.562
-MESSAGE
-_________________________________________
+You can rotate the selected object by a fixed rotatation (15, 30, 45, 90, 180) either clockwise or counter-clockwise, or by manually entering any angle.
-Again, if we drag across the track we can flip the stucture.
-END
-STEP
-MOUSE 3 14.600 6.200
-BIGPAUSE
-MESSAGE
-_________________________________________
-
-We can also Align to another Structure or any object.
+The other option is 'Align' which allows you align selected objects with an unselected object. This is useful to align railside buildings with track.
+Unfortunately, we can not currently demonstrate these features.
END
-STEP
-MOUSE 3 8.500 7.812
-MOUSE 3 8.500 7.875
-MOUSE 3 8.500 7.938
-MOUSE 3 8.500 8.000
-MOUSE 3 8.500 8.000
-MOUSE 3 8.500 8.062
-MOUSE 3 8.500 8.125
-MOUSE 3 8.500 8.188
-MOUSE 3 8.500 8.250
-MOUSE 3 8.500 8.312
-MOUSE 3 8.500 8.312
-MOUSE 3 8.500 8.375
-MOUSE 3 8.500 8.438
-MOUSE 3 8.500 8.500
-MOUSE 3 8.500 8.562
-MOUSE 3 8.500 8.625
-MOUSE 3 8.500 8.625
-MOUSE 3 8.500 8.688
-MOUSE 3 8.500 8.750
-MOUSE 3 8.562 8.812
-MOUSE 3 8.562 8.875
-MOUSE 3 8.562 8.938
-MOUSE 3 8.562 9.000
-MOUSE 3 8.625 9.000
-MOUSE 3 8.625 9.000
-MOUSE 3 8.625 9.062
-MOUSE 3 8.625 9.125
-MOUSE 3 8.625 9.188
-MOUSE 3 8.625 9.250
-MOUSE 3 8.625 9.312
-MOUSE 3 8.625 9.312
-MOUSE 3 8.625 9.375
-MOUSE 3 8.625 9.438
-MOUSE 3 8.625 9.375
-MOUSE 3 8.625 9.375
-MOUSE 3 8.688 9.312
-MOUSE 3 8.750 9.312
-MOUSE 3 8.750 9.312
-MOUSE 3 8.875 9.312
-MOUSE 3 8.938 9.312
-MOUSE 3 9.000 9.312
-MOUSE 3 9.000 9.312
-MOUSE 3 9.062 9.312
-MOUSE 3 9.062 9.312
-MOUSE 3 9.125 9.312
-MOUSE 3 9.188 9.312
-MOUSE 3 9.250 9.312
-MOUSE 3 9.312 9.312
-MOUSE 3 9.312 9.312
-MOUSE 3 9.375 9.312
-MOUSE 3 9.438 9.312
-MOUSE 3 9.500 9.312
-MOUSE 3 9.562 9.312
-MOUSE 3 9.625 9.312
-MOUSE 3 9.625 9.312
-MOUSE 3 9.688 9.312
-MOUSE 3 9.750 9.312
-MOUSE 3 9.812 9.312
-MOUSE 3 9.875 9.312
-MOUSE 3 9.938 9.312
-MOUSE 3 10.000 9.312
-MOUSE 3 10.000 9.312
-MOUSE 3 10.062 9.312
-MOUSE 3 10.125 9.312
-MOUSE 3 10.125 9.312
-MOUSE 3 10.125 9.250
-MOUSE 3 10.125 9.188
-MOUSE 3 10.125 9.125
-MOUSE 3 10.125 9.062
-MOUSE 3 10.062 9.062
-MOUSE 3 10.062 9.000
-MOUSE 3 10.062 9.000
-MOUSE 3 10.062 8.938
-MOUSE 3 10.062 8.875
-MOUSE 3 10.062 8.812
-MOUSE 3 10.125 8.812
-MOUSE 3 10.125 8.750
-MOUSE 3 10.125 8.688
-MOUSE 3 10.125 8.625
-MOUSE 3 10.125 8.625
-MOUSE 3 10.125 8.562
-MOUSE 3 10.125 8.500
-MOUSE 4 10.125 8.500
+#MESSAGE
+#_________________________________________
+#
+#Shift-Right-Click will display a popup-menu that you can use to rotate by fixed amount (15, 30, 45, 90 or 180).
+#
+#We can not currently show this command.
+#END
+#STEP
+#KEYSTATE 2
+#MOUSE 2 3.812 4.688
+#KEYSTATE 2
+#MOUSE 4 3.812 4.688
+#MENU 3.812 4.688 "Track Selected Menu " "90 CW"
+#MESSAGE
+#_________________________________________
+#
+#Another option of the <Rotate> command popup-menu is to Align the Selected object with some other object.
+#
+#First we will click on one line of the Selected object. The angle of this part of the object will be Aligned.
+#END
+#STEP
+#KEYSTATE 2
+#MOUSE 5 5.875 5.000
+#KEYSTATE 2
+#MOUSE 7 5.875 5.000
+#MENU 5.875 5.000 "Track Selected Menu " "Align"
+#MOUSE 2 5.812 5.125
+#MOUSE 4 5.812 5.125
+#MESSAGE
+#_________________________________________
+#
+#Next, we click on an Unselected object. The Selected structure will be rotated so that the line we clicked on will be parallel to the straight track.
+#END
+#STEP
+#MOUSE 2 6.625 3.062
+#MESSAGE
+#_________________________________________
+#
+#If we drag the mouse across the track, we can flip the structure by 180. This is similar to how we place turnouts.
+#END
+#STEP
+#MOUSE 3 6.750 2.750
+#BIGPAUSE
+#MOUSE 3 6.625 3.062
+#BIGPAUSE
+#MOUSE 3 6.750 2.750
+#MESSAGE
+#_________________________________________
+#
+#We can also align to curved shapes. The Selected object will be rotated to be parallel to the curve under the cursor.
+#END
+#STEP
+#MOUSE 3 12.250 3.250
+#MESSAGE
+#_________________________________________
+#
+#As we drag along the curved track the Selected object rotates to follow the curve.
+#END
+#STEP
+#MOUSE 3 12.250 3.312
+#MOUSE 3 12.312 3.312
+#MOUSE 3 12.312 3.438
+#MOUSE 3 12.312 3.562
+#MOUSE 3 12.312 3.625
+#MOUSE 3 12.312 3.750
+#MOUSE 3 12.375 3.812
+#MOUSE 3 12.375 3.938
+#MOUSE 3 12.500 4.000
+#MOUSE 3 12.562 4.062
+#MOUSE 3 12.625 4.125
+#MOUSE 3 12.688 4.250
+#MOUSE 3 12.750 4.312
+#MOUSE 3 12.812 4.312
+#MOUSE 3 12.875 4.375
+#MOUSE 3 12.938 4.438
+#MOUSE 3 13.000 4.500
+#MOUSE 3 13.062 4.625
+#MOUSE 3 13.125 4.625
+#MOUSE 3 13.188 4.688
+#MOUSE 3 13.250 4.812
+#MOUSE 3 13.312 4.875
+#MOUSE 3 13.312 4.938
+#MOUSE 3 13.312 5.000
+#MOUSE 3 13.375 5.125
+#MOUSE 3 13.438 5.250
+#MOUSE 3 13.500 5.312
+#MOUSE 3 13.500 5.438
+#MOUSE 3 13.562 5.500
+#MOUSE 3 13.625 5.562
+#MOUSE 3 13.625 5.625
+#MOUSE 3 13.625 5.688
+#MOUSE 3 13.625 5.812
+#MOUSE 3 13.688 5.938
+#MOUSE 3 13.750 6.000
+#MOUSE 3 13.812 6.125
+#MOUSE 3 13.812 6.250
+#MOUSE 3 13.875 6.312
+#MOUSE 3 13.938 6.312
+#MOUSE 3 14.000 6.375
+#MOUSE 3 14.062 6.375
+#MOUSE 3 14.188 6.438
+#MOUSE 3 14.250 6.500
+#MOUSE 3 14.312 6.562
+#MOUSE 3 14.438 6.562
+#MESSAGE
+#_________________________________________
+#
+#Again, if we drag across the track we can flip the stucture.
+#END
+#STEP
+#MOUSE 3 14.600 6.200
+#BIGPAUSE
+#MESSAGE
+#_________________________________________
+#
+#We can also Align to another Structure or any object.
+#
+#END
+#STEP
+#MOUSE 3 8.500 7.812
+#MOUSE 3 8.500 7.875
+#MOUSE 3 8.500 7.938
+#MOUSE 3 8.500 8.000
+#MOUSE 3 8.500 8.000
+#MOUSE 3 8.500 8.062
+#MOUSE 3 8.500 8.125
+#MOUSE 3 8.500 8.188
+#MOUSE 3 8.500 8.250
+#MOUSE 3 8.500 8.312
+#MOUSE 3 8.500 8.312
+#MOUSE 3 8.500 8.375
+#MOUSE 3 8.500 8.438
+#MOUSE 3 8.500 8.500
+#MOUSE 3 8.500 8.562
+#MOUSE 3 8.500 8.625
+#MOUSE 3 8.500 8.625
+#MOUSE 3 8.500 8.688
+#MOUSE 3 8.500 8.750
+#MOUSE 3 8.562 8.812
+#MOUSE 3 8.562 8.875
+#MOUSE 3 8.562 8.938
+#MOUSE 3 8.562 9.000
+#MOUSE 3 8.625 9.000
+#MOUSE 3 8.625 9.000
+#MOUSE 3 8.625 9.062
+#MOUSE 3 8.625 9.125
+#MOUSE 3 8.625 9.188
+#MOUSE 3 8.625 9.250
+#MOUSE 3 8.625 9.312
+#MOUSE 3 8.625 9.312
+#MOUSE 3 8.625 9.375
+#MOUSE 3 8.625 9.438
+#MOUSE 3 8.625 9.375
+#MOUSE 3 8.625 9.375
+#MOUSE 3 8.688 9.312
+#MOUSE 3 8.750 9.312
+#MOUSE 3 8.750 9.312
+#MOUSE 3 8.875 9.312
+#MOUSE 3 8.938 9.312
+#MOUSE 3 9.000 9.312
+#MOUSE 3 9.000 9.312
+#MOUSE 3 9.062 9.312
+#MOUSE 3 9.062 9.312
+#MOUSE 3 9.125 9.312
+#MOUSE 3 9.188 9.312
+#MOUSE 3 9.250 9.312
+#MOUSE 3 9.312 9.312
+#MOUSE 3 9.312 9.312
+#MOUSE 3 9.375 9.312
+#MOUSE 3 9.438 9.312
+#MOUSE 3 9.500 9.312
+#MOUSE 3 9.562 9.312
+#MOUSE 3 9.625 9.312
+#MOUSE 3 9.625 9.312
+#MOUSE 3 9.688 9.312
+#MOUSE 3 9.750 9.312
+#MOUSE 3 9.812 9.312
+#MOUSE 3 9.875 9.312
+#MOUSE 3 9.938 9.312
+#MOUSE 3 10.000 9.312
+#MOUSE 3 10.000 9.312
+#MOUSE 3 10.062 9.312
+#MOUSE 3 10.125 9.312
+#MOUSE 3 10.125 9.312
+#MOUSE 3 10.125 9.250
+#MOUSE 3 10.125 9.188
+#MOUSE 3 10.125 9.125
+#MOUSE 3 10.125 9.062
+#MOUSE 3 10.062 9.062
+#MOUSE 3 10.062 9.000
+#MOUSE 3 10.062 9.000
+#MOUSE 3 10.062 8.938
+#MOUSE 3 10.062 8.875
+#MOUSE 3 10.062 8.812
+#MOUSE 3 10.125 8.812
+#MOUSE 3 10.125 8.750
+#MOUSE 3 10.125 8.688
+#MOUSE 3 10.125 8.625
+#MOUSE 3 10.125 8.625
+#MOUSE 3 10.125 8.562
+#MOUSE 3 10.125 8.500
+#MOUSE 4 10.125 8.500
MESSAGE
=========================================
END
+REGRESSION START 10 - rotate
+STRUCTURE 1 0 0 0 0 DEMO 2 4.369912 1.832693 0 300.000000 "Walthers Interstate Fuel - Loading Rack 933-32000a"
+ D 0.000000 0.000000
+ L3 0 0.000000 0.750000 0.000000 0 3.750000 0.000000 0
+ L3 0 0.000000 3.750000 0.000000 0 3.750000 3.125000 0
+ L3 0 0.000000 3.750000 3.125000 0 0.750000 3.125000 0
+ L3 0 0.000000 3.687500 0.062500 0 1.687500 0.062500 0
+ L3 0 0.000000 1.687500 0.062500 0 1.687500 0.812500 0
+ L3 0 0.000000 1.687500 0.812500 0 3.687500 0.812500 0
+ L3 0 0.000000 3.687500 0.812500 0 3.687500 0.062500 0
+ L3 0 0.000000 3.687500 3.062500 0 1.687500 3.062500 0
+ L3 0 0.000000 1.687500 3.062500 0 1.687500 2.312500 0
+ L3 0 0.000000 1.687500 2.312500 0 3.687500 2.312500 0
+ L3 0 0.000000 3.687500 2.312500 0 3.687500 3.062500 0
+ L3 0 0.000000 3.687500 1.187500 0 1.687500 1.187500 0
+ L3 0 0.000000 1.687500 1.187500 0 1.687500 1.937500 0
+ L3 0 0.000000 1.687500 1.937500 0 3.687500 1.937500 0
+ L3 0 0.000000 3.687500 1.937500 0 3.687500 1.187500 0
+ A3 0 0.000000 0.088388 3.000000 2.687500 0 0.000000 360.000000
+ A3 0 0.000000 0.088388 3.000000 1.562500 0 0.000000 360.000000
+ A3 0 0.000000 0.088388 3.000000 0.437500 0 0.000000 360.000000
+ L3 0 0.000000 0.750000 2.875000 0 0.000000 2.875000 0
+ L3 0 0.000000 0.000000 2.875000 0 0.000000 0.250000 0
+ L3 0 0.000000 0.000000 0.250000 0 0.750000 0.250000 0
+ L3 0 0.000000 1.500000 2.187500 0 0.437500 2.187500 0
+ L3 0 0.000000 0.437500 2.187500 0 0.437500 0.937500 0
+ L3 0 0.000000 0.437500 0.937500 0 1.500000 0.937500 0
+ L3 0 0.000000 1.500000 0.937500 0 1.500000 2.187500 0
+ L3 0 0.000000 0.750000 3.125000 0 0.750000 2.187500 0
+ L3 0 0.000000 0.750000 0.000000 0 0.750000 0.937500 0
+ END
+STRAIGHT 2 0 0 0 0 DEMO 2
+ E4 2.250000 0.062500 236.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 19.375000 11.312500 56.697715 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 3 0 0 0 0 DEMO 2 22.859949 -1.206745 0 11.250000 0 0.000000 0.000000
+ E4 11.625000 -0.625000 182.964125 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 20.250359 9.736405 76.587298 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRUCTURE 4 0 0 0 0 DEMO 2 8.625000 7.750000 0 0.000000 "Walthers Shady Jct Water Tower 933-3205a"
+ D 0.000000 0.000000
+ L3 0 0.000000 0.000000 0.000000 0 1.562500 0.000000 0
+ L3 0 0.000000 1.562500 0.000000 0 1.562500 1.562500 0
+ L3 0 0.000000 1.562500 1.562500 0 0.000000 1.562500 0
+ L3 0 0.000000 0.000000 1.562500 0 0.000000 0.000000 0
+ L3 0 0.000000 0.000000 0.375000 0 1.250000 0.375000 0
+ L3 0 0.000000 1.250000 0.375000 0 1.250000 1.562500 0
+ L3 0 0.000000 0.625000 1.000000 0 0.625000 0.375000 0
+ L3 0 0.000000 0.625000 1.000000 0 1.250000 1.000000 0
+ L3 0 0.000000 0.625000 1.000000 0 0.000000 1.000000 0
+ L3 0 0.000000 0.625000 1.000000 0 0.625000 1.562500 0
+ L3 0 0.000000 0.625000 1.000000 0 1.062500 1.437500 0
+ L3 0 0.000000 0.625000 1.000000 0 1.062500 0.562500 0
+ L3 0 0.000000 0.625000 1.000000 0 0.187500 0.562500 0
+ L3 0 0.000000 0.625000 1.000000 0 0.187500 1.437500 0
+ L3 0 0.000000 0.625000 1.562500 0 1.062500 1.437500 0
+ L3 0 0.000000 1.062500 1.437500 0 1.250000 1.000000 0
+ L3 0 0.000000 1.250000 1.000000 0 1.062500 0.562500 0
+ L3 0 0.000000 1.062500 0.562500 0 0.625000 0.375000 0
+ L3 0 0.000000 0.625000 0.375000 0 0.187500 0.562500 0
+ L3 0 0.000000 0.187500 0.562500 0 0.000000 1.000000 0
+ L3 0 0.000000 0.000000 1.000000 0 0.187500 1.437500 0
+ L3 0 0.000000 0.187500 1.437500 0 0.625000 1.562500 0
+ L3 0 0.000000 1.250000 1.500000 0 1.750000 1.500000 0
+ L3 0 0.000000 1.750000 1.500000 0 1.750000 1.062500 0
+ L3 0 0.000000 1.750000 1.062500 0 1.250000 1.062500 0
+ END
+REGRESSION END
STEP
CLEAR
diff --git a/app/lib/demos/dmruler.xtr b/app/lib/demos/dmruler.xtr
index 7c24ef9..593fde8 100644
--- a/app/lib/demos/dmruler.xtr
+++ b/app/lib/demos/dmruler.xtr
@@ -43,4 +43,7 @@ MESSAGE
=========================================
END
STEP
+MOUSE 2 29.250 5.750
+MOUSE 4 29.250 5.750
+COMMAND Ruler
CLEAR
diff --git a/app/lib/demos/dmselect.xtr b/app/lib/demos/dmselect.xtr
index 99fecc3..06bed0c 100644
--- a/app/lib/demos/dmselect.xtr
+++ b/app/lib/demos/dmselect.xtr
@@ -1,6 +1,6 @@
VERSION 2
DEMOINIT
-ORIG 8.000 0.000 0.000
+ORIG 4 0.000 0.000
PARAMETER pref dragtimeout 2000
STRAIGHT 1 DEMO 1
T 2 7.466667 2.666667 270.000000
@@ -168,67 +168,116 @@ DRAW 20 0.000000 0.000000 0.000000
END
REDRAW
RESET
+CLEAR
+MOUSE 1 1.000 1.000
MESSAGE
The <Select> command is used to select tracks.
Selected tracks can be moved or rotated during the <Select> command.
Selected tracks can also be deleted, hidden, listed and exported.
+
+When you move the cursor near a track that could be selected, the track is drawn with think blue lines.
END
-BIGPAUSE
+STEP
+COMMAND Select
MESSAGE
_________________________________________
-A single Left-Click selects tracks.
+A Left-Click selects a track
END
STEP
MOUSE 2 18.347 2.773
MOUSE 4 18.347 2.773
+MESSAGE
+================================================
+The selected track will have red X's drawn where it is connected to unselected tracks. This indicates where the track will be disconnected if the selected tracks are moved, rotated or deleted.
+
+A Ctrl-Left-Click adds tracks to the selection
+END
+STEP
+KEYSTATE 4
MOUSE 2 27.733 6.613
+KEYSTATE 4
MOUSE 4 27.733 6.613
+KEYSTATE 4
MOUSE 2 30.720 9.920
+KEYSTATE 4
MOUSE 4 30.720 9.920
+KEYSTATE 4
MOUSE 2 12.373 13.013
+KEYSTATE 4
MOUSE 4 12.373 13.013
-BIGPAUSE
MESSAGE
-_________________________________________
+___________________________________________
-Selecting a selected track de-selects it.
+Selecting a selected track re-selects only it.
END
STEP
MOUSE 2 27.840 8.213
MOUSE 4 27.840 8.213
MESSAGE
+___________________________________________
+
+Selecting off all tracks de-selects them.
+END
+STEP
+MOUSE 2 12.840 8.213
+MOUSE 4 12.840 8.213
+MESSAGE
=========================================
END
STEP
CLEAR
MESSAGE
+To demonstrate Select Connected, first select two tracks at the end of a part to be selected
+
+END
+STEP
+#KEYSTATE 4
+#MOUSE 2 10.347 2.773
+#KEYSTATE 4
+#MOUSE 4 10.347 2.773
+MOUSE 2 2.5 6.6
+MOUSE 4 2.5 6.6
+KEYSTATE 4
+MOUSE 2 27.733 6.613
+KEYSTATE 4
+MOUSE 4 27.733 6.613
+#CLEAR
+MESSAGE
+__________________________________________
+
Shift-Left-Click on a track will select all unselected tracks connected to the track. Selection stops at a previously selected track.
END
STEP
KEYSTATE 2
-MOUSE 2 27.627 14.400
+#MOUSE 2 27.627 14.400
+MOUSE 2 10.347 2.773
KEYSTATE 2
-MOUSE 4 27.627 14.400
+#MOUSE 4 27.627 14.400
+MOUSE 4 10.347 2.773
MESSAGE
_________________________________________
-Be careful with this because its easy to select all tracks this way.
+Be careful with this because its very easy to select all tracks this way
END
STEP
+MOUSE 2 19.840 2.560
+MOUSE 4 19.840 2.560
+BIGPAUSE
KEYSTATE 2
MOUSE 2 19.840 2.560
KEYSTATE 2
MOUSE 4 19.840 2.560
+STEP
MESSAGE
_________________________________________
The <esc> key will deselect all objects.
END
STEP
-MOUSE 6920 19.840 2.560
+MOUSE 6200 19.840 2.560
RESET
MESSAGE
=========================================
@@ -246,167 +295,310 @@ MOUSE 4 37.480 -1.600
MESSAGE
_________________________________________
-And Right-Drag de-selects all tracks within an area.
-END
-STEP
-MOUSE 5 12.480 2.453
-MOUSE 7 37.707 0.107
-MESSAGE
-=========================================
-END
-STEP
-CLEAR
-MESSAGE
Shift-Left-Drag is used to move selected tracks.
When you move selected tracks that are connected to unselected tracks, the tracks will be disconnected. These points are marked by a Red cross on the layout.
-END
-STEP
-KEYSTATE 2
-MOUSE 2 14.827 8.960
-KEYSTATE 2
-MOUSE 3 21.653 8.640
-KEYSTATE 2
-MOUSE 4 21.653 8.640
-MESSAGE
-=========================================
-END
-STEP
-CLEAR
-MESSAGE
-Drawing the tracks while moving can be very time-consuming. We had just used the "Normal" method of drawing tracks.
-
-The Command Options dialog (from the Options menu) contains a Radio button group which you can use to pick the drawing method.
-
-You can also popup the Command Options Menu by pressing Shift-Right-Click which includes options for setting the drawing method. These options are also available for the Move and Rotate Command Options Menu.
-END
-STEP
-PARAMETER misc cmdCmdopt
-MESSAGE
-_________________________________________
-The next method is "Simple" draws. Here tracks are drawn using one line, no End-Points are drawn, lines are not drawn and structures are drawn using a box outline.
-
-Note: you can move the Command Options dialog if it obscures the main window.
+If the unconnected end point of a track and one being moved are close enough, two circles are displayed, showing where the tracks will be snapped together.
END
STEP
-PARAMETER cmdopt move-quick 1
-BIGPAUSE
KEYSTATE 2
-MOUSE 2 24.533 2.027
+MOUSE 1 13.370000 2.144667
KEYSTATE 2
-MOUSE 3 20.267 2.453
+MOUSE 2 13.370000 2.144667
KEYSTATE 2
-MOUSE 4 20.267 2.453
+MOUSE 3 35.735615 16.2
+KEYSTATE 2
+MOUSE 4 35.735615 16.2
MESSAGE
-_________________________________________
+__________________________________________
-The next method is to just draw the End-Points of the selected tracks.
-
-Unconnected End-Points are indicated by Red crosses, and connected End-Points are indicated by Red lines.
+Let's move the Main window to see what's going on next
END
STEP
-PARAMETER cmdopt move-quick 2
-BIGPAUSE
-KEYSTATE 2
-MOUSE 2 17.493 0.427
-KEYSTATE 2
-MOUSE 3 17.493 3.427
-KEYSTATE 2
-MOUSE 4 15.787 1.600
+ORIG 4 27.000000 14.000000
MESSAGE
-_________________________________________
+__________________________________________
-Now we will go back to using the Normal method again.
+Ctrl-Left-Drag rotates the selected tracks about the pivot point (which is where you started the drag)
END
STEP
-PARAMETER cmdopt move-quick 0
-BIGPAUSE
-PARAMETER cmdopt ok
+KEYSTATE 4
+MOUSE 2 45.0 24.0
+KEYSTATE 4
+MOUSE 3 60.0 24.0
+KEYSTATE 4
+MOUSE 3 60.0 36.0
+KEYSTATE 4
+MOUSE 3 45.0 36.0
+KEYSTATE 4
+MOUSE 4 45.0 36.0
+#KEYSTATE 4
+#MOUSE 1 35.735615 15.54695
+#BIGPAUSE
+#KEYSTATE 4
+#MOUSE 2 35.7 16.4
+#STEP
+#KEYSTATE 4
+#MOUSE 3 41.653 18.640
+#PAUSE 200
+#KEYSTATE 4
+#MOUSE 3 44.960 19.813
+#PAUSE 200
+#KEYSTATE 4
+#MOUSE 3 45.067 20.240
+#KEYSTATE 4
+#MOUSE 3 45.173 20.453
+#KEYSTATE 4
+#MOUSE 3 45.280 20.773
+#KEYSTATE 4
+#MOUSE 3 45.387 21.093
+#KEYSTATE 4
+#MOUSE 3 45.493 21.520
+#STEP
+#KEYSTATE 4
+#MOUSE 3 45.813 21.947
+#KEYSTATE 4
+#MOUSE 3 46.133 22.480
+#KEYSTATE 4
+#MOUSE 3 46.453 22.800
+#KEYSTATE 4
+#MOUSE 3 46.987 22.907
+#KEYSTATE 4
+#MOUSE 3 47.627 23.227
+#KEYSTATE 4
+#MOUSE 3 48.053 23.227
+#KEYSTATE 4
+#MOUSE 3 48.267 23.227
+#KEYSTATE 4
+#MOUSE 3 48.480 23.227
+#KEYSTATE 4
+#MOUSE 3 48.267 23.227
+#KEYSTATE 4
+#MOUSE 3 48.373 23.227
+#STEP
+#KEYSTATE 4
+#MOUSE 4 48.373 23.227
MESSAGE
=========================================
END
STEP
CLEAR
MESSAGE
-Shift-Right-Drag rotates the selected tracks about the pivot point (which is where you started the drag)
+Next we select the <Join Tracks> command to demonstrate "Move To Join"
END
STEP
-KEYSTATE 2
-MOUSE 5 25.280 9.387
-PAUSE 200
-KEYSTATE 2
-MOUSE 6 24.960 9.387
-PAUSE 200
-KEYSTATE 2
-MOUSE 6 24.960 9.813
-PAUSE 200
-KEYSTATE 2
-MOUSE 6 25.067 10.240
-KEYSTATE 2
-MOUSE 6 25.173 10.453
-KEYSTATE 2
-MOUSE 6 25.280 10.773
-KEYSTATE 2
-MOUSE 6 25.387 11.093
-KEYSTATE 2
-MOUSE 6 25.493 11.520
-KEYSTATE 2
-MOUSE 6 25.813 11.947
-KEYSTATE 2
-MOUSE 6 26.133 12.480
-KEYSTATE 2
-MOUSE 6 26.453 12.800
-KEYSTATE 2
-MOUSE 6 26.987 12.907
-KEYSTATE 2
-MOUSE 6 27.627 13.227
-KEYSTATE 2
-MOUSE 6 28.053 13.227
-KEYSTATE 2
-MOUSE 6 28.267 13.227
-KEYSTATE 2
-MOUSE 6 28.480 13.227
-KEYSTATE 2
-MOUSE 6 28.267 13.227
-KEYSTATE 2
-MOUSE 6 28.373 13.227
-KEYSTATE 2
-MOUSE 7 28.373 13.227
+COMMAND JoinTrack
MESSAGE
-=========================================
-END
-STEP
-CLEAR
-MESSAGE
-Next we select the <Join Tracks> command. You can use Shift-Left-Click to move an End-Point of a selected track to join with an unselected track.
+__________________________________________
+
+You can use Shift-Left-Click to select an open endpoint of a selected track to join with an unselected track.
-Note: because of differing display resolutions the next mouse click may not be positioned correctly in this demo and the Move-To-Join operation may not be demonstrated.
+We'll move the Main window again.
END
STEP
-COMMAND Join
-BIGPAUSE
-#MOUSE 5 14.40 12.37
-#MOUSE 7 14.40 12.37
-#MOUSE 5 14.40 14.61
-#MOUSE 7 14.40 14.61
-#MOUSE 5 13.90 14.287
-#MOUSE 7 13.90 14.287
-#MOUSE 5 14.21 13.95
-#MOUSE 7 14.21 13.95
+ORIG 4 0 0
+#KEYSTATE 2
+#MOUSE 1 52.50 14.35
+#PAUSE 500
+#KEYSTATE 2
+#MOUSE 2 52.50 14.35
+#KEYSTATE 2
+#MOUSE 4 52.50 14.35
KEYSTATE 2
-MOUSE 2 13.077 10.857
-#MOUSE 2 16.39 14.51
+MOUSE 1 42.5 14
+PAUSE 500
KEYSTATE 2
-MOUSE 4 13.077 10.857
-#MOUSE 4 16.39 14.51
-BIGPAUSE
+MOUSE 2 42.5 14
KEYSTATE 2
-MOUSE 2 13.333 2.773
-KEYSTATE 2
-MOUSE 4 13.333 2.773
+MOUSE 4 42.5 14
MESSAGE
-=========================================
+__________________________________________
+
+You then Left-Click on an endpoint of a unselected track to move the selected tracks to join.
+
+END
+STEP
+#MOUSE 1 13.405000 2.666667
+#PAUSE 500
+#MOUSE 2 13.405000 2.666667
+#MOUSE 4 13.405000 2.666667
+MOUSE 1 13 13
+PAUSE 500
+MOUSE 2 13 13
+MOUSE 4 13 13
+MESSAGE
+================================================
END
+REGRESSION START 10 - select final
+STRAIGHT 1 0 0 0 0 DEMO 2
+ T4 2 7.466667 2.666667 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 8.000000 2.666667 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 2 0 0 0 0 DEMO 2 7.466667 7.916667 0 5.250000 0 0.000000 0.000000
+ T4 1 7.466667 2.666667 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 8 7.471737 13.166664 90.055338 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 3 0 0 0 0 DEMO 2 8.000000 2.666667 0 0.000000 "Peco-55 Medium Right SL-E395F"
+ T4 1 8.000000 2.666667 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 13.405000 2.666667 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 13.370000 2.144667 99.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
+ S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
+ END
+STRAIGHT 4 0 0 0 0 DEMO 2
+ T4 9 22.720003 2.666672 89.999981 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 13.405003 2.666669 269.999981 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 5 0 0 0 0 DEMO 2
+ T4 3 13.370004 2.144669 279.685981 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 7 17.844754 1.380912 99.685981 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 6 0 0 0 0 DEMO 2
+ E4 32.964242 1.166675 89.999981 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 7 20.373337 1.166671 269.999981 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 7 0 0 0 0 DEMO 2 20.373332 16.195529 0 15.028859 0 0.000000 0.000000
+ T4 6 20.373337 1.166671 89.999981 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 17.844754 1.380912 279.685981 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 8 0 0 0 0 DEMO 2
+ T4 2 7.471737 13.166664 270.055338 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 10 8.533996 13.165638 90.055338 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 9 0 0 0 0 DEMO 2 22.720002 7.909304 0 5.242633 0 0.000000 0.000000
+ T4 11 22.720000 13.151937 269.999981 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 22.720003 2.666672 269.999981 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 10 0 0 0 0 DEMO 2 8.533996 13.165638 0 0.055338 "Peco-55 Medium Left SL-E396F"
+ T4 8 8.533996 13.165638 270.055338 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 11 13.938993 13.160418 90.055338 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 12 13.904497 13.682451 80.369338 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 -23.136000 0.351000 23.136000 170.297000 9.700000
+ S 0 0.000000 4.251000 0.331000 5.370000 0.522000
+ END
+STRAIGHT 11 0 0 0 0 DEMO 2
+ T4 9 22.720000 13.151937 90.055338 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 10 13.938993 13.160418 270.055338 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 12 0 0 0 0 DEMO 2
+ T4 10 13.904497 13.682453 260.369319 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 13 15.746779 13.995067 80.369319 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 13 0 0 0 0 DEMO 2 15.746779 13.995064 0 350.369338 "Peco-55 Medium Right SL-E395F"
+ T4 12 15.746779 13.995064 260.369338 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 14 21.075605 14.899301 80.369338 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 15 21.128427 14.378802 90.055338 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
+ S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
+ END
+STRAIGHT 14 0 0 0 0 DEMO 2
+ T4 17 26.016207 15.737661 80.369338 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 13 21.075605 14.899301 260.369338 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 15 0 0 0 0 DEMO 2
+ T4 13 21.128427 14.378802 270.055338 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 35.757013 14.364673 90.055338 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 16 0 0 0 0 DEMO 2
+ T4 17 27.626441 15.872527 270.055338 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 35.735615 15.864695 90.055338 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 17 0 0 0 0 DEMO 2 27.617198 6.302742 0 9.569789 0 0.000000 0.000000
+ T4 14 26.016207 15.737661 260.369338 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 16 27.626441 15.872527 90.055338 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRUCTURE 18 0 0 0 0 N 2 29.120001 8.853340 0 359.999981 "Walthers 933-3212 Red Wing Milling Co"
+ D 0.000000 0.000000
+ L3 0 0.000000 4.500000 0.000000 0 4.500000 0.375000 0
+ L3 0 0.000000 6.625000 0.375000 0 4.500000 0.375000 0
+ L3 0 0.000000 6.625000 4.875000 0 2.062500 4.875000 0
+ L3 0 0.000000 2.062500 4.875000 0 2.062500 4.500000 0
+ L3 0 0.000000 2.062500 4.437500 0 0.000000 4.437500 0
+ L3 0 0.000000 0.375000 0.750000 0 3.250000 0.750000 0
+ L3 0 0.000000 3.250000 0.750000 0 3.250000 1.625000 0
+ L3 0 0.000000 3.250000 1.625000 0 0.375000 1.625000 0
+ L3 0 0.000000 0.375000 1.625000 0 0.375000 0.750000 0
+ L3 0 0.000000 3.062500 1.437500 0 2.625000 1.437500 0
+ L3 0 0.000000 2.625000 1.437500 0 2.625000 1.062500 0
+ L3 0 0.000000 2.625000 1.062500 0 3.062500 1.062500 0
+ L3 0 0.000000 3.062500 1.062500 0 3.062500 1.437500 0
+ L3 0 0.000000 4.500000 0.000000 0 4.500000 -0.687500 0
+ L3 0 0.000000 4.500000 -0.687500 0 2.000000 -0.687500 0
+ L3 0 0.000000 2.000000 -0.687500 0 2.000000 0.375000 0
+ L3 0 0.000000 2.000000 0.375000 0 0.000000 0.375000 0
+ L3 0 0.000000 4.500000 0.375000 0 2.000000 0.375000 0
+ L3 0 0.000000 2.000000 0.000000 0 0.000000 0.000000 0
+ L3 0 0.000000 2.250000 0.375000 0 2.250000 -0.062500 0
+ L3 0 0.000000 2.250000 -0.062500 0 4.062500 -0.062500 0
+ L3 0 0.000000 4.062500 -0.062500 0 4.062500 0.375000 0
+ A3 0 0.000000 0.139754 3.187500 0.125000 0 0.000000 360.000000
+ A3 0 0.000000 0.139754 3.812500 0.125000 0 0.000000 360.000000
+ A3 0 0.000000 0.139754 2.625000 0.125000 0 0.000000 360.000000
+ A3 0 0.000000 0.062500 3.812500 0.125000 0 0.000000 360.000000
+ A3 0 0.000000 0.062500 3.187500 0.125000 0 0.000000 360.000000
+ A3 0 0.000000 0.000000 2.625000 0.125000 0 0.000000 360.000000
+ A3 0 0.000000 0.062500 2.625000 0.125000 0 0.000000 360.000000
+ L3 0 0.000000 6.625000 4.875000 0 6.625000 0.375000 0
+ L3 0 0.000000 2.062500 4.437500 0 6.625000 4.437500 0
+ L3 0 0.055556 2.937500 -0.062500 0 2.937500 -0.562500 0
+ L3 0 0.055556 1.312500 0.375000 0 1.312500 -0.062500 0
+ L3 0 0.000000 0.000000 4.437500 0 0.000000 4.437500 0
+ L3 0 0.000000 0.000000 4.437500 0 0.000000 0.000000 0
+ END
+DRAW 19 0 0 0 0 0.347240 -1.465102 0 356.869372
+ L3 0 0.000000 23.293333 3.226667 0 25.933333 4.400000 0
+ L3 0 0.000000 25.933333 4.400000 0 25.880000 4.746667 0
+ L3 0 0.000000 23.300000 3.226667 0 23.020000 3.466667 0
+ L3 0 0.000000 23.453333 1.973333 0 23.533333 2.346667 0
+ L3 0 0.000000 23.506667 2.346667 0 26.440000 3.440000 0
+ L3 0 0.000000 26.413333 3.440000 0 26.680000 3.146667 0
+ END
+DRAW 20 0 0 0 0 0.000004 -0.000003 0 359.999981
+ L3 255 0.000000 24.026667 2.186667 0 24.666667 1.653333 0
+ L3 255 0.000000 24.666667 1.653333 0 25.573333 1.973333 0
+ L3 255 0.000000 25.573333 1.973333 0 26.693333 1.760000 0
+ L3 255 0.000000 26.693333 1.760000 0 27.706667 2.026667 0
+ L3 255 0.000000 27.706667 2.026667 0 28.720000 1.920000 0
+ L3 255 0.000000 28.720000 1.920000 0 29.573333 1.920000 0
+ L3 255 0.000000 29.573333 1.920000 0 29.946667 2.346667 0
+ L3 255 0.000000 29.946667 2.346667 0 30.160000 3.840000 0
+ L3 255 0.000000 30.160000 3.840000 0 29.626667 4.266667 0
+ L3 255 0.000000 29.626667 4.266667 0 28.400000 3.946667 0
+ L3 255 0.000000 28.400000 3.946667 0 28.133333 3.040000 0
+ L3 255 0.000000 28.133333 3.040000 0 27.120000 2.613333 0
+ L3 255 0.000000 27.120000 2.613333 0 26.320000 2.826667 0
+ L3 255 0.000000 26.320000 2.826667 0 25.413333 2.826667 0
+ L3 255 0.000000 23.653333 3.253333 0 23.066667 4.320000 0
+ L3 255 0.000000 23.066667 4.320000 0 22.266667 4.960000 0
+ L3 255 0.000000 22.266667 4.960000 0 20.720000 5.173333 0
+ L3 255 0.000000 20.720000 5.173333 0 19.706667 5.226667 0
+ L3 255 0.000000 19.706667 5.226667 0 18.746667 5.333333 0
+ L3 255 0.000000 18.746667 5.333333 0 18.266667 5.653333 0
+ L3 255 0.000000 18.266667 5.653333 0 17.893333 6.080000 0
+ L3 255 0.000000 17.893333 6.080000 0 18.320000 5.813333 0
+ L3 255 0.000000 18.320000 5.813333 0 19.280000 5.440000 0
+ L3 255 0.000000 19.280000 5.440000 0 20.506667 5.653333 0
+ L3 255 0.000000 20.506667 5.653333 0 22.480000 5.386667 0
+ L3 255 0.000000 22.480000 5.386667 0 23.813333 5.066667 0
+ L3 255 0.000000 23.813333 5.066667 0 24.293333 4.533333 0
+ L3 255 0.000000 24.293333 4.533333 0 24.613333 3.786667 0
+ END
+REGRESSION END
STEP
CLEAR
diff --git a/app/lib/demos/dmsplit.xtr b/app/lib/demos/dmsplit.xtr
index 52ce3f6..2e4a4d9 100644
--- a/app/lib/demos/dmsplit.xtr
+++ b/app/lib/demos/dmsplit.xtr
@@ -73,9 +73,13 @@ STEP
COMMAND Select
MOUSE 2 27.333 4.750
MOUSE 4 27.333 4.750
+KEYSTATE 4
MOUSE 2 21.333 3.000
+KEYSTATE 4
MOUSE 4 21.333 3.000
+KEYSTATE 4
MOUSE 2 16.250 2.667
+KEYSTATE 4
MOUSE 4 16.250 2.667
BIGPAUSE
PARAMETER misc cmdTunnel
@@ -97,4 +101,42 @@ MESSAGE
=========================================
END
STEP
+REGRESSION START 10 - split tracks and tunnels
+STRAIGHT 1 0 0 0 0 DEMO 2
+ T4 5 10.000000 2.633343 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 17.550000 2.633353 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 2 0 0 0 0 DEMO 0 17.550000 2.633353 0 0.000000 "Peco-55 Medium Left SL-E396F"
+ T4 1 17.550000 2.633353 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 22.955000 2.633353 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 22.920000 3.155353 80.314000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 -23.136000 0.351000 23.136000 170.297000 9.700000
+ S 0 0.000000 4.251000 0.331000 5.370000 0.522000
+ END
+STRAIGHT 3 0 0 0 0 DEMO 2
+ E4 33.417000 2.633340 90.000125 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 22.955000 2.633349 270.000125 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 4 0 0 0 0 DEMO 0 20.249057 18.804049 0 15.875000 0 0.000000 0.000000
+ T4 6 31.018207 7.140386 47.283470 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 22.920000 3.155353 260.314152 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 5 0 0 0 0 DEMO 2
+ E4 2.466667 2.633333 269.999924 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 1 10.000000 2.633343 89.999924 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 6 0 0 0 0 DEMO 2 20.249057 18.804049 0 15.875000 0 0.000000 0.000000
+ E4 34.679884 12.188397 24.628563 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 31.018207 7.140386 227.283470 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 7 0 0 0 0 DEMO 2
+ E4 40.800000 2.633333 90.000051 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 33.417000 2.633340 270.000051 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
CLEAR
diff --git a/app/lib/demos/dmstrtrk.xtr b/app/lib/demos/dmstrtrk.xtr
index a37b90c..d48ceef 100644
--- a/app/lib/demos/dmstrtrk.xtr
+++ b/app/lib/demos/dmstrtrk.xtr
@@ -28,4 +28,10 @@ MESSAGE
=========================================
END
STEP
+REGRESSION START 10 Straight track
+STRAIGHT 1 0 0 0 0 DEMO 2
+ E4 6.833000 3.667000 258.375734 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 36.000000 9.667000 78.375734 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
CLEAR
diff --git a/app/lib/demos/dmtbledg.xtr b/app/lib/demos/dmtbledg.xtr
index d2caf81..4e00dcd 100644
--- a/app/lib/demos/dmtbledg.xtr
+++ b/app/lib/demos/dmtbledg.xtr
@@ -1,20 +1,20 @@
VERSION 7
DEMOINIT
-ORIG 10.000 0.000 0.000
+ORIG 7.000 0.000 0.000
PARAMETER display description-fontsize 24
-CURVE 1 0 0 0 0 DEMO -1 12.000000 14.555556 10.000000
+CURVE 1 0 0 0 0 DEMO 2 12.000000 14.555556 10.000000
T 4 18.000000 6.555556 53.130102
T 3 18.207029 22.396014 128.367485
END
-CURVE 2 0 0 0 0 DEMO -1 44.666667 14.333333 10.000000
+CURVE 2 0 0 0 0 DEMO 2 44.666667 14.333333 10.000000
T 4 38.666667 22.333333 233.130102
T 3 38.459637 6.492875 308.367485
END
-STRAIGHT 3 0 0 0 0 DEMO -1
+STRAIGHT 3 0 0 0 0 DEMO 2
T 1 18.207029 22.396014 308.140387
T 2 38.459637 6.492875 128.140387
END
-STRAIGHT 4 0 0 0 0 DEMO -1
+STRAIGHT 4 0 0 0 0 DEMO 2
T 1 18.000000 6.555556 232.640407
T 2 38.666667 22.333333 52.640407
END
@@ -36,11 +36,14 @@ MOUSE 3 36.500 2.667
MOUSE 4 36.500 2.667
MOUSE 2 36.500 2.667
MOUSE 3 58.000 2.667
+STEP
MOUSE 4 58.000 2.667
BIGPAUSE
MOUSE 2 0.000 26.167
MOUSE 3 58.000 26.167
+STEP
MOUSE 4 58.000 26.167
+MOUSE 1 58.000 26.167
MESSAGE
_________________________________________
@@ -124,8 +127,8 @@ MOUSE 3 58.167 1.667
MOUSE 3 58.167 1.833
MOUSE 3 58.000 1.833
MOUSE 3 57.833 1.833
-MOUSE 3 57.667 1.833
-MOUSE 4 57.667 1.833
+MOUSE 3 57.667 2.000
+MOUSE 4 57.667 2.000
MESSAGE
_________________________________________
@@ -135,6 +138,8 @@ END
STEP
COMMAND Modify
MOUSE 2 27.667 9.333
+MOUSE 4 27.667 9.333
+MOUSE 2 27.667 9.333
MOUSE 3 28.333 8.667
MOUSE 3 29.000 8.000
MOUSE 3 29.167 7.667
@@ -171,12 +176,15 @@ MOUSE 3 28.333 5.667
MOUSE 3 28.333 5.833
MOUSE 3 28.333 6.000
MOUSE 4 28.333 6.000
+MOUSE 8200 28.333 6.000
MESSAGE
_________________________________________
If you hold down the Control key while dragging then the Table Edge will be attracted to other objects.
END
STEP
+MOUSE 2 28.167 9.333
+MOUSE 4 28.167 9.333
KEYSTATE 4
MOUSE 2 28.167 9.333
KEYSTATE 4
@@ -205,9 +213,46 @@ KEYSTATE 4
MOUSE 3 28.333 6.000
KEYSTATE 4
MOUSE 4 28.167 5.667
+MOUSE 8200 28.167 5.667
STEP
MESSAGE
=========================================
END
+REGRESSION START 10 - table edge
+CURVE 1 0 0 0 0 DEMO 2 12.000000 14.555556 0 10.000000 0 0.000000 0.000000
+ T4 4 18.000000 6.555556 53.130102 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 18.207029 22.396014 128.367485 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 2 0 0 0 0 DEMO 2 44.666667 14.333333 0 10.000000 0 0.000000 0.000000
+ T4 4 38.666667 22.333333 233.130102 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 38.459637 6.492875 308.367485 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 3 0 0 0 0 DEMO 2
+ T4 1 18.207029 22.396014 308.140387 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 38.459637 6.492875 128.140387 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 4 0 0 0 0 DEMO 2
+ T4 1 18.000000 6.555556 232.640407 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 38.666667 22.333333 52.640407 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+DRAW 5 0 0 0 0 0.000000 0.000000 0 0.000000
+ Q3 0 0.291667 0.000000 2.667000 0 19.833000 2.667000 0
+ END
+DRAW 6 0 0 0 0 0.000000 0.000000 0 0.000000
+ Q3 0 0.291667 19.833000 2.667000 0 28.333000 6.000000 0
+ END
+DRAW 7 0 0 0 0 0.000000 0.000000 0 0.000000
+ Q3 0 0.291667 28.333000 6.000000 0 36.500000 2.667000 0
+ END
+DRAW 8 0 0 0 0 0.000000 0.000000 0 0.000000
+ Q3 0 0.291667 36.500000 2.667000 0 58.000000 2.667000 0
+ END
+DRAW 9 0 0 0 0 0.000000 0.000000 0 0.000000
+ Q3 0 0.291667 0.000000 26.167000 0 58.000000 26.167000 0
+ END
+DRAW 10 0 0 0 0 0.000000 0.000000 0 0.000000
+ Q3 0 0.291667 58.000000 26.167000 0 58.000000 2.667000 0
+ END
+REGRESSION END
STEP
CLEAR
diff --git a/app/lib/demos/dmtosel.xtr b/app/lib/demos/dmtosel.xtr
index 953d43b..df3d067 100644
--- a/app/lib/demos/dmtosel.xtr
+++ b/app/lib/demos/dmtosel.xtr
@@ -1,6 +1,6 @@
VERSION 2
DEMOINIT
-ORIG 8.000 0.000 0.000
+ORIG 4.000 0.000 0.000
PARAMETER turnout hide 1
STRAIGHT 1 DEMO 1
E 2.050000 1.050000 270.000000
@@ -90,6 +90,7 @@ Then you can rotate the turnout by Right dragging.
You can also use Shift-Right-Click to display a popup menu that lets you rotate the Turnout by specific angles.
END
STEP
+MOUSE 1 13.250 8.500
MOUSE 5 13.250 8.500
PAUSE 390
MOUSE 6 13.250 8.583
@@ -137,7 +138,7 @@ _________________________________________
When you are satisfied with the position and orientation of the turnout press Space bar or the Return key on the keyboard to finish placing the turnout.
-Pressing the Ok button on the Turnout dialog will end the <Turnout> command as well as placing the turnout.
+Pressing the Close button on the Turnout dialog will end the <Turnout> command as well as placing the turnout.
END
STEP
MOUSE 3336 10.500 10.250
@@ -145,6 +146,44 @@ MOUSE 3336 10.500 10.250
MESSAGE
=========================================
END
+REGRESSION START 10 - turnout select 1
+STRAIGHT 1 0 0 0 0 DEMO 2
+ E4 2.050000 1.050000 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 14.883333 1.050017 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 2 0 0 0 0 DEMO 2 20.993080 13.050025 0 12.000000 0 0.000000 0.000000
+ E4 32.991545 13.241946 359.083680 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 20.993048 1.050025 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 3 0 0 0 0 DEMO 2 14.883333 1.050017 0 0.000000 "Peco-55 Medium Left SL-E396F"
+ T4 1 14.883333 1.050017 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 20.288333 1.050017 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 20.253333 1.572017 80.314000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 -23.136000 0.351000 23.136000 170.297000 9.700000
+ S 0 0.000000 4.251000 0.331000 5.370000 0.522000
+ END
+STRAIGHT 4 0 0 0 0 DEMO 2
+ T4 2 20.993080 1.050025 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 20.288333 1.050024 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 5 0 0 0 0 DEMO 2 13.294561 8.570024 0 212.471192 "Peco-55 Medium Right SL-E395F"
+ E4 13.294561 8.570024 122.471192 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 8.734570 11.471836 302.471192 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 9.044347 11.893437 312.157192 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
+ S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
+ END
+REGRESSION END
STEP
CLEAR
MESSAGE
@@ -181,7 +220,7 @@ PAUSE 170
MESSAGE
_________________________________________
-By moving the cursor from one side to the other of the track centerline you can flip the turnout 180.
+By moving the cursor from one side to the other of the track centerline you can flip the turnout 180�.
END
STEP
MOUSE 3 10.667 1.333
@@ -269,6 +308,60 @@ MESSAGE
=========================================
END
BIGPAUSE
+REGRESSION START 10 - turnout select 2
+STRAIGHT 1 0 0 0 0 DEMO 2
+ E4 2.050000 1.050000 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 14.883333 1.050017 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 2 0 0 0 0 DEMO 2 20.993080 13.050025 0 12.000000 0 0.000000 0.000000
+ T4 7 30.934023 6.328592 34.064054 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 20.993048 1.050025 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 3 0 0 0 0 DEMO 2 14.883333 1.050017 0 0.000000 "Peco-55 Medium Left SL-E396F"
+ T4 1 14.883333 1.050017 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 20.288333 1.050017 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 20.253333 1.572017 80.314000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 -23.136000 0.351000 23.136000 170.297000 9.700000
+ S 0 0.000000 4.251000 0.331000 5.370000 0.522000
+ END
+STRAIGHT 4 0 0 0 0 DEMO 2
+ T4 2 20.993080 1.050025 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 20.288333 1.050024 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 5 0 0 0 0 DEMO 2 13.294561 8.570024 0 212.471192 "Peco-55 Medium Right SL-E395F"
+ E4 13.294561 8.570024 122.471192 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 8.734570 11.471836 302.471192 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 9.044347 11.893437 312.157192 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
+ S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
+ END
+CURVE 6 0 0 0 0 DEMO 2 20.993080 13.050025 0 12.000000 0 0.000000 0.000000
+ E4 32.991545 13.241930 359.083680 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 32.863416 11.290726 188.430422 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 7 0 0 0 0 DEMO 2 30.934023 6.328592 0 304.064054 "Peco-55 Medium Right SL-E395F"
+ T4 2 30.934023 6.328592 214.064054 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 33.961468 10.806159 34.064054 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 34.374295 10.484782 43.750054 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
+ S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
+ END
+REGRESSION END
CLEAR
MESSAGE
diff --git a/app/lib/demos/dmtotrim.xtr b/app/lib/demos/dmtotrim.xtr
index 6ec656f..03a549e 100644
--- a/app/lib/demos/dmtotrim.xtr
+++ b/app/lib/demos/dmtotrim.xtr
@@ -4,7 +4,7 @@ VERSION 10
DEMOINIT
ORIG 1.000 0.000 0.000
PARAMETER display labelenable 4
-TURNOUT 2 0 0 0 0 N 2 0.218750 1.390625 0 0.000000 "Peco-55 Medium Left SL-E396F"
+TURNOUT 2 0 0 0 0 DEMO 2 0.218750 1.390625 0 0.000000 "Peco-55 Medium Left SL-E396F"
E 0.218750 1.390625 270.000000
E 5.623750 1.390625 90.000000
E 5.588750 1.912625 80.314000
@@ -93,4 +93,30 @@ MESSAGE
=========================================
END
STEP
+REGRESSION START 12 - turnout trim
+# ../share/xtrkcad/demos/dmtotrim.xtr - 96
+TURNOUT 2 0 64 0 0 DEMO 2 0.218750 1.390625 0 0.000000 "Peco-55 Medium Left SL-E396F"
+ E4 0.218750 1.390625 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 5.094000 1.390625 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 3.465544 1.572565 82.809773 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D -0.015000 -1.136000
+ P "Normal" 1 2
+ P "Reverse" 1 3
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 4.875250 0.000000
+ C 0 0.000000 -23.136000 0.351000 23.136000 172.809773 7.187227
+ END$SEGS
+STRAIGHT 4 0 0 0 0 DEMO 2
+ T4 2 5.094000 1.390625 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 5.938592 1.390625 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END$SEGS
+CURVE 5 0 0 0 0 DEMO 2 0.569750 24.526625 0 23.136000 0 0.000000 0.000000
+ T4 6 4.469114 1.721594 80.297000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 3.465544 1.572565 262.809773 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END$SEGS
+STRAIGHT 6 0 0 0 0 DEMO 2
+ T4 5 4.469750 1.721625 260.313640 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 5.588750 1.912625 80.313640 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END$SEGS
+REGRESSION END
CLEAR
diff --git a/app/lib/demos/dmtoyard.xtr b/app/lib/demos/dmtoyard.xtr
index a6d3de0..bff62af 100644
--- a/app/lib/demos/dmtoyard.xtr
+++ b/app/lib/demos/dmtoyard.xtr
@@ -1,6 +1,6 @@
VERSION 2
DEMOINIT
-ORIG 8.000 0.000 0.000
+ORIG 4.000 0.000 0.000
PARAMETER display description-fontsize 24
PARAMETER turnout hide 1
STRAIGHT 1 DEMO 1
@@ -24,10 +24,12 @@ END
STEP
PARAMETER turnout list 0 Peco-55 SL-E395F Medium Right
MOUSE 2 35.417 1.917
+#BIGPAUSE
+MOUSE 3 36.5 1.917
+#BIGPAUSE
+MOUSE 3 36.5 1.917
BIGPAUSE
-MOUSE 3 36.417 1.917
-BIGPAUSE
-MOUSE 4 36.417 1.917
+MOUSE 4 36.5 1.917
PARAMETER turnout ok
RESET
MESSAGE
@@ -47,8 +49,9 @@ _________________________________________
Now create a track parallel to the main line. Make sure the separation is reasonable for your scale.
END
STEP
-COMMAND Parallel
+COMMAND ParallelTrack
PARAMETER parallel separation 1.25
+PARAMETER parallel factor 0
MOUSE 2 23.083 1.917
PARAMETER parallel separation 1.250000
MOUSE 3 23.083 1.917
@@ -70,6 +73,7 @@ ORIG 2.000 21.333 1.000
BIGPAUSE
COMMAND Turnout
PARAMETER turnout list 0 Peco-55 SL-E396F Medium Left
+MOUSE 1 29.500 2.542
MOUSE 2 29.500 2.542
MESSAGE
_________________________________________
@@ -78,12 +82,7 @@ Notice how we control which way the turnout is facing by moving the mouse across
END
STEP
-MOUSE 3 29.500 2.563
-#MOUSE 3 29.500 2.604
-#MOUSE 3 29.521 2.604
-#MOUSE 3 29.542 2.583
-#MOUSE 3 29.542 2.521
-#MOUSE 3 29.500 2.438
+MOUSE 3 29.500 2.542
MOUSE 3 29.500 2.438
#MOUSE 3 29.604 2.583
BIGPAUSE
@@ -101,6 +100,7 @@ XTrackCAD adjusts the turnout position for the best fit to minimize any connecti
END
STEP
MOUSE 4 29.625 2.667
+#MOUSE 4 27.625 2.9
PARAMETER turnout ok
#RESET
MESSAGE
@@ -116,7 +116,7 @@ MOUSE 2 30.229 3.042
MOUSE 4 30.229 3.042
PARAMETER misc cmdDelete
BIGPAUSE
-ORIG 8.000 0.000 0.000
+ORIG 4.000 0.000 0.000
MESSAGE
_________________________________________
@@ -124,7 +124,7 @@ Repeat the process for the other tracks in the yard.
END
STEP
BIGPAUSE
-COMMAND Parallel
+COMMAND ParallelTrack
PARAMETER parallel separation 1.250
MOUSE 2 16.667 3.167
MOUSE 3 16.417 3.583
@@ -145,7 +145,7 @@ MOUSE 2 22.688 4.438
MOUSE 4 22.688 4.438
PARAMETER misc cmdDelete
BIGPAUSE
-ORIG 8.000 0.000 0.000
+ORIG 4.000 0.000 0.000
MESSAGE
_________________________________________
@@ -153,8 +153,9 @@ For the last track we will join with a curve instead of a turnout.
END
STEP
BIGPAUSE
-COMMAND Parallel
+COMMAND ParallelTrack
PARAMETER parallel separation 1.250
+MOUSE 1 10.750 4.333
MOUSE 2 10.750 4.333
MOUSE 3 10.750 5.000
MOUSE 4 10.750 5.000
@@ -165,40 +166,106 @@ RESET
#PAN 7 12.667 6.667
BIGPAUSE
ORIG 2.0 5.0 4.0
-COMMAND Join
+PARAMETER misc cmdEasement
+PARAMETER easement val -1.0
+BIGPAUSE
+PARAMETER easement ok
+COMMAND JoinTrack
+MOUSE 1 10.354 5.604
MOUSE 2 10.354 5.604
-MOUSE 4 10.354 5.604
-MOUSE 2 12.417 5.521
-MOUSE 3 12.438 5.521
-MOUSE 3 12.458 5.521
-MOUSE 3 12.583 5.479
-MOUSE 3 12.646 5.479
-MOUSE 3 12.813 5.458
-MOUSE 3 13.021 5.438
-MOUSE 3 13.042 5.438
-MOUSE 3 13.104 5.438
-MOUSE 3 13.125 5.438
-MOUSE 3 13.146 5.438
-MOUSE 3 13.188 5.438
-MOUSE 3 13.208 5.438
-MOUSE 3 13.583 5.396
-MOUSE 3 13.604 5.396
-MOUSE 3 13.646 5.375
-MOUSE 3 13.708 5.354
-MOUSE 3 13.729 5.354
-MOUSE 3 13.750 5.354
-MOUSE 3 13.771 5.354
-MOUSE 3 13.813 5.354
-MOUSE 3 13.875 5.354
-MOUSE 3 13.875 5.333
-MOUSE 3 13.896 5.333
-MOUSE 3 13.917 5.313
-MOUSE 3 13.979 5.313
-MOUSE 4 14.000 5.313
-BIGPAUSE
-ORIG 8.000 0.000 0.000
+MOUSE 3 9.000 5.604
+MOUSE 4 9.000 5.604
+MOUSE 1 12.417 5.000
+MOUSE 2 12.417 5.000
+MOUSE 3 14.000 5.000
+MOUSE 4 14.000 5.000
+MOUSE 3336 14.000 5.000
+BIGPAUSE
+ORIG 4.000 0.000 0.000
MESSAGE
=========================================
END
+REGRESSION START 10 - turnout yard
+STRAIGHT 1 0 0 0 0 DEMO 2
+ T4 4 36.500000 1.833333 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 41.833333 1.833333 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 2 0 0 0 0 DEMO 2
+ E4 3.666667 1.833333 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 4 31.095000 1.833333 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 4 0 0 0 0 DEMO 2 36.500000 1.833333 0 180.000000 "Peco-55 Medium Right SL-E395F"
+ T4 1 36.500000 1.833333 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 31.095000 1.833333 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 5 31.130000 2.355333 279.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
+ S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
+ END
+STRAIGHT 5 0 0 0 0 DEMO 2
+ T4 4 31.130000 2.355333 99.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 10 29.143471 2.694397 279.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 6 0 0 0 0 DEMO 2
+ E4 3.666667 3.083333 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 10 23.762196 3.083333 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 7 0 0 0 0 DEMO 2
+ T4 10 23.815521 3.603780 99.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 15 21.819895 3.944397 279.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 10 0 0 0 0 DEMO 2 29.143471 2.694397 0 189.686000 "Peco-55 Medium Left SL-E396F"
+ T4 5 29.143471 2.694397 99.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 7 23.815521 3.603780 279.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 6 23.762196 3.083333 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 -23.136000 0.351000 23.136000 170.297000 9.700000
+ S 0 0.000000 4.251000 0.331000 5.370000 0.522000
+ END
+STRAIGHT 11 0 0 0 0 DEMO 2
+ E4 3.666667 4.333333 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 15 16.438621 4.333333 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 12 0 0 0 0 DEMO 2
+ T4 15 16.491945 4.853780 99.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 17 14.046290 5.271209 279.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 15 0 0 0 0 DEMO 2 21.819895 3.944397 0 189.686000 "Peco-55 Medium Left SL-E396F"
+ T4 7 21.819895 3.944397 99.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 12 16.491945 4.853780 279.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 11 16.438621 4.333333 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 -23.136000 0.351000 23.136000 170.297000 9.700000
+ S 0 0.000000 4.251000 0.331000 5.370000 0.522000
+ END
+STRAIGHT 16 0 0 0 0 DEMO 2
+ E4 3.666667 5.583333 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 17 9.000000 5.583333 90.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CORNU 17 0 0 0 0 DEMO 2 9.000000 5.583333 270.000000 0.000000 0.000000 0.000000 14.046290 5.271209 99.686000 0.000000 0.000000 0.000000
+ T4 16 9.000000 5.583333 270.000000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 12 14.046290 5.271209 99.686000 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ W3 0 0.000000 9.000000 5.583333 9.844213 5.583333 10.688875 5.595997 11.532347 5.560635
+ SUBSEGS
+ C 0 0.000000 60.451079 9.724476 -54.863405 359.313322 2.400441
+ SUBSEND
+ W3 0 0.000000 11.532347 5.560635 12.375820 5.525273 13.214112 5.413246 14.046290 5.271209
+ SUBSEGS
+ C 0 0.000000 19.919595 10.515659 -14.332997 2.925627 7.283654
+ SUBSEND
+ END
+REGRESSION END
STEP
CLEAR
diff --git a/app/lib/demos/dmtrkwid.xtr b/app/lib/demos/dmtrkwid.xtr
index 20c5261..1b7ff0f 100644
--- a/app/lib/demos/dmtrkwid.xtr
+++ b/app/lib/demos/dmtrkwid.xtr
@@ -1,16 +1,16 @@
# XTrkCad Version: 3.0.1, Date: Sat Sep 23 20:43:53 2000
VERSION 10
DEMOINIT
-ORIG 8.000 0.000 0.000
-STRAIGHT 1 0 0 0 0 N 2
+ORIG 6.000 0.000 0.000
+STRAIGHT 1 0 0 0 0 DEMO 2
T 3 42.054708 20.137016 244.163246
E 51.919948 24.913870 64.163246
END
-STRAIGHT 2 0 0 0 0 N 2
+STRAIGHT 2 0 0 0 0 DEMO 2
T 5 34.508258 16.482946 244.163246
T 3 37.189995 17.781471 64.163246
END
-TURNOUT 3 0 0 0 0 N 2 42.054708 20.137016 0 154.163246 "Peco-55 Medium Right SL-E395F"
+TURNOUT 3 0 0 0 0 DEMO 2 42.054708 20.137016 0 154.163246 "Peco-55 Medium Right SL-E395F"
T 1 42.054708 20.137016 64.163246
T 2 37.189995 17.781471 244.163246
T 8 36.994004 18.266545 253.849246
@@ -22,11 +22,11 @@ TURNOUT 3 0 0 0 0 N 2 42.054708 20.137016 0 154.163246 "Peco-55 Medium Right SL
C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
END
-STRAIGHT 4 0 0 0 0 N 2
+STRAIGHT 4 0 0 0 0 DEMO 2
E 0.187643 -0.135457 244.163246
T 13 3.966453 1.694282 64.163246
END
-TURNOUT 5 0 0 0 0 N 2 34.508258 16.482946 0 154.163246 "Peco-55 Medium Left SL-E396F"
+TURNOUT 5 0 0 0 0 DEMO 2 34.508258 16.482946 0 154.163246 "Peco-55 Medium Left SL-E396F"
T 2 34.508258 16.482946 64.163246
T 12 29.643545 14.127401 244.163246
T 11 29.902538 13.672833 234.477246
@@ -38,35 +38,35 @@ TURNOUT 5 0 0 0 0 N 2 34.508258 16.482946 0 154.163246 "Peco-55 Medium Left SL-
C 0 0.000000 -23.136000 0.351000 23.136000 170.297000 9.700000
S 0 0.000000 4.251000 0.331000 5.370000 0.522000
END
-STRAIGHT 6 0 0 0 0 N 2
+STRAIGHT 6 0 0 0 0 DEMO 2
T 14 13.474033 7.686781 244.163246
T 7 31.510368 16.420164 64.163246
END
-CURVE 7 0 0 0 0 N 2 39.096711 0.752716 0 17.407514 0 0.000000 0.000000
+CURVE 7 0 0 0 0 DEMO 2 39.096711 0.752716 0 17.407514 0 0.000000 0.000000
T 6 31.510368 16.420164 244.163246
T 8 34.254539 17.473210 73.849246
END
-STRAIGHT 8 0 0 0 0 N 2
+STRAIGHT 8 0 0 0 0 DEMO 2
T 3 36.994004 18.266545 73.849246
T 7 34.254539 17.473210 253.849246
END
-STRAIGHT 9 0 0 0 0 N 2
+STRAIGHT 9 0 0 0 0 DEMO 2
E 10.161432 3.305128 244.163246
T 10 25.105135 10.541027 64.163246
END
-CURVE 10 0 0 0 0 N 2 17.814223 25.598343 0 16.729620 0 0.000000 0.000000
+CURVE 10 0 0 0 0 DEMO 2 17.814223 25.598343 0 16.729620 0 0.000000 0.000000
T 11 27.534571 11.982359 54.477246
T 9 25.105135 10.541027 244.163246
END
-STRAIGHT 11 0 0 0 0 N 2
+STRAIGHT 11 0 0 0 0 DEMO 2
T 5 29.902538 13.672833 54.477246
T 10 27.534571 11.982359 234.477246
END
-STRAIGHT 12 0 0 0 0 N 2
+STRAIGHT 12 0 0 0 0 DEMO 2
T 5 29.643545 14.127401 64.163246
T 13 8.831166 4.049828 244.163246
END
-TURNOUT 13 0 0 0 0 N 2 3.966453 1.694282 0 334.163246 "Peco-55 Medium Left SL-E396F"
+TURNOUT 13 0 0 0 0 DEMO 2 3.966453 1.694282 0 334.163246 "Peco-55 Medium Left SL-E396F"
T 4 3.966453 1.694282 244.163246
T 12 8.831166 4.049828 64.163246
T 15 8.572172 4.504395 54.477246
@@ -78,11 +78,11 @@ TURNOUT 13 0 0 0 0 N 2 3.966453 1.694282 0 334.163246 "Peco-55 Medium Left SL-E
C 0 0.000000 -23.136000 0.351000 23.136000 170.297000 9.700000
S 0 0.000000 4.251000 0.331000 5.370000 0.522000
END
-CURVE 14 0 0 0 0 N 2 21.361899 -8.603379 0 18.099385 0 0.000000 0.000000
+CURVE 14 0 0 0 0 DEMO 2 21.361899 -8.603379 0 18.099385 0 0.000000 0.000000
T 15 10.845682 6.127436 234.477246
T 6 13.474033 7.686781 64.163246
END
-STRAIGHT 15 0 0 0 0 N 2
+STRAIGHT 15 0 0 0 0 DEMO 2
T 13 8.572172 4.504395 234.477246
T 14 10.845682 6.127436 54.477246
END
@@ -97,24 +97,40 @@ STEP
COMMAND Select
MOUSE 2 2.500 0.125
MOUSE 4 2.500 0.125
+KEYSTATE 4
MOUSE 2 6.000 3.000
+KEYSTATE 4
MOUSE 4 6.000 3.000
+KEYSTATE 4
MOUSE 2 16.750 7.625
+KEYSTATE 4
MOUSE 4 16.750 7.625
+KEYSTATE 4
MOUSE 3 32.500 15.500
+KEYSTATE 4
MOUSE 2 32.500 15.500
+KEYSTATE 4
MOUSE 4 32.500 15.500
+KEYSTATE 4
MOUSE 2 36.125 17.750
+KEYSTATE 4
MOUSE 3 36.250 17.750
+KEYSTATE 4
MOUSE 4 36.375 17.625
+KEYSTATE 4
MOUSE 2 39.500 19.125
+KEYSTATE 4
MOUSE 4 39.500 19.125
+KEYSTATE 4
MOUSE 2 47.000 22.750
+KEYSTATE 4
MOUSE 4 47.000 22.750
MESSAGE
_________________________________________
And then select Medium Tracks from the Edit menu.
+
+We can't show the Edit menu, but we can show the effect.
END
STEP
PARAMETER misc cmdWidth2
@@ -133,4 +149,90 @@ MESSAGE
=========================================
END
STEP
+REGRESSION START 10 - track width
+STRAIGHT 1 0 3 0 0 DEMO 2
+ T4 3 42.054708 20.137016 244.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ E4 51.919948 24.913870 64.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 2 0 3 0 0 DEMO 2
+ T4 5 34.508258 16.482946 244.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 3 37.189995 17.781471 64.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 3 0 3 0 0 DEMO 2 42.054708 20.137016 0 154.163246 "Peco-55 Medium Right SL-E395F"
+ T4 1 42.054708 20.137016 64.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 2 37.189995 17.781471 244.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 8 36.994004 18.266545 253.849246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 23.136000 0.351000 -23.136000 0.004000 9.700000
+ S 0 0.000000 4.251000 -0.331000 5.370000 -0.522000
+ END
+STRAIGHT 4 0 3 0 0 DEMO 2
+ E4 0.187643 -0.135457 244.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 13 3.966453 1.694282 64.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 5 0 3 0 0 DEMO 2 34.508258 16.482946 0 154.163246 "Peco-55 Medium Left SL-E396F"
+ T4 2 34.508258 16.482946 64.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 12 29.643545 14.127401 244.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 11 29.902538 13.672833 234.477246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 -23.136000 0.351000 23.136000 170.297000 9.700000
+ S 0 0.000000 4.251000 0.331000 5.370000 0.522000
+ END
+STRAIGHT 6 0 0 0 0 DEMO 2
+ T4 14 13.474033 7.686781 244.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 7 31.510368 16.420164 64.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 7 0 0 0 0 DEMO 2 39.096711 0.752716 0 17.407514 0 0.000000 0.000000
+ T4 6 31.510368 16.420164 244.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 8 34.254539 17.473210 73.849246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 8 0 0 0 0 DEMO 2
+ T4 3 36.994004 18.266545 73.849246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 7 34.254539 17.473210 253.849246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 9 0 0 0 0 DEMO 2
+ E4 10.161432 3.305128 244.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 10 25.105135 10.541027 64.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+CURVE 10 0 0 0 0 DEMO 2 17.814223 25.598343 0 16.729620 0 0.000000 0.000000
+ T4 11 27.534571 11.982359 54.477246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 9 25.105135 10.541027 244.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 11 0 0 0 0 DEMO 2
+ T4 5 29.902538 13.672833 54.477246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 10 27.534571 11.982359 234.477246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 12 0 3 0 0 DEMO 2
+ T4 5 29.643545 14.127401 64.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 13 8.831166 4.049828 244.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+TURNOUT 13 0 3 0 0 DEMO 2 3.966453 1.694282 0 334.163246 "Peco-55 Medium Left SL-E396F"
+ T4 4 3.966453 1.694282 244.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 12 8.831166 4.049828 64.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 15 8.572172 4.504395 54.477246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ D 0.000000 0.000000
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ S 0 0.000000 0.000000 0.000000 0.353000 0.000000
+ S 0 0.000000 0.353000 0.000000 5.405000 0.000000
+ C 0 0.000000 -23.136000 0.351000 23.136000 170.297000 9.700000
+ S 0 0.000000 4.251000 0.331000 5.370000 0.522000
+ END
+CURVE 14 0 0 0 0 DEMO 2 21.361899 -8.603379 0 18.099385 0 0.000000 0.000000
+ T4 15 10.845682 6.127436 234.477246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 6 13.474033 7.686781 64.163246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+STRAIGHT 15 0 0 0 0 DEMO 2
+ T4 13 8.572172 4.504395 234.477246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ T4 14 10.845682 6.127436 54.477246 0 0.0 0.0 0.0 0.0 0 0 0 0.000000
+ END
+REGRESSION END
CLEAR
diff --git a/app/lib/demos/dmtrntab.xtr b/app/lib/demos/dmtrntab.xtr
index 22f8d42..fcb26d6 100644
--- a/app/lib/demos/dmtrntab.xtr
+++ b/app/lib/demos/dmtrntab.xtr
@@ -23,4 +23,8 @@ MESSAGE
=========================================
END
STEP
+REGRESSION START 10 - turntable
+TURNTABLE 1 0 0 0 0 DEMO 2 6.000000 6.000000 0 3.750000 0
+ END
+REGRESSION END
CLEAR
diff --git a/app/lib/examples/psr.xtc b/app/lib/examples/psr.xtc
index 27e9fe4..fe7e29c 100644
--- a/app/lib/examples/psr.xtc
+++ b/app/lib/examples/psr.xtc
@@ -62333,7 +62333,7 @@ TURNOUT 5012 4 0 0 0 HO 2 297.315055 122.915699 0 18.037022 "NPP customised Han
T 6641 308.831845 119.004362 106.081619
T 5014 307.389396 120.296863 100.255535
D 0.000000 0.000000
- P "P0" 4 3 2 5
+ P "P0" 4 3 2 -6
P "P1" 1 5
C 0 0.000000 130.203797 7.718786 129.974802 178.044597 4.782184
C 0 0.000000 41.280392 2.447089 41.207797 172.218665 9.377155
@@ -62376,7 +62376,7 @@ TURNOUT 5020 4 0 0 0 HO 2 279.559655 114.445620 0 13.561024 "NPP customised Han
T 5022 291.346567 111.444998 101.605621
T 5021 289.807648 112.620986 95.779537
D 0.000000 0.000000
- P "P0" 4 3 2 5
+ P "P0" 4 3 2 -6
P "P1" 1 5
C 0 0.000000 130.203797 7.718786 129.974802 178.044597 4.782184
C 0 0.000000 41.280392 2.447089 41.207797 172.218665 9.377155
@@ -62530,7 +62530,7 @@ TURNOUT 5042 2 16 0 0 HO 2 98.809656 106.857609 0 138.398624 "NPP customised Ha
T 5248 89.816900 98.668266 230.354027
T 5243 90.622351 100.429648 236.180111
D 0.000000 0.000000
- P "P0" 4 3 2 5
+ P "P0" 4 3 2 -6
P "P1" 1 5
C 0 0.000000 -130.203797 7.718786 -129.974802 357.173219 4.782184
C 0 0.000000 -41.280392 2.447089 -41.207797 358.404180 9.377155
@@ -89307,7 +89307,7 @@ TURNOUT 6727 5 16 0 0 HO 2 178.666692 181.423165 0 342.697523 "NPP customised H
T 6736 190.232668 185.186567 74.652926
T 6729 188.773770 183.912660 80.479010
D 0.000000 0.000000
- P "P0" 4 3 2 5
+ P "P0" 4 3 2 -6
P "P1" 1 5
C 0 0.000000 -130.203797 7.718786 -129.974802 357.173219 4.782184
C 0 0.000000 -41.280392 2.447089 -41.207797 358.404180 9.377155
@@ -89406,7 +89406,7 @@ TURNOUT 6745 5 0 0 0 HO 2 147.438908 172.029870 0 139.860628 "NPP customised Ha
T 6748 138.042683 164.306791 227.905225
T 6747 139.901500 164.850864 222.079141
D 0.000000 0.000000
- P "P0" 4 3 2 5
+ P "P0" 4 3 2 -6
P "P1" 1 5
C 0 0.000000 130.203797 7.718786 129.974802 178.044597 4.782184
C 0 0.000000 41.280392 2.447089 41.207797 172.218665 9.377155
@@ -93391,7 +93391,7 @@ TURNOUT 7109 2 0 0 0 HO 2 93.745787 108.978701 0 305.350572 "NPP customised Han
T 7111 100.907318 118.809645 33.395169
T 7116 99.244105 117.817204 27.569085
D 0.000000 0.000000
- P "P0" 4 3 2 5
+ P "P0" 4 3 2 -6
P "P1" 1 5
C 0 0.000000 130.203797 7.718786 129.974802 178.044597 4.782184
C 0 0.000000 41.280392 2.447089 41.207797 172.218665 9.377155
@@ -94580,7 +94580,7 @@ TURNOUT 7188 4 0 0 0 HO 2 4.297424 43.542228 0 91.727909 "NPP customised Hand L
T 7191 3.777627 31.390487 179.772506
T 7150 4.613049 33.137853 173.946422
D 0.000000 0.000000
- P "P0" 4 3 2 5
+ P "P0" 4 3 2 -6
P "P1" 1 5
C 0 0.000000 130.203797 7.718786 129.974802 178.044597 4.782184
C 0 0.000000 41.280392 2.447089 41.207797 172.218665 9.377155
diff --git a/app/lib/params/Any-AtlasControllers.xtp b/app/lib/params/Any-AtlasControllers.xtp
new file mode 100644
index 0000000..7110024
--- /dev/null
+++ b/app/lib/params/Any-AtlasControllers.xtp
@@ -0,0 +1,571 @@
+CONTENTS Atlas Controllers
+STRUCTURE * "Atlas Switch Machine ATL-0056"
+#Base
+ L3 0 0.040000 0.000000 -0.020000 0 0.000000 1.145000 0
+ L3 0 0.040000 1.750000 -0.020000 0 1.750000 1.145000 0
+ L3 0 0.040000 0.000000 1.125000 0 1.750000 1.125000 0
+ L3 0 0.040000 0.000000 0.000000 0 1.750000 0.000000 0
+
+ L3 0 0.040000 0.000000 0.093750 0 0.395000 0.093750 0
+ L3 0 0.040000 0.000000 0.406250 0 0.395000 0.406250 0
+ L3 0 0.040000 0.000000 0.718750 0 0.395000 0.718750 0
+ L3 0 0.040000 0.000000 1.031250 0 0.395000 1.031250 0
+
+ L3 0 0.040000 1.355000 0.093750 0 1.750000 0.093750 0
+ L3 0 0.040000 1.355000 0.406250 0 1.750000 0.406250 0
+ L3 0 0.040000 1.355000 0.718750 0 1.750000 0.718750 0
+ L3 0 0.040000 1.355000 1.031250 0 1.750000 1.031250 0
+
+ L3 0 0.040000 0.406250 0.000000 0 0.406250 1.125000 0
+ L3 0 0.040000 0.718750 0.730000 0 0.718750 1.125000 0
+ L3 0 0.040000 1.031250 0.730000 0 1.031250 1.125000 0
+ L3 0 0.040000 1.343750 0.000000 0 1.343750 1.125000 0
+ L3 0 0.040000 0.406250 0.718750 0 1.343750 0.718750 0
+
+#Terminals
+ A3 0 0.020000 0.093750 0.187500 0.250000 0 0.000000 360.000000
+ L3 0 0.020000 0.093750 0.250000 0 0.281250 0.250000 0
+ A3 0 0.020000 0.046875 0.187500 0.562500 0 0.000000 360.000000
+ A3 0 0.020000 0.093750 0.187500 0.875000 0 0.000000 360.000000
+ L3 0 0.020000 0.093750 0.875000 0 0.281250 0.875000 0
+
+ A3 0 0.020000 0.093750 1.562500 0.250000 0 0.000000 360.000000
+ L3 0 0.020000 1.468750 0.250000 0 1.656250 0.250000 0
+ A3 0 0.020000 0.046875 1.562500 0.562500 0 0.000000 360.000000
+ A3 0 0.020000 0.093750 1.562500 0.875000 0 0.000000 360.000000
+ L3 0 0.020000 1.468750 0.875000 0 1.656250 0.875000 0
+
+ A3 0 0.020000 0.093750 0.562500 0.937500 0 0.000000 360.000000
+ L3 0 0.020000 0.468750 0.937500 0 0.656250 0.937500 0
+ A3 0 0.020000 0.093750 0.875000 0.937500 0 0.000000 360.000000
+ L3 0 0.020000 0.781250 0.937500 0 0.968750 0.937500 0
+ A3 0 0.020000 0.093750 1.187500 0.937500 0 0.000000 360.000000
+ L3 0 0.020000 1.093750 0.937500 0 1.281250 0.937500 0
+
+#Switch
+ L3 0 0.020000 0.656250 0.115000 0 0.656250 0.385000 0
+ L3 0 0.020000 1.093750 0.115000 0 1.093750 0.385000 0
+ L3 0 0.020000 0.656250 0.375000 0 1.093750 0.375000 0
+ L3 0 0.020000 0.656250 0.125000 0 1.093750 0.125000 0
+ L3 0 0.250000 0.781250 0.125000 0 0.781250 0.375000 0
+
+#Text
+ Z3 0 0.625000 0.468750 0.000000 0 12.000000 "ATLAS"
+ Z3 0 0.500000 0.031250 0.000000 0 6.000000 "SWITCH CONTROL"
+END
+STRUCTURE * "Atlas Snap-Relay ATL-0200"
+#Base
+ L3 0 0.040000 0.000000 -0.020000 0 0.000000 3.520000 0
+ L3 0 0.040000 1.250000 -0.020000 0 1.250000 3.520000 0
+ L3 0 0.040000 0.000000 3.500000 0 1.250000 3.500000 0
+ L3 0 0.040000 0.000000 0.000000 0 1.250000 0.000000 0
+
+ L3 0 0.040000 0.000000 0.093750 0 0.395000 0.093750 0
+ L3 0 0.040000 0.000000 0.406250 0 0.395000 0.406250 0
+ L3 0 0.040000 0.000000 0.718750 0 0.395000 0.718750 0
+ L3 0 0.040000 0.000000 1.093750 0 0.395000 1.093750 0
+ L3 0 0.040000 0.000000 1.406250 0 0.395000 1.406250 0
+
+ L3 0 0.040000 0.855000 0.093750 0 1.250000 0.093750 0
+ L3 0 0.040000 0.855000 0.406250 0 1.250000 0.406250 0
+ L3 0 0.040000 0.855000 0.718750 0 1.250000 0.718750 0
+ L3 0 0.040000 0.855000 1.093750 0 1.250000 1.093750 0
+ L3 0 0.040000 0.855000 1.406250 0 1.250000 1.406250 0
+
+ L3 0 0.040000 0.156250 3.105000 0 0.156250 3.500000 0
+ L3 0 0.040000 0.468750 3.105000 0 0.468750 3.500000 0
+ L3 0 0.040000 0.781250 3.105000 0 0.781250 3.500000 0
+ L3 0 0.040000 1.093750 3.105000 0 1.093750 3.500000 0
+ L3 0 0.040000 0.000000 3.093750 0 1.250000 3.093750 0
+
+ L3 0 0.040000 0.000000 2.500000 0 0.437500 2.500000 0
+ L3 0 0.040000 0.812500 2.500000 0 1.250000 2.500000 0
+
+ L3 0 0.040000 0.406250 0.000000 0 0.406250 1.582500 0
+ L3 0 0.040000 0.843750 0.000000 0 0.843750 1.582500 0
+ L3 0 0.040000 0.406250 1.562500 0 0.437500 1.562500 0
+ L3 0 0.040000 0.812500 1.562500 0 0.843750 1.562500 0
+
+ L3 0 0.040000 0.437500 1.480000 0 0.437500 2.832500 0
+ L3 0 0.040000 0.812500 1.480000 0 0.812500 2.832500 0
+ L3 0 0.040000 0.437500 1.500000 0 0.812500 1.500000 0
+ L3 0 0.040000 0.437500 2.812500 0 0.812500 2.812500 0
+
+ L3 0 0.020000 0.562500 0.615000 0 0.562500 1.010000 0
+ L3 0 0.020000 0.687500 0.615000 0 0.687500 1.010000 0
+ L3 0 0.020000 0.562500 1.000000 0 0.687500 1.000000 0
+ L3 0 0.020000 0.562500 0.625000 0 0.687500 0.625000 0
+ A3 0 0.050000 0.031250 0.625000 0.687500 0 0.000000 360.000000
+
+#Terminals
+ A3 0 0.020000 0.093750 0.312500 3.312500 0 0.000000 360.000000
+ L3 0 0.020000 0.218750 3.312500 0 0.406250 3.312500 0
+ A3 0 0.020000 0.093750 0.625000 3.312500 0 0.000000 360.000000
+ L3 0 0.020000 0.531250 3.312500 0 0.718750 3.312500 0
+ A3 0 0.020000 0.093750 0.937500 3.312500 0 0.000000 360.000000
+ L3 0 0.020000 0.843750 3.312500 0 1.031250 3.312500 0
+
+ A3 0 0.020000 0.046875 0.187500 1.812500 0 0.000000 360.000000
+ A3 0 0.020000 0.046875 1.062500 1.812500 0 0.000000 360.000000
+
+ A3 0 0.020000 0.093750 0.187500 0.250000 0 0.000000 360.000000
+ L3 0 0.020000 0.093750 0.250000 0 0.281250 0.250000 0
+ A3 0 0.020000 0.093750 0.187500 0.562500 0 0.000000 360.000000
+ L3 0 0.020000 0.093750 0.562500 0 0.281250 0.562500 0
+ A3 0 0.020000 0.093750 0.187500 1.250000 0 0.000000 360.000000
+ L3 0 0.020000 0.093750 1.250000 0 0.281250 1.250000 0
+
+ A3 0 0.020000 0.093750 1.062500 0.250000 0 0.000000 360.000000
+ L3 0 0.020000 0.967500 0.250000 0 1.156250 0.250000 0
+ A3 0 0.020000 0.093750 1.062500 0.562500 0 0.000000 360.000000
+ L3 0 0.020000 0.967500 0.562500 0 1.156250 0.562500 0
+ A3 0 0.020000 0.093750 1.062500 1.250000 0 0.000000 360.000000
+ L3 0 0.020000 0.967500 1.250000 0 1.156250 1.250000 0
+#Switch
+#Text
+ Z3 0 0.093750 2.875000 0.000000 0 12.000000 "SNAP-RELAY"
+ Z3 0 0.125000 2.437500 90.000000 0 12.000000 "ATLAS"
+ Z3 0 1.125000 1.875000 270.000000 0 12.000000 "ATLAS"
+ Z3 0 0.437500 1.187500 0.000000 0 6.000000 "COMMON"
+ Z3 0 0.468750 0.593750 90.000000 0 8.000000 "B"
+ Z3 0 0.781250 0.531250 270.000000 0 8.000000 "B"
+ Z3 0 0.468750 0.281250 90.000000 0 8.000000 "A"
+ Z3 0 0.781250 0.218750 270.000000 0 8.000000 "A"
+
+END
+STRUCTURE * "Atlas Connector ATL-0205"
+#Base
+ L3 0 0.040000 0.000000 -0.020000 0 0.000000 2.020000 0
+ L3 0 0.040000 3.000000 -0.020000 0 3.000000 2.020000 0
+ L3 0 0.040000 0.000000 0.000000 0 3.000000 0.000000 0
+ L3 0 0.040000 0.000000 2.000000 0 3.000000 2.000000 0
+
+ L3 0 0.040000 0.406250 1.593750 0 1.051250 1.593750 0
+ L3 0 0.040000 1.167500 1.593750 0 1.832500 1.593750 0
+ L3 0 0.040000 1.948750 1.593750 0 2.593750 1.593750 0
+
+ L3 0 0.040000 0.406250 0.000000 0 0.406250 0.738750 0
+ L3 0 0.040000 0.406250 1.011250 0 0.406250 2.000000 0
+
+ L3 0 0.040000 0.718750 1.593750 0 0.718750 2.000000 0
+ L3 0 0.040000 1.031250 1.593750 0 1.031250 2.000000 0
+ L3 0 0.040000 1.187500 1.593750 0 1.187500 2.000000 0
+ L3 0 0.040000 1.500000 1.593750 0 1.500000 2.000000 0
+ L3 0 0.040000 1.812500 1.593750 0 1.812500 2.000000 0
+ L3 0 0.040000 1.968750 1.593750 0 1.968750 2.000000 0
+ L3 0 0.040000 2.281250 1.593750 0 2.281250 2.000000 0
+
+ L3 0 0.040000 2.593750 0.000000 0 2.593750 0.738750 0
+ L3 0 0.040000 2.593750 1.011250 0 2.593750 2.000000 0
+
+ L3 0 0.040000 0.000000 0.406250 0 0.395000 0.406250 0
+ L3 0 0.040000 0.000000 0.718750 0 0.395000 0.718750 0
+ L3 0 0.040000 0.000000 1.031250 0 0.395000 1.031250 0
+ L3 0 0.040000 0.000000 1.343750 0 0.395000 1.343750 0
+
+ L3 0 0.040000 2.605000 0.406250 0 3.000000 0.406250 0
+ L3 0 0.040000 2.605000 0.718750 0 3.000000 0.718750 0
+ L3 0 0.040000 2.605000 1.031250 0 3.000000 1.031250 0
+ L3 0 0.040000 2.605000 1.343750 0 3.000000 1.343750 0
+
+#Terminals
+ A3 0 0.020000 0.046875 0.187500 0.187500 0 0.000000 360.000000
+ A3 0 0.020000 0.046875 0.187500 1.812500 0 0.000000 360.000000
+ A3 0 0.020000 0.046875 2.812500 0.187500 0 0.000000 360.000000
+ A3 0 0.020000 0.046875 2.812500 1.812500 0 0.000000 360.000000
+
+ A3 0 0.020000 0.093750 0.187500 0.562500 0 0.000000 360.000000
+ L3 0 0.020000 0.093750 0.562500 0 0.281250 0.562500 0
+ A3 0 0.020000 0.093750 0.187500 1.187500 0 0.000000 360.000000
+ L3 0 0.020000 0.093750 1.187500 0 0.281250 1.187500 0
+
+ A3 0 0.020000 0.093750 2.812500 0.562500 0 0.000000 360.000000
+ L3 0 0.020000 2.718750 0.562500 0 2.906250 0.562500 0
+ A3 0 0.020000 0.093750 2.812500 1.187500 0 0.000000 360.000000
+ L3 0 0.020000 2.718750 1.187500 0 2.906250 1.187500 0
+
+ A3 0 0.020000 0.093750 0.562500 1.812500 0 0.000000 360.000000
+ L3 0 0.020000 0.468750 1.812500 0 0.656250 1.812500 0
+ A3 0 0.020000 0.093750 0.875000 1.812500 0 0.000000 360.000000
+ L3 0 0.020000 0.781250 1.812500 0 0.968750 1.812500 0
+ A3 0 0.020000 0.093750 1.343750 1.812500 0 0.000000 360.000000
+ L3 0 0.020000 1.250000 1.812500 0 1.437500 1.812500 0
+
+ A3 0 0.020000 0.093750 1.656250 1.812500 0 0.000000 360.000000
+ L3 0 0.020000 1.562500 1.812500 0 1.750000 1.812500 0
+ A3 0 0.020000 0.093750 2.125000 1.812500 0 0.000000 360.000000
+ L3 0 0.020000 2.031250 1.812500 0 2.218750 1.812500 0
+ A3 0 0.020000 0.093750 2.437500 1.812500 0 0.000000 360.000000
+ L3 0 0.020000 2.343750 1.812500 0 2.531250 1.812500 0
+
+#Label
+ L3 0 0.020000 0.500000 1.083750 0 0.500000 1.541250 0
+ L3 0 0.020000 0.937500 1.083750 0 0.937500 1.541250 0
+ L3 0 0.020000 0.500000 1.093750 0 0.937500 1.093750 0
+ L3 0 0.020000 0.500000 1.531250 0 0.937500 1.531250 0
+
+ L3 0 0.020000 1.281250 1.083750 0 1.281250 1.541250 0
+ L3 0 0.020000 1.718750 1.083750 0 1.718750 1.541250 0
+ L3 0 0.020000 1.281250 1.093750 0 1.718750 1.093750 0
+ L3 0 0.020000 1.281250 1.531250 0 1.718750 1.531250 0
+
+ L3 0 0.020000 2.062500 1.083750 0 2.062500 1.541250 0
+ L3 0 0.020000 2.500000 1.083750 0 2.500000 1.541250 0
+ L3 0 0.020000 2.062500 1.093750 0 2.500000 1.093750 0
+ L3 0 0.020000 2.062500 1.531250 0 2.500000 1.531250 0
+
+#Switches
+ L3 0 0.020000 0.593750 0.521250 0 0.593750 1.041250 0
+ L3 0 0.020000 0.843750 0.521250 0 0.843750 1.041250 0
+ L3 0 0.020000 0.593750 0.531250 0 0.843750 0.531250 0
+ L3 0 0.020000 0.593750 1.031250 0 0.843750 1.031250 0
+ L3 0 0.250000 0.718750 0.531250 0 0.718750 0.781250 0
+
+ L3 0 0.020000 1.375000 0.521250 0 1.375000 1.041250 0
+ L3 0 0.020000 1.625000 0.521250 0 1.625000 1.041250 0
+ L3 0 0.020000 1.375000 0.531250 0 1.625000 0.531250 0
+ L3 0 0.020000 1.375000 1.031250 0 1.625000 1.031250 0
+ L3 0 0.250000 1.500000 0.531250 0 1.500000 0.781250 0
+
+ L3 0 0.020000 2.156250 0.521250 0 2.156250 1.041250 0
+ L3 0 0.020000 2.406250 0.521250 0 2.406250 1.041250 0
+ L3 0 0.020000 2.156250 0.531250 0 2.406250 0.531250 0
+ L3 0 0.020000 2.156250 1.031250 0 2.406250 1.031250 0
+ L3 0 0.250000 2.281250 0.531250 0 2.281250 0.781250 0
+#Text
+ Z3 0 0.687500 0.125000 0.000000 0 12.000000 "ATLAS CONNECTOR"
+ Z3 0 1.031250 1.000000 0.000000 0 8.000000 "ON"
+ Z3 0 1.812500 1.000000 0.000000 0 8.000000 "ON"
+ Z3 0 1.000000 0.500000 0.000000 0 8.000000 "OFF"
+ Z3 0 1.781250 0.500000 0.000000 0 8.000000 "OFF"
+END
+STRUCTURE * "Atlas Twin ATL-0210"
+#Base
+ L3 0 0.040000 0.000000 -0.020000 0 0.000000 3.020000 0
+ L3 0 0.040000 3.000000 -0.020000 0 3.000000 3.020000 0
+ L3 0 0.040000 0.000000 0.000000 0 3.000000 0.000000 0
+ L3 0 0.040000 0.000000 3.000000 0 3.000000 3.000000 0
+
+ L3 0 0.040000 0.000000 0.406250 0 3.000000 0.406250 0
+ L3 0 0.040000 0.000000 2.593750 0 3.000000 2.593750 0
+
+ L3 0 0.040000 0.218750 0.000000 0 0.218750 0.395000 0
+ L3 0 0.040000 0.531250 0.000000 0 0.531250 0.395000 0
+ L3 0 0.040000 0.843750 0.000000 0 0.843750 0.395000 0
+ L3 0 0.040000 1.156250 0.000000 0 1.156250 0.395000 0
+
+ L3 0 0.040000 0.218750 2.605000 0 0.218750 3.000000 0
+ L3 0 0.040000 0.531250 2.605000 0 0.531250 3.000000 0
+ L3 0 0.040000 0.843750 2.605000 0 0.843750 3.000000 0
+ L3 0 0.040000 1.156250 2.605000 0 1.156250 3.000000 0
+
+ L3 0 0.040000 1.843750 2.605000 0 1.843750 3.000000 0
+ L3 0 0.040000 2.156250 2.605000 0 2.156250 3.000000 0
+ L3 0 0.040000 2.468750 2.605000 0 2.468750 3.000000 0
+ L3 0 0.040000 2.781250 2.605000 0 2.781250 3.000000 0
+
+#Terminals
+ A3 0 0.020000 0.093750 0.375000 0.187500 0 0.000000 360.000000
+ L3 0 0.020000 0.281250 0.187500 0 0.468750 0.187500 0
+ A3 0 0.020000 0.046875 0.687500 0.187500 0 0.000000 360.000000
+ A3 0 0.020000 0.093750 1.000000 0.187500 0 0.000000 360.000000
+ L3 0 0.020000 0.906250 0.187500 0 1.093750 0.187500 0
+
+ A3 0 0.020000 0.046875 2.312500 0.187500 0 0.000000 360.000000
+
+ A3 0 0.020000 0.093750 0.375000 2.812500 0 0.000000 360.000000
+ L3 0 0.020000 0.281250 2.812500 0 0.468750 2.812500 0
+ A3 0 0.020000 0.046875 0.687500 2.812500 0 0.000000 360.000000
+ A3 0 0.020000 0.093750 1.000000 2.812500 0 0.000000 360.000000
+ L3 0 0.020000 0.906250 2.812500 0 1.093750 2.812500 0
+
+ A3 0 0.020000 0.093750 2.000000 2.812500 0 0.000000 360.000000
+ L3 0 0.020000 1.906250 2.812500 0 2.093750 2.812500 0
+ A3 0 0.020000 0.046875 2.312500 2.812500 0 0.000000 360.000000
+ A3 0 0.020000 0.093750 2.625000 2.812500 0 0.000000 360.000000
+ L3 0 0.020000 2.531250 2.812500 0 2.718750 2.812500 0
+
+#Label
+ L3 0 0.020000 0.500000 1.927500 0 0.500000 2.447500 0
+ L3 0 0.020000 1.000000 1.927500 0 1.000000 2.447500 0
+ L3 0 0.020000 0.500000 1.937500 0 1.000000 1.937500 0
+ L3 0 0.020000 0.500000 2.437500 0 1.000000 2.437500 0
+
+ L3 0 0.020000 2.000000 1.927500 0 2.000000 2.447500 0
+ L3 0 0.020000 2.500000 1.927500 0 2.500000 2.447500 0
+ L3 0 0.020000 2.000000 1.937500 0 2.500000 1.937500 0
+ L3 0 0.020000 2.000000 2.437500 0 2.500000 2.437500 0
+
+ L3 0 0.020000 0.500000 0.552500 0 0.500000 1.072500 0
+ L3 0 0.020000 1.000000 0.552500 0 1.000000 1.072500 0
+ L3 0 0.020000 0.500000 0.562500 0 1.000000 0.562500 0
+ L3 0 0.020000 0.500000 1.062500 0 1.000000 1.062500 0
+
+ L3 0 0.020000 2.000000 0.552500 0 2.000000 1.072500 0
+ L3 0 0.020000 2.500000 0.552500 0 2.500000 1.072500 0
+ L3 0 0.020000 2.000000 0.562500 0 2.500000 0.562500 0
+ L3 0 0.020000 2.000000 1.062500 0 2.500000 1.062500 0
+
+#Switches
+ L3 0 0.020000 0.625000 1.177500 0 0.625000 1.822500 0
+ L3 0 0.020000 0.875000 1.177500 0 0.875000 1.822500 0
+ L3 0 0.020000 0.625000 1.187500 0 0.875000 1.187500 0
+ L3 0 0.020000 0.625000 1.812500 0 0.875000 1.812500 0
+ L3 0 0.250000 0.750000 1.375000 0 0.750000 1.625000 0
+
+ L3 0 0.020000 2.125000 1.177500 0 2.125000 1.822500 0
+ L3 0 0.020000 2.375000 1.177500 0 2.375000 1.822500 0
+ L3 0 0.020000 2.125000 1.187500 0 2.375000 1.187500 0
+ L3 0 0.020000 2.125000 1.812500 0 2.375000 1.812500 0
+ L3 0 0.250000 2.250000 1.375000 0 2.250000 1.625000 0
+
+#Text
+ Z3 0 1.250000 1.500000 0.000000 0 12.000000 "ATLAS"
+ Z3 0 1.281250 1.312500 0.000000 0 12.000000 "TWIN"
+
+END
+STRUCTURE * "Atlas Selector ATL-0215"
+#Base
+ L3 0 0.040000 0.000000 -0.020000 0 0.000000 3.270000 0
+ L3 0 0.040000 2.750000 -0.020000 0 2.750000 3.270000 0
+ L3 0 0.040000 0.000000 0.000000 0 2.750000 0.000000 0
+ L3 0 0.040000 0.000000 3.250000 0 2.750000 3.250000 0
+
+ L3 0 0.040000 0.000000 0.093750 0 0.375000 0.093750 0
+ L3 0 0.040000 0.000000 0.395000 0 0.375000 0.395000 0
+ L3 0 0.040000 0.000000 0.728750 0 0.375000 0.728750 0
+ L3 0 0.040000 0.000000 2.531250 0 0.375000 2.531250 0
+ L3 0 0.040000 0.000000 2.843750 0 0.375000 2.843750 0
+ L3 0 0.040000 0.000000 3.156250 0 0.375000 3.156250 0
+ L3 0 0.040000 0.395000 0.000000 0 0.395000 0.748750 0
+ L3 0 0.040000 2.355000 0.000000 0 2.355000 0.748750 0
+
+ L3 0 0.040000 2.375000 0.093750 0 2.750000 0.093750 0
+ L3 0 0.040000 2.375000 0.395000 0 2.750000 0.395000 0
+ L3 0 0.040000 2.375000 0.728750 0 2.750000 0.728750 0
+ L3 0 0.040000 2.375000 2.531250 0 2.750000 2.531250 0
+ L3 0 0.040000 2.375000 2.843750 0 2.750000 2.843750 0
+ L3 0 0.040000 2.375000 3.156250 0 2.750000 3.156250 0
+ L3 0 0.040000 0.395000 2.512500 0 0.395000 3.250000 0
+ L3 0 0.040000 2.355000 2.512500 0 2.355000 3.250000 0
+
+ L3 0 0.040000 0.656250 2.875000 0 0.656250 3.250000 0
+ L3 0 0.040000 0.968750 2.875000 0 0.968750 3.250000 0
+ L3 0 0.040000 1.031250 2.875000 0 1.031250 3.250000 0
+ L3 0 0.040000 1.343750 2.875000 0 1.343750 3.250000 0
+ L3 0 0.040000 1.406250 2.875000 0 1.406250 3.250000 0
+ L3 0 0.040000 1.718750 2.875000 0 1.718750 3.250000 0
+ L3 0 0.040000 1.781250 2.875000 0 1.781250 3.250000 0
+ L3 0 0.040000 2.093750 2.875000 0 2.093750 3.250000 0
+ L3 0 0.040000 0.636250 2.855000 0 0.988750 2.855000 0
+ L3 0 0.040000 1.011250 2.855000 0 1.363750 2.855000 0
+ L3 0 0.040000 1.386250 2.855000 0 1.738750 2.855000 0
+ L3 0 0.040000 1.761250 2.855000 0 2.115000 2.855000 0
+
+#Terminals
+ A3 0 0.020000 0.093750 0.187500 0.250000 0 0.000000 360.000000
+ L3 0 0.020000 0.093750 0.250000 0 0.281250 0.250000 0
+ A3 0 0.020000 0.046875 0.187500 0.562500 0 0.000000 360.000000
+ A3 0 0.020000 0.093750 2.562500 0.250000 0 0.000000 360.000000
+ L3 0 0.020000 2.468750 0.250000 0 2.656250 0.250000 0
+ A3 0 0.020000 0.046875 2.562500 0.562500 0 0.000000 360.000000
+
+ A3 0 0.020000 0.093750 0.187500 3.000000 0 0.000000 360.000000
+ L3 0 0.020000 0.093750 3.000000 0 0.281250 3.000000 0
+ A3 0 0.020000 0.046875 0.187500 2.687500 0 0.000000 360.000000
+ A3 0 0.020000 0.093750 2.562500 3.000000 0 0.000000 360.000000
+ L3 0 0.020000 2.468750 3.000000 0 2.656250 3.000000 0
+ A3 0 0.020000 0.046875 2.562500 2.687500 0 0.000000 360.000000
+
+ A3 0 0.020000 0.093750 0.812500 3.062500 0 0.000000 360.000000
+ L3 0 0.020000 0.718750 3.062500 0 0.906250 3.062500 0
+ A3 0 0.020000 0.093750 1.187500 3.062500 0 0.000000 360.000000
+ L3 0 0.020000 1.093750 3.062500 0 1.281250 3.062500 0
+ A3 0 0.020000 0.093750 1.562500 3.062500 0 0.000000 360.000000
+ L3 0 0.020000 1.468750 3.062500 0 1.656250 3.062500 0
+ A3 0 0.020000 0.093750 1.937500 3.062500 0 0.000000 360.000000
+ L3 0 0.020000 1.843750 3.062500 0 2.031250 3.062500 0
+
+#Label
+ L3 0 0.020000 0.406250 2.187500 0 0.406250 2.625000 0
+ L3 0 0.020000 0.843750 2.187500 0 0.843750 2.625000 0
+ L3 0 0.020000 0.406250 2.187500 0 0.843750 2.187500 0
+ L3 0 0.020000 0.406250 2.625000 0 0.843750 2.625000 0
+
+ L3 0 0.020000 0.906250 2.187500 0 0.906250 2.625000 0
+ L3 0 0.020000 1.343750 2.187500 0 1.343750 2.625000 0
+ L3 0 0.020000 0.906250 2.187500 0 1.343750 2.187500 0
+ L3 0 0.020000 0.906250 2.625000 0 1.343750 2.625000 0
+
+ L3 0 0.020000 1.406250 2.187500 0 1.406250 2.625000 0
+ L3 0 0.020000 1.843750 2.187500 0 1.843750 2.625000 0
+ L3 0 0.020000 1.406250 2.187500 0 1.843750 2.187500 0
+ L3 0 0.020000 1.406250 2.625000 0 1.843750 2.625000 0
+
+ L3 0 0.020000 1.906250 2.187500 0 1.906250 2.625000 0
+ L3 0 0.020000 2.343750 2.187500 0 2.343750 2.625000 0
+ L3 0 0.020000 1.906250 2.187500 0 2.343750 2.187500 0
+ L3 0 0.020000 1.906250 2.625000 0 2.343750 2.625000 0
+
+#Switches
+ L3 0 0.020000 0.500000 1.312500 0 0.500000 1.937500 0
+ L3 0 0.020000 0.750000 1.312500 0 0.750000 1.937500 0
+ L3 0 0.020000 0.500000 1.312500 0 0.750000 1.312500 0
+ L3 0 0.020000 0.500000 1.937500 0 0.750000 1.937500 0
+ L3 0 0.250000 0.625000 1.500000 0 0.625000 1.750000 0
+
+ L3 0 0.020000 1.000000 1.312500 0 1.000000 1.937500 0
+ L3 0 0.020000 1.250000 1.312500 0 1.250000 1.937500 0
+ L3 0 0.020000 1.000000 1.312500 0 1.250000 1.312500 0
+ L3 0 0.020000 1.000000 1.937500 0 1.250000 1.937500 0
+ L3 0 0.250000 1.125000 1.500000 0 1.125000 1.750000 0
+
+ L3 0 0.020000 1.500000 1.312500 0 1.500000 1.937500 0
+ L3 0 0.020000 1.750000 1.312500 0 1.750000 1.937500 0
+ L3 0 0.020000 1.500000 1.312500 0 1.750000 1.312500 0
+ L3 0 0.020000 1.500000 1.937500 0 1.750000 1.937500 0
+ L3 0 0.250000 1.625000 1.500000 0 1.625000 1.750000 0
+
+ L3 0 0.020000 2.000000 1.312500 0 2.000000 1.937500 0
+ L3 0 0.020000 2.250000 1.312500 0 2.250000 1.937500 0
+ L3 0 0.020000 2.000000 1.312500 0 2.250000 1.312500 0
+ L3 0 0.020000 2.000000 1.937500 0 2.250000 1.937500 0
+ L3 0 0.250000 2.125000 1.500000 0 2.125000 1.750000 0
+
+#Text
+ Z3 0 0.593750 2.000000 0.000000 0 10.000000 "A"
+ Z3 0 1.093750 2.000000 0.000000 0 10.000000 "A"
+ Z3 0 1.593750 2.000000 0.000000 0 10.000000 "A"
+ Z3 0 2.093750 2.000000 0.000000 0 10.000000 "A"
+
+ Z3 0 0.593750 1.125000 0.000000 0 10.000000 "B"
+ Z3 0 1.093750 1.125000 0.000000 0 10.000000 "B"
+ Z3 0 1.593750 1.125000 0.000000 0 10.000000 "B"
+ Z3 0 2.093750 1.125000 0.000000 0 10.000000 "B"
+
+ Z3 0 1.125000 0.375000 0.000000 0 12.000000 "ATLAS"
+ Z3 0 0.937500 0.187500 0.000000 0 12.000000 "SELECTOR"
+END
+STRUCTURE * "Atlas Controller ATL-0220"
+#Base
+ L3 0 0.040000 0.000000 -0.020000 0 0.000000 3.270000 0
+ L3 0 0.040000 3.750000 -0.020000 0 3.750000 3.270000 0
+ L3 0 0.040000 0.000000 3.250000 0 3.750000 3.250000 0
+ L3 0 0.040000 3.750000 0.000000 0 0.000000 0.000000 0
+
+ L3 0 0.040000 0.000000 0.093750 0 0.375000 0.093750 0
+ L3 0 0.040000 0.000000 0.395000 0 0.375000 0.395000 0
+ L3 0 0.040000 0.000000 0.728750 0 0.375000 0.728750 0
+ L3 0 0.040000 0.000000 1.041250 0 0.375000 1.041250 0
+ L3 0 0.040000 0.395000 0.000000 0 0.395000 1.061250 0
+
+ L3 0 0.040000 0.395000 3.250000 0 0.395000 2.198750 0
+ L3 0 0.040000 0.000000 2.218750 0 0.375000 2.218750 0
+ L3 0 0.040000 0.000000 2.531250 0 0.375000 2.531250 0
+ L3 0 0.040000 0.000000 2.843750 0 0.375000 2.843750 0
+ L3 0 0.040000 0.000000 3.156250 0 0.375000 3.156250 0
+
+ L3 0 0.040000 3.375000 0.093750 0 3.750000 0.093750 0
+ L3 0 0.040000 3.375000 0.395000 0 3.750000 0.395000 0
+ L3 0 0.040000 3.375000 0.728750 0 3.750000 0.728750 0
+ L3 0 0.040000 3.375000 1.041250 0 3.750000 1.041250 0
+ L3 0 0.040000 3.355000 0.000000 0 3.355000 1.061250 0
+
+ L3 0 0.040000 3.355000 3.250000 0 3.355000 2.198750 0
+ L3 0 0.040000 3.375000 2.218750 0 3.750000 2.218750 0
+ L3 0 0.040000 3.375000 2.531250 0 3.750000 2.531250 0
+ L3 0 0.040000 3.375000 2.843750 0 3.750000 2.843750 0
+ L3 0 0.040000 3.375000 3.156250 0 3.750000 3.156250 0
+
+ L3 0 0.040000 2.281250 2.562500 0 2.281250 3.250000 0
+ L3 0 0.040000 2.593750 2.562500 0 2.593750 2.937500 0
+ L3 0 0.040000 2.906250 2.562500 0 2.906250 2.937500 0
+ L3 0 0.040000 3.218750 2.562500 0 3.218750 3.250000 0
+ L3 0 0.040000 2.261250 2.562500 0 3.238750 2.562500 0
+
+#Terminals
+ A3 0 0.020000 0.093750 0.187500 0.250000 0 0.000000 360.000000
+ L3 0 0.020000 0.093750 0.250000 0 0.281250 0.250000 0
+ A3 0 0.020000 0.046875 0.187500 0.562500 0 0.000000 360.000000
+ A3 0 0.020000 0.093750 0.187500 0.875000 0 0.000000 360.000000
+ L3 0 0.020000 0.093750 0.875000 0 0.281250 0.875000 0
+
+ A3 0 0.020000 0.093750 0.187500 3.000000 0 0.000000 360.000000
+ L3 0 0.020000 0.093750 3.000000 0 0.281250 3.000000 0
+ A3 0 0.020000 0.046875 0.187500 2.687500 0 0.000000 360.000000
+ A3 0 0.020000 0.093750 0.187500 2.375000 0 0.000000 360.000000
+ L3 0 0.020000 0.093750 2.375000 0 0.281250 2.375000 0
+
+
+ A3 0 0.020000 0.093750 3.562500 0.250000 0 0.000000 360.000000
+ L3 0 0.020000 3.468750 0.250000 0 3.656250 0.250000 0
+ A3 0 0.020000 0.046875 3.562500 0.562500 0 0.000000 360.000000
+ A3 0 0.020000 0.093750 3.562500 0.875000 0 0.000000 360.000000
+ L3 0 0.020000 3.468750 0.875000 0 3.656250 0.875000 0
+
+ A3 0 0.020000 0.093750 3.562500 3.000000 0 0.000000 360.000000
+ L3 0 0.020000 3.468750 3.000000 0 3.656250 3.000000 0
+ A3 0 0.020000 0.046875 3.562500 2.687500 0 0.000000 360.000000
+ A3 0 0.020000 0.093750 3.562500 2.375000 0 0.000000 360.000000
+ L3 0 0.020000 3.468750 2.375000 0 3.656250 2.375000 0
+
+ A3 0 0.020000 0.093750 2.437500 2.750000 0 0.000000 360.000000
+ L3 0 0.020000 2.343750 2.750000 0 2.531250 2.750000 0
+ A3 0 0.020000 0.093750 2.750000 2.750000 0 0.000000 360.000000
+ L3 0 0.020000 2.656250 2.750000 0 2.843750 2.750000 0
+ A3 0 0.020000 0.093750 3.062500 2.750000 0 0.000000 360.000000
+ L3 0 0.020000 2.968750 2.750000 0 3.156250 2.750000 0
+
+#Label
+ L3 0 0.020000 2.187500 0.802500 0 2.187500 1.260000 0
+ L3 0 0.020000 2.812500 0.802500 0 2.812500 1.260000 0
+ L3 0 0.020000 2.187500 0.812500 0 2.812500 0.812500 0
+ L3 0 0.020000 2.187500 1.250000 0 2.812500 1.250000 0
+#Switches
+ L3 0 0.020000 0.875000 1.302500 0 0.875000 1.947500 0
+ L3 0 0.020000 1.125000 1.302500 0 1.125000 1.947500 0
+ L3 0 0.020000 0.875000 1.312500 0 1.125000 1.312500 0
+ L3 0 0.020000 0.875000 1.937500 0 1.125000 1.937500 0
+ L3 0 0.250000 1.000000 1.500000 0 1.000000 1.750000 0
+#Cab A
+ L3 0 0.020000 0.812500 2.552500 0 0.812500 2.822500 0
+ L3 0 0.020000 1.437500 2.552500 0 1.437500 2.822500 0
+ L3 0 0.020000 0.812500 2.562500 0 1.437500 2.562500 0
+ L3 0 0.020000 0.812500 2.812500 0 1.437500 2.812500 0
+ L3 0 0.250000 1.000000 2.687500 0 1.250000 2.687500 0
+#Cab b
+ L3 0 0.020000 0.812500 0.427500 0 0.812500 0.697500 0
+ L3 0 0.020000 1.437500 0.427500 0 1.437500 0.697500 0
+ L3 0 0.020000 0.812500 0.437500 0 1.437500 0.437500 0
+ L3 0 0.020000 0.812500 0.687500 0 1.437500 0.687500 0
+ L3 0 0.250000 1.000000 0.562500 0 1.250000 0.562500 0
+#Direction
+ L3 0 0.020000 2.187500 1.490000 0 2.187500 1.760000 0
+ L3 0 0.020000 2.812500 1.490000 0 2.812500 1.760000 0
+ L3 0 0.020000 2.187500 1.500000 0 2.812500 1.500000 0
+ L3 0 0.020000 2.187500 1.750000 0 2.812500 1.750000 0
+ L3 0 0.250000 2.375000 1.625000 0 2.625000 1.625000 0
+
+#Text
+ Z3 0 0.906250 2.875000 0.000000 0 10.000000 "CAB A"
+ Z3 0 0.750000 2.375000 0.000000 0 10.000000 "REVERSING"
+ Z3 0 0.875000 2.250000 0.000000 0 10.000000 "SWITCH"
+
+ Z3 0 0.968750 2.000000 0.000000 0 10.000000 "A"
+ Z3 0 0.968750 1.125000 0.000000 0 10.000000 "B"
+
+ Z3 0 0.906250 0.750000 0.000000 0 10.000000 "CAB B"
+ Z3 0 0.750000 0.250000 0.000000 0 10.000000 "REVERSING"
+ Z3 0 0.875000 0.125000 0.000000 0 10.000000 "SWITCH"
+
+ Z3 0 1.937500 2.375000 0.000000 0 10.000000 "COMMON"
+ Z3 0 2.718750 2.375000 0.000000 0 10.000000 "X"
+ Z3 0 3.031250 2.375000 0.000000 0 10.000000 "Y"
+
+ Z3 0 2.343750 1.937500 0.000000 0 10.000000 "X - Y"
+ Z3 0 2.125000 1.812500 0.000000 0 10.000000 "DIRECTION"
+ Z3 0 2.234375 1.312500 0.000000 0 10.000000 "SWITCH"
+
+ Z3 0 2.250000 0.375000 0.000000 0 12.000000 "ATLAS"
+ Z3 0 2.062500 0.187500 0.000000 0 12.000000 "SELECTOR"
+END
diff --git a/app/lib/params/Any-CTC_panel.xtp b/app/lib/params/Any-CTC_panel.xtp
index 7c69b77..7b73cab 100644
--- a/app/lib/params/Any-CTC_panel.xtp
+++ b/app/lib/params/Any-CTC_panel.xtp
@@ -265,7 +265,7 @@ TURNOUT * "Block Gap" BG"
SUBCONTENTS Track Symbols - Turnouts
TURNOUT * "Turnout LH(GAP)" LHG"
- P "Normal" 1
+ P "Normal" 1 0 2 0 3
E 0.000000 0.000000 270.000000
E 1.000000 0.000000 90.000000
E 1.000000 0.500000 90.000000
@@ -277,7 +277,7 @@ TURNOUT * "Turnout LH(GAP)" LHG"
L 0 0.080000 0.800000 0.500000 0.950000 0.500000
END
TURNOUT * "Turnout RH(GAP)" RHG"
- P "Normal" 1
+ P "Normal" 1 0 2 0 3
E 0.000000 0.000000 270.000000
E 1.000000 0.000000 90.000000
E 1.000000 -0.500000 90.000000
@@ -289,7 +289,7 @@ TURNOUT * "Turnout RH(GAP)" RHG"
L 0 0.080000 0.800000 -0.500000 0.950000 -0.500000
END
TURNOUT * "Turnout LH" LH"
- P "Normal" 1
+ P "Normal" 1 0 2 0 3
E 0.000000 0.000000 270.000000
E 1.000000 0.000000 90.000000
E 1.000000 0.500000 90.000000
@@ -301,7 +301,7 @@ TURNOUT * "Turnout LH" LH"
L 0 0.080000 0.800000 0.500000 1.000000 0.500000
END
TURNOUT * "Turnout RH" RH"
- P "Normal" 1
+ P "Normal" 1 0 2 0 3
E 0.000000 0.000000 270.000000
E 1.000000 0.000000 90.000000
E 1.000000 -0.500000 90.000000
@@ -315,7 +315,7 @@ TURNOUT * "Turnout RH" RH"
SUBCONTENTS Track Symbols - Crossovers
TURNOUT * "Crossover LH(GAP)" COLHG"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 0.000000 0.500000 270.000000
E 1.000000 0.000000 90.000000
@@ -327,7 +327,7 @@ TURNOUT * "Crossover LH(GAP)" COLHG"
L 0 0.080000 0.050000 0.500000 0.950000 0.500000
END
TURNOUT * "Crossover RH(GAP)" CORHG"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 0.000000 -0.500000 270.000000
E 1.000000 0.000000 90.000000
@@ -339,7 +339,7 @@ TURNOUT * "Crossover RH(GAP)" CORHG"
L 0 0.080000 0.050000 -0.500000 0.950000 -0.500000
END
TURNOUT * "Crossover LH" COLH"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 0.000000 0.500000 270.000000
E 1.000000 0.000000 90.000000
@@ -351,7 +351,7 @@ TURNOUT * "Crossover LH" COLH"
L 0 0.080000 0.000000 0.500000 1.000000 0.500000
END
TURNOUT * "Crossover RH" CORH"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 0.000000 -0.500000 270.000000
E 1.000000 0.000000 90.000000
@@ -363,7 +363,7 @@ TURNOUT * "Crossover RH" CORH"
L 0 0.080000 0.000000 -0.500000 1.000000 -0.500000
END
TURNOUT * "Dbl.Crossover(GAP)" DBLCOG"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 0.000000 0.500000 270.000000
E 1.000000 0.000000 90.000000
@@ -376,7 +376,7 @@ TURNOUT * "Dbl.Crossover(GAP)" DBLCOG"
L 0 0.080000 0.050000 0.500000 0.950000 0.500000
END
TURNOUT * "Dbl.Crossover" DBLCO"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 0.000000 0.500000 270.000000
E 1.000000 0.000000 90.000000
@@ -391,7 +391,7 @@ TURNOUT * "Dbl.Crossover" DBLCO"
SUBCONTENTS Track Symbols - Crossings
TURNOUT * "90 Crossing" 90C"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 0.500000 0.000000 90.000000
E 0.250000 0.250000 0.000000
@@ -402,7 +402,7 @@ TURNOUT * "90 Crossing" 90C"
L 0 0.080000 0.250000 0.250000 0.250000 -0.250000
END
TURNOUT * "45 Crossing" 45C"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 0.500000 0.000000 90.000000
E 0.500000 0.250000 45.000000
diff --git a/app/lib/params/BachmannEZ-N.xtp b/app/lib/params/BachmannEZ-N.xtp
index 2db6eea..ae0c2f6 100644
--- a/app/lib/params/BachmannEZ-N.xtp
+++ b/app/lib/params/BachmannEZ-N.xtp
@@ -1,4 +1,4 @@
-CONTENTS Bachmann EZ Track N-Scale
+CONTENTS Bachmann EZ Track N Scale
#
SUBCONTENTS Bachmann EZ Track N-Scale Straight Track
TURNOUT N "Bachmann EZ Track Straight 30" 44887"
diff --git a/app/lib/params/CMakeLists.txt b/app/lib/params/CMakeLists.txt
index 1e87595..22229ac 100644
--- a/app/lib/params/CMakeLists.txt
+++ b/app/lib/params/CMakeLists.txt
@@ -3,7 +3,7 @@
#
# CMakeList for the params directory
#
-# Several xtp files are created from text definitions, all xtp files and the
+# Several xtp files are created from text definitions, all xtp files and the
# created xtp files are installed.
#
@@ -14,10 +14,9 @@ SET( outFiles )
# create param files from car definitions
ADD_EXECUTABLE( mkcarpart mkcarpart.c )
-GET_TARGET_PROPERTY(mkcarpart_EXE mkcarpart LOCATION)
FILE(GLOB inFiles RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/*.cars")
-
+
FOREACH(infileName ${inFiles})
# Generate output file name
STRING(REGEX REPLACE ".cars\$" ".xtp" outfileName "${infileName}")
@@ -26,7 +25,7 @@ FOREACH(infileName ${inFiles})
SET(infile "${CMAKE_CURRENT_SOURCE_DIR}/${infileName}")
# Custom command to do the processing
ADD_CUSTOM_COMMAND(OUTPUT "${outfile}"
- COMMAND ${mkcarpart_EXE} "${infile}" "${outfile}"
+ COMMAND mkcarpart "${infile}" "${outfile}"
DEPENDS "${infile}" mkcarpart
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
# Finally remember the output file for dependencies
@@ -36,7 +35,6 @@ ENDFOREACH(infileName)
# create param files from structure definitions
ADD_EXECUTABLE( mkstruct mkstruct.c )
-GET_TARGET_PROPERTY(mkstruct_EXE mkstruct LOCATION)
FILE(GLOB inFiles RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/*.struct")
@@ -49,7 +47,7 @@ FOREACH(infileName ${inFiles})
SET(infile "${CMAKE_CURRENT_SOURCE_DIR}/${infileName}")
# Custom command to do the processing
ADD_CUSTOM_COMMAND(OUTPUT "${outfile}"
- COMMAND ${mkstruct_EXE} "${infile}" "${outfile}"
+ COMMAND mkstruct "${infile}" "${outfile}"
DEPENDS "${infile}" mkstruct
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" )
# Finally remember the output file for dependencies
@@ -63,4 +61,3 @@ INSTALL(
FILES ${XTP_FILES} t-trak-notes.txt ${outFiles}
DESTINATION ${XTRKCAD_SHARE_INSTALL_DIR}/params
)
-
diff --git a/app/lib/params/FastTrack-HO.xtp b/app/lib/params/FastTrack-HO.xtp
index f0db2ac..c7bac97 100644
--- a/app/lib/params/FastTrack-HO.xtp
+++ b/app/lib/params/FastTrack-HO.xtp
@@ -1,4 +1,4 @@
-CONTENTS Fast Track HO Scale
+CONTENTS Fast Tracks HO Scale
SUBCONTENTS Fast Track HO Scale - #6 Curve Turnouts
TURNOUT HO "Fast Tracks #6 Left Curve 24-18 Turnout FT-6-L-24-18"
P "Normal" 1 6 4 5
@@ -926,5 +926,3 @@ TURNOUT HO "Fast Tracks #8 Double Cross Over FT-C-8"
S 0 0.000000 12.733473 1.100844 14.016527 0.899156
C 0 0.000000 -74.146233 25.528772 74.146218 180.000076 8.932043
END
-
-
diff --git a/app/lib/params/FastTrack_n.xtp b/app/lib/params/FastTrack_n.xtp
index 353d365..45395f4 100644
--- a/app/lib/params/FastTrack_n.xtp
+++ b/app/lib/params/FastTrack_n.xtp
@@ -1,4 +1,4 @@
-CONTENTS Fast Tracks N-scale Turnouts, Wyes, 3-ways, Crossovers and Slip Switches
+CONTENTS Fast Tracks N scale Turnouts Wyes 3-ways Crossovers and Slip Switches
TURNOUT N "Fast Track #4 Left AF-N-T-4-ME55"
U "Regular Turnout" "" "Fast Track" "#4 Left" "AF-N-T-4-ME55" "#4 Right" "AF-N-T-4-ME55" 3.425197 14.477512 0.492126 3.425197 0.000000 0.000000 0
P "Normal" 1 2
diff --git a/app/lib/params/G-MicroEngineeringTrack.xtp b/app/lib/params/G-MicroEngineeringTrack.xtp
new file mode 100644
index 0000000..2357b0f
--- /dev/null
+++ b/app/lib/params/G-MicroEngineeringTrack.xtp
@@ -0,0 +1,142 @@
+CONTENTS Micro-Engineering G-Scale
+SUBCONTENTS Micro-Engineering G-Scale Track - 332 Aluminum Straight
+TURNOUT G "ME G-Trak 332 Alum 12"" Straight 20-001"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 12.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 12.000000 0.000000
+END
+TURNOUT G "ME G-Trak 332 Alum 24"" Straight 20-002"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 24.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 24.000000 0.000000
+END
+TURNOUT G "ME G-Trak 332 Alum 36"" Straight 20-003"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 36.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 36.000000 0.000000
+END
+
+
+SUBCONTENTS Micro-Engineering G-Scale Track - 332 Aluminum Curve
+TURNOUT G "ME G-Trak 332 Alum 24"" Radius 30d Curve 20-102
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 12.000000 -3.215390 120.000000
+ C 0 0 24.000000 0.000000 -24.000000 0.000000 30.000000
+END
+TURNOUT G "ME G-Trak 332 Alum 48"" Radius 22.5d Curve 20-104
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 18.368805 -3.653782 112.500000
+ C 0 0 48.000000 0.000000 -48.000000 0.000000 22.500000
+END
+TURNOUT G "ME G-Trak 332 Alum 80"" Radius 18d Curve 20-107
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 24.721360 -3.915479 108.000000
+ C 0 0 80.000000 0.000000 -80.000000 0.000000 18.000000
+END
+TURNOUT G "ME G-Trak 332 Alum 120"" Radius 12d Curve 20-110
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 24.949403 -2.622288 102.000000
+ C 0 0 120.000000 0.000000 -120.000000 0.000000 12.000000
+END
+
+
+SUBCONTENTS Micro-Engineering G-Scale Track - 250 Aluminum Straight
+TURNOUT G "ME G-Trak 250 Alum 12"" Straight 22-001"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 12.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 12.000000 0.000000
+END
+TURNOUT G "ME G-Trak 250 Alum 24"" Straight 22-002"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 24.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 24.000000 0.000000
+END
+TURNOUT G "ME G-Trak 250 Alum 36"" Straight 22-003"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 36.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 36.000000 0.000000
+END
+
+
+SUBCONTENTS Micro-Engineering G-Scale Track - 250 Aluminum Curve
+TURNOUT G "ME G-Trak 250 Alum 24"" Radius 30d Curve 22-102
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 12.000000 -3.215390 120.000000
+ C 0 0 24.000000 0.000000 -24.000000 0.000000 30.000000
+END
+TURNOUT G "ME G-Trak 250 Alum 48"" Radius 22.5d Curve 22-104
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 18.368805 -3.653782 112.500000
+ C 0 0 48.000000 0.000000 -48.000000 0.000000 22.500000
+END
+TURNOUT G "ME G-Trak 250 Alum 80"" Radius 18d Curve 22-107
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 24.721360 -3.915479 108.000000
+ C 0 0 80.000000 0.000000 -80.000000 0.000000 18.000000
+END
+TURNOUT G "ME G-Trak 250 Alum 120"" Radius 12d Curve 22-110
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 24.949403 -2.622288 102.000000
+ C 0 0 120.000000 0.000000 -120.000000 0.000000 12.000000
+END
+
+SUBCONTENTS Micro-Engineering G-Scale Track - 250 Nickle Silver Straight
+TURNOUT G "ME G-Trak 250 NS 12"" Straight 23-001"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 12.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 12.000000 0.000000
+END
+TURNOUT G "ME G-Trak 250 NS 24"" Straight 23-002"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 24.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 24.000000 0.000000
+END
+TURNOUT G "ME G-Trak 250 NS 36"" Straight 23-003"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 36.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 36.000000 0.000000
+END
+
+
+SUBCONTENTS Micro-Engineering G-Scale Track - 250 Nickle Silver Curve
+TURNOUT G "ME G-Trak 250 NS 24"" Radius 30d Curve 23-102
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 12.000000 -3.215390 120.000000
+ C 0 0 24.000000 0.000000 -24.000000 0.000000 30.000000
+END
+TURNOUT G "ME G-Trak 250 NS 48"" Radius 22.5d Curve 23-104
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 18.368805 -3.653782 112.500000
+ C 0 0 48.000000 0.000000 -48.000000 0.000000 22.500000
+END
+TURNOUT G "ME G-Trak 250 NS 80"" Radius 18d Curve 23-107
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 24.721360 -3.915479 108.000000
+ C 0 0 80.000000 0.000000 -80.000000 0.000000 18.000000
+END
+TURNOUT G "ME G-Trak 250 NS 120"" Radius 12d Curve 23-110
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 24.949403 -2.622288 102.000000
+ C 0 0 120.000000 0.000000 -120.000000 0.000000 12.000000
+END
diff --git a/app/lib/params/G-NQD-AMAX Plastic.xtp b/app/lib/params/G-NQD-AMAX Plastic.xtp
index 963de9c..262504f 100644
--- a/app/lib/params/G-NQD-AMAX Plastic.xtp
+++ b/app/lib/params/G-NQD-AMAX Plastic.xtp
@@ -1,4 +1,4 @@
-CONTENTS Newqida/AMAX G-Scale Plastic Track
+CONTENTS Newqida/AMAX G Scale Plastic Track
SUBCONTENTS Straight Track
TURNOUT G "Newqida/AMAX Straight 300mm 78010"
P "Normal" 1
@@ -8,7 +8,7 @@ TURNOUT G "Newqida/AMAX Straight 300mm 78010"
END
SUBCONTENTS Curve Track
-TURNOUT G "Newqida/AMAX Curved 650mm 30 78020"
+TURNOUT G "Newqida/AMAX Curved 650mm 30� 78020"
P "Normal" 1
E 0.000000 0.000000 270.000000
E 12.795276 3.428484 60.000000
diff --git a/app/lib/params/G-Peco G45 Track.xtp b/app/lib/params/G-Peco G45 Track.xtp
new file mode 100644
index 0000000..028de94
--- /dev/null
+++ b/app/lib/params/G-Peco G45 Track.xtp
@@ -0,0 +1,46 @@
+CONTENTS Peco G-Scale G45 Track
+SUBCONTENTS Peco G45 Straight Track
+TURNOUT G "Peco G45 Flex Straight 914mm SL900"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 35.984252 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 35.984252 0.000000
+END
+TURNOUT G "Peco G45 Straight 300mm SL901"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 11.811024 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 11.811024 0.000000
+END
+
+SUBCONTENTS Peco G45 Curve Track
+TURNOUT G "Peco G45 Curved 600mm 30d SL905"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 11.811024 -3.164754 120.000000
+ C 0 0.000000 23.622047 0.000000 -23.622047 0.000000 30.000000
+END
+
+SUBCONTENTS Peco G45 Switches
+TURNOUT G "Peco G45 Turnout Lefthand 600mm 12d SL996"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 23.622047 0.000000 90.000000
+ E 23.299642 3.000000 78.000000
+ S 0 0.000000 0.000000 0.000000 1.770000 0.000000
+ S 0 0.000000 1.770000 0.000000 23.622047 0.000000
+ C 0 0.000000 -70.557529 1.770094 70.557529 167.999924 12.000152
+ S 0 0.000000 16.439906 1.541888 23.299642 3.000000
+END
+TURNOUT G "Peco G45 Turnout Righthand 600mm 12d SL995"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 23.622047 0.000000 90.000000
+ E 23.299642 -3.000000 102.000000
+ S 0 0.000000 0.000000 0.000000 1.770000 0.000000
+ S 0 0.000000 1.770000 0.000000 23.622047 0.000000
+ C 0 0.000000 70.557529 1.769719 -70.557529 0.000076 12.000152
+ S 0 0.000000 16.439906 -1.541888 23.299642 -3.000000
+END
diff --git a/app/lib/params/G-aristo.xtp b/app/lib/params/G-aristo.xtp
index 3b6bc6c..cf7d2f2 100644
--- a/app/lib/params/G-aristo.xtp
+++ b/app/lib/params/G-aristo.xtp
@@ -1,4 +1,4 @@
-CONTENTS Aristo-Craft
+CONTENTS Aristo-Craft
TURNOUT G "Aristo-Craft .5' Straight 11001/20031/30031"
P "Normal" 1
E 0.000000 0.000000 270.000000
diff --git a/app/lib/params/Gn15-nmra.xtp b/app/lib/params/Gn15-nmra.xtp
index 30b9fc3..6b261fb 100644
--- a/app/lib/params/Gn15-nmra.xtp
+++ b/app/lib/params/Gn15-nmra.xtp
@@ -1,4 +1,4 @@
-CONTENTS NMRA RP12-3 Gn15-scale Turnouts
+CONTENTS NMRA RP12-3 Gn15 scale Turnouts
#NMRA-Std TO 2.125 0.125 43.000 5.062 15.000 14.250 0.562 0.938
TURNOUT Gn15 "NMRA Gn15 #4 Right 4R"
P "Normal" 1
diff --git a/app/lib/params/H0_ncb-Roads.xtp b/app/lib/params/H0_ncb-Roads.xtp
deleted file mode 100644
index 83f9988..0000000
--- a/app/lib/params/H0_ncb-Roads.xtp
+++ /dev/null
@@ -1,1098 +0,0 @@
-CONTENTS H0 roads and intersections
-STRUCTURE HO "ME 1-Ln-PvdAlley 100"
- F3 12632256 0.000000 4
- 0.000000 0.000000 0
- 10.000000 0.000000 0
- 10.000000 0.843750 0
- 0.000000 0.843750 0
- END
-STRUCTURE HO "ME 1-Ln-PvdRd 101"
- F3 12632256 0.000000 4
- 0.000000 0.000000 0
- 10.000000 0.000000 0
- 10.000000 1.375000 0
- 0.000000 1.375000 0
- END
-STRUCTURE HO "ME 1-Ln-PvdRd+Sw 102"
- F3 12632256 0.000000 4
- 0.024600 0.562500 0
- 10.024600 0.562500 0
- 10.024600 1.937500 0
- 0.024600 1.937500 0
- F3 15856115 0.000000 4
- 0.000000 0.687500 0
- 10.031250 0.687500 0
- 10.031250 0.000000 0
- 0.000000 0.000000 0
- F3 15856115 0.000000 4
- 0.031250 2.656250 0
- 10.062500 2.656250 0
- 10.062500 1.968750 0
- 0.031250 1.968750 0
- END
-STRUCTURE HO "ME 2-Ln-PvdRd 103"
- F3 12632256 0.000000 4
- 0.000000 0.000000 0
- 10.000000 0.000000 0
- 10.000000 2.656250 0
- 0.000000 2.656250 0
- END
-STRUCTURE HO "ME 2-Ln-PvdRd+Sw 104"
- F3 12632256 0.000000 4
- 0.062500 0.687500 0
- 10.062500 0.687500 0
- 10.062500 3.343750 0
- 0.062500 3.343750 0
- F3 15856115 0.000000 4
- 0.031250 0.687500 0
- 10.062500 0.687500 0
- 10.062500 0.000000 0
- 0.031250 0.000000 0
- F3 15856115 0.000000 4
- 0.000000 4.062500 0
- 10.031250 4.062500 0
- 10.031250 3.375000 0
- 0.000000 3.375000 0
- END
-STRUCTURE HO "ME 2-Ln-PvdRd+Sw,LM 105"
- F3 12632256 0.000000 4
- 0.062500 0.687500 0
- 10.062500 0.687500 0
- 10.062500 3.343750 0
- 0.062500 3.343750 0
- F3 16776960 0.000000 4
- 0.875000 1.906250 0
- 2.250000 1.906250 0
- 2.250000 1.968750 0
- 0.875000 1.968750 0
- F3 16776960 0.000000 4
- 3.087100 1.899600 0
- 4.462100 1.899600 0
- 4.462100 1.962100 0
- 3.087100 1.962100 0
- F3 16776960 0.000000 4
- 5.555850 1.875000 0
- 6.930850 1.875000 0
- 6.930850 1.937500 0
- 5.555850 1.937500 0
- F3 16776960 0.000000 4
- 7.767950 1.868350 0
- 9.142950 1.868350 0
- 9.142950 1.930850 0
- 7.767950 1.930850 0
- F3 15856115 0.000000 4
- 0.031250 0.687500 0
- 10.062500 0.687500 0
- 10.062500 0.000000 0
- 0.031250 0.000000 0
- F3 15856115 0.000000 4
- 0.000000 4.062500 0
- 10.031250 4.062500 0
- 10.031250 3.375000 0
- 0.000000 3.375000 0
- END
-STRUCTURE HO "ME 2-Ln-PvdRd+Sw.LM,LTL 106"
- F3 12632256 0.000000 4
- 0.006693 3.475398 0
- 10.006693 3.475398 0
- 10.006693 4.850398 0
- 0.006693 4.850398 0
- F3 12632256 0.000000 4
- 0.000043 2.093748 0
- 10.000043 2.093748 0
- 10.000043 3.468748 0
- 0.000043 3.468748 0
- F3 12632256 0.000000 4
- 0.000043 0.687499 0
- 10.000043 0.687499 0
- 10.000043 2.062499 0
- 0.000043 2.062499 0
- F3 16776960 0.000000 4
- 0.843793 2.162898 0
- 2.218793 2.162898 0
- 2.218793 2.225398 0
- 0.843793 2.225398 0
- F3 16776960 0.000000 4
- 3.055893 2.156248 0
- 4.430893 2.156248 0
- 4.430893 2.218748 0
- 3.055893 2.218748 0
- F3 16776960 0.000000 4
- 5.524643 2.162898 0
- 6.899643 2.162898 0
- 6.899643 2.225398 0
- 5.524643 2.225398 0
- F3 16776960 0.000000 4
- 7.736743 2.156248 0
- 9.111743 2.156248 0
- 9.111743 2.218748 0
- 7.736743 2.218748 0
- F3 16776960 0.000000 4
- 0.006693 2.100398 0
- 9.975443 2.100398 0
- 9.975443 2.037898 0
- 0.006693 2.037898 0
- F3 16776960 0.000000 4
- 0.837121 3.419548 0
- 2.212121 3.419548 0
- 2.212121 3.357048 0
- 0.837121 3.357048 0
- F3 16776960 0.000000 4
- 3.049221 3.426204 0
- 4.424221 3.426204 0
- 4.424221 3.363704 0
- 3.049221 3.363704 0
- F3 16776960 0.000000 4
- 5.517971 3.419561 0
- 6.892971 3.419561 0
- 6.892971 3.357061 0
- 5.517971 3.357061 0
- F3 16776960 0.000000 4
- 7.730071 3.426217 0
- 9.105071 3.426217 0
- 9.105071 3.363717 0
- 7.730071 3.363717 0
- F3 16776960 0.000000 4
- 0.000000 3.482046 0
- 9.968750 3.482046 0
- 9.968750 3.544546 0
- 0.000000 3.544546 0
- F3 15856115 0.000000 4
- 0.000000 0.687500 0
- 10.031250 0.687500 0
- 10.031250 0.000000 0
- 0.000000 0.000000 0
- F3 15856115 0.000000 4
- 0.000000 5.562500 0
- 10.031250 5.562500 0
- 10.031250 4.875000 0
- 0.000000 4.875000 0
- END
-STRUCTURE HO "ME 2-Ln-PvdRd+Sw,LM,Prk 107"
- F3 10921637 0.000000 4
- 0.037900 0.687500 0
- 10.037900 0.687500 0
- 10.037900 1.531250 0
- 0.037900 1.531250 0
- F3 12632256 0.000000 4
- 0.037900 1.531250 0
- 10.037900 1.531250 0
- 10.037900 4.187500 0
- 0.037900 4.187500 0
- F3 10921637 0.000000 4
- 0.031250 4.212100 0
- 10.031250 4.212100 0
- 10.031250 5.055850 0
- 0.031250 5.055850 0
- F3 16776960 0.000000 4
- 0.850400 2.750000 0
- 2.225400 2.750000 0
- 2.225400 2.812500 0
- 0.850400 2.812500 0
- F3 16776960 0.000000 4
- 3.062500 2.743350 0
- 4.437500 2.743350 0
- 4.437500 2.805850 0
- 3.062500 2.805850 0
- F3 16776960 0.000000 4
- 5.531250 2.718750 0
- 6.906250 2.718750 0
- 6.906250 2.781250 0
- 5.531250 2.781250 0
- F3 16776960 0.000000 4
- 7.743350 2.712100 0
- 9.118350 2.712100 0
- 9.118350 2.774600 0
- 7.743350 2.774600 0
- F3 15856115 0.000000 4
- 0.037900 0.687500 0
- 10.069150 0.687500 0
- 10.069150 0.000000 0
- 0.037900 0.000000 0
- F3 15856115 0.000000 4
- 0.000000 5.743350 0
- 10.031250 5.743350 0
- 10.031250 5.055850 0
- 0.000000 5.055850 0
- END
-STRUCTURE HO "ME 2-Ln-PvdRd+Sw,LM,LFT,Prk 108"
- F3 12632256 0.000000 4
- 0.037922 4.305853 0
- 10.037922 4.305853 0
- 10.037922 5.680853 0
- 0.037922 5.680853 0
- F3 12632256 0.000000 4
- 0.031272 2.924203 0
- 10.031272 2.924203 0
- 10.031272 4.299203 0
- 0.031272 4.299203 0
- F3 12632256 0.000000 4
- 0.031272 1.517954 0
- 10.031272 1.517954 0
- 10.031272 2.892954 0
- 0.031272 2.892954 0
- F3 16776960 0.000000 4
- 0.875022 2.993353 0
- 2.250022 2.993353 0
- 2.250022 3.055853 0
- 0.875022 3.055853 0
- F3 16776960 0.000000 4
- 3.087122 2.986703 0
- 4.462122 2.986703 0
- 4.462122 3.049203 0
- 3.087122 3.049203 0
- F3 16776960 0.000000 4
- 5.555872 2.993353 0
- 6.930872 2.993353 0
- 6.930872 3.055853 0
- 5.555872 3.055853 0
- F3 16776960 0.000000 4
- 7.767972 2.986703 0
- 9.142972 2.986703 0
- 9.142972 3.049203 0
- 7.767972 3.049203 0
- F3 16776960 0.000000 4
- 0.037922 2.930853 0
- 10.006672 2.930853 0
- 10.006672 2.868353 0
- 0.037922 2.868353 0
- F3 16776960 0.000000 4
- 0.868350 4.250003 0
- 2.243350 4.250003 0
- 2.243350 4.187503 0
- 0.868350 4.187503 0
- F3 16776960 0.000000 4
- 3.080450 4.256659 0
- 4.455450 4.256659 0
- 4.455450 4.194159 0
- 3.080450 4.194159 0
- F3 16776960 0.000000 4
- 5.549200 4.250015 0
- 6.924200 4.250015 0
- 6.924200 4.187515 0
- 5.549200 4.187515 0
- F3 16776960 0.000000 4
- 7.761300 4.256671 0
- 9.136300 4.256671 0
- 9.136300 4.194171 0
- 7.761300 4.194171 0
- F3 16776960 0.000000 4
- 0.031229 4.312501 0
- 9.999979 4.312501 0
- 9.999979 4.375001 0
- 0.031229 4.375001 0
- F3 10921637 0.000000 4
- 0.031272 5.736703 0
- 10.031272 5.736703 0
- 10.031272 6.580453 0
- 0.031272 6.580453 0
- F3 15856115 0.000000 4
- 0.000022 7.267953 0
- 10.031272 7.267953 0
- 10.031272 6.580453 0
- 0.000022 6.580453 0
- F3 10921637 0.000000 4
- 0.031246 1.531250 0
- 10.031246 1.531250 0
- 10.031246 0.687500 0
- 0.031246 0.687500 0
- F3 15856115 0.000000 4
- 0.000000 0.000000 0
- 10.031250 0.000000 0
- 10.031250 0.687500 0
- 0.000000 0.687500 0
- END
-STRUCTURE HO "ME 2-Ln-PvdRd+LM 109"
- F3 12632256 0.000000 4
- 0.000000 0.000000 0
- 10.000000 0.000000 0
- 10.000000 2.656250 0
- 0.000000 2.656250 0
- F3 16776960 0.000000 4
- 0.837100 1.250002 0
- 2.212100 1.250002 0
- 2.212100 1.312502 0
- 0.837100 1.312502 0
- F3 16776960 0.000000 4
- 3.049200 1.243352 0
- 4.424200 1.243352 0
- 4.424200 1.305852 0
- 3.049200 1.305852 0
- F3 16776960 0.000000 4
- 5.392950 1.250002 0
- 6.767950 1.250002 0
- 6.767950 1.312502 0
- 5.392950 1.312502 0
- F3 16776960 0.000000 4
- 7.636300 1.212102 0
- 9.011300 1.212102 0
- 9.011300 1.274602 0
- 7.636300 1.274602 0
- END
-STRUCTURE HO "ME 2-Ln-PvdRd+LM,LTL 106"
- F3 12632256 0.000000 4
- 0.006693 2.787899 0
- 10.006693 2.787899 0
- 10.006693 4.162899 0
- 0.006693 4.162899 0
- F3 12632256 0.000000 4
- 0.000043 1.406249 0
- 10.000043 1.406249 0
- 10.000043 2.781249 0
- 0.000043 2.781249 0
- F3 12632256 0.000000 4
- 0.000043 0.000000 0
- 10.000043 0.000000 0
- 10.000043 1.375000 0
- 0.000043 1.375000 0
- F3 16776960 0.000000 4
- 0.843793 1.475399 0
- 2.218793 1.475399 0
- 2.218793 1.537899 0
- 0.843793 1.537899 0
- F3 16776960 0.000000 4
- 3.055893 1.468749 0
- 4.430893 1.468749 0
- 4.430893 1.531249 0
- 3.055893 1.531249 0
- F3 16776960 0.000000 4
- 5.524643 1.475399 0
- 6.899643 1.475399 0
- 6.899643 1.537899 0
- 5.524643 1.537899 0
- F3 16776960 0.000000 4
- 7.736743 1.468749 0
- 9.111743 1.468749 0
- 9.111743 1.531249 0
- 7.736743 1.531249 0
- F3 16776960 0.000000 4
- 0.006693 1.412899 0
- 9.975443 1.412899 0
- 9.975443 1.350399 0
- 0.006693 1.350399 0
- F3 16776960 0.000000 4
- 0.837121 2.732049 0
- 2.212121 2.732049 0
- 2.212121 2.669549 0
- 0.837121 2.669549 0
- F3 16776960 0.000000 4
- 3.049221 2.738705 0
- 4.424221 2.738705 0
- 4.424221 2.676205 0
- 3.049221 2.676205 0
- F3 16776960 0.000000 4
- 5.517971 2.732062 0
- 6.892971 2.732062 0
- 6.892971 2.669562 0
- 5.517971 2.669562 0
- F3 16776960 0.000000 4
- 7.730071 2.738718 0
- 9.105071 2.738718 0
- 9.105071 2.676218 0
- 7.730071 2.676218 0
- F3 16776960 0.000000 4
- 0.000000 2.794547 0
- 9.968750 2.794547 0
- 9.968750 2.857047 0
- 0.000000 2.857047 0
- END
-STRUCTURE HO "ME 4-Ln-Pvd+Sw,LM,LFT 111"
- F3 12632256 0.000000 4
- 0.319193 4.881649 0
- 10.319193 4.881649 0
- 10.319193 6.256649 0
- 0.319193 6.256649 0
- F3 12632256 0.000000 4
- 0.312543 3.499999 0
- 10.312543 3.499999 0
- 10.312543 4.874999 0
- 0.312543 4.874999 0
- F3 12632256 0.000000 4
- 0.312543 2.093750 0
- 10.312543 2.093750 0
- 10.312543 3.468750 0
- 0.312543 3.468750 0
- F3 12632256 0.000000 4
- 0.312500 0.718751 0
- 10.312500 0.718751 0
- 10.312500 2.093751 0
- 0.312500 2.093751 0
- F3 12632256 0.000000 4
- 0.312500 6.250001 0
- 10.312500 6.250001 0
- 10.312500 7.625001 0
- 0.312500 7.625001 0
- F3 15856115 0.000000 4
- 0.281250 8.343751 0
- 10.312500 8.343751 0
- 10.312500 7.656251 0
- 0.281250 7.656251 0
- F3 15856115 0.000000 4
- 0.281250 0.000000 0
- 10.312500 0.000000 0
- 10.312500 0.687500 0
- 0.281250 0.687500 0
- F3 16776960 0.000000 4
- 1.156293 3.569149 0
- 2.531293 3.569149 0
- 2.531293 3.631649 0
- 1.156293 3.631649 0
- F3 16776960 0.000000 4
- 3.368393 3.562499 0
- 4.743393 3.562499 0
- 4.743393 3.624999 0
- 3.368393 3.624999 0
- F3 16776960 0.000000 4
- 5.837143 3.569149 0
- 7.212143 3.569149 0
- 7.212143 3.631649 0
- 5.837143 3.631649 0
- F3 16776960 0.000000 4
- 8.049243 3.562499 0
- 9.424243 3.562499 0
- 9.424243 3.624999 0
- 8.049243 3.624999 0
- F3 16776960 0.000000 4
- 0.319193 3.506649 0
- 10.287943 3.506649 0
- 10.287943 3.444149 0
- 0.319193 3.444149 0
- F3 16776960 0.000000 4
- 1.149621 4.825799 0
- 2.524621 4.825799 0
- 2.524621 4.763299 0
- 1.149621 4.763299 0
- F3 16776960 0.000000 4
- 3.361721 4.832455 0
- 4.736721 4.832455 0
- 4.736721 4.769955 0
- 3.361721 4.769955 0
- F3 16776960 0.000000 4
- 5.830471 4.825812 0
- 7.205471 4.825812 0
- 7.205471 4.763312 0
- 5.830471 4.763312 0
- F3 16776960 0.000000 4
- 8.042571 4.832468 0
- 9.417571 4.832468 0
- 9.417571 4.769968 0
- 8.042571 4.769968 0
- F3 16776960 0.000000 4
- 0.312500 4.888297 0
- 10.281250 4.888297 0
- 10.281250 4.950797 0
- 0.312500 4.950797 0
- F3 16776960 0.000000 4
- 0.000000 2.156251 0
- 1.375000 2.156251 0
- 1.375000 2.093751 0
- 0.000000 2.093751 0
- F3 16776960 0.000000 4
- 2.212100 2.162907 0
- 3.587100 2.162907 0
- 3.587100 2.100407 0
- 2.212100 2.100407 0
- F3 16776960 0.000000 4
- 4.680850 2.156264 0
- 6.055850 2.156264 0
- 6.055850 2.093764 0
- 4.680850 2.093764 0
- F3 16776960 0.000000 4
- 6.892950 2.162920 0
- 8.267950 2.162920 0
- 8.267950 2.100420 0
- 6.892950 2.100420 0
- F3 16776960 0.000000 4
- 9.187500 2.156251 0
- 10.562500 2.156251 0
- 10.562500 2.093751 0
- 9.187500 2.093751 0
- F3 16776960 0.000000 4
- 0.000000 6.250000 0
- 1.375000 6.250000 0
- 1.375000 6.187500 0
- 0.000000 6.187500 0
- F3 16776960 0.000000 4
- 2.212100 6.256656 0
- 3.587100 6.256656 0
- 3.587100 6.194156 0
- 2.212100 6.194156 0
- F3 16776960 0.000000 4
- 4.680850 6.250013 0
- 6.055850 6.250013 0
- 6.055850 6.187513 0
- 4.680850 6.187513 0
- F3 16776960 0.000000 4
- 6.892950 6.256669 0
- 8.267950 6.256669 0
- 8.267950 6.194169 0
- 6.892950 6.194169 0
- F3 16776960 0.000000 4
- 9.187500 6.250000 0
- 10.562500 6.250000 0
- 10.562500 6.187500 0
- 9.187500 6.187500 0
- END
-STRUCTURE HO "ME 1-Ln-DirtAlley 100a"
- F3 13417132 0.000000 4
- 0.000000 0.000000 0
- 10.000000 0.000000 0
- 10.000000 0.843750 0
- 0.000000 0.843750 0
- END
-STRUCTURE HO "ME 1-Ln-DirtRd 101a"
- F3 13417132 0.000000 4
- 0.000000 0.000000 0
- 10.000000 0.000000 0
- 10.000000 1.375000 0
- 0.000000 1.375000 0
- END
-STRUCTURE HO "ME 2-Ln-DirtRd 103a"
- F3 13417132 0.000000 4
- 0.000000 0.000000 0
- 10.000000 0.000000 0
- 10.000000 2.656250 0
- 0.000000 2.656250 0
- END
-STRUCTURE HO "ME Int-1-Ln-Pvd+Sw 113"
- F3 15856115 0.000000 4
- 0.000000 4.361699 0
- 10.031250 4.361699 0
- 10.031250 3.674199 0
- 0.000000 3.674199 0
- F3 15856115 0.000000 4
- 0.031250 6.330449 0
- 10.062500 6.330449 0
- 10.062500 5.642949 0
- 0.031250 5.642949 0
- F3 12632256 0.000000 4
- 4.312493 10.037899 0
- 4.312507 0.037899 0
- 5.687507 0.037900 0
- 5.687493 10.037900 0
- F3 15856115 0.000000 4
- 4.437493 10.062499 0
- 4.437507 0.031249 0
- 3.750007 0.031248 0
- 3.749993 10.062498 0
- F3 15856115 0.000000 4
- 6.406243 10.031251 0
- 6.406257 0.000001 0
- 5.718757 0.000000 0
- 5.718743 10.031250 0
- F3 12632256 0.000000 4
- 0.024600 4.236699 0
- 10.024600 4.236699 0
- 10.024600 5.611699 0
- 0.024600 5.611699 0
- END
-STRUCTURE HO "ME X--Int-2-Ln-Pvd+Sw 114"
- F3 15856115 0.000000 4
- 0.031250 3.674202 0
- 10.062500 3.674202 0
- 10.062500 2.986702 0
- 0.031250 2.986702 0
- F3 15856115 0.000000 4
- 0.000000 7.049202 0
- 10.031250 7.049202 0
- 10.031250 6.361702 0
- 0.000000 6.361702 0
- F3 12632256 0.000000 4
- 3.624994 10.000001 0
- 3.625007 0.000001 0
- 6.281257 0.000004 0
- 6.281244 10.000004 0
- F3 15856115 0.000000 4
- 3.624993 10.031251 0
- 3.625007 0.000001 0
- 2.937507 0.000000 0
- 2.937493 10.031250 0
- F3 15856115 0.000000 4
- 6.999993 10.062505 0
- 7.000007 0.031255 0
- 6.312507 0.031254 0
- 6.312493 10.062504 0
- F3 12632256 0.000000 4
- 0.062500 3.674202 0
- 10.062500 3.674202 0
- 10.062500 6.330452 0
- 0.062500 6.330452 0
- END
-STRUCTURE HO "ME X-Int-2-Ln-Pvd+Sw,LM 115"
- F3 15856115 0.000000 4
- 0.031251 3.674203 0
- 10.062501 3.674203 0
- 10.062501 2.986703 0
- 0.031251 2.986703 0
- F3 15856115 0.000000 4
- 0.000001 7.049203 0
- 10.031251 7.049203 0
- 10.031251 6.361703 0
- 0.000001 6.361703 0
- F3 12632256 0.000000 4
- 3.624995 10.000002 0
- 3.625008 0.000002 0
- 6.281258 0.000005 0
- 6.281245 10.000005 0
- F3 15856115 0.000000 4
- 3.624994 10.031251 0
- 3.625008 0.000001 0
- 2.937508 0.000000 0
- 2.937494 10.031250 0
- F3 15856115 0.000000 4
- 6.999994 10.062506 0
- 7.000008 0.031256 0
- 6.312508 0.031255 0
- 6.312494 10.062505 0
- F3 12632256 0.000000 4
- 0.062501 3.674203 0
- 10.062501 3.674203 0
- 10.062501 6.330453 0
- 0.062501 6.330453 0
- F3 16776960 0.000000 4
- 0.000000 4.912900 0
- 1.375000 4.912900 0
- 1.375000 4.975400 0
- 0.000000 4.975400 0
- F3 16776960 0.000000 4
- 2.212100 4.906250 0
- 3.587100 4.906250 0
- 3.587100 4.968750 0
- 2.212100 4.968750 0
- F3 16776960 0.000000 4
- 6.305850 4.881650 0
- 7.680850 4.881650 0
- 7.680850 4.944150 0
- 6.305850 4.944150 0
- F3 16776960 0.000000 4
- 8.517950 4.875000 0
- 9.892950 4.875000 0
- 9.892950 4.937500 0
- 8.517950 4.937500 0
- F3 16776960 0.000000 4
- 4.787894 9.950802 0
- 4.787896 8.575802 0
- 4.850396 8.575802 0
- 4.850394 9.950802 0
- F3 16776960 0.000000 4
- 4.781247 7.738702 0
- 4.781249 6.363702 0
- 4.843749 6.363702 0
- 4.843747 7.738702 0
- F3 16776960 0.000000 4
- 4.756653 3.644952 0
- 4.756655 2.269952 0
- 4.819155 2.269952 0
- 4.819153 3.644952 0
- F3 16776960 0.000000 4
- 4.750006 1.432852 0
- 4.750008 0.057852 0
- 4.812508 0.057852 0
- 4.812506 1.432852 0
- END
-STRUCTURE HO "ME X-Int-2-Ln-Pvd+Sw,LM,LFT 116"
- F3 15856115 0.000000 4
- 3.615991 10.627366 0
- 3.616005 0.596116 0
- 2.928505 0.596115 0
- 2.928491 10.627365 0
- F3 15856115 0.000000 4
- 8.490991 10.627372 0
- 8.491005 0.596122 0
- 7.803505 0.596121 0
- 7.803491 10.627371 0
- F3 15856115 0.000000 4
- 0.772254 3.582819 0
- 10.803504 3.582819 0
- 10.803504 2.895319 0
- 0.772254 2.895319 0
- F3 15856115 0.000000 4
- 0.772254 8.457819 0
- 10.803504 8.457819 0
- 10.803504 7.770319 0
- 0.772254 7.770319 0
- F3 12632256 0.000000 4
- 0.778947 6.370717 0
- 10.778947 6.370717 0
- 10.778947 7.745717 0
- 0.778947 7.745717 0
- F3 12632256 0.000000 4
- 0.772297 4.989067 0
- 10.772297 4.989067 0
- 10.772297 6.364067 0
- 0.772297 6.364067 0
- F3 12632256 0.000000 4
- 0.772297 3.582818 0
- 10.772297 3.582818 0
- 10.772297 4.957818 0
- 0.772297 4.957818 0
- F3 12632256 0.000000 4
- 6.403889 10.620677 0
- 6.403903 0.620677 0
- 7.778903 0.620679 0
- 7.778889 10.620679 0
- F3 12632256 0.000000 4
- 5.022239 10.627325 0
- 5.022253 0.627325 0
- 6.397253 0.627327 0
- 6.397239 10.627327 0
- F3 12632256 0.000000 4
- 3.615990 10.627323 0
- 3.616004 0.627323 0
- 4.991004 0.627325 0
- 4.990990 10.627325 0
- F3 16776960 0.000000 4
- 5.075765 11.346075 0
- 5.075767 9.971075 0
- 5.138267 9.971075 0
- 5.138265 11.346075 0
- F3 16776960 0.000000 4
- 5.069118 9.133975 0
- 5.069120 7.758975 0
- 5.131620 7.758975 0
- 5.131618 9.133975 0
- F3 16776960 0.000000 4
- 5.075771 3.587100 0
- 5.075773 2.212100 0
- 5.138273 2.212100 0
- 5.138271 3.587100 0
- F3 16776960 0.000000 4
- 5.069124 1.375000 0
- 5.069126 0.000000 0
- 5.131626 0.000000 0
- 5.131624 1.375000 0
- F3 16776960 0.000000 4
- 5.028889 10.620675 0
- 5.028903 0.651925 0
- 4.966403 0.651925 0
- 4.966389 10.620675 0
- F3 16776960 0.000000 4
- 6.332415 11.352748 0
- 6.332417 9.977748 0
- 6.269917 9.977748 0
- 6.269915 11.352748 0
- F3 16776960 0.000000 4
- 6.339074 9.140648 0
- 6.339076 7.765648 0
- 6.276576 7.765648 0
- 6.276574 9.140648 0
- F3 16776960 0.000000 4
- 6.332434 3.593773 0
- 6.332436 2.218773 0
- 6.269936 2.218773 0
- 6.269934 3.593773 0
- F3 16776960 0.000000 4
- 6.339093 1.381673 0
- 6.339095 0.006673 0
- 6.276595 0.006673 0
- 6.276593 1.381673 0
- F3 16776960 0.000000 4
- 6.410537 10.627370 0
- 6.410551 0.658620 0
- 6.473051 0.658620 0
- 6.473037 10.627370 0
- F3 16776960 0.000000 4
- 0.006672 5.058217 0
- 1.381672 5.058217 0
- 1.381672 5.120717 0
- 0.006672 5.120717 0
- F3 16776960 0.000000 4
- 9.977747 5.051567 0
- 11.352747 5.051567 0
- 11.352747 5.114067 0
- 9.977747 5.114067 0
- F3 16776960 0.000000 4
- 0.778947 4.995717 0
- 10.747697 4.995717 0
- 10.747697 4.933217 0
- 0.778947 4.933217 0
- F3 16776960 0.000000 4
- 0.000000 6.314867 0
- 1.375000 6.314867 0
- 1.375000 6.252367 0
- 0.000000 6.252367 0
- F3 16776960 0.000000 4
- 2.227725 6.337148 0
- 3.602725 6.337148 0
- 3.602725 6.274648 0
- 2.227725 6.274648 0
- F3 16776960 0.000000 4
- 7.774600 6.330505 0
- 9.149600 6.330505 0
- 9.149600 6.268005 0
- 7.774600 6.268005 0
- F3 16776960 0.000000 4
- 9.971075 6.321536 0
- 11.346075 6.321536 0
- 11.346075 6.259036 0
- 9.971075 6.259036 0
- F3 16776960 0.000000 4
- 0.772254 6.377365 0
- 10.741004 6.377365 0
- 10.741004 6.439865 0
- 0.772254 6.439865 0
- F3 16776960 0.000000 4
- 2.234397 5.067192 0
- 3.609397 5.067192 0
- 3.609397 5.129692 0
- 2.234397 5.129692 0
- F3 16776960 0.000000 4
- 7.781272 5.073842 0
- 9.156272 5.073842 0
- 9.156272 5.136342 0
- 7.781272 5.136342 0
- F3 12632256 0.000000 4
- 3.591404 3.589469 0
- 7.778904 3.589469 0
- 7.778904 7.776969 0
- 3.591404 7.776969 0
- END
-STRUCTURE HO "ME X-Int-2-Ln-Pvd+Sw,LM,Prk 117"
- F3 15856115 0.000000 4
- 0.812500 3.480051 0
- 10.843750 3.480051 0
- 10.843750 2.792551 0
- 0.812500 2.792551 0
- F3 15856115 0.000000 4
- 0.774600 8.535901 0
- 10.805850 8.535901 0
- 10.805850 7.848401 0
- 0.774600 7.848401 0
- F3 10921637 0.000000 4
- 3.587093 10.580447 0
- 3.587107 0.580447 0
- 4.430857 0.580448 0
- 4.430843 10.580448 0
- F3 10921637 0.000000 4
- 7.111693 10.587102 0
- 7.111707 0.587102 0
- 7.955457 0.587103 0
- 7.955443 10.587103 0
- F3 15856115 0.000000 4
- 3.587093 10.580447 0
- 3.587107 0.549197 0
- 2.899607 0.549196 0
- 2.899593 10.580446 0
- F3 15856115 0.000000 4
- 8.642943 10.618354 0
- 8.642957 0.587104 0
- 7.955457 0.587103 0
- 7.955443 10.618353 0
- F3 10921637 0.000000 4
- 0.812500 3.480051 0
- 10.812500 3.480051 0
- 10.812500 4.323801 0
- 0.812500 4.323801 0
- F3 10921637 0.000000 4
- 0.805850 7.004651 0
- 10.805850 7.004651 0
- 10.805850 7.848401 0
- 0.805850 7.848401 0
- F3 12632256 0.000000 4
- 4.430844 10.580449 0
- 4.430857 0.580449 0
- 7.087107 0.580453 0
- 7.087094 10.580453 0
- F3 12632256 0.000000 4
- 0.812500 4.323801 0
- 10.812500 4.323801 0
- 10.812500 6.980051 0
- 0.812500 6.980051 0
- F3 16776960 0.000000 4
- 0.000000 5.542551 0
- 1.375000 5.542551 0
- 1.375000 5.605051 0
- 0.000000 5.605051 0
- F3 16776960 0.000000 4
- 2.212100 5.535901 0
- 3.587100 5.535901 0
- 3.587100 5.598401 0
- 2.212100 5.598401 0
- F3 16776960 0.000000 4
- 7.868350 5.511301 0
- 9.243350 5.511301 0
- 9.243350 5.573801 0
- 7.868350 5.573801 0
- F3 16776960 0.000000 4
- 10.080450 5.504651 0
- 11.455450 5.504651 0
- 11.455450 5.567151 0
- 10.080450 5.567151 0
- F3 16776960 0.000000 4
- 5.587094 11.517950 0
- 5.587096 10.142950 0
- 5.649596 10.142950 0
- 5.649594 11.517950 0
- F3 16776960 0.000000 4
- 5.580447 9.305850 0
- 5.580449 7.930850 0
- 5.642949 7.930850 0
- 5.642947 9.305850 0
- F3 16776960 0.000000 4
- 5.680850 3.587100 0
- 5.680852 2.212100 0
- 5.743352 2.212100 0
- 5.743350 3.587100 0
- F3 16776960 0.000000 4
- 5.674203 1.375000 0
- 5.674205 0.000000 0
- 5.736705 0.000000 0
- 5.736703 1.375000 0
- F3 12632256 0.000000 4
- 3.593750 3.486701 0
- 4.437500 3.486701 0
- 4.437500 4.361701 0
- 3.593750 4.361701 0
- F3 12632256 0.000000 4
- 3.587100 6.980051 0
- 4.430850 6.980051 0
- 4.430850 7.855051 0
- 3.587100 7.855051 0
- F3 12632256 0.000000 4
- 7.087100 6.980051 0
- 7.930850 6.980051 0
- 7.930850 7.855051 0
- 7.087100 7.855051 0
- F3 12632256 0.000000 4
- 7.087100 3.448801 0
- 7.930850 3.448801 0
- 7.930850 4.323801 0
- 7.087100 4.323801 0
- END
-STRUCTURE HO "ME X-Int-2-Ln-Pvd+Sw,LM,LFT,Prk 118"
- F3 15856115 0.000000 4
- 8.705446 10.037904 0
- 8.705460 0.006654 0
- 8.017960 0.006653 0
- 8.017946 10.037903 0
- F3 15856115 0.000000 4
- 1.437493 10.037916 0
- 1.437507 0.006666 0
- 2.125007 0.006667 0
- 2.124993 10.037917 0
- F3 10921637 0.000000 4
- 0.031272 7.136324 0
- 10.031272 7.136324 0
- 10.031272 7.980074 0
- 0.031272 7.980074 0
- F3 15856115 0.000000 4
- 0.000022 8.667574 0
- 10.031272 8.667574 0
- 10.031272 7.980074 0
- 0.000022 7.980074 0
- F3 10921637 0.000000 4
- 0.031246 2.930871 0
- 10.031246 2.930871 0
- 10.031246 2.087121 0
- 0.031246 2.087121 0
- F3 15856115 0.000000 4
- 0.000000 1.399621 0
- 10.031250 1.399621 0
- 10.031250 2.087121 0
- 0.000000 2.087121 0
- F3 10921637 0.000000 4
- 7.174196 10.006652 0
- 7.174210 0.006652 0
- 8.017960 0.006653 0
- 8.017946 10.006653 0
- F3 10921637 0.000000 4
- 2.968743 10.006672 0
- 2.968757 0.006672 0
- 2.125007 0.006671 0
- 2.124993 10.006671 0
- F3 12632256 0.000000 4
- 0.037922 5.705474 0
- 10.037922 5.705474 0
- 10.037922 7.080474 0
- 0.037922 7.080474 0
- F3 12632256 0.000000 4
- 0.031272 4.323824 0
- 10.031272 4.323824 0
- 10.031272 5.698824 0
- 0.031272 5.698824 0
- F3 12632256 0.000000 4
- 0.031272 2.917575 0
- 10.031272 2.917575 0
- 10.031272 4.292575 0
- 0.031272 4.292575 0
- F3 16776960 0.000000 4
- 0.562522 4.392974 0
- 1.937522 4.392974 0
- 1.937522 4.455474 0
- 0.562522 4.455474 0
- F3 16776960 0.000000 4
- 8.142972 4.386324 0
- 9.517972 4.386324 0
- 9.517972 4.448824 0
- 8.142972 4.448824 0
- F3 16776960 0.000000 4
- 0.037922 4.330474 0
- 10.006672 4.330474 0
- 10.006672 4.267974 0
- 0.037922 4.267974 0
- F3 16776960 0.000000 4
- 0.555850 5.649624 0
- 1.930850 5.649624 0
- 1.930850 5.587124 0
- 0.555850 5.587124 0
- F3 16776960 0.000000 4
- 8.136300 5.656292 0
- 9.511300 5.656292 0
- 9.511300 5.593792 0
- 8.136300 5.593792 0
- F3 16776960 0.000000 4
- 0.031229 5.712122 0
- 9.999979 5.712122 0
- 9.999979 5.774622 0
- 0.031229 5.774622 0
- F3 12632256 0.000000 4
- 5.743346 10.000000 0
- 5.743360 0.000000 0
- 7.118360 0.000002 0
- 7.118346 10.000002 0
- F3 12632256 0.000000 4
- 4.361696 10.006648 0
- 4.361710 0.006648 0
- 5.736710 0.006650 0
- 5.736696 10.006650 0
- F3 12632256 0.000000 4
- 2.955447 10.006646 0
- 2.955461 0.006646 0
- 4.330461 0.006648 0
- 4.330447 10.006648 0
- F3 16776960 0.000000 4
- 4.424200 9.388298 0
- 4.424202 8.013298 0
- 4.486702 8.013298 0
- 4.486700 9.388298 0
- F3 16776960 0.000000 4
- 4.430854 2.044548 0
- 4.430856 0.669548 0
- 4.493356 0.669548 0
- 4.493354 2.044548 0
- F3 16776960 0.000000 4
- 4.368346 9.999998 0
- 4.368360 0.031248 0
- 4.305860 0.031248 0
- 4.305846 9.999998 0
- F3 16776960 0.000000 4
- 5.694156 9.394972 0
- 5.694158 8.019972 0
- 5.631658 8.019972 0
- 5.631656 9.394972 0
- F3 16776960 0.000000 4
- 5.687517 2.051222 0
- 5.687519 0.676222 0
- 5.625019 0.676222 0
- 5.625017 2.051222 0
- F3 16776960 0.000000 4
- 5.749994 10.006693 0
- 5.750008 0.037943 0
- 5.812508 0.037943 0
- 5.812494 10.006693 0
- F3 12632256 0.000000 4
- 2.100400 2.093771 0
- 8.037900 2.093771 0
- 8.037900 8.000021 0
- 2.100400 8.000021 0
- END
diff --git a/app/lib/params/HO-CentralValley Bridges.xtp b/app/lib/params/HO-CentralValley Bridges.xtp
new file mode 100644
index 0000000..a03c6e9
--- /dev/null
+++ b/app/lib/params/HO-CentralValley Bridges.xtp
@@ -0,0 +1,407 @@
+CONTENTS Central Valley HO Scale
+SUBCONTENTS Central Valley HO Scale - Bridges
+TURNOUT HO "Central Valley 200' Parker Truss Dbl Track Bridge 29in 1900"
+ P "Normal" 1 0 2
+ E 29.000000 1.000000 90.000000
+ E 0.000000 1.000000 270.000000
+ E 29.000000 -1.000000 90.000000
+ E 0.000000 -1.000000 270.000000
+ S 0 0 0.000000 1.000000 29.000000 1.000000
+ S 0 0 0.000000 -1.000000 29.000000 -1.000000
+
+ L 10223889 0.137773 0.068886 2.306114 0.068886 -2.306114
+ L 10223889 0.137773 28.931114 2.306114 28.931114 -2.306114
+ L 10223889 0.137773 0.000000 2.306114 29.000000 2.306114
+ L 10223889 0.137773 0.000000 -2.306114 29.000000 -2.306114
+
+ L 10223889 0.053333 3.667049 -2.306114 3.667049 2.306114
+
+ L 10223889 0.053333 3.667049 1.583333 4.167049 2.306114
+ L 10223889 0.053333 4.167049 1.583333 3.667049 2.306114
+
+ L 10223889 0.053333 3.667049 0.791667 4.167049 1.583333
+ L 10223889 0.053333 4.167049 0.791667 3.667049 1.583333
+
+ L 10223889 0.053333 3.667049 0.000000 4.167049 0.791667
+ L 10223889 0.053333 4.167049 0.000000 3.667049 0.791667
+
+ L 10223889 0.053333 3.667049 0.000000 4.167049 -0.791667
+ L 10223889 0.053333 4.167049 0.000000 3.667049 -0.791667
+
+ L 10223889 0.053333 3.667049 -0.791667 4.167049 -1.583333
+ L 10223889 0.053333 4.167049 -0.791667 3.667049 -1.583333
+
+ L 10223889 0.053333 3.667049 -1.583333 4.167049 -2.306114
+ L 10223889 0.053333 4.167049 -1.583333 3.667049 -2.306114
+
+ L 10223889 0.053333 4.167049 -2.306114 4.167049 2.306114
+
+ L 10223889 0.053333 4.167049 -2.306114 7.611366 2.306114
+ L 10223889 0.053333 7.611366 -2.306114 4.167049 2.306114
+
+ L 10223889 0.053333 7.611366 -2.306114 7.611366 2.306114
+
+ L 10223889 0.053333 7.611366 -2.306114 11.055683 2.306114
+ L 10223889 0.053333 11.055683 -2.306114 7.611366 2.306114
+
+ L 10223889 0.053333 11.055683 -2.306114 11.055683 2.306114
+
+ L 10223889 0.053333 11.055683 -2.306114 14.500000 2.306114
+ L 10223889 0.053333 14.500000 -2.306114 11.055683 2.306114
+
+ L 10223889 0.053333 14.500000 -2.306114 14.500000 2.306114
+
+ L 10223889 0.053333 14.500000 -2.306114 17.944317 2.306114
+ L 10223889 0.053333 17.944317 -2.306114 14.500000 2.306114
+
+ L 10223889 0.053333 17.944317 -2.306114 17.944317 2.306114
+
+ L 10223889 0.053333 17.944317 -2.306114 21.388634 2.306114
+ L 10223889 0.053333 21.388634 -2.306114 17.944317 2.306114
+
+ L 10223889 0.053333 21.388634 -2.306114 21.388634 2.306114
+
+ L 10223889 0.053333 21.388634 -2.306114 24.832951 2.306114
+ L 10223889 0.053333 24.832951 -2.306114 21.388634 2.306114
+
+ L 10223889 0.053333 24.832951 -2.306114 24.832951 2.306114
+
+ L 10223889 0.053333 24.832951 1.583333 25.332951 2.306114
+ L 10223889 0.053333 25.332951 1.583333 24.832951 2.306114
+
+ L 10223889 0.053333 24.832951 0.791667 25.332951 1.583333
+ L 10223889 0.053333 25.332951 0.791667 24.832951 1.583333
+
+ L 10223889 0.053333 24.832951 0.000000 25.332951 0.791667
+ L 10223889 0.053333 25.332951 0.000000 24.832951 0.791667
+
+ L 10223889 0.053333 24.832951 0.000000 25.332951 -0.791667
+ L 10223889 0.053333 25.332951 0.000000 24.832951 -0.791667
+
+ L 10223889 0.053333 24.832951 -0.791667 25.332951 -1.583333
+ L 10223889 0.053333 25.332951 -0.791667 24.832951 -1.583333
+
+ L 10223889 0.053333 24.832951 -1.583333 25.332951 -2.306114
+ L 10223889 0.053333 25.332951 -1.583333 24.832951 -2.306114
+
+ L 10223889 0.053333 25.332951 -2.306114 25.332951 2.306114
+END
+TURNOUT HO "Central Valley 200' Parker Truss Bridge 29in 1901"
+ P "Normal" 1
+ E 29.000000 0.000000 90.000000
+ E 0.000000 0.000000 270.000000
+ S 0 0 0.000000 0.000000 29.000000 0.000000
+
+ L 10223889 0.137773 0.068886 1.368614 0.068886 -1.368614
+ L 10223889 0.137773 28.931114 1.368614 28.931114 -1.368614
+ L 10223889 0.137773 0.000000 1.368614 29.000000 1.368614
+ L 10223889 0.137773 0.000000 -1.368614 29.000000 -1.368614
+
+ L 10223889 0.053333 3.667049 -1.368614 3.667049 1.368614
+
+ L 10223889 0.053333 3.667049 0.718750 4.167049 1.368614
+ L 10223889 0.053333 4.167049 0.718750 3.667049 1.368614
+
+ L 10223889 0.053333 3.667049 0.000000 4.167049 0.718750
+ L 10223889 0.053333 4.167049 0.000000 3.667049 0.718750
+
+ L 10223889 0.053333 3.667049 0.000000 4.167049 -0.718750
+ L 10223889 0.053333 4.167049 0.000000 3.667049 -0.718750
+
+ L 10223889 0.053333 3.667049 -0.718750 4.167049 -1.368614
+ L 10223889 0.053333 4.167049 -0.718750 3.667049 -1.368614
+
+ L 10223889 0.053333 4.167049 -1.368614 4.167049 1.368614
+
+ L 10223889 0.053333 4.167049 -1.368614 7.611366 1.368614
+ L 10223889 0.053333 7.611366 -1.368614 4.167049 1.368614
+
+ L 10223889 0.053333 7.611366 -1.368614 7.611366 1.368614
+
+ L 10223889 0.053333 7.611366 -1.368614 11.055683 1.368614
+ L 10223889 0.053333 11.055683 -1.368614 7.611366 1.368614
+
+ L 10223889 0.053333 11.055683 -1.368614 11.055683 1.368614
+
+ L 10223889 0.053333 11.055683 -1.368614 14.500000 1.368614
+ L 10223889 0.053333 14.500000 -1.368614 11.055683 1.368614
+
+ L 10223889 0.053333 14.500000 -1.368614 14.500000 1.368614
+
+ L 10223889 0.053333 14.500000 -1.368614 17.944317 1.368614
+ L 10223889 0.053333 17.944317 -1.368614 14.500000 1.368614
+
+ L 10223889 0.053333 17.944317 -1.368614 17.944317 1.368614
+
+ L 10223889 0.053333 17.944317 -1.368614 21.388634 1.368614
+ L 10223889 0.053333 21.388634 -1.368614 17.944317 1.368614
+
+ L 10223889 0.053333 21.388634 -1.368614 21.388634 1.368614
+
+ L 10223889 0.053333 21.388634 -1.368614 24.832951 1.368614
+ L 10223889 0.053333 24.832951 -1.368614 21.388634 1.368614
+
+ L 10223889 0.053333 24.832951 -1.368614 24.832951 1.368614
+
+ L 10223889 0.053333 24.832951 0.718750 25.332951 1.368614
+ L 10223889 0.053333 25.332951 0.718750 24.832951 1.368614
+
+ L 10223889 0.053333 24.832951 0.000000 25.332951 0.718750
+ L 10223889 0.053333 25.332951 0.000000 24.832951 0.718750
+
+ L 10223889 0.053333 24.832951 0.000000 25.332951 -0.718750
+ L 10223889 0.053333 25.332951 0.000000 24.832951 -0.718750
+
+ L 10223889 0.053333 24.832951 -0.718750 25.332951 -1.368614
+ L 10223889 0.053333 25.332951 -0.718750 24.832951 -1.368614
+
+ L 10223889 0.053333 25.332951 -1.368614 25.332951 1.368614
+END
+TURNOUT HO "Central Valley 150' Truss Bridge 21in 1902"
+ P "Normal" 1
+ E 21.000000 0.000000 90.000000
+ E 0.000000 0.000000 270.000000
+ S 0 0 0.000000 0.000000 21.000000 0.000000
+
+ L 10223889 0.137773 0.068886 1.368614 0.068886 -1.368614
+ L 10223889 0.137773 20.931114 1.368614 20.931114 -1.368614
+ L 10223889 0.137773 0.000000 1.368614 21.000000 1.368614
+ L 10223889 0.137773 0.000000 -1.368614 21.000000 -1.368614
+
+ L 10223889 0.053333 3.111366 -1.368614 3.111366 1.368614
+
+ L 10223889 0.053333 3.111366 0.718750 3.611366 1.368614
+ L 10223889 0.053333 3.611366 0.718750 3.111366 1.368614
+
+ L 10223889 0.053333 3.111366 0.000000 3.611366 0.718750
+ L 10223889 0.053333 3.611366 0.000000 3.111366 0.718750
+
+ L 10223889 0.053333 3.111366 0.000000 3.611366 -0.718750
+ L 10223889 0.053333 3.611366 0.000000 3.111366 -0.718750
+
+ L 10223889 0.053333 3.111366 -0.718750 3.611366 -1.368614
+ L 10223889 0.053333 3.611366 -0.718750 3.111366 -1.368614
+
+ L 10223889 0.053333 3.611366 -1.368614 3.611366 1.368614
+
+ L 10223889 0.053333 3.611366 -1.368614 7.055683 1.368614
+ L 10223889 0.053333 7.055683 -1.368614 3.611366 1.368614
+
+ L 10223889 0.053333 7.055683 -1.368614 7.055683 1.368614
+
+ L 10223889 0.053333 7.055683 -1.368614 10.500000 1.368614
+ L 10223889 0.053333 10.500000 -1.368614 7.055683 1.368614
+
+ L 10223889 0.053333 10.500000 -1.368614 10.500000 1.368614
+
+ L 10223889 0.053333 10.500000 -1.368614 13.944317 1.368614
+ L 10223889 0.053333 13.944317 -1.368614 10.500000 1.368614
+
+ L 10223889 0.053333 13.944317 -1.368614 13.944317 1.368614
+
+ L 10223889 0.053333 13.944317 -1.368614 17.388634 1.368614
+ L 10223889 0.053333 17.388634 -1.368614 13.944317 1.368614
+
+ L 10223889 0.053333 17.388634 -1.368614 17.388634 1.368614
+
+ L 10223889 0.053333 17.388634 0.718750 17.888634 1.368614
+ L 10223889 0.053333 17.888634 0.718750 17.388634 1.368614
+
+ L 10223889 0.053333 17.388634 0.000000 17.888634 0.718750
+ L 10223889 0.053333 17.888634 0.000000 17.388634 0.718750
+
+ L 10223889 0.053333 17.388634 0.000000 17.888634 -0.718750
+ L 10223889 0.053333 17.888634 0.000000 17.388634 -0.718750
+
+ L 10223889 0.053333 17.388634 -0.718750 17.888634 -1.368614
+ L 10223889 0.053333 17.888634 -0.718750 17.388634 -1.368614
+
+ L 10223889 0.053333 17.888634 -1.368614 17.888634 1.368614
+END
+TURNOUT HO "Central Valley 150' Truss Bridge (Punchplate) 21in 1905"
+ P "Normal" 1
+ E 21.000000 0.000000 90.000000
+ E 0.000000 0.000000 270.000000
+ S 0 0 0.000000 0.000000 21.000000 0.000000
+
+ L 10223889 0.137773 0.068886 1.368614 0.068886 -1.368614
+ L 10223889 0.137773 20.931114 1.368614 20.931114 -1.368614
+ L 10223889 0.137773 0.000000 1.368614 21.000000 1.368614
+ L 10223889 0.137773 0.000000 -1.368614 21.000000 -1.368614
+
+ L 10223889 0.053333 3.111366 -1.368614 3.111366 1.368614
+
+ L 10223889 0.053333 3.111366 0.718750 3.611366 1.368614
+ L 10223889 0.053333 3.611366 0.718750 3.111366 1.368614
+
+ L 10223889 0.053333 3.111366 0.000000 3.611366 0.718750
+ L 10223889 0.053333 3.611366 0.000000 3.111366 0.718750
+
+ L 10223889 0.053333 3.111366 0.000000 3.611366 -0.718750
+ L 10223889 0.053333 3.611366 0.000000 3.111366 -0.718750
+
+ L 10223889 0.053333 3.111366 -0.718750 3.611366 -1.368614
+ L 10223889 0.053333 3.611366 -0.718750 3.111366 -1.368614
+
+ L 10223889 0.053333 3.611366 -1.368614 3.611366 1.368614
+
+ L 10223889 0.053333 3.611366 -1.368614 7.055683 1.368614
+ L 10223889 0.053333 7.055683 -1.368614 3.611366 1.368614
+
+ L 10223889 0.053333 7.055683 -1.368614 7.055683 1.368614
+
+ L 10223889 0.053333 7.055683 -1.368614 10.500000 1.368614
+ L 10223889 0.053333 10.500000 -1.368614 7.055683 1.368614
+
+ L 10223889 0.053333 10.500000 -1.368614 10.500000 1.368614
+
+ L 10223889 0.053333 10.500000 -1.368614 13.944317 1.368614
+ L 10223889 0.053333 13.944317 -1.368614 10.500000 1.368614
+
+ L 10223889 0.053333 13.944317 -1.368614 13.944317 1.368614
+
+ L 10223889 0.053333 13.944317 -1.368614 17.388634 1.368614
+ L 10223889 0.053333 17.388634 -1.368614 13.944317 1.368614
+
+ L 10223889 0.053333 17.388634 -1.368614 17.388634 1.368614
+
+ L 10223889 0.053333 17.388634 0.718750 17.888634 1.368614
+ L 10223889 0.053333 17.888634 0.718750 17.388634 1.368614
+
+ L 10223889 0.053333 17.388634 0.000000 17.888634 0.718750
+ L 10223889 0.053333 17.888634 0.000000 17.388634 0.718750
+
+ L 10223889 0.053333 17.388634 0.000000 17.888634 -0.718750
+ L 10223889 0.053333 17.888634 0.000000 17.388634 -0.718750
+
+ L 10223889 0.053333 17.388634 -0.718750 17.888634 -1.368614
+ L 10223889 0.053333 17.888634 -0.718750 17.388634 -1.368614
+
+ L 10223889 0.053333 17.888634 -1.368614 17.888634 1.368614
+END
+TURNOUT HO "Central Valley 150' Truss Bridge (Gusseted) 21in 1906"
+ P "Normal" 1
+ E 21.000000 0.000000 90.000000
+ E 0.000000 0.000000 270.000000
+ S 0 0 0.000000 0.000000 21.000000 0.000000
+
+ L 10223889 0.137773 0.068886 1.368614 0.068886 -1.368614
+ L 10223889 0.137773 20.931114 1.368614 20.931114 -1.368614
+ L 10223889 0.137773 0.000000 1.368614 21.000000 1.368614
+ L 10223889 0.137773 0.000000 -1.368614 21.000000 -1.368614
+
+ L 10223889 0.053333 3.111366 -1.368614 3.111366 1.368614
+
+ L 10223889 0.053333 3.111366 0.718750 3.611366 1.368614
+ L 10223889 0.053333 3.611366 0.718750 3.111366 1.368614
+
+ L 10223889 0.053333 3.111366 0.000000 3.611366 0.718750
+ L 10223889 0.053333 3.611366 0.000000 3.111366 0.718750
+
+ L 10223889 0.053333 3.111366 0.000000 3.611366 -0.718750
+ L 10223889 0.053333 3.611366 0.000000 3.111366 -0.718750
+
+ L 10223889 0.053333 3.111366 -0.718750 3.611366 -1.368614
+ L 10223889 0.053333 3.611366 -0.718750 3.111366 -1.368614
+
+ L 10223889 0.053333 3.611366 -1.368614 3.611366 1.368614
+
+ L 10223889 0.053333 3.611366 -1.368614 7.055683 1.368614
+ L 10223889 0.053333 7.055683 -1.368614 3.611366 1.368614
+
+ L 10223889 0.053333 7.055683 -1.368614 7.055683 1.368614
+
+ L 10223889 0.053333 7.055683 -1.368614 10.500000 1.368614
+ L 10223889 0.053333 10.500000 -1.368614 7.055683 1.368614
+
+ L 10223889 0.053333 10.500000 -1.368614 10.500000 1.368614
+
+ L 10223889 0.053333 10.500000 -1.368614 13.944317 1.368614
+ L 10223889 0.053333 13.944317 -1.368614 10.500000 1.368614
+
+ L 10223889 0.053333 13.944317 -1.368614 13.944317 1.368614
+
+ L 10223889 0.053333 13.944317 -1.368614 17.388634 1.368614
+ L 10223889 0.053333 17.388634 -1.368614 13.944317 1.368614
+
+ L 10223889 0.053333 17.388634 -1.368614 17.388634 1.368614
+
+ L 10223889 0.053333 17.388634 0.718750 17.888634 1.368614
+ L 10223889 0.053333 17.888634 0.718750 17.388634 1.368614
+
+ L 10223889 0.053333 17.388634 0.000000 17.888634 0.718750
+ L 10223889 0.053333 17.888634 0.000000 17.388634 0.718750
+
+ L 10223889 0.053333 17.388634 0.000000 17.888634 -0.718750
+ L 10223889 0.053333 17.888634 0.000000 17.388634 -0.718750
+
+ L 10223889 0.053333 17.388634 -0.718750 17.888634 -1.368614
+ L 10223889 0.053333 17.888634 -0.718750 17.388634 -1.368614
+
+ L 10223889 0.053333 17.888634 -1.368614 17.888634 1.368614
+END
+TURNOUT HO "Central Valley 72' Plate Girder Bridge 9.92in 1903"
+ P "P0" 1
+ E 9.919633 0.000000 90.000000
+ E 0.000000 0.000000 270.000000
+ S 0 0.000000 0.000000 0.000000 9.919633 0.000000
+ L 10223889 0.137773 0.000000 1.156250 9.919633 1.156250
+
+ L 10223889 0.068886 0.250000 1.156250 0.250000 0.625000
+ L 10223889 0.068886 2.133927 1.156250 2.133927 0.625000
+ L 10223889 0.068886 4.017853 1.156250 4.017853 0.625000
+ L 10223889 0.068886 5.901780 1.156250 5.901780 0.625000
+ L 10223889 0.068886 7.785706 1.156250 7.785706 0.625000
+ L 10223889 0.068886 9.669633 1.156250 9.669633 0.625000
+
+ L 10223889 0.068886 0.250000 -0.625000 0.250000 -1.156250
+ L 10223889 0.068886 2.133927 -0.625000 2.133927 -1.156250
+ L 10223889 0.068886 4.017853 -0.625000 4.017853 -1.156250
+ L 10223889 0.068886 5.901780 -0.625000 5.901780 -1.156250
+ L 10223889 0.068886 7.785706 -0.625000 7.785706 -1.156250
+ L 10223889 0.068886 9.669633 -0.625000 9.669633 -1.156250
+
+ L 10223889 0.137773 0.000000 -1.156250 9.919633 -1.156250
+END
+TURNOUT HO "Central Valley 72' Plate Girder Dbl Track Bridge 9.92in 1904"
+ P "P0" 1 0 2
+ E 9.919633 1.156250 90.000000
+ E 0.000000 1.156250 270.000000
+ E 9.919633 -1.156250 90.000000
+ E 0.000000 -1.156250 270.000000
+ S 0 0.000000 0.000000 1.156250 9.919633 1.156250
+ S 0 0.000000 0.000000 -1.156250 9.919633 -1.156250
+ L 10223889 0.137773 0.000000 2.312500 9.919633 2.312500
+
+ L 10223889 0.068886 0.250000 2.312500 0.250000 1.781250
+ L 10223889 0.068886 2.133927 2.312500 2.133927 1.781250
+ L 10223889 0.068886 4.017853 2.312500 4.017853 1.781250
+ L 10223889 0.068886 5.901780 2.312500 5.901780 1.781250
+ L 10223889 0.068886 7.785706 2.312500 7.785706 1.781250
+ L 10223889 0.068886 9.669633 2.312500 9.669633 1.781250
+
+ L 10223889 0.068886 0.250000 0.53125 0.250000 0.000000
+ L 10223889 0.068886 2.133927 0.53125 2.133927 0.000000
+ L 10223889 0.068886 4.017853 0.53125 4.017853 0.000000
+ L 10223889 0.068886 5.901780 0.53125 5.901780 0.000000
+ L 10223889 0.068886 7.785706 0.53125 7.785706 0.000000
+ L 10223889 0.068886 9.669633 0.53125 9.669633 0.000000
+
+ L 10223889 0.137773 0.000000 0.000000 9.919633 0.000000
+
+ L 10223889 0.068886 0.250000 0.000000 0.250000 -0.53125
+ L 10223889 0.068886 2.133927 0.000000 2.133927 -0.53125
+ L 10223889 0.068886 4.017853 0.000000 4.017853 -0.53125
+ L 10223889 0.068886 5.901780 0.000000 5.901780 -0.53125
+ L 10223889 0.068886 7.785706 0.000000 7.785706 -0.53125
+ L 10223889 0.068886 9.669633 0.000000 9.669633 -0.53125
+
+ L 10223889 0.068886 0.250000 -1.781250 0.250000 -2.312500
+ L 10223889 0.068886 2.133927 -1.781250 2.133927 -2.312500
+ L 10223889 0.068886 4.017853 -1.781250 4.017853 -2.312500
+ L 10223889 0.068886 5.901780 -1.781250 5.901780 -2.312500
+ L 10223889 0.068886 7.785706 -1.781250 7.785706 -2.312500
+ L 10223889 0.068886 9.669633 -1.781250 9.669633 -2.312500
+
+ L 10223889 0.137773 0.000000 -2.312500 9.919633 -2.312500
+END
diff --git a/app/lib/params/HO-DapolHOOO.xtp b/app/lib/params/HO-DapolHOOO.xtp
index 00b4fd9..f5f1e07 100644
--- a/app/lib/params/HO-DapolHOOO.xtp
+++ b/app/lib/params/HO-DapolHOOO.xtp
@@ -1,5 +1,5 @@
-CONTENTS Ratio kits OO/HO
-STRUCTURE HO "Dapol Xing Keepers House 1"
+CONTENTS Dapol kits OO/HO
+STRUCTURE OO "Dapol Xing Keepers House 1"
F3 12632256 0.000000 4
0.039370 3.818898 0
3.897638 3.818898 0
@@ -27,7 +27,7 @@ STRUCTURE HO "Dapol Xing Keepers House 1"
A3 0 0.031250 0.078740 1.802904 1.802904 0 0.000000 360.000000
A3 0 0.031250 0.078740 2.098179 1.802904 0 0.000000 360.000000
END
-STRUCTURE HO "Dapol shop 2"
+STRUCTURE OO "Dapol shop 2"
F3 12699578 0.000000 8
0.255906 1.968504 0
3.346457 1.988189 0
@@ -79,7 +79,7 @@ STRUCTURE HO "Dapol shop 2"
L3 0 0.062500 3.574557 0.031250 0 0.031250 0.031250 0
L3 0 0.062500 0.031250 0.031250 0 0.031250 0.621801 0
END
-STRUCTURE HO "Dapol House 3"
+STRUCTURE OO "Dapol House 3"
F3 8487804 0.000000 4
0.059055 2.755906 0
3.543307 2.755906 0
diff --git a/app/lib/params/HO-EndoRailwayTrackSystem.xtp b/app/lib/params/HO-EndoRailwayTrackSystem.xtp
new file mode 100644
index 0000000..e859a8a
--- /dev/null
+++ b/app/lib/params/HO-EndoRailwayTrackSystem.xtp
@@ -0,0 +1,228 @@
+CONTENTS Endo Railway HO Track System
+### http://www.mr-endo.com ####
+SUBCONTENTS Endo Railway Track System - Curve Track
+TURNOUT HO "ENDO Curve Track R1085mm 10d H1104/1154"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.417642 0.648959 80.000000
+ C 0 0.000000 -42.716535 0.000057 42.716535 170.000076 10.000000
+ A3 11579568 0.040000 43.602362 0.000057 42.716535 0 170.000076 10.000000
+ A3 11579568 0.040000 41.830709 0.000057 42.716535 0 170.000076 10.000000
+ END
+TURNOUT HO "ENDO Curve Track R805mm 18d H1103"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.793641 1.551159 72.000000
+ C 0 0.000000 -31.692913 0.000042 31.692913 162.000076 18.000000
+ A3 11579568 0.040000 32.578740 0.000042 31.692913 0 162.000076 18.000000
+ A3 11579568 0.040000 30.807087 0.000042 31.692913 0 162.000076 18.000000
+ END
+TURNOUT HO "ENDO Curve Track R750mm 18d H1102"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.124510 1.445179 72.000000
+ C 0 0.000000 -29.527559 0.000039 29.527559 162.000076 18.000000
+ A3 11579568 0.040000 30.413386 0.000039 29.527559 0 162.000076 18.000000
+ A3 11579568 0.040000 28.641732 0.000039 29.527559 0 162.000076 18.000000
+ END
+TURNOUT HO "ENDO Curve Track R600mm 22.5d H1101"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.039759 1.798118 67.500000
+ C 0 0.000000 -23.622047 0.000031 23.622047 157.500076 22.500000
+ A3 11579568 0.040000 24.507874 0.000031 23.622047 0 157.500076 22.500000
+ A3 11579568 0.040000 22.736220 0.000031 23.622047 0 157.500076 22.500000
+ END
+
+
+SUBCONTENTS Endo Railway Track System - Misc Track
+TURNOUT HO "ENDO Str. LED Direction Ind. Track 250mm H1051"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.842520 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 9.842520 0.000000
+ L3 11579568 0.040000 -0.000000 -0.885827 0 9.842520 -0.885827 0
+ L3 11579568 0.040000 0.000000 0.885827 0 9.842520 0.885827 0
+ END
+TURNOUT HO "ENDO Str. Extendable Track 250-275mm H1054"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.842520 0.000000 90.000000
+ X adjustable 9.842520 10.826772
+ S 0 0.000000 0.000000 0.000000 9.842520 0.000000
+ L3 11579568 0.040000 -0.000000 -0.885827 0 9.842520 -0.885827 0
+ L3 11579568 0.040000 0.000000 0.885827 0 9.842520 0.885827 0
+ END
+##Following has (2-20mm, 2-25mm, 3-35mm track bed pieces and 2 250mm rails)
+TURNOUT HO "ENDO Str. Trimmable Track 20-195mm H1053"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.677165 0.000000 90.000000
+ X adjustable 0.787402 7.677165
+ S 0 0.000000 0.000000 0.000000 7.677165 0.000000
+ L3 11579568 0.040000 -0.000000 -0.885827 0 7.677165 -0.885827 0
+ L3 11579568 0.040000 0.000000 0.885827 0 7.677165 0.885827 0
+ END
+
+
+SUBCONTENTS Endo Railway Track System - Straight Track
+TURNOUT HO "ENDO Str. Track 250mm H1001"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.842520 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 9.842520 0.000000
+ L3 11579568 0.040000 -0.000000 -0.885827 0 9.842520 -0.885827 0
+ L3 11579568 0.040000 0.000000 0.885827 0 9.842520 0.885827 0
+ END
+TURNOUT HO "ENDO Str. Track 186.5mm H1002/1052"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.342520 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 7.342520 0.000000
+ L3 11579568 0.040000 -0.000000 -0.885827 0 7.342517 -0.885827 0
+ L3 11579568 0.040000 0.000000 0.885827 0 7.342520 0.885827 0
+ END
+TURNOUT HO "ENDO Str. Track 42mm(Under Development, NA) H1xxx"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.653543 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 1.653543 0.000000
+ L3 11579568 0.040000 -0.000000 -0.885827 0 1.653541 -0.885827 0
+ L3 11579568 0.040000 0.000000 0.885827 0 1.653543 0.885827 0
+ END
+
+SUBCONTENTS Endo Railway Track System - Turnouts
+TURNOUT HO "ENDO Right Turnout 313.5mm 10d (Manual) H1201"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 12.342520 0.000000 90.000000
+ E 12.267717 -1.515748 100.000000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 12.342520 0.000000
+ C 0 0.000000 34.541301 0.649463 -34.541301 0.000000 10.000000
+ S 0 0.000000 6.647719 -0.524775 12.267717 -1.515748
+ L3 11579568 0.040000 -0.000000 -0.885827 0 0.649598 -0.885827 0
+ L3 11579568 0.040000 0.000000 0.885827 0 12.342520 0.885827 0
+ A3 11579568 0.040000 33.655474 0.649463 -34.541301 0 0.000000 10.000000
+ L3 11579568 0.040000 6.493891 -1.397143 0 12.113889 -2.388116 0
+ END
+TURNOUT HO "ENDO Left Turnout 313.5mm 10d (Manual) H1202"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 12.342520 0.000000 90.000000
+ E 12.267717 1.515748 80.000000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 12.342520 0.000000
+ C 0 0.000000 -34.541301 0.649646 34.541301 170.000000 10.000000
+ S 0 0.000000 6.647719 0.524775 12.267717 1.515748
+ L3 11579568 0.040000 -0.000000 -0.885827 0 12.342518 -0.885827 0
+ L3 11579568 0.040000 0.000000 0.885827 0 0.649600 0.885827 0
+ A3 11579568 0.040000 33.655474 0.649646 34.541301 0 170.000000 10.000000
+ L3 11579568 0.040000 6.493896 1.397144 0 12.113894 2.388117 0
+ END
+TURNOUT HO "ENDO Right Turnout 313.5mm 10d (Electric) H1251"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 12.342520 0.000000 90.000000
+ E 12.267717 -1.515748 100.000000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 12.342520 0.000000
+ C 0 0.000000 34.541301 0.649463 -34.541301 0.000076 10.000152
+ S 0 0.000000 6.647719 -0.524775 12.267717 -1.515748
+ L3 11579568 0.040000 -0.000000 -0.885827 0 0.649598 -0.885827 0
+ L3 11579568 0.040000 0.000000 0.885827 0 12.342520 0.885827 0
+ A3 11579568 0.040000 33.655474 0.649463 -34.541301 0 0.000076 10.000152
+ L3 11579568 0.040000 6.493891 -1.397143 0 12.113889 -2.388116 0
+ END
+TURNOUT HO "ENDO Left Turnout 313.5mm 10d (Electric) H1252"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 12.342520 0.000000 90.000000
+ E 12.267717 1.515748 80.000000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 12.342520 0.000000
+ C 0 0.000000 -34.541301 0.649646 34.541301 169.999924 10.000152
+ S 0 0.000000 6.647719 0.524775 12.267717 1.515748
+ L3 11579568 0.040000 -0.000000 -0.885827 0 12.342518 -0.885827 0
+ L3 11579568 0.040000 0.000000 0.885827 0 0.649600 0.885827 0
+ A3 11579568 0.040000 33.655474 0.649646 34.541301 0 169.999924 10.000152
+ L3 11579568 0.040000 6.493896 1.397144 0 12.113894 2.388117 0
+ END
+TURNOUT HO "ENDO Double Crossover 500mm H1261"
+ P "Normal" 1 2 3 0 4 5 6
+ P "Reverse" 1 7 8 9 6 0 4 10 11 12 3
+ E 0.000000 0.000000 270.000000
+ E 19.685039 0.000000 90.000000
+ E 0.000000 2.165354 270.000000
+ E 19.685039 2.165354 90.000000
+ S 0 0.000000 0.000000 0.000000 1.173525 0.000000
+ S 0 0.000000 1.173525 0.000000 18.511514 0.000000
+ S 0 0.000000 18.511514 0.000000 19.685039 0.000000
+ S 0 0.000000 0.000000 2.165354 1.173525 2.165354
+ S 0 0.000000 1.173525 2.165354 18.511514 2.165354
+ S 0 0.000000 18.511514 2.165354 19.685039 2.165354
+ C 0 0.000000 -35.053200 1.173572 35.053200 166.745727 13.254349
+ S 0 0.000000 9.210315 0.933751 10.474724 1.231603
+ C 0 0.000000 35.053200 18.511559 -32.887835 346.745727 13.254349
+ C 0 0.000000 35.053200 1.173385 -32.887846 0.000076 13.254349
+ S 0 0.000000 9.210315 1.231603 10.474724 0.933751
+ C 0 0.000000 -35.053200 18.511559 35.053189 180.000076 13.254349
+ L3 11579568 0.040000 -0.000000 -0.885827 0 19.685037 -0.885827 0
+ L3 11579568 0.040000 0.000000 0.885827 0 1.173525 0.885827 0
+ L3 11579568 0.040000 18.511514 0.885827 0 19.685039 0.885827 0
+ L3 11579568 0.040000 -0.000000 1.279527 0 1.173523 1.279529 0
+ L3 11579568 0.040000 0.000000 3.051181 0 19.685039 3.051183 0
+ L3 11579568 0.040000 18.511512 1.279527 0 19.685037 1.279529 0
+ A3 11579568 0.040000 34.167373 1.173572 35.053200 0 173.787100 6.212976
+ A3 11579568 0.040000 34.167373 18.511559 -32.887835 0 353.787100 6.212976
+ A3 11579568 0.040000 34.167373 1.173385 -32.887846 0 0.000076 6.212976
+ A3 11579568 0.040000 34.167373 18.511559 35.053189 0 180.000076 6.212976
+ END
+TURNOUT HO "Endo Left Crossover 500mm(Under Development, NA) HXXXX"
+ P "P0" 6 5 0 1 2
+ P "P1" 1 3 4 8 7 5
+ E 0.000000 0.000000 270.000000
+ E 12.342520 0.000000 90.000000
+ E 19.685043 2.165328 90.000000
+ E 7.342523 2.165361 270.000000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 12.342520 0.000000
+ C 0 0.000000 -34.893966 0.649646 34.893966 170.000000 10.000000
+ S 0 0.000000 6.708960 0.530133 9.842520 1.082677
+ S 0 0.000000 19.035443 2.165330 19.685043 2.165328
+ S 0 0.000000 7.342523 2.165361 19.035443 2.165330
+ C 0 0.000000 34.893966 19.035304 -32.728636 350.000000 10.000000
+ S 0 0.000000 9.842520 1.082677 12.976082 1.635213
+ L3 11579568 0.040000 -0.000000 -0.885827 0 12.342518 -0.885827 0
+ L3 11579568 0.040000 0.000000 0.885827 0 0.649600 0.885827 0
+ A3 11579568 0.040000 34.008139 0.649646 34.893966 0 172.500000 7.500000
+ L3 11579568 0.040000 19.685048 3.051155 0 7.342528 3.051172 0
+ L3 11579568 0.040000 19.685041 1.279501 0 19.035441 1.279502 0
+ A3 11579568 0.040000 34.008139 19.035304 -32.728636 0 352.500000 7.500000
+ END
+TURNOUT HO "Endo Right Crossover 500mm(Under Development, NA) HXXXX"
+ P "P0" 6 5 0 1 2
+ P "P1" 1 3 4 8 7 5
+ E 0.000000 0.000000 270.000000
+ E 12.342520 0.000000 90.000000
+ E 19.685037 -2.165380 90.000000
+ E 7.342517 -2.165347 270.000000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 12.342520 0.000000
+ C 0 0.000000 34.893966 0.649461 -34.893966 0.000000 10.000000
+ S 0 0.000000 6.708960 -0.530133 9.842520 -1.082677
+ S 0 0.000000 19.035437 -2.165378 19.685037 -2.165380
+ S 0 0.000000 7.342517 -2.165347 19.035437 -2.165378
+ C 0 0.000000 -34.893966 19.035669 32.728587 180.000000 10.000000
+ S 0 0.000000 9.842520 -1.082677 12.976079 -1.635229
+ L3 11579568 0.040000 -0.000000 -0.885827 0 0.649598 -0.885827 0
+ L3 11579568 0.040000 0.000000 0.885827 0 12.342520 0.885827 0
+ A3 11579568 0.040000 34.008139 0.649461 -34.893966 0 0.000000 7.500000
+ L3 11579568 0.040000 19.685042 -1.279553 0 19.035442 -1.279552 0
+ L3 11579568 0.040000 19.685035 -3.051207 0 7.342515 -3.051190 0
+ A3 11579568 0.040000 34.008139 19.035669 32.728587 0 180.000000 7.500000
+ END
diff --git a/app/lib/params/HO-HornbyHO.xtp b/app/lib/params/HO-HornbyHO.xtp
index d291293..ab384c8 100644
--- a/app/lib/params/HO-HornbyHO.xtp
+++ b/app/lib/params/HO-HornbyHO.xtp
@@ -1,4 +1,105 @@
CONTENTS Hornby Points & Track Sections
+SUBCONTENTS Straight sections
+TURNOUT HO "Hornby Straight R.600"
+ U "Straight Section" "Open Registration" "Hornby" "Straight" "R.600" 6.614173 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.614173 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 6.614173 0.000000
+ END
+TURNOUT HO "Hornby Double Straight R.601"
+ U "Straight Section" "Open Registration" "Hornby" "Double Straight" "R.601" 13.188976 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 13.188976 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 13.188976 0.000000
+ END
+TURNOUT HO "Hornby Short Straight R.610"
+ U "Straight Section" "Open Registration" "Hornby" "Short Straight" "R.610" 1.496063 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.496063 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 1.496063 0.000000
+ END
+TURNOUT HO "Hornby Long straight R.603"
+ U "Straight Section" "Open Registration" "Hornby" "Long straight" "R.603" 26.377953 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 26.377953 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 26.377953 0.000000
+ END
+SUBCONTENTS Curved sections
+TURNOUT HO "Hornby Curve 1st Radius R.604"
+ U "Curved Section" "Open Registration" "Hornby" "Curve 1st Radius" "R.604" 14.606299 22.500000 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.589584 1.111836 67.500000
+ C 0 0.000000 -14.606299 0.000019 14.606299 157.500076 22.500000
+ END
+TURNOUT HO "Hornby Double Curve 1st Radius R.605"
+ U "Curved Section" "Open Registration" "Hornby" "Double Curve 1st Radius" "R.605" 14.606299 45.000000 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.328206 4.278079 45.000000
+ C 0 0.000000 -14.606299 0.000019 14.606299 135.000076 45.000000
+ END
+TURNOUT HO "Hornby Curve 2nd Radius R.606"
+ U "Curved Section" "Open Registration" "Hornby" "Curve 2nd Radius" "R.606" 17.244094 22.500000 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.599024 1.312626 67.500000
+ C 0 0.000000 -17.244094 0.000023 17.244094 157.500076 22.500000
+ END
+TURNOUT HO "Hornby Double Curve 2nd Radius R607"
+ U "Curved Section" "Open Registration" "Hornby" "Double Curve 2nd Radius" "R607" 17.244094 45.000000 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 12.193408 5.050670 45.000000
+ C 0 0.000000 -17.244094 0.000023 17.244094 135.000076 45.000000
+ END
+TURNOUT HO "Hornby Curve 3rd Radius R.608"
+ U "Curved Section" "Open Registration" "Hornby" "Curve 3rd Radius" "R.608" 19.881890 22.500000 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.608464 1.513416 67.500000
+ C 0 0.000000 -19.881890 0.000026 19.881890 157.500076 22.500000
+ END
+TURNOUT HO "Hornby Double Curve 3rd Radius R.609"
+ U "Curved Section" "Open Registration" "Hornby" "Double Curve 3rd Radius" "R.609" 19.881890 45.000000 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 14.058610 5.823261 45.000000
+ C 0 0.000000 -19.881890 0.000026 19.881890 135.000076 45.000000
+ END
+TURNOUT HO "Hornby Curve R.628"
+ U "Curved Section" "Open Registration" "Hornby" "Curve" "R.628" 33.543307 11.250000 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.543969 0.644524 78.750000
+ C 0 0.000000 -33.543307 0.000045 33.543307 168.750076 11.250000
+ END
+TURNOUT HO "Hornby 2nd Radius Half Curve R643"
+ U "Curved Section" "Open Registration" "Hornby" "2nd Radius Half Curve" "R643" 17.244094 11.250000 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.364153 0.331340 78.750000
+ C 0 0.000000 -17.244094 0.000023 17.244094 168.750076 11.250000
+ END
+TURNOUT HO "Hornby 4th Radius Single Curve R8261"
+ U "Curved Section" "" "Hornby" "4th Radius Single Curve" "R8261" 22.519685 22.500000 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 8.617903 1.714206 67.500000
+ C 0 0.000000 -22.519685 0.000030 22.519685 157.500076 22.500000
+ END
+TURNOUT HO "Hornby 4th Radius Double Curve R8262"
+ U "Curved Section" "" "Hornby" "4th Radius Double Curve" "R8262" 22.519685 45.000000 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 15.923811 6.595852 45.000000
+ C 0 0.000000 -22.519685 0.000030 22.519685 135.000076 45.000000
+ END
+SUBCONTENTS Crossings
TURNOUT HO "Hornby Left Hand Diamond Crossing R.614"
U "Crossing" "Open Registration" "Hornby" "Left Hand Diamond Crossing" "R.614" 7.125984 22.500000 6.614173 0.000000 0.000000 0
P "Normal" 1 0 2
@@ -19,13 +120,14 @@ TURNOUT HO "Hornby Right Hand Diamond Crossing R.615"
S 0 0.000000 0.000000 0.000000 6.614173 0.000000
S 0 0.000000 0.015309 1.363493 6.598864 -1.363493
END
-TURNOUT HO "Hornby Curve 1st Radius R.604"
- U "Curved Section" "Open Registration" "Hornby" "Curve 1st Radius" "R.604" 14.606299 22.500000 0.000000 0.000000 0
+TURNOUT HO "Hornby Curve R.628"
+ U "Curved Section" "Open Registration" "Hornby" "Curve" "R.628" 33.543307 11.250000 0.000000 0.000000 0
P "Normal" 1
E 0.000000 0.000000 270.000000
- E 5.589584 1.111836 67.500000
- C 0 0.000000 -14.606299 0.000019 14.606299 157.500076 22.500000
+ E 6.543969 0.644524 78.750000
+ C 0 0.000000 -33.543307 0.000045 33.543307 168.750076 11.250000
END
+SUBCONTENTS Turnouts / Points
TURNOUT HO "Hornby Y Point R632"
U "Wye Turnout" "Open Registration" "Hornby" "Y Point" "R632" 6.614173 11.250000 0.679134 0.679134 11.250000 6.614173 0.000000 0.000000 0
P "Left" 1 2 3
@@ -39,13 +141,6 @@ TURNOUT HO "Hornby Y Point R632"
C 0 0.000000 25.904606 0.648497 -25.904606 0.000076 11.250152
S 0 0.000000 5.702401 -0.497762 6.614173 -0.679134
END
-TURNOUT HO "Hornby 2nd Radius Half Curve R643"
- U "Curved Section" "Open Registration" "Hornby" "2nd Radius Half Curve" "R643" 17.244094 11.250000 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.364153 0.331340 78.750000
- C 0 0.000000 -17.244094 0.000023 17.244094 168.750076 11.250000
- END
TURNOUT HO "Hornby Left Hand Curved Point R.640"
U "Curved Turnout" "Open Registration" "Hornby" "Left Hand Curved Point" "R.640" "Right Hand Curved Point" "R.641" 9.645669 33.750000 2.637795 22.500000 1.318898 9.251969 0.000000 0.000000 0
P "Normal" 1 6 4 5
@@ -73,77 +168,7 @@ TURNOUT HO "Hornby Right Hand Curved Point R.641"
C 0 0.000000 14.065585 3.270024 -14.065585 0.000076 22.500152
S 0 0.000000 8.652776 -1.070691 9.251969 -1.318898
S 0 0.000000 1.598662 0.000000 3.270080 0.000000
- END
-TURNOUT HO "Hornby Double Curve 3rd Radius R.609"
- U "Curved Section" "Open Registration" "Hornby" "Double Curve 3rd Radius" "R.609" 19.881890 45.000000 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 14.058610 5.823261 45.000000
- C 0 0.000000 -19.881890 0.000026 19.881890 135.000076 45.000000
- END
-TURNOUT HO "Hornby Double Curve 2nd Radius R607"
- U "Curved Section" "Open Registration" "Hornby" "Double Curve 2nd Radius" "R607" 17.244094 45.000000 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 12.193408 5.050670 45.000000
- C 0 0.000000 -17.244094 0.000023 17.244094 135.000076 45.000000
- END
-TURNOUT HO "Hornby Double Curve 1st Radius R.605"
- U "Curved Section" "Open Registration" "Hornby" "Double Curve 1st Radius" "R.605" 14.606299 45.000000 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 10.328206 4.278079 45.000000
- C 0 0.000000 -14.606299 0.000019 14.606299 135.000076 45.000000
- END
-TURNOUT HO "Hornby Curve 3rd Radius R.608"
- U "Curved Section" "Open Registration" "Hornby" "Curve 3rd Radius" "R.608" 19.881890 22.500000 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.608464 1.513416 67.500000
- C 0 0.000000 -19.881890 0.000026 19.881890 157.500076 22.500000
- END
-TURNOUT HO "Hornby Curve 2nd Radius R.606"
- U "Curved Section" "Open Registration" "Hornby" "Curve 2nd Radius" "R.606" 17.244094 22.500000 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.599024 1.312626 67.500000
- C 0 0.000000 -17.244094 0.000023 17.244094 157.500076 22.500000
- END
-TURNOUT HO "Hornby Curve R.628"
- U "Curved Section" "Open Registration" "Hornby" "Curve" "R.628" 33.543307 11.250000 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.543969 0.644524 78.750000
- C 0 0.000000 -33.543307 0.000045 33.543307 168.750076 11.250000
- END
-TURNOUT HO "Hornby Straight R.600"
- U "Straight Section" "Open Registration" "Hornby" "Straight" "R.600" 6.614173 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.614173 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 6.614173 0.000000
- END
-TURNOUT HO "Hornby Short Straight R.610"
- U "Straight Section" "Open Registration" "Hornby" "Short Straight" "R.610" 1.496063 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.496063 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 1.496063 0.000000
- END
-TURNOUT HO "Hornby Long straight R.603"
- U "Straight Section" "Open Registration" "Hornby" "Long straight" "R.603" 26.377953 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 26.377953 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 26.377953 0.000000
- END
-TURNOUT HO "Hornby Double Straight R.601"
- U "Straight Section" "Open Registration" "Hornby" "Double Straight" "R.601" 13.188976 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 13.188976 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 13.188976 0.000000
- END
+ END
TURNOUT HO "Hornby Left Hand Point R.612"
U "Regular Turnout" "Open Registration" "Hornby" "Left Hand Point" "R.612" "Right Hand Point" "R.613" 6.614173 22.500000 1.318898 6.614173 0.000000 0.000000 0
P "Normal" 1 2
@@ -192,17 +217,79 @@ TURNOUT HO "Hornby Right Hand Express Point R.623"
C 0 0.000000 27.625934 0.648490 -27.625934 0.000076 11.250152
S 0 0.000000 6.038220 -0.530838 10.000000 -1.318898
END
-TURNOUT HO "Hornby 4th Radius Single Curve R8261"
- U "Curved Section" "" "Hornby" "4th Radius Single Curve" "R8261" 22.519685 22.500000 0.000000 0.000000 0
- P "Normal" 1
+TURNOUT HO "Hornby Left Hand Point R.8072"
+ U "Regular Turnout" "Open Registration" "Hornby" "Left Hand Point" "R.8072" "Right Hand Point" "R.8073" 6.614173 22.500000 1.318898 6.614173 0.000000 0.000000 0
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
E 0.000000 0.000000 270.000000
- E 8.617903 1.714206 67.500000
- C 0 0.000000 -22.519685 0.000030 22.519685 157.500076 22.500000
+ E 6.614173 0.000000 90.000000
+ E 6.614173 1.318898 67.500000
+ S 0 0.000000 0.000000 0.000000 0.648600 0.000000
+ S 0 0.000000 0.648600 0.000000 6.614173 0.000000
+ C 0 0.000000 -13.983514 0.648619 13.983514 157.499924 22.500152
+ S 0 0.000000 5.999889 1.064444 6.614173 1.318898
END
-TURNOUT HO "Hornby 4th Radius Double Curve R8262"
- U "Curved Section" "" "Hornby" "4th Radius Double Curve" "R8262" 22.519685 45.000000 0.000000 0.000000 0
- P "Normal" 1
+TURNOUT HO "Hornby Right Hand Point R.8073"
+ U "Regular Turnout" "Open Registration" "Hornby" "Left Hand Point" "R.8072" "Right Hand Point" "R.8073" 6.614173 22.500000 1.318898 6.614173 0.000000 0.000000 0
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
E 0.000000 0.000000 270.000000
- E 15.923811 6.595852 45.000000
- C 0 0.000000 -22.519685 0.000030 22.519685 135.000076 45.000000
+ E 6.614173 0.000000 90.000000
+ E 6.614173 -1.318898 112.500000
+ S 0 0.000000 0.000000 0.000000 0.648600 0.000000
+ S 0 0.000000 0.648600 0.000000 6.614173 0.000000
+ C 0 0.000000 13.983514 0.648544 -13.983514 0.000076 22.500152
+ S 0 0.000000 5.999889 -1.064444 6.614173 -1.318898
END
+TURNOUT HO "Hornby Left Hand Express Point R.8077"
+ U "Regular Turnout" "Open Registration" "Hornby" "Left Hand Express Point" "R.8077" "Right Hand Express Point" "R.8078" 9.645500 11.250000 1.318898 9.645500 0.000000 0.000000 0
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 9.645500 0.000000 90.000000
+ E 9.645500 1.318898 78.750000
+ S 0 0.000000 0.000000 0.000000 0.648600 0.000000
+ S 0 0.000000 0.648600 0.000000 9.645500 0.000000
+ C 0 0.000000 -27.625934 0.648637 27.625934 168.749924 11.250152
+ S 0 0.000000 6.038220 0.530838 9.645500 1.318898
+ END
+TURNOUT HO "Hornby Right Hand Express Point R.8078"
+ U "Regular Turnout" "Open Registration" "Hornby" "Left Hand Express Point" "R.8077" "Right Hand Express Point" "R.8078" 9.645500 11.250000 1.318898 9.645500 0.000000 0.000000 0
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 9.645500 0.000000 90.000000
+ E 9.645500 -1.318898 101.250000
+ S 0 0.000000 0.000000 0.000000 0.648600 0.000000
+ S 0 0.000000 0.648600 0.000000 9.645500 0.000000
+ C 0 0.000000 27.625934 0.648490 -27.625934 0.000076 11.250152
+ S 0 0.000000 6.038220 -0.530838 9.645500 -1.318898
+ END
+TURNOUT HO "Hornby Left Hand Curved Point R.8074"
+ U "Curved Turnout" "Open Registration" "Hornby" "Left Hand Curved Point" "R.8074" "Right Hand Curved Point" "R.8075" 9.645669 33.750000 2.637795 22.500000 1.318898 9.251969 0.000000 0.000000 0
+ P "Normal" 1 6 4 5
+ P "Reverse" 1 2 3
+ E 0.000000 0.000000 270.000000
+ E 9.251969 1.318898 67.500000
+ E 9.645669 2.637795 56.250000
+ S 0 0.000000 0.000000 0.000000 1.598662 0.000000
+ C 0 0.000000 -13.513549 1.598679 13.513549 146.249924 33.750152
+ S 0 0.000000 9.106411 2.277460 9.645669 2.637795
+ C 0 0.000000 -14.065585 3.270099 14.065585 157.499924 22.500152
+ S 0 0.000000 8.652776 1.070691 9.251969 1.318898
+ S 0 0.000000 1.598662 0.000000 3.270080 0.000000
+ END
+TURNOUT HO "Hornby Right Hand Curved Point R.8075"
+ U "Curved Turnout" "Open Registration" "Hornby" "Left Hand Curved Point" "R.8074" "Right Hand Curved Point" "R.8075" 9.645669 33.750000 2.637795 22.500000 1.318898 9.251969 0.000000 0.000000 0
+ P "Normal" 1 6 4 5
+ P "Reverse" 1 2 3
+ E 0.000000 0.000000 270.000000
+ E 9.251969 -1.318898 112.500000
+ E 9.645669 -2.637795 123.750000
+ S 0 0.000000 0.000000 0.000000 1.598662 0.000000
+ C 0 0.000000 13.513549 1.598608 -13.513549 0.000076 33.750152
+ S 0 0.000000 9.106411 -2.277460 9.645669 -2.637795
+ C 0 0.000000 14.065585 3.270024 -14.065585 0.000076 22.500152
+ S 0 0.000000 8.652776 -1.070691 9.251969 -1.318898
+ S 0 0.000000 1.598662 0.000000 3.270080 0.000000
+ END
diff --git a/app/lib/params/mrklnhoc.xtp b/app/lib/params/HO-Marklin C-Track.xtp
index b54d17c..9f8be72 100644
--- a/app/lib/params/mrklnhoc.xtp
+++ b/app/lib/params/HO-Marklin C-Track.xtp
@@ -1,495 +1,569 @@
-CONTENTS Märklin C-Track HO-Scale
-SUBCONTENTS Märklin C-Track Straight Track
-TURNOUT HO "Märklin C-Track Straight 64.3mm 24064"
- U "Straight Section" "XtrkCad" "Märklin C-Track" "Straight 64.3mm" "24064" 2.531496
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.531496 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 2.531496 0.000000
- L 8421376 0.030000 0.000000 0.787400 2.531496 0.787400
- L 8421376 0.030000 0.000000 -0.787400 2.531496 -0.787400
- END
-TURNOUT HO "Märklin C-Track Straight 70.8mm 24071"
- U "Straight Section" "XtrkCad" "Märklin C-Track" "Straight 70.8mm" "24071" 2.787401
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.787401 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 2.787401 0.000000
- L 8421376 0.030000 0.000000 0.787400 2.787401 0.787400
- L 8421376 0.030000 0.000000 -0.787400 2.787401 -0.787400
- END
-TURNOUT HO "Märklin C-Track Straight 77.5mm 24077"
- U "Straight Section" "XtrkCad" "Märklin C-Track" "Straight 77.5mm" "24077" 3.051181
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.051181 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 3.051181 0.000000
- L 8421376 0.030000 0.000000 0.787400 3.051181 0.787400
- L 8421376 0.030000 0.000000 -0.787400 3.051181 -0.787400
- END
-TURNOUT HO "Märklin C-Track Straight 94.2mm 24094"
- U "Straight Section" "XtrkCad" "Märklin C-Track" "Straight 94.2mm" "24094" 3.708661
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.708661 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 3.708661 0.000000
- L 8421376 0.030000 0.000000 0.787400 3.708661 0.787400
- L 8421376 0.030000 0.000000 -0.787400 3.708661 -0.787400
- END
-TURNOUT HO "Märklin C-Track Straight 171.7mm 24172"
- U "Straight Section" "XtrkCad" "Märklin C-Track" "Straight 171.7mm" "24172" 6.759843
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.759843 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 6.759843 0.000000
- L 8421376 0.030000 0.000000 0.787400 6.759843 0.787400
- L 8421376 0.030000 0.000000 -0.787400 6.759843 -0.787400
- END
-TURNOUT HO "Märklin C-Track Straight 188.3mm 24188"
- U "Straight Section" "XtrkCad" "Märklin C-Track" "Straight 188.3mm" "24188" 7.413386
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.413386 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 7.413386 0.000000
- L 8421376 0.030000 0.000000 0.787400 7.413386 0.787400
- L 8421376 0.030000 0.000000 -0.787400 7.413386 -0.787400
- END
-TURNOUT HO "Märklin C-Track Straight 229.0mm 24229"
- U "Straight Section" "XtrkCad" "Märklin C-Track" "Straight 229.0mm" "24229" 9.015748
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.015748 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 9.015748 0.000000
- L 8421376 0.030000 0.000000 0.787400 9.015748 0.787400
- L 8421376 0.030000 0.000000 -0.787400 9.015748 -0.787400
- END
-TURNOUT HO "Märklin C-Track Straight 236.0mm 24236"
- U "Straight Section" "XtrkCad" "Märklin C-Track" "Straight 236.0mm" "24236" 9.291338
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.291338 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 9.291338 0.000000
- L 8421376 0.030000 0.000000 0.787400 9.291338 0.787400
- L 8421376 0.030000 0.000000 -0.787400 9.291338 -0.787400
- END
-TURNOUT HO "Märklin C-Track Straight 360.0mm 24360"
- U "Straight Section" "XtrkCad" "Märklin C-Track" "Straight 360.0mm" "24360" 14.173228
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 14.173228 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 14.173228 0.000000
- L 8421376 0.030000 0.000000 0.787400 14.173228 0.787400
- L 8421376 0.030000 0.000000 -0.787400 14.173228 -0.787400
- END
-
-SUBCONTENTS Märklin C-Track Curve Track
-TURNOUT HO "Märklin C-Track Curved R1=360mm 30° 24130"
- U "Curved Section" "XtrkCad" "Märklin C-Track" "Curved R1=360mm 30°" "24130" 14.173228 30.000000
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.086614 1.898853 60.000000
- C 0 0.000000 -14.173228 0.000000 14.173228 150.000000 30.000000
- A 8421376 0.030000 -13.385828 0.000000 14.173228 150.000000 30.000000
- A 8421376 0.030000 -14.960628 0.000000 14.173228 150.000000 30.000000
- END
-TURNOUT HO "Märklin C-Track Curved R1=360mm 15° 24115"
- U "Curved Section" "XtrkCad" "Märklin C-Track" "Curved R1=360mm 15°" "24115" 14.173228 15.000000
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.668301 0.482941 75.000000
- C 0 0.000000 -14.173228 0.000000 14.173228 165.000000 15.000000
- A 8421376 0.030000 -13.385828 0.000000 14.173228 165.000000 15.000000
- A 8421376 0.030000 -14.960628 0.000000 14.173228 165.000000 15.000000
- END
-TURNOUT HO "Märklin C-Track Curved R1=360mm 7.5° 24107"
- U "Curved Section" "XtrkCad" "Märklin C-Track" "Curved R1=360mm 7.5°" "24107" 14.173228 7.500000
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.849976 0.121254 82.500000
- C 0 0.000000 -14.173228 0.000000 14.173228 172.500000 7.500000
- A 8421376 0.030000 -13.385828 0.000000 14.173228 172.500000 7.500000
- A 8421376 0.030000 -14.960628 0.000000 14.173228 172.500000 7.500000
- END
-TURNOUT HO "Märklin C-Track Curved R2=437.5mm 30° 24230"
- U "Curved Section" "XtrkCad" "Märklin C-Track" "Curved R2=437.5mm 30°" "24230" 17.224409 30.000000
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 8.612205 2.307633 60.000000
- C 0 0.000000 -17.224409 0.000000 17.224409 150.000000 30.000000
- A 8421376 0.030000 -16.437009 0.000000 17.224409 150.000000 30.000000
- A 8421376 0.030000 -18.011809 0.000000 17.224409 150.000000 30.000000
- END
-TURNOUT HO "Märklin C-Track Curved R2=437.5mm 24.3° 24224"
- U "Curved Section" "XtrkCad" "Märklin C-Track" "Curved R2=437.5mm 24.3°" "24224" 17.224409 24.300000
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.088092 1.526026 65.700000
- C 0 0.000000 -17.224409 0.000000 17.224409 155.700000 24.300000
- A 8421376 0.030000 -16.437009 0.000000 17.224409 155.700000 24.300000
- A 8421376 0.030000 -18.011809 0.000000 17.224409 155.700000 24.300000
- END
-TURNOUT HO "Märklin C-Track Curved R2=437.5mm 15° 24215"
- U "Curved Section" "XtrkCad" "Märklin C-Track" "Curved R2=437.5mm 15°" "24215" 17.224409 15.000000
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.458005 0.586908 75.000000
- C 0 0.000000 -17.224409 0.000000 17.224409 165.000000 15.000000
- A 8421376 0.030000 -16.437009 0.000000 17.224409 165.000000 15.000000
- A 8421376 0.030000 -18.011809 0.000000 17.224409 165.000000 15.000000
- END
-TURNOUT HO "Märklin C-Track Curved R2=437.5mm 7.5° 24207"
- U "Curved Section" "" "Märklin C-Track" "Curved R2=437.5mm 7.5°" "24207" 17.224409 7.500000
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.248235 0.147357 82.500000
- C 0 0.000000 -17.224409 0.000023 17.224409 172.500076 7.500000
- A 8421376 0.030000 -16.437009 0.000000 17.224409 172.500076 7.500000
- A 8421376 0.030000 -18.011809 0.000000 17.224409 172.500076 7.500000
- END
-TURNOUT HO "Märklin C-Track Curved R2=437.5mm 5.7° 24206"
- U "Curved Section" "XtrkCad" "Märklin C-Track" "Curved R2=437.5mm 5.7°" "24206" 17.224409 5.700000
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.710724 0.085165 84.300000
- C 0 0.000000 -17.224409 0.000000 17.224409 174.300000 5.700000
- A 8421376 0.030000 -16.437009 0.000000 17.224409 174.300000 5.700000
- A 8421376 0.030000 -18.011809 0.000000 17.224409 174.300000 5.700000
- END
-TURNOUT HO "Märklin C-Track Curved R3=515mm 30° 24330"
- U "Curved Section" "XtrkCad" "Märklin C-Track" "Curved R3=515mm 30°" "24330" 20.275591 30.000000
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 10.137788 2.716410 60.000000
- C 0 0.000000 -20.275591 0.000000 20.275591 150.000000 30.000000
- A 8421376 0.030000 -19.488191 0.000000 20.275591 150.000000 30.000000
- A 8421376 0.030000 -21.062991 0.000000 20.275591 150.000000 30.000000
- END
-TURNOUT HO "Märklin C-Track Curved R4=579.3mm 30° 24430"
- U "Curved Section" "XtrkCad" "Märklin C-Track" "Curved R4=579.3mm 30°" "24430" 22.812750 30.000000
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 11.406375 3.056329 60.000000
- C 0 0.000000 -22.812750 0.000000 22.812750 150.000000 30.000000
- A 8421376 0.030000 -22.025350 0.000000 22.812750 150.000000 30.000000
- A 8421376 0.030000 -23.600150 0.000000 22.812750 150.000000 30.000000
- END
-TURNOUT HO "Märklin C-Track Curved R5=643.6mm 30° 24530"
- U "Curved Section" "XtrkCad" "Märklin C-Track" "Curved R5=643.6mm 30°" "24530" 25.312500 30.000000
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 12.656250 3.391232 60.000000
- C 0 0.000000 -25.312500 0.000000 25.312500 150.000000 30.000000
- A 8421376 0.030000 -24.525100 0.000000 25.312500 150.000000 30.000000
- A 8421376 0.030000 -26.099900 0.000000 25.312500 150.000000 30.000000
- END
-TURNOUT HO "Märklin C-Track Curved R=1114.6mm 12.1° 24912"
- U "Curved Section" "XtrkCad" "Märklin C-Track" "Curved R=1114.6mm 12.1°" "24912" 43.875000 12.100000
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.197014 0.974760 77.900000
- C 0 0.000000 -43.875000 0.000000 43.875000 167.900000 12.100000
- A 8421376 0.030000 -43.087600 0.000000 43.875000 167.900000 12.100000
- A 8421376 0.030000 -44.662400 0.000000 43.875000 167.900000 12.100000
- END
-
-
-SUBCONTENTS Märklin C-Track Turnouts
-TURNOUT HO "Märklin C-Track Left Turnout 188.3mm R2=437.5mm 24.3° 24611"
- U "Regular Turnout" "XtrkCad" "Märklin C-Track" "Left Turnout" "24611" "Right Turnout" "24612" 7.088092 24.300000 1.526026 7.413386
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.000000 0.000000 270.000000
- E 7.413386 0.000000 90.000000
- E 7.088092 1.526026 65.700000
- S 0 0.000000 0.000000 0.000000 0.648601 0.000000
- S 0 0.000000 0.648601 0.000000 7.413386 0.000000
- C 0 0.000000 -14.211787 0.648601 14.211787 155.700000 24.300000
- S 0 0.000000 6.496956 1.259118 7.088092 1.526026
- L 8421376 0.030000 0.000000 -0.787400 7.413386 -0.787400
- L 8421376 0.030000 0.000000 0.787400 0.648601 0.787400
- A 8421376 0.030000 -13.424387 0.648601 14.211787 155.700000 24.300000
- L 8421376 0.030000 6.180000 1.980000 6.760000 2.240000
- END
-TURNOUT HO "Märklin C-Track Right Turnout 188.3mm R2=437.5mm 24.3° 24612"
- U "Regular Turnout" "XtrkCad" "Märklin C-Track" "Left Turnout" "24611" "Right Turnout" "24612" 7.088092 24.300000 1.526026 7.413386
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.000000 0.000000 270.000000
- E 7.413386 0.000000 90.000000
- E 7.088092 -1.526026 114.300000
- S 0 0.000000 0.000000 0.000000 0.648601 0.000000
- S 0 0.000000 0.648601 0.000000 7.413386 0.000000
- C 0 0.000000 14.211787 0.648601 -14.211787 0.000000 24.300000
- S 0 0.000000 6.496956 -1.259118 7.088092 -1.526026
- L 8421376 0.030000 0.000000 0.787400 7.413386 0.787400
- L 8421376 0.030000 0.000000 -0.787400 0.648601 -0.787400
- A 8421376 0.030000 13.424387 0.648601 -14.211787 0.000000 24.300000
- L 8421376 0.030000 6.180000 -1.980000 6.760000 -2.240000
- END
-TURNOUT HO "Märklin C-Track Curved Left Turnout R1=360mm 30° 24671"
- U "Curved Turnout" "XtrkCad" "Märklin C-Track" "Curved Left Turnout 30°" "24671" "Curved Right Turnout 30°" "24672" 7.086614 30.000000 1.898853 30.000000 1.898853 10.137795
- P "Normal" 1 6 4 5
- P "Reverse" 1 2 3
- E -0.054784 -2944.110350 270.000000
- E 10.083011 -2942.211497 60.000000
- E 7.031830 -2942.211497 60.000000
- S 0 0.000000 -0.054784 -2944.110350 0.593847 -2944.110350
- C 0 0.000000 -11.752571 0.593863 -2932.357779 150.000000 30.000000
- S 0 0.000000 6.470155 -2942.535791 7.031830 -2942.211497
- C 0 0.000000 -11.752541 3.645059 -2932.357809 150.000000 30.000000
- S 0 0.000000 9.521337 -2942.535795 10.083011 -2942.211497
- S 0 0.000000 0.593847 -2944.110350 3.645044 -2944.110350
- A 8421376 0.030000 -13.424387 -0.054677 -2929.898563 150.000000 30.000000
- L 8421376 0.030000 -0.054570 -2944.897750 2.996397 -2944.897750
- A 8421376 0.030000 15.047713 2.996397 -2929.822762 150.000000 30.000000
- L 32768 0.010417 7.413553 -2942.891285 9.697017 -2941.513332
- END
-TURNOUT HO "Märklin C-Track Curved Right Turnout R1=360mm 30° 24672"
- U "Curved Turnout" "XtrkCad" "Märklin C-Track" "Curved Right Turnout 30°" "24672" "Curved Left Turnout 30°" "24671" 7.086614 30.000000 1.898853 30.000000 1.898853 10.137795
- P "Normal" 1 6 4 5
- P "Reverse" 1 2 3
- E 0.000000 -100.160054 270.000000
- E 10.137795 -102.058907 120.000000
- E 7.086614 -102.058907 120.000000
- S 0 0.000000 0.000000 -100.160054 0.648631 -100.160054
- C 0 0.000000 11.752571 0.648585 -111.912625 0.000076 30.000152
- S 0 0.000000 6.524939 -101.734613 7.086614 -102.058907
- C 0 0.000000 11.752541 3.699781 -111.912595 0.000076 30.000152
- S 0 0.000000 9.576121 -101.734609 10.137795 -102.058907
- S 0 0.000000 0.621239 -100.160054 3.672436 -100.160054
- L 8421376 0.030000 0.000000 -99.372654 3.051181 -99.372654
- A 8421376 0.030000 -13.385828 0.000000 -114.333282 0.000000 30.000000
- L 8421376 0.030000 7.440945 -101.365353 9.763780 -102.782676
- A 8421376 0.030000 15.047562 3.051181 -114.444412 0.000000 29.636472
- END
-TURNOUT HO "Märklin C-Track 3-way Turnout 188.3mm R2=437.5mm 24.3° 24630"
- U "3-way Turnout" "XtrkCad" "Märklin C-Track" "3-way Turnout" "24630" 7.079991 24.300000 1.524282 7.413386 1.524282 24.300000 7.079991
- P "Left" 1 2 3
- P "Normal" 1 6
- P "Right" 1 4 5
- E 0.000000 0.000000 270.000000
- E 7.079991 1.524282 65.700000
- E 7.079991 -1.524282 114.300000
- E 7.413386 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 0.648639 0.000000
- C 0 0.000000 -14.192025 0.648658 14.192025 155.700000 24.300000
- S 0 0.000000 6.488891 1.257380 7.079991 1.524282
- C 0 0.000000 14.192025 0.648583 -14.192025 0.000000 24.300000
- S 0 0.000000 6.488891 -1.257380 7.079991 -1.524282
- S 0 0.000000 0.648639 0.000000 7.413386 0.000000
- A 8421376 0.030000 -16.437009 0.000000 17.224409 155.700000 24.300000
- A 8421376 0.030000 16.437009 0.000000 -17.224409 0.00000000 24.300000
- END
-TURNOUT HO "Märklin C-Track Double Slipswitch 188.3mm R2=437.5mm 24.3° 24624"
- U "Double Slipswitch" "XtrkCad" "Märklin C-Track" "Double Slip" "24624" 7.413386 24.300000 7.413386
- P "Normal" 1 2 3 0 4 5 6
- P "Reverse" 1 7 6 0 4 8 3
- E 0.000000 0.000000 270.000000
- E 7.413386 0.000000 90.000000
- E 0.328401 1.525357 294.300000
- E 7.084985 -1.525357 114.300000
- S 0 0.000000 0.000000 0.000000 1.297200 0.000000
- S 0 0.000000 1.297200 0.000000 6.116186 0.000000
- S 0 0.000000 6.116186 0.000000 7.413386 0.000000
- S 0 0.000000 0.328401 1.525357 1.510673 0.991541
- S 0 0.000000 1.510673 0.991541 5.902713 -0.991541
- S 0 0.000000 5.902713 -0.991541 7.084985 -1.525357
- C 0 0.000000 11.191621 1.297200 -11.191621 0.000000 24.300000
- C 0 0.000000 -11.191621 6.116186 11.191621 180.000000 24.300000
- L 8421376 0.030000 0.000000 -0.787400 0.648601 -0.787400
- A 8421376 0.030000 13.424387 0.648601 -14.211787 0.000000 24.300000
- L 8421376 0.030000 6.180000 -1.980000 6.760000 -2.240000
- L 8421376 0.030000 7.413386 0.787400 6.764785 0.787400
- A 8421376 0.030000 13.424387 6.764785 14.211787 180.000000 24.300000
- L 8421376 0.030000 1.233386 1.980000 0.653386 2.240000
- END
-TURNOUT HO "Märklin C-Track Left Turnout 236.1mm R=1114.6mm 12.1° 24711"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 9.312500 0.000000 90.000000
- E 9.167014 0.974760 77.900000
- S 0 0.000000 0.000000 0.000000 9.312500 0.000000
- C 0 0.000000 -43.875000 0.0 43.875000 167.900000 12.100000
- L 8421376 0.030000 0.000000 -0.787400 9.312500 -0.787400
- A 8421376 0.030000 -43.087600 0.000000 43.875000 167.900000 12.100000
- END
-TURNOUT HO "Märklin C-Track Right Turnout 236.1mm R=1114.6mm 12.1° 24712"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 9.312500 0.000000 90.000000
- E 9.167014 -0.974760 102.100000
- S 0 0.000000 0.000000 0.000000 9.312500 0.000000
- C 0 0.000000 43.875000 0.000000 -43.875000 0.000000 12.100000
- L 8421376 0.030000 0.000000 0.787400 9.312500 0.787400
- A 8421376 0.030000 43.087600 0.000000 -43.875000 0.000000 12.100000
- END
-
-SUBCONTENTS Märklin C-Track Crossings
-TURNOUT HO "Märklin C-Track Double Crossing 188.3mm 24.3° 24640"
- U "Crossing" "XtrkCad" "Märklin C-Track" "Double Crossing 188.3mm 24.3°" "24640" 7.413386 24.300000 7.413386
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.413386 0.000000 90.000000
- E 0.328401 1.525357 294.300000
- E 7.084985 -1.525357 114.300000
- S 0 0.000000 0.000000 0.000000 7.413386 0.000000
- S 0 0.000000 0.328401 1.525357 7.084985 -1.525357
- L 8421376 0.030000 0.000000 -0.787400 3.513386 -0.787400
- L 8421376 0.030000 3.900000 0.787400 7.413386 0.787400
- L 8421376 0.030000 0.653386 2.240000 3.900000 0.787400
- L 8421376 0.030000 6.760000 -2.240000 3.513386 -0.787400
- END
-TURNOUT HO "Märklin C-Track Double Crossing 103.3mm 48.6° 24649"
- U "Crossing" "XtrkCad" "Märklin C-Track" "Double Crossing 103.3mm 48.6°" "24649" 4.066929 48.600000 4.066929
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 4.066929 0.000000 90.000000
- E 0.688707 1.525322 318.600000
- E 3.378222 -1.525322 138.600000
- S 0 0.000000 0.000000 0.000000 4.066929 0.000000
- S 0 0.000000 0.688707 1.525322 3.378222 -1.525322
- L 8421376 0.030000 0.000000 -0.787400 1.653543 -0.787400
- L 8421376 0.030000 1.653543 -0.787400 2.785000 -2.050000
- L 8421376 0.030000 4.066929 0.787400 2.401575 0.787400
- L 8421376 0.030000 2.401575 0.787400 1.300000 2.050000
- END
-TURNOUT HO "Märklin C-Track Wide Angle Crossing 236.1mm 12.1° 24740"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 9.312500 0.000000 90.000000
- E 0.103447 -0.976036 257.900000
- E 9.209053 0.976036 77.900000
- S 0 0.000000 0.000000 0.000000 9.312500 0.000000
- S 0 0.000000 0.103447 -0.976036 9.209053 0.976036
- L 8421376 0.030000 0.000000 0.787400 4.656250 0.787400
- L 8421376 0.030000 4.656250 0.787400 9.044000 1.745943
- L 8421376 0.030000 4.656250 -0.787400 9.312500 -0.787400
- L 8421376 0.030000 4.656250 -0.787400 0.268500 -1.745943
- END
-
-SUBCONTENTS Märklin C-Track Miscellaneous Track
-TURNOUT HO "Märklin C-Track Bumper 77.5mm 24977"
- U "Straight Section" "XtrkCad" "Märklin C-Track" "Bumper" "24977" 3.051181
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0.000000 0.000000 0.000000 3.051181 0.000000
- L 8421376 0.030000 0.000000 0.787400 3.051181 0.787400
- L 8421376 0.030000 0.000000 -0.787400 3.051181 -0.787400
- F 8421504 0.026667 4
- 1.653333 -0.769333
- 3.040000 -0.769333
- 3.040000 0.769333
- 1.653333 0.769333
- END
-TURNOUT HO "Märklin C-Track Bumper w/ Lantern 77.5mm 24978"
- U "Straight Section" "XtrkCad" "Märklin C-Track" "Bumper w/ Lantern" "24978" 3.051181
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0.000000 0.000000 0.000000 3.051181 0.000000
- L 8421376 0.030000 0.000000 0.787400 3.051181 0.787400
- L 8421376 0.030000 0.000000 -0.787400 3.051181 -0.787400
- F 8421504 0.026667 4
- 1.653333 -0.769333
- 3.040000 -0.769333
- 3.040000 0.769333
- 1.653333 0.769333
- G 16711680 0.026667 0.362706 1.600000 0.00000
- END
-TURNOUT HO "Märklin C-Track End Piece 16.5mm 24001"
- U "Straight Section" "XtrkCad" "Märklin C-Track" "End Piece" "24001" 0.649606
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0.000000 0.000000 0.000000 0.649606 0.000000
- L 8421376 0.030000 0.000000 0.787400 0.649606 0.787400
- L 8421376 0.030000 0.000000 -0.787400 0.649606 -0.787400
- F 8421504 0.026667 4
- 0.1 -0.769333
- 0.649606 -0.769333
- 0.649606 0.769333
- 0.1 0.769333
- END
-TURNOUT HO "Märklin C-Track Uncoupler 94.2mm 24997"
- U "Straight Section" "XtrkCad" "Märklin C-Track" "Uncoupler" "24997" 3.708661
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.708661 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 3.708661 0.000000
- L 8421376 0.030000 0.000000 0.787400 3.708661 0.787400
- L 8421376 0.030000 0.000000 -0.787400 3.708661 -0.787400
- F 0 0.000000 4
- 0.666667 -0.090000
- 3.041994 -0.090000
- 3.041994 0.090000
- 0.666667 0.090000
- END
-TURNOUT HO "Märklin C-Track Contact Track 94.2mm 24995"
- U "Straight Section" "XtrkCad" "Märklin C-Track" "Contact Track" "24995" 3.708661
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.708661 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 3.708661 0.000000
- L 8421376 0.030000 0.000000 0.787400 1.604331 0.787400
- L 8421376 0.030000 2.104331 0.787400 3.708661 0.787400
- L 8421376 0.030000 0.000000 -0.787400 3.708661 -0.787400
- G 16711680 0.030000 0.200000 1.854331 0.75000
- END
-TURNOUT HO "Märklin C-Track Straight w/ Contact 94.2mm 24994"
- U "Straight Section" "XtrkCad" "Märklin C-Track" "Straight w/ Contact" "24994" 3.708661
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.708661 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 3.708661 0.000000
- L 8421376 0.030000 0.000000 0.787400 3.708661 0.787400
- L 8421376 0.030000 0.000000 -0.787400 3.708661 -0.787400
- G 16711680 0.030000 0.400000 1.854331 0.00000
- END
-TURNOUT HO "Märklin C-Track Curved w/ Contact R1=360mm 15° 24194"
- U "Curved Section" "XtrkCad" "Märklin C-Track" "Curved w/ Contact R1=360mm 15°" "24194" 14.173228 15.000000
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.668301 0.482941 75.000000
- C 0 0.000000 -14.173228 0.000000 14.173228 165.000000 15.000000
- A 8421376 0.030000 -13.385828 0.000000 14.173228 165.000000 15.000000
- A 8421376 0.030000 -14.960628 0.000000 14.173228 165.000000 15.000000
- G 16711680 0.030000 0.400000 1.849976 0.121323
- END
-TURNOUT HO "Märklin C-Track Curved w/ Contact R2=437.5mm 15° 24294"
- U "Curved Section" "XtrkCad" "Märklin C-Track" "Curved w/ Contact R2=437.5mm 15°" "24294" 17.224409 15.000000
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.458005 0.586908 75.000000
- C 0 0.000000 -17.224409 0.000000 17.224409 165.000000 15.000000
- A 8421376 0.030000 -16.437009 0.000000 17.224409 165.000000 15.000000
- A 8421376 0.030000 -18.011809 0.000000 17.224409 165.000000 15.000000
- G 16711680 0.030000 0.400000 2.248233 0.147372
- END
-TURNOUT HO "Märklin C-Track K-track Adaptor 180mm 24922"
- U "Straight Section" "XtrkCad" "Märklin C-Track" "K-track Adaptor" "24922" 7.086614
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.086614 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 7.086614 0.000000
- L 8421376 0.030000 0.000000 0.787400 7.086614 0.787400
- L 8421376 0.030000 0.000000 -0.787400 7.086614 -0.787400
- END
-TURNOUT HO "Märklin C-Track M-Track Adaptor 180mm 24951"
- U "Straight Section" "XtrkCad" "Märklin C-Track" "M-Track Adaptor" "24951" 7.086614
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.086614 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 7.086614 0.000000
- L 8421376 0.030000 0.000000 0.787400 7.086614 0.787400
- L 8421376 0.030000 0.000000 -0.787400 7.086614 -0.787400
- END
-TURNOUT HO "Märklin C-Track Feeder Trk 188.3mm 24088"
- U "Straight Section" "XtrkCad" "Märklin C-Track" "Straight 188.3mm" "24088" 7.413386
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.413386 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 7.413386 0.000000
- L 8421376 0.030000 0.000000 0.787400 7.413386 0.787400
- L 8421376 0.030000 0.000000 -0.787400 7.413386 -0.787400
- L 8421376 1.574800 1.574800 -1.574800 3.149600 -1.574800
- END
+CONTENTS Mrklin C-Track HO-Scale
+
+SUBCONTENTS Mrklin C-Track Straight Tracks
+TURNOUT HO "Mrklin C-Track Straight 64.3mm 24064"
+ U "Straight Section" "XtrkCad" "Mrklin C-Track" "Straight 64.3mm" "24064" 2.531496
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.531496 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 2.531496 0.000000
+ L 8421376 0.030000 0.000000 0.787400 2.531496 0.787400
+ L 8421376 0.030000 0.000000 -0.787400 2.531496 -0.787400
+ END
+TURNOUT HO "Mrklin C-Track Straight 70.8mm 24071"
+ U "Straight Section" "XtrkCad" "Mrklin C-Track" "Straight 70.8mm" "24071" 2.787401
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.787401 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 2.787401 0.000000
+ L 8421376 0.030000 0.000000 0.787400 2.787401 0.787400
+ L 8421376 0.030000 0.000000 -0.787400 2.787401 -0.787400
+ END
+TURNOUT HO "Mrklin C-Track Straight 77.5mm 24077"
+ U "Straight Section" "XtrkCad" "Mrklin C-Track" "Straight 77.5mm" "24077" 3.051181
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.051181 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 3.051181 0.000000
+ L 8421376 0.030000 0.000000 0.787400 3.051181 0.787400
+ L 8421376 0.030000 0.000000 -0.787400 3.051181 -0.787400
+ END
+TURNOUT HO "Mrklin C-Track Straight 94.2mm 24094"
+ U "Straight Section" "XtrkCad" "Mrklin C-Track" "Straight 94.2mm" "24094" 3.708661
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.708661 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 3.708661 0.000000
+ L 8421376 0.030000 0.000000 0.787400 3.708661 0.787400
+ L 8421376 0.030000 0.000000 -0.787400 3.708661 -0.787400
+ END
+TURNOUT HO "Mrklin C-Track Straight 171.7mm 24172"
+ U "Straight Section" "XtrkCad" "Mrklin C-Track" "Straight 171.7mm" "24172" 6.759843
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.759843 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 6.759843 0.000000
+ L 8421376 0.030000 0.000000 0.787400 6.759843 0.787400
+ L 8421376 0.030000 0.000000 -0.787400 6.759843 -0.787400
+ END
+TURNOUT HO "Mrklin C-Track Straight 188.3mm 24188"
+ U "Straight Section" "XtrkCad" "Mrklin C-Track" "Straight 188.3mm" "24188" 7.413386
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.413386 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 7.413386 0.000000
+ L 8421376 0.030000 0.000000 0.787400 7.413386 0.787400
+ L 8421376 0.030000 0.000000 -0.787400 7.413386 -0.787400
+ END
+TURNOUT HO "Mrklin C-Track Straight 229.0mm 24229"
+ U "Straight Section" "XtrkCad" "Mrklin C-Track" "Straight 229.0mm" "24229" 9.015748
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.015748 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 9.015748 0.000000
+ L 8421376 0.030000 0.000000 0.787400 9.015748 0.787400
+ L 8421376 0.030000 0.000000 -0.787400 9.015748 -0.787400
+ END
+TURNOUT HO "Mrklin C-Track Straight 236.0mm 24236"
+ U "Straight Section" "XtrkCad" "Mrklin C-Track" "Straight 236.0mm" "24236" 9.291338
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.291338 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 9.291338 0.000000
+ L 8421376 0.030000 0.000000 0.787400 9.291338 0.787400
+ L 8421376 0.030000 0.000000 -0.787400 9.291338 -0.787400
+ END
+TURNOUT HO "Mrklin C-Track Straight 360.0mm 24360"
+ U "Straight Section" "XtrkCad" "Mrklin C-Track" "Straight 360.0mm" "24360" 14.173228
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 14.173228 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 14.173228 0.000000
+ L 8421376 0.030000 0.000000 0.787400 14.173228 0.787400
+ L 8421376 0.030000 0.000000 -0.787400 14.173228 -0.787400
+ END
+
+SUBCONTENTS Mrklin C-Track Curve Tracks
+TURNOUT HO "Mrklin C-Track Curved R1=360mm 30 24130"
+ U "Curved Section" "XtrkCad" "Mrklin C-Track" "Curved R1=360mm 30" "24130" 14.173228 30.000000
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 1.898853 60.000000
+ C 0 0.000000 -14.173228 0.000000 14.173228 150.000000 30.000000
+ A 8421376 0.030000 -13.385828 0.000000 14.173228 150.000000 30.000000
+ A 8421376 0.030000 -14.960628 0.000000 14.173228 150.000000 30.000000
+ END
+TURNOUT HO "Mrklin C-Track Curved R1=360mm 15 24115"
+ U "Curved Section" "XtrkCad" "Mrklin C-Track" "Curved R1=360mm 15" "24115" 14.173228 15.000000
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.668301 0.482941 75.000000
+ C 0 0.000000 -14.173228 0.000000 14.173228 165.000000 15.000000
+ A 8421376 0.030000 -13.385828 0.000000 14.173228 165.000000 15.000000
+ A 8421376 0.030000 -14.960628 0.000000 14.173228 165.000000 15.000000
+ END
+TURNOUT HO "Mrklin C-Track Curved R1=360mm 7.5 24107"
+ U "Curved Section" "XtrkCad" "Mrklin C-Track" "Curved R1=360mm 7.5" "24107" 14.173228 7.500000
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.849976 0.121254 82.500000
+ C 0 0.000000 -14.173228 0.000000 14.173228 172.500000 7.500000
+ A 8421376 0.030000 -13.385828 0.000000 14.173228 172.500000 7.500000
+ A 8421376 0.030000 -14.960628 0.000000 14.173228 172.500000 7.500000
+ END
+TURNOUT HO "Mrklin C-Track Curved R2=437.5mm 30 24230"
+ U "Curved Section" "XtrkCad" "Mrklin C-Track" "Curved R2=437.5mm 30" "24230" 17.224409 30.000000
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 8.612205 2.307633 60.000000
+ C 0 0.000000 -17.224409 0.000000 17.224409 150.000000 30.000000
+ A 8421376 0.030000 -16.437009 0.000000 17.224409 150.000000 30.000000
+ A 8421376 0.030000 -18.011809 0.000000 17.224409 150.000000 30.000000
+ END
+TURNOUT HO "Mrklin C-Track Curved R2=437.5mm 24.3 24224"
+ U "Curved Section" "XtrkCad" "Mrklin C-Track" "Curved R2=437.5mm 24.3" "24224" 17.224409 24.300000
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.088092 1.526026 65.700000
+ C 0 0.000000 -17.224409 0.000000 17.224409 155.700000 24.300000
+ A 8421376 0.030000 -16.437009 0.000000 17.224409 155.700000 24.300000
+ A 8421376 0.030000 -18.011809 0.000000 17.224409 155.700000 24.300000
+ END
+TURNOUT HO "Mrklin C-Track Curved R2=437.5mm 15 24215"
+ U "Curved Section" "XtrkCad" "Mrklin C-Track" "Curved R2=437.5mm 15" "24215" 17.224409 15.000000
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.458005 0.586908 75.000000
+ C 0 0.000000 -17.224409 0.000000 17.224409 165.000000 15.000000
+ A 8421376 0.030000 -16.437009 0.000000 17.224409 165.000000 15.000000
+ A 8421376 0.030000 -18.011809 0.000000 17.224409 165.000000 15.000000
+ END
+TURNOUT HO "Mrklin C-Track Curved R2=437.5mm 7.5 24207"
+ U "Curved Section" "" "Mrklin C-Track" "Curved R2=437.5mm 7.5" "24207" 17.224409 7.500000
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.248235 0.147357 82.500000
+ C 0 0.000000 -17.224409 0.000023 17.224409 172.500076 7.500000
+ A 8421376 0.030000 -16.437009 0.000000 17.224409 172.500076 7.500000
+ A 8421376 0.030000 -18.011809 0.000000 17.224409 172.500076 7.500000
+ END
+TURNOUT HO "Mrklin C-Track Curved R2=437.5mm 5.7 24206"
+ U "Curved Section" "XtrkCad" "Mrklin C-Track" "Curved R2=437.5mm 5.7" "24206" 17.224409 5.700000
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.710724 0.085165 84.300000
+ C 0 0.000000 -17.224409 0.000000 17.224409 174.300000 5.700000
+ A 8421376 0.030000 -16.437009 0.000000 17.224409 174.300000 5.700000
+ A 8421376 0.030000 -18.011809 0.000000 17.224409 174.300000 5.700000
+ END
+TURNOUT HO "Mrklin C-Track Curved R3=515mm 30 24330"
+ U "Curved Section" "XtrkCad" "Mrklin C-Track" "Curved R3=515mm 30" "24330" 20.275591 30.000000
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.137788 2.716410 60.000000
+ C 0 0.000000 -20.275591 0.000000 20.275591 150.000000 30.000000
+ A 8421376 0.030000 -19.488191 0.000000 20.275591 150.000000 30.000000
+ A 8421376 0.030000 -21.062991 0.000000 20.275591 150.000000 30.000000
+ END
+TURNOUT HO "Mrklin C-Track Curved R4=579.3mm 30 24430"
+ U "Curved Section" "XtrkCad" "Mrklin C-Track" "Curved R4=579.3mm 30" "24430" 22.812750 30.000000
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 11.406375 3.056329 60.000000
+ C 0 0.000000 -22.812750 0.000000 22.812750 150.000000 30.000000
+ A 8421376 0.030000 -22.025350 0.000000 22.812750 150.000000 30.000000
+ A 8421376 0.030000 -23.600150 0.000000 22.812750 150.000000 30.000000
+ END
+TURNOUT HO "Mrklin C-Track Curved R5=643.6mm 30 24530"
+ U "Curved Section" "XtrkCad" "Mrklin C-Track" "Curved R5=643.6mm 30" "24530" 25.312500 30.000000
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 12.656250 3.391232 60.000000
+ C 0 0.000000 -25.312500 0.000000 25.312500 150.000000 30.000000
+ A 8421376 0.030000 -24.525100 0.000000 25.312500 150.000000 30.000000
+ A 8421376 0.030000 -26.099900 0.000000 25.312500 150.000000 30.000000
+ END
+TURNOUT HO "Mrklin C-Track Curved R=1114.6mm 12.1 24912"
+ U "Curved Section" "XtrkCad" "Mrklin C-Track" "Curved R=1114.6mm 12.1" "24912" 43.875000 12.100000
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.197014 0.974760 77.900000
+ C 0 0.000000 -43.875000 0.000000 43.875000 167.900000 12.100000
+ A 8421376 0.030000 -43.087600 0.000000 43.875000 167.900000 12.100000
+ A 8421376 0.030000 -44.662400 0.000000 43.875000 167.900000 12.100000
+ END
+
+
+SUBCONTENTS Mrklin C-Track Turnouts
+TURNOUT HO "Mrklin C-Track Left Turnout 188.3mm R2=437.5mm 24.3 24611"
+ U "Regular Turnout" "XtrkCad" "Mrklin C-Track" "Left Turnout" "24611" "Right Turnout" "24612" 7.088092 24.300000 1.526026 7.413386
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 7.413386 0.000000 90.000000
+ E 7.088092 1.526026 65.700000
+ S 0 0.000000 0.000000 0.000000 0.648601 0.000000
+ S 0 0.000000 0.648601 0.000000 7.413386 0.000000
+ C 0 0.000000 -14.211787 0.648601 14.211787 155.700000 24.300000
+ S 0 0.000000 6.496956 1.259118 7.088092 1.526026
+ L 8421376 0.030000 0.000000 -0.787400 7.413386 -0.787400
+ L 8421376 0.030000 0.000000 0.787400 0.648601 0.787400
+ A 8421376 0.030000 -13.424387 0.648601 14.211787 155.700000 24.300000
+ L 8421376 0.030000 6.180000 1.980000 6.760000 2.240000
+ END
+TURNOUT HO "Mrklin C-Track Right Turnout 188.3mm R2=437.5mm 24.3 24612"
+ U "Regular Turnout" "XtrkCad" "Mrklin C-Track" "Left Turnout" "24611" "Right Turnout" "24612" 7.088092 24.300000 1.526026 7.413386
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 7.413386 0.000000 90.000000
+ E 7.088092 -1.526026 114.300000
+ S 0 0.000000 0.000000 0.000000 0.648601 0.000000
+ S 0 0.000000 0.648601 0.000000 7.413386 0.000000
+ C 0 0.000000 14.211787 0.648601 -14.211787 0.000000 24.300000
+ S 0 0.000000 6.496956 -1.259118 7.088092 -1.526026
+ L 8421376 0.030000 0.000000 0.787400 7.413386 0.787400
+ L 8421376 0.030000 0.000000 -0.787400 0.648601 -0.787400
+ A 8421376 0.030000 13.424387 0.648601 -14.211787 0.000000 24.300000
+ L 8421376 0.030000 6.180000 -1.980000 6.760000 -2.240000
+ END
+TURNOUT HO "Mrklin C-Track Curved Left Turnout R1=360mm 30 24671"
+ U "Curved Turnout" "XtrkCad" "Mrklin C-Track" "Curved Left Turnout 30" "24671" "Curved Right Turnout 30" "24672" 7.086614 30.000000 1.898853 30.000000 1.898853 10.137795
+ P "Normal" 1 6 4 5
+ P "Reverse" 1 2 3
+ E -0.054784 -2944.110350 270.000000
+ E 10.083011 -2942.211497 60.000000
+ E 7.031830 -2942.211497 60.000000
+ S 0 0.000000 -0.054784 -2944.110350 0.593847 -2944.110350
+ C 0 0.000000 -11.752571 0.593863 -2932.357779 150.000000 30.000000
+ S 0 0.000000 6.470155 -2942.535791 7.031830 -2942.211497
+ C 0 0.000000 -11.752541 3.645059 -2932.357809 150.000000 30.000000
+ S 0 0.000000 9.521337 -2942.535795 10.083011 -2942.211497
+ S 0 0.000000 0.593847 -2944.110350 3.645044 -2944.110350
+ A 8421376 0.030000 -13.424387 -0.054677 -2929.898563 150.000000 30.000000
+ L 8421376 0.030000 -0.054570 -2944.897750 2.996397 -2944.897750
+ A 8421376 0.030000 15.047713 2.996397 -2929.822762 150.000000 30.000000
+ L 32768 0.010417 7.413553 -2942.891285 9.697017 -2941.513332
+ END
+TURNOUT HO "Mrklin C-Track Curved Right Turnout R1=360mm 30 24672"
+ U "Curved Turnout" "XtrkCad" "Mrklin C-Track" "Curved Right Turnout 30" "24672" "Curved Left Turnout 30" "24671" 7.086614 30.000000 1.898853 30.000000 1.898853 10.137795
+ P "Normal" 1 6 4 5
+ P "Reverse" 1 2 3
+ E 0.000000 -100.160054 270.000000
+ E 10.137795 -102.058907 120.000000
+ E 7.086614 -102.058907 120.000000
+ S 0 0.000000 0.000000 -100.160054 0.648631 -100.160054
+ C 0 0.000000 11.752571 0.648585 -111.912625 0.000076 30.000152
+ S 0 0.000000 6.524939 -101.734613 7.086614 -102.058907
+ C 0 0.000000 11.752541 3.699781 -111.912595 0.000076 30.000152
+ S 0 0.000000 9.576121 -101.734609 10.137795 -102.058907
+ S 0 0.000000 0.621239 -100.160054 3.672436 -100.160054
+ L 8421376 0.030000 0.000000 -99.372654 3.051181 -99.372654
+ A 8421376 0.030000 -13.385828 0.000000 -114.333282 0.000000 30.000000
+ L 8421376 0.030000 7.440945 -101.365353 9.763780 -102.782676
+ A 8421376 0.030000 15.047562 3.051181 -114.444412 0.000000 29.636472
+ END
+TURNOUT HO "Mrklin C-Track 3-way Turnout 188.3mm R2=437.5mm 24.3 24630"
+ U "3-way Turnout" "XtrkCad" "Mrklin C-Track" "3-way Turnout" "24630" 7.079991 24.300000 1.524282 7.413386 1.524282 24.300000 7.079991
+ P "Left" 1 2 3
+ P "Normal" 1 6
+ P "Right" 1 4 5
+ E 0.000000 0.000000 270.000000
+ E 7.079991 1.524282 65.700000
+ E 7.079991 -1.524282 114.300000
+ E 7.413386 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 0.648639 0.000000
+ C 0 0.000000 -14.192025 0.648658 14.192025 155.700000 24.300000
+ S 0 0.000000 6.488891 1.257380 7.079991 1.524282
+ C 0 0.000000 14.192025 0.648583 -14.192025 0.000000 24.300000
+ S 0 0.000000 6.488891 -1.257380 7.079991 -1.524282
+ S 0 0.000000 0.648639 0.000000 7.413386 0.000000
+ A 8421376 0.030000 -16.437009 0.000000 17.224409 155.700000 24.300000
+ A 8421376 0.030000 16.437009 0.000000 -17.224409 0.00000000 24.300000
+ END
+TURNOUT HO "Mrklin C-Track Double Slipswitch 188.3mm R2=437.5mm 24.3 24624"
+ U "Double Slipswitch" "XtrkCad" "Mrklin C-Track" "Double Slip" "24624" 7.413386 24.300000 7.413386
+ P "Normal" 1 2 3 0 4 5 6
+ P "Reverse" 1 7 6 0 4 8 3
+ E 0.000000 0.000000 270.000000
+ E 7.413386 0.000000 90.000000
+ E 0.328401 1.525357 294.300000
+ E 7.084985 -1.525357 114.300000
+ S 0 0.000000 0.000000 0.000000 1.297200 0.000000
+ S 0 0.000000 1.297200 0.000000 6.116186 0.000000
+ S 0 0.000000 6.116186 0.000000 7.413386 0.000000
+ S 0 0.000000 0.328401 1.525357 1.510673 0.991541
+ S 0 0.000000 1.510673 0.991541 5.902713 -0.991541
+ S 0 0.000000 5.902713 -0.991541 7.084985 -1.525357
+ C 0 0.000000 11.191621 1.297200 -11.191621 0.000000 24.300000
+ C 0 0.000000 -11.191621 6.116186 11.191621 180.000000 24.300000
+ L 8421376 0.030000 0.000000 -0.787400 0.648601 -0.787400
+ A 8421376 0.030000 13.424387 0.648601 -14.211787 0.000000 24.300000
+ L 8421376 0.030000 6.180000 -1.980000 6.760000 -2.240000
+ L 8421376 0.030000 7.413386 0.787400 6.764785 0.787400
+ A 8421376 0.030000 13.424387 6.764785 14.211787 180.000000 24.300000
+ L 8421376 0.030000 1.233386 1.980000 0.653386 2.240000
+ END
+TURNOUT HO "Mrklin C-Track Left Turnout 236.1mm R=1114.6mm 12.1 24711"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 9.312500 0.000000 90.000000
+ E 9.167014 0.974760 77.900000
+ S 0 0.000000 0.000000 0.000000 9.312500 0.000000
+ C 0 0.000000 -43.875000 0.0 43.875000 167.900000 12.100000
+ L 8421376 0.030000 0.000000 -0.787400 9.312500 -0.787400
+ A 8421376 0.030000 -43.087600 0.000000 43.875000 167.900000 12.100000
+ END
+TURNOUT HO "Mrklin C-Track Right Turnout 236.1mm R=1114.6mm 12.1 24712"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 9.312500 0.000000 90.000000
+ E 9.167014 -0.974760 102.100000
+ S 0 0.000000 0.000000 0.000000 9.312500 0.000000
+ C 0 0.000000 43.875000 0.000000 -43.875000 0.000000 12.100000
+ L 8421376 0.030000 0.000000 0.787400 9.312500 0.787400
+ A 8421376 0.030000 43.087600 0.000000 -43.875000 0.000000 12.100000
+ END
+
+SUBCONTENTS Mrklin C-Track Crossings
+TURNOUT HO "Mrklin C-Track Double Crossing 188.3mm 24.3 24640"
+ U "Crossing" "XtrkCad" "Mrklin C-Track" "Double Crossing 188.3mm 24.3" "24640" 7.413386 24.300000 7.413386
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 7.413386 0.000000 90.000000
+ E 0.328401 1.525357 294.300000
+ E 7.084985 -1.525357 114.300000
+ S 0 0.000000 0.000000 0.000000 7.413386 0.000000
+ S 0 0.000000 0.328401 1.525357 7.084985 -1.525357
+ L 8421376 0.030000 0.000000 -0.787400 3.513386 -0.787400
+ L 8421376 0.030000 3.900000 0.787400 7.413386 0.787400
+ L 8421376 0.030000 0.653386 2.240000 3.900000 0.787400
+ L 8421376 0.030000 6.760000 -2.240000 3.513386 -0.787400
+ END
+TURNOUT HO "Mrklin C-Track Double Crossing 103.3mm 48.6 24649"
+ U "Crossing" "XtrkCad" "Mrklin C-Track" "Double Crossing 103.3mm 48.6" "24649" 4.066929 48.600000 4.066929
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 4.066929 0.000000 90.000000
+ E 0.688707 1.525322 318.600000
+ E 3.378222 -1.525322 138.600000
+ S 0 0.000000 0.000000 0.000000 4.066929 0.000000
+ S 0 0.000000 0.688707 1.525322 3.378222 -1.525322
+ L 8421376 0.030000 0.000000 -0.787400 1.653543 -0.787400
+ L 8421376 0.030000 1.653543 -0.787400 2.785000 -2.050000
+ L 8421376 0.030000 4.066929 0.787400 2.401575 0.787400
+ L 8421376 0.030000 2.401575 0.787400 1.300000 2.050000
+ END
+TURNOUT HO "Mrklin C-Track Wide Angle Crossing 236.1mm 12.1 24740"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 9.312500 0.000000 90.000000
+ E 0.103447 -0.976036 257.900000
+ E 9.209053 0.976036 77.900000
+ S 0 0.000000 0.000000 0.000000 9.312500 0.000000
+ S 0 0.000000 0.103447 -0.976036 9.209053 0.976036
+ L 8421376 0.030000 0.000000 0.787400 4.656250 0.787400
+ L 8421376 0.030000 4.656250 0.787400 9.044000 1.745943
+ L 8421376 0.030000 4.656250 -0.787400 9.312500 -0.787400
+ L 8421376 0.030000 4.656250 -0.787400 0.268500 -1.745943
+ END
+
+SUBCONTENTS Mrklin C-Track Miscellaneous Tracks
+TURNOUT HO "Mrklin C-Track Bumper 77.5mm 24977"
+ U "Straight Section" "XtrkCad" "Mrklin C-Track" "Bumper" "24977" 3.051181
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0.000000 0.000000 0.000000 3.051181 0.000000
+ L 8421376 0.030000 0.000000 0.787400 3.051181 0.787400
+ L 8421376 0.030000 0.000000 -0.787400 3.051181 -0.787400
+ F 8421504 0.026667 4
+ 1.653333 -0.769333
+ 3.040000 -0.769333
+ 3.040000 0.769333
+ 1.653333 0.769333
+ END
+TURNOUT HO "Mrklin C-Track Bumper w/ Lantern 77.5mm 24978"
+ U "Straight Section" "XtrkCad" "Mrklin C-Track" "Bumper w/ Lantern" "24978" 3.051181
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0.000000 0.000000 0.000000 3.051181 0.000000
+ L 8421376 0.030000 0.000000 0.787400 3.051181 0.787400
+ L 8421376 0.030000 0.000000 -0.787400 3.051181 -0.787400
+ F 8421504 0.026667 4
+ 1.653333 -0.769333
+ 3.040000 -0.769333
+ 3.040000 0.769333
+ 1.653333 0.769333
+ G 16711680 0.026667 0.362706 1.600000 0.00000
+ END
+TURNOUT HO "Mrklin C-Track End Piece 16.5mm 24001"
+ U "Straight Section" "XtrkCad" "Mrklin C-Track" "End Piece" "24001" 0.649606
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0.000000 0.000000 0.000000 0.649606 0.000000
+ L 8421376 0.030000 0.000000 0.787400 0.649606 0.787400
+ L 8421376 0.030000 0.000000 -0.787400 0.649606 -0.787400
+ F 8421504 0.026667 4
+ 0.1 -0.769333
+ 0.649606 -0.769333
+ 0.649606 0.769333
+ 0.1 0.769333
+ END
+TURNOUT HO "Mrklin C-Track Uncoupler 94.2mm 24997"
+ U "Straight Section" "XtrkCad" "Mrklin C-Track" "Uncoupler" "24997" 3.708661
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.708661 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 3.708661 0.000000
+ L 8421376 0.030000 0.000000 0.787400 3.708661 0.787400
+ L 8421376 0.030000 0.000000 -0.787400 3.708661 -0.787400
+ F 0 0.000000 4
+ 0.666667 -0.090000
+ 3.041994 -0.090000
+ 3.041994 0.090000
+ 0.666667 0.090000
+ END
+TURNOUT HO "Mrklin C-Track Contact Track 94.2mm 24995"
+ U "Straight Section" "XtrkCad" "Mrklin C-Track" "Contact Track" "24995" 3.708661
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.708661 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 3.708661 0.000000
+ L 8421376 0.030000 0.000000 0.787400 1.604331 0.787400
+ L 8421376 0.030000 2.104331 0.787400 3.708661 0.787400
+ L 8421376 0.030000 0.000000 -0.787400 3.708661 -0.787400
+ G 16711680 0.030000 0.200000 1.854331 0.75000
+ END
+TURNOUT HO "Mrklin C-Track Straight w/ Contact 94.2mm 24994"
+ U "Straight Section" "XtrkCad" "Mrklin C-Track" "Straight w/ Contact" "24994" 3.708661
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.708661 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 3.708661 0.000000
+ L 8421376 0.030000 0.000000 0.787400 3.708661 0.787400
+ L 8421376 0.030000 0.000000 -0.787400 3.708661 -0.787400
+ G 16711680 0.030000 0.400000 1.854331 0.00000
+ END
+TURNOUT HO "Mrklin C-Track Curved w/ Contact R1=360mm 15 24194"
+ U "Curved Section" "XtrkCad" "Mrklin C-Track" "Curved w/ Contact R1=360mm 15" "24194" 14.173228 15.000000
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.668301 0.482941 75.000000
+ C 0 0.000000 -14.173228 0.000000 14.173228 165.000000 15.000000
+ A 8421376 0.030000 -13.385828 0.000000 14.173228 165.000000 15.000000
+ A 8421376 0.030000 -14.960628 0.000000 14.173228 165.000000 15.000000
+ G 16711680 0.030000 0.400000 1.849976 0.121323
+ END
+TURNOUT HO "Mrklin C-Track Curved w/ Contact R2=437.5mm 15 24294"
+ U "Curved Section" "XtrkCad" "Mrklin C-Track" "Curved w/ Contact R2=437.5mm 15" "24294" 17.224409 15.000000
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.458005 0.586908 75.000000
+ C 0 0.000000 -17.224409 0.000000 17.224409 165.000000 15.000000
+ A 8421376 0.030000 -16.437009 0.000000 17.224409 165.000000 15.000000
+ A 8421376 0.030000 -18.011809 0.000000 17.224409 165.000000 15.000000
+ G 16711680 0.030000 0.400000 2.248233 0.147372
+ END
+TURNOUT HO "Mrklin C-Track K-track Adaptor 180mm 24922"
+ U "Straight Section" "XtrkCad" "Mrklin C-Track" "K-track Adaptor" "24922" 7.086614
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 7.086614 0.000000
+ L 8421376 0.030000 0.000000 0.787400 7.086614 0.787400
+ L 8421376 0.030000 0.000000 -0.787400 7.086614 -0.787400
+ END
+TURNOUT HO "Mrklin C-Track M-Track Adaptor 180mm 24951"
+ U "Straight Section" "XtrkCad" "Mrklin C-Track" "M-Track Adaptor" "24951" 7.086614
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 7.086614 0.000000
+ L 8421376 0.030000 0.000000 0.787400 7.086614 0.787400
+ L 8421376 0.030000 0.000000 -0.787400 7.086614 -0.787400
+ END
+TURNOUT HO "Mrklin C-Track Feeder Trk 188.3mm 24088"
+ U "Straight Section" "XtrkCad" "Mrklin C-Track" "Straight 188.3mm" "24088" 7.413386
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.413386 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 7.413386 0.000000
+ L 8421376 0.030000 0.000000 0.787400 7.413386 0.787400
+ L 8421376 0.030000 0.000000 -0.787400 7.413386 -0.787400
+ L 8421376 1.574800 1.574800 -1.574800 3.149600 -1.574800
+ END
+
+SUBCONTENTS Mrklin C-Track TurnTable
+TURNOUT HO "Marklin C-Track Turntable 10.35"" Dia 12d 30 Positions 74861"
+ P "1" 1
+ P "2" 2
+ P "3" 3
+ P "4" 4
+ P "5" 5
+ P "6" 6
+ P "7" 7
+ P "8" 8
+ P "9" 9
+ P "10" 10
+ P "11" 11
+ P "12" 12
+ P "13" 13
+ P "14" 14
+ P "15" 15
+ G3 0 0.000000 0.129736 0.000000 0.000000 0
+ A3 0 0.031250 5.177154 0.000000 0.000000 0 0.000000 360.000000
+ A3 0 0.031250 7.440945 0.000000 0.000000 0 0.000000 360.000000
+ E 0.000000 5.177154 0.000000
+ E 1.076391 5.064020 12.000000
+ E 2.105738 4.729565 24.000000
+ E 3.043054 4.188405 36.000000
+ E 3.847375 3.464192 48.000000
+ E 4.483546 2.588577 60.000000
+ E 4.923766 1.599828 72.000000
+ E 5.148793 0.541160 84.000000
+ E 5.148793 -0.541160 96.000000
+ E 4.923766 -1.599828 108.000000
+ E 4.483546 -2.588577 120.000000
+ E 3.847375 -3.464192 132.000000
+ E 3.043054 -4.188405 144.000000
+ E 2.105738 -4.729565 156.000000
+ E 1.076391 -5.064020 168.000000
+ E 0.000000 -5.177154 180.000000
+ E -1.076391 -5.064020 192.000000
+ E -2.105738 -4.729565 204.000000
+ E -3.043054 -4.188405 216.000000
+ E -3.847375 -3.464192 228.000000
+ E -4.483546 -2.588577 240.000000
+ E -4.923766 -1.599828 252.000000
+ E -5.148793 -0.541160 264.000000
+ E -5.148793 0.541160 276.000000
+ E -4.923766 1.599828 288.000000
+ E -4.483546 2.588577 300.000000
+ E -3.847375 3.464192 312.000000
+ E -3.043054 4.188405 324.000000
+ E -2.105738 4.729565 336.000000
+ E -1.076391 5.064020 348.000000
+ S 16777215 0 0.000000 5.177154 0.000000 -5.177154
+ S 16777215 0 1.076391 5.064020 -1.076391 -5.064020
+ S 16777215 0 2.105738 4.729565 -2.105738 -4.729565
+ S 16777215 0 3.043054 4.188405 -3.043054 -4.188405
+ S 16777215 0 3.847375 3.464192 -3.847375 -3.464192
+ S 16777215 0 4.483546 2.588577 -4.483546 -2.588577
+ S 16777215 0 4.923766 1.599828 -4.923766 -1.599828
+ S 16777215 0 5.148793 0.541160 -5.148793 -0.541160
+ S 16777215 0 5.148793 -0.541160 -5.148793 0.541160
+ S 16777215 0 4.923766 -1.599828 -4.923766 1.599828
+ S 16777215 0 4.483546 -2.588577 -4.483546 2.588577
+ S 16777215 0 3.847375 -3.464192 -3.847375 3.464192
+ S 16777215 0 3.043054 -4.188405 -3.043054 4.188405
+ S 16777215 0 2.105738 -4.729565 -2.105738 4.729565
+ S 16777215 0 1.076391 -5.064020 -1.076391 5.064020
+END
+TURNOUT HO "Mrklin C-Track Turntable Position Track 57.5mm 74871"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.263792 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 2.263792 0.000000
+ END
diff --git a/app/lib/params/mrklnhok.xtp b/app/lib/params/HO-Marklin K-track.xtp
index 98f6f9f..a2944dd 100644
--- a/app/lib/params/mrklnhok.xtp
+++ b/app/lib/params/HO-Marklin K-track.xtp
@@ -1,401 +1,527 @@
-CONTENTS Märklin K-Track HO-Scale
-# From 'Märklin Complete Program 1994/95 E'
-# Straight Section Design by Dave Bullis - 7.086614
-TURNOUT HO "Märklin K-Track Straight 180mm 2200"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.086614 0.000000 90.000000
- S 0 0 0.000000 0.000000 7.087000 0.000000
- END
-TURNOUT HO "Märklin K-Track Straight 168.9mm 2206"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.649606 0.000000 90.000000
- S 0 0 0.000000 0.000000 6.650000 0.000000
- END
-TURNOUT HO "Märklin K-Track Straight 217.9mm 2209"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 8.578740 0.000000 90.000000
- S 0 0 0.000000 0.000000 8.579000 0.000000
- END
-TURNOUT HO "Märklin K-Track Straight 156mm 2207"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.141732 0.000000 90.000000
- S 0 0 0.000000 0.000000 6.142000 0.000000
- END
-TURNOUT HO "Märklin K-Track Straight 90mm 2201"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.543307 0.000000 90.000000
- S 0 0 0.000000 0.000000 3.543000 0.000000
- END
-TURNOUT HO "Märklin K-Track Straight 45mm 2202"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.771654 0.000000 90.000000
- S 0 0 0.000000 0.000000 1.772000 0.000000
- END
-TURNOUT HO "Märklin K-Track Straight 41.3mm 2293"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.625984 0.000000 90.000000
- S 0 0 0.000000 0.000000 1.626000 0.000000
- END
-TURNOUT HO "Märklin K-Track Straight 35.1mm 2208"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.381890 0.000000 90.000000
- S 0 0 0.000000 0.000000 1.382000 0.000000
- END
-TURNOUT HO "Märklin K-Track Straight 30mm 2203"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.181102 0.000000 90.000000
- S 0 0 0.000000 0.000000 1.181000 0.000000
- END
-TURNOUT HO "Märklin K-Track Straight 22.5mm 2204"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 0.885827 0.000000 90.000000
- S 0 0 0.000000 0.000000 0.886000 0.000000
- END
-TURNOUT HO "Märklin K-Track Curved 295.4mm 45° 2210"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 8.223596 -3.406325 135.000000
- C 0 0 11.630000 0.000000 -11.630000 0.000000 45.000000
- END
-TURNOUT HO "Märklin K-Track Curved 360mm 30° 2221"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.086614 -1.898853 120.000000
- C 0 0 14.173000 0.000000 -14.173000 0.000000 30.000000
- END
-TURNOUT HO "Märklin K-Track Curved 360mm 15° 2223"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.668301 -0.482941 105.000000
- C 0 0 14.173000 0.000000 -14.173000 0.000000 15.000000
- END
-TURNOUT HO "Märklin K-Track Curved 360mm 7.5° 2224"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.849978 -0.121254 97.500000
- C 0 0 14.173000 0.000000 -14.173000 0.000000 7.500000
- END
-TURNOUT HO "Märklin K-Track Curved 424.6mm 30° 2231"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 8.358268 -2.239591 120.000000
- C 0 0 16.717000 0.000000 -16.717000 0.000000 30.000000
- END
-TURNOUT HO "Märklin K-Track Curved 424.6mm 22.5° 2232"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.397141 -1.272470 112.500000
- C 0 0 16.717000 0.000000 -16.717000 0.000000 22.500000
- END
-TURNOUT HO "Märklin K-Track Curved 424.6mm 15° 2233"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.326558 -0.569602 105.000000
- C 0 0 16.717000 0.000000 -16.717000 0.000000 15.000000
- END
-TURNOUT HO "Märklin K-Track Curved 424.6mm 7.5° 2234"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.181946 -0.143012 97.500000
- C 0 0 16.717000 0.000000 -16.717000 0.000000 7.500000
- END
-TURNOUT HO "Märklin K-Track Curved 424.6mm 3.75° 2235"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.093314 -0.035791 93.750000
- C 0 0 16.717000 0.000000 -16.717000 0.000000 3.750000
- END
-TURNOUT HO "Märklin K-Track Curved 553.9 30° 2241"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 10.903543 -2.921596 120.000000
- C 0 0 21.807000 0.000000 -21.807000 0.000000 30.000000
- END
-TURNOUT HO "Märklin K-Track Curved 618.5 30° 2251"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 12.175197 -3.262334 120.000000
- C 0 0 24.350000 0.000000 -24.350000 0.000000 30.000000
- END
-TURNOUT HO "Märklin K-Track Left Turnout R424.6mm 2262"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 6.649606 0.000000 90.000000
- E 6.397141 1.272470 67.500000
- S 0 0 0.000000 0.000000 6.650000 0.000000
- C 0 0 -16.717000 0.000000 16.717000 157.500000 22.500000
- END
-TURNOUT HO "Märklin K-Track Right Turnout R424.6mm 2263"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 6.649606 0.000000 90.000000
- E 6.397141 -1.272470 112.500000
- S 0 0 0.000000 0.000000 6.650000 0.000000
- C 0 0 16.717000 0.000000 -16.717000 0.000000 22.500000
- END
-TURNOUT HO "Märklin K-Track Left Manual Turnout R424.6mm 2265"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 6.649606 0.000000 90.000000
- E 6.397141 1.272470 67.500000
- S 0 0 0.000000 0.000000 6.650000 0.000000
- C 0 0 -16.717000 0.000000 16.717000 157.500000 22.500000
- END
-TURNOUT HO "Märklin K-Track Right Manual Turnout R424.6mm 2266"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 6.649606 0.000000 90.000000
- E 6.397141 -1.272470 112.500000
- S 0 0 0.000000 0.000000 6.650000 0.000000
- C 0 0 16.717000 0.000000 -16.717000 0.000000 22.500000
- END
-# Double Slipswitch Design by Dave Bullis - 6.649606 22.500000 6.649606
-TURNOUT HO "Märklin K-Track 22.5° Double Slip 2260"
- P "Normal" 1 2 3 0 4 5 6
- P "Reverse" 1 7 6 0 4 8 3
- E 0.000000 0.000000 270.000000
- E 6.649606 0.000000 90.000000
- E 0.253086 1.272347 292.500000
- E 6.396520 -1.272347 112.500000
- S 0 0 0.000000 0.000000 1.297000 0.000000
- S 0 0 1.297000 0.000000 5.352000 0.000000
- S 0 0 5.352000 0.000000 6.650000 0.000000
- S 0 0 0.253000 1.272000 1.452000 0.776000
- S 0 0 1.452000 0.776000 5.198000 -0.776000
- S 0 0 5.198000 -0.776000 6.397000 -1.272000
- C 0 0 10.193000 1.297000 -10.193000 0.000000 22.500000
- C 0 0 -10.193000 5.352000 10.193000 180.000000 22.500000
- END
-# Crossing Design by Dave Bullis - 6.649606 22.500000 6.649606
-TURNOUT HO "Märklin K-Track 22.5° Crossing 2259"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 6.649606 0.000000 90.000000
- E 0.253086 1.272347 292.500000
- E 6.396520 -1.272347 112.500000
- S 0 0 0.000000 0.000000 6.650000 0.000000
- S 0 0 0.253000 1.272000 6.397000 -1.272000
- END
-# Crossing Design by Dave Bullis - 3.543307 45.000000 3.543307
-TURNOUT HO "Märklin K-Track 45° Crossing 2258"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 3.543307 0.000000 90.000000
- E 0.518905 1.252748 315.000000
- E 3.024402 -1.252748 135.000000
- S 0 0 0.000000 0.000000 3.543000 0.000000
- S 0 0 0.519000 1.253000 3.024000 -1.253000
- END
-TURNOUT HO "Märklin K-Track Right Curved Turnout 2269"
- P "Normal" 1 2
- P "Reverse" 3
- E 0.000000 0.000000 270.000000
- E 9.629921 -1.898853 120.000000
- E 7.086614 -1.898853 120.000000
- S 0 0 0.000000 0.000000 2.543000 0.000000
- C 0 0 14.173000 2.543000 -14.173000 0.000000 30.000000
- C 0 0 14.173000 0.000000 -14.173000 0.000000 30.000000
- END
-TURNOUT HO "Märklin K-Track Left Curved Turnout 2268"
- P "Normal" 1 2
- P "Reverse" 3
- E 0.000000 0.000000 270.000000
- E 9.629921 1.898853 60.000000
- E 7.086614 1.898853 60.000000
- S 0 0 0.000000 0.000000 2.543000 0.000000
- C 0 0 -16.717000 1.866000 16.703000 152.324000 25.352000
- C 0 0 -14.173000 0.000000 14.173000 150.000000 30.000000
- END
-TURNOUT HO "Märklin K-Track 3-Way Turnout 2270"
- P "Normal" 1
- P "Right" 2
- P "Left" 3
- E 0.000000 0.000000 270.000000
- E 6.649606 0.000000 90.000000
- E 6.397141 -1.272470 112.500000
- E 6.397141 1.272470 67.500000
- S 0 0 0.000000 0.000000 6.650000 0.000000
- C 0 0 16.717000 0.000000 -16.717000 0.000000 22.500000
- C 0 0 -16.717000 0.000000 16.717000 157.500000 22.500000
- END
-TURNOUT HO "Märklin K-Track Large Right Turnout 2273"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 8.858268 0.000000 90.000000
- E 8.855363 -1.121310 104.433333
- S 0 0 0.000000 0.000000 8.858000 0.000000
- C 0 0 35.528000 0.000000 -35.528000 0.000000 14.433000
- END
-TURNOUT HO "Märklin K-Track Large Left Turnout 2272"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 8.858268 0.000000 90.000000
- E 8.855363 1.121310 75.566667
- S 0 0 0.000000 0.000000 8.858000 0.000000
- C 0 0 -35.528000 0.000000 35.528000 165.567000 14.433000
- END
-TURNOUT HO "Märklin K-Track Large Curve 902.4mm 2274"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 8.855363 -1.121310 104.433333
- C 0 0 35.528000 0.000000 -35.528000 0.000000 14.433000
- END
-# Double Slipswitch Design by Dave Bullis - 8.858268 14.433300 8.858368
-TURNOUT HO "Märklin K-Track Large Double Slip 2275"
- P "Normal" 1 2 3 0 4 5 6
- P "Reverse" 1 7 6 0 4 8 3
- E 0.000000 0.000000 270.000000
- E 8.858268 0.000000 90.000000
- E 0.139742 1.103986 284.433330
- E 8.718526 -1.103986 104.433300
- S 0 0 0.000000 0.000000 1.297000 0.000000
- S 0 0 1.297000 0.000000 7.561000 0.000000
- S 0 0 7.561000 0.000000 8.858000 0.000000
- S 0 0 0.140000 1.104000 1.396000 0.781000
- S 0 0 1.396000 0.781000 7.462000 -0.781000
- S 0 0 7.462000 -0.781000 8.719000 -1.104000
- C 0 0 24.734000 1.297000 -24.734000 0.000000 14.433000
- C 0 0 -24.734000 7.561000 24.734000 180.000000 14.433000
- END
-# Crossing Design by Dave Bullis - 8.858268 14.433330 8.858268
-TURNOUT HO "Märklin K-Track Large 14.433 Crossing 2257"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 8.858268 0.000000 90.000000
- E 0.139791 1.103976 284.433330
- E 8.718477 -1.103976 104.433330
- S 0 0 0.000000 0.000000 8.858000 0.000000
- S 0 0 0.140000 1.104000 8.718000 -1.104000
- END
-TURNOUT HO "Märklin K-Track Straight Uncoupler 90mm 2297"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.543307 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 3.543307 0.000000
- F 0 0.000000 4
- 0.666667 -0.090000
- 2.876640 -0.090000
- 2.876640 0.080000
- 0.666667 0.080000
- END
-TURNOUT HO "Märklin K-Track Straight Circuit 90mm 2299"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.543307 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 3.543307 0.000000
- G 16711680 0.000000 0.400000 1.77000 0.000000
- END
-TURNOUT HO "Märklin K-Track Curved Circuit R=360mm 15° 2229"
- U "Curved Section" "" "Märklin K-Track" "Bogen Kontaktgleis-Schleifer" "2229" 6.581313 15.000000 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.668301 -0.482941 105.000000
- C 0 0 14.173228 0.000000 -14.173228 0.000000 15.000000
- G 16711680 0.000000 0.400000 1.834150 -0.121254
- END
-TURNOUT HO "Märklin K-Track Curved Circuit R=424.6mm 15° 2239"
- U "Curved Section" "" "Märklin K-Track" "Bogen Kontaktgleis Schleifer" "2239" 6.581313 15.000000 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.326558 -0.569602 105.000000
- C 0 0 16.717000 0.000000 -16.717000 0.000000 15.000000
- G 16711680 0.0000000 0.400000 2.163279 -0.143016
- END
-TURNOUT HO "Märklin K-Track Lighted Bumper 38mm 7389"
- U "Straight Section" "" "Märklin K-Track" "Prellbock beleuchtet" "7389" 0.589001 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0.000000 0.000000 0.000000 1.496063 0.000000
- F 8421504 0.026667 4
- 0.748031 -0.769333
- 1.500000 -0.769333
- 1.500000 0.769333
- 0.748031 0.769333
- G 16711680 0.000000 0.300000 0.800000 0.00000
- END
-TURNOUT HO "Märklin K-Track Bumper 38mm 7391"
- U "Straight Section" "" "Märklin K-Track" "Prellbock" "7391" 0.589001 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0.000000 0.000000 0.000000 1.496063 0.000000
- F 8421504 0.026667 4
- 0.748031 -0.769333
- 1.500000 -0.769333
- 1.500000 0.769333
- 0.748031 0.769333
- END
-TURNOUT HO "Märklin K-Track Straight Feeder 2290"
- U "Straight Section" "Dave Bullis" "Märklin K-Track" "Straight Feeder" "2290" 7.086614 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.086614 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 7.086614 0.000000
- F3 12566463 0.000000 4
- 3.986220 0.314961 0
- 3.100394 0.314961 0
- 3.248031 0.708661 0
- 3.838583 0.708661 0
- G3 0 0.000000 0.078740 3.395669 0.551181 0
- G3 0 0.000000 0.078740 3.690945 0.551181 0
- END
-TURNOUT HO "Märklin K-Track Straight K to M Adapter 2291"
- U "Straight Section" "Dave Bullis" "Märklin K-Track" "Straight K to M Adapter" "2291" 7.086614 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.086614 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 7.086614 0.000000
- END
-TURNOUT HO "Märklin K-Track Straight Feeder w/ Capacitor 2292"
- U "Straight Section" "Dave Bullis" "Märklin K-Track" "Straight Feeder w/ Capacitor" "2292" 7.086614 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.086614 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 7.086614 0.000000
- F3 12566463 0.000000 4
- 3.986220 0.314961 0
- 3.100394 0.314961 0
- 3.248031 0.708661 0
- 3.838583 0.708661 0
- G3 0 0.000000 0.078740 3.395669 0.551181 0
- G3 0 0.000000 0.078740 3.690945 0.551181 0
- L3 0 0.040000 3.543307 0.314961 0 3.543307 0.078740 0
- L3 0 0.040000 3.543307 -0.314961 0 3.543307 -0.078740 0
- L3 0 0.040000 3.248031 0.078740 0 3.838583 0.078740 0
- L3 0 0.040000 3.248031 -0.078740 0 3.838583 -0.078740 0
- END
-TURNOUT HO "Märklin K-Track Contact Set 2295"
- U "Straight Section" "Dave Bullis" "Märklin K-Track" "Contact Set" "2295" 7.086614 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.086614 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 7.086614 0.000000
- F3 12566463 0.000000 4
- 6.496063 0.314961 0
- 6.496063 0.708661 0
- 6.200787 0.708661 0
- 6.200787 0.314961 0
- F3 12566463 0.000000 4
- 4.133858 0.314961 0
- 4.133858 0.708661 0
- 4.429134 0.708661 0
- 4.429134 0.314961 0
- G3 0 0.000000 0.078740 4.281496 0.551181 0
- G3 0 0.000000 0.078740 6.348425 0.551181 0
- L3 0 0.040000 3.543307 0.393701 0 3.543307 -0.393701 0
- END
+CONTENTS Mrklin K-Track HO-Scale
+# From 'Mrklin Complete Program 1994/95 E'
+
+SUBCONTENTS Mrklin K-Track Straight Tracks
+# Straight Section Design by Dave Bullis - 7.086614
+TURNOUT HO "Mrklin K-Track Straight 180mm 2200"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 0.000000 90.000000
+ S 0 0 0.000000 0.000000 7.087000 0.000000
+ END
+TURNOUT HO "Mrklin K-Track Straight 168.9mm 2206"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.649606 0.000000 90.000000
+ S 0 0 0.000000 0.000000 6.650000 0.000000
+ END
+TURNOUT HO "Mrklin K-Track Straight 217.9mm 2209"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 8.578740 0.000000 90.000000
+ S 0 0 0.000000 0.000000 8.579000 0.000000
+ END
+TURNOUT HO "Mrklin K-Track Straight 156mm 2207"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.141732 0.000000 90.000000
+ S 0 0 0.000000 0.000000 6.142000 0.000000
+ END
+TURNOUT HO "Mrklin K-Track Straight 90mm 2201"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.543307 0.000000 90.000000
+ S 0 0 0.000000 0.000000 3.543000 0.000000
+ END
+TURNOUT HO "Mrklin K-Track Straight 45mm 2202"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.771654 0.000000 90.000000
+ S 0 0 0.000000 0.000000 1.772000 0.000000
+ END
+TURNOUT HO "Mrklin K-Track Straight 41.3mm 2293"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.625984 0.000000 90.000000
+ S 0 0 0.000000 0.000000 1.626000 0.000000
+ END
+TURNOUT HO "Mrklin K-Track Straight 35.1mm 2208"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.381890 0.000000 90.000000
+ S 0 0 0.000000 0.000000 1.382000 0.000000
+ END
+TURNOUT HO "Mrklin K-Track Straight 30mm 2203"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.181102 0.000000 90.000000
+ S 0 0 0.000000 0.000000 1.181000 0.000000
+ END
+TURNOUT HO "Mrklin K-Track Straight 22.5mm 2204"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 0.885827 0.000000 90.000000
+ S 0 0 0.000000 0.000000 0.886000 0.000000
+ END
+
+SUBCONTENTS Mrklin K-Track Curve Tracks
+TURNOUT HO "Mrklin K-Track Curved 295.4mm 45 2210"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 8.223596 -3.406325 135.000000
+ C 0 0 11.630000 0.000000 -11.630000 0.000000 45.000000
+ END
+TURNOUT HO "Mrklin K-Track Curved 360mm 30 2221"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 -1.898853 120.000000
+ C 0 0 14.173000 0.000000 -14.173000 0.000000 30.000000
+ END
+TURNOUT HO "Mrklin K-Track Curved 360mm 15 2223"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.668301 -0.482941 105.000000
+ C 0 0 14.173000 0.000000 -14.173000 0.000000 15.000000
+ END
+TURNOUT HO "Mrklin K-Track Curved 360mm 7.5 2224"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.849978 -0.121254 97.500000
+ C 0 0 14.173000 0.000000 -14.173000 0.000000 7.500000
+ END
+TURNOUT HO "Mrklin K-Track Curved 424.6mm 30 2231"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 8.358268 -2.239591 120.000000
+ C 0 0 16.717000 0.000000 -16.717000 0.000000 30.000000
+ END
+TURNOUT HO "Mrklin K-Track Curved 424.6mm 22.5 2232"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.397141 -1.272470 112.500000
+ C 0 0 16.717000 0.000000 -16.717000 0.000000 22.500000
+ END
+TURNOUT HO "Mrklin K-Track Curved 424.6mm 15 2233"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.326558 -0.569602 105.000000
+ C 0 0 16.717000 0.000000 -16.717000 0.000000 15.000000
+ END
+TURNOUT HO "Mrklin K-Track Curved 424.6mm 7.5 2234"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.181946 -0.143012 97.500000
+ C 0 0 16.717000 0.000000 -16.717000 0.000000 7.500000
+ END
+TURNOUT HO "Mrklin K-Track Curved 424.6mm 3.75 2235"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.093314 -0.035791 93.750000
+ C 0 0 16.717000 0.000000 -16.717000 0.000000 3.750000
+ END
+TURNOUT HO "Mrklin K-Track Curved 553.9 30 2241"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.903543 -2.921596 120.000000
+ C 0 0 21.807000 0.000000 -21.807000 0.000000 30.000000
+ END
+TURNOUT HO "Mrklin K-Track Curved 618.5 30 2251"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 12.175197 -3.262334 120.000000
+ C 0 0 24.350000 0.000000 -24.350000 0.000000 30.000000
+ END
+
+SUBCONTENTS Mrklin K-Track Turnouts
+# Double Slipswitch Design by Dave Bullis - 6.649606 22.500000 6.649606
+TURNOUT HO "Mrklin K-Track 22.5 Double Slip 2260"
+ P "Normal" 1 2 3 0 4 5 6
+ P "Reverse" 1 7 6 0 4 8 3
+ E 0.000000 0.000000 270.000000
+ E 6.649606 0.000000 90.000000
+ E 0.253086 1.272347 292.500000
+ E 6.396520 -1.272347 112.500000
+ S 0 0 0.000000 0.000000 1.297000 0.000000
+ S 0 0 1.297000 0.000000 5.352000 0.000000
+ S 0 0 5.352000 0.000000 6.650000 0.000000
+ S 0 0 0.253000 1.272000 1.452000 0.776000
+ S 0 0 1.452000 0.776000 5.198000 -0.776000
+ S 0 0 5.198000 -0.776000 6.397000 -1.272000
+ C 0 0 10.193000 1.297000 -10.193000 0.000000 22.500000
+ C 0 0 -10.193000 5.352000 10.193000 180.000000 22.500000
+ END
+TURNOUT HO "Mrklin K-Track Left Turnout R424.6mm 2262"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 6.649606 0.000000 90.000000
+ E 6.397141 1.272470 67.500000
+ S 0 0 0.000000 0.000000 6.650000 0.000000
+ C 0 0 -16.717000 0.000000 16.717000 157.500000 22.500000
+ END
+TURNOUT HO "Mrklin K-Track Right Turnout R424.6mm 2263"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 6.649606 0.000000 90.000000
+ E 6.397141 -1.272470 112.500000
+ S 0 0 0.000000 0.000000 6.650000 0.000000
+ C 0 0 16.717000 0.000000 -16.717000 0.000000 22.500000
+ END
+TURNOUT HO "Mrklin K-Track Left Manual Turnout R424.6mm 2265"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 6.649606 0.000000 90.000000
+ E 6.397141 1.272470 67.500000
+ S 0 0 0.000000 0.000000 6.650000 0.000000
+ C 0 0 -16.717000 0.000000 16.717000 157.500000 22.500000
+ END
+TURNOUT HO "Mrklin K-Track Right Manual Turnout R424.6mm 2266"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 6.649606 0.000000 90.000000
+ E 6.397141 -1.272470 112.500000
+ S 0 0 0.000000 0.000000 6.650000 0.000000
+ C 0 0 16.717000 0.000000 -16.717000 0.000000 22.500000
+ END
+TURNOUT HO "Mrklin K-Track Left Curved Turnout 2268"
+ P "Normal" 1 2
+ P "Reverse" 3
+ E 0.000000 0.000000 270.000000
+ E 9.629921 1.898853 60.000000
+ E 7.086614 1.898853 60.000000
+ S 0 0 0.000000 0.000000 2.543000 0.000000
+ C 0 0 -16.717000 1.866000 16.703000 152.324000 25.352000
+ C 0 0 -14.173000 0.000000 14.173000 150.000000 30.000000
+ END
+TURNOUT HO "Mrklin K-Track Right Curved Turnout 2269"
+ P "Normal" 1 2
+ P "Reverse" 3
+ E 0.000000 0.000000 270.000000
+ E 9.629921 -1.898853 120.000000
+ E 7.086614 -1.898853 120.000000
+ S 0 0 0.000000 0.000000 2.543000 0.000000
+ C 0 0 14.173000 2.543000 -14.173000 0.000000 30.000000
+ C 0 0 14.173000 0.000000 -14.173000 0.000000 30.000000
+ END
+TURNOUT HO "Mrklin K-Track 3-Way Turnout 2270"
+ P "Normal" 1
+ P "Right" 2
+ P "Left" 3
+ E 0.000000 0.000000 270.000000
+ E 6.649606 0.000000 90.000000
+ E 6.397141 -1.272470 112.500000
+ E 6.397141 1.272470 67.500000
+ S 0 0 0.000000 0.000000 6.650000 0.000000
+ C 0 0 16.717000 0.000000 -16.717000 0.000000 22.500000
+ C 0 0 -16.717000 0.000000 16.717000 157.500000 22.500000
+ END
+TURNOUT HO "Mrklin K-Track Large Left Turnout 2272"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 8.858268 0.000000 90.000000
+ E 8.855363 1.121310 75.566667
+ S 0 0 0.000000 0.000000 8.858000 0.000000
+ C 0 0 -35.528000 0.000000 35.528000 165.567000 14.433000
+ END
+TURNOUT HO "Mrklin K-Track Large Right Turnout 2273"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 8.858268 0.000000 90.000000
+ E 8.855363 -1.121310 104.433333
+ S 0 0 0.000000 0.000000 8.858000 0.000000
+ C 0 0 35.528000 0.000000 -35.528000 0.000000 14.433000
+ END
+TURNOUT HO "Mrklin K-Track Large Curve 902.4mm 2274"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 8.855363 -1.121310 104.433333
+ C 0 0 35.528000 0.000000 -35.528000 0.000000 14.433000
+ END
+# Double Slipswitch Design by Dave Bullis - 8.858268 14.433300 8.858368
+TURNOUT HO "Mrklin K-Track Large Double Slip 2275"
+ P "Normal" 1 2 3 0 4 5 6
+ P "Reverse" 1 7 6 0 4 8 3
+ E 0.000000 0.000000 270.000000
+ E 8.858268 0.000000 90.000000
+ E 0.139742 1.103986 284.433330
+ E 8.718526 -1.103986 104.433300
+ S 0 0 0.000000 0.000000 1.297000 0.000000
+ S 0 0 1.297000 0.000000 7.561000 0.000000
+ S 0 0 7.561000 0.000000 8.858000 0.000000
+ S 0 0 0.140000 1.104000 1.396000 0.781000
+ S 0 0 1.396000 0.781000 7.462000 -0.781000
+ S 0 0 7.462000 -0.781000 8.719000 -1.104000
+ C 0 0 24.734000 1.297000 -24.734000 0.000000 14.433000
+ C 0 0 -24.734000 7.561000 24.734000 180.000000 14.433000
+ END
+
+SUBCONTENTS Mrklin K-Track Crossings
+# Crossing Design by Dave Bullis - 8.858268 14.433330 8.858268
+TURNOUT HO "Mrklin K-Track Large 14.433 Crossing 2257"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 8.858268 0.000000 90.000000
+ E 0.139791 1.103976 284.433330
+ E 8.718477 -1.103976 104.433330
+ S 0 0 0.000000 0.000000 8.858000 0.000000
+ S 0 0 0.140000 1.104000 8.718000 -1.104000
+ END
+# Crossing Design by Dave Bullis - 6.649606 22.500000 6.649606
+TURNOUT HO "Mrklin K-Track 22.5 Crossing 2259"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 6.649606 0.000000 90.000000
+ E 0.253086 1.272347 292.500000
+ E 6.396520 -1.272347 112.500000
+ S 0 0 0.000000 0.000000 6.650000 0.000000
+ S 0 0 0.253000 1.272000 6.397000 -1.272000
+ END
+# Crossing Design by Dave Bullis - 3.543307 45.000000 3.543307
+TURNOUT HO "Mrklin K-Track 45 Crossing 2258"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 3.543307 0.000000 90.000000
+ E 0.518905 1.252748 315.000000
+ E 3.024402 -1.252748 135.000000
+ S 0 0 0.000000 0.000000 3.543000 0.000000
+ S 0 0 0.519000 1.253000 3.024000 -1.253000
+ END
+
+SUBCONTENTS Mrklin K-Track Mics Tracks
+TURNOUT HO "Mrklin K-Track Straight Uncoupler 90mm 2297"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.543307 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 3.543307 0.000000
+ F 0 0.000000 4
+ 0.666667 -0.090000
+ 2.876640 -0.090000
+ 2.876640 0.080000
+ 0.666667 0.080000
+ END
+TURNOUT HO "Mrklin K-Track Straight Circuit 90mm 2299"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.543307 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 3.543307 0.000000
+ G 16711680 0.000000 0.400000 1.77000 0.000000
+ END
+TURNOUT HO "Mrklin K-Track Curved Circuit R=360mm 15 2229"
+ U "Curved Section" "" "Mrklin K-Track" "Bogen Kontaktgleis-Schleifer" "2229" 6.581313 15.000000 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.668301 -0.482941 105.000000
+ C 0 0 14.173228 0.000000 -14.173228 0.000000 15.000000
+ G 16711680 0.000000 0.400000 1.834150 -0.121254
+ END
+TURNOUT HO "Mrklin K-Track Curved Circuit R=424.6mm 15 2239"
+ U "Curved Section" "" "Mrklin K-Track" "Bogen Kontaktgleis Schleifer" "2239" 6.581313 15.000000 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.326558 -0.569602 105.000000
+ C 0 0 16.717000 0.000000 -16.717000 0.000000 15.000000
+ G 16711680 0.0000000 0.400000 2.163279 -0.143016
+ END
+TURNOUT HO "Mrklin K-Track Lighted Bumper 38mm 7389"
+ U "Straight Section" "" "Mrklin K-Track" "Prellbock beleuchtet" "7389" 0.589001 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0.000000 0.000000 0.000000 1.496063 0.000000
+ F 8421504 0.026667 4
+ 0.748031 -0.769333
+ 1.500000 -0.769333
+ 1.500000 0.769333
+ 0.748031 0.769333
+ G 16711680 0.000000 0.300000 0.800000 0.00000
+ END
+TURNOUT HO "Mrklin K-Track Bumper 38mm 7391"
+ U "Straight Section" "" "Mrklin K-Track" "Prellbock" "7391" 0.589001 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0.000000 0.000000 0.000000 1.496063 0.000000
+ F 8421504 0.026667 4
+ 0.748031 -0.769333
+ 1.500000 -0.769333
+ 1.500000 0.769333
+ 0.748031 0.769333
+ END
+TURNOUT HO "Mrklin K-Track Straight Feeder 2290"
+ U "Straight Section" "Dave Bullis" "Mrklin K-Track" "Straight Feeder" "2290" 7.086614 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 7.086614 0.000000
+ F3 12566463 0.000000 4
+ 3.986220 0.314961 0
+ 3.100394 0.314961 0
+ 3.248031 0.708661 0
+ 3.838583 0.708661 0
+ G3 0 0.000000 0.078740 3.395669 0.551181 0
+ G3 0 0.000000 0.078740 3.690945 0.551181 0
+ END
+TURNOUT HO "Mrklin K-Track Straight K to M Adapter 2291"
+ U "Straight Section" "Dave Bullis" "Mrklin K-Track" "Straight K to M Adapter" "2291" 7.086614 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 7.086614 0.000000
+ END
+TURNOUT HO "Mrklin K-Track Straight Feeder w/ Capacitor 2292"
+ U "Straight Section" "Dave Bullis" "Mrklin K-Track" "Straight Feeder w/ Capacitor" "2292" 7.086614 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 7.086614 0.000000
+ F3 12566463 0.000000 4
+ 3.986220 0.314961 0
+ 3.100394 0.314961 0
+ 3.248031 0.708661 0
+ 3.838583 0.708661 0
+ G3 0 0.000000 0.078740 3.395669 0.551181 0
+ G3 0 0.000000 0.078740 3.690945 0.551181 0
+ L3 0 0.040000 3.543307 0.314961 0 3.543307 0.078740 0
+ L3 0 0.040000 3.543307 -0.314961 0 3.543307 -0.078740 0
+ L3 0 0.040000 3.248031 0.078740 0 3.838583 0.078740 0
+ L3 0 0.040000 3.248031 -0.078740 0 3.838583 -0.078740 0
+ END
+TURNOUT HO "Mrklin K-Track Contact Set 2295"
+ U "Straight Section" "Dave Bullis" "Mrklin K-Track" "Contact Set" "2295" 7.086614 0.000000 0.000000 0
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 7.086614 0.000000
+ F3 12566463 0.000000 4
+ 6.496063 0.314961 0
+ 6.496063 0.708661 0
+ 6.200787 0.708661 0
+ 6.200787 0.314961 0
+ F3 12566463 0.000000 4
+ 4.133858 0.314961 0
+ 4.133858 0.708661 0
+ 4.429134 0.708661 0
+ 4.429134 0.314961 0
+ G3 0 0.000000 0.078740 4.281496 0.551181 0
+ G3 0 0.000000 0.078740 6.348425 0.551181 0
+ L3 0 0.040000 3.543307 0.393701 0 3.543307 -0.393701 0
+ END
+
+SUBCONTENTS Mrklin K/M-Track Turntables
+TURNOUT HO "Marklin K/M-Track Turntable 12.2"" Dia 7.5d 48 Positions 7286"
+ P "1" 1
+ P "2" 2
+ P "3" 3
+ P "4" 4
+ P "5" 5
+ P "6" 6
+ P "7" 7
+ P "8" 8
+ P "9" 9
+ P "10" 10
+ P "11" 11
+ P "12" 12
+ P "13" 13
+ P "14" 14
+ P "15" 15
+ P "16" 16
+ P "17" 17
+ P "18" 18
+ P "19" 19
+ P "20" 20
+ P "21" 21
+ P "22" 22
+ P "23" 23
+ P "24" 24
+ G3 0 0.000000 0.129736 0.000000 0.000000 0 0.000000 360.000000
+ A3 0 0.031250 6.102362 0.000000 0.000000 0 0.000000 360.000000
+ A3 0 0.031250 7.598425 0.000000 0.000000 0 0.000000 360.000000
+ E 0.000000 6.102362 0.000000
+ E 0.796518 6.050155 7.500000
+ E 1.579408 5.894429 15.000000
+ E 2.335273 5.637847 22.500000
+ E 3.051181 5.284801 30.000000
+ E 3.714883 4.841329 37.500000
+ E 4.315022 4.315022 45.000000
+ E 4.841329 3.714883 52.500000
+ E 5.284801 3.051181 60.000000
+ E 5.637847 2.335273 67.500000
+ E 5.894429 1.579408 75.000000
+ E 6.050155 0.796518 82.500000
+ E 6.102362 0.000000 90.000000
+ E 6.050155 -0.796518 97.500000
+ E 5.894429 -1.579408 105.000000
+ E 5.637847 -2.335273 112.500000
+ E 5.284801 -3.051181 120.000000
+ E 4.841329 -3.714883 127.500000
+ E 4.315022 -4.315022 135.000000
+ E 3.714883 -4.841329 142.500000
+ E 3.051181 -5.284801 150.000000
+ E 2.335273 -5.637847 157.500000
+ E 1.579408 -5.894429 165.000000
+ E 0.796518 -6.050155 172.500000
+ E 0.000000 -6.102362 180.000000
+ E -0.796518 -6.050155 187.500000
+ E -1.579408 -5.894429 195.000000
+ E -2.335273 -5.637847 202.500000
+ E -3.051181 -5.284801 210.000000
+ E -3.714883 -4.841329 217.500000
+ E -4.315022 -4.315022 225.000000
+ E -4.841329 -3.714883 232.500000
+ E -5.284801 -3.051181 240.000000
+ E -5.637847 -2.335273 247.500000
+ E -5.894429 -1.579408 255.000000
+ E -6.050155 -0.796518 262.500000
+ E -6.102362 0.000000 270.000000
+ E -6.050155 0.796518 277.500000
+ E -5.894429 1.579408 285.000000
+ E -5.637847 2.335273 292.500000
+ E -5.284801 3.051181 300.000000
+ E -4.841329 3.714883 307.500000
+ E -4.315022 4.315022 315.000000
+ E -3.714883 4.841329 322.500000
+ E -3.051181 5.284801 330.000000
+ E -2.335273 5.637847 337.500000
+ E -1.579408 5.894429 345.000000
+ E -0.796518 6.050155 352.500000
+ S 16777215 0 0.000000 6.102362 0.000000 -6.102362
+ S 16777215 0 0.796518 6.050155 -0.796518 -6.050155
+ S 16777215 0 1.579408 5.894429 -1.579408 -5.894429
+ S 16777215 0 2.335273 5.637847 -2.335273 -5.637847
+ S 16777215 0 3.051181 5.284801 -3.051181 -5.284801
+ S 16777215 0 3.714883 4.841329 -3.714883 -4.841329
+ S 16777215 0 4.315022 4.315022 -4.315022 -4.315022
+ S 16777215 0 4.841329 3.714883 -4.841329 -3.714883
+ S 16777215 0 5.284801 3.051181 -5.284801 -3.051181
+ S 16777215 0 5.637847 2.335273 -5.637847 -2.335273
+ S 16777215 0 5.894429 1.579408 -5.894429 -1.579408
+ S 16777215 0 6.050155 0.796518 -6.050155 -0.796518
+ S 16777215 0 6.102362 0.000000 -6.102362 0.000000
+ S 16777215 0 6.050155 -0.796518 -6.050155 0.796518
+ S 16777215 0 5.894429 -1.579408 -5.894429 1.579408
+ S 16777215 0 5.637847 -2.335273 -5.637847 2.335273
+ S 16777215 0 5.284801 -3.051181 -5.284801 3.051181
+ S 16777215 0 4.841329 -3.714883 -4.841329 3.714883
+ S 16777215 0 4.315022 -4.315022 -4.315022 4.315022
+ S 16777215 0 3.714883 -4.841329 -3.714883 4.841329
+ S 16777215 0 3.051181 -5.284801 -3.051181 5.284801
+ S 16777215 0 2.335273 -5.637847 -2.335273 5.637847
+ S 16777215 0 1.579408 -5.894429 -1.579408 5.894429
+ S 16777215 0 0.796518 -6.050155 -0.796518 6.050155
+END
+TURNOUT HO "Mrklin K/M-Track Turntable Position Track 38mm 7287"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.496063 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 1.496063 0.000000
+END
+TURNOUT HO "Mrklin K/M-Track Turntable Position Dummy Track 38mm 7287"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 16777215 0.000000 0.000000 0.000000 1.496063 0.000000
+ L3 0 0.060000 0.000000 0.324340 0 1.496063 0.324340 0
+ L3 0 0.060000 0.000000 -0.324340 0 1.496063 -0.324340 0
+END
diff --git a/app/lib/params/mrklnhom.xtp b/app/lib/params/HO-Marklin M-Track.xtp
index 88f105e..68db2ac 100644
--- a/app/lib/params/mrklnhom.xtp
+++ b/app/lib/params/HO-Marklin M-Track.xtp
@@ -1,906 +1,1072 @@
-CONTENTS Märklin M-Track HO-Scale
-TURNOUT HO "Märklin M-Track Straight 180mm 5106"
- U "Straight Section" "Dave Bullis" "Märklin M-Track" "Straight 180mm" "5106" 7.086614 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.086614 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 7.086614 0.000000
- L3 16754688 0.053333 -0.000000 -0.738189 0 7.086614 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 7.086614 0.738189 0
- END
-TURNOUT HO "Märklin M-Track Straight 90mm 5107"
- U "Straight Section" "Dave Bullis" "Märklin M-Track" "Straight 90mm" "5107" 3.543307 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.543307 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 3.543307 0.000000
- L3 16754688 0.053333 -0.000000 -0.738189 0 3.543307 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 3.543307 0.738189 0
- END
-TURNOUT HO "Märklin M-Track Straight 70mm 5129"
- U "Straight Section" "Dave Bullis" "Märklin M-Track" "Straight 70mm" "5129" 2.755906 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.755906 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 2.755906 0.000000
- L3 16754688 0.053333 -0.000000 -0.738189 0 2.755906 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 2.755906 0.738189 0
- END
-TURNOUT HO "Märklin M-Track Straight 45mm 5108"
- U "Straight Section" "Dave Bullis" "Märklin M-Track" "Straight 45mm" "5108" 1.771654 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.771654 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 1.771654 0.000000
- L3 16754688 0.053333 -0.000000 -0.738189 0 1.771654 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 1.771654 0.738189 0
- END
-TURNOUT HO "Märklin M-Track Straight 33.5mm 5109"
- U "Straight Section" "Dave Bullis" "Märklin M-Track" "Straight 33.5mm" "5109" 1.318898 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.318898 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 1.318898 0.000000
- L3 16754688 0.053333 -0.000000 -0.738189 0 1.318898 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 1.318898 0.738189 0
- END
-TURNOUT HO "Märklin M-Track Straight 22.5mm 5110"
- U "Straight Section" "Dave Bullis" "Märklin M-Track" "Straight 22.5mm" "5110" 0.885827 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 0.885827 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 0.885827 0.000000
- L3 16754688 0.053333 -0.000000 -0.738189 0 0.885827 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 0.885827 0.738189 0
- END
-TURNOUT HO "Märklin M-Track Straight 16mm 5210"
- U "Straight Section" "Dave Bullis" "Märklin M-Track" "Straight 16mm" "5210" 0.629921 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 0.629921 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 0.629921 0.000000
- L3 16754688 0.053333 -0.000000 -0.738189 0 0.629921 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 0.629921 0.738189 0
- END
-TURNOUT HO "Märklin M-Track Straight 8mm 5208"
- U "Straight Section" "Dave Bullis" "Märklin M-Track" "Straight 8mm" "5208" 0.314961 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 0.314961 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 0.314961 0.000000
- L3 16754688 0.053333 -0.000000 -0.738189 0 0.314961 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 0.314961 0.738189 0
- END
-TURNOUT HO "Märklin M-Track Curved R286 45° 5120"
- U "Curved Section" "Dave Bullis" "Märklin M-Track" "Curved R386 45°" "5120" 11.259843 45.000000 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.961911 3.297932 45.000000
- C 0 0.000000 -11.259843 0.000000 11.259843 135.000000 45.000000
- A3 16754688 0.053333 11.998032 0.000000 11.259843 0 135.000000 45.000000
- A3 16754688 0.053333 10.521654 0.000000 11.259843 0 135.000000 45.000000
- END
-TURNOUT HO "Märklin M-Track Curved R360 30° 5100"
- U "Curved Section" "Dave Bullis" "Märklin M-Track" "Curved R360 30°" "5100" 14.173228 30.000000 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.086614 1.898853 60.000000
- C 0 0.000000 -14.173228 0.000000 14.173228 150.000000 30.000000
- A3 16754688 0.053333 14.911417 0.000000 14.173228 0 150.000000 30.000000
- A3 16754688 0.053333 13.435039 0.000000 14.173228 0 150.000000 30.000000
- END
-TURNOUT HO "Märklin M-Track Curved R360 15° 5101"
- U "Curved Section" "Dave Bullis" "Märklin M-Track" "Curved R360 15°" "5101" 14.173228 15.000000 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.668301 0.482941 75.000000
- C 0 0.000000 -14.173228 0.000000 14.173228 165.000000 15.000000
- A3 16754688 0.053333 14.911417 0.000000 14.173228 0 165.000000 15.000000
- A3 16754688 0.053333 13.435039 0.000000 14.173228 0 165.000000 15.000000
- END
-TURNOUT HO "Märklin M-Track Curved R360 7.5° 5102"
- U "Curved Section" "Dave Bullis" "Märklin M-Track" "Curved R360 7.5°" "5102" 14.173228 7.500000 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.849978 0.121254 82.500000
- C 0 0.000000 -14.173228 0.000000 14.173228 172.500000 7.500000
- A3 16754688 0.053333 14.911417 0.000000 14.173228 0 172.500000 7.500000
- A3 16754688 0.053333 13.435039 0.000000 14.173228 0 172.500000 7.500000
- END
-TURNOUT HO "Märklin M-Track Curved R437.4 30° 5200"
- U "Curved Section" "Dave Bullis" "Märklin M-Track" "Curved R437.4 30°" "5200" 17.220472 30.000000 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 8.610236 2.307106 60.000000
- C 0 0.000000 -17.220472 0.000000 17.220472 150.000000 30.000000
- A3 16754688 0.053333 17.958661 0.000000 17.220472 0 150.000000 30.000000
- A3 16754688 0.053333 16.482283 0.000000 17.220472 0 150.000000 30.000000
- END
-TURNOUT HO "Märklin M-Track Curved R437.4 24°17' 5206"
- U "Curved Section" "Dave Bullis" "Märklin M-Track" "Curved R437.4 24°17'" "5206" 17.220472 24.299000 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.086198 1.525554 65.701000
- C 0 0.000000 -17.220472 0.000000 17.220472 155.701000 24.299000
- A3 16754688 0.053333 17.958661 0.000000 17.220472 0 155.701000 24.299000
- A3 16754688 0.053333 16.482283 0.000000 17.220472 0 155.701000 24.299000
- END
-TURNOUT HO "Märklin M-Track Curved R437.4 15° 5201"
- U "Curved Section" "Dave Bullis" "Märklin M-Track" "Curved R437.4 15°" "5201" 17.220472 15.000000 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.456986 0.586773 75.000000
- C 0 0.000000 -17.220472 0.000000 17.220472 165.000000 15.000000
- A3 16754688 0.053333 17.958661 0.000000 17.220472 0 165.000000 15.000000
- A3 16754688 0.053333 16.482283 0.000000 17.220472 0 165.000000 15.000000
- END
-TURNOUT HO "Märklin M-Track Curved R437.4 5°43' 5205"
- U "Curved Section" "Dave Bullis" "Märklin M-Track" "Curved R437.4 5°43'" "5205" 17.220472 5.717000 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.715417 0.085654 84.283000
- C 0 0.000000 -17.220472 0.000000 17.220472 174.283000 5.717000
- A3 16754688 0.053333 17.958661 0.000000 17.220472 0 174.283000 5.717000
- A3 16754688 0.053333 16.482283 0.000000 17.220472 0 174.283000 5.717000
- END
-TURNOUT HO "Märklin M-Track Left Turnout R437.4mm 5203"
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.015738 0.764231 270.000000
- E 7.102352 0.764231 90.000000
- E 7.102352 2.287848 65.701000
- S 0 0.000000 0.015738 0.764231 0.673750 0.764231
- S 0 0.000000 0.673750 0.764231 7.102352 0.764231
- C 0 0.000000 -14.185863 0.673750 14.950094 155.701000 24.299000
- S 0 0.000000 6.511211 2.020950 7.102352 2.287848
- L3 255 0.062500 5.173217 2.279979 0 1.473613 2.279979 0
- L3 255 0.062500 0.014716 1.501877 0 1.473452 2.280525 0
- L3 16754688 0.052083 0.015738 0.026042 0 7.102352 0.026042 0
- L3 16754688 0.052083 0.015738 1.502420 0 0.673750 1.502420 0
- A3 16754688 0.052083 13.447674 0.673750 14.950094 0 155.701000 24.299000
- L3 16754688 0.052083 7.147492 1.498287 0 7.406116 1.615055 0
- L3 16754688 0.052083 6.207448 2.693743 0 6.798588 2.960641 0
- END
-TURNOUT HO "Märklin M-Track Right Turnout R437.4mm 5204"
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.015740 2.220145 270.000000
- E 7.102354 2.220163 90.000000
- E 7.102358 0.696546 114.299000
- S 0 0.000000 0.015740 2.220145 0.673752 2.220145
- S 0 0.000000 0.673752 2.220145 7.102354 2.220145
- C 0 0.000000 14.185863 0.673752 -11.965718 0.000000 24.299000
- S 0 0.000000 6.511213 0.963426 7.102354 0.696528
- L3 255 0.062500 5.173217 0.704397 0 1.473613 0.704397 0
- L3 255 0.062500 0.014716 1.482499 0 1.473452 0.703851 0
- L3 16754688 0.052083 0.015740 2.958334 0 7.102354 2.958334 0
- L3 16754688 0.052083 0.015740 1.481956 0 0.673752 1.481956 0
- A3 16754688 0.052083 13.447674 0.673752 -11.965718 0 0.000000 24.299000
- L3 16754688 0.052083 7.147494 1.486089 0 7.406118 1.369321 0
- L3 16754688 0.052083 6.207450 0.290633 0 6.798590 0.023735 0
- END
-TURNOUT HO "Märklin M-Track Left Turnout R360 30° 5118"
- P "P0" 1 2
- P "P1" 1 3 4 5
- E 0.050937 0.764231 270.000000
- E 7.137551 0.764231 90.000000
- E 7.137552 2.663083 60.000000
- S 0 0.000000 0.050937 0.764231 0.699537 0.764231
- S 0 0.000000 0.699537 0.764231 7.137551 0.764231
- C 0 0.000000 -10.912495 0.699537 11.676726 157.500000 22.500000
- S 0 0.000000 4.875568 1.594895 5.474797 1.843104
- C 0 0.000000 -14.173228 0.050942 14.937461 150.000000 7.500000
- L3 16754688 0.052083 0.050937 0.026042 0 7.137551 0.026042 0
- L3 16754688 0.052083 0.050937 1.502420 0 0.699537 1.502420 0
- L3 16754688 0.052083 6.131611 1.502420 0 7.137551 1.502420 0
- A3 16754688 0.052083 10.174306 0.699537 11.676726 0 157.500000 22.500000
- L3 16754688 0.052083 4.593075 2.276893 0 5.192304 2.525102 0
- A3 16754688 0.052083 14.911417 0.050942 14.937461 0 150.000000 7.500000
- A3 16754688 0.052083 13.435039 0.050942 14.937461 0 150.000000 7.500000
- L3 255 0.062500 1.113929 2.273622 0 3.653299 2.785433 0
- A3 255 0.062500 0.765750 0.031252 2.261812 0 119.069011 60.930989
- A3 255 0.062500 0.535767 1.219930 1.738603 0 284.205205 64.383726
- A3 255 0.062500 0.742961 4.779596 3.159672 0 160.201031 55.858005
- A3 255 0.062500 0.777127 3.808337 2.014086 0 348.492336 54.906300
- END
-TURNOUT HO "Märklin M-Track Right Turnout R360 30° 5119"
- P "P0" 1 2
- P "P1" 1 3 4 5
- E 0.051021 2.564184 270.000000
- E 7.137635 2.564202 90.000000
- E 7.137641 0.665350 120.000000
- S 0 0.000000 0.051019 2.564184 0.699619 2.564184
- S 0 0.000000 0.699619 2.564184 7.137633 2.564184
- C 0 0.000000 10.912495 0.699619 -8.348311 0.000000 22.500000
- S 0 0.000000 4.875650 1.733520 5.474879 1.485311
- C 0 0.000000 14.173228 0.051024 -11.609046 22.500000 7.500000
- L3 16754688 0.052083 0.051019 3.302373 0 7.137633 3.302373 0
- L3 16754688 0.052083 0.051019 1.825995 0 0.699619 1.825995 0
- L3 16754688 0.052083 6.131693 1.825995 0 7.137633 1.825995 0
- A3 16754688 0.052083 10.174306 0.699619 -8.348311 0 0.000000 22.500000
- L3 16754688 0.052083 4.593157 1.051522 0 5.192386 0.803313 0
- A3 16754688 0.052083 14.911417 0.051024 -11.609046 0 22.500000 7.500000
- A3 16754688 0.052083 13.435039 0.051024 -11.609046 0 22.500000 7.500000
- L3 255 0.062500 1.113927 1.054766 0 3.653297 0.542955 0
- A3 255 0.062500 0.765750 0.031250 1.066576 0 0.000000 60.930989
- A3 255 0.062500 0.535767 1.219928 1.589785 0 191.411069 64.383726
- A3 255 0.062500 0.742961 4.779594 0.168716 0 323.940964 55.858005
- A3 255 0.062500 0.777127 3.808335 1.314302 0 136.601365 54.906300
- END
-TURNOUT HO "Märklin M-Track Left Turnout R360 5138"
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.015738 0.764231 270.000000
- E 7.102352 0.764231 90.000000
- E 5.439598 1.843104 67.500000
- S 0 0.000000 0.015738 0.764231 0.664338 0.764231
- S 0 0.000000 0.664338 0.764231 7.102352 0.764231
- C 0 0.000000 -10.912495 0.664338 11.676726 157.500000 22.500000
- S 0 0.000000 4.840369 1.594895 5.439598 1.843104
- L3 255 0.062500 4.602352 2.279979 0 1.473613 2.279979 0
- L3 255 0.062500 0.014716 1.501877 0 1.473452 2.280525 0
- L3 16754688 0.052083 0.015738 0.026042 0 7.102352 0.026042 0
- L3 16754688 0.052083 0.015738 1.502420 0 0.664338 1.502420 0
- L3 16754688 0.052083 6.096412 1.502420 0 7.102352 1.502420 0
- A3 16754688 0.052083 10.174306 0.664338 11.676726 0 157.500000 22.500000
- L3 16754688 0.052083 4.557876 2.276893 0 5.157105 2.525102 0
- END
-TURNOUT HO "Märklin M-Track Right Turnout R360 5139"
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.015740 1.784930 270.000000
- E 7.102354 1.784949 90.000000
- E 5.439602 0.706072 112.500000
- S 0 0.000000 0.015740 1.784930 0.664340 1.784930
- S 0 0.000000 0.664340 1.784930 7.102354 1.784930
- C 0 0.000000 10.912495 0.664340 -9.127565 0.000000 22.500000
- S 0 0.000000 4.840371 0.954266 5.439600 0.706057
- L3 255 0.062500 4.602352 0.269182 0 1.473613 0.269182 0
- L3 255 0.062500 0.014716 1.047284 0 1.473452 0.268636 0
- L3 16754688 0.052083 0.015740 2.523119 0 7.102354 2.523119 0
- L3 16754688 0.052083 0.015740 1.046741 0 0.664340 1.046741 0
- L3 16754688 0.052083 6.096414 1.046741 0 7.102354 1.046741 0
- A3 16754688 0.052083 10.174306 0.664340 -9.127565 0 0.000000 22.500000
- L3 16754688 0.052083 4.557878 0.272268 0 5.157107 0.024059 0
- END
-TURNOUT HO "Märklin M-Track Double Slip 30° 5128"
- P "Normal" 1 2 3 0 4 5 6
- P "Reverse" 1 7 6 0 4 8 3
- E 0.215299 0.738192 255.000000
- E 7.554814 2.704807 75.000000
- E 0.215300 2.704809 285.000000
- E 7.554814 0.738191 105.000000
- S 0 0.000000 0.215299 0.738192 1.468298 1.073932
- S 0 0.000000 1.468298 1.073932 6.301815 2.369068
- S 0 0.000000 6.301815 2.369068 7.554814 2.704807
- S 0 0.000000 0.215300 2.704809 1.468298 2.369068
- S 0 0.000000 1.468298 2.369068 6.301815 1.073931
- S 0 0.000000 6.301815 1.073931 7.554814 0.738191
- C 0 0.000000 9.337638 3.885055 -7.945535 345.000000 30.000000
- C 0 0.000000 -9.337638 3.885059 11.388534 165.000000 30.000000
- L3 16754688 0.052083 0.406356 0.025156 0 1.659355 0.360896 0
- L3 16754688 0.052083 0.024242 1.451228 0 1.042304 1.724016 0
- L3 16754688 0.052083 6.727810 1.718983 0 7.745872 1.991772 0
- L3 16754688 0.052083 6.110758 3.082103 0 7.363757 3.417843 0
- L3 16754688 0.052083 0.024241 1.991773 0 1.042304 1.718984 0
- L3 16754688 0.052083 0.406356 3.417845 0 1.659356 3.082105 0
- L3 16754688 0.052083 6.110757 0.360894 0 7.363757 0.025154 0
- L3 16754688 0.052083 6.727809 1.724015 0 7.745872 1.451226 0
- A3 16754688 0.052083 8.599449 3.885055 -7.945535 0 345.000000 30.000000
- a3 16754688 0.052083 8.599449 3.885059 11.388534 0 165.000000 30.000000
- L3 255 0.062500 0.424951 3.424542 0 1.133612 3.660763 0
- L3 255 0.062500 0.031250 1.948164 0 0.031250 1.475723 0
- L3 255 0.062500 7.747785 1.948164 0 7.747785 1.475723 0
- L3 255 0.062500 6.665108 3.660763 0 7.373770 3.424542 0
- L3 255 0.062500 3.423770 4.172582 0 4.329281 4.172582 0
- A3 255 0.062500 0.521654 3.423770 3.660763 0 297.500000 62.500000
- A3 255 0.062500 0.521654 4.329281 3.660763 0 0.000000 62.500000
- A3 255 0.062500 0.531496 2.518258 4.192259 0 117.500000 62.500000
- A3 255 0.062500 0.531496 5.234793 4.192259 0 177.500000 62.500000
- L3 255 0.062500 1.153297 3.660763 0 2.531250 3.660763 0
- L3 255 0.062500 5.287156 3.660763 0 6.665108 3.660763 0
- END
-TURNOUT HO "Märklin M-Track Crossing 30° 5114"
- U "Crossing" "Dave Bullis" "Märklin M-Track" "Crossing 30°" "5114" 7.598425 30.000000 7.598425 1.476378 0.053333 16754688
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.598425 0.000000 90.000000
- E 0.508998 1.899606 300.000000
- E 7.089427 -1.899606 120.000000
- S 0 0.000000 0.000000 0.000000 7.598425 0.000000
- S 0 0.000000 0.508998 1.899606 7.089427 -1.899606
- L3 16754688 0.053333 -0.000000 -0.738189 0 3.561762 -0.738189 0
- L3 16754688 0.053333 6.648622 -0.738189 0 7.598425 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 0.949803 0.738189 0
- L3 16754688 0.053333 4.036663 0.738189 0 7.598425 0.738189 0
- L3 16754688 0.053333 0.139903 1.260316 0 0.962457 0.785414 0
- L3 16754688 0.053333 3.635757 -0.758016 0 6.720333 -2.538897 0
- L3 16754688 0.053333 0.878092 2.538897 0 3.962669 0.758016 0
- L3 16754688 0.053333 6.635968 -0.785414 0 7.458522 -1.260316 0
- END
-TURNOUT HO "Märklin M-Track Double Slip 24° 17' 5207"
- U "Double Slipswitch" "Dave Bullis" "Märklin M-Track" "Double Slip 24° 17'" "5207" 7.086614 24.283000 7.086614 1.476378 0.053333 16754688
- P "Normal" 1 2 3 0 4 5 6
- P "Reverse" 1 7 6 0 4 8 3
- E 0.000000 0.000000 270.000000
- E 7.086614 0.000000 90.000000
- E 0.313493 1.457164 294.283000
- E 6.773121 -1.457164 114.283000
- S 0 0.000000 0.000000 0.000000 1.297200 0.000000
- S 0 0.000000 1.297200 0.000000 5.789414 0.000000
- S 0 0.000000 5.789414 0.000000 7.086614 0.000000
- S 0 0.000000 0.313493 1.457164 1.495924 0.923698
- S 0 0.000000 1.495924 0.923698 5.590691 -0.923698
- S 0 0.000000 5.590691 -0.923698 6.773121 -1.457164
- C 0 0.000000 10.440253 1.297200 -10.440253 0.000000 24.283000
- C 0 0.000000 -10.440253 5.789414 10.440253 180.000000 24.283000
- L3 16754688 0.053333 -0.000000 -0.738189 0 1.297200 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 0.121613 0.738189 0
- L3 16754688 0.053333 6.965002 -0.738189 0 7.086614 -0.738189 0
- L3 16754688 0.053333 5.789414 0.738189 0 7.086614 0.738189 0
- L3 16754688 0.053333 0.009917 0.784286 0 0.120770 0.734273 0
- L3 16754688 0.053333 0.617069 2.130041 0 1.799499 1.596576 0
- L3 16754688 0.053333 5.287115 -1.596576 0 6.469546 -2.130041 0
- L3 16754688 0.053333 6.965844 -0.734273 0 7.076697 -0.784286 0
- A3 16754688 0.053333 9.702064 1.297200 -10.440253 0 0.000000 24.283000
- A3 16754688 0.053333 9.702064 5.789414 10.440253 0 180.000000 24.283000
- END
-TURNOUT HO "Märklin M-Track Crossing 24° 17' 5215"
- U "Crossing" "Dave Bullis" "Märklin M-Track" "Crossing 24° 17'" "5215" 7.086614 24.283000 7.086614 1.476378 0.053333 16754688
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.086614 0.000000 90.000000
- E 0.313493 1.457164 294.283000
- E 6.773121 -1.457164 114.283000
- S 0 0.000000 0.000000 0.000000 7.086614 0.000000
- S 0 0.000000 0.313493 1.457164 6.773121 -1.457164
- L3 16754688 0.053333 -0.000000 -0.738189 0 3.321850 -0.738189 0
- L3 16754688 0.053333 6.865157 -0.738189 0 7.086614 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 0.221457 0.738189 0
- L3 16754688 0.053333 3.764764 0.738189 0 7.086614 0.738189 0
- L3 16754688 0.053333 0.009917 0.784286 0 0.211781 0.693213 0
- L3 16754688 0.053333 3.441595 -0.763951 0 6.469546 -2.130041 0
- L3 16754688 0.053333 0.617069 2.130041 0 3.645019 0.763951 0
- L3 16754688 0.053333 6.874834 -0.693213 0 7.076697 -0.784286 0
- END
-TURNOUT HO "Märklin M-Track Crossing 48° 30' 5211"
- U "Crossing" "Dave Bullis" "Märklin M-Track" "Crossing 48° 30'" "5211" 3.858268 48.500000 3.858268 1.476378 0.053333 16754688
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 3.858268 0.000000 90.000000
- E 0.650851 1.444836 318.500000
- E 3.207417 -1.444836 138.500000
- S 0 0.000000 0.000000 0.000000 3.858268 0.000000
- S 0 0.000000 0.650851 1.444836 3.207417 -1.444836
- L3 16754688 0.053333 -0.000000 -0.738189 0 1.567421 -0.738189 0
- L3 16754688 0.053333 3.617126 -0.738189 0 3.858268 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 0.241142 0.738189 0
- L3 16754688 0.053333 2.290846 0.738189 0 3.858268 0.738189 0
- L3 16754688 0.053333 0.097980 0.955697 0 0.257766 0.775093 0
- L3 16754688 0.053333 1.615941 -0.760046 0 2.654546 -1.933975 0
- L3 16754688 0.053333 1.203722 1.933975 0 2.242327 0.760046 0
- L3 16754688 0.053333 3.600502 -0.775093 0 3.760288 -0.955697 0
- END
-TURNOUT HO "Märklin M-Track Left Curved Turnout 5141"
- P "Normal" 1 6 4 5
- P "Reverse" 1 2 3
- E 0.015738 0.764231 270.000000
- E 10.149596 2.663084 60.000000
- E 7.102352 2.663084 60.000000
- S 0 0.000000 0.015738 0.764231 0.664338 0.764231
- C 0 0.000000 -11.752617 0.664338 12.516848 150.000000 30.000000
- S 0 0.000000 6.540646 2.338783 7.102352 2.663084
- C 0 0.000000 -11.752624 3.711580 12.516855 150.000000 30.000000
- S 0 0.000000 9.587892 2.338784 10.149596 2.663084
- S 0 0.000000 0.664338 0.764231 3.711580 0.764231
- L3 16754688 0.052083 0.015738 0.026042 0 3.711580 0.026042 0
- L3 16754688 0.052083 0.015738 1.502420 0 0.664338 1.502420 0
- A3 16754688 0.052083 11.014428 0.664338 12.516848 0 150.000000 30.000000
- L3 16754688 0.052083 6.171552 2.978073 0 6.733257 3.302374 0
- A3 16754688 0.052083 12.490813 3.711580 12.516855 0 150.000000 30.000000
- A3 16754688 0.052083 11.014435 3.711580 12.516855 0 150.000000 8.437500
- L3 16754688 0.052083 9.956986 1.699494 0 10.518691 2.023794 0
- L3 16754688 0.052083 9.218797 2.978074 0 9.780501 3.302374 0
- L3 255 0.062500 4.681093 2.279979 0 1.473613 2.279979 0
- L3 255 0.062500 0.014716 1.501877 0 1.473452 2.280525 0
- END
-TURNOUT HO "Märklin M-Track Right Curved Turnout 5142"
- P "Normal" 1 6 4 5
- P "Reverse" 1 2 3
- E 0.015762 2.560696 270.000000
- E 10.149625 0.661870 120.000000
- E 7.102381 0.661862 120.000000
- S 0 0.000000 0.015762 2.560696 0.664362 2.560696
- C 0 0.000000 11.752617 0.664362 -9.191921 0.000000 30.000000
- S 0 0.000000 6.540670 0.986144 7.102376 0.661843
- C 0 0.000000 11.752624 3.711604 -9.191928 0.000000 30.000000
- S 0 0.000000 9.587916 0.986143 10.149620 0.661843
- S 0 0.000000 0.664362 2.560696 3.711604 2.560696
- L3 16754688 0.052083 0.015762 3.298885 0 3.711604 3.298885 0
- L3 16754688 0.052083 0.015762 1.822507 0 0.664362 1.822507 0
- A3 16754688 0.052083 11.014428 0.664362 -9.191921 0 0.000000 30.000000
- L3 16754688 0.052083 6.171576 0.346854 0 6.733281 0.022553 0
- A3 16754688 0.052083 12.490813 3.711604 -9.191928 0 0.000000 30.000000
- A3 16754688 0.052083 11.014435 3.711604 -9.191928 0 21.562500 8.437500
- L3 16754688 0.052083 9.957010 1.625433 0 10.518715 1.301133 0
- L3 16754688 0.052083 9.218821 0.346853 0 9.780525 0.022553 0
- L3 255 0.062500 4.681093 1.044914 0 1.473613 1.044914 0
- L3 255 0.062500 0.014716 1.823015 0 1.473452 1.044368 0
- END
-TURNOUT HO "Märklin M-Track 3-Way Turnout 5214"
- P "Left" 1 2 3
- P "Normal" 1 6
- P "Right" 1 4 5
- E 0.013205 2.220231 270.000000
- E 7.099819 3.743848 65.716667
- E 7.099819 0.696614 114.283333
- E 7.099819 2.220231 90.000000
- S 0 0.000000 0.013205 2.220231 0.666512 2.220231
- C 0 0.000000 -14.205726 0.666512 16.425957 155.716667 24.283333
- S 0 0.000000 6.508605 3.477112 7.099819 3.743848
- C 0 0.000000 14.205726 0.666512 -11.985495 0.000000 24.283333
- S 0 0.000000 6.508605 0.963350 7.099819 0.696614
- S 0 0.000000 0.666512 2.220231 7.099819 2.220231
- L3 16754688 0.052083 0.013205 1.482042 0 0.666512 1.482042 0
- L3 16754688 0.052083 0.013205 2.958420 0 0.666512 2.958420 0
- A3 16754688 0.052083 13.467537 0.666512 16.425957 0 155.716667 24.283333
- L3 16754688 0.052083 7.144743 2.954275 0 7.403399 3.070972 0
- L3 16754688 0.052083 6.205026 4.149988 0 6.796240 4.416724 0
- A3 16754688 0.052083 13.467537 0.666512 -11.985495 0 0.000000 24.283333
- L3 16754688 0.052083 6.205026 0.290474 0 6.796240 0.023738 0
- L3 16754688 0.052083 7.144743 1.486187 0 7.403399 1.369490 0
- L3 255 0.062500 1.469898 3.637558 0 4.895094 3.637558 0
- L3 255 0.062500 0.013205 2.958419 0 1.469894 3.637560 0
- L3 255 0.062500 0.013205 1.482042 0 1.469898 0.802908 0
- L3 255 0.062500 1.469898 0.802908 0 4.895094 0.802908 0
- END
-TURNOUT HO "Märklin M-Track Straight Feeder 5111"
- U "Straight Section" "Dave Bullis" "Märklin M-Track" "Straight Feeder" "5111" 7.086614 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.086614 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 7.086614 0.000000
- L3 16711680 0.053333 4.134088 0.000000 0 4.134088 -1.023622 0
- L3 0 0.053333 2.952920 0.000000 0 2.952920 -1.023622 0
- L3 16754688 0.053333 0.000000 -0.738189 0 7.086614 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 7.086614 0.738189 0
- END
-TURNOUT HO "Märklin M-Track Straight Feeder w/Capacitor 5131"
- U "Straight Section" "Dave Bullis" "Märklin M-Track" "Straight Feeder w/Capacitor" "5131" 7.086614 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.086614 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 7.086614 0.000000
- L3 0 0.053333 2.972605 0.000000 0 2.972605 -1.023622 0
- L3 16711680 0.053333 4.153773 0.000000 0 4.153773 -1.023622 0
- L3 0 0.053333 3.563189 0.314961 0 3.563189 0.078740 0
- L3 0 0.053333 3.563189 -0.314961 0 3.563189 -0.078740 0
- L3 0 0.053333 3.267897 -0.078740 0 3.858481 -0.078740 0
- L3 0 0.053333 3.267897 0.078740 0 3.858481 0.078740 0
- L3 16754688 0.053333 0.000000 -0.738189 0 7.086614 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 7.086614 0.738189 0
- END
-TURNOUT HO "Märklin M-Track Curved Feeder 5103"
- U "Curved Section" "Dave Bullis" "Märklin M-Track" "Curved Feeder" "5103" 14.173228 30.000000 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.086614 1.898853 60.000000
- C 0 0.000000 -14.173228 0.000000 14.173228 150.000000 30.000000
- L3 0 0.053333 2.978403 0.298564 0 3.243336 -0.690179 0
- L3 16711680 0.053333 4.261939 0.642486 0 4.526872 -0.346257 0
- A3 16754688 0.053333 14.911417 0.000000 14.173228 0 150.000000 30.000000
- A3 16754688 0.053333 13.435039 0.000000 14.173228 0 150.000000 30.000000
- END
-TURNOUT HO "Märklin M-Track Uncoupler 5112"
- U "Straight Section" "Dave Bullis" "Märklin M-Track" "Uncoupler" "5112" 3.543307 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.543307 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 3.543307 0.000000
- L3 0 0.053333 0.590584 0.157480 0 2.952920 0.157480 0
- L3 0 0.053333 2.952920 0.157480 0 2.952920 -0.157480 0
- L3 0 0.053333 2.952920 -0.157480 0 0.590584 -0.157480 0
- L3 0 0.053333 0.590584 -0.157480 0 0.590584 0.157480 0
- L3 16754688 0.053333 0.000000 -0.738189 0 3.543307 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 3.543307 0.738189 0
- END
-TURNOUT HO "Märklin M-Track Straight Circuit 5146"
- U "Straight Section" "Dave Bullis" "Märklin M-Track" "Straight Circuit" "5146" 3.543307 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.543307 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 3.543307 0.000000
- F3 12566463 0.000000 4
- 0.738230 -0.314961 0
- 1.033522 -0.314961 0
- 1.033522 -1.023622 0
- 0.738230 -1.023622 0
- F3 12566463 0.000000 4
- 2.805274 -0.314961 0
- 2.509982 -0.314961 0
- 2.509982 -1.023622 0
- 2.805274 -1.023622 0
- G3 0 0.000000 0.078740 2.657628 -0.866142 0
- G3 0 0.000000 0.078740 0.885876 -0.866142 0
- F3 0 0.000000 4
- 1.328814 0.078740 0
- 2.214690 0.078740 0
- 2.214690 -0.078740 0
- 1.328814 -0.078740 0
- L3 16754688 0.053333 0.000000 -0.738189 0 3.543307 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 3.543307 0.738189 0
- END
-TURNOUT HO "Märklin M-Track Curved Circuit 5147"
- U "Curved Section" "Dave Bullis" "Märklin M-Track" "Curved Circuit" "5147" 14.173228 15.000000 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.668301 0.482941 75.000000
- C 0 0.000000 -14.173228 -0.000000 14.173228 165.000000 15.000000
- F3 12566463 0.000000 4
- 0.823469 -0.305112 0
- 1.116560 -0.269125 0
- 1.202924 -0.972504 0
- 0.909833 -1.008491 0
- F3 12566463 0.000000 4
- 2.875105 -0.053203 0
- 2.582014 -0.089190 0
- 2.668379 -0.792569 0
- 2.961470 -0.756582 0
- G3 0 0.000000 0.078740 2.795732 -0.618269 0
- G3 0 0.000000 0.078740 1.037186 -0.834191 0
- F3 0 0.000000 4
- 1.364070 0.138090 0
- 2.243342 0.246051 0
- 2.262535 0.089744 0
- 1.383262 -0.018217 0
- A3 16754688 0.053333 14.911417 -0.000000 14.173228 0 165.000000 15.000000
- A3 16754688 0.053333 13.435039 -0.000000 14.173228 0 165.000000 15.000000
- END
-TURNOUT HO "Märklin M-Track Curved Circuit 5213"
- U "Curved Section" "Dave Bullis" "Märklin M-Track" "Curved Circuit" "5213" 17.220472 15.000000 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.456986 0.586773 75.000000
- C 0 0.000000 -17.220472 0.000000 17.220472 165.000000 15.000000
- F3 12566463 0.000000 4
- 1.244914 -0.298115 0
- 1.538005 -0.262128 0
- 1.624369 -0.965507 0
- 1.331278 -1.001494 0
- F3 12566463 0.000000 4
- 3.296551 -0.046206 0
- 3.003460 -0.082193 0
- 3.089824 -0.785572 0
- 3.382915 -0.749585 0
- G3 0 0.000000 0.078740 3.217177 -0.611272 0
- G3 0 0.000000 0.078740 1.458632 -0.827194 0
- F3 0 0.000000 4
- 1.785515 0.145087 0
- 2.664788 0.253048 0
- 2.683980 0.096742 0
- 1.804707 -0.011219 0
- A3 16754688 0.053333 17.958661 0.000000 17.220472 0 165.000000 15.000000
- A3 16754688 0.053333 16.482283 0.000000 17.220472 0 165.000000 15.000000
- END
-TURNOUT HO "Märklin M-Track Contact Set 5145/2"
- U "Straight Section" "Dave Bullis" "Märklin M-Track" "Contact Set" "5145/2" 3.543307 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.543307 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 3.543307 0.000000
- L3 16754688 0.053333 0.000000 -0.738189 0 3.543307 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 3.543307 0.738189 0
- END
-TURNOUT HO "Märklin M-Track Straight Contact 5115"
- U "Straight Section" "Dave Bullis" "Märklin M-Track" "Straight Contact" "5115" 7.086614 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.086614 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 7.086614 0.000000
- L3 16754688 0.053333 0.000000 -0.738189 0 7.086614 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 7.086614 0.738189 0
- END
-TURNOUT HO "Märklin M-Track Curved Contact 5116"
- U "Curved Section" "Dave Bullis" "Märklin M-Track" "Curved Contact" "5116" 14.173228 30.000000 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.086614 1.898853 60.000000
- C 0 0.000000 -14.173228 0.000000 14.173228 150.000000 30.000000
- A3 16754688 0.053333 14.911417 0.000000 14.173228 0 150.000000 30.000000
- A3 16754688 0.053333 13.435039 0.000000 14.173228 0 150.000000 30.000000
- END
-TURNOUT HO "Märklin M-Track Bumper 7190"
- U "Straight Section" "Dave Bullis" "Märklin M-Track" "Bumper" "7190" 2.755906 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0.000000 0.000000 0.000000 2.755906 0.000000
- L3 0 0.106667 1.771752 0.787402 0 1.771752 -0.787402 0
- L3 0 0.106667 1.771752 0.472441 0 1.328814 0.472441 0
- L3 0 0.106667 1.771752 -0.472441 0 1.328814 -0.472441 0
- L3 0 0.106667 1.771752 0.078740 0 2.657628 0.708661 0
- L3 0 0.106667 1.771752 -0.078740 0 2.657628 -0.629921 0
- L3 16754688 0.053333 0.000000 -0.738189 0 2.755906 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 2.755906 0.738189 0
- END
-TURNOUT HO "Märklin M-Track Lighted Bumper 7191"
- U "Straight Section" "Dave Bullis" "Märklin M-Track" "Lighted Bumper" "7191" 2.755906 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0.000000 0.000000 0.000000 2.755906 0.000000
- L3 0 0.106667 1.771752 0.787402 0 1.771752 -0.787402 0
- L3 0 0.106667 1.771752 0.472441 0 1.328814 0.472441 0
- L3 0 0.106667 1.771752 -0.472441 0 1.328814 -0.472441 0
- L3 0 0.106667 1.771752 0.078740 0 2.657628 0.708661 0
- L3 0 0.106667 1.771752 -0.078740 0 2.657628 -0.629921 0
- G3 16711680 0.000000 0.334660 1.771752 0.000000 0
- L3 16754688 0.053333 0.000000 -0.738189 0 2.755906 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 2.755906 0.738189 0
- END
-TURNOUT HO "Märklin M-Track Contact Set 5145/2"
- U "Straight Section" "Dave Bullis" "Märklin M-Track" "Contact Set" "5145/2" 3.543307 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.543307 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 3.543307 0.000000
- F3 12566463 0.000000 4
- 0.738230 -0.334646 0
- 1.033522 -0.334646 0
- 1.033522 -1.043307 0
- 0.738230 -1.043307 0
- F3 12566463 0.000000 4
- 2.805274 -0.334646 0
- 2.509982 -0.334646 0
- 2.509982 -1.043307 0
- 2.805274 -1.043307 0
- G3 0 0.000000 0.078740 2.657628 -0.885827 0
- G3 0 0.000000 0.078740 0.885876 -0.885827 0
- L3 0 0.106667 0.295292 0.000000 0 3.248212 0.000000 0
- L3 16754688 0.053333 0.000000 -0.738189 0 3.543307 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 3.543307 0.738189 0
- END
-TURNOUT HO "Märklin M-Track Straight Contact 5115"
- U "Straight Section" "Dave Bullis" "Märklin M-Track" "Straight Contact" "5115" 7.086614 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.086614 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 7.086614 0.000000
- L3 0 0.106667 0.295292 -0.000000 0 6.791716 -0.000000 0
- L3 16754688 0.053333 0.000000 -0.738189 0 7.086614 -0.738189 0
- L3 16754688 0.053333 0.000000 0.738189 0 7.086614 0.738189 0
- END
-TURNOUT HO "Märklin M-Track Curved Contact 5116"
- U "Curved Section" "Dave Bullis" "Märklin M-Track" "Curved Contact" "5116" 14.173228 30.000000 1.476378 0.053333 16754688
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.086614 1.898853 60.000000
- C 0 0.000000 -14.173228 0.000000 14.173228 150.000000 30.000000
- A3 0 0.106667 14.140548 -0.007874 14.118021 0 150.987057 27.864304
- A3 16754688 0.053333 14.911417 0.000000 14.173228 0 150.000000 30.000000
- A3 16754688 0.053333 13.435039 0.000000 14.173228 0 150.000000 30.000000
- END
-TURNOUT HO "Märklin M-Track Turntable 7186"
- P "1" 1 2 3
- P "2" 4 5 6
- P "3" 7 8 9
- P "4" 10 11 12
- P "5" 13 14 15
- P "6" 16 17 18
- P "7" 19 20 21
- P "8" 22 23 24
- P "9" 25 26 27
- P "10" 28 29 30
- P "11" 31 32 33
- P "12" 34 35 36
- P "13" 37 38 39
- P "14" 40 41 42
- P "15" 43 44 45
- P "16" 46 47 48
- P "17" 49 50 51
- P "18" 52 53 54
- P "19" 55 56 57
- P "20" 58 59 60
- P "21" 61 62 63
- P "22" 64 65 66
- P "23" 67 68 69
- P "24" 70 71 72
- P "25" -3 -2 -1
- P "26" -6 -5 -4
- P "27" -9 -8 -7
- P "28" -12 -11 -10
- P "29" -15 -14 -13
- P "30" -18 -17 -16
- P "31" -21 -20 -19
- P "32" -24 -23 -22
- P "33" -27 -26 -25
- P "34" -30 -29 -28
- P "35" -33 -32 -31
- P "36" -36 -35 -34
- P "37" -39 -38 -37
- P "38" -42 -41 -40
- P "39" -45 -44 -43
- P "40" -48 -47 -46
- P "41" -51 -50 -49
- P "42" -54 -53 -52
- P "43" -57 -56 -55
- P "44" -60 -59 -58
- P "45" -63 -62 -61
- P "46" -66 -65 -64
- P "47" -69 -68 -67
- P "48" -72 -71 -70
- E 0.000000 7.598425 0.000000
- E -0.000000 -7.598425 180.000000
- E 0.991794 7.533420 7.500000
- E -0.991794 -7.533420 187.500000
- E 1.966617 7.339515 15.000000
- E -1.966617 -7.339515 195.000000
- E 2.907791 7.020030 22.500000
- E -2.907791 -7.020030 202.500000
- E 3.799213 6.580429 30.000000
- E -3.799213 -6.580429 210.000000
- E 4.625628 6.028236 37.500000
- E -4.625628 -6.028236 217.500000
- E 5.372898 5.372898 45.000000
- E -5.372898 -5.372898 225.000000
- E 6.028236 4.625628 52.500000
- E -6.028236 -4.625628 232.500000
- E 6.580429 3.799213 60.000000
- E -6.580429 -3.799213 240.000000
- E 7.020030 2.907791 67.500000
- E -7.020030 -2.907791 247.500000
- E 7.339515 1.966617 75.000000
- E -7.339515 -1.966617 255.000000
- E 7.533420 0.991794 82.500000
- E -7.533420 -0.991794 262.500000
- E 7.598425 0.000000 90.000000
- E -7.598425 -0.000000 270.000000
- E 7.533420 -0.991794 97.500000
- E -7.533420 0.991794 277.500000
- E 7.339515 -1.966617 105.000000
- E -7.339515 1.966617 285.000000
- E 7.020030 -2.907791 112.500000
- E -7.020030 2.907791 292.500000
- E 6.580429 -3.799213 120.000000
- E -6.580429 3.799213 300.000000
- E 6.028236 -4.625628 127.500000
- E -6.028236 4.625628 307.500000
- E 5.372898 -5.372898 135.000000
- E -5.372898 5.372898 315.000000
- E 4.625628 -6.028236 142.500000
- E -4.625628 6.028236 322.500000
- E 3.799213 -6.580429 150.000000
- E -3.799213 6.580429 330.000000
- E 2.907791 -7.020030 157.500000
- E -2.907791 7.020030 337.500000
- E 1.966617 -7.339515 165.000000
- E -1.966617 7.339515 345.000000
- E 0.991794 -7.533420 172.500000
- E -0.991794 7.533420 352.500000
- S 0 0 0.000000 7.598425 0.000000 6.102362
- S 16777215 0 0.000000 6.102362 -0.000000 -6.102362
- S 0 0 -0.000000 -6.102362 -0.000000 -7.598425
- S 0 0 0.991794 7.533420 0.796518 6.050156
- S 16777215 0 0.796518 6.050156 -0.796518 -6.050156
- S 0 0 -0.796518 -6.050156 -0.991794 -7.533420
- S 0 0 1.966617 7.339515 1.579408 5.894429
- S 16777215 0 1.579408 5.894429 -1.579408 -5.894429
- S 0 0 -1.579408 -5.894429 -1.966617 -7.339515
- S 0 0 2.907791 7.020030 2.335273 5.637848
- S 16777215 0 2.335273 5.637848 -2.335273 -5.637848
- S 0 0 -2.335273 -5.637848 -2.907791 -7.020030
- S 0 0 3.799213 6.580429 3.051181 5.284801
- S 16777215 0 3.051181 5.284801 -3.051181 -5.284801
- S 0 0 -3.051181 -5.284801 -3.799213 -6.580429
- S 0 0 4.625628 6.028236 3.714883 4.841329
- S 16777215 0 3.714883 4.841329 -3.714883 -4.841329
- S 0 0 -3.714883 -4.841329 -4.625628 -6.028236
- S 0 0 5.372898 5.372898 4.315022 4.315022
- S 16777215 0 4.315022 4.315022 -4.315022 -4.315022
- S 0 0 -4.315022 -4.315022 -5.372898 -5.372898
- S 0 0 6.028236 4.625628 4.841329 3.714883
- S 16777215 0 4.841329 3.714883 -4.841329 -3.714883
- S 0 0 -4.841329 -3.714883 -6.028236 -4.625628
- S 0 0 6.580429 3.799213 5.284801 3.051181
- S 16777215 0 5.284801 3.051181 -5.284801 -3.051181
- S 0 0 -5.284801 -3.051181 -6.580429 -3.799213
- S 0 0 7.020030 2.907791 5.637848 2.335273
- S 16777215 0 5.637848 2.335273 -5.637848 -2.335273
- S 0 0 -5.637848 -2.335273 -7.020030 -2.907791
- S 0 0 7.339515 1.966617 5.894429 1.579408
- S 16777215 0 5.894429 1.579408 -5.894429 -1.579408
- S 0 0 -5.894429 -1.579408 -7.339515 -1.966617
- S 0 0 7.533420 0.991794 6.050156 0.796518
- S 16777215 0 6.050156 0.796518 -6.050156 -0.796518
- S 0 0 -6.050156 -0.796518 -7.533420 -0.991794
- S 0 0 7.598425 0.000000 6.102362 0.000000
- S 16777215 0 6.102362 0.000000 -6.102362 -0.000000
- S 0 0 -6.102362 -0.000000 -7.598425 -0.000000
- S 0 0 7.533420 -0.991794 6.050156 -0.796518
- S 16777215 0 6.050156 -0.796518 -6.050156 0.796518
- S 0 0 -6.050156 0.796518 -7.533420 0.991794
- S 0 0 7.339515 -1.966617 5.894429 -1.579408
- S 16777215 0 5.894429 -1.579408 -5.894429 1.579408
- S 0 0 -5.894429 1.579408 -7.339515 1.966617
- S 0 0 7.020030 -2.907791 5.637848 -2.335273
- S 16777215 0 5.637848 -2.335273 -5.637848 2.335273
- S 0 0 -5.637848 2.335273 -7.020030 2.907791
- S 0 0 6.580429 -3.799213 5.284801 -3.051181
- S 16777215 0 5.284801 -3.051181 -5.284801 3.051181
- S 0 0 -5.284801 3.051181 -6.580429 3.799213
- S 0 0 6.028236 -4.625628 4.841329 -3.714883
- S 16777215 0 4.841329 -3.714883 -4.841329 3.714883
- S 0 0 -4.841329 3.714883 -6.028236 4.625628
- S 0 0 5.372898 -5.372898 4.315022 -4.315022
- S 16777215 0 4.315022 -4.315022 -4.315022 4.315022
- S 0 0 -4.315022 4.315022 -5.372898 5.372898
- S 0 0 4.625628 -6.028236 3.714883 -4.841329
- S 16777215 0 3.714883 -4.841329 -3.714883 4.841329
- S 0 0 -3.714883 4.841329 -4.625628 6.028236
- S 0 0 3.799213 -6.580429 3.051181 -5.284801
- S 16777215 0 3.051181 -5.284801 -3.051181 5.284801
- S 0 0 -3.051181 5.284801 -3.799213 6.580429
- S 0 0 2.907791 -7.020030 2.335273 -5.637848
- S 16777215 0 2.335273 -5.637848 -2.335273 5.637848
- S 0 0 -2.335273 5.637848 -2.907791 7.020030
- S 0 0 1.966617 -7.339515 1.579408 -5.894429
- S 16777215 0 1.579408 -5.894429 -1.579408 5.894429
- S 0 0 -1.579408 5.894429 -1.966617 7.339515
- S 0 0 0.991794 -7.533420 0.796518 -6.050156
- S 16777215 0 0.796518 -6.050156 -0.796518 6.050156
- S 0 0 -0.796518 6.050156 -0.991794 7.533420
- A 16711680 0 7.598425 0.000000 0.000000 0.000000 360.000000
- A 16711680 0 6.102362 0.000000 0.000000 0.000000 360.000000
- END
-TURNOUT HO "Märklin M-Track Transfer Table 7294"
-# P "P0" 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10
-# P "P1"
- P "P0" 1 2 3
- P "P1" 4 5
- P "P2" 6 7
- P "P3" 8 9
- P "P4" 10 11
- P "P5" 18 19
- P "P6" 16 17
- P "P7" 14 15
- P "P8" 12 13
- E 0.000000 0.000000 270.000000
- E 0.000000 3.047244 270.000000
- E 0.000000 6.078740 270.000000
- E 14.173228 5.590551 90.000000
- E 14.173228 2.543307 90.000000
- E 14.173228 -0.503937 90.000000
- E 14.173228 -3.551181 90.000000
- E 14.173228 -6.094488 90.000000
- E 0.000000 -6.094488 270.000000
- E 0.000000 -3.047244 270.000000
- S 0 0.000000 0.000000 -6.094488 0.787402 -6.094488
- S 16777215 0 0.787402 -6.094488 13.385827 -6.094488
- S 0 0.000000 13.385827 -6.094488 14.173228 -6.094488
- S 0 0.000000 0.000000 -3.047244 0.787402 -3.047244
- S 16777215 0 0.787402 -3.047244 13.385827 -3.047244
- S 0 0.000000 0.000000 0.000000 0.787402 0.000000
- S 16777215 0 0.787402 0.000000 13.385827 0.000000
- S 0 0.000000 0.000000 3.047244 0.787402 3.047244
- S 16777215 0 0.787402 3.047244 13.385827 3.047244
- S 0 0.000000 0.000000 6.078740 0.787402 6.078740
- S 16777215 0 0.787402 6.078740 13.385827 6.078740
- S 0 0.000000 14.173228 -3.551181 13.385827 -3.551181
- S 16777215 0 13.385827 -3.551181 0.787402 -3.551181
- S 0 0.000000 14.173228 -0.503937 13.385827 -0.503937
- S 16777215 0 13.385827 -0.503937 0.787402 -0.503937
- S 0 0.000000 14.173228 2.543307 13.385827 2.543307
- S 16777215 0 13.385827 2.543307 0.787402 2.543307
- S 0 0.000000 14.173228 5.590551 13.385827 5.590551
- S 16777215 0 13.385827 5.590551 0.787402 5.590551
- L3 0 0.052632 0.000000 -8.279528 0 14.173228 -8.279528 0
- L3 0 0.052632 14.173228 -8.279528 0 14.173228 8.255906 0
- L3 0 0.052632 14.173228 8.255906 0 0.000000 8.255906 0
- L3 0 0.052632 0.000000 8.255906 0 0.000000 -8.279528 0
- L3 0 0.052632 0.787402 7.862205 0 13.385827 7.862205 0
- L3 0 0.052632 13.385827 7.862205 0 13.385827 -7.492126 0
- L3 0 0.052632 0.787402 -7.492126 0 0.787402 7.862205 0
- L3 0 0.052632 8.661417 -7.492126 0 8.661417 -8.122047 0
- L3 0 0.052632 8.661417 -8.122047 0 5.511811 -8.122047 0
- L3 0 0.052632 5.511811 -8.122047 0 5.511811 -7.492126 0
- L3 0 0.052632 0.787402 -7.492126 0 5.511811 -7.492126 0
- L3 0 0.052632 8.661417 -7.492126 0 13.385827 -7.492126 0
- END
+CONTENTS Mrklin M-Track HO-Scale
+
+SUBCONTENTS Mrklin M-Track - Straight Tracks
+TURNOUT HO "Mrklin M-Track Straight 180mm 5106"
+ U "Straight Section" "Dave Bullis" "Mrklin M-Track" "Straight 180mm" "5106" 7.086614 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 7.086614 0.000000
+ L3 16754688 0.053333 -0.000000 -0.738189 0 7.086614 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 7.086614 0.738189 0
+ END
+TURNOUT HO "Mrklin M-Track Straight 90mm 5107"
+ U "Straight Section" "Dave Bullis" "Mrklin M-Track" "Straight 90mm" "5107" 3.543307 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.543307 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 3.543307 0.000000
+ L3 16754688 0.053333 -0.000000 -0.738189 0 3.543307 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 3.543307 0.738189 0
+ END
+TURNOUT HO "Mrklin M-Track Straight 70mm 5129"
+ U "Straight Section" "Dave Bullis" "Mrklin M-Track" "Straight 70mm" "5129" 2.755906 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.755906 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 2.755906 0.000000
+ L3 16754688 0.053333 -0.000000 -0.738189 0 2.755906 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 2.755906 0.738189 0
+ END
+TURNOUT HO "Mrklin M-Track Straight 45mm 5108"
+ U "Straight Section" "Dave Bullis" "Mrklin M-Track" "Straight 45mm" "5108" 1.771654 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.771654 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 1.771654 0.000000
+ L3 16754688 0.053333 -0.000000 -0.738189 0 1.771654 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 1.771654 0.738189 0
+ END
+TURNOUT HO "Mrklin M-Track Straight 33.5mm 5109"
+ U "Straight Section" "Dave Bullis" "Mrklin M-Track" "Straight 33.5mm" "5109" 1.318898 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.318898 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 1.318898 0.000000
+ L3 16754688 0.053333 -0.000000 -0.738189 0 1.318898 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 1.318898 0.738189 0
+ END
+TURNOUT HO "Mrklin M-Track Straight 22.5mm 5110"
+ U "Straight Section" "Dave Bullis" "Mrklin M-Track" "Straight 22.5mm" "5110" 0.885827 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 0.885827 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 0.885827 0.000000
+ L3 16754688 0.053333 -0.000000 -0.738189 0 0.885827 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 0.885827 0.738189 0
+ END
+TURNOUT HO "Mrklin M-Track Straight 16mm 5210"
+ U "Straight Section" "Dave Bullis" "Mrklin M-Track" "Straight 16mm" "5210" 0.629921 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 0.629921 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 0.629921 0.000000
+ L3 16754688 0.053333 -0.000000 -0.738189 0 0.629921 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 0.629921 0.738189 0
+ END
+TURNOUT HO "Mrklin M-Track Straight 8mm 5208"
+ U "Straight Section" "Dave Bullis" "Mrklin M-Track" "Straight 8mm" "5208" 0.314961 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 0.314961 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 0.314961 0.000000
+ L3 16754688 0.053333 -0.000000 -0.738189 0 0.314961 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 0.314961 0.738189 0
+ END
+
+SUBCONTENTS Mrklin M-Track - Curve Tracks
+TURNOUT HO "Mrklin M-Track Curved R286 45 5120"
+ U "Curved Section" "Dave Bullis" "Mrklin M-Track" "Curved R386 45" "5120" 11.259843 45.000000 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.961911 3.297932 45.000000
+ C 0 0.000000 -11.259843 0.000000 11.259843 135.000000 45.000000
+ A3 16754688 0.053333 11.998032 0.000000 11.259843 0 135.000000 45.000000
+ A3 16754688 0.053333 10.521654 0.000000 11.259843 0 135.000000 45.000000
+ END
+TURNOUT HO "Mrklin M-Track Curved R360 30 5100"
+ U "Curved Section" "Dave Bullis" "Mrklin M-Track" "Curved R360 30" "5100" 14.173228 30.000000 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 1.898853 60.000000
+ C 0 0.000000 -14.173228 0.000000 14.173228 150.000000 30.000000
+ A3 16754688 0.053333 14.911417 0.000000 14.173228 0 150.000000 30.000000
+ A3 16754688 0.053333 13.435039 0.000000 14.173228 0 150.000000 30.000000
+ END
+TURNOUT HO "Mrklin M-Track Curved R360 15 5101"
+ U "Curved Section" "Dave Bullis" "Mrklin M-Track" "Curved R360 15" "5101" 14.173228 15.000000 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.668301 0.482941 75.000000
+ C 0 0.000000 -14.173228 0.000000 14.173228 165.000000 15.000000
+ A3 16754688 0.053333 14.911417 0.000000 14.173228 0 165.000000 15.000000
+ A3 16754688 0.053333 13.435039 0.000000 14.173228 0 165.000000 15.000000
+ END
+TURNOUT HO "Mrklin M-Track Curved R360 7.5 5102"
+ U "Curved Section" "Dave Bullis" "Mrklin M-Track" "Curved R360 7.5" "5102" 14.173228 7.500000 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.849978 0.121254 82.500000
+ C 0 0.000000 -14.173228 0.000000 14.173228 172.500000 7.500000
+ A3 16754688 0.053333 14.911417 0.000000 14.173228 0 172.500000 7.500000
+ A3 16754688 0.053333 13.435039 0.000000 14.173228 0 172.500000 7.500000
+ END
+TURNOUT HO "Mrklin M-Track Curved R437.4 30 5200"
+ U "Curved Section" "Dave Bullis" "Mrklin M-Track" "Curved R437.4 30" "5200" 17.220472 30.000000 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 8.610236 2.307106 60.000000
+ C 0 0.000000 -17.220472 0.000000 17.220472 150.000000 30.000000
+ A3 16754688 0.053333 17.958661 0.000000 17.220472 0 150.000000 30.000000
+ A3 16754688 0.053333 16.482283 0.000000 17.220472 0 150.000000 30.000000
+ END
+TURNOUT HO "Mrklin M-Track Curved R437.4 2417' 5206"
+ U "Curved Section" "Dave Bullis" "Mrklin M-Track" "Curved R437.4 2417'" "5206" 17.220472 24.299000 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086198 1.525554 65.701000
+ C 0 0.000000 -17.220472 0.000000 17.220472 155.701000 24.299000
+ A3 16754688 0.053333 17.958661 0.000000 17.220472 0 155.701000 24.299000
+ A3 16754688 0.053333 16.482283 0.000000 17.220472 0 155.701000 24.299000
+ END
+TURNOUT HO "Mrklin M-Track Curved R437.4 15 5201"
+ U "Curved Section" "Dave Bullis" "Mrklin M-Track" "Curved R437.4 15" "5201" 17.220472 15.000000 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.456986 0.586773 75.000000
+ C 0 0.000000 -17.220472 0.000000 17.220472 165.000000 15.000000
+ A3 16754688 0.053333 17.958661 0.000000 17.220472 0 165.000000 15.000000
+ A3 16754688 0.053333 16.482283 0.000000 17.220472 0 165.000000 15.000000
+ END
+TURNOUT HO "Mrklin M-Track Curved R437.4 543' 5205"
+ U "Curved Section" "Dave Bullis" "Mrklin M-Track" "Curved R437.4 543'" "5205" 17.220472 5.717000 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.715417 0.085654 84.283000
+ C 0 0.000000 -17.220472 0.000000 17.220472 174.283000 5.717000
+ A3 16754688 0.053333 17.958661 0.000000 17.220472 0 174.283000 5.717000
+ A3 16754688 0.053333 16.482283 0.000000 17.220472 0 174.283000 5.717000
+ END
+
+SUBCONTENTS Mrklin M-Track - Crossings
+TURNOUT HO "Mrklin M-Track Crossing 30 5114"
+ U "Crossing" "Dave Bullis" "Mrklin M-Track" "Crossing 30" "5114" 7.598425 30.000000 7.598425 1.476378 0.053333 16754688
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 7.598425 0.000000 90.000000
+ E 0.508998 1.899606 300.000000
+ E 7.089427 -1.899606 120.000000
+ S 0 0.000000 0.000000 0.000000 7.598425 0.000000
+ S 0 0.000000 0.508998 1.899606 7.089427 -1.899606
+ L3 16754688 0.053333 -0.000000 -0.738189 0 3.561762 -0.738189 0
+ L3 16754688 0.053333 6.648622 -0.738189 0 7.598425 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 0.949803 0.738189 0
+ L3 16754688 0.053333 4.036663 0.738189 0 7.598425 0.738189 0
+ L3 16754688 0.053333 0.139903 1.260316 0 0.962457 0.785414 0
+ L3 16754688 0.053333 3.635757 -0.758016 0 6.720333 -2.538897 0
+ L3 16754688 0.053333 0.878092 2.538897 0 3.962669 0.758016 0
+ L3 16754688 0.053333 6.635968 -0.785414 0 7.458522 -1.260316 0
+ END
+TURNOUT HO "Mrklin M-Track Crossing 24 17' 5215"
+ U "Crossing" "Dave Bullis" "Mrklin M-Track" "Crossing 24 17'" "5215" 7.086614 24.283000 7.086614 1.476378 0.053333 16754688
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 7.086614 0.000000 90.000000
+ E 0.313493 1.457164 294.283000
+ E 6.773121 -1.457164 114.283000
+ S 0 0.000000 0.000000 0.000000 7.086614 0.000000
+ S 0 0.000000 0.313493 1.457164 6.773121 -1.457164
+ L3 16754688 0.053333 -0.000000 -0.738189 0 3.321850 -0.738189 0
+ L3 16754688 0.053333 6.865157 -0.738189 0 7.086614 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 0.221457 0.738189 0
+ L3 16754688 0.053333 3.764764 0.738189 0 7.086614 0.738189 0
+ L3 16754688 0.053333 0.009917 0.784286 0 0.211781 0.693213 0
+ L3 16754688 0.053333 3.441595 -0.763951 0 6.469546 -2.130041 0
+ L3 16754688 0.053333 0.617069 2.130041 0 3.645019 0.763951 0
+ L3 16754688 0.053333 6.874834 -0.693213 0 7.076697 -0.784286 0
+ END
+TURNOUT HO "Mrklin M-Track Crossing 48 30' 5211"
+ U "Crossing" "Dave Bullis" "Mrklin M-Track" "Crossing 48 30'" "5211" 3.858268 48.500000 3.858268 1.476378 0.053333 16754688
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 3.858268 0.000000 90.000000
+ E 0.650851 1.444836 318.500000
+ E 3.207417 -1.444836 138.500000
+ S 0 0.000000 0.000000 0.000000 3.858268 0.000000
+ S 0 0.000000 0.650851 1.444836 3.207417 -1.444836
+ L3 16754688 0.053333 -0.000000 -0.738189 0 1.567421 -0.738189 0
+ L3 16754688 0.053333 3.617126 -0.738189 0 3.858268 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 0.241142 0.738189 0
+ L3 16754688 0.053333 2.290846 0.738189 0 3.858268 0.738189 0
+ L3 16754688 0.053333 0.097980 0.955697 0 0.257766 0.775093 0
+ L3 16754688 0.053333 1.615941 -0.760046 0 2.654546 -1.933975 0
+ L3 16754688 0.053333 1.203722 1.933975 0 2.242327 0.760046 0
+ L3 16754688 0.053333 3.600502 -0.775093 0 3.760288 -0.955697 0
+ END
+
+SUBCONTENTS Mrklin M-Track - Turnouts
+TURNOUT HO "Mrklin M-Track Left Turnout R437.4mm 5203"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.015738 0.764231 270.000000
+ E 7.102352 0.764231 90.000000
+ E 7.102352 2.287848 65.701000
+ S 0 0.000000 0.015738 0.764231 0.673750 0.764231
+ S 0 0.000000 0.673750 0.764231 7.102352 0.764231
+ C 0 0.000000 -14.185863 0.673750 14.950094 155.701000 24.299000
+ S 0 0.000000 6.511211 2.020950 7.102352 2.287848
+ L3 255 0.062500 5.173217 2.279979 0 1.473613 2.279979 0
+ L3 255 0.062500 0.014716 1.501877 0 1.473452 2.280525 0
+ L3 16754688 0.052083 0.015738 0.026042 0 7.102352 0.026042 0
+ L3 16754688 0.052083 0.015738 1.502420 0 0.673750 1.502420 0
+ A3 16754688 0.052083 13.447674 0.673750 14.950094 0 155.701000 24.299000
+ L3 16754688 0.052083 7.147492 1.498287 0 7.406116 1.615055 0
+ L3 16754688 0.052083 6.207448 2.693743 0 6.798588 2.960641 0
+ END
+TURNOUT HO "Mrklin M-Track Right Turnout R437.4mm 5204"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.015740 2.220145 270.000000
+ E 7.102354 2.220163 90.000000
+ E 7.102358 0.696546 114.299000
+ S 0 0.000000 0.015740 2.220145 0.673752 2.220145
+ S 0 0.000000 0.673752 2.220145 7.102354 2.220145
+ C 0 0.000000 14.185863 0.673752 -11.965718 0.000000 24.299000
+ S 0 0.000000 6.511213 0.963426 7.102354 0.696528
+ L3 255 0.062500 5.173217 0.704397 0 1.473613 0.704397 0
+ L3 255 0.062500 0.014716 1.482499 0 1.473452 0.703851 0
+ L3 16754688 0.052083 0.015740 2.958334 0 7.102354 2.958334 0
+ L3 16754688 0.052083 0.015740 1.481956 0 0.673752 1.481956 0
+ A3 16754688 0.052083 13.447674 0.673752 -11.965718 0 0.000000 24.299000
+ L3 16754688 0.052083 7.147494 1.486089 0 7.406118 1.369321 0
+ L3 16754688 0.052083 6.207450 0.290633 0 6.798590 0.023735 0
+ END
+TURNOUT HO "Mrklin M-Track Left Turnout R360 30 5118"
+ P "P0" 1 2
+ P "P1" 1 3 4 5
+ E 0.050937 0.764231 270.000000
+ E 7.137551 0.764231 90.000000
+ E 7.137552 2.663083 60.000000
+ S 0 0.000000 0.050937 0.764231 0.699537 0.764231
+ S 0 0.000000 0.699537 0.764231 7.137551 0.764231
+ C 0 0.000000 -10.912495 0.699537 11.676726 157.500000 22.500000
+ S 0 0.000000 4.875568 1.594895 5.474797 1.843104
+ C 0 0.000000 -14.173228 0.050942 14.937461 150.000000 7.500000
+ L3 16754688 0.052083 0.050937 0.026042 0 7.137551 0.026042 0
+ L3 16754688 0.052083 0.050937 1.502420 0 0.699537 1.502420 0
+ L3 16754688 0.052083 6.131611 1.502420 0 7.137551 1.502420 0
+ A3 16754688 0.052083 10.174306 0.699537 11.676726 0 157.500000 22.500000
+ L3 16754688 0.052083 4.593075 2.276893 0 5.192304 2.525102 0
+ A3 16754688 0.052083 14.911417 0.050942 14.937461 0 150.000000 7.500000
+ A3 16754688 0.052083 13.435039 0.050942 14.937461 0 150.000000 7.500000
+ L3 255 0.062500 1.113929 2.273622 0 3.653299 2.785433 0
+ A3 255 0.062500 0.765750 0.031252 2.261812 0 119.069011 60.930989
+ A3 255 0.062500 0.535767 1.219930 1.738603 0 284.205205 64.383726
+ A3 255 0.062500 0.742961 4.779596 3.159672 0 160.201031 55.858005
+ A3 255 0.062500 0.777127 3.808337 2.014086 0 348.492336 54.906300
+ END
+TURNOUT HO "Mrklin M-Track Right Turnout R360 30 5119"
+ P "P0" 1 2
+ P "P1" 1 3 4 5
+ E 0.051021 2.564184 270.000000
+ E 7.137635 2.564202 90.000000
+ E 7.137641 0.665350 120.000000
+ S 0 0.000000 0.051019 2.564184 0.699619 2.564184
+ S 0 0.000000 0.699619 2.564184 7.137633 2.564184
+ C 0 0.000000 10.912495 0.699619 -8.348311 0.000000 22.500000
+ S 0 0.000000 4.875650 1.733520 5.474879 1.485311
+ C 0 0.000000 14.173228 0.051024 -11.609046 22.500000 7.500000
+ L3 16754688 0.052083 0.051019 3.302373 0 7.137633 3.302373 0
+ L3 16754688 0.052083 0.051019 1.825995 0 0.699619 1.825995 0
+ L3 16754688 0.052083 6.131693 1.825995 0 7.137633 1.825995 0
+ A3 16754688 0.052083 10.174306 0.699619 -8.348311 0 0.000000 22.500000
+ L3 16754688 0.052083 4.593157 1.051522 0 5.192386 0.803313 0
+ A3 16754688 0.052083 14.911417 0.051024 -11.609046 0 22.500000 7.500000
+ A3 16754688 0.052083 13.435039 0.051024 -11.609046 0 22.500000 7.500000
+ L3 255 0.062500 1.113927 1.054766 0 3.653297 0.542955 0
+ A3 255 0.062500 0.765750 0.031250 1.066576 0 0.000000 60.930989
+ A3 255 0.062500 0.535767 1.219928 1.589785 0 191.411069 64.383726
+ A3 255 0.062500 0.742961 4.779594 0.168716 0 323.940964 55.858005
+ A3 255 0.062500 0.777127 3.808335 1.314302 0 136.601365 54.906300
+ END
+TURNOUT HO "Mrklin M-Track Left Turnout R360 5138"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.015738 0.764231 270.000000
+ E 7.102352 0.764231 90.000000
+ E 5.439598 1.843104 67.500000
+ S 0 0.000000 0.015738 0.764231 0.664338 0.764231
+ S 0 0.000000 0.664338 0.764231 7.102352 0.764231
+ C 0 0.000000 -10.912495 0.664338 11.676726 157.500000 22.500000
+ S 0 0.000000 4.840369 1.594895 5.439598 1.843104
+ L3 255 0.062500 4.602352 2.279979 0 1.473613 2.279979 0
+ L3 255 0.062500 0.014716 1.501877 0 1.473452 2.280525 0
+ L3 16754688 0.052083 0.015738 0.026042 0 7.102352 0.026042 0
+ L3 16754688 0.052083 0.015738 1.502420 0 0.664338 1.502420 0
+ L3 16754688 0.052083 6.096412 1.502420 0 7.102352 1.502420 0
+ A3 16754688 0.052083 10.174306 0.664338 11.676726 0 157.500000 22.500000
+ L3 16754688 0.052083 4.557876 2.276893 0 5.157105 2.525102 0
+ END
+TURNOUT HO "Mrklin M-Track Right Turnout R360 5139"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.015740 1.784930 270.000000
+ E 7.102354 1.784949 90.000000
+ E 5.439602 0.706072 112.500000
+ S 0 0.000000 0.015740 1.784930 0.664340 1.784930
+ S 0 0.000000 0.664340 1.784930 7.102354 1.784930
+ C 0 0.000000 10.912495 0.664340 -9.127565 0.000000 22.500000
+ S 0 0.000000 4.840371 0.954266 5.439600 0.706057
+ L3 255 0.062500 4.602352 0.269182 0 1.473613 0.269182 0
+ L3 255 0.062500 0.014716 1.047284 0 1.473452 0.268636 0
+ L3 16754688 0.052083 0.015740 2.523119 0 7.102354 2.523119 0
+ L3 16754688 0.052083 0.015740 1.046741 0 0.664340 1.046741 0
+ L3 16754688 0.052083 6.096414 1.046741 0 7.102354 1.046741 0
+ A3 16754688 0.052083 10.174306 0.664340 -9.127565 0 0.000000 22.500000
+ L3 16754688 0.052083 4.557878 0.272268 0 5.157107 0.024059 0
+ END
+TURNOUT HO "Mrklin M-Track Double Slip 30 5128"
+ P "Normal" 1 2 3 0 4 5 6
+ P "Reverse" 1 7 6 0 4 8 3
+ E 0.215299 0.738192 255.000000
+ E 7.554814 2.704807 75.000000
+ E 0.215300 2.704809 285.000000
+ E 7.554814 0.738191 105.000000
+ S 0 0.000000 0.215299 0.738192 1.468298 1.073932
+ S 0 0.000000 1.468298 1.073932 6.301815 2.369068
+ S 0 0.000000 6.301815 2.369068 7.554814 2.704807
+ S 0 0.000000 0.215300 2.704809 1.468298 2.369068
+ S 0 0.000000 1.468298 2.369068 6.301815 1.073931
+ S 0 0.000000 6.301815 1.073931 7.554814 0.738191
+ C 0 0.000000 9.337638 3.885055 -7.945535 345.000000 30.000000
+ C 0 0.000000 -9.337638 3.885059 11.388534 165.000000 30.000000
+ L3 16754688 0.052083 0.406356 0.025156 0 1.659355 0.360896 0
+ L3 16754688 0.052083 0.024242 1.451228 0 1.042304 1.724016 0
+ L3 16754688 0.052083 6.727810 1.718983 0 7.745872 1.991772 0
+ L3 16754688 0.052083 6.110758 3.082103 0 7.363757 3.417843 0
+ L3 16754688 0.052083 0.024241 1.991773 0 1.042304 1.718984 0
+ L3 16754688 0.052083 0.406356 3.417845 0 1.659356 3.082105 0
+ L3 16754688 0.052083 6.110757 0.360894 0 7.363757 0.025154 0
+ L3 16754688 0.052083 6.727809 1.724015 0 7.745872 1.451226 0
+ A3 16754688 0.052083 8.599449 3.885055 -7.945535 0 345.000000 30.000000
+ A3 16754688 0.052083 8.599449 3.885059 11.388534 0 165.000000 30.000000
+ L3 255 0.062500 0.424951 3.424542 0 1.133612 3.660763 0
+ L3 255 0.062500 0.031250 1.948164 0 0.031250 1.475723 0
+ L3 255 0.062500 7.747785 1.948164 0 7.747785 1.475723 0
+ L3 255 0.062500 6.665108 3.660763 0 7.373770 3.424542 0
+ L3 255 0.062500 3.423770 4.172582 0 4.329281 4.172582 0
+ A3 255 0.062500 0.521654 3.423770 3.660763 0 297.500000 62.500000
+ A3 255 0.062500 0.521654 4.329281 3.660763 0 0.000000 62.500000
+ A3 255 0.062500 0.531496 2.518258 4.192259 0 117.500000 62.500000
+ A3 255 0.062500 0.531496 5.234793 4.192259 0 177.500000 62.500000
+ L3 255 0.062500 1.153297 3.660763 0 2.531250 3.660763 0
+ L3 255 0.062500 5.287156 3.660763 0 6.665108 3.660763 0
+ END
+TURNOUT HO "Mrklin M-Track Left Curved Turnout 5141"
+ P "Normal" 1 6 4 5
+ P "Reverse" 1 2 3
+ E 0.015738 0.764231 270.000000
+ E 10.149596 2.663084 60.000000
+ E 7.102352 2.663084 60.000000
+ S 0 0.000000 0.015738 0.764231 0.664338 0.764231
+ C 0 0.000000 -11.752617 0.664338 12.516848 150.000000 30.000000
+ S 0 0.000000 6.540646 2.338783 7.102352 2.663084
+ C 0 0.000000 -11.752624 3.711580 12.516855 150.000000 30.000000
+ S 0 0.000000 9.587892 2.338784 10.149596 2.663084
+ S 0 0.000000 0.664338 0.764231 3.711580 0.764231
+ L3 16754688 0.052083 0.015738 0.026042 0 3.711580 0.026042 0
+ L3 16754688 0.052083 0.015738 1.502420 0 0.664338 1.502420 0
+ A3 16754688 0.052083 11.014428 0.664338 12.516848 0 150.000000 30.000000
+ L3 16754688 0.052083 6.171552 2.978073 0 6.733257 3.302374 0
+ A3 16754688 0.052083 12.490813 3.711580 12.516855 0 150.000000 30.000000
+ A3 16754688 0.052083 11.014435 3.711580 12.516855 0 150.000000 8.437500
+ L3 16754688 0.052083 9.956986 1.699494 0 10.518691 2.023794 0
+ L3 16754688 0.052083 9.218797 2.978074 0 9.780501 3.302374 0
+ L3 255 0.062500 4.681093 2.279979 0 1.473613 2.279979 0
+ L3 255 0.062500 0.014716 1.501877 0 1.473452 2.280525 0
+ END
+TURNOUT HO "Mrklin M-Track Right Curved Turnout 5142"
+ P "Normal" 1 6 4 5
+ P "Reverse" 1 2 3
+ E 0.015762 2.560696 270.000000
+ E 10.149625 0.661870 120.000000
+ E 7.102381 0.661862 120.000000
+ S 0 0.000000 0.015762 2.560696 0.664362 2.560696
+ C 0 0.000000 11.752617 0.664362 -9.191921 0.000000 30.000000
+ S 0 0.000000 6.540670 0.986144 7.102376 0.661843
+ C 0 0.000000 11.752624 3.711604 -9.191928 0.000000 30.000000
+ S 0 0.000000 9.587916 0.986143 10.149620 0.661843
+ S 0 0.000000 0.664362 2.560696 3.711604 2.560696
+ L3 16754688 0.052083 0.015762 3.298885 0 3.711604 3.298885 0
+ L3 16754688 0.052083 0.015762 1.822507 0 0.664362 1.822507 0
+ A3 16754688 0.052083 11.014428 0.664362 -9.191921 0 0.000000 30.000000
+ L3 16754688 0.052083 6.171576 0.346854 0 6.733281 0.022553 0
+ A3 16754688 0.052083 12.490813 3.711604 -9.191928 0 0.000000 30.000000
+ A3 16754688 0.052083 11.014435 3.711604 -9.191928 0 21.562500 8.437500
+ L3 16754688 0.052083 9.957010 1.625433 0 10.518715 1.301133 0
+ L3 16754688 0.052083 9.218821 0.346853 0 9.780525 0.022553 0
+ L3 255 0.062500 4.681093 1.044914 0 1.473613 1.044914 0
+ L3 255 0.062500 0.014716 1.823015 0 1.473452 1.044368 0
+ END
+TURNOUT HO "Mrklin M-Track 3-Way Turnout 5214"
+ P "Left" 1 2 3
+ P "Normal" 1 6
+ P "Right" 1 4 5
+ E 0.013205 2.220231 270.000000
+ E 7.099819 3.743848 65.716667
+ E 7.099819 0.696614 114.283333
+ E 7.099819 2.220231 90.000000
+ S 0 0.000000 0.013205 2.220231 0.666512 2.220231
+ C 0 0.000000 -14.205726 0.666512 16.425957 155.716667 24.283333
+ S 0 0.000000 6.508605 3.477112 7.099819 3.743848
+ C 0 0.000000 14.205726 0.666512 -11.985495 0.000000 24.283333
+ S 0 0.000000 6.508605 0.963350 7.099819 0.696614
+ S 0 0.000000 0.666512 2.220231 7.099819 2.220231
+ L3 16754688 0.052083 0.013205 1.482042 0 0.666512 1.482042 0
+ L3 16754688 0.052083 0.013205 2.958420 0 0.666512 2.958420 0
+ A3 16754688 0.052083 13.467537 0.666512 16.425957 0 155.716667 24.283333
+ L3 16754688 0.052083 7.144743 2.954275 0 7.403399 3.070972 0
+ L3 16754688 0.052083 6.205026 4.149988 0 6.796240 4.416724 0
+ A3 16754688 0.052083 13.467537 0.666512 -11.985495 0 0.000000 24.283333
+ L3 16754688 0.052083 6.205026 0.290474 0 6.796240 0.023738 0
+ L3 16754688 0.052083 7.144743 1.486187 0 7.403399 1.369490 0
+ L3 255 0.062500 1.469898 3.637558 0 4.895094 3.637558 0
+ L3 255 0.062500 0.013205 2.958419 0 1.469894 3.637560 0
+ L3 255 0.062500 0.013205 1.482042 0 1.469898 0.802908 0
+ L3 255 0.062500 1.469898 0.802908 0 4.895094 0.802908 0
+ END
+TURNOUT HO "Mrklin M-Track Double Slip 24 17' 5207"
+ U "Double Slipswitch" "Dave Bullis" "Mrklin M-Track" "Double Slip 24 17'" "5207" 7.086614 24.283000 7.086614 1.476378 0.053333 16754688
+ P "Normal" 1 2 3 0 4 5 6
+ P "Reverse" 1 7 6 0 4 8 3
+ E 0.000000 0.000000 270.000000
+ E 7.086614 0.000000 90.000000
+ E 0.313493 1.457164 294.283000
+ E 6.773121 -1.457164 114.283000
+ S 0 0.000000 0.000000 0.000000 1.297200 0.000000
+ S 0 0.000000 1.297200 0.000000 5.789414 0.000000
+ S 0 0.000000 5.789414 0.000000 7.086614 0.000000
+ S 0 0.000000 0.313493 1.457164 1.495924 0.923698
+ S 0 0.000000 1.495924 0.923698 5.590691 -0.923698
+ S 0 0.000000 5.590691 -0.923698 6.773121 -1.457164
+ C 0 0.000000 10.440253 1.297200 -10.440253 0.000000 24.283000
+ C 0 0.000000 -10.440253 5.789414 10.440253 180.000000 24.283000
+ L3 16754688 0.053333 -0.000000 -0.738189 0 1.297200 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 0.121613 0.738189 0
+ L3 16754688 0.053333 6.965002 -0.738189 0 7.086614 -0.738189 0
+ L3 16754688 0.053333 5.789414 0.738189 0 7.086614 0.738189 0
+ L3 16754688 0.053333 0.009917 0.784286 0 0.120770 0.734273 0
+ L3 16754688 0.053333 0.617069 2.130041 0 1.799499 1.596576 0
+ L3 16754688 0.053333 5.287115 -1.596576 0 6.469546 -2.130041 0
+ L3 16754688 0.053333 6.965844 -0.734273 0 7.076697 -0.784286 0
+ A3 16754688 0.053333 9.702064 1.297200 -10.440253 0 0.000000 24.283000
+ A3 16754688 0.053333 9.702064 5.789414 10.440253 0 180.000000 24.283000
+ END
+
+SUBCONTENTS Mrklin M-Track - Misc track
+TURNOUT HO "Mrklin M-Track Bumper 7190"
+ U "Straight Section" "Dave Bullis" "Mrklin M-Track" "Bumper" "7190" 2.755906 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0.000000 0.000000 0.000000 2.755906 0.000000
+ L3 0 0.106667 1.771752 0.787402 0 1.771752 -0.787402 0
+ L3 0 0.106667 1.771752 0.472441 0 1.328814 0.472441 0
+ L3 0 0.106667 1.771752 -0.472441 0 1.328814 -0.472441 0
+ L3 0 0.106667 1.771752 0.078740 0 2.657628 0.708661 0
+ L3 0 0.106667 1.771752 -0.078740 0 2.657628 -0.629921 0
+ L3 16754688 0.053333 0.000000 -0.738189 0 2.755906 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 2.755906 0.738189 0
+ END
+TURNOUT HO "Mrklin M-Track Lighted Bumper 7191"
+ U "Straight Section" "Dave Bullis" "Mrklin M-Track" "Lighted Bumper" "7191" 2.755906 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0.000000 0.000000 0.000000 2.755906 0.000000
+ L3 0 0.106667 1.771752 0.787402 0 1.771752 -0.787402 0
+ L3 0 0.106667 1.771752 0.472441 0 1.328814 0.472441 0
+ L3 0 0.106667 1.771752 -0.472441 0 1.328814 -0.472441 0
+ L3 0 0.106667 1.771752 0.078740 0 2.657628 0.708661 0
+ L3 0 0.106667 1.771752 -0.078740 0 2.657628 -0.629921 0
+ G3 16711680 0.000000 0.334660 1.771752 0.000000 0
+ L3 16754688 0.053333 0.000000 -0.738189 0 2.755906 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 2.755906 0.738189 0
+ END
+TURNOUT HO "Mrklin M-Track Straight Feeder 5111"
+ U "Straight Section" "Dave Bullis" "Mrklin M-Track" "Straight Feeder" "5111" 7.086614 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 7.086614 0.000000
+ L3 16711680 0.053333 4.134088 0.000000 0 4.134088 -1.023622 0
+ L3 0 0.053333 2.952920 0.000000 0 2.952920 -1.023622 0
+ L3 16754688 0.053333 0.000000 -0.738189 0 7.086614 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 7.086614 0.738189 0
+ END
+TURNOUT HO "Mrklin M-Track Straight Feeder w/Capacitor 5131"
+ U "Straight Section" "Dave Bullis" "Mrklin M-Track" "Straight Feeder w/Capacitor" "5131" 7.086614 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 7.086614 0.000000
+ L3 0 0.053333 2.972605 0.000000 0 2.972605 -1.023622 0
+ L3 16711680 0.053333 4.153773 0.000000 0 4.153773 -1.023622 0
+ L3 0 0.053333 3.563189 0.314961 0 3.563189 0.078740 0
+ L3 0 0.053333 3.563189 -0.314961 0 3.563189 -0.078740 0
+ L3 0 0.053333 3.267897 -0.078740 0 3.858481 -0.078740 0
+ L3 0 0.053333 3.267897 0.078740 0 3.858481 0.078740 0
+ L3 16754688 0.053333 0.000000 -0.738189 0 7.086614 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 7.086614 0.738189 0
+ END
+TURNOUT HO "Mrklin M-Track Curved Feeder 5103"
+ U "Curved Section" "Dave Bullis" "Mrklin M-Track" "Curved Feeder" "5103" 14.173228 30.000000 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 1.898853 60.000000
+ C 0 0.000000 -14.173228 0.000000 14.173228 150.000000 30.000000
+ L3 0 0.053333 2.978403 0.298564 0 3.243336 -0.690179 0
+ L3 16711680 0.053333 4.261939 0.642486 0 4.526872 -0.346257 0
+ A3 16754688 0.053333 14.911417 0.000000 14.173228 0 150.000000 30.000000
+ A3 16754688 0.053333 13.435039 0.000000 14.173228 0 150.000000 30.000000
+ END
+TURNOUT HO "Mrklin M-Track Uncoupler 5112"
+ U "Straight Section" "Dave Bullis" "Mrklin M-Track" "Uncoupler" "5112" 3.543307 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.543307 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 3.543307 0.000000
+ L3 0 0.053333 0.590584 0.157480 0 2.952920 0.157480 0
+ L3 0 0.053333 2.952920 0.157480 0 2.952920 -0.157480 0
+ L3 0 0.053333 2.952920 -0.157480 0 0.590584 -0.157480 0
+ L3 0 0.053333 0.590584 -0.157480 0 0.590584 0.157480 0
+ L3 16754688 0.053333 0.000000 -0.738189 0 3.543307 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 3.543307 0.738189 0
+ END
+
+SUBCONTENTS Mrklin M-Track - Circuit Tracks
+TURNOUT HO "Mrklin M-Track Straight Circuit 5146"
+ U "Straight Section" "Dave Bullis" "Mrklin M-Track" "Straight Circuit" "5146" 3.543307 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.543307 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 3.543307 0.000000
+ F3 12566463 0.000000 4
+ 0.738230 -0.314961 0
+ 1.033522 -0.314961 0
+ 1.033522 -1.023622 0
+ 0.738230 -1.023622 0
+ F3 12566463 0.000000 4
+ 2.805274 -0.314961 0
+ 2.509982 -0.314961 0
+ 2.509982 -1.023622 0
+ 2.805274 -1.023622 0
+ G3 0 0.000000 0.078740 2.657628 -0.866142 0
+ G3 0 0.000000 0.078740 0.885876 -0.866142 0
+ F3 0 0.000000 4
+ 1.328814 0.078740 0
+ 2.214690 0.078740 0
+ 2.214690 -0.078740 0
+ 1.328814 -0.078740 0
+ L3 16754688 0.053333 0.000000 -0.738189 0 3.543307 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 3.543307 0.738189 0
+ END
+TURNOUT HO "Mrklin M-Track Curved Circuit 5147"
+ U "Curved Section" "Dave Bullis" "Mrklin M-Track" "Curved Circuit" "5147" 14.173228 15.000000 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.668301 0.482941 75.000000
+ C 0 0.000000 -14.173228 -0.000000 14.173228 165.000000 15.000000
+ F3 12566463 0.000000 4
+ 0.823469 -0.305112 0
+ 1.116560 -0.269125 0
+ 1.202924 -0.972504 0
+ 0.909833 -1.008491 0
+ F3 12566463 0.000000 4
+ 2.875105 -0.053203 0
+ 2.582014 -0.089190 0
+ 2.668379 -0.792569 0
+ 2.961470 -0.756582 0
+ G3 0 0.000000 0.078740 2.795732 -0.618269 0
+ G3 0 0.000000 0.078740 1.037186 -0.834191 0
+ F3 0 0.000000 4
+ 1.364070 0.138090 0
+ 2.243342 0.246051 0
+ 2.262535 0.089744 0
+ 1.383262 -0.018217 0
+ A3 16754688 0.053333 14.911417 -0.000000 14.173228 0 165.000000 15.000000
+ A3 16754688 0.053333 13.435039 -0.000000 14.173228 0 165.000000 15.000000
+ END
+TURNOUT HO "Mrklin M-Track Curved Circuit 5213"
+ U "Curved Section" "Dave Bullis" "Mrklin M-Track" "Curved Circuit" "5213" 17.220472 15.000000 1.476378 0.053333 16754688
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.456986 0.586773 75.000000
+ C 0 0.000000 -17.220472 0.000000 17.220472 165.000000 15.000000
+ F3 12566463 0.000000 4
+ 1.244914 -0.298115 0
+ 1.538005 -0.262128 0
+ 1.624369 -0.965507 0
+ 1.331278 -1.001494 0
+ F3 12566463 0.000000 4
+ 3.296551 -0.046206 0
+ 3.003460 -0.082193 0
+ 3.089824 -0.785572 0
+ 3.382915 -0.749585 0
+ G3 0 0.000000 0.078740 3.217177 -0.611272 0
+ G3 0 0.000000 0.078740 1.458632 -0.827194 0
+ F3 0 0.000000 4
+ 1.785515 0.145087 0
+ 2.664788 0.253048 0
+ 2.683980 0.096742 0
+ 1.804707 -0.011219 0
+ A3 16754688 0.053333 17.958661 0.000000 17.220472 0 165.000000 15.000000
+ A3 16754688 0.053333 16.482283 0.000000 17.220472 0 165.000000 15.000000
+ END
+
+
+SUBCONTENTS Mrklin M-Track - Contact Tracks
+TURNOUT HO "Mrklin M-Track Contact Set 5145"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.543307 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 3.543307 0.000000
+ L3 0 0.106667 0.442913 0.000000 0 3.100394 0.000000 0
+ L3 16754688 0.053333 0.000000 -0.738189 0 3.543307 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 3.543307 0.738189 0
+ L3 8421376 0.150000 0.885827 -0.738189 0 0.885827 -0.888189 0
+ L3 8421376 0.150000 2.657480 -0.738189 0 2.657480 -0.888189 0
+END
+TURNOUT HO "Mrklin M-Track Straight Contact 180mm 5115"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 7.086614 0.000000
+ L3 0 0.106667 0.442913 -0.000000 0 6.643701 -0.000000 0
+ L3 16754688 0.053333 0.000000 0.738189 0 7.086614 0.738189 0
+ L3 16754688 0.053333 0.000000 -0.738189 0 7.086614 -0.738189 0
+END
+TURNOUT HO "Mrklin M-Track Curved Contact 5116"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 1.898853 60.000000
+ C 0 0.000000 -14.173228 0.000000 14.173228 150.000000 30.000000
+ A3 0 0.106667 14.140548 0.000000 14.118021 0 152.500000 25.000000
+ A3 16754688 0.053333 14.911417 0.000000 14.173228 0 150.000000 30.000000
+ A3 16754688 0.053333 13.435039 0.000000 14.173228 0 150.000000 30.000000
+END
+
+SUBCONTENTS Mrklin M-Track - Contact (old) Tracks
+TURNOUT HO "Mrklin M-Track Straight Contact(old) 90mm 3601D"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.543307 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 3.543307 0.000000
+ L3 16754688 0.053333 0.000000 -0.738189 0 3.543307 -0.738189 0
+ L3 16754688 0.053333 0.000000 0.738189 0 3.543307 0.738189 0
+ L3 0 0.106667 1.446850 0.000000 0 2.096457 0.000000 0
+ L3 8421376 0.150000 1.446850 -0.738189 0 1.446850 -0.888189 0
+ L3 8421376 0.150000 2.096457 -0.738189 0 2.096457 -0.888189 0
+END
+TURNOUT HO "Mrklin M-Track Straight Contact(old) 180mm 5105"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 7.086614 0.000000
+ L3 16754688 0.053333 0.000000 0.738189 0 7.086614 0.738189 0
+ L3 16754688 0.053333 0.000000 -0.738189 0 7.086614 -0.738189 0
+ L3 0 0.106667 3.218504 0.000000 0 3.868110 0.000000 0
+ L3 8421376 0.150000 3.218504 -0.738189 0 3.218504 -0.888189 0
+ L3 8421376 0.150000 3.868110 -0.738189 0 3.868110 -0.888189 0
+END
+TURNOUT HO "Mrklin Curve Contact(old) R360mm 30 5104"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 -1.898853 120.000000
+ C 0 0.000000 14.173228 0.000000 -14.173228 0.000000 30.000000
+ A3 0 0.106667 14.140548 0.000000 -14.118021 0 12.500000 5.000000
+ A3 16754688 0.053333 14.911417 0.000000 -14.173228 0 0.000000 30.000000
+ A3 16754688 0.053333 13.435039 0.000000 -14.173228 0 0.000000 30.000000
+ L3 8421376 0.150000 2.850000 -1.050000 0 2.825000 -1.200000 0
+ L3 8421376 0.150000 4.000000 -1.350000 0 3.955000 -1.500000 0
+ END
+
+SUBCONTENTS Mrklin M-Track - TurnTable
+TURNOUT HO "Mrklin M-Track Turntable 7186"
+ P "1" 1 2
+ P "2" 3 4 5
+ P "3" 6 7
+ P "4" 8 9
+ P "5" 10 11
+ P "6" 12 13
+ P "7" 14 15 16
+ P "8" 17 18
+ E 0.000000 7.598425 0.000000
+ E 1.966617 7.339515 15.000000
+ E 3.799213 6.580429 30.000000
+ E 5.372898 5.372898 45.000000
+ E 6.580429 3.799213 60.000000
+ E 7.339515 1.966617 75.000000
+# E 7.598425 0.000000 90.000000
+ E 7.339515 -1.966617 105.000000
+# E 6.580429 -3.799213 120.000000
+# E 5.372898 -5.372898 135.000000
+# E 3.799213 -6.580429 150.000000
+ E 1.966617 -7.339515 165.000000
+# E -0.000000 -7.598425 180.000000
+ E -1.966617 -7.339515 195.000000
+# E -3.799213 -6.580429 210.000000
+# E -5.372898 -5.372898 225.000000
+# E -6.580429 -3.799213 240.000000
+# E -7.339515 -1.966617 255.000000
+# E -7.598425 -0.000000 270.000000
+ E -7.339515 1.966617 285.000000
+# E -6.580429 3.799213 300.000000
+# E -5.372898 5.372898 315.000000
+# E -3.799213 6.580429 330.000000
+# E -1.966617 7.339515 345.000000
+#0
+ S 0 0 0.000000 7.598425 0.000000 6.102362
+ S 16777215 0 0.000000 6.102362 -0.000000 -6.102362
+# S 0 0 -0.000000 -6.102362 -0.000000 -7.598425
+#15
+ S 0 0 1.966617 7.339515 1.579408 5.894429
+ S 16777215 0 1.579408 5.894429 -1.579408 -5.894429
+ S 0 0 -1.579408 -5.894429 -1.966617 -7.339515
+#30
+ S 0 0 3.799213 6.580429 3.051181 5.284801
+ S 16777215 0 3.051181 5.284801 -3.051181 -5.284801
+# S 0 0 -3.051181 -5.284801 -3.799213 -6.580429
+#45
+ S 0 0 5.372898 5.372898 4.315022 4.315022
+ S 16777215 0 4.315022 4.315022 -4.315022 -4.315022
+# S 0 0 -4.315022 -4.315022 -5.372898 -5.372898
+#60
+ S 0 0 6.580429 3.799213 5.284801 3.051181
+ S 16777215 0 5.284801 3.051181 -5.284801 -3.051181
+# S 0 0 -5.284801 -3.051181 -6.580429 -3.799213
+#75
+ S 0 0 7.339515 1.966617 5.894429 1.579408
+ S 16777215 0 5.894429 1.579408 -5.894429 -1.579408
+# S 0 0 -5.894429 -1.579408 -7.339515 -1.966617
+#90
+# S 0 0 7.598425 0.000000 6.102362 0.000000
+# S 16777215 0 6.102362 0.000000 -6.102362 -0.000000
+# S 0 0 -6.102362 -0.000000 -7.598425 -0.000000
+#105
+ S 0 0 7.339515 -1.966617 5.894429 -1.579408
+ S 16777215 0 5.894429 -1.579408 -5.894429 1.579408
+ S 0 0 -5.894429 1.579408 -7.339515 1.966617
+#120
+# S 0 0 6.580429 -3.799213 5.284801 -3.051181
+# S 16777215 0 5.284801 -3.051181 -5.284801 3.051181
+# S 0 0 -5.284801 3.051181 -6.580429 3.799213
+#135
+# S 0 0 5.372898 -5.372898 4.315022 -4.315022
+# S 16777215 0 4.315022 -4.315022 -4.315022 4.315022
+# S 0 0 -4.315022 4.315022 -5.372898 5.372898
+#150
+# S 0 0 3.799213 -6.580429 3.051181 -5.284801
+# S 16777215 0 3.051181 -5.284801 -3.051181 5.284801
+# S 0 0 -3.051181 5.284801 -3.799213 6.580429
+#165
+ S 0 0 1.966617 -7.339515 1.579408 -5.894429
+ S 16777215 0 1.579408 -5.894429 -1.579408 5.894429
+# S 0 0 -1.579408 5.894429 -1.966617 7.339515
+
+ A 16711680 0 7.598425 0.000000 0.000000 0.000000 360.000000
+ A 16711680 0 6.102362 0.000000 0.000000 0.000000 360.000000
+END
+
+SUBCONTENTS Mrklin M-Track - Transfer Table
+TURNOUT HO "Mrklin M-Track Transfer Table 7294"
+ P "P0" 1 2 3
+ P "P1" 4 5
+ P "P2" 6 7
+ P "P3" 8 9
+ P "P4" 10 11
+ P "P5" 18 19
+ P "P6" 16 17
+ P "P7" 14 15
+ P "P8" 12 13
+ E 0.000000 0.000000 270.000000
+ E 0.000000 3.047244 270.000000
+ E 0.000000 6.078740 270.000000
+ E 14.173228 5.590551 90.000000
+ E 14.173228 2.543307 90.000000
+ E 14.173228 -0.503937 90.000000
+ E 14.173228 -3.551181 90.000000
+ E 14.173228 -6.094488 90.000000
+ E 0.000000 -6.094488 270.000000
+ E 0.000000 -3.047244 270.000000
+ S 0 0.000000 0.000000 -6.094488 0.787402 -6.094488
+ S 16777215 0 0.787402 -6.094488 13.385827 -6.094488
+ S 0 0.000000 13.385827 -6.094488 14.173228 -6.094488
+ S 0 0.000000 0.000000 -3.047244 0.787402 -3.047244
+ S 16777215 0 0.787402 -3.047244 13.385827 -3.047244
+ S 0 0.000000 0.000000 0.000000 0.787402 0.000000
+ S 16777215 0 0.787402 0.000000 13.385827 0.000000
+ S 0 0.000000 0.000000 3.047244 0.787402 3.047244
+ S 16777215 0 0.787402 3.047244 13.385827 3.047244
+ S 0 0.000000 0.000000 6.078740 0.787402 6.078740
+ S 16777215 0 0.787402 6.078740 13.385827 6.078740
+ S 0 0.000000 14.173228 -3.551181 13.385827 -3.551181
+ S 16777215 0 13.385827 -3.551181 0.787402 -3.551181
+ S 0 0.000000 14.173228 -0.503937 13.385827 -0.503937
+ S 16777215 0 13.385827 -0.503937 0.787402 -0.503937
+ S 0 0.000000 14.173228 2.543307 13.385827 2.543307
+ S 16777215 0 13.385827 2.543307 0.787402 2.543307
+ S 0 0.000000 14.173228 5.590551 13.385827 5.590551
+ S 16777215 0 13.385827 5.590551 0.787402 5.590551
+ L3 0 0.052632 0.000000 -8.279528 0 14.173228 -8.279528 0
+ L3 0 0.052632 14.173228 -8.279528 0 14.173228 8.255906 0
+ L3 0 0.052632 14.173228 8.255906 0 0.000000 8.255906 0
+ L3 0 0.052632 0.000000 8.255906 0 0.000000 -8.279528 0
+ L3 0 0.052632 0.787402 7.862205 0 13.385827 7.862205 0
+ L3 0 0.052632 13.385827 7.862205 0 13.385827 -7.492126 0
+ L3 0 0.052632 0.787402 -7.492126 0 0.787402 7.862205 0
+ L3 0 0.052632 8.661417 -7.492126 0 8.661417 -8.122047 0
+ L3 0 0.052632 8.661417 -8.122047 0 5.511811 -8.122047 0
+ L3 0 0.052632 5.511811 -8.122047 0 5.511811 -7.492126 0
+ L3 0 0.052632 0.787402 -7.492126 0 5.511811 -7.492126 0
+ L3 0 0.052632 8.661417 -7.492126 0 13.385827 -7.492126 0
+END
+
+SUBCONTENTS Mrklin - K/M-Track TurnTable
+TURNOUT HO "Marklin K/M-Track Turntable 12.2"" Dia 7.5d 48 Positions 7286"
+ P "1" 1
+ P "2" 2
+ P "3" 3
+ P "4" 4
+ P "5" 5
+ P "6" 6
+ P "7" 7
+ P "8" 8
+ P "9" 9
+ P "10" 10
+ P "11" 11
+ P "12" 12
+ P "13" 13
+ P "14" 14
+ P "15" 15
+ P "16" 16
+ P "17" 17
+ P "18" 18
+ P "19" 19
+ P "20" 20
+ P "21" 21
+ P "22" 22
+ P "23" 23
+ P "24" 24
+ G3 0 0.000000 0.129736 0.000000 0.000000 0 0.000000 360.000000
+ A3 0 0.031250 6.102362 0.000000 0.000000 0 0.000000 360.000000
+ A3 0 0.031250 7.598425 0.000000 0.000000 0 0.000000 360.000000
+ E 0.000000 6.102362 0.000000
+ E 0.796518 6.050155 7.500000
+ E 1.579408 5.894429 15.000000
+ E 2.335273 5.637847 22.500000
+ E 3.051181 5.284801 30.000000
+ E 3.714883 4.841329 37.500000
+ E 4.315022 4.315022 45.000000
+ E 4.841329 3.714883 52.500000
+ E 5.284801 3.051181 60.000000
+ E 5.637847 2.335273 67.500000
+ E 5.894429 1.579408 75.000000
+ E 6.050155 0.796518 82.500000
+ E 6.102362 0.000000 90.000000
+ E 6.050155 -0.796518 97.500000
+ E 5.894429 -1.579408 105.000000
+ E 5.637847 -2.335273 112.500000
+ E 5.284801 -3.051181 120.000000
+ E 4.841329 -3.714883 127.500000
+ E 4.315022 -4.315022 135.000000
+ E 3.714883 -4.841329 142.500000
+ E 3.051181 -5.284801 150.000000
+ E 2.335273 -5.637847 157.500000
+ E 1.579408 -5.894429 165.000000
+ E 0.796518 -6.050155 172.500000
+ E 0.000000 -6.102362 180.000000
+ E -0.796518 -6.050155 187.500000
+ E -1.579408 -5.894429 195.000000
+ E -2.335273 -5.637847 202.500000
+ E -3.051181 -5.284801 210.000000
+ E -3.714883 -4.841329 217.500000
+ E -4.315022 -4.315022 225.000000
+ E -4.841329 -3.714883 232.500000
+ E -5.284801 -3.051181 240.000000
+ E -5.637847 -2.335273 247.500000
+ E -5.894429 -1.579408 255.000000
+ E -6.050155 -0.796518 262.500000
+ E -6.102362 0.000000 270.000000
+ E -6.050155 0.796518 277.500000
+ E -5.894429 1.579408 285.000000
+ E -5.637847 2.335273 292.500000
+ E -5.284801 3.051181 300.000000
+ E -4.841329 3.714883 307.500000
+ E -4.315022 4.315022 315.000000
+ E -3.714883 4.841329 322.500000
+ E -3.051181 5.284801 330.000000
+ E -2.335273 5.637847 337.500000
+ E -1.579408 5.894429 345.000000
+ E -0.796518 6.050155 352.500000
+ S 16777215 0 0.000000 6.102362 0.000000 -6.102362
+ S 16777215 0 0.796518 6.050155 -0.796518 -6.050155
+ S 16777215 0 1.579408 5.894429 -1.579408 -5.894429
+ S 16777215 0 2.335273 5.637847 -2.335273 -5.637847
+ S 16777215 0 3.051181 5.284801 -3.051181 -5.284801
+ S 16777215 0 3.714883 4.841329 -3.714883 -4.841329
+ S 16777215 0 4.315022 4.315022 -4.315022 -4.315022
+ S 16777215 0 4.841329 3.714883 -4.841329 -3.714883
+ S 16777215 0 5.284801 3.051181 -5.284801 -3.051181
+ S 16777215 0 5.637847 2.335273 -5.637847 -2.335273
+ S 16777215 0 5.894429 1.579408 -5.894429 -1.579408
+ S 16777215 0 6.050155 0.796518 -6.050155 -0.796518
+ S 16777215 0 6.102362 0.000000 -6.102362 0.000000
+ S 16777215 0 6.050155 -0.796518 -6.050155 0.796518
+ S 16777215 0 5.894429 -1.579408 -5.894429 1.579408
+ S 16777215 0 5.637847 -2.335273 -5.637847 2.335273
+ S 16777215 0 5.284801 -3.051181 -5.284801 3.051181
+ S 16777215 0 4.841329 -3.714883 -4.841329 3.714883
+ S 16777215 0 4.315022 -4.315022 -4.315022 4.315022
+ S 16777215 0 3.714883 -4.841329 -3.714883 4.841329
+ S 16777215 0 3.051181 -5.284801 -3.051181 5.284801
+ S 16777215 0 2.335273 -5.637847 -2.335273 5.637847
+ S 16777215 0 1.579408 -5.894429 -1.579408 5.894429
+ S 16777215 0 0.796518 -6.050155 -0.796518 6.050155
+END
+TURNOUT HO "Mrklin K/M-Track Turntable Position Spoke Track 38mm 7287"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.496063 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 1.496063 0.000000
+ END
+TURNOUT HO "Mrklin K/M-Track Turntable Position Dummy Track 38mm 7287"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 16777215 0.000000 0.000000 0.000000 1.496063 0.000000
+ L3 0 0.060000 0.000000 0.324340 0 1.496063 0.324340 0
+ L3 0 0.060000 0.000000 -0.324340 0 1.496063 -0.324340 0
+END
+
+
+SUBCONTENTS Mrklin M-Track - Bridges
+TURNOUT HO "Mrklin M-Track Plate Girder Bridge 180mm 7161"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 7.086614 0.000000
+ L3 11579568 0.053333 0.000000 1.181102 0 7.086614 1.181102 0
+ L3 11579568 0.053333 0.000000 -1.181102 0 7.086614 -1.181102 0
+ L3 11579568 0.053333 0.000000 1.181102 0 0.000000 -1.181102 0
+ L3 11579568 0.053333 7.086614 1.181102 0 7.086614 -1.181102 0
+END
+TURNOUT HO "Mrklin M-Track Lattice Girder Bridge 180mm 7162"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 7.086614 0.000000
+ L3 11579568 0.053333 0.000000 1.181102 0 7.086614 1.181102 0
+ L3 11579568 0.053333 0.000000 -1.181102 0 7.086614 -1.181102 0
+ L3 11579568 0.053333 0.000000 1.181102 0 0.000000 -1.181102 0
+ L3 11579568 0.053333 7.086614 1.181102 0 7.086614 -1.181102 0
+ L3 11579568 0.053333 0.000000 -1.181102 0 0.708661 1.181102 0
+ L3 11579568 0.053333 0.708661 1.181102 0 1.417323 -1.181102 0
+ L3 11579568 0.053333 1.417323 -1.181102 0 2.125984 1.181102 0
+ L3 11579568 0.053333 2.125984 1.181102 0 2.834646 -1.181102 0
+ L3 11579568 0.053333 2.834646 -1.181102 0 3.543307 1.181102 0
+ L3 11579568 0.053333 3.543307 1.181102 0 4.251969 -1.181102 0
+ L3 11579568 0.053333 4.251969 -1.181102 0 4.960630 1.181102 0
+ L3 11579568 0.053333 4.960630 1.181102 0 5.669291 -1.181102 0
+ L3 11579568 0.053333 5.669291 -1.181102 0 6.377952 1.181102 0
+ L3 11579568 0.053333 6.377952 1.181102 0 7.086614 -1.181102 0
+END
+TURNOUT HO "Mrklin M-Track Arched Bridge 180mm 7163"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 14.173228 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 14.173228 0.000000
+ L3 11579568 0.053333 0.000000 1.181102 0 14.173228 1.181102 0
+ L3 11579568 0.053333 0.000000 -1.181102 0 14.173228 -1.181102 0
+ L3 11579568 0.053333 0.000000 1.181102 0 0.000000 -1.181102 0
+ L3 11579568 0.053333 14.173228 1.181102 0 14.173228 -1.181102 0
+ L3 11579568 0.053333 3.937008 1.181102 0 3.937008 -1.181102 0
+ L3 11579568 0.053333 3.937008 -1.181102 0 5.511811 1.181102 0
+ L3 11579568 0.053333 3.937008 1.181102 0 5.511811 -1.181102 0
+ L3 11579568 0.053333 5.511811 1.181102 0 5.511811 -1.181102 0
+ L3 11579568 0.053333 5.511811 -1.181102 0 7.086614 1.181102 0
+ L3 11579568 0.053333 5.511811 1.181102 0 7.086614 -1.181102 0
+ L3 11579568 0.053333 7.086614 1.181102 0 7.086614 -1.181102 0
+ L3 11579568 0.053333 7.086614 -1.181102 0 8.661417 1.181102 0
+ L3 11579568 0.053333 7.086614 1.181102 0 8.661417 -1.181102 0
+ L3 11579568 0.053333 8.661417 1.181102 0 8.661417 -1.181102 0
+ L3 11579568 0.053333 8.661417 -1.181102 0 10.236220 1.181102 0
+ L3 11579568 0.053333 8.661417 1.181102 0 10.236220 -1.181102 0
+ L3 11579568 0.053333 10.236220 1.181102 0 10.236220 -1.181102 0
+END
+TURNOUT HO "Mrklin M-Track Curved Straight Approach Bridge Section R360 30 7167"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 -1.898853 120.000000
+ C 0 0.000000 14.173228 0.000000 -14.173228 0.000000 30.000000
+ L3 11579568 0.053333 0.000000 1.377953 0 0.000000 -1.377953 0
+ A3 11579568 0.053333 15.551181 0.000000 -14.173228 0 0.000000 0.900000
+ L3 11579568 0.053333 0.244267 1.376034 0 0.469916 1.172553 0
+ A3 11579568 0.053333 15.551181 0.000000 -14.173228 0 29.1000000 0.900000
+ L3 11579568 0.053333 7.324791 -0.651964 0 7.563090 -0.585038 0
+ A3 11579568 0.053333 15.354331 0.000000 -14.173228 0 1.900000 26.600000
+ A3 11579568 0.053333 12.992126 0.000000 -14.173228 0 2.250000 26.000000
+ L3 11579568 0.053333 0.279127 -1.380998 0 0.502340 -1.190967 0
+ A3 11579568 0.053333 12.795276 0.000000 -14.173228 0 0.000000 1.250000
+ L3 11579568 0.053333 6.154384 -2.758417 0 6.154384 -2.955268 0
+ A3 11579568 0.053333 12.795276 0.000000 -14.173228 0 28.7500000 1.250000
+ L3 11579568 0.053333 7.775591 -0.705510 0 6.397638 -3.092195 0
+END
+TURNOUT HO "Mrklin M-Track Straight Approach Bridge Section 180mm 7168"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.086614 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 7.086614 0.000000
+ L3 11579568 0.053333 0.000000 1.377953 0 0.000000 -1.377953 0
+ L3 11579568 0.053333 0.000000 1.377953 0 0.196850 1.377953 0
+ L3 11579568 0.053333 0.196850 1.377953 0 0.393701 1.181102 0
+ L3 11579568 0.053333 0.393701 1.181102 0 6.692913 1.181102 0
+ L3 11579568 0.053333 6.692913 1.181102 0 6.889764 1.377953 0
+ L3 11579568 0.053333 6.889764 1.377953 0 7.086614 1.377953 0
+ L3 11579568 0.053333 0.000000 -1.377953 0 0.196850 -1.377953 0
+ L3 11579568 0.053333 0.196850 -1.377953 0 0.393701 -1.181102 0
+ L3 11579568 0.053333 0.393701 -1.181102 0 6.692913 -1.181102 0
+ L3 11579568 0.053333 6.692913 -1.181102 0 6.889764 -1.377953 0
+ L3 11579568 0.053333 6.889764 -1.377953 0 7.086614 -1.377953 0
+ L3 11579568 0.053333 7.086614 1.377953 0 7.086614 -1.377953 0
+END
+STRUCTURE HO "Mrklin M-Track Bridge Pier (30mm) 7064"
+ X pier 1.181102 ""
+ L3 11579568 0.053333 -0.295276 1.692913 0 0.295276 1.692913 0
+ L3 11579568 0.053333 -0.295276 1.692913 0 -0.787402 1.200787 0
+ L3 11579568 0.053333 0.295276 1.692913 0 0.787402 1.200787 0
+ L3 11579568 0.053333 -0.787402 1.200787 0 -0.787402 -1.200787 0
+ L3 11579568 0.053333 0.787402 1.200787 0 0.787402 -1.200787 0
+ L3 11579568 0.053333 -0.295276 -1.692913 0 -0.787402 -1.200787 0
+ L3 11579568 0.053333 0.295276 -1.692913 0 0.787402 -1.200787 0
+ L3 11579568 0.053333 -0.295276 -1.692913 0 0.295276 -1.692913 0
+END
+STRUCTURE HO "Mrklin M-Track Bridge Pier (6mm) 7065"
+ X pier 0.236220 ""
+ L3 11579568 0.053333 -0.295276 1.692913 0 0.295276 1.692913 0
+ L3 11579568 0.053333 -0.295276 1.692913 0 -0.787402 1.200787 0
+ L3 11579568 0.053333 0.295276 1.692913 0 0.787402 1.200787 0
+ L3 11579568 0.053333 -0.787402 1.200787 0 -0.787402 -1.200787 0
+ L3 11579568 0.053333 0.787402 1.200787 0 0.787402 -1.200787 0
+ L3 11579568 0.053333 -0.295276 -1.692913 0 -0.787402 -1.200787 0
+ L3 11579568 0.053333 0.295276 -1.692913 0 0.787402 -1.200787 0
+ L3 11579568 0.053333 -0.295276 -1.692913 0 0.295276 -1.692913 0
+END
+STRUCTURE HO "Mrklin M-Track Bridge Pier (baseplate 3mm) 7066"
+ X pier 0.118110 ""
+ L3 11579568 0.053333 -0.295276 1.692913 0 0.295276 1.692913 0
+ L3 11579568 0.053333 -0.295276 1.692913 0 -0.787402 1.200787 0
+ L3 11579568 0.053333 0.295276 1.692913 0 0.787402 1.200787 0
+ L3 11579568 0.053333 -0.787402 1.200787 0 -0.787402 -1.200787 0
+ L3 11579568 0.053333 0.787402 1.200787 0 0.787402 -1.200787 0
+ L3 11579568 0.053333 -0.295276 -1.692913 0 -0.787402 -1.200787 0
+ L3 11579568 0.053333 0.295276 -1.692913 0 0.787402 -1.200787 0
+ L3 11579568 0.053333 -0.295276 -1.692913 0 0.295276 -1.692913 0
+END
diff --git a/app/lib/params/HO-MetcalfeHOOO.xtp b/app/lib/params/HO-MetcalfeHOOO.xtp
index 3f28ae9..be4c9ab 100644
--- a/app/lib/params/HO-MetcalfeHOOO.xtp
+++ b/app/lib/params/HO-MetcalfeHOOO.xtp
@@ -1,5 +1,5 @@
CONTENTS Metcalfe card kits OO/HO
-STRUCTURE HO "Metcalfe Goods Shed 2"
+STRUCTURE OO "Metcalfe Goods Shed 2"
F3 12934714 0.000000 4
0.426199 3.312255 0
2.788403 3.312255 0
@@ -81,7 +81,7 @@ STRUCTURE HO "Metcalfe Goods Shed 2"
L3 0 0.093750 0.046875 2.820941 0 0.049580 4.198891 0
L3 16744512 0.104167 2.886829 2.328003 0 9.284466 2.328003 0
END
-STRUCTURE HO "Metcalfe GS Platform 7"
+STRUCTURE OO "Metcalfe GS Platform 7"
F3 16744512 0.000000 4
3.641732 0.393701 0
3.641732 0.393701 0
diff --git a/app/lib/params/HO-MicroEngineering-Bridges.xtp b/app/lib/params/HO-MicroEngineering-Bridges.xtp
new file mode 100644
index 0000000..775673b
--- /dev/null
+++ b/app/lib/params/HO-MicroEngineering-Bridges.xtp
@@ -0,0 +1,736 @@
+CONTENTS Micro Engineering HO Scale Bridges
+SUBCONTENTS Micro-Engineering HO Bridges - Deck Girder Open/Ballast
+TURNOUT HO "Micro-Engineering 30' Single-Track Deck Girder Bridge 75-502/508"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 4.133180 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 4.133180 0.000000
+ L 11579568 0.050000 0.000000 0.500000 4.133180 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 4.133180 -0.500000
+END
+TURNOUT HO "Micro-Engineering 50' Single-Track Deck Girder Bridge 75-501/507"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 6.888634 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 6.888634 0.000000
+ L 11579568 0.050000 0.000000 0.500000 6.888634 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 6.888634 -0.500000
+END
+TURNOUT HO "Micro-Engineering 85' Single-Track Deck Girder Bridge 75-505/506"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 11.710677 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 11.710677 0.000000
+ L 11579568 0.050000 0.000000 0.500000 11.710677 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 11.710677 -0.500000
+END
+
+SUBCONTENTS Micro-Engineering HO Bridges - Thru-Girder
+TURNOUT HO "Micro-Engineering 50' Single-Track Thru-Girder Bridge 75-520"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 6.888634 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 6.888634 0.000000
+ L 11579568 0.100000 0.000000 1.000000 6.888634 1.000000
+
+ L 11579568 0.050000 0.250000 1.000000 0.250000 0.625000
+ L 11579568 0.050000 1.847159 1.000000 1.847159 0.625000
+ L 11579568 0.050000 3.444317 1.000000 3.444317 0.625000
+ L 11579568 0.050000 5.041476 1.000000 5.041476 0.625000
+ L 11579568 0.050000 6.638634 1.000000 6.638634 0.625000
+
+ L 11579568 0.050000 0.250000 -0.625000 0.250000 -1.000000
+ L 11579568 0.050000 1.847159 -0.625000 1.847159 -1.000000
+ L 11579568 0.050000 3.444317 -0.625000 3.444317 -1.000000
+ L 11579568 0.050000 5.041476 -0.625000 5.041476 -1.000000
+ L 11579568 0.050000 6.638634 -0.625000 6.638634 -1.000000
+
+ L 11579568 0.100000 0.000000 -1.000000 6.888634 -1.000000
+END
+TURNOUT HO "Micro-Engineering 100' Single-Track Thru-Girder Bridge 75-522"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 13.777268 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 13.777268 0.000000
+ L 11579568 0.100000 0.000000 1.000000 13.777268 1.000000
+
+ L 11579568 0.050000 0.250000 1.000000 0.250000 0.625000
+ L 11579568 0.050000 1.878409 1.000000 1.878409 0.625000
+ L 11579568 0.050000 3.506817 1.000000 3.506817 0.625000
+ L 11579568 0.050000 5.135226 1.000000 5.135226 0.625000
+ L 11579568 0.050000 6.763634 1.000000 6.763634 0.625000
+ L 11579568 0.050000 7.013634 1.000000 7.013634 0.625000
+ L 11579568 0.050000 8.642043 1.000000 8.642043 0.625000
+ L 11579568 0.050000 10.270451 1.000000 10.270451 0.625000
+ L 11579568 0.050000 11.898860 1.000000 11.898860 0.625000
+ L 11579568 0.050000 13.527268 1.000000 13.527268 0.625000
+
+ L 11579568 0.050000 0.250000 -0.625000 0.250000 -1.000000
+ L 11579568 0.050000 1.878409 -0.625000 1.878409 -1.000000
+ L 11579568 0.050000 3.506817 -0.625000 3.506817 -1.000000
+ L 11579568 0.050000 5.135226 -0.625000 5.135226 -1.000000
+ L 11579568 0.050000 6.763634 -0.625000 6.763634 -1.000000
+ L 11579568 0.050000 7.013634 -0.625000 7.013634 -1.000000
+ L 11579568 0.050000 8.642043 -0.625000 8.642043 -1.000000
+ L 11579568 0.050000 10.270451 -0.625000 10.270451 -1.000000
+ L 11579568 0.050000 11.898860 -0.625000 11.898860 -1.000000
+ L 11579568 0.050000 13.527268 -0.625000 13.527268 -1.000000
+
+ L 11579568 0.100000 0.000000 -1.000000 13.777268 -1.000000
+END
+TURNOUT HO "Micro-Engineering 50' Double-Track Thru-Girder Bridge 75-521"
+ P "P0" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 6.888634 0.000000 90.000000
+ E 0.000000 -2.000000 270.000000
+ E 6.888634 -2.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 6.888634 0.000000
+ S 0 0.000000 0.000000 -2.000000 6.888634 -2.000000
+ L 11579568 0.100000 0.000000 1.000000 6.888634 1.000000
+
+ L 11579568 0.050000 0.250000 1.000000 0.250000 0.625000
+ L 11579568 0.050000 1.847159 1.000000 1.847159 0.625000
+ L 11579568 0.050000 3.444317 1.000000 3.444317 0.625000
+ L 11579568 0.050000 5.041476 1.000000 5.041476 0.625000
+ L 11579568 0.050000 6.638634 1.000000 6.638634 0.625000
+
+ L 11579568 0.050000 0.250000 -0.625000 0.250000 -1.000000
+ L 11579568 0.050000 1.847159 -0.625000 1.847159 -1.000000
+ L 11579568 0.050000 3.444317 -0.625000 3.444317 -1.000000
+ L 11579568 0.050000 5.041476 -0.625000 5.041476 -1.000000
+ L 11579568 0.050000 6.638634 -0.625000 6.638634 -1.000000
+
+ L 11579568 0.100000 0.000000 -1.000000 6.888634 -1.000000
+
+ L 11579568 0.050000 0.250000 -1.000000 0.250000 -1.375000
+ L 11579568 0.050000 1.847159 -1.000000 1.847159 -1.375000
+ L 11579568 0.050000 3.444317 -1.000000 3.444317 -1.375000
+ L 11579568 0.050000 5.041476 -1.000000 5.041476 -1.375000
+ L 11579568 0.050000 6.638634 -1.000000 6.638634 -1.375000
+
+ L 11579568 0.050000 0.250000 -2.625000 0.250000 -3.000000
+ L 11579568 0.050000 1.847159 -2.625000 1.847159 -3.000000
+ L 11579568 0.050000 3.444317 -2.625000 3.444317 -3.000000
+ L 11579568 0.050000 5.041476 -2.625000 5.041476 -3.000000
+ L 11579568 0.050000 6.638634 -2.625000 6.638634 -3.000000
+
+ L 11579568 0.100000 0.000000 -3.000000 6.888634 -3.000000
+END
+TURNOUT HO "Micro-Engineering 100' Double-Track Thru-Girder Bridge 75-523"
+ P "P0" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 13.777268 0.000000 90.000000
+ E 0.000000 -2.000000 270.000000
+ E 13.777268 -2.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 13.777268 0.000000
+ S 0 0.000000 0.000000 -2.000000 13.777268 -2.000000
+ L 11579568 0.100000 0.000000 1.000000 13.777268 1.000000
+
+ L 11579568 0.050000 0.250000 1.000000 0.250000 0.625000
+ L 11579568 0.050000 1.878409 1.000000 1.878409 0.625000
+ L 11579568 0.050000 3.506817 1.000000 3.506817 0.625000
+ L 11579568 0.050000 5.135226 1.000000 5.135226 0.625000
+ L 11579568 0.050000 6.763634 1.000000 6.763634 0.625000
+ L 11579568 0.050000 7.013634 1.000000 7.013634 0.625000
+ L 11579568 0.050000 8.642043 1.000000 8.642043 0.625000
+ L 11579568 0.050000 10.270451 1.000000 10.270451 0.625000
+ L 11579568 0.050000 11.898860 1.000000 11.898860 0.625000
+ L 11579568 0.050000 13.527268 1.000000 13.527268 0.625000
+
+ L 11579568 0.050000 0.250000 -0.625000 0.250000 -1.000000
+ L 11579568 0.050000 1.878409 -0.625000 1.878409 -1.000000
+ L 11579568 0.050000 3.506817 -0.625000 3.506817 -1.000000
+ L 11579568 0.050000 5.135226 -0.625000 5.135226 -1.000000
+ L 11579568 0.050000 6.763634 -0.625000 6.763634 -1.000000
+ L 11579568 0.050000 7.013634 -0.625000 7.013634 -1.000000
+ L 11579568 0.050000 8.642043 -0.625000 8.642043 -1.000000
+ L 11579568 0.050000 10.270451 -0.625000 10.270451 -1.000000
+ L 11579568 0.050000 11.898860 -0.625000 11.898860 -1.000000
+ L 11579568 0.050000 13.527268 -0.625000 13.527268 -1.000000
+
+ L 11579568 0.100000 0.000000 -1.000000 13.777268 -1.000000
+
+ L 11579568 0.050000 0.250000 -1.000000 0.250000 -1.375000
+ L 11579568 0.050000 1.878409 -1.000000 1.878409 -1.375000
+ L 11579568 0.050000 3.506817 -1.000000 3.506817 -1.375000
+ L 11579568 0.050000 5.135226 -1.000000 5.135226 -1.375000
+ L 11579568 0.050000 6.763634 -1.000000 6.763634 -1.375000
+ L 11579568 0.050000 7.013634 -1.000000 7.013634 -1.375000
+ L 11579568 0.050000 8.642043 -1.000000 8.642043 -1.375000
+ L 11579568 0.050000 10.270451 -1.000000 10.270451 -1.375000
+ L 11579568 0.050000 11.898860 -1.000000 11.898860 -1.375000
+ L 11579568 0.050000 13.527268 -1.000000 13.527268 -1.375000
+
+ L 11579568 0.050000 0.250000 -2.625000 0.250000 -3.000000
+ L 11579568 0.050000 1.878409 -2.625000 1.878409 -3.000000
+ L 11579568 0.050000 3.506817 -2.625000 3.506817 -3.000000
+ L 11579568 0.050000 5.135226 -2.625000 5.135226 -3.000000
+ L 11579568 0.050000 6.763634 -2.625000 6.763634 -3.000000
+ L 11579568 0.050000 7.013634 -2.625000 7.013634 -3.000000
+ L 11579568 0.050000 8.642043 -2.625000 8.642043 -3.000000
+ L 11579568 0.050000 10.270451 -2.625000 10.270451 -3.000000
+ L 11579568 0.050000 11.898860 -2.625000 11.898860 -3.000000
+ L 11579568 0.050000 13.527268 -2.625000 13.527268 -3.000000
+
+ L 11579568 0.100000 0.000000 -3.000000 13.777268 -3.000000
+END
+
+SUBCONTENTS Micro-Engineering HO Bridges - Tall Steel Viaduct Base Kits
+TURNOUT HO "Micro-Engineering 150' Tall Steel Viaduct Light Weight Bridge 75-513"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 20.665901 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 20.665901 0.000000
+ L 11579568 0.050000 0.000000 0.500000 20.665901 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 20.665901 -0.500000
+ L 11579568 0.241820 6.888634 2.187500 6.888634 -2.187500
+ L 11579568 0.241820 13.777268 2.187500 13.777268 -2.187500
+END
+TURNOUT HO "Micro-Engineering 150' Tall Steel Viaduct Standard Bridge 75-514"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 20.665901 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 20.665901 0.000000
+
+ L 11579568 0.050000 4.133180 2.187500 8.266360 2.187500
+ L 11579568 0.050000 4.133180 2.187500 8.266360 1.625000
+ L 11579568 0.050000 4.133180 1.625000 8.266360 2.187500
+ L 11579568 0.050000 4.133180 1.625000 8.266360 1.625000
+ L 11579568 0.050000 4.133180 1.625000 8.266360 1.062500
+ L 11579568 0.050000 4.133180 1.062500 8.266360 1.625000
+ L 11579568 0.050000 4.133180 1.062500 8.266360 1.062500
+ L 11579568 0.050000 4.133180 1.062500 8.266360 0.500000
+ L 11579568 0.050000 4.133180 0.500000 8.266360 1.062500
+
+ L 11579568 0.050000 12.399540 2.187500 16.532720 2.187500
+ L 11579568 0.050000 12.399540 2.187500 16.532720 1.625000
+ L 11579568 0.050000 12.399540 1.625000 16.532720 2.187500
+ L 11579568 0.050000 12.399540 1.625000 16.532720 1.625000
+ L 11579568 0.050000 12.399540 1.625000 16.532720 1.062500
+ L 11579568 0.050000 12.399540 1.062500 16.532720 1.625000
+ L 11579568 0.050000 12.399540 1.062500 16.532720 1.062500
+ L 11579568 0.050000 12.399540 1.062500 16.532720 0.500000
+ L 11579568 0.050000 12.399540 0.500000 16.532720 1.062500
+
+ L 11579568 0.050000 0.000000 0.500000 20.665901 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 20.665901 -0.500000
+
+ L 11579568 0.050000 4.133180 -0.500000 8.266360 -1.062500
+ L 11579568 0.050000 4.133180 -1.062500 8.266360 -0.500000
+ L 11579568 0.050000 4.133180 -1.062500 8.266360 -1.062500
+ L 11579568 0.050000 4.133180 -1.062500 8.266360 -1.625000
+ L 11579568 0.050000 4.133180 -1.625000 8.266360 -1.062500
+ L 11579568 0.050000 4.133180 -1.625000 8.266360 -1.625000
+ L 11579568 0.050000 4.133180 -1.625000 8.266360 -2.187500
+ L 11579568 0.050000 4.133180 -2.187500 8.266360 -1.625000
+ L 11579568 0.050000 4.133180 -2.187500 8.266360 -2.187500
+
+ L 11579568 0.050000 12.399540 -0.500000 16.532720 -1.062500
+ L 11579568 0.050000 12.399540 -1.062500 16.532720 -0.500000
+ L 11579568 0.050000 12.399540 -1.062500 16.532720 -1.062500
+ L 11579568 0.050000 12.399540 -1.062500 16.532720 -1.625000
+ L 11579568 0.050000 12.399540 -1.625000 16.532720 -1.062500
+ L 11579568 0.050000 12.399540 -1.625000 16.532720 -1.625000
+ L 11579568 0.050000 12.399540 -1.625000 16.532720 -2.187500
+ L 11579568 0.050000 12.399540 -2.187500 16.532720 -1.625000
+ L 11579568 0.050000 12.399540 -2.187500 16.532720 -2.187500
+
+ L 11579568 0.241820 4.133180 2.187500 4.133180 -2.187500
+ L 11579568 0.241820 8.266360 2.187500 8.266360 -2.187500
+
+ L 11579568 0.241820 12.399540 2.187500 12.399540 -2.187500
+ L 11579568 0.241820 16.532720 2.187500 16.532720 -2.187500
+END
+TURNOUT HO "Micro-Engineering 210' Tall Steel Viaduct Standard Bridge 75-515"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 28.932262 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 28.932262 0.000000
+
+ L 11579568 0.050000 4.133180 2.187500 8.266360 2.187500
+ L 11579568 0.050000 4.133180 2.187500 8.266360 1.625000
+ L 11579568 0.050000 4.133180 1.625000 8.266360 2.187500
+ L 11579568 0.050000 4.133180 1.625000 8.266360 1.625000
+ L 11579568 0.050000 4.133180 1.625000 8.266360 1.062500
+ L 11579568 0.050000 4.133180 1.062500 8.266360 1.625000
+ L 11579568 0.050000 4.133180 1.062500 8.266360 1.062500
+ L 11579568 0.050000 4.133180 1.062500 8.266360 0.500000
+ L 11579568 0.050000 4.133180 0.500000 8.266360 1.062500
+
+ L 11579568 0.050000 12.399540 2.187500 16.532720 2.187500
+ L 11579568 0.050000 12.399540 2.187500 16.532720 1.625000
+ L 11579568 0.050000 12.399540 1.625000 16.532720 2.187500
+ L 11579568 0.050000 12.399540 1.625000 16.532720 1.625000
+ L 11579568 0.050000 12.399540 1.625000 16.532720 1.062500
+ L 11579568 0.050000 12.399540 1.062500 16.532720 1.625000
+ L 11579568 0.050000 12.399540 1.062500 16.532720 1.062500
+ L 11579568 0.050000 12.399540 1.062500 16.532720 0.500000
+ L 11579568 0.050000 12.399540 0.500000 16.532720 1.062500
+
+ L 11579568 0.050000 20.665900 0.500000 24.799080 1.062500
+ L 11579568 0.050000 20.665900 1.062500 24.799080 0.500000
+ L 11579568 0.050000 20.665900 1.062500 24.799080 1.062500
+ L 11579568 0.050000 20.665900 1.062500 24.799080 1.625000
+ L 11579568 0.050000 20.665900 1.625000 24.799080 1.062500
+ L 11579568 0.050000 20.665900 1.625000 24.799080 1.625000
+ L 11579568 0.050000 20.665900 1.625000 24.799080 2.187500
+ L 11579568 0.050000 20.665900 2.187500 24.799080 1.625000
+ L 11579568 0.050000 20.665900 2.187500 24.799080 2.187500
+
+ L 11579568 0.050000 0.000000 0.500000 28.932262 0.500000
+
+ L 11579568 0.050000 0.000000 -0.500000 28.932262 -0.500000
+
+ L 11579568 0.050000 4.133180 -0.500000 8.266360 -1.062500
+ L 11579568 0.050000 4.133180 -1.062500 8.266360 -0.500000
+ L 11579568 0.050000 4.133180 -1.062500 8.266360 -1.062500
+ L 11579568 0.050000 4.133180 -1.062500 8.266360 -1.625000
+ L 11579568 0.050000 4.133180 -1.625000 8.266360 -1.062500
+ L 11579568 0.050000 4.133180 -1.625000 8.266360 -1.625000
+ L 11579568 0.050000 4.133180 -1.625000 8.266360 -2.187500
+ L 11579568 0.050000 4.133180 -2.187500 8.266360 -1.625000
+ L 11579568 0.050000 4.133180 -2.187500 8.266360 -2.187500
+
+ L 11579568 0.050000 12.399540 -0.500000 16.532720 -1.062500
+ L 11579568 0.050000 12.399540 -1.062500 16.532720 -0.500000
+ L 11579568 0.050000 12.399540 -1.062500 16.532720 -1.062500
+ L 11579568 0.050000 12.399540 -1.062500 16.532720 -1.625000
+ L 11579568 0.050000 12.399540 -1.625000 16.532720 -1.062500
+ L 11579568 0.050000 12.399540 -1.625000 16.532720 -1.625000
+ L 11579568 0.050000 12.399540 -1.625000 16.532720 -2.187500
+ L 11579568 0.050000 12.399540 -2.187500 16.532720 -1.625000
+ L 11579568 0.050000 12.399540 -2.187500 16.532720 -2.187500
+
+ L 11579568 0.050000 20.665900 -0.500000 24.799080 -1.062500
+ L 11579568 0.050000 20.665900 -1.062500 24.799080 -0.500000
+ L 11579568 0.050000 20.665900 -1.062500 24.799080 -1.062500
+ L 11579568 0.050000 20.665900 -1.062500 24.799080 -1.625000
+ L 11579568 0.050000 20.665900 -1.625000 24.799080 -1.062500
+ L 11579568 0.050000 20.665900 -1.625000 24.799080 -1.625000
+ L 11579568 0.050000 20.665900 -1.625000 24.799080 -2.187500
+ L 11579568 0.050000 20.665900 -2.187500 24.799080 -1.625000
+ L 11579568 0.050000 20.665900 -2.187500 24.799080 -2.187500
+
+ L 11579568 0.241820 4.133180 2.187500 4.133180 -2.187500
+ L 11579568 0.241820 8.266360 2.187500 8.266360 -2.187500
+
+ L 11579568 0.241820 12.399540 2.187500 12.399540 -2.187500
+ L 11579568 0.241820 16.532720 2.187500 16.532720 -2.187500
+
+ L 11579568 0.241820 20.665900 2.187500 20.665900 -2.187500
+ L 11579568 0.241820 24.799080 2.187500 24.799080 -2.187500
+END
+
+TURNOUT HO "Micro-Engineering 210' Tall Steel Viaduct Low Bridge 31' High 75-550A"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 28.932262 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 28.932262 0.000000
+ L 11579568 0.050000 0.000000 0.500000 28.932262 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 28.932262 -0.500000
+
+ L 11579568 0.241820 4.133180 1.062500 4.133180 -1.062500
+ L 11579568 0.241820 8.266360 1.062500 8.266360 -1.062500
+
+ L 11579568 0.241820 12.399540 1.062500 12.399540 -1.062500
+ L 11579568 0.241820 16.532720 1.062500 16.532720 -1.062500
+
+ L 11579568 0.241820 20.665900 1.062500 20.665900 -1.062500
+ L 11579568 0.241820 24.799080 1.062500 24.799080 -1.062500
+END
+TURNOUT HO "Micro-Engineering 210' Tall Steel Viaduct Low Bridge 54' High 75-550B"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 28.932262 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 28.932262 0.000000
+ L 11579568 0.050000 0.000000 0.500000 28.932262 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 28.932262 -0.500000
+
+ L 11579568 0.241820 4.133180 1.625000 4.133180 -1.625000
+ L 11579568 0.241820 8.266360 1.625000 8.266360 -1.625000
+
+ L 11579568 0.241820 12.399540 1.625000 12.399540 -1.625000
+ L 11579568 0.241820 16.532720 1.625000 16.532720 -1.625000
+
+ L 11579568 0.241820 20.665900 1.625000 20.665900 -1.625000
+ L 11579568 0.241820 24.799080 1.625000 24.799080 -1.625000
+END
+TURNOUT HO "Micro-Engineering 210' Tall Steel Viaduct Low Bridge 77' High 75-550C"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 28.932262 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 28.932262 0.000000
+ L 11579568 0.050000 0.000000 0.500000 28.932262 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 28.932262 -0.500000
+
+ L 11579568 0.241820 4.133180 2.187500 4.133180 -2.187500
+ L 11579568 0.241820 8.266360 2.187500 8.266360 -2.187500
+
+ L 11579568 0.241820 12.399540 2.187500 12.399540 -2.187500
+ L 11579568 0.241820 16.532720 2.187500 16.532720 -2.187500
+
+ L 11579568 0.241820 20.665900 2.187500 20.665900 -2.187500
+ L 11579568 0.241820 24.799080 2.187500 24.799080 -2.187500
+END
+
+
+SUBCONTENTS Micro-Engineering HO Bridges - Tall Steel Viaduct Length Extensions
+TURNOUT HO "Micro-Engineering 30' Tall Steel Viaduct Bridge Connector 75-526"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 4.133180 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 4.133180 0.000000
+ L 11579568 0.050000 0.000000 2.187500 4.133180 2.187500
+ L 11579568 0.050000 0.000000 2.187500 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.625000 4.133180 2.187500
+ L 11579568 0.050000 0.000000 1.625000 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.625000 4.133180 1.062500
+ L 11579568 0.050000 0.000000 1.062500 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.062500 4.133180 1.062500
+ L 11579568 0.050000 0.000000 1.062500 4.133180 0.500000
+ L 11579568 0.050000 0.000000 0.500000 4.133180 1.062500
+
+ L 11579568 0.050000 0.000000 0.500000 4.133180 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 4.133180 -0.500000
+
+ L 11579568 0.050000 0.000000 -0.500000 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -0.500000
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -2.187500
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -2.187500
+
+ L 11579568 0.241820 0.000000 2.187500 0.000000 -2.187500
+ L 11579568 0.241820 4.133180 2.187500 4.133180 -2.187500
+END
+TURNOUT HO "Micro-Engineering 60' Tall Steel Viaduct Bridge Extension 75-525"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 8.266361 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 8.266361 0.000000
+ L 11579568 0.050000 0.000000 2.187500 4.133180 2.187500
+ L 11579568 0.050000 0.000000 2.187500 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.625000 4.133180 2.187500
+ L 11579568 0.050000 0.000000 1.625000 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.625000 4.133180 1.062500
+ L 11579568 0.050000 0.000000 1.062500 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.062500 4.133180 1.062500
+ L 11579568 0.050000 0.000000 1.062500 4.133180 0.500000
+ L 11579568 0.050000 0.000000 0.500000 4.133180 1.062500
+
+ L 11579568 0.050000 0.000000 0.500000 4.133180 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 4.133180 -0.500000
+
+ L 11579568 0.050000 0.000000 -0.500000 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -0.500000
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -2.187500
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -2.187500
+
+ L 11579568 0.241820 0.000000 2.187500 0.000000 -2.187500
+ L 11579568 0.241820 4.133180 2.187500 4.133180 -2.187500
+END
+TURNOUT HO "Micro-Engineering 80' Tall Steel Viaduct Bridge Extension 75-524"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 11.021814 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 11.021814 0.000000
+ L 11579568 0.050000 0.000000 2.187500 4.133180 2.187500
+ L 11579568 0.050000 0.000000 2.187500 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.625000 4.133180 2.187500
+ L 11579568 0.050000 0.000000 1.625000 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.625000 4.133180 1.062500
+ L 11579568 0.050000 0.000000 1.062500 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.062500 4.133180 1.062500
+ L 11579568 0.050000 0.000000 1.062500 4.133180 0.500000
+ L 11579568 0.050000 0.000000 0.500000 4.133180 1.062500
+
+ L 11579568 0.050000 0.000000 0.500000 4.133180 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 4.133180 -0.500000
+
+ L 11579568 0.050000 0.000000 -0.500000 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -0.500000
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -2.187500
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -2.187500
+
+ L 11579568 0.241820 0.000000 2.187500 0.000000 -2.187500
+ L 11579568 0.241820 4.133180 2.187500 4.133180 -2.187500
+END
+
+SUBCONTENTS Micro-Engineering HO Bridges - Tall Steel Viaduct Tower, Bents and Height Extensions
+STRUCTURE HO "Micro-Engineering Tall Steel Viaduct Height Extension(1 Story) 75-546A"
+ X pier 0.000000 ""
+ L 11579568 0.050000 0.000000 2.750000 4.133180 2.750000
+ L 11579568 0.050000 0.000000 2.750000 4.133180 2.187500
+ L 11579568 0.050000 0.000000 2.187500 4.133180 2.750000
+
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -2.750000
+ L 11579568 0.050000 0.000000 -2.750000 4.133180 -2.187500
+ L 11579568 0.050000 0.000000 -2.750000 4.133180 -2.750000
+
+ L 11579568 0.241820 0.000000 2.750000 0.000000 -2.750000
+ L 11579568 0.241820 4.133180 2.750000 4.133180 -2.750000
+END
+STRUCTURE HO "Micro-Engineering Tall Steel Viaduct Height Extension(2 Story) 75-546B"
+ X pier 0.000000 ""
+ L 11579568 0.050000 0.000000 3.312500 4.133180 3.312500
+ L 11579568 0.050000 0.000000 3.312500 4.133180 2.750000
+ L 11579568 0.050000 0.000000 2.750000 4.133180 3.312500
+ L 11579568 0.050000 0.000000 2.750000 4.133180 2.750000
+ L 11579568 0.050000 0.000000 2.750000 4.133180 2.187500
+ L 11579568 0.050000 0.000000 2.187500 4.133180 2.750000
+
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -2.750000
+ L 11579568 0.050000 0.000000 -2.750000 4.133180 -2.187500
+ L 11579568 0.050000 0.000000 -2.750000 4.133180 -2.750000
+ L 11579568 0.050000 0.000000 -2.750000 4.133180 -3.312500
+ L 11579568 0.050000 0.000000 -3.312500 4.133180 -2.750000
+ L 11579568 0.050000 0.000000 -3.312500 4.133180 -3.312500
+
+ L 11579568 0.241820 0.000000 3.312500 0.000000 -3.312500
+ L 11579568 0.241820 4.133180 3.312500 4.133180 -3.312500
+END
+STRUCTURE HO "Micro-Engineering Tall Steel Viaduct Tower (4 Story) 75-169"
+ X pier 0.000000 ""
+ L 11579568 0.050000 0.000000 2.750000 4.133180 2.750000
+ L 11579568 0.050000 0.000000 2.750000 4.133180 2.187500
+ L 11579568 0.050000 0.000000 2.187500 4.133180 2.750000
+ L 11579568 0.050000 0.000000 2.187500 4.133180 2.187500
+ L 11579568 0.050000 0.000000 2.187500 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.625000 4.133180 2.187500
+ L 11579568 0.050000 0.000000 1.625000 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.625000 4.133180 1.062500
+ L 11579568 0.050000 0.000000 1.062500 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.062500 4.133180 1.062500
+ L 11579568 0.050000 0.000000 1.062500 4.133180 0.500000
+ L 11579568 0.050000 0.000000 0.500000 4.133180 1.062500
+
+ L 11579568 0.050000 0.000000 -0.500000 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -0.500000
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -2.187500
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -2.187500
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -2.750000
+ L 11579568 0.050000 0.000000 -2.750000 4.133180 -2.187500
+ L 11579568 0.050000 0.000000 -2.750000 4.133180 -2.750000
+
+ L 11579568 0.241820 0.000000 2.750000 0.000000 -2.750000
+ L 11579568 0.241820 4.133180 2.750000 4.133180 -2.750000
+END
+STRUCTURE HO "Micro-Engineering Tall Steel Viaduct Bent (1 Story) 75-XXX"
+ X pier 0.000000 ""
+ L 11579568 0.241820 0.000000 1.062500 0.000000 -1.062500
+END
+STRUCTURE HO "Micro-Engineering Tall Steel Viaduct Bent (2 Story) 75-XXX"
+ X pier 0.000000 ""
+ L 11579568 0.241820 0.000000 1.625000 0.000000 -1.625000
+END
+STRUCTURE HO "Micro-Engineering Tall Steel Viaduct Bent (3 Story) 75-XXX"
+ X pier 0.000000 ""
+ L 11579568 0.241820 0.000000 2.187500 0.000000 -2.187500
+END
+STRUCTURE HO "Micro-Engineering Tall Steel Viaduct Bent (4 Story) 75-169"
+ X pier 0.000000 ""
+ L 11579568 0.241820 0.000000 2.750000 0.000000 -2.750000
+END
+
+SUBCONTENTS Micro-Engineering HO Bridges - City Viaducts
+TURNOUT HO "Micro-Engineering 90' Single-Track City Viaduct Bridge 75-509"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 12.399541 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 12.399541 0.000000
+ L 11579568 0.100000 0.000000 0.500000 12.399541 0.500000
+ L 11579568 0.100000 0.000000 -0.500000 12.399541 -0.500000
+
+ L 11579568 0.241820 4.012279 1.000000 4.254081 1.000000
+ L 11579568 0.241820 4.012279 -1.000000 4.254081 -1.000000
+ L 11579568 0.241820 8.145456 1.000000 8.387261 1.000000
+ L 11579568 0.241820 8.145456 -1.000000 8.387261 -1.000000
+ L 11579568 0.100000 4.133180 1.000000 8.266360 1.000000
+ L 11579568 0.100000 4.133180 -1.000000 8.266360 -1.000000
+ L 11579568 0.100000 4.133180 1.000000 4.133180 -1.000000
+ L 11579568 0.100000 8.266360 1.000000 8.266360 -1.000000
+
+END
+TURNOUT HO "Micro-Engineering 150' Single-Track City Viaduct Bridge 75-511"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 20.665901 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 20.665901 0.000000
+ L 11579568 0.100000 0.000000 0.500000 20.665901 0.500000
+ L 11579568 0.100000 0.000000 -0.500000 20.665901 -0.500000
+
+ L 11579568 0.241820 4.012279 1.000000 4.254081 1.000000
+ L 11579568 0.241820 4.012279 -1.000000 4.254081 -1.000000
+ L 11579568 0.241820 8.145456 1.000000 8.387261 1.000000
+ L 11579568 0.241820 8.145456 -1.000000 8.387261 -1.000000
+ L 11579568 0.100000 4.133180 1.000000 8.266360 1.000000
+ L 11579568 0.100000 4.133180 -1.000000 8.266360 -1.000000
+ L 11579568 0.100000 4.133180 1.000000 4.133180 -1.000000
+ L 11579568 0.100000 8.266360 1.000000 8.266360 -1.000000
+
+ L 11579568 0.241820 12.279053 1.000000 12.520855 1.000000
+ L 11579568 0.241820 12.279053 -1.000000 12.520855 -1.000000
+ L 11579568 0.241820 16.411369 1.000000 16.653171 1.000000
+ L 11579568 0.241820 16.411369 -1.000000 16.653171 -1.000000
+ L 11579568 0.100000 12.399954 1.000000 16.532270 1.000000
+ L 11579568 0.100000 12.399954 -1.000000 16.532270 -1.000000
+ L 11579568 0.100000 12.399954 1.000000 12.399954 -1.000000
+ L 11579568 0.100000 16.532270 1.000000 16.532270 -1.000000
+
+END
+TURNOUT HO "Micro-Engineering 90' Double-Track City Viaduct Bridge 75-510"
+ P "P0" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 12.399541 0.000000 90.000000
+ E 0.000000 -1.000000 270.000000
+ E 12.399541 -1.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 12.399541 0.000000
+ S 0 0.000000 0.000000 -1.000000 12.399541 -1.000000
+ L 11579568 0.100000 0.000000 0.500000 12.399541 0.500000
+ L 11579568 0.100000 0.000000 -0.500000 12.399541 -0.500000
+ L 11579568 0.100000 0.000000 -1.500000 12.399541 -1.500000
+
+ L 11579568 0.241820 4.012279 0.500000 4.254081 0.500000
+ L 11579568 0.241820 4.012279 -1.500000 4.254081 -1.500000
+ L 11579568 0.241820 8.145456 0.500000 8.387261 0.500000
+ L 11579568 0.241820 8.145456 -1.500000 8.387261 -1.500000
+ L 11579568 0.100000 4.133180 0.500000 8.266360 0.500000
+ L 11579568 0.100000 4.133180 -1.500000 8.266360 -1.500000
+ L 11579568 0.100000 4.133180 0.500000 4.133180 -1.500000
+ L 11579568 0.100000 8.266360 0.500000 8.266360 -1.500000
+END
+TURNOUT HO "Micro-Engineering 150' Double-Track City Viaduct Bridge 75-512"
+ P "P0" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 20.665901 0.000000 90.000000
+ E 0.000000 -1.000000 270.000000
+ E 20.665901 -1.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 20.665901 0.000000
+ S 0 0.000000 0.000000 -1.000000 20.665901 -1.000000
+ L 11579568 0.100000 0.000000 0.500000 20.665901 0.500000
+ L 11579568 0.100000 0.000000 -0.500000 20.665901 -0.500000
+ L 11579568 0.100000 0.000000 -1.500000 20.665901 -1.500000
+
+ L 11579568 0.241820 4.012279 0.500000 4.254081 0.500000
+ L 11579568 0.241820 4.012279 -1.500000 4.254081 -1.500000
+ L 11579568 0.241820 8.145456 0.500000 8.387261 0.500000
+ L 11579568 0.241820 8.145456 -1.500000 8.387261 -1.500000
+
+ L 11579568 0.100000 4.133180 0.500000 8.266360 0.500000
+ L 11579568 0.100000 4.133180 -1.500000 8.266360 -1.500000
+ L 11579568 0.100000 4.133180 0.500000 4.133180 -1.500000
+ L 11579568 0.100000 8.266360 0.500000 8.266360 -1.500000
+
+ L 11579568 0.241820 12.279053 0.500000 12.520855 0.500000
+ L 11579568 0.241820 12.279053 -1.500000 12.520855 -1.500000
+ L 11579568 0.241820 16.411369 0.500000 16.653171 0.500000
+ L 11579568 0.241820 16.411369 -1.500000 16.653171 -1.500000
+
+ L 11579568 0.100000 12.399954 0.500000 16.532270 0.500000
+ L 11579568 0.100000 12.399954 -1.500000 16.532270 -1.500000
+ L 11579568 0.100000 12.399954 0.500000 12.399954 -1.500000
+ L 11579568 0.100000 16.532270 0.500000 16.532270 -1.500000
+END
+STRUCTURE HO "Micro-Engineering City Viaduct Tower 75-168"
+ X pier 0.000000 ""
+ L 11579568 0.241820 -0.120910 0.500000 0.120910 0.500000
+ L 11579568 0.241820 -0.120910 -1.500000 0.120910 -1.500000
+ L 11579568 0.241820 4.012279 0.500000 4.254081 0.500000
+ L 11579568 0.241820 4.012279 -1.500000 4.254081 -1.500000
+
+ L 11579568 0.100000 0.000000 0.500000 4.133180 0.500000
+ L 11579568 0.100000 0.000000 -1.500000 4.133180 -1.500000
+ L 11579568 0.100000 0.000000 0.500000 0.000000 -1.500000
+ L 11579568 0.100000 4.133180 0.500000 4.133180 -1.500000
+END
+
+SUBCONTENTS Micro-Engineering HO Bridges - Combination Bridges
+TURNOUT HO "Micro-Engineering 110' Deck-Thru-Girder-Deck Bridge 75-530"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 15.154994 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 15.154994 0.000000
+ L 11579568 0.100000 0.000000 0.500000 4.133180 0.500000
+ L 11579568 0.100000 0.000000 -0.500000 4.133180 -0.500000
+
+ L 11579568 0.100000 4.133180 1.000000 11.021814 1.000000
+
+ L 11579568 0.050000 4.383180 1.000000 4.383180 0.625000
+ L 11579568 0.050000 5.980339 1.000000 5.980339 0.625000
+ L 11579568 0.050000 7.577497 1.000000 7.577497 0.625000
+ L 11579568 0.050000 9.174656 1.000000 9.174656 0.625000
+ L 11579568 0.050000 10.771814 1.000000 10.771814 0.625000
+
+ L 11579568 0.050000 4.383180 -0.625000 4.383180 -1.000000
+ L 11579568 0.050000 5.980339 -0.625000 5.980339 -1.000000
+ L 11579568 0.050000 7.577497 -0.625000 7.577497 -1.000000
+ L 11579568 0.050000 9.174656 -0.625000 9.174656 -1.000000
+ L 11579568 0.050000 10.771814 -0.625000 10.771814 -1.000000
+
+ L 11579568 0.100000 4.133180 -1.000000 11.021814 -1.000000
+
+ L 11579568 0.100000 11.021814 0.500000 15.154994 0.500000
+ L 11579568 0.100000 11.021814 -0.500000 15.154994 -0.500000
+
+ L 11579568 0.050000 4.133180 1.000000 4.133180 -1.000000
+ L 11579568 0.050000 11.021814 1.000000 11.021814 -1.000000
+
+END
+TURNOUT HO "Micro-Engineering 160' Deck-Thru-Girder-Deck Bridge 75-532"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 22.043628 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 22.043628 0.000000
+ L 11579568 0.100000 0.000000 0.500000 4.133180 0.500000
+ L 11579568 0.100000 0.000000 -0.500000 4.133180 -0.500000
+
+ L 11579568 0.100000 4.133180 1.000000 17.910448 1.000000
+
+ L 11579568 0.050000 4.383180 1.000000 4.383180 0.625000
+ L 11579568 0.050000 6.011589 1.000000 6.011589 0.625000
+ L 11579568 0.050000 7.639997 1.000000 7.639997 0.625000
+ L 11579568 0.050000 9.268406 1.000000 9.268406 0.625000
+ L 11579568 0.050000 10.896814 1.000000 10.896814 0.625000
+ L 11579568 0.050000 11.146814 1.000000 11.146814 0.625000
+ L 11579568 0.050000 12.775223 1.000000 12.775223 0.625000
+ L 11579568 0.050000 14.403631 1.000000 14.403631 0.625000
+ L 11579568 0.050000 16.032040 1.000000 16.032040 0.625000
+ L 11579568 0.050000 17.660448 1.000000 17.660448 0.625000
+
+ L 11579568 0.050000 4.383180 -0.625000 4.383180 -1.000000
+ L 11579568 0.050000 6.011589 -0.625000 6.011589 -1.000000
+ L 11579568 0.050000 7.639997 -0.625000 7.639997 -1.000000
+ L 11579568 0.050000 9.268406 -0.625000 9.268406 -1.000000
+ L 11579568 0.050000 10.896814 -0.625000 10.896814 -1.000000
+ L 11579568 0.050000 11.146814 -0.625000 11.146814 -1.000000
+ L 11579568 0.050000 12.775223 -0.625000 12.775223 -1.000000
+ L 11579568 0.050000 14.403631 -0.625000 14.403631 -1.000000
+ L 11579568 0.050000 16.032040 -0.625000 16.032040 -1.000000
+ L 11579568 0.050000 17.660448 -0.625000 17.660448 -1.000000
+
+ L 11579568 0.100000 4.133180 -1.000000 17.910448 -1.000000
+
+ L 11579568 0.100000 17.910448 0.500000 22.043628 0.500000
+ L 11579568 0.100000 17.910448 -0.500000 22.043628 -0.500000
+
+ L 11579568 0.050000 4.133180 1.000000 4.133180 -1.000000
+ L 11579568 0.050000 17.910448 1.000000 17.910448 -1.000000
+END
diff --git a/app/lib/params/HO-MicroEngineering.xtp b/app/lib/params/HO-MicroEngineering.xtp
index 7ac88fa..9860be0 100644
--- a/app/lib/params/HO-MicroEngineering.xtp
+++ b/app/lib/params/HO-MicroEngineering.xtp
@@ -1,4 +1,4 @@
-CONTENTS Micro-Engineering HO-Scale
+CONTENTS Micro Engineering HO Scale
SUBCONTENTS Micro-Engineering HO Code 70 Turnouts
TURNOUT HO "Micro Engineering #6 Code 70 RH 14-806"
P "Normal" 1 2
diff --git a/app/lib/params/HO-Peco-Code100Streamline.xtp b/app/lib/params/HO-Peco-Code100Streamline.xtp
index a60fe62..013c810 100644
--- a/app/lib/params/HO-Peco-Code100Streamline.xtp
+++ b/app/lib/params/HO-Peco-Code100Streamline.xtp
@@ -69,70 +69,82 @@ TURNOUT HO "Peco RH Long Turnout, Insulfrog SL-88"
SUBCONTENTS Peco HO Scale Code 100 Curved Turnouts
TURNOUT HO "Peco Curved Left Turnout SL-87"
- P "Normal" 1 4 5
- P "Reverse" 1 2 3
+ P "Normal" 1 2 3 4
+ P "Reverse" 1 2 5 6 7
E 0.000000 0.000000 270.000000
E 9.930000 0.830000 80.473000
- E 9.680000 1.790000 69.666000
- S 0 0.000000 0.000000 0.000000 0.649600 0.000000
- C 0 0.000000 -23.421390 0.649631 23.421390 159.665924 20.334152
- S 0 0.000000 8.788401 1.459572 9.680000 1.790000
- C 0 0.000000 -52.020505 0.649669 52.020505 170.472924 9.527152
- S 0 0.000000 9.259766 0.717503 9.930000 0.830000
-END
+ E 9.680000 1.970000 69.666000
+ C 0 0.000000 60.000000 0.000000 60.000000 179.952254 0.047746
+ S 0 0.000000 0.050000 0.000021 0.549978 0.002473
+ C 0 0.000000 -59.997741 -0.016498 59.997539 170.505131 8.953896
+ C 0 0.000000 60.000000 -0.000742 60.002463 170.473000 0.047746
+ C 0 0.000000 -20.009032 0.514864 20.011474 166.525509 13.373944
+ C 0 0.000000 -42.289079 -5.246889 41.537410 159.398651 6.331063
+ C 0 0.000000 30.000000 -0.744764 30.100487 159.666000 0.095493
+ END
TURNOUT HO "Peco Curved Right Turnout SL-86"
- P "Normal" 1 4 5
- P "Reverse" 1 2 3
+ P "Normal" 1 2 3 4
+ P "Reverse" 1 2 5 6 7
E 0.000000 0.000000 270.000000
E 9.930000 -0.830000 99.527000
- E 9.680000 -1.790000 110.334000
- S 0 0.000000 0.000000 0.000000 0.649600 0.000000
- C 0 0.000000 23.421390 0.649507 -23.421390 0.000076 20.334152
- S 0 0.000000 8.788401 -1.459572 9.680000 -1.790000
- C 0 0.000000 52.020505 0.649393 -52.020505 0.000076 9.527152
- S 0 0.000000 9.259766 -0.717503 9.930000 -0.830000
-END
+ E 9.680000 -1.970000 110.334000
+ C 0 0.000000 60.000000 0.000000 -60.000000 0.000000 0.047746
+ S 0 0.000000 0.050000 -0.000021 0.549978 -0.002473
+ C 0 0.000000 59.997741 -0.016498 -59.997539 0.540973 8.953896
+ C 0 0.000000 60.000000 -0.000742 -60.002463 9.479254 0.047746
+ C 0 0.000000 20.009032 0.514864 -20.011474 0.100547 13.373944
+ C 0 0.000000 42.289079 -5.246889 -41.537410 14.270285 6.331063
+ C 0 0.000000 30.000000 -0.744764 -30.100487 20.238507 0.095493
+ END
SUBCONTENTS Peco HO Scale Code 100 WYE Turnouts
TURNOUT HO "Peco Short Y Turnout SL-97"
- P "Left" 1 2 3
- P "Right" 1 4 5
+ P "Left" 1 2 3 4 5
+ P "Right" 1 2 6 7 8
E 0.000000 0.000000 270.000000
- E 5.733858 0.517913 78.000000
- E 5.733858 -0.517913 102.000000
- S 0 0.000000 0.000000 0.000000 1.455910 0.000000
- C 0 0.000000 -17.519683 1.455934 17.519683 167.999924 12.000152
- S 0 0.000000 5.098500 0.382856 5.733858 0.517913
- C 0 0.000000 17.519683 1.455841 -17.519683 0.000076 12.000152
- S 0 0.000000 5.098500 -0.382856 5.733858 -0.517913
+ E 5.733858 0.517717 78.000000
+ E 5.733858 -0.517717 102.000000
+ S 0 0.000000 0.000000 0.000000 0.050000 0.000000
+ S 0 0.000000 0.050000 0.000000 0.837008 0.000000
+ C 0 0.000000 -21.959287 1.049798 21.958256 174.182810 6.372407
+ C 0 0.000000 -25.426526 0.368265 25.371829 167.930412 5.504160
+ C 0 0.000000 23.701181 0.806106 23.700970 168.000000 0.120871
+ C 0 0.000000 21.967293 1.049905 -21.966261 359.444707 6.370099
+ C 0 0.000000 25.415926 0.370538 -25.361368 6.563042 5.506467
+ C 0 0.000000 23.701181 10.661611 22.665537 192.120871 0.120871
END
TURNOUT HO "Peco Large Y Turnout SL-98"
- P "Left" 1 2 3
- P "Right" 1 4 5
+ P "Left" 1 2 3 4
+ P "Right" 1 2 5 6
E 0.000000 0.000000 270.000000
- E 8.638189 0.479134 84.000556
- E 8.638189 -0.479134 95.999444
- S 0 0.000000 0.000000 0.000000 0.649600 0.000000
- C 0 0.000000 -65.447085 0.649687 65.447085 174.000480 5.999596
- S 0 0.000000 7.490219 0.358477 8.638189 0.479134
- C 0 0.000000 65.447085 0.649339 -65.447085 0.000076 5.999596
- S 0 0.000000 7.490219 -0.358477 8.638189 -0.479134
-END
+ E 8.638189 0.479134 84.000000
+ E 8.638189 -0.479134 96.000000
+ S 0 0.000000 0.000000 0.000000 0.050000 0.000000
+ S 0 0.000000 0.050000 0.000000 0.855906 0.000000
+ C 0 0.000000 -56.219397 1.192646 56.218388 176.392954 3.950236
+ C 0 0.000000 -108.369470 -3.503854 108.166608 173.593356 2.049359
+ C 0 0.000000 54.238706 1.176210 -54.237760 359.661640 4.094836
+ C 0 0.000000 116.607497 -4.432846 -116.362546 4.506721 1.904748
+ END
TURNOUT HO "Peco Medium Radius 3 Way Turnout, Insulfrog SL-99"
- P "Left" 1 2 3
- P "Normal" 1 6
- P "Right" 1 4 5
+ P "Normal" 1 2 3 4
+ P "Left" 1 2 5 6 7
+ P "Right" 1 2 8 9 10
E 0.000000 0.000000 270.000000
E 8.540945 0.994094 78.000000
E 8.540945 -0.994094 102.000000
E 8.644882 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 0.649600 0.000000
- C 0 0.000000 -30.584413 0.649641 30.584413 167.999924 12.000152
- S 0 0.000000 7.008531 0.668359 8.540945 0.994094
- C 0 0.000000 30.584413 0.649478 -30.584413 0.000076 12.000152
- S 0 0.000000 7.008531 -0.668359 8.540945 -0.994094
- S 0 0.000000 0.649600 0.000000 8.644882 0.000000
-END
+ S 0 0.000000 0.000000 0.000000 0.050000 0.000000
+ S 0 0.000000 0.050000 0.000000 0.855118 0.000000
+ S 0 0.000000 0.855118 0.000000 8.594882 0.000000
+ S 0 0.000000 8.594882 0.000000 8.594882 0.000000
+ C 0 0.000000 -26.000276 1.156979 25.998523 172.159155 8.506060
+ C 0 0.000000 -63.372404 -5.584016 62.773069 167.166627 3.490515
+ S 0 0.000000 8.492038 0.983699 8.492038 0.983699
+ C 0 0.000000 25.160469 1.142991 -25.158822 359.344438 8.793112
+ C 0 0.000000 69.079411 -6.862926 -68.355735 9.639618 3.203358
+ S 0 0.000000 8.492038 -1.004490 8.492038 -1.004490
+ END
SUBCONTENTS Peco HO Scale Code 100 Slip Turnouts
TURNOUT HO "Peco Single Slip, Insulfrog SL-80"
@@ -167,25 +179,25 @@ END
SUBCONTENTS Peco HO Scale Code 100 CatchPoints
TURNOUT HO "PECO RH CatchPoint SL-84"
- P "Closed" 1 2
+ P "Closed" 1 2 4
P "Open" 1 3
E 0.000000 0.000000 270.000000
- E 4.094488 0.000000 90.000000
- E 3.250000 0.125000 85.500000
+ E 4.090000 0.000000 90.000000
S 0 0.000000 0.000000 0.000000 0.649000 0.000000
- S 0 0.000000 0.649000 0.000000 4.094488 0.000000
- S 0 0.000000 0.649000 0.000000 3.250000 0.12500
-END
+ S 0 0.000000 0.649000 0.000000 3.441000 0.000000
+ S 0 0.000000 0.649000 -0.000000 3.441000 -0.20000
+ S 0 0.000000 3.441000 0.000000 4.090000 0.000000
+ END
TURNOUT HO "PECO LH CatchPoint SL-85"
- P "Closed" 1 2
+ P "Closed" 1 2 4
P "Open" 1 3
E 0.000000 0.000000 270.000000
- E 4.094488 0.000000 90.00000
- E 3.250000 -0.12500 95.000000
+ E 4.090000 0.000000 90.000000
S 0 0.000000 0.000000 0.000000 0.649000 0.000000
- S 0 0.000000 0.649000 0.000000 4.094488 0.000000
- S 0 0.000000 0.649000 0.000000 3.250000 -0.12500
-END
+ S 0 0.000000 0.649000 0.000000 3.441000 0.000000
+ S 0 0.000000 0.649000 -0.000000 3.441000 0.20000
+ S 0 0.000000 3.441000 0.000000 4.090000 0.000000
+ END
SUBCONTENTS Peco HO Scale Crossings
TURNOUT HO "Peco Short Crossing, Insulfrog SL-93"
diff --git a/app/lib/params/HO-Peco-Code75Finescale.xtp b/app/lib/params/HO-Peco-Code75Finescale.xtp
index f2a99a3..b697d67 100644
--- a/app/lib/params/HO-Peco-Code75Finescale.xtp
+++ b/app/lib/params/HO-Peco-Code75Finescale.xtp
@@ -69,70 +69,78 @@ TURNOUT HO "Peco RH Long Turnout, Electrofrog SL-E188"
SUBCONTENTS Peco HO Scale Code 75 Curved Turnouts
TURNOUT HO "Peco Curved Left Turnout, Electrofrog SL-E187"
- P "Normal" 1 4 5
- P "Reverse" 1 2 3
+ P "Normal" 1 2 3 4
+ P "Reverse" 1 2 5 6 7
E 0.000000 0.000000 270.000000
E 9.930000 0.830000 80.473000
- E 9.680000 1.790000 69.666000
- S 0 0.000000 0.000000 0.000000 0.649600 0.000000
- C 0 0.000000 -23.421390 0.649631 23.421390 159.665924 20.334152
- S 0 0.000000 8.788401 1.459572 9.680000 1.790000
- C 0 0.000000 -52.020505 0.649669 52.020505 170.472924 9.527152
- S 0 0.000000 9.259766 0.717503 9.930000 0.830000
-END
+ E 9.680000 1.970000 69.666000
+ C 0 0.000000 60.000000 0.000000 60.000000 179.952254 0.047746
+ S 0 0.000000 0.050000 0.000021 0.549978 0.002473
+ C 0 0.000000 -59.997741 -0.016498 59.997539 170.505131 8.953896
+ C 0 0.000000 60.000000 -0.000742 60.002463 170.473000 0.047746
+ C 0 0.000000 -20.009032 0.514864 20.011474 166.525509 13.373944
+ C 0 0.000000 -42.289079 -5.246889 41.537410 159.398651 6.331063
+ C 0 0.000000 30.000000 -0.744764 30.100487 159.666000 0.095493
+ END
TURNOUT HO "Peco Curved Right Turnout, Electrofrog SL-E186"
- P "Normal" 1 4 5
- P "Reverse" 1 2 3
+ P "Normal" 1 2 3 4
+ P "Reverse" 1 2 5 6 7
E 0.000000 0.000000 270.000000
E 9.930000 -0.830000 99.527000
- E 9.680000 -1.790000 110.334000
- S 0 0.000000 0.000000 0.000000 0.649600 0.000000
- C 0 0.000000 23.421390 0.649507 -23.421390 0.000076 20.334152
- S 0 0.000000 8.788401 -1.459572 9.680000 -1.790000
- C 0 0.000000 52.020505 0.649393 -52.020505 0.000076 9.527152
- S 0 0.000000 9.259766 -0.717503 9.930000 -0.830000
-END
+ E 9.680000 -1.970000 110.334000
+ C 0 0.000000 60.000000 0.000000 -60.000000 0.000000 0.047746
+ S 0 0.000000 0.050000 -0.000021 0.549978 -0.002473
+ C 0 0.000000 59.997741 -0.016498 -59.997539 0.540973 8.953896
+ C 0 0.000000 60.000000 -0.000742 -60.002463 9.479254 0.047746
+ C 0 0.000000 20.009032 0.514864 -20.011474 0.100547 13.373944
+ C 0 0.000000 42.289079 -5.246889 -41.537410 14.270285 6.331063
+ C 0 0.000000 30.000000 -0.744764 -30.100487 20.238507 0.095493
+ END
SUBCONTENTS Peco HO Scale Code 75 WYE Turnouts
TURNOUT HO "Peco Short Y Turnout, Electrofrog SL-E197"
- P "Left" 1 2 3
- P "Right" 1 4 5
+ P "Left" 1 2 3 4 5
+ P "Right" 1 2 6 7 8
E 0.000000 0.000000 270.000000
- E 5.733858 0.517913 78.000000
- E 5.733858 -0.517913 102.000000
- S 0 0.000000 0.000000 0.000000 1.455910 0.000000
- C 0 0.000000 -17.519683 1.455934 17.519683 167.999924 12.000152
- S 0 0.000000 5.098500 0.382856 5.733858 0.517913
- C 0 0.000000 17.519683 1.455841 -17.519683 0.000076 12.000152
- S 0 0.000000 5.098500 -0.382856 5.733858 -0.517913
+ E 5.733858 0.517717 78.000000
+ E 5.733858 -0.517717 102.000000
+ S 0 0.000000 0.000000 0.000000 0.050000 0.000000
+ S 0 0.000000 0.050000 0.000000 0.837008 0.000000
+ C 0 0.000000 -21.959287 1.049798 21.958256 174.182810 6.372407
+ C 0 0.000000 -25.426526 0.368265 25.371829 167.930412 5.504160
+ C 0 0.000000 23.701181 0.806106 23.700970 168.000000 0.120871
+ C 0 0.000000 21.967293 1.049905 -21.966261 359.444707 6.370099
+ C 0 0.000000 25.415926 0.370538 -25.361368 6.563042 5.506467
+ C 0 0.000000 23.701181 10.661611 22.665537 192.120871 0.120871
END
TURNOUT HO "Peco Medium Y Turnout, Electrofrog SL-E198"
- P "Left" 1 2 3
- P "Right" 1 4 5
+ P "Left" 1 2 3 4
+ P "Right" 1 2 5 6
E 0.000000 0.000000 270.000000
- E 8.638189 0.479134 84.000556
- E 8.638189 -0.479134 95.999444
- S 0 0.000000 0.000000 0.000000 0.649600 0.000000
- C 0 0.000000 -65.447085 0.649687 65.447085 174.000480 5.999596
- S 0 0.000000 7.490219 0.358477 8.638189 0.479134
- C 0 0.000000 65.447085 0.649339 -65.447085 0.000076 5.999596
- S 0 0.000000 7.490219 -0.358477 8.638189 -0.479134
+ E 8.638189 0.479134 84.000000
+ E 8.638189 -0.479134 96.000000
+ S 0 0.000000 0.000000 0.000000 0.050000 0.000000
+ S 0 0.000000 0.050000 0.000000 0.855906 0.000000
+ C 0 0.000000 -56.219397 1.192646 56.218388 176.392954 3.950236
+ C 0 0.000000 -108.369470 -3.503854 108.166608 173.593356 2.049359
+ C 0 0.000000 54.238706 1.176210 -54.237760 359.661640 4.094836
+ C 0 0.000000 116.607497 -4.432846 -116.362546 4.506721 1.904748
END
TURNOUT HO "Peco Asymmetric 3 Way Turnout SL-E199"
P "Left" 1 2 3 4
P "Normal" 1 2 7
P "Right" 1 5 6
E 0.000000 0.000000 270.000000
- E 10.630315 1.007480 78.088000
- E 8.535433 -1.007480 101.912000
- E 10.735433 0.000000 90.000000
+ E 10.748031 1.082677 77.500000
+ E 8.425197 -1.082677 102.500000
+ E 10.826772 0.000000 90.000000
S 0 0.000000 0.000000 0.000000 0.649600 -0.000000
- S 0 0.000000 0.649600 -0.000000 1.623177 0.000000
- C 0 0.000000 -40.557971 1.623231 40.557971 168.087924 11.912152
- S 0 0.000000 9.994810 0.873405 10.630315 1.007480
- C 0 0.000000 29.809939 0.649481 -29.809939 0.000076 11.912152
- S 0 0.000000 6.802716 -0.641949 8.535433 -1.007480
- S 0 0.000000 1.623177 0.000000 10.735433 0.000000
+ S 0 0.000000 0.649600 -0.000000 1.511778 0.000000
+ C 0 0.000000 -39.743423 1.511778 39.743423 167.500000 12.500000
+ S 0 0.000000 10.113829 0.942078 10.748031 1.082677
+ C 0 0.000000 26.406268 0.649600 -26.406268 0.000000 12.500000
+ S 0 0.000000 6.364962 -0.625934 8.425197 -1.082677
+ S 0 0.000000 1.511778 0.000000 10.826772 0.000000
END
SUBCONTENTS Peco HO Scale Code 75 Slip Turnouts
@@ -172,7 +180,6 @@ TURNOUT HO "PECO RH CatchPoint SL-184"
P "Open" 1 3
E 0.000000 0.000000 270.000000
E 3.579921 0.000000 90.000000
- E 2.500000 0.125000 85.000000
S 0 0.000000 0.000000 0.000000 0.649000 0.000000
S 0 0.000000 0.649000 0.000000 3.579921 0.000000
S 0 0.000000 0.649000 0.000000 2.500000 0.12500
@@ -182,7 +189,6 @@ TURNOUT HO "PECO LH CatchPoint SL-185"
P "Open" 1 3
E 0.000000 0.000000 270.000000
E 3.579921 0.000000 90.00000
- E 2.500000 -0.12500 95.500000
S 0 0.000000 0.000000 0.000000 0.649000 0.000000
S 0 0.000000 0.649000 0.000000 3.579921 0.000000
S 0 0.000000 0.649000 0.000000 2.500000 -0.12500
@@ -278,7 +284,6 @@ TURNOUT HO "Peco Code 75 Inspection Pit(Stair End) LK-156A"
L 0 0.020000 0.000000 0.280000 1.948819 0.28000
L 0 0.020000 0.000000 -0.280000 1.948819 -0.280000
L 0 0.020000 0.000000 -0.551091 1.948819 -0.551091
-
END
TURNOUT HO "Peco Code 75 Inspection Pit(Mid Section) LK-156B"
P "Normal" 1
diff --git a/app/lib/params/HO-RatioHOOO.xtp b/app/lib/params/HO-RatioHOOO.xtp
index 8d66201..56faa2a 100644
--- a/app/lib/params/HO-RatioHOOO.xtp
+++ b/app/lib/params/HO-RatioHOOO.xtp
@@ -1,5 +1,5 @@
CONTENTS Ratio kits OO/HO
-STRUCTURE HO "Ratio Coaling Stage 1"
+STRUCTURE OO "Ratio Coaling Stage 1"
F3 8388672 0.000000 4
0.118110 0.610236 0
2.460630 0.610236 0
@@ -119,7 +119,7 @@ STRUCTURE HO "Ratio Coaling Stage 1"
L3 0 0.052083 2.204724 0.610236 0 2.204724 0.039370 0
L3 0 0.052083 2.322835 0.590551 0 2.322835 0.059055 0
END
-STRUCTURE HO "Ratio Public Loo 7"
+STRUCTURE OO "Ratio Public Loo 7"
F3 12632256 0.000000 4
0.019685 2.657480 0
2.165354 2.657480 0
@@ -199,7 +199,7 @@ STRUCTURE HO "Ratio Public Loo 7"
L3 0 0.031250 1.393578 0.606176 0 1.393578 0.015625 0
L3 0 0.031250 1.885704 0.507751 0 1.885704 0.015625 0
END
-STRUCTURE HO "Ratio greenhouse 8"
+STRUCTURE OO "Ratio greenhouse 8"
L3 0 0.031250 0.015625 1.590428 0 2.180979 1.590428 0
L3 0 0.031250 2.180979 1.590428 0 2.180979 0.015625 0
L3 0 0.031250 2.180979 0.015625 0 0.015625 0.015625 0
diff --git a/app/lib/params/HO-Roco HO Code 83.xtp b/app/lib/params/HO-Roco HO Code 83.xtp
new file mode 100644
index 0000000..a66e761
--- /dev/null
+++ b/app/lib/params/HO-Roco HO Code 83.xtp
@@ -0,0 +1,469 @@
+CONTENTS Roco HO Scale Code-83 Tracks
+#Original Designs by Peter Klapwijk, Dave Bullis and Mats Wikstrm
+SUBCONTENTS Roco HO - Straight Tracks
+TURNOUT HO "Roco G1 straight, 230mm 42410"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.055118 0.000000 90.000000
+ S 0 0 0.000000 0.000000 9.055118 0.000000
+END
+TURNOUT HO "Roco G1/2 straight, 115mm 42412"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.527559 0.000000 90.000000
+ S 0 0 0.000000 0.000000 4.527559 0.000000
+END
+TURNOUT HO "Roco G1/4 straight, 57.5mm 42413"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.263780 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.263780 0.000000
+END
+TURNOUT HO "Roco G4 straight, 920mm 42406"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 36.220472 0.000000 90.000000
+ S 0 0 0.000000 0.000000 36.220472 0.000000
+END
+TURNOUT HO "Roco DG1 straight, 119mm 42411"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.685039 0.000000 90.000000
+ S 0 0 0.000000 0.000000 4.685039 0.000000
+END
+TURNOUT HO "Roco D2 straight 2mm c/w 493/496 98000"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 0.078740 0.000000 90.000000
+ S 0 0 0.000000 0.000000 0.078740 0.000000
+END
+TURNOUT HO "Roco D4 straight 4mm c/w 497/448/451/454 98001"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 0.157480 0.000000 90.000000
+ S 0 0 0.000000 0.000000 0.157480 0.000000
+END
+TURNOUT HO "Roco D5 straight 5mm c/w 493/496/488/489 98002"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 0.196850 0.000000 90.000000
+ S 0 0 0.000000 0.000000 0.196850 0.000000
+END
+TURNOUT HO "Roco D8 straight 8mm c/w 440/441 98003"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 0.314961 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 0.314961 0.000000
+END
+TURNOUT HO "Roco D12 straight 12mm c/w 497/448/451/454 98008"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 0.472441 0.000000 90.000000
+ S 0 0 0.000000 0.000000 0.472441 0.000000
+END
+
+SUBCONTENTS Roco HO - Misc Tracks
+TURNOUT HO "Roco Uncoupler Track 115mm 42419"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.527559 0.000000 90.000000
+ S 0 0 0.000000 0.000000 4.527559 0.000000
+ L3 8424071 0.550000 1.000000 0.000000 0 2.500000 0.000000 0
+ L3 8424071 0.600000 1.000000 1.000000 0 4.000000 1.000000 0
+END
+TURNOUT HO "Roco Feeder Track 115mm 42421"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.527559 0.000000 90.000000
+ S 0 0 0.000000 0.000000 4.527559 0.000000
+ L3 10249759 0.550000 0.500000 0.000000 0 4.000000 0.000000 0
+END
+
+
+SUBCONTENTS Roco HO - Curve Tracks
+TURNOUT HO "Roco R2, R358mm/30d 42422"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.047244 -1.888303 120.000000
+ C 0 0 14.094488 0.000000 -14.094488 0.000000 30.000000
+END
+TURNOUT HO "Roco R2 1/4, R358mm/7.5d 42408"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.839700 -0.120580 97.500000
+ C 0 0 14.094488 0.000000 -14.094488 0.000000 7.500000
+END
+TURNOUT HO "Roco R3, R419.6mm/30d 42423"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 8.259843 -2.213218 120.000000
+ C 0 0 16.519685 0.000000 -16.519685 0.000000 30.000000
+END
+TURNOUT HO "Roco R3 1/4, R419.6mm/7.5d 42409"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.156252 -0.141328 97.500000
+ C 0 0 16.519685 0.000000 -16.519685 0.000000 7.500000
+END
+TURNOUT HO "Roco R4, R481.2mm/30d 42424"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.472441 -2.538133 120.000000
+ C 0 0 18.944882 0.000000 -18.944882 0.000000 30.000000
+END
+TURNOUT HO "Roco R5, R542.8mm/30d 42425"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.685039 -2.863048 120.000000
+ C 0 0 21.370079 0.000000 -21.370079 0.000000 30.000000
+END
+TURNOUT HO "Roco R6, R604.4mm/30d 42426"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 11.897638 -3.187962 120.000000
+ C 0 0 23.795276 0.000000 -23.795276 0.000000 30.000000
+END
+TURNOUT HO "Roco R9, R826.4mm/15d 42427"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 8.420790 -1.108618 105.000000
+ C 0 0 -32.535433 0.000046 32.535433 0.000000 15.000000
+END
+TURNOUT HO "Roco R10, R888.0mm/15d 42428"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.048477 -1.191255 105.000000
+ C 0 0 34.960630 0.000000 -34.960630 0.000000 15.000000
+END
+TURNOUT HO "Roco R20, R1962.0mm/5d 42430"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.732266 -0.293937 95.000000
+ C 0 0 77.244094 0.000000 -77.244094 0.000000 5.000000
+END
+
+
+SUBCONTENTS Roco HO - Turnouts
+TURNOUT HO "Roco WL15, 230mm, R873.5mm/15d 42440"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 9.055118 0.000000 90.000000
+ E 9.055118 1.212598 75.000000
+ S 0 0 0.000000 0.000000 0.648600 0.000000
+ S 0 0 0.648600 0.000000 9.055118 0.000000
+ C 0 0 -29.479767 0.648639 29.479767 164.999924 15.000152
+ S 0 0 8.278594 1.004517 9.055118 1.212598
+ END
+TURNOUT HO "Roco WR15, 230mm, R873.5mm/15d 42441"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 9.055118 0.000000 90.000000
+ E 9.055118 -1.212598 105.000000
+ S 0 0 0.000000 0.000000 0.648600 0.000000
+ S 0 0 0.648600 0.000000 9.055118 0.000000
+ C 0 0 29.479767 0.648483 -29.479767 0.000076 15.000152
+ S 0 0 8.278594 -1.004517 9.055118 -1.212598
+ END
+TURNOUT HO "Roco WL10, 345mm, R1946mm/10d 42488"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 13.582677 0.000000 90.000000
+ E 13.582677 1.212598 80.000000
+ S 0 0 0.000000 0.000000 0.648600 0.000000
+ S 0 0 0.648600 0.000000 13.582677 0.000000
+ C 0 0 -69.234030 0.648692 69.234030 169.999924 10.000152
+ S 0 0 12.671134 1.051851 13.582677 1.212598
+ END
+TURNOUT HO "Roco WR10, 345mm, R1946mm/10d 42489"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 13.582677 0.000000 90.000000
+ E 13.582677 -1.212598 100.000000
+ S 0 0 0.000000 0.000000 0.648600 0.000000
+ S 0 0 0.648600 0.000000 13.582677 0.000000
+ C 0 0 69.234030 0.648324 -69.234030 0.000076 10.000152
+ S 0 0 12.671134 -1.051851 13.582677 -1.212598
+ END
+
+
+SUBCONTENTS Roco HO - Curved Turnouts
+TURNOUT HO "Roco BWL R2/R3 Curved Left 30d 42464"
+ P "Normal" 1 6 4 5
+ P "Reverse" 1 2 3
+ E 0.000000 0.000000 270.000000
+ E 9.472441 1.888303 60.000000
+ E 7.047244 1.888303 60.000000
+ S 0 0.000000 0.000000 0.000000 0.649632 0.000000
+ C 0 0.000000 -11.670097 0.649648 11.670097 149.999924 30.000152
+ S 0 0.000000 6.484703 1.563509 7.047244 1.888303
+ C 0 0.000000 -11.670073 3.074857 11.670073 149.999924 30.000152
+ S 0 0.000000 8.909900 1.563506 9.472441 1.888303
+ S 0 0.000000 0.649632 0.000000 3.074841 0.000000
+END
+TURNOUT HO "Roco BWR R2/R3 Curved Right 30d 42465"
+ P "Normal" 1 6 4 5
+ P "Reverse" 1 2 3
+ E 0.000000 0.000000 270.000000
+ E 9.472441 -1.888303 120.000000
+ E 7.047244 -1.888303 120.000000
+ S 0 0.000000 0.000000 0.000000 0.649632 0.000000
+ C 0 0.000000 11.670097 0.649586 -11.670097 0.000076 30.000152
+ S 0 0.000000 6.484703 -1.563509 7.047244 -1.888303
+ C 0 0.000000 11.670073 3.074795 -11.670073 0.000076 30.000152
+ S 0 0.000000 8.909900 -1.563506 9.472441 -1.888303
+ S 0 0.000000 0.649632 0.000000 3.074841 0.000000
+END
+TURNOUT HO "Roco BWL R5/R6 Curved Left 30d 42470"
+ P "Normal" 1 6 4 5
+ P "Reverse" 1 2 3
+ E 0.000000 0.000000 270.000000
+ E 13.110236 2.863048 60.000000
+ E 10.685039 2.863048 60.000000
+ S 0 0.000000 0.000000 0.000000 0.649646 0.000000
+ C 0 0.000000 -18.945668 0.649671 18.945668 149.999924 30.000152
+ S 0 0.000000 10.122516 2.538259 10.685039 2.863048
+ C 0 0.000000 -18.945644 3.074880 18.945644 149.999924 30.000152
+ S 0 0.000000 12.547713 2.538256 13.110236 2.863048
+ S 0 0.000000 0.649646 0.000000 3.074855 0.000000
+END
+TURNOUT HO "Roco BWR R5/R6 Curved Right 30d 42471"
+ P "Normal" 1 6 4 5
+ P "Reverse" 1 2 3
+ E 0.000000 0.000000 270.000000
+ E 13.110236 -2.863048 120.000000
+ E 10.685039 -2.863048 120.000000
+ S 0 0.000000 0.000000 0.000000 0.649646 0.000000
+ C 0 0.000000 18.945668 0.649570 -18.945668 0.000076 30.000152
+ S 0 0.000000 10.122516 -2.538259 10.685039 -2.863048
+ C 0 0.000000 18.945644 3.074779 -18.945644 0.000076 30.000152
+ S 0 0.000000 12.547713 -2.538256 13.110236 -2.863048
+ S 0 0.000000 0.649646 0.000000 3.074855 0.000000
+END
+TURNOUT HO "Roco BWL R9/R10 Curved Left 30d 42476"
+ P "Normal" 1 6 4 5
+ P "Reverse" 1 2 3
+ E 0.000000 0.000000 270.000000
+ E 18.692913 4.358921 60.000000
+ E 16.267717 4.358921 60.000000
+ S 0 0.000000 0.000000 0.000000 0.649673 0.000000
+ C 0 0.000000 -30.110981 0.649713 30.110981 149.999924 30.000152
+ S 0 0.000000 15.705221 4.034140 16.267717 4.358921
+ C 0 0.000000 -30.110957 3.074922 30.110957 149.999924 30.000152
+ S 0 0.000000 18.130418 4.034137 18.692913 4.358921
+ S 0 0.000000 0.649673 0.000000 3.074882 0.000000
+END
+TURNOUT HO "Roco BWR R9/R10 Curved Right 30d 42477"
+ P "Normal" 1 6 4 5
+ P "Reverse" 1 2 3
+ E 0.000000 0.000000 270.000000
+ E 18.692913 -4.358922 120.000000
+ E 16.267717 -4.358922 120.000000
+ S 0 0.000000 0.000000 0.000000 0.649673 0.000000
+ C 0 0.000000 30.110981 0.649553 -30.110981 0.000076 30.000152
+ S 0 0.000000 15.705221 -4.034140 16.267717 -4.358921
+ C 0 0.000000 30.110957 3.074762 -30.110957 0.000076 30.000152
+ S 0 0.000000 18.130418 -4.034137 18.692913 -4.358921
+ S 0 0.000000 0.649673 0.000000 3.074882 0.000000
+END
+
+
+SUBCONTENTS Roco HO - SingleSlip Turnouts
+TURNOUT HO "Roco EKW15, 230mm, R531mm/15d 42448"
+ P "Normal" 1 2 0 3 4
+ P "Reverse" 1 5 4
+ E 0.000000 0.000000 270.000000
+ E 9.055118 0.000000 90.000000
+ E 0.154271 1.171812 285.000000
+ E 8.900847 -1.171812 105.000000
+ S 0 0 0.000000 0.000000 1.297324 0.000000
+ S 0 0 1.297324 0.000000 9.055118 0.000000
+ S 0 0 0.154271 1.171812 7.647912 -0.836079
+ S 0 0 7.647912 -0.836079 8.900847 -1.171812
+ C 0 0 24.536566 1.297226 -24.536566 0.000076 15.000152
+ END
+TURNOUT HO "Roco EKW10, 345mm, R959mm/10d 42493"
+ P "Normal" 1 2 0 3 4
+ P "Reverse" 1 5 4
+ E 0.000000 0.000000 270.000000
+ E 13.582677 0.000000 90.000000
+ E 0.103174 1.179294 280.000000
+ E 13.479503 -1.179294 100.000000
+ S 0 0.000000 0.000000 0.000000 1.297489 0.000000
+ S 0 0.000000 1.297489 0.000000 13.582677 0.000000
+ S 0 0.000000 0.103174 1.179294 12.202176 -0.954050
+ S 0 0.000000 12.202176 -0.954050 13.479503 -1.179294
+ C 0 0.000000 62.796695 1.297239 -62.796695 0.000076 10.000152
+ END
+SUBCONTENTS Roco HO - DoubleSlip Turnouts
+TURNOUT HO "Roco DKW15, 230mm, R531mm/15d 42451"
+ P "Normal" 1 2 3 0 4 5 6
+ P "Reverse" 1 7 6 0 4 8 3
+ E 0.000000 0.000000 270.000000
+ E 9.055118 0.000000 90.000000
+ E 0.154271 1.171812 285.000000
+ E 8.900847 -1.171812 105.000000
+ S 0 0.000000 0.000000 0.000000 1.297324 0.000000
+ S 0 0.000000 1.297324 0.000000 7.757794 0.000000
+ S 0 0.000000 7.757794 0.000000 9.055118 0.000000
+ S 0 0.000000 0.154271 1.171812 1.407206 0.836079
+ S 0 0.000000 1.407206 0.836079 7.647912 -0.836079
+ S 0 0.000000 7.647912 -0.836079 8.900847 -1.171812
+ C 0 0.000000 24.536566 1.297226 -24.536566 0.000076 15.000152
+ C 0 0.000000 -24.536566 7.757826 24.536558 180.000076 15.000152
+ END
+TURNOUT HO "Roco DKW10, 345mm, R959mm/10d 42496"
+ P "Normal" 1 2 3 0 4 5 6
+ P "Reverse" 1 7 6 0 4 8 3
+ E 0.000000 0.000000 270.000000
+ E 13.582677 0.000000 90.000000
+ E 0.103174 1.179294 280.000000
+ E 13.479503 -1.179294 100.000000
+ S 0 0.000000 0.000000 0.000000 1.297489 0.000000
+ S 0 0.000000 1.297489 0.000000 12.285188 0.000000
+ S 0 0.000000 12.285188 0.000000 13.582677 0.000000
+ S 0 0.000000 0.103174 1.179294 1.380501 0.954050
+ S 0 0.000000 1.380501 0.954050 12.202176 -0.954050
+ S 0 0.000000 12.202176 -0.954050 13.479503 -1.179294
+ C 0 0.000000 62.796695 1.297239 -62.796695 0.000076 10.000152
+ C 0 0.000000 -62.796695 12.285270 62.796680 180.000076 10.000152
+ END
+
+
+SUBCONTENTS Roco HO - Wye Turnouts
+TURNOUT HO "Roco DWW15 3-WAY 287.5mm, R873.5mm/15d 42454"
+ P "Left" 1 2 3
+ P "Normal" 1 4 7
+ P "Right" 1 4 5 6
+ E 0.000000 0.000000 270.000000
+ E 9.055118 1.212598 75.000000
+ E 11.318898 -1.212598 105.000000
+ E 11.318898 0.000000 90.000000
+ S 0 0 0.000000 0.000000 0.648600 0.000000
+ C 0 0 -29.479767 0.648639 29.479767 164.999924 15.000152
+ S 0 0 8.278594 1.004517 9.055118 1.212598
+ S 0 0 0.648600 0.000000 2.757006 0.000000
+ C 0 0 30.660032 2.756884 -30.660032 0.000076 15.000152
+ S 0 0 10.692478 -1.044735 11.318898 -1.212598
+ S 0 0 2.757006 0.000000 11.318898 0.000000
+ END
+
+
+SUBCONTENTS Roco HO - Crossings
+TURNOUT HO "Roco K15, 230mm, 15d 42497"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 9.055118 0.000000 90.000000
+ E 0.154271 1.171812 285.000000
+ E 8.900847 -1.171812 105.000000
+ S 0 0.000000 0.000000 0.000000 9.055118 0.000000
+ S 0 0.000000 0.154271 1.171812 8.900847 -1.171812
+ END
+TURNOUT HO "Roco K30, 119mm, 30d 42498"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 4.685039 0.000000 90.000000
+ E 0.313836 1.171256 300.000000
+ E 4.371203 -1.171256 120.000000
+ S 0 0.000000 0.000000 0.000000 4.685039 0.000000
+ S 0 0.000000 0.313836 1.171256 4.371203 -1.171256
+ END
+
+
+SUBCONTENTS Roco HO - Turn Table
+TURNOUT HO "ROCO Turntable 253mm Dia 9d 40P 42615"
+ P "1" 1
+ P "2" 2
+ P "3" 3
+ P "4" 4
+ P "5" 5
+ P "6" 6
+ P "7" 7
+ P "8" 8
+ P "9" 9
+ P "10" 10
+ P "11" 11
+ P "12" 12
+ P "13" 13
+ P "14" 14
+ P "15" 15
+ P "16" 16
+ P "17" 17
+ P "18" 18
+ P "19" 19
+ P "20" 20
+ G3 0 0.000000 0.129736 0.000000 0.000000 0
+ A3 8424071 0.031250 4.980315 0.000000 0.000000 0 0.000000 360.000000
+ A3 8424071 0.031250 6.043307 0.000000 0.000000 0 0.000000 360.000000
+ A3 8424071 0.031250 1.245079 0.000000 0.000000 0 0.000000 360.000000
+ E 0.000000 4.980315 0.000000
+ E 0.779093 4.918999 9.000000
+ E 1.539002 4.736561 18.000000
+ E 2.261016 4.437493 27.000000
+ E 2.927356 4.029159 36.000000
+ E 3.521614 3.521614 45.000000
+ E 4.029159 2.927356 54.000000
+ E 4.437493 2.261016 63.000000
+ E 4.736561 1.539002 72.000000
+ E 4.918999 0.779093 81.000000
+ E 4.980315 0.000000 90.000000
+ E 4.918999 -0.779093 99.000000
+ E 4.736561 -1.539002 108.000000
+ E 4.437493 -2.261016 117.000000
+ E 4.029159 -2.927356 126.000000
+ E 3.521614 -3.521614 135.000000
+ E 2.927356 -4.029159 144.000000
+ E 2.261016 -4.437493 153.000000
+ E 1.539002 -4.736561 162.000000
+ E 0.779093 -4.918999 171.000000
+ E 0.000000 -4.980315 180.000000
+ E -0.779093 -4.918999 189.000000
+ E -1.539002 -4.736561 198.000000
+ E -2.261016 -4.437493 207.000000
+ E -2.927356 -4.029159 216.000000
+ E -3.521614 -3.521614 225.000000
+ E -4.029159 -2.927356 234.000000
+ E -4.437493 -2.261016 243.000000
+ E -4.736561 -1.539002 252.000000
+ E -4.918999 -0.779093 261.000000
+ E -4.980315 0.000000 270.000000
+ E -4.918999 0.779093 279.000000
+ E -4.736561 1.539002 288.000000
+ E -4.437493 2.261016 297.000000
+ E -4.029159 2.927356 306.000000
+ E -3.521614 3.521614 315.000000
+ E -2.927356 4.029159 324.000000
+ E -2.261016 4.437493 333.000000
+ E -1.539002 4.736561 342.000000
+ E -0.779093 4.918999 351.000000
+ S 16777215 0 0.000000 4.980315 0.000000 -4.980315
+ S 16777215 0 0.779093 4.918999 -0.779093 -4.918999
+ S 16777215 0 1.539002 4.736561 -1.539002 -4.736561
+ S 16777215 0 2.261016 4.437493 -2.261016 -4.437493
+ S 16777215 0 2.927356 4.029159 -2.927356 -4.029159
+ S 16777215 0 3.521614 3.521614 -3.521614 -3.521614
+ S 16777215 0 4.029159 2.927356 -4.029159 -2.927356
+ S 16777215 0 4.437493 2.261016 -4.437493 -2.261016
+ S 16777215 0 4.736561 1.539002 -4.736561 -1.539002
+ S 16777215 0 4.918999 0.779093 -4.918999 -0.779093
+ S 16777215 0 4.980315 0.000000 -4.980315 0.000000
+ S 16777215 0 4.918999 -0.779093 -4.918999 0.779093
+ S 16777215 0 4.736561 -1.539002 -4.736561 1.539002
+ S 16777215 0 4.437493 -2.261016 -4.437493 2.261016
+ S 16777215 0 4.029159 -2.927356 -4.029159 2.927356
+ S 16777215 0 3.521614 -3.521614 -3.521614 3.521614
+ S 16777215 0 2.927356 -4.029159 -2.927356 4.029159
+ S 16777215 0 2.261016 -4.437493 -2.261016 4.437493
+ S 16777215 0 1.539002 -4.736561 -1.539002 4.736561
+ S 16777215 0 0.779093 -4.918999 -0.779093 4.918999
+END
+TURNOUT HO "Roco TurnTable Track Connector 42616/617"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.657480 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.657480 0.000000
+END
+
diff --git a/app/lib/params/HO-Slot-Car-AFX-Track.xtp b/app/lib/params/HO-Slot-Car-AFX-Track.xtp
index 100c8d8..7b72276 100644
--- a/app/lib/params/HO-Slot-Car-AFX-Track.xtp
+++ b/app/lib/params/HO-Slot-Car-AFX-Track.xtp
@@ -1,8 +1,8 @@
-CONTENTS AFX HO-Scale Slot Car Track
-#Created by Dwyane Ward
+CONTENTS AFX HO Scale Slot Car Track
+#Created by Dwyane Ward
SUBCONTENTS AFX HO Slot Straight Track
TURNOUT HO "AFX Straight 3"" 8632"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 3.000000 0.000000 90.000000
E 0.000000 -1.500000 270.000000
@@ -15,7 +15,7 @@ TURNOUT HO "AFX Straight 3"" 8632"
L 0 0.053333 3.000000 0.750000 3.000000 -2.250000
END
TURNOUT HO "AFX Straight 6"" 8641"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 6.000000 0.000000 90.000000
E 0.000000 -1.500000 270.000000
@@ -28,7 +28,7 @@ TURNOUT HO "AFX Straight 6"" 8641"
L 0 0.053333 6.000000 0.750000 6.000000 -2.250000
END
TURNOUT HO "AFX Straight 9"" 8622"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 9.000000 0.000000 90.000000
E 0.000000 -1.500000 270.000000
@@ -41,7 +41,7 @@ TURNOUT HO "AFX Straight 9"" 8622"
L 0 0.053333 9.000000 0.750000 9.000000 -2.250000
END
TURNOUT HO "AFX Straight 15"" 8621"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 15.000000 0.000000 90.000000
E 0.000000 -1.500000 270.000000
@@ -57,7 +57,7 @@ TURNOUT HO "AFX Straight 15"" 8621"
SUBCONTENTS AFX HO Slot Misc Track
TURNOUT HO "AFX LapCounter Str 15"" 8646"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 15.000000 0.000000 90.000000
E 0.000000 -1.500000 270.000000
@@ -87,7 +87,7 @@ TURNOUT HO "AFX LapCounter Str 15"" 8646"
END
TURNOUT HO "AFX Terminal Str 15"" 8627"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 15.000000 0.000000 90.000000
E 0.000000 -1.500000 270.000000
@@ -108,7 +108,7 @@ TURNOUT HO "AFX Terminal Str 15"" 8627"
L 0 0.053333 13.000000 1.750000 13.500000 0.750000
END
TURNOUT HO "AFX Terminal Pro-Power Str 15"" 8998"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 15.000000 0.000000 90.000000
E 0.000000 -1.500000 270.000000
@@ -129,7 +129,7 @@ TURNOUT HO "AFX Terminal Pro-Power Str 15"" 8998"
L 0 0.053333 13.000000 1.750000 13.500000 0.750000
END
TURNOUT HO "AFX CrissCross str 9"" 8655"
- P "Normal" 1
+ P "Normal" 1 2 3 -4 5 0 6 -7 8 9 10
E 0.000000 0.000000 270.000000
E 9.000000 0.000000 90.000000
E 0.000000 -1.500000 270.000000
@@ -150,7 +150,7 @@ TURNOUT HO "AFX CrissCross str 9"" 8655"
L 0 0.053333 9.000000 0.750000 9.000000 -2.250000
END
TURNOUT HO "AFX Squeeze str 9"" 8625"
- P "Normal" 1
+ P "Normal" 1 2 3 -4 5 -6 7 8 9 0 10 -11 12 13 14 15 16 -17 18
E 0.000000 0.000000 270.000000
E 9.000000 0.000000 90.000000
E 0.000000 -1.500000 270.000000
@@ -179,7 +179,7 @@ TURNOUT HO "AFX Squeeze str 9"" 8625"
L 0 0.053333 9.000000 0.750000 9.000000 -2.250000
END
TURNOUT HO "AFX Chicane Right 9"" 8993A"
- P "Normal" 1
+ P "Normal" 1 2 -3 -4 5 0 6 7 8 -9 10
E 0.000000 0.000000 270.000000
E 9.000000 -3.000000 90.000000
E 0.000000 -1.500000 270.000000
@@ -208,7 +208,7 @@ TURNOUT HO "AFX Chicane Right 9"" 8993A"
A 0 0.053333 3.000000 6.492641 -2.250000 180.000000 45.000000
END
TURNOUT HO "AFX Chicane Left 9"" 8993B"
- P "Normal" 1
+ P "Normal" 1 -2 -3 4 5 0 6 -7 8 9 10
E 0.000000 0.000000 270.000000
E 9.000000 3.000000 90.000000
E 0.000000 1.500000 270.000000
@@ -242,7 +242,7 @@ TURNOUT HO "AFX Chicane Left 9"" 8993B"
SUBCONTENTS AFX HO Slot Curve Track
TURNOUT HO "AFX Curved R6 1/8 Circle 8656"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 3.712311 -1.537689 135.000000
E 0.000000 -1.500000 270.000000
@@ -255,7 +255,7 @@ TURNOUT HO "AFX Curved R6 1/8 Circle 8656"
L 0 0.053333 2.121320 -3.128680 4.242641 -1.007359
END
TURNOUT HO "AFX Curved R9 1/8 Circle 8623"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 5.833631 -2.416369 135.000000
E 0.000000 -1.500000 270.000000
@@ -268,7 +268,7 @@ TURNOUT HO "AFX Curved R9 1/8 Circle 8623"
L 0 0.053333 4.242641 -4.007359 6.363961 -1.886039
END
TURNOUT HO "AFX Curved R9 1/4 Circle 8624"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 8.250000 -8.250000 180.000000
E 0.000000 -1.500000 270.000000
@@ -281,7 +281,7 @@ TURNOUT HO "AFX Curved R9 1/4 Circle 8624"
L 0 0.053333 6.000000 -8.250000 9.000000 -8.250000
END
TURNOUT HO "AFX Curved R12 1/8 Circle 8642"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 7.954951 -3.295049 135.000000
E 0.000000 -1.50000 270.000000
@@ -294,7 +294,7 @@ TURNOUT HO "AFX Curved R12 1/8 Circle 8642"
L 0 0.053333 6.363961 -4.886039 8.485281 -2.764719
END
TURNOUT HO "AFX Curved R15 1/8 Circle 8663"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 10.076272 -4.173728 135.000000
E 0.000000 -1.500000 270.000000
@@ -307,7 +307,7 @@ TURNOUT HO "AFX Curved R15 1/8 Circle 8663"
L 0 0.053333 8.485281 -5.764719 10.606602 -3.643398
END
TURNOUT HO "AFX Curved R18 1/8 Circle 8997"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 12.197592 -5.052408 135.000000
E 0.000000 -1.500000 270.000000
@@ -320,7 +320,7 @@ TURNOUT HO "AFX Curved R18 1/8 Circle 8997"
L 0 0.053333 10.606602 -6.643398 12.727922 -4.522078
END
TURNOUT HO "AFX Banked Curved R9 1/8 Circle 8628"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 5.833631 -2.416369 135.000000
E 0.000000 -1.500000 270.000000
@@ -333,7 +333,7 @@ TURNOUT HO "AFX Banked Curved R9 1/8 Circle 8628"
L 0 0.053333 4.242641 -4.007359 6.363961 -1.886039
END
TURNOUT HO "AFX Banked Curved R12 1/8 Circle 8991"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 7.954951 -3.295049 135.000000
E 0.000000 -1.50000 270.000000
@@ -346,7 +346,7 @@ TURNOUT HO "AFX Banked Curved R12 1/8 Circle 8991"
L 0 0.053333 6.363961 -4.886039 8.485281 -2.764719
END
TURNOUT HO "AFX HairPin Curved 8992"
- P "Normal" 1
+ P "Normal" 1 -7 8 5 -10 -9 -4 0 2 -11 12 6 -14 -13 -3
E 0.000000 0.000000 270.000000
E 0.000000 -1.500000 270.000000
E 0.000000 -3.000000 270.000000
@@ -373,4 +373,4 @@ TURNOUT HO "AFX HairPin Curved 8992"
L 0 0.053333 3.000000 -2.250000 5.800000 -1.550000
L 0 0.053333 3.000000 -2.250000 5.800000 -2.980000
A 0 0.053333 0.750000 6.000000 -2.250000 345.000000 210.000000
- END \ No newline at end of file
+ END
diff --git a/app/lib/params/HO-Slot-Cars.xtp b/app/lib/params/HO-Slot-Cars.xtp
index 401bee2..857aa4e 100644
--- a/app/lib/params/HO-Slot-Cars.xtp
+++ b/app/lib/params/HO-Slot-Cars.xtp
@@ -1,8 +1,7 @@
-CONTENTS HO-Scale Slot Car
-#Created by Dwyane Ward
+CONTENTS HO Scale Slot Car
+#Created by Dwyane Ward
SUBCONTENTS AFX HO Slot Cars
CARPART HO "AFX TYPE Formula1 F1 100" 0 90100 2.75 1.0 0 0 2.0 0 8535808
CARPART HO "AFX TYPE Formula1 F1 200" 0 90100 2.75 1.0 0 0 2.0 0 8535808
CARPART HO "AFX TYPE Formula1 F1 300" 0 90100 2.75 1.0 0 0 2.0 0 8535808
CARPART HO "AFX TYPE Formula1 F1 400" 0 90100 2.75 1.0 0 0 2.0 0 8535808
-
diff --git a/app/lib/params/HO-Walthers Cornerstone Engineered Bridge System.xtp b/app/lib/params/HO-Walthers Cornerstone Engineered Bridge System.xtp
new file mode 100644
index 0000000..057cb3a
--- /dev/null
+++ b/app/lib/params/HO-Walthers Cornerstone Engineered Bridge System.xtp
@@ -0,0 +1,624 @@
+CONTENTS Walthers HO Cornerstone Engineered Bridge System
+SUBCONTENTS Walthers HO Cornerstone Engineered Bridge System - Through Girder Bridges
+TURNOUT HO "Walthers HO Cornerstone Engr Bridge System 30' Through Girder Bridge 933-4500"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.133180 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 4.133180 0.000000
+ L3 0 0.015000 0.000000 0.190244 0 4.133180 0.190244 0
+ L3 0 0.015000 0.000000 -0.190256 0 4.133180 -0.190256 0
+ L3 13528100 0.053333 0.000000 1.093750 0 4.133180 1.093750 0
+ L3 13528100 0.053333 0.206659 1.093750 0 0.206659 0.688863 0
+ L3 13528100 0.053333 2.066590 1.093750 0 2.066590 0.688863 0
+ L3 13528100 0.053333 3.926521 1.093750 0 3.926521 0.688863 0
+ L3 13528100 0.053333 3.926521 -1.093750 0 3.926521 -0.688863 0
+ L3 13528100 0.053333 2.066590 -1.093750 0 2.066590 -0.688863 0
+ L3 13528100 0.053333 0.206659 -1.093750 0 0.206659 -0.688863 0
+ L3 13528100 0.053333 0.000000 -1.093750 0 4.133180 -1.093750 0
+END
+TURNOUT HO "Walthers HO Cornerstone Engr Bridge System 50' Through Girder Bridge 933-4501"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.888634 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 6.888634 0.000000
+ L3 0 0.015000 0.000000 0.190244 0 6.888634 0.190244 0
+ L3 0 0.015000 0.000000 -0.190256 0 6.888634 -0.190256 0
+ L3 13528100 0.053333 0.000000 1.093750 0 6.888634 1.093750 0
+ L3 13528100 0.053333 0.206659 1.093750 0 0.206659 0.688863 0
+ L3 13528100 0.053333 2.365098 1.093750 0 2.365098 0.688863 0
+ L3 13528100 0.053333 4.523536 1.093750 0 4.523536 0.688863 0
+ L3 13528100 0.053333 6.681975 1.093750 0 6.681975 0.688863 0
+ L3 13528100 0.053333 6.681975 -1.093750 0 6.681975 -0.688863 0
+ L3 13528100 0.053333 4.523536 -1.093750 0 4.523536 -0.688863 0
+ L3 13528100 0.053333 2.365098 -1.093750 0 2.365098 -0.688863 0
+ L3 13528100 0.053333 0.206659 -1.093750 0 0.206659 -0.688863 0
+ L3 13528100 0.053333 0.000000 -1.093750 0 6.888634 -1.093750 0
+END
+TURNOUT HO "Walthers HO Cornerstone Engr Bridge System 70' Through Girder Bridge 933-4502"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.644087 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 9.644087 0.000000
+ L3 0 0.015000 0.000000 0.190244 0 9.644087 0.190244 0
+ L3 0 0.015000 0.000000 -0.190256 0 9.644087 -0.190256 0
+ L3 13528100 0.053333 0.000000 1.093750 0 9.644087 1.093750 0
+ L3 13528100 0.053333 0.206659 1.093750 0 0.206659 0.688863 0
+ L3 13528100 0.053333 2.052813 1.093750 0 2.052813 0.688863 0
+ L3 13528100 0.053333 3.898967 1.093750 0 3.898967 0.688863 0
+ L3 13528100 0.053333 5.745121 1.093750 0 5.745121 0.688863 0
+ L3 13528100 0.053333 7.591274 1.093750 0 7.591274 0.688863 0
+ L3 13528100 0.053333 9.437428 1.093750 0 9.437428 0.688863 0
+ L3 13528100 0.053333 9.437428 -1.093750 0 9.437428 -0.688863 0
+ L3 13528100 0.053333 7.591274 -1.093750 0 7.591274 -0.688863 0
+ L3 13528100 0.053333 5.745121 -1.093750 0 5.745121 -0.688863 0
+ L3 13528100 0.053333 3.898967 -1.093750 0 3.898967 -0.688863 0
+ L3 13528100 0.053333 2.052813 -1.093750 0 2.052813 -0.688863 0
+ L3 13528100 0.053333 0.206659 -1.093750 0 0.206659 -0.688863 0
+ L3 13528100 0.053333 0.000000 -1.093750 0 9.644087 -1.093750 0
+END
+TURNOUT HO "Walthers HO Cornerstone Engr Bridge System 90' Through Girder Bridge 933-4503"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 12.399541 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 12.399541 0.000000
+ L3 0 0.015000 0.000000 0.190244 0 12.399541 0.190244 0
+ L3 0 0.015000 0.000000 -0.190256 0 12.399541 -0.190256 0
+ L3 13528100 0.053333 0.000000 1.093750 0 12.399541 1.093750 0
+ L3 13528100 0.053333 0.206659 1.093750 0 0.206659 0.688863 0
+ L3 13528100 0.053333 2.204363 1.093750 0 2.204363 0.688863 0
+ L3 13528100 0.053333 4.202067 1.093750 0 4.202067 0.688863 0
+ L3 13528100 0.053333 6.199770 1.093750 0 6.199770 0.688863 0
+ L3 13528100 0.053333 8.197474 1.093750 0 8.197474 0.688863 0
+ L3 13528100 0.053333 10.195178 1.093750 0 10.195178 0.688863 0
+ L3 13528100 0.053333 12.192882 1.093750 0 12.192882 0.688863 0
+ L3 13528100 0.053333 12.192882 -1.093750 0 12.192882 -0.688863 0
+ L3 13528100 0.053333 10.195178 -1.093750 0 10.195178 -0.688863 0
+ L3 13528100 0.053333 8.197474 -1.093750 0 8.197474 -0.688863 0
+ L3 13528100 0.053333 6.199770 -1.093750 0 6.199770 -0.688863 0
+ L3 13528100 0.053333 4.202067 -1.093750 0 4.202067 -0.688863 0
+ L3 13528100 0.053333 2.204363 -1.093750 0 2.204363 -0.688863 0
+ L3 13528100 0.053333 0.206659 -1.093750 0 0.206659 -0.688863 0
+ L3 13528100 0.053333 0.000000 -1.093750 0 12.399541 -1.093750 0
+END
+
+
+SUBCONTENTS Walthers HO Cornerstone Engineered Bridge System - Deck Girder Bridges
+TURNOUT HO "Walthers HO Cornerstone Engr Bridge System 30' Deck Girder Bridge 933-4505"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.133180 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 4.133180 0.000000
+ L3 0 0.015000 0.000000 0.190244 0 4.133180 0.190244 0
+ L3 0 0.015000 0.000000 -0.190256 0 4.133180 -0.190256 0
+ L3 13528100 0.053333 0.000000 0.593750 0 4.133180 0.593750 0
+ L3 13528100 0.053333 0.000000 -0.593750 0 4.133180 -0.593750 0
+END
+TURNOUT HO "Walthers HO Cornerstone Engr Bridge System 50' Deck Girder Bridge 933-4506"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.888634 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 6.888634 0.000000
+ L3 0 0.015000 0.000000 0.190244 0 6.888634 0.190244 0
+ L3 0 0.015000 0.000000 -0.190256 0 6.888634 -0.190256 0
+ L3 13528100 0.053333 0.000000 0.593750 0 6.888634 0.593750 0
+ L3 13528100 0.053333 0.000000 -0.593750 0 6.888634 -0.593750 0
+END
+TURNOUT HO "Walthers HO Cornerstone Engr Bridge System 70' Deck Girder Bridge 933-4507"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.644087 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 9.644087 0.000000
+ L3 0 0.015000 0.000000 0.190244 0 9.644087 0.190244 0
+ L3 0 0.015000 0.000000 -0.190256 0 9.644087 -0.190256 0
+ L3 13528100 0.053333 0.000000 0.593750 0 9.644087 0.593750 0
+ L3 13528100 0.053333 0.000000 -0.593750 0 9.644087 -0.593750 0
+END
+TURNOUT HO "Walthers HO Cornerstone Engr Bridge System 90' Deck Girder Bridge 933-4508"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 12.399541 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 12.399541 0.000000
+ L3 0 0.015000 0.000000 0.190244 0 12.399541 0.190244 0
+ L3 0 0.015000 0.000000 -0.190256 0 12.399541 -0.190256 0
+ L3 13528100 0.053333 0.000000 0.593750 0 12.399541 0.593750 0
+ L3 13528100 0.053333 0.000000 -0.593750 0 12.399541 -0.593750 0
+END
+TURNOUT HO "Walthers HO Cornerstone Engr Bridge System 30' Low-Level Deck Girder Bridge 933-4509"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.133180 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 4.133180 0.000000
+ L3 0 0.015000 0.000000 0.190244 0 4.133180 0.190244 0
+ L3 0 0.015000 0.000000 -0.190256 0 4.133180 -0.190256 0
+ L3 13528100 0.053333 0.000000 0.593750 0 4.133180 0.593750 0
+ L3 13528100 0.053333 0.000000 -0.593750 0 4.133180 -0.593750 0
+END
+
+
+SUBCONTENTS Walthers HO Cornerstone Engineered Bridge System - Truss Bridges
+TURNOUT HO "Walthers HO Cornerstone Engr Bridge System 109' Double-Track Truss Bridge (2-3/16" Tk Sp) 933-4510"
+ P "Normal" 1 0 2
+ E 0.000000 1.093750 270.000000
+ E 15.017222 1.093750 90.000000
+ E 0.000000 -1.093750 270.000000
+ E 15.017222 -1.093750 90.000000
+ S 0 0.000000 0.000000 1.093750 15.017222 1.093750
+ S 0 0.000000 0.000000 -1.093750 15.017222 -1.093750
+ L3 0 0.015000 0.000000 1.284006 0 15.017222 1.284006 0
+ L3 0 0.015000 0.000000 0.903494 0 15.017222 0.903494 0
+ L3 0 0.015000 0.000000 -0.903494 0 15.017222 -0.903494 0
+ L3 0 0.015000 0.000000 -1.284006 0 15.017222 -1.284006 0
+ L3 13528100 0.053333 0.008611 2.500000 0 0.008611 -2.500000 0
+ L3 13528100 0.053333 0.008611 2.500000 0 15.008611 2.500000 0
+ L3 13528100 0.053333 0.008611 2.375000 0 15.008611 2.375000 0
+ L3 13528100 0.053333 2.008611 2.375000 0 2.008611 -2.375000 0
+ L3 13528100 0.053333 2.508611 2.375000 0 2.008611 1.900000 0
+ L3 13528100 0.053333 2.508611 1.900000 0 2.008611 2.375000 0
+ L3 13528100 0.053333 2.508611 1.425000 0 2.008611 1.900000 0
+ L3 13528100 0.053333 2.508611 1.900000 0 2.008611 1.425000 0
+ L3 13528100 0.053333 2.508611 1.425000 0 2.008611 0.950000 0
+ L3 13528100 0.053333 2.508611 0.950000 0 2.008611 1.425000 0
+ L3 13528100 0.053333 2.508611 0.475000 0 2.008611 0.950000 0
+ L3 13528100 0.053333 2.508611 0.950000 0 2.008611 0.475000 0
+ L3 13528100 0.053333 2.508611 0.475000 0 2.008611 0.000000 0
+ L3 13528100 0.053333 2.508611 0.000000 0 2.008611 0.475000 0
+ L3 13528100 0.053333 2.508611 -0.475000 0 2.008611 0.000000 0
+ L3 13528100 0.053333 2.508611 0.000000 0 2.008611 -0.475000 0
+ L3 13528100 0.053333 2.508611 -0.475000 0 2.008611 -0.950000 0
+ L3 13528100 0.053333 2.508611 -0.950000 0 2.008611 -0.475000 0
+ L3 13528100 0.053333 2.508611 -1.425000 0 2.008611 -0.950000 0
+ L3 13528100 0.053333 2.508611 -0.950000 0 2.008611 -1.425000 0
+ L3 13528100 0.053333 2.508611 -1.425000 0 2.008611 -1.900000 0
+ L3 13528100 0.053333 2.508611 -1.900000 0 2.008611 -1.425000 0
+ L3 13528100 0.053333 2.508611 -2.375000 0 2.008611 -1.900000 0
+ L3 13528100 0.053333 2.508611 -1.900000 0 2.008611 -2.375000 0
+ L3 13528100 0.053333 2.508611 2.500000 0 2.508611 -2.500000 0
+ L3 13528100 0.053333 2.508611 2.375000 0 5.008611 -2.375000 0
+ L3 13528100 0.053333 2.508611 -2.375000 0 5.008611 2.375000 0
+ L3 13528100 0.053333 5.008611 2.375000 0 5.008611 -2.375000 0
+ L3 13528100 0.053333 7.508611 2.375000 0 5.008611 -2.375000 0
+ L3 13528100 0.053333 7.508611 -2.375000 0 5.008611 2.375000 0
+ L3 13528100 0.053333 7.508611 2.375000 0 7.508611 -2.375000 0
+ L3 13528100 0.053333 7.508611 2.375000 0 10.008611 -2.375000 0
+ L3 13528100 0.053333 7.508611 -2.375000 0 10.008611 2.375000 0
+ L3 13528100 0.053333 10.008611 2.375000 0 10.008611 -2.375000 0
+ L3 13528100 0.053333 12.508611 2.375000 0 10.008611 -2.375000 0
+ L3 13528100 0.053333 12.508611 -2.375000 0 10.008611 2.375000 0
+ L3 13528100 0.053333 12.508611 2.500000 0 12.508611 -2.500000 0
+ L3 13528100 0.053333 12.508611 2.375000 0 13.008611 1.900000 0
+ L3 13528100 0.053333 12.508611 1.900000 0 13.008611 2.375000 0
+ L3 13528100 0.053333 12.508611 1.425000 0 13.008611 1.900000 0
+ L3 13528100 0.053333 12.508611 1.900000 0 13.008611 1.425000 0
+ L3 13528100 0.053333 12.508611 1.425000 0 13.008611 0.950000 0
+ L3 13528100 0.053333 12.508611 0.950000 0 13.008611 1.425000 0
+ L3 13528100 0.053333 12.508611 0.475000 0 13.008611 0.950000 0
+ L3 13528100 0.053333 12.508611 0.950000 0 13.008611 0.475000 0
+ L3 13528100 0.053333 12.508611 0.475000 0 13.008611 0.000000 0
+ L3 13528100 0.053333 12.508611 0.000000 0 13.008611 0.475000 0
+ L3 13528100 0.053333 12.508611 -0.475000 0 13.008611 0.000000 0
+ L3 13528100 0.053333 12.508611 0.000000 0 13.008611 -0.475000 0
+ L3 13528100 0.053333 12.508611 -0.475000 0 13.008611 -0.950000 0
+ L3 13528100 0.053333 12.508611 -0.950000 0 13.008611 -0.475000 0
+ L3 13528100 0.053333 12.508611 -1.425000 0 13.008611 -0.950000 0
+ L3 13528100 0.053333 12.508611 -0.950000 0 13.008611 -1.425000 0
+ L3 13528100 0.053333 12.508611 -1.425000 0 13.008611 -1.900000 0
+ L3 13528100 0.053333 12.508611 -1.900000 0 13.008611 -1.425000 0
+ L3 13528100 0.053333 12.508611 -2.375000 0 13.008611 -1.900000 0
+ L3 13528100 0.053333 12.508611 -1.900000 0 13.008611 -2.375000 0
+ L3 13528100 0.053333 13.008611 2.375000 0 13.008611 -2.375000 0
+ L3 13528100 0.053333 0.008611 -2.375000 0 15.008611 -2.375000 0
+ L3 13528100 0.053333 0.008611 -2.500000 0 15.008611 -2.500000 0
+ L3 13528100 0.053333 15.008611 2.500000 0 15.008611 -2.500000 0
+END
+TURNOUT HO "Walthers HO Cornerstone Engr Bridge System 145'2 Single-Track Truss Bridge 933-3185"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 20.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 20.000000 0.000000
+ L3 0 0.015000 0.000000 0.190244 0 20.000000 0.190244 0
+ L3 0 0.015000 0.000000 -0.190256 0 20.000000 -0.190256 0
+ L3 13528100 0.053333 0.000000 1.625000 0 0.000000 -1.625000 0
+ L3 13528100 0.053333 0.000000 1.625000 0 20.000000 1.625000 0
+ L3 13528100 0.053333 0.000000 1.500000 0 20.000000 1.500000 0
+ L3 13528100 0.053333 3.000000 1.500000 0 3.500000 0.750000 0
+ L3 13528100 0.053333 3.500000 -0.750000 0 3.000000 -1.500000 0
+ L3 13528100 0.053333 3.500000 0.750000 0 3.500000 -0.750000 0
+ L3 13528100 0.053333 3.500000 -0.750000 0 4.000000 -1.500000 0
+ L3 13528100 0.053333 4.000000 1.500000 0 3.500000 0.750000 0
+ L3 13528100 0.053333 4.000000 0.000000 0 3.500000 0.750000 0
+ L3 13528100 0.053333 3.500000 -0.750000 0 4.000000 -0.000000 0
+ L3 13528100 0.053333 4.000000 1.625000 0 4.000000 -1.625000 0
+ L3 13528100 0.053333 4.000000 1.500000 0 7.000000 -1.500000 0
+ L3 13528100 0.053333 4.000000 -1.500000 0 7.000000 1.500000 0
+ L3 13528100 0.053333 7.000000 1.500000 0 7.000000 -1.500000 0
+ L3 13528100 0.053333 10.000000 1.500000 0 7.000000 -1.500000 0
+ L3 13528100 0.053333 10.000000 -1.500000 0 7.000000 1.500000 0
+ L3 13528100 0.053333 10.000000 1.500000 0 10.000000 -1.500000 0
+ L3 13528100 0.053333 13.000000 1.500000 0 10.000000 -1.500000 0
+ L3 13528100 0.053333 13.000000 -1.500000 0 10.000000 1.500000 0
+ L3 13528100 0.053333 13.000000 1.500000 0 13.000000 -1.500000 0
+ L3 13528100 0.053333 16.000000 1.500000 0 13.000000 -1.500000 0
+ L3 13528100 0.053333 16.000000 -1.500000 0 13.000000 1.500000 0
+ L3 13528100 0.053333 16.000000 1.625000 0 16.000000 -1.625000 0
+ L3 13528100 0.053333 17.000000 1.500000 0 16.500000 0.750000 0
+ L3 13528100 0.053333 16.500000 -0.750000 0 17.000000 -1.500000 0
+ L3 13528100 0.053333 16.500000 0.750000 0 16.500000 -0.750000 0
+ L3 13528100 0.053333 16.500000 -0.750000 0 16.000000 -1.500000 0
+ L3 13528100 0.053333 16.000000 1.500000 0 16.500000 0.750000 0
+ L3 13528100 0.053333 16.000000 0.000000 0 16.500000 0.750000 0
+ L3 13528100 0.053333 16.500000 -0.750000 0 16.000000 -0.000000 0
+ L3 13528100 0.053333 0.000000 -1.500000 0 20.000000 -1.500000 0
+ L3 13528100 0.053333 0.000000 -1.625000 0 20.000000 -1.625000 0
+ L3 13528100 0.053333 20.000000 1.625000 0 20.000000 -1.625000 0
+END
+SUBCONTENTS Walthers HO Cornerstone Engineered Bridge System - Pratt Bridges
+TURNOUT HO "Walthers HO Cornerstone Engr Bridge System 109' Single-Track Pratt Deck Truss Bridge 933-4520"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 15.017222 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 15.017222 0.000000
+ L3 0 0.015000 0.000000 0.190244 0 15.017222 0.190244 0
+ L3 0 0.015000 0.000000 -0.190256 0 15.017222 -0.190256 0
+ L3 13528100 0.053333 0.000000 0.593750 0 15.017222 0.593750 0
+ L3 13528100 0.053333 0.000000 0.500000 0 15.017222 0.500000 0
+ L3 13528100 0.053333 0.000000 -0.500000 0 15.017222 -0.500000 0
+ L3 13528100 0.053333 0.000000 -0.593750 0 15.017222 -0.593750 0
+END
+TURNOUT HO "Walthers HO Cornerstone Engr Bridge System 167' Double-Track Pratt Arched Truss Bridge (2-3/16" Tk Sp) 933-4522"
+ P "Normal" 1 0 2
+ E 0.000000 1.093750 270.000000
+ E 23.008037 1.093750 90.000000
+ E 0.000000 -1.093750 270.000000
+ E 23.008037 -1.093750 90.000000
+ S 0 0.000000 0.000000 1.093750 23.008037 1.093750
+ S 0 0.000000 0.000000 -1.093750 23.008037 -1.093750
+ L3 0 0.015000 0.000000 1.284006 0 23.008037 1.284006 0
+ L3 0 0.015000 0.000000 0.903494 0 23.008037 0.903494 0
+ L3 0 0.015000 0.000000 -0.903494 0 23.008037 -0.903494 0
+ L3 0 0.015000 0.000000 -1.284006 0 23.008037 -1.284006 0
+ L3 13528100 0.053333 0.004018 2.500000 0 0.004018 -2.500000 0
+ L3 13528100 0.053333 0.004018 2.500000 0 23.004018 2.500000 0
+ L3 13528100 0.053333 0.004018 2.375000 0 23.004018 2.375000 0
+ L3 13528100 0.053333 2.066518 2.375000 0 3.254018 1.187500 0
+ L3 13528100 0.053333 3.254018 -1.187500 0 2.066518 -2.375000 0
+ L3 13528100 0.053333 3.254018 2.375000 0 2.660268 1.781250 0
+ L3 13528100 0.053333 3.254018 -2.375000 0 2.660268 -1.781250 0
+ L3 13528100 0.053333 2.660268 2.375000 0 2.660268 -2.375000 0
+ L3 13528100 0.053333 3.254018 1.187500 0 2.660268 0.593750 0
+ L3 13528100 0.053333 3.254018 -1.187500 0 2.660268 -0.593750 0
+ L3 13528100 0.053333 3.254018 0.000000 0 2.660268 0.593750 0
+ L3 13528100 0.053333 3.254018 0.000000 0 2.660268 -0.593750 0
+ L3 13528100 0.053333 3.254018 2.500000 0 3.254018 -2.500000 0
+ L3 13528100 0.053333 3.254018 2.375000 0 6.504018 -2.375000 0
+ L3 13528100 0.053333 3.254018 -2.375000 0 6.504018 2.375000 0
+ L3 13528100 0.053333 6.504018 2.375000 0 6.504018 -2.375000 0
+ L3 13528100 0.053333 9.754018 2.375000 0 6.504018 -2.375000 0
+ L3 13528100 0.053333 9.754018 -2.375000 0 6.504018 2.375000 0
+ L3 13528100 0.053333 9.754018 2.375000 0 9.754018 -2.375000 0
+ L3 13528100 0.053333 9.754018 2.375000 0 13.004018 -2.375000 0
+ L3 13528100 0.053333 9.754018 -2.375000 0 13.004018 2.375000 0
+ L3 13528100 0.053333 13.004018 2.375000 0 13.004018 -2.375000 0
+ L3 13528100 0.053333 13.004018 2.375000 0 16.254018 -2.375000 0
+ L3 13528100 0.053333 13.004018 -2.375000 0 16.254018 2.375000 0
+ L3 13528100 0.053333 16.254018 2.375000 0 16.254018 -2.375000 0
+ L3 13528100 0.053333 16.254018 2.375000 0 19.504018 -2.375000 0
+ L3 13528100 0.053333 16.254018 -2.375000 0 19.504018 2.375000 0
+ L3 13528100 0.053333 19.504018 2.500000 0 19.504018 -2.500000 0
+ L3 13528100 0.053333 20.691518 2.375000 0 19.504018 1.187500 0
+ L3 13528100 0.053333 19.504018 -1.187500 0 20.691518 -2.375000 0
+ L3 13528100 0.053333 19.504018 2.375000 0 20.097768 1.781250 0
+ L3 13528100 0.053333 19.504018 -2.375000 0 20.097768 -1.781250 0
+ L3 13528100 0.053333 20.097768 2.375000 0 20.097768 -2.375000 0
+ L3 13528100 0.053333 19.504018 1.187500 0 20.097768 0.593750 0
+ L3 13528100 0.053333 19.504018 -1.187500 0 20.097768 -0.593750 0
+ L3 13528100 0.053333 19.504018 0.000000 0 20.097768 0.593750 0
+ L3 13528100 0.053333 19.504018 0.000000 0 20.097768 -0.593750 0
+ L3 13528100 0.053333 0.004018 -2.375000 0 23.004018 -2.375000 0
+ L3 13528100 0.053333 0.004018 -2.500000 0 23.004018 -2.500000 0
+ L3 13528100 0.053333 23.004018 2.500000 0 23.004018 -2.500000 0
+END
+
+
+SUBCONTENTS Walthers HO Cornerstone Engineered Bridge System - Bascula Bridge
+TURNOUT HO "Walthers HO Cornerstone Engr Bridge System 156' Bascula Truss Bridge 933-3070"
+ P "Normal" 1 2
+ E 0.000000 0.000000 270.000000
+ E 28.750000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 7.250000 0.000000
+ S 0 0.000000 7.250000 0.000000 28.750000 0.000000
+ L3 0 0.030000 0.000000 0.190244 0 28.750000 0.190244 0
+ L3 0 0.030000 0.000000 -0.190256 0 28.750000 -0.190256 0
+#LiftMotorHousing
+ F4 11579568 0.000000 4 0
+ 0.000000 1.500000 0
+ 1.000000 1.500000 0
+ 1.000000 -1.500000 0
+ 0.000000 -1.500000 0
+ F4 8421376 0.000000 4 0
+ 0.000000 1.000000 0
+ 1.000000 1.000000 0
+ 1.000000 -1.000000 0
+ 0.000000 -1.000000 0
+ L3 0 0.050000 0.000000 1.000000 0 0.000000 -1.000000 0
+ L3 0 0.050000 0.000000 1.000000 0 1.000000 1.000000 0
+ L3 0 0.050000 1.000000 1.000000 0 1.000000 -1.000000 0
+ L3 0 0.050000 1.000000 -1.000000 0 0.000000 -1.000000 0
+#Counter-Weight
+ F4 11579568 0.000000 4 0
+ -5.375000 1.375000 0
+ -5.375000 -1.375000 0
+ -2.875000 -1.375000 0
+ -2.875000 1.375000 0
+ L3 13528100 0.053333 -5.500000 1.625000 0 28.750000 1.625000 0
+ L3 13528100 0.053333 -5.500000 1.500000 0 28.750000 1.500000 0
+ L3 13528100 0.053333 -5.500000 1.625000 0 -5.500000 -1.625000 0
+ L3 13528100 0.053333 -5.500000 1.500000 0 -2.750000 -1.500000 0
+ L3 13528100 0.053333 -5.500000 -1.500000 0 -2.750000 1.500000 0
+ L3 13528100 0.053333 0.000000 1.625000 0 0.000000 -1.625000 0
+ L3 13528100 0.053333 7.250000 1.500000 0 8.000000 -1.500000 0
+ L3 13528100 0.053333 7.250000 -1.500000 0 8.000000 1.500000 0
+ L3 13528100 0.100000 -2.750000 1.625000 0 -2.750000 -1.625000 0
+ L3 13528100 0.053333 -2.750000 1.500000 0 2.250000 -1.500000 0
+ L3 13528100 0.053333 -2.750000 -1.500000 0 2.250000 1.500000 0
+ L3 13528100 0.053333 2.250000 1.500000 0 2.250000 -1.500000 0
+ L3 13528100 0.053333 2.250000 1.500000 0 7.250000 -1.500000 0
+ L3 13528100 0.053333 2.250000 -1.500000 0 7.250000 1.500000 0
+ L3 13528100 0.100000 7.250000 1.625000 0 7.250000 -1.625000 0
+ L3 13528100 0.053333 7.250000 1.500000 0 8.000000 -1.500000 0
+ L3 13528100 0.053333 7.250000 -1.500000 0 8.000000 1.500000 0
+ L3 13528100 0.053333 8.000000 1.500000 0 8.000000 -1.500000 0
+ L3 13528100 0.053333 8.000000 1.500000 0 9.625000 -1.500000 0
+ L3 13528100 0.053333 8.000000 -1.500000 0 9.625000 1.500000 0
+ L3 13528100 0.053333 9.625000 1.500000 0 9.625000 -1.500000 0
+ L3 13528100 0.053333 9.6250000 1.500000 0 11.250000 -1.500000 0
+ L3 13528100 0.053333 9.6250000 -1.500000 0 11.250000 1.500000 0
+ L3 13528100 0.053333 11.250000 1.625000 0 11.250000 -1.625000 0
+ L3 13528100 0.053333 11.250000 0.000000 0 9.750000 -1.500000 0
+ L3 13528100 0.053333 11.250000 0.000000 0 9.750000 1.500000 0
+ L3 13528100 0.053333 11.250000 1.500000 0 10.500000 0.750000 0
+ L3 13528100 0.053333 11.250000 -1.500000 0 10.500000 -0.750000 0
+ L3 13528100 0.053333 10.500000 0.750000 0 10.500000 -0.750000 0
+ L3 13528100 0.100000 11.250000 1.625000 0 11.250000 -1.625000 0
+ L3 13528100 0.053333 11.250000 1.500000 0 14.750000 -1.500000 0
+ L3 13528100 0.053333 11.250000 -1.500000 0 14.750000 1.500000 0
+ L3 13528100 0.053333 14.750000 1.500000 0 14.750000 -1.500000 0
+ L3 13528100 0.053333 14.750000 1.500000 0 18.250000 -1.500000 0
+ L3 13528100 0.053333 14.750000 -1.500000 0 18.250000 1.500000 0
+ L3 13528100 0.053333 18.250000 1.500000 0 18.250000 -1.500000 0
+ L3 13528100 0.053333 18.250000 1.500000 0 21.750000 -1.500000 0
+ L3 13528100 0.053333 18.250000 -1.500000 0 21.750000 1.500000 0
+ L3 13528100 0.053333 21.750000 1.500000 0 21.750000 -1.500000 0
+ L3 13528100 0.053333 21.750000 1.500000 0 25.250000 -1.500000 0
+ L3 13528100 0.053333 21.750000 -1.500000 0 25.250000 1.500000 0
+ L3 13528100 0.053333 25.250000 1.625000 0 25.250000 -1.625000 0
+ L3 13528100 0.053333 25.250000 0.000000 0 26.750000 -1.500000 0
+ L3 13528100 0.053333 25.250000 0.000000 0 26.750000 1.500000 0
+ L3 13528100 0.053333 25.250000 1.500000 0 26.000000 0.750000 0
+ L3 13528100 0.053333 25.250000 -1.500000 0 26.000000 -0.750000 0
+ L3 13528100 0.053333 26.000000 0.750000 0 26.000000 -0.750000 0
+ L3 13528100 0.053333 -5.500000 -1.625000 0 28.750000 -1.625000 0
+ L3 13528100 0.053333 -5.500000 -1.500000 0 28.750000 -1.500000 0
+ L3 13528100 0.053333 28.750000 1.625000 0 28.750000 -1.625000 0
+#Operator's House
+ F4 8421376 0.000000 4 0
+ 3.500000 2.000000 0
+ 3.500000 4.125000 0
+ 7.250000 4.125000 0
+ 7.250000 2.000000 0
+ L3 0 0.050000 3.500000 2.000000 0 7.250000 2.000000 0
+ L3 0 0.050000 3.500000 2.000000 0 3.500000 4.125000 0
+ L3 0 0.050000 3.500000 4.125000 0 7.250000 4.125000 0
+ L3 0 0.050000 7.250000 4.125000 0 7.250000 2.000000 0
+END
+
+
+SUBCONTENTS Walthers HO Cornerstone Engineered Bridge System - Swing Bridge
+TURNOUT HO "Walthers HO Cornerstone Engr Bridge System 200.5' Double-Track Truss Swing Bridge (2-1/16" Tk Sp) 933-3088"
+ P "Normal" 1 0 2
+ E 0.000000 1.031250 270.000000
+ E 27.625000 1.031250 90.000000
+ E 0.000000 -1.031250 270.000000
+ E 27.625000 -1.031250 90.000000
+ S 0 0.000000 0.000000 1.031250 27.625000 1.031250
+ S 0 0.000000 0.000000 -1.031250 27.625000 -1.031250
+ L3 0 0.015000 0.000000 1.221494 0 27.625000 1.221494 0
+ L3 0 0.015000 0.000000 0.841006 0 27.625000 0.841006 0
+ L3 0 0.015000 0.000000 -0.841006 0 27.625000 -0.841006 0
+ L3 0 0.015000 0.000000 -1.221494 0 27.625000 -1.221494 0
+ L3 13528100 0.053333 3.093750 0.000000 0 24.531250 0.000000 0
+ L3 13528100 0.053333 0.000000 2.500000 0 0.000000 -2.500000 0
+ L3 13528100 0.053333 0.000000 2.500000 0 27.625000 2.500000 0
+ L3 13528100 0.053333 0.000000 2.375000 0 27.625000 2.375000 0
+ L3 13528100 0.053333 1.510417 2.375000 0 3.093750 0.791667 0
+ L3 13528100 0.053333 3.093750 -0.791667 0 1.510417 -2.375000 0
+ L3 13528100 0.053333 3.093750 2.375000 0 2.302083 1.583333 0
+ L3 13528100 0.053333 3.093750 -2.375000 0 2.302083 -1.583333 0
+ L3 13528100 0.053333 2.302083 2.375000 0 2.302083 -2.375000 0
+ L3 13528100 0.053333 3.093750 0.791667 0 2.302083 0.000000 0
+ L3 13528100 0.053333 3.093750 -0.791667 0 2.302083 -0.000000 0
+ L3 13528100 0.053333 3.093750 1.583333 0 2.302083 1.583333 0
+ L3 13528100 0.053333 3.093750 0.791667 0 2.302083 0.791667 0
+ L3 13528100 0.053333 3.093750 0.000000 0 2.302083 0.000000 0
+ L3 13528100 0.053333 3.093750 -0.791667 0 2.302083 -0.791667 0
+ L3 13528100 0.053333 3.093750 -1.583333 0 2.302083 -1.583333 0
+ L3 13528100 0.053333 3.093750 2.500000 0 3.093750 -2.500000 0
+ L3 13528100 0.053333 3.093750 2.375000 0 6.156250 -2.375000 0
+ L3 13528100 0.053333 3.093750 -2.375000 0 6.156250 2.375000 0
+ L3 13528100 0.053333 6.156250 2.375000 0 6.156250 -2.375000 0
+ L3 13528100 0.053333 9.218750 2.375000 0 6.156250 -2.375000 0
+ L3 13528100 0.053333 9.218750 -2.375000 0 6.156250 2.375000 0
+ L3 13528100 0.053333 9.218750 2.375000 0 9.218750 -2.375000 0
+ L3 13528100 0.053333 9.218750 2.375000 0 12.281250 -2.375000 0
+ L3 13528100 0.053333 9.218750 -2.375000 0 12.281250 2.375000 0
+ L3 13528100 0.053333 12.281250 2.500000 0 12.281250 -2.500000 0
+ L3 13528100 0.053333 12.281250 2.375000 0 15.343750 -2.375000 0
+ L3 13528100 0.053333 12.281250 -2.375000 0 15.343750 2.375000 0
+ L3 13528100 0.053333 15.343750 2.500000 0 15.343750 -2.500000 0
+ L3 13528100 0.053333 15.343750 2.375000 0 18.406250 -2.375000 0
+ L3 13528100 0.053333 15.343750 -2.375000 0 18.406250 2.375000 0
+ L3 13528100 0.053333 18.406250 2.375000 0 18.406250 -2.375000 0
+ L3 13528100 0.053333 18.406250 2.375000 0 21.468750 -2.375000 0
+ L3 13528100 0.053333 18.406250 -2.375000 0 21.468750 2.375000 0
+ L3 13528100 0.053333 21.468750 2.375000 0 21.468750 -2.375000 0
+ L3 13528100 0.053333 21.468750 2.375000 0 24.531250 -2.375000 0
+ L3 13528100 0.053333 21.468750 -2.375000 0 24.531250 2.375000 0
+ L3 13528100 0.053333 24.531250 2.500000 0 24.531250 -2.500000 0
+ L3 13528100 0.053333 26.114583 2.375000 0 24.531250 0.791667 0
+ L3 13528100 0.053333 24.531250 -0.791667 0 26.114583 -2.375000 0
+ L3 13528100 0.053333 24.531250 2.375000 0 25.322917 1.583333 0
+ L3 13528100 0.053333 24.531250 -2.375000 0 25.322917 -1.583333 0
+ L3 13528100 0.053333 25.322917 2.375000 0 25.322917 -2.375000 0
+ L3 13528100 0.053333 24.531250 0.791667 0 25.322917 0.000000 0
+ L3 13528100 0.053333 24.531250 -0.791667 0 25.322917 -0.000000 0
+ L3 13528100 0.053333 24.531250 1.583333 0 25.322917 1.583333 0
+ L3 13528100 0.053333 24.531250 0.791667 0 25.322917 0.791667 0
+ L3 13528100 0.053333 24.531250 0.000000 0 25.322917 0.000000 0
+ L3 13528100 0.053333 24.531250 -0.791667 0 25.322917 -0.791667 0
+ L3 13528100 0.053333 24.531250 -1.583333 0 25.322917 -1.583333 0
+ L3 13528100 0.053333 0.000000 -2.375000 0 27.625000 -2.375000 0
+ L3 13528100 0.053333 0.000000 -2.500000 0 27.625000 -2.500000 0
+ L3 13528100 0.053333 27.625000 2.500000 0 27.625000 -2.500000 0
+ L3 11579568 0.040000 11.312500 2.875000 0 11.312500 -2.875000 0
+ L3 11579568 0.040000 16.312500 2.875000 0 16.312500 -2.875000 0
+ L3 11579568 0.040000 11.312500 2.875000 0 13.812500 3.375000 0
+ L3 11579568 0.040000 13.812500 3.375000 0 16.312500 2.875000 0
+ L3 11579568 0.040000 11.312500 -2.875000 0 13.812500 -3.375000 0
+ L3 11579568 0.040000 13.812500 -3.375000 0 16.312500 -2.875000 0
+ A3 11579568 0.040000 2.500000 13.812500 0.000000 0 0.000000 360.000000
+ F4 8421376 0.000000 4 0
+ 12.281250 -2.500000 0
+ 12.281250 -4.031250 0
+ 15.343750 -4.031250 0
+ 15.343750 -2.500000 0
+ L3 0 0.050000 12.281250 -2.500000 0 12.281250 -2.500000 0
+ L3 0 0.050000 12.281250 -2.500000 0 12.281250 -4.031250 0
+ L3 0 0.050000 12.281250 -4.031250 0 15.343750 -4.031250 0
+ L3 0 0.050000 15.343750 -4.031250 0 15.343750 -2.500000 0
+END
+
+
+SUBCONTENTS Walthers HO Cornerstone Engineered Bridge System - Bridge Piers and Abutments
+STRUCTURE HO "Walthers HO Cornerstone Engr Bridge System Concrete Pier Single-Track 933-4550"
+ X pier 0.000000 ""
+ L3 11579568 0.053333 -0.625000 1.875000 0 -0.625000 -1.875000 0
+ L3 11579568 0.053333 0.625000 1.875000 0 0.625000 -1.875000 0
+ L3 11579568 0.053333 -0.625000 1.875000 0 0.625000 1.875000 0
+ L3 11579568 0.053333 -0.625000 -1.875000 0 0.625000 -1.875000 0
+ L3 11579568 0.053333 -0.562500 1.625000 0 -0.562500 -1.625000 0
+ L3 11579568 0.053333 0.562500 1.625000 0 0.562500 -1.625000 0
+ L3 11579568 0.053333 -0.562500 1.625000 0 0.562500 1.625000 0
+ L3 11579568 0.053333 -0.562500 -1.625000 0 0.562500 -1.625000 0
+END
+STRUCTURE HO "Walthers HO Cornerstone Engr Bridge System Concrete Abutment Single-Track 933-4551"
+ X pier 0.000000 ""
+ L3 11579568 0.053333 -1.625000 4.625000 0 -1.625000 -4.625000 0
+ L3 11579568 0.053333 1.625000 1.375000 0 1.625000 -1.375000 0
+ L3 11579568 0.053333 -1.625000 4.625000 0 1.625000 1.375000 0
+ L3 11579568 0.053333 -1.625000 -4.625000 0 1.625000 -1.375000 0
+ L3 11579568 0.053333 0.000000 3.000000 0 0.000000 -3.000000 0
+END
+STRUCTURE HO "Walthers HO Cornerstone Engr Bridge System Concrete Pier Double-Track 933-4552"
+ X pier 0.000000 ""
+ L3 11579568 0.053333 -0.625000 1.718750 0 -0.625000 -3.718750 0
+ L3 11579568 0.053333 0.625000 1.718750 0 0.625000 -3.718750 0
+ L3 11579568 0.053333 -0.625000 1.718750 0 0.625000 1.718750 0
+ L3 11579568 0.053333 -0.625000 -3.718750 0 0.625000 -3.718750 0
+ L3 11579568 0.053333 -0.562500 1.468750 0 -0.562500 -3.468750 0
+ L3 11579568 0.053333 0.562500 1.468750 0 0.562500 -3.468750 0
+ L3 11579568 0.053333 -0.562500 1.468750 0 0.562500 1.468750 0
+ L3 11579568 0.053333 -0.562500 -3.468750 0 0.562500 -3.468750 0
+END
+STRUCTURE HO "Walthers HO Cornerstone Engr Bridge System Concrete Abutment Double-Track 933-4553"
+ X pier 0.000000 ""
+ L3 11579568 0.053333 -1.625000 4.125000 0 -1.625000 -7.125000 0
+ L3 11579568 0.053333 1.625000 1.375000 0 1.625000 -3.375000 0
+ L3 11579568 0.053333 -1.625000 4.125000 0 1.625000 1.375000 0
+ L3 11579568 0.053333 -1.625000 -7.125000 0 1.625000 -3.375000 0
+ L3 11579568 0.053333 0.000000 2.750000 0 0.000000 -5.250000 0
+END
+
+
+SUBCONTENTS Walthers HO Cornerstone Engineered Bridge System - Steel Bridge Towers
+STRUCTURE HO "Walthers HO Cornerstone Engr Bridge System Steel Bridge Tower (77' Tall) 933-4554"
+ X pier 0.000000 ""
+ L3 11579568 0.241820 0.000000 0.500000 0 4.133180 0.500000 0
+ L3 11579568 0.241820 0.000000 -0.500000 0 4.133180 -0.500000 0
+ L3 11579568 0.050000 0.000000 2.187500 0 4.133180 2.187500 0
+ L3 11579568 0.050000 0.000000 2.187500 0 4.133180 1.625000 0
+ L3 11579568 0.050000 0.000000 1.625000 0 4.133180 2.187500 0
+ L3 11579568 0.050000 0.000000 1.625000 0 4.133180 1.625000 0
+ L3 11579568 0.050000 0.000000 1.625000 0 4.133180 1.062500 0
+ L3 11579568 0.050000 0.000000 1.062500 0 4.133180 1.625000 0
+ L3 11579568 0.050000 0.000000 1.062500 0 4.133180 1.062500 0
+ L3 11579568 0.050000 0.000000 1.062500 0 4.133180 0.500000 0
+ L3 11579568 0.050000 0.000000 0.500000 0 4.133180 1.062500 0
+ L3 11579568 0.050000 0.000000 -0.500000 0 4.133180 -1.062500 0
+ L3 11579568 0.050000 0.000000 -1.062500 0 4.133180 -0.500000 0
+ L3 11579568 0.050000 0.000000 -1.062500 0 4.133180 -1.062500 0
+ L3 11579568 0.050000 0.000000 -1.062500 0 4.133180 -1.625000 0
+ L3 11579568 0.050000 0.000000 -1.625000 0 4.133180 -1.062500 0
+ L3 11579568 0.050000 0.000000 -1.625000 0 4.133180 -1.625000 0
+ L3 11579568 0.050000 0.000000 -1.625000 0 4.133180 -2.187500 0
+ L3 11579568 0.050000 0.000000 -2.187500 0 4.133180 -1.625000 0
+ L3 11579568 0.050000 0.000000 -2.187500 0 4.133180 -2.187500 0
+ L3 11579568 0.241820 0.000000 2.187500 0 0.000000 -2.187500 0
+ L3 11579568 0.241820 4.133180 2.187500 0 4.133180 -2.187500 0
+ L3 11579568 0.053333 -0.437500 2.625000 0 0.437500 2.625000 0
+ L3 11579568 0.053333 -0.437500 2.625000 0 -0.437500 1.750000 0
+ L3 11579568 0.053333 0.437500 2.625000 0 0.437500 1.750000 0
+ L3 11579568 0.053333 -0.437500 1.750000 0 0.437500 1.750000 0
+ L3 11579568 0.053333 3.695680 2.625000 0 4.570680 2.625000 0
+ L3 11579568 0.053333 3.695680 2.625000 0 3.695680 1.750000 0
+ L3 11579568 0.053333 4.570680 2.625000 0 4.570680 1.750000 0
+ L3 11579568 0.053333 3.695680 1.750000 0 4.570680 1.750000 0
+ L3 11579568 0.053333 -0.437500 -2.625000 0 0.437500 -2.625000 0
+ L3 11579568 0.053333 -0.437500 -2.625000 0 -0.437500 -1.750000 0
+ L3 11579568 0.053333 0.437500 -2.625000 0 0.437500 -1.750000 0
+ L3 11579568 0.053333 -0.437500 -1.750000 0 0.437500 -1.750000 0
+ L3 11579568 0.053333 3.695680 -2.625000 0 4.570680 -2.625000 0
+ L3 11579568 0.053333 3.695680 -2.625000 0 3.695680 -1.750000 0
+ L3 11579568 0.053333 4.570680 -2.625000 0 4.570680 -1.750000 0
+ L3 11579568 0.053333 3.695680 -1.750000 0 4.570680 -1.750000 0
+END
+STRUCTURE HO "Walthers HO Cornerstone Engr Bridge System Steel Bridge Tower Single Bend (77' Tall) 933-4555"
+ X pier 0.000000 ""
+ L 11579568 0.241820 0.000000 2.187500 0.000000 -2.187500
+ L3 11579568 0.053333 -0.437500 2.625000 0 0.437500 2.625000 0
+ L3 11579568 0.053333 -0.437500 2.625000 0 -0.437500 1.750000 0
+ L3 11579568 0.053333 0.437500 2.625000 0 0.437500 1.750000 0
+ L3 11579568 0.053333 -0.437500 1.750000 0 0.437500 1.750000 0
+ L3 11579568 0.053333 -0.437500 -2.625000 0 0.437500 -2.625000 0
+ L3 11579568 0.053333 -0.437500 -2.625000 0 -0.437500 -1.750000 0
+ L3 11579568 0.053333 0.437500 -2.625000 0 0.437500 -1.750000 0
+ L3 11579568 0.053333 -0.437500 -1.750000 0 0.437500 -1.750000 0
+END
+
+SUBCONTENTS Walthers HO Cornerstone Engineered Bridge System - Bridge Tracks
+TURNOUT HO "Walthers/Shinohara C83 Bridge Trk with V Approach (discontinued) 948-899"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 19.685039 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 19.685039 0.000000
+ A3 0 0.030000 11.000000 2.362205 -10.809756 0 349.500000 10.500000
+ A3 0 0.030000 11.000000 2.362205 10.809756 0 180.000000 10.500000
+ L3 0 0.030000 2.362205 0.190244 0 17.322834 0.190244 0
+ L3 0 0.030000 2.362205 -0.190256 0 17.322834 -0.190256 0
+ A3 0 0.030000 11.000000 17.322834 -10.809756 0 0.000000 10.500000
+ A3 0 0.030000 11.000000 17.322834 10.809756 0 169.500000 10.500000
+ END
+TURNOUT HO "Walthers/Shinohara C83 Bridge Trk w/o V Approach Ends 948-886A"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 19.685039 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 19.685039 0.000000
+ L3 0 0.030000 0.000000 0.190244 0 19.685039 0.190244 0
+ L3 0 0.030000 0.000000 -0.190256 0 19.685039 -0.190256 0
+END
+TURNOUT HO "Walthers/Shinohara C83 Bridge Trk V Approach Ends 948-886B"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.362205 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 2.362205 0.000000
+ A3 0 0.030000 11.000000 0.000000 -10.809756 0 0.000000 10.500000
+ A3 0 0.030000 11.000000 0.000000 10.809756 0 169.500000 10.500000
+END
diff --git a/app/lib/params/HO-Weinert-Code75.xtp b/app/lib/params/HO-Weinert-Code75.xtp
index 26a548a..651a2cf 100644
--- a/app/lib/params/HO-Weinert-Code75.xtp
+++ b/app/lib/params/HO-Weinert-Code75.xtp
@@ -1,8 +1,8 @@
-CONTENTS Weinert Mein Glies HO Scale Code 75
-****** http://www.mein-gleis.de *****
-****** http://www.mein-gleis.de/images/html5/mg-2017/#issue/Projekt1/landscape/1 ****
-SUBCONTENTS Weinert Mein Glies HO Scale C75 - Switched
-TURNOUT HO "Weinert Mein Glies Left Hand 6.3d 74901"
+CONTENTS Weinert Mein Gleis HO Scale Code 75
+# ****** http://www.mein-gleis.de *****
+# ****** http://www.mein-gleis.de/images/html5/mg-2017/#issue/Projekt1/landscape/1 ****
+SUBCONTENTS Weinert Mein Gleis HO Scale C75 - Switched
+TURNOUT HO "Weinert Mein Gleis Left Hand 6.3d 74901"
P "Normal" 1 2
P "Reverse" 1 3 4
E 0.000000 0.000000 270.000000
@@ -13,7 +13,7 @@ TURNOUT HO "Weinert Mein Glies Left Hand 6.3d 74901"
C 0 0.000000 -86.719739 0.649715 86.719739 173.699924 6.300152
S 0 0.000000 10.165952 0.523729 14.693754 1.023622
END
-TURNOUT HO "Weinert Mein Glies Right Hand 6.3d 74902"
+TURNOUT HO "Weinert Mein Gleis Right Hand 6.3d 74902"
P "Normal" 1 2
P "Reverse" 1 3 4
E 0.000000 0.000000 270.000000
@@ -24,7 +24,7 @@ TURNOUT HO "Weinert Mein Glies Right Hand 6.3d 74902"
C 0 0.000000 86.719739 0.649255 -86.719739 0.000076 6.300152
S 0 0.000000 10.165952 -0.523729 14.693754 -1.023622
END
-TURNOUT HO "Weinert Mein Glies Left Hand 8.6d 74661"
+TURNOUT HO "Weinert Mein Gleis Left Hand 8.6d 74661"
P "Normal" 1 2
P "Reverse" 1 3 4
E 0.000000 0.000000 270.000000
@@ -35,7 +35,7 @@ TURNOUT HO "Weinert Mein Glies Left Hand 8.6d 74661"
C 0 0.000000 -82.399361 0.952812 82.399361 171.399924 8.600152
S 0 0.000000 13.274525 0.926498 13.916604 1.023622
END
-TURNOUT HO "Weinert Mein Glies Right Hand 8.6d 74662"
+TURNOUT HO "Weinert Mein Gleis Right Hand 8.6d 74662"
P "Normal" 1 2
P "Reverse" 1 3 4
E 0.000000 0.000000 270.000000
@@ -46,7 +46,7 @@ TURNOUT HO "Weinert Mein Glies Right Hand 8.6d 74662"
C 0 0.000000 82.399361 0.952375 -82.399361 0.000076 8.600152
S 0 0.000000 13.274525 -0.926498 13.916604 -1.023622
END
-TURNOUT HO "Weinert Mein Glies Left Hand 8.6d(Shorten) 74501"
+TURNOUT HO "Weinert Mein Gleis Left Hand 8.6d(Shorten) 74501"
P "Normal" 1 2
P "Reverse" 1 3 4
E 0.000000 0.000000 270.000000
@@ -57,7 +57,7 @@ TURNOUT HO "Weinert Mein Glies Left Hand 8.6d(Shorten) 74501"
C 0 0.000000 -74.645410 0.649699 74.645410 171.399924 8.600152
S 0 0.000000 11.811914 0.839313 13.030487 1.023622
END
-TURNOUT HO "Weinert Mein Glies Right Hand 8.6d(Shorten) 74502"
+TURNOUT HO "Weinert Mein Gleis Right Hand 8.6d(Shorten) 74502"
P "Normal" 1 2
P "Reverse" 1 3 4
E 0.000000 0.000000 270.000000
@@ -68,7 +68,7 @@ TURNOUT HO "Weinert Mein Glies Right Hand 8.6d(Shorten) 74502"
C 0 0.000000 74.645410 0.649303 -74.645410 0.000076 8.600152
S 0 0.000000 11.811914 -0.839313 13.030487 -1.023622
END
-TURNOUT HO "Weinert Mein Glies Left Hand 8.6d 74401"
+TURNOUT HO "Weinert Mein Gleis Left Hand 8.6d 74401"
P "Normal" 1 2
P "Reverse" 1 3 4
E 0.000000 0.000000 270.000000
@@ -79,7 +79,7 @@ TURNOUT HO "Weinert Mein Glies Left Hand 8.6d 74401"
C 0 0.000000 -38.387137 0.649651 38.387137 171.399924 8.600152
S 0 0.000000 6.389930 0.431625 10.304240 1.023622
END
-TURNOUT HO "Weinert Mein Glies Right Hand 8.6d 74402"
+TURNOUT HO "Weinert Mein Gleis Right Hand 8.6d 74402"
P "Normal" 1 2
P "Reverse" 1 3 4
E 0.000000 0.000000 270.000000
@@ -91,8 +91,8 @@ TURNOUT HO "Weinert Mein Glies Right Hand 8.6d 74402"
S 0 0.000000 6.389930 -0.431625 10.304240 -1.023622
END
-SUBCONTENTS Weinert Mein Glies HO-Scale C75 - Slips
-TURNOUT HO "Weinert Mein Glies WYE 6.3d 74903"
+SUBCONTENTS Weinert Mein Gleis HO-Scale C75 - Slips
+TURNOUT HO "Weinert Mein Gleis WYE 6.3d 74903"
P "Left" 1 2 3
P "Right" 1 4 5
E 0.000000 0.000000 270.000000
@@ -104,7 +104,7 @@ TURNOUT HO "Weinert Mein Glies WYE 6.3d 74903"
C 0 0.000000 131.483018 0.649077 -131.483018 0.000076 3.150152
S 0 0.000000 7.874958 -0.198677 14.763780 -0.577811
END
-TURNOUT HO "Weinert Mein Glies WYE 8.6d 74663"
+TURNOUT HO "Weinert Mein Gleis WYE 8.6d 74663"
P "Left" 1 2 3
P "Right" 1 4 5
E 0.000000 0.000000 270.000000
@@ -116,7 +116,7 @@ TURNOUT HO "Weinert Mein Glies WYE 8.6d 74663"
C 0 0.000000 164.514766 0.992855 -164.514766 0.000076 4.300152
S 0 0.000000 13.329043 -0.463119 13.976378 -0.511811
END
-TURNOUT HO "Weinert Mein Glies WYE 8.6d(Shorten) 74503"
+TURNOUT HO "Weinert Mein Gleis WYE 8.6d(Shorten) 74503"
P "Left" 1 2 3
P "Right" 1 4 5
E 0.000000 0.000000 270.000000
@@ -128,7 +128,7 @@ TURNOUT HO "Weinert Mein Glies WYE 8.6d(Shorten) 74503"
C 0 0.000000 150.603813 0.649001 -150.603813 0.000076 4.300152
S 0 0.000000 11.942071 -0.423959 13.110236 -0.511811
END
-TURNOUT HO "Weinert Mein Glies WYE 8.6d 74403"
+TURNOUT HO "Weinert Mein Gleis WYE 8.6d 74403"
P "Left" 1 2 3
P "Right" 1 4 5
E 0.000000 0.000000 270.000000
@@ -141,8 +141,8 @@ TURNOUT HO "Weinert Mein Glies WYE 8.6d 74403"
S 0 0.000000 6.516361 -0.220259 10.393701 -0.511811
END
-SUBCONTENTS Weinert Mein Glies HO-Scale C75 - Slips
-TURNOUT HO "Weinert Mein Glies Double-Slip 8.6d 74641"
+SUBCONTENTS Weinert Mein Gleis HO-Scale C75 - Slips
+TURNOUT HO "Weinert Mein Gleis Double-Slip 8.6d 74641"
P "Normal" 1 2 3 0 4 5 6
P "Reverse" 1 7 6 0 4 8 3
E 0.000000 0.000000 270.000000
@@ -159,8 +159,8 @@ TURNOUT HO "Weinert Mein Glies Double-Slip 8.6d 74641"
C 0 0.000000 -71.993749 12.125759 71.993734 180.000076 8.600152
END
-SUBCONTENTS Weinert Mein Glies HO-Scale C75 - Flex Track
-TURNOUT HO "Weinert Mein Glies Flex Track 74000"
+SUBCONTENTS Weinert Mein Gleis HO-Scale C75 - Flex Track
+TURNOUT HO "Weinert Mein Gleis Flex Track 74000"
P "Normal" 1
E 0.000000 0.000000 270.000000
E 36.220472 0.000000 90.000000
diff --git a/app/lib/params/HO-WillsHOOO.xtp b/app/lib/params/HO-WillsHOOO.xtp
index 5a65c32..c82489d 100644
--- a/app/lib/params/HO-WillsHOOO.xtp
+++ b/app/lib/params/HO-WillsHOOO.xtp
@@ -1,5 +1,5 @@
CONTENTS Wills kits OO/HO
-STRUCTURE HO "Wills Semi Detached houses 2"
+STRUCTURE OO "Wills Semi Detached houses 2"
F3 12699578 0.000000 4
1.279528 2.952756 0
1.574803 2.952756 0
@@ -114,7 +114,7 @@ STRUCTURE HO "Wills Semi Detached houses 2"
L3 0 0.093750 1.637303 1.834154 0 1.243602 1.834154 0
L3 0 0.093750 1.243602 1.834154 0 1.243602 3.015256 0
END
-STRUCTURE HO "Wills Barn 4"
+STRUCTURE OO "Wills Barn 4"
F3 12699578 0.000000 4
0.059055 2.755906 0
4.133858 2.755906 0
@@ -131,7 +131,7 @@ STRUCTURE HO "Wills Barn 4"
L3 0 0.062500 0.031250 0.031250 0 0.031250 2.787156 0
L3 0 0.062500 0.031250 1.409203 0 4.165108 1.409203 0
END
-STRUCTURE HO "Wills Farmhouse 7"
+STRUCTURE OO "Wills Farmhouse 7"
F3 12699578 0.000000 6
3.956693 1.181102 0
3.720472 1.181102 0
@@ -171,7 +171,7 @@ STRUCTURE HO "Wills Farmhouse 7"
L3 0 0.062500 2.387205 0.031250 0 1.698228 0.031250 0
L3 0 0.062500 1.698228 0.031250 0 1.698228 0.228100 0
END
-STRUCTURE HO "Wills farm 2222"
+STRUCTURE OO "Wills farm 2222"
A3 12632256 1.250000 1.878070 4.569847 5.242700 0 261.405798 87.545662
F3 12632256 0.000000 4
8.141453 6.390861 0
diff --git a/app/lib/params/HO-atl100ho.xtp b/app/lib/params/HO-atl100ho.xtp
index a389571..c267699 100644
--- a/app/lib/params/HO-atl100ho.xtp
+++ b/app/lib/params/HO-atl100ho.xtp
@@ -167,29 +167,65 @@ TURNOUT HO "Atlas #8 Mark IV Right 286"
C 0 0.000000 57.585695 0.649371 -57.585695 0.000076 7.180914
S 0 0.000000 7.847964 -0.451679 12.200000 -1.000000
END
+TURNOUT HO "Atlas Customline Mark IV Curve Left 287"
+ P "Normal" 1 4 5
+ P "Reverse" 1 2 3
+ E 0.000000 0.000000 270.000000
+ E 14.840000 3.960000 60.000000
+ E 13.320000 4.510000 52.500000
+ S 0 0.000000 0.000000 0.000000 0.683614 0.000000
+ C 0 0.000000 -19.910982 0.683641 19.910982 142.499924 37.500152
+ S 0 0.000000 12.804685 4.114563 13.320000 4.510000
+ C 0 0.000000 -27.133402 0.710757 27.133388 149.999867 30.057448
+ S 0 0.000000 14.277497 3.635217 14.840000 3.960000
+END
+TURNOUT HO "Atlas Customline Mark IV Curve Right 288"
+ P "Normal" 1 4 5
+ P "Reverse" 1 2 3
+ E 0.000000 0.000000 270.000000
+ E 14.840000 -3.960000 120.000000
+ E 13.320000 -4.510000 127.500000
+ S 0 0.000000 0.000000 0.000000 0.683614 0.000000
+ C 0 0.000000 19.910982 0.683535 -19.910982 0.000076 37.500152
+ S 0 0.000000 12.804685 -4.114563 13.320000 -4.510000
+ C 0 0.000000 27.133402 0.710757 -27.133388 359.942837 30.057448
+ S 0 0.000000 14.277497 -3.635217 14.840000 -3.960000
+END
TURNOUT HO "Atlas Left Snap Switch 850"
- U "Regular Turnout" "Sillub Technology" "Atlas" "Left Snap Switch" "850" "Right Snap Switch" "850" 6.156363 20.000000 1.085533 9.000000
- P "Normal" 1 2
- P "Reverse" 1 3 4
+ P "Normal" 1
+ P "Reverse" 2
E 0.000000 0.000000 270.000000
E 9.000000 0.000000 90.000000
E 6.156363 1.085533 70.000000
- S 0 0.000000 0.000000 0.000000 0.648600 0.000000
- S 0 0.000000 0.648600 0.000000 9.000000 0.000000
- C 0 0.000000 -14.321607 0.648600 14.321607 160.000000 20.000000
- S 0 0.000000 5.546878 0.863699 6.156363 1.085533
+ S 0 0.000000 0.000000 0.000000 9.000000 0.000000
+ C 0 0.000000 -18.000000 0.000000 18.000000 160.000000 20.000000
END
TURNOUT HO "Atlas Right Snap Switch 851"
- U "Regular Turnout" "Sillub Technology" "Atlas" "Left Snap Switch" "850" "Right Snap Switch" "850" 6.156363 20.000000 1.085533 9.000000
- P "Normal" 1 2
- P "Reverse" 1 3 4
+ P "Normal" 1
+ P "Reverse" 2
E 0.000000 0.000000 270.000000
E 9.000000 0.000000 90.000000
E 6.156363 -1.085533 110.000000
- S 0 0.000000 0.000000 0.000000 0.648600 0.000000
- S 0 0.000000 0.648600 0.000000 9.000000 0.000000
- C 0 0.000000 14.321607 0.648600 -14.321607 0.000000 20.000000
- S 0 0.000000 5.546878 -0.863699 6.156363 -1.085533
+ S 0 0.000000 0.000000 0.000000 9.000000 0.000000
+ C 0 0.000000 18.000000 0.000000 -18.000000 0.000000 20.000000
+ END
+TURNOUT HO "Atlas Left Snap Switch 850/15"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 9.000000 0.000000 90.000000
+ E 4.658743 0.613335 75.000000
+ S 0 0.000000 0.000000 0.000000 9.000000 0.000000
+ C 0 0.000000 18.000000 0.000000 18.000000 165.000000 15.000000
+ END
+TURNOUT HO "Atlas Right Snap Switch 851/15"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 9.000000 0.000000 90.000000
+ E 4.658743 -0.613335 105.000000
+ S 0 0.000000 0.000000 0.000000 9.000000 0.000000
+ C 0 0.000000 18.000000 0.000000 -18.000000 0.000000 15.000000
END
#########################################################################################
@@ -267,14 +303,14 @@ SUBCONTENTS Atlas HO-Scale C100 - Curve Track
TURNOUT HO "Atlas 15"" 30D Curve 151/831"
P "Normal" 1
E 0.000000 0.000000 270.000000
- E 7.499994 -2.009616 120.000000
+ E 7.500000 -2.009619 120.000000
C 0 0 15.000000 0.000000 -15.000000 0.000000 30.000000
END
TURNOUT HO "Atlas 15"" 15D Curve 832"
P "Normal" 1
E 0.000000 0.000000 270.000000
- E 3.882282 -0.511112 105.000000
- C 0 0.000000 15.000000 0.000000 15.000000 0.000000 15.000000
+ E 3.882286 -0.511113 105.000000
+ C 0 0.000000 15.000000 0.000000 -15.000000 0.000000 15.000000
END
# Curved Section Design by Dave Bullis - 18.000000 30.000000
TURNOUT HO "Atlas 18"" 30D Curve 152/833"
@@ -375,7 +411,7 @@ TURNOUT HO "Atlas C100 9"" Single-Track Thru-Girder Bridge 880"
L 11579568 0.050000 8.250000 -1.000000 8.250000 -0.625000
END
TURNOUT HO "Atlas C100 9"" Double-Track Thru-Girder Bridge 881"
- P "P0" 1 0 1
+ P "P0" 1 0 2
E 0.000000 0.000000 270.000000
E 9.000000 0.000000 90.000000
E 0.000000 -2.000000 270.000000
diff --git a/app/lib/params/HO-cmr-ho.xtp b/app/lib/params/HO-cmr-ho.xtp
index 83b9688..d3e2e8d 100644
--- a/app/lib/params/HO-cmr-ho.xtp
+++ b/app/lib/params/HO-cmr-ho.xtp
@@ -1,4 +1,4 @@
-CONTENTS Custom Model Railroad Structures
+CONTENTS HO Scale Custom Model Railroad Structures
STRUCTURE HO "Custom Model Railroads Merchant's Bank & Trust NA"
F3 12632256 0.000000 4
0.000000 0.000000 0
diff --git a/app/lib/params/HO_toolkit-Roads.xtp b/app/lib/params/HO_toolkit-Roads.xtp
index 35339fb..657af33 100644
--- a/app/lib/params/HO_toolkit-Roads.xtp
+++ b/app/lib/params/HO_toolkit-Roads.xtp
@@ -1,4 +1,4 @@
-CONTENTS Special Devices
+CONTENTS Special Devices HO Scale streets vehicles
STRUCTURE HO "Special Devices Straight Two-Lane Paved Street 1"
F3 0 0.000000 4
0.000000 0.000000 0
diff --git a/app/lib/params/HOn3-MicroEngineering-Bridges.xtp b/app/lib/params/HOn3-MicroEngineering-Bridges.xtp
new file mode 100644
index 0000000..27bbdd7
--- /dev/null
+++ b/app/lib/params/HOn3-MicroEngineering-Bridges.xtp
@@ -0,0 +1,377 @@
+CONTENTS Micro Engineering HOn3 Scale Bridges
+SUBCONTENTS Micro-Engineering HOn3 Bridges - Deck Girder Open/Ballast
+TURNOUT HOn3 "Micro-Engineering 30' Single-Track Deck Girder Bridge 75-504"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 4.133180 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 4.133180 0.000000
+ L 11579568 0.050000 0.000000 0.500000 4.133180 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 4.133180 -0.500000
+END
+TURNOUT HOn3 "Micro-Engineering 50' Single-Track Deck Girder Bridge 75-503"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 6.888634 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 6.888634 0.000000
+ L 11579568 0.050000 0.000000 0.500000 6.888634 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 6.888634 -0.500000
+END
+
+SUBCONTENTS Micro-Engineering HOn3 Bridges - Tall Steel Viaduct Base Kits
+TURNOUT HOn3 "Micro-Engineering 150' Tall Steel Viaduct Light Weight Bridge 75-540"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 20.665901 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 20.665901 0.000000
+ L 11579568 0.050000 0.000000 0.500000 20.665901 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 20.665901 -0.500000
+ L 11579568 0.241820 6.888634 2.187500 6.888634 -2.187500
+ L 11579568 0.241820 13.777268 2.187500 13.777268 -2.187500
+END
+TURNOUT HOn3 "Micro-Engineering 150' Tall Steel Viaduct Standard Bridge 75-516"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 20.665901 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 20.665901 0.000000
+
+ L 11579568 0.050000 4.133180 2.187500 8.266360 2.187500
+ L 11579568 0.050000 4.133180 2.187500 8.266360 1.625000
+ L 11579568 0.050000 4.133180 1.625000 8.266360 2.187500
+ L 11579568 0.050000 4.133180 1.625000 8.266360 1.625000
+ L 11579568 0.050000 4.133180 1.625000 8.266360 1.062500
+ L 11579568 0.050000 4.133180 1.062500 8.266360 1.625000
+ L 11579568 0.050000 4.133180 1.062500 8.266360 1.062500
+ L 11579568 0.050000 4.133180 1.062500 8.266360 0.500000
+ L 11579568 0.050000 4.133180 0.500000 8.266360 1.062500
+
+ L 11579568 0.050000 12.399540 2.187500 16.532720 2.187500
+ L 11579568 0.050000 12.399540 2.187500 16.532720 1.625000
+ L 11579568 0.050000 12.399540 1.625000 16.532720 2.187500
+ L 11579568 0.050000 12.399540 1.625000 16.532720 1.625000
+ L 11579568 0.050000 12.399540 1.625000 16.532720 1.062500
+ L 11579568 0.050000 12.399540 1.062500 16.532720 1.625000
+ L 11579568 0.050000 12.399540 1.062500 16.532720 1.062500
+ L 11579568 0.050000 12.399540 1.062500 16.532720 0.500000
+ L 11579568 0.050000 12.399540 0.500000 16.532720 1.062500
+
+ L 11579568 0.050000 0.000000 0.500000 20.665901 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 20.665901 -0.500000
+
+ L 11579568 0.050000 4.133180 -0.500000 8.266360 -1.062500
+ L 11579568 0.050000 4.133180 -1.062500 8.266360 -0.500000
+ L 11579568 0.050000 4.133180 -1.062500 8.266360 -1.062500
+ L 11579568 0.050000 4.133180 -1.062500 8.266360 -1.625000
+ L 11579568 0.050000 4.133180 -1.625000 8.266360 -1.062500
+ L 11579568 0.050000 4.133180 -1.625000 8.266360 -1.625000
+ L 11579568 0.050000 4.133180 -1.625000 8.266360 -2.187500
+ L 11579568 0.050000 4.133180 -2.187500 8.266360 -1.625000
+ L 11579568 0.050000 4.133180 -2.187500 8.266360 -2.187500
+
+ L 11579568 0.050000 12.399540 -0.500000 16.532720 -1.062500
+ L 11579568 0.050000 12.399540 -1.062500 16.532720 -0.500000
+ L 11579568 0.050000 12.399540 -1.062500 16.532720 -1.062500
+ L 11579568 0.050000 12.399540 -1.062500 16.532720 -1.625000
+ L 11579568 0.050000 12.399540 -1.625000 16.532720 -1.062500
+ L 11579568 0.050000 12.399540 -1.625000 16.532720 -1.625000
+ L 11579568 0.050000 12.399540 -1.625000 16.532720 -2.187500
+ L 11579568 0.050000 12.399540 -2.187500 16.532720 -1.625000
+ L 11579568 0.050000 12.399540 -2.187500 16.532720 -2.187500
+
+ L 11579568 0.241820 4.133180 2.187500 4.133180 -2.187500
+ L 11579568 0.241820 8.266360 2.187500 8.266360 -2.187500
+
+ L 11579568 0.241820 12.399540 2.187500 12.399540 -2.187500
+ L 11579568 0.241820 16.532720 2.187500 16.532720 -2.187500
+END
+TURNOUT HOn3 "Micro-Engineering 210' Tall Steel Viaduct Standard Bridge 75-517"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 28.932262 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 28.932262 0.000000
+
+ L 11579568 0.050000 4.133180 2.187500 8.266360 2.187500
+ L 11579568 0.050000 4.133180 2.187500 8.266360 1.625000
+ L 11579568 0.050000 4.133180 1.625000 8.266360 2.187500
+ L 11579568 0.050000 4.133180 1.625000 8.266360 1.625000
+ L 11579568 0.050000 4.133180 1.625000 8.266360 1.062500
+ L 11579568 0.050000 4.133180 1.062500 8.266360 1.625000
+ L 11579568 0.050000 4.133180 1.062500 8.266360 1.062500
+ L 11579568 0.050000 4.133180 1.062500 8.266360 0.500000
+ L 11579568 0.050000 4.133180 0.500000 8.266360 1.062500
+
+ L 11579568 0.050000 12.399540 2.187500 16.532720 2.187500
+ L 11579568 0.050000 12.399540 2.187500 16.532720 1.625000
+ L 11579568 0.050000 12.399540 1.625000 16.532720 2.187500
+ L 11579568 0.050000 12.399540 1.625000 16.532720 1.625000
+ L 11579568 0.050000 12.399540 1.625000 16.532720 1.062500
+ L 11579568 0.050000 12.399540 1.062500 16.532720 1.625000
+ L 11579568 0.050000 12.399540 1.062500 16.532720 1.062500
+ L 11579568 0.050000 12.399540 1.062500 16.532720 0.500000
+ L 11579568 0.050000 12.399540 0.500000 16.532720 1.062500
+
+ L 11579568 0.050000 20.665900 0.500000 24.799080 1.062500
+ L 11579568 0.050000 20.665900 1.062500 24.799080 0.500000
+ L 11579568 0.050000 20.665900 1.062500 24.799080 1.062500
+ L 11579568 0.050000 20.665900 1.062500 24.799080 1.625000
+ L 11579568 0.050000 20.665900 1.625000 24.799080 1.062500
+ L 11579568 0.050000 20.665900 1.625000 24.799080 1.625000
+ L 11579568 0.050000 20.665900 1.625000 24.799080 2.187500
+ L 11579568 0.050000 20.665900 2.187500 24.799080 1.625000
+ L 11579568 0.050000 20.665900 2.187500 24.799080 2.187500
+
+ L 11579568 0.050000 0.000000 0.500000 28.932262 0.500000
+
+ L 11579568 0.050000 0.000000 -0.500000 28.932262 -0.500000
+
+ L 11579568 0.050000 4.133180 -0.500000 8.266360 -1.062500
+ L 11579568 0.050000 4.133180 -1.062500 8.266360 -0.500000
+ L 11579568 0.050000 4.133180 -1.062500 8.266360 -1.062500
+ L 11579568 0.050000 4.133180 -1.062500 8.266360 -1.625000
+ L 11579568 0.050000 4.133180 -1.625000 8.266360 -1.062500
+ L 11579568 0.050000 4.133180 -1.625000 8.266360 -1.625000
+ L 11579568 0.050000 4.133180 -1.625000 8.266360 -2.187500
+ L 11579568 0.050000 4.133180 -2.187500 8.266360 -1.625000
+ L 11579568 0.050000 4.133180 -2.187500 8.266360 -2.187500
+
+ L 11579568 0.050000 12.399540 -0.500000 16.532720 -1.062500
+ L 11579568 0.050000 12.399540 -1.062500 16.532720 -0.500000
+ L 11579568 0.050000 12.399540 -1.062500 16.532720 -1.062500
+ L 11579568 0.050000 12.399540 -1.062500 16.532720 -1.625000
+ L 11579568 0.050000 12.399540 -1.625000 16.532720 -1.062500
+ L 11579568 0.050000 12.399540 -1.625000 16.532720 -1.625000
+ L 11579568 0.050000 12.399540 -1.625000 16.532720 -2.187500
+ L 11579568 0.050000 12.399540 -2.187500 16.532720 -1.625000
+ L 11579568 0.050000 12.399540 -2.187500 16.532720 -2.187500
+
+ L 11579568 0.050000 20.665900 -0.500000 24.799080 -1.062500
+ L 11579568 0.050000 20.665900 -1.062500 24.799080 -0.500000
+ L 11579568 0.050000 20.665900 -1.062500 24.799080 -1.062500
+ L 11579568 0.050000 20.665900 -1.062500 24.799080 -1.625000
+ L 11579568 0.050000 20.665900 -1.625000 24.799080 -1.062500
+ L 11579568 0.050000 20.665900 -1.625000 24.799080 -1.625000
+ L 11579568 0.050000 20.665900 -1.625000 24.799080 -2.187500
+ L 11579568 0.050000 20.665900 -2.187500 24.799080 -1.625000
+ L 11579568 0.050000 20.665900 -2.187500 24.799080 -2.187500
+
+ L 11579568 0.241820 4.133180 2.187500 4.133180 -2.187500
+ L 11579568 0.241820 8.266360 2.187500 8.266360 -2.187500
+
+ L 11579568 0.241820 12.399540 2.187500 12.399540 -2.187500
+ L 11579568 0.241820 16.532720 2.187500 16.532720 -2.187500
+
+ L 11579568 0.241820 20.665900 2.187500 20.665900 -2.187500
+ L 11579568 0.241820 24.799080 2.187500 24.799080 -2.187500
+END
+
+TURNOUT HOn3 "Micro-Engineering 210' Tall Steel Viaduct Low Bridge 31' High 75-551A"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 28.932262 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 28.932262 0.000000
+ L 11579568 0.050000 0.000000 0.500000 28.932262 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 28.932262 -0.500000
+
+ L 11579568 0.241820 4.133180 1.062500 4.133180 -1.062500
+ L 11579568 0.241820 8.266360 1.062500 8.266360 -1.062500
+
+ L 11579568 0.241820 12.399540 1.062500 12.399540 -1.062500
+ L 11579568 0.241820 16.532720 1.062500 16.532720 -1.062500
+
+ L 11579568 0.241820 20.665900 1.062500 20.665900 -1.062500
+ L 11579568 0.241820 24.799080 1.062500 24.799080 -1.062500
+END
+TURNOUT HOn3 "Micro-Engineering 210' Tall Steel Viaduct Low Bridge 54' High 75-551B"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 28.932262 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 28.932262 0.000000
+ L 11579568 0.050000 0.000000 0.500000 28.932262 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 28.932262 -0.500000
+
+ L 11579568 0.241820 4.133180 1.625000 4.133180 -1.625000
+ L 11579568 0.241820 8.266360 1.625000 8.266360 -1.625000
+
+ L 11579568 0.241820 12.399540 1.625000 12.399540 -1.625000
+ L 11579568 0.241820 16.532720 1.625000 16.532720 -1.625000
+
+ L 11579568 0.241820 20.665900 1.625000 20.665900 -1.625000
+ L 11579568 0.241820 24.799080 1.625000 24.799080 -1.625000
+END
+TURNOUT HOn3 "Micro-Engineering 210' Tall Steel Viaduct Low Bridge 77' High 75-551C"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 28.932262 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 28.932262 0.000000
+ L 11579568 0.050000 0.000000 0.500000 28.932262 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 28.932262 -0.500000
+
+ L 11579568 0.241820 4.133180 2.187500 4.133180 -2.187500
+ L 11579568 0.241820 8.266360 2.187500 8.266360 -2.187500
+
+ L 11579568 0.241820 12.399540 2.187500 12.399540 -2.187500
+ L 11579568 0.241820 16.532720 2.187500 16.532720 -2.187500
+
+ L 11579568 0.241820 20.665900 2.187500 20.665900 -2.187500
+ L 11579568 0.241820 24.799080 2.187500 24.799080 -2.187500
+END
+
+
+SUBCONTENTS Micro-Engineering HOn3 Bridges - Tall Steel Viaduct Length Extensions
+TURNOUT HOn3 "Micro-Engineering 30' Tall Steel Viaduct Bridge Connector 75-529"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 4.133180 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 4.133180 0.000000
+ L 11579568 0.050000 0.000000 2.187500 4.133180 2.187500
+ L 11579568 0.050000 0.000000 2.187500 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.625000 4.133180 2.187500
+ L 11579568 0.050000 0.000000 1.625000 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.625000 4.133180 1.062500
+ L 11579568 0.050000 0.000000 1.062500 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.062500 4.133180 1.062500
+ L 11579568 0.050000 0.000000 1.062500 4.133180 0.500000
+ L 11579568 0.050000 0.000000 0.500000 4.133180 1.062500
+
+ L 11579568 0.050000 0.000000 0.500000 4.133180 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 4.133180 -0.500000
+
+ L 11579568 0.050000 0.000000 -0.500000 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -0.500000
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -2.187500
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -2.187500
+
+ L 11579568 0.241820 0.000000 2.187500 0.000000 -2.187500
+ L 11579568 0.241820 4.133180 2.187500 4.133180 -2.187500
+END
+TURNOUT HOn3 "Micro-Engineering 60' Tall Steel Viaduct Bridge Extension 75-528"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 8.266361 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 8.266361 0.000000
+ L 11579568 0.050000 0.000000 2.187500 4.133180 2.187500
+ L 11579568 0.050000 0.000000 2.187500 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.625000 4.133180 2.187500
+ L 11579568 0.050000 0.000000 1.625000 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.625000 4.133180 1.062500
+ L 11579568 0.050000 0.000000 1.062500 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.062500 4.133180 1.062500
+ L 11579568 0.050000 0.000000 1.062500 4.133180 0.500000
+ L 11579568 0.050000 0.000000 0.500000 4.133180 1.062500
+
+ L 11579568 0.050000 0.000000 0.500000 4.133180 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 4.133180 -0.500000
+
+ L 11579568 0.050000 0.000000 -0.500000 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -0.500000
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -2.187500
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -2.187500
+
+ L 11579568 0.241820 0.000000 2.187500 0.000000 -2.187500
+ L 11579568 0.241820 4.133180 2.187500 4.133180 -2.187500
+END
+TURNOUT HOn3 "Micro-Engineering 80' Tall Steel Viaduct Bridge Extension 75-527"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 11.021814 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 11.021814 0.000000
+ L 11579568 0.050000 0.000000 2.187500 4.133180 2.187500
+ L 11579568 0.050000 0.000000 2.187500 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.625000 4.133180 2.187500
+ L 11579568 0.050000 0.000000 1.625000 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.625000 4.133180 1.062500
+ L 11579568 0.050000 0.000000 1.062500 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.062500 4.133180 1.062500
+ L 11579568 0.050000 0.000000 1.062500 4.133180 0.500000
+ L 11579568 0.050000 0.000000 0.500000 4.133180 1.062500
+
+ L 11579568 0.050000 0.000000 0.500000 4.133180 0.500000
+ L 11579568 0.050000 0.000000 -0.500000 4.133180 -0.500000
+
+ L 11579568 0.050000 0.000000 -0.500000 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -0.500000
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -2.187500
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -2.187500
+
+ L 11579568 0.241820 0.000000 2.187500 0.000000 -2.187500
+ L 11579568 0.241820 4.133180 2.187500 4.133180 -2.187500
+END
+
+SUBCONTENTS Micro-Engineering HOn3 Bridges - Tall Steel Viaduct Tower, Bents and Height Extensions
+STRUCTURE HOn3 "Micro-Engineering Tall Steel Viaduct Height Extension(1 Story) 75-546A"
+ X pier 0.000000 ""
+ L 11579568 0.050000 0.000000 2.750000 4.133180 2.750000
+ L 11579568 0.050000 0.000000 2.750000 4.133180 2.187500
+ L 11579568 0.050000 0.000000 2.187500 4.133180 2.750000
+
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -2.750000
+ L 11579568 0.050000 0.000000 -2.750000 4.133180 -2.187500
+ L 11579568 0.050000 0.000000 -2.750000 4.133180 -2.750000
+
+ L 11579568 0.241820 0.000000 2.750000 0.000000 -2.750000
+ L 11579568 0.241820 4.133180 2.750000 4.133180 -2.750000
+END
+STRUCTURE HOn3 "Micro-Engineering Tall Steel Viaduct Height Extension(2 Story) 75-546B"
+ X pier 0.000000 ""
+ L 11579568 0.050000 0.000000 3.312500 4.133180 3.312500
+ L 11579568 0.050000 0.000000 3.312500 4.133180 2.750000
+ L 11579568 0.050000 0.000000 2.750000 4.133180 3.312500
+ L 11579568 0.050000 0.000000 2.750000 4.133180 2.750000
+ L 11579568 0.050000 0.000000 2.750000 4.133180 2.187500
+ L 11579568 0.050000 0.000000 2.187500 4.133180 2.750000
+
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -2.750000
+ L 11579568 0.050000 0.000000 -2.750000 4.133180 -2.187500
+ L 11579568 0.050000 0.000000 -2.750000 4.133180 -2.750000
+ L 11579568 0.050000 0.000000 -2.750000 4.133180 -3.312500
+ L 11579568 0.050000 0.000000 -3.312500 4.133180 -2.750000
+ L 11579568 0.050000 0.000000 -3.312500 4.133180 -3.312500
+
+ L 11579568 0.241820 0.000000 3.312500 0.000000 -3.312500
+ L 11579568 0.241820 4.133180 3.312500 4.133180 -3.312500
+END
+STRUCTURE HOn3 "Micro-Engineering Tall Steel Viaduct Tower (4 Story) 75-169"
+ X pier 0.000000 ""
+ L 11579568 0.050000 0.000000 2.750000 4.133180 2.750000
+ L 11579568 0.050000 0.000000 2.750000 4.133180 2.187500
+ L 11579568 0.050000 0.000000 2.187500 4.133180 2.750000
+ L 11579568 0.050000 0.000000 2.187500 4.133180 2.187500
+ L 11579568 0.050000 0.000000 2.187500 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.625000 4.133180 2.187500
+ L 11579568 0.050000 0.000000 1.625000 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.625000 4.133180 1.062500
+ L 11579568 0.050000 0.000000 1.062500 4.133180 1.625000
+ L 11579568 0.050000 0.000000 1.062500 4.133180 1.062500
+ L 11579568 0.050000 0.000000 1.062500 4.133180 0.500000
+ L 11579568 0.050000 0.000000 0.500000 4.133180 1.062500
+
+ L 11579568 0.050000 0.000000 -0.500000 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -0.500000
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.062500 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -1.062500
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -1.625000 4.133180 -2.187500
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -1.625000
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -2.187500
+ L 11579568 0.050000 0.000000 -2.187500 4.133180 -2.750000
+ L 11579568 0.050000 0.000000 -2.750000 4.133180 -2.187500
+ L 11579568 0.050000 0.000000 -2.750000 4.133180 -2.750000
+
+ L 11579568 0.241820 0.000000 2.750000 0.000000 -2.750000
+ L 11579568 0.241820 4.133180 2.750000 4.133180 -2.750000
+END
diff --git a/app/lib/params/HOn3-MicroEngineering.xtp b/app/lib/params/HOn3-MicroEngineering.xtp
index 5c20175..ce22850 100644
--- a/app/lib/params/HOn3-MicroEngineering.xtp
+++ b/app/lib/params/HOn3-MicroEngineering.xtp
@@ -1,25 +1,25 @@
-CONTENTS Micro Enginnering Track Hon3 Code 70
-TURNOUT HOn3 "Micro Engineering HOn3 Turnout Code 70 #6 LH 15-105"
- U "Regular Turnout" "" "Micro Engineering" "HOn3 Turnout Code 70 #6 LH" "15-105" "HOn3 Turnout Code 70 #6 RH" "15-106" 7.283465 9.594076 0.826772 7.519685 0.000000 0.000000 0
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.000000 0.000000 270.000000
- E 7.519685 0.000000 90.000000
- E 7.283465 0.826772 80.405924
- S 0 0.000000 0.000000 0.000000 0.413300 0.000000
- S 0 0.000000 0.413300 0.000000 7.519685 0.000000
- C 0 0.000000 -23.581633 0.413331 23.581633 170.405848 9.594228
- S 0 0.000000 4.343634 0.329840 7.283465 0.826772
- END
-TURNOUT HOn3 "Micro Engineering HOn3 Turnout Code 70 #6 RH 15-106"
- U "Regular Turnout" "" "Micro Engineering" "HOn3 Turnout Code 70 #6 LH" "15-105" "HOn3 Turnout Code 70 #6 RH" "15-106" 7.283465 9.594076 0.826772 7.519685 0.000000 0.000000 0
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.000000 0.000000 270.000000
- E 7.519685 0.000000 90.000000
- E 7.283465 -0.826772 99.594076
- S 0 0.000000 0.000000 0.000000 0.413300 0.000000
- S 0 0.000000 0.413300 0.000000 7.519685 0.000000
- C 0 0.000000 23.581633 0.413206 -23.581633 0.000076 9.594228
- S 0 0.000000 4.343634 -0.329840 7.283465 -0.826772
- END
+CONTENTS Micro Engineering HOn3 Code 70 Track
+TURNOUT HOn3 "ME Code 70 HOn3 #6 Left-hand Turnout 15-105"
+ U "Regular Turnout" "" "ME HOn3" "#6 Left-hand Turnout" "15-105" "#6 Right-hand Turnout" "15-106" 7.321465 9.527000 0.827807 7.534861 0.000000 0.000000 0
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 7.534861 0.000000 90.000000
+ E 7.321465 0.827807 80.473000
+ S 0 0.000000 0.000000 0.000000 0.413300 0.000000
+ S 0 0.000000 0.413300 0.000000 7.534861 0.000000
+ C 0 0.000000 -23.709371 0.413331 23.709371 170.472924 9.527152
+ S 0 0.000000 4.337553 0.327016 7.321465 0.827807
+ END
+TURNOUT HOn3 "ME Code 70 HOn3 #6 Right-hand Turnout 15-106"
+ U "Regular Turnout" "" "ME HOn3" "#6 Left-hand Turnout" "15-105" "#6 Right-hand Turnout" "15-106" 7.321465 9.527000 0.827807 7.534861 0.000000 0.000000 0
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 7.534861 0.000000 90.000000
+ E 7.321465 -0.827807 99.527000
+ S 0 0.000000 0.000000 0.000000 0.413300 0.000000
+ S 0 0.000000 0.413300 0.000000 7.534861 0.000000
+ C 0 0.000000 23.709371 0.413206 -23.709371 0.000076 9.527152
+ S 0 0.000000 4.337553 -0.327016 7.321465 -0.827807
+ END
diff --git a/app/lib/params/HOn30_Minitrains.xtp b/app/lib/params/HOn30_Minitrains.xtp
index 36d0144..5582df6 100644
--- a/app/lib/params/HOn30_Minitrains.xtp
+++ b/app/lib/params/HOn30_Minitrains.xtp
@@ -1,4 +1,4 @@
-CONTENTS Minitrains HOe - 009 -HOn30 Gleissystem / Track System
+CONTENTS Minitrains HOe 009 HOn30 Gleissystem / Track System
TURNOUT HOn30 "Minitrains Straight Track 2/1 9311"
U "Straight Section" "" "Minitrains" "Straight Track 2/1" "9311" 6.062992 0.000000 0.000000 0
P "Normal" 1
diff --git a/app/lib/params/Hornby Dublo 2 Rail.xtp b/app/lib/params/Hornby Dublo 2 Rail.xtp
index c2e2556..71dc828 100644
--- a/app/lib/params/Hornby Dublo 2 Rail.xtp
+++ b/app/lib/params/Hornby Dublo 2 Rail.xtp
@@ -1,4 +1,4 @@
-CONTENTS 2 Rail Track
+CONTENTS Hornby 2 Rail Track
# Original Andrew Lance
# June 2010
TURNOUT OO "Hornby Dublo straight rail - full 2701"
diff --git a/app/lib/params/Hornby Dublo 3 Rail with Turntable.xtp b/app/lib/params/Hornby Dublo 3 Rail with Turntable.xtp
index 35cdc1e..f0c88c6 100644
--- a/app/lib/params/Hornby Dublo 3 Rail with Turntable.xtp
+++ b/app/lib/params/Hornby Dublo 3 Rail with Turntable.xtp
@@ -1,4 +1,4 @@
-CONTENTS Dublo 3-rail
+CONTENTS Hornby Dublo 3-rail
# Original Courtesy of Nigel L. Rotherham
# Corrected Points & Crossings by Bill Foote 981122
# N.B. Meccano Memo No. 16467 (see Foster page 285)
@@ -342,7 +342,7 @@ TURNOUT OO "Hornby Dublo TPO Apparatus 3475"
L3 0 0.052083 10.109370 0.718750 0 2.609370 0.718770 0
END
TURNOUT OO "Hornby Dublo Turntable 32180"
- P "P0" 2 0 5 9 0 6 0 7 0 8 0 1
+ P "P0" 2 0 5 0 9 0 6 0 7 0 8 0 1 0 3 0 4
E 0.000000 0.000000 270.000000
E 13.568310 -2.696000 112.500000
E 13.967835 -1.379104 101.25000
diff --git a/app/lib/params/Hornby Dublo Signals.xtp b/app/lib/params/Hornby Dublo Signals.xtp
index 07565b1..698e38c 100644
--- a/app/lib/params/Hornby Dublo Signals.xtp
+++ b/app/lib/params/Hornby Dublo Signals.xtp
@@ -1,4 +1,4 @@
-CONTENTS Signals
+CONTENTS Hornby Signals
# Drawn by
# A.Lance 2012
STRUCTURE OO "Hornby Dublo Signal - Manual - Home 5050"
diff --git a/app/lib/params/Hornby Dublo Wood Buildings.xtp b/app/lib/params/Hornby Dublo Wood Buildings.xtp
index c213c36..e44d6fe 100644
--- a/app/lib/params/Hornby Dublo Wood Buildings.xtp
+++ b/app/lib/params/Hornby Dublo Wood Buildings.xtp
@@ -1,4 +1,4 @@
-CONTENTS Pre War Wooden Buildings
+CONTENTS Hornby Pre War Wooden Buildings
# Drawn by
# A.Lance 2012
STRUCTURE OO "Hornby Dublo City Station - Platform Buffers - Double D2"
diff --git a/app/lib/params/HornbyOO.xtp b/app/lib/params/HornbyOO.xtp
deleted file mode 100644
index d492e54..0000000
--- a/app/lib/params/HornbyOO.xtp
+++ /dev/null
@@ -1,221 +0,0 @@
-CONTENTS Hornby Points & Track Sections
-TURNOUT HO "Hornby Straight R.600"
- U "Straight Section" "Open Registration" "Hornby" "Straight" "R.600" 6.614173 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.614173 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 6.614173 0.000000
- END
-TURNOUT HO "Hornby Double Straight R.601"
- U "Straight Section" "Open Registration" "Hornby" "Double Straight" "R.601" 13.188976 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 13.188976 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 13.188976 0.000000
- END
-TURNOUT HO "Hornby Short Straight R.610"
- U "Straight Section" "Open Registration" "Hornby" "Short Straight" "R.610" 1.515600 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.515600 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 1.515600 0.000000
- END
-TURNOUT HO "Hornby Long straight R.603"
- U "Straight Section" "Open Registration" "Hornby" "Long straight" "R.603" 26.377953 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 26.377953 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 26.377953 0.000000
- END
-TURNOUT HO "Hornby 4th Radius Double Curve R8262"
- U "Curved Section" "" "Hornby" "4th Radius Double Curve" "R8262" 22.519685 45.000000 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 15.923811 6.595852 45.000000
- C 0 0.000000 -22.519685 0.000030 22.519685 135.000076 45.000000
- END
-TURNOUT HO "Hornby 4th Radius Single Curve R8261"
- U "Curved Section" "" "Hornby" "4th Radius Single Curve" "R8261" 22.519685 22.500000 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 8.617903 1.714206 67.500000
- C 0 0.000000 -22.519685 0.000030 22.519685 157.500076 22.500000
- END
-TURNOUT HO "Hornby Double Curve 3rd Radius R.609"
- U "Curved Section" "Open Registration" "Hornby" "Double Curve 3rd Radius" "R.609" 19.881890 45.000000 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 14.058610 5.823261 45.000000
- C 0 0.000000 -19.881890 0.000026 19.881890 135.000076 45.000000
- END
-TURNOUT HO "Hornby Curve 3rd Radius R.608"
- U "Curved Section" "Open Registration" "Hornby" "Curve 3rd Radius" "R.608" 19.881890 22.500000 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.608464 1.513416 67.500000
- C 0 0.000000 -19.881890 0.000026 19.881890 157.500076 22.500000
- END
-TURNOUT HO "Hornby Double Curve 2nd Radius R607"
- U "Curved Section" "Open Registration" "Hornby" "Double Curve 2nd Radius" "R607" 17.244094 45.000000 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 12.193408 5.050670 45.000000
- C 0 0.000000 -17.244094 0.000023 17.244094 135.000076 45.000000
- END
-TURNOUT HO "Hornby Curve 2nd Radius R.606"
- U "Curved Section" "Open Registration" "Hornby" "Curve 2nd Radius" "R.606" 17.244094 22.500000 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.599024 1.312626 67.500000
- C 0 0.000000 -17.244094 0.000023 17.244094 157.500076 22.500000
- END
-TURNOUT HO "Hornby 2nd Radius Half Curve R643"
- U "Curved Section" "Open Registration" "Hornby" "2nd Radius Half Curve" "R643" 17.244094 11.250000 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.364153 0.331340 78.750000
- C 0 0.000000 -17.244094 0.000023 17.244094 168.750076 11.250000
- END
-TURNOUT HO "Hornby Double Curve 1st Radius R.605"
- U "Curved Section" "Open Registration" "Hornby" "Double Curve 1st Radius" "R.605" 14.606299 45.000000 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 10.328206 4.278079 45.000000
- C 0 0.000000 -14.606299 0.000019 14.606299 135.000076 45.000000
- END
-TURNOUT HO "Hornby Curve 1st Radius R.604"
- U "Curved Section" "Open Registration" "Hornby" "Curve 1st Radius" "R.604" 14.606299 22.500000 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.589584 1.111836 67.500000
- C 0 0.000000 -14.606299 0.000019 14.606299 157.500076 22.500000
- END
-TURNOUT HO "Hornby Left Hand Point R.8072"
- U "Regular Turnout" "Open Registration" "Hornby" "Left Hand Point" "R.8072" "Right Hand Point" "R.8073" 6.614173 22.500000 1.318898 6.614173 0.000000 0.000000 0
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.000000 0.000000 270.000000
- E 6.614173 0.000000 90.000000
- E 6.614173 1.318898 67.500000
- S 0 0.000000 0.000000 0.000000 0.648600 0.000000
- S 0 0.000000 0.648600 0.000000 6.614173 0.000000
- C 0 0.000000 -13.983514 0.648619 13.983514 157.499924 22.500152
- S 0 0.000000 5.999889 1.064444 6.614173 1.318898
- END
-TURNOUT HO "Hornby Right Hand Point R.8073"
- U "Regular Turnout" "Open Registration" "Hornby" "Left Hand Point" "R.8072" "Right Hand Point" "R.8073" 6.614173 22.500000 1.318898 6.614173 0.000000 0.000000 0
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.000000 0.000000 270.000000
- E 6.614173 0.000000 90.000000
- E 6.614173 -1.318898 112.500000
- S 0 0.000000 0.000000 0.000000 0.648600 0.000000
- S 0 0.000000 0.648600 0.000000 6.614173 0.000000
- C 0 0.000000 13.983514 0.648544 -13.983514 0.000076 22.500152
- S 0 0.000000 5.999889 -1.064444 6.614173 -1.318898
- END
-TURNOUT HO "Hornby Left Hand Express Point R.8077"
- U "Regular Turnout" "Open Registration" "Hornby" "Left Hand Express Point" "R.8077" "Right Hand Express Point" "R.8078" 9.645500 11.250000 1.318898 9.645500 0.000000 0.000000 0
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.000000 0.000000 270.000000
- E 9.645500 0.000000 90.000000
- E 9.645500 1.318898 78.750000
- S 0 0.000000 0.000000 0.000000 0.648600 0.000000
- S 0 0.000000 0.648600 0.000000 9.645500 0.000000
- C 0 0.000000 -27.625934 0.648637 27.625934 168.749924 11.250152
- S 0 0.000000 6.038220 0.530838 9.645500 1.318898
- END
-TURNOUT HO "Hornby Right Hand Express Point R.8078"
- U "Regular Turnout" "Open Registration" "Hornby" "Left Hand Express Point" "R.8077" "Right Hand Express Point" "R.8078" 9.645500 11.250000 1.318898 9.645500 0.000000 0.000000 0
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.000000 0.000000 270.000000
- E 9.645500 0.000000 90.000000
- E 9.645500 -1.318898 101.250000
- S 0 0.000000 0.000000 0.000000 0.648600 0.000000
- S 0 0.000000 0.648600 0.000000 9.645500 0.000000
- C 0 0.000000 27.625934 0.648490 -27.625934 0.000076 11.250152
- S 0 0.000000 6.038220 -0.530838 9.645500 -1.318898
- END
-TURNOUT HO "Hornby Y Point R632"
- U "Wye Turnout" "Open Registration" "Hornby" "Y Point" "R632" 6.614173 11.250000 0.679134 0.679134 11.250000 6.614173 0.000000 0.000000 0
- P "Left" 1 2 3
- P "Right" 1 4 5
- E 0.000000 0.000000 270.000000
- E 6.614173 0.679134 78.750000
- E 6.614173 -0.679134 101.250000
- S 0 0.000000 0.000000 0.000000 0.648600 0.000000
- C 0 0.000000 -25.904606 0.648634 25.904606 168.749924 11.250152
- S 0 0.000000 5.702401 0.497762 6.614173 0.679134
- C 0 0.000000 25.904606 0.648497 -25.904606 0.000076 11.250152
- S 0 0.000000 5.702401 -0.497762 6.614173 -0.679134
- END
-TURNOUT HO "Hornby Curve R.628"
- U "Curved Section" "Open Registration" "Hornby" "Curve" "R.628" 33.543307 11.250000 0.000000 0.000000 0
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.543969 0.644524 78.750000
- C 0 0.000000 -33.543307 0.000045 33.543307 168.750076 11.250000
- END
-TURNOUT HO "Hornby Left Hand Curved Point R.8074"
- U "Curved Turnout" "Open Registration" "Hornby" "Left Hand Curved Point" "R.8074" "Right Hand Curved Point" "R.8075" 9.645669 33.750000 2.637795 22.500000 1.318898 9.251969 0.000000 0.000000 0
- P "Normal" 1 6 4 5
- P "Reverse" 1 2 3
- E 0.000000 0.000000 270.000000
- E 9.251969 1.318898 67.500000
- E 9.645669 2.637795 56.250000
- S 0 0.000000 0.000000 0.000000 1.598662 0.000000
- C 0 0.000000 -13.513549 1.598679 13.513549 146.249924 33.750152
- S 0 0.000000 9.106411 2.277460 9.645669 2.637795
- C 0 0.000000 -14.065585 3.270099 14.065585 157.499924 22.500152
- S 0 0.000000 8.652776 1.070691 9.251969 1.318898
- S 0 0.000000 1.598662 0.000000 3.270080 0.000000
- END
-TURNOUT HO "Hornby Right Hand Curved Point R.8075"
- U "Curved Turnout" "Open Registration" "Hornby" "Left Hand Curved Point" "R.8074" "Right Hand Curved Point" "R.8075" 9.645669 33.750000 2.637795 22.500000 1.318898 9.251969 0.000000 0.000000 0
- P "Normal" 1 6 4 5
- P "Reverse" 1 2 3
- E 0.000000 0.000000 270.000000
- E 9.251969 -1.318898 112.500000
- E 9.645669 -2.637795 123.750000
- S 0 0.000000 0.000000 0.000000 1.598662 0.000000
- C 0 0.000000 13.513549 1.598608 -13.513549 0.000076 33.750152
- S 0 0.000000 9.106411 -2.277460 9.645669 -2.637795
- C 0 0.000000 14.065585 3.270024 -14.065585 0.000076 22.500152
- S 0 0.000000 8.652776 -1.070691 9.251969 -1.318898
- S 0 0.000000 1.598662 0.000000 3.270080 0.000000
- END
-TURNOUT HO "Hornby Left Hand Diamond Crossing R.614"
- U "Crossing" "Open Registration" "Hornby" "Left Hand Diamond Crossing" "R.614" 7.125984 22.500000 6.614173 0.000000 0.000000 0
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.125984 0.000000 90.000000
- E 0.507640 1.265562 292.500000
- E 6.618344 -1.265562 112.500000
- S 0 0.000000 0.000000 0.000000 7.125984 0.000000
- S 0 0.000000 0.507640 1.265562 6.618344 -1.265562
- END
-TURNOUT HO "Hornby Right Hand Diamond Crossing R.615"
- U "Crossing" "Open Registration" "Hornby" "Right Hand Diamond Crossing" "R.615" 6.614173 22.500000 7.125984 0.000000 0.000000 0
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 6.614173 0.000000 90.000000
- E 0.015309 1.363493 292.500000
- E 6.598864 -1.363493 112.500000
- S 0 0.000000 0.000000 0.000000 6.614173 0.000000
- S 0 0.000000 0.015309 1.363493 6.598864 -1.363493
- END
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/lib/params/LifeLike-N.xtp b/app/lib/params/LifeLike-N.xtp
deleted file mode 100644
index 9e74df4..0000000
--- a/app/lib/params/LifeLike-N.xtp
+++ /dev/null
@@ -1,66 +0,0 @@
-CONTENTS LifeLike Power-Loc Track N-Scale
-#Created By Dwyane Ward 09 AUG 2007
-SUBCONTENTS LifeLike Power-Loc N-Scale Straight Track
-TURNOUT N "LifeLike Power-Loc Straight 5.00 433-7802"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.000000 0.000000 90.000000
- S 0 0 0.000000 0.000000 5.000000 0.000000
- L 11579568 0.053333 0.000000 0.500000 5.000000 0.500000
- L 11579568 0.053333 0.000000 -0.500000 5.000000 -0.500000
- END
-TURNOUT N "LifeLike Power-Loc Power Link Adapter Str 2.5 433-7807"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.500000 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.500000 0.000000
- L 11579568 0.053333 0.000000 0.500000 2.500000 0.500000
- L 11579568 0.053333 0.000000 -0.500000 2.500000 -0.500000
- END
-
-SUBCONTENTS LifeLike Power-Loc N-Scale Curved Track
-TURNOUT N "LifeLike Power-Loc Curve 9.75R 30° 433-7803"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.875000 -1.306252 120.000000
- C 0 0 9.750000 0.000000 -9.750000 0.000000 30.000000
- A 11579568 0.053333 9.250000 0.000000 -9.750000 0.000000 30.000000
- A 11579568 0.053333 10.250000 0.000000 -9.750000 0.000000 30.000000
- END
-TURNOUT N "LifeLike Power-Loc Terminal Curve 9.75R 30° 433-7806"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.875000 -1.306252 120.000000
- C 0 0 9.750000 0.000000 -9.750000 0.000000 30.000000
- A 11579568 0.053333 9.250000 0.000000 -9.750000 0.000000 30.000000
- A 11579568 0.053333 10.250000 0.000000 -9.750000 0.000000 30.000000
- A 11579568 0.250000 10.375000 0.000000 -9.750000 12.500000 5.000000
- END
-
-SUBCONTENTS LifeLike Power-Loc N-Scale Turnouts
-TURNOUT N "LifeLike Power-Loc Turnout Left 433-7811"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 5.000000 0.000000 90.000000
- E 4.875000 1.306252 60.000000
- S 0 0 0.000000 0.000000 5.000000 0.000000
- C 0 0 9.750000 0.000000 9.750000 150.000000 30.000000
- L 11579568 0.053333 0.000000 -0.500000 5.000000 -0.500000
- L 11579568 0.053333 4.375000 0.500000 5.000000 0.500000
- A 11579568 0.053333 9.250000 0.000000 9.750000 150.000000 30.000000
- A 11579568 0.053333 10.250000 0.000000 9.750000 150.000000 5.000000
- END
-TURNOUT N "LifeLike Power-Loc Turnout Right 433-7810"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 5.000000 0.000000 90.000000
- E 4.875000 -1.306252 120.000000
- S 0 0 0.000000 0.000000 5.000000 0.000000
- C 0 0 9.750000 0.000000 -9.750000 0.000000 30.000000
- L 11579568 0.053333 0.000000 0.500000 5.000000 0.500000
- L 11579568 0.053333 4.375000 -0.500000 5.000000 -0.500000
- A 11579568 0.053333 9.250000 0.000000 -9.750000 0.000000 30.000000
- A 11579568 0.053333 10.250000 0.000000 -9.750000 25.000000 5.000000
- END
diff --git a/app/lib/params/Lionel-O.xtp b/app/lib/params/Lionel-O.xtp
index f96e167..cfe4c0c 100644
--- a/app/lib/params/Lionel-O.xtp
+++ b/app/lib/params/Lionel-O.xtp
@@ -201,7 +201,7 @@ TURNOUT O "Lionel O Track Remote-COntrol Track 10.0 6-65530"
SUBCONTENTS Lionel O Track - Crossings
TURNOUT O "Lionel O Track 90 Cross 6-65540"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 8.312500 0.000000 90.000000
E 4.156250 4.156250 0.000000
@@ -212,7 +212,7 @@ TURNOUT O "Lionel O Track 90 Cross 6-65540"
L 11579568 0.053333 4.156250 -4.156250 4.156250 4.156250
END
TURNOUT O "Lionel O Track 45 Cross 6-65545"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 11.750000 0.000000 90.000000
E 10.029252 4.154252 45.000000
@@ -221,4 +221,4 @@ TURNOUT O "Lionel O Track 45 Cross 6-65545"
S 0 0 1.720748 -4.154252 10.029252 4.154252
L 11579568 0.053333 0.000000 0.000000 11.750000 0.000000
L 11579568 0.053333 1.720748 -4.154252 10.029252 4.154252
- END \ No newline at end of file
+ END
diff --git a/app/lib/params/Lionel27.xtp b/app/lib/params/Lionel27.xtp
index d170fd4..e99988a 100644
--- a/app/lib/params/Lionel27.xtp
+++ b/app/lib/params/Lionel27.xtp
@@ -81,7 +81,7 @@ TURNOUT O "Lionel O-27 Track 54 Dia Curved Track Section 22.5° 6-65113"
SUBCONTENTS Lionel O-27 Track - Crossings
TURNOUT O "Lionel O-27 Track 90 Cross 6-65020"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 7.375000 0.000000 90.000000
E 3.687500 3.687500 0.000000
@@ -92,7 +92,7 @@ TURNOUT O "Lionel O-27 Track 90 Cross 6-65020"
L 11579568 0.053333 3.687500 -3.687500 3.687500 3.687500
END
TURNOUT O "Lionel O-27 Track 45 Cross 6-65023"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 10.250000 0.000000 90.000000
E 8.748922 3.623922 45.000000
@@ -171,4 +171,4 @@ TURNOUT O "Lionel O-27 Track 42 Right Switch 30° 6-65168"
C 0 0 21.000000 0.000000 -21.000000 0.000000 30.000000
L 11579568 0.053333 0.000000 0.000000 13.625000 -0.000000
A 11579568 0.053333 21.000000 0.000000 -21.000000 0.000000 30.000000
- END \ No newline at end of file
+ END
diff --git a/app/lib/params/N-AtlasTrueTrack.xtp b/app/lib/params/N-AtlasTrueTrack.xtp
index e941e4b..1ed0206 100644
--- a/app/lib/params/N-AtlasTrueTrack.xtp
+++ b/app/lib/params/N-AtlasTrueTrack.xtp
@@ -1,4 +1,4 @@
-CONTENTS Atlas True-Track Code 65 N-Scale
+CONTENTS Atlas True-Track Code 65 N Scale
#Created By Dwyane Ward 03 OCt 2008 Updated 07 MAY 09
SUBCONTENTS Atlas True-Track N-Scale Straight Track
TURNOUT N "Atlas True-Track Straight 10"" 2403"
@@ -35,7 +35,7 @@ TURNOUT N "Atlas True-Track Straight 1"" 2405"
END
SUBCONTENTS Atlas True-Track N-Scale Curved Track
-TURNOUT N "Atlas True-Track Curve 11.00R 22.5 2410"
+TURNOUT N "Atlas True-Track Curve 11.00R 22.5� 2410"
P "Normal" 1
E 0.000000 0.000000 270.000000
E 4.209518 -0.837325 112.500000
@@ -43,7 +43,7 @@ TURNOUT N "Atlas True-Track Curve 11.00R 22.5 2410"
A 11579568 0.053333 10.500000 0.000000 -11.000000 0.000000 22.500000
A 11579568 0.053333 11.500000 0.000000 -11.000000 0.000000 22.500000
END
-TURNOUT N "Atlas True-Track Curve 11.00R 11.25 2411"
+TURNOUT N "Atlas True-Track Curve 11.00R 11.25� 2411"
P "Normal" 1
E 0.000000 0.000000 270.000000
E 2.145994 -0.211362 101.250000
@@ -51,7 +51,7 @@ TURNOUT N "Atlas True-Track Curve 11.00R 11.25 2411"
A 11579568 0.053333 10.500000 0.000000 -11.000000 0.000000 11.250000
A 11579568 0.053333 11.500000 0.000000 -11.000000 0.000000 11.250000
END
-TURNOUT N "Atlas True-Track Curve 12.50R 22.5 2412"
+TURNOUT N "Atlas True-Track Curve 12.50R 22.5� 2412"
P "Normal" 1
E 0.000000 0.000000 270.000000
E 4.783543 -0.951506 112.500000
@@ -59,7 +59,7 @@ TURNOUT N "Atlas True-Track Curve 12.50R 22.5 2412"
A 11579568 0.053333 12.000000 0.000000 -12.500000 0.000000 22.500000
A 11579568 0.053333 13.000000 0.000000 -12.500000 0.000000 22.500000
END
-TURNOUT N "Atlas True-Track Curve 12.50R 11.25 2413"
+TURNOUT N "Atlas True-Track Curve 12.50R 11.25� 2413"
P "Normal" 1
E 0.000000 0.000000 270.000000
E 2.438629 -0.240184 101.250000
@@ -67,7 +67,7 @@ TURNOUT N "Atlas True-Track Curve 12.50R 11.25 2413"
A 11579568 0.053333 12.000000 0.000000 -12.500000 0.000000 11.250000
A 11579568 0.053333 13.000000 0.000000 -12.500000 0.000000 11.250000
END
-TURNOUT N "Atlas True-Track Curve 14.00R 22.5 2414"
+TURNOUT N "Atlas True-Track Curve 14.00R 22.5� 2414"
P "Normal" 1
E 0.000000 0.000000 270.000000
E 5.357568 -1.065687 112.500000
@@ -75,7 +75,7 @@ TURNOUT N "Atlas True-Track Curve 14.00R 22.5 2414"
A 11579568 0.053333 13.500000 0.000000 -14.000000 0.000000 22.500000
A 11579568 0.053333 14.500000 0.000000 -14.000000 0.000000 22.500000
END
-TURNOUT N "Atlas True-Track Curve 15.50R 22.5 2416"
+TURNOUT N "Atlas True-Track Curve 15.50R 22.5� 2416"
P "Normal" 1
E 0.000000 0.000000 270.000000
E 5.931593 -1.179867 112.500000
@@ -83,7 +83,7 @@ TURNOUT N "Atlas True-Track Curve 15.50R 22.5 2416"
A 11579568 0.053333 15.000000 0.000000 -15.500000 0.000000 22.500000
A 11579568 0.053333 16.000000 0.000000 -15.500000 0.000000 22.500000
END
-TURNOUT N "Atlas True-Track Curve 17.00R 22.5 2495"
+TURNOUT N "Atlas True-Track Curve 17.00R 22.5� 2495"
P "Normal" 1
E 0.000000 0.000000 270.000000
E 6.505618 -1.294048 112.500000
@@ -93,7 +93,7 @@ TURNOUT N "Atlas True-Track Curve 17.00R 22.5 2495"
END
SUBCONTENTS Atlas True-Track N-Scale Crossings
-TURNOUT N "Atlas True-Track 90 Crossing 2420"
+TURNOUT N "Atlas True-Track 90� Crossing 2420"
P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 2.000000 0.000000 90.000000
@@ -167,9 +167,9 @@ TURNOUT N "Atlas True-Track Terminal Track 6"" 2406"
L 0 0.035000 3.500000 1.000000 3.500000 0.500000
L 0 0.035000 2.500000 0.500000 3.500000 0.500000
L 0 0.035000 2.500000 0.500000 2.750000 0.750000
- L 0 0.035000 2.750000 0.750000 2.500000 1.000000
- L 0 0.035000 2.750000 0.750000 3.250000 0.750000
- L 0 0.035000 3.250000 0.750000 3.500000 1.000000
+ L 0 0.035000 2.750000 0.750000 2.500000 1.000000
+ L 0 0.035000 2.750000 0.750000 3.250000 0.750000
+ L 0 0.035000 3.250000 0.750000 3.500000 1.000000
L 0 0.035000 3.250000 0.750000 3.500000 0.500000
END
TURNOUT N "Atlas True-Track Code 80 Transition Track 2590"
@@ -278,4 +278,4 @@ TURNOUT N "Atlas True-Track Bevel Track for #5 Turnout Right 2498R"
S 0 0 0.000000 0.000000 2.000000 0.000000
L 11579568 0.053333 0.000000 0.500000 2.000000 0.500000
L 11579568 0.053333 1.000000 -0.500000 2.000000 -0.500000
-END \ No newline at end of file
+END
diff --git a/app/lib/params/N-Bonus Generic Industrial Structures.xtp b/app/lib/params/N-Bonus Generic Industrial Structures.xtp
index b8e114a..5289af6 100644
--- a/app/lib/params/N-Bonus Generic Industrial Structures.xtp
+++ b/app/lib/params/N-Bonus Generic Industrial Structures.xtp
@@ -193,7 +193,7 @@ STRUCTURE N "Bonus Industrial G GIS07"
L 0 0.000000 7.500000 3.000000 7.500000 2.750000
END
STRUCTURE N "Bonus Industrial H GIS08"
- F 13066516 0.000000 8
+ F 13066516 0.000000 9
0.000000 0.000000
9.500000 0.000000
9.500000 5.600000
@@ -202,7 +202,6 @@ STRUCTURE N "Bonus Industrial H GIS08"
2.250000 4.000000
2.250000 2.800000
0.000000 2.800000
- 0.000000 0.000000
L 0 0.075000 2.250000 0.000000 9.500000 0.000000
L 0 0.075000 9.500000 0.000000 9.500000 4.000000
L 0 0.075000 9.500000 4.000000 2.250000 4.000000
diff --git a/app/lib/params/N-CentralValley Bridges.xtp b/app/lib/params/N-CentralValley Bridges.xtp
new file mode 100644
index 0000000..65ad52d
--- /dev/null
+++ b/app/lib/params/N-CentralValley Bridges.xtp
@@ -0,0 +1,123 @@
+CONTENTS Central Valley N Scale
+SUBCONTENTS Central Valley N Scale - Bridges
+TURNOUT N "Central Valley 150' Truss Bridge 11 15/32in 1810"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 11.468750 0.000000 90.000000
+ S 0 0 0.000000 0.000000 11.468750 0.000000
+ L 10223889 0.075000 0.037500 0.750000 0.037500 -0.750000
+ L 10223889 0.075000 11.431250 0.750000 11.431250 -0.750000
+ L 10223889 0.075000 0.000000 0.750000 11.468750 0.750000
+ L 10223889 0.075000 0.000000 -0.750000 11.468750 -0.750000
+ L 10223889 0.053333 1.639271 -0.750000 1.639271 0.750000
+ L 10223889 0.053333 1.639271 0.750000 1.911458 0.250000
+ L 10223889 0.053333 1.911458 0.750000 1.639271 0.250000
+ L 10223889 0.053333 1.639271 0.250000 1.911458 -0.250000
+ L 10223889 0.053333 1.911458 0.250000 1.639271 -0.250000
+ L 10223889 0.053333 1.639271 -0.250000 1.911458 -0.750000
+ L 10223889 0.053333 1.911458 -0.250000 1.639271 -0.750000
+ L 10223889 0.053333 1.911458 -0.750000 1.911458 0.750000
+ L 10223889 0.053333 1.911458 -0.750000 3.822917 0.750000
+ L 10223889 0.053333 3.822917 -0.750000 1.911458 0.750000
+ L 10223889 0.053333 3.822917 -0.750000 3.822917 0.750000
+ L 10223889 0.053333 3.822917 -0.750000 5.734375 0.750000
+ L 10223889 0.053333 5.734375 -0.750000 3.822917 0.750000
+ L 10223889 0.053333 5.734375 -0.750000 5.734375 0.750000
+ L 10223889 0.053333 5.734375 -0.750000 7.645833 0.750000
+ L 10223889 0.053333 7.645833 -0.750000 5.734375 0.750000
+ L 10223889 0.053333 7.645833 -0.750000 7.645833 0.750000
+ L 10223889 0.053333 7.645833 -0.750000 9.557292 0.750000
+ L 10223889 0.053333 9.557292 -0.750000 7.645833 0.750000
+ L 10223889 0.053333 9.557292 -0.750000 9.557292 0.750000
+ L 10223889 0.053333 9.557292 0.750000 9.829480 0.250000
+ L 10223889 0.053333 9.829480 0.750000 9.557292 0.250000
+ L 10223889 0.053333 9.557292 0.250000 9.829480 -0.250000
+ L 10223889 0.053333 9.829480 0.250000 9.557292 -0.250000
+ L 10223889 0.053333 9.557292 -0.250000 9.829480 -0.750000
+ L 10223889 0.053333 9.829480 -0.250000 9.557292 -0.750000
+ L 10223889 0.053333 9.829480 -0.750000 9.829480 0.750000
+END
+TURNOUT N "Central Valley 150' Truss (Modern) Bridge 11 15/32in 1815"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 11.468750 0.000000 90.000000
+ S 0 0 0.000000 0.000000 11.468750 0.000000
+ L 10223889 0.075000 0.037500 0.750000 0.037500 -0.750000
+ L 10223889 0.075000 11.431250 0.750000 11.431250 -0.750000
+ L 10223889 0.075000 0.000000 0.750000 11.468750 0.750000
+ L 10223889 0.075000 0.000000 -0.750000 11.468750 -0.750000
+ F4 10223889 0.000000 3 1
+ 1.775364 0.477812 0
+ 1.775364 0.750000 0
+ 1.503176 0.750000 0
+ F4 10223889 0.000000 3 1
+ 1.775364 -0.477812 0
+ 1.775364 -0.750000 0
+ 1.503176 -0.750000 0
+ L 10223889 0.136094 1.843411 -0.750000 1.843411 0.750000
+ L 10223889 0.053333 1.911458 -0.750000 1.911458 0.750000
+ L 10223889 0.053333 1.911458 -0.750000 3.822917 0.750000
+ L 10223889 0.053333 3.822917 -0.750000 1.911458 0.750000
+ L 10223889 0.053333 3.822917 -0.750000 3.822917 0.750000
+ L 10223889 0.053333 3.822917 -0.750000 5.734375 0.750000
+ L 10223889 0.053333 5.734375 -0.750000 3.822917 0.750000
+ L 10223889 0.053333 5.734375 -0.750000 5.734375 0.750000
+ L 10223889 0.053333 5.734375 -0.750000 7.645833 0.750000
+ L 10223889 0.053333 7.645833 -0.750000 5.734375 0.750000
+ L 10223889 0.053333 7.645833 -0.750000 7.645833 0.750000
+ L 10223889 0.053333 7.645833 -0.750000 9.557292 0.750000
+ L 10223889 0.053333 9.557292 -0.750000 7.645833 0.750000
+ L 10223889 0.053333 9.557292 -0.750000 9.557292 0.750000
+ L 10223889 0.136094 9.625339 -0.750000 9.625339 0.750000
+ F4 10223889 0.000000 3 1
+ 9.693386 0.477812 0
+ 9.693386 0.750000 0
+ 9.965574 0.750000 0
+ F4 10223889 0.000000 3 1
+ 9.693386 -0.477812 0
+ 9.693386 -0.750000 0
+ 9.965574 -0.750000 0
+END
+TURNOUT N "Central Valley 150' Truss Bridge (Modern w/Walkway) 11 15/32in 1820"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 11.468750 0.000000 90.000000
+ S 0 0 0.000000 0.000000 11.468750 0.000000
+ L 10223889 0.075000 0.037500 0.750000 0.037500 -0.750000
+ L 10223889 0.075000 11.431250 0.750000 11.431250 -0.750000
+ L 8421504 0.300000 0.000000 0.556250 11.468750 0.556250
+ L 8421504 0.300000 0.000000 -0.556250 11.468750 -0.556250
+ L 10223889 0.075000 0.000000 0.750000 11.468750 0.750000
+ L 10223889 0.075000 0.000000 -0.750000 11.468750 -0.750000
+ F4 10223889 0.000000 3 1
+ 1.775364 0.477812 0
+ 1.775364 0.750000 0
+ 1.503176 0.750000 0
+ F4 10223889 0.000000 3 1
+ 1.775364 -0.477812 0
+ 1.775364 -0.750000 0
+ 1.503176 -0.750000 0
+ L 10223889 0.136094 1.843411 -0.750000 1.843411 0.750000
+ L 10223889 0.053333 1.911458 -0.750000 1.911458 0.750000
+ L 10223889 0.053333 1.911458 -0.750000 3.822917 0.750000
+ L 10223889 0.053333 3.822917 -0.750000 1.911458 0.750000
+ L 10223889 0.053333 3.822917 -0.750000 3.822917 0.750000
+ L 10223889 0.053333 3.822917 -0.750000 5.734375 0.750000
+ L 10223889 0.053333 5.734375 -0.750000 3.822917 0.750000
+ L 10223889 0.053333 5.734375 -0.750000 5.734375 0.750000
+ L 10223889 0.053333 5.734375 -0.750000 7.645833 0.750000
+ L 10223889 0.053333 7.645833 -0.750000 5.734375 0.750000
+ L 10223889 0.053333 7.645833 -0.750000 7.645833 0.750000
+ L 10223889 0.053333 7.645833 -0.750000 9.557292 0.750000
+ L 10223889 0.053333 9.557292 -0.750000 7.645833 0.750000
+ L 10223889 0.053333 9.557292 -0.750000 9.557292 0.750000
+ L 10223889 0.136094 9.625339 -0.750000 9.625339 0.750000
+ F4 10223889 0.000000 3 1
+ 9.693386 0.477812 0
+ 9.693386 0.750000 0
+ 9.965574 0.750000 0
+ F4 10223889 0.000000 3 1
+ 9.693386 -0.477812 0
+ 9.693386 -0.750000 0
+ 9.965574 -0.750000 0
+END
diff --git a/app/lib/params/N-kato.xtp b/app/lib/params/N-Kato Track and Structures.xtp
index 6982dd0..eaa1b59 100644
--- a/app/lib/params/N-kato.xtp
+++ b/app/lib/params/N-Kato Track and Structures.xtp
@@ -1,1704 +1,1741 @@
-CONTENTS Kato Unitrack N-Scale
-#
-#
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Straight Track
-TURNOUT N "Kato Unitrack Straight 9.75 248mm 20-000"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.763779 0.000000 90.000000
- S 0 0 0.000000 0.000000 9.763779 0.000000
- L 11579568 0.053333 0.000000 0.492126 9.763779 0.492126
- L 11579568 0.053333 0.000000 -0.492126 9.763779 -0.492126
- END
-TURNOUT N "Kato Unitrack Straight 7 5/16 186mm 20-010"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- L 11579568 0.053333 0.000000 0.492126 7.322834 0.492126
- L 11579568 0.053333 0.000000 -0.492126 7.322834 -0.492126
- END
-TURNOUT N "Kato Unitrack Straight 4 7/8 124mm 20-020"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- L 11579568 0.053333 0.000000 0.492126 4.881889 0.492126
- L 11579568 0.053333 0.000000 -0.492126 4.881889 -0.492126
- END
-TURNOUT N "Kato Unitrack Straight 2 1/2 64mm 20-030"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.519685 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.519685 0.000000
- L 11579568 0.053333 0.000000 0.492126 2.519685 0.492126
- L 11579568 0.053333 0.000000 -0.492126 2.519685 -0.492126
- END
-TURNOUT N "Kato Unitrack Straight 2 7/16 62mm 20-040"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.440944 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.440944 0.000000
- L 11579568 0.053333 0.000000 0.492126 2.440944 0.492126
- L 11579568 0.053333 0.000000 -0.492126 2.440944 -0.492126
- END
-TURNOUT N "Kato Unitrack Straight 1 3/4 45-5mm 20-091A"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.791339 0.000000 90.000000
- S 0 0 0.000000 0.000000 1.791339 0.000000
- L 11579568 0.053333 0.000000 0.492126 1.791339 0.492126
- L 11579568 0.053333 0.000000 -0.492126 1.791339 -0.492126
- END
-TURNOUT N "Kato Unitrack Straight 1 1/8 29mm 20-091B"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.141732 0.000000 90.000000
- S 0 0 0.000000 0.000000 1.141732 0.000000
- L 11579568 0.053333 0.000000 0.492126 1.141732 0.492126
- L 11579568 0.053333 0.000000 -0.492126 1.141732 -0.492126
- END
-TURNOUT N "Kato Unitrack Straight 1 19/64 33mm 20-092A"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.299213 0.000000 90.000000
- S 0 0 0.000000 0.000000 1.299213 0.000000
- L 11579568 0.053333 0.000000 0.492126 1.299213 0.492126
- L 11579568 0.053333 0.000000 -0.492126 1.299213 -0.492126
- END
-TURNOUT N "Kato Unitrack Straight 1 1/2 38mm 20-092B"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.496063 0.000000 90.000000
- S 0 0 0.000000 0.000000 1.496063 0.000000
- L 11579568 0.053333 0.000000 0.492126 1.496063 0.492126
- L 11579568 0.053333 0.000000 -0.492126 1.496063 -0.492126
- END
-TURNOUT N "Kato Unitrack Road Crossing 124mm 20-021"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 4.881889 0.000000
- L 11579568 0.053333 0.000000 0.4921260 4.881889 0.4921260
- L 11579568 0.053333 0.000000 -0.4921260 4.881889 -0.4921260
- L 0 0.053333 0.500000 0.548560 4.375000 0.548560
- L 0 0.053333 4.375000 0.548560 4.375000 -0.576440
- L 0 0.053333 4.375000 -0.576440 0.500000 -0.576440
- L 0 0.053333 0.500000 -0.576440 0.500000 0.548560
- L 0 0.053333 1.466667 0.133560 1.000000 -0.013107
- L 0 0.053333 1.440000 -0.133107 1.000000 -0.026440
- L 0 0.053333 1.440000 0.120227 3.320000 0.120227
- L 0 0.053333 1.453333 -0.133107 3.306667 -0.119773
- L 0 0.053333 3.306667 0.120227 3.626667 0.000227
- L 0 0.053333 3.293333 -0.119773 3.600000 0.000227
- END
-TURNOUT N "Kato Unitrack Mag Uncoupler 64mm 20-032"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.519685 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 2.519685 0.000000
- L 11579568 0.053333 0.000000 0.4921260 2.519685 0.4921260
- L 11579568 0.053333 0.000000 -0.4921260 2.519685 -0.4921260
- L 0 0.053333 0.253333 0.133560 2.280000 0.133560
- L 0 0.053333 2.280000 0.133560 2.280000 -0.146440
- L 0 0.053333 2.280000 -0.146440 0.253333 -0.146440
- L 0 0.053333 0.253333 -0.146440 0.253333 0.133560
- END
-TURNOUT N "Kato Unitrack Feeder Track 62mm 20-041"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.440944 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.440944 0.000000
- L 11579568 0.053333 0.000000 0.492126 2.440944 0.492126
- L 11579568 0.053333 0.000000 -0.492126 2.440944 -0.492126
- L 0 0.026667 2.000000 -0.498874 2.000000 -0.698874
- L 0 0.026667 2.000000 -0.698874 2.100000 -0.798874
- L 0 0.026667 2.000000 -0.698874 1.900000 -0.798874
- L 16711680 0.026667 1.800000 -0.498874 1.800000 -0.698874
- L 16711680 0.026667 1.800000 -0.698874 1.900000 -0.798874
- L 16711680 0.026667 1.800000 -0.698874 1.700000 -0.798874
- END
-TURNOUT N "Kato Unitrack Snap Tk. Conv. Tk. 62mm 20-045"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.440944 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.440944 0.000000
- L 11579568 0.053333 0.000000 0.492126 2.440944 0.492126
- L 11579568 0.053333 0.000000 -0.492126 2.440944 -0.492126
- END
-TURNOUT N "Kato Unitrack 78-108mm Adjustable 20-050"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.070866 0.000000 90.000000
- X adjustable 3.070866 4.251968
- S 0 0 0.000000 0.000000 3.070866 0.000000
- L 11579568 0.053333 0.000000 0.492126 3.070866 0.492126
- L 11579568 0.053333 0.000000 -0.492126 3.070866 -0.492126
- END
-TURNOUT N "Kato Unitrack 3-Color Signal 4 7/8 124mm 20-605-1"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- L 11579568 0.053333 0.000000 0.492126 4.881889 0.492126
- L 11579568 0.053333 0.000000 -0.492126 4.881889 -0.492126
- F 11579568 0.000000 4
- 1.948819 0.492126 0
- 1.948819 0.992126 0
- 2.948819 0.992126 0
- 2.948819 0.492126 0
- G 0 0.053333 0.100000 2.448819 0.742126 0
- END
-TURNOUT N "Kato Unitrack Ash Pit Track 7 5/16 186mm 20-015"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- L 11579568 0.053333 0.000000 0.492126 7.322834 0.492126
- L 11579568 0.053333 0.000000 -0.492126 7.322834 -0.492126
- F 11579568 0.000000 4
- 0.500000 0.150000 0
- 6.822834 0.150000 0
- 6.822834 -0.150000 0
- 0.500000 -0.150000 0
- END
-TURNOUT N "Kato Unitrack Open Pit Track 7 5/16 186mm 20-016"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- L 11579568 0.053333 0.000000 0.492126 7.322834 0.492126
- L 11579568 0.053333 0.000000 -0.492126 7.322834 -0.492126
- F 11579568 0.000000 4
- 0.500000 0.150000 0
- 6.822834 0.150000 0
- 6.822834 -0.150000 0
- 0.500000 -0.150000 0
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Curved Track
-TURNOUT N "Kato Unitrack Curve 4.625R 117mm 45° 20-176"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.257145 -1.349154 135.000000
- C 0 0 4.606299 0.000000 -4.606299 0.000000 45.000000
- A 11579568 0.053333 4.114173 0.000000 -4.606299 0.000000 45.000000
- A 11579568 0.053333 5.098425 0.000000 -4.606299 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Curve 5.905R 150mm 45° 20-174"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.175827 -1.729684 135.000000
- C 0 0 5.905512 0.000000 -5.905512 0.000000 45.000000
- A 11579568 0.053333 5.413386 0.000000 -5.905512 0.000000 45.000000
- A 11579568 0.053333 6.397638 0.000000 -5.905512 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Curve 7.204R 183mm 45° 20-172"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.094509 -2.110215 135.000000
- C 0 0 7.204724 0.000000 -7.204724 0.000000 45.000000
- A 11579568 0.053333 6.712598 0.000000 -7.204724 0.000000 45.000000
- A 11579568 0.053333 7.696850 0.000000 -7.204724 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Curve 8.56R 216mm 45° 20-170"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.013192 -2.490745 135.000000
- C 0 0 8.503937 0.000000 -8.503937 0.000000 45.000000
- A 11579568 0.053333 8.011811 0.000000 -8.503937 0.000000 45.000000
- A 11579568 0.053333 8.996063 0.000000 -8.503937 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Curve 8.56R 216mm 15° 20-171"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.200981 -0.289765 105.000000
- C 0 0 8.503937 0.000000 -8.503937 0.000000 15.000000
- A 11579568 0.053333 8.011811 0.000000 -8.503937 0.000000 15.000000
- A 11579568 0.053333 8.996063 0.000000 -8.503937 0.000000 15.000000
- END
-TURNOUT N "Kato Unitrack Curve 9.75R 249mm 45° 20-100"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.931874 -2.871276 135.000000
- C 0 0 9.803150 0.000000 -9.803150 0.000000 45.000000
- A 11579568 0.053333 9.311024 0.000000 -9.803150 0.000000 45.000000
- A 11579568 0.053333 10.295276 0.000000 -9.803150 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Curve 9.75R 249mm 15° 20-101"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.537242 -0.334034 105.000000
- C 0 0 9.803150 0.000000 -9.803150 0.000000 15.000000
- A 11579568 0.053333 9.311024 0.000000 -9.803150 0.000000 15.000000
- A 11579568 0.053333 10.295276 0.000000 -9.803150 0.000000 15.000000
- END
-TURNOUT N "Kato Unitrack Curve 11R 282mm 45° 20-110"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.850556 -3.251807 135.000000
- C 0 0 11.102362 0.000000 -11.102362 0.000000 45.000000
- A 11579568 0.053333 10.610236 0.000000 -11.102362 0.000000 45.000000
- A 11579568 0.053333 11.594488 0.000000 -11.102362 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Curve 11R 282mm 15° 20-111"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.873503 -0.378304 105.000000
- C 0 0 11.102362 0.000000 -11.102362 0.000000 15.000000
- A 11579568 0.053333 10.610236 0.000000 -11.102362 0.000000 15.000000
- A 11579568 0.053333 11.594488 0.000000 -11.102362 0.000000 15.000000
- END
-TURNOUT N "Kato Unitrack Curve 12.375R 315mm 45° 20-120"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 8.769238 -3.632337 135.000000
- C 0 0 12.401575 0.000000 -12.401575 0.000000 45.000000
- A 11579568 0.053333 11.909449 0.000000 -12.401575 0.000000 45.000000
- A 11579568 0.053333 12.893701 0.000000 -12.401575 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Curve 12.375R 315mm 15° 20-121"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.209764 -0.422573 105.000000
- C 0 0 12.401575 0.000000 -12.401575 0.000000 15.000000
- A 11579568 0.053333 11.909449 0.000000 -12.401575 0.000000 15.000000
- A 11579568 0.053333 12.893701 0.000000 -12.401575 0.000000 15.000000
- END
-TURNOUT N "Kato Unitrack Curve 13.75R 348mm 30° 20-130"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.850394 -1.835557 120.000000
- C 0 0 13.700787 0.000000 -13.700787 0.000000 30.000000
- A 11579568 0.053333 13.208661 0.000000 -13.700787 0.000000 30.000000
- A 11579568 0.053333 14.192913 0.000000 -13.700787 0.000000 30.000000
- END
-TURNOUT N "Kato Unitrack Curve 13.75R 348mm 45° 20-132"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.687920 -4.012868 135.000000
- C 0 0 13.700787 0.000000 -13.700787 0.000000 45.000000
- A 11579568 0.053333 13.208661 0.000000 -13.700787 0.000000 45.000000
- A 11579568 0.053333 14.192913 0.000000 -13.700787 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Curve 15R 381mm 30° 20-140"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.500000 -2.009619 120.000000
- C 0 0 15.000000 0.000000 -15.000000 0.000000 30.000000
- A 11579568 0.053333 14.507874 0.000000 -15.000000 0.000000 30.000000
- A 11579568 0.053333 15.492126 0.000000 -15.000000 0.000000 30.000000
- END
-TURNOUT N "Kato Unitrack Curve 19R 481mm 15° 20-160"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.901258 -0.645263 105.000000
- C 0 0 18.937008 -0.000000 -18.937008 0.000000 15.000000
- A 11579568 0.053333 18.444882 -0.000000 -18.937008 0.000000 15.000000
- A 11579568 0.053333 19.429134 -0.000000 -18.937008 0.000000 15.000000
- END
-TURNOUT N "Kato Unitrack Curve 28.25R 718mm 15° 20-150"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.316223 -0.963199 105.000000
- C 0 0 28.267717 0.003000 -28.267717 0.000000 15.000000
- A 11579568 0.053333 27.775591 0.000000 -28.267717 0.000000 15.000000
- A 11579568 0.053333 28.759843 0.000000 -28.267717 0.000000 15.000000
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Bumper Track
-TURNOUT N "Kato Unitrack Bumper A 2 1/2 64mm 20-033"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0.000000 0.000000 0.000000 2.440944 0.000000
- L 11579568 0.053333 0.000000 0.492126 3.740157 0.492126
- L 11579568 0.053333 0.000000 -0.492126 3.740157 -0.492126
- L 11579568 0.053333 3.740157 0.492126 3.740157 -0.492126
- L 10824234 0.053333 2.520000 0.320227 3.186667 0.320227
- L 10824234 0.053333 3.186667 0.320227 3.186667 -0.346440
- L 10824234 0.053333 3.186667 -0.346440 2.520000 -0.346440
- L 10824234 0.053333 2.520000 -0.346440 2.520000 0.320227
- L 0 0.053333 2.720000 0.080227 2.866667 0.080227
- L 0 0.053333 2.866667 0.080227 2.866667 -0.106440
- L 0 0.053333 2.866667 -0.106440 2.720000 -0.106440
- L 0 0.053333 2.720000 -0.106440 2.720000 0.080227
- END
-TURNOUT N "Kato Unitrack Bumper B 2 1/2 64mm 20-034"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0.000000 0.000000 0.000000 2.440944 0.000000
- L 11579568 0.053333 0.000000 0.492126 3.740157 0.492126
- L 11579568 0.053333 0.000000 -0.492126 3.740157 -0.492126
- L 11579568 0.053333 3.740157 0.492126 3.740157 -0.492126
- L 0 0.053333 2.720000 0.080227 2.866667 0.080227
- L 0 0.053333 2.866667 0.080227 2.866667 -0.106440
- L 0 0.053333 2.866667 -0.106440 2.720000 -0.106440
- L 0 0.053333 2.720000 -0.106440 2.720000 0.080227
- L 9127187 0.053333 2.520000 0.306893 3.226667 0.306893
- L 9127187 0.053333 3.226667 -0.333107 2.520000 -0.333107
- L 9127187 0.053333 2.520000 -0.333107 2.520000 0.306893
- L 11579568 0.053333 2.573333 0.253560 3.186667 0.253560
- L 11579568 0.053333 3.186667 0.253560 3.186667 -0.293107
- L 11579568 0.053333 3.186667 -0.293107 2.573333 -0.293107
- L 11579568 0.053333 2.573333 -0.293107 2.573333 0.253560
- END
-TURNOUT N "Kato Unitrack Bumper C 2 20-035"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0.000000 0.000000 0.000000 1.338583 0.000000
- L 11579568 0.053333 0.000000 0.492126 1.968504 0.492126
- L 11579568 0.053333 0.000000 -0.492126 1.968504 -0.492126
- L 11579568 0.053333 1.968504 0.492126 1.968504 -0.492126
- L 0 0.053333 1.026667 0.080227 1.200000 0.080227
- L 0 0.053333 1.200000 0.080227 1.200000 -0.093107
- L 0 0.053333 1.200000 -0.093107 1.026667 -0.093107
- L 0 0.053333 1.026667 -0.093107 1.026667 0.080227
- L 0 0.053333 0.800000 0.080227 0.800000 -0.093107
- L 0 0.040000 0.826667 -0.066440 1.146667 -0.453107
- L 0 0.040000 0.826667 0.066893 1.160000 0.440227
- L 0 0.040000 0.826667 -0.093107 0.573333 -0.453107
- L 0 0.040000 0.840000 0.080227 0.586667 0.440227
- L 0 0.053333 0.746667 -0.106440 0.746667 0.106893
-END
-TURNOUT N "Kato Unitrack Bollard Bumper D 35mm 20-060"
-#new item
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- L 11579568 0.053333 0.000000 0.492126 1.377953 0.492126
- L 11579568 0.053333 0.000000 -0.492126 1.377953 -0.492126
- L 11579568 0.053333 1.377953 0.492126 1.377953 -0.492126
- L 0 0.053333 0.000000 0.350000 0.000000 -0.350000
- L 0 0.053333 0.000000 0.350000 0.450000 0.350000
- L 0 0.053333 0.000000 -0.350000 0.450000 -0.350000
- L 0 0.053333 0.320000 0.080227 0.466667 0.080227
- L 0 0.053333 0.466667 0.080227 0.466667 -0.106440
- L 0 0.053333 0.466667 -0.106440 0.320000 -0.106440
- L 0 0.053333 0.320000 -0.106440 0.320000 0.080227
-END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Turnouts
-TURNOUT N "Kato Unitrack Turnout 150-R 20-240"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- E 4.175827 -1.729684 135.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- C 0 0 5.905512 0.000000 -5.905512 0.000000 45.000000
- L 11579568 0.053333 0.000000 0.492126 4.881889 0.492126
- L 11579568 0.053333 3.380000 -0.492126 4.881889 -0.492126
- A 11579568 0.053333 5.413386 0.000000 -5.905512 0.000000 45.000000
- A 11579568 0.053333 6.397638 0.000000 -5.905512 32.500000 12.500000
- END
-TURNOUT N "Kato Unitrack Turnout 150-L 20-241"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- E 4.175827 1.729684 45.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- C 0 0 5.905512 0.000000 5.905512 135.000000 45.000000
- L 11579568 0.053333 0.000000 -0.492126 4.881889 -0.492126
- L 11579568 0.053333 3.380000 0.492126 4.881889 0.492126
- A 11579568 0.053333 5.413386 0.000000 5.905512 135.000000 45.000000
- A 11579568 0.053333 6.397638 0.000000 5.905512 135.000000 12.500000
- END
-TURNOUT N "Kato Unitrack Turnout 4-L 20-220"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 4.960629 0.000000 90.000000
- E 4.881889 0.642713 75.000000
- S 0 0 0.000000 0.000000 4.960629 0.000000
- C 0 0 -18.862000 0.000000 18.862000 165.000000 15.000000
- L 11579568 0.053333 0.000000 -0.492126 4.960629 -0.492126
- A 11579568 0.053333 -18.369874 0.000000 18.862000 165.000000 15.000000
- END
-TURNOUT N "Kato Unitrack S60L {incl w/4} "
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.362204 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.362204 0.000000
- L 11579568 0.053333 0.000000 0.492126 2.362204 0.492126
- L 11579568 0.053333 0.000000 -0.492126 2.362204 -0.492126
- END
-TURNOUT N "Kato Unitrack Turnout 4-R 20-221"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 4.960629 0.000000 90.000000
- E 4.881889 -0.642713 105.000000
- S 0 0 0.000000 0.000000 4.960629 0.000000
- C 0 0 18.862000 0.000000 -18.862000 0.000000 15.000000
- L 11579568 0.053333 0.000000 0.492126 4.960629 0.492126
- A 11579568 0.053333 18.369874 0.000000 -18.862000 0.000000 15.000000
- END
-TURNOUT N "Kato Unitrack S60R {incl w/4} "
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.362204 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.362204 0.000000
- L 11579568 0.053333 0.000000 0.492126 2.362204 0.492126
- L 11579568 0.053333 0.000000 -0.492126 2.362204 -0.492126
- END
-TURNOUT N "Kato Unitrack Turnout 2-WYE 20-222"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 4.881889 0.642713 75.000000
- E 4.881889 -0.642713 105.000000
- C 0 0 -18.862000 0.000000 18.862000 165.000000 15.000000
- C 0 0 18.862000 0.000000 -18.862000 0.000000 15.000000
- A 11579568 0.053333 -18.416226 0.000000 18.862000 165.000000 15.000000
- A 11579568 0.053333 18.416226 0.000000 -18.862000 0.000000 15.000000
- L 11579568 0.053333 5.000000 0.200000 5.000000 -0.200000
- END
-TURNOUT N "Kato Unitrack Turnout 6-L 20-202"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- E 7.322834 0.964069 75.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- C 0 0 -28.268000 0.000000 28.268000 165.0000000 15.000000
- L 11579568 0.053333 0.000000 -0.492126 7.322834 -0.492126
- A 11579568 0.053333 27.775874 0.000000 28.268000 165.000000 15.000000
- END
-TURNOUT N "Kato Unitrack Turnout 6-R 20-203"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- E 7.322834 -0.964069 105.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- C 0 0 28.268000 0.000000 -28.268000 0.000000 15.000000
- L 11579568 0.053333 0.000000 0.492126 7.322834 0.492126
- A 11579568 0.053333 27.775874 0.000000 -28.268000 0.000000 15.000000
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Crossings
-TURNOUT N "Kato Unitrack Double Crossover 20-210"
- P "Normal" 1 2 3 0 4 5 6
- P "Reverse" 1 7 8 9 6 0 4 10 11 12 3
- E 0.000000 0.000000 270.000000
- E 12.204724 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 12.204724 -1.299212 90.000000
- S 0 0 0.000000 0.000000 0.632000 0.000000
- S 0 0 0.632000 0.000000 11.555000 0.000000
- S 0 0 11.555000 0.000000 12.204724 0.000000
- S 0 0 0.000000 -1.299212 0.632000 -1.299212
- S 0 0 0.632000 -1.299212 11.555000 -1.299212
- S 0 0 11.555000 -1.299212 12.204724 -1.299212
- C 0 0 22.960000 0.631000 -22.960000 0.003000 12.880000
- S 0 0 5.750000 -0.578000 6.438000 -0.735000
- C 0 0 -22.960000 11.497000 21.661000 179.855000 12.874000
- C 0 0 -22.960000 0.691000 21.661000 167.271000 12.876000
- S 0 0 5.750000 -0.735000 6.438000 -0.578000
- C 0 0 22.960000 11.557000 -22.960000 347.117000 12.878000
- L 11579568 0.053333 0.000000 0.492126 12.204724 0.492126
- L 11579568 0.053333 0.000000 -0.492126 0.5 -0.492126
- L 11579568 0.053333 0.000000 -0.825878 0.5 -0.825878
- L 11579568 0.053333 0.5 -0.492126 0.5 -0.825878
- L 11579568 0.053333 12.204724 -0.492126 11.704724 -0.492126
- L 11579568 0.053333 12.204724 -0.825878 11.704724 -0.825878
- L 11579568 0.053333 11.704724 -0.492126 11.704724 -0.825878
- L 11579568 0.053333 0.000000 -1.772546 12.204724 -1.772546
- END
-TURNOUT N "Kato Unitrack Dbl Trk Single Crossover (left) 9.75 248mm 20-230"
- P "Normal" 1 2 0 3 4
- P "Reverse" 1 5 6 7 4
- E 0.000000 0.000000 270.000000
- E 9.763779 0.000000 90.000000
- E 0.000000 1.299212 270.000000
- E 9.763779 1.299212 90.000000
- S 0 0.000000 0.000000 0.000000 0.617287 0.000000
- S 0 0.000000 0.617287 0.000000 9.763779 0.000000
- S 0 0.000000 0.000000 1.299212 9.146492 1.299212
- S 0 0.000000 9.146492 1.299212 9.763779 1.299212
- C 0 0.000000 -14.226684 0.617306 14.226684 163.988842 16.011234
- S 0 0.000000 4.541371 0.551886 5.222408 0.747326
- C 0 0.000000 14.226684 9.146510 -12.927467 343.988842 16.011234
- L 11579568 0.053333 0.000000 -0.445774 9.763799 -0.445774
- L 11579568 0.053333 0.000000 1.744986 9.763799 1.744986
- END
-TURNOUT N "Kato Unitrack Dbl Trk Single Crossover (Right) 9.75 248mm 20-231"
- P "Normal" 1 2 0 3 4
- P "Reverse" 3 5 6 7 2
- E 0.000000 0.000000 270.000000
- E 9.763799 0.000000 90.000000
- E 0.000000 1.299212 270.000000
- E 9.763799 1.299212 90.000000
- S 0 0.000000 0.000000 0.000000 9.146512 0.000000
- S 0 0.000000 9.146512 0.000000 9.763799 0.000000
- S 0 0.000000 0.000000 1.299212 0.617287 1.299212
- S 0 0.000000 0.617287 1.299212 9.763799 1.299212
- C 0 0.000000 14.226749 0.617230 -12.927537 0.000076 16.011200
- S 0 0.000000 4.541380 0.747326 5.222419 0.551886
- C 0 0.000000 -14.226749 9.146530 14.226744 180.000076 16.011200
- L 11579568 0.053333 0.000000 -0.445774 9.763799 -0.445774
- L 11579568 0.053333 0.000000 1.744986 9.763799 1.744986
- END
-TURNOUT N "Kato Unitrack Crossing 15° X15R 20-301"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- E 0.000000 0.964069 285.000000
- E 7.322834 -0.964069 105.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- S 0 0 0.000000 0.964069 7.322834 -0.964069
- L 11579568 0.053333 3.71 0.492126 7.322834 0.492126
- L 11579568 0.053333 0.000000 -0.492126 3.62 -0.492126
- L 11579568 0.053333 0.12 1.43 3.71 0.492126
- L 11579568 0.053333 7.20 -1.43 3.62 -0.492126
- END
-TURNOUT N "Kato Unitrack Crossing 15° X15L 20-300"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- E 0.000000 -0.964069 255.000000
- E 7.322834 0.964069 75.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- S 0 0 0.000000 -0.964069 7.322834 0.964069
- L 11579568 0.053333 3.71 -0.492126 7.322834 -0.492126
- L 11579568 0.053333 0.000000 0.492126 3.62 0.492126
- L 11579568 0.053333 0.12 -1.43 3.71 -0.492126
- L 11579568 0.053333 7.20 1.43 3.62 0.492126
- END
-TURNOUT N "Kato Unitrack Crossing 90° w/S45.5 20-320"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- E 2.440944 2.440944 0.000000
- E 2.440944 -2.440944 180.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- S 0 0 2.440944 2.440944 2.440944 -2.440944
- L 11579568 0.053333 0.000000 0.492126 1.967610 0.492126
- L 11579568 0.053333 0.000000 -0.492126 1.967610 -0.492126
- L 11579568 0.053333 2.914278 0.492126 4.881889 0.492126
- L 11579568 0.053333 2.914278 -0.492126 4.881889 -0.492126
- L 11579568 0.053333 1.967610 -2.440944 1.967610 -0.500000
- L 11579568 0.053333 2.914278 -2.440944 2.914278 -0.500000
- L 11579568 0.053333 1.967610 2.440944 1.967610 0.500000
- L 11579568 0.053333 2.914278 2.440944 2.914278 0.500000
- END
-TURNOUT N "Kato Unitrack Crossing 90° w/o S45.5 20-320"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 1.299212 0.000000 90.000000
- E 0.649606 0.649606 0.000000
- E 0.649606 -0.649606 180.000000
- S 0 0 0.000000 0.000000 1.299212 0.000000
- S 0 0 0.649606 0.649606 0.649606 -0.650000
- L 11579568 0.053333 0.000000 0.492126 0.176272 0.492126
- L 11579568 0.053333 0.000000 -0.492126 0.176272 -0.492126
- L 11579568 0.053333 1.122940 0.492126 1.299212 0.492126
- L 11579568 0.053333 1.122940 -0.492126 1.299212 -0.492126
- L 11579568 0.053333 0.176272 -0.649606 0.176272 -0.492126
- L 11579568 0.053333 1.122940 -0.649606 1.122940 -0.492126
- L 11579568 0.053333 0.176272 0.649606 0.176272 0.492126
- L 11579568 0.053333 1.122940 0.649606 1.122940 0.492126
- END
-TURNOUT N "Kato Unitrack S45.5 (incl w/20-320) "
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.791339 0.000000 90.000000
- S 0 0 0.000000 0.000000 1.791339 0.000000
- L 11579568 0.053333 0.000000 0.492126 1.791339 0.492126
- L 11579568 0.053333 0.000000 -0.492126 1.791339 -0.492126
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Single Track Viaducts - Straights
-TURNOUT N "Kato Unitrack Viaduct Straight 9.75 248mm 20-400"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.763779 0.000000 90.000000
- S 0 0 0.000000 0.000000 9.763779 0.000000
- L 0 0.053333 0.000000 0.47334 9.763799 0.47334
- L 0 0.053333 0.000000 -0.47334 9.763799 -0.47334
- END
-TURNOUT N "Kato Unitrack Viaduct Straight 7.312 186mm 20-410"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- L 0 0.053333 0.000000 0.47334 7.322834 0.47334
- L 0 0.053333 0.000000 -0.47334 7.322834 -0.47334
- END
-TURNOUT N "Kato Unitrack Viaduct Straight 4.875 124mm 20-420"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- L 0 0.053333 0.000000 0.47334 4.881889 0.47334
- L 0 0.053333 0.000000 -0.47334 4.881889 -0.47334
- END
-TURNOUT N "Kato Unitrack Viaduct Straight(Platform) 4.875 124mm 20-421"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- L 0 0.053333 0.000000 0.47334 4.881889 0.47334
- L 0 0.053333 0.000000 -0.47334 4.881889 -0.47334
- L 0 0.040000 3.000000 -0.526440 3.000000 -0.826440
- L 0 0.040000 3.000000 -0.826440 1.900000 -0.826440
- L 0 0.040000 1.900000 -0.826440 1.900000 -0.526440
- END
-TURNOUT N "Kato Unitrack Viaduct Straight 2.4375 62mm 20-440"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.440944 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.440944 0.000000
- L 0 0.053333 0.000000 0.47334 2.440944 0.47334
- L 0 0.053333 0.000000 -0.47334 2.440944 -0.47334
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Single Track Viaducts - Curves
-TURNOUT N "Kato Unitrack Viaduct Curve 9.75R 249mm 45° Curve 20-505"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.931874 -2.871276 135.000000
- C 0 0 9.803150 0.000000 -9.803150 0.000000 45.000000
- A 0 0.053333 9.329810 0.000000 -9.803150 0.000000 45.000000
- A 0 0.053333 10.276490 0.000000 -9.803150 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Viaduct Curve 11R 282mm 45° 20-510"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.850556 -3.251807 135.000000
- C 0 0 11.102362 0.000000 -11.102362 0.000000 45.000000
- A 0 0.053333 10.629022 0.000000 -11.102362 0.000000 45.000000
- A 0 0.053333 11.575702 0.000000 -11.102362 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Viaduct Curve 12.375R 315mm 45° 20-520"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 8.769238 -3.632337 135.000000
- C 0 0 12.401575 0.000000 -12.401575 0.000000 45.000000
- A 0 0.053333 11.928235 0.000000 -12.401575 0.000000 45.000000
- A 0 0.053333 12.874915 0.000000 -12.401575 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Viaduct Curve 13.75R 348mm 45° 20-530"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.687920 -4.012868 135.000000
- C 0 0 13.700787 0.000000 -13.700787 0.000000 45.000000
- A 0 0.053333 13.227447 0.000000 -13.700787 0.000000 45.000000
- A 0 0.053333 14.174127 0.000000 -13.700787 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Viaduct Curve 13.75R 348mm 30° 20-531"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.850394 -1.835557 120.000000
- C 0 0 13.700787 0.000000 -13.700787 0.000000 30.000000
- A 0 0.053333 13.227447 0.000000 -13.700787 0.000000 30.000000
- A 0 0.053333 14.174127 0.000000 -13.700787 0.000000 30.000000
- END
-TURNOUT N "Kato Unitrack Viaduct Curve 15R 381mm 30° 20-540"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.500000 -2.009619 120.000000
- C 0 0 15.000000 0.000000 -15.000000 0.000000 30.000000
- A 0 0.053333 14.526660 0.000000 -15.000000 0.000000 30.000000
- A 0 0.053333 15.473340 0.000000 -15.000000 0.000000 30.000000
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Double Track Viaducts - Straights
-TURNOUT N "Kato Unitrack Double Viaduct Straight 9.75 248mm 20-401"
- P "Normal" 1 0 2
- E 0.000000 0.649606 270.000000
- E 9.763779 0.649606 90.000000
- E 0.000000 -0.649606 270.000000
- E 9.763779 -0.649606 90.000000
- S 0 0 0.000000 0.649606 9.763779 0.649606
- S 0 0 0.000000 -0.649606 9.763779 -0.649606
- L 0 0.053333 0.000000 1.122946 9.763779 1.122946
- L 0 0.053333 0.000000 -1.122946 9.763779 -1.122946
- END
-TURNOUT N "Kato Unitrack Double Viaduct Straight 7 5/16 186mm 20-411"
- P "Normal" 1 0 2
- E 0.000000 0.649606 270.000000
- E 7.322834 0.649606 90.000000
- E 0.000000 -0.649606 270.000000
- E 7.322834 -0.649606 90.000000
- S 0 0 0.000000 0.649606 7.322834 0.649606
- S 0 0 0.000000 -0.649606 7.322834 -0.649606
- L 0 0.053333 0.000000 1.122946 7.322834 1.122946
- L 0 0.053333 0.000000 -1.122946 7.322834 -1.122946
- END
-TURNOUT N "Kato Unitrack Double Viaduct Straight 4.875 124mm 20-422"
- P "Normal" 1
- E 0.000000 0.649606 270.000000
- E 4.881889 0.649606 90.000000
- E 0.000000 -0.649606 270.000000
- E 4.881889 -0.649606 90.000000
- S 0 0 0.000000 0.649606 4.881889 0.649606
- S 0 0 0.000000 -0.649606 4.881889 -0.649606
- L 0 0.053333 0.000000 1.122946 4.881889 1.122946
- L 0 0.053333 0.000000 -1.122946 4.881889 -1.122946
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale CS Double Track Viaducts - Curves
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Viaduct Curve 16.3,15R 414/381mm 45° 20-544"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 10.606602 -4.393398 135.000000
- E 0.000000 1.299213 270.000000
- E 11.525284 -3.474716 135.000000
- C 0 0 15.000000 0.000000 -15.000000 0.000000 45.000000
- C 0 0 16.299213 0.000000 -15.000000 0.000000 45.000000
- A 0 0.053333 14.526660 0.000000 -15.000000 0.000000 45.000000
- A 0 0.053333 16.772553 0.000000 -15.000000 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Viaduct Easement Curve (R) Appr 16.3/15R 414/381mm 22.5° 20-545 Right"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 6.237438 -1.240704 112.500000
- E 0.000000 -1.299212 270.000000
- E 5.740251 -2.441019 112.500000
- C 0 0 16.299212 0.000000 -16.299212 0.000000 22.500000
- C 0 0 15.000000 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 22.500000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Viaduct Easement Curve (L) Appr 16.3/15R 414/381mm 22.5° 20-545 Left"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 6.237438 -1.240704 112.500000
- E 0.000000 -1.299212 270.000000
- E 5.740251 -2.441019 112.500000
- C 0 0 16.299212 0.000000 -16.299212 0.000000 22.500000
- C 0 0 15.000000 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 22.500000
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale GL CS Double Track - Straights
-TURNOUT N "Kato Unitrack CS Dbl Trk Straight 9.75 248mm 20-004"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 9.763799 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 9.763799 -1.299212 90.000000
- S 0 0 0.000000 0.000000 9.763799 0.000000
- S 0 0 0.000000 -1.299212 9.763799 -1.299212
- L 11579568 0.053333 0.000000 0.492126 9.763799 0.492126
- L 11579568 0.053333 0.000000 -1.744986 9.763799 -1.744986
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk Straight 7 5/16 186mm 20-012"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 7.322834 -1.299212 90.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- S 0 0 0.000000 -1.299212 7.322834 -1.299212
- L 11579568 0.053333 0.000000 0.492126 7.322834 0.492126
- L 11579568 0.053333 0.000000 -1.744986 7.322834 -1.744986
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk Straight 4 7/8 124mm 20-023"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 4.881889 -1.299212 90.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- S 0 0 0.000000 -1.299212 4.881889 -1.299212
- L 11579568 0.053333 0.000000 0.492126 4.881889 0.492126
- L 11579568 0.053333 0.000000 -1.744986 4.881889 -1.744986
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk Straight 2 7/16 62mm 20-042"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 2.440944 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 2.440944 -1.299212 90.000000
- S 0 0 0.000000 0.000000 2.440944 0.000000
- S 0 0 0.000000 -1.299212 2.440944 -1.299212
- L 11579568 0.053333 0.000000 0.492126 2.440944 0.492126
- L 11579568 0.053333 0.000000 -1.744986 2.440944 -1.744986
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk Feeder Track 62mm 20-043"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 2.440944 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 2.440944 -1.299212 90.000000
- S 0 0 0.000000 0.000000 2.440944 0.000000
- S 0 0 0.000000 -1.299212 2.440944 -1.299212
- L 11579568 0.053333 0.000000 0.492126 2.440944 0.492126
- L 11579568 0.053333 0.000000 -1.744986 2.440944 -1.744986
- L 0 0.026667 2.000000 -1.798086 2.000000 -1.998086
- L 0 0.026667 2.000000 -1.998086 2.100000 -2.098086
- L 0 0.026667 2.000000 -1.998086 1.900000 -2.098086
- L 16711680 0.026667 1.800000 -1.798086 1.800000 -1.998086
- L 16711680 0.026667 1.800000 -1.998086 1.900000 -2.098086
- L 16711680 0.026667 1.800000 -1.998086 1.700000 -2.098086
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale GL CS Double Track - Curves
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Curve 16.3/15R 414/381mm 45° 20-181"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 11.525283 -4.773929 135.000000
- E 0.000000 -1.299212 270.000000
- E 10.606602 -5.692610 135.000000
- C 0 0 16.299212 0.000000 -16.299212 0.000000 45.000000
- C 0 0 15.000000 0.000000 -16.299212 0.000000 45.000000
- A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 45.000000
- A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Easement Curve (R) Appr 16.3/15R 414/381mm 22.5° 20-182 Right"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 6.237438 -1.240704 112.500000
- E 0.000000 -1.299212 270.000000
- E 5.740251 -2.441019 112.500000
- C 0 0 16.299212 0.000000 -16.299212 0.000000 22.500000
- C 0 0 15.000000 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 22.500000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Easement Curve (L) Appr 16.3/15R 414/381mm 22.5° 20-182 Left"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 6.237438 -1.240704 112.500000
- E 0.000000 -1.299212 270.000000
- E 5.740251 -2.441019 112.500000
- C 0 0 16.299212 0.000000 -16.299212 0.000000 22.500000
- C 0 0 15.000000 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 22.500000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Curve 12.375/11R 315/282mm 45° 20-183"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 0.000000 -1.299212 270.000000
- E 8.769238 -3.632337 135.000000
- E 7.850556 -4.551019 135.000000
- C 0 0 12.401575 0.000000 -12.401575 0.000000 45.000000
- C 0 0 11.102362 0.000000 -12.401575 0.000000 45.000000
- A 11579568 0.053333 12.847349 0.000000 -12.401575 0.000000 45.000000
- A 11579568 0.053333 10.656588 0.000000 -12.401575 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Easement Curve 12.375/11R 315/282mm 22.5° 20-184 Right"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 0.000000 -1.299212 270.000000
- E 4.745877 -0.944014 112.500000
- E 4.248690 -2.144330 112.500000
- C 0 0 12.401575 0.000000 -12.401575 0.000000 22.500000
- C 0 0 11.102362 0.000000 -12.401575 0.000000 22.500000
- A 11579568 0.053333 12.847349 0.000000 -12.401575 0.000000 22.500000
- A 11579568 0.053333 10.656588 0.000000 -12.401575 0.000000 22.500000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Easement Curve 12.375/11R 315/282mm 22.5° 20-184 Left"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 0.000000 -1.299212 270.000000
- E 4.745877 -0.944014 112.500000
- E 4.248690 -2.144330 112.500000
- C 0 0 12.401575 0.000000 -12.401575 0.000000 22.500000
- C 0 0 11.102362 0.000000 -12.401575 0.000000 22.500000
- A 11579568 0.053333 12.847349 0.000000 -12.401575 0.000000 22.500000
- A 11579568 0.053333 10.656588 0.000000 -12.401575 0.000000 22.500000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Curve 18.875/17.625R 480/447mm 45° 20-185"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 13.362648 -5.534990 135.000000
- E 0.000000 -1.299212 270.000000
- E 12.443966 -6.453672 135.000000
- C 0 0 18.897638 0.000000 -18.897638 0.000000 45.000000
- C 0 0 17.598425 0.000000 -18.897638 0.000000 45.000000
- A 11579568 0.053333 19.343412 0.000000 -18.897638 0.000000 45.000000
- A 11579568 0.053333 17.152651 0.000000 -18.897638 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Easement Curve (R) Appr 18.875/17.625R 480/447mm 22.5° 20-186 Right"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.231813 -1.438497 112.500000
- E 0.000000 -1.299212 270.000000
- E 6.734626 -2.638813 112.500000
- C 0 0 18.897638 0.000000 -18.897638 0.000000 22.500000
- C 0 0 17.598425 0.000000 -18.897638 0.000000 22.500000
- A 11579568 0.053333 19.343412 0.000000 -18.897638 0.000000 22.500000
- A 11579568 0.053333 17.152651 0.000000 -18.897638 0.000000 22.500000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Easement Curve (L) Appr 18.875/17.625R 480/447mm 22.5° 20-186 Left"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.231813 -1.438497 112.500000
- E 0.000000 -1.299212 270.000000
- E 6.734626 -2.638813 112.500000
- C 0 0 18.897638 0.000000 -18.897638 0.000000 22.500000
- C 0 0 17.598425 0.000000 -18.897638 0.000000 22.500000
- A 11579568 0.053333 19.343412 0.000000 -18.897638 0.000000 22.500000
- A 11579568 0.053333 17.152651 0.000000 -18.897638 0.000000 22.500000
- END
-
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale V-15 Double Track Widening Sections
-TURNOUT N "Kato Unitrack CS Dbl Trk Widening Section 310mm 20-051 Left"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 12.204724 0.000000 90.000000
- E 0.000000 1.299212 270.000000
- E 12.204724 2.598425 90.000000
- S 0 0 0.000000 0.000000 12.204724 0.000000
- S 0 0 0.000000 1.299212 0.980334 1.299212
- C 0 0 17.598425 0.980334 18.897637 169.500000 10.500000
- S 0 0 4.187392 1.593899 8.017332 2.303737
- C 0 0 17.598425 11.224390 -15.000001 349.500000 10.500000
- S 0 0 11.224390 2.598425 12.204724 2.598425
- L 11579568 0.053333 0.000000 -0.492126 12.204724 -0.492126
- L 11579568 0.053333 0.000000 1.744986 0.980334 1.744986
- A 11579568 0.053333 17.152651 0.980334 18.897637 169.500000 10.500000
- L 11579568 0.053333 4.187392 2.039673 8.017332 2.749511
- A 11579568 0.053333 18.044199 11.224390 -15.000001 349.500000 10.500000
- L 11579568 0.053333 11.224390 3.044199 12.204724 3.044199
- L 11579568 0.053333 11.704724 0.492126 12.204724 0.492126
- L 11579568 0.053333 11.704724 0.492126 11.704724 2.152651
- L 11579568 0.053333 11.704724 2.152651 12.204724 2.152651
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk Widening Section 310mm 20-052 Right"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 12.204724 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 12.204724 -2.598425 90.000000
- S 0 0 0.000000 0.000000 12.204724 0.000000
- S 0 0 0.000000 -1.299212 0.980334 -1.299212
- C 0 0 17.598425 0.980334 -18.897637 0.000000 10.500000
- S 0 0 4.187392 -1.593899 8.017332 -2.303737
- C 0 0 17.598425 11.224390 15.000001 180.000000 10.500000
- S 0 0 11.224390 -2.598425 12.204724 -2.598425
- L 11579568 0.053333 0.000000 0.492126 12.204724 0.492126
- L 11579568 0.053333 0.000000 -1.744986 0.980334 -1.744986
- A 11579568 0.053333 17.152651 0.980334 -18.897637 0.000000 10.500000
- L 11579568 0.053333 4.187392 -2.039673 8.017332 -2.749511
- A 11579568 0.053333 18.044199 11.224390 15.000001 180.000000 10.500000
- L 11579568 0.053333 11.224390 -3.044199 12.204724 -3.044199
- L 11579568 0.053333 11.704724 -0.492126 12.204724 -0.492126
- L 11579568 0.053333 11.704724 -0.492126 11.704724 -2.152651
- L 11579568 0.053333 11.704724 -2.152651 12.204724 -2.152651
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Conc Sleeper Straight Track
-TURNOUT N "Kato Unitrack CS Trk Straight 9.75 248mm 20-875"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.763779 0.000000 90.000000
- S 0 0 0.000000 0.000000 9.763779 0.000000
- L 11579568 0.053333 0.000000 0.492126 9.763779 0.492126
- L 11579568 0.053333 0.000000 -0.492126 9.763779 -0.492126
- END
-TURNOUT N "Kato Unitrack CS Trk Straight 4 7/8 124mm 20-XXX"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- L 11579568 0.053333 0.000000 0.492126 4.881889 0.492126
- L 11579568 0.053333 0.000000 -0.492126 4.881889 -0.492126
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Bridges
-TURNOUT N "Kato Unitrack Dbl. Track Truss Bridge 9.75 248mm 20-435/6/7/8"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 9.763779 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 9.763779 -1.299212 90.000000
- S 0 0 0.000000 0.000000 9.763779 0.000000
- S 0 0 0.000000 -1.299212 9.763779 -1.299212
- L 0 0.053333 0.000000 0.47334 9.763779 0.47334
- L 0 0.053333 0.000000 -1.772552 9.763779 -1.772552
- L 0 0.053333 1.220474 -1.772552 1.220474 0.47334
- L 0 0.053333 1.220474 -1.772552 2.440948 0.47334
- L 0 0.053333 2.440948 -1.772552 1.220474 0.47334
- L 0 0.053333 2.440948 -1.772552 2.440948 0.47334
- L 0 0.053333 2.440948 -1.772552 3.661422 0.47334
- L 0 0.053333 3.661422 -1.772552 2.440948 0.47334
- L 0 0.053333 3.661422 -1.772552 3.661422 0.47334
- L 0 0.053333 3.661422 -1.772552 4.881896 0.47334
- L 0 0.053333 4.881896 -1.772552 3.661422 0.47334
- L 0 0.053333 4.881896 -1.772552 4.881896 0.47334
- L 0 0.053333 4.881896 -1.772552 6.102370 0.47334
- L 0 0.053333 6.102370 -1.772552 4.881896 0.47334
- L 0 0.053333 6.102370 -1.772552 6.102370 0.47334
- L 0 0.053333 6.102370 -1.772552 7.322844 0.47334
- L 0 0.053333 7.322844 -1.772552 6.102370 0.47334
- L 0 0.053333 7.322844 -1.772552 7.322844 0.47334
- L 0 0.053333 7.322844 -1.772552 8.543318 0.47334
- L 0 0.053333 8.543318 -1.772552 7.322844 0.47334
- L 0 0.053333 8.543318 -1.772552 8.543318 0.47334
- END
-TURNOUT N "Kato Unitrack Single Track Truss Bridge 9.75 248mm 20-430/1/2/3/4"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.763779 0.000000 90.000000
- S 0 0 0.000000 0.000000 9.763779 0.000000
- L 0 0.053333 0.000000 0.47334 9.763779 0.47334
- L 0 0.053333 0.000000 -0.47334 9.763779 -0.47334
- L 0 0.053333 1.220474 -0.47334 1.220474 0.47334
- L 0 0.053333 1.220474 -0.47334 2.440948 0.47334
- L 0 0.053333 2.440948 -0.47334 1.220474 0.47334
- L 0 0.053333 2.440948 -0.47334 2.440948 0.47334
- L 0 0.053333 2.440948 -0.47334 3.661422 0.47334
- L 0 0.053333 3.661422 -0.47334 2.440948 0.47334
- L 0 0.053333 3.661422 -0.47334 3.661422 0.47334
- L 0 0.053333 3.661422 -0.47334 4.881896 0.47334
- L 0 0.053333 4.881896 -0.47334 3.661422 0.47334
- L 0 0.053333 4.881896 -0.47334 4.881896 0.47334
- L 0 0.053333 4.881896 -0.47334 6.102370 0.47334
- L 0 0.053333 6.102370 -0.47334 4.881896 0.47334
- L 0 0.053333 6.102370 -0.47334 6.102370 0.47334
- L 0 0.053333 6.102370 -0.47334 7.322844 0.47334
- L 0 0.053333 7.322844 -0.47334 6.102370 0.47334
- L 0 0.053333 7.322844 -0.47334 7.322844 0.47334
- L 0 0.053333 7.322844 -0.47334 8.543318 0.47334
- L 0 0.053333 8.543318 -0.47334 7.322844 0.47334
- L 0 0.053333 8.543318 -0.47334 8.543318 0.47334
- END
-TURNOUT N "Kato Unitrack Single Track Plate Grider Bridge 7 5/16 186mm 20-450/1/2/3/4"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- L 0 0.053333 0.000000 0.47334 7.322834 0.47334
- L 0 0.053333 0.000000 -0.47334 7.322834 -0.47334
- END
-TURNOUT N "Kato Unitrack Double Track Plate Grider Bridge 7 5/16 186mm 20-455/6/7/8"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 7.322834 -1.299212 90.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- S 0 0 0.000000 -1.299212 7.322834 -1.299212
- L 0 0.053333 0.000000 0.47334 7.322834 0.47334
- L 0 0.053333 0.000000 -0.649606 7.322834 -0.649606
- L 0 0.053333 0.000000 -1.772552 7.322834 -1.772552
- END
-TURNOUT N "Kato Unitrack Deck Plate Grider Bridge 4 7/8 124mm 20-460/1/2/3/4"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- L 0 0.053333 0.000000 0.47334 4.881889 0.47334
- L 0 0.053333 0.000000 -0.47334 4.881889 -0.47334
- END
-TURNOUT N "Kato Unitrack Curve Deck Plate Grider Bridge 17 5/8 448mm 15d 20-823"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.564997 -0.600993 105.000000
- C 0 0 17.637795 0.000000 -17.637795 0.000000 15.000000
- A 0 0.053333 17.164455 0.000000 -17.637795 0.000000 15.000000
- A 0 0.053333 18.111135 0.000000 -17.637795 0.000000 15.000000
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Structures
-STRUCTURE N "Kato Unitrack Pier 23-015"
- X pier 0.590551 "1" 0.984251 "2" 1.377952 "3" 1.771653 "4" 1.968503 "5"
- L 0 0.000000 -0.250000 -0.5 0.250000 -0.5
- L 0 0.000000 0.250000 -0.5 0.250000 0.5
- L 0 0.000000 0.250000 0.5 -0.250000 0.5
- L 0 0.000000 -0.250000 0.5 -0.250000 -0.5
- A 0 0.000000 0.250000 -0.000000 0.50000 270.000000 180.000000
- A 0 0.000000 0.250000 -0.000000 -0.50000 90.000000 180.000000
- END
-STRUCTURE N "Kato Unitrack Pier 23-016"
- X pier 1.968503 "5"
- L 7368826 0.040000 -0.75 -0.6 0.75 -0.6
- L 7368826 0.040000 0.75 -0.6 0.75 1.899212
- L 7368826 0.040000 0.75 1.899212 -0.75 1.899212
- L 7368826 0.040000 -0.75 1.899212 -0.75 -0.6
- END
-STRUCTURE N "Kato Unitrack Island Platform Type A 23-100"
- L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
- L 10824234 0.000000 0.000000 1.653543 9.763780 1.653543
- L 10824234 0.000000 9.763780 1.653543 9.763780 0.000000
- L 10824234 0.000000 9.763780 0.000000 0.000000 0.000000
- L 10824234 0.000000 0.000000 0.826772 9.763780 0.826772
- L 10824234 0.000000 0.787402 1.141732 5.157480 1.141732
- L 10824234 0.000000 5.157480 1.141732 5.157480 0.511811
- L 10824234 0.000000 5.157480 0.511811 0.787402 0.511811
- L 10824234 0.000000 0.787402 0.511811 0.787402 1.141732
- L 10824234 0.000000 2.952756 1.141732 2.952756 0.511811
- L 10824234 0.000000 0.078740 1.653543 0.078740 0.866142
- L 10824234 0.000000 0.157480 1.653543 0.157480 0.984252
- L 10824234 0.000000 0.236220 1.653543 0.236220 1.102362
- L 10824234 0.000000 0.314961 1.653543 0.314961 1.220472
- L 10824234 0.000000 0.393701 1.653543 0.393701 1.299213
- L 10824234 0.000000 0.472441 1.653543 0.472441 1.377953
- L 10824234 0.000000 0.551181 1.653543 0.551181 1.496063
- L 10824234 0.000000 0.629921 1.653543 0.629921 1.614173
- L 10824234 0.000000 9.685039 0.000000 9.685039 0.787402
- L 10824234 0.000000 9.606299 0.000000 9.606299 0.669291
- L 10824234 0.000000 9.527559 0.000000 9.527559 0.551181
- L 10824234 0.000000 9.448819 0.000000 9.448819 0.433071
- L 10824234 0.000000 9.370079 0.000000 9.370079 0.354331
- L 10824234 0.000000 9.291339 0.000000 9.291339 0.236220
- L 10824234 0.000000 9.212598 0.000000 9.212598 0.157480
- L 10824234 0.000000 9.133858 0.000000 9.133858 0.039370
- END
-STRUCTURE N "Kato Unitrack Island Platform Type B 23-101"
- L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
- L 10824234 0.000000 0.000000 1.653543 9.763780 1.653543
- L 10824234 0.000000 9.763780 1.653543 9.763780 0.000000
- L 10824234 0.000000 9.763780 0.000000 0.000000 0.000000
- L 10824234 0.000000 0.000000 0.826772 9.763780 0.826772
- L 10824234 0.000000 0.787402 1.141732 5.157480 1.141732
- L 10824234 0.000000 5.157480 1.141732 5.157480 0.511811
- L 10824234 0.000000 5.157480 0.511811 0.787402 0.511811
- L 10824234 0.000000 0.787402 0.511811 0.787402 1.141732
- L 10824234 0.000000 2.952756 1.141732 2.952756 0.511811
- L 10824234 0.000000 0.078740 1.653543 0.078740 0.866142
- L 10824234 0.000000 0.157480 1.653543 0.157480 0.984252
- L 10824234 0.000000 0.236220 1.653543 0.236220 1.102362
- L 10824234 0.000000 0.314961 1.653543 0.314961 1.220472
- L 10824234 0.000000 0.393701 1.653543 0.393701 1.299213
- L 10824234 0.000000 0.472441 1.653543 0.472441 1.377953
- L 10824234 0.000000 0.551181 1.653543 0.551181 1.496063
- L 10824234 0.000000 0.629921 1.653543 0.629921 1.614173
- L 10824234 0.000000 9.685039 0.000000 9.685039 0.787402
- L 10824234 0.000000 9.606299 0.000000 9.606299 0.669291
- L 10824234 0.000000 9.527559 0.000000 9.527559 0.551181
- L 10824234 0.000000 9.448819 0.000000 9.448819 0.433071
- L 10824234 0.000000 9.370079 0.000000 9.370079 0.354331
- L 10824234 0.000000 9.291339 0.000000 9.291339 0.236220
- L 10824234 0.000000 9.212598 0.000000 9.212598 0.157480
- L 10824234 0.000000 9.133858 0.000000 9.133858 0.039370
- END
-STRUCTURE N "Kato Unitrack Island Platform End, Type 1 23-102"
- L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
- L 10824234 0.000000 0.000000 0.000000 7.874016 0.000000
- L 10824234 0.000000 7.874016 0.000000 7.874016 1.653543
- L 10824234 0.000000 7.874016 1.653543 0.000000 1.653543
- L 10824234 0.000000 0.787402 1.653543 0.787402 0.000000
- L 10824234 0.000000 0.787402 0.629921 0.196850 0.629921
- L 10824234 0.000000 0.196850 0.629921 0.196850 0.984252
- L 10824234 0.000000 0.196850 0.984252 0.787402 0.984252
- L 10824234 0.000000 0.787402 0.984252 0.787402 0.629921
- L 10824234 0.000000 0.669291 0.629921 0.669291 0.984252
- L 10824234 0.000000 0.551181 0.629921 0.551181 0.984252
- L 10824234 0.000000 0.433071 0.629921 0.433071 0.984252
- L 10824234 0.000000 0.314961 0.629921 0.314961 0.984252
- L 0 0.026667 0.866142 1.614173 0.866142 0.039370
- A 0 0.026667 0.141951 5.196850 0.826772 0.000000 360.000000
- L 0 0.000000 3.031496 0.944882 4.606299 0.944882
- L 0 0.000000 4.606299 0.944882 4.606299 0.708661
- L 0 0.000000 4.606299 0.708661 3.031496 0.708661
- L 0 0.000000 3.031496 0.708661 3.031496 0.944882
- L 0 0.066667 3.543307 0.826772 4.094488 0.826772
- END
-STRUCTURE N "Kato Unitrack Island Platform End, Type 2 23-103"
- L 10824234 0.000000 7.874016 0.000000 7.874016 1.653543
- L 10824234 0.000000 7.874016 1.653543 0.000000 1.653543
- A 0 0.026667 0.141951 5.196850 0.826772 0.000000 360.000000
- L 0 0.000000 3.031496 0.944882 4.606299 0.944882
- L 0 0.000000 4.606299 0.944882 4.606299 0.708661
- L 0 0.000000 4.606299 0.708661 3.031496 0.708661
- L 0 0.000000 3.031496 0.708661 3.031496 0.944882
- L 0 0.066667 3.543307 0.826772 4.094488 0.826772
- A 10824234 0.000000 27.822226 7.874016 27.822226 180.000000 15.000000
- L 0 0.026667 0.866142 1.614173 0.866142 1.023622
- L 10824234 0.000000 0.196850 1.535433 0.196850 1.299213
- L 10824234 0.000000 0.669291 1.535433 0.669291 1.299213
- L 10824234 0.000000 0.551181 1.535433 0.551181 1.299213
- L 10824234 0.000000 0.433071 1.535433 0.433071 1.299213
- L 10824234 0.000000 0.314961 1.535433 0.314961 1.299213
- L 10824234 0.000000 0.196667 1.295000 0.670000 1.298333
- L 10824234 0.000000 0.193333 1.535000 0.670000 1.535000
- L 10824234 0.000000 0.670000 1.535000 0.670000 1.651667
- L 10824234 0.000000 0.670000 1.295833 0.670000 0.949167
- L 10824234 0.000000 0.673333 0.946667 0.000000 1.126667
- L 10824234 0.000000 0.006667 1.125000 0.000000 1.645000
- END
-STRUCTURE N "Kato Unitrack Island Platform End, Type 3 23-104"
- L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
- L 10824234 0.000000 0.000000 1.653543 7.874016 1.653543
- A 0 0.026667 0.141951 2.677166 0.826772 0.000000 360.000000
- L 0 0.000000 4.842520 0.944882 3.267717 0.944882
- L 0 0.000000 3.267717 0.944882 3.267717 0.708661
- L 0 0.000000 3.267717 0.708661 4.842520 0.708661
- L 0 0.000000 4.842520 0.708661 4.842520 0.944882
- L 0 0.066667 4.330709 0.826772 3.779528 0.826772
- A 10824234 0.000000 27.822226 0.000000 27.822226 165.000000 15.000000
- L 0 0.026667 7.007874 1.614173 7.007874 1.023622
- L 10824234 0.000000 7.677166 1.535433 7.677166 1.299213
- L 10824234 0.000000 7.204725 1.535433 7.204725 1.299213
- L 10824234 0.000000 7.322835 1.535433 7.322835 1.299213
- L 10824234 0.000000 7.440945 1.535433 7.440945 1.299213
- L 10824234 0.000000 7.559055 1.535433 7.559055 1.299213
- L 10824234 0.000000 7.677349 1.295000 7.204016 1.298333
- L 10824234 0.000000 7.680683 1.535000 7.204016 1.535000
- L 10824234 0.000000 7.204016 1.535000 7.204016 1.651667
- L 10824234 0.000000 7.204016 1.295833 7.204016 0.949167
- L 10824234 0.000000 7.200683 0.946667 7.874016 1.126667
- L 10824234 0.000000 7.867349 1.125000 7.874016 1.645000
- END
-STRUCTURE N "Kato Unitrack Island Platform Type D 23-106"
- L 10824234 0 0.000000 0.000000 0.000000 1.653543
- L 10824234 0 0.000000 1.653543 9.763780 1.653543
- L 10824234 0 9.763780 1.653543 9.763780 0.000000
- L 10824234 0 9.763780 0.000000 0.000000 0.000000
- END
-STRUCTURE N "Kato Unitrack One Sided Platform Type A 23-110"
- L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
- L 10824234 0.000000 0.000000 1.653543 9.763780 1.653543
- L 10824234 0.000000 9.763780 1.653543 9.763780 0.000000
- L 10824234 0.000000 9.763780 0.000000 0.000000 0.000000
- L 10824234 0.000000 5.157480 1.141732 5.157480 0.511811
- L 10824234 0.000000 0.078740 1.653543 0.078740 0.866142
- L 10824234 0.000000 0.157480 1.653543 0.157480 0.984252
- L 10824234 0.000000 0.236220 1.653543 0.236220 1.102362
- L 10824234 0.000000 0.314961 1.653543 0.314961 1.220472
- L 10824234 0.000000 0.393701 1.653543 0.393701 1.299213
- L 10824234 0.000000 0.472441 1.653543 0.472441 1.377953
- L 10824234 0.000000 0.551181 1.653543 0.551181 1.496063
- L 10824234 0.000000 0.629921 1.653543 0.629921 1.614173
- L 10824234 0.000000 9.685039 0.000000 9.685039 0.787402
- L 10824234 0.000000 9.606299 0.000000 9.606299 0.669291
- L 10824234 0.000000 9.527559 0.000000 9.527559 0.551181
- L 10824234 0.000000 9.448819 0.000000 9.448819 0.433071
- L 10824234 0.000000 9.370079 0.000000 9.370079 0.354331
- L 10824234 0.000000 9.291339 0.000000 9.291339 0.236220
- L 10824234 0.000000 9.212598 0.000000 9.212598 0.157480
- L 10824234 0.000000 9.133858 0.000000 9.133858 0.039370
- L 10824234 0.000000 1.181102 1.141732 8.582677 1.141732
- L 10824234 0.000000 8.582677 1.141732 8.582677 0.511811
- L 10824234 0.000000 8.582677 0.511811 1.181102 0.511811
- L 10824234 0.000000 1.181102 0.511811 1.181102 1.141732
- END
-STRUCTURE N "Kato Unitrack One Sided Platform Type B 23-111"
- L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
- L 10824234 0.000000 0.000000 1.653543 9.763780 1.653543
- L 10824234 0.000000 9.763780 1.653543 9.763780 0.000000
- L 10824234 0.000000 9.763780 0.000000 0.000000 0.000000
- L 10824234 0.000000 5.157480 1.141732 5.157480 0.511811
- L 10824234 0.000000 0.078740 1.653543 0.078740 0.866142
- L 10824234 0.000000 0.157480 1.653543 0.157480 0.984252
- L 10824234 0.000000 0.236220 1.653543 0.236220 1.102362
- L 10824234 0.000000 0.314961 1.653543 0.314961 1.220472
- L 10824234 0.000000 0.393701 1.653543 0.393701 1.299213
- L 10824234 0.000000 0.472441 1.653543 0.472441 1.377953
- L 10824234 0.000000 0.551181 1.653543 0.551181 1.496063
- L 10824234 0.000000 0.629921 1.653543 0.629921 1.614173
- L 10824234 0.000000 9.685039 0.000000 9.685039 0.787402
- L 10824234 0.000000 9.606299 0.000000 9.606299 0.669291
- L 10824234 0.000000 9.527559 0.000000 9.527559 0.551181
- L 10824234 0.000000 9.448819 0.000000 9.448819 0.433071
- L 10824234 0.000000 9.370079 0.000000 9.370079 0.354331
- L 10824234 0.000000 9.291339 0.000000 9.291339 0.236220
- L 10824234 0.000000 9.212598 0.000000 9.212598 0.157480
- L 10824234 0.000000 9.133858 0.000000 9.133858 0.039370
- L 10824234 0.000000 1.181102 1.141732 8.582677 1.141732
- L 10824234 0.000000 8.582677 1.141732 8.582677 0.511811
- L 10824234 0.000000 8.582677 0.511811 1.181102 0.511811
- L 10824234 0.000000 1.181102 0.511811 1.181102 1.141732
- END
-STRUCTURE N "Kato Unitrack One Sided Platform End Type 1 23-112"
- L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
- L 10824234 0.000000 0.000000 0.000000 7.874016 0.000000
- L 10824234 0.000000 7.874016 0.000000 7.874016 1.653543
- L 10824234 0.000000 7.874016 1.653543 0.000000 1.653543
- L 10824234 0.000000 0.787402 1.653543 0.787402 0.000000
- L 10824234 0.000000 0.787402 0.629921 0.196850 0.629921
- L 10824234 0.000000 0.196850 0.629921 0.196850 0.984252
- L 10824234 0.000000 0.196850 0.984252 0.787402 0.984252
- L 10824234 0.000000 0.787402 0.984252 0.787402 0.629921
- L 10824234 0.000000 0.669291 0.629921 0.669291 0.984252
- L 10824234 0.000000 0.551181 0.629921 0.551181 0.984252
- L 10824234 0.000000 0.433071 0.629921 0.433071 0.984252
- L 10824234 0.000000 0.314961 0.629921 0.314961 0.984252
- L 0 0.026667 0.866142 1.614173 0.866142 0.039370
- A 0 0.026667 0.141951 5.196850 0.826772 0.000000 360.000000
- L 0 0.000000 3.031496 0.944882 4.606299 0.944882
- L 0 0.000000 4.606299 0.944882 4.606299 0.708661
- L 0 0.000000 4.606299 0.708661 3.031496 0.708661
- L 0 0.000000 3.031496 0.708661 3.031496 0.944882
- L 0 0.066667 3.543307 0.826772 4.094488 0.826772
- L 0 0.026667 0.866142 1.614173 7.874016 1.614173
- END
-STRUCTURE N "Kato Unitrack One Sided Platform End Type 2 23-113"
- L 10824234 0.000000 7.874016 0.000000 7.874016 1.653543
- L 10824234 0.000000 7.874016 0.000000 0.000000 0.000000
- L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
- L 10824234 0.000000 0.000000 1.653543 7.874016 1.653543
- L 10824234 0.000000 7.086614 1.653543 7.086614 0.000000
- L 10824234 0.000000 7.086614 0.629921 7.677166 0.629921
- L 10824234 0.000000 7.677166 0.629921 7.677166 0.984252
- L 10824234 0.000000 7.677166 0.984252 7.086614 0.984252
- L 10824234 0.000000 7.086614 0.984252 7.086614 0.629921
- L 10824234 0.000000 7.204725 0.629921 7.204725 0.984252
- L 10824234 0.000000 7.322835 0.629921 7.322835 0.984252
- L 10824234 0.000000 7.440945 0.629921 7.440945 0.984252
- L 10824234 0.000000 7.559055 0.629921 7.559055 0.984252
- L 0 0.026667 7.007874 1.614173 7.007874 0.039370
- A 0 0.026667 0.141951 2.677166 0.826772 0.000000 360.000000
- L 0 0.000000 4.842520 0.944882 3.267717 0.944882
- L 0 0.000000 3.267717 0.944882 3.267717 0.708661
- L 0 0.000000 3.267717 0.708661 4.842520 0.708661
- L 0 0.000000 4.842520 0.708661 4.842520 0.944882
- L 0 0.066667 4.330709 0.826772 3.779528 0.826772
- L 0 0.026667 7.007874 1.614173 0.000000 1.614173
- END
-STRUCTURE N "Kato Unitrack Overhead Station 23-200"
- L 10824234 0.000000 0.000000 5.393701 13.307087 5.393701
- L 10824234 0.000000 12.952756 1.299213 3.188976 1.299213
- L 10824234 0.000000 3.188976 1.299213 3.188976 2.952756
- L 10824234 0.000000 3.188976 2.952756 12.952756 2.952756
- L 10824234 0.000000 12.952756 2.952756 12.952756 1.299213
- L 10824234 0.000000 12.165354 5.393701 12.165354 4.251969
- L 10824234 0.000000 1.102362 5.393701 1.102362 4.251969
- L 10824234 0.000000 7.874016 5.393701 7.874016 4.251969
- L 10824234 0.000000 5.511811 5.393701 5.511811 4.251969
- L 10824234 0.000000 7.913386 4.251969 7.913386 0.000000
- L 10824234 0.000000 7.913386 0.000000 2.716535 0.000000
- L 10824234 0.000000 2.716535 0.000000 2.716535 4.251969
- L 10824234 0.000000 7.795276 4.251969 7.795276 0.157480
- L 10824234 0.000000 7.795276 0.157480 4.330709 0.157480
- L 10824234 0.000000 4.330709 0.157480 4.330709 4.251969
- L 10824234 0.000000 4.330709 2.165354 7.795276 2.165354
- L 10824234 0.000000 13.307087 5.393701 13.307087 4.251969
- L 10824234 0.000000 0.000000 5.393701 0.000000 4.251969
- L 10824234 0.000000 7.952756 2.637795 11.574803 2.637795
- L 10824234 0.000000 11.574803 2.637795 11.574803 1.692913
- L 10824234 0.000000 11.574803 1.692913 7.952756 1.692913
- L 10824234 0.000000 10.866142 2.637795 10.866142 1.692913
- L 10824234 0.000000 10.118110 2.637795 10.118110 1.692913
- L 10824234 0.000000 0.000000 4.251969 4.330709 4.251969
- L 10824234 0.000000 4.330709 4.251969 7.795276 4.251969
- L 10824234 0.000000 7.874016 4.251969 13.267717 4.251969
- END
-STRUCTURE N "Kato Unitrack Station Entrance 23-210"
- L 10824234 0.000000 0.000000 0.000000 0.000000 2.874016
- L 10824234 0.000000 4.921260 0.000000 0.000000 0.000000
- L 10824234 0.000000 0.000000 1.417323 4.055118 1.417323
- L 10824234 0.000000 4.055118 2.874016 4.055118 0.000000
- L 10824234 0.000000 4.055118 1.574803 4.921260 1.574803
- L 10824234 0.000000 4.921260 1.574803 4.921260 0.000000
- L 10824234 0.000000 0.000000 2.874016 4.055118 2.874016
- L 10824234 0.000000 3.779528 0.000000 3.779528 1.299213
- L 10824234 0.000000 3.503937 0.000000 3.503937 1.181102
- L 10824234 0.000000 3.228346 0.000000 3.228346 1.062992
- L 10824234 0.000000 2.952756 0.000000 2.952756 0.944882
- L 10824234 0.000000 2.677165 0.000000 2.677165 0.826772
- L 10824234 0.000000 0.275591 2.874016 0.275591 1.535433
- L 10824234 0.000000 0.551181 2.874016 0.551181 1.692913
- L 10824234 0.000000 0.826772 2.874016 0.826772 1.811024
- L 10824234 0.000000 1.102362 2.874016 1.102362 1.929134
- L 10824234 0.000000 1.377953 2.874016 1.377953 2.047244
- L 10824234 0.000000 4.055118 0.039370 4.921260 0.039370
- L 10824234 0.000000 4.055118 1.535433 4.921260 1.535433
- L 10824234 0.000000 4.055118 0.275591 4.685039 0.275591
- L 10824234 0.000000 4.055118 0.511811 4.448819 0.511811
- L 10824234 0.000000 4.921260 1.299213 4.330709 1.299213
- L 10824234 0.000000 4.921260 1.062992 4.527559 1.062992
- END
-STRUCTURE N "Kato Unitrack Long Engine House 23-300"
- L 10824234 0.000000 0.000000 0.000000 0.000000 3.779528
- L 10824234 0.000000 0.000000 3.779528 7.362205 3.779528
- L 10824234 0.000000 7.362205 3.779528 7.362205 0.000000
- L 10824234 0.000000 7.362205 0.000000 0.000000 0.000000
- L 10824234 0.000000 0.275591 0.393701 0.787402 0.393701
- L 10824234 0.000000 0.787402 0.393701 0.787402 3.385827
- L 10824234 0.000000 0.787402 3.385827 0.275591 3.385827
- L 10824234 0.000000 0.275591 3.385827 0.275591 0.393701
- L 10824234 0.000000 1.062992 0.393701 1.574803 0.393701
- L 10824234 0.000000 1.574803 0.393701 1.574803 3.385827
- L 10824234 0.000000 1.574803 3.385827 1.062992 3.385827
- L 10824234 0.000000 1.062992 3.385827 1.062992 0.393701
- L 10824234 0.000000 1.850394 0.393701 2.362205 0.393701
- L 10824234 0.000000 2.362205 0.393701 2.362205 3.385827
- L 10824234 0.000000 2.362205 3.385827 1.850394 3.385827
- L 10824234 0.000000 1.850394 3.385827 1.850394 0.393701
- L 10824234 0.000000 2.637795 0.393701 3.149606 0.393701
- L 10824234 0.000000 3.149606 0.393701 3.149606 3.385827
- L 10824234 0.000000 3.149606 3.385827 2.637795 3.385827
- L 10824234 0.000000 2.637795 3.385827 2.637795 0.393701
- L 10824234 0.000000 3.425197 0.393701 3.937008 0.393701
- L 10824234 0.000000 3.937008 0.393701 3.937008 3.385827
- L 10824234 0.000000 3.937008 3.385827 3.425197 3.385827
- L 10824234 0.000000 3.425197 3.385827 3.425197 0.393701
- L 10824234 0.000000 4.212598 0.393701 4.724409 0.393701
- L 10824234 0.000000 4.724409 0.393701 4.724409 3.385827
- L 10824234 0.000000 4.724409 3.385827 4.212598 3.385827
- L 10824234 0.000000 4.212598 3.385827 4.212598 0.393701
- L 10824234 0.000000 5.000000 0.393701 5.511811 0.393701
- L 10824234 0.000000 5.511811 0.393701 5.511811 3.385827
- L 10824234 0.000000 5.511811 3.385827 5.000000 3.385827
- L 10824234 0.000000 5.000000 3.385827 5.000000 0.393701
- L 10824234 0.000000 5.787402 0.393701 6.299213 0.393701
- L 10824234 0.000000 6.299213 0.393701 6.299213 3.385827
- L 10824234 0.000000 6.299213 3.385827 5.787402 3.385827
- L 10824234 0.000000 5.787402 3.385827 5.787402 0.393701
- L 10824234 0.000000 6.574803 0.393701 7.086614 0.393701
- L 10824234 0.000000 7.086614 0.393701 7.086614 3.385827
- L 10824234 0.000000 7.086614 3.385827 6.574803 3.385827
- L 10824234 0.000000 6.574803 3.385827 6.574803 0.393701
- L 10824234 0.000000 0.275591 3.464567 0.472441 3.464567
- L 10824234 0.000000 0.472441 3.464567 0.472441 3.661417
- L 10824234 0.000000 0.472441 3.661417 0.275591 3.661417
- L 10824234 0.000000 0.275591 3.661417 0.275591 3.464567
- L 10824234 0.000000 0.275591 0.314961 0.472441 0.314961
- L 10824234 0.000000 0.472441 0.314961 0.472441 0.118110
- L 10824234 0.000000 0.472441 0.118110 0.275591 0.118110
- L 10824234 0.000000 0.275591 0.118110 0.275591 0.314961
- L 10824234 0.000000 7.086614 0.314961 6.889764 0.314961
- L 10824234 0.000000 6.889764 0.314961 6.889764 0.118110
- L 10824234 0.000000 6.889764 0.118110 7.086614 0.118110
- L 10824234 0.000000 7.086614 0.118110 7.086614 0.314961
- L 10824234 0.000000 7.086614 3.464567 6.889764 3.464567
- L 10824234 0.000000 6.889764 3.464567 6.889764 3.661417
- L 10824234 0.000000 6.889764 3.661417 7.086614 3.661417
- L 10824234 0.000000 7.086614 3.661417 7.086614 3.464567
- L 10824234 0.000000 3.582677 0.314961 3.779528 0.314961
- L 10824234 0.000000 3.779528 0.314961 3.779528 0.118110
- L 10824234 0.000000 3.779528 0.118110 3.582677 0.118110
- L 10824234 0.000000 3.582677 0.118110 3.582677 0.314961
- L 10824234 0.000000 3.582677 3.464567 3.779528 3.464567
- L 10824234 0.000000 3.779528 3.464567 3.779528 3.661417
- L 10824234 0.000000 3.779528 3.661417 3.582677 3.661417
- L 10824234 0.000000 3.582677 3.661417 3.582677 3.464567
- END
-STRUCTURE N "Kato Unitrack Industrial Building 23-310"
- L 10824234 0 0.000000 0.000000 0.000000 2.952756
- L 10824234 0 0.000000 2.952756 5.905512 2.952756
- L 10824234 0 5.905512 2.952756 5.905512 0.000000
- L 10824234 0 5.905512 0.000000 0.000000 0.000000
- END
-STRUCTURE N "Kato Unitrack Station Office 23-315a"
- L 10824234 0 0.000000 0.000000 0.000000 1.574803
- L 10824234 0 0.000000 1.574803 2.421260 1.574803
- L 10824234 0 2.421260 1.574803 2.421260 0.000000
- L 10824234 0 2.421260 0.000000 0.000000 0.000000
- END
-STRUCTURE N "Kato Unitrack Signal Tower 23-315b"
- L 10824234 0 0.000000 0.000000 0.000000 1.102362
- L 10824234 0 0.000000 1.102362 2.283465 1.102362
- L 10824234 0 2.283465 1.102362 2.283465 0.000000
- L 10824234 0 2.283465 0.000000 0.000000 0.000000
- END
-STRUCTURE N "Kato Unitrack Building 2x4 23-2x4"
- L 10824234 0 0.000000 0.000000 0.000000 2.000000
- L 10824234 0 0.000000 2.000000 4.000000 2.000000
- L 10824234 0 4.000000 2.000000 4.000000 0.000000
- L 10824234 0 4.000000 0.000000 0.000000 0.000000
- END
-STRUCTURE N "Kato Unitrack Building 4x5 23-4x5"
- L 10824234 0 0.000000 0.000000 0.000000 4.000000
- L 10824234 0 0.000000 4.000000 5.000000 4.000000
- L 10824234 0 5.000000 4.000000 5.000000 0.000000
- L 10824234 0 5.000000 0.000000 0.000000 0.000000
- END
-STRUCTURE N "Kato Unitrack Building 4x6 23-4x6"
- L 10824234 0 0.000000 0.000000 0.000000 4.000000
- L 10824234 0 0.000000 4.000000 6.000000 4.000000
- L 10824234 0 6.000000 4.000000 6.000000 0.000000
- L 10824234 0 6.000000 0.000000 0.000000 0.000000
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Turntable and Accessories
-TURNOUT N "Kato Unitrack 3 Stall Round House 20-240"
- P "Normal" 1
- E -0.148334 1.695463 260.000000
- E 0.000000 0.000000 270.000000
- E -0.148334 -1.695463 280.000000
- S 0 0.000000 -0.148334 1.695463 7.063251 2.967059
- S 0 0.000000 0.000000 0.000000 7.322835 0.000000
- S 0 0.000000 -0.148334 -1.695463 7.063251 -2.967059
- F 12632256 0.000000 8
- -0.296668 2.536705 0
- 7.338100 4.582435 0
- 7.874016 1.543107 0
- 7.874016 -1.543107 0
- 7.338100 -4.582435 0
- -0.296668 -2.536705 0
- 0.000000 -0.854220 0
- 0.000000 0.854220 0
- G 0 0.000000 0.200000 0.750000 0.000000 0
- G 0 0.000000 0.200000 7.125000 0.000000 0
- G 0 0.000000 0.200000 0.590272 1.825699 0
- G 0 0.000000 0.200000 6.868421 2.932706 0
- G 0 0.000000 0.200000 0.590272 -1.825699 0
- G 0 0.000000 0.200000 6.868421 -2.932706 0
- L 0 0.031250 -0.296668 2.536705 7.338100 4.582435
- L 0 0.031250 0.000000 0.854220 7.874016 1.543107
- L 0 0.031250 0.000000 -0.854220 7.874016 -1.543107
- L 0 0.031250 -0.296668 -2.536705 7.338100 -4.582435
- L 0 0.031250 0.000000 0.854220 -0.296668 2.536705
- L 0 0.031250 0.000000 0.854220 0.000000 -0.854220
- L 0 0.031250 0.000000 -0.854220 -0.296668 -2.536705
- L 0 0.031250 7.874016 1.543107 7.338100 4.582435
- L 0 0.031250 7.874016 1.543107 7.874016 -1.543107
- L 0 0.031250 7.874016 -1.543107 7.338100 -4.582435
-END
-TURNOUT N "Kato Unitrack 139.5mm Straight Extension Line 20-285"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.492126 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 5.492126 0.000000
- L 0 0.031250 0.000000 0.372299 5.492126 0.854220
- L 0 0.031250 0.000000 -0.372299 5.492126 -0.854220
- L 0 0.031250 5.492126 0.854220 5.492126 -0.854220
-END
-TURNOUT N "Kato Unitrack Curve (L) Extension Line 20-286L"
- P "Normal" 1 2 3
- E 0.000000 0.000000 270.000000
- E 5.569398 -0.415987 100.000000
- S 0 0.000000 0.000000 0.000000 0.935511 0.000000
- C 0 0 26.000000 0.935511 -26.000000 0.000000 10.000000
- S 0 0.000000 5.450363 -0.394998 5.569398 -0.415987
- L 0 0.031250 0.000000 0.372299 5.492126 0.854220
- L 0 0.031250 0.000000 -0.372299 5.492126 -0.854220
- L 0 0.031250 5.642748 0.000000 5.492126 -0.854220
- L 0 0.031250 5.642748 0.000000 5.492126 0.854220
-END
-TURNOUT N "Kato Unitrack Curve (R) Extension Line 20-286R"
- P "Normal" 1 2 3
- E 0.000000 0.000000 270.000000
- E 5.569398 0.415987 80.000000
- S 0 0.000000 0.000000 0.000000 0.935511 0.000000
- C 0 0 -26.000000 0.935511 26.000000 170.000000 10.000000
- S 0 0.000000 5.450363 0.394998 5.569398 0.415987
- L 0 0.031250 0.000000 -0.372299 5.492126 -0.854220
- L 0 0.031250 0.000000 0.372299 5.492126 0.854220
- L 0 0.031250 5.642748 0.000000 5.492126 -0.854220
- L 0 0.031250 5.642748 0.000000 5.492126 0.854220
-END
-TURNOUT N "Kato Unitrack Curve 15R 381mm 10° 381-10"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.604723 -0.227884 100.000000
- C 0 0 15.000000 0.000000 -15.000000 0.000000 10.000000
- A 11579568 0.053333 14.554226 0.000000 -15.000000 0.000000 10.000000
- A 11579568 0.053333 15.445774 0.000000 -15.000000 0.000000 10.000000
-END
-TURNOUT N "Kato Unitrack Track Turntable Section 20-283A"
- P "Normal" 1
- E 3.101756 0.546923 260.000000
- E 4.206758 0.741765 80.000000
- E 3.149606 0.000000 270.000000
- E 4.271654 0.000000 90.000000
- E 3.101756 -0.546923 280.000000
- E 4.206758 -0.741765 100.000000
- S 0 0.000000 3.101756 0.546923 4.206758 0.741765
- S 0 0.000000 3.149606 0.000000 4.271654 0.000000
- S 0 0.000000 3.101756 -0.546923 4.206758 -0.741765
- A 11579568 0.031250 3.149606 0.000000 0.000000 75.000000 30.00000
- A 11579568 0.031250 4.271654 0.000000 0.000000 75.000000 30.000000
- L 0 0.031250 3.042286 0.815178 4.126100 1.105585
- L 0 0.031250 3.042286 -0.815178 4.126100 -1.105585
-END
-TURNOUT N "Kato Unitrack 160mm Turn Table 20-283"
- P "1" 1
- P "2" 2
- P "3" 3
- P "4" 4
- P "5" 5
- P "6" 6
- P "7" 7
- P "8" 8
- P "9" 9
- P "10" 10
- P "11" 11
- P "12" 12
- P "13" 13
- P "14" 14
- P "15" 15
- P "16" 16
- P "17" 17
- P "18" 18
- E 0.000000 0.000000 0.000000
- E 0.000000 3.149606 0.000000
- E 0.546923 3.101757 10.000000
- E 1.077229 2.959662 20.000000
- E 1.574803 2.727639 30.000000
- E 2.024528 2.412738 40.000000
- E 2.412738 2.024528 50.000000
- E 2.727639 1.574803 60.000000
- E 2.959662 1.077229 70.000000
- E 3.101757 0.546923 80.000000
- E 3.149606 0.000000 90.000000
- E 3.101757 -0.546923 100.000000
- E 2.959662 -1.077229 110.000000
- E 2.727639 -1.574803 120.000000
- E 2.412738 -2.024528 130.000000
- E 2.024528 -2.412738 140.000000
- E 1.574803 -2.727639 150.000000
- E 1.077229 -2.959662 160.000000
- E 0.546923 -3.101757 170.000000
- E 0.000000 -3.149606 180.000000
- E -0.546923 -3.101757 190.000000
- E -1.077229 -2.959662 200.000000
- E -1.574803 -2.727639 210.000000
- E -2.024528 -2.412738 220.000000
- E -2.412738 -2.024528 230.000000
- E -2.727639 -1.574803 240.000000
- E -2.959662 -1.077229 250.000000
- E -3.101757 -0.546923 260.000000
- E -3.149606 0.000000 270.000000
- E -3.101757 0.546923 280.000000
- E -2.959662 1.077229 290.000000
- E -2.727639 1.574803 300.000000
- E -2.412738 2.024528 310.000000
- E -2.024528 2.412738 320.000000
- E -1.574803 2.727639 330.000000
- E -1.077229 2.959662 340.000000
- E -0.546923 3.101757 350.000000
- S 16777215 0.000000 0.000000 3.149606 0.000000 -3.149606
- S 16777215 0.000000 0.546923 3.101757 -0.546923 -3.101757
- S 16777215 0.000000 1.077229 2.959662 -1.077229 -2.959662
- S 16777215 0.000000 1.574803 2.727639 -1.574803 -2.727639
- S 16777215 0.000000 2.024528 2.412738 -2.024528 -2.412738
- S 16777215 0.000000 2.412738 2.024528 -2.412738 -2.024528
- S 16777215 0.000000 2.727639 1.574803 -2.727639 -1.574803
- S 16777215 0.000000 2.959662 1.077229 -2.959662 -1.077229
- S 16777215 0.000000 3.101757 0.546923 -3.101757 -0.546923
- S 16777215 0.000000 3.149606 0.000000 -3.149606 0.000000
- S 16777215 0.000000 3.101757 -0.546923 -3.101757 0.546923
- S 16777215 0.000000 2.959662 -1.077229 -2.959662 1.077229
- S 16777215 0.000000 2.727639 -1.574803 -2.727639 1.574803
- S 16777215 0.000000 2.412738 -2.024528 -2.412738 2.024528
- S 16777215 0.000000 2.024528 -2.412738 -2.024528 2.412738
- S 16777215 0.000000 1.574803 -2.727639 -1.574803 2.727639
- S 16777215 0.000000 1.077229 -2.959662 -1.077229 2.959662
- S 16777215 0.000000 0.546923 -3.101757 -0.546923 3.101757
- A 11579568 0.031250 3.149606 0.000000 0.000000 0.000000 360.000000
- A 11579568 0.031250 4.271654 0.000000 0.000000 0.000000 360.000000
-END
+CONTENTS Kato Unitrack N Scale
+#
+#
+##########################################################################
+##########################################################################
+
+SUBCONTENTS Kato Unitrack N-Scale Straight Track
+TURNOUT N "Kato Unitrack Straight 9.75 248mm 20-000"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.763779 0.000000 90.000000
+ S 0 0 0.000000 0.000000 9.763779 0.000000
+ L 11579568 0.053333 0.000000 0.492126 9.763779 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 9.763779 -0.492126
+ END
+TURNOUT N "Kato Unitrack Straight 7 5/16 186mm 20-010"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.322834 0.000000 90.000000
+ S 0 0 0.000000 0.000000 7.322834 0.000000
+ L 11579568 0.053333 0.000000 0.492126 7.322834 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 7.322834 -0.492126
+ END
+TURNOUT N "Kato Unitrack Straight 4 7/8 124mm 20-020"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.881889 0.000000 90.000000
+ S 0 0 0.000000 0.000000 4.881889 0.000000
+ L 11579568 0.053333 0.000000 0.492126 4.881889 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 4.881889 -0.492126
+ END
+TURNOUT N "Kato Unitrack Straight 2 1/2 64mm 20-030"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.519685 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.519685 0.000000
+ L 11579568 0.053333 0.000000 0.492126 2.519685 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 2.519685 -0.492126
+ END
+TURNOUT N "Kato Unitrack Straight 2 7/16 62mm 20-040"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.440944 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.440944 0.000000
+ L 11579568 0.053333 0.000000 0.492126 2.440944 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 2.440944 -0.492126
+ END
+TURNOUT N "Kato Unitrack Straight 1 3/4 45-5mm 20-091A"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.791339 0.000000 90.000000
+ S 0 0 0.000000 0.000000 1.791339 0.000000
+ L 11579568 0.053333 0.000000 0.492126 1.791339 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 1.791339 -0.492126
+ END
+TURNOUT N "Kato Unitrack Straight 1 1/8 29mm 20-091B"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.141732 0.000000 90.000000
+ S 0 0 0.000000 0.000000 1.141732 0.000000
+ L 11579568 0.053333 0.000000 0.492126 1.141732 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 1.141732 -0.492126
+ END
+TURNOUT N "Kato Unitrack Straight 1 19/64 33mm 20-092A"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.299213 0.000000 90.000000
+ S 0 0 0.000000 0.000000 1.299213 0.000000
+ L 11579568 0.053333 0.000000 0.492126 1.299213 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 1.299213 -0.492126
+ END
+TURNOUT N "Kato Unitrack Straight 1 1/2 38mm 20-092B"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.496063 0.000000 90.000000
+ S 0 0 0.000000 0.000000 1.496063 0.000000
+ L 11579568 0.053333 0.000000 0.492126 1.496063 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 1.496063 -0.492126
+ END
+TURNOUT N "Kato Unitrack Road Crossing 124mm 20-021"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.881889 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 4.881889 0.000000
+ L 11579568 0.053333 0.000000 0.4921260 4.881889 0.4921260
+ L 11579568 0.053333 0.000000 -0.4921260 4.881889 -0.4921260
+ L 0 0.053333 0.500000 0.548560 4.375000 0.548560
+ L 0 0.053333 4.375000 0.548560 4.375000 -0.576440
+ L 0 0.053333 4.375000 -0.576440 0.500000 -0.576440
+ L 0 0.053333 0.500000 -0.576440 0.500000 0.548560
+ L 0 0.053333 1.466667 0.133560 1.000000 -0.013107
+ L 0 0.053333 1.440000 -0.133107 1.000000 -0.026440
+ L 0 0.053333 1.440000 0.120227 3.320000 0.120227
+ L 0 0.053333 1.453333 -0.133107 3.306667 -0.119773
+ L 0 0.053333 3.306667 0.120227 3.626667 0.000227
+ L 0 0.053333 3.293333 -0.119773 3.600000 0.000227
+ END
+TURNOUT N "Kato Unitrack Mag Uncoupler 64mm 20-032"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.519685 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 2.519685 0.000000
+ L 11579568 0.053333 0.000000 0.4921260 2.519685 0.4921260
+ L 11579568 0.053333 0.000000 -0.4921260 2.519685 -0.4921260
+ L 0 0.053333 0.253333 0.133560 2.280000 0.133560
+ L 0 0.053333 2.280000 0.133560 2.280000 -0.146440
+ L 0 0.053333 2.280000 -0.146440 0.253333 -0.146440
+ L 0 0.053333 0.253333 -0.146440 0.253333 0.133560
+ END
+TURNOUT N "Kato Unitrack Feeder Track 62mm 20-041"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.440944 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.440944 0.000000
+ L 11579568 0.053333 0.000000 0.492126 2.440944 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 2.440944 -0.492126
+ L 0 0.026667 2.000000 -0.498874 2.000000 -0.698874
+ L 0 0.026667 2.000000 -0.698874 2.100000 -0.798874
+ L 0 0.026667 2.000000 -0.698874 1.900000 -0.798874
+ L 16711680 0.026667 1.800000 -0.498874 1.800000 -0.698874
+ L 16711680 0.026667 1.800000 -0.698874 1.900000 -0.798874
+ L 16711680 0.026667 1.800000 -0.698874 1.700000 -0.798874
+ END
+TURNOUT N "Kato Unitrack Snap Tk. Conv. Tk. 62mm 20-045"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.440944 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.440944 0.000000
+ L 11579568 0.053333 0.000000 0.492126 2.440944 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 2.440944 -0.492126
+ END
+TURNOUT N "Kato Unitrack 78-108mm Adjustable 20-050"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.070866 0.000000 90.000000
+ X adjustable 3.070866 4.251968
+ S 0 0 0.000000 0.000000 3.070866 0.000000
+ L 11579568 0.053333 0.000000 0.492126 3.070866 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 3.070866 -0.492126
+ END
+TURNOUT N "Kato Unitrack 3-Color Signal 4 7/8 124mm 20-605-1"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.881889 0.000000 90.000000
+ S 0 0 0.000000 0.000000 4.881889 0.000000
+ L 11579568 0.053333 0.000000 0.492126 4.881889 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 4.881889 -0.492126
+ F 11579568 0.000000 4
+ 1.948819 0.492126 0
+ 1.948819 0.992126 0
+ 2.948819 0.992126 0
+ 2.948819 0.492126 0
+ G 0 0.053333 0.100000 2.448819 0.742126 0
+ END
+TURNOUT N "Kato Unitrack Ash Pit Track 7 5/16 186mm 20-015"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.322834 0.000000 90.000000
+ S 0 0 0.000000 0.000000 7.322834 0.000000
+ L 11579568 0.053333 0.000000 0.492126 7.322834 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 7.322834 -0.492126
+ F 11579568 0.000000 4
+ 0.500000 0.150000 0
+ 6.822834 0.150000 0
+ 6.822834 -0.150000 0
+ 0.500000 -0.150000 0
+ END
+TURNOUT N "Kato Unitrack Open Pit Track 7 5/16 186mm 20-016"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.322834 0.000000 90.000000
+ S 0 0 0.000000 0.000000 7.322834 0.000000
+ L 11579568 0.053333 0.000000 0.492126 7.322834 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 7.322834 -0.492126
+ F 11579568 0.000000 4
+ 0.500000 0.150000 0
+ 6.822834 0.150000 0
+ 6.822834 -0.150000 0
+ 0.500000 -0.150000 0
+ END
+##########################################################################
+##########################################################################
+
+SUBCONTENTS Kato Unitrack N-Scale Curved Track
+TURNOUT N "Kato Unitrack Curve 4.625R 117mm 45� 20-176"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.257145 -1.349154 135.000000
+ C 0 0 4.606299 0.000000 -4.606299 0.000000 45.000000
+ A 11579568 0.053333 4.114173 0.000000 -4.606299 0.000000 45.000000
+ A 11579568 0.053333 5.098425 0.000000 -4.606299 0.000000 45.000000
+ END
+TURNOUT N "Kato Unitrack Curve 5.905R 150mm 45� 20-174"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.175827 -1.729684 135.000000
+ C 0 0 5.905512 0.000000 -5.905512 0.000000 45.000000
+ A 11579568 0.053333 5.413386 0.000000 -5.905512 0.000000 45.000000
+ A 11579568 0.053333 6.397638 0.000000 -5.905512 0.000000 45.000000
+ END
+TURNOUT N "Kato Unitrack Curve 7.204R 183mm 45� 20-172"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.094509 -2.110215 135.000000
+ C 0 0 7.204724 0.000000 -7.204724 0.000000 45.000000
+ A 11579568 0.053333 6.712598 0.000000 -7.204724 0.000000 45.000000
+ A 11579568 0.053333 7.696850 0.000000 -7.204724 0.000000 45.000000
+ END
+TURNOUT N "Kato Unitrack Curve 8.56R 216mm 45� 20-170"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.013192 -2.490745 135.000000
+ C 0 0 8.503937 0.000000 -8.503937 0.000000 45.000000
+ A 11579568 0.053333 8.011811 0.000000 -8.503937 0.000000 45.000000
+ A 11579568 0.053333 8.996063 0.000000 -8.503937 0.000000 45.000000
+ END
+TURNOUT N "Kato Unitrack Curve 8.56R 216mm 15� 20-171"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.200981 -0.289765 105.000000
+ C 0 0 8.503937 0.000000 -8.503937 0.000000 15.000000
+ A 11579568 0.053333 8.011811 0.000000 -8.503937 0.000000 15.000000
+ A 11579568 0.053333 8.996063 0.000000 -8.503937 0.000000 15.000000
+ END
+TURNOUT N "Kato Unitrack Curve 9.75R 249mm 45� 20-100"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.931874 -2.871276 135.000000
+ C 0 0 9.803150 0.000000 -9.803150 0.000000 45.000000
+ A 11579568 0.053333 9.311024 0.000000 -9.803150 0.000000 45.000000
+ A 11579568 0.053333 10.295276 0.000000 -9.803150 0.000000 45.000000
+ END
+TURNOUT N "Kato Unitrack Curve 9.75R 249mm 15� 20-101"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.537242 -0.334034 105.000000
+ C 0 0 9.803150 0.000000 -9.803150 0.000000 15.000000
+ A 11579568 0.053333 9.311024 0.000000 -9.803150 0.000000 15.000000
+ A 11579568 0.053333 10.295276 0.000000 -9.803150 0.000000 15.000000
+ END
+TURNOUT N "Kato Unitrack Curve 11R 282mm 45� 20-110"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.850556 -3.251807 135.000000
+ C 0 0 11.102362 0.000000 -11.102362 0.000000 45.000000
+ A 11579568 0.053333 10.610236 0.000000 -11.102362 0.000000 45.000000
+ A 11579568 0.053333 11.594488 0.000000 -11.102362 0.000000 45.000000
+ END
+TURNOUT N "Kato Unitrack Curve 11R 282mm 15� 20-111"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.873503 -0.378304 105.000000
+ C 0 0 11.102362 0.000000 -11.102362 0.000000 15.000000
+ A 11579568 0.053333 10.610236 0.000000 -11.102362 0.000000 15.000000
+ A 11579568 0.053333 11.594488 0.000000 -11.102362 0.000000 15.000000
+ END
+TURNOUT N "Kato Unitrack Curve 12.375R 315mm 45� 20-120"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 8.769238 -3.632337 135.000000
+ C 0 0 12.401575 0.000000 -12.401575 0.000000 45.000000
+ A 11579568 0.053333 11.909449 0.000000 -12.401575 0.000000 45.000000
+ A 11579568 0.053333 12.893701 0.000000 -12.401575 0.000000 45.000000
+ END
+TURNOUT N "Kato Unitrack Curve 12.375R 315mm 15� 20-121"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.209764 -0.422573 105.000000
+ C 0 0 12.401575 0.000000 -12.401575 0.000000 15.000000
+ A 11579568 0.053333 11.909449 0.000000 -12.401575 0.000000 15.000000
+ A 11579568 0.053333 12.893701 0.000000 -12.401575 0.000000 15.000000
+ END
+TURNOUT N "Kato Unitrack Curve 13.75R 348mm 30� 20-130"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.850394 -1.835557 120.000000
+ C 0 0 13.700787 0.000000 -13.700787 0.000000 30.000000
+ A 11579568 0.053333 13.208661 0.000000 -13.700787 0.000000 30.000000
+ A 11579568 0.053333 14.192913 0.000000 -13.700787 0.000000 30.000000
+ END
+TURNOUT N "Kato Unitrack Curve 13.75R 348mm 45� 20-132"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.687920 -4.012868 135.000000
+ C 0 0 13.700787 0.000000 -13.700787 0.000000 45.000000
+ A 11579568 0.053333 13.208661 0.000000 -13.700787 0.000000 45.000000
+ A 11579568 0.053333 14.192913 0.000000 -13.700787 0.000000 45.000000
+ END
+TURNOUT N "Kato Unitrack Curve 15R 381mm 30� 20-140"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.500000 -2.009619 120.000000
+ C 0 0 15.000000 0.000000 -15.000000 0.000000 30.000000
+ A 11579568 0.053333 14.507874 0.000000 -15.000000 0.000000 30.000000
+ A 11579568 0.053333 15.492126 0.000000 -15.000000 0.000000 30.000000
+ END
+TURNOUT N "Kato Unitrack Curve 19R 481mm 15� 20-160"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.901258 -0.645263 105.000000
+ C 0 0 18.937008 -0.000000 -18.937008 0.000000 15.000000
+ A 11579568 0.053333 18.444882 -0.000000 -18.937008 0.000000 15.000000
+ A 11579568 0.053333 19.429134 -0.000000 -18.937008 0.000000 15.000000
+ END
+TURNOUT N "Kato Unitrack Curve 28.25R 718mm 15� 20-150"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.316223 -0.963199 105.000000
+ C 0 0 28.267717 0.003000 -28.267717 0.000000 15.000000
+ A 11579568 0.053333 27.775591 0.000000 -28.267717 0.000000 15.000000
+ A 11579568 0.053333 28.759843 0.000000 -28.267717 0.000000 15.000000
+ END
+##########################################################################
+##########################################################################
+
+SUBCONTENTS Kato Unitrack N-Scale Bumper Track
+TURNOUT N "Kato Unitrack Bumper A 2 1/2 64mm 20-033"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0.000000 0.000000 0.000000 2.440944 0.000000
+ L 11579568 0.053333 0.000000 0.492126 3.740157 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 3.740157 -0.492126
+ L 11579568 0.053333 3.740157 0.492126 3.740157 -0.492126
+ L 10824234 0.053333 2.520000 0.320227 3.186667 0.320227
+ L 10824234 0.053333 3.186667 0.320227 3.186667 -0.346440
+ L 10824234 0.053333 3.186667 -0.346440 2.520000 -0.346440
+ L 10824234 0.053333 2.520000 -0.346440 2.520000 0.320227
+ L 0 0.053333 2.720000 0.080227 2.866667 0.080227
+ L 0 0.053333 2.866667 0.080227 2.866667 -0.106440
+ L 0 0.053333 2.866667 -0.106440 2.720000 -0.106440
+ L 0 0.053333 2.720000 -0.106440 2.720000 0.080227
+ END
+TURNOUT N "Kato Unitrack Bumper B 2 1/2 64mm 20-034"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0.000000 0.000000 0.000000 2.440944 0.000000
+ L 11579568 0.053333 0.000000 0.492126 3.740157 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 3.740157 -0.492126
+ L 11579568 0.053333 3.740157 0.492126 3.740157 -0.492126
+ L 0 0.053333 2.720000 0.080227 2.866667 0.080227
+ L 0 0.053333 2.866667 0.080227 2.866667 -0.106440
+ L 0 0.053333 2.866667 -0.106440 2.720000 -0.106440
+ L 0 0.053333 2.720000 -0.106440 2.720000 0.080227
+ L 9127187 0.053333 2.520000 0.306893 3.226667 0.306893
+ L 9127187 0.053333 3.226667 -0.333107 2.520000 -0.333107
+ L 9127187 0.053333 2.520000 -0.333107 2.520000 0.306893
+ L 11579568 0.053333 2.573333 0.253560 3.186667 0.253560
+ L 11579568 0.053333 3.186667 0.253560 3.186667 -0.293107
+ L 11579568 0.053333 3.186667 -0.293107 2.573333 -0.293107
+ L 11579568 0.053333 2.573333 -0.293107 2.573333 0.253560
+ END
+TURNOUT N "Kato Unitrack Bumper C 2 20-035"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0.000000 0.000000 0.000000 1.338583 0.000000
+ L 11579568 0.053333 0.000000 0.492126 1.968504 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 1.968504 -0.492126
+ L 11579568 0.053333 1.968504 0.492126 1.968504 -0.492126
+ L 0 0.053333 1.026667 0.080227 1.200000 0.080227
+ L 0 0.053333 1.200000 0.080227 1.200000 -0.093107
+ L 0 0.053333 1.200000 -0.093107 1.026667 -0.093107
+ L 0 0.053333 1.026667 -0.093107 1.026667 0.080227
+ L 0 0.053333 0.800000 0.080227 0.800000 -0.093107
+ L 0 0.040000 0.826667 -0.066440 1.146667 -0.453107
+ L 0 0.040000 0.826667 0.066893 1.160000 0.440227
+ L 0 0.040000 0.826667 -0.093107 0.573333 -0.453107
+ L 0 0.040000 0.840000 0.080227 0.586667 0.440227
+ L 0 0.053333 0.746667 -0.106440 0.746667 0.106893
+END
+TURNOUT N "Kato Unitrack Buffer Track D 35mm 20-060"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0.000000 0.000000 0.000000 1.377000 0.000000
+ L 11579568 0.053333 0.000000 0.492126 1.377953 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 1.377953 -0.492126
+ L 11579568 0.053333 1.377953 0.492126 1.377953 -0.492126
+ L 0 0.053333 0.000000 0.350000 0.000000 -0.350000
+ L 0 0.053333 0.000000 0.350000 0.450000 0.350000
+ L 0 0.053333 0.000000 -0.350000 0.450000 -0.350000
+ L 0 0.053333 0.320000 0.080227 0.466667 0.080227
+ L 0 0.053333 0.466667 0.080227 0.466667 -0.106440
+ L 0 0.053333 0.466667 -0.106440 0.320000 -0.106440
+ L 0 0.053333 0.320000 -0.106440 0.320000 0.080227
+END
+TURNOUT N "Kato Unitrack Buffer Track A 66mm 20-063"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0.000000 0.000000 0.000000 2.200000 0.000000
+ L 11579568 0.053333 0.000000 0.492126 2.598425 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 2.598425 -0.492126
+ L 11579568 0.053333 2.598425 0.492126 2.598425 -0.492126
+ F 0 0.000000 4
+ 1.800000 0.050000 0
+ 1.900000 0.050000 0
+ 1.900000 -0.050000 0
+ 1.800000 -0.050000 0
+ L 0 0.040000 1.700000 0.050000 2.100000 0.170000
+ L 0 0.040000 1.700000 -0.050000 2.100000 -0.170000
+ L 0 0.040000 1.500000 0.170000 1.700000 0.050000
+ L 0 0.040000 1.500000 -0.170000 1.700000 -0.050000
+ L 0 0.040000 1.700000 0.050000 1.700000 -0.050000
+ L 0 0.050000 1.6600000 0.075000 1.660000 -0.075000
+END
+TURNOUT N "Kato Unitrack Buffer Track C 66mm 20-064"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0.000000 0.000000 0.000000 2.200000 0.000000
+ L 11579568 0.053333 0.000000 0.492126 2.598425 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 2.598425 -0.492126
+ L 11579568 0.053333 2.598425 0.492126 2.598425 -0.492126
+ F 12632256 0.000000 4
+ 1.650000 0.450000 0
+ 2.250000 0.450000 0
+ 2.250000 -0.450000 0
+ 1.650000 -0.450000 0
+ F 0 0.000000 4
+ 1.800000 0.050000 0
+ 1.900000 0.050000 0
+ 1.900000 -0.050000 0
+ 1.800000 -0.050000 0
+END
+##########################################################################
+##########################################################################
+
+SUBCONTENTS Kato Unitrack N-Scale Turnouts
+TURNOUT N "Kato Unitrack Turnout 150-R 20-240"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 4.881889 0.000000 90.000000
+ E 4.175827 -1.729684 135.000000
+ S 0 0 0.000000 0.000000 4.881889 0.000000
+ C 0 0 5.905512 0.000000 -5.905512 0.000000 45.000000
+ L 11579568 0.053333 0.000000 0.492126 4.881889 0.492126
+ L 11579568 0.053333 3.380000 -0.492126 4.881889 -0.492126
+ A 11579568 0.053333 5.413386 0.000000 -5.905512 0.000000 45.000000
+ A 11579568 0.053333 6.397638 0.000000 -5.905512 32.500000 12.500000
+ END
+TURNOUT N "Kato Unitrack Turnout 150-L 20-241"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 4.881889 0.000000 90.000000
+ E 4.175827 1.729684 45.000000
+ S 0 0 0.000000 0.000000 4.881889 0.000000
+ C 0 0 5.905512 0.000000 5.905512 135.000000 45.000000
+ L 11579568 0.053333 0.000000 -0.492126 4.881889 -0.492126
+ L 11579568 0.053333 3.380000 0.492126 4.881889 0.492126
+ A 11579568 0.053333 5.413386 0.000000 5.905512 135.000000 45.000000
+ A 11579568 0.053333 6.397638 0.000000 5.905512 135.000000 12.500000
+ END
+TURNOUT N "Kato Unitrack Turnout 4-L 20-220"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 4.960629 0.000000 90.000000
+ E 4.881889 0.642713 75.000000
+ S 0 0 0.000000 0.000000 4.960629 0.000000
+ C 0 0 -18.862000 0.000000 18.862000 165.000000 15.000000
+ L 11579568 0.053333 0.000000 -0.492126 4.960629 -0.492126
+ A 11579568 0.053333 -18.369874 0.000000 18.862000 165.000000 15.000000
+ END
+TURNOUT N "Kato Unitrack S60L{w/4L Turnout} S60L"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.362204 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.362204 0.000000
+ L 11579568 0.053333 0.000000 0.492126 2.362204 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 2.362204 -0.492126
+ END
+TURNOUT N "Kato Unitrack Turnout 4-R 20-221"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 4.960629 0.000000 90.000000
+ E 4.881889 -0.642713 105.000000
+ S 0 0 0.000000 0.000000 4.960629 0.000000
+ C 0 0 18.862000 0.000000 -18.862000 0.000000 15.000000
+ L 11579568 0.053333 0.000000 0.492126 4.960629 0.492126
+ A 11579568 0.053333 18.369874 0.000000 -18.862000 0.000000 15.000000
+ END
+TURNOUT N "Kato Unitrack S60R{w/4R Turnout} S60R"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.362204 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.362204 0.000000
+ L 11579568 0.053333 0.000000 0.492126 2.362204 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 2.362204 -0.492126
+ END
+TURNOUT N "Kato Unitrack Turnout 2-WYE 20-222"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 4.881889 0.642713 75.000000
+ E 4.881889 -0.642713 105.000000
+ C 0 0 -18.862000 0.000000 18.862000 165.000000 15.000000
+ C 0 0 18.862000 0.000000 -18.862000 0.000000 15.000000
+ A 11579568 0.053333 -18.416226 0.000000 18.862000 165.000000 15.000000
+ A 11579568 0.053333 18.416226 0.000000 -18.862000 0.000000 15.000000
+ L 11579568 0.053333 5.000000 0.200000 5.000000 -0.200000
+ END
+TURNOUT N "Kato Unitrack Turnout 6-L 20-202"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 7.322834 0.000000 90.000000
+ E 7.322834 0.964069 75.000000
+ S 0 0 0.000000 0.000000 7.322834 0.000000
+ C 0 0 -28.268000 0.000000 28.268000 165.0000000 15.000000
+ L 11579568 0.053333 0.000000 -0.492126 7.322834 -0.492126
+ A 11579568 0.053333 27.775874 0.000000 28.268000 165.000000 15.000000
+ END
+TURNOUT N "Kato Unitrack Turnout 6-R 20-203"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 7.322834 0.000000 90.000000
+ E 7.322834 -0.964069 105.000000
+ S 0 0 0.000000 0.000000 7.322834 0.000000
+ C 0 0 28.268000 0.000000 -28.268000 0.000000 15.000000
+ L 11579568 0.053333 0.000000 0.492126 7.322834 0.492126
+ A 11579568 0.053333 27.775874 0.000000 -28.268000 0.000000 15.000000
+ END
+##########################################################################
+##########################################################################
+
+SUBCONTENTS Kato Unitrack N-Scale Crossings
+TURNOUT N "Kato Unitrack Double Crossover 20-210"
+ P "Normal" 1 2 3 0 4 5 6
+ P "Reverse" 1 7 8 9 6 0 4 10 11 12 3
+ E 0.000000 0.000000 270.000000
+ E 12.204724 0.000000 90.000000
+ E 0.000000 -1.299212 270.000000
+ E 12.204724 -1.299212 90.000000
+ S 0 0 0.000000 0.000000 0.632000 0.000000
+ S 0 0 0.632000 0.000000 11.555000 0.000000
+ S 0 0 11.555000 0.000000 12.204724 0.000000
+ S 0 0 0.000000 -1.299212 0.632000 -1.299212
+ S 0 0 0.632000 -1.299212 11.555000 -1.299212
+ S 0 0 11.555000 -1.299212 12.204724 -1.299212
+ C 0 0 22.960000 0.631000 -22.960000 0.003000 12.880000
+ S 0 0 5.750000 -0.578000 6.438000 -0.735000
+ C 0 0 -22.960000 11.497000 21.661000 179.855000 12.874000
+ C 0 0 -22.960000 0.691000 21.661000 167.271000 12.876000
+ S 0 0 5.750000 -0.735000 6.438000 -0.578000
+ C 0 0 22.960000 11.557000 -22.960000 347.117000 12.878000
+ L 11579568 0.053333 0.000000 0.492126 12.204724 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 0.5 -0.492126
+ L 11579568 0.053333 0.000000 -0.825878 0.5 -0.825878
+ L 11579568 0.053333 0.5 -0.492126 0.5 -0.825878
+ L 11579568 0.053333 12.204724 -0.492126 11.704724 -0.492126
+ L 11579568 0.053333 12.204724 -0.825878 11.704724 -0.825878
+ L 11579568 0.053333 11.704724 -0.492126 11.704724 -0.825878
+ L 11579568 0.053333 0.000000 -1.772546 12.204724 -1.772546
+ END
+TURNOUT N "Kato Unitrack Dbl Trk Single Crossover (left) 9.75 248mm 20-230"
+ P "Normal" 1 2 0 3 4
+ P "Reverse" 1 5 6 7 4
+ E 0.000000 0.000000 270.000000
+ E 9.763779 0.000000 90.000000
+ E 0.000000 1.299212 270.000000
+ E 9.763779 1.299212 90.000000
+ S 0 0.000000 0.000000 0.000000 0.617287 0.000000
+ S 0 0.000000 0.617287 0.000000 9.763779 0.000000
+ S 0 0.000000 0.000000 1.299212 9.146492 1.299212
+ S 0 0.000000 9.146492 1.299212 9.763779 1.299212
+ C 0 0.000000 -14.226684 0.617306 14.226684 163.988842 16.011234
+ S 0 0.000000 4.541371 0.551886 5.222408 0.747326
+ C 0 0.000000 14.226684 9.146510 -12.927467 343.988842 16.011234
+ L 11579568 0.053333 0.000000 -0.445774 9.763799 -0.445774
+ L 11579568 0.053333 0.000000 1.744986 9.763799 1.744986
+ END
+TURNOUT N "Kato Unitrack Dbl Trk Single Crossover (Right) 9.75 248mm 20-231"
+ P "Normal" 1 2 0 3 4
+ P "Reverse" 3 5 6 7 2
+ E 0.000000 0.000000 270.000000
+ E 9.763799 0.000000 90.000000
+ E 0.000000 1.299212 270.000000
+ E 9.763799 1.299212 90.000000
+ S 0 0.000000 0.000000 0.000000 9.146512 0.000000
+ S 0 0.000000 9.146512 0.000000 9.763799 0.000000
+ S 0 0.000000 0.000000 1.299212 0.617287 1.299212
+ S 0 0.000000 0.617287 1.299212 9.763799 1.299212
+ C 0 0.000000 14.226749 0.617230 -12.927537 0.000076 16.011200
+ S 0 0.000000 4.541380 0.747326 5.222419 0.551886
+ C 0 0.000000 -14.226749 9.146530 14.226744 180.000076 16.011200
+ L 11579568 0.053333 0.000000 -0.445774 9.763799 -0.445774
+ L 11579568 0.053333 0.000000 1.744986 9.763799 1.744986
+ END
+TURNOUT N "Kato Unitrack Crossing 15� X15R 20-301"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 7.322834 0.000000 90.000000
+ E 0.000000 0.964069 285.000000
+ E 7.322834 -0.964069 105.000000
+ S 0 0 0.000000 0.000000 7.322834 0.000000
+ S 0 0 0.000000 0.964069 7.322834 -0.964069
+ L 11579568 0.053333 3.71 0.492126 7.322834 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 3.62 -0.492126
+ L 11579568 0.053333 0.12 1.43 3.71 0.492126
+ L 11579568 0.053333 7.20 -1.43 3.62 -0.492126
+ END
+TURNOUT N "Kato Unitrack Crossing 15� X15L 20-300"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 7.322834 0.000000 90.000000
+ E 0.000000 -0.964069 255.000000
+ E 7.322834 0.964069 75.000000
+ S 0 0 0.000000 0.000000 7.322834 0.000000
+ S 0 0 0.000000 -0.964069 7.322834 0.964069
+ L 11579568 0.053333 3.71 -0.492126 7.322834 -0.492126
+ L 11579568 0.053333 0.000000 0.492126 3.62 0.492126
+ L 11579568 0.053333 0.12 -1.43 3.71 -0.492126
+ L 11579568 0.053333 7.20 1.43 3.62 0.492126
+ END
+TURNOUT N "Kato Unitrack Crossing 90� w/S45.5 20-320"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 4.881889 0.000000 90.000000
+ E 2.440944 2.440944 0.000000
+ E 2.440944 -2.440944 180.000000
+ S 0 0 0.000000 0.000000 4.881889 0.000000
+ S 0 0 2.440944 2.440944 2.440944 -2.440944
+ L 11579568 0.053333 0.000000 0.492126 1.967610 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 1.967610 -0.492126
+ L 11579568 0.053333 2.914278 0.492126 4.881889 0.492126
+ L 11579568 0.053333 2.914278 -0.492126 4.881889 -0.492126
+ L 11579568 0.053333 1.967610 -2.440944 1.967610 -0.500000
+ L 11579568 0.053333 2.914278 -2.440944 2.914278 -0.500000
+ L 11579568 0.053333 1.967610 2.440944 1.967610 0.500000
+ L 11579568 0.053333 2.914278 2.440944 2.914278 0.500000
+ END
+TURNOUT N "Kato Unitrack Crossing 90� w/o S45.5 20-320"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 1.299212 0.000000 90.000000
+ E 0.649606 0.649606 0.000000
+ E 0.649606 -0.649606 180.000000
+ S 0 0 0.000000 0.000000 1.299212 0.000000
+ S 0 0 0.649606 0.649606 0.649606 -0.650000
+ L 11579568 0.053333 0.000000 0.492126 0.176272 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 0.176272 -0.492126
+ L 11579568 0.053333 1.122940 0.492126 1.299212 0.492126
+ L 11579568 0.053333 1.122940 -0.492126 1.299212 -0.492126
+ L 11579568 0.053333 0.176272 -0.649606 0.176272 -0.492126
+ L 11579568 0.053333 1.122940 -0.649606 1.122940 -0.492126
+ L 11579568 0.053333 0.176272 0.649606 0.176272 0.492126
+ L 11579568 0.053333 1.122940 0.649606 1.122940 0.492126
+ END
+TURNOUT N "Kato Unitrack S45.5 (incl w/20-320) "
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.791339 0.000000 90.000000
+ S 0 0 0.000000 0.000000 1.791339 0.000000
+ L 11579568 0.053333 0.000000 0.492126 1.791339 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 1.791339 -0.492126
+ END
+##########################################################################
+##########################################################################
+
+SUBCONTENTS Kato Unitrack N-Scale Single Track Viaducts - Straights
+TURNOUT N "Kato Unitrack Viaduct Straight 9.75 248mm 20-400"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.763779 0.000000 90.000000
+ S 0 0 0.000000 0.000000 9.763779 0.000000
+ L 0 0.053333 0.000000 0.47334 9.763799 0.47334
+ L 0 0.053333 0.000000 -0.47334 9.763799 -0.47334
+ END
+TURNOUT N "Kato Unitrack Viaduct Straight 7.312 186mm 20-410"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.322834 0.000000 90.000000
+ S 0 0 0.000000 0.000000 7.322834 0.000000
+ L 0 0.053333 0.000000 0.47334 7.322834 0.47334
+ L 0 0.053333 0.000000 -0.47334 7.322834 -0.47334
+ END
+TURNOUT N "Kato Unitrack Viaduct Straight 4.875 124mm 20-420"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.881889 0.000000 90.000000
+ S 0 0 0.000000 0.000000 4.881889 0.000000
+ L 0 0.053333 0.000000 0.47334 4.881889 0.47334
+ L 0 0.053333 0.000000 -0.47334 4.881889 -0.47334
+ END
+TURNOUT N "Kato Unitrack Viaduct Straight(Platform) 4.875 124mm 20-421"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.881889 0.000000 90.000000
+ S 0 0 0.000000 0.000000 4.881889 0.000000
+ L 0 0.053333 0.000000 0.47334 4.881889 0.47334
+ L 0 0.053333 0.000000 -0.47334 4.881889 -0.47334
+ L 0 0.040000 3.000000 -0.526440 3.000000 -0.826440
+ L 0 0.040000 3.000000 -0.826440 1.900000 -0.826440
+ L 0 0.040000 1.900000 -0.826440 1.900000 -0.526440
+ END
+TURNOUT N "Kato Unitrack Viaduct Straight 2.4375 62mm 20-440"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.440944 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.440944 0.000000
+ L 0 0.053333 0.000000 0.47334 2.440944 0.47334
+ L 0 0.053333 0.000000 -0.47334 2.440944 -0.47334
+ END
+##########################################################################
+##########################################################################
+
+SUBCONTENTS Kato Unitrack N-Scale Single Track Viaducts - Curves
+TURNOUT N "Kato Unitrack Viaduct Curve 9.75R 249mm 45� Curve 20-505"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.931874 -2.871276 135.000000
+ C 0 0 9.803150 0.000000 -9.803150 0.000000 45.000000
+ A 0 0.053333 9.329810 0.000000 -9.803150 0.000000 45.000000
+ A 0 0.053333 10.276490 0.000000 -9.803150 0.000000 45.000000
+ END
+TURNOUT N "Kato Unitrack Viaduct Curve 11R 282mm 45� 20-510"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.850556 -3.251807 135.000000
+ C 0 0 11.102362 0.000000 -11.102362 0.000000 45.000000
+ A 0 0.053333 10.629022 0.000000 -11.102362 0.000000 45.000000
+ A 0 0.053333 11.575702 0.000000 -11.102362 0.000000 45.000000
+ END
+TURNOUT N "Kato Unitrack Viaduct Curve 12.375R 315mm 45� 20-520"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 8.769238 -3.632337 135.000000
+ C 0 0 12.401575 0.000000 -12.401575 0.000000 45.000000
+ A 0 0.053333 11.928235 0.000000 -12.401575 0.000000 45.000000
+ A 0 0.053333 12.874915 0.000000 -12.401575 0.000000 45.000000
+ END
+TURNOUT N "Kato Unitrack Viaduct Curve 13.75R 348mm 45� 20-530"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.687920 -4.012868 135.000000
+ C 0 0 13.700787 0.000000 -13.700787 0.000000 45.000000
+ A 0 0.053333 13.227447 0.000000 -13.700787 0.000000 45.000000
+ A 0 0.053333 14.174127 0.000000 -13.700787 0.000000 45.000000
+ END
+TURNOUT N "Kato Unitrack Viaduct Curve 13.75R 348mm 30� 20-531"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.850394 -1.835557 120.000000
+ C 0 0 13.700787 0.000000 -13.700787 0.000000 30.000000
+ A 0 0.053333 13.227447 0.000000 -13.700787 0.000000 30.000000
+ A 0 0.053333 14.174127 0.000000 -13.700787 0.000000 30.000000
+ END
+TURNOUT N "Kato Unitrack Viaduct Curve 15R 381mm 30� 20-540"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.500000 -2.009619 120.000000
+ C 0 0 15.000000 0.000000 -15.000000 0.000000 30.000000
+ A 0 0.053333 14.526660 0.000000 -15.000000 0.000000 30.000000
+ A 0 0.053333 15.473340 0.000000 -15.000000 0.000000 30.000000
+ END
+##########################################################################
+##########################################################################
+
+SUBCONTENTS Kato Unitrack N-Scale Double Track Viaducts - Straights
+TURNOUT N "Kato Unitrack Double Viaduct Straight 9.75 248mm 20-401"
+ P "Normal" 1 0 2
+ E 0.000000 0.649606 270.000000
+ E 9.763779 0.649606 90.000000
+ E 0.000000 -0.649606 270.000000
+ E 9.763779 -0.649606 90.000000
+ S 0 0 0.000000 0.649606 9.763779 0.649606
+ S 0 0 0.000000 -0.649606 9.763779 -0.649606
+ L 0 0.053333 0.000000 1.122946 9.763779 1.122946
+ L 0 0.053333 0.000000 -1.122946 9.763779 -1.122946
+ END
+TURNOUT N "Kato Unitrack Double Viaduct Straight 7 5/16 186mm 20-411"
+ P "Normal" 1 0 2
+ E 0.000000 0.649606 270.000000
+ E 7.322834 0.649606 90.000000
+ E 0.000000 -0.649606 270.000000
+ E 7.322834 -0.649606 90.000000
+ S 0 0 0.000000 0.649606 7.322834 0.649606
+ S 0 0 0.000000 -0.649606 7.322834 -0.649606
+ L 0 0.053333 0.000000 1.122946 7.322834 1.122946
+ L 0 0.053333 0.000000 -1.122946 7.322834 -1.122946
+ END
+TURNOUT N "Kato Unitrack Double Viaduct Straight 4.875 124mm 20-422"
+ P "Normal" 1 0 2
+ E 0.000000 0.649606 270.000000
+ E 4.881889 0.649606 90.000000
+ E 0.000000 -0.649606 270.000000
+ E 4.881889 -0.649606 90.000000
+ S 0 0 0.000000 0.649606 4.881889 0.649606
+ S 0 0 0.000000 -0.649606 4.881889 -0.649606
+ L 0 0.053333 0.000000 1.122946 4.881889 1.122946
+ L 0 0.053333 0.000000 -1.122946 4.881889 -1.122946
+ END
+##########################################################################
+##########################################################################
+
+SUBCONTENTS Kato Unitrack N-Scale CS Double Track Viaducts - Curves
+TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Viaduct Curve 16.3,15R 414/381mm 45� 20-544"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 10.606602 -4.393398 135.000000
+ E 0.000000 1.299213 270.000000
+ E 11.525284 -3.474716 135.000000
+ C 0 0 15.000000 0.000000 -15.000000 0.000000 45.000000
+ C 0 0 16.299213 0.000000 -15.000000 0.000000 45.000000
+ A 0 0.053333 14.526660 0.000000 -15.000000 0.000000 45.000000
+ A 0 0.053333 16.772553 0.000000 -15.000000 0.000000 45.000000
+ END
+TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Viaduct Easement Curve (R) Appr 16.3/15R 414/381mm 22.5� 20-545 Right"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 6.237438 -1.240704 112.500000
+ E 0.000000 -1.299212 270.000000
+ E 5.740251 -2.441019 112.500000
+ C 0 0 16.299212 0.000000 -16.299212 0.000000 22.500000
+ C 0 0 15.000000 0.000000 -16.299212 0.000000 22.500000
+ A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 22.500000
+ A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 22.500000
+ END
+TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Viaduct Easement Curve (L) Appr 16.3/15R 414/381mm 22.5� 20-545 Left"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 6.237438 -1.240704 112.500000
+ E 0.000000 -1.299212 270.000000
+ E 5.740251 -2.441019 112.500000
+ C 0 0 16.299212 0.000000 -16.299212 0.000000 22.500000
+ C 0 0 15.000000 0.000000 -16.299212 0.000000 22.500000
+ A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 22.500000
+ A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 22.500000
+ END
+##########################################################################
+##########################################################################
+
+SUBCONTENTS Kato Unitrack N-Scale GL CS Double Track - Straights
+TURNOUT N "Kato Unitrack CS Dbl Trk Straight 9.75 248mm 20-004"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 9.763799 0.000000 90.000000
+ E 0.000000 -1.299212 270.000000
+ E 9.763799 -1.299212 90.000000
+ S 0 0 0.000000 0.000000 9.763799 0.000000
+ S 0 0 0.000000 -1.299212 9.763799 -1.299212
+ L 11579568 0.053333 0.000000 0.492126 9.763799 0.492126
+ L 11579568 0.053333 0.000000 -1.744986 9.763799 -1.744986
+ END
+TURNOUT N "Kato Unitrack CS Dbl Trk Straight 7 5/16 186mm 20-012"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 7.322834 0.000000 90.000000
+ E 0.000000 -1.299212 270.000000
+ E 7.322834 -1.299212 90.000000
+ S 0 0 0.000000 0.000000 7.322834 0.000000
+ S 0 0 0.000000 -1.299212 7.322834 -1.299212
+ L 11579568 0.053333 0.000000 0.492126 7.322834 0.492126
+ L 11579568 0.053333 0.000000 -1.744986 7.322834 -1.744986
+ END
+TURNOUT N "Kato Unitrack CS Dbl Trk Straight 4 7/8 124mm 20-023"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 4.881889 0.000000 90.000000
+ E 0.000000 -1.299212 270.000000
+ E 4.881889 -1.299212 90.000000
+ S 0 0 0.000000 0.000000 4.881889 0.000000
+ S 0 0 0.000000 -1.299212 4.881889 -1.299212
+ L 11579568 0.053333 0.000000 0.492126 4.881889 0.492126
+ L 11579568 0.053333 0.000000 -1.744986 4.881889 -1.744986
+ END
+TURNOUT N "Kato Unitrack CS Dbl Trk Straight 2 7/16 62mm 20-042"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 2.440944 0.000000 90.000000
+ E 0.000000 -1.299212 270.000000
+ E 2.440944 -1.299212 90.000000
+ S 0 0 0.000000 0.000000 2.440944 0.000000
+ S 0 0 0.000000 -1.299212 2.440944 -1.299212
+ L 11579568 0.053333 0.000000 0.492126 2.440944 0.492126
+ L 11579568 0.053333 0.000000 -1.744986 2.440944 -1.744986
+ END
+TURNOUT N "Kato Unitrack CS Dbl Trk Feeder Track 62mm 20-043"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 2.440944 0.000000 90.000000
+ E 0.000000 -1.299212 270.000000
+ E 2.440944 -1.299212 90.000000
+ S 0 0 0.000000 0.000000 2.440944 0.000000
+ S 0 0 0.000000 -1.299212 2.440944 -1.299212
+ L 11579568 0.053333 0.000000 0.492126 2.440944 0.492126
+ L 11579568 0.053333 0.000000 -1.744986 2.440944 -1.744986
+ L 0 0.026667 2.000000 -1.798086 2.000000 -1.998086
+ L 0 0.026667 2.000000 -1.998086 2.100000 -2.098086
+ L 0 0.026667 2.000000 -1.998086 1.900000 -2.098086
+ L 16711680 0.026667 1.800000 -1.798086 1.800000 -1.998086
+ L 16711680 0.026667 1.800000 -1.998086 1.900000 -2.098086
+ L 16711680 0.026667 1.800000 -1.998086 1.700000 -2.098086
+ END
+##########################################################################
+##########################################################################
+
+SUBCONTENTS Kato Unitrack N-Scale GL CS Double Track - Curves
+TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Curve 16.3/15R 414/381mm 45� 20-181"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 11.525283 -4.773929 135.000000
+ E 0.000000 -1.299212 270.000000
+ E 10.606602 -5.692610 135.000000
+ C 0 0 16.299212 0.000000 -16.299212 0.000000 45.000000
+ C 0 0 15.000000 0.000000 -16.299212 0.000000 45.000000
+ A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 45.000000
+ A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 45.000000
+ END
+TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Easement Curve (R) Appr 16.3/15R 414/381mm 22.5� 20-182 Right"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 6.237438 -1.240704 112.500000
+ E 0.000000 -1.299212 270.000000
+ E 5.740251 -2.441019 112.500000
+ C 0 0 16.299212 0.000000 -16.299212 0.000000 22.500000
+ C 0 0 15.000000 0.000000 -16.299212 0.000000 22.500000
+ A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 22.500000
+ A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 22.500000
+ END
+TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Easement Curve (L) Appr 16.3/15R 414/381mm 22.5� 20-182 Left"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 6.237438 -1.240704 112.500000
+ E 0.000000 -1.299212 270.000000
+ E 5.740251 -2.441019 112.500000
+ C 0 0 16.299212 0.000000 -16.299212 0.000000 22.500000
+ C 0 0 15.000000 0.000000 -16.299212 0.000000 22.500000
+ A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 22.500000
+ A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 22.500000
+ END
+TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Curve 12.375/11R 315/282mm 45� 20-183"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 0.000000 -1.299212 270.000000
+ E 8.769238 -3.632337 135.000000
+ E 7.850556 -4.551019 135.000000
+ C 0 0 12.401575 0.000000 -12.401575 0.000000 45.000000
+ C 0 0 11.102362 0.000000 -12.401575 0.000000 45.000000
+ A 11579568 0.053333 12.847349 0.000000 -12.401575 0.000000 45.000000
+ A 11579568 0.053333 10.656588 0.000000 -12.401575 0.000000 45.000000
+ END
+TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Easement Curve 12.375/11R 315/282mm 22.5� 20-184 Right"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 0.000000 -1.299212 270.000000
+ E 4.745877 -0.944014 112.500000
+ E 4.248690 -2.144330 112.500000
+ C 0 0 12.401575 0.000000 -12.401575 0.000000 22.500000
+ C 0 0 11.102362 0.000000 -12.401575 0.000000 22.500000
+ A 11579568 0.053333 12.847349 0.000000 -12.401575 0.000000 22.500000
+ A 11579568 0.053333 10.656588 0.000000 -12.401575 0.000000 22.500000
+ END
+TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Easement Curve 12.375/11R 315/282mm 22.5� 20-184 Left"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 0.000000 -1.299212 270.000000
+ E 4.745877 -0.944014 112.500000
+ E 4.248690 -2.144330 112.500000
+ C 0 0 12.401575 0.000000 -12.401575 0.000000 22.500000
+ C 0 0 11.102362 0.000000 -12.401575 0.000000 22.500000
+ A 11579568 0.053333 12.847349 0.000000 -12.401575 0.000000 22.500000
+ A 11579568 0.053333 10.656588 0.000000 -12.401575 0.000000 22.500000
+ END
+TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Curve 18.875/17.625R 480/447mm 45� 20-185"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 13.362648 -5.534990 135.000000
+ E 0.000000 -1.299212 270.000000
+ E 12.443966 -6.453672 135.000000
+ C 0 0 18.897638 0.000000 -18.897638 0.000000 45.000000
+ C 0 0 17.598425 0.000000 -18.897638 0.000000 45.000000
+ A 11579568 0.053333 19.343412 0.000000 -18.897638 0.000000 45.000000
+ A 11579568 0.053333 17.152651 0.000000 -18.897638 0.000000 45.000000
+ END
+TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Easement Curve (R) Appr 18.875/17.625R 480/447mm 22.5� 20-186 Right"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 7.231813 -1.438497 112.500000
+ E 0.000000 -1.299212 270.000000
+ E 6.734626 -2.638813 112.500000
+ C 0 0 18.897638 0.000000 -18.897638 0.000000 22.500000
+ C 0 0 17.598425 0.000000 -18.897638 0.000000 22.500000
+ A 11579568 0.053333 19.343412 0.000000 -18.897638 0.000000 22.500000
+ A 11579568 0.053333 17.152651 0.000000 -18.897638 0.000000 22.500000
+ END
+TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Easement Curve (L) Appr 18.875/17.625R 480/447mm 22.5� 20-186 Left"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 7.231813 -1.438497 112.500000
+ E 0.000000 -1.299212 270.000000
+ E 6.734626 -2.638813 112.500000
+ C 0 0 18.897638 0.000000 -18.897638 0.000000 22.500000
+ C 0 0 17.598425 0.000000 -18.897638 0.000000 22.500000
+ A 11579568 0.053333 19.343412 0.000000 -18.897638 0.000000 22.500000
+ A 11579568 0.053333 17.152651 0.000000 -18.897638 0.000000 22.500000
+ END
+
+##########################################################################
+##########################################################################
+
+SUBCONTENTS Kato Unitrack N-Scale V-15 Double Track Widening Sections
+TURNOUT N "Kato Unitrack CS Dbl Trk Widening Section 310mm 20-051 Left"
+ P "Normal" 1 0 2 -3 4 5 6
+ E 0.000000 0.000000 270.000000
+ E 12.204724 0.000000 90.000000
+ E 0.000000 1.299212 270.000000
+ E 12.204724 2.598425 90.000000
+ S 0 0 0.000000 0.000000 12.204724 0.000000
+ S 0 0 0.000000 1.299212 0.980334 1.299212
+ C 0 0 17.598425 0.980334 18.897637 169.500000 10.500000
+ S 0 0 4.187392 1.593899 8.017332 2.303737
+ C 0 0 17.598425 11.224390 -15.000001 349.500000 10.500000
+ S 0 0 11.224390 2.598425 12.204724 2.598425
+ L 11579568 0.053333 0.000000 -0.492126 12.204724 -0.492126
+ L 11579568 0.053333 0.000000 1.744986 0.980334 1.744986
+ A 11579568 0.053333 17.152651 0.980334 18.897637 169.500000 10.500000
+ L 11579568 0.053333 4.187392 2.039673 8.017332 2.749511
+ A 11579568 0.053333 18.044199 11.224390 -15.000001 349.500000 10.500000
+ L 11579568 0.053333 11.224390 3.044199 12.204724 3.044199
+ L 11579568 0.053333 11.704724 0.492126 12.204724 0.492126
+ L 11579568 0.053333 11.704724 0.492126 11.704724 2.152651
+ L 11579568 0.053333 11.704724 2.152651 12.204724 2.152651
+ END
+TURNOUT N "Kato Unitrack CS Dbl Trk Widening Section 310mm 20-052 Right"
+ P "Normal" 1 0 2 3 4 -5 6
+ E 0.000000 0.000000 270.000000
+ E 12.204724 0.000000 90.000000
+ E 0.000000 -1.299212 270.000000
+ E 12.204724 -2.598425 90.000000
+ S 0 0 0.000000 0.000000 12.204724 0.000000
+ S 0 0 0.000000 -1.299212 0.980334 -1.299212
+ C 0 0 17.598425 0.980334 -18.897637 0.000000 10.500000
+ S 0 0 4.187392 -1.593899 8.017332 -2.303737
+ C 0 0 17.598425 11.224390 15.000001 180.000000 10.500000
+ S 0 0 11.224390 -2.598425 12.204724 -2.598425
+ L 11579568 0.053333 0.000000 0.492126 12.204724 0.492126
+ L 11579568 0.053333 0.000000 -1.744986 0.980334 -1.744986
+ A 11579568 0.053333 17.152651 0.980334 -18.897637 0.000000 10.500000
+ L 11579568 0.053333 4.187392 -2.039673 8.017332 -2.749511
+ A 11579568 0.053333 18.044199 11.224390 15.000001 180.000000 10.500000
+ L 11579568 0.053333 11.224390 -3.044199 12.204724 -3.044199
+ L 11579568 0.053333 11.704724 -0.492126 12.204724 -0.492126
+ L 11579568 0.053333 11.704724 -0.492126 11.704724 -2.152651
+ L 11579568 0.053333 11.704724 -2.152651 12.204724 -2.152651
+ END
+##########################################################################
+##########################################################################
+
+SUBCONTENTS Kato Unitrack N-Scale Conc Sleeper Straight Track
+TURNOUT N "Kato Unitrack CS Trk Straight 9.75 248mm 20-875"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.763779 0.000000 90.000000
+ S 0 0 0.000000 0.000000 9.763779 0.000000
+ L 11579568 0.053333 0.000000 0.492126 9.763779 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 9.763779 -0.492126
+ END
+TURNOUT N "Kato Unitrack CS Trk Straight 4 7/8 124mm 20-XXX"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.881889 0.000000 90.000000
+ S 0 0 0.000000 0.000000 4.881889 0.000000
+ L 11579568 0.053333 0.000000 0.492126 4.881889 0.492126
+ L 11579568 0.053333 0.000000 -0.492126 4.881889 -0.492126
+ END
+##########################################################################
+##########################################################################
+
+SUBCONTENTS Kato Unitrack N-Scale Bridges
+TURNOUT N "Kato Unitrack Dbl. Track Truss Bridge 9.75 248mm 20-435/6/7/8"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 9.763779 0.000000 90.000000
+ E 0.000000 -1.299212 270.000000
+ E 9.763779 -1.299212 90.000000
+ S 0 0 0.000000 0.000000 9.763779 0.000000
+ S 0 0 0.000000 -1.299212 9.763779 -1.299212
+ L 0 0.053333 0.000000 0.47334 9.763779 0.47334
+ L 0 0.053333 0.000000 -1.772552 9.763779 -1.772552
+ L 0 0.053333 1.220474 -1.772552 1.220474 0.47334
+ L 0 0.053333 1.220474 -1.772552 2.440948 0.47334
+ L 0 0.053333 2.440948 -1.772552 1.220474 0.47334
+ L 0 0.053333 2.440948 -1.772552 2.440948 0.47334
+ L 0 0.053333 2.440948 -1.772552 3.661422 0.47334
+ L 0 0.053333 3.661422 -1.772552 2.440948 0.47334
+ L 0 0.053333 3.661422 -1.772552 3.661422 0.47334
+ L 0 0.053333 3.661422 -1.772552 4.881896 0.47334
+ L 0 0.053333 4.881896 -1.772552 3.661422 0.47334
+ L 0 0.053333 4.881896 -1.772552 4.881896 0.47334
+ L 0 0.053333 4.881896 -1.772552 6.102370 0.47334
+ L 0 0.053333 6.102370 -1.772552 4.881896 0.47334
+ L 0 0.053333 6.102370 -1.772552 6.102370 0.47334
+ L 0 0.053333 6.102370 -1.772552 7.322844 0.47334
+ L 0 0.053333 7.322844 -1.772552 6.102370 0.47334
+ L 0 0.053333 7.322844 -1.772552 7.322844 0.47334
+ L 0 0.053333 7.322844 -1.772552 8.543318 0.47334
+ L 0 0.053333 8.543318 -1.772552 7.322844 0.47334
+ L 0 0.053333 8.543318 -1.772552 8.543318 0.47334
+ END
+TURNOUT N "Kato Unitrack Single Track Truss Bridge 9.75 248mm 20-430/1/2/3/4"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.763779 0.000000 90.000000
+ S 0 0 0.000000 0.000000 9.763779 0.000000
+ L 0 0.053333 0.000000 0.47334 9.763779 0.47334
+ L 0 0.053333 0.000000 -0.47334 9.763779 -0.47334
+ L 0 0.053333 1.220474 -0.47334 1.220474 0.47334
+ L 0 0.053333 1.220474 -0.47334 2.440948 0.47334
+ L 0 0.053333 2.440948 -0.47334 1.220474 0.47334
+ L 0 0.053333 2.440948 -0.47334 2.440948 0.47334
+ L 0 0.053333 2.440948 -0.47334 3.661422 0.47334
+ L 0 0.053333 3.661422 -0.47334 2.440948 0.47334
+ L 0 0.053333 3.661422 -0.47334 3.661422 0.47334
+ L 0 0.053333 3.661422 -0.47334 4.881896 0.47334
+ L 0 0.053333 4.881896 -0.47334 3.661422 0.47334
+ L 0 0.053333 4.881896 -0.47334 4.881896 0.47334
+ L 0 0.053333 4.881896 -0.47334 6.102370 0.47334
+ L 0 0.053333 6.102370 -0.47334 4.881896 0.47334
+ L 0 0.053333 6.102370 -0.47334 6.102370 0.47334
+ L 0 0.053333 6.102370 -0.47334 7.322844 0.47334
+ L 0 0.053333 7.322844 -0.47334 6.102370 0.47334
+ L 0 0.053333 7.322844 -0.47334 7.322844 0.47334
+ L 0 0.053333 7.322844 -0.47334 8.543318 0.47334
+ L 0 0.053333 8.543318 -0.47334 7.322844 0.47334
+ L 0 0.053333 8.543318 -0.47334 8.543318 0.47334
+ END
+TURNOUT N "Kato Unitrack Single Track Plate Grider Bridge 7 5/16 186mm 20-450/1/2/3/4"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.322834 0.000000 90.000000
+ S 0 0 0.000000 0.000000 7.322834 0.000000
+ L 0 0.053333 0.000000 0.47334 7.322834 0.47334
+ L 0 0.053333 0.000000 -0.47334 7.322834 -0.47334
+ END
+TURNOUT N "Kato Unitrack Double Track Plate Grider Bridge 7 5/16 186mm 20-455/6/7/8"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 7.322834 0.000000 90.000000
+ E 0.000000 -1.299212 270.000000
+ E 7.322834 -1.299212 90.000000
+ S 0 0 0.000000 0.000000 7.322834 0.000000
+ S 0 0 0.000000 -1.299212 7.322834 -1.299212
+ L 0 0.053333 0.000000 0.47334 7.322834 0.47334
+ L 0 0.053333 0.000000 -0.649606 7.322834 -0.649606
+ L 0 0.053333 0.000000 -1.772552 7.322834 -1.772552
+ END
+TURNOUT N "Kato Unitrack Deck Plate Grider Bridge 4 7/8 124mm 20-460/1/2/3/4"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.881889 0.000000 90.000000
+ S 0 0 0.000000 0.000000 4.881889 0.000000
+ L 0 0.053333 0.000000 0.47334 4.881889 0.47334
+ L 0 0.053333 0.000000 -0.47334 4.881889 -0.47334
+ END
+TURNOUT N "Kato Unitrack Curve Deck Plate Grider Bridge 17 5/8 448mm 15d 20-823"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.564997 -0.600993 105.000000
+ C 0 0 17.637795 0.000000 -17.637795 0.000000 15.000000
+ A 0 0.053333 17.164455 0.000000 -17.637795 0.000000 15.000000
+ A 0 0.053333 18.111135 0.000000 -17.637795 0.000000 15.000000
+ END
+##########################################################################
+##########################################################################
+
+SUBCONTENTS Kato Unitrack N-Scale Structures
+STRUCTURE N "Kato Unitrack Pier 23-015"
+ X pier 0.590551 "1" 0.984251 "2" 1.377952 "3" 1.771653 "4" 1.968503 "5"
+ L 0 0.000000 -0.250000 -0.5 0.250000 -0.5
+ L 0 0.000000 0.250000 -0.5 0.250000 0.5
+ L 0 0.000000 0.250000 0.5 -0.250000 0.5
+ L 0 0.000000 -0.250000 0.5 -0.250000 -0.5
+ A 0 0.000000 0.250000 -0.000000 0.50000 270.000000 180.000000
+ A 0 0.000000 0.250000 -0.000000 -0.50000 90.000000 180.000000
+ END
+STRUCTURE N "Kato Unitrack Pier 23-016"
+ X pier 1.968503 "5"
+ L 7368826 0.040000 -0.75 -0.6 0.75 -0.6
+ L 7368826 0.040000 0.75 -0.6 0.75 1.899212
+ L 7368826 0.040000 0.75 1.899212 -0.75 1.899212
+ L 7368826 0.040000 -0.75 1.899212 -0.75 -0.6
+ END
+STRUCTURE N "Kato Unitrack Island Platform Type A 23-100"
+ L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
+ L 10824234 0.000000 0.000000 1.653543 9.763780 1.653543
+ L 10824234 0.000000 9.763780 1.653543 9.763780 0.000000
+ L 10824234 0.000000 9.763780 0.000000 0.000000 0.000000
+ L 10824234 0.000000 0.000000 0.826772 9.763780 0.826772
+ L 10824234 0.000000 0.787402 1.141732 5.157480 1.141732
+ L 10824234 0.000000 5.157480 1.141732 5.157480 0.511811
+ L 10824234 0.000000 5.157480 0.511811 0.787402 0.511811
+ L 10824234 0.000000 0.787402 0.511811 0.787402 1.141732
+ L 10824234 0.000000 2.952756 1.141732 2.952756 0.511811
+ L 10824234 0.000000 0.078740 1.653543 0.078740 0.866142
+ L 10824234 0.000000 0.157480 1.653543 0.157480 0.984252
+ L 10824234 0.000000 0.236220 1.653543 0.236220 1.102362
+ L 10824234 0.000000 0.314961 1.653543 0.314961 1.220472
+ L 10824234 0.000000 0.393701 1.653543 0.393701 1.299213
+ L 10824234 0.000000 0.472441 1.653543 0.472441 1.377953
+ L 10824234 0.000000 0.551181 1.653543 0.551181 1.496063
+ L 10824234 0.000000 0.629921 1.653543 0.629921 1.614173
+ L 10824234 0.000000 9.685039 0.000000 9.685039 0.787402
+ L 10824234 0.000000 9.606299 0.000000 9.606299 0.669291
+ L 10824234 0.000000 9.527559 0.000000 9.527559 0.551181
+ L 10824234 0.000000 9.448819 0.000000 9.448819 0.433071
+ L 10824234 0.000000 9.370079 0.000000 9.370079 0.354331
+ L 10824234 0.000000 9.291339 0.000000 9.291339 0.236220
+ L 10824234 0.000000 9.212598 0.000000 9.212598 0.157480
+ L 10824234 0.000000 9.133858 0.000000 9.133858 0.039370
+ END
+STRUCTURE N "Kato Unitrack Island Platform Type B 23-101"
+ L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
+ L 10824234 0.000000 0.000000 1.653543 9.763780 1.653543
+ L 10824234 0.000000 9.763780 1.653543 9.763780 0.000000
+ L 10824234 0.000000 9.763780 0.000000 0.000000 0.000000
+ L 10824234 0.000000 0.000000 0.826772 9.763780 0.826772
+ L 10824234 0.000000 0.787402 1.141732 5.157480 1.141732
+ L 10824234 0.000000 5.157480 1.141732 5.157480 0.511811
+ L 10824234 0.000000 5.157480 0.511811 0.787402 0.511811
+ L 10824234 0.000000 0.787402 0.511811 0.787402 1.141732
+ L 10824234 0.000000 2.952756 1.141732 2.952756 0.511811
+ L 10824234 0.000000 0.078740 1.653543 0.078740 0.866142
+ L 10824234 0.000000 0.157480 1.653543 0.157480 0.984252
+ L 10824234 0.000000 0.236220 1.653543 0.236220 1.102362
+ L 10824234 0.000000 0.314961 1.653543 0.314961 1.220472
+ L 10824234 0.000000 0.393701 1.653543 0.393701 1.299213
+ L 10824234 0.000000 0.472441 1.653543 0.472441 1.377953
+ L 10824234 0.000000 0.551181 1.653543 0.551181 1.496063
+ L 10824234 0.000000 0.629921 1.653543 0.629921 1.614173
+ L 10824234 0.000000 9.685039 0.000000 9.685039 0.787402
+ L 10824234 0.000000 9.606299 0.000000 9.606299 0.669291
+ L 10824234 0.000000 9.527559 0.000000 9.527559 0.551181
+ L 10824234 0.000000 9.448819 0.000000 9.448819 0.433071
+ L 10824234 0.000000 9.370079 0.000000 9.370079 0.354331
+ L 10824234 0.000000 9.291339 0.000000 9.291339 0.236220
+ L 10824234 0.000000 9.212598 0.000000 9.212598 0.157480
+ L 10824234 0.000000 9.133858 0.000000 9.133858 0.039370
+ END
+STRUCTURE N "Kato Unitrack Island Platform End, Type 1 23-102"
+ L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
+ L 10824234 0.000000 0.000000 0.000000 7.874016 0.000000
+ L 10824234 0.000000 7.874016 0.000000 7.874016 1.653543
+ L 10824234 0.000000 7.874016 1.653543 0.000000 1.653543
+ L 10824234 0.000000 0.787402 1.653543 0.787402 0.000000
+ L 10824234 0.000000 0.787402 0.629921 0.196850 0.629921
+ L 10824234 0.000000 0.196850 0.629921 0.196850 0.984252
+ L 10824234 0.000000 0.196850 0.984252 0.787402 0.984252
+ L 10824234 0.000000 0.787402 0.984252 0.787402 0.629921
+ L 10824234 0.000000 0.669291 0.629921 0.669291 0.984252
+ L 10824234 0.000000 0.551181 0.629921 0.551181 0.984252
+ L 10824234 0.000000 0.433071 0.629921 0.433071 0.984252
+ L 10824234 0.000000 0.314961 0.629921 0.314961 0.984252
+ L 0 0.026667 0.866142 1.614173 0.866142 0.039370
+ A 0 0.026667 0.141951 5.196850 0.826772 0.000000 360.000000
+ L 0 0.000000 3.031496 0.944882 4.606299 0.944882
+ L 0 0.000000 4.606299 0.944882 4.606299 0.708661
+ L 0 0.000000 4.606299 0.708661 3.031496 0.708661
+ L 0 0.000000 3.031496 0.708661 3.031496 0.944882
+ L 0 0.066667 3.543307 0.826772 4.094488 0.826772
+ END
+STRUCTURE N "Kato Unitrack Island Platform End, Type 2 23-103"
+ L 10824234 0.000000 7.874016 0.000000 7.874016 1.653543
+ L 10824234 0.000000 7.874016 1.653543 0.000000 1.653543
+ A 0 0.026667 0.141951 5.196850 0.826772 0.000000 360.000000
+ L 0 0.000000 3.031496 0.944882 4.606299 0.944882
+ L 0 0.000000 4.606299 0.944882 4.606299 0.708661
+ L 0 0.000000 4.606299 0.708661 3.031496 0.708661
+ L 0 0.000000 3.031496 0.708661 3.031496 0.944882
+ L 0 0.066667 3.543307 0.826772 4.094488 0.826772
+ A 10824234 0.000000 27.822226 7.874016 27.822226 180.000000 15.000000
+ L 0 0.026667 0.866142 1.614173 0.866142 1.023622
+ L 10824234 0.000000 0.196850 1.535433 0.196850 1.299213
+ L 10824234 0.000000 0.669291 1.535433 0.669291 1.299213
+ L 10824234 0.000000 0.551181 1.535433 0.551181 1.299213
+ L 10824234 0.000000 0.433071 1.535433 0.433071 1.299213
+ L 10824234 0.000000 0.314961 1.535433 0.314961 1.299213
+ L 10824234 0.000000 0.196667 1.295000 0.670000 1.298333
+ L 10824234 0.000000 0.193333 1.535000 0.670000 1.535000
+ L 10824234 0.000000 0.670000 1.535000 0.670000 1.651667
+ L 10824234 0.000000 0.670000 1.295833 0.670000 0.949167
+ L 10824234 0.000000 0.673333 0.946667 0.000000 1.126667
+ L 10824234 0.000000 0.006667 1.125000 0.000000 1.645000
+ END
+STRUCTURE N "Kato Unitrack Island Platform End, Type 3 23-104"
+ L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
+ L 10824234 0.000000 0.000000 1.653543 7.874016 1.653543
+ A 0 0.026667 0.141951 2.677166 0.826772 0.000000 360.000000
+ L 0 0.000000 4.842520 0.944882 3.267717 0.944882
+ L 0 0.000000 3.267717 0.944882 3.267717 0.708661
+ L 0 0.000000 3.267717 0.708661 4.842520 0.708661
+ L 0 0.000000 4.842520 0.708661 4.842520 0.944882
+ L 0 0.066667 4.330709 0.826772 3.779528 0.826772
+ A 10824234 0.000000 27.822226 0.000000 27.822226 165.000000 15.000000
+ L 0 0.026667 7.007874 1.614173 7.007874 1.023622
+ L 10824234 0.000000 7.677166 1.535433 7.677166 1.299213
+ L 10824234 0.000000 7.204725 1.535433 7.204725 1.299213
+ L 10824234 0.000000 7.322835 1.535433 7.322835 1.299213
+ L 10824234 0.000000 7.440945 1.535433 7.440945 1.299213
+ L 10824234 0.000000 7.559055 1.535433 7.559055 1.299213
+ L 10824234 0.000000 7.677349 1.295000 7.204016 1.298333
+ L 10824234 0.000000 7.680683 1.535000 7.204016 1.535000
+ L 10824234 0.000000 7.204016 1.535000 7.204016 1.651667
+ L 10824234 0.000000 7.204016 1.295833 7.204016 0.949167
+ L 10824234 0.000000 7.200683 0.946667 7.874016 1.126667
+ L 10824234 0.000000 7.867349 1.125000 7.874016 1.645000
+ END
+STRUCTURE N "Kato Unitrack Island Platform Type D 23-106"
+ L 10824234 0 0.000000 0.000000 0.000000 1.653543
+ L 10824234 0 0.000000 1.653543 9.763780 1.653543
+ L 10824234 0 9.763780 1.653543 9.763780 0.000000
+ L 10824234 0 9.763780 0.000000 0.000000 0.000000
+ END
+STRUCTURE N "Kato Unitrack One Sided Platform Type A 23-110"
+ L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
+ L 10824234 0.000000 0.000000 1.653543 9.763780 1.653543
+ L 10824234 0.000000 9.763780 1.653543 9.763780 0.000000
+ L 10824234 0.000000 9.763780 0.000000 0.000000 0.000000
+ L 10824234 0.000000 5.157480 1.141732 5.157480 0.511811
+ L 10824234 0.000000 0.078740 1.653543 0.078740 0.866142
+ L 10824234 0.000000 0.157480 1.653543 0.157480 0.984252
+ L 10824234 0.000000 0.236220 1.653543 0.236220 1.102362
+ L 10824234 0.000000 0.314961 1.653543 0.314961 1.220472
+ L 10824234 0.000000 0.393701 1.653543 0.393701 1.299213
+ L 10824234 0.000000 0.472441 1.653543 0.472441 1.377953
+ L 10824234 0.000000 0.551181 1.653543 0.551181 1.496063
+ L 10824234 0.000000 0.629921 1.653543 0.629921 1.614173
+ L 10824234 0.000000 9.685039 0.000000 9.685039 0.787402
+ L 10824234 0.000000 9.606299 0.000000 9.606299 0.669291
+ L 10824234 0.000000 9.527559 0.000000 9.527559 0.551181
+ L 10824234 0.000000 9.448819 0.000000 9.448819 0.433071
+ L 10824234 0.000000 9.370079 0.000000 9.370079 0.354331
+ L 10824234 0.000000 9.291339 0.000000 9.291339 0.236220
+ L 10824234 0.000000 9.212598 0.000000 9.212598 0.157480
+ L 10824234 0.000000 9.133858 0.000000 9.133858 0.039370
+ L 10824234 0.000000 1.181102 1.141732 8.582677 1.141732
+ L 10824234 0.000000 8.582677 1.141732 8.582677 0.511811
+ L 10824234 0.000000 8.582677 0.511811 1.181102 0.511811
+ L 10824234 0.000000 1.181102 0.511811 1.181102 1.141732
+ END
+STRUCTURE N "Kato Unitrack One Sided Platform Type B 23-111"
+ L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
+ L 10824234 0.000000 0.000000 1.653543 9.763780 1.653543
+ L 10824234 0.000000 9.763780 1.653543 9.763780 0.000000
+ L 10824234 0.000000 9.763780 0.000000 0.000000 0.000000
+ L 10824234 0.000000 5.157480 1.141732 5.157480 0.511811
+ L 10824234 0.000000 0.078740 1.653543 0.078740 0.866142
+ L 10824234 0.000000 0.157480 1.653543 0.157480 0.984252
+ L 10824234 0.000000 0.236220 1.653543 0.236220 1.102362
+ L 10824234 0.000000 0.314961 1.653543 0.314961 1.220472
+ L 10824234 0.000000 0.393701 1.653543 0.393701 1.299213
+ L 10824234 0.000000 0.472441 1.653543 0.472441 1.377953
+ L 10824234 0.000000 0.551181 1.653543 0.551181 1.496063
+ L 10824234 0.000000 0.629921 1.653543 0.629921 1.614173
+ L 10824234 0.000000 9.685039 0.000000 9.685039 0.787402
+ L 10824234 0.000000 9.606299 0.000000 9.606299 0.669291
+ L 10824234 0.000000 9.527559 0.000000 9.527559 0.551181
+ L 10824234 0.000000 9.448819 0.000000 9.448819 0.433071
+ L 10824234 0.000000 9.370079 0.000000 9.370079 0.354331
+ L 10824234 0.000000 9.291339 0.000000 9.291339 0.236220
+ L 10824234 0.000000 9.212598 0.000000 9.212598 0.157480
+ L 10824234 0.000000 9.133858 0.000000 9.133858 0.039370
+ L 10824234 0.000000 1.181102 1.141732 8.582677 1.141732
+ L 10824234 0.000000 8.582677 1.141732 8.582677 0.511811
+ L 10824234 0.000000 8.582677 0.511811 1.181102 0.511811
+ L 10824234 0.000000 1.181102 0.511811 1.181102 1.141732
+ END
+STRUCTURE N "Kato Unitrack One Sided Platform End Type 1 23-112"
+ L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
+ L 10824234 0.000000 0.000000 0.000000 7.874016 0.000000
+ L 10824234 0.000000 7.874016 0.000000 7.874016 1.653543
+ L 10824234 0.000000 7.874016 1.653543 0.000000 1.653543
+ L 10824234 0.000000 0.787402 1.653543 0.787402 0.000000
+ L 10824234 0.000000 0.787402 0.629921 0.196850 0.629921
+ L 10824234 0.000000 0.196850 0.629921 0.196850 0.984252
+ L 10824234 0.000000 0.196850 0.984252 0.787402 0.984252
+ L 10824234 0.000000 0.787402 0.984252 0.787402 0.629921
+ L 10824234 0.000000 0.669291 0.629921 0.669291 0.984252
+ L 10824234 0.000000 0.551181 0.629921 0.551181 0.984252
+ L 10824234 0.000000 0.433071 0.629921 0.433071 0.984252
+ L 10824234 0.000000 0.314961 0.629921 0.314961 0.984252
+ L 0 0.026667 0.866142 1.614173 0.866142 0.039370
+ A 0 0.026667 0.141951 5.196850 0.826772 0.000000 360.000000
+ L 0 0.000000 3.031496 0.944882 4.606299 0.944882
+ L 0 0.000000 4.606299 0.944882 4.606299 0.708661
+ L 0 0.000000 4.606299 0.708661 3.031496 0.708661
+ L 0 0.000000 3.031496 0.708661 3.031496 0.944882
+ L 0 0.066667 3.543307 0.826772 4.094488 0.826772
+ L 0 0.026667 0.866142 1.614173 7.874016 1.614173
+ END
+STRUCTURE N "Kato Unitrack One Sided Platform End Type 2 23-113"
+ L 10824234 0.000000 7.874016 0.000000 7.874016 1.653543
+ L 10824234 0.000000 7.874016 0.000000 0.000000 0.000000
+ L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
+ L 10824234 0.000000 0.000000 1.653543 7.874016 1.653543
+ L 10824234 0.000000 7.086614 1.653543 7.086614 0.000000
+ L 10824234 0.000000 7.086614 0.629921 7.677166 0.629921
+ L 10824234 0.000000 7.677166 0.629921 7.677166 0.984252
+ L 10824234 0.000000 7.677166 0.984252 7.086614 0.984252
+ L 10824234 0.000000 7.086614 0.984252 7.086614 0.629921
+ L 10824234 0.000000 7.204725 0.629921 7.204725 0.984252
+ L 10824234 0.000000 7.322835 0.629921 7.322835 0.984252
+ L 10824234 0.000000 7.440945 0.629921 7.440945 0.984252
+ L 10824234 0.000000 7.559055 0.629921 7.559055 0.984252
+ L 0 0.026667 7.007874 1.614173 7.007874 0.039370
+ A 0 0.026667 0.141951 2.677166 0.826772 0.000000 360.000000
+ L 0 0.000000 4.842520 0.944882 3.267717 0.944882
+ L 0 0.000000 3.267717 0.944882 3.267717 0.708661
+ L 0 0.000000 3.267717 0.708661 4.842520 0.708661
+ L 0 0.000000 4.842520 0.708661 4.842520 0.944882
+ L 0 0.066667 4.330709 0.826772 3.779528 0.826772
+ L 0 0.026667 7.007874 1.614173 0.000000 1.614173
+ END
+STRUCTURE N "Kato Unitrack Overhead Station 23-200"
+ L 10824234 0.000000 0.000000 5.393701 13.307087 5.393701
+ L 10824234 0.000000 12.952756 1.299213 3.188976 1.299213
+ L 10824234 0.000000 3.188976 1.299213 3.188976 2.952756
+ L 10824234 0.000000 3.188976 2.952756 12.952756 2.952756
+ L 10824234 0.000000 12.952756 2.952756 12.952756 1.299213
+ L 10824234 0.000000 12.165354 5.393701 12.165354 4.251969
+ L 10824234 0.000000 1.102362 5.393701 1.102362 4.251969
+ L 10824234 0.000000 7.874016 5.393701 7.874016 4.251969
+ L 10824234 0.000000 5.511811 5.393701 5.511811 4.251969
+ L 10824234 0.000000 7.913386 4.251969 7.913386 0.000000
+ L 10824234 0.000000 7.913386 0.000000 2.716535 0.000000
+ L 10824234 0.000000 2.716535 0.000000 2.716535 4.251969
+ L 10824234 0.000000 7.795276 4.251969 7.795276 0.157480
+ L 10824234 0.000000 7.795276 0.157480 4.330709 0.157480
+ L 10824234 0.000000 4.330709 0.157480 4.330709 4.251969
+ L 10824234 0.000000 4.330709 2.165354 7.795276 2.165354
+ L 10824234 0.000000 13.307087 5.393701 13.307087 4.251969
+ L 10824234 0.000000 0.000000 5.393701 0.000000 4.251969
+ L 10824234 0.000000 7.952756 2.637795 11.574803 2.637795
+ L 10824234 0.000000 11.574803 2.637795 11.574803 1.692913
+ L 10824234 0.000000 11.574803 1.692913 7.952756 1.692913
+ L 10824234 0.000000 10.866142 2.637795 10.866142 1.692913
+ L 10824234 0.000000 10.118110 2.637795 10.118110 1.692913
+ L 10824234 0.000000 0.000000 4.251969 4.330709 4.251969
+ L 10824234 0.000000 4.330709 4.251969 7.795276 4.251969
+ L 10824234 0.000000 7.874016 4.251969 13.267717 4.251969
+ END
+STRUCTURE N "Kato Unitrack Station Entrance 23-210"
+ L 10824234 0.000000 0.000000 0.000000 0.000000 2.874016
+ L 10824234 0.000000 4.921260 0.000000 0.000000 0.000000
+ L 10824234 0.000000 0.000000 1.417323 4.055118 1.417323
+ L 10824234 0.000000 4.055118 2.874016 4.055118 0.000000
+ L 10824234 0.000000 4.055118 1.574803 4.921260 1.574803
+ L 10824234 0.000000 4.921260 1.574803 4.921260 0.000000
+ L 10824234 0.000000 0.000000 2.874016 4.055118 2.874016
+ L 10824234 0.000000 3.779528 0.000000 3.779528 1.299213
+ L 10824234 0.000000 3.503937 0.000000 3.503937 1.181102
+ L 10824234 0.000000 3.228346 0.000000 3.228346 1.062992
+ L 10824234 0.000000 2.952756 0.000000 2.952756 0.944882
+ L 10824234 0.000000 2.677165 0.000000 2.677165 0.826772
+ L 10824234 0.000000 0.275591 2.874016 0.275591 1.535433
+ L 10824234 0.000000 0.551181 2.874016 0.551181 1.692913
+ L 10824234 0.000000 0.826772 2.874016 0.826772 1.811024
+ L 10824234 0.000000 1.102362 2.874016 1.102362 1.929134
+ L 10824234 0.000000 1.377953 2.874016 1.377953 2.047244
+ L 10824234 0.000000 4.055118 0.039370 4.921260 0.039370
+ L 10824234 0.000000 4.055118 1.535433 4.921260 1.535433
+ L 10824234 0.000000 4.055118 0.275591 4.685039 0.275591
+ L 10824234 0.000000 4.055118 0.511811 4.448819 0.511811
+ L 10824234 0.000000 4.921260 1.299213 4.330709 1.299213
+ L 10824234 0.000000 4.921260 1.062992 4.527559 1.062992
+ END
+STRUCTURE N "Kato Unitrack Long Engine House 23-300"
+ L 10824234 0.000000 0.000000 0.000000 0.000000 3.779528
+ L 10824234 0.000000 0.000000 3.779528 7.362205 3.779528
+ L 10824234 0.000000 7.362205 3.779528 7.362205 0.000000
+ L 10824234 0.000000 7.362205 0.000000 0.000000 0.000000
+ L 10824234 0.000000 0.275591 0.393701 0.787402 0.393701
+ L 10824234 0.000000 0.787402 0.393701 0.787402 3.385827
+ L 10824234 0.000000 0.787402 3.385827 0.275591 3.385827
+ L 10824234 0.000000 0.275591 3.385827 0.275591 0.393701
+ L 10824234 0.000000 1.062992 0.393701 1.574803 0.393701
+ L 10824234 0.000000 1.574803 0.393701 1.574803 3.385827
+ L 10824234 0.000000 1.574803 3.385827 1.062992 3.385827
+ L 10824234 0.000000 1.062992 3.385827 1.062992 0.393701
+ L 10824234 0.000000 1.850394 0.393701 2.362205 0.393701
+ L 10824234 0.000000 2.362205 0.393701 2.362205 3.385827
+ L 10824234 0.000000 2.362205 3.385827 1.850394 3.385827
+ L 10824234 0.000000 1.850394 3.385827 1.850394 0.393701
+ L 10824234 0.000000 2.637795 0.393701 3.149606 0.393701
+ L 10824234 0.000000 3.149606 0.393701 3.149606 3.385827
+ L 10824234 0.000000 3.149606 3.385827 2.637795 3.385827
+ L 10824234 0.000000 2.637795 3.385827 2.637795 0.393701
+ L 10824234 0.000000 3.425197 0.393701 3.937008 0.393701
+ L 10824234 0.000000 3.937008 0.393701 3.937008 3.385827
+ L 10824234 0.000000 3.937008 3.385827 3.425197 3.385827
+ L 10824234 0.000000 3.425197 3.385827 3.425197 0.393701
+ L 10824234 0.000000 4.212598 0.393701 4.724409 0.393701
+ L 10824234 0.000000 4.724409 0.393701 4.724409 3.385827
+ L 10824234 0.000000 4.724409 3.385827 4.212598 3.385827
+ L 10824234 0.000000 4.212598 3.385827 4.212598 0.393701
+ L 10824234 0.000000 5.000000 0.393701 5.511811 0.393701
+ L 10824234 0.000000 5.511811 0.393701 5.511811 3.385827
+ L 10824234 0.000000 5.511811 3.385827 5.000000 3.385827
+ L 10824234 0.000000 5.000000 3.385827 5.000000 0.393701
+ L 10824234 0.000000 5.787402 0.393701 6.299213 0.393701
+ L 10824234 0.000000 6.299213 0.393701 6.299213 3.385827
+ L 10824234 0.000000 6.299213 3.385827 5.787402 3.385827
+ L 10824234 0.000000 5.787402 3.385827 5.787402 0.393701
+ L 10824234 0.000000 6.574803 0.393701 7.086614 0.393701
+ L 10824234 0.000000 7.086614 0.393701 7.086614 3.385827
+ L 10824234 0.000000 7.086614 3.385827 6.574803 3.385827
+ L 10824234 0.000000 6.574803 3.385827 6.574803 0.393701
+ L 10824234 0.000000 0.275591 3.464567 0.472441 3.464567
+ L 10824234 0.000000 0.472441 3.464567 0.472441 3.661417
+ L 10824234 0.000000 0.472441 3.661417 0.275591 3.661417
+ L 10824234 0.000000 0.275591 3.661417 0.275591 3.464567
+ L 10824234 0.000000 0.275591 0.314961 0.472441 0.314961
+ L 10824234 0.000000 0.472441 0.314961 0.472441 0.118110
+ L 10824234 0.000000 0.472441 0.118110 0.275591 0.118110
+ L 10824234 0.000000 0.275591 0.118110 0.275591 0.314961
+ L 10824234 0.000000 7.086614 0.314961 6.889764 0.314961
+ L 10824234 0.000000 6.889764 0.314961 6.889764 0.118110
+ L 10824234 0.000000 6.889764 0.118110 7.086614 0.118110
+ L 10824234 0.000000 7.086614 0.118110 7.086614 0.314961
+ L 10824234 0.000000 7.086614 3.464567 6.889764 3.464567
+ L 10824234 0.000000 6.889764 3.464567 6.889764 3.661417
+ L 10824234 0.000000 6.889764 3.661417 7.086614 3.661417
+ L 10824234 0.000000 7.086614 3.661417 7.086614 3.464567
+ L 10824234 0.000000 3.582677 0.314961 3.779528 0.314961
+ L 10824234 0.000000 3.779528 0.314961 3.779528 0.118110
+ L 10824234 0.000000 3.779528 0.118110 3.582677 0.118110
+ L 10824234 0.000000 3.582677 0.118110 3.582677 0.314961
+ L 10824234 0.000000 3.582677 3.464567 3.779528 3.464567
+ L 10824234 0.000000 3.779528 3.464567 3.779528 3.661417
+ L 10824234 0.000000 3.779528 3.661417 3.582677 3.661417
+ L 10824234 0.000000 3.582677 3.661417 3.582677 3.464567
+ END
+STRUCTURE N "Kato Unitrack Industrial Building 23-310"
+ L 10824234 0 0.000000 0.000000 0.000000 2.952756
+ L 10824234 0 0.000000 2.952756 5.905512 2.952756
+ L 10824234 0 5.905512 2.952756 5.905512 0.000000
+ L 10824234 0 5.905512 0.000000 0.000000 0.000000
+ END
+STRUCTURE N "Kato Unitrack Station Office 23-315a"
+ L 10824234 0 0.000000 0.000000 0.000000 1.574803
+ L 10824234 0 0.000000 1.574803 2.421260 1.574803
+ L 10824234 0 2.421260 1.574803 2.421260 0.000000
+ L 10824234 0 2.421260 0.000000 0.000000 0.000000
+ END
+STRUCTURE N "Kato Unitrack Signal Tower 23-315b"
+ L 10824234 0 0.000000 0.000000 0.000000 1.102362
+ L 10824234 0 0.000000 1.102362 2.283465 1.102362
+ L 10824234 0 2.283465 1.102362 2.283465 0.000000
+ L 10824234 0 2.283465 0.000000 0.000000 0.000000
+ END
+STRUCTURE N "Kato Unitrack Building 2x4 23-2x4"
+ L 10824234 0 0.000000 0.000000 0.000000 2.000000
+ L 10824234 0 0.000000 2.000000 4.000000 2.000000
+ L 10824234 0 4.000000 2.000000 4.000000 0.000000
+ L 10824234 0 4.000000 0.000000 0.000000 0.000000
+ END
+STRUCTURE N "Kato Unitrack Building 4x5 23-4x5"
+ L 10824234 0 0.000000 0.000000 0.000000 4.000000
+ L 10824234 0 0.000000 4.000000 5.000000 4.000000
+ L 10824234 0 5.000000 4.000000 5.000000 0.000000
+ L 10824234 0 5.000000 0.000000 0.000000 0.000000
+ END
+STRUCTURE N "Kato Unitrack Building 4x6 23-4x6"
+ L 10824234 0 0.000000 0.000000 0.000000 4.000000
+ L 10824234 0 0.000000 4.000000 6.000000 4.000000
+ L 10824234 0 6.000000 4.000000 6.000000 0.000000
+ L 10824234 0 6.000000 0.000000 0.000000 0.000000
+ END
+##########################################################################
+##########################################################################
+
+SUBCONTENTS Kato Unitrack N-Scale Turntable and Accessories
+TURNOUT N "Kato Unitrack 3 Stall Round House 20-240"
+ P "Normal" 1 0 2 0 3
+ E -0.148334 1.695463 260.000000
+ E 0.000000 0.000000 270.000000
+ E -0.148334 -1.695463 280.000000
+ S 0 0.000000 -0.148334 1.695463 7.063251 2.967059
+ S 0 0.000000 0.000000 0.000000 7.322835 0.000000
+ S 0 0.000000 -0.148334 -1.695463 7.063251 -2.967059
+ F 12632256 0.000000 8
+ -0.296668 2.536705 0
+ 7.338100 4.582435 0
+ 7.874016 1.543107 0
+ 7.874016 -1.543107 0
+ 7.338100 -4.582435 0
+ -0.296668 -2.536705 0
+ 0.000000 -0.854220 0
+ 0.000000 0.854220 0
+ G 0 0.000000 0.200000 0.750000 0.000000 0
+ G 0 0.000000 0.200000 7.125000 0.000000 0
+ G 0 0.000000 0.200000 0.590272 1.825699 0
+ G 0 0.000000 0.200000 6.868421 2.932706 0
+ G 0 0.000000 0.200000 0.590272 -1.825699 0
+ G 0 0.000000 0.200000 6.868421 -2.932706 0
+ L 0 0.031250 -0.296668 2.536705 7.338100 4.582435
+ L 0 0.031250 0.000000 0.854220 7.874016 1.543107
+ L 0 0.031250 0.000000 -0.854220 7.874016 -1.543107
+ L 0 0.031250 -0.296668 -2.536705 7.338100 -4.582435
+ L 0 0.031250 0.000000 0.854220 -0.296668 2.536705
+ L 0 0.031250 0.000000 0.854220 0.000000 -0.854220
+ L 0 0.031250 0.000000 -0.854220 -0.296668 -2.536705
+ L 0 0.031250 7.874016 1.543107 7.338100 4.582435
+ L 0 0.031250 7.874016 1.543107 7.874016 -1.543107
+ L 0 0.031250 7.874016 -1.543107 7.338100 -4.582435
+END
+TURNOUT N "Kato Unitrack 139.5mm Straight Extension Line 20-285"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.492126 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 5.492126 0.000000
+ L 0 0.031250 0.000000 0.372299 5.492126 0.854220
+ L 0 0.031250 0.000000 -0.372299 5.492126 -0.854220
+ L 0 0.031250 5.492126 0.854220 5.492126 -0.854220
+END
+TURNOUT N "Kato Unitrack Curve (L) Extension Line 20-286L"
+ P "Normal" 1 2 3
+ E 0.000000 0.000000 270.000000
+ E 5.569398 -0.415987 100.000000
+ S 0 0.000000 0.000000 0.000000 0.935511 0.000000
+ C 0 0 26.000000 0.935511 -26.000000 0.000000 10.000000
+ S 0 0.000000 5.450363 -0.394998 5.569398 -0.415987
+ L 0 0.031250 0.000000 0.372299 5.492126 0.854220
+ L 0 0.031250 0.000000 -0.372299 5.492126 -0.854220
+ L 0 0.031250 5.642748 0.000000 5.492126 -0.854220
+ L 0 0.031250 5.642748 0.000000 5.492126 0.854220
+END
+TURNOUT N "Kato Unitrack Curve (R) Extension Line 20-286R"
+ P "Normal" 1 2 3
+ E 0.000000 0.000000 270.000000
+ E 5.569398 0.415987 80.000000
+ S 0 0.000000 0.000000 0.000000 0.935511 0.000000
+ C 0 0 -26.000000 0.935511 26.000000 170.000000 10.000000
+ S 0 0.000000 5.450363 0.394998 5.569398 0.415987
+ L 0 0.031250 0.000000 -0.372299 5.492126 -0.854220
+ L 0 0.031250 0.000000 0.372299 5.492126 0.854220
+ L 0 0.031250 5.642748 0.000000 5.492126 -0.854220
+ L 0 0.031250 5.642748 0.000000 5.492126 0.854220
+END
+TURNOUT N "Kato Unitrack Curve 15R 381mm 10� 381-10"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.604723 -0.227884 100.000000
+ C 0 0 15.000000 0.000000 -15.000000 0.000000 10.000000
+ A 11579568 0.053333 14.554226 0.000000 -15.000000 0.000000 10.000000
+ A 11579568 0.053333 15.445774 0.000000 -15.000000 0.000000 10.000000
+END
+TURNOUT N "Kato Unitrack Track Turntable Section 20-283A"
+ P "Normal" 1 0 2 0 3
+ E 3.101756 0.546923 260.000000
+ E 4.206758 0.741765 80.000000
+ E 3.149606 0.000000 270.000000
+ E 4.271654 0.000000 90.000000
+ E 3.101756 -0.546923 280.000000
+ E 4.206758 -0.741765 100.000000
+ S 0 0.000000 3.101756 0.546923 4.206758 0.741765
+ S 0 0.000000 3.149606 0.000000 4.271654 0.000000
+ S 0 0.000000 3.101756 -0.546923 4.206758 -0.741765
+ A 11579568 0.031250 3.149606 0.000000 0.000000 75.000000 30.00000
+ A 11579568 0.031250 4.271654 0.000000 0.000000 75.000000 30.000000
+ L 0 0.031250 3.042286 0.815178 4.126100 1.105585
+ L 0 0.031250 3.042286 -0.815178 4.126100 -1.105585
+END
+TURNOUT N "Kato Unitrack 160mm Turn Table 20-283"
+ P "1" 1
+ P "2" 2
+ P "3" 3
+ P "4" 4
+ P "5" 5
+ P "6" 6
+ P "7" 7
+ P "8" 8
+ P "9" 9
+ P "10" 10
+ P "11" 11
+ P "12" 12
+ P "13" 13
+ P "14" 14
+ P "15" 15
+ P "16" 16
+ P "17" 17
+ P "18" 18
+ E 0.000000 0.000000 0.000000
+ E 0.000000 3.149606 0.000000
+ E 0.546923 3.101757 10.000000
+ E 1.077229 2.959662 20.000000
+ E 1.574803 2.727639 30.000000
+ E 2.024528 2.412738 40.000000
+ E 2.412738 2.024528 50.000000
+ E 2.727639 1.574803 60.000000
+ E 2.959662 1.077229 70.000000
+ E 3.101757 0.546923 80.000000
+ E 3.149606 0.000000 90.000000
+ E 3.101757 -0.546923 100.000000
+ E 2.959662 -1.077229 110.000000
+ E 2.727639 -1.574803 120.000000
+ E 2.412738 -2.024528 130.000000
+ E 2.024528 -2.412738 140.000000
+ E 1.574803 -2.727639 150.000000
+ E 1.077229 -2.959662 160.000000
+ E 0.546923 -3.101757 170.000000
+ E 0.000000 -3.149606 180.000000
+ E -0.546923 -3.101757 190.000000
+ E -1.077229 -2.959662 200.000000
+ E -1.574803 -2.727639 210.000000
+ E -2.024528 -2.412738 220.000000
+ E -2.412738 -2.024528 230.000000
+ E -2.727639 -1.574803 240.000000
+ E -2.959662 -1.077229 250.000000
+ E -3.101757 -0.546923 260.000000
+ E -3.149606 0.000000 270.000000
+ E -3.101757 0.546923 280.000000
+ E -2.959662 1.077229 290.000000
+ E -2.727639 1.574803 300.000000
+ E -2.412738 2.024528 310.000000
+ E -2.024528 2.412738 320.000000
+ E -1.574803 2.727639 330.000000
+ E -1.077229 2.959662 340.000000
+ E -0.546923 3.101757 350.000000
+ S 16777215 0.000000 0.000000 3.149606 0.000000 -3.149606
+ S 16777215 0.000000 0.546923 3.101757 -0.546923 -3.101757
+ S 16777215 0.000000 1.077229 2.959662 -1.077229 -2.959662
+ S 16777215 0.000000 1.574803 2.727639 -1.574803 -2.727639
+ S 16777215 0.000000 2.024528 2.412738 -2.024528 -2.412738
+ S 16777215 0.000000 2.412738 2.024528 -2.412738 -2.024528
+ S 16777215 0.000000 2.727639 1.574803 -2.727639 -1.574803
+ S 16777215 0.000000 2.959662 1.077229 -2.959662 -1.077229
+ S 16777215 0.000000 3.101757 0.546923 -3.101757 -0.546923
+ S 16777215 0.000000 3.149606 0.000000 -3.149606 0.000000
+ S 16777215 0.000000 3.101757 -0.546923 -3.101757 0.546923
+ S 16777215 0.000000 2.959662 -1.077229 -2.959662 1.077229
+ S 16777215 0.000000 2.727639 -1.574803 -2.727639 1.574803
+ S 16777215 0.000000 2.412738 -2.024528 -2.412738 2.024528
+ S 16777215 0.000000 2.024528 -2.412738 -2.024528 2.412738
+ S 16777215 0.000000 1.574803 -2.727639 -1.574803 2.727639
+ S 16777215 0.000000 1.077229 -2.959662 -1.077229 2.959662
+ S 16777215 0.000000 0.546923 -3.101757 -0.546923 3.101757
+ A 11579568 0.031250 3.149606 0.000000 0.000000 0.000000 360.000000
+ A 11579568 0.031250 4.271654 0.000000 0.000000 0.000000 360.000000
+END
diff --git a/app/lib/params/N-Kato-Unitram.xtp b/app/lib/params/N-Kato-Unitram.xtp
index a67a033..d615edd 100644
--- a/app/lib/params/N-Kato-Unitram.xtp
+++ b/app/lib/params/N-Kato-Unitram.xtp
@@ -1,4 +1,4 @@
-CONTENTS Kato Unitrack N-Scale Unitram
+CONTENTS Kato Unitrack N Scale Unitram
##########################################################################
##########################################################################
@@ -26,7 +26,7 @@ TURNOUT N "Kato Unitram Straight 124mm 40-020"
L 11579568 0.053333 0.000000 -1.220472 4.881889 -1.220472
END
TURNOUT N "Kato Unitram Transition 124mm 40-021"
- P "Normal" 1 0 2
+ P "Normal" 1 -2 3 4 5 0 6 7 8 -9 10
E 0.000000 0.492126 270.000000
E 4.881889 0.649606 90.000000
E 0.000000 -0.492126 270.000000
@@ -56,7 +56,7 @@ TURNOUT N "Kato Unitram Straight 62mm 40-031"
L 11579568 0.053333 0.000000 -1.220472 2.440944 -1.220472
END
TURNOUT N "Kato Unitram 90d Crossing 62mm 40-300"
- P "Normal" 1
+ P "Normal" 1 0 2 0 3 0 4
E 0.000000 0.492126 270.000000
E 2.440944 0.492126 90.000000
E 0.000000 -0.492126 270.000000
@@ -152,4 +152,3 @@ TURNOUT N "Kato Unitram Left Turnout 180mm 40-210"
L 11579568 0.053333 5.596826 2.946481 5.577439 2.927094
A 11579568 0.053333 5.826772 1.457289 7.047244 135.000000 45.000000
END
-
diff --git a/app/lib/params/N-Katocn.xtp b/app/lib/params/N-Katocn.xtp
index 20254aa..f8fad4b 100644
--- a/app/lib/params/N-Katocn.xtp
+++ b/app/lib/params/N-Katocn.xtp
@@ -1,4 +1,4 @@
-CONTENTS Kato N-scale Rolling Stock
+CONTENTS Kato N scale Rolling Stock
CARPART N "Kato Baggage, 60' California Zephyr Silver Cayote 106-055 (1) Chicago Burlington & Quincy CB&Q 905" 0 50100 4.500 0.750 0 0 3.763 4.900 12632256
CARPART N "Kato Baggage, 60' 106-1052 (6) Great Northern GN 279" 0 50100 4.500 0.750 0 0 3.763 4.900 8388608
CARPART N "Kato Baggage, 60' Super Chief 106-6002 (1) Atchison Topeka & Santa Fe ATSF 3456" 0 50100 4.500 0.750 0 0 3.763 4.900 12632256
diff --git a/app/lib/params/N-LifeLike Power-Loc.xtp b/app/lib/params/N-LifeLike Power-Loc.xtp
index 9e74df4..c39174f 100644
--- a/app/lib/params/N-LifeLike Power-Loc.xtp
+++ b/app/lib/params/N-LifeLike Power-Loc.xtp
@@ -1,4 +1,4 @@
-CONTENTS LifeLike Power-Loc Track N-Scale
+CONTENTS LifeLike Power-Loc Track N Scale
#Created By Dwyane Ward 09 AUG 2007
SUBCONTENTS LifeLike Power-Loc N-Scale Straight Track
TURNOUT N "LifeLike Power-Loc Straight 5.00 433-7802"
diff --git a/app/lib/params/N-ME Structures.xtp b/app/lib/params/N-ME Structures.xtp
index ff3239e..b45d1e6 100644
--- a/app/lib/params/N-ME Structures.xtp
+++ b/app/lib/params/N-ME Structures.xtp
@@ -1,4 +1,4 @@
-CONTENTS Micro-Engineering N-Scale Structures
+CONTENTS Micro Engineering N Scale Structures
STRUCTURE N "Micro-Engineering Transworld Truck Terminal 55-002"
F3 14737632 0.000000 4
0.015625 3.015625 0
@@ -331,4 +331,3 @@ STRUCTURE N "Micro-Engineering Doyle Distribution Center 55-007"
L3 0 0.104167 8.020833 4.395833 0 7.020833 4.395833 0
G3 8421504 0.000000 0.100000 6.520833 2.770833 0
END
-
diff --git a/app/lib/params/N-MicroEngineering-Bridges.xtp b/app/lib/params/N-MicroEngineering-Bridges.xtp
new file mode 100644
index 0000000..d4d0b25
--- /dev/null
+++ b/app/lib/params/N-MicroEngineering-Bridges.xtp
@@ -0,0 +1,318 @@
+CONTENTS Micro Engineering N Scale Bridges
+SUBCONTENTS Micro-Engineering N Bridges - Deck Girder Open/Ballast
+TURNOUT N "Micro-Engineering 40' Single-Track Deck Girder Bridge 75-151/153"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 3.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 3.000000 0.000000
+ L 11579568 0.050000 0.000000 0.180000 3.000000 0.180000
+ L 11579568 0.050000 0.000000 -0.180000 3.000000 -0.180000
+END
+TURNOUT N "Micro-Engineering 80' Single-Track Deck Girder Bridge 75-150/152"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 6.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 6.000000 0.000000
+ L 11579568 0.050000 0.000000 0.180000 6.000000 0.180000
+ L 11579568 0.050000 0.000000 -0.180000 6.000000 -0.180000
+END
+
+SUBCONTENTS Micro-Engineering N Bridges - Tall Steel Viaduct Base Kits
+TURNOUT N "Micro-Engineering 200' Tall Steel Viaduct Standard Bridge 75-518"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 15.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 15.000000 0.000000
+
+ L 11579568 0.050000 3.000000 1.445000 6.000000 1.445000
+ L 11579568 0.050000 3.000000 1.445000 6.000000 1.083750
+ L 11579568 0.050000 3.000000 1.083750 6.000000 1.445000
+ L 11579568 0.050000 3.000000 1.083750 6.000000 1.083750
+ L 11579568 0.050000 3.000000 1.083750 6.000000 0.722500
+ L 11579568 0.050000 3.000000 0.722500 6.000000 1.083750
+ L 11579568 0.050000 3.000000 0.722500 6.000000 0.722500
+ L 11579568 0.050000 3.000000 0.722500 6.000000 0.361250
+ L 11579568 0.050000 3.000000 0.361250 6.000000 0.722500
+ L 11579568 0.050000 3.000000 0.361250 6.000000 0.361250
+ L 11579568 0.050000 3.000000 0.361250 6.000000 0.180000
+ L 11579568 0.050000 3.000000 0.180000 6.000000 0.361250
+
+ L 11579568 0.050000 9.000000 1.445000 12.000000 1.445000
+ L 11579568 0.050000 9.000000 1.445000 12.000000 1.083750
+ L 11579568 0.050000 9.000000 1.083750 12.000000 1.445000
+ L 11579568 0.050000 9.000000 1.083750 12.000000 1.083750
+ L 11579568 0.050000 9.000000 1.083750 12.000000 0.722500
+ L 11579568 0.050000 9.000000 0.722500 12.000000 1.083750
+ L 11579568 0.050000 9.000000 0.722500 12.000000 0.722500
+ L 11579568 0.050000 9.000000 0.722500 12.000000 0.361250
+ L 11579568 0.050000 9.000000 0.361250 12.000000 0.722500
+ L 11579568 0.050000 9.000000 0.361250 12.000000 0.361250
+ L 11579568 0.050000 9.000000 0.361250 12.000000 0.180000
+ L 11579568 0.050000 9.000000 0.180000 12.000000 0.361250
+
+ L 11579568 0.050000 0.000000 0.180000 15.000000 0.180000
+ L 11579568 0.050000 0.000000 -0.180000 15.000000 -0.180000
+
+ L 11579568 0.050000 3.000000 -0.180000 6.000000 -0.361250
+ L 11579568 0.050000 3.000000 -0.361250 6.000000 -0.180000
+ L 11579568 0.050000 3.000000 -0.361250 6.000000 -0.722500
+ L 11579568 0.050000 3.000000 -0.722500 6.000000 -0.361250
+ L 11579568 0.050000 3.000000 -0.722500 6.000000 -0.722500
+ L 11579568 0.050000 3.000000 -0.722500 6.000000 -1.083750
+ L 11579568 0.050000 3.000000 -1.083750 6.000000 -0.722500
+ L 11579568 0.050000 3.000000 -1.083750 6.000000 -1.083750
+ L 11579568 0.050000 3.000000 -1.083750 6.000000 -1.445000
+ L 11579568 0.050000 3.000000 -0.361250 6.000000 -0.361250
+ L 11579568 0.050000 3.000000 -1.445000 6.000000 -1.083750
+ L 11579568 0.050000 3.000000 -1.445000 6.000000 -1.445000
+
+ L 11579568 0.050000 9.000000 -0.180000 12.000000 -0.361250
+ L 11579568 0.050000 9.000000 -0.361250 12.000000 -0.180000
+ L 11579568 0.050000 9.000000 -0.361250 12.000000 -0.361250
+ L 11579568 0.050000 9.000000 -0.361250 12.000000 -0.722500
+ L 11579568 0.050000 9.000000 -0.722500 12.000000 -0.361250
+ L 11579568 0.050000 9.000000 -0.722500 12.000000 -0.722500
+ L 11579568 0.050000 9.000000 -0.722500 12.000000 -1.083750
+ L 11579568 0.050000 9.000000 -1.083750 12.000000 -0.722500
+ L 11579568 0.050000 9.000000 -1.083750 12.000000 -1.083750
+ L 11579568 0.050000 9.000000 -1.083750 12.000000 -1.445000
+ L 11579568 0.050000 9.000000 -1.445000 12.000000 -1.083750
+ L 11579568 0.050000 9.000000 -1.445000 12.000000 -1.445000
+
+ L 11579568 0.100000 3.000000 1.445000 3.000000 -1.445000
+ L 11579568 0.100000 6.000000 1.445000 6.000000 -1.445000
+
+ L 11579568 0.100000 9.000000 1.445000 9.000000 -1.445000
+ L 11579568 0.100000 12.000000 1.445000 12.000000 -1.445000
+END
+TURNOUT N "Micro-Engineering 320' Tall Steel Viaduct Standard Bridge 75-519"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 24.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 24.000000 0.000000
+
+ L 11579568 0.050000 6.000000 1.445000 9.000000 1.445000
+ L 11579568 0.050000 6.000000 1.445000 9.000000 1.083750
+ L 11579568 0.050000 6.000000 1.083750 9.000000 1.445000
+ L 11579568 0.050000 6.000000 1.083750 9.000000 1.083750
+ L 11579568 0.050000 6.000000 1.083750 9.000000 0.722500
+ L 11579568 0.050000 6.000000 0.722500 9.000000 1.083750
+ L 11579568 0.050000 6.000000 0.722500 9.000000 0.722500
+ L 11579568 0.050000 6.000000 0.722500 9.000000 0.361250
+ L 11579568 0.050000 6.000000 0.361250 9.000000 0.722500
+ L 11579568 0.050000 6.000000 0.361250 9.000000 0.361250
+ L 11579568 0.050000 6.000000 0.361250 9.000000 0.180000
+ L 11579568 0.050000 6.000000 0.180000 9.000000 0.361250
+
+ L 11579568 0.050000 15.000000 1.445000 18.000000 1.445000
+ L 11579568 0.050000 15.000000 1.445000 18.000000 1.083750
+ L 11579568 0.050000 15.000000 1.083750 18.000000 1.445000
+ L 11579568 0.050000 15.000000 1.083750 18.000000 1.083750
+ L 11579568 0.050000 15.000000 1.083750 18.000000 0.722500
+ L 11579568 0.050000 15.000000 0.722500 18.000000 1.083750
+ L 11579568 0.050000 15.000000 0.722500 18.000000 0.722500
+ L 11579568 0.050000 15.000000 0.722500 18.000000 0.361250
+ L 11579568 0.050000 15.000000 0.361250 18.000000 0.722500
+ L 11579568 0.050000 15.000000 0.361250 18.000000 0.361250
+ L 11579568 0.050000 15.000000 0.361250 18.000000 0.180000
+ L 11579568 0.050000 15.000000 0.180000 18.000000 0.361250
+
+ L 11579568 0.050000 0.000000 0.180000 24.000000 0.180000
+ L 11579568 0.050000 0.000000 -0.180000 24.000000 -0.180000
+
+ L 11579568 0.050000 6.000000 -0.180000 9.000000 -0.361250
+ L 11579568 0.050000 6.000000 -0.361250 9.000000 -0.180000
+ L 11579568 0.050000 6.000000 -0.361250 9.000000 -0.722500
+ L 11579568 0.050000 6.000000 -0.722500 9.000000 -0.361250
+ L 11579568 0.050000 6.000000 -0.722500 9.000000 -0.722500
+ L 11579568 0.050000 6.000000 -0.722500 9.000000 -1.083750
+ L 11579568 0.050000 6.000000 -1.083750 9.000000 -0.722500
+ L 11579568 0.050000 6.000000 -1.083750 9.000000 -1.083750
+ L 11579568 0.050000 6.000000 -1.083750 9.000000 -1.445000
+ L 11579568 0.050000 6.000000 -0.361250 9.000000 -0.361250
+ L 11579568 0.050000 6.000000 -1.445000 9.000000 -1.083750
+ L 11579568 0.050000 6.000000 -1.445000 9.000000 -1.445000
+
+ L 11579568 0.050000 15.000000 -0.180000 18.000000 -0.361250
+ L 11579568 0.050000 15.000000 -0.361250 18.000000 -0.180000
+ L 11579568 0.050000 15.000000 -0.361250 18.000000 -0.361250
+ L 11579568 0.050000 15.000000 -0.361250 18.000000 -0.722500
+ L 11579568 0.050000 15.000000 -0.722500 18.000000 -0.361250
+ L 11579568 0.050000 15.000000 -0.722500 18.000000 -0.722500
+ L 11579568 0.050000 15.000000 -0.722500 18.000000 -1.083750
+ L 11579568 0.050000 15.000000 -1.083750 18.000000 -0.722500
+ L 11579568 0.050000 15.000000 -1.083750 18.000000 -1.083750
+ L 11579568 0.050000 15.000000 -1.083750 18.000000 -1.445000
+ L 11579568 0.050000 15.000000 -1.445000 18.000000 -1.083750
+ L 11579568 0.050000 15.000000 -1.445000 18.000000 -1.445000
+
+ L 11579568 0.100000 6.000000 1.445000 6.000000 -1.445000
+ L 11579568 0.100000 9.000000 1.445000 9.000000 -1.445000
+
+ L 11579568 0.100000 15.000000 1.445000 15.000000 -1.445000
+ L 11579568 0.100000 18.000000 1.445000 18.000000 -1.445000
+END
+
+
+
+SUBCONTENTS Micro-Engineering N Bridges - Tall Steel Viaduct Length Extensions
+TURNOUT N "Micro-Engineering 40' Tall Steel Viaduct Bridge Connector 75-542"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 3.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 3.000000 0.000000
+ L 11579568 0.050000 0.000000 1.445000 3.000000 1.445000
+ L 11579568 0.050000 0.000000 1.445000 3.000000 1.083750
+ L 11579568 0.050000 0.000000 1.083750 3.000000 1.445000
+ L 11579568 0.050000 0.000000 1.083750 3.000000 1.083750
+ L 11579568 0.050000 0.000000 1.083750 3.000000 0.722500
+ L 11579568 0.050000 0.000000 0.722500 3.000000 1.083750
+ L 11579568 0.050000 0.000000 0.722500 3.000000 0.722500
+ L 11579568 0.050000 0.000000 0.722500 3.000000 0.361250
+ L 11579568 0.050000 0.000000 0.361250 3.000000 0.722500
+ L 11579568 0.050000 0.000000 0.361250 3.000000 0.361250
+ L 11579568 0.050000 0.000000 0.361250 3.000000 0.180000
+ L 11579568 0.050000 0.000000 0.180000 3.000000 0.361250
+
+ L 11579568 0.050000 0.000000 0.180000 3.000000 0.180000
+ L 11579568 0.050000 0.000000 -0.180000 3.000000 -0.180000
+
+ L 11579568 0.050000 0.000000 -0.180000 3.000000 -0.361250
+ L 11579568 0.050000 0.000000 -0.361250 3.000000 -0.180000
+ L 11579568 0.050000 0.000000 -0.361250 3.000000 -0.361250
+ L 11579568 0.050000 0.000000 -0.361250 3.000000 -0.722500
+ L 11579568 0.050000 0.000000 -0.722500 3.000000 -0.361250
+ L 11579568 0.050000 0.000000 -0.722500 3.000000 -0.722500
+ L 11579568 0.050000 0.000000 -0.722500 3.000000 -1.083750
+ L 11579568 0.050000 0.000000 -1.083750 3.000000 -0.722500
+ L 11579568 0.050000 0.000000 -1.083750 3.000000 -1.083750
+ L 11579568 0.050000 0.000000 -1.083750 3.000000 -1.445000
+ L 11579568 0.050000 0.000000 -1.445000 3.000000 -1.083750
+ L 11579568 0.050000 0.000000 -1.445000 3.000000 -1.445000
+
+ L 11579568 0.100000 0.000000 1.445000 0.000000 -1.445000
+ L 11579568 0.100000 3.000000 1.445000 3.000000 -1.445000
+END
+TURNOUT N "Micro-Engineering 80' Tall Steel Viaduct Bridge Extension 75-543"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 6.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 6.000000 0.000000
+ L 11579568 0.050000 0.000000 1.445000 3.000000 1.445000
+ L 11579568 0.050000 0.000000 1.445000 3.000000 1.083750
+ L 11579568 0.050000 0.000000 1.083750 3.000000 1.445000
+ L 11579568 0.050000 0.000000 1.083750 3.000000 1.083750
+ L 11579568 0.050000 0.000000 1.083750 3.000000 0.722500
+ L 11579568 0.050000 0.000000 0.722500 3.000000 1.083750
+ L 11579568 0.050000 0.000000 0.722500 3.000000 0.722500
+ L 11579568 0.050000 0.000000 0.722500 3.000000 0.361250
+ L 11579568 0.050000 0.000000 0.361250 3.000000 0.722500
+ L 11579568 0.050000 0.000000 0.361250 3.000000 0.361250
+ L 11579568 0.050000 0.000000 0.361250 3.000000 0.180000
+ L 11579568 0.050000 0.000000 0.180000 3.000000 0.361250
+
+ L 11579568 0.050000 0.000000 0.180000 3.000000 0.180000
+ L 11579568 0.050000 0.000000 -0.180000 3.000000 -0.180000
+
+ L 11579568 0.050000 0.000000 -0.180000 3.000000 -0.361250
+ L 11579568 0.050000 0.000000 -0.361250 3.000000 -0.180000
+ L 11579568 0.050000 0.000000 -0.361250 3.000000 -0.361250
+ L 11579568 0.050000 0.000000 -0.361250 3.000000 -0.722500
+ L 11579568 0.050000 0.000000 -0.722500 3.000000 -0.361250
+ L 11579568 0.050000 0.000000 -0.722500 3.000000 -0.722500
+ L 11579568 0.050000 0.000000 -0.722500 3.000000 -1.083750
+ L 11579568 0.050000 0.000000 -1.083750 3.000000 -0.722500
+ L 11579568 0.050000 0.000000 -1.083750 3.000000 -1.083750
+ L 11579568 0.050000 0.000000 -1.083750 3.000000 -1.445000
+ L 11579568 0.050000 0.000000 -1.445000 3.000000 -1.083750
+ L 11579568 0.050000 0.000000 -1.445000 3.000000 -1.445000
+
+ L 11579568 0.100000 0.000000 1.445000 0.000000 -1.445000
+ L 11579568 0.100000 3.000000 1.445000 3.000000 -1.445000
+END
+TURNOUT N "Micro-Engineering 120' Tall Steel Viaduct Bridge Extension 75-544"
+ P "P0" 1
+ E 0.000000 0.000000 270.000000
+ E 9.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 9.000000 0.000000
+ L 11579568 0.050000 0.000000 1.445000 3.000000 1.445000
+ L 11579568 0.050000 0.000000 1.445000 3.000000 1.083750
+ L 11579568 0.050000 0.000000 1.083750 3.000000 1.445000
+ L 11579568 0.050000 0.000000 1.083750 3.000000 1.083750
+ L 11579568 0.050000 0.000000 1.083750 3.000000 0.722500
+ L 11579568 0.050000 0.000000 0.722500 3.000000 1.083750
+ L 11579568 0.050000 0.000000 0.722500 3.000000 0.722500
+ L 11579568 0.050000 0.000000 0.722500 3.000000 0.361250
+ L 11579568 0.050000 0.000000 0.361250 3.000000 0.722500
+ L 11579568 0.050000 0.000000 0.361250 3.000000 0.361250
+ L 11579568 0.050000 0.000000 0.361250 3.000000 0.180000
+ L 11579568 0.050000 0.000000 0.180000 3.000000 0.361250
+
+ L 11579568 0.050000 0.000000 0.180000 3.000000 0.180000
+ L 11579568 0.050000 0.000000 -0.180000 3.000000 -0.180000
+
+ L 11579568 0.050000 0.000000 -0.180000 3.000000 -0.361250
+ L 11579568 0.050000 0.000000 -0.361250 3.000000 -0.180000
+ L 11579568 0.050000 0.000000 -0.361250 3.000000 -0.361250
+ L 11579568 0.050000 0.000000 -0.361250 3.000000 -0.722500
+ L 11579568 0.050000 0.000000 -0.722500 3.000000 -0.361250
+ L 11579568 0.050000 0.000000 -0.722500 3.000000 -0.722500
+ L 11579568 0.050000 0.000000 -0.722500 3.000000 -1.083750
+ L 11579568 0.050000 0.000000 -1.083750 3.000000 -0.722500
+ L 11579568 0.050000 0.000000 -1.083750 3.000000 -1.083750
+ L 11579568 0.050000 0.000000 -1.083750 3.000000 -1.445000
+ L 11579568 0.050000 0.000000 -1.445000 3.000000 -1.083750
+ L 11579568 0.050000 0.000000 -1.445000 3.000000 -1.445000
+
+ L 11579568 0.100000 0.000000 1.445000 0.000000 -1.445000
+ L 11579568 0.100000 3.000000 1.445000 3.000000 -1.445000
+END
+
+SUBCONTENTS Micro-Engineering N Bridges - Tall Steel Viaduct Tower and Bents
+STRUCTURE N "Micro-Engineering Tall Steel Viaduct Tower (4 Story) 75-176"
+ X pier 0.000000 ""
+ L 11579568 0.050000 0.000000 1.445000 3.000000 1.445000
+ L 11579568 0.050000 0.000000 1.445000 3.000000 1.083750
+ L 11579568 0.050000 0.000000 1.083750 3.000000 1.445000
+ L 11579568 0.050000 0.000000 1.083750 3.000000 1.083750
+ L 11579568 0.050000 0.000000 1.083750 3.000000 0.722500
+ L 11579568 0.050000 0.000000 0.722500 3.000000 1.083750
+ L 11579568 0.050000 0.000000 0.722500 3.000000 0.722500
+ L 11579568 0.050000 0.000000 0.722500 3.000000 0.361250
+ L 11579568 0.050000 0.000000 0.361250 3.000000 0.722500
+ L 11579568 0.050000 0.000000 0.361250 3.000000 0.361250
+ L 11579568 0.050000 0.000000 0.361250 3.000000 0.180000
+ L 11579568 0.050000 0.000000 0.180000 3.000000 0.361250
+
+ L 11579568 0.050000 0.000000 -0.180000 3.000000 -0.361250
+ L 11579568 0.050000 0.000000 -0.361250 3.000000 -0.180000
+ L 11579568 0.050000 0.000000 -0.361250 3.000000 -0.361250
+ L 11579568 0.050000 0.000000 -0.361250 3.000000 -0.722500
+ L 11579568 0.050000 0.000000 -0.722500 3.000000 -0.361250
+ L 11579568 0.050000 0.000000 -0.722500 3.000000 -0.722500
+ L 11579568 0.050000 0.000000 -0.722500 3.000000 -1.083750
+ L 11579568 0.050000 0.000000 -1.083750 3.000000 -0.722500
+ L 11579568 0.050000 0.000000 -1.083750 3.000000 -1.083750
+ L 11579568 0.050000 0.000000 -1.083750 3.000000 -1.445000
+ L 11579568 0.050000 0.000000 -1.445000 3.000000 -1.083750
+ L 11579568 0.050000 0.000000 -1.445000 3.000000 -1.445000
+
+ L 11579568 0.100000 0.000000 1.445000 0.000000 -1.445000
+ L 11579568 0.100000 3.000000 1.445000 3.000000 -1.445000
+END
+STRUCTURE N "Micro-Engineering Tall Steel Viaduct Bent (1 Story) 75-176A"
+ X pier 0.000000 ""
+ L 11579568 0.100000 0.000000 0.361250 0.000000 -0.361250
+END
+STRUCTURE N "Micro-Engineering Tall Steel Viaduct Bent (2 Story) 75-176B"
+ X pier 0.000000 ""
+ L 11579568 0.100000 0.000000 0.722500 0.000000 -0.722500
+END
+STRUCTURE N "Micro-Engineering Tall Steel Viaduct Bent (3 Story) 75-176C"
+ X pier 0.000000 ""
+ L 11579568 0.100000 0.000000 1.083750 0.000000 -1.083750
+END
+STRUCTURE N "Micro-Engineering Tall Steel Viaduct Bent (4 Story) 75-176D"
+ X pier 0.000000 ""
+ L 11579568 0.100000 0.000000 1.445000 0.000000 -1.445000
+END
diff --git a/app/lib/params/N-NULINE.xtp b/app/lib/params/N-NULINE.xtp
index ca6b769..fc2cb22 100644
--- a/app/lib/params/N-NULINE.xtp
+++ b/app/lib/params/N-NULINE.xtp
@@ -1,5 +1,5 @@
# Parameter file by Rick Uhlenkott
-CONTENTS N NULINE rdu
+CONTENTS N NULINE rdu
STRUCTURE N "NuLine Structures Modern Concrete Warehouse style #1 161001"
F3 65280 0.000000 8
1.310011 0.093750 0
diff --git a/app/lib/params/N-PecoCode55Finescale.xtp b/app/lib/params/N-PecoCode55Finescale.xtp
index dc57768..8880114 100644
--- a/app/lib/params/N-PecoCode55Finescale.xtp
+++ b/app/lib/params/N-PecoCode55Finescale.xtp
@@ -1,4 +1,4 @@
-CONTENTS Peco N-Scale Code55 Finescale Track
+CONTENTS Peco N Scale Code 55 Finescale Track
SUBCONTENTS Peco Code 55 - Turnouts
TURNOUT N "Peco-55 Small Right SL-E391F"
P "Normal" 1 2
@@ -94,24 +94,30 @@ TURNOUT N "Peco-55 3-Way Asymmetric SL-E399F"
S 0 0.000000 0.421365 0.000000 6.033465 0.000000
END
TURNOUT N "Peco-55 Curved Right SL-E386F"
- P "Normal" 1 2
- P "Reverse" 1 3
+ P "Normal" 1 2 3
+ P "Reverse" 1 4 5 6
E 0.000000 0.000000 270.000000
- E 6.220000 -0.521000 99.847000
- E 6.097000 -1.056000 109.813000
- C 0 0 36.000000 0.055000 -36.000000 359.912000 0.175000
- C 0 0 36.000000 0.117000 -36.000000 359.988000 9.771000
- C 0 0 18.000000 0.022000 -18.000000 0.281000 19.445000
+ E 6.137008 -0.526772 99.815000
+ E 6.048031 -1.046457 109.633000
+ C 0 0.000000 35.984252 0.000000 -35.984252 0.000000 0.079612
+ C 0 0.000000 35.880126 0.011345 -35.880140 0.061728 9.688447
+ C 0 0.000000 36.000000 0.002864 -35.984333 9.735388 0.079612
+ C 0 0.000000 17.185618 0.172609 -17.185215 359.591225 10.119708
+ C 0 0.000000 18.699999 -0.281647 -18.642768 10.329528 9.301755
+ C 0 0.000000 18.000000 0.000137 -18.000011 19.473845 0.159155
END
TURNOUT N "Peco-55 Curved Left SL-E387F"
- P "Normal" 1 2
- P "Reverse" 1 3
+ P "Normal" 1 2 3
+ P "Reverse" 1 4 5 6
E 0.000000 0.000000 270.000000
- E 6.220000 0.521000 80.153000
- E 6.097000 1.056000 70.187000
- C 0 0 -36.000000 0.055000 36.000000 179.912000 0.175000
- C 0 0 -36.000000 0.117000 36.000000 170.240000 9.771000
- C 0 0 -18.000000 0.022000 18.000000 160.275000 19.445000
+ E 6.137008 0.526772 80.185000
+ E 6.048031 1.046457 70.367000
+ C 0 0.000000 35.984252 0.000000 35.984252 179.920388 0.079612
+ C 0 0.000000 -35.880126 0.011345 35.880140 170.249825 9.688447
+ C 0 0.000000 36.000000 0.002864 35.984333 170.185000 0.079612
+ C 0 0.000000 -17.185618 0.172609 17.185215 170.289067 10.119708
+ C 0 0.000000 -18.699999 -0.281647 18.642768 160.368717 9.301755
+ C 0 0.000000 18.000000 0.000137 18.000011 160.367000 0.159155
END
TURNOUT N "Peco-55 Scissors Crossover SL-E383F"
P "Normal" 1 2 3 0 4 5 6
@@ -224,12 +230,12 @@ TURNOUT N "Peco Turn Table NB-55"
E 0.000000 -3.218750 180.000000
E -0.558930 -3.169850 190.000000
E -1.100877 -3.024636 200.000000
- E -1.609375 -2.787519 210.000000
+ E -1.609375 -2.787519 210.000000
E -2.068973 -2.465706 220.000000
- E -2.465706 -2.068973 230.000000
+ E -2.465706 -2.068973 230.000000
E -2.787519 -1.609375 240.000000
E -3.024636 -1.100877 250.000000
- E -3.169850 -0.558930 260.000000
+ E -3.169850 -0.558930 260.000000
E -3.218750 0.000000 270.000000
E -3.169850 0.558930 280.000000
E -3.024636 1.100877 290.000000
@@ -258,7 +264,7 @@ TURNOUT N "Peco Turn Table NB-55"
S 16777215 0.000000 2.298133 1.928363 -2.298133 -1.928363
S 0 0.000000 -2.298133 -1.928363 -2.465706 -2.068973
S 0 0.000000 2.787519 1.609375 2.598076 1.500000
- S 16777215 0.000000 2.598076 1.500000 -2.598076 -1.500000
+ S 16777215 0.000000 2.598076 1.500000 -2.598076 -1.500000
S 0 0.000000 -2.598076 -1.500000 -2.787519 -1.609375
S 0 0.000000 3.024636 1.100877 2.819078 1.026060
S 16777215 0.000000 2.819078 1.026060 -2.819078 -1.026060
@@ -281,7 +287,7 @@ TURNOUT N "Peco Turn Table NB-55"
S 0 0.000000 2.465706 -2.068973 2.298133 -1.928363
S 16777215 0.000000 2.298133 -1.928363 -2.298133 1.928363
S 0 0.000000 -2.298133 1.928363 -2.465706 2.068973
- S 0 0.000000 2.068973 -2.465706 1.928363 -2.298133
+ S 0 0.000000 2.068973 -2.465706 1.928363 -2.298133
S 16777215 0.000000 1.928363 -2.298133 -1.928363 2.298133
S 0 0.000000 -1.928363 2.298133 -2.068973 2.465706
S 0 0.000000 1.609375 -2.787519 1.500000 -2.598076
@@ -368,7 +374,7 @@ TURNOUT N "Peco Code 55/80 Inspection Pit(Stair End) NB-56FA"
L 0 0.020000 0.000000 0.160000 1.122047 0.160000
L 0 0.020000 0.000000 -0.160000 1.122047 -0.160000
L 0 0.020000 0.000000 -0.300000 1.122047 -0.300000
-
+
END
TURNOUT N "Peco Code 55/80 Inspection Pit(Mid Section) NB-56FB"
P "Normal" 1
@@ -385,4 +391,4 @@ TURNOUT N "Peco Code 55/80 Inspection Pit(Mid Section) NB-56FB"
L 0 0.020000 0.000000 0.160000 1.122047 0.160000
L 0 0.020000 0.000000 -0.160000 1.122047 -0.160000
L 0 0.020000 0.000000 -0.300000 1.122047 -0.300000
-END \ No newline at end of file
+END
diff --git a/app/lib/params/N-PecoCode80Streamline.xtp b/app/lib/params/N-PecoCode80Streamline.xtp
index 0d31703..73267e7 100644
--- a/app/lib/params/N-PecoCode80Streamline.xtp
+++ b/app/lib/params/N-PecoCode80Streamline.xtp
@@ -1,4 +1,4 @@
-CONTENTS Peco N-Scale Code80 Streamline Track
+CONTENTS Peco N Scale Code 80 Streamline Track
SUBCONTENTS Peco Code 80 - Turnouts
TURNOUT N "Peco-80 Medium Right SL-1738/395"
P "Normal" 1 2
@@ -57,26 +57,30 @@ TURNOUT N "Peco-80 Wye SL-1741/397"
S 0 0.000000 2.178781 -0.063715 5.000000 -0.261000
END
TURNOUT N "Peco-80 Curved Right SL-1734/386"
- P "Normal" 1 2
- P "Reverse" 1 3 4
+ P "Normal" 1 2 3
+ P "Reverse" 1 4 5 6
E 0.000000 0.000000 270.000000
- E 6.187000 -0.343000 99.763000
- E 6.093000 -0.875000 105.836000
- C 0 0 36.000000 -1.064000 -35.984000 1.693000 1.195000
- C 0 0 36.000000 1.405000 -36.024000 358.957000 8.676000
- C 0 0 18.000000 0.570000 -18.029000 0.573000 16.046000
- S 0 0 5.718000 -0.781000 6.093000 -0.875000
+ E 6.137008 -0.526772 99.815000
+ E 6.048031 -1.046457 109.633000
+ C 0 0.000000 35.984252 0.000000 -35.984252 0.000000 0.079612
+ C 0 0.000000 35.880126 0.011345 -35.880140 0.061728 9.688447
+ C 0 0.000000 36.000000 0.002864 -35.984333 9.735388 0.079612
+ C 0 0.000000 17.185618 0.172609 -17.185215 359.591225 10.119708
+ C 0 0.000000 18.699999 -0.281647 -18.642768 10.329528 9.301755
+ C 0 0.000000 18.000000 0.000137 -18.000011 19.473845 0.159155
END
TURNOUT N "Peco-80 Curved Left SL-1735/387"
- P "Normal" 1 2
- P "Reverse" 1 3 4
+ P "Normal" 1 2 3
+ P "Reverse" 1 4 5 6
E 0.000000 0.000000 270.000000
- E 6.187000 0.343000 80.237000
- E 6.093000 0.875000 74.000000
- C 0 0 -36.000000 -1.064000 35.984000 177.112000 1.195000
- C 0 0 -36.000000 1.405000 36.024000 172.367000 8.676000
- C 0 0 -18.000000 0.570000 18.029000 163.381000 16.046000
- S 0 0 5.718000 0.781000 6.093000 0.875000
+ E 6.137008 0.526772 80.185000
+ E 6.048031 1.046457 70.367000
+ C 0 0.000000 35.984252 0.000000 35.984252 179.920388 0.079612
+ C 0 0.000000 -35.880126 0.011345 35.880140 170.249825 9.688447
+ C 0 0.000000 36.000000 0.002864 35.984333 170.185000 0.079612
+ C 0 0.000000 -17.185618 0.172609 17.185215 170.289067 10.119708
+ C 0 0.000000 -18.699999 -0.281647 18.642768 160.368717 9.301755
+ C 0 0.000000 18.000000 0.000137 18.000011 160.367000 0.159155
END
SUBCONTENTS Peco Code 80 - Crossings
# Crossing Design by Dave Bullis - 3.582677 25.000000 3.582677
@@ -163,12 +167,12 @@ TURNOUT N "Peco Turn Table NB-55"
E 0.000000 -3.218750 180.000000
E -0.558930 -3.169850 190.000000
E -1.100877 -3.024636 200.000000
- E -1.609375 -2.787519 210.000000
+ E -1.609375 -2.787519 210.000000
E -2.068973 -2.465706 220.000000
- E -2.465706 -2.068973 230.000000
+ E -2.465706 -2.068973 230.000000
E -2.787519 -1.609375 240.000000
E -3.024636 -1.100877 250.000000
- E -3.169850 -0.558930 260.000000
+ E -3.169850 -0.558930 260.000000
E -3.218750 0.000000 270.000000
E -3.169850 0.558930 280.000000
E -3.024636 1.100877 290.000000
@@ -197,7 +201,7 @@ TURNOUT N "Peco Turn Table NB-55"
S 16777215 0.000000 2.298133 1.928363 -2.298133 -1.928363
S 0 0.000000 -2.298133 -1.928363 -2.465706 -2.068973
S 0 0.000000 2.787519 1.609375 2.598076 1.500000
- S 16777215 0.000000 2.598076 1.500000 -2.598076 -1.500000
+ S 16777215 0.000000 2.598076 1.500000 -2.598076 -1.500000
S 0 0.000000 -2.598076 -1.500000 -2.787519 -1.609375
S 0 0.000000 3.024636 1.100877 2.819078 1.026060
S 16777215 0.000000 2.819078 1.026060 -2.819078 -1.026060
@@ -220,7 +224,7 @@ TURNOUT N "Peco Turn Table NB-55"
S 0 0.000000 2.465706 -2.068973 2.298133 -1.928363
S 16777215 0.000000 2.298133 -1.928363 -2.298133 1.928363
S 0 0.000000 -2.298133 1.928363 -2.465706 2.068973
- S 0 0.000000 2.068973 -2.465706 1.928363 -2.298133
+ S 0 0.000000 2.068973 -2.465706 1.928363 -2.298133
S 16777215 0.000000 1.928363 -2.298133 -1.928363 2.298133
S 0 0.000000 -1.928363 2.298133 -2.068973 2.465706
S 0 0.000000 1.609375 -2.787519 1.500000 -2.598076
@@ -323,4 +327,4 @@ TURNOUT N "Peco Code 55/80 Inspection Pit(Mid Section) NB-56FB"
L 0 0.020000 0.000000 0.160000 1.122047 0.160000
L 0 0.020000 0.000000 -0.160000 1.122047 -0.160000
L 0 0.020000 0.000000 -0.300000 1.122047 -0.300000
-END \ No newline at end of file
+END
diff --git a/app/lib/params/N-Rix-Pikestuff.xtp b/app/lib/params/N-Rix-Pikestuff.xtp
index 952edda..beed7bb 100644
--- a/app/lib/params/N-Rix-Pikestuff.xtp
+++ b/app/lib/params/N-Rix-Pikestuff.xtp
@@ -1,4 +1,4 @@
-CONTENTS Rix PikeStuff N-Scale Structures
+CONTENTS Rix PikeStuff N Scale Structures
SUBCONTENTS PikeStuff Structures
STRUCTURE N "Rix-PikeStuff 30 x 40 - Modern Yard Office 541-8001"
F3 14737632 0.000000 4
diff --git a/app/lib/params/N-Shinohara70.xtp b/app/lib/params/N-Shinohara70.xtp
index 2ae43b5..9da047f 100644
--- a/app/lib/params/N-Shinohara70.xtp
+++ b/app/lib/params/N-Shinohara70.xtp
@@ -1,5 +1,5 @@
-CONTENTS Shinohara N-Scale Code70
-SUBCONTENTS Shinohara N-Scale Code70 - Crossings
+CONTENTS Shinohara N Scale Code 70
+SUBCONTENTS Shinohara N Scale Code 70 - Crossings
TURNOUT N "Shinohara 30 Degree Crossing 630"
U "Crossing" "" "Shinohara" "30 Degree Crossing" "630" 4.750000 30.000000 4.750000 0.000000 0.031250 0
P "Normal" 1 0 2
diff --git a/app/lib/params/tomix-n.xtp b/app/lib/params/N-Tomix Track.xtp
index 7d609e9..ef7c10a 100644
--- a/app/lib/params/tomix-n.xtp
+++ b/app/lib/params/N-Tomix Track.xtp
@@ -1,1689 +1,1705 @@
-CONTENTS Tomix N-Scale Fine Track
-SUBCONTENTS Tomix N-Scale Fine Track - Straight Track
-TURNOUT N "Tomix Fine Track Straight 5.51 140mm 1021"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- S 0 0 0.000000 0.000000 5.511811 0.000000
- L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
- L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
- END
-TURNOUT N "Tomix Fine Track Straight 5.51 140mm (slab type) 1046/1047"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- S 0 0 0.000000 0.000000 5.511811 0.000000
- L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
- L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
- END
-TURNOUT N "Tomix Fine Track Straight 11.02 280mm 1022"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 11.023622 0.000000 90.000000
- S 0 0 0.000000 0.000000 11.023622 0.000000
- L 11579568 0.053333 0.000000 0.364173 11.023622 0.364173
- L 11579568 0.053333 0.000000 -0.364173 11.023622 -0.364173
- END
-TURNOUT N "Tomix Fine Track Straight 2.85 72.5mm 1023"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.854331 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.854331 0.000000
- L 11579568 0.053333 0.000000 0.364173 2.854331 0.364173
- L 11579568 0.053333 0.000000 -0.364173 2.854331 -0.364173
- END
-TURNOUT N "Tomix Fine Track Straight 2.75 70mm 1024"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.755906 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.755906 0.000000
- L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
- L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
- END
-TURNOUT N "Tomix Fine Track Straight 3.89 99mm 1025"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.897638 0.000000 90.000000
- S 0 0 0.000000 0.000000 3.897638 0.000000
- L 11579568 0.053333 0.000000 0.364173 3.897638 0.364173
- L 11579568 0.053333 0.000000 -0.364173 3.897638 -0.364173
- END
-TURNOUT N "Tomix Fine Track Straight 6.24 158.5mm 1026"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.240157 0.000000 90.000000
- S 0 0 0.000000 0.000000 6.240157 0.000000
- L 11579568 0.053333 0.000000 0.364173 6.240157 0.364173
- L 11579568 0.053333 0.000000 -0.364173 6.240157 -0.364173
- END
-TURNOUT N "Tomix Fine Track Straight 0.72 18.5mm 1099A"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 0.725346 0.000000 90.000000
- S 0 0 0.000000 0.000000 0.725346 0.000000
- L 11579568 0.053333 0.000000 0.364173 0.725346 0.364173
- L 11579568 0.053333 0.000000 -0.364173 0.725346 -0.364173
- END
-TURNOUT N "Tomix Fine Track Straight 1.29 33mm 1099B"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.299213 0.000000 90.000000
- S 0 0 0.000000 0.000000 1.299213 0.000000
- L 11579568 0.053333 0.000000 0.364173 1.299213 0.364173
- L 11579568 0.053333 0.000000 -0.364173 1.299213 -0.364173
- END
-
-SUBCONTENTS Tomix N-Scale Fine Track - Straight PC Track
-TURNOUT N "Tomix Fine Track PC Straight 2.75 70mm 1014"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.755906 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.755906 0.000000
- L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
- L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
- END
-TURNOUT N "Tomix Fine Track PC Straight 2.85 72.5mm 1013"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.854331 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.854331 0.000000
- L 11579568 0.053333 0.000000 0.364173 2.854331 0.364173
- L 11579568 0.053333 0.000000 -0.364173 2.854331 -0.364173
- END
-TURNOUT N "Tomix Fine Track PC Straight 3.89 99mm 1015"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.897638 0.000000 90.000000
- S 0 0 0.000000 0.000000 3.897638 0.000000
- L 11579568 0.053333 0.000000 0.364173 3.897638 0.364173
- L 11579568 0.053333 0.000000 -0.364173 3.897638 -0.364173
- END
-TURNOUT N "Tomix Fine Track PC Straight 5.51 140mm 1011"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- S 0 0 0.000000 0.000000 5.511811 0.000000
- L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
- L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
- END
-TURNOUT N "Tomix Fine Track PC Straight 6.24 158.5mm 1016"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.240157 0.000000 90.000000
- S 0 0 0.000000 0.000000 6.240157 0.000000
- L 11579568 0.053333 0.000000 0.364173 6.240157 0.364173
- L 11579568 0.053333 0.000000 -0.364173 6.240157 -0.364173
- END
-TURNOUT N "Tomix Fine Track PC Straight 11.02 280mm 1012/1093"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 11.023622 0.000000 90.000000
- S 0 0 0.000000 0.000000 11.023622 0.000000
- L 11579568 0.053333 0.000000 0.364173 11.023622 0.364173
- L 11579568 0.053333 0.000000 -0.364173 11.023622 -0.364173
- END
-
-SUBCONTENTS Tomix N-Scale Fine Track - Widetrack PC Straight Track
-TURNOUT N "Tomix Fine Track Widetrack PC Straight 5.51 140mm 1731/1761"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- S 0 0 0.000000 0.000000 5.511811 0.000000
- L 11579568 0.053333 0.000000 0.728346 5.511811 0.728346
- L 11579568 0.053333 0.000000 -0.728346 5.511811 -0.728346
- END
-TURNOUT N "Tomix Fine Track Widetrack PC Straight(branch) 5.51 140mm 1739/1769"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- S 0 0 0.000000 0.000000 5.511811 0.000000
- L 11579568 0.053333 0.000000 0.728346 5.511811 0.728346
- L 11579568 0.053333 0.000000 -0.728346 5.511811 -0.728346
- END
-TURNOUT N "Tomix Fine Track Widetrack PC Straight 11.02 280mm 1730/1732/1762"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 11.023622 0.000000 90.000000
- S 0 0 0.000000 0.000000 11.023622 0.000000
- L 11579568 0.053333 0.000000 0.728346 11.023622 0.728346
- L 11579568 0.053333 0.000000 -0.728346 11.023622 -0.728346
- END
-TURNOUT N "Tomix Fine Track Widetrack PC Straight 2.85 72.5mm 1733/1763"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.854331 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.854331 0.000000
- L 11579568 0.053333 0.000000 0.728346 2.854331 0.728346
- L 11579568 0.053333 0.000000 -0.728346 2.854331 -0.728346
- END
-TURNOUT N "Tomix Fine Track Widetrack PC Straight 2.75 70mm 1734/1764"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.755906 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.755906 0.000000
- L 11579568 0.053333 0.000000 0.728346 2.755906 0.728346
- L 11579568 0.053333 0.000000 -0.728346 2.755906 -0.728346
- END
-TURNOUT N "Tomix Fine Track Widetrack PC Straight 3.89 99mm 1735"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.897638 0.000000 90.000000
- S 0 0 0.000000 0.000000 3.897638 0.000000
- L 11579568 0.053333 0.000000 0.728346 3.897638 0.728346
- L 11579568 0.053333 0.000000 -0.728346 3.897638 -0.728346
- END
-TURNOUT N "Tomix Fine Track Widetrack PC Straight 6.24 158.5mm 1736"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.240157 0.000000 90.000000
- S 0 0 0.000000 0.000000 6.240157 0.000000
- L 11579568 0.053333 0.000000 0.728346 6.240157 0.728346
- L 11579568 0.053333 0.000000 -0.728346 6.240157 -0.728346
- END
-TURNOUT N "Tomix Fine Track Widetrack PC Straight 0.72 18.5mm 1738A"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 0.725346 0.000000 90.000000
- S 0 0 0.000000 0.000000 0.725346 0.000000
- L 11579568 0.053333 0.000000 0.728346 0.725346 0.728346
- L 11579568 0.053333 0.000000 -0.728346 0.725346 -0.728346
- END
-TURNOUT N "Tomix Fine Track Widetrack PC Straight 1.29 33mm 1738B"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.299213 0.000000 90.000000
- S 0 0 0.000000 0.000000 1.299213 0.000000
- L 11579568 0.053333 0.000000 0.728346 1.299213 0.364173
- L 11579568 0.053333 0.000000 -0.728346 1.299213 -0.728346
- END
-
-SUBCONTENTS Tomix N-Scale Fine Track - Buffers
-TURNOUT N "Tomix Fine Track Buffer Trk 111mm 1421"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0 0.000000 0.000000 4.370079 0.000000
- L 11579568 0.053333 0.000000 0.364173 4.370079 0.364173
- L 11579568 0.053333 0.000000 -0.364173 4.370079 -0.364173
- L 11579568 0.053333 4.370079 0.364173 4.370079 -0.364173
- L 0 0.106666 3.000000 0.000000 3.100000 0.000000
- L 0 0.053333 2.750000 0.190000 4.370079 0.190000
- L 0 0.053333 2.750000 -0.190000 4.370079 -0.190000
- L 0 0.053333 2.750000 0.190000 3.100000 0.000000
- L 0 0.053333 2.750000 -0.190000 3.100000 0.000000
- L 0 0.053333 3.100000 0.000000 4.370079 0.190000
- L 0 0.053333 3.100000 0.000000 4.370079 -0.190000
- END
-TURNOUT N "Tomix Fine Track Buffer Trk(LED) 80mm 1422"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0 0.000000 0.000000 1.574803 0.000000
- L 11579568 0.053333 0.000000 0.364173 3.149606 0.364173
- L 11579568 0.053333 0.000000 -0.364173 3.149606 -0.364173
- L 11579568 0.053333 1.574803 0.364173 1.574803 -0.364173
- L 11579568 0.053333 3.149606 0.364173 3.149606 -0.364173
- F 11579568 0.000000 4
- 2.456693 -0.190000 0
- 3.055118 -0.190000 0
- 3.055118 0.190000 0
- 2.456693 0.190000 0
- END
-TURNOUT N "Tomix Fine Track Buffer Trk(LED2) 49mm 1423"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0 0.000000 0.000000 1.299213 0.000000
- L 11579568 0.053333 0.000000 0.364173 1.929134 0.364173
- L 11579568 0.053333 0.000000 -0.364173 1.929134 -0.364173
- L 11579568 0.053333 1.299213 0.364173 1.299213 -0.364173
- L 11579568 0.053333 1.929134 0.364173 1.929134 -0.364173
- L 11579568 0.053333 0.852441 0.000000 1.629134 0.000000
- F 11579568 0.000000 4
- 0.472441 -0.190000 0
- 0.852441 -0.190000 0
- 0.852441 0.190000 0
- 0.472441 0.190000 0
- F 11579568 0.000000 4
- 1.529134 -0.100000 0
- 1.729134 -0.100000 0
- 1.729134 0.100000 0
- 1.529134 0.100000 0
- END
-TURNOUT N "Tomix Fine Track PC Buffer Trk(LED) 80mm 1427"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0 0.000000 0.000000 1.574803 0.000000
- L 11579568 0.053333 0.000000 0.364173 3.149606 0.364173
- L 11579568 0.053333 0.000000 -0.364173 3.149606 -0.364173
- L 11579568 0.053333 1.574803 0.364173 1.574803 -0.364173
- L 11579568 0.053333 3.149606 0.364173 3.149606 -0.364173
- F 11579568 0.000000 4
- 2.456693 -0.190000 0
- 3.055118 -0.190000 0
- 3.055118 0.190000 0
- 2.456693 0.190000 0
- END
-
-
-SUBCONTENTS Tomix N-Scale Fine Track - Curved Track
-TURNOUT N "Tomix Fine Track Mini Curve 4.05R 103mm 30° 1111A"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.027559 -0.543345 120.000000
- C 0 0 4.055118 0.000000 -4.055118 0.000000 30.000000
- A 11579568 0.053333 3.690945 0.000000 -4.055118 0.000000 30.000000
- A 11579568 0.053333 4.419291 0.000000 -4.055118 0.000000 30.000000
- END
-TURNOUT N "Tomix Fine Track Mini Curve 4.05R 103mm 60° 1111B"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.511835 -2.027559 150.000000
- C 0 0 4.055118 0.000000 -4.055118 0.000000 60.000000
- A 11579568 0.053333 3.690945 0.000000 -4.055118 0.000000 60.000000
- A 11579568 0.053333 4.419291 0.000000 -4.055118 0.000000 60.000000
- END
-TURNOUT N "Tomix Fine Track Mini Curve 5.51R 140mm 30° 1112A"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.755906 -0.738443 120.000000
- C 0 0 5.511811 0.000000 -5.511811 0.000000 30.000000
- A 11579568 0.053333 5.147638 0.000000 -5.511811 0.000000 30.000000
- A 11579568 0.053333 5.875984 0.000000 -5.511811 0.000000 30.000000
- END
-TURNOUT N "Tomix Fine Track Mini Curve 5.51R 140mm 60° 1112B"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.773368 -2.755905 150.000000
- C 0 0 5.511811 0.000000 -5.511811 0.000000 60.000000
- A 11579568 0.053333 5.147638 0.000000 -5.511811 0.000000 60.000000
- A 11579568 0.053333 5.875984 0.000000 -5.511811 0.000000 60.000000
- END
-TURNOUT N "Tomix Fine Track Mini Curve 6.96R 177mm 30° 1113A"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.484252 -0.933603 120.000000
- C 0 0 6.968504 0.000000 -6.968504 0.000000 30.000000
- A 11579568 0.053333 6.604331 0.000000 -6.968504 0.000000 30.000000
- A 11579568 0.053333 7.332677 0.000000 -6.968504 0.000000 30.000000
- END
-TURNOUT N "Tomix Fine Track Mini Curve 6.96R 177mm 60° 1113B"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.034901 -3.484252 150.000000
- C 0 0 6.968504 0.000000 -6.968504 0.000000 60.000000
- A 11579568 0.053333 6.604331 0.000000 -6.968504 0.000000 60.000000
- A 11579568 0.053333 7.332677 0.000000 -6.968504 0.000000 60.000000
- END
-TURNOUT N "Tomix Fine Track Curve 9.56R 243mm 15° 1143"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.476103 -0.325985 105.000000
- C 0 0 9.566929 0.000000 -9.566929 0.000000 15.000000
- A 11579568 0.053333 9.202756 0.000000 -9.566929 0.000000 15.000000
- A 11579568 0.053333 9.931102 0.000000 -9.566929 0.000000 15.000000
- END
-TURNOUT N "Tomix Fine Track Curve 9.56R 243mm 45° 1125"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.764840 -2.802089 135.000000
- C 0 0 9.566929 0.000000 -9.566929 0.000000 45.000000
- A 11579568 0.053333 9.202756 0.000000 -9.566929 0.000000 45.000000
- A 11579568 0.053333 9.931102 0.000000 -9.566929 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track Curve 11.02R 280mm 15° 1124"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.853123 -0.375621 105.000000
- C 0 0 11.023622 0.000000 -11.023622 0.000000 15.000000
- A 11579568 0.053333 10.659449 0.000000 -11.023622 0.000000 15.000000
- A 11579568 0.053333 11.387796 0.000000 -11.023622 0.000000 15.000000
- END
-TURNOUT N "Tomix Fine Track Curve 11.02R 280mm 45° 1121"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.794878 -3.228744 135.000000
- C 0 0 11.023622 0.000000 -11.023622 0.000000 45.000000
- A 11579568 0.053333 10.659449 0.000000 -11.023622 0.000000 45.000000
- A 11579568 0.053333 11.387796 0.000000 -11.023622 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track Curve 12.48R 317mm 15° 1127"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.230143 -0.425256 105.000000
- C 0 0 12.480315 0.000000 -12.480315 0.000000 15.000000
- A 11579568 0.053333 12.116143 0.000000 -12.480315 0.000000 15.000000
- A 11579568 0.053333 12.844488 0.000000 -12.480315 0.000000 15.000000
- END
-TURNOUT N "Tomix Fine Track Curve 12.48R 317mm 45° 1122"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 8.824915 -3.655400 135.000000
- C 0 0 12.480315 0.000000 -12.480315 0.000000 45.000000
- A 11579568 0.053333 12.116143 0.000000 -12.480315 0.000000 45.000000
- A 11579568 0.053333 12.844488 0.000000 -12.480315 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track Curve 13.93R 354mm 15° 1144"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.607163 -0.474892 105.000000
- C 0 0 13.937008 0.000000 -13.937008 0.000000 15.000000
- A 11579568 0.053333 13.572835 0.000000 -13.937008 0.000000 15.000000
- A 11579568 0.053333 14.301181 0.000000 -13.937008 0.000000 15.000000
- END
-TURNOUT N "Tomix Fine Track Curve 13.93R 354mm 45° 1126"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.854953 -4.082055 135.000000
- C 0 0 13.937008 0.000000 -13.937008 0.000000 45.000000
- A 11579568 0.053333 13.572835 0.000000 -13.937008 0.000000 45.000000
- A 11579568 0.053333 14.301181 0.000000 -13.937008 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track Curve 15.39R 391mm 15° 1145"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.984183 -0.524528 105.000000
- C 0 0 15.393701 0.000000 -15.393701 0.000000 15.000000
- A 11579568 0.053333 15.029528 0.000000 -15.393701 0.000000 15.000000
- A 11579568 0.053333 15.757874 0.000000 -15.393701 0.000000 15.000000
- END
-TURNOUT N "Tomix Fine Track Curve 15.39R 391mm 45° 1128"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 10.884990 -4.508711 135.000000
- C 0 0 15.393701 0.000000 -15.393701 0.000000 45.000000
- A 11579568 0.053333 15.029528 0.000000 -15.393701 0.000000 45.000000
- A 11579568 0.053333 15.757874 0.000000 -15.393701 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track Curve 21.29R 541mm 15° 1123"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.512642 -0.725753 105.000000
- C 0 0 21.299213 0.000000 -21.299213 0.000000 15.000000
- A 11579568 0.053333 20.935040 0.000000 -21.299213 0.000000 15.000000
- A 11579568 0.053333 21.663386 0.000000 -21.299213 0.000000 15.000000
- END
-TURNOUT N "Tomix Fine Track Curve 23.82R 605mm 10° 1150"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.136108 -0.361863 100.000000
- C 0 0 23.818898 0.000000 -23.818898 0.000000 10.000000
- A 11579568 0.053333 23.454725 0.000000 -23.818898 0.000000 10.000000
- A 11579568 0.053333 24.183071 0.000000 -23.818898 0.000000 10.000000
- END
-
-SUBCONTENTS Tomix N-Scale Fine Track - Curved PC Track
-TURNOUT N "Tomix Fine Track PC Curve 11.02R 280mm 15° 1194"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.853123 -0.375621 105.000000
- C 0 0 11.023622 0.000000 -11.023622 0.000000 15.000000
- A 11579568 0.053333 10.659449 0.000000 -11.023622 0.000000 15.000000
- A 11579568 0.053333 11.387796 0.000000 -11.023622 0.000000 15.000000
- END
-TURNOUT N "Tomix Fine Track PC Curve 11.02R 280mm 45° 1191"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.794878 -3.228744 135.000000
- C 0 0 11.023622 0.000000 -11.023622 0.000000 45.000000
- A 11579568 0.053333 10.659449 0.000000 -11.023622 0.000000 45.000000
- A 11579568 0.053333 11.387796 0.000000 -11.023622 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track PC Curve 9.56R 243mm 45° 1195"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.764840 -2.802089 135.000000
- C 0 0 9.566929 0.000000 -9.566929 0.000000 45.000000
- A 11579568 0.053333 9.202756 0.000000 -9.566929 0.000000 45.000000
- A 11579568 0.053333 9.931102 0.000000 -9.566929 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track PC Curve 12.48R 317mm 45° 1192"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 8.824915 -3.655400 135.000000
- C 0 0 12.480315 0.000000 -12.480315 0.000000 45.000000
- A 11579568 0.053333 12.116143 0.000000 -12.480315 0.000000 45.000000
- A 11579568 0.053333 12.844488 0.000000 -12.480315 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track PC Curve 13.93R 354mm 45° 1196"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.854953 -4.082055 135.000000
- C 0 0 13.937008 0.000000 -13.937008 0.000000 45.000000
- A 11579568 0.053333 13.572835 0.000000 -13.937008 0.000000 45.000000
- A 11579568 0.053333 14.301181 0.000000 -13.937008 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track PC Curve 15.39R 391mm 45° 1198"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 10.884990 -4.508711 135.000000
- C 0 0 15.393701 0.000000 -15.393701 0.000000 45.000000
- A 11579568 0.053333 15.029528 0.000000 -15.393701 0.000000 45.000000
- A 11579568 0.053333 15.757874 0.000000 -15.393701 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track PC Curve 21.29R 541mm 15° 1193"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.512642 -0.725753 105.000000
- C 0 0 21.299213 0.000000 -21.299213 0.000000 15.000000
- A 11579568 0.053333 20.935040 0.000000 -21.299213 0.000000 15.000000
- A 11579568 0.053333 21.663386 0.000000 -21.299213 0.000000 15.000000
- END
-TURNOUT N "Tomix Fine Track PC Curve 23.82R 605mm 10° 1190"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.136108 -0.361863 100.000000
- C 0 0 23.818898 0.000000 -23.818898 0.000000 10.000000
- A 11579568 0.053333 23.454725 0.000000 -23.818898 0.000000 10.000000
- A 11579568 0.053333 24.183071 0.000000 -23.818898 0.000000 10.000000
- END
-
-SUBCONTENTS Tomix N-Scale Fine Track - Widetrack PC Curved Track
-TURNOUT N "Tomix Fine Track Widetrack PC Curve 11.02R 280mm 22.5° 1751/1781"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.218558 -0.839123 112.500000
- C 0 0 11.023622 0.000000 -11.023622 0.000000 22.500000
- A 11579568 0.053333 10.295276 0.000000 -11.023622 0.000000 22.500000
- A 11579568 0.053333 11.751968 0.000000 -11.023622 0.000000 22.500000
- END
-TURNOUT N "Tomix Fine Track Widetrack PC Curve 11.02R 280mm 45° 1741/1771"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.794878 -3.228744 135.000000
- C 0 0 11.023622 0.000000 -11.023622 0.000000 45.000000
- A 11579568 0.053333 10.295276 0.000000 -11.023622 0.000000 45.000000
- A 11579568 0.053333 11.751968 0.000000 -11.023622 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track Widetrack PC Curve 12.48R 317mm 22.5° 1752/1782"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.776010 -0.950007 112.500000
- C 0 0 12.480315 0.000000 -12.480315 0.000000 22.500000
- A 11579568 0.053333 11.751968 0.000000 -12.480315 0.000000 22.500000
- A 11579568 0.053333 13.208661 0.000000 -12.480315 0.000000 22.500000
- END
-TURNOUT N "Tomix Fine Track Widetrack PC Curve 12.48R 317mm 45° 1742/1772"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 8.824915 -3.655400 135.000000
- C 0 0 12.480315 0.000000 -12.480315 0.000000 45.000000
- A 11579568 0.053333 11.751968 0.000000 -12.480315 0.000000 45.000000
- A 11579568 0.053333 13.208661 0.000000 -12.480315 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track Widetrack PC Curve 13.93R 354mm 22.5° 1753/1783"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.333462 -1.060892 112.500000
- C 0 0 13.937008 0.000000 -13.937008 0.000000 22.500000
- A 11579568 0.053333 13.208661 0.000000 -13.937008 0.000000 22.500000
- A 11579568 0.053333 14.665354 0.000000 -13.937008 0.000000 22.500000
- END
-TURNOUT N "Tomix Fine Track Widetrack PC Curve 13.93R 354mm 45° 1743/1773"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.854953 -4.082055 135.000000
- C 0 0 13.937008 0.000000 -13.937008 0.000000 45.000000
- A 11579568 0.053333 13.208661 0.000000 -13.937008 0.000000 45.000000
- A 11579568 0.053333 14.665354 0.000000 -13.937008 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track Widetrack PC Curve 15.39R 391mm 22.5° 1754/1784"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.890914 -1.171776 112.500000
- C 0 0 15.393701 0.000000 -15.393701 0.000000 22.500000
- A 11579568 0.053333 14.665354 0.000000 -15.393701 0.000000 22.500000
- A 11579568 0.053333 16.122047 0.000000 -15.393701 0.000000 22.500000
- END
-TURNOUT N "Tomix Fine Track Widetrack PC Curve 15.39R 391mm 45° 1744/1774"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 10.884990 -4.508711 135.000000
- C 0 0 15.393701 0.000000 -15.393701 0.000000 45.000000
- A 11579568 0.053333 14.665354 0.000000 -15.393701 0.000000 45.000000
- A 11579568 0.053333 16.122047 0.000000 -15.393701 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track Widetrack PC Curve 21.29R 541mm 15° 1740/1770"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.512642 -0.725753 105.000000
- C 0 0 21.299213 0.000000 -21.299213 0.000000 15.000000
- A 11579568 0.053333 20.570867 0.000000 -21.299213 0.000000 15.000000
- A 11579568 0.053333 22.027559 0.000000 -21.299213 0.000000 15.000000
- END
-TURNOUT N "Tomix Fine Track Widetrack PC Curve 23.82R 605mm 10° 1750"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.136108 -0.361863 100.000000
- C 0 0 23.818898 0.000000 -23.818898 0.000000 10.000000
- A 11579568 0.053333 23.090552 0.000000 -23.818898 0.000000 10.000000
- A 11579568 0.053333 24.547244 0.000000 -23.818898 0.000000 10.000000
- END
-
-SUBCONTENTS Tomix N-Scale Fine Track - Viaduct Track
-TURNOUT N "Tomix Fine Track Viaduct Straight 3.89 99mm 1075"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.897638 0.000000 90.000000
- S 0 0 0.000000 0.000000 3.897638 0.000000
- L 11579568 0.053333 0.000000 0.701680 3.897638 0.701680
- L 11579568 0.053333 0.000000 -0.701680 3.897638 -0.701680
- END
-TURNOUT N "Tomix Fine Track Viaduct Straight 5.51 140mm 1071"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- S 0 0 0.000000 0.000000 5.511811 0.000000
- L 11579568 0.053333 0.000000 0.701680 5.511811 0.701680
- L 11579568 0.053333 0.000000 -0.701680 5.511811 -0.701680
- END
-TURNOUT N "Tomix Fine Track Viaduct Straight 6.24 158.5mm 1076"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.240157 0.000000 90.000000
- S 0 0 0.000000 0.000000 6.240157 0.000000
- L 11579568 0.053333 0.000000 0.701680 6.240157 0.701680
- L 11579568 0.053333 0.000000 -0.701680 6.240157 -0.701680
- END
-TURNOUT N "Tomix Fine Track Viaduct Straight 11.02 280mm 1072"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 11.023622 0.000000 90.000000
- S 0 0 0.000000 0.000000 11.023622 0.000000
- L 11579568 0.053333 0.000000 0.701680 11.023622 0.701680
- L 11579568 0.053333 0.000000 -0.701680 11.023622 -0.701680
- END
-TURNOUT N "Tomix Fine Track Viaduct Curve 9.56R 243mm 45° 1173"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.764840 -2.802089 135.000000
- C 0 0 9.566929 0.000000 -9.566929 0.000000 45.000000
- A 11579568 0.053333 8.865249 0.000000 -9.566929 0.000000 45.000000
- A 11579568 0.053333 10.268609 0.000000 -9.566929 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track Viaduct Curve 11.02R 280mm 45° 1171"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.794878 -3.228744 135.000000
- C 0 0 11.023622 0.000000 -11.023622 0.000000 45.000000
- A 11579568 0.053333 10.321942 0.000000 -11.023622 0.000000 45.000000
- A 11579568 0.053333 11.725302 0.000000 -11.023622 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track Viaduct Curve 12.48R 317mm 45° 1127"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 8.824915 -3.655400 135.000000
- C 0 0 12.480315 0.000000 -12.480315 0.000000 45.000000
- A 11579568 0.053333 11.778635 0.000000 -12.480315 0.000000 45.000000
- A 11579568 0.053333 13.181995 0.000000 -12.480315 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track Viaduct Curve 13.93R 354mm 45° 1174"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.854953 -4.082055 135.000000
- C 0 0 13.937008 0.000000 -13.937008 0.000000 45.000000
- A 11579568 0.053333 13.235328 0.000000 -13.937008 0.000000 45.000000
- A 11579568 0.053333 14.638688 0.000000 -13.937008 0.000000 45.000000
- END
-
-SUBCONTENTS Tomix N-Scale Fine Track - Overhead PC Track
-TURNOUT N "Tomix Fine Track Overhead PC Straight 3.89 99mm 1825"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.897638 0.000000 90.000000
- S 0 0 0.000000 0.000000 3.897638 0.000000
- L 11579568 0.053333 0.000000 0.701680 3.897638 0.701680
- L 11579568 0.053333 0.000000 -0.701680 3.897638 -0.701680
- END
-TURNOUT N "Tomix Fine Track Overhead PC Straight 5.51 140mm 1821"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- S 0 0 0.000000 0.000000 5.511811 0.000000
- L 11579568 0.053333 0.000000 0.701680 5.511811 0.701680
- L 11579568 0.053333 0.000000 -0.701680 5.511811 -0.701680
- END
-TURNOUT N "Tomix Fine Track Overhead PC Straight 6.24 158.5mm 1826"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.240157 0.000000 90.000000
- S 0 0 0.000000 0.000000 6.240157 0.000000
- L 11579568 0.053333 0.000000 0.701680 6.240157 0.701680
- L 11579568 0.053333 0.000000 -0.701680 6.240157 -0.701680
- END
-TURNOUT N "Tomix Fine Track Overhead PC Straight 11.02 280mm 1822"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 11.023622 0.000000 90.000000
- S 0 0 0.000000 0.000000 11.023622 0.000000
- L 11579568 0.053333 0.000000 0.701680 11.023622 0.701680
- L 11579568 0.053333 0.000000 -0.701680 11.023622 -0.701680
- END
-TURNOUT N "Tomix Fine Track Overhead PC Curve 9.56R 243mm 45° 1873"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.764840 -2.802089 135.000000
- C 0 0 9.566929 0.000000 -9.566929 0.000000 45.000000
- A 11579568 0.053333 8.865249 0.000000 -9.566929 0.000000 45.000000
- A 11579568 0.053333 10.268609 0.000000 -9.566929 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track Overhead PC Curve 11.02R 280mm 45° 1871"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.794878 -3.228744 135.000000
- C 0 0 11.023622 0.000000 -11.023622 0.000000 45.000000
- A 11579568 0.053333 10.321942 0.000000 -11.023622 0.000000 45.000000
- A 11579568 0.053333 11.725302 0.000000 -11.023622 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track Overhead PC Curve 12.48R 317mm 45° 1872"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 8.824915 -3.655400 135.000000
- C 0 0 12.480315 0.000000 -12.480315 0.000000 45.000000
- A 11579568 0.053333 11.778635 0.000000 -12.480315 0.000000 45.000000
- A 11579568 0.053333 13.181995 0.000000 -12.480315 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track Overhead PC Curve 13.93R 354mm 45° 1874"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.854953 -4.082055 135.000000
- C 0 0 13.937008 0.000000 -13.937008 0.000000 45.000000
- A 11579568 0.053333 13.235328 0.000000 -13.937008 0.000000 45.000000
- A 11579568 0.053333 14.638688 0.000000 -13.937008 0.000000 45.000000
- END
-
-SUBCONTENTS Tomix N-Scale Fine Track - Overhead Double Track
-TURNOUT N "Tomix Fine Track Overhead Dbl Trk Straight 5.51 140mm 1061"
- P "Normal" 1
- E 0.000000 0.728346 270.000000
- E 5.511811 0.728346 90.000000
- E 0.000000 -0.728346 270.000000
- E 5.511811 -0.728346 90.000000
- S 0 0 0.000000 0.728346 5.511811 0.728346
- S 0 0 0.000000 -0.728346 5.511811 -0.728346
- L 11579568 0.053333 0.000000 1.456692 5.511811 1.456692
- L 11579568 0.053333 0.000000 -1.456692 5.511811 -1.456692
- END
-TURNOUT N "Tomix Fine Track Overhead Dbl Trk Straight 11.02 280mm 1062"
- P "Normal" 1
- E 0.000000 0.728346 270.000000
- E 11.023622 0.728346 90.000000
- E 0.000000 -0.728346 270.000000
- E 11.023622 -0.728346 90.000000
- S 0 0 0.000000 0.728346 11.023622 0.728346
- S 0 0 0.000000 -0.728346 11.023622 -0.728346
- L 11579568 0.053333 0.000000 1.456692 11.023622 1.456692
- L 11579568 0.053333 0.000000 -1.456692 11.023622 -1.456692
- END
-TURNOUT N "Tomix Fine Track Overhead Dbl Trk Straight 44.09 1120mm 1069"
- P "Normal" 1
- E 0.000000 0.728346 270.000000
- E 44.094488 0.728346 90.000000
- E 0.000000 -0.728346 270.000000
- E 44.094488 -0.728346 90.000000
- S 0 0 0.000000 0.728346 44.094488 0.728346
- S 0 0 0.000000 -0.728346 44.094488 -0.728346
- L 11579568 0.053333 0.000000 1.456692 44.094488 1.456692
- L 11579568 0.053333 0.000000 -1.456692 44.094488 -1.456692
- END
-TURNOUT N "Tomix Fine Track Overhead Dbl Trk Curve 11.02/12.48R 280/317mm 45° 1161"
- P "Normal" 1
- E 0.000000 0.728346 270.000000
- E 0.000000 -0.728346 270.000000
- E 8.824915 -2.927054 135.000000
- E 7.794878 -3.957090 135.000000
- C 0 0 12.480315 0.000000 -11.751968 0.000000 45.000000
- C 0 0 11.023622 0.000000 -11.751968 0.000000 45.000000
- A 11579568 0.053333 13.208661 0.000000 -11.751968 0.000000 45.000000
- A 11579568 0.053333 10.295276 0.000000 -11.751968 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track Overhead Dbl Trk Curve 13.93/15.39R 354/391mm 45° 1162"
- P "Normal" 1
- E 0.000000 0.728346 270.000000
- E 0.000000 -0.728346 270.000000
- E 10.884990 -3.780365 135.000000
- E 9.854953 -4.810401 135.000000
- C 0 0 15.393701 0.000000 -14.663354 0.000000 45.000000
- C 0 0 13.937008 0.000000 -14.663354 0.000000 45.000000
- A 11579568 0.053333 16.122047 0.000000 -14.663354 0.000000 45.000000
- A 11579568 0.053333 13.208662 0.000000 -14.663354 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track Overhead Dbl Trk Curve 16.85/18.30R 428/465mm 45° 1163"
- P "Normal" 1
- E 0.000000 0.728346 270.000000
- E 0.000000 -0.728346 270.000000
- E 12.945065 -4.633676 135.000000
- E 11.915028 -5.663712 135.000000
- C 0 0 18.307087 0.000000 -17.578740 0.000000 45.000000
- C 0 0 16.850394 0.000000 -17.578740 0.000000 45.000000
- A 11579568 0.053333 19.035433 0.000000 -17.578740 0.000000 45.000000
- A 11579568 0.053333 16.122048 0.000000 -17.578740 0.000000 45.000000
- END
-
-SUBCONTENTS Tomix N-Scale Fine Track - Viaduct Double Track Slab Type
-TURNOUT N "Tomix Fine Track Viaduct Dbl Trk Straight 5.51 140mm (slab type) 1066"
- P "Normal" 1
- E 0.000000 0.728346 270.000000
- E 5.511811 0.728346 90.000000
- E 0.000000 -0.728346 270.000000
- E 5.511811 -0.728346 90.000000
- S 0 0 0.000000 0.728346 5.511811 0.728346
- S 0 0 0.000000 -0.728346 5.511811 -0.728346
- L 11579568 0.053333 0.000000 1.456692 5.511811 1.456692
- L 11579568 0.053333 0.000000 -1.456692 5.511811 -1.456692
- END
-TURNOUT N "Tomix Fine Track Viaduct Dbl Trk Straight 11.02 280mm (slab type) 1067"
- P "Normal" 1
- E 0.000000 0.728346 270.000000
- E 11.023622 0.728346 90.000000
- E 0.000000 -0.728346 270.000000
- E 11.023622 -0.728346 90.000000
- S 0 0 0.000000 0.728346 11.023622 0.728346
- S 0 0 0.000000 -0.728346 11.023622 -0.728346
- L 11579568 0.053333 0.000000 1.456692 11.023622 1.456692
- L 11579568 0.053333 0.000000 -1.456692 11.023622 -1.456692
- END
-TURNOUT N "Tomix Fine Track Viaduct Dbl Trk Straight 44.09 1120mm (slab type) 1070"
- P "Normal" 1
- E 0.000000 0.728346 270.000000
- E 44.094488 0.728346 90.000000
- E 0.000000 -0.728346 270.000000
- E 44.094488 -0.728346 90.000000
- S 0 0 0.000000 0.728346 44.094488 0.728346
- S 0 0 0.000000 -0.728346 44.094488 -0.728346
- L 11579568 0.053333 0.000000 1.456692 44.094488 1.456692
- L 11579568 0.053333 0.000000 -1.456692 44.094488 -1.456692
- END
-TURNOUT N "Tomix Fine Track Viaduct Dbl Trk Curve 16.85/18.30R 428/465mm 45°(slab type) 1168"
- P "Normal" 1
- E 0.000000 0.728346 270.000000
- E 0.000000 -0.728346 270.000000
- E 12.945065 -4.633676 135.000000
- E 11.915028 -5.663712 135.000000
- C 0 0 18.307087 0.000000 -17.578740 0.000000 45.000000
- C 0 0 16.850394 0.000000 -17.578740 0.000000 45.000000
- A 11579568 0.053333 19.035433 0.000000 -17.578740 0.000000 45.000000
- A 11579568 0.053333 16.122048 0.000000 -17.578740 0.000000 45.000000
- END
-TURNOUT N "Tomix Fine Track Viaduct Dbl Trk Curve 19.76/21.22R 502/539mm 22.5°(slab type) 1169"
- P "Normal" 1
- E 0.000000 0.728346 270.000000
- E 0.000000 -0.728346 270.000000
- E 8.120723 -0.886966 112.500000
- E 7.563271 -2.232774 112.500000
- C 0 0 21.220472 0.000000 -20.492125 0.000000 22.500000
- C 0 0 19.763779 0.000000 -20.492125 0.000000 22.500000
- A 11579568 0.053333 21.948818 0.000000 -20.492125 0.000000 22.500000
- A 11579568 0.053333 19.035434 0.000000 -20.492125 0.000000 22.500000
- END
-
-
-SUBCONTENTS Tomix N-Scale Fine Track - Turnouts
-TURNOUT N "Tomix Fine Track Turnout 541mm-R15 (manual) 1209"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- E 5.512642 -0.725753 105.000000
- S 0 0 0.000000 0.000000 5.511811 0.000000
- C 0 0 21.299213 0.000000 -21.299213 0.000000 15.000000
- L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
- A 11579568 0.053333 20.935040 0.000000 -21.299213 0.000000 15.000000
- G 11579568 0.000000 0.187500 0.437500 -0.633274 0
- G 11579568 0.000000 0.187500 0.562500 -0.633274 0
- F 11579568 0.000000 4
- 0.437500 -0.364173 0
- 0.437500 -0.820774 0
- 0.562500 -0.820774 0
- 0.562500 -0.364173 0
- END
-TURNOUT N "Tomix Fine Track Turnout 541mm-L15 (manual) 1210"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- E 5.512642 0.725753 75.000000
- S 0 0 0.000000 0.000000 5.511811 0.000000
- C 0 0 21.299213 0.000000 21.299213 165.000000 15.000000
- L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
- A 11579568 0.053333 20.935040 0.000000 21.299213 165.000000 15.000000
- G 11579568 0.000000 0.187500 0.437500 0.633274 0
- G 11579568 0.000000 0.187500 0.562500 0.633274 0
- F 11579568 0.000000 4
- 0.437500 0.364173 0
- 0.437500 0.820774 0
- 0.562500 0.820774 0
- 0.562500 0.364173 0
- END
-TURNOUT N "Tomix Fine Track Turnout 541mm-R15 (elec) 1241"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- E 5.512642 -0.725753 105.000000
- S 0 0 0.000000 0.000000 5.511811 0.000000
- C 0 0 21.299213 0.000000 -21.299213 0.000000 15.000000
- L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
- A 11579568 0.053333 20.935040 0.000000 -21.299213 0.000000 15.000000
- G 11579568 0.000000 0.187500 0.437500 -0.633274 0
- G 11579568 0.000000 0.187500 0.562500 -0.633274 0
- F 11579568 0.000000 4
- 0.437500 -0.364173 0
- 0.437500 -0.820774 0
- 0.562500 -0.820774 0
- 0.562500 -0.364173 0
- END
-TURNOUT N "Tomix Fine Track Turnout 541mm-L15 (elec) 1242"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- E 5.512642 0.725753 75.000000
- S 0 0 0.000000 0.000000 5.511811 0.000000
- C 0 0 21.299213 0.000000 21.299213 165.000000 15.000000
- L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
- A 11579568 0.053333 20.935040 0.000000 21.299213 165.000000 15.000000
- G 11579568 0.000000 0.187500 0.437500 0.633274 0
- G 11579568 0.000000 0.187500 0.562500 0.633274 0
- F 11579568 0.000000 4
- 0.437500 0.364173 0
- 0.437500 0.820774 0
- 0.562500 0.820774 0
- 0.562500 0.364173 0
- END
-TURNOUT N "Tomix Fine Track 3-Way Turnout 541mm-L15 (elec) 1261"
- P "Left" 1
- P "Normal" 2
- P "Right" 3
- E 5.511811 0.000000 90.000000
- E 0.000000 0.000000 270.000000
- E 0.000000 -0.725753 255.000000
- E 0.000000 0.725753 285.000000
- C 0 0 21.299213 5.511811 21.299213 180.000000 15.000000
- S 0 0 0.000000 0.000000 5.511811 0.000000
- C 0 0 21.299213 5.511811 -21.299213 345.000000 15.000000
- A 11579568 0.053333 20.935040 5.511811 21.299213 180.000000 15.000000
- A 11579568 0.053333 20.935040 5.511811 -21.299213 345.000000 15.000000
- G 11579568 0.000000 0.187500 5.074311 0.633274 0
- G 11579568 0.000000 0.187500 4.949311 0.633274 0
- F 11579568 0.000000 4
- 5.074311 0.364173 0
- 5.074311 0.820774 0
- 4.949311 0.820774 0
- 4.949311 0.364173 0
- G 11579568 0.000000 0.187500 4.074311 0.633274 0
- G 11579568 0.000000 0.187500 3.949311 0.633274 0
- F 11579568 0.000000 4
- 4.074311 0.364173 0
- 4.074311 0.820774 0
- 3.949311 0.820774 0
- 3.949311 0.364173 0
- END
-TURNOUT N "Tomix Fine Track 3-Way Turnout 541mm-R15 (elec) 1262"
- P "Left" 1
- P "Normal" 2
- P "Right" 3
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- E 5.512642 -0.725753 105.000000
- E 5.512642 0.725753 75.000000
- C 0 0 21.299213 0.000000 21.299213 165.000000 15.000000
- S 0 0 0.000000 0.000000 5.511811 0.000000
- C 0 0 21.299213 0.000000 -21.299213 0.000000 15.000000
- A 11579568 0.053333 20.935040 0.000000 21.299213 165.000000 15.000000
- A 11579568 0.053333 20.935040 0.000000 -21.299213 0.000000 15.000000
- G 11579568 0.000000 0.187500 0.437500 0.633274 0
- G 11579568 0.000000 0.187500 0.562500 0.633274 0
- F 11579568 0.000000 4
- 0.437500 0.364173 0
- 0.437500 0.820774 0
- 0.562500 0.820774 0
- 0.562500 0.364173 0
- G 11579568 0.000000 0.187500 1.437500 0.633274 0
- G 11579568 0.000000 0.187500 1.562500 0.633274 0
- F 11579568 0.000000 4
- 1.437500 0.364173 0
- 1.437500 0.820774 0
- 1.562500 0.820774 0
- 1.562500 0.364173 0
- END
-TURNOUT N "Tomix Fine Track Wye Turnout 280mm-15 (elec) 1240"
- P "Left" 1
- P "Right" 2
- E 0.000000 0.000000 270.000000
- E 2.853123 0.375621 75.000000
- E 2.853123 -0.375621 105.000000
- C 0 0 11.023622 0.000000 11.023622 165.000000 15.000000
- C 0 0 11.023622 0.000000 -11.023622 0.000000 15.000000
- A 11579568 0.053333 10.659449 0.000000 11.023622 165.000000 15.000000
- A 11579568 0.053333 10.659449 0.000000 -11.023622 0.000000 15.000000
- G 11579568 0.000000 0.187500 0.937500 0.633274 0
- G 11579568 0.000000 0.187500 1.062500 0.633274 0
- F 11579568 0.000000 4
- 0.937500 0.364173 0
- 0.937500 0.820774 0
- 1.062500 0.820774 0
- 1.062500 0.364173 0
- END
-TURNOUT N "Tomix Fine Track Turnout 280mm-R30 (elec) 1243"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- E 5.511811 -1.476885 120.000000
- S 0 0 0.000000 0.000000 5.511811 0.000000
- C 0 0 11.023622 0.000000 -11.023622 0.000000 30.000000
- L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
- A 11579568 0.053333 10.659449 0.000000 -11.023622 0.000000 30.000000
- L 11579568 0.053333 4.511811 -0.364173 5.511811 -0.364173
- A 11579568 0.053333 11.469396 0.000000 -11.023622 23.000000 7.000000
- G 11579568 0.000000 0.187500 0.437500 -0.633274 0
- G 11579568 0.000000 0.187500 0.562500 -0.633274 0
- F 11579568 0.000000 4
- 0.437500 -0.364173 0
- 0.437500 -0.820774 0
- 0.562500 -0.820774 0
- 0.562500 -0.364173 0
- END
-TURNOUT N "Tomix Fine Track Turnout 280mm-L30 (elec) 1244"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- E 5.511811 1.476885 60.000000
- S 0 0 0.000000 0.000000 5.511811 0.000000
- C 0 0 11.023622 0.000000 11.023622 150.000000 30.000000
- L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
- A 11579568 0.053333 10.659449 0.000000 11.023622 150.000000 30.000000
- L 11579568 0.053333 4.511811 0.364173 5.511811 0.364173
- A 11579568 0.053333 11.469396 0.000000 11.023622 150.000000 7.000000
- G 11579568 0.000000 0.187500 0.437500 0.633274 0
- G 11579568 0.000000 0.187500 0.562500 0.633274 0
- F 11579568 0.000000 4
- 0.437500 0.364173 0
- 0.437500 0.820774 0
- 0.562500 0.820774 0
- 0.562500 0.364173 0
- END
-TURNOUT N "Tomix Fine Track Mini-Turnout 140mm-R30 1231"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 2.755906 0.000000 90.000000
- E 2.755906 -0.738443 120.000000
- S 0 0 0.000000 0.000000 2.755906 0.000000
- C 0 0 5.511811 0.000000 -5.511811 0.000000 30.000000
- L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
- A 11579568 0.053333 5.147638 0.000000 -5.511811 0.000000 30.000000
- G 11579568 0.000000 0.187500 0.437500 -0.633274 0
- G 11579568 0.000000 0.187500 0.562500 -0.633274 0
- F 11579568 0.000000 4
- 0.437500 -0.364173 0
- 0.437500 -0.820774 0
- 0.562500 -0.820774 0
- 0.562500 -0.364173 0
- END
-TURNOUT N "Tomix Fine Track Mini-Turnout 140mm-L30 1232"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 2.755906 0.000000 90.000000
- E 2.755906 0.738443 60.000000
- S 0 0 0.000000 0.000000 2.755906 0.000000
- C 0 0 5.511811 0.000000 5.511811 150.000000 30.000000
- L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
- A 11579568 0.053333 5.147638 0.000000 5.511811 150.000000 30.000000
- G 11579568 0.000000 0.187500 0.437500 0.633274 0
- G 11579568 0.000000 0.187500 0.562500 0.633274 0
- F 11579568 0.000000 4
- 0.437500 0.364173 0
- 0.437500 0.820774 0
- 0.562500 0.820774 0
- 0.562500 0.364173 0
- END
-TURNOUT N "Tomix Fine Track Turnout 317/280mm Curve-R45 (elec) 1248"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 8.824915 -3.655400 135.000000
- E 7.794878 -3.228744 135.000000
- C 0 0 12.480315 0.000000 -12.480315 0.000000 45.000000
- C 0 0 11.023622 0.000000 -11.023622 0.000000 45.000000
- A 11579568 0.053333 12.844488 0.000000 -12.480315 0.000000 45.000000
- A 11579568 0.053333 10.659449 0.000000 -11.023622 0.000000 45.000000
- G 11579568 0.000000 0.187500 0.437500 -0.633274 0
- G 11579568 0.000000 0.187500 0.562500 -0.633274 0
- F 11579568 0.000000 4
- 0.437500 -0.364173 0
- 0.437500 -0.820774 0
- 0.562500 -0.820774 0
- 0.562500 -0.364173 0
- END
-TURNOUT N "Tomix Fine Track Turnout 317/280mm Curve-L45 (elec) 1249"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 8.824915 3.655400 45.000000
- E 7.794878 3.228744 45.000000
- C 0 0 12.480315 0.000000 12.480315 135.000000 45.000000
- C 0 0 11.023622 0.000000 11.023622 135.000000 45.000000
- A 11579568 0.053333 12.844488 0.000000 12.480315 135.000000 45.000000
- A 11579568 0.053333 10.659449 0.000000 11.023622 135.000000 45.000000
- G 11579568 0.000000 0.187500 0.437500 0.633274 0
- G 11579568 0.000000 0.187500 0.562500 0.633274 0
- F 11579568 0.000000 4
- 0.437500 0.364173 0
- 0.437500 0.820774 0
- 0.562500 0.820774 0
- 0.562500 0.364173 0
- END
-TURNOUT N "Tomix Fine Track Double Crossover 1247"
- P "Normal" 1 2 3 0 4 5 6
- P "Reverse" 1 7 8 9 6 0 4 10 11 12 3
- E 0.000000 0.000000 270.000000
- E 11.023622 0.000000 90.000000
- E 0.000000 1.456693 270.000000
- E 11.023622 1.456693 90.000000
- S 0 0.000000 0.000000 0.000000 0.605392 0.000000
- S 0 0.000000 0.605392 0.000000 10.418230 0.000000
- S 0 0.000000 10.418230 0.000000 11.023622 0.000000
- S 0 0.000000 0.000000 1.456693 0.605392 1.456693
- S 0 0.000000 0.605392 1.456693 10.418230 1.456693
- S 0 0.000000 10.418230 1.456693 11.023622 1.456693
- C 0 0.000000 -16.804501 0.605415 16.804501 164.231537 15.768539
- S 0 0.000000 5.172043 0.632397 5.851579 0.824296
- C 0 0.000000 16.804501 10.418251 -15.347802 344.231537 15.768539
- C 0 0.000000 16.804501 0.605325 -15.347808 0.000000 15.768539
- S 0 0.000000 5.172043 0.824296 5.851579 0.632397
- C 0 0.000000 -16.804501 10.418251 16.804495 180.000000 15.768539
- L 11579568 0.053333 0.000000 -0.364173 11.023622 -0.364173
- L 11579568 0.053333 0.000000 0.364173 1.5 0.364173
- L 11579568 0.053333 0.000000 1.092520 1.5 1.092520
- L 11579568 0.053333 1.5 0.364173 1.5 1.092520
- L 11579568 0.053333 11.023622 0.364173 9.523622 0.364173
- L 11579568 0.053333 11.023622 1.092520 9.523622 1.092520
- L 11579568 0.053333 9.523622 0.364173 9.523622 1.092520
- L 11579568 0.053333 0.000000 1.820866 11.023622 1.820866
- END
-TURNOUT N "Tomix Fine Track Double Slip 140mm-15R 1245"
- P "Normal" 1 2 3 0 4 5 6
- P "Reverse" 1 7 6 0 4 8 3
- E 5.511811 0.000000 90.000000
- E 0.000000 0.000000 270.000000
- E 0.000000 0.738443 285.000000
- E 5.511811 -0.738443 105.000000
- S 0 0.000000 0.000000 0.000000 0.706236 0.000000
- S 0 0.000000 0.706236 0.000000 4.805575 0.000000
- S 0 0.000000 4.805575 0.000000 5.511811 0.000000
- S 0 0.000000 0.000000 0.738443 0.776077 0.530493
- S 0 0.000000 0.776077 0.530493 4.735734 -0.530493
- S 0 0.000000 4.735734 -0.530493 5.511811 -0.738443
- C 0 0.000000 15.568784 0.706236 -15.568784 0.000000 15.000000
- C 0 0.000000 -15.568784 4.805575 15.568784 180.000000 15.000000
- L 11579568 0.053333 0.000000 -0.364173 0.706236 -0.364173
- L 11579568 0.053333 4.620359 -0.882258 5.411811 -1.102616
- A 11579568 0.053333 15.204611 0.706236 -15.568784 0.000000 15.000000
- L 11579568 0.053333 0.100000 1.102616 0.891452 0.882258
- L 11579568 0.053333 4.805575 0.364173 5.511811 0.364173
- A 11579568 0.053333 15.204611 4.805575 15.568784 180.000000 15.000000
- G 11579568 0.000000 0.187500 1.437500 -0.633274 0
- G 11579568 0.000000 0.187500 1.562500 -0.633274 0
- F 11579568 0.000000 4
- 1.437500 -0.364173 0
- 1.437500 -0.820774 0
- 1.562500 -0.820774 0
- 1.562500 -0.364173 0
- G 11579568 0.000000 0.187500 3.937500 -1.033274 0
- G 11579568 0.000000 0.187500 4.062500 -1.033274 0
- F 11579568 0.000000 4
- 3.937500 -0.764173 0
- 3.937500 -1.220774 0
- 4.062500 -1.220774 0
- 4.062500 -0.764173 0
- END
-TURNOUT N "Tomix Fine Track Double Slip 140mm-15L 1246"
- P "Normal" 1 2 3 0 4 5 6
- P "Reverse" 1 8 6 0 4 7 3
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- E 0.000000 -0.738443 255.000000
- E 5.511811 0.738443 75.000000
- S 0 0.000000 0.000000 0.000000 0.706236 0.000000
- S 0 0.000000 0.706236 0.000000 4.805575 0.000000
- S 0 0.000000 4.805575 0.000000 5.511811 0.000000
- S 0 0.000000 0.000000 -0.738443 0.776077 -0.530493
- S 0 0.000000 0.776077 -0.530493 4.735734 0.530493
- S 0 0.000000 4.735734 0.530493 5.511811 0.738443
- C 0 0.000000 15.568784 4.805575 -15.568784 345.000000 15.000000
- C 0 0.000000 -15.568784 0.706236 15.568784 165.000000 15.000000
- L 11579568 0.053333 0.000000 0.364173 0.706236 0.364173
- L 11579568 0.053333 4.620359 0.882258 5.411811 1.102616
- A 11579568 0.053333 15.204611 0.706236 15.568784 165.000000 15.000000
- L 11579568 0.053333 0.100000 -1.102616 0.891452 -0.882258
- L 11579568 0.053333 4.805575 -0.364173 5.511811 -0.364173
- A 11579568 0.053333 15.204611 4.805575 -15.568784 345.000000 15.000000
- G 11579568 0.000000 0.187500 3.937500 -0.633274 0
- G 11579568 0.000000 0.187500 4.062500 -0.633274 0
- F 11579568 0.000000 4
- 3.937500 -0.364173 0
- 3.937500 -0.820774 0
- 4.062500 -0.820774 0
- 4.062500 -0.364173 0
- G 11579568 0.000000 0.187500 1.437500 -1.033274 0
- G 11579568 0.000000 0.187500 1.562500 -1.033274 0
- F 11579568 0.000000 4
- 1.437500 -0.7641730
- 1.437500 -1.220774 0
- 1.562500 -1.220774 0
- 1.562500 -0.764173 0
- END
-
-SUBCONTENTS Tomix N-Scale Fine Track - Crossings
-TURNOUT N "Tomix Fine Track Crossing 15° 140mm(R) 1322"
- P "Normal" 1 0 2
- E 5.511811 0.000000 90.000000
- E 0.000000 0.000000 270.000000
- E 0.000000 0.738443 285.000000
- E 5.511811 -0.738443 105.000000
- S 0 0.000000 0.000000 0.000000 5.511811 0.000000
- S 0 0.000000 0.000000 0.738443 5.511811 -0.738443
- L 11579568 0.053333 0.100000 1.102616 2.755906 0.364173
- L 11579568 0.053333 2.755906 0.364173 5.511811 0.364173
- L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
- L 11579568 0.053333 2.755906 -0.364173 5.411811 -1.102616
- END
-TURNOUT N "Tomix Fine Track Crossing 15° 140mm(L) 1333"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- E 0.000000 -0.738443 255.000000
- E 5.511811 0.738443 75.000000
- S 0 0.000000 0.000000 0.000000 5.511811 0.000000
- S 0 0.000000 0.000000 -0.738443 5.511811 0.738443
- L 11579568 0.053333 0.100000 -1.102616 2.755906 -0.364173
- L 11579568 0.053333 2.755906 -0.364173 5.511811 -0.364173
- L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
- L 11579568 0.053333 2.755906 0.364173 5.411811 1.102616
- END
-TURNOUT N "Tomix Fine Track Crossing 30° 72.5mm 1321"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 2.854331 0.000000 90.000000
- E 0.191204 -0.713583 240.000000
- E 2.663127 0.713583 60.000000
- S 0 0.000000 0.000000 0.000000 2.854331 0.000000
- S 0 0.000000 0.191204 -0.713583 2.663127 0.713583
- L 11579568 0.053333 0.000000 0.364173 1.327166 0.364173
- L 11579568 0.053333 1.327166 0.364173 2.454331 1.027756
- L 11579568 0.053333 0.400000 -1.027756 1.527166 -0.364173
- L 11579568 0.053333 1.527166 -0.364173 2.854331 -0.364173
- END
-TURNOUT N "Tomix Fine Track Crossing 90° 1324"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 1.456693 0.000000 90.000000
- E 0.728346 0.728346 0.000000
- E 0.728346 -0.728346 180.000000
- S 0 0 0.000000 0.000000 1.456693 0.000000
- S 0 0 0.728346 0.728346 0.728346 -0.728346
- L 11579568 0.053333 0.000000 0.364173 0.364173 0.364173
- L 11579568 0.053333 0.000000 -0.364173 0.364173 -0.364173
- L 11579568 0.053333 1.092519 0.364173 1.456693 0.364173
- L 11579568 0.053333 1.092519 -0.364173 1.456693 -0.364173
- L 11579568 0.053333 0.364173 -0.728346 0.364173 -0.364173
- L 11579568 0.053333 1.092519 -0.728346 1.092519 -0.364173
- L 11579568 0.053333 0.364173 0.364173 0.364173 0.728346
- L 11579568 0.053333 1.092519 0.364173 1.092519 0.728346
- END
-
-SUBCONTENTS Tomix N-Scale Fine Track - Brigdes
-TURNOUT N "Tomix Fine Track Truss Bridge 11.02 280mm 3030/31/32"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 11.023622 0.000000 90.000000
- S 0 0 0.000000 0.000000 11.023622 0.000000
- L 0 0.053333 0.000000 0.701680 11.023622 0.701680
- L 0 0.053333 0.000000 -0.701680 11.023622 -0.701680
- L 0 0.053333 0.918635 -0.701680 0.918635 0.701680
- L 0 0.053333 0.918635 0.000000 1.837270 0.701680
- L 0 0.053333 0.918635 0.000000 1.837270 -0.701680
- L 0 0.053333 1.837270 0.701680 2.755905 0.000000
- L 0 0.053333 1.837270 -0.701680 2.755905 0.000000
- L 0 0.053333 2.755905 -0.701680 2.755905 0.701680
- L 0 0.053333 2.755905 0.000000 3.674540 0.701680
- L 0 0.053333 2.755905 0.000000 3.674540 -0.701680
- L 0 0.053333 3.674540 0.701680 4.593175 0.000000
- L 0 0.053333 3.674540 -0.701680 4.593175 0.000000
- L 0 0.053333 4.593175 -0.701680 4.593175 0.701680
- L 0 0.053333 4.593175 0.000000 5.511811 0.701680
- L 0 0.053333 4.593175 0.000000 5.511811 -0.701680
- L 0 0.053333 5.511811 0.701680 6.430445 0.000000
- L 0 0.053333 5.511811 -0.701680 6.430445 0.000000
- L 0 0.053333 6.430445 -0.701680 6.430445 0.701680
- L 0 0.053333 6.430445 0.000000 7.349080 0.701680
- L 0 0.053333 6.430445 0.000000 7.349080 -0.701680
- L 0 0.053333 7.349080 0.701680 8.267715 0.000000
- L 0 0.053333 7.349080 -0.701680 8.267715 0.000000
- L 0 0.053333 8.267715 -0.701680 8.267715 0.701680
- L 0 0.053333 8.267715 0.000000 9.186350 0.701680
- L 0 0.053333 8.267715 0.000000 9.186350 -0.701680
- L 0 0.053333 9.186350 0.701680 10.104985 0.000000
- L 0 0.053333 9.186350 -0.701680 10.104985 0.000000
- L 0 0.053333 10.104985 -0.701680 10.104985 0.701680
- END
-TURNOUT N "Tomix Fine Track Dbl Trk Truss Bridge 11.02 280mm 3051/52/53"
- P "Normal" 1
- E 0.000000 0.728346 270.000000
- E 11.023622 0.728346 90.000000
- E 0.000000 -0.728346 270.000000
- E 11.023622 -0.728346 90.000000
- S 0 0 0.000000 0.728346 11.023622 0.728346
- S 0 0 0.000000 -0.728346 11.023622 -0.728346
- L 0 0.053333 0.000000 1.430026 11.023622 1.430026
- L 0 0.053333 0.000000 -1.430026 11.023622 -1.430026
- L 0 0.053333 0.918635 -1.430026 0.918635 1.430026
- L 0 0.053333 0.918635 1.430026 2.755905 -1.430026
- L 0 0.053333 0.918635 -1.430026 2.755905 1.430026
- L 0 0.053333 2.755905 -1.430026 2.755905 1.430026
- L 0 0.053333 2.755905 1.430026 4.593175 -1.430026
- L 0 0.053333 2.755905 -1.430026 4.593175 1.430026
- L 0 0.053333 4.593175 -1.430026 4.593175 1.430026
- L 0 0.053333 4.593175 1.430026 6.430445 -1.430026
- L 0 0.053333 4.593175 -1.430026 6.430445 1.430026
- L 0 0.053333 6.430445 -1.430026 6.430445 1.430026
- L 0 0.053333 6.430445 1.430026 8.267715 -1.430026
- L 0 0.053333 6.430445 -1.430026 8.267715 1.430026
- L 0 0.053333 8.267715 -1.430026 8.267715 1.430026
- L 0 0.053333 8.267715 1.430026 10.104985 -1.430026
- L 0 0.053333 8.267715 -1.430026 10.104985 1.430026
- L 0 0.053333 10.104985 -1.430026 10.104985 1.430026
- END
-TURNOUT N "Tomix Fine Track Plate Grider Bridge 5.51 140mm 3029"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- S 0 0 0.000000 0.000000 5.511811 0.000000
- L 0 0.053333 0.000000 0.701680 5.511811 0.701680
- L 0 0.053333 0.000000 0.364173 0.000000 0.701680
- L 0 0.053333 1.102362 0.364173 1.102362 0.701680
- L 0 0.053333 2.204724 0.364173 2.204724 0.701680
- L 0 0.053333 3.307086 0.364173 3.307086 0.701680
- L 0 0.053333 4.409448 0.364173 4.409448 0.701680
- L 0 0.053333 5.511811 0.364173 5.511811 0.701680
- L 0 0.053333 0.000000 -0.701680 5.511811 -0.701680
- L 0 0.053333 0.000000 -0.364173 0.000000 -0.701680
- L 0 0.053333 1.102362 -0.364173 1.102362 -0.701680
- L 0 0.053333 2.204724 -0.364173 2.204724 -0.701680
- L 0 0.053333 3.307086 -0.364173 3.307086 -0.701680
- L 0 0.053333 4.409448 -0.364173 4.409448 -0.701680
- L 0 0.053333 5.511811 -0.364173 5.511811 -0.701680
- END
-TURNOUT N "Tomix Fine Track Deck Grider Bridge 5.51 140mm 3028"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- S 0 0 0.000000 0.000000 5.511811 0.000000
- F 11579568 0.000000 4
- 0.000000 0.364173 0
- 0.300000 0.364173 0
- 0.300000 0.701680 0
- 0.000000 0.701680 0
- F 11579568 0.000000 4
- 5.211811 0.364173 0
- 5.511811 0.364173 0
- 5.511811 0.701680 0
- 5.211811 0.701680 0
- END
-
-SUBCONTENTS Tomix N-Scale Fine Track - Turn Table
-TURNOUT N "Tomix Fine Track Turn Table 8.34 212mm 1631"
-# TT was designed with 212mm bridge, outside dia. is approx., 15 degree spacing
- P "1" 1 2 3
- P "2" 4 5 6
- P "3" 7 8 9
- P "4" 10 11 12
- P "5" 13 14 15
- P "6" 16 17 18
- P "7" 19 20 21
- P "8" 22 23 24
- P "9" 25 26 27
- P "10" 28 29 30
- P "11" 31 32 33
- P "12" 34 35 36
- E 0.000000 4.173228 0.000000
- E 1.080111 4.031029 15.000000
- E 2.086614 3.614121 30.000000
- E 2.950918 2.950918 45.000000
- E 3.614121 2.086614 60.000000
- E 4.031029 1.080111 75.000000
- E 4.173228 0.000000 90.000000
- E 4.031029 -1.080111 105.000000
- E 3.614121 -2.086614 120.000000
- E 2.950918 -2.950918 135.000000
- E 2.086614 -3.614121 150.000000
- E 1.080111 -4.031029 165.000000
- E 0.000000 -4.173228 180.000000
- E -1.080111 -4.031029 195.000000
- E -2.086614 -3.614121 210.000000
- E -2.950918 -2.950918 225.000000
- E -3.614121 -2.086614 240.000000
- E -4.031029 -1.080111 255.000000
- E -4.173228 0.000000 270.000000
- E -4.031029 1.080111 285.000000
- E -3.614121 2.086614 300.000000
- E -2.950918 2.950918 315.000000
- E -2.086614 3.614121 330.000000
- E -1.080111 4.031029 345.000000
-#0/360
- S 0 0 0.000000 4.173228 0.000000 3.676228
- S 16777215 0 0.000000 3.676228 0.000000 -3.676228
- S 0 0 0.000000 -3.676228 0.000000 -4.173228
-#15/195
- S 0 0 1.080111 4.031029 0.950701 3.548066
- S 16777215 0 0.950701 3.548066 -0.950701 -3.548066
- S 0 0 -0.950701 -3.548066 -1.080111 -4.031029
-#30/210
- S 0 0 2.086614 3.614121 1.836614 3.181109
- S 16777215 0 1.836614 3.181109 -1.836614 -3.181109
- S 0 0 -1.836614 -3.181109 -2.086614 -3.614121
-#45/225
- S 0 0 2.950918 2.950918 2.597364 2.597364
- S 16777215 0 2.597364 2.597364 -2.597364 -2.597364
- S 0 0 -2.597364 -2.597364 -2.950918 -2.950918
-#60/240
- S 0 0 3.614121 2.086614 3.181109 1.836614
- S 16777215 0 3.181109 1.836614 -3.181109 -1.836614
- S 0 0 -3.181109 -1.836614 -3.614121 -2.086614
-#75/255
- S 0 0 4.031029 1.080111 3.548066 0.950701
- S 16777215 0 3.548066 0.950701 -3.548066 -0.950701
- S 0 0 -3.548066 -0.950701 -4.031029 -1.080111
-#90/270
- S 0 0 4.173228 0.000000 3.676228 0.000000
- S 16777215 0 3.676228 0.000000 -3.676228 0.000000
- S 0 0 -3.676228 0.000000 -4.173228 0.000000
-#105/285
- S 0 0 4.031029 -1.080111 3.548066 -0.950701
- S 16777215 0 3.548066 -0.950701 -3.548066 0.950701
- S 0 0 -3.548066 0.950701 -4.031029 1.080111
-#120/300
- S 0 0 3.614121 -2.086614 3.181109 -1.836614
- S 16777215 0 3.181109 -1.836614 -3.181109 1.836614
- S 0 0 -3.181109 1.836614 -3.614121 2.086614
-#135/315
- S 0 0 2.950918 -2.950918 2.597364 -2.597364
- S 16777215 0 2.597364 -2.597364 -2.597364 2.597364
- S 0 0 -2.597364 2.597364 -2.950918 2.950918
-#150/330
- S 0 0 2.086614 -3.614121 1.836614 -3.181109
- S 16777215 0 1.836614 -3.181109 -1.836614 3.181109
- S 0 0 -1.836614 3.181109 -2.086614 3.614121
-#165/345
- S 0 0 1.080111 -4.031029 0.950701 -3.548066
- S 16777215 0 0.950701 -3.548066 -0.950701 3.548066
- S 0 0 -0.950701 3.548066 -1.080111 4.031029
-
- A 11579568 0.053333 4.173228 0.000000 0.000000 0.000000 360.000000
- A 11579568 0.053333 3.673228 0.000000 0.000000 0.000000 360.000000
- END
-
-SUBCONTENTS Tomix N-Scale Fine Track - Signal Track
-TURNOUT N "Tomix Fine Track 70mm 5 color 5560"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.755906 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.755906 0.000000
- L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
- L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
- F 11579568 0.000000 4
- 1.002953 0.364173 0
- 1.752953 0.364173 0
- 1.752953 0.864173 0
- 1.002953 0.864173 0
- END
-TURNOUT N "Tomix Fine Track 70mm 4 color(Yel/Grn) 5561"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.755906 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.755906 0.000000
- L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
- L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
- F 11579568 0.000000 4
- 1.002953 0.364173 0
- 1.752953 0.364173 0
- 1.752953 0.864173 0
- 1.002953 0.864173 0
- END
-TURNOUT N "Tomix Fine Track 70mm 4 color(Yel/Yel) 5562"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.755906 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.755906 0.000000
- L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
- L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
- F 11579568 0.000000 4
- 1.002953 0.364173 0
- 1.752953 0.364173 0
- 1.752953 0.864173 0
- 1.002953 0.864173 0
- END
-TURNOUT N "Tomix Fine Track 70mm 3 color 5564"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.755906 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.755906 0.000000
- L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
- L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
- F 11579568 0.000000 4
- 1.002953 0.364173 0
- 1.752953 0.364173 0
- 1.752953 0.864173 0
- 1.002953 0.864173 0
- END
-TURNOUT N "Tomix Fine Track 70mm 2 color 5565"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.755906 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.755906 0.000000
- L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
- L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
- F 11579568 0.000000 4
- 1.002953 0.364173 0
- 1.752953 0.364173 0
- 1.752953 0.864173 0
- 1.002953 0.864173 0
- END
-
-SUBCONTENTS Tomix N-Scale Fine Track - Misc Track
-TURNOUT N "Tomix Fine Track Re-Railer 140mm 1523"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 5.511811 0.000000
- L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
- L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
- L 0 0.053333 1.837270 0.364173 3.674541 0.364173
- L 0 0.053333 3.674541 0.364173 3.674541 -0.364173
- L 0 0.053333 3.674541 -0.364173 1.837270 -0.364173
- L 0 0.053333 1.837270 -0.364173 1.837270 0.364173
- END
-TURNOUT N "Tomix Fine Track PC Re-Railer 140mm 1524"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 5.511811 0.000000
- L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
- L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
- L 0 0.053333 1.837270 0.364173 3.674541 0.364173
- L 0 0.053333 3.674541 0.364173 3.674541 -0.364173
- L 0 0.053333 3.674541 -0.364173 1.837270 -0.364173
- L 0 0.053333 1.837270 -0.364173 1.837270 0.364173
- END
-TURNOUT N "Tomix Fine Track Mag Uncoupler 70mm 1521"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.755906 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 2.755906 0.000000
- L 11579568 0.053333 0.000000 0.3641730 2.755906 0.3641730
- L 11579568 0.053333 0.000000 -0.3641730 2.755906 -0.3641730
- L 0 0.053333 0.253333 0.133560 2.280000 0.133560
- L 0 0.053333 2.280000 0.133560 2.280000 -0.146440
- L 0 0.053333 2.280000 -0.146440 0.253333 -0.146440
- L 0 0.053333 0.253333 -0.146440 0.253333 0.133560
- END
-TURNOUT N "Tomix Fine Track W/Insul. Gap 70mm 1671"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.755906 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 2.755906 0.000000
- L 11579568 0.053333 0.000000 0.3641730 2.755906 0.3641730
- L 11579568 0.053333 0.000000 -0.3641730 2.755906 -0.3641730
- END
-TURNOUT N "Tomix Fine Track Adjustable 70-90mm 1522"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.755906 0.000000 90.000000
- X adjustable 2.755906 3.543307
- S 0 0 0.000000 0.000000 2.755906 0.000000
- L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
- L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
- END
-TURNOUT N "Tomix Fine Track PC Adjustable 70-90mm 1526"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.755906 0.000000 90.000000
- X adjustable 2.755906 3.543307
- S 0 0 0.000000 0.000000 2.755906 0.000000
- L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
- L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
- END
-TURNOUT N "Tomix Fine Track Wheel Cleaner Rail 140mm 6414"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 5.511811 0.000000
- L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
- L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
- F 11579568 0.000000 4
- 1.456693 0.364173 0
- 4.055118 0.364173 0
- 4.055118 1.092519 0
- 1.456693 1.092519 0
- END
-TURNOUT N "Tomix Fine Track PC Wheel Cleaner Rail 140mm 6415"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.511811 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 5.511811 0.000000
- L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
- L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
- F 11579568 0.000000 4
- 1.456693 0.364173 0
- 4.055118 0.364173 0
- 4.055118 1.092519 0
- 1.456693 1.092519 0
- END
-
-SUBCONTENTS Tomix N-Scale Fine Track - Wide Tram
-TURNOUT N "Tomix Fine Track Wide Tram Straight 18.5mm S18.5-WT/1798"
-P "Normal" 1
-E 0.000000 0.000000 270.000000
-E 0.728346 0.000000 90.000000
-S 0 0.000000 0.000000 0.000000 0.728346 0.000000
-L 0 0.039370 0.000000 -0.728346 0.728345 -0.728346
-L 0 0.039370 0.000000 0.728346 0.728346 0.728346
-END
-TURNOUT N "Tomix Fine Track Wide Tram Straight 37mm S37-WT/1798"
-P "Normal" 1
-E 0.000000 0.000000 270.000000
-E 1.456693 0.000000 90.000000
-S 0 0.000000 0.000000 0.000000 1.456693 0.000000
-L 0 0.039370 0.000000 -0.728346 1.456693 -0.728346
-L 0 0.039370 0.000000 0.728346 1.456693 0.728346
-END
-TURNOUT N "Tomix Fine Track Wide Tram Straight(Sensor) 37mm S37-WT-SE/5568"
-P "Normal" 1
-E 0.000000 0.000000 270.000000
-E 1.456693 0.000000 90.000000
-S 0 0.000000 0.000000 0.000000 1.456693 0.000000
-L 0 0.039370 0.000000 -0.728346 1.456693 -0.728346
-L 0 0.039370 0.000000 0.728346 1.456693 0.728346
-END
-TURNOUT N "Tomix Fine Track Wide Tram Straight 47.5mm S47.5-WT/1798"
-P "Normal" 1
-E 0.000000 0.000000 270.000000
-E 1.870079 0.000000 90.000000
-S 0 0.000000 0.000000 0.000000 1.870079 0.000000
-L 0 0.039370 0.000000 -0.728346 1.870077 -0.728346
-L 0 0.039370 0.000000 0.728346 1.870079 0.728346
-END
-TURNOUT N "Tomix Fine Track Wide Tram Straight 70mm S70-WT/1792/1790"
-P "Normal" 1
-E 0.000000 0.000000 270.000000
-E 2.755906 0.000000 90.000000
-S 0 0.000000 0.000000 0.000000 2.755906 0.000000
-L 0 0.039370 0.000000 -0.728346 2.755904 -0.728346
-L 0 0.039370 0.000000 0.728346 2.755906 0.728346
-END
-TURNOUT N "Tomix Fine Track Wide Tram Straight 140mm S140-WT/1793/1791"
-P "Normal" 1
-E 0.000000 0.000000 270.000000
-E 5.511811 0.000000 90.000000
-S 0 0.000000 0.000000 0.000000 5.511811 0.000000
-L 0 0.039370 0.000000 -0.728346 5.511809 -0.728346
-L 0 0.039370 0.000000 0.728346 5.511811 0.728346
-END
-TURNOUT N "Tomix Fine Track Wide Tram 30d Curve 103mm C103-30-WT/1795"
-P "Normal" 1
-E 0.000000 0.000000 270.000000
-E 2.027558 0.543282 60.000000
-C 0 0.000000 4.055118 0.000000 4.055118 150.000000 30.000000
-A3 0 0.039370 4.783465 0.000000 4.055118 0 150.000000 30.000000
-A3 0 0.039370 3.326772 0.000000 4.055118 0 150.000000 30.000000
-END
-TURNOUT N "Tomix Fine Track Wide Tram 60d Curve 103mm C103-60-WT/1795"
-P "Normal" 1
-E 0.000000 0.000000 270.000000
-E 3.511834 2.027556 30.000000
-C 0 0.000000 4.055118 0.000000 4.055118 120.000000 60.000000
-A3 0 0.039370 4.783465 0.000000 4.055118 0 120.000000 60.000000
-A3 0 0.039370 3.326772 0.000000 4.055118 0 120.000000 60.000000
-END
-TURNOUT N "Tomix Fine Track Wide Tram 30d Curve 140mm C140-30-WT/1796"
-P "Normal" 1
-E 0.000000 0.000000 270.000000
-E 2.755903 0.738441 60.000000
-C 0 0.000000 5.511811 0.000000 5.511811 150.000000 30.000000
-A3 0 0.039370 6.240157 0.000000 5.511811 0 150.000000 30.000000
-A3 0 0.039370 4.783465 0.000000 5.511811 0 150.000000 30.000000
-END
-TURNOUT N "Tomix Fine Track Wide Tram 60d Curve 140mm C140-60-WT/1796"
-P "Normal" 1
-E 0.000000 0.000000 270.000000
-E 4.773366 2.755901 30.000000
-C 0 0.000000 5.511811 0.000000 5.511811 120.000000 60.000000
-A3 0 0.039370 6.240157 0.000000 5.511811 0 120.000000 60.000000
-A3 0 0.039370 4.783465 0.000000 5.511811 0 120.000000 60.000000
-END
-TURNOUT N "Tomix Fine Track Wide Tram 30d Curve 177mm C177-30-WT/1799"
-P "Normal" 1
-E 0.000000 0.000000 270.000000
-E 3.484249 0.933601 60.000000
-C 0 0.000000 6.968504 0.000000 6.968504 150.000000 30.000000
-A3 0 0.039370 7.696850 0.000000 6.968504 0 150.000000 30.000000
-A3 0 0.039370 6.240157 0.000000 6.968504 0 150.000000 30.000000
-END
-TURNOUT N "Tomix Fine Track Wide Tram 60d Curve 177mm C177-60-WT/1799"
-P "Normal" 1
-E 0.000000 0.000000 270.000000
-E 6.034898 3.484247 30.000000
-C 0 0.000000 6.968504 0.000000 6.968504 120.000000 60.000000
-A3 0 0.039370 7.696850 0.000000 6.968504 0 120.000000 60.000000
-A3 0 0.039370 6.240157 0.000000 6.968504 0 120.000000 60.000000
-END
-TURNOUT N "Tomix Fine Track Wide Tram 90d Crossing 37mm X37-90-WT/1799"
-P "Normal" 1 0 2
-E 0.000000 0.000000 270.000000
-E 1.456693 0.000000 90.000000
-E 0.728346 0.728346 360.000000
-E 0.728346 -0.728346 180.000000
-S 0 0.000000 0.000000 0.000000 1.456693 0.000000
-S 0 0.000000 0.728346 0.728346 0.728346 -0.728346
-END \ No newline at end of file
+CONTENTS Tomix N-Scale Fine Track
+SUBCONTENTS Tomix N-Scale Fine Track - Straight Track
+TURNOUT N "Tomix Fine Track Straight 5.51 140mm 1021"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ S 0 0 0.000000 0.000000 5.511811 0.000000
+ L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
+ END
+TURNOUT N "Tomix Fine Track Straight 5.51 140mm (slab type) 1046/1047"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ S 0 0 0.000000 0.000000 5.511811 0.000000
+ L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
+ END
+TURNOUT N "Tomix Fine Track Straight 11.02 280mm 1022"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 11.023622 0.000000 90.000000
+ S 0 0 0.000000 0.000000 11.023622 0.000000
+ L 11579568 0.053333 0.000000 0.364173 11.023622 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 11.023622 -0.364173
+ END
+TURNOUT N "Tomix Fine Track Straight 2.85 72.5mm 1023"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.854331 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.854331 0.000000
+ L 11579568 0.053333 0.000000 0.364173 2.854331 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 2.854331 -0.364173
+ END
+TURNOUT N "Tomix Fine Track Straight 2.75 70mm 1024"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.755906 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.755906 0.000000
+ L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
+ END
+TURNOUT N "Tomix Fine Track Straight 3.89 99mm 1025"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.897638 0.000000 90.000000
+ S 0 0 0.000000 0.000000 3.897638 0.000000
+ L 11579568 0.053333 0.000000 0.364173 3.897638 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 3.897638 -0.364173
+ END
+TURNOUT N "Tomix Fine Track Straight 6.24 158.5mm 1026"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.240157 0.000000 90.000000
+ S 0 0 0.000000 0.000000 6.240157 0.000000
+ L 11579568 0.053333 0.000000 0.364173 6.240157 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 6.240157 -0.364173
+ END
+TURNOUT N "Tomix Fine Track Straight 0.72 18.5mm 1099A"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 0.725346 0.000000 90.000000
+ S 0 0 0.000000 0.000000 0.725346 0.000000
+ L 11579568 0.053333 0.000000 0.364173 0.725346 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 0.725346 -0.364173
+ END
+TURNOUT N "Tomix Fine Track Straight 1.29 33mm 1099B"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.299213 0.000000 90.000000
+ S 0 0 0.000000 0.000000 1.299213 0.000000
+ L 11579568 0.053333 0.000000 0.364173 1.299213 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 1.299213 -0.364173
+ END
+
+SUBCONTENTS Tomix N-Scale Fine Track - Straight PC Track
+TURNOUT N "Tomix Fine Track PC Straight 2.75 70mm 1014"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.755906 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.755906 0.000000
+ L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
+ END
+TURNOUT N "Tomix Fine Track PC Straight 2.85 72.5mm 1013"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.854331 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.854331 0.000000
+ L 11579568 0.053333 0.000000 0.364173 2.854331 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 2.854331 -0.364173
+ END
+TURNOUT N "Tomix Fine Track PC Straight 3.89 99mm 1015"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.897638 0.000000 90.000000
+ S 0 0 0.000000 0.000000 3.897638 0.000000
+ L 11579568 0.053333 0.000000 0.364173 3.897638 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 3.897638 -0.364173
+ END
+TURNOUT N "Tomix Fine Track PC Straight 5.51 140mm 1011"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ S 0 0 0.000000 0.000000 5.511811 0.000000
+ L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
+ END
+TURNOUT N "Tomix Fine Track PC Straight 6.24 158.5mm 1016"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.240157 0.000000 90.000000
+ S 0 0 0.000000 0.000000 6.240157 0.000000
+ L 11579568 0.053333 0.000000 0.364173 6.240157 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 6.240157 -0.364173
+ END
+TURNOUT N "Tomix Fine Track PC Straight 11.02 280mm 1012/1093"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 11.023622 0.000000 90.000000
+ S 0 0 0.000000 0.000000 11.023622 0.000000
+ L 11579568 0.053333 0.000000 0.364173 11.023622 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 11.023622 -0.364173
+ END
+
+SUBCONTENTS Tomix N-Scale Fine Track - Widetrack PC Straight Track
+TURNOUT N "Tomix Fine Track Widetrack PC Straight 5.51 140mm 1731/1761"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ S 0 0 0.000000 0.000000 5.511811 0.000000
+ L 11579568 0.053333 0.000000 0.728346 5.511811 0.728346
+ L 11579568 0.053333 0.000000 -0.728346 5.511811 -0.728346
+ END
+TURNOUT N "Tomix Fine Track Widetrack PC Straight(branch) 5.51 140mm 1739/1769"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ S 0 0 0.000000 0.000000 5.511811 0.000000
+ L 11579568 0.053333 0.000000 0.728346 5.511811 0.728346
+ L 11579568 0.053333 0.000000 -0.728346 5.511811 -0.728346
+ END
+TURNOUT N "Tomix Fine Track Widetrack PC Straight 11.02 280mm 1730/1732/1762"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 11.023622 0.000000 90.000000
+ S 0 0 0.000000 0.000000 11.023622 0.000000
+ L 11579568 0.053333 0.000000 0.728346 11.023622 0.728346
+ L 11579568 0.053333 0.000000 -0.728346 11.023622 -0.728346
+ END
+TURNOUT N "Tomix Fine Track Widetrack PC Straight 2.85 72.5mm 1733/1763"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.854331 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.854331 0.000000
+ L 11579568 0.053333 0.000000 0.728346 2.854331 0.728346
+ L 11579568 0.053333 0.000000 -0.728346 2.854331 -0.728346
+ END
+TURNOUT N "Tomix Fine Track Widetrack PC Straight 2.75 70mm 1734/1764"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.755906 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.755906 0.000000
+ L 11579568 0.053333 0.000000 0.728346 2.755906 0.728346
+ L 11579568 0.053333 0.000000 -0.728346 2.755906 -0.728346
+ END
+TURNOUT N "Tomix Fine Track Widetrack PC Straight 3.89 99mm 1735"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.897638 0.000000 90.000000
+ S 0 0 0.000000 0.000000 3.897638 0.000000
+ L 11579568 0.053333 0.000000 0.728346 3.897638 0.728346
+ L 11579568 0.053333 0.000000 -0.728346 3.897638 -0.728346
+ END
+TURNOUT N "Tomix Fine Track Widetrack PC Straight 6.24 158.5mm 1736"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.240157 0.000000 90.000000
+ S 0 0 0.000000 0.000000 6.240157 0.000000
+ L 11579568 0.053333 0.000000 0.728346 6.240157 0.728346
+ L 11579568 0.053333 0.000000 -0.728346 6.240157 -0.728346
+ END
+TURNOUT N "Tomix Fine Track Widetrack PC Straight 0.72 18.5mm 1738A"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 0.725346 0.000000 90.000000
+ S 0 0 0.000000 0.000000 0.725346 0.000000
+ L 11579568 0.053333 0.000000 0.728346 0.725346 0.728346
+ L 11579568 0.053333 0.000000 -0.728346 0.725346 -0.728346
+ END
+TURNOUT N "Tomix Fine Track Widetrack PC Straight 1.29 33mm 1738B"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.299213 0.000000 90.000000
+ S 0 0 0.000000 0.000000 1.299213 0.000000
+ L 11579568 0.053333 0.000000 0.728346 1.299213 0.728346
+ L 11579568 0.053333 0.000000 -0.728346 1.299213 -0.728346
+ END
+
+SUBCONTENTS Tomix N-Scale Fine Track - Buffers
+TURNOUT N "Tomix Fine Track Buffer Trk 111mm 1421"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0 0.000000 0.000000 2.854331 0.000000
+ L 11579568 0.053333 0.000000 0.364173 4.370079 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 4.370079 -0.364173
+ L 11579568 0.053333 4.370079 0.364173 4.370079 -0.364173
+ L 0 0.106666 3.000000 0.000000 3.100000 0.000000
+ L 0 0.053333 2.750000 0.190000 4.370079 0.190000
+ L 0 0.053333 2.750000 -0.190000 4.370079 -0.190000
+ L 0 0.053333 2.750000 0.190000 3.100000 0.000000
+ L 0 0.053333 2.750000 -0.190000 3.100000 0.000000
+ L 0 0.053333 3.100000 0.000000 4.370079 0.190000
+ L 0 0.053333 3.100000 0.000000 4.370079 -0.190000
+ END
+TURNOUT N "Tomix Fine Track Buffer Trk(LED) 80mm 1422"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0 0.000000 0.000000 1.574803 0.000000
+ L 11579568 0.053333 0.000000 0.364173 3.149606 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 3.149606 -0.364173
+ L 11579568 0.053333 1.574803 0.364173 1.574803 -0.364173
+ L 11579568 0.053333 3.149606 0.364173 3.149606 -0.364173
+ F 11579568 0.000000 4
+ 2.456693 -0.190000 0
+ 3.055118 -0.190000 0
+ 3.055118 0.190000 0
+ 2.456693 0.190000 0
+ END
+TURNOUT N "Tomix Fine Track Buffer Trk(LED2) 49mm 1423"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0 0.000000 0.000000 1.299213 0.000000
+ L 11579568 0.053333 0.000000 0.364173 1.929134 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 1.929134 -0.364173
+ L 11579568 0.053333 1.299213 0.364173 1.299213 -0.364173
+ L 11579568 0.053333 1.929134 0.364173 1.929134 -0.364173
+ L 11579568 0.053333 0.852441 0.000000 1.629134 0.000000
+ F 11579568 0.000000 4
+ 0.472441 -0.190000 0
+ 0.852441 -0.190000 0
+ 0.852441 0.190000 0
+ 0.472441 0.190000 0
+ F 11579568 0.000000 4
+ 1.529134 -0.100000 0
+ 1.729134 -0.100000 0
+ 1.729134 0.100000 0
+ 1.529134 0.100000 0
+ END
+TURNOUT N "Tomix Fine Track PC Buffer Trk(LED) 80mm 1427"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0 0.000000 0.000000 1.574803 0.000000
+ L 11579568 0.053333 0.000000 0.364173 3.149606 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 3.149606 -0.364173
+ L 11579568 0.053333 1.574803 0.364173 1.574803 -0.364173
+ L 11579568 0.053333 3.149606 0.364173 3.149606 -0.364173
+ F 11579568 0.000000 4
+ 2.456693 -0.190000 0
+ 3.055118 -0.190000 0
+ 3.055118 0.190000 0
+ 2.456693 0.190000 0
+ END
+
+
+SUBCONTENTS Tomix N-Scale Fine Track - Curved Track
+TURNOUT N "Tomix Fine Track Mini Curve 4.05R 103mm 30 1111A"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.027559 -0.543345 120.000000
+ C 0 0 4.055118 0.000000 -4.055118 0.000000 30.000000
+ A 11579568 0.053333 3.690945 0.000000 -4.055118 0.000000 30.000000
+ A 11579568 0.053333 4.419291 0.000000 -4.055118 0.000000 30.000000
+ END
+TURNOUT N "Tomix Fine Track Mini Curve 4.05R 103mm 60 1111B"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.511835 -2.027559 150.000000
+ C 0 0 4.055118 0.000000 -4.055118 0.000000 60.000000
+ A 11579568 0.053333 3.690945 0.000000 -4.055118 0.000000 60.000000
+ A 11579568 0.053333 4.419291 0.000000 -4.055118 0.000000 60.000000
+ END
+TURNOUT N "Tomix Fine Track Mini Curve 5.51R 140mm 30 1112A"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.755906 -0.738443 120.000000
+ C 0 0 5.511811 0.000000 -5.511811 0.000000 30.000000
+ A 11579568 0.053333 5.147638 0.000000 -5.511811 0.000000 30.000000
+ A 11579568 0.053333 5.875984 0.000000 -5.511811 0.000000 30.000000
+ END
+TURNOUT N "Tomix Fine Track Mini Curve 5.51R 140mm 60 1112B"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.773368 -2.755905 150.000000
+ C 0 0 5.511811 0.000000 -5.511811 0.000000 60.000000
+ A 11579568 0.053333 5.147638 0.000000 -5.511811 0.000000 60.000000
+ A 11579568 0.053333 5.875984 0.000000 -5.511811 0.000000 60.000000
+ END
+TURNOUT N "Tomix Fine Track Mini Curve 6.96R 177mm 30 1113A"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.484252 -0.933603 120.000000
+ C 0 0 6.968504 0.000000 -6.968504 0.000000 30.000000
+ A 11579568 0.053333 6.604331 0.000000 -6.968504 0.000000 30.000000
+ A 11579568 0.053333 7.332677 0.000000 -6.968504 0.000000 30.000000
+ END
+TURNOUT N "Tomix Fine Track Mini Curve 6.96R 177mm 60 1113B"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.034901 -3.484252 150.000000
+ C 0 0 6.968504 0.000000 -6.968504 0.000000 60.000000
+ A 11579568 0.053333 6.604331 0.000000 -6.968504 0.000000 60.000000
+ A 11579568 0.053333 7.332677 0.000000 -6.968504 0.000000 60.000000
+ END
+TURNOUT N "Tomix Fine Track Curve 9.56R 243mm 15 1143"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.476103 -0.325985 105.000000
+ C 0 0 9.566929 0.000000 -9.566929 0.000000 15.000000
+ A 11579568 0.053333 9.202756 0.000000 -9.566929 0.000000 15.000000
+ A 11579568 0.053333 9.931102 0.000000 -9.566929 0.000000 15.000000
+ END
+TURNOUT N "Tomix Fine Track Curve 9.56R 243mm 45 1125"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.764840 -2.802089 135.000000
+ C 0 0 9.566929 0.000000 -9.566929 0.000000 45.000000
+ A 11579568 0.053333 9.202756 0.000000 -9.566929 0.000000 45.000000
+ A 11579568 0.053333 9.931102 0.000000 -9.566929 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track Curve 11.02R 280mm 15 1124"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.853123 -0.375621 105.000000
+ C 0 0 11.023622 0.000000 -11.023622 0.000000 15.000000
+ A 11579568 0.053333 10.659449 0.000000 -11.023622 0.000000 15.000000
+ A 11579568 0.053333 11.387796 0.000000 -11.023622 0.000000 15.000000
+ END
+TURNOUT N "Tomix Fine Track Curve 11.02R 280mm 45 1121"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.794878 -3.228744 135.000000
+ C 0 0 11.023622 0.000000 -11.023622 0.000000 45.000000
+ A 11579568 0.053333 10.659449 0.000000 -11.023622 0.000000 45.000000
+ A 11579568 0.053333 11.387796 0.000000 -11.023622 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track Curve 12.48R 317mm 15 1127"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.230143 -0.425256 105.000000
+ C 0 0 12.480315 0.000000 -12.480315 0.000000 15.000000
+ A 11579568 0.053333 12.116143 0.000000 -12.480315 0.000000 15.000000
+ A 11579568 0.053333 12.844488 0.000000 -12.480315 0.000000 15.000000
+ END
+TURNOUT N "Tomix Fine Track Curve 12.48R 317mm 45 1122"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 8.824915 -3.655400 135.000000
+ C 0 0 12.480315 0.000000 -12.480315 0.000000 45.000000
+ A 11579568 0.053333 12.116143 0.000000 -12.480315 0.000000 45.000000
+ A 11579568 0.053333 12.844488 0.000000 -12.480315 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track Curve 13.93R 354mm 15 1144"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.607163 -0.474892 105.000000
+ C 0 0 13.937008 0.000000 -13.937008 0.000000 15.000000
+ A 11579568 0.053333 13.572835 0.000000 -13.937008 0.000000 15.000000
+ A 11579568 0.053333 14.301181 0.000000 -13.937008 0.000000 15.000000
+ END
+TURNOUT N "Tomix Fine Track Curve 13.93R 354mm 45 1126"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.854953 -4.082055 135.000000
+ C 0 0 13.937008 0.000000 -13.937008 0.000000 45.000000
+ A 11579568 0.053333 13.572835 0.000000 -13.937008 0.000000 45.000000
+ A 11579568 0.053333 14.301181 0.000000 -13.937008 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track Curve 15.39R 391mm 15 1145"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.984183 -0.524528 105.000000
+ C 0 0 15.393701 0.000000 -15.393701 0.000000 15.000000
+ A 11579568 0.053333 15.029528 0.000000 -15.393701 0.000000 15.000000
+ A 11579568 0.053333 15.757874 0.000000 -15.393701 0.000000 15.000000
+ END
+TURNOUT N "Tomix Fine Track Curve 15.39R 391mm 45 1128"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.884990 -4.508711 135.000000
+ C 0 0 15.393701 0.000000 -15.393701 0.000000 45.000000
+ A 11579568 0.053333 15.029528 0.000000 -15.393701 0.000000 45.000000
+ A 11579568 0.053333 15.757874 0.000000 -15.393701 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track Curve 21.29R 541mm 15 1123"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.512642 -0.725753 105.000000
+ C 0 0 21.299213 0.000000 -21.299213 0.000000 15.000000
+ A 11579568 0.053333 20.935040 0.000000 -21.299213 0.000000 15.000000
+ A 11579568 0.053333 21.663386 0.000000 -21.299213 0.000000 15.000000
+ END
+TURNOUT N "Tomix Fine Track Curve 23.82R 605mm 10 1150"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.136108 -0.361863 100.000000
+ C 0 0 23.818898 0.000000 -23.818898 0.000000 10.000000
+ A 11579568 0.053333 23.454725 0.000000 -23.818898 0.000000 10.000000
+ A 11579568 0.053333 24.183071 0.000000 -23.818898 0.000000 10.000000
+ END
+
+SUBCONTENTS Tomix N-Scale Fine Track - Curved PC Track
+TURNOUT N "Tomix Fine Track PC Curve 11.02R 280mm 15 1194"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.853123 -0.375621 105.000000
+ C 0 0 11.023622 0.000000 -11.023622 0.000000 15.000000
+ A 11579568 0.053333 10.659449 0.000000 -11.023622 0.000000 15.000000
+ A 11579568 0.053333 11.387796 0.000000 -11.023622 0.000000 15.000000
+ END
+TURNOUT N "Tomix Fine Track PC Curve 11.02R 280mm 45 1191"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.794878 -3.228744 135.000000
+ C 0 0 11.023622 0.000000 -11.023622 0.000000 45.000000
+ A 11579568 0.053333 10.659449 0.000000 -11.023622 0.000000 45.000000
+ A 11579568 0.053333 11.387796 0.000000 -11.023622 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track PC Curve 9.56R 243mm 45 1195"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.764840 -2.802089 135.000000
+ C 0 0 9.566929 0.000000 -9.566929 0.000000 45.000000
+ A 11579568 0.053333 9.202756 0.000000 -9.566929 0.000000 45.000000
+ A 11579568 0.053333 9.931102 0.000000 -9.566929 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track PC Curve 12.48R 317mm 45 1192"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 8.824915 -3.655400 135.000000
+ C 0 0 12.480315 0.000000 -12.480315 0.000000 45.000000
+ A 11579568 0.053333 12.116143 0.000000 -12.480315 0.000000 45.000000
+ A 11579568 0.053333 12.844488 0.000000 -12.480315 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track PC Curve 13.93R 354mm 45 1196"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.854953 -4.082055 135.000000
+ C 0 0 13.937008 0.000000 -13.937008 0.000000 45.000000
+ A 11579568 0.053333 13.572835 0.000000 -13.937008 0.000000 45.000000
+ A 11579568 0.053333 14.301181 0.000000 -13.937008 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track PC Curve 15.39R 391mm 45 1198"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.884990 -4.508711 135.000000
+ C 0 0 15.393701 0.000000 -15.393701 0.000000 45.000000
+ A 11579568 0.053333 15.029528 0.000000 -15.393701 0.000000 45.000000
+ A 11579568 0.053333 15.757874 0.000000 -15.393701 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track PC Curve 21.29R 541mm 15 1193"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.512642 -0.725753 105.000000
+ C 0 0 21.299213 0.000000 -21.299213 0.000000 15.000000
+ A 11579568 0.053333 20.935040 0.000000 -21.299213 0.000000 15.000000
+ A 11579568 0.053333 21.663386 0.000000 -21.299213 0.000000 15.000000
+ END
+TURNOUT N "Tomix Fine Track PC Curve 23.82R 605mm 10 1190"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.136108 -0.361863 100.000000
+ C 0 0 23.818898 0.000000 -23.818898 0.000000 10.000000
+ A 11579568 0.053333 23.454725 0.000000 -23.818898 0.000000 10.000000
+ A 11579568 0.053333 24.183071 0.000000 -23.818898 0.000000 10.000000
+ END
+
+SUBCONTENTS Tomix N-Scale Fine Track - Widetrack PC Curved Track
+TURNOUT N "Tomix Fine Track Widetrack PC Curve 11.02R 280mm 22.5 1751/1781"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.218558 -0.839123 112.500000
+ C 0 0 11.023622 0.000000 -11.023622 0.000000 22.500000
+ A 11579568 0.053333 10.295276 0.000000 -11.023622 0.000000 22.500000
+ A 11579568 0.053333 11.751968 0.000000 -11.023622 0.000000 22.500000
+ END
+TURNOUT N "Tomix Fine Track Widetrack PC Curve 11.02R 280mm 45 1741/1771"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.794878 -3.228744 135.000000
+ C 0 0 11.023622 0.000000 -11.023622 0.000000 45.000000
+ A 11579568 0.053333 10.295276 0.000000 -11.023622 0.000000 45.000000
+ A 11579568 0.053333 11.751968 0.000000 -11.023622 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track Widetrack PC Curve 12.48R 317mm 22.5 1752/1782"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.776010 -0.950007 112.500000
+ C 0 0 12.480315 0.000000 -12.480315 0.000000 22.500000
+ A 11579568 0.053333 11.751968 0.000000 -12.480315 0.000000 22.500000
+ A 11579568 0.053333 13.208661 0.000000 -12.480315 0.000000 22.500000
+ END
+TURNOUT N "Tomix Fine Track Widetrack PC Curve 12.48R 317mm 45 1742/1772"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 8.824915 -3.655400 135.000000
+ C 0 0 12.480315 0.000000 -12.480315 0.000000 45.000000
+ A 11579568 0.053333 11.751968 0.000000 -12.480315 0.000000 45.000000
+ A 11579568 0.053333 13.208661 0.000000 -12.480315 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track Widetrack PC Curve 13.93R 354mm 22.5 1753/1783"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.333462 -1.060892 112.500000
+ C 0 0 13.937008 0.000000 -13.937008 0.000000 22.500000
+ A 11579568 0.053333 13.208661 0.000000 -13.937008 0.000000 22.500000
+ A 11579568 0.053333 14.665354 0.000000 -13.937008 0.000000 22.500000
+ END
+TURNOUT N "Tomix Fine Track Widetrack PC Curve 13.93R 354mm 45 1743/1773"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.854953 -4.082055 135.000000
+ C 0 0 13.937008 0.000000 -13.937008 0.000000 45.000000
+ A 11579568 0.053333 13.208661 0.000000 -13.937008 0.000000 45.000000
+ A 11579568 0.053333 14.665354 0.000000 -13.937008 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track Widetrack PC Curve 15.39R 391mm 22.5 1754/1784"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.890914 -1.171776 112.500000
+ C 0 0 15.393701 0.000000 -15.393701 0.000000 22.500000
+ A 11579568 0.053333 14.665354 0.000000 -15.393701 0.000000 22.500000
+ A 11579568 0.053333 16.122047 0.000000 -15.393701 0.000000 22.500000
+ END
+TURNOUT N "Tomix Fine Track Widetrack PC Curve 15.39R 391mm 45 1744/1774"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.884990 -4.508711 135.000000
+ C 0 0 15.393701 0.000000 -15.393701 0.000000 45.000000
+ A 11579568 0.053333 14.665354 0.000000 -15.393701 0.000000 45.000000
+ A 11579568 0.053333 16.122047 0.000000 -15.393701 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track Widetrack PC Curve 21.29R 541mm 15 1740/1770"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.512642 -0.725753 105.000000
+ C 0 0 21.299213 0.000000 -21.299213 0.000000 15.000000
+ A 11579568 0.053333 20.570867 0.000000 -21.299213 0.000000 15.000000
+ A 11579568 0.053333 22.027559 0.000000 -21.299213 0.000000 15.000000
+ END
+TURNOUT N "Tomix Fine Track Widetrack PC Curve 23.82R 605mm 10 1750"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.136108 -0.361863 100.000000
+ C 0 0 23.818898 0.000000 -23.818898 0.000000 10.000000
+ A 11579568 0.053333 23.090552 0.000000 -23.818898 0.000000 10.000000
+ A 11579568 0.053333 24.547244 0.000000 -23.818898 0.000000 10.000000
+ END
+
+SUBCONTENTS Tomix N-Scale Fine Track - Viaduct Track
+TURNOUT N "Tomix Fine Track Viaduct Straight 3.89 99mm 1075"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.897638 0.000000 90.000000
+ S 0 0 0.000000 0.000000 3.897638 0.000000
+ L 11579568 0.053333 0.000000 0.701680 3.897638 0.701680
+ L 11579568 0.053333 0.000000 -0.701680 3.897638 -0.701680
+ END
+TURNOUT N "Tomix Fine Track Viaduct Straight 5.51 140mm 1071"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ S 0 0 0.000000 0.000000 5.511811 0.000000
+ L 11579568 0.053333 0.000000 0.701680 5.511811 0.701680
+ L 11579568 0.053333 0.000000 -0.701680 5.511811 -0.701680
+ END
+TURNOUT N "Tomix Fine Track Viaduct Straight 6.24 158.5mm 1076"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.240157 0.000000 90.000000
+ S 0 0 0.000000 0.000000 6.240157 0.000000
+ L 11579568 0.053333 0.000000 0.701680 6.240157 0.701680
+ L 11579568 0.053333 0.000000 -0.701680 6.240157 -0.701680
+ END
+TURNOUT N "Tomix Fine Track Viaduct Straight 11.02 280mm 1072"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 11.023622 0.000000 90.000000
+ S 0 0 0.000000 0.000000 11.023622 0.000000
+ L 11579568 0.053333 0.000000 0.701680 11.023622 0.701680
+ L 11579568 0.053333 0.000000 -0.701680 11.023622 -0.701680
+ END
+TURNOUT N "Tomix Fine Track Viaduct Curve 9.56R 243mm 45 1173"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.764840 -2.802089 135.000000
+ C 0 0 9.566929 0.000000 -9.566929 0.000000 45.000000
+ A 11579568 0.053333 8.865249 0.000000 -9.566929 0.000000 45.000000
+ A 11579568 0.053333 10.268609 0.000000 -9.566929 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track Viaduct Curve 11.02R 280mm 45 1171"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.794878 -3.228744 135.000000
+ C 0 0 11.023622 0.000000 -11.023622 0.000000 45.000000
+ A 11579568 0.053333 10.321942 0.000000 -11.023622 0.000000 45.000000
+ A 11579568 0.053333 11.725302 0.000000 -11.023622 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track Viaduct Curve 12.48R 317mm 45 1127"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 8.824915 -3.655400 135.000000
+ C 0 0 12.480315 0.000000 -12.480315 0.000000 45.000000
+ A 11579568 0.053333 11.778635 0.000000 -12.480315 0.000000 45.000000
+ A 11579568 0.053333 13.181995 0.000000 -12.480315 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track Viaduct Curve 13.93R 354mm 45 1174"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.854953 -4.082055 135.000000
+ C 0 0 13.937008 0.000000 -13.937008 0.000000 45.000000
+ A 11579568 0.053333 13.235328 0.000000 -13.937008 0.000000 45.000000
+ A 11579568 0.053333 14.638688 0.000000 -13.937008 0.000000 45.000000
+ END
+
+SUBCONTENTS Tomix N-Scale Fine Track - Overhead PC Track
+TURNOUT N "Tomix Fine Track Overhead PC Straight 3.89 99mm 1825"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 3.897638 0.000000 90.000000
+ S 0 0 0.000000 0.000000 3.897638 0.000000
+ L 11579568 0.053333 0.000000 0.701680 3.897638 0.701680
+ L 11579568 0.053333 0.000000 -0.701680 3.897638 -0.701680
+ END
+TURNOUT N "Tomix Fine Track Overhead PC Straight 5.51 140mm 1821"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ S 0 0 0.000000 0.000000 5.511811 0.000000
+ L 11579568 0.053333 0.000000 0.701680 5.511811 0.701680
+ L 11579568 0.053333 0.000000 -0.701680 5.511811 -0.701680
+ END
+TURNOUT N "Tomix Fine Track Overhead PC Straight 6.24 158.5mm 1826"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.240157 0.000000 90.000000
+ S 0 0 0.000000 0.000000 6.240157 0.000000
+ L 11579568 0.053333 0.000000 0.701680 6.240157 0.701680
+ L 11579568 0.053333 0.000000 -0.701680 6.240157 -0.701680
+ END
+TURNOUT N "Tomix Fine Track Overhead PC Straight 11.02 280mm 1822"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 11.023622 0.000000 90.000000
+ S 0 0 0.000000 0.000000 11.023622 0.000000
+ L 11579568 0.053333 0.000000 0.701680 11.023622 0.701680
+ L 11579568 0.053333 0.000000 -0.701680 11.023622 -0.701680
+ END
+TURNOUT N "Tomix Fine Track Overhead PC Curve 9.56R 243mm 45 1873"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.764840 -2.802089 135.000000
+ C 0 0 9.566929 0.000000 -9.566929 0.000000 45.000000
+ A 11579568 0.053333 8.865249 0.000000 -9.566929 0.000000 45.000000
+ A 11579568 0.053333 10.268609 0.000000 -9.566929 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track Overhead PC Curve 11.02R 280mm 45 1871"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.794878 -3.228744 135.000000
+ C 0 0 11.023622 0.000000 -11.023622 0.000000 45.000000
+ A 11579568 0.053333 10.321942 0.000000 -11.023622 0.000000 45.000000
+ A 11579568 0.053333 11.725302 0.000000 -11.023622 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track Overhead PC Curve 12.48R 317mm 45 1872"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 8.824915 -3.655400 135.000000
+ C 0 0 12.480315 0.000000 -12.480315 0.000000 45.000000
+ A 11579568 0.053333 11.778635 0.000000 -12.480315 0.000000 45.000000
+ A 11579568 0.053333 13.181995 0.000000 -12.480315 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track Overhead PC Curve 13.93R 354mm 45 1874"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.854953 -4.082055 135.000000
+ C 0 0 13.937008 0.000000 -13.937008 0.000000 45.000000
+ A 11579568 0.053333 13.235328 0.000000 -13.937008 0.000000 45.000000
+ A 11579568 0.053333 14.638688 0.000000 -13.937008 0.000000 45.000000
+ END
+
+SUBCONTENTS Tomix N-Scale Fine Track - Overhead Double Track
+TURNOUT N "Tomix Fine Track Overhead Dbl Trk Straight 5.51 140mm 1061"
+ P "Normal" 1 0 2
+ E 0.000000 0.728346 270.000000
+ E 5.511811 0.728346 90.000000
+ E 0.000000 -0.728346 270.000000
+ E 5.511811 -0.728346 90.000000
+ S 0 0 0.000000 0.728346 5.511811 0.728346
+ S 0 0 0.000000 -0.728346 5.511811 -0.728346
+ L 11579568 0.053333 0.000000 1.456692 5.511811 1.456692
+ L 11579568 0.053333 0.000000 -1.456692 5.511811 -1.456692
+ END
+TURNOUT N "Tomix Fine Track Overhead Dbl Trk Straight 11.02 280mm 1062"
+ P "Normal" 1 0 2
+ E 0.000000 0.728346 270.000000
+ E 11.023622 0.728346 90.000000
+ E 0.000000 -0.728346 270.000000
+ E 11.023622 -0.728346 90.000000
+ S 0 0 0.000000 0.728346 11.023622 0.728346
+ S 0 0 0.000000 -0.728346 11.023622 -0.728346
+ L 11579568 0.053333 0.000000 1.456692 11.023622 1.456692
+ L 11579568 0.053333 0.000000 -1.456692 11.023622 -1.456692
+ END
+TURNOUT N "Tomix Fine Track Overhead Dbl Trk Straight 44.09 1120mm 1069"
+ P "Normal" 1 0 2
+ E 0.000000 0.728346 270.000000
+ E 44.094488 0.728346 90.000000
+ E 0.000000 -0.728346 270.000000
+ E 44.094488 -0.728346 90.000000
+ S 0 0 0.000000 0.728346 44.094488 0.728346
+ S 0 0 0.000000 -0.728346 44.094488 -0.728346
+ L 11579568 0.053333 0.000000 1.456692 44.094488 1.456692
+ L 11579568 0.053333 0.000000 -1.456692 44.094488 -1.456692
+ END
+TURNOUT N "Tomix Fine Track Overhead Dbl Trk Curve 11.02/12.48R 280/317mm 45 1161"
+ P "Normal" 1 0 2
+ E 0.000000 0.728346 270.000000
+ E 0.000000 -0.728346 270.000000
+ E 8.824915 -2.927054 135.000000
+ E 7.794878 -3.957090 135.000000
+ C 0 0 12.480315 0.000000 -11.751968 0.000000 45.000000
+ C 0 0 11.023622 0.000000 -11.751968 0.000000 45.000000
+ A 11579568 0.053333 13.208661 0.000000 -11.751968 0.000000 45.000000
+ A 11579568 0.053333 10.295276 0.000000 -11.751968 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track Overhead Dbl Trk Curve 13.93/15.39R 354/391mm 45 1162"
+ P "Normal" 1 0 2
+ E 0.000000 0.728346 270.000000
+ E 0.000000 -0.728346 270.000000
+ E 10.884990 -3.780365 135.000000
+ E 9.854953 -4.810401 135.000000
+ C 0 0 15.393701 0.000000 -14.663354 0.000000 45.000000
+ C 0 0 13.937008 0.000000 -14.663354 0.000000 45.000000
+ A 11579568 0.053333 16.122047 0.000000 -14.663354 0.000000 45.000000
+ A 11579568 0.053333 13.208662 0.000000 -14.663354 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track Overhead Dbl Trk Curve 16.85/18.30R 428/465mm 45 1163"
+ P "Normal" 1 0 2
+ E 0.000000 0.728346 270.000000
+ E 0.000000 -0.728346 270.000000
+ E 12.945065 -4.633676 135.000000
+ E 11.915028 -5.663712 135.000000
+ C 0 0 18.307087 0.000000 -17.578740 0.000000 45.000000
+ C 0 0 16.850394 0.000000 -17.578740 0.000000 45.000000
+ A 11579568 0.053333 19.035433 0.000000 -17.578740 0.000000 45.000000
+ A 11579568 0.053333 16.122048 0.000000 -17.578740 0.000000 45.000000
+ END
+
+SUBCONTENTS Tomix N-Scale Fine Track - Viaduct Double Track Slab Type
+TURNOUT N "Tomix Fine Track Viaduct Dbl Trk Straight 5.51 140mm (slab type) 1066"
+ P "Normal" 1 0 2
+ E 0.000000 0.728346 270.000000
+ E 5.511811 0.728346 90.000000
+ E 0.000000 -0.728346 270.000000
+ E 5.511811 -0.728346 90.000000
+ S 0 0 0.000000 0.728346 5.511811 0.728346
+ S 0 0 0.000000 -0.728346 5.511811 -0.728346
+ L 11579568 0.053333 0.000000 1.456692 5.511811 1.456692
+ L 11579568 0.053333 0.000000 -1.456692 5.511811 -1.456692
+ END
+TURNOUT N "Tomix Fine Track Viaduct Dbl Trk Straight 11.02 280mm (slab type) 1067"
+ P "Normal" 1 0 2
+ E 0.000000 0.728346 270.000000
+ E 11.023622 0.728346 90.000000
+ E 0.000000 -0.728346 270.000000
+ E 11.023622 -0.728346 90.000000
+ S 0 0 0.000000 0.728346 11.023622 0.728346
+ S 0 0 0.000000 -0.728346 11.023622 -0.728346
+ L 11579568 0.053333 0.000000 1.456692 11.023622 1.456692
+ L 11579568 0.053333 0.000000 -1.456692 11.023622 -1.456692
+ END
+TURNOUT N "Tomix Fine Track Viaduct Dbl Trk Straight 44.09 1120mm (slab type) 1070"
+ P "Normal" 1 0 2
+ E 0.000000 0.728346 270.000000
+ E 44.094488 0.728346 90.000000
+ E 0.000000 -0.728346 270.000000
+ E 44.094488 -0.728346 90.000000
+ S 0 0 0.000000 0.728346 44.094488 0.728346
+ S 0 0 0.000000 -0.728346 44.094488 -0.728346
+ L 11579568 0.053333 0.000000 1.456692 44.094488 1.456692
+ L 11579568 0.053333 0.000000 -1.456692 44.094488 -1.456692
+ END
+TURNOUT N "Tomix Fine Track Viaduct Dbl Trk Curve 16.85/18.30R 428/465mm 45(slab type) 1168"
+ P "Normal" 1 0 2
+ E 0.000000 0.728346 270.000000
+ E 0.000000 -0.728346 270.000000
+ E 12.945065 -4.633676 135.000000
+ E 11.915028 -5.663712 135.000000
+ C 0 0 18.307087 0.000000 -17.578740 0.000000 45.000000
+ C 0 0 16.850394 0.000000 -17.578740 0.000000 45.000000
+ A 11579568 0.053333 19.035433 0.000000 -17.578740 0.000000 45.000000
+ A 11579568 0.053333 16.122048 0.000000 -17.578740 0.000000 45.000000
+ END
+TURNOUT N "Tomix Fine Track Viaduct Dbl Trk Curve 19.76/21.22R 502/539mm 22.5(slab type) 1169"
+ P "Normal" 1 0 2
+ E 0.000000 0.728346 270.000000
+ E 0.000000 -0.728346 270.000000
+ E 8.120723 -0.886966 112.500000
+ E 7.563271 -2.232774 112.500000
+ C 0 0 21.220472 0.000000 -20.492125 0.000000 22.500000
+ C 0 0 19.763779 0.000000 -20.492125 0.000000 22.500000
+ A 11579568 0.053333 21.948818 0.000000 -20.492125 0.000000 22.500000
+ A 11579568 0.053333 19.035434 0.000000 -20.492125 0.000000 22.500000
+ END
+
+
+SUBCONTENTS Tomix N-Scale Fine Track - Turnouts
+TURNOUT N "Tomix Fine Track Turnout 541mm-R15 (manual) 1209"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ E 5.512642 -0.725753 105.000000
+ S 0 0 0.000000 0.000000 5.511811 0.000000
+ C 0 0 21.299213 0.000000 -21.299213 0.000000 15.000000
+ L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
+ A 11579568 0.053333 20.935040 0.000000 -21.299213 0.000000 15.000000
+ G 11579568 0.000000 0.187500 0.437500 -0.633274 0
+ G 11579568 0.000000 0.187500 0.562500 -0.633274 0
+ F 11579568 0.000000 4
+ 0.437500 -0.364173 0
+ 0.437500 -0.820774 0
+ 0.562500 -0.820774 0
+ 0.562500 -0.364173 0
+ END
+TURNOUT N "Tomix Fine Track Turnout 541mm-L15 (manual) 1210"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ E 5.512642 0.725753 75.000000
+ S 0 0 0.000000 0.000000 5.511811 0.000000
+ C 0 0 21.299213 0.000000 21.299213 165.000000 15.000000
+ L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
+ A 11579568 0.053333 20.935040 0.000000 21.299213 165.000000 15.000000
+ G 11579568 0.000000 0.187500 0.437500 0.633274 0
+ G 11579568 0.000000 0.187500 0.562500 0.633274 0
+ F 11579568 0.000000 4
+ 0.437500 0.364173 0
+ 0.437500 0.820774 0
+ 0.562500 0.820774 0
+ 0.562500 0.364173 0
+ END
+TURNOUT N "Tomix Fine Track Turnout 541mm-R15 (elec) 1241/81"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ E 5.512642 -0.725753 105.000000
+ S 0 0 0.000000 0.000000 5.511811 0.000000
+ C 0 0 21.299213 0.000000 -21.299213 0.000000 15.000000
+ L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
+ A 11579568 0.053333 20.935040 0.000000 -21.299213 0.000000 15.000000
+ G 11579568 0.000000 0.187500 0.437500 -0.633274 0
+ G 11579568 0.000000 0.187500 0.562500 -0.633274 0
+ F 11579568 0.000000 4
+ 0.437500 -0.364173 0
+ 0.437500 -0.820774 0
+ 0.562500 -0.820774 0
+ 0.562500 -0.364173 0
+ END
+TURNOUT N "Tomix Fine Track Turnout 541mm-L15 (elec) 1242/82"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ E 5.512642 0.725753 75.000000
+ S 0 0 0.000000 0.000000 5.511811 0.000000
+ C 0 0 21.299213 0.000000 21.299213 165.000000 15.000000
+ L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
+ A 11579568 0.053333 20.935040 0.000000 21.299213 165.000000 15.000000
+ G 11579568 0.000000 0.187500 0.437500 0.633274 0
+ G 11579568 0.000000 0.187500 0.562500 0.633274 0
+ F 11579568 0.000000 4
+ 0.437500 0.364173 0
+ 0.437500 0.820774 0
+ 0.562500 0.820774 0
+ 0.562500 0.364173 0
+ END
+TURNOUT N "Tomix Fine Track 3-Way Turnout 541mm-L15 (elec) 1261"
+ P "Left" 1
+ P "Normal" 2
+ P "Right" 3
+ E 5.511811 0.000000 90.000000
+ E 0.000000 0.000000 270.000000
+ E 0.000000 -0.725753 255.000000
+ E 0.000000 0.725753 285.000000
+ C 0 0 21.299213 5.511811 21.299213 180.000000 15.000000
+ S 0 0 0.000000 0.000000 5.511811 0.000000
+ C 0 0 21.299213 5.511811 -21.299213 345.000000 15.000000
+ A 11579568 0.053333 20.935040 5.511811 21.299213 180.000000 15.000000
+ A 11579568 0.053333 20.935040 5.511811 -21.299213 345.000000 15.000000
+ G 11579568 0.000000 0.187500 5.074311 0.633274 0
+ G 11579568 0.000000 0.187500 4.949311 0.633274 0
+ F 11579568 0.000000 4
+ 5.074311 0.364173 0
+ 5.074311 0.820774 0
+ 4.949311 0.820774 0
+ 4.949311 0.364173 0
+ G 11579568 0.000000 0.187500 4.074311 0.633274 0
+ G 11579568 0.000000 0.187500 3.949311 0.633274 0
+ F 11579568 0.000000 4
+ 4.074311 0.364173 0
+ 4.074311 0.820774 0
+ 3.949311 0.820774 0
+ 3.949311 0.364173 0
+ END
+TURNOUT N "Tomix Fine Track 3-Way Turnout 541mm-R15 (elec) 1262"
+ P "Left" 1
+ P "Normal" 2
+ P "Right" 3
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ E 5.512642 -0.725753 105.000000
+ E 5.512642 0.725753 75.000000
+ C 0 0 21.299213 0.000000 21.299213 165.000000 15.000000
+ S 0 0 0.000000 0.000000 5.511811 0.000000
+ C 0 0 21.299213 0.000000 -21.299213 0.000000 15.000000
+ A 11579568 0.053333 20.935040 0.000000 21.299213 165.000000 15.000000
+ A 11579568 0.053333 20.935040 0.000000 -21.299213 0.000000 15.000000
+ G 11579568 0.000000 0.187500 0.437500 0.633274 0
+ G 11579568 0.000000 0.187500 0.562500 0.633274 0
+ F 11579568 0.000000 4
+ 0.437500 0.364173 0
+ 0.437500 0.820774 0
+ 0.562500 0.820774 0
+ 0.562500 0.364173 0
+ G 11579568 0.000000 0.187500 1.437500 0.633274 0
+ G 11579568 0.000000 0.187500 1.562500 0.633274 0
+ F 11579568 0.000000 4
+ 1.437500 0.364173 0
+ 1.437500 0.820774 0
+ 1.562500 0.820774 0
+ 1.562500 0.364173 0
+ END
+TURNOUT N "Tomix Fine Track Wye Turnout 280mm-15 (elec) 1240"
+ P "Left" 1
+ P "Right" 2
+ E 0.000000 0.000000 270.000000
+ E 2.853123 0.375621 75.000000
+ E 2.853123 -0.375621 105.000000
+ C 0 0 11.023622 0.000000 11.023622 165.000000 15.000000
+ C 0 0 11.023622 0.000000 -11.023622 0.000000 15.000000
+ A 11579568 0.053333 10.659449 0.000000 11.023622 165.000000 15.000000
+ A 11579568 0.053333 10.659449 0.000000 -11.023622 0.000000 15.000000
+ G 11579568 0.000000 0.187500 0.937500 0.633274 0
+ G 11579568 0.000000 0.187500 1.062500 0.633274 0
+ F 11579568 0.000000 4
+ 0.937500 0.364173 0
+ 0.937500 0.820774 0
+ 1.062500 0.820774 0
+ 1.062500 0.364173 0
+ END
+TURNOUT N "Tomix Fine Track Turnout 280mm-R30 (elec) 1243"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ E 5.511811 -1.476885 120.000000
+ S 0 0 0.000000 0.000000 5.511811 0.000000
+ C 0 0 11.023622 0.000000 -11.023622 0.000000 30.000000
+ L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
+ A 11579568 0.053333 10.659449 0.000000 -11.023622 0.000000 30.000000
+ L 11579568 0.053333 4.511811 -0.364173 5.511811 -0.364173
+ A 11579568 0.053333 11.469396 0.000000 -11.023622 23.000000 7.000000
+ G 11579568 0.000000 0.187500 0.437500 -0.633274 0
+ G 11579568 0.000000 0.187500 0.562500 -0.633274 0
+ F 11579568 0.000000 4
+ 0.437500 -0.364173 0
+ 0.437500 -0.820774 0
+ 0.562500 -0.820774 0
+ 0.562500 -0.364173 0
+ END
+TURNOUT N "Tomix Fine Track Turnout 280mm-L30 (elec) 1244"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ E 5.511811 1.476885 60.000000
+ S 0 0 0.000000 0.000000 5.511811 0.000000
+ C 0 0 11.023622 0.000000 11.023622 150.000000 30.000000
+ L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
+ A 11579568 0.053333 10.659449 0.000000 11.023622 150.000000 30.000000
+ L 11579568 0.053333 4.511811 0.364173 5.511811 0.364173
+ A 11579568 0.053333 11.469396 0.000000 11.023622 150.000000 7.000000
+ G 11579568 0.000000 0.187500 0.437500 0.633274 0
+ G 11579568 0.000000 0.187500 0.562500 0.633274 0
+ F 11579568 0.000000 4
+ 0.437500 0.364173 0
+ 0.437500 0.820774 0
+ 0.562500 0.820774 0
+ 0.562500 0.364173 0
+ END
+TURNOUT N "Tomix Fine Track Mini-Turnout 140mm-R30 1231"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 2.755906 0.000000 90.000000
+ E 2.755906 -0.738443 120.000000
+ S 0 0 0.000000 0.000000 2.755906 0.000000
+ C 0 0 5.511811 0.000000 -5.511811 0.000000 30.000000
+ L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
+ A 11579568 0.053333 5.147638 0.000000 -5.511811 0.000000 30.000000
+ G 11579568 0.000000 0.187500 0.437500 -0.633274 0
+ G 11579568 0.000000 0.187500 0.562500 -0.633274 0
+ F 11579568 0.000000 4
+ 0.437500 -0.364173 0
+ 0.437500 -0.820774 0
+ 0.562500 -0.820774 0
+ 0.562500 -0.364173 0
+ END
+TURNOUT N "Tomix Fine Track Mini-Turnout 140mm-L30 1232"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 2.755906 0.000000 90.000000
+ E 2.755906 0.738443 60.000000
+ S 0 0 0.000000 0.000000 2.755906 0.000000
+ C 0 0 5.511811 0.000000 5.511811 150.000000 30.000000
+ L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
+ A 11579568 0.053333 5.147638 0.000000 5.511811 150.000000 30.000000
+ G 11579568 0.000000 0.187500 0.437500 0.633274 0
+ G 11579568 0.000000 0.187500 0.562500 0.633274 0
+ F 11579568 0.000000 4
+ 0.437500 0.364173 0
+ 0.437500 0.820774 0
+ 0.562500 0.820774 0
+ 0.562500 0.364173 0
+ END
+TURNOUT N "Tomix Fine Track Turnout 317/280mm Curve-R45 (elec) 1248"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 8.824915 -3.655400 135.000000
+ E 7.794878 -3.228744 135.000000
+ C 0 0 12.480315 0.000000 -12.480315 0.000000 45.000000
+ C 0 0 11.023622 0.000000 -11.023622 0.000000 45.000000
+ A 11579568 0.053333 12.844488 0.000000 -12.480315 0.000000 45.000000
+ A 11579568 0.053333 10.659449 0.000000 -11.023622 0.000000 45.000000
+ G 11579568 0.000000 0.187500 0.437500 -0.633274 0
+ G 11579568 0.000000 0.187500 0.562500 -0.633274 0
+ F 11579568 0.000000 4
+ 0.437500 -0.364173 0
+ 0.437500 -0.820774 0
+ 0.562500 -0.820774 0
+ 0.562500 -0.364173 0
+ END
+TURNOUT N "Tomix Fine Track Turnout 317/280mm Curve-L45 (elec) 1249"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 8.824915 3.655400 45.000000
+ E 7.794878 3.228744 45.000000
+ C 0 0 12.480315 0.000000 12.480315 135.000000 45.000000
+ C 0 0 11.023622 0.000000 11.023622 135.000000 45.000000
+ A 11579568 0.053333 12.844488 0.000000 12.480315 135.000000 45.000000
+ A 11579568 0.053333 10.659449 0.000000 11.023622 135.000000 45.000000
+ G 11579568 0.000000 0.187500 0.437500 0.633274 0
+ G 11579568 0.000000 0.187500 0.562500 0.633274 0
+ F 11579568 0.000000 4
+ 0.437500 0.364173 0
+ 0.437500 0.820774 0
+ 0.562500 0.820774 0
+ 0.562500 0.364173 0
+ END
+TURNOUT N "Tomix Fine Track Double Crossover 1247"
+ P "Normal" 1 2 3 0 4 5 6
+ P "Reverse" 1 7 8 9 6 0 4 10 11 12 3
+ E 0.000000 0.000000 270.000000
+ E 11.023622 0.000000 90.000000
+ E 0.000000 1.456693 270.000000
+ E 11.023622 1.456693 90.000000
+ S 0 0.000000 0.000000 0.000000 0.605392 0.000000
+ S 0 0.000000 0.605392 0.000000 10.418230 0.000000
+ S 0 0.000000 10.418230 0.000000 11.023622 0.000000
+ S 0 0.000000 0.000000 1.456693 0.605392 1.456693
+ S 0 0.000000 0.605392 1.456693 10.418230 1.456693
+ S 0 0.000000 10.418230 1.456693 11.023622 1.456693
+ C 0 0.000000 -16.804501 0.605415 16.804501 164.231537 15.768539
+ S 0 0.000000 5.172043 0.632397 5.851579 0.824296
+ C 0 0.000000 16.804501 10.418251 -15.347802 344.231537 15.768539
+ C 0 0.000000 16.804501 0.605325 -15.347808 0.000000 15.768539
+ S 0 0.000000 5.172043 0.824296 5.851579 0.632397
+ C 0 0.000000 -16.804501 10.418251 16.804495 180.000000 15.768539
+ L 11579568 0.053333 0.000000 -0.364173 11.023622 -0.364173
+ L 11579568 0.053333 0.000000 0.364173 1.5 0.364173
+ L 11579568 0.053333 0.000000 1.092520 1.5 1.092520
+ L 11579568 0.053333 1.5 0.364173 1.5 1.092520
+ L 11579568 0.053333 11.023622 0.364173 9.523622 0.364173
+ L 11579568 0.053333 11.023622 1.092520 9.523622 1.092520
+ L 11579568 0.053333 9.523622 0.364173 9.523622 1.092520
+ L 11579568 0.053333 0.000000 1.820866 11.023622 1.820866
+ END
+TURNOUT N "Tomix Fine Track Double Slip 140mm-15R 1245"
+ P "Normal" 1 2 3 0 4 5 6
+ P "Reverse" 1 7 6 0 4 8 3
+ E 5.511811 0.000000 90.000000
+ E 0.000000 0.000000 270.000000
+ E 0.000000 0.738443 285.000000
+ E 5.511811 -0.738443 105.000000
+ S 0 0.000000 0.000000 0.000000 0.706236 0.000000
+ S 0 0.000000 0.706236 0.000000 4.805575 0.000000
+ S 0 0.000000 4.805575 0.000000 5.511811 0.000000
+ S 0 0.000000 0.000000 0.738443 0.776077 0.530493
+ S 0 0.000000 0.776077 0.530493 4.735734 -0.530493
+ S 0 0.000000 4.735734 -0.530493 5.511811 -0.738443
+ C 0 0.000000 15.568784 0.706236 -15.568784 0.000000 15.000000
+ C 0 0.000000 -15.568784 4.805575 15.568784 180.000000 15.000000
+ L 11579568 0.053333 0.000000 -0.364173 0.706236 -0.364173
+ L 11579568 0.053333 4.620359 -0.882258 5.411811 -1.102616
+ A 11579568 0.053333 15.204611 0.706236 -15.568784 0.000000 15.000000
+ L 11579568 0.053333 0.100000 1.102616 0.891452 0.882258
+ L 11579568 0.053333 4.805575 0.364173 5.511811 0.364173
+ A 11579568 0.053333 15.204611 4.805575 15.568784 180.000000 15.000000
+ G 11579568 0.000000 0.187500 1.437500 -0.633274 0
+ G 11579568 0.000000 0.187500 1.562500 -0.633274 0
+ F 11579568 0.000000 4
+ 1.437500 -0.364173 0
+ 1.437500 -0.820774 0
+ 1.562500 -0.820774 0
+ 1.562500 -0.364173 0
+ G 11579568 0.000000 0.187500 3.937500 -1.033274 0
+ G 11579568 0.000000 0.187500 4.062500 -1.033274 0
+ F 11579568 0.000000 4
+ 3.937500 -0.764173 0
+ 3.937500 -1.220774 0
+ 4.062500 -1.220774 0
+ 4.062500 -0.764173 0
+ END
+TURNOUT N "Tomix Fine Track Double Slip 140mm-15L 1246"
+ P "Normal" 1 2 3 0 4 5 6
+ P "Reverse" 1 8 6 0 4 7 3
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ E 0.000000 -0.738443 255.000000
+ E 5.511811 0.738443 75.000000
+ S 0 0.000000 0.000000 0.000000 0.706236 0.000000
+ S 0 0.000000 0.706236 0.000000 4.805575 0.000000
+ S 0 0.000000 4.805575 0.000000 5.511811 0.000000
+ S 0 0.000000 0.000000 -0.738443 0.776077 -0.530493
+ S 0 0.000000 0.776077 -0.530493 4.735734 0.530493
+ S 0 0.000000 4.735734 0.530493 5.511811 0.738443
+ C 0 0.000000 15.568784 4.805575 -15.568784 345.000000 15.000000
+ C 0 0.000000 -15.568784 0.706236 15.568784 165.000000 15.000000
+ L 11579568 0.053333 0.000000 0.364173 0.706236 0.364173
+ L 11579568 0.053333 4.620359 0.882258 5.411811 1.102616
+ A 11579568 0.053333 15.204611 0.706236 15.568784 165.000000 15.000000
+ L 11579568 0.053333 0.100000 -1.102616 0.891452 -0.882258
+ L 11579568 0.053333 4.805575 -0.364173 5.511811 -0.364173
+ A 11579568 0.053333 15.204611 4.805575 -15.568784 345.000000 15.000000
+ G 11579568 0.000000 0.187500 3.937500 -0.633274 0
+ G 11579568 0.000000 0.187500 4.062500 -0.633274 0
+ F 11579568 0.000000 4
+ 3.937500 -0.364173 0
+ 3.937500 -0.820774 0
+ 4.062500 -0.820774 0
+ 4.062500 -0.364173 0
+ G 11579568 0.000000 0.187500 1.437500 -1.033274 0
+ G 11579568 0.000000 0.187500 1.562500 -1.033274 0
+ F 11579568 0.000000 4
+ 1.437500 -0.7641730
+ 1.437500 -1.220774 0
+ 1.562500 -1.220774 0
+ 1.562500 -0.764173 0
+ END
+
+SUBCONTENTS Tomix N-Scale Fine Track - Crossings
+TURNOUT N "Tomix Fine Track Crossing 15 140mm(R) 1322"
+ P "Normal" 1 0 2
+ E 5.511811 0.000000 90.000000
+ E 0.000000 0.000000 270.000000
+ E 0.000000 0.738443 285.000000
+ E 5.511811 -0.738443 105.000000
+ S 0 0.000000 0.000000 0.000000 5.511811 0.000000
+ S 0 0.000000 0.000000 0.738443 5.511811 -0.738443
+ L 11579568 0.053333 0.100000 1.102616 2.755906 0.364173
+ L 11579568 0.053333 2.755906 0.364173 5.511811 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
+ L 11579568 0.053333 2.755906 -0.364173 5.411811 -1.102616
+ END
+TURNOUT N "Tomix Fine Track Crossing 15 140mm(L) 1333"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ E 0.000000 -0.738443 255.000000
+ E 5.511811 0.738443 75.000000
+ S 0 0.000000 0.000000 0.000000 5.511811 0.000000
+ S 0 0.000000 0.000000 -0.738443 5.511811 0.738443
+ L 11579568 0.053333 0.100000 -1.102616 2.755906 -0.364173
+ L 11579568 0.053333 2.755906 -0.364173 5.511811 -0.364173
+ L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
+ L 11579568 0.053333 2.755906 0.364173 5.411811 1.102616
+ END
+TURNOUT N "Tomix Fine Track Crossing 30 72.5mm 1321"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 2.854331 0.000000 90.000000
+ E 0.191204 -0.713583 240.000000
+ E 2.663127 0.713583 60.000000
+ S 0 0.000000 0.000000 0.000000 2.854331 0.000000
+ S 0 0.000000 0.191204 -0.713583 2.663127 0.713583
+ L 11579568 0.053333 0.000000 0.364173 1.327166 0.364173
+ L 11579568 0.053333 1.327166 0.364173 2.454331 1.027756
+ L 11579568 0.053333 0.400000 -1.027756 1.527166 -0.364173
+ L 11579568 0.053333 1.527166 -0.364173 2.854331 -0.364173
+ END
+TURNOUT N "Tomix Fine Track Crossing 90 1324"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 1.456693 0.000000 90.000000
+ E 0.728346 0.728346 0.000000
+ E 0.728346 -0.728346 180.000000
+ S 0 0 0.000000 0.000000 1.456693 0.000000
+ S 0 0 0.728346 0.728346 0.728346 -0.728346
+ L 11579568 0.053333 0.000000 0.364173 0.364173 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 0.364173 -0.364173
+ L 11579568 0.053333 1.092519 0.364173 1.456693 0.364173
+ L 11579568 0.053333 1.092519 -0.364173 1.456693 -0.364173
+ L 11579568 0.053333 0.364173 -0.728346 0.364173 -0.364173
+ L 11579568 0.053333 1.092519 -0.728346 1.092519 -0.364173
+ L 11579568 0.053333 0.364173 0.364173 0.364173 0.728346
+ L 11579568 0.053333 1.092519 0.364173 1.092519 0.728346
+ END
+
+SUBCONTENTS Tomix N-Scale Fine Track - Brigdes
+TURNOUT N "Tomix Fine Track Truss Bridge 11.02 280mm 3030/31/32/33"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 11.023622 0.000000 90.000000
+ S 0 0 0.000000 0.000000 11.023622 0.000000
+ L 0 0.053333 0.000000 0.701680 11.023622 0.701680
+ L 0 0.053333 0.000000 -0.701680 11.023622 -0.701680
+ L 0 0.053333 0.918635 -0.701680 0.918635 0.701680
+ L 0 0.053333 0.918635 0.000000 1.837270 0.701680
+ L 0 0.053333 0.918635 0.000000 1.837270 -0.701680
+ L 0 0.053333 1.837270 0.701680 2.755905 0.000000
+ L 0 0.053333 1.837270 -0.701680 2.755905 0.000000
+ L 0 0.053333 2.755905 -0.701680 2.755905 0.701680
+ L 0 0.053333 2.755905 0.000000 3.674540 0.701680
+ L 0 0.053333 2.755905 0.000000 3.674540 -0.701680
+ L 0 0.053333 3.674540 0.701680 4.593175 0.000000
+ L 0 0.053333 3.674540 -0.701680 4.593175 0.000000
+ L 0 0.053333 4.593175 -0.701680 4.593175 0.701680
+ L 0 0.053333 4.593175 0.000000 5.511811 0.701680
+ L 0 0.053333 4.593175 0.000000 5.511811 -0.701680
+ L 0 0.053333 5.511811 0.701680 6.430445 0.000000
+ L 0 0.053333 5.511811 -0.701680 6.430445 0.000000
+ L 0 0.053333 6.430445 -0.701680 6.430445 0.701680
+ L 0 0.053333 6.430445 0.000000 7.349080 0.701680
+ L 0 0.053333 6.430445 0.000000 7.349080 -0.701680
+ L 0 0.053333 7.349080 0.701680 8.267715 0.000000
+ L 0 0.053333 7.349080 -0.701680 8.267715 0.000000
+ L 0 0.053333 8.267715 -0.701680 8.267715 0.701680
+ L 0 0.053333 8.267715 0.000000 9.186350 0.701680
+ L 0 0.053333 8.267715 0.000000 9.186350 -0.701680
+ L 0 0.053333 9.186350 0.701680 10.104985 0.000000
+ L 0 0.053333 9.186350 -0.701680 10.104985 0.000000
+ L 0 0.053333 10.104985 -0.701680 10.104985 0.701680
+ END
+TURNOUT N "Tomix Fine Track Dbl Trk Truss Bridge 11.02 280mm 3051/52/53/3257"
+ P "Normal" 1 0 2
+ E 0.000000 0.728346 270.000000
+ E 11.023622 0.728346 90.000000
+ E 0.000000 -0.728346 270.000000
+ E 11.023622 -0.728346 90.000000
+ S 0 0 0.000000 0.728346 11.023622 0.728346
+ S 0 0 0.000000 -0.728346 11.023622 -0.728346
+ L 0 0.053333 0.000000 1.430026 11.023622 1.430026
+ L 0 0.053333 0.000000 -1.430026 11.023622 -1.430026
+ L 0 0.053333 0.918635 -1.430026 0.918635 1.430026
+ L 0 0.053333 0.918635 1.430026 2.755905 -1.430026
+ L 0 0.053333 0.918635 -1.430026 2.755905 1.430026
+ L 0 0.053333 2.755905 -1.430026 2.755905 1.430026
+ L 0 0.053333 2.755905 1.430026 4.593175 -1.430026
+ L 0 0.053333 2.755905 -1.430026 4.593175 1.430026
+ L 0 0.053333 4.593175 -1.430026 4.593175 1.430026
+ L 0 0.053333 4.593175 1.430026 6.430445 -1.430026
+ L 0 0.053333 4.593175 -1.430026 6.430445 1.430026
+ L 0 0.053333 6.430445 -1.430026 6.430445 1.430026
+ L 0 0.053333 6.430445 1.430026 8.267715 -1.430026
+ L 0 0.053333 6.430445 -1.430026 8.267715 1.430026
+ L 0 0.053333 8.267715 -1.430026 8.267715 1.430026
+ L 0 0.053333 8.267715 1.430026 10.104985 -1.430026
+ L 0 0.053333 8.267715 -1.430026 10.104985 1.430026
+ L 0 0.053333 10.104985 -1.430026 10.104985 1.430026
+ END
+TURNOUT N "Tomix Fine Track Plate Grider Bridge 5.51 140mm 3029"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ S 0 0 0.000000 0.000000 5.511811 0.000000
+ L 0 0.053333 0.000000 0.701680 5.511811 0.701680
+ L 0 0.053333 0.000000 0.364173 0.000000 0.701680
+ L 0 0.053333 1.102362 0.364173 1.102362 0.701680
+ L 0 0.053333 2.204724 0.364173 2.204724 0.701680
+ L 0 0.053333 3.307086 0.364173 3.307086 0.701680
+ L 0 0.053333 4.409448 0.364173 4.409448 0.701680
+ L 0 0.053333 5.511811 0.364173 5.511811 0.701680
+ L 0 0.053333 0.000000 -0.701680 5.511811 -0.701680
+ L 0 0.053333 0.000000 -0.364173 0.000000 -0.701680
+ L 0 0.053333 1.102362 -0.364173 1.102362 -0.701680
+ L 0 0.053333 2.204724 -0.364173 2.204724 -0.701680
+ L 0 0.053333 3.307086 -0.364173 3.307086 -0.701680
+ L 0 0.053333 4.409448 -0.364173 4.409448 -0.701680
+ L 0 0.053333 5.511811 -0.364173 5.511811 -0.701680
+ END
+TURNOUT N "Tomix Fine Track Deck Grider Bridge 5.51 140mm 3028"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ S 0 0 0.000000 0.000000 5.511811 0.000000
+ F 11579568 0.000000 4
+ 0.000000 0.364173 0
+ 0.300000 0.364173 0
+ 0.300000 0.701680 0
+ 0.000000 0.701680 0
+ F 11579568 0.000000 4
+ 5.211811 0.364173 0
+ 5.511811 0.364173 0
+ 5.511811 0.701680 0
+ 5.211811 0.701680 0
+ END
+TURNOUT N "Tomix Fine Track Deck Grider Bridge(DK Green) 5.51 140mm 3241"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ S 0 0 0.000000 0.000000 5.511811 0.000000
+ F 11579568 0.000000 4
+ 0.000000 0.364173 0
+ 0.300000 0.364173 0
+ 0.300000 0.701680 0
+ 0.000000 0.701680 0
+ F 11579568 0.000000 4
+ 5.211811 0.364173 0
+ 5.511811 0.364173 0
+ 5.511811 0.701680 0
+ 5.211811 0.701680 0
+ END
+
+SUBCONTENTS Tomix N-Scale Fine Track - Turn Table
+TURNOUT N "Tomix Fine Track Turn Table 8.34 212mm 1631"
+# TT was designed with 212mm bridge, outside dia. is approx., 15 degree spacing
+ P "1" 1 2 3
+ P "2" 4 5 6
+ P "3" 7 8 9
+ P "4" 10 11 12
+ P "5" 13 14 15
+ P "6" 16 17 18
+ P "7" 19 20 21
+ P "8" 22 23 24
+ P "9" 25 26 27
+ P "10" 28 29 30
+ P "11" 31 32 33
+ P "12" 34 35 36
+ E 0.000000 4.173228 0.000000
+ E 1.080111 4.031029 15.000000
+ E 2.086614 3.614121 30.000000
+ E 2.950918 2.950918 45.000000
+ E 3.614121 2.086614 60.000000
+ E 4.031029 1.080111 75.000000
+ E 4.173228 0.000000 90.000000
+ E 4.031029 -1.080111 105.000000
+ E 3.614121 -2.086614 120.000000
+ E 2.950918 -2.950918 135.000000
+ E 2.086614 -3.614121 150.000000
+ E 1.080111 -4.031029 165.000000
+ E 0.000000 -4.173228 180.000000
+ E -1.080111 -4.031029 195.000000
+ E -2.086614 -3.614121 210.000000
+ E -2.950918 -2.950918 225.000000
+ E -3.614121 -2.086614 240.000000
+ E -4.031029 -1.080111 255.000000
+ E -4.173228 0.000000 270.000000
+ E -4.031029 1.080111 285.000000
+ E -3.614121 2.086614 300.000000
+ E -2.950918 2.950918 315.000000
+ E -2.086614 3.614121 330.000000
+ E -1.080111 4.031029 345.000000
+#0/360
+ S 0 0 0.000000 4.173228 0.000000 3.676228
+ S 16777215 0 0.000000 3.676228 0.000000 -3.676228
+ S 0 0 0.000000 -3.676228 0.000000 -4.173228
+#15/195
+ S 0 0 1.080111 4.031029 0.950701 3.548066
+ S 16777215 0 0.950701 3.548066 -0.950701 -3.548066
+ S 0 0 -0.950701 -3.548066 -1.080111 -4.031029
+#30/210
+ S 0 0 2.086614 3.614121 1.836614 3.181109
+ S 16777215 0 1.836614 3.181109 -1.836614 -3.181109
+ S 0 0 -1.836614 -3.181109 -2.086614 -3.614121
+#45/225
+ S 0 0 2.950918 2.950918 2.597364 2.597364
+ S 16777215 0 2.597364 2.597364 -2.597364 -2.597364
+ S 0 0 -2.597364 -2.597364 -2.950918 -2.950918
+#60/240
+ S 0 0 3.614121 2.086614 3.181109 1.836614
+ S 16777215 0 3.181109 1.836614 -3.181109 -1.836614
+ S 0 0 -3.181109 -1.836614 -3.614121 -2.086614
+#75/255
+ S 0 0 4.031029 1.080111 3.548066 0.950701
+ S 16777215 0 3.548066 0.950701 -3.548066 -0.950701
+ S 0 0 -3.548066 -0.950701 -4.031029 -1.080111
+#90/270
+ S 0 0 4.173228 0.000000 3.676228 0.000000
+ S 16777215 0 3.676228 0.000000 -3.676228 0.000000
+ S 0 0 -3.676228 0.000000 -4.173228 0.000000
+#105/285
+ S 0 0 4.031029 -1.080111 3.548066 -0.950701
+ S 16777215 0 3.548066 -0.950701 -3.548066 0.950701
+ S 0 0 -3.548066 0.950701 -4.031029 1.080111
+#120/300
+ S 0 0 3.614121 -2.086614 3.181109 -1.836614
+ S 16777215 0 3.181109 -1.836614 -3.181109 1.836614
+ S 0 0 -3.181109 1.836614 -3.614121 2.086614
+#135/315
+ S 0 0 2.950918 -2.950918 2.597364 -2.597364
+ S 16777215 0 2.597364 -2.597364 -2.597364 2.597364
+ S 0 0 -2.597364 2.597364 -2.950918 2.950918
+#150/330
+ S 0 0 2.086614 -3.614121 1.836614 -3.181109
+ S 16777215 0 1.836614 -3.181109 -1.836614 3.181109
+ S 0 0 -1.836614 3.181109 -2.086614 3.614121
+#165/345
+ S 0 0 1.080111 -4.031029 0.950701 -3.548066
+ S 16777215 0 0.950701 -3.548066 -0.950701 3.548066
+ S 0 0 -0.950701 3.548066 -1.080111 4.031029
+
+ A 11579568 0.053333 4.173228 0.000000 0.000000 0.000000 360.000000
+ A 11579568 0.053333 3.673228 0.000000 0.000000 0.000000 360.000000
+ END
+
+SUBCONTENTS Tomix N-Scale Fine Track - Signal Track
+TURNOUT N "Tomix Fine Track 70mm 5 color 5560"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.755906 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.755906 0.000000
+ L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
+ F 11579568 0.000000 4
+ 1.002953 0.364173 0
+ 1.752953 0.364173 0
+ 1.752953 0.864173 0
+ 1.002953 0.864173 0
+ END
+TURNOUT N "Tomix Fine Track 70mm 4 color(Yel/Grn) 5561"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.755906 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.755906 0.000000
+ L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
+ F 11579568 0.000000 4
+ 1.002953 0.364173 0
+ 1.752953 0.364173 0
+ 1.752953 0.864173 0
+ 1.002953 0.864173 0
+ END
+TURNOUT N "Tomix Fine Track 70mm 4 color(Yel/Yel) 5562"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.755906 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.755906 0.000000
+ L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
+ F 11579568 0.000000 4
+ 1.002953 0.364173 0
+ 1.752953 0.364173 0
+ 1.752953 0.864173 0
+ 1.002953 0.864173 0
+ END
+TURNOUT N "Tomix Fine Track 70mm 3 color 5564"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.755906 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.755906 0.000000
+ L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
+ F 11579568 0.000000 4
+ 1.002953 0.364173 0
+ 1.752953 0.364173 0
+ 1.752953 0.864173 0
+ 1.002953 0.864173 0
+ END
+TURNOUT N "Tomix Fine Track 70mm 2 color 5565"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.755906 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.755906 0.000000
+ L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
+ F 11579568 0.000000 4
+ 1.002953 0.364173 0
+ 1.752953 0.364173 0
+ 1.752953 0.864173 0
+ 1.002953 0.864173 0
+ END
+
+SUBCONTENTS Tomix N-Scale Fine Track - Misc Track
+TURNOUT N "Tomix Fine Track Re-Railer 140mm 1523"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 5.511811 0.000000
+ L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
+ L 0 0.053333 1.837270 0.364173 3.674541 0.364173
+ L 0 0.053333 3.674541 0.364173 3.674541 -0.364173
+ L 0 0.053333 3.674541 -0.364173 1.837270 -0.364173
+ L 0 0.053333 1.837270 -0.364173 1.837270 0.364173
+ END
+TURNOUT N "Tomix Fine Track PC Re-Railer 140mm 1524"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 5.511811 0.000000
+ L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
+ L 0 0.053333 1.837270 0.364173 3.674541 0.364173
+ L 0 0.053333 3.674541 0.364173 3.674541 -0.364173
+ L 0 0.053333 3.674541 -0.364173 1.837270 -0.364173
+ L 0 0.053333 1.837270 -0.364173 1.837270 0.364173
+ END
+TURNOUT N "Tomix Fine Track Mag Uncoupler 70mm 1521"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.755906 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 2.755906 0.000000
+ L 11579568 0.053333 0.000000 0.3641730 2.755906 0.3641730
+ L 11579568 0.053333 0.000000 -0.3641730 2.755906 -0.3641730
+ L 0 0.053333 0.253333 0.133560 2.280000 0.133560
+ L 0 0.053333 2.280000 0.133560 2.280000 -0.146440
+ L 0 0.053333 2.280000 -0.146440 0.253333 -0.146440
+ L 0 0.053333 0.253333 -0.146440 0.253333 0.133560
+ END
+TURNOUT N "Tomix Fine Track W/Insul. Gap 70mm 1671"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.755906 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 2.755906 0.000000
+ L 11579568 0.053333 0.000000 0.3641730 2.755906 0.3641730
+ L 11579568 0.053333 0.000000 -0.3641730 2.755906 -0.3641730
+ END
+TURNOUT N "Tomix Fine Track Adjustable 70-90mm 1522"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.755906 0.000000 90.000000
+ X adjustable 2.755906 3.543307
+ S 0 0 0.000000 0.000000 2.755906 0.000000
+ L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
+ END
+TURNOUT N "Tomix Fine Track PC Adjustable 70-90mm 1526"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.755906 0.000000 90.000000
+ X adjustable 2.755906 3.543307
+ S 0 0 0.000000 0.000000 2.755906 0.000000
+ L 11579568 0.053333 0.000000 0.364173 2.755906 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 2.755906 -0.364173
+ END
+TURNOUT N "Tomix Fine Track Wheel Cleaner Rail 140mm 6414"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 5.511811 0.000000
+ L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
+ F 11579568 0.000000 4
+ 1.456693 0.364173 0
+ 4.055118 0.364173 0
+ 4.055118 1.092519 0
+ 1.456693 1.092519 0
+ END
+TURNOUT N "Tomix Fine Track PC Wheel Cleaner Rail 140mm 6415"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.511811 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 5.511811 0.000000
+ L 11579568 0.053333 0.000000 0.364173 5.511811 0.364173
+ L 11579568 0.053333 0.000000 -0.364173 5.511811 -0.364173
+ F 11579568 0.000000 4
+ 1.456693 0.364173 0
+ 4.055118 0.364173 0
+ 4.055118 1.092519 0
+ 1.456693 1.092519 0
+ END
+
+SUBCONTENTS Tomix N-Scale Fine Track - Wide Tram
+TURNOUT N "Tomix Fine Track Wide Tram Straight 18.5mm S18.5-WT/1798"
+P "Normal" 1
+E 0.000000 0.000000 270.000000
+E 0.728346 0.000000 90.000000
+S 0 0.000000 0.000000 0.000000 0.728346 0.000000
+L 0 0.039370 0.000000 -0.728346 0.728346 -0.728346
+L 0 0.039370 0.000000 0.728346 0.728346 0.728346
+END
+TURNOUT N "Tomix Fine Track Wide Tram Straight 37mm S37-WT/1798"
+P "Normal" 1
+E 0.000000 0.000000 270.000000
+E 1.456693 0.000000 90.000000
+S 0 0.000000 0.000000 0.000000 1.456693 0.000000
+L 0 0.039370 0.000000 -0.728346 1.456693 -0.728346
+L 0 0.039370 0.000000 0.728346 1.456693 0.728346
+END
+TURNOUT N "Tomix Fine Track Wide Tram Straight(Sensor) 37mm S37-WT-SE/5568"
+P "Normal" 1
+E 0.000000 0.000000 270.000000
+E 1.456693 0.000000 90.000000
+S 0 0.000000 0.000000 0.000000 1.456693 0.000000
+L 0 0.039370 0.000000 -0.728346 1.456693 -0.728346
+L 0 0.039370 0.000000 0.728346 1.456693 0.728346
+END
+TURNOUT N "Tomix Fine Track Wide Tram Straight 47.5mm S47.5-WT/1798"
+P "Normal" 1
+E 0.000000 0.000000 270.000000
+E 1.870079 0.000000 90.000000
+S 0 0.000000 0.000000 0.000000 1.870079 0.000000
+L 0 0.039370 0.000000 -0.728346 1.870077 -0.728346
+L 0 0.039370 0.000000 0.728346 1.870079 0.728346
+END
+TURNOUT N "Tomix Fine Track Wide Tram Straight 70mm S70-WT/1792/1790"
+P "Normal" 1
+E 0.000000 0.000000 270.000000
+E 2.755906 0.000000 90.000000
+S 0 0.000000 0.000000 0.000000 2.755906 0.000000
+L 0 0.039370 0.000000 -0.728346 2.755904 -0.728346
+L 0 0.039370 0.000000 0.728346 2.755906 0.728346
+END
+TURNOUT N "Tomix Fine Track Wide Tram Straight 140mm S140-WT/1793/1791"
+P "Normal" 1
+E 0.000000 0.000000 270.000000
+E 5.511811 0.000000 90.000000
+S 0 0.000000 0.000000 0.000000 5.511811 0.000000
+L 0 0.039370 0.000000 -0.728346 5.511809 -0.728346
+L 0 0.039370 0.000000 0.728346 5.511811 0.728346
+END
+TURNOUT N "Tomix Fine Track Wide Tram 30d Curve 103mm C103-30-WT/1795"
+P "Normal" 1
+E 0.000000 0.000000 270.000000
+E 2.027558 0.543282 60.000000
+C 0 0.000000 4.055118 0.000000 4.055118 150.000000 30.000000
+A3 0 0.039370 4.783465 0.000000 4.055118 0 150.000000 30.000000
+A3 0 0.039370 3.326772 0.000000 4.055118 0 150.000000 30.000000
+END
+TURNOUT N "Tomix Fine Track Wide Tram 60d Curve 103mm C103-60-WT/1795"
+P "Normal" 1
+E 0.000000 0.000000 270.000000
+E 3.511834 2.027556 30.000000
+C 0 0.000000 4.055118 0.000000 4.055118 120.000000 60.000000
+A3 0 0.039370 4.783465 0.000000 4.055118 0 120.000000 60.000000
+A3 0 0.039370 3.326772 0.000000 4.055118 0 120.000000 60.000000
+END
+TURNOUT N "Tomix Fine Track Wide Tram 30d Curve 140mm C140-30-WT/1796"
+P "Normal" 1
+E 0.000000 0.000000 270.000000
+E 2.755903 0.738441 60.000000
+C 0 0.000000 5.511811 0.000000 5.511811 150.000000 30.000000
+A3 0 0.039370 6.240157 0.000000 5.511811 0 150.000000 30.000000
+A3 0 0.039370 4.783465 0.000000 5.511811 0 150.000000 30.000000
+END
+TURNOUT N "Tomix Fine Track Wide Tram 60d Curve 140mm C140-60-WT/1796"
+P "Normal" 1
+E 0.000000 0.000000 270.000000
+E 4.773366 2.755901 30.000000
+C 0 0.000000 5.511811 0.000000 5.511811 120.000000 60.000000
+A3 0 0.039370 6.240157 0.000000 5.511811 0 120.000000 60.000000
+A3 0 0.039370 4.783465 0.000000 5.511811 0 120.000000 60.000000
+END
+TURNOUT N "Tomix Fine Track Wide Tram 30d Curve 177mm C177-30-WT/1799"
+P "Normal" 1
+E 0.000000 0.000000 270.000000
+E 3.484249 0.933601 60.000000
+C 0 0.000000 6.968504 0.000000 6.968504 150.000000 30.000000
+A3 0 0.039370 7.696850 0.000000 6.968504 0 150.000000 30.000000
+A3 0 0.039370 6.240157 0.000000 6.968504 0 150.000000 30.000000
+END
+TURNOUT N "Tomix Fine Track Wide Tram 60d Curve 177mm C177-60-WT/1799"
+P "Normal" 1
+E 0.000000 0.000000 270.000000
+E 6.034898 3.484247 30.000000
+C 0 0.000000 6.968504 0.000000 6.968504 120.000000 60.000000
+A3 0 0.039370 7.696850 0.000000 6.968504 0 120.000000 60.000000
+A3 0 0.039370 6.240157 0.000000 6.968504 0 120.000000 60.000000
+END
+TURNOUT N "Tomix Fine Track Wide Tram 90d Crossing 37mm X37-90-WT/1799"
+P "Normal" 1 0 2
+E 0.000000 0.000000 270.000000
+E 1.456693 0.000000 90.000000
+E 0.728346 0.728346 360.000000
+E 0.728346 -0.728346 180.000000
+S 0 0.000000 0.000000 0.000000 1.456693 0.000000
+S 0 0.000000 0.728346 0.728346 0.728346 -0.728346
+END
diff --git a/app/lib/params/N-atlasn55.xtp b/app/lib/params/N-atlasn55.xtp
index 34baeec..810953b 100644
--- a/app/lib/params/N-atlasn55.xtp
+++ b/app/lib/params/N-atlasn55.xtp
@@ -1,5 +1,5 @@
-CONTENTS Atlas N-Scale Code55
-SUBCONTENTS Atlas N-Scale Code55 - Crossings
+CONTENTS Atlas N Scale Code 55
+SUBCONTENTS Atlas N-Scale Code 55 - Crossings
# 11 1/4 Degree Crossing Design by Geoffrey Dagley Modified by D.Ward
TURNOUT N "Atlas 11 1/4 Degree Crossing 2040"
P "P0" 2 0 1
@@ -70,7 +70,7 @@ TURNOUT N "Atlas 90 Degree Long Crossing 2095"
S 0 0.000000 0.000000 0.000000 6.000000 0.000000
S 0 0.000000 3.000000 3.000000 3.000000 -3.000000
END
-SUBCONTENTS Atlas N-Scale Code55 - Switches
+SUBCONTENTS Atlas N-Scale Code 55 - Switches
# #5 LH Switch Design by Geoffrey Dagley
TURNOUT N "Atlas #5 LH Switch 2050"
U "Regular Turnout" "Geoffrey Dagley" "Atlas" "#5 LH Switch" "2050" "#5 RH Switch" "2051" 6.000000 11.250000 0.625000 6.000000 0.000000 0.000000 0
@@ -136,7 +136,7 @@ TURNOUT N "Atlas #2.5 Wye 2056"
C 0 0.000000 28.941665 0.507336 -28.941665 0.000076 11.250152
S 0 0.000000 6.153761 -0.556120 6.500000 -0.625000
END
-# #3.5 WYE Switch Design by Dwayne Ward
+# #3.5 WYE Switch Design by Dwayne Ward
TURNOUT N "Atlas #3.5 WYE Switch 2057"
P "Left" 1 2 3
P "Right" 1 4 5
@@ -200,7 +200,7 @@ TURNOUT N "Atlas 21.25/15 RH Switch 2059"
S 0 0.000000 7.709071 -1.462954 8.036352 -1.598530
END
-SUBCONTENTS Atlas N-Scale Code55 - Misc Track
+SUBCONTENTS Atlas N-Scale Code 55 - Misc Track
TURNOUT N "Atlas 6in Rerailer 2001"
P "P0" 1
E 0.000000 0.000000 270.000000
@@ -223,18 +223,18 @@ TURNOUT N "Atlas 6in Rerailer 2001"
5.000000 -0.500000 0
L 0 0.030000 1.000000 0.500000 1.500000 0.200000
L 0 0.030000 4.500000 0.200000 5.000000 0.500000
-
+
L 0 0.030000 1.000000 0.000000 1.500000 0.150000
L 0 0.030000 5.000000 0.000000 4.500000 0.150000
- L 0 0.030000 5.000000 0.000000 4.500000 -0.150000
+ L 0 0.030000 5.000000 0.000000 4.500000 -0.150000
L 0 0.030000 1.000000 0.000000 1.500000 -0.150000
-
+
L 0 0.030000 1.000000 -0.500000 1.500000 -0.200000
L 0 0.030000 4.500000 -0.200000 5.000000 -0.500000
END
-SUBCONTENTS Atlas N-Scale Code55 - Straight
+SUBCONTENTS Atlas N-Scale Code 55 - Straight
# 3/4in Straight Design by Geoffrey Dagley
TURNOUT N "Atlas 3/4in Straight 2008"
P "P0" 1
@@ -284,7 +284,7 @@ TURNOUT N "Atlas 6in Straight 2002"
E 6.000000 0.000000 90.000000
S 0 0.000000 0.000000 0.000000 6.000000 0.000000
END
-SUBCONTENTS Atlas N-Scale Code55 - Curved
+SUBCONTENTS Atlas N-Scale Code 55 - Curved
# 10R full section Design by Geoffrey Dagley Modified by D.Ward
TURNOUT N "Atlas 10R full section 2010"
P "P0" 1
@@ -440,7 +440,7 @@ TURNOUT N "Atlas 71R half section 2031"
C 0 0.000000 71.000000 0.000000 -71.000000 0.000000 8.100000
END
-SUBCONTENTS Atlas N-Scale Code55 - Bridges
+SUBCONTENTS Atlas N-Scale Code 55 - Bridges
TURNOUT N "Atlas Through Truss Bridge 10in 2070/71"
P "Normal" 1
E 0.000000 0.000000 270.000000
@@ -477,7 +477,7 @@ TURNOUT N "Atlas Single-Track Thru-Girder Bridge 6in 2080"
L 11579568 0.050000 4.125000 0.625000 4.125000 0.375000
L 11579568 0.050000 4.687500 0.625000 4.687500 0.375000
L 11579568 0.050000 5.250000 0.625000 5.250000 0.375000
-
+
L 11579568 0.100000 0.500000 -0.625000 5.500000 -0.625000
L 11579568 0.050000 0.750000 -0.625000 0.750000 -0.375000
L 11579568 0.050000 1.312500 -0.625000 1.312500 -0.375000
@@ -490,7 +490,7 @@ TURNOUT N "Atlas Single-Track Thru-Girder Bridge 6in 2080"
L 11579568 0.050000 5.250000 -0.625000 5.250000 -0.375000
END
TURNOUT N "Atlas Double-Track Thru-Girder Bridge 6in 2081"
- P "P0" 1
+ P "P0" 1 0 2
E 0.000000 1.250000 270.000000
E 6.000000 1.250000 90.000000
E 0.000000 0.000000 270.000000
@@ -543,4 +543,3 @@ TURNOUT N "Atlas Double-Track Thru-Girder Bridge 6in 2081"
L 11579568 0.050000 4.687500 -0.625000 4.687500 -0.375000
L 11579568 0.050000 5.250000 -0.625000 5.250000 -0.375000
END
-
diff --git a/app/lib/params/N-atlasn80.xtp b/app/lib/params/N-atlasn80.xtp
new file mode 100644
index 0000000..695703a
--- /dev/null
+++ b/app/lib/params/N-atlasn80.xtp
@@ -0,0 +1,845 @@
+CONTENTS Atlas N Scale Track Code 80
+SUBCONTENTS Atlas N-Scale Track - Straight
+TURNOUT N "Atlas 30in Flex 2500"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 29.500000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 29.500000 0.000000
+END
+TURNOUT N "Atlas 5in Straight 2501"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.881890 0.000000 90.000000
+ S 0 0 0.000000 0.000000 4.881890 0.000000
+END
+TURNOUT N "Atlas 2 1/2in Straight 2509A"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.440945 0.000000 90.000000
+ S 0 0 0.000000 0.000000 2.440945 0.000000
+END
+TURNOUT N "Atlas 1 1/4in Straight 2509B"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.220472 0.000000 90.000000
+ S 0 0 0.000000 0.000000 1.220472 0.000000
+END
+TURNOUT N "Atlas 5/8in Straight 2509C"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 0.610236 0.000000 90.000000
+ S 0 0 0.000000 0.000000 0.610236 0.000000
+END
+TURNOUT N "Atlas Custom Adj. Straight CAS"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 0.250000 0.000000 90.000000
+ X adjustable 0.250000 30.000000
+ S 0 0 0.000000 0.000000 0.250000 0.000000
+END
+
+SUBCONTENTS Atlas N-Scale Track - Curved
+TURNOUT N "Atlas 9 3/4R full section 2510"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.881890 -1.308098 120.000000
+ C 0 0 9.763780 0.000000 -9.763780 0.000000 30.000000
+END
+TURNOUT N "Atlas 9 3/4R half section 2511"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.527052 -0.332693 105.000000
+ C 0 0 9.763780 0.000000 -9.763780 0.000000 15.000000
+END
+TURNOUT N "Atlas 11R full section 2520"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.551181 1.487434 120.000000
+ C 0 0 11.102362 0.000000 -11.102362 0.000000 30.000000
+END
+TURNOUT N "Atlas 11R half section 2521"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.873503 -0.378304 105.000000
+ C 0 0 11.102362 0.000000 -11.102362 0.000000 15.000000
+END
+TURNOUT N "Atlas 19R section 2526"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.901258 -0.645263 105.000000
+ C 0 0 18.937008 0.000000 -18.937008 0.000000 15.000000
+END
+
+SUBCONTENTS Atlas N-Scale Track - Bumper / Rerailer
+TURNOUT N "Atlas Bumper Track 2536"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0.000000 0.000000 0.000000 2.440945 0.000000
+ F3 0 0.000000 4
+ 1.630000 0.315000 0
+ 2.440945 0.315000 0
+ 2.440945 -0.315000 0
+ 1.630000 -0.315000 0
+END
+TURNOUT N "Atlas Rerailer Track 2532"
+ P "NORMAL" 1
+ E 0.000000 0.000000 270.000000
+ E 4.881890 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 4.881890 0.000000
+ F4 14737632 0.000000 4 0
+ 1.000000 0.500000 0
+ 3.881890 0.500000 0
+ 3.256890 0.225000 0
+ 1.625000 0.225000 0
+ F4 14737632 0.000000 6 0
+ 1.312500 0.000000 0
+ 1.625000 0.125000 0
+ 3.256890 0.125000 0
+ 3.569390 0.000000 0
+ 3.256890 -0.125000 0
+ 1.625000 -0.125000 0
+ F4 14737632 0.000000 4 0
+ 1.000000 -0.500000 0
+ 3.881890 -0.500000 0
+ 3.256890 -0.225000 0
+ 1.625000 -0.225000 0
+ L3 0 0.020833 1.000000 0.500000 0 1.000000 -0.500000 0
+ L3 0 0.020833 1.000000 0.500000 0 3.881890 0.500000 0
+ L3 0 0.020833 1.000000 0.500000 0 1.625000 0.225000 0
+ L3 0 0.020833 3.256890 0.225000 0 3.881890 0.500000 0
+ L3 0 0.020833 1.625000 0.225000 0 3.256890 0.225000 0
+ L3 0 0.020833 1.625000 0.125000 0 3.256890 0.125000 0
+ L3 0 0.020833 1.312500 0.000000 0 1.625000 0.125000 0
+ L3 0 0.020833 3.256890 0.125000 0 3.569390 0.000000 0
+ L3 0 0.020833 3.256890 -0.125000 0 3.569390 0.000000 0
+ L3 0 0.020833 1.312500 0.000000 0 1.625000 -0.125000 0
+ L3 0 0.020833 1.625000 -0.125000 0 3.256890 -0.125000 0
+ L3 0 0.020833 1.625000 -0.225000 0 3.256890 -0.225000 0
+ L3 0 0.020833 3.256890 -0.225000 0 3.881890 -0.500000 0
+ L3 0 0.020833 1.000000 -0.500000 0 1.625000 -0.225000 0
+ L3 0 0.020833 1.000000 -0.500000 0 3.881890 -0.500000 0
+ L3 0 0.020833 3.881890 0.500000 0 3.881890 -0.500000 0
+END
+
+SUBCONTENTS Atlas N-Scale Track - Bridges
+TURNOUT N "Atlas Warren Truss Bridge 2546"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.881890 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 4.881890 0.000000
+ L3 0 0.020833 0.000000 0.750000 0 0.000000 -0.750000 0
+ L3 0 0.020833 0.000000 0.750000 0 4.881890 0.750000 0
+ L3 0 0.020833 0.000000 0.650000 0 4.881890 0.650000 0
+ L3 0 0.020833 0.750000 0.650000 0 0.750000 0.750000 0
+ L3 0 0.020833 4.131890 0.650000 0 4.131890 0.750000 0
+ L3 0 0.020833 4.131890 -0.650000 0 4.131890 -0.750000 0
+ L3 0 0.020833 0.750000 -0.650000 0 0.750000 -0.750000 0
+ L3 0 0.020833 0.000000 -0.650000 0 4.881890 -0.650000 0
+ L3 0 0.020833 0.000000 -0.750000 0 4.881890 -0.750000 0
+ L3 0 0.020833 4.881890 0.750000 0 4.881890 -0.750000 0
+END
+TURNOUT N "Atlas Deck Truss Bridge 2547"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.881890 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 4.881890 0.000000
+ L3 0 0.020833 0.000000 0.365000 0 0.000000 -0.365000 0
+ L3 0 0.020833 0.000000 0.365000 0 4.881890 0.365000 0
+ L3 0 0.020833 0.000000 0.315000 0 4.881890 0.315000 0
+ L3 0 0.020833 0.000000 -0.315000 0 4.881890 -0.315000 0
+ L3 0 0.020833 0.000000 -0.365000 0 4.881890 -0.365000 0
+ L3 0 0.020833 4.881890 0.365000 0 4.881890 -0.365000 0
+END
+TURNOUT N "Atlas Plate Girder Bridge 2548"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.881890 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 4.881890 0.000000
+ L3 0 0.020833 0.000000 0.750000 0 0.000000 -0.750000 0
+ L3 0 0.020833 0.000000 0.750000 0 4.881890 0.750000 0
+ L3 0 0.020833 0.000000 0.650000 0 4.881890 0.650000 0
+ L3 0 0.020833 0.000000 -0.650000 0 4.881890 -0.650000 0
+ L3 0 0.020833 0.000000 -0.750000 0 4.881890 -0.750000 0
+ L3 0 0.020833 4.881890 0.750000 0 4.881890 -0.750000 0
+END
+TURNOUT N "Atlas Through Truss Bridge 10in 2570/71"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 10.000000 0.000000
+ L 0 0.053333 0.000000 0.84375 10.000000 0.84375
+ L 0 0.053333 0.000000 -0.84375 10.000000 -0.84375
+ L 0 0.053333 1.625000 -0.84375 1.625000 0.84375
+ L 0 0.053333 1.625000 -0.84375 3.312500 0.84375
+ L 0 0.053333 3.312500 -0.84375 1.625000 0.84375
+ L 0 0.053333 3.312500 -0.84375 3.312500 0.84375
+ L 0 0.053333 3.312500 -0.84375 5.000000 0.84375
+ L 0 0.053333 5.000000 -0.84375 3.312500 0.84375
+ L 0 0.053333 5.000000 -0.84375 5.000000 0.84375
+ L 0 0.053333 5.000000 -0.84375 6.687500 0.84375
+ L 0 0.053333 6.687500 -0.84375 5.000000 0.84375
+ L 0 0.053333 6.687500 -0.84375 6.687500 0.84375
+ L 0 0.053333 6.687500 -0.84375 8.375000 0.84375
+ L 0 0.053333 8.375000 -0.84375 6.687500 0.84375
+ L 0 0.053333 8.375000 -0.84375 8.375000 0.84375
+END
+
+SUBCONTENTS Atlas N-Scale Track - Crossings
+TURNOUT N "Atlas 90 Degree Crossing 2569"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 4.881890 0.000000 90.000000
+ E 2.440945 2.440945 0.000000
+ E 2.440945 -2.440945 180.000000
+ S 0 0 0.000000 0.000000 4.881890 0.000000
+ S 0 0 2.440945 2.440945 2.440945 -2.440945
+END
+TURNOUT N "Atlas 60 Degree Crossing 2568"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 3.818898 0.000000 90.000000
+ E 0.954721 1.653629 330.000000
+ E 2.864177 -1.653629 150.000000
+ S 0 0.000000 0.000000 0.000000 3.818898 0.000000
+ S 0 0.000000 0.954721 1.653629 2.864177 -1.653629
+END
+TURNOUT N "Atlas 45 Degree Crossing 2567"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 4.000000 0.000000 90.000000
+ E 0.585784 1.414211 315.000000
+ E 3.414216 -1.414211 135.000000
+ S 0 0.000000 0.000000 0.000000 4.000000 0.000000
+ S 0 0.000000 0.585784 1.414211 3.414216 -1.414211
+END
+TURNOUT N "Atlas 30 Degree Crossing 2566"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 2.549213 0.000000 90.000000
+ E 0.170764 0.637301 300.000000
+ E 2.378449 -0.637301 120.000000
+ S 0 0.000000 0.000000 0.000000 2.549213 0.000000
+ S 0 0.000000 0.170764 0.637301 2.378449 -0.637301
+END
+TURNOUT N "Atlas 20 Degree Crossing 2565"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 4.901575 0.000000 90.000000
+ E 0.147799 0.838215 290.000000
+ E 4.753776 -0.838215 110.000000
+ S 0 0.000000 0.000000 0.000000 4.901575 0.000000
+ S 0 0.000000 0.147799 0.838215 4.753776 -0.838215
+END
+TURNOUT N "Atlas 15 Degree Crossover 2564"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 5.039370 0.000000 90.000000
+ E 0.085855 0.652139 285.000000
+ E 4.953515 -0.652139 105.000000
+ S 0 0.000000 0.000000 0.000000 5.039370 0.000000
+ S 0 0.000000 0.085855 0.652139 4.953515 -0.652139
+END
+
+SUBCONTENTS Atlas N-Scale Track - Custom (Motorless) Switches
+TURNOUT N "Atlas Custom Std #4 LH Switch 2750"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 4.881890 0.000000 90.000000
+ E 4.881890 0.649606 75.000000
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ S 0 0.000000 0.354300 0.000000 4.881890 0.000000
+ C 0 0.000000 -15.975786 0.354321 15.975786 165.000000 15.000000
+ S 0 0.000000 4.489175 0.544372 4.881890 0.649606
+END
+TURNOUT N "Atlas Custom Std #4 RH Switch 2751"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 4.881890 0.000000 90.000000
+ E 4.881890 -0.649606 105.000000
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ S 0 0.000000 0.354300 0.000000 4.881890 0.000000
+ C 0 0.000000 15.975786 0.354236 -15.975786 0.000000 15.000000
+ S 0 0.000000 4.489175 -0.544372 4.881890 -0.649606
+END
+TURNOUT N "Atlas Custom #6 LH Switch 2752"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 6.102362 0.000000 90.000000
+ E 6.102362 0.649606 80.472717
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ S 0 0.000000 0.354300 0.000000 6.102362 0.000000
+ C 0 0.000000 -22.530482 0.354330 22.530482 170.472717 9.527283
+ S 0 0.000000 4.083539 0.310775 6.102362 0.649606
+END
+TURNOUT N "Atlas Custom #6 RH Switch 2753"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 6.102362 0.000000 90.000000
+ E 6.102362 -0.649606 99.527283
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ S 0 0.000000 0.354300 0.000000 6.102362 0.000000
+ C 0 0.000000 22.530482 0.354210 -22.530482 0.000000 9.527283
+ S 0 0.000000 4.083539 -0.310775 6.102362 -0.649606
+END
+TURNOUT N "Atlas Custom #8 LH Switch 2755"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 7.322835 0.000000 90.000000
+ E 7.322835 0.625000 82.847331
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ S 0 0.000000 0.354300 0.000000 7.322835 0.000000
+ C 0 0.000000 -31.810273 0.354342 31.810273 172.847331 7.152669
+ S 0 0.000000 4.315193 0.247561 7.322835 0.625000
+END
+TURNOUT N "Atlas Custom #8 RH Switch 2756"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 7.322835 0.000000 90.000000
+ E 7.322835 -0.625000 97.152669
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ S 0 0.000000 0.354300 0.000000 7.322835 0.000000
+ C 0 0.000000 31.810273 0.354173 -31.810273 0.000000 7.152669
+ S 0 0.000000 4.315193 -0.247561 7.322835 -0.625000
+END
+
+SUBCONTENTS Atlas N-Scale Track - Standard Remote Switches
+TURNOUT N "Atlas Remote Std #4 LH Switch 2700"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 4.881890 0.000000 90.000000
+ E 4.881890 0.649606 75.000000
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ S 0 0.000000 0.354300 0.000000 4.881890 0.000000
+ C 0 0.000000 -15.975786 0.354321 15.975786 165.000000 15.000000
+ S 0 0.000000 4.489175 0.544372 4.881890 0.649606
+ L3 0 0.020833 0.885417 -0.300000 0 4.479167 -0.300000 0
+ L3 0 0.020833 0.885417 -0.300000 0 0.885417 -0.534375 0
+ L3 0 0.020833 4.479167 -0.300000 0 4.479167 -0.534375 0
+ L3 0 0.020833 1.885417 -0.503125 0 3.479167 -0.503125 0
+ L3 0 0.020833 3.479167 -0.768750 0 1.885417 -0.768750 0
+ L3 0 0.020833 0.885417 -0.534375 0 1.885417 -0.768750 0
+ L3 0 0.020833 3.479167 -0.768750 0 4.479167 -0.534375 0
+ L3 0 0.020833 1.885417 -0.768750 0 1.885417 -0.503125 0
+ L3 0 0.020833 3.479167 -0.768750 0 3.479167 -0.503125 0
+ L3 0 0.020833 1.135417 -0.300000 0 1.135417 -0.581250 0
+ L3 0 0.020833 4.229167 -0.300000 0 4.229167 -0.581250 0
+ A3 0 0.010417 0.062500 1.010417 -0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 1.010417 -0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.062500 4.354167 -0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 4.354167 -0.438021 0 0.000000 360.000000
+END
+TURNOUT N "Atlas Remote Std #4 RH Switch 2701"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 4.881890 0.000000 90.000000
+ E 4.881890 -0.649606 105.000000
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ S 0 0.000000 0.354300 0.000000 4.881890 0.000000
+ C 0 0.000000 15.975786 0.354236 -15.975786 0.000000 15.000000
+ S 0 0.000000 4.489175 -0.544372 4.881890 -0.649606
+ L3 0 0.020833 0.885417 0.300000 0 4.479167 0.300000 0
+ L3 0 0.020833 0.885417 0.300000 0 0.885417 0.534375 0
+ L3 0 0.020833 4.479167 0.300000 0 4.479167 0.534375 0
+ L3 0 0.020833 1.885417 0.503125 0 3.479167 0.503125 0
+ L3 0 0.020833 3.479167 0.768750 0 1.885417 0.768750 0
+ L3 0 0.020833 0.885417 0.534375 0 1.885417 0.768750 0
+ L3 0 0.020833 3.479167 0.768750 0 4.479167 0.534375 0
+ L3 0 0.020833 1.885417 0.768750 0 1.885417 0.503125 0
+ L3 0 0.020833 3.479167 0.768750 0 3.479167 0.503125 0
+ L3 0 0.020833 1.135417 0.300000 0 1.135417 0.581250 0
+ L3 0 0.020833 4.229167 0.300000 0 4.229167 0.581250 0
+ A3 0 0.010417 0.062500 1.010417 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 1.010417 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.062500 4.354167 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 4.354167 0.438021 0 0.000000 360.000000
+END
+TURNOUT N "Atlas Remote #6 LH Switch 2704"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 6.102362 0.000000 90.000000
+ E 6.102362 0.649606 80.472717
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ S 0 0.000000 0.354300 0.000000 6.102362 0.000000
+ C 0 0.000000 -22.530482 0.354330 22.530482 170.472717 9.527283
+ S 0 0.000000 4.083539 0.310775 6.102362 0.649606
+ L3 0 0.020833 0.885417 -0.300000 0 4.479167 -0.300000 0
+ L3 0 0.020833 0.885417 -0.300000 0 0.885417 -0.534375 0
+ L3 0 0.020833 4.479167 -0.300000 0 4.479167 -0.534375 0
+ L3 0 0.020833 1.885417 -0.503125 0 3.479167 -0.503125 0
+ L3 0 0.020833 3.479167 -0.768750 0 1.885417 -0.768750 0
+ L3 0 0.020833 0.885417 -0.534375 0 1.885417 -0.768750 0
+ L3 0 0.020833 3.479167 -0.768750 0 4.479167 -0.534375 0
+ L3 0 0.020833 1.885417 -0.768750 0 1.885417 -0.503125 0
+ L3 0 0.020833 3.479167 -0.768750 0 3.479167 -0.503125 0
+ L3 0 0.020833 1.135417 -0.300000 0 1.135417 -0.581250 0
+ L3 0 0.020833 4.229167 -0.300000 0 4.229167 -0.581250 0
+ A3 0 0.010417 0.062500 1.010417 -0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 1.010417 -0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.062500 4.354167 -0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 4.354167 -0.438021 0 0.000000 360.000000
+END
+TURNOUT N "Atlas Remote #6 RH Switch 2705"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 6.102362 0.000000 90.000000
+ E 6.102362 -0.649606 99.527283
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ S 0 0.000000 0.354300 0.000000 6.102362 0.000000
+ C 0 0.000000 22.530482 0.354210 -22.530482 0.000000 9.527283
+ S 0 0.000000 4.083539 -0.310775 6.102362 -0.649606
+ L3 0 0.020833 0.885417 0.300000 0 4.479167 0.300000 0
+ L3 0 0.020833 0.885417 0.300000 0 0.885417 0.534375 0
+ L3 0 0.020833 4.479167 0.300000 0 4.479167 0.534375 0
+ L3 0 0.020833 1.885417 0.503125 0 3.479167 0.503125 0
+ L3 0 0.020833 3.479167 0.768750 0 1.885417 0.768750 0
+ L3 0 0.020833 0.885417 0.534375 0 1.885417 0.768750 0
+ L3 0 0.020833 3.479167 0.768750 0 4.479167 0.534375 0
+ L3 0 0.020833 1.885417 0.768750 0 1.885417 0.503125 0
+ L3 0 0.020833 3.479167 0.768750 0 3.479167 0.503125 0
+ L3 0 0.020833 1.135417 0.300000 0 1.135417 0.581250 0
+ L3 0 0.020833 4.229167 0.300000 0 4.229167 0.581250 0
+ A3 0 0.010417 0.062500 1.010417 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 1.010417 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.062500 4.354167 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 4.354167 0.438021 0 0.000000 360.000000
+END
+TURNOUT N "Atlas Remote #8 LH Switch 2720"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 7.322835 0.000000 90.000000
+ E 7.322835 0.625000 82.847331
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ S 0 0.000000 0.354300 0.000000 7.322835 0.000000
+ C 0 0.000000 -31.810273 0.354342 31.810273 172.847331 7.152669
+ S 0 0.000000 4.315193 0.247561 7.322835 0.625000
+ L3 0 0.020833 0.885417 -0.300000 0 4.479167 -0.300000 0
+ L3 0 0.020833 0.885417 -0.300000 0 0.885417 -0.534375 0
+ L3 0 0.020833 4.479167 -0.300000 0 4.479167 -0.534375 0
+ L3 0 0.020833 1.885417 -0.503125 0 3.479167 -0.503125 0
+ L3 0 0.020833 3.479167 -0.768750 0 1.885417 -0.768750 0
+ L3 0 0.020833 0.885417 -0.534375 0 1.885417 -0.768750 0
+ L3 0 0.020833 3.479167 -0.768750 0 4.479167 -0.534375 0
+ L3 0 0.020833 1.885417 -0.768750 0 1.885417 -0.503125 0
+ L3 0 0.020833 3.479167 -0.768750 0 3.479167 -0.503125 0
+ L3 0 0.020833 1.135417 -0.300000 0 1.135417 -0.581250 0
+ L3 0 0.020833 4.229167 -0.300000 0 4.229167 -0.581250 0
+ A3 0 0.010417 0.062500 1.010417 -0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 1.010417 -0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.062500 4.354167 -0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 4.354167 -0.438021 0 0.000000 360.000000
+END
+TURNOUT N "Atlas Remote #8 RH Switch 2721"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 7.322835 0.000000 90.000000
+ E 7.322835 -0.625000 97.152669
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ S 0 0.000000 0.354300 0.000000 7.322835 0.000000
+ C 0 0.000000 31.810273 0.354173 -31.810273 0.000000 7.152669
+ S 0 0.000000 4.315193 -0.247561 7.322835 -0.625000
+ L3 0 0.020833 0.885417 0.300000 0 4.479167 0.300000 0
+ L3 0 0.020833 0.885417 0.300000 0 0.885417 0.534375 0
+ L3 0 0.020833 4.479167 0.300000 0 4.479167 0.534375 0
+ L3 0 0.020833 1.885417 0.503125 0 3.479167 0.503125 0
+ L3 0 0.020833 3.479167 0.768750 0 1.885417 0.768750 0
+ L3 0 0.020833 0.885417 0.534375 0 1.885417 0.768750 0
+ L3 0 0.020833 3.479167 0.768750 0 4.479167 0.534375 0
+ L3 0 0.020833 1.885417 0.768750 0 1.885417 0.503125 0
+ L3 0 0.020833 3.479167 0.768750 0 3.479167 0.503125 0
+ L3 0 0.020833 1.135417 0.300000 0 1.135417 0.581250 0
+ L3 0 0.020833 4.229167 0.300000 0 4.229167 0.581250 0
+ A3 0 0.010417 0.062500 1.010417 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 1.010417 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.062500 4.354167 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 4.354167 0.438021 0 0.000000 360.000000
+END
+
+SUBCONTENTS Atlas N-Scale Track - Standard Manual Switches
+TURNOUT N "Atlas Manual Std #4 LH Switch 2702"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 4.881890 0.000000 90.000000
+ E 4.881890 0.649606 75.000000
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ S 0 0.000000 0.354300 0.000000 4.881890 0.000000
+ C 0 0.000000 -15.975786 0.354321 15.975786 165.000000 15.000000
+ S 0 0.000000 4.489175 0.544372 4.881890 0.649606
+ L3 0 0.020833 0.885417 -0.300000 0 4.479167 -0.300000 0
+ L3 0 0.020833 0.885417 -0.300000 0 0.885417 -0.534375 0
+ L3 0 0.020833 4.479167 -0.300000 0 4.479167 -0.534375 0
+ L3 0 0.020833 1.885417 -0.503125 0 3.479167 -0.503125 0
+ L3 0 0.020833 3.479167 -0.768750 0 1.885417 -0.768750 0
+ L3 0 0.020833 0.885417 -0.534375 0 1.885417 -0.768750 0
+ L3 0 0.020833 3.479167 -0.768750 0 4.479167 -0.534375 0
+ L3 0 0.020833 1.885417 -0.768750 0 1.885417 -0.503125 0
+ L3 0 0.020833 3.479167 -0.768750 0 3.479167 -0.503125 0
+ L3 0 0.020833 1.135417 -0.300000 0 1.135417 -0.581250 0
+ L3 0 0.020833 4.229167 -0.300000 0 4.229167 -0.581250 0
+ A3 0 0.010417 0.062500 1.010417 -0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 1.010417 -0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.062500 4.354167 -0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 4.354167 -0.438021 0 0.000000 360.000000
+END
+TURNOUT N "Atlas Manual Std #4 RH Switch 2703"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 4.881890 0.000000 90.000000
+ E 4.881890 -0.649606 105.000000
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ S 0 0.000000 0.354300 0.000000 4.881890 0.000000
+ C 0 0.000000 15.975786 0.354236 -15.975786 0.000000 15.000000
+ S 0 0.000000 4.489175 -0.544372 4.881890 -0.649606
+ L3 0 0.020833 0.885417 0.300000 0 4.479167 0.300000 0
+ L3 0 0.020833 0.885417 0.300000 0 0.885417 0.534375 0
+ L3 0 0.020833 4.479167 0.300000 0 4.479167 0.534375 0
+ L3 0 0.020833 1.885417 0.503125 0 3.479167 0.503125 0
+ L3 0 0.020833 3.479167 0.768750 0 1.885417 0.768750 0
+ L3 0 0.020833 0.885417 0.534375 0 1.885417 0.768750 0
+ L3 0 0.020833 3.479167 0.768750 0 4.479167 0.534375 0
+ L3 0 0.020833 1.885417 0.768750 0 1.885417 0.503125 0
+ L3 0 0.020833 3.479167 0.768750 0 3.479167 0.503125 0
+ L3 0 0.020833 1.135417 0.300000 0 1.135417 0.581250 0
+ L3 0 0.020833 4.229167 0.300000 0 4.229167 0.581250 0
+ A3 0 0.010417 0.062500 1.010417 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 1.010417 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.062500 4.354167 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 4.354167 0.438021 0 0.000000 360.000000
+END
+TURNOUT N "Atlas Manual #6 LH Switch 2706"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 6.102362 0.000000 90.000000
+ E 6.102362 0.649606 80.472717
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ S 0 0.000000 0.354300 0.000000 6.102362 0.000000
+ C 0 0.000000 -22.530482 0.354330 22.530482 170.472717 9.527283
+ S 0 0.000000 4.083539 0.310775 6.102362 0.649606
+ L3 0 0.020833 0.885417 -0.300000 0 4.479167 -0.300000 0
+ L3 0 0.020833 0.885417 -0.300000 0 0.885417 -0.534375 0
+ L3 0 0.020833 4.479167 -0.300000 0 4.479167 -0.534375 0
+ L3 0 0.020833 1.885417 -0.503125 0 3.479167 -0.503125 0
+ L3 0 0.020833 3.479167 -0.768750 0 1.885417 -0.768750 0
+ L3 0 0.020833 0.885417 -0.534375 0 1.885417 -0.768750 0
+ L3 0 0.020833 3.479167 -0.768750 0 4.479167 -0.534375 0
+ L3 0 0.020833 1.885417 -0.768750 0 1.885417 -0.503125 0
+ L3 0 0.020833 3.479167 -0.768750 0 3.479167 -0.503125 0
+ L3 0 0.020833 1.135417 -0.300000 0 1.135417 -0.581250 0
+ L3 0 0.020833 4.229167 -0.300000 0 4.229167 -0.581250 0
+ A3 0 0.010417 0.062500 1.010417 -0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 1.010417 -0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.062500 4.354167 -0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 4.354167 -0.438021 0 0.000000 360.000000
+END
+TURNOUT N "Atlas Manual #6 RH Switch 2707"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 6.102362 0.000000 90.000000
+ E 6.102362 -0.649606 99.527283
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ S 0 0.000000 0.354300 0.000000 6.102362 0.000000
+ C 0 0.000000 22.530482 0.354210 -22.530482 0.000000 9.527283
+ S 0 0.000000 4.083539 -0.310775 6.102362 -0.649606
+ L3 0 0.020833 0.885417 0.300000 0 4.479167 0.300000 0
+ L3 0 0.020833 0.885417 0.300000 0 0.885417 0.534375 0
+ L3 0 0.020833 4.479167 0.300000 0 4.479167 0.534375 0
+ L3 0 0.020833 1.885417 0.503125 0 3.479167 0.503125 0
+ L3 0 0.020833 3.479167 0.768750 0 1.885417 0.768750 0
+ L3 0 0.020833 0.885417 0.534375 0 1.885417 0.768750 0
+ L3 0 0.020833 3.479167 0.768750 0 4.479167 0.534375 0
+ L3 0 0.020833 1.885417 0.768750 0 1.885417 0.503125 0
+ L3 0 0.020833 3.479167 0.768750 0 3.479167 0.503125 0
+ L3 0 0.020833 1.135417 0.300000 0 1.135417 0.581250 0
+ L3 0 0.020833 4.229167 0.300000 0 4.229167 0.581250 0
+ A3 0 0.010417 0.062500 1.010417 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 1.010417 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.062500 4.354167 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 4.354167 0.438021 0 0.000000 360.000000
+END
+TURNOUT N "Atlas Manual #8 LH Switch 2717"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 7.322835 0.000000 90.000000
+ E 7.322835 0.625000 82.847331
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ S 0 0.000000 0.354300 0.000000 7.322835 0.000000
+ C 0 0.000000 -31.810273 0.354342 31.810273 172.847331 7.152669
+ S 0 0.000000 4.315193 0.247561 7.322835 0.625000
+ L3 0 0.020833 0.885417 -0.300000 0 4.479167 -0.300000 0
+ L3 0 0.020833 0.885417 -0.300000 0 0.885417 -0.534375 0
+ L3 0 0.020833 4.479167 -0.300000 0 4.479167 -0.534375 0
+ L3 0 0.020833 1.885417 -0.503125 0 3.479167 -0.503125 0
+ L3 0 0.020833 3.479167 -0.768750 0 1.885417 -0.768750 0
+ L3 0 0.020833 0.885417 -0.534375 0 1.885417 -0.768750 0
+ L3 0 0.020833 3.479167 -0.768750 0 4.479167 -0.534375 0
+ L3 0 0.020833 1.885417 -0.768750 0 1.885417 -0.503125 0
+ L3 0 0.020833 3.479167 -0.768750 0 3.479167 -0.503125 0
+ L3 0 0.020833 1.135417 -0.300000 0 1.135417 -0.581250 0
+ L3 0 0.020833 4.229167 -0.300000 0 4.229167 -0.581250 0
+ A3 0 0.010417 0.062500 1.010417 -0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 1.010417 -0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.062500 4.354167 -0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 4.354167 -0.438021 0 0.000000 360.000000
+END
+TURNOUT N "Atlas Manual #8 RH Switch 2718"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 7.322835 0.000000 90.000000
+ E 7.322835 -0.625000 97.152669
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ S 0 0.000000 0.354300 0.000000 7.322835 0.000000
+ C 0 0.000000 31.810273 0.354173 -31.810273 0.000000 7.152669
+ S 0 0.000000 4.315193 -0.247561 7.322835 -0.625000
+ L3 0 0.020833 0.885417 0.300000 0 4.479167 0.300000 0
+ L3 0 0.020833 0.885417 0.300000 0 0.885417 0.534375 0
+ L3 0 0.020833 4.479167 0.300000 0 4.479167 0.534375 0
+ L3 0 0.020833 1.885417 0.503125 0 3.479167 0.503125 0
+ L3 0 0.020833 3.479167 0.768750 0 1.885417 0.768750 0
+ L3 0 0.020833 0.885417 0.534375 0 1.885417 0.768750 0
+ L3 0 0.020833 3.479167 0.768750 0 4.479167 0.534375 0
+ L3 0 0.020833 1.885417 0.768750 0 1.885417 0.503125 0
+ L3 0 0.020833 3.479167 0.768750 0 3.479167 0.503125 0
+ L3 0 0.020833 1.135417 0.300000 0 1.135417 0.581250 0
+ L3 0 0.020833 4.229167 0.300000 0 4.229167 0.581250 0
+ A3 0 0.010417 0.062500 1.010417 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 1.010417 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.062500 4.354167 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 4.354167 0.438021 0 0.000000 360.000000
+END
+
+SUBCONTENTS Atlas N-Scale Track - Standard WYE Switches
+TURNOUT N "Atlas Remote Standard Wye 2708"
+ P "Left" 1 2 3
+ P "Right" 1 4 5
+ E 0.000000 0.000000 270.000000
+ E 4.881890 0.649606 75.000000
+ E 4.881890 -0.649606 105.000000
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ C 0 0.000000 -15.975786 0.354321 15.975786 165.000000 15.000000
+ S 0 0.000000 4.489175 0.544372 4.881890 0.649606
+ C 0 0.000000 15.975786 0.354236 -15.975786 0.000000 15.000000
+ S 0 0.000000 4.489175 -0.544372 4.881890 -0.649606
+ L3 0 0.020833 0.616960 0.202769 0 4.178616 0.681977 0
+ L3 0 0.020833 0.616960 0.202769 0 0.585708 0.435051 0
+ L3 0 0.020833 4.178617 0.681973 0 4.147364 0.914255 0
+ L3 0 0.020833 1.580944 0.537424 0 3.160462 0.749940 0
+ L3 0 0.020833 3.125042 1.013193 0 1.545524 0.800677 0
+ L3 0 0.020833 0.585708 0.435051 0 1.545524 0.800677 0
+ L3 0 0.020833 3.125042 1.013193 0 4.147364 0.914255 0
+ L3 0 0.020833 1.545524 0.800677 0 1.580944 0.537424 0
+ L3 0 0.020833 3.125042 1.013193 0 3.160462 0.749940 0
+ L3 0 0.020833 0.864727 0.236105 0 0.827224 0.514844 0
+ L3 0 0.020833 3.930850 0.648638 0 3.893346 0.927376 0
+ A3 0 0.010417 0.064424 0.724175 0.343321 0 352.337139 360.000000
+ A3 0 0.010417 0.049411 0.724175 0.343321 0 352.337139 360.000000
+ A3 0 0.010417 0.062500 4.038066 0.789189 0 352.337139 360.000000
+ A3 0 0.010417 0.044194 4.038066 0.789189 0 352.337139 360.000000
+END
+TURNOUT N "Atlas Manual Standard Wye 2709"
+ P "Left" 1 2 3
+ P "Right" 1 4 5
+ E 0.000000 0.000000 270.000000
+ E 4.881890 0.649606 75.000000
+ E 4.881890 -0.649606 105.000000
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ C 0 0.000000 -15.975786 0.354321 15.975786 165.000000 15.000000
+ S 0 0.000000 4.489175 0.544372 4.881890 0.649606
+ C 0 0.000000 15.975786 0.354236 -15.975786 0.000000 15.000000
+ S 0 0.000000 4.489175 -0.544372 4.881890 -0.649606
+ L3 0 0.020833 0.616960 0.202769 0 4.178616 0.681977 0
+ L3 0 0.020833 0.616960 0.202769 0 0.585708 0.435051 0
+ L3 0 0.020833 4.178617 0.681973 0 4.147364 0.914255 0
+ L3 0 0.020833 1.580944 0.537424 0 3.160462 0.749940 0
+ L3 0 0.020833 3.125042 1.013193 0 1.545524 0.800677 0
+ L3 0 0.020833 0.585708 0.435051 0 1.545524 0.800677 0
+ L3 0 0.020833 3.125042 1.013193 0 4.147364 0.914255 0
+ L3 0 0.020833 1.545524 0.800677 0 1.580944 0.537424 0
+ L3 0 0.020833 3.125042 1.013193 0 3.160462 0.749940 0
+ L3 0 0.020833 0.864727 0.236105 0 0.827224 0.514844 0
+ L3 0 0.020833 3.930850 0.648638 0 3.893346 0.927376 0
+ A3 0 0.010417 0.064424 0.724175 0.343321 0 352.337139 360.000000
+ A3 0 0.010417 0.049411 0.724175 0.343321 0 352.337139 360.000000
+ A3 0 0.010417 0.062500 4.038066 0.789189 0 352.337139 360.000000
+ A3 0 0.010417 0.044194 4.038066 0.789189 0 352.337139 360.000000
+END
+TURNOUT N "Atlas Custom Standard Wye 2754"
+ P "Left" 1 2 3
+ P "Right" 1 4 5
+ E 0.000000 0.000000 270.000000
+ E 4.881890 0.649606 75.000000
+ E 4.881890 -0.649606 105.000000
+ S 0 0.000000 0.000000 0.000000 0.354300 0.000000
+ C 0 0.000000 -15.975786 0.354321 15.975786 165.000000 15.000000
+ S 0 0.000000 4.489175 0.544372 4.881890 0.649606
+ C 0 0.000000 15.975786 0.354236 -15.975786 0.000000 15.000000
+ S 0 0.000000 4.489175 -0.544372 4.881890 -0.649606
+END
+
+SUBCONTENTS Atlas N-Scale Structures - Bridge
+# Bridge Pier (Base) Design by Bob Blackwell
+STRUCTURE N "Atlas Bridge Pier 2541"
+ X pier 0.140625 "1" 0.281250 "2" 0.421875 "3" 0.562500 "4" 0.703125 "5" 0.843750 "6" 0.984375 "7" 1.125000 "8" 1.265625 "9" 1.406250 "10" 1.546875 "11" 1.687500 "12"
+ A3 0 0.020833 0.312500 -0.000000 0.687500 0 270.000000 180.000000
+ A3 0 0.020833 0.312500 -0.000000 -0.687500 0 90.000000 180.000000
+ L3 0 0.020833 0.312500 0.687500 0 0.312500 -0.687500 0
+ L3 0 0.020833 -0.312500 0.687500 0 -0.312500 -0.687500 0
+ A3 0 0.020833 0.250000 -0.000000 -0.375000 0 90.000000 180.000000
+ A3 0 0.020833 0.250000 -0.000000 0.375000 0 270.000000 180.000000
+ L3 0 0.020833 -0.250000 0.375000 0 -0.249999 -0.375000 0
+ L3 0 0.020833 0.250000 0.375000 0 0.250001 -0.375000 0
+ END
+STRUCTURE N "Atlas Bridge Pier (Base) 2543"
+ X pier 1.687500 "B"
+ A3 0 0.020833 0.312500 -0.000000 0.687500 0 270.000000 180.000000
+ A3 0 0.020833 0.312500 -0.000000 -0.687500 0 90.000000 180.000000
+ L3 0 0.020833 0.312500 0.687500 0 0.312500 -0.687500 0
+ L3 0 0.020833 -0.312500 0.687500 0 -0.312500 -0.687500 0
+ A3 0 0.020833 0.250000 -0.000000 -0.375000 0 90.000000 180.000000
+ A3 0 0.020833 0.250000 -0.000000 0.375000 0 270.000000 180.000000
+ L3 0 0.020833 -0.250000 0.375000 0 -0.249999 -0.375000 0
+ L3 0 0.020833 0.250000 0.375000 0 0.250001 -0.375000 0
+ END
+# Viaduct Kit Design by Bob Blackwell
+STRUCTURE N "Atlas Viaduct Kit 2826"
+ L3 0 0.020833 0.010419 0.010417 0 4.385419 0.010422 0
+ L3 0 0.020833 4.385419 0.010417 0 4.385419 1.135417 0
+ L3 0 0.020833 4.385419 1.135422 0 0.010419 1.135417 0
+ L3 0 0.020833 0.010418 1.135417 0 0.010417 0.010417 0
+ L3 0 0.020833 4.385419 0.104172 0 0.010419 0.104167 0
+ L3 0 0.020833 4.385419 1.041676 0 0.010419 1.041670 0
+ L3 0 0.020833 4.385419 1.088547 0 0.010419 1.088542 0
+ L3 0 0.020833 4.385419 0.057297 0 0.010419 0.057292 0
+ END
+SUBCONTENTS Atlas N-Scale Structures - Switch Machines
+STRUCTURE N "Atlas Remote Switch Machine 271x"
+ X pier 0.000000 ""
+ L3 0 0.020833 0.300000 0.300000 0 3.893750 0.300000 0
+ L3 0 0.020833 0.300000 0.300000 0 0.300000 0.534375 0
+ L3 0 0.020833 0.550000 0.300000 0 0.550000 0.581250 0
+ L3 0 0.020833 3.643750 0.300000 0 3.643750 0.581250 0
+ L3 0 0.020833 3.893750 0.300000 0 3.893750 0.534375 0
+ L3 0 0.020833 0.300000 0.534375 0 1.300000 0.768750 0
+ L3 0 0.020833 1.300000 0.768750 0 2.893750 0.768750 0
+ L3 0 0.020833 2.893750 0.768750 0 3.893750 0.534375 0
+ L3 0 0.020833 1.300000 0.768750 0 1.300000 0.503125 0
+ L3 0 0.020833 1.300000 0.503125 0 2.893750 0.503125 0
+ L3 0 0.020833 2.893750 0.768750 0 2.893750 0.503125 0
+ A3 0 0.010417 0.062500 0.425000 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 0.425000 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.062500 3.768750 0.438021 0 0.000000 360.000000
+ A3 0 0.010417 0.044194 3.768750 0.438021 0 0.000000 360.000000
+END
+
+
+SUBCONTENTS Atlas N-Scale Structures - Turn Table
+TURNOUT N "Atlas Turn Table 2790"
+# TT was designed with 7.5in bridge, 8.5in outside dia., 15 degree spacing
+ P "1" 1 2 3
+ P "2" 4 5 6
+ P "3" 7 8 9
+ P "4" 10 11 12
+ P "5" 13 14 15
+ P "6" 16 17 18
+ P "7" 19 20 21
+ P "8" 22 23 24
+ P "9" 25 26 27
+ P "10" 28 29 30
+ P "11" 31 32 33
+ P "12" 34 35 36
+
+ E 0.000000 4.250000 0.000000
+ E 1.099981 4.105185 15.000000
+ E 2.125000 3.680608 30.000000
+ E 3.005204 3.005204 45.000000
+ E 3.680608 2.125000 60.000000
+# E 4.105185 1.099981 75.000000
+# E 4.250000 0.000000 90.000000
+# E 4.105185 -1.099981 105.000000
+ E 3.680608 -2.125000 120.000000
+ E 3.005204 -3.005204 135.000000
+ E 2.125000 -3.680608 150.000000
+ E 1.099981 -4.105185 165.000000
+ E 0.000000 -4.250000 180.000000
+ E -1.099981 -4.105185 195.000000
+ E -2.125000 -3.680608 210.000000
+ E -3.005204 -3.005204 225.000000
+ E -3.680608 -2.125000 240.000000
+ E -4.105185 -1.099981 255.000000
+ E -4.250000 0.000000 270.000000
+ E -4.105185 1.099981 285.000000
+ E -3.680608 2.125000 300.000000
+ E -3.005204 3.005204 315.000000
+ E -2.125000 3.680608 330.000000
+ E -1.080111 4.031029 345.000000
+#0/360
+ S 0 0 0.000000 4.250000 0.000000 3.750000
+ S 16777215 0 0.000000 3.750000 0.000000 -3.750000
+ S 0 0 0.000000 -3.750000 0.000000 -4.250000
+#15/195
+ S 0 0 1.099981 4.105185 0.970571 3.622222
+ S 16777215 0 0.970571 3.622222 -0.970571 -3.622222
+ S 0 0 -0.970571 -3.622222 -1.099981 -4.105185
+#30/210
+ S 0 0 2.125000 3.680608 1.875000 3.247595
+ S 16777215 0 1.836614 3.247595 -1.875000 -3.247595
+ S 0 0 -1.875000 -3.247595 -2.125000 -3.680608
+#45/225
+ S 0 0 3.005204 3.005204 2.651650 2.651650
+ S 16777215 0 2.651650 2.651650 -2.651650 -2.651650
+ S 0 0 -2.651650 -2.651650 -3.005204 -3.005204
+#60/240
+ S 0 0 3.680608 2.125000 3.247595 1.875000
+ S 16777215 0 3.247595 1.875000 -3.247595 -1.875000
+ S 0 0 -3.247595 -1.875000 -3.680608 -2.125000
+#75/255
+ S 16777215 0 4.105185 1.099981 3.622222 0.970571
+ S 16777215 0 3.622222 0.970571 -3.622222 -0.970571
+ S 0 0 -3.622222 -0.970571 -4.105185 -1.099981
+#90/270
+ S 16777215 0 4.250000 0.000000 3.750000 0.000000
+ S 16777215 0 3.750000 0.000000 -3.750000 0.000000
+ S 0 0 -3.750000 0.000000 -4.250000 0.000000
+#105/285
+ S 16777215 0 4.105185 -1.099981 3.622222 -0.970571
+ S 16777215 0 3.622222 -0.970571 -3.622222 0.970571
+ S 0 0 -3.622222 0.970571 -4.105185 1.099981
+#120/300
+ S 0 0 3.680608 -2.125000 3.247595 -1.875000
+ S 16777215 0 3.247595 -1.875000 -3.247595 1.875000
+ S 0 0 -3.247595 1.875000 -3.680608 2.125000
+#135/315
+ S 0 0 3.005204 -3.005204 2.651650 -2.651650
+ S 16777215 0 2.651650 -2.651650 -2.651650 2.651650
+ S 0 0 -2.651650 2.651650 -3.005204 3.005204
+#150/330
+ S 0 0 2.125000 -3.680608 1.875000 -3.247595
+ S 16777215 0 1.836614 -3.247595 -1.875000 3.247595
+ S 0 0 -1.875000 3.247595 -2.125000 3.680608
+#165/345
+ S 0 0 1.099981 -4.105185 0.970571 -3.622222
+ S 16777215 0 0.970571 -3.622222 -0.970571 3.622222
+ S 0 0 -0.970571 3.622222 -1.099981 4.105185
+
+ A 11579568 0.053333 4.250000 0.000000 0.000000 0.000000 360.000000
+ A 11579568 0.053333 3.750000 0.000000 0.000000 0.000000 360.000000
+ L 11579568 0.053333 4.000000 1.437500 6.000000 1.437500 0
+ L 11579568 0.053333 6.000000 1.437500 6.000000 -1.437500 0
+ L 11579568 0.053333 4.000000 -1.437500 6.000000 -1.437500 0
+END
diff --git a/app/lib/params/N-cmr.xtp b/app/lib/params/N-cmr.xtp
index 29aa48c..903df91 100644
--- a/app/lib/params/N-cmr.xtp
+++ b/app/lib/params/N-cmr.xtp
@@ -1,4 +1,4 @@
-CONTENTS Custom Model Railroad Structures
+CONTENTS N Scale Custom Model Railroad Structures
STRUCTURE N "Custom Model Railroads Merchant's Bank & Trust NA"
F3 12632256 0.000000 4
0.000000 0.000000 0
diff --git a/app/lib/params/N-kato-n-gl-trk.xtp b/app/lib/params/N-kato-n-gl-trk.xtp
deleted file mode 100644
index 3660497..0000000
--- a/app/lib/params/N-kato-n-gl-trk.xtp
+++ /dev/null
@@ -1,567 +0,0 @@
-CONTENTS Kato Unitrack N-Scale
-#
-# Note These are somewhat twiddled so that turnouts and
-# the 15° crossing line up with the corresponding curve.
-# Also, most straight tracks are a multiple of
-# 20-010 (186mm) (20-000:4/3, 20-020:2/3, 20-040:1/3).
-#
-# The curves are 1mm smaller than the specification. According to the specs
-# on the Kato 90° crossing, half of the crossing + S45.5 + S186 should equal
-# the radius of a R249, but is 16.5+45.4+186=248.
-#
-# Note: I added the Kato #20-091 Misc Track Assmt pieces
-# 20-091A 1 1/8 - 29mm
-# 20-091B 1 3/4 - 45.5mm
-# Ray Peterson pasayten@yahoo.com 05/15/2006
-#
-# Straight Section Design by Dave Bullis - 9.750
-SUBCONTENTS Kato Unitrack N-Scale Straight Track
-TURNOUT N "Kato Unitrack Straight 9.75 248mm 20-000"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.763779 0.000000 90.000000
- S 0 0 0.000000 0.000000 9.763779 0.000000
- L 11579568 0.053333 0.000000 0.445774 9.763779 0.445774
- L 11579568 0.053333 0.000000 -0.445774 9.763779 -0.445774
- END
-# Straight Section Design by Dave Bullis - 7.312
-TURNOUT N "Kato Unitrack Straight 7 5/16 186mm 20-010"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- L 11579568 0.053333 0.000000 0.445774 7.322834 0.445774
- L 11579568 0.053333 0.000000 -0.445774 7.322834 -0.445774
- END
-# Straight Section Design by Dave Bullis - 4.875
-TURNOUT N "Kato Unitrack Straight 4 7/8 124mm 20-020"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- L 11579568 0.053333 0.000000 0.445774 4.881889 0.445774
- L 11579568 0.053333 0.000000 -0.445774 4.881889 -0.445774
- END
-# Straight Section Design by Dave Bullis - 2.500
-TURNOUT N "Kato Unitrack Straight 2 1/2 64mm 20-030"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.519685 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.519685 0.000000
- L 11579568 0.053333 0.000000 0.445774 2.519685 0.445774
- L 11579568 0.053333 0.000000 -0.445774 2.519685 -0.445774
- END
-# Straight Section Design by Dave Bullis - 2.438
-TURNOUT N "Kato Unitrack Straight 2 7/16 62mm 20-040"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.440944 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.440944 0.000000
- L 11579568 0.053333 0.000000 0.445774 2.440944 0.445774
- L 11579568 0.053333 0.000000 -0.445774 2.440944 -0.445774
- END
-# Straight Section Design by Ray - 1.793
-TURNOUT N "Kato Unitrack Straight 1 3/4 45-5mm 20-091A"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.791339 0.000000 90.000000
- S 0 0 0.000000 0.000000 1.791339 0.000000
- L 11579568 0.053333 0.000000 0.445774 1.791339 0.445774
- L 11579568 0.053333 0.000000 -0.445774 1.791339 -0.445774
- END
-# Straight Section Design by Ray - 1.141
-TURNOUT N "Kato Unitrack Straight 1 1/8 29mm 20-091B"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.141732 0.000000 90.000000
- S 0 0 0.000000 0.000000 1.141732 0.000000
- L 11579568 0.053333 0.000000 0.445774 1.141732 0.445774
- L 11579568 0.053333 0.000000 -0.445774 1.141732 -0.445774
- END
-TURNOUT N "Kato Unitrack Road Crossing 124mm 20-021"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 4.881889 0.000000
- L 11579568 0.053333 0.000000 0.4457740 4.881889 0.4457740
- L 11579568 0.053333 0.000000 -0.4457740 4.881889 -0.4457740
- L 0 0.053333 0.500000 0.548560 4.375000 0.548560
- L 0 0.053333 4.375000 0.548560 4.375000 -0.576440
- L 0 0.053333 4.375000 -0.576440 0.500000 -0.576440
- L 0 0.053333 0.500000 -0.576440 0.500000 0.548560
- L 0 0.053333 1.466667 0.133560 1.000000 -0.013107
- L 0 0.053333 1.440000 -0.133107 1.000000 -0.026440
- L 0 0.053333 1.440000 0.120227 3.320000 0.120227
- L 0 0.053333 1.453333 -0.133107 3.306667 -0.119773
- L 0 0.053333 3.306667 0.120227 3.626667 0.000227
- L 0 0.053333 3.293333 -0.119773 3.600000 0.000227
- END
-TURNOUT N "Kato Unitrack Mag Uncoupler 64mm 20-032"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.519685 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 2.519685 0.000000
- L 11579568 0.053333 0.000000 0.4457740 2.519685 0.4457740
- L 11579568 0.053333 0.000000 -0.4457740 2.519685 -0.4457740
- L 0 0.053333 0.253333 0.133560 2.280000 0.133560
- L 0 0.053333 2.280000 0.133560 2.280000 -0.146440
- L 0 0.053333 2.280000 -0.146440 0.253333 -0.146440
- L 0 0.053333 0.253333 -0.146440 0.253333 0.133560
- END
-# Straight Section Design by Dave Bullis - 2.438
-TURNOUT N "Kato Unitrack Feeder Track 62mm 20-041"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.440944 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.440944 0.000000
- L 11579568 0.053333 0.000000 0.445774 2.440944 0.445774
- L 11579568 0.053333 0.000000 -0.445774 2.440944 -0.445774
- L 0 0.026667 2.000000 -0.498874 2.000000 -0.698874
- L 0 0.026667 2.000000 -0.698874 2.100000 -0.798874
- L 0 0.026667 2.000000 -0.698874 1.900000 -0.798874
- L 16711680 0.026667 1.800000 -0.498874 1.800000 -0.698874
- L 16711680 0.026667 1.800000 -0.698874 1.900000 -0.798874
- L 16711680 0.026667 1.800000 -0.698874 1.700000 -0.798874
- END
-# Straight Section Design by Dave Bullis - 2.438
-TURNOUT N "Kato Unitrack Snap Tk. Conv. Tk. 62mm 20-045"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.440944 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.440944 0.000000
- L 11579568 0.053333 0.000000 0.445774 2.440944 0.445774
- L 11579568 0.053333 0.000000 -0.445774 2.440944 -0.445774
- END
-# Straight Section Design by Dave Bullis - 2.438
-TURNOUT N "Kato Unitrack Adjustable 20-050"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.070866 0.000000 90.000000
- X adjustable 3.070866 4.251968
- S 0 0 0.000000 0.000000 3.070866 0.000000
- L 11579568 0.053333 0.000000 0.445774 3.070866 0.445774
- L 11579568 0.053333 0.000000 -0.445774 3.070866 -0.445774
- END
-SUBCONTENTS Kato Unitrack N-Scale Bridges
-TURNOUT N "Kato Unitrack Dbl. Track Truss Bridge 9.75 248mm 20-435"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 9.763779 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 9.763779 -1.299212 90.000000
- S 0 0 0.000000 0.000000 9.763779 0.000000
- S 0 0 0.000000 -1.299212 9.763779 -1.299212
- L 0 0.053333 0.000000 0.47334 9.763779 0.47334
- L 0 0.053333 0.000000 -1.772552 9.763779 -1.772552
- L 0 0.053333 1.220474 -1.772552 1.220474 0.47334
- L 0 0.053333 1.220474 -1.772552 2.440948 0.47334
- L 0 0.053333 2.440948 -1.772552 1.220474 0.47334
- L 0 0.053333 2.440948 -1.772552 2.440948 0.47334
- L 0 0.053333 2.440948 -1.772552 3.661422 0.47334
- L 0 0.053333 3.661422 -1.772552 2.440948 0.47334
- L 0 0.053333 3.661422 -1.772552 3.661422 0.47334
- L 0 0.053333 3.661422 -1.772552 4.881896 0.47334
- L 0 0.053333 4.881896 -1.772552 3.661422 0.47334
- L 0 0.053333 4.881896 -1.772552 4.881896 0.47334
- L 0 0.053333 4.881896 -1.772552 6.102370 0.47334
- L 0 0.053333 6.102370 -1.772552 4.881896 0.47334
- L 0 0.053333 6.102370 -1.772552 6.102370 0.47334
- L 0 0.053333 6.102370 -1.772552 7.322844 0.47334
- L 0 0.053333 7.322844 -1.772552 6.102370 0.47334
- L 0 0.053333 7.322844 -1.772552 7.322844 0.47334
- L 0 0.053333 7.322844 -1.772552 8.543318 0.47334
- L 0 0.053333 8.543318 -1.772552 7.322844 0.47334
- L 0 0.053333 8.543318 -1.772552 8.543318 0.47334
- END
-TURNOUT N "Kato Unitrack Single Track Truss Bridge 9.75 248mm 20-430"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.763779 0.000000 90.000000
- S 0 0 0.000000 0.000000 9.763779 0.000000
- L 0 0.053333 0.000000 0.47334 9.763779 0.47334
- L 0 0.053333 0.000000 -0.47334 9.763779 -0.47334
- L 0 0.053333 1.220474 -0.47334 1.220474 0.47334
- L 0 0.053333 1.220474 -0.47334 2.440948 0.47334
- L 0 0.053333 2.440948 -0.47334 1.220474 0.47334
- L 0 0.053333 2.440948 -0.47334 2.440948 0.47334
- L 0 0.053333 2.440948 -0.47334 3.661422 0.47334
- L 0 0.053333 3.661422 -0.47334 2.440948 0.47334
- L 0 0.053333 3.661422 -0.47334 3.661422 0.47334
- L 0 0.053333 3.661422 -0.47334 4.881896 0.47334
- L 0 0.053333 4.881896 -0.47334 3.661422 0.47334
- L 0 0.053333 4.881896 -0.47334 4.881896 0.47334
- L 0 0.053333 4.881896 -0.47334 6.102370 0.47334
- L 0 0.053333 6.102370 -0.47334 4.881896 0.47334
- L 0 0.053333 6.102370 -0.47334 6.102370 0.47334
- L 0 0.053333 6.102370 -0.47334 7.322844 0.47334
- L 0 0.053333 7.322844 -0.47334 6.102370 0.47334
- L 0 0.053333 7.322844 -0.47334 7.322844 0.47334
- L 0 0.053333 7.322844 -0.47334 8.543318 0.47334
- L 0 0.053333 8.543318 -0.47334 7.322844 0.47334
- L 0 0.053333 8.543318 -0.47334 8.543318 0.47334
- END
-TURNOUT N "Kato Unitrack Single Track Plate Grider Bridge 7 5/16 186mm 20-454"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- L 0 0.053333 0.000000 0.47334 7.322834 0.47334
- L 0 0.053333 0.000000 -0.47334 7.322834 -0.47334
- END
-TURNOUT N "Kato Unitrack Double Track Plate Grider Bridge 7 5/16 186mm 20-458"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 7.322834 -1.299212 90.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- S 0 0 0.000000 -1.299212 7.322834 -1.299212
- L 0 0.053333 0.000000 0.47334 7.322834 0.47334
- L 0 0.053333 0.000000 -0.649606 7.322834 -0.649606
- L 0 0.053333 0.000000 -1.772552 7.322834 -1.772552
- END
-TURNOUT N "Kato Unitrack Deck Plate Grider Bridge 4 7/8 124mm 20-464"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- L 0 0.053333 0.000000 0.47334 4.881889 0.47334
- L 0 0.053333 0.000000 -0.47334 4.881889 -0.47334
- END
-SUBCONTENTS Kato Unitrack N-Scale Curved Track
-# Curved Section Design by D.Ward - 8.5625 8.000
-TURNOUT N "Kato Unitrack Curve 8.56R 216mm 45° 20-170"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.013192 -2.490745 135.000000
- C 0 0 8.503937 0.000000 -8.503937 0.000000 45.000000
- A 11579568 0.053333 8.058163 0.000000 -8.503937 0.000000 45.000000
- A 11579568 0.053333 8.949711 0.000000 -8.503937 0.000000 45.000000
- END
-# Curved Section Design by D.Ward - 8.5625 8.000
-TURNOUT N "Kato Unitrack Curve 8.56R 216mm 15° 20-171"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.200981 -0.289765 105.000000
- C 0 0 8.503937 0.000000 -8.503937 0.000000 15.000000
- A 11579568 0.053333 8.058163 0.000000 -8.503937 0.000000 15.000000
- A 11579568 0.053333 8.949711 0.000000 -8.503937 0.000000 15.000000
- END
-# Curved Section Design by Dave Bullis - 9.750 8.000
-TURNOUT N "Kato Unitrack Curve 9.75R 249mm 45° 20-100"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.931874 -2.871276 135.000000
- C 0 0 9.803150 0.000000 -9.803150 0.000000 45.000000
- A 11579568 0.053333 9.357376 0.000000 -9.803150 0.000000 45.000000
- A 11579568 0.053333 10.248924 0.000000 -9.803150 0.000000 45.000000
- END
-# Curved Section Design by Dave Bullis - 9.750 8.000
-TURNOUT N "Kato Unitrack Curve 9.75R 249mm 15° 20-101"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.537242 -0.334034 105.000000
- C 0 0 9.803150 0.000000 -9.803150 0.000000 15.000000
- A 11579568 0.053333 9.357376 0.000000 -9.803150 0.000000 15.000000
- A 11579568 0.053333 10.248924 0.000000 -9.803150 0.000000 15.000000
- END
-# Curved Section Design by Dave Bullis - 11.000 8.000
-TURNOUT N "Kato Unitrack Curve 11R 282mm 45° 20-110"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.850556 -3.251807 135.000000
- C 0 0 11.102362 0.000000 -11.102362 0.000000 45.000000
- A 11579568 0.053333 10.656588 0.000000 -11.102362 0.000000 45.000000
- A 11579568 0.053333 11.548136 0.000000 -11.102362 0.000000 45.000000
- END
-# Curved Section Design by Dave Bullis - 11.000 24.000
-TURNOUT N "Kato Unitrack Curve 11R 282mm 15° 20-111"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.873503 -0.378304 105.000000
- C 0 0 11.102362 0.000000 -11.102362 0.000000 15.000000
- A 11579568 0.053333 10.656588 0.000000 -11.102362 0.000000 15.000000
- A 11579568 0.053333 11.548136 0.000000 -11.102362 0.000000 15.000000
- END
-# Curved Section Design by Dave Bullis - 12.375 8.000
-TURNOUT N "Kato Unitrack Curve 12.375R 315mm 45° 20-120"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 8.769238 -3.632337 135.000000
- C 0 0 12.401575 0.000000 -12.401575 0.000000 45.000000
- A 11579568 0.053333 11.955801 0.000000 -12.401575 0.000000 45.000000
- A 11579568 0.053333 12.847349 0.000000 -12.401575 0.000000 45.000000
- END
-# Curved Section Design by Dave Bullis - 12.375 8.000
-TURNOUT N "Kato Unitrack Curve 12.375R 315mm 15° 20-121"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.209764 -0.422573 105.000000
- C 0 0 12.401575 0.000000 -12.401575 0.000000 15.000000
- A 11579568 0.053333 11.955801 0.000000 -12.401575 0.000000 15.000000
- A 11579568 0.053333 12.847349 0.000000 -12.401575 0.000000 15.000000
- END
-# Curved Section Design by Dave Bullis - 13.750 12.000
-TURNOUT N "Kato Unitrack Curve 13.75R 348mm 30° 20-130"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.850394 -1.835557 120.000000
- C 0 0 13.700787 0.000000 -13.700787 0.000000 30.000000
- A 11579568 0.053333 13.255013 0.000000 -13.700787 0.000000 30.000000
- A 11579568 0.053333 14.146561 0.000000 -13.700787 0.000000 30.000000
- END
-# Curved Section Design by Dave Bullis - 13.750 8.000
-TURNOUT N "Kato Unitrack Curve 13.75R 348mm 45° 20-132"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.687920 -4.012868 135.000000
- C 0 0 13.700787 0.000000 -13.700787 0.000000 45.000000
- A 11579568 0.053333 13.255013 0.000000 -13.700787 0.000000 45.000000
- A 11579568 0.053333 14.146561 0.000000 -13.700787 0.000000 45.000000
- END
-# Curved Section Design by Dave Bullis - 15.000 12.000
-TURNOUT N "Kato Unitrack Curve 15R 381mm 30° 20-140"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.500000 -2.009619 120.000000
- C 0 0 15.000000 0.000000 -15.000000 0.000000 30.000000
- A 11579568 0.053333 14.554226 0.000000 -15.000000 0.000000 30.000000
- A 11579568 0.053333 15.445774 0.000000 -15.000000 0.000000 30.000000
- END
-# Curved Section Design by Dave Bullis - 19.000 24.000
-TURNOUT N "Kato Unitrack Curve 19R 481mm 15° 20-160"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.901258 -0.645263 105.000000
- C 0 0 18.937008 -0.010000 -18.937008 0.000000 15.000000
- A 11579568 0.053333 18.491234 -0.000000 -18.937008 0.000000 15.000000
- A 11579568 0.053333 19.382782 -0.000000 -18.937008 0.000000 15.000000
- END
-# Curved Section Design by Dave Bullis - 28.25333 24.000
-TURNOUT N "Kato Unitrack Curve 28.25R 718mm 15° 20-150"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.316223 -0.963199 105.000000
- C 0 0 28.267717 0.003000 -28.267717 0.000000 15.000000
- A 11579568 0.053333 27.821943 0.000000 -28.267717 0.000000 15.000000
- A 11579568 0.053333 28.713491 0.000000 -28.267717 0.000000 15.000000
- END
-SUBCONTENTS Kato Unitrack N-Scale Bumper Track
-TURNOUT N "Kato Unitrack Bumper A 2 1/2 64mm 20-033"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0.000000 0.000000 0.000000 2.527000 0.000000
- L 11579568 0.053333 0.000000 0.4457740 3.527000 0.4457740
- L 11579568 0.053333 0.000000 -0.4457740 3.527000 -0.4457740
- L 11579568 0.053333 3.527000 0.4457740 3.520000 -0.4457740
- L 10824234 0.053333 2.520000 0.320227 3.186667 0.320227
- L 10824234 0.053333 3.186667 0.320227 3.186667 -0.346440
- L 10824234 0.053333 3.186667 -0.346440 2.520000 -0.346440
- L 10824234 0.053333 2.520000 -0.346440 2.520000 0.320227
- L 0 0.053333 2.720000 0.080227 2.866667 0.080227
- L 0 0.053333 2.866667 0.080227 2.866667 -0.106440
- L 0 0.053333 2.866667 -0.106440 2.720000 -0.106440
- L 0 0.053333 2.720000 -0.106440 2.720000 0.080227
- END
-TURNOUT N "Kato Unitrack Bumper B 2 1/2 64mm 20-034"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0.000000 0.000000 0.000000 2.527000 0.000000
- L 11579568 0.053333 0.000000 0.4457740 3.527000 0.4457740
- L 11579568 0.053333 0.000000 -0.4457740 3.527000 -0.4457740
- L 11579568 0.053333 3.527000 0.4457740 3.520000 -0.4457740
- L 0 0.053333 2.720000 0.080227 2.866667 0.080227
- L 0 0.053333 2.866667 0.080227 2.866667 -0.106440
- L 0 0.053333 2.866667 -0.106440 2.720000 -0.106440
- L 0 0.053333 2.720000 -0.106440 2.720000 0.080227
- L 9127187 0.053333 2.520000 0.306893 3.226667 0.306893
- L 9127187 0.053333 3.226667 -0.333107 2.520000 -0.333107
- L 9127187 0.053333 2.520000 -0.333107 2.520000 0.306893
- L 11579568 0.053333 2.573333 0.253560 3.186667 0.253560
- L 11579568 0.053333 3.186667 0.253560 3.186667 -0.293107
- L 11579568 0.053333 3.186667 -0.293107 2.573333 -0.293107
- L 11579568 0.053333 2.573333 -0.293107 2.573333 0.253560
- END
-TURNOUT N "Kato Unitrack Bumper C 2 20-035"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0.000000 0.000000 0.000000 2.0 0.000000
- L 11579568 0.053333 0.000000 0.4457740 2.527000 0.4457740
- L 11579568 0.053333 0.000000 -0.4457740 2.527000 -0.4457740
- L 11579568 0.053333 2.527000 0.4457740 2.527000 -0.4457740
- L 0 0.053333 1.026667 0.080227 1.200000 0.080227
- L 0 0.053333 1.200000 0.080227 1.200000 -0.093107
- L 0 0.053333 1.200000 -0.093107 1.026667 -0.093107
- L 0 0.053333 1.026667 -0.093107 1.026667 0.080227
- L 0 0.053333 0.800000 0.080227 0.800000 -0.093107
- L 0 0.040000 0.826667 -0.066440 1.146667 -0.453107
- L 0 0.040000 0.826667 0.066893 1.160000 0.440227
- L 0 0.040000 0.826667 -0.093107 0.573333 -0.453107
- L 0 0.040000 0.840000 0.080227 0.586667 0.440227
- L 0 0.053333 0.746667 -0.106440 0.746667 0.106893
- END
-SUBCONTENTS Kato Unitrack N-Scale Turnouts
-TURNOUT N "Kato Unitrack Turnout 4-L 20-220"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 4.960629 0.000000 90.000000
- E 4.881889 0.642713 75.000000
- S 0 0 0.000000 0.000000 4.960629 0.000000
- C 0 0 -18.862000 0.000000 18.862000 165.000000 15.000000
- L 11579568 0.053333 0.000000 -0.445774 4.960629 -0.445774
- A 11579568 0.053333 -18.416226 0.000000 18.862000 165.000000 15.000000
- END
-TURNOUT N "Kato Unitrack S60L {incl w/4} "
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.362204 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.362204 0.000000
- L 11579568 0.053333 0.000000 0.445774 2.362204 0.445774
- L 11579568 0.053333 0.000000 -0.445774 2.362204 -0.445774
- END
-# Regular Turnout Design by Dave Bullis - 4.918 0.647 15.000 5.000
-TURNOUT N "Kato Unitrack Turnout 4-R 20-221"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 4.960629 0.000000 90.000000
- E 4.881889 -0.642713 105.000000
- S 0 0 0.000000 0.000000 4.960629 0.000000
- C 0 0 18.862000 0.000000 -18.862000 0.000000 15.000000
- L 11579568 0.053333 0.000000 0.445774 4.960629 0.445774
- A 11579568 0.053333 18.416226 0.000000 -18.862000 0.000000 15.000000
- END
-TURNOUT N "Kato Unitrack S60R {incl w/4} "
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.362204 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.362204 0.000000
- L 11579568 0.053333 0.000000 0.445774 2.362204 0.445774
- L 11579568 0.053333 0.000000 -0.445774 2.362204 -0.445774
- END
-# Regular Turnout Design by Dave Bullis - 7.312 0.963 15.000 7.312
-TURNOUT N "Kato Unitrack Turnout 6-L 20-202"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- E 7.322834 0.964069 75.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- C 0 0 -28.268000 0.003000 28.268000 164.993000 15.014000
- L 11579568 0.053333 0.000000 -0.445774 7.322834 -0.445774
- A 11579568 0.053333 -27.822226 0.003000 28.268000 164.993000 15.014000
- END
-TURNOUT N "Kato Unitrack Turnout 6-R 20-203"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- E 7.322834 -0.964069 105.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- C 0 0 28.268000 0.003000 -28.268000 359.993000 15.014000
- L 11579568 0.053333 0.000000 0.445774 7.322834 0.445774
- A 11579568 0.053333 27.822226 0.003000 -28.268000 359.993000 15.014000
- END
-SUBCONTENTS Kato Unitrack N-Scale Crossings
-# Double Crossover Design by Dave Bullis - 12.1875 1.3125
-TURNOUT N "Kato Unitrack Double Crossover 20-210"
- P "Normal" 1 2 3 0 4 5 6
- P "Reverse" 1 7 8 9 6 0 4 10 11 12 3
- E 0.000000 0.000000 270.000000
- E 12.204724 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 12.204724 -1.299212 90.000000
- S 0 0 0.000000 0.000000 0.632000 0.000000
- S 0 0 0.632000 0.000000 11.555000 0.000000
- S 0 0 11.555000 0.000000 12.204700 0.000000
- S 0 0 0.000000 -1.299212 0.632000 -1.299212
- S 0 0 0.632000 -1.299212 11.555000 -1.299212
- S 0 0 11.555000 -1.299212 12.204724 -1.299212
- C 0 0 22.960000 0.631000 -22.960000 0.003000 12.880000
- S 0 0 5.750000 -0.578000 6.438000 -0.735000
- C 0 0 -22.960000 11.497000 21.661000 179.855000 12.874000
- C 0 0 -22.960000 0.691000 21.661000 167.271000 12.876000
- S 0 0 5.750000 -0.735000 6.438000 -0.578000
- C 0 0 22.960000 11.557000 -22.960000 347.117000 12.878000
- L 11579568 0.053333 0.000000 0.445774 12.204724 0.445774
- L 11579568 0.053333 0.000000 -0.445774 0.5 -0.445774
- L 11579568 0.053333 0.000000 -0.825878 0.5 -0.825878
- L 11579568 0.053333 0.5 -0.445774 0.5 -0.825878
- L 11579568 0.053333 12.204724 -0.445774 11.704724 -0.445774
- L 11579568 0.053333 12.204724 -0.825878 11.704724 -0.825878
- L 11579568 0.053333 11.704724 -0.445774 11.704724 -0.825878
- L 11579568 0.053333 0.000000 -1.772546 12.204724 -1.772546
- END
-# Crossing Design by Dave Bullis - 3.656 15.000 3.793
-TURNOUT N "Kato Unitrack Crossing 15° X15R 20-301"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- E 0.000000 0.964069 285.000000
- E 7.322834 -0.964069 105.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- S 0 0 0.000000 0.964069 7.322834 -0.964069
- L 11579568 0.053333 3.71 0.445774 7.322834 0.445774
- L 11579568 0.053333 0.000000 -0.445774 3.62 -0.445774
- L 11579568 0.053333 0.12 1.43 3.71 0.445774
- L 11579568 0.053333 7.20 -1.43 3.62 -0.445774
- END
-# Crossing Design by Dave Bullis - 3.793 15.000 3.656
-TURNOUT N "Kato Unitrack Crossing 15° X15L 20-300"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- E 0.000000 -0.964069 255.000000
- E 7.322834 0.964069 75.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- S 0 0 0.000000 -0.964069 7.322834 0.964069
- L 11579568 0.053333 3.71 -0.445774 7.322834 -0.445774
- L 11579568 0.053333 0.000000 0.445774 3.62 0.445774
- L 11579568 0.053333 0.12 -1.43 3.71 -0.445774
- L 11579568 0.053333 7.20 1.43 3.62 0.445774
- END
-# Crossing Design by Dave Bullis - 2.438 90.000 2.438
-TURNOUT N "Kato Unitrack Crossing 90° w/S45.5 20-320"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- E 2.440944 2.440944 0.000000
- E 2.440944 -2.440944 180.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- S 0 0 2.440944 2.440944 2.440944 -2.440944
- L 11579568 0.053333 0.000000 0.445774 1.967610 0.445774
- L 11579568 0.053333 0.000000 -0.445774 1.967610 -0.445774
- L 11579568 0.053333 2.914278 0.445774 4.881889 0.445774
- L 11579568 0.053333 2.914278 -0.445774 4.881889 -0.445774
- L 11579568 0.053333 1.967610 -2.440944 1.967610 -0.500000
- L 11579568 0.053333 2.914278 -2.440944 2.914278 -0.500000
- L 11579568 0.053333 1.967610 2.440944 1.967610 0.500000
- L 11579568 0.053333 2.914278 2.440944 2.914278 0.500000
- END
-# Crossing Design by Dave Bullis - 2.438 90.000 2.438
-TURNOUT N "Kato Unitrack Crossing 90° w/o S45.5 20-320"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 1.299212 0.000000 90.000000
- E 0.649606 0.649606 0.000000
- E 0.649606 -0.649606 180.000000
- S 0 0 0.000000 0.000000 1.299212 0.000000
- S 0 0 0.649606 0.649606 0.649606 -0.650000
- L 11579568 0.053333 0.000000 0.445774 0.176272 0.445774
- L 11579568 0.053333 0.000000 -0.445774 0.176272 -0.445774
- L 11579568 0.053333 1.122940 0.445774 1.299212 0.445774
- L 11579568 0.053333 1.122940 -0.445774 1.299212 -0.445774
- L 11579568 0.053333 0.176272 -0.649606 0.176272 -0.445774
- L 11579568 0.053333 1.122940 -0.649606 1.122940 -0.445774
- L 11579568 0.053333 0.176272 0.649606 0.176272 0.445774
- L 11579568 0.053333 1.122940 0.649606 1.122940 0.445774
- END
-TURNOUT N "Kato Unitrack S45.5 (incl w/20-320) "
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.791339 0.000000 90.000000
- S 0 0 0.000000 0.000000 1.791339 0.000000
- L 11579568 0.053333 0.000000 0.445774 1.791339 0.445774
- L 11579568 0.053333 0.000000 -0.445774 1.791339 -0.445774
- END \ No newline at end of file
diff --git a/app/lib/params/N-kato-turntable.xtp b/app/lib/params/N-kato-turntable.xtp
index dd2872b..151e4e6 100644
--- a/app/lib/params/N-kato-turntable.xtp
+++ b/app/lib/params/N-kato-turntable.xtp
@@ -1,10 +1,10 @@
-CONTENTS Kato Unitrack N-Scale Turntable
+CONTENTS Kato Unitrack N Scale Turntable
#
#
SUBCONTENTS Kato Unitrack Turntable
TURNOUT N "Kato Unitrack 3 Stall Round House 20-xxx"
- P "Normal" 1
+ P "Normal" 1 0 2 0 3
E -0.148334 1.695463 260.000000
E 0.000000 0.000000 270.000000
E -0.148334 -1.695463 280.000000
@@ -38,7 +38,7 @@ TURNOUT N "Kato Unitrack 3 Stall Round House 20-xxx"
L 0 0.031250 7.874016 -1.543107 7.338100 -4.582435
END
TURNOUT N "Kato Unitrack 139.5mm Straight Extension Line 20-285"
- P "Normal" 1
+ P "Normal" 1
E 0.000000 0.000000 270.000000
E 5.492126 0.000000 90.000000
S 0 0.000000 0.000000 0.000000 5.492126 0.000000
@@ -47,7 +47,7 @@ TURNOUT N "Kato Unitrack 139.5mm Straight Extension Line 20-285"
L 0 0.031250 5.492126 0.854220 5.492126 -0.854220
END
TURNOUT N "Kato Unitrack Curve (L) Extension Line 20-286L"
- P "Normal" 1 2 3
+ P "Normal" 1 2 3
E 0.000000 0.000000 270.000000
E 5.569398 -0.415987 100.000000
S 0 0.000000 0.000000 0.000000 0.935511 0.000000
@@ -59,7 +59,7 @@ TURNOUT N "Kato Unitrack Curve (L) Extension Line 20-286L"
L 0 0.031250 5.642748 0.000000 5.492126 0.854220
END
TURNOUT N "Kato Unitrack Curve (R) Extension Line 20-286R"
- P "Normal" 1 2 3
+ P "Normal" 1 2 3
E 0.000000 0.000000 270.000000
E 5.569398 0.415987 80.000000
S 0 0.000000 0.000000 0.000000 0.935511 0.000000
@@ -155,7 +155,7 @@ TURNOUT N "Kato Unitrack 160mm Turn Table 20-283"
S 16777215 0.000000 2.727639 1.574803 -2.727639 -1.574803
S 0 0.000000 -2.727639 -1.574803 -3.699360 -2.135827
S 0 0.000000 4.014041 1.460992 2.959662 1.077229
- S 16777215 0.000000 2.959662 1.077229 -2.959662 -1.077229
+ S 16777215 0.000000 2.959662 1.077229 -2.959662 -1.077229
S 0 0.000000 -2.959662 -1.077229 -4.014041 -1.460992
S 0 0.000000 4.206758 0.741765 3.101757 0.546923
S 16777215 0.000000 3.101757 0.546923 -3.101757 -0.546923
@@ -195,11 +195,11 @@ TURNOUT N "Kato Unitrack 160mm Turn Table 20-283"
L 0 0.031250 4.126100 1.105585 3.042286 0.815178
L 0 0.031250 4.126100 -1.105585 3.042286 -0.815178
L 0 0.031250 3.020515 -3.020515 2.227108 -2.227108
- L 0 0.031250 1.105585 -4.126100 0.815178 -3.042286
+ L 0 0.031250 1.105585 -4.126100 0.815178 -3.042286
L 0 0.031250 -1.105585 -4.126100 -0.815178 -3.042286
L 0 0.031250 -3.020515 -3.020515 -2.227108 -2.227108
L 0 0.031250 -4.126100 -1.105585 -3.042286 -0.815178
L 0 0.031250 -4.126100 1.105585 -3.042286 0.815178
L 0 0.031250 -3.020515 3.020515 -2.227108 2.227108
L 0 0.031250 -1.105585 4.126100 -0.815178 3.042286
- END \ No newline at end of file
+ END
diff --git a/app/lib/params/N-me.xtp b/app/lib/params/N-me.xtp
index eadd9ee..d537813 100644
--- a/app/lib/params/N-me.xtp
+++ b/app/lib/params/N-me.xtp
@@ -1,4 +1,4 @@
-CONTENTS Micro-Engineering N-Scale
+CONTENTS Micro Engineering N Scale
# Regular Turnout Design by - 5.981000 0.713000 9.527200 5.944000
TURNOUT N "Micro Engineering #6 Code 55 RH 15-506"
P "Normal" 1 2
diff --git a/app/lib/params/Newqida.xtp b/app/lib/params/Newqida.xtp
new file mode 100644
index 0000000..8abac3d
--- /dev/null
+++ b/app/lib/params/Newqida.xtp
@@ -0,0 +1,43 @@
+CONTENTS Newqida G Scale Plastic Track
+SUBCONTENTS Straight Track
+TURNOUT G "Newqida Straight 300mm 78010"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 12.303150 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 12.303150 0.000000
+ END
+
+SUBCONTENTS Curve Track
+TURNOUT G "Newqida Curved 650mm 30� 78020"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 12.273613 3.288702 60.000000
+ C 0 0.000000 -24.547244 0.000033 24.547244 150.000076 30.000000
+ END
+
+TURNOUT G "Newqida Curved 650mm 15� Custom"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.353289 0.836426 75.000000
+ C 0 0.000000 -24.547244 0.000033 24.547244 165.000076 15.000000
+ END
+
+SUBCONTENTS Switches
+TURNOUT G "Newqida Manual Switch RightHand 78030"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 12.303150 0.000000 90.000000
+ E 12.273613 -3.288702 120.000000
+ S 0 0.000000 0.000000 0.000000 12.303150 0.000000
+ C 0 0.000000 24.547244 0.000000 -24.547244 0.000000 30.000000
+ END
+TURNOUT G "Newqida Manual Switch LeftHand 78031"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 12.303150 0.000000 90.000000
+ E 12.273613 3.288702 60.000000
+ S 0 0.000000 0.000000 0.000000 12.303150 0.000000
+ C 0 0.000000 -24.547244 0.000000 24.547244 150.000000 30.000000
+ END
diff --git a/app/lib/params/Nn3-FastTrack.xtp b/app/lib/params/Nn3-FastTrack.xtp
index 2d08e6d..f367f04 100644
--- a/app/lib/params/Nn3-FastTrack.xtp
+++ b/app/lib/params/Nn3-FastTrack.xtp
@@ -1,4 +1,4 @@
-CONTENTS Fast Tracks Nn3-scale Turnouts and Wyes
+CONTENTS Fast Tracks Nn3 scale Turnouts and Wyes
SUBCONTENTS Fast Tracks Nn3-scale - Turnouts
TURNOUT Nn3 "Fast Tracks #4 Left TT-NN3-T-4L"
U "Regular Turnout" "" "Fast Tracks" "#4 Left" "TT-NN3-T-4L" "#4 Right" "TT-NN3-T-4R" 3.940000 14.250033 0.528339 3.940000 0.000000 0.000000 0
diff --git a/app/lib/params/O-Atlas2Rail.xtp b/app/lib/params/O-Atlas2Rail.xtp
new file mode 100644
index 0000000..aeb37bf
--- /dev/null
+++ b/app/lib/params/O-Atlas2Rail.xtp
@@ -0,0 +1,296 @@
+CONTENTS Atlas O 2 Rail
+SUBCONTENTS Atlas O 2 Rail - Curve Track
+TURNOUT O "Atlas O 2 Rail 36"" Radius Full Section At-7062"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 13.776593 2.740332 67.500000
+ C 0 0.000000 -36.000000 0.000048 36.000000 157.500076 22.500000
+ END
+TURNOUT O "Atlas O 2 Rail 36"" Radius Half Section At-7063"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.023246 0.691729 78.750000
+ C 0 0.000000 -36.000000 0.000048 36.000000 168.750076 11.250000
+ END
+TURNOUT O "Atlas O 2 Rail 40.5"" Radius Full Curve At-7011"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 15.498667 3.082874 67.500000
+ C 0 0.000000 -40.500000 0.000054 40.500000 157.500076 22.500000
+ END
+TURNOUT O "Atlas O 2 Rail 40.5"" Radius 1/3rd Curve At-7012"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.286306 0.346483 82.500000
+ C 0 0.000000 -40.500000 0.000054 40.500000 172.500076 7.500000
+ END
+TURNOUT O "Atlas O 2 Rail 45"" Radius Full Curve At-7013"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 17.220741 3.425415 67.500000
+ C 0 0.000000 -45.000000 0.000060 45.000000 157.500076 22.500000
+ END
+TURNOUT O "Atlas O 2 Rail 49.5"" Radius Full Curve At-7014"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 18.942815 3.767957 67.500000
+ C 0 0.000000 -49.500000 0.000066 49.500000 157.500076 22.500000
+ END
+TURNOUT O "Atlas O 2 Rail 54"" Radius Full Curve At-7016"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 20.664905 4.956805 67.500000
+ C 0 0.000000 -54.000000 0.000000 54.000000 157.500000 22.500000
+ END
+
+
+SUBCONTENTS Atlas O 2 Rail - Turnouts
+TURNOUT O "Atlas O 2 Rail # 5 Left At-7024"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 20.000000 0.000000 90.000000
+ E 20.000000 2.250000 78.463031
+ S 0 0.000000 0.000000 0.000000 1.177000 0.000000
+ S 0 0.000000 1.177000 0.000000 20.000000 0.000000
+ C 0 0.000000 -77.216289 1.177102 77.216289 168.462955 11.537121
+ S 0 0.000000 16.620459 1.560127 20.000000 2.250000
+ END
+TURNOUT O "Atlas O 2 Rail # 5 Right At-7025"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 20.000000 0.000000 90.000000
+ E 20.000000 -2.250000 101.536969
+ S 0 0.000000 0.000000 0.000000 1.177000 0.000000
+ S 0 0.000000 1.177000 0.000000 20.000000 0.000000
+ C 0 0.000000 77.216289 1.176693 -77.216289 0.000076 11.537121
+ S 0 0.000000 16.620459 -1.560127 20.000000 -2.250000
+ END
+TURNOUT O "Atlas O 2 Rail # 5 Wye At-7074"
+ P "Left" 1 2 3
+ P "Right" 1 4 5
+ E 0.000000 0.000000 270.000000
+ E 13.000000 1.500000 78.463031
+ E 13.000000 -1.500000 101.536969
+ S 0 0.000000 0.000000 0.000000 1.177000 0.000000
+ C 0 0.000000 -44.294145 1.177059 44.294145 168.462955 11.537121
+ S 0 0.000000 10.035944 0.894947 13.000000 1.500000
+ C 0 0.000000 44.294145 1.176824 -44.294145 0.000076 11.537121
+ S 0 0.000000 10.035944 -0.894947 13.000000 -1.500000
+ END
+TURNOUT O "Atlas O 2 Rail # 7.5 Left At-7021"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 24.500000 0.000000 90.000000
+ E 24.500000 2.250000 82.337738
+ S 0 0.000000 0.000000 0.000000 1.177000 0.000000
+ S 0 0.000000 1.177000 0.000000 24.500000 0.000000
+ C 0 0.000000 -98.541858 1.177131 98.541858 172.337662 7.662414
+ S 0 0.000000 14.316174 0.879891 24.500000 2.250000
+ END
+TURNOUT O "Atlas O 2 Rail # 7.5 Right At-7022"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 24.500000 0.000000 90.000000
+ E 24.500000 -2.250000 97.662262
+ S 0 0.000000 0.000000 0.000000 1.177000 0.000000
+ S 0 0.000000 1.177000 0.000000 24.500000 0.000000
+ C 0 0.000000 98.541858 1.176608 -98.541858 0.000076 7.662414
+ S 0 0.000000 14.316174 -0.879891 24.500000 -2.250000
+ END
+
+
+SUBCONTENTS Atlas O 2 Rail - Straight Track
+TURNOUT O "Atlas O 2 Rail 40"" Straight At-7056"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 40.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 40.000000 0.000000
+ END
+TURNOUT O "Atlas O 2 Rail 10"" Straight At-7050"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ END
+TURNOUT O "Atlas O 2 Rail 4.5"" Straight At-7051"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.500000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 4.500000 0.000000
+ END
+TURNOUT O "Atlas O 2 Rail 1.75"" Straight At-7052"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.750000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 1.750000 0.000000
+ END
+
+
+SUBCONTENTS Atlas O 2 Rail - Crossings
+TURNOUT O "Atlas O 2 Rail 90 Degree Crossing At-7080"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 5.000000 0.000000 90.000000
+ E 2.500007 2.500000 360.000000
+ E 2.499993 -2.500000 180.000000
+ S 0 0.000000 0.000000 0.000000 5.000000 0.000000
+ S 0 0.000000 2.500007 2.500000 2.499993 -2.500000
+ END
+TURNOUT O "Atlas O 2 Rail 45 Degree Crossing At-7081"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 8.250000 0.000000 90.000000
+ E 1.208179 2.916810 315.000000
+ E 7.041821 -2.916810 135.000000
+ S 0 0.000000 0.000000 0.000000 8.250000 0.000000
+ S 0 0.000000 1.208179 2.916810 7.041821 -2.916810
+ END
+
+
+SUBCONTENTS Atlas O 2 Rail - Misc Track
+TURNOUT O "Atlas O 2 Rail 40"" Single Track Pratt Truss Bridge AT-7920"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 40.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 40.000000 0.000000
+ L 0 0.100000 0.000000 -1.500000 40.000000 -1.500000
+ L 0 0.100000 0.000000 1.500000 40.000000 1.500000
+ L 0 0.100000 6.000000 -1.500000 6.000000 1.500000
+ L 0 0.100000 13.000000 -1.500000 13.000000 1.500000
+ L 0 0.100000 20.000000 -1.500000 20.000000 1.500000
+ L 0 0.100000 27.000000 -1.500000 27.000000 1.500000
+ L 0 0.100000 34.000000 -1.500000 34.000000 1.500000
+ L 0 0.100000 6.000000 -1.500000 13.000000 1.500000
+ L 0 0.100000 13.000000 -1.500000 20.000000 1.500000
+ L 0 0.100000 20.000000 -1.500000 27.000000 1.500000
+ L 0 0.100000 27.000000 -1.500000 34.000000 1.500000
+ END
+TURNOUT O "Atlas O 2 Rail 40"" Double Track Pratt Truss Bridge AT-7921"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 40.000000 0.000000 90.000000
+ E 0.000000 3.250000 270.000000
+ E 40.000000 3.250000 90.000000
+ S 0 0.000000 0.000000 0.000000 40.000000 0.000000
+ S 0 0.000000 0.000000 3.250000 40.000000 3.250000
+ L 0 0.100000 0.000000 -1.500000 40.000000 -1.500000
+ L 0 0.100000 0.000000 4.750000 40.000000 4.750000
+ L 0 0.100000 6.000000 -1.500000 6.000000 4.750000
+ L 0 0.100000 13.000000 -1.500000 13.000000 4.750000
+ L 0 0.100000 20.000000 -1.500000 20.000000 4.750000
+ L 0 0.100000 27.000000 -1.500000 27.000000 4.750000
+ L 0 0.100000 34.000000 -1.500000 34.000000 4.750000
+ L 0 0.100000 6.000000 -1.500000 13.000000 4.750000
+ L 0 0.100000 13.000000 -1.500000 20.000000 4.750000
+ L 0 0.100000 20.000000 -1.500000 27.000000 4.750000
+ L 0 0.100000 27.000000 -1.500000 34.000000 4.750000
+ END
+TURNOUT O "Atlas O 2 Rail 20"" Single Track Deck Girder Bridge AT-7923"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 20.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 20.000000 0.000000
+ L 0 0.100000 0.000000 -0.750000 20.000000 -0.750000
+ L 0 0.100000 0.000000 0.75000 20.000000 0.750000
+ END
+TURNOUT O "Atlas O 2 Rail 18"" Single Track Plate Girder Bridge AT-7918"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 18.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 18.000000 0.000000
+ L 0 0.050000 0.000000 0.000000 18.000000 0.000000
+ L 0 0.100000 1.500000 -2.000000 16.500000 -2.000000
+ L 0 0.100000 1.500000 2.000000 16.500000 2.000000
+ L 0 0.100000 1.500000 -2.000000 1.500000 -1.250000
+ L 0 0.100000 4.500000 -2.000000 4.500000 -1.250000
+ L 0 0.100000 7.500000 -2.000000 7.500000 -1.250000
+ L 0 0.100000 10.500000 -2.000000 10.500000 -1.250000
+ L 0 0.100000 13.500000 -2.000000 13.500000 -1.250000
+ L 0 0.100000 16.500000 -2.000000 16.500000 -1.250000
+ L 0 0.100000 1.500000 1.250000 1.500000 2.000000
+ L 0 0.100000 4.500000 1.250000 4.500000 2.000000
+ L 0 0.100000 7.500000 1.250000 7.500000 2.000000
+ L 0 0.100000 10.500000 1.250000 10.500000 2.000000
+ L 0 0.100000 13.500000 1.250000 13.500000 2.000000
+ L 0 0.100000 16.500000 1.250000 16.500000 2.000000
+ END
+TURNOUT O "Atlas O 2 Rail 24"" Turntable AT-6910"
+ P "1" 1
+ P "2" 2
+ P "3" 3
+ P "4" 4
+ P "5" 5
+ P "6" 6
+ P "7" 7
+ P "8" 8
+ P "9" 9
+ P "10" 10
+ P "11" 11
+ P "12" 12
+ P "13" -1
+ P "14" -2
+ P "15" -3
+ P "16" -4
+ P "17" -5
+ P "18" -6
+ P "19" -7
+ P "20" -8
+ P "21" -9
+ P "22" -10
+ P "23" -11
+ P "24" -12
+ E 0.000000 12.000000 0.000000
+ E -0.000000 -12.000000 180.000000
+ E 3.105829 11.591110 15.000000
+ E -3.105829 -11.591110 195.000000
+ E 6.000000 10.392305 30.000000
+ E -6.000000 -10.392305 210.000000
+ E 8.485281 8.485281 45.000000
+ E -8.485281 -8.485281 225.000000
+ E 10.392305 6.000000 60.000000
+ E -10.392305 -6.000000 240.000000
+ E 11.591110 3.105829 75.000000
+ E -11.591110 -3.105829 255.000000
+ E 12.000000 0.000000 90.000000
+ E -12.000000 -0.000000 270.000000
+ E 11.591110 -3.105829 105.000000
+ E -11.591110 3.105829 285.000000
+ E 10.392305 -6.000000 120.000000
+ E -10.392305 6.000000 300.000000
+ E 8.485281 -8.485281 135.000000
+ E -8.485281 8.485281 315.000000
+ E 6.000000 -10.392305 150.000000
+ E -6.000000 10.392305 330.000000
+ E 3.105829 -11.591110 165.000000
+ E -3.105829 11.591110 345.000000
+#0/180
+ S 16777215 0 0.000000 12.000000 0.000000 -12.000000
+#15/195
+ S 16777215 0 3.105829 11.591110 -3.105829 -11.591110
+#30/210
+ S 16777215 0 6.000000 10.392305 -6.000000 -10.392305
+#45/225
+ S 16777215 0 8.485281 8.485281 -8.485281 -8.485281
+#60/240
+ S 16777215 0 10.392305 6.000000 -10.392305 -6.000000
+#75/255
+ S 16777215 0 11.591110 3.105829 -11.591110 -3.105829
+#90/270
+ S 16777215 0 -12.000000 0.000000 12.000000 0.000000
+#105/285
+ S 16777215 0 11.591110 -3.105829 -11.591110 3.105829
+#120/300
+ S 16777215 0 10.392305 -6.000000 -10.392305 6.000000
+#135/315
+ S 16777215 0 8.485281 -8.485281 -8.485281 8.485281
+#150/330
+ S 16777215 0 6.000000 -10.392305 -6.000000 10.392305
+#165/345
+ S 16777215 0 3.105829 -11.591110 -3.105829 11.591110
+ A 11579568 0.053333 12.000000 0.000000 0.000000 0.000000 360.000000
+ A 11579568 0.053333 13.000000 0.000000 0.000000 0.000000 360.000000
+ END
diff --git a/app/lib/params/O-Atlas2RailObsolete.xtp b/app/lib/params/O-Atlas2RailObsolete.xtp
new file mode 100644
index 0000000..4a0a5f1
--- /dev/null
+++ b/app/lib/params/O-Atlas2RailObsolete.xtp
@@ -0,0 +1,120 @@
+CONTENTS Atlas O 2 Rail Obsolete
+# Atlas O 2-Rail Obsolete Parameter for 1970's Atlas Track
+TURNOUT O "Atlas O 2 Rail Left Remote Turnout 24in Radius 6021"
+ P "Normal" 1 2
+ P "Reverse" 1 3
+ E 0.000000 0.000000 270.000000
+ E 12.937500 0.000000 90.000000
+ E 10.309402 1.826891 67.500000
+ S 0 0.000000 0.000000 0.000000 1.125000 0.000000
+ S 0 0.000000 1.125000 0.000000 12.937500 0.000000
+ C 0 0.000000 -24.000000 1.125000 24.000000 157.500000 22.500000
+ F4 0 0.000000 4 0
+ 2.375000 -1.125000 0
+ 2.375000 -2.062500 0
+ 5.125000 -2.062500 0
+ 5.125000 -1.125000 0
+ F4 0 0.000000 4 0
+ 5.187500 -1.125000 0
+ 5.187500 -2.062500 0
+ 7.937500 -2.062500 0
+ 7.937500 -1.125000 0
+END
+TURNOUT O "Atlas O 2 Rail Right Remote Turnout 24in Radius 6022"
+ P "Normal" 1 2
+ P "Reverse" 1 3
+ E 0.000000 0.000000 270.000000
+ E 12.937500 0.000000 90.000000
+ E 10.309402 -1.826891 112.500000
+ S 0 0.000000 0.000000 0.000000 1.125000 0.000000
+ S 0 0.000000 1.125000 0.000000 12.937500 0.000000
+ C 0 0.000000 24.000000 1.125000 -24.000000 0.000000 22.500000
+ F4 0 0.000000 4 0
+ 2.375000 1.125000 0
+ 2.375000 2.062500 0
+ 5.125000 2.062500 0
+ 5.125000 1.125000 0
+ F4 0 0.000000 4 0
+ 5.187500 1.125000 0
+ 5.187500 2.062500 0
+ 7.937500 2.062500 0
+ 7.937500 1.125000 0
+END
+TURNOUT O "Atlas O 2 Rail Left Manual Turnout 24in Radius 6023"
+ P "Normal" 1 2
+ P "Reverse" 1 3
+ E 0.000000 0.000000 270.000000
+ E 12.937500 0.000000 90.000000
+ E 10.309402 1.826891 67.500000
+ S 0 0.000000 0.000000 0.000000 1.125000 0.000000
+ S 0 0.000000 1.125000 0.000000 12.937500 0.000000
+ C 0 0.000000 -24.000000 1.125000 24.000000 157.500000 22.500000
+ F4 0 0.000000 4 0
+ 2.375000 -1.125000 0
+ 2.375000 -2.062500 0
+ 5.125000 -2.062500 0
+ 5.125000 -1.125000 0
+END
+TURNOUT O "Atlas O 2 Rail Right Manual Turnout 24in Radius 6024"
+ P "Normal" 1 2
+ P "Reverse" 1 3
+ E 0.000000 0.000000 270.000000
+ E 12.937500 0.000000 90.000000
+ E 10.309402 -1.826891 112.500000
+ S 0 0.000000 0.000000 0.000000 1.125000 0.000000
+ S 0 0.000000 1.125000 0.000000 12.937500 0.000000
+ C 0 0.000000 24.000000 1.125000 -24.000000 0.000000 22.500000
+ F4 0 0.000000 4 0
+ 2.375000 1.125000 0
+ 2.375000 2.062500 0
+ 5.125000 2.062500 0
+ 5.125000 1.125000 0
+END
+TURNOUT O "Atlas O 2 Rail Wye Track 24in Radius 60XX"
+ P "Normal" 1 2
+ P "Reverse" 1 3
+ E 0.000000 0.000000 270.000000
+ E 10.309402 1.826891 67.500000
+ E 10.309402 -1.826891 112.500000
+ S 0 0.000000 0.000000 0.000000 1.125000 0.000000
+ C 0 0.000000 -24.000000 1.125000 24.000000 157.500000 22.500000
+ C 0 0.000000 24.000000 1.125000 -24.000000 0.000000 22.500000
+END
+
+TURNOUT O "Atlas O 2 Rail Curve Track 24in Radius 22.5d 6010"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.184402 -1.826891 112.500000
+ C 0 0.000000 24.000000 0.000000 -24.000000 0.000000 22.500000
+END
+TURNOUT O "Atlas O 2 Rail Curve Track 24in Radius 4.5d 6014"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.883018 -0.073984 94.500000
+ C 0 0.000000 24.000000 0.000000 -24.000000 0.000000 4.500000
+END
+
+TURNOUT O "Atlas O 2 Rail 36in Straight(flex) Track 6000"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 36.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 36.000000 0.000000
+END
+TURNOUT O "Atlas O 2 Rail 12in Straight Track 6001"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 12.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 12.000000 0.000000
+END
+TURNOUT O "Atlas O 2 Rail 4in Straight Track 6004"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 4.000000 0.000000
+END
+TURNOUT O "Atlas O 2 Rail 12in Straight Terminal 6018"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 12.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 12.000000 0.000000
+END
diff --git a/app/lib/params/O-Atlas3Rail Roadbed.xtp b/app/lib/params/O-Atlas3Rail Roadbed.xtp
new file mode 100644
index 0000000..3f898b1
--- /dev/null
+++ b/app/lib/params/O-Atlas3Rail Roadbed.xtp
@@ -0,0 +1,340 @@
+CONTENTS Atlas O 21st Century 3 Rail (Roadbed) (Roadbed)
+
+SUBCONTENTS Atlas O 21st Century 3 Rail (Roadbed) - Curve Track
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-27 13.5"" Radius Full Curve 66043"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.545942 -3.954058 135.000000
+ C 0 0.000000 13.500000 0.000000 -13.500000 0.000000 45.000000
+ A3 0 0.050000 13.500000 0.000000 -13.500000 0 0.000000 45.000000
+ A3 11579568 0.053333 15.187500 0.000000 -13.500000 0 0.000000 45.000000
+ A3 11579568 0.053333 11.812500 0.000000 -13.500000 0 0.000000 45.000000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-27 13.5"" Radius Half Curve 66044"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.166226 -1.027626 112.500000
+ C 0 0.000000 13.500000 0.000000 -13.500000 0.000000 22.500000
+ A3 0 0.050000 13.500000 0.000000 -13.500000 0 0.000000 22.500000
+ A3 11579568 0.053333 15.187500 0.000000 -13.500000 0 0.000000 22.500000
+ A3 11579568 0.053333 11.812500 0.000000 -13.500000 0 0.000000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-36 18"" Radius Full Curve 66066"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.000000 -2.411543 120.000000
+ C 0 0.000000 18.000000 0.000000 -18.000000 0.000000 30.000000
+ A3 0 0.050000 18.000000 0.000000 -18.000000 0 0.000000 30.000000
+ A3 11579568 0.053333 19.687500 0.000000 -18.000000 0 0.000000 30.000000
+ A3 11579568 0.053333 16.312500 0.000000 -18.000000 0 0.000000 30.000000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-36 18"" Radius Qtr Curve 66068"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.349471 -0.153992 97.500000
+ C 0 0.000000 18.000000 0.000000 -18.000000 0.000000 7.500000
+ A3 0 0.050000 18.000000 0.000000 -18.000000 0 0.000000 7.500000
+ A3 11579568 0.053333 19.687500 0.000000 -18.000000 0 0.000000 7.500000
+ A3 11579568 0.053333 16.312500 0.000000 -18.000000 0 0.000000 7.500000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-45 22.5"" Radius Full Curve 66045"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 11.250000 -3.014428 120.000000
+ C 0 0.000000 22.500000 0.000000 -22.500000 0.000000 30.000000
+ A3 0 0.050000 22.500000 0.000000 -22.5000000 0 0.000000 30.000000
+ A3 11579568 0.053333 24.187500 0.000000 -22.500000 0 0.000000 30.000000
+ A3 11579568 0.053333 20.812500 0.000000 -22.500000 0 0.000000 30.000000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-45 22.5"" Radius Qtr Curve 66046"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.936839 -0.192491 97.500000
+ C 0 0.000000 22.500000 0.000000 -22.500000 0.000000 7.500000
+ A3 0 0.050000 22.500000 0.000000 -22.500000 0 0.000000 7.500000
+ A3 11579568 0.053333 24.187500 0.000000 -22.500000 0 0.000000 7.500000
+ A3 11579568 0.053333 20.812500 0.000000 -22.500000 0 0.000000 7.500000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-54 27"" Radius Full Section 66060"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.332453 -2.055253 112.500000
+ C 0 0.000000 27.000000 0.000000 -27.000000 0.000000 22.500000
+ A3 0 0.050000 27.000000 0.000000 -27.000000 0 0.000000 22.500000
+ A3 11579568 0.053333 28.687500 0.000000 -27.000000 0 0.000000 22.500000
+ A3 11579568 0.053333 25.312500 0.000000 -27.000000 0 0.000000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-54 27"" Radius Half Section 66061"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.267439 -0.518797 101.250000
+ C 0 0.000000 27.000000 0.000000 -27.000000 0.000000 11.250000
+ A3 0 0.050000 27.000000 0.000000 -27.000000 0 0.000000 11.250000
+ A3 11579568 0.053333 28.687500 0.000000 -27.000000 0 0.000000 11.250000
+ A3 11579568 0.053333 25.312500 0.000000 -27.000000 0 0.000000 11.250000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-63 31.5"" Radius Full Section 66060"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 12.054528 -2.397795 112.500000
+ C 0 0.000000 31.500000 0.000000 -31.500000 0.000000 22.500000
+ A 0 0.050000 31.500000 0.000000 -31.500000 0.000000 22.500000
+ A3 11579568 0.053333 33.187500 0.000000 -31.500000 0 0.000000 22.500000
+ A3 11579568 0.053333 29.812500 0.000000 -31.500000 0 0.000000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-72 36"" Radius Full Section 66062"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 13.776604 -2.740337 112.500000
+ C 0 0.000000 36.000000 0.000000 -36.000000 0.000000 22.500000
+ A 0 0.050000 36.000000 0.000000 -36.000000 0.000000 22.500000
+ A3 11579568 0.053333 37.687500 0.000000 -36.000000 0 0.000000 22.500000
+ A3 11579568 0.053333 34.312500 0.000000 -36.000000 0 0.000000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-72 36"" Radius Half Section 66063"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.023252 -0.691730 101.250000
+ C 0 0.000000 36.000000 0.000000 -36.000000 0.000000 11.250000
+ A 0 0.050000 36.000000 0.000000 -36.000000 0.000000 11.250000
+ A3 11579568 0.053333 37.687500 0.000000 -36.000000 0 0.000000 11.250000
+ A3 11579568 0.053333 34.312500 0.000000 -36.000000 0 0.000000 11.250000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-81 40.5"" Radius Full Curve 66011"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 15.498679 -3.082879 112.500000
+ C 0 0.000000 40.500000 0.000000 -40.500000 0.000000 22.500000
+ A 0 0.050000 40.500000 0.000000 -40.500000 0.000000 22.500000
+ A3 11579568 0.053333 42.187500 0.000000 -40.500000 0 0.000000 22.500000
+ A3 11579568 0.053333 38.812500 0.000000 -40.500000 0 0.000000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-81 40.5"" Radius 1/3rd Curve 66012"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.286311 -0.346483 97.500000
+ C 0 0.000000 40.500000 0.000000 -40.500000 0.000000 7.500000
+ A 0 0.050000 40.500000 0.000000 -40.500000 0.000000 7.500000
+ A3 11579568 0.053333 42.187500 0.000000 -40.500000 0 0.000000 7.500000
+ A3 11579568 0.053333 38.812500 0.000000 -40.500000 0 0.000000 7.500000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-90 45"" Radius Full Curve 66013"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 17.220754 -3.425421 112.500000
+ C 0 0.000000 45.000000 0.000000 -45.000000 0.000000 22.500000
+ A3 0 0.050000 45.000000 0.000000 -45.000000 0 0.000000 22.500000
+ A3 11579568 0.053333 46.687500 0.000000 -45.000000 0 0.000000 22.500000
+ A3 11579568 0.053333 43.312500 0.000000 -45.000000 0 0.000000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-99 49.5"" Radius Full Curve 66014"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 18.942830 -3.767963 112.500000
+ C 0 0.000000 49.500000 0.000000 -49.500000 0.000000 22.500000
+ A3 0 0.050000 49.500000 0.000000 -49.500000 0 0.000000 22.500000
+ A3 11579568 0.053333 51.187500 0.000000 -49.500000 0 0.000000 22.500000
+ A3 11579568 0.053333 47.812500 0.000000 -49.500000 0 0.000000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-108 54"" Radius Full Curve 66016"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 20.664905 -4.110505 112.500000
+ C 0 0.000000 54.000000 0.000000 -54.000000 0.000000 22.500000
+ A3 0 0.050000 54.000000 0.000000 -54.000000 0 0.000000 22.500000
+ A3 11579568 0.053333 55.687500 0.000000 -54.000000 0 0.000000 22.500000
+ A3 11579568 0.053333 52.312500 0.000000 -54.000000 0 0.000000 22.500000
+ END
+
+
+SUBCONTENTS Atlas O 21st Century 3 Rail (Roadbed) - Turnouts
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-54 Left 66070"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 14.500000 0.000000 90.000000
+ E 10.332453 2.055253 67.500000
+ S 0 0.000000 0.000000 0.000000 14.500000 0.000000
+ C 0 0.000000 27.000000 0.000000 27.000000 157.500000 22.500000
+ L3 0 0.050000 0.000000 0.000000 0 14.500000 0.000000 0
+ A3 0 0.050000 27.000000 0.000000 27.000000 0 157.500000 22.500000
+ L3 11579568 0.053333 14.000000 1.687500 0 14.500000 1.687500 0
+ L3 11579568 0.053333 0.000000 -1.687500 0 14.500000 -1.687500 0
+ A3 11579568 0.053333 25.312500 0.000000 27.000000 0 157.500000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-54 Right 66071"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 14.500000 0.000000 90.000000
+ E 10.332453 -2.055253 112.500000
+ S 0 0.000000 0.000000 0.000000 14.500000 0.000000
+ C 0 0.000000 27.000000 0.000000 -27.000000 0.000000 22.500000
+ L3 0 0.050000 0.000000 0.000000 0 14.500000 0.000000 0
+ A3 0 0.050000 27.000000 0.000000 -27.000000 0 0.000000 22.500000
+ L3 11579568 0.053333 14.000000 -1.687500 0 14.500000 -1.687500 0
+ L3 11579568 0.053333 0.000000 1.687500 0 14.500000 1.687500 0
+ A3 11579568 0.053333 25.312500 0.000000 -27.000000 0 0.000000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-72 Left 66072"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 14.500000 0.000000 90.000000
+ E 13.776593 2.740332 67.500000
+ S 0 0.000000 0.000000 0.000000 14.500000 0.000000
+ C 0 0.000000 36.000000 0.000000 36.000000 157.500000 22.500000
+ L3 0 0.050000 0.000000 0.000000 0 14.500000 0.000000 0
+ A3 0 0.050000 36.000000 0.000000 36.000000 0 157.500000 22.500000
+ L3 11579568 0.053333 0.000000 -1.687500 0 14.500000 -1.687500 0
+ A3 11579568 0.053333 34.312500 0.000000 36.000000 0 157.500000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-72 Right 66073"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 14.500000 0.000000 90.000000
+ E 13.776593 -2.740332 112.500000
+ S 0 0.000000 0.000000 0.000000 14.500000 0.000000
+ C 0 0.000000 36.000000 0.000000 -36.000000 0.000000 22.500000
+ L3 0 0.050000 0.000000 0.000000 0 14.500000 0.000000 0
+ A3 0 0.050000 36.000000 0.000000 -36.000000 0 0.000000 22.500000
+ L3 11579568 0.053333 0.000000 1.687500 0 14.500000 1.687500 0
+ A3 11579568 0.053333 34.312500 0.000000 -36.000000 0 0.000000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-72 Wye 66074"
+ P "Left" 1 2 3
+ P "Right" 1 4 5
+ E 0.000000 0.000000 270.000000
+ E 12.976674 1.363268 78.750000
+ E 12.976674 -1.363268 101.250000
+ S 0 0.000000 0.000000 0.000000 1.250000 0.000000
+ C 0 0.000000 -49.477943 1.250000 49.477943 168.750000 11.250000
+ S 0 0.000000 10.902789 0.950729 12.976674 1.363268
+ C 0 0.000000 49.477943 1.250000 -49.477943 0.000000 11.250000
+ S 0 0.000000 10.902789 -0.950729 12.976674 -1.363268
+ L3 0 0.050000 0.000000 0.000000 0 1.177000 0.000000 0
+ A3 0 0.050000 -49.477943 1.177059 49.477943 0 168.462955 11.537121
+ L3 0 0.050000 11.035944 1.000000 0 12.976674 1.363268 0
+ A3 0 0.050000 49.477943 1.176824 -49.477943 0 0.000076 11.537121
+ L3 0 0.050000 11.035944 -1.000000 0 12.976674 -1.363268 0
+ L3 11579568 0.053333 0.000000 1.687500 0 1.250000 1.687500 0
+ L3 11579568 0.053333 0.000000 -1.687500 0 1.250000 -1.687500 0
+ A3 11579568 0.053333 47.790443 1.250000 49.477943 0 168.750000 11.2500000
+ A3 11579568 0.053333 47.790443 1.250000 -49.477943 0 0.000000 11.2500000
+ L3 11579568 0.053333 10.573453 2.605780 0 12.687500 3.050000 0
+ L3 11579568 0.053333 10.573453 -2.605780 0 12.687500 -3.050000 0
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-36 Left 66075"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ E 9.000000 2.411543 60.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ C 0 0.000000 18.000000 0.000000 18.000000 150.000000 30.00000
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ A3 0 0.050000 18.000000 0.000000 18.000000 0 150.000000 30.000000
+ L3 11579568 0.053333 0.000000 -1.687500 0 10.000000 -1.687500 0
+ A3 11579568 0.053333 16.312500 0.000000 18.000000 0 150.000000 30.000000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-36 Right 66076"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ E 9.000000 -2.411543 120.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ C 0 0.000000 18.000000 0.000000 -18.000000 0.000000 30.000000
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ A3 0 0.050000 18.000000 0.000000 -18.000000 0 0.000000 30.000000
+ L3 11579568 0.053333 0.000000 1.687500 0 10.000000 1.687500 0
+ A3 11579568 0.053333 16.312500 0.000000 -18.000000 0 0.000000 30.000000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-45 Left 66085"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ E 11.250000 3.014428 60.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ C 0 0.000000 22.500000 0.000000 22.500000 150.000000 30.00000
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ A3 0 0.050000 22.500000 0.000000 22.500000 0 150.000000 30.000000
+ L3 11579568 0.053333 0.000000 -1.687500 0 10.000000 -1.687500 0
+ A3 11579568 0.053333 20.812500 0.000000 22.500000 0 150.000000 30.000000
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) O-45 Right 66086"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ E 11.250000 -3.014428 120.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ C 0 0.000000 22.500000 0.000000 -22.500000 0.000000 30.000000
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ A3 0 0.050000 22.500000 0.000000 -22.500000 0 0.000000 30.000000
+ L3 11579568 0.053333 0.000000 1.687500 0 10.000000 1.687500 0
+ A3 11579568 0.053333 20.812500 0.000000 -22.500000 0 0.000000 30.000000
+ END
+
+
+SUBCONTENTS Atlas O 21st Century 3 Rail (Roadbed) - Straight Track
+TURNOUT O "Atlas O 3 Rail (Roadbed) 10"" Straight 66050"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ L3 11579568 0.053333 0.000000 1.687500 0 10.000000 1.687500 0
+ L3 11579568 0.053333 0.000000 -1.687500 0 10.000000 -1.687500 0
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) 4.5"" Straight 66051"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.500000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 4.500000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 4.500000 0.000000 0
+ L3 11579568 0.053333 0.000000 1.687500 0 4.500000 1.687500 0
+ L3 11579568 0.053333 0.000000 -1.687500 0 4.500000 -1.687500 0
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) 1.75"" Straight 66052"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.750000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 1.750000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 1.750000 0.000000 0
+ L3 11579568 0.053333 0.000000 1.687500 0 1.750000 1.687500 0
+ L3 11579568 0.053333 0.000000 -1.687500 0 1.750000 -1.687500 0
+ END
+TURNOUT O "Atlas O 3 Rail (Roadbed) 5.5"" Straight 66053"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.500000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 5.500000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 5.500000 0.000000 0
+ L3 11579568 0.053333 0.000000 1.687500 0 5.500000 1.687500 0
+ L3 11579568 0.053333 0.000000 -1.687500 0 5.500000 -1.687500 0
+ END
+
+
+SUBCONTENTS Atlas O 21st Century 3 Rail (Roadbed) - Crossings
+TURNOUT O "Atlas O 3 Rail (Roadbed) 90 Degree Crossing 66080"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 5.000000 0.000000 90.000000
+ E 2.500000 2.500000 360.000000
+ E 2.500000 -2.500000 180.000000
+ S 0 0.000000 0.000000 0.000000 5.000000 0.000000
+ S 0 0.000000 2.500007 2.500000 2.499993 -2.500000
+ L3 0 0.050000 0.000000 0.000000 0 5.000000 0.000000 0
+ L3 0 0.050000 2.500007 2.500000 0 2.499993 -2.500000 0
+ L3 11579568 0.053333 0.000000 1.687500 0 0.812500 1.687500 0
+ L3 11579568 0.053333 0.000000 -1.687500 0 0.812500 -1.687500 0
+ L3 11579568 0.053333 4.187500 1.687500 0 5.000000 1.687500 0
+ L3 11579568 0.053333 4.187500 -1.687500 0 5.000000 -1.687500 0
+ L3 11579568 0.053333 0.812500 1.687500 0 0.812500 2.500000 0
+ L3 11579568 0.053333 4.187500 1.687500 0 4.187500 2.500000 0
+ L3 11579568 0.053333 0.812500 -1.687500 0 0.812500 -2.500000 0
+ L3 11579568 0.053333 4.187500 -1.687500 0 4.187500 -2.500000 0
+ END
diff --git a/app/lib/params/O-Atlas3Rrail.xtp b/app/lib/params/O-Atlas3Rrail.xtp
new file mode 100644
index 0000000..b12ceb0
--- /dev/null
+++ b/app/lib/params/O-Atlas3Rrail.xtp
@@ -0,0 +1,617 @@
+CONTENTS Atlas O 21st Century 3 Rail
+
+SUBCONTENTS Atlas O 21st Century 3 Rail - Curve Track
+TURNOUT O "Atlas O 3 Rail O-27 13.5"" Radius Full Curve 6043"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.545942 -3.954058 135.000000
+ C 0 0.000000 13.500000 0.000000 -13.500000 0.000000 45.000000
+ A3 0 0.050000 13.500000 0.000000 -13.500000 0 0.000000 45.000000
+ END
+TURNOUT O "Atlas O 3 Rail O-27 13.5"" Radius Half Curve 6044"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.166226 -1.027626 112.500000
+ C 0 0.000000 13.500000 0.000000 -13.500000 0.000000 22.500000
+ A3 0 0.050000 13.500000 0.000000 -13.500000 0 0.000000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail O-36 18"" Radius Full Curve 6066"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.000000 -2.411543 120.000000
+ C 0 0.000000 18.000000 0.000000 -18.000000 0.000000 30.000000
+ A3 0 0.050000 18.000000 0.000000 -18.000000 0 0.000000 30.000000
+ END
+TURNOUT O "Atlas O 3 Rail O-36 18"" Radius Qtr Curve 6068"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.349471 -0.153992 97.500000
+ C 0 0.000000 18.000000 0.000000 -18.000000 0.000000 7.500000
+ A3 0 0.050000 18.000000 0.000000 -18.000000 0 0.000000 7.500000
+ END
+TURNOUT O "Atlas O 3 Rail O-45 22.5"" Radius Full Curve 6045"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 11.250000 -3.014428 120.000000
+ C 0 0.000000 22.500000 0.000000 -22.500000 0.000000 30.000000
+ A3 0 0.050000 22.500000 0.000000 -22.500000 0 0.000000 30.000000
+ END
+TURNOUT O "Atlas O 3 Rail O-45 22.5"" Radius Qtr Curve 6046"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.936839 -0.192491 97.500000
+ C 0 0.000000 22.500000 0.000000 -22.500000 0.000000 7.500000
+ A3 0 0.050000 22.500000 0.000000 -22.500000 0 0.000000 7.500000
+ END
+TURNOUT O "Atlas O 3 Rail O-54 27"" Radius Full Section 6060"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.332453 -2.055253 112.500000
+ C 0 0.000000 27.000000 0.000000 -27.000000 0.000000 22.500000
+ A3 0 0.050000 27.000000 0.000000 -27.000000 0 0.000000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail O-54 27"" Radius Half Section 6061"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.267439 -0.518797 101.250000
+ C 0 0.000000 27.000000 0.000000 -27.000000 0.000000 11.250000
+ A3 0 0.050000 27.000000 0.000000 -27.000000 0 0.000000 11.250000
+ END
+TURNOUT O "Atlas O 3 Rail O-63 31.5"" Radius Full Section 6060"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 12.054528 -2.397795 112.500000
+ C 0 0.000000 31.500000 0.000000 -31.500000 0.000000 22.500000
+ A3 0 0.050000 31.500000 0.000000 -31.500000 0 0.000000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail O-72 36"" Radius Full Section 6062"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 13.776604 -2.740337 112.500000
+ C 0 0.000000 36.000000 0.000000 -36.000000 0.000000 22.500000
+ A3 0 0.050000 36.000000 0.000000 -36.000000 0 0.000000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail O-72 36"" Radius Half Section 6063"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 7.023252 -0.691730 101.250000
+ C 0 0.000000 36.000000 0.000000 -36.000000 0.000000 11.250000
+ A3 0 0.050000 36.000000 0.000000 -36.000000 0 0.000000 11.250000
+ END
+TURNOUT O "Atlas O 3 Rail O-81 40.5"" Radius Full Curve 6011"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 15.498679 -3.082879 112.500000
+ C 0 0.000000 40.500000 0.000000 -40.500000 0.000000 22.500000
+ A3 0 0.050000 40.500000 0.000000 -40.500000 0 0.000000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail O-81 40.5"" Radius 1/3rd Curve 6012"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.286311 -0.346483 97.500000
+ C 0 0.000000 40.500000 0.000000 -40.500000 0.000000 7.500000
+ A3 0 0.050000 40.500000 0.000000 -40.500000 0 0.000000 7.500000
+ END
+TURNOUT O "Atlas O 3 Rail O-90 45"" Radius Full Curve 6013"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 17.220754 -3.425421 112.500000
+ C 0 0.000000 45.000000 0.000000 -45.000000 0.000000 22.500000
+ A3 0 0.050000 45.000000 0.000000 -45.000000 0 0.000000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail O-99 49.5"" Radius Full Curve 6014"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 18.942830 -3.767963 112.500000
+ C 0 0.000000 49.500000 0.000000 -49.500000 0.000000 22.500000
+ A3 0 0.050000 49.500000 0.000000 -49.500000 0 0.000000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail O-108 54"" Radius Full Curve 6016"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 20.664905 -4.110505 112.500000
+ C 0 0.000000 54.000000 0.000000 -54.000000 0.000000 22.500000
+ A3 0 0.050000 54.000000 0.000000 -54.000000 0 0.000000 22.500000
+ END
+
+
+SUBCONTENTS Atlas O 21st Century 3 Rail - Turnouts
+TURNOUT O "Atlas O 3 Rail #5 Left 6024"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 20.000000 0.000000 90.000000
+ E 20.000000 2.250000 78.463031
+ S 0 0.000000 0.000000 0.000000 1.177000 0.000000
+ S 0 0.000000 1.177000 0.000000 20.000000 0.000000
+ C 0 0.000000 -77.216289 1.177102 77.216289 168.462955 11.537121
+ S 0 0.000000 16.620459 1.560127 20.000000 2.250000
+ L3 0 0.050000 0.000000 0.000000 0 1.177000 0.000000 0
+ L3 0 0.050000 1.177000 0.000000 0 20.000000 0.000000 0
+ A3 0 0.050000 -77.216289 1.177102 77.216289 0 168.462955 11.537121
+ L3 0 0.050000 16.620459 1.560127 0 20.000000 2.250000 0
+ END
+TURNOUT O "Atlas O 3 Rail #5 Right 6025"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 20.000000 0.000000 90.000000
+ E 20.000000 -2.250000 101.536969
+ S 0 0.000000 0.000000 0.000000 1.177000 0.000000
+ S 0 0.000000 1.177000 0.000000 20.000000 0.000000
+ C 0 0.000000 77.216289 1.176693 -77.216289 0.000076 11.537121
+ S 0 0.000000 16.620459 -1.560127 20.000000 -2.250000
+ L3 0 0.050000 0.000000 0.000000 0 1.177000 0.000000 0
+ L3 0 0.050000 1.177000 0.000000 0 20.000000 0.000000 0
+ A3 0 0.050000 77.216289 1.176693 -77.216289 0 0.000076 11.537121
+ L3 0 0.050000 16.620459 -1.560127 0 20.000000 -2.250000 0
+ END
+TURNOUT O "Atlas O 3 Rail #5 Dbl-Slip 6027"
+ P "Normal" 1 2 3 0 4 5 6
+ P "Reverse" 1 7 6 0 4 8 3
+ E 0.000000 0.000000 270.000000
+ E 23.250000 0.000000 90.000000
+ E 0.234870 2.324985 281.536969
+ E 23.015130 -2.324985 101.536969
+ S 0 0.000000 0.000000 0.000000 2.500425 0.000000
+ S 0 0.000000 2.500425 0.000000 20.749575 0.000000
+ S 0 0.000000 20.749575 0.000000 23.250000 0.000000
+ S 0 0.000000 0.234870 2.324985 2.684122 1.825006
+ S 0 0.000000 2.684122 1.825006 20.565878 -1.825006
+ S 0 0.000000 20.565878 -1.825006 23.015130 -2.324985
+ C 0 0.000000 90.326089 2.500066 -90.326089 0.000076 11.537121
+ C 0 0.000000 -90.326089 20.749692 90.326065 180.000076 11.537121
+ L3 0 0.050000 0.000000 0.000000 0 2.500425 0.000000 0
+ L3 0 0.050000 2.500425 0.000000 0 20.749575 0.000000 0
+ L3 0 0.050000 20.749575 0.000000 0 23.250000 0.000000 0
+ L3 0 0.050000 0.234870 2.324985 0 2.684122 1.825006 0
+ L3 0 0.050000 2.684122 1.825006 0 20.565878 -1.825006 0
+ L3 0 0.050000 20.565878 -1.825006 0 23.015130 -2.324985 0
+ A3 0 0.050000 90.326089 2.500066 -90.326089 0 0.000076 11.537121
+ A3 0 0.050000 -90.326089 20.749692 90.326065 0 180.000076 11.537121
+ END
+TURNOUT O "Atlas O 3 Rail #7.5 Left 6021"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 24.500000 0.000000 90.000000
+ E 24.500000 2.250000 82.337738
+ S 0 0.000000 0.000000 0.000000 1.177000 0.000000
+ S 0 0.000000 1.177000 0.000000 24.500000 0.000000
+ C 0 0.000000 -98.541858 1.177131 98.541858 172.337662 7.662414
+ S 0 0.000000 14.316174 0.879891 24.500000 2.250000
+ L3 0 0.050000 0.000000 0.000000 0 1.177000 0.000000 0
+ L3 0 0.050000 1.177000 0.000000 0 24.500000 0.000000 0
+ A3 0 0.050000 -98.541858 1.177131 98.541858 0 172.337662 7.662414
+ L3 0 0.050000 14.316174 0.879891 0 24.500000 2.250000 0
+ END
+TURNOUT O "Atlas O 3 Rail #7.5 Right 6022"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 24.500000 0.000000 90.000000
+ E 24.500000 -2.250000 97.662262
+ S 0 0.000000 0.000000 0.000000 1.177000 0.000000
+ S 0 0.000000 1.177000 0.000000 24.500000 0.000000
+ C 0 0.000000 98.541858 1.176608 -98.541858 0.000076 7.662414
+ S 0 0.000000 14.316174 -0.879891 24.500000 -2.250000
+ L3 0 0.050000 0.000000 0.000000 0 1.177000 0.000000 0
+ L3 0 0.050000 1.177000 0.000000 0 24.500000 0.000000 0
+ A3 0 0.050000 98.541858 1.176608 -98.541858 0 0.000076 7.662414
+ L3 0 0.050000 14.316174 -0.879891 0 24.500000 -2.250000 0
+ END
+TURNOUT O "Atlas O 3 Rail O-54 Left 6070"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 14.500000 0.000000 90.000000
+ E 10.332453 2.055253 67.500000
+ S 0 0.000000 0.000000 0.000000 14.500000 0.000000
+ C 0 0.000000 -27.000000 0.000000 27.000000 157.500000 22.500000
+ L3 0 0.050000 0.000000 0.000000 0 14.500000 0.000000 0
+ A3 0 0.050000 -27.000000 0.000000 27.000000 0 157.500000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail O-54 Right 6071"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 14.500000 0.000000 90.000000
+ E 10.332453 -2.055253 112.500000
+ S 0 0.000000 0.000000 0.000000 14.500000 0.000000
+ C 0 0.000000 -27.000000 0.000000 -27.000000 0.000000 22.500000
+ L3 0 0.050000 0.000000 0.000000 0 14.500000 0.000000 0
+ A3 0 0.050000 -27.000000 0.000000 -27.000000 0 0.000000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail O-72 Left 6072"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 14.500000 0.000000 90.000000
+ E 13.776593 2.740332 67.500000
+ S 0 0.000000 0.000000 0.000000 14.500000 0.000000
+ C 0 0.000000 -36.000000 0.000000 36.000000 157.500000 22.500000
+ L3 0 0.050000 0.000000 0.000000 0 14.500000 0.000000 0
+ A3 0 0.050000 -36.000000 0.000000 36.000000 0 157.500000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail O-72 Right 6073"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 14.500000 0.000000 90.000000
+ E 13.776593 -2.740332 112.500000
+ S 0 0.000000 0.000000 0.000000 14.500000 0.000000
+ C 0 0.000000 -36.000000 0.000000 -36.000000 0.000000 22.500000
+ L3 0 0.050000 0.000000 0.000000 0 14.500000 0.000000 0
+ A3 0 0.050000 -36.000000 0.000000 -36.000000 0 0.000000 22.500000
+ END
+TURNOUT O "Atlas O 3 Rail O-72 Wye 6074"
+ P "Left" 1 2 3
+ P "Right" 1 4 5
+ E 0.000000 0.000000 270.000000
+ E 12.976674 1.363268 78.750000
+ E 12.976674 -1.363268 101.250000
+ S 0 0.000000 0.000000 0.000000 1.250000 0.000000
+ C 0 0.000000 -49.477943 1.250000 49.477943 168.750000 11.250000
+ S 0 0.000000 10.902789 0.950729 12.976674 1.363268
+ C 0 0.000000 49.477943 1.250000 -49.477943 0.000000 11.250000
+ S 0 0.000000 10.902789 -0.950729 12.976674 -1.363268
+ L3 0 0.050000 0.000000 0.000000 0 1.250000 0.000000 0
+ A3 0 0.050000 -49.477943 1.250000 49.477943 0 168.500000 11.250000
+ L3 0 0.050000 10.902668 0.950705 0 12.976674 1.363268 0
+ A3 0 0.050000 49.477943 1.250000 -49.477943 0 0.000000 11.250000
+ L3 0 0.050000 10.902668 -0.950705 0 12.976674 -1.363268 0
+ END
+TURNOUT O "Atlas O 3 Rail O-36 Left 6075"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ E 9.000000 2.411543 60.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ C 0 0.000000 -18.000000 0.000000 18.000000 150.000000 30.00000
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ A3 0 0.050000 -18.000000 0.000000 18.000000 0 150.000000 30.000000
+ END
+TURNOUT O "Atlas O 3 Rail O-36 Right 6076"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ E 9.000000 -2.411543 120.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ C 0 0.000000 -18.000000 0.000000 -18.000000 0.000000 30.000000
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ A3 0 0.050000 -18.000000 0.000000 -18.000000 0 0.000000 30.000000
+ END
+TURNOUT O "Atlas O 3 Rail O-72/O-54 Left Curve 6077"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 20.000528 6.067094 56.250000
+ E 19.091883 7.908117 45.000000
+ C 0 0.000000 -27.000000 0.000000 27.000000 135.000000 45.000000
+ C 0 0.000000 -36.000000 0.000000 36.000000 146.250000 33.750000
+ A3 0 0.050000 -36.000000 0.000000 36.000000 0 146.250000 33.750000
+ A3 0 0.050000 -27.000000 0.000000 27.000000 0 135.000000 45.000000
+ END
+TURNOUT O "Atlas O 3 Rail O-72/O-54 Right Curve 6078"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 20.000528 -6.067094 123.750000
+ E 19.091883 -7.908117 135.000000
+ C 0 0.000000 -27.000000 0.000000 -27.000000 0.000000 45.000000
+ C 0 0.000000 -36.000000 0.000000 -36.000000 0.000000 33.750000
+ A3 0 0.050000 -36.000000 0.000000 -36.000000 0 0.000000 33.750000
+ A3 0 0.050000 -27.000000 0.000000 -27.000000 0 0.000000 45.000000
+ END
+TURNOUT O "Atlas O 3 Rail O-45 Left 6085"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ E 11.250000 3.014428 60.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ C 0 0.000000 -22.500000 0.000000 22.500000 150.000000 30.00000
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ A3 0 0.050000 -22.500000 0.000000 22.500000 0 150.000000 30.000000
+ END
+TURNOUT O "Atlas O 3 Rail O-45 Right 6086"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ E 11.250000 -3.014428 120.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ C 0 0.000000 -22.500000 0.000000 -22.500000 0.000000 30.000000
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ A3 0 0.050000 -22.500000 0.000000 -22.500000 0 0.000000 30.000000
+ END
+
+
+SUBCONTENTS Atlas O 21st Century 3 Rail - Straight Track
+TURNOUT O "Atlas O 3 Rail 40"" Straight 6058"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 40.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 40.000000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 40.000000 0.000000 0
+ END
+TURNOUT O "Atlas O 3 Rail 10"" Straight 6050"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ END
+TURNOUT O "Atlas O 3 Rail 4.5"" Straight 6051"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.500000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 4.500000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 4.500000 0.000000 0
+ END
+TURNOUT O "Atlas O 3 Rail 1.75"" Straight 6052"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.750000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 1.750000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 1.750000 0.000000 0
+ END
+TURNOUT O "Atlas O 3 Rail 5.5"" Straight 6053"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.500000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 5.500000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 5.500000 0.000000 0
+ END
+TURNOUT O "Atlas O 3 Rail 1.25"" Straight 6015"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.2500000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 1.2500000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 1.2500000 0.000000 0
+ END
+
+
+
+SUBCONTENTS Atlas O 21st Century 3 Rail - Crossings
+TURNOUT O "Atlas O 3 Rail 90 Degree Crossing 6080"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 5.000000 0.000000 90.000000
+ E 2.500000 2.500000 360.000000
+ E 2.500000 -2.500000 180.000000
+ S 0 0.000000 0.000000 0.000000 5.000000 0.000000
+ S 0 0.000000 2.500000 2.500000 2.499993 -2.500000
+ L3 0 0.050000 0.000000 0.000000 0 5.000000 0.000000 0
+ L3 0 0.050000 2.500000 2.500000 0 2.500000 -2.500000 0
+ END
+TURNOUT O "Atlas O 3 Rail 45 Degree Crossing 6081"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 8.250000 0.000000 90.000000
+ E 1.208179 2.916810 315.000000
+ E 7.041821 -2.916810 135.000000
+ S 0 0.000000 0.000000 0.000000 8.250000 0.000000
+ S 0 0.000000 1.208179 2.916810 7.041821 -2.916810
+ L3 0 0.050000 0.000000 0.000000 0 8.250000 0.000000 0
+ L3 0 0.050000 1.208179 2.916810 0 7.041821 -2.916810 0
+ END
+TURNOUT O "Atlas O 3 Rail 22.5 Degree Crossing 6082"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 10.750000 0.000000 90.000000
+ E 0.409148 2.056923 292.500000
+ E 10.340852 -2.056923 112.500000
+ S 0 0.000000 0.000000 0.000000 10.750000 0.000000
+ S 0 0.000000 0.409148 2.056923 10.340852 -2.056923
+ L3 0 0.050000 0.000000 0.000000 0 10.750000 0.000000 0
+ L3 0 0.050000 0.409148 2.056923 0 10.340852 -2.056923 0
+ END
+TURNOUT O "Atlas O 3 Rail 60 Degree Crossing 6083"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ E 2.500000 4.330127 330.000000
+ E 7.500000 -4.330127 150.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ S 0 0.000000 2.500000 4.330127 7.500000 -4.330127
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ L3 0 0.050000 2.500000 4.330127 0 7.500000 -4.330127 0
+ END
+TURNOUT O "Atlas O 3 Rail 30 Degree Crossing 6084"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ E 0.669873 2.500000 300.000000
+ E 9.330127 -2.500000 120.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ S 0 0.000000 0.669873 2.500000 9.330127 -2.500000
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ L3 0 0.050000 0.669873 2.500000 0 9.330127 -2.500000 0
+ END
+
+SUBCONTENTS Atlas O 21st Century 3 Rail - Misc Track
+TURNOUT O "Atlas O 3 Rail 10"" Terminal Track 6010"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ F4 0 0.000000 4 0
+ 4.000000 -1.100000 0
+ 4.000000 -2.250000 0
+ 6.000000 -2.250000 0
+ 6.000000 -1.100000 0
+ END
+TURNOUT O "Atlas O 3 Rail 1.75"" Uncoupler Track 6059"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.750000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 1.750000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 1.750000 0.000000 0
+ F4 0 0.000000 4 0
+ 0.500000 0.500000 0
+ 0.500000 -0.500000 0
+ 1.250000 -0.500000 0
+ 1.250000 0.500000 0
+ END
+TURNOUT O "Atlas O 3 Rail 10"" Bumper Track 6040"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ F4 0 0.000000 4 0
+ 8.000000 0.625000 0
+ 8.000000 -0.625000 0
+ 10.000000 -0.625000 0
+ 10.000000 0.625000 0
+ END
+TURNOUT O "Atlas O 3 Rail 40"" Single Track Pratt Truss Bridge 6920"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 40.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 40.000000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 40.000000 0.000000 0
+ L3 0 0.100000 0.000000 -1.500000 0 40.000000 -1.500000 0
+ L3 0 0.100000 0.000000 1.500000 0 40.000000 1.500000 0
+ L3 0 0.100000 6.000000 -1.500000 0 6.000000 1.500000 0
+ L3 0 0.100000 13.000000 -1.500000 0 13.000000 1.500000 0
+ L3 0 0.100000 20.000000 -1.500000 0 20.000000 1.500000 0
+ L3 0 0.100000 27.000000 -1.500000 0 27.000000 1.500000 0
+ L3 0 0.100000 34.000000 -1.500000 0 34.000000 1.500000 0
+ L3 0 0.100000 6.000000 -1.500000 0 13.000000 1.500000 0
+ L3 0 0.100000 13.000000 -1.500000 0 20.000000 1.500000 0
+ L3 0 0.100000 20.000000 -1.500000 0 27.000000 1.500000 0
+ L3 0 0.100000 27.000000 -1.500000 0 34.000000 1.500000 0
+ END
+TURNOUT O "Atlas O 3 Rail 40"" Double Track Pratt Truss Bridge 6921"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 40.000000 0.000000 90.000000
+ E 0.000000 4.500000 270.000000
+ E 40.000000 4.500000 90.000000
+ S 0 0.000000 0.000000 0.000000 40.000000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 40.000000 0.000000 0
+ S 0 0.000000 0.000000 4.500000 40.000000 4.500000
+ L3 0 0.050000 0.000000 4.500000 0 40.000000 4.500000 0
+ L3 0 0.100000 0.000000 -1.500000 0 40.000000 -1.500000 0
+ L3 0 0.100000 0.000000 6.000000 0 40.000000 6.000000 0
+ L3 0 0.100000 6.000000 -1.500000 0 6.000000 6.000000 0
+ L3 0 0.100000 13.000000 -1.500000 0 13.000000 6.000000 0
+ L3 0 0.100000 20.000000 -1.500000 0 20.000000 6.000000 0
+ L3 0 0.100000 27.000000 -1.500000 0 27.000000 6.000000 0
+ L3 0 0.100000 34.000000 -1.500000 0 34.000000 6.000000 0
+ L3 0 0.100000 6.000000 -1.500000 0 13.000000 6.000000 0
+ L3 0 0.100000 13.000000 -1.500000 0 20.000000 6.000000 0
+ L3 0 0.100000 20.000000 -1.500000 0 27.000000 6.000000 0
+ L3 0 0.100000 27.000000 -1.500000 0 34.000000 6.000000 0
+ END
+TURNOUT O "Atlas O 3 Rail 20"" Single Track Deck Girder Bridge 6923"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 20.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 20.000000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 20.000000 0.000000 0
+ L3 0 0.100000 0.000000 -0.750000 0 20.000000 -0.750000 0
+ L3 0 0.100000 0.000000 0.750000 0 20.000000 0.750000 0
+ END
+
+TURNOUT O "Atlas O 3 Rail 18"" Single Track Plate Girder Bridge 6918"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 18.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 0 18.000000 0.000000 0
+ L3 0 0.050000 0.000000 0.000000 0 18.000000 0.000000 0
+ L3 0 0.100000 1.500000 -2.000000 0 16.500000 -2.000000 0
+ L3 0 0.100000 1.500000 2.000000 0 16.500000 2.000000 0
+ L3 0 0.100000 1.500000 -2.000000 0 1.500000 -1.250000 0
+ L3 0 0.100000 4.500000 -2.000000 0 4.500000 -1.250000 0
+ L3 0 0.100000 7.500000 -2.000000 0 7.500000 -1.250000 0
+ L3 0 0.100000 10.500000 -2.000000 0 10.500000 -1.250000 0
+ L3 0 0.100000 13.500000 -2.000000 0 13.500000 -1.250000 0
+ L3 0 0.100000 16.500000 -2.000000 0 16.500000 -1.250000 0
+ L3 0 0.100000 1.500000 1.250000 0 1.500000 2.000000 0
+ L3 0 0.100000 4.500000 1.250000 0 4.500000 2.000000 0
+ L3 0 0.100000 7.500000 1.250000 0 7.500000 2.000000 0
+ L3 0 0.100000 10.500000 1.250000 0 10.500000 2.000000 0
+ L3 0 0.100000 13.500000 1.250000 0 13.500000 2.000000 0
+ L3 0 0.100000 16.500000 1.250000 0 16.500000 2.000000 0
+ END
+TURNOUT O "Atlas O 3 Rail 24"" Turntable 6910"
+ P "1" 1
+ P "2" 2
+ P "3" 3
+ P "4" 4
+ P "5" 5
+ P "6" 6
+ P "7" 7
+ P "8" 8
+ P "9" 9
+ P "10" 10
+ P "11" 11
+ P "12" 12
+ P "13" -1
+ P "14" -2
+ P "15" -3
+ P "16" -4
+ P "17" -5
+ P "18" -6
+ P "19" -7
+ P "20" -8
+ P "21" -9
+ P "22" -10
+ P "23" -11
+ P "24" -12
+ E 0.000000 12.000000 0.000000
+ E -0.000000 -12.000000 180.000000
+ E 3.105829 11.591110 15.000000
+ E -3.105829 -11.591110 195.000000
+ E 6.000000 10.392305 30.000000
+ E -6.000000 -10.392305 210.000000
+ E 8.485281 8.485281 45.000000
+ E -8.485281 -8.485281 225.000000
+ E 10.392305 6.000000 60.000000
+ E -10.392305 -6.000000 240.000000
+ E 11.591110 3.105829 75.000000
+ E -11.591110 -3.105829 255.000000
+ E 12.000000 0.000000 90.000000
+ E -12.000000 -0.000000 270.000000
+ E 11.591110 -3.105829 105.000000
+ E -11.591110 3.105829 285.000000
+ E 10.392305 -6.000000 120.000000
+ E -10.392305 6.000000 300.000000
+ E 8.485281 -8.485281 135.000000
+ E -8.485281 8.485281 315.000000
+ E 6.000000 -10.392305 150.000000
+ E -6.000000 10.392305 330.000000
+ E 3.105829 -11.591110 165.000000
+ E -3.105829 11.591110 345.000000
+#0/180
+ S 16777215 0 0.000000 12.000000 0.000000 -12.000000
+#15/195
+ S 16777215 0 3.105829 11.591110 -3.105829 -11.591110
+#30/210
+ S 16777215 0 6.000000 10.392305 -6.000000 -10.392305
+#45/225
+ S 16777215 0 8.485281 8.485281 -8.485281 -8.485281
+#60/240
+ S 16777215 0 10.392305 6.000000 -10.392305 -6.000000
+#75/255
+ S 16777215 0 11.591110 3.105829 -11.591110 -3.105829
+#90/270
+ S 16777215 0 -12.000000 0.000000 12.000000 0.000000
+#105/285
+ S 16777215 0 11.591110 -3.105829 -11.591110 3.105829
+#120/300
+ S 16777215 0 10.392305 -6.000000 -10.392305 6.000000
+#135/315
+ S 16777215 0 8.485281 -8.485281 -8.485281 8.485281
+#150/330
+ S 16777215 0 6.000000 -10.392305 -6.000000 10.392305
+#165/345
+ S 16777215 0 3.105829 -11.591110 -3.105829 11.591110
+ A3 0 0.053333 12.000000 0.000000 0.000000 0 0.000000 360.000000
+ A3 0 0.053333 13.000000 0.000000 0.000000 0 0.000000 360.000000
+ END
diff --git a/app/lib/params/O-AtlasIndustrial3Rail.xtp b/app/lib/params/O-AtlasIndustrial3Rail.xtp
new file mode 100644
index 0000000..71efd5f
--- /dev/null
+++ b/app/lib/params/O-AtlasIndustrial3Rail.xtp
@@ -0,0 +1,151 @@
+CONTENTS Atlas O Industrial 3 Rail
+
+SUBCONTENTS Atlas O Industrial 3 Rail - Curve Track
+TURNOUT O "Atlas O Industrial 3 Rail O-36 18"" Radius Full Curve 1001066"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 9.000000 -2.411543 120.000000
+ C 0 0.000000 18.000000 0.000000 -18.000000 0.000000 30.000000
+ A3 0 0.050000 18.000000 0.000000 -18.000000 0 0.000000 30.000000
+ A3 11579568 0.053333 19.687500 0.000000 -18.000000 0 0.000000 30.000000
+ A3 11579568 0.053333 16.312500 0.000000 -18.000000 0 0.000000 30.000000
+ END
+TURNOUT O "Atlas O Industrial 3 Rail O-36 18"" Radius Qtr Curve 1001068"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 2.349471 -0.153992 97.500000
+ C 0 0.000000 18.000000 0.000000 -18.000000 0.000000 7.500000
+ A3 0 0.050000 18.000000 0.000000 -18.000000 0 0.000000 7.500000
+ A3 11579568 0.053333 19.687500 0.000000 -18.000000 0 0.000000 7.500000
+ A3 11579568 0.053333 16.312500 0.000000 -18.000000 0 0.000000 7.500000
+ END
+
+
+SUBCONTENTS Atlas O Industrial 3 Rail - Turnouts
+TURNOUT O "Atlas O Industrial 3 Rail O-36 Left 1001075"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ E 9.000000 2.411543 60.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ C 0 0.000000 -18.000000 0.000000 18.000000 150.000000 30.00000
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ L3 11579568 0.053333 0.000000 -1.687500 0 10.000000 -1.687500 0
+ A3 0 0.050000 18.000000 0.000000 18.000000 0 150.000000 30.000000
+ A3 11579568 0.053333 16.312500 0.000000 18.000000 0 150.000000 30.000000
+ END
+TURNOUT O "Atlas O Industrial 3 Rail O-36 Right 1001076"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ E 9.000000 -2.411543 120.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ C 0 0.000000 -18.000000 0.000000 -18.000000 0.000000 30.000000
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ L3 11579568 0.053333 0.000000 1.687500 0 10.000000 1.687500 0
+ A3 0 0.050000 18.000000 0.000000 -18.000000 0 0.000000 30.000000
+ A3 11579568 0.053333 16.312500 0.000000 -18.000000 0 0.000000 30.000000
+ END
+
+
+SUBCONTENTS Atlas O Industrial 3 Rail - Straight Track
+TURNOUT O "Atlas O Industrial 3 Rail 10"" Straight 1001050"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ L3 11579568 0.053333 0.000000 1.687500 0 10.000000 1.687500 0
+ L3 11579568 0.053333 0.000000 -1.687500 0 10.000000 -1.687500 0
+ END
+TURNOUT O "Atlas O Industrial 3 Rail 4.5"" Straight 1001051"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.500000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 4.500000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 4.500000 0.000000 0
+ L3 11579568 0.053333 0.000000 1.687500 0 4.500000 1.687500 0
+ L3 11579568 0.053333 0.000000 -1.687500 0 4.500000 -1.687500 0
+ END
+TURNOUT O "Atlas O Industrial 3 Rail 1.75"" Straight 1001052"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.750000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 1.750000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 1.750000 0.000000 0
+ L3 11579568 0.053333 0.000000 1.687500 0 1.750000 1.687500 0
+ L3 11579568 0.053333 0.000000 -1.687500 0 1.750000 -1.687500 0
+ END
+TURNOUT O "Atlas O Industrial 3 Rail 5.5"" Straight 1001053"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.500000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 5.500000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 5.500000 0.000000 0
+ L3 11579568 0.053333 0.000000 1.687500 0 5.500000 1.687500 0
+ L3 11579568 0.053333 0.000000 -1.687500 0 5.500000 -1.687500 0
+ END
+
+
+SUBCONTENTS Atlas O Industrial 3 Rail - Crossings
+TURNOUT O "Atlas O Industrial 3 Rail 90 Degree Crossing 1001080"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 5.000000 0.000000 90.000000
+ E 2.500000 2.500000 360.000000
+ E 2.500000 -2.500000 180.000000
+ S 0 0.000000 0.000000 0.000000 5.000000 0.000000
+ S 0 0.000000 2.500007 2.500000 2.499993 -2.500000
+ L3 0 0.050000 0.000000 0.000000 0 5.000000 0.000000 0
+ L3 0 0.050000 2.500007 2.500000 0 2.499993 -2.500000 0
+ L3 11579568 0.053333 0.000000 1.687500 0 0.812500 1.687500 0
+ L3 11579568 0.053333 0.000000 -1.687500 0 0.812500 -1.687500 0
+ L3 11579568 0.053333 4.187500 1.687500 0 5.000000 1.687500 0
+ L3 11579568 0.053333 4.187500 -1.687500 0 5.000000 -1.687500 0
+ L3 11579568 0.053333 0.812500 1.687500 0 0.812500 2.500000 0
+ L3 11579568 0.053333 4.187500 1.687500 0 4.187500 2.500000 0
+ L3 11579568 0.053333 0.812500 -1.687500 0 0.812500 -2.500000 0
+ L3 11579568 0.053333 4.187500 -1.687500 0 4.187500 -2.500000 0
+ END
+
+
+SUBCONTENTS Atlas O Industrial 3 Rail - Misc Track
+TURNOUT O "Atlas O Industrial 3 Rail 10"" Terminal Track 1001010"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ L3 11579568 0.053333 0.000000 1.687500 0 10.000000 1.687500 0
+ L3 11579568 0.053333 0.000000 -1.687500 0 4.250000 -1.687500 0
+ L3 11579568 0.053333 4.250000 -1.375000 0 4.250000 -2.000000 0
+ L3 11579568 0.053333 4.250000 -2.000000 0 5.750000 -2.000000 0
+ L3 11579568 0.053333 5.750000 -1.375000 0 5.750000 -2.000000 0
+ L3 11579568 0.053333 5.750000 -1.687500 0 10.000000 -1.687500 0
+ A3 11579568 0.020000 0.100000 4.750000 -1.687500 0 0.000000 360.000000
+ A3 11579568 0.020000 0.100000 5.250000 -1.687500 0 0.000000 360.000000
+ L3 11579568 0.020000 4.750000 -1.587500 0 4.750000 -1.787500 0
+ L3 11579568 0.020000 5.250000 -1.587500 0 5.250000 -1.787500 0
+ END
+TURNOUT O "Atlas O Industrial 3 Rail 10"" Uncoupling Track 1001059"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ A3 11579568 0.050000 0.312500 5.000000 0 0.000000 0.000000 360.000000
+ G3 11579568 0.000000 0.250000 5.000000 0.000000 0
+ L3 11579568 0.053333 0.000000 1.687500 0 10.000000 1.687500 0
+ L3 11579568 0.053333 0.000000 -1.687500 0 10.000000 -1.687500 0
+ END
+TURNOUT O "Atlas O Industrial 3 Rail 10"" Transition Track 1001096"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ L3 0 0.050000 0.000000 0.000000 0 10.000000 0.000000 0
+ L3 11579568 0.053333 0.000000 1.687500 0 10.000000 1.687500 0
+ L3 11579568 0.053333 0.000000 -1.687500 0 10.000000 -1.687500 0
+ END
diff --git a/app/lib/params/O-Bassett-Lowke (discontinued).xtp b/app/lib/params/O-Bassett-Lowke (discontinued).xtp
index 743cbec..0ea4091 100644
--- a/app/lib/params/O-Bassett-Lowke (discontinued).xtp
+++ b/app/lib/params/O-Bassett-Lowke (discontinued).xtp
@@ -88,12 +88,12 @@ TURNOUT O "Bassett-Lowke O Scale 18""/457.2mm 15d Right Turnout RTS"
C 0 0.000000 35.370079 0.000000 -35.370079 0.000000 15.000000
END
TURNOUT O "Bassett-Lowke O Scale Three-Way Turnout(need to find data) TWT"
- P "Normal" 1
+# P "Normal" 1
E 0.000000 0.000000 270.000000
Z 0 0.000000 0.000000 0.000000 0 72.000000 "Future Addition - Need to find Data"
END
TURNOUT O "Bassett-Lowke O Scale Wye Turnout(need to find data) WYE"
- P "Normal" 1
+# P "Normal" 1
E 0.000000 0.000000 270.000000
Z 0 0.000000 0.000000 0.000000 0 72.000000 "Future Addition - Need to find Data"
END
@@ -180,7 +180,7 @@ TURNOUT O "Bassett-Lowke O Scale 24""/609.6mm Right Parallel Turnout RTP"
SUBCONTENTS Bassett-Lowke O Scale - Crossing
TURNOUT O "Bassett-Lowke O Scale Long Crossing(need to find data) DLC"
- P "Normal" 1
+# P "Normal" 1
E 0.000000 0.000000 270.000000
Z 0 0.000000 0.000000 0.000000 0 72.000000 "Future Addition - Need to find Data"
END
diff --git a/app/lib/params/O-ETS TramTrack.xtp b/app/lib/params/O-ETS TramTrack.xtp
index 3c7be29..b66640e 100644
--- a/app/lib/params/O-ETS TramTrack.xtp
+++ b/app/lib/params/O-ETS TramTrack.xtp
@@ -43,7 +43,7 @@ TURNOUT O "Electric Train System O Scale TramTrack 120mm Connecting Track 14"
L 11579568 0.053333 0.000000 -1.377953 4.724409 -1.377953
END
TURNOUT O "Electric Train System O Scale TramTrack 120mm 90° Crosss 27"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 4.724409 0.000000 90.000000
E 2.362205 2.362205 0.000000
diff --git a/app/lib/params/O-Lehnhardt Tramrails.xtp b/app/lib/params/O-Lehnhardt Tramrails.xtp
index 8420497..e2f9912 100644
--- a/app/lib/params/O-Lehnhardt Tramrails.xtp
+++ b/app/lib/params/O-Lehnhardt Tramrails.xtp
@@ -60,7 +60,7 @@ TURNOUT O "Lehnhardt O Scale TramTrack 30mm (1.181"") Straight 3000-50-107"
SUBCONTENTS Lehnhardt O Scale TramTrack - Misc Track
TURNOUT O "Lehnhardt O Scale TramTrack 120mm 90° Crosss 3000-50-109"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 4.724409 0.000000 90.000000
E 2.362205 2.362205 0.000000
diff --git a/app/lib/params/O-atlaso3rail.xtp b/app/lib/params/O-atlaso3rail.xtp
index b6ff8c7..88be042 100644
--- a/app/lib/params/O-atlaso3rail.xtp
+++ b/app/lib/params/O-atlaso3rail.xtp
@@ -1,4 +1,4 @@
-CONTENTS Atlas O 21st Century 3 Rail
+CONTENTS Atlas O 21st Century 3-Rail
SUBCONTENTS Atlas O 21st Century 3 Rail - Curve Track
TURNOUT O "Atlas O 3 Rail O-27 13.5"" Radius Full Curve AT-6043"
@@ -487,7 +487,7 @@ TURNOUT O "Atlas O 3 Rail 40"" Single Track Pratt Truss Bridge AT-6920"
L 0 0.100000 27.000000 -1.500000 34.000000 1.500000
END
TURNOUT O "Atlas O 3 Rail 40"" Double Track Pratt Truss Bridge AT-6921"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 40.000000 0.000000 90.000000
E 0.000000 3.250000 270.000000
@@ -588,7 +588,7 @@ TURNOUT O "Atlas O 3 Rail 24"" Turntable AT-6910"
E -6.000000 10.392305 330.000000
E 3.105829 -11.591110 165.000000
E -3.105829 11.591110 345.000000
-#0/180
+#0/180
S 16777215 0 0.000000 12.000000 0.000000 -12.000000
#15/195
S 16777215 0 3.105829 11.591110 -3.105829 -11.591110
diff --git a/app/lib/params/On30-FastTrack.xtp b/app/lib/params/On30-FastTrack.xtp
index 2b8c4b0..274fe89 100644
--- a/app/lib/params/On30-FastTrack.xtp
+++ b/app/lib/params/On30-FastTrack.xtp
@@ -1,4 +1,4 @@
-CONTENTS On30/On2½ FastTrack Turnouts
+CONTENTS On30/On2.5 Fast Tracks Turnouts
#Created By Dwyane Ward 13 SEP 2009
TURNOUT On30 "Fast Tracks #4 WYE On30 TT-On30-Y-4"
U "Wye Turnout" "" "Fast Tracks" "#4 WYE On30" "TT-ON30-Y-4" 9.937500 7.180762 0.625000 0.625000 7.180762 9.937500 0.000000 0.031250 0
diff --git a/app/lib/params/On30-MicroEngineering.xtp b/app/lib/params/On30-MicroEngineering.xtp
new file mode 100644
index 0000000..1fdb7dd
--- /dev/null
+++ b/app/lib/params/On30-MicroEngineering.xtp
@@ -0,0 +1,50 @@
+CONTENTS Micro Engineering On30 Track
+
+SUBCONTENTS Micro Engineering On30 Code 83 - Turnouts
+TURNOUT On30 "ME Code 83 #5 Left-Hand Turnout 14-403"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 11.165222 0.000000 90.000000
+ E 10.774413 1.359561 78.579000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 11.165222 0.000000
+ C 0 0.000000 -33.949987 0.649645 33.949987 168.578924 11.421152
+ S 0 0.000000 7.372344 0.672272 10.774413 1.359561
+END
+TURNOUT On30 "ME Code 83 #5 Right-Hand Turnout 14-404"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 11.165222 0.000000 90.000000
+ E 10.774413 -1.359561 101.421000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 11.165222 0.000000
+ C 0 0.000000 33.949987 0.649465 -33.949987 0.000076 11.421152
+ S 0 0.000000 7.372344 -0.672272 10.774413 -1.359561
+END
+
+
+SUBCONTENTS Micro Engineering On30 Code 70 - Turnouts
+TURNOUT On30 "ME Code 70 #5 Left-Hand Turnout 14-453"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 11.165222 0.000000 90.000000
+ E 10.774413 1.359561 78.579000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 11.165222 0.000000
+ C 0 0.000000 -33.949987 0.649645 33.949987 168.578924 11.421152
+ S 0 0.000000 7.372344 0.672272 10.774413 1.359561
+END
+TURNOUT On30 "ME Code 70 #5 Right-Hand Turnout 14-454"
+ P "Normal" 1 2
+ P "Reverse" 1 3 4
+ E 0.000000 0.000000 270.000000
+ E 11.165222 0.000000 90.000000
+ E 10.774413 -1.359561 101.421000
+ S 0 0.000000 0.000000 0.000000 0.649600 0.000000
+ S 0 0.000000 0.649600 0.000000 11.165222 0.000000
+ C 0 0.000000 33.949987 0.649465 -33.949987 0.000076 11.421152
+ S 0 0.000000 7.372344 -0.672272 10.774413 -1.359561
+END
diff --git a/app/lib/params/Proto-AmSlotCar.xtp b/app/lib/params/Proto-AmSlotCar.xtp
index 1ec22a8..28a2c10 100644
--- a/app/lib/params/Proto-AmSlotCar.xtp
+++ b/app/lib/params/Proto-AmSlotCar.xtp
@@ -4,7 +4,7 @@
#
#============================================================
#############################################################################################
-CONTENTS North American Prototypes
+CONTENTS North American Slot-Car Prototype Cars
CARPROTO "CAR1" 2 10101 240.000 84.000 0 0 180.000 0.000
L3 0 2.133333 624.673301 118.951986 0 1.188030 118.951986 0
END
diff --git a/app/lib/params/RemcoMightyCasey.xtp b/app/lib/params/RemcoMightyCasey.xtp
new file mode 100644
index 0000000..6a78189
--- /dev/null
+++ b/app/lib/params/RemcoMightyCasey.xtp
@@ -0,0 +1,42 @@
+CONTENTS Remco Mighty Casey Track Sections
+TURNOUT RMC "Remco Straight Track 7510"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 21.7500000 0.000000 90.000000
+ S 0 0.000000 0.000000 0.000000 21.7500000 0.000000
+ END
+TURNOUT RMC "Remco Curve Track 7517"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ #E 23.334524 -9.665476 135.0
+ #C 0 0.000000 33.0 0.0 -33.0 0.0 45.0
+ E 23.334508 9.665461 45.000000
+ C 0 0.000000 -33.000000 0.000000 33.000000 135.000000 45.000000
+ END
+TURNOUT RMC "Remco Crossing Track 7508"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 21.7500000 0.000000 90.000000
+ E 10.875000 10.875000 0.000000
+ E 10.875000 -10.875000 180.000000
+ S 0 0.000000 0.000000 0.000000 21.7500000 0.000000
+ S 0 0.000000 10.875000 10.875000 10.875000 -10.875000
+ END
+TURNOUT RMC "Remco Left Switch 7524L"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 21.7500000 0.000000 90.000000
+ E 23.334508 9.665461 45.000000
+ S 0 0.000000 0.000000 0.000000 21.7500000 0.000000
+ C 0 0.000000 33.000000 0.000000 33.000000 135.000000 45.000000
+ END
+TURNOUT RMC "Remco Right Switch 7524R"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 21.7500000 0.000000 90.000000
+ E 23.334508 -9.665461 135.000000
+ S 0 0.000000 0.000000 0.000000 21.7500000 0.000000
+ C 0 0.000000 33.000000 0.000000 -33.000000 0.000000 45.000000
+ END
diff --git a/app/lib/params/S-Lionel AF Fastrack.xtp b/app/lib/params/S-Lionel AF Fastrack.xtp
new file mode 100644
index 0000000..25245f0
--- /dev/null
+++ b/app/lib/params/S-Lionel AF Fastrack.xtp
@@ -0,0 +1,306 @@
+CONTENTS Lionel AF Fastrack S Scale Track
+SUBCONTENTS Lionel S Scale AF Fastrack Track - Straight Track
+TURNOUT S "Lionel AF Fastrack 1.375"" Straight 6-47988"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.375000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 1.375000 0.000000
+ L 11579568 0.053333 0.000000 1.281250 1.375000 1.281250
+ L 11579568 0.053333 0.000000 -1.281250 1.375000 -1.281250
+END
+TURNOUT S "Lionel AF Fastrack 1.75"" Straight 6-47987"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 1.750000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 1.750000 0.000000
+ L 11579568 0.053333 0.000000 1.281250 1.750000 1.281250
+ L 11579568 0.053333 0.000000 -1.281250 1.75000 -1.281250
+END
+TURNOUT S "Lionel AF Fastrack 4.5"" Straight 6-47986"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 4.500000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 4.500000 0.000000
+ L 11579568 0.053333 0.000000 1.281250 4.500000 1.281250
+ L 11579568 0.053333 0.000000 -1.281250 4.500000 -1.281250
+END
+TURNOUT S "Lionel AF Fastrack 5"" Straight 6-49867"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 5.000000 0.000000
+ L 11579568 0.053333 0.000000 1.281250 5.000000 1.281250
+ L 11579568 0.053333 0.000000 -1.281250 5.000000 -1.281250
+END
+TURNOUT S "Lionel AF Fastrack 10"" Straight 6-49852"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 10.000000 0.000000
+ L 11579568 0.053333 0.000000 1.281250 10.000000 1.281250
+ L 11579568 0.053333 0.000000 -1.281250 10.000000 -1.281250
+END
+TURNOUT S "Lionel AF Fastrack 30"" Straight 6-49862"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 30.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 30.000000 0.000000
+ L 11579568 0.053333 0.000000 1.281250 30.000000 1.281250
+ L 11579568 0.053333 0.000000 -1.281250 30.000000 -1.281250
+END
+
+SUBCONTENTS Lionel AF Fastrack S Scale Track - Curve Track
+TURNOUT S "Lionel AF Fastrack 20"" 30D Curve 6-49853"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.000000 -2.679492 120.000000
+ C 0 0 20.000000 0.000000 -20.000000 0.000000 30.000000
+ A 11579568 0.053333 21.281250 0.000000 -20.000000 0.000000 30.000000
+ A 11579568 0.053333 18.718750 0.000000 -20.000000 0.000000 30.000000
+END
+TURNOUT S "Lionel AF Fastrack 20"" 15D Curve 6-49878"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.176381 -0.681483 105.000000
+ C 0 0 20.000000 0.000000 -20.000000 0.000000 15.000000
+ A 11579568 0.053333 21.281250 0.000000 -20.000000 0.000000 15.000000
+ A 11579568 0.053333 18.718750 0.000000 -20.000000 0.000000 15.000000
+END
+TURNOUT S "Lionel AF Fastrack 27"" 30D Curve 6-49859"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 13.500000 -3.617314 120.000000
+ C 0 0 27.000000 0.000000 -27.000000 0.000000 30.000000
+ A 11579568 0.053333 28.281250 0.000000 -27.000000 0.000000 30.000000
+ A 11579568 0.053333 25.718750 0.000000 -27.000000 0.000000 30.000000
+END
+TURNOUT S "Lionel AF Fastrack 27"" 15D Curve 6-49892"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 6.988114 -0.920003 105.000000
+ C 0 0 27.000000 0.000000 -27.000000 0.000000 15.000000
+ A 11579568 0.053333 28.281250 0.000000 -27.000000 0.000000 15.000000
+ A 11579568 0.053333 25.718750 0.000000 -27.000000 0.000000 15.000000
+END
+
+SUBCONTENTS Lionel AF Fastrack S Scale Track - Crossings
+TURNOUT S "Lionel AF Fastrack 45d CrossOver Track 6-49863"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ E 1.464459 3.535527 315.000000
+ E 8.535541 -3.535527 135.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ S 0 0.000000 1.464459 3.535527 8.535541 -3.535527
+ L 11579568 0.053333 -0.000003 -1.281250 4.374997 -1.281244
+ L 11579568 0.053333 8.124997 -1.281239 9.999997 -1.281237
+ L 11579568 0.053333 0.000000 1.281250 1.875000 1.281252
+ L 11579568 0.053333 5.625000 1.281257 10.000000 1.281263
+ L 11579568 0.053333 0.558477 2.629548 1.884305 1.303726
+ L 11579568 0.053333 4.535960 -1.347920 7.629559 -4.441506
+ L 11579568 0.053333 2.370439 4.441508 5.464037 1.347922
+ L 11579568 0.053333 8.115693 -1.303723 9.441521 -2.629546
+END
+TURNOUT S "Lionel AF Fastrack 90d CrossOver Track 6-49864"
+ P "Normal" 1 0 2
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ E 5.000000 5.000000 0.000000
+ E 5.000000 -5.000000 180.000000
+ S 0 0 0.000000 0.000000 10.000000 0.000000
+ S 0 0 5.000000 5.000000 5.000000 -5.000000
+ L 11579568 0.053333 0.000000 1.281250 3.718750 1.281250
+ L 11579568 0.053333 0.000000 -1.281250 3.718750 -1.281250
+ L 11579568 0.053333 6.281250 1.281250 10.000000 1.281250
+ L 11579568 0.053333 6.281250 -1.281250 10.000000 -1.281250
+ L 11579568 0.053333 3.718750 5.000000 3.718750 1.281250
+ L 11579568 0.053333 6.281250 5.000000 6.281250 1.281250
+ L 11579568 0.053333 3.718750 -1.281250 3.718750 -5.000000
+ L 11579568 0.053333 6.281250 -1.281250 6.281250 -5.000000
+END
+
+
+SUBCONTENTS Lionel AF Fastrack S Scale Track - Misc Track
+TURNOUT S "Lionel AF Fastrack 5"" Bumper 6-49866"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0 0.000000 0.000000 5.000000 0.000000
+ L 11579568 0.053333 0.000000 1.281250 6.400000 1.281250
+ L 11579568 0.053333 0.000000 -1.281250 6.400000 -1.281250
+ L 11579568 0.053333 6.400000 1.281250 6.400000 -1.281250
+ L 0 0.070000 4.000000 0.000000 5.000000 0.437000
+ L 0 0.070000 4.000000 0.000000 5.000000 -0.437000
+ L 0 0.070000 4.000000 0.437000 4.000000 -0.437000
+END
+TURNOUT S "Lionel AF Fastrack 3.625"" Earthen Bumper 6-49893"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ S 0 0 0.000000 0.000000 3.625000 0.000000
+ L 11579568 0.053333 0.000000 1.281250 3.625000 1.281250
+ L 11579568 0.053333 0.000000 -1.281250 3.625000 -1.281250
+ L 11579568 0.053333 3.625000 1.281250 3.625000 -1.281250
+ F 12566463 0.000000 4
+ 1.5000000 1.281250 0
+ 3.625000 1.281250 0
+ 3.625000 -1.281250 0
+ 1.500000 -1.281250 0
+ F 0 0.000000 4
+ 1.5000000 0.500000 0
+ 2.000000 0.500000 0
+ 2.000000 -0.500000 0
+ 1.500000 -0.500000 0
+END
+TURNOUT S "Lionel AF Fastrack 5"" Transition Track 6-49858"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 5.000000 0.000000
+ L 11579568 0.053333 0.000000 1.281250 5.000000 1.281250
+ L 11579568 0.053333 0.000000 -1.281250 5.000000 -1.281250
+END
+TURNOUT S "Lionel AF Fastrack 5"" Uncoupler 6-49895"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 5.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 5.000000 0.000000
+ L 11579568 0.053333 0.000000 1.281250 5.000000 1.281250
+ L 11579568 0.053333 0.000000 -1.281250 5.000000 -1.281250
+ L 11579568 0.053333 1.000000 0.000000 4.000000 0.000000
+ F 12566463 0.000000 4
+ 1.5000000 0.250000 0
+ 3.500000 0.250000 0
+ 3.500000 -0.250000 0
+ 1.500000 -0.250000 0
+END
+TURNOUT S "Lionel AF Fastrack 10"" Terminal Track 6-49854"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 10.000000 0.000000
+ L 11579568 0.053333 0.000000 1.281250 10.000000 1.281250
+ L 11579568 0.053333 0.000000 -1.281250 10.000000 -1.281250
+END
+TURNOUT S "Lionel AF Fastrack 10"" Activator Rail 6-49085"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 10.000000 0.000000
+ L 0 0.053333 2.500000 -0.882812 7.500000 -0.882812
+ L 11579568 0.053333 0.000000 1.281250 10.000000 1.281250
+ L 11579568 0.053333 0.000000 -1.281250 10.000000 -1.281250
+END
+TURNOUT S "Lionel AF Fastrack 10"" FC Terminal Track 6-49896"
+ P "Normal" 1
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ S 0 0 0.000000 0.000000 10.000000 0.000000
+ L 11579568 0.053333 0.000000 1.281250 10.000000 1.281250
+ L 11579568 0.053333 0.000000 -1.281250 10.000000 -1.281250
+ F 12566463 0.000000 4
+ 4.500000 -1.000000 0
+ 5.500000 -1.000000 0
+ 5.500000 -1.500000 0
+ 4.500000 -1.500000 0
+END
+
+SUBCONTENTS Lionel AF Fastrack S Scale Track - Turnout
+TURNOUT S "Lionel AF Fastrack 20"" Left Manual Turnout 6-49868"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ E 10.000000 2.679492 60.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ C 0 0 20.000000 0.000000 20.000000 150.000000 30.000000
+ A 11579568 0.053333 21.281250 0.000000 20.000000 150.000000 2.500000
+ A 11579568 0.053333 18.718750 0.000000 20.000000 150.000000 30.000000
+ L 11579568 0.053333 0.000000 -1.281250 10.000000 -1.281252
+END
+TURNOUT S "Lionel AF Fastrack 20"" Right Manual Turnout 6-49869"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ E 10.000000 -2.679492 120.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ C 0 0 20.000000 0.000000 -20.000000 0.000000 30.000000
+ A 11579568 0.053333 21.281250 0.000000 -20.000000 27.500000 2.500000
+ A 11579568 0.053333 18.718750 0.000000 -20.000000 0.000000 30.000000
+ L 11579568 0.053333 0.000000 1.281250 10.000000 1.281252
+END
+TURNOUT S "Lionel AF Fastrack 20"" Left Remote Turnout 6-47941"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ E 10.000000 2.679492 60.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ C 0 0 20.000000 0.000000 20.000000 150.000000 30.000000
+ A 11579568 0.053333 21.281250 0.000000 20.000000 150.000000 2.500000
+ A 11579568 0.053333 18.718750 0.000000 20.000000 150.000000 30.000000
+ L 11579568 0.053333 0.000000 -1.281250 10.000000 -1.281252
+END
+TURNOUT S "Lionel AF Fastrack 20"" Right Remote Turnout 6-47940"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 10.000000 0.000000 90.000000
+ E 10.000000 -2.679492 120.000000
+ S 0 0.000000 0.000000 0.000000 10.000000 0.000000
+ C 0 0 20.000000 0.000000 -20.000000 0.000000 30.000000
+ A 11579568 0.053333 21.281250 0.000000 -20.000000 27.500000 2.500000
+ A 11579568 0.053333 18.718750 0.000000 -20.000000 0.000000 30.000000
+ L 11579568 0.053333 0.000000 1.281250 10.000000 1.281252
+END
+TURNOUT S "Lionel AF Fastrack 27"" Left Manual Turnout 6-49883"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 15.000000 0.000000 90.000000
+ E 13.500000 3.617314 60.000000
+ S 0 0.000000 0.000000 0.000000 15.000000 0.000000
+ C 0 0 27.000000 0.000000 27.000000 150.000000 30.000000
+ A 11579568 0.053333 28.281250 0.000000 27.000000 150.000000 5.500000
+ A 11579568 0.053333 25.718750 0.000000 27.000000 150.000000 30.000000
+ L 11579568 0.053333 0.000000 -1.281250 15.000000 -1.281252
+ L 11579568 0.053333 11.750000 1.281250 15.000000 1.281252
+END
+TURNOUT S "Lionel AF Fastrack 27"" Right Manual Turnout 6-49884"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 15.000000 0.000000 90.000000
+ E 13.500000 -3.617314 120.000000
+ S 0 0.000000 0.000000 0.000000 15.000000 0.000000
+ C 0 0 27.000000 0.000000 -27.000000 0.000000 30.000000
+ A 11579568 0.053333 28.281250 0.000000 -27.000000 24.500000 5.500000
+ A 11579568 0.053333 25.718750 0.000000 -27.000000 0.000000 30.000000
+ L 11579568 0.053333 0.000000 1.281250 15.000000 1.281252
+ L 11579568 0.053333 11.750000 -1.281250 15.000000 -1.281252
+END
+TURNOUT S "Lionel AF Fastrack 27"" Left Remote Turnout 6-47885"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 15.000000 0.000000 90.000000
+ E 13.500000 3.617314 60.000000
+ S 0 0.000000 0.000000 0.000000 15.000000 0.000000
+ C 0 0 27.000000 0.000000 27.000000 150.000000 30.000000
+ A 11579568 0.053333 28.281250 0.000000 27.000000 150.000000 5.500000
+ A 11579568 0.053333 25.718750 0.000000 27.000000 150.000000 30.000000
+ L 11579568 0.053333 0.000000 -1.281250 15.000000 -1.281252
+ L 11579568 0.053333 11.750000 1.281250 15.000000 1.281252
+END
+TURNOUT S "Lionel AF Fastrack 27"" Right Remote Turnout 6-47886"
+ P "Normal" 1
+ P "Reverse" 2
+ E 0.000000 0.000000 270.000000
+ E 15.000000 0.000000 90.000000
+ E 13.500000 -3.617314 120.000000
+ S 0 0.000000 0.000000 0.000000 15.000000 0.000000
+ C 0 0 27.000000 0.000000 -27.000000 0.000000 30.000000
+ A 11579568 0.053333 28.281250 0.000000 -27.000000 24.500000 5.500000
+ A 11579568 0.053333 25.718750 0.000000 -27.000000 0.000000 30.000000
+ L 11579568 0.053333 0.000000 1.281250 15.000000 1.281252
+ L 11579568 0.053333 11.750000 -1.281250 15.000000 -1.281252
+END
diff --git a/app/lib/params/S_ACG_18.824in Radius Track.xtp b/app/lib/params/S_ACG_18.824in Radius Track.xtp
index b8556f4..4d6a8e5 100644
--- a/app/lib/params/S_ACG_18.824in Radius Track.xtp
+++ b/app/lib/params/S_ACG_18.824in Radius Track.xtp
@@ -1,4 +1,4 @@
-CONTENTS A.C. Gilbert / American Flyer S-Scale Std Gauge Track 18.824" Radius 1946 to l
+CONTENTS A.C. Gilbert / American Flyer S Scale Std Gauge Track 18.824" Radius 1946 to l
TURNOUT S "A.C. Gilbert / American Flyer - 18.824 inch radius curves Full Straight 700"
U "Straight Section" "" "A.C. Gilbert / American Flyer - 18.824 inch radius curves" "Full Straight" "700" 10.000000 0.000000 0.010417 8421504
P "Normal" 1
diff --git a/app/lib/params/S_ACG_20.000 Track.xtp b/app/lib/params/S_ACG_20.000 Track.xtp
index 1f379db..3b50119 100644
--- a/app/lib/params/S_ACG_20.000 Track.xtp
+++ b/app/lib/params/S_ACG_20.000 Track.xtp
@@ -1,4 +1,4 @@
-CONTENTS A.C. Gilbert / American Flyer S-Scale Std Gauge Track 20" Radius
+CONTENTS A.C. Gilbert / American Flyer S Scale Std Gauge Track 20" Radius
TURNOUT S "A.C. Gilbert / American Flyer Full Straight 10"" 700"
U "Straight Section" "" "A.C. Gilbert / American Flyer" "Full Straight 10""" "700" 10.000000 3.500000 0.031250 8421504
P "Normal" 1
diff --git a/app/lib/params/TT-Kuehn.xtp b/app/lib/params/TT-Kuehn.xtp
index 4c75418..4bd25da 100644
--- a/app/lib/params/TT-Kuehn.xtp
+++ b/app/lib/params/TT-Kuehn.xtp
@@ -33,8 +33,8 @@ TURNOUT TT "Kuehn Track G128 Straight 5.07 128.7mm 71128"
TURNOUT TT "Kuehn Track G640 Straight(flex) 25.19 640mm 71640"
P "Normal" 1
E 0.000000 0.000000 270.000000
- E 25.196850 0.000000 90.000000
- S 0 0 0.000000 0.000000 25.196850 0.000000
+ E 25.334646 0.000000 90.000000
+ S 0 0 0.000000 0.000000 25.334646 0.000000
END
SUBCONTENTS Kuehn TT-Scale Track - Curve Track
@@ -130,3 +130,19 @@ TURNOUT TT "Kuehn Track BWR Right Curve Turnout 72631"
C 0 0 12.637795 1.732283 -12.637795 0.000000 30.000000
C 0 0 12.637795 0.000000 -12.637795 0.000000 30.000000
END
+TURNOUT TT "Kuehn Track DKW20 Double-Slip Turnout 72600"
+ P "Normal" 1 2 3 0 4 5 6
+ P "Reverse" 1 7 6 0 4 8 3
+ E 0.000000 0.000000 270.000000
+ E 5.066929 0.000000 90.000000
+ E 0.152785 0.866492 290.000000
+ E 4.914144 -0.866492 110.000000
+ S 0 0.000000 0.000000 0.000000 0.944050 0.000000
+ S 0 0.000000 0.944050 0.000000 4.122879 0.000000
+ S 0 0.000000 4.122879 0.000000 5.066929 0.000000
+ S 0 0.000000 0.152785 0.866492 1.039832 0.543628
+ S 0 0.000000 1.039832 0.543628 4.027097 -0.543628
+ S 0 0.000000 4.027097 -0.543628 4.914144 -0.866492
+ C 0 0.000000 9.014168 0.944014 -9.014168 0.000076 20.000152
+ C 0 0.000000 -9.014168 4.122890 9.014164 180.000076 20.000152
+ END
diff --git a/app/lib/params/TT-TilligAdvBeddingTrack.xtp b/app/lib/params/TT-TilligAdvBeddingTrack.xtp
index d3db931..e944fcf 100644
--- a/app/lib/params/TT-TilligAdvBeddingTrack.xtp
+++ b/app/lib/params/TT-TilligAdvBeddingTrack.xtp
@@ -1,4 +1,4 @@
-CONTENTS Pilz/Tillig Advance Bedding Track System
+CONTENTS Pilz/Tillig TT Scale Advance Bedding Track System
SUBCONTENTS Pilz/Tillig TT-Scale Advance Bedding Track - Straight Track
TURNOUT TT "Pilz/Tillig Bedding Track BG1 Straight 6.535 166mm 83701"
P "Normal" 1
@@ -130,6 +130,7 @@ TURNOUT TT "Pilz/Tillig Bedding Track Bumper Track 1.692 43mm 83700"
TURNOUT TT "Pilz/Tillig Bedding Track Bedding Gravel End 1.692 43mm 83961"
P "Normal" 1
E 0.000000 0.000000 270.000000
+ S 0 0 0.000000 0.000000 1.692913 0.000000
L 11579568 0.053333 0.000000 0.629921 0.428571 0.629921
L 11579568 0.053333 0.000000 -0.629921 0.428571 -0.629921
L 11579568 0.053333 0.428571 0.629921 0.428571 -0.629921
@@ -137,8 +138,8 @@ TURNOUT TT "Pilz/Tillig Bedding Track Bedding Gravel End 1.692 43mm 83961"
SUBCONTENTS Pilz/Tillig TT-Scale Advance Bedding Track - Turnouts
TURNOUT TT "Tillig BW-Left 83817/819"
- P "Normal" 1
- P "Reverse" 2 3
+ P "Normal" 1
+ P "Reverse" 2 3
E 0.000000 0.000000 270.000000
E 5.098425 0.000000 90.000000
E 4.985016 0.845476 75.000000
@@ -150,7 +151,7 @@ TURNOUT TT "Tillig BW-Left 83817/819"
L 11579568 0.053333 3.433938 1.082007 4.821981 1.453932
END
TURNOUT TT "Tillig BW-Right 83816/818"
- P "Normal" 1
+ P "Normal" 1
P "Reverse" 2 3
E 0.000000 0.000000 270.000000
E 5.098425 0.000000 90.000000
diff --git a/app/lib/params/TT-Trak Modules.xtp b/app/lib/params/TT-Trak Modules.xtp
index 1fb0a27..a305df5 100644
--- a/app/lib/params/TT-Trak Modules.xtp
+++ b/app/lib/params/TT-Trak Modules.xtp
@@ -1,4 +1,4 @@
-CONTENTS TT Scale TT-Track Standard Modules
+CONTENTS TT Scale TT Track Standard Modules
SUBCONTENTS TT-Scale TT-Trak Modules - Straight Modules
TURNOUT TT "TT-Trak Base - Straight - 300mm x 497mm TTT-S01"
P "P0" 2 3 6 0 1 4 5
@@ -416,4 +416,3 @@ TURNOUT TT "TT-Trak Base - Junction Broad - 634mm x 1028mm TTT-J02"
L3 11579568 0.052083 16.653542 -2.322864 0 13.070864 -2.322854 0
L3 11579568 0.052083 16.653546 -1.063022 0 13.070868 -1.063012 0
END
-
diff --git a/app/lib/params/TilligAdvTT.xtp b/app/lib/params/TilligAdvTT.xtp
index 7670769..dbe0c46 100644
--- a/app/lib/params/TilligAdvTT.xtp
+++ b/app/lib/params/TilligAdvTT.xtp
@@ -1,4 +1,4 @@
-CONTENTS Pilz/Tillig Advance Track System
+CONTENTS Pilz/Tillig Advance Track System TT Scale
SUBCONTENTS Pilz/Tillig TT-Scale Advance Track - Straight Track
TURNOUT TT "Pilz/Tillig Track G1 Straight 6.535 166mm 83101"
P "Normal" 1
@@ -136,8 +136,8 @@ TURNOUT TT "Pilz/Tillig Track Isolation Track 1.633 41.5mm 83150"
SUBCONTENTS Pilz/Tillig TT-Scale Advance Track - Turnouts
TURNOUT TT "Tillig EW1-left 15d 83322/27"
- P "Normal" 1
- P "Reverse" 2 3
+ P "Normal" 1
+ P "Reverse" 2 3
E 0.000000 0.000000 270.000000
E 5.098425 0.000000 90.000000
E 4.985016 0.845476 75.000000
@@ -146,7 +146,7 @@ TURNOUT TT "Tillig EW1-left 15d 83322/27"
S 0 0.000000 3.596973 0.473551 4.985016 0.845476
END
TURNOUT TT "Tillig EW1-right 15d 83321/26"
- P "Normal" 1
+ P "Normal" 1
P "Reverse" 2 3
E 0.000000 0.000000 270.000000
E 5.098425 0.000000 90.000000
@@ -321,4 +321,3 @@ TURNOUT TT "Tillig K2-30 Crossing 83170"
S 0 0.000000 0.000000 0.000000 3.267717 0.000000
S 0 0.000000 0.218894 0.816927 3.048823 -0.816927
END
-
diff --git a/app/lib/params/TilligH0EliteCode83.xtp b/app/lib/params/TilligH0EliteCode83.xtp
index 90e66bf..6412aff 100644
--- a/app/lib/params/TilligH0EliteCode83.xtp
+++ b/app/lib/params/TilligH0EliteCode83.xtp
@@ -1,4 +1,4 @@
-CONTENTS Tillig H0 Elite Code 83
+CONTENTS Tillig HO Elite Code 83
TURNOUT HO "Tillig Holzschwellen-Flexgleis, 890 mm 85125"
U "Straight Section" "" "Tillig" "Holzschwellen-Flexgleis, 890 mm" "85125" 35.039370 1.811024 0.000000 13276512
P "Normal" 1
diff --git a/app/lib/params/TilligH0e.xtp b/app/lib/params/TilligH0e.xtp
index 4813b06..52d2bc0 100644
--- a/app/lib/params/TilligH0e.xtp
+++ b/app/lib/params/TilligH0e.xtp
@@ -1,4 +1,4 @@
-CONTENTS Tillig Elite Schmalspurgleise H0e
+CONTENTS Tillig Elite Schmalspurgleise HOe HOn30 009
TURNOUT HOn30 "Tillig Flexgleis H0e - 680mm 85626"
U "Straight Section" "" "Tillig" "Flexgleis H0e - 680mm" "85626" 26.771654 1.377953 0.000000 13276512
P "Normal" 1
diff --git a/app/lib/params/TilligH0m.xtp b/app/lib/params/TilligH0m.xtp
index 819756e..0e4b5b6 100644
--- a/app/lib/params/TilligH0m.xtp
+++ b/app/lib/params/TilligH0m.xtp
@@ -1,4 +1,4 @@
-CONTENTS Tillig Elite Schmalspurgleise H0m
+CONTENTS Tillig Elite Schmalspurgleise HOm
TURNOUT HOm "Tillig Flexgleis H0m - 680mm 85627"
U "Straight Section" "" "Tillig" "Flexgleis H0m - 680mm" "85627" 26.771654 1.574803 0.000000 13276512
P "Normal" 1
diff --git a/app/lib/params/USA-G.xtp b/app/lib/params/USA-G.xtp
index a3b5cf0..3b75495 100644
--- a/app/lib/params/USA-G.xtp
+++ b/app/lib/params/USA-G.xtp
@@ -1,4 +1,4 @@
-CONTENTS USA Trains
+CONTENTS USA Trains
SUBCONTENTS USA Trains Straight Track
TURNOUT G "USA Trains 6" Straight R81015"
P "Normal" 1
diff --git a/app/lib/params/Z-Fasttrack.xtp b/app/lib/params/Z-Fasttrack.xtp
index ea41936..5740704 100644
--- a/app/lib/params/Z-Fasttrack.xtp
+++ b/app/lib/params/Z-Fasttrack.xtp
@@ -1,5 +1,5 @@
-CONTENTS FastTrack Handlaid Z Scale Track System
-SUBCONTENTS FastTrack Handlaid Z Scale Track System - Turnouts
+CONTENTS Fast Tracks Handlaid Z Scale Track System
+SUBCONTENTS FastTracks Handlaid Z Scale Track System - Turnouts
TURNOUT Z "FastTrack Handlaid Z Scale Track System FastTracks #4 Lefthand Turnout 2.8""(71mm) TT-Z-T-4L"
P "Normal" 1 2
P "Reverse" 1 3 4
diff --git a/app/lib/params/Z-Rokuhan.xtp b/app/lib/params/Z-Rokuhan.xtp
index f10b698..cb37237 100644
--- a/app/lib/params/Z-Rokuhan.xtp
+++ b/app/lib/params/Z-Rokuhan.xtp
@@ -539,7 +539,7 @@ END
SUBCONTENTS Rokuhan Z-Scale - Shinkansen Viaduct System Double Straight Track
TURNOUT Z "Rokuhan Viaduct Double Straight 110mm S019"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 4.330709 0.000000 90.000000
E 0.000000 0.984252 270.000000
@@ -592,7 +592,7 @@ END
SUBCONTENTS Rokuhan Z-Scale - Shinkansen Viaduct System Curve Double Track
TURNOUT Z "Rokuhan Viaduct Curved 195/220mm 30 S013"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 3.838583 -1.028545 120.000000
E 0.000000 0.984252 270.000000
@@ -605,7 +605,7 @@ TURNOUT Z "Rokuhan Viaduct Curved 195/220mm 30 S013"
A 11579568 0.019685 8.361417 0.000000 -7.677165 0.000000 30.000000
END
TURNOUT Z "Rokuhan Viaduct Curved 195/220mm 45 R0x"
- P "Normal" 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 5.428575 -2.248590 135.000000
E 0.000000 0.000000 270.000000
@@ -883,7 +883,7 @@ TURNOUT Z "Rokuhan Single Trk Truss Bridge 220mm(Red) R042"
L 16711680 0.053333 7.795275 -0.375000 7.795275 0.375000
END
TURNOUT Z "Rokuhan Double Trk Truss Bridge 220mm(Green) R043"
- P "Normal" 1
+ P "Normal" 1 0 2
E 8.661417 0.000000 90.000000
E 0.000000 0.000000 270.000000
E 8.661417 0.984252 90.000000
@@ -913,7 +913,7 @@ TURNOUT Z "Rokuhan Double Trk Truss Bridge 220mm(Green) R043"
L 32896 0.053333 8.042743 -0.375000 8.042743 1.359252
END
TURNOUT Z "Rokuhan Double Trk Truss Bridge 220mm(Beige) R044"
- P "Normal" 1
+ P "Normal" 1 0 2
E 8.661417 0.000000 90.000000
E 0.000000 0.000000 270.000000
E 8.661417 0.984252 90.000000
@@ -943,7 +943,7 @@ TURNOUT Z "Rokuhan Double Trk Truss Bridge 220mm(Beige) R044"
L 15720651 0.053333 8.042743 -0.375000 8.042743 1.359252
END
TURNOUT Z "Rokuhan Double Trk Truss Bridge 220mm(Brown) R060"
- P "Normal" 1
+ P "Normal" 1 0 2
E 8.661417 0.000000 90.000000
E 0.000000 0.000000 270.000000
E 8.661417 0.984252 90.000000
@@ -1099,6 +1099,10 @@ TURNOUT Z "Rokuhan Turntable 170mm S037"
P "6" 16 17 18
P "7" 19 20 21
P "8" 22 23 24
+ P "9" 25 26 27
+ P "10" 28 29 30
+ P "11" 31 32 33
+ P "12" 34 35 36
E 0.000000 3.346457 0.000000
E 0.866127 3.232429 15.000000
E 1.673228 2.898117 30.000000
@@ -1150,8 +1154,11 @@ TURNOUT Z "Rokuhan Turntable 170mm S037"
S 0 0.031250 2.898117 -1.673228 2.216207 -1.279528
S 16777215 0.031250 2.216207 -1.279528 -2.216207 1.279528
S 0 0.031250 -2.216207 1.279528 -2.898117 1.673228
+# S 0 0.031250 2.366302 -2.366302 1.809525 -1.809525
+# S 16777215 0.031250 1.809525 -2.366302 -1.809525 2.366302
+# S 0 0.031250 -1.809525 1.809525 -2.366302 2.366302
S 0 0.031250 2.366302 -2.366302 1.809525 -1.809525
- S 16777215 0.031250 1.809525 -2.366302 -1.809525 2.366302
+ S 16777215 0.031250 1.809525 -1.809525 -1.809525 1.809525
S 0 0.031250 -1.809525 1.809525 -2.366302 2.366302
S 0 0.031250 1.673228 -2.898117 1.279528 -2.216207
S 16777215 0.031250 1.279528 -2.216207 -1.279528 2.216207
diff --git a/app/lib/params/Z-T-Trak.xtp b/app/lib/params/Z-T-Trak.xtp
index 7e0f124..704cf79 100644
--- a/app/lib/params/Z-T-Trak.xtp
+++ b/app/lib/params/Z-T-Trak.xtp
@@ -1,9 +1,9 @@
-CONTENTS Z-Scale T-Trak Modules
+CONTENTS Z Scale T-Trak Modules
# Based on Z Scale T-Trak Module Standards
# 195mm and 220mm curves used for all corner, end cap and junction modules
# Rokuhan Z-Scale Track used for all modules design
-# Junction module requries a modified straight track
+# Junction module requries a modified straight track
SUBCONTENTS Z-Scale T-Trak Modules - Straight Single Length
TURNOUT Z "Z-Scale T-Trak Single 330mm X 286mm deep ZMS-01"
@@ -107,7 +107,7 @@ TURNOUT Z "Z-Scale T-Trak End Cap 592mm X 295mm ZMEC-01"
SUBCONTENTS Z-Scale T-Trak Modules - Junction
TURNOUT Z "Z-Scale T-Trak Tee Junction 415mm X 295mm ZMJ-01"
- P "P0" 1 0 2
+ P "P0" 1 0 2 0 3
E 0.000000 0.000000 270.000000
E 0.000000 -0.984252 270.000000
E 7.677165 7.677165 0.000000
@@ -129,6 +129,3 @@ TURNOUT Z "Z-Scale T-Trak Tee Junction 415mm X 295mm ZMJ-01"
L3 0 0.000000 0.039370 7.637795 0 0.039370 -8.622047 0
L3 0 0.000000 11.653543 7.637795 0 11.653543 -8.622047 0
END
-
-
-
diff --git a/app/lib/params/arnold.xtp b/app/lib/params/arnold.xtp
index aa11805..e3770ba 100644
--- a/app/lib/params/arnold.xtp
+++ b/app/lib/params/arnold.xtp
@@ -1,4 +1,4 @@
-CONTENTS Arnold-Tracks N-Scale
+CONTENTS Arnold-Tracks N Scale
# From 'Märklin Complete Program 1994/95 E'
# Elementos diseñados por MAA - 7.086614
# Straight Section Design by MAA - 22.200000
@@ -220,7 +220,7 @@ TURNOUT N "Arnold Three Way Turnout 1749"
P "Normal" 1 6
P "Right" 1 4 5
E 0.000000 0.000000 270.000000
- E 4.370079 0.590551 75.000000
+ E 4.370079 0.590551 75.000000
E 4.370079 -0.590551 105.000000
E 4.370079 0.000000 90.000000
S 0 0 0.000000 0.000000 0.353100 0.000000
@@ -230,4 +230,3 @@ TURNOUT N "Arnold Three Way Turnout 1749"
S 0 0 3.917422 -0.469256 4.370079 -0.590551
S 0 0 0.353100 0.000000 4.370079 0.000000
END
-
diff --git a/app/lib/params/atl83ho.xtp b/app/lib/params/atl83ho.xtp
index 8f70bc4..03f5086 100644
--- a/app/lib/params/atl83ho.xtp
+++ b/app/lib/params/atl83ho.xtp
@@ -492,7 +492,7 @@ TURNOUT HO "Atlas C83 9"" Single-Track Thru-Girder Bridge 70000027"
L 11579568 0.050000 8.250000 -1.000000 8.250000 -0.625000
END
TURNOUT HO "Atlas C83 9"" Double-Track Thru-Girder Bridge 70000028"
- P "P0" 1 0 1
+ P "P0" 1 0 2
E 0.000000 0.000000 270.000000
E 9.000000 0.000000 90.000000
E 0.000000 -2.000000 270.000000
diff --git a/app/lib/params/atlaso2rail.xtp b/app/lib/params/atlaso2rail.xtp
index ef1ee88..7f0e69c 100644
--- a/app/lib/params/atlaso2rail.xtp
+++ b/app/lib/params/atlaso2rail.xtp
@@ -170,6 +170,7 @@ TURNOUT O "Atlas O 2 Rail 45 Degree Crossing At-7081"
SUBCONTENTS Atlas O 2 Rail - Misc Track
TURNOUT O "Atlas O 2 Rail 40"" Single Track Pratt Truss Bridge AT-7920"
+ P "Normal" 1
E 0.000000 0.000000 270.000000
E 40.000000 0.000000 90.000000
S 0 0.000000 0.000000 0.000000 40.000000 0.000000
@@ -186,6 +187,7 @@ TURNOUT O "Atlas O 2 Rail 40"" Single Track Pratt Truss Bridge AT-7920"
L 0 0.100000 27.000000 -1.500000 34.000000 1.500000
END
TURNOUT O "Atlas O 2 Rail 40"" Double Track Pratt Truss Bridge AT-7921"
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 40.000000 0.000000 90.000000
E 0.000000 3.250000 270.000000
@@ -205,6 +207,7 @@ TURNOUT O "Atlas O 2 Rail 40"" Double Track Pratt Truss Bridge AT-7921"
L 0 0.100000 27.000000 -1.500000 34.000000 4.750000
END
TURNOUT O "Atlas O 2 Rail 20"" Single Track Deck Girder Bridge AT-7923"
+ P "Normal" 1
E 0.000000 0.000000 270.000000
E 20.000000 0.000000 90.000000
S 0 0.000000 0.000000 0.000000 20.000000 0.000000
diff --git a/app/lib/params/br.xtp b/app/lib/params/br.xtp
index c154736..b6150c6 100644
--- a/app/lib/params/br.xtp
+++ b/app/lib/params/br.xtp
@@ -1,4 +1,4 @@
-CONTENTS British stock
+CONTENTS British Rolling-stock Prototype Cars
CARPROTO "01" 2 10101 284.000 102.000 0 0 72.000 284.000
F3 8355711 0.000000 4
280.000000 0.000000 0
diff --git a/app/lib/params/dpm-ho.xtp b/app/lib/params/dpm-ho.xtp
index 5ae06c1..d74704a 100644
--- a/app/lib/params/dpm-ho.xtp
+++ b/app/lib/params/dpm-ho.xtp
@@ -1,4 +1,4 @@
-CONTENTS Design Preservation Models HO-scale Buildings
+CONTENTS Design Preservation Models HO scale Buildings
STRUCTURE HO "DPM Cutting's Scissors 243-103"
L3 32832 0.000000 0.000000 0.000000 0 7.250000 0.000000 0
L3 32832 0.000000 7.250000 0.000000 0 7.250000 3.000000 0
diff --git a/app/lib/params/eu.xtp b/app/lib/params/eu.xtp
index 5b4220b..280a252 100644
--- a/app/lib/params/eu.xtp
+++ b/app/lib/params/eu.xtp
@@ -1,4 +1,4 @@
-CONTENTS European stock
+CONTENTS European Rolling-Stock Prototype Cars
CARPROTO "Bogie Large Van (Cargowaggon) 20.8m" 0 30100 817.322 108.000 0 0 693.000 820.000
F3 255 0.000000 4
0.000000 0.000000 0
diff --git a/app/lib/params/ho-amb.xtp b/app/lib/params/ho-amb.xtp
index 0aac285..3a17765 100644
--- a/app/lib/params/ho-amb.xtp
+++ b/app/lib/params/ho-amb.xtp
@@ -1,4 +1,4 @@
-CONTENTS American Model Builders HO-scale Buildings
+CONTENTS American Model Builders HO scale Buildings
STRUCTURE HO "American Model Builders Santa Fe Station 152-707"
L3 0 0.010417 0.005524 0.254771 0 0.005208 3.504771 0
L3 0 0.010417 0.005208 3.504771 0 8.755208 3.505621 0
@@ -177,4 +177,4 @@ STRUCTURE HO "American Model Builders Sonny’s Shack 705"
L3 0 0.000000 0.000000 0.000000 0 0.000000 2.500000 0
L3 0 0.000000 3.000000 0.000000 0 3.000000 2.500000 0
G3 0 0.000000 0.100049 0.437500 2.125000 0
- END \ No newline at end of file
+ END
diff --git a/app/lib/params/ho-ncb-roads.xtp b/app/lib/params/ho-ncb-roads.xtp
index a072874..42705b6 100755
--- a/app/lib/params/ho-ncb-roads.xtp
+++ b/app/lib/params/ho-ncb-roads.xtp
@@ -1,4 +1,4 @@
-CONTENTS H0 roads and intersections
+CONTENTS HO roads and intersections
STRUCTURE HO "ME 1-Ln-PvdAlley 100"
F3 12632256 0.000000 4
0.000000 0.000000 0
diff --git a/app/lib/params/hon3cars.xtp b/app/lib/params/hon3cars.xtp
new file mode 100644
index 0000000..dc19300
--- /dev/null
+++ b/app/lib/params/hon3cars.xtp
@@ -0,0 +1,9 @@
+CONTENTS HOn3 Narrow Gauge Cars
+CARPART HOn3 "Blackstone D&RGW 30' Boxcar B340120 Denver & Rio Grande Western DRGW 3083" 0 30100 2.250 0.631 0 0 1.600 2.650 10440704
+CARPART HOn3 "Blackstone D&RGW 30' Boxcar B340121 Denver & Rio Grande Western DRGW 3409" 0 30100 2.250 0.631 0 0 1.600 2.650 10440704
+CARPART HOn3 "Blackstone D&RGW 30' Boxcar B340122 Denver & Rio Grande Western DRGW 3109" 0 30100 2.250 0.631 0 0 1.600 2.650 10440704
+CARPART HOn3 "Blackstone D&RGW 30' Boxcar B340123 Denver & Rio Grande Western DRGW 3240" 0 30100 2.250 0.631 0 0 1.600 2.650 10440704
+CARPART HOn3 "Blackstone D&RGW 30' Boxcar B340124 Denver & Rio Grande Western DRGW 3495" 0 30100 2.250 0.631 0 0 1.600 2.650 10440704
+CARPART HOn3 "Blackstone D&RGW 30' Boxcar B340125 Denver & Rio Grande Western DRGW 3732" 0 30100 2.250 0.631 0 0 1.600 2.650 10440704
+CARPART HOn3 "Railline D&RGW 30' Boxcar 130 Denver & Rio Grande Western DRGW 3000" 0 30100 2.250 0.631 0 0 1.600 2.650 10440704
+CARPART HOn3 "Railline D&RGW Stock Car 132 Denver & Rio Grande Western DRGW 5524" 0 30100 2.250 0.631 0 0 1.650 2.650 10440704
diff --git a/app/lib/params/hubner1.xtp b/app/lib/params/hubner1.xtp
index 760a6a8..6936506 100644
--- a/app/lib/params/hubner1.xtp
+++ b/app/lib/params/hubner1.xtp
@@ -1,4 +1,4 @@
-CONTENTS Húbner 1-Scale Turnouts
+CONTENTS Húbner 1 Scale Turnouts
# From 'Märklin Complete Program 1994/95 E'
# Straight Section Design by Dave Bullis
TURNOUT 1 "Húbner Straight 15cm T1002"
@@ -117,7 +117,7 @@ TURNOUT 1 "Húbner Right 10° Double Slip T1024"
C 0 0 -142.416000 3.288000 142.416000 170.000000 10.000000
C 0 0 142.416000 28.208000 -142.416000 350.000000 10.000000
END
-# Curved turnouts designed by Martin Heine
+# Curved turnouts designed by Martin Heine
TURNOUT 1 "Hübner Right Curved Turnout R1020mm 22.5/45° H1074"
U "Curved Turnout" "" "Hübner" "Left Curved Turnout R1020mm 22.5/45°" "H1075" "Right Curved Turnout R1020mm 22.5/45°" "H1074" 28.395669 45.000000 11.761811 22.500000 3.056693 21.509449 0.000000 0.000000 0
P "Normal" 1 6 4 5
@@ -152,4 +152,4 @@ TURNOUT 1 "Hübner Straight 15.6mm adjustment to H1074/H1075 H1076"
E 0.000000 0.000000 270.000000
E 6.141732 0.000000 90.000000
S 0 0.000000 0.000000 0.000000 6.141732 0.000000
- END \ No newline at end of file
+ END
diff --git a/app/lib/params/kato-ho.xtp b/app/lib/params/kato-ho.xtp
index 3cfe85b..a27b259 100644
--- a/app/lib/params/kato-ho.xtp
+++ b/app/lib/params/kato-ho.xtp
@@ -1,5 +1,5 @@
-CONTENTS Kato Unitrack HO-Scale
-SUBCONTENTS Kato Unitrack HO-Scale Straight Track
+CONTENTS Kato Unitrack HO Scale
+SUBCONTENTS Kato Unitrack HO Scale Straight Track
TURNOUT HO "Kato Unitrack Straight 2 3/8 60mm 2-105"
P "Normal" 1
E 0.000000 0.000000 270.000000
diff --git a/app/lib/params/kato-n-DblTrk.xtp b/app/lib/params/kato-n-DblTrk.xtp
deleted file mode 100644
index ec6b0c6..0000000
--- a/app/lib/params/kato-n-DblTrk.xtp
+++ /dev/null
@@ -1,369 +0,0 @@
-CONTENTS Kato Unitrack N-Scale Double Track Line
-#Created By Dwyane Ward 05-Jul-2007
-
-SUBCONTENTS Kato Unitrack N-Scale Dbl Trk Crossovers
-TURNOUT N "Kato Unitrack Dbl Trk Single Crossover (left) 9.75 248mm 20-230"
- P "Normal" 1 2 0 3 4
- P "Reverse" 1 5 6 7 4
- E 0.000000 0.000000 270.000000
- E 9.763779 0.000000 90.000000
- E 0.000000 1.299212 270.000000
- E 9.763779 1.299212 90.000000
- S 0 0.000000 0.000000 0.000000 0.617287 0.000000
- S 0 0.000000 0.617287 0.000000 9.763779 0.000000
- S 0 0.000000 0.000000 1.299212 9.146492 1.299212
- S 0 0.000000 9.146492 1.299212 9.763779 1.299212
- C 0 0.000000 -14.226684 0.617306 14.226684 163.988842 16.011234
- S 0 0.000000 4.541371 0.551886 5.222408 0.747326
- C 0 0.000000 14.226684 9.146510 -12.927467 343.988842 16.011234
- L 11579568 0.053333 0.000000 -0.445774 9.763799 -0.445774
- L 11579568 0.053333 0.000000 1.744986 9.763799 1.744986
- END
-TURNOUT N "Kato Unitrack Dbl Trk Single Crossover (Right) 9.75 248mm 20-231"
- P "Normal" 1 2 0 3 4
- P "Reverse" 3 5 6 7 2
- E 0.000000 0.000000 270.000000
- E 9.763799 0.000000 90.000000
- E 0.000000 1.299212 270.000000
- E 9.763799 1.299212 90.000000
- S 0 0.000000 0.000000 0.000000 9.146512 0.000000
- S 0 0.000000 9.146512 0.000000 9.763799 0.000000
- S 0 0.000000 0.000000 1.299212 0.617287 1.299212
- S 0 0.000000 0.617287 1.299212 9.763799 1.299212
- C 0 0.000000 14.226749 0.617230 -12.927537 0.000076 16.011200
- S 0 0.000000 4.541380 0.747326 5.222419 0.551886
- C 0 0.000000 -14.226749 9.146530 14.226744 180.000076 16.011200
- L 11579568 0.053333 0.000000 -0.445774 9.763799 -0.445774
- L 11579568 0.053333 0.000000 1.744986 9.763799 1.744986
- END
-
-SUBCONTENTS Kato Unitrack N-Scale Dbl Trk Straight Viaduct Track
-TURNOUT N "Kato Unitrack Dbl Trk Straight Viaduct 4 7/8 124mm 20-422"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 4.881889 -1.299212 90.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- S 0 0 0.000000 -1.299212 4.881889 -1.299212
- L 11579568 0.053333 0.000000 0.445774 4.881889 0.445774
- L 11579568 0.053333 0.000000 -1.744986 4.881889 -1.744986
- END
-
-SUBCONTENTS Kato Unitrack N-Scale Dbl Trk Plate Straight Track
-TURNOUT N "Kato Unitrack Dbl Trk Plate Straight 9.75 248mm 20-001"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 9.763799 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 9.763799 -1.299212 90.000000
- S 0 0 0.000000 0.000000 9.763799 0.000000
- S 0 0 0.000000 -1.299212 9.763799 -1.299212
- L 11579568 0.053333 0.000000 0.445774 9.763799 0.445774
- L 11579568 0.053333 0.000000 -1.744986 9.763799 -1.744986
- END
-TURNOUT N "Kato Unitrack Dbl Trk Feeder Trk 9.75 248mm 20-002"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 9.763799 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 9.763799 -1.299212 90.000000
- S 0 0 0.000000 0.000000 9.763799 0.000000
- S 0 0 0.000000 -1.299212 9.763799 -1.299212
- L 11579568 0.053333 0.000000 0.445774 9.763799 0.445774
- L 11579568 0.053333 0.000000 -1.744986 9.763799 -1.744986
- L 0 0.026667 9.322855 -1.798086 9.322855 -1.998086
- L 0 0.026667 9.322855 -1.998086 9.422855 -2.098086
- L 0 0.026667 9.322855 -1.998086 9.222855 -2.098086
- L 16711680 0.026667 9.122855 -1.798086 9.122855 -1.998086
- L 16711680 0.026667 9.122855 -1.998086 9.222855 -2.098086
- L 16711680 0.026667 9.122855 -1.998086 9.022855 -2.098086
- END
-TURNOUT N "Kato Unitrack Dbl Trk Str Incline 9.75 248mm 20-003"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 9.763799 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 9.763799 -1.299212 90.000000
- S 0 0 0.000000 0.000000 9.763799 0.000000
- S 0 0 0.000000 -1.299212 9.763799 -1.299212
- L 11579568 0.053333 0.000000 0.445774 9.763799 0.445774
- L 11579568 0.053333 0.000000 -1.744986 9.763799 -1.744986
- END
-TURNOUT N "Kato Unitrack Dbl Trk Straight 9.75 248mm 20-004/401"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 9.763799 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 9.763799 -1.299212 90.000000
- S 0 0 0.000000 0.000000 9.763799 0.000000
- S 0 0 0.000000 -1.299212 9.763799 -1.299212
- L 11579568 0.053333 0.000000 0.445774 9.763799 0.445774
- L 11579568 0.053333 0.000000 -1.744986 9.763799 -1.744986
- END
-TURNOUT N "Kato Unitrack Dbl Trk Straight 7 5/16 186mm 20-012/411"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 7.322834 -1.299212 90.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- S 0 0 0.000000 -1.299212 7.322834 -1.299212
- L 11579568 0.053333 0.000000 0.445774 7.322834 0.445774
- L 11579568 0.053333 0.000000 -1.744986 7.322834 -1.744986
- END
-TURNOUT N "Kato Unitrack Dbl Trk Straight 4 7/8 124mm 20-022/023"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 4.881889 -1.299212 90.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- S 0 0 0.000000 -1.299212 4.881889 -1.299212
- L 11579568 0.053333 0.000000 0.445774 4.881889 0.445774
- L 11579568 0.053333 0.000000 -1.744986 4.881889 -1.744986
- END
-TURNOUT N "Kato Unitrack Dbl Trk Straight 2 7/16 62mm 20-042"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 2.440944 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 2.440944 -1.299212 90.000000
- S 0 0 0.000000 0.000000 2.440944 0.000000
- S 0 0 0.000000 -1.299212 2.440944 -1.299212
- L 11579568 0.053333 0.000000 0.445774 2.440944 0.445774
- L 11579568 0.053333 0.000000 -1.744986 2.440944 -1.744986
- END
-TURNOUT N "Kato Unitrack Dbl Trk Feeder Track 62mm 20-043"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 2.440944 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 2.440944 -1.299212 90.000000
- S 0 0 0.000000 0.000000 2.440944 0.000000
- S 0 0 0.000000 -1.299212 2.440944 -1.299212
- L 11579568 0.053333 0.000000 0.445774 2.440944 0.445774
- L 11579568 0.053333 0.000000 -1.744986 2.440944 -1.744986
- L 0 0.026667 2.000000 -1.798086 2.000000 -1.998086
- L 0 0.026667 2.000000 -1.998086 2.100000 -2.098086
- L 0 0.026667 2.000000 -1.998086 1.900000 -2.098086
- L 16711680 0.026667 1.800000 -1.798086 1.800000 -1.998086
- L 16711680 0.026667 1.800000 -1.998086 1.900000 -2.098086
- L 16711680 0.026667 1.800000 -1.998086 1.700000 -2.098086
- END
-TURNOUT N "Kato Unitrack Conc Tie Dbl Trk Widening Section 310mm 20-051 Left"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 12.204724 0.000000 90.000000
- E 0.000000 1.299212 270.000000
- E 12.204724 2.598425 90.000000
- S 0 0 0.000000 0.000000 12.204724 0.000000
- S 0 0 0.000000 1.299212 0.980334 1.299212
- C 0 0 17.598425 0.980334 18.897637 169.500000 10.500000
- S 0 0 4.187392 1.593899 8.017332 2.303737
- C 0 0 17.598425 11.224390 -15.000001 349.500000 10.500000
- S 0 0 11.224390 2.598425 12.204724 2.598425
- L 11579568 0.053333 0.000000 -0.445774 12.204724 -0.445774
- L 11579568 0.053333 0.000000 1.744986 0.980334 1.744986
- A 11579568 0.053333 17.152651 0.980334 18.897637 169.500000 10.500000
- L 11579568 0.053333 4.187392 2.039673 8.017332 2.749511
- A 11579568 0.053333 18.044199 11.224390 -15.000001 349.500000 10.500000
- L 11579568 0.053333 11.224390 3.044199 12.204724 3.044199
- L 11579568 0.053333 11.704724 0.445774 12.204724 0.445774
- L 11579568 0.053333 11.704724 0.445774 11.704724 2.152651
- L 11579568 0.053333 11.704724 2.152651 12.204724 2.152651
- END
-TURNOUT N "Kato Unitrack Conc Tie Dbl Trk Widening Section 310mm 20-052 Right"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 12.204724 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 12.204724 -2.598425 90.000000
- S 0 0 0.000000 0.000000 12.204724 0.000000
- S 0 0 0.000000 -1.299212 0.980334 -1.299212
- C 0 0 17.598425 0.980334 -18.897637 0.000000 10.500000
- S 0 0 4.187392 -1.593899 8.017332 -2.303737
- C 0 0 17.598425 11.224390 15.000001 180.000000 10.500000
- S 0 0 11.224390 -2.598425 12.204724 -2.598425
- L 11579568 0.053333 0.000000 0.445774 12.204724 0.445774
- L 11579568 0.053333 0.000000 -1.744986 0.980334 -1.744986
- A 11579568 0.053333 17.152651 0.980334 -18.897637 0.000000 10.500000
- L 11579568 0.053333 4.187392 -2.039673 8.017332 -2.749511
- A 11579568 0.053333 18.044199 11.224390 15.000001 180.000000 10.500000
- L 11579568 0.053333 11.224390 -3.044199 12.204724 -3.044199
- L 11579568 0.053333 11.704724 -0.445774 12.204724 -0.445774
- L 11579568 0.053333 11.704724 -0.445774 11.704724 -2.152651
- L 11579568 0.053333 11.704724 -2.152651 12.204724 -2.152651
- END
-TURNOUT N "Kato Unitrack Conc Tie Single Trk Straight 9.75 248mm 20-875"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 9.763799 0.000000 90.000000
- S 0 0 0.000000 0.000000 9.763799 0.000000
- L 11579568 0.053333 0.000000 0.445774 9.763799 0.445774
- L 11579568 0.053333 0.000000 -0.445774 9.763799 -0.445774
- END
-
-
-SUBCONTENTS Kato Unitrack N-Scale Dbl Trk Plate Curved Track
-TURNOUT N "Kato Unitrack Dbl Trk Plate Curve 12.375/11R 315/282mm 45° 20-112"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 0.000000 -1.299212 270.000000
- E 8.769238 -3.632337 135.000000
- E 7.850556 -4.551019 135.000000
- C 0 0 12.401575 0.000000 -12.401575 0.000000 45.000000
- C 0 0 11.102362 0.000000 -12.401575 0.000000 45.000000
- A 11579568 0.053333 12.847349 0.000000 -12.401575 0.000000 45.000000
- A 11579568 0.053333 10.656588 0.000000 -12.401575 0.000000 45.000000
- END
-
-SUBCONTENTS Kato Unitrack N-Scale Dbl Trk SupElev Curved Track
-TURNOUT N "Kato Unitrack Conc Tie Dbl Trk SupElev Curve 16.3/15R 414/381mm 45° 20-181"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 11.525283 -4.773929 135.000000
- E 0.000000 -1.299212 270.000000
- E 10.606602 -5.692610 135.000000
- C 0 0 16.299212 0.000000 -16.299212 0.000000 45.000000
- C 0 0 15.000000 0.000000 -16.299212 0.000000 45.000000
- A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 45.000000
- A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Conc Tie Dbl Trk SupElev Easement Curve (R) Appr 16.3/15R 414/381mm 22.5° 20-182 Right"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 6.237438 -1.240704 112.500000
- E 0.000000 -1.299212 270.000000
- E 5.740251 -2.441019 112.500000
- C 0 0 16.299212 0.000000 -16.299212 0.000000 22.500000
- C 0 0 15.000000 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 22.500000
- END
-TURNOUT N "Kato Unitrack Conc Tie Dbl Trk SupElev Easement Curve (L) Appr 16.3/15R 414/381mm 22.5° 20-182 Left"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 6.237438 -1.240704 112.500000
- E 0.000000 -1.299212 270.000000
- E 5.740251 -2.441019 112.500000
- C 0 0 16.299212 0.000000 -16.299212 0.000000 22.500000
- C 0 0 15.000000 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 22.500000
- END
-TURNOUT N "Kato Unitrack Conc Tie Dbl Trk SupElev Curve 12.375/11R 315/282mm 45° 20-183"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 0.000000 -1.299212 270.000000
- E 8.769238 -3.632337 135.000000
- E 7.850556 -4.551019 135.000000
- C 0 0 12.401575 0.000000 -12.401575 0.000000 45.000000
- C 0 0 11.102362 0.000000 -12.401575 0.000000 45.000000
- A 11579568 0.053333 12.847349 0.000000 -12.401575 0.000000 45.000000
- A 11579568 0.053333 10.656588 0.000000 -12.401575 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Conc Tie Dbl Trk SupElev Easement Curve 12.375/11R 315/282mm 22.5° 20-184 Right"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 0.000000 -1.299212 270.000000
- E 4.745877 -0.944014 112.500000
- E 4.248690 -2.144330 112.500000
- C 0 0 12.401575 0.000000 -12.401575 0.000000 22.500000
- C 0 0 11.102362 0.000000 -12.401575 0.000000 22.500000
- A 11579568 0.053333 12.847349 0.000000 -12.401575 0.000000 22.500000
- A 11579568 0.053333 10.656588 0.000000 -12.401575 0.000000 22.500000
- END
-TURNOUT N "Kato Unitrack Conc Tie Dbl Trk SupElev Easement Curve 12.375/11R 315/282mm 22.5° 20-184 Left"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 0.000000 -1.299212 270.000000
- E 4.745877 -0.944014 112.500000
- E 4.248690 -2.144330 112.500000
- C 0 0 12.401575 0.000000 -12.401575 0.000000 22.500000
- C 0 0 11.102362 0.000000 -12.401575 0.000000 22.500000
- A 11579568 0.053333 12.847349 0.000000 -12.401575 0.000000 22.500000
- A 11579568 0.053333 10.656588 0.000000 -12.401575 0.000000 22.500000
- END
-TURNOUT N "Kato Unitrack Conc Tie Dbl Trk SupElev Curve 18.875/17.625R 480/447mm 45° 20-185"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 13.362648 -5.534990 135.000000
- E 0.000000 -1.299212 270.000000
- E 12.443966 -6.453672 135.000000
- C 0 0 18.897638 0.000000 -18.897638 0.000000 45.000000
- C 0 0 17.598425 0.000000 -18.897638 0.000000 45.000000
- A 11579568 0.053333 19.343412 0.000000 -18.897638 0.000000 45.000000
- A 11579568 0.053333 17.152651 0.000000 -18.897638 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Conc Tie Dbl Trk SupElev Easement Curve (R) Appr 18.875/17.625R 480/447mm 22.5° 20-186 Right"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.231813 -1.438497 112.500000
- E 0.000000 -1.299212 270.000000
- E 6.734626 -2.638813 112.500000
- C 0 0 18.897638 0.000000 -18.897638 0.000000 22.500000
- C 0 0 17.598425 0.000000 -18.897638 0.000000 22.500000
- A 11579568 0.053333 19.343412 0.000000 -18.897638 0.000000 22.500000
- A 11579568 0.053333 17.152651 0.000000 -18.897638 0.000000 22.500000
- END
-TURNOUT N "Kato Unitrack Conc Tie Dbl Trk SupElev Easement Curve (L) Appr 18.875/17.625R 480/447mm 22.5° 20-186 Left"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.231813 -1.438497 112.500000
- E 0.000000 -1.299212 270.000000
- E 6.734626 -2.638813 112.500000
- C 0 0 18.897638 0.000000 -18.897638 0.000000 22.500000
- C 0 0 17.598425 0.000000 -18.897638 0.000000 22.500000
- A 11579568 0.053333 19.343412 0.000000 -18.897638 0.000000 22.500000
- A 11579568 0.053333 17.152651 0.000000 -18.897638 0.000000 22.500000
- END
-
-SUBCONTENTS Kato Unitrack N-Scale Dbl Trk Curved Viaduct Track
-TURNOUT N "Kato Unitrack Dbl Trk Curve Viadut 16.3/15R 414/381mm 45° 20-541"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 11.525283 -4.773929 135.000000
- E 0.000000 -1.299212 270.000000
- E 10.606602 -5.692610 135.000000
- C 0 0 16.299212 0.000000 -16.299212 0.000000 45.000000
- C 0 0 15.000000 0.000000 -16.299212 0.000000 45.000000
- A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 45.000000
- A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 45.000000
- END
-
-SUBCONTENTS Kato Unitrack N-Scale Dbl Viaduct Trk SupElev Curved Track
-TURNOUT N "Kato Unitrack Dbl Viaduct Trk Sup Elev Curve 16.3/15R 414/381mm 45° 20-544"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 11.525283 -4.773929 135.000000
- E 0.000000 -1.299212 270.000000
- E 10.606602 -5.692610 135.000000
- C 0 0 16.299212 0.000000 -16.299212 0.000000 45.000000
- C 0 0 15.000000 0.000000 -16.299212 0.000000 45.000000
- A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 45.000000
- A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Dbl Viaduct Trk SupElev Easement Curve (R) Appr 16.3/15R 414/381mm 22.5° 20-545 Right"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 6.237438 -1.240704 112.500000
- E 0.000000 -1.299212 270.000000
- E 5.740251 -2.441019 112.500000
- C 0 0 16.299212 0.000000 -16.299212 0.000000 22.500000
- C 0 0 15.000000 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 22.500000
- END
-TURNOUT N "Kato Unitrack Dbl Viaduct Trk SupElev Easement Curve (L) Appr 16.3/15R 414/381mm 22.5° 20-545 Left"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 6.237438 -1.240704 112.500000
- E 0.000000 -1.299212 270.000000
- E 5.740251 -2.441019 112.500000
- C 0 0 16.299212 0.000000 -16.299212 0.000000 22.500000
- C 0 0 15.000000 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 22.500000
- END
-
diff --git a/app/lib/params/kato-n.xtp b/app/lib/params/kato-n.xtp
deleted file mode 100644
index 0ed3155..0000000
--- a/app/lib/params/kato-n.xtp
+++ /dev/null
@@ -1,1639 +0,0 @@
-CONTENTS Kato Unitrack N-Scale
-#
-#
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Straight Track
-TURNOUT N "Kato Unitrack Straight 9.75 248mm 20-000"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.763779 0.000000 90.000000
- S 0 0 0.000000 0.000000 9.763779 0.000000
- L 11579568 0.053333 0.000000 0.492126 9.763779 0.492126
- L 11579568 0.053333 0.000000 -0.492126 9.763779 -0.492126
- END
-TURNOUT N "Kato Unitrack Straight 7 5/16 186mm 20-010"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- L 11579568 0.053333 0.000000 0.492126 7.322834 0.492126
- L 11579568 0.053333 0.000000 -0.492126 7.322834 -0.492126
- END
-TURNOUT N "Kato Unitrack Straight 4 7/8 124mm 20-020"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- L 11579568 0.053333 0.000000 0.492126 4.881889 0.492126
- L 11579568 0.053333 0.000000 -0.492126 4.881889 -0.492126
- END
-TURNOUT N "Kato Unitrack Straight 2 1/2 64mm 20-030"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.519685 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.519685 0.000000
- L 11579568 0.053333 0.000000 0.492126 2.519685 0.492126
- L 11579568 0.053333 0.000000 -0.492126 2.519685 -0.492126
- END
-TURNOUT N "Kato Unitrack Straight 2 7/16 62mm 20-040"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.440944 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.440944 0.000000
- L 11579568 0.053333 0.000000 0.492126 2.440944 0.492126
- L 11579568 0.053333 0.000000 -0.492126 2.440944 -0.492126
- END
-TURNOUT N "Kato Unitrack Straight 1 3/4 45-5mm 20-091A"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.791339 0.000000 90.000000
- S 0 0 0.000000 0.000000 1.791339 0.000000
- L 11579568 0.053333 0.000000 0.492126 1.791339 0.492126
- L 11579568 0.053333 0.000000 -0.492126 1.791339 -0.492126
- END
-TURNOUT N "Kato Unitrack Straight 1 1/8 29mm 20-091B"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.141732 0.000000 90.000000
- S 0 0 0.000000 0.000000 1.141732 0.000000
- L 11579568 0.053333 0.000000 0.492126 1.141732 0.492126
- L 11579568 0.053333 0.000000 -0.492126 1.141732 -0.492126
- END
-TURNOUT N "Kato Unitrack Road Crossing 124mm 20-021"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 4.881889 0.000000
- L 11579568 0.053333 0.000000 0.4921260 4.881889 0.4921260
- L 11579568 0.053333 0.000000 -0.4921260 4.881889 -0.4921260
- L 0 0.053333 0.500000 0.548560 4.375000 0.548560
- L 0 0.053333 4.375000 0.548560 4.375000 -0.576440
- L 0 0.053333 4.375000 -0.576440 0.500000 -0.576440
- L 0 0.053333 0.500000 -0.576440 0.500000 0.548560
- L 0 0.053333 1.466667 0.133560 1.000000 -0.013107
- L 0 0.053333 1.440000 -0.133107 1.000000 -0.026440
- L 0 0.053333 1.440000 0.120227 3.320000 0.120227
- L 0 0.053333 1.453333 -0.133107 3.306667 -0.119773
- L 0 0.053333 3.306667 0.120227 3.626667 0.000227
- L 0 0.053333 3.293333 -0.119773 3.600000 0.000227
- END
-TURNOUT N "Kato Unitrack Mag Uncoupler 64mm 20-032"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.519685 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 2.519685 0.000000
- L 11579568 0.053333 0.000000 0.4921260 2.519685 0.4921260
- L 11579568 0.053333 0.000000 -0.4921260 2.519685 -0.4921260
- L 0 0.053333 0.253333 0.133560 2.280000 0.133560
- L 0 0.053333 2.280000 0.133560 2.280000 -0.146440
- L 0 0.053333 2.280000 -0.146440 0.253333 -0.146440
- L 0 0.053333 0.253333 -0.146440 0.253333 0.133560
- END
-TURNOUT N "Kato Unitrack Feeder Track 62mm 20-041"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.440944 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.440944 0.000000
- L 11579568 0.053333 0.000000 0.492126 2.440944 0.492126
- L 11579568 0.053333 0.000000 -0.492126 2.440944 -0.492126
- L 0 0.026667 2.000000 -0.498874 2.000000 -0.698874
- L 0 0.026667 2.000000 -0.698874 2.100000 -0.798874
- L 0 0.026667 2.000000 -0.698874 1.900000 -0.798874
- L 16711680 0.026667 1.800000 -0.498874 1.800000 -0.698874
- L 16711680 0.026667 1.800000 -0.698874 1.900000 -0.798874
- L 16711680 0.026667 1.800000 -0.698874 1.700000 -0.798874
- END
-TURNOUT N "Kato Unitrack Snap Tk. Conv. Tk. 62mm 20-045"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.440944 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.440944 0.000000
- L 11579568 0.053333 0.000000 0.492126 2.440944 0.492126
- L 11579568 0.053333 0.000000 -0.492126 2.440944 -0.492126
- END
-TURNOUT N "Kato Unitrack Adjustable 20-050"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.070866 0.000000 90.000000
- X adjustable 3.070866 4.251968
- S 0 0 0.000000 0.000000 3.070866 0.000000
- L 11579568 0.053333 0.000000 0.492126 3.070866 0.492126
- L 11579568 0.053333 0.000000 -0.492126 3.070866 -0.492126
- END
-TURNOUT N "Kato Unitrack 3-Color Signal 4 7/8 124mm 20-605-1"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- L 11579568 0.053333 0.000000 0.492126 4.881889 0.492126
- L 11579568 0.053333 0.000000 -0.492126 4.881889 -0.492126
- F 11579568 0.000000 4
- 1.948819 0.492126 0
- 1.948819 0.992126 0
- 2.948819 0.992126 0
- 2.948819 0.492126 0
- G 0 0.053333 0.100000 2.448819 0.742126 0
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Curved Track
-TURNOUT N "Kato Unitrack Curve 4.625R 117mm 45° 20-176"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.257145 -1.349154 135.000000
- C 0 0 4.606299 0.000000 -4.606299 0.000000 45.000000
- A 11579568 0.053333 4.114173 0.000000 -4.606299 0.000000 45.000000
- A 11579568 0.053333 5.098425 0.000000 -4.606299 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Curve 5.905R 150mm 45° 20-174"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.175827 -1.729684 135.000000
- C 0 0 5.905512 0.000000 -5.905512 0.000000 45.000000
- A 11579568 0.053333 5.605512 0.000000 -5.905512 0.000000 45.000000
- A 11579568 0.053333 6.205512 0.000000 -5.905512 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Curve 7.204R 183mm 45° 20-172"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.094509 -2.110215 135.000000
- C 0 0 7.204724 0.000000 -7.204724 0.000000 45.000000
- A 11579568 0.053333 6.904724 0.000000 -7.204724 0.000000 45.000000
- A 11579568 0.053333 7.504724 0.000000 -7.204724 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Curve 8.56R 216mm 45° 20-170"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.013192 -2.490745 135.000000
- C 0 0 8.503937 0.000000 -8.503937 0.000000 45.000000
- A 11579568 0.053333 8.058163 0.000000 -8.503937 0.000000 45.000000
- A 11579568 0.053333 8.949711 0.000000 -8.503937 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Curve 8.56R 216mm 15° 20-171"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.200981 -0.289765 105.000000
- C 0 0 8.503937 0.000000 -8.503937 0.000000 15.000000
- A 11579568 0.053333 8.058163 0.000000 -8.503937 0.000000 15.000000
- A 11579568 0.053333 8.949711 0.000000 -8.503937 0.000000 15.000000
- END
-TURNOUT N "Kato Unitrack Curve 9.75R 249mm 45° 20-100"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.931874 -2.871276 135.000000
- C 0 0 9.803150 0.000000 -9.803150 0.000000 45.000000
- A 11579568 0.053333 9.357376 0.000000 -9.803150 0.000000 45.000000
- A 11579568 0.053333 10.248924 0.000000 -9.803150 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Curve 9.75R 249mm 15° 20-101"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.537242 -0.334034 105.000000
- C 0 0 9.803150 0.000000 -9.803150 0.000000 15.000000
- A 11579568 0.053333 9.357376 0.000000 -9.803150 0.000000 15.000000
- A 11579568 0.053333 10.248924 0.000000 -9.803150 0.000000 15.000000
- END
-TURNOUT N "Kato Unitrack Curve 11R 282mm 45° 20-110"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.850556 -3.251807 135.000000
- C 0 0 11.102362 0.000000 -11.102362 0.000000 45.000000
- A 11579568 0.053333 10.656588 0.000000 -11.102362 0.000000 45.000000
- A 11579568 0.053333 11.548136 0.000000 -11.102362 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Curve 11R 282mm 15° 20-111"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.873503 -0.378304 105.000000
- C 0 0 11.102362 0.000000 -11.102362 0.000000 15.000000
- A 11579568 0.053333 10.656588 0.000000 -11.102362 0.000000 15.000000
- A 11579568 0.053333 11.548136 0.000000 -11.102362 0.000000 15.000000
- END
-TURNOUT N "Kato Unitrack Curve 12.375R 315mm 45° 20-120"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 8.769238 -3.632337 135.000000
- C 0 0 12.401575 0.000000 -12.401575 0.000000 45.000000
- A 11579568 0.053333 11.955801 0.000000 -12.401575 0.000000 45.000000
- A 11579568 0.053333 12.847349 0.000000 -12.401575 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Curve 12.375R 315mm 15° 20-121"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 3.209764 -0.422573 105.000000
- C 0 0 12.401575 0.000000 -12.401575 0.000000 15.000000
- A 11579568 0.053333 11.955801 0.000000 -12.401575 0.000000 15.000000
- A 11579568 0.053333 12.847349 0.000000 -12.401575 0.000000 15.000000
- END
-TURNOUT N "Kato Unitrack Curve 13.75R 348mm 30° 20-130"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.850394 -1.835557 120.000000
- C 0 0 13.700787 0.000000 -13.700787 0.000000 30.000000
- A 11579568 0.053333 13.255013 0.000000 -13.700787 0.000000 30.000000
- A 11579568 0.053333 14.146561 0.000000 -13.700787 0.000000 30.000000
- END
-TURNOUT N "Kato Unitrack Curve 13.75R 348mm 45° 20-132"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.687920 -4.012868 135.000000
- C 0 0 13.700787 0.000000 -13.700787 0.000000 45.000000
- A 11579568 0.053333 13.255013 0.000000 -13.700787 0.000000 45.000000
- A 11579568 0.053333 14.146561 0.000000 -13.700787 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Curve 15R 381mm 30° 20-140"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.500000 -2.009619 120.000000
- C 0 0 15.000000 0.000000 -15.000000 0.000000 30.000000
- A 11579568 0.053333 14.554226 0.000000 -15.000000 0.000000 30.000000
- A 11579568 0.053333 15.445774 0.000000 -15.000000 0.000000 30.000000
- END
-TURNOUT N "Kato Unitrack Curve 19R 481mm 15° 20-160"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.901258 -0.645263 105.000000
- C 0 0 18.937008 -0.000000 -18.937008 0.000000 15.000000
- A 11579568 0.053333 18.491234 -0.000000 -18.937008 0.000000 15.000000
- A 11579568 0.053333 19.382782 -0.000000 -18.937008 0.000000 15.000000
- END
-TURNOUT N "Kato Unitrack Curve 28.25R 718mm 15° 20-150"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.316223 -0.963199 105.000000
- C 0 0 28.267717 0.003000 -28.267717 0.000000 15.000000
- A 11579568 0.053333 27.821943 0.000000 -28.267717 0.000000 15.000000
- A 11579568 0.053333 28.713491 0.000000 -28.267717 0.000000 15.000000
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Bumper Track
-TURNOUT N "Kato Unitrack Bumper A 2 1/2 64mm 20-033"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0.000000 0.000000 0.000000 2.440944 0.000000
- L 11579568 0.053333 0.000000 0.4921260 3.740157 0.4921260
- L 11579568 0.053333 0.000000 -0.4921260 3.740157 -0.4921260
- L 11579568 0.053333 3.740157 0.4921260 3.740157 -0.4921260
- L 10824234 0.053333 2.520000 0.320227 3.186667 0.320227
- L 10824234 0.053333 3.186667 0.320227 3.186667 -0.346440
- L 10824234 0.053333 3.186667 -0.346440 2.520000 -0.346440
- L 10824234 0.053333 2.520000 -0.346440 2.520000 0.320227
- L 0 0.053333 2.720000 0.080227 2.866667 0.080227
- L 0 0.053333 2.866667 0.080227 2.866667 -0.106440
- L 0 0.053333 2.866667 -0.106440 2.720000 -0.106440
- L 0 0.053333 2.720000 -0.106440 2.720000 0.080227
- END
-TURNOUT N "Kato Unitrack Bumper B 2 1/2 64mm 20-034"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0.000000 0.000000 0.000000 2.440944 0.000000
- L 11579568 0.053333 0.000000 0.4921260 3.740157 0.4921260
- L 11579568 0.053333 0.000000 -0.4921260 3.740157 -0.4921260
- L 11579568 0.053333 3.740157 0.4921260 3.740157 -0.4921260
- L 0 0.053333 2.720000 0.080227 2.866667 0.080227
- L 0 0.053333 2.866667 0.080227 2.866667 -0.106440
- L 0 0.053333 2.866667 -0.106440 2.720000 -0.106440
- L 0 0.053333 2.720000 -0.106440 2.720000 0.080227
- L 9127187 0.053333 2.520000 0.306893 3.226667 0.306893
- L 9127187 0.053333 3.226667 -0.333107 2.520000 -0.333107
- L 9127187 0.053333 2.520000 -0.333107 2.520000 0.306893
- L 11579568 0.053333 2.573333 0.253560 3.186667 0.253560
- L 11579568 0.053333 3.186667 0.253560 3.186667 -0.293107
- L 11579568 0.053333 3.186667 -0.293107 2.573333 -0.293107
- L 11579568 0.053333 2.573333 -0.293107 2.573333 0.253560
- END
-TURNOUT N "Kato Unitrack Bumper C 2 20-035"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- S 0 0.000000 0.000000 0.000000 1.338583 0.000000
- L 11579568 0.053333 0.000000 0.4921260 1.968504 0.4921260
- L 11579568 0.053333 0.000000 -0.4921260 1.968504 -0.4921260
- L 11579568 0.053333 1.968504 0.4921260 1.968504 -0.4921260
- L 0 0.053333 1.026667 0.080227 1.200000 0.080227
- L 0 0.053333 1.200000 0.080227 1.200000 -0.093107
- L 0 0.053333 1.200000 -0.093107 1.026667 -0.093107
- L 0 0.053333 1.026667 -0.093107 1.026667 0.080227
- L 0 0.053333 0.800000 0.080227 0.800000 -0.093107
- L 0 0.040000 0.826667 -0.066440 1.146667 -0.453107
- L 0 0.040000 0.826667 0.066893 1.160000 0.440227
- L 0 0.040000 0.826667 -0.093107 0.573333 -0.453107
- L 0 0.040000 0.840000 0.080227 0.586667 0.440227
- L 0 0.053333 0.746667 -0.106440 0.746667 0.106893
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Turnouts
-TURNOUT N "Kato Unitrack Turnout 150-R 20-240"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- E 4.175827 -1.729684 135.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- C 0 0 5.905512 0.000000 -5.905512 0.000000 45.000000
- L 11579568 0.053333 0.000000 0.492126 4.881889 0.492126
- L 11579568 0.053333 3.380000 -0.492126 4.881889 -0.492126
- A 11579568 0.053333 5.413386 0.000000 -5.905512 0.000000 45.000000
- A 11579568 0.053333 6.397638 0.000000 -5.905512 32.500000 12.500000
- END
-TURNOUT N "Kato Unitrack Turnout 150-L 20-241"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- E 4.175827 1.729684 45.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- C 0 0 5.905512 0.000000 5.905512 135.000000 45.000000
- L 11579568 0.053333 0.000000 -0.492126 4.881889 -0.492126
- L 11579568 0.053333 3.380000 0.492126 4.881889 0.492126
- A 11579568 0.053333 5.413386 0.000000 5.905512 135.000000 45.000000
- A 11579568 0.053333 6.397638 0.000000 5.905512 135.000000 12.500000
- END
-TURNOUT N "Kato Unitrack Turnout 4-L 20-220"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 4.960629 0.000000 90.000000
- E 4.881889 0.642713 75.000000
- S 0 0 0.000000 0.000000 4.960629 0.000000
- C 0 0 -18.862000 0.000000 18.862000 165.000000 15.000000
- L 11579568 0.053333 0.000000 -0.492126 4.960629 -0.492126
- A 11579568 0.053333 -18.369874 0.000000 18.862000 165.000000 15.000000
- END
-TURNOUT N "Kato Unitrack S60L {incl w/4} "
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.362204 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.362204 0.000000
- L 11579568 0.053333 0.000000 0.492126 2.362204 0.492126
- L 11579568 0.053333 0.000000 -0.492126 2.362204 -0.492126
- END
-TURNOUT N "Kato Unitrack Turnout 4-R 20-221"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 4.960629 0.000000 90.000000
- E 4.881889 -0.642713 105.000000
- S 0 0 0.000000 0.000000 4.960629 0.000000
- C 0 0 18.862000 0.000000 -18.862000 0.000000 15.000000
- L 11579568 0.053333 0.000000 0.492126 4.960629 0.492126
- A 11579568 0.053333 18.369874 0.000000 -18.862000 0.000000 15.000000
- END
-TURNOUT N "Kato Unitrack S60R {incl w/4} "
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.362204 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.362204 0.000000
- L 11579568 0.053333 0.000000 0.492126 2.362204 0.492126
- L 11579568 0.053333 0.000000 -0.492126 2.362204 -0.492126
- END
-TURNOUT N "Kato Unitrack Turnout 2-WYE 20-222"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 4.881889 0.642713 75.000000
- E 4.881889 -0.642713 105.000000
- C 0 0 -18.862000 0.000000 18.862000 165.000000 15.000000
- C 0 0 18.862000 0.000000 -18.862000 0.000000 15.000000
- A 11579568 0.053333 -18.416226 0.000000 18.862000 165.000000 15.000000
- A 11579568 0.053333 18.416226 0.000000 -18.862000 0.000000 15.000000
- L 11579568 0.053333 5.000000 0.200000 5.000000 -0.200000
- END
-TURNOUT N "Kato Unitrack Turnout 6-L 20-202"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- E 7.322834 0.964069 75.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- C 0 0 -28.268000 0.000000 28.268000 165.0000000 15.000000
- L 11579568 0.053333 0.000000 -0.492126 7.322834 -0.492126
- A 11579568 0.053333 27.775874 0.000000 28.268000 165.000000 15.000000
- END
-TURNOUT N "Kato Unitrack Turnout 6-R 20-203"
- P "Normal" 1
- P "Reverse" 2
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- E 7.322834 -0.964069 105.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- C 0 0 28.268000 0.000000 -28.268000 0.000000 15.000000
- L 11579568 0.053333 0.000000 0.492126 7.322834 0.492126
- A 11579568 0.053333 27.775874 0.000000 -28.268000 0.000000 15.000000
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Crossings
-TURNOUT N "Kato Unitrack Double Crossover 20-210"
- P "Normal" 1 2 3 0 4 5 6
- P "Reverse" 1 7 8 9 6 0 4 10 11 12 3
- E 0.000000 0.000000 270.000000
- E 12.204724 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 12.204724 -1.299212 90.000000
- S 0 0 0.000000 0.000000 0.632000 0.000000
- S 0 0 0.632000 0.000000 11.555000 0.000000
- S 0 0 11.555000 0.000000 12.204724 0.000000
- S 0 0 0.000000 -1.299212 0.632000 -1.299212
- S 0 0 0.632000 -1.299212 11.555000 -1.299212
- S 0 0 11.555000 -1.299212 12.204724 -1.299212
- C 0 0 22.960000 0.631000 -22.960000 0.003000 12.880000
- S 0 0 5.750000 -0.578000 6.438000 -0.735000
- C 0 0 -22.960000 11.497000 21.661000 179.855000 12.874000
- C 0 0 -22.960000 0.691000 21.661000 167.271000 12.876000
- S 0 0 5.750000 -0.735000 6.438000 -0.578000
- C 0 0 22.960000 11.557000 -22.960000 347.117000 12.878000
- L 11579568 0.053333 0.000000 0.492126 12.204724 0.492126
- L 11579568 0.053333 0.000000 -0.492126 0.5 -0.492126
- L 11579568 0.053333 0.000000 -0.825878 0.5 -0.825878
- L 11579568 0.053333 0.5 -0.492126 0.5 -0.825878
- L 11579568 0.053333 12.204724 -0.492126 11.704724 -0.492126
- L 11579568 0.053333 12.204724 -0.825878 11.704724 -0.825878
- L 11579568 0.053333 11.704724 -0.492126 11.704724 -0.825878
- L 11579568 0.053333 0.000000 -1.772546 12.204724 -1.772546
- END
-TURNOUT N "Kato Unitrack Dbl Trk Single Crossover (left) 9.75 248mm 20-230"
- P "Normal" 1 2 0 3 4
- P "Reverse" 1 5 6 7 4
- E 0.000000 0.000000 270.000000
- E 9.763779 0.000000 90.000000
- E 0.000000 1.299212 270.000000
- E 9.763779 1.299212 90.000000
- S 0 0.000000 0.000000 0.000000 0.617287 0.000000
- S 0 0.000000 0.617287 0.000000 9.763779 0.000000
- S 0 0.000000 0.000000 1.299212 9.146492 1.299212
- S 0 0.000000 9.146492 1.299212 9.763779 1.299212
- C 0 0.000000 -14.226684 0.617306 14.226684 163.988842 16.011234
- S 0 0.000000 4.541371 0.551886 5.222408 0.747326
- C 0 0.000000 14.226684 9.146510 -12.927467 343.988842 16.011234
- L 11579568 0.053333 0.000000 -0.445774 9.763799 -0.445774
- L 11579568 0.053333 0.000000 1.744986 9.763799 1.744986
- END
-TURNOUT N "Kato Unitrack Dbl Trk Single Crossover (Right) 9.75 248mm 20-231"
- P "Normal" 1 2 0 3 4
- P "Reverse" 3 5 6 7 2
- E 0.000000 0.000000 270.000000
- E 9.763799 0.000000 90.000000
- E 0.000000 1.299212 270.000000
- E 9.763799 1.299212 90.000000
- S 0 0.000000 0.000000 0.000000 9.146512 0.000000
- S 0 0.000000 9.146512 0.000000 9.763799 0.000000
- S 0 0.000000 0.000000 1.299212 0.617287 1.299212
- S 0 0.000000 0.617287 1.299212 9.763799 1.299212
- C 0 0.000000 14.226749 0.617230 -12.927537 0.000076 16.011200
- S 0 0.000000 4.541380 0.747326 5.222419 0.551886
- C 0 0.000000 -14.226749 9.146530 14.226744 180.000076 16.011200
- L 11579568 0.053333 0.000000 -0.445774 9.763799 -0.445774
- L 11579568 0.053333 0.000000 1.744986 9.763799 1.744986
- END
-TURNOUT N "Kato Unitrack Crossing 15° X15R 20-301"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- E 0.000000 0.964069 285.000000
- E 7.322834 -0.964069 105.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- S 0 0 0.000000 0.964069 7.322834 -0.964069
- L 11579568 0.053333 3.71 0.492126 7.322834 0.492126
- L 11579568 0.053333 0.000000 -0.492126 3.62 -0.492126
- L 11579568 0.053333 0.12 1.43 3.71 0.492126
- L 11579568 0.053333 7.20 -1.43 3.62 -0.492126
- END
-TURNOUT N "Kato Unitrack Crossing 15° X15L 20-300"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- E 0.000000 -0.964069 255.000000
- E 7.322834 0.964069 75.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- S 0 0 0.000000 -0.964069 7.322834 0.964069
- L 11579568 0.053333 3.71 -0.492126 7.322834 -0.492126
- L 11579568 0.053333 0.000000 0.492126 3.62 0.492126
- L 11579568 0.053333 0.12 -1.43 3.71 -0.492126
- L 11579568 0.053333 7.20 1.43 3.62 0.492126
- END
-TURNOUT N "Kato Unitrack Crossing 90° w/S45.5 20-320"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- E 2.440944 2.440944 0.000000
- E 2.440944 -2.440944 180.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- S 0 0 2.440944 2.440944 2.440944 -2.440944
- L 11579568 0.053333 0.000000 0.492126 1.967610 0.492126
- L 11579568 0.053333 0.000000 -0.492126 1.967610 -0.492126
- L 11579568 0.053333 2.914278 0.492126 4.881889 0.492126
- L 11579568 0.053333 2.914278 -0.492126 4.881889 -0.492126
- L 11579568 0.053333 1.967610 -2.440944 1.967610 -0.500000
- L 11579568 0.053333 2.914278 -2.440944 2.914278 -0.500000
- L 11579568 0.053333 1.967610 2.440944 1.967610 0.500000
- L 11579568 0.053333 2.914278 2.440944 2.914278 0.500000
- END
-TURNOUT N "Kato Unitrack Crossing 90° w/o S45.5 20-320"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 1.299212 0.000000 90.000000
- E 0.649606 0.649606 0.000000
- E 0.649606 -0.649606 180.000000
- S 0 0 0.000000 0.000000 1.299212 0.000000
- S 0 0 0.649606 0.649606 0.649606 -0.650000
- L 11579568 0.053333 0.000000 0.492126 0.176272 0.492126
- L 11579568 0.053333 0.000000 -0.492126 0.176272 -0.492126
- L 11579568 0.053333 1.122940 0.492126 1.299212 0.492126
- L 11579568 0.053333 1.122940 -0.492126 1.299212 -0.492126
- L 11579568 0.053333 0.176272 -0.649606 0.176272 -0.492126
- L 11579568 0.053333 1.122940 -0.649606 1.122940 -0.492126
- L 11579568 0.053333 0.176272 0.649606 0.176272 0.492126
- L 11579568 0.053333 1.122940 0.649606 1.122940 0.492126
- END
-TURNOUT N "Kato Unitrack S45.5 (incl w/20-320) "
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.791339 0.000000 90.000000
- S 0 0 0.000000 0.000000 1.791339 0.000000
- L 11579568 0.053333 0.000000 0.492126 1.791339 0.492126
- L 11579568 0.053333 0.000000 -0.492126 1.791339 -0.492126
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Single Track Viaducts - Straights
-TURNOUT N "Kato Unitrack Viaduct Straight 9.75 248mm 20-400"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.763779 0.000000 90.000000
- S 0 0 0.000000 0.000000 9.763779 0.000000
- L 0 0.053333 0.000000 0.47334 9.763799 0.47334
- L 0 0.053333 0.000000 -0.47334 9.763799 -0.47334
- END
-TURNOUT N "Kato Unitrack Viaduct Straight 7.312 186mm 20-410"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- L 0 0.053333 0.000000 0.47334 7.322834 0.47334
- L 0 0.053333 0.000000 -0.47334 7.322834 -0.47334
- END
-TURNOUT N "Kato Unitrack Viaduct Straight 4.875 124mm 20-420"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- L 0 0.053333 0.000000 0.47334 4.881889 0.47334
- L 0 0.053333 0.000000 -0.47334 4.881889 -0.47334
- END
-TURNOUT N "Kato Unitrack Viaduct Straight(Platform) 4.875 124mm 20-421"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- L 0 0.053333 0.000000 0.47334 4.881889 0.47334
- L 0 0.053333 0.000000 -0.47334 4.881889 -0.47334
- L 0 0.040000 3.000000 -0.526440 3.000000 -0.826440
- L 0 0.040000 3.000000 -0.826440 1.900000 -0.826440
- L 0 0.040000 1.900000 -0.826440 1.900000 -0.526440
- END
-TURNOUT N "Kato Unitrack Viaduct Straight 2.4375 62mm 20-440"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.440944 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.440944 0.000000
- L 0 0.053333 0.000000 0.47334 2.440944 0.47334
- L 0 0.053333 0.000000 -0.47334 2.440944 -0.47334
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Single Track Viaducts - Curves
-TURNOUT N "Kato Unitrack Viaduct Curve 9.75R 249mm 45° Curve 20-505"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.931874 -2.871276 135.000000
- C 0 0 9.803150 0.000000 -9.803150 0.000000 45.000000
- A 0 0.053333 9.329810 0.000000 -9.803150 0.000000 45.000000
- A 0 0.053333 10.276490 0.000000 -9.803150 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Viaduct Curve 11R 282mm 45° 20-510"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.850556 -3.251807 135.000000
- C 0 0 11.102362 0.000000 -11.102362 0.000000 45.000000
- A 0 0.053333 10.629022 0.000000 -11.102362 0.000000 45.000000
- A 0 0.053333 11.575702 0.000000 -11.102362 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Viaduct Curve 12.375R 315mm 45° 20-520"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 8.769238 -3.632337 135.000000
- C 0 0 12.401575 0.000000 -12.401575 0.000000 45.000000
- A 0 0.053333 11.928235 0.000000 -12.401575 0.000000 45.000000
- A 0 0.053333 12.874915 0.000000 -12.401575 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Viaduct Curve 13.75R 348mm 45° 20-530"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.687920 -4.012868 135.000000
- C 0 0 13.700787 0.000000 -13.700787 0.000000 45.000000
- A 0 0.053333 13.227447 0.000000 -13.700787 0.000000 45.000000
- A 0 0.053333 14.174127 0.000000 -13.700787 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack Viaduct Curve 13.75R 348mm 30° 20-531"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.850394 -1.835557 120.000000
- C 0 0 13.700787 0.000000 -13.700787 0.000000 30.000000
- A 0 0.053333 13.227447 0.000000 -13.700787 0.000000 30.000000
- A 0 0.053333 14.174127 0.000000 -13.700787 0.000000 30.000000
- END
-TURNOUT N "Kato Unitrack Viaduct Curve 15R 381mm 30° 20-540"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.500000 -2.009619 120.000000
- C 0 0 15.000000 0.000000 -15.000000 0.000000 30.000000
- A 0 0.053333 14.526660 0.000000 -15.000000 0.000000 30.000000
- A 0 0.053333 15.473340 0.000000 -15.000000 0.000000 30.000000
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Double Track Viaducts - Straights
-TURNOUT N "Kato Unitrack Double Viaduct Straight 9.75 248mm 20-401"
- P "Normal" 1 0 2
- E 0.000000 0.649606 270.000000
- E 9.763779 0.649606 90.000000
- E 0.000000 -0.649606 270.000000
- E 9.763779 -0.649606 90.000000
- S 0 0 0.000000 0.649606 9.763779 0.649606
- S 0 0 0.000000 -0.649606 9.763779 -0.649606
- L 0 0.053333 0.000000 1.122946 9.763779 1.122946
- L 0 0.053333 0.000000 -1.122946 9.763779 -1.122946
- END
-TURNOUT N "Kato Unitrack Double Viaduct Straight 7 5/16 186mm 20-411"
- P "Normal" 1 0 2
- E 0.000000 0.649606 270.000000
- E 7.322834 0.649606 90.000000
- E 0.000000 -0.649606 270.000000
- E 7.322834 -0.649606 90.000000
- S 0 0 0.000000 0.649606 7.322834 0.649606
- S 0 0 0.000000 -0.649606 7.322834 -0.649606
- L 0 0.053333 0.000000 1.122946 7.322834 1.122946
- L 0 0.053333 0.000000 -1.122946 7.322834 -1.122946
- END
-TURNOUT N "Kato Unitrack Double Viaduct Straight 4.875 124mm 20-422"
- P "Normal" 1
- E 0.000000 0.649606 270.000000
- E 4.881889 0.649606 90.000000
- E 0.000000 -0.649606 270.000000
- E 4.881889 -0.649606 90.000000
- S 0 0 0.000000 0.649606 4.881889 0.649606
- S 0 0 0.000000 -0.649606 4.881889 -0.649606
- L 0 0.053333 0.000000 1.122946 4.881889 1.122946
- L 0 0.053333 0.000000 -1.122946 4.881889 -1.122946
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale CS Double Track Viaducts - Curves
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Viaduct Curve 16.3,15R 414/381mm 45° 20-544"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 10.606602 -4.393398 135.000000
- E 0.000000 1.299213 270.000000
- E 11.525284 -3.474716 135.000000
- C 0 0 15.000000 0.000000 -15.000000 0.000000 45.000000
- C 0 0 16.299213 0.000000 -15.000000 0.000000 45.000000
- A 0 0.053333 14.526660 0.000000 -15.000000 0.000000 45.000000
- A 0 0.053333 16.772553 0.000000 -15.000000 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Viaduct Easement Curve (R) Appr 16.3/15R 414/381mm 22.5° 20-545 Right"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 6.237438 -1.240704 112.500000
- E 0.000000 -1.299212 270.000000
- E 5.740251 -2.441019 112.500000
- C 0 0 16.299212 0.000000 -16.299212 0.000000 22.500000
- C 0 0 15.000000 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 22.500000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Viaduct Easement Curve (L) Appr 16.3/15R 414/381mm 22.5° 20-545 Left"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 6.237438 -1.240704 112.500000
- E 0.000000 -1.299212 270.000000
- E 5.740251 -2.441019 112.500000
- C 0 0 16.299212 0.000000 -16.299212 0.000000 22.500000
- C 0 0 15.000000 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 22.500000
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale GL CS Double Track - Straights
-TURNOUT N "Kato Unitrack CS Dbl Trk Straight 9.75 248mm 20-004"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 9.763799 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 9.763799 -1.299212 90.000000
- S 0 0 0.000000 0.000000 9.763799 0.000000
- S 0 0 0.000000 -1.299212 9.763799 -1.299212
- L 11579568 0.053333 0.000000 0.492126 9.763799 0.492126
- L 11579568 0.053333 0.000000 -1.744986 9.763799 -1.744986
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk Straight 7 5/16 186mm 20-012"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 7.322834 -1.299212 90.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- S 0 0 0.000000 -1.299212 7.322834 -1.299212
- L 11579568 0.053333 0.000000 0.492126 7.322834 0.492126
- L 11579568 0.053333 0.000000 -1.744986 7.322834 -1.744986
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk Straight 4 7/8 124mm 20-023"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 4.881889 -1.299212 90.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- S 0 0 0.000000 -1.299212 4.881889 -1.299212
- L 11579568 0.053333 0.000000 0.492126 4.881889 0.492126
- L 11579568 0.053333 0.000000 -1.744986 4.881889 -1.744986
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk Straight 2 7/16 62mm 20-042"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 2.440944 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 2.440944 -1.299212 90.000000
- S 0 0 0.000000 0.000000 2.440944 0.000000
- S 0 0 0.000000 -1.299212 2.440944 -1.299212
- L 11579568 0.053333 0.000000 0.492126 2.440944 0.492126
- L 11579568 0.053333 0.000000 -1.744986 2.440944 -1.744986
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk Feeder Track 62mm 20-043"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 2.440944 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 2.440944 -1.299212 90.000000
- S 0 0 0.000000 0.000000 2.440944 0.000000
- S 0 0 0.000000 -1.299212 2.440944 -1.299212
- L 11579568 0.053333 0.000000 0.492126 2.440944 0.492126
- L 11579568 0.053333 0.000000 -1.744986 2.440944 -1.744986
- L 0 0.026667 2.000000 -1.798086 2.000000 -1.998086
- L 0 0.026667 2.000000 -1.998086 2.100000 -2.098086
- L 0 0.026667 2.000000 -1.998086 1.900000 -2.098086
- L 16711680 0.026667 1.800000 -1.798086 1.800000 -1.998086
- L 16711680 0.026667 1.800000 -1.998086 1.900000 -2.098086
- L 16711680 0.026667 1.800000 -1.998086 1.700000 -2.098086
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale GL CS Double Track - Curves
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Curve 16.3/15R 414/381mm 45° 20-181"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 11.525283 -4.773929 135.000000
- E 0.000000 -1.299212 270.000000
- E 10.606602 -5.692610 135.000000
- C 0 0 16.299212 0.000000 -16.299212 0.000000 45.000000
- C 0 0 15.000000 0.000000 -16.299212 0.000000 45.000000
- A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 45.000000
- A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Easement Curve (R) Appr 16.3/15R 414/381mm 22.5° 20-182 Right"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 6.237438 -1.240704 112.500000
- E 0.000000 -1.299212 270.000000
- E 5.740251 -2.441019 112.500000
- C 0 0 16.299212 0.000000 -16.299212 0.000000 22.500000
- C 0 0 15.000000 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 22.500000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Easement Curve (L) Appr 16.3/15R 414/381mm 22.5° 20-182 Left"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 6.237438 -1.240704 112.500000
- E 0.000000 -1.299212 270.000000
- E 5.740251 -2.441019 112.500000
- C 0 0 16.299212 0.000000 -16.299212 0.000000 22.500000
- C 0 0 15.000000 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 16.744986 0.000000 -16.299212 0.000000 22.500000
- A 11579568 0.053333 14.554226 0.000000 -16.299212 0.000000 22.500000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Curve 12.375/11R 315/282mm 45° 20-183"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 0.000000 -1.299212 270.000000
- E 8.769238 -3.632337 135.000000
- E 7.850556 -4.551019 135.000000
- C 0 0 12.401575 0.000000 -12.401575 0.000000 45.000000
- C 0 0 11.102362 0.000000 -12.401575 0.000000 45.000000
- A 11579568 0.053333 12.847349 0.000000 -12.401575 0.000000 45.000000
- A 11579568 0.053333 10.656588 0.000000 -12.401575 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Easement Curve 12.375/11R 315/282mm 22.5° 20-184 Right"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 0.000000 -1.299212 270.000000
- E 4.745877 -0.944014 112.500000
- E 4.248690 -2.144330 112.500000
- C 0 0 12.401575 0.000000 -12.401575 0.000000 22.500000
- C 0 0 11.102362 0.000000 -12.401575 0.000000 22.500000
- A 11579568 0.053333 12.847349 0.000000 -12.401575 0.000000 22.500000
- A 11579568 0.053333 10.656588 0.000000 -12.401575 0.000000 22.500000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Easement Curve 12.375/11R 315/282mm 22.5° 20-184 Left"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 0.000000 -1.299212 270.000000
- E 4.745877 -0.944014 112.500000
- E 4.248690 -2.144330 112.500000
- C 0 0 12.401575 0.000000 -12.401575 0.000000 22.500000
- C 0 0 11.102362 0.000000 -12.401575 0.000000 22.500000
- A 11579568 0.053333 12.847349 0.000000 -12.401575 0.000000 22.500000
- A 11579568 0.053333 10.656588 0.000000 -12.401575 0.000000 22.500000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Curve 18.875/17.625R 480/447mm 45° 20-185"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 13.362648 -5.534990 135.000000
- E 0.000000 -1.299212 270.000000
- E 12.443966 -6.453672 135.000000
- C 0 0 18.897638 0.000000 -18.897638 0.000000 45.000000
- C 0 0 17.598425 0.000000 -18.897638 0.000000 45.000000
- A 11579568 0.053333 19.343412 0.000000 -18.897638 0.000000 45.000000
- A 11579568 0.053333 17.152651 0.000000 -18.897638 0.000000 45.000000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Easement Curve (R) Appr 18.875/17.625R 480/447mm 22.5° 20-186 Right"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.231813 -1.438497 112.500000
- E 0.000000 -1.299212 270.000000
- E 6.734626 -2.638813 112.500000
- C 0 0 18.897638 0.000000 -18.897638 0.000000 22.500000
- C 0 0 17.598425 0.000000 -18.897638 0.000000 22.500000
- A 11579568 0.053333 19.343412 0.000000 -18.897638 0.000000 22.500000
- A 11579568 0.053333 17.152651 0.000000 -18.897638 0.000000 22.500000
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk SupElev Easement Curve (L) Appr 18.875/17.625R 480/447mm 22.5° 20-186 Left"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.231813 -1.438497 112.500000
- E 0.000000 -1.299212 270.000000
- E 6.734626 -2.638813 112.500000
- C 0 0 18.897638 0.000000 -18.897638 0.000000 22.500000
- C 0 0 17.598425 0.000000 -18.897638 0.000000 22.500000
- A 11579568 0.053333 19.343412 0.000000 -18.897638 0.000000 22.500000
- A 11579568 0.053333 17.152651 0.000000 -18.897638 0.000000 22.500000
- END
-
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale V-15 Double Track Widening Sections
-TURNOUT N "Kato Unitrack CS Dbl Trk Widening Section 310mm 20-051 Left"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 12.204724 0.000000 90.000000
- E 0.000000 1.299212 270.000000
- E 12.204724 2.598425 90.000000
- S 0 0 0.000000 0.000000 12.204724 0.000000
- S 0 0 0.000000 1.299212 0.980334 1.299212
- C 0 0 17.598425 0.980334 18.897637 169.500000 10.500000
- S 0 0 4.187392 1.593899 8.017332 2.303737
- C 0 0 17.598425 11.224390 -15.000001 349.500000 10.500000
- S 0 0 11.224390 2.598425 12.204724 2.598425
- L 11579568 0.053333 0.000000 -0.492126 12.204724 -0.492126
- L 11579568 0.053333 0.000000 1.744986 0.980334 1.744986
- A 11579568 0.053333 17.152651 0.980334 18.897637 169.500000 10.500000
- L 11579568 0.053333 4.187392 2.039673 8.017332 2.749511
- A 11579568 0.053333 18.044199 11.224390 -15.000001 349.500000 10.500000
- L 11579568 0.053333 11.224390 3.044199 12.204724 3.044199
- L 11579568 0.053333 11.704724 0.492126 12.204724 0.492126
- L 11579568 0.053333 11.704724 0.492126 11.704724 2.152651
- L 11579568 0.053333 11.704724 2.152651 12.204724 2.152651
- END
-TURNOUT N "Kato Unitrack CS Dbl Trk Widening Section 310mm 20-052 Right"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 12.204724 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 12.204724 -2.598425 90.000000
- S 0 0 0.000000 0.000000 12.204724 0.000000
- S 0 0 0.000000 -1.299212 0.980334 -1.299212
- C 0 0 17.598425 0.980334 -18.897637 0.000000 10.500000
- S 0 0 4.187392 -1.593899 8.017332 -2.303737
- C 0 0 17.598425 11.224390 15.000001 180.000000 10.500000
- S 0 0 11.224390 -2.598425 12.204724 -2.598425
- L 11579568 0.053333 0.000000 0.492126 12.204724 0.492126
- L 11579568 0.053333 0.000000 -1.744986 0.980334 -1.744986
- A 11579568 0.053333 17.152651 0.980334 -18.897637 0.000000 10.500000
- L 11579568 0.053333 4.187392 -2.039673 8.017332 -2.749511
- A 11579568 0.053333 18.044199 11.224390 15.000001 180.000000 10.500000
- L 11579568 0.053333 11.224390 -3.044199 12.204724 -3.044199
- L 11579568 0.053333 11.704724 -0.492126 12.204724 -0.492126
- L 11579568 0.053333 11.704724 -0.492126 11.704724 -2.152651
- L 11579568 0.053333 11.704724 -2.152651 12.204724 -2.152651
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Conc Sleeper Straight Track
-TURNOUT N "Kato Unitrack CS Trk Straight 9.75 248mm 20-875"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.763779 0.000000 90.000000
- S 0 0 0.000000 0.000000 9.763779 0.000000
- L 11579568 0.053333 0.000000 0.492126 9.763779 0.492126
- L 11579568 0.053333 0.000000 -0.492126 9.763779 -0.492126
- END
-TURNOUT N "Kato Unitrack CS Trk Straight 4 7/8 124mm 20-XXX"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- L 11579568 0.053333 0.000000 0.492126 4.881889 0.492126
- L 11579568 0.053333 0.000000 -0.492126 4.881889 -0.492126
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Bridges
-TURNOUT N "Kato Unitrack Dbl. Track Truss Bridge 9.75 248mm 20-435/6/7/8"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 9.763779 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 9.763779 -1.299212 90.000000
- S 0 0 0.000000 0.000000 9.763779 0.000000
- S 0 0 0.000000 -1.299212 9.763779 -1.299212
- L 0 0.053333 0.000000 0.47334 9.763779 0.47334
- L 0 0.053333 0.000000 -1.772552 9.763779 -1.772552
- L 0 0.053333 1.220474 -1.772552 1.220474 0.47334
- L 0 0.053333 1.220474 -1.772552 2.440948 0.47334
- L 0 0.053333 2.440948 -1.772552 1.220474 0.47334
- L 0 0.053333 2.440948 -1.772552 2.440948 0.47334
- L 0 0.053333 2.440948 -1.772552 3.661422 0.47334
- L 0 0.053333 3.661422 -1.772552 2.440948 0.47334
- L 0 0.053333 3.661422 -1.772552 3.661422 0.47334
- L 0 0.053333 3.661422 -1.772552 4.881896 0.47334
- L 0 0.053333 4.881896 -1.772552 3.661422 0.47334
- L 0 0.053333 4.881896 -1.772552 4.881896 0.47334
- L 0 0.053333 4.881896 -1.772552 6.102370 0.47334
- L 0 0.053333 6.102370 -1.772552 4.881896 0.47334
- L 0 0.053333 6.102370 -1.772552 6.102370 0.47334
- L 0 0.053333 6.102370 -1.772552 7.322844 0.47334
- L 0 0.053333 7.322844 -1.772552 6.102370 0.47334
- L 0 0.053333 7.322844 -1.772552 7.322844 0.47334
- L 0 0.053333 7.322844 -1.772552 8.543318 0.47334
- L 0 0.053333 8.543318 -1.772552 7.322844 0.47334
- L 0 0.053333 8.543318 -1.772552 8.543318 0.47334
- END
-TURNOUT N "Kato Unitrack Single Track Truss Bridge 9.75 248mm 20-430/1/2/3/4"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.763779 0.000000 90.000000
- S 0 0 0.000000 0.000000 9.763779 0.000000
- L 0 0.053333 0.000000 0.47334 9.763779 0.47334
- L 0 0.053333 0.000000 -0.47334 9.763779 -0.47334
- L 0 0.053333 1.220474 -0.47334 1.220474 0.47334
- L 0 0.053333 1.220474 -0.47334 2.440948 0.47334
- L 0 0.053333 2.440948 -0.47334 1.220474 0.47334
- L 0 0.053333 2.440948 -0.47334 2.440948 0.47334
- L 0 0.053333 2.440948 -0.47334 3.661422 0.47334
- L 0 0.053333 3.661422 -0.47334 2.440948 0.47334
- L 0 0.053333 3.661422 -0.47334 3.661422 0.47334
- L 0 0.053333 3.661422 -0.47334 4.881896 0.47334
- L 0 0.053333 4.881896 -0.47334 3.661422 0.47334
- L 0 0.053333 4.881896 -0.47334 4.881896 0.47334
- L 0 0.053333 4.881896 -0.47334 6.102370 0.47334
- L 0 0.053333 6.102370 -0.47334 4.881896 0.47334
- L 0 0.053333 6.102370 -0.47334 6.102370 0.47334
- L 0 0.053333 6.102370 -0.47334 7.322844 0.47334
- L 0 0.053333 7.322844 -0.47334 6.102370 0.47334
- L 0 0.053333 7.322844 -0.47334 7.322844 0.47334
- L 0 0.053333 7.322844 -0.47334 8.543318 0.47334
- L 0 0.053333 8.543318 -0.47334 7.322844 0.47334
- L 0 0.053333 8.543318 -0.47334 8.543318 0.47334
- END
-TURNOUT N "Kato Unitrack Single Track Plate Grider Bridge 7 5/16 186mm 20-450/1/2/3/4"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- L 0 0.053333 0.000000 0.47334 7.322834 0.47334
- L 0 0.053333 0.000000 -0.47334 7.322834 -0.47334
- END
-TURNOUT N "Kato Unitrack Double Track Plate Grider Bridge 7 5/16 186mm 20-455/6/7/8"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 7.322834 0.000000 90.000000
- E 0.000000 -1.299212 270.000000
- E 7.322834 -1.299212 90.000000
- S 0 0 0.000000 0.000000 7.322834 0.000000
- S 0 0 0.000000 -1.299212 7.322834 -1.299212
- L 0 0.053333 0.000000 0.47334 7.322834 0.47334
- L 0 0.053333 0.000000 -0.649606 7.322834 -0.649606
- L 0 0.053333 0.000000 -1.772552 7.322834 -1.772552
- END
-TURNOUT N "Kato Unitrack Deck Plate Grider Bridge 4 7/8 124mm 20-460/1/2/3/4"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.881889 0.000000 90.000000
- S 0 0 0.000000 0.000000 4.881889 0.000000
- L 0 0.053333 0.000000 0.47334 4.881889 0.47334
- L 0 0.053333 0.000000 -0.47334 4.881889 -0.47334
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Structures
-STRUCTURE N "Kato Unitrack Pier 23-015"
- X pier 0.590551 "1" 0.984251 "2" 1.377952 "3" 1.771653 "4" 1.968503 "5"
- L 0 0.000000 -0.250000 -0.5 0.250000 -0.5
- L 0 0.000000 0.250000 -0.5 0.250000 0.5
- L 0 0.000000 0.250000 0.5 -0.250000 0.5
- L 0 0.000000 -0.250000 0.5 -0.250000 -0.5
- A 0 0.000000 0.250000 -0.000000 0.50000 270.000000 180.000000
- A 0 0.000000 0.250000 -0.000000 -0.50000 90.000000 180.000000
- END
-STRUCTURE N "Kato Unitrack Pier 23-016"
- X pier 1.968503 "5"
- L 7368826 0.040000 -0.75 -0.6 0.75 -0.6
- L 7368826 0.040000 0.75 -0.6 0.75 1.899212
- L 7368826 0.040000 0.75 1.899212 -0.75 1.899212
- L 7368826 0.040000 -0.75 1.899212 -0.75 -0.6
- END
-STRUCTURE N "Kato Unitrack Island Platform Type A 23-100"
- L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
- L 10824234 0.000000 0.000000 1.653543 9.763780 1.653543
- L 10824234 0.000000 9.763780 1.653543 9.763780 0.000000
- L 10824234 0.000000 9.763780 0.000000 0.000000 0.000000
- L 10824234 0.000000 0.000000 0.826772 9.763780 0.826772
- L 10824234 0.000000 0.787402 1.141732 5.157480 1.141732
- L 10824234 0.000000 5.157480 1.141732 5.157480 0.511811
- L 10824234 0.000000 5.157480 0.511811 0.787402 0.511811
- L 10824234 0.000000 0.787402 0.511811 0.787402 1.141732
- L 10824234 0.000000 2.952756 1.141732 2.952756 0.511811
- L 10824234 0.000000 0.078740 1.653543 0.078740 0.866142
- L 10824234 0.000000 0.157480 1.653543 0.157480 0.984252
- L 10824234 0.000000 0.236220 1.653543 0.236220 1.102362
- L 10824234 0.000000 0.314961 1.653543 0.314961 1.220472
- L 10824234 0.000000 0.393701 1.653543 0.393701 1.299213
- L 10824234 0.000000 0.472441 1.653543 0.472441 1.377953
- L 10824234 0.000000 0.551181 1.653543 0.551181 1.496063
- L 10824234 0.000000 0.629921 1.653543 0.629921 1.614173
- L 10824234 0.000000 9.685039 0.000000 9.685039 0.787402
- L 10824234 0.000000 9.606299 0.000000 9.606299 0.669291
- L 10824234 0.000000 9.527559 0.000000 9.527559 0.551181
- L 10824234 0.000000 9.448819 0.000000 9.448819 0.433071
- L 10824234 0.000000 9.370079 0.000000 9.370079 0.354331
- L 10824234 0.000000 9.291339 0.000000 9.291339 0.236220
- L 10824234 0.000000 9.212598 0.000000 9.212598 0.157480
- L 10824234 0.000000 9.133858 0.000000 9.133858 0.039370
- END
-STRUCTURE N "Kato Unitrack Island Platform Type B 23-101"
- L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
- L 10824234 0.000000 0.000000 1.653543 9.763780 1.653543
- L 10824234 0.000000 9.763780 1.653543 9.763780 0.000000
- L 10824234 0.000000 9.763780 0.000000 0.000000 0.000000
- L 10824234 0.000000 0.000000 0.826772 9.763780 0.826772
- L 10824234 0.000000 0.787402 1.141732 5.157480 1.141732
- L 10824234 0.000000 5.157480 1.141732 5.157480 0.511811
- L 10824234 0.000000 5.157480 0.511811 0.787402 0.511811
- L 10824234 0.000000 0.787402 0.511811 0.787402 1.141732
- L 10824234 0.000000 2.952756 1.141732 2.952756 0.511811
- L 10824234 0.000000 0.078740 1.653543 0.078740 0.866142
- L 10824234 0.000000 0.157480 1.653543 0.157480 0.984252
- L 10824234 0.000000 0.236220 1.653543 0.236220 1.102362
- L 10824234 0.000000 0.314961 1.653543 0.314961 1.220472
- L 10824234 0.000000 0.393701 1.653543 0.393701 1.299213
- L 10824234 0.000000 0.472441 1.653543 0.472441 1.377953
- L 10824234 0.000000 0.551181 1.653543 0.551181 1.496063
- L 10824234 0.000000 0.629921 1.653543 0.629921 1.614173
- L 10824234 0.000000 9.685039 0.000000 9.685039 0.787402
- L 10824234 0.000000 9.606299 0.000000 9.606299 0.669291
- L 10824234 0.000000 9.527559 0.000000 9.527559 0.551181
- L 10824234 0.000000 9.448819 0.000000 9.448819 0.433071
- L 10824234 0.000000 9.370079 0.000000 9.370079 0.354331
- L 10824234 0.000000 9.291339 0.000000 9.291339 0.236220
- L 10824234 0.000000 9.212598 0.000000 9.212598 0.157480
- L 10824234 0.000000 9.133858 0.000000 9.133858 0.039370
- END
-STRUCTURE N "Kato Unitrack Island Platform End, Type 1 23-102"
- L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
- L 10824234 0.000000 0.000000 0.000000 7.874016 0.000000
- L 10824234 0.000000 7.874016 0.000000 7.874016 1.653543
- L 10824234 0.000000 7.874016 1.653543 0.000000 1.653543
- L 10824234 0.000000 0.787402 1.653543 0.787402 0.000000
- L 10824234 0.000000 0.787402 0.629921 0.196850 0.629921
- L 10824234 0.000000 0.196850 0.629921 0.196850 0.984252
- L 10824234 0.000000 0.196850 0.984252 0.787402 0.984252
- L 10824234 0.000000 0.787402 0.984252 0.787402 0.629921
- L 10824234 0.000000 0.669291 0.629921 0.669291 0.984252
- L 10824234 0.000000 0.551181 0.629921 0.551181 0.984252
- L 10824234 0.000000 0.433071 0.629921 0.433071 0.984252
- L 10824234 0.000000 0.314961 0.629921 0.314961 0.984252
- L 0 0.026667 0.866142 1.614173 0.866142 0.039370
- A 0 0.026667 0.141951 5.196850 0.826772 0.000000 360.000000
- L 0 0.000000 3.031496 0.944882 4.606299 0.944882
- L 0 0.000000 4.606299 0.944882 4.606299 0.708661
- L 0 0.000000 4.606299 0.708661 3.031496 0.708661
- L 0 0.000000 3.031496 0.708661 3.031496 0.944882
- L 0 0.066667 3.543307 0.826772 4.094488 0.826772
- END
-STRUCTURE N "Kato Unitrack Island Platform End, Type 2 23-103"
- L 10824234 0.000000 7.874016 0.000000 7.874016 1.653543
- L 10824234 0.000000 7.874016 1.653543 0.000000 1.653543
- A 0 0.026667 0.141951 5.196850 0.826772 0.000000 360.000000
- L 0 0.000000 3.031496 0.944882 4.606299 0.944882
- L 0 0.000000 4.606299 0.944882 4.606299 0.708661
- L 0 0.000000 4.606299 0.708661 3.031496 0.708661
- L 0 0.000000 3.031496 0.708661 3.031496 0.944882
- L 0 0.066667 3.543307 0.826772 4.094488 0.826772
- A 10824234 0.000000 27.822226 7.874016 27.822226 180.000000 15.000000
- L 0 0.026667 0.866142 1.614173 0.866142 1.023622
- L 10824234 0.000000 0.196850 1.535433 0.196850 1.299213
- L 10824234 0.000000 0.669291 1.535433 0.669291 1.299213
- L 10824234 0.000000 0.551181 1.535433 0.551181 1.299213
- L 10824234 0.000000 0.433071 1.535433 0.433071 1.299213
- L 10824234 0.000000 0.314961 1.535433 0.314961 1.299213
- L 10824234 0.000000 0.196667 1.295000 0.670000 1.298333
- L 10824234 0.000000 0.193333 1.535000 0.670000 1.535000
- L 10824234 0.000000 0.670000 1.535000 0.670000 1.651667
- L 10824234 0.000000 0.670000 1.295833 0.670000 0.949167
- L 10824234 0.000000 0.673333 0.946667 0.000000 1.126667
- L 10824234 0.000000 0.006667 1.125000 0.000000 1.645000
- END
-STRUCTURE N "Kato Unitrack Island Platform End, Type 3 23-104"
- L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
- L 10824234 0.000000 0.000000 1.653543 7.874016 1.653543
- A 0 0.026667 0.141951 2.677166 0.826772 0.000000 360.000000
- L 0 0.000000 4.842520 0.944882 3.267717 0.944882
- L 0 0.000000 3.267717 0.944882 3.267717 0.708661
- L 0 0.000000 3.267717 0.708661 4.842520 0.708661
- L 0 0.000000 4.842520 0.708661 4.842520 0.944882
- L 0 0.066667 4.330709 0.826772 3.779528 0.826772
- A 10824234 0.000000 27.822226 0.000000 27.822226 165.000000 15.000000
- L 0 0.026667 7.007874 1.614173 7.007874 1.023622
- L 10824234 0.000000 7.677166 1.535433 7.677166 1.299213
- L 10824234 0.000000 7.204725 1.535433 7.204725 1.299213
- L 10824234 0.000000 7.322835 1.535433 7.322835 1.299213
- L 10824234 0.000000 7.440945 1.535433 7.440945 1.299213
- L 10824234 0.000000 7.559055 1.535433 7.559055 1.299213
- L 10824234 0.000000 7.677349 1.295000 7.204016 1.298333
- L 10824234 0.000000 7.680683 1.535000 7.204016 1.535000
- L 10824234 0.000000 7.204016 1.535000 7.204016 1.651667
- L 10824234 0.000000 7.204016 1.295833 7.204016 0.949167
- L 10824234 0.000000 7.200683 0.946667 7.874016 1.126667
- L 10824234 0.000000 7.867349 1.125000 7.874016 1.645000
- END
-STRUCTURE N "Kato Unitrack Island Platform Type D 23-106"
- L 10824234 0 0.000000 0.000000 0.000000 1.653543
- L 10824234 0 0.000000 1.653543 9.763780 1.653543
- L 10824234 0 9.763780 1.653543 9.763780 0.000000
- L 10824234 0 9.763780 0.000000 0.000000 0.000000
- END
-STRUCTURE N "Kato Unitrack One Sided Platform Type A 23-110"
- L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
- L 10824234 0.000000 0.000000 1.653543 9.763780 1.653543
- L 10824234 0.000000 9.763780 1.653543 9.763780 0.000000
- L 10824234 0.000000 9.763780 0.000000 0.000000 0.000000
- L 10824234 0.000000 5.157480 1.141732 5.157480 0.511811
- L 10824234 0.000000 0.078740 1.653543 0.078740 0.866142
- L 10824234 0.000000 0.157480 1.653543 0.157480 0.984252
- L 10824234 0.000000 0.236220 1.653543 0.236220 1.102362
- L 10824234 0.000000 0.314961 1.653543 0.314961 1.220472
- L 10824234 0.000000 0.393701 1.653543 0.393701 1.299213
- L 10824234 0.000000 0.472441 1.653543 0.472441 1.377953
- L 10824234 0.000000 0.551181 1.653543 0.551181 1.496063
- L 10824234 0.000000 0.629921 1.653543 0.629921 1.614173
- L 10824234 0.000000 9.685039 0.000000 9.685039 0.787402
- L 10824234 0.000000 9.606299 0.000000 9.606299 0.669291
- L 10824234 0.000000 9.527559 0.000000 9.527559 0.551181
- L 10824234 0.000000 9.448819 0.000000 9.448819 0.433071
- L 10824234 0.000000 9.370079 0.000000 9.370079 0.354331
- L 10824234 0.000000 9.291339 0.000000 9.291339 0.236220
- L 10824234 0.000000 9.212598 0.000000 9.212598 0.157480
- L 10824234 0.000000 9.133858 0.000000 9.133858 0.039370
- L 10824234 0.000000 1.181102 1.141732 8.582677 1.141732
- L 10824234 0.000000 8.582677 1.141732 8.582677 0.511811
- L 10824234 0.000000 8.582677 0.511811 1.181102 0.511811
- L 10824234 0.000000 1.181102 0.511811 1.181102 1.141732
- END
-STRUCTURE N "Kato Unitrack One Sided Platform Type B 23-111"
- L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
- L 10824234 0.000000 0.000000 1.653543 9.763780 1.653543
- L 10824234 0.000000 9.763780 1.653543 9.763780 0.000000
- L 10824234 0.000000 9.763780 0.000000 0.000000 0.000000
- L 10824234 0.000000 5.157480 1.141732 5.157480 0.511811
- L 10824234 0.000000 0.078740 1.653543 0.078740 0.866142
- L 10824234 0.000000 0.157480 1.653543 0.157480 0.984252
- L 10824234 0.000000 0.236220 1.653543 0.236220 1.102362
- L 10824234 0.000000 0.314961 1.653543 0.314961 1.220472
- L 10824234 0.000000 0.393701 1.653543 0.393701 1.299213
- L 10824234 0.000000 0.472441 1.653543 0.472441 1.377953
- L 10824234 0.000000 0.551181 1.653543 0.551181 1.496063
- L 10824234 0.000000 0.629921 1.653543 0.629921 1.614173
- L 10824234 0.000000 9.685039 0.000000 9.685039 0.787402
- L 10824234 0.000000 9.606299 0.000000 9.606299 0.669291
- L 10824234 0.000000 9.527559 0.000000 9.527559 0.551181
- L 10824234 0.000000 9.448819 0.000000 9.448819 0.433071
- L 10824234 0.000000 9.370079 0.000000 9.370079 0.354331
- L 10824234 0.000000 9.291339 0.000000 9.291339 0.236220
- L 10824234 0.000000 9.212598 0.000000 9.212598 0.157480
- L 10824234 0.000000 9.133858 0.000000 9.133858 0.039370
- L 10824234 0.000000 1.181102 1.141732 8.582677 1.141732
- L 10824234 0.000000 8.582677 1.141732 8.582677 0.511811
- L 10824234 0.000000 8.582677 0.511811 1.181102 0.511811
- L 10824234 0.000000 1.181102 0.511811 1.181102 1.141732
- END
-STRUCTURE N "Kato Unitrack One Sided Platform End Type 1 23-112"
- L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
- L 10824234 0.000000 0.000000 0.000000 7.874016 0.000000
- L 10824234 0.000000 7.874016 0.000000 7.874016 1.653543
- L 10824234 0.000000 7.874016 1.653543 0.000000 1.653543
- L 10824234 0.000000 0.787402 1.653543 0.787402 0.000000
- L 10824234 0.000000 0.787402 0.629921 0.196850 0.629921
- L 10824234 0.000000 0.196850 0.629921 0.196850 0.984252
- L 10824234 0.000000 0.196850 0.984252 0.787402 0.984252
- L 10824234 0.000000 0.787402 0.984252 0.787402 0.629921
- L 10824234 0.000000 0.669291 0.629921 0.669291 0.984252
- L 10824234 0.000000 0.551181 0.629921 0.551181 0.984252
- L 10824234 0.000000 0.433071 0.629921 0.433071 0.984252
- L 10824234 0.000000 0.314961 0.629921 0.314961 0.984252
- L 0 0.026667 0.866142 1.614173 0.866142 0.039370
- A 0 0.026667 0.141951 5.196850 0.826772 0.000000 360.000000
- L 0 0.000000 3.031496 0.944882 4.606299 0.944882
- L 0 0.000000 4.606299 0.944882 4.606299 0.708661
- L 0 0.000000 4.606299 0.708661 3.031496 0.708661
- L 0 0.000000 3.031496 0.708661 3.031496 0.944882
- L 0 0.066667 3.543307 0.826772 4.094488 0.826772
- L 0 0.026667 0.866142 1.614173 7.874016 1.614173
- END
-STRUCTURE N "Kato Unitrack One Sided Platform End Type 2 23-113"
- L 10824234 0.000000 7.874016 0.000000 7.874016 1.653543
- L 10824234 0.000000 7.874016 0.000000 0.000000 0.000000
- L 10824234 0.000000 0.000000 0.000000 0.000000 1.653543
- L 10824234 0.000000 0.000000 1.653543 7.874016 1.653543
- L 10824234 0.000000 7.086614 1.653543 7.086614 0.000000
- L 10824234 0.000000 7.086614 0.629921 7.677166 0.629921
- L 10824234 0.000000 7.677166 0.629921 7.677166 0.984252
- L 10824234 0.000000 7.677166 0.984252 7.086614 0.984252
- L 10824234 0.000000 7.086614 0.984252 7.086614 0.629921
- L 10824234 0.000000 7.204725 0.629921 7.204725 0.984252
- L 10824234 0.000000 7.322835 0.629921 7.322835 0.984252
- L 10824234 0.000000 7.440945 0.629921 7.440945 0.984252
- L 10824234 0.000000 7.559055 0.629921 7.559055 0.984252
- L 0 0.026667 7.007874 1.614173 7.007874 0.039370
- A 0 0.026667 0.141951 2.677166 0.826772 0.000000 360.000000
- L 0 0.000000 4.842520 0.944882 3.267717 0.944882
- L 0 0.000000 3.267717 0.944882 3.267717 0.708661
- L 0 0.000000 3.267717 0.708661 4.842520 0.708661
- L 0 0.000000 4.842520 0.708661 4.842520 0.944882
- L 0 0.066667 4.330709 0.826772 3.779528 0.826772
- L 0 0.026667 7.007874 1.614173 0.000000 1.614173
- END
-STRUCTURE N "Kato Unitrack Overhead Station 23-200"
- L 10824234 0.000000 0.000000 5.393701 13.307087 5.393701
- L 10824234 0.000000 12.952756 1.299213 3.188976 1.299213
- L 10824234 0.000000 3.188976 1.299213 3.188976 2.952756
- L 10824234 0.000000 3.188976 2.952756 12.952756 2.952756
- L 10824234 0.000000 12.952756 2.952756 12.952756 1.299213
- L 10824234 0.000000 12.165354 5.393701 12.165354 4.251969
- L 10824234 0.000000 1.102362 5.393701 1.102362 4.251969
- L 10824234 0.000000 7.874016 5.393701 7.874016 4.251969
- L 10824234 0.000000 5.511811 5.393701 5.511811 4.251969
- L 10824234 0.000000 7.913386 4.251969 7.913386 0.000000
- L 10824234 0.000000 7.913386 0.000000 2.716535 0.000000
- L 10824234 0.000000 2.716535 0.000000 2.716535 4.251969
- L 10824234 0.000000 7.795276 4.251969 7.795276 0.157480
- L 10824234 0.000000 7.795276 0.157480 4.330709 0.157480
- L 10824234 0.000000 4.330709 0.157480 4.330709 4.251969
- L 10824234 0.000000 4.330709 2.165354 7.795276 2.165354
- L 10824234 0.000000 13.307087 5.393701 13.307087 4.251969
- L 10824234 0.000000 0.000000 5.393701 0.000000 4.251969
- L 10824234 0.000000 7.952756 2.637795 11.574803 2.637795
- L 10824234 0.000000 11.574803 2.637795 11.574803 1.692913
- L 10824234 0.000000 11.574803 1.692913 7.952756 1.692913
- L 10824234 0.000000 10.866142 2.637795 10.866142 1.692913
- L 10824234 0.000000 10.118110 2.637795 10.118110 1.692913
- L 10824234 0.000000 0.000000 4.251969 4.330709 4.251969
- L 10824234 0.000000 4.330709 4.251969 7.795276 4.251969
- L 10824234 0.000000 7.874016 4.251969 13.267717 4.251969
- END
-STRUCTURE N "Kato Unitrack Station Entrance 23-210"
- L 10824234 0.000000 0.000000 0.000000 0.000000 2.874016
- L 10824234 0.000000 4.921260 0.000000 0.000000 0.000000
- L 10824234 0.000000 0.000000 1.417323 4.055118 1.417323
- L 10824234 0.000000 4.055118 2.874016 4.055118 0.000000
- L 10824234 0.000000 4.055118 1.574803 4.921260 1.574803
- L 10824234 0.000000 4.921260 1.574803 4.921260 0.000000
- L 10824234 0.000000 0.000000 2.874016 4.055118 2.874016
- L 10824234 0.000000 3.779528 0.000000 3.779528 1.299213
- L 10824234 0.000000 3.503937 0.000000 3.503937 1.181102
- L 10824234 0.000000 3.228346 0.000000 3.228346 1.062992
- L 10824234 0.000000 2.952756 0.000000 2.952756 0.944882
- L 10824234 0.000000 2.677165 0.000000 2.677165 0.826772
- L 10824234 0.000000 0.275591 2.874016 0.275591 1.535433
- L 10824234 0.000000 0.551181 2.874016 0.551181 1.692913
- L 10824234 0.000000 0.826772 2.874016 0.826772 1.811024
- L 10824234 0.000000 1.102362 2.874016 1.102362 1.929134
- L 10824234 0.000000 1.377953 2.874016 1.377953 2.047244
- L 10824234 0.000000 4.055118 0.039370 4.921260 0.039370
- L 10824234 0.000000 4.055118 1.535433 4.921260 1.535433
- L 10824234 0.000000 4.055118 0.275591 4.685039 0.275591
- L 10824234 0.000000 4.055118 0.511811 4.448819 0.511811
- L 10824234 0.000000 4.921260 1.299213 4.330709 1.299213
- L 10824234 0.000000 4.921260 1.062992 4.527559 1.062992
- END
-STRUCTURE N "Kato Unitrack Long Engine House 23-300"
- L 10824234 0.000000 0.000000 0.000000 0.000000 3.779528
- L 10824234 0.000000 0.000000 3.779528 7.362205 3.779528
- L 10824234 0.000000 7.362205 3.779528 7.362205 0.000000
- L 10824234 0.000000 7.362205 0.000000 0.000000 0.000000
- L 10824234 0.000000 0.275591 0.393701 0.787402 0.393701
- L 10824234 0.000000 0.787402 0.393701 0.787402 3.385827
- L 10824234 0.000000 0.787402 3.385827 0.275591 3.385827
- L 10824234 0.000000 0.275591 3.385827 0.275591 0.393701
- L 10824234 0.000000 1.062992 0.393701 1.574803 0.393701
- L 10824234 0.000000 1.574803 0.393701 1.574803 3.385827
- L 10824234 0.000000 1.574803 3.385827 1.062992 3.385827
- L 10824234 0.000000 1.062992 3.385827 1.062992 0.393701
- L 10824234 0.000000 1.850394 0.393701 2.362205 0.393701
- L 10824234 0.000000 2.362205 0.393701 2.362205 3.385827
- L 10824234 0.000000 2.362205 3.385827 1.850394 3.385827
- L 10824234 0.000000 1.850394 3.385827 1.850394 0.393701
- L 10824234 0.000000 2.637795 0.393701 3.149606 0.393701
- L 10824234 0.000000 3.149606 0.393701 3.149606 3.385827
- L 10824234 0.000000 3.149606 3.385827 2.637795 3.385827
- L 10824234 0.000000 2.637795 3.385827 2.637795 0.393701
- L 10824234 0.000000 3.425197 0.393701 3.937008 0.393701
- L 10824234 0.000000 3.937008 0.393701 3.937008 3.385827
- L 10824234 0.000000 3.937008 3.385827 3.425197 3.385827
- L 10824234 0.000000 3.425197 3.385827 3.425197 0.393701
- L 10824234 0.000000 4.212598 0.393701 4.724409 0.393701
- L 10824234 0.000000 4.724409 0.393701 4.724409 3.385827
- L 10824234 0.000000 4.724409 3.385827 4.212598 3.385827
- L 10824234 0.000000 4.212598 3.385827 4.212598 0.393701
- L 10824234 0.000000 5.000000 0.393701 5.511811 0.393701
- L 10824234 0.000000 5.511811 0.393701 5.511811 3.385827
- L 10824234 0.000000 5.511811 3.385827 5.000000 3.385827
- L 10824234 0.000000 5.000000 3.385827 5.000000 0.393701
- L 10824234 0.000000 5.787402 0.393701 6.299213 0.393701
- L 10824234 0.000000 6.299213 0.393701 6.299213 3.385827
- L 10824234 0.000000 6.299213 3.385827 5.787402 3.385827
- L 10824234 0.000000 5.787402 3.385827 5.787402 0.393701
- L 10824234 0.000000 6.574803 0.393701 7.086614 0.393701
- L 10824234 0.000000 7.086614 0.393701 7.086614 3.385827
- L 10824234 0.000000 7.086614 3.385827 6.574803 3.385827
- L 10824234 0.000000 6.574803 3.385827 6.574803 0.393701
- L 10824234 0.000000 0.275591 3.464567 0.472441 3.464567
- L 10824234 0.000000 0.472441 3.464567 0.472441 3.661417
- L 10824234 0.000000 0.472441 3.661417 0.275591 3.661417
- L 10824234 0.000000 0.275591 3.661417 0.275591 3.464567
- L 10824234 0.000000 0.275591 0.314961 0.472441 0.314961
- L 10824234 0.000000 0.472441 0.314961 0.472441 0.118110
- L 10824234 0.000000 0.472441 0.118110 0.275591 0.118110
- L 10824234 0.000000 0.275591 0.118110 0.275591 0.314961
- L 10824234 0.000000 7.086614 0.314961 6.889764 0.314961
- L 10824234 0.000000 6.889764 0.314961 6.889764 0.118110
- L 10824234 0.000000 6.889764 0.118110 7.086614 0.118110
- L 10824234 0.000000 7.086614 0.118110 7.086614 0.314961
- L 10824234 0.000000 7.086614 3.464567 6.889764 3.464567
- L 10824234 0.000000 6.889764 3.464567 6.889764 3.661417
- L 10824234 0.000000 6.889764 3.661417 7.086614 3.661417
- L 10824234 0.000000 7.086614 3.661417 7.086614 3.464567
- L 10824234 0.000000 3.582677 0.314961 3.779528 0.314961
- L 10824234 0.000000 3.779528 0.314961 3.779528 0.118110
- L 10824234 0.000000 3.779528 0.118110 3.582677 0.118110
- L 10824234 0.000000 3.582677 0.118110 3.582677 0.314961
- L 10824234 0.000000 3.582677 3.464567 3.779528 3.464567
- L 10824234 0.000000 3.779528 3.464567 3.779528 3.661417
- L 10824234 0.000000 3.779528 3.661417 3.582677 3.661417
- L 10824234 0.000000 3.582677 3.661417 3.582677 3.464567
- END
-STRUCTURE N "Kato Unitrack Industrial Building 23-310"
- L 10824234 0 0.000000 0.000000 0.000000 2.952756
- L 10824234 0 0.000000 2.952756 5.905512 2.952756
- L 10824234 0 5.905512 2.952756 5.905512 0.000000
- L 10824234 0 5.905512 0.000000 0.000000 0.000000
- END
-STRUCTURE N "Kato Unitrack Station Office 23-315a"
- L 10824234 0 0.000000 0.000000 0.000000 1.574803
- L 10824234 0 0.000000 1.574803 2.421260 1.574803
- L 10824234 0 2.421260 1.574803 2.421260 0.000000
- L 10824234 0 2.421260 0.000000 0.000000 0.000000
- END
-STRUCTURE N "Kato Unitrack Signal Tower 23-315b"
- L 10824234 0 0.000000 0.000000 0.000000 1.102362
- L 10824234 0 0.000000 1.102362 2.283465 1.102362
- L 10824234 0 2.283465 1.102362 2.283465 0.000000
- L 10824234 0 2.283465 0.000000 0.000000 0.000000
- END
-STRUCTURE N "Kato Unitrack Building 2x4 23-2x4"
- L 10824234 0 0.000000 0.000000 0.000000 2.000000
- L 10824234 0 0.000000 2.000000 4.000000 2.000000
- L 10824234 0 4.000000 2.000000 4.000000 0.000000
- L 10824234 0 4.000000 0.000000 0.000000 0.000000
- END
-STRUCTURE N "Kato Unitrack Building 4x5 23-4x5"
- L 10824234 0 0.000000 0.000000 0.000000 4.000000
- L 10824234 0 0.000000 4.000000 5.000000 4.000000
- L 10824234 0 5.000000 4.000000 5.000000 0.000000
- L 10824234 0 5.000000 0.000000 0.000000 0.000000
- END
-STRUCTURE N "Kato Unitrack Building 4x6 23-4x6"
- L 10824234 0 0.000000 0.000000 0.000000 4.000000
- L 10824234 0 0.000000 4.000000 6.000000 4.000000
- L 10824234 0 6.000000 4.000000 6.000000 0.000000
- L 10824234 0 6.000000 0.000000 0.000000 0.000000
- END
-##########################################################################
-##########################################################################
-
-SUBCONTENTS Kato Unitrack N-Scale Turntable and Accessories
-TURNOUT N "Kato Unitrack 3 Stall Round House 20-240"
- P "Normal" 1
- E -0.148334 1.695463 260.000000
- E 0.000000 0.000000 270.000000
- E -0.148334 -1.695463 280.000000
- S 0 0.000000 -0.148334 1.695463 7.063251 2.967059
- S 0 0.000000 0.000000 0.000000 7.322835 0.000000
- S 0 0.000000 -0.148334 -1.695463 7.063251 -2.967059
- F 12632256 0.000000 8
- -0.296668 2.536705 0
- 7.338100 4.582435 0
- 7.874016 1.543107 0
- 7.874016 -1.543107 0
- 7.338100 -4.582435 0
- -0.296668 -2.536705 0
- 0.000000 -0.854220 0
- 0.000000 0.854220 0
- G 0 0.000000 0.200000 0.750000 0.000000 0
- G 0 0.000000 0.200000 7.125000 0.000000 0
- G 0 0.000000 0.200000 0.590272 1.825699 0
- G 0 0.000000 0.200000 6.868421 2.932706 0
- G 0 0.000000 0.200000 0.590272 -1.825699 0
- G 0 0.000000 0.200000 6.868421 -2.932706 0
- L 0 0.031250 -0.296668 2.536705 7.338100 4.582435
- L 0 0.031250 0.000000 0.854220 7.874016 1.543107
- L 0 0.031250 0.000000 -0.854220 7.874016 -1.543107
- L 0 0.031250 -0.296668 -2.536705 7.338100 -4.582435
- L 0 0.031250 0.000000 0.854220 -0.296668 2.536705
- L 0 0.031250 0.000000 0.854220 0.000000 -0.854220
- L 0 0.031250 0.000000 -0.854220 -0.296668 -2.536705
- L 0 0.031250 7.874016 1.543107 7.338100 4.582435
- L 0 0.031250 7.874016 1.543107 7.874016 -1.543107
- L 0 0.031250 7.874016 -1.543107 7.338100 -4.582435
-END
-TURNOUT N "Kato Unitrack 139.5mm Straight Extension Line 20-285"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 5.492126 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 5.492126 0.000000
- L 0 0.031250 0.000000 0.372299 5.492126 0.854220
- L 0 0.031250 0.000000 -0.372299 5.492126 -0.854220
- L 0 0.031250 5.492126 0.854220 5.492126 -0.854220
-END
-TURNOUT N "Kato Unitrack Curve (L) Extension Line 20-286L"
- P "Normal" 1 2 3
- E 0.000000 0.000000 270.000000
- E 5.569398 -0.415987 100.000000
- S 0 0.000000 0.000000 0.000000 0.935511 0.000000
- C 0 0 26.000000 0.935511 -26.000000 0.000000 10.000000
- S 0 0.000000 5.450363 -0.394998 5.569398 -0.415987
- L 0 0.031250 0.000000 0.372299 5.492126 0.854220
- L 0 0.031250 0.000000 -0.372299 5.492126 -0.854220
- L 0 0.031250 5.642748 0.000000 5.492126 -0.854220
- L 0 0.031250 5.642748 0.000000 5.492126 0.854220
-END
-TURNOUT N "Kato Unitrack Curve (R) Extension Line 20-286R"
- P "Normal" 1 2 3
- E 0.000000 0.000000 270.000000
- E 5.569398 0.415987 80.000000
- S 0 0.000000 0.000000 0.000000 0.935511 0.000000
- C 0 0 -26.000000 0.935511 26.000000 170.000000 10.000000
- S 0 0.000000 5.450363 0.394998 5.569398 0.415987
- L 0 0.031250 0.000000 -0.372299 5.492126 -0.854220
- L 0 0.031250 0.000000 0.372299 5.492126 0.854220
- L 0 0.031250 5.642748 0.000000 5.492126 -0.854220
- L 0 0.031250 5.642748 0.000000 5.492126 0.854220
-END
-TURNOUT N "Kato Unitrack Curve 15R 381mm 10° 381-10"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.604723 -0.227884 100.000000
- C 0 0 15.000000 0.000000 -15.000000 0.000000 10.000000
- A 11579568 0.053333 14.554226 0.000000 -15.000000 0.000000 10.000000
- A 11579568 0.053333 15.445774 0.000000 -15.000000 0.000000 10.000000
-END
-TURNOUT N "Kato Unitrack Track Turntable Section 20-283A"
- P "Normal" 1
- E 3.101756 0.546923 260.000000
- E 4.206758 0.741765 80.000000
- E 3.149606 0.000000 270.000000
- E 4.271654 0.000000 90.000000
- E 3.101756 -0.546923 280.000000
- E 4.206758 -0.741765 100.000000
- S 0 0.000000 3.101756 0.546923 4.206758 0.741765
- S 0 0.000000 3.149606 0.000000 4.271654 0.000000
- S 0 0.000000 3.101756 -0.546923 4.206758 -0.741765
- A 11579568 0.031250 3.149606 0.000000 0.000000 75.000000 30.00000
- A 11579568 0.031250 4.271654 0.000000 0.000000 75.000000 30.000000
- L 0 0.031250 3.042286 0.815178 4.126100 1.105585
- L 0 0.031250 3.042286 -0.815178 4.126100 -1.105585
-END
-TURNOUT N "Kato Unitrack 160mm Turn Table 20-283"
- P "1" 1
- P "2" 2
- P "3" 3
- P "4" 4
- P "5" 5
- P "6" 6
- P "7" 7
- P "8" 8
- P "9" 9
- P "10" 10
- P "11" 11
- P "12" 12
- P "13" 13
- P "14" 14
- P "15" 15
- P "16" 16
- P "17" 17
- P "18" 18
- E 0.000000 0.000000 0.000000
- E 0.000000 3.149606 0.000000
- E 0.546923 3.101757 10.000000
- E 1.077229 2.959662 20.000000
- E 1.574803 2.727639 30.000000
- E 2.024528 2.412738 40.000000
- E 2.412738 2.024528 50.000000
- E 2.727639 1.574803 60.000000
- E 2.959662 1.077229 70.000000
- E 3.101757 0.546923 80.000000
- E 3.149606 0.000000 90.000000
- E 3.101757 -0.546923 100.000000
- E 2.959662 -1.077229 110.000000
- E 2.727639 -1.574803 120.000000
- E 2.412738 -2.024528 130.000000
- E 2.024528 -2.412738 140.000000
- E 1.574803 -2.727639 150.000000
- E 1.077229 -2.959662 160.000000
- E 0.546923 -3.101757 170.000000
- E 0.000000 -3.149606 180.000000
- E -0.546923 -3.101757 190.000000
- E -1.077229 -2.959662 200.000000
- E -1.574803 -2.727639 210.000000
- E -2.024528 -2.412738 220.000000
- E -2.412738 -2.024528 230.000000
- E -2.727639 -1.574803 240.000000
- E -2.959662 -1.077229 250.000000
- E -3.101757 -0.546923 260.000000
- E -3.149606 0.000000 270.000000
- E -3.101757 0.546923 280.000000
- E -2.959662 1.077229 290.000000
- E -2.727639 1.574803 300.000000
- E -2.412738 2.024528 310.000000
- E -2.024528 2.412738 320.000000
- E -1.574803 2.727639 330.000000
- E -1.077229 2.959662 340.000000
- E -0.546923 3.101757 350.000000
- S 16777215 0.000000 0.000000 3.149606 0.000000 -3.149606
- S 16777215 0.000000 0.546923 3.101757 -0.546923 -3.101757
- S 16777215 0.000000 1.077229 2.959662 -1.077229 -2.959662
- S 16777215 0.000000 1.574803 2.727639 -1.574803 -2.727639
- S 16777215 0.000000 2.024528 2.412738 -2.024528 -2.412738
- S 16777215 0.000000 2.412738 2.024528 -2.412738 -2.024528
- S 16777215 0.000000 2.727639 1.574803 -2.727639 -1.574803
- S 16777215 0.000000 2.959662 1.077229 -2.959662 -1.077229
- S 16777215 0.000000 3.101757 0.546923 -3.101757 -0.546923
- S 16777215 0.000000 3.149606 0.000000 -3.149606 0.000000
- S 16777215 0.000000 3.101757 -0.546923 -3.101757 0.546923
- S 16777215 0.000000 2.959662 -1.077229 -2.959662 1.077229
- S 16777215 0.000000 2.727639 -1.574803 -2.727639 1.574803
- S 16777215 0.000000 2.412738 -2.024528 -2.412738 2.024528
- S 16777215 0.000000 2.024528 -2.412738 -2.024528 2.412738
- S 16777215 0.000000 1.574803 -2.727639 -1.574803 2.727639
- S 16777215 0.000000 1.077229 -2.959662 -1.077229 2.959662
- S 16777215 0.000000 0.546923 -3.101757 -0.546923 3.101757
- A 11579568 0.031250 3.149606 0.000000 0.000000 0.000000 360.000000
- A 11579568 0.031250 4.271654 0.000000 0.000000 0.000000 360.000000
- END
diff --git a/app/lib/params/lgb.xtp b/app/lib/params/lgb.xtp
index d919ef3..53a2b74 100644
--- a/app/lib/params/lgb.xtp
+++ b/app/lib/params/lgb.xtp
@@ -1,4 +1,4 @@
-CONTENTS LGB G-Scale
+CONTENTS LGB G Scale
SUBCONTENTS LGB Straight Track
TURNOUT G "LGB Straight 300mm 10000"
P "Normal" 1
diff --git a/app/lib/params/me-ho.xtp b/app/lib/params/me-ho.xtp
deleted file mode 100644
index b04eb79..0000000
--- a/app/lib/params/me-ho.xtp
+++ /dev/null
@@ -1,47 +0,0 @@
-CONTENTS Micro-Engineering HO-Scale
-# Regular Turnout Design by - 10.686000 1.223000 9.527200 10.857000
-TURNOUT HO "Micro Engineering #6 Code 70 RH 14-806"
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.000000 0.000000 270.000000
- E 10.857000 0.000000 90.000000
- E 10.686000 -1.223000 99.527200
- S 0 0 0.000000 0.000000 0.649000 0.000000
- S 0 0 0.649000 0.000000 10.857000 0.000000
- C 0 0 33.004000 0.649000 -33.004000 0.000000 9.527000
- S 0 0 6.111000 -0.455000 10.686000 -1.223000
- END
-TURNOUT HO "Micro Engineering #6 Code 70 LH 14-805"
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.000000 0.000000 270.000000
- E 10.857000 0.000000 90.000000
- E 10.686000 1.223000 80.472800
- S 0 0 0.000000 0.000000 0.649000 0.000000
- S 0 0 0.649000 0.000000 10.857000 0.000000
- C 0 0 -33.004000 0.649000 33.004000 170.473000 9.527000
- S 0 0 6.111000 0.455000 10.686000 1.223000
- END
-# Regular Turnout Design by - 10.686000 1.223000 9.527200 10.857000
-TURNOUT HO "Micro Engineering #6 Code 83 RH 14-706"
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.000000 0.000000 270.000000
- E 10.857000 0.000000 90.000000
- E 10.686000 -1.223000 99.527200
- S 0 0 0.000000 0.000000 0.649000 0.000000
- S 0 0 0.649000 0.000000 10.857000 0.000000
- C 0 0 33.004000 0.649000 -33.004000 0.000000 9.527000
- S 0 0 6.111000 -0.455000 10.686000 -1.223000
- END
-TURNOUT HO "Micro Engineering #6 Code 83 LH 14-705"
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.000000 0.000000 270.000000
- E 10.857000 0.000000 90.000000
- E 10.686000 1.223000 80.472800
- S 0 0 0.000000 0.000000 0.649000 0.000000
- S 0 0 0.649000 0.000000 10.857000 0.000000
- C 0 0 -33.004000 0.649000 33.004000 170.473000 9.527000
- S 0 0 6.111000 0.455000 10.686000 1.223000
- END
diff --git a/app/lib/params/minitrix.xtp b/app/lib/params/minitrix.xtp
index 0f9765b..4959429 100644
--- a/app/lib/params/minitrix.xtp
+++ b/app/lib/params/minitrix.xtp
@@ -1,4 +1,4 @@
-CONTENTS Minitrix N-Scale
+CONTENTS Minitrix N Scale
###########################################################################
#
# Design Armin Poschmann 08.01.1999 nach Vorgaben aus dem Minitrix Katalog
diff --git a/app/lib/params/mrkhomde.xtp b/app/lib/params/mrkhomde.xtp
index 924e394..88d5487 100644
--- a/app/lib/params/mrkhomde.xtp
+++ b/app/lib/params/mrkhomde.xtp
@@ -270,7 +270,7 @@ TURNOUT HO " Maerklin M DKW30° 5128"
L3 16754688 0.052083 6.110757 0.360894 0 7.363757 0.025154 0
L3 16754688 0.052083 6.727809 1.724015 0 7.745872 1.451226 0
A3 16754688 0.052083 8.599449 3.885055 -7.945535 0 345.000000 30.000000
- a3 16754688 0.052083 8.599449 3.885059 11.388534 0 165.000000 30.000000
+ A3 16754688 0.052083 8.599449 3.885059 11.388534 0 165.000000 30.000000
END
TURNOUT HO " Maerklin M Kr30° 5114"
U "Kreuzung" "jr" " Maerklin M " " Kr30° " "5114" 7.598425 30.000000 7.598425 1.476378 0.053333 16754688
diff --git a/app/lib/params/mrkln1.xtp b/app/lib/params/mrkln1.xtp
index b4d3c95..de5aaf3 100644
--- a/app/lib/params/mrkln1.xtp
+++ b/app/lib/params/mrkln1.xtp
@@ -1,4 +1,4 @@
-CONTENTS Märklin 1-Scale Turnouts
+CONTENTS Märklin 1 Scale Turnouts
# From 'Märklin Complete Program 1994/95 E'
# Straight Section Design by Dave Bullis - 11.811024
TURNOUT 1 "Märklin Straight 300mm 5903"
diff --git a/app/lib/params/mrklnhoc-de.xtp b/app/lib/params/mrklnhoc-de.xtp
index e4a9317..754bb1b 100644
--- a/app/lib/params/mrklnhoc-de.xtp
+++ b/app/lib/params/mrklnhoc-de.xtp
@@ -1,4 +1,4 @@
-CONTENTS Märklin C-Gleis HO-Scale
+CONTENTS Märklin C-Gleis HO Scale
SUBCONTENTS Märklin C-Gleis Gleisgerade
TURNOUT HO "Märklin C-Gleis Gerade 64.3mm 24064"
U "Gerader Abschnitt" "XtrkCad" "Märklin C-Gleis" "Gerade 64.3mm" "24064" 2.531496
@@ -371,7 +371,7 @@ TURNOUT HO "Märklin C-Gleis Schlanke Kreuzung 236.1mm 12.1° 24740"
SUBCONTENTS Märklin C-Gleis Verschiedene Gleise
TURNOUT HO "Märklin C-Gleis Gleisende mit Prellbock 77.5mm 24977"
- U "Gerader Abschnitt" "XtrkCad" "Märklin C-Gleis" "Gleisende mit Prellbock" "24977" 3.051181
+ U "Gerader Abschnitt" "XtrkCad" "Märklin C-Gleis" "Gleisende mit Prellbock" "24977" 3.051181
P "Normal" 1
E 0.000000 0.000000 270.000000
S 0 0.000000 0.000000 0.000000 3.051181 0.000000
diff --git a/app/lib/params/mrklnz.xtp b/app/lib/params/mrklnz.xtp
index 1a92cd5..f47602c 100644
--- a/app/lib/params/mrklnz.xtp
+++ b/app/lib/params/mrklnz.xtp
@@ -1,4 +1,4 @@
-CONTENTS Märklin Z-Scale Turnouts
+CONTENTS Märklin Z Scale Turnouts
# From 'Märklin Complete Program 1994/95 E'
##########################################################################
##########################################################################
@@ -50,7 +50,7 @@ TURNOUT Z "Märklin Curved 145mm 45° 8510"
E 4.036633 -1.672028 135.000000
C 0 0 5.709000 0.000000 -5.709000 0.000000 45.000000
END
-TURNOUT Z "Märklin Curved 195mm 45° 8520"
+TURNOUT Z "Märklin Curved 195mm 45° 8520"
P "Normal" 1
E 0.000000 0.000000 270.000000
E 5.428576 -2.248590 135.000000
diff --git a/app/lib/params/nmra-0-lapped.xtp b/app/lib/params/nmra-0-lapped.xtp
deleted file mode 100644
index 59caa62..0000000
--- a/app/lib/params/nmra-0-lapped.xtp
+++ /dev/null
@@ -1,76 +0,0 @@
-CONTENTS NMRA O 2 Rail Lapped turnouts
-#Casey Sterbenz O Scale Kings #8
-#sterbejj@hotmail.com June 6, 2007
-#Reference: John Armstrong article MRR May 1954
-TURNOUT O "NMRA O #4 Right Lapped #4R + #4R"
- P "Normal" 1
- P "Right" 2 3 4 5
- P "Left" 6 7 8 9
- E 0.000000 0.000000 270.000000
- E 15.625000 -1.576999 104.250000
- E 15.625000 0.000000 90.000000
- E 0.000000 1.576999 284.250000
- S 0 0.000000 0.000000 0.000000 15.625000 0.000000
- S 0 0.000000 0.000000 0.000000 4.4375 0.000000
- C 0 0 83.000000 1.25167 -82.938836 2.199752 2.507128
- C 0 0 30.000000 6.300886 -30.166984 3.366371 9.659273
- S 0 0 13.0625 -0.938905 15.625 -1.576999
- S 0 0.000000 15.625000 0.000000 11.187500 0.000000
- C 0 0 83.000000 14.37333 82.938836 182.199752 2.507128
- C 0 0 30.000000 9.324114 30.166984 183.366371 9.659273
- S 0 0 2.5625 0.938905 0.000000 1.576999
- END
-TURNOUT O "NMRA O #4 Left Lapped #4L + #4L"
- P "Normal" 1
- P "Right" 2 3 4 5
- P "Left" 6 7 8 9
- E 0.000000 0.000000 270.000000
- E 15.625000 1.576999 75.750000
- E 15.625000 0.000000 90.000000
- E 0.000000 -1.576999 255.750000
- S 0 0.000000 0.000000 0.000000 15.625000 0.000000
- S 0 0.000000 0.000000 0.000000 4.4375 0.000000
- C 0 0 -83.000000 1.25167 82.938836 175.293120 2.507128
- C 0 0 -30.000000 6.300886 30.166984 166.974357 9.659273
- S 0 0 13.0625 0.938905 15.625 1.576999
- S 0 0.000000 15.625000 0.000000 11.187500 0.000000
- C 0 0 -83.000000 14.37333 -82.938836 355.293120 2.507128
- C 0 0 -30.000000 9.324114 -30.166984 346.974357 9.659273
- S 0 0 2.5625 -0.938905 0.000000 -1.576999
- END
-TURNOUT O "NMRA O #5 Right Lapped #5R + #5R"
- P "Normal" 1
- P "Right" 2 3 4 5
- P "Left" 6 7 8 9
- E 0.000000 0.000000 270.000000
- E 17.875000 0.000000 90.000000
- E 0.000000 1.535771 281.416667
- E 17.875000 -1.535771 101.416667
- S 0 0 0.000000 0.000000 17.875000 0.000000
- S 0 0 0.000000 0.000000 5.312500 0.000000
- C 0 0 228.000000 -6.608202 -227.688157 2.997007 0.912619
- C 0 0 52.000000 5.638694 -52.114009 3.637205 6.804034
- S 0 0 15.0625 -0.975062 17.875000 -1.535771
- S 0 0 17.875000 0.000000 12.562500 0.000000
- C 0 0 228.000000 24.483202 227.688157 182.997007 0.912619
- C 0 0 52.000000 12.236306 52.114009 183.637205 6.804034
- S 0 0 2.8125 0.975062 0.000000 1.535771
- END
-TURNOUT O "NMRA O #5 Left Lapped #5L + #5L"
- P "Normal" 1
- P "Right" 2 3 4 5
- P "Left" 6 7 8 9
- E 0.000000 0.000000 270.000000
- E 17.875000 0.000000 90.000000
- E 0.000000 -1.535771 258.583333
- E 17.875000 1.535771 78.583333
- S 0 0 0.000000 0.000000 17.875000 0.000000
- S 0 0 0.000000 0.000000 5.312500 0.000000
- C 0 0 -228.000000 -6.608202 227.688157 176.090374 0.912619
- C 0 0 -52.000000 5.638694 52.114009 169.558761 6.804034
- S 0 0 15.0625 0.975062 17.875000 1.535771
- S 0 0 17.875000 0.000000 12.562500 0.000000
- C 0 0 -228.000000 24.483202 -227.688157 356.090374 0.912619
- C 0 0 -52.000000 12.236306 -52.114009 349.558761 6.804034
- S 0 0 2.8125 -0.975062 0.000000 -1.535771
- END
diff --git a/app/lib/params/nmra-ho.xtp b/app/lib/params/nmra-ho.xtp
index 3598476..c852558 100644
--- a/app/lib/params/nmra-ho.xtp
+++ b/app/lib/params/nmra-ho.xtp
@@ -1,4 +1,4 @@
-CONTENTS NMRA RP12-31 Feb 2015 HO Scale Turnouts
+CONTENTS NMRA RP-12.31 Feb 2015 HO Scale Turnouts
SUBCONTENTS NMRA HO Scale Regular Turnouts
TURNOUT HO "NMRA HO #4 Left 4L"
U "Regular Turnout" "" "NMRA HO" "#4 Left" "4L" "#4 Right" "4R" 6.586119 14.250033 0.895522 6.698060 0.000000 0.000000 0
diff --git a/app/lib/params/nmra-ho3.xtp b/app/lib/params/nmra-ho3.xtp
index b6307ea..1cfbe35 100644
--- a/app/lib/params/nmra-ho3.xtp
+++ b/app/lib/params/nmra-ho3.xtp
@@ -1,4 +1,4 @@
-CONTENTS NMRA RP12-54 Feb 2015 HOn3 Scale Turnouts
+CONTENTS NMRA RP-12.54 Feb 2015 HOn3 Scale Turnouts
SUBCONTENTS NMRA HOn3 Scale Regular Turnouts
TURNOUT HOn3 "NMRA HOn3 #4 Left 4L"
U "Regular Turnout" "" "NMRA HOn3" "#4 Left" "4L" "#4 Right" "4R" 5.602370 14.250032 0.875022 5.711776 0.000000 0.000000 0
diff --git a/app/lib/params/nmra-n.xtp b/app/lib/params/nmra-n.xtp
index 682e19b..5beae03 100644
--- a/app/lib/params/nmra-n.xtp
+++ b/app/lib/params/nmra-n.xtp
@@ -1,4 +1,4 @@
-CONTENTS NMRA RP12-35 Feb 2015 N Scale Turnouts
+CONTENTS NMRA RP-12.35 Feb 2015 N Scale Turnouts
SUBCONTENTS NMRA N Scale Regular Turnouts
TURNOUT N "NMRA N #4 Left 4L"
U "Regular Turnout" "" "NMRA N" "#4 Left" "4L" "#4 Right" "4R" 3.813531 14.250033 0.487500 3.874469 0.000000 0.000000 0
@@ -60,7 +60,7 @@ TURNOUT N "NMRA N #6 Left 6L"
C 0 0.000000 -18.860857 0.354325 18.860857 170.472641 9.527435
S 0 0.000000 3.476144 0.260158 4.830688 0.487500
END
-TURNOUT N "NMRA N #5 Right 6R"
+TURNOUT N "NMRA N #6 Right 6R"
U "Regular Turnout" "" "NMRA N" "#6 Left" "6L" "#5 Right" "6R" 4.830688 9.527283 0.487500 4.871313 0.000000 0.000000 0
P "Normal" 1 2
P "Reverse" 1 3 4
diff --git a/app/lib/params/nmra-o.xtp b/app/lib/params/nmra-o.xtp
index 4279b29..109c5af 100644
--- a/app/lib/params/nmra-o.xtp
+++ b/app/lib/params/nmra-o.xtp
@@ -1,4 +1,4 @@
-CONTENTS NMRA RP-12.25 Feb 2015 O-scale Turnouts
+CONTENTS NMRA RP-12.25 Feb 2015 O scale Turnouts
SUBCONTENTS NMRA O Scale Regular Turnouts
TURNOUT O "NMRA O #4 Left 4L"
U "Regular Turnout" "" "NMRA O" "#4 Left" "4L" "#4 Right" "4R" 11.252438 14.250033 1.625000 11.455563 0.000000 0.000000 0
diff --git a/app/lib/params/nmra-s.xtp b/app/lib/params/nmra-s.xtp
index 3a11fa6..3ce08a3 100644
--- a/app/lib/params/nmra-s.xtp
+++ b/app/lib/params/nmra-s.xtp
@@ -1,4 +1,4 @@
-CONTENTS NMRA RP12-27 Feb 2015 S Scale Turnouts
+CONTENTS NMRA RP-12.27 Feb 2015 S Scale Turnouts
SUBCONTENTS NMRA S Scale Regular Turnouts
TURNOUT S "NMRA S #4 Left 4L"
U "Regular Turnout" "" "NMRA S" "#4 Left" "4L" "#4 Right" "4R" 8.781828 14.250033 1.218750 8.934172 0.000000 0.000000 0
diff --git a/app/lib/params/nmra-tt.to b/app/lib/params/nmra-tt.to
index bb8cbb7..874a986 100644
--- a/app/lib/params/nmra-tt.to
+++ b/app/lib/params/nmra-tt.to
@@ -1,4 +1,4 @@
-CONTENTS NMRA RP12-5 TT-scale Turnouts
+CONTENTS NMRA RP-12.33 TT scale Turnouts
TT 4 0.4708 1-5/8 3/32 31 3-3/4 11 14.15 7/16 3/4
TT 5 0.4708 1-5/8 3/32 31 4-3/16 19 11.25 1/2 7/8
TT 6 0.4708 1-5/8 3/32 31 4-9/16 31 9.32 9/16 15/16
diff --git a/app/lib/params/nmra-tt.xtp b/app/lib/params/nmra-tt.xtp
index 0add7bc..76827bf 100644
--- a/app/lib/params/nmra-tt.xtp
+++ b/app/lib/params/nmra-tt.xtp
@@ -1,4 +1,4 @@
-CONTENTS NMRA RP12-33 Feb 2015 TT Scale Turnouts
+CONTENTS NMRA RP-12.33 Feb 2015 TT Scale Turnouts
SUBCONTENTS NMRA TT Scale Regular Turnouts
TURNOUT TT "NMRA TT #4 Left 4L"
U "Regular Turnout" "" "NMRA TT" "#4 Left" "4L" "#4 Right" "4R" 4.921375 14.250033 0.650000 5.002625 0.000000 0.000000 0
diff --git a/app/lib/params/nmra-z.xtp b/app/lib/params/nmra-z.xtp
index 7c4bf2b..63833d6 100644
--- a/app/lib/params/nmra-z.xtp
+++ b/app/lib/params/nmra-z.xtp
@@ -1,4 +1,4 @@
-CONTENTS NMRA RP-12.37 Feb 2015 Z-scale Turnouts
+CONTENTS NMRA RP-12.37 Feb 2015 Z scale Turnouts
SUBCONTENTS NMRA Z Scale Regular Turnouts
TURNOUT Z "NMRA Z #4 Left 4L"
U "Regular Turnout" "" "NMRA Z" "#4 Left" "4L" "#4 Right" "4R" 2.909023 14.250033 0.354545 2.953341 0.000000 0.000000 0
diff --git a/app/lib/params/pecohom.xtp b/app/lib/params/pecohom.xtp
index bb22332..d0bb58a 100644
--- a/app/lib/params/pecohom.xtp
+++ b/app/lib/params/pecohom.xtp
@@ -1,4 +1,4 @@
-CONTENTS Peco HOm and HOn3½ Turnouts
+CONTENTS Peco HOm and HOn3.5 Turnouts
TURNOUT HOm "Peco 10 Deg. LH SL-E1487"
U "Regular Turnout" "Phillip Cobden" "Peco" "10 Deg. LH" "SL-E1487" "10 Deg. RH" "SL-E1486" 6.220472 10.000000 0.708661 6.299213 0.000000 0.000000 0
P "Normal" 1 2
diff --git a/app/lib/params/pecohon30.xtp b/app/lib/params/pecohon30.xtp
index ae93937..a3a0bfb 100644
--- a/app/lib/params/pecohon30.xtp
+++ b/app/lib/params/pecohon30.xtp
@@ -1,4 +1,4 @@
-CONTENTS OO9 PECO Turnouts
+CONTENTS 009 HOn30 HOe PECO Turnouts
TURNOUT OO9 "Peco LH Small Radius 12"" SL-E492"
U "Regular Turnout" "" "Peco" "LH Small Radius 12""" "SL-E492" "RH Small Radius 12""" "SL-E491" 4.796000 19.500000 0.656250 4.921000 0.000000 0.000000 0
P "Normal" 1 2
diff --git a/app/lib/params/proto-ng.xtp b/app/lib/params/proto-ng.xtp
new file mode 100644
index 0000000..554e8d5
--- /dev/null
+++ b/app/lib/params/proto-ng.xtp
@@ -0,0 +1,29 @@
+CONTENTS North American 3' Gauge Narrow-Gauge Prototype Cars
+CARPROTO "D&RGW 30' Boxcar" 0 30100 360.000 101.000 0 0 256.000 392.000
+ F4 255 0.000000 4 0
+ 0.000000 0.000000 0
+ 360.000000 0.000000 0
+ 360.000000 100.999998 0
+ 0.000000 100.999998 0
+ END
+CARPROTO "D&RGW Dump Bottom Gondola" 0 30100 384.000 101.000 0 0 288.000 416.000
+ F4 255 0.000000 4 0
+ 0.000134 101.000509 0
+ 384.000134 100.999491 0
+ 383.999866 -0.000509 0
+ -0.000134 0.000509 0
+ END
+CARPROTO "D&RGW Stock Car" 0 30100 360.000 101.000 0 0 264.000 392.000
+ F4 255 0.000000 4 0
+ 0.000134 101.000478 0
+ 360.000134 100.999522 0
+ 359.999866 -0.000478 0
+ -0.000134 0.000478 0
+ END
+CARPROTO "Victor Gold Mining Co. Ore Car" 0 30100 360.000 84.000 0 0 256.000 392.000
+ F4 255 0.000000 4 0
+ 0.000111 84.000478 0
+ 360.000111 83.999522 0
+ 359.999889 -0.000478 0
+ -0.000111 0.000478 0
+ END
diff --git a/app/lib/params/protoam.xtp b/app/lib/params/protoam.xtp
index 2d101ac..7547f62 100644
--- a/app/lib/params/protoam.xtp
+++ b/app/lib/params/protoam.xtp
@@ -69,7 +69,7 @@
# SD35, SD38, SD39, SD40, SD40-2, SD40-2F, SD45, SD50, SD60, SD60M, SD70M, SD75M
#
#############################################################################################
-CONTENTS North American Prototypes
+CONTENTS North American Rolling-Stock Prototype Cars
CARPROTO "Box, 40'" 0 30100 486.500 126.000 0 0 368.000 518.500
F3 255 0.000000 4
0.000000 0.000000 0
diff --git a/app/lib/params/protosteam.xtp b/app/lib/params/protosteam.xtp
index d65caae..2b1a17b 100644
--- a/app/lib/params/protosteam.xtp
+++ b/app/lib/params/protosteam.xtp
@@ -22,7 +22,7 @@
#
#============================================================
#############################################################################################
-CONTENTS US Steam Engine and Tender Prototypes
+CONTENTS US Steam Engine and Tender Prototype Cars
CARPROTO "2-8-2, USRA Mikado" 2 10201 583.000 120.000 0 0 433.000 590.000
F3 3881787 0.000000 5
0.000000 0.000000 0
diff --git a/app/lib/params/rocho100.xtp b/app/lib/params/rocho100.xtp
index a42ce73..a992e47 100644
--- a/app/lib/params/rocho100.xtp
+++ b/app/lib/params/rocho100.xtp
@@ -1,4 +1,4 @@
-CONTENTS ModelPower/Roco HO Scale Code-100 Turnouts
+CONTENTS ModelPower/Roco HO Scale Code 100 Turnouts
# Curved Turnout Design by Victor Bobier - 9.281250 2.562500 32.000000 11.375000 2.562500 30.000000
TURNOUT HO "ModelPower/Roco #6 L Curved 490-180/625-42379"
P "Normal" 1 6 4 5
@@ -25,7 +25,8 @@ TURNOUT HO "ModelPower/Roco #6 R Curved 490-181/625-42381"
C 0 0 16.706069 2.460205 -16.706069 0.000076 30.000152
S 0 0 10.813338 -2.238207 11.375000 -2.562500
S 0 0 0.993389 0.000000 2.460271 0.000000
- END# Straight Section Design by Victor Bobier - 18.000000
+ END
+# Straight Section Design by Victor Bobier - 18.000000
# Double Slipswitch Design by Victor Bobier - 9.000000 12.500000 9.000000
TURNOUT HO "ModelPower/Roco #6 Double SlipSwitch 490-189"
P "Normal" 1 2 3 0 4 5 6
diff --git a/app/lib/params/rocho83.xtp b/app/lib/params/rocho83.xtp
deleted file mode 100644
index 1cbe2d2..0000000
--- a/app/lib/params/rocho83.xtp
+++ /dev/null
@@ -1,293 +0,0 @@
-CONTENTS Roco HO Scale Code-83 Turnouts
-# Straight Section Design by Peter Klapwijk - 23.000000
-TURNOUT HO "Roco straight G1, 230mm 42410"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.055118 0.000000 90.000000
- S 0 0 0.000000 0.000000 9.055118 0.000000
- END
-# Straight Section Design by Peter Klapwijk - 11.900000
-TURNOUT HO "Roco straight DG1, 119mm 42411"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.685039 0.000000 90.000000
- S 0 0 0.000000 0.000000 4.685039 0.000000
- END
-# Straight Section Design by Peter Klapwijk - 11.500000
-TURNOUT HO "Roco straight G1/2, 115mm 42412"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 4.527559 0.000000 90.000000
- S 0 0 0.000000 0.000000 4.527559 0.000000
- END
-# Straight Section Design by Peter Klapwijk - 5.750000
-TURNOUT HO "Roco straight G1/4, 57.5mm 42413"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.263780 0.000000 90.000000
- S 0 0 0.000000 0.000000 2.263780 0.000000
- END
-# Curved Section Design by Peter Klapwijk - 35.800000 30.000000
-TURNOUT HO "Roco R2, rad.358mm/30° 42422"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 7.047239 1.888300 60.000000
- C 0 0 -14.094488 0.000019 14.094488 150.000076 30.000000
- END
-# Curved Section Design by Peter Klapwijk - 41.960000 30.000000
-TURNOUT HO "Roco R3, rad.419.6mm/30° 42423"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 8.259836 2.213214 60.000000
- C 0 0 -16.519685 0.000022 16.519685 150.000076 30.000000
- END
-# Curved Section Design by Peter Klapwijk - 48.120000 30.000000
-TURNOUT HO "Roco R4, rad.481.2mm/30° 42424"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.472434 2.538129 60.000000
- C 0 0 -18.944882 0.000025 18.944882 150.000076 30.000000
- END
-# Curved Section Design by Peter Klapwijk - 54.280000 30.000000
-TURNOUT HO "Roco R5, rad.542.8mm/30° 42425"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 10.685031 2.863043 60.000000
- C 0 0 -21.370079 0.000028 21.370079 150.000076 30.000000
- END
-# Curved Section Design by Peter Klapwijk - 88.880000 15.000000
-TURNOUT HO "Roco R10, 15°/#4 turnout rev 42428"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 9.056621 1.192326 75.000000
- C 0 0 -34.992126 0.000046 34.992126 165.000076 15.000000
- END
-# Curved Section Design by Peter Klapwijk - 196.200000 5.000000
-TURNOUT HO "Roco R20, 5°/#6 turnout rev 42430"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 6.732261 0.293937 85.000000
- C 0 0 -77.244094 0.000102 77.244094 175.000076 5.000000
- END
-# Regular Turnout Design by Peter Klapwijk - 23.000000 3.080000 15.000000 23.000000
-TURNOUT HO "Roco WL15, 230mm/rad87.35, 15° 42440"
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.000000 0.000000 270.000000
- E 9.055118 0.000000 90.000000
- E 9.055118 1.212598 75.000000
- S 0 0 0.000000 0.000000 0.648600 0.000000
- S 0 0 0.648600 0.000000 9.055118 0.000000
- C 0 0 -29.479767 0.648639 29.479767 164.999924 15.000152
- S 0 0 8.278594 1.004517 9.055118 1.212598
- END
-TURNOUT HO "Roco WR15, 230mm/rad87.35, 15° 42441"
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.000000 0.000000 270.000000
- E 9.055118 0.000000 90.000000
- E 9.055118 -1.212598 105.000000
- S 0 0 0.000000 0.000000 0.648600 0.000000
- S 0 0 0.648600 0.000000 9.055118 0.000000
- C 0 0 29.479767 0.648483 -29.479767 0.000076 15.000152
- S 0 0 8.278594 -1.004517 9.055118 -1.212598
- END
-# Straight Section Design by Peter Klapwijk - 0.800000
-TURNOUT HO "Roco 8mm straight c/w 440/441 D8"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 0.314961 0.000000 90.000000
- S 0 0.000000 0.000000 0.000000 0.314961 0.000000
- END
-# Curved Section Design by Peter Klapwijk - 35.800000 7.500000
-TURNOUT HO "Roco R2 1/4, rad.358mm/7.5° 42408"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 1.839698 0.120580 82.500000
- C 0 0 -14.094488 0.000019 14.094488 172.500076 7.500000
- END
-# Curved Section Design by Peter Klapwijk - 41.960000 7.500000
-TURNOUT HO "Roco R3 1/4, rad419.6mm/7.5° 42409"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 2.156250 0.141328 82.500000
- C 0 0 -16.519685 0.000022 16.519685 172.500076 7.500000
- END
-# Regular Turnout Design by Peter Klapwijk - 34.500000 3.080000 10.000000 34.500000
-TURNOUT HO "Roco WL10, 345mm, rad.1946mm/10° 42488"
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.000000 0.000000 270.000000
- E 13.582677 0.000000 90.000000
- E 13.582677 1.212598 80.000000
- S 0 0 0.000000 0.000000 0.648600 0.000000
- S 0 0 0.648600 0.000000 13.582677 0.000000
- C 0 0 -69.234030 0.648692 69.234030 169.999924 10.000152
- S 0 0 12.671134 1.051851 13.582677 1.212598
- END
-TURNOUT HO "Roco WR10, 345mm, rad.1946mm/10° 42489"
- P "Normal" 1 2
- P "Reverse" 1 3 4
- E 0.000000 0.000000 270.000000
- E 13.582677 0.000000 90.000000
- E 13.582677 -1.212598 100.000000
- S 0 0 0.000000 0.000000 0.648600 0.000000
- S 0 0 0.648600 0.000000 13.582677 0.000000
- C 0 0 69.234030 0.648324 -69.234030 0.000076 10.000152
- S 0 0 12.671134 -1.051851 13.582677 -1.212598
- END
-TURNOUT HO "Roco Curved Left 42558"
- U "Curved Turnout" "Dave Bullis" "Roco HO Scal Code-83 Turnouts" "Curved Left" "42558" "Curved Right" "42559" 7.086614 30.000000 1.968504 30.000000 2.007874 9.527559
- P "Normal" 1 6 4 5
- P "Reverse" 1 2 3
- E 0.000000 0.000000 270.000000
- E 9.527559 2.007874 60.000000
- E 7.086614 1.968504 60.000000
- S 0 0.000000 0.000000 0.000000 0.648600 0.000000
- C 0 0.000000 -11.302387 0.648600 11.302387 150.000000 30.000000
- S 0 0.000000 6.299793 1.514233 7.086614 1.968504
- C 0 0.000000 -12.566368 2.682671 12.566368 150.000000 30.000000
- S 0 0.000000 8.965855 1.683574 9.527559 2.007874
- S 0 0.000000 0.648600 0.000000 2.682671 0.000000
- END
-TURNOUT HO "Roco Curved Right 42559"
- U "Curved Turnout" "Dave Bullis" "Roco HO Scal Code-83 Turnouts" "Curved Left" "42558" "Curved Right" "42559" 7.086614 30.000000 1.968504 30.000000 2.007874 9.527559
- P "Normal" 1 6 4 5
- P "Reverse" 1 2 3
- E 0.000000 0.000000 270.000000
- E 9.527559 -2.007874 120.000000
- E 7.086614 -1.968504 120.000000
- S 0 0.000000 0.000000 0.000000 0.648600 0.000000
- C 0 0.000000 11.302387 0.648600 -11.302387 0.000000 30.000000
- S 0 0.000000 6.299793 -1.514233 7.086614 -1.968504
- C 0 0.000000 12.566368 2.682671 -12.566368 0.000000 30.000000
- S 0 0.000000 8.965855 -1.683574 9.527559 -2.007874
- S 0 0.000000 0.648600 0.000000 2.682671 0.000000
- END
-# Crossing Design by Peter Klapwijk - 23.000000 15.000000 23.000000
-TURNOUT HO "Roco K15, 230mm, 15° 42497"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 9.055118 0.000000 90.000000
- E 0.154271 1.171812 285.000000
- E 8.900847 -1.171812 105.000000
- S 0 0.000000 0.000000 0.000000 9.055118 0.000000
- S 0 0.000000 0.154271 1.171812 8.900847 -1.171812
- END
-# Single Slipswitch Design by Peter Klapwijk - 23.000000 15.000000 23.000000
-TURNOUT HO "Roco EKW15, 230mm/15°/rad.531mm 42448"
- P "Normal" 1 2 0 3 4
- P "Reverse" 1 5 4
- E 0.000000 0.000000 270.000000
- E 9.055118 0.000000 90.000000
- E 0.154271 1.171812 285.000000
- E 8.900847 -1.171812 105.000000
- S 0 0 0.000000 0.000000 1.297324 0.000000
- S 0 0 1.297324 0.000000 9.055118 0.000000
- S 0 0 0.154271 1.171812 7.647912 -0.836079
- S 0 0 7.647912 -0.836079 8.900847 -1.171812
- C 0 0 24.536566 1.297226 -24.536566 0.000076 15.000152
- END
-# Double Slipswitch Design by Peter Klapwijk - 23.000000 15.000000 23.000000
-TURNOUT HO "Roco DKW15, 230mm, 15° 42451"
- P "Normal" 1 2 3 0 4 5 6
- P "Reverse" 1 7 6 0 4 8 3
- E 0.000000 0.000000 270.000000
- E 9.055118 0.000000 90.000000
- E 0.154271 1.171812 285.000000
- E 8.900847 -1.171812 105.000000
- S 0 0.000000 0.000000 0.000000 1.297324 0.000000
- S 0 0.000000 1.297324 0.000000 7.757794 0.000000
- S 0 0.000000 7.757794 0.000000 9.055118 0.000000
- S 0 0.000000 0.154271 1.171812 1.407206 0.836079
- S 0 0.000000 1.407206 0.836079 7.647912 -0.836079
- S 0 0.000000 7.647912 -0.836079 8.900847 -1.171812
- C 0 0.000000 24.536566 1.297226 -24.536566 0.000076 15.000152
- C 0 0.000000 -24.536566 7.757826 24.536558 180.000076 15.000152
- END
-# 3-way Turnout Design by Peter Klapwijk - 23.000000 3.080000 15.000000 28.750000 15.000000 3.080000 28.750000
-TURNOUT HO "Roco DWW15, 287.5mm/rad.873.5/15° 42454"
- P "Left" 1 2 3
- P "Normal" 1 4 7
- P "Right" 1 4 5 6
- E 0.000000 0.000000 270.000000
- E 9.055118 1.212598 75.000000
- E 11.318898 -1.212598 105.000000
- E 11.318898 0.000000 90.000000
- S 0 0 0.000000 0.000000 0.648600 0.000000
- C 0 0 -29.479767 0.648639 29.479767 164.999924 15.000152
- S 0 0 8.278594 1.004517 9.055118 1.212598
- S 0 0 0.648600 0.000000 2.757006 0.000000
- C 0 0 30.660032 2.756884 -30.660032 0.000076 15.000152
- S 0 0 10.692478 -1.044735 11.318898 -1.212598
- S 0 0 2.757006 0.000000 11.318898 0.000000
- END
-# Straight Section Design by Peter Klapwijk - 0.400000
-TURNOUT HO "Roco straight 4mm ext. c/w 497/448/451/454 D4"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 0.157480 0.000000 90.000000
- S 0 0 0.000000 0.000000 0.157480 0.000000
- END
-# Straight Section Design by Peter Klapwijk - 1.200000
-TURNOUT HO "Roco straight 12mm ext. c/w 497/448/451/454 D12"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 0.472441 0.000000 90.000000
- S 0 0 0.000000 0.000000 0.472441 0.000000
- END
-# Crossing Design by Peter Klapwijk - 11.900000 30.000000 11.900000
-TURNOUT HO "Roco K30, 119mm, 30° 42498"
- P "Normal" 1 0 2
- E 0.000000 0.000000 270.000000
- E 4.685039 0.000000 90.000000
- E 0.313836 1.171256 300.000000
- E 4.371203 -1.171256 120.000000
- S 0 0.000000 0.000000 0.000000 4.685039 0.000000
- S 0 0.000000 0.313836 1.171256 4.371203 -1.171256
- END
-# Single Slipswitch Design by Peter Klapwijk - 34.500000 10.000000 34.500000
-TURNOUT HO "Roco EKW10, 345mm, 10° 42493"
- P "Normal" 1 2 0 3 4
- P "Reverse" 1 5 4
- E 0.000000 0.000000 270.000000
- E 13.582677 0.000000 90.000000
- E 0.103174 1.179294 280.000000
- E 13.479503 -1.179294 100.000000
- S 0 0.000000 0.000000 0.000000 1.297489 0.000000
- S 0 0.000000 1.297489 0.000000 13.582677 0.000000
- S 0 0.000000 0.103174 1.179294 12.202176 -0.954050
- S 0 0.000000 12.202176 -0.954050 13.479503 -1.179294
- C 0 0.000000 62.796695 1.297239 -62.796695 0.000076 10.000152
- END
-# Double Slipswitch Design by Peter Klapwijk - 34.500000 10.000000 34.500000
-TURNOUT HO "Roco DKW10, 345mm, 10° 42496"
- P "Normal" 1 2 3 0 4 5 6
- P "Reverse" 1 7 6 0 4 8 3
- E 0.000000 0.000000 270.000000
- E 13.582677 0.000000 90.000000
- E 0.103174 1.179294 280.000000
- E 13.479503 -1.179294 100.000000
- S 0 0.000000 0.000000 0.000000 1.297489 0.000000
- S 0 0.000000 1.297489 0.000000 12.285188 0.000000
- S 0 0.000000 12.285188 0.000000 13.582677 0.000000
- S 0 0.000000 0.103174 1.179294 1.380501 0.954050
- S 0 0.000000 1.380501 0.954050 12.202176 -0.954050
- S 0 0.000000 12.202176 -0.954050 13.479503 -1.179294
- C 0 0.000000 62.796695 1.297239 -62.796695 0.000076 10.000152
- C 0 0.000000 -62.796695 12.285270 62.796680 180.000076 10.000152
- END
-# Straight Section Design by Peter Klapwijk - 0.200000
-TURNOUT HO "Roco straight 2mm ext. c/w 493/496 D2"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 0.078740 0.000000 90.000000
- S 0 0 0.000000 0.000000 0.078740 0.000000
- END
-# Straight Section Design by Peter Klapwijk - 0.500000
-TURNOUT HO "Roco straight 5mm ext c/w 493/496 D5"
- P "Normal" 1
- E 0.000000 0.000000 270.000000
- E 0.196850 0.000000 90.000000
- S 0 0 0.000000 0.000000 0.196850 0.000000
- END
diff --git a/app/lib/params/supero.xtp b/app/lib/params/supero.xtp
index 6a198fb..21c481c 100644
--- a/app/lib/params/supero.xtp
+++ b/app/lib/params/supero.xtp
@@ -28,7 +28,7 @@ TURNOUT O "Lionel Super O Half Straight 34"
L3 0 0.062500 0.000000 0.000000 0 5.875000 0.000000 0
END
TURNOUT O "Lionel Super O Accessory Adapter 38"
- P "Normal" 0 1
+ P "Normal" 1 0 2
E 0.000000 0.000000 270.000000
E 5.375000 0.000000 90.000000
S 0 0.000000 0.000000 0.000000 1.625000 0.000000
diff --git a/app/lib/params/toolkit-n.xtp b/app/lib/params/toolkit-n.xtp
index 12183e0..cf47de7 100644
--- a/app/lib/params/toolkit-n.xtp
+++ b/app/lib/params/toolkit-n.xtp
@@ -1,4 +1,4 @@
-CONTENTS Special Devices
+CONTENTS Special Devices N Scale streets vehicles
STRUCTURE N "Special Devices Straight Two-Lane Paved Street 1"
F3 0 0.000000 4
0.000000 0.000000 0
diff --git a/app/lib/params/walth-n.xtp b/app/lib/params/walth-n.xtp
deleted file mode 100644
index 4e45f38..0000000
--- a/app/lib/params/walth-n.xtp
+++ /dev/null
@@ -1,2686 +0,0 @@
-CONTENTS Walthers Cornerstone N Structures
-
-
-SUBCONTENTS Walthers Cornerstone N Structures - Power Industries
-STRUCTURE N "Walthers Nothern Light Powerhouse 933-3214"
- L 0 0 0.000000 0.000000 4.125000 0.000000
- L 0 0 4.125000 0.000000 4.125000 2.625000
- L 0 0 4.125000 2.625000 0.000000 2.625000
- L 0 0 0.000000 2.625000 0.000000 0.000000
- A 0 0 0.125000 0.500000 0.500000 0.000000 360.000000
- A 0 0 0.125000 3.625000 0.500000 0.000000 360.000000
- A 0 0 0.125000 1.500000 0.500000 0.000000 360.000000
- A 0 0 0.139754 2.625000 0.500000 0.000000 360.000000
- A 0 0 0.534000 4.875000 2.187500 0.000000 360.000000
- A 0 0 0.000000 4.937500 2.062500 0.000000 360.000000
- A 0 0 0.364434 4.875000 2.187500 0.000000 360.000000
- END
-
-
-
-SUBCONTENTS Walthers Cornerstone N Structures - Coal Industries
-STRUCTURE N "Walthers Cornerstone Structure Western (coal) Flood Loader 933-3247"
- G3 0 0.000000 0.000000 1.328484 1.328484 0
- G3 15132390 0.000000 1.359734 1.359734 1.359734 0
- F3 8421504 0.000000 4
- 2.375359 1.812859 0
- 1.562859 1.812859 0
- 1.562859 0.844109 0
- 2.375359 0.844109 0
- L3 0 0.000000 1.937859 1.812859 0 1.937859 0.844109 0
- F3 0 0.000000 4
- 18.984734 0.797234 0
- 18.953484 0.797234 0
- 18.953484 0.797234 0
- 18.984734 0.797234 0
- F3 12632256 0.000000 4
- 19.015984 0.797234 0
- 17.984734 0.797234 0
- 17.984734 1.797234 0
- 19.015984 1.797234 0
- L3 0 0.000000 2.672234 1.078484 0 17.953484 1.078484 0
- L3 0 0.000000 17.953484 1.078484 0 17.953484 1.547234 0
- L3 0 0.000000 17.953484 1.547234 0 2.672234 1.547234 0
- L3 0 0.000000 2.672234 1.547234 0 2.672234 1.078484 0
- A3 0 0.000000 1.244127 1.344109 1.359734 0 0.000000 360.000000
- G3 0 0.000000 0.064424 1.734734 1.156609 0
- G3 8421504 0.000000 0.104816 0.547234 1.406609 0
- F3 8421504 0.000000 4
- 2.703484 1.359734 0
- 17.953484 1.359734 0
- 17.953484 1.203484 0
- 2.703484 1.203484 0
- END
-STRUCTURE N "Walther's Cornerstone Structures New River Mine Tipple 933-3221"
- F3 12632256 0.000000 4
- 0.000000 0.000000 0
- 5.000000 0.000000 0
- 5.000000 5.000000 0
- 0.000000 5.000000 0
- L3 0 0.000000 2.437500 5.000000 0 2.437500 0.000000 0
- L3 0 0.000000 1.125000 0.000000 0 1.125000 4.984375 0
- L3 0 0.000000 2.437500 2.500000 0 4.984375 2.500000 0
- END
-STRUCTURE N "Walther's Cornerstone Structures New River Mine Conveyor 933-3221"
- F3 12632256 0.000000 4
- 3.000000 0.000000 0
- 0.000000 0.000000 0
- 0.000000 2.562500 0
- 3.000000 2.562500 0
- F3 8421504 0.000000 4
- 1.250000 2.562500 0
- 1.750000 2.562500 0
- 1.750000 2.875000 0
- 1.250000 2.875000 0
- L3 0 0.000000 0.000000 0.000000 0 3.000000 0.000000 0
- L3 0 0.000000 3.000000 0.000000 0 3.000000 2.562500 0
- L3 0 0.000000 3.000000 2.562500 0 0.000000 2.562500 0
- L3 0 0.000000 0.000000 2.562500 0 0.000000 0.000000 0
- L3 0 0.000000 1.500000 2.562500 0 1.500000 0.015625 0
- L3 0 0.000000 0.000000 1.500000 0 2.984375 1.515625 0
- END
-STRUCTURE N "Walther's Cornerstone Structures New River Mine Track Coaling Bldg. 933-3221"
- F3 12632256 0.000000 4
- 0.000000 0.000000 0
- 4.125000 0.000000 0
- 4.125000 1.625000 0
- 0.000000 1.625000 0
- L3 0 0.000000 0.000000 0.812500 0 4.093750 0.796875 0
- END
-STRUCTURE N "Walthers Cornerstone Structures Coal Bunkers 933-3246A"
- F3 8421504 0.000000 4
- 0.000000 0.000000 0
- 4.812500 0.000000 0
- 4.812500 1.875000 0
- 0.000000 1.875000 0
- G3 13289984 0.000000 0.500244 0.781250 0.875000 0
- G3 13289984 0.000000 0.500244 2.025219 0.868969 0
- G3 13289984 0.000000 0.500244 4.025219 0.853344 0
- F3 10309376 0.000000 4
- 2.625000 1.500000 0
- 3.375000 1.500000 0
- 3.375000 0.250000 0
- 2.625000 0.250000 0
- END
-STRUCTURE N "Walthers Cornerstone Structures Oil Tanks 933-3246B"
- G3 0 0.000000 0.375000 0.375000 0.375000 0
- G3 0 0.000000 0.375000 1.306225 0.384350 0
- END
-STRUCTURE N "Walthers Cornerstone Structures Office/Scalehouse 933-3246C"
- F3 32768 0.000000 4
- 0.000000 0.187500 0
- 2.562500 0.187500 0
- 2.562500 1.437500 0
- 0.000000 1.437500 0
- F3 32768 0.000000 4
- 0.000000 1.734375 0
- 0.859375 1.734375 0
- 0.859375 1.437500 0
- 0.000000 1.437500 0
- L3 0 0.000000 0.375000 0.875000 0 2.062500 0.875000 0
- L3 0 0.000000 2.062500 0.875000 0 2.546875 1.437500 0
- L3 0 0.000000 2.062500 0.875000 0 2.531250 0.187500 0
- L3 0 0.000000 0.000000 1.437500 0 0.843750 1.437500 0
- L3 0 0.000000 0.359375 0.875000 0 0.000000 1.437500 0
- L3 0 0.000000 0.359375 0.875000 0 0.000000 0.187500 0
- F3 12632256 0.000000 4
- 1.000000 0.187500 0
- 1.375000 0.187500 0
- 1.375000 0.000000 0
- 1.000000 0.000000 0
- L3 0 0.000000 0.437500 0.625000 0 0.625000 0.625000 0
- L3 0 0.000000 0.437500 0.625000 0 0.218750 0.203125 0
- L3 0 0.000000 0.593750 0.625000 0 0.718750 0.187500 0
- L3 0 0.000000 1.890625 0.625000 0 2.078125 0.625000 0
- L3 0 0.000000 1.875000 0.625000 0 1.734375 0.187500 0
- L3 0 0.000000 2.062500 0.640625 0 2.203125 0.203125 0
- END
-STRUCTURE N "Walthers Cornerstone Structures Pump House 933-3246D"
- F3 32768 0.000000 4
- 0.000000 0.125000 0
- 0.812500 0.125000 0
- 0.812500 0.687500 0
- 0.000000 0.687500 0
- F3 12632256 0.000000 4
- 0.265625 0.125000 0
- 0.531250 0.125000 0
- 0.531250 0.000000 0
- 0.265625 0.000000 0
- END
-
-
-
-
-SUBCONTENTS Walthers Cornerstone N Structures - Grain Industries
-STRUCTURE N "Walthers Red Wing Milling Co 933-3212"
- L 0 0 4.500000 0.000000 4.500000 0.375000
- L 0 0 6.625000 0.375000 4.500000 0.375000
- L 0 0 6.625000 4.875000 2.062500 4.875000
- L 0 0 2.062500 4.875000 2.062500 4.500000
- L 0 0 2.062500 4.437500 0.000000 4.437500
- L 0 0 0.375000 0.750000 3.250000 0.750000
- L 0 0 3.250000 0.750000 3.250000 1.625000
- L 0 0 3.250000 1.625000 0.375000 1.625000
- L 0 0 0.375000 1.625000 0.375000 0.750000
- L 0 0 3.062500 1.437500 2.625000 1.437500
- L 0 0 2.625000 1.437500 2.625000 1.062500
- L 0 0 2.625000 1.062500 3.062500 1.062500
- L 0 0 3.062500 1.062500 3.062500 1.437500
- L 0 0 4.500000 0.000000 4.500000 -0.687500
- L 0 0 4.500000 -0.687500 2.000000 -0.687500
- L 0 0 2.000000 -0.687500 2.000000 0.375000
- L 0 0 2.000000 0.375000 0.000000 0.375000
- L 0 0 4.500000 0.375000 2.000000 0.375000
- L 0 0 2.000000 0.000000 0.000000 0.000000
- L 0 0 2.250000 0.375000 2.250000 -0.062500
- L 0 0 2.250000 -0.062500 4.062500 -0.062500
- L 0 0 4.062500 -0.062500 4.062500 0.375000
- A 0 0 0.139754 3.187500 0.125000 0.000000 360.000000
- A 0 0 0.139754 3.812500 0.125000 0.000000 360.000000
- A 0 0 0.139754 2.625000 0.125000 0.000000 360.000000
- A 0 0 0.062500 3.812500 0.125000 0.000000 360.000000
- A 0 0 0.062500 3.187500 0.125000 0.000000 360.000000
- A 0 0 0.000000 2.625000 0.125000 0.000000 360.000000
- A 0 0 0.062500 2.625000 0.125000 0.000000 360.000000
- L 0 0 6.625000 4.875000 6.625000 0.375000
- L 0 0 2.062500 4.437500 6.625000 4.437500
- L 0 4 2.937500 -0.062500 2.937500 -0.562500
- L 0 4 1.312500 0.375000 1.312500 -0.062500
- L 0 0 0.000000 4.437500 0.000000 4.437500
- L 0 0 0.000000 4.437500 0.000000 0.000000
- END
-STRUCTURE N "Walthers ADM Grain Elevator 933-3225"
- L 0 0 8.125000 5.875000 3.625000 5.875000
- L 0 0 8.125000 0.000000 5.000000 0.000000
- L 0 0 5.000000 0.000000 5.000000 4.187500
- L 0 0 8.125000 4.187500 3.625000 4.187500
- L 0 0 3.625000 5.875000 3.625000 4.187500
- L 0 0 5.000000 1.562500 8.125000 1.562500
- L 0 0 7.312500 4.187500 7.312500 1.562500
- L 0 0 5.625000 4.187500 5.625000 1.562500
- L 0 0 8.125000 3.750000 7.625000 3.750000
- L 0 0 7.625000 3.750000 7.625000 3.250000
- L 0 0 7.625000 3.250000 8.125000 3.250000
- L 0 0 7.625000 2.375000 8.125000 2.375000
- L 0 0 8.125000 5.875000 8.125000 0.000000
- A 0 0 0.197642 7.875000 3.500000 0.000000 360.000000
- A 0 0 0.197642 7.875000 2.125000 0.000000 360.000000
- L 0 0 8.125000 1.875000 7.625000 1.875000
- L 0 0 7.625000 2.375000 7.625000 1.875000
- A 0 0 0.125000 7.875000 3.500000 0.000000 360.000000
- A 0 0 0.125000 7.875000 2.125000 0.000000 360.000000
- A 0 0 0.062500 6.437500 3.750000 0.000000 360.000000
- A 0 0 0.062500 6.437500 3.250000 0.000000 360.000000
- A 0 0 0.062500 6.437500 2.375000 0.000000 360.000000
- A 0 0 0.062500 6.437500 1.937500 0.000000 360.000000
- A 0 0 0.625000 4.375000 3.500000 270.000000 180.000000
- L 0 0 3.750000 3.500000 3.750000 3.500000
- A 0 0 0.625000 3.125000 3.500000 270.000000 180.000000
- A 0 0 0.625000 1.875000 3.500000 270.000000 180.000000
- A 0 0 0.620066 0.629934 3.500000 246.222684 203.777316
- A 0 0 0.625000 4.375000 2.250000 90.000000 180.000000
- A 0 0 0.625000 3.125000 2.250000 90.000000 180.000000
- A 0 0 0.625000 1.875000 2.250000 90.000000 180.000000
- A 0 0 0.620066 0.629934 2.250000 90.000000 203.777316
- L 0 0 5.000000 2.875000 0.062500 2.875000
- L 0 0 0.062500 2.875000 0.062500 3.375000
- L 0 0 0.062500 3.375000 4.937500 3.375000
- L 0 0 0.062500 2.875000 0.062500 2.375000
- L 0 0 0.062500 2.375000 5.000000 2.375000
- END
-
-
-SUBCONTENTS Walthers Cornerstone N Structures - Engine Servicing Structures
-STRUCTURE N "Walthers Modern Coaling Tower 933-3262"
- F3 8421504 0.000000 4
- 0.000000 4.171875 0
- 1.250000 4.171875 0
- 1.250000 1.046875 0
- 0.000000 1.046875 0
- F3 8421504 0.000000 4
- 2.000000 1.109375 0
- 5.000000 1.109375 0
- 5.000000 4.109375 0
- 2.000000 4.109375 0
- F3 8421504 0.000000 4
- 2.000000 2.125000 0
- 1.250000 2.125000 0
- 1.250000 3.125000 0
- 2.000000 3.125000 0
- L3 0 0.000000 0.625000 1.062500 0 0.625000 4.187500 0
- L3 0 0.000000 1.250000 3.125000 0 1.250000 2.125000 0
- L3 0 0.000000 2.000000 3.125000 0 5.000000 3.125000 0
- L3 0 0.000000 2.000000 2.125000 0 5.000000 2.125000 0
- L3 0 0.000000 3.500000 1.125000 0 3.500000 2.125000 0
- L3 0 0.000000 3.500000 3.125000 0 3.500000 4.125000 0
- L3 0 0.000000 2.000000 3.125000 0 2.000000 2.125000 0
- L3 0 0.000000 2.750000 3.125000 0 2.750000 2.125000 0
- L3 0 0.000000 2.375000 2.125000 0 2.375000 3.125000 0
- L3 0 0.000000 4.859375 4.125000 0 4.625000 4.125000 0
- L3 0 0.000000 4.625000 4.125000 0 4.625000 5.250000 0
- L3 0 0.000000 4.625000 5.250000 0 4.859375 5.250000 0
- L3 0 0.000000 4.859375 5.250000 0 4.859375 4.125000 0
- L3 0 0.000000 4.875000 0.000000 0 4.625000 0.000000 0
- L3 0 0.000000 4.625000 0.000000 0 4.625000 1.109375 0
- L3 0 0.000000 4.625000 1.109375 0 4.875000 1.109375 0
- L3 0 0.000000 4.875000 1.109375 0 4.875000 0.000000 0
- L3 0 0.000000 2.000000 0.000000 0 1.750000 0.000000 0
- L3 0 0.000000 1.750000 0.000000 0 1.750000 2.156250 0
- L3 0 0.000000 1.750000 2.156250 0 2.000000 2.156250 0
- L3 0 0.000000 2.000000 2.156250 0 2.000000 0.000000 0
- L3 0 0.000000 4.625000 4.250000 0 4.843750 4.250000 0
- L3 0 0.000000 4.625000 4.375000 0 4.859375 4.375000 0
- L3 0 0.000000 4.625000 4.500000 0 4.875000 4.500000 0
- L3 0 0.000000 4.625000 4.625000 0 4.859375 4.625000 0
- L3 0 0.000000 4.625000 4.750000 0 4.875000 4.750000 0
- L3 0 0.000000 4.625000 4.875000 0 4.859375 4.875000 0
- L3 0 0.000000 4.625000 5.000000 0 4.859375 5.000000 0
- L3 0 0.000000 4.625000 5.125000 0 4.843750 5.125000 0
- L3 0 0.000000 4.625000 5.250000 0 4.859375 5.250000 0
- L3 0 0.000000 4.625000 0.000000 0 4.875000 0.000000 0
- L3 0 0.000000 4.625000 0.125000 0 4.875000 0.125000 0
- L3 0 0.000000 4.625000 0.250000 0 4.875000 0.250000 0
- L3 0 0.000000 4.625000 0.375000 0 4.859375 0.375000 0
- L3 0 0.000000 4.640625 0.500000 0 4.859375 0.500000 0
- L3 0 0.000000 4.625000 0.625000 0 4.859375 0.625000 0
- L3 0 0.000000 4.640625 0.875000 0 4.859375 0.875000 0
- L3 0 0.000000 4.625000 0.750000 0 4.875000 0.750000 0
- L3 0 0.000000 4.625000 1.000000 0 4.875000 1.000000 0
- L3 0 0.000000 1.750000 0.000000 0 2.000000 0.000000 0
- L3 0 0.000000 1.750000 0.125000 0 2.000000 0.125000 0
- L3 0 0.000000 1.750000 0.250000 0 2.000000 0.250000 0
- L3 0 0.000000 1.750000 0.375000 0 2.015625 0.375000 0
- L3 0 0.000000 1.750000 0.500000 0 2.000000 0.500000 0
- L3 0 0.000000 1.750000 1.000000 0 2.000000 1.000000 0
- L3 0 0.000000 1.750000 0.875000 0 2.000000 0.875000 0
- L3 0 0.000000 1.750000 0.625000 0 2.000000 0.625000 0
- L3 0 0.000000 1.750000 0.750000 0 2.000000 0.750000 0
- L3 0 0.000000 1.750000 2.000000 0 2.000000 2.000000 0
- L3 0 0.000000 1.750000 1.875000 0 2.000000 1.875000 0
- L3 0 0.000000 1.750000 1.750000 0 1.984375 1.750000 0
- L3 0 0.000000 1.750000 1.625000 0 1.968750 1.625000 0
- L3 0 0.000000 1.750000 1.500000 0 1.968750 1.500000 0
- L3 0 0.000000 1.750000 1.375000 0 1.984375 1.375000 0
- L3 0 0.000000 1.750000 1.250000 0 1.984375 1.250000 0
- L3 0 0.000000 1.750000 1.125000 0 1.984375 1.125000 0
- END
-STRUCTURE N "Walthers Modern Coaling Tower Office 933-3262"
- F3 8421504 0.000000 4
- 0.000000 2.000000 0
- 0.750000 2.000000 0
- 0.750000 0.250000 0
- 0.000000 0.250000 0
- F3 12632256 0.000000 4
- 0.125000 0.250000 0
- 0.625000 0.250000 0
- 0.625000 0.000000 0
- 0.125000 0.000000 0
- END
-STRUCTURE N "Walthers Shady Jct Water Tower 933-3205a"
- L 0 0 0.000000 0.000000 1.562500 0.000000
- L 0 0 1.562500 0.000000 1.562500 1.562500
- L 0 0 1.562500 1.562500 0.000000 1.562500
- L 0 0 0.000000 1.562500 0.000000 0.000000
- L 0 0 0.000000 0.375000 1.250000 0.375000
- L 0 0 1.250000 0.375000 1.250000 1.562500
- L 0 0 0.625000 1.000000 0.625000 0.375000
- L 0 0 0.625000 1.000000 1.250000 1.000000
- L 0 0 0.625000 1.000000 0.000000 1.000000
- L 0 0 0.625000 1.000000 0.625000 1.562500
- L 0 0 0.625000 1.000000 1.062500 1.437500
- L 0 0 0.625000 1.000000 1.062500 0.562500
- L 0 0 0.625000 1.000000 0.187500 0.562500
- L 0 0 0.625000 1.000000 0.187500 1.437500
- L 0 0 0.625000 1.562500 1.062500 1.437500
- L 0 0 1.062500 1.437500 1.250000 1.000000
- L 0 0 1.250000 1.000000 1.062500 0.562500
- L 0 0 1.062500 0.562500 0.625000 0.375000
- L 0 0 0.625000 0.375000 0.187500 0.562500
- L 0 0 0.187500 0.562500 0.000000 1.000000
- L 0 0 0.000000 1.000000 0.187500 1.437500
- L 0 0 0.187500 1.437500 0.625000 1.562500
- L 0 0 1.250000 1.500000 1.750000 1.500000
- L 0 0 1.750000 1.500000 1.750000 1.062500
- L 0 0 1.750000 1.062500 1.250000 1.062500
- END
-STRUCTURE N "Walthers Shady Jct Interlocking Tower 933-3205b"
- L 0 0 0.000000 0.000000 1.500000 0.000000
- L 0 0 1.500000 0.000000 1.500000 1.000000
- L 0 0 1.500000 1.000000 0.000000 1.000000
- L 0 0 0.000000 1.000000 0.000000 0.000000
- L 0 0 0.125000 0.062500 1.125000 0.062500
- L 0 0 1.125000 0.062500 1.125000 0.625000
- L 0 0 1.125000 0.625000 0.125000 0.625000
- L 0 0 0.125000 0.625000 0.125000 0.062500
- L 0 0 0.250000 0.625000 0.250000 0.062500
- L 0 0 0.250000 0.312500 1.125000 0.312500
- END
-STRUCTURE N "Walthers Shady Jct Xing Shanty 933-3205c"
- L 0 0 0.000000 0.000000 1.000000 0.000000
- L 0 0 1.000000 0.000000 1.000000 0.750000
- L 0 0 1.000000 0.750000 0.000000 0.750000
- L 0 0 0.000000 0.750000 0.000000 0.000000
- L 0 0 0.000000 0.375000 1.000000 0.375000
- L 0 0 0.750000 0.750000 0.750000 0.937500
- L 0 0 0.750000 0.937500 0.250000 0.937500
- L 0 0 0.250000 0.937500 0.250000 0.750000
- L 0 0 0.125000 0.000000 0.125000 -0.062500
- L 0 0 0.125000 -0.062500 0.375000 -0.062500
- L 0 0 0.375000 -0.062500 0.375000 0.000000
- END
-STRUCTURE N "Walthers Shady Jct Water Crane 933-3205d"
- L 0 0 0.000000 0.000000 0.500000 0.000000
- L 0 0 0.500000 0.000000 0.500000 1.125000
- L 0 0 0.500000 1.125000 0.000000 1.125000
- L 0 0 0.000000 1.125000 0.000000 0.000000
- A 0 0 0.000000 0.250000 0.937500 0.000000 360.000000
- A 0 0 0.062500 0.250000 0.937500 0.000000 360.000000
- L 0 0 0.312500 0.875000 0.312500 0.187500
- L 0 0 0.187500 0.875000 0.187500 0.187500
- L 0 0 0.187500 0.187500 0.312500 0.187500
- END
-STRUCTURE N "Walthers 2-Stall Engine House 933-3204"
- L 0 0 0.000000 0.000000 7.625000 0.000000
- L 0 0 7.625000 0.000000 7.625000 3.250000
- L 0 0 7.625000 3.250000 0.000000 3.250000
- L 0 0 0.000000 3.250000 0.000000 0.000000
- L 0 0 0.000000 1.625000 7.625000 1.625000
- L 0 0 0.000000 2.000000 7.625000 2.000000
- L 0 0 0.000000 1.250000 7.625000 1.250000
- A 0 0 0.225347 6.625000 0.875000 0.000000 360.000000
- A 0 0 0.139754 6.625000 0.875000 0.000000 360.000000
- A 0 0 0.225347 1.000000 0.875000 0.000000 360.000000
- A 0 0 0.139754 1.000000 0.875000 0.000000 360.000000
- A 0 0 0.225347 1.000000 2.375000 0.000000 360.000000
- A 0 0 0.139754 1.000000 2.375000 0.000000 360.000000
- A 0 0 0.225347 6.625000 2.375000 0.000000 360.000000
- A 0 0 0.139754 6.625000 2.375000 0.000000 360.000000
- END
-STRUCTURE N "Walthers Union City Roundhouse 933-3202"
- L3 32768 0.041667 5.145877 13.802068 0 0.020877 8.489568 0
- L3 32768 0.020833 2.645877 4.583318 0 9.489627 7.427068 0
- L3 32768 0.020833 1.989627 6.020818 0 8.333377 9.708318 0
- L3 32768 0.020833 1.114627 7.302068 0 6.927127 11.770818 0
- L3 32768 0.020833 3.177127 3.052068 0 10.302127 5.020818 0
- L3 32768 0.020833 3.489627 1.583318 0 10.770877 2.520818 0
- A3 32768 0.041667 19.375000 -8.385373 0.020818 0 44.474403 45.525597
- A3 32768 0.041667 12.000000 -8.385373 0.020818 0 44.468552 45.531448
- L3 32768 0.020833 10.927127 0.020818 0 3.552127 0.020818 0
- A3 32768 0.041667 15.875123 -8.385373 0.020818 0 44.521254 45.478746
- A3 32768 0.020833 13.937535 -8.385373 0.020818 0 44.443785 45.556215
- A3 32768 0.020833 17.687500 -8.385373 0.020818 0 44.498085 45.501915
- A3 32768 0.020833 17.687500 -8.385373 0.020818 0 44.354681 45.645319
- L3 32768 0.020833 5.034001 9.576799 0 5.582656 8.740751 0
- L3 32768 0.020833 5.582656 8.740751 0 4.537595 8.054932 0
- L3 32768 0.020833 4.537595 8.054932 0 3.988940 8.890980 0
- L3 32768 0.020833 3.988940 8.890980 0 5.034001 9.576799 0
- L3 32768 0.020833 6.418694 3.458403 0 7.646536 3.692722 0
- L3 32768 0.020833 7.646536 3.692722 0 7.833991 2.710449 0
- L3 32768 0.020833 7.833991 2.710449 0 6.606150 2.476130 0
- L3 32768 0.020833 6.606150 2.476130 0 6.418694 3.458403 0
- L3 32768 0.020833 5.875673 5.347717 0 7.056088 5.758959 0
- L3 32768 0.020833 7.056088 5.758959 0 7.385081 4.814627 0
- L3 32768 0.020833 7.385081 4.814627 0 6.204666 4.403385 0
- L3 32768 0.020833 6.204666 4.403385 0 5.875673 5.347717 0
- L3 32768 0.020833 5.020321 7.205801 0 6.121503 7.797323 0
- L3 32768 0.020833 6.121503 7.797323 0 6.594721 6.916378 0
- L3 32768 0.020833 6.594721 6.916378 0 5.493539 6.324856 0
- L3 32768 0.020833 5.493539 6.324856 0 5.020321 7.205801 0
- L3 32768 0.020833 2.770605 10.537748 0 3.628429 11.265596 0
- L3 32768 0.020833 3.628429 11.265596 0 4.275405 10.503086 0
- L3 32768 0.020833 4.275405 10.503086 0 3.417581 9.775238 0
- L3 32768 0.020833 3.417581 9.775238 0 2.770605 10.537748 0
- L3 32768 0.020833 6.733693 1.499074 0 7.979845 1.597084 0
- L3 32768 0.020833 7.979845 1.597084 0 8.058253 0.600163 0
- L3 32768 0.020833 8.058253 0.600163 0 6.812101 0.502152 0
- L3 32768 0.020833 6.812101 0.502152 0 6.733693 1.499074 0
- A3 32768 0.020833 0.176777 10.114627 1.177068 0 0.000000 360.000000
- A3 32768 0.020833 0.176777 9.832015 3.613195 0 0.000000 360.000000
- A3 32768 0.020833 0.176777 4.175765 2.456945 0 0.000000 360.000000
- A3 32768 0.020833 0.176777 3.769515 4.081945 0 0.000000 360.000000
- A3 32768 0.020833 0.176777 3.113265 5.675695 0 0.000000 360.000000
- A3 32768 0.020833 0.176777 2.269515 7.144445 0 0.000000 360.000000
- A3 32768 0.020833 0.176777 1.238265 8.456945 0 0.000000 360.000000
- A3 32768 0.020833 0.176777 9.207015 5.956945 0 0.000000 360.000000
- A3 32768 0.020833 0.176777 8.269515 8.238195 0 0.000000 360.000000
- A3 32768 0.020833 0.176777 5.550765 12.300695 0 0.000000 360.000000
- A3 32768 0.020833 0.176777 4.394515 0.863195 0 0.000000 360.000000
- A3 32768 0.020833 0.176777 7.050765 10.331945 0 0.000000 360.000000
- END
-STRUCTURE N "Walther's Cornerstone Structure Backshop 933-3227"
- F3 12632256 0.000000 4
- 0.000000 7.000000 0
- 0.000009 0.000000 0
- 5.250009 0.000007 0
- 5.250000 7.000007 0
- F3 8388608 0.000000 4
- 5.250000 7.000007 0
- 5.250000 6.875007 0
- 0.000000 6.875000 0
- 0.000000 7.000000 0
- F3 8388608 0.000000 4
- 5.250000 7.000007 0
- 5.250009 0.000007 0
- 5.125009 0.000007 0
- 5.125000 7.000007 0
- F3 8388608 0.000000 4
- 0.000009 0.000000 0
- 0.000009 0.125000 0
- 5.250009 0.125007 0
- 5.250009 0.000007 0
- F3 8388608 0.000000 4
- 0.000000 7.000000 0
- 0.000009 0.000000 0
- 0.125009 0.000000 0
- 0.125000 7.000000 0
- F3 8388608 0.000000 4
- 5.156251 6.390632 0
- 5.156250 6.890632 0
- 4.859375 6.890631 0
- 4.859376 6.390631 0
- F3 8388608 0.000000 4
- 0.125001 6.406250 0
- 0.125000 6.906250 0
- 0.500000 6.906251 0
- 0.500001 6.406251 0
- F3 8388608 0.000000 4
- 0.125008 0.656250 0
- 0.125009 0.093750 0
- 0.500009 0.093751 0
- 0.500008 0.656251 0
- F3 8388608 0.000000 4
- 5.156258 0.656257 0
- 5.156259 0.109382 0
- 4.859384 0.109381 0
- 4.859383 0.656256 0
- F3 8388608 0.000000 4
- 0.140629 3.750000 0
- 0.140630 3.265625 0
- 0.515630 3.265626 0
- 0.515629 3.750001 0
- F3 8388608 0.000000 4
- 5.171879 3.750007 0
- 5.171880 3.265632 0
- 4.875005 3.265631 0
- 4.875004 3.750006 0
- END
-STRUCTURE N "Walther's Cornerstone Structure Yard Office 933-3822"
- F3 8421504 0.000000 4
- 0.000000 0.375000 0
- 2.875000 0.375000 0
- 2.875000 2.625000 0
- 0.000000 2.625000 0
- F3 12632256 0.000000 4
- 2.750000 0.406250 0
- 2.375000 0.406250 0
- 2.375000 0.000000 0
- 2.750000 0.000000 0
- F3 12632256 0.000000 4
- 1.000000 0.359375 0
- 1.390625 0.359375 0
- 1.390625 0.000000 0
- 1.000000 0.000000 0
- L3 0 0.000000 1.000000 0.125000 0 1.375000 0.125000 0
- L3 0 0.000000 1.000000 0.250000 0 1.375000 0.250000 0
- L3 0 0.000000 1.000000 0.375000 0 1.406250 0.375000 0
- L3 0 0.000000 2.375000 0.375000 0 2.750000 0.375000 0
- L3 0 0.000000 2.375000 0.250000 0 2.734375 0.250000 0
- L3 0 0.000000 2.375000 0.125000 0 2.750000 0.125000 0
- F3 12632256 0.000000 4
- 0.250000 2.625000 0
- 1.500000 2.625000 0
- 1.500000 3.250000 0
- 0.250000 3.250000 0
- F3 12632256 0.000000 4
- 0.375000 3.250000 0
- 1.000000 3.250000 0
- 1.000000 3.484375 0
- 0.375000 3.484375 0
- F3 12632256 0.000000 4
- 0.500000 3.500000 0
- 0.843750 3.500000 0
- 0.843750 4.000000 0
- 0.500000 4.000000 0
- L3 0 0.000000 0.375000 3.250000 0 1.015625 3.250000 0
- L3 0 0.000000 0.500000 3.500000 0 0.843750 3.500000 0
- F3 8388608 0.000000 4
- 0.000000 2.625000 0
- 0.062500 2.625000 0
- 0.062500 0.375000 0
- 0.000000 0.375000 0
- F3 8388608 0.000000 4
- 0.000000 0.375000 0
- 2.859375 0.375000 0
- 2.859375 0.453125 0
- 0.000000 0.453125 0
- F3 8388608 0.000000 4
- 2.859375 0.375000 0
- 2.781250 0.375000 0
- 2.781250 2.625000 0
- 2.859375 2.625000 0
- F3 12632256 0.000000 4
- 0.250000 0.750000 0
- 0.437500 0.750000 0
- 0.437500 0.906250 0
- 0.250000 0.906250 0
- F3 12632256 0.000000 4
- 0.250000 2.312500 0
- 0.437500 2.312500 0
- 0.437500 2.125000 0
- 0.250000 2.125000 0
- F3 16777215 0.000000 4
- 1.250000 1.750000 0
- 1.500000 1.750000 0
- 1.500000 1.500000 0
- 1.250000 1.500000 0
- F3 0 0.000000 4
- 1.281250 1.703125 0
- 1.453125 1.703125 0
- 1.453125 1.562500 0
- 1.281250 1.562500 0
- G3 0 0.000000 0.078125 2.250000 1.687500 0
- END
-STRUCTURE N "Walthers Steel Water Tower B/U 933-2601"
- F3 0 0.000000 4
- 0.250000 0.000000 0
- 0.250000 0.000000 0
- 0.250000 0.000000 0
- 0.250000 0.000000 0
- F3 15395562 0.000000 9
- 0.250000 0.000000 0
- 0.250000 0.000000 0
- 1.750000 0.000000 0
- 2.000000 0.250000 0
- 2.000000 1.750000 0
- 1.750000 2.000000 0
- 0.250000 2.000000 0
- 0.000000 1.750000 0
- 0.015625 0.250000 0
- G3 8421504 0.000000 1.000000 1.000000 1.000000 0
- L3 0 0.000000 0.000000 1.000000 0 2.000000 1.000000 0
- L3 0 0.000000 1.000000 0.000000 0 1.000000 2.000000 0
- L3 0 0.000000 0.281250 1.687500 0 1.718750 0.343750 0
- L3 0 0.000000 0.328125 0.281250 0 1.656250 1.718750 0
- L3 0 0.000000 0.329669 1.758125 0 1.018693 1.033385 0
- L3 0 0.000000 0.239077 1.671997 0 0.928100 0.947257 0
- L3 0 0.000000 0.501925 1.576940 0 0.411333 1.490812 0
- L3 0 0.000000 0.588053 1.486347 0 0.497461 1.400220 0
- L3 0 0.000000 0.674181 1.395755 0 0.560940 1.288095 0
- L3 0 0.000000 0.748985 1.294397 0 0.647068 1.197503 0
- L3 0 0.000000 0.932565 1.123978 0 0.830648 1.027084 0
- L3 0 0.000000 1.018693 1.033385 0 0.928100 0.947257 0
- L3 0 0.000000 0.846437 1.214570 0 0.755844 1.128442 0
- L3 0 0.000000 0.415797 1.667532 0 0.325205 1.581404 0
- L3 0 0.000000 0.329669 1.758125 0 0.239077 1.671997 0
- END
-STRUCTURE N "Walthers Oil Column B/U 933-2601"
- F3 14803425 0.000000 4
- 0.000000 0.000000 0
- 0.500000 0.000000 0
- 0.500000 0.500000 0
- 0.000000 0.500000 0
- F3 0 0.000000 4
- 0.250000 0.281250 0
- 0.625000 0.281250 0
- 0.625000 0.218750 0
- 0.250000 0.218750 0
- END
-STRUCTURE N "Walthers Water Column B/U 933-2601"
- F3 14342874 0.000000 4
- 0.000000 0.000000 0
- 0.875000 0.000000 0
- 0.875000 0.500000 0
- 0.000000 0.500000 0
- F3 0 0.000000 4
- 0.250000 0.281250 0
- 1.000000 0.281250 0
- 1.000000 0.218750 0
- 0.250000 0.218750 0
- END
-STRUCTURE N "Walther's Trackside Interlocking Tower 933-2600A"
- F3 8421504 0.000000 4
- 0.015625 0.000000 0
- 1.265625 0.000000 0
- 1.265625 1.250000 0
- 0.015625 1.250000 0
- L3 0 0.000000 0.000000 0.000000 0 1.250000 1.250000 0
- L3 0 0.000000 1.250000 0.000000 0 0.015625 1.250000 0
- F3 12976128 0.000000 4
- 1.265625 1.250000 0
- 1.015625 1.250000 0
- 1.015625 2.000000 0
- 1.265625 2.000000 0
- F3 13369344 0.000000 4
- 1.015625 1.250000 0
- 0.015625 1.250000 0
- 0.015625 1.421875 0
- 1.015625 1.421875 0
- F3 15790320 0.000000 4
- 0.015625 0.750000 0
- 0.203125 0.750000 0
- 0.203125 0.500000 0
- 0.015625 0.500000 0
- F3 0 0.000000 4
- 0.046875 0.687500 0
- 0.140625 0.687500 0
- 0.140625 0.562500 0
- 0.046875 0.562500 0
- L3 0 0.000000 0.390625 1.250000 0 0.390625 1.437500 0
- L3 0 0.000000 1.015625 1.437500 0 1.265625 1.437500 0
- L3 0 0.000000 1.265625 1.437500 0 1.265625 1.250000 0
- L3 0 0.000000 1.265625 1.250000 0 1.015625 1.250000 0
- L3 0 0.000000 1.015625 1.250000 0 1.015625 1.437500 0
- L3 0 0.000000 1.015625 1.875000 0 1.250000 1.875000 0
- L3 0 0.000000 1.015625 1.750000 0 1.265625 1.750000 0
- L3 0 0.000000 1.015625 1.625000 0 1.265625 1.625000 0
- L3 0 0.000000 1.015625 1.500000 0 1.234375 1.500000 0
- L3 0 0.000000 0.515625 1.250000 0 0.515625 1.453125 0
- L3 0 0.000000 0.640625 1.250000 0 0.640625 1.453125 0
- L3 0 0.000000 0.765625 1.250000 0 0.765625 1.437500 0
- L3 0 0.000000 0.890625 1.250000 0 0.890625 1.453125 0
- END
-STRUCTURE N "Walther's Speeder Shed 933-2600B"
- F3 10724259 0.000000 4
- 0.000000 1.000000 0
- 1.125000 1.000000 0
- 1.125000 2.625000 0
- 0.000000 2.625000 0
- L3 0 0.000000 0.546875 1.000000 0 0.561380 2.625010 0
- F3 12632256 0.000000 4
- 0.171875 0.000000 0
- 0.921875 0.000000 0
- 0.921875 1.000000 0
- 0.171875 1.000000 0
- L3 0 0.000000 0.343750 0.000000 0 0.343750 1.000000 0
- L3 0 0.000000 0.750000 0.000000 0 0.750000 1.000000 0
- L3 0 0.000000 0.343750 0.125000 0 0.750000 0.125000 0
- L3 0 0.000000 0.328125 0.250000 0 0.750000 0.250000 0
- L3 0 0.000000 0.343750 0.375000 0 0.734375 0.375000 0
- L3 0 0.000000 0.343750 0.500000 0 0.765625 0.500000 0
- L3 0 0.000000 0.343750 0.625000 0 0.750000 0.625000 0
- L3 0 0.000000 0.343750 0.750000 0 0.750000 0.750000 0
- L3 0 0.000000 0.328125 0.875000 0 0.750000 0.875000 0
- END
-STRUCTURE N "Walther's Crossing Shanty 933-2600C"
- F3 12632256 0.000000 4
- 0.000000 0.000000 0
- 0.625000 0.000000 0
- 0.625000 0.250000 0
- 0.000000 0.250000 0
- F3 11053224 0.000000 4
- 0.000000 0.250000 0
- 0.609375 0.250000 0
- 0.609375 0.750000 0
- 0.000000 0.750000 0
- L3 0 0.000000 0.000000 0.500000 0 0.609375 0.500000 0
- G3 0 0.000000 0.031250 0.187500 0.625000 0
- F3 16776960 0.000000 4
- 0.609375 0.656250 0
- 0.875000 0.656250 0
- 0.875000 0.296875 0
- 0.609375 0.296875 0
- L3 0 0.000000 0.609375 0.671875 0 0.859375 0.671875 0
- L3 0 0.000000 0.859375 0.671875 0 0.859375 0.281250 0
- L3 0 0.000000 0.859375 0.281250 0 0.609375 0.281250 0
- L3 0 0.000000 0.609375 0.281250 0 0.609375 0.671875 0
- END
-STRUCTURE N "Walther's Speeder 933-2600D"
- F3 16776960 0.000000 4
- 0.000000 0.000000 0
- 0.500000 0.000000 0
- 0.500000 0.375000 0
- 0.000000 0.375000 0
- L3 0 0.000000 0.000000 0.000000 0 0.500000 0.000000 0
- L3 0 0.000000 0.500000 0.000000 0 0.500000 0.375000 0
- L3 0 0.000000 0.500000 0.375000 0 0.000000 0.375000 0
- L3 0 0.000000 0.000000 0.375000 0 0.000000 0.000000 0
- G3 0 0.000000 0.015625 0.031250 0.187500 0
- END
-STRUCTURE N "Walther's Cornerstone Structure Cinder Conveyor & Ash Pit 933-3816"
- F3 8421504 0.000000 4
- 0.125000 0.375000 0
- 1.000000 0.375000 0
- 1.000000 2.125000 0
- 0.125000 2.125000 0
- F3 8421504 0.000000 4
- 0.000000 1.750000 0
- 1.125000 1.750000 0
- 1.125000 1.375000 0
- 0.000000 1.375000 0
- F3 0 0.000000 4
- 0.046875 1.687500 0
- 1.062500 1.687500 0
- 1.062500 1.437500 0
- 0.046875 1.437500 0
- F3 14803425 0.000000 4
- 0.421875 0.640625 0
- 1.000000 0.640625 0
- 1.000000 1.203125 0
- 0.421875 1.203125 0
- L3 0 0.000000 0.468750 1.218750 0 0.468750 0.625000 0
- L3 0 0.000000 0.531250 1.218750 0 0.531250 0.640625 0
- L3 0 0.000000 0.593750 1.203125 0 0.593750 0.640625 0
- L3 0 0.000000 0.656250 1.218750 0 0.656250 0.609375 0
- L3 0 0.000000 0.718750 1.218750 0 0.718750 0.640625 0
- L3 0 0.000000 0.781250 1.203125 0 0.781250 0.640625 0
- L3 0 0.000000 0.843750 1.218750 0 0.843750 0.640625 0
- L3 0 0.000000 0.906250 1.218750 0 0.906250 0.640625 0
- F3 0 0.000000 4
- 0.125000 0.375000 0
- 1.000000 0.375000 0
- 1.000000 0.406250 0
- 0.125000 0.406250 0
- F3 14342874 0.000000 4
- 0.312500 0.375000 0
- 0.812500 0.375000 0
- 0.812500 0.000000 0
- 0.312500 0.000000 0
- F3 0 0.000000 4
- 0.406250 1.234375 0
- 0.125000 1.234375 0
- 0.125000 1.218750 0
- 0.406250 1.218750 0
- F3 0 0.000000 4
- 0.109375 0.406250 0
- 0.140625 0.406250 0
- 0.140625 1.234375 0
- 0.109375 1.234375 0
- F3 0 0.000000 4
- 0.984375 0.390625 0
- 0.953125 0.390625 0
- 0.953125 0.656250 0
- 0.984375 0.656250 0
- L3 0 0.000000 0.453125 0.000000 0 0.453125 0.390625 0
- L3 0 0.000000 0.640625 0.000000 0 0.640625 0.406250 0
- END
-STRUCTURE N "Walther's Cornerstone Structure Sand Drying Building 933-3813"
- F3 8421504 0.000000 4
- 0.000000 0.000000 0
- 1.812500 0.000000 0
- 1.812500 1.687500 0
- 0.000000 1.687500 0
- L3 0 0.000000 0.000000 0.843750 0 1.812500 0.843750 0
- L3 0 0.000000 0.765625 0.968750 0 1.125000 0.968750 0
- L3 0 0.000000 1.125000 0.968750 0 1.125000 0.703125 0
- L3 0 0.000000 1.125000 0.703125 0 0.765625 0.703125 0
- L3 0 0.000000 0.765625 0.703125 0 0.765625 0.968750 0
- F3 16777215 0.000000 4
- 1.250000 1.375000 0
- 1.406250 1.375000 0
- 1.406250 1.250000 0
- 1.250000 1.250000 0
- F3 0 0.000000 4
- 1.281250 1.343750 0
- 1.359375 1.343750 0
- 1.359375 1.281250 0
- 1.281250 1.281250 0
- END
-STRUCTURE N "Walther's Cornerstone Structure Sanding Storage Bin 933-3813"
- F3 8421504 0.000000 4
- 0.000000 0.000000 0
- 3.500000 0.000000 0
- 3.500000 1.687500 0
- 0.000000 1.687500 0
- F3 16777215 0.000000 4
- 0.125000 1.562500 0
- 3.406250 1.562500 0
- 3.406250 0.109375 0
- 0.125000 0.109375 0
- END
-STRUCTURE N "Walther's Cornerstone Structure Small Sanding Tower 933-3813"
- F3 15790080 0.000000 4
- 0.000000 0.375000 0
- 0.875000 0.375000 0
- 0.875000 0.687500 0
- 0.000000 0.687500 0
- G3 12632256 0.000000 0.187500 0.437500 0.562500 0
- L3 0 0.000000 0.437500 0.750000 0 0.437500 2.125000 0
- L3 0 0.000000 0.437500 0.375000 0 0.437500 0.000000 0
- END
-STRUCTURE N "Walther's Cornerstone Structure Large Sanding Tower 933-3813"
- F3 14803200 0.000000 4
- 0.000000 1.187500 0
- 0.750000 1.187500 0
- 0.750000 1.937500 0
- 0.000000 1.937500 0
- F3 12895232 0.000000 4
- 0.187500 1.375000 0
- 0.562500 1.375000 0
- 0.562500 1.750000 0
- 0.187500 1.750000 0
- G3 12632256 0.000000 0.171875 0.359375 1.578125 0
- F3 14803200 0.000000 4
- 0.296875 0.000000 0
- 0.484375 0.000000 0
- 0.484375 0.187500 0
- 0.296875 0.187500 0
- F3 14803200 0.000000 4
- 0.291800 3.073050 0
- 0.479300 3.073050 0
- 0.479300 3.260550 0
- 0.291800 3.260550 0
- F3 12632256 0.000000 4
- 0.328125 3.218750 0
- 0.437500 3.218750 0
- 0.437500 3.140625 0
- 0.328125 3.140625 0
- F3 12632256 0.000000 4
- 0.343750 0.156250 0
- 0.437500 0.156250 0
- 0.437500 0.062500 0
- 0.343750 0.062500 0
- L3 0 0.000000 0.375000 1.734375 0 0.375000 3.156250 0
- L3 0 0.000000 0.375000 1.406250 0 0.374997 0.171875 0
- END
-STRUCTURE N "Walthers Modern Roundhouse 933-3260"
- F3 12632256 0.000000 8
- 6.882222 1.844086 0
- 7.097887 0.620985 0
- 7.097887 -0.620985 0
- 6.882222 -1.844086 0
- 17.507406 -4.691095 0
- 18.056029 -1.579698 0
- 18.056029 1.579698 0
- 17.507406 4.691095 0
- L3 0 0.053333 7.097887 0.620985 0 7.097887 -0.620985 0
- L3 0 0.053333 7.097887 0.620985 0 6.882222 1.844086 0
- L3 0 0.053333 7.097887 -0.620985 0 6.882222 -1.844086 0
- L3 0 0.053333 10.750601 0.940556 0 10.750601 -0.940556 0
- L3 0 0.053333 10.750601 0.940556 0 10.423950 2.793089 0
- L3 0 0.053333 10.750601 -0.940556 0 10.423950 -2.793089 0
- L3 0 0.053333 14.403315 1.260127 0 14.403315 -1.260127 0
- L3 0 0.053333 14.403315 1.260127 0 13.965678 3.742092 0
- L3 0 0.053333 14.403315 -1.260127 0 13.965678 -3.742092 0
- L3 0 0.053333 18.056029 1.579698 0 18.056029 -1.579698 0
- L3 0 0.053333 18.056029 1.579698 0 17.507406 4.691095 0
- L3 0 0.053333 18.056029 -1.579698 0 17.507406 -4.691095 0
- L3 0 0.053333 6.882222 1.844086 0 17.507406 4.691095 0
- L3 0 0.053333 7.097887 0.620985 0 18.056029 1.579698 0
- L3 0 0.053333 7.097887 -0.620985 0 18.056029 -1.579698 0
- L3 0 0.053333 6.882222 -1.844086 0 17.507406 -4.691095 0
- A3 0 0.053333 0.203431 16.249328 2.865195 0 0.000000 360.000000
- A3 0 0.053333 0.339052 16.249328 2.865195 0 0.000000 360.000000
- A3 0 0.053333 0.203431 16.500000 0.000000 0 0.000000 360.000000
- A3 0 0.053333 0.339052 16.500000 0.000000 0 0.000000 360.000000
- A3 0 0.053333 0.203431 16.249328 -2.865195 0 0.000000 360.000000
- A3 0 0.053333 0.339052 16.249328 -2.865195 0 0.000000 360.000000
- END
-STRUCTURE N "Walthers Modern Roundhouse Add-On Stalls 933-3261"
- F3 12632256 0.000000 8
- 6.882222 1.844086 0
- 7.097887 0.620985 0
- 7.097887 -0.620985 0
- 6.882222 -1.844086 0
- 17.507406 -4.691095 0
- 18.056029 -1.579698 0
- 18.056029 1.579698 0
- 17.507406 4.691095 0
- L3 0 0.053333 7.097887 0.620985 0 7.097887 -0.620985 0
- L3 0 0.053333 7.097887 0.620985 0 6.882222 1.844086 0
- L3 0 0.053333 7.097887 -0.620985 0 6.882222 -1.844086 0
- L3 0 0.053333 10.750601 0.940556 0 10.750601 -0.940556 0
- L3 0 0.053333 10.750601 0.940556 0 10.423950 2.793089 0
- L3 0 0.053333 10.750601 -0.940556 0 10.423950 -2.793089 0
- L3 0 0.053333 14.403315 1.260127 0 14.403315 -1.260127 0
- L3 0 0.053333 14.403315 1.260127 0 13.965678 3.742092 0
- L3 0 0.053333 14.403315 -1.260127 0 13.965678 -3.742092 0
- L3 0 0.053333 18.056029 1.579698 0 18.056029 -1.579698 0
- L3 0 0.053333 18.056029 1.579698 0 17.507406 4.691095 0
- L3 0 0.053333 18.056029 -1.579698 0 17.507406 -4.691095 0
- L3 0 0.053333 6.882222 1.844086 0 17.507406 4.691095 0
- L3 0 0.053333 7.097887 0.620985 0 18.056029 1.579698 0
- L3 0 0.053333 7.097887 -0.620985 0 18.056029 -1.579698 0
- L3 0 0.053333 6.882222 -1.844086 0 17.507406 -4.691095 0
- A3 0 0.053333 0.203431 16.249328 2.865195 0 0.000000 360.000000
- A3 0 0.053333 0.339052 16.249328 2.865195 0 0.000000 360.000000
- A3 0 0.053333 0.203431 16.500000 0.000000 0 0.000000 360.000000
- A3 0 0.053333 0.339052 16.500000 0.000000 0 0.000000 360.000000
- A3 0 0.053333 0.203431 16.249328 -2.865195 0 0.000000 360.000000
- A3 0 0.053333 0.339052 16.249328 -2.865195 0 0.000000 360.000000
- END
-STRUCTURE N "Walthers Modern Roundhouse(Single Stall) 933-3260"
- F3 12632256 0.000000 4
- 7.097887 0.620985 0
- 7.097887 -0.620985 0
- 18.056029 -1.579698 0
- 18.056029 1.579698 0
- L3 0 0.053333 7.097887 0.620985 0 7.097887 -0.620985 0
- L3 0 0.053333 10.750601 0.940556 0 10.750601 -0.940556 0
- L3 0 0.053333 14.403315 1.260127 0 14.403315 -1.260127 0
- L3 0 0.053333 18.056029 1.579698 0 18.056029 -1.579698 0
- L3 0 0.053333 7.097887 0.620985 0 18.056029 1.579698 0
- L3 0 0.053333 7.097887 -0.620985 0 18.056029 -1.579698 0
- A3 0 0.053333 0.203431 16.500000 0.000000 0 0.000000 360.000000
- A3 0 0.053333 0.339052 16.500000 0.000000 0 0.000000 360.000000
- END
-TURNOUT N "Walthers Modern Roundhouse(Single Stall /w Track) 933-3260"
- P "Normal" 1
- E 5.187500 0.000000 270.000000
- S 0 0 5.187500 0.00000 18.000000 0.000000
- F3 12632256 0.000000 4
- 7.097887 0.620985 0
- 7.097887 -0.620985 0
- 18.056029 -1.579698 0
- 18.056029 1.579698 0
- L3 0 0.053333 7.097887 0.620985 0 7.097887 -0.620985 0
- L3 0 0.053333 10.750601 0.940556 0 10.750601 -0.940556 0
- L3 0 0.053333 14.403315 1.260127 0 14.403315 -1.260127 0
- L3 0 0.053333 18.056029 1.579698 0 18.056029 -1.579698 0
- L3 0 0.053333 7.097887 0.620985 0 18.056029 1.579698 0
- L3 0 0.053333 7.097887 -0.620985 0 18.056029 -1.579698 0
- A3 0 0.053333 0.203431 16.500000 0.000000 0 0.000000 360.000000
- A3 0 0.053333 0.339052 16.500000 0.000000 0 0.000000 360.000000
- END
-STRUCTURE N "Walther's Cornerstone Structures Machine Shop 933-3264"
- F3 12632256 0.000000 4
- 3.015625 0.000000 0
- 5.187500 0.000000 0
- 5.187500 2.125000 0
- 3.015625 2.125000 0
- F3 8388608 0.000000 4
- 3.015625 2.125000 0
- 5.187500 2.125000 0
- 5.187500 2.062500 0
- 3.015625 2.062500 0
- F3 8388608 0.000000 4
- 5.187500 0.000000 0
- 5.125000 0.000000 0
- 5.125000 2.093750 0
- 5.187500 2.093750 0
- F3 8388608 0.000000 4
- 3.015625 0.000000 0
- 5.171875 0.000000 0
- 5.171875 0.062500 0
- 3.015625 0.062500 0
- G3 8388608 0.000000 0.345168 4.125000 2.500000 0
- G3 0 0.000000 0.250000 4.125000 2.500000 0
- F3 8388608 0.000000 4
- 3.015625 1.000000 0
- 4.015625 1.000000 0
- 4.015625 0.937500 0
- 3.015625 0.937500 0
- F3 8388608 0.000000 4
- 4.015625 0.062500 0
- 3.953125 0.062500 0
- 3.953125 1.000000 0
- 4.015625 1.000000 0
- F3 12632256 0.000000 4
- 0.015625 0.015625 0
- 3.015625 0.015625 0
- 3.015625 8.140625 0
- 0.015625 8.140625 0
- F3 8388608 0.000000 4
- 3.031250 0.046875 0
- 2.953125 0.046875 0
- 2.953125 8.140625 0
- 3.031250 8.140625 0
- F3 8388608 0.000000 4
- 0.015625 8.140625 0
- 0.093750 8.140625 0
- 0.093750 0.015625 0
- 0.015625 0.015625 0
- G3 0 0.000000 0.187500 2.015625 6.015625 0
- F3 8388608 0.000000 4
- 0.000000 8.125000 0
- 3.000000 8.125000 0
- 3.000000 8.062500 0
- 0.000000 8.062500 0
- F3 8388608 0.000000 4
- 0.031250 0.000000 0
- 3.031250 0.000000 0
- 3.031250 0.062500 0
- 0.031250 0.062500 0
- G3 0 0.000000 0.187500 2.031250 3.000000 0
- G3 0 0.000000 0.187500 2.031250 4.500000 0
- G3 0 0.000000 0.187500 2.031250 1.500000 0
- END
-STRUCTURE N "Wahther's Cornerstone Structures Machine Shop Engine Room 933-3264A"
- F3 12632256 0.000000 4
- 0.000000 0.000000 0
- 3.000000 0.000000 0
- 3.000000 6.000000 0
- 0.000000 6.000000 0
- F3 8388608 0.000000 4
- 0.000000 6.000000 0
- 2.953125 6.000000 0
- 2.953125 5.937500 0
- 0.000000 5.937500 0
- F3 8388608 0.000000 4
- 3.000000 6.000000 0
- 2.937500 6.000000 0
- 2.937500 0.000000 0
- 3.000000 0.000000 0
- F3 8388608 0.000000 4
- 0.000000 0.000000 0
- 2.968750 0.000000 0
- 2.968750 0.062500 0
- 0.000000 0.062500 0
- F3 8388608 0.000000 4
- 0.000000 0.000000 0
- 0.062500 0.000000 0
- 0.062500 6.000000 0
- 0.000000 6.000000 0
- G3 0 0.000000 0.187500 1.500000 3.000000 0
- G3 0 0.000000 0.187500 1.500000 5.000000 0
- G3 0 0.000000 0.187500 1.500000 1.000000 0
- END
-
-
-
-SUBCONTENTS Walthers Cornerstone N Structures - Turn Tables
-TURNOUT N "Walthers Modern 130' Turn Table 933-2613"
- P "1" 1 2 3
- P "2" 4 5 6
- P "3" 7 8 9
- P "4" 10 11 12
- P "5" 13 14 15
- P "6" 16 17 18
- P "7" 19 20 21
- P "8" 22 23 24
- P "9" 25 26 27
- P "10" 28 29 30
- P "11" 31 32 33
- P "12" 34 35 36
- P "13" 37 38 39
- P "14" 40 41 42
- P "15" 43 44 45
- P "16" 46 47 48
- P "17" 49 50 51
- P "18" 52 53 54
- E 0.000000 0.000000 180.000000
- #E 0.000000 5.187500 0.000000
- E 0.900800 5.108690 10.000000
- E 1.774229 4.874655 20.000000
- E 2.593750 4.492507 30.000000
- E 3.334461 3.973856 40.000000
- E 3.973856 3.334461 50.000000
- E 4.492507 2.593750 60.000000
- E 4.874655 1.774229 70.000000
- E 5.108690 0.900800 80.000000
- E 5.187500 0.000000 90.000000
- E 5.108690 -0.900800 100.000000
- E 4.874655 -1.774229 110.000000
- E 4.492507 -2.593750 120.000000
- E 3.973856 -3.334461 130.000000
- E 3.334461 -3.973856 140.000000
- E 2.593750 -4.492507 150.000000
- E 1.774229 -4.874655 160.000000
- E 0.900800 -5.108690 170.000000
- #E 0.000000 -5.187500 180.000000
- E -0.900800 -5.108690 190.000000
- E -1.774229 -4.874655 200.000000
- E -2.593750 -4.492507 210.000000
- E -3.334461 -3.973856 220.000000
- E -3.973856 -3.334461 230.000000
- E -4.492507 -2.593750 240.000000
- E -4.874655 -1.774229 250.000000
- E -5.108690 -0.900800 260.000000
- E -5.187500 0.000000 270.000000
- E -5.108690 0.900800 280.000000
- E -4.874655 1.774229 290.000000
- E -4.492507 2.593750 300.000000
- E -3.973856 3.334461 310.000000
- E -3.334461 3.973856 320.000000
- E -2.593750 4.492507 330.000000
- E -1.774229 4.874655 340.000000
- E -0.900800 5.108690 350.000000
-#0/180
- S 16777215 0.000000 0.000000 5.187500 0.000000 4.968750
- S 16777215 0.000000 0.000000 4.968750 0.000000 -4.968750
- S 16777215 0.000000 0.000000 -4.968750 0.000000 -5.187500
-#10/190
- S 0 0.000000 0.900800 5.108690 0.862814 4.893264
- S 16777215 0.000000 0.862814 4.893264 -0.862814 -4.893264
- S 0 0.000000 -0.862814 -4.893264 -0.900800 -5.108690
-#20/200
- S 0 0.000000 1.774229 4.874655 1.699413 4.669098
- S 16777215 0.000000 1.699413 4.669098 -1.699413 -4.669098
- S 0 0.000000 -1.699413 -4.669098 -1.774229 -4.874655
-#30/210
- S 0 0.000000 2.593750 4.492507 2.484375 4.303064
- S 16777215 0.000000 2.484375 4.303064 -2.484375 -4.303064
- S 0 0.000000 -2.484375 -4.303064 -2.593750 -4.492507
-#40/220
- S 0 0.000000 3.334461 3.973856 3.193851 3.806283
- S 16777215 0.000000 3.193851 3.806283 -3.193851 -3.806283
- S 0 0.000000 -3.193851 -3.806283 -3.334461 -3.973856
-#50/230
- S 0 0.000000 3.973856 3.334461 3.806283 3.193851
- S 16777215 0.000000 3.806283 3.193851 -3.806283 -3.193851
- S 0 0.000000 -3.806283 -3.193851 -3.973856 -3.334461
-#60/240
- S 0 0.000000 4.492507 2.593750 4.303064 2.484375
- S 16777215 0.000000 4.303064 2.484375 -4.303064 -2.484375
- S 0 0.000000 -4.303064 -2.484375 -4.492507 -2.593750
-#70/250
- S 0 0.000000 4.874655 1.774229 4.669098 1.699413
- S 16777215 0.000000 4.669098 1.699413 -4.669098 -1.699413
- S 0 0.000000 -4.669098 -1.699413 -4.874655 -1.774229
-#80/260
- S 0 0.000000 5.108690 0.900800 4.893264 0.862814
- S 16777215 0.000000 4.893264 0.862814 -4.893264 -0.862814
- S 0 0.000000 -4.893264 -0.862814 -5.108690 -0.900800
-#90/270
- S 0 0.000000 5.187500 0.000000 4.968750 0.000000
- S 16777215 0.000000 4.968750 0.000000 -4.968750 0.000000
- S 0 0.000000 -4.968750 0.000000 -5.187500 0.000000
-#100/280
- S 0 0.000000 5.108690 -0.900800 4.893264 -0.862814
- S 16777215 0.000000 4.893264 -0.862814 -4.893264 0.862814
- S 0 0.000000 -4.893264 0.862814 -5.108690 0.900800
-#110/290
- S 0 0.000000 4.874655 -1.774229 4.669098 -1.699413
- S 16777215 0.000000 4.669098 -1.699413 -4.669098 1.699413
- S 0 0.000000 -4.669098 1.699413 -4.874655 1.774229
-#120/300
- S 0 0.000000 4.492507 -2.593750 4.303064 -2.484375
- S 16777215 0.000000 4.303064 -2.484375 -4.303064 2.484375
- S 0 0.000000 -4.303064 2.484375 -4.492507 2.593750
-#130/310
- S 0 0.000000 3.973856 -3.334461 3.806283 -3.193851
- S 16777215 0.000000 3.806283 -3.193851 -3.806283 3.193851
- S 0 0.000000 -3.806283 3.193851 -3.973856 3.334461
-#140/320
- S 0 0.000000 3.334461 -3.973856 3.193851 -3.806283
- S 16777215 0.000000 3.193851 -3.806283 -3.193851 3.806283
- S 0 0.000000 -3.193851 3.806283 -3.334461 3.973856
-#150/330
- S 0 0.000000 2.593750 -4.492507 2.484375 -4.303064
- S 16777215 0.000000 2.484375 -4.303064 -2.484375 4.303064
- S 0 0.000000 -2.484375 4.303064 -2.593750 4.492507
-#160/340
- S 0 0.000000 1.774229 -4.874655 1.699413 -4.669098
- S 16777215 0.000000 1.699413 -4.669098 -1.699413 4.669098
- S 0 0.000000 -1.699413 4.669098 -1.774229 4.874655
-#170/350
- S 0 0.000000 0.900800 -5.108690 0.862814 -4.893264
- S 16777215 0.000000 0.862814 -4.893264 -0.862814 4.893264
- S 0 0.000000 -0.862814 4.893264 -0.900800 5.108690
-
- A 0 0.031250 5.187500 0.000000 0.000000 0.000000 360.000000
- A 0 0.031250 4.968750 0.000000 0.000000 0.000000 360.000000
- G3 0 0.000000 0.5 0.000000 0.000000 0
- A 0 0.000000 4.218750 0.000000 0.000000 0.000000 360.000000
- A 0 0.020000 4.771875 0.000000 0.000000 0.000000 360.000000
- A 0 0.020000 4.321875 0.000000 0.000000 0.000000 360.000000
- END
-
-TURNOUT N "Walthers Manual 120' 10d index Turn Table 933-3203"
-# TT Designed w/ 9.00" bridge, 9.576" OD, 10 degree spacing
- P "1" 1 2 3
- P "2" 4 5 6
- P "3" 7 8 9
- P "4" 10 11 12
- P "5" 13 14 15
- P "6" 16 17 18
- P "7" 19 20 21
- P "8" 22 23 24
- P "9" 25 26 27
- P "10" 28 29 30
- P "11" 31 32 33
- P "12" 34 35 36
- P "13" 37 38 39
- P "14" 40 41 42
- P "15" 43 44 45
- P "16" 46 47 48
- P "17" 49 50 51
- P "18" 52 53 54
-
- E 0.000000 0.000000 180.000000
- E 0.000000 4.788462 0.000000
- E 0.831508 4.715714 10.000000
- E 1.637750 4.499682 20.000000
- E 2.394231 4.146930 30.000000
- E 3.077964 3.668175 40.000000
- E 3.668175 3.077964 50.000000
- E 4.146930 2.394231 60.000000
- E 4.499682 1.637750 70.000000
- E 4.715714 0.831508 80.000000
- E 4.788162 0.000000 90.000000
- E 4.715714 -0.831508 100.000000
- E 4.499682 -1.637750 110.000000
- E 4.146930 -2.394231 120.000000
- E 3.668175 -3.077964 130.000000
- E 3.077964 -3.668175 140.000000
- E 2.394231 -4.146930 150.000000
- E 1.637750 -4.499682 160.000000
- E 0.831508 -4.715714 170.000000
- E 0.000000 -4.788462 180.000000
- E -0.831508 -4.715714 190.000000
- E -1.637750 -4.499682 200.000000
- E -2.394231 -4.146930 210.000000
- E -3.077964 -3.668175 220.000000
- E -3.668175 -3.077964 230.000000
- E -4.146930 -2.394231 240.000000
- E -4.499682 -1.637750 250.000000
- E -4.715714 -0.831508 260.000000
- E -4.788162 0.000000 270.000000
- E -4.715714 0.831508 280.000000
- E -4.499682 1.637750 290.000000
- E -4.146930 2.394231 300.000000
- E -3.668175 3.077964 310.000000
- E -3.077964 3.668175 320.000000
- E -2.394231 4.146930 330.000000
- E -1.637750 4.499682 340.000000
- E -0.831508 4.715714 350.000000
-#Setup
-# S 16777215 0 0.000000 0.000000 0.000000 4.788462
-# S 16777215 0 0.000000 -4.788462 0.000000 4.788462
-#0/180
- S 0 0 0.000000 4.788462 0.000000 4.500000
- S 16777215 0 0.000000 4.500000 0.000000 -4.500000
- S 0 0 0.000000 -4.500000 0.000000 -4.788462
-#10/190
- S 0 0 0.831508 4.715714 0.781417 4.431635
- S 16777215 0 0.781417 4.431635 -0.781417 -4.431635
- S 0 0 -0.781417 -4.431635 -0.831508 -4.715714
-#20/200
- S 0 0 1.637750 4.499682 1.539090 4.228617
- S 16777215 0 1.539090 4.228617 -1.539090 -4.228617
- S 0 0 -1.539090 -4.228617 -1.637750 -4.499682
-#30/210
- S 0 0 2.394231 4.146930 2.250000 3.897114
- S 16777215 0 2.250000 3.897114 -2.250000 -3.897114
- S 0 0 -2.250000 -3.897114 -2.394231 -4.146930
-#40/220
- S 0 0 3.077964 3.668175 2.892545 3.447200
- S 16777215 0 2.892545 3.447200 -2.892545 -3.447200
- S 0 0 -2.892545 -3.447200 -3.077964 -3.668175
-#50/230
- S 0 0 3.668175 3.077964 3.447200 2.892545
- S 16777215 0 3.447200 2.892545 -3.447200 -2.892545
- S 0 0 -3.447200 -2.892545 -3.668175 -3.077964
-#60/240
- S 0 0 4.146930 2.394231 3.897114 2.250000
- S 16777215 0 3.897114 2.250000 -3.897114 -2.250000
- S 0 0 -3.897114 -2.250000 -4.146930 -2.394231
-#70/250
- S 0 0 4.499682 1.637750 4.228617 1.539090
- S 16777215 0 4.228617 1.539090 -4.228617 -1.539090
- S 0 0 -4.228617 -1.539090 -4.499682 -1.637750
-#80/260
- S 0 0 4.715714 0.831508 4.431635 0.781417
- S 16777215 0 4.431635 0.781417 -4.431635 -0.781417
- S 0 0 -4.431635 -0.781417 -4.715714 -0.831508
-#90/270
- S 0 0 4.788462 0.000000 4.500000 0.000000
- S 16777215 0 4.500000 0.000000 -4.500000 0.000000
- S 0 0 -4.500000 0.000000 -4.788462 0.000000
-#100/280
- S 0 0 4.715714 -0.831508 4.431635 -0.781417
- S 16777215 0 4.431635 -0.781417 -4.431635 0.781417
- S 0 0 -4.431635 0.781417 -4.715714 0.831508
-#110/290
- S 0 0 4.499682 -1.637750 4.228617 -1.539090
- S 16777215 0 4.228617 -1.539090 -4.228617 1.539090
- S 0 0 -4.228617 1.539090 -4.499682 1.637750
-#120/300
- S 0 0 4.146930 -2.394231 3.897114 -2.250000
- S 16777215 0 3.897114 -2.250000 -3.897114 2.250000
- S 0 0 -3.8971144 2.250000 -4.146930 2.394231
-#130/310
- S 0 0 3.668175 -3.077964 3.447200 -2.892545
- S 16777215 0 3.447200 -2.892545 -3.447200 2.892545
- S 0 0 -3.447200 2.892545 -3.668175 3.077964
-#140/320
- S 0 0 3.077964 -3.668175 2.892545 -3.447200
- S 16777215 0 2.892545 -3.447200 -2.892545 3.447200
- S 0 0 -2.892545 3.447200 -3.077964 3.668175
-#150/330
- S 0 0 2.394231 -4.146930 2.250000 -3.897114
- S 16777215 0 2.250000 -3.897114 -2.250000 3.897114
- S 0 0 -2.250000 3.897114 -2.394231 4.146930
-#160/340
- S 0 0 1.637750 -4.499682 1.539090 -4.228617
- S 16777215 0 1.539090 -4.228617 -1.539090 4.228617
- S 0 0 -1.539090 4.228617 -1.637750 4.499682
-#170/350
- S 0 0 0.831508 -4.715714 0.781417 -4.431635
- S 16777215 0 0.781417 -4.431635 -0.781417 4.431635
- S 0 0 -0.781417 4.431635 -0.831508 4.715714
-
- A 0 0.000000 4.788462 0.000000 0.000000 0.000000 360.000000
- A 0 0.000000 4.500000 0.000000 0.000000 0.000000 360.000000
- A 0 0.000000 3.894231 0.000000 0.000000 0.000000 360.000000
- G 0 0.000000 0.500000 0.000000 0.000000 0.000000 360.000000
- A 0 0.020000 4.404808 0.000000 0.000000 0.000000 360.000000
- A 0 0.020000 3.989423 0.000000 0.000000 0.000000 360.000000
- END
-
-
-
-SUBCONTENTS Walthers Cornerstone N Structures - Dairy Facilities
-STRUCTURE N "Walthers Cornerstone Structures Sterling Consolidated Dairy Bottling Plant 933-3298"
- D 0.000000 0.000000
- F3 0 0.000000 4
- 15.000000 2.625000 0
- 15.000000 2.625000 0
- 15.000000 2.625000 0
- 15.000000 2.625000 0
- F3 12632256 0.000000 4
- 15.000000 2.640625 0
- 16.359375 2.640625 0
- 16.359375 0.125000 0
- 15.000000 0.125000 0
- F3 0 0.000000 4
- 12.500000 2.750000 0
- 12.500000 2.750000 0
- 12.500000 2.750000 0
- 12.500000 2.750000 0
- F3 12632256 0.000000 4
- 0.000000 0.000000 0
- 2.500000 0.000000 0
- 2.500000 5.750000 0
- 0.000000 5.750000 0
- F3 32768 0.000000 4
- 0.000000 5.750000 0
- 0.500000 5.750000 0
- 0.500000 0.031250 0
- 0.000000 0.031250 0
- F3 8388608 0.000000 4
- 0.500000 0.000000 0
- 0.625000 0.000000 0
- 0.625000 5.750000 0
- 0.500000 5.750000 0
- F3 8388608 0.000000 4
- 0.562500 5.750000 0
- 2.468750 5.750000 0
- 2.468750 5.625000 0
- 0.562500 5.625000 0
- F3 0 0.000000 4
- 12.437500 5.750000 0
- 12.437500 5.750000 0
- 12.437500 5.750000 0
- 12.437500 5.750000 0
- F3 8388608 0.000000 4
- 2.500000 5.750000 0
- 2.375000 5.750000 0
- 2.375000 2.750000 0
- 2.500000 2.750000 0
- F3 8388608 0.000000 4
- 12.500000 2.750000 0
- 2.375000 2.750000 0
- 2.375000 2.625000 0
- 12.500000 2.625000 0
- F3 8388608 0.000000 4
- 12.500000 5.750000 0
- 14.984375 5.750000 0
- 14.984375 5.625000 0
- 12.500000 5.625000 0
- F3 8388608 0.000000 4
- 16.500000 0.000000 0
- 4.000000 0.000000 0
- 4.000000 0.125000 0
- 16.500000 0.125000 0
- F3 8388608 0.000000 4
- 3.984375 0.000000 0
- 0.609375 0.000000 0
- 0.609375 0.125000 0
- 3.984375 0.125000 0
- F3 0 0.000000 4
- 15.000000 5.765625 0
- 15.000000 5.765625 0
- 15.000000 5.765625 0
- 15.000000 5.765625 0
- F3 8388608 0.000000 4
- 15.000000 5.750000 0
- 14.875000 5.750000 0
- 14.875000 2.765625 0
- 15.000000 2.765625 0
- F3 8388608 0.000000 4
- 16.500000 2.765625 0
- 14.875000 2.765625 0
- 14.875000 2.625000 0
- 16.500000 2.625000 0
- F3 8388608 0.000000 4
- 16.500000 2.765625 0
- 16.375000 2.765625 0
- 16.375000 0.140625 0
- 16.500000 0.140625 0
- F3 8388608 0.000000 4
- 12.500000 5.750000 0
- 12.625000 5.750000 0
- 12.625000 0.140625 0
- 12.500000 0.140625 0
- F3 11316396 0.000000 4
- 12.625000 5.625000 0
- 14.843750 5.625000 0
- 14.843750 0.156250 0
- 12.625000 0.156250 0
- G3 8421504 0.000000 0.718920 13.765625 4.546875 0
- G3 15790320 0.000000 0.594572 13.781250 4.546875 0
- L3 0 0.000000 13.750000 5.125000 0 13.750000 3.937500 0
- L3 0 0.000000 13.171875 4.531250 0 14.375000 4.531250 0
- L3 0 0.000000 13.359375 4.125000 0 14.187500 4.968750 0
- L3 0 0.000000 13.328125 4.937500 0 14.171875 4.109375 0
- F3 8388608 0.000000 4
- 13.000000 3.281250 0
- 13.250000 3.281250 0
- 13.250000 3.531250 0
- 13.000000 3.531250 0
- F3 0 0.000000 4
- 13.046875 3.484375 0
- 13.218750 3.484375 0
- 13.218750 3.312500 0
- 13.046875 3.312500 0
- L3 0 0.000000 13.750000 5.625000 0 13.750000 5.265625 0
- L3 0 0.000000 13.750000 3.812500 0 13.750000 0.125000 0
- F3 8388608 0.000000 4
- 14.875000 2.625000 0
- 15.000000 2.625000 0
- 15.000000 0.125000 0
- 14.875000 0.125000 0
- L3 0 0.000000 12.625000 0.375000 0 14.875000 0.375000 0
- L3 0 0.000000 12.609375 0.625000 0 14.875000 0.625000 0
- L3 0 0.000000 12.625000 0.875000 0 14.859375 0.875000 0
- L3 0 0.000000 12.625000 1.125000 0 14.875000 1.125000 0
- L3 0 0.000000 12.625000 1.375000 0 14.875000 1.375000 0
- L3 0 0.000000 12.625000 1.625000 0 12.625000 1.625000 0
- L3 0 0.000000 12.625000 1.625000 0 14.875000 1.625000 0
- F3 12632256 0.000000 4
- 2.484375 2.625000 0
- 12.500000 2.625000 0
- 12.500000 0.125000 0
- 2.484375 0.125000 0
- L3 0 0.000000 9.500000 5.656250 0 9.500000 5.656250 0
- F3 4210752 0.000000 4
- 11.750000 1.875000 0
- 11.312500 1.875000 0
- 11.312500 0.906250 0
- 11.750000 0.906250 0
- F3 4210752 0.000000 4
- 4.531250 1.875000 0
- 6.062500 1.875000 0
- 6.062500 1.031250 0
- 4.531250 1.031250 0
- G3 4210752 0.000000 0.159344 11.968750 2.250000 0
- G3 4210752 0.000000 0.251946 3.250000 1.281250 0
- F3 4210752 0.000000 4
- 7.750000 2.250000 0
- 8.250000 2.250000 0
- 8.250000 1.812500 0
- 7.750000 1.812500 0
- F3 4210752 0.000000 4
- 7.750000 0.750000 0
- 8.250000 0.750000 0
- 8.250000 0.343750 0
- 7.750000 0.343750 0
- F3 4210752 0.000000 4
- 1.187500 1.375000 0
- 1.562500 1.375000 0
- 1.562500 1.000000 0
- 1.187500 1.000000 0
- F3 4473924 0.000000 4
- 1.125000 4.750000 0
- 1.812500 4.750000 0
- 1.812500 4.156250 0
- 1.125000 4.156250 0
- L3 0 0.000000 17.937500 7.000000 0 17.937500 7.000000 0
- L3 0 0.000000 12.609375 1.875000 0 14.859375 1.875000 0
- L3 0 0.000000 12.609375 2.156250 0 14.843750 2.156250 0
- L3 0 0.000000 12.609375 2.406250 0 14.859375 2.406250 0
- L3 0 0.000000 12.593750 2.640625 0 14.843750 2.640625 0
- L3 0 0.000000 12.593750 2.875000 0 14.843750 2.875000 0
- L3 0 0.000000 12.609375 3.125000 0 14.859375 3.125000 0
- L3 0 0.000000 12.593750 3.375000 0 12.984375 3.375000 0
- L3 0 0.000000 13.250000 3.375000 0 14.859375 3.375000 0
- L3 0 0.000000 12.593750 3.625000 0 14.859375 3.625000 0
- L3 0 0.000000 12.593750 3.875000 0 13.531250 3.875000 0
- L3 0 0.000000 13.984375 3.875000 0 14.859375 3.875000 0
- L3 0 0.000000 12.609375 4.125000 0 13.171875 4.125000 0
- L3 0 0.000000 14.328125 4.125000 0 14.875000 4.125000 0
- L3 0 0.000000 12.593750 4.375000 0 13.062500 4.375000 0
- L3 0 0.000000 14.453125 4.375000 0 14.843750 4.375000 0
- L3 0 0.000000 12.593750 4.609375 0 12.593750 4.625000 0
- L3 0 0.000000 12.609375 4.625000 0 13.031250 4.625000 0
- L3 0 0.000000 14.468750 4.625000 0 14.843750 4.625000 0
- L3 0 0.000000 12.593750 4.875000 0 13.125000 4.875000 0
- L3 0 0.000000 14.390625 4.875000 0 14.859375 4.875000 0
- L3 0 0.000000 12.593750 5.125000 0 13.328125 5.125000 0
- L3 0 0.000000 14.171875 5.125000 0 14.828125 5.125000 0
- L3 0 0.000000 12.593750 5.375000 0 14.843750 5.375000 0
- END
-STRUCTURE N "Walthers Cornerstone Structures Sterling Consolidated Dairy Power House 933-3298"
- L3 0 0.000000 0.000000 0.000000 0 2.625000 0.000000 0
- L3 0 0.000000 2.625000 0.000000 0 2.625000 2.625000 0
- L3 8388608 0.000000 2.625000 2.625000 0 0.000000 2.625000 0
- L3 8388608 0.000000 0.000000 2.625000 0 0.000000 0.000000 0
- F3 8388608 0.000000 4
- 0.000000 0.000000 0
- 2.625000 0.000000 0
- 2.625000 0.125000 0
- 0.000000 0.125000 0
- F3 8388608 0.000000 4
- 0.000000 0.000000 0
- 0.125000 0.000000 0
- 0.125000 2.625000 0
- 0.000000 2.625000 0
- F3 8388608 0.000000 4
- 0.000000 2.625000 0
- 2.625000 2.625000 0
- 2.625000 2.500000 0
- 0.000000 2.500000 0
- F3 8388608 0.000000 4
- 2.625000 2.625000 0
- 2.500000 2.625000 0
- 2.500000 0.000000 0
- 2.625000 0.000000 0
- F3 12632256 0.000000 4
- 0.125000 2.500000 0
- 2.500000 2.500000 0
- 2.500000 0.125000 0
- 0.125000 0.125000 0
- L3 0 0.000000 1.265625 2.500000 0 1.265625 2.500000 0
- L3 0 0.000000 1.250000 2.500000 0 1.250000 0.125000 0
- L3 0 0.000000 0.109375 2.250000 0 2.500000 2.250000 0
- L3 0 0.000000 0.109375 2.000000 0 2.500000 2.000000 0
- L3 0 0.000000 0.109375 1.750000 0 2.500000 1.750000 0
- L3 0 0.000000 0.125000 1.500000 0 2.500000 1.500000 0
- L3 0 0.000000 0.125000 1.250000 0 2.500000 1.250000 0
- L3 0 0.000000 0.125000 1.000000 0 2.500000 1.000000 0
- L3 0 0.000000 0.125000 0.750000 0 2.500000 0.750000 0
- L3 0 0.000000 0.125000 0.500000 0 2.500000 0.484375 0
- L3 0 0.000000 0.125000 0.250000 0 2.500000 0.250000 0
- F3 0 0.000000 4
- 0.812500 1.437500 0
- 1.015625 1.437500 0
- 1.015625 1.296875 0
- 0.812500 1.296875 0
- F3 0 0.000000 4
- 1.500000 1.421875 0
- 1.718750 1.421875 0
- 1.718750 1.281250 0
- 1.500000 1.281250 0
- END
-STRUCTURE N "Walthers Cornerstone Structures Sterling Consolidated Dairy Smoke Stack 933-3298"
- G3 8388608 0.000000 0.375325 0.375325 0.375325 0
- G3 0 0.000000 0.281250 0.375325 0.375325 0
- END
-STRUCTURE N "Walthers Cornerstone Structures Sterling Consolidated Dairy Office/Freight House 933-3298"
- F3 8388608 0.000000 4
- 0.093750 0.125000 0
- 8.500000 0.125000 0
- 8.500000 0.000000 0
- 0.093750 0.000000 0
- F3 8388608 0.000000 4
- 0.000000 0.000000 0
- 0.109375 0.000000 0
- 0.109375 3.750000 0
- 0.000000 3.750000 0
- F3 8388608 0.000000 4
- 8.500000 0.000000 0
- 8.359375 0.000000 0
- 8.359375 3.750000 0
- 8.500000 3.750000 0
- F3 8388608 0.000000 4
- 0.000000 3.750000 0
- 8.484375 3.750000 0
- 8.484375 3.625000 0
- 0.000000 3.625000 0
- F3 12632256 0.000000 4
- 0.109375 3.625000 0
- 8.343750 3.625000 0
- 8.343750 0.140625 0
- 0.109375 0.140625 0
- F3 8388608 0.000000 4
- 2.500000 3.625000 0
- 2.625000 3.625000 0
- 2.625000 0.000000 0
- 2.500000 0.000000 0
- L3 0 0.000000 0.000000 1.875000 0 2.531250 1.875000 0
- F3 7039851 0.000000 4
- 0.687500 3.125000 0
- 0.906250 3.125000 0
- 0.906250 2.875000 0
- 0.687500 2.875000 0
- G3 7105644 0.000000 0.132583 0.625000 1.031250 0
- L3 0 0.000000 0.250000 3.625000 0 0.250000 0.125000 0
- L3 0 0.000000 0.500000 3.625000 0 0.484375 0.140625 0
- L3 0 0.000000 0.750000 3.625000 0 0.750000 3.125000 0
- L3 0 0.000000 0.750000 2.875000 0 0.750000 0.125000 0
- L3 0 0.000000 1.000000 3.625000 0 1.000000 0.125000 0
- L3 0 0.000000 1.250000 3.625000 0 1.250000 0.125000 0
- L3 0 0.000000 1.500000 3.625000 0 1.500000 0.156250 0
- L3 0 0.000000 1.750000 3.625000 0 1.750000 0.125000 0
- L3 0 0.000000 2.000000 3.625000 0 2.000000 0.125000 0
- L3 0 0.000000 2.250000 3.625000 0 2.250000 0.140625 0
- F3 7368816 0.000000 4
- 5.343750 2.125000 0
- 5.718750 2.125000 0
- 5.718750 1.750000 0
- 5.343750 1.750000 0
- G3 7631988 0.000000 0.172584 3.500000 3.000000 0
- G3 7039851 0.000000 0.187500 3.500000 0.750000 0
- G3 6776679 0.000000 0.188150 7.500000 0.750000 0
- G3 0 0.000000 0.187500 7.500000 3.000000 0
- END
-STRUCTURE N "Walthers Cornerstone Structures Sterling Consolidated Dairy Store 933-3298"
- F3 16776960 0.000000 4
- 0.000000 0.000000 0
- 0.125000 0.000000 0
- 0.125000 2.750000 0
- 0.000000 2.750000 0
- F3 16776960 0.000000 4
- 0.000000 0.000000 0
- 1.875000 0.000000 0
- 1.875000 0.125000 0
- 0.000000 0.125000 0
- F3 16776960 0.000000 4
- 0.000000 2.750000 0
- 1.875000 2.750000 0
- 1.875000 2.625000 0
- 0.000000 2.625000 0
- F3 16776960 0.000000 4
- 1.875000 0.000000 0
- 1.750000 0.000000 0
- 1.750000 2.750000 0
- 1.875000 2.750000 0
- F3 15000804 0.000000 4
- 0.125000 2.625000 0
- 1.734375 2.625000 0
- 1.734375 0.125000 0
- 0.125000 0.125000 0
- F3 0 0.000000 4
- 0.250000 2.250000 0
- 0.421875 2.250000 0
- 0.421875 2.078125 0
- 0.250000 2.078125 0
- END
-
-
-
-SUBCONTENTS Walthers Cornerstone N Structures - Passenger Facilities
-STRUCTURE N "Walthers Santa Fe Depot circa 1908 933-3803"
- F3 16379605 0.000000 4
- 0.000000 3.875000 0
- 6.750000 3.875000 0
- 6.750000 0.000000 0
- 0.000000 0.000000 0
- L3 0 0.000000 0.000000 0.000000 0 6.750000 0.000000 0
- L3 0 0.000000 6.750000 0.000000 0 6.750000 3.875000 0
- L3 0 0.000000 6.750000 3.875000 0 0.000000 3.875000 0
- L3 0 0.000000 0.375000 0.375000 0 6.375000 0.375000 0
- L3 0 0.000000 6.375000 0.375000 0 6.375000 3.500000 0
- L3 0 0.000000 6.375000 3.500000 0 0.375000 3.500000 0
- L3 0 0.000000 0.375000 3.500000 0 0.375000 0.375000 0
- L3 0 0.000000 0.359375 1.937500 0 6.359375 1.937500 0
- L3 0 0.000000 6.359375 2.625000 0 6.234375 2.625000 0
- L3 0 0.000000 6.234375 2.625000 0 6.234375 1.375000 0
- L3 0 0.000000 6.234375 1.375000 0 6.359375 1.375000 0
- L3 0 0.000000 6.359375 1.375000 0 6.359375 2.625000 0
- L3 0 0.000000 0.500000 2.625000 0 0.500000 1.250000 0
- L3 0 0.000000 0.500000 1.250000 0 0.375000 1.250000 0
- L3 0 0.000000 0.375000 1.250000 0 0.375000 2.750000 0
- L3 0 0.000000 0.375000 2.625000 0 0.484375 2.625000 0
- L3 0 0.000000 2.125000 0.375000 0 4.125000 0.375000 0
- L3 0 0.000000 4.125000 0.375000 0 4.125000 0.500000 0
- L3 0 0.000000 4.125000 0.500000 0 2.125000 0.500000 0
- L3 0 0.000000 2.125000 0.500000 0 2.125000 0.375000 0
- L3 0 0.000000 2.125000 3.500000 0 4.125000 3.500000 0
- L3 0 0.000000 4.125000 3.500000 0 4.125000 3.375000 0
- L3 0 0.000000 4.125000 3.375000 0 2.125000 3.375000 0
- L3 0 0.000000 2.125000 3.375000 0 2.125000 3.500000 0
- L3 0 0.000000 5.500000 2.390625 0 5.781250 2.390625 0
- L3 0 0.000000 5.781250 2.390625 0 5.781250 2.156250 0
- L3 0 0.000000 5.781250 2.156250 0 5.500000 2.156250 0
- L3 0 0.000000 5.500000 2.156250 0 5.500000 2.390625 0
- L3 0 0.000000 0.921875 2.390625 0 1.203125 2.390625 0
- L3 0 0.000000 1.203125 2.390625 0 1.203125 2.140625 0
- L3 0 0.000000 1.203125 2.140625 0 0.921875 2.140625 0
- L3 0 0.000000 0.921875 2.140625 0 0.921875 2.390625 0
- L3 0 0.000000 0.015625 3.859375 0 0.015625 0.015625 0
- END
-STRUCTURE N "Walther's Cornerstone Structures Butterfly-Style Station Platform Shelter 933-3258"
- F3 12632256 0.000000 4
- 0.000000 0.000000 0
- 6.125000 0.000000 0
- 6.125000 1.250000 0
- 0.000000 1.250000 0
- END
-STRUCTURE N "Walthers Union Station (Cornerstone Series) 3257"
- F3 14211288 0.000000 4
- 0.000000 6.000000 0
- 16.000000 6.000000 0
- 16.000000 0.000000 0
- 0.000000 0.000000 0
- L3 0 0.000000 0.000000 0.003094 0 16.000000 0.003094 0
- L3 0 0.000000 16.000000 0.003094 0 16.000000 6.003094 0
- L3 0 0.000000 16.000000 6.003094 0 0.000000 6.003094 0
- L3 0 0.000000 0.000000 6.003094 0 0.000000 0.003094 0
- L3 0 0.000000 0.000000 0.503094 0 4.500000 0.503094 0
- L3 0 0.000000 4.500000 0.503094 0 4.500000 5.565594 0
- L3 0 0.000000 4.500000 5.565594 0 0.000000 5.565594 0
- L3 0 0.000000 0.000000 5.565594 0 0.000000 0.503094 0
- L3 0 0.000000 16.000000 0.003094 0 11.437500 0.003094 0
- L3 0 0.000000 16.000000 5.346844 0 16.000000 0.003094 0
- L3 0 0.000000 16.000000 0.503094 0 11.500000 0.503094 0
- L3 0 0.000000 11.500000 0.503094 0 11.500000 5.565594 0
- L3 0 0.000000 11.500000 5.565594 0 16.000000 5.565594 0
- L3 0 0.000000 16.000000 5.565594 0 16.000000 0.503094 0
- L3 0 0.000000 4.468750 5.565594 0 4.468750 6.003094 0
- L3 0 0.000000 11.500000 5.565594 0 11.500000 6.003094 0
- L3 0 0.000000 11.500000 0.503094 0 11.500000 0.003094 0
- L3 0 0.000000 4.500000 0.503094 0 4.500000 0.003094 0
- A3 0 0.000000 0.159344 8.000000 0.159344 0 0.000000 360.000000
- A3 0 0.000000 0.156250 10.500000 0.190594 0 0.000000 360.000000
- A3 0 0.000000 0.156250 9.250000 0.159344 0 0.000000 360.000000
- A3 0 0.000000 0.159344 5.500000 0.159344 0 0.000000 360.000000
- A3 0 0.000000 0.159344 6.750000 0.159344 0 0.000000 360.000000
- L3 0 0.000000 0.125000 5.378094 0 4.343750 5.378094 0
- L3 0 0.000000 4.343750 5.378094 0 4.343750 0.659344 0
- L3 0 0.000000 4.343750 0.659344 0 0.125000 0.659344 0
- L3 0 0.000000 0.125000 0.659344 0 0.125000 5.378094 0
- L3 0 0.000000 11.687500 5.378094 0 15.843750 5.378094 0
- L3 0 0.000000 15.843750 5.378094 0 15.843750 0.690594 0
- L3 0 0.000000 15.843750 0.690594 0 11.687500 0.690594 0
- L3 0 0.000000 11.687500 0.690594 0 11.687500 5.378094 0
- L3 0 0.000000 4.625000 5.815594 0 11.375000 5.815594 0
- L3 0 0.000000 11.375000 5.815594 0 11.375000 0.503094 0
- L3 0 0.000000 11.375000 0.503094 0 4.625000 0.503094 0
- L3 0 0.000000 4.625000 0.503094 0 4.625000 5.815594 0
- L3 0 0.000000 7.500000 0.503094 0 8.500000 0.503094 0
- L3 0 0.000000 8.500000 0.503094 0 8.500000 0.690594 0
- L3 0 0.000000 8.500000 0.690594 0 7.500000 0.690594 0
- L3 0 0.000000 7.500000 0.690594 0 7.500000 0.503094 0
- END
-
-
-
-SUBCONTENTS Walthers Cornerstone N Structures - Trackside Industries
-STRUCTURE N "Walther's Icing Platform 292-3061"
- F3 13816530 0.000000 4
- 0.000000 0.015625 0
- 10.000000 0.015625 0
- 10.000000 1.453125 0
- 0.000000 1.453125 0
- F3 8404992 0.000000 4
- 0.000000 1.453125 0
- 0.046875 1.453125 0
- 0.046875 0.031250 0
- 0.000000 0.031250 0
- F3 8404992 0.000000 4
- 0.000000 1.453125 0
- 10.000000 1.453125 0
- 10.000000 1.406250 0
- 0.000000 1.406250 0
- F3 8404992 0.000000 4
- 0.000000 0.015625 0
- 10.000000 0.015625 0
- 10.000000 0.062500 0
- 0.000000 0.062500 0
- F3 8404992 0.000000 4
- 10.000000 0.890625 0
- 11.859375 0.890625 0
- 11.859375 0.515625 0
- 10.000000 0.515625 0
- F3 8404992 0.000000 4
- 10.796875 0.500000 0
- 10.750000 0.500000 0
- 10.750000 0.000000 0
- 10.796875 0.000000 0
- F3 8404992 0.000000 4
- 10.796875 1.406250 0
- 10.750000 1.406250 0
- 10.750000 0.875000 0
- 10.796875 0.875000 0
- L3 0 0.000000 10.125000 0.906250 0 10.125000 0.500000 0
- L3 12632256 0.000000 10.250000 0.906250 0 10.250000 0.515625 0
- L3 0 0.000000 10.375000 0.890625 0 10.375000 0.515625 0
- L3 0 0.000000 10.500000 0.906250 0 10.500000 0.531250 0
- L3 0 0.000000 10.625000 0.906250 0 10.625000 0.531250 0
- L3 0 0.000000 10.750000 0.890625 0 10.750000 0.531250 0
- L3 0 0.000000 10.875000 0.890625 0 10.875000 0.515625 0
- L3 0 0.000000 11.000000 0.890625 0 11.000000 0.500000 0
- L3 0 0.000000 11.125000 0.906250 0 11.125000 0.531250 0
- L3 0 0.000000 11.250000 0.906250 0 11.250000 0.500000 0
- L3 0 0.000000 11.375000 0.906250 0 11.375000 0.531250 0
- L3 0 0.000000 11.500000 0.890625 0 11.500000 0.515625 0
- L3 0 0.000000 11.625000 0.890625 0 11.625000 0.531250 0
- L3 0 0.000000 11.750000 0.906250 0 11.750000 0.515625 0
- F3 13816530 0.000000 4
- 9.984375 0.078125 0
- 10.750000 0.078125 0
- 10.750000 1.406250 0
- 9.984375 1.406250 0
- F3 8404992 0.000000 4
- 9.968750 1.453125 0
- 10.781250 1.453125 0
- 10.781250 1.406250 0
- 9.968750 1.406250 0
- F3 8404992 0.000000 4
- 10.000000 0.015625 0
- 10.750000 0.015625 0
- 10.750000 0.062500 0
- 10.000000 0.062500 0
- END
-STRUCTURE N "Walther's Icing Platform Add-On 292-3062"
- F3 13816530 0.000000 4
- 0.000000 0.015625 0
- 10.000000 0.015625 0
- 10.000000 1.453125 0
- 0.000000 1.453125 0
- F3 8404992 0.000000 4
- 0.000000 1.453125 0
- 0.046875 1.453125 0
- 0.046875 0.031250 0
- 0.000000 0.031250 0
- F3 8404992 0.000000 4
- 0.000000 1.453125 0
- 10.000000 1.453125 0
- 10.000000 1.406250 0
- 0.000000 1.406250 0
- F3 8404992 0.000000 4
- 0.000000 0.015625 0
- 10.000000 0.015625 0
- 10.000000 0.062500 0
- 0.000000 0.062500 0
- F3 13684944 0.000000 4
- 10.796875 0.500000 0
- 10.750000 0.500000 0
- 10.750000 0.000000 0
- 10.796875 0.000000 0
- F3 13684944 0.000000 4
- 10.796875 1.406250 0
- 10.750000 1.406250 0
- 10.750000 0.875000 0
- 10.796875 0.875000 0
- F3 13816530 0.000000 4
- 9.984375 0.078125 0
- 10.750000 0.078125 0
- 10.750000 1.406250 0
- 9.984375 1.406250 0
- F3 8404992 0.000000 4
- 9.968750 1.453125 0
- 10.781250 1.453125 0
- 10.781250 1.406250 0
- 9.968750 1.406250 0
- F3 8404992 0.000000 4
- 10.000000 0.015625 0
- 10.750000 0.015625 0
- 10.750000 0.062500 0
- 10.000000 0.062500 0
- F3 13816530 0.000000 4
- 10.796875 0.890625 0
- 10.750000 0.890625 0
- 10.750000 0.500000 0
- 10.796875 0.500000 0
- END
-STRUCTURE N "Walther's Ice House 292-526"
- F3 8421504 0.000000 4
- 2.000000 0.984375 0
- 7.000000 0.984375 0
- 7.000000 3.984375 0
- 2.000000 3.984375 0
- F3 8421504 0.000000 4
- 0.000000 2.984375 0
- 2.000000 2.984375 0
- 2.000000 1.984375 0
- 0.000000 1.984375 0
- L3 0 0.000000 0.000000 2.484375 0 7.015625 2.484375 0
- L3 0 0.000000 2.000000 2.984375 0 2.000000 1.984375 0
- F3 8421504 0.000000 4
- 7.000000 3.734375 0
- 9.000000 3.734375 0
- 9.000000 1.234375 0
- 7.000000 1.234375 0
- L3 0 0.000000 7.000000 3.734375 0 7.000000 1.234375 0
- L3 0 0.000000 7.000000 2.484375 0 9.000000 2.484375 0
- F3 14737632 0.000000 4
- 7.000000 1.234375 0
- 9.000000 1.234375 0
- 9.000000 0.984375 0
- 7.000000 0.984375 0
- F3 15132390 0.000000 4
- 7.000000 3.734375 0
- 9.000000 3.734375 0
- 9.000000 3.984375 0
- 7.000000 3.984375 0
- F3 8421504 0.000000 4
- 9.000000 3.734375 0
- 10.000000 3.734375 0
- 10.000000 1.250000 0
- 9.000000 1.250000 0
- L3 0 0.000000 9.000000 1.234375 0 9.000000 3.734375 0
- F3 8421504 0.000000 4
- 9.000000 0.484375 0
- 8.250000 0.484375 0
- 8.250000 1.234375 0
- 9.000000 1.234375 0
- L3 0 0.000000 8.250000 1.234375 0 9.000000 1.234375 0
- F3 8421504 0.000000 4
- 9.000000 1.250000 0
- 10.000000 1.250000 0
- 10.000000 0.000000 0
- 9.000000 0.000000 0
- L3 0 0.000000 9.000000 1.234375 0 10.000000 1.234375 0
- L3 0 0.000000 9.000000 1.312500 0 9.000000 0.484375 0
- G3 15790320 0.000000 0.281250 9.500000 0.859375 0
- G3 0 0.000000 0.188150 9.500000 0.859375 0
- END
-STRUCTURE N "Walther's Icing Platform 933-3245B"
- F3 8421504 0.000000 4
- 0.000000 0.000000 0
- 9.250000 0.000000 0
- 9.250000 0.875000 0
- 0.000000 0.875000 0
- L3 0 0.000000 0.000000 0.437500 0 9.250000 0.437500 0
- F3 13882323 0.000000 4
- 9.250000 0.562500 0
- 9.875000 0.562500 0
- 9.875000 0.312500 0
- 9.250000 0.312500 0
- L3 0 0.000000 9.375000 0.562500 0 9.375000 0.312500 0
- L3 0 0.000000 9.500000 0.562500 0 9.500000 0.312500 0
- L3 0 0.000000 9.625000 0.562500 0 9.625000 0.328125 0
- L3 0 0.000000 9.750000 0.562500 0 9.750000 0.312500 0
- END
-STRUCTURE N "Walther's Ice House 933-3245A"
- F3 8421504 0.000000 4
- 0.000000 0.000000 0
- 6.500000 0.000000 0
- 6.500000 2.875000 0
- 0.000000 2.875000 0
- L3 0 0.000000 0.000000 1.437500 0 6.500000 1.437500 0
- L3 0 0.000000 1.500000 1.437500 0 1.500000 0.000000 0
- L3 0 0.000000 5.000000 1.437500 0 5.000000 0.000000 0
- L3 0 0.000000 1.250000 1.000000 0 1.250000 0.000000 0
- L3 0 0.000000 1.750000 1.000000 0 1.750000 0.000000 0
- L3 0 0.000000 4.750000 1.000000 0 4.750000 0.000000 0
- L3 0 0.000000 5.250000 1.000000 0 5.250000 0.000000 0
- L3 0 0.000000 1.500000 1.437500 0 1.250000 1.000000 0
- L3 0 0.000000 1.500000 1.437500 0 1.750000 1.000000 0
- L3 0 0.000000 5.000000 1.437500 0 4.750000 1.000000 0
- L3 0 0.000000 5.000000 1.437500 0 5.250000 1.000000 0
- L3 0 0.000000 0.500000 1.625000 0 0.843750 1.625000 0
- L3 0 0.000000 0.843750 1.625000 0 0.843750 1.250000 0
- L3 0 0.000000 0.843750 1.250000 0 0.500000 1.250000 0
- L3 0 0.000000 0.500000 1.250000 0 0.500000 1.625000 0
- L3 0 0.000000 3.062500 1.250000 0 3.437500 1.250000 0
- L3 0 0.000000 3.437500 1.250000 0 3.437500 1.625000 0
- L3 0 0.000000 3.437500 1.625000 0 3.062500 1.625000 0
- L3 0 0.000000 3.062500 1.625000 0 3.062500 1.250000 0
- L3 0 0.000000 6.000000 1.250000 0 5.625000 1.250000 0
- L3 0 0.000000 5.625000 1.250000 0 5.625000 1.625000 0
- L3 0 0.000000 5.625000 1.625000 0 6.000000 1.625000 0
- L3 0 0.000000 6.000000 1.625000 0 6.000000 1.250000 0
- END
-STRUCTURE N "Walthers Interstate Fuel - Loading Rack 933-32000a"
- L 0 0 0.750000 0.000000 3.750000 0.000000
- L 0 0 3.750000 0.000000 3.750000 3.125000
- L 0 0 3.750000 3.125000 0.750000 3.125000
- L 0 0 3.687500 0.062500 1.687500 0.062500
- L 0 0 1.687500 0.062500 1.687500 0.812500
- L 0 0 1.687500 0.812500 3.687500 0.812500
- L 0 0 3.687500 0.812500 3.687500 0.062500
- L 0 0 3.687500 3.062500 1.687500 3.062500
- L 0 0 1.687500 3.062500 1.687500 2.312500
- L 0 0 1.687500 2.312500 3.687500 2.312500
- L 0 0 3.687500 2.312500 3.687500 3.062500
- L 0 0 3.687500 1.187500 1.687500 1.187500
- L 0 0 1.687500 1.187500 1.687500 1.937500
- L 0 0 1.687500 1.937500 3.687500 1.937500
- L 0 0 3.687500 1.937500 3.687500 1.187500
- A 0 0 0.088388 3.000000 2.687500 0.000000 360.000000
- A 0 0 0.088388 3.000000 1.562500 0.000000 360.000000
- A 0 0 0.088388 3.000000 0.437500 0.000000 360.000000
- L 0 0 0.750000 2.875000 0.000000 2.875000
- L 0 0 0.000000 2.875000 0.000000 0.250000
- L 0 0 0.000000 0.250000 0.750000 0.250000
- L 0 0 1.500000 2.187500 0.437500 2.187500
- L 0 0 0.437500 2.187500 0.437500 0.937500
- L 0 0 0.437500 0.937500 1.500000 0.937500
- L 0 0 1.500000 0.937500 1.500000 2.187500
- L 0 0 0.750000 3.125000 0.750000 2.187500
- L 0 0 0.750000 0.000000 0.750000 0.937500
- END
-STRUCTURE N "Walthers Interstate Fuel - Office 933-3200b"
- L 0 0 0.000000 3.000000 2.000000 3.000000
- L 0 0 2.000000 3.000000 2.000000 0.500000
- L 0 0 2.000000 0.500000 0.000000 0.500000
- L 0 0 0.000000 0.500000 0.000000 3.000000
- L 0 0 2.000000 2.250000 2.500000 2.250000
- L 0 0 2.500000 2.250000 2.500000 0.000000
- L 0 0 2.500000 0.000000 0.375000 0.000000
- L 0 0 0.375000 0.000000 0.375000 0.500000
- A 0 0 0.088388 1.000000 2.375000 0.000000 360.000000
- A 0 0 0.088388 1.000000 1.125000 0.000000 360.000000
- END
-STRUCTURE N "Walthers Interstate Fuel - Shed 933-3200c"
- L 0 0 0.000000 0.000000 1.000000 0.000000
- L 0 0 1.000000 0.000000 1.000000 0.625000
- L 0 0 1.000000 0.625000 0.000000 0.625000
- L 0 0 0.000000 0.625000 0.000000 0.000000
- L 0 0 0.000000 0.312500 1.000000 0.312500
- END
-STRUCTURE N "Walthers Interstate Fuel - Tanks 933-3200d"
- L 0 0 1.000000 2.062500 1.000000 1.125000
- L 0 0 0.062500 0.000000 0.937500 0.000000
- L 0 0 0.000000 0.062500 0.062500 0.000000
- L 0 0 1.000000 0.062500 0.937500 0.000000
- L 0 0 1.000000 0.062500 1.000000 1.000000
- L 0 0 0.000000 1.000000 0.000000 0.062500
- L 0 0 0.000000 2.062500 0.000000 1.125000
- L 0 0 0.000000 1.125000 0.062500 1.062500
- L 0 0 0.062500 1.062500 0.000000 1.000000
- L 0 0 1.000000 1.000000 0.937500 1.062500
- L 0 0 0.937500 1.062500 1.000000 1.125000
- L 0 0 0.062500 2.125000 0.937500 2.125000
- L 0 0 0.937500 2.125000 1.000000 2.062500
- L 0 0 0.062500 2.125000 0.000000 2.062500
- A 0 0 0.455007 0.500000 0.500000 0.000000 360.000000
- A 0 0 0.437500 0.500000 1.625000 0.000000 360.000000
- END
-STRUCTURE N "Walthers Water St Freight Terminal 933-3201"
- L 0 0 0.500000 0.000000 11.000000 0.000000
- L 0 0 11.000000 0.000000 11.000000 0.500000
- L 0 0 11.000000 0.500000 10.000000 0.500000
- L 0 0 9.500000 0.000000 9.500000 3.500000
- L 0 0 9.500000 3.500000 4.000000 3.500000
- L 0 0 4.000000 3.500000 4.000000 0.000000
- L 0 0 4.000000 1.750000 9.500000 1.750000
- L 0 0 4.000000 3.250000 0.500000 3.250000
- L 0 0 4.000000 0.500000 0.500000 0.500000
- L 0 0 0.500000 2.125000 -0.062500 2.125000
- L 0 0 0.000000 2.125000 0.000000 1.625000
- L 0 0 0.000000 1.625000 0.500000 1.625000
- L 0 0 0.500000 1.625000 0.500000 0.000000
- L 0 0 0.500000 3.250000 0.500000 2.125000
- L 0 0 9.500000 2.125000 10.000000 2.125000
- L 0 0 10.000000 2.125000 10.000000 0.500000
- END
-STRUCTURE N "Walthers Mi-Jack Crane (Intermodal) 3222"
- F3 16776960 0.000000 4
- 0.000000 0.000000 0
- 4.000000 0.000000 0
- 4.000000 0.250000 0
- 0.000000 0.250000 0
- F3 0 0.000000 4
- 0.000000 3.000000 0
- 0.000000 3.000000 0
- 0.000000 3.000000 0
- 0.000000 3.000000 0
- F3 16776960 0.000000 4
- 0.000000 3.000000 0
- 4.000000 3.000000 0
- 4.000000 3.250000 0
- 0.000000 3.250000 0
- F3 16776960 0.000000 4
- 2.500000 3.000000 0
- 2.750000 3.000000 0
- 2.750000 0.281250 0
- 2.500000 0.281250 0
- L3 0 0.000000 0.250000 3.000000 0 0.375000 3.000000 0
- L3 0 0.000000 0.375000 0.281250 0 0.250000 0.281250 0
- L3 0 0.000000 0.000000 3.250000 0 4.000000 3.250000 0
- L3 0 0.000000 4.000000 3.250000 0 4.000000 3.000000 0
- L3 0 0.000000 4.000000 3.000000 0 0.000000 3.000000 0
- L3 0 0.000000 0.000000 3.000000 0 0.000000 3.250000 0
- L3 0 0.000000 0.000000 0.250000 0 3.968750 0.250000 0
- L3 0 0.000000 3.968750 0.250000 0 3.968750 0.000000 0
- L3 0 0.000000 3.968750 0.000000 0 0.000000 0.000000 0
- L3 0 0.000000 0.000000 0.000000 0 0.000000 0.250000 0
- L3 0 0.000000 2.500000 3.000000 0 2.750000 3.000000 0
- L3 0 0.000000 2.750000 3.000000 0 2.750000 0.250000 0
- L3 0 0.000000 2.750000 0.250000 0 2.500000 0.250000 0
- L3 0 0.000000 2.500000 0.250000 0 2.500000 3.000000 0
- Z 0 0.265623 3.000000 90.000000 0 18.000000 "xxxxxxxxxxxxxxxxxxxxxx"
- L3 0 0.000000 0.406250 3.000000 0 0.406250 0.265625 0
- L3 0 0.000000 0.250000 3.000000 0 0.250000 0.250000 0
- END
-STRUCTURE N "Walthers Santa Fe Freight House circa 1908 933-3804"
- F3 16379605 0.000000 4
- 0.000000 3.750000 0
- 6.750000 3.750000 0
- 6.750000 0.000000 0
- 0.000000 0.000000 0
- L3 0 0.000000 0.000000 0.000000 0 6.750000 0.000000 0
- L3 0 0.000000 6.750000 0.000000 0 6.750000 3.750000 0
- L3 0 0.000000 6.750000 3.750000 0 0.000000 3.750000 0
- L3 0 0.000000 0.000000 3.750000 0 0.000000 0.000000 0
- L3 0 0.000000 0.375000 0.375000 0 6.375000 0.375000 0
- L3 0 0.000000 6.375000 0.375000 0 6.375000 3.375000 0
- L3 0 0.000000 6.375000 3.375000 0 0.375000 3.375000 0
- L3 0 0.000000 0.375000 3.375000 0 0.375000 0.375000 0
- L3 0 0.000000 0.375000 0.750000 0 0.500000 0.750000 0
- L3 0 0.000000 0.484375 0.500000 0 0.625000 0.500000 0
- L3 0 0.000000 0.609375 0.500000 0 0.609375 0.375000 0
- L3 0 0.000000 0.625000 3.265625 0 0.484375 3.265625 0
- L3 0 0.000000 0.484375 3.265625 0 0.484375 3.156250 0
- L3 0 0.000000 0.484375 3.156250 0 0.390625 3.156250 0
- L3 0 0.000000 6.000000 3.359375 0 6.000000 3.250000 0
- L3 0 0.000000 6.000000 3.250000 0 6.250000 3.250000 0
- L3 0 0.000000 6.375000 3.125000 0 6.250000 3.125000 0
- L3 0 0.000000 6.250000 3.125000 0 6.250000 3.250000 0
- L3 0 0.000000 6.000000 0.375000 0 6.000000 0.500000 0
- L3 0 0.000000 6.000000 0.500000 0 6.250000 0.500000 0
- L3 0 0.000000 6.250000 0.500000 0 6.250000 0.750000 0
- L3 0 0.000000 6.375000 2.500000 0 6.234375 2.500000 0
- L3 0 0.000000 6.234375 2.500000 0 6.234375 1.500000 0
- L3 0 0.000000 6.234375 1.500000 0 6.375000 1.500000 0
- L3 0 0.000000 6.375000 1.500000 0 6.375000 2.500000 0
- L3 0 0.000000 2.250000 3.375000 0 4.250000 3.375000 0
- L3 0 0.000000 4.250000 3.375000 0 4.250000 3.250000 0
- L3 0 0.000000 4.250000 3.250000 0 2.250000 3.250000 0
- L3 0 0.000000 2.250000 3.250000 0 2.250000 3.375000 0
- L3 0 0.000000 2.250000 0.375000 0 4.250000 0.375000 0
- L3 0 0.000000 4.250000 0.375000 0 4.250000 0.500000 0
- L3 0 0.000000 4.250000 0.500000 0 2.250000 0.500000 0
- L3 0 0.000000 2.250000 0.500000 0 2.250000 0.375000 0
- END
-STRUCTURE N "Walthers Cornerstone Structures 2 Story factory/w Loading Addition 933-3297"
- F3 8388608 0.000000 4
- 0.000000 5.250000 0
- 7.750000 5.250000 0
- 7.750000 5.000000 0
- 0.000000 5.000000 0
- F3 8388608 0.000000 4
- 7.750000 5.000000 0
- 7.500000 5.000000 0
- 7.500000 3.250000 0
- 7.750000 3.250000 0
- F3 8388608 0.000000 4
- 0.000000 5.000000 0
- 0.250000 5.000000 0
- 0.250000 0.000000 0
- 0.000000 0.000000 0
- F3 8388608 0.000000 4
- 0.234375 0.000000 0
- 5.250000 0.000000 0
- 5.250000 0.250000 0
- 0.234375 0.250000 0
- F3 0 0.000000 4
- 5.000000 0.234375 0
- 4.984375 0.234375 0
- 4.984375 0.250000 0
- 5.000000 0.250000 0
- F3 8388608 0.000000 4
- 5.000000 0.250000 0
- 5.250000 0.250000 0
- 5.250000 3.296875 0
- 4.984375 3.296875 0
- F3 8388608 0.000000 4
- 7.484375 3.265625 0
- 5.000000 3.265625 0
- 5.000000 3.500000 0
- 7.484375 3.500000 0
- F3 12632256 0.000000 4
- 0.250000 5.015625 0
- 4.968750 5.015625 0
- 4.968750 0.281250 0
- 0.250000 0.281250 0
- F3 12632256 0.000000 4
- 4.968750 5.000000 0
- 7.468750 5.000000 0
- 7.468750 3.531250 0
- 4.968750 3.531250 0
- F3 0 0.000000 4
- 4.984375 3.515625 0
- 4.984375 3.515625 0
- 4.984375 3.515625 0
- 4.984375 3.515625 0
- F3 8388608 0.000000 4
- 5.000000 3.515625 0
- 0.234375 3.515625 0
- 0.234375 3.250000 0
- 5.000000 3.250000 0
- L3 0 0.000000 0.218750 1.750000 0 4.968750 1.750000 0
- A3 0 0.000000 0.125000 2.500000 1.000000 0 0.000000 360.000000
- A3 0 0.000000 0.109375 1.000000 2.500000 0 0.000000 360.000000
- A3 0 0.000000 0.109375 4.000000 2.500000 0 0.000000 360.000000
- A3 0 0.000000 0.125000 5.000000 4.000000 0 0.000000 360.000000
- A3 0 0.000000 0.125000 7.000000 4.000000 0 0.000000 360.000000
- F3 8388608 0.000000 4
- 1.531250 2.937500 0
- 1.718750 2.937500 0
- 1.718750 2.750000 0
- 1.531250 2.750000 0
- L3 0 0.000000 0.500000 3.250000 0 0.500000 0.281250 0
- L3 0 0.000000 0.750000 3.250000 0 0.750000 0.250000 0
- L3 0 0.000000 1.000000 2.390625 0 1.000000 0.281250 0
- L3 0 0.000000 1.000000 3.250000 0 1.000000 2.609375 0
- L3 0 0.000000 1.250000 3.250000 0 1.250000 0.250000 0
- L3 0 0.000000 1.500000 3.250000 0 1.500000 0.250000 0
- L3 0 0.000000 2.000000 3.250000 0 2.000000 0.234375 0
- L3 0 0.000000 2.250000 3.250000 0 2.250000 0.250000 0
- L3 0 0.000000 2.500000 3.250000 0 2.500000 1.125000 0
- L3 0 0.000000 2.500000 0.859375 0 2.500000 0.265625 0
- L3 0 0.000000 1.750000 3.250000 0 1.750000 0.234375 0
- F3 0 0.000000 4
- 1.562500 2.906250 0
- 1.687500 2.906250 0
- 1.687500 2.796875 0
- 1.562500 2.796875 0
- L3 0 0.000000 2.750000 3.250000 0 2.750000 0.250000 0
- L3 0 0.000000 3.000000 3.250000 0 3.000000 0.250000 0
- L3 0 0.000000 3.250000 3.250000 0 3.250000 0.250000 0
- L3 0 0.000000 4.750000 3.250000 0 4.750000 0.250000 0
- L3 0 0.000000 4.500000 3.250000 0 4.500000 0.250000 0
- L3 0 0.000000 4.250000 3.250000 0 4.250000 0.250000 0
- L3 0 0.000000 3.500000 3.250000 0 3.500000 0.250000 0
- L3 0 0.000000 3.750000 3.250000 0 3.750000 0.250000 0
- L3 0 0.000000 4.000000 3.250000 0 4.000000 2.609375 0
- L3 0 0.000000 4.000000 2.390625 0 4.000000 0.250000 0
- END
-STRUCTURE N "Walthers Cornerstone Structures Van Dyke Farm Windmill 933-3801"
- L3 0 0.000000 0.000000 1.250000 0 0.500000 0.750000 0
- L3 0 0.000000 1.250000 1.250000 0 0.734375 0.750000 0
- L3 0 0.000000 0.000000 0.000000 0 0.500000 0.500000 0
- L3 0 0.000000 1.250000 0.000000 0 0.750000 0.500000 0
- L3 0 0.000000 0.250000 1.000000 0 1.000000 1.000000 0
- L3 0 0.000000 1.000000 1.000000 0 1.000000 0.250000 0
- L3 0 0.000000 1.000000 0.250000 0 0.250000 0.250000 0
- L3 0 0.000000 0.250000 0.250000 0 0.250000 1.000000 0
- F3 12632256 0.000000 4
- 0.500000 0.750000 0
- 0.750000 0.750000 0
- 0.750000 0.500000 0
- 0.500000 0.500000 0
- L3 0 0.000000 0.125000 1.125000 0 1.125000 1.125000 0
- L3 0 0.000000 1.125000 1.125000 0 1.125000 0.125000 0
- L3 0 0.000000 1.125000 0.125000 0 0.125000 0.125000 0
- L3 0 0.000000 0.125000 0.125000 0 0.125000 1.125000 0
- L3 0 0.000000 0.375000 0.875000 0 0.875000 0.875000 0
- L3 0 0.000000 0.875000 0.875000 0 0.875000 0.375000 0
- L3 0 0.000000 0.875000 0.375000 0 0.375000 0.375000 0
- L3 0 0.000000 0.375000 0.375000 0 0.375000 0.875000 0
- L3 0 0.000000 0.625000 0.812500 0 0.625000 0.312500 0
- F3 12632256 0.000000 4
- 0.593750 0.812500 0
- 0.656250 0.812500 0
- 0.656250 0.968750 0
- 0.593750 0.968750 0
- F3 12632256 0.000000 4
- 0.812500 0.312500 0
- 0.437500 0.312500 0
- 0.437500 0.218750 0
- 0.812500 0.218750 0
- END
-STRUCTURE N "Walthers Cornerstone Structures Walking Beam/""Horse Head"" Oil Pump 933-3248"
- L3 0 0.000000 0.000000 0.000000 0 2.750000 0.000000 0
- L3 0 0.000000 2.750000 0.000000 0 2.750000 1.000000 0
- L3 0 0.000000 2.750000 1.000000 0 0.000000 1.000000 0
- L3 0 0.000000 0.000000 1.000000 0 0.000000 0.000000 0
- F3 0 0.000000 4
- 2.718750 0.750000 0
- 2.718750 0.750000 0
- 2.718750 0.750000 0
- 2.718750 0.750000 0
- F3 0 0.000000 4
- 2.000000 0.750000 0
- 2.500000 0.750000 0
- 2.500000 0.250000 0
- 2.000000 0.250000 0
- F3 0 0.000000 4
- 0.250000 0.562500 0
- 1.734375 0.562500 0
- 1.734375 0.437500 0
- 0.250000 0.437500 0
- F3 0 0.000000 4
- 1.750000 0.750000 0
- 1.875000 0.750000 0
- 1.875000 0.250000 0
- 1.750000 0.250000 0
- F3 0 0.000000 4
- 1.875000 0.671875 0
- 1.984375 0.671875 0
- 1.984375 0.640625 0
- 1.875000 0.640625 0
- F3 0 0.000000 4
- 1.859375 0.312500 0
- 1.984375 0.312500 0
- 1.984375 0.343750 0
- 1.859375 0.343750 0
- END
-STRUCTURE N "Walther's Cornerstone Structure The Bralick Building 933-3255"
- F3 12632256 0.000000 4
- 0.000000 0.375000 0
- 6.750000 0.375000 0
- 6.750000 5.406250 0
- 0.000000 5.406250 0
- F3 12632256 0.000000 4
- 2.625000 0.000000 0
- 3.687500 0.000000 0
- 3.687500 0.375000 0
- 2.625000 0.375000 0
- F3 12632256 0.000000 4
- 7.125000 1.000000 0
- 6.750000 1.000000 0
- 6.750000 1.625000 0
- 7.125000 1.625000 0
- F3 8421504 0.000000 4
- 0.125000 5.312500 0
- 6.656250 5.312500 0
- 6.656250 0.468750 0
- 0.125000 0.468750 0
- L3 0 0.000000 2.625000 0.375000 0 3.671875 0.375000 0
- L3 0 0.000000 6.750000 1.625000 0 6.750000 1.000000 0
- F3 12632256 0.000000 4
- 2.375000 2.000000 0
- 4.000000 2.000000 0
- 4.000000 4.000000 0
- 2.375000 4.000000 0
- F3 12632256 0.000000 4
- 5.156250 4.125000 0
- 5.484375 4.125000 0
- 5.484375 3.828125 0
- 5.156250 3.828125 0
- END
-STRUCTURE N "Walther's Cornerstone Structure Shed 933-3822"
- F3 12632256 0.000000 4
- 0.000000 0.000000 0
- 4.125000 0.000000 0
- 4.125000 2.625000 0
- 0.000000 2.625000 0
- L3 0 0.000000 0.000000 1.312500 0 4.093750 1.312500 0
- F3 0 0.000000 4
- 1.937500 1.375000 0
- 2.062500 1.375000 0
- 2.062500 1.250000 0
- 1.937500 1.250000 0
- L3 0 0.000000 0.125000 2.625000 0 0.125000 0.000000 0
- L3 0 0.000000 0.250000 2.625000 0 0.234375 0.000000 0
- L3 0 0.000000 0.375000 2.625000 0 0.375000 0.000000 0
- L3 0 0.000000 0.500000 2.625000 0 0.500000 0.000000 0
- L3 0 0.000000 0.625000 2.625000 0 0.609375 0.000000 0
- L3 0 0.000000 0.750000 2.625000 0 0.734375 0.000000 0
- L3 0 0.000000 0.875000 0.000000 0 0.875000 2.625000 0
- L3 0 0.000000 1.000000 0.000000 0 1.000000 2.625000 0
- L3 0 0.000000 1.125000 0.000000 0 1.125000 2.625000 0
- L3 0 0.000000 1.250000 2.625000 0 1.250000 0.000000 0
- L3 0 0.000000 1.375000 2.625000 0 1.375000 0.000000 0
- L3 0 0.000000 1.500000 2.625000 0 1.484375 0.015625 0
- L3 0 0.000000 1.625000 2.625000 0 1.625000 0.000000 0
- L3 0 0.000000 1.750000 2.625000 0 1.750000 0.000000 0
- L3 0 0.000000 1.875000 2.625000 0 1.875000 0.000000 0
- L3 0 0.000000 2.000000 2.625000 0 2.000000 0.000000 0
- L3 0 0.000000 2.125000 2.625000 0 2.109375 0.015625 0
- L3 0 0.000000 2.250000 2.625000 0 2.234375 0.000000 0
- L3 0 0.000000 2.375000 0.000000 0 2.359375 2.625000 0
- L3 0 0.000000 2.500000 0.000000 0 2.500000 2.625000 0
- L3 0 0.000000 3.000000 0.000000 0 3.000000 2.625000 0
- L3 0 0.000000 2.750000 0.000000 0 2.750000 2.625000 0
- L3 0 0.000000 2.625000 2.625000 0 2.625000 0.000000 0
- L3 0 0.000000 2.875000 2.625000 0 2.875000 0.000000 0
- L3 0 0.000000 3.125000 2.625000 0 3.125000 0.000000 0
- L3 0 0.000000 3.250000 2.625000 0 3.250000 0.000000 0
- L3 0 0.000000 3.375000 2.625000 0 3.359375 0.000000 0
- L3 0 0.000000 3.500000 2.625000 0 3.500000 0.015625 0
- L3 0 0.000000 3.625000 2.625000 0 3.625000 0.000000 0
- L3 0 0.000000 3.750000 2.625000 0 3.734375 0.031250 0
- L3 0 0.000000 3.875000 2.625000 0 3.875000 0.000000 0
- L3 0 0.000000 4.000000 2.625000 0 4.000000 0.000000 0
- END
-STRUCTURE N "Walthers Cornerstone Structures Parkview Terrace Backgroung Bldg. (Tuscan) 933-3263"
- F3 12632256 0.000000 4
- 0.000000 0.000000 0
- 4.625000 0.000000 0
- 4.625000 1.375000 0
- 0.000000 1.375000 0
- F3 8388608 0.000000 4
- 0.000000 0.000000 0
- 0.125000 0.000000 0
- 0.125000 1.375000 0
- 0.000000 1.375000 0
- F3 8388608 0.000000 4
- 4.609375 0.000000 0
- 4.500000 0.000000 0
- 4.500000 1.375000 0
- 4.609375 1.375000 0
- END
-STRUCTURE N "Walthers Cornerstone Structures Rolling Mill 933-3250"
- F3 12632256 0.000000 4
- 0.000000 0.000000 0
- 11.375000 0.000000 0
- 11.375000 7.000000 0
- 0.000000 7.000000 0
- L3 0 0.000000 0.000000 3.500000 0 11.375000 3.500000 0
- L3 0 0.000000 0.500000 4.000000 0 10.500000 4.000000 0
- L3 0 0.000000 10.500000 4.000000 0 10.500000 3.000000 0
- L3 0 0.000000 10.500000 3.000000 0 0.500000 3.000000 0
- L3 0 0.000000 0.500000 3.000000 0 0.500000 4.000000 0
- END
-STRUCTURE N "Walthers Cornerstone Co-Op Storage Shed 933-3230"
- L3 0 0.062500 0.031250 0.031250 0 4.281250 0.031250 0
- L3 0 0.062500 4.281250 0.031250 0 4.281250 2.781250 0
- L3 0 0.062500 4.281250 2.781250 0 0.031250 2.781250 0
- L3 0 0.062500 0.031250 2.781250 0 0.031250 0.031250 0
- L3 0 0.062500 0.031250 1.406250 0 4.281250 1.406250 0
- F3 0 0.000000 4
- 2.031250 1.531250 0
- 2.281250 1.531250 0
- 2.281250 1.281250 0
- 2.031250 1.281250 0
- L3 12632256 0.000000 0.281250 2.781250 0 0.281250 1.531250 0
- L3 12632256 0.000000 0.531250 2.531250 0 0.531250 1.531250 0
- L3 12632256 0.000000 0.781250 2.781250 0 0.781250 1.531250 0
- L3 12632256 0.000000 1.031250 2.531250 0 1.031250 1.531250 0
- L3 12632256 0.000000 1.281250 2.781250 0 1.281250 1.531250 0
- L3 12632256 0.000000 1.531250 2.531250 0 1.531250 1.531250 0
- L3 12632256 0.000000 1.781250 2.781250 0 1.781250 1.531250 0
- L3 12632256 0.000000 2.031250 2.531250 0 2.031250 1.531250 0
- L3 12632256 0.000000 2.281250 2.781250 0 2.281250 1.531250 0
- L3 12632256 0.000000 2.531250 2.531250 0 2.531250 1.531250 0
- L3 12632256 0.000000 2.781250 2.781250 0 2.781250 1.531250 0
- L3 12632256 0.000000 3.031250 2.531250 0 3.031250 1.531250 0
- L3 12632256 0.000000 3.281250 1.531250 0 3.281250 2.781250 0
- L3 12632256 0.000000 3.531250 2.531250 0 3.531250 1.531250 0
- L3 12632256 0.000000 3.781250 1.531250 0 3.781250 2.781250 0
- L3 12632256 0.000000 4.031250 2.531250 0 4.031250 1.531250 0
- L3 12632256 0.000000 4.031250 1.281250 0 4.031250 0.281250 0
- L3 12632256 0.000000 3.781250 0.031250 0 3.781250 1.281250 0
- L3 12632256 0.000000 3.281250 1.281250 0 3.281250 0.031250 0
- L3 12632256 0.000000 3.531250 0.281250 0 3.531250 1.281250 0
- L3 12632256 0.000000 3.031250 1.281250 0 3.031250 0.281250 0
- L3 12632256 0.000000 2.781250 0.031250 0 2.781250 1.281250 0
- L3 12632256 0.000000 2.531250 1.281250 0 2.531250 0.281250 0
- L3 12632256 0.000000 2.281250 0.031250 0 2.281250 1.281250 0
- L3 12632256 0.000000 2.031250 1.281250 0 2.031250 0.281250 0
- L3 12632256 0.000000 1.781250 0.031250 0 1.781250 1.281250 0
- L3 12632256 0.000000 1.531250 1.281250 0 1.531250 0.281250 0
- L3 12632256 0.000000 1.281250 0.031250 0 1.281250 1.281250 0
- L3 12632256 0.000000 1.031250 1.281250 0 1.031250 0.281250 0
- L3 12632256 0.000000 0.781250 0.031250 0 0.781250 1.281250 0
- L3 12632256 0.000000 0.531250 1.281250 0 0.531250 0.281250 0
- L3 12632256 0.000000 0.281250 0.031250 0 0.281250 1.281250 0
- END
-STRUCTURE N "Walthers Cornerstone Co-op Rural Grain Elevator 933-3238"
- L3 0 0.041667 0.020833 1.020833 0 4.395833 1.020833 0
- L3 0 0.041667 4.395833 1.020833 0 4.395833 5.395833 0
- L3 0 0.041667 4.395833 5.395833 0 0.020833 5.395833 0
- L3 0 0.041667 0.020833 5.395833 0 0.020833 1.020833 0
- L3 0 0.041667 0.020833 1.020833 0 0.020833 0.020833 0
- L3 0 0.041667 0.020833 0.020833 0 4.395833 0.020833 0
- L3 0 0.041667 4.395833 0.020833 0 4.395833 1.020833 0
- L3 0 0.041667 2.208333 5.395833 0 2.208333 1.020833 0
- L3 0 0.041667 1.145833 5.395833 0 1.145833 1.020833 0
- L3 0 0.041667 3.270833 5.395833 0 3.270833 1.020833 0
- L3 12632256 0.000000 1.020833 5.145833 0 0.020833 5.145833 0
- L3 12632256 0.000000 1.020833 4.895833 0 0.020833 4.895833 0
- L3 12632256 0.000000 1.020833 4.645833 0 0.020833 4.645833 0
- L3 12632256 0.000000 1.020833 4.395833 0 0.020833 4.395833 0
- L3 12632256 0.000000 1.020833 4.145833 0 0.020833 4.145833 0
- L3 12632256 0.000000 0.020833 3.895833 0 1.145833 3.895833 0
- L3 12632256 0.000000 1.020833 3.645833 0 0.020833 3.645833 0
- L3 12632256 0.000000 0.020833 3.395833 0 1.020833 3.395833 0
- L3 12632256 0.000000 1.020833 3.145833 0 0.020833 3.145833 0
- L3 12632256 0.000000 0.020833 2.895833 0 1.020833 2.895833 0
- L3 12632256 0.000000 1.020833 2.645833 0 0.020833 2.645833 0
- L3 12632256 0.000000 0.020833 2.395833 0 1.020833 2.395833 0
- L3 12632256 0.000000 1.020833 2.145833 0 0.020833 2.145833 0
- L3 12632256 0.000000 0.145833 1.895833 0 1.020833 1.895833 0
- L3 12632256 0.000000 0.270833 1.895833 0 0.020833 1.895833 0
- L3 12632256 0.000000 0.020833 1.645833 0 1.020833 1.645833 0
- L3 12632256 0.000000 1.020833 1.395833 0 0.020833 1.395833 0
- L3 12632256 0.000000 1.020833 1.145833 0 0.020833 1.145833 0
- L3 12632256 0.000000 1.270833 5.270833 0 2.145833 5.270833 0
- L3 12632256 0.000000 2.145833 5.020833 0 1.270833 5.020833 0
- L3 12632256 0.000000 1.270833 4.770833 0 2.145833 4.770833 0
- L3 12632256 0.000000 2.145833 4.520833 0 1.270833 4.520833 0
- L3 12632256 0.000000 1.270833 4.270833 0 2.145833 4.270833 0
- L3 12632256 0.000000 2.020833 4.020833 0 1.270833 4.020833 0
- L3 12632256 0.000000 2.145833 4.020833 0 1.270833 4.020833 0
- L3 12632256 0.000000 2.145833 3.770833 0 1.270833 3.770833 0
- L3 12632256 0.000000 2.145833 3.520833 0 1.270833 3.520833 0
- L3 12632256 0.000000 2.145833 3.270833 0 1.270833 3.270833 0
- L3 12632256 0.000000 2.020833 3.020833 0 1.270833 3.020833 0
- L3 12632256 0.000000 2.145833 2.770833 0 1.270833 2.770833 0
- L3 12632256 0.000000 2.145833 2.520833 0 1.270833 2.520833 0
- L3 12632256 0.000000 1.270833 2.270833 0 2.020833 2.270833 0
- L3 12632256 0.000000 2.020833 2.020833 0 1.270833 2.020833 0
- L3 12632256 0.000000 1.270833 1.770833 0 2.145833 1.770833 0
- L3 12632256 0.000000 2.145833 1.520833 0 1.395833 1.520833 0
- L3 12632256 0.000000 2.145833 1.270833 0 1.270833 1.270833 0
- L3 12632256 0.000000 0.145833 0.895833 0 0.145833 0.145833 0
- L3 12632256 0.000000 0.395833 1.020833 0 0.395833 0.145833 0
- L3 12632256 0.000000 0.645833 0.895833 0 0.645833 0.145833 0
- L3 12632256 0.000000 0.895833 1.020833 0 0.895833 0.145833 0
- L3 12632256 0.000000 1.145833 0.895833 0 1.145833 0.145833 0
- L3 12632256 0.000000 1.395833 1.020833 0 1.395833 0.145833 0
- L3 12632256 0.000000 1.645833 0.895833 0 1.645833 0.145833 0
- L3 12632256 0.000000 1.895833 1.020833 0 1.895833 0.145833 0
- L3 12632256 0.000000 2.145833 1.020833 0 2.145833 0.145833 0
- L3 12632256 0.000000 2.395833 1.020833 0 2.395833 0.145833 0
- L3 12632256 0.000000 2.645833 0.895833 0 2.645833 0.145833 0
- L3 12632256 0.000000 2.895833 1.020833 0 2.895833 0.145833 0
- L3 12632256 0.000000 3.145833 0.895833 0 3.145833 0.145833 0
- L3 12632256 0.000000 3.395833 1.020833 0 3.395833 0.145833 0
- L3 12632256 0.000000 3.645833 0.895833 0 3.645833 0.145833 0
- L3 12632256 0.000000 3.895833 1.020833 0 3.895833 0.145833 0
- L3 12632256 0.000000 4.145833 0.895833 0 4.145833 0.145833 0
- L3 12632256 0.000000 2.270833 5.145833 0 3.145833 5.145833 0
- L3 12632256 0.000000 3.145833 4.895833 0 2.270833 4.895833 0
- L3 12632256 0.000000 2.270833 4.645833 0 3.145833 4.645833 0
- L3 12632256 0.000000 3.145833 4.395833 0 2.270833 4.395833 0
- L3 12632256 0.000000 2.270833 4.145833 0 3.145833 4.145833 0
- L3 12632256 0.000000 3.145833 3.895833 0 2.270833 3.895833 0
- L3 12632256 0.000000 2.270833 3.645833 0 3.145833 3.645833 0
- L3 12632256 0.000000 2.270833 3.395833 0 3.145833 3.395833 0
- L3 12632256 0.000000 3.145833 3.145833 0 2.270833 3.145833 0
- L3 12632256 0.000000 2.270833 2.895833 0 3.145833 2.895833 0
- L3 12632256 0.000000 3.145833 2.645833 0 2.270833 2.645833 0
- L3 12632256 0.000000 2.270833 2.395833 0 3.145833 2.395833 0
- L3 12632256 0.000000 3.145833 2.145833 0 2.270833 2.145833 0
- L3 12632256 0.000000 2.270833 1.895833 0 3.145833 1.895833 0
- L3 12632256 0.000000 3.145833 1.645833 0 2.270833 1.645833 0
- L3 12632256 0.000000 2.270833 1.395833 0 3.145833 1.395833 0
- L3 12632256 0.000000 3.145833 1.145833 0 2.270833 1.145833 0
- L3 12632256 0.000000 3.395833 5.270833 0 4.270833 5.270833 0
- L3 12632256 0.000000 4.270833 5.020833 0 3.395833 5.020833 0
- L3 12632256 0.000000 3.395833 4.770833 0 4.395833 4.770833 0
- L3 12632256 0.000000 4.270833 4.520833 0 3.395833 4.520833 0
- L3 12632256 0.000000 3.395833 4.270833 0 4.270833 4.270833 0
- L3 12632256 0.000000 4.270833 4.020833 0 3.395833 4.020833 0
- L3 12632256 0.000000 3.395833 3.770833 0 4.270833 3.770833 0
- L3 12632256 0.000000 4.270833 3.520833 0 3.395833 3.520833 0
- L3 12632256 0.000000 3.395833 3.270833 0 4.395833 3.270833 0
- L3 12632256 0.000000 4.270833 3.020833 0 3.395833 3.020833 0
- L3 12632256 0.000000 4.270833 2.770833 0 3.395833 2.770833 0
- L3 12632256 0.000000 3.395833 2.520833 0 4.270833 2.520833 0
- L3 12632256 0.000000 4.270833 2.270833 0 3.395833 2.270833 0
- L3 12632256 0.000000 3.395833 2.020833 0 4.270833 2.020833 0
- L3 12632256 0.000000 4.270833 1.770833 0 3.395833 1.770833 0
- L3 12632256 0.000000 3.395833 1.520833 0 4.270833 1.520833 0
- L3 12632256 0.000000 3.395833 1.270833 0 4.270833 1.270833 0
- END
-
-STRUCTURE N "Walthers Cornerstone GoldenFlame Fuel Co. - Office/ScaleHouse 933-3246A"
- F3 16755285 0.000000 4
- 0.031250 1.781250 0
- 2.906250 1.781250 0
- 2.906250 0.031250 0
- 0.031250 0.031250 0
- L3 0 0.062500 0.031250 0.031250 0 2.906250 0.031250 0
- L3 0 0.062500 2.906250 0.031250 0 2.906250 1.781250 0
- L3 0 0.062500 2.906250 1.781250 0 0.031250 1.781250 0
- L3 0 0.062500 0.031250 1.781250 0 0.031250 0.031250 0
- L3 0 0.062500 0.656250 0.906250 0 2.281250 0.906250 0
- L3 0 0.062500 2.906250 1.781250 0 2.281250 0.906250 0
- L3 0 0.062500 0.031250 1.781250 0 0.656250 0.906250 0
- L3 0 0.062500 0.656250 0.906250 0 0.031250 0.031250 0
- L3 0 0.062500 2.281250 0.906250 0 2.906250 0.031250 0
- END
-STRUCTURE N "Walthers Cornerstone GoldenFlame Fuel Co. - Coal Bunker 933-3246B"
- F3 12632256 0.000000 4
- 0.031250 2.156250 0
- 5.406250 2.156250 0
- 5.406250 0.031250 0
- 0.031250 0.031250 0
- L3 0 0.062500 0.031250 0.031250 0 5.406250 0.031250 0
- L3 0 0.062500 5.406250 0.031250 0 5.406250 2.156250 0
- L3 0 0.062500 5.406250 2.156250 0 0.031250 2.156250 0
- L3 0 0.062500 0.031250 2.156250 0 0.031250 0.031250 0
- L3 0 0.062500 0.031250 1.093750 0 5.406250 1.093750 0
- L3 0 0.062500 0.031250 1.906250 0 5.406250 1.906250 0
- L3 0 0.062500 0.031250 0.281250 0 5.406250 0.281250 0
- F3 12632256 0.000000 4
- 4.281250 0.031250 0
- 4.281250 0.031250 0
- 4.281250 0.031250 0
- 4.281250 0.031250 0
- END
-STRUCTURE N "Walthers Cornerstone GoldenFlame Fuel Co. - Pump House 933-3246C"
- F3 8421504 0.000000 4
- 0.031250 0.781250 0
- 1.031250 0.781250 0
- 1.031250 0.031250 0
- 0.031250 0.031250 0
- L3 0 0.062500 0.031250 0.031250 0 1.031250 0.031250 0
- L3 0 0.062500 1.031250 0.031250 0 1.031250 0.781250 0
- L3 0 0.062500 1.031250 0.781250 0 0.031250 0.781250 0
- L3 0 0.062500 0.031250 0.781250 0 0.031250 0.031250 0
- F3 8421504 0.000000 4
- 0.406250 0.281250 0
- 0.406250 0.281250 0
- 0.406250 0.281250 0
- 0.406250 0.281250 0
- END
-STRUCTURE N "Walthers Cornerstone GoldenFlame Fuel Co. - Oil Tanks 933-3246D"
- G3 12632256 0.000000 0.375000 1.250000 0.375000 0
- A3 0 0.062500 0.375000 1.250000 0.375000 0 0.000000 360.000000
- G3 12632256 0.000000 0.375000 0.375000 0.375000 0
- A3 0 0.062500 0.375000 0.375000 0.375000 0 0.000000 360.000000
- END
-STRUCTURE N "Walther's Cornerstone Structures American Hardware Supply 933-3253"
- F3 14474460 0.000000 4
- 0.265625 5.765625 0
- 1.015625 5.765625 0
- 1.015625 5.015625 0
- 0.265625 5.015625 0
- F3 14474460 0.000000 4
- 8.500000 5.750000 0
- 7.750000 5.750000 0
- 7.750000 5.000000 0
- 8.500000 5.000000 0
- F3 12632256 0.000000 4
- 1.000000 0.000000 0
- 7.500000 0.000000 0
- 7.500000 0.500000 0
- 1.000000 0.500000 0
- F3 12632256 0.000000 4
- 0.000000 1.500000 0
- 0.500000 1.500000 0
- 0.500000 2.500000 0
- 0.000000 2.500000 0
- F3 14474460 0.000000 4
- 0.500000 0.500000 0
- 8.250000 0.500000 0
- 8.250000 5.500000 0
- 0.500000 5.500000 0
- F3 8421504 0.000000 4
- 0.750000 0.750000 0
- 8.000000 0.750000 0
- 8.000000 5.250000 0
- 0.750000 5.250000 0
- F3 14474460 0.000000 4
- 5.796875 5.078125 0
- 7.781250 5.078125 0
- 7.781250 3.109375 0
- 5.796875 3.109375 0
- G3 0 0.000000 0.843750 6.796875 4.109375 0
- F3 0 0.000000 4
- 1.500000 4.031250 0
- 1.812500 4.031250 0
- 1.812500 3.765625 0
- 1.500000 3.765625 0
- END
-
diff --git a/app/lib/params/wlthho10.xtp b/app/lib/params/wlthho10.xtp
index 59fa761..5cd75a1 100644
--- a/app/lib/params/wlthho10.xtp
+++ b/app/lib/params/wlthho10.xtp
@@ -1,4 +1,4 @@
-CONTENTS Walthers/Shinohara HO-Scale Code 100
+CONTENTS Walthers/Shinohara HO Scale Code 100
TURNOUT HO "Walthers/Shinohara Code 100 #8 LH Turnout 948-105"
U "Regular Turnout" "Victor Bobier" "Walthers/Shinohara" "Code 100 #8 LH Turnout" "948-105" "Code 100 #8 RH Turnout" "948-106" 14.750000 7.180762 1.375000 14.750000
P "Normal" 1 2
diff --git a/app/lib/params/wlthho83.xtp b/app/lib/params/wlthho83.xtp
index a6fb6db..4062ee0 100644
--- a/app/lib/params/wlthho83.xtp
+++ b/app/lib/params/wlthho83.xtp
@@ -1,4 +1,4 @@
-CONTENTS Walthers/Shinohara HO-Scale Code 83
+CONTENTS Walthers/Shinohara HO Scale Code 83
SUBCONTENTS Walthers/Shinohara HO-Scale Code 83 - Turnouts
TURNOUT HO "Walthers/Shinohara Code 83 #4 LH Turnout 948-8801"
P "Normal" 1 2
@@ -268,7 +268,7 @@ TURNOUT HO "Walthers/Shinohara Code 83 #8 Left-Hand (32/36) Turnout 948-8828"
S 0 0.000000 16.601045 5.029490 17.630000 5.750000
C 0 0.000000 -35.461553 0.649647 35.461553 152.999924 27.000152
S 0 0.000000 16.748879 3.865114 18.250000 4.630000
- ENDv
+ END
TURNOUT HO "Walthers/Shinohara Code 83 #8 Right-Hand (32/36) Turnout 948-8829"
P "Normal" 1 4 5
P "Reverse" 1 2 3
diff --git a/app/lib/xtrkcad.xtq b/app/lib/xtrkcad.xtq
index f36860e..2fdb34c 100644
--- a/app/lib/xtrkcad.xtq
+++ b/app/lib/xtrkcad.xtq
@@ -53,7 +53,7 @@ SCALE HOe, 87.1, 0.3543
SCALE HOf, 87.1, 0.256
1567.8,32.66,1045.2
2090.4,38.1,1393
- 2613,43.55,1567
+ 2613,43.55,1567
SCALE P4, 76.2, 0.7413
1567.8,32.66,1045.2
2090.4,38.1,1393
@@ -97,7 +97,7 @@ SCALE On18, 48.0, 0.3543
SCALE P48, 48.0, 1.177
1536,24,960
2016,30,1200
- 2592,36,1440
+ 2592,36,1440
SCALE O(Fine), 43.5, 1.2598
1536,24,960
2016,30,1200
@@ -117,7 +117,7 @@ SCALE O, 45.0, 1.25
SCALE On14mm, 43.5, 0.551
1536,24,960
2016,30,1200
- 2592,36,1440
+ 2592,36,1440
SCALE S, 64.0, 0.874
1536,28,1024
2048,32,1280
@@ -149,7 +149,7 @@ SCALE TTn3.5, 120.0, 0.3543
SCALE TTi, 120.0, 0.177
1560,37.5,1080
2160,45,1440
- 2640,52.5,1800
+ 2640,52.5,1800
SCALE Z, 220.0, 0.256
1560,37.5,1080
2160,45,1440
@@ -177,7 +177,7 @@ SCALE Gn3, 20.0, 1.77
SCALE F, 20.32, 2.78
1536,24,960
2016,30,1200
- 2592,36,1440
+ 2592,36,1440
SCALE LEGO, 24, 1.48
1536,24,960
2016,30,1200
@@ -189,7 +189,11 @@ SCALE 8, 8, 7.5
SCALE T, 450.0, 0.126
1560,37.5,1080
2160,45,1440
- 2640,52.5,1800
+ 2640,52.5,1800
+SCALE RMC, 10.0, 5.5
+ 1560,40,1120
+ 2200,50,1500
+ 2640,60,1880
SCALE DEMO, 160.0, 0.3531
1560,40,1120
2200,50,1500
@@ -363,7 +367,7 @@ DEMO "Poly-Shapes" dmlines2.xtr
DEMO "Modifying Poly-Shapes" dmplymod.xtr
DEMO "Rotate" dmrotate.xtr
DEMO "Flip" dmflip.xtr
-DEMO "Control Panels (New)" dmctlpnl.xtr
+DEMO "Control Panels" dmctlpnl.xtr
DEMO "Notes" dmnotes.xtr
#DEMO "Text" dmtext.xtr
#DEMOGROUP Example
diff --git a/app/tools/HACKING b/app/tools/HACKING
index 779bf58..fbed100 100644
--- a/app/tools/HACKING
+++ b/app/tools/HACKING
@@ -1,10 +1,8 @@
/** \file filename.c
* This file shows the conventions used for inline documentation.
- *
- * $Header: /home/dmarkle/xtrkcad-fork-cvs/xtrkcad/app/tools/HACKING,v 1.3 2007-11-13 19:31:12 m_fischer Exp $
*/
-/* XTrkCad - Model Railroad CAD
+/* XTrackCAD - Model Railroad CAD
* Copyright (C)
*
* This program is free software; you can redistribute it and/or modify
diff --git a/app/wlib/gtklib/CMakeLists.txt b/app/wlib/gtklib/CMakeLists.txt
index bf20e91..97ab56f 100644
--- a/app/wlib/gtklib/CMakeLists.txt
+++ b/app/wlib/gtklib/CMakeLists.txt
@@ -18,6 +18,7 @@ set(sources
menu.c
message.c
notice.c
+ opendocument.c
pixbuf.c
png.c
print.c
@@ -35,29 +36,43 @@ set(sources
gtkdraw-cairo.c
)
-
# help system is OS and build specific, add appropriate source files
if(APPLE)
- set(sources
- ${sources}
- osxhelp.c)
-else()
+ if (XTRKCAD_USE_APPLEHELP)
+ set(sources
+ ${sources}
+ osxhelp.c)
+ else(XTRKCAD_USE_APPLEHELP)
+ if(XTRKCAD_USE_BROWSER)
+ set(sources
+ ${sources}
+ browserhelp.c)
+ else(XTRKCAD_USE_BROWSER)
+ PKG_CHECK_MODULES(GTK_WEBKIT "webkit-1.0" REQUIRED)
+ set(sources
+ ${sources}
+ ixhelp.c)
+ endif(XTRKCAD_USE_BROWSER)
+ endif(XTRKCAD_USE_APPLEHELP)
+else(APPLE)
if(XTRKCAD_USE_BROWSER)
set(sources
${sources}
browserhelp.c)
- else()
+ else(XTRKCAD_USE_BROWSER)
+ PKG_CHECK_MODULES(GTK_WEBKIT "webkit-1.0" REQUIRED)
set(sources
${sources}
ixhelp.c)
- endif()
-endif()
+ endif(XTRKCAD_USE_BROWSER)
+endif(APPLE)
include_directories(${XTrkCAD_BINARY_DIR})
add_library(xtrkcad-wlib ${headers} ${sources})
# GTK
+find_package (GTK2)
include_directories(${GTK_INCLUDE_DIRS})
target_link_libraries(xtrkcad-wlib ${GTK_LIBRARIES})
@@ -67,7 +82,16 @@ include_directories(${GTK_UNIX_PRINT_INCLUDE_DIRS})
target_link_libraries(xtrkcad-wlib ${GTK_UNIX_PRINT_LIBRARIES})
# add dependency to webkit if configured
-if(NOT XTRKCAD_USE_BROWSER)
- include_directories(${GTK_WEBKIT_INCLUDE_DIRS})
- target_link_libraries(xtrkcad-wlib ${GTK_WEBKIT_LIBRARIES})
-endif()
+if (APPLE)
+ if(NOT XTRKCAD_USE_APPLEHELP)
+ if(NOT XTRKCAD_USE_BROWSER)
+ include_directories(${GTK_WEBKIT_INCLUDE_DIRS})
+ target_link_libraries(xtrkcad-wlib ${GTK_WEBKIT_LIBRARIES})
+ endif()
+ endif()
+else (APPLE)
+ if(NOT XTRKCAD_USE_BROWSER)
+ include_directories(${GTK_WEBKIT_INCLUDE_DIRS})
+ target_link_libraries(xtrkcad-wlib ${GTK_WEBKIT_LIBRARIES})
+ endif()
+endif(APPLE)
diff --git a/app/wlib/gtklib/browserhelp.c b/app/wlib/gtklib/browserhelp.c
index 9351e86..aa8f5c7 100644
--- a/app/wlib/gtklib/browserhelp.c
+++ b/app/wlib/gtklib/browserhelp.c
@@ -22,12 +22,17 @@
#include <stdlib.h>
#include <assert.h>
+#include <string.h>
+
+#include "misc.h"
#include "gtkint.h"
#include "i18n.h"
#include "dynstring.h"
+#define debug 0
+
#define DEFAULTBROWSERCOMMAND "xdg-open"
#define HELPERRORTEXT "Help Error - help information can not be found.\n" \
@@ -38,7 +43,7 @@
"variable.\n Also make sure that the user has sufficient access rights to read these" \
"files."
/**
- * Create a fully qualified url froma topic
+ * Create a fully qualified url from a topic
*
* \param helpUrl OUT pointer to url, free by caller
* \param topic IN the help topic
@@ -63,36 +68,6 @@ TopicToUrl(char **helpUrl, const char *topic)
DynStringFree(&url);
}
/**
- * Extend the PATH variable inthe environment to include XTrackCAD's
- * script directory.
- *
- * \return pointer to old path
- */
-
-static char *
-ExtendPath(void)
-{
- char *path = getenv("PATH");
- DynString newPath;
- DynStringMalloc(&newPath, 16);
-
- // append XTrackCAD's directory to the path as a fallback
- DynStringCatCStrs(&newPath,
- path,
- ":",
- wGetAppLibDir(),
- NULL);
-
- setenv("PATH",
- DynStringToCStr(&newPath),
- TRUE);
-
- DynStringFree(&newPath);
-
- return (path);
-}
-
-/**
* Invoke the system's default browser to display help for <topic>. First the
* system's standard xdg-open command is attempted. If that is not available, the
* version included with the XTrackCAD installation is executed.
@@ -104,34 +79,20 @@ void wHelp(const char * topic)
{
int rc;
char *url;
- DynString commandLine;
char *currentPath;
assert(topic != NULL);
assert(strlen(topic));
- currentPath = ExtendPath();
- TopicToUrl(&url, topic);
+ if (!CheckHelpTopicExists(topic)) return;
- DynStringMalloc(&commandLine, 16);
- DynStringCatCStrs(&commandLine,
- DEFAULTBROWSERCOMMAND,
- " ",
- url,
- NULL);
+ TopicToUrl(&url, topic);
- // the command should be found via the PATH
- rc = system(DynStringToCStr(&commandLine));
+ rc = wOpenFileExternal(url);
- if (rc) {
+ if (!rc) {
wNotice(HELPERRORTEXT, _("Cancel"), NULL);
}
- // restore the PATH
- setenv("PATH",
- currentPath,
- TRUE);
-
free(url);
- DynStringFree(&commandLine);
}
diff --git a/app/wlib/gtklib/button.c b/app/wlib/gtklib/button.c
index b5fabe8..51106c8 100644
--- a/app/wlib/gtklib/button.c
+++ b/app/wlib/gtklib/button.c
@@ -94,15 +94,23 @@ void wlibSetLabel(
} else {
pixbuf = wlibPixbufFromXBM( bm );
}
+ double scaleicon;
+ wPrefGetFloat(PREFSECTION, LARGEICON, &scaleicon, 1.0);
+ if (scaleicon<1.0) scaleicon=1.0;
+ if (scaleicon>2.0) scaleicon=2.0;
+ GdkPixbuf *pixbuf2 =
+ gdk_pixbuf_scale_simple(pixbuf, gdk_pixbuf_get_width(pixbuf)*scaleicon, gdk_pixbuf_get_height(pixbuf)*scaleicon, GDK_INTERP_BILINEAR);
+ g_object_ref_sink(pixbuf);
+ g_object_unref((gpointer)pixbuf);
if (*imageG==NULL) {
- *imageG = gtk_image_new_from_pixbuf(pixbuf);
+ *imageG = gtk_image_new_from_pixbuf(pixbuf2);
gtk_container_add(GTK_CONTAINER(widget), *imageG);
gtk_widget_show(*imageG);
} else {
- gtk_image_set_from_pixbuf(GTK_IMAGE(*imageG), pixbuf);
+ gtk_image_set_from_pixbuf(GTK_IMAGE(*imageG), pixbuf2);
}
- g_object_ref_sink(pixbuf);
- g_object_unref((gpointer)pixbuf);
+ g_object_ref_sink(pixbuf2);
+ g_object_unref((gpointer)pixbuf2);
} else {
if (*labelG==NULL) {
*labelG = (GtkLabel*)gtk_label_new(wlibConvertInput(labelStr));
@@ -172,6 +180,18 @@ static void pushButt(
}
/**
+ * Called after expose event default hander - allows the button to be outlined
+ */
+static wBool_t exposeButt(
+ GtkWidget *widget,
+ GdkEventExpose *event,
+ gpointer g)
+{
+ wControl_p b = (wControl_p)g;
+ return wControlExpose(widget,event,b);
+}
+
+/**
* Create a button
*
* \param parent IN parent window
@@ -198,7 +218,10 @@ wButton_p wButtonCreate(
void * data)
{
wButton_p b;
- b = wlibAlloc(parent, B_BUTTON, x, y, labelStr, sizeof *b, data);
+ if (option&BO_ICON) //The labelStr here is a wIcon_p
+ b = wlibAlloc(parent, B_BUTTON, x, y, " ", sizeof *b, data);
+ else
+ b = wlibAlloc(parent, B_BUTTON, x, y, labelStr, sizeof *b, data);
b->option = option;
b->action = action;
wlibComputePos((wControl_p)b);
@@ -206,9 +229,12 @@ wButton_p wButtonCreate(
b->widget = gtk_toggle_button_new();
g_signal_connect(GTK_OBJECT(b->widget), "clicked",
G_CALLBACK(pushButt), b);
+ g_signal_connect_after(GTK_OBJECT(b->widget), "expose-event",
+ G_CALLBACK(exposeButt), b);
if (width > 0) {
gtk_widget_set_size_request(b->widget, width, -1);
}
+
if( labelStr ){
wButtonSetLabel(b, labelStr);
}
@@ -484,6 +510,8 @@ wChoice_p wRadioCreate(
b->valueP = valueP;
wlibComputePos((wControl_p)b);
+ ((wControl_p)b)->outline = FALSE;
+
if (option&BC_HORZ) {
b->widget = gtk_hbox_new(FALSE, 0);
} else {
@@ -506,6 +534,8 @@ wChoice_p wRadioCreate(
gtk_widget_show(butt);
g_signal_connect(GTK_OBJECT(butt), "toggled",
G_CALLBACK(pushChoice), b);
+ g_signal_connect_after(GTK_OBJECT(b->widget), "expose-event",
+ G_CALLBACK(exposeButt), b);
wlibAddHelpString(butt, helpStr);
}
@@ -586,6 +616,8 @@ wChoice_p wToggleCreate(
b->action = action;
wlibComputePos((wControl_p)b);
+ ((wControl_p)b)->outline = FALSE;
+
if (option&BC_HORZ) {
b->widget = gtk_hbox_new(FALSE, 0);
} else {
@@ -604,6 +636,8 @@ wChoice_p wToggleCreate(
gtk_widget_show(butt);
g_signal_connect(GTK_OBJECT(butt), "toggled",
G_CALLBACK(pushChoice), b);
+ g_signal_connect_after(GTK_OBJECT(b->widget), "expose-event",
+ G_CALLBACK(exposeButt), b);
wlibAddHelpString(butt, helpStr);
}
diff --git a/app/wlib/gtklib/color.c b/app/wlib/gtklib/color.c
index 64b96ef..e1689d2 100644
--- a/app/wlib/gtklib/color.c
+++ b/app/wlib/gtklib/color.c
@@ -100,7 +100,7 @@ static colorMap_t colorMap[] = {
{ 208, 208, 208 }, /* Gray */
{ 224, 224, 224 }, /* Gray */
{ 240, 240, 240 }, /* Gray */
- { 0, 0, 0 } /* BlackPixel */
+ { 255, 255, 255 } /* WhitePixel */
};
#define NUM_GRAYS (16)
@@ -125,7 +125,7 @@ wDrawColor wDrawColorGray(
if (n <= 0) {
return wDrawColorBlack;
- } else if (n > NUM_GRAYS) {
+ } else if (n >= NUM_GRAYS) {
return wDrawColorWhite;
} else {
n = (n*256)/NUM_GRAYS;
@@ -209,7 +209,7 @@ wDrawColor wDrawFindColor(
long rgb0)
{
wDrawColor cc;
- int r0, g0, b0;
+ int r0, g0, b0, r1, g1, b1;
int d0;
int i;
colorMap_t tempMapValue;
@@ -231,7 +231,10 @@ wDrawColor wDrawFindColor(
colorMap_t * cm_p;
cm_p = &g_array_index(colorMap_garray, colorMap_t, i);
- d1 = abs(r0-cm_p->red) + abs(g0-cm_p->green) + abs(b0-cm_p->blue);
+ r1 = (int)cm_p->red;
+ g1 = (int)cm_p->green;
+ b1 = (int)cm_p->blue;
+ d1 = abs(r0-r1) + abs(g0-g1) + abs(b0-b1);
if (d1 == 0) {
return i;
diff --git a/app/wlib/gtklib/control.c b/app/wlib/gtklib/control.c
index c891924..07d9210 100644
--- a/app/wlib/gtklib/control.c
+++ b/app/wlib/gtklib/control.c
@@ -35,7 +35,7 @@
#include "gtkint.h"
-#define GTKCONTROLHILITEWIDTH (3)
+#define GTKCONTROLHILITEWIDTH (4)
/**
* Cause the control <b> to be displayed or hidden.
@@ -252,6 +252,46 @@ void wControlSetFocus(
{
}
+wBool_t wControlExpose (
+ GtkWidget * widget,
+ GdkEventExpose * event,
+ wControl_p b
+ )
+{
+ GdkWindow * win = gtk_widget_get_window(b->widget);
+ cairo_t * cr = NULL;
+ if (win) {
+ cr = gdk_cairo_create(win);
+ } else return TRUE;
+
+#ifdef CURSOR_SURFACE
+ if (b && b->cursor_surface.surface && b->cursor_surface.show) {
+ cairo_set_source_surface(cr,b->cursor_surface.surface,event->area.x, event->area.y);
+ cairo_set_operator(cr,CAIRO_OPERATOR_OVER);
+ cairo_rectangle(cr,event->area.x, event->area.y,
+ event->area.width, event->area.height);
+ cairo_fill(cr);
+ }
+#endif
+
+ if (b->outline) {
+ cairo_set_source_rgb(cr, 0.23, 0.37, 0.80);
+ cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
+ cairo_set_line_width(cr, GTKCONTROLHILITEWIDTH);
+ cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT);
+ cairo_set_line_join(cr, CAIRO_LINE_JOIN_MITER);
+ cairo_rectangle(cr,event->area.x+2, event->area.y+2,
+ event->area.width-4, event->area.height-4);
+ cairo_stroke(cr);
+ }
+
+
+ cairo_destroy(cr);
+
+
+ return FALSE;
+}
+
/**
* Draw a rectangle around a control
* \param b IN the control
@@ -279,17 +319,8 @@ void wControlHilite(
return;
}
- cr = gdk_cairo_create(gtk_widget_get_window(b->parent->gtkwin));
- cairo_set_source_rgb(cr, 0.0, 0.0, 0.0);
- cairo_set_operator(cr, CAIRO_OPERATOR_XOR);
- cairo_set_line_width(cr, GTKCONTROLHILITEWIDTH);
- cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT);
- cairo_set_line_join(cr, CAIRO_LINE_JOIN_MITER);
- cairo_rectangle(cr,
- b->realX - GTKCONTROLHILITEWIDTH,
- b->realY - off,
- b->w + GTKCONTROLHILITEWIDTH,
- b->h + off + 1);
- cairo_stroke(cr);
- cairo_destroy(cr);
+ b->outline = hilite;
+
+ if (b->widget)
+ gtk_widget_queue_draw(b->widget);
}
diff --git a/app/wlib/gtklib/droplist.c b/app/wlib/gtklib/droplist.c
index 5fbdd17..69a2efd 100644
--- a/app/wlib/gtklib/droplist.c
+++ b/app/wlib/gtklib/droplist.c
@@ -235,43 +235,16 @@ wBool_t wDropListSetValues(
}
/**
- * Signal handler for the "changed"-signal in drop list's entry field.
- * Get the entered text and calls the 'action' for handling of entered
- * value.
- * *
- * \param entry IN entry field of the droplist
- * \param data IN the drop list handle
- * \return
- */
-
-static void DropListEntryEntered(
- GtkEntry * entry,
- gpointer userData)
-{
- const gchar * text;
-
- text = gtk_entry_get_text(entry);
-
- if (text && *text != '\0') {
- gchar *copyOfText = g_strdup(text);
- ((wList_p)userData)->editted = TRUE;
- ((wList_p)userData)->action(-1, copyOfText, 1, ((wList_p)userData)->data, NULL);
- g_free((gpointer)copyOfText);
- } else {
- wBeep();
- }
-}
-
-/**
- * Signal handler for the "changed"-signal in drop list. Gets the selected
- * text and determines the selected row in the tree model.
+ * Signal handler for the "changed"-signal in drop list.
+ * Gets the selected text and determines the selected row in the tree model.
+ * Or handles user entered text.
*
* \param comboBox IN the combo_box
* \param data IN the drop list handle
* \return
*/
-static int DropListSelectChild(
+static int DropListChanged(
GtkComboBox * comboBox,
gpointer data)
{
@@ -279,17 +252,14 @@ static int DropListSelectChild(
GtkTreeIter iter;
wIndex_t inx = 0;
- gchar *string;
- wListItem_p addData;
+ gchar *string = NULL;
+ wListItem_p listItemP = NULL;
if (bl->recursion) {
return 0;
}
- bl->editted = FALSE;
-
- /* Obtain currently selected item from combo box.
- * If nothing is selected, do nothing. */
+ /* Obtain currently selected item from combo box. */
if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(comboBox), &iter)) {
GtkTreeModel *model;
@@ -301,19 +271,30 @@ static int DropListSelectChild(
&iter);
inx = atoi(string);
g_free(string);
+ string = NULL;
/* Obtain string from model. */
gtk_tree_model_get(model, &iter,
LISTCOL_TEXT, &string,
- LISTCOL_DATA, (void *)&addData,
+ LISTCOL_DATA, (void *)&listItemP,
-1);
+ bl->editted = FALSE;
} else {
- return 0;
+ /* Nothing selected, user is entering text directly */
+ inx = -1;
+ GtkEntry * entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(bl->widget)));
+ if ( entry == NULL )
+ return 0;
+ const char * string1 = gtk_entry_get_text(entry);
+ if ( string1 == NULL )
+ return 0;
+ string = g_strdup(string1);
+ bl->editted = TRUE;
}
/* selection changed, store new selections and call back */
- if (bl->last != inx) {
+ if (bl->last != inx || bl->editted == TRUE) {
bl->last = inx;
@@ -323,11 +304,12 @@ static int DropListSelectChild(
/* selection changed -> callback */
if (string && bl->action) {
- bl->action(inx, string, 1, bl->data, addData->itemData);
+ bl->action(inx, string, 1, bl->data, listItemP?listItemP->itemData:NULL);
}
}
- g_free(string);
+ if ( string )
+ g_free(string);
return 1;
}
@@ -429,14 +411,7 @@ wList_p wDropListCreate(
gtk_widget_set_name(b->widget,"mycombo");
g_signal_connect(GTK_OBJECT(b->widget), "changed",
- G_CALLBACK(DropListSelectChild), b);
-
- if (option & BL_EDITABLE) {
- g_signal_connect(gtk_bin_get_child(GTK_BIN(b->widget)),
- "changed",
- G_CALLBACK(DropListEntryEntered),
- b);
- }
+ G_CALLBACK(DropListChanged), b);
gtk_widget_set_size_request(b->widget, width, -1);
diff --git a/app/wlib/gtklib/filesel.c b/app/wlib/gtklib/filesel.c
index ca30c7f..a1fb7cc 100644
--- a/app/wlib/gtklib/filesel.c
+++ b/app/wlib/gtklib/filesel.c
@@ -34,24 +34,92 @@
#define GSEAL_ENABLE
#include <gtk/gtk.h>
+#include <glib-object.h>
#include "gtkint.h"
#include "i18n.h"
#define MAX_ALLOWEDFILTERS 10
struct wFilSel_t {
- GtkWidget * window;
- wFilSelCallBack_p action;
- void * data;
- int pattCount;
- GtkFileFilter *filter[ MAX_ALLOWEDFILTERS ];
- wFilSelMode_e mode;
- int opt;
- const char * title;
- wWin_p parent;
- char *defaultExtension;
+ GtkWidget * window; /**< file selector handle*/
+ wFilSelCallBack_p action; /**< */
+ void * data; /**< */
+ int pattCount; /**< number of file patterns*/
+ wBool_t loadPatternsAdded; /** Already loaded */
+ GtkFileFilter *filter[ MAX_ALLOWEDFILTERS ]; /**< array of file patterns */
+ wFilSelMode_e mode; /**< used for load or save */
+ int opt; /**< see FS_ options */
+ const char * title; /**< dialog box title */
+ wWin_p parent; /**< parent window */
+ char *defaultExtension; /**< to use if no extension specified */
};
+/**
+ * Signal handler for 'changed' signal of custom combo box. The filter
+ * is set accordinng to the file format active in the combo box
+ *
+ * \param comboBox the combo box
+ * \param fileSelector data of the file selector
+ *
+ */
+
+static void FileFormatChanged( GtkWidget *comboBox,
+ struct wFilSel_t *fileSelector )
+{
+ // get active entry
+ int entry = (int)gtk_combo_box_get_active (GTK_COMBO_BOX(comboBox));
+
+ if( entry>=0 ) {
+ g_object_ref(G_OBJECT( (fileSelector->filter)[ entry ]));
+ gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(fileSelector->window ),
+ (fileSelector->filter)[ entry ]);
+ }
+}
+
+/**
+ * Create a widget containing a combo box for selecting a file format.
+ * From an array of filters, the names are retrieved and used to populate
+ * the combo box.
+ * \param IN dialogBox
+ * \param patterns IN number of entries for combo
+ * \param filters IN
+ * \returns the newly created widget
+ */
+
+static GtkWidget *CreateFileformatSelector(struct wFilSel_t *dialogBox,
+ int patterns,
+ GtkFileFilter **filters)
+{
+ GtkWidget *hbox = gtk_hbox_new(FALSE, 12);
+ GtkWidget *text = gtk_label_new(_("Save format:"));
+ GtkWidget *combo = gtk_combo_box_text_new ();
+
+ g_signal_connect(G_OBJECT(combo),
+ "changed",
+ (GCallback)FileFormatChanged,
+ dialogBox );
+
+
+ gtk_box_pack_start (GTK_BOX(hbox),
+ text,
+ FALSE,
+ FALSE,
+ 0);
+ gtk_box_pack_end (GTK_BOX(hbox),
+ combo,
+ TRUE,
+ TRUE,
+ 0);
+ for(int i=0; i < patterns; i++ ) {
+ const char *nameOfFilter = gtk_file_filter_get_name( filters[ i ] );
+ gtk_combo_box_text_append_text( GTK_COMBO_BOX_TEXT(combo), nameOfFilter );
+ }
+ gtk_combo_box_set_active (GTK_COMBO_BOX(combo), 0);
+
+ gtk_widget_show_all(hbox);
+
+ return(hbox);
+}
/**
* Create a new file selector. Only the internal data structures are
@@ -89,31 +157,75 @@ struct wFilSel_t * wFilSelCreate(
fs->title = strdup( title );
fs->action = action;
fs->data = data;
+ fs->pattCount = 0;
+ fs->loadPatternsAdded = FALSE;
if (pattList) {
- char * cp = strdup(pattList);
+ char * cps = strdup(pattList);
+ char *cp, *cp2;
int count = 0;
+ char *patternState, *patternState2;
//create filters for the passed filter list
// names and patterns are separated by |
- cp = strtok( cp, "|" );
- while ( cp && count < (MAX_ALLOWEDFILTERS - 1)) {
+ // filter elements are also separated by |
+ cp = cps;
+ while (cp && cp[0]) {
+ if (cp[0] == '|') {
+ count++;
+ if (count && count%2==0) {
+ cp[0] = ':'; //Replace every second "|" with ":"
+ }
+ }
+ cp++;
+ }
+ count = 0;
+ cp = cps; //Restart
+ if (opt&FS_PICTURES) { //Put first
fs->filter[ count ] = gtk_file_filter_new ();
- gtk_file_filter_set_name ( fs->filter[ count ], cp );
- cp = strtok( NULL, "|" );
- gtk_file_filter_add_pattern (fs->filter[ count ], cp );
- // the first pattern is considered to match the default extension
- if( count == 0 ) {
- fs->defaultExtension = strdup( cp );
- }
- cp = strtok( NULL, "|" );
- count++;
+ g_object_ref_sink( G_OBJECT(fs->filter[ count ] ));
+ gtk_file_filter_set_name( fs->filter[ count ], _("Image files") );
+ gtk_file_filter_add_pixbuf_formats( fs->filter[ count ]);
+ fs->pattCount = ++count;
+ }
+ cp = strtok_r( cp, ":", &patternState ); // Break up by colons
+ while ( cp && count < (MAX_ALLOWEDFILTERS - 1)) {
+ cp2 = strtok_r( cp, "|", &patternState2 );
+ if (cp2) {
+ fs->filter[ count ] = gtk_file_filter_new ();
+ gtk_file_filter_set_name ( fs->filter[ count ], cp2 );
+
+ cp2 = strtok_r( NULL, "|", &patternState2 );
+ // find multiple patterns separated by ";"
+ if (cp2) {
+ char * cp1s = strdup(cp2);
+ char *cp1;
+ char *filterState;
+
+ cp1 = cp1s;
+ cp1 = strtok_r(cp1, ";", &filterState );
+ while (cp1) {
+ gtk_file_filter_add_pattern (fs->filter[ count ], cp1 );
+ cp1 = strtok_r(NULL, ";", &filterState );
+ }
+ if (cp1s)
+ free(cp1s);
+ }
+ // the first pattern is considered to match the default extension
+ if( count == 0 && !(opt&FS_PICTURES)) {
+ fs->defaultExtension = strdup( cp2 );
+ int i = 0;
+ for (i=0; i<strlen(cp2) && cp2[i] != ' ' && cp2[i] != ';';i++) ;
+ if (i<strlen(cp2)) fs->defaultExtension[i] = '\0';
+ }
+ fs->pattCount = ++count;
+ }
+ cp = strtok_r( NULL, ":", &patternState );
}
- // finally add the all files pattern
- fs->filter[ count ] = gtk_file_filter_new ();
- gtk_file_filter_set_name( fs->filter[ count ], _("All files") );
- gtk_file_filter_add_pattern( fs->filter[ count ], "*" );
- fs->pattCount = count++;
+ if (cps)
+ free(cps);
+
+
} else {
fs->filter[ 0 ] = NULL;
fs->pattCount = 0;
@@ -145,33 +257,41 @@ int wFilSelect( struct wFilSel_t * fs, const char * dirName )
(fs->mode == FS_LOAD ? GTK_STOCK_OPEN : GTK_STOCK_SAVE ), GTK_RESPONSE_ACCEPT,
NULL );
if (fs->window==0) abort();
- // get confirmation before overwritting an existing file
- gtk_file_chooser_set_do_overwrite_confirmation( GTK_FILE_CHOOSER(fs->window), TRUE );
+ if ( fs->mode == FS_SAVE ) {
+ // get confirmation before overwritting an existing file
+ gtk_file_chooser_set_do_overwrite_confirmation( GTK_FILE_CHOOSER(fs->window), TRUE );
+ }
- // allow selecting multiple files
- if( fs->opt & FS_MULTIPLEFILES ) {
- gtk_file_chooser_set_select_multiple ( GTK_FILE_CHOOSER(fs->window), TRUE);
- }
- // add the file filters to the dialog box
- if( fs->pattCount ) {
- for( i = 0; i <= fs->pattCount; i++ ) {
- gtk_file_chooser_add_filter( GTK_FILE_CHOOSER( fs->window ), fs->filter[ i ] );
- }
- }
/** \todo for loading a shortcut folder could be added linking to the example directory */
}
strcpy( name, dirName );
- if( fs->mode == FS_SAVE )
- gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(fs->window), name );
+ gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(fs->window), name );
+ if( fs->mode == FS_SAVE || fs->mode == FS_UPDATE ) {
+ gtk_file_chooser_set_extra_widget( GTK_FILE_CHOOSER(fs->window),
+ CreateFileformatSelector(fs, fs->pattCount, fs->filter ));
+ }
// Add a current folder and a shortcut to it for Load/import dialogs
if( fs->mode == FS_LOAD ) {
- gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(fs->window), name );
gtk_file_chooser_add_shortcut_folder( GTK_FILE_CHOOSER(fs->window), name, NULL );
+ // allow selecting multiple files
+ if( fs->opt & FS_MULTIPLEFILES ) {
+ gtk_file_chooser_set_select_multiple ( GTK_FILE_CHOOSER(fs->window), TRUE);
+ }
+ // add the file filters to the dialog box
+ if( fs->pattCount && !fs->loadPatternsAdded) {
+
+ for( i = 0; i < fs->pattCount; i++ ) {
+ gtk_file_chooser_add_filter( GTK_FILE_CHOOSER( fs->window ), fs->filter[ i ] );
+ }
+ fs->loadPatternsAdded = TRUE;
+ }
}
- if( gtk_dialog_run( GTK_DIALOG( fs->window )) == GTK_RESPONSE_ACCEPT ) {
+ int resp = gtk_dialog_run( GTK_DIALOG( fs->window ));
+
+ if( resp == GTK_RESPONSE_ACCEPT || resp == GTK_RESPONSE_APPLY) {
char **fileNames;
GSList *fileNameList;
@@ -184,21 +304,36 @@ int wFilSelect( struct wFilSel_t * fs, const char * dirName )
file = g_filename_from_uri( g_slist_nth_data( fileNameList, i ), &host, &err );
// check for presence of file extension
- // jump behind tha last directory delimiter
+ // jump behind the last directory delimiter
namePart = strrchr( file, '/' ) + 1;
// is there a dot in the last part, yes->extension present
if( !strchr( namePart, '.' ) ){
- // make room for the extension
- file = g_realloc( file, strlen(file)+strlen(fs->defaultExtension));
- strcat( file, fs->defaultExtension + 1 );
+
+ // else try to find the current filter and parse its name
+ GtkFileFilter *currentFilter = gtk_file_chooser_get_filter (GTK_FILE_CHOOSER(fs->window) );
+ if (currentFilter) {
+ const char *nameOfFilter = gtk_file_filter_get_name( currentFilter );
+ char *pattern = strdup( nameOfFilter );
+ char *extension = fs->defaultExtension;
+ char *startDelimiter = strstr( pattern, "(*." );
+
+ if(startDelimiter) {
+ char *endDelimiter = strpbrk(startDelimiter + 3, ",;) ");
+ if( endDelimiter ) {
+ *endDelimiter = '\0';
+ extension = startDelimiter + 2;
+ }
+ }
+ file = g_realloc( file, strlen(file)+strlen(extension));
+ strcat( file, extension );
+ free( pattern );
+ }
}
fileNames[ i ] = file;
g_free( g_slist_nth_data ( fileNameList, i));
}
- if (fs->data)
- strcpy( fs->data, fileNames[ 0 ] );
-
+ gtk_widget_hide( GTK_WIDGET( fs->window ));
if (fs->action) {
fs->action( g_slist_length(fileNameList), fileNames, fs->data );
}
@@ -208,8 +343,9 @@ int wFilSelect( struct wFilSel_t * fs, const char * dirName )
}
free( fileNames );
g_slist_free (fileNameList);
+ } else {
+ gtk_widget_hide( GTK_WIDGET( fs->window ));
}
- gtk_widget_hide( GTK_WIDGET( fs->window ));
return 1;
}
diff --git a/app/wlib/gtklib/font.c b/app/wlib/gtklib/font.c
index 68ba87b..e2f741b 100644
--- a/app/wlib/gtklib/font.c
+++ b/app/wlib/gtklib/font.c
@@ -185,7 +185,8 @@ PangoLayout *wlibFontCreatePangoLayout(GtkWidget *widget,
int *width_p,
int *height_p,
int *ascent_p,
- int *descent_p)
+ int *descent_p,
+ int *baseline_p)
{
if (!fontInitted) {
fontInit();
@@ -214,14 +215,16 @@ PangoLayout *wlibFontCreatePangoLayout(GtkWidget *widget,
FONTSIZE_TO_PANGOSIZE(fs) * PANGO_SCALE);
pango_layout_set_font_description(layout, fontDescription);
/* get layout measures */
- pango_layout_get_pixel_size(layout, width_p, height_p);
+ pango_layout_get_size(layout, width_p, height_p);
+ *width_p = *width_p / PANGO_SCALE;
+ *height_p = *height_p / PANGO_SCALE;
context = gtk_widget_create_pango_context(widget);
metrics = pango_context_get_metrics(context, fontDescription,
pango_context_get_language(context));
- *ascent_p = PANGO_PIXELS(pango_font_metrics_get_ascent(metrics));
- *descent_p = PANGO_PIXELS(pango_font_metrics_get_descent(metrics));
+ *baseline_p = pango_layout_get_baseline(layout) / PANGO_SCALE;
+ *ascent_p = pango_font_metrics_get_ascent(metrics) / PANGO_SCALE;
+ *descent_p = pango_font_metrics_get_descent(metrics) / PANGO_SCALE;
pango_font_metrics_unref(metrics);
- g_object_ref_sink(context);
g_object_unref(context);
#if WLIB_FONT_DEBUG >= 3
fprintf(stderr, "font layout created:\n");
@@ -347,9 +350,9 @@ wFontSize_t wSelectedFontSize(void)
* \return describe the return value
*/
-void wSetSelectedFontSize(int size)
+void wSetSelectedFontSize(wFontSize_t size)
{
- absoluteFontSize = (wFontSize_t)size;
+ absoluteFontSize = size;
}
/**
diff --git a/app/wlib/gtklib/gtkdraw-cairo.c b/app/wlib/gtklib/gtkdraw-cairo.c
index 5042667..4498a2c 100644
--- a/app/wlib/gtklib/gtkdraw-cairo.c
+++ b/app/wlib/gtklib/gtkdraw-cairo.c
@@ -32,6 +32,9 @@
#include <gtk/gtk.h>
#include <gdk/gdk.h>
+// Trace low level drawing actions
+int iDrawLog = 0;
+
#include "gtkint.h"
#include "gdk/gdkkeysyms.h"
@@ -41,12 +44,16 @@
static long drawVerbose = 0;
+// Hack to do TempRedraw or MainRedraw
+// For Windows only
+wBool_t wDrawDoTempDraw = TRUE;
+
struct wDrawBitMap_t {
int w;
int h;
int x;
int y;
- const char * bits;
+ const unsigned char * bits;
GdkPixmap * pixmap;
GdkBitmap * mask;
};
@@ -102,64 +109,148 @@ struct wDraw_t psPrint_d;
*
*******************************************************************************/
-
-
-static GdkGC * selectGC(
- wDraw_p bd,
+static cairo_t* gtkDrawCreateCairoCursorContext(
+ wControl_p ct,
+ cairo_surface_t * surf,
wDrawWidth width,
wDrawLineType_e lineType,
wDrawColor color,
wDrawOpts opts )
{
- if(width < 0.0)
- {
- width = - width;
- }
+ cairo_t* cairo;
+
+ cairo = cairo_create(surf);
+
+ width = width ? abs(width) : 1;
+ cairo_set_line_width(cairo, width);
+
+ cairo_set_line_cap(cairo, CAIRO_LINE_CAP_BUTT);
+ cairo_set_line_join(cairo, CAIRO_LINE_JOIN_MITER);
- if(opts & wDrawOptTemp)
+ switch(lineType)
{
- if(bd->lastColor != color || !bd->lastColorInverted)
+ case wDrawLineSolid:
{
- gdk_gc_set_foreground( bd->gc, wlibGetColor(color,FALSE) );
- bd->lastColor = color;
- bd->lastColorInverted = TRUE;
+ cairo_set_dash(cairo, 0, 0, 0);
+ break;
}
- gdk_gc_set_function( bd->gc, GDK_XOR );
- gdk_gc_set_line_attributes( bd->gc, width, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER );
- }
- else
- {
- if(bd->lastColor != color || bd->lastColorInverted)
+ case wDrawLineDash:
{
- gdk_gc_set_foreground( bd->gc, wlibGetColor(color,TRUE) );
- bd->lastColor = color;
- bd->lastColorInverted = FALSE;
+ double dashes[] = { 5, 3 };
+ static int len_dashes = sizeof(dashes) / sizeof(dashes[0]);
+ cairo_set_dash(cairo, dashes, len_dashes, 0);
+ break;
}
- gdk_gc_set_function( bd->gc, GDK_COPY );
- if (lineType==wDrawLineDash)
+ case wDrawLineDot:
{
- gdk_gc_set_line_attributes( bd->gc, width, GDK_LINE_ON_OFF_DASH, GDK_CAP_BUTT, GDK_JOIN_MITER );
+ double dashes[] = { 1, 2 };
+ static int len_dashes = sizeof(dashes) / sizeof(dashes[0]);
+ cairo_set_dash(cairo, dashes, len_dashes, 0);
+ break;
}
- else
+ case wDrawLineDashDot:
+ {
+ double dashes[] = { 5, 2, 1, 2 };
+ static int len_dashes = sizeof(dashes) / sizeof(dashes[0]);
+ cairo_set_dash(cairo, dashes, len_dashes, 0);
+ break;
+ }
+ case wDrawLineDashDotDot:
{
- gdk_gc_set_line_attributes( bd->gc, width, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER );
+ double dashes[] = { 5, 2, 1, 2, 1, 2 };
+ static int len_dashes = sizeof(dashes) / sizeof(dashes[0]);
+ cairo_set_dash(cairo, dashes, len_dashes, 0);
+ break;
+ }
+ case wDrawLineCenter:
+ {
+ double dashes[] = { 8, 3, 5, 3};
+ static int len_dashes = sizeof(dashes) / sizeof(dashes[0]);
+ cairo_set_dash(cairo, dashes, len_dashes, 0.0);
+ break;
+ }
+ case wDrawLinePhantom:
+ {
+ double dashes[] = { 8, 3, 5, 3, 5, 3};
+ static int len_dashes = sizeof(dashes) / sizeof(dashes[0]);
+ cairo_set_dash(cairo, dashes, len_dashes, 0.0);
+ break;
}
- gdk_gc_set_function(bd->gc, GDK_NOOP);
}
- return bd->gc;
+ GdkColor * gcolor;
+
+
+ cairo_set_operator(cairo, CAIRO_OPERATOR_SOURCE);
+ gcolor = wlibGetColor(color, TRUE);
+
+ if (ct->type == B_DRAW) {
+ wDraw_p bd = (wDraw_p)ct;
+ bd->lastColor = color;
+ }
+
+ cairo_set_source_rgba(cairo, gcolor->red / 65535.0, gcolor->green / 65535.0, gcolor->blue / 65535.0, 1.0);
+
+ return cairo;
+}
+
+
+wBool_t wDrawSetTempMode(
+ wDraw_p bd,
+ wBool_t bTemp )
+{
+ wBool_t ret = bd->bTempMode;
+ bd->bTempMode = bTemp;
+ if ( ret == FALSE && bTemp == TRUE ) {
+ // Main to Temp drawing
+ wDrawClearTemp( bd );
+ }
+ return ret;
}
static cairo_t* gtkDrawCreateCairoContext(
wDraw_p bd,
+ GdkDrawable * win,
wDrawWidth width,
wDrawLineType_e lineType,
wDrawColor color,
wDrawOpts opts )
{
- cairo_t* cairo = gdk_cairo_create(bd->pixmap);
+ cairo_t* cairo;
+
+ if (win)
+ cairo = gdk_cairo_create(win);
+ else {
+ if (opts & wDrawOptTemp) {
+ if ( ! bd->bTempMode )
+ printf( "Temp draw in Main Mode. Contact Developers. See %s:%d\n", "gtkdraw-cario.c", __LINE__+1 );
+/* Temp Draw In Main Mode:
+ You are seeing this message because there is a wDraw*() call on tempD but you are not in the context of TempRedraw()
+ Typically this happens when Cmd<Object>() is processing a C_DOWN or C_MOVE action and it writes directly to tempD
+ Instead it sould set some state which allows c_redraw to do the actual drawing
+ If you set a break point on the printf you'll see the offending wDraw*() call in the traceback
+ It should be sufficient to remove that draw code or move it to C_REDRAW
+ This is not fatal but the draw will be ineffective because the next TempRedraw() will erase the temp surface
+ before the expose event can copy (or bitblt) it
+*/
+ cairo = cairo_create(bd->temp_surface);
+ } else {
+ if ( bd->bTempMode )
+ printf( "Main draw in Temp Mode. Contact Developers. See %s:%d\n", "gtkdraw-cario.c", __LINE__+1 );
+/* Main Draw In Temp Mode:
+ You are seeing this message because there is a wDraw*() call on mainD but you are in the context of TempRedraw()
+ Typically this happens when C_REDRAW action calls wDraw*() on mainD, in which case it should be writing to tempD.
+ Or the wDraw*() call should be removed if it is redundant.
+ If you set a break point on the printf you'll see the offending wDraw*() call in the traceback
+ This is not fatal but could result in garbage being left on the screen if the command is cancelled.
+*/
+ cairo = gdk_cairo_create(bd->pixmap);
+ }
+ }
width = width ? abs(width) : 1;
+ if ( color == wDrawColorWhite )
+ width += 1; // Remove ghosts
cairo_set_line_width(cairo, width);
cairo_set_line_cap(cairo, CAIRO_LINE_CAP_BUTT);
@@ -179,24 +270,52 @@ static cairo_t* gtkDrawCreateCairoContext(
cairo_set_dash(cairo, dashes, len_dashes, 0);
break;
}
- }
+ case wDrawLineDot:
+ {
+ double dashes[] = { 1, 2 };
+ static int len_dashes = sizeof(dashes) / sizeof(dashes[0]);
+ cairo_set_dash(cairo, dashes, len_dashes, 0);
+ break;
+ }
+ case wDrawLineDashDot:
+ {
+ double dashes[] = { 5, 2, 1, 2 };
+ static int len_dashes = sizeof(dashes) / sizeof(dashes[0]);
+ cairo_set_dash(cairo, dashes, len_dashes, 0);
+ break;
+ }
+ case wDrawLineDashDotDot:
+ {
+ double dashes[] = { 5, 2, 1, 2, 1, 2 };
+ static int len_dashes = sizeof(dashes) / sizeof(dashes[0]);
+ cairo_set_dash(cairo, dashes, len_dashes, 0);
+ break;
+ }
+ case wDrawLineCenter:
+ {
+ double dashes[] = { 8, 3, 5, 3};
+ static int len_dashes = sizeof(dashes) / sizeof(dashes[0]);
+ cairo_set_dash(cairo, dashes, len_dashes, 0.0);
+ break;
+ }
+ case wDrawLinePhantom:
+ {
+ double dashes[] = { 8, 3, 5, 3, 5, 3};
+ static int len_dashes = sizeof(dashes) / sizeof(dashes[0]);
+ cairo_set_dash(cairo, dashes, len_dashes, 0.0);
+ break;
+ }
- if(opts & wDrawOptTemp)
- {
- cairo_set_source_rgba(cairo, 0, 0, 0, 0);
- cairo_set_operator(cairo, CAIRO_OPERATOR_OVER);
- }
- else
- {
- long rgbcolor = wDrawGetRGB(color);
- int r0, g0, b0;
- r0 = (int)(rgbcolor>>16)&0xFF;
- g0 = (int)(rgbcolor>>8)&0xFF;
- b0 = (int)(rgbcolor)&0xFF;
- cairo_set_source_rgb(cairo, r0/255.0, g0/255.0, b0/255.0);
-
- cairo_set_operator(cairo, CAIRO_OPERATOR_SOURCE);
}
+ GdkColor * gcolor;
+
+
+ cairo_set_operator(cairo, CAIRO_OPERATOR_SOURCE);
+ gcolor = wlibGetColor(color, TRUE);
+
+ bd->lastColor = color;
+
+ cairo_set_source_rgb(cairo, gcolor->red / 65535.0, gcolor->green / 65535.0, gcolor->blue / 65535.0);
return cairo;
}
@@ -206,6 +325,36 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
return NULL;
}
+#ifdef CURSOR_SURFACE
+cairo_t* CreateCursorSurface(wControl_p ct, wSurface_p surface, wPos_t width, wPos_t height, wDrawColor color, wDrawOpts opts) {
+
+ cairo_t * cairo = NULL;
+
+ if ((opts&wDrawOptCursor) || (opts&wDrawOptCursorRmv)) {
+
+ if (surface!=NULL || surface->width != width || surface->height != height) {
+ if (surface->surface) cairo_surface_destroy(surface->surface);
+ surface->surface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width,height );
+ surface->width = width;
+ surface->height = height;
+
+ }
+
+ cairo = gtkDrawCreateCairoCursorContext(ct,surface->surface,0,wDrawLineSolid, color, opts);
+ cairo_save(cairo);
+ cairo_set_source_rgba(cairo, 0.0, 0.0, 0.0, 0.0);
+ cairo_paint(cairo);
+ cairo_restore(cairo);
+ surface->show = TRUE;
+ cairo_set_operator(cairo,CAIRO_OPERATOR_SOURCE);
+
+ }
+
+ return cairo;
+
+}
+#endif
+
void wDrawDelayUpdate(
wDraw_p bd,
wBool_t delay )
@@ -239,36 +388,19 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
psPrintLine( x0, y0, x1, y1, width, lineType, color, opts );
return;
}
- gc = selectGC( bd, width, lineType, color, opts );
x0 = INMAPX(bd,x0);
y0 = INMAPY(bd,y0);
x1 = INMAPX(bd,x1);
y1 = INMAPY(bd,y1);
- gdk_draw_line( bd->pixmap, gc, x0, y0, x1, y1 );
- cairo_t* cairo = gtkDrawCreateCairoContext(bd, width, lineType, color, opts);
+ cairo_t* cairo = gtkDrawCreateCairoContext(bd, NULL, width, lineType, color, opts);
cairo_move_to(cairo, x0 + 0.5, y0 + 0.5);
cairo_line_to(cairo, x1 + 0.5, y1 + 0.5);
cairo_stroke(cairo);
gtkDrawDestroyCairoContext(cairo);
+ if (bd->widget)
+ gtk_widget_queue_draw(GTK_WIDGET(bd->widget)); //,x0,y0+1,x1,y1+1);
- if ( bd->delayUpdate || bd->widget == NULL ) return;
- width /= 2;
- if (x0 < x1) {
- update_rect.x = x0-1-width;
- update_rect.width = x1-x0+2+width+width;
- } else {
- update_rect.x = x1-1-width;
- update_rect.width = x0-x1+2+width+width;
- }
- if (y0 < y1) {
- update_rect.y = y0-1-width;
- update_rect.height = y1-y0+2+width+width;
- } else {
- update_rect.y = y1-1-width;
- update_rect.height = y0-y1+2+width+width;
- }
- gtk_widget_draw( bd->widget, &update_rect );
}
/**
@@ -299,33 +431,20 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
wDrawOpts opts )
{
int x, y, w, h;
- GdkGC * gc;
- GdkRectangle update_rect;
if ( bd == &psPrint_d ) {
psPrintArc( x0, y0, r, angle0, angle1, drawCenter, width, lineType, color, opts );
return;
}
- gc = selectGC( bd, width, lineType, color, opts );
+
if (r < 6.0/75.0) return;
x = INMAPX(bd,x0-r);
y = INMAPY(bd,y0+r);
w = 2*r;
h = 2*r;
- // remove the old arc
- gdk_draw_arc( bd->pixmap, gc, FALSE, x, y, w, h, (int)((-angle0 + 90)*64.0), (int)(-angle1*64.0) );
-
- // and its center point
- if (drawCenter) {
- x = INMAPX(bd,x0);
- y = INMAPY(bd,y0);
- gdk_draw_line( bd->pixmap, gc, x - ( CENTERMARK_LENGTH/2), y, x + ( CENTERMARK_LENGTH/2), y );
- gdk_draw_line( bd->pixmap, gc, x, y - ( CENTERMARK_LENGTH/2), x, y + ( CENTERMARK_LENGTH/2));
- }
-
// now create the new arc
- cairo_t* cairo = gtkDrawCreateCairoContext(bd, width, lineType, color, opts);
+ cairo_t* cairo = gtkDrawCreateCairoContext(bd, NULL, width, lineType, color, opts);
cairo_new_path(cairo);
// its center point marker
@@ -337,6 +456,7 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
cairo_move_to(cairo, INMAPX(bd, x0), INMAPY(bd, y0 - (CENTERMARK_LENGTH / 2 )));
cairo_line_to(cairo, INMAPX(bd, x0) , INMAPY(bd, y0 + (CENTERMARK_LENGTH / 2)));
cairo_new_sub_path( cairo );
+
}
// draw the curve itself
@@ -344,14 +464,10 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
cairo_stroke(cairo);
gtkDrawDestroyCairoContext(cairo);
+ if (bd->widget && !bd->delayUpdate)
+ gtk_widget_queue_draw_area(bd->widget,x,y,w,h);
+
- if ( bd->delayUpdate || bd->widget == NULL) return;
- width /= 2;
- update_rect.x = x-1-width;
- update_rect.y = y-1-width;
- update_rect.width = w+2+width+width;
- update_rect.height = h+2+width+width;
- gtk_widget_draw( bd->widget, &update_rect );
}
@@ -361,28 +477,21 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
wDrawColor color,
wDrawOpts opts )
{
- GdkGC * gc;
GdkRectangle update_rect;
if ( bd == &psPrint_d ) {
/*psPrintArc( x0, y0, r, angle0, angle1, drawCenter, width, lineType, color, opts );*/
return;
}
- gc = selectGC( bd, 0, wDrawLineSolid, color, opts );
- gdk_draw_point( bd->pixmap, gc, INMAPX(bd, x0 ), INMAPY(bd, y0 ) );
- cairo_t* cairo = gtkDrawCreateCairoContext(bd, 0, wDrawLineSolid, color, opts);
+ cairo_t* cairo = gtkDrawCreateCairoContext(bd, NULL, 0, wDrawLineSolid, color, opts);
cairo_new_path(cairo);
cairo_arc(cairo, INMAPX(bd, x0), INMAPY(bd, y0), 0.75, 0, 2 * M_PI);
cairo_stroke(cairo);
gtkDrawDestroyCairoContext(cairo);
+ if (bd->widget && !bd->delayUpdate)
+ gtk_widget_queue_draw_area(bd->widget,INMAPX(bd,x0-0.75),INMAPY(bd,y0+0.75),2,2);
- if ( bd->delayUpdate || bd->widget == NULL) return;
- update_rect.x = INMAPX(bd, x0 )-1;
- update_rect.y = INMAPY(bd, y0 )-1;
- update_rect.width = 2;
- update_rect.height = 2;
- gtk_widget_draw( bd->widget, &update_rect );
}
/*******************************************************************************
@@ -407,6 +516,7 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
int h;
gint ascent;
gint descent;
+ gint baseline;
double angle = -M_PI * a / 180.0;
if ( bd == &psPrint_d ) {
@@ -418,23 +528,27 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
y = INMAPY(bd,y);
/* draw text */
- cairo_t* cairo = gtkDrawCreateCairoContext(bd, 0, wDrawLineSolid, color, opts);
+ cairo_t* cairo = gtkDrawCreateCairoContext(bd, NULL, 0, wDrawLineSolid, color, opts);
cairo_save( cairo );
- cairo_translate( cairo, x, y );
- cairo_rotate( cairo, angle );
+ cairo_identity_matrix(cairo);
layout = wlibFontCreatePangoLayout(bd->widget, cairo, fp, fs, s,
(int *) &w, (int *) &h,
- (int *) &ascent, (int *) &descent);
+ (int *) &ascent, (int *) &descent, (int *) &baseline);
- /* cairo does not support the old method of text removal by overwrite; force always write here and
- refresh on cancel event */
+ /* cairo does not support the old method of text removal by overwrite;
+ * if color is White, then overwrite old text with a White rectangle */
GdkColor* const gcolor = wlibGetColor(color, TRUE);
cairo_set_source_rgb(cairo, gcolor->red / 65535.0, gcolor->green / 65535.0, gcolor->blue / 65535.0);
- cairo_move_to( cairo, 0, -ascent );
+ cairo_translate( cairo, x, y );
+ cairo_rotate( cairo, angle );
+ cairo_translate( cairo, 0, -baseline);
+
+ cairo_move_to(cairo, 0, 0);
+ pango_cairo_update_layout(cairo, layout);
pango_cairo_show_layout(cairo, layout);
wlibFontDestroyPangoLayout(layout);
cairo_restore( cairo );
@@ -446,17 +560,21 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
* for simplicity sake I added plain text height ascent and descent,
* mathematically correct would be to use the trigonometrical functions as well
*/
- update_rect.x = (gint) x - ascent - descent - 1;
- update_rect.y = (gint) y - (gint) ascent - 1;
- update_rect.width = (gint) (w * cos( angle ) + 2 + ascent + descent);
- update_rect.height = (gint) (h * sin( angle ) + ascent + descent + 2 );
+ update_rect.x = (gint) x - 2;
+ update_rect.y = (gint) y - (gint) (baseline + descent) - 2;
+ update_rect.width = (gint) (w * cos( angle ) + h * sin(angle))+2;
+ update_rect.height = (gint) (h * sin( angle ) + w * cos(angle))+2;
gtk_widget_draw(bd->widget, &update_rect);
+ if (bd->widget && !bd->delayUpdate)
+ gtk_widget_queue_draw_area(bd->widget, update_rect.x, update_rect.y, update_rect.width, update_rect.height);
+
}
void wDrawGetTextSize(
wPos_t *w,
wPos_t *h,
wPos_t *d,
+ wPos_t *a,
wDraw_p bd,
const char * s,
wFont_p fp,
@@ -466,21 +584,31 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
int textHeight;
int ascent;
int descent;
+ int baseline;
*w = 0;
*h = 0;
+ /* draw text */
+ cairo_t* cairo = gtkDrawCreateCairoContext(bd, NULL, 0, wDrawLineSolid, wDrawColorBlack, bd->bTempMode?wDrawOptTemp:0 );
+
+ cairo_identity_matrix(cairo);
+
wlibFontDestroyPangoLayout(
- wlibFontCreatePangoLayout(bd->widget, NULL, fp, fs, s,
+ wlibFontCreatePangoLayout(bd->widget, cairo, fp, fs, s,
&textWidth, (int *) &textHeight,
- (int *) &ascent, (int *) &descent));
+ (int *) &ascent, (int *) &descent, (int *) &baseline) );
*w = (wPos_t) textWidth;
*h = (wPos_t) textHeight;
- *d = (wPos_t) textHeight-ascent;
+ *a = (wPos_t) ascent;
+ //*d = (wPos_t) textHeight-ascent;
+ *d = (wPos_t) descent;
if (debugWindow >= 3)
fprintf(stderr, "text metrics: w=%d, h=%d, d=%d\n", *w, *h, *d);
+
+ gtkDrawDestroyCairoContext(cairo);
}
@@ -490,6 +618,28 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
*
*******************************************************************************/
+static void wlibDrawFilled(
+ cairo_t * cairo,
+ wDrawColor color,
+ wDrawOpts opt )
+{
+ if ( (opt & wDrawOptTransparent) != 0 ) {
+ if ( (opt & wDrawOptTemp) == 0 ) {
+ cairo_set_source_rgb(cairo, 0,0,0);
+ cairo_set_operator(cairo, CAIRO_OPERATOR_DIFFERENCE);
+ cairo_fill_preserve(cairo);
+ }
+ GdkColor * gcolor = wlibGetColor(color, TRUE);
+ cairo_set_source_rgba(cairo, gcolor->red / 65535.0, gcolor->green / 65535.0, gcolor->blue / 65535.0, 1.0);
+ cairo_set_operator(cairo, CAIRO_OPERATOR_OVER);
+ cairo_stroke_preserve(cairo);
+ cairo_set_operator(cairo, CAIRO_OPERATOR_OVER);
+ cairo_set_source_rgba(cairo, gcolor->red / 65535.0, gcolor->green / 65535.0, gcolor->blue / 65535.0, 0.3);
+ }
+ cairo_fill(cairo);
+}
+
+
void wDrawFilledRectangle(
wDraw_p bd,
wPos_t x,
@@ -499,7 +649,6 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
wDrawColor color,
wDrawOpts opt )
{
- GdkGC * gc;
GdkRectangle update_rect;
if ( bd == &psPrint_d ) {
@@ -507,47 +656,46 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
return;
}
- gc = selectGC( bd, 0, wDrawLineSolid, color, opt );
x = INMAPX(bd,x);
y = INMAPY(bd,y)-h;
- gdk_draw_rectangle( bd->pixmap, gc, TRUE, x, y, w, h );
- cairo_t* cairo = gtkDrawCreateCairoContext(bd, 0, wDrawLineSolid, color, opt);
+ cairo_t* cairo = gtkDrawCreateCairoContext(bd, NULL, 0, wDrawLineSolid, color, opt);
cairo_move_to(cairo, x, y);
cairo_rel_line_to(cairo, w, 0);
cairo_rel_line_to(cairo, 0, h);
cairo_rel_line_to(cairo, -w, 0);
- cairo_fill(cairo);
+ cairo_rel_line_to(cairo, 0, -h);
+ wlibDrawFilled( cairo, color, opt );
+
gtkDrawDestroyCairoContext(cairo);
+ if (bd->widget && !bd->delayUpdate)
+ gtk_widget_queue_draw_area(GTK_WIDGET(bd->widget),x,y,w,h);
- if ( bd->delayUpdate || bd->widget == NULL) return;
- update_rect.x = x-1;
- update_rect.y = y-1;
- update_rect.width = w+2;
- update_rect.height = h+2;
- gtk_widget_draw( bd->widget, &update_rect );
}
- void wDrawFilledPolygon(
+ void wDrawPolygon(
wDraw_p bd,
wPos_t p[][2],
+ wPolyLine_e type[],
int cnt,
wDrawColor color,
- wDrawOpts opt )
+ wDrawWidth dw,
+ wDrawLineType_e lt,
+ wDrawOpts opt,
+ int fill,
+ int open )
{
- GdkGC * gc;
static int maxCnt = 0;
static GdkPoint *points;
int i;
- GdkRectangle update_rect;
if ( bd == &psPrint_d ) {
- psPrintFillPolygon( p, cnt, color, opt );
+ psPrintFillPolygon( p, type, cnt, color, opt, fill, open );
return;
}
- if (cnt > maxCnt) {
+ if (cnt > maxCnt) {
if (points == NULL)
points = (GdkPoint*)malloc( cnt*sizeof *points );
else
@@ -556,43 +704,100 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
abort();
maxCnt = cnt;
}
-
- update_rect.x = bd->w;
- update_rect.y = bd->h;
- update_rect.width = 0;
- update_rect.height = 0;
- for (i=0; i<cnt; i++) {
- points[i].x = INMAPX(bd,p[i][0]);
- points[i].y = INMAPY(bd,p[i][1]);
- if (update_rect.x > points[i].x)
- update_rect.x = points[i].x;
- if (update_rect.width < points[i].x)
- update_rect.width = points[i].x;
- if (update_rect.y > points[i].y)
- update_rect.y = points[i].y;
- if (update_rect.height < points[i].y)
- update_rect.height = points[i].y;
+ wPos_t min_x,max_x,min_y,max_y;
+ min_x = max_x = INMAPX(bd,p[0][0]);
+ min_y = max_y = INMAPY(bd,p[0][1]);
+ for (i=0; i<cnt; i++) {
+ points[i].x = INMAPX(bd,p[i][0]);
+ if (points[i].x < min_x) min_x = points[i].x;
+ if (points[i].x > max_x) max_x = points[i].x;
+ if (points[i].y > max_y) max_y = points[i].y;
+ points[i].y = INMAPY(bd,p[i][1]);
}
- update_rect.x -= 1;
- update_rect.y -= 1;
- update_rect.width -= update_rect.x-2;
- update_rect.height -= update_rect.y-2;
- gc = selectGC( bd, 0, wDrawLineSolid, color, opt );
- gdk_draw_polygon( bd->pixmap, gc, TRUE, points, cnt );
-
- cairo_t* cairo = gtkDrawCreateCairoContext(bd, 0, wDrawLineSolid, color, opt);
+
+ cairo_t* cairo = gtkDrawCreateCairoContext(bd, NULL, fill?0:dw, fill?wDrawLineSolid:lt, color, opt);
+
for(i = 0; i < cnt; ++i)
{
- if(i)
+ int j = i-1;
+ int k = i+1;
+ if (j < 0) j = cnt-1;
+ if (k > cnt-1) k = 0;
+ GdkPoint mid0, mid1, mid3, mid4;
+ // save is static because of an apparent compiler bug on Linux
+ // This happens with RelWithDebInfo target
+ // If the first segment is a line then save should = points[0]
+ // However it becomes mid0 instead which causes the last corner to be misplaced.
+ static GdkPoint save;
+ double len0, len1;
+ double d0x = (points[i].x-points[j].x);
+ double d0y = (points[i].y-points[j].y);
+ double d1x = (points[k].x-points[i].x);
+ double d1y = (points[k].y-points[i].y);
+ len0 = (d0x*d0x+d0y*d0y);
+ len1 = (d1x*d1x+d1y*d1y);
+ mid0.x = (d0x/2)+points[j].x;
+ mid0.y = (d0y/2)+points[j].y;
+ mid1.x = (d1x/2)+points[i].x;
+ mid1.y = (d1y/2)+points[i].y;
+ if (type && (type[i] == wPolyLineRound) && (len1>0) && (len0>0)) {
+ double ratio = sqrt(len0/len1);
+ if (len0 < len1) {
+ mid1.x = ((d1x*ratio)/2)+points[i].x;
+ mid1.y = ((d1y*ratio)/2)+points[i].y;
+ } else {
+ mid0.x = points[i].x-(d0x/(2*ratio));
+ mid0.y = points[i].y-(d0y/(2*ratio));
+ }
+ }
+ mid3.x = (points[i].x-mid0.x)/2+mid0.x;
+ mid3.y = (points[i].y-mid0.y)/2+mid0.y;
+ mid4.x = (mid1.x-points[i].x)/2+points[i].x;
+ mid4.y = (mid1.y-points[i].y)/2+points[i].y;
+ points[i].x = round(points[i].x)+0.5;
+ points[i].y = round(points[i].y)+0.5;
+ mid0.x = round(mid0.x)+0.5;
+ mid0.y = round(mid0.y)+0.5;
+ mid1.x = round(mid1.x)+0.5;
+ mid1.y = round(mid1.y)+0.5;
+ mid3.x = round(mid3.x)+0.5;
+ mid3.y = round(mid3.y)+0.5;
+ mid4.x = round(mid4.x)+0.5;
+ mid4.y = round(mid4.y)+0.5;
+ if(i==0) {
+ if (!type || type[i] == wPolyLineStraight || open) {
+ cairo_move_to(cairo, points[i].x, points[i].y);
+ save = points[0];
+ } else {
+ cairo_move_to(cairo, mid0.x, mid0.y);
+ if (type[i] == 1)
+ cairo_curve_to(cairo, points[i].x, points[i].y, points[i].x, points[i].y, mid1.x, mid1.y);
+ else
+ cairo_curve_to(cairo, mid3.x, mid3.y, mid4.x, mid4.y, mid1.x, mid1.y);
+ save = mid0;
+ }
+ } else if (!type || type[i] == wPolyLineStraight || (open && (i==cnt-1))) {
cairo_line_to(cairo, points[i].x, points[i].y);
- else
- cairo_move_to(cairo, points[i].x, points[i].y);
+ } else {
+ cairo_line_to(cairo, mid0.x, mid0.y);
+ if (type[i] == wPolyLineSmooth)
+ cairo_curve_to(cairo, points[i].x, points[i].y, points[i].x, points[i].y, mid1.x, mid1.y);
+ else
+ cairo_curve_to(cairo, mid3.x, mid3.y, mid4.x, mid4.y, mid1.x, mid1.y);
+ }
+ if ((i==cnt-1) && !open) {
+ cairo_line_to(cairo, save.x, save.y);
+ }
+ }
+ if (fill && !open) {
+ wlibDrawFilled( cairo, color, opt );
+ } else {
+ cairo_stroke(cairo);
}
- cairo_fill(cairo);
gtkDrawDestroyCairoContext(cairo);
+ if (bd->widget && !bd->delayUpdate)
+ gtk_widget_queue_draw_area(GTK_WIDGET(bd->widget),min_x,min_y,max_x-min_y,max_y-min_y);
- if ( bd->delayUpdate || bd->widget == NULL) return;
- gtk_widget_draw( bd->widget, &update_rect );
}
void wDrawFilledCircle(
@@ -603,60 +808,64 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
wDrawColor color,
wDrawOpts opt )
{
- GdkGC * gc;
int x, y, w, h;
- GdkRectangle update_rect;
if ( bd == &psPrint_d ) {
psPrintFillCircle( x0, y0, r, color, opt );
return;
}
- gc = selectGC( bd, 0, wDrawLineSolid, color, opt );
x = INMAPX(bd,x0-r);
y = INMAPY(bd,y0+r);
w = 2*r;
h = 2*r;
- gdk_draw_arc( bd->pixmap, gc, TRUE, x, y, w, h, 0, 360*64 );
- cairo_t* cairo = gtkDrawCreateCairoContext(bd, 0, wDrawLineSolid, color, opt);
+ cairo_t* cairo = gtkDrawCreateCairoContext(bd, NULL, 0, wDrawLineSolid, color, opt);
cairo_arc(cairo, INMAPX(bd, x0), INMAPY(bd, y0), r, 0, 2 * M_PI);
- cairo_fill(cairo);
+ wlibDrawFilled( cairo, color, opt );
gtkDrawDestroyCairoContext(cairo);
- if ( bd->delayUpdate || bd->widget == NULL) return;
- update_rect.x = x-1;
- update_rect.y = y-1;
- update_rect.width = w+2;
- update_rect.height = h+2;
- gtk_widget_draw( bd->widget, &update_rect );
+ if (bd->widget)
+ gtk_widget_queue_draw_area(GTK_WIDGET(bd->widget),x,y,w,h);
}
+ void wDrawClearTemp(wDraw_p bd) {
+ //Wipe out temp space with 0 alpha (transparent)
+
+ static long cDCT = 0;
+ if ( iDrawLog )
+ printf( "wDrawClearTemp %ld\n", cDCT++ );
+ cairo_t* cairo = cairo_create(bd->temp_surface);
+
+ cairo_set_source_rgba(cairo, 0.0, 0.0, 0.0, 0.0);
+ cairo_set_operator (cairo, CAIRO_OPERATOR_SOURCE);
+ cairo_move_to(cairo, 0, 0);
+ cairo_rel_line_to(cairo, bd->w, 0);
+ cairo_rel_line_to(cairo, 0, bd->h);
+ cairo_rel_line_to(cairo, -bd->w, 0);
+ cairo_fill(cairo);
+ cairo_destroy(cairo);
+
+ if (bd->widget && !bd->delayUpdate)
+ gtk_widget_queue_draw(bd->widget);
+ }
void wDrawClear(
wDraw_p bd )
{
- GdkGC * gc;
- GdkRectangle update_rect;
- gc = selectGC( bd, 0, wDrawLineSolid, wDrawColorWhite, 0 );
- gdk_draw_rectangle(bd->pixmap, gc, TRUE, 0, 0, bd->w, bd->h);
-
- cairo_t* cairo = gtkDrawCreateCairoContext(bd, 0, wDrawLineSolid, wDrawColorWhite, 0);
+ cairo_t* cairo = gtkDrawCreateCairoContext(bd, NULL, 0, wDrawLineSolid, wDrawColorWhite, 0);
cairo_move_to(cairo, 0, 0);
cairo_rel_line_to(cairo, bd->w, 0);
cairo_rel_line_to(cairo, 0, bd->h);
cairo_rel_line_to(cairo, -bd->w, 0);
cairo_fill(cairo);
+ if (bd->widget)
+ gtk_widget_queue_draw(bd->widget);
gtkDrawDestroyCairoContext(cairo);
- if ( bd->delayUpdate || bd->widget == NULL) return;
- update_rect.x = 0;
- update_rect.y = 0;
- update_rect.width = bd->w;
- update_rect.height = bd->h;
- gtk_widget_draw( bd->widget, &update_rect );
+ wDrawClearTemp(bd);
}
void * wDrawGetContext(
@@ -678,7 +887,7 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
int h,
int x,
int y,
- const char * fbits )
+ const unsigned char * fbits )
{
wDrawBitMap_p bm;
@@ -700,72 +909,107 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
wDrawColor color,
wDrawOpts opts )
{
- //GdkGC * gc;
- GdkRectangle update_rect;
int i, j, wb;
wPos_t xx, yy;
wControl_p b;
- GdkDrawable * gdk_window;
+ wWin_p win;
+ GdkDrawable * gdk_drawable, * cairo_surface;
+ GtkWidget * widget = bd->widget;
+
+ static long cDBM = 0;
+ if ( iDrawLog )
+ printf( "wDrawBitMap %ld\n", cDBM++ );
x = INMAPX( bd, x-bm->x );
y = INMAPY( bd, y-bm->y )-bm->h;
wb = (bm->w+7)/8;
- //gc = selectGC( bd, 0, wDrawLineSolid, color, opts );
- cairo_t* cairo = gtkDrawCreateCairoContext(bd, 0, wDrawLineSolid, color, opts);
+
+ cairo_t* cairo;
+
+#ifdef CURSOR_SURFACE
+ if (opts&wDrawOptCursorRmv) color = wDrawColorWhite; //Wipeout existing cursor draw (simplistic first)
+
+
+ if ((opts&wDrawOptCursor) || (opts&wDrawOptCursorRmv) || (opts&wDrawOptCursorQuit)) {
+
+ cairo = CreateCursorSurface((wControl_p)bd,&bd->cursor_surface, bd->w, bd->h, color, opts);
+
+ if ((opts&wDrawOptCursorRmv) || (opts&wDrawOptCursorQuit)) {
+ bd->cursor_surface.show = FALSE;
+ } else bd->cursor_surface.show = TRUE;
+
+ widget = bd->widget;
+
+
+ } else {
+ cairo = gtkDrawCreateCairoContext(bd, NULL, 0, wDrawLineSolid, color, opts);
+ widget = bd->widget;
+ }
+
+ GtkWidget * new_widget = widget;
+ GdkGC * gc = NULL;
+ GdkWindow * gdk_window = NULL;
+
+ win = bd->parent;
+#endif
+ cairo = gtkDrawCreateCairoContext(bd, NULL, 0, wDrawLineSolid, color, opts);
+
for ( i=0; i<bm->w; i++ )
for ( j=0; j<bm->h; j++ )
if ( bm->bits[ j*wb+(i>>3) ] & (1<<(i&07)) ) {
xx = x+i;
yy = y+j;
+#ifdef CURSOR_SURFACE
if ( 0 <= xx && xx < bd->w &&
0 <= yy && yy < bd->h ) {
- gdk_window = bd->pixmap;
b = (wControl_p)bd;
} else if ( (opts&wDrawOptNoClip) != 0 ) {
xx += bd->realX;
yy += bd->realY;
b = wlibGetControlFromPos( bd->parent, xx, yy );
- if ( b ) {
- if ( b->type == B_DRAW )
- gdk_window = ((wDraw_p)b)->pixmap;
- else
- gdk_window = b->widget->window;
+ if ( b) {
xx -= b->realX;
yy -= b->realY;
+ new_widget = b->widget;
} else {
- gdk_window = bd->parent->widget->window;
+ new_widget = bd->parent->widget;
}
} else {
continue;
}
-/*printf( "gdk_draw_point( %ld, gc, %d, %d )\n", (long)gdk_window, xx, yy );*/
- //gdk_draw_point( gdk_window, gc, xx, yy );
- cairo_rectangle(cairo, xx-0.5, yy-0.5, 1, 1);
- cairo_fill(cairo);
- if ( b && b->type == B_DRAW ) {
- update_rect.x = xx-1;
- update_rect.y = yy-1;
- update_rect.width = 3;
- update_rect.height = 3;
- gtk_widget_draw( b->widget, &update_rect );
+
+ if (new_widget != widget) {
+ if (cairo)
+ cairo_destroy(cairo);
+ cairo = NULL;
+ if (widget && (widget != bd->parent->widget))
+ gtk_widget_queue_draw(GTK_WIDGET(widget));
+ if ( (opts&wDrawOptCursor) || (opts&wDrawOptCursorRmv) || (opts&wDrawOptCursorQuit)) {
+ if (!b) b = (wControl_p)(bd->parent->widget);
+ cairo = CreateCursorSurface(b,&b->cursor_surface, b->w, b->h, color, opts);
+ widget = b->widget;
+ gc = NULL;
+ if ((opts&wDrawOptCursorRmv) || (opts&wDrawOptCursorQuit))
+ b->cursor_surface.show = FALSE;
+ else
+ b->cursor_surface.show = TRUE;
+ } else {
+ continue;
+ }
+ widget = new_widget;
}
- }
- gtkDrawDestroyCairoContext(cairo);
-#ifdef LATER
- gdk_draw_pixmap(bd->pixmap, gc,
- bm->pixmap,
- 0, 0,
- x, y,
- bm->w, bm->h );
+ if ((opts&wDrawOptCursorQuit) || (opts&wDrawOptCursorQuit) ) continue;
#endif
- if ( bd->delayUpdate || bd->widget == NULL) return;
+ cairo_rectangle(cairo, xx, yy, 1, 1);
+ cairo_fill(cairo);
+ }
+
+ cairo_destroy(cairo);
+
+ if (widget && !bd->delayUpdate)
+ gtk_widget_queue_draw_area(GTK_WIDGET(widget), x, y, bm->w, bm->h);
- update_rect.x = x;
- update_rect.y = y;
- update_rect.width = bm->w;
- update_rect.height = bm->h;
- gtk_widget_draw( bd->widget, &update_rect );
}
@@ -780,19 +1024,19 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
void wDrawSaveImage(
wDraw_p bd )
{
+ cairo_t * cr;
if ( bd->pixmapBackup ) {
gdk_pixmap_unref( bd->pixmapBackup );
}
bd->pixmapBackup = gdk_pixmap_new( bd->widget->window, bd->w, bd->h, -1 );
- selectGC( bd, 0, wDrawLineSolid, bd->lastColor, 0 );
- gdk_gc_set_function(bd->gc, GDK_COPY);
+ cr = gdk_cairo_create(bd->pixmapBackup);
+ gdk_cairo_set_source_pixmap(cr, bd->pixmap, 0, 0);
+ cairo_paint(cr);
+ cairo_destroy(cr);
+
+ cr = NULL;
- gdk_draw_pixmap( bd->pixmapBackup, bd->gc,
- bd->pixmap,
- 0, 0,
- 0, 0,
- bd->w, bd->h );
}
@@ -802,14 +1046,13 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
GdkRectangle update_rect;
if ( bd->pixmapBackup ) {
- selectGC( bd, 0, wDrawLineSolid, bd->lastColor, 0 );
- gdk_gc_set_function(bd->gc, GDK_COPY);
+ cairo_t * cr;
+ cr = gdk_cairo_create(bd->pixmap);
+ gdk_cairo_set_source_pixmap(cr, bd->pixmapBackup, 0, 0);
+ cairo_paint(cr);
+ cairo_destroy(cr);
- gdk_draw_pixmap( bd->pixmap, bd->gc,
- bd->pixmapBackup,
- 0, 0,
- 0, 0,
- bd->w, bd->h );
+ cr = NULL;
if ( bd->delayUpdate || bd->widget == NULL ) return;
update_rect.x = 0;
@@ -845,6 +1088,9 @@ static cairo_t* gtkDrawDestroyCairoContext(cairo_t *cairo) {
if (bd->pixmap)
gdk_pixmap_unref( bd->pixmap );
bd->pixmap = gdk_pixmap_new( bd->widget->window, w, h, -1 );
+ if (bd->temp_surface)
+ cairo_surface_destroy( bd->temp_surface);
+ bd->temp_surface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, w,h );
wDrawClear( bd );
if (!redraw)
@@ -914,13 +1160,37 @@ static gint draw_expose_event(
GdkEventExpose *event,
wDraw_p bd)
{
- gdk_draw_pixmap(widget->window,
- widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
- bd->pixmap,
- event->area.x, event->area.y,
- event->area.x, event->area.y,
- event->area.width, event->area.height);
- return FALSE;
+ static long cDEE = 0;
+ if ( iDrawLog )
+ printf( "draw_expose_event %ld %dx%d+%dx%d %dx%d+%dx%d\n", cDEE++,
+ event->area.x, event->area.y, event->area.width, event->area.height,
+ 0, bd->w, 0, bd->h );
+
+ cairo_t* cairo = gdk_cairo_create (widget->window);
+ gdk_cairo_set_source_pixmap(cairo,bd->pixmap,0,0);
+ cairo_rectangle(cairo,event->area.x, event->area.y,
+ event->area.width, event->area.height);
+ cairo_set_operator(cairo,CAIRO_OPERATOR_SOURCE);
+ cairo_fill(cairo);
+
+ cairo_set_source_surface(cairo,bd->temp_surface,0,0);
+ cairo_rectangle(cairo,event->area.x, event->area.y,
+ event->area.width, event->area.height);
+ cairo_set_operator(cairo,CAIRO_OPERATOR_OVER);
+ cairo_fill(cairo);
+
+#ifdef CURSOR_SURFACE
+ if (bd->cursor_surface.surface && bd->cursor_surface.show) {
+ cairo_set_source_surface(cairo,bd->cursor_surface.surface,0,0);
+ cairo_set_operator(cairo,CAIRO_OPERATOR_OVER);
+ cairo_rectangle(cairo,event->area.x, event->area.y,
+ event->area.width, event->area.height);
+ cairo_fill(cairo);
+ }
+#endif
+ cairo_destroy(cairo);
+
+ return TRUE;
}
@@ -929,32 +1199,113 @@ static gint draw_configure_event(
GdkEventConfigure *event,
wDraw_p bd)
{
- return FALSE;
+ return TRUE;
}
-static const char * actionNames[] = { "None", "Move", "LDown", "LDrag", "LUp", "RDown", "RDrag", "RUp", "Text", "ExtKey", "WUp", "WDown" };
+static const char * actionNames[] = { "None", "Move", "LDown", "LDrag", "LUp", "RDown", "RDrag", "RUp", "Text", "ExtKey", "WUp", "WDown", "DblL", "ModK", "ScrU", "ScrD", "ScrL", "ScrR" };
/**
* Handler for scroll events, ie mouse wheel activity
*/
+static int scrollTimer;
+static int timer_busy_count;
+static wAction_t lastAction;
+
+static int ScrollTimerPop(wDraw_p bd) {
+
+ if (timer_busy_count>1) {
+ timer_busy_count = 0;
+ scrollTimer = 0;
+ } else {
+ timer_busy_count++;
+ return TRUE;
+ }
+ if (drawVerbose >= 2)
+ printf( "%s-Pop\n", actionNames[lastAction] );
+ bd->action( bd, bd->context, lastAction, 0, 0 );
+
+ return FALSE;
+}
+
+
static gint draw_scroll_event(
GtkWidget *widget,
GdkEventScroll *event,
wDraw_p bd)
{
wAction_t action;
+ static int oldEventX = 0;
+ static int oldEventY = 0;
+ static int newEventX = 0;
+ static int newEventY = 0;
+
+ if (event->state & (GDK_SHIFT_MASK|GDK_BUTTON2_MASK|GDK_MOD1_MASK)) {
+
+ newEventX = OUTMAPX(bd, event->x);
+ newEventY = OUTMAPY(bd, event->y);
+ oldEventX = OUTMAPX(bd, event->x_root);
+ oldEventY = OUTMAPX(bd, event->y_root);
+
+ switch( event->direction ) {
+ case GDK_SCROLL_UP:
+ if (event->state & GDK_CONTROL_MASK)
+ action = wActionScrollRight;
+ else
+ action = wActionScrollUp;
+ break;
+ case GDK_SCROLL_DOWN:
+ if (event->state & GDK_CONTROL_MASK)
+ action = wActionScrollLeft;
+ else
+ action = wActionScrollDown;
+ break;
+ case GDK_SCROLL_LEFT:
+ action = wActionScrollLeft;
+ break;
+ case GDK_SCROLL_RIGHT:
+ action = wActionScrollRight;
+ break;
+ default:
+ return TRUE;
+ break;
+ }
- switch( event->direction ) {
- case GDK_SCROLL_UP:
- action = wActionWheelUp;
- break;
- case GDK_SCROLL_DOWN:
- action = wActionWheelDown;
- break;
- default:
- action = 0;
- break;
+ if (drawVerbose >= 2)
+ printf( "%sNew[%dx%d]Delta[%dx%d]\n", actionNames[action],
+ newEventX, newEventY, oldEventX, oldEventY );
+
+
+
+ if (scrollTimer) { // Already have a timer
+ lastAction = action;
+ return TRUE;
+ } else {
+ lastAction = action;
+ timer_busy_count = 0;
+ scrollTimer = g_timeout_add(25,(GSourceFunc)ScrollTimerPop,bd); // 25ms delay
+ return TRUE;
+ }
+
+
+ } else {
+
+ switch( event->direction ) {
+ case GDK_SCROLL_UP:
+ action = wActionWheelUp;
+ break;
+ case GDK_SCROLL_DOWN:
+ action = wActionWheelDown;
+ break;
+ case GDK_SCROLL_LEFT:
+ return TRUE;
+ break;
+ case GDK_SCROLL_RIGHT:
+ return TRUE;
+ break;
+ default:
+ break;
+ }
}
if (action != 0) {
@@ -973,7 +1324,7 @@ static gint draw_leave_event(
GdkEvent * event )
{
wlibHelpHideBalloon();
- return FALSE;
+ return TRUE;
}
@@ -996,6 +1347,7 @@ static gint draw_button_event(
switch ( event->button ) {
case 1: /* left mouse button */
action = event->type==GDK_BUTTON_PRESS?wActionLDown:wActionLUp;
+ if (event->type==GDK_2BUTTON_PRESS) action = wActionLDownDouble;
/*bd->action( bd, bd->context, event->type==GDK_BUTTON_PRESS?wActionLDown:wActionLUp, bd->lastX, bd->lastY );*/
break;
case 3: /* right mouse button */
@@ -1050,6 +1402,35 @@ static gint draw_motion_event(
return TRUE;
}
+static gint draw_char_release_event(
+ GtkWidget * widget,
+ GdkEventKey *event,
+ wDraw_p bd )
+{
+ GdkModifierType modifiers;
+ guint key = event->keyval;
+ wModKey_e modKey = wModKey_None;
+ switch (key) {
+ case GDK_KEY_Alt_L: modKey = wModKey_Alt; break;
+ case GDK_KEY_Alt_R: modKey = wModKey_Alt; break;
+ case GDK_KEY_Shift_L: modKey = wModKey_Shift; break;
+ case GDK_KEY_Shift_R: modKey = wModKey_Shift; break;
+ case GDK_KEY_Control_L: modKey = wModKey_Ctrl; break;
+ case GDK_KEY_Control_R: modKey = wModKey_Ctrl; break;
+ default: ;
+ }
+
+ if (modKey!= wModKey_None && (bd->option & BD_MODKEYS)) {
+ bd->action(bd, bd->context, wActionModKey+((int)modKey<<8), bd->lastX, bd->lastY );
+ if (!(bd->option & BD_NOFOCUS))
+ gtk_widget_grab_focus( bd->widget );
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+ return FALSE;
+}
+
static gint draw_char_event(
GtkWidget * widget,
@@ -1059,6 +1440,7 @@ static gint draw_char_event(
GdkModifierType modifiers;
guint key = event->keyval;
wAccelKey_e extKey = wAccelKey_None;
+ wModKey_e modKey = wModKey_None;
switch (key) {
case GDK_KEY_Escape: key = 0x1B; break;
case GDK_KEY_Return:
@@ -1092,17 +1474,37 @@ static gint draw_char_event(
case GDK_KEY_F10: extKey = wAccelKey_F10; break;
case GDK_KEY_F11: extKey = wAccelKey_F11; break;
case GDK_KEY_F12: extKey = wAccelKey_F12; break;
- default: ;
+ case GDK_KEY_Alt_L: modKey = wModKey_Alt; break;
+ case GDK_KEY_Alt_R: modKey = wModKey_Alt; break;
+ case GDK_KEY_Shift_L: modKey = wModKey_Shift; break;
+ case GDK_KEY_Shift_R: modKey = wModKey_Shift; break;
+ case GDK_KEY_Control_L: modKey = wModKey_Ctrl; break;
+ case GDK_KEY_Control_R: modKey = wModKey_Ctrl; break;
+ default: ;
}
if (extKey != wAccelKey_None) {
if ( wlibFindAccelKey( event ) == NULL ) {
bd->action( bd, bd->context, wActionExtKey + ((int)extKey<<8), bd->lastX, bd->lastY );
}
+ if (!(bd->option & BD_NOFOCUS))
+ gtk_widget_grab_focus( bd->widget );
+ return TRUE;
+ } else if ((key >=wAccelKey_Up) && (key<=wAccelKey_Left) && bd->action) {
+ bd->action( bd, bd->context, wActionText+(key<<8), bd->lastX, bd->lastY );
+ if (!(bd->option & BD_NOFOCUS))
+ gtk_widget_grab_focus( bd->widget );
return TRUE;
} else if (key <= 0xFF && (event->state&(GDK_CONTROL_MASK|GDK_MOD1_MASK)) == 0 && bd->action) {
bd->action( bd, bd->context, wActionText+(key<<8), bd->lastX, bd->lastY );
+ if (!(bd->option & BD_NOFOCUS))
+ gtk_widget_grab_focus( bd->widget );
return TRUE;
+ } else if (modKey!= wModKey_None && (bd->option & BD_MODKEYS)) {
+ bd->action(bd, bd->context, wActionModKey+((int)modKey<<8), bd->lastX, bd->lastY );
+ if (!(bd->option & BD_NOFOCUS))
+ gtk_widget_grab_focus( bd->widget );
+ return TRUE;
} else {
return FALSE;
}
@@ -1140,6 +1542,7 @@ int xw, xh, cw, ch;
bd->context = context;
bd->redraw = redraw;
bd->action = action;
+ bd->bTempMode = FALSE;
wlibComputePos( (wControl_p)bd );
bd->widget = gtk_drawing_area_new();
@@ -1159,6 +1562,8 @@ int xw, xh, cw, ch;
(GtkSignalFunc) draw_scroll_event, bd);
gtk_signal_connect_after (GTK_OBJECT (bd->widget), "key_press_event",
(GtkSignalFunc) draw_char_event, bd);
+ gtk_signal_connect_after (GTK_OBJECT (bd->widget), "key_release_event",
+ (GtkSignalFunc) draw_char_release_event, bd);
gtk_signal_connect (GTK_OBJECT (bd->widget), "leave_notify_event",
(GtkSignalFunc) draw_leave_event, bd);
gtk_widget_set_can_focus(bd->widget,!(option & BD_NOFOCUS));
@@ -1168,7 +1573,7 @@ int xw, xh, cw, ch;
| GDK_LEAVE_NOTIFY_MASK
| GDK_BUTTON_PRESS_MASK
| GDK_BUTTON_RELEASE_MASK
-/* | GDK_SCROLL_MASK */
+ | GDK_SCROLL_MASK
| GDK_POINTER_MOTION_MASK
| GDK_POINTER_MOTION_HINT_MASK
| GDK_KEY_PRESS_MASK
@@ -1182,6 +1587,8 @@ int xw, xh, cw, ch;
wlibControlGetSize( (wControl_p)bd );
gtk_widget_realize( bd->widget );
bd->pixmap = gdk_pixmap_new( bd->widget->window, width, height, -1 );
+ bd->temp_surface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width,height );
+ wDrawClear(bd);
bd->gc = gdk_gc_new( parent->gtkwin->window );
gdk_gc_copy( bd->gc, parent->gtkwin->style->base_gc[GTK_STATE_NORMAL] );
{
@@ -1219,6 +1626,7 @@ wDraw_p wBitMapCreate( wPos_t w, wPos_t h, int arg )
bd->maxH = bd->h = h;
bd->pixmap = gdk_pixmap_new( gtkMainW->widget->window, w, h, -1 );
+ bd->widget = gtk_pixmap_new(bd->pixmap, NULL);
if ( bd->pixmap == NULL ) {
wNoticeEx( NT_ERROR, "CreateBitMap: pixmap_new failed", "Ok", NULL );
return FALSE;
@@ -1242,3 +1650,76 @@ wBool_t wBitMapDelete( wDraw_p d )
return TRUE;
}
+/*******************************************************************************
+ *
+ * Background
+ *
+ ******************************************************************************/
+int wDrawSetBackground( wDraw_p bd, char * path, char ** error) {
+
+ GError *err = NULL;
+
+ if (bd->background) {
+ g_object_unref(bd->background);
+ }
+
+ if (path) {
+ bd->background = gdk_pixbuf_new_from_file (path, &err);
+ if (!bd->background) {
+ *error = err->message;
+ return -1;
+ }
+ } else {
+ bd->background = NULL;
+ return 1;
+ }
+ return 0;
+
+}
+
+void wDrawShowBackground( wDraw_p bd, wPos_t pos_x, wPos_t pos_y, wPos_t size, wAngle_t angle, int screen) {
+
+ if (bd->background) {
+ cairo_t* cairo = gtkDrawCreateCairoContext(bd, NULL, 0, wDrawLineSolid, wDrawColorWhite, bd->bTempMode?wDrawOptTemp:0 );
+ cairo_save(cairo);
+ int pixels_width = gdk_pixbuf_get_width(bd->background);
+ int pixels_height = gdk_pixbuf_get_height(bd->background);
+ double scale;
+ double posx,posy,width,sized;
+ posx = (double)pos_x;
+ posy = (double)pos_y;
+ if (size == 0) {
+ scale = 1.0;
+ } else {
+ sized = (double)size;
+ width = (double)pixels_width;
+ scale = sized/width;
+ }
+ cairo_set_operator(cairo, CAIRO_OPERATOR_OVER);
+ double rad = M_PI*(angle/180);
+ posy = (double)bd->h-((pixels_height*fabs(cos(rad))+pixels_width*fabs(sin(rad)))*scale)-posy;
+ //width = (double)(pixels_width*scale);
+ //height = (double)(pixels_height*scale);
+ cairo_translate(cairo,posx,posy);
+ cairo_scale(cairo, scale, scale);
+ cairo_translate(cairo, fabs(pixels_width/2.0*cos(rad))+fabs(pixels_height/2.0*sin(rad)),
+ fabs(pixels_width/2.0*sin(rad))+fabs(pixels_height/2.0*cos(rad)));
+ cairo_rotate(cairo, M_PI*(angle/180.0));
+ // We need to clip around the image, or cairo will paint garbage data
+ cairo_rectangle(cairo, -pixels_width/2.0, -pixels_height/2.0, pixels_width, pixels_height);
+ cairo_clip(cairo);
+ gdk_cairo_set_source_pixbuf(cairo, bd->background, -pixels_width/2.0, -pixels_height/2.0);
+ cairo_pattern_t *mask = cairo_pattern_create_rgba (1.0,1.0,1.0,(100.0-screen)/100.0);
+ cairo_mask(cairo,mask);
+ cairo_pattern_destroy(mask);
+ cairo_restore(cairo);
+ gtkDrawDestroyCairoContext(cairo);
+
+ gtk_widget_queue_draw(bd->widget);
+ }
+
+}
+
+
+
+
diff --git a/app/wlib/gtklib/gtkint.h b/app/wlib/gtklib/gtkint.h
index 2e0511a..410fd7f 100644
--- a/app/wlib/gtklib/gtkint.h
+++ b/app/wlib/gtklib/gtkint.h
@@ -32,7 +32,9 @@
#define strcasecmp _stricmp
#endif
+#ifndef MISC_H
#include "dynarr.h"
+#endif
#define BORDERSIZE (4)
#define LABEL_OFFSET (3)
@@ -40,6 +42,16 @@
extern wWin_p gtkMainW;
+#ifdef CURSOR_SURFACE
+typedef struct {
+ cairo_surface_t* surface;
+ wPos_t width;
+ wPos_t height;
+ wBool_t show;
+} wCursorSurface_t, * wSurface_p;
+#endif
+
+
typedef enum {
W_MAIN, W_POPUP,
B_BUTTON, B_CANCEL, B_POPUP, B_TEXT, B_INTEGER, B_FLOAT,
@@ -59,6 +71,7 @@ typedef void (*setTriggerCallback_p)( wControl_p b );
wWin_p parent; \
wPos_t origX, origY; \
wPos_t realX, realY; \
+ wPos_t default_size_x, default_size_y; \
wPos_t labelW; \
wPos_t w, h; \
int maximize_initially; \
@@ -68,6 +81,8 @@ typedef void (*setTriggerCallback_p)( wControl_p b );
GtkWidget * widget; \
GtkWidget * label; \
doneProcCallback_p doneProc; \
+ /* CURSOR_SURFACE wCursorSurface_t cursor_surface;*/ \
+ wBool_t outline; \
void * data;
struct wWin_t {
@@ -171,6 +186,7 @@ typedef struct {
GdkColor *wlibGetColor(wDrawColor color, wBool_t normal);
/* control.c */
+wBool_t wControlExpose (GtkWidget * widget, GdkEventExpose * event, wControl_p b);
/* droplist.c */
enum columns {
@@ -191,7 +207,7 @@ wList_p wDropListCreate(wWin_p parent, wPos_t x, wPos_t y, const char *helpStr,
/* filesel.c */
/* font.c */
-PangoLayout *wlibFontCreatePangoLayout(GtkWidget *widget, void *cairo, wFont_p fp, wFontSize_t fs, const char *s, int *width_p, int *height_p, int *ascent_p, int *descent_p);
+PangoLayout *wlibFontCreatePangoLayout(GtkWidget *widget, void *cairo, wFont_p fp, wFontSize_t fs, const char *s, int *width_p, int *height_p, int *ascent_p, int *descent_p, int *baseline_p);
void wlibFontDestroyPangoLayout(PangoLayout *layout);
const char *wlibFontTranslate(wFont_p fp);
@@ -255,6 +271,7 @@ struct wDraw_t {
GdkPixmap * pixmap;
GdkPixmap * pixmapBackup;
+ cairo_surface_t * temp_surface;
double dpi;
@@ -273,6 +290,9 @@ struct wDraw_t {
wBool_t delayUpdate;
cairo_t *printContext;
cairo_surface_t *curPrintSurface;
+ GdkPixbuf * background;
+
+ wBool_t bTempMode;
};
void WlibApplySettings(GtkPrintOperation *op);
@@ -280,7 +300,7 @@ void WlibSaveSettings(GtkPrintOperation *op);
void psPrintLine(wPos_t x0, wPos_t y0, wPos_t x1, wPos_t y1, wDrawWidth width, wDrawLineType_e lineType, wDrawColor color, wDrawOpts opts);
void psPrintArc(wPos_t x0, wPos_t y0, wPos_t r, double angle0, double angle1, wBool_t drawCenter, wDrawWidth width, wDrawLineType_e lineType, wDrawColor color, wDrawOpts opts);
void psPrintFillRectangle(wPos_t x0, wPos_t y0, wPos_t x1, wPos_t y1, wDrawColor color, wDrawOpts opts);
-void psPrintFillPolygon(wPos_t p[][2], int cnt, wDrawColor color, wDrawOpts opts);
+void psPrintFillPolygon(wPos_t p[][2], wPolyLine_e type[], int cnt, wDrawColor color, wDrawOpts opts, int fill, int open);
void psPrintFillCircle(wPos_t x0, wPos_t y0, wPos_t r, wDrawColor color, wDrawOpts opts);
void psPrintString(wPos_t x, wPos_t y, double a, char *s, wFont_p fp, double fs, wDrawColor color, wDrawOpts opts);
static void WlibGetPaperSize(void);
diff --git a/app/wlib/gtklib/help.c b/app/wlib/gtklib/help.c
index dbb69f6..8f2766d 100644
--- a/app/wlib/gtklib/help.c
+++ b/app/wlib/gtklib/help.c
@@ -28,9 +28,12 @@
#include <gtk/gtk.h>
#include <gdk/gdk.h>
+#include "misc.h"
+
#include "gtkint.h"
#include "i18n.h"
+
/**
* Handle the commands issued from the Help drop-down. Currently, we only have a table
* of contents, but search etc. might be added in the future.
@@ -44,11 +47,19 @@ DoHelpMenu(void *data)
{
int func = (intptr_t)data;
+ const char * topic;
+
switch (func) {
case 1:
wHelp("index");
break;
+ case 3:
+ topic = GetCurCommandName();
+ if (topic && topic[0])
+ wHelp(topic);
+ break;
+
default:
break;
}
@@ -56,6 +67,10 @@ DoHelpMenu(void *data)
return;
}
+void wDoAccelHelp(wAccelKey_e key, void * context) {
+ DoHelpMenu(context);
+}
+
/**
* Add the entries for Help to the drop-down.
*
@@ -66,4 +81,5 @@ DoHelpMenu(void *data)
void wMenuAddHelp(wMenu_p m)
{
wMenuPushCreate(m, NULL, _("&Contents"), 0, DoHelpMenu, (void*)1);
+ wMenuPushCreate(m, NULL, _("Co&mmand Context help"), 0, DoHelpMenu, (void*)3);
}
diff --git a/app/wlib/gtklib/ixhelp.c b/app/wlib/gtklib/ixhelp.c
index f1e3983..5079f61 100644
--- a/app/wlib/gtklib/ixhelp.c
+++ b/app/wlib/gtklib/ixhelp.c
@@ -404,6 +404,13 @@ void wHelp(const char * topic)
{
char *htmlFile;
+ //Take off any topic characters after a '-'
+
+ if (!topic || !topic[0]) return;
+
+
+ if (!CheckHelpTopicExists(topic)) return;
+
if (!wHelpWindow) {
directory = malloc(BUFSIZ);
assert(directory != NULL);
@@ -417,6 +424,7 @@ void wHelp(const char * topic)
/* need space for the 'html' extension plus dot plus \0 */
htmlFile = malloc(strlen(topic) + 6);
+
assert(htmlFile != NULL);
sprintf(htmlFile, "%s.html", topic);
@@ -424,4 +432,6 @@ void wHelp(const char * topic)
load_into_view(htmlFile, MAIN_VIEW);
gtk_widget_show_all(wHelpWindow);
gtk_window_present(GTK_WINDOW(wHelpWindow));
+
+ free(htmlFile);
}
diff --git a/app/wlib/gtklib/list.c b/app/wlib/gtklib/list.c
index 8e99efe..ac66aba 100644
--- a/app/wlib/gtklib/list.c
+++ b/app/wlib/gtklib/list.c
@@ -238,6 +238,7 @@ wIndex_t wListGetValues(
if (bl->type == B_DROPLIST && bl->editted) {
entry_value = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(
bl->widget))));
+ item_data = NULL;
inx = bl->last = -1;
} else {
inx = bl->last;
@@ -404,6 +405,8 @@ void wListDelete(
NULL,
inx);
gtk_list_store_remove(b->listStore, &iter);
+
+
b->count--;
}
@@ -486,7 +489,7 @@ wIndex_t wListAddValue(
wlibTreeViewAddRow(b, (char *)labelStr, bm, id_p);
}
- free(id_p->label);
+ //free(id_p->label);
b->count++;
b->recursion--;
diff --git a/app/wlib/gtklib/liststore.c b/app/wlib/gtklib/liststore.c
index 820366a..088bf33 100644
--- a/app/wlib/gtklib/liststore.c
+++ b/app/wlib/gtklib/liststore.c
@@ -127,6 +127,8 @@ wlibListStoreClear(GtkListStore *listStore)
id_p = wlibListStoreGetContext(listStore, i++);
while (id_p) {
+ if (id_p->label)
+ g_free(id_p->label);
g_free(id_p);
id_p = wlibListStoreGetContext(listStore, i++);
}
diff --git a/app/wlib/gtklib/menu.c b/app/wlib/gtklib/menu.c
index d19805a..79695d4 100644
--- a/app/wlib/gtklib/menu.c
+++ b/app/wlib/gtklib/menu.c
@@ -555,7 +555,7 @@ wMenuList_p wMenuListCreate(
* behind it. In case the maximum number of items is reached the last item is removed.
*
* \param ml IN handle for the menu list - the placeholder item
- * \param index IN currently ignored
+ * \param index IN position of new menu item
* \param labelStr IN the menu label for the new item
* \param data IN application data for the new item
* \return
@@ -611,7 +611,11 @@ void wMenuListAdd(
g_object_set_data( G_OBJECT(MMENUITEM( mi )), WLISTITEM, mi );
// add the item to the menu
- gtk_menu_shell_insert((GtkMenuShell *)(MPARENT( ml )->menu), MMENUITEM( mi ), i + 1 );
+ if ( index < 0 )
+ index = 0;
+ if ( index >= ml->count )
+ index = ml->count - 1;
+ gtk_menu_shell_insert((GtkMenuShell *)(MPARENT( ml )->menu), MMENUITEM( mi ), i + index + 1 );
g_signal_connect( GTK_OBJECT(MMENUITEM( mi )), "activate", G_CALLBACK(pushMenuList), mi );
gtk_widget_show(MMENUITEM( mi ));
diff --git a/app/wlib/gtklib/notice.c b/app/wlib/gtklib/notice.c
index b72afd6..0134b4f 100644
--- a/app/wlib/gtklib/notice.c
+++ b/app/wlib/gtklib/notice.c
@@ -58,8 +58,13 @@ static void doNotice(
GtkWidget * widget,
long value)
{
- noticeValue = value;
- gtk_widget_destroy(noticeW.win);
+ if (value != 2) {
+ // event not from from closing the window but from a button press
+ // Close the Notice dialog
+ gtk_widget_destroy(noticeW.win);
+ // Remember the button
+ noticeValue = value;
+ }
wlibDoModal(NULL, FALSE);
}
@@ -106,6 +111,8 @@ int wNoticeEx(int type,
parent = GTK_WINDOW(gtkMainW->gtkwin);
}
+ wDestroySplash();
+
dialog = gtk_message_dialog_new(parent,
GTK_DIALOG_DESTROY_WITH_PARENT,
flag,
@@ -113,6 +120,8 @@ int wNoticeEx(int type,
"%s", msg);
gtk_window_set_title(GTK_WINDOW(dialog), headline);
+ gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
+
res = gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
@@ -174,6 +183,7 @@ int wNotice3(
char *can = NULL;
char *alt = NULL;
+ wDestroySplash();
nw->win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
@@ -243,6 +253,9 @@ int wNotice3(
}
}
+ g_signal_connect(GTK_WINDOW(nw->win),
+ "destroy", G_CALLBACK(doNotice), (void*)2);
+
gtk_widget_grab_default(nw->butt[ 0 ]);
gtk_widget_grab_focus(nw->butt[ 0 ]);
@@ -253,6 +266,7 @@ int wNotice3(
/* gdk_window_set_group( nw->win->window, gtkMainW->gtkwin->window ); */
}
+ noticeValue = 0; // Default: Cancel
wlibDoModal(NULL, TRUE);
if (aff) {
diff --git a/app/wlib/gtklib/opendocument.c b/app/wlib/gtklib/opendocument.c
new file mode 100644
index 0000000..c03f9cb
--- /dev/null
+++ b/app/wlib/gtklib/opendocument.c
@@ -0,0 +1,117 @@
+/** \file opendocument.c
+ * open a document using the systems default application for that doc
+ */
+
+/* XTrkCad - Model Railroad CAD
+ * Copyright (C) 2018 Martin Fischer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+#include "gtkint.h"
+#include "i18n.h"
+
+#include "dynstring.h"
+
+#if defined (_WIN32)
+
+#define DEFAULTOPENCOMMAND "start"
+
+#endif
+
+#if defined(__APPLE__) && defined(__MACH__)
+
+#define DEFAULTOPENCOMMAND "open"
+
+#else
+
+#define DEFAULTOPENCOMMAND "xdg-open"
+
+#endif
+
+/**
+ * Extend the PATH variable in the environment to include XTrackCAD's
+ * script directory.
+ *
+ * \return pointer to old path
+ */
+
+static char *
+ExtendPath(void)
+{
+ char *path = strdup(getenv("PATH"));
+ DynString newPath;
+ DynStringMalloc(&newPath, 16);
+
+ // append XTrackCAD's directory to the path as a fallback
+ DynStringCatCStrs(&newPath,
+ path,
+ ":",
+ wGetAppLibDir(),
+ NULL);
+
+ setenv("PATH",
+ DynStringToCStr(&newPath),
+ TRUE);
+
+ DynStringFree(&newPath);
+
+ return (path);
+}
+
+/**
+ * Invoke the system's default application to open a file. First the
+ * system's standard xdg-open command is attempted. If that is not available, the
+ * version included with the XTrackCAD installation is executed.
+ *
+ * \param topic IN URI of document
+ */
+
+unsigned wOpenFileExternal(char * filename)
+{
+ int rc;
+ DynString commandLine;
+ char *currentPath;
+
+ assert(filename != NULL);
+ assert(strlen(filename));
+
+ currentPath = ExtendPath();
+
+ DynStringMalloc(&commandLine, 16);
+ DynStringCatCStrs(&commandLine,
+ DEFAULTOPENCOMMAND,
+ " \"",
+ filename,
+ "\"",
+ NULL);
+
+ // the command should be found via the PATH
+ rc = system(DynStringToCStr(&commandLine));
+
+ // restore the PATH
+ setenv("PATH",
+ currentPath,
+ TRUE);
+
+ free(currentPath);
+ DynStringFree(&commandLine);
+
+ return(rc==0);
+}
diff --git a/app/wlib/gtklib/osxhelp.c b/app/wlib/gtklib/osxhelp.c
index 829ec94..4ec1f5e 100644
--- a/app/wlib/gtklib/osxhelp.c
+++ b/app/wlib/gtklib/osxhelp.c
@@ -28,6 +28,7 @@
#include <errno.h>
#include <fcntl.h>
+#include "misc.h"
#include "gtkint.h"
#include "i18n.h"
@@ -39,6 +40,7 @@ static pid_t pidOfChild;
static int handleOfPipe;
extern char *wExecutableName;
+
/**
* Create the fully qualified filename for the help helper
*
@@ -70,14 +72,21 @@ char *ChildProgramFile(char *parentProgram)
void wHelp(const char * topic)
{
pid_t newPid;
- int len;
int status;
const char html[] = ".html";
+ static char *directory; /**< base directory for HTML files */
+ char * htmlFile;
+
+ struct {
+ int length;
char *page;
-
+ } buffer;
+
+ if (!CheckHelpTopicExists(topic)) return;
+
// check whether child already exists
if (pidOfChild != 0) {
- if (waitpid(pidOfChild, &status, WNOHANG) > 0) {
+ if (waitpid(pidOfChild, &status, WNOHANG) < 0) {
// child exited -> clean up
close(handleOfPipe);
unlink(HELPCOMMANDPIPE);
@@ -88,7 +97,8 @@ void wHelp(const char * topic)
// (re)start child
if (pidOfChild == 0) {
- mkfifo(HELPCOMMANDPIPE, 0666);
+ unlink(HELPCOMMANDPIPE);
+ int rc = mkfifo(HELPCOMMANDPIPE, 0666);
newPid = fork(); /* New process starts here */
if (newPid > 0) {
@@ -107,27 +117,46 @@ void wHelp(const char * topic)
}
}
- if (!handleOfPipe) {
- handleOfPipe = open(HELPCOMMANDPIPE, O_WRONLY);
-
- if (handleOfPipe < 0) {
- kill(pidOfChild, SIGKILL); /* tidy up on next call */
- }
+ buffer.page = malloc(sizeof(int)+strlen(topic) + strlen(html) + 1);
+ if (!buffer.page) {
+ return;
}
- page = malloc(strlen(topic) + strlen(html) + 1);
+ strcpy(buffer.page, topic);
+ strcat(buffer.page, html);
+ buffer.length = strlen(buffer.page);
- if (!page) {
- return;
+ if (buffer.length>255) {
+ printf("Help Topic too long %s", buffer.page);
+ return;
}
- strcpy(page, topic);
- strcat(page, html);
- len = strlen(page);
+ if (!handleOfPipe) {
+ handleOfPipe = open(HELPCOMMANDPIPE, O_WRONLY);
+
+ if (handleOfPipe < 0) {
+ if (pidOfChild)
+ kill(pidOfChild, SIGKILL); /* tidy up on next call */
+ handleOfPipe = 0;
+ return;
+ }
+
+ }
+
+ int written = 0;
+ int towrite = sizeof(int);
+
+ while (written < towrite){
+ written += write(handleOfPipe, &buffer.length, sizeof(int));
+ }
+ written =0;
+ towrite = strlen(buffer.page);
+ while (written < towrite){
+ written += write(handleOfPipe, buffer.page+written, towrite-written);
+ }
- write(handleOfPipe, &len, sizeof(int));
- write(handleOfPipe, page, strlen(page)+1);
+ fsync(handleOfPipe);
- free(page);
+ free(buffer.page);
}
diff --git a/app/wlib/gtklib/print.c b/app/wlib/gtklib/print.c
index 8e96e3b..860a7c7 100644
--- a/app/wlib/gtklib/print.c
+++ b/app/wlib/gtklib/print.c
@@ -70,9 +70,9 @@ extern wDrawColor wDrawColorBlack;
*
*/
-static GtkPrintSettings *settings; /**< current printer settings */
+static GtkPrintSettings *settings = NULL; /**< current printer settings */
static GtkPageSetup *page_setup; /**< current paper settings */
-static GtkPrinter *selPrinter; /**< printer selected by user */
+static GtkPrinter *selPrinter = NULL; /**< printer selected by user */
static GtkPrintJob *curPrintJob; /**< currently active print job */
extern struct wDraw_t psPrint_d;
@@ -131,7 +131,6 @@ WlibApplySettings(GtkPrintOperation *op)
// create default print settings
settings = gtk_print_settings_new();
}
-
g_error_free(err);
}
@@ -247,12 +246,13 @@ void wPrintSetup(wPrintSetupCallBack_p callback)
GError *err;
GtkWidget *dialog;
- WlibApplySettings(NULL);
+ if ( !settings )
+ WlibApplySettings(NULL);
new_page_setup = gtk_print_run_page_setup_dialog(GTK_WINDOW(gtkMainW->gtkwin),
page_setup, settings);
- if (page_setup) {
+ if (page_setup && (page_setup != new_page_setup)) { //Can be the same if no mods...
g_object_unref(page_setup);
}
@@ -264,6 +264,51 @@ void wPrintSetup(wPrintSetupCallBack_p callback)
/*****************************************************************************
*
+ *
+ *
+ */
+
+
+static GtkPrinter * pDefaultPrinter = NULL;
+gboolean isDefaultPrinter( GtkPrinter * printer, gpointer data )
+{
+const char * pPrinterName = gtk_printer_get_name( printer );
+ if ( gtk_printer_is_default( printer ) ) {
+ pDefaultPrinter = printer;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void getDefaultPrinter()
+{
+ pDefaultPrinter = NULL;
+ gtk_enumerate_printers( isDefaultPrinter, NULL, NULL, TRUE );
+}
+
+const char * wPrintGetName()
+{
+ static char sPrinterName[100];
+ WlibApplySettings( NULL );
+ const char * pPrinterName =
+ gtk_print_settings_get( settings, "format-for-printer" );
+ if ( pPrinterName == NULL ) {
+ getDefaultPrinter();
+ if ( pDefaultPrinter )
+ pPrinterName = gtk_printer_get_name( pDefaultPrinter );
+ }
+ if ( pPrinterName == NULL ) {
+ pPrinterName = "";
+ }
+ strncpy (sPrinterName, pPrinterName, sizeof sPrinterName - 1 );
+ sPrinterName[ sizeof sPrinterName - 1 ] = '\0';
+ for ( char * cp = sPrinterName; *cp; cp++ )
+ if ( *cp == ':' )
+ *cp = '-';
+ return sPrinterName;
+}
+/*****************************************************************************
+ *
* BASIC PRINTING
*
*/
@@ -299,12 +344,53 @@ static void setLineType(
}
cairo_set_line_width(cr, lineWidth);
-
- if (lineType == wDrawLineDash) {
- cairo_set_dash(cr, dashes, len_dashes, 0.0);
- } else {
- cairo_set_dash(cr, NULL, 0, 0.0);
+ switch(lineType) {
+ case wDrawLineDot:
+ {
+ double dashes[] = { 1, 2 , 1, 2};
+ static int len_dashes = sizeof(dashes) / sizeof(dashes[0]);
+ cairo_set_dash(cr, dashes, len_dashes, 0.0);
+ break;
+ }
+ case wDrawLineDash:
+ {
+ double dashes[] = { DASH_LENGTH, 3 }; //Reduce gap in between dashes
+ static int len_dashes = sizeof(dashes) / sizeof(dashes[0]);
+ cairo_set_dash(cr, dashes, len_dashes, 0.0);
+ break;
+ }
+ case wDrawLineDashDot:
+ {
+ double dashes[] = { 3, 2, 1, 2};
+ static int len_dashes = sizeof(dashes) / sizeof(dashes[0]);
+ cairo_set_dash(cr, dashes, len_dashes, 0.0);
+ break;
+ }
+ case wDrawLineDashDotDot:
+ {
+ double dashes[] = { 3, 2, 1, 2, 1, 2};
+ static int len_dashes = sizeof(dashes) / sizeof(dashes[0]);
+ cairo_set_dash(cr, dashes, len_dashes, 0.0);
+ break;
+ }
+ case wDrawLineCenter:
+ {
+ double dashes[] = { 1.5*DASH_LENGTH, 3, DASH_LENGTH, 3};
+ static int len_dashes = sizeof(dashes) / sizeof(dashes[0]);
+ cairo_set_dash(cr, dashes, len_dashes, 0.0);
+ break;
+ }
+ case wDrawLinePhantom:
+ {
+ double dashes[] = { 1.5*DASH_LENGTH, 3, DASH_LENGTH, 3, DASH_LENGTH, 3};
+ static int len_dashes = sizeof(dashes) / sizeof(dashes[0]);
+ cairo_set_dash(cr, dashes, len_dashes, 0.0);
+ break;
+ }
+ default:
+ cairo_set_dash(cr, NULL, 0, 0.0);
}
+
}
/**
@@ -479,14 +565,18 @@ void psPrintFillRectangle(
* \param cnt IN the number of points
* \param color IN fill color
* \param opts IN options
+ * \paran fill IN Fill or not
* \return
*/
void psPrintFillPolygon(
wPos_t p[][2],
+ wPolyLine_e type[],
int cnt,
wDrawColor color,
- wDrawOpts opts)
+ wDrawOpts opts,
+ int fill,
+ int open )
{
int inx;
cairo_t *cr = psPrint_d.printContext;
@@ -501,13 +591,67 @@ void psPrintFillPolygon(
psSetColor(color);
- cairo_move_to(cr, p[ 0 ][ 0 ], p[ 0 ][ 1 ]);
+ wPos_t mid0[2], mid1[2], mid2[2], mid3[2], mid4[2];
for (inx=0; inx<cnt; inx++) {
- cairo_line_to(cr, p[ inx ][ 0 ], p[ inx ][ 1 ]);
+ int j = inx-1;
+ int k = inx+1;
+ if (j < 0) j = cnt-1;
+ if (k > cnt-1) k = 0;
+ double len0, len1;
+ double d0x = (p[inx][0]-p[j][0]);
+ double d0y = (p[inx][1]-p[j][1]);
+ double d1x = (p[k][0]-p[inx][0]);
+ double d1y = (p[k][1]-p[inx][1]);
+ len0 = (d0x*d0x+d0y*d0y);
+ len1 = (d1x*d1x+d1y*d1y);
+ mid0[0] = (d0x/2)+p[j][0];
+ mid0[1] = (d0y/2)+p[j][1];
+ mid1[0] = (d1x/2)+p[inx][0];
+ mid1[1] = (d1y/2)+p[inx][1];
+ if (type && (type[inx] == wPolyLineRound) && (len1>0) && (len0>0)) {
+ double ratio = sqrt(len0/len1);
+ if (len0 < len1) {
+ mid1[0] = ((d1x*ratio)/2)+p[inx][0];
+ mid1[1] = ((d1y*ratio)/2)+p[inx][1];
+ } else {
+ mid0[0] = p[inx][0]-(d0x/(2*ratio));
+ mid0[1] = p[inx][1]-(d0y/(2*ratio));
+ }
+ }
+ mid3[0] = (p[inx][0]-mid0[0])/2+mid0[0];
+ mid3[1] = (p[inx][1]-mid0[1])/2+mid0[1];
+ mid4[0] = (mid1[0]-p[inx][0])/2+p[inx][0];
+ mid4[1] = (mid1[1]-p[inx][1])/2+p[inx][1];
+ wPos_t save[2];
+ if (inx==0) {
+ if (!type || (type && type[0] == wPolyLineStraight) || open) {
+ cairo_move_to(cr, p[ 0 ][ 0 ], p[ 0 ][ 1 ]);
+ save[0] = p[0][0]; save[1] = p[0][1];
+ } else {
+ cairo_move_to(cr, mid0[0], mid0[1]);
+ if (type[inx] == wPolyLineSmooth)
+ cairo_curve_to(cr, p[inx][0], p[inx][1], p[inx][0], p[inx][1], mid1[0], mid1[1]);
+ else
+ cairo_curve_to(cr, mid3[0], mid3[1], mid4[0], mid4[1], mid1[0], mid1[1]);
+ save[0] = mid0[0]; save[1] = mid0[1];
+ }
+ } else if (!type || (type && type[inx] == wPolyLineStraight) || (open && (inx==cnt-1)) ) {
+ cairo_line_to(cr, p[ inx ][ 0 ], p[ inx ][ 1 ]);
+ } else {
+ cairo_line_to(cr, mid0[ 0 ], mid0[ 1 ]);
+ if (type && type[inx] == wPolyLineSmooth)
+ cairo_curve_to(cr, p[inx][0],p[inx][1],p[inx][0],p[inx][1],mid1[0],mid1[1]);
+ else
+ cairo_curve_to(cr, mid3[0],mid3[1],mid4[0],mid4[1],mid1[0],mid1[1]);
+ }
+ if ((inx==cnt-1) && !open) {
+ cairo_line_to(cr, save[0], save[1]);
+ }
}
- cairo_fill(cr);
+ if (fill && !open) cairo_fill(cr);
+ else cairo_stroke(cr);
}
/**
@@ -602,6 +746,7 @@ void psPrintString(
cairo_matrix_transform_point(&matrix, &x0, &y0);
+ cairo_identity_matrix(cr);
layout = pango_cairo_create_layout(cr);
@@ -609,7 +754,6 @@ void psPrintString(
/** \todo use a getter function instead of double conversion */
desc = pango_font_description_from_string(wlibFontTranslate(fp));
-
pango_font_description_set_size(desc, fs * PANGO_SCALE * scale_text);
// render the string to a Pango layout
@@ -617,28 +761,41 @@ void psPrintString(
pango_layout_set_text(layout, s, -1);
pango_layout_set_width(layout, -1);
pango_layout_set_alignment(layout, PANGO_ALIGN_LEFT);
- pango_layout_get_pixel_size(layout, &text_width, &text_height);
+ pango_layout_get_size(layout, &text_width, &text_height);
+
+ text_width = text_width / PANGO_SCALE;
+ text_height = text_height / PANGO_SCALE;
// get the height of the string
pcontext = pango_cairo_create_context(cr);
metrics = pango_context_get_metrics(pcontext, desc,
pango_context_get_language(pcontext));
- ascent = pango_font_metrics_get_ascent(metrics) / PANGO_SCALE *scale_adjust;
-
- cairo_identity_matrix(cr);
+ ascent = pango_font_metrics_get_ascent(metrics) / PANGO_SCALE;
- cairo_translate(cr, x0 + ((ascent + (bBorder*scale_adjust)) * sin(-a * M_PI / 180.0))+((lBorder*scale_adjust)* cos(a * M_PI / 180.0)),
- y0 - ((ascent + (bBorder*scale_adjust)) * cos( a * M_PI / 180.0))+((lBorder*scale_adjust)* sin(a * M_PI / 180.0)));
+ int baseline = pango_layout_get_baseline(layout) / PANGO_SCALE;
+ cairo_translate(cr, x0, y0 );
cairo_rotate(cr, -a * M_PI / 180.0);
+ cairo_translate( cr, 0, -baseline );
+
+ cairo_move_to(cr,0,0);
+
+ pango_cairo_update_layout(cr, layout);
+
// set the color
psSetColor(color);
// and show the string
- pango_cairo_show_layout(cr, layout);
-
+ if(!(opts & wDrawOutlineFont)) {
+ pango_cairo_show_layout(cr, layout);
+ } else {
+ PangoLayoutLine *line;
+ line = pango_layout_get_line_readonly (layout, 0);
+ pango_cairo_layout_line_path (cr, line);
+ cairo_stroke( cr );
+ }
// free unused objects
g_object_unref(layout);
g_object_unref(pcontext);
@@ -704,21 +861,20 @@ WlibGetPaperSize(void)
* \return
*/
-void wPrintGetPageSize(
- double * w,
- double * h)
-{
- // if necessary load the settings
- if (!settings) {
- WlibApplySettings(NULL);
- }
-
- WlibGetPaperSize();
- *w = paperWidth -lBorder - rBorder;
- *h = paperHeight - tBorder - bBorder;
+void wPrintGetMargins(
+ double * tMargin,
+ double * rMargin,
+ double * bMargin,
+ double * lMargin )
+{
+ if ( tMargin ) *tMargin = tBorder;
+ if ( rMargin ) *rMargin = rBorder;
+ if ( bMargin ) *bMargin = bBorder;
+ if ( lMargin ) *lMargin = lBorder;
}
+
/**
* Get the paper size. The size returned is the physical size of the
* currently selected paper.
@@ -727,7 +883,7 @@ void wPrintGetPageSize(
* \return
*/
-void wPrintGetPhysSize(
+void wPrintGetPageSize(
double * w,
double * h)
{
@@ -854,13 +1010,13 @@ wBool_t wPrintDocStart(const char * title, int fTotalPageCount, int * copiesP)
NULL);
psPrint_d.printContext = cairo_create(psPrint_d.curPrintSurface);
+ WlibApplySettings( NULL );
//update the paper dimensions
WlibGetPaperSize();
/* for all surfaces including files the resolution is always 72 ppi (as all GTK uses PDF) */
surface_type = cairo_surface_get_type(psPrint_d.curPrintSurface);
- const char * printer_name = gtk_print_settings_get_printer(settings);
/*
* Override up-scaling for some printer drivers/Linux systems that don't support the latest CUPS
* - the user sets the environment variable XTRKCADPRINTSCALE to a value
@@ -871,7 +1027,8 @@ wBool_t wPrintDocStart(const char * title, int fTotalPageCount, int * copiesP)
*/
char * sEnvScale = PRODUCT "PRINTSCALE";
- if ((strcmp(printer_name,"Print to File") == 0) || getenv(sEnvScale) == NULL) {
+ const char * sPrinterName = gtk_printer_get_name( selPrinter );
+ if ((strcmp(sPrinterName,"Print to File") == 0) || getenv(sEnvScale) == NULL) {
double p_def = 600;
cairo_surface_set_fallback_resolution(psPrint_d.curPrintSurface, p_def, p_def);
psPrint_d.dpi = p_def;
diff --git a/app/wlib/gtklib/single.c b/app/wlib/gtklib/single.c
index 45ed6e4..600f1dd 100644
--- a/app/wlib/gtklib/single.c
+++ b/app/wlib/gtklib/single.c
@@ -50,8 +50,10 @@ struct wString_t {
char *valueP; /**< pointer to result buffer */
wIndex_t valueL; /**< maximum length */
wStringCallBack_p action; /**< callback for changes */
- wBool_t busy; /**< busy flag to prevent re-entry problems? */
+ wBool_t notice_activate; /** if flag set to observe enter key **/
+ wBool_t enter_pressed; /**< flag if enter was pressed */
wBool_t hasSignal; /** needs signal to be suppressed */
+ int count; /** number of 100ms since last entry **/
guint timer; /**< timer source for inactivity timer */
};
@@ -142,33 +144,43 @@ static gboolean killTimer(
}
/**
- * Timer handler for string activity. This timer expires if the user
- * doesn't change an entry value within the preset time.
+ * Timer handler for string activity. This timer checks the input if the user
+ * doesn't change an entry value for the preset time (0.5s).
*/
static gboolean
timeoutString( wString_p bs )
{
-
+ const char *new_value;
if ( !bs )
return( FALSE );
if (bs->widget == 0)
abort();
- if (bs->action) {
- const char *s;
-
- s = gtk_entry_get_text(GTK_ENTRY(bs->widget));
- if ( s )
- bs->action(s, bs->data);
+ bs->count--;
+
+ if (bs->count==0) {
+ // get the currently entered value
+ new_value = wStringGetValue(bs);
+ if (bs->valueP != NULL)
+ strcpy(bs->valueP, new_value);
+
+ if (bs->action) {
+ bs->enter_pressed = FALSE; //Normal input
+ if ( new_value )
+ bs->action(new_value,bs->data);
+ }
+ }
+ if (bs->count<=0) {
+ bs->timer = 0;
+ return( FALSE ); //Stop timer
+ } else {
+ return TRUE; //Wait 100ms
}
-
- bs->timer = 0;
- return( FALSE );
}
/**
- * Signal handler for 'activate' signal: callback with the current value and then
+ * Signal handler for 'activate' signal: enter pressed - callback with the current value and then
* select the whole default value
*
* \param widget IN the edit field
@@ -181,6 +193,7 @@ static gboolean stringActivated(
wString_p b)
{
const char *s;
+ const char * output = "\n";
if ( !b )
return( FALSE );
@@ -191,14 +204,22 @@ static gboolean stringActivated(
strcpy(b->valueP, s);
if (b->action) {
- b->action(s, b->data);
+ b->enter_pressed = TRUE;
+ b->action( output, b->data);
}
// select the complete default value to make editing it easier
gtk_editable_select_region( GTK_EDITABLE( widget ), 0, -1 );
- return( FALSE );
+ return( TRUE );
+}
+
+static gboolean stringExposed(GtkWidget* widget, GdkEventExpose * event, gpointer g )
+{
+ wControl_p b = (wControl_p)g;
+ return wControlExpose(widget,event,b);
}
+
/**
* Signal handler for changes in an entry field
*
@@ -213,25 +234,27 @@ static void stringChanged(
{
const char *new_value;
- if ( !b || b->busy )
+ if ( !b )
return;
+ b->count = 5; /* set ~500 ms from now */
+
// get the entered value
- new_value = wStringGetValue(b);
- if (b->valueP != NULL)
- strcpy(b->valueP, new_value);
-
+ //new_value = wStringGetValue(b);
+ //if (b->valueP != NULL)
+ // strcpy(b->valueP, new_value);
+ //
//
if (b->action){
// if one exists, remove the inactivity timer
- if( b->timer )
- g_source_remove( b->timer );
+ if( !b->timer ) {
+ //g_source_remove( b->timer );
// create a new timer
- b->timer = g_timeout_add( TIMEOUT_INACTIVITY,
+ b->timer = g_timeout_add( TIMEOUT_INACTIVITY/5,
(GSourceFunc)timeoutString,
- b );
-
+ b );
+ }
}
return;
}
@@ -318,9 +341,12 @@ wString_p wStringCreate(
// link into help
wlibAddHelpString(b->widget, helpStr);
- g_signal_connect(GTK_OBJECT(b->widget), "changed", G_CALLBACK(stringChanged), b);
- //g_signal_connect(GTK_OBJECT(b->widget), "activate", G_CALLBACK(stringActivated), b);
+ //g_signal_connect(GTK_OBJECT(b->widget), "changed", G_CALLBACK(stringChanged), b);
+ //if (option&BO_ENTER)
+ g_signal_connect(GTK_OBJECT(b->widget), "activate", G_CALLBACK(stringActivated), b);
b->hasSignal = 1;
+ g_signal_connect_after(GTK_OBJECT(b->widget), "expose-event",
+ G_CALLBACK(stringExposed), b);
// set the default text and select it to make replacing it easier
if (b->valueP) {
diff --git a/app/wlib/gtklib/splash.c b/app/wlib/gtklib/splash.c
index 0d5be50..5d56e9f 100644
--- a/app/wlib/gtklib/splash.c
+++ b/app/wlib/gtklib/splash.c
@@ -63,7 +63,7 @@ wCreateSplash(char *appName, char *appVer)
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_SPLASHSCREEN);
-#if GTK_MINOR_VERSION > 5
+#if GTK_MAJOR_VERSION > 1 || GTK_MINOR_VERSION > 5
gtk_window_set_focus_on_map(GTK_WINDOW(window), FALSE);
#endif
@@ -108,7 +108,6 @@ wCreateSplash(char *appName, char *appVer)
message = label;
gtk_widget_show(window);
-
return (TRUE);
}
@@ -121,8 +120,9 @@ wCreateSplash(char *appName, char *appVer)
int
wSetSplashInfo(char *msg)
{
- if (msg) {
- gtk_label_set_text((GtkLabel *)message, msg);
+ if (!window) return FALSE;
+ if (msg && message) {
+ gtk_label_set_text(GTK_LABEL(message), msg);
wFlush();
return TRUE;
}
@@ -139,6 +139,8 @@ void
wDestroySplash(void)
{
/* kill window */
- gtk_widget_destroy(window);
+ if (window) gtk_widget_destroy(window);
+ window = NULL;
+
return;
}
diff --git a/app/wlib/gtklib/statusbar.c b/app/wlib/gtklib/statusbar.c
index 3730eab..3a2fd0d 100644
--- a/app/wlib/gtklib/statusbar.c
+++ b/app/wlib/gtklib/statusbar.c
@@ -67,6 +67,7 @@ void wStatusSetValue(
}
gtk_entry_set_text(GTK_ENTRY(b->labelWidget), wlibConvertInput(arg));
+ gtk_widget_queue_draw (GTK_WIDGET(b->labelWidget));
}
/**
* Create a window for a simple text.
@@ -99,6 +100,9 @@ wStatus_p wStatusCreate(
gtk_editable_set_editable(GTK_EDITABLE(b->labelWidget), FALSE);
gtk_entry_set_has_frame(GTK_ENTRY(b->labelWidget), FALSE);
gtk_widget_set_can_focus(b->labelWidget, FALSE);
+ gtk_widget_set_sensitive(b->labelWidget, FALSE);
+ GdkColor black = {0, 0x0000, 0x0000, 0x0000};
+ gtk_widget_modify_text(b->labelWidget,GTK_STATE_INSENSITIVE,&black);
gtk_entry_set_text(GTK_ENTRY(b->labelWidget),
message?wlibConvertInput(message):"");
@@ -138,7 +142,7 @@ wStatusGetWidth(const char *testString)
gtk_widget_destroy(entry);
g_object_unref(entry);
- return (requisition.width+8);
+ return (requisition.width);
}
/**
diff --git a/app/wlib/gtklib/text.c b/app/wlib/gtklib/text.c
index f7ba288..0812ace 100644
--- a/app/wlib/gtklib/text.c
+++ b/app/wlib/gtklib/text.c
@@ -98,6 +98,8 @@ void wTextAppend(wText_p bt,
{
GtkTextBuffer *tb;
GtkTextIter ti1;
+ GtkTextMark *tm;
+
if (bt->text == 0) {
abort();
@@ -109,6 +111,18 @@ void wTextAppend(wText_p bt,
// append to end of buffer
gtk_text_buffer_get_end_iter(tb, &ti1);
gtk_text_buffer_insert(tb, &ti1, text, -1);
+
+ if ( bt->option & BT_TOP ) {
+ // and scroll to start of text
+ gtk_text_buffer_get_start_iter(tb, &ti1);
+ } else {
+ // and scroll to end of text
+ gtk_text_buffer_get_end_iter(tb, &ti1);
+ }
+ tm = gtk_text_buffer_create_mark(tb, NULL, &ti1, TRUE );
+ gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW(bt->text), tm );
+ gtk_text_buffer_delete_mark( tb, tm );
+
bt->changed = FALSE;
}
@@ -116,7 +130,7 @@ void wTextAppend(wText_p bt,
* Get the text from a text buffer in system codepage
* The caller is responsible for free'ing the allocated storage.
*
- * \todo handling of return from gtkConvertOutput can be improved
+ * Dont convert from UTF8
*
* \param bt IN the text widget
* \return pointer to the converted text
@@ -135,8 +149,8 @@ static char *wlibGetText(wText_p bt)
tb = gtk_text_view_get_buffer(GTK_TEXT_VIEW(bt->text));
gtk_text_buffer_get_bounds(tb, &ti1, &ti2);
cp = gtk_text_buffer_get_text(tb, &ti1, &ti2, FALSE);
- cp1 = wlibConvertOutput(cp);
- res = strdup(cp1);
+ //cp1 = wlibConvertOutput(cp);
+ res = strdup(cp);
g_free(cp);
return res;
}
@@ -375,7 +389,7 @@ wBool_t wTextPrint(
* Get the length of text
*
* \param bt IN the text widget
- * \return length of string
+ * \return length of string including terminating \0
*/
int wTextGetSize(wText_p bt)
@@ -383,7 +397,7 @@ int wTextGetSize(wText_p bt)
char *cp = wlibGetText(bt);
int len = strlen(cp);
free(cp);
- return len;
+ return len + 1;
}
/**
diff --git a/app/wlib/gtklib/timer.c b/app/wlib/gtklib/timer.c
index 812908f..80c71fb 100644
--- a/app/wlib/gtklib/timer.c
+++ b/app/wlib/gtklib/timer.c
@@ -109,6 +109,9 @@ void wlibSetTrigger(
void wPause(
long count) /* milliseconds */
{
+ while (gtk_events_pending())
+ gtk_main_iteration(); //Allow GTK to finish before pausing
+
struct timeval timeout;
sigset_t signal_mask;
sigset_t oldsignal_mask;
diff --git a/app/wlib/gtklib/util.c b/app/wlib/gtklib/util.c
index e6587a0..a265938 100644
--- a/app/wlib/gtklib/util.c
+++ b/app/wlib/gtklib/util.c
@@ -197,6 +197,8 @@ void * wlibAlloc(
abort();
}
+ w->outline = FALSE;
+
w->type = type;
w->parent = parent;
w->origX = origX;
@@ -369,7 +371,7 @@ void wFlush(
void)
{
while (gtk_events_pending()) {
- gtk_main_iteration();
+ gtk_main_iteration_do(FALSE);
}
gdk_display_sync(gdk_display_get_default());
@@ -385,13 +387,81 @@ void wWinTop(wWin_p win)
}
/**
- * Not implemented
+ * Set the cursor in GTK
*
* \param cursor IN
*/
-void wSetCursor(wCursor_t cursor)
+void wSetCursor(wDraw_p bd, wCursor_t cursor)
{
+ static GdkCursor * gdkcursors[wCursorQuestion+1];
+ GdkCursor * gdkcursor;
+ //GdkWindow * gdkwindow = gtk_widget_get_window(GTK_WIDGET(win->gtkwin));;
+ GdkWindow * gdkwindow = gdk_get_default_root_window();
+ GdkDisplay * display = gdk_window_get_display(gdkwindow);
+ if (!gdkcursors[cursor]) {
+ switch(cursor) {
+ case wCursorAppStart:
+ //gdkcursor = gdk_cursor_new_from_name (display,"progress");
+ gdkcursor = gdk_cursor_new(GDK_WATCH);
+ break;
+ case wCursorHand:
+ //gdkcursor = gdk_cursor_new_from_name (display,"pointer");
+ gdkcursor = gdk_cursor_new(GDK_HAND2);
+ break;
+ case wCursorNo:
+ //gdkcursor = gdk_cursor_new_from_name (display,"not-allowed");
+ gdkcursor = gdk_cursor_new(GDK_X_CURSOR);
+ break;
+ case wCursorSizeAll:
+ //gdkcursor = gdk_cursor_new_from_name (display,"move");
+ gdkcursor = gdk_cursor_new(GDK_FLEUR);
+ break;
+ case wCursorSizeNESW:
+ //gdkcursor = gdk_cursor_new_from_name (display,"nesw-resize");
+ gdkcursor = gdk_cursor_new(GDK_BOTTOM_LEFT_CORNER);
+ break;
+ case wCursorSizeNS:
+ //gdkcursor = gdk_cursor_new_from_name (display,"ns-resize");
+ gdkcursor = gdk_cursor_new(GDK_DOUBLE_ARROW);
+ break;
+ case wCursorSizeNWSE:
+ //gdkcursor = gdk_cursor_new_from_name (display,"nwse-resize");
+ gdkcursor = gdk_cursor_new(GDK_BOTTOM_RIGHT_CORNER);
+ break;
+ case wCursorSizeWE:
+ //gdkcursor = gdk_cursor_new_from_name (display,"ew-resize");
+ gdkcursor = gdk_cursor_new(GDK_SB_H_DOUBLE_ARROW);
+ break;
+ case wCursorWait:
+ //gdkcursor = gdk_cursor_new_from_name (display,"wait");
+ gdkcursor = gdk_cursor_new(GDK_WATCH);
+ break;
+ case wCursorIBeam:
+ //gdkcursor = gdk_cursor_new_from_name (display,"text");
+ gdkcursor = gdk_cursor_new(GDK_XTERM);
+ break;
+ case wCursorCross:
+ //gdkcursor = gdk_cursor_new_from_name (display,"crosshair");
+ gdkcursor = gdk_cursor_new(GDK_TCROSS);
+ break;
+ case wCursorQuestion:
+ //gdkcursor = gdk_cursor_new_from_name (display,"help");
+ gdkcursor = gdk_cursor_new(GDK_QUESTION_ARROW);
+ break;
+ case wCursorNone:
+ gdkcursor = gdk_cursor_new(GDK_BLANK_CURSOR);
+ case wCursorNormal:
+ default:
+ //gdkcursor = gdk_cursor_new_from_name (display,"default");
+ gdkcursor = gdk_cursor_new(GDK_LEFT_PTR);
+ break;
+
+ }
+ gdkcursors[cursor] = gdkcursor;
+ } else gdkcursor = gdkcursors[cursor];
+
+ gdk_window_set_cursor ( gtk_widget_get_window(bd->widget), gdkcursor);
}
/**
@@ -413,11 +483,17 @@ const char * wMemStats(void)
void wGetDisplaySize(wPos_t * w, wPos_t * h)
{
-
- *w = gdk_screen_width();
- *h = gdk_screen_height();
+ GdkScreen *screen = gdk_screen_get_default();
+ guint monitor = gdk_screen_get_primary_monitor(screen);
+ GdkRectangle screen_geometry = { 0, 0, 0, 0 };
+
+ gdk_screen_get_monitor_geometry( screen, monitor, &screen_geometry );
+
+ *w = screen_geometry.width;
+ *h = screen_geometry.height;
}
+
static dynArr_t conversionBuffer_da;
/**
diff --git a/app/wlib/gtklib/window.c b/app/wlib/gtklib/window.c
index 49770c5..1468c89 100644
--- a/app/wlib/gtklib/window.c
+++ b/app/wlib/gtklib/window.c
@@ -29,6 +29,9 @@
#define GTK_DISABLE_DEPRECATED
#define GSEAL_ENABLE
+#define MIN_WIDTH 100
+#define MIN_HEIGHT 100
+
#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <gdk/gdkkeysyms.h>
@@ -37,8 +40,11 @@
wWin_p gtkMainW;
-#define MIN_WIN_WIDTH (50)
-#define MIN_WIN_HEIGHT (50)
+#define MIN_WIN_WIDTH 150
+#define MIN_WIN_HEIGHT 150
+
+#define MIN_WIN_WIDTH_MAIN 400
+#define MIN_WIN_HEIGHT_MAIN 400
#define SECTIONWINDOWSIZE "gtklib window size"
#define SECTIONWINDOWPOS "gtklib window pos"
@@ -93,6 +99,7 @@ static GdkRectangle getMonitorDimensions(GtkWidget * widget) {
gdk_screen_get_monitor_geometry(screen,monitor,&monitor_dimensions);
+
return monitor_dimensions;
}
@@ -106,40 +113,47 @@ static GdkRectangle getMonitorDimensions(GtkWidget * widget) {
static void getWinSize(wWin_p win, const char * nameStr)
{
- int w, h;
+ int w=50, h=50;
const char *cp;
char *cp1, *cp2;
+
/*
* Clamp window to be no bigger than one monitor size (to start - the user can always maximize)
*/
GdkRectangle monitor_dimensions = getMonitorDimensions(GTK_WIDGET(win->gtkwin));
- wPos_t maxDisplayWidth = monitor_dimensions.width-5;
- wPos_t maxDisplayHeight = monitor_dimensions.height-25;
+ wPos_t maxDisplayWidth = monitor_dimensions.width-10;
+ wPos_t maxDisplayHeight = monitor_dimensions.height-50;
- if ((win->option&F_RESIZE) &&
+
+ if ((win->option&F_RECALLSIZE) &&
(win->option&F_RECALLPOS) &&
(cp = wPrefGetString(SECTIONWINDOWSIZE, nameStr)) &&
(w = strtod(cp, &cp1), cp != cp1) &&
(h = strtod(cp1, &cp2), cp1 != cp2)) {
- if (w < 10) {
- w = 10;
- }
-
- if (h < 10) {
- h = 10;
- }
+ win->option &= ~F_AUTOSIZE;
- if (w > maxDisplayWidth) w = maxDisplayWidth;
- if (h > maxDisplayHeight) h = maxDisplayHeight;
+ if (w < 50) {
+ w = 50;
+ }
- win->w = win->origX = w;
- win->h = win->origY = h;
- win->option &= ~F_AUTOSIZE;
+ if (h < 50) {
+ h = 50;
+ }
}
+
+ if (w > maxDisplayWidth) w = maxDisplayWidth;
+ if (h > maxDisplayHeight) h = maxDisplayHeight;
+
+ if (w<MIN_WIDTH) w = MIN_WIDTH;
+ if (h<MIN_HEIGHT) h = MIN_HEIGHT;
+
+ win->w = win->origX = w;
+ win->h = win->origY = h;
+
}
/**
@@ -152,8 +166,7 @@ static void getWinSize(wWin_p win, const char * nameStr)
static void saveSize(wWin_p win)
{
- if ((win->option&F_RESIZE) &&
- (win->option&F_RECALLPOS) &&
+ if ((win->option&F_RECALLSIZE) &&
gtk_widget_get_visible(GTK_WIDGET(win->gtkwin))) {
char pos_s[20];
@@ -210,7 +223,7 @@ static void getPos(wWin_p win)
}
gtk_window_move(GTK_WINDOW(win->gtkwin), x, y);
- gtk_window_resize(GTK_WINDOW(win->gtkwin), win->w, win->h);
+ //gtk_window_resize(GTK_WINDOW(win->gtkwin), win->w, win->h);
}
}
}
@@ -285,9 +298,17 @@ void wWinSetSize(
{
win->busy = TRUE;
win->w = width;
- win->h = height + BORDERSIZE + ((win->option&F_MENUBAR)?win->menu_height:0);
- gtk_widget_set_size_request(win->gtkwin, win->w, win->h);
- gtk_widget_set_size_request(win->widget, win->w, win->h);
+ win->h = height + BORDERSIZE + ((win->option&F_MENUBAR)?MENUH:0);
+ if (win->option&F_RESIZE) {
+ gtk_window_resize(GTK_WINDOW(win->gtkwin), win->w, win->h);
+ gtk_widget_set_size_request(win->widget, win->w-10, win->h-10);
+ }
+ else {
+ gtk_widget_set_size_request(win->gtkwin, win->w, win->h);
+ gtk_widget_set_size_request(win->widget, win->w, win->h);
+ }
+
+
win->busy = FALSE;
}
@@ -304,7 +325,7 @@ void wWinShow(
wWin_p win, /* Window */
wBool_t show) /* Command */
{
- GtkRequisition requisition;
+ //GtkRequisition min_req, pref_req;
if (debugWindow >= 2) {
printf("Set Show %s\n", win->labelStr?win->labelStr:"No label");
@@ -314,31 +335,48 @@ void wWinShow(
abort();
}
+ int width, height;
+
if (show) {
keyState = 0;
getPos(win);
+ if (!win->shown) {
+ gtk_widget_show(win->gtkwin);
+ gtk_widget_show(win->widget);
+ }
+
if (win->option & F_AUTOSIZE) {
- gtk_widget_size_request(win->gtkwin, &requisition);
+ GtkAllocation allocation;
+ GtkRequisition requistion;
+ gtk_widget_size_request(win->widget,&requistion);
+
+ width = win->w;
+ height = win->h;
+
+ if (requistion.width != width || requistion.height != height ) {
- if (requisition.width != win->w || requisition.height != win->h) {
- //gtk_window_resize(GTK_WINDOW(win->gtkwin), win->w, win->h);
- gtk_widget_set_size_request(win->gtkwin, win->w, win->h);
- gtk_widget_set_size_request(win->widget, win->w-20, win->h);
+ width = requistion.width;
+ height = requistion.height;
+
+ win->w = width;
+ win->h = height;
+
+
+ gtk_window_set_resizable(GTK_WINDOW(win->gtkwin),TRUE);
if (win->option&F_MENUBAR) {
gtk_widget_set_size_request(win->menubar, win->w-20, MENUH);
- GtkAllocation allocation;
+
gtk_widget_get_allocation(win->menubar, &allocation);
win->menu_height = allocation.height;
}
}
+ gtk_window_resize(GTK_WINDOW(win->gtkwin), width+10, height+10);
}
- if (!win->shown) {
- gtk_widget_show(win->gtkwin);
- gtk_widget_show(win->widget);
- }
+ gtk_window_present(GTK_WINDOW(win->gtkwin));
+
gdk_window_raise(gtk_widget_get_window(win->gtkwin));
@@ -606,11 +644,24 @@ static int fixed_expose_event(
GdkEventExpose * event,
wWin_p win)
{
+ int rc;
+
if (event->count==0) {
- return window_redraw(win, TRUE);
+ rc = window_redraw(win, TRUE);
} else {
- return FALSE;
+ rc = FALSE;
}
+ cairo_t* cr = gdk_cairo_create (gtk_widget_get_window(widget));
+#ifdef CURSOR_SURFACE
+ if (win && win->cursor_surface.surface && win->cursor_surface.show) {
+ cairo_set_source_surface(cr,win->cursor_surface.surface,event->area.x, event->area.y);
+ cairo_set_operator(cr,CAIRO_OPERATOR_OVER);
+ cairo_rectangle(cr,event->area.x, event->area.y,
+ event->area.width, event->area.height);
+ cairo_fill(cr);
+ }
+#endif
+ return rc;
}
static int resizeTime(wWin_p win) {
@@ -738,10 +789,8 @@ wBool_t catch_shift_ctrl_alt_keys(
GdkEventKey *event,
void * data)
{
- int state;
- state = 0;
-
- switch (event->keyval) {
+ int state = 0;
+ switch (event->keyval ) {
case GDK_KEY_Shift_L:
case GDK_KEY_Shift_R:
state |= WKEY_SHIFT;
@@ -756,6 +805,13 @@ wBool_t catch_shift_ctrl_alt_keys(
case GDK_KEY_Alt_R:
state |= WKEY_ALT;
break;
+
+ case GDK_KEY_Meta_L:
+ case GDK_KEY_Meta_R:
+ // Pressing SHIFT and then ALT generates a Meta key
+ //printf( "Meta\n" );
+ state |= WKEY_ALT;
+ break;
}
if (state != 0) {
@@ -764,10 +820,8 @@ wBool_t catch_shift_ctrl_alt_keys(
} else {
keyState &= ~state;
}
-
return TRUE;
}
-
return FALSE;
}
@@ -786,7 +840,7 @@ static gint window_char_event(
return FALSE;
}
- if (event->state == 0) {
+ if ( ( event->state & GDK_MODIFIER_MASK ) == 0 ) {
if (event->keyval == GDK_KEY_Escape) {
for (bb=win->first; bb; bb=bb->next) {
if (bb->type == B_BUTTON && (bb->option&BB_CANCEL)) {
@@ -804,6 +858,31 @@ static gint window_char_event(
}
}
+void wSetGeometry(wWin_p win, int min_width, int max_width, int min_height, int max_height, int base_width, int base_height, double aspect_ratio ) {
+ GdkGeometry hints;
+ GdkWindowHints hintMask = GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE;
+ hints.min_width = min_width;
+ hints.max_width = max_width;
+ hints.min_height = min_height;
+ hints.max_height = max_height;
+ hints.min_aspect = hints.max_aspect = aspect_ratio;
+ hints.base_width = base_width;
+ hints.base_height = base_height;
+ if( base_width != -1 && base_height != -1 ) {
+ hintMask |= GDK_HINT_BASE_SIZE;
+ }
+
+ if(aspect_ratio > -1.0 ) {
+ hintMask |= GDK_HINT_ASPECT;
+ }
+
+ gtk_window_set_geometry_hints(
+ GTK_WINDOW(win->gtkwin),
+ win->gtkwin,
+ &hints,
+ hintMask);
+}
+
/*
*******************************************************************************
@@ -862,12 +941,14 @@ static wWin_p wWinCommonCreate(
w->gtkwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
if (gtkMainW) {
- gtk_window_set_transient_for(GTK_WINDOW(w->gtkwin),
- GTK_WINDOW(gtkMainW->gtkwin));
+ if (!(w->option&F_NOTTRANSIENT))
+ gtk_window_set_transient_for(GTK_WINDOW(w->gtkwin),
+ GTK_WINDOW(gtkMainW->gtkwin));
}
}
+ getWinSize(w, nameStr);
if (winType != W_MAIN) {
- getWinSize(w, nameStr);
+ gtk_widget_set_app_paintable (w->gtkwin,TRUE);
}
if (option & F_HIDE) {
@@ -898,21 +979,39 @@ static wWin_p wWinCommonCreate(
gtk_container_add(GTK_CONTAINER(w->gtkwin), w->widget);
+
+
+
if (w->option&F_AUTOSIZE) {
w->realX = 0;
- w->w = 0;
+ w->w = MIN_WIN_WIDTH+20;
w->realY = h;
- w->h = 0;
+ w->h = MIN_WIN_HEIGHT;
} else if (w->origX != 0){
- w->w = w->realX = w->origX;
- w->h = w->realY = w->origY+h;
- gtk_window_set_default_size(GTK_WINDOW(w->gtkwin), w->w, w->h);
+ w->realX = w->origX;
+ w->realY = w->origY+h;
+
+ w->default_size_x = w->w;
+ w->default_size_y = w->h;
//gtk_widget_set_size_request(w->widget, w->w-20, w->h);
if (w->option&F_MENUBAR) {
gtk_widget_set_size_request(w->menubar, w->w-20, MENUH);
}
}
+ int scr_w, scr_h;
+ wGetDisplaySize(&scr_w, &scr_h);
+ if (scr_w < MIN_WIN_WIDTH) scr_w = MIN_WIN_WIDTH+10;
+ if (scr_h < MIN_WIN_HEIGHT) scr_h = MIN_WIN_HEIGHT;
+ if (winType != W_MAIN) {
+ wSetGeometry(w, MIN_WIN_WIDTH, scr_w-10, MIN_WIN_HEIGHT, scr_h, -1, -1, -1);
+ } else {
+ if (scr_w < MIN_WIN_WIDTH_MAIN+10) scr_w = MIN_WIN_WIDTH_MAIN+200;
+ if (scr_h < MIN_WIN_HEIGHT_MAIN+10) scr_h = MIN_WIN_HEIGHT_MAIN+200;
+ wSetGeometry(w, MIN_WIN_WIDTH_MAIN, scr_w-10, MIN_WIN_HEIGHT_MAIN, scr_h-10, -1, -1, -1);
+ }
+
+
w->first = w->last = NULL;
w->winProc = winProc;
@@ -934,6 +1033,7 @@ static wWin_p wWinCommonCreate(
if (w->option & F_RESIZE) {
gtk_window_set_resizable(GTK_WINDOW(w->gtkwin), TRUE);
+ gtk_window_resize(GTK_WINDOW(w->gtkwin), w->w, w->h);
} else {
gtk_window_set_resizable(GTK_WINDOW(w->gtkwin), FALSE);
}
diff --git a/app/wlib/gtklib/wpref.c b/app/wlib/gtklib/wpref.c
index c2541f9..124305a 100644
--- a/app/wlib/gtklib/wpref.c
+++ b/app/wlib/gtklib/wpref.c
@@ -168,7 +168,7 @@ const char * wGetAppWorkDir(
if ( stat( appEtcConfig, &stFileInfo ) == 0 ) {
char copyConfigCmd[(BUFSIZ * 2) + 3];
sprintf( copyConfigCmd, "cp %s %s", appEtcConfig, appWorkDir );
- system( copyConfigCmd );
+ int rc = system( copyConfigCmd );
}
}
}
@@ -293,7 +293,7 @@ void wPrefSetString(
if (p->val)
free(p->val);
p->dirty = TRUE;
- p->val = strdup( sval );
+ p->val = (sval?strdup( sval ):NULL);
return;
}
}
@@ -302,7 +302,7 @@ void wPrefSetString(
p->name = strdup(name);
p->section = strdup(section);
p->dirty = TRUE;
- p->val = strdup(sval);
+ p->val = (sval?strdup(sval):NULL);
}
/**
@@ -456,7 +456,9 @@ void wPrefFlush(
return;
for (p=&prefs(0); p<&prefs(prefs_da.cnt); p++) {
- fprintf( prefFile, "%s.%s: %s\n", p->section, p->name, p->val );
+ if(p->val) {
+ fprintf( prefFile, "%s.%s: %s\n", p->section, p->name, p->val );
+ }
}
fclose( prefFile );
}
diff --git a/app/wlib/include/mswlib.h b/app/wlib/include/mswlib.h
index 4a3f799..59260bb 100644
--- a/app/wlib/include/mswlib.h
+++ b/app/wlib/include/mswlib.h
@@ -1,8 +1,6 @@
#define WAPPICON (980)
#define WM_F1DOWN (WM_USER+10)
-#define WM_NOTVALID (WM_USER+11)
-#define IDM_DOHELP 999
#define IDM_PRINTAPP 998
#define IDM_PRINTPAGE 997
#define IDM_ABOUT 100
diff --git a/app/wlib/include/wlib.h b/app/wlib/include/wlib.h
index 699eefb..d3bfc18 100644
--- a/app/wlib/include/wlib.h
+++ b/app/wlib/include/wlib.h
@@ -11,6 +11,8 @@
#define FILE_SEP_CHAR "/"
#endif
+#include <stdbool.h>
+
#ifdef USE_SIMPLE_GETTEXT
char *bindtextdomain( char *domainname, char *dirname );
char *bind_textdomain_codeset(char *domainname, char *codeset );
@@ -20,6 +22,11 @@ char *gettext( const char *msgid );
char *g_win32_getlocale (void);
#endif
+// conversion routines to and from UTF-8
+bool wSystemToUTF8(const char *inString, char *outString, unsigned outStringLength);
+bool wUTF8ToSystem(const char *inString, char *outString, unsigned outStringLength);
+bool wIsUTF8(const char * string);
+
/*
* Interface types
*/
@@ -148,12 +155,14 @@ wBool_t wNotice( const char *, const char *, const char * );
int wNotice3( const char *, const char *, const char *, const char * );
void wHelp( const char * );
+
#define NT_INFORMATION 1
#define NT_WARNING 2
#define NT_ERROR 4
wBool_t wNoticeEx( int type, const char * msg, const char * yes, const char * no );
+unsigned wOpenFileExternal(char *filename);
void wSetBalloonHelp ( wBalloonHelp_t * );
@@ -170,11 +179,21 @@ unsigned long wGetTimer( void );
void wExit( int );
typedef enum { wCursorNormal,
+ wCursorNone,
+ wCursorAppStart,
+ wCursorHand,
+ wCursorNo,
+ wCursorSizeAll,
+ wCursorSizeNESW,
+ wCursorSizeNS,
+ wCursorSizeNWSE,
+ wCursorSizeWE,
wCursorWait,
wCursorIBeam,
wCursorCross,
wCursorQuestion } wCursor_t;
-void wSetCursor( wCursor_t );
+void wSetCursor( wDraw_p, wCursor_t );
+#define defaultCursor wCursorCross
const char * wMemStats( void );
@@ -224,6 +243,8 @@ typedef void (*wWinCallBack_p)( wWin_p, winProcEvent, void *, void * );
#define F_CENTER (1L<<12)
#define F_HIDE (1L<<13)
#define F_MAXIMIZE (1L<<14)
+#define F_RESTRICT (1L<<15)
+#define F_NOTTRANSIENT (1L<<16)
wWin_p wWinMainCreate( const char *, wPos_t, wPos_t, const char *, const char *, const char *,
long, wWinCallBack_p, void * );
@@ -246,6 +267,7 @@ void wMessage( wWin_p, const char *, wBool_t );
void wWinTop( wWin_p );
void wWinDoCancel( wWin_p );
void wWinBlockEnable( wBool_t );
+void wSetGeometry(wWin_p, int min_width, int max_width, int min_height, int max_height, int base_width, int base_height, double aspect_ratio);
int wCreateSplash( char *appName, char *appVer );
int wSetSplashInfo( char *msg );
@@ -262,6 +284,7 @@ void wDestroySplash( void );
#define BO_READONLY (1L<<2)
#define BO_NOTAB (1L<<8)
#define BO_BORDER (1L<<9)
+#define BO_ENTER (1L<<10)
wPos_t wLabelWidth( const char * );
const char * wControlGetHelp( wControl_p );
@@ -290,7 +313,7 @@ void wControlLinkedActive( wControl_p b, int active );
#define BS_TRIM (1<<12)
/* Creation CallBacks */
-typedef void (*wStringCallBack_p)( const char *, void * );
+typedef void (*wStringCallBack_p)( const char *, void *);
wString_p wStringCreate( wWin_p, wPos_t, wPos_t, const char *, const char *, long,
wPos_t, char *, wIndex_t, wStringCallBack_p,
void * );
@@ -305,8 +328,8 @@ const char * wStringGetValue( wString_p );
*/
/* Creation CallBacks */
-typedef void (*wIntegerCallBack_p)( long, void * );
-typedef void (*wFloatCallBack_p)( double, void * );
+typedef void (*wIntegerCallBack_p)( long, void * , int);
+typedef void (*wFloatCallBack_p)( double, void * , int);
wInteger_p wIntegerCreate( wWin_p, wPos_t, wPos_t, const char *, const char *, long,
wPos_t, wInteger_t, wInteger_t, wInteger_t *,
wIntegerCallBack_p, void * );
@@ -414,6 +437,7 @@ wLine_p wLineCreate( wWin_p, const char *, int, wLines_t *);
#define BT_CHARUNITS (1L<<23)
#define BT_FIXEDFONT (1L<<22)
#define BT_DOBOLD (1L<<21)
+#define BT_TOP (1L<<20) /* Show the top of the text */
wText_p wTextCreate( wWin_p, wPos_t, wPos_t, const char *, const char *, long,
wPos_t, wPos_t );
@@ -440,12 +464,34 @@ void wTextSetPosition( wText_p bt, int pos );
typedef int wDrawOpts;
#define wDrawOptTemp (1<<0)
#define wDrawOptNoClip (1<<1)
+#define wDrawOptTransparent (1<<2)
+#define wDrawOutlineFont (1<<3)
+#ifdef CURSOR_SURFACE
+#define wDrawOptCursor (1<<4)
+#define wDrawOptCursorClr (1<<5)
+#define wDrawOptCursorClr (1<<6)
+#define wDrawOptCursorRmv (1<<7)
+#define wDrawOptCursorQuit (1<<8)
+#define wDrawOptOpaque (1<<9)
+#endif
+
typedef enum {
wDrawLineSolid,
- wDrawLineDash }
+ wDrawLineDash,
+ wDrawLineDot,
+ wDrawLineDashDot,
+ wDrawLineDashDotDot,
+ wDrawLineCenter,
+ wDrawLinePhantom}
wDrawLineType_e;
+typedef enum {
+ wPolyLineStraight,
+ wPolyLineSmooth,
+ wPolyLineRound}
+ wPolyLine_e;
+
typedef int wAction_t;
#define wActionMove (1)
#define wActionLDown (2)
@@ -458,7 +504,13 @@ typedef int wAction_t;
#define wActionExtKey (9)
#define wActionWheelUp (10)
#define wActionWheelDown (11)
-#define wActionLast wActionWheelDown
+#define wActionLDownDouble (12)
+#define wActionModKey (13)
+#define wActionScrollUp (14)
+#define wActionScrollDown (15)
+#define wActionScrollLeft (16)
+#define wActionScrollRight (17)
+#define wActionLast wActionScrollRight
#define wRGB(R,G,B)\
@@ -474,6 +526,7 @@ typedef void (*wDrawActionCallBack_p)( wDraw_p, void*, wAction_t, wPos_t, wPos_t
#define BD_DIRECT (1L<<26)
#define BD_NOCAPTURE (1L<<27)
#define BD_NOFOCUS (1L<<28)
+#define BD_MODKEYS (1L<<29)
/* Create: */
wDraw_p wDrawCreate( wWin_p, wPos_t, wPos_t, const char *, long,
@@ -496,13 +549,15 @@ void wDrawString( wDraw_p, wPos_t, wPos_t, wAngle_t, const char *, wFont_p,
wFontSize_t, wDrawColor, wDrawOpts );
void wDrawFilledRectangle( wDraw_p, wPos_t, wPos_t, wPos_t, wPos_t,
wDrawColor, wDrawOpts );
-void wDrawFilledPolygon( wDraw_p, wPos_t [][2], wIndex_t, wDrawColor,
- wDrawOpts );
+void wDrawPolygon( wDraw_p, wPos_t [][2], wPolyLine_e [], wIndex_t, wDrawColor, wDrawWidth, wDrawLineType_e,
+ wDrawOpts, int, int );
void wDrawFilledCircle( wDraw_p, wPos_t, wPos_t, wPos_t, wDrawColor, wDrawOpts );
-void wDrawGetTextSize( wPos_t *, wPos_t *, wPos_t *, wDraw_p, const char *, wFont_p,
+void wDrawGetTextSize( wPos_t *, wPos_t *, wPos_t *, wPos_t *, wDraw_p, const char *, wFont_p,
wFontSize_t );
void wDrawClear( wDraw_p );
+void wDrawClearTemp( wDraw_p );
+wBool_t wDrawSetTempMode( wDraw_p, wBool_t );
void wDrawDelayUpdate( wDraw_p, wBool_t );
void wDrawClip( wDraw_p, wPos_t, wPos_t, wPos_t, wPos_t );
@@ -517,7 +572,7 @@ void wDrawSetSize( wDraw_p, wPos_t, wPos_t, void * );
void wDrawGetSize( wDraw_p, wPos_t *, wPos_t * );
/* Bitmaps */
-wDrawBitMap_p wDrawBitMapCreate( wDraw_p, int, int, int, int, const char * );
+wDrawBitMap_p wDrawBitMapCreate( wDraw_p, int, int, int, int, const unsigned char * );
void wDrawBitMap( wDraw_p, wDrawBitMap_p, wPos_t, wPos_t,
wDrawColor, wDrawOpts );
@@ -529,6 +584,8 @@ wBool_t wBitMapWriteFile( wDraw_p, const char * );
void * wDrawGetContext( wDraw_p );
void wDrawSaveImage( wDraw_p );
void wDrawRestoreImage( wDraw_p );
+int wDrawSetBackground( wDraw_p, char * path, char ** error);
+void wDrawShowBackground( wDraw_p, wPos_t pos_x, wPos_t pos_y, wPos_t width, wAngle_t angle, int screen);
/*------------------------------------------------------------------------------
*
@@ -537,7 +594,7 @@ void wDrawRestoreImage( wDraw_p );
void wInitializeFonts();
void wSelectFont( const char * );
wFontSize_t wSelectedFontSize( void );
-void wSetSelectionFontSize(int);
+void wSetSelectionFontSize(wFontSize_t);
#define F_TIMES (1)
#define F_HELV (2)
wFont_p wStandardFont( int, wBool_t, wBool_t );
@@ -548,22 +605,19 @@ wFont_p wStandardFont( int, wBool_t, wBool_t );
* Printing
*/
-typedef void (*wAddPrinterCallBack_p)( const char *, const char * );
-typedef void (*wAddMarginCallBack_p)( const char *, double, double, double, double );
-typedef void (*wAddFontAliasCallBack_p)( const char *, const char * );
typedef void (*wPrintSetupCallBack_p)( wBool_t );
wBool_t wPrintInit( void );
void wPrintSetup( wPrintSetupCallBack_p );
-void wPrintSetCallBacks( wAddPrinterCallBack_p, wAddMarginCallBack_p, wAddFontAliasCallBack_p );
+void wPrintGetMargins( double *, double *, double *, double * );
void wPrintGetPageSize( double *, double * );
-void wPrintGetPhysSize( double *, double * );
wBool_t wPrintDocStart( const char *, int, int * );
wDraw_p wPrintPageStart( void );
wBool_t wPrintPageEnd( wDraw_p );
void wPrintDocEnd( void );
wBool_t wPrintQuit( void );
void wPrintClip( wPos_t, wPos_t, wPos_t, wPos_t );
+const char * wPrintGetName( void );
/*------------------------------------------------------------------------------
@@ -607,6 +661,15 @@ typedef enum {
wAccelKey_LineFeed }
wAccelKey_e;
+typedef enum {
+ wModKey_None,
+ wModKey_Alt,
+ wModKey_Shift,
+ wModKey_Ctrl }
+ wModKey_e;
+
+void wDoAccelHelp( wAccelKey_e key, void * );
+
/* Creation CallBacks */
typedef void (*wMenuCallBack_p)( void * );
typedef void (*wMenuListCallBack_p)( int, const char *, void * );
@@ -656,6 +719,7 @@ void wAttachAccelKey( wAccelKey_e, int, wAccelKeyCallBack_p, void * );
*/
#define FS_MULTIPLEFILES 1
+#define FS_PICTURES 2
struct wFilSel_t;
typedef enum {
@@ -726,4 +790,11 @@ wPos_t wStatusGetHeight(long flags);
void wStatusSetValue(wStatus_p b, const char * arg);
void wStatusSetWidth(wStatus_p b, wPos_t width);
+
+/*-------------------------------------------------------------------------------
+ * User Preferences
+ */
+
+#define PREFSECTION "Preference"
+#define LARGEICON "LargeIcons"
#endif
diff --git a/app/wlib/mswlib/CMakeLists.txt b/app/wlib/mswlib/CMakeLists.txt
index 82d8371..07558f9 100644
--- a/app/wlib/mswlib/CMakeLists.txt
+++ b/app/wlib/mswlib/CMakeLists.txt
@@ -1,12 +1,13 @@
+find_package(FreeImage REQUIRED)
+
FILE(GLOB HEADERS *.h)
SET(SOURCES
-# checksum.c
+ backgnd.c
getopt.c
mswbox.c
mswbutt.c
mswbitmap.c
- mswchksm.c
mswchoic.c
mswcolor.c
mswdraw.c
@@ -19,14 +20,15 @@ SET(SOURCES
mswpref.c
mswprint.c
mswsplash.c
- mswstatus.c
+ mswstatus.c
mswtext.c
gwin32.c
simple-gettext.c
+ utf8conv.c
)
+include_directories(${FREEIMAGE_INCLUDE_PATH})
INCLUDE_DIRECTORIES(${XTrkCAD_BINARY_DIR})
-# INCLUDE_DIRECTORIES(${XTRKCAD_BINARY_DIR})
IF(XTRKCAD_USE_GETTEXT)
IF(WIN32)
@@ -37,4 +39,13 @@ ENDIF(XTRKCAD_USE_GETTEXT)
ADD_LIBRARY(xtrkcad-wlib ${HEADERS} ${SOURCES})
TARGET_LINK_LIBRARIES(xtrkcad-wlib Htmlhelp msimg32 shlwapi)
+target_link_libraries(xtrkcad-wlib ${FREEIMAGE_LIBRARY})
+
+install(FILES
+ ${FREEIMAGE_SHAREDLIB}
+ DESTINATION ${XTRKCAD_BIN_INSTALL_DIR}
+ )
+if(XTRKCAD_TESTING AND CMOCKA_FOUND)
+ add_subdirectory( unittest )
+endif()
diff --git a/app/wlib/mswlib/backgnd.c b/app/wlib/mswlib/backgnd.c
new file mode 100644
index 0000000..d35f19a
--- /dev/null
+++ b/app/wlib/mswlib/backgnd.c
@@ -0,0 +1,220 @@
+/** \file backgnd.c
+* Layout background image
+*/
+
+/* XTrkCad - Model Railroad CAD
+* Copyright (C) 2018 Martin Fischer
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#include <windows.h>
+
+#include <FreeImage.h>
+#include "i18n.h"
+#include "mswint.h"
+
+static char *lastErrorMessage; /**< store last message from FreeImage */
+#define ERRORPUNCTUATION " : "
+
+/**
+ * FreeImage error handler
+ * \param fif Format / Plugin responsible for the error
+ * \param message Error message
+ */
+
+static void
+HandleFreeImageError(FREE_IMAGE_FORMAT fif, const char *message)
+{
+ unsigned totalLength = strlen(message) + 1;
+
+ if (fif != FIF_UNKNOWN) {
+ totalLength += strlen(FreeImage_GetFormatFromFIF(fif)) + strlen(ERRORPUNCTUATION);
+ }
+
+ lastErrorMessage = malloc(totalLength);
+
+ if (fif != FIF_UNKNOWN) {
+ sprintf(lastErrorMessage,
+ "%s" ERRORPUNCTUATION "%s",
+ FreeImage_GetFormatFromFIF(fif),
+ message);
+ } else {
+ strcpy(lastErrorMessage, message);
+ }
+}
+
+/**
+* Load the background image
+* \param bd drawing context
+* \param path filename for image file, if NULL the existing background will be removed
+* \param error returned error message
+* \return -1 unsupported or invalid file, 0 success, 1 background removed
+*/
+
+int
+wDrawSetBackground(wDraw_p bd, char * path, char ** error)
+{
+ FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;
+
+ FreeImage_SetOutputMessage(HandleFreeImageError);
+
+ if (lastErrorMessage) {
+ free(lastErrorMessage);
+ lastErrorMessage = NULL;
+ }
+
+ if (path) {
+ // check the file signature and deduce its format
+ // (the second argument is currently not used by FreeImage)
+ fif = FreeImage_GetFileType(path, 0);
+
+ if (fif == FIF_UNKNOWN) {
+ // no signature ?
+ // try to guess the file format from the file extension
+ fif = FreeImage_GetFIFFromFilename(path);
+ }
+
+ // check that the plugin has reading capabilities ...
+ if ((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif)) {
+ // ok, let's load the file
+ bd->background = FreeImage_Load(fif, path, 0);
+
+ // unless a bad file format, we are done !
+ if (!bd->background) {
+ *error = lastErrorMessage;
+ return (-1);
+ } else {
+ return (0);
+ }
+ } else {
+ *error = strdup(_("Image file is invalid or cannot be read."));
+ return (-1);
+ }
+ } else {
+ if (bd->background) {
+ FreeImage_Unload(bd->background);
+ bd->background = 0;
+ }
+
+ return (1);
+ }
+}
+
+/**
+* Draw background to screen. The background will be sized and rotated before being shown. The bitmap
+* is scaled so that the width is equal to size. The height is changed proportionally.
+*
+* \param bd drawing context
+* \param pos_x, pos_y bitmap position
+* \param size desired width after scaling
+* \param angle
+* \param screen visibility of bitmap in percent
+*/
+
+void
+wDrawShowBackground(wDraw_p bd, wPos_t pos_x, wPos_t pos_y, wPos_t size,
+ wAngle_t angle, int screen)
+{
+ if (bd->background) {
+ double scale;
+ FIBITMAP *tmp;
+ FIBITMAP *rotated;
+
+ if (size == 0) {
+ scale = 1.0;
+ } else {
+ scale = (double)size / FreeImage_GetWidth(bd->background);
+ }
+
+ tmp = FreeImage_RescaleRect(bd->background,
+ (int)((double)FreeImage_GetWidth(bd->background) * scale),
+ (int)((double)FreeImage_GetHeight(bd->background) * scale),
+ 0,
+ 0,
+ FreeImage_GetWidth(bd->background),
+ FreeImage_GetHeight(bd->background),
+ FILTER_BILINEAR,
+ 0);
+ FreeImage_AdjustColors(tmp, screen, -screen, 1.0, FALSE);
+ FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(tmp);
+
+ switch (image_type) {
+ case FIT_BITMAP:
+ switch (FreeImage_GetBPP(tmp)) {
+ case 8: {
+ BYTE color = 255;
+ rotated = FreeImage_Rotate(tmp, angle, &color);
+ }
+ break;
+
+ case 24: // we could also use 'RGBTRIPLE color' here
+ case 32: {
+ RGBQUAD color = { 255, 255, 255, 0 };
+ // for 24-bit images, the first 3 bytes will be read
+ // for 32-bit images, the first 4 bytes will be read
+ rotated = FreeImage_Rotate(tmp, angle, &color);
+ }
+ break;
+ }
+
+ break;
+
+ case FIT_UINT16: {
+ WORD color = 255;
+ rotated = FreeImage_Rotate(tmp, angle, &color);
+ }
+ break;
+
+ case FIT_RGB16: // we could also use 'FIRGB16 color' here
+ case FIT_RGBA16: {
+ FIRGBA16 color = { 255, 255, 255, 0 };
+ // for RGB16 images, the first 3 WORD will be read
+ // for RGBA16 images, the first 4 WORD will be read
+ rotated = FreeImage_Rotate(tmp, angle, &color);
+ }
+ break;
+
+ case FIT_FLOAT: {
+ float color = 1.0F;
+ rotated = FreeImage_Rotate(tmp, angle, &color);
+ }
+ break;
+
+ case FIT_RGBF: // we could also use 'FIRGBF color' here
+ case FIT_RGBAF: {
+ FIRGBAF color = { 1, 1, 1, 0 };
+ // for RGBF images, the first 3 float will be read
+ // for RGBAF images, the first 4 float will be read
+ rotated = FreeImage_Rotate(tmp, angle, &color);
+ }
+ break;
+ }
+
+ SetDIBitsToDevice(bd->hDc,
+ pos_x,
+ bd->h - pos_y - FreeImage_GetHeight(rotated),
+ FreeImage_GetWidth(rotated),
+ FreeImage_GetHeight(rotated),
+ 0, 0,
+ 0,
+ FreeImage_GetHeight(rotated),
+ FreeImage_GetBits(rotated),
+ FreeImage_GetInfo(rotated),
+ DIB_RGB_COLORS);
+ FreeImage_Unload(tmp);
+ FreeImage_Unload(rotated);
+ }
+} \ No newline at end of file
diff --git a/app/wlib/mswlib/mswbitmap.c b/app/wlib/mswlib/mswbitmap.c
index e369e78..95b8a69 100644
--- a/app/wlib/mswlib/mswbitmap.c
+++ b/app/wlib/mswlib/mswbitmap.c
@@ -24,10 +24,12 @@
#include <windows.h>
#include <string.h>
#include <malloc.h>
+#include <math.h>
#include <stdlib.h>
#include <commdlg.h>
#include <stdio.h>
#include <assert.h>
+#include "misc.h"
#include "mswint.h"
#include "i18n.h"
@@ -177,14 +179,15 @@ void mswDrawIcon(
memset( bmiInfo->bmiColors, 0, bm->colorcnt * sizeof( RGBQUAD ));
memset( &bmiInfo->bmiColors[ bm->transparent ], 0xFF, sizeof( RGBQUAD ));
}
+
StretchDIBits(hDc, offw, offh,
- bmiInfo->bmiHeader.biWidth,
- bmiInfo->bmiHeader.biHeight,
- 0, 0,
- bmiInfo->bmiHeader.biWidth,
- bmiInfo->bmiHeader.biHeight,
- bm->pixels, bmiInfo,
- DIB_RGB_COLORS, SRCAND);
+ (int)ceil(bmiInfo->bmiHeader.biWidth*scaleIcon),
+ (int)ceil(bmiInfo->bmiHeader.biHeight*scaleIcon),
+ 0, 0,
+ bmiInfo->bmiHeader.biWidth,
+ bmiInfo->bmiHeader.biHeight,
+ bm->pixels, bmiInfo,
+ DIB_RGB_COLORS, SRCAND);
/* now paint the bitmap with transparent set to black */
if( bm->type == mswIcon_bitmap ) {
@@ -221,16 +224,16 @@ void mswDrawIcon(
}
memset( &bmiInfo->bmiColors[ bm->transparent ], 0, sizeof( RGBQUAD ));
}
-
+
/* show the bitmap */
StretchDIBits(hDc, offw, offh,
- bmiInfo->bmiHeader.biWidth,
- bmiInfo->bmiHeader.biHeight,
- 0, 0,
- bmiInfo->bmiHeader.biWidth,
- bmiInfo->bmiHeader.biHeight,
- bm->pixels, bmiInfo,
- DIB_RGB_COLORS, SRCPAINT);
+ (int)ceil(bmiInfo->bmiHeader.biWidth*scaleIcon),
+ (int)ceil(bmiInfo->bmiHeader.biHeight*scaleIcon),
+ 0, 0,
+ bmiInfo->bmiHeader.biWidth,
+ bmiInfo->bmiHeader.biHeight,
+ bm->pixels, bmiInfo,
+ DIB_RGB_COLORS, SRCPAINT);
/* forget the data */
free( bmiInfo );
@@ -434,11 +437,14 @@ wIcon_p wIconCreatePixMap( char *pm[])
/* look up pixel info in color table */
k = 0;
- while( pixel != keys[ k ] )
+ while(k < col && pixel != keys[ k ] )
k++;
-
- /* save the index into color table */
- *(cq + j) = k;
+ if (pixel == keys[k]) {
+ /* save the index into color table */
+ *(cq + j) = k;
+ } else {
+ *(cq + j) = 0;
+ }
}
}
free( keys );
@@ -507,4 +513,4 @@ wBitmapCreate( wWin_p parent, wPos_t x, wPos_t y, long option, wIcon_p iconP )
control->data = iconP;
return (wControl_p)control;
-} \ No newline at end of file
+}
diff --git a/app/wlib/mswlib/mswbutt.c b/app/wlib/mswlib/mswbutt.c
index d213695..16f31c1 100644
--- a/app/wlib/mswlib/mswbutt.c
+++ b/app/wlib/mswlib/mswbutt.c
@@ -37,11 +37,7 @@ int kludge12 = 0;
*****************************************************************************
*/
-
-
static XWNDPROC oldButtProc = NULL;
-static XWNDPROC newButtProc;
-
struct wButton_t {
WOBJ_COMMON
@@ -88,9 +84,9 @@ static void drawButton(
COLORREF colF;
#define LEFT (0)
-#define RIGHT (bm->w+10)
+#define RIGHT (LONG)ceil(bm->w*scaleIcon+10)
#define TOP (0)
-#define BOTTOM (bm->h+10)
+#define BOTTOM (LONG)ceil(bm->h*scaleIcon+10)
/* get the lightest and the darkest color to use */
colL = GetSysColor( COLOR_BTNHIGHLIGHT );
@@ -239,6 +235,7 @@ static LRESULT buttPush( wControl_p b, HWND hWnd, UINT message, WPARAM wParam, L
DRAWITEMSTRUCT * di = (DRAWITEMSTRUCT *)lParam;
wBool_t selected;
+
switch (message) {
case WM_COMMAND:
if (bb->action /*&& !bb->busy*/) {
@@ -253,8 +250,8 @@ static LRESULT buttPush( wControl_p b, HWND hWnd, UINT message, WPARAM wParam, L
break;
mi->CtlType = ODT_BUTTON;
mi->CtlID = wParam;
- mi->itemWidth = bb->w;
- mi->itemHeight = bb->h;
+ mi->itemWidth = (UINT)ceil(bb->w*scaleIcon);
+ mi->itemHeight = (UINT)ceil(bb->h*scaleIcon);
} return 0L;
case WM_DRAWITEM:
@@ -369,8 +366,8 @@ wButton_p wButtonCreate(
b->selected = 0;
mswComputePos( (wControl_p)b, x, y );
if (b->option&BO_ICON) {
- width = bm->w+10;
- h = bm->h+10;
+ width = (wPos_t)ceil(bm->w*scaleIcon)+10;
+ h = (int)ceil(bm->h*scaleIcon)+10;
b->icon = bm;
} else {
width = (wPos_t)(width*mswScale);
@@ -405,5 +402,9 @@ wButton_p wButtonCreate(
}
if ( !mswThickFont )
SendMessage( b->hWnd, WM_SETFONT, (WPARAM)mswLabelFont, 0L );
+
+
+ InvalidateRect(b->hWnd, &rect, TRUE);
+
return b;
}
diff --git a/app/wlib/mswlib/mswchksm.c b/app/wlib/mswlib/mswchksm.c
deleted file mode 100644
index 602c204..0000000
--- a/app/wlib/mswlib/mswchksm.c
+++ /dev/null
@@ -1,125 +0,0 @@
-#include <stdio.h>
-#include <sys/stat.h>
-#include "../include/wlib.h"
-#ifdef WINDOWS
-#include <windows.h>
-#include "mswint.h"
-#endif
-
-#define HEWHDROFFSET (0x3C)
-
-static FILE * openfile( const char * fn, const char * mode, long * fileSize )
-{
- unsigned short PageCnt;
- long FileSize;
- FILE *fp;
- struct stat Stat;
- fp = fopen( fn, mode );
- if (fp == NULL) {
- perror( "fopen" );
- return NULL;
- }
- fread( &PageCnt, sizeof(PageCnt), 1, fp ); /* Read past signature */
- fread( &PageCnt, sizeof(PageCnt), 1, fp ); /* Read past pagesize */
- FileSize = PageCnt;
- fread( &PageCnt, sizeof(PageCnt), 1, fp ); /* Read past pagesize */
- if ( FileSize == 0L )
- FileSize = PageCnt * 512L;
- else
- FileSize += (PageCnt - 1) * 512L;
- *fileSize = FileSize;
- stat( fn, &Stat );
- *fileSize = (long)Stat.st_size;
- fprintf( stderr, "size1 = %ld, size2 = %ld\n", FileSize, (long)Stat.st_size );
- return fp;
-}
-
-
-static unsigned short mswCheck16( FILE * fp, long FileSize, unsigned short * sum16stored )
-{
- unsigned short int sum16, NxtInt;
- long x;
- unsigned char NxtChar;
- sum16 = 0;
- fseek(fp, 0, SEEK_SET);
-
- for (x=0L; x<FileSize/2L; x++) {
- fread( &NxtInt, sizeof NxtInt, 1, fp );
- if (x == 9)
- *sum16stored = NxtInt;
- else
- sum16 += NxtInt;
- }
- if (FileSize%2) {
- fread( &NxtChar, sizeof NxtChar, 1, fp );
- sum16 += (unsigned int)NxtChar;
- }
- return sum16;
-}
-
-
-static int mswCheck32( FILE * fp, long FileSize, long * sum32off, unsigned long * sum32computed, unsigned long * sum32stored )
-{
- unsigned long sum32, NxtLong;
- long x;
- long NewHdrOffset;
- unsigned char NxtByte, y;
-
- fseek( fp, HEWHDROFFSET, SEEK_SET );
- fread( &NewHdrOffset, sizeof NewHdrOffset, 1, fp );
- if (NewHdrOffset == 0) {
- fprintf( stderr, "NewHdrOffset == 0\n" );
- return 0;
- }
- NewHdrOffset = (NewHdrOffset/4)*4;
- *sum32off = NewHdrOffset + 8;
- sum32 = 0L;
- fseek( fp, 0, SEEK_SET );
- for (x = ( NewHdrOffset + 8 ) / 4; x; x-- ) {
- fread( &NxtLong, sizeof NxtLong, 1, fp );
- sum32 += NxtLong;
- }
- fread( sum32stored, sizeof sum32stored, 1, fp );
-
- for (x=0; x<(FileSize-NewHdrOffset - 12)/4; x++) {
- fread( &NxtLong, sizeof NxtLong, 1, fp );
- sum32 += NxtLong;
- }
- if ( 0L != (x=FileSize%4L) ) {
- NxtLong = 0L;
- for (y=0; y<x; y++ ) {
- fread( &NxtByte, sizeof NxtByte, 1, fp );
- NxtLong += (unsigned long)NxtByte << (8*y);
- }
- sum32 += NxtLong;
- }
- *sum32computed = sum32;
- return 1;
-}
-
-
-#ifdef WINDOWS
-wBool_t wCheckExecutable( void )
-{
- char fileName[1024];
- FILE * fp;
- long FileSize;
- GetModuleFileName( mswHInst, fileName, sizeof fileName );
- fp = openfile( fileName, "rb", &FileSize );
-#ifdef LATER
- {
- unsigned long int sum32offset, sum32computed, sum32stored;
- if ( ! mswCheck32( fp, FileSize, &sum32offset, &sum32computed, &sum32stored ) )
- return FALSE;
- return sum32computed == sum32stored;
- }
-#else
- {
- unsigned short int sum16computed, sum16stored;
- sum16computed = mswCheck16( fp, FileSize, &sum16stored );
- sum16computed += sum16stored;
- return sum16computed == 0xFFFF;
- }
-#endif
-}
-#endif
diff --git a/app/wlib/mswlib/mswdraw.c b/app/wlib/mswlib/mswdraw.c
index bf0ab76..c2739e6 100644
--- a/app/wlib/mswlib/mswdraw.c
+++ b/app/wlib/mswlib/mswdraw.c
@@ -1,8 +1,26 @@
-/*
- * $Header: /home/dmarkle/xtrkcad-fork-cvs/xtrkcad/app/wlib/mswlib/mswdraw.c,v 1.6 2009-05-15 18:16:16 m_fischer Exp $
+/** \file mswdraw.c
+ * Draw basic geometric shapes
*/
-#define _WIN32_WINNT 0x0500 /* for wheel mouse supposrt */
+/* XTrackCAD - Model Railroad CAD
+ * Copyright (C) 2005 Dave Bullis
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#define _WIN32_WINNT 0x0600 /* for wheel mouse supposrt */
#include <windows.h>
#include <string.h>
#include <malloc.h>
@@ -16,8 +34,12 @@
#else
#define wFont_t tagLOGFONT
#endif
+
+#include "misc.h"
#include "mswint.h"
+#include <FreeImage.h>
+wBool_t wDrawDoTempDraw = TRUE;
/*
*****************************************************************************
*
@@ -39,6 +61,8 @@ static long clrOp = 0xbb0226;
#define CENTERMARK_LENGTH 6
+bool bDrawMainBM = 0;
+
#ifdef SLOW
static wPos_t XPIX2INCH( wDraw_p d, int ix )
{
@@ -119,6 +143,31 @@ void wDrawDelayUpdate(
{
}
+wBool_t wDrawSetTempMode(
+ wDraw_p bd,
+ wBool_t bTemp )
+{
+ wBool_t rc = bd->bTempMode;
+ bd->bTempMode = bTemp;
+ if (rc == FALSE && bTemp == TRUE) {
+ // Main to Temp drawing
+ // Copy mainBM to tempBM
+ wDrawClearTemp( bd );
+ if (bDrawMainBM) return rc;
+ HDC hDcOld = CreateCompatibleDC(bd->hDc);
+ HBITMAP hBmOld = SelectObject(hDcOld, bd->hBmMain);
+ SelectObject(bd->hDc, bd->hBmTemp);
+ BitBlt(bd->hDc, 0, 0,
+ bd->w, bd->h,
+ hDcOld, 0, 0,
+ SRCCOPY);
+ SelectObject(hDcOld, hBmOld);
+ DeleteDC(hDcOld);
+ bd->bCopiedMain = TRUE;
+ }
+ return rc;
+}
+
/**
* Sets the proper pen and composition for the next drawing operation
*
@@ -130,68 +179,83 @@ void wDrawDelayUpdate(
* \param dc IN color
* \param dopt IN ????
*/
-
static void setDrawMode(
- HDC hDc,
wDraw_p d,
wDrawWidth dw,
wDrawLineType_e lt,
wDrawColor dc,
wDrawOpts dopt )
{
- int mode;
+ long centerPen[] = {40,10,20,10};
+ long phantomPen[] = {40,10,20,10,20,10};
+
HPEN hOldPen;
static wDraw_p d0;
static wDrawWidth dw0 = -1;
static wDrawLineType_e lt0 = (wDrawLineType_e)-1;
static wDrawColor dc0 = -1;
- static int mode0 = -1;
static LOGBRUSH logBrush = { 0, 0, 0 };
DWORD penStyle;
+ if ( wDrawDoTempDraw && (dopt & wDrawOptTemp) )
+ SelectObject(d->hDc, d->hBmTemp);
+ else
+ SelectObject(d->hDc, d->hBmMain);
+
if ( d->hasPalette ) {
int winPaletteClock = mswGetPaletteClock();
if ( d->paletteClock < winPaletteClock ) {
- RealizePalette( hDc );
+ RealizePalette( d->hDc );
d->paletteClock = winPaletteClock;
}
}
- if (dopt & wDrawOptTemp) {
- mode = R2_NOTXORPEN;
- } else {
- mode = R2_COPYPEN;
- }
- SetROP2( hDc, mode );
- if ( d == d0 && mode == mode0 && dw0 == dw && lt == lt0 && dc == dc0 )
+ SetROP2( d->hDc, R2_COPYPEN );
+ if ( d == d0 && dw0 == dw && lt == lt0 && dc == dc0 )
return;
// make sure that the line width is at least 1!
if( !dw )
dw++;
- d0 = d; mode0 = mode; dw0 = dw; lt0 = lt; dc0 = dc;
+ d0 = d; dw0 = dw; lt0 = lt; dc0 = dc;
+
+ void * penarray = NULL;
+ int penarray_size = 0;
logBrush.lbColor = mswGetColor(d->hasPalette,dc);
if ( lt==wDrawLineSolid ) {
penStyle = PS_GEOMETRIC | PS_SOLID;
if ( noFlatEndCaps == FALSE )
penStyle |= PS_ENDCAP_FLAT;
- d->hPen = ExtCreatePen( penStyle,
- dw,
- &logBrush,
- 0,
- NULL );
- /*colorPalette.palPalEntry[dc] );*/
- } else {
- d->hPen = CreatePen( PS_DOT, 0, mswGetColor( d->hasPalette, dc ) );
- }
- hOldPen = SelectObject( hDc, d->hPen );
+ } else if (lt == wDrawLineDot) {
+ penStyle = PS_GEOMETRIC | PS_DOT;
+ } else if (lt == wDrawLineDash) {
+ penStyle = PS_GEOMETRIC | PS_DASH;
+ } else if (lt == wDrawLineDashDot) {
+ penStyle = PS_GEOMETRIC | PS_DASHDOT;
+ } else if ( lt == wDrawLineDashDotDot){
+ penStyle = PS_GEOMETRIC | PS_DASHDOTDOT;
+ } else if ( lt == wDrawLineCenter) {
+ penStyle = PS_GEOMETRIC | PS_USERSTYLE;
+ penarray = &centerPen;
+ penarray_size = sizeof(centerPen)/sizeof(long);
+ } else if ( lt == wDrawLinePhantom) {
+ penStyle = PS_GEOMETRIC | PS_USERSTYLE;
+ penarray = &phantomPen;
+ penarray_size = sizeof(phantomPen) / sizeof(long);
+ } else
+ penStyle = PS_GEOMETRIC | PS_SOLID;
+ d->hPen = ExtCreatePen( penStyle,
+ dw,
+ &logBrush,
+ penarray_size,
+ penarray );
+ hOldPen = SelectObject( d->hDc, d->hPen );
DeleteObject( hOldPen );
}
static void setDrawBrush(
- HDC hDc,
wDraw_p d,
wDrawColor dc,
wDrawOpts dopt )
@@ -200,7 +264,7 @@ static void setDrawBrush(
static wDraw_p d0;
static wDrawColor dc0 = -1;
- setDrawMode( hDc, d, 0, wDrawLineSolid, dc, dopt );
+ setDrawMode( d, 0, wDrawLineSolid, dc, dopt );
if ( d == d0 && dc == dc0 )
return;
@@ -208,7 +272,7 @@ static void setDrawBrush(
d->hBrush = CreateSolidBrush(
mswGetColor(d->hasPalette,dc) );
- hOldBrush = SelectObject( hDc, d->hBrush );
+ hOldBrush = SelectObject( d->hDc, d->hBrush );
DeleteObject( hOldBrush );
}
@@ -270,7 +334,7 @@ void wDrawLine(
{
POINT p0, p1;
RECT rect;
- setDrawMode( d->hDc, d, dw, lt, dc, dopt );
+ setDrawMode( d, dw, lt, dc, dopt );
p0.x = XINCH2PIX(d,p0x);
p0.y = YINCH2PIX(d,p0y);
p1.x = XINCH2PIX(d,p1x);
@@ -381,7 +445,7 @@ void wDrawArc(
pe.x = XINCH2PIX(d,(wPos_t)pex);
pe.y = YINCH2PIX(d,(wPos_t)pey);
- setDrawMode( d->hDc, d, dw, lt, dc, dopt );
+ setDrawMode( d, dw, lt, dc, dopt );
if (dw == 0)
dw = 1;
@@ -495,7 +559,7 @@ void wDrawPoint(
return;
if ( p0.x >= d->w || p0.y >= d->h )
return;
- setDrawMode( d->hDc, d, 0, wDrawLineSolid, dc, dopt );
+ setDrawMode( d, 0, wDrawLineSolid, dc, dopt );
SetPixel( d->hDc, p0.x, p0.y, mswGetColor(d->hasPalette,dc) /*colorPalette.palPalEntry[dc]*/ );
if (d->hWnd) {
@@ -689,6 +753,7 @@ void wDrawGetTextSize(
wPos_t *w,
wPos_t *h,
wPos_t *d,
+ wPos_t *a,
wDraw_p bd,
const char * text,
wFont_p fp,
@@ -717,12 +782,25 @@ void wDrawGetTextSize(
*w = XPIXELSTOINCH( bd, x );
*h = YPIXELSTOINCH( bd, y );
*d = YPIXELSTOINCH(bd, textMetric.tmDescent );
+ *a = YPIXELSTOINCH(bd, textMetric.tmAscent );
SelectObject( bd->hDc, prevFont );
DeleteObject( newFont );
fp->lfHeight = oldLfHeight;
}
-
+/**
+ * Draw text
+ *
+ * \param d device context
+ * \param px position x
+ * \param py position y
+ * \param angle drawing angle
+ * \param text text to print
+ * \param fp font
+ * \param siz font size
+ * \param dc color
+ * \param dopts drawing options
+ */
void wDrawString(
wDraw_p d,
wPos_t px,
@@ -736,8 +814,6 @@ void wDrawString(
{
int x, y;
HFONT newFont, prevFont;
- HDC newDc;
- HBITMAP oldBm, newBm;
DWORD extent;
int w, h;
RECT rect;
@@ -756,61 +832,47 @@ void wDrawString(
y = YINCH2PIX(d,py) + (int)(mswcos(angle)*fp->lfHeight-0.5);
if (noNegDrawArgs > 0 && (x < 0 || y < 0)) {
+ DeleteObject(newFont);
return;
}
- if (dopts & wDrawOptTemp) {
- setDrawMode(d->hDc, d, 0, wDrawLineSolid, dc, dopts);
- newDc = CreateCompatibleDC(d->hDc);
- prevFont = SelectObject(newDc, newFont);
- extent = GetTextExtent(newDc, CAST_AWAY_CONST text, strlen(text));
- w = LOWORD(extent);
- h = HIWORD(extent);
+ setDrawMode( d, 0, wDrawLineSolid, dc, dopts );
+ prevFont = SelectObject(d->hDc, newFont);
+ SetBkMode(d->hDc, TRANSPARENT);
- if (h > w) {
- w = h;
+ if (dopts & wDrawOutlineFont) {
+ HPEN oldPen;
+ BeginPath(d->hDc);
+ TextOut(d->hDc, x, y, text, strlen(text));
+ EndPath(d->hDc);
+
+ // Now draw outline text
+ oldPen = SelectObject(d->hDc,
+ CreatePen(PS_SOLID, 1,
+ mswGetColor(d->hasPalette, dc)));
+ StrokePath(d->hDc);
+ SelectObject(d->hDc, oldPen);
+ } else {
+ COLORREF old;
+
+ old = SetTextColor(d->hDc, mswGetColor(d->hasPalette,
+ dc));
+ TextOut(d->hDc, x, y, text, strlen(text));
+ SetTextColor(d->hDc, old);
}
- newBm = CreateCompatibleBitmap(d->hDc, w*2, w*2);
- oldBm = SelectObject(newDc, newBm);
- rect.top = rect.left = 0;
- rect.bottom = rect.right = w*2;
- FillRect(newDc, &rect, GetStockObject(WHITE_BRUSH));
- TextOut(newDc, w, w, text, strlen(text));
- BitBlt(d->hDc, x-w, y-w, w*2, w*2, newDc, 0, 0, tmpOp);
- SelectObject(newDc, oldBm);
- DeleteObject(newBm);
- SelectObject(newDc, prevFont);
- DeleteDC(newDc);
-
- if (d->hWnd) {
- rect.top = y-(w+1);
- rect.bottom = y+(w+1);
- rect.left = x-(w+1);
- rect.right = x+(w+1);
- myInvalidateRect(d, &rect);
- }
- } else {
- COLORREF old;
- prevFont = SelectObject(d->hDc, newFont);
- SetBkMode(d->hDc, TRANSPARENT);
- old = SetTextColor(d->hDc, mswGetColor(d->hasPalette,
- dc));
- TextOut(d->hDc, x, y, text, strlen(text));
- SetTextColor(d->hDc, old);
extent = GetTextExtent(d->hDc, CAST_AWAY_CONST text, strlen(text));
SelectObject(d->hDc, prevFont);
w = LOWORD(extent);
h = HIWORD(extent);
if (d->hWnd) {
- rect.top = y-(w+h+1);
- rect.bottom = y+(w+h+1);
- rect.left = x-(w+h+1);
- rect.right = x+(w+h+1);
+ rect.top = y - (w + h + 1);
+ rect.bottom = y + (w + h + 1);
+ rect.left = x - (w + h + 1);
+ rect.right = x + (w + h + 1);
myInvalidateRect(d, &rect);
}
- }
DeleteObject(newFont);
fp->lfHeight = oldLfHeight;
@@ -846,9 +908,9 @@ wFontSize_t wSelectedFontSize( void )
return fontSize;
}
-void wSetSelectedFontSize(int size)
+void wSetSelectedFontSize(wFontSize_t size)
{
- fontSize = (wFontSize_t)size;
+ fontSize = size;
}
/*
@@ -870,10 +932,18 @@ void wDrawFilledRectangle(
wDrawColor color,
wDrawOpts opts )
{
+ int mode;
RECT rect;
if (d == NULL)
return;
- setDrawBrush( d->hDc, d, color, opts );
+ setDrawBrush( d, color, opts );
+ if (opts & wDrawOptTransparent) {
+ mode = R2_NOTXORPEN;
+ }
+ else {
+ mode = R2_COPYPEN;
+ }
+ SetROP2(d->hDc, mode);
rect.left = XINCH2PIX(d,px);
rect.right = XINCH2PIX(d,px+sx);
rect.top = YINCH2PIX(d,py+sy);
@@ -903,103 +973,230 @@ void wDrawFilledRectangle(
}
#ifdef DRAWFILLPOLYLOG
-static FILE * logF;
+ static FILE * logF;
#endif
-static int wFillPointsMax = 0;
-static POINT * wFillPoints;
+
+static dynArr_t wFillPoints_da;
+static dynArr_t wFillType_da;
+
+#define POINTTYPE(N) DYNARR_N( BYTE, wFillType_da, (N) )
+#define POINTPOS(N) DYNARR_N( POINT, wFillPoints_da, (N) )
+
+/**
+ * Add a point definition to the list. The clipping rectangle is recalculated to
+ * include the new point.
+ *
+ * \param d IN drawing context
+ * \param pk IN index of new point
+ * \param pp IN pointer to the point's coordinates
+ * \param type IN line type
+ * \param pr IN/OUT clipping rectangle
+ */
static void addPoint(
- int * pk,
- POINT * pp,
- RECT * pr )
+ wDraw_p d,
+ int pk,
+ coOrd * pp,
+ BYTE type, RECT * pr)
{
+ POINT p;
+ p.x = XINCH2PIX(d, pp->x);
+ p.y = YINCH2PIX(d, pp->y);
+
#ifdef DRAWFILLPOLYLOG
-fprintf( logF, " q[%d] = {%d,%d}\n", *pk, pp->x, pp->y );
+ fprintf(logF, " q[%d] = {%d,%d}\n", pk, p.x, p.y);
#endif
- if ( *pk > 0 &&
- wFillPoints[(*pk)-1].x == pp->x && wFillPoints[(*pk)-1].y == pp->y )
- return;
- wFillPoints[ (*pk)++ ] = *pp;
- if (pp->x<pr->left)
- pr->left = pp->x;
- if (pp->x>pr->right)
- pr->right = pp->x;
- if (pp->y<pr->top)
- pr->top = pp->y;
- if (pp->y>pr->bottom)
- pr->bottom = pp->y;
+
+ DYNARR_N(POINT, wFillPoints_da, pk) = p;
+ DYNARR_N(BYTE, wFillType_da, pk) = type;
+
+ if (p.x < pr->left) {
+ pr->left = p.x;
+ }
+ if (p.x > pr->right) {
+ pr->right = p.x;
+ }
+ if (p.y < pr->top) {
+ pr->top = p.y;
+ }
+ if (p.y > pr->bottom) {
+ pr->bottom = p.y;
+ }
}
-void wDrawFilledPolygon(
- wDraw_p d,
- wPos_t p[][2],
- int cnt,
- wDrawColor color,
- wDrawOpts opts )
-{
- RECT rect;
- int i, k;
- POINT p0, p1, q0, q1;
- static POINT zero = { 0, 0 };
- wBool_t p1Clipped;
+/**
+ * Draw a polyline consisting of straights with smoothed or rounded corners.
+ * Optionally the area can be filled.
+ *
+ * \param d IN drawing context
+ * \param node IN 2 dimensional array of coordinates
+ * \param type IN type of corener (vertex, smooth or round)
+ * \param cnt IN number of points
+ * \param color IN color
+ * \param dw IN line width
+ * \param lt IN line type
+ * \param opts IN drawing options
+ * \param fill IN area will be filled if true
+ * \param open IN do not close area
+ */
- if (d == NULL)
- return;
- if (cnt*2 > wFillPointsMax) {
- wFillPoints = realloc( wFillPoints, cnt * 2 * sizeof *(POINT*)NULL );
- if (wFillPoints == NULL) {
- fputs("can't realloc wFillPoints\n", stderr);
- abort();
+void wDrawPolygon(
+ wDraw_p d,
+ wPos_t node[][2],
+ wPolyLine_e type[],
+ wIndex_t cnt,
+ wDrawColor color,
+ wDrawWidth dw,
+ wDrawLineType_e lt,
+ wDrawOpts opts,
+ int fill,
+ int open)
+{
+ RECT rect;
+ int i, prevNode, nextNode;
+ int pointCount = 0;
+ coOrd endPoint0, endPoint1, controlPoint0, controlPoint1;
+ coOrd point, startingPoint;
+ BOOL rc;
+ int closed = 0;
+
+ if (d == NULL) {
+ return;
+ }
+
+ // make sure the array for the points is large enough
+ // worst case are rounded corners that require 4 points
+ DYNARR_RESET(POINT,wFillPoints_da);
+ DYNARR_SET(POINT,wFillPoints_da,(cnt + 1) * 4);
+ DYNARR_RESET(BYTE,wFillType_da);
+ DYNARR_SET(POINT,wFillType_da, (cnt + 1) * 4);
+
+ BeginPath(d->hDc);
+
+ if (fill) {
+ int mode;
+ setDrawBrush(d, color, opts);
+ if (opts & wDrawOptTransparent) {
+ mode = R2_NOTXORPEN;
}
- wFillPointsMax = cnt*2;
- }
- setDrawBrush( d->hDc, d, color, opts );
- p1.x = rect.left = rect.right = XINCH2PIX(d,p[cnt-1][0]-1);
- p1.y = rect.top = rect.bottom = YINCH2PIX(d,p[cnt-1][1]+1);
-#ifdef DRAWFILLPOLYLOG
-logF = fopen( "log.txt", "a" );
-fprintf( logF, "\np[%d] = {%d,%d}\n", cnt-1, p1.x, p1.y );
-#endif
- p1Clipped = FALSE;
- for ( i=k=0; i<cnt; i++ ) {
- p0 = p1;
- p1.x = XINCH2PIX(d,p[i][0]-1);
- p1.y = YINCH2PIX(d,p[i][1]+1);
-#ifdef DRAWFILLPOLYLOG
-fprintf( logF, "p[%d] = {%d,%d}\n", i, p1.x, p1.y );
-#endif
- q0 = p0;
- q1 = p1;
- if ( clip0( &q0, &q1, NULL ) ) {
-#ifdef DRAWFILLPOLYLOG
-fprintf( logF, " clip( {%d,%d} {%d,%d} ) = {%d,%d} {%d,%d}\n", p0.x, p0.y, p1.x, p1.y, q0.x, q0.y, q1.x, q1.y );
-#endif
- if ( q0.x != p0.x || q0.y != p0.y ) {
- if ( k > 0 && ( q0.x > q0.y ) != ( wFillPoints[k-1].x > wFillPoints[k-1].y ) )
- addPoint( &k, &zero, &rect );
- addPoint( &k, &q0, &rect );
- }
- addPoint( &k, &q1, &rect );
- p1Clipped = ( q1.x != p1.x || q1.y != p1.y );
+ else {
+ mode = R2_COPYPEN;
}
- }
- if ( p1Clipped &&
- ( wFillPoints[k-1].x > wFillPoints[k-1].y ) != ( wFillPoints[0].x > wFillPoints[0].y ) )
- addPoint( &k, &zero, &rect );
+ SetROP2(d->hDc, mode);
+
+ } else {
+ setDrawMode(d, dw, lt, color, opts);
+ }
+
+ rect.left = rect.right = XINCH2PIX(d,node[cnt-1][0]-1);
+ rect.top = rect.bottom = YINCH2PIX(d,node[cnt-1][1]+1);
+
#ifdef DRAWFILLPOLYLOG
-fflush( logF );
-fclose( logF );
+ logF = fopen("log.txt", "a");
+ fprintf(logF, "\np[%d] = {%d,%d}\n", cnt-1, node[0][0], node[0][1]);
#endif
- if ( k <= 2 )
- return;
- Polygon( d->hDc, wFillPoints, k );
- if (d->hWnd) {
- rect.top--;
- rect.left--;
- rect.bottom++;
- rect.right++;
- myInvalidateRect( d, &rect );
- }
+
+ for (i=0; i<cnt; i++) {
+ wPolyLine_e type1;
+ point.x = node[i][0];
+ point.y = node[i][1];
+ if (type != NULL)
+ type1 = type[i];
+ else
+ type1 = wPolyLineStraight;
+
+ if (type1 == wPolyLineRound || type1 == wPolyLineSmooth) {
+ prevNode = (i == 0) ? cnt - 1 : i - 1;
+ nextNode = (i == cnt - 1) ? 0 : i + 1;
+
+ // calculate distance to neighboring nodes
+ int prevXDistance = node[i][0] - node[prevNode][0];
+ int prevYDistance = node[i][1] - node[prevNode][1];
+ int nextXDistance = node[nextNode][0]-node[i][0];
+ int nextYDistance = node[nextNode][1]-node[i][1];
+
+ // distance from node to endpoints of curve is half the line length
+ endPoint0.x = (prevXDistance/2)+node[prevNode][0];
+ endPoint0.y = (prevYDistance/2)+node[prevNode][1];
+ endPoint1.x = (nextXDistance/2)+node[i][0];
+ endPoint1.y = (nextYDistance/2)+node[i][1];
+
+ if (type1 == wPolyLineRound) {
+ double distNext = (nextXDistance*nextXDistance + nextYDistance * nextYDistance);
+ double distPrev = (prevXDistance*prevXDistance + prevYDistance * prevYDistance);
+ // but should be half of the shortest line length (equidistant from node) for round
+ if ((distPrev > 0) && (distNext > 0)) {
+ double ratio = sqrt(distPrev / distNext);
+ if (distPrev < distNext) {
+ endPoint1.x = ((nextXDistance*ratio) / 2) + node[i][0];
+ endPoint1.y = ((nextYDistance*ratio) / 2) + node[i][1];
+ } else {
+ endPoint0.x = node[i][0] - (prevXDistance / (2 * ratio));
+ endPoint0.y = node[i][1] - (prevYDistance / (2 * ratio));
+ }
+ }
+ // experience says that the best look is achieved if the
+ // control points are in the middle between end point and node
+ controlPoint0.x = (node[i][0] - endPoint0.x) / 2 + endPoint0.x;
+ controlPoint0.y = (node[i][1] - endPoint0.y) / 2 + endPoint0.y;
+
+ controlPoint1.x = (endPoint1.x - node[i][0]) / 2 + node[i][0];
+ controlPoint1.y = (endPoint1.y - node[i][1]) / 2 + node[i][1];
+ } else {
+ controlPoint0 = point;
+ controlPoint1 = point;
+ }
+ }
+
+ if (i==0) {
+ if (type1 == wPolyLineStraight || open) {
+ // for straight lines or open shapes use the starting point as passed
+ addPoint(d, pointCount++, &point, PT_MOVETO, &rect);
+ startingPoint = point;
+ } else {
+ // for Bezier begin with the calculated starting point
+ addPoint(d, pointCount++, &endPoint0, PT_MOVETO, &rect);
+ addPoint(d, pointCount++, &controlPoint0, PT_BEZIERTO, &rect);
+ addPoint(d, pointCount++, &controlPoint1, PT_BEZIERTO, &rect);
+ addPoint(d, pointCount++, &endPoint1, PT_BEZIERTO, &rect);
+ startingPoint = endPoint0;
+ }
+ } else {
+ if (type1 == wPolyLineStraight || (open && (i==cnt-1))) {
+ addPoint(d, pointCount++, &point, PT_LINETO, &rect);
+ } else {
+ if (i==cnt-1 && !open) {
+ closed = TRUE;
+ }
+ addPoint(d, pointCount++, &endPoint0, PT_LINETO, &rect);
+ addPoint(d, pointCount++, &controlPoint0, PT_BEZIERTO, &rect);
+ addPoint(d, pointCount++, &controlPoint1, PT_BEZIERTO, &rect);
+ addPoint(d, pointCount++, &endPoint1,
+ PT_BEZIERTO | (closed ? PT_CLOSEFIGURE : 0), &rect);
+ }
+ }
+ }
+
+ if (!open && !closed) {
+ addPoint(d, pointCount++, &startingPoint, PT_LINETO, &rect);
+ }
+ rc = PolyDraw(d->hDc, wFillPoints_da.ptr, wFillType_da.ptr, pointCount);
+
+ EndPath(d->hDc);
+
+ if (fill && !open) {
+ FillPath(d->hDc);
+ } else {
+ StrokePath(d->hDc);
+ }
+
+ if (d->hWnd) {
+ rect.top--;
+ rect.left--;
+ rect.bottom++;
+ rect.right++;
+ myInvalidateRect(d, &rect);
+ }
}
#define MAX_FILLCIRCLE_POINTS (30)
@@ -1022,7 +1219,7 @@ void wDrawFilledCircle(
p1.x = XINCH2PIX(d,x+r);
p1.y = YINCH2PIX(d,y-r)+1;
- setDrawBrush( d->hDc, d, color, opts );
+ setDrawBrush( d, color, opts );
if ( noNegDrawArgs > 0 && ( p0.x < 0 || p0.y < 0 ) ) {
if ( r > MAX_FILLCIRCLE_POINTS )
cnt = MAX_FILLCIRCLE_POINTS;
@@ -1035,7 +1232,8 @@ void wDrawFilledCircle(
circlePts[inx][0] = x + (int)(r * mswcos( inx*dang ) + 0.5 );
circlePts[inx][1] = y + (int)(r * mswsin( inx*dang ) + 0.5 );
}
- wDrawFilledPolygon( d, circlePts, cnt, color, opts );
+ //wDrawFilledPolygon( d, circlePts, NULL, cnt, color, opts );
+ wDrawPolygon(d, circlePts, NULL, cnt, color, 1, wDrawLineSolid,opts, TRUE, FALSE );
} else {
Ellipse( d->hDc, p0.x, p0.y, p1.x, p1.y );
if (d->hWnd) {
@@ -1084,21 +1282,30 @@ void wDrawRestoreImage(
}
-void wDrawClear( wDraw_p d )
+void wDrawClearTemp( wDraw_p d )
{
RECT rect;
- SetROP2( d->hDc, R2_WHITE );
- Rectangle( d->hDc, 0, 0, d->w, d->h );
+ SelectObject( d->hDc, d->hBmTemp );
+ BitBlt(d->hDc, 0, 0, d->w, d->h, d->hDc, 0, 0, WHITENESS);
if (d->hWnd) {
- rect.top = 0;
- rect.bottom = d->h;
- rect.left = 0;
- rect.right = d->w;
- InvalidateRect( d->hWnd, &rect, FALSE );
+ rect.top = 0;
+ rect.bottom = d->h;
+ rect.left = 0;
+ rect.right = d->w;
+ InvalidateRect( d->hWnd, &rect, FALSE );
}
}
+void wDrawClear( wDraw_p d )
+{
+ SelectObject( d->hDc, d->hBmMain );
+ // BitBlt is faster than Rectangle
+ BitBlt(d->hDc, 0, 0, d->w, d->h, d->hDc, 0, 0, WHITENESS);
+ wDrawClearTemp(d);
+}
+
+
void wDrawSetSize(
wDraw_p d,
wPos_t width,
@@ -1196,7 +1403,7 @@ void wDrawBitMap(
wDrawColor dc,
wDrawOpts dopt )
{
- HDC bmDc, hDc;
+ HDC bmDc;
HBITMAP oldBm;
DWORD mode;
int x0, y0;
@@ -1208,9 +1415,7 @@ void wDrawBitMap(
if ( noNegDrawArgs > 0 && ( x0 < 0 || y0 < 0 ) )
return;
#endif
- if (dopt & wDrawOptTemp) {
- mode = tmpOp;
- } else if (dc == wDrawColorWhite) {
+ if (dc == wDrawColorWhite) {
mode = clrOp;
dc = wDrawColorBlack;
} else {
@@ -1224,22 +1429,9 @@ void wDrawBitMap(
RGB( 255, 255, 255 ), bm->w, bm->h, bm->bmx );
bm->color = dc;
}
- if ( (dopt & wDrawOptNoClip) != 0 &&
- ( px < 0 || px >= d->w || py < 0 || py >= d->h ) ) {
- x0 += d->x;
- y0 += d->y;
- hDc = GetDC( ((wControl_p)(d->parent))->hWnd );
- bmDc = CreateCompatibleDC( hDc );
- oldBm = SelectObject( bmDc, bm->bm );
- BitBlt( hDc, x0, y0, bm->w, bm->h, bmDc, 0, 0, tmpOp );
- SelectObject( bmDc, oldBm );
- DeleteDC( bmDc );
- ReleaseDC( ((wControl_p)(d->parent))->hWnd, hDc );
- return;
- }
bmDc = CreateCompatibleDC( d->hDc );
- setDrawMode( d->hDc, d, 0, wDrawLineSolid, dc, dopt );
+ setDrawMode( d, 0, wDrawLineSolid, dc, dopt );
oldBm = SelectObject( bmDc, bm->bm );
BitBlt( d->hDc, x0, y0, bm->w, bm->h, bmDc, 0, 0, mode );
SelectObject( bmDc, oldBm );
@@ -1260,7 +1452,7 @@ wDrawBitMap_p wDrawBitMapCreate(
int h,
int x,
int y,
- const char * bits )
+ const unsigned char * bits )
{
wDrawBitMap_p bm;
int bmSize = ((w+7)/8) * h;
@@ -1322,12 +1514,14 @@ long FAR PASCAL XEXPORT mswDrawPush(
hDc = GetDC(hWnd);
if ( b->option & BD_DIRECT ) {
b->hDc = hDc;
- b->hBm = 0;
+ b->hBmMain = 0;
+ b->hBmTemp = 0;
b->hBmOld = 0;
} else {
b->hDc = CreateCompatibleDC( hDc );
- b->hBm = CreateCompatibleBitmap( hDc, b->w, b->h );
- b->hBmOld = SelectObject( b->hDc, b->hBm );
+ b->hBmMain = CreateCompatibleBitmap( hDc, b->w, b->h );
+ b->hBmTemp = CreateCompatibleBitmap( hDc, b->w, b->h );
+ b->hBmOld = SelectObject( b->hDc, b->hBmMain );
}
if (mswPalette) {
SelectPalette( b->hDc, mswPalette, 0 );
@@ -1355,8 +1549,12 @@ long FAR PASCAL XEXPORT mswDrawPush(
if ( b->option & BD_DIRECT ) {
} else {
hDc = GetDC( b->hWnd );
- b->hBm = CreateCompatibleBitmap( hDc, b->w, b->h );
- DeleteObject(SelectObject( b->hDc, b->hBm ));
+//- DeleteObject( b->hBmOld );
+ DeleteObject( b->hBmMain );
+ DeleteObject( b->hBmTemp );
+ b->hBmMain = CreateCompatibleBitmap( hDc, b->w, b->h );
+ b->hBmTemp = CreateCompatibleBitmap( hDc, b->w, b->h );
+//- b->hBmOld = SelectObject( b->hDc, b->hBmMain );
ReleaseDC( b->hWnd, hDc );
SetROP2( b->hDc, R2_WHITE );
Rectangle( b->hDc, 0, 0, b->w, b->h );
@@ -1383,6 +1581,7 @@ long FAR PASCAL XEXPORT mswDrawPush(
case WM_LBUTTONUP:
case WM_RBUTTONDOWN:
case WM_RBUTTONUP:
+ case WM_LBUTTONDBLCLK:
if (message == WM_LBUTTONDOWN)
action = wActionLDown;
else if (message == WM_RBUTTONDOWN)
@@ -1391,6 +1590,8 @@ long FAR PASCAL XEXPORT mswDrawPush(
action = wActionLUp;
else if (message == WM_RBUTTONUP)
action = wActionRUp;
+ else if (message == WM_LBUTTONDBLCLK)
+ action = wActionLDownDouble;
else {
if ( (wParam & MK_LBUTTON) != 0)
action = wActionLDrag;
@@ -1414,6 +1615,8 @@ long FAR PASCAL XEXPORT mswDrawPush(
iy = HIWORD( lParam );
x = XPIX2INCH( b, ix );
y = YPIX2INCH( b, iy );
+ b->lastX = x;
+ b->lastY = y;
if (b->action)
b->action( b, b->data, action, x, y );
if (b->hWnd)
@@ -1435,7 +1638,7 @@ long FAR PASCAL XEXPORT mswDrawPush(
case VK_RIGHT: extChar = wAccelKey_Right; break;
case VK_LEFT: extChar = wAccelKey_Left; break;
case VK_BACK: extChar = wAccelKey_Back; break;
- /*case VK_F1: extChar = wAccelKey_F1; break;*/
+ case VK_F1: extChar = wAccelKey_F1; break;
case VK_F2: extChar = wAccelKey_F2; break;
case VK_F3: extChar = wAccelKey_F3; break;
case VK_F4: extChar = wAccelKey_F4; break;
@@ -1450,9 +1653,9 @@ long FAR PASCAL XEXPORT mswDrawPush(
}
if (b && b->action) {
if (extChar != wAccelKey_None)
- b->action( b, b->data, wActionExtKey + ( (int)extChar << 8 ), 0, 0 );
+ b->action( b, b->data, wActionExtKey + ( (int)extChar << 8 ), b->lastX, b->lastY );
else
- b->action( b, b->data, wActionText + ( wParam << 8 ), 0, 0 );
+ b->action( b, b->data, wActionText + ( wParam << 8 ), b->lastX, b->lastY );
}
return 0;
@@ -1468,11 +1671,22 @@ long FAR PASCAL XEXPORT mswDrawPush(
b->paletteClock = winPaletteClock;
}
}
+ HBITMAP hBmOld = SelectObject( b->hDc, b->hBmMain );
+
+ if (bDrawMainBM) {
+ BitBlt(hDc, rect.left, rect.top,
+ rect.right - rect.left, rect.bottom - rect.top,
+ b->hDc, rect.left, rect.top,
+ SRCCOPY);
+ }
+ SelectObject( b->hDc, b->bCopiedMain?b->hBmTemp:b->hBmMain );
BitBlt( hDc, rect.left, rect.top,
rect.right-rect.left, rect.bottom-rect.top,
b->hDc, rect.left, rect.top,
- SRCCOPY );
+ bDrawMainBM?SRCAND:SRCCOPY);
+ SelectObject( b->hDc, hBmOld );
EndPaint( hWnd, &ps );
+ b->bCopiedMain = FALSE;
}
}
break;
@@ -1499,18 +1713,44 @@ long FAR PASCAL XEXPORT mswDrawPush(
static LRESULT drawMsgProc( wDraw_p b, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
wAction_t action;
-
+
switch( message ) {
case WM_MOUSEWHEEL:
/* handle mouse wheel events */
- /* fwKeys = GET_KEYSTATE_WPARAM(wParam); modifier keys are currently ignored */
- if ( GET_WHEEL_DELTA_WPARAM(wParam) > 0 ) {
- action = wActionWheelUp;
+ if (GET_KEYSTATE_WPARAM(wParam) & (MK_SHIFT|MK_MBUTTON) ) {
+ if (GET_KEYSTATE_WPARAM(wParam) & MK_CONTROL ) {
+ if (GET_WHEEL_DELTA_WPARAM(wParam) > 0) {
+ action = wActionScrollLeft;
+ } else {
+ action = wActionScrollRight;
+ }
+ } else {
+ if (GET_WHEEL_DELTA_WPARAM(wParam) > 0) {
+ action = wActionScrollUp;
+ } else {
+ action = wActionScrollDown;
+ }
+ }
} else {
- action = wActionWheelDown;
+ if (GET_WHEEL_DELTA_WPARAM(wParam) > 0) {
+ action = wActionWheelUp;
+ } else {
+ action = wActionWheelDown;
+ }
+ }
+ if (b->action)
+ b->action( b, b->data, action, b->lastX, b->lastY );
+ return 0;
+ case WM_MOUSEHWHEEL:
+ if ( GET_KEYSTATE_WPARAM(wParam) & (MK_SHIFT|MK_MBUTTON)) {
+ if ( GET_WHEEL_DELTA_WPARAM(wParam) > 0 ) {
+ action = wActionScrollRight;
+ } else {
+ action = wActionScrollLeft;
+ }
}
if (b->action)
- b->action( b, b->data, action, 0, 0 );
+ b->action( b, b->data, action, b->lastX, b->lastY );
return 0;
}
@@ -1521,10 +1761,12 @@ static LRESULT drawMsgProc( wDraw_p b, HWND hWnd, UINT message, WPARAM wParam, L
static void drawDoneProc( wControl_p b )
{
wDraw_p d = (wDraw_p)b;
- if (d->hBm) {
+ if (d->hBmMain) {
SelectObject( d->hDc, d->hBmOld );
- DeleteObject( d->hBm );
- d->hBm = (HBITMAP)0;
+ DeleteObject( d->hBmMain );
+ d->hBmMain = (HBITMAP)0;
+ DeleteObject( d->hBmTemp );
+ d->hBmTemp = (HBITMAP)0;
}
if (d->hPen) {
SelectObject( d->hDc, GetStockObject( BLACK_PEN ) );
@@ -1580,10 +1822,17 @@ void mswRepaintAll( void )
for ( b=drawList; b; b=b->drawNext ) {
if (GetUpdateRect( b->hWnd, &rect, FALSE )) {
hDc = BeginPaint( b->hWnd, &ps );
+ HBITMAP hBmOld = SelectObject( b->hDc, b->hBmMain );
BitBlt( hDc, rect.left, rect.top,
rect.right-rect.left, rect.bottom-rect.top,
b->hDc, rect.left, rect.top,
SRCCOPY );
+ SelectObject( b->hDc, b->hBmTemp );
+ BitBlt( hDc, rect.left, rect.top,
+ rect.right-rect.left, rect.bottom-rect.top,
+ b->hDc, rect.left, rect.top,
+ SRCAND );
+ SelectObject( b->hDc, hBmOld );
EndPaint( b->hWnd, &ps );
}
}
@@ -1648,6 +1897,7 @@ wDraw_p wDrawCreate(
SelectPalette( hDc, mswPalette, 0 );
ReleaseDC( d->hWnd, hDc );
}
+ d->bCopiedMain = FALSE;
return d;
}
@@ -1681,14 +1931,19 @@ wDraw_p wBitMapCreate( wPos_t w, wPos_t h, int planes )
wNoticeEx( NT_ERROR, "CreateBitMap: CreateDC fails", "Ok", NULL );
return FALSE;
}
- d->hBm = CreateCompatibleBitmap( hDc, d->w, d->h );
- if ( d->hBm == (HBITMAP)0 ) {
- wNoticeEx( NT_ERROR, "CreateBitMap: CreateBM fails", "Ok", NULL );
+ d->hBmMain = CreateCompatibleBitmap( hDc, d->w, d->h );
+ if ( d->hBmMain == (HBITMAP)0 ) {
+ wNoticeEx( NT_ERROR, "CreateBitMap: CreateBM Main fails", "Ok", NULL );
+ return FALSE;
+ }
+ d->hBmTemp = CreateCompatibleBitmap( hDc, d->w, d->h );
+ if ( d->hBmTemp == (HBITMAP)0 ) {
+ wNoticeEx( NT_ERROR, "CreateBitMap: CreateBM Temp fails", "Ok", NULL );
return FALSE;
}
d->hasPalette = (GetDeviceCaps(hDc,RASTERCAPS ) & RC_PALETTE) != 0;
ReleaseDC( mswHWnd, hDc );
- d->hBmOld = SelectObject( d->hDc, d->hBm );
+ d->hBmOld = SelectObject( d->hDc, d->hBmMain );
if (mswPalette) {
SelectPalette( d->hDc, mswPalette, 0 );
RealizePalette( d->hDc );
@@ -1697,8 +1952,9 @@ wDraw_p wBitMapCreate( wPos_t w, wPos_t h, int planes )
d->hFactor = (double)GetDeviceCaps( d->hDc, LOGPIXELSY );
d->DPI = 96.0; /*min( d->wFactor, d->hFactor );*/
d->hWnd = 0;
- SetROP2( d->hDc, R2_WHITE );
- Rectangle( d->hDc, 0, 0, d->w, d->h );
+ wDrawClear(d);
+//- SetROP2( d->hDc, R2_WHITE );
+//- Rectangle( d->hDc, 0, 0, d->w, d->h );
return d;
}
@@ -1709,10 +1965,12 @@ wBool_t wBitMapDelete( wDraw_p d )
DeleteObject( d->hPen );
d->hPen = (HPEN)0;
}
- if (d->hBm) {
+ if (d->hBmMain) {
SelectObject( d->hDc, d->hBmOld );
- DeleteObject( d->hBm );
- d->hBm = (HBITMAP)0;
+ DeleteObject( d->hBmMain );
+ d->hBmMain = (HBITMAP)0;
+ DeleteObject( d->hBmTemp );
+ d->hBmTemp = (HBITMAP)0;
}
if (d->hDc) {
DeleteDC( d->hDc );
@@ -1722,74 +1980,75 @@ wBool_t wBitMapDelete( wDraw_p d )
return TRUE;
}
-wBool_t wBitMapWriteFile( wDraw_p d, const char * fileName )
+/**
+ * write bitmap file. The bitmap in d must contain a valid HBITMAP
+ *
+ * \param d A wDraw_p to process.
+ * \param fileName Filename of the file.
+ *
+ * \returns A wBool_t. TRUE on success
+ */
+
+wBool_t
+wBitMapWriteFile(wDraw_p d, const char * fileName)
{
- char *pixels;
- int j, ww, chunk;
- FILE * f;
- BITMAPFILEHEADER bmfh;
- struct {
- BITMAPINFOHEADER bmih;
- RGBQUAD colors[256];
- } bmi;
- int rc;
-
- if ( d->hBm == 0)
- return FALSE;
- f = wFileOpen( fileName, "wb" );
- if (!f) {
- wNoticeEx( NT_ERROR, fileName, "Ok", NULL );
- return FALSE;
- }
- ww = ((d->w +3) / 4) * 4;
- bmfh.bfType = 'B'+('M'<<8);
- bmfh.bfSize = (long)(sizeof bmfh) + (long)(sizeof bmi.bmih) + (long)(sizeof bmi.colors) + (long)ww * (long)(d->h);
- bmfh.bfReserved1 = 0;
- bmfh.bfReserved2 = 0;
- bmfh.bfOffBits = sizeof bmfh + sizeof bmi.bmih + sizeof bmi.colors;
- fwrite( &bmfh, 1, sizeof bmfh, f );
- bmi.bmih.biSize = sizeof bmi.bmih;
- bmi.bmih.biWidth = d->w;
- bmi.bmih.biHeight = d->h;
- bmi.bmih.biPlanes = 1;
- bmi.bmih.biBitCount = 8;
- bmi.bmih.biCompression = BI_RGB;
- bmi.bmih.biSizeImage = 0;
- bmi.bmih.biXPelsPerMeter = 75*(10000/254);
- bmi.bmih.biYPelsPerMeter = 75*(10000/254);
- bmi.bmih.biClrUsed = bmi.bmih.biClrImportant = mswGetColorList( bmi.colors );
- SelectObject( d->hDc, d->hBmOld );
- rc = GetDIBits( d->hDc, d->hBm, 0, 1, NULL, (BITMAPINFO*)&bmi, DIB_RGB_COLORS );
- if ( rc == 0 ) {
- wNoticeEx( NT_ERROR, "WriteBitMap: Can't get bitmapinfo from Bitmap", "Ok", NULL );
- return FALSE;
- }
- bmi.bmih.biClrUsed = 256;
- fwrite( &bmi.bmih, 1, sizeof bmi.bmih, f );
- fwrite( bmi.colors, 1, sizeof bmi.colors, f );
- chunk = 32000/ww;
- pixels = (char*)malloc( ww*chunk );
- if ( pixels == NULL ) {
- wNoticeEx( NT_ERROR, "WriteBitMap: no memory", "OK", NULL );
- return FALSE;
- }
- for (j=0;j<d->h;j+=chunk) {
- if (j+chunk>d->h)
- chunk = d->h-j;
- rc = GetDIBits( d->hDc, d->hBm, j, chunk, pixels, (BITMAPINFO*)&bmi, DIB_RGB_COLORS );
- if ( rc == 0 )
- if ( rc == 0 ) {
- wNoticeEx( NT_ERROR, "WriteBitMap: Can't get bits from Bitmap", "Ok", NULL );
- return FALSE;
- }
- rc = fwrite( pixels, 1, ww*chunk, f );
- if (rc != ww*chunk) {
- wNoticeEx( NT_ERROR, "WriteBitMap: Bad fwrite", "Ok", NULL);
- }
- }
- free( pixels );
- SelectObject( d->hDc, d->hBm );
- fclose( f );
- return TRUE;
+ FIBITMAP *dib = NULL;
+ FIBITMAP *dib2 = NULL;
+ FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;
+ BOOL bSuccess = FALSE;
+
+ if (d->hBmMain) {
+
+ BITMAP bm;
+ GetObject(d->hBmMain, sizeof(BITMAP), (LPSTR)&bm);
+ dib = FreeImage_Allocate(bm.bmWidth, bm.bmHeight, bm.bmBitsPixel, 0, 0, 0);
+ // The GetDIBits function clears the biClrUsed and biClrImportant BITMAPINFO members (dont't know why)
+ // So we save these infos below. This is needed for palettized images only.
+ int nColors = FreeImage_GetColorsUsed(dib);
+ HDC dc = GetDC(NULL);
+ GetDIBits(dc,
+ d->hBmMain,
+ 0,
+ FreeImage_GetHeight(dib),
+ FreeImage_GetBits(dib),
+ FreeImage_GetInfo(dib),
+ DIB_RGB_COLORS);
+ ReleaseDC(NULL, dc);
+
+ // restore BITMAPINFO members
+ FreeImage_GetInfoHeader(dib)->biClrUsed = nColors;
+ FreeImage_GetInfoHeader(dib)->biClrImportant = nColors;
+ // we will get a 32 bit bitmap on Windows systems with invalid alpha
+ // so it needs to be converted to 24 bits.
+ // (see: https://sourceforge.net/p/freeimage/discussion/36110/thread/0699ce8e/ )
+ dib2 = FreeImage_ConvertTo24Bits(dib);
+ FreeImage_Unload(dib);
+ }
+
+ // Try to guess the file format from the file extension
+ fif = FreeImage_GetFIFFromFilename(fileName);
+ if (fif != FIF_UNKNOWN) {
+ // Check that the dib can be saved in this format
+ BOOL bCanSave;
+
+ FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(dib2);
+ if (image_type == FIT_BITMAP) {
+ // standard bitmap type
+ WORD bpp = FreeImage_GetBPP(dib2);
+ bCanSave = (FreeImage_FIFSupportsWriting(fif) &&
+ FreeImage_FIFSupportsExportBPP(fif, bpp));
+ } else {
+ // special bitmap type
+ bCanSave = FreeImage_FIFSupportsExportType(fif, image_type);
+ }
+
+ if (bCanSave) {
+ bSuccess = FreeImage_Save(fif, dib2, fileName, PNG_DEFAULT);
+ return bSuccess;
+ }
+ }
+ FreeImage_Unload(dib2);
+
+ return bSuccess;
}
diff --git a/app/wlib/mswlib/mswedit.c b/app/wlib/mswlib/mswedit.c
index fbae89f..dc70ac3 100644
--- a/app/wlib/mswlib/mswedit.c
+++ b/app/wlib/mswlib/mswedit.c
@@ -1,3 +1,25 @@
+/** \file mswedit.c
+ * Text entry widgets
+ */
+
+/* XTrackCAD - Model Railroad CAD
+ * Copyright (C) 2005 Dave Bullis
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
#include <windows.h>
#include <string.h>
#include <malloc.h>
@@ -15,6 +37,7 @@ struct wString_t {
wStringCallBack_p action;
};
+#ifdef LATER
struct wInteger_t {
WOBJ_COMMON
long low, high;
@@ -30,6 +53,7 @@ struct wFloat_t {
double oldValue;
wFloatCallBack_p action;
};
+#endif // LATER
static XWNDPROC oldEditProc = NULL;
@@ -47,53 +71,35 @@ long FAR PASCAL _export pushEdit(
UINT wParam,
LONG lParam )
{
- /* Catch <Return> and cause focus to leave control */
+
#ifdef WIN32
long inx = GetWindowLong( hWnd, GWL_ID );
#else
short inx = GetWindowWord( hWnd, GWW_ID );
#endif
- wControl_p b = mswMapIndex( inx );
+ wControl_p b = mswMapIndex(inx);
- switch (message) {
+ switch (message)
+ {
case WM_CHAR:
- if ( b != NULL) {
- switch( wParam ) {
- case 0x0D:
- case 0x1B:
- case 0x09:
- SetFocus( ((wControl_p)(b->parent))->hWnd );
- SendMessage( ((wControl_p)(b->parent))->hWnd, WM_CHAR,
- wParam, lParam );
- /*SendMessage( ((wControl_p)(b->parent))->hWnd, WM_COMMAND,
- inx, MAKELONG( hWnd, EN_KILLFOCUS ) );*/
- return 0L;
- }
- }
- break;
-
- case WM_KEYUP:
- if ( b != NULL)
- switch (b->type) {
- case B_STRING:
- if (((wString_p)b)->action)
- mswSetTrigger( (wControl_p)b, triggerString );
- break;
-#ifdef LATER
- case B_INTEGER:
- if (((wInteger_p)b)->action)
- mswSetTrigger( (wControl_p)b, triggerInteger );
- break;
- case B_FLOAT:
- if (((wFloat_p)b)->action)
- mswSetTrigger( (wControl_p)b, triggerFloat );
- break;
-#endif
- }
- break;
+ if (b != NULL) {
+ switch (wParam) {
+ case VK_RETURN:
+ triggerString(b);
+ return (0L);
+ break;
+ case 0x1B:
+ case 0x09:
+ SetFocus(((wControl_p)(b->parent))->hWnd);
+ SendMessage(((wControl_p)(b->parent))->hWnd, WM_CHAR,
+ wParam, lParam);
+ return 0L;
+ }
+ }
+ break;
}
- return CallWindowProc( oldEditProc, hWnd, message, wParam, lParam );
+ return CallWindowProc(oldEditProc, hWnd, message, wParam, lParam);
}
/*
@@ -112,7 +118,7 @@ void wStringSetValue(
WORD len = (WORD)strlen( arg );
SendMessage( b->hWnd, WM_SETTEXT, 0, (DWORD)arg );
#ifdef WIN32
- SendMessage( b->hWnd, EM_SETSEL, len, len );
+ SendMessage( b->hWnd, EM_SETSEL, 0, -1 );
SendMessage( b->hWnd, EM_SCROLLCARET, 0, 0L );
#else
SendMessage( b->hWnd, EM_SETSEL, 0, MAKELPARAM(len,len) );
@@ -140,60 +146,92 @@ const char * wStringGetValue(
return buff;
}
+/**
+ * Get the string from a entry field. The returned pointer has to be free() after processing is complete.
+ *
+ * \param bs IN string entry field
+ *
+ * \return pointer to entered string or NULL if entry field is empty.
+ */
-static void triggerString(
- wControl_p b )
+static char *getString(wString_p bs)
{
- wString_p bs = (wString_p)b;
- int cnt;
+ char *tmpBuffer = NULL;
+ UINT chars = SendMessage(bs->hWnd, EM_LINELENGTH, (WPARAM)0, 0L);
- if (bs->action) {
- *(WPARAM*)&mswTmpBuff[0] = 78;
- cnt = (int)SendMessage( bs->hWnd, (UINT)EM_GETLINE, 0, (DWORD)(LPSTR)mswTmpBuff );
- mswTmpBuff[cnt] = '\0';
- if (bs->valueP)
- strcpy( bs->valueP, mswTmpBuff );
- bs->action( mswTmpBuff, bs->data );
- mswSetTrigger( NULL, NULL );
- }
+ if (chars) {
+ tmpBuffer = malloc(chars > sizeof(WORD)? chars + 1 : sizeof(WORD) + 1);
+ *(WORD *)tmpBuffer = chars;
+ SendMessage(bs->hWnd, (UINT)EM_GETLINE, 0, (LPARAM)tmpBuffer);
+ tmpBuffer[chars] = '\0';
+ }
+
+ return (tmpBuffer);
}
+/**
+ * Retrieve and process string entry. If a string has been entered, the callback for
+ * the specific entry field is called.
+ *
+ * \param b IN string entry field
+ */
-LRESULT stringProc(
- wControl_p b,
- HWND hWnd,
- UINT message,
- WPARAM wParam,
- LPARAM lParam )
+static void triggerString(
+ wControl_p b)
{
- wString_p bs = (wString_p)b;
- int cnt;
- int modified;
-
- switch( message ) {
-
- case WM_COMMAND:
- switch (WCMD_PARAM_NOTF) {
- case EN_KILLFOCUS:
- modified = (int)SendMessage( bs->hWnd, (UINT)EM_GETMODIFY, 0, 0L );
- if (!modified)
- break;
- *(WPARAM*)&mswTmpBuff[0] = 78;
- cnt = (int)SendMessage( bs->hWnd, (UINT)EM_GETLINE, 0, (DWORD)(LPSTR)mswTmpBuff );
- mswTmpBuff[cnt] = '\0';
- if (bs->valueP)
- strncpy( bs->valueP, mswTmpBuff, bs->valueL );
- if (bs->action) {
- bs->action( mswTmpBuff, bs->data );
- mswSetTrigger( NULL, NULL );
- }
- break;
- SendMessage( bs->hWnd, (UINT)EM_SETMODIFY, FALSE, 0L );
- }
- break;
+ wString_p bs = (wString_p)b;
+
+ char *enteredString = getString(bs);
+ if (enteredString)
+ {
+ if (bs->valueP) {
+ strcpy(bs->valueP, enteredString);
+ }
+ if (bs->action) {
+ bs->action(enteredString, bs->data);
+ }
+ free(enteredString);
}
+}
- return DefWindowProc( hWnd, message, wParam, lParam );
+
+LRESULT stringProc(
+ wControl_p b,
+ HWND hWnd,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+{
+ wString_p bs = (wString_p)b;
+ int modified;
+
+ switch (message) {
+
+ case WM_COMMAND:
+ switch (WCMD_PARAM_NOTF) {
+ case EN_KILLFOCUS:
+ modified = (int)SendMessage(bs->hWnd, (UINT)EM_GETMODIFY, 0, 0L);
+ if (!modified) {
+ break;
+ }
+
+ char *enteredString = getString(bs);
+ if (enteredString) {
+ if (bs->valueP) {
+ strcpy(bs->valueP, enteredString);
+ }
+ if (bs->action) {
+ bs->action(enteredString, bs->data);
+ mswSetTrigger(NULL, NULL);
+ }
+ free(enteredString);
+ }
+ SendMessage(bs->hWnd, (UINT)EM_SETMODIFY, FALSE, 0L);
+ }
+ break;
+ }
+
+ return DefWindowProc(hWnd, message, wParam, lParam);
}
@@ -249,10 +287,6 @@ wString_p wStringCreate(
return b;
}
-#ifdef CONTROL3D
- Ctl3dSubclassCtl( b->hWnd);
-#endif
-
newEditProc = MakeProcInstance( (XWNDPROC)pushEdit, mswHInst );
oldEditProc = (XWNDPROC)GetWindowLong(b->hWnd, GWL_WNDPROC );
SetWindowLong( b->hWnd, GWL_WNDPROC, (LONG)newEditProc );
diff --git a/app/wlib/mswlib/mswint.h b/app/wlib/mswlib/mswint.h
index 2311415..e560053 100644
--- a/app/wlib/mswlib/mswint.h
+++ b/app/wlib/mswlib/mswint.h
@@ -1,6 +1,7 @@
#include "wlib.h"
#include "mswlib.h"
-#include "dynarr.h"
+//#include "dynarr.h"
+#include "common.h"
#ifndef WIN32
/*#define CONTROL3D*/
#endif
@@ -38,7 +39,9 @@
#define WSCROLL_PARAM_HWND HIWORD(lParam)
#endif
-#define CAST_AWAY_CONST (char *)
+#ifndef CAST_AWAY_CONST
+ #define CAST_AWAY_CONST (char *)
+#endif
#define BOOL_T wBool_t
#define POS_T wPos_t
@@ -122,16 +125,24 @@ struct wDraw_t {
double DPI;
wDrawRedrawCallBack_p drawRepaint;
wDrawActionCallBack_p action;
- HBITMAP hBm;
+ HBITMAP hBmMain;
+ HBITMAP hBmTemp;
+ HBITMAP hBmOld;
HPEN hPen;
HBRUSH hBrush;
wDraw_p drawNext;
- HBITMAP hBmOld;
wBool_t hasPalette;
int paletteClock;
HBITMAP hBmBackup;
HDC hDcBackup;
HBITMAP hBmBackupOld;
+ void *background;
+ wBool_t bTempMode;
+ wBool_t bCopiedMain;
+
+ wPos_t lastX;
+ wPos_t lastY;
+
};
extern HINSTANCE mswHInst;
@@ -147,6 +158,7 @@ extern wDrawColor wDrawColorWhite;
extern wDrawColor wDrawColorBlack;
extern long mswThickFont;
extern double mswScale;
+extern double scaleIcon;
DWORD mswGetBaseStyle( wWin_p );
char * mswStrdup( const char * );
@@ -190,4 +202,5 @@ void deleteBitmaps( void );
void mswDrawIcon( HDC, int, int, wIcon_p, int, COLORREF, COLORREF );
/* gwin32.c*/
-char *g_win32_getlocale (void); \ No newline at end of file
+char *g_win32_getlocale (void);
+
diff --git a/app/wlib/mswlib/mswlist.c b/app/wlib/mswlib/mswlist.c
index 2453a5e..95ecec3 100644
--- a/app/wlib/mswlib/mswlist.c
+++ b/app/wlib/mswlib/mswlist.c
@@ -243,7 +243,7 @@ wBool_t wListSetValues(
void * itemData )
{
listData * ldp;
- WORD curSel;
+ WORD curSel = -1;
ldp = (listData*)malloc( sizeof *ldp );
ldp->itemContext = itemData;
ldp->bm = bm;
diff --git a/app/wlib/mswlib/mswmenu.c b/app/wlib/mswlib/mswmenu.c
index 815752a..d56e24d 100644
--- a/app/wlib/mswlib/mswmenu.c
+++ b/app/wlib/mswlib/mswmenu.c
@@ -31,6 +31,7 @@
#include <math.h>
#include <ctype.h>
#include <assert.h>
+#include "misc.h"
#include "mswint.h"
#include "i18n.h"
@@ -579,7 +580,7 @@ wMenuPush_p wMenuPushCreate(
{
wMenuPush_p mi;
int rc;
- char label[80];
+ char *label = malloc(strlen(labelStr) + 30 ); /**< The label and sufficient space for the keyboard shortcut */
char *cp;
char ac;
UINT vk;
@@ -591,9 +592,9 @@ wMenuPush_p wMenuPushCreate(
mi->mparent = m;
mi->acclKey = acclKey;
mi->enabled = TRUE;
- strcpy( label, mi->labelStr );
+ strcpy(label, labelStr);
modifier = 0;
- if ( acclKey != 0 ) {
+ if ( acclKey != 0 && strlen(label ) < 60 ) {
DYNARR_APPEND( acclTable_t, acclTable_da, 10 );
cp = label + strlen( label );
*cp++ = '\t';
@@ -625,6 +626,7 @@ wMenuPush_p wMenuPushCreate(
acclTable(acclTable_da.cnt-1).mp = mi;
}
rc = AppendMenu( m->menu, MF_STRING, mi->index, label );
+ free(label);
return mi;
}
diff --git a/app/wlib/mswlib/mswmisc.c b/app/wlib/mswlib/mswmisc.c
index e045cc8..6b5f1c9 100644
--- a/app/wlib/mswlib/mswmisc.c
+++ b/app/wlib/mswlib/mswmisc.c
@@ -22,6 +22,7 @@
#define _WIN32_WINNT 0x0500
#include <windows.h>
+#include <shellapi.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
@@ -30,8 +31,10 @@
#include <stdio.h>
#include <assert.h>
#include <htmlhelp.h>
+#include "misc.h"
#include "mswint.h"
#include "i18n.h"
+#include "FreeImage.h"
#if _MSC_VER > 1300
#define stricmp _stricmp
@@ -47,6 +50,8 @@ char * mswStrdup(const char *);
#define ALARM_TIMER (902)
#define BALLOONHELP_TIMER (903)
#define TRIGGER_TIMER (904)
+#define CONTROLHILITEWIDTH (2)
+#define CONTROLHILITECOLOR (RGB(0x3a,0x5f,0xcd))
#define WANT_LITTLE_LABEL_FONT
@@ -78,6 +83,8 @@ HFONT mswLabelFont;
long mswThickFont = 1;
double mswScale = 1.0;
+double scaleIcon = 1.0; /**< Scaling factor for toolbar icons */
+
callBacks_t *mswCallBacks[CALLBACK_CNT];
void closeBalloonHelp(void);
@@ -87,7 +94,12 @@ static wControl_p getControlFromCursor(HWND, wWin_p *);
*/
struct wWin_t {
- WOBJ_COMMON
+ WOBJ_COMMON
+ int validGeometry;
+ int min_width;
+ int max_width;
+ int min_height;
+ int max_height;
wPos_t lastX, lastY;
wPos_t padX, padY;
wControl_p first, last;
@@ -174,7 +186,21 @@ static int dumpControls;
extern char *userLocale;
-
+// list of supported fileformats for image files
+char * filterImageFiles[] = { N_("All image files"),
+ "*.gif;*.jpg;*.jpeg;*.png;*.tif;*.tiff",
+ N_("GIF files (*.gif)"),
+ "*.gif",
+ N_("JPEG files (*.jpeg,*.jpg)"),
+ "*.jpg;*.jpeg",
+ N_("PNG files (*.png)"),
+ "*.png",
+ N_("TIFF files (*.tiff, *.tif)"),
+ "*.tif;*.tiff",
+ N_("All files (*)"),
+ "*",
+ };
+
/*
*****************************************************************************
*
@@ -610,6 +636,35 @@ static void getSavedSizeAndPos(
}
/**
+ * Set min and max dimensions for a window.
+ *
+ * \param min_width IN minimum width of window
+ * \param max_width IN maximum width of window
+ * \param min_height IN minimum height of window
+ * \param max_height IN maximum height of window
+ * \param base_width IN unused on Windows
+ * \param base_height IN unused on Windows
+ * \param aspect_ration IN unused on Windows
+ */
+void wSetGeometry(wWin_p win,
+ int min_width,
+ int max_width,
+ int min_height,
+ int max_height,
+ int base_width,
+ int base_height,
+ double aspect_ratio)
+{
+ win->validGeometry = TRUE; //remember that geometry was set
+ win->min_width = min_width;
+ win->max_width = max_width;
+ win->min_height = min_height;
+ win->max_height = max_height;
+
+ return;
+}
+
+/**
* Create a window. Retrieves the saved size and position and restores the created window accordingly.
*
* \param hWnd IN parent window
@@ -812,6 +867,10 @@ wWin_p wWinMainCreate(
wPrefGetInteger("draw", "maximized", &maximize, 0L);
option |= (maximize ? F_MAXIMIZE : 0);
+ wPrefGetFloat(PREFSECTION, LARGEICON, &scaleIcon, 1.0);
+ if (scaleIcon < 1.0) scaleIcon = 1.0;
+ if (scaleIcon > 2.0) scaleIcon = 2.0;
+
showCmd = SW_SHOW;
w = winCommonCreate(NULL, W_MAIN, option|F_RESIZE, "MswMainWindow",
WS_OVERLAPPEDWINDOW, labelStr, winProc, x, y, data,
@@ -819,13 +878,10 @@ wWin_p wWinMainCreate(
mswHWnd = w->hWnd;
if (!mswThickFont) {
- DWORD dw;
SendMessage(w->hWnd, WM_SETFONT, (WPARAM)mswLabelFont, 0L);
hDc = GetDC(w->hWnd);
GetTextMetrics(hDc, &tm);
mswEditHeight = tm.tmHeight+2;
- dw = GetTextExtent(hDc, "AXqypj", 6);
- mswEditHeight = HIWORD(dw)+2;
ReleaseDC(w->hWnd, hDc);
}
@@ -1380,12 +1436,11 @@ void wWinClear(
{
}
-void wSetCursor(
+void wSetCursor(wDraw_p win,
wCursor_t cursor)
{
switch (cursor) {
case wCursorNormal:
- case wCursorQuestion:
default:
SetCursor(LoadCursor(NULL, IDC_ARROW));
break;
@@ -1401,6 +1456,42 @@ void wSetCursor(
case wCursorIBeam:
SetCursor(LoadCursor(NULL, IDC_IBEAM));
break;
+
+ case wCursorQuestion:
+ SetCursor(LoadCursor(NULL, IDC_HELP));
+ break;
+
+ case wCursorHand:
+ SetCursor(LoadCursor(NULL, IDC_HAND));
+ break;
+
+ case wCursorNo:
+ SetCursor(LoadCursor(NULL, IDC_NO));
+ break;
+
+ case wCursorSizeAll:
+ SetCursor(LoadCursor(NULL, IDC_SIZEALL));
+ break;
+
+ case wCursorSizeNESW:
+ SetCursor(LoadCursor(NULL, IDC_SIZENESW));
+ break;
+
+ case wCursorSizeNWSE:
+ SetCursor(LoadCursor(NULL, IDC_SIZENWSE));
+ break;
+
+ case wCursorSizeNS:
+ SetCursor(LoadCursor(NULL, IDC_SIZENS));
+ break;
+
+ case wCursorSizeWE:
+ SetCursor(LoadCursor(NULL, IDC_SIZEWE));
+ break;
+
+ case wCursorAppStart:
+ SetCursor(LoadCursor(NULL, IDC_APPSTARTING));
+ break;
}
curCursor = cursor;
@@ -1663,7 +1754,7 @@ void wControlSetLabel(
wControl_p b,
const char * labelStr)
{
- if (b->type == B_RADIO || b->type == B_TOGGLE) {
+ if (b->type == B_RADIO ) {
;
} else {
int lab_l;
@@ -1693,8 +1784,6 @@ void wControlSetContext(
b->data = context;
}
-static int controlHiliteWidth = 5;
-static int controlHiliteWidth2 = 3;
void wControlHilite(
wControl_p b,
wBool_t hilite)
@@ -1702,12 +1791,13 @@ void wControlHilite(
HDC hDc;
HPEN oldPen, newPen;
int oldMode;
+ LOGBRUSH logBrush = { BS_SOLID, CONTROLHILITECOLOR, (ULONG_PTR)NULL };
if (b == NULL) {
return;
}
- if (!IsWindowVisible(b->parent->hWnd)) {
+ if (!IsWindowVisible(b->parent->hWnd)) {
return;
}
@@ -1716,14 +1806,18 @@ void wControlHilite(
}
hDc = GetDC(b->parent->hWnd);
- newPen = CreatePen(PS_SOLID, controlHiliteWidth, RGB(0,0,0));
+ newPen = ExtCreatePen(PS_GEOMETRIC | PS_SOLID | PS_ENDCAP_ROUND | PS_JOIN_BEVEL,
+ CONTROLHILITEWIDTH,
+ &logBrush,
+ 0,
+ NULL);
oldPen = SelectObject(hDc, newPen);
oldMode = SetROP2(hDc, R2_NOTXORPEN);
- MoveTo(hDc, b->x-controlHiliteWidth2, b->y-controlHiliteWidth2);
- LineTo(hDc, b->x+b->w+controlHiliteWidth2, b->y-controlHiliteWidth2);
- LineTo(hDc, b->x+b->w+controlHiliteWidth2, b->y+b->h+controlHiliteWidth2);
- LineTo(hDc, b->x-controlHiliteWidth2, b->y+b->h+controlHiliteWidth2);
- LineTo(hDc, b->x-controlHiliteWidth2, b->y-controlHiliteWidth2);
+ Rectangle(hDc,
+ b->x - CONTROLHILITEWIDTH - 1,
+ b->y - CONTROLHILITEWIDTH - 1,
+ b->x + b->w + CONTROLHILITEWIDTH + 1,
+ b->y + b->h + CONTROLHILITEWIDTH + 1);
SetROP2(hDc, oldMode);
SelectObject(hDc, oldPen);
DeleteObject(newPen);
@@ -1766,6 +1860,26 @@ void wMessage(
ReleaseDC(w->hWnd, hDc);
}
+/**
+ * Open a document using an external application
+ *
+ * \param file
+ * \return TRUE on success, FALSE on error
+ *
+ */
+unsigned wOpenFileExternal(char *file)
+{
+ HINSTANCE res;
+
+ res = ShellExecute(mswHWnd, "open", file, NULL, NULL, SW_SHOW);
+
+ if ((int)res <= 32) {
+ wNoticeEx(NT_ERROR, "Error when opening file!", "Cancel", NULL);
+ return(FALSE);
+ }
+
+ return(TRUE);
+}
void wExit(int rc)
{
@@ -2040,12 +2154,22 @@ int wNotice3(
}
}
+/**
+ * Show help text for the given topic.
+ *
+ * \param topic The topic. if NULL the index page is shown.
+ */
void wHelp(
const char * topic)
{
char *pszHelpTopic;
HWND hwndHelp;
+ char *theTopic = "index";
+
+ if (topic) {
+ theTopic = topic;
+ }
if (!helpInitted) {
HtmlHelp(NULL, NULL, HH_INITIALIZE, (DWORD)&dwCookie) ;
@@ -2054,9 +2178,9 @@ void wHelp(
/* "c:\\help.chm::/intro.htm>mainwin", */
/* attention: always adapt constant value (10) to needed number of formatting characters */
- pszHelpTopic = malloc(strlen(helpFile) + strlen(topic) + 10);
+ pszHelpTopic = malloc(strlen(helpFile) + strlen(theTopic) + 10);
assert(pszHelpTopic != NULL);
- sprintf(pszHelpTopic, "/%s.html", topic);
+ sprintf(pszHelpTopic, "/%s.html", theTopic);
hwndHelp = HtmlHelp(mswHWnd, helpFile, HH_DISPLAY_TOPIC,
(DWORD_PTR)pszHelpTopic);
@@ -2068,6 +2192,8 @@ void wHelp(
}
+
+
void doHelpMenu(void * context)
{
HH_FTS_QUERY ftsQuery;
@@ -2092,6 +2218,13 @@ void doHelpMenu(void * context)
HtmlHelp(mswHWnd, helpFile, HH_DISPLAY_SEARCH,(DWORD)&ftsQuery);
break;
+
+ case 3: /*Context*/
+ const char * topic;
+ topic = GetCurCommandName();
+ wHelp(topic);
+ break;
+
default:
return;
}
@@ -2099,11 +2232,16 @@ void doHelpMenu(void * context)
helpInitted = TRUE;
}
+void wDoAccelHelp(wAccelKey_e key, void * context) {
+ doHelpMenu(context);
+}
+
void wMenuAddHelp(
wMenu_p m)
{
- wMenuPushCreate(m, NULL, "&Contents", 0, doHelpMenu, (void*)1);
- wMenuPushCreate(m, NULL, "&Search for Help on...", 0, doHelpMenu, (void*)2);
+ wMenuPushCreate(m, NULL, _("&Contents"), 0, doHelpMenu, (void*)1);
+ wMenuPushCreate(m, NULL, _("&Search for Help on..."), 0, doHelpMenu, (void*)2);
+ wMenuPushCreate(m, NULL, _("Co&mmand Context Help"), 0, doHelpMenu, (void*)3);
}
@@ -2326,6 +2464,24 @@ struct wFilSel_t {
#define SELECTEDFILENAME_BUFFERSIZE (8*1024) /**<estimated size in case all param files are selected */
+char *
+GetImageFileFormats(void)
+{
+ char *filter = malloc(2048);
+ char *current = filter;
+ char *message;
+
+ for (int i = 0; i < sizeof(filterImageFiles) / sizeof(filterImageFiles[0]); i += 2) {
+ message = gettext(filterImageFiles[i]);
+ strcpy(current, message);
+ current += strlen(message) + 1;
+ strcpy(current, filterImageFiles[i + 1]);
+ current += strlen(current) + 1;
+ }
+ *current = '\0';
+ return(filter);
+}
+
/**
* Run the file selector. After the selector is finished an array of filenames is
* created. Each filename will be fully qualified. The array and the number of
@@ -2356,11 +2512,16 @@ int wFilSelect(
strcmp(dirName, ".") == 0) {
dirName = wGetUserHomeDir();
}
-
memset(&ofn, 0, sizeof ofn);
ofn.lStructSize = sizeof ofn;
ofn.hwndOwner = mswHWnd;
- ofn.lpstrFilter = fs->extList;
+ if (fs->option == FS_PICTURES) {
+ ofn.lpstrFilter = GetImageFileFormats();
+ }
+ else {
+ ofn.lpstrFilter = fs->extList;
+ }
+
ofn.nFilterIndex = 0;
selFileName = malloc(SELECTEDFILENAME_BUFFERSIZE);
memset(selFileName, '\0', SELECTEDFILENAME_BUFFERSIZE);
@@ -2599,6 +2760,23 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
wAccelKey_e extChar;
switch (message) {
+ case WM_GETMINMAXINFO:
+ LPMINMAXINFO pMMI = (LPMINMAXINFO)lParam;
+ inx = GetWindowWord(hWnd, 0);
+
+ if (inx >= CONTROL_BASE && inx <= controlMap_da.cnt) {
+ w = (wWin_p)controlMap(inx - CONTROL_BASE).b;
+ if (w != NULL) {
+ if (w->validGeometry) {
+ pMMI->ptMaxTrackSize.x = w->max_width;
+ pMMI->ptMaxTrackSize.y = w->max_height;
+ pMMI->ptMinTrackSize.x = w->min_width;
+ pMMI->ptMinTrackSize.y = w->min_height;
+ }
+ }
+ }
+ return(0);
+
case WM_MOUSEWHEEL:
inx = GetWindowWord(hWnd, 0);
b = getControlFromCursor(hWnd, NULL);
@@ -2614,22 +2792,6 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
case WM_DRAWITEM:
case WM_COMMAND:
case WM_MEASUREITEM:
- case WM_NOTVALID:
- if (WCMD_PARAM_ID == IDM_DOHELP) {
- b = getControlFromCursor(hWnd, NULL);
- closeBalloonHelp();
-
- if (!b) {
- return 0L;
- }
-
- if (b->helpStr) {
- wHelp(b->helpStr);
- }
-
- return 0L;
- }
-
closeBalloonHelp();
if (WCMD_PARAM_ID < CONTROL_BASE || WCMD_PARAM_ID > (WPARAM)controlMap_da.cnt) {
@@ -2913,26 +3075,26 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
case WM_SETCURSOR:
/*if (any buttons down)
break;*/
- wSetCursor(curCursor);
+ wSetCursor(NULL, curCursor);
if (!mswAllowBalloonHelp) {
- break;
+ return TRUE;
}
if (IsIconic(mswHWnd)) {
- break;
+ return TRUE;
}
b = getControlFromCursor(hWnd, NULL);
if (b == balloonControlButton) {
- break;
+ return TRUE;
}
if (/*(!IsWindowEnabled(hWnd))*/ GetActiveWindow() != hWnd ||
(!b) || b->type == B_DRAW || b->helpStr == NULL) {
closeBalloonHelp();
- break;
+ return TRUE;
}
if (b != balloonHelpButton) {
@@ -2940,19 +3102,19 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
}
if (balloonHelpState != balloonHelpIdle) {
- break;
+ return TRUE;
}
balloonHelpTimer = SetTimer(mswHWnd, BALLOONHELP_TIMER,
balloonHelpTimeOut, NULL);
if (balloonHelpTimer == (UINT)0) {
- break;
+ return TRUE;
}
balloonHelpState = balloonHelpWait;
balloonHelpButton = b;
- break;
+ return TRUE;
case WM_SYSCOMMAND:
inx = GetWindowWord(hWnd, 0);
@@ -3211,13 +3373,13 @@ static BOOL InitApplication(HINSTANCE hinstCurrent)
return FALSE;
}
- wc.style = CS_VREDRAW | CS_HREDRAW | CS_OWNDC;
+ wc.style = CS_VREDRAW | CS_HREDRAW | CS_OWNDC | CS_DBLCLKS;
wc.lpfnWndProc = mswDrawPush;
wc.lpszClassName = mswDrawWindowClassName;
wc.cbWndExtra = 4;
if (!RegisterClass(&wc)) {
- mswFail("RegisterClass(drawClass)");
+ mswFail("RegisterClass(drawClass)");
return FALSE;
}
@@ -3238,8 +3400,6 @@ int PASCAL WinMain(HINSTANCE hinstCurrent, HINSTANCE hinstPrevious,
HDC hDc;
char **argv;
int argc;
- TEXTMETRIC tm;
- DWORD dw;
if (!hinstPrevious) {
if (!InitApplication(hinstCurrent)) {
@@ -3264,10 +3424,6 @@ int PASCAL WinMain(HINSTANCE hinstCurrent, HINSTANCE hinstPrevious,
mswScale = 1.0;
}
- GetTextMetrics(hDc, &tm);
- mswEditHeight = tm.tmHeight + 8;
- dw = GetTextExtent(hDc, "AXqypj", 6);
- mswEditHeight = HIWORD(dw)+2;
ReleaseDC(0, hDc);
mswCreateCheckBitmaps();
/*
diff --git a/app/wlib/mswlib/mswmsg.c b/app/wlib/mswlib/mswmsg.c
index 4a21921..6445299 100644
--- a/app/wlib/mswlib/mswmsg.c
+++ b/app/wlib/mswlib/mswmsg.c
@@ -42,6 +42,7 @@ static void repaintMessage(
HFONT hFont;
LOGFONT msgFont;
double scale = 1.0;
+ TEXTMETRIC textMetrics;
hDc = GetDC( hWnd );
@@ -74,13 +75,15 @@ static void repaintMessage(
hFont = SelectObject( hDc, mswLabelFont );
}
+ GetTextMetrics(hDc, &textMetrics);
+
rect.bottom = (long)(bm->y+( bm->h ));
rect.right = (long)(bm->x+( scale * bm->w ));
- rect.top = bm->y;
+ rect.top = bm->y+1;
rect.left = bm->x;
SetBkColor( hDc, GetSysColor( COLOR_BTNFACE ) );
- ExtTextOut( hDc, bm->x, bm->y, ETO_CLIPPED|ETO_OPAQUE, &rect, bm->message, strlen( bm->message ), NULL );
+ ExtTextOut( hDc, bm->x, bm->y + ((bm->h + 2 - textMetrics.tmHeight) / 2), ETO_CLIPPED|ETO_OPAQUE, &rect, bm->message, strlen( bm->message ), NULL );
if( scale != 1.0 )
/* in case we did create a new font earlier, delete it now */
@@ -138,7 +141,7 @@ wPos_t wMessageGetHeight( long flags )
if( flags & BM_SMALL )
scale = SCALE_SMALL;
- return((wPos_t)((mswEditHeight - 4) * scale ));
+ return((wPos_t)((mswEditHeight) * scale ));
#endif
}
diff --git a/app/wlib/mswlib/mswpref.c b/app/wlib/mswlib/mswpref.c
index eaa39fe..201171a 100644
--- a/app/wlib/mswlib/mswpref.c
+++ b/app/wlib/mswlib/mswpref.c
@@ -5,6 +5,7 @@
#include <commdlg.h>
#include <math.h>
#include <stdio.h>
+#include "misc.h"
#include "mswint.h"
#include <shlobj.h>
#include <Shlwapi.h>
diff --git a/app/wlib/mswlib/mswprint.c b/app/wlib/mswlib/mswprint.c
index 91f05ea..13756c7 100644
--- a/app/wlib/mswlib/mswprint.c
+++ b/app/wlib/mswlib/mswprint.c
@@ -27,7 +27,7 @@ struct tagPD printDlg;
#endif
static int printStatus = FALSE;
static DOCINFO docInfo;
-static double pageSizeW = 8.5, pageSizeH = 11.0;
+static double tBorder = 0.0, rBorder = 0.0, bBorder = 0.0, lBorder = 0.0;
static double physSizeW = 8.5, physSizeH = 11.0;
static int pageCount = -1;
@@ -66,10 +66,16 @@ void getPageDim( HDC hDc )
size_h = GetDeviceCaps( hDc, VERTSIZE );
print_d.w = res_w = GetDeviceCaps( hDc, HORZRES );
print_d.h = res_h = GetDeviceCaps( hDc, VERTRES );
+ double pageSizeW, pageSizeH;
pageSizeW = ((double)res_w)/print_d.wFactor;
pageSizeH = ((double)res_h)/print_d.hFactor;
physSizeW = ((double)dims.x)/print_d.wFactor;
physSizeH = ((double)dims.y)/print_d.hFactor;
+ // Get Borders/Margins - offs are the top, left borders
+ lBorder = ((double)offs.x)/print_d.hFactor;
+ tBorder = ((double)offs.y)/print_d.hFactor;
+ rBorder = physSizeW-pageSizeW-lBorder;
+ bBorder = physSizeH-pageSizeH-tBorder;
}
static wBool_t printInit( void )
@@ -83,6 +89,7 @@ static wBool_t printInit( void )
return printerOk;
}
initted = TRUE;
+ memset(&printDlg, 0, sizeof printDlg);
printDlg.lStructSize = sizeof printDlg;
printDlg.hwndOwner = NULL;
printDlg.Flags = PD_RETURNDC|PD_RETURNDEFAULT;
@@ -194,16 +201,36 @@ void wPrintSetup( wPrintSetupCallBack_p callback )
}
}
+const char* wPrintGetName()
+{
+ static char sPrinterName[100];
+ HANDLE hDevNames = printDlg.hDevNames;
+ DEVNAMES* pDevNames = GlobalLock(hDevNames);
+ if (pDevNames == NULL) {
+ strcpy(sPrinterName, "Printer");
+ }
+ else {
+ strncpy(sPrinterName, (char*)pDevNames + pDevNames->wDeviceOffset, sizeof sPrinterName - 1);
+ sPrinterName[sizeof sPrinterName - 1] = '\0';
+ }
+ GlobalUnlock( hDevNames );
+ return sPrinterName;
+}
-void wPrintGetPageSize( double *w, double *h )
+void wPrintGetMargins(
+ double * tMargin,
+ double * rMargin,
+ double * bMargin,
+ double * lMargin )
{
- printInit();
- *w = pageSizeW;
- *h = pageSizeH;
+ if ( tMargin ) *tMargin = tBorder;
+ if ( rMargin ) *rMargin = rBorder;
+ if ( bMargin ) *bMargin = bBorder;
+ if ( lMargin ) *lMargin = lBorder;
}
-void wPrintGetPhysSize( double *w, double *h )
+void wPrintGetPageSize( double *w, double *h )
{
printInit();
*w = physSizeW;
@@ -378,10 +405,3 @@ wBool_t wPrintNewMargin( const char * name, double t, double b, double l, double
{
return TRUE;
}
-
-void wPrintSetCallBacks(
- wAddPrinterCallBack_p newPrinter,
- wAddMarginCallBack_p newMargin,
- wAddFontAliasCallBack_p newFontAlias )
-{
-}
diff --git a/app/wlib/mswlib/mswsplash.c b/app/wlib/mswlib/mswsplash.c
index 47df6b7..172b563 100644
--- a/app/wlib/mswlib/mswsplash.c
+++ b/app/wlib/mswlib/mswsplash.c
@@ -204,8 +204,11 @@ wCreateSplash( char *appname, char *appver )
/* create the title string */
pszBuf = malloc( strlen( appname ) + strlen( appver ) + 2 );
- if( !pszBuf )
- return( 0 );
+ if (!pszBuf) {
+ GlobalUnlock(hgbl);
+ GlobalFree(hgbl);
+ return(0);
+ }
sprintf( pszBuf, "%s %s", appname, appver );
lpw += 1+MultiByteToWideChar (CP_ACP, 0, pszBuf, -1, (LPWSTR)lpw, 50);
@@ -226,7 +229,6 @@ wCreateSplash( char *appname, char *appver )
GlobalUnlock(hgbl);
hSplash = CreateDialogIndirectParam( mswHInst, (LPDLGTEMPLATE) hgbl,
mswHWnd, (DLGPROC)SplashDlgProc, (LPARAM)hBmp );
- GetLastError();
/* free allocated memory */
GlobalFree(hgbl);
diff --git a/app/wlib/mswlib/mswtext.c b/app/wlib/mswlib/mswtext.c
index 293e2b4..0a0ce88 100644
--- a/app/wlib/mswlib/mswtext.c
+++ b/app/wlib/mswlib/mswtext.c
@@ -137,6 +137,9 @@ void wTextAppend(
if (b->option&BO_READONLY) {
SendMessage(b->hWnd, EM_SETREADONLY, 1, 0L);
}
+
+ // scroll to bottom of text box
+ SendMessage(b->hWnd, EM_LINESCROLL, 0, 10000L);
}
@@ -247,42 +250,54 @@ wBool_t wTextGetModified(
return (wBool_t)rc;
}
+/**
+ * Get the size of the text in the text control including terminating '\0'. Note that
+ * the text actually might be shorter if the text includes CRs.
+ *
+ * \param b IN text control
+ * \return required buffer size
+ */
int wTextGetSize(
wText_p b)
{
- int lc, l, len=0;
- lc = (int)SendMessage(b->hWnd, EM_GETLINECOUNT, 0, 0L);
+ int len;
- for (l=0; l<lc ; l++) {
- int charIndex = (int)SendMessage(b->hWnd, EM_LINEINDEX, l, 0L);
- len += (int)SendMessage(b->hWnd, EM_LINELENGTH, charIndex, 0L) + 1;
- }
-
- if (len == 1) {
- len = 0;
- }
+ len = GetWindowTextLength(b->hWnd);
- return len;
+ return len + 1;
}
+/**
+ * Get the text from a textentry. The buffer must be large enough for the text and
+ * the terminating \0.
+ * In case the string contains carriage returns these are removed. The returned string
+ * will be shortened accordingly.
+ * To get the complete contents the buffer size must be equal or greater then the return
+ * value of wTextGetSize()
+ *
+ * \param b IN text entry
+ * \param t IN/OUT buffer for text
+ * \param s IN size of buffer
+ */
+
void wTextGetText(
wText_p b,
char * t,
int s)
{
- int lc, l, len;
- s--;
- lc = (int)SendMessage(b->hWnd, EM_GETLINECOUNT, 0, 0L);
-
- for (l=0; l<lc && s>=0; l++) {
- *(WORD*)t = s;
- len = (int)SendMessage(b->hWnd, EM_GETLINE, l, (LPARAM)t);
- t += len;
- *t++ = '\n';
- s -= len+1;
- }
-
- *(t - 1) = '\0'; // overwrite the last \n added
+ char *buffer = malloc(s);
+ char *ptr = buffer;
+ GetWindowText(b->hWnd, buffer, s);
+
+ // remove carriage returns
+ while (*ptr) {
+ if (*ptr != '\r') {
+ *t = *ptr;
+ t++;
+ }
+ ptr++;
+ }
+ free(buffer);
}
diff --git a/app/wlib/mswlib/simple-gettext.c b/app/wlib/mswlib/simple-gettext.c
index d213fc3..412eece 100644
--- a/app/wlib/mswlib/simple-gettext.c
+++ b/app/wlib/mswlib/simple-gettext.c
@@ -148,8 +148,9 @@ utf8_to_native( char *str, unsigned int len, int dummy )
/* 2. convert from UTF-8 to system codepage */
WideCharToMultiByte(CP_ACP, 0, (LPWSTR)buf, wcharLen, resBuffer, len + 1, NULL, NULL );
- free( buf );
+
}
+ free(buf);
return( resBuffer );
}
diff --git a/app/wlib/mswlib/unittest/CMakeLists.txt b/app/wlib/mswlib/unittest/CMakeLists.txt
new file mode 100644
index 0000000..b91c1ff
--- /dev/null
+++ b/app/wlib/mswlib/unittest/CMakeLists.txt
@@ -0,0 +1,11 @@
+# build unit tests for the xtrkcad Windows library
+
+add_executable(utf8test
+ utf8test.c
+ ../utf8conv.c
+ )
+
+target_link_libraries(utf8test
+ ${LIBS})
+
+add_test(UTF8ConversionTest utf8test)
diff --git a/app/wlib/mswlib/unittest/utf8test.c b/app/wlib/mswlib/unittest/utf8test.c
new file mode 100644
index 0000000..5b00371
--- /dev/null
+++ b/app/wlib/mswlib/unittest/utf8test.c
@@ -0,0 +1,65 @@
+/** \file utf8test.c
+* Unit tests for utf 8 conversion routines on Windows
+*/
+
+#include <setjmp.h>
+#include <stdbool.h>
+#include <string.h>
+
+#include <cmocka.h>
+
+#include <wlib.h>
+
+#define SIMPLEASCIITEXT "The quick brown fox jumps over the lazy dog."
+#define UMLAUTTEXT ""
+
+static void
+ASCIIText(void **state)
+{
+ char output[100];
+ char result[100];
+ bool success;
+ (void)state;
+
+ success = wSystemToUTF8(SIMPLEASCIITEXT, output, 100);
+ assert_true((void *)success);
+
+ success = wUTF8ToSystem(output, result, 100);
+ assert_true((void *)success);
+
+ assert_false(strcmp(SIMPLEASCIITEXT, result));
+}
+
+static void
+Umlauts(void **state)
+{
+ char output[100];
+ char result[100];
+ bool success;
+ (void)state;
+
+ success = wIsUTF8(UMLAUTTEXT);
+ assert_false((void *)success);
+
+ success = wSystemToUTF8(UMLAUTTEXT, output, 100);
+ assert_true((void *)success);
+
+ success = wIsUTF8(output);
+ assert_true((void *)success);
+
+ success = wUTF8ToSystem(output, result, 100);
+ assert_true((void *)success);
+
+ assert_false(strcmp(UMLAUTTEXT, result));
+}
+
+
+int main(void)
+{
+ const struct CMUnitTest tests[] = {
+ cmocka_unit_test(ASCIIText),
+ cmocka_unit_test(Umlauts),
+ };
+
+ return cmocka_run_group_tests(tests, NULL, NULL);
+} \ No newline at end of file
diff --git a/app/wlib/mswlib/utf8conv.c b/app/wlib/mswlib/utf8conv.c
new file mode 100644
index 0000000..62ada76
--- /dev/null
+++ b/app/wlib/mswlib/utf8conv.c
@@ -0,0 +1,210 @@
+/**
+ * \file utf8conv.c.
+ *
+ * UTF-8 conversion functions
+ */
+
+/* XTrkCad - Model Railroad CAD
+ * Copyright (C) 2020 Martin Fischer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <malloc.h>
+#include <stdbool.h>
+#include <string.h>
+
+#include <Windows.h>
+
+#include <wlib.h>
+
+/**
+ * Convert system codepage to UTF 8
+ *
+ * \param inString The input string.
+ * \param [in,out] outString The output string buffer.
+ * \param outStringLength Length of the output buffer
+ *
+ * \returns FALSE if it fails.
+ */
+
+bool
+wSystemToUTF8(const char *inString, char *outString, unsigned outStringLength)
+{
+ unsigned int cnt = 2 * (strlen(inString) + 1);
+ char *tempBuffer = malloc(cnt);
+
+ // convert to wide character (UTF16)
+ MultiByteToWideChar(CP_ACP,
+ 0,
+ inString,
+ -1,
+ (LPWSTR)tempBuffer,
+ cnt);
+
+ // convert from wide char to UTF-8
+ WideCharToMultiByte(CP_UTF8,
+ 0,
+ (LPCWCH)tempBuffer,
+ -1,
+ (LPSTR)outString,
+ outStringLength,
+ NULL,
+ NULL);
+
+ free(tempBuffer);
+ return true;
+}
+
+/**
+ * Convert from UTF-8 to system codepage
+ *
+ * \param inString The input string.
+ * \param [in,out] outString the output string.
+ * \param outStringLength Length of the output buffer.
+ *
+ * \returns True if it succeeds, false if it fails.
+ */
+
+bool
+wUTF8ToSystem(const char *inString, char *outString, unsigned outStringLength)
+{
+ unsigned int cnt = 2 * (strlen(inString) + 1);
+ char *tempBuffer = malloc(cnt);
+
+ // convert to wide character (UTF16)
+ MultiByteToWideChar(CP_UTF8,
+ 0,
+ inString,
+ -1,
+ (LPWSTR)tempBuffer,
+ cnt);
+
+
+ cnt = WideCharToMultiByte(CP_ACP,
+ 0,
+ (LPCWCH)tempBuffer,
+ -1,
+ (LPSTR)outString,
+ 0L,
+ NULL,
+ NULL);
+
+ if (outStringLength <= cnt) {
+ return (false);
+ }
+
+ // convert from wide char to system codepage
+ WideCharToMultiByte(CP_ACP,
+ 0,
+ (LPCWCH)tempBuffer,
+ -1,
+ (LPSTR)outString,
+ outStringLength,
+ NULL,
+ NULL);
+
+ free(tempBuffer);
+ return true;
+}
+
+/**
+ * Is passed string in correct UTF-8 format?
+ * Taken from https://stackoverflow.com/questions/1031645/how-to-detect-utf-8-in-plain-c
+ *
+ * \param string The string to check.
+ *
+ * \returns True if UTF 8, false if not.
+ */
+
+bool wIsUTF8(const char * string)
+{
+ if (!string) {
+ return 0;
+ }
+
+ const unsigned char * bytes = (const unsigned char *)string;
+ while (*bytes) {
+ if ((// ASCII
+ // use bytes[0] <= 0x7F to allow ASCII control characters
+ bytes[0] == 0x09 ||
+ bytes[0] == 0x0A ||
+ bytes[0] == 0x0D ||
+ (0x20 <= bytes[0] && bytes[0] <= 0x7E)
+ )
+ ) {
+ bytes += 1;
+ continue;
+ }
+
+ if ((// non-overlong 2-byte
+ (0xC2 <= bytes[0] && bytes[0] <= 0xDF) &&
+ (0x80 <= bytes[1] && bytes[1] <= 0xBF)
+ )
+ ) {
+ bytes += 2;
+ continue;
+ }
+
+ if ((// excluding overlongs
+ bytes[0] == 0xE0 &&
+ (0xA0 <= bytes[1] && bytes[1] <= 0xBF) &&
+ (0x80 <= bytes[2] && bytes[2] <= 0xBF)
+ ) ||
+ (// straight 3-byte
+ ((0xE1 <= bytes[0] && bytes[0] <= 0xEC) ||
+ bytes[0] == 0xEE ||
+ bytes[0] == 0xEF) &&
+ (0x80 <= bytes[1] && bytes[1] <= 0xBF) &&
+ (0x80 <= bytes[2] && bytes[2] <= 0xBF)
+ ) ||
+ (// excluding surrogates
+ bytes[0] == 0xED &&
+ (0x80 <= bytes[1] && bytes[1] <= 0x9F) &&
+ (0x80 <= bytes[2] && bytes[2] <= 0xBF)
+ )
+ ) {
+ bytes += 3;
+ continue;
+ }
+
+ if ((// planes 1-3
+ bytes[0] == 0xF0 &&
+ (0x90 <= bytes[1] && bytes[1] <= 0xBF) &&
+ (0x80 <= bytes[2] && bytes[2] <= 0xBF) &&
+ (0x80 <= bytes[3] && bytes[3] <= 0xBF)
+ ) ||
+ (// planes 4-15
+ (0xF1 <= bytes[0] && bytes[0] <= 0xF3) &&
+ (0x80 <= bytes[1] && bytes[1] <= 0xBF) &&
+ (0x80 <= bytes[2] && bytes[2] <= 0xBF) &&
+ (0x80 <= bytes[3] && bytes[3] <= 0xBF)
+ ) ||
+ (// plane 16
+ bytes[0] == 0xF4 &&
+ (0x80 <= bytes[1] && bytes[1] <= 0x8F) &&
+ (0x80 <= bytes[2] && bytes[2] <= 0xBF) &&
+ (0x80 <= bytes[3] && bytes[3] <= 0xBF)
+ )
+ ) {
+ bytes += 4;
+ continue;
+ }
+
+ return false;
+ }
+
+ return true;
+} \ No newline at end of file
diff --git a/distribution/CMakeLists.txt b/distribution/CMakeLists.txt
index fc63769..9eede85 100644
--- a/distribution/CMakeLists.txt
+++ b/distribution/CMakeLists.txt
@@ -5,7 +5,7 @@ SET(CPACK_PACKAGE_FILE_NAME "xtrkcad-setup-${XTRKCAD_VERSION}")
SET(CPACK_PACKAGE_INSTALL_DIRECTORY "XTrkCAD ${XTRKCAD_VERSION}")
SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "XTrkCAD ${XTRKCAD_VERSION}")
SET(CPACK_PACKAGE_NAME "xtrkcad")
-SET(CPACK_PACKAGE_VENDOR "http://www.xtrkcad.org")
+SET(CPACK_PACKAGE_VENDOR "XTrackCAD Project")
SET(CPACK_PACKAGE_VERSION ${XTRKCAD_VERSION})
SET(CPACK_PACKAGE_VERSION_MAJOR ${XTRKCAD_MAJOR_VERSION})
SET(CPACK_PACKAGE_VERSION_MINOR ${XTRKCAD_MINOR_VERSION})
@@ -28,4 +28,3 @@ ENDIF(UNIX AND NOT APPLE)
IF(WIN32)
ADD_SUBDIRECTORY(win32)
ENDIF(WIN32)
-
diff --git a/distribution/osx/CMakeLists.txt b/distribution/osx/CMakeLists.txt
index 2561fae..6e4dd05 100644
--- a/distribution/osx/CMakeLists.txt
+++ b/distribution/osx/CMakeLists.txt
@@ -1,5 +1,5 @@
# Automatically generate most of our external dependencies ...
-GET_TARGET_PROPERTY(XTRKCAD_LOCATION xtrkcad LOCATION)
+SET(XTRKCAD_LOCATION $<TARGET_FILE:xtrkcad>)
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/dependencies.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/dependencies.cmake" @ONLY)
INSTALL(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/dependencies.cmake")
diff --git a/distribution/osx/gtk-bundle/xtrkcad-launcher.sh b/distribution/osx/gtk-bundle/xtrkcad-launcher.sh
index 30988e5..69aac1e 100755
--- a/distribution/osx/gtk-bundle/xtrkcad-launcher.sh
+++ b/distribution/osx/gtk-bundle/xtrkcad-launcher.sh
@@ -36,7 +36,7 @@ if type -p "X" & > /dev/null; then
fi
#XTRKCAD_BUNDLE="`echo "$0" | sed -e 's/\/Contents\/MacOS\/XTrackCAD//'`"
-XTRKCAD_BUNDLE="$bundle"
+XTRKCAD_BUNDLE="`echo "$bundle" | sed -e 's_/Contents/MacOS/XTrackCAD_/_'`"
XTRKCAD_RESOURCES="$XTRKCAD_BUNDLE/Contents/Resources"
XTRKCAD_TEMP="/tmp/xtrkcad/$UID"
XTRKCAD_ETC="$XTRKCAD_TEMP/etc"
@@ -52,7 +52,7 @@ export GTK_DATA_PREFIX="$bundle_res"
export GTK_EXE_PREFIX="$bundle_res"
export GTK_PATH="$bundle_res"
-export GTK2_RC_FILES="$bundle_etc/gtk-2.0/gtkrc"
+# export GTK2_RC_FILES="$bundle_etc/gtk-2.0/gtkrc"
XTRKCAD_PANGO_RC_FILE="$XTRKCAD_RESOURCES/etc/pango/pangorc"
I18NDIR="$bundle_data/locale"
diff --git a/distribution/osx/gtk-bundle/xtrkcad-template.dmg.zip b/distribution/osx/gtk-bundle/xtrkcad-template.dmg.zip
index bb6972a..2e7663b 100644
--- a/distribution/osx/gtk-bundle/xtrkcad-template.dmg.zip
+++ b/distribution/osx/gtk-bundle/xtrkcad-template.dmg.zip
Binary files differ
diff --git a/distribution/posix/CMakeLists.txt b/distribution/posix/CMakeLists.txt
index 96636b0..3356005 100644
--- a/distribution/posix/CMakeLists.txt
+++ b/distribution/posix/CMakeLists.txt
@@ -1,6 +1,6 @@
# Setup packaging ...
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "XTrackCAD is a CAD program for designing model railroad layouts.")
-set(CPACK_GENERATOR "RPM" "STGZ")
+set(CPACK_GENERATOR "DEB" "RPM" "STGZ")
set(CPACK_SOURCE_GENERATOR "TGZ" "TBZ2" "ZIP")
set(CPACK_PACKAGE_RELEASE 1)
set(CPACK_RPM_PACKAGE_LICENSE "GPL")
@@ -17,12 +17,18 @@ set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_CURRENT_SOURCE_DIR}/package.txt)
set(CPACK_PACKAGE_VENDOR "XTrackCAD Fork Project")
# common dependencies for all Linux builds
-set(CPACK_RPM_PACKAGE_REQUIRES "glibc gtk2")
+set(CPACK_RPM_PACKAGE_REQUIRES "glibc gtk2 zip zlib")
+
+set(CPACK_RPM_BUILDREQUIRES
+ "gcc, cmake >= 2.4.7, pkgconfig, gtk2-devel"
+ "gettext, gettext-devel, glibc-devel"
+)
# Add dependency to webkitgtk if configured
if(NOT XTRKCAD_USE_BROWSER)
- set(CPACK_RPM_PACKAGE_REQUIRES
- "${CPACK_RPM_PACKAGE_REQUIRES} webkitgtk")
+ set(CPACK_RPM_PACKAGE_REQUIRES
+ "${CPACK_RPM_PACKAGE_REQUIRES} webkitgtk")
+# message(AUTHOR_WARNING "Add dependency to webkitgtk for viewing help!")
endif()
# exclude these directories from the rpm
@@ -40,5 +46,33 @@ set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION
set(CPACK_RPM_CHANGELOG_FILE "${CMAKE_CURRENT_SOURCE_DIR}////changelog.txt")
+set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
+
+set(CPACK_DEBIAN_PACKAGE_NAME "XTrkCad")
+
+set(CPACK_DEBIAN_PACKAGE_VERSION "1:${XTRKCAD_VERSION}")
+
+set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
+
+set(CPACK_DEBIAN_PACKAGE_DEPENDS "zip")
+
+set(CPACK_DEBIAN_PACKAGE_MAINTAINER "xtrkcad@sillub.com")
+
+set(CPACK_PACKAGE_CONTACT "xtrkcad@sillub.com")
+
+set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "XTrkCad description")
+
+set(CPACK_DEBIAN_PACKAGE_SECTION "contrib/graphics")
+
+set(CPACK_DEBIAN_PACKAGE_COMPRESSION "gzip")
+
+set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
+
+set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "xtrkcad.org")
+
+set(CPACK_PACKAGE_EXECUTABLES "xtrkcad;XTrkCad-5.2.1-Beta")
+
+set(CPACK_CREATE_DESKTOP_LINKS "xtrkcad")
+
include(CPack)
diff --git a/distribution/win32/nsis/CMakeLists.txt b/distribution/win32/nsis/CMakeLists.txt
index 40d3990..150fe43 100644
--- a/distribution/win32/nsis/CMakeLists.txt
+++ b/distribution/win32/nsis/CMakeLists.txt
@@ -1,17 +1,23 @@
STRING(REPLACE "/" "\\\\" NATIVE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
SET(CPACK_GENERATOR "NSIS")
+SET(CPACK_PACKAGE_INSTALL_DIRECTORY "XTrackCAD")
+SET(CPACK_NSIS_EXECUTABLE_NAME "bin\\\\xtrkcad.exe")
+SET(CPACK_NSIS_DISPLAY_NAME "XTrackCAD ${CPACK_PACKAGE_VERSION}")
SET(CPACK_PACKAGE_ICON "${NATIVE_CURRENT_SOURCE_DIR}\\\\headerimage.bmp")
SET(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\xtrkcad.exe")
SET(CPACK_NSIS_HELP_LINK "http://www.xtrkcad.org")
+SET(CPACK_NSIS_MUI_FINISHPAGE_RUN "xtrkcad.exe")
+set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL "on")
+
+SET(CPACK_NSIS_STARTMENU_FOLDER "XTrackCAD")
SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS
"; add part specific to XTrackCAD installation
!include \\\"${NATIVE_CURRENT_SOURCE_DIR}\\\\install.nsh\\\"")
-
+
SET(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS
"; add part specific to XTrackCAD uninstall
!include \\\"${NATIVE_CURRENT_SOURCE_DIR}\\\\uninstall.nsh\\\"")
-
-INCLUDE(CPack)
+INCLUDE(CPack)
diff --git a/distribution/win32/nsis/install.nsh b/distribution/win32/nsis/install.nsh
index dc4ed80..0fc948d 100644
--- a/distribution/win32/nsis/install.nsh
+++ b/distribution/win32/nsis/install.nsh
@@ -5,9 +5,9 @@
CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\XTrackCAD Help.lnk" "$INSTDIR\share\xtrkcad\xtrkcad.chm" "" "" 0
CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\XTrackCAD ReadMe.lnk" "notepad.exe" "$INSTDIR\share\xtrkcad\ReadMe.txt"
CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\XTrackCAD CHANGELOG.lnk" "notepad.exe" "$INSTDIR\share\xtrkcad\CHANGELOG.txt"
-
-
-;
+
+
+;
; create file association
;
; back up old value of .xtc
@@ -17,14 +17,23 @@ CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\XTrackCAD CHANGELOG.lnk" "notepad.
StrCmp $1 "XTrackCAD.Design" "${Index}-NoBackup"
WriteRegStr HKCR ".xtc" "backup_val" $1
"${Index}-NoBackup:"
-
-; create the new association
+
+ ; back up old value of .xtce
+ !define /redef Index "Line${__LINE__}"
+ ReadRegStr $1 HKCR ".xtce" ""
+ StrCmp $1 "" "${Index}-NoBackup"
+ StrCmp $1 "XTrackCAD.Design" "${Index}-NoBackup"
+ WriteRegStr HKCR ".xtce" "backup_xtce" $1
+ "${Index}-NoBackup:"
+
+; create the new association
WriteRegStr HKCR ".xtc" "" "XTrackCAD.Design"
+ WriteRegStr HKCR ".xtce" "" "XTrackCAD.Design"
WriteRegStr HKCR "XTrackCAD.Design" "" "XTrackCAD Layout Design"
WriteRegStr HKCR "XTrackCAD.Design\shell" "" "open"
- WriteRegStr HKCR "XTrackCAD.Design\DefaultIcon" "" "$INSTDIR\bin\xtrkcad.exe,0"
+ WriteRegStr HKCR "XTrackCAD.Design\DefaultIcon" "" '$INSTDIR\bin\xtrkcad.exe,0'
WriteRegStr HKCR "XTrackCAD.Design\shell\open\command" "" '$INSTDIR\bin\xtrkcad.exe "%1"'
-
+
System::Call 'Shell32::SHChangeNotify(i 0x8000000, i 0, i 0, i 0)'
-
- !undef Index \ No newline at end of file
+
+ !undef Index
diff --git a/distribution/win32/nsis/uninstall.nsh b/distribution/win32/nsis/uninstall.nsh
index b568e21..3f47586 100644
--- a/distribution/win32/nsis/uninstall.nsh
+++ b/distribution/win32/nsis/uninstall.nsh
@@ -1,8 +1,8 @@
;
-; additional uninstaller instructions
+; additional uninstaller instructions
;
-; Remove file association
+; Remove file association xtc
!define Index "Line${__LINE__}"
ReadRegStr $1 HKCR ".xtc" ""
StrCmp $1 "XTrackCAD.Design" 0 "${Index}-NoOwn" ; only do this if we own it
@@ -13,18 +13,29 @@
"${Index}-Restore:"
WriteRegStr HKCR ".xtc" "" $1
DeleteRegValue HKCR ".xtc" "backup_val"
-
+
+"${Index}-NoOwn:"
+; Remove file association xtce
+ !define /redef Index "Line${__LINE__}"
+ ReadRegStr $1 HKCR ".xtce" ""
+ StrCmp $1 "XTrackCAD.Design" 0 "${Index}-NoOwn" ; only do this if we own it
+ ReadRegStr $1 HKCR ".xtce" "backup_xtce"
+ StrCmp $1 "" 0 "${Index}-Restore" ; if backup="" then delete the whole key
+ DeleteRegKey HKCR ".xtce"
+ Goto "${Index}-NoOwn"
+ "${Index}-Restore:"
+ WriteRegStr HKCR ".xtce" "" $1
+ DeleteRegValue HKCR ".xtce" "backup_xtce"
+
DeleteRegKey HKCR "XTrackCAD.Design" ;Delete key with association settings
-
+
System::Call 'Shell32::SHChangeNotify(i 0x8000000, i 0, i 0, i 0)'
"${Index}-NoOwn:"
!undef Index
; Remove shortcuts, if any
-; SetShellVarContext all
+SetShellVarContext all
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
-
-Delete "$SMPROGRAMS\$MUI_TEMP\XTrkCad Help.lnk"
-Delete "$SMPROGRAMS\$MUI_TEMP\XTrkCad ReadMe.lnk"
- \ No newline at end of file
+RMDir /r "$SMPROGRAMS\$MUI_TEMP"
+Delete "$desktop\XTrackCAD.lnk"
diff --git a/xtrkcad-config.h.in b/xtrkcad-config.h.in
index 0e8dfad..d532aa9 100644
--- a/xtrkcad-config.h.in
+++ b/xtrkcad-config.h.in
@@ -27,8 +27,8 @@
#define XTRKCAD_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@"
#define XTRKCAD_PACKAGE "@XTRKCAD_PACKAGE@"
#define XTRKCAD_VERSION "@XTRKCAD_VERSION@"
-#define XTRKCAD_PARAMVERSION (10)
-#define XTRKCAD_PARAMVERSIONVERSION "3.0.0"
+#define XTRKCAD_PARAMVERSION (12)
+#define XTRKCAD_PARAMVERSIONVERSION "5.2.0"
#define XTRKCAD_MINPARAMVERSION (1)
#endif // !XTRKCAD_CONFIG_H