def lin_compiler(definition: str) -> Sequence[DXFTag]: """ Compiles line type definitions like 'A,.5,-.25,.5,-.25,0,-.25' or 'A,.5,-.2,["GAS",STANDARD,S=.1,U=0.0,X=-0.1,Y=-.05],-.25' into DXFTags(). Args: definition: definition string Returns: list of DXFTag() """ # 'A,.5,-.2,["GAS",STANDARD,S=.1,U=0.0,X=-0.1,Y=-.05],-.25' # ['A', .5, -.2, ['TEXT', 'GAS', 'STANDARD', 's', .1, 'u', 0.0, 'x', -.1, 'y', -.05], -.25] tags = [] for token in lin_parser(definition): if token == "A": continue elif isinstance(token, float): tags.append( DXFTag(49, token) ) # Dash, dot or space length (one entry per element) elif isinstance(token, list): # yield from tags.append(compile_complex_defnition(token)) # type: ignore return tags
def test_int_not_skip_comments(): tags = list(internal_tag_compiler(TAGS1)) assert 9 == len(tags) assert DXFTag(999, 'comment') == tags[0]
def default_vars() -> OrderedDict: vars = OrderedDict() for vardef in HEADER_VAR_MAP.values(): vars[vardef.name] = HeaderVar(DXFTag(vardef.code, vardef.default)) return vars
def test_tuples2dxftags(): assert [DXFTag(40, 1), DXFTag(41, 2)] == tuples2dxftags([(40, 1), (41, 2)])
def test_append_not_existing_reactors(xtags4): xtags4.new_app_data(ACAD_REACTORS, [DXFTag(330, "DEAD")]) reactors = xtags4.get_app_data_content(ACAD_REACTORS) assert 1 == len(reactors) assert DXFTag(330, "DEAD") == reactors[0]
def test_write_point_tag(): s, t = setup_stream() t.write_tag(DXFTag(10, (7., 8., 9.))) result = s.getvalue() assert result == ' 10\n7.0\n 20\n8.0\n 30\n9.0\n'
def test_no_line_break_at_eof(self): tags = list(string_tagger(TAGS_NO_LINE_BREAK_AT_EOF)) self.assertEqual(3, len(tags)) self.assertEqual(DXFTag(10, (100, 200)), tags[1]) self.assertEqual(DXFTag(11, (1000, 2000)), tags[2])
def test_int_no_line_break_at_eof(): tags = list(internal_tag_compiler(TAGS_NO_LINE_BREAK_AT_EOF)) assert 3 == len(tags) assert DXFTag(10, (100, 200)) == tags[1] assert DXFTag(11, (1000, 2000)) == tags[2]
def test_2d_coords(self): tags = list(string_tagger(TAGS_2D_COORDS)) self.assertEqual(2, len(tags)) self.assertEqual(DXFTag(10, (100, 200)), tags[1])
def test_multiple_2d_coords(self): tags = list(string_tagger(TAGS_2D_COORDS2)) self.assertEqual(3, len(tags)) self.assertEqual(DXFTag(10, (100, 200)), tags[1]) self.assertEqual(DXFTag(11, (1000, 2000)), tags[2])
def test_string(self): tags = list(string_tagger(TAGS1)) self.assertEqual(9, len(tags)) self.assertEqual(DXFTag(999, 'comment'), tags[0], 'should not skip comments.')
def test_set_first(self, tags): tags.set_first(DXFTag(999, "NEWTAG")) assert "NEWTAG" == tags[-1].value
def test_update(self, tags): tags.update(DXFTag(2, "XHEADER")) assert "XHEADER" == tags[1].value
def test_int_2d_coords(): tags = list(internal_tag_compiler(TAGS_2D_COORDS)) assert 2 == len(tags) assert DXFTag(10, (100, 200)) == tags[1]
def dxftags(self) -> Tags: tags = [ DXFTag(1001, 'ACAD'), DXFTag(1000, 'MVIEW'), DXFTag(1002, '{', ), DXFTag(1070, 16), # extended data version, always 16 for R11/12 DXFTag(1010, self.view_target_point), DXFTag(1010, self.view_direction_vector), DXFTag(1040, self.view_twist_angle), DXFTag(1040, self.view_height), DXFTag(1040, self.view_center_point[0]), DXFTag(1040, self.view_center_point[1],), DXFTag(1040, self.perspective_lens_length), DXFTag(1040, self.front_clip_plane_z_value), DXFTag(1040, self.back_clip_plane_z_value), DXFTag(1070, self.view_mode), DXFTag(1070, self.circle_zoom), DXFTag(1070, self.fast_zoom), DXFTag(1070, self.ucs_icon), DXFTag(1070, self.snap), DXFTag(1070, self.grid), DXFTag(1070, self.snap_style), DXFTag(1070, self.snap_isopair), DXFTag(1040, self.snap_angle), DXFTag(1040, self.snap_base_point[0]), DXFTag(1040, self.snap_base_point[1]), DXFTag(1040, self.snap_spacing[0]), DXFTag(1040, self.snap_spacing[1]), DXFTag(1040, self.grid_spacing[0]), DXFTag(1040, self.grid_spacing[1]), DXFTag(1070, self.hidden_plot), DXFTag(1002, '{'), # start frozen layer list ] tags.extend(DXFTag(1003, layer_name) for layer_name in self.frozen_layers) tags.extend([ DXFTag(1002, '}'), # end of frozen layer list DXFTag(1002, '}'), # end of viewport data ]) return Tags(tags)
def test_int_multiple_2d_coords(): tags = list(internal_tag_compiler(TAGS_2D_COORDS2)) assert 3 == len(tags) assert DXFTag(10, (100, 200)) == tags[1] assert DXFTag(11, (1000, 2000)) == tags[2]
def test_update(self, tags): tags.update(DXFTag(2, 'XHEADER')) assert 'XHEADER' == tags[1].value
def test_init_one_tag(): xtags = ExtendedTags([DXFTag(0, "SECTION")]) assert xtags.noclass[0] == (0, "SECTION")
def test_update_error(self, tags): with pytest.raises(DXFValueError): tags.update(DXFTag(999, 'DOESNOTEXIST'))
def test_write_tag(): s, t = setup_stream() t.write_tag(DXFTag(0, 'SECTION')) result = s.getvalue() assert result == ' 0\nSECTION\n'
def test_set_first(self, tags): tags.set_first(DXFTag(999, 'NEWTAG')) assert 'NEWTAG' == tags[-1].value
def history2(self): history = EntityHistory() history.append(Tags([DXFTag(1, "first")])) history.append(Tags([DXFTag(2, "second")])) return history
def test_append_not_existing_reactors(self): self.tags.new_app_data(ACAD_REACTORS, [DXFTag(330, 'DEAD')]) reactors = self.tags.get_app_data_content(ACAD_REACTORS) self.assertEqual(1, len(reactors)) self.assertEqual(DXFTag(330, 'DEAD'), reactors[0])