Giter Site home page Giter Site logo

diitpahomework1's Introduction

DII - TPA: Homework 1

First homework of the Advanced Programming Techniques course. Dealine 2021-04-27

For usage, read below.

Car Trailer

Create a car trailer basing on car's parameters you need to transport.

It's possible to export the generated drawing as .svg file.

With this tool you can obtain several devices, some of them in the following.

Car trailer for 2 cars-per-floor. 2 floors

Car trailer for 2 cars-per-floor. 1 floor

Car trailer for 1 cars-per-floor. 1 floor

Car trailer for 1 cars-per-floor. 2 floors

This would be structurally unstable. By this, the configuration is not allowed.

Measures aviable as well

Machines aviable as well

These are combination of multiple devices, with the implementation of a car's .svg file. A big thanks to @GiacomoCorradini and his awesome work.

USAGE

Constraints

There are some constraints you need to deal with:

  • Trailer's length must be smaller than canvas width
  • Trailer's height must be smaller than 5/4 canvas height
  • 2 floors one car configuration is not allowed to preserve structural stability
  • Car's length can't be smaller than 4/5 car's height (van configuration)
  • More than 2 cars per trailer are not allowed
  • More than 2 floors are not allowed

Library's commands and structs

struct OselinDevice{

    std::string svg;
    Parameters param;
    float abslength;
    float absx;
    float absy;
    float offset;
    Oselin_Floor downfloor;
    Oselin_Floor upfloor;
    Oselin_Wheel frontwheel;
    Oselin_Wheel rearwheel;
    Oselin_Joint rearjoint;
    Oselin_Joint frontjoint;
    Oselin_Axis rearaxis;
    Oselin_Axis frontaxis;
};

The struct above is used for representing a trailer. It has attributes, such as offset (for x coordinate), absolute x and y (position) or absolute lenght and substructures used for storing other data.

Initialization of a trailer

OselinDevice *trailer;

All the data referred to trailer's dimensions and parameters are stored in the OselinDevice struct. Probably not the most efficient way to manage memory, but it definitely does the job.

oselin_init(OselinDevice *trailer, float params[], bool avoidsvg = false);

This function returns 0 if every single parameter given by the user respects the constraints, 1 otherwise. The boolean avoidsvg, if set to true, allows to bypass the svg width/height constraint check. It can be used for machine manipulations. However by default is set to false.

oselin_trigonometry(OselinDevice *trailer, bool automaticoffset=true);

This void function does all the math that allows the creation of SVG figures.

oselin_to_svg(OselinDevice *trailer, bool with_header=true, bool with_measures=false);

This function fills the .svg attribute of the trailer with drawing infos, svg-coded.

oselin_parsing(OselinDevice *trailer, string importedsvg);

This functions parses an existing .svg file, imported as a string. It extrapolates all the parametes, feeding the OselinDevice struct.

oselin_set(OselinDevice *trailer, float newparam);

This function allows to change one of the trailer's parameters.

Trailer tool

Once compiled this tool can be easily exploited for trailer's svg manipulation. It supports both command line and graphical commands.

For command line usage:

./main <params>

For example

./main -h

-h | --help         allows you to read this awesome guide
-c | --create       create a trailer SVG                --create [SVG width] [SVG height] [Car length] [Car height] [Wheel radius] [Cars-per-trailer] [Floors]
-l | --load         load SVG from file                  --load [path]
-m | --machine      draw a train of trailers            
-i | --interface    use graphic menu (for lame people)

Invoking ./main -i you will enter in the graphical menu

Welcome to the SVG TRAILER CREATOR
----------------------------------
Here's what you can do:
[1] - load SVG drawing from file
[2] - create a new trailer
[3] - save SVG draving to file
[4] - change a parameter
[5] - create a machine
[6] - exit

Here's the functions load, create, save, change and machine can be called, which exploit the library's fuctions above illustrated to manipulate trailer structs and data.

diitpahomework1's People

Contributors

oselin avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.