Reshape Graphic
Frank D. Engel, Jr.
fde101 at fjrhome.net
Wed Oct 27 14:46:08 EDT 2004
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
> use-revolution at lists.runrev.com
> http://lists.runrev.com/mailman/listinfo/use-revolution
>
>
-----------------------------------------------------------
Frank D. Engel, Jr. <fde101 at fjrhome.net>
$ 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
More information about the use-livecode
mailing list