Python Tutorials | (back to the list of tutorials) |
Grid Points on Surface![]()
![]()
![]()
![]()
add_library('igeo')
size( 480, 360, IG.GL )
#IG.open("surface1.3dm") #input geometry from 3dm file
IG.open("surface1.obj") #input geometry from OBJ file
surfs = IG.surfaces()
for surf in surfs :
unum = 8
vnum = 8
uinc = 1.0/unum
vinc = 1.0/vnum
for i in range(unum+1) :
for j in range(vnum+1) :
pt = surf.pt( i*uinc, j*vinc )
IPoint(pt).clr( i*uinc, j*vinc, 0)
The for loop and the way to use surf.pt( i*uinc, j*vinc ) in the code above are a basic way to extract points on the surface to create new geometries on the surface.
When you don't need the input surface anymore, you can delete it by del() method.
![]()
![]()
![]()
![]()
add_library('igeo')
size( 480, 360, IG.GL )
#IG.open("surface1.3dm") #input geometry from 3dm file
IG.open("surface1.obj") #/input geometry from OBJ file
surfs = IG.surfaces()
for surf in surfs :
unum = 8
vnum = 8
uinc = 1.0/unum
vinc = 1.0/vnum
for i in range(unum+1) :
for j in range(vnum+1) :
pt = surf.pt( i*uinc, j*vinc )
IPoint(pt).clr( i*uinc, j*vinc, 0)
surf.del()
Grid Lines![]()
![]()
![]()
![]()
add_library('igeo')
size( 480, 360, IG.GL )
#IG.open("surface1.3dm") #input geometry from 3dm file
IG.open("surface1.obj") # input geometry from OBJ file
surfs = IG.surfaces()
for surf in surfs :
unum = 8
vnum = 8
uinc = 1.0/unum
vinc = 1.0/vnum
for i in range(unum) :
for j in range(vnum) :
pt1 = surf.pt(i*uinc, j*vinc)
pt2 = surf.pt((i+1)*uinc, j*vinc)
ICurve(pt1, pt2).clr(0)
surf.del()
In the similar way, you can draw lines on a surface in v direction,
by switching the logic of i and j.
![]()
![]()
![]()
![]()
add_library('igeo')
size( 480, 360, IG.GL )
#IG.open("surface1.3dm") #input geometry from 3dm file
IG.open("surface1.obj") #input geometry from OBJ file
surfs = IG.surfaces()
for surf in surfs :
unum = 8
vnum = 8
uinc = 1.0/unum
vinc = 1.0/vnum
for i in range(unum+1) :
for j in range(vnum) :
pt1 = surf.pt(i*uinc, j*vinc)
pt2 = surf.pt(i*uinc, (j+1)*vinc)
ICurve(pt1, pt2).clr(1.0)
surf.del()
To combine both, dealing with the ending number difference in u and v direction, you'd use if condition to skip the logic around the ending number.
![]()
![]()
![]()
![]()
add_library('igeo')
size( 480, 360, IG.GL )
#IG.open("surface1.3dm") # input geometry from 3dm file
IG.open("surface1.obj") # input geometry from OBJ file
surfs = IG.surfaces()
for surf in surfs :
unum = 8
vnum = 8
uinc = 1.0/unum
vinc = 1.0/vnum
for i in range(unum+1) :
for j in range(vnum+1) :
pt1 = surf.pt(i*uinc, j*vinc)
if i < unum :
pt2u = surf.pt((i+1)*uinc, j*vinc)
ICurve(pt1, pt2u).clr(0)
if j < vnum :
pt2v = surf.pt(i*uinc, (j+1)*vinc)
ICurve(pt1, pt2v).clr(1.0)
surf.del()
When you run the for loops with the counter i and j, the behavior of the internal parameter of u and v, calculated by the counter i, j and the interval uinc, vinc on the surface can be diagrammed like the below.
When the iteration of for loop is going through, depending on the state (depending on what number i and j are assigned), the location of the point specified the parameter is relatively changed.
To build geometry relative to the current state of i and j in the for loop, you specify a relative location using the counter i, j and the interval uinc and vinc.
Diagonal Lines![]()
![]()
![]()
![]()
add_library('igeo')
size( 480, 360, IG.GL )
#IG.open("surface1.3dm") #input geometry from 3dm file
IG.open("surface1.obj") #input geometry from OBJ file
surfs = IG.surfaces()
for surf in surfs :
unum = 8
vnum = 8
uinc = 1.0/unum
vinc = 1.0/vnum
for i in range(unum) :
for j in range(vnum) :
pt1 = surf.pt(i*uinc, j*vinc)
pt2 = surf.pt((i+1)*uinc, (j+1)*vinc)
ICurve(pt1, pt2).clr(0,1.,1.)
surf.del()
To flip the direction of diagonals, use
![]()
![]()
![]()
![]()
add_library('igeo')
size( 480, 360, IG.GL )
#IG.open("surface1.3dm") #input geometry from 3dm file
IG.open("surface1.obj") #input geometry from OBJ file
surfs = IG.surfaces()
for surf in surfs :
unum = 8
vnum = 8
uinc = 1.0/unum
vinc = 1.0/vnum
for i in range(unum) :
for j in range(vnum) :
pt1 = surf.pt(i*uinc, (j+1)*vinc)
pt2 = surf.pt((i+1)*uinc, j*vinc)
ICurve(pt1, pt2).clr(0,0,1.)
surf.del()
The below is an example to combine diagonal lines and orthogonal u lines and v lines.
![]()
![]()
![]()
![]()
add_library('igeo')
size( 480, 360, IG.GL )
#IG.open("surface1.3dm") #input geometry from 3dm file
IG.open("surface1.obj") #input geometry from OBJ file
surfs = IG.surfaces()
for surf in surfs :
unum = 8
vnum = 8
uinc = 1.0/unum
vinc = 1.0/vnum
for i in range(unum+1) :
for j in range(vnum) :
pt1 = surf.pt(i*uinc, j*vinc)
if i < unum :
pt2u = surf.pt((i+1)*uinc, j*vinc)
ICurve(pt1, pt2u).clr(0)
if j < vnum :
pt2v = surf.pt(i*uinc, (j+1)*vinc)
ICurve(pt1, pt2v).clr(1.0)
if i < unum and j < vnum :
pt2uv = surf.pt((i+1)*uinc, (j+1)*vinc)
ICurve(pt1, pt2uv).clr(0,1.,1.)
surf.del()
Diagrid Lines![]()
![]()
![]()
![]()
add_library('igeo')
size( 480, 360, IG.GL )
#IG.open("surface1.3dm") #input geometry from 3dm file
IG.open("surface1.obj") #input geometry from OBJ file
surfs = IG.surfaces()
for surf in surfs :
unum = 8
vnum = 8
uinc = 1.0/unum
vinc = 1.0/vnum
for i in range(unum) :
for j in range(vnum+1) :
if (i+j)%2 == 0 :
pt1 = surf.pt(i*uinc, j*vinc)
if j > 0 :
pt2 = surf.pt((i+1)*uinc, (j-1)*vinc)
ICurve(pt1, pt2).clr(0)
if j < vnum :
pt3 = surf.pt((i+1)*uinc, (j+1)*vinc)
ICurve(pt1, pt3).clr(0,0,1.)
surf.del()
The if condition of if( (i+j)%2 == 0 ) picks every other point in the diagonal checker pattern way as shown in the diagram below.
Then on each point,
When this "<" shape is repeated at each diagrid point, it forms diagrid lines.
If you use
the if condition of if( (i+j)%2 == 1 ) ,
instead of if( (i+j)%2 == 0 ) ,
The corner condition of diagrid lines can be changed.
![]()
![]()
![]()
![]()
add_library('igeo')
size( 480, 360, IG.GL )
#IG.open("surface1.3dm") #input geometry from 3dm file
IG.open("surface1.obj") #input geometry from OBJ file
surfs = IG.surfaces()
for surf in surfs :
unum = 8
vnum = 8
uinc = 1.0/unum
vinc = 1.0/vnum
for i in range(unum) :
for j in range(vnum+1) :
if (i+j)%2 == 1 :
pt1 = surf.pt(i*uinc, j*vinc)
if j > 0 :
pt2 = surf.pt((i+1)*uinc, (j-1)*vinc)
ICurve(pt1, pt2).clr(0)
if j < vnum :
pt3 = surf.pt((i+1)*uinc, (j+1)*vinc)
ICurve(pt1, pt3).clr(0,0,1.)
surf.del()
Variable Diagrid Lines![]()
![]()
![]()
![]()
add_library('igeo')
size( 480, 360, IG.GL )
#IG.open("surface1.3dm") #input geometry from 3dm file
IG.open("surface1.obj") #input geometry from OBJ file
surfs = IG.surfaces()
for surf in surfs :
unum = 8
vnum = 4
uinc = 1.0/unum
vinc = 1.0/vnum
for i in range(unum) :
vnum+=1
vinc = 1.0/vnum
for j in range(vnum+1) :
vinc2 = 1.0/(vnum+1)
pt1 = surf.pt(i*uinc, j*vinc)
pt2 = surf.pt((i+1)*uinc, j*vinc2)
pt3 = surf.pt((i+1)*uinc, (j+1)*vinc2)
ICurve(pt1, pt2).clr(1.,0,0)
ICurve(pt1, pt3).clr(.5,0,1)
surf.del()
Hexagonal Grid Lines![]()
![]()
![]()
![]()
add_library('igeo')
size( 480, 360, IG.GL )
#IG.open("surface1.3dm") #input geometry from 3dm file
IG.open("surface1.obj") # input geometry from OBJ file
surfs = IG.surfaces()
for surf in surfs :
unum = 20
vnum = 8
uinc = 1.0/unum
vinc = 1.0/vnum
r = 0.3
for i in range(unum+1) :
for j in range(vnum+1) :
if (i+j)%2 == 0 :
pt1 = surf.pt(i*uinc, (j-r)*vinc)
pt2 = surf.pt(i*uinc, (j+r)*vinc)
ICurve(pt1, pt2).clr(1.,0,1.)
if i < unum :
if j > 0 :
pt3 = surf.pt((i+1)*uinc, (j-1+r)*vinc)
ICurve(pt1, pt3).clr(0)
if j < vnum :
pt4 = surf.pt((i+1)*uinc, (j+1-r)*vinc)
ICurve(pt2, pt4).clr(0,0,1.)
surf.del()
Hexagonal Grid Lines2![]()
![]()
![]()
![]()
add_library('igeo')
size( 480, 360, IG.GL )
#IG.open("surface1.3dm") #input geometry from 3dm file
IG.open("surface1.obj") #input geometry from OBJ file
surfs = IG.surfaces()
for surf in surfs :
unum = 12
vnum = 12
uinc = 1.0/unum
vinc = 1.0/vnum
for i in range(unum+1) :
for j in range(vnum+1) :
pt1 = surf.pt(i*uinc, j*vinc)
if (i+j)%3 == 0 :
if i < unum :
pt2 = surf.pt((i+1)*uinc, j*vinc)
ICurve(pt1, pt2).clr(0) # orthogonal line
if j < vnum :
pt3 = surf.pt(i*uinc, (j+1)*vinc)
ICurve(pt1, pt3).clr(0.5) # orthogonal line
if (i+j)%3 == 1 :
if i < unum and j < vnum :
pt4 = surf.pt((i+1)*uinc, (j+1)*vinc)
ICurve(pt1, pt4).clr(1.,0,0) # diagonal line
surf.del()
Putting Cylinder around Line![]()
![]()
![]()
![]()
add_library('igeo')
size( 480, 360, IG.GL )
#IG.open("surface1.3dm") #input geometry from 3dm file
IG.open("surface1.obj") #input geometry from OBJ file
surfs = IG.surfaces()
for surf in surfs:
unum = 8
vnum = 8
uinc = 1.0/unum
vinc = 1.0/vnum
for i in range(unum) :
for j in range(vnum+1) :
if (i+j)%2 == 0 :
pt1 = surf.pt(i*uinc, j*vinc)
if j > 0 :
pt2 = surf.pt((i+1)*uinc, (j-1)*vinc)
ICylinder(pt1, pt2, 0.5)
if j < vnum :
pt3 = surf.pt((i+1)*uinc, (j+1)*vinc)
ICylinder(pt1, pt3, 0.5)
surf.del()
Putting Fin Surface on Line![]()
![]()
![]()
![]()
add_library('igeo')
size( 480, 360, IG.GL )
#IG.open("surface1.3dm") #input geometry from 3dm file
IG.open("surface1.obj") #input geometry from OBJ file
surfs = IG.surfaces()
for surf in surfs :
unum = 12
vnum = 12
uinc = 1.0/unum
vinc = 1.0/vnum
depth = 3.0
for i in range(unum+1) :
for j in range(vnum+1) :
pt1 = surf.pt(i*uinc, j*vinc)
pt1d = surf.pt(i*uinc, j*vinc, depth)
if (i+j)%3 == 0 :
if i < unum :
pt2 = surf.pt((i+1)*uinc, j*vinc)
pt2d = surf.pt((i+1)*uinc, j*vinc, depth)
ISurface(pt1, pt2, pt2d, pt1d).clr(0)
if j < vnum :
pt3 = surf.pt(i*uinc, (j+1)*vinc)
pt3d = surf.pt(i*uinc, (j+1)*vinc, depth)
ISurface(pt1, pt3, pt3d, pt1d).clr(0.5)
if (i+j)%3 == 1 :
if i < unum and j < vnum :
pt4 = surf.pt((i+1)*uinc, (j+1)*vinc)
pt4d = surf.pt((i+1)*uinc, (j+1)*vinc, depth)
ISurface(pt1, pt4, pt4d, pt1d).clr(1.,0,0)
surf.del()
HOME
FOR PROCESSING
DOWNLOAD
DOCUMENTS
TUTORIALS (Java /
Python)
GALLERY
SOURCE CODE(GitHub)
PRIVACY POLICY
ABOUT/CONTACT