Files

34 lines
1.6 KiB
Python

import unittest
import ezdxf
import numpy as np
from pierzainer_ground.plan_registration import resolve_plan_registration
class PlanRegistrationTests(unittest.TestCase):
def fixture(self, duplicate=False):
doc=ezdxf.new();controls=[];angle=.47
rotation=np.array([[np.cos(angle),np.sin(angle)],[-np.sin(angle),np.cos(angle)]])
for i,center in enumerate(([0,0],[45,1],[90,3],[140,6])):
center=np.array(center,dtype=float)
for offset in ([0,0],[0,30]) if duplicate else ([0,0],):
corners=center+offset+np.array([[-1.2,-6],[1.2,-6],[1.2,6],[-1.2,6]])
doc.modelspace().add_lwpolyline(corners,close=True,dxfattribs={'layer':'교량'})
ends=np.array([center+[0,-6],center+[0,6]])@rotation+[200000,500000]
controls.append({'id':f'P{i+1}','axis':ends[:,::-1].tolist()})
return doc,controls
def test_all_original_centers_and_axes_register(self):
doc,controls=self.fixture();result=resolve_plan_registration(doc,controls)
self.assertEqual(result['status'],'registered')
self.assertLess(max(result['solutions'][0]['residual_m']),1e-8)
def test_inconsistent_holdout_pier_is_rejected(self):
doc,controls=self.fixture()
controls[1]['axis'][0][0]+=.4;controls[1]['axis'][1][0]+=.4
self.assertEqual(resolve_plan_registration(doc,controls)['status'],'no_verified_frame')
def test_parallel_duplicate_layout_is_ambiguous(self):
doc,controls=self.fixture(duplicate=True)
self.assertEqual(resolve_plan_registration(doc,controls)['status'],'ambiguous')
if __name__=='__main__':unittest.main()