Вот вырезал из одного моего объекта (с упрощением, в оригинале там еще вызовы в MVO)
DIM ap_labelPosition[3][2] - это координаты маркера, чувствительные к масштабу (всего шесть)
ap_frame - это рамка
ap_markerText - это собственно текст
DEFINE STYLE "text" AC_TextFont_1, AC_TextSize_1, 5, 0
STYLE "text"
PEN AC_TextPen_1
IF GLOB_SCALE>25 THEN dd=1
IF GLOB_SCALE<=25 AND GLOB_SCALE>10 THEN dd=2
IF GLOB_SCALE<=10 THEN dd=3
ee=1
ff=2
HOTSPOT2 0, ap_labelPosition[dd][ff], ap_ID, ap_labelPosition[dd][ee], 1+128 : ap_ID=ap_ID+1
HOTSPOT2 -0.1, ap_labelPosition[dd][ff], ap_ID, ap_labelPosition[dd][ee], 3 : ap_ID=ap_ID+1
HOTSPOT2 ap_labelPosition[dd][ee], ap_labelPosition[dd][ff], ap_ID, ap_labelPosition[dd][ee], 2 : ap_ID=ap_ID+1
HOTSPOT2 ap_labelPosition[dd][ee], 0, ap_ID, ap_labelPosition[dd][ff], 1+128 : ap_ID=ap_ID+1
HOTSPOT2 ap_labelPosition[dd][ee], -0.1, ap_ID, ap_labelPosition[dd][ff], 3 : ap_ID=ap_ID+1
HOTSPOT2 ap_labelPosition[dd][ee], ap_labelPosition[dd][ff], ap_ID, ap_labelPosition[dd][ff], 2 : ap_ID=ap_ID+1
ADD2 ap_labelPosition[dd][ee], ap_labelPosition[dd][ff]
HOTSPOT2 0,0
linePositionY = ac_textSize_1/1000*GLOB_SCALE
TEXT2 0, 0, ap_markerText
IF GLOB_FEEDBACK_MODE THEN ap_frame=1
linePositionX = STW(ap_markerText+" ")*0.5/1000*GLOB_SCALE
IF gs_backFill THEN FILL gs_backFill_type
PEN ap_markerPen
POLY2_B 5, ap_frame+2, gs_backfill_pen_fg, gs_backfill_pen_bg,
-linePositionX, linePositionY, 1,
linePositionX, linePositionY, 1,
linePositionX, -linePositionY, 1,
-linePositionX, -linePositionY, 1,
-linePositionX, linePositionY, 1