34 lines
1.6 KiB
Python
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()
|