[Sidefx-houdini-list] Space filling circles

Nick Zutphen nvanzutphen at live.com
Sun Aug 14 08:28:34 EDT 2011


Ghehe, 

Good stuff Martin :-)

Nick van Zutphen
----
http://www.nickvanzutphen.com

On Aug 11, 2011, at 1:59 AM, Martin Sawtell wrote:

> Aha!!
> http://paulbourke.net/texture_colour/randomtile/
> 
> :)
> 
> -M
> 
> On 10 August 2011 03:11, Andrew Lyons <tstexture at gmail.com> wrote:
> 
>> Cool! I wonder if he works with the Crystal Method much? :)
>> 
>> 
>> On 7 August 2011 04:11, Martin Sawtell <martin at msawtell.com> wrote:
>> 
>>> I saw Paul Bourke put some recent renders up that were along this theme,
>> he
>>> has this paper on his website:
>>> http://paulbourke.net/texture_colour/randomtile/paper.pdf
>>> It's about filling space with fractal patterns, might be of interest.
>>> Here's
>>> his public album:
>>> 
>>> 
>> https://plus.google.com/photos/117410063754013499525/albums/5627585387387080737
>>> 
>>> 
>>> -M
>>> 
>>> 
>>> On 30 July 2011 05:50, Doug Struthers <dragonfly at dougstruthers.com>
>> wrote:
>>> 
>>>> As I began this thread I should say it was not me though I did find
>> other
>>>> artistic uses and then carved them from wood.  All the help on this
>>>> previously was most helpful.
>>>> 
>>>> Cheers
>>>> 
>>>> 
>>>> On Fri, Jul 29, 2011 at 10:48 AM, Andrew Lyons <tstexture at gmail.com>
>>>> wrote:
>>>> 
>>>>> Looks like someone found an artistic use for this:
>>>>> 
>>>>> 
>>>>> 
>>>> 
>>> 
>> http://www.dj-tronic.com/dancefloormayhem.com/images/2009/TCM_albumcover.jpg
>>>>> 
>>>>> I wonder who the mystery artist was. Anyone know who?
>>>>> 
>>>>> Cheers
>>>>> 
>>>>> 
>>>>> On 6 August 2009 09:26, Andrew D Lyons <tstexture at gmail.com> wrote:
>>>>>> 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
>>>>> 
>>>> 
>>>> 
>>>> 
>>>> --
>>>> 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
>>> 
>> 
>> 
>> 
>> --
>> =======================================
>> 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
> 




More information about the Sidefx-houdini-list mailing list