Merge pull request #4892 from danmarshall/master

new declarations for version 0.2.1
This commit is contained in:
Masahiro Wakame
2015-07-13 23:59:48 +09:00
2 changed files with 139 additions and 264 deletions
+20 -24
View File
@@ -12,12 +12,10 @@ function test() {
function testRoot() {
makerjs.extendObject({abc:123}, {xyz:789});
makerjs.findById<MakerJs.IPath>(model.paths, 'a');
makerjs.isModel({});
makerjs.isPath({});
makerjs.isPoint([]);
makerjs.pathType.Circle;
makerjs.removeById<MakerJs.IModel>(models, 'x');
makerjs.round(44.44444, .01);
makerjs.unitType.Millimeter;
}
@@ -54,29 +52,31 @@ function test() {
}
function testModel(){
makerjs.model.convertUnits(model, makerjs.unitType.Centimeter);
makerjs.model.mirror(model, false, true);
makerjs.model.move(makerjs.model.originate(model, [9,9]), [0,0]);
makerjs.model.originate(model);
makerjs.model.rotate(makerjs.model.scale(model, 6), 45, [0,0]);
}
function testModels(): MakerJs.IModel[] {
return [
new makerjs.models.BoltCircle('b', 7, 7, 7, 7),
new makerjs.models.BoltRectangle('c', 2, 2, 2),
new makerjs.models.ConnectTheDots('c', true, [ [0,0], [1,1] ]),
new makerjs.models.GoldenRectangle('g', 7),
new makerjs.models.Oval('g', 7, 7),
new makerjs.models.OvalArc('o', 6, 4, 2, 12),
new makerjs.models.Polygon('p', 7, 5),
new makerjs.models.Rectangle('r', 8, 9),
new makerjs.models.Ring('r', 7, 7),
new makerjs.models.RoundRectangle('r', 2, 2, 0),
new makerjs.models.SCurve('s', 5, .9),
new makerjs.models.Square('s', 8)
new makerjs.models.BoltCircle(7, 7, 7, 7),
new makerjs.models.BoltRectangle(2, 2, 2),
new makerjs.models.ConnectTheDots(true, [ [0,0], [1,1] ]),
new makerjs.models.Oval(7, 7),
new makerjs.models.OvalArc(6, 4, 2, 12),
new makerjs.models.Polygon(7, 5),
new makerjs.models.Rectangle(8, 9),
new makerjs.models.Ring(7, 7),
new makerjs.models.RoundRectangle(2, 2, 0),
new makerjs.models.SCurve(5, .9),
new makerjs.models.Square(8)
];
}
function testPath() {
makerjs.path.intersection(paths.circle, paths.arc).intersectionPoints;
makerjs.path.mirror(paths.arc, true, true);
makerjs.path.moveRelative(paths.circle, [0,0]);
makerjs.path.rotate(paths.line, 5, [0,0]);
@@ -85,9 +85,9 @@ function test() {
function testPaths() {
return {
arc: new makerjs.paths.Arc('a', [0,0], 7, 0, 180),
circle: new MakerJs.paths.Circle('c', [0,0], 5),
line: new makerjs.paths.Line('l', [0,0], [1,1])
arc: new makerjs.paths.Arc([0,0], 7, 0, 180),
circle: new MakerJs.paths.Circle([0,0], 5),
line: new makerjs.paths.Line([0,0], [1,1])
};
}
@@ -104,13 +104,9 @@ function test() {
makerjs.point.zero();
}
function testTools() {
makerjs.tools.breakPath(paths.line, .7)[0].newPath.cssStyle;
makerjs.tools.bridgeGaps([p1, p2], [p1, p2]);
makerjs.tools.gapPath(model, 'a', 7, .7);
makerjs.tools.pathIntersection(paths.circle, paths.arc).intersectionPoints;
makerjs.tools.solveTriangleASA(4, 4, 4);
makerjs.tools.solveTriangleSSS(9, 9, 9);
function testSolvers() {
makerjs.solvers.solveTriangleASA(4, 4, 4);
makerjs.solvers.solveTriangleSSS(9, 9, 9);
}
function testUnits() {
+119 -240
View File
@@ -50,54 +50,6 @@ declare module MakerJs {
* @returns The original object after merging.
*/
function extendObject(target: Object, other: Object): Object;
/**
* Things that may have an id.
* @private
*/
interface IHaveId {
id: string;
}
/**
* An item found in an array.
* @private
*/
interface IFound<T> {
/**
* Position of the item within the array.
*/
index: number;
/**
* The found item.
*/
item: T;
}
/**
* Search within an array to find an item by its id property.
*
* Examples: find a path with id of 'abc'
* ```
* var found: IFound<IPath> = findById<IPath>(someModel.paths, 'abc'); //typescript
* var found = findById(someModel.paths, 'abc'); //javascript
* ```
*
* @param arr Array to search.
* @param id Id of the item to find.
* @returns object with item and its position.
*/
function findById<T extends IHaveId>(arr: T[], id: string): IFound<T>;
/**
* Search within an array to find an item by its id property, then remove it from the array.
*
* Examples: remove a model with id of 'xyz'
* ```
* removeById<IModel>(someModel.models, 'xyz'); //typescript
* removeById(someModel.models, 'xyz'); //javascript
* ```
*
* @param arr Array to search.
* @param id Id of the item to find and remove.
*/
function removeById<T extends IHaveId>(arr: T[], id: string): void;
/**
* An x-y point in a two-dimensional space.
* Implemented as an array with 2 elements. The first element is x, the second element is y.
@@ -133,7 +85,7 @@ declare module MakerJs {
/**
* A line, curved line or other simple two dimensional shape.
*/
interface IPath extends IHaveId {
interface IPath {
/**
* The type of the path, e.g. "line", "circle", or "arc". These strings are enumerated in pathType.
*/
@@ -158,8 +110,8 @@ declare module MakerJs {
*
* Examples:
* ```
* var line: IPathLine = { type: 'line', id: 'myline', origin: [0, 0], end: [1, 1] }; //typescript
* var line = { type: 'line', id: 'myline', origin: [0, 0], end: [1, 1] }; //javascript
* var line: IPathLine = { type: 'line', origin: [0, 0], end: [1, 1] }; //typescript
* var line = { type: 'line', origin: [0, 0], end: [1, 1] }; //javascript
* ```
*/
interface IPathLine extends IPath {
@@ -173,8 +125,8 @@ declare module MakerJs {
*
* Examples:
* ```
* var circle: IPathCircle = { type: 'circle', id: 'mycircle', origin: [0, 0], radius: 7 }; //typescript
* var circle = { type: 'circle', id: 'mycircle', origin: [0, 0], radius: 7 }; //javascript
* var circle: IPathCircle = { type: 'circle', origin: [0, 0], radius: 7 }; //typescript
* var circle = { type: 'circle', origin: [0, 0], radius: 7 }; //javascript
* ```
*/
interface IPathCircle extends IPath {
@@ -188,8 +140,8 @@ declare module MakerJs {
*
* Examples:
* ```
* var arc: IPathArc = { type: 'arc', id: 'myarc', origin: [0, 0], radius: 7, startAngle: 0, endAngle: 45 }; //typescript
* var arc = { type: 'arc', id: 'myarc', origin: [0, 0], radius: 7, startAngle: 0, endAngle: 45 }; //javascript
* var arc: IPathArc = { type: 'arc', origin: [0, 0], radius: 7, startAngle: 0, endAngle: 45 }; //typescript
* var arc = { type: 'arc', origin: [0, 0], radius: 7, startAngle: 0, endAngle: 45 }; //javascript
* ```
*/
interface IPathArc extends IPathCircle {
@@ -220,15 +172,15 @@ declare module MakerJs {
/**
* Key is the type of a path, value is a function which accepts a path object a point object as its parameters.
*/
[type: string]: (pathValue: IPath, origin: IPoint) => void;
[type: string]: (id: string, pathValue: IPath, origin: IPoint) => void;
}
/**
* String-based enumeration of all paths types.
*
* Examples: use pathType instead of string literal when creating a circle.
* ```
* var circle: IPathCircle = { type: pathType.Circle, id: 'mycircle', origin: [0, 0], radius: 7 }; //typescript
* var circle = { type: pathType.Circle, id: 'mycircle', origin: [0, 0], radius: 7 }; //javascript
* var circle: IPathCircle = { type: pathType.Circle, origin: [0, 0], radius: 7 }; //typescript
* var circle = { type: pathType.Circle, origin: [0, 0], radius: 7 }; //javascript
* ```
*/
var pathType: {
@@ -236,19 +188,47 @@ declare module MakerJs {
Circle: string;
Arc: string;
};
/**
* An intersection of two paths.
*/
interface IPathIntersection {
/**
* Array of points where the two paths intersected. The length of the array may be either 1 or 2 points.
*/
intersectionPoints: IPoint[];
/**
* This Array property will only be defined if the first parameter passed to pathIntersection is either an Arc or a Circle.
* It contains the angles of intersection relative to the first path parameter.
* The length of the array may be either 1 or 2.
*/
path1Angles?: number[];
/**
* This Array property will only be defined if the second parameter passed to pathIntersection is either an Arc or a Circle.
* It contains the angles of intersection relative to the second path parameter.
* The length of the array may be either 1 or 2.
*/
path2Angles?: number[];
}
interface IPathMap {
[id: string]: IPath;
}
interface IModelMap {
[id: string]: IModel;
}
/**
* A model is a composite object which may contain an array of paths, or an array of models recursively.
*
* Example:
* ```
* var m = { id: 'mymodel',
* paths: [
* { type: 'line', id: 'l1', origin: [0, 0], end: [1, 1] },
* { type: 'line', id: 'l2', origin: [0, 0], end: [-1, -1] }
* ] };
* var m = {
* paths: {
* "line1": { type: 'line', origin: [0, 0], end: [1, 1] },
* "line2": { type: 'line', origin: [0, 0], end: [-1, -1] }
* }
* };
* ```
*/
interface IModel extends IHaveId {
interface IModel {
/**
* Optional origin location of this model.
*/
@@ -260,11 +240,11 @@ declare module MakerJs {
/**
* Optional array of path objects in this model.
*/
paths?: IPath[];
paths?: IPathMap;
/**
* Optional array of models within this model.
*/
models?: IModel[];
models?: IModelMap;
/**
* Optional unit system of this model. See UnitType for possible values.
*/
@@ -279,9 +259,6 @@ declare module MakerJs {
*/
function isModel(item: any): boolean;
}
/**
* Module for angle functions.
*/
declare module MakerJs.angle {
/**
* Ensures an angle is not greater than 360
@@ -329,9 +306,6 @@ declare module MakerJs.angle {
*/
function mirror(angleInDegrees: number, mirrorX: boolean, mirrorY: boolean): number;
}
/**
* Module for point functions.
*/
declare module MakerJs.point {
/**
* Add two points together and return the result as a new point object.
@@ -414,9 +388,6 @@ declare module MakerJs.point {
*/
function zero(): IPoint;
}
/**
* Module for path functions.
*/
declare module MakerJs.path {
/**
* Create a clone of a path, mirrored on either or both x and y axes.
@@ -454,9 +425,6 @@ declare module MakerJs.path {
*/
function scale(pathToScale: IPath, scaleValue: number): IPath;
}
/**
* Module for IPath creation shortcuts.
*/
declare module MakerJs.paths {
/**
* Class for arc path.
@@ -468,13 +436,12 @@ declare module MakerJs.paths {
* @param endAngle The end angle of the arc.
*/
class Arc implements IPathArc {
id: string;
origin: IPoint;
radius: number;
startAngle: number;
endAngle: number;
type: string;
constructor(id: string, origin: IPoint, radius: number, startAngle: number, endAngle: number);
constructor(origin: IPoint, radius: number, startAngle: number, endAngle: number);
}
/**
* Class for circle path.
@@ -484,11 +451,10 @@ declare module MakerJs.paths {
* @param radius The radius of the circle.
*/
class Circle implements IPathCircle {
id: string;
origin: IPoint;
radius: number;
type: string;
constructor(id: string, origin: IPoint, radius: number);
constructor(origin: IPoint, radius: number);
}
/**
* Class for line path.
@@ -498,16 +464,12 @@ declare module MakerJs.paths {
* @param end The end point of the line.
*/
class Line implements IPathLine {
id: string;
origin: IPoint;
end: IPoint;
type: string;
constructor(id: string, origin: IPoint, end: IPoint);
constructor(origin: IPoint, end: IPoint);
}
}
/**
* Module for model functions.
*/
declare module MakerJs.model {
/**
* Moves all of a model's children (models and paths, recursively) in reference to a single common origin. Useful when points between children need to connect to each other.
@@ -551,10 +513,15 @@ declare module MakerJs.model {
* @returns The original model (for chaining).
*/
function scale(modelToScale: IModel, scaleValue: number, scaleOrigin?: boolean): IModel;
/**
* Convert a model to match a different unit system.
*
* @param modeltoConvert The model to convert.
* @param destUnitType The unit system.
* @returns The scaled model (for chaining).
*/
function convertUnits(modeltoConvert: IModel, destUnitType: string): IModel;
}
/**
* Module for unit conversion functions.
*/
declare module MakerJs.units {
/**
* Get a conversion ratio between a source unit and a destination unit.
@@ -565,9 +532,6 @@ declare module MakerJs.units {
*/
function conversionScale(srcUnitType: string, destUnitType: string): number;
}
/**
* Module for measure functions.
*/
declare module MakerJs.measure {
/**
* Total angle of an arc between its start and end angles.
@@ -606,9 +570,6 @@ declare module MakerJs.measure {
*/
function modelExtents(modelToMeasure: IModel): IMeasure;
}
/**
* Module for exporter functions.
*/
declare module MakerJs.exporter {
/**
* @private
@@ -640,28 +601,28 @@ declare module MakerJs.exporter {
* @param fixPoint Optional function to modify a point prior to export. Function parameter is a point; function must return a point.
* @param fixPath Optional function to modify a path prior to output. Function parameters are path and offset point; function must return a path.
*/
constructor(map: IPathOriginFunctionMap, fixPoint?: (pointToFix: IPoint) => IPoint, fixPath?: (pathToFix: IPath, origin: IPoint) => IPath, beginModel?: (modelContext: IModel) => void, endModel?: (modelContext: IModel) => void);
constructor(map: IPathOriginFunctionMap, fixPoint?: (pointToFix: IPoint) => IPoint, fixPath?: (pathToFix: IPath, origin: IPoint) => IPath, beginModel?: (id: string, modelContext: IModel) => void, endModel?: (modelContext: IModel) => void);
/**
* Export a path.
*
* @param pathToExport The path to export.
* @param offset The offset position of the path.
*/
exportPath(pathToExport: IPath, offset: IPoint): void;
exportPath(id: string, pathToExport: IPath, offset: IPoint): void;
/**
* Export a model.
*
* @param modelToExport The model to export.
* @param offset The offset position of the model.
*/
exportModel(modelToExport: IModel, offset: IPoint): void;
exportModel(modelId: string, modelToExport: IModel, offset: IPoint): void;
/**
* Export an object.
*
* @param item The object to export. May be a path, an array of paths, a model, or an array of models.
* @param offset The offset position of the object.
*/
exportItem(itemToExport: any, origin: IPoint): void;
exportItem(itemId: string, itemToExport: any, origin: IPoint): void;
}
}
declare module MakerJs.exporter {
@@ -674,9 +635,36 @@ declare module MakerJs.exporter {
interface IDXFRenderOptions extends IExportOptions {
}
}
/**
* Module for kit functions.
*/
declare module MakerJs.solvers {
/**
* Solves for the angle of a triangle when you know lengths of 3 sides.
*
* @param length1 Length of side of triangle, opposite of the angle you are trying to find.
* @param length2 Length of any other side of the triangle.
* @param length3 Length of the remaining side of the triangle.
* @returns Angle opposite of the side represented by the first parameter.
*/
function solveTriangleSSS(length1: number, length2: number, length3: number): number;
/**
* Solves for the length of a side of a triangle when you know length of one side and 2 angles.
*
* @param oppositeAngleInDegrees Angle which is opposite of the side you are trying to find.
* @param lengthOfSideBetweenAngles Length of one side of the triangle which is between the provided angles.
* @param otherAngleInDegrees An other angle of the triangle.
* @returns Length of the side of the triangle which is opposite of the first angle parameter.
*/
function solveTriangleASA(oppositeAngleInDegrees: number, lengthOfSideBetweenAngles: number, otherAngleInDegrees: number): number;
}
declare module MakerJs.path {
/**
* Find the point(s) where 2 paths intersect.
*
* @param path1 First path to find intersection.
* @param path2 Second path to find intersection.
* @result IPathIntersection object, with points(s) of intersection (and angles, when a path is an arc or circle); or null if the paths did not intersect.
*/
function intersection(path1: IPath, path2: IPath): IPathIntersection;
}
declare module MakerJs.kit {
/**
* Describes a parameter and its limits.
@@ -793,11 +781,6 @@ declare module MakerJs.exporter {
}
}
declare module MakerJs.exporter {
/**
* The default stroke width in millimeters.
* @private
*/
var svgDefaultStrokeWidth: number;
function toSVG(modelToExport: IModel, options?: ISVGRenderOptions): string;
function toSVG(pathsToExport: IPath[], options?: ISVGRenderOptions): string;
function toSVG(pathToExport: IPath, options?: ISVGRenderOptions): string;
@@ -806,9 +789,13 @@ declare module MakerJs.exporter {
*/
interface ISVGRenderOptions extends IExportOptions {
/**
* SVG stroke width of paths. This is in the same unit system as the units property.
* Optional attributes to add to the root svg tag.
*/
strokeWidth?: number;
svgAttrs?: IXmlTagAttrs;
/**
* SVG stroke width of paths. This may have a unit type suffix, if not, the value will be in the same unit system as the units property.
*/
strokeWidth?: string;
/**
* SVG color of the rendered paths.
*/
@@ -835,174 +822,66 @@ declare module MakerJs.exporter {
viewBox: boolean;
}
}
/**
* Module for primitive model classes.
*/
declare module MakerJs.models {
class BoltCircle implements IModel {
id: string;
paths: IPath[];
constructor(id: string, boltRadius: number, holeRadius: number, boltCount: number, firstBoltAngleInDegrees?: number);
paths: IPathMap;
constructor(boltRadius: number, holeRadius: number, boltCount: number, firstBoltAngleInDegrees?: number);
}
}
declare module MakerJs.models {
class BoltRectangle implements IModel {
id: string;
paths: IPath[];
constructor(id: string, width: number, height: number, holeRadius: number);
paths: IPathMap;
constructor(width: number, height: number, holeRadius: number);
}
}
declare module MakerJs.models {
class ConnectTheDots implements IModel {
id: string;
paths: IPath[];
constructor(id: string, isClosed: boolean, points: IPoint[]);
}
}
declare module MakerJs.models {
class Rectangle extends ConnectTheDots {
id: string;
constructor(id: string, width: number, height: number);
}
}
declare module MakerJs.models {
class GoldenRectangle extends Rectangle {
id: string;
constructor(id: string, width: number);
static GoldenRatio: number;
paths: IPathMap;
constructor(isClosed: boolean, points: IPoint[]);
}
}
declare module MakerJs.models {
class RoundRectangle implements IModel {
id: string;
paths: IPath[];
constructor(id: string, width: number, height: number, radius: number);
paths: IPathMap;
constructor(width: number, height: number, radius: number);
}
}
declare module MakerJs.models {
class Oval extends RoundRectangle {
id: string;
constructor(id: string, width: number, height: number);
constructor(width: number, height: number);
}
}
declare module MakerJs.models {
class OvalArc implements IModel {
id: string;
paths: IPath[];
constructor(id: string, startAngle: number, endAngle: number, sweepRadius: number, slotRadius: number);
paths: IPathMap;
constructor(startAngle: number, endAngle: number, sweepRadius: number, slotRadius: number);
}
}
declare module MakerJs.models {
class Polygon extends ConnectTheDots {
id: string;
constructor(id: string, numberOfSides: number, radius: number, firstCornerAngleInDegrees?: number);
constructor(numberOfSides: number, radius: number, firstCornerAngleInDegrees?: number);
static getPoints(numberOfSides: number, radius: number, firstCornerAngleInDegrees?: number): IPoint[];
}
}
declare module MakerJs.models {
class Rectangle extends ConnectTheDots {
constructor(width: number, height: number);
}
}
declare module MakerJs.models {
class Ring implements IModel {
id: string;
paths: IPath[];
constructor(id: string, outerRadius: number, innerRadius: number);
paths: IPathMap;
constructor(outerRadius: number, innerRadius: number);
}
}
declare module MakerJs.models {
class SCurve implements IModel {
id: string;
paths: IPath[];
constructor(id: string, width: number, height: number);
paths: IPathMap;
constructor(width: number, height: number);
}
}
declare module MakerJs.models {
class Square extends Rectangle {
id: string;
constructor(id: string, side: number);
constructor(side: number);
}
}
/**
* Module for various functions.
*/
declare module MakerJs.tools {
/**
* A path which has been broken.
*/
interface IBrokenPath {
/**
* The new path after breaking the source path.
*/
newPath: IPath;
/**
* The point where the break ocurred.
*/
newPoint: IPoint;
}
function breakPath(path: IPath, breakAt?: number): IBrokenPath[];
/**
* Break a path and create a gap within it. Useful when connecting models together.
*
* @param modelToGap Model which will have a gap in one of its paths.
* @param pathId String id of the path in which to create a gap.
* @param gapLength Number length of the gap.
* @breakAt Number between 0 and 1 (default .5) where the gap will be centered along the path.
*/
function gapPath(modelToGap: IModel, pathId: string, gapLength: number, breakAt?: number): IPoint[];
/**
* Given 2 pairs of points, will return lines that connect the first pair to the second.
*
* @param gap1 First array of 2 point objects.
* @param gap2 Second array of 2 point objects.
* @returns Array containing 2 lines.
*/
function bridgeGaps(gap1: IPoint[], gap2: IPoint[]): IPathLine[];
}
declare module MakerJs.tools {
/**
* Solves for the angle of a triangle when you know lengths of 3 sides.
*
* @param length1 Length of side of triangle, opposite of the angle you are trying to find.
* @param length2 Length of any other side of the triangle.
* @param length3 Length of the remaining side of the triangle.
* @returns Angle opposite of the side represented by the first parameter.
*/
function solveTriangleSSS(length1: number, length2: number, length3: number): number;
/**
* Solves for the length of a side of a triangle when you know length of one side and 2 angles.
*
* @param oppositeAngleInDegrees Angle which is opposite of the side you are trying to find.
* @param lengthOfSideBetweenAngles Length of one side of the triangle which is between the provided angles.
* @param otherAngleInDegrees An other angle of the triangle.
* @returns Length of the side of the triangle which is opposite of the first angle parameter.
*/
function solveTriangleASA(oppositeAngleInDegrees: number, lengthOfSideBetweenAngles: number, otherAngleInDegrees: number): number;
}
declare module MakerJs.tools {
/**
* An intersection of two paths.
*/
interface IPathIntersection {
/**
* Array of points where the two paths intersected. The length of the array may be either 1 or 2 points.
*/
intersectionPoints: IPoint[];
/**
* This Array property will only be defined if the first parameter passed to pathIntersection is either an Arc or a Circle.
* It contains the angles of intersection relative to the first path parameter.
* The length of the array may be either 1 or 2.
*/
path1Angles?: number[];
/**
* This Array property will only be defined if the second parameter passed to pathIntersection is either an Arc or a Circle.
* It contains the angles of intersection relative to the second path parameter.
* The length of the array may be either 1 or 2.
*/
path2Angles?: number[];
}
/**
* Find the point(s) where 2 paths intersect.
*
* @param path1 First path to find intersection.
* @param path2 Second path to find intersection.
* @result IPathIntersection object, with points(s) of intersection (and angles, when a path is an arc or circle); or null if the paths did not intersect.
*/
function pathIntersection(path1: IPath, path2: IPath): IPathIntersection;
}