Tutorials | (back to the list of tutorials) |
Rectangular Panelization![]()
![]()
![]()
![]()
import processing.opengl.*;
import igeo.*;
size( 480, 360, IG.GL );
//IG.open("surface1.3dm"); //input geometry from 3dm file
IG.open("surface1.obj"); ///input geometry from OBJ file
ISurface[] surfs = IG.surfaces();
for( ISurface surf : surfs ){
int unum = 8, vnum = 8;
double uinc = 1.0/unum, vinc = 1.0/vnum;
for(int i=0; i < unum; i++){
for(int j=0; j < vnum; j++){
IVec pt11 = surf.pt( i*uinc, j*vinc );
IVec pt21 = surf.pt( (i+1)*uinc, j*vinc );
IVec pt12 = surf.pt( i*uinc, (j+1)*vinc );
IVec pt22 = surf.pt( (i+1)*uinc, (j+1)*vinc );
new ISurface(pt11, pt21, pt22, pt12).clr(i*uinc,j*vinc,0);
}
}
surf.del();
}
Triangulation![]()
![]()
![]()
![]()
import processing.opengl.*;
import igeo.*;
size( 480, 360, IG.GL );
//IG.open("surface1.3dm"); //input geometry from 3dm file
IG.open("surface1.obj"); ///input geometry from OBJ file
ISurface[] surfs = IG.surfaces();
for( ISurface surf : surfs ){
int unum = 8, vnum = 8;
double uinc = 1.0/unum, vinc = 1.0/vnum;
for(int i=0; i < unum; i++){
for(int j=0; j < vnum; j++){
IVec pt11 = surf.pt( i*uinc, j*vinc );
IVec pt21 = surf.pt( (i+1)*uinc, j*vinc );
IVec pt12 = surf.pt( i*uinc, (j+1)*vinc );
IVec pt22 = surf.pt( (i+1)*uinc, (j+1)*vinc );
new ISurface(pt11, pt21, pt22).clr(i*uinc,0,j*vinc);
new ISurface(pt22, pt12, pt11).clr(1-i*uinc);
}
}
surf.del();
}
You can alternate the diagonal line by changing the sequence of points to create triangular surfaces.
![]()
![]()
![]()
![]()
import processing.opengl.*;
import igeo.*;
size( 480, 360, IG.GL );
//IG.open("surface1.3dm"); //input geometry from 3dm file
IG.open("surface1.obj"); ///input geometry from OBJ file
ISurface[] surfs = IG.surfaces();
for( ISurface surf : surfs ){
int unum = 8, vnum = 8;
double uinc = 1.0/unum, vinc = 1.0/vnum;
for(int i=0; i < unum; i++){
for(int j=0; j < vnum; j++){
IVec pt11 = surf.pt( i*uinc, j*vinc );
IVec pt21 = surf.pt( (i+1)*uinc, j*vinc );
IVec pt12 = surf.pt( i*uinc, (j+1)*vinc );
IVec pt22 = surf.pt( (i+1)*uinc, (j+1)*vinc );
new ISurface(pt11, pt21, pt12).clr(0,i*uinc,j*vinc);
new ISurface(pt12, pt21, pt22).clr(1-i*uinc);
}
}
surf.del();
}
Diagrid Triangulation
![]()
![]()
![]()
![]()
import processing.opengl.*;
import igeo.*;
size( 480, 360, IG.GL );
//IG.open("surface1.3dm"); //input geometry from 3dm file
IG.open("surface1.obj"); ///input geometry from OBJ file
ISurface[] surfs = IG.surfaces();
for( ISurface surf : surfs ){
int unum = 8, vnum = 8;
double uinc = 1.0/unum, vinc = 1.0/vnum;
for(int i=0; i < unum; i++){
for(int j=0; j < vnum; j++){
if( (i+j)%2 == 0 ){
IVec pt1 = surf.pt( i*uinc, j*vinc );
IVec pt2 = surf.pt( (i+1)*uinc, (j-1)*vinc );
IVec pt3 = surf.pt( (i+1)*uinc, (j+1)*vinc );
new ISurface(pt1, pt2, pt3).clr(0,i*uinc,j*vinc);
}
else{
IVec pt1 = surf.pt( (i+1)*uinc, j*vinc );
IVec pt2 = surf.pt( i*uinc, (j+1)*vinc );
IVec pt3 = surf.pt( i*uinc, (j-1)*vinc );
new ISurface(pt1, pt2, pt3).clr(1-i*uinc);
}
}
}
surf.del();
}
To have clear edge and corner condition to fill the original rectangular area of the input surface, you use if conditions to create filling geometries at the corners and the edges.
![]()
![]()
![]()
![]()
import processing.opengl.*;
import igeo.*;
size( 480, 360, IG.GL );
//IG.open("surface1.3dm"); //input geometry from 3dm file
IG.open("surface1.obj"); ///input geometry from OBJ file
ISurface[] surfs = IG.surfaces();
for( ISurface surf : surfs ){
int unum = 8, vnum = 8;
double uinc = 1.0/unum, vinc = 1.0/vnum;
IVec pt1, pt2, pt3;
for(int i=0; i < unum; i++){
for(int j=0; j < vnum; j++){
if( (i+j)%2 == 0 ){
pt1 = surf.pt( i*uinc, j*vinc );
if( j > 0 ){
pt2 = surf.pt( (i+1)*uinc, (j-1)*vinc );
}
else{
pt2 = surf.pt( (i+1)*uinc, j*vinc );
}
if( j < vnum-1 ){
pt3 = surf.pt( (i+1)*uinc, (j+1)*vinc );
}
else{
pt3 = surf.pt( (i+1)*uinc, j*vinc );
}
new ISurface(pt1, pt2, pt3).clr(1,i*uinc,j*vinc);
}
else{
pt1 = surf.pt( (i+1)*uinc, j*vinc );
if( j < vnum-1 ){
pt2 = surf.pt( i*uinc, (j+1)*vinc );
}
else{
pt2 = surf.pt( i*uinc, j*vinc );
}
if( j > 0 ){
pt3 = surf.pt( i*uinc, (j-1)*vinc );
}
else{
pt3 = surf.pt( i*uinc, j*vinc );
}
new ISurface(pt1, pt2, pt3).clr(1-i*uinc);
}
}
}
surf.del();
}
Diamond Panelization![]()
![]()
![]()
![]()
import processing.opengl.*;
import igeo.*;
size( 480, 360, IG.GL );
//IG.open("surface1.3dm"); //input geometry from 3dm file
IG.open("surface1.obj"); ///input geometry from OBJ file
ISurface[] surfs = IG.surfaces();
for( ISurface surf : surfs ){
int unum = 10, vnum = 10;
double uinc = 1.0/unum, vinc = 1.0/vnum;
for(int i=0; i <= unum; i++){
for(int j=0; j < vnum; j++){
if( (i+j)%2 == 0 ){
IVec pt1 = surf.pt( (i-1)*uinc, j*vinc );
IVec pt2 = surf.pt( i*uinc, (j-1)*vinc );
IVec pt3 = surf.pt( (i+1)*uinc, j*vinc );
IVec pt4 = surf.pt( i*uinc, (j+1)*vinc );
new ISurface(pt1, pt2, pt3, pt4).clr(.5,i*uinc,j*vinc);
}
}
}
surf.del();
}
To have rectangular corners and edges, you use if conditions to create filling triangular surfaces.
![]()
![]()
![]()
![]()
import processing.opengl.*;
import igeo.*;
size( 480, 360, IG.GL );
//IG.open("surface1.3dm"); //input geometry from 3dm file
IG.open("surface1.obj"); ///input geometry from OBJ file
ISurface[] surfs = IG.surfaces();
for( ISurface surf : surfs ){
int unum = 10, vnum = 10;
double uinc = 1.0/unum, vinc = 1.0/vnum;
IVec pt1, pt2, pt3, pt4;
for(int i=0; i <= unum; i++){
for(int j=0; j < vnum; j++){
if( (i+j)%2 == 0 ){
if(i > 0){
pt1 = surf.pt( (i-1)*uinc, j*vinc );
}
else{
pt1 = surf.pt( i*uinc, j*vinc );
}
if(i < unum){
pt3 = surf.pt( (i+1)*uinc, j*vinc );
}
else{
pt3 = surf.pt( i*uinc, j*vinc );
}
if(j > 0){
pt2 = surf.pt( i*uinc, (j-1)*vinc );
}
else{
pt2 = surf.pt( i*uinc, j*vinc );
}
if(j< vnum-1){
pt4 = surf.pt( i*uinc, (j+1)*vinc );
}
else{
pt4 = surf.pt( i*uinc, j*vinc );
}
new ISurface(pt1, pt2, pt3, pt4).clr(i*uinc,j*vinc,.5);
}
}
}
surf.del();
}
HOME
FOR PROCESSING
DOWNLOAD
DOCUMENTS
TUTORIALS (Java /
Python)
GALLERY
SOURCE CODE(GitHub)
PRIVACY POLICY
ABOUT/CONTACT