Difference between revisions of "Render Part C Assignment"

From CSE425S Wiki
Jump to navigation Jump to search
Line 156: Line 156:
 
=Testing Your Solution=
 
=Testing Your Solution=
 
<youtube>utK0TewIRjc</youtube>
 
<youtube>utK0TewIRjc</youtube>
<!--
 
==Visual Comparison==
 
{{RubyToRun|part_c_test_snapshots_web_page_generator|render/part_c|test}}
 
  
 
==Unit Test==
 
==Unit Test==
{{RubyUnitTest|part_c_unit_test|render/part_c}}
+
Ensure that all of the tests in the <code>src/test/ruby/render/part_c</code> and <code>src/test/ruby/render/part_b_composite_transform_scene</code>directories are passing.
 +
 
 +
Note: <code>part_b_composite_transform_scene</code> was not tested in [[Render Part C Assignment]]
 +
 
 +
Additionally, ensure that you are backwards compatible by checking the previous render studio tests.
  
{{RubyUnitTest|part_c_move_unit_test|render/part_c}}
+
==Visual Comparison==
 +
===Bare Bones===
 +
{{RubyToRun|part_c_bare_bones_web_page_generator|render/part_c_bare_bones_image_diff|test}}
  
{{RubyUnitTest|part_c_bounds_unit_test|render/part_c}}
+
===Complete===
-->
+
{{RubyToRun|part_c_complete_web_page_generator|render/part_c_complete_image_diff|test}}

Revision as of 05:36, 8 December 2020

In this studio we will evolve our code from Render_Part_B_Assignment to add new methods and a new class.

Render part c class hierarchy.svg

Continue editing files in the render/assignment directory.

Code to Implement

Bounds

file: src/main/ruby/render/assignment/bounds.rb Ruby logo.svg
class: Bounds
superclass: Object
methods: initialize(min,max)
min()
min=(min)
max()
max=(max)

Note: min and max should be instances of Point2.

Note: You may wish to use Ruby's convenient Struct construct.

Transform

file: src/main/ruby/render/assignment/transform.rb Ruby logo.svg
class: Transform
superclass: Object
methods to evolve: Ø
methods to add: move(direction,amount)
calculate_bounds()
methods to remove: Ø

move

the move method will accept two parameters: direction and amount.

direction can be one of four symbols

:left
:right
:up
:down
left corresponds to translating along the negative x axis
right corresponds to translating along the positive x axis
down corresponds to translating along the negative y axis
up corresponds to translating along the positive y axis

any other value for direction should raise an ArgumentError.

calculate_bounds

invoke calculate_local_bounds and transform the returned bounds by x and y.

NOTE: calculate_local_bounds is abstract. it must be defined by the subclasses.

Rectangle

file: src/main/ruby/render/assignment/rectangle.rb Ruby logo.svg
class: Rectangle
superclass: ColorTransform
methods to evolve: Ø
methods to add: calculate_local_bounds
methods to remove: Ø

calculate_local_bounds

Returns an instance of Bounds specified by min and max instances of Point2.

NOTE: this method must be private.

Rectangle bounds.png

Ellipse

file: src/main/ruby/render/assignment/ellipse.rb Ruby logo.svg
class: Ellipse
superclass: ColorTransform
methods to evolve: Ø
methods to add: calculate_local_bounds
methods to remove: Ø

calculate_local_bounds

Returns an instance of Bounds specified by min and max instances of Point2.

NOTE: this method must be private.

Ellipse bounds.png

EquilateralTriangle

file: src/main/ruby/render/assignment/equilateral_triangle.rb Ruby logo.svg
class: EquilateralTriangle
superclass: ColorTransform
methods to evolve: Ø
methods to add: calculate_local_bounds
methods to remove: Ø

calculate_local_bounds

Returns an instance of Bounds specified by min and max instances of Point2.

NOTE: this method must be private.

Equilateral triangle bounds.png

BezierCurve

file: src/main/ruby/render/assignment/bezier_curve.rb Ruby logo.svg
class: BezierCurve
superclass: ColorTransform
methods to evolve: Ø
methods to add: calculate_local_bounds
methods to remove: Ø

calculate_local_bounds

Contemplate for a moment how you would build this method and then raise :not_yet_implemented and move on.

NOTE: this method must be private.

  def calculate_local_bounds
    raise :not_yet_implemented
  end

Text

file: src/main/ruby/render/assignment/text.rb Ruby logo.svg
class: Text
superclass: ColorTransform
methods to evolve: Ø
methods to add: calculate_local_bounds
methods to remove: Ø

calculate_local_bounds

Contemplate for a moment how you would build this method and then raise :not_yet_implemented and move on.

NOTE: this method must be private.

  def calculate_local_bounds
    raise :not_yet_implemented
  end

Chord

file: src/main/ruby/render/assignment/chord.rb Ruby logo.svg
class: Chord
superclass: ColorTransform
methods to evolve: Ø
methods to add: calculate_local_bounds
methods to remove: Ø

calculate_local_bounds

Contemplate for a moment how you would build this method and then raise :not_yet_implemented and move on.

NOTE: this method must be private.

  def calculate_local_bounds
    raise :not_yet_implemented
  end

Image

file: src/main/ruby/render/assignment/image.rb Ruby logo.svg
class: Image
superclass: Transform
methods to evolve: Ø
methods to add: calculate_local_bounds
methods to remove: Ø

calculate_local_bounds

Contemplate for a moment how you would build this method and then raise :not_yet_implemented and move on.

NOTE: this method must be private.

  def calculate_local_bounds
    raise :not_yet_implemented
  end

CompositeTransform

file: src/main/ruby/render/assignment/composite_transform.rb Ruby logo.svg
class: CompositeTransform
superclass: Transform
methods to evolve: Ø
methods to add: calculate_local_bounds
methods to remove: Ø

calculate_local_bounds

Returns an instance of Bounds specified by min and max instances of Point2.

NOTE: this method must be private.

Composite transform bounds.png

Scene

file: src/main/ruby/render/assignment/scene.rb Ruby logo.svg
class: Scene
superclass: Object
methods to evolve: calculate_bounds()
methods to add: Ø
methods to remove: Ø

calculate_bounds

NOTE: this method must be public.

Scene bounds.png

ConvexPolygon

file: src/main/ruby/render/assignment/convex_polygon.rb Ruby logo.svg
class: ConvexPolygon
superclass: ColorTransform
methods: initialize(points, x: 0, y: 0, color: nil)
render_transformed()
calculate_local_bounds()

initialize

Accept a required parameter points which is an array of Point2s.

Accept keyword parameters for x: 0, y: 0, and color: nil to the constructor and pass them to the superclass.

NOTE: Be sure to not override render. Implement the render_transformed method instead.

render_transformed

NOTE: this method must be private.

calculate_local_bounds

NOTE: this method must be private.

Convex polygon bounds.png

file to run: src/main/ruby/render/assignment/convex_polygon.rb Ruby logo.svg

Render convex polygon.png

Testing Your Solution

Unit Test

Ensure that all of the tests in the src/test/ruby/render/part_c and src/test/ruby/render/part_b_composite_transform_scenedirectories are passing.

Note: part_b_composite_transform_scene was not tested in Render Part C Assignment

Additionally, ensure that you are backwards compatible by checking the previous render studio tests.

Visual Comparison

Bare Bones

file to run: src/test/ruby/render/part_c_bare_bones_image_diff/part_c_bare_bones_web_page_generator.rb Ruby logo.svg

Complete

file to run: src/test/ruby/render/part_c_complete_image_diff/part_c_complete_web_page_generator.rb Ruby logo.svg