[Sidefx-houdini-list] Space filling circles

Andrew D Lyons tstexture at gmail.com
Thu Aug 6 21:20:54 EDT 2009


Yep - that's pretty much all I did.

2009/8/6 Ivan DeWolf <ivan at martian-labs.com>:
>
>
> there is a "compute dual" in the divide SOP, and a "triangulate 2d" sop.
> the triangulate generates a delaunay triangulation, and the divide SOP
> can turn it into a vooronoi diagram...
>
>
>
> Quoting herman <herman02 at netvigator.com>:
>
>> this is something i wanna ask for a long time also for the circle packing,
>> will take a look at the link n give it a try after my holidays!
>>
>> thanks
>>
>> ----- Original Message -----
>> From: "Andrew D Lyons" <tstexture at gmail.com>
>> To: <sidefx-houdini-list at sidefx.com>
>> Sent: Friday, August 07, 2009 5:28 AM
>> Subject: Re: [Sidefx-houdini-list] Space filling circles
>>
>>
>> As an interesting side topic to this thread, you can get some pretty
>> nice voronoi break-up patterns from a similar network to that which I
>> posted above. Again it's based on voronoi patterns being the dual of
>> delaunay triangulation:
>>
>> http://www.comp.lancs.ac.uk/~kristof/research/notes/voronoi/
>>
>> I've put an example in a second post here:
>>
>> http://www.sidefx.com/index.php?option=com_forum&Itemid=172&page=viewtopic&p=78063#78063
>>
>> It would be great if SESI, or someone could wrap some of these up in SOPs...
>>
>> Cheers
>>
>> 2009/8/6 Andrew D Lyons <tstexture at gmail.com>:
>>> Yep - sorry about the line wrapping on that post. There is a more
>>> succinct version of the script uploaded to here:
>>>
>>> http://www.sidefx.com/index.php?option=com_forum&Itemid=172&page=viewtopic&p=78063#78063
>>>
>>> Cheers
>>>
>>>
>>> 2009/8/6 David Johnson <daveinengland at gmail.com>:
>>>> I had to edit the example to fix the line wraps that the email put in,
>>>> but
>>>> after that it ran just fine. Maybe someone could put it on odforce or in
>>>> the
>>>> SideFX forum.
>>>>
>>>> Dave
>>>>
>>>> On Thu, Aug 6, 2009 at 6:58 AM, Steve Tucker <Steve.Tucker at starz.com>
>>>> wrote:
>>>>
>>>>> Interesting. If I attempt to run this in a new file, it doesn't work.
>>>>> Can't create the geo object. If I cd /obj and then try running it, I get
>>>>> a
>>>>> fatal exception error.
>>>>>
>>>>> - Steve
>>>>>
>>>>> Stephen Tucker, VFX Artist
>>>>> p: 416.682.5200 x 5363 | f: 416.682.5209
>>>>> Starz Media Canada Co. | 230 Richmond Street East | Toronto, ON M5A 1P4
>>>>> www.starzanimation.com
>>>>>
>>>>>
>>>>> -----Original Message-----
>>>>> From: sidefx-houdini-list-bounces at sidefx.com [mailto:
>>>>> sidefx-houdini-list-bounces at sidefx.com] On Behalf Of Andrew D Lyons
>>>>> Sent: Wednesday, August 05, 2009 7:07 PM
>>>>> To: sidefx-houdini-list at sidefx.com
>>>>> Subject: Re: [Sidefx-houdini-list] Space filling circles
>>>>>
>>>>> That's an interesting problem. Not exactly circular - but close:
>>>>>
>>>>> Drop this in a textport:
>>>>> #######################################################
>>>>>
>>>>> # Automatically generated script: Wednesday August 05, 16:06
>>>>> \set noalias = 1
>>>>> set saved_path = `execute("oppwf")`
>>>>> opcf /obj
>>>>>
>>>>> # Node circle_cells (Object/geo)
>>>>> opadd -n geo circle_cells
>>>>> oplocate -x 12.6117 -y 2.05949 circle_cells
>>>>> opspareds ' group { name "stdswitcher5" label "Transform"
>>>>> parm
>>>>> { name "keeppos" baseparm joinnext
>>>>> export none }
>>>>> parm { name "pre_xform" baseparm export
>>>>> none } parm
>>>>> { name "xOrd" baseparm joinnext export
>>>>> none }
>>>>> parm { name "rOrd" baseparm export none
>>>>> } parm {
>>>>> name "t" baseparm export all } parm {
>>>>> name "r"
>>>>> baseparm export all } parm { name "s"
>>>>> baseparm
>>>>> export none } parm { name "p" baseparm
>>>>> export none }
>>>>> parm { name "scale" baseparm export
>>>>> none } parm {
>>>>> name "lookatpath" baseparm export none } parm
>>>>> {
>>>>> name "lookup" baseparm export none }
>>>>> parm {
>>>>> name "pathobjpath" baseparm export none }
>>>>> parm {
>>>>> name "roll" baseparm export none } parm {
>>>>> name "pos"
>>>>> baseparm export none } parm { name
>>>>> "uparmtype"
>>>>> baseparm export none } parm { name
>>>>> "pathorient"
>>>>> baseparm export none } parm { name
>>>>> "up" baseparm
>>>>> export none } parm { name "bank" baseparm
>>>>> export none
>>>>> } } group { name "stdswitcher5_1" label
>>>>> "Material" parm
>>>>> { name "shop_materialpath" baseparm
>>>>> joinnext
>>>>> export none } parm { name "shop_materialopts"
>>>>> baseparm
>>>>> export none } } group { name "stdswitcher5_2"
>>>>> label "Render" parm { name "tdisplay"
>>>>> baseparm
>>>>> export none } parm { name "display"
>>>>> baseparm
>>>>> export none } parm { name "vm_phantom" label
>>>>> "Phantom"
>>>>> type toggle default { "0" } range { 0 1 }
>>>>> export none
>>>>> parmtag { "spare_category" "Render" } } parm {
>>>>> name "vm_renderable" label "Renderable" type
>>>>> toggle
>>>>> default { "1" } range { 0 1 } export
>>>>> none parmtag {
>>>>> "spare_category" "Render" } } group { name
>>>>> "folder0"
>>>>> label "Shading" parm { name "categories"
>>>>> label "Categories"
>>>>> type string default { "" } help "A
>>>>> list of tags which can be
>>>>> used to select the object" range { 0 1 }
>>>>> export none parmtag {
>>>>> "spare_category" "Shading" } } parm { name
>>>>> "reflectmask"
>>>>> label "Reflection Mask" type oplist
>>>>> default { "*" } range { 0
>>>>> 1 } export none parmtag { "oprelative" "/obj" }
>>>>> parmtag {
>>>>> "opfilter" "!!OBJ/GEOMETRY!!" } parmtag { "spare_category"
>>>>> "Shading"
>>>>> } parmtag { "opexpand" "1" } } parm {
>>>>> name "lightmask"
>>>>> label "Light Mask" type oplist
>>>>> default { "*" } range { 0 1 }
>>>>> export none parmtag { "oprelative" "/obj" }
>>>>> parmtag { "opfilter"
>>>>> "!!OBJ/LIGHT!!" } parmtag { "spare_category" "Shading" }
>>>>> parmtag {
>>>>> "opexpand" "1" } } parm { name
>>>>> "vm_volumefilter"
>>>>> label "Volume Filter" type string
>>>>> default { "gaussian" }
>>>>> menu { "box" "Box Filter"
>>>>> "gaussian" "Gaussian"
>>>>> "bartlett" "Bartlett (triangle)" "catrom"
>>>>> "Catmull-Rom"
>>>>> "hanning" "Hanning" "blackman" "Blackman"
>>>>> "sinc" "Sinc
>>>>> (sharpening)" } range { 0 1 }
>>>>> export none parmtag {
>>>>> "spare_category" "Shading" } } parm {
>>>>> name "vm_volumefilterwidth" label "Volume
>>>>> Filter Width"
>>>>> type float default { "1.5" }
>>>>> range { 0.001 5 } export none
>>>>> parmtag { "spare_category" "Shading" } } parm {
>>>>> name "vm_matte" label "Matte shading"
>>>>> type toggle default {
>>>>> "0" } range { 0 1 } export none
>>>>> parmtag { "spare_category"
>>>>> "Shading" } } } group { name "folder0_1"
>>>>> label "Sampling" parm { name "geo_velocityblur"
>>>>> label "Geometry Velocity Blur" type
>>>>> toggle default { "0" }
>>>>> range { 0 1 } export none
>>>>> parmtag { "spare_category" "Sampling"
>>>>> } } } group { name "folder0_2"
>>>>> label "Dicing"
>>>>> parm { name "vm_shadingquality" label "Shading
>>>>> Quality"
>>>>> type float default { "1" }
>>>>> range { 0 10 } export none
>>>>> parmtag { "spare_category" "Dicing" } } parm {
>>>>> name "vm_rayshadingquality" label "Ray Shading
>>>>> Quality"
>>>>> type float default { "1" }
>>>>> range { 0 10 } export none
>>>>> parmtag { "spare_category" "Dicing" } } }
>>>>> group {
>>>>> name "folder0_3" label "Geometry" parm {
>>>>> name "vm_rmbackface" label "Backface
>>>>> Removal (Mantra)"
>>>>> type toggle default { "0" }
>>>>> range { 0 1 } export none
>>>>> parmtag { "spare_category" "Geometry" } }
>>>>> parm {
>>>>> name "shop_geometrypath" label "Procedural
>>>>> Shader" type oppath
>>>>> default { "" } range { 0 1 }
>>>>> export none parmtag {
>>>>> "oprelative" "." } parmtag { "opfilter" "!!SHOP/GEOMETRY!!" }
>>>>> parmtag { "spare_category" "Geometry" } }
>>>>> parm {
>>>>> name "vm_rendersubd" label "Polygons As
>>>>> Subdivision (Mantra)"
>>>>> type toggle default { "0" }
>>>>> range { 0 1 } export none
>>>>> parmtag { "spare_category" "Geometry" } }
>>>>> parm {
>>>>> name "vm_renderpoints" label "Render As
>>>>> Points (Mantra)"
>>>>> type toggle default { "0" }
>>>>> range { 0 1 } export none
>>>>> parmtag { "spare_category" "Geometry" } }
>>>>> parm {
>>>>> name "vm_metavolume" label "Metaballs
>>>>> as Volume" type toggle
>>>>> default { "0" } range { 0 1 }
>>>>> export none parmtag {
>>>>> "spare_category" "Geometry" } } parm { name
>>>>> "vm_coving"
>>>>> label "Coving" type integer
>>>>> default { "1" } menu {
>>>>> "0" "Disable Coving" "1" "Coving for
>>>>> displacement/sub-d"
>>>>> "2" "Coving for all primitives" } range { 0
>>>>> 10 } export none
>>>>> parmtag { "spare_category" "Geometry" } }
>>>>> parm {
>>>>> name "vm_computeN" label "Automatically
>>>>> Compute Normals"
>>>>> type toggle default { "1" }
>>>>> range { 0 1 } export none
>>>>> parmtag { "spare_category" "Geometry" } } }
>>>>> } group
>>>>> { name "stdswitcher5_3" label "Misc" parm {
>>>>> name "use_dcolor"
>>>>> baseparm export none } parm { name
>>>>> "dcolor"
>>>>> baseparm export none } parm { name
>>>>> "picking" baseparm
>>>>> export none } parm { name "pickscript"
>>>>> baseparm
>>>>> export none } parm { name "caching"
>>>>> baseparm
>>>>> export none } parm { name "vport_shadeopen"
>>>>> baseparm
>>>>> export none } parm { name "vport_displayassubdiv"
>>>>> baseparm
>>>>> invisible export none } } ' circle_cells
>>>>> opset -S on circle_cells
>>>>> opparm circle_cells use_dcolor ( off )
>>>>> chautoscope circle_cells +tx +ty +tz +rx +ry +rz +sx +sy +sz
>>>>> opset -d on -r off -h off -f off -y off -t off -l off -s off -u off -c
>>>>> off -e on -b off -x off circle_cells
>>>>> opexprlanguage -s hscript circle_cells
>>>>> opcf circle_cells
>>>>>
>>>>> # Node circle1 (Sop/circle)
>>>>> opadd -n circle circle1
>>>>> oplocate -x 3.41176 -y 0.0882355 circle1
>>>>> opparm circle1 type ( poly ) orient ( zx ) rad ( 21 21 ) divs ( 100 )
>>>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>>>> -c off -e on -b off circle1
>>>>> opexprlanguage -s hscript circle1
>>>>>
>>>>> # Node triangulate2d1 (Sop/triangulate2d)
>>>>> opadd -n triangulate2d triangulate2d1
>>>>> oplocate -x 3.41176 -y -1.15882 triangulate2d1
>>>>> opparm triangulate2d1 refine ( on ) maxarea ( 2 ) minangle ( 30 )
>>>>> maxnewpts ( 19565 ) removeduplicatepoints ( off )
>>>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>>>> -c off -e on -b off triangulate2d1
>>>>> opexprlanguage -s hscript triangulate2d1
>>>>>
>>>>> # Node facet1 (Sop/facet)
>>>>> opadd -n facet facet1
>>>>> oplocate -x 3.50951 -y -3.19412 facet1
>>>>> opparm facet1 unique ( on )
>>>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>>>> -c off -e on -b off facet1
>>>>> opexprlanguage -s hscript facet1
>>>>>
>>>>> # Node foreach1 (Sop/foreach)
>>>>> opadd -n foreach foreach1
>>>>> oplocate -x 3.41176 -y -5.02471 foreach1
>>>>> chblockbegin
>>>>> chadd -t 0 0 foreach1 numrange2
>>>>> chkey -t 0 -v 10 -m 0 -a 0 -A 0 -T a -F 'nprims("../" + opinput(".",
>>>>> 0))-1' foreach1/numrange2
>>>>> chblockend
>>>>> opparm foreach1 fortype ( number ) numrange ( 0 numrange2 1 )
>>>>> opset -d on -r on -h off -f off -y off -t off -l off -s off -u off -c
>>>>> off -e on -b off foreach1
>>>>> opexprlanguage -s hscript foreach1
>>>>> opcf foreach1
>>>>>
>>>>> # Node each1 (Sop/each)
>>>>> opadd -n each each1
>>>>> oplocate -x 0.6102 -y 4.8513 each1
>>>>> chblockbegin
>>>>> chadd -t 0 0 each1 attribtol
>>>>> chkey -t 0 -v 0.001 -m 0 -a 0 -A 0 -T a -F 'ch("../attribtol")'
>>>>> each1/attribtol
>>>>> chadd -t 0 0 each1 attribval1
>>>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F 'stamp("..",
>>>>> chs("../forstamp") + "1", 0)' each1/attribval1
>>>>> chadd -t 0 0 each1 attribval2
>>>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F 'stamp("..",
>>>>> chs("../forstamp") + "2", 0)' each1/attribval2
>>>>> chadd -t 0 0 each1 attribval3
>>>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F 'stamp("..",
>>>>> chs("../forstamp") + "3", 0)' each1/attribval3
>>>>> chadd -t 0 0 each1 attrib
>>>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F
>>>>> 'ifs(!!strcmp(chs("../fortype"), "attrib"), "", chs("../attrib"))'
>>>>> each1/attrib
>>>>> chadd -t 0 0 each1 group
>>>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F
>>>>> 'ifs(!!strcmp(chs("../fortype"), "group"), "", stamps("..",
>>>>> chs("../forstamp"), ""))' each1/group
>>>>> chadd -t 0 0 each1 feedback
>>>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F '!ch("../mergeresults")'
>>>>> each1/feedback
>>>>> chblockend
>>>>> opparm each1 feedback ( feedback ) group ( group ) attrib ( attrib )
>>>>> attribval ( attribval1 attribval2 attribval3 ) attribtol ( attribtol )
>>>>> forpath ( .. )
>>>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>>>> -c off -e on -b off each1
>>>>> opexprlanguage -s hscript each1
>>>>>
>>>>> # Node delete2 (Sop/delete)
>>>>> opadd -n delete delete2
>>>>> oplocate -x 0.6102 -y 3.89295 delete2
>>>>> chblockbegin
>>>>> chadd -t 0 0 delete2 rangeend
>>>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F '$N' delete2/rangeend
>>>>> chadd -t 0 0 delete2 filter
>>>>> chkey -t 0 -v 1 -m 0 -a 0 -A 0 -T a -F 'stamp("../", "FORVALUE", 0)
>>>>> == prim("../" + opinput(".", 0), $PR, "__primnum", 0)' delete2/filter
>>>>> chblockend
>>>>> opparm delete2 negate ( keep ) groupop ( filter ) filter ( filter )
>>>>> pattern ( "" )
>>>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>>>> -c off -e on -b off delete2
>>>>> opexprlanguage -s hscript delete2
>>>>>
>>>>> # Node fit1 (Sop/fit)
>>>>> opadd -n fit fit1
>>>>> oplocate -x 0.610753 -y 0.946953 fit1
>>>>> opparm fit1 stdswitcher ( 2 2 2 ) method ( interp ) orderu ( 3 )
>>>>> orderv ( 3 ) smooth ( 0.343 ) scope ( breakpnt ) dataparmv ( uniform )
>>>>> closeu ( wu ) closev ( wv ) corners ( on )
>>>>> opset -d on -r on -h off -f off -y off -t off -l off -s off -u off -c
>>>>> off -e on -b off fit1
>>>>> opexprlanguage -s hscript fit1
>>>>>
>>>>> # Node circle1 (Sop/circle)
>>>>> opadd -n circle circle1
>>>>> oplocate -x 3.01075 -y 3.7 circle1
>>>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>>>> -c off -e on -b off circle1
>>>>> opexprlanguage -s hscript circle1
>>>>>
>>>>> # Node resample1 (Sop/resample)
>>>>> opadd -n resample resample1
>>>>> oplocate -x 0.622517 -y 2.92353 resample1
>>>>> opparm resample1 edge ( on ) dolength ( off ) dosegs ( on ) segs ( 2 )
>>>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>>>> -c off -e on -b off resample1
>>>>> opexprlanguage -s hscript resample1
>>>>>
>>>>> # Node delete1 (Sop/delete)
>>>>> opadd -n delete delete1
>>>>> oplocate -x 0.610753 -y 1.85283 delete1
>>>>> chblockbegin
>>>>> chadd -t 0 0 delete1 rangeend
>>>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F '$N' delete1/rangeend
>>>>> chblockend
>>>>> opparm delete1 entity ( point ) groupop ( range ) range ( -1 rangeend )
>>>>> opset -d off -r off -h off -f off -y off -t on -l off -s off -u off -c
>>>>> off -e on -b off delete1
>>>>> opexprlanguage -s hscript delete1
>>>>> oporder -e each1 delete2 fit1 circle1 resample1 delete1
>>>>> opcf ..
>>>>>
>>>>> # Node __PRIMNUM (Sop/attribcreate)
>>>>> opadd -n attribcreate __PRIMNUM
>>>>> oplocate -x 3.41176 -y -4.07765 __PRIMNUM
>>>>> chblockbegin
>>>>> chadd -t 0 0 __PRIMNUM value1
>>>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F '$PR' __PRIMNUM/value1
>>>>> chblockend
>>>>> opparm __PRIMNUM name ( __primnum ) varname ( __PRIMNUM ) class (
>>>>> primitive ) value ( value1 0 0 0 )
>>>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>>>> -c off -e on -b off __PRIMNUM
>>>>> opexprlanguage -s hscript __PRIMNUM
>>>>>
>>>>> # Node foreach2 (Sop/foreach)
>>>>> opadd -n foreach foreach2
>>>>> oplocate -x 3.50951 -y -2.29415 foreach2
>>>>> opparm foreach2 fortype ( number ) numrange ( 0 4 1 ) mergeresults (
>>>>> off )
>>>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>>>> -c off -e on -b off foreach2
>>>>> opexprlanguage -s hscript foreach2
>>>>> opcf foreach2
>>>>>
>>>>> # Node each1 (Sop/each)
>>>>> opadd -n each each1
>>>>> oplocate -x 0.6102 -y 4.8513 each1
>>>>> chblockbegin
>>>>> chadd -t 0 0 each1 attribtol
>>>>> chkey -t 0 -v 0.001 -m 0 -a 0 -A 0 -T a -F 'ch("../attribtol")'
>>>>> each1/attribtol
>>>>> chadd -t 0 0 each1 attribval1
>>>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F 'stamp("..",
>>>>> chs("../forstamp") + "1", 0)' each1/attribval1
>>>>> chadd -t 0 0 each1 attribval2
>>>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F 'stamp("..",
>>>>> chs("../forstamp") + "2", 0)' each1/attribval2
>>>>> chadd -t 0 0 each1 attribval3
>>>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F 'stamp("..",
>>>>> chs("../forstamp") + "3", 0)' each1/attribval3
>>>>> chadd -t 0 0 each1 attrib
>>>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F
>>>>> 'ifs(!!strcmp(chs("../fortype"), "attrib"), "", chs("../attrib"))'
>>>>> each1/attrib
>>>>> chadd -t 0 0 each1 group
>>>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F
>>>>> 'ifs(!!strcmp(chs("../fortype"), "group"), "", stamps("..",
>>>>> chs("../forstamp"), ""))' each1/group
>>>>> chadd -t 0 0 each1 feedback
>>>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F '!ch("../mergeresults")'
>>>>> each1/feedback
>>>>> chblockend
>>>>> opparm each1 feedback ( feedback ) group ( group ) attrib ( attrib )
>>>>> attribval ( attribval1 attribval2 attribval3 ) attribtol ( attribtol )
>>>>> forpath ( .. )
>>>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>>>> -c off -e on -b off each1
>>>>> opexprlanguage -s hscript each1
>>>>>
>>>>> # Node divide2 (Sop/divide)
>>>>> opadd -n divide divide2
>>>>> oplocate -x 0.6102 -y 3.42343 divide2
>>>>> opparm divide2 convex ( off ) dual ( on )
>>>>> opset -d on -r on -h off -f off -y off -t off -l off -s off -u off -c
>>>>> off -e on -b off divide2
>>>>> opexprlanguage -s hscript divide2
>>>>> oporder -e each1 divide2
>>>>> opcf ..
>>>>> oporder -e circle1 triangulate2d1 facet1 foreach1 __PRIMNUM foreach2
>>>>> opcf ..
>>>>>
>>>>> opcf /obj
>>>>> opcf circle_cells
>>>>> opwire -n circle1 -0 triangulate2d1
>>>>> opwire -n foreach2 -0 facet1
>>>>> opwire -n __PRIMNUM -0 foreach1
>>>>> opcf foreach1
>>>>> opwire -n -i 0 -0 each1
>>>>> opwire -n each1 -0 delete2
>>>>> opwire -n delete1 -0 fit1
>>>>> opwire -n delete2 -0 resample1
>>>>> opwire -n resample1 -0 delete1
>>>>> opcf ..
>>>>> opwire -n facet1 -0 __PRIMNUM
>>>>> opwire -n triangulate2d1 -0 foreach2
>>>>> opcf foreach2
>>>>> opwire -n -i 0 -0 each1
>>>>> opwire -n each1 -0 divide2
>>>>> opcf ..
>>>>> opcf ..
>>>>> opcf $saved_path
>>>>>
>>>>> ######################################################
>>>>>
>>>>> 2009/8/5 Doug Struthers <dragonfly at dougstruthers.com>:
>>>>> > Thanks for your inputs.
>>>>> >
>>>>> > Since there do not need to be thousands of them I bet I can iterate on
>>>>> them
>>>>> > to get a close approximation without taking a long long time to
>>>>> > compute.
>>>>> >
>>>>> > It is intriguing to think that there may be a function with dops that
>>>>> > the
>>>>> > solution falls out of but I am still a way down the learning curve
>>>>> > with
>>>>> all
>>>>> > the functionality that exists in vops let alone rolling my own.
>>>>> >
>>>>> > Cheers
>>>>> >
>>>>> > Doug
>>>>> >
>>>>> > On Wed, Aug 5, 2009 at 9:09 AM, Gene Dreitser <keyframe at rogers.com>
>>>>> wrote:
>>>>> >
>>>>> >>
>>>>> >> Might also be worth it to take a look at the output of the isooffset
>>>>> >> sop
>>>>> >> using the 'tetra-mesh' output type. Tetra-type set to 'cubes'.
>>>>> >>
>>>>> >> While it will not pack perfectly, it DOES create a predictable
>>>>> >> pattern
>>>>> of
>>>>> >> rows and columns that one might be able to make use, and as an added
>>>>> bonus,
>>>>> >> it can use ray-intersect to sample the original mesh.
>>>>> >>
>>>>> >> Best,
>>>>> >>
>>>>> >> G
>>>>> >>
>>>>> >> --
>>>>> >> Gene Dreitser
>>>>> >> Loki Visual Effects
>>>>> >> p: 416.532.5654 // c: 416.803.0682 // www.lokivfx.com
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> ----- Original Message ----
>>>>> >> From: Andy Nicholas <andy at andynicholas.com>
>>>>> >> To: sidefx-houdini-list at sidefx.com
>>>>> >> Sent: Wednesday, August 5, 2009 12:05:13 PM
>>>>> >> Subject: Re: [Sidefx-houdini-list] Space filling circles
>>>>> >>
>>>>> >> Hi Doug,
>>>>> >> Are you asking this because you know of this being done somewhere
>>>>> >> else?
>>>>> I
>>>>> >> only ask because I just Googled this (out of my own interest), and
>>>>> judging
>>>>> >> on how many papers are written on this topic, I'd say that it's a
>>>>> >> non-trivial problem to solve.
>>>>> >>
>>>>> >> The only thing that springs to mind, would be to create an iterative
>>>>> >> approach, using the SOP solver or the Feedback SOP (proto_install).
>>>>> >>
>>>>> >> Note that I haven't tested this, or fully thought it through, but the
>>>>> >> following... might... just... work...
>>>>> >>
>>>>> >> Start off with a triangular polygon with a random sized disc at each
>>>>> >> vertex so that their circumferences touch. From that, take a pair of
>>>>> discs
>>>>> >> and create another randomly sized one and place it (using simple
>>>>> >> trigonometry) so that it touches the first two. Extend the triangle
>>>>> >> into
>>>>> a
>>>>> >> four sided polygon with the new point at the center of the new disc.
>>>>> >> Repeat the process, but ignoring any discs internal to the polygon.
>>>>> >>
>>>>> >> I can see this approach breaking down if you ever have a non-convex
>>>>> >> polygon, but there are probably some constraints that you could
>>>>> >> figure
>>>>> out
>>>>> >> that will prevent this from happening.
>>>>> >>
>>>>> >> Andy
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> > Hi
>>>>> >> >
>>>>> >> > Can anyone point me to a Houdini method (or other solution) for
>>>>> packing
>>>>> >> > random sized circles so that they are tightly packed and each
>>>>> >> > circumference
>>>>> >> > just touches its neighbors?
>>>>> >> >
>>>>> >> > Thanks
>>>>> >> >
>>>>> >> > Doug
>>>>> >> >
>>>>> >> > --
>>>>> >> > www.dougstruthers.com
>>>>> >> > _______________________________________________
>>>>> >> > Sidefx-houdini-list mailing list
>>>>> >> > Sidefx-houdini-list at sidefx.com
>>>>> >> > https://lists.sidefx.com:443/mailman/listinfo/sidefx-houdini-list
>>>>> >> >
>>>>> >>
>>>>> >>
>>>>> >> _______________________________________________
>>>>> >> Sidefx-houdini-list mailing list
>>>>> >> Sidefx-houdini-list at sidefx.com
>>>>> >> https://lists.sidefx.com:443/mailman/listinfo/sidefx-houdini-list
>>>>> >>
>>>>> >> _______________________________________________
>>>>> >> Sidefx-houdini-list mailing list
>>>>> >> Sidefx-houdini-list at sidefx.com
>>>>> >> https://lists.sidefx.com:443/mailman/listinfo/sidefx-houdini-list
>>>>> >>
>>>>> >
>>>>> >
>>>>> >
>>>>> > --
>>>>> > www.dougstruthers.com
>>>>> > _______________________________________________
>>>>> > Sidefx-houdini-list mailing list
>>>>> > Sidefx-houdini-list at sidefx.com
>>>>> > https://lists.sidefx.com:443/mailman/listinfo/sidefx-houdini-list
>>>>> >
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> =======================================
>>>>> Andrew D Lyons | Digital Artist | http://www.tstex.com
>>>>> =======================================
>>>>> _______________________________________________
>>>>> Sidefx-houdini-list mailing list
>>>>> Sidefx-houdini-list at sidefx.com
>>>>> https://lists.sidefx.com:443/mailman/listinfo/sidefx-houdini-list
>>>>> _______________________________________________
>>>>> Sidefx-houdini-list mailing list
>>>>> Sidefx-houdini-list at sidefx.com
>>>>> https://lists.sidefx.com:443/mailman/listinfo/sidefx-houdini-list
>>>>>
>>>> _______________________________________________
>>>> Sidefx-houdini-list mailing list
>>>> Sidefx-houdini-list at sidefx.com
>>>> https://lists.sidefx.com:443/mailman/listinfo/sidefx-houdini-list
>>>>
>>>
>>>
>>>
>>> --
>>> =======================================
>>> Andrew D Lyons | Digital Artist | http://www.tstex.com
>>> =======================================
>>>
>>
>>
>>
>> --
>> =======================================
>> Andrew D Lyons | Digital Artist | http://www.tstex.com
>> =======================================
>> _______________________________________________
>> Sidefx-houdini-list mailing list
>> Sidefx-houdini-list at sidefx.com
>> https://lists.sidefx.com:443/mailman/listinfo/sidefx-houdini-list
>>
>>
>>
>> _______________________________________________
>> Sidefx-houdini-list mailing list
>> Sidefx-houdini-list at sidefx.com
>> https://lists.sidefx.com:443/mailman/listinfo/sidefx-houdini-list
>>
>
>
>
> _______________________________________________________
> Perfection is achieved when nothing else can be removed
> -Yvon Chouinard
>
> ----------------------------------------------------------------
> This message was sent using IMP, the Internet Messaging Program.
> _______________________________________________
> Sidefx-houdini-list mailing list
> Sidefx-houdini-list at sidefx.com
> https://lists.sidefx.com:443/mailman/listinfo/sidefx-houdini-list
>



-- 
=======================================
Andrew D Lyons | Digital Artist | http://www.tstex.com
=======================================



More information about the Sidefx-houdini-list mailing list