[squeak-dev] The Inbox: Morphic-kfr.1620.mcz

karl ramberg karlramberg at gmail.com
Tue Feb 4 18:55:12 UTC 2020


Hi,
Thanks for checking.
The method had gone into the wrong category so it was in wrong package
(Etoys). :-(
I'll move the method to the right category and reupload

Best,
Karl

On Tue, Feb 4, 2020 at 6:34 PM Thiede, Christoph <
Christoph.Thiede at student.hpi.uni-potsdam.de> wrote:

> Nice idea :-)
>
>
> But when I merge this commit, it misses #snapToOtherPolygonPhrase:
>
>
>
>
> Btw, #snapToOtherPolyongs itself is also absent in my image. Are you
> depending on another inbox commit?
>
>
> Best,
>
> Christoph
>
>
> ------------------------------
> *Von:* Squeak-dev <squeak-dev-bounces at lists.squeakfoundation.org> im
> Auftrag von commits at source.squeak.org <commits at source.squeak.org>
> *Gesendet:* Dienstag, 4. Februar 2020 17:56:00
> *An:* squeak-dev at lists.squeakfoundation.org
> *Betreff:* [squeak-dev] The Inbox: Morphic-kfr.1620.mcz
>
> A new version of Morphic was added to project The Inbox:
> http://source.squeak.org/inbox/Morphic-kfr.1620.mcz
>
> ==================== Summary ====================
>
> Name: Morphic-kfr.1620
> Author: kfr
> Time: 4 February 2020, 5:55:31.268512 pm
> UUID: 741c35fd-d7ac-e54b-9199-ed1dda9e4df9
> Ancestors: Morphic-kfr.1619
>
> Enhancement for PolygonMorph. When a vertex is dropped it will snap if it
> is close to another PolygonMorphs vertex. It is possible to toggle
> functionality on/ off in menu
>
> =============== Diff against Morphic-kfr.1619 ===============
>
> Item was changed:
>   BorderedMorph subclass: #PolygonMorph
> +        instanceVariableNames: 'vertices closed filledForm arrows
> arrowForms smoothCurve curveState borderDashSpec handles borderForm
> snapToOtherPolygons'
> -        instanceVariableNames: 'vertices closed filledForm arrows
> arrowForms smoothCurve curveState borderDashSpec handles borderForm'
>          classVariableNames: ''
>          poolDictionaries: ''
>          category: 'Morphic-Basic'!
>
>   !PolygonMorph commentStamp: 'md 2/24/2006 20:34' prior: 0!
>   This class implements a morph which can behave as four different objects
> depending on the the following two facts:
>   - is it OPEN or CLOSED?
>   - is it SEGMENTED or SMOOTHED.
>
>   1. The OPEN and SEGMENTED variant looks like polyline.
>
>   2. The OPEN and SMOOTHED variant looks like spline (kind of curve)
>
>   3. The CLOSED and SEGMENTED variant looks like polygon. This is actually
> what you get when you do
>          PolygonMorph new openInWorld
>   You get a triangle. See below how to manipulate these objects...
>
>   4. The CLOSED and SMOOTHED variant looks like blob (???)
>
>   Prototypes of this morph can also be found in "Object Catalog". Several
> (different variants) of this object are among "Basic" morphs.
>
>   Explore the assiciated morph-menu. It enables you
>   - to toggle showing of "handles". They make it possible to
>          - reposition already existing vertices (by moving yellow handles)
>          - create new vertices (by moving green handles)
>          - delete already existing vertices (by dragging and dropping one
> yellow handle closely
>            nearby the adjacent yellow handle
>     Handles can be made visible/hidden by shift+leftclicking the morph.
> This way it is possible
>     to quickly show handles, adjust vertices and then again hide handles.
>   - making closed polygon open, i.e. converting it to a curve (and vice
> versa)
>   - toggle smoothed/segmented line/outline
>   - set up custom dashing (for line, curves or borders of closed polygons
>   - set up custom arrow-heads (for lines resp. curves)
>
>
> ------------------------------------------------------------------------------------------
>   Implementation notes:
>
>   This class combines the old Polygon and Curve classes.
>
>   The 1-bit fillForm to make display and containment tests reasonably
> fast.  However, this functionality is in the process of being supplanted by
> balloon capabilities, which should eventually provide anti-aliasing as well.
>
>   wiz 7/18/2004 21:26
>   s have made some changes to this class to
>
>   1) correct some bugs associated with one vertex polygons.
>
>   2) prepare for some enhancements with new curves.
>
>   3) add shaping items to menu.!
>
> Item was changed:
>   ----- Method: PolygonMorph>>addCustomMenuItems:hand: (in category
> 'menu') -----
>   addCustomMenuItems: aMenu hand: aHandMorph
>          "Add morph-specific items to the given menu which was invoked by
> the given hand.  This method provides is invoked both from the halo-menu
> and from the control-menu regimes."
>
>          super addCustomMenuItems: aMenu hand: aHandMorph.
>          aMenu addUpdating: #handlesShowingPhrase target: self action:
> #showOrHideHandles.
>          vertices size > 2 ifTrue:
>                  [aMenu addUpdating: #openOrClosePhrase target: self
> action: #makeOpenOrClosed].
>
>          aMenu addUpdating: #smoothPhrase target: self action:
> #toggleSmoothing.
> +        aMenu addUpdating: #snapToOtherPolygonPhrase target: self action:
> #toggleSnapToOtherPolygons.
>          aMenu addLine.
>          aMenu add: 'specify dashed line' translated action:
> #specifyDashedLine.
>
>          self isOpen ifTrue:
>                  [aMenu addLine.
>                  aMenu addWithLabel: '---' enablement: [self isOpen and:
> [arrows ~~ #none]] action:  #makeNoArrows.
>                  aMenu addWithLabel: '-->' enablement: [self isOpen and:
> [arrows ~~ #forward]] action:  #makeForwardArrow.
>                  aMenu addWithLabel: '<--' enablement: [self isOpen and:
> [arrows ~~ #back]] action:  #makeBackArrow.
>                  aMenu addWithLabel: '<->' enablement: [self isOpen and:
> [arrows ~~ #both]] action:  #makeBothArrows.
>                  aMenu add: 'customize arrows' translated action:
> #customizeArrows:.
>                  (self hasProperty: #arrowSpec)
>                          ifTrue: [aMenu add: 'standard arrows' translated
> action: #standardArrows]].!
>
> Item was changed:
>   ----- Method: PolygonMorph>>dropVertex:event:fromHandle: (in category
> 'editing') -----
> + dropVertex: ix event: evt fromHandle: handle
> +        "Leave vertex in new position. If dropped ontop another vertex
> delete
> +        this one.
> - dropVertex: ix event: evt fromHandle: handle
> -        "Leave vertex in new position. If dropped ontop another vertex
> delete this one.
>          Check for too few vertices before deleting. The alternative
> +        is not pretty -wiz"
> +        | p world |
> -                                is not pretty -wiz"
> -        | p |
>          p := vertices at: ix.
> +
> +        "snap the dropped vertex to a vertex of another PolygonMorph if
> it is in near proximity"
> +        self isSnappingToOtherPolygons
> +                ifTrue: [world := Project current world.
> +                        world submorphs
> +                                do: [:each | ((each respondsTo: #vertices)
> +                                                        and: [each ~=
> self])
> +                                                ifTrue: [each vertices
> +                                                                do:
> [:otherMorphsVertex | (otherMorphsVertex dist: p)
> +
> < 3
> +
> ifTrue: [vertices at: ix put: otherMorphsVertex]]]]].
>          (vertices size >= 2
>                          and: ["check for too few vertices before
> deleting. The alternative
>                                  is not pretty -wiz"
>                                  ((vertices atWrap: ix - 1)
>                                                  dist: p)
>                                                  < 3
>                                          or: [((vertices atWrap: ix + 1)
>                                                          dist: p)
>                                                          < 3]])
>                  ifTrue: ["Drag a vertex onto its neighbor means delete"
> +                        self deleteVertexAt: ix].
> -                                self deleteVertexAt: ix .].
>          evt shiftPressed
>                  ifTrue: [self removeHandles]
>                  ifFalse: [self addHandles
>                          "remove then add to recreate"]!
>
> Item was changed:
>   ----- Method: PolygonMorph>>initialize (in category 'initialization')
> -----
>   initialize
>   "initialize the state of the receiver"
>          super initialize.
>   ""
>          vertices := Array
>                                  with: 5 @ 0
>                                  with: 20 @ 10
>                                  with: 0 @ 20.
>          closed := true.
>          smoothCurve := false.
>          arrows := #none.
> +        snapToOtherPolygons := false.
>          self computeBounds!
>
> Item was added:
> + ----- Method: PolygonMorph>>isSnappingToOtherPolygons (in category
> 'access') -----
> + isSnappingToOtherPolygons
> +   ^snapToOtherPolygons ifNil:[ snapToOtherPolygons := false].
> +  !
>
> Item was added:
> + ----- Method: PolygonMorph>>toggleSnapToOtherPolygons (in category
> 'menu') -----
> + toggleSnapToOtherPolygons
> +      ^snapToOtherPolygons := snapToOtherPolygons not!
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20200204/7f5fac0e/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pastedImage.png
Type: image/png
Size: 107564 bytes
Desc: not available
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20200204/7f5fac0e/attachment-0001.png>


More information about the Squeak-dev mailing list