There's no need for that. The current way is sufficient. However, the numbers are not.The room’s native points follow the room move.
Therefore, if we want to store a given elevation for a point in the room , one solution is, for example, to modify the point tag by introducing a Z value, for example
<point x='3957.4912' y='32.531234' z='125.567'/>
This Z elevation is only used for "Generate 3d terrain" and is therefore an absolute elevation relative to the ground level (does not depend on the level where the room is located)
Consider this awkwardly formed room with elevations:
Code: Select all
<room id='room-c9710f39-3f72-4e5b-b04f-7a631eae29e3' level='level-dee204e2-b2ee-4226-86e8-a948f0498786' areaVisible='true' ceilingVisible='false' ceilingFlat='true'>
<property name='terrainElevationAt(3820.14,797.00)' value='96.168'/>
<property name='terrainElevationAt(3821.87,800.00)' value='96.668'/>
<property name='terrainElevationAt(3847.28,750.00)' value='127.755'/>
<property name='terrainElevationAt(3850.00,745.29)' value='130.027'/>
<property name='terrainElevationAt(3850.00,750.00)' value='130.124'/>
<property name='terrainElevationAt(3850.00,800.00)' value='119.72'/>
<property name='terrainElevationAt(3850.00,848.71)' value='94.035'/>
<property name='terrainElevationAt(3850.74,850.00)' value='93.698'/>
<property name='terrainElevationAt(3876.15,700.00)' value='141.752'/>
<property name='terrainElevationAt(3879.61,900.00)' value='72.723'/>
<property name='terrainElevationAt(3900.00,658.69)' value='133.93'/>
<property name='terrainElevationAt(3900.00,700.00)' value='157.147'/>
<property name='terrainElevationAt(3900.00,750.00)' value='168.241'/>
<property name='terrainElevationAt(3900.00,800.00)' value='153.723'/>
<property name='terrainElevationAt(3900.00,850.00)' value='119.72'/>
<property name='terrainElevationAt(3900.00,900.00)' value='78.924'/>
<property name='terrainElevationAt(3900.00,935.32)' value='53.183'/>
<property name='terrainElevationAt(3905.02,650.00)' value='130.785'/>
<property name='terrainElevationAt(3908.48,950.00)' value='45.196'/>
<property name='terrainElevationAt(3933.88,600.00)' value='112.458'/>
<property name='terrainElevationAt(3937.34,1000.00)' value='22.492'/>
<property name='terrainElevationAt(3950.00,1000.00)' value='22.612'/>
<property name='terrainElevationAt(3950.00,1021.92)' value='15.443'/>
<property name='terrainElevationAt(3950.00,572.09)' value='109.155'/>
<property name='terrainElevationAt(3950.00,600.00)' value='118.271'/>
<property name='terrainElevationAt(3950.00,650.00)' value='145.47'/>
<property name='terrainElevationAt(3950.00,700.00)' value='173.218'/>
<property name='terrainElevationAt(3950.00,750.00)' value='183.679'/>
<property name='terrainElevationAt(3950.00,800.00)' value='167.082'/>
<property name='terrainElevationAt(3950.00,850.00)' value='130.124'/>
<property name='terrainElevationAt(3950.00,900.00)' value='85.783'/>
<property name='terrainElevationAt(3950.00,950.00)' value='47.87'/>
<property name='terrainElevationAt(3962.75,550.00)' value='113.391'/>
<property name='terrainElevationAt(3966.21,1050.00)' value='8.963'/>
<property name='terrainElevationAt(3970.14,1056.81)' value='7.772'/>
<property name='terrainElevationAt(3974.08,1050.00)' value='8.868'/>
<property name='terrainElevationAt(3991.62,500.00)' value='147.729'/>
<property name='terrainElevationAt(4000.00,1000.00)' value='20.804'/>
<property name='terrainElevationAt(4000.00,1005.10)' value='19.093'/>
<property name='terrainElevationAt(4000.00,485.48)' value='162.761'/>
<property name='terrainElevationAt(4000.00,500.00)' value='154.766'/>
<property name='terrainElevationAt(4000.00,550.00)' value='132.356'/>
<property name='terrainElevationAt(4000.00,600.00)' value='128.206'/>
<property name='terrainElevationAt(4000.00,650.00)' value='142.999'/>
<property name='terrainElevationAt(4000.00,700.00)' value='163.031'/>
<property name='terrainElevationAt(4000.00,750.00)' value='170.233'/>
<property name='terrainElevationAt(4000.00,800.00)' value='153.723'/>
<property name='terrainElevationAt(4000.00,850.00)' value='119.72'/>
<property name='terrainElevationAt(4000.00,900.00)' value='78.924'/>
<property name='terrainElevationAt(4000.00,950.00)' value='44.042'/>
<property name='terrainElevationAt(4002.94,1000.00)' value='20.595'/>
<property name='terrainElevationAt(4020.49,450.00)' value='202.105'/>
<property name='terrainElevationAt(4031.81,950.00)' value='38.298'/>
<property name='terrainElevationAt(4049.35,400.00)' value='241.743'/>
<property name='terrainElevationAt(4050.00,398.88)' value='242.187'/>
<property name='terrainElevationAt(4050.00,400.00)' value='242.253'/>
<property name='terrainElevationAt(4050.00,450.00)' value='227.345'/>
<property name='terrainElevationAt(4050.00,500.00)' value='188.213'/>
<property name='terrainElevationAt(4050.00,550.00)' value='147.697'/>
<property name='terrainElevationAt(4050.00,600.00)' value='124.745'/>
<property name='terrainElevationAt(4050.00,650.00)' value='123.129'/>
<property name='terrainElevationAt(4050.00,700.00)' value='131.671'/>
<property name='terrainElevationAt(4050.00,750.00)' value='134.169'/>
<property name='terrainElevationAt(4050.00,800.00)' value='120.879'/>
<property name='terrainElevationAt(4050.00,850.00)' value='93.238'/>
<property name='terrainElevationAt(4050.00,900.00)' value='61.466'/>
<property name='terrainElevationAt(4050.00,918.50)' value='50.508'/>
<property name='terrainElevationAt(4060.68,900.00)' value='57.025'/>
<property name='terrainElevationAt(4078.22,350.00)' value='236.295'/>
<property name='terrainElevationAt(4089.55,850.00)' value='67.992'/>
<property name='terrainElevationAt(4100.00,312.28)' value='201.889'/>
<property name='terrainElevationAt(4100.00,350.00)' value='240.06'/>
<property name='terrainElevationAt(4100.00,400.00)' value='262.368'/>
<property name='terrainElevationAt(4100.00,450.00)' value='244.331'/>
<property name='terrainElevationAt(4100.00,500.00)' value='197.64'/>
<property name='terrainElevationAt(4100.00,550.00)' value='145.863'/>
<property name='terrainElevationAt(4100.00,600.00)' value='109.299'/>
<property name='terrainElevationAt(4100.00,650.00)' value='93.955'/>
<property name='terrainElevationAt(4100.00,700.00)' value='91.915'/>
<property name='terrainElevationAt(4100.00,750.00)' value='90.18'/>
<property name='terrainElevationAt(4100.00,800.00)' value='80.184'/>
<property name='terrainElevationAt(4100.00,831.89)' value='68.598'/>
<property name='terrainElevationAt(4107.09,300.00)' value='186.646'/>
<property name='terrainElevationAt(4118.41,800.00)' value='66.159'/>
<property name='terrainElevationAt(4120.14,660.23)' value='79.825'/>
<property name='terrainElevationAt(4120.14,797.00)' value='65.623'/>
<property name='terrainElevationAt(4120.63,650.00)' value='81.332'/>
<property name='terrainElevationAt(4123.03,600.00)' value='99.195'/>
<property name='terrainElevationAt(4123.14,800.00)' value='62.749'/>
<property name='terrainElevationAt(4125.42,550.00)' value='137.786'/>
<property name='terrainElevationAt(4127.82,500.00)' value='190.079'/>
<property name='terrainElevationAt(4130.22,450.00)' value='235.927'/>
<property name='terrainElevationAt(4132.61,400.00)' value='252.842'/>
<property name='terrainElevationAt(4135.01,350.00)' value='230.452'/>
<property name='terrainElevationAt(4135.96,250.00)' value='118.053'/>
<property name='terrainElevationAt(4137.40,300.00)' value='178.442'/>
<property name='terrainElevationAt(4139.80,250.00)' value='116.913'/>
<property name='terrainElevationAt(4140.14,242.75)' value='108.442'/>
<property name='terrainElevationAt(4150.00,677.47)' value='58.612'/>
<property name='terrainElevationAt(4150.00,700.00)' value='55.994'/>
<property name='terrainElevationAt(4150.00,750.00)' value='51.915'/>
<property name='terrainElevationAt(4150.00,800.00)' value='45.201'/>
<property name='terrainElevationAt(4150.00,826.86)' value='39.314'/>
<property name='terrainElevationAt(4173.14,850.00)' value='24.748'/>
<property name='terrainElevationAt(4189.03,700.00)' value='34.852'/>
<property name='terrainElevationAt(4200.00,706.33)' value='29.409'/>
<property name='terrainElevationAt(4200.00,750.00)' value='25.763'/>
<property name='terrainElevationAt(4200.00,800.00)' value='20.804'/>
<property name='terrainElevationAt(4200.00,850.00)' value='16.202'/>
<property name='terrainElevationAt(4200.00,876.86)' value='13.224'/>
<property name='terrainElevationAt(4223.14,900.00)' value='8.254'/>
<property name='terrainElevationAt(4250.00,735.20)' value='11.888'/>
<property name='terrainElevationAt(4250.00,750.00)' value='11.118'/>
<property name='terrainElevationAt(4250.00,800.00)' value='8.319'/>
<property name='terrainElevationAt(4250.00,850.00)' value='7.875'/>
<property name='terrainElevationAt(4250.00,900.00)' value='6.064'/>
<property name='terrainElevationAt(4250.00,926.86)' value='5.102'/>
<property name='terrainElevationAt(4273.14,950.00)' value='4.29'/>
<property name='terrainElevationAt(4275.63,750.00)' value='6.87'/>
<property name='terrainElevationAt(4300.00,764.07)' value='4.344'/>
<property name='terrainElevationAt(4300.00,800.00)' value='4.765'/>
<property name='terrainElevationAt(4300.00,850.00)' value='5.15'/>
<property name='terrainElevationAt(4300.00,900.00)' value='5.242'/>
<property name='terrainElevationAt(4300.00,950.00)' value='4.127'/>
<property name='terrainElevationAt(4300.00,976.86)' value='4.029'/>
<property name='terrainElevationAt(4323.14,1000.00)' value='5.078'/>
<property name='terrainElevationAt(4350.00,1000.00)' value='6.804'/>
<property name='terrainElevationAt(4350.00,1026.86)' value='6.073'/>
<property name='terrainElevationAt(4350.00,792.94)' value='3.25'/>
<property name='terrainElevationAt(4350.00,800.00)' value='3.493'/>
<property name='terrainElevationAt(4350.00,850.00)' value='5.299'/>
<property name='terrainElevationAt(4350.00,900.00)' value='6.804'/>
<property name='terrainElevationAt(4350.00,950.00)' value='7.395'/>
<property name='terrainElevationAt(4362.24,800.00)' value='3.928'/>
<property name='terrainElevationAt(4373.14,1050.00)' value='6.56'/>
<property name='terrainElevationAt(4400.00,1000.00)' value='10.321'/>
<property name='terrainElevationAt(4400.00,1050.00)' value='8.038'/>
<property name='terrainElevationAt(4400.00,1076.86)' value='6.56'/>
<property name='terrainElevationAt(4400.00,821.80)' value='6.486'/>
<property name='terrainElevationAt(4400.00,850.00)' value='8.038'/>
<property name='terrainElevationAt(4400.00,900.00)' value='10.321'/>
<property name='terrainElevationAt(4400.00,950.00)' value='11.218'/>
<property name='terrainElevationAt(4423.14,1100.00)' value='6.073'/>
<property name='terrainElevationAt(4448.84,850.00)' value='10.28'/>
<property name='terrainElevationAt(4450.00,1000.00)' value='13.252'/>
<property name='terrainElevationAt(4450.00,1050.00)' value='10.321'/>
<property name='terrainElevationAt(4450.00,1100.00)' value='6.804'/>
<property name='terrainElevationAt(4450.00,1126.86)' value='5.078'/>
<property name='terrainElevationAt(4450.00,850.67)' value='10.367'/>
<property name='terrainElevationAt(4450.00,900.00)' value='13.252'/>
<property name='terrainElevationAt(4450.00,950.00)' value='14.404'/>
<property name='terrainElevationAt(4473.14,1150.00)' value='4.029'/>
<property name='terrainElevationAt(4500.00,1000.00)' value='14.404'/>
<property name='terrainElevationAt(4500.00,1050.00)' value='11.218'/>
<property name='terrainElevationAt(4500.00,1100.00)' value='7.395'/>
<property name='terrainElevationAt(4500.00,1150.00)' value='4.127'/>
<property name='terrainElevationAt(4500.00,1176.86)' value='2.816'/>
<property name='terrainElevationAt(4500.00,879.54)' value='13.268'/>
<property name='terrainElevationAt(4500.00,900.00)' value='14.404'/>
<property name='terrainElevationAt(4500.00,950.00)' value='15.655'/>
<property name='terrainElevationAt(4509.05,1185.91)' value='2.442'/>
<property name='terrainElevationAt(4518.68,1150.00)' value='4.079'/>
<property name='terrainElevationAt(4532.07,1100.00)' value='7.146'/>
<property name='terrainElevationAt(4535.44,900.00)' value='13.813'/>
<property name='terrainElevationAt(4545.47,1050.00)' value='10.471'/>
<property name='terrainElevationAt(4550.00,1000.00)' value='13.252'/>
<property name='terrainElevationAt(4550.00,1033.09)' value='11.442'/>
<property name='terrainElevationAt(4550.00,908.41)' value='13.596'/>
<property name='terrainElevationAt(4550.00,950.00)' value='14.404'/>
<property name='terrainElevationAt(4558.87,1000.00)' value='12.832'/>
<property name='terrainElevationAt(4572.27,950.00)' value='13.154'/>
<property name='terrainElevationAt(4578.93,925.11)' value='12.459'/>
<property name='terrainGridSize' value='50.0'/>
<point x='4140.144' y='242.74615'/>
<point x='3820.144' y='797.00244'/>
<point x='3970.144' y='1056.81'/>
<point x='4120.144' y='797.00244'/>
<point x='4509.0527' y='1185.9111'/>
<point x='4578.934' y='925.11115'/>
<point x='4120.144' y='660.2286'/>
</room>The software already has code to calculate the x and y coordinates of the bounding box of the furniture, even if that furniture is not a square form. This means that the object is positioned with just a single coordinate pair (x,y). For this awkward room that point would be (3199.5, 714.3). (Generate the terrain and the resulting terrain is 'furniture' with a bounding box that has these coordinates.)
The way the elevation points should have been stored is with values relative to 0,0 using the coordinates of the virtual bounding box of the room. When that is done you can move the room and re-generation will use the new bounding box coordinates and generate the exact same terrain at the new room position.
You could change
Code: Select all
<property name='terrainElevationAt(4535.44,900.00)' value='13.813'/>Code: Select all
<property name='terrainElevationAt(4535.44,900.00,13.813'/>Code: Select all
<property name='terrainElevationAt' x='4535.44' y='900.00' z='13.813'/>All in all this is just a minor problem since you should create terrains in a separate project where you don't have to move the rooms. You generate the terrain(s) and can freely move those objects in the original project.
[hr]
That doesn't solve locking points. As you already determined that requires changing of the UI to allow locking of a selected point. That is the easy part. It could be stored as
Code: Select all
<property name='terrainElevationAt(4535.44,900.00)' value='13.813' locked='true'/>[hr]
Definitely a bad solution and very bad programming practice. You never change a value you have to change back afterwards on an already known condition, you prevent a change using that condition in the first place. I don't see where you could get infinite loops, each point in the given radius is processed and a value is set. I haven't checked the source code but I don't think there's any looping to execute elevation changes.One solution could be (it's probably/certainly not the best): proceed as currently (without considering the Locks) and at the end check if a point elevation with a Z value has been modified , and if so, we simulate a complementary action on that point to return its elevation to its Z value (with the same parameters : radius of action, linearity, etc.). However, in this case, pay attention to infinite loops if two points with Z values are close together...
[hr]
As a (temporary?) solution you can open the generated terrain in Blender and move any face or vertice you want. Of course this doesn't get stored in the room so it is just a partial solution. This is where the roof generator is superior: roofs are generated using a room but once generated you can select the roof object and start the roof generator again and it will read all vales from the roof object to make changes, without the need of the original room. It's something I desperately want for the Generate 3D shape plugin!