# McNeel Wiki

### Sidebar

{@

' pntfillet : 2d fillet of 2 lines through a point

function ptw(a)

ptw=“ w”&cstr(a(0))&“,”&cstr(a(1))&“,0 ”

end function

function v2prodi(a,b)

v2prodi=a(0)b(0)+a(1)b(1)

end function

function v2prode(a,b)

v2prode=a(0)b(1)-a(1)b(0)

end function

function v2ver(v)

m=sqr(v(0)^2+v(1)^2)

if m=0 then

` v2ver=null`

else

` v2ver=array(v(0)/m,v(1)/m)`

end if

end function

function v2sub(a,b)

v2sub=array(a(0)-b(0),a(1)-b(1))

end function

function v2sum(a,b)

v2sum=array(a(0)+b(0),a(1)+b(1))

end function

function v2mul(v,a)

v2mul=array(v(0)a,v(1)a)

end function

function v2psuml(p,u,l)

v2psuml=array(p(0)+u(0)l,p(1)+u(1)l)

end function

function v2verpp(a,b)

v=v2sub(b,a)

v2verpp=v2ver(v)

end function

function v2mid(pa,pb)

v2mid=array1)/2,(pa(1)+pb(1))/2)

end function

function v2dist(a,b)

v2dist=sqr2)^2+(a(1)-b(1))^2)

end function

function prjptlin(pt,pl,ul)

l=v2prodi(v2sub(pt,pl),ul)

prjptlin=v2psuml(pl,ul,l)

end function

function intlinlin(pa,ua,pb,ub)

if abs(ua(0))>abs(ua(1)) then

``` aa=(pb(0)-pa(0))/ua(0)
bb=ub(0)/ua(0)
h=(pb(1)-pa(1)-aa**ua(1))/(bb**ua(1)-ub(1))
intlinlin=v2psuml(pb,ub,h)```

else

``` cc=(pa(0)-pb(0))/ub(0)
dd=ua(0)/ub(0)
k=(pb(1)-pa(1)+cc**ub(1))/(ua(1)-dd**ub(1))
intlinlin=v2psuml(pa,ua,k)```

end if

end function

sub main

la=rhino.getobject(“First line ?”)

lb=rhino.getobject(“Second line ?”)

pt=rhino.getpoint(“Point ?”)

pa0=rhino.curvestartpoint(la)

pa1=rhino.curveendpoint(la)

pb0=rhino.curvestartpoint(lb)

pb1=rhino.curveendpoint(lb)

ua=v2verpp(pa0,pa1)

ub=v2verpp(pb0,pb1)

pint=intlinlin(pa0,ua,pb0,ub)

' rhino.addpoint(pint) if v2dist(pint,pa0) > v2dist(pint,pa1) then

``` tm=pa0
pa0=pa1
pa1=tm
ua=v2verpp(pa0,pa1)```

end if

if v2dist(pint,pb0) > v2dist(pint,pb1) then

``` tm=pb0
pb0=pb1
pb1=tm
ub=v2verpp(pb0,pb1)```

end if

pa2=v2psuml(pint,ua,10)

pb2=v2psuml(pint,ub,10)

pm=v2mid(pa2,pb2)

cosal=v2prodi(ua,um)

sinal=sqr(1-cosal*cosal)

kb=v2sub(pint,pt)

aa=um(0)^2+um(1)^2-sinal^2

bb=kb(0)um(0)+kb(1)um(1)

cc=kb(0)^2+kb(1)^2

k0=(-bb+sqr(bbbb-aacc))/aa

k1=(-bb-sqr(bbbb-aacc))/aa

c0=v2psuml(pint,um,k0)

c1=v2psuml(pint,um,k1)

r1=v2dist(c1,pt)

if r0>r1 then

``` tm=r0
r0=r1
r1=tm
tm=c0
c0=c1
c1=tm```

end if

``` r=r0
c=c0```

else

``` r=r1
c=c1```

end if

pra=prjptlin(c,pint,ua)

prb=prjptlin(c,pint,ub)

' rhino.command“fillet ”&cstr®&“ selid ”&la&“ selid ”&lb end sub

pi=3.14159265358979323846

main

}@

1)
pa(0)+pb(0
2)
a(0)-b(0