AcDbDimension - how to create or edit?

AcDbDimension - how to create or edit?

Anonymous
Not applicable
923 Views
8 Replies
Message 1 of 9

AcDbDimension - how to create or edit?

Anonymous
Not applicable
hi everybody,

 

i try to edit a dimension style with the code
below.

it doesn't work. i can't open the
object.

 

what's wrong?

and how to create a dimstyle from new? and set all
the values?

 

thanks for help 🙂

 

chris

 


size=2>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

AcDbDimStyleTable
*pStyleTable;
if(acdbHostApplicationServices()->workingDatabase()->getDimStyleTable(pStyleTable,
AcDb::kForRead) != Acad::eOk)
 return;

 

if(pStyleTable->has("Standard") ==
true)
{
 //pStyleTable->upgradeOpen();
 AcDbObjectId
newId;
 pStyleTable->getAt("Standard", newId);

 pStyleTable->close();
 AcDbDimension
*pDim;
 AcDbEntity *pO;
  if(acdbOpenObject(pO, newId,
AcDb::kForRead) == Acad::eOk)
  {
   // Changes arrowhead
from closed filled to ArchTick
  pDim =
AcDbDimension::cast(pO);
  
pDim->setDimblk("M");
  
pDim->recomputeDimBlock();
   pDim->close();
 
}
 }
0 Likes
924 Views
8 Replies
Replies (8)
Message 2 of 9

Anonymous
Not applicable
Try this here

 

   

AcDbDimStyleTableRecord

*
color=#4b0082>pRec
= 0;


CString
color=#4b0082>m_dimstyle
=
color=#800080>"gglass"
;


Acad::
color=#0000ff>ErrorStatus

color=#4b0082>m_eStatus
;


if(!
color=#0000ff>AcDbSymbolUtilities
::
color=#880000>hasDimStyle
(
color=#4b0082>m_dimstyle
,
color=#a000a0>acdbCurDwg
()))


{


AcDbObjectId
objId;


m_eStatus =
AcDbSymbolUtilities
color=#ff0000>::
getDimStyleId
color=#ff0000>(
objId,
"Standard",
color=#a000a0>acdbCurDwg
());


if(
color=#4b0082>m_eStatus
==
color=#0000ff>Acad
::
color=#a000a0>eOk
)


{


AcDbDimStyleTable
*
pCurT = 0;


m_eStatus =
acdbCurDwg
color=#ff0000>()->
getDimStyleTable
color=#ff0000>(
pCurT,
AcDb::
color=#a000a0>kForWrite
);


if(
color=#4b0082>m_eStatus
==
color=#0000ff>Acad
::
color=#a000a0>eOk
)


{


m_eStatus =
acdbOpenObject
color=#ff0000>(
pRec,
objId,
color=#0000ff>AcDb
::
color=#a000a0>kForRead
);


if(
color=#4b0082>m_eStatus
==
color=#0000ff>Acad
::
color=#a000a0>eOk
)


{


AcDbDimStyleTableRecord
*
pDimRecord =
color=#0000ff>new

color=#0000ff>AcDbDimStyleTableRecord
();


pDimRecord =
(
AcDbDimStyleTableRecord
color=#ff0000>*)
pRec
color=#ff0000>->
clone
color=#ff0000>();


if(
color=#4b0082>pDimRecord
)


{


m_eStatus =
pDimRecord
color=#ff0000>->
setName
color=#ff0000>(
m_dimstyle
color=#ff0000>);


if(
color=#4b0082>m_eStatus
!=
color=#0000ff>Acad
::
color=#a000a0>eOk
)


acedAlert(
color=#800080>"Unable to set dimension style name"

color=#ff0000>);


m_eStatus =
pDimRecord
color=#ff0000>->
setDimblk
color=#ff0000>(
"_ArchTick"
color=#ff0000>);


if(
color=#4b0082>m_eStatus
!=
color=#0000ff>Acad
::
color=#a000a0>eOk
)


acedAlert(
color=#800080>"Unable to set dimblk"
);


m_eStatus =
pDimRecord
color=#ff0000>->
setDimblk1
color=#ff0000>(
"_ArchTick"
color=#ff0000>);


if(
color=#4b0082>m_eStatus
!=
color=#0000ff>Acad
::
color=#a000a0>eOk
)


acedAlert(
color=#800080>"Unable to set dimblk1"
);


m_eStatus =
pDimRecord
color=#ff0000>->
setDimblk2
color=#ff0000>(
"_ArchTick"
color=#ff0000>);


if(
color=#4b0082>m_eStatus
!=
color=#0000ff>Acad
::
color=#a000a0>eOk
)


acedAlert(
color=#800080>"Unable to set dimblk2"
);


m_eStatus =
pDimRecord
color=#ff0000>->
setDimldrblk
color=#ff0000>(
"_ArchTick"
color=#ff0000>);


if(
color=#4b0082>m_eStatus
!=
color=#0000ff>Acad
::
color=#a000a0>eOk
)


acedAlert(
color=#800080>"Unable to set dimldrblk"
);


m_eStatus =
pCurT->
color=#880000>add
(
color=#4b0082>pDimRecord
);


if(
color=#4b0082>m_eStatus
==
color=#0000ff>Acad
::
color=#a000a0>eOk
)


{


m_eStatus =
pDimRecord
color=#ff0000>->
close
color=#ff0000>();


if(
color=#4b0082>m_eStatus
!=
color=#0000ff>Acad
::
color=#a000a0>eOk
)


{


acedAlert(
color=#800080>"Unable to close new dimstyle"
);


pRec->
color=#880000>close
();


pCurT->
color=#880000>close
();


return ;


}


}


else


{


acedAlert(
color=#800080>"Unable to add dimstyle to current drawing"

color=#ff0000>);


pRec->
color=#880000>close
();


pCurT->
color=#880000>close
();


delete
color=#4b0082>pDimRecord
;


return ;


}


}


m_eStatus =
pRec->
color=#880000>close
();


if(
color=#4b0082>m_eStatus
!=
color=#0000ff>Acad
::
color=#a000a0>eOk
)


{


acedAlert(
color=#800080>"Unable to close record of source drawing"

color=#ff0000>);


pCurT->
color=#880000>close
();


return ;


}


}


m_eStatus =
pCurT->
color=#880000>close
();


if(
color=#4b0082>m_eStatus
!=
color=#0000ff>Acad
::
color=#a000a0>eOk
)


acedAlert(
color=#800080>"Unable to close current layer table"

color=#ff0000>);


}


}


else


acedAlert(
color=#800080>"Unable to retrieve dimstyle from source drawing"

color=#ff0000>);


}


Sorry for the way that copy and paste made this
look


style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">

hi everybody,

 

i try to edit a dimension style with the code
below.

it doesn't work. i can't open the
object.

 

what's wrong?

and how to create a dimstyle from new? and set
all the values?

 

thanks for help 🙂

 

chris

 


size=2>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

AcDbDimStyleTable
*pStyleTable;
if(acdbHostApplicationServices()->workingDatabase()->getDimStyleTable(pStyleTable,
AcDb::kForRead) != Acad::eOk)
 return;

 

if(pStyleTable->has("Standard") ==
true)
{
 //pStyleTable->upgradeOpen();
 AcDbObjectId
newId;
 pStyleTable->getAt("Standard", newId);

 pStyleTable->close();
 AcDbDimension
*pDim;
 AcDbEntity *pO;
  if(acdbOpenObject(pO, newId,
AcDb::kForRead) == Acad::eOk)
  {
   // Changes arrowhead
from closed filled to ArchTick
  pDim =
AcDbDimension::cast(pO);
  
pDim->setDimblk("M");
  
pDim->recomputeDimBlock();
   pDim->close();
 
}
 }
0 Likes
Message 3 of 9

Anonymous
Not applicable
hi gary,

 

what a perfect code!

works fine :-))

 

thank you very much

 

chris
0 Likes
Message 4 of 9

Anonymous
Not applicable
hi, how this color code

FONT face="Verdana, Arial, Helvetica" size=1 color="#ff3366">
have been done?<
0 Likes
Message 5 of 9

Anonymous
Not applicable

Vaadake meie uudiste leheküljel:
0 Likes
Message 6 of 9

Anonymous
Not applicable
0 Likes
Message 7 of 9

Anonymous
Not applicable
No problem just let me know if you have any more
questions?


style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">

hi gary,

 

what a perfect code!

works fine :-))

 

thank you very much

 

chris
0 Likes
Message 8 of 9

Anonymous
Not applicable
hi gary,

 

i have another question:

how to set an other dimstyle
current?
0 Likes
Message 9 of 9

Anonymous
Not applicable
You need to call these two functions

 

acdbCurDwg
color=#ff0000>()->
setDimstyle
color=#ff0000>(
m_dimstyleId
color=#ff0000>);


acdbCurDwg
color=#ff0000>()->
setDimstyleData
color=#ff0000>(
m_dimstyleId
color=#ff0000>);


m_dimstyleId is the
ObjectId of the dimstyle you want to make current


 


When you are adding the dimstyle record you can use
this way because it gives you the ObjectId of the dimstyle


color=#ff0000>

pCurT

->
color=#880000>add
(
color=#4b0082>m_dimstyleId
,
color=#4b0082>pDimRecord
);


 


 



style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">

hi gary,

 

i have another question:

how to set an other dimstyle
current?
0 Likes