<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3423175248222521930</id><updated>2011-07-30T17:02:58.443-07:00</updated><category term='Processing'/><category term='MEL'/><category term='DP/CATIA'/><category term='SpredSheet'/><category term='Harold'/><category term='CATIAscript'/><category term='YukiukiH'/><category term='RhinoScript'/><category term='Sky'/><title type='text'>S.S.S.S.</title><subtitle type='html'>S.S.S.S. is about collaboration, cooperation and innovation. A community database of things related to scripting, parametric modeling, and digital project.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ssssociety.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>51</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-6137365098276086164</id><published>2009-08-23T21:03:00.000-07:00</published><updated>2009-08-24T14:21:37.342-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Processing'/><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><title type='text'>Processing with Class</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pYWndsXyWeQ/SpISlaobKpI/AAAAAAAACpA/Tz1hpoRzQqI/s1600-h/classVine05.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 116px;" src="http://1.bp.blogspot.com/_pYWndsXyWeQ/SpISlaobKpI/AAAAAAAACpA/Tz1hpoRzQqI/s200/classVine05.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5373377739419757202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;//---------------------------------------&lt;br /&gt;ArrayList veinpopulation;&lt;br /&gt;ArrayList leafpopulation;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#999900;"&gt;void setup&lt;/span&gt;(){&lt;br /&gt;&amp;nbsp;size(1200, 700);&lt;br /&gt;&amp;nbsp;//background(241);&lt;br /&gt;&amp;nbsp;smooth();&lt;br /&gt;&amp;nbsp;int w = 60;&lt;br /&gt;&amp;nbsp;veinpopulation = new ArrayList();&lt;br /&gt;&amp;nbsp;for( int i=0; i&amp;lt;11; i++ ){&lt;br /&gt;&amp;nbsp;&amp;nbsp;veinpopulation.add( new &lt;span class="Apple-style-span"  style="color:#FF9900;"&gt;vein&lt;/span&gt;( int(random(w, width-w)), int(random(7, 51)) ));&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#999900;"&gt;void draw&lt;/span&gt;(){&lt;br /&gt;&amp;nbsp;background(241);&lt;br /&gt;&amp;nbsp;noLoop();&lt;br /&gt;&amp;nbsp;for( int i=0; i&amp;lt;veinpopulation.size(); i++ ){&lt;br /&gt;&amp;nbsp;&amp;nbsp;vein v = (vein) veinpopulation.get(i);&lt;br /&gt;&amp;nbsp;&amp;nbsp;v.render();&lt;br /&gt;&amp;nbsp;&amp;nbsp;for( int j=0; j&amp;lt;leafpopulation.size(); j++ ){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;leaf f = (leaf) leafpopulation.get(j);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;f.render();&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;//---------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//---------------------------------------&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#FF9900;"&gt;class vein&lt;/span&gt;{&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#999900;"&gt;//variables&lt;/span&gt;&lt;br /&gt;int x, leafNum;&lt;br /&gt;int strokeColor = color( int(random(150,221)), int(random(71,180)), 0, int(random(69,255)) );&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#999900;"&gt;//constructor&lt;/span&gt;&lt;br /&gt;vein( int _x, int _leafNum ){&lt;br /&gt;&amp;nbsp;x = _x;&lt;br /&gt;&amp;nbsp;leafNum = _leafNum;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#999900;"&gt;void render&lt;/span&gt;(){&lt;br /&gt;&amp;nbsp;strokeWeight(1);&lt;br /&gt;&amp;nbsp;stroke( strokeColor );&lt;br /&gt;&amp;nbsp;line( x, 0, x, height );&lt;br /&gt;&amp;nbsp;int gap = height /leafNum;&lt;br /&gt;&amp;nbsp;int r = int(random(gap));&lt;br /&gt;&amp;nbsp;int direction = 1;&lt;br /&gt;&amp;nbsp;leafpopulation = new ArrayList();&lt;br /&gt;&amp;nbsp;for( int i=0; i&amp;lt;leafNum; i++ ){&lt;br /&gt;&amp;nbsp;&amp;nbsp;int fillColor = color( int(random(150,221)), int(random(71,180)), 0, &amp;nbsp;&amp;nbsp;int(random(69,255)) );&lt;br /&gt;&amp;nbsp;&amp;nbsp;leafpopulation.add( new &lt;span class="Apple-style-span"  &amp;nbsp;&amp;nbsp;style="color:#FF9900;"&gt;leaf&lt;/span&gt;( x, gap*i +r, int(random(7, 41)), direction, fillColor ));&lt;br /&gt;&amp;nbsp;&amp;nbsp;direction = -direction;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;//---------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//---------------------------------------&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#FF9900;"&gt;class leaf&lt;/span&gt;{&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#999900;"&gt;//variables&lt;/span&gt;&lt;br /&gt;int x, y, leafSize, leafDir, leafSpeed, leafColor;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#999900;"&gt;//constructor&lt;/span&gt;&lt;br /&gt;leaf( int _x, int _y, int _leafSize, int _leafDir, int _leafColor ){&lt;br /&gt;&amp;nbsp;x = _x;&lt;br /&gt;&amp;nbsp;y = _y;&lt;br /&gt;&amp;nbsp;leafSize = _leafSize;&lt;br /&gt;&amp;nbsp;leafDir = _leafDir;&lt;br /&gt;&amp;nbsp;leafColor = _leafColor;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#999900;"&gt;void render&lt;/span&gt;(){&lt;br /&gt;&amp;nbsp;noStroke();&lt;br /&gt;&amp;nbsp;fill( leafColor );&lt;br /&gt;&amp;nbsp;pushMatrix();&lt;br /&gt;&amp;nbsp;translate(x, y);   //move to position&lt;br /&gt;&amp;nbsp;scale( leafSize );   //scale to size&lt;br /&gt;&amp;nbsp;beginShape();   //draw the shape&lt;br /&gt;&amp;nbsp;vertex( leafDir, -0.6875 );&lt;br /&gt;&amp;nbsp;bezierVertex( leafDir, -0.6875, leafDir*0.4375, -1.03125, 0, 0 );&lt;br /&gt;&amp;nbsp;bezierVertex( 0, 0, leafDir, 0.375, leafDir, -0.6875 );&lt;br /&gt;&amp;nbsp;endShape();&lt;br /&gt;&amp;nbsp;popMatrix();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;//---------------------------------------&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-6137365098276086164?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6137365098276086164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6137365098276086164'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2009/08/function-vs-class_23.html' title='Processing with Class'/><author><name>yukie hirashima</name><uri>http://www.blogger.com/profile/04159422168530372402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-NtRlnw4gv5E/TWH6AuPKIAI/AAAAAAAACyA/dfVxEU80Gak/s220/DSC05955.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pYWndsXyWeQ/SpISlaobKpI/AAAAAAAACpA/Tz1hpoRzQqI/s72-c/classVine05.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-6409917014024775583</id><published>2009-08-23T20:57:00.000-07:00</published><updated>2009-08-24T12:59:11.738-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Processing'/><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><title type='text'>Processing with Function</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_pYWndsXyWeQ/SpISrXXpKEI/AAAAAAAACpI/RPf1zJpbDMc/s1600-h/vine18.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 116px;" src="http://3.bp.blogspot.com/_pYWndsXyWeQ/SpISrXXpKEI/AAAAAAAACpI/RPf1zJpbDMc/s200/vine18.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5373377841623279682" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;//---------------------------------------&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#33CCFF;"&gt;void setup&lt;/span&gt;(){&lt;br /&gt;&amp;nbsp;size(1200, 700);&lt;br /&gt;&amp;nbsp;smooth();&lt;br /&gt;&amp;nbsp;background(241);&lt;br /&gt;&amp;nbsp;noLoop();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#33CCFF;"&gt;void draw&lt;/span&gt;(){&lt;br /&gt;&amp;nbsp;for( int i=0; i&amp;lt;9; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;int s = int(random(7, 51));&lt;br /&gt;&amp;nbsp;&amp;nbsp;int w = 2*s;&lt;br /&gt;&amp;nbsp;&amp;nbsp;int n = int(random(9, 51));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="Apple-style-span"  style="color:#33CCFF;"&gt;drawVine&lt;/span&gt;( &amp;nbsp;int(random(w, width-w)), n, s );&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;//---------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//---------------------------------------&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#33CCFF;"&gt;void drawVine&lt;/span&gt;( int x, int numLeaves, int leafSize ){&lt;br /&gt;&amp;nbsp;strokeWeight(1);&lt;br /&gt;&amp;nbsp;stroke( 0, int(random(0, 71)), int(random(71, 180)));&lt;br /&gt;&amp;nbsp;line( x, 0, x, height );&lt;br /&gt;&amp;nbsp;strokeWeight( 1/leafSize );&lt;br /&gt;&amp;nbsp;int gap = height /numLeaves;&lt;br /&gt;&amp;nbsp;int direction = 1;&lt;br /&gt;&amp;nbsp;for( int i=0; i&amp;lt;numLeaves; i++ ){&lt;br /&gt;&amp;nbsp;&amp;nbsp;int colorR = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;int colorG = int(random(0, 71));&lt;br /&gt;&amp;nbsp;&amp;nbsp;int colorB = int(random(71, 180));&lt;br /&gt;&amp;nbsp;&amp;nbsp;noStroke();&lt;br /&gt;&amp;nbsp;&amp;nbsp;fill( colorR, colorG, colorB, random(99, 255) ); //random color for fill&lt;br /&gt;&amp;nbsp;&amp;nbsp;int r = int(random(gap));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="Apple-style-span"  style="color:#33CCFF;"&gt;drawLeaf&lt;/span&gt;( x, gap*i +r, leafSize, direction );&lt;br /&gt;&amp;nbsp;&amp;nbsp;direction = -direction;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;//---------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//---------------------------------------&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#33CCFF;"&gt;void drawLeaf&lt;/span&gt;( int x, int y, int size, int dir ){&lt;br /&gt;&amp;nbsp;pushMatrix();&lt;br /&gt;&amp;nbsp;translate(x, y);   //move to position&lt;br /&gt;&amp;nbsp;scale(size);   //scale to size&lt;br /&gt;&amp;nbsp;beginShape();   //draw the shape&lt;br /&gt;&amp;nbsp;vertex( dir, -0.6875 );&lt;br /&gt;&amp;nbsp;bezierVertex( dir, -0.6875, dir*0.4375, -1.03125, 0, 0 );&lt;br /&gt;&amp;nbsp;bezierVertex( 0, 0, dir, 0.375, dir, -0.6875 );&lt;br /&gt;&amp;nbsp;endShape();&lt;br /&gt;&amp;nbsp;popMatrix();&lt;br /&gt;}&lt;br /&gt;//---------------------------------------&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-6409917014024775583?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6409917014024775583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6409917014024775583'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2009/08/function-vs-class.html' title='Processing with Function'/><author><name>yukie hirashima</name><uri>http://www.blogger.com/profile/04159422168530372402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-NtRlnw4gv5E/TWH6AuPKIAI/AAAAAAAACyA/dfVxEU80Gak/s220/DSC05955.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_pYWndsXyWeQ/SpISrXXpKEI/AAAAAAAACpI/RPf1zJpbDMc/s72-c/vine18.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-2857506493918722144</id><published>2009-03-17T23:45:00.000-07:00</published><updated>2009-03-17T23:55:49.332-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Hexagon Panelization</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_DACBIEbkSBY/ScCZZ4L2qgI/AAAAAAAAANg/X1rRi-O0ypE/s1600-h/ScreenShot183.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 165px;" src="http://4.bp.blogspot.com/_DACBIEbkSBY/ScCZZ4L2qgI/AAAAAAAAANg/X1rRi-O0ypE/s320/ScreenShot183.jpg" alt="" id="BLOGGER_PHOTO_ID_5314416230155069954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_DACBIEbkSBY/ScCZTpO5SRI/AAAAAAAAANY/OIIBCKyN_qA/s1600-h/000.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 130px;" src="http://2.bp.blogspot.com/_DACBIEbkSBY/ScCZTpO5SRI/AAAAAAAAANY/OIIBCKyN_qA/s200/000.jpg" alt="" id="BLOGGER_PHOTO_ID_5314416123062077714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_DACBIEbkSBY/ScCZO107QvI/AAAAAAAAANQ/WVhDKANoF3Y/s1600-h/ScreenShot03.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 111px;" src="http://1.bp.blogspot.com/_DACBIEbkSBY/ScCZO107QvI/AAAAAAAAANQ/WVhDKANoF3Y/s200/ScreenShot03.jpg" alt="" id="BLOGGER_PHOTO_ID_5314416040543470322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_DACBIEbkSBY/ScCaeJyrt3I/AAAAAAAAAN4/NzQKCQ3uSy4/s1600-h/ScreenShot01.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 111px;" src="http://2.bp.blogspot.com/_DACBIEbkSBY/ScCaeJyrt3I/AAAAAAAAAN4/NzQKCQ3uSy4/s200/ScreenShot01.jpg" alt="" id="BLOGGER_PHOTO_ID_5314417403112437618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_DACBIEbkSBY/ScCaZjb3sUI/AAAAAAAAANw/5Ga_65Ll-Tw/s1600-h/ScreenShot02.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 111px;" src="http://4.bp.blogspot.com/_DACBIEbkSBY/ScCaZjb3sUI/AAAAAAAAANw/5Ga_65Ll-Tw/s200/ScreenShot02.jpg" alt="" id="BLOGGER_PHOTO_ID_5314417324096729410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;Panelization casestydy: Santa Caterina Market.&lt;br /&gt;&lt;br /&gt;Each panel is flat, leaving slight gap to its neighbors. I started with hexagon-shape grid on surface as in the last image. Six points are identified and stored in array per one panel. Then to produce flat panels, I projected each vector to each normal plane (red). Vector projection is simple VectorAdd method except that I needed to flip the normals (blue) depending on the beginning angle between normals and direct vectors (white) on surface.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-2857506493918722144?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/2857506493918722144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/2857506493918722144'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2009/03/hexagon-panelization.html' title='Hexagon Panelization'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_DACBIEbkSBY/ScCZZ4L2qgI/AAAAAAAAANg/X1rRi-O0ypE/s72-c/ScreenShot183.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-393168119362034302</id><published>2008-10-18T23:29:00.000-07:00</published><updated>2008-10-19T00:07:33.037-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CATIAscript'/><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><title type='text'>PowerCopy Automation</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_DACBIEbkSBY/SPrbEK3-LPI/AAAAAAAAAMo/IIvOkzhztw0/s1600-h/instanciation03s.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_DACBIEbkSBY/SPrbEK3-LPI/AAAAAAAAAMo/IIvOkzhztw0/s320/instanciation03s.jpg" alt="" id="BLOGGER_PHOTO_ID_5258756379593551090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;Fabric pattern completed via powerCopy Automation. Method is the following three steps →&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;STEP1. &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(204, 204, 255);font-family:trebuchet ms;" &gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;BeginInstanceFactory&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;: to initialize &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;the InstanceFactory with the reference and the document where it is stored. This step must be called once at the beginning whatever the number of instantiations are done.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;STEP2. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;It is composed of five methods that must be called in the order. This set of five methods can be called in a loop in order to make several instantiations.&lt;br /&gt;&lt;br /&gt;a. The method &lt;span style="color: rgb(204, 204, 255);"&gt;BeginInstantiate&lt;/span&gt;: to initialize all data of the reference.&lt;br /&gt;b. The method &lt;span style="color: rgb(204, 204, 255);"&gt;PutInputData&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;: &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;to set a value to any input.&lt;br /&gt;c. The method &lt;span style="color: rgb(204, 204, 255);"&gt;GetParameter&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;: &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;to retrieve published parameter.&lt;br /&gt;d. The method &lt;span style="color: rgb(204, 204, 255);"&gt;Instantiate&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;: &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;to recreate the reference.&lt;br /&gt;e. The method &lt;span style="color: rgb(204, 204, 255);"&gt;EndInstantiate&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;: &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;to indicate the instantiation is done.&lt;br /&gt;&lt;br /&gt;STEP3. &lt;span style="color: rgb(204, 204, 255);"&gt;EndInstantiateFactory&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;: &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;to end instantiation and cleaning the InstanceFactory. When doing several instantiations in a loop, this step must be called just once at the end of all instantiations.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-393168119362034302?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/393168119362034302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/393168119362034302'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/10/powercopy-automation.html' title='PowerCopy Automation'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_DACBIEbkSBY/SPrbEK3-LPI/AAAAAAAAAMo/IIvOkzhztw0/s72-c/instanciation03s.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-5352478638003911596</id><published>2008-10-11T22:44:00.000-07:00</published><updated>2008-10-15T07:02:51.067-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>boundary cone</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_DACBIEbkSBY/SPQsNcwT1xI/AAAAAAAAAMI/iqVbAWcKEP8/s1600-h/boundary_cone.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_DACBIEbkSBY/SPQsNcwT1xI/AAAAAAAAAMI/iqVbAWcKEP8/s200/boundary_cone.jpg" alt="" id="BLOGGER_PHOTO_ID_5256875274616952594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;'Author: YukiukiH&lt;br /&gt;'Date: 10/08/2008&lt;br /&gt;'compatibility: Rhino4&lt;br /&gt;''boundary CONE&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;Dim strTrgPt, arrTrgPt&lt;br /&gt;strTrgPt = Rhino.GetObject ("select a target point", 1)&lt;br /&gt;Dim strALLRefPts&lt;br /&gt;strALLRefPts = Rhino.GetObjects ("select reference points", 1)&lt;br /&gt;Dim strPtDir, arrPtDir, arrDirVector&lt;br /&gt;strPtDir = Rhino.GetObject ("select a point for direction", 1)&lt;br /&gt;Dim strRefPts&lt;br /&gt;strRefPts = boundaryCone (strTrgPt, strALLRefPts, strPtDir, 400, 30)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'color&lt;/span&gt;&lt;br /&gt;Dim intR, intG, intB&lt;br /&gt;Dim i&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; i = 0 To UBound(strRefPts)  &lt;br /&gt;  intR =255&lt;br /&gt;  intG =25+i*Rnd()*2&lt;br /&gt;  intB =0      &lt;br /&gt;  Call Rhino.ObjectColor (strRefPts(i), RGB(intR, intG, intB))  &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt;&lt;br /&gt;Call Rhino.print("execution completed")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Function&lt;/span&gt; boundaryCone (strTrgPt, strALLRefPts, strPtDir, dblBoundCos, dblBoundAngle)&lt;br /&gt;Dim arrResult&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'coordinate extraction&lt;/span&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;Dim arrTrgPt&lt;br /&gt;arrTrgPt = Rhino.PointCoordinates (strTrgPt) &lt;br /&gt;Dim arrALLRefPts()&lt;br /&gt;Dim i&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; i = 0 To UBound(strALLRefPts)&lt;br /&gt;  ReDim Preserve arrALLRefPts(i)&lt;br /&gt;  arrALLRefPts(i) = Rhino.PointCoordinates (strALLRefPts(i))  &lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;Next&lt;/span&gt;&lt;br /&gt;Dim arrPtDir&lt;br /&gt;arrPtDir = Rhino.PointCoordinates (strPtDir) &lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'set boundary&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;Dim arrLine1(1), arrLine2(1)&lt;br /&gt;Dim dblAngles, dblVectorLength, dblDist&lt;br /&gt;Dim arrREFPts(), strRefPts()&lt;br /&gt;Dim n, m&lt;br /&gt;n = 0  &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; m = 0 To UBound(arrALLRefPts) &lt;br /&gt;  arrLine1(0) = arrPtDir&lt;br /&gt;  arrLine1(1) = arrTrgPt&lt;br /&gt;  arrLine2(0) = arrALLRefPts(m)&lt;br /&gt;  arrLine2(1) = arrTrgPt&lt;br /&gt;  dblAngles = Rhino.Angle2 (arrLine1, arrLine2)         &lt;br /&gt;  &lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;If&lt;/span&gt; dblAngles(0) &lt; dblBoundAngle &lt;span style="color: rgb(153, 153, 0);"&gt;Then&lt;/span&gt;   &lt;br /&gt;    dblVectorLength = Rhino.Distance (arrALLRefPts(m), arrTrgPt)&lt;br /&gt;    dblDist = dblVectorLength *Cos(dblAngles(0)*2*dblPi/360) &lt;span style="color: rgb(153, 153, 0);"&gt;'cone&lt;/span&gt;         &lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;If&lt;/span&gt; dblDist &lt; dblBoundCos &lt;span style="color: rgb(153, 153, 0);"&gt;Then&lt;/span&gt;              &lt;br /&gt;      Call Rhino.Print ("through point: " &amp; CStr(n+1))  &lt;br /&gt;      ReDim Preserve arrRefPts(n)&lt;br /&gt;      arrRefPts(n) = arrALLRefPts(m)&lt;br /&gt;      ReDim Preserve strRefPts(n)   &lt;br /&gt;      strRefPts(n) = strALLRefPts(m)                  &lt;br /&gt;      n = n+1      &lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;End If&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;End If&lt;/span&gt; &lt;br /&gt;    &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt; &lt;br /&gt;'---------------------------------------&lt;br /&gt;arrResult = strRefPts&lt;br /&gt;boundaryCone = arrResult&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;End Function&lt;/span&gt; &lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-5352478638003911596?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/5352478638003911596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/5352478638003911596'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/10/boundary-cone.html' title='boundary cone'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_DACBIEbkSBY/SPQsNcwT1xI/AAAAAAAAAMI/iqVbAWcKEP8/s72-c/boundary_cone.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-2653416759591131615</id><published>2008-10-11T10:42:00.000-07:00</published><updated>2008-10-13T22:31:21.612-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>boundary partial sphere</title><content type='html'>&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_DACBIEbkSBY/SPECZWyULII/AAAAAAAAALo/u6ecATPUyjI/s1600-h/boundary_partial+sphere.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_DACBIEbkSBY/SPECZWyULII/AAAAAAAAALo/u6ecATPUyjI/s200/boundary_partial+sphere.jpg" alt="" id="BLOGGER_PHOTO_ID_5255984874754681986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;'Author: YukiukiH&lt;br /&gt;'Date: 10/08/2008&lt;br /&gt;'compatibility: Rhino4&lt;br /&gt;''boundary PARTIAL SPHERE&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;Dim strTrgPt, arrTrgPt&lt;br /&gt;strTrgPt = Rhino.GetObject ("select a target point", 1)&lt;br /&gt;Dim strALLRefPts&lt;br /&gt;strALLRefPts = Rhino.GetObjects ("select reference points", 1)&lt;br /&gt;Dim strPtDir, arrPtDir, arrDirVector&lt;br /&gt;strPtDir = Rhino.GetObject ("select a point for direction", 1)&lt;br /&gt;Dim strRefPts&lt;br /&gt;strRefPts = boundaryPartialSphere (strTrgPt, strALLRefPts, strPtDir, 450, 30)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'color&lt;/span&gt;&lt;br /&gt;Dim intR, intG, intB&lt;br /&gt;Dim i&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; i = 0 To UBound(strRefPts)  &lt;br /&gt;  intR =255&lt;br /&gt;  intG =25+i*Rnd()*2&lt;br /&gt;  intB =0&lt;br /&gt;  Call Rhino.ObjectColor (strRefPts(i), RGB(intR, intG, intB))  &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt;&lt;br /&gt;Call Rhino.print("execution completed")&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Function&lt;/span&gt; boundaryPartialSphere (strTrgPt, strALLRefPts, strPtDir, dblBoundR, dblBoundAngle)&lt;br /&gt;Dim arrResult&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'coordinate extraction&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;Dim arrTrgPt&lt;br /&gt;arrTrgPt = Rhino.PointCoordinates (strTrgPt) &lt;br /&gt;Dim arrALLRefPts()&lt;br /&gt;Dim i&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; i = 0 To UBound(strALLRefPts)&lt;br /&gt;  ReDim Preserve arrALLRefPts(i)&lt;br /&gt;  arrALLRefPts(i) = Rhino.PointCoordinates (strALLRefPts(i))  &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt;&lt;br /&gt;Dim arrPtDir&lt;br /&gt;arrPtDir = Rhino.PointCoordinates (strPtDir) &lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'set boundary&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;Dim dblDist, dblAngles, arrDir&lt;br /&gt;Dim arrLine1(1), arrLine2(1)&lt;br /&gt;Dim arrREFPts(), strRefPts()&lt;br /&gt;Dim n, m&lt;br /&gt;n = 0  &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; m = 0 To UBound(arrALLRefPts) &lt;br /&gt;  dblDist = Rhino.Distance (arrTrgPt, arrALLRefPts(m))&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;If&lt;/span&gt; dblDist &lt; dblBoundR &lt;span style="color: rgb(153, 153, 0);"&gt;Then&lt;/span&gt;     &lt;br /&gt;    arrLine1(0) = arrPtDir&lt;br /&gt;    arrLine1(1) = arrTrgPt&lt;br /&gt;    arrLine2(0) = arrALLRefPts(m)&lt;br /&gt;    arrLine2(1) = arrTrgPt           &lt;br /&gt;    dblAngles = Rhino.Angle2 (arrLine1, arrLine2)               &lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;If&lt;/span&gt; dblAngles(0) &lt; dblBoundAngle &lt;span style="color: rgb(153, 153, 0);"&gt;Then&lt;/span&gt;              &lt;br /&gt;      Call Rhino.Print ("through point: " &amp; CStr(n+1))  &lt;br /&gt;      ReDim Preserve arrRefPts(n)&lt;br /&gt;      arrRefPts(n) = arrALLRefPts(m)&lt;br /&gt;      ReDim Preserve strRefPts(n)   &lt;br /&gt;      strRefPts(n) = strALLRefPts(m)                  &lt;br /&gt;      n = n+1      &lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;End If&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;End If&lt;/span&gt; &lt;br /&gt;  &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt; &lt;br /&gt;'---------------------------------------&lt;br /&gt;arrResult = strRefPts&lt;br /&gt;boundaryPartialSphere = arrResult&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;End Function&lt;/span&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-2653416759591131615?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/2653416759591131615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/2653416759591131615'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/10/boundary-partial-sphere.html' title='boundary partial sphere'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_DACBIEbkSBY/SPECZWyULII/AAAAAAAAALo/u6ecATPUyjI/s72-c/boundary_partial+sphere.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-2199758884694808329</id><published>2008-10-11T10:40:00.000-07:00</published><updated>2008-10-13T22:30:06.942-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>boundary sphere</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_DACBIEbkSBY/SPEBFlSt6HI/AAAAAAAAALY/mwm6_yTeWHs/s1600-h/boundary_sphere.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_DACBIEbkSBY/SPEBFlSt6HI/AAAAAAAAALY/mwm6_yTeWHs/s200/boundary_sphere.jpg" alt="" id="BLOGGER_PHOTO_ID_5255983435539671154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;'Author: YukiukiH&lt;br /&gt;'Date: 10/08/2008&lt;br /&gt;'compatibility: Rhino4&lt;br /&gt;''boundary SPHERE&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;Dim strTrgPt&lt;br /&gt;strTrgPt = Rhino.GetObject ("select a target point", 1)&lt;br /&gt;Dim strALLRefPts&lt;br /&gt;strALLRefPts = Rhino.GetObjects ("select reference points", 1)&lt;br /&gt;Dim strRefPts&lt;br /&gt;strRefPts = boundarySphere (strTrgPt, strALLRefPts, 250)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'color&lt;/span&gt;&lt;br /&gt;Dim intR, intG, intB&lt;br /&gt;Dim i&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; i = 0 To UBound(strRefPts)&lt;br /&gt; intR =255&lt;br /&gt; intG =25+i*Rnd()*2&lt;br /&gt; intB =0&lt;br /&gt; Call Rhino.ObjectColor (strRefPts(i), RGB(intR, intG, intB)) &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt;&lt;br /&gt;Call Rhino.print("execution completed")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Function&lt;/span&gt; boundarySphere (strTrgPt, strALLRefPts, dblBoundR)&lt;br /&gt;Dim arrResult&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'coordinate extraction&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;Dim arrTrgPt&lt;br /&gt;arrTrgPt = Rhino.PointCoordinates (strTrgPt)&lt;br /&gt;Dim arrALLRefPts()&lt;br /&gt;Dim i&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; i = 0 To UBound(strALLRefPts)&lt;br /&gt;ReDim Preserve arrALLRefPts(i)&lt;br /&gt;arrALLRefPts(i) = Rhino.PointCoordinates (strALLRefPts(i))&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'set boundary&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;Dim dblDist, arrREFPts(), strRefPts()&lt;br /&gt;Dim n, m&lt;br /&gt;n = 0&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; m = 0 To UBound(arrALLRefPts)&lt;br /&gt;dblDist = Rhino.Distance (arrTrgPt, arrALLRefPts(m))&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;If&lt;/span&gt; dblDist &lt; dblBoundR &lt;span style="color: rgb(153, 153, 0);"&gt;Then&lt;/span&gt;        &lt;br /&gt; Call Rhino.Print ("through point: " &amp;amp; CStr(n+1))&lt;br /&gt; ReDim Preserve arrRefPts(n)&lt;br /&gt; arrRefPts(n) = arrALLRefPts(m)&lt;br /&gt; ReDim Preserve strRefPts(n)&lt;br /&gt; strRefPts(n) = strALLRefPts(m)               &lt;br /&gt; n = n+1&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;End If&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;arrResult = strRefPts&lt;br /&gt;boundarySphere = arrResult&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;End Function&lt;/span&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-2199758884694808329?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/2199758884694808329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/2199758884694808329'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/10/boundary-sphere.html' title='boundary sphere'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_DACBIEbkSBY/SPEBFlSt6HI/AAAAAAAAALY/mwm6_yTeWHs/s72-c/boundary_sphere.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-8594786584587308284</id><published>2008-10-11T10:38:00.000-07:00</published><updated>2008-10-11T12:16:53.056-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>boundary cylinder</title><content type='html'>&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_DACBIEbkSBY/SPDlsTyYmVI/AAAAAAAAAKw/x_cofQGDueM/s1600-h/boundary_cylinder.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_DACBIEbkSBY/SPDlsTyYmVI/AAAAAAAAAKw/x_cofQGDueM/s200/boundary_cylinder.jpg" alt="" id="BLOGGER_PHOTO_ID_5255953314529974610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;'Author: YukiukiH&lt;br /&gt;'Date: 10/08/2008&lt;br /&gt;'compatibility: Rhino4&lt;br /&gt;''boundary CYLINDER&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;Dim strTrgPt&lt;br /&gt;strTrgPt = Rhino.GetObject ("select a target point", 1)&lt;br /&gt;Dim strALLRefPts&lt;br /&gt;strALLRefPts = Rhino.GetObjects ("select reference points", 1)&lt;br /&gt;Dim strRefPts&lt;br /&gt;strRefPts = &lt;span style="color: rgb(255, 153, 0);"&gt;boundaryCylinder&lt;/span&gt; (strTrgPt, strALLRefPts, 200, 400)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'color&lt;/span&gt;&lt;br /&gt;Dim intR, intG, intB&lt;br /&gt;Dim i&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; i = 0 To UBound(strRefPts)  &lt;br /&gt;  intR =255&lt;br /&gt;  intG =25+i*Rnd()*2&lt;br /&gt;  intB =0&lt;br /&gt;  Call Rhino.ObjectColor (strRefPts(i), RGB(intR, intG, intB))  &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt;&lt;br /&gt;Call Rhino.print("execution completed")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Function&lt;/span&gt; boundaryCylinder (strTrgPt, strALLRefPts, dblBoundR, dblBoundZ)&lt;br /&gt;Dim arrResult&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'coordinate extraction&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;Dim arrTrgPt&lt;br /&gt;arrTrgPt = Rhino.PointCoordinates (strTrgPt) &lt;br /&gt;Dim arrALLRefPts()&lt;br /&gt;Dim i&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; i = 0 To UBound(strALLRefPts)&lt;br /&gt;  ReDim Preserve arrALLRefPts(i)&lt;br /&gt;  arrALLRefPts(i) = Rhino.PointCoordinates (strALLRefPts(i))  &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'set boundary&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;Dim arrFlatPt, arrFlatRefPt, dblDist, dblmaxZ, dblminZ&lt;br /&gt;Dim arrREFPts(), strRefPts()&lt;br /&gt;dblmaxZ = arrTrgPt(2) + dblBoundZ&lt;br /&gt;dblminZ = arrTrgPt(2)&lt;br /&gt;  &lt;br /&gt;Dim n, m&lt;br /&gt;n = 0  &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; m = 0 To UBound(arrALLRefPts) &lt;br /&gt;  arrFlatPt = Array(arrTrgPt(0), arrTrgPt(1), 0)  &lt;br /&gt;  arrFlatRefPt = Array(arrALLRefPts(m)(0),arrALLRefPts(m)(1), 0)&lt;br /&gt;  dblDist = Rhino.Distance (arrFlatPt, arrFlatRefPt)        &lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;If&lt;/span&gt; dblDist &lt; dblBoundR &lt;span style="color: rgb(153, 153, 0);"&gt;Then&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;If&lt;/span&gt; dblmaxZ&gt;arrALLRefPts(m)(2) And arrALLRefPts(m)(2)&gt;dblminZ &lt;span style="color: rgb(153, 153, 0);"&gt;Then&lt;/span&gt;&lt;br /&gt;          &lt;br /&gt;      Call Rhino.Print ("through point: " &amp; CStr(n+1))&lt;br /&gt;      ReDim Preserve arrRefPts(n)&lt;br /&gt;      arrRefPts(n) = arrALLRefPts(m)&lt;br /&gt;      ReDim Preserve strRefPts(n)   &lt;br /&gt;      strRefPts(n) = strALLRefPts(m)                  &lt;br /&gt;      n = n+1&lt;br /&gt;          &lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;End If&lt;/span&gt;       &lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;End If&lt;/span&gt;     &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt; &lt;br /&gt;'---------------------------------------&lt;br /&gt;arrResult = strRefPts&lt;br /&gt;boundaryCylinder = arrResult&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;End Function&lt;/span&gt; &lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-8594786584587308284?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/8594786584587308284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/8594786584587308284'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/10/boundary-cylinder.html' title='boundary cylinder'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_DACBIEbkSBY/SPDlsTyYmVI/AAAAAAAAAKw/x_cofQGDueM/s72-c/boundary_cylinder.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-363702084699700779</id><published>2008-10-11T10:35:00.001-07:00</published><updated>2008-10-11T12:32:10.529-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>bounday cube</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_DACBIEbkSBY/SPDtYHNnzbI/AAAAAAAAALQ/JpYYZavIj_U/s1600-h/boundary_cube.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_DACBIEbkSBY/SPDtYHNnzbI/AAAAAAAAALQ/JpYYZavIj_U/s200/boundary_cube.jpg" alt="" id="BLOGGER_PHOTO_ID_5255961763650194866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;'Author: YukiukiH&lt;br /&gt;'Date: 10/08/2008&lt;br /&gt;'compatibility: Rhino4&lt;br /&gt;''boundary CUBE&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;Dim strTrgPt&lt;br /&gt;strTrgPt = Rhino.GetObject ("select a target point", 1)&lt;br /&gt;Dim strALLRefPts&lt;br /&gt;strALLRefPts = Rhino.GetObjects ("select reference points", 1)&lt;br /&gt;Dim strRefPts&lt;br /&gt;strRefPts = boundaryCube (strTrgPt, strALLRefPts, 300, 300, 400)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;'color&lt;/span&gt;&lt;br /&gt;Dim intR, intG, intB&lt;br /&gt;Dim i&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; i = 0 To UBound(strRefPts)  &lt;br /&gt;  intR =255&lt;br /&gt;  intG =25+i*Rnd()*2&lt;br /&gt;  intB =0    &lt;br /&gt;  Call Rhino.ObjectColor (strRefPts(i), RGB(intR, intG, intB))  &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt;&lt;br /&gt;Call Rhino.print("execution completed")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Function&lt;/span&gt; boundaryCube (strTrgPt, strALLRefPts, dblBoundX, dblBoundY, dblBoundZ)&lt;br /&gt;Dim arrResult&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'coordinate extraction&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;Dim arrTrgPt&lt;br /&gt;arrTrgPt = Rhino.PointCoordinates (strTrgPt) &lt;br /&gt;Dim arrALLRefPts()&lt;br /&gt;Dim i&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; i = 0 To UBound(strALLRefPts)&lt;br /&gt;  ReDim Preserve arrALLRefPts(i)&lt;br /&gt;  arrALLRefPts(i) = Rhino.PointCoordinates (strALLRefPts(i))  &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'set boundary&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;Dim dblmaxX, dblminX, dblmaxY, dblminY, dblmaxZ, dblminZ&lt;br /&gt;Dim arrREFPts(), strRefPts()&lt;br /&gt;dblmaxX = arrTrgPt(0) +(dblBoundX/2)&lt;br /&gt;dblminX = arrTrgPt(0) -(dblBoundX/2)&lt;br /&gt;dblmaxY = arrTrgPt(1) +(dblBoundY/2)&lt;br /&gt;dblminY = arrTrgPt(1) -(dblBoundY/2)&lt;br /&gt;dblmaxZ = arrTrgPt(2) +(dblBoundZ/2)&lt;br /&gt;dblminZ = arrTrgPt(2) -(dblBoundZ/2)&lt;br /&gt;  &lt;br /&gt;Dim n, m&lt;br /&gt;n = 0  &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; m = 0 To UBound(arrALLRefPts)          &lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;If&lt;/span&gt; dblmaxX&gt;arrALLRefPts(m)(0) And arrALLRefPts(m)(0)&gt;dblminX &lt;span style="color: rgb(153, 153, 0);"&gt;Then&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;If&lt;/span&gt; dblmaxY&gt;arrALLRefPts(m)(1) And arrALLRefPts(m)(1)&gt;dblminY &lt;span style="color: rgb(153, 153, 0);"&gt;Then&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;If&lt;/span&gt; dblmaxZ&gt;arrALLRefPts(m)(2) And arrALLRefPts(m)(2)&gt;dblminZ &lt;span style="color: rgb(153, 153, 0);"&gt;Then&lt;/span&gt;&lt;br /&gt;          &lt;br /&gt;        Call Rhino.Print ("through point: " &amp; CStr(n+1))&lt;br /&gt;        ReDim Preserve arrRefPts(n)&lt;br /&gt;        arrRefPts(n) = arrALLRefPts(m)&lt;br /&gt;        ReDim Preserve strRefPts(n)   &lt;br /&gt;        strRefPts(n) = strALLRefPts(m)                  &lt;br /&gt;        n = n+1&lt;br /&gt;          &lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;End If&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;End If&lt;/span&gt;       &lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;End If&lt;/span&gt;     &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;arrResult = strRefPts&lt;br /&gt;boundaryCube = arrResult&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;End Function&lt;/span&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-363702084699700779?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/363702084699700779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/363702084699700779'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/10/bounday-cube.html' title='bounday cube'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_DACBIEbkSBY/SPDtYHNnzbI/AAAAAAAAALQ/JpYYZavIj_U/s72-c/boundary_cube.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-4767745851657041497</id><published>2008-09-28T09:51:00.000-07:00</published><updated>2008-10-11T21:03:28.151-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>makeTree Revision</title><content type='html'>&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_DACBIEbkSBY/SPFq4UVVZXI/AAAAAAAAAMA/XjQRGxCEMIc/s1600-h/ScreenShot103.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_DACBIEbkSBY/SPFq4UVVZXI/AAAAAAAAAMA/XjQRGxCEMIc/s200/ScreenShot103.jpg" alt="" id="BLOGGER_PHOTO_ID_5256099755881489778" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;'Author: YukiukiH&lt;br /&gt;'Date: 08/10/03&lt;br /&gt;'compatibility: Rhino4&lt;br /&gt;''branching using vector&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 255, 255);"&gt;'first things first...&lt;/span&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;Dim strRtPts&lt;br /&gt;strRtPts = Rhino.GetObjects ("select root points", 1)&lt;br /&gt;Call Rhino.AddLayer ("ptCloudRT", RGB(0,0,0)) 'black&lt;br /&gt;Call Rhino.ObjectLayer (strRtPts, "ptCloudRT")&lt;br /&gt;Dim strALLREFPts&lt;br /&gt;strALLREFPts = Rhino.GetObjects ("select reference points", 1)&lt;br /&gt;Call Rhino.AddLayer ("ptCloudREF", RGB(105,105,105)) 'gray&lt;br /&gt;Call Rhino.ObjectLayer (strALLREFPts, "ptCloudREF")&lt;br /&gt;Dim dblNumber&lt;br /&gt;dblNumber = 7 '4&lt;br /&gt;Dim dblBoundary&lt;br /&gt;dblBoundary = 100 '100&lt;br /&gt;Call Rhino.Print ("minimize rhino window")&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 255, 255);"&gt;'call function&lt;/span&gt;&lt;br /&gt;Dim arrResultBranchs&lt;br /&gt;arrResultBranchs = branch (strRtPts, strALLREFPts, dblNumber, dblBoundary)&lt;br /&gt;&lt;br /&gt;Dim arrResultTrees, i, j&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;For&lt;/span&gt; j = 0 To UBound(arrResultBranchs)&lt;br /&gt;   &lt;span style="color: rgb(102, 255, 255);"&gt;'call function&lt;/span&gt;&lt;br /&gt;   ReDim Preserve arrResultTrees(j)&lt;br /&gt;   arrResultTrees(j) = tree (20, arrResultBranchs(j))&lt;br /&gt; Dim arrResult01, arrResult02, dblS, dblT&lt;br /&gt;&lt;br /&gt; If dblNumber Mod 2 = 1 Then&lt;br /&gt;   dblS = dblNumber/2+0.5&lt;br /&gt;   dblT = dblNumber-dblS &lt;br /&gt; Else&lt;br /&gt;   dblS = dblNumber/2&lt;br /&gt;   dblT = dblNumber/2&lt;br /&gt; End If&lt;br /&gt;&lt;br /&gt; ReDim arrResult01(dblS-1)&lt;br /&gt; ReDim arrResult02(dblT-1)  &lt;br /&gt; Rhino.print("dblS = " &amp;amp; CStr(dblS))&lt;br /&gt; Rhino.print("dblT = " &amp;amp; CStr(dblT))&lt;br /&gt; For i = 0 To (dblS-1)&lt;br /&gt;   arrResult01(i) = arrResultTrees(j)(i)&lt;br /&gt; Next&lt;br /&gt; For i = 0 To (dblT-1)&lt;br /&gt;   arrResult02(i) = arrResultTrees(j)(i+dblS)&lt;br /&gt; Next&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 255, 255);"&gt;'call function&lt;/span&gt;&lt;br /&gt; Call tree (10, arrResult01)&lt;br /&gt; Call tree (10, arrResult02)&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;Next&lt;/span&gt;&lt;br /&gt;Call Rhino.print("execution completed")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;Function&lt;/span&gt; branch (strRtPts, strALLREFPts, dblNumber, dblBoundary)&lt;br /&gt;&lt;a href="http://ssssociety.blogspot.com/2008/09/makebranch-revision.html"&gt;refer branch function&lt;/a&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;End Function&lt;/span&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;Function&lt;/span&gt; tree (dblStemLength, arrBranches)&lt;br /&gt;Dim arrResult()&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 255, 255);"&gt;'length of given branches&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;Dim i&lt;br /&gt;Dim blnFlag&lt;br /&gt;blnFlag = False&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;For&lt;/span&gt; i=0 To UBound(arrBranches) &lt;br /&gt; Dim dblCurveLength&lt;br /&gt; dblCurveLength = Rhino.CurveLength (arrBranches(i))&lt;br /&gt; Call Rhino.print("length = "&amp;amp; CStr(dblCurveLength)) &lt;br /&gt; If dblCurveLength &gt; dblStemLength Then&lt;br /&gt;   blnFlag = True&lt;br /&gt; End If&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;Next&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 255, 255);"&gt;'get average if branches are too long,&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;If blnFlag Then &lt;br /&gt; Rhino.print("blnFlag = true")&lt;br /&gt; Dim arrEdPt, arrStPt&lt;br /&gt; Dim arrAvgPt(2), dblX, dblY, dblZ&lt;br /&gt; dblX = 0&lt;br /&gt; dblY = 0&lt;br /&gt; dblZ = 0&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;For&lt;/span&gt; i = 0 To UBound(arrBranches)&lt;br /&gt;   arrEdPt = Rhino.CurveEndPoint (arrBranches(i))&lt;br /&gt;   dblX = dblX + arrEdPt(0)&lt;br /&gt;   dblY = dblY + arrEdPt(1)&lt;br /&gt;   dblZ = dblZ + arrEdPt(2) &lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;Next&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; arrAvgPt(0) = dblX /(UBound(arrBranches)+1)&lt;br /&gt; arrAvgPt(1) = dblY /(UBound(arrBranches)+1)&lt;br /&gt; arrAvgPt(2) = dblZ /(UBound(arrBranches)+1)&lt;br /&gt; arrStPt = Rhino.CurveStartPoint (arrBranches(0))&lt;br /&gt; Dim arrDiff&lt;br /&gt; arrDiff = Rhino.VectorSubtract (arrAvgPt, arrStPt)&lt;br /&gt; Dim dblDiff&lt;br /&gt; dblDiff = Rhino.VectorLength (arrDiff)&lt;br /&gt; Dim k&lt;br /&gt; k = dblStemLength / dblDiff&lt;br /&gt; arrDiff =  Rhino.VectorScale (arrDiff, k)&lt;br /&gt; Dim arrSeed&lt;br /&gt; arrSeed = Rhino.VectorAdd (arrStPt, arrDiff)&lt;br /&gt;  &lt;br /&gt;&lt;span style="color: rgb(102, 255, 255);"&gt;'shorter branches&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt; Dim strNewBranches&lt;br /&gt; ReDim strNewBranches(UBound(arrBranches))&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;For&lt;/span&gt; i = 0 To UBound(arrBranches)      &lt;br /&gt;   Dim arrLeaf&lt;br /&gt;   arrLeaf = Rhino.CurveEndPoint(arrBranches(i))&lt;br /&gt;   Dim strLine&lt;br /&gt;   strLine = Rhino.AddLine(arrSeed, arrLeaf)  &lt;br /&gt;   ReDim Preserve arrResult(i)&lt;br /&gt;   arrResult(i) = strLine  &lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;Next&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; Dim strStem&lt;br /&gt; strStem = Rhino.AddLine (arrStPt, arrSeed) &lt;br /&gt; Call Rhino.DeleteObjects (arrBranches)  &lt;br /&gt;Else&lt;br /&gt; Rhino.print("blnFlag = false")&lt;br /&gt;End If&lt;br /&gt; '---------------------------------------&lt;br /&gt;    &lt;br /&gt;Call Rhino.CurrentLayer ("0")&lt;br /&gt;tree = arrResult &lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;End Function&lt;/span&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-4767745851657041497?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/4767745851657041497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/4767745851657041497'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/09/maketree-revision.html' title='makeTree Revision'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_DACBIEbkSBY/SPFq4UVVZXI/AAAAAAAAAMA/XjQRGxCEMIc/s72-c/ScreenShot103.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-3529552570844288419</id><published>2008-09-28T09:31:00.000-07:00</published><updated>2008-10-11T20:33:55.488-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>makeBranch Revision</title><content type='html'>&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_DACBIEbkSBY/SPFoVgy00KI/AAAAAAAAAL4/liX1DNLJbTI/s1600-h/branch08.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_DACBIEbkSBY/SPFoVgy00KI/AAAAAAAAAL4/liX1DNLJbTI/s200/branch08.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5256096958907732130" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;'Author: YukiukiH&lt;br /&gt;'Date: 08/10/03&lt;br /&gt;'compatibility: Rhino4&lt;br /&gt;''branching using vector&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'first things first...&lt;/span&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;Dim strRtPts&lt;br /&gt;strRtPts = Rhino.GetObjects ("select root points", 1)&lt;br /&gt;Call Rhino.AddLayer ("ptCloudRT", RGB(0,0,0)) 'black&lt;br /&gt;Call Rhino.ObjectLayer (strRtPts, "ptCloudRT")&lt;br /&gt;Dim strALLREFPts&lt;br /&gt;strALLREFPts = Rhino.GetObjects ("select reference points", 1)&lt;br /&gt;Call Rhino.AddLayer ("ptCloudREF", RGB(105,105,105)) 'gray&lt;br /&gt;Call Rhino.ObjectLayer (strALLREFPts, "ptCloudREF")&lt;br /&gt;Dim dblNumber&lt;br /&gt;dblNumber = 8 '4&lt;br /&gt;Dim dblBoundary&lt;br /&gt;dblBoundary = 100 '100&lt;br /&gt;Call Rhino.Print ("minimize rhino window")&lt;br /&gt;&lt;br /&gt;Call branch (strRtPts, strALLREFPts, dblNumber, dblBoundary)&lt;br /&gt;Call Rhino.print("execution completed")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Function&lt;/span&gt; branch (strRtPts, strALLREFPts, dblNumber, dblBoundary)&lt;br /&gt;Dim arrResult()&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'coordinate extraction&lt;/span&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;Dim i, arrRtPts(), arrALLREFPts()&lt;br /&gt;For i = 0 To UBound(strRtPts)&lt;br /&gt;  ReDim Preserve arrRtPts(i)&lt;br /&gt;  arrRtPts(i) = Rhino.PointCoordinates (strRtPts(i))  &lt;br /&gt;Next&lt;br /&gt;For i = 0 To UBound(strALLREFPts)&lt;br /&gt;  ReDim Preserve arrALLREFPts(i)&lt;br /&gt;  arrALLREFPts(i) = Rhino.PointCoordinates (strALLREFPts(i))  &lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'for each RootPoint,&lt;/span&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;Dim dblmaxX, dblminX, dblmaxY, dblminY&lt;br /&gt;Dim arrREFPts(), arrMinLength(), dblMinLength&lt;br /&gt;Dim strShortests()&lt;br /&gt;Dim j&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; j = 0 To UBound(arrRtPts)  &lt;br /&gt;  Call Rhino.Print ("Round " &amp; CStr(j+1))&lt;br /&gt;  &lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'set boundary&lt;/span&gt;&lt;br /&gt;  '---------------------------------------&lt;br /&gt;  dblmaxX = arrRtPts(j)(0) +dblBoundary &lt;br /&gt;  dblminX = arrRtPts(j)(0) -dblBoundary &lt;br /&gt;  dblmaxY = arrRtPts(j)(1) +dblBoundary &lt;br /&gt;  dblminY = arrRtPts(j)(1) -dblBoundary   &lt;br /&gt;  Dim n, m&lt;br /&gt;  n = 0  &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; m = 0 To UBound(arrALLREFPts)  &lt;br /&gt;    If dblmaxX&gt;arrALLREFPts(m)(0) And arrALLREFPts(m)(0)&gt;dblminX And dblmaxY&gt;arrALLREFPts(m)(1) And arrALLREFPts(m)(1)&gt;dblminY Then&lt;br /&gt;      ReDim Preserve arrREFPts(n)&lt;br /&gt;      arrREFPts(n) = arrALLREFPts(m)       &lt;br /&gt;      n = n+1    &lt;br /&gt;    End If    &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt; &lt;br /&gt;  '---------------------------------------&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'find dblNumber shortest&lt;/span&gt;&lt;br /&gt;  '---------------------------------------&lt;br /&gt;  Dim arrVectorTemp, dblLengthTemp&lt;br /&gt;  Dim arrVector01, dblLength01&lt;br /&gt;  Dim arrPrevShortest, dblPrevShortest&lt;br /&gt;  Dim arrCurrShortest, dblCurrShortest  &lt;br /&gt;  dblMinLength = 0  &lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; i = 0 To dblNumber-1    &lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'make one to begin comparison with&lt;/span&gt;    &lt;br /&gt;    arrVectorTemp = Rhino.VectorCreate (arrREFPts(0), arrRtPts(j))&lt;br /&gt;    dblLengthTemp = Rhino.VectorLength (arrVectorTemp)        &lt;br /&gt;    arrPrevShortest = arrVectorTemp&lt;br /&gt;    dblPrevShortest = dblLengthTemp&lt;br /&gt;    &lt;br /&gt;    If dblPrevShortest &lt;= dblMinLength Then&lt;br /&gt;      dblPrevShortest = dblPrevShortest * 100&lt;br /&gt;    End If        &lt;br /&gt;    &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; n = 0 To UBound(arrREFPts)&lt;br /&gt;      arrVector01 = Rhino.VectorCreate (arrREFPts(n), arrRtPts(j))&lt;br /&gt;      dblLength01 = Rhino.VectorLength (arrVector01) &lt;br /&gt;               &lt;br /&gt;      If dblLength01 &lt;= dblPrevShortest And dblLength01 &gt; dblMinLength Then&lt;br /&gt;        arrCurrShortest = arrVector01&lt;br /&gt;        dblCurrShortest = dblLength01     &lt;br /&gt;      Else    &lt;br /&gt;        arrCurrShortest = arrPrevShortest&lt;br /&gt;        dblCurrShortest = dblPrevShortest               &lt;br /&gt;      End If&lt;br /&gt;      &lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'prepare for next round&lt;/span&gt;&lt;br /&gt;      arrPrevShortest = arrCurrShortest&lt;br /&gt;      dblPrevShortest = dblCurrShortest      &lt;br /&gt;      &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt; 'arrREFPts&lt;br /&gt;    ReDim Preserve arrMinLength(i)&lt;br /&gt;    arrMinLength(i) = arrCurrShortest        &lt;br /&gt;    dblMinLength = dblCurrShortest &lt;br /&gt;    Call Rhino.Print (CStr(i+1) &amp; " shortest:" &amp; "  " &amp; CStr(dblMinLength))&lt;br /&gt;    &lt;br /&gt;    Call Rhino.AddLayer (CStr(i+1) &amp; " shortest", RGB(255-i*20, 50+i*24, 0)) &lt;br /&gt;    Call Rhino.CurrentLayer (CStr(i+1) &amp; " shortest")&lt;br /&gt;    &lt;br /&gt;    ReDim Preserve strShortests(i)     &lt;br /&gt;    strShortests(i) = Rhino.Addline (arrRtPts(j), Rhino.VectorAdd (arrRtPts(j), arrMinLength(i)))&lt;br /&gt;    &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt; 'i&lt;br /&gt;  ReDim Preserve arrResult(j)&lt;br /&gt;  arrResult(j) = strShortests&lt;br /&gt;  '---------------------------------------      &lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt; 'j&lt;br /&gt;&lt;br /&gt;Call Rhino.CurrentLayer ("0")  &lt;br /&gt;branch = arrResult&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;End Function&lt;/span&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-3529552570844288419?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/3529552570844288419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/3529552570844288419'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/09/makebranch-revision.html' title='makeBranch Revision'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_DACBIEbkSBY/SPFoVgy00KI/AAAAAAAAAL4/liX1DNLJbTI/s72-c/branch08.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-300020856844779939</id><published>2008-09-28T08:16:00.000-07:00</published><updated>2008-10-13T23:06:29.784-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>makeBridge Revision</title><content type='html'>&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_DACBIEbkSBY/SPFkmY_fXVI/AAAAAAAAALw/Ht2ZNHLIqjM/s1600-h/bridge03.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_DACBIEbkSBY/SPFkmY_fXVI/AAAAAAAAALw/Ht2ZNHLIqjM/s200/bridge03.jpg" alt="" id="BLOGGER_PHOTO_ID_5256092850824633682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;'Author: YukiukiH&lt;br /&gt;'Date: 08/10/03&lt;br /&gt;'compatibility: Rhino4&lt;br /&gt;''draw normal at each division point using vector&lt;br /&gt;''then create bridge structure&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'first things first...&lt;/span&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;Call Rhino.AddLayer ("splineCenter", RGB(255,0,0)) 'black&lt;br /&gt;Call Rhino.AddLayer ("centerPt", RGB(0,0,0)) 'black&lt;br /&gt;Call Rhino.AddLayer ("normalAxis", RGB(0,0,0)) 'black&lt;br /&gt;Call Rhino.AddLayer ("normal01", RGB(255,161,0)) 'gold&lt;br /&gt;Call Rhino.AddLayer ("normal02", RGB(255,127,0)) 'orange&lt;br /&gt;Call Rhino.AddLayer ("side01", RGB(0,0,0)) 'black&lt;br /&gt;Call Rhino.AddLayer ("side02", RGB(0,0,0)) 'black&lt;br /&gt;Call Rhino.AddLayer ("Pt", RGB(0,0,0)) 'black&lt;br /&gt;Call Rhino.AddLayer ("Line011", RGB(63,191,191)) 'turquoise&lt;br /&gt;Call Rhino.AddLayer ("Line022", RGB(63,191,191)) 'turquoise&lt;br /&gt;Call Rhino.AddLayer ("Line033", RGB(0,0,0)) 'black&lt;br /&gt;Call Rhino.AddLayer ("Line044", RGB(0,0,0)) 'black&lt;br /&gt;Call Rhino.AddLayer ("Line055", RGB(255,0,0)) 'red&lt;br /&gt;&lt;br /&gt;Dim strSpline&lt;br /&gt;strSpline = Rhino.GetObject ("select a spline curve", 4)&lt;br /&gt;Call Rhino.ObjectLayer (strSpline , "splineCenter")&lt;br /&gt;Call Rhino.LayerVisible ("splineCenter", False)&lt;br /&gt;Dim dblsegLength&lt;br /&gt;dblsegLength = 1500 '1500&lt;br /&gt;Dim dblWidth&lt;br /&gt;dblWidth = 2000 '2000&lt;br /&gt;Dim dblSideAngle&lt;br /&gt;dblSideAngle = 100 '100&lt;br /&gt;Dim dblSideHeight&lt;br /&gt;dblSideHeight = 900 '900&lt;br /&gt;Dim dblDiagLength&lt;br /&gt;dblDiagLength = dblSideHeight*Sec(dblSideAngle-90)&lt;br /&gt;Call Rhino.Print (dblDiagLength) '913.884&lt;br /&gt;&lt;br /&gt;Function Sec(x)&lt;br /&gt;Dim dblPi&lt;br /&gt;dblPi = Rhino.Pi&lt;br /&gt;Sec = 1 / Cos(x*2*dblPi/360)&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Call ribaBridge (strSpline, dblSegLength, dblWidth, dblSideAngle, dblDiagLength)&lt;br /&gt;Call Rhino.print("execution completed")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Function&lt;/span&gt; ribaBridge (strSpline, dblSegLength, dblWidth, dblSideAngle, dblDiagLength)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'division points&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;Dim arrCenPts, strCenPt&lt;br /&gt;Dim a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z&lt;br /&gt;&lt;br /&gt;If Rhino.IsCurve(strSpline) Then&lt;br /&gt; 'by length segment&lt;br /&gt; arrCenPts = Rhino.DivideCurveLength(strSpline, dblSegLength)&lt;br /&gt;'by segments&lt;br /&gt;'intSegments = 130&lt;br /&gt;'arrPoints = Rhino.DivideCurve(strSpline, intSegments)&lt;br /&gt; Call Rhino.CurrentLayer ("centerPt")&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; i = 0 To UBound(arrCenPts)&lt;br /&gt;   strCenPt = Rhino.AddPoint (arrCenPts(i))&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt;&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'normal&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;Dim dblParam, arrTangents(), arrNormals()&lt;br /&gt;Dim strNormalSides01(), strNormalSides02()&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; i = 0 To UBound(arrCenPts)&lt;br /&gt;dblParam = Rhino.CurveClosestPoint(strSpline, arrCenPts(i))&lt;br /&gt;ReDim Preserve arrTangents(i)&lt;br /&gt;arrTangents(i) = Rhino.CurveTangent(strSpline, dblParam)&lt;br /&gt;ReDim Preserve arrNormals(i)&lt;br /&gt;arrNormals(i) = Rhino.VectorCrossProduct(arrTangents(i), Array(0,0,1))&lt;br /&gt;ReDim Preserve arrNormals(i)&lt;br /&gt;arrNormals(i) = Rhino.VectorUnitize(arrNormals(i))&lt;br /&gt;ReDim Preserve arrNormals(i)&lt;br /&gt;arrNormals(i) = Rhino.VectorScale(arrNormals(i), dblWidth)&lt;br /&gt;&lt;br /&gt;Call Rhino.CurrentLayer ("normal01")&lt;br /&gt;ReDim Preserve strNormalSides01(i)&lt;br /&gt;strNormalSides01(i) = Rhino.addLine(arrCenPts(i), Rhino.VectorAdd(arrCenPts(i), arrNormals(i)))&lt;br /&gt;ReDim Preserve strNormalSides02(i)&lt;br /&gt;strNormalSides02(i) = Rhino.RotateObject (strNormalSides01(i), arrCenPts(i), 180, Array(0,0,1), True)&lt;br /&gt;Call Rhino.ObjectLayer (strNormalSides02(i), "normal02")&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'prepare vector for 3d rotation&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;Dim arrAxiss(), arrSides(), dilDiagLength(), strSides01, strSides02&lt;br /&gt;Dim arrSides01EdPts(), arrSides02EdPts()&lt;br /&gt;Dim arrSides01TpPts(), arrSides02TpPts()&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; i = 0 To UBound(arrCenPts)&lt;br /&gt;ReDim Preserve arrSides01EdPts(i)&lt;br /&gt;arrSides01EdPts(i) = Rhino.CurveEndPoint (strNormalSides01(i))&lt;br /&gt;ReDim Preserve arrSides02EdPts(i)&lt;br /&gt;arrSides02EdPts(i) = Rhino.CurveEndPoint (strNormalSides02(i))&lt;br /&gt;&lt;br /&gt;ReDim Preserve arrAxis(i)&lt;br /&gt;arrAxis(i) = Rhino.VectorRotate (arrNormals(i), -90, Array(0,0,1))&lt;br /&gt;ReDim Preserve arrSides(i)&lt;br /&gt;arrSides(i) = Rhino.VectorRotate (arrNormals(i), 180-dblSideAngle, arrAxis(i))&lt;br /&gt;ReDim Preserve arrSides(i)&lt;br /&gt;arrSides(i) = Rhino.VectorUnitize (arrSides(i))&lt;br /&gt;ReDim Preserve arrSides(i)&lt;br /&gt;arrSides(i) = Rhino.VectorScale (arrSides(i), dblDiagLength)&lt;br /&gt;&lt;br /&gt;Call Rhino.CurrentLayer ("side01")&lt;br /&gt;strSides01 = Rhino.addLine (arrSides01EdPts(i), Rhino.VectorAdd(arrSides01EdPts(i), arrSides(i)))&lt;br /&gt;ReDim Preserve arrSides(i)&lt;br /&gt;arrSides(i) = Rhino.VectorRotate (arrSides(i), (dblSideAngle-90)*2, arrAxis(i))&lt;br /&gt;Call Rhino.CurrentLayer ("side02")&lt;br /&gt;strSides02 = Rhino.addLine (arrSides02EdPts(i), Rhino.VectorAdd(arrSides02EdPts(i), arrSides(i)))&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'add points&lt;/span&gt;&lt;br /&gt;ReDim Preserve arrSides01TpPts(i)&lt;br /&gt;arrSides01TpPts(i) = Rhino.CurveEndPoint (strSides01)&lt;br /&gt;ReDim Preserve arrSides02TpPts(i)&lt;br /&gt;arrSides02TpPts(i) = Rhino.CurveEndPoint (strSides02)&lt;br /&gt;&lt;br /&gt;Call Rhino.CurrentLayer ("Pt")&lt;br /&gt;Call Rhino.AddPoint (arrSides01EdPts(i))&lt;br /&gt;Call Rhino.AddPoint (arrSides02EdPts(i))&lt;br /&gt;Call Rhino.AddPoint (arrSides01TpPts(i))&lt;br /&gt;Call Rhino.AddPoint (arrSides02TpPts(i))&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt;&lt;br /&gt;      &lt;br /&gt;&lt;span style="color: rgb(153, 153, 0);"&gt;'create lines between (i) and (i+1)&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;Dim strLine011, strLine022, strLine033, strLine044, strLine055&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;For&lt;/span&gt; i = 0 To UBound(arrCenPts)-1&lt;br /&gt;Call Rhino.CurrentLayer ("Line011")&lt;br /&gt;strLine011 = Rhino.AddLine (arrSides01EdPts(i), arrSides01EdPts(i+1))&lt;br /&gt;Call Rhino.CurrentLayer ("Line022")&lt;br /&gt;strLine022 = Rhino.AddLine (arrSides02EdPts(i), arrSides02EdPts(i+1))&lt;br /&gt;Call Rhino.CurrentLayer ("Line033")&lt;br /&gt;strLine033 = Rhino.AddLine (arrSides01TpPts(i), arrSides01TpPts(i+1))&lt;br /&gt;Call Rhino.CurrentLayer ("Line044")&lt;br /&gt;strLine044 = Rhino.AddLine (arrSides02TpPts(i), arrSides02TpPts(i+1))&lt;br /&gt;Call Rhino.CurrentLayer ("Line055")&lt;br /&gt;strLine055 = Rhino.AddLine (arrCenPts(i), arrCenPts(i+1))&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Next&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;End Function&lt;/span&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-300020856844779939?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/300020856844779939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/300020856844779939'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/09/makebridge-revision.html' title='makeBridge Revision'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_DACBIEbkSBY/SPFkmY_fXVI/AAAAAAAAALw/Ht2ZNHLIqjM/s72-c/bridge03.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-1228506620514383625</id><published>2008-08-31T01:14:00.000-07:00</published><updated>2008-10-18T23:03:10.451-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CATIAscript'/><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><title type='text'>Beginners Samples</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_DACBIEbkSBY/SPrNgcLGJeI/AAAAAAAAAMg/DYyCI6ePDw8/s1600-h/ScreenShot110.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_DACBIEbkSBY/SPrNgcLGJeI/AAAAAAAAAMg/DYyCI6ePDw8/s200/ScreenShot110.jpg" alt="" id="BLOGGER_PHOTO_ID_5258741472110716386" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Some useful CATIA vba samples, since v5Automation was overwhelming for newbies like me.  &lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;'opening statement /intersectionPt&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;Dim partDocument1 As PartDocument&lt;br /&gt;Set partDocument1 = CATIA.ActiveDocument&lt;br /&gt;Dim part1 As Part&lt;br /&gt;Set part1 = partDocument1.Part&lt;br /&gt;&lt;span style="color: rgb(51, 255, 255);"&gt;'add geom set here&lt;/span&gt;&lt;br /&gt;Dim hybridBody1 As HybridBody&lt;br /&gt;Set hybridBody1 = part1.HybridBodies.Add()&lt;br /&gt;hybridBody1.Name = "Geometrical Set.New"&lt;br /&gt;part1.Update&lt;br /&gt;&lt;span style="color: rgb(51, 255, 255);"&gt;'used geom set&lt;/span&gt;&lt;br /&gt;Dim hybridBody2 As HybridBody&lt;br /&gt;Set hybridBody2 = part1.HybridBodies.Item("Geometrical Set.1")&lt;br /&gt;Dim hybridBody3 As HybridBody&lt;br /&gt;Set hybridBody3 = part1.HybridBodies.Item("Geometrical Set.2").HybridBodies.Item("Multi Output.1 (Intersect)")&lt;br /&gt;'---------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;'selection set /color&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;Dim colorCount&lt;br /&gt;colorCount = hybridBody1.HybridShapes.Count&lt;br /&gt;&lt;span style="color: rgb(51, 255, 255);"&gt;For&lt;/span&gt; i = 1 To colorCount&lt;br /&gt;Call partDocument1.Selection.Add(hybridBody1.HybridShapes.Item(i))&lt;br /&gt;Dim visProperties1 As VisPropertySet&lt;br /&gt;Set visProperties1 = partDocument1.Selection.VisProperties&lt;br /&gt;visProperties1.SetRealColor 255, 255, 0, 1 'yellow(255,255,0)&lt;br /&gt;partDocument1.Selection.Clear&lt;br /&gt;&lt;span style="color: rgb(51, 255, 255);"&gt;Next&lt;/span&gt; i&lt;br /&gt;'---------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;'measurable, parameter, formula&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;&lt;span style="color: rgb(51, 255, 255);"&gt;'create line WITHOUT parameter first&lt;/span&gt;&lt;br /&gt;Dim line1 As HybridShapeLineAngle&lt;br /&gt;Set line1 = part1.HybridShapeFactory.AddNewLineAngle( , , , , , , , )&lt;br /&gt;Dim angleFormula01 As Formula&lt;br /&gt;Set angleFormula01 = part1.relations.CreateFormula( , , &lt;span style="color: rgb(51, 255, 255);"&gt;line1.Angle&lt;/span&gt;, )&lt;br /&gt;hybridBody1.AppendHybridShape line1&lt;br /&gt;part1.InWorkObject = line1&lt;br /&gt;&lt;br /&gt;Dim TheMeasurable01 As Measurable&lt;br /&gt;Set TheMeasurable01 = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench").GetMeasurable( )&lt;br /&gt;Dim lineMeasurable01 As Double&lt;br /&gt;lineMeasurable01 = TheMeasurable01.Length&lt;br /&gt;Dim MeasurableRealStOff01 As RealParam&lt;br /&gt;Set MeasurableRealStOff01 = part1.Parameters.CreateReal("Real.measurable stOff", lineMeasurable01)&lt;br /&gt;Dim MeasurableRealEdOff01 As RealParam&lt;br /&gt;Set MeasurableRealEdOff01 = part1.Parameters.CreateReal("Real.measurable edOff", lineMeasurable01)&lt;br /&gt;&lt;br /&gt;Dim lengthFormula011 As Formula&lt;br /&gt;Set lengthFormula011 = part1.relations.CreateFormula( , , &lt;span style="color: rgb(51, 255, 255);"&gt;line1.BeginOffset&lt;/span&gt;, )&lt;br /&gt;Dim lengthFormula012 As Formula&lt;br /&gt;Set lengthFormula012 = part1.relations.CreateFormula( , , &lt;span style="color: rgb(51, 255, 255);"&gt;line1.EndOffset&lt;/span&gt;, )&lt;br /&gt;'---------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-1228506620514383625?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/1228506620514383625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/1228506620514383625'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/08/beginners-samples.html' title='Beginners Samples'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_DACBIEbkSBY/SPrNgcLGJeI/AAAAAAAAAMg/DYyCI6ePDw8/s72-c/ScreenShot110.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-686970702913911270</id><published>2008-08-16T16:07:00.001-07:00</published><updated>2008-10-18T22:40:05.330-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CATIAscript'/><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><title type='text'>CATIA scripting</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_DACBIEbkSBY/SKdd1IiG7sI/AAAAAAAAAIs/_cTWY9tUq78/s1600-h/VB+editor.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_DACBIEbkSBY/SKdd1IiG7sI/AAAAAAAAAIs/_cTWY9tUq78/s320/VB+editor.jpg" alt="" id="BLOGGER_PHOTO_ID_5235256259246485186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;Finally got hands on CATIA scripting. Most confusing thing about CATIA vba is the tree structure. Within Part Document only, CATIA has the following structure.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;+-- &lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span&gt;PartDocument&lt;/span&gt;&lt;br /&gt;+-&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;--&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;- Part&lt;br /&gt;+--&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;--&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;-- HybridShapeFactory&lt;br /&gt;+---&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;--&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;--- HybridBodies&lt;br /&gt;+----&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;--&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;---- HybridBody&lt;br /&gt;+------&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;--&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;---- HybridShapes&lt;br /&gt;+------&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;--&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;------ HybridShape&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;And also, since CATIA has multiple ways to create a geometry,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;"Dim ...... As ......"  lines get a little tricky. &lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span&gt;Point Geometry &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span&gt;for example,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span&gt; has 9 types including intersection point.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;HybridShapePointBetween&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;HybridShapePointCenter&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;HybridShapePointCoord&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;HybridShapePointExplicit&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;HybridShapePointOnCurve&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;HybridShapePointOnPlane&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;HybridShapePointOnSurface&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;HybridShapePointTangent&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;HybridShapeInterSection&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;'Module h_planeM (THIS IS ONE MODULE ONLY !!!)&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;'Author: YukiukiH&lt;br /&gt;'Date: 10/18/2008&lt;br /&gt;'compatibility: CATIA V5R18&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;Sub CATMain()&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;'opening statement&lt;/span&gt;&lt;br /&gt;Dim partDocument1 As PartDocument&lt;br /&gt;Set partDocument1 = CATIA.ActiveDocument&lt;br /&gt;Dim part1 As Part&lt;br /&gt;Set part1 = partDocument1.Part&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;'add geom set here&lt;/span&gt;&lt;br /&gt;Dim hybridBody1 As HybridBody&lt;br /&gt;Set hybridBody1 = part1.HybridBodies.Add()&lt;br /&gt;    hybridBody1.Name = "D_planeM"&lt;br /&gt;part1.Update&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;'useg geom set&lt;/span&gt;&lt;br /&gt;Dim hybridBody2 As HybridBody&lt;br /&gt;Set hybridBody2 = part1.HybridBodies.Item("D_MidL")&lt;br /&gt;Dim hybridBody3 As HybridBody&lt;br /&gt;Set hybridBody3 = part1.HybridBodies.Item("D_normalM")&lt;br /&gt;&lt;br /&gt;Dim i As Integer&lt;br /&gt;Dim j As Integer&lt;br /&gt;j = 0&lt;br /&gt;Dim k As Integer&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;'Loop&lt;/span&gt;&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;Dim lineCount As Integer&lt;br /&gt;lineCount = hybridBody2.HybridShapes.Count&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 255, 255);"&gt;For&lt;/span&gt; i = 1 To lineCount Step 9&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: rgb(51, 204, 255);"&gt;'input&lt;/span&gt;&lt;br /&gt;    Dim line01 As HybridShapeLinePtPt&lt;br /&gt;    Set line01 = hybridBody2.HybridShapes.Item(i)&lt;br /&gt;    Dim lineNormal01 As HybridShapeLineNormal&lt;br /&gt;    Set lineNormal01 = hybridBody3.HybridShapes.Item(i + j)&lt;br /&gt;    &lt;span style="color: rgb(51, 204, 255);"&gt;'output&lt;/span&gt;&lt;br /&gt;    Dim plane01 As HybridShapePlane2Lines&lt;br /&gt;    &lt;span style="color: rgb(51, 255, 255);"&gt;Set plane01 = part1.HybridShapeFactory.AddNewPlane2Lines(line01, lineNormal01)&lt;/span&gt;&lt;br /&gt;    hybridBody1.AppendHybridShape plane01&lt;br /&gt;    part1.InWorkObject = plane01&lt;br /&gt;    &lt;br /&gt;    '---------------------------------------&lt;br /&gt;    &lt;span style="color: rgb(51, 255, 255);"&gt;For&lt;/span&gt; k = 1 To 8&lt;br /&gt;    &lt;span style="color: rgb(51, 204, 255);"&gt;'input&lt;/span&gt;&lt;br /&gt;    Set line01 = hybridBody2.HybridShapes.Item(i + k)&lt;br /&gt;    Set lineNormal01 = hybridBody3.HybridShapes.Item(i + j + k)&lt;br /&gt;    &lt;span style="color: rgb(51, 204, 255);"&gt;'output&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: rgb(51, 255, 255);"&gt;Set plane01 = part1.HybridShapeFactory.AddNewPlane2Lines(line01, lineNormal01)&lt;/span&gt;&lt;br /&gt;    hybridBody1.AppendHybridShape plane01&lt;br /&gt;    part1.InWorkObject = plane01&lt;br /&gt;    &lt;span style="color: rgb(51, 255, 255);"&gt;Next&lt;/span&gt; k&lt;br /&gt;    '---------------------------------------&lt;br /&gt;&lt;br /&gt;    j = j + 1&lt;br /&gt;&lt;span style="color: rgb(51, 255, 255);"&gt;Next&lt;/span&gt; i&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;'----------------------------------------------------------------------------------------------&lt;br /&gt;part1.Update 'has to be before SetRealColor&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;'color&lt;/span&gt;&lt;br /&gt;'---------------------------------------&lt;br /&gt;Dim colorCount&lt;br /&gt;colorCount = hybridBody1.HybridShapes.Count&lt;br /&gt;&lt;span style="color: rgb(51, 255, 255);"&gt;For&lt;/span&gt; i = 1 To colorCount&lt;br /&gt;Call partDocument1.Selection.Add(hybridBody1.HybridShapes.Item(i))&lt;br /&gt;Dim visProperties1 As VisPropertySet&lt;br /&gt;Set visProperties1 = partDocument1.Selection.VisProperties&lt;br /&gt;visProperties1.SetRealColor 0, 0, 0, 1 'blk(0, 0, 0)&lt;br /&gt;partDocument1.Selection.Clear&lt;br /&gt;&lt;span style="color: rgb(51, 255, 255);"&gt;Next&lt;/span&gt; i&lt;br /&gt;'---------------------------------------&lt;br /&gt;End Sub&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-686970702913911270?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/686970702913911270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/686970702913911270'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/08/catia-scripting.html' title='CATIA scripting'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_DACBIEbkSBY/SKdd1IiG7sI/AAAAAAAAAIs/_cTWY9tUq78/s72-c/VB+editor.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-7693723980041330158</id><published>2008-07-13T11:53:00.001-07:00</published><updated>2008-07-13T11:58:09.970-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Hanabi</title><content type='html'>&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_DACBIEbkSBY/SHpPXqqJdtI/AAAAAAAAAIM/rvV_Of5oKNc/s1600-h/hanabi.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_DACBIEbkSBY/SHpPXqqJdtI/AAAAAAAAAIM/rvV_Of5oKNc/s400/hanabi.jpg" alt="" id="BLOGGER_PHOTO_ID_5222573985896167122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;With a few arrangements, trees become Hanabi! (fireworks in Japanese) They are all generated from the same script, only by changing input numbers. The pointcloud on the left corner is geometrical inputs.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-7693723980041330158?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/7693723980041330158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/7693723980041330158'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/07/hanabi.html' title='Hanabi'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_DACBIEbkSBY/SHpPXqqJdtI/AAAAAAAAAIM/rvV_Of5oKNc/s72-c/hanabi.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-2760838920629723328</id><published>2008-07-12T16:37:00.000-07:00</published><updated>2008-07-13T16:27:16.284-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Evolution</title><content type='html'>&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_DACBIEbkSBY/SHpLpgsAfVI/AAAAAAAAAIE/oDgfxu2zeGg/s1600-h/evolution.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_DACBIEbkSBY/SHpLpgsAfVI/AAAAAAAAAIE/oDgfxu2zeGg/s320/evolution.jpg" alt="" id="BLOGGER_PHOTO_ID_5222569894410747218" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;Playing around with the find closest script I posted previously, I have been growing bunch of trees. If I look only the final result, it looks sort of intimidating. But I start with the simple code like find closest, and kept adding more functions and intelligence. I also work this way when I have to figure out complicated powercopy.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_DACBIEbkSBY/SHpLjKSAOaI/AAAAAAAAAH8/QMr6kBF4ASc/s1600-h/type0102.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_DACBIEbkSBY/SHpLjKSAOaI/AAAAAAAAAH8/QMr6kBF4ASc/s320/type0102.jpg" alt="" id="BLOGGER_PHOTO_ID_5222569785316882850" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;If you look close, tangency of branches appear more smoothly in type02. This regards the order that code generates branches. It makes sense that more points the code takes into consideration in the beginning (like in type02), the more naturally tangency can grow.&lt;br /&gt;&lt;br /&gt;I have to learn how to call function for some part of the script, otherwise, scripts I write are getting too long to post... If somebody is interested, please let me know.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-2760838920629723328?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/2760838920629723328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/2760838920629723328'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/07/branchig-logic.html' title='Evolution'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_DACBIEbkSBY/SHpLpgsAfVI/AAAAAAAAAIE/oDgfxu2zeGg/s72-c/evolution.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-1325324183557412713</id><published>2008-07-04T07:31:00.000-07:00</published><updated>2008-12-02T23:29:06.960-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Branching</title><content type='html'>&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_DACBIEbkSBY/SG5U4Z137fI/AAAAAAAAAHk/aMsJ74BOvC4/s1600-h/branching.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_DACBIEbkSBY/SG5U4Z137fI/AAAAAAAAAHk/aMsJ74BOvC4/s320/branching.jpg" alt="" id="BLOGGER_PHOTO_ID_5219202346155240946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ssssociety.blogspot.com/2008/09/makebranch-revision.html"&gt;** Updated Branching Script&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Very simple operation to find closest point out of point cloud. &lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;I have some more work to do on this script, so&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt; I wanted to post it up before I make it too complicated.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;Each Loop finds first closest, second closest, third closest, so on and so forth. I thought it would be cool to set a variable that defines how many closest point each target has to find, but I couldn't figure out. Let's just start with recycling the same Loop over and over again.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;It looks like I can make this script much shorter if&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;Call Rhino.PointArrayClosestPoint (arrPoints( ), arrPoint)&lt;/span&gt;&lt;br /&gt;works... This sample appears in monkey, yet somehow Rhino Script Method is not available.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;Option Explicit&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'Author: YukiukiH&lt;br /&gt;'Date: 06/04/2008&lt;br /&gt;'compatibility: Rhino4&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'memo: &lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;span style="color: rgb(51, 204, 255);"&gt;boundary is variable in plan&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Branching()&lt;br /&gt;Sub Branching()&lt;br /&gt;Dim a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z&lt;br /&gt;&lt;br /&gt;Dim arrstrStPt, arrStPt()&lt;br /&gt;Dim arrstrEdPt(), arrEdPt()&lt;br /&gt;Dim arrstrALLEdPt, arrALLEdPt()&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;'user selection&lt;/span&gt;&lt;br /&gt;arrstrStPt = Rhino.GetObjects ("select root points", 1)&lt;br /&gt;arrstrALLEdPt = Rhino.GetObjects ("select reference points", 1)&lt;br /&gt;Rhino.Print &lt;span style="color: rgb(102, 255, 255);"&gt;"MINIMIZE RHINO WHINDOW TO SAVE TIME !!!"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For i = 0 To UBound(arrstrStPt)&lt;br /&gt;ReDim Preserve arrStPt(i)&lt;br /&gt;arrStPt(i) = Rhino.PointCoordinates (arrstrStPt(i))&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;For i = 0 To UBound(arrstrALLEdPt)&lt;br /&gt;ReDim Preserve arrALLEdPt(i)&lt;br /&gt;arrALLEdPt(i) = Rhino.PointCoordinates (arrstrALLEdPt(i))&lt;br /&gt;Next&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;'set boundary &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;Dim dblmaxX, dblminX, dblmaxY, dblminY&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;'Ultimate Loop&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;span style="color: rgb(102, 255, 255);"&gt;b = 100&lt;/span&gt;&lt;span style="color: rgb(102, 255, 255); font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;For&lt;/span&gt; j = 0 To UBound(arrStPt)&lt;br /&gt;&lt;br /&gt;dblmaxX = arrStPt(j)(0) &lt;span style="color: rgb(51, 255, 255);"&gt;&lt;span style="color: rgb(102, 255, 255);"&gt;+b&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;dblminX = arrStPt(j)(0) &lt;span style="color: rgb(102, 255, 255);"&gt;-b  &lt;/span&gt;&lt;br /&gt;dblmaxY = arrStPt(j)(1) &lt;span style="color: rgb(102, 255, 255);"&gt;+b &lt;/span&gt;&lt;br /&gt;dblminY = arrStPt(j)(1) &lt;span style="color: rgb(102, 255, 255);"&gt;-b &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;n = 0&lt;br /&gt;For m = 0 To UBound(arrstrALLEdPt)&lt;br /&gt;If dblmaxX &gt; arrALLEdPt(m)(0) And arrALLEdPt(m)(0) &gt; dblminX And dblmaxY &gt; arrALLEdPt(m)(1) And arrALLEdPt(m)(1) &gt; dblminY Then&lt;br /&gt;ReDim Preserve arrstrEdPt(n)&lt;br /&gt;arrstrEdPt(n) = Rhino.CopyObject (arrstrALLEdPt(m))&lt;br /&gt;ReDim Preserve arrEdPt(n)&lt;br /&gt;arrEdPt(n) = Rhino.PointCoordinates (arrstrEdPt(n))&lt;br /&gt;n = n+1&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;Next&lt;br /&gt;Call Rhino.DeleteObjects (arrstrEdPt)&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;'comparison&lt;/span&gt;&lt;br /&gt;Dim strLine01, dblDist01&lt;br /&gt;Dim strLine02, dblDist02&lt;br /&gt;Dim strPrevShortest, dblPrevShortest&lt;br /&gt;Dim strCurrShortest, dblCurrShortest&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;'find shortest&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;i = 0  'make one to begin comparison with&lt;br /&gt;strLine01 = Rhino.AddLine (arrStPt(j), arrEdPt(i))&lt;br /&gt;dblDist01 = Rhino.CurveLength (strLine01)&lt;br /&gt;strPrevShortest = strLine01&lt;br /&gt;dblPrevShortest = dblDist01&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;For&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt; i = 0 To UBound(arrEdPt)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;strLine02 = Rhino.AddLine (arrStPt(j), arrEdPt(i))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;dblDist02 = Rhino.CurveLength (strLine02)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;If dblDist02 &lt;= dblPrevShortest Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;strCurrShortest = strLine02        &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;dblCurrShortest = dblDist02     &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Rhino.DeleteObject strPrevShortest      &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Else            &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;strCurrShortest = strPrevShortest &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;dblCurrShortest = dblPrevShortest         &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Rhino.DeleteObject strLine02                 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;End If              &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;'prepare for next round     &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;strPrevShortest = strCurrShortest     &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;dblPrevShortest = dblCurrShortest             &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;'Rhino.Sleep 10 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;Next&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;'find second&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;Rhino.AddLayer &lt;span style="color: rgb(102, 255, 255);"&gt;"1st shortest"&lt;/span&gt;, RGB(0,255,255) 'cyan&lt;br /&gt;Rhino.ObjectLayer strCurrShortest, &lt;span style="color: rgb(102, 255, 255);"&gt;"1st shortest"&lt;/span&gt;&lt;br /&gt;Dim &lt;span style="color: rgb(102, 255, 255);"&gt;dbl1stShortest&lt;/span&gt;, &lt;span style="color: rgb(102, 255, 255);"&gt;str1stShortest&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 255, 255);"&gt;dbl1stShortest&lt;/span&gt; = Rhino.CurveLength (strPrevShortest)&lt;br /&gt;&lt;span style="color: rgb(51, 255, 255);"&gt;&lt;span style="color: rgb(102, 255, 255);"&gt;str1stShortest&lt;/span&gt; &lt;/span&gt;= strPrevShortest&lt;br /&gt;&lt;br /&gt;i = 0  'make one to begin comparison with&lt;br /&gt;strLine01 = Rhino.AddLine (arrStPt(j), arrEdPt(i))&lt;br /&gt;dblDist01 = Rhino.CurveLength (strLine01)&lt;br /&gt;&lt;br /&gt;If dblDist01 &lt;= &lt;span style="color: rgb(102, 255, 255);"&gt;dbl1stShortest&lt;/span&gt; Then&lt;br /&gt;dblDist01 = dblDist01 * 10&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;strPrevShortest = strLine01&lt;br /&gt;dblPrevShortest = dblDist01&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;For&lt;/span&gt; i = 0 To UBound(arrEdPt)&lt;br /&gt;strLine02 = Rhino.AddLine (arrStPt(j), arrEdPt(i))&lt;br /&gt;dblDist02 = Rhino.CurveLength (strLine02)&lt;br /&gt;&lt;br /&gt;If dblDist02 &lt;= dblPrevShortest And dblDist02 &gt; &lt;span style="color: rgb(102, 255, 255);"&gt;dbl1stShortest&lt;/span&gt; Then&lt;br /&gt;strCurrShortest = strLine02&lt;br /&gt;dblCurrShortest = dblDist02&lt;br /&gt;Rhino.DeleteObject strPrevShortest&lt;br /&gt;Else&lt;br /&gt;strCurrShortest = strPrevShortest&lt;br /&gt;dblCurrShortest = dblPrevShortest&lt;br /&gt;Rhino.DeleteObject strLine02     &lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;'prepare for next round&lt;br /&gt;strPrevShortest = strCurrShortest&lt;br /&gt;dblPrevShortest = dblCurrShortest&lt;br /&gt;'Rhino.Sleep 10&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Next&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;'find third&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;Rhino.AddLayer &lt;span style="color: rgb(102, 255, 255);"&gt;"2nd shortest"&lt;/span&gt;, RGB(0,0,191) 'dark blue&lt;br /&gt;Rhino.ObjectLayer strCurrShortest, &lt;span style="color: rgb(102, 255, 255);"&gt;"2nd shortest"&lt;/span&gt;&lt;br /&gt;Dim &lt;span style="color: rgb(102, 255, 255);"&gt;dbl2ndShortest&lt;/span&gt;, &lt;span style="color: rgb(102, 255, 255);"&gt;str2ndShortest&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 255, 255);"&gt;dbl2ndShortest&lt;/span&gt; = Rhino.CurveLength (strPrevShortest)&lt;br /&gt;&lt;span style="color: rgb(102, 255, 255);"&gt;str2ndShortest&lt;/span&gt; = strPrevShortest&lt;br /&gt;&lt;br /&gt;i = 0  'make one to begin comparison with&lt;br /&gt;strLine01 = Rhino.AddLine (arrStPt(j), arrEdPt(i))&lt;br /&gt;dblDist01 = Rhino.CurveLength (strLine01)&lt;br /&gt;&lt;br /&gt;If dblDist01 &lt;= &lt;span style="color: rgb(102, 255, 255);"&gt;dbl2ndShortest&lt;/span&gt; Then&lt;br /&gt;dblDist01 = dblDist01 * 10&lt;br /&gt;End If&lt;br /&gt;strPrevShortest = strLine01&lt;br /&gt;dblPrevShortest = dblDist01&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;For &lt;/span&gt;i = 0 To UBound(arrEdPt)&lt;br /&gt;strLine02 = Rhino.AddLine (arrStPt(j), arrEdPt(i))&lt;br /&gt;dblDist02 = Rhino.CurveLength (strLine02)&lt;br /&gt;&lt;br /&gt;If dblDist02 &lt;= dblPrevShortest And dblDist02 &gt; &lt;span style="color: rgb(102, 255, 255);"&gt;dbl2ndShortest&lt;/span&gt;&lt;span style="color: rgb(102, 255, 255);"&gt; &lt;/span&gt;Then&lt;br /&gt;strCurrShortest = strLine02&lt;br /&gt;dblCurrShortest = dblDist02&lt;br /&gt;Rhino.DeleteObject strPrevShortest&lt;br /&gt;Else&lt;br /&gt;strCurrShortest = strPrevShortest&lt;br /&gt;dblCurrShortest = dblPrevShortest&lt;br /&gt;Rhino.DeleteObject strLine02   &lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;'prepare for next round&lt;br /&gt;strPrevShortest = strCurrShortest&lt;br /&gt;dblPrevShortest = dblCurrShortest&lt;br /&gt;'Rhino.Sleep 10&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Next&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;&lt;br /&gt;'find fourth&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;Rhino.AddLayer &lt;span style="color: rgb(102, 255, 255);"&gt;"3rd shortest"&lt;/span&gt;, RGB(127,255,191) 'Aquamarine&lt;br /&gt;Rhino.ObjectLayer strCurrShortest, &lt;span style="color: rgb(102, 255, 255);"&gt;"3rd shortest"&lt;/span&gt;&lt;br /&gt;Dim &lt;span style="color: rgb(102, 255, 255);"&gt;dbl3rdShortest&lt;/span&gt;, &lt;span style="color: rgb(102, 255, 255);"&gt;str3rdShortest&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 255, 255);"&gt;dbl3rdShortest&lt;/span&gt; = Rhino.CurveLength (strPrevShortest)&lt;br /&gt;&lt;span style="color: rgb(102, 255, 255);"&gt;str3rdShortest&lt;/span&gt; = strPrevShortest&lt;br /&gt;&lt;br /&gt;i = 0  'make one to begin comparison with&lt;br /&gt;strLine01 = Rhino.AddLine (arrStPt(j), arrEdPt(i))&lt;br /&gt;dblDist01 = Rhino.CurveLength (strLine01)&lt;br /&gt;&lt;br /&gt;If dblDist01 &lt;=&lt;span style="color: rgb(102, 255, 255);"&gt; dbl3rdShortest&lt;/span&gt; Then&lt;br /&gt;dblDist01 = dblDist01 * 10&lt;br /&gt;End If&lt;br /&gt;strPrevShortest = strLine01&lt;br /&gt;dblPrevShortest = dblDist01&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;For&lt;/span&gt; i = 0 To UBound(arrEdPt)&lt;br /&gt;strLine02 = Rhino.AddLine (arrStPt(j), arrEdPt(i))&lt;br /&gt;dblDist02 = Rhino.CurveLength (strLine02)&lt;br /&gt;&lt;br /&gt;If dblDist02 &lt;= dblPrevShortest And dblDist02 &gt; &lt;span style="color: rgb(102, 255, 255);"&gt;dbl3rdShortest&lt;/span&gt; Then&lt;br /&gt;strCurrShortest = strLine02&lt;br /&gt;dblCurrShortest = dblDist02&lt;br /&gt;Rhino.DeleteObject strPrevShortest&lt;br /&gt;Else&lt;br /&gt;strCurrShortest = strPrevShortest&lt;br /&gt;dblCurrShortest = dblPrevShortest&lt;br /&gt;Rhino.DeleteObject strLine02&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;'prepare for next round&lt;br /&gt;strPrevShortest = strCurrShortest&lt;br /&gt;dblPrevShortest = dblCurrShortest&lt;br /&gt;'Rhino.Sleep 10&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Next&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;'paste above here &lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;Rhino.AddLayer &lt;span style="color: rgb(102, 255, 255);"&gt;"final shortest"&lt;/span&gt;, RGB(255,255,255) 'white&lt;br /&gt;Rhino.ObjectLayer strCurrShortest, &lt;span style="color: rgb(102, 255, 255);"&gt;"final shortest"&lt;/span&gt;&lt;br /&gt;Dim &lt;span style="color: rgb(102, 255, 255);"&gt;dblFinalShortest&lt;/span&gt;, &lt;span style="color: rgb(102, 255, 255);"&gt;strFinalShortest&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 255, 255);"&gt;dblFinalShortest&lt;/span&gt; = Rhino.CurveLength (strPrevShortest)&lt;br /&gt;&lt;span style="color: rgb(102, 255, 255);"&gt;strFinalShortest &lt;/span&gt;= strPrevShortest&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;Next  &lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;Call Rhino.Print ("script complete")&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-1325324183557412713?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/1325324183557412713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/1325324183557412713'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/07/branching.html' title='Branching'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_DACBIEbkSBY/SG5U4Z137fI/AAAAAAAAAHk/aMsJ74BOvC4/s72-c/branching.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-6379663863092138833</id><published>2008-06-28T12:31:00.001-07:00</published><updated>2008-07-12T09:28:46.560-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Finite Element Analysis</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_DACBIEbkSBY/SHja3s9KrkI/AAAAAAAAAHs/q8_4RrbOOVc/s1600-h/bridge02.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_DACBIEbkSBY/SHja3s9KrkI/AAAAAAAAAHs/q8_4RrbOOVc/s320/bridge02.jpg" alt="" id="BLOGGER_PHOTO_ID_5222164418431462978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creating geometry for Finite Element Analysis (FEA). FEA is a computer simulation &lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;technique used in engineering analysis (straight from Wiki...) It requires all the line geometries to be meeting at points. If you are Osnap-ing manually, there is high chance that you miss a couple. So, here it is. Out of spline and two offset splines, this script creates basic structure for a bridge.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;User has to provide with &lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;manually-built &lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;normals at each division point. Length doesn't matter. It is to show direction only, and will be deleted by the end of the script.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;Challenge:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:100%;"  &gt;_Confusion between stringPt and arrPt&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style="font-size:100%;"&gt;_Playing with Layer method&lt;br /&gt;_In Loop, lines require to refer a point from previous round&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;Option Explicit&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;'Author: YukiukiH&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;'&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;Date: 06/28/2008&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;'compatibility: Rhino4&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'memo: watch arrPt and strPt&lt;br /&gt;&lt;br /&gt;'before run...&lt;br /&gt;'1. given spline.&lt;br /&gt;'2. divide spline.&lt;br /&gt;'3. draw normal at each points. (use perpendicular to curve/ from first point)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;bridgeSt&lt;br /&gt;Sub bridgeSt&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;'first things first...&lt;/span&gt;&lt;br /&gt;Rhino.AddLayer "splineCenter", RGB(255,0,0) 'black&lt;br /&gt;Rhino.AddLayer "centerPt", RGB(0,0,0) 'black&lt;br /&gt;Rhino.AddLayer "normalAxis", RGB(0,0,0) 'black&lt;br /&gt;Rhino.AddLayer "normal01", RGB(255,161,0) 'gold&lt;br /&gt;Rhino.AddLayer "normal02", RGB(255,127,0) 'orange&lt;br /&gt;Rhino.AddLayer "side01", RGB(0,0,0) 'black&lt;br /&gt;Rhino.AddLayer "side02", RGB(0,0,0) 'black&lt;br /&gt;Rhino.AddLayer "Pt", RGB(0,0,0) 'black&lt;br /&gt;&lt;br /&gt;Rhino.AddLayer "Line011", RGB(63,191,191) 'turquoise&lt;br /&gt;Rhino.AddLayer "Line022", RGB(63,191,191) 'turquoise&lt;br /&gt;Rhino.AddLayer "Line033", RGB(0,0,0) 'black&lt;br /&gt;Rhino.AddLayer "Line044", RGB(0,0,0) 'black&lt;br /&gt;Rhino.AddLayer "Line055", RGB(255,0,0) 'red&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;'organizing object layers&lt;/span&gt;&lt;br /&gt;Dim strSpline, arrstrCenPt, arrstrNormalAxis&lt;br /&gt;Dim arrPt, arrPts, strCenPt, dblLength&lt;br /&gt;&lt;br /&gt;strSpline = Rhino.GetObject ("select a spline curve", 4)&lt;br /&gt;Rhino.ObjectLayer strSpline , "splineCenter"&lt;br /&gt;Rhino.LayerVisible "splineCenter", False&lt;br /&gt;&lt;br /&gt;arrstrCenPt = Rhino.GetObjects ("select center points", 1)&lt;br /&gt;Rhino.ObjectLayer arrstrCenPt , "centerPt"&lt;br /&gt;Rhino.CurrentLayer ("CenterPt")&lt;br /&gt;Rhino.DeleteObjects arrstrCenPt&lt;br /&gt;&lt;br /&gt;'by length segment&lt;br /&gt;dblLength = 1500&lt;br /&gt;arrPts = Rhino.DivideCurveLength(strSpline, dblLength)&lt;br /&gt;&lt;br /&gt;'by segments&lt;br /&gt;'intSegments = 130&lt;br /&gt;'arrPoints = Rhino.DivideCurve(strSpline, intSegments)&lt;br /&gt;&lt;br /&gt;For Each arrPt In arrPts&lt;br /&gt;strCenPt = Rhino.AddPoint (arrPt)&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;arrstrNormalAxis = Rhino.GetObjects ("select normal lines IN ORDER", 4)&lt;br /&gt;Rhino.ObjectLayer arrstrNormalAxis , "normalAxis"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;'at each point...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dim i, arrNormalAxisStPt, arrNormalAxisEdPt&lt;br /&gt;Dim strLine01, strLine02, arrSt(2), arrEd(2), arrReference(1), arrTarget(1)&lt;br /&gt;&lt;br /&gt;arrSt(0) = 0&lt;br /&gt;arrSt(1) = 0&lt;br /&gt;arrSt(2) = 0&lt;br /&gt;arrEd(0) = 2000 'bridge width&lt;br /&gt;arrEd(1) = 0&lt;br /&gt;arrEd(2) = 0&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 255, 0);"&gt;For i = 0 To UBound&lt;/span&gt; (arrstrNormalAxis)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;'create vector out of string normal, and orient lines&lt;/span&gt;&lt;br /&gt;arrNormalAxisStPt = Rhino.CurveStartPoint (arrstrNormalAxis(i))&lt;br /&gt;arrNormalAxisEdPt = Rhino.CurveEndPoint (arrstrNormalAxis(i))&lt;br /&gt;Rhino.LayerVisible "normalAxis", False&lt;br /&gt;&lt;br /&gt;arrReference(0) = arrSt&lt;br /&gt;arrReference(1) = arrEd&lt;br /&gt;arrTarget(0) = arrNormalAxisStPt&lt;br /&gt;arrTarget(1) = arrNormalAxisEdPt&lt;br /&gt;&lt;br /&gt;Rhino.CurrentLayer ("normal01")&lt;br /&gt;strLine01 = Rhino.AddLine (arrSt, arrEd)&lt;br /&gt;Rhino.OrientObject strLine01, arrReference, arrTarget&lt;br /&gt;&lt;br /&gt;Rhino.CurrentLayer ("normal02")&lt;br /&gt;strLine02 = Rhino.AddLine (arrSt, arrEd)&lt;br /&gt;Rhino.OrientObject strLine02, arrReference, arrTarget&lt;br /&gt;Rhino.RotateObject strLine02, arrNormalAxisStPt, 180&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;'prepare vector for 3d rotation&lt;/span&gt;&lt;br /&gt;Dim arrLine01EdPt, arrLine02EdPt&lt;br /&gt;Dim strLine01axis, strLine02axis&lt;br /&gt;Dim arrLine01StPt, arrLine02StPt, arrAxis01, arrAxis02&lt;br /&gt;Dim strLine01vrt, strLine02vrt&lt;br /&gt;&lt;br /&gt;arrLine01EdPt = Rhino.CurveEndPoint (strLine01)&lt;br /&gt;arrLine02EdPt = Rhino.CurveEndPoint (strLine02)&lt;br /&gt;&lt;br /&gt;strLine01axis = Rhino.RotateObject (strLine01, arrLine01EdPt, 90,, True)&lt;br /&gt;strLine02axis = Rhino.RotateObject (strLine02, arrLine02EdPt, 90,, True)&lt;br /&gt;&lt;br /&gt;arrLine01StPt = Rhino.CurveStartPoint (strLine01axis)&lt;br /&gt;arrLine02StPt = Rhino.CurveStartPoint (strLine02axis)&lt;br /&gt;&lt;br /&gt;arrAxis01= Rhino.VectorCreate (arrLine01EdPt, arrLine01StPt)&lt;br /&gt;arrAxis02= Rhino.VectorCreate (arrLine02EdPt, arrLine02StPt)&lt;br /&gt;&lt;br /&gt;strLine01vrt = Rhino.CopyObject(strLine01)&lt;br /&gt;Rhino.ObjectLayer strLine01vrt, "side01"&lt;br /&gt;Rhino.RotateObject strLine01vrt, arrLine01EdPt, 100, arrAxis01&lt;br /&gt;&lt;br /&gt;strLine02vrt = Rhino.CopyObject(strLine02)&lt;br /&gt;Rhino.ObjectLayer strLine02vrt, "side02"&lt;br /&gt;Rhino.RotateObject strLine02vrt, arrLine02EdPt, 100, arrAxis02&lt;br /&gt;&lt;br /&gt;Rhino.DeleteObject (strLine01axis)&lt;br /&gt;Rhino.DeleteObject (strLine02axis)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;'add string points&lt;/span&gt;&lt;br /&gt;Dim arrStPtLine01vrt, arrStPtLine02vrt, arrEdPtLine01vrt, arrEdPtLine02vrt&lt;br /&gt;Dim strStPtLine01vrt, strStPtLine02vrt, strEdPtLine01vrt, strEdPtLine02vrt&lt;br /&gt;&lt;br /&gt;Rhino.CurrentLayer ("Pt")&lt;br /&gt;&lt;br /&gt;arrStPtLine01vrt = Rhino.CurveStartPoint (strLine01vrt)&lt;br /&gt;arrStPtLine02vrt = Rhino.CurveStartPoint (strLine02vrt)&lt;br /&gt;strStPtLine01vrt = Rhino.AddPoint (arrStPtLine01vrt)&lt;br /&gt;strStPtLine02vrt = Rhino.AddPoint (arrStPtLine02vrt)&lt;br /&gt;&lt;br /&gt;arrEdPtLine01vrt = Rhino.CurveEndPoint (strLine01vrt)&lt;br /&gt;arrEdPtLine02vrt = Rhino.CurveEndPoint (strLine02vrt)&lt;br /&gt;strEdPtLine01vrt = Rhino.AddPoint (arrEdPtLine01vrt)&lt;br /&gt;strEdPtLine02vrt = Rhino.AddPoint (arrEdPtLine02vrt)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;'create lines between current(B) and previous(A)&lt;/span&gt;&lt;br /&gt;Dim strLine011, arrLine011PtA, arrLine011PtB, arrpt011PtAtemp&lt;br /&gt;Dim strLine022, arrLine022PtA, arrLine022PtB, arrpt022PtAtemp&lt;br /&gt;Dim strLine033, arrLine033PtA, arrLine033PtB, arrpt033PtAtemp&lt;br /&gt;Dim strLine044, arrLine044PtA, arrLine044PtB, arrpt044PtAtemp&lt;br /&gt;Dim strLine055, arrLine055PtA, arrLine055PtB, arrpt055PtAtemp&lt;br /&gt;Dim strEdPtVrt03, strEdPtVrt04&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;'prepare current(B) and previous(A)points&lt;/span&gt;&lt;br /&gt;If i = 0 Then&lt;br /&gt;&lt;br /&gt;'BTM line (Line011, 022)&lt;br /&gt;arrLine011PtA = arrLine01EdPt&lt;br /&gt;arrLine022PtA = arrLine02EdPt&lt;br /&gt;&lt;br /&gt;'TP line (Line 033, 044)&lt;br /&gt;arrLine033PtA = Rhino.CurveStartPoint (strLine01vrt)&lt;br /&gt;arrLine044PtA = Rhino.CurveStartPoint (strLine02vrt)&lt;br /&gt;&lt;br /&gt;'MD line (Line 055)&lt;br /&gt;arrLine055PtA = arrPts(i)&lt;br /&gt;&lt;br /&gt;Else&lt;br /&gt;&lt;br /&gt;'BTM line (Line011, 022)&lt;br /&gt;arrpt011PtAtemp = arrLine01EdPt&lt;br /&gt;arrpt022PtAtemp = arrLine02EdPt&lt;br /&gt;arrLine011PtB = arrpt011PtAtemp&lt;br /&gt;arrLine022PtB = arrpt022PtAtemp&lt;br /&gt;&lt;br /&gt;'TP line (Line 033, 044)&lt;br /&gt;arrpt033PtAtemp = Rhino.CurveStartPoint (strLine01vrt)&lt;br /&gt;arrpt044PtAtemp = Rhino.CurveStartPoint (strLine02vrt)&lt;br /&gt;arrLine033PtB = arrpt033PtAtemp&lt;br /&gt;arrLine044PtB = arrpt044PtAtemp&lt;br /&gt;&lt;br /&gt;'MD line (Line 055)&lt;br /&gt;arrpt055PtAtemp = arrPts(i)&lt;br /&gt;arrLine055PtB = arrpt055PtAtemp&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;'add line (Line 011, 022, 033, 044, 055)&lt;/span&gt;&lt;br /&gt;Rhino.CurrentLayer ("Line011")&lt;br /&gt;strLine011 = Rhino.AddLine (arrLine011PtA, arrLine011PtB)&lt;br /&gt;&lt;br /&gt;Rhino.CurrentLayer ("Line022")&lt;br /&gt;strLine022 = Rhino.AddLine (arrLine022PtA, arrLine022PtB)&lt;br /&gt;&lt;br /&gt;Rhino.CurrentLayer ("Line033")&lt;br /&gt;strLine033 = Rhino.AddLine (arrLine033PtA, arrLine033PtB)&lt;br /&gt;&lt;br /&gt;Rhino.CurrentLayer ("Line044")&lt;br /&gt;strLine044 = Rhino.AddLine (arrLine044PtA, arrLine044PtB)&lt;br /&gt;&lt;br /&gt;Rhino.CurrentLayer ("Line055")&lt;br /&gt;strLine055 = Rhino.AddLine (arrLine055PtA, arrLine055PtB)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;  ' prepare for next round  &lt;/span&gt;&lt;br /&gt;'BTM line (Line011, 022)&lt;br /&gt;arrLine011PtA = arrLine011PtB&lt;br /&gt;arrLine022PtA = arrLine022PtB&lt;br /&gt;&lt;br /&gt;'TP line (Line033, 044)&lt;br /&gt;arrLine033PtA = arrLine033PtB&lt;br /&gt;arrLine044PtA = arrLine044PtB&lt;br /&gt;&lt;br /&gt;'MD line (Line055)&lt;br /&gt;arrLine055PtA = arrLine055PtB&lt;br /&gt;&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 255, 0);"&gt;Next&lt;/span&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-6379663863092138833?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6379663863092138833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6379663863092138833'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/06/debugging.html' title='Finite Element Analysis'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_DACBIEbkSBY/SHja3s9KrkI/AAAAAAAAAHs/q8_4RrbOOVc/s72-c/bridge02.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-1071964362466852687</id><published>2008-06-21T11:52:00.000-07:00</published><updated>2008-07-12T10:43:50.323-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Normal to Curve</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_DACBIEbkSBY/SHjqF9ErwfI/AAAAAAAAAH0/ylw3Mzvrhj0/s1600-h/bridge00.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_DACBIEbkSBY/SHjqF9ErwfI/AAAAAAAAAH0/ylw3Mzvrhj0/s320/bridge00.jpg" alt="" id="BLOGGER_PHOTO_ID_5222181155950543346" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:100%;"  &gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Having hard time with &lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:100%;"  &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;drawing normal (of the main spline) at each division point&lt;/span&gt; I ended up intersecting circle and offset splines. &lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:100%;"  &gt;So when I first offset the main spline, I had to set offset tolerance high, at least more than default otherwise intersection fails.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;Option Explicit&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;'Author: YukiukiH&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;'&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;Date: 06/21/2008&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;'compatibility: Rhino4&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:100%;"  &gt;&lt;span style="font-size:85%;"&gt;'memo: watch arrPt and strPt&lt;br /&gt;&lt;br /&gt;bridgeSt&lt;br /&gt;Sub bridgeSt&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 153, 0);font-size:85%;" &gt;'first things first...&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Rhino.AddLayer "centerPt", RGB(0,0,0) 'black&lt;br /&gt;Rhino.AddLayer "circle", RGB(105,105,105) 'darl gray&lt;br /&gt;Rhino.AddLayer "normal01", RGB(255,161,0) 'gold&lt;br /&gt;Rhino.AddLayer "normal02", RGB(255,127,0) 'orange&lt;br /&gt;Rhino.AddLayer "Pt", RGB(0,0,0) 'black&lt;br /&gt;Rhino.CurrentLayer ("centerPt")&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 153, 0);font-size:85%;" &gt;'divide bridge spline into segments (by length or segments)&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Dim strSpline, dblLength, intSegments&lt;br /&gt;Dim strOffset01, strOffset02&lt;br /&gt;Dim arrPts, arrPt, strCenPt&lt;br /&gt;&lt;br /&gt;strSpline = Rhino.GetObject("Select a curve")&lt;br /&gt;strOffset01 = Rhino.GetObject("Select the first offset curve")&lt;br /&gt;strOffset02 = Rhino.GetObject("Select the second offset curve")&lt;br /&gt;Call Rhino.LayerVisible ("splineCenter", False)&lt;br /&gt;Call Rhino.LayerVisible ("splineOffset", False)&lt;br /&gt;&lt;br /&gt;If Rhino.IsCurve(strSpline) Then&lt;br /&gt;'by length segment&lt;br /&gt;dblLength = 1500&lt;br /&gt;arrPts = Rhino.DivideCurveLength(strSpline, dblLength)&lt;br /&gt;'by segments&lt;br /&gt;'intSegments = 130&lt;br /&gt;'arrPoints = Rhino.DivideCurve(strSpline, intSegments)&lt;br /&gt;For Each arrPt In arrPts&lt;br /&gt;strCenPt = Rhino.AddPoint (arrPt)&lt;br /&gt;Next&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;'Ultimate Loop&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:100%;"  &gt;&lt;span style="font-size:85%;"&gt;Dim i, k&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;For&lt;/span&gt;&lt;span style="font-size:85%;"&gt; i = 0 To UBound(arrPts)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 153, 0);font-size:85%;" &gt;'intersection (circle and offset spline) finds normal   &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Dim strCircle, arrPlane, arrInterPt01, arrInterPt02&lt;br /&gt;&lt;br /&gt;arrPlane = Rhino.WorldXYPlane&lt;br /&gt;strCircle = Rhino.AddCircle (arrPlane, 2000)&lt;br /&gt;Call Rhino.ObjectLayer (strCircle, "circle")&lt;br /&gt;Rhino.MoveObject strCircle, Array(0,0,0), arrPts(i)&lt;br /&gt;&lt;br /&gt;Rhino.CurrentLayer ("Pt")&lt;br /&gt;arrInterPt01 = Rhino.CurveCurveIntersection(strOffset01, strCircle)&lt;br /&gt;&lt;br /&gt;If Not IsArray(arrInterPt01) Then&lt;br /&gt;Rhino.Print "Selected curves do not intersect"&lt;br /&gt;Exit Sub&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;If arrInterPt01(k,0) = 1 Then&lt;br /&gt;Rhino.Print "Intersection point on first curve: " &amp;amp; Rhino.Pt2Str(arrInterPt01(k,1))&lt;br /&gt;Rhino.AddPoint arrInterPt01(k,1)&lt;br /&gt;Else&lt;br /&gt;Rhino.Print "Overlap"&lt;br /&gt;Exit Sub&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;arrInterPt02 = Rhino.CurveCurveIntersection(strOffset02, strCircle)&lt;br /&gt;If Not IsArray(arrInterPt02) Then&lt;br /&gt;Rhino.Print "Selected curves do not intersect"&lt;br /&gt;Exit Sub&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;If arrInterPt02(k,0) = 1 Then&lt;br /&gt;Rhino.Print "Intersection point on first curve: " &amp;amp; Rhino.Pt2Str(arrInterPt02(k,1))&lt;br /&gt;Rhino.AddPoint arrInterPt02(k,1)&lt;br /&gt;Else&lt;br /&gt;Rhino.Print "Overlap"&lt;br /&gt;Exit Sub&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 153, 0);font-size:85%;" &gt;'add normal line &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Dim strLine01, strLine02, strLine01axis, strLine02axis&lt;br /&gt;Dim arrStPtLine01, arrStPtLine02, arrAxis01, arrAxis02&lt;br /&gt;Dim strLine01vrt, strLine02vrt&lt;br /&gt;&lt;br /&gt;Rhino.CurrentLayer ("normal01")&lt;br /&gt;strLine01 = Rhino.AddLine (arrPts(i), arrInterPt01(k,1))&lt;br /&gt;Rhino.CurrentLayer ("normal02")&lt;br /&gt;strLine02 = Rhino.AddLine (arrPts(i), arrInterPt02(k,1))&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Next&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;'----------------------------------------------------------------&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:100%;"  &gt;&lt;span style="font-size:85%;"&gt;Call Rhino.LayerVisible ("splineCenter", True)&lt;br /&gt;Call Rhino.LayerVisible ("splineOffset", True)&lt;br /&gt;Call Rhino.print ("script complete")&lt;br /&gt;End Sub&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-1071964362466852687?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/1071964362466852687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/1071964362466852687'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/06/finite-element-analysis.html' title='Normal to Curve'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_DACBIEbkSBY/SHjqF9ErwfI/AAAAAAAAAH0/ylw3Mzvrhj0/s72-c/bridge00.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-6662246379882971171</id><published>2008-03-16T20:00:00.001-07:00</published><updated>2008-06-21T12:06:26.059-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MEL'/><category scheme='http://www.blogger.com/atom/ns#' term='Sky'/><title type='text'>Ball Tracking</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_DACBIEbkSBY/R93fxjESKVI/AAAAAAAAAGQ/AHBDLeboASk/s1600-h/renderimage6.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_DACBIEbkSBY/R93fxjESKVI/AAAAAAAAAGQ/AHBDLeboASk/s400/renderimage6.jpg" alt="" id="BLOGGER_PHOTO_ID_5178541188865730898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;Recently finished Nick Pisca's MEL scripting workshop and found MEL is a lot of fun. Seems much smarter than Rhino in a lot of ways. Things like declarations and arrays are much easier although the case sensitive stuff gets me all the time.  We didn't cover procedures in the workshop but got to hit a lot of ground including scripting material assignment and rendering.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Here's a simple tracking script where planes duplicate and deform while following an animated object. I'll post the video sometime in the future.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;//Tracking script&lt;br /&gt;//&lt;br /&gt;//Written by: Sky Milner&lt;br /&gt;//Date: 3-03-08&lt;br /&gt;//Contributor: Nick Pisca&lt;br /&gt;//&lt;br /&gt;//This script duplicates selected objects based on the&lt;br /&gt;//location of a target.&lt;br /&gt;//&lt;br /&gt;//Setup:&lt;br /&gt;//First make an object and call it "Target", Animate target as you like, make 6 nurbsPlanes&lt;br /&gt;//&lt;br /&gt;//&lt;br /&gt;//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;string $Selection[] = {"nurbsPlane1", "nurbsPlane2", "nurbsPlane2", "nurbsPlane3",   "nurbsPlane3","nurbsPlane4","nurbsPlane4","nurbsPlane5","nurbsPlane5","nurbsPlane6", "nurbsPlane6","nurbsPlane1"};&lt;br /&gt;int $SelSize = size($Selection);&lt;br /&gt;int $SquareCounter = 0;&lt;br /&gt;&lt;br /&gt;for ($i = 0; $i &lt; currentnumber =" 0;" selectioncounter =" 0;" firstobject =" $Selection[$CurrentNumber];" secondobject =" $Selection[$CurrentNumber+1];" vecfirst =" &lt;&lt;$XYZfirst[0],"&gt;&gt; ;&lt;br /&gt;&lt;br /&gt; float $XYZsecond[] = `pointPosition ($SecondObject + ".cv [0] [0]")` ;&lt;br /&gt; vector $VecSecond = &lt;&lt;$XYZsecond[0], $XYZsecond[1], $XYZsecond[2]&gt;&gt; ;&lt;br /&gt;&lt;br /&gt; float $XYZtarget[] = `pointPosition ("Target.cv [0] [0]")`;&lt;br /&gt; vector $VecTarget = &lt;&lt;$XYZtarget[0], $XYZtarget[1], $XYZtarget[2]&gt;&gt;;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; $Between = $VecFirst - $VecSecond;&lt;br /&gt;&lt;br /&gt; //Duplicate and move into position&lt;br /&gt;&lt;br /&gt; duplicate -rr -n ("series"+$i+"square"+$SquareCounter) $Selection[($CurrentNumber)];&lt;br /&gt;&lt;br /&gt; string $Duplicate = ("series"+$i+"square"+$SquareCounter);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; //setAttr ($Duplicate+ ".translate") ($XYZfirst[0] + $Between.x/(-2)) ($XYZfirst[1] + $Between.y / (-2) ) ($XYZfirst[2] + $Between.z / (-2));&lt;br /&gt;&lt;br /&gt;xform  -r -t ($Between.x/(-2)) ($Between.y / (-2)) ($Between.z / (-2)) $Duplicate;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; float $XYZduplicate[] = `pointPosition ($Duplicate + ".cv [0] [0]")`;&lt;br /&gt; vector $Vecduplicate = &lt;&lt;$XYZduplicate[0], $XYZduplicate[1], $XYZduplicate[2]&gt;&gt;;&lt;br /&gt;&lt;br /&gt; $Between2 = $VecTarget - $Vecduplicate;&lt;br /&gt;&lt;br /&gt; //setAttr ($Duplicate+ ".translate") ($XYZduplicate[0] + $Between2.x/4) ($XYZduplicate[1] + $Between2.y/2) ($XYZduplicate[2] + $Between2.z/4);&lt;br /&gt;&lt;br /&gt;xform  -r -t ($Between2.x/4) ($Between2.y/2) ($Between2.z/4) $Duplicate;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; //Scale Duplicate&lt;br /&gt;&lt;br /&gt; float $scalefactor = ((mag($Between2)*.01)+.75);&lt;br /&gt;&lt;br /&gt; //setAttr ($Duplicate+ ".scaleX") $scalefactor;&lt;br /&gt; //setAttr ($Duplicate+ ".scaleY") $scalefactor;&lt;br /&gt; //setAttr ($Duplicate+ ".scaleZ") $scalefactor;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; //Manipulate cv[0]&lt;br /&gt;&lt;br /&gt; float $PointX = `getAttr ($Duplicate + ".cv[0].xValue")`;&lt;br /&gt; float $PointY = `getAttr ($Duplicate + ".cv[0].yValue")`;&lt;br /&gt; float $PointZ = `getAttr ($Duplicate + ".cv[0].zValue")`;&lt;br /&gt;&lt;br /&gt; vector $VecPoint = &lt;&lt;$PointX, $PointY, $PointZ&gt;&gt;;&lt;br /&gt;&lt;br /&gt; $Between3 = $VecTarget - $VecPoint;&lt;br /&gt;&lt;br /&gt; setAttr ($Duplicate+ ".cv[0].xValue") ($PointX + $Between3.x/(10));&lt;br /&gt; setAttr ($Duplicate+ ".cv[0].yValue") ($PointY + $Between3.y/(10));&lt;br /&gt; setAttr ($Duplicate+ ".cv[0].zValue") ($PointZ + $Between3.z/(10));&lt;br /&gt;&lt;br /&gt; //setAttr ($Duplicate + ".objectColor") $SquareCounter;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;        $TempSelection [$SelectionCounter] = $FirstObject;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;       $TempSelection [$SelectionCounter+1] = $Duplicate;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;       $TempSelection [$SelectionCounter+2] = $SecondObject;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;       $TempSelection [$SelectionCounter+3] = $Duplicate;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;       $CurrentNumber = $CurrentNumber+2;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;       $SelectionCounter = $SelectionCounter + 4;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;       $SquareCounter++;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;   } while ($CurrentNumber &lt; $SelSize);     currentTime $i;     $Selection = $TempSelection;    $SelSize = size($Selection);    if ($SelSize &gt; 100) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;       for ($s = 0; $s &lt; selsize =" 100;" iii =" 0;" sizejump =" size($jump);" nicklambert = "nicklambert" nicklambertsg = "nicklambert" nicklambertoutcolor = "nicklambert" nicklambertsgss = "nicklambert" nicklamberttrans = "nicklambert" iiiend =" $iii" iiiend2 =" $iii" iii="$iii" i="0;" seriessize =" size($series);" s =" 0;" curshader =" $Shader[0];"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-6662246379882971171?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6662246379882971171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6662246379882971171'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/03/ball-tracking.html' title='Ball Tracking'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_DACBIEbkSBY/R93fxjESKVI/AAAAAAAAAGQ/AHBDLeboASk/s72-c/renderimage6.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-8780099417770870109</id><published>2008-03-05T03:56:00.000-08:00</published><updated>2008-06-21T13:27:59.998-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MEL'/><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><title type='text'>Next up is MEL!!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_DACBIEbkSBY/R86RThkA0dI/AAAAAAAAAGI/CUwZMVMcNlo/s1600-h/pSpheres.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_DACBIEbkSBY/R86RThkA0dI/AAAAAAAAAGI/CUwZMVMcNlo/s400/pSpheres.jpg" alt="" id="BLOGGER_PHOTO_ID_5174232786508239314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;Nicholas Pisca's workshop at SCI-Arc. I guess MEL is more forgiving than rvb. No Option Explicit, no Dim, and so forth... Sky, Ye, I'm waiting for your scripts too, ok?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;The following is a basic script to display certain information from multiple existing geometries. The challenge was to figure out the closest object for each one. I had to use two "integer counters" (&lt;span style="color: rgb(255, 255, 0);"&gt;$HCounter&lt;/span&gt; and &lt;span style="color: rgb(255, 255, 0);"&gt;$JCounter&lt;/span&gt;) and the &lt;span style="color: rgb(255, 153, 0);"&gt;orange portion&lt;/span&gt;&lt;span style="color: rgb(255, 153, 0);"&gt; &lt;/span&gt;(in the script) was the key for completing this script.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;//----------------------------------------------------------------&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;//----------------------------------------------------------------&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;// print information and the closest obj for each obj&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;//Author: yukie hirashima&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;//Contributor: sky&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;//Date: 03/05/2008&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;//compatibility: Maya8.5&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;SelectAll; //don't have to select manually&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;string $Sel[] = `ls-sl` ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;int $SelSize = `size($Sel)` ; //Max Array&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 255, 0);font-family:trebuchet ms;font-size:85%;"  &gt;int $JCounter = 0;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 255, 0);font-family:trebuchet ms;font-size:85%;"  &gt;do {&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;   &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    string $closest ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    string $CurrentRef = $Sel[$JCounter] ;    &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    float $ValScaleX = `getAttr ($Sel[$JCounter] + ".scaleX")` ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    print ("\n" ) ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    print ("\n" ) ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    print ($Sel[$JCounter] + " Attribute" + "/" + "\n") ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    print ("Objext name: " + $Sel[$JCounter] + " has an scaleX value of " + $ValScaleX + "\n" ) ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    float $ValRotateY = `getAttr ($Sel[$JCounter] + ".rotateY")` ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    print ("Objext name: " + $Sel[$JCounter] + " has an rotateY value of " + $ValRotateY + "\n" ) ;    &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    float $ValTranslateZ = `getAttr ($Sel[$JCounter] + ".translateZ")` ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    print ("Objext name: " + $Sel[$JCounter] + " has an translateZ value of " + $ValTranslateZ + "\n" ) ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;   &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    //comparig the closest for each one&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0); font-weight: bold;font-family:trebuchet ms;font-size:85%;"  &gt;    int $HCounter = 1;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;//creating mini array&lt;br /&gt;SelectAll; //don't have to select manually&lt;br /&gt;select -tgl $CurrentRef ;&lt;br /&gt;string $miniSel[] = `ls-sl` ;&lt;br /&gt;int $miniSelSize = `size($miniSel)` ; //max array&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 102, 102);font-family:trebuchet ms;font-size:85%;"  &gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    //creating $PreviousDist for the first round      &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    float $XYZVals01[] = `getAttr ($CurrentRef + ".translate")` ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    vector $XYZVec01 = &lt;&lt;$XYZVals01[0], $XYZVals01[1], $XYZVals01[2]&gt;&gt; ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;     &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    float $XYZVals02[] = `getAttr ($miniSel[$HCounter-1] + ".translate")` ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    vector $XYZVec02 = &lt;&lt;$XYZVals02[0], $XYZVals02[1], $XYZVals02[2]&gt;&gt; ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    $DiffVec = $XYZVec01 - $XYZVec02 ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    float $PreviousDist = mag($DiffVec) ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    //print ($PreviousDist + "\n") ;  //TESTPRINT $PreviousDist&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 255, 0);font-family:trebuchet ms;font-size:85%;"  &gt;    do {   &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;        &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 102, 0);font-family:trebuchet ms;font-size:85%;"  &gt;        //creating mini array for each round EXCLUDING &lt;/span&gt;&lt;span style="color: rgb(255, 102, 0);font-family:trebuchet ms;font-size:85%;"  &gt;$CurrentRef &lt;/span&gt;&lt;span style="color: rgb(255, 102, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 102, 0);font-family:trebuchet ms;font-size:85%;"  &gt;        SelectAll; //don't have to select manually&lt;/span&gt;&lt;span style="color: rgb(255, 102, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 102, 0);font-family:trebuchet ms;font-size:85%;"  &gt;        select -tgl $CurrentRef ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;        string $miniSel[] = `ls-sl` ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;        int $miniSelSize = `size($miniSel)` ; //Max Array&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;        print ("    now vs. " + $miniSel[$HCounter-1] + ":   ");  //TESTPRINT comparison&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;        &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;        //get a distance from vector&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;        &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;        float $XYZVals01[] = `getAttr ($CurrentRef + ".translate")` ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;        vector $XYZVec01 = &lt;&lt;$XYZVals01[0], $XYZVals01[1], $XYZVals01[2]&gt;&gt; ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;     &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;        float $XYZVals02[] = `getAttr ($miniSel[$HCounter-1] + ".translate")` ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;        vector $XYZVec02 = &lt;&lt;$XYZVals02[0], $XYZVals02[1], $XYZVals02[2]&gt;&gt; ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;        $DiffVec = $XYZVec01 - $XYZVec02 ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;        float $CurrentDist = mag($DiffVec) ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;        print ("Distance btw " + $CurrentRef + " &amp;amp; " + $miniSel[$HCounter-1] + " is " + $CurrentDist + "\n") ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;        if ($CurrentDist &lt;= $PreviousDist)  {    &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;                $closest = $miniSel[$HCounter-1] ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;                //print ("\n" + $CurrentDist) ;  //TESTPRINT $CurrentDist&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;                $PreviousDist= $CurrentDist ;  // prepareing for the next round&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;                &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;        }&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;    &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 255, 0);font-family:trebuchet ms;font-size:85%;"  &gt;        $HCounter++ ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 255, 0);font-family:trebuchet ms;font-size:85%;"  &gt;    } while ($HCounter &lt; $SelSize);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;        print ($CurrentRef + " is closest to " + $closest + "\n") ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0); font-weight: bold;font-family:trebuchet ms;font-size:85%;"  &gt;    $JCounter++ ;   &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0); font-weight: bold;font-family:trebuchet ms;font-size:85%;"  &gt;} while ($JCounter &lt; $SelSize) ;  &lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;// ----------------------------------------------------------------&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style="font-size:85%;"&gt;// ----------------------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-8780099417770870109?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/8780099417770870109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/8780099417770870109'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/03/no-stopping-now-is-mel.html' title='Next up is MEL!!!'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_DACBIEbkSBY/R86RThkA0dI/AAAAAAAAAGI/CUwZMVMcNlo/s72-c/pSpheres.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-1907982124780696698</id><published>2008-02-12T23:53:00.001-08:00</published><updated>2008-07-13T17:51:39.106-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Ready for Another Lattice?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_DACBIEbkSBY/SHqjEi1LQvI/AAAAAAAAAIc/SCLinzdVMjs/s1600-h/_Lattice002.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_DACBIEbkSBY/SHqjEi1LQvI/AAAAAAAAAIc/SCLinzdVMjs/s320/_Lattice002.jpg" alt="" id="BLOGGER_PHOTO_ID_5222666016354157298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_DACBIEbkSBY/R7KjLidCDfI/AAAAAAAAAF4/RoYqdH_zcb4/s1600-h/polyline.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_DACBIEbkSBY/R7KjLidCDfI/AAAAAAAAAF4/RoYqdH_zcb4/s320/polyline.jpg" alt="" id="BLOGGER_PHOTO_ID_5166371141169843698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is another practical script for making physical models. I have to explode polylines manually first, then select the segment curves in order to layout for print (with little markers). Since "orient curve" command keeps working in a Loop, I have to Esc out the script, or simply &lt;span style="color: rgb(255, 255, 0);"&gt;reDim "i" manually&lt;/span&gt; for every round.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;layoutPolyline&lt;br /&gt;Sub layoutPolyline&lt;br /&gt;&lt;br /&gt;Dim strLine01, strLine02, strLineSave, i, j, arrReference, arrTarget&lt;br /&gt;Dim arrCurve01S, arrCurve01E, arrCurve02S, arrCurve02E&lt;br /&gt;Dim arrTarget1, arrTarget2, strMarker&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 255, 0);"&gt;i = 4&lt;/span&gt;&lt;br /&gt;j = i + 0.75&lt;br /&gt;&lt;br /&gt;'select an initial line to duplicate and hide&lt;br /&gt;strLine01 = Rhino.GetObject ("select a line", 4)&lt;br /&gt;strLineSave = Rhino.CopyObject (strLine01)&lt;br /&gt;Call Rhino.HideObject(strLineSave)&lt;br /&gt;&lt;br /&gt;'orient the line&lt;br /&gt;arrCurve01S = Rhino.CurveStartPoint (strLine01)&lt;br /&gt;arrCurve01E = Rhino.CurveEndPoint (strLine01)&lt;br /&gt;&lt;br /&gt;arrReference = Array (arrCurve01S,arrCurve01E)&lt;br /&gt;arrTarget1 = Array (0,-i, 0)&lt;br /&gt;arrTarget2 = Array (99999,-i, 0)&lt;br /&gt;arrTarget = Array (arrTarget1,arrTarget2)&lt;br /&gt;&lt;br /&gt;strLine01 = Rhino.OrientObject (strLine01, arrReference, arrTarget)&lt;br /&gt;strMarker = Rhino.AddLine (arrTarget1, Array(0,-j,0))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'select the succeding lines in order&lt;br /&gt;Do&lt;br /&gt;'duplicate and hide&lt;br /&gt;strLine02 = Rhino.GetObject ("select the next line", 4)&lt;br /&gt;strLineSave = Rhino.CopyObject (strLine02)&lt;br /&gt;Call Rhino.HideObject(strLineSave)&lt;br /&gt;&lt;br /&gt;'orient lines&lt;br /&gt;arrCurve02S = Rhino.CurveStartPoint (strLine02)&lt;br /&gt;arrCurve02E = Rhino.CurveEndPoint (strLine02)&lt;br /&gt;&lt;br /&gt;arrReference = Array (arrCurve02S,arrCurve02E)&lt;br /&gt;arrTarget1 = Array (0,-i, 0)&lt;br /&gt;arrTarget2 = Array (99999,-i, 0)&lt;br /&gt;arrTarget = Array (arrTarget1,arrTarget2)&lt;br /&gt;&lt;br /&gt;strLine02 = Rhino.OrientObject (strLine02, arrReference, arrTarget)&lt;br /&gt;&lt;br /&gt;arrCurve01S = Rhino.CurveStartPoint (strLine01)&lt;br /&gt;arrCurve01E = Rhino.CurveEndPoint (strLine01)&lt;br /&gt;arrCurve02S = Rhino.CurveStartPoint (strLine02)&lt;br /&gt;arrCurve02E = Rhino.CurveEndPoint (strLine02)&lt;br /&gt;&lt;br /&gt;Call Rhino.MoveObject (strLine02, arrCurve02S, arrCurve01E)&lt;br /&gt;Call Rhino.CopyObject (strMarker, arrTarget1, arrCurve01E)&lt;br /&gt;&lt;br /&gt;strLine01 = strLine02&lt;br /&gt;Loop&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-1907982124780696698?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/1907982124780696698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/1907982124780696698'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/02/ready-for-another-lattice.html' title='Ready for Another Lattice?'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_DACBIEbkSBY/SHqjEi1LQvI/AAAAAAAAAIc/SCLinzdVMjs/s72-c/_Lattice002.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-7559384018498029968</id><published>2008-02-05T21:36:00.000-08:00</published><updated>2008-04-22T11:56:01.545-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Something Flowerly</title><content type='html'>&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_DACBIEbkSBY/R6lHvPU_FTI/AAAAAAAAAFw/baJeln0boXE/s1600-h/scriptVector.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_DACBIEbkSBY/R6lHvPU_FTI/AAAAAAAAAFw/baJeln0boXE/s320/scriptVector.jpg" alt="" id="BLOGGER_PHOTO_ID_5163737324650960178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;Recent progress in rvb. As it's explained in script, &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 204, 204);font-family:trebuchet ms;" &gt;1. create sphere in spiral, and scale accordingly&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 204, 204);font-family:trebuchet ms;" &gt;2. draw 2d line, rotate, and move&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 204, 204);font-family:trebuchet ms;" &gt;3. rotate sphere in 3D&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;thats all. Enjoy.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;addVector()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Sub addVector()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;  Dim arrCoordinate(2), arrPoint(), arrSphere(), arrScaleSphere()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;  Dim arrLine(), arrSt(2), arrEd(2), arrRotateLine(), dblAngle &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;  Dim arrFinSphere(), arrAxis(), arrLineEd()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;  Dim i, t, pi, arrScale&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;  Dim A, B, C&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;  i = 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;  dblAngle = 30  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 255, 0);font-family:trebuchet ms;" &gt;For&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt; t = -5 To 6 Step 0.05&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 204, 204);font-family:trebuchet ms;" &gt;'create sphere in spiral, and scale accordingly '''''''''''''''''''''''&lt;/span&gt;&lt;span style="color: rgb(255, 204, 204);font-family:trebuchet ms;" &gt;'''''''''''''''''''''''''''''''''''''''''''''''&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    A = 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    B = 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    C = t+5&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    arrScale = Array(A, B, C)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    arrCoordinate(0) = t*Sin(5*t)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    arrCoordinate(1) = t*Cos(5*t)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    arrCoordinate(2) = t&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    'ReDim Preserve arrPoint(i)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    'arrPoint(i) = Rhino.AddPoint(arrCoordinate)  'don't need a string of point to draw a sphere&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    ReDim Preserve arrSphere(i)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    arrSphere(i) = Rhino.AddSphere(arrCoordinate, 0.25)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    ReDim Preserve arrScaleSphere(i)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    arrScaleSphere(i) = Rhino.ScaleObject(arrSphere(i), arrCoordinate, arrScale)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 204, 204);font-family:trebuchet ms;" &gt;'draw 2d line, rotate, and move ''''''''''''''''''''''''''''''''''''''''''''''''&lt;/span&gt;&lt;span style="color: rgb(255, 204, 204);font-family:trebuchet ms;" &gt;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    arrSt(0) = arrCoordinate(0) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    arrSt(1) = arrCoordinate(1) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    arrSt(2) = 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    arrEd(0) = 0   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    arrEd(1) = 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    arrEd(2) = 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    ReDim Preserve arrLine(i)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    arrLine(i) = Rhino.AddLine(arrSt, arrEd)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;     &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    ReDim Preserve arrRotateLine(i)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    arrRotateLine(i) = Rhino.RotateObject(arrLine(i), arrSt, 90)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    Call Rhino.MoveObject (arrLine(i), arrSt, arrCoordinate)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 204, 204);font-family:trebuchet ms;" &gt;'rotate sphere in 3d '''''''''''''''''''''''&lt;/span&gt;&lt;span style="color: rgb(255, 204, 204);font-family:trebuchet ms;" &gt;''''''''''''''''''''''''''''''''''''''''''''''''''''''''&lt;/span&gt;&lt;span style="color: rgb(255, 204, 204);font-family:trebuchet ms;" &gt;'''''''''''''''''''''''''''''''''''''''''''''&lt;/span&gt;&lt;span style="color: rgb(255, 204, 204);font-family:trebuchet ms;" &gt;'''''''''''''''  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    ReDim Preserve arrLineEd(i)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    arrLineEd(i) = Rhino.CurveEndPoint (arrLine(i))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    ReDim Preserve arrAxis(i)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    arrAxis(i)= Rhino.VectorCreate (arrCoordinate, arrLineEd(i))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    ReDim Preserve arrFinSphere(i) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    arrFinSphere(i) = Rhino.RotateObject (arrScaleSphere(i), arrCoordinate, dblAngle, arrAxis(i))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);font-family:trebuchet ms;" &gt;    i = i+1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0); font-weight: bold;font-family:trebuchet ms;" &gt;Next&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-7559384018498029968?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/7559384018498029968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/7559384018498029968'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2008/02/something-flowerly.html' title='Something Flowerly'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_DACBIEbkSBY/R6lHvPU_FTI/AAAAAAAAAFw/baJeln0boXE/s72-c/scriptVector.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-6222010349206561886</id><published>2007-11-26T17:27:00.000-08:00</published><updated>2008-07-13T17:52:53.077-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>orientCurve</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_DACBIEbkSBY/SHqjUtvwJ7I/AAAAAAAAAIk/us_QBt5BXss/s1600-h/_Lattice001.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_DACBIEbkSBY/SHqjUtvwJ7I/AAAAAAAAAIk/us_QBt5BXss/s320/_Lattice001.jpg" alt="" id="BLOGGER_PHOTO_ID_5222666294162106290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The following is the script to construct this mess. I modeled a polygon lattice in Maya with multiple deformer. In Rhino, the script allows me to select those lines in order to lay them out. I printed those lines and cut wood sticks accordingly.&lt;br /&gt;&lt;br /&gt;NO measuring! Saved my ass.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_DACBIEbkSBY/R0t1RsvwdgI/AAAAAAAAAFc/wx-jdVLHpRk/s1600-h/ScreenShot014.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_DACBIEbkSBY/R0t1RsvwdgI/AAAAAAAAAFc/wx-jdVLHpRk/s320/ScreenShot014.jpg" alt="" id="BLOGGER_PHOTO_ID_5137328746875876866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;Sub orientCurve&lt;br /&gt;&lt;br /&gt;Dim strLine, i, arrReference, arrTarget&lt;br /&gt;Dim strCurveS, strCurveE, strTarget1, strTarget2&lt;br /&gt;i = 4&lt;br /&gt;&lt;br /&gt;Do&lt;br /&gt;&lt;br /&gt;'select lines in order&lt;br /&gt;strLine = Rhino.GetObject ("select a line", 4)&lt;br /&gt;&lt;br /&gt;'orient lines&lt;br /&gt;strCurveS = Rhino.CurveStartPoint (strLine)&lt;br /&gt;strCurveE = Rhino.CurveEndPoint (strLine)&lt;br /&gt;&lt;br /&gt;arrReference = Array (strCurveS,strCurveE)&lt;br /&gt;strTarget1 = Array (0,-i, 0)&lt;br /&gt;strTarget2 = Array (99999,-i, 0)&lt;br /&gt;arrTarget = Array (strTarget1,strTarget2)&lt;br /&gt;&lt;br /&gt;i = i + 0.25&lt;br /&gt;Call Rhino.OrientObject (strLine, arrReference, arrTarget)&lt;br /&gt;&lt;br /&gt;Loop&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;orientCurve&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-6222010349206561886?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6222010349206561886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6222010349206561886'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/11/orientcurve.html' title='orientCurve'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_DACBIEbkSBY/SHqjUtvwJ7I/AAAAAAAAAIk/us_QBt5BXss/s72-c/_Lattice001.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-3283141581286160669</id><published>2007-10-15T19:34:00.000-07:00</published><updated>2008-04-22T11:55:44.955-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sky'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Population Script</title><content type='html'>&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_DACBIEbkSBY/RxQjsmHY6dI/AAAAAAAAAFM/t1oBsbNF1j8/s1600-h/poulate.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_DACBIEbkSBY/RxQjsmHY6dI/AAAAAAAAAFM/t1oBsbNF1j8/s320/poulate.jpg" alt="" id="BLOGGER_PHOTO_ID_5121757925279853010" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This Script takes a bunch of lines and populates another curve to them. Recommended for lasercut.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Option Explicit&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Call Populate()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Sub Populate()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;  Dim Object, ArrLines, i, Popstart, PopEnd, RefPoints, strScale, strOptions, RefObject&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;  strOptions = Array ("y", "n")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;  Object = Rhino.GetObject ("Select Populate Object", 4)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;  RefObject = Rhino.GetObject ("Select Reference line for Population", 4)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;  ArrLines = Rhino.GetObjects ("Select target Curves", 4)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;  strScale = Rhino.GetString ("Do you want to Scale", "y", strOptions)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;  Popstart = Rhino.CurveStartPoint(RefObject)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;  PopEnd = Rhino.CurveEndPoint(RefObject)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;  RefPoints = Array(Popstart, Popend)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;  For i = 0 To UBound(arrLines)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    Call Copypop(Object, arrlines(i), Refpoints, strScale)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    Call Rhino.DeleteObject(arrlines(i))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;  Next&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;End Sub   &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Function CopyPop(Object, Target, Refpoints, strScale)   &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    Dim startPoint, endPoint, TargetPoint, PopCurve, tempCrv, refDist&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    startPoint = Rhino.CurveStartPoint(target)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    endPoint = Rhino.CurveEndPoint(target)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    TargetPoint = Array(startPoint, endPoint)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    refDist = Rhino.Distance (Refpoints(0), RefPoints(1))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    If strScale = "n" Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;     Dim targetDist, scalefactor&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;      targetDist = Rhino.Distance(TargetPoint(0), TargetPoint(1))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    scalefactor = TargetDist/Refdist &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    tempCrv = Rhino.ScaleObject(Object, RefPoints(0),Array(scalefactor,1,1) ,vbTrue)   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    PopCurve =  Rhino.OrientObject(TempCrv,  RefPoints, TargetPoint)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    Else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    PopCurve =  Rhino.OrientObject(Object,  RefPoints, TargetPoint, 3)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    End If&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;End Function&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-3283141581286160669?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/3283141581286160669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/3283141581286160669'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/10/population-script.html' title='Population Script'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_DACBIEbkSBY/RxQjsmHY6dI/AAAAAAAAAFM/t1oBsbNF1j8/s72-c/poulate.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-4491128266825915130</id><published>2007-10-04T23:43:00.000-07:00</published><updated>2008-04-22T11:55:35.483-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Still having a bug</title><content type='html'>Ok Sky, I removed the bug, no more error message, but when I try hiding objects, command cannot grab anything. Array after sorting is name-string array, not object-string array.&lt;br /&gt;&lt;br /&gt;Another problem is that since SortStrings reads CurveLength number as string...&lt;br /&gt;Array (32, 9,12,11, 25)&lt;br /&gt;Sorted Array (11, 12, 25, 32, &lt;span style="color: rgb(255, 0, 0);"&gt;9&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;I guess I'll go back to my studio now...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;ShowCurve ()&lt;br /&gt;Sub ShowCurve ()&lt;br /&gt;&lt;br /&gt;Dim arrCurve, arrSorted, strTemp, i&lt;br /&gt;&lt;br /&gt;'Get The Curves&lt;br /&gt;arrCurve = Rhino.GetObjects ("select curves to rename", 4)&lt;br /&gt;&lt;br /&gt;'Assign Curves to new array and rename objects&lt;br /&gt;For i = 0 To UBound(arrCurve)&lt;br /&gt;If Rhino.IsCurve(arrCurve(i)) Then&lt;br /&gt;&lt;br /&gt;strTemp = Rhino.CurveLength(arrCurve(i))&lt;br /&gt;arrCurve(i) = Rhino.ObjectName (arrCurve(i), "Curve" &amp;amp; CStr(strTemp))&lt;br /&gt;Rhino.Print (arrCurve(i))&lt;br /&gt;Rhino.Sleep 300&lt;br /&gt;&lt;br /&gt;End If&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;'Sort lengths in ascending order&lt;br /&gt;arrSorted = Rhino.SortStrings(arrCurve, True)&lt;br /&gt;&lt;br /&gt;'Hide all Objects&lt;br /&gt;'Rhino.Command ("SelAll")&lt;br /&gt;'Rhino.Command ("Hide")&lt;br /&gt;Rhino.HideObjects (arrSorted)&lt;br /&gt;&lt;br /&gt;'Show the Objects in curve length order&lt;br /&gt;For i = 0 To UBound(arrSorted)&lt;br /&gt; &lt;br /&gt;strTemp = arrSorted(i)&lt;br /&gt;Rhino.ShowObject (strTemp)&lt;br /&gt;Rhino.Print "sorted:" &amp;amp; (arrSorted(i))&lt;br /&gt;Rhino.Sleep 300&lt;br /&gt;&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;End Sub&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-4491128266825915130?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/4491128266825915130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/4491128266825915130'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/10/still-having-bug.html' title='Still having a bug'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-4945127932965871056</id><published>2007-10-04T23:36:00.000-07:00</published><updated>2008-04-22T11:54:54.368-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>SineWave</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;Today's Script: Generate a sine wave, create spheres and scale them in order.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_DACBIEbkSBY/RwXcP2HY6cI/AAAAAAAAAE0/6KbAlBFe4Nk/s1600-h/ScreenShot002.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_DACBIEbkSBY/RwXcP2HY6cI/AAAAAAAAAE0/6KbAlBFe4Nk/s320/ScreenShot002.jpg" alt="" id="BLOGGER_PHOTO_ID_5117738716359092674" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;'draw a sine wave using points&lt;br /&gt;&lt;br /&gt;SineWave()&lt;br /&gt;Sub SineWave()&lt;br /&gt;&lt;br /&gt;Dim x, y, dblA, dblB, arr, dblStep, arrPoint(), arrSphere(), i, A, B, C&lt;br /&gt;dblA = 0&lt;br /&gt;dblB = 12&lt;br /&gt;dblStep = 0.25&lt;br /&gt;i = 0&lt;br /&gt;&lt;br /&gt;For x = dblA To dblB Step dblStep&lt;br /&gt;    y = 2*Sin(x)&lt;br /&gt; &lt;br /&gt;A = 0.02*i&lt;br /&gt;B = 0.02*i&lt;br /&gt;C = 0.03*i&lt;br /&gt;arr = Array(A, B, C)&lt;br /&gt;&lt;br /&gt;Call Rhino.AddPoint (Array (x,y,0))&lt;br /&gt;ReDim Preserve arrPoint(i)&lt;br /&gt;arrPoint(i) = Array (x,y,0)&lt;br /&gt;&lt;br /&gt;ReDim Preserve arrSphere(i)&lt;br /&gt;arrSphere(i) = Rhino.AddSphere (Array (x,y,0), 0.25)&lt;br /&gt;   &lt;br /&gt;Call Rhino.ScaleObject (arrSphere(i), arrPoint(i), arr)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Call Rhino.Sleep(30)&lt;br /&gt;i = i+1&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;End Sub&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-4945127932965871056?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/4945127932965871056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/4945127932965871056'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/10/sinewave.html' title='SineWave'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_DACBIEbkSBY/RwXcP2HY6cI/AAAAAAAAAE0/6KbAlBFe4Nk/s72-c/ScreenShot002.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-6102692727403853743</id><published>2007-10-02T17:45:00.000-07:00</published><updated>2008-04-22T11:54:41.616-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sky'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Show Curves in Order of Length</title><content type='html'>For some reason I can't debug this code. Has problems with sortnumber variable type. Can anyone figure this out?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;ShowCurve ()&lt;br /&gt;&lt;br /&gt;Sub ShowCurve ()&lt;br /&gt;&lt;br /&gt;Dim arrCurve, i, arr(), temp, arr2()&lt;br /&gt;&lt;br /&gt;'Get The Curves&lt;br /&gt;arrCurve = Rhino.GetObjects ("select a curves to evaluate", 4)&lt;br /&gt;&lt;br /&gt;'Assign Curves to new array and rename objects&lt;br /&gt;For i = 0 To UBound(arrCurve)&lt;br /&gt;If Rhino.IsCurve(arrCurve(i)) Then&lt;br /&gt;temp = Rhino.CurveLength(arrCurve(i))&lt;br /&gt;Rhino.Print (temp)&lt;br /&gt;ReDim Preserve arr(i)&lt;br /&gt;arr(i) = temp&lt;br /&gt;Rhino.ObjectName arrCurve(i), "Curve" &amp;amp; CStr(temp)&lt;br /&gt;End If&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;'Sort lengths in ascending order&lt;br /&gt;arr2 = Rhino.SortNumbers(arr, vbTrue)&lt;br /&gt;&lt;br /&gt;'Hide all Objects&lt;br /&gt;Rhino.Command ("SelAll")&lt;br /&gt;Rhino.Command ("Hide")&lt;br /&gt;&lt;br /&gt;'Show the Objects in curve length order&lt;br /&gt;For i = 0 To UBound(arr2)&lt;br /&gt;Temp = CStr(arr2(i))&lt;br /&gt;Rhino.ShowObject "Curve" &amp;amp; Temp&lt;br /&gt;Rhino.Sleep 1000&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;End Sub&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-6102692727403853743?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6102692727403853743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6102692727403853743'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/10/show-curves-in-order-of-length.html' title='Show Curves in Order of Length'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-8682107977154204702</id><published>2007-10-01T21:41:00.000-07:00</published><updated>2008-04-22T11:54:15.832-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>CurveToFitArea</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_DACBIEbkSBY/RwHS5mHY6bI/AAAAAAAAAEs/1TRCNH7Gqmk/s1600-h/script.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_DACBIEbkSBY/RwHS5mHY6bI/AAAAAAAAAEs/1TRCNH7Gqmk/s320/script.jpg" alt="" id="BLOGGER_PHOTO_ID_5116602538595510706" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;On the right is a script I wrote to scale down a curve to fit in certain area. The original is &lt;a href="http://ssssociety.blogspot.com/2007/01/fitcurvetolength-yuki.html"&gt;CurveToFitLength&lt;/a&gt; in Rhino scripting tutorial. Knowing both INPUTs&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;!--kadov_tag{{&lt;/ignored&gt;}}--&gt;&lt;!--kadov_tag{{&lt;ignored&gt;}}--&gt;&lt;!--kadov_tag{{&lt;/ignored&gt;}}--&gt;&lt;span style="font-family:courier new;"&gt;Rhino.CurveLength  (strObject)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Rhino.CurveArea (strObject)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;were available in Scripting Method, I thought it would be easy to write the same script but Area-based scaling instead of Length-based scaling. But I just realized Scripting Method also requires me to refer the OUTPUT. Unfortunately,  CurveLength has dbl OUTPUT while &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;CurveArea has arr OUTPUT.&lt;br /&gt;&lt;br /&gt;Checkout the difference in above jpg.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-8682107977154204702?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/8682107977154204702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/8682107977154204702'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/10/curvetofitarea.html' title='CurveToFitArea'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_DACBIEbkSBY/RwHS5mHY6bI/AAAAAAAAAEs/1TRCNH7Gqmk/s72-c/script.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-3346219128550315748</id><published>2007-09-30T18:08:00.000-07:00</published><updated>2008-04-22T11:53:57.656-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sky'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Array To Select Multiple Curves</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style=";font-family:courier new;font-size:130%;"  &gt;Selecting multiple objects is easy, just use the Rhino.GetObjects method which returns an array, then cycle through the array to check each curve&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dim &lt;span style="color: rgb(255, 0, 0);"&gt;arrCurve,&lt;/span&gt; intShort&lt;br /&gt;&lt;br /&gt;intShort = Rhino.GetReal ("min. length to keep?", 0.1)&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;arrCurve&lt;/span&gt; = &lt;span style="color: rgb(255, 0, 0);"&gt;Rhino.GetObjects&lt;/span&gt; ("select a curves to evaluate", 4)&lt;br /&gt;&lt;br /&gt;  Dim i&lt;br /&gt;&lt;br /&gt;For i = 0 to Ubound(arrCurve)&lt;br /&gt; If Rhino.CurveLength (&lt;span style="color: rgb(255, 0, 0);"&gt;arrCurve(i)&lt;/span&gt;) &gt; intShort Then&lt;br /&gt;          Call Rhino.ObjectLayer (&lt;span style="color: rgb(255, 0, 0);"&gt;arrCurve(i)&lt;/span&gt;, "Curve")&lt;br /&gt;     Else&lt;br /&gt;          Call Rhino.DeleteObject (&lt;span style="color: rgb(255, 0, 0);"&gt;arrCurve(i)&lt;/span&gt;)&lt;br /&gt;End If&lt;br /&gt;Next&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-3346219128550315748?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/3346219128550315748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/3346219128550315748'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/09/array-to-select-multiple-curves.html' title='Array To Select Multiple Curves'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-6051775374591619210</id><published>2007-09-30T13:44:00.000-07:00</published><updated>2008-04-22T11:53:44.451-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Newbie's struggle</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;Inspired from the script Sky wrote last night, I would like to write a script that lets user select many curves and decides the min. length to keep, and deletes shorter-than-the-min. curves. My struggle is that CurveLength (script method) seems to evaluate only ONE curve at a time. If someone know how to do it better, please let me know. array still confuses me.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;EvaluateCurve ()&lt;br /&gt;Sub EvaluateCurve ()&lt;br /&gt;&lt;br /&gt;Call Rhino.AddLayer ("Curve")&lt;br /&gt;&lt;br /&gt;Dim strCurve, intShort&lt;br /&gt;intShort = Rhino.GetReal ("min. length to keep?", 0.1)&lt;br /&gt;strCurve = Rhino.GetObject ("select a curve to evaluate", 4)&lt;br /&gt;&lt;br /&gt;    If Rhino.CurveLength (strCurve) &gt; intShort Then&lt;br /&gt;      Call Rhino.ObjectLayer (strCurve, "Curve")&lt;br /&gt;    Else&lt;br /&gt;      Call Rhino.DeleteObject (strCurve)&lt;br /&gt;    End If&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-6051775374591619210?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6051775374591619210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6051775374591619210'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/09/newbies-struggle.html' title='Newbie&apos;s struggle'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-6072932201202626470</id><published>2007-09-30T02:17:00.000-07:00</published><updated>2008-04-22T11:53:34.784-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sky'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Pattern Generation</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_DACBIEbkSBY/Rv9qaGHY6XI/AAAAAAAAAEI/81w9-0Ag3Eg/s1600-h/ScreenShot333.jpg"&gt;&lt;br /&gt;What was seemingly a simple script took me all night to figure out. It takes any curve and divides it up into alternating sets of cut lines to be pulled out into perforated structures.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_DACBIEbkSBY/Rv9qaGHY6XI/AAAAAAAAAEI/81w9-0Ag3Eg/s1600-h/ScreenShot333.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_DACBIEbkSBY/Rv9qaGHY6XI/AAAAAAAAAEI/81w9-0Ag3Eg/s320/ScreenShot333.jpg" alt="" id="BLOGGER_PHOTO_ID_5115924698266921330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_DACBIEbkSBY/Rv9qamHY6YI/AAAAAAAAAEQ/0fFgUC4VfJ4/s1600-h/IMG_5240.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_DACBIEbkSBY/Rv9qamHY6YI/AAAAAAAAAEQ/0fFgUC4VfJ4/s320/IMG_5240.jpg" alt="" id="BLOGGER_PHOTO_ID_5115924706856855938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;Call CutPattern ()&lt;br /&gt;&lt;br /&gt;Sub CutPattern ()&lt;br /&gt;&lt;br /&gt;Dim blspace, varcut, arrOddCrv, arrEvenCrv, offset, temp&lt;br /&gt;&lt;br /&gt;'get User Input&lt;br /&gt;&lt;br /&gt;blspace = Rhino.GetReal ("size of space",.1, 0, .5)&lt;br /&gt;varCut = Rhino.GetInteger ("Number of cuts",20)&lt;br /&gt;offset = Rhino.GetReal ("Offset Amount", 1, 0, 1)&lt;br /&gt;arrOddCrv = Rhino.GetObjects ("Pick Odd Curves", 4)&lt;br /&gt;arrEvenCrv = Rhino.GetObjects ("Pick Even Curves", 4)&lt;br /&gt;temp = 0&lt;br /&gt;&lt;br /&gt;Dim k&lt;br /&gt;&lt;br /&gt;For k = 0 To UBound(arrOddCrv)&lt;br /&gt;Call Generate(arrOddCrv(k), blspace, varcut, temp)&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;For k = 0 To UBound(arrEvenCrv)&lt;br /&gt;Call Generate(arrEvenCrv(k), blspace, varcut, offset)&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Function Generate(strCrv, BetweenCuts, CutNum, offset)&lt;br /&gt; &lt;br /&gt; Dim Counter : Counter = 0&lt;br /&gt; Dim Dist : Dist = 0&lt;br /&gt; Dim ArrPoints(), ArrDomain, currentDist, adjSpace, adjCut&lt;br /&gt; arrDomain = Rhino.CurveDomain(strCrv)&lt;br /&gt; adjSpace = 1/CutNum*BetweenCuts&lt;br /&gt; adjCut = ((1/CutNum)-adjSpace)*.5&lt;br /&gt; dist = dist + (adjcut*offset)&lt;br /&gt; 'Rhino.Print "Curve domain: " &amp;amp; CStr(arrDomain(0)) &amp;amp; " to " &amp;amp; CStr(arrDomain(1))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; Do While Dist &lt; 1&lt;br /&gt;   ReDim Preserve arrPoint(counter)&lt;br /&gt;   currentDist = adjPar(arrDomain, dist)&lt;br /&gt;   arrPoint(counter) = Rhino.EvaluateCurve(strCrv, currentDist)&lt;br /&gt;   dist = dist + adjCut&lt;br /&gt;   Counter = counter + 1  &lt;br /&gt;&lt;br /&gt;   ReDim Preserve arrPoint(counter)&lt;br /&gt;   currentDist = adjPar(arrDomain, dist)&lt;br /&gt;   arrPoint(counter) = Rhino.EvaluateCurve(strCrv, currentDist)&lt;br /&gt;   dist = dist + adjCut&lt;br /&gt;   Counter = counter +1&lt;br /&gt;&lt;br /&gt;   ReDim Preserve arrPoint(counter)&lt;br /&gt;   currentDist = adjPar(arrDomain, dist)&lt;br /&gt;   arrPoint(counter) = Rhino.EvaluateCurve(strCrv, currentDist)&lt;br /&gt;   dist = dist + adjSpace&lt;br /&gt;   Counter = counter +1&lt;br /&gt; Loop&lt;br /&gt;&lt;br /&gt; Dim i : i = 0&lt;br /&gt; Dim LineArray(2)&lt;br /&gt;&lt;br /&gt; 'Add Lines&lt;br /&gt; Do While i &lt; UBound(arrPoint)&lt;br /&gt;    LineArray(0) = arrPoint(i)&lt;br /&gt;    i=i+1&lt;br /&gt;    LineArray(1) = arrPoint(i)&lt;br /&gt;    i=i+1&lt;br /&gt;    LineArray(2) = arrPoint(i)&lt;br /&gt;    i=i+1&lt;br /&gt;    Rhino.AddCurve LineArray&lt;br /&gt; Loop&lt;br /&gt;&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Function adjPar(crvDomain, dist)&lt;br /&gt;adjPar = crvDomain(0) + dist * (crvDomain(1) -crvDomain(0))&lt;br /&gt;End Function&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-6072932201202626470?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6072932201202626470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6072932201202626470'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/09/pattern-generation.html' title='Pattern Generation'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_DACBIEbkSBY/Rv9qaGHY6XI/AAAAAAAAAEI/81w9-0Ag3Eg/s72-c/ScreenShot333.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-1643950320285632419</id><published>2007-09-15T09:29:00.001-07:00</published><updated>2008-04-22T11:53:18.916-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Harold'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>pariSSSS, france</title><content type='html'>Last spring, while attending a semester at the &lt;a href="http://http//www.esa-paris.fr"&gt;Ecole Speciale D'Architecture&lt;/a&gt; the studio was introduced to rhino scripting techniques at a workshop conducted by &lt;a href="http://edmondocchipinti.blogspot.com/"&gt;Edmondo Occhipinti&lt;/a&gt;.  The studio ; Eco-Logical High-rise, focused around the idea of utilizing various computational methods and software for design performance, evaluation, and optimization.&lt;br /&gt;&lt;br /&gt;This script was developed in collaboration with Martin. It creates a series of 12 points from equations derived for the construction of a unit circle, implements a directional deviation of either a single or double point, and draws a closed curve through the set of points. The script was used to generate floor plates that respond to prevalent wind direction, either by developing a 'bulge factor' in the direction of the wind or against it. It was imagined that the implementation of this method in the design could be used to have parts of the building that were capturing the wind for energy-generation purposes and others that were repelling the wind for structural reasons.&lt;br /&gt;&lt;br /&gt;Voici le script et quelques images:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_DACBIEbkSBY/RuwlmtQRa2I/AAAAAAAAAEA/qRQDMxmaocA/s1600-h/h1_alt.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_DACBIEbkSBY/RuwlmtQRa2I/AAAAAAAAAEA/qRQDMxmaocA/s200/h1_alt.jpg" alt="" id="BLOGGER_PHOTO_ID_5110501024071773026" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_DACBIEbkSBY/Ruwjh9QRa1I/AAAAAAAAAD4/LYIyJKvrpY8/s1600-h/h4_alt.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_DACBIEbkSBY/Ruwjh9QRa1I/AAAAAAAAAD4/LYIyJKvrpY8/s200/h4_alt.jpg" alt="" id="BLOGGER_PHOTO_ID_5110498743444138834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;'base floor curve from points'&lt;br /&gt;&lt;br /&gt;Call DrawCurve&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sub DrawCurve&lt;br /&gt;&lt;br /&gt;Dim r&lt;br /&gt;Dim bulgefactor&lt;br /&gt;Dim i&lt;br /&gt;Dim j&lt;br /&gt;Dim arrpt1, arrpt2, arrpt3, arrpt4, arrpt5, arrpt6, arrpt7, arrpt8, arrpt9, arrpt10, arrpt11, arrpt12&lt;br /&gt;Dim arrpts&lt;br /&gt;Dim arrcrvpts&lt;br /&gt;Dim crv1&lt;br /&gt;&lt;br /&gt;bulgefactor= Rhino.getreal ("choose bulge ratio")&lt;br /&gt;r= 1.0477787091366303436714165968148*Rhino.getreal ("identify RADIUS", 1,0)&lt;br /&gt;i= ((3/2)*Rhino.getreal ("choose the inflatement ratio for ETE", bulgefactor,-2))/1.0477787091366303436714165968148&lt;br /&gt;j= ((3/2)*Rhino.getreal ("choose the inflatement ratio for HIVER", -bulgefactor,-2))/1.0477787091366303436714165968148&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;arrpt1= array (0,r)&lt;br /&gt;arrpt2= array ((r+i*r)/2,(r+i*r)*Sqr(3)/2)&lt;br /&gt;arrpt3= array (r*Sqr(3)/2, r/2)&lt;br /&gt;arrpt4= array (r,0)&lt;br /&gt;arrpt5= array (r*Sqr(3)/2, -r/2)&lt;br /&gt;arrpt6= array (r/2, -r*Sqr(3)/2)&lt;br /&gt;arrpt7= array (0,-(r+j*r))&lt;br /&gt;arrpt8= array (-r/2, -r*Sqr(3)/2)&lt;br /&gt;arrpt9= array (-r*Sqr(3)/2, -r/2)&lt;br /&gt;arrpt10= array (-r,0)&lt;br /&gt;arrpt11= array (-r*Sqr(3)/2, r/2)&lt;br /&gt;arrpt12= array (-r/2, r*Sqr(3)/2)&lt;br /&gt;&lt;br /&gt;arrpts= array (arrpt11, arrpt12, arrpt1, arrpt2, arrpt3, arrpt4, arrpt5, arrpt6, arrpt7, arrpt8, arrpt9, arrpt10, arrpt11)&lt;br /&gt;&lt;br /&gt;'arrcrvpts= Rhino.addpoints (arrpts)&lt;br /&gt;&lt;br /&gt;crv1= Rhino.AddCurve (arrpts,3)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;End Sub&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-1643950320285632419?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/1643950320285632419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/1643950320285632419'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/09/parissss-france.html' title='pariSSSS, france'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_DACBIEbkSBY/RuwlmtQRa2I/AAAAAAAAAEA/qRQDMxmaocA/s72-c/h1_alt.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-5351745858890360163</id><published>2007-02-28T05:42:00.000-08:00</published><updated>2008-04-22T11:52:35.693-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DP/CATIA'/><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><title type='text'>Advanve Structure</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_DACBIEbkSBY/ReWHjv109yI/AAAAAAAAACk/PruuyPFVFK0/s1600-h/Untitled-1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 221px; height: 177px;" src="http://bp1.blogger.com/_DACBIEbkSBY/ReWHjv109yI/AAAAAAAAACk/PruuyPFVFK0/s200/Untitled-1.jpg" alt="" id="BLOGGER_PHOTO_ID_5036580806491174690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Power Copying...&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_DACBIEbkSBY/ReWG-P109xI/AAAAAAAAACc/o_HmMtRPWGI/s1600-h/field01.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_DACBIEbkSBY/ReWG-P109xI/AAAAAAAAACc/o_HmMtRPWGI/s320/field01.jpg" alt="" id="BLOGGER_PHOTO_ID_5036580162246080274" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here are some iterations of origami surfaces. The challenge was (except the manual powerCopying...) how to set up spikes NORMAL to the surface. Basically, those are done by manipulating sin curve functions (to control the curvature of surfaces). Deformation nodes are the followings.&lt;br /&gt;&lt;br /&gt;-the span of sin curve&lt;br /&gt;-number of waves&lt;br /&gt;-repetition of waves&lt;br /&gt;-height of the creases&lt;br /&gt;-acceleration of curvature angle (by law)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The next step is to apply scaling to those creases. Well, actually those steps are similar to the physical origami studies from my 3A studio.&lt;br /&gt;&lt;br /&gt;By the way, I think &lt;span style="font-weight: bold; color: rgb(255, 102, 0);"&gt;FoG&lt;/span&gt; stands for &lt;span style="font-weight: bold; color: rgb(255, 102, 0);"&gt;F&lt;/span&gt;unction &lt;span style="color: rgb(255, 102, 0); font-weight: bold;"&gt;o&lt;/span&gt;f &lt;span style="font-weight: bold; color: rgb(255, 102, 0);"&gt;G&lt;/span&gt;raph. Better guess than &lt;span style="color: rgb(255, 102, 0); font-weight: bold;"&gt;F&lt;/span&gt;rank &lt;span style="color: rgb(255, 102, 0); font-weight: bold;"&gt;O&lt;/span&gt; &lt;span style="color: rgb(255, 102, 0); font-weight: bold;"&gt;G&lt;/span&gt;ehry...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-5351745858890360163?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/5351745858890360163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/5351745858890360163'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/02/advanve-structure.html' title='Advanve Structure'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_DACBIEbkSBY/ReWHjv109yI/AAAAAAAAACk/PruuyPFVFK0/s72-c/Untitled-1.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-3799622869647366281</id><published>2007-02-13T21:28:00.000-08:00</published><updated>2008-04-22T11:52:16.906-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SpredSheet'/><category scheme='http://www.blogger.com/atom/ns#' term='Sky'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Exporting Points</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_DACBIEbkSBY/RdKf64NNMiI/AAAAAAAAACQ/29HmZ3_S5uo/s1600-h/ScreenShot003.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_DACBIEbkSBY/RdKf64NNMiI/AAAAAAAAACQ/29HmZ3_S5uo/s200/ScreenShot003.jpg" alt="" id="BLOGGER_PHOTO_ID_5031259567595270690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Right now my job at Arup is to do solar gain calculations on a house. In order to do this I have to model the window and the shading devices in the Arup engineering software. Unfortunately engineering software is not very visual, meaning that all the shading planes have to be entered via coordinates like x, y, z. The project I'm working on has hundreds of these shading planes, to do the job manually would take several days of tedious calculations and data entry. So I wrote a little script to export all the points from a 3d rhino model to a spreadsheet in which the whole thing can be pasted into the program with one button. This saves hours of tedious time and gives me the benefit of using Rhino to make the 3d model which is extremely fast.&lt;br /&gt;&lt;br /&gt;Here's the script:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;Option Explicit&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;PrintSurfacePoints&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;     Sub PrintSurfacePoints&lt;/span&gt; &lt;/p&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;p&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;     Dim strSurface, arrObjects&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;     arrObjects = Rhino.GetObjects("Select surfaces", 8)&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;     If IsNull(arrObjects) Then Exit Sub&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;          &lt;/span&gt;  &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;      Dim i : i = 0&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;      Dim surfaceArray()     &lt;/span&gt;  &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;     &lt;/span&gt;  &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;     If IsArray(arrObjects) Then&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;            &lt;/span&gt;  &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;        For Each strSurface In arrObjects  &lt;/span&gt; &lt;/p&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;p&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;            Dim arrPoints&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;            arrPoints = Rhino.SurfacePoints(strSurface)&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;            If Not IsArray(arrPoints) Then Exit Sub&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;              &lt;/span&gt;  &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;            ReDim Preserve surfaceArray(i) &lt;/span&gt;  &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;            surfaceArray(i) = arrPoints&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;            i = i+1&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;        Next&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt; &lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    End If     &lt;/span&gt;  &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;      &lt;/span&gt;  &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    Dim objXL&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    Set objXL = CreateObject("Excel.Application")&lt;/span&gt; &lt;/p&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;p&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Visible = True&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.WorkBooks.Add&lt;/span&gt; &lt;/p&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;p&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Columns(1).ColumnWidth = 10&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Columns(2).ColumnWidth = 10&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Columns(3).ColumnWidth = 10&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Columns(4).ColumnWidth = 10&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Columns(5).ColumnWidth = 10&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Columns(6).ColumnWidth = 10&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Columns(7).ColumnWidth = 10&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Cells(1, 2).Value = "Base X"&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Cells(1, 3).Value = "Base Y"&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Cells(1, 4).Value = "Base Z"&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Cells(1, 5).Value = "Top X"&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Cells(1, 6).Value = "Top Y"&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Cells(1, 7).Value = "Top Z"&lt;/span&gt; &lt;/p&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;p&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Range("A1:G1").Select&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Selection.Font.Bold = True&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Selection.Interior.ColorIndex = 1&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;   objXL.Selection.Interior.Pattern = 1 'xlSolid&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Selection.Font.ColorIndex = 2&lt;/span&gt; &lt;/p&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;p&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Columns("B:B").Select&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.Selection.HorizontalAlignment = &amp;amp;hFFFFEFDD ' xlLeft&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    Dim intIndex&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    intIndex = 2&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    Dim d&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    For d = 0 To i-1 Step 1&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;     &lt;/span&gt;  &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    Dim strPoint, arrPt&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    Dim counter: counter = 0&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    &lt;/span&gt;  &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    For counter = 0 To 2 Step 2&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;      arrPt = surfaceArray(d)(counter)&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;      objXL.Cells(intIndex, 2).Value = Round(arrPt(0),4)&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;      objXL.Cells(intIndex, 3).Value = Round(arrPt(1),4)&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;      objXL.Cells(intIndex, 4).Value = Round(arrPt(2),4)&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;     arrPt = surfaceArray(d)(counter+1)&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;       objXL.Cells(intIndex, 5).Value = Round(arrPt(0),4)&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;      objXL.Cells(intIndex, 6).Value = Round(arrPt(1),4)&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;      objXL.Cells(intIndex, 7).Value = Round(arrPt(2),4)&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;      objXL.Cells(intIndex, 8).Value = 100&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;      objXL.Cells(intIndex, 9).Value = 0&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;     &lt;/span&gt;  &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;     objXL.Cells(intIndex, 1).Value = "surface " &amp;amp; d+1&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;      intIndex = intIndex + 1 &lt;/span&gt;  &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    Next&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    Next&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;    objXL.UserControl = True&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;      &lt;/span&gt;  &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:78%;"  &gt;End Sub&lt;/span&gt; &lt;/p&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-3799622869647366281?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/3799622869647366281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/3799622869647366281'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/02/exporting-points.html' title='Exporting Points'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_DACBIEbkSBY/RdKf64NNMiI/AAAAAAAAACQ/29HmZ3_S5uo/s72-c/ScreenShot003.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-2100895301959891818</id><published>2007-01-27T23:30:00.000-08:00</published><updated>2008-04-22T11:51:16.858-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>DrawLineFromCurve</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_DACBIEbkSBY/RbxSNxRALxI/AAAAAAAAACE/lSY1DiSP8DI/s1600-h/ScreenShot011.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_DACBIEbkSBY/RbxSNxRALxI/AAAAAAAAACE/lSY1DiSP8DI/s200/ScreenShot011.jpg" alt="" id="BLOGGER_PHOTO_ID_5024981680755060498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The following is pretty basic script to take a curve to generate a straight line that has the same length with the original curve.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;'this script is created to unroll sphere&lt;br /&gt;'so that hopefully I chould unroll little bit advanced shape.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;UnrollSphere()&lt;br /&gt;Sub UnrollSphere()&lt;br /&gt;&lt;br /&gt;'Shpere should be ready&lt;br /&gt;'   -Circumference Max is 8'&lt;br /&gt;'   -Trimmed with 0 and 45 degree lines&lt;br /&gt;'   -Rebuilt Vertical Surf to U2, Vt&lt;br /&gt;'   -Extract wireframe&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Number of Division&lt;br /&gt;Dim t&lt;br /&gt;t = 8&lt;br /&gt;&lt;br /&gt;Dim arrOrigin&lt;br /&gt;arrOrigin = array(0,0,0)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Get Length&lt;br /&gt;Dim halfSphereCircumference1, dblLength&lt;br /&gt;&lt;br /&gt;halfSphereCircumference1 = Rhino.GetObject("Select a circumference curve", 4)&lt;br /&gt;If IsNull(halfSphereCircumference1) Then Exit Sub&lt;br /&gt;&lt;br /&gt;dblLength = Rhino.CurveLength(halfSphereCircumference1)&lt;br /&gt;Rhino.Print "Curve length: " &amp;amp; CStr(dblLength)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Draw Line and Divide&lt;br /&gt;Dim strStraight, arrCircumferenceCurvePoints&lt;br /&gt;&lt;br /&gt;strStraight = Rhino.AddLine (arrOrigin, array(0,dblLength,0))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-2100895301959891818?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/2100895301959891818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/2100895301959891818'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/01/drawlinefromcurve.html' title='DrawLineFromCurve'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_DACBIEbkSBY/RbxSNxRALxI/AAAAAAAAACE/lSY1DiSP8DI/s72-c/ScreenShot011.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-2351403451911405888</id><published>2007-01-26T20:59:00.001-08:00</published><updated>2008-04-22T11:50:45.758-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Script Samples</title><content type='html'>&lt;p class="Code"&gt;If you are trying to veryfy whether or not the selected object is curve, don't use IsCurve.&lt;br /&gt;&lt;/p&gt;&lt;p style="color: rgb(255, 255, 204);" class="Code"&gt;Rhino.IsCurve (strObject [, intIndex])&lt;/p&gt;&lt;p class="Code"&gt;It would be much faster if you use GetObject instead. &lt;/p&gt;&lt;p style="color: rgb(255, 255, 204);" class="Code"&gt;Rhino.GetObject ([strMessage [, intType [, blnPreSelect [,  blnSelect [, arrObjects ]]]]])&lt;/p&gt;The Second option &lt;span style="color: rgb(255, 255, 204);"&gt;[, intType&lt;/span&gt; lets you limit the type of object you can select.&lt;br /&gt;The object types are the following&lt;br /&gt;&lt;br /&gt;0&lt;br /&gt;1&lt;br /&gt;2&lt;br /&gt;4&lt;br /&gt;8&lt;br /&gt;16&lt;br /&gt;32&lt;br /&gt;256&lt;br /&gt;512&lt;br /&gt;4096&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-2351403451911405888?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/2351403451911405888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/2351403451911405888'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/01/script-samples.html' title='Script Samples'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-657509308004071535</id><published>2007-01-15T22:49:00.000-08:00</published><updated>2008-04-22T11:47:19.784-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DP/CATIA'/><category scheme='http://www.blogger.com/atom/ns#' term='Sky'/><title type='text'>Digital Project</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_DACBIEbkSBY/Rax46xRALwI/AAAAAAAAAB4/2OxVpzGRrNE/s1600-h/logo.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_DACBIEbkSBY/Rax46xRALwI/AAAAAAAAAB4/2OxVpzGRrNE/s320/logo.gif" alt="" id="BLOGGER_PHOTO_ID_5020520635663658754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hope the Rhinoscripting is going good. I just sat through a presentation of Digital project. The program seems amazing and is totally compatible with visual basic, which is good for all of us that started learning. From what Nick Pisca said the plus of Digital Project is its stability, and of course real time parametric updating that rhino doesn't have. Also turns out a lot of other programs can be accessed through windows platform. I don't know the specifics of it but really its this real-time, network, cross-program workflow that is fascinating.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://allthingsbim.blogspot.com/2006/12/digital-project-fuss.html"&gt;All Things BIM has a post about Digital Project. &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-657509308004071535?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/657509308004071535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/657509308004071535'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/01/digital-project.html' title='Digital Project'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_DACBIEbkSBY/Rax46xRALwI/AAAAAAAAAB4/2OxVpzGRrNE/s72-c/logo.gif' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-6834011155122761230</id><published>2007-01-12T18:29:00.000-08:00</published><updated>2008-04-22T11:46:31.731-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MEL'/><category scheme='http://www.blogger.com/atom/ns#' term='Sky'/><title type='text'>minimal surface script</title><content type='html'>&lt;span style="font-size:85%;"&gt;// minimum surface creator.&lt;br /&gt;// copyright 2005  Theo Calvin&lt;br /&gt;// free to use for educational purposes.&lt;br /&gt;// for any other use please contact theo@mediumlite.com&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;minSurfUI;&lt;br /&gt;&lt;br /&gt;/////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;&lt;br /&gt;proc string[] parseName (string $input) {&lt;br /&gt;  string $return[];&lt;br /&gt;  string $next;&lt;br /&gt;  string $currentString = "";&lt;br /&gt;  int $strCount = 0;&lt;br /&gt;  for ($i=2; $i&lt;=`size($input)`; $i++) {         $next = `substring ($input) $i $i `;         if ($next == "|") {             $return[$strCount] = $currentString;             $currentString = "";             $strCount++;         } else {             $currentString = $currentString + $next;         }         if ($i == `size($input)`) {             $return[`size($return)`] = $currentString;         }     }     return $return; }  /////////////////////////////////////////////////////////////////////////////////////  proc vector getLocV(string $one){     float $currentpos[] = `xform -ws -q -t ($one)`;     return &lt;&lt;$currentpos[0],$currentpos[1],$currentpos[2]&gt;&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// ================================================================================&lt;br /&gt;//&lt;br /&gt;//  minSurf&lt;br /&gt;//      &lt;br /&gt;// ================================================================================&lt;br /&gt;&lt;br /&gt;global proc minSurf() {&lt;br /&gt;  waitCursor -state on;&lt;br /&gt;  float $curveMin;&lt;br /&gt;  float $curveMax;&lt;br /&gt;  float $curveSpan;&lt;br /&gt;  int $updatePercentage ;&lt;br /&gt;  float $smoothLoops;&lt;br /&gt;  float $updateAmmount;&lt;br /&gt;&lt;br /&gt;  progressWindow&lt;br /&gt;         -title "Creating Surface"&lt;br /&gt;         -status ("Complete: "+$updatePercentage+"%")&lt;br /&gt;         -isInterruptable true;&lt;br /&gt;         ;&lt;br /&gt;&lt;br /&gt;  //........................&lt;br /&gt;  // get selection&lt;br /&gt;  //........................&lt;br /&gt;  string $curves[] = `ls -sl -l`;&lt;br /&gt;  string $path[] = parseName ($curves[0]);&lt;br /&gt;&lt;br /&gt;  //........................&lt;br /&gt;  // create polySurface&lt;br /&gt;  //........................&lt;br /&gt;  int $minSXarray[] = `intFieldGrp -q -v polySubX_field`;&lt;br /&gt;  int $minSYarray[] = `intFieldGrp -q -v polySubY_field`;&lt;br /&gt;  int $minSX = $minSXarray[0];&lt;br /&gt;  int $minSY = $minSYarray[0];&lt;br /&gt;  string $minSholder[] = `polyPlane -w 1 -h 1 -sx $minSX -sy $minSY -ax 0 1 0 -tx 1 -ch 0 -n "minSurface"`;&lt;br /&gt;  string $minS = $minSholder[0];&lt;br /&gt;&lt;br /&gt;  //...............................&lt;br /&gt;  // place edges on borders (x1)&lt;br /&gt;  //...............................&lt;br /&gt;  $curveMin = `getAttr ($curves[0]+".min")`;&lt;br /&gt;  $curveMax = `getAttr ($curves[0]+".max")`;&lt;br /&gt;  $curveSpan =  `abs $curveMax`-`abs $curveMin`;&lt;br /&gt;  float $subSpan = $curveSpan/$minSX;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  float $currentU;&lt;br /&gt;  float $pointLoc[];&lt;br /&gt;  for ($i=0; $i&lt;=$minSX; $i++) {         $currentU = $curveMin + ( $subSpan*$i);         $pointLoc = `pointOnCurve -pr $currentU $curves[0]`;         select -r ($minS+ ".vtx["+$i+"]") ;         move  $pointLoc[0] $pointLoc[1] $pointLoc[2] ;         //currentTime 0;     }          //...............................     // place edges on borders (y1)     //...............................     $curveMin = `getAttr ($curves[1]+".min")`;     $curveMax = `getAttr ($curves[1]+".max")`;     $curveSpan =  `abs $curveMax`-`abs $curveMin`;     float $subSpan = $curveSpan/$minSY;             int $vtx;     for ($i=1; $i&lt;$minSY; $i++) {         $vtx = $minSX +($i*($minSX+1));         //print ("vtx: " + $vtx + "\n");         $currentU = $curveMin + ( $subSpan*$i);         $pointLoc = `pointOnCurve -pr $currentU $curves[1]`;         select -r ($minS+ ".vtx["+$vtx+"]") ;         move  $pointLoc[0] $pointLoc[1] $pointLoc[2] ;         //currentTime 0;     }       //...............................     // place edges on borders (x2)     //...............................     $curveMin = `getAttr ($curves[2]+".min")`;     $curveMax = `getAttr ($curves[2]+".max")`;     $curveSpan =  `abs $curveMax`-`abs $curveMin`;     float $subSpan = $curveSpan/$minSX;         for ($i=0; $i&lt;=$minSX; $i++) {         $vtx = ((($minSX+1)*($minSY+1))-1)-$i;         $currentU = $curveMin + ( $subSpan*$i);         $pointLoc = `pointOnCurve -pr $currentU $curves[2]`;         select -r ($minS+ ".vtx["+$vtx+"]") ;         move  $pointLoc[0] $pointLoc[1] $pointLoc[2] ;         //currentTime 0;     }             //...............................     // place edges on borders (y2)     //...............................     $curveMin = `getAttr ($curves[3]+".min")`;     $curveMax = `getAttr ($curves[3]+".max")`;     $curveSpan =  `abs $curveMax`-`abs $curveMin`;     float $subSpan = $curveSpan/$minSY;         for ($i=1; $i&lt;$minSY; $i++) {         $vtx = ((($minSX+1)*($minSY)))-($i*($minSX+1));         $currentU = $curveMin + ( $subSpan*$i);         $pointLoc = `pointOnCurve -pr $currentU $curves[3]`;         select -r ($minS+ ".vtx["+$vtx+"]") ;         move  $pointLoc[0] $pointLoc[1] $pointLoc[2] ;         //currentTime 0;     }             //......................................     // place vertices into initial position     //......................................     vector $v1;     vector $v2;     vector $v3;     vector $v4;     vector $new1;     vector $new2;     vector $pos;     int $row;     for ($i=($minSX+2); $i&lt; ((($minSX+1)*$minSY)-1); $i++) {         int $vMod = $i%($minSX+1);         if ($vMod&gt;0 &amp;amp;&amp;amp; $vMod &lt; $minSX) {             $v1 = getLocV($minS+ ".vtx["+($i-$vMod)+"]");             $v2 = getLocV($minS+ ".vtx["+($i-$vMod+$minSX)+"]");             $v3 = getLocV($minS+ ".vtx["+($vMod)+"]");             $v4 = getLocV($minS+ ".vtx["+($vMod+(($minSX+1)*$minSY))+"]");                         $new1 = (($v1*($minSX-$vMod))+($v2*$vMod))/$minSX;             $row = $i/($minSX+1);             $new2 = (($v3*($minSY-$row))+($v4*$row))/$minSY;             $pos = ($new1 + $new2)*.5;                         select -r ($minS+ ".vtx["+$i+"]") ;             move ($pos.x) ($pos.y) ($pos.z);                //currentTime 0;            }     }       int $vMod;      $smoothLoops = `intSliderGrp -q -v maxIterationsField`;     for ($loop=0; $loop&lt;$smoothLoops ; $loop++) {         for ($i=($minSX+2); $i&lt; ((($minSX+1)*$minSY)-1); $i++) {             $vMod = $i%($minSX+1);             if ($vMod&gt;0 &amp;amp;&amp;amp; $vMod &lt; $minSX) {                 //print ("  " + $i);                                 $v1 = getLocV($minS+ ".vtx["+($i-1)+"]");                 $v2 = getLocV($minS+ ".vtx["+($i+1)+"]");                 $v3 = getLocV($minS+ ".vtx["+($i-1-$minSX)+"]");                 $v4 = getLocV($minS+ ".vtx["+($i+1+$minSX)+"]");                 $pos = ($v1 + $v2 + $v3 + $v4)/4;                 select -r ($minS+ ".vtx["+$i+"]") ;                 move ($pos.x) ($pos.y) ($pos.z);                }                     }         select -r $minS;         //print ("$loop: "+$loop+"\n");                 if ( `progressWindow -query -isCancelled` ) break;                 $updateAmmount = ($loop/$smoothLoops )*100;         $updatePercentage= $updateAmmount;                 //print ("$updatePercentage: " + ($updateAmmount) + "\n");         progressWindow -edit                -progress ($updatePercentage)                -status ("Complete: "+$updatePercentage+"%")                ;                    if (`checkBox -q -v UIshowSurface`) {             refresh -cv;         }     }         progressWindow -endProgress;      //print ("curveSpan: " + $curveSpan);     select -r $minS;     xform -cp;     if (`size($path)`&gt;2) {&lt;br /&gt;      parent ($minS) ($path[0]+"|"+$path[1]+"|"+$path[2]) ;&lt;br /&gt;  }&lt;br /&gt;  waitCursor -state off;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// ================================================================================&lt;br /&gt;//&lt;br /&gt;//  minSurfUI&lt;br /&gt;//      &lt;br /&gt;// ================================================================================&lt;br /&gt;&lt;br /&gt;global proc minSurfUI () {&lt;br /&gt;  if (`window -exists minSurfUIWin` == 1) {&lt;br /&gt;      deleteUI minSurfUIWin;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;      string $minSurfUIWin = `window&lt;br /&gt;          -title "Minimum Surface Builder"&lt;br /&gt;          -menuBar 0&lt;br /&gt;          -mxb 0&lt;br /&gt;          -rtf 1&lt;br /&gt;          minSurfUIWin`;&lt;br /&gt;   &lt;br /&gt;      //scrollLayout;&lt;br /&gt;      columnLayout;&lt;br /&gt;      separator -h 15 -w 400 -st "none";// whitespace&lt;br /&gt;      intFieldGrp -numberOfFields 1&lt;br /&gt;           -label "PolyDivisions X"  -value1 15&lt;br /&gt;          polySubX_field;   //`intFieldGrp -q -v polySubX_field`&lt;br /&gt;   &lt;br /&gt;      intFieldGrp -numberOfFields 1&lt;br /&gt;           -label "PolyDivisions Y"  -value1 15&lt;br /&gt;          polySubY_field;  //`intFieldGrp -q -v polySubY_field`&lt;br /&gt;   &lt;br /&gt;      // smoothing ITERATIONS&lt;br /&gt;      intSliderGrp -label "Smooth Iterations" -field true&lt;br /&gt;           -minValue 0 -maxValue 20&lt;br /&gt;          -fieldMinValue 0 -fieldMaxValue 100&lt;br /&gt;          -value 20&lt;br /&gt;          maxIterationsField;  //`intSliderGrp -q -v maxIterationsField`&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;      // show updates&lt;br /&gt;      separator -h 15 -w 400 -st "none";// whitespace&lt;br /&gt;      checkBox -label "Show Surface During Creation" -v 0 UIshowSurface;&lt;br /&gt;      /*&lt;br /&gt;      separator -h 15 -w 400 -st "in";// whitespace&lt;br /&gt;&lt;br /&gt;      text -l "0% Complete" UIupdateText;&lt;br /&gt;      */&lt;br /&gt;   &lt;br /&gt;      separator -h 15 -w 400 -st "in";// whitespace&lt;br /&gt;      // BUTTONS&lt;br /&gt;      //--------------&lt;br /&gt;      rowLayout&lt;br /&gt;          -nc 2&lt;br /&gt;          -cat 1 "both" 0&lt;br /&gt;          -cat 2 "both" 0&lt;br /&gt;          -columnWidth 1 100&lt;br /&gt;          -columnWidth 2 100&lt;br /&gt;          ;&lt;br /&gt;       &lt;br /&gt;          button -label "Create" -align "center" -command "minSurf";&lt;br /&gt;          button -label "Cancel" -align "center" -command "deleteUI minSurfUIWin";&lt;br /&gt;           &lt;br /&gt;  showWindow $minSurfUIWin;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-6834011155122761230?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6834011155122761230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6834011155122761230'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/01/minimal-surface-script.html' title='minimal surface script'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-1010270798572873193</id><published>2007-01-05T18:06:00.000-08:00</published><updated>2008-04-22T11:45:59.057-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sky'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>FitCurvetoLength Modified</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_DACBIEbkSBY/RZ8Hc0Kd_PI/AAAAAAAAABs/GGWAwI0OccA/s1600-h/Untitled-2.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_DACBIEbkSBY/RZ8Hc0Kd_PI/AAAAAAAAABs/GGWAwI0OccA/s320/Untitled-2.jpg" alt="" id="BLOGGER_PHOTO_ID_5016736701534305522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_DACBIEbkSBY/RZ8E4EKd_OI/AAAAAAAAABg/JlzaI3IcvgE/s1600-h/screen1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_DACBIEbkSBY/RZ8E4EKd_OI/AAAAAAAAABg/JlzaI3IcvgE/s320/screen1.jpg" alt="" id="BLOGGER_PHOTO_ID_5016733871150857442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here's Yuki's earlier script modified to identify the centerpoint of the curve with the method Rhino.BoundingBox&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Option Explicit&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;'title: FitCurveToLength&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;'this script is to loop scaling a curve until it fits certain length&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;FitCurveToLength ()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Sub FitCurveToLength ()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Dim strCurveID&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;strcurveID = Rhino.GetObject("Select a curve to fit to length", 4, True, True)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;If IsNull(strCurveID) Then Exit Sub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Dim arrBoundingBox&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;arrBoundingBox = Rhino.BoundingBox(strCurveID)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Dim arrCtr&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Dim dblx, dbly, dblz&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;dblx =0.5*(arrBoundingBox(0)(0)+arrBoundingBox(1)(0))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;dbly =0.5*(arrBoundingBox(1)(1)+arrBoundingBox(2)(1))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;dblz =0.5*(arrBoundingBox(1)(2)+arrBoundingBox(5)(2))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);font-family:trebuchet ms;" &gt;arrCtr = array(dblx, dbly, dblz)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Dim dblLength&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;dblLength = Rhino.CurveLength(strCurveID)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Dim dblLengthLimit&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;dblLengthLimit = Rhino.GetReal("Length limit", 0.5*dblLength, 0.01*dblLength, dblLength)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;If IsNull(dblLengthLimit) Then Exit Sub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Do&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;If Rhino.CurveLength(strCurveID) &lt;= dblLengthLimit Then Exit Do&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;strCurveID = Rhino.ScaleObject(strCurveID, &lt;span style="font-weight: bold; color: rgb(255, 255, 0);"&gt;arrCtr&lt;/span&gt;, Array(0.95,0.95,0.95),True)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;If IsNull(strCurveID) Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Rhino.Print "Something went wrong..."&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Exit Sub&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;End If&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Loop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Rhino.Print "New curve length: " &amp;amp; Rhino.CurveLength(strCurveID)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;End Sub&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-1010270798572873193?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/1010270798572873193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/1010270798572873193'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/01/fitcurvetolength-modified.html' title='FitCurvetoLength Modified'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_DACBIEbkSBY/RZ8Hc0Kd_PI/AAAAAAAAABs/GGWAwI0OccA/s72-c/Untitled-2.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-4940797867987291284</id><published>2007-01-04T00:41:00.000-08:00</published><updated>2008-04-22T11:45:46.962-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sky'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Architectural Critique: Scripting Misuse</title><content type='html'>I found some Rhinoscripting studies while surfing the web that I was particularly disheartened with. &lt;a href="http://www.rhino3.de/album/math/index.shtml"&gt;The website shows a studio from Rensselaer Polytechnic Institute&lt;/a&gt; and what appears to be student projects in which math functions are the basis for structure/home design. Here are examples of what I &lt;span style="font-weight: bold;"&gt;DON'T&lt;/span&gt; want to do.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_DACBIEbkSBY/RZzIMbEi_jI/AAAAAAAAABU/uU3ZyJgkVgg/s1600-h/05-John-Davi-Twin-Dwelling-.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_DACBIEbkSBY/RZzIMbEi_jI/AAAAAAAAABU/uU3ZyJgkVgg/s320/05-John-Davi-Twin-Dwelling-.jpg" alt="" id="BLOGGER_PHOTO_ID_5016104200734703154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here we have math functions in their purity and complexity making singular forms that get transformed into buildings that simply don't work very well or would work much better if they were developed in different ways. Not to be too harsh but the above example simply works against the very premise of wild parametric design by including distinctly uniform and standard floor slabs. In addition, despite the variations that each student shows faded into the background the math functions aren't flexible for local conditions. What it amounts to is form exploration for its own sake, not for better design.&lt;br /&gt;&lt;br /&gt;Granted this is all my superficial reaction to this work in that I haven't taken the time to read the studio premise or any individuals goal. But this is a blog and I get to say what I like. So step off.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-4940797867987291284?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/4940797867987291284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/4940797867987291284'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/01/architectural-critique-scripting-misuse.html' title='Architectural Critique: Scripting Misuse'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_DACBIEbkSBY/RZzIMbEi_jI/AAAAAAAAABU/uU3ZyJgkVgg/s72-c/05-John-Davi-Twin-Dwelling-.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-7254756096679192457</id><published>2007-01-01T20:34:00.000-08:00</published><updated>2008-04-22T11:44:22.929-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>DivideCurve ( ) _yuki</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_DACBIEbkSBY/RZnhRLEi_iI/AAAAAAAAABI/hAqfoPTiuhU/s1600-h/Untitled-1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_DACBIEbkSBY/RZnhRLEi_iI/AAAAAAAAABI/hAqfoPTiuhU/s320/Untitled-1.jpg" alt="" id="BLOGGER_PHOTO_ID_5015287345199644194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is my first script I wrote from scratch. User can pick two curves, divide into the number s/he wants, and draw lines accordingly. Array was complicated, but I'm getting hang of it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;'S.S.S.S. sciarcsmac first challenge #2&lt;br /&gt;&lt;br /&gt;DivideCurve()&lt;br /&gt;Sub DivideCurve()&lt;br /&gt;Dim strFirstCurve&lt;br /&gt;strFirstCurve = Rhino.GetObject("Select the first curve", 4)&lt;br /&gt;If IsNull(strFirstCurve) Then Exit Sub&lt;br /&gt;&lt;br /&gt;Dim strSecondCurve&lt;br /&gt;strSecondCurve = Rhino.GetObject("Select the second curve", 4)&lt;br /&gt;If IsNull(strSecondCurve) Then Exit Sub&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dim t&lt;br /&gt;t = Rhino.GetInteger("Number of division?", 10, 2, 100)&lt;br /&gt;If IsNull (t) Then Exit Sub&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dim arrFirstCurvePoints&lt;br /&gt;arrFirstCurvePoints = Rhino.DivideCurve(strFirstCurve, t, True)&lt;br /&gt;&lt;br /&gt;Dim arrSecoudCurvePoints&lt;br /&gt;arrSecoudCurvePoints = Rhino.DivideCurve(strSecondCurve, t, True)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dim strAddedLines&lt;br /&gt;Dim i&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For i = 0 To t Step 1&lt;br /&gt; strAddedLines = Rhino.AddLine(arrFirstCurvePoints(i), arrSecoudCurvePoints(i))&lt;br /&gt;&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;Dim strSayYes&lt;br /&gt;strSayYes = Rhino.GetString ("Continue? ", "Y")&lt;br /&gt;If Not strSayYes = "Y" Then Exit Sub&lt;br /&gt;&lt;br /&gt;Rhino.Print "Well done! "&lt;br /&gt;&lt;br /&gt;End Sub&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-7254756096679192457?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/7254756096679192457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/7254756096679192457'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/01/dividecurve-yuki.html' title='DivideCurve ( ) _yuki'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_DACBIEbkSBY/RZnhRLEi_iI/AAAAAAAAABI/hAqfoPTiuhU/s72-c/Untitled-1.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-469931820101743088</id><published>2007-01-01T20:25:00.000-08:00</published><updated>2008-04-22T11:44:10.492-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>FitCurveToLength ( ) _yuki</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_DACBIEbkSBY/RZngMrEi_hI/AAAAAAAAAA8/zchVBcBk86w/s1600-h/Untitled-2.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_DACBIEbkSBY/RZngMrEi_hI/AAAAAAAAAA8/zchVBcBk86w/s320/Untitled-2.jpg" alt="" id="BLOGGER_PHOTO_ID_5015286168378605074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;So far, I just copied tutorial, but my challenge is to scale down the curve within the original. The example on the right is my goal. Now, the scale origin is set to &lt;span style="font-weight: bold; color: rgb(255, 255, 102);"&gt;(0,0,0)&lt;/span&gt;. I have to change the scale origin to the center of gravity. I don't even know if there is a way to specify it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;'title: FitCurveToLength&lt;br /&gt;'this script is to loop scaling a curve until it fits certain length&lt;br /&gt;&lt;br /&gt;FitCurveToLength ()&lt;br /&gt;Sub FitCurveToLength ()&lt;br /&gt;Dim strCurveID&lt;br /&gt;strcurveID = Rhino.GetObject("Select a curve to fit to length", 4, True, True)&lt;br /&gt;If IsNull(strCurveID) Then Exit Sub&lt;br /&gt;&lt;br /&gt;Dim dblLength&lt;br /&gt;dblLength = Rhino.CurveLength(strCurveID)&lt;br /&gt;&lt;br /&gt;Dim dblLengthLimit&lt;br /&gt;dblLengthLimit = Rhino.GetReal("Length limit", 0.5*dblLength, 0.01*dblLength, dblLength)&lt;br /&gt;If IsNull(dblLengthLimit) Then Exit Sub&lt;br /&gt;&lt;br /&gt;Do&lt;br /&gt; If Rhino.CurveLength(strCurveID) &lt;= dblLengthLimit Then Exit Do           strCurveID = Rhino.ScaleObject(strCurveID, &lt;span style="font-weight: bold; color: rgb(255, 255, 102);"&gt;Array(0,0,0)&lt;/span&gt;, Array(0.95,0.95,0.95),True)&lt;br /&gt; If IsNull(strCurveID) Then&lt;br /&gt;   Rhino.Print "Something went wrong..."&lt;br /&gt;   Exit Sub&lt;br /&gt; End If&lt;br /&gt;Loop&lt;br /&gt;&lt;br /&gt;Rhino.Print "New curve length: " &amp;amp; Rhino.CurveLength(strCurveID)&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-469931820101743088?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/469931820101743088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/469931820101743088'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2007/01/fitcurvetolength-yuki.html' title='FitCurveToLength ( ) _yuki'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_DACBIEbkSBY/RZngMrEi_hI/AAAAAAAAAA8/zchVBcBk86w/s72-c/Untitled-2.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-1388091562611866606</id><published>2006-12-31T18:07:00.000-08:00</published><updated>2008-04-22T11:43:28.826-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sky'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Area Script</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_DACBIEbkSBY/RZhtObEi_gI/AAAAAAAAAAw/D-aDvoOWF4A/s1600-h/area1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_DACBIEbkSBY/RZhtObEi_gI/AAAAAAAAAAw/D-aDvoOWF4A/s320/area1.jpg" alt="" id="BLOGGER_PHOTO_ID_5014878279629471234" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here's a small script I wrote for calculating the area of panels in 3d. In the end I'd like to be able to send the information to a spreadsheet that will also flatten the panels and dimension them automatically.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;main()&lt;br /&gt;&lt;br /&gt;Sub main()&lt;br /&gt;&lt;br /&gt; Dim arrObjects&lt;br /&gt;&lt;br /&gt; arrObjects = Rhino.GetObjects ("select a objects", 8)&lt;br /&gt;&lt;br /&gt; Dim i&lt;br /&gt; For i = 0 To UBound(arrObjects)&lt;br /&gt;   If Rhino.IsSurface(arrObjects(i)) Then&lt;br /&gt;     Dim arrArea : arrArea = Rhino.SurfaceArea(arrObjects(i))&lt;br /&gt;     Dim arrPoints : arrPoints = Rhino.SurfacePoints(arrObjects(i))&lt;br /&gt;     Rhino.AddText "Panel "&amp;amp; i+1 &amp;amp; " Area: " &amp;amp; CStr (arrArea(0)), arrPoints(0)&lt;br /&gt;   End If&lt;br /&gt;&lt;br /&gt; Next&lt;br /&gt;&lt;br /&gt;End Sub&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-1388091562611866606?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/1388091562611866606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/1388091562611866606'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2006/12/area-script.html' title='Area Script'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_DACBIEbkSBY/RZhtObEi_gI/AAAAAAAAAAw/D-aDvoOWF4A/s72-c/area1.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-8563550548674057621</id><published>2006-12-31T01:32:00.000-08:00</published><updated>2008-04-22T11:43:22.782-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sky'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Challenge #2 Method List (Please Update)</title><content type='html'>So following up on Yuki's proposal for Challenge #2 here is a list of methods we must use at least once in our script. Other restrictions are that we cannot use any other methods than the ones given. The goal should be to make the most useful/interesting/fun script using all the methods. Before the Challenge begins we should all contribute a method or two we'd like to use.&lt;br /&gt;&lt;br /&gt;note *methods are built in commands and can be accessed by going to help - plugin - rhinoscript (in folder called methods)*&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:130%;" &gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;&lt;span style="color: rgb(255, 255, 0);"&gt;Method List for Challenge #2 (Maximum of 10)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Rhino.AddSrfPoint (Sky)&lt;br /&gt;Rhino.GetPointOnSurface (Sky)&lt;br /&gt;&lt;br /&gt;Rhino.CurveLength (Yuki)&lt;br /&gt;Rhino.ScaleObject (Yuki)&lt;br /&gt;Rhino.DivideCurve (Yuki)&lt;br /&gt;&lt;span style="font-style: italic;font-size:130%;" &gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;&lt;span style="color: rgb(255, 255, 0);"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-8563550548674057621?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/8563550548674057621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/8563550548674057621'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2006/12/challenge-2-method-list-please-update.html' title='Challenge #2 Method List (Please Update)'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-7311845140529568547</id><published>2006-12-31T01:18:00.000-08:00</published><updated>2008-04-22T11:43:16.309-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sky'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>Solution #1 (Sky)</title><content type='html'>I hope everyone's gotten started on your scripts. Here's my take on Challenge #1. Instead of starting with a panel I started with two curves. The user gets to input how many panels they want from 2 to 500 with the default value set at 10. To make this I used the tutorials along with the searching the method helpfiles. Working out the bugs with the nested arrays took a while. My original intent was to work in 2d and make ellipses that would span the two points on the curves with varying thickness. In the end I couldn't think of any other way than Rhino.command and that was giving me trouble.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_DACBIEbkSBY/RZeCBbEi_dI/AAAAAAAAAAM/pEk8Hv3oqP8/s1600-h/panelize.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_DACBIEbkSBY/RZeCBbEi_dI/AAAAAAAAAAM/pEk8Hv3oqP8/s320/panelize.jpg" alt="" id="BLOGGER_PHOTO_ID_5014619671058644434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_DACBIEbkSBY/RZeCBrEi_eI/AAAAAAAAAAU/x9YbTCPPtmw/s1600-h/panelize2.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_DACBIEbkSBY/RZeCBrEi_eI/AAAAAAAAAAU/x9YbTCPPtmw/s320/panelize2.jpg" alt="" id="BLOGGER_PHOTO_ID_5014619675353611746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_DACBIEbkSBY/RZeItLEi_fI/AAAAAAAAAAk/7C5Uz_aZKwA/s1600-h/panelize3.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_DACBIEbkSBY/RZeItLEi_fI/AAAAAAAAAAk/7C5Uz_aZKwA/s320/panelize3.jpg" alt="" id="BLOGGER_PHOTO_ID_5014627019747687922" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here's the script:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;Call Main()&lt;br /&gt;&lt;br /&gt;Sub Main&lt;br /&gt;Dim t&lt;br /&gt;Dim strCurve1, strCurve2&lt;br /&gt;Dim arrCurve1Points(), arrCurve2Points()&lt;br /&gt;&lt;br /&gt;t = Rhino.GetInteger("Number of Divisions",10,2,500)&lt;br /&gt;&lt;br /&gt;Do&lt;br /&gt;strCurve1 = Rhino.GetObject("Select First Curve",4)&lt;br /&gt;If IsCurve(strCurve1) Then Exit Do&lt;br /&gt;Loop&lt;br /&gt;&lt;br /&gt;Do&lt;br /&gt;strCurve2 = Rhino.GetObject("Select Second Curve", 4)&lt;br /&gt;If IsCurve(strCurve2) Then Exit Do&lt;br /&gt;Loop&lt;br /&gt;&lt;br /&gt;Call AddPoints(strCurve1, t, arrCurve1Points)&lt;br /&gt;Call AddPoints(strCurve2, t, arrCurve2Points)&lt;br /&gt;&lt;br /&gt;Dim r&lt;br /&gt;Dim arrTemp&lt;br /&gt;&lt;br /&gt;For r = 0 To t-1   'line30&lt;br /&gt;arrTemp = Array(arrCurve1Points(r), arrCurve1Points(r+1), arrCurve2Points(r+1), arrCurve2Points(r))&lt;br /&gt;Call Rhino.AddSrfPt(arrTemp)&lt;br /&gt;'Call Rhino.AddLine(arrCurve1Points(r), arrCurve2Points(r))&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'This function makes an array of points on the selected curve&lt;br /&gt;Function AddPoints(StrCurve, t, ByRef CurvePoints)&lt;br /&gt;&lt;br /&gt;Dim arrDomain, dblParam, arrPoint&lt;br /&gt;&lt;br /&gt;arrDomain = Rhino.CurveDomain(StrCurve)&lt;br /&gt;dblParam = arrDomain(1)/t&lt;br /&gt;                                                                       &lt;br /&gt;Dim i&lt;br /&gt;For i = 0 To t&lt;br /&gt;arrPoint = Rhino.EvaluateCurve(StrCurve, dblParam * i)&lt;br /&gt;ReDim Preserve CurvePoints(i)&lt;br /&gt;CurvePoints(i) = arrPoint&lt;br /&gt;'Call Rhino.AddPoint (arrPoint)&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;End Function&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-7311845140529568547?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/7311845140529568547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/7311845140529568547'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2006/12/solution-1-sky.html' title='Solution #1 (Sky)'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_DACBIEbkSBY/RZeCBbEi_dI/AAAAAAAAAAM/pEk8Hv3oqP8/s72-c/panelize.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-6427741022500877014</id><published>2006-12-30T22:07:00.000-08:00</published><updated>2008-04-22T11:42:46.634-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>The Rhinoscript Challenge #2</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;How about the following problem as a first challenge?&lt;br /&gt;&lt;br /&gt;Instead of solving one problem with everybody, each of us come up to 3 to 5 &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;RhinoScript&lt;/span&gt; Methods we can use, and write one or more scripts.&lt;br /&gt;&lt;br /&gt;Like we started learning &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;AutoCAD&lt;/span&gt; only with&lt;br /&gt;"L"&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt; "Pl"&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt; "O" "Co" "Tr"&lt;br /&gt;Those &lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;5 &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;RhinoScript&lt;/span&gt; Methods will be our basic tools. Then everything else will follow!&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;You can find &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;RhinoScripting&lt;/span&gt; Methods in Rhino&lt;br /&gt;Rhino Help/ plug-ins/ &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;RhinoScript&lt;/span&gt; plug-in&lt;br /&gt;Then open &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;RhinoScript&lt;/span&gt; Methods&lt;br /&gt;&lt;br /&gt;A list of VBscript functions can be found here:&lt;br /&gt;&lt;a href="http://www.w3schools.com/vbscript/vbscript_ref_functions.asp"&gt;http://www.w3schools.com/vbscript/vbscript_ref_functions.asp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-6427741022500877014?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6427741022500877014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/6427741022500877014'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2006/12/rhinoscript-challenge-2.html' title='The Rhinoscript Challenge #2'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-1340386643181314229</id><published>2006-12-30T19:55:00.000-08:00</published><updated>2008-04-22T11:42:39.038-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YukiukiH'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>newbie thoughts</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;I finally started messing around with &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;vbScript&lt;/span&gt;. It's like learning another language.&lt;br /&gt;I was having a little trouble comprehending the &lt;/span&gt;&lt;a href="http://en.wiki.mcneel.com/default.aspx/McNeel/RhinoScript101.html"&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;McNeel&lt;/span&gt; &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Rhinoscript&lt;/span&gt; &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;PDF's&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt; &lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;without having any scripting experiences.&lt;br /&gt;&lt;br /&gt;I would &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;recommend&lt;/span&gt; the &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;PDF&lt;/span&gt; tutorial that &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Devyn&lt;/span&gt; gave us in our 3A.&lt;br /&gt;Reconstructivism:&lt;br /&gt;&lt;a href="http://www.reconstructivism.net/PDF/Scripting_Handout.pdf"&gt;http://www.reconstructivism.net/PDF/Scripting_Handout.pdf&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-1340386643181314229?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/1340386643181314229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/1340386643181314229'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2006/12/newbie-thoughts.html' title='newbie thoughts'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-8097734167187353556</id><published>2006-12-23T18:57:00.000-08:00</published><updated>2008-04-22T11:42:22.044-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sky'/><category scheme='http://www.blogger.com/atom/ns#' term='RhinoScript'/><title type='text'>The Rhinoscript Challenge #1</title><content type='html'>Given that we're all Rhinoscript beginners the challenge was set up so that we could all work on one problem and compare our solutions.&lt;br /&gt;&lt;br /&gt;Everyone got mad at me for making the first challenge several months ago so to make this as fair of a process let's all make suggestions to what the first challenge should be.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-8097734167187353556?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/8097734167187353556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/8097734167187353556'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2006/12/rhinoscript-challenge-1.html' title='The Rhinoscript Challenge #1'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-9018533675929938398</id><published>2006-12-23T18:16:00.000-08:00</published><updated>2008-04-22T11:40:09.018-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sky'/><title type='text'>Why we need to learn Rhinoscript: A manifesto of sorts</title><content type='html'>Scripting in architecture, also known as computational design seems to be the current trend.  So what's the big deal and why should we be a part of it?&lt;br /&gt;&lt;br /&gt;    In answering this question I'd like for us to come up with a new relevance for scripting in architecture, one that goes beyond form generation, or unique structure as we see at &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Sciarc&lt;/span&gt;. Already the division between scripting, parametric modeling, and B.I.M. software is going away to where they are all being connected into one big organizational software such as Generative Components, or Digital Project. This is very exciting in that never before has the designer played as much of a role as the designing software as they are now. Through scripting we are able to create the tools we want to use rather than picking from what the available software has to offer.&lt;br /&gt;&lt;br /&gt;This is all good and as architects it will be &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;necessary&lt;/span&gt; for us to know this stuff. My real beef is with what the prominent architects are doing with this new freedom. Around school what I see is a leaning toward complexity, complexity far beyond the capabilities of construction. What this means is that designs are visionary at best, mental masturbation at worst. You be the judge but it's safe to say that most of the projects proposed at &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Sciarc&lt;/span&gt; cannot be built tomorrow. This in as of itself is not a problem and I love to think in these big terms, but as a practical measure I want to also pursue scripting in terms of what it takes to get the job done. For those of you that saw the lecture by Roberto in 4A you know what I mean. Using scripting as a tool to simplify and automate the process. In the practicing environment this economy of speed and labour results in real savings, a way for us to actually make lots of money with our knowledge. This makes people that can script, i.e. us, a major component of any design &amp;amp; construction process.&lt;br /&gt;&lt;br /&gt;I'd like to hear from those of you in Evan Douglas' studio to see your take on this stuff.&lt;br /&gt;&lt;br /&gt;Here are several links to people already thinking about this.&lt;br /&gt;&lt;a href="http://allthingsbim.blogspot.com/2006/11/building-in-future-yale-part-4.html"&gt;&lt;br /&gt;The Yale Symposium &lt;-- this is very interesting&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.aecbytes.com/feature/2004/Gehry_Study.html"&gt;The &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Gehry&lt;/span&gt; Method&lt;/a&gt;&lt;br /&gt;&lt;a href="http://http//stream.bentley.com/mediasite/viewer/Viewer.aspx?layoutPrefix=LayoutTopLeft&amp;amp;layoutOffset=Skins/Clean&amp;amp;amp;amp;amp;amp;amp;width=800&amp;amp;height=631&amp;amp;peid=3398c013-92e0-4100-be15-5c143bd1cd96&amp;amp;pid=1956ab3b-c7e9-4599-b094-2daa379b32ab&amp;amp;pvid=502&amp;amp;mode=Default&amp;amp;shouldResize=false&amp;amp;playerType=WM64Lite"&gt;A lecture that introduces concepts of &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;BIM&lt;/span&gt; and Parametric Design&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-9018533675929938398?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/9018533675929938398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/9018533675929938398'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2006/12/why-we-need-to-learn-rhinoscript.html' title='Why we need to learn Rhinoscript: A manifesto of sorts'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3423175248222521930.post-8051785518061245261</id><published>2006-12-23T18:09:00.000-08:00</published><updated>2006-12-23T18:16:06.052-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sky'/><title type='text'>About the S.S.S.S.</title><content type='html'>The S.S.S.S. was formed as a way to help all of us exchange information about things pertaining to scripting, in particular Rhinoscripting. This blog is open for all members to post, update and edit, not only things about Rhinoscript but anything remotely related should be brought up.&lt;br /&gt;&lt;br /&gt;For clarity we should put our name in the label of the post. That way we'll know who to respond to about certain topics.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3423175248222521930-8051785518061245261?l=ssssociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/8051785518061245261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3423175248222521930/posts/default/8051785518061245261'/><link rel='alternate' type='text/html' href='http://ssssociety.blogspot.com/2006/12/about-ssss.html' title='About the S.S.S.S.'/><author><name>S-S-S-S</name><uri>http://www.blogger.com/profile/05032019268945891071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
