ILoveMadoka Posted April 13, 2010 Posted April 13, 2010 re: DIMASZ Change it at the command prompt and it makes a global change. You can change it for the selected entities via the Properties dialog. How do you change the dimasz of a single entity? I've been digging around in here and it's not evident to me.. HELP?? Quote
ILoveMadoka Posted April 13, 2010 Author Posted April 13, 2010 I've finally found it in the Extended Entity Data. Command: !a ((-1 . <Entity name: 7ee67528>) (0 . "DIMENSION") (5 . "185") (102 . "{ACAD_XDICTIONARY") (360 . <Entity name: 7ee67570>) (102 . "}") (102 . "{ACAD_REACTORS") (330 . <Entity name: 7ee675a0>) (102 . "}") (330 . <Entity name: 7ee65cf8>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbDimension") (2 . "*D2") (10 3.76647 4.90871 0.0) (11 5.39181 3.3427 0.0) (12 0.0 0.0 0.0) (70 . 102) (1 . "") (71 . 5) (72 . 1) (41 . 1.0) (42 . 1.62534) (73 . 0) (74 . 0) (75 . 0) (52 . 0.0) (53 . 0.0) (54 . 0.0) (51 . 0.0) (210 0.0 0.0 1.0) (3 . "Standard") (100 . "AcDbOrdinateDimension") (13 5.39181 4.90871 0.0) (14 5.39181 3.79786 0.0) (15 0.0 0.0 0.0) (16 0.0 0.0 0.0) (40 . 0.0) (50 . 0.0) (-3 ("ACAD" (1000 . "DSTYLE") (1002 . "{") (1070 . 41) [b](1040 . 0.0777)[/b] (1002 . "}")))) I do not know how to isolate this one item to even begin to try to change it. How do I isolate (Assoc 1040 a) ?? Quote
alanjt Posted April 13, 2010 Posted April 13, 2010 I've finally found it in the Extended Entity Data. Command: !a ((-1 . <Entity name: 7ee67528>) (0 . "DIMENSION") (5 . "185") (102 . "{ACAD_XDICTIONARY") (360 . <Entity name: 7ee67570>) (102 . "}") (102 . "{ACAD_REACTORS") (330 . <Entity name: 7ee675a0>) (102 . "}") (330 . <Entity name: 7ee65cf8>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbDimension") (2 . "*D2") (10 3.76647 4.90871 0.0) (11 5.39181 3.3427 0.0) (12 0.0 0.0 0.0) (70 . 102) (1 . "") (71 . 5) (72 . 1) (41 . 1.0) (42 . 1.62534) (73 . 0) (74 . 0) (75 . 0) (52 . 0.0) (53 . 0.0) (54 . 0.0) (51 . 0.0) (210 0.0 0.0 1.0) (3 . "Standard") (100 . "AcDbOrdinateDimension") (13 5.39181 4.90871 0.0) (14 5.39181 3.79786 0.0) (15 0.0 0.0 0.0) (16 0.0 0.0 0.0) (40 . 0.0) (50 . 0.0) (-3 ("ACAD" (1000 . "DSTYLE") (1002 . "{") (1070 . 41) [b](1040 . 0.0777)[/b] (1002 . "}")))) I do not know how to isolate this one item to even begin to try to change it. How do I isolate (Assoc 1040 a) ?? Correct. You could easily entmod it from there. Quote
lpseifert Posted April 13, 2010 Posted April 13, 2010 How do you change the dimasz of a single entity? I may be wrong but I don't think you can change the arrowhead size of a single arrowhead in an associated dimension. If you want to change the size of both arrowheads you can use this. (vlax-put-property obj 'Arrowheadsize [color=Red][i]newsize[/i][/color]) Quote
ILoveMadoka Posted April 13, 2010 Author Posted April 13, 2010 I am in water way over my head here... I just realized that (Assoc 1040) only shows up IF the DIMASZ has been changed from the default. I have no idea how to get the entity list if it has not been changed... In my above example: (Assoc 1040 a) returns nil I cannot "get" anything after this in the entity list.. (-3 ("ACAD" (1000 . "DSTYLE") ps: Sorry for not being clear..., I'm not trying to change one arrow head... I'm actually wanting to change the DIMASZ of an Ordinate Dimension. Quote
ILoveMadoka Posted April 13, 2010 Author Posted April 13, 2010 This thread actually relates to something I'm wanting to do (from another thread..) http://www.cadtutor.net/forum/showthread.php?t=46652 I'm way out my league even attempting to do this in VL... I was trying to modify some existing code but had no idea how to do it.. I can't even do this in vanilla autolisp so I'm really begging for assistance... Quote
alanjt Posted April 13, 2010 Posted April 13, 2010 I may be wrong but I don't think you can change the arrowhead size of a single arrowhead in an associated dimension. If you want to change the size of both arrowheads you can use this. (vlax-put-property obj 'Arrowheadsize [color=Red][i]newsize[/i][/color]) I was thinking that too, but I read the following for Dimasz (per SysvDlg): Controls the size of dimension line and leader line arrowheads. Also controls the size of hook lines. Quote
lpseifert Posted April 13, 2010 Posted April 13, 2010 I see this was sorted in a different thread Quote
alanjt Posted April 13, 2010 Posted April 13, 2010 I see this was sorted in a different thread Decided it was best to post in the original thread. I must have missed it the first time around. Quote
Lee Mac Posted April 13, 2010 Posted April 13, 2010 Dimension overrides through AutoLISP are handled in Extended Data (XData), under the ACAD appname, here is some useful info if you want to approach it that way: Art Cooney (artc@autodesk.com) There's a description of the codes in the ObjectARX documentation (I've included it below). I don't think the DXF documentation explains the overrides. Here's the description from the ObjectARX docs: 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 1002's (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 3 DIMPOST string any 4 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 Quote
alanjt Posted April 13, 2010 Posted April 13, 2010 Dimension overrides through AutoLISP are handled in Extended Data (XData), under the ACAD appname, here is some useful info if you want to approach it that way: Yoink! I seem to remember Kerry saying something about this. I think it's only like that in newer versions, but I'm not 100%. Quote
Lee Mac Posted April 13, 2010 Posted April 13, 2010 Yoink! I seem to remember Kerry saying something about this. I think it's only like that in newer versions, but I'm not 100%. Yeah, this may be one instance where VLISP is the way forward Quote
alanjt Posted April 14, 2010 Posted April 14, 2010 Guys, Thanks much! Always happy to lend a hand. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.