I pasted that script into a new stack, cleaned it up and played with it for a while. It seems to work fine for closed polys, but I need to support both open and closed polys, along with lines (and curves might be nice). I was hoping that someone from Rev would clarify whether or not their script could be legally copied into my stack for use in the external. They have presented that script as a solution to the problem, which it is (more or less) for people running the stack in Rev, but if it doesn't get copied into the standalone, it doesn't do me much good.

On Oct 24, 2004, at 6:36 PM, Alejandro Tejada wrote:

Hi Frank,

I have put code to reshape a polygon vector graphic
in the stack "Graphic Tools v01 beta"

<http://www.geocities.com/capellan2000/Graphic_Tools_v01beta.zip>

This long script is from the
button "directSelectionScript"
at the bottom of the stack, and from
the stack script.

You can improve it at your own will. :-)

alejandro

local
vertexpoint,vfrtgb,mnbvc,twovertexpoints,pointxy,mqpz,apgd1,apgd2,ajdg1 ,ajdg2


on mouseUp
  set the cursor to 1085

  if the target <> word 1 to 3 of the selobj -- this
line to avoid a flicker in the selobj
  then
    if the target contains "graphic" and the style of
the target = "polygon"
    then
      if twovertexpoints is not empty -- and the
target contains "graphic" and the style of the target
= "polygon" ## @@@
      then
        if ((item 1 of apgd1 + item 1 of mqpz ),(item
2 of apgd1 + item 2 of mqpz)) <> "0,0"  -- this line
prevents that the polygon gets a new line at 0,0
        then
          #  -- beep 3
          put the points of the target into vfrtgb
          set the graphicPointsforUndo of btn "Undo"
to vfrtgb
          put ((item 1 of apgd1 + item 1 of mqpz
),(item 2 of apgd1 + item 2 of mqpz)) into line ajdg1
of vfrtgb
          put  ((item 1 of apgd2 + item 1 of mqpz
),(item 2 of apgd2 + item 2 of mqpz)) into line ajdg2
of vfrtgb

          set the points of the target to vfrtgb
        end if
      end if
      -- if I don't put empty into these locals the
vertexpoint "stick" to the mouse pointer
      put empty into mqpz
      put empty into apgd1
      put empty into apgd2
      put empty into ajdg1
      put empty into ajdg2
      put empty into vertexpoint
      put empty into vfrtgb
      put empty into mnbvc
      put empty into twovertexpoints
      put empty into pointxy
      set the markerfilled of the target to false
      set the markerDrawn of the target to the hilite
of btn "Show Markers"
    end if

  end if
  pass mouseUp
end mouseUp

on mousedown

  if the target <> word 1 to 3 of the selobj  --
prevent flickering
  then

    if the target contains "graphic" and the style of
the target = "polygon" and setOnlyonce <> 1
    then

      put 1 into setOnlyonce
      put the target into fld "editingGrafic"
      set the markercolor of the target to fld
"ColorMarker"
      set the markerdrawn of the target to true
      set the markerpoints of the target to "-2,-2 &
return & 2,-2 & return & 2,2 & return & -2,2 & return
& -2,-2" -- small square

      put the points of the target into vfrtgb
      put the clickloc into pointxy

      -- first check, if the clickloc is a vertex
point of the polygon graphic

      put nearpoints(pointxy) into oknhy -- nearpoints
is another handler

      repeat for each line i in oknhy

        if lineoffset(i,vfrtgb) = 0 -- vfrtgb contains
the list of points of the polygon graphic
        then
          next repeat
        else
          put lineoffset(i,vfrtgb) into mnbvc -- a
local variable with the line number of the clicked
point in the list of points, used by the mousemove
message
          if the target contains "graphic" and the
style of the target = "polygon" then set the
markerfilled of the target to true
          put line mnbvc of vfrtgb into vertexpoint --
a local variable with the clicked point, used by the
mousemove message
          exit repeat
        end if

      end repeat

      if vertexpoint is empty -- you clicked in a
segment of the polygon graphic, not in a vertexpoint
      then --    if the target contains "graphic" and
the style of the target = "polygon" then
        set the markerfilled of the target to true
        put the points of the target into vfrtgb1 --
the contents of vfrtgb1 will be used and deleted by
the following operations
        if last line of vfrtgb1 = first line of
vfrtgb1 then put the number of lines of vfrtgb1 - 1
into lgadCounter else put the number of lines of
vfrtgb1 into lgadCounter
        repeat lgadCounter -- the number of points of
the target - 1, this presume a closed target !!!!!
          put line 1 of vfrtgb1,line 2 of
vfrtgb1,pointxy into ckp
          put ((item 2 of ckp - item 6 of ckp)*(item 3
of ckp - item 1 of ckp) - (item 1 of ckp - item 5 of
ckp)*(item 4 of ckp - item 2 of ckp)) into zse
          put sqrt((item 3 of ckp - item 1 of ckp)^2 +
(item 4 of ckp - item 2 of ckp)^2)^2 into esz
          if esz <> 0 then put abs(zse/esz) & comma
after aqwsde
          -- put abs(zse/esz) & comma after aqwsde --
sometimes produce divide by zero error
          put line 1 of vfrtgb1 && " " && line 2 of
vfrtgb1 & return after aws
          delete line 1 of vfrtgb1
        end repeat
        put min(aqwsde) into mqh
        put itemoffset(mqh,aqwsde) into mbz
        put line mbz of aws into twovertexpoints
      end if
    else
      pass mousedown
    end if -- the target contains "graphic" and the
style of the target = "polygon" and setOnlyonce <> 1
  end if -- target is not the selobj
  pass mousedown
end mousedown



on mousemove mX,mY

  if the target <> word 1 to 3 of the selobj -- to
avoid flickering of the selectedobject
  then
    if vertexpoint is not empty and the target
contains "graphic" and the style of the target =
"polygon"
    then
      if (mnbvc = 1 or mnbvc = the number of lines of
vfrtgb) and line 1 of vfrtgb = last line of vfrtgb
      then
        set the graphicPointsforUndo of btn "Undo" to
vfrtgb
        put mX,mY into first line of vfrtgb
        put mX,mY into last line of vfrtgb
        set the points of the target to vfrtgb
      else
        set the graphicPointsforUndo of btn "Undo" to
vfrtgb
        put mX,mY into line mnbvc of vfrtgb
        set the points of the target to vfrtgb
      end if

    else -- vertexpoint is empty and the target
contains "graphic" and the style of the target =
"polygon"

      -- This part of the code lets you to drag two
vertexpoints
      if twovertexpoints is not empty -- and the
target contains "graphic" and the style of the target
= "polygon"
      then

        put word 1 of twovertexpoints into apgd1 -- a
coordinate point like 14,23
        put word 2 of twovertexpoints into apgd2 -- a
coordinate point like 42,12
        put lineoffset(apgd1,vfrtgb)into ajdg1 -- a
single number like 12
        put lineoffset(apgd2,vfrtgb)into ajdg2 -- a
single number like 21
        put pointxy into firstclick
        put mX,mY into seconclick

        switch
        case item 1 of firstclick > item 1 of
seconclick -- moving to the left
          if  item 2 of firstclick > item 2 of
seconclick then put (- (item 1 of firstclick - item 1
of seconclick)),(-(item 2 of firstclick - item 2 of
seconclick)) into mqpz
          if  item 2 of firstclick < item 2 of
seconclick then put (- (item 1 of firstclick - item 1
of seconclick)),(item 2 of seconclick - item 2 of
firstclick) into mqpz
          if  item 2 of firstclick = item 2 of
seconclick then put (- (item 1 of firstclick - item 1
of seconclick)),(item 2 of firstclick - item 2 of
seconclick) into mqpz
          break
        case item 1 of firstclick < item 1 of
seconclick -- moving to the right
          if  item 2 of firstclick > item 2 of
seconclick then put (item 1 of seconclick - item 1 of
firstclick ),(-(item 2 of firstclick - item 2 of
seconclick)) into mqpz
          if  item 2 of firstclick < item 2 of
seconclick then put (item 1 of seconclick - item 1 of
firstclick),(item 2 of seconclick - item 2 of
firstclick) into mqpz
          if  item 2 of firstclick = item 2 of
seconclick then put (- (item 1 of firstclick - item 1
of seconclick)),(item 2 of firstclick - item 2 of
seconclick) into mqpz
          break
        case item 1 of firstclick = item 1 of
seconclick -- moving in rect line
          if  item 2 of firstclick > item 2 of
seconclick then put (- (item 1 of firstclick - item 1
of seconclick)),-(item 2 of firstclick - item 2 of
seconclick) into mqpz
          if  item 2 of firstclick < item 2 of
seconclick then put (- (item 1 of firstclick - item 1
of seconclick)),(item 2 of firstclick - item 2 of
seconclick) into mqpz
          if  item 2 of firstclick = item 2 of
seconclick then put (- (item 1 of firstclick - item 1
of seconclick)),(item 2 of firstclick - item 2 of
seconclick) into mqpz
          break
        end switch

        # --  mqpz contains a coordinate point -- ej:
-45,-21 or 84,-56 or 22,47 or -61,31

      end if

    end if

  end if

  pass mousemove
end mousemove

Function Nearpoints pointxy -- is a coordinate point
like 34,56

  put item 1 of pointxy - 2 & comma & item 2 of
pointxy - 2 & return after oknhy
  put item 1 of pointxy - 2,item 2 of pointxy - 1 &
return after oknhy
  put item 1 of pointxy - 2,item 2 of pointxy & return
after oknhy
  put item 1 of pointxy - 2,item 2 of pointxy + 1 &
return after oknhy
  put item 1 of pointxy - 2,item 2 of pointxy + 2 &
return after oknhy

  put item 1 of pointxy - 1,item 2 of pointxy - 2 &
return after oknhy
  put item 1 of pointxy - 1,item 2 of pointxy - 1 &
return after oknhy
  put item 1 of pointxy - 1,item 2 of pointxy & return
after oknhy
  put item 1 of pointxy - 1,item 2 of pointxy + 1 &
return after oknhy
  put item 1 of pointxy - 1,item 2 of pointxy + 2 &
return after oknhy

  put item 1 of pointxy,item 2 of pointxy - 2 & return
after oknhy
  put item 1 of pointxy,item 2 of pointxy - 1 & return
after oknhy
  put item 1 of pointxy,item 2 of pointxy & return
after oknhy
  put item 1 of pointxy,item 2 of pointxy + 1 & return
after oknhy
  put item 1 of pointxy,item 2 of pointxy + 2 & return
after oknhy

  put item 1 of pointxy + 1,item 2 of pointxy - 2 &
return after oknhy
  put item 1 of pointxy + 1,item 2 of pointxy - 1 &
return after oknhy
  put item 1 of pointxy + 1,item 2 of pointxy & return
after oknhy
  put item 1 of pointxy + 1,item 2 of pointxy + 1 &
return after oknhy
  put item 1 of pointxy + 1,item 2 of pointxy + 2 &
return after oknhy

  put item 1 of pointxy + 2,item 2 of pointxy - 2 &
return after oknhy
  put item 1 of pointxy + 2,item 2 of pointxy - 1 &
return after oknhy
  put item 1 of pointxy + 2,item 2 of pointxy & return
after oknhy
  put item 1 of pointxy + 2,item 2 of pointxy + 1 &
return after oknhy
  put item 1 of pointxy + 2,item 2 of pointxy + 2
after oknhy

  return oknhy
end Nearpoints



=====
Visit my site:
http://www.geocities.com/capellan2000/


_______________________________ Do you Yahoo!? Declare Yourself - Register online to vote today! http://vote.yahoo.com _______________________________________________ use-revolution mailing list [EMAIL PROTECTED] http://lists.runrev.com/mailman/listinfo/use-revolution


-----------------------------------------------------------
Frank D. Engel, Jr.  <[EMAIL PROTECTED]>

$ ln -s /usr/share/kjvbible /usr/manual
$ true | cat /usr/manual | grep "John 3:16"
John 3:16 For God so loved the world, that he gave his only begotten Son, that whosoever believeth in him should not perish, but have everlasting life.
$




___________________________________________________________
$0 Web Hosting with up to 120MB web space, 1000 MB Transfer
10 Personalized POP and Web E-mail Accounts, and much more.
Signup at www.doteasy.com

_______________________________________________
use-revolution mailing list
[EMAIL PROTECTED]
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to