2019-01-11
12:08 PM
- last edited on
2022-10-04
04:43 PM
by
Daniel Kassai
GSErrCode Dimension_MoveTextToCenter(API_Guid& i_guid)
{
API_ElementMemo memo;
BNZeroMemory(&memo, sizeof(memo));
GSErrCode err = ACAPI_Element_GetMemo(i_guid, &memo, APIMemoMask_AdditionalPolygon);
if (err != NoError)
DBGPrintlnf("[" __FUNC__ "] ERROR %s - ACAPI_Element_GetMemo(APIMemoMask_AdditionalPolygon)", ErrId2Name(err));
else
{
bool hasChanges = false;
const UInt32 nDimElem = BMGetHandleSize((GSHandle)memo.dimElems) / sizeof(API_DimElem);
for (UInt32 d = 1; d < nDimElem; ++d)
{
auto& dimElem = (*memo.dimElems);
if (dimElem.dimVal == 0) continue;
auto& dimElemPrev = (*memo.dimElems)[d - 1];
if (!Dimension_MoveTextToCenter(dimElem.note, dimElem.pos, dimElemPrev.pos))
continue;
double length = 0;
const GSErrCode err = Any_GetTextLineLength(dimElem.note, length);
if (err != NoError)
{
DBGPrintlnf("[Error] %s " __FUNC__ " - ACAPI_Goodies(APIAny_GetTextLineLengthID)", ErrId2Name(err));
break;
}
API_Coord pos;
pos.x = (dimElem.pos.x + dimElemPrev.pos.x) / 2;
pos.y = (dimElem.pos.y + dimElemPrev.pos.y) / 2;
if (dimElem.note.noteAngle != 0) RotatePoint(pos, -dimElem.note.noteAngle);
pos.x -= (length / 2);
pos.y += (GetDrawingScale() / 2) / 1000;
if (dimElem.note.noteAngle != 0) RotatePoint(pos, dimElem.note.noteAngle);
dimElem.note.pos = pos;
dimElem.note.fixPos = true;
hasChanges = true;
}
if (err == NoError && hasChanges)
{
ACAPI_CallUndoableCommand("Change Memo", [&]() -> GSErrCode {
err = ACAPI_Element_ChangeMemo(i_guid, APIMemoMask_AdditionalPolygon, &memo);
return NoError; });
if (err == NoError) DBGPrintlnf("[" __FUNC__ "] SUCCESS ACAPI_Element_ChangeMemo");
else DBGPrintlnf("[Error] %s " __FUNC__ " - ACAPI_Element_ChangeMemo()", ErrId2Name(err));
}
}
ACAPI_DisposeElemMemoHdls(&memo);
return err;
}
Solved! Go to Solution.
2019-02-04 05:37 PM
2019-01-30 06:44 PM
2019-02-01 04:08 AM
sznagy wrote:that was ArchiCAD 22 3006 INT FULL
Hello,
Could you specify the version of ArchiCAD you are using?
2019-02-04 05:37 PM
2019-02-13 06:17 AM
sznagy wrote:Thank you, and yes it is important as we are creating lots of dimensions and it will be quite a hassle for our users to turn each back on manually.
Yes, it is indeed a bug. I made an entry for it. Let me know if this is a great deal for the project, and we will do our best to fix it.