Working on blocks with external geometry

G’day All,

Which commands can work on block geometry without opening the block for editing (double clicking or blockedit command). For example I just tested dupborder successfully on a blocked surface, but trim does not work.

Also, which commands can work on block geometry while editing the block but using external geometry. For example, trimming a surface within a block with a curve that is not in the block does not work.

I want to devise a workflow where I can work on a block in-place or a copy elsewhere, but not have to open and close the block continuously to perform the edits and add and remove geometry every time. Trimming a surface within a block against geometry that is not in the block is a big part of this desired workflow.

cheers,
Nick

Hi Nick - you can use Add Object (button on the dialog thingy) ) while block-editing, use the object(s) to trim or whatever, delete then and then exit the block edit - is that what you mean?

-Pascal

Thanks for the reply Pascal, I’m aware of that feature, but trying to avoid it for modifying geometry within the block if possible.

Is there a list of commands that works on geometry within the block, without blockedit?

  • DupBorder
  • DupEdge
  • ExtractIsoCurve
  • Any more?

Clearly these commands can identify the surface object that I’m picking within the block. Why couldn’t the trim command, and others, not also function this way? Maybe I’m missing a fundamental problem with this idea.

Is there a list of commands that works with geometry that is outside the block during blockedit?

  • Trim does not

I should add that I wish to do a lot of trimming of many blocks and many times with each block, so the opening, adding, modifying/trimming, deleting and closing method can become tedious.

Blocks.3dm (39.7 KB)

cheers,
Nick

Hi Nick -

No, there aren’t such lists.

I’m not having much luck imagining your workflow but if you need to do a lot of editing on blocks that have several instances in the document, you might want to look into a workflow where you take an instance of the block, explode it, do all the editing, make it into a new block and use ReplaceBlock to update the other instances.
-wim

Hi Nick - if you want to trim with an object in a block, that ought to work, at least on objects in the top level block. Trimming block objects of course cannot work… unless, did you expect the trimmed object to be extracted from the block?

-Pascal

Thank you @wim ,

The problem is blocks are not really the best approach, but may be the only option, hence why I haven’t used them in the past. There will be only one instance of each block in the production model, not numerous instances. There will be a second instance off to the side laid out so that repetitive operations can be done on the block without having to delve into the 3D model. Adding text, markings, trimming details, etc. Once these operations are done the duplicate block will be deleted or put onto a non-production layer. This will be done for numerous unique blocks.

Groups don’t really work either because there’s no link between the duplicates.

The ReplaceBlock method may work, I will try it out.

I still believe that if dupborder, dupedge and extractisocurve can operate on a surface within a block, without opening the block, then other commands should be able to operate on the same surface in a similar fashion, without causing too much developer or user pain.

cheers,
Nick

This sounds like a good case for History.
Edit the ‘Parent’ and the History enabled ‘Child’ (copy) updates too.

The use of Blocks and Instances only makes sense when you need lots of perfect copies (instances), all defined by one master Block.

G’day @pascal , there’s no necessity to have nested blocks.

I’m not sure why trimming of block objects cannot work. I realise it is probably not ideal for a lot of peoples workflows where editing of blocks needs to be somewhat locked.

The trimmed surface should remain in the block. Essentially skipping the editblock, add curve, trim, delete curve, close block routine.

Is there another way I can have an instance of an object somewhere else in the model, that behaves similarly to blocks in that the parts are identical, updating each other and a collection of objects (surface, text, curves)? But without the overriding design objective of blocks being used for numerous identical instances of each block and having a level of locking that is necessary for such objective.

cheers,
Nick

While I agree that blocks have traditionally only made sense when lots of perfect, somewhat locked copies are required, I think there’s scope to have blocks, or something similar, be able to be used a bit more flexibly.

I’ll be a bit more explicit with my desire. When designing boats I want to have copies of the frames, girders, etc, laid out in 2D to the side of a 3D model that are easily editable without the blockedit routine. There’s a lot of things that can be done much quicker in 2D than in the 3D model. Text and markings need to be part of the object, hence the desire to have a block or group of objects.

If I could trim a surface within a block without the blockedit routine, that would be a major step forward. Perhaps I can script the routine…

cheers,
Nick.

But the point is an ‘instance’ is just a copy of the geometry in the block definition, with translation and rotation applied.

The instance has no geometry in it and therefore nothing that can be edited.

Exploding the instance replaces it with a copy of the geometry with the translation applied. At that point you have editable geometry that is no longer a block instance.

Hi Nick - If you did this, would you expect all instances of the block to be updated accordingly? If so, then that is what BlockEdit is designed to allow - there is no object there in the usual sense until you enter block edit mode or Explode the block…

-Pascal

There appears to be something going on in the background that enables me to run extractisocurve from outside a block, pick a surface within the block, then extract the desired curve, without blockedit.

While I understand that Trim is a more complex operation, from scripting experience I know the guid changes during a trim, is there a technical reason why it can’t behave as desired? If enabling other commands to operate similarly on blocks will break the desired user experience for blocks, then I am not advocating for that.

Yes, the instances are linked, as per blocks, hence why I asked about blocks. History is the only other option for creating a link, but that does not allow me to group objects together (text, surface, curves).

My desire is to avoid heavy use of the blockedit routine outlined previously.

I’ll mockup an example and send something through.

cheers for the discussion, if there’s any other thoughts I’ll be happy to hear them.
Nick

Yes. Subobject picking is supported in the block instance.
We follow the object back to the source, duplicate it, and apply the block instance transform.

Mockup sent to tech@mcneel.com.

It is only quick and dirty, but I hope it shows the desired use case.

Hi Nick - the use case is, as far as I can see, like any other where you want to modify a block. I sent you back a possible alternative.

-Pascal