aurora-dxf 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |gem|
6
6
  gem.name = "aurora-dxf"
7
- gem.version = '0.0.3'
7
+ gem.version = '0.0.4'
8
8
  gem.authors = ["Brandon Fosdick", "Meseker Yohannes"]
9
9
  gem.email = ["meseker.yohannes@gmail.com"]
10
10
  gem.description = %q{Read and write DXF files using Ruby}
@@ -4,102 +4,115 @@ require 'units'
4
4
  require 'stringio'
5
5
 
6
6
  module DXF
7
- class Unparser
8
- attr_accessor :container
7
+ class Unparser
8
+ attr_accessor :container
9
9
 
10
- # Initialize with a Sketch
11
- # @param [String,Symbol] units The units to convert length values to (:inches or :millimeters)
12
- def initialize(units=:mm)
13
- @units = units
14
- end
10
+ # Initialize with a Sketch
11
+ # @param [String,Symbol] units The units to convert length values to (:inches or :millimeters)
12
+ def initialize(units=:mm)
13
+ @units = units
14
+ end
15
15
 
16
- def to_s
17
- io = StringIO.new
18
- unparse(io, container)
19
- io.string
20
- end
16
+ def to_s
17
+ io = StringIO.new
18
+ unparse(io, container)
19
+ io.string
20
+ end
21
21
 
22
- # @group Element Formatters
23
- # Convert a {Geometry::Line} into group codes
24
- def line(first, last, layer=0, transformation=nil)
25
- first, last = Geometry::Point[first], Geometry::Point[last]
26
- first, last = [first, last].map {|point| transformation.transform(point) } if transformation
22
+ # @group Element Formatters
23
+ # Convert a {Geometry::Line} into group codes
24
+ def line(first, last, layer=0, transformation=nil)
25
+ first, last = Geometry::Point[first], Geometry::Point[last]
26
+ first, last = [first, last].map {|point| transformation.transform(point) } if transformation
27
27
 
28
- [ 0, 'LINE',
29
- 8, layer,
30
- 10, format_value(first.x),
31
- 20, format_value(first.y),
32
- 11, format_value(last.x),
33
- 21, format_value(last.y)]
34
- end
35
- # @endgroup
28
+ [ 0, 'LINE',
29
+ 8, layer,
30
+ 10, format_value(first.x),
31
+ 20, format_value(first.y),
32
+ 11, format_value(last.x),
33
+ 21, format_value(last.y)]
34
+ end
35
+ # @endgroup
36
+
37
+ def text(position, content, layer=0, transformation=nil)
38
+ position = transformation.transform(position) if transformation
39
+
40
+ [0, 'TEXT',
41
+ 8, layer,
42
+ 10, format_value(position.x),
43
+ 20, format_value(position.y),
44
+ 1, content,
45
+ 7, 'NewTextStyle_4']
46
+ end
47
+
48
+ # @group Property Converters
49
+ # Convert the given value to the correct units and return it as a formatted string
50
+ # @return [String]
51
+ def format_value(value)
52
+ if value.is_a? Units::Numeric
53
+ "%g" % value.send("to_#{@units}".to_sym)
54
+ else
55
+ "%g" % value
56
+ end
57
+ end
36
58
 
37
- # @group Property Converters
38
- # Convert the given value to the correct units and return it as a formatted string
39
- # @return [String]
40
- def format_value(value)
41
- if value.is_a? Units::Numeric
42
- "%g" % value.send("to_#{@units}".to_sym)
43
- else
44
- "%g" % value
45
- end
46
- end
59
+ # Emit the group codes for the center property of an element
60
+ # @param [Point] point The center point to format
61
+ def center(point, transformation)
62
+ point = transformation.transform(point) if transformation
63
+ [10, format_value(point.x), 20, format_value(point.y)]
64
+ end
47
65
 
48
- # Emit the group codes for the center property of an element
49
- # @param [Point] point The center point to format
50
- def center(point, transformation)
51
- point = transformation.transform(point) if transformation
52
- [10, format_value(point.x), 20, format_value(point.y)]
53
- end
66
+ # Emit the group codes for the radius property of an element
67
+ def radius(element, transformation=nil)
68
+ [40, format_value(transformation ? transformation.transform(element.radius) : element.radius)]
69
+ end
54
70
 
55
- # Emit the group codes for the radius property of an element
56
- def radius(element, transformation=nil)
57
- [40, format_value(transformation ? transformation.transform(element.radius) : element.radius)]
58
- end
71
+ def section_end
72
+ [0, 'ENDSEC']
73
+ end
59
74
 
60
- def section_end
61
- [0, 'ENDSEC']
62
- end
75
+ def section_start(name)
76
+ [0, 'SECTION', 2, name]
77
+ end
78
+ # @endgroup
63
79
 
64
- def section_start(name)
65
- [0, 'SECTION', 2, name]
66
- end
67
- # @endgroup
80
+ # Convert an element to an Array
81
+ # @param [Transformation] transformation The transformation to apply to each geometry element
82
+ # @return [Array]
83
+ def to_array(element, transformation=nil)
84
+ layer = 0;
85
+ case element
86
+ when Geometry::Arc
87
+ [ 0, 'ARC', center(element.center, transformation), radius(element),
88
+ 50, format_value(element.start_angle),
89
+ 51, format_value(element.end_angle)]
90
+ when Geometry::Circle
91
+ [0, 'CIRCLE', 8, layer, center(element.center, transformation), radius(element)]
92
+ when Geometry::Text
93
+ text(element.position, element.content, layer)
94
+ when Geometry::Edge, Geometry::Line
95
+ line(element.first, element.last, layer, transformation)
96
+ when Geometry::Polyline
97
+ element.edges.map {|edge| line(edge.first, edge.last, layer, transformation) }
98
+ when Geometry::Rectangle
99
+ element.edges.map {|edge| line(edge.first, edge.last, layer, transformation) }
100
+ when Geometry::Square
101
+ points = element.points
102
+ points.each_cons(2).map {|p1,p2| line(p1,p2, layer, transformation) } + line(points.last, points.first, layer, transformation)
103
+ when Sketch
104
+ transformation = transformation ? (transformation + element.transformation) : element.transformation
105
+ element.geometry.map {|e| to_array(e, transformation)}
106
+ end
107
+ end
68
108
 
69
- # Convert an element to an Array
70
- # @param [Transformation] transformation The transformation to apply to each geometry element
71
- # @return [Array]
72
- def to_array(element, transformation=nil)
73
- layer = 0;
74
- case element
75
- when Geometry::Arc
76
- [ 0, 'ARC', center(element.center, transformation), radius(element),
77
- 50, format_value(element.start_angle),
78
- 51, format_value(element.end_angle)]
79
- when Geometry::Circle
80
- [0, 'CIRCLE', 8, layer, center(element.center, transformation), radius(element)]
81
- when Geometry::Edge, Geometry::Line
82
- line(element.first, element.last, layer, transformation)
83
- when Geometry::Polyline
84
- element.edges.map {|edge| line(edge.first, edge.last, layer, transformation) }
85
- when Geometry::Rectangle
86
- element.edges.map {|edge| line(edge.first, edge.last, layer, transformation) }
87
- when Geometry::Square
88
- points = element.points
89
- points.each_cons(2).map {|p1,p2| line(p1,p2, layer, transformation) } + line(points.last, points.first, layer, transformation)
90
- when Sketch
91
- transformation = transformation ? (transformation + element.transformation) : element.transformation
92
- element.geometry.map {|e| to_array(e, transformation)}
93
- end
94
- end
95
-
96
- # Convert a {Sketch} to a DXF file and write it to the given output
97
- # @param [IO] output A writable IO-like object
98
- # @param [Sketch] sketch The {Sketch} to unparse
99
- def unparse(output, sketch)
100
- output << (section_start('HEADER') + section_end +
101
- section_start('ENTITIES') + to_array(sketch) + section_end +
102
- [0, 'EOF']).join("\n")
103
- end
109
+ # Convert a {Sketch} to a DXF file and write it to the given output
110
+ # @param [IO] output A writable IO-like object
111
+ # @param [Sketch] sketch The {Sketch} to unparse
112
+ def unparse(output, sketch)
113
+ output << (section_start('HEADER') + section_end +
114
+ section_start('ENTITIES') + to_array(sketch) + section_end +
115
+ [0, 'EOF']).join("\n")
116
+ end
104
117
  end
105
118
  end
@@ -1,5 +1,5 @@
1
1
  require 'minitest/autorun'
2
- require 'dxf'
2
+ require_relative '../../lib/dxf'
3
3
 
4
4
  describe DXF::Unparser do
5
5
  subject { DXF::Unparser.new }
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aurora-dxf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Brandon Fosdick
@@ -9,39 +10,44 @@ authors:
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2014-03-10 00:00:00.000000000 Z
13
+ date: 2014-03-11 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: aurora-geometry
16
17
  requirement: !ruby/object:Gem::Requirement
18
+ none: false
17
19
  requirements:
18
- - - '>='
20
+ - - ! '>='
19
21
  - !ruby/object:Gem::Version
20
22
  version: '0'
21
23
  type: :runtime
22
24
  prerelease: false
23
25
  version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
24
27
  requirements:
25
- - - '>='
28
+ - - ! '>='
26
29
  - !ruby/object:Gem::Version
27
30
  version: '0'
28
31
  - !ruby/object:Gem::Dependency
29
32
  name: aurora-sketch
30
33
  requirement: !ruby/object:Gem::Requirement
34
+ none: false
31
35
  requirements:
32
- - - '>='
36
+ - - ! '>='
33
37
  - !ruby/object:Gem::Version
34
38
  version: '0'
35
39
  type: :runtime
36
40
  prerelease: false
37
41
  version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
38
43
  requirements:
39
- - - '>='
44
+ - - ! '>='
40
45
  - !ruby/object:Gem::Version
41
46
  version: '0'
42
47
  - !ruby/object:Gem::Dependency
43
48
  name: units
44
49
  requirement: !ruby/object:Gem::Requirement
50
+ none: false
45
51
  requirements:
46
52
  - - ~>
47
53
  - !ruby/object:Gem::Version
@@ -49,6 +55,7 @@ dependencies:
49
55
  type: :runtime
50
56
  prerelease: false
51
57
  version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
52
59
  requirements:
53
60
  - - ~>
54
61
  - !ruby/object:Gem::Version
@@ -78,26 +85,27 @@ files:
78
85
  - test/fixtures/square_millimeters.dxf
79
86
  homepage: http://github.com/meseker/dxf-ruby
80
87
  licenses: []
81
- metadata: {}
82
88
  post_install_message:
83
89
  rdoc_options: []
84
90
  require_paths:
85
91
  - lib
86
92
  required_ruby_version: !ruby/object:Gem::Requirement
93
+ none: false
87
94
  requirements:
88
- - - '>='
95
+ - - ! '>='
89
96
  - !ruby/object:Gem::Version
90
97
  version: '0'
91
98
  required_rubygems_version: !ruby/object:Gem::Requirement
99
+ none: false
92
100
  requirements:
93
- - - '>='
101
+ - - ! '>='
94
102
  - !ruby/object:Gem::Version
95
103
  version: '0'
96
104
  requirements: []
97
105
  rubyforge_project:
98
- rubygems_version: 2.0.3
106
+ rubygems_version: 1.8.23
99
107
  signing_key:
100
- specification_version: 4
108
+ specification_version: 3
101
109
  summary: Tools for working with the popular DXF file format
102
110
  test_files:
103
111
  - test/dxf/parser.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: a03bc384bb55b21b7c1bd910b73985797191fa05
4
- data.tar.gz: bcebe25e0f79bd3cafc2fd0eed0486d4dc77c113
5
- SHA512:
6
- metadata.gz: d08d53dc672d2e65f8e1e767cb60dc880255548065255b2e1de0ce2e8ffa1c3a2c8b8e58be855df7ab8a393ae5ab232920d4dd937ccec4cb72fcf0d81018816e
7
- data.tar.gz: b3ff2a61715effb1505ca73ce49c39782a54139167e85752f585ca30e0b51d8772b868fc52e736973a1601885f0f772e23bac532f79052cf6cffdc7a2d9f18d3