Thoughts (and Bugs) on Copy/Paste History After Two Months

I’ve been using the new feature added in V7 SR8 to copy and paste objects with their history. Overall I love it. I’m building a library of templates that saves me hours per day on just about every project.


174 objs controlled by three crvs (red shank) + two crvs (cyan bezel in 3 sizes) + two crvs (orange bezel in 2 sizes)


240 objs controlled by eleven crvs (6 red shanks) + two crvs (orange bezel in 11 sizes)
Right: The final model after breaking history and control point editing the shanks for an organic look.


However, there are some bugs with copy/paste history:

Second, there are some usability issues that slow things down.

  • RH-66103 - With complex templates, it becomes difficult to copy/paste everything you need.
  • [Needs YT] - As you push the number of objects in a file, updating history slows to a crawl.

BUG: Sweep1/2 Copy Paste History

CopyPasteSweep1.3dm (295.1 KB)

  1. Open the example file and copy everything.

  2. Paste it and gumball drag to the right.

  3. The pasted sweep uses the pasted profile crv, but incorrectly uses the original’s rail crv.

BUG: _BlendSrf Copy Paste History

CopyPasteBlendSrf.3dm (254.0 KB)

  1. Open the example file and copy everything except the grey _FlowSrf base and target.

  2. Paste it and gumball drag to the right.

  3. Select the pasted srfs that are missing the dark red blend srfs.

  4. Call _SelChildren and see that the pasted _BlendSrf’s are incorrectly using the original copy’s edges.

BUG: _Pipe Copy Paste History

CopyPastePipe.3dm (236.0 KB)

  1. Open the example file and copy everything.

  2. Paste it and gumball drag to the right.

  3. Select the pasted control crv and call _SelChildren. The pasted pipe is following the original crv.

Hi Eric - I see that, thanks. SelParents gets the right objects, so I imagine this is fixable…
RH-65891 Sweep1: CopyPaste & History error

-Pascal

1 Like

Usability Issue Selecting the Proper Components To Include In Copy/Paste

Here I have two crvs that control a bezel. The first crv sets its size (and height off of the cylinder). The second controls the profile shape.

In between those two control crvs is a lot of…creative uses of history.

Each bezel has 13 objs (11 curves, 1 srf, and 1 polysrf) that never needs to be seen or edited.


How do you select the correct objs for copy/paste?

_SelParents seems like it should cover the problem, but it doesn’t. You have to organize and hide those 13 ‘in between objs’, and _SelParents only works on selectable geometry.

My first preference would be to use groups, but there’s an inconsistency issue I previously posted about. Currently, locked objs in a group are included in copy/paste, but hidden (via layer or _Hide) are excluded.

If copy/paste were to include both categories of non-selectable objs, then this issue is resolved.

I have one other idea, but it’s second-tier at best: _ShowAll AllAll?=Yes.

That’s a combination of turn all layers on + set all layers to unlocked + _Show + _Unlock, which is surprisingly difficult to do manually.

  1. shift select all layers in the layers panel
  2. right click → expand all sublayers
  3. re-select all layers in the layers panel
  4. click the show icon
  5. Run _Show
  6. Run _Unlock
  7. select the children to copy
  8. iterativelty call _SelParents
  9. Copy
  10. undo all the layer and state changes in steps 1 through 9
  11. Paste

There’s a lot of that functionality that’s only available in the layers panel…like there is no inverse of _OneLayerOn, i.e. _AllLayersOn. I can’t see a way of doing this in a simple macro. I can attest that it is painful to do manually.

Usability Issue When Updating Children

The last issue is that history updates feel exponentially longer: O(n^2) instead of O(n) complexity. I regularly have hundreds of child objs with clusters of 10 or 20 sharing a single parent. The only difference now is multiple clusters share a common parent.

One thing I’ve noticed is that history does not appear to update chronologically:

SimpleHistoryUpdate.3dm (195.5 KB)

  1. Open the sample file and point edit the red curve.
  2. The three cyan, offset child curves update, which updates the purple Loft.
  3. History reports updating 6 objs, not 4.

This can be quite random. I’ve started to pay attention and see it reporting up to 3x the number of objs it should be updating.

After _HistoryUpdate All (RH-65232) was fixed, I am able to work with _History Update=No, but it’s not much better. It updates everything in the file, whether it needs it or not. _HistoryUpdate <selection> is kind of useless because it suffers from the same issue that RH-65232 fixed for All. A lot of the intermediate objs between the obj you select and the parent you edited aren’t selectable (locked/hidden).


Ideas

  • History updates get processed chronologically so great-grandchildren are only updated once.
  • Add a dirty flag to history records so _HistoryUpdate All doesn’t process objs that are up to date.
  • _HistoryUpdate <selection> updates all of its parents/grandparents, regardless of whether they are locked/hidden
  • Set redraw/echo off during updates (noticeable improvement with some commands like _Pull).

@EricM - thanks, this seems to be reproducible without the Flow part - BlendSrf with history, Copy/Paste all three bits and move either pasted parent - the blend does not come along even though it claims to update.

RH-66102 History incorrect on paste

-Pascal

RH-66103 CopyToClipboard and groups

-Pascal

RH-66102 is fixed in Rhino 7 Service Release 13 Release Candidate

RH-66102 is not quite there.

BlendSrfHistoryBug.3dm (753.8 KB)

  1. Copy the bezel on the left.
  2. Paste and move it to the stone on the right. BlendSrf updates correctly.
  3. Resize the Seats::Control crv to the new stone size.
  4. The blend updates incorrectly.
  5. Sometimes it does not update correctly against one edge, other times both.

Turns out not to be copy/paste related, but it is annoying - RH-66364.