Skip to content

Instantly share code, notes, and snippets.

@edap
Created August 25, 2016 04:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save edap/15dc003ad850444dfce9ecf45dedaab1 to your computer and use it in GitHub Desktop.
Save edap/15dc003ad850444dfce9ecf45dedaab1 to your computer and use it in GitHub Desktop.
(defn leaf
[n-stripes width]
(let [
end (mg/scale-edge :ab :x
:scale 0.02
:out [(make-stripes n-stripes)])
middle (mg/reflect :s :out[{}
(mg/scale-edge :bc :z
:len width
:out [(mg/extrude
:dir :s
:len 1.5
:out [end])])])
attach (mg/split-displace
:y :z
:offset 0.4
:out [middle {}])]
attach))
(defn beak
[len]
(let [cave (mg/subdiv-inset :dir :y
:cols 3
:inset 0.02
:out[nil 1 2 3 nil])
body (mg/subdiv :rows 3 :out [nil (mg/extrude :dir :s
:len len
:out[cave]) nil])]
body))
(defn pistil
[len]
(mg/reflect :s :out [{} (beak len)]))
(defn bud[]
(let [cols (mg/subdiv :slices 12 :out [nil (pistil 1.4)
nil (pistil 1.1)
nil (pistil 0.8)
nil (pistil 0.5)
nil (pistil 0.3)
nil (pistil 0.1)])
substain (mg/split-displace :y :z
:offset 0.2
:out[(mg/extrude :dir :f :out[cols]) {}])
middle (mg/extrude :len 0.12
:out[(mg/reflect :s :out[{} substain])])
attach (mg/replicate :s
:out[nil (mg/scale-edge :bc :z
:len 0.2
:out[middle])])]
attach))
(defn middle[]
(let [net (mg/scale-edge :ef :x :len 1.2 :out [(make-net 4 2 0.015)])
body (mg/extrude :dir :n :len 0.4 :out [net])]
body))
(defn fake-teasel[]
(let [leafs (mg/extrude :dir :s :len 0.8 :out [(leaf 15 0.8)])
slices (mg/subdiv :slices 10 :out [leafs nil nil (bud) nil nil nil nil (middle)])
side (mg/apply-recursively (mg/reflect :e :out[slices slices]) 15 [1] 1)
seed (mg/sphere-lattice-seg 16 2.855 0.3 0.2)]
[seed side]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment