Skip to content

Commit 8f98432

Browse files
committed
new hemesh examples
1 parent cbf7984 commit 8f98432

File tree

2 files changed

+125
-0
lines changed

2 files changed

+125
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#!/usr/bin/env jruby -v -W2
2+
# frozen_string_literal: true
3+
require 'arcball'
4+
require 'propane'
5+
6+
# MeshSelection class
7+
class MeshSelection < Propane::App
8+
9+
load_library :hemesh
10+
include_package 'wblut.hemesh'
11+
java_import 'wblut.processing.WB_Render'
12+
13+
attr_reader :selection, :invselection, :box, :render
14+
15+
def settings
16+
size(800, 800, P3D)
17+
end
18+
19+
def setup
20+
sketch_title 'Mesh Selection'
21+
Processing::ArcBall.init(self)
22+
box_creator = HEC_Box.new.set_width(400)
23+
.set_width_segments(10)
24+
.set_height(200)
25+
.set_height_segments(4)
26+
.set_depth(200)
27+
.set_depth_segments(4)
28+
@box = HE_Mesh.new(box_creator)
29+
# define a selection
30+
@selection = HE_Selection.new(box)
31+
# add faces to selection
32+
box.f_itr.each { |face| selection.add(face) if rand(100) < 50 }
33+
invselection = selection.get
34+
invselection.invert_faces
35+
cc = HES_CatmullClark.new.set_keep_edges(false).set_keep_boundary(false)
36+
# only modify selection (if applicable)
37+
selection.subdivide(cc, 2)
38+
# modifiers try to preserve selections whenever possible
39+
selection.modify(HEM_Extrude.new.set_distance(25).set_chamfer(0.4))
40+
invselection.modify(HEM_Extrude.new.set_distance(-5).set_chamfer(0.4))
41+
@render = WB_Render.new(self)
42+
end
43+
44+
def draw
45+
background(25)
46+
lights
47+
fill(255)
48+
no_stroke
49+
render.draw_faces(box)
50+
fill(255, 0, 0)
51+
render.draw_faces(selection)
52+
stroke(0)
53+
render.draw_edges(box)
54+
end
55+
end
56+
57+
MeshSelection.new
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#!/usr/bin/env jruby
2+
# frozen_string_literal: true
3+
require 'propane'
4+
require 'arcball'
5+
6+
# ProgressReporter class
7+
class ProgressReporter < Propane::App
8+
load_library :hemesh
9+
# namespace for hemesh java classes
10+
module WBlut
11+
java_import 'wblut.processing.WB_Render'
12+
java_import 'wblut.core.WB_ProgressReporter'
13+
include_package 'wblut.hemesh'
14+
end
15+
16+
attr_reader :mesh, :render, :pr
17+
def settings
18+
size(1000, 1000, P3D)
19+
smooth(8)
20+
end
21+
22+
def setup
23+
sketch_title 'Progress Reporter'
24+
Processing::ArcBall.init(self)
25+
@pr= WBlut::WB_ProgressReporter.new(5) # maximum depth of reporting
26+
pr.start
27+
create_mesh
28+
@render= WBlut::WB_Render.new(self)
29+
end
30+
31+
def draw
32+
background(120)
33+
directional_light(255, 255, 255, 1, 1, -1)
34+
directional_light(127, 127, 127, -1, -1, 1)
35+
fill(255)
36+
no_stroke
37+
render.draw_faces(mesh)
38+
stroke(0)
39+
render.draw_edges(mesh)
40+
end
41+
42+
def create_mesh
43+
creator= WBlut::HEC_Geodesic.new.setC(2).setB(2).set_radius(300)
44+
@mesh= WBlut::HE_Mesh.new(creator)
45+
mesh.add(WBlut::HE_Mesh.new(
46+
WBlut::HEC_Grid.new(10, 10, 700, 700).set_center(0, 0, -350))
47+
)
48+
modifier= WBlut::HEM_Lattice.new
49+
modifier.set_width(10) # desired width of struts
50+
modifier.set_depth(10) # depth of struts
51+
# treat edges sharper than this angle as hard edges
52+
modifier.set_threshold_angle(1.5 * HALF_PI)
53+
# try to fuse planar adjacent planar faces created by the extrude
54+
modifier.set_fuse(true)
55+
# threshold angle to be considered coplanar
56+
modifier.set_fuse_angle(0.1 * HALF_PI)
57+
sel= WBlut::HE_Selection.select_random_faces(mesh, 0.4)
58+
sel.modify(modifier)
59+
mesh.smooth(2)
60+
end
61+
62+
def stop
63+
pr.interrupt
64+
super.stop
65+
end
66+
end
67+
68+
ProgressReporter.new

0 commit comments

Comments
 (0)