Transition arrays


#1

The function to use an object to create an array is fantastic: I use “/ nn” and “x nn” all the time, however it can take multiple moves and rotations to get an object from the first position to the last position:

I would like the program to remember all the movement transitions of the duplicate object until I change the selection. If I move, rotate, move, rotate on another plane, then use “/” or “x” it would apply the same relative transitions to each duplicate. (ie compare the starting object’s origin/rotation with that of the final object and apply the same movement (or division of movement) to each copy)

(…And any scaling transitions)

As a nice gimmick (I can’t think on a practical application) it would be cool to be able to change the transparency and hue of the duplicate object, then have all the transitional clones stepped with the same variation.


#2

I don’t understand your suggestion, do you have an image of this?


#3

Existing commands [x] and [/]


Proposed commands [x] and [/]

almost with the “macro” idea: I initially thought that while the selection remains unchanged, record every movement and translation of the object so that it could be re-played… but that seemed like a lot of work that could contain many, many steps.
I think it would work better simply by comparing the position and orientation of the original object when [ctrl] was pressed with it’s new location when the [x] or [/] command is used.


#4

I think what is being implied is the need for a recorder or scripting control like macros in MS office to repeat multiple actions on different selections


#5

you can do that kind of stuff with Dynamic Components:



#6

That’s a good solution that offers a lot more flexibility and you can do a lot with it… but it’s not as “quick and easy” as simply dragging, positioning and type in [x3] (does the component option allow the [/3] option?).

{Am I correct in thinking that I need to stop being a skinflint and buy the full version rather than the free “Make” version to create dynamic components?}


#7

nah… it’s fast once you figure it out… just a little bit of typing plus you can change the distances/angle/copies real easily.

right- suPro only to create them.

to do it as a macro, (if there were a macro editor in sketchup), there’d still be a learning curve and i imagine the command would end up being more typing than via dynamic component…

if you’re thinking of a ‘Watch Me Do’ type of recorder… in my experience, those things sound sweet but always suck and are abandoned quickly in favor of other automation methods :wink:


[edit]
@gadget2020 …are you familiar with any spreadsheet applications? (ms Excel etc.)


#8

The advantage of using the [x or /] is that I don’t actually know the size or distance I want to move an object - I simply use snaps and guidelines. Using the component I would have to work out the numbers first (which for me takes longer than just moving each copy individually)

As I said, the “watch me do” recorder was an inspiration, but I think there is a better way to get the same end result.

You could say I am more than a little familiar with excel and vb. (I never use recorded macros tho: always program them myself)


#9

[quote=“gadget2020, post:8, topic:9794, full:true”]
The advantage of using the [x or /] is that I don’t actually know the size or distance I want to move an object - I simply use snaps and guidelines. Using the component I would have to work out the numbers first (which for me takes longer than just moving each copy individually)[/quote]

you can use all the operators with dynamic components… besides only x & /

i understand that making a simple linear or polar array is easier/faster with the copyMove tool and using x or / is very handy… but if you want to do multiple things then i don’t know how you’re imagining it happening with those simple controls…
like, say i want to move right 24" and move up 12" and rotate 10º… and i want to do it for 10 copies.

how are you imagining the user interface to be with that? to me, it seems way easier to control each move explicitly as you’d do with a DC but maybe you’re seeing something i’m not and know of a way it could be done with the simpler move and rotate tools?

(if you have a good enough idea on how it could happen, i’m pretty sure you could interest a ruby writer into scripting the tool)

dynamic components are a spreadsheet and you’ll be familiar with the necessary syntax… if you can program excel, you can program DCs.


#10

how are you imagining the user interface to be with that? to me, it seems way easier to control each move explicitly as you’d do with a DC but maybe you’re seeing something i’m not and know of a way it could be done with the simpler move and rotate tools?

Just the same way that it works just now - no change to the input method or commands or anything else;

  • Select something {“selection”}
  • hit [ctrl]
  • position or transform the duplicate of the selection
  • type in [x nn] and hit return.
    As soon as the selection changes, then the original object’s location would be re-set and [x] has nothing to work with.

I sometimes often have to create a temporary line/object so that there is a reference point that my clone can snap to in one [ctrl] copy action so that [x nn] or [/ nn] put things where I want them. This would save me a lot of time and ease the workflow.


#11

i guess i’m still not seeing it…

what you described seems like the same thing we do currently with the move tool… copy/move then [x nn] for the amount of copies…

but the example earlier in the thread shows more than one transformation… it moves and it rotates… how do you propose the 2nd 3rd etc happens?


#12

Perhaps explained from another direction:
What does [x nn] do? it creates clones of a selection, distributed between the original location and the final location.
To do this it must know what the starting point was and what the end point is.
I can only think on 1 way for this to happen: It records where the original selection is when you tap [ctrl] Lets say it stores it in a box called [start]. When you type [x nn] it uses [start] to compare with [end] and distributes clones of the selection accordingly.

Currently [start] is emptied any time that another tool is selected or the selection is changed.

All I want is for the the first bit not to empty the box. Only empty the box and forget [start] when the selection changes.

… and perhaps a little bit more - [start] currently records the x,y,z coordinates of the start click and the end click. I would like it to also record the bounding box of the selection (if you use the ‘scale’ tool, that’s the bounding box). It could then compare the bounding box of the [start] and the [end] to transform each clone in multiples from the [x nn] command (or divisions from the [/nn] command)
(In order to record the rotation, I imagine that you would have to make the current selection into a temporary “group” that is exploded again when [start] is cleared. I can’t think on any other way to record a change of the origin’s axis)


#13

haha… i’m still not seeing it… i’m simply asking how do you make it do multiple transformations which is what your original image shows… what are the steps to create your image? not in some sort of theory explanation -> what are the exact instructions?
ie- linear array:
• draw a box & select it
• choose the move tool
• click on the copy from point
• tap the option key (mac)
• click on the copy to point
• type 5x
• press enter

now what? say i now want each copy to successively rotate 10º… what are the steps?


i still think you’re (way) better off using dynamic components for this…

from the first image i posted.
‘Copies’ is the same thing as ‘n’

so this says:
• n = 5
• copy#1 moves along the X axis 75"… the next copy moves 150"… the next 225" etc.
• copy#1 moves along the Z axis 40"… the next copy moves 80" …then 120" etc.
• copy#1 rotates on the Y axis 15º… then next copy rotates 30º …then 45º etc.


#14

You can achieve similar results with the Patterns module in the Spirix plugin:

This is done in a similar way to DC by grouping and naming the geometry and then providing the following parameters:

The plugin can be downloaded from https://sites.google.com/site/spirixcode/code/spirix.rb

Like many plugins, it prefers to work in inches.


#15

now what? say i now want each copy to successively rotate 10º… what are the steps?

You’re typing [x5] too soon:

  • make selection
  • click [move]
  • hit [ctrl]
  • click on start point (or reverse these two actions - it works both ways)
  • click to move duplicate somewhere
  • click rotate (note it's still selected)
  • rotate the duplicate
  • click move (note it's still selected)
  • move the duplicate to final resting place
  • type [x5]
  • realise that it's in the wrong place; type [x1] to make it the current selection again (< this is a new bit I just though on: even though you can't see the selection, it must still remember what it is because you can type in [x3] and it changes the number of clones from 5 to 3)
  • move it again
  • type [x5]

    In a component you need to know the rotation angle and distance before you start - I normally snap to existing geometry and rotate along existing lines. A component is useful and a good tool for accuracy, specific placement, and allowing you to do cool things like make the array follow a path. But for me it doesn’t seem as smooth and intuitive a workflow.

    [light bulb]
    We have a “follow me” tool that spreads a shape along a path… Could we also have an “array” tool that works the same way? a selection is cloned and distributed along an edge (/multiple edges).
    (I’m sure that there must already be a component that does this)


  • #16

    got it… so there’s basically a master component… you enter this proposed tool mode… do all the different things you want to do to the component… then enter a multiplication (or division) factor and it does each thing n amount of times ?

    sounds cool… i highly (highly!) doubt the sketchup developers will ever add this to vanilla sketchup… you need to make ruby/plugin requests instead of sketchup.app feature requests :wink:
    making such a tool does seem possible with ruby.

    not necessarily true… open this model and use the Scale tool on it:

    DC_StadiumChair_V7.skp (66.8 KB)

    you can snap to any arbitrary line/distance and it will divide up accordingly… the spacing in between the chairs & the number of chairs will change while the chair itself maintains consistent dimensions.


    #17

    I know what components can do and that it’s possible to set things like that up, but I’m lazy: it would take the same amount of clicks/key-strokes to do that as it would to set a temp [to] object and then manipulate each clone individually.

    The coding for the basic version (allowing multiple moves before [x]) seems minimal with no impact on any other tools or functions: I would think that simple things, easily implemented with no repercussions would be a programmers ideal enhancement. (But I’m not a SU programmer and I’m sure there is a procedure of analysis and approvals before any idea is even considered for development.)


    #18

    Try Chris’ Component Stringer.


    #19

    Again, it’s limited in having to prepare before using it - you have to create the path and divide the selected lines before using the plugin.
    the [x] and [/] are really intuitive and work well just now, but if I do stupid things (like click on the wrong place with the duplicate) I have to undo it, re-select and move it again. Multiple moves would mean I could get roughly the right place, then zoom in and get it spot on.


    #20

    what, exactly, are you trying to model? do you have a real world example for using this type of function or is it more just daydreaming ? :smile: