/* CMD: Point Separation
 *
 * By Arnie Cachelin © 1993 NewTek Inc.
 * Wed Sep 15 1993
 */
	mxx="LWModelerARexx.port"
	signal on error
	signal on syntax
  numeric digits 5
	mxx_add = addlib(mxx,0)
	call addlib("rexxmathlib.library",0,-30,0)
	call main
	if (mxx_add) then call remlib(mxx)
	exit

	syntax:
	error:
	t=Notify(1,'!Rexx Script Error','@'ErrorText(rc),'Line 'SIGL)
	if (mxx_add) then call remlib(mxx)
	exit


main:
  call sel_mode(USER)
  c=xfrm_begin()
  if c~=1 then do
    v1=xfrm_getpos(1)
    v2=xfrm_getpos(2)
    dx=word(v2,1) - word(v1,1)
    dy=word(v2,2) - word(v1,2)
    dz=word(v2,3) - word(v1,3)
    v=dx dy dz
    call Notify(1,"!Point Separation:",v,"Distance: "Magnitude(v))
    end
  else call Notify(1,"!Oops, only one point selected!")
  return

Magnitude: PROCEDURE
  arg v
  return(sqrt(Dot(v,v)))

Dot: PROCEDURE  /* vector dot product */
  arg v1,v2
  S=0
  do i=1 to 3
    S=S+word(v1,i)*word(v2,i)
    end
  return S

Dist: PROCEDURE
  arg v1,v2
  S=0
  do i=1 to 3
    S=S + (word(v2,i) - word(v1,i))^2
    end
  return sqrt(S)
