Difference between revisions of "Render Part C Assignment"

From CSE425S Wiki
Jump to navigation Jump to search
Line 160: Line 160:
 
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.
 
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]]
+
Fall 2020 Note: <code>part_b_composite_transform_scene</code> was not tested in [[Render_Part_B_Assignment]]
  
 
Additionally, ensure that you are backwards compatible by checking the previous render studio tests.
 
Additionally, ensure that you are backwards compatible by checking the previous render studio tests.

Revision as of 05:37, 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.

Fall 2020 Note: part_b_composite_transform_scene was not tested in Render_Part_B_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