Making multiple cross sections at once
Sometimes it is nice to see a cross section through several passages at once, to see how they relate to each other. Therion draws cross sections one at a time, and does not appear to have a dedicated way to draw multiple cross sections at once, positioned in the correct place relative to each other. (If it could, then it could massively simplify this whole process!)
To see how to draw a single cross section, see the Therion tutorial chapter on Cross sections, and Footleg's tutorial “Lesson x: Adding XSections”.
If you are just looking for “give me the best solution”, follow method 7.
Method 1; a single passage's cross section
This is the most basic approach. Draw the cross section for all passages as if they were the cross section of a single passage. The cross section scrap has multiple passages drawn within it. Positions of each other passage are approximated.
Pro
- Very easy
- Works with the existing documentation
Con
- Passage shapes are all approximated, except for the one where the cross section is defined, with its splays
- Passages are only approximately positioned relative to each other, and can be very significantly wrong
- When new loops are closed which alter passage positions, the passage positions do not update, and need to be manually repositioned
- Passages cannot have the colours of their scraps, and will all share the colour of the scrap that they are attached to - it is best not to use colours for the cross section scrap
Method 2; multiple cross sections close to each other
Draw the cross sections normally, and move them into positions relative to each other, and draw a border around them to show that they are grouped together. However, this can be difficult to achieve, as the positions relative to each other need to be manually calculated or approximated.
Pro
- Easy
- Mostly works with the existing documentation
- Passage shapes are all correct
- Passages can all have the correct colours of their relevant scraps
Con
- Passages are only approximately positioned relative to each other, and can be very significantly wrong
- When new loops are closed which alter passage positions, the passage positions update sideways but not vertically, and need to be manually repositioned
- If a passage is made up from multiple cross sections (such as a pitch, or a ledge route above a floor route), the separate sections cannot be joined neatly to each other, and ugly gaps are likely
Methods 3-6; using a projected elevation
For a more complete and accurate approach, read on.
Essentially, you can think of a cross section as a projected elevation perpendicular to the passage, with only a single station being drawn. When multiple passages are being drawn together, it is even more like a projected elevation.
Select your stations and bearing carefully
Decide where you want to draw your cross section. Select a station on each passage that the cross section will intersect. It is quite possible that these will be in different survey data files. Not to worry, just select good representative stations. These do not have to be perfectly below each other, and they do not have to perfectly intersect the cross section line. Just select a station where you like the cross section, somewhere near where you want your cross section line to be drawn.
Work out what bearing your cross section will be facing. For example, a cross section through passages all running approximately north-to-south on a bearing of 355 degrees, would probably have its cross section facing 355 degrees, while its cross section line would be drawn east-to-west on a bearing of 85 degrees. 355 is the important number here.
Rendering an XVI with just selected stations
Many of these following techniques need you to be able to see and identify stations on a projected elevation. For horizontal caves, this can get very messy, with many stations in similar positions all jumbled into one place. A significantly easier approach would be for it to be possible to name groups, so that they can be selected like surveys. This would massively simplify this section. However, without that, we can achieve the same results with much more messy subsurveys.
If your cave is extremely simple (then why are you doing this sort of cross section?!) you might just be able to render the entire survey (or subsurvey, depending on what approach you are using) to XVI on a projection, and be able to visually identify the stations and splays you are interested in. However, it is quite likely that there will be too many stations and splays to identify the right one, so this section assumes that you will need to render just the relevant stations and splays.
Most often, by the time you want to draw multiple cross sections at once, you are dealing with data in multiple separate survey files. That is OK, and it doesn't really change the approach. You could create an overall .th file that will represent all the subsections at once, but it is perhaps more useful to keep it all in the same file as where the centreline data is defined for each of the passage sections, just to make it more easy to find. Each subsurvey can have its relevant sections within it.
Create a new subsurvey within the existing survey file which will contain stations representing only those stations within the cross section you are working on. Give it a “survey somename” that you will use to reference it, which must not clash with the existing surveys, such as “survey sectiona”. Give that subsurvey a centreline, which must have a date (eg. matching its parent survey). Within the centreline, add “data nosurvey from to”.
For the survey stations that will appear in the cross section, add a line with a leg going from that station to itself, such as “5 5”. This creates a station within that survey that can be exported, to avoid getting a warning that you are using “equate” to create a new station. Then for each station, add an “equate” command in the parent survey, equating the point in the subsurvey to its corresponding point in the parent survey, such as “equate 5@sectiona 5”.
Create a new “thconfig” file, which will project the new survey data on the correct bearing - 355 for the demonstration. Use the “select” command to select any of the new sub-surveys that you need to export. These can be in multiple surveys if needed; just use a select statement for each of them in turn.
source "master.th" select sectiona@westwing.mycave.master select sectiona@underwest.mycave.master export map -projection [elevation 355] -fmt xvi -output "sectiona.xvi"
Method 3; using the projected elevation to position cross sections on a plan survey
This is basically method 2, but more accurate. It positions everything perfectly, and uses the plan position of stations to adjust the horizontal positions of cross sections.
In the subsurvey's centreline section, use “data nosurvey from to”.
For the survey stations that will appear in the cross section, add a line with a leg going from that station to itself, such as “5 5”. This creates a station within that survey that can be exported, to avoid getting a warning that you are using “equate” to create a new station. Then for each station, add an “equate” command in the parent survey, equating the point in the subsurvey to its corresponding point in the parent survey, such as “equate 5@sectiona 5”.
Repeat this for any other surveys that contain stations that will be in the cross section. For simplicity, use the same “sectiona” name for all of them.
Export an XVI file containing all of these sub-surveys.
In any of the th2 files which will be in the cross section, import this new XVI. Use it to create a new cross section scrap. Place this in a useful position in the usual way using one of the stations within it. On each of the stations within it, place a useful symbol for alignment (such as a crystal point). Think of this scrap as your alignment scrap.
With each of the passages in the cross section, create a normal cross section. On the station points within those cross sections, add the same alignment symbol (crystal) as before.
Render the cave as PDF. Use the crystal positions to carefully move the cross section scraps into position, so that their alignment symbols (crystals) line up with the ones on the alignment scrap. Remove all the alignment symbols and the alignment scrap. Done.
Pro
- Uses existing cross section scraps
- Passage shapes are all correct
- Passages can all have the correct colours of their relevant scraps
- Passages are correctly positioned relative to each other
Con
- A muddled mix of projected elevation and cross section
- A lot of work for very little gain
- When new loops are closed which alter passage positions, the passage positions update sideways but not vertically, and need to be repositioned by recreating the alignment scrap and manually adjusting positions again.
- If a passage is made up from multiple cross sections (such as a pitch, or a ledge route above a floor route), the separate sections cannot be joined neatly to each other, and ugly gaps are likely
Method 4; using the projected elevation to position cross sections
This is a more refined variation of method 3, that renders the cross sections on a projected elevation which can be imported into any other survey. It solves the positioning limitation of method 3, and can also be used as part of a non-plan survey.
Export an XVI for each (sub-)survey that will be in the cross section. Create a new .th2 file for the (sub-)survey. For each station that will have a regular cross section, create a scrap. The scrap only needs one station point in it; the survey station where the cross section has been drawn. Near that same point in the scrap, create a “section” point, which will be used to import the cross section scrap.
The cross section will not be perfectly positioned yet, since the “section” points align the cross sections relative to their overall outline size, not relative to the station within them. On the station point, place a useful symbol for alignment (such as a crystal point). On the station points within the cross sections, add the same alignment symbol (crystal).
Create a map in the overall survey, that uses only the scraps that belong to each cross section, with their “-projection” set to “elevation 355” (or whatever bearing you are using).
Create a new “thconfig” file, which will project the new survey data on the correct bearing - 355 for the demonstration. Use the “select” command to select the map you created. Render the cave as PDF. Use the crystal positions to carefully move the cross section scraps into position, so that their alignment symbols (crystals) line up with the ones on their scraps. Remove all the alignment symbols and the alignment scrap. Done. As long as you don't change the outer dimensions of the cross section, it will move into the new position if new survey data causes the station position to shift.
Your PDF is now your cross section, which can be imported into your main survey and put into position using “map-image”.
Pro
- Uses existing cross section scraps
- Passage shapes are all correct
- Passages can all have the correct colours of their relevant scraps
- Passages are correctly positioned relative to each other
- When new loops are closed which alter passage positions, the passage positions update correctly to take on the new positions.
Con
- A muddled mix of projected elevation and cross section
- A fair amount of work
- If a passage is made up from multiple cross sections (such as a pitch, or a ledge route above a floor route), the separate sections cannot be joined neatly to each other, and ugly gaps are likely
Methods 5-7; Rendering the cross sections as scraps within the exported XVI
This allows you to draw the more complex cross sections that contain multiple stations, even stations from different surveys. It also lets you draw cross sections for simple stations where you do not have an existing cross section drawing. For this, you need to render the splays as well as the stations. This is not easy (unless it is possible to name groups by the time you read this, in which case do that instead).
It is possible to copy the survey data for the relevant stations and their splays into a new survey, with equates to link them to the existing stations. However, this requires duplication of data and configurations that affect data, which is usually unwanted (even though they will typically be only splay legs which do not affect the surveyed length). Instead, the solution presented here will use “data nosurvey” to add stations, with a few more equates to make them link to the existing stations and splays.
Pick a station that will be included in your cross section. Give each of its splays an actual name, rather than using “-” to create anonymous splays. For example, if they are on station “5”, you could call the splays “5a”, “5b”, etc. Surround the splay legs with “flags splay” and “flags not splay” so that they do not add length to your cave.
In the subsurvey's centreline section, use “data nosurvey from to”. This allows you to avoid repeating the survey data and calibrations. Then one line at a time, list the splay legs around each of the stations that will be in the cross section, such as “5 5a”. Ideally, you should surround those legs with “flags splay” and “flags not splay” to avoid any confusion, but Therion does seem to know that nosurvey legs should not add to the cave length. If the cross section is going to have stations without any splays attached to them, repeat the station name like “5 5” to avoid getting a warning that you are using “equate” to create a new station.
Then for each station and splay end, add an “equate” command in the parent survey, equating the point in the subsurvey to its corresponding point in the parent survey, such as “equate 5@sectiona 5”.
As an example, imagine that you are working on westwing.th, in a survey called “westwing”, and stations 5, 12 and 23 will all be in the final cross section:
survey westwing ... configurations ... #cross sections equate 5@sectiona 5 equate 5a@sectiona 5a equate 5b@sectiona 5b equate 5c@sectiona 5c equate 5d@sectiona 5d equate 23@sectiona 23 equate 23a@sectiona 23a equate 23b@sectiona 23b equate 23c@sectiona 23c equate 23d@sectiona 23d survey sectiona centreline date 2019.10.20 data nosurvey from to flags splay 5 5a 5 5b 5 5c 5 5d flags not splay 12 12 #no splays for this station flags splay 23 23a 23 23b 23 23c 23 23d flags not splay endcentreline endsurvey centreline ... configurations ... data normal from to length compass clino ... the real survey data ... 4 5 ... etc ... flags splay 5 5a ... etc ... 5 5b ... etc ... 5 5c ... etc ... 5 5d ... etc ... flags not splay 5 6 ... etc ... ... more real data ... 11 12 ... etc ... #no splays 12 13 ... etc ... ... more real data ... 22 23 ... etc ... flags splay 23 23a ... etc ... 23 23b ... etc ... 23 23c ... etc ... 23 23d ... etc ... flags not splay 23 24 ... etc ... ... more real data ... endcentreline endsurvey
If you also need to copy survey legs between stations (you don't normally need to), Therion seems to know that it should not add the lengths from a nosurvey leg. However, if it somehow causes problems for you, use “flags duplicate”-“flags not duplicate” around the legs to make sure they do not add to the overall cave length.
Repeat this for any other surveys that contain stations that will be in the cross section. For simplicity, use the same “sectiona” name for all of them.
Create a new “thconfig” file, which will project the new survey data on the correct bearing - 355 for the demonstration. Use the “select” command to select all of the relevant sections from all surveys that will be in the cross section (whether you need to select one section piece at a time, or one overall one, will depend on the method you are using). These can be in multiple surveys if needed; just use a select statement for each of them in turn.
source "master.th" select sectiona@westwing.mycave.master select sectiona@underwest.mycave.master export map -projection [elevation 355] -fmt xvi -output "sectiona.xvi"
Run it to export the XVI file.
Method 5; Using the XVI to draw the cross sections
This is basically an accurate version of method 1, with many of the same limitations.
Export the XVI for the whole cross section at once, containing all subsurveys that will be in the cross section. The easiest way to use the XVI file, is to create a new .th2 file for each set of cross sections that you are creating. In XTherion, open the map editor (F2). Create a new file and save it somewhere appropriate. Edit menu - Insert image, and select the XVI file that you exported. Draw your cross sections the same way as you normally would draw a single cross section, using a cross section scrap. This does mean that you will be creating new cross sections, not using an existing sketch or cross section as a drawing aid. More details about that later. Tip; you can even set the scale of your cross sections to something different than the main survey, just by setting the scrap's scale to the wrong values - eg. a 10 metre x 10 metre scale bar could have its “real scale points” set to 20×20 instead.
Note that Therion may become confused if cross sections do not have walls on all sides of them (eg. if some are open to the surface). If this is the case, create a wall line to close the wall loop, and set it to “-visibility off”.
You may want to draw a border around the entire set of cross sections, to show that they are related spatially to each other. A regular “border” line with “-clip off” may be used for this purpose.
You do not need to mark the stations in the cross sections. If you decide to do so anyway, you can use “-name” to reference the real stations, but note that you will need to reference them by their complete name, taking into account whichever survey or subsurvey they are defined in.
If you do not plan on marking the “station” points in the cross section, it does not matter at which level you “input” the .th2 file that you create the cross sections in. This is the easiest way, so it can just be “input” in any of the existing .th files which are being used to draw the survey. In your cross section's .th2 file, create a new scrap in the file, with its scale set properly. Give it a single “station” point linked using “-name” to a real point in the survey which it is going to be “input” into. Give it a “section” point for it to draw the section relative to, and set the “-scrap” option to point to the cross section scrap. Use “input” to add it to the relevant survey, and add the new scrap (not the cross section scrap) into your “map” for that survey.
It should now be rendered into the final survey, positioned relative to the station you selected.
If you are marking multiple stations in the cross sections, you need to input the .th2 file into the master survey file instead, since that is the level where the stations can all be referenced.
Pro
- Passage shapes are all correct
- Passages are correctly positioned relative to each other
Con
- Quite complex
- Does not follow existing documentation, since it is a muddled mix of projected elevation and cross section, but does at least use standard cross section drawing for some parts
- When new loops are closed which alter passage positions, the passage positions do not update, and need to be manually repositioned
- Passages cannot have the colours of their scraps, and will all share the colour of the scrap that they are attached to - it is best not to use colours for the cross section scrap
- Normally requires cross sections to be recreated, rather than using existing ones
Method 6; leaving it as a projected elevation
This is a very complete approach, which solves many of the problems of the others. It allows cross sections to be correctly coloured for altitude, and with passages positioned relative to each other, with accurate shapes. It can even reposition them automatically when loops are closed and station positions are changed, something that very few of the other approaches can do, making this approach one that offers hassle-free maintenance.
Export an XVI file for all passages that will be in the cross section, for the whole cave at once. To use the XVI file, create a new .th2 file for each set of cross sections that you are creating. In XTherion, open the map editor (F2). Create a new file and save it somewhere appropriate. Edit menu - Insert image, and select the XVI file that you exported.
For each cross section, create a scrap as you would do if this were a regular projected elevation (since it is). Set the projection to “[elevation 355]”, with the correct bearing for that cross section. Create a station point on each station in the passage, and reference the station by its full reference (relative to where you plan to import the .th2 file) such as “-name 5@westwing.mycave”. You can reference either the real station, or the cloned station in the cross section survey - either way the result will be the same.
Draw the passage cross section walls. This does mean that you will be creating new cross sections, not using an existing sketch or cross section as a drawing aid. More details about that later.
For cross sections of pitches and ledge routes with their own survey data, you can create multiple scraps at the different heights, so that they can have different colours at the different heights.
You may want to draw a border around the entire set of cross sections, to show that they are related spatially to each other. A regular “border” line with “-clip off” may be used for this purpose. Alternatively, you can include this in your layout when outputting the PDF:
code tex-map \framethickness=0.5mm
Normally, you would want to “input” the .th2 file at the highest level of your survey, since it probably relates to multiple subsurveys spread across your entire data set, but you could just input it at whatever level will contain all of the passages involved in the cross section.
That's it. You have basically created your cross section, disguised as a projected elevation. You now need to export it as a PDF.
Create a “map” in the survey level where you imported the .th2 file, with its projection matching the scraps (“[elevation 355]”). Add all the scraps to it. If you are using automatic altitude colouring (rather than a lookup), and you would like it to use the correct colours, create a new map at the top-most level with the projection set accordingly. Tell it to include the map of scraps. Then to make it use the colours for the main survey, tell it to include the surveys containing the data for the highest and lowest passages in the part of the cave that your regular plan survey will include (the survey where you want to render the cross section). Normally, this will be the complete data for the whole cave.
Create a new “thconfig” file, which will project the map on the correct bearing - 355 for the demonstration. Use the “select” command to select the map. Create a layout that will hide all the survey centreline, leaving only the cross section scraps. Tell it to colour by altitude. If you would like the cross sections to display at a different scale than the main survey, use the “scale” option to change it. Use the various options to completely hide the legend, title, scale bar and north arrow.
layout local scale 1 100 map-header off symbol-hide group centreline color map-fg altitude endlayout source "master.th" select sectiona export map -projection [elevation 355] -layout local -output "sectiona.pdf"
Run it to export the PDF.
In your main survey's layout, use “map-image 100 50 e sectiona.pdf” to include the PDF. The cross section will now appear on the main survey.
Pro
- Passage shapes are all correct
- Passages are correctly positioned relative to each other
- Passages can have the correct altitude colours for the passages they are taken from
- When new loops are closed which alter passage positions, the passage positions automatically update next time you export the cross section map (yay!)
- Mostly follows existing documentation, since it is just a projected elevation
Con
- Quite complex to set up initially, but relatively easy once it is working
- Normally requires cross sections to be recreated, rather than using existing ones
Method 7; combining cross section scraps and regular scraps in a projected elevation
This is a small but significant enhancement to method 6.
This is the most complete approach, which solves all of the problems of the others. It is the recommended approach, if you are able to follow it, since it allows cross sections to be correctly coloured for altitude, and with passages positioned relative to each other, with accurate shapes. It can use both existing regular cross section scraps, as well as allowing you to create new projected scraps that contain multiple stations. It can even reposition them automatically when loops are closed and station positions are changed, something that none of the other approaches can do, making this approach another one that offers hassle-free maintenance. It follows the existing documentation for projected elevations and cross sections, so most of it is not a new concept, just another way of using existing concepts.
Create an XVI for each (sub-)survey that needs a new cross section. Eg. if two passages from the same survey will both have their cross sections drawn as part of the overall cross section, they can both be exported into the same XVI. If cross sections will span multiple surveys, the relevant parts of the cross section can be created in each survey and joined using “join” commands in the parent surveys. Now create the .th2 for each survey. In XTherion, open the map editor (F2). Create a new file and save it somewhere appropriate. Edit menu - Insert image, and select the XVI file that you exported. (Note that you no longer need the sub-survey with the “data nosurvey” equated stations, unless you think you will need to recreate the XVI file, so you can now delete it and put your splays back to being anonymous, if you hate the data clutter. Yay!)
For each cross section, create a scrap as you would do if this were a regular projected elevation (since it is). Set the projection to “[elevation 355]”, with the correct bearing for that cross section. Create a station point on each station in the passage, and reference the station by its name within the survey such as “-name 5”. Draw the passage cross section walls. For cross sections of pitches and ledge routes with their own survey data, you can create multiple scraps at the different heights, so that they can have different colours at the different heights.
For each station that already has an existing cross section drawing, create a scrap, and follow method 4's approach for adding the cross section to the scrap, and positioning it correctly.
You may want to draw a border around the entire set of cross sections, to show that they are related spatially to each other. A regular “border” line with “-clip off” may be used for this purpose, in any of the scraps that will be rendered. Alternatively, you can include this in your layout when outputting the PDF:
code tex-map \framethickness=0.5mm
“Input” the .th2 file into the survey. That's it. You have basically created your cross section, disguised as a projected elevation. You now need to export it as a PDF.
Create a “map” in the survey, with its projection matching the scraps (“[elevation 355]”). Add all the scraps to it. In the parent survey files, create a map gathering all of the relevant maps for the cross section, in exactly the same was as if this were a regular plan or elevation survey. If you are using automatic altitude colouring (rather than a lookup), and you would like it to use the correct colours, create a new map at the top-most level with the projection set accordingly. Tell it to include the map of scraps. Then to make it use the colours for the main survey, tell it to include the surveys containing the data for the highest and lowest passages in the part of the cave that your regular plan survey will include (the survey where you want to render the cross section). Normally, this will be the complete data for the whole cave.
Create a new “thconfig” file, which will project the map on the correct bearing - 355 for the demonstration. Use the “select” command to select the map. Create a layout that will hide all the survey centreline, leaving only the cross section scraps. Tell it to colour by altitude. If you would like the cross sections to display at a different scale than the main survey, use the “scale” option to change it. Use the various options to completely hide the legend, title, scale bar and north arrow.
layout local scale 1 100 map-header off symbol-hide group centreline color map-fg altitude endlayout source "master.th" select sectiona export map -projection [elevation 355] -layout local -output "sectiona.pdf"
Run it to export the PDF.
In your main survey's layout, use “map-image 100 50 e sectiona.pdf” to include the PDF. The cross section will now appear on the main survey.
Pro
- Passage shapes are all correct
- Passages are correctly positioned relative to each other
- Passages can have the correct altitude colours for the passages they are taken from
- When new loops are closed which alter passage positions, the passage positions automatically update next time you export the cross section map (yay!)
- Follows existing documentation, since it is just a projected elevation, optionally with added regular cross sections
- Works with both new and existing cross sections
- Newly surveyed passages can be added to existing cross sections with ease
Con
- Quite complex to set up initially, but relatively easy once it is working
Using existing cross section drawings with methods 5 and 6
This is not so easy. Don't do it. Just use method 7.
Existing cross section drawings are in their own scraps, and these cannot be simply positioned relative to each other, except when using methods 4 and 7. Normally, any existing cross section will have been drawn in its existing .th2 file.
Use a text editor to copy the lines and points from the existing cross section's scrap, into the relevant scrap within the new .th2 multiple cross sections file (which will normally be in different .th2 files). Move the lines and points into the correct positions in XTherion's map editor, using the existing section's “station” and the new “station” position as references for the move-from and move-to.
Note that this relies on all the existing cross sections to have been drawn facing the same direction. If not, they will need to be manually redrawn facing the correct direction.
Drawing the cross section line
The cross section line can be drawn in any of the scraps in the main plan survey, but for best results put it in one of the scraps that will be intersected by the cross section. Manually work out where to draw it, taking into account how long it will need to be to sit around all relevant passages, and how big of a gap it needs to leave in the middle to avoid overlapping the passages. Render it to see if it worked. Adjust it to fix any imperfections, try rendering it again. It will probably take a few tries to get it perfect.