luv

Workshop wiki

mesh-variation-emit.lisp

luft/mesh-variation-emit.lisp

system luft · 1 definition · on GitHub

in-package#:luft
defun%emit-variable-bevel-transition-owners
fieldrealized-witnessesoutput-setbuilder-by-ownerlive-triangle-counts-by-ownerpackingplan

Emit one already-proved transition plan, preserving every source owner.

let
repair-splits
%bevel-transition-plan-repair-splitsplan
repair-source-filter
%bevel-transition-plan-repair-source-filterplan
repair-point-count
%bevel-transition-plan-repair-point-countplan
%with-bevel-site-width-field
site-width
field
labels
spatial-edge-key
lxlylzrxryrz
nth-value0
%pack-spatial-edgepackinglxlylzrxryrz
edge-splits
lxlylzrxryrz
let*
edge
spatial-edge-keylxlylzrxryrz
points
gethashedgerepair-splits
whenpoints
let*
ordered
if
<leftright
points
reversepoints
edge-points
leftright
append
listleft
edge-splits
firstleft
secondleft
thirdleft
firstright
secondright
thirdright
listright
mark-visible-edge
tableleftrightbitmask
when
logtestbitmask
loopforpointson
edge-pointsleftright
while
restpoints
do
setf
gethash
%ordered-point-edge
firstpoints
secondpoints
table
t
triangle-boundary-mask
visibleabc
logior
if
gethashvisible
#b0010
if
gethashvisible
#b0100
if
gethashvisible
#b1000
emit-transition
builderkindstockambientmaskaxayazbxbybzcxcyczrepair-neighborhood-p
%with-transformed-bevel-triangle
taxtaytaztbxtbytbztcxtcytcz
site-widthaxayazbxbybzcxcycz
multiple-value-bind
nxnynz
%triangle-cross-scalarstaxtaytaztbxtbytbztcxtcytcz
unless
and
zeropnx
zeropny
zeropnz
multiple-value-bind
onxonyonz
%triangle-cross-scalarsaxayazbxbybzcxcycz
unless
plusp
thefixnum
+
thefixnum
*nxonx
thefixnum
*nyony
thefixnum
*nzonz
error"Site-local bevel folded ~S triangle ~S ~S ~S into ~S ~S ~S."kind
listaxayaz
listbxbybz
listcxcycz
listtaxtaytaz
listtbxtbytbz
listtcxtcytcz
let
ab
whenrepair-neighborhood-p
edge-splitstaxtaytaztbxtbytbz
bc
whenrepair-neighborhood-p
edge-splitstbxtbytbztcxtcytcz
ca
whenrepair-neighborhood-p
edge-splitstcxtcytcztaxtaytaz
if
not
orabbcca
%emit-global-triangle-scalarsbuilderkindstockambientmasknxnynztaxtaytaztbxtbytbztcxtcytcz
let*
ta
listtaxtaytaz
tb
listtbxtbytbz
tc
listtcxtcytcz
cross
listnxnynz
loop
append
listta
ab
listtb
bc
listtc
ca
triangles
visible
make-hash-table:test#'equal
unlesstriangles
error"Could not contract site-local bevel T-junction around ~S."loop
mark-visible-edgevisibletatb#b100mask
mark-visible-edgevisibletbtc#b001mask
mark-visible-edgevisibletcta#b010mask
dolist
triangletriangles
destructuring-bind
abc
triangle
%emit-global-trianglebuilderkindstockambient
triangle-boundary-maskvisibleabc
triangle
declare
inlinespatial-edge-keyedge-splits
dolist
owner-witnessrealized-witnesses
let*
owner
carowner-witness
builder
gethashownerbuilder-by-owner
live-triangle-counts
gethashownerlive-triangle-counts-by-owner
%reserve-builder-triangle-capacitiesbuilder
+
areflive-triangle-counts0
repair-point-count
+
areflive-triangle-counts1
repair-point-count
+
areflive-triangle-counts2
repair-point-count
dolist
owner-witnessrealized-witnesses
let*
owner
carowner-witness
witness
cdrowner-witness
builder
gethashownerbuilder-by-owner
%do-surface-mesh-triangle-scalars
witnesskindstockambientmaskaxayazbxbybzcxcycz
emit-transitionbuilderkindstockambientmaskaxayazbxbybzcxcycz
andrepair-source-filter
%triangle-touches-source-anchor-filter-prepair-source-filteraxayazbxbybzcxcycz
let
realized
mapcar
lambda
owner-witness
let
owner
carowner-witness
consowner
%finish-surface-mesh
gethashownerbuilder-by-owner
realized-witnesses
values
remove-if-not
lambda
entry
nth-value1
gethash
carentry
output-set
realized
remove-if
lambda
entry
nth-value1
gethash
carentry
output-set
realized