Dimension Style Overrides

Dimension style overrides can be applied to any of the AcDbEntity types that reference an AcDbDimStyleTableRecord. These are: 

  • AcDbAlignedDimension
  • AcDbRotatedDimension
  • AcDbDiametricDimension
  • AcDbRadialDimension
  • AcDb2LineAngularDimension
  • AcDb3PointAngularDimension
  • AcDbOrdinateDimension
  • AcDbLeader
  • AcDbFcf
 

Dimension overrides applied to an object of any of these classes are stored as xdata under the "ACAD" appId in a special subsection. The subsection starts with a group code 1000 (AcDb::kDxfXdAsciiString) with the string "DSTYLE", followed by all the dimension override data bracketed inside a pair of group code 1002s (AcDb::kDxfXdControlString) (the first being a "{" and the other a "}"). 

 

Dimension variables in general are called dimvars, and this data is commonly called "per-entity dimvar overrides" or just dimvar overrides. 

 

Within the group code 1002 brackets is a chain of dimvar group-code/data-value resbuf pairs, one pair for each dimvar being overridden. 

 

The first resbuf in each pair is the DXF group code for the dimvar, as found in the Table below. Since the group code is an integer it has a restype of AcDb::kDxfXdInteger16 (group code 1070). 

 

The second resbuf in each pair is the value for that dimvar. Data values for dimvars may be strings, integers, reals, or objectIds. As with resbufs in general, the value of the resbuf’s restype indicates how to read the data in the resval. Please refer to the Table below. 

 

As an example, here is a dimension style override list that will override the DIMTAD and DIMGAP variables. The list is shown in AutoLISP format with indenting for clarity. 

 

("ACAD"
    (1000 . "DSTYLE")
    (1002 . "{")
        (1070 . 77) (1070 . 1)
        (1070 . 147) (1000 .  0.2)
    (1002 . "}")
)

In this example the group code 77 is DIMTAD, which is overridden to be 1. Then DIMGAP (group code 147) is set to 0.2. 

 

The following code sample uses acutBuildList() to create this resbuf chain and to set overrides for DIMTAD and DIMGAP on the entity pointed to by pEnt, assuming pEnt points to an AcDbEntity of one of the types listed above and is open for writing: 

 

resbuf* pRb = acutBuildList(
        AcDb::kDxfRegAppName,"ACAD",
        AcDb::kDxfXdAsciiString,"DSTYLE",
        AcDb::kDxfXdControlString, "{",
        AcDb::kDxfXdInteger16,  77, AcDb::kDxfXdInteger16, 1,
        AcDb::kDxfXdInteger16, 147, AcDb::kDxfXdReal,0.2,
        AcDb::kDxfXdControlString, "}",
        RTNONE);
Acad::ErrorStatus es = pEnt->setXdata(pRb);
acutRelRb(pRb);

It is very important the xdata you set onto an object have the proper sequence of resbufs. Each override must have both the DXF group code resbuf and the associated value resbuf. In addition, the value must be the correct data type (string, real, or int) and must be within the allowable range for that dimvar. If any of these conditions are not met, AutoCAD may terminate. Also, the 1000 "DSTYLE" and the following 1002 "{" "}" set must be present, and there must only be one set of all of these. 

 

Remember that xdata is obtained and replaced on a per-appId basis. To modify any dimension overrides, work with the complete list of xdata for the "ACAD" appId, which may have other data, including other dimension overrides. So, be sure to obtain whatever xdata may already be present for the "ACAD" appId (use the object's xData() method with the string "ACAD"). Add or remove only the dimension override information you need, making sure that if dimension override information already exists you don't duplicate any of the xdata that's already there (including the "DSTYLE" string and the 1002 "{" "}" bracket pairs). Place new overrides in between the existing 1002 bracket pair, and put the complete modified list back into the object via the object's setXData() method. If not done correctly, AutoCAD may terminate. 

 

Here is a table of all the DimStyleTableRecord dimvars, with their DXF group codes, data types, and value ranges: 

 

Group code 
Dimension variable 
Data type 
Value range 
DIMPOST 
string 
any 
DIMAPOST 
string 
any 
40 
DIMSCALE 
real 
>= 0.0 
41 
DIMASZ 
real 
>= 0.0 
42 
DIMEXO 
real 
>= 0.0 
43 
DIMDLI 
real 
>= 0.0 
44 
DIMEXE 
real 
>= 0.0 
45 
DIMRND 
real 
>= 0.0 
46 
DIMDLE 
real 
>= 0.0 
47 
DIMTP 
real 
>= 0.0 
48 
DIMTM 
real 
>= 0.0 
71 
DIMTOL 
int 
0 = off, 1 = on 
72 
DIMLIM 
int 
0 = off, 1 = on 
73 
DIMTIH 
int 
0 = off, 1 = on 
74 
DIMTOH 
int 
0 = off, 1 = on 
75 
DIMSE1 
int 
0 = off, 1 = on 
76 
DIMSE2 
int 
0 = off, 1 = on 
77 
DIMTAD 
int 
0 - 3 
78 
DIMZIN 
int 
0 - 15 
79 
DIMAZIN 
int 
0 - 15 new 
140 
DIMTXT 
real 
>= 0.0 
141 
DIMCEN 
real 
any value 
142 
DIMTSZ 
real 
>= 0.0 
143 
DIMALTF 
real 
>= 0.0 
144 
DIMLFAC 
real 
>= 0.0 
145 
DIMTVP 
real 
>= 0.0 
146 
DIMTFAC 
real 
>= 0.0 
147 
DIMGAP 
real 
any value 
148 
DIMALTRND 
real 
>= 0.0 new 
170 
DIMALT 
int 
0 = off, 1 = on 
171 
DIMALTD 
int 
>= 0 
172 
DIMTOFL 
int 
0 = off, 1 = on 
173 
DIMSAH 
int 
0 = off, 1 = on 
174 
DIMTIX 
int 
0 = off, 1 = on 
175 
DIMSOXD 
int 
0 = off, 1 = on 
176 
DIMCLRD 
int 
0 - 256 
177 
DIMCLRE 
int 
0 - 256 
178 
DIMCLRT 
int 
0 - 256 
179 
DIMADEC 
int 
0 - 8 new 
271 
DIMDEC 
int 
0 - 8 
272 
DIMTDEC 
int 
0 - 8 
273 
DIMALTU 
int 
1 - 8 
274 
DIMALTTD 
int 
0 - 8 
275 
DIMAUNIT 
int 
0 - 4 
276 
DIMFRAC 
int 
0 - 2 new 
277 
DIMLUNIT 
int 
0 - 4 new 
278 
DIMDSEP 
int (char) 
any char new 
279 
DIMATMOVE 
int 
0 - 2 new 
280 
DIMJUST 
int 
0 - 4 
281 
DIMSD1 
int 
0 = off, 1 = on 
282 
DIMSD2 
int 
0 = off, 1 = on 
283 
DIMTOLJ 
int 
0 - 2 
284 
DIMTZIN 
int 
0 - 15 
285 
DIMALTZ 
int 
0 - 15 
286 
DIMALTTZ 
int 
0 - 15 
288 
DIMUPT 
int 
0 = off, 1 = on 
289 
DIMATFIT 
int 
0 - 3 new 
340 
DIMTXSTY 
objectId 
new 
341 
DIMLDRBLK 
objectId 
new 
342 
DIMBLK 
objectId 
new 
343 
DIMBLK1 
objectId 
new 
344 
DIMBLK2 
objectId 
new 
371 
DIMLWD 
int 
lineweights new 
372 
DIMLWE 
int 
lineweights new