diff --git a/data/pattern_zones_placeholder.csv b/data/pattern_zones_placeholder.csv new file mode 100644 index 0000000..2afdd1b --- /dev/null +++ b/data/pattern_zones_placeholder.csv @@ -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, 실제 구간 아님)" diff --git a/data/verify_skeleton.json b/data/verify_skeleton.json index e217436..e79825d 100644 --- a/data/verify_skeleton.json +++ b/data/verify_skeleton.json @@ -5,7 +5,17 @@ "road_z_4745_m": 50.62, "road_z_5480_m": 67.311, "plan_chord_length_total_m (4+700..5+500)": 799.905, - "station_range_modelled": "4745 .. 5480 (ring step 5.0 m, 148 rings)", - "glb_bytes": 470416, + "station_range_modelled": "4745 .. 5480 (ring step 1.0 m, 736 rings)", + "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 } \ No newline at end of file diff --git a/model/tunnel_skeleton.glb b/model/tunnel_skeleton.glb index c4ad0d2..4e2098d 100644 Binary files a/model/tunnel_skeleton.glb and b/model/tunnel_skeleton.glb differ diff --git a/model/tunnel_skeleton_meta.json b/model/tunnel_skeleton_meta.json index e64f38e..1a30af1 100644 --- a/model/tunnel_skeleton_meta.json +++ b/model/tunnel_skeleton_meta.json @@ -25,6 +25,1852 @@ "road_surface_계획고", "ground_GL_지반고" ], + "ring_step_m": 1.0, + "ring_points": 43, + "first_station": 4745, + "pattern_status": "PLACEHOLDER: 2 m 임의 배정. 실제 측점 구간 아님 (사용자 결정 2026-10-21). data/pattern_zones_placeholder.csv 를 수정 후 재빌드", + "patterns": [ + { + "from": 4745, + "to": 4747, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4747, + "to": 4749, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4749, + "to": 4751, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4751, + "to": 4753, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4753, + "to": 4755, + "pattern": "NP-6A" + }, + { + "from": 4755, + "to": 4757, + "pattern": "NP-6B" + }, + { + "from": 4757, + "to": 4759, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4759, + "to": 4761, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4761, + "to": 4763, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4763, + "to": 4765, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4765, + "to": 4767, + "pattern": "NP-6A" + }, + { + "from": 4767, + "to": 4769, + "pattern": "NP-6B" + }, + { + "from": 4769, + "to": 4771, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4771, + "to": 4773, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4773, + "to": 4775, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4775, + "to": 4777, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4777, + "to": 4779, + "pattern": "NP-6A" + }, + { + "from": 4779, + "to": 4781, + "pattern": "NP-6B" + }, + { + "from": 4781, + "to": 4783, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4783, + "to": 4785, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4785, + "to": 4787, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4787, + "to": 4789, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4789, + "to": 4791, + "pattern": "NP-6A" + }, + { + "from": 4791, + "to": 4793, + "pattern": "NP-6B" + }, + { + "from": 4793, + "to": 4795, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4795, + "to": 4797, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4797, + "to": 4799, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4799, + "to": 4801, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4801, + "to": 4803, + "pattern": "NP-6A" + }, + { + "from": 4803, + "to": 4805, + "pattern": "NP-6B" + }, + { + "from": 4805, + "to": 4807, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4807, + "to": 4809, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4809, + "to": 4811, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4811, + "to": 4813, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4813, + "to": 4815, + "pattern": "NP-6A" + }, + { + "from": 4815, + "to": 4817, + "pattern": "NP-6B" + }, + { + "from": 4817, + "to": 4819, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4819, + "to": 4821, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4821, + "to": 4823, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4823, + "to": 4825, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4825, + "to": 4827, + "pattern": "NP-6A" + }, + { + "from": 4827, + "to": 4829, + "pattern": "NP-6B" + }, + { + "from": 4829, + "to": 4831, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4831, + "to": 4833, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4833, + "to": 4835, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4835, + "to": 4837, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4837, + "to": 4839, + "pattern": "NP-6A" + }, + { + "from": 4839, + "to": 4841, + "pattern": "NP-6B" + }, + { + "from": 4841, + "to": 4843, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4843, + "to": 4845, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4845, + "to": 4847, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4847, + "to": 4849, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4849, + "to": 4851, + "pattern": "NP-6A" + }, + { + "from": 4851, + "to": 4853, + "pattern": "NP-6B" + }, + { + "from": 4853, + "to": 4855, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4855, + "to": 4857, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4857, + "to": 4859, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4859, + "to": 4861, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4861, + "to": 4863, + "pattern": "NP-6A" + }, + { + "from": 4863, + "to": 4865, + "pattern": "NP-6B" + }, + { + "from": 4865, + "to": 4867, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4867, + "to": 4869, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4869, + "to": 4871, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4871, + "to": 4873, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4873, + "to": 4875, + "pattern": "NP-6A" + }, + { + "from": 4875, + "to": 4877, + "pattern": "NP-6B" + }, + { + "from": 4877, + "to": 4879, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4879, + "to": 4881, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4881, + "to": 4883, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4883, + "to": 4885, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4885, + "to": 4887, + "pattern": "NP-6A" + }, + { + "from": 4887, + "to": 4889, + "pattern": "NP-6B" + }, + { + "from": 4889, + "to": 4891, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4891, + "to": 4893, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4893, + "to": 4895, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4895, + "to": 4897, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4897, + "to": 4899, + "pattern": "NP-6A" + }, + { + "from": 4899, + "to": 4901, + "pattern": "NP-6B" + }, + { + "from": 4901, + "to": 4903, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4903, + "to": 4905, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4905, + "to": 4907, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4907, + "to": 4909, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4909, + "to": 4911, + "pattern": "NP-6A" + }, + { + "from": 4911, + "to": 4913, + "pattern": "NP-6B" + }, + { + "from": 4913, + "to": 4915, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4915, + "to": 4917, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4917, + "to": 4919, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4919, + "to": 4921, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4921, + "to": 4923, + "pattern": "NP-6A" + }, + { + "from": 4923, + "to": 4925, + "pattern": "NP-6B" + }, + { + "from": 4925, + "to": 4927, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4927, + "to": 4929, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4929, + "to": 4931, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4931, + "to": 4933, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4933, + "to": 4935, + "pattern": "NP-6A" + }, + { + "from": 4935, + "to": 4937, + "pattern": "NP-6B" + }, + { + "from": 4937, + "to": 4939, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4939, + "to": 4941, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4941, + "to": 4943, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4943, + "to": 4945, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4945, + "to": 4947, + "pattern": "NP-6A" + }, + { + "from": 4947, + "to": 4949, + "pattern": "NP-6B" + }, + { + "from": 4949, + "to": 4951, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4951, + "to": 4953, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4953, + "to": 4955, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4955, + "to": 4957, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4957, + "to": 4959, + "pattern": "NP-6A" + }, + { + "from": 4959, + "to": 4961, + "pattern": "NP-6B" + }, + { + "from": 4961, + "to": 4963, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4963, + "to": 4965, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4965, + "to": 4967, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4967, + "to": 4969, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4969, + "to": 4971, + "pattern": "NP-6A" + }, + { + "from": 4971, + "to": 4973, + "pattern": "NP-6B" + }, + { + "from": 4973, + "to": 4975, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4975, + "to": 4977, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4977, + "to": 4979, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4979, + "to": 4981, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4981, + "to": 4983, + "pattern": "NP-6A" + }, + { + "from": 4983, + "to": 4985, + "pattern": "NP-6B" + }, + { + "from": 4985, + "to": 4987, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4987, + "to": 4989, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 4989, + "to": 4991, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 4991, + "to": 4993, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 4993, + "to": 4995, + "pattern": "NP-6A" + }, + { + "from": 4995, + "to": 4997, + "pattern": "NP-6B" + }, + { + "from": 4997, + "to": 4999, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 4999, + "to": 5001, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5001, + "to": 5003, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5003, + "to": 5005, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5005, + "to": 5007, + "pattern": "NP-6A" + }, + { + "from": 5007, + "to": 5009, + "pattern": "NP-6B" + }, + { + "from": 5009, + "to": 5011, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5011, + "to": 5013, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5013, + "to": 5015, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5015, + "to": 5017, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5017, + "to": 5019, + "pattern": "NP-6A" + }, + { + "from": 5019, + "to": 5021, + "pattern": "NP-6B" + }, + { + "from": 5021, + "to": 5023, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5023, + "to": 5025, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5025, + "to": 5027, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5027, + "to": 5029, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5029, + "to": 5031, + "pattern": "NP-6A" + }, + { + "from": 5031, + "to": 5033, + "pattern": "NP-6B" + }, + { + "from": 5033, + "to": 5035, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5035, + "to": 5037, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5037, + "to": 5039, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5039, + "to": 5041, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5041, + "to": 5043, + "pattern": "NP-6A" + }, + { + "from": 5043, + "to": 5045, + "pattern": "NP-6B" + }, + { + "from": 5045, + "to": 5047, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5047, + "to": 5049, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5049, + "to": 5051, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5051, + "to": 5053, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5053, + "to": 5055, + "pattern": "NP-6A" + }, + { + "from": 5055, + "to": 5057, + "pattern": "NP-6B" + }, + { + "from": 5057, + "to": 5059, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5059, + "to": 5061, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5061, + "to": 5063, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5063, + "to": 5065, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5065, + "to": 5067, + "pattern": "NP-6A" + }, + { + "from": 5067, + "to": 5069, + "pattern": "NP-6B" + }, + { + "from": 5069, + "to": 5071, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5071, + "to": 5073, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5073, + "to": 5075, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5075, + "to": 5077, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5077, + "to": 5079, + "pattern": "NP-6A" + }, + { + "from": 5079, + "to": 5081, + "pattern": "NP-6B" + }, + { + "from": 5081, + "to": 5083, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5083, + "to": 5085, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5085, + "to": 5087, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5087, + "to": 5089, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5089, + "to": 5091, + "pattern": "NP-6A" + }, + { + "from": 5091, + "to": 5093, + "pattern": "NP-6B" + }, + { + "from": 5093, + "to": 5095, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5095, + "to": 5097, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5097, + "to": 5099, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5099, + "to": 5101, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5101, + "to": 5103, + "pattern": "NP-6A" + }, + { + "from": 5103, + "to": 5105, + "pattern": "NP-6B" + }, + { + "from": 5105, + "to": 5107, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5107, + "to": 5109, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5109, + "to": 5111, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5111, + "to": 5113, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5113, + "to": 5115, + "pattern": "NP-6A" + }, + { + "from": 5115, + "to": 5117, + "pattern": "NP-6B" + }, + { + "from": 5117, + "to": 5119, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5119, + "to": 5121, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5121, + "to": 5123, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5123, + "to": 5125, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5125, + "to": 5127, + "pattern": "NP-6A" + }, + { + "from": 5127, + "to": 5129, + "pattern": "NP-6B" + }, + { + "from": 5129, + "to": 5131, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5131, + "to": 5133, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5133, + "to": 5135, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5135, + "to": 5137, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5137, + "to": 5139, + "pattern": "NP-6A" + }, + { + "from": 5139, + "to": 5141, + "pattern": "NP-6B" + }, + { + "from": 5141, + "to": 5143, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5143, + "to": 5145, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5145, + "to": 5147, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5147, + "to": 5149, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5149, + "to": 5151, + "pattern": "NP-6A" + }, + { + "from": 5151, + "to": 5153, + "pattern": "NP-6B" + }, + { + "from": 5153, + "to": 5155, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5155, + "to": 5157, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5157, + "to": 5159, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5159, + "to": 5161, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5161, + "to": 5163, + "pattern": "NP-6A" + }, + { + "from": 5163, + "to": 5165, + "pattern": "NP-6B" + }, + { + "from": 5165, + "to": 5167, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5167, + "to": 5169, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5169, + "to": 5171, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5171, + "to": 5173, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5173, + "to": 5175, + "pattern": "NP-6A" + }, + { + "from": 5175, + "to": 5177, + "pattern": "NP-6B" + }, + { + "from": 5177, + "to": 5179, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5179, + "to": 5181, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5181, + "to": 5183, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5183, + "to": 5185, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5185, + "to": 5187, + "pattern": "NP-6A" + }, + { + "from": 5187, + "to": 5189, + "pattern": "NP-6B" + }, + { + "from": 5189, + "to": 5191, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5191, + "to": 5193, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5193, + "to": 5195, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5195, + "to": 5197, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5197, + "to": 5199, + "pattern": "NP-6A" + }, + { + "from": 5199, + "to": 5201, + "pattern": "NP-6B" + }, + { + "from": 5201, + "to": 5203, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5203, + "to": 5205, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5205, + "to": 5207, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5207, + "to": 5209, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5209, + "to": 5211, + "pattern": "NP-6A" + }, + { + "from": 5211, + "to": 5213, + "pattern": "NP-6B" + }, + { + "from": 5213, + "to": 5215, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5215, + "to": 5217, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5217, + "to": 5219, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5219, + "to": 5221, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5221, + "to": 5223, + "pattern": "NP-6A" + }, + { + "from": 5223, + "to": 5225, + "pattern": "NP-6B" + }, + { + "from": 5225, + "to": 5227, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5227, + "to": 5229, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5229, + "to": 5231, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5231, + "to": 5233, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5233, + "to": 5235, + "pattern": "NP-6A" + }, + { + "from": 5235, + "to": 5237, + "pattern": "NP-6B" + }, + { + "from": 5237, + "to": 5239, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5239, + "to": 5241, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5241, + "to": 5243, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5243, + "to": 5245, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5245, + "to": 5247, + "pattern": "NP-6A" + }, + { + "from": 5247, + "to": 5249, + "pattern": "NP-6B" + }, + { + "from": 5249, + "to": 5251, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5251, + "to": 5253, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5253, + "to": 5255, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5255, + "to": 5257, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5257, + "to": 5259, + "pattern": "NP-6A" + }, + { + "from": 5259, + "to": 5261, + "pattern": "NP-6B" + }, + { + "from": 5261, + "to": 5263, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5263, + "to": 5265, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5265, + "to": 5267, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5267, + "to": 5269, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5269, + "to": 5271, + "pattern": "NP-6A" + }, + { + "from": 5271, + "to": 5273, + "pattern": "NP-6B" + }, + { + "from": 5273, + "to": 5275, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5275, + "to": 5277, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5277, + "to": 5279, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5279, + "to": 5281, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5281, + "to": 5283, + "pattern": "NP-6A" + }, + { + "from": 5283, + "to": 5285, + "pattern": "NP-6B" + }, + { + "from": 5285, + "to": 5287, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5287, + "to": 5289, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5289, + "to": 5291, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5291, + "to": 5293, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5293, + "to": 5295, + "pattern": "NP-6A" + }, + { + "from": 5295, + "to": 5297, + "pattern": "NP-6B" + }, + { + "from": 5297, + "to": 5299, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5299, + "to": 5301, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5301, + "to": 5303, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5303, + "to": 5305, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5305, + "to": 5307, + "pattern": "NP-6A" + }, + { + "from": 5307, + "to": 5309, + "pattern": "NP-6B" + }, + { + "from": 5309, + "to": 5311, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5311, + "to": 5313, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5313, + "to": 5315, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5315, + "to": 5317, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5317, + "to": 5319, + "pattern": "NP-6A" + }, + { + "from": 5319, + "to": 5321, + "pattern": "NP-6B" + }, + { + "from": 5321, + "to": 5323, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5323, + "to": 5325, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5325, + "to": 5327, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5327, + "to": 5329, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5329, + "to": 5331, + "pattern": "NP-6A" + }, + { + "from": 5331, + "to": 5333, + "pattern": "NP-6B" + }, + { + "from": 5333, + "to": 5335, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5335, + "to": 5337, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5337, + "to": 5339, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5339, + "to": 5341, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5341, + "to": 5343, + "pattern": "NP-6A" + }, + { + "from": 5343, + "to": 5345, + "pattern": "NP-6B" + }, + { + "from": 5345, + "to": 5347, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5347, + "to": 5349, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5349, + "to": 5351, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5351, + "to": 5353, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5353, + "to": 5355, + "pattern": "NP-6A" + }, + { + "from": 5355, + "to": 5357, + "pattern": "NP-6B" + }, + { + "from": 5357, + "to": 5359, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5359, + "to": 5361, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5361, + "to": 5363, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5363, + "to": 5365, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5365, + "to": 5367, + "pattern": "NP-6A" + }, + { + "from": 5367, + "to": 5369, + "pattern": "NP-6B" + }, + { + "from": 5369, + "to": 5371, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5371, + "to": 5373, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5373, + "to": 5375, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5375, + "to": 5377, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5377, + "to": 5379, + "pattern": "NP-6A" + }, + { + "from": 5379, + "to": 5381, + "pattern": "NP-6B" + }, + { + "from": 5381, + "to": 5383, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5383, + "to": 5385, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5385, + "to": 5387, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5387, + "to": 5389, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5389, + "to": 5391, + "pattern": "NP-6A" + }, + { + "from": 5391, + "to": 5393, + "pattern": "NP-6B" + }, + { + "from": 5393, + "to": 5395, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5395, + "to": 5397, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5397, + "to": 5399, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5399, + "to": 5401, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5401, + "to": 5403, + "pattern": "NP-6A" + }, + { + "from": 5403, + "to": 5405, + "pattern": "NP-6B" + }, + { + "from": 5405, + "to": 5407, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5407, + "to": 5409, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5409, + "to": 5411, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5411, + "to": 5413, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5413, + "to": 5415, + "pattern": "NP-6A" + }, + { + "from": 5415, + "to": 5417, + "pattern": "NP-6B" + }, + { + "from": 5417, + "to": 5419, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5419, + "to": 5421, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5421, + "to": 5423, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5423, + "to": 5425, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5425, + "to": 5427, + "pattern": "NP-6A" + }, + { + "from": 5427, + "to": 5429, + "pattern": "NP-6B" + }, + { + "from": 5429, + "to": 5431, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5431, + "to": 5433, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5433, + "to": 5435, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5435, + "to": 5437, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5437, + "to": 5439, + "pattern": "NP-6A" + }, + { + "from": 5439, + "to": 5441, + "pattern": "NP-6B" + }, + { + "from": 5441, + "to": 5443, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5443, + "to": 5445, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5445, + "to": 5447, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5447, + "to": 5449, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5449, + "to": 5451, + "pattern": "NP-6A" + }, + { + "from": 5451, + "to": 5453, + "pattern": "NP-6B" + }, + { + "from": 5453, + "to": 5455, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5455, + "to": 5457, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5457, + "to": 5459, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5459, + "to": 5461, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5461, + "to": 5463, + "pattern": "NP-6A" + }, + { + "from": 5463, + "to": 5465, + "pattern": "NP-6B" + }, + { + "from": 5465, + "to": 5467, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5467, + "to": 5469, + "pattern": "NP-4BD-1-D-2" + }, + { + "from": 5469, + "to": 5471, + "pattern": "NP-5AE-1-WL-4" + }, + { + "from": 5471, + "to": 5473, + "pattern": "NP-5BE-1-WL-4" + }, + { + "from": 5473, + "to": 5475, + "pattern": "NP-6A" + }, + { + "from": 5475, + "to": 5477, + "pattern": "NP-6B" + }, + { + "from": 5477, + "to": 5479, + "pattern": "NP-4AD-1-D-2" + }, + { + "from": 5479, + "to": 5480, + "pattern": "NP-4BD-1-D-2" + } + ], "open": [ "4+700~4+745 and 5+480~5+500 excluded ([미확정])", "pattern zones (03-003~008) pending Task 5", diff --git a/scripts/build_pattern_zones.py b/scripts/build_pattern_zones.py new file mode 100644 index 0000000..dca0107 --- /dev/null +++ b/scripts/build_pattern_zones.py @@ -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) diff --git a/scripts/build_skeleton.py b/scripts/build_skeleton.py index 273d506..4c6683a 100644 --- a/scripts/build_skeleton.py +++ b/scripts/build_skeleton.py @@ -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 CENTRE_C = CROWN_A - R1 # arch centre height above road (m) 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 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]) 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] n = len(rings[0]); m = len(rings) V = np.vstack(rings) - F = [] + F, C = [], [] for i in range(m - 1): + col = PAL[pattern_of(stations[i])] 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]] + C += [col, col] 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["ring_points"] = n return mesh 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 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 = [ - make_band(R_OUT, (190, 190, 186, 255), "lining_outer_R7282"), - make_band(R1, (235, 235, 230, 255), "lining_inner_R6982"), + make_band_pattern(R_OUT, "lining_outer_R7282"), + make_band_pattern(R1, "lining_inner_R6982"), 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, 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)])) 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["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)) reload = trimesh.load(glb) checks["glb_reload_geometries"] = len(reload.geometry) @@ -154,6 +187,9 @@ meta = { "centreline and grade linearly interpolated between nodes", "superelevation sign convention assumed (z += S/100 * x, x = left of tangent)"], "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", "lining details (04-004~009) pending Task 6"] } diff --git a/viewer/index.html b/viewer/index.html index 39e4021..d292d5a 100644 --- a/viewer/index.html +++ b/viewer/index.html @@ -96,8 +96,10 @@ loader.load(MODEL, (gltf) => { status.textContent = '로드 실패: 파일을 HTTP 서버로 여세요 (README 참조)'; }); +let M = null; 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(() => {}); 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]; if (hit) { 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, 모델 좌표)'; } });