You add an external drawing and suddenly the scale is no longer correct. It is a problem that everyone sometimes encounters. How do you solve that? This article explains the consequences of various unit settings. Do you draw in inches? Or mm? Or unitless? And how are “INSUNITS”, “INSUNITSDEFSOURCE” and “INSUNITSDEFTARGET” set? Do you find it confusing? Me too. Let’s examine it.
It is a somewhat longer article because it is discussed in depth. It is important that you remember the final conclusions, so that you can solve scale problems quickly in the future.
“INSUNITS” or insertion units is a value that is stored in the drawing. In this example we use some values:
Remember that you work in a drawing that itself has an INSUNITS value, while if you insert a block in that drawing, that block may very well have a different INSUNITS value. That is where the problems arise because your CAD program will try to apply a scale factor that does not always seem logical.
INSUNITSDEFSOURCE and INSUNITSDEFTARGET
The value of INSUNITS is stored in the drawing itself. The values of “INSUNITSDEFSOURCE” and “INSUNITSDEFTARGET” are stored in the registry and are therefore the same for every drawing that is opened.
But what do those values do?
INSUNITSDEFTARGET sets the value of the drawing units of the destination if INSUNITS is set to 0.
INSUNITSDEFSOURCE sets the value of the drawing units of the source if INSUNITS is set to 0.
Beautiful! Does that make us wiser? A little. It is time for an experiment. We have blocks (drawings) with different values for INSUNITS, we have values for INSUNITSDEFSOURCE and INSUNITSDEFTARGET and we insert the blocks in a drawing that itself also has a value for INSUNITS. We can put that in a table.
To keep things organized, abbreviations are used:
IUB = INSUNITS of Block
IUS = INSUNITSDEFSOURCE
IUT = INSUNITSDEFTARGET
IUD = INSUNITS of Drawing
Inserting blocks with INSUNITS is 0
We are going to insert blocks that themselves have INSUNITS 0, no units, …
|0||6||4||0||Assumed is m (meters) as source and mm (millimeters) as target. Inserted block is scaled 1*1000.|
|0||0||4||0||Assumed target is mm. No scaling.|
|0||4||0||6||Assumed is mm as source and m as target because IUD 6 overrules IUT. Inserted block is scaled 1/1000|
Conclusions for blocks with INSUNITS is 0
- If you insert a block that itself has INSUNITS = 0 in a drawing with INSUNITS = 0, then the values of INSUNITSDEFSOURCE and INSUNITSDEFTARGET are used for the scale factor.
- If the drawing itself has a different value of INSUNITS, then that value overrules the value from INSUNITSDEFTARGET. The INSUNITSDEFSOURCE value and the INSUNITS value of the drawing are used for the scaling factor.
Inserting blocks with INSUNITS other than 0
We are going to insert blocks that themselves do not have 0 as the value of INSUNITS …
|4||6||6||0||INSUNITS of Block is mm, overruling INSUNITSDEFSOURCE. INSUNITSDEFTARGET (m) is used because INSUNITS of drawing is 0. So the inserted block is scaled 1/1000|
|6||0||1||4||INSUNITS of Block is 6 (m), not 0, so overruling INSUNITSDEFSOURCE. INSUNITSDEFTARGET (inches) is not used because INSUNITS of drawing is not 0 and set to 4(mm). So the inserted block is scaled 1*1000.|
Conclusions for blocks with INSUNITS other than 0
- If you insert a block that itself has a value other than INSUNITS = 0, then INSUNITSDEFSOURCE is ignored. Block setting of INSUNITS is then used for the scale calculation.
- If the drawing itself has a value of INSUNITS other than 0, the value of INSUNITSDEFTARGET is ignored.
How does copy and paste work?
BricsCAD uses this principle to determine the scale factor also when copying and pasting. Also consider commands such as COPYBASE (ctrl-shift-c) and PASTEBLOCK (ctrl-shift-v). To the best of our knowledge: AutoCAD does not support the calculation of the scale factor, you have to do that yourself.
For the automatic calculation of scale factors when inserting blocks and, exclusively with BricsCAD, when pasting blocks (ctrl-shift-v) or objects (ctrl-v), the following rules are used:
- Only if the value for INSBASE of a block to be inserted is 0, then the value of INSUNITSDEFSOURCE is used.
- Only if the value for INSBASE of the current drawing is 0, then the value of INSUNITSDEFTARGET is used.
2 thoughts on “CAD: Insert and units”
Excellent! Thankyou for this analysis, I was trying to work out how it all tied together and was losing a lot of time. Your notes have cleared this up for me.
I am now trying to work out what the effects of answering Yes or No have with respect to option 4 of the -DWGunits command: Scale other objects from other drawings upon insert: Y/N.
I have tried setting it to No but, when I insert a block whose insunits and drawing units I know, it still seems to insert the block scaled.
The only time it doesn’t, I think, is when I set the current drawing’s Insunits to unitless. Does this mean that option 4 of -DWGunits (Scale other objects from other drawings upon insert: Y/N) has no effect what so ever ?
If you have analysed this as well, any light you could throw on the subject would be most welcome.
Unfortunately I can’t replicate -DWGUnits since I am using BricsCAD. Bricsys does have a straightforward approach here, it seems, and that keeps thinks unclouded with all kind of exceptions. But searching the net will get you further.