app
AI Flow
Public Made by Adomby adom
Adom's AI Flow: a tool to help the AI follow all of the steps it takes to build a board.
main
John Lauer
Publish 0.1.94
bca797f
"""The same child repeated inside one parent must never be flattened onto one placement."""
import unittest
from step_text import Step
HEADER="ISO-10303-21; HEADER; ENDSEC; DATA;\n"
TAIL="\nENDSEC; END-ISO-10303-21;"
def fixture(two=True, other_parent=False):
s="""
#1=CARTESIAN_POINT('',(0.,0.,0.));
#2=DIRECTION('',(0.,0.,1.));
#3=DIRECTION('',(1.,0.,0.));
#4=AXIS2_PLACEMENT_3D('',#1,#2,#3);
#5=CARTESIAN_POINT('',(-2.,0.,0.));
#6=AXIS2_PLACEMENT_3D('',#5,#2,#3);
#7=CARTESIAN_POINT('',(2.,0.,0.));
#8=AXIS2_PLACEMENT_3D('',#7,#2,#3);
#9=CARTESIAN_POINT('',(0.,1.,0.));
#10=SHAPE_REPRESENTATION('',(#4,#9),#99);
#11=SHAPE_REPRESENTATION('',(#4,#6,#8),#99);
#12=ITEM_DEFINED_TRANSFORMATION('','',#4,#6);
#13=(REPRESENTATION_RELATIONSHIP('','',#10,#11) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#12) SHAPE_REPRESENTATION_RELATIONSHIP());
#99=GEOMETRIC_REPRESENTATION_CONTEXT(3);
"""
if two:
s+="""
#14=ITEM_DEFINED_TRANSFORMATION('','',#4,#8);
#15=(REPRESENTATION_RELATIONSHIP('','',#10,#PARENT) REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#14) SHAPE_REPRESENTATION_RELATIONSHIP());
""".replace('#PARENT','#16' if other_parent else '#11')
if other_parent:s+="#16=SHAPE_REPRESENTATION('',(#4,#8),#99);"
return Step(HEADER+s+TAIL)
class Instances(unittest.TestCase):
def test_same_parent_occurrences_fail_without_mutation(self):
s=fixture();before=s.text
with self.assertRaisesRegex(SystemExit,'instanced'):s.flatten()
self.assertEqual(before,s.text)
def test_different_parent_occurrences_fail_without_mutation(self):
s=fixture(other_parent=True);before=s.text
with self.assertRaisesRegex(SystemExit,'instanced'):s.flatten()
self.assertEqual(before,s.text)
def test_single_occurrence_still_bakes_placement(self):
s=fixture(two=False);s.flatten()
self.assertEqual(s.coords(9),[-2.,1.,0.])
before=s.text;s.flatten();self.assertEqual(s.coords(9),[-2.,1.,0.])
if __name__=='__main__':unittest.main()