breakingextend

This is an old revision of the document!


Note; Therion 5.4.4 has a bug that causes “extend ignore somestation” to break at the wrong station. This is fixed in builds after 14 November 2019. If you are relying on this functionality, you should use versions after this date.

When a cave has multiple passages that connect to each other, such as a main route and an oxbow, it is not possible for an extended elevation to perfectly line up the two passages with each other, unless by chance they happen to be exactly the same length. Instead, it has to pick one of them to be the right (extended) length, while the other one gets broken at some station, with that station shown twice, one connected to the station before it, and the other connected to the station after it.

Take, for example, a main passage running for 7 metres, with a high level oxbow that connects after 1 metre and 6 metres along the main passage. The main passage runs in a curve, but the oxbow is shorter, cutting off the corner.

1   2 1    0   -10
2   3 1    0   -10
3   4 1    45  -10
4   5 1    45  -10
5   6 1    45  -10
6   7 1    90  -10
7   8 1.71 225  60
8   9 1    225  10
9  10 1    225  10
10  2 1.8  225 -32.2
7  11 1    90  -10

In this data, stations 1 to 7, and 7 to 11 mark the main route. From station 7, the survey proceeded back along the oxbow via stations 7 to 10, and then back to 2.

When preparing an extended elevation, we would normally want to draw the main passage correctly, and break somewhere along the oxbow, with a connector line between the two parts of the oxbow.

[brokenoxbow]

Therion, however, will normally use the shorter passage as the “main” passage, since it doesn't know which one is the main passage. It will draw the passage starting where you told it to start (extend start), continuing to the right (the default direction) until it reaches the oxbow. Then it will continue along the oxbow instead of the main passage. Once it reaches the main passage again, it now extends both directions along the main passage towards the right. The passage that should have been to the left is also to the right, and once it reaches where it branched off to follow the oxbow, it draws a connecting line back to the start of the oxbow. Frankly, it doesn't look great, and is not at all how we would want it to look.

So the answer is to tell Therion to “extend ignore” one of the stations or the legs along the oxbow. despite its name, “ignore” does not mean to ignore the station; it means “break at this station” or “add a weakness at this station so that the extended elevation can break here”. For this example, we will break it at station 9 (warning, this will not work correctly in Therion 5.4.4 or below; you would need to upgrade, or use the “extend ignore fromstation tostation” syntax).

extend start 1
extend ignore 9

So near, and yet so far. Therion will break on the correct station, but the oxbow will be rendered with both its halves pointing to the right - the default direction. So instead, we need to tell it to start extending 7 to 8 towards the left. We could tell it to “extend left 7”, but then this will also affect all legs from 7 onwards, including leg 7 to 11. So instead, we extend just leg 7 to 8:

extend start 1
extend ignore 9
extend left 7 8

Again, so near and yet so far. Now the first half of the oxbow is correct, and the start of the second half also starts correctly. But leg 8 to 9 points back in the default direction (right). So we can tell Therion to extend everything from 8 onwards to the left:

extend start 1
extend ignore 9
extend left 7 8
extend left 8

You might expect this to also affect the first half of the oxbow (stations 9 to 2) as well, but since there is an “extend ignore” taking place on station 9, the “extend left” has no effect from station 9 onwards, and the rendering ends up perfect.

This basic approach also allows us to break the oxbow on station 8 or 10 instead.

extend start 1
extend ignore 10
extend left 7 8
extend left 8

But not on station 2. If you use “extend ignore 2”, it has a disastrous effect. Station 2 has multiple legs attached to it. When you say to ignore it, Therion cannot work out which leg you wanted it to ignore. It extends correctly from station 1 to 2, but then it gets confused, starts again at station 11 (yes, 11) extending backwards through the oxbow and stations along both routes; 11-7-8-9-10-2 and 11-7-6-5-4-3-2. There are now three copies of station 2.

Definitely not the desired effect. To put it simply; you should never use “extend ignore somestation” syntax on a station that has more than two legs connecting to it. (And to confuse matters, splays cause the same problem as legs, so if a station has splays, you also cannot use “extend ignore somestation” syntax on that station.) So instead you need to tell it to ignore the leg from 10 to 2:

extend start 1
extend ignore 10 2

But that doesn't work. Therion reverts to its original rendering and ignores the “ignore” statement. If you add back in the “extend left 7 8” and “extend left 8”, then it now tries to extend those legs in the direction you ask, while simultaneously ignoring the “ignore” command, causing everything to become an overlapping mess. It has now chosen a different point to insert a break, instead of where you asked for it.

What is going on? The data may be going 7-8-9-10-2 through the oxbow, but Therion extends it starting from 1, and then follows the oxbow in the opposite direction (since that is the direction where it connects first to the “extend start”); 2-10-9-8-7. (If it helps, you can add “log extend” in your .thconfig file, and that will log the extended elevation traversing sequence to therion.log, and you can use that to work out which order you need to specify the stations.) So your “extend ignore” must go in that same direction:

extend start 1
extend ignore 2 10
extend left 7 8
extend left 8

In this example, the equivalent to “extend ignore 9” would be “extend ignore 9 8”. Note that this syntax even works correctly in Therion 5.4.4. You can even supply “extend ignore 9 10” and “extend ignore 9 8” at the same time. Therion will only use one of them, but it means that you do not need to know whether Therion has chosen to extend forwards or backwards through that section. Therion will just respect whichever one of those is in the direction it is using. This is essentially the same as saying “extend ignore 9”, but it can work even in cases where you have more than two legs or splays attached to that single station, as long as the station is not the junction at the end of the loop. Whether it is more understandable is up to your own discretion.

Something important to note about this; it is perfectly legitimate and acceptable for you to use “extend ignore 8 7” followed immediately by “extend left 7 8”, which makes it look like you want it to simultaneously ignore and not ignore the same leg. You need to remember that “extend ignore 8 7” means “allow a break at the start of this leg” - it does not mean to ignore the leg. The subsequent “extend left” says which direction to extend the leg.

Breaking at the last station of a loop

Breaking at the last station of the loop - the point where the two branches of the loop rejoin - is much harder. With a single statement, it is not currently possible (Therion 5.4.4) to make the extended elevation break at the end station of a loop's shorter branch (station 7 on the 2-10-9-8-7 branch). “Extend ignore” can only be used to add breaks when legs lead away from a station (in whichever order Therion is progressing around a loop). Therefore while “extend ignore 2 10” can cause a break at station 2, and “extend ignore 8 7” can cause a break at station 8, there is no equivalent way to make a break at station 7. “Extend ignore 7 6” and “extend ignore 7” will cause Therion to put a break at station 7 on the 1-2-3-4-5-6-7 branch instead, and “extend ignore 7 11” will cause Therion to ignore the statement since a break is not needed for that leg, and then revert to its default break point within the loop.

However, a quirk of the way that Therion processes “ignore” commands can be used to make it happen. By default, Therion progresses through the shorter side of the loop; 1-2-10-9-8-7-11, treating 7-6-5-4-3-2 as a separate branch.

First, you tell it to “extend ignore 8 7”. This causes it to break at station 8. It now proceeds through the longer branch of the loop instead; 1-2-3-4-5-6-7-11, treating 2-10-9-8 as one branch, and 7-8 as another branch.

Then you tell it to “extend ignore 7 8”. This causes it to break at station 7 on the 7-8 branch, which is the place where you want the break to be. The 7-8 branch is now floating, not attached to anything. Therion helpfully connects it back onto the 2-10-9-8 branch at station 8. The end result is the desired rendering.

extend start 1
extend ignore 8 7
extend ignore 7 8

Note that this is not tested in multiple different configurations, and it is possible that unexpected behaviours could appear. However, it does seem to work in this demonstration at least.

What happens if you try “extend ignore 9” in Therion 5.4.4, or earlier releases? It breaks at station 8 instead; it always tries to apply the break one station too early. If you try “extend ignore 10”, it breaks at station 9 and also at station 2. Leg 10-2 is extended in the opposite direction to leg 9-10, creating a very unexpected effect.

This bug is fixed in more recent builds, starting with developmental builds after 14 November 2019. Use a fixed version instead, or if you are stuck on an older release, do not use “extend ignore somestation”.

  • breakingextend.1594224702.txt.gz
  • Last modified: 4 years ago
  • by tarquinwj