feat: 2 m placeholder pattern zones on lining, station/pattern readout in viewer (Task 5)
No pattern-to-station data exists in the drawings. Per user decision (2026-10-21) the modelled range 4+745..5+480 is split into 2 m segments with arbitrary pattern names, marked placeholder in CSV, meta and viewer, to be replaced later. Ring step reduced to 1 m so that the 2 m segments align. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A5Cun3RHQKna9qxE6ybZ4A
This commit is contained in:
1 parent
c9de6f0ef3
commit
6c7e555c25
7 files changed
+2303
-10
No files matched your search
@@ -0,0 +1,369 @@
|
|||||||
|
seg_from,seg_to,pattern,status
|
||||||
|
4745,4747,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4747,4749,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4749,4751,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4751,4753,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4753,4755,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4755,4757,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4757,4759,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4759,4761,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4761,4763,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4763,4765,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4765,4767,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4767,4769,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4769,4771,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4771,4773,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4773,4775,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4775,4777,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4777,4779,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4779,4781,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4781,4783,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4783,4785,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4785,4787,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4787,4789,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4789,4791,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4791,4793,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4793,4795,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4795,4797,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4797,4799,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4799,4801,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4801,4803,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4803,4805,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4805,4807,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4807,4809,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4809,4811,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4811,4813,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4813,4815,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4815,4817,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4817,4819,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4819,4821,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4821,4823,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4823,4825,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4825,4827,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4827,4829,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4829,4831,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4831,4833,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4833,4835,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4835,4837,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4837,4839,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4839,4841,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4841,4843,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4843,4845,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4845,4847,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4847,4849,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4849,4851,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4851,4853,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4853,4855,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4855,4857,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4857,4859,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4859,4861,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4861,4863,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4863,4865,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4865,4867,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4867,4869,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4869,4871,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4871,4873,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4873,4875,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4875,4877,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4877,4879,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4879,4881,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4881,4883,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4883,4885,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4885,4887,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4887,4889,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4889,4891,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4891,4893,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4893,4895,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4895,4897,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4897,4899,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4899,4901,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4901,4903,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4903,4905,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4905,4907,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4907,4909,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4909,4911,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4911,4913,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4913,4915,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4915,4917,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4917,4919,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4919,4921,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4921,4923,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4923,4925,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4925,4927,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4927,4929,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4929,4931,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4931,4933,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4933,4935,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4935,4937,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4937,4939,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4939,4941,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4941,4943,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4943,4945,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4945,4947,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4947,4949,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4949,4951,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4951,4953,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4953,4955,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4955,4957,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4957,4959,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4959,4961,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4961,4963,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4963,4965,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4965,4967,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4967,4969,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4969,4971,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4971,4973,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4973,4975,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4975,4977,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4977,4979,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4979,4981,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4981,4983,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4983,4985,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4985,4987,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4987,4989,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4989,4991,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4991,4993,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4993,4995,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4995,4997,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4997,4999,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
4999,5001,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5001,5003,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5003,5005,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5005,5007,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5007,5009,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5009,5011,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5011,5013,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5013,5015,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5015,5017,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5017,5019,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5019,5021,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5021,5023,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5023,5025,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5025,5027,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5027,5029,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5029,5031,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5031,5033,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5033,5035,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5035,5037,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5037,5039,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5039,5041,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5041,5043,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5043,5045,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5045,5047,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5047,5049,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5049,5051,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5051,5053,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5053,5055,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5055,5057,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5057,5059,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5059,5061,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5061,5063,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5063,5065,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5065,5067,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5067,5069,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5069,5071,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5071,5073,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5073,5075,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5075,5077,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5077,5079,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5079,5081,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5081,5083,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5083,5085,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5085,5087,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5087,5089,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5089,5091,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5091,5093,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5093,5095,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5095,5097,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5097,5099,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5099,5101,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5101,5103,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5103,5105,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5105,5107,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5107,5109,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5109,5111,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5111,5113,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5113,5115,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5115,5117,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5117,5119,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5119,5121,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5121,5123,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5123,5125,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5125,5127,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5127,5129,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5129,5131,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5131,5133,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5133,5135,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5135,5137,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5137,5139,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5139,5141,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5141,5143,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5143,5145,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5145,5147,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5147,5149,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5149,5151,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5151,5153,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5153,5155,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5155,5157,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5157,5159,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5159,5161,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5161,5163,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5163,5165,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5165,5167,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5167,5169,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5169,5171,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5171,5173,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5173,5175,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5175,5177,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5177,5179,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5179,5181,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5181,5183,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5183,5185,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5185,5187,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5187,5189,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5189,5191,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5191,5193,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5193,5195,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5195,5197,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5197,5199,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5199,5201,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5201,5203,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5203,5205,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5205,5207,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5207,5209,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5209,5211,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5211,5213,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5213,5215,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5215,5217,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5217,5219,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5219,5221,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5221,5223,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5223,5225,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5225,5227,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5227,5229,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5229,5231,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5231,5233,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5233,5235,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5235,5237,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5237,5239,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5239,5241,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5241,5243,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5243,5245,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5245,5247,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5247,5249,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5249,5251,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5251,5253,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5253,5255,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5255,5257,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5257,5259,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5259,5261,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5261,5263,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5263,5265,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5265,5267,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5267,5269,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5269,5271,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5271,5273,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5273,5275,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5275,5277,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5277,5279,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5279,5281,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5281,5283,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5283,5285,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5285,5287,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5287,5289,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5289,5291,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5291,5293,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5293,5295,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5295,5297,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5297,5299,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5299,5301,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5301,5303,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5303,5305,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5305,5307,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5307,5309,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5309,5311,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5311,5313,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5313,5315,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5315,5317,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5317,5319,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5319,5321,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5321,5323,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5323,5325,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5325,5327,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5327,5329,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5329,5331,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5331,5333,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5333,5335,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5335,5337,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5337,5339,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5339,5341,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5341,5343,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5343,5345,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5345,5347,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5347,5349,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5349,5351,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5351,5353,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5353,5355,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5355,5357,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5357,5359,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5359,5361,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5361,5363,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5363,5365,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5365,5367,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5367,5369,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5369,5371,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5371,5373,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5373,5375,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5375,5377,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5377,5379,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5379,5381,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5381,5383,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5383,5385,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5385,5387,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5387,5389,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5389,5391,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5391,5393,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5393,5395,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5395,5397,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5397,5399,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5399,5401,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5401,5403,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5403,5405,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5405,5407,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5407,5409,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5409,5411,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5411,5413,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5413,5415,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5415,5417,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5417,5419,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5419,5421,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5421,5423,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5423,5425,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5425,5427,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5427,5429,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5429,5431,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5431,5433,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5433,5435,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5435,5437,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5437,5439,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5439,5441,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5441,5443,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5443,5445,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5445,5447,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5447,5449,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5449,5451,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5451,5453,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5453,5455,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5455,5457,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5457,5459,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5459,5461,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5461,5463,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5463,5465,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5465,5467,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5467,5469,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5469,5471,NP-5AE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5471,5473,NP-5BE-1-WL-4,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5473,5475,NP-6A,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5475,5477,NP-6B,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5477,5479,NP-4AD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
5479,5480,NP-4BD-1-D-2,"임의 배정 (placeholder, 실제 구간 아님)"
|
||||||
|
@@ -5,7 +5,17 @@
|
|||||||
"road_z_4745_m": 50.62,
|
"road_z_4745_m": 50.62,
|
||||||
"road_z_5480_m": 67.311,
|
"road_z_5480_m": 67.311,
|
||||||
"plan_chord_length_total_m (4+700..5+500)": 799.905,
|
"plan_chord_length_total_m (4+700..5+500)": 799.905,
|
||||||
"station_range_modelled": "4745 .. 5480 (ring step 5.0 m, 148 rings)",
|
"station_range_modelled": "4745 .. 5480 (ring step 1.0 m, 736 rings)",
|
||||||
"glb_bytes": 470416,
|
"pattern_zones (2 m, placeholder)": 368,
|
||||||
|
"pattern_coverage_all_stations": true,
|
||||||
|
"pattern_counts": {
|
||||||
|
"NP-4AD-1-D-2": 62,
|
||||||
|
"NP-4BD-1-D-2": 62,
|
||||||
|
"NP-5AE-1-WL-4": 61,
|
||||||
|
"NP-5BE-1-WL-4": 61,
|
||||||
|
"NP-6A": 61,
|
||||||
|
"NP-6B": 61
|
||||||
|
},
|
||||||
|
"glb_bytes": 2201764,
|
||||||
"glb_reload_geometries": 5
|
"glb_reload_geometries": 5
|
||||||
}
|
}
|
||||||
Binary file not shown.
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,21 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Task 5 (user decision 2026-10-21): no pattern-station data exists. Create a
|
||||||
|
PLACEHOLDER pattern table at 2 m segments over the modelled range 4+745..5+480,
|
||||||
|
cycling the six pattern names. Every row is marked '임의 배정 (placeholder)'.
|
||||||
|
The table is an editable CSV: replace the 'pattern' column later and rebuild.
|
||||||
|
Output: data/pattern_zones_placeholder.csv (created only if absent; never overwritten)."""
|
||||||
|
import csv
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
ROOT = sys.argv[1]
|
||||||
|
OUT = f"{ROOT}/data/pattern_zones_placeholder.csv"
|
||||||
|
PATTERNS = ["NP-4AD-1-D-2", "NP-4BD-1-D-2", "NP-5AE-1-WL-4", "NP-5BE-1-WL-4", "NP-6A", "NP-6B"]
|
||||||
|
S0, S1, SEG = 4745, 5480, 2
|
||||||
|
if not os.path.exists(OUT):
|
||||||
|
with open(OUT, "w", newline="", encoding="utf-8") as fh:
|
||||||
|
w = csv.writer(fh)
|
||||||
|
w.writerow(["seg_from", "seg_to", "pattern", "status"])
|
||||||
|
for k, s in enumerate(range(S0, S1, SEG)):
|
||||||
|
w.writerow([s, min(s + SEG, S1), PATTERNS[k % len(PATTERNS)], "임의 배정 (placeholder, 실제 구간 아님)"])
|
||||||
|
print("pattern table:", OUT)
|
||||||
@@ -30,7 +30,7 @@ R1, R_OUT, R_EX = 6.982, 7.282, 7.402 # m (mm / 1000)
|
|||||||
CROWN_A = 6.615 # m above road
|
CROWN_A = 6.615 # m above road
|
||||||
CENTRE_C = CROWN_A - R1 # arch centre height above road (m)
|
CENTRE_C = CROWN_A - R1 # arch centre height above road (m)
|
||||||
S0, S1 = 4745, 5480 # modelled range (fully determined)
|
S0, S1 = 4745, 5480 # modelled range (fully determined)
|
||||||
DS = 5.0 # station step for rings (m)
|
DS = 1.0 # station step for rings (m); pattern segments are 2 m
|
||||||
ANG = np.radians(np.linspace(40.0, 140.0, 41)) # arch arc, right springline -> left
|
ANG = np.radians(np.linspace(40.0, 140.0, 41)) # arch arc, right springline -> left
|
||||||
|
|
||||||
def read_centre():
|
def read_centre():
|
||||||
@@ -80,18 +80,33 @@ def ring_world(R, s):
|
|||||||
P = np.column_stack([x - ORIGIN[0] + xs * nx, y - ORIGIN[1] + xs * ny, zr + zs])
|
P = np.column_stack([x - ORIGIN[0] + xs * nx, y - ORIGIN[1] + xs * ny, zr + zs])
|
||||||
return P
|
return P
|
||||||
|
|
||||||
def make_band(R, color, name):
|
PAL = {"NP-4AD-1-D-2": (231, 111, 81, 255), "NP-4BD-1-D-2": (244, 162, 97, 255),
|
||||||
|
"NP-5AE-1-WL-4": (233, 196, 106, 255), "NP-5BE-1-WL-4": (138, 177, 125, 255),
|
||||||
|
"NP-6A": (42, 157, 143, 255), "NP-6B": (38, 70, 83, 255)}
|
||||||
|
ZONES = [(int(r["seg_from"]), int(r["seg_to"]), r["pattern"], r["status"])
|
||||||
|
for r in csv.DictReader(open(f"{ROOT}/data/pattern_zones_placeholder.csv", encoding="utf-8"))]
|
||||||
|
|
||||||
|
def pattern_of(sta):
|
||||||
|
for a, b, pat, _ in ZONES:
|
||||||
|
if a <= sta < b:
|
||||||
|
return pat
|
||||||
|
return ZONES[-1][2]
|
||||||
|
|
||||||
|
def make_band_pattern(R, name):
|
||||||
rings = [ring_world(R, s) for s in stations]
|
rings = [ring_world(R, s) for s in stations]
|
||||||
n = len(rings[0]); m = len(rings)
|
n = len(rings[0]); m = len(rings)
|
||||||
V = np.vstack(rings)
|
V = np.vstack(rings)
|
||||||
F = []
|
F, C = [], []
|
||||||
for i in range(m - 1):
|
for i in range(m - 1):
|
||||||
|
col = PAL[pattern_of(stations[i])]
|
||||||
for j in range(n - 1):
|
for j in range(n - 1):
|
||||||
a = i * n + j; b = a + 1; c = a + n; d = c + 1
|
a = i * n + j; b = a + 1; c = a + n; d = c + 1
|
||||||
F += [[a, b, c], [b, d, c]]
|
F += [[a, b, c], [b, d, c]]
|
||||||
|
C += [col, col]
|
||||||
mesh = trimesh.Trimesh(vertices=V, faces=np.array(F), process=False)
|
mesh = trimesh.Trimesh(vertices=V, faces=np.array(F), process=False)
|
||||||
mesh.visual.face_colors = np.tile(np.array(color, dtype=np.uint8), (len(F), 1))
|
mesh.visual.face_colors = np.array(C, dtype=np.uint8)
|
||||||
mesh.metadata["name"] = name
|
mesh.metadata["name"] = name
|
||||||
|
mesh.metadata["ring_points"] = n
|
||||||
return mesh
|
return mesh
|
||||||
|
|
||||||
def make_ribbon(z_fn, half_w, color, name):
|
def make_ribbon(z_fn, half_w, color, name):
|
||||||
@@ -111,9 +126,24 @@ def make_ribbon(z_fn, half_w, color, name):
|
|||||||
mesh.metadata["name"] = name
|
mesh.metadata["name"] = name
|
||||||
return mesh
|
return mesh
|
||||||
|
|
||||||
|
def make_band(R, color, name):
|
||||||
|
"""uniform-colour band (excavation outline)."""
|
||||||
|
rings = [ring_world(R, s) for s in stations]
|
||||||
|
n = len(rings[0]); m = len(rings)
|
||||||
|
V = np.vstack(rings)
|
||||||
|
F = []
|
||||||
|
for i in range(m - 1):
|
||||||
|
for j in range(n - 1):
|
||||||
|
a = i * n + j; b = a + 1; c = a + n; d = c + 1
|
||||||
|
F += [[a, b, c], [b, d, c]]
|
||||||
|
mesh = trimesh.Trimesh(vertices=V, faces=np.array(F), process=False)
|
||||||
|
mesh.visual.face_colors = np.tile(np.array(color, dtype=np.uint8), (len(F), 1))
|
||||||
|
mesh.metadata["name"] = name
|
||||||
|
return mesh
|
||||||
|
|
||||||
parts = [
|
parts = [
|
||||||
make_band(R_OUT, (190, 190, 186, 255), "lining_outer_R7282"),
|
make_band_pattern(R_OUT, "lining_outer_R7282"),
|
||||||
make_band(R1, (235, 235, 230, 255), "lining_inner_R6982"),
|
make_band_pattern(R1, "lining_inner_R6982"),
|
||||||
make_band(R_EX, (150, 120, 90, 110), "excavation_R7402"),
|
make_band(R_EX, (150, 120, 90, 110), "excavation_R7402"),
|
||||||
make_ribbon(lambda s: float(np.interp(s, dg_s, dg_v)), 5.0, (70, 70, 75, 255), "road_surface_계획고"),
|
make_ribbon(lambda s: float(np.interp(s, dg_s, dg_v)), 5.0, (70, 70, 75, 255), "road_surface_계획고"),
|
||||||
make_ribbon(lambda s: float(np.interp(s, gl_s, gl_v)), 20.0, (110, 150, 90, 200), "ground_GL_지반고"),
|
make_ribbon(lambda s: float(np.interp(s, gl_s, gl_v)), 20.0, (110, 150, 90, 200), "ground_GL_지반고"),
|
||||||
@@ -138,6 +168,9 @@ checks["road_z_5480_m"] = round(float(np.interp(S1, dg_s, dg_v)), 3)
|
|||||||
L_chord = float(np.sum([math.dist(cn[i, 1:], cn[i + 1, 1:]) for i in range(len(cn) - 1)]))
|
L_chord = float(np.sum([math.dist(cn[i, 1:], cn[i + 1, 1:]) for i in range(len(cn) - 1)]))
|
||||||
checks["plan_chord_length_total_m (4+700..5+500)"] = round(L_chord, 3)
|
checks["plan_chord_length_total_m (4+700..5+500)"] = round(L_chord, 3)
|
||||||
checks["station_range_modelled"] = f"{S0} .. {S1} (ring step {DS} m, {len(stations)} rings)"
|
checks["station_range_modelled"] = f"{S0} .. {S1} (ring step {DS} m, {len(stations)} rings)"
|
||||||
|
checks["pattern_zones (2 m, placeholder)"] = len(ZONES)
|
||||||
|
checks["pattern_coverage_all_stations"] = bool(all(pattern_of(x) in PAL for x in stations))
|
||||||
|
checks["pattern_counts"] = {k: sum(1 for z in ZONES if z[2] == k) for k in PAL}
|
||||||
checks["glb_bytes"] = int(__import__("os").path.getsize(glb))
|
checks["glb_bytes"] = int(__import__("os").path.getsize(glb))
|
||||||
reload = trimesh.load(glb)
|
reload = trimesh.load(glb)
|
||||||
checks["glb_reload_geometries"] = len(reload.geometry)
|
checks["glb_reload_geometries"] = len(reload.geometry)
|
||||||
@@ -154,6 +187,9 @@ meta = {
|
|||||||
"centreline and grade linearly interpolated between nodes",
|
"centreline and grade linearly interpolated between nodes",
|
||||||
"superelevation sign convention assumed (z += S/100 * x, x = left of tangent)"],
|
"superelevation sign convention assumed (z += S/100 * x, x = left of tangent)"],
|
||||||
"layers": [p.metadata["name"] for p in parts],
|
"layers": [p.metadata["name"] for p in parts],
|
||||||
|
"ring_step_m": DS, "ring_points": int(parts[0].metadata["ring_points"]), "first_station": S0,
|
||||||
|
"pattern_status": "PLACEHOLDER: 2 m 임의 배정. 실제 측점 구간 아님 (사용자 결정 2026-10-21). data/pattern_zones_placeholder.csv 를 수정 후 재빌드",
|
||||||
|
"patterns": [{"from": a, "to": b, "pattern": pat} for a, b, pat, _ in ZONES],
|
||||||
"open": ["4+700~4+745 and 5+480~5+500 excluded ([미확정])", "pattern zones (03-003~008) pending Task 5",
|
"open": ["4+700~4+745 and 5+480~5+500 excluded ([미확정])", "pattern zones (03-003~008) pending Task 5",
|
||||||
"lining details (04-004~009) pending Task 6"]
|
"lining details (04-004~009) pending Task 6"]
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-2
@@ -96,8 +96,10 @@ loader.load(MODEL, (gltf) => {
|
|||||||
status.textContent = '로드 실패: 파일을 HTTP 서버로 여세요 (README 참조)';
|
status.textContent = '로드 실패: 파일을 HTTP 서버로 여세요 (README 참조)';
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let M = null;
|
||||||
fetch(META).then((r) => r.json()).then((m) => {
|
fetch(META).then((r) => r.json()).then((m) => {
|
||||||
info.textContent = '범위: ' + m.scope + ' (단위 ' + m.units + ')\n근사 항목:\n- ' + m.approximations.join('\n- ') + '\n미완:\n- ' + m.open.join('\n- ');
|
M = m;
|
||||||
|
info.textContent = '범위: ' + m.scope + ' (단위 ' + m.units + ')\n패턴: ' + m.pattern_status + '\n근사 항목:\n- ' + m.approximations.join('\n- ') + '\n미완:\n- ' + m.open.join('\n- ');
|
||||||
}).catch(() => {});
|
}).catch(() => {});
|
||||||
|
|
||||||
const ray = new THREE.Raycaster();
|
const ray = new THREE.Raycaster();
|
||||||
@@ -112,7 +114,16 @@ renderer.domElement.addEventListener('pointerup', (e) => {
|
|||||||
const hit = ray.intersectObjects(meshes.filter((m) => m.visible), false)[0];
|
const hit = ray.intersectObjects(meshes.filter((m) => m.visible), false)[0];
|
||||||
if (hit) {
|
if (hit) {
|
||||||
const key = hit.object.userData.key;
|
const key = hit.object.userData.key;
|
||||||
info.textContent = (INFO[key] || key) + '\n교차점: x=' + hit.point.x.toFixed(2) + ' y=' + hit.point.y.toFixed(2) + ' z=' + hit.point.z.toFixed(2) + ' (m, 모델 좌표)';
|
let extra = '';
|
||||||
|
if (M && key.startsWith('lining') && hit.faceIndex != null) {
|
||||||
|
const n = M.ring_points;
|
||||||
|
const ring = Math.floor(hit.faceIndex / (2 * (n - 1)));
|
||||||
|
const sta = M.first_station + ring * M.ring_step_m;
|
||||||
|
const z = M.patterns.find((z) => sta >= z.from && sta < z.to);
|
||||||
|
const km = Math.floor(sta / 1000), m = Math.round(sta % 1000);
|
||||||
|
extra = '\n측점: ' + km + '+' + String(m).padStart(3, '0') + '\n패턴: ' + (z ? z.pattern : '-') + ' (임의 배정, 실제 구간 아님)';
|
||||||
|
}
|
||||||
|
info.textContent = (INFO[key] || key) + extra + '\n교차점: x=' + hit.point.x.toFixed(2) + ' y=' + hit.point.y.toFixed(2) + ' z=' + hit.point.z.toFixed(2) + ' (m, 모델 좌표)';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user