Main Content

Generate Code for MATLAB Value Classes

This example shows how to generate code for a MATLAB® value class and then view the generated code in the code generation report.

  1. In a writable folder, create a MATLAB value class, Shape. Save the code as Shape.m.

    classdef Shape 
    % SHAPE Create a shape at coordinates 
    % centerX and centerY
        properties
            centerX;
            centerY;
        end
        properties (Dependent = true)
            area;
        end
        methods 
            function out = get.area(obj)
                out =  obj.getarea();
            end
            function obj = Shape(centerX,centerY)
                obj.centerX = centerX;
                obj.centerY = centerY;
            end
        end
        methods(Abstract = true)
            getarea(obj);
        end
        methods(Static)
            function d = distanceBetweenShapes(shape1,shape2)
                xDist = abs(shape1.centerX - shape2.centerX);
                yDist = abs(shape1.centerY - shape2.centerY);
                d = sqrt(xDist^2 + yDist^2);
            end
        end
    end  
  2. In the same folder, create a class, Square, that is a subclass of Shape. Save the code as Square.m.

    classdef Square < Shape 
    % Create a Square at coordinates center X and center Y 
    % with sides of length of side
        properties
            side;
        end
        methods
            function obj = Square(side,centerX,centerY)
                obj@Shape(centerX,centerY);
                obj.side = side;
            end
            function Area = getarea(obj)
                Area = obj.side^2;
            end
        end
    end
  3. In the same folder, create a class, Rhombus, that is a subclass of Shape. Save the code as Rhombus.m.

    classdef Rhombus < Shape
        properties
            diag1;
            diag2;
        end
        methods
            function obj = Rhombus(diag1,diag2,centerX,centerY)
                obj@Shape(centerX,centerY);
                obj.diag1 = diag1;
                obj.diag2 = diag2;
            end
            function Area = getarea(obj)
                Area = 0.5*obj.diag1*obj.diag2;
            end
        end
    end
  4. Write a function that uses this class.

    function [TotalArea, Distance] =   use_shape
    %#codegen
    s = Square(2,1,2);
    r = Rhombus(3,4,7,10);
    TotalArea  = s.area + r.area;
    Distance = Shape.distanceBetweenShapes(s,r);  
  5. Generate a static library for use_shape and generate a code generation report.

    codegen -config:lib -report use_shape

    codegen generates a C static library with the default name, use_shape, and supporting files in the default folder, codegen/lib/use_shape.

  6. Click the View report link.

  7. To see the Rhombus class definition, on the MATLAB Source pane, under Rhombus.m, click Rhombus. The Rhombus class constructor is highlighted.

  8. Click the Variables tab. You see that the variable obj is an object of the Rhombus class. To see its properties, expand obj.

    This image shows the code generation report viewer for the example discussed previously. It shows the code for the Rhombus class, and the properties for the class constructor.

  9. In the MATLAB Source pane, click Call Tree.

    The Call Tree view shows that use_shape calls the Rhombus constructor and that the Rhombus constructor calls the Shape constructor.

    This image shows the MATLAB Source pane after you click Call Tree.

  10. In the code pane, in the Rhombus class constructor, move your pointer to this line:

    obj@Shape(centerX,centerY)
    The Rhombus class constructor calls the Shape method of the base Shape class. To view the Shape class definition, in obj@Shape, double-click Shape.

    This image shows the code for the Shape class definition in the report viewer. This view opens after you follow step 10. To view the Shape class definition, in obj@Shape, double-click Shape.