Skip to content

zlimcode/open-joyn

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
doc
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 

OPENJOYN Core

Introduction

Our motivation for the OPENJOYN project is to explore methods of future design and build processes for digital and analog constructions. Therefore a bespoke language based on JavaScript is developed and utilized to parametrically define and customize wood constructions like furniture.

Our Main Goal

Our vision is to enable common citizens to build individualized wood constructions. In addition to timeless products such as tables and cabinets, current socially relevant constructions can also get integrated. OPENJOYN is intended to develop into a construction catalog for the globally connected society and can achieve a high impact via a potentially large number of users.

By now everyone can access the construction catalog with a work-in-progress web tool we are hosting using the OPENJOYN JavaScript toolkit!

It can be found here:

http://openjoyn.milz.studio

A single bar

The toolkit

Besides using the hosted work-in-progress web tool http://openjoyn.milz.studio it is possible to utilize the Factory and the toolkit Core in this repo. For details about the functionality please see the docs.

OPENJOYN CIRCULAR

The "CIRCULAR" module is adding new features to the OPENJOYN tool to give the user a variety of options for using present construction materials. For example, individual bespoke slats can be defined and used in parametric definitions.

Examples

In this chapter we have listed some of the most important features to provide a purposeful overview.

The Factory

Use new Factory() to create your factory. All the defining and assembling of the construction is done here.

let f = new Factory();

Set global options e.g. defaultsBar

There are plenty of options which can be set for the whole construction. e.g. f.defaultsBar()

f.defaultsBar({ size: [34, 34]}); //sets the standard bar size to 34x34mm

Create a bar

A simple bar can be created with [f.bar](http://f.bar)() or an axis oriented version with f.barX(), f.barY(), f.barZ()

f.barZ({ position: [0,0,0], length: 400 }); // bar orientated in Z axis
// f.barX({ position: [0,0,0], length: 400 }); // bar orientated in X axis
// f.barY({ position: [0,0,0], length: 400 }); // bar orientated in Y axis

A single bar

Highlight using debug

The debug option can be set globally in f.defaultsBar() and helps to identify flaws during the design process.

f.defaultsBar({ size: [34, 34], debug: true}); //activates debug render mode

Debug

Move the coordinate system or move it in grid steps

In order to create in 3d space the push/pop matrix method is used and is combined with f.move() and f.moveGrid() functions.

f.push();
    f.moveGrid(1, -0.5, 0.5);
		// equivalent (if using 34mm barSize):
		// f.move(34, -17, 17);
    f.barY({ position: [0, 0, 0], length: 400 }); // a Y oriantated baris created at position x=34mm, y=-17mm, z=17mm
f.pop();

Two bars

Connect two bars point to point

To create a bar with an implizit definition, one can be created with a start and end point. Combined with the .pointFromStart() or/and .pointFromEnd() function, this can be used as the following example illustrates.

f.push();
  f.moveGrid(1,-0.5,0.5);
  let bar1 = f.barY({ position: [0, 0, 0], length: 400 }); // first horizontal bar
  f.moveGrid(0,0,10);
  let bar2 = f.barY({ position: [0, 0, 0], length: 400 }); // second horizontal bar
f.pop();

f.push();
	f.moveGrid(1,0,0);
	f.bar({position: bar1.pointFromStart(30), to: bar2.pointFromEnd(30)}); //third, diagonal bar, start to end
	//f.bar({position: bar1.pointFromEnd(10), to: bar2.pointFromEnd(10)}); //fourth, diagonal bar, end to end
f.pop();

Bar from point to point

Extend bar on both sides

The f.bar() option "extend" allows to configure an overshoot of the bar at both ends individually.

f.bar({position: bar1.pointFromStart(20), to: bar2.pointFromStart(20), extend: [34, 34]});    

Bar from point to point, extended

Create a Panel

The factory is also able to create panels, these are defined by size and thickness.

f.panel({position: [0, 0, 0], size: [300, 200], thickness: 30});

Panel

License

The OPENJOYN source code is released under the AGPL 3.0

Special Thanks

Thanks to Prototype Fund & DLR (Deutsches Zentrum für Luft- und Raumfahrt). Special thanks to allesblinkt for supporting the project and its idea! A big shout out to all the other individuals who are involved and thanks for their support!

Funding

The project was funded by the German Federal Ministry of Education and Research under grant number 01IS21S22 from March to August 2021, and under grant number 01IS22S02 from March to August 2022. The authors are responsible for the content of this publication.

BMBF_eng.png

https://openjoyn.milz.studio