A group of entities/objects were created on Default Layer, making them a block, then inserted on different layer. When printed with different line print width under Layers panel other than default print width on Default Layer, the block’s line print width is inheriting the Default Layer, not following where the layer it’s being placed to.
Block 1 was created in a layer, let’s say bathrooms, blocked and inserted in bathrooms layer with the layer carries print line width of 0.5. The blocks 2, 3, adn 4 are being placed at 2 different layers (bathrooms and doors) carrying print line width of the same 0.5. The difference between the block 1 and the rest is, block 2, 3 and 4 were created in Default Layer.
Is the entities created in Default Layer should follow the properties of particular layer when being inserted in it? Or it is just the way we should use the block and insert command in that particular layer in order to follow its print line width when printed?
Items in blocks belong to the layer they were created on. The “block” that you might put on another layer is literally just that invisible container we call the block.
If you set the line style or other property to “by parent,” then that should make it follow the layer that the block is put on.
Had tried many things in relation with changing Print Width under Layers panel as well as Properties Panel. Nothing changed the linetype width when printed.
However, found a discussion 5 years back at this page. Seems this is a big challenge to be applied in Rhino, as part of Layers “common” feature like in other software. Or it’s not being considered as important.
Anyway, knowing that it could be done through a “workaround” or just following strict steps (just make sure that particular blocks should be created in the corresponding layer) should be “fine” now.
Always good to share a sample file if you can but it sounds like you may need to edit the object properties of the linework in the block.
Do this by double clicking on the block to enter the block editor. Then check the object properties for the block linework.
If object properties of the block linework are set to ‘by layer’ then changing the layer lineweight should change the lineweight of the block linework. But if the object properties for the block linework are set to a specific lineweight, changing the layer lineweight will not change the lineweight of the block linework.
In the block editor you can also move the components of the block onto another layer if you wish. In the block editor, select the objects in the block and change layer they’re on. I often like to have block definitions and block instances on the same layer.
I’m attaching the simplest example of 2 rectangles that are different in blocks and layers. Each layer carries different print width settings through Layers panel. All blocks were created in Default layer then inserted in the corresponding layer. No matter what settings of print width selected after selecting a block, it doesn’t seem to give any effect on printing (Rhino PDF and others). Both will be generated and having same print width. May be I missed something.
@hughecchapman :
Really appreciate the kind suggestion. I found the identical “workaround” earlier. It could be convenient with small amount of different blocks. But when the drawing contains bunch tons of different blocks, then it would be a headache to do it manually if not using a script. I found that many architects and drafters in my country are avoiding scripting and they tend to do everything manually. Pretty tough in educating them as they mostly are relying to drawing lines and leave total drawing management behind, with only few drafting management. Many don’t even know SetDimensionLayer command exists.
Hi it took a bit to get it work since I don’t normally bother much with this stuff but with the print with of the blocked objects–of the source geometry inside the block–set to “By Parent,” and the print width setting of the blocks set to “By layer,” then the block instance geometries get their line width from the block layer.
Thanks Jim this just gives me an idea, if possible. Need to look for a chance for Default layer to have “by parent” default settings, so any blocks created inside Default layer will follow any settings of the layer its being inserted in.
If it’s possible to have it this way, it would be a great initial drawing preparation.
@JimCarruthers : So there are two workarounds to make this happening. I successfully followed your steps and it worked. Always good to have alternatives to something
The next requirement now is, when we rely on layers on line width and line type, is there a way to set line print width to “by parent” as default settings on any new created lines? If there is, will it influence others when we do it this way?
I don’t think so, short of making some script to automatically do this to ‘blocked’ geometry. There may be some way to…reconfigure your workflow to get what you want, but I’m not a block or printing properties expert.
It’s not by default or automatic, but if I’m making blocks that I know I’m going to want to have the ByParent property, I wrote a quick script and assigned it to a button. The last thing before I save/export the block is done with my “Parentify” button. It’s mildly janky, but here’s what’s in the button command:
! _-RunPythonScript (
import rhinoscriptsyntax as rs
objs = rs.GetObjects("Select Objects to Parentify")
if objs:
for obj in objs:
rs.ObjectColorSource(obj, 3)
rs.ObjectLinetypeSource(obj,3)
rs.ObjectPrintColorSource(obj,3)
rs.ObjectPrintWidthSource(obj,3)
)
You should use this to your advantage. Instead of wanting to change the behavior to ‘by parent’ you could just leave it at ‘by layer’ and change the linetype of the layer the curves/lines are in.
As a side note, a lot of optimization is possible using Grasshopper which in my opinion is easier and more accessible to the common individual than coding.
We’re actually discussing things in relation with functioning Default layer for additional purpose, in relation with defining the print line width. I was former Autocad user decades ago and in my experience, Default layer carries some hidden functions which gives benefits over some other functions when being used properly.
After some discussions with Jim, Hugh and Scott, I see some potential use of Default layer other than just sitting there doing nothing. Most people don’t care about Default layer but with some functionalities showed by them, it really enlightened me to experiment further. And they showed me that, I still have a lot to learn. The more I learn, the empty I feel inside my head lol